使用 Helm 安装
请遵循本指南使用 Helm 安装和配置 Istio 网格。
本指南中使用的 Helm Chart 与通过 Istioctl 或 Operator 安装 Istio 时使用的底层 Chart 相同。
先决条件
执行任何必要的特定于平台的设置。
检查 Pod 和服务的要求。
安装 Helm 客户端 3.6 或更高的版本。
配置 Helm 存储库:
$ helm repo add istio https://istio-release.storage.googleapis.com/charts
$ helm repo update
安装步骤
本节介绍使用 Helm 安装 Istio 的过程。Helm 安装的一般语法是:
$ helm install <release> <chart> --namespace <namespace> --create-namespace [--set <other_parameters>]
该命令指定的变量如下:
<chart>
一个打好包的 Chart 路径,也可以是一个未打包的 Chart 目录或 URL。<release>
一个用于标识和管理安装后的 Helm Chart 的名称。<namespace>
要安装 Chart 的命名空间。
可以使用一个或多个 --set <parameter>=<value>
参数更改默认配置值。 或者,您可以使用 --values <file>
参数,在一个自定义值文件中指定几个参数。
您可以使用 helm show values <chart>
命令显示配置参数的默认值,或参考 artifacthub
Chart 文档中的 自定义资源参数、 Istiod Chart 配置参数 和 Gateway Chart 配置参数。
为 Istio 组件,创建命名空间
istio-system
:如果在第二步使用了
--create-namespace
参数,这一步可以跳过。$ kubectl create namespace istio-system
安装 Istio base chart,它包含了集群范围的自定义资源定义 (CRD),这些资源必须在部署 Istio 控制平面之前安装:
执行修订版安装时,base chart 需要设置
--defaultRevision
值以使资源验证起作用。 有关--defaultRevision
选项的更多信息可以在 Helm 升级文档中找到。$ helm install istio-base istio/base -n istio-system
使用
helm ls
命令验证 CRD 的安装情况:$ helm ls -n istio-system
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
istio-base istio-system 1 ... ... ... ... deployed base-1.16.1 1.16.1
在输出中找到
istio-base
的条目,并确保状态已被设置为deployed
。安装 Istio discovery chart,它用于部署
istiod
服务:$ helm install istiod istio/istiod -n istio-system --wait
验证 Istio discovery chart 的安装情况:
$ helm ls -n istio-system
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
istio-base istio-system 1 ... ... ... ... deployed base-1.16.1 1.16.1
istiod istio-system 1 ... ... ... ... deployed istiod-1.16.1 1.16.1
获取已安装的 Helm Chart 的状态以确保它已部署:
$ helm status istiod -n istio-system
NAME: istiod
LAST DEPLOYED: Fri Jan 20 22:00:44 2023
NAMESPACE: istio-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
"istiod" successfully installed!
To learn more about the release, try:
$ helm status istiod
$ helm get all istiod
Next steps:
* Deploy a Gateway: https://istio.io/latest/docs/setup/additional-setup/gateway/
* Try out our tasks to get started on common configurations:
* https://istio.io/latest/docs/tasks/traffic-management
* https://istio.io/latest/docs/tasks/security/
* https://istio.io/latest/docs/tasks/policy-enforcement/
* https://istio.io/latest/docs/tasks/policy-enforcement/
* Review the list of actively supported releases, CVE publications and our hardening guide:
* https://istio.io/latest/docs/releases/supported-releases/
* https://istio.io/latest/news/security/
* https://istio.io/latest/docs/ops/best-practices/security/
For further documentation see https://istio.io website
Tell us how your install/upgrade experience went at https://forms.gle/99uiMML96AmsXY5d6
检查
istiod
服务是否安装成功,其 Pod 是否正在运行:$ kubectl get deployments -n istio-system --output wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
istiod 1/1 1 1 10m discovery docker.io/istio/pilot:1.16.1 istio=pilot
(可选)安装 Istio 的入站网关:
$ kubectl create namespace istio-ingress
$ kubectl label namespace istio-ingress istio-injection=enabled
$ helm install istio-ingress istio/gateway -n istio-ingress --wait
请参阅安装网关以获得关于网关安装的详细文档。
网关被部署的命名空间不得具有
istio-injection=disabled
标签。 有关更多信息,请参见控制注入策略。有关如何使用 Helm 后期渲染器自定义 Helm chart 的详细文档, 请参见高级 Helm Chart 自定义。
更新 Istio 配置
你可以用自己的安装参数,覆盖掉前面用到的 Istio Helm chart 的默认行为, 然后按照 Helm 升级流程来定制安装你的 Istio 网格系统。 至于可用的配置项,你可以通过使用 helm show values istio/<chart>
来找到配置。 例如:helm show values istio/gateway
。
从非 Helm 安装迁移
如果你需要将使用 istioctl
或 Operator 安装的 Istio 迁移到 Helm, 那要删除当前 Istio 控制平面资源,并根据上面的说明,使用 Helm 重新安装 Istio。 在删除当前 Istio 时,前外不能删掉 Istio 的客户资源定义(CRDs),以免丢掉你的定制 Istio 资源。
建议:从集群中删除 Istio 前,使用上面的说明备份你的 Istio 资源。
依据你的安装方式,选择 Istioctl 卸载指南或 Operator 卸载指南。
卸载
您可以通过卸载上述安装的 chart,以便卸载 Istio 和及其组件。
列出在命名空间
istio-system
中安装的所有 Istio chart:$ helm ls -n istio-system
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
istio-base istio-system 1 ... ... ... ... deployed base-1.0.0 1.0.0
istiod istio-system 1 ... ... ... ... deployed istiod-1.0.0 1.0.0
(可选)删除 Istio 的所有网关 chart:
$ helm delete istio-ingress -n istio-ingress
$ kubectl delete namespace istio-ingress
删除 Istio discovery chart:
$ helm delete istiod -n istio-system
删除 Istio base chart:
从设计角度而言,通过 Helm 删除 chart 并不会删除通过该 chart 安装的 CRD。
$ helm delete istio-base -n istio-system
删除命名空间
istio-system
:$ kubectl delete namespace istio-system
卸载稳定的修订版标签资源
如果你决定继续使用旧的控制平面不更新,您可以通过第一次发布来卸载较新的版本及其标记 helm template istiod istio/istiod -s templates/revision-tags.yaml --set revisionTags={prod-canary} --set revision=canary -n istio-system | kubectl delete -f -
。 您必须按照上述卸载步骤卸载 Istio 的修订版。
如果您使用就地升级安装了此版本的网关,则还必须手动重新安装上一个版本的网关,移除以前的版本及其标记不会自动恢复以前就地升级的网关。
(可选)删除 Istio 安装的 CRD
永久删除 CRD 会移除您在集群中已创建的所有 Istio 资源。 用下面命令永久删除集群中安装的 Istio CRD:
$ kubectl get crd -oname | grep --color=never 'istio.io' | xargs kubectl delete