使用 Helm 安装

请遵循本指南使用 Helm 安装和配置 Istio 网格。

本指南中使用的 baseistiod 的 Helm Chart 与通过 Istioctl 安装 Istio 时使用的相同。 但是,通过 Istioctl 安装使用的网关 Chart 与本指南中描述的 Chart 不同

先决条件

  1. 执行任何必要的特定于平台的设置

  2. 检查 Pod 和服务的要求

  3. 安装 Helm 客户端 3.6 或更高的版本。

  4. 配置 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> 参数在一个自定义值文件中指定几个参数。

  1. 安装 Istio Base Chart,它包含了集群范围的自定义资源定义 (CRD),这些资源必须在部署 Istio 控制平面之前安装:

    $ helm install istio-base istio/base -n istio-system --set defaultRevision=default --create-namespace
  2. 使用 helm ls 命令验证 CRD 的安装情况:

    $ helm ls -n istio-system
    NAME       NAMESPACE    REVISION UPDATED                                 STATUS   CHART        APP VERSION
    istio-base istio-system 1        2024-04-17 22:14:45.964722028 +0000 UTC deployed base-1.25.0  1.25.0

    在输出中找到 istio-base 的条目,并确保状态已被设置为 deployed

  3. 如果您打算使用 Istio CNI Chart,那您现在就必须这样操作。 请参阅通过 CNI 插件安装 Istio了解更多信息。

  4. 安装 Istio Discovery Chart,它用于部署 istiod 服务:

    $ helm install istiod istio/istiod -n istio-system --wait
  5. 验证 Istio Discovery Chart 的安装情况:

    $ helm ls -n istio-system
    NAME       NAMESPACE    REVISION UPDATED                                 STATUS   CHART         APP VERSION
    istio-base istio-system 1        2024-04-17 22:14:45.964722028 +0000 UTC deployed base-1.25.0   1.25.0
    istiod     istio-system 1        2024-04-17 22:14:45.964722028 +0000 UTC deployed istiod-1.25.0 1.25.0
  6. 获取已安装的 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
  7. 检查 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.25.0   istio=pilot
  8. (可选)安装 Istio 的入站网关:

    $ kubectl create namespace istio-ingress
    $ helm install istio-ingress istio/gateway -n istio-ingress --wait

    参阅安装网关以获得关于网关安装的详细文档。

更新 Istio 配置

您可以用自己的安装参数,覆盖掉前面用到的 Istio Helm Chart 的默认行为, 然后按照 Helm 升级流程来定制安装您的 Istio 网格系统。 至于可用的配置项,您可以通过使用 helm show values istio/<chart> 来找到配置。 例如 helm show values istio/gateway

从非 Helm 安装迁移

如果你要从使用 istioctl 安装的 Istio 版本迁移到 Helm(Istio 1.5 或更早版本), 则需要删除当前的 Istio 控制平面资源,并根据上面的说明, 使用 Helm 重新安装 Istio。在删除当前 Istio 时, 千万不能删掉 Istio 的自定义资源定义(CRD),以免丢掉您的自定义 Istio 资源。

您可以按照 Istioctl 卸载指南中提到的步骤进行操作。

卸载

您可以通过卸载上述安装的 Chart,以便卸载 Istio 和及其组件。

  1. 列出在命名空间 istio-system 中安装的所有 Istio Chart:

    $ helm ls -n istio-system
    NAME       NAMESPACE    REVISION UPDATED                                 STATUS   CHART         APP VERSION
    istio-base istio-system 1        2024-04-17 22:14:45.964722028 +0000 UTC deployed base-1.25.0   1.25.0
    istiod     istio-system 1        2024-04-17 22:14:45.964722028 +0000 UTC deployed istiod-1.25.0 1.25.0
  2. (可选)删除 Istio 的所有网关 Chart:

    $ helm delete istio-ingress -n istio-ingress
    $ kubectl delete namespace istio-ingress
  3. 删除 Istio Discovery Chart:

    $ helm delete istiod -n istio-system
  4. 删除 Istio Base Chart:

    $ helm delete istio-base -n istio-system
  5. 删除命名空间 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

安装前生成清单

您可以在安装 Istio 之前使用 helm template 子命令为每个组件生成清单。 例如,要为 istiod 组件生成可以使用 kubectl 安装的清单:

$ helm template istiod istio/istiod -n istio-system --kube-version {Kubernetes version of target cluster} > istiod.yaml

生成的清单可用于检查具体安装了什么以及跟踪清单随时间的变化。

要安装上面生成的清单,它将在目标集群中创建 istiod 组件:

$ kubectl apply -f istiod.yaml
这些信息有用吗?
您是否有更多建议和改进意见?

感谢您的反馈!