将工作负载迁移到 Knative OSS

使用本指南迁移工作负载,以在具有 Google Kubernetes Engine 的开源 Knative 产品上运行。通常,迁移工作负载要求您在新的 GKE 集群中安装 Knative Serving 组件,然后将每个服务重新部署到该 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 Operator:

    1. 将此 Operator 部署到集群:

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

      VERSION 替换为 Knative Operator 的版本

      示例:

      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 serving 服务导出到本地 YAML 文件:

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

    您需要进行如下替换:

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

    • 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 记录。按照配置自定义网域中的说明进行操作。