<commit_before>---
title: Istio 最小化安装
description: 使用 Helm 最小化安装 Istio 。
weight: 30
keywords: [kubernetes,helm]
icon: helm
---

使用 Helm 最小化安装和配置 Istio 的快速入门指南。此最小安装提供了 Istio 的流量管理功能。

## 前置条件

请参考快速入门指南中描述的[前置条件](/zh/docs/setup/kubernetes/install/kubernetes/#前置条件)。

## 安装步骤

1. 如果你的 Helm 版本低于 2.10.0，通过 `kubectl apply` 安装 Istio 的 [Custom Resource Definitions](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions)，稍等片刻 CRD 会被提交到 `kube-apiserver`：

    {{< text bash >}}
    $ kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
    {{< /text >}}

1. 从以下**互斥**的两个选项中选择一个并执行。

### 选项 1：通过 Helm 命令 `helm template` 安装

1. 将 Istio 的核心组件添加到 Kubernetes 的描述文件，并命名为 `istio-minimal.yaml`：

    {{< text bash >}}
    $ helm template install/kubernetes/helm/istio --name istio --namespace istio-system \
      --set security.enabled=false \
      --set ingress.enabled=false \
      --set gateways.istio-ingressgateway.enabled=false \
      --set gateways.istio-egressgateway.enabled=false \
      --set galley.enabled=false \
      --set sidecarInjectorWebhook.enabled=false \
      --set mixer.enabled=false \
      --set prometheus.enabled=false \
      --set pilot.sidecar=false > $HOME/istio-minimal.yaml
    {{< /text >}}

1. 通过描述文件安装 Pilot 组件：

    {{< text bash >}}
    $ kubectl create namespace istio-system
    $ kubectl apply -f $HOME/istio-minimal.yaml
    {{< /text >}}

### 选项 2：通过 `helm install` 命令安装 Helm 和 Tiller

本选项允许 Helm 和 [Tiller](https://github.com/kubernetes/helm/blob/master/docs/architecture.md#components) 管理 Istio 的生命周期。

1. 如果还没有为 Tiller 安装 service account，请安装一个：

    {{< text bash >}}
    $ kubectl apply -f install/kubernetes/helm/helm-service-account.yaml
    {{< /text >}}

1. 使用已安装的 service account 将 Tiller 安装到你的集群：

    {{< text bash >}}
    $ helm init --service-account tiller
    {{< /text >}}

1. 安装 Istio：

    {{< text bash >}}
    $ helm install install/kubernetes/helm/istio --name istio-minimal --namespace istio-system \
      --set security.enabled=false \
      --set ingress.enabled=false \
      --set gateways.istio-ingressgateway.enabled=false \
      --set gateways.istio-egressgateway.enabled=false \
      --set galley.enabled=false \
      --set sidecarInjectorWebhook.enabled=false \
      --set mixer.enabled=false \
      --set prometheus.enabled=false \
      --set pilot.sidecar=false
    {{< /text >}}

1. 确保已经部署 `istio-pilot-*` Kubernetes pod，并且容器已经正常运行：

{{< text bash >}}
$ kubectl get pods -n istio-system
NAME                                     READY     STATUS    RESTARTS   AGE
istio-pilot-58c65f74bc-2f5xn             1/1       Running   0          1m
{{< /text >}}

## 卸载

* 对于选项 1，使用 `kubectl` 卸载：

    {{< text bash >}}
    $ kubectl delete -f $HOME/istio-minimal.yaml
    {{< /text >}}

* 对于选项 2，使用 Helm 卸载：

    {{< warning >}}
    卸载此 chart 不会删除 Istio 已注册的 CRD。根据设计，Istio 预计 CRD 会泄漏到 Kubernetes 环境中。
    由于 CRD 包含配置 Istio 所需的所有运行时配置数据。因此，
    我们认为运维人员会更好地明确删除运行时配置数据而不是是它意外丢失。
    {{< /warning >}}

    {{< text bash >}}
    $ helm delete --purge istio-minimal
    {{< /text >}}

    如果 Helm 版本低于 2.10.0，在部署新版本的 Istio chart 之前，你需要手动清理额外的 job 资源：

    {{< text bash >}}
    $ kubectl -n istio-system delete job --all
    {{< /text >}}

* 如果需要，删除 CRD：

    {{< text bash >}}
    $ kubectl delete -f install/kubernetes/helm/istio/templates/crds.yaml
    {{< /text >}}<commit_msg>zh: sync with upstream (#3526)<commit_after>---
title: Istio 最小化安装
description: 使用 Helm 最小化安装 Istio 。
weight: 30
keywords: [kubernetes,helm,minimal]
icon: helm
---

使用 Helm 最小化安装和配置 Istio 的快速入门指南。

此最小安装提供了 Istio 的流量管理功能。

## 前置条件

请参考快速入门指南中描述的[前置条件](/zh/docs/setup/kubernetes/install/kubernetes/#前置条件)。

## 安装步骤

您可以使用两种互斥的选项来安装Istio：
- 如要使用 Kubernetes 清单文件来安装 Istio，请按照[选项 #1](#option-1) 的说明进行操作。
- 如要使用 [Helm 的 Tiller pod](https://helm.sh/) 来管理 Istio 发布，请按照 [选项 #2](#option-2) 的说明进行操作。

### 选项 1：通过 Helm 命令 `helm template` 安装 {#option-1}

如您的集群中没有部署 [Tiller](https://github.com/kubernetes/helm/blob/master/docs/architecture.md#components) 并且您也不打算安装它时，请使用此选项。

1. 通过 `kubectl apply` 安装所有的 Istio [自定义资源定义（CRD）](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions)，等待几秒钟以便 CRD 被提交到 Kube api-server：

    {{< text bash >}}
    $ for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl apply -f $i; done
    {{< /text >}}

1. 将 Istio 核心组件渲染到一个名为 `istio-minimal.yaml` 的 Kubernetes 清单文件中：

    {{< text bash >}}
    $ cat @install/kubernetes/namespace.yaml@ > $HOME/istio-minimal.yaml
    $ helm template install/kubernetes/helm/istio --name istio --namespace istio-system \
      --values install/kubernetes/helm/istio/values-istio-minimal.yaml >> $HOME/istio-minimal.yaml
    {{< /text >}}

1. 使用该清单文件安装 Pilot 组件：

    {{< text bash >}}
    $ kubectl apply -f $HOME/istio-minimal.yaml
    {{< /text >}}

### 选项 2：通过 `helm install` 命令安装 Helm 和 Tiller {#option-2}

本选项允许您使用 Helm 和 [Tiller](https://github.com/kubernetes/helm/blob/master/docs/architecture.md#components) 管理 Istio 的生命周期。

1. 如果还没有为 Tiller 设置 service account，请先创建一个：

    {{< text bash >}}
    $ kubectl apply -f install/kubernetes/helm/helm-service-account.yaml
    {{< /text >}}

1. 使用已安装的 service account 将 Tiller 安装到您的集群：

    {{< text bash >}}
    $ helm init --service-account tiller
    {{< /text >}}

1. 安装 `istio-init` chart 以引导所有的 Istio CRD：

    {{< text bash >}}
    $ helm install install/kubernetes/helm/istio-init --name istio-init --namespace istio-system
    {{< /text >}}

1. 使用下列命令，验证全部 `58` 个 Istio CRD 均已被提交到 Kubernetes api-server：

    {{< text bash >}}
    $ kubectl get crds | grep 'istio.io\|certmanager.k8s.io' | wc -l
    58
    {{< /text >}}

1. 安装 `istio` chart：

    {{< text bash >}}
    $ helm install install/kubernetes/helm/istio --name istio-minimal --namespace istio-system \
      --values install/kubernetes/helm/istio/values-istio-minimal.yaml
    {{< /text >}}

1. 确保 `istio-pilot-*` 的 pod 已经被部署并且其容器已经拉起并运行：

{{< text bash >}}
$ kubectl get pods -n istio-system
NAME                                     READY     STATUS    RESTARTS   AGE
istio-pilot-58c65f74bc-2f5xn             1/1       Running   0          1m
{{< /text >}}

## 卸载

- 对于选项 1，使用 `kubectl` 卸载：

    {{< text bash >}}
    $ kubectl delete -f $HOME/istio-minimal.yaml
    {{< /text >}}

- 对于选项 2，使用 Helm 卸载：

    {{< warning >}}
    Uninstalling this chart does not delete Istio's registered CRDs. Istio, by design, expects
    CRDs to leak into the Kubernetes environment. As CRDs contain all the runtime configuration
    data needed to configure Istio. Because of this, we consider it better for operators to
    explicitly delete the runtime configuration data rather than unexpectedly lose it.
    {{< /warning >}}

    {{< text bash >}}
    $ helm delete --purge istio-minimal
    $ helm delete --purge istio-init
    {{< /text >}}

- 如果需要，请运行下列命令删除所有 CRD：

    {{< warning >}}
    Deleting CRDs deletes any configuration changes that you have made to Istio.
    {{< /warning >}}

    {{< text bash >}}
    $ for i in install/kubernetes/helm/istio-init/files/crd*yaml; do kubectl delete -f $i; done
    {{< /text >}}
{'fraction_non_alphanumeric': 0.1417432470064049, 'fraction_numerical': 0.010582010582010581, 'mean_word_length': 2.8391234633885625, 'pattern_counts': {'":': 0, '<': 55, '<?xml version=': 0, '>': 59, 'https://': 6, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1368805', 'n_tokens_mistral': 3205, 'n_tokens_neox': 3208, 'n_words': 624}