本指南说明了如何在 GKE on VMware 上将 Anthos Service Mesh 从版本 1.6.4+ 升级到版本 1.7.8。如需从 Anthos Service Mesh 1.4.5 及更高版本升级,您必须先升级到 Anthos Service Mesh 1.5。不支持从 Anthos Service Mesh 1.4 直接升级到 1.6。
升级时,我们建议您执行双控制层面升级(也称为 Canary 版升级),在使用较小百分比的工作负载测试新版本时,新版本和先前版本的控制层面均会运行。此方法比就地升级更安全,因为新版本的控制层面会替换先前版本。请注意,istio-ingressgateway 已就地升级,因此您应该规划好集群中断。重新部署 Anthos Service Mesh 控制层面组件大约需要 5 到 10 分钟才能完成。此外,您需要在所有工作负载中注入新的 Sidecar 代理,以便这些 Sidecar 代理通过当前 Anthos Service Mesh 版本进行更新。更新 Sidecar 代理所需的时间取决于多种因素,例如 Pod 数量、节点数量、部署扩缩设置、Pod 中断预算和其他配置设置。更新 Sidecar 代理所需的时间估计约为每分钟 100 个 Pod。
准备升级
如果您自定义了先前的安装,则在升级 Anthos Service Mesh 时也需要使用相同的自定义设置。如果您通过向 istioctl install
添加 --set values
标志自定义安装,我们建议您将这些设置添加到 IstioOperator
YAML 文件中(尽管您可以继续使用 --set_values
标志)。要自定义安装,请在运行 istioctl install
命令时用 YAML 文件指定 -f
标志。
设置您的环境
在要安装 Anthos Service Mesh 的机器上,您需要以下工具。请注意,您只能在用户集群上安装 Anthos Service Mesh,不能在管理员集群上安装。
curl
命令行工具。- Google Cloud CLI。
安装 Google Cloud CLI 后:
使用 Google Cloud CLI 进行身份验证:
gcloud auth login
更新组件:
gcloud components update
安装
kubectl
:gcloud components install kubectl
安装所需的
kpt
版本:curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2 chmod +x kpt_0_39_2 alias kpt="$(readlink -f kpt_0_39_2)"
将上下文切换到用户集群:
kubectl config use-context CLUSTER_NAME
向您的用户账号(您的 Google Cloud 登录电子邮件地址)授予集群管理员权限。您需要这些权限,以便为 Anthos Service Mesh 创建必要的基于角色的访问权限控制 (RBAC) 规则:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=USER_ACCOUNT
下载安装文件
-
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz
-
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.7.8-asm.10-linux-amd64.tar.gz.1.sig istio-1.7.8-asm.10-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
-
将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.7.8-asm.10-linux-amd64.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.7.8-asm.10
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
-
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz
-
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.7.8-asm.10-osx.tar.gz.1.sig istio-1.7.8-asm.10-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
-
将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.7.8-asm.10-osx.tar.gz
该命令会在当前工作目录中创建一个名为
istio-1.7.8-asm.10
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
-
将 Anthos Service Mesh 安装文件下载到当前工作目录中:
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip
-
下载签名文件并使用
openssl
验证签名:curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.8-asm.10-win.zip.1.sig openssl dgst -verify - -signature istio-1.7.8-asm.10-win.zip.1.sig istio-1.7.8-asm.10-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
预期输出为
Verified OK
-
将文件内容提取到文件系统上的任意位置。例如,如需将内容提取到当前工作目录,请运行以下命令:
tar xzf istio-1.7.8-asm.10-win.zip
该命令会在当前工作目录中创建一个名为
istio-1.7.8-asm.10
的安装目录,其中包含:samples
目录中的示例应用。- 用于安装 Anthos Service Mesh 的
istioctl
命令行工具位于bin
目录中。 - Anthos Service Mesh 配置文件位于
manifests/profiles
目录中。
-
确保您位于 Anthos Service Mesh 安装的根目录。
cd istio-1.7.8-asm.10
-
为方便起见,请将
/bin
目录中的工具添加到 PATH:export PATH=$PWD/bin:$PATH
Linux
Mac OS
Windows
升级 Anthos Service Mesh
如需安装新版本的 Anthos Service Mesh,我们建议您按照双控制平面升级过程(在 Istio 文档中称为 Canary 版升级)操作。通过双控制层面升级,您可以在现有控制层面的基础上安装新版本控制层面。安装新版本时,您要添加可标识新控制平面版本的 revision
标签。每个修订版本都是一个完整的 Anthos Service Mesh 控制平面实现,具有自己的 Deployment 和 Service。
然后,通过在工作负载上设置相同的 revision
标签以指向新的控制平面,并执行滚动重启以使用新的 Anthos Service Mesh 版本重新注入代理,从而迁移到新版本。通过这种方法,您可以监控升级对一小部分工作负载的影响。测试应用后,您可以将所有流量迁移到新版本。此方法比执行就地升级更安全,因为新控制平面会替换先前版本的控制平面。
更新控制层面
运行以下命令以部署新的控制平面。如果您要启用受支持的可选功能,请在以下命令行中添加 -f
和 YAML 文件名。如需了解详情,请参阅启用可选功能。
istioctl install \ --set profile=asm-multicloud \ --set revision=asm-178-10
--set revision
参数会向 istiod
添加一个 istio.io/rev
标签。运行该命令后,您将并排运行两个控制层面 Deployment 和 Service:
kubectl get pods -n istio-system
输出示例:
NAME READY STATUS RESTARTS AGE istio-ingressgateway-c56675fcd-86zdn 1/1 Running 0 2m9s istio-ingressgateway-c56675fcd-vn4nv 1/1 Running 0 2m21s istiod-asm-178-10-6d5cfd4b89-xztlr 1/1 Running 0 3m44s istiod-fb7f746f4-wcntn 1/1 Running 0 50m promsd-579f9f9bf4-m65nc 2/2 Running 1 50m
重新部署工作负载
安装新修订版本对现有 Sidecar 代理没有影响。如需升级这些代理,您必须将其配置为指向新控制层面。这会在 Sidecar 注入期间根据命名空间标签 istio.io/rev
进行控制。
更新工作负载以注入新的 Anthos Service Mesh 版本:
kubectl label namespace NAMESPACE istio-injection- istio.io/rev=asm-178-10 --overwrite
istio-injection
标签必须移除,因为它优先于istio.io/rev
标签。重启 pod 以触发重新注入:
kubectl rollout restart deployment -n NAMESPACE
验证 pod 是否配置为指向
istiod-asm-178-10
控制平面:kubectl get pods -n NAMESPACE -l istio.io/rev=asm-178-10
测试您的应用,验证工作负载是否正常工作。
如果您在其他命名空间中存在工作负载,请对每个命名空间重复上述步骤。
如果您确信应用正在按预期运行,请跳至完成升级。否则,请按照以下步骤操作,回滚到以前的版本。
更新要用控制平面的先前版本注入的工作负载,请运行以下命令:
kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
重启 Pod 以触发重新注入,以便代理具有以前的版本:
kubectl rollout restart deployment -n NAMESPACE
回滚控制平面组件,请执行以下操作:
回滚到之前的 1.6 版
重新部署旧版
istio-ingressgateway
:kubectl -n istio-system rollout undo deploy istio-ingressgateway
移除新的控制层面:
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-asm-178-10 -n istio-system --ignore-not-found=true
回滚到 1.5
切换到下载 1.5 Anthos Service Mesh 安装文件的目录。
重新安装旧版 Anthos Service Mesh。在以下命令中,如果您已启用可选功能,请务必添加适用的
--set values
标志或带有 YAML 文件名的-f
标志。bin/istioctl install \ --set profile=asm-multicloud \
完成升级
如果您确信应用正按预期运行,请移除旧的控制平面以完成升级:
kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true