Istio Operator 简介
关于 Istio 基于 operator 的安装和控制平面管理特性的介绍。
Kubernetes Operator 提供了一种将人类运维知识编码到软件中的模式,是一种简化软件基础结构组件管理的流行方法。Istio 是自动 Operator 的理想选择,因为它的管理具有挑战性。
到目前为止,Helm 一直是安装和升级 Istio 的主要工具。Istio 1.4 引入了一种新的使用istioctl安装 方法。这种新的安装方法建立在 Helm 的优势之上,并添加了以下内容:
- 用户只需要安装一个工具:
istioctl
- 验证所有 API 字段
- 不在 API 中的小型定制不需要更改 chart 或 API
- 版本特定的升级 hook 可以很容易和稳健地实现
Helm 安装 方法正在弃用中。从 Istio 1.4 升级到一个默认没有安装 Helm 的版本也会被一个新的 istioctl 升级特性所取代。
新的 istioctl
安装命令使用一个 自定义资源 来配置安装。
自定义资源是新的 Istio Operator 实现的一部分,该实现旨在简化安装、升级和复杂的 Istio 配置更改等常见管理任务。
安装和升级的验证和检查与工具紧密集成,以防止常见错误并简化故障排除。
Operator API
每个 Operator 实现都需要一个自定义资源定义(CRD) 来定义它的自定义资源,即它的 API。Istio 的 Operator API 由 IstioControlPlane
CRD 定义,它是由一个 IstioControlPlane
原型生成的。API 支持所有 Istio 当前的配置文件 ,通过使用一个字段来选择 profile。例如,下面的 IstioControlPlane
资源使用 demo
profile 配置 Istio:
apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
metadata:
namespace: istio-operator
name: example-istiocontrolplane
spec:
profile: demo
然后可以使用其他设置来自定义配置。例如,禁用遥测:
apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
metadata:
namespace: istio-operator
name: example-istiocontrolplane
spec:
profile: demo
telemetry:
enabled: false
通过istioctl安装
使用 Istio operator API 的推荐方法是通过一组新的 istioctl
命令。例如,要在集群中安装 Istio:
$ istioctl manifest apply -f <your-istiocontrolplane-customresource>
通过编辑配置文件并再次执行 istioctl manifest apply
来更改安装配置。
升级到新版本的 Istio:
$ istioctl x upgrade -f <your-istiocontrolplane-config-changes>
除了在 IstioControlPlane
资源中指定完整的配置外,istioctl
命令还可以使用 --set
标志传递单独的设置:
$ istioctl manifest apply --set telemetry.enabled=false
还有许多其他 istioctl
命令,例如,它们可以帮助您列出、显示和比较配置 profile 和 manifest。
更多信息请参考 Istio 安装说明。
Istio Controller (alpha)
Operator 实现使用 Kubernetes controller 来持续监控它们的自定义资源并应用相应的配置更改。Istio controller 监控一个 IstioControlPlane
资源,并通过更新相应集群中的 Istio 安装配置来响应更改。
在 1.4 版中,Istio controller 处于开发的 alpha 阶段,没有完全集成到 istioctl
中。但是,可以使用 kubectl
命令来做实验。例如,要将 controller 和默认版本的 Istio 安装到集群中,请运行以下命令:
$ kubectl apply -f https://<repo URL>/operator.yaml
$ kubectl apply -f https://<repo URL>/default-cr.yaml
然后你可以对 Istio 的安装配置进行修改:
$ kubectl edit istiocontrolplane example-istiocontrolplane -n istio-system
一旦资源更新,controller 将检测到这些变化,并相应地更新 Istio 安装。
Operator controller 和 istioctl
命令共享相同的实现。重要的区别在于其执行上下文。对于 istioctl
,操作在管理用户的命令执行和安全上下文中运行。对于 controller,集群中的一个 pod 在其安全上下文中运行代码。在这两种情况下,都根据一个 schema 来验证配置,并执行相同的正确性检查。
从 Helm 迁移
为了方便从使用 Helm 过渡,istioctl
和 controller 支持对 Helm 安装 API 的透传访问。
您可以使用 istioctl --set
来传递 Helm 配置选项,方法是将字符串 values.
放在配置选项前面。例如,对于这个 Helm 命令:
$ helm template ... --set global.mtls.enabled=true
您可以使用 istioctl
这个命令:
$ istioctl manifest generate ... --set values.global.mtls.enabled=true
你也可以在一个 IstioControlPlane
自定义资源中设置 Helm 配置值。
参见 使用 Helm 自定义 Istio 设置。
另一个可以帮助从 Helm 迁移的特性是这个 alpha 命令:istioctl manifest migrate。
此命令可用于将 Helm values.yaml
文件自动转换为相应的 IstioControlPlane
配置。
实现
已经创建了几个框架,通过为部分或所有组件生成存根来帮助实现 Operator。Istio Operator 是在 kubebuilder 和 Operator Framework 的帮助下创建的。Istio 的安装现在使用 proto 来描述 API,这样就可以通过 schema 对执行运行时进行验证。
有关实现的更多信息可以在 Istio Operator 仓库 中的 README 和 ARCHITECTURE 文档中找到。
总结
从 Istio 1.4 开始,Helm 安装将被新的 istioctl
命令所取代,该命令使用新的 Operator 自定义资源定义,IstioControlPlane
,作为配置 API。一个 alpha controller 也被提供用于 Operator 的早期实验。
新的 istioctl
命令和 Operator controller 都会验证配置 schema,并执行安装更改或升级的一系列检查。这些检查与工具紧密集成,以防止常见错误并简化故障排除。
Istio 维护者们期望这种新方法能够改善安装和升级期间的用户体验,更好地稳定安装 API,帮助用户更好地管理和监控他们的 Istio 安装。
我们欢迎您在 discuss.istio.io 上对新的安装方法提出反馈。