降级 GKE 上的 Anthos Service Mesh

本指南介绍如何在 Google Cloud 上的 GKE 集群上将 Anthos Service Mesh 从 1.6.14 降级为 1.5.10。

重新部署 Anthos Service Mesh 控制层面组件大约需要 5 到 10 分钟才能完成。此外,您需要在所有工作负载中注入新的 Sidecar 代理,以便这些 Sidecar 代理通过当前 Anthos Service Mesh 版本进行更新。更新 Sidecar 代理所需的时间取决于多种因素,例如 Pod 数量、节点数量、部署扩缩设置、Pod 中断预算和其他配置设置。更新 Sidecar 代理所需的时间估计约为每分钟 100 个 Pod。

降级概览

本部分概述了降级 Anthos Service Mesh 所需执行的步骤。

准备

  1. 查看支持的功能和本指南,熟悉这些功能和降级流程。

  2. 如果您在安装以前版本的 Anthos Service Mesh 时启用了可选功能,则需要在降级时启用相同的功能。如需启用可选功能,您可以添加 --set values 标志,或在运行 istioctl install 命令时通过 YAML 文件指定 -f 标志。

  3. 如果要在专用集群上降级 Anthos Service Mesh,则若要使用自动 Sidecar 注入,您必须添加防火墙规则以打开端口 15017。如果您未添加防火墙规则并启用了自动 Sidecar 注入,则在部署工作负载时会收到错误。如需详细了解如何添加防火墙规则,请参阅针对特定用例添加防火墙规则

降级

  1. 按照本指南中的步骤准备 Anthos Service Mesh 降级。

  2. 降级 Anthos Service Mesh

  3. 更新边车代理

  4. 测试您的应用,验证工作负载是否正常工作。

设置您的环境

如需在 Google Kubernetes Engine 上进行安装,您可以使用 Cloud Shell、Google Cloud 资源的浏览器内置命令行界面或您自己运行 Linux 或 macOS 的计算机,按照安装指南操作。

选项 A:使用 Cloud Shell

Cloud Shell 预配一个运行基于 Debian 的 Linux 操作系统的 g1-small Compute Engine 虚拟机 (VM)。使用 Cloud Shell 的优势如下:

  • Cloud Shell 包含您需要的 gcloudkubectlhelm 命令行工具。

  • 您的 Cloud Shell $HOME 目录具有 5GB 永久性存储空间。

  • 您可以选择文本编辑器

    • 代码编辑器,可通过点击 Cloud Shell 窗口顶部的 来访问。

    • Emac、Vim 或 Nano,可从 Cloud Shell 中的命令行访问。

如需使用 Cloud Shell,请执行以下操作:

  1. 前往 Google Cloud 控制台
  2. 选择您的 Google Cloud 项目。
  3. 点击 Google Cloud 控制台窗口顶部的激活 Cloud Shell 按钮。

    Google Cloud Platform 控制台

    一个 Cloud Shell 会话随即会在 Google Cloud 控制台底部的新框内打开,并显示命令行提示符。

    Cloud Shell 会话

  4. 更新组件:

    gcloud components update
    

    该命令会以如下所示的输出作为响应:

    ERROR: (gcloud.components.update)
    You cannot perform this action because the gcloud CLI component manager
    is disabled for this installation. You can run the following command
    to achieve the same result for this installation:
    
    sudo apt-get update && sudo apt-get --only-upgrade install ...
  5. 复制并粘贴长命令以更新组件。

  6. 请确保 Git 位于您的路径中,以便 kpt 能够找到它。

选项 B:在本地使用命令行工具

在本地机器上,安装并初始化 gcloud CLI

如果您已安装 gcloud CLI,请执行以下操作:

  1. 使用 gcloud CLI 进行身份验证:

    gcloud auth login
    
  2. 更新组件:

    gcloud components update
    
  3. 安装 kubectl

    gcloud components install kubectl
    
  4. 安装 kpt

    gcloud components install kpt
    
  5. 请确保 Git 位于您的路径中,以便 kpt 能够找到它。

设置环境变量

  1. 获取创建集群的项目的 ID 和队列宿主项目的编号。

    gcloud

    运行以下命令:

    gcloud projects list
    

    控制台

    1. 前往 Google Cloud 控制台中的信息中心页面

      前往“信息中心”页面

    2. 点击页面顶部的从以下列表中选择:下拉列表。在随即显示的从以下列表中选择:窗口中,选择您的项目。

      项目 ID 会显示在项目信息中心的项目信息卡片上。

  2. 为在其中创建集群的项目的 ID 创建环境变量:

    export PROJECT_ID=YOUR_PROJECT_ID

  3. 为队列宿主项目的项目编号创建环境变量:

    export FLEET_PROJECT_NUMBER=YOUR_FLEET_PROJECT_NUMBER

  4. 创建以下环境变量:

    • 设置集群名称:

      export CLUSTER_NAME=YOUR_CLUSTER_NAME
    • CLUSTER_LOCATION 设置为您的集群区域或集群地区:

      export CLUSTER_LOCATION=YOUR_ZONE_OR_REGION

设置凭据和权限

  1. 获取身份验证凭据以便与集群进行交互:

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --project=${PROJECT_ID}
    
  2. 向当前用户授予集群管理员权限。您需要这些权限,以便为 Anthos Service Mesh 创建必要的基于角色的访问权限控制 (RBAC) 规则:

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user="$(gcloud config get-value core/account)"

如果看到 "cluster-admin-binding" already exists 错误,您可以放心地忽略该错误并继续采用现有集群管理员绑定。

