5.4. 基于 Ansible 的 Operator
5.4.1. 基于 Ansible 的 Operator 的 Operator SDK 入门
Operator SDK 包括生成 Operator 项目的选项,它利用现有 Ansible playbook 和模块将 Kubernetes 资源部署为统一应用程序,而无需编写任何 Go 代码。
如需演示使用 Operator SDK 提供的工具和库设置并运行基于 Ansible 的 Operator 的基本知识,Operator 开发人员可以为 Memcached、分布式键值存储构建基于 Ansible 的 Operator 示例,并将它部署到集群中。
5.4.1.1. 先决条件
- 已安装 operator SDK CLI
-
已安装 OpenShift CLI(
oc
)v4.7+ - Ansible 版本 v2.9.0
- Ansible Runner 版本 v1.1.0+
- Ansible Runner HTTP Event Emitter plug-in 版本 v1.0.0+
- OpenShift Python client 版本 v0.11.2+
-
使用具有
cluster-admin
权限的oc
登录到 OpenShift Container Platform 4.7 集群 - 要允许集群拉取镜像,推送镜像的存储库必须设置为公共的存储库,或必须配置一个镜像 pull secret。
5.4.1.2. 创建并部署基于 Ansible 的 Operator
您可以使用 Operator SDK 为 Memcached 构建和部署简单的基于 Ansible 的 Operator。
流程
创建一个项目。
创建您的项目目录:
$ mkdir memcached-operator
切换到项目所在的目录:
$ cd memcached-operator
使用
ansible
插件运行operator-sdk init
命令以初始化项目:$ operator-sdk init \ --plugins=ansible \ --domain=example.com
创建 API。
创建简单的 Memcached API:
$ operator-sdk create api \ --group cache \ --version v1 \ --kind Memcached \ --generate-role 1
- 1
- 为 API 生成 Ansible 角色。
构建并推送 Operator 镜像。
使用默认的
Makefile
目标来构建和推送 Operator。使用镜像的 pull spec 设置IMG
,该 spec 使用您可推送到的 registry:$ make docker-build docker-push IMG=<registry>/<user>/<image_name>:<tag>
运行 Operator。
安装 CRD:
$ make install
将项目部署到集群中。将
IMG
设置为您推送的镜像:$ make deploy IMG=<registry>/<user>/<image_name>:<tag>
创建示例自定义资源(CR)。
创建一个示例 CR:
$ oc apply -f config/samples/cache_v1_memcached.yaml \ -n memcached-operator-system
查看 CR 协调 Operator:
$ oc logs deployment.apps/memcached-operator-controller-manager \ -c manager \ -n memcached-operator-system
输出示例
... I0205 17:48:45.881666 7 leaderelection.go:253] successfully acquired lease memcached-operator-system/memcached-operator {"level":"info","ts":1612547325.8819902,"logger":"controller-runtime.manager.controller.memcached-controller","msg":"Starting EventSource","source":"kind source: cache.example.com/v1, Kind=Memcached"} {"level":"info","ts":1612547325.98242,"logger":"controller-runtime.manager.controller.memcached-controller","msg":"Starting Controller"} {"level":"info","ts":1612547325.9824686,"logger":"controller-runtime.manager.controller.memcached-controller","msg":"Starting workers","worker count":4} {"level":"info","ts":1612547348.8311093,"logger":"runner","msg":"Ansible-runner exited successfully","job":"4037200794235010051","name":"memcached-sample","namespace":"memcached-operator-system"}
清理。
运行以下命令清理在此流程中创建的资源:
$ make undeploy
5.4.1.3. 后续步骤
- 如需更深入地了解如何构建基于 Ansible 的 Operator,请参阅基于 Ansible 的 Operator SDK 指南。