将工作负载迁移到 Knative OSS

使用本指南迁移工作负载,使其通过 Google Kubernetes Engine 在开源 Knative 产品上运行。一般来说,迁移工作负载需要在新的 GKE 集群中安装 Knative Serving 组件,然后将每项服务重新部署到该 Knative 集群。

虽然您可以自行决定是否使用、管理和支持开源 Knative,但您需要负责迁移到 Knative。迁移到 Knative 后,您将有机会继续在 Google Kubernetes Engine 平台上运行工作负载。

需注意的差异:

  • 我们仅提供 Google Kubernetes Engine 支持。您可以与 Knative 社区联系以获取 Knative 支持。
  • 只有 Google Kubernetes Engine 支持 Google Cloud CLI (gcloud)。Knative 支持 kubectlkn 命令。了解如何安装 kn

准备工作

在 Google Kubernetes Engine 上安装 Knative

Knative 提供了多种安装选项和网络层供您选择使用。以下 Knative 安装步骤使用 Knative Operator 方法Istio 网络层

  1. 安装 Knative 运算符:

    1. 将 Operator 部署到您的集群:

      kubectl apply -f https://github.com/knative/operator/releases/download/knative-vVERSION/operator.yaml
      

      VERSION 替换为 Knative 运算符的版本

      示例:

      kubectl apply -f https://github.com/knative/operator/releases/download/knative-v1.3.1/operator.yaml
      
    2. 设置 kubectl CLI 以使用 default 命名空间:

      kubectl config set-context --current --namespace=default
      
    3. 验证 Operator 是否已成功创建:

      kubectl get deployment knative-operator
      

      结果:

      NAME               READY   UP-TO-DATE   AVAILABLE   AGE
      knative-operator   1/1     1            1           6m43s
      
  2. 安装 Knative Serving 组件:

    1. 使用以下代码创建一个 YAML 文件,例如 SERVING_FILENAME.yaml:

      apiVersion: v1
      kind: Namespace
      metadata:
        name: knative-serving
      ---
      apiVersion: operator.knative.dev/v1alpha1
      kind: KnativeServing
      metadata:
        name: knative-serving
        namespace: knative-serving
      
    2. 将 YAML 文件部署到您的集群:

      kubectl apply -f SERVING_FILENAME.yaml
      

      SERVING_FILENAME 替换为您创建的 YAML 文件。

  3. 安装带有 Sidecar 注入功能的 Istio 作为网络层:

    您可以选择执行和配置备用 Istio 安装。 您可以在 Knative 网站上查看所有 Istio 安装选项。请注意,安装过程可能需要 30 分钟或更长时间。

    1. 从发布页面下载 Istio

    2. 通过运行带有 --set hub=gcr.io/istio-release 标志的以下命令来安装 Istio,以避免 Docker 速率限制

      istioctl install --set hub=gcr.io/istio-release
      
    3. 运行以下命令以启用 Sidecar 注入功能:

      kubectl label namespace default istio-injection=enabled
      
    4. 可选:默认情况下,Istio 安装在 istio-system 命名空间中。如果要配置其他命名空间,您可以按照以下步骤操作:

      1. 如需为 Istio 配置自定义命名空间,请将 spec.config.istio 特性附加到 SERVING_FILENAME.yaml 配置文件。例如:

        apiVersion: operator.knative.dev/v1alpha1
        kind: KnativeServing
        metadata:
          name: knative-serving
          namespace: knative-serving
        spec:
          # ...
          config:
            istio:
              local-gateway.LOCAL_GATEWAY_NAMESPACE.knative-local-gateway: "knative-local-gateway.ISTIO_NAMESPACE.svc.cluster.local"
        

        您需要在其中:

        • LOCAL_GATEWAY_NAMESPACE 是安装了 Knative Serving 的命名空间。默认值:knative-serving
        • ISTIO_NAMESPACE 是安装 Istio 的命名空间。默认值:istio-system
      2. 将更新后的 SERVING_FILENAME.yaml 服务部署到 Knative 集群:

        kubectl apply -f SERVING_FILENAME.yaml
        
      3. 确认 istio-ingressgateway 位于您指定的命名空间中,以验证 Istio 安装:

        kubectl get svc istio-ingressgateway -n ISTIO_NAMESPACE
        

        ISTIO_NAMESPACE 替换为您安装 Istio 的命名空间。默认值:istio-system

        结果:

        NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                                      AGE
        istio-ingressgateway   LoadBalancer   10.232.10.190   34.123.5.116   15021:30337/TCP,80:32549/TCP,443:31210/TCP   119m
        

迁移服务

如需迁移服务,请将服务的 YAML 配置文件部署到 Knative 集群。

  1. 运行以下命令,将 Knative 服务服务导出到本地 YAML 文件:

    gcloud run services describe SERVICE --format export --namespace NAMESPACE --cluster CLUSTER --platform gke > FILENAME.yaml
    

    您需要在其中:

    • SERVICE 替换为您的 Knative 服务服务的名称。
    • NAMESPACE 替换为运行服务的命名空间。
    • CLUSTER 替换为运行服务的集群的名称。
    • FILENAME 替换为您选择的唯一文件名。
  2. 修改导出的 FILENAME.yaml 文件,通过删除以下任何属性及其值来移除不需要的 Knative 服务配置:

    • metadata.annotations.kubectl.kubernetes.io/last-applied-configuration
    • metadata.managedFields
    • spec.template.spec.containers.readinessProbes
    • spec.template.spec.enableServiceLinks

      例如,您可能需要从 spec: > template: > spec: > containers: 特性下移除以下配置:

      ...
       readinessProbe:
         successThreshold: 1
         tcpSocket: {}
      ...
      
  3. 将修改后的 .yaml 文件部署到 Knative 集群:

    kubectl apply -f SERVICE.yaml
    

    SERVICE 替换为服务的配置文件的名称。

  4. 使用测试网域或 cURL 命令访问您部署的服务。您可以使用通配符 DNS 服务来测试对服务的外部访问。如需了解更多选项,请参阅 Knative 文档中的配置 DNS 部分。

    如需使用魔法 DNS (sslip.io),请运行以下命令。

    请注意,您也可以直接使用 sslip.io

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-vVERSION/serving-default-domain.yaml
    

    VERSION 替换为您的 Knative Serving 的版本

    示例:

    kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.3.0/serving-default-domain.yaml
    

将流量迁移到您的服务

在测试新部署的服务并准备好迁移所有生产流量后,您可以配置自定义网域并向注册商更新 DNS 记录。按照配置自定义网域中的说明进行操作。