下载安装文件

    Linux

  1. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-linux.tar.gz
  2. 下载签名文件并使用 openssl 验证签名:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-linux.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.5.10-asm.2-linux.tar.gz.1.sig istio-1.5.10-asm.2-linux.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  3. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
    tar xzf istio-1.5.10-asm.2-linux.tar.gz

    该命令会在当前工作目录中创建一个名为 istio-1.5.10-asm.2 的安装目录,其中包含:

    • samples 目录中的示例应用。
    • 用于安装 Anthos Service Mesh 的 istioctl 命令行工具位于 bin 目录中。
    • Anthos Service Mesh 配置文件位于 manifests/profiles 目录中。

  4. Mac OS

  5. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-osx.tar.gz
  6. 下载签名文件并使用 openssl 验证签名:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.5.10-asm.2-osx.tar.gz.1.sig istio-1.5.10-asm.2-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  7. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
    tar xzf istio-1.5.10-asm.2-osx.tar.gz

    该命令会在当前工作目录中创建一个名为 istio-1.5.10-asm.2 的安装目录,其中包含:

    • samples 目录中的示例应用。
    • 用于安装 Anthos Service Mesh 的 istioctl 命令行工具位于 bin 目录中。
    • Anthos Service Mesh 配置文件位于 manifests/profiles 目录中。

  8. Windows

  9. 将 Anthos Service Mesh 安装文件下载到当前工作目录中:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-win.zip
  10. 下载签名文件并使用 openssl 验证签名:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.5.10-asm.2-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.5.10-asm.2-win.zip.1.sig istio-1.5.10-asm.2-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    预期输出为 Verified OK

  11. 将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
    tar xzf istio-1.5.10-asm.2-win.zip

    该命令会在当前工作目录中创建一个名为 istio-1.5.10-asm.2 的安装目录,其中包含:

    • samples 目录中的示例应用。
    • 用于安装 Anthos Service Mesh 的 istioctl 命令行工具位于 bin 目录中。
    • Anthos Service Mesh 配置文件位于 manifests/profiles 目录中。

  12. 确保您位于 Anthos Service Mesh 安装的根目录。
    cd istio-1.5.10-asm.2
  13. 为方便起见,请将 /bin 目录中的工具添加到 PATH:
    export PATH=$PWD/bin:$PATH

准备资源配置文件

运行 istioctl install 命令时,请在命令行中指定 -f istio-operator.yaml。此文件包含 Anthos Service Mesh 所需的项目和集群的相关信息。您需要下载包含 istio-operator.yaml 和其他资源配置文件的软件包,以便设置项目和集群信息。

首先,根据您要使用的证书授权机构 (CA) 选择要下载的软件包:

  • asm此软件包可启用 Mesh CA(建议用于新安装)。

  • asm-citadel:您可以选择启用 Citadel 作为 CA。在选择此软件包之前,请参阅选择证书授权机构以了解详情。

如需准备资源配置文件,请执行以下操作:

  1. 为 Anthos Service Mesh 软件包资源配置文件创建一个新目录。我们建议您使用集群名称作为目录名称。

  2. 切换到您要在其中下载 Anthos Service Mesh 软件包的目录。

  3. 下载 asm 软件包:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.5-asm asm
    
  4. 为在其中创建集群的项目设置项目 ID:

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  5. 设置集群名称:

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  6. 设置默认区域或地区:

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    

降级 Anthos Service Mesh

如需降级 Anthos Service Mesh,请执行以下操作:

istioctl install \
  -f asm/cluster/istio-operator.yaml \
  --set profile=asm-gcp

检查控制层面组件

降级需要重新安装控制层面组件,此过程大约需要 5 到 10 分钟才能完成。旧的控制层面组件会被终止,然后在安装新组件时被删除。您可以通过查看工作负载的 AGE 列中的值来检查进度。

kubectl get pod -n istio-system

输出示例:

NAME                                     READY   STATUS        RESTARTS   AGE
istio-ingressgateway-5bfdf7c586-v6wxx    2/2     Terminating   0          25m
istio-ingressgateway-7b598c5557-b88md    2/2     Running       0          5m44s
istiod-78cdbbbdb-d7tps                   1/1     Running       0          5m16s
promsd-576b8db4d6-lqf64                  2/2     Running       1          5m26s

在此示例中,有两个 istio-ingressgateway 实例。系统正在终止 AGE 列中具有 25m 的实例。所有其他组件均为新安装组件。

更新边车代理

降级之前在集群上运行的任何工作负载都需要重新注入边车代理,以使其具有当前 Anthos Service Mesh 版本。

借助自动 Sidecar 注入,您可以通过 pod 重启来更新现有 pod 的 Sidecar。如何重启 pod 取决于 pod 是否在 Deployment 中创建。

  1. 如果您使用了 Deployment,请重启 Deployment,这会重启所有安装了 Sidecar 的 Pod:

    kubectl rollout restart deployment -n YOUR_NAMESPACE

    如果您未使用 Deployment,请删除 Pod,系统会自动重新创建 Pod 及其 Sidecar:

    kubectl delete pod -n YOUR_NAMESPACE --all
  2. 检查命名空间中的所有 Pod 是否都已注入 Sidecar:

    kubectl get pod -n YOUR_NAMESPACE

    在上一个命令的以下示例输出中,注意 READY 列表示每个工作负载均有两个容器:主容器和边车代理的容器。

    NAME                    READY   STATUS    RESTARTS   AGE
    YOUR_WORKLOAD           2/2     Running   0          20s
    ...