使用 Istioctl 安装
跟随本指南安装、配置 Istio 网格,用于深入评估及生产发布。 如果您是 Istio 新手,只想简单尝试,请参考快速入门指南。
本安装指南使用命令行工具 istioctl, 它提供丰富的定制功能,用于定制 Istio 控制平面以及数据平面 Sidecar。 它还提供用户输入验证功能,这有助于防止安装错误;提供定制选项,可以覆盖配置的任何方面。
使用这些说明,您可以选取任意一个 Istio 内置的配置档, 为您的特定需求进一步定制配置。
istioctl
命令通过命令行的选项支持完整的
IstioOperator
API,
这些选项用于单独设置、以及接收包含 IstioOperator 定制资源(CR)的 yaml 文件。
先决条件
开始之前,检查下列先决条件:
- 下载 Istio 发行版。
- 执行必要的平台安装。
- 检查 Pod 和服务的要求。
使用默认配置档安装 Istio
最简单的选择是用下面命令安装 Istio 默认配置档:
$ istioctl install
此命令在 Kubernetes 集群上安装 default
配置档。
default
配置档是建立生产环境的一个良好起点,
这和较大的 demo
配置档不同,后者常用于评估一组广泛的 Istio 特性。
可以配置各种设置来修改安装。比如,要启动访问日志:
$ istioctl install --set meshConfig.accessLogFile=/dev/stdout
从外部 chart 安装
默认情况下,istioctl
使用内置 chart 生成安装清单。
这些 chart 随同 istioctl
一起发布,用以满足审计和定制,您可以在发行包的 manifests
目录下找到它们。
istioctl
除了使用内置 chart 外,还可以使用外部 chart。
为了选择外部 chart,可以设置参数 manifests
指向本地文件系统路径:
$ istioctl install --manifests=manifests/
如果使用 istioctl
1.19.4 版本的二进制文件,此命令将得到和独立运行 istioctl install
相同的结果,
这是因为它指向了和内置 chart 相同的 chart。
除非要实验或测试新特性,我们建议使用内置的 chart,而不是外部 chart,以保障 istioctl
与 chart 的兼容性。
安装一个不同的配置档
其他的 Istio 配置档,可以通过在命令行传递配置档名称的方式,安装到集群。
例如,下面命令可以用来安装 demo
配置档。
$ istioctl install --set profile=demo
检查安装了什么
istioctl
命令把安装 Istio 的 IstioOperator
CR 保存到一个叫 installed-state
的 CR 副本中。
故无须检查 Istio 安装的 Deployment、Pod、Service 等其他资源,例如:
$ kubectl -n istio-system get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
istio-egressgateway 1/1 1 1 25s
istio-ingressgateway 1/1 1 1 24s
istiod 1/1 1 1 20s
可以查看 installed-state
CR,来了解集群中都安装了什么,也可以看到所有的定制设置。
例如:用下面命令将它的内容导出到一个 YAML 文件:
$ kubectl -n istio-system get IstioOperator installed-state -o yaml > installed-state.yaml
在一些 istioctl
命令中,installed-state
CR 被用于执行检查任务,因此不能删除。
展示可用配置档的列表
您可以用下面命令展示 istioctl
可以访问到的 Istio 配置档的名称:
$ istioctl profile list
Istio configuration profiles:
default
demo
empty
minimal
openshift
preview
remote
展示配置档的配置信息
您可以浏览一个配置档的配置信息。例如,运行下面命令浏览 demo
配置档的设置信息:
$ istioctl profile dump demo
components:
egressGateways:
- enabled: true
k8s:
resources:
requests:
cpu: 10m
memory: 40Mi
name: istio-egressgateway
...
只浏览配置文件的某个部分的话,可以用 --config-path
参数,它将只选择配置文件中指定路径的局部内容:
$ istioctl profile dump --config-path components.pilot demo
enabled: true
k8s:
env:
- name: PILOT_TRACE_SAMPLING
value: "100"
resources:
requests:
cpu: 10m
memory: 100Mi
显示配置文件的差异
profile diff
子命令可用于显示配置档之间的差异,
它在把更改应用到集群之前,检查定制效果方面非常有用。
您可以使用此命令显示 default 和 demo 两个配置档之间的差异:
$ istioctl profile diff default demo
gateways:
egressGateways:
- - enabled: false
+ - enabled: true
...
k8s:
requests:
- cpu: 100m
- memory: 128Mi
+ cpu: 10m
+ memory: 40Mi
strategy:
...
安装前生成清单文件
在安装 Istio 之前,可以用 manifest generate
子命令生成清单文件。
例如,用下面命令生成 default
配置档的清单文件:
$ istioctl manifest generate > $HOME/generated-manifest.yaml
生成的清单文件可用于检查具体安装了什么,也可用于跟踪清单是如何随着时间而改变的。
虽然 IstioOperator
CR 代表完整的用户配置,足以用于跟踪,
但 manifest generate
命令的输出还能截获底层 chart 潜在的改变,因此可以用于跟踪实际安装过的资源。
manifest generate
的输出还能传递给 kubectl apply
或类似的命令,用来安装 Istio。
然而,这些替代的安装方法不能像 istioctl install
那样,将相同的依赖顺序应用于资源,
并且也没有在 Istio 发行版中测试过。
显示清单的差异
使用这一组命令,以 YAML 风格的差异对比方式,显示 default 配置项和定制安装生成的两个清单之间的差异:
$ 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
验证安装是否成功
您可以用 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
要从集群中完整卸载 Istio,运行下面命令:
$ istioctl uninstall --purge
或者,只移除指定的 Istio 控制平面,运行以下命令:
$ istioctl uninstall <your original installation options>
或
$ istioctl manifest generate <your original installation options> | kubectl delete --ignore-not-found=true -f -
控制平面的命名空间(例如:istio-system
)默认不会被移除。
如果确认不再需要,用下面命令移除该命名空间:
$ kubectl delete namespace istio-system