使用 Helm 升级
请参阅本指南,以升级使用 Helm 安装的 Istio 控制平面和 sidecar 代理。升级过程可能会安装新的二级制文件,并可能修改配置和 API schema。升级过程可能导致服务停机。为了减少停机时间,请确保 Istio 控制平面组件和应用程序是多副本高可用的。
在将 Istio 版本升级到 1.13 之前,请务必查看[升级说明]。
Istio 不支持 跨版本升级。仅支持从 1.12 版本升级到 1.13 版本。如果您使用的是旧版本,请先升级到 1.12 版本。
升级步骤
下载新版本 Istio,并切换目录到新版本的目录下。
Istio CNI 升级
如果您已经安装或计划安装 Istio CNI,请选择以下 互斥 选项之一,检查 Istio CNI 是否已经安装并进行升级:
Kubernetes rolling update Helm upgrade
您可以使用 Kubernetes 的滚动更新机制来升级 Istio CNI 组件。这适用于使用 kubectl apply
部署 Istio CNI 的情况。
检查是否已安装
istio-cni
。找到istio-cni-node
pod 以及它们运行的命名空间(通常是kube-system
或istio-system
):$ kubectl get pods -l k8s-app=istio-cni-node --all-namespaces
$ NAMESPACE=$(kubectl get pods -l k8s-app=istio-cni-node --all-namespaces --output='jsonpath={.items[0].metadata.namespace}')
如果
istio-cni
安装在kube-system
以外的命名空间(例如:istio-system
),请删除istio-cni
:$ helm template install/kubernetes/helm/istio-cni --name=istio-cni --namespace=$NAMESPACE | kubectl delete -f -
在
kube-system
命名空间中安装或升级istio-cni
:$ helm template install/kubernetes/helm/istio-cni --name=istio-cni --namespace=kube-system | kubectl apply -f -
如果您已使用 Helm and Tiller 安装 Istio CNI,请优先使用 Helm 升级 Istio CNI。
检查
istio-cni
是否已安装,并检查安装在哪个命名空间:$ helm status istio-cni
根据下面几种情况来安装或升级
istio-cni
:如您尚未安装
istio-cni
,并决定安装它,则运行以下命令:$ helm install install/kubernetes/helm/istio-cni --name istio-cni --namespace kube-system
如果
istio-cni
已被安装到kube-system
以外的命名空间(例如:istio-system
)中,请先运行以下命令删除:$ helm delete --purge istio-cni
然后,将其安装到
kube-system
命名空间中:$ helm install install/kubernetes/helm/istio-cni --name istio-cni --namespace kube-system
如果
istio-cni
已被安装到命名空间kube-system
中,则运行以下命令升级:$ helm upgrade istio-cni install/kubernetes/helm/istio-cni --namespace kube-system
控制平面升级
Pilot, Galley, 策略, 遥测和 Sidecar 注入器。 选择下列 互斥 选项中的一种升级控制平面:
Kubernetes rolling update Helm upgrade
您可以使用 Kubernetes 的滚动升级机制来升级控制平面组件。这适用于使用 kubectl apply
部署 Istio 组件的情况,包括使用 Helm template 生成的配置。
使用
kubectl apply
命令升级所有 Istio 的 CRD。等待 Kubernetes API 服务器提交升级的 CRD:$ kubectl apply -f install/kubernetes/helm/istio-init/files/
等待所有的 Istio CRD 创建完成:
$ kubectl -n istio-system wait --for=condition=complete job --all
应用更新模板:
$ helm template install/kubernetes/helm/istio --name istio \
--namespace istio-system | kubectl apply -f -
您必须使用与首次安装 Istio 相同的配置。
滚动更新进程会将所有的部署组件和 configmap 升级到新版本。当此进程执行完毕后,您的 Istio 控制平面将会升级到新版本。
您现有的应用程序无需任何更改,可以继续运行。如果新的控制平面有任何严重的问题,您可以通过应用旧版本的 yaml 文件来回滚此次变更。
如果您使用 Helm and Tiller 安装 Istio,推荐的方式是使用 Helm 来进行升级。
升级
istio-init
chart 来更新所有 Istio 用户资源定义(CRD)。$ helm upgrade --install istio-init install/kubernetes/helm/istio-init --namespace istio-system
等待所有的 Istio CRD 创建完成:
$ kubectl -n istio-system wait --for=condition=complete job --all
升级
istio
chart:$ helm upgrade istio install/kubernetes/helm/istio --namespace istio-system
如果安装了 Istio CNI,则通过添加
--set istio_cni.enabled=true
配置项来启用它。
Sidecar 升级
在升级控制平面后,已运行 Istio 的应用仍将使用旧的 sidecar。要升级 sidecar,您需要重新注入它。
如果您使用自动的 sidecar 注入方式,可以滚动更新所有 pod 来升级 sidecar。这样,新版本的 sidecar 将被自动重新注入。
要运行以下命令,kubectl
的版本需要 >= 1.15,必要时请进行升级。
$ kubectl rollout restart deployment --namespace default
如果使用手动注入,可以通过以下命令升级 sidecar:
$ kubectl apply -f <(istioctl kube-inject -f $ORIGINAL_DEPLOYMENT_YAML)
如果 sidecar 之前使用了一些定制的配置文件注入,则需要将配置文件中的版本更改为新版本,并通过以下命令重新注入:
$ kubectl apply -f <(istioctl kube-inject \
--injectConfigFile inject-config.yaml \
--filename $ORIGINAL_DEPLOYMENT_YAML)