使用 Helm 安装

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

本指南中使用的 baseistiod Helm Chart 与通过 IstioctlOperator 安装 Istio 时使用的 Chart 相同。 但是,通过 Istioctl 和 Operator 进行安装时使用了与本指南所述 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 组件,创建命名空间 istio-system

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

    $ helm install istio-base istio/base -n istio-system --set defaultRevision=default
    
  3. 使用 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.22.1  1.22.1
    

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

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

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

    $ helm install istiod istio/istiod -n istio-system --wait
    
  6. 验证 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.22.1   1.22.1
    istiod     istio-system 1        2024-04-17 22:14:45.964722028 +0000 UTC deployed istiod-1.22.1 1.22.1
    
  7. 获取已安装的 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
    
  8. 检查 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.22.1   istio=pilot
    
  9. (可选)安装 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 或 Operator 安装的 Istio 迁移到 Helm, 那要删除当前 Istio 控制平面资源,并根据上面的说明,使用 Helm 重新安装 Istio。 在删除当前 Istio 时,千万不能删掉 Istio 的自定义资源定义(CRD),以免丢掉您的自定义 Istio 资源。

依据您的安装方式,选择 Istioctl 卸载指南Operator 卸载指南

卸载

您可以通过卸载上述安装的 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.22.1   1.22.1
    istiod     istio-system 1        2024-04-17 22:14:45.964722028 +0000 UTC deployed istiod-1.22.1 1.22.1
    
  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
这些信息有用吗?
您是否有更多建议和改进意见?

感谢您的反馈!