diff --git a/content_zh/docs/setup/kubernetes/upgrading-istio/index.md b/content_zh/docs/setup/kubernetes/upgrading-istio/index.md index aff3bd1a6f..9d458be64f 100644 --- a/content_zh/docs/setup/kubernetes/upgrading-istio/index.md +++ b/content_zh/docs/setup/kubernetes/upgrading-istio/index.md @@ -10,29 +10,50 @@ keywords: [kubernetes,升级] 在下面的步骤中,我们假设 Istio 组件在 `istio-system` namespace 中安装和升级。 -## 控制平面升级 +## 升级步骤 + +1. [下载新的 Istio 版本](/docs/setup/kubernetes/download-release/)并将目录更改为新版本目录。 + +1. 升级 Istio 的[自定义资源定义](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions) +通过 `kubectl apply` ,等待几秒钟,让 CRD 在 kube-apiserver 中提交: + +{{< text bash >}} +$ kubectl apply -f @install/kubernetes/helm/istio/templates/crds.yaml@ -n istio-system +{{< /text >}} + +### 控制平面升级 Istio 控制平面组件包括:Citadel、Ingress 网关、Egress 网关、Pilot、Policy、Telemetry 和 Sidecar 注入器。我们可以使用 Kubernetes 的滚动更新机制来升级控制平面组件。 -首先,生成需要的 Istio 控制平面 yaml 文件,例如: +#### 用 Helm 升级 + +如果你用 [Helm](/docs/setup/kubernetes/helm-install/#option-2-install-with-helm-and-tiller-via-helm-install) 安装了 Istio,那么首选升级方式是让 Helm 负责升级: {{< text bash >}} -$ helm template --namespace istio-system --set global.proxy.image=proxy \ - --values install/kubernetes/helm/istio/values-istio.yaml \ - install/kubernetes/helm/istio >> install/kubernetes/istio.yaml +$ helm upgrade istio install/kubernetes/helm/istio --namespace istio-system +{{< /text >}} + +#### Kubernetes 滚动更新 + +如果没有使用 Helm 安装 Istio 的话。您还可以使用 Kubernetes 的滚动更新机制来升级控制平面组件。 + +首先,生成 Istio 控制平面需要的 yaml 文件,例如: + +{{< text bash >}} +$ helm template install/kubernetes/helm/istio --name istio \ + --namespace istio-system > install/kubernetes/istio.yaml {{< /text >}} 或者 {{< text bash >}} -$ helm template --namespace istio-system --set global.proxy.image=proxy \ - --values install/kubernetes/helm/istio/values-istio-demo-auth.yaml \ - install/kubernetes/helm/istio >> install/kubernetes/istio-demo-auth.yaml +$ helm template install/kubernetes/helm/istio --name istio \ + --namespace istio-system --set global.mtls.enabled=true > install/kubernetes/istio-auth.yaml {{< /text >}} 如果使用 1.9 之前的 Kubernetes 版本,则应添加 `--set sidecarInjectorWebhook.enabled=false`。 -接下来,只需直接应用所需的 Istio 控制平面 yaml 文件的新版本,例如, +接下来,只需直接应用 Istio 控制平面所需的 yaml 文件的新版本,例如, {{< text bash >}} $ kubectl apply -f install/kubernetes/istio.yaml @@ -41,12 +62,12 @@ $ kubectl apply -f install/kubernetes/istio.yaml 或者 {{< text bash >}} -$ kubectl apply -f install/kubernetes/istio-demo-auth.yaml +$ kubectl apply -f install/kubernetes/istio-auth.yaml {{< /text >}} 滚动更新过程会将所有 deployment 和 configmap 升级到新版本。完成此过程后,您的 Istio 控制面应该会更新为新版本。使用 Envoy v1 和 v1alpha1 路由规则(route rule)的现有应用程序应该可以继续正常工作而无需任何修改。如果新控制平面存在任何关键问题,您都可以通过应用旧版本的 yaml 文件来回滚更改。 -## Sidecar 升级 +### Sidecar 升级 控制平面升级后,已经运行 Istio 的应用程序仍将使用旧版本的 sidecar。要想升级 sidecar,您需要重新注入它。 @@ -55,13 +76,13 @@ $ kubectl apply -f install/kubernetes/istio-demo-auth.yaml 如果您使用手动注入,可以通过执行以下命令来升级 sidecar: {{< text bash >}} -$ kubectl replace -f <(istioctl kube-inject -f $ORIGINAL_DEPLOYMENT_YAML) +$ kubectl apply -f <(istioctl kube-inject -f $ORIGINAL_DEPLOYMENT_YAML) {{< /text >}} 如果 sidecar 以前被注入了一些定制的注入配置文件,您需要将配置文件中的版本标签更改为新文件版本并像下面这样重新注入 sidecar: {{< text bash >}} -$ kubectl replace -f <(istioctl kube-inject \ +$ kubectl apply -f <(istioctl kube-inject \ --injectConfigFile inject-config.yaml \ --filename $ORIGINAL_DEPLOYMENT_YAML) {{< /text >}} @@ -104,7 +125,7 @@ $ kubectl replace -f <(istioctl kube-inject \ *提示:请确保使用 `-f` 来为一个或多个 deployment 提供所有文件。* {{< text bash >}} - $ istioctl experimental convert-networking-config -f FILE1.yaml -f FILE2.yaml -f FILE3.yaml > UPDATED_NETWORK_CONFIG.yaml + $ istioctl experimental convert-networking-configuration-f FILE1.yaml -f FILE2.yaml -f FILE3.yaml > UPDATED_NETWORK_CONFIG.yaml {{< /text >}} 1. 编辑 `UPDATED_NETWORK_CONFIG.yaml` 以更新所有 namespace 引用为您需要的 namespace。`convert-networking-config` 工具有一个已知问题,导致 `istio-system` namespace 的使用不正确。此外,请确保 `hosts` 值的正确性。 @@ -146,7 +167,7 @@ spec: - name: foo ports: - number: 8000 - peers: + peers: --- apiVersion: "networking.istio.io/v1alpha3" kind: "DestinationRule"