介绍 Istio 运算符

介绍 Istio 的基于运算符的新安装和控制平面管理功能。

2019 年 11 月 14 日 | 作者:Martin Ostrowski - Google,Frank Budinsky - IBM

Kubernetes 运算符 提供了一种将人工操作知识编码到软件中的模式,并且是简化软件基础设施组件管理的常用方法。由于 Istio 的管理难度很大,因此它是自动运算符的理想选择。

到目前为止,Helm 始终是安装和升级 Istio 的主要工具。Istio 1.4 引入了一种新的 使用 istioctl 安装 方法。这种新安装方法在 Helm 的优势基础上进行了改进,并增加了以下功能:

Helm 安装 方法正在逐步淘汰。从使用非 Helm 初始安装的版本升级 Istio 1.4 也将被新的 istioctl 升级功能 取代。

新的 istioctl 安装命令使用 自定义资源 来配置安装。自定义资源是新 Istio 运算符实现的一部分,旨在简化 Istio 的安装、升级和复杂配置更改等常见管理任务。验证和检查安装和升级与工具紧密集成,以防止常见错误并简化故障排除。

运算符 API

每个运算符实现都需要一个 自定义资源定义 (CRD) 来定义其自定义资源,即其 API。Istio 的运算符 API 由 IstioControlPlane CRD 定义,该定义是由 IstioControlPlane proto 生成的。API 使用单个字段来选择配置文件,从而支持 Istio 当前的所有 配置文件。例如,以下 IstioControlPlane 资源使用 demo 配置文件配置 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 运算符 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 命令,例如,帮助您列出、显示和比较配置文件和清单。

有关更多详细信息,请参阅 Istio 安装说明

Istio 控制器(alpha)

运算符实现使用 Kubernetes 控制器来持续监控其自定义资源并应用相应的配置更改。Istio 控制器监控 IstioControlPlane 资源,并通过更新相应集群中的 Istio 安装配置来对更改做出反应。

在 1.4 版本中,Istio 控制器处于开发的 alpha 阶段,尚未完全与 istioctl 集成。但是,它 可供使用 kubectl 命令进行实验。例如,要将控制器和 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

资源一经更新,控制器就会检测到更改,并通过相应地更新 Istio 安装来做出响应。

运算符控制器和 istioctl 命令都共享相同的实现。主要区别在于执行上下文。在 istioctl 的情况下,操作在管理员用户的命令执行和安全上下文中运行。在控制器的情况下,集群中的 pod 在其安全上下文中运行代码。在这两种情况下,都会根据模式验证配置,并执行相同的正确性检查。

从 Helm 迁移

为了帮助简化从先前使用 Helm 的配置的过渡,istioctl 和控制器支持对完整 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 配置。

实现

已经创建了几个框架来帮助实现运算符,方法是为部分或全部组件生成存根。Istio 运算符是在 kubebuilder运算符框架 的结合帮助下创建的。Istio 的安装现在使用 proto 来描述 API,以便可以针对模式执行运行时验证。

有关实现的更多信息,请参阅 Istio 运算符存储库 中的 README 和 ARCHITECTURE 文档。

总结

从 Istio 1.4 开始,Helm 安装将被使用新的运算符自定义资源定义 IstioControlPlane 进行配置 API 的新的 istioctl 命令取代。还提供了一个 alpha 控制器,用于早期对运算符进行实验。

新的 istioctl 命令和运算符控制器都会验证配置模式并执行一系列安装更改或升级检查。这些检查与工具紧密集成,以防止常见错误并简化故障排除。

Istio 维护人员预计,这种新方法将改善 Istio 安装和升级期间的用户体验,更好地稳定安装 API,并帮助用户更好地管理和监控其 Istio 安装。

欢迎您在 discuss.istio.io 上提供有关新安装方法的反馈。

分享此文章