本页面介绍如何升级 Anthos Service Mesh。
平台管理员可以升级 Anthos Service Mesh。升级 Anthos Service Mesh 是基于修订版本的升级或 Canary 版升级,当您使用一小部分工作负载测试新版本时,新版本和先前版本的控制层面都将正常运行。此方法比就地升级更安全,因为新版本的控制层面会替换先前版本。
重新部署 Anthos Service Mesh 控制层面组件大约需要 5 到 10 分钟才能完成。您还必须将新 Sidecar 代理注入所有工作负载,以便这些 Sidecar 代理通过当前 Anthos Service Mesh 版本进行更新。更新 Sidecar 代理所需的时间大约为每分钟 100 个 Pod,但具体取决于多种因素,例如 Pod 的数量、节点数量、部署扩缩设置、Pod 中断预算和其他配置设置
前提条件
在升级之前,请确保满足以下条件:
- 您有一个由管理员集群管理的目标用户集群。
- 目标用户集群的现有 Anthos Service Mesh 安装有可用的升级。
查看现有安装
确认您的集群上是否已安装 Anthos Service Mesh。
控制台
在管理中心主控台中,转到服务网格菜单,查看安装了 Anthos Service Mesh 的集群列表。
API
您可以在管理员集群上找到以下用于描述当前 Anthos Service Mesh 安装的自定义资源:
ServiceMeshBinding
对象,该对象会将ServiceMeshFeatureSpec
对象与您的用户集群的 ID 绑定。运行以下命令可找到该对象。由于此命令可能会返回多个对象,因此您必须在其规范中通过目标集群的 ID 找到该对象。KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshbinding -n anthos-management-center
下面是一个该对象的内容示例:
apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1 kind: ServiceMeshBinding metadata: name: service-mesh-binding-sample namespace: anthos-management-center spec: configs: - configRef: name: PREVIOUS_SERVICE_MESH_SPEC namespace: anthos-management-center placement: clusterIDs: - TARGET_CLUSTER_ID
ServiceMeshFeatureSpec
对象,用于定义 Anthos Service Mesh 安装的规范。以上示例中所述的ServiceMeshBinding
对象的config.configRef
字段中引用了该对象的命名空间和名称。运行以下命令可查看该对象。KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshfeaturespec PREVIOUS_SERVICE_MESH_SPEC -n anthos-management-center -o yaml
下面是一个该对象的内容示例:
apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1 kind: ServiceMeshFeatureSpec metadata: name:PREVIOUS_SERVICE_MESH_SPEC namespace: anthos-management-center spec: version: 1.7.3-asm.6
安装新版 Anthos Service Mesh
您可以使用管理中心控制台或 API 更新到较新版本的 Anthos Service Mesh。
控制台
- 在 Management Center Console 内,转到信息中心菜单。
- 点击升级标签以查看所有可用的升级。
- 点击要升级的集群对应的查看升级。
- 在“可用升级”列表中,找到要升级到的目标 Anthos Service Mesh 版本,然后点击升级以打开“Anthos Service Mesh 升级”页面。
- 确认目标版本的信息(例如版本、说明和版本说明的链接),然后点击继续。
- 在弹出式对话框中,点击升级,开始在目标集群上安装 Anthos Service Mesh 的目标版本。
- 系统会打开服务网格页面,您可以在其中看到正在安装的目标版本。
API
在管理员集群上使用 kubectl
命令执行以下步骤,以安装新版 Anthos Service Mesh:
为新版本创建新的
ServiceMeshFeatureSpec
对象。以下是版本1.8.3-asm.2
的示例对象:apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1 kind: ServiceMeshFeatureSpec metadata: name: NEW_SERVICE_MESH_SPEC namespace: anthos-management-center spec: version: 1.8.3-asm.2
更新现有
ServiceMeshBinding
对象以插入新条目,从而将新的ServiceMeshFeatureSpec
与相应集群绑定:apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1 kind: ServiceMeshBinding metadata: name: service-mesh-binding-sample namespace: anthos-management-center spec: configs: - configRef: name: PREVIOUS_SERVICE_MESH_SPEC namespace: anthos-management-center placement: clusterIDs: - TARGET_CLUSTER_ID - configRef: name: NEW_SERVICE_MESH_SPEC namespace: anthos-management-center placement: clusterIDs: - TARGET_CLUSTER_ID
更新版本的 Anthos Service Mesh 将安装到管理员集群上。您可以使用以下命令检查安装是否已就绪:
KUBECONFIG=ADMIN_KUBECONFIG kubectl get servicemeshbinding -n anthos-management-center -o jsonpath="{range .items[*].status.bindingItemStatuses[*]}{'\n'}{['clusterID', 'configRef', 'conditions']}" | grep NEW_SERVICE_MESH_SPEC | grep TARGET_CLUSTER_ID
将
TARGET_CLUSTER_ID
和NEW_SERVICE_MESH_SPEC
替换为ServiceMeshBinding
对象中配置的值。以下是输出示例:
target-user-cluster-1 {"name":"new-spec-q64x7","namespace":"anthos-management-center"} [{"lastTransitionTime":"2021-05-27T18:06:27Z","message":"","observedGeneration":1,"reason":"Healthy","status":"True","type":"Ready"}]
Ready
条件的status: true
表示安装完成。
先前版本的 Anthos Service Mesh 不会自动移除。您必须手动将工作负载迁移到新版 Anthos Service Mesh,然后卸载先前版本。
迁移工作负载
在用户集群上执行以下步骤以迁移工作负载:
获取先前版本和新版本的 Anthos Service Mesh 的修订版本标签。如需找到这些值,请执行以下操作:
控制台
- 在管理中心控制台内,转到服务网格菜单。
- 在集群列表中,从相应集群的“修订版本”列中找到修订版本标签。
API
运行以下命令:
KUBECONFIG=USER_KUBECONFIG kubectl get pod -n istio-system -l app=istiod -L istio.io/rev
以下是输出示例:
NAME READY STATUS RESTARTS AGE REV istiod-asm-173-6-756d989c58-p84b9 1/1 Running 0 13h asm-173-6 istiod-asm-173-6-756d989c58-t6vh8 1/1 Running 0 13h asm-173-6 istiod-asm-183-2-76f64c6bc7-2qnxq 1/1 Running 0 17h asm-183-2 istiod-asm-183-2-76f64c6bc7-8nrpz 1/1 Running 0 17h asm-183-2
在输出中,修订版本标签位于 REV 列下。在此示例中,该值为
asm-183-2
。此标签稍后将用于为新 Anthos Service Mesh 版本触发 Sidecar 注入。将修订版本标签添加到命名空间。在以下命令中,将
REVISION
更改为与新版 Anthos Service Mesh 的修订版本标签匹配的值。KUBECONFIG=USER_KUBECONFIG kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite
重启工作负载以触发重新注入,例如在命名空间中重启所有部署:
KUBECONFIG=USER_KUBECONFIG kubectl rollout restart deployment -n NAMESPACE
验证 pod 是否配置为指向新版
istiod
。KUBECONFIG=USER_KUBECONFIG kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
测试您的应用,验证工作负载是否正常工作。
如果在其他命名空间中存在工作负载,请重复第 2 步到第 5 步为命名空间加标签,并重启工作负载。
删除旧版 Anthos Service Mesh
如果您的应用按预期工作,您可以使用管理中心或 API 卸载先前版本的 Anthos Service Mesh。
控制台
- 在管理中心控制台内,转到服务网格菜单。
- 在版本列中,点击先前版本的 Anthos Service Mesh 的链接。
- 在修改 Service Mesh页面上,点击移除 Service Mesh。
- 在删除前,系统会弹出一个对话框,显示置信度检查结果。该对话框通过检查命名空间和 Pod 上的
istio.io/rev
标签,列出了仍然依赖于旧版 Anthos Service Mesh 的所有命名空间和 Pod。如果检查发现任何依赖项,则无法继续操作,除非迁移这些 Pod 或命名空间。 - 如果置信度检查通过,请点击移除以开始在目标集群上卸载 Anthos Service Mesh。
提交删除请求后,系统会打开“服务网格”页面,并且不再显示旧版 Anthos Service Mesh。卸载先前的 Anthos Service Mesh 资源的能需要几分钟才能完成。
API
在删除先前版本的 Anthos Service Mesh 之前,请验证确保没有任何 Pod 或命名空间依赖于该版本的 Anthos Service Mesh。
运行以下命令以验证命名空间依赖项。
KUBECONFIG=USER_KUBECONFIG kubectl get namespace -l istio.io/rev=PREVIOUS_REVISION
将
PREVIOUS_REVISION
替换为先前版本的 Anthos Service Mesh 的修订版本标签。运行以下命令以验证 Pod 依赖项。
KUBECONFIG=USER_KUBECONFIG kubectl get pod -l istio.io/rev=PREVIOUS_REVISION --field-selector metadata.namespace!=istio-system --all-namespaces
如果查询返回空结果,请继续执行下一步。否则,请先迁移工作负载,然后再继续操作。
更新管理员集群上的
ServiceMeshBinding
对象以解除先前的特征规范与目标集群的绑定。下面是移除PREVIOUS_SERVICE_MESH_SPEC
条目后的一个ServiceMeshBinding
对象示例:apiVersion: managementcenter.anthos.cloud.google.com/v1alpha1 kind: ServiceMeshBinding metadata: name: service-mesh-binding-sample namespace: anthos-management-center spec: configs: - configRef: name: NEW_SERVICE_MESH_SPEC namespace: anthos-management-center placement: clusterIDs: - TARGET_CLUSTER_ID
更新
ServiceMeshBinding
后,系统将开始移除先前版本的 Anthos Service Mesh。卸载可能需要几分钟才能完成。运行以下命令以验证先前版本是否已移除。KUBECONFIG=USER_KUBECONFIG kubectl get deployment -n istio-system -l istio.io/rev=PREVIOUS_REVISION
如果卸载完成,此命令将返回空结果。