更新 Istio
请勿使用 istioctl
更新托管附加组件安装的 Istio 版本。 更新时,受管 Istio 附加组件也包括 Istio 版本的更新。
更新到 Istio 附加组件的次要版本
IBM Cloud IBM Cloud Kubernetes Service 支持的最新 Istio 版本自动推出补丁更新,从而使所有 Istio 组件保持最新。 支持的版本已通过 IBM Cloud 测试,并获准在 IBM Cloud Kubernetes Service 中使用。
开始之前:
更新次版本时请注意以下几点:
-
每次只能手动更新一个版本的 Istio 附加组件。 要更新两个或更多版本的 Istio 附加组件,可以重复手动更新过程,或者 卸载 附加组件,然后 安装 后续版本。
-
您无法将托管的 Istio 附加组件恢复到以前的版本。 要恢复到较早的次版本,必须 卸载 附加组件,然后 安装 较早的版本。
-
当您将
istio-system
命名空间中的 Istio 控制组件更新到最新的次版本时,可能会遇到干扰性变化。 查看次版本更新过程中发生的以下更改。- 随着控制平面 pod 的更新推出,pod 也会重新创建。 更新完成后,Istio 控制平面才能完全可用。
- 更新期间,Istio 数据平面将继续运行。 不过,服务网格中应用程序的部分流量可能会在短时间内中断。
istio-ingressgateway
负载均衡器的外部 IP 地址在更新期间或更新后都不会更改。
更新 Istio 附加组件的次要版本:
-
查看 Istio 附加组件的当前版本。
kubectl get iop managed-istio -n ibm-operators -o jsonpath='{.metadata.annotations.version}'
-
查看可用的 Istio 附加组件版本。
ibmcloud ks addon-versions
-
查看 Istio 附加组件更改日志 中每个版本的更改。
-
如果您要从 1.11 版本升级到 1.12 版本,而您的 Istio 组件是在 1.10 或更早版本中配置的:
-
运行该命令可获取变异网络钩子配置的详细信息。
kubectl get mutatingwebhookconfigurations
示例输出
NAME WEBHOOKS AGE istio-sidecar-injector 5 32m
-
在输出结果中,找到
istio-sidecar-injector
并查看 WEBHOOKS 栏。 如果有 5 个或更多网络钩子,请运行以下命令删除其他网络钩子。kubectl delete mutatingwebhookconfigurations istio-sidecar-injector && kubectl rollout restart deploy addon-istio-operator -n ibm-operators
示例输出
mutatingwebhookconfiguration.admissionregistration.k8s.io "istio-sidecar-injector" deleted
-
检查附加网络钩子是否已删除。 获取突变网络钩子配置的详细信息,并验证是否有 4 个
istio-sidecar-injector
网络钩子。kubectl get mutatingwebhookconfigurations
示例输出
NAME WEBHOOKS AGE istio-sidecar-injector 4 60s
-
运行该命令可获得验证网络钩子配置的详细信息。
kubectl get validatingwebhookconfigurations
示例输出
NAME WEBHOOKS AGE istio-validator-istio-system 2 66s istiod-istio-system 1 31m
-
查看输出结果。 如果
istiod-istio-system
网络钩子在列,请运行以下命令将其删除。kubectl delete ValidatingWebhookConfiguration istiod-istio-system
示例输出
validatingwebhookconfiguration.admissionregistration.k8s.io "istiod-istio-system" deleted
-
确认
istiod-istio-system
网络钩子已不再列出。kubectl get validatingwebhookconfigurations
示例输出
NAME WEBHOOKS AGE istio-validator-istio-system 2 2m
-
-
更新 Istio 附加组件。
ibmcloud ks cluster addon update istio --version <version> -c <cluster_name_or_ID>
-
在继续之前,请确认更新已完成。
更新过程可能需要 20 分钟才能完成。
-
确保 Istio 附加组件的“健康状态”为
normal
,“健康状态”为Addon Ready
。 如果状态为updating
,则更新尚未完成。ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
-
确保
istio-system
命名空间中的控制平面组件 pod 的 STATUS 为Running
。kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE istio-system istio-egressgateway-6d4667f999-gjh94 1/1 Running 0 61m istio-system istio-egressgateway-6d4667f999-txh56 1/1 Running 0 61m istio-system istio-ingressgateway-7bbf8d885-b9xgp 1/1 Running 0 61m istio-system istio-ingressgateway-7bbf8d885-xhkv6 1/1 Running 0 61m istio-system istiod-5b9b5bfbb7-jvcjz 1/1 Running 0 60m istio-system istiod-5b9b5bfbb7-khcht 1/1 Running 0 60m
-
更新 istioctl
客户机和侧柜
每当 Istio 托管插件更新时,请更新 istioctl
客户端和应用程序的 Istio 侧卡。
例如,附加组件的补丁版本可能会由 IBM Cloud Kubernetes Service 自动更新,您也可以 更新附加组件的次要版本。 无论哪种情况,都请更新 istioctl
客户机以及应用程序的现有 Istio 侧柜,以匹配附加组件的 Istio 版本。
-
获取
istioctl
客户端和 Istio 附加控制平面组件的版本。istioctl version --short=false
示例输出
client version: version.BuildInfo{Version:"1.11.2"} pilot version: version.BuildInfo{Version:1.23.5} pilot version: version.BuildInfo{Version:1.23.5} data plane version: version.ProxyInfo{ID:"istio-egressgateway-77bf75c5c-vp97p.istio-system", IstioVersion:1.23.5} data plane version: version.ProxyInfo{ID:"istio-egressgateway-77bf75c5c-qkhgm.istio-system", IstioVersion:1.23.5} data plane version: version.ProxyInfo{ID:"istio-ingressgateway-6dcb67b64d-dffhq.istio-system", IstioVersion:1.23.5} data plane version: version.ProxyInfo{ID:"httpbin-74fb669cc6-svc8x.default", IstioVersion:1.23.5} data plane version: version.ProxyInfo{ID:"istio-ingressgateway-6dcb67b64d-cs9r9.istio-system", IstioVersion:1.23.5} ...
-
在输出中,比较
client version
(istioctl
) 和 Istio 控制平面组件的版本,如pilot version
。 如果client version
和控制平面组件版本不匹配:-
下载与控制平面组件版本相同的
istioctl
客户端。curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.23.5 sh -
-
导航至 Istio 包目录。
cd istio-1.23.5
-
Linux 和 用户:将 客户端添加到 系统变量中。macOS
istioctl
PATH
export PATH=$PWD/bin:$PATH
-
-
在步骤 1 的输出中,比较每个数据平面 pod 的
pilot version
和data plane version
。- 如果
pilot version
和data plane version
匹配,则无需进一步更新。 - 如果
pilot version
和data plane version
不匹配,请重新启动运行旧版本的数据平面 pod 的部署。 pod 名称和命名空间以data plane version: version.ProxyInfo{ID:"<pod_name>.<namespace>", IstioVersion:"1.8.4"}
的形式列在每个条目中。
kubectl rollout restart deployment <deployment> -n <namespace>
- 如果
从不受支持的 Istio 附加组件版本升级
将 Istio 组件 更新到 IBM Cloud Kubernetes Service 支持的最新补丁版本。
从 Istio 附加组件迁移到社区 Istio
您可以迁移到社区 Istio,而不是使用托管 Istio 附加组件。
准备工作
- 如果使用的版本早于 1.21,请 将 Istio 附加组件更新到 1.21 或更高版本。 此更新非常重要,因为在此版本中,禁用附加组件不会像早期版本那样删除自定义资源。
- 如果不再需要 Istio,可以 卸载该附加组件,无需安装社区 Istio,而无需完成这些步骤。
第 1 步:从控制台禁用 Istio 附加组件
从控制台或 CLI 禁用插件。
-
在 群集仪表板中,单击要移除 Istio 附加组件的群集名称。
-
导航至“附加组件”部分。
-
在“受管 Istio”卡上,单击“操作”菜单图标。
-
单击卸载。 在此群集中,受管 Istio 附加组件已禁用。
-
在托管的 Istio 卡上,确认已卸载的附加组件已不再列出。
第 1 步:从 CLI 禁用 Istio 附加组件
禁用该附加组件并验证是否仍有其他 Istio 附加组件。
- 禁用
istio
附加组件。ibmcloud ks cluster addon disable istio --cluster <cluster_name_or_ID> -f
- 验证是否此集群中已禁用所有受管 Istio 附加组件。 输出中不应返回任何 Istio 附加组件。
ibmcloud ks cluster addon ls --cluster <cluster_name_or_ID>
- 等待 10 分钟后再继续下一步。 这样,我们就有时间取消对 istio 运算符的管理。
第 2 步:缩小 Istio 操作员的规模
缩小 Istio 操作员部署规模。
运行以下命令:
kubectl scale deployment -n ibm-operators addon-istio-operator --replicas=0
步骤 3:节约资源
保存在 istio-system
命名空间中创建或修改的任何资源,以及由自定义资源定义 (CRD) 自动生成的所有 Kubernetes 资源。
-
保存
managed-istio-custom
ConfigMap 以排除故障或稍后重新安装插件。kubectl get cm -n ibm-operators managed-istio-custom -o yaml > Customizations.yaml
-
保存所有 IstioOperator CR (IOP)。
- 列出 IOP 资源:
kubectl get iop -A
- 对于列出的每个 IOP 资源,移除终结器。 使用
managed-istio
IOP 的示例:kubectl patch -n ibm-operators istiooperator/managed-istio --type json --patch='[ { "op": "remove", "path": "/metadata/finalizers" } ]'
- 将列出的每个 IOP 资源保存到文件中:
kubectl get iop -n <IOP_namespace> <IOP_name> -o yaml > <IOP_name>.yaml
- 列出 IOP 资源:
-
等待 10 分钟后再继续下一步。
步骤 4:更改 IOP 的安装程序
删除所有 Istio 操作员 (IOP) 资源,例如自定义入口网关的资源。
-
确保您的
istioctl
cli 工具是所需的补丁版本。istioctl version
-
针对上一步保存的每个 IOP 文件,运行
upgrade
命令。istioctl upgrade -f <filename>.yaml
第 5 步:删除 Istio 操作符和 IOP
删除 Istio 操作员部署、服务帐户、群集角色绑定、群集角色和所有 IOP。
-
运行以下命令删除 istio 操作员部署:
kubectl delete deployment -n ibm-operators addon-istio-operator --ignore-not-found=true kubectl delete serviceaccount -n ibm-operators addon-istio-operator --ignore-not-found=true kubectl delete clusterrolebinding addon-istio-operator --ignore-not-found=true kubectl delete clusterrole addon-istio-operator --ignore-not-found=true
-
删除 IOP。
- 列出 IOP 资源:
kubectl get iop -A
- 删除列出的每个 IOP 资源:
kubectl delete IstioOperator <resource_name> -n <namespace>
- 列出 IOP 资源:
步骤 6:拆除 ConfigMap
因为 ConfigMap 是之前保存的,所以可以删除。
取下 managed-istio-custom
ConfigMap。
kubectl delete cm -n ibm-operators managed-istio-custom
移除附加组件的工作已经完成,您可以继续使用并根据需要升级社区 Istio。