使用 Istioctl 安装
请按照本指南安装和配置 Istio 网格,以进行深入评估或用于生产。如果您刚接触 Istio 或者只是要简单试用,请参考 开始 文档进行操作。
本指南使用可以高度自定义 Istio 控制平面和数据平面的 istioctl
命令行工具。该命令行工具具有用户输入校验功能,可以防止错误的安装和自定义选项。
使用这些命令说明,您可以选择 Istio 的任何内置 配置文件 然后根据您的特定需求进一步自定义配置。
前提条件
开始之前,请检查以下前提条件:
- 下载 Istio 发行版本。
- 执行任何必要的 特定于平台的设置。
- 检查 Pods 和 Services 的要求。
使用默认配置文件安装 Istio
最简单的选择是安装 default
Istio 配置文件 使用以下命令:
$ istioctl manifest apply
此命令将在您配置的 Kubernetes 集群上安装 default
配置文件。default
配置文件建立生产环境的良好起点,这与旨在评估广泛的 Istio 功能特性的较大的 demo
配置文件不同。
如果要在 default
配置文件之上启用安全性,可以设置与安全相关的配置参数:
$ istioctl manifest apply --set values.global.mtls.enabled=true
通常,您可以像使用 helm 一样在 istioctl
中配置 —set
标志。唯一的区别是必须为配置路径增加 values.
前缀,因为这是 Helm 透传 API 的路径,如下所述。
从外部 Chart 安装
通常,istioctl
使用内置 Chart 生成安装清单。这些 Chart 与 istioctl
一起发布,用于审核和自定义,它们放置在 install/kubernetes/operator/charts
目录下。除了使用内置 Chart 外,istioctl
还可以使用外部 Chart 生成安装清单。要选择外部 Chart ,请配置 installPackagePath
参数(接收本地文件系统路径):
$ istioctl manifest apply --set installPackagePath=~/istio-releases/istio-1.5.0/install/kubernetes/operator/charts
如果使用 istioctl
1.5.0 二进制文件,该命令执行结果与通过 istioctl manifest apply
安装相同,因为它指向的 Chart 与内置 Chart 相同。除了试验或测试新特性之外,我们建议使用内置 Chart 而不是外部提供,以确保 istioctl
二进制文件与 Chart 的兼容性。
安装其他配置文件
可以通过在命令行上设置配置文件名称安装其他 Istio 配置文件到群集中。例如,可以使用以下命令,安装 demo
配置文件:
$ istioctl manifest apply --set profile=demo
显示可用配置文件的列表
您可以使用以下 istioctl
命令来列出 Istio 配置文件名称:
$ istioctl profile list
Istio configuration profiles:
minimal
remote
sds
default
demo
显示配置文件的配置
您可以查看配置文件的配置设置。 例如,通过以下命令查看 default
配置文件的设置:
$ istioctl profile dump demo
autoInjection:
components:
injector:
enabled: true
k8s:
replicaCount: 1
strategy:
rollingUpdate:
maxSurge: 100%
maxUnavailable: 25%
enabled: true
cni:
components:
cni:
enabled: false
enabled: false
...
要查看整个配置的子集,可以使用 —config-path
标志,该标志仅选择部分给定路径下的配置:
$ istioctl profile dump --config-path trafficManagement.components.pilot demo
enabled: true
k8s:
env:
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: GODEBUG
value: gctrace=1
- name: PILOT_TRACE_SAMPLING
value: "100"
- name: CONFIG_NAMESPACE
value: istio-config
hpaSpec:
maxReplicas: 5
metrics:
...
显示配置文件中的差异
profile diff
子命令可用于显示配置文件之间的差异,在将更改应用于集群之前,这对于检查自定义的效果很有用。
您可以使用以下命令显示默认配置文件和演示配置文件之间的差异:
$ istioctl profile dump default > 1.yaml
$ istioctl profile dump demo > 2.yaml
$ istioctl profile diff 1.yaml 2.yaml
gateways:
components:
egressGateway:
- enabled: false
+ enabled: true
...
requests:
- cpu: 100m
- memory: 128Mi
+ cpu: 10m
+ memory: 40Mi
strategy:
...
安装前生成清单
您可以在安装 Istio 之前使用 manifest generate
子命令生成清单,而不是 manifest apply
。例如,使用以下命令为 default
配置文件生成清单:
$ istioctl manifest generate > $HOME/generated-manifest.yaml
根据需要检查清单,然后使用以下命令应用清单:
$ kubectl apply -f $HOME/generated-manifest.yaml
由于集群中的资源不可用,此命令可能显示暂时错误。
显示清单差异
您可以使用以下命令显示默认配置文件和自定义安装之间生成的清单中的差异:
$ istioctl manifest generate > 1.yaml
$ istioctl manifest generate -f samples/operator/pilot-k8s.yaml > 2.yaml
$ istioctl manifest diff 1.yam1 2.yaml
Differences of manifests are:
Object Deployment:istio-system:istio-pilot has diffs:
spec:
template:
spec:
containers:
'[0]':
resources:
requests:
cpu: 500m -> 1000m
memory: 2048Mi -> 4096Mi
nodeSelector: -> map[master:true]
tolerations: -> [map[effect:NoSchedule key:dedicated operator:Exists] map[key:CriticalAddonsOnly
operator:Exists]]
Object HorizontalPodAutoscaler:istio-system:istio-pilot has diffs:
spec:
maxReplicas: 5 -> 10
minReplicas: 1 -> 2
验证安装成功
您可以使用 verify-install
命令检查 Istio 安装是否成功,它将集群上的安装与您指定的清单进行比较。
如果未在部署之前生成清单,请运行以下命令以现在生成它:
$ istioctl manifest generate <your original installation options> > $HOME/generated-manifest.yaml
然后运行以下 verify-install
命令以查看安装是否成功:
$ istioctl verify-install -f $HOME/generated-manifest.yaml
定制配置
除了安装 Istio 的任何内置组件 配置文件,istioctl manifest
提供了用于自定义配置的完整 API。
可以使用命令上的 —set
选项分别设置此 API 中的配置参数。 例如,要在 default
配置文件之上启用安全性,请使用以下命令:
$ istioctl manifest apply --set values.global.mtls.enabled=true
或者,可以在 YAML 文件中指定 IstioControlPlane
配置,并使用 -f
选项将其传给 istioctl
:
$ istioctl manifest apply -f samples/operator/pilot-k8s.yaml
为了向后兼容,还完全支持 Helm 安装。若要在命令行中设置它们,请在选项名称前面加上 “values.
“。如下所示,下面命令就重写了 Helm 的 pilot.traceSampling
配置选项:
$ istioctl manifest apply --set values.pilot.traceSampling=0.1
如 Customize Istio settings using the Helm API 所述,Helm 值也可以在 IstioControlPlane
定义中设置。
标识 Istio 功能或组件
IstioControlPlane
API 按功能对控制平面组件进行分组,如下表所示:
功能 | 组件 |
---|---|
base | CRDs |
trafficManagement | pilot |
policy | policy |
telemetry | telemetry |
security | citadel , nodeAgent , certManager |
configManagement | galley |
gateways | ingressGateway , egressGateway |
autoInjection | injector |
coreDNS | coreDNS |
thirdParty | cni |
除了核心的 Istio 组件之外,还提供了第三方附加功能和组件:
功能 | 组件 |
---|---|
telemetry | prometheus , prometheusOperator , grafana , kiali , tracing |
可以启用或禁用功能,这可以启用或禁用作为功能一部分的所有组件。可以通过组件,功能部件或全局设置组件安装到的命名空间。
配置功能或组件设置
从上表中识别功能部件或组件的名称后,可以使用 API 设置值使用 —set
标志,或创建一个覆盖文件并使用 —filename
标志。—set
标志自定义一些参数的效果很好。覆盖文件旨在进行更广泛的自定义,或者跟踪配置更改。
最简单的自定义是从配置配置文件默认值打开或关闭功能或组件。
要在默认配置配置文件中禁用遥测功能,请使用以下命令:
$ istioctl manifest apply --set telemetry.enabled=false
或者,您可以使用配置覆盖文件禁用遥测功能:
- 创建一个文件
telemetry_off.yaml
文件并且写入以下内容:
apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
spec:
telemetry:
enabled: false
- 将
telemetry_off.yaml
覆盖文件与manifest apply
命令一起使用:
$ istioctl manifest apply -f telemetry_off.yaml
您还可以使用这种方法来设置组件级配置,例如启用节点代理:
$ istioctl manifest apply --set security.components.nodeAgent.enabled=true
另一个定制是为功能部件和组件选择不同的命名空间。以下是一个定制命名空间的例子:
apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
spec:
defaultNamespace: istio-system
security:
namespace: istio-security
components:
citadel:
namespace: istio-citadel
安装此文件将应用默认配置文件,并将组件安装到以下命名空间中:
- Citadel 组件 将被安装到
istio-citadel
命名空间 - 所有其他安全相关的组件将被安装到
istio-security
命名空间 - 剩余的 Istio 组件安装到 istio-system 命名空间
自定义 Kubernetes 设置
IstioControlPlane
API 允许以一致的方式自定义每个组件的 Kubernetes 设置。
每一个组件都有一个允许修改配置的 KubernetesResourceSpec
。使用此列表来标识要自定义的设置:
- Resources
- Readiness probes
- Replica count
HorizontalPodAutoscaler
PodDisruptionBudget
- Pod annotations
- Service annotations
ImagePullPolicy
- Priority class name
- Node selector
- Affinity and anti-affinity所有这些 Kubernetes 设置都使用 Kubernetes API 定义,因此 Kubernetes文档 可以用作参考。
以下示例覆盖文件可调整 TrafficManagement
功能的资源和 pod 的自动水平缩放的 Pilot 设置:
apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
spec:
trafficManagement:
components:
pilot:
k8s:
resources:
requests:
cpu: 1000m # override from default 500m
memory: 4096Mi # ... default 2048Mi
hpaSpec:
maxReplicas: 10 # ... default 5
minReplicas: 2 # ... default 1
nodeSelector:
master: "true"
tolerations:
- key: dedicated
operator: Exists
effect: NoSchedule
- key: CriticalAddonsOnly
operator: Exists
使用 manifest apply
将修改后的设置应用于集群:
$ istioctl manifest apply -f samples/operator/pilot-k8s.yaml
使用 Helm API 自定义 Istio 设置
IstioControlPlane
API 使用 values
字段直接调用 Helm API 的接口对于字段进行设值。
下面的 YAML 文件可以通过 Helm API 配置全局和 Pilot 配置:
apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
spec:
trafficManagement:
components:
pilot:
values:
traceSampling: 0.1 # override from 1.0
# global Helm settings
values:
global:
monitoringPort: 15050
一些参数将在 Helm 和 IstioControlPlane
API 中暂时存在,包括 Kubernetes 资源,命名空间和启用设置。 Istio 社区建议使用 IstioControlPlane
API,因为它更专一,经过验证并遵循社区毕业流程。
卸载 Istio
可以使用以下命令来卸载 Istio:
$ istioctl manifest generate <your original installation options> | kubectl delete -f -
相关内容
演示如何使用 istioctl analyze 来识别配置中的潜在问题。
向您展示如何使用 istioctl describe 来验证您的网格中的 pod 的配置。
在 Istio 中配置和管理 DNS 证书。
关于 Istio 基于 operator 的安装和控制平面管理特性的介绍。
通过分析 Istio 配置来发现潜在问题和一般问题。
一种更安全管理 Istio webhook 的方法。