istio.io/content/zh/docs/setup/install/istioctl/index.md

10 KiB
Raw Permalink Blame History

title description weight keywords owner test
使用 Istioctl 安装 安装、定制 Istio 配置文件,用于深入评估及生产发布。 10
istioctl
kubernetes
istio/wg-environments-maintainers no

跟随本指南安装、配置 Istio 网格,用于深入评估及生产发布。 如果您是 Istio 新手,只想简单尝试,请参考快速入门指南

本安装指南使用命令行工具 istioctl 它提供丰富的定制功能,用于定制 Istio 控制平面以及数据平面 Sidecar。 它还提供用户输入验证功能,这有助于防止安装错误;提供定制选项,可以覆盖配置的任何方面。

使用这些说明,您可以选取任意一个 Istio 内置的配置档 为您的特定需求进一步定制配置。

istioctl 命令通过命令行的选项支持完整的 IstioOperator API 这些选项用于单独设置、以及接收包含 IstioOperator {{}}定制资源CR{{}}的 yaml 文件。

先决条件

开始之前,检查下列先决条件:

  1. 下载 Istio 发行版
  2. 执行必要的平台安装
  3. 检查 Pod 和 Service 的要求

使用默认配置档安装 Istio

最简单的选择是用下面命令安装 Istio 默认配置档

{{< text bash >}} $ istioctl install {{< /text >}}

此命令在 Kubernetes 集群上安装 default 配置档。 default 配置档是建立生产环境的一个良好起点, 这和较大的 demo 配置档不同,后者常用于评估一组广泛的 Istio 特性。

可以配置各种设置来修改安装。比如,要启动访问日志:

{{< text bash >}} $ istioctl install --set meshConfig.accessLogFile=/dev/stdout {{< /text >}}

{{< tip >}} 本页和文档其他地方的许多示例都是使用 --set 来修改安装参数, 而不是用 -f 传递配置文件。 这么做可以让例子更紧凑。 这两种方法是等价的,但强烈推荐在生产环境使用 -f。 上面的命令可以用 -f 写成如下的形式:

{{< text bash >}} $ cat < ./my-config.yaml apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: meshConfig: accessLogFile: /dev/stdout EOF $ istioctl install -f my-config.yaml {{< /text >}}

{{< /tip >}}

{{< tip >}} 完整的 API 记录在 IstioOperator API 参考文档。 通常,您可以像使用 Helm 一样,在 istioctl 中使用 --set 参数, 并且当前 Helm 的 values.yaml API 向后兼容。 唯一的区别是您必须给原有 values.yaml 路径前面加上 values. 前缀,这是 Helm 透传 API 的前缀。 {{< /tip >}}

从外部 chart 安装

默认情况下,istioctl 使用内置 chart 生成安装清单。 这些 chart 随同 istioctl 一起发布,用以满足审计和定制,您可以在发行包的 manifests 目录下找到它们。 istioctl 除了使用内置 chart 外,还可以使用外部 chart。 为了选择外部 chart可以设置参数 manifests 指向本地文件系统路径:

{{< text bash >}} $ istioctl install --manifests=manifests/ {{< /text >}}

如果使用 istioctl {{< istio_full_version >}} 版本的二进制文件,此命令将得到和独立运行 istioctl install 相同的结果, 这是因为它指向了和内置 chart 相同的 chart。 除非要实验或测试新特性,我们建议使用内置的 chart而不是外部 chart以保障 istioctl 与 chart 的兼容性。

安装一个不同的配置档

其他的 Istio 配置档,可以通过在命令行传递配置档名称的方式,安装到集群。 例如,下面命令可以用来安装 demo 配置档。

{{< text bash >}} $ istioctl install --set profile=demo {{< /text >}}

展示可用配置档的列表

您可以用下面命令展示 istioctl 可以访问到的 Istio 配置档的名称:

{{< text bash >}} $ istioctl profile list Istio configuration profiles: default demo empty minimal openshift preview remote {{< /text >}}

展示配置档的配置信息

您可以浏览一个配置档的配置信息。例如,运行下面命令浏览 demo 配置档的设置信息:

{{< text bash >}} $ istioctl profile dump demo components: egressGateways:

  • enabled: true k8s: resources: requests: cpu: 10m memory: 40Mi name: istio-egressgateway

... {{< /text >}}

只浏览配置文件的某个部分的话,可以用 --config-path 参数,它将只选择配置文件中指定路径的局部内容:

{{< text bash >}} $ istioctl profile dump --config-path components.pilot demo enabled: true k8s: env:

  • name: PILOT_TRACE_SAMPLING value: "100" resources: requests: cpu: 10m memory: 100Mi {{< /text >}}

