环境设置和升级准备

通过设置命令行环境、创建环境变量并下载迁移脚本,为升级之前安装的 Knative 服务并迁移工作负载做好准备。

准备工作

  • 在升级之前,您必须先查看并确保满足要求

  • 默认情况下,Cloud Shell 包含最新版本的 gcloudkubectl 命令。如果您选择使用本地机器的命令行环境,则必须确保满足以下最低要求:

    • gcloud 版本 346.0.0 或更高版本
    • kubectl 客户端版本 1.21 或更高版本

    详细了解如何设置命令行工具

  • 本页面中的准备步骤是整个升级和迁移过程所必需的。

    重要提示:此过程中使用的所有命令都依赖于您在下面设置的环境变量。例如,如果您关闭 Cloud Shell 或会话超时,则必须确保重置所需的环境变量。

设置环境

  1. 如需使用 Cloud Shell,请在 Google Cloud Console 中打开 Cloud Shell:

    激活 Cloud Shell

    重要提示:Cloud Shell 具有用量限额,并且可能会超时。如果会话超时,您必须确保重置所需的环境变量。

  2. 创建以下必需的环境变量:

    1. 为您的 Google Cloud 项目和集群详细信息设置变量:

      export PROJECT_ID=PROJECT_ID
      export CLUSTER_NAME=CLUSTER_NAME
      export CLUSTER_LOCATION=CLUSTER_LOCATION
      

      替换以下内容:

      • PROJECT_ID 替换为您的 Google Cloud 项目的 ID。
      • CLUSTER_NAME 替换为集群的 ID 或集群的完全限定标识符。
      • CLUSTER_LOCATION 替换为您的集群所在的区域或可用区
    2. 根据您的配置,您必须确定正在处理集群中流量的入站网关。请务必确定实际配置并正在处理流量的 Istio 版本。

      • 如果您使用捆绑版 Istio,请验证入站流量服务名称为 gke-system 命名空间中的 istio-ingress

        kubectl get svc istio-ingress -n gke-system
        

        结果:返回配置的详细信息。

      • 如果您安装了“Istio 插件”,则必须确定已配置且正在处理流量的入站流量网关,具体方法是获取服务的 IP 地址并确定您的网域配置了哪个服务。

        1. 获取每个入站流量服务的 EXTERNAL-IP 地址:

          运行以下命令,获取“捆绑版 Istio”(istio-ingress) 和“Istio 插件 (istio-ingressgateway)”入站流量服务的配置详细信息:

          kubectl get svc istio-ingress -n gke-system
          kubectl get svc istio-ingressgateway -n istio-system
          

          输出示例

          记下每个服务的 EXTERNAL-IP 值。

           NAME                 TYPE         CLUSTER-IP  EXTERNAL-IP    PORT(S)                                     AGE
           istio-ingress        LoadBalancer 11.11.1.111 12.345.678.910 15020:31265/TCP,80:30059/TCP,443:32004/TCP  8d
          
           NAME                 TYPE         CLUSTER-IP  EXTERNAL-IP    PORT(S)                                                                     AGE
           istio-ingressgateway LoadBalancer 22.22.2.222 10.987.654.321 15021:32747/TCP,80:30695/TCP,443:32695/TCP,15012:32369/TCP,15443:30909/TCP  88d
          
        2. 通过自定义网域的 DNS 记录确定哪个外部 IP 地址被配置为处理流量:

          1. 前往 Knative 服务网域映射页面:

            前往“网域映射”

          2. 点击服务右侧的三点状垂直省略号图标,然后点击 DNS 记录以显示所有 DNS 记录:

            选择 DNS 记录

            根据上面的示例,如果 DNS 记录配置设置为 istio-ingressgateway 服务 的 10.987.654.321 IP 地址,则表示正在使用 Istio 插件入站流量网关处理流量。

    3. 为处理集群流量的入站流量服务的名称和命名空间设置变量:

      export INGRESS_NAME=INGRESS_NAME
      export INGRESS_NAMESPACE=INGRESS_NAMESPACE
      

      替换以下内容:

      • INGRESS_NAME 替换为您在上一步中确定的入站流量服务的名称。

      • INGRESS_NAMESPACE 替换为您在上一步中确定的入站流量服务的命名空间。

  3. 配置 Google Cloud CLI:

    gcloud config set project ${PROJECT_ID}
    gcloud container clusters get-credentials ${CLUSTER_NAME} --region ${CLUSTER_LOCATION}
    
  4. 对于专用集群:

    • 如果您已经可以从将运行迁移脚本的客户端访问专用集群,则可以跳到下一步。

    • 如果专用集群启用了 master-authorized-network,您可以通过将客户端 IP 地址添加到 master-authorized-networks 许可名单来启用从将运行迁移脚本的客户端访问专用集群的权限:

      gcloud container clusters update ${CLUSTER_NAME} \
          --region=${CLUSTER_LOCATION} \
          --enable-master-authorized-networks \
          --master-authorized-networks $(curl ifconfig.me)/32
      
  5. 下载 Knative 服务迁移脚本:

    TMP_DIR=$(mktemp -d)
    gsutil cp gs://crfa-to-hub-upgrade/migration-addon.sh $TMP_DIR
    cd $TMP_DIR
    chmod +x ./migration-addon.sh
    
  6. 运行以下命令以停用“缩减至零”;否则,当主节点更新时,扩缩将失败并导致错误:

    kubectl patch cm config-autoscaler -n knative-serving -p '{"data":{"enable-scale-to-zero": "false"}}'
    

    请注意,此升级和迁移过程的最后一步是重新启用“缩减至零”。

后续步骤

卸载 GKE 插件