关于 RevisionBased 策略
RevisionBased
策略在升级过程中会同时运行两个控制平面版本。该方法支持将工作负载逐步从旧控制平面迁移到新控制平面,从而实现金丝雀升级。它还支持跨多个次版本的升级。
RevisionBased
策略会为每次 spec.version
字段的变更创建一个新的 Istio 控制平面实例。现有的控制平面会保持活动状态,直到所有工作负载都迁移到新的实例。您可以通过更新 istio.io/rev
标签或使用 IstioRevisionTag
资源,然后重启工作负载,将其迁移到新的控制平面。
尽管 RevisionBased
策略涉及额外的步骤,并且在升级期间需要多个控制平面实例同时运行,但它允许工作负载逐步迁移。这种方法可以在迁移剩余工作负载之前,先用部分工作负载验证更新后的控制平面,适用于具有关键任务工作负载的大型网格。
目录
选择 RevisionBased 策略
要使用 RevisionBased
策略部署 Istio,请创建 Istio
资源,并将 spec.updateStrategy
设置为以下值:
选择 RevisionBased
策略的示例规范
kind: Istio
spec:
version: v1.26.3
updateStrategy:
type: RevisionBased
选择该策略后,Operator 会创建一个名为 <istio_resource_name>-<version>
的新的 IstioRevision
资源。
使用 RevisionBased 策略安装 Istio
您可以使用 RevisionBased
更新策略安装 Istio 控制平面、Istio CNI 以及 Bookinfo 演示应用。
NOTE
您可以通过以下章节了解更新过程。如果集群中已部署 Istio,则可以跳过此安装步骤。
操作步骤
-
通过以下命令创建 istio-system
命名空间:
kubectl create ns istio-system
-
使用 RevisionBased
更新策略部署 Istio 控制平面。以下示例配置在 istio-system
命名空间中创建名为 default
的 Istio
资源:
示例配置
apiVersion: sailoperator.io/v1
kind: Istio
metadata:
name: default
spec:
namespace: istio-system
version: v1.26.3
updateStrategy:
type: RevisionBased
-
安装所需版本的 Istio CNI 插件。以下示例配置在 istio-cni
命名空间中创建名为 default
的 IstioCNI
资源:
apiVersion: sailoperator.io/v1
kind: IstioCNI
metadata:
name: default
spec:
version: v1.26.3
namespace: istio-cni
values:
cni:
cniConfDir: /etc/cni/multus/net.d # ACP 4.0 中为 /etc/cni/net.d
excludeNamespaces:
- istio-cni
- kube-system
-
通过以下命令获取 IstioRevision
名称:
kubectl get istiorevision -n istio-system
示例输出
NAME TYPE READY STATUS IN USE VERSION AGE
default-v1-26-3 Local True Healthy False v1.26.3 3m4s
使用 RevisionBased 策略更新 Istio 控制平面
使用 RevisionBased
策略更新 Istio 时,可以一次升级多个次版本。Alauda Service Mesh v2 Operator 会为每次 .spec.version
字段的变更创建新的 IstioRevision
资源,并部署对应的控制平面实例。要将工作负载迁移到新的控制平面,请将命名空间上的 istio.io/rev
标签设置为对应的 IstioRevision
资源名称,然后重启工作负载。
前提条件
- 您已以 cluster-admin 身份登录 Alauda Container Platform Web 控制台。
- 已安装 Alauda Service Mesh v2 Operator 并部署 Istio。
- 已安装 Alauda Container Platform Networking for Multus 插件。
- 已在本地机器上安装
istioctl
。
- 已将 Istio 控制平面配置为使用
RevisionBased
更新策略。本示例中,Istio
资源名为 default
,部署在 istio-system
命名空间。
- 已安装所需版本的 Istio CNI 插件。本示例中,
IstioCNI
资源名为 default
,部署在 istio-cni
命名空间。
- 已为
bookinfo
命名空间打上标签以启用 sidecar 注入。
- 集群中已有运行的应用工作负载。本示例中,bookinfo 应用部署在
bookinfo
命名空间。
操作步骤
-
修改 Istio
资源中的版本。例如,要更新到 Istio 1.26.3
,通过以下命令将 spec.version
字段设置为 v1.26.3
:
kubectl patch istio default --type='merge' -p '{"spec":{"version":"v1.26.3"}}'
Istio CR 中的版本更新
kind: Istio
spec:
version: v1.26.3
updateStrategy:
type: RevisionBased
Service Mesh v2 Operator 会在旧版本控制平面旁边部署新版本控制平面。sidecar 仍然连接到旧控制平面。
-
确认新的修订版本的 Istio
和 IstioRevision
资源均已就绪。
-
通过以下命令确认 Istio
资源已就绪:
示例输出
NAME REVISIONS READY IN USE ACTIVE REVISION STATUS VERSION AGE
default 2 2 1 default-v1-2-6 Healthy v1.26.3 9m23s
-
通过以下命令确认 IstioRevision
资源已就绪:
kubectl get istiorevision
示例输出
NAME TYPE READY STATUS IN USE VERSION AGE
default-v1-24-6 Local True Healthy True v1.24.6 10m
default-v1-26-3 Local True Healthy False v1.26.3 66s
-
通过以下命令确认有两个控制平面 Pod 正在运行,分别对应两个修订版本:
kubectl get pods -n istio-system
示例输出
NAME READY STATUS RESTARTS AGE
istiod-default-v1-24-6-c98fd9675-r7bfw 1/1 Running 0 10m
istiod-default-v1-26-3-7495cdc7bf-v8t4g 1/1 Running 0 113s
-
通过以下命令确认工作负载 sidecar 仍连接到旧控制平面:
示例输出
NAME CLUSTER CDS LDS EDS RDS ECDS ISTIOD VERSION
details-v1-7d775cb4f6-5t9zm.bookinfo Kubernetes SYNCED (2m25s) SYNCED (2m25s) SYNCED (2m17s) SYNCED (2m25s) IGNORED istiod-default-v1-24-5-c98fd9675-r7bfw 1.24.5
productpage-v1-7c4b6b857-mxrw6.bookinfo Kubernetes SYNCED (2m35s) SYNCED (2m35s) SYNCED (2m17s) SYNCED (2m35s) IGNORED istiod-default-v1-24-5-c98fd9675-r7bfw 1.24.5
ratings-v1-5b896f8544-r552l.bookinfo Kubernetes SYNCED (2m21s) SYNCED (2m21s) SYNCED (2m17s) SYNCED (2m21s) IGNORED istiod-default-v1-24-5-c98fd9675-r7bfw 1.24.5
reviews-v1-746f96c9d4-9pw8k.bookinfo Kubernetes SYNCED (2m17s) SYNCED (2m17s) SYNCED (2m17s) SYNCED (2m17s) IGNORED istiod-default-v1-24-5-c98fd9675-r7bfw 1.24.5
reviews-v2-97bdf5876-4mzx5.bookinfo Kubernetes SYNCED (2m35s) SYNCED (2m35s) SYNCED (2m17s) SYNCED (2m35s) IGNORED istiod-default-v1-24-5-c98fd9675-r7bfw 1.24.5
reviews-v3-77d9db6844-djgjk.bookinfo Kubernetes SYNCED (2m19s) SYNCED (2m19s) SYNCED (2m17s) SYNCED (2m19s) IGNORED istiod-default-v1-24-5-c98fd9675-r7bfw 1.24.5
VERSION
列应与旧控制平面版本匹配。
-
通过更新应用命名空间或 Pod 上的 istio.io/rev
标签为新修订名称,将工作负载迁移到新控制平面。例如,更新整个命名空间的标签:
kubectl label namespace bookinfo istio.io/rev=<new_revision_name> --overwrite
-
重启应用工作负载,使新版本的 sidecar 被注入:
kubectl rollout restart deployment -n bookinfo
验证
-
通过以下命令验证新版本的 sidecar 是否运行:
VERSION
列应与新控制平面版本匹配。
-
验证旧控制平面、Istio
和 IstioRevision
资源是否已被删除。
-
通过以下命令验证旧控制平面是否已删除。
-
通过以下命令验证 Istio
资源是否已删除:
-
通过以下命令验证 IstioRevision
资源是否已删除:
kubectl get istiorevision
Alauda Service Mesh v2 Operator 会在 spec.updateStrategy.inactiveRevisionDeletionGracePeriodSeconds
字段定义的宽限期过后,删除旧的 IstioRevision
资源及其关联的控制平面。默认宽限期为 30
秒。
您可以增加宽限期,以便在移除旧版本之前有足够时间测试新控制平面。在金丝雀升级期间,设置更长的宽限期以确保工作负载稳定后再完全切换。