距离 Istio 1.5 版本发布还有 天。

使用 Helm 升级

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

升级步骤

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

Istio CNI 升级

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

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

  1. 检查是否已安装 istio-cni。 找到 istio-cni-node pod 以及它们运行的命名空间(通常是 kube-systemistio-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}')
    
  2. 如果 istio-cni 安装在 kube-system 以外的命名空间(例如:istio-system),请删除 istio-cni

    $ helm template install/kubernetes/helm/istio-cni --name=istio-cni --namespace=$NAMESPACE | kubectl delete -f -
    
  3. kube-system 命名空间中安装或升级 istio-cni

    $ helm template install/kubernetes/helm/istio-cni --name=istio-cni --namespace=kube-system | kubectl apply -f -
    

控制平面升级

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

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

  1. 使用 kubectl apply 命令升级所有 Istio 的 CRD。等待 Kubernetes API 服务器提交升级的 CRD:

    $ kubectl apply -f install/kubernetes/helm/istio-init/files/
    
  2. 等待所有的 Istio CRD 创建完成:

$ kubectl -n istio-system wait --for=condition=complete job --all
  1. 应用更新模板:

    $ helm template install/kubernetes/helm/istio --name istio \
    --namespace istio-system | kubectl apply -f -
    

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

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

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

Sidecar 升级

在升级控制平面后,已运行 Istio 的应用仍将使用旧的 sidecar。要升级 sidecar,您需要重新注入它。

如果您使用自动的 sidecar 注入方式,可以滚动更新所有 pod 来升级 sidecar。这样,新版本的 sidecar 将被自动重新注入。

$ 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)
这些信息有用吗?
Do you have any suggestions for improvement?

Thanks for your feedback!