使用 Helm 升级

请参阅本指南,以升级使用 Helm 安装的 Istio 控制平面和 sidecar 代理。升级过程可能会安装新的二级制文件,并可能修改配置和 API schema。升级过程可能导致服务停机。为了减少停机时间,请确保 Istio 控制平面组件和应用程序是多副本高可用的。

在将 Istio 版本升级到 1.5 之前,请务必查看升级说明

Istio 不支持 跨版本升级。仅支持从 1.4 版本升级到 1.5 版本。如果您使用的是旧版本,请先升级到 1.4 版本。

升级步骤

下载新版本 Istio,并切换目录到新版本的目录下。

Istio CNI 升级

如果您已经安装或计划安装 Istio CNI,请选择以下 互斥 选项之一,检查 Istio CNI 是否已经安装并进行升级:

您可以使用 Kubernetes 的滚动更新机制来升级 Istio CNI 组件。这适用于使用 kubectl apply 部署 Istio CNI 的情况。

  • 检查是否已安装 istio-cni。 找到 istio-cni-node pod 以及它们运行的命名空间(通常是 kube-systemistio-system):
  1. $ kubectl get pods -l k8s-app=istio-cni-node --all-namespaces
  2. $ 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
  1. $ helm template install/kubernetes/helm/istio-cni --name=istio-cni --namespace=$NAMESPACE | kubectl delete -f -
  • kube-system 命名空间中安装或升级 istio-cni
  1. $ 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 是否已安装,并检查安装在哪个命名空间:
  1. $ helm status istio-cni
  • 根据下面几种情况来安装或升级 istio-cni

    • 如您尚未安装 istio-cni,并决定安装它,则运行以下命令:
  1. $ helm install install/kubernetes/helm/istio-cni --name istio-cni --namespace kube-system
  • 如果 istio-cni 已被安装到 kube-system 以外的命名空间(例如:istio-system)中,请先运行以下命令删除:
  1. $ helm delete --purge istio-cni

然后,将其安装到 kube-system 命名空间中:

  1. $ helm install install/kubernetes/helm/istio-cni --name istio-cni --namespace kube-system
  • 如果 istio-cni 已被安装到命名空间 kube-system 中,则运行以下命令升级:
  1. $ helm upgrade istio-cni install/kubernetes/helm/istio-cni --namespace kube-system

控制平面升级

Pilot, Galley, 策略, 遥测和 Sidecar 注入器。选择下列 互斥 选项中的一种升级控制平面:

您可以使用 Kubernetes 的滚动升级机制来升级控制平面组件。这适用于使用 kubectl apply 部署 Istio 组件的情况,包括使用 Helm template 生成的配置。

  • 使用 kubectl apply 命令升级所有 Istio 的 CRD。等待 Kubernetes API 服务器提交升级的 CRD:
  1. $ kubectl apply -f install/kubernetes/helm/istio-init/files/
  • 等待所有的 Istio CRD 创建完成:
  1. $ kubectl -n istio-system wait --for=condition=complete job --all
  • 应用更新模板:
  1. $ helm template install/kubernetes/helm/istio --name istio \
  2. --namespace istio-system | kubectl apply -f -

您必须使用与首次 安装 Istio 相同的配置。

滚动更新进程会将所有的部署组件和 configmap 升级到新版本。当此进程执行完毕后,您的 Istio 控制平面将会升级到新版本。

您现有的应用程序无需任何更改,可以继续运行。如果新的控制平面有任何严重的问题,您可以通过应用旧版本的 yaml 文件来回滚此次变更。

如果您使用 Helm and Tiller 安装 Istio,推荐的方式是使用 Helm 来进行升级。

  1. $ helm upgrade --install istio-init install/kubernetes/helm/istio-init --namespace istio-system
  • 等待所有的 Istio CRD 创建完成:
  1. $ kubectl -n istio-system wait --for=condition=complete job --all
  • 升级 istio chart:
  1. $ 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,必要时请进行升级。

  1. $ kubectl rollout restart deployment --namespace default

如果使用手动注入,可以通过以下命令升级 sidecar:

  1. $ kubectl apply -f <(istioctl kube-inject -f $ORIGINAL_DEPLOYMENT_YAML)

如果 sidecar 之前使用了一些定制的配置文件注入,则需要将配置文件中的版本更改为新版本,并通过以下命令重新注入:

  1. $ kubectl apply -f <(istioctl kube-inject \
  2. --injectConfigFile inject-config.yaml \
  3. --filename $ORIGINAL_DEPLOYMENT_YAML)

相关内容

使用 istioctl 命令升级 Istio [实验中]

使用 istioctl 命令来升级或降级 Istio。

DNS 证书管理

在 Istio 中配置和管理 DNS 证书。

安全管理 Webhook

一种更安全管理 Istio webhook 的方法。

揭开 Istio Sidecar 注入模型的神秘面纱

揭秘 Istio 是如何将其数据平面组件添加到现有 deployment。

Docker Desktop

在 Docker Desktop 中运行 Istio 的设置说明。

Google Kubernetes Engine

在两个 GKE 集群上设置多集群网格。