显示配置文件的差异

profile diff 子命令可用于显示配置档之间的差异, 它在把更改应用到集群之前,检查定制效果方面非常有用。

您可以使用此命令显示 default 和 demo 两个配置档之间的差异:

{{< text bash >}} $ istioctl profile diff default demo gateways: egressGateways:

    • enabled: false
    • enabled: true ... k8s: requests:
  •      cpu: 100m
    
  •      memory: 128Mi
    
  •      cpu: 10m
    
  •      memory: 40Mi
     strategy:
    

... {{< /text >}}

安装前生成清单文件

在安装 Istio 之前,可以用 manifest generate 子命令生成清单文件。 例如,用下面命令生成 default 配置档的清单文件:

{{< text bash >}} $ istioctl manifest generate > $HOME/generated-manifest.yaml {{< /text >}}

生成的清单文件可用于检查具体安装了什么,也可用于跟踪清单是如何随着时间而改变的。 虽然 IstioOperator CR 代表完整的用户配置,足以用于跟踪, 但 manifest generate 命令的输出还能截获底层 chart 潜在的改变,因此可以用于跟踪实际安装过的资源。

manifest generate 的输出还能传递给 kubectl apply 或类似的命令,用来安装 Istio。 然而,这些替代的安装方法不能像 istioctl install 那样,将相同的依赖顺序应用于资源, 并且也没有在 Istio 发行版中测试过。

{{< warning >}} 如果尝试使用 istioctl manifest generate 安装和管理 Istio请注意以下事项

  1. Istio 的命名空间(默认为istio-system)必须手工创建。

  2. 默认情况下Istio 验证将不会被启用。 与 istioctl install 不同,manifest generate 命令不会创建 istiod-default-validator 验证 webhook 配置,除非设置 values.defaultRevision

    {{< text bash >}} $ istioctl manifest generate --set values.defaultRevision=default {{< /text >}}

  3. istioctl install 会在 Kubernetes 上下文中自动探测环境特定的设置, 但以离线运行的 manifest generate 不行,而且可能导致意外结果。 特别是,如果 Kubernetes 环境不支持第三方服务帐户令牌,则必须确保遵循这些步骤

  4. kubectl apply 执行生成的清单,会显示临时错误,这是因为集群中的资源进入可用状态的顺序有问题。

  5. istioctl install 自动清除一些资源,其实这些资源在配置改变时(例如,当您删除网关)就应该被删掉了。 但此机制在 kubectlistio manifest generate 协同使用时并不会发生,所以这些资源必须手动删除。

{{< /warning >}}

显示清单的差异

使用这一组命令,以 YAML 风格的差异对比方式,显示 default 配置项和定制安装生成的两个清单之间的差异:

{{< text bash >}} $ istioctl manifest generate > 1.yaml $ istioctl manifest generate -f samples/operator/pilot-k8s.yaml > 2.yaml $ istioctl manifest diff 1.yaml 2.yaml Differences in manifests are:

Object Deployment:istio-system:istiod has diffs:

spec: template: spec: containers: '[#0]': resources: requests: cpu: 500m -> 1000m memory: 2048Mi -> 4096Mi

Object HorizontalPodAutoscaler:istio-system:istiod has diffs:

spec: maxReplicas: 5 -> 10 minReplicas: 1 -> 2 {{< /text >}}

验证安装是否成功

您可以用 verify-install 命令检查 Istio 是否安装成功,此命令用您指定的清单对比集群中实际的安装情况。

如果您在部署前还没有生成清单文件,那现在就运行下面命令生成一个:

{{< text bash >}} $ istioctl manifest generate > $HOME/generated-manifest.yaml {{< /text >}}

紧接着运行 verify-install 命令,查看安装是否成功:

{{< text bash >}} $ istioctl verify-install -f $HOME/generated-manifest.yaml {{< /text >}}

有关定制安装的更多信息,请参阅定制安装配置

卸载 Istio

要从集群中完整卸载 Istio运行下面命令

{{< text bash >}} $ istioctl uninstall --purge {{< /text >}}

{{< warning >}} 可选的 --purge 参数将移除所有 Istio 资源,包括可能被其他 Istio 控制平面共享的、集群范围的资源。 {{< /warning >}}

或者,只移除指定的 Istio 控制平面,运行以下命令:

{{< text bash >}} $ istioctl uninstall {{< /text >}}

{{< text bash >}} $ istioctl manifest generate | kubectl delete --ignore-not-found=true -f - {{< /text >}}

控制平面的命名空间(例如:istio-system)默认不会被移除。 如果确认不再需要,用下面命令移除该命名空间:

{{< text bash >}} $ kubectl delete namespace istio-system {{< /text >}}