$ mkdir memcached-operator
Operator SDK 包含用于生成利用现有 Ansible playbook 和模块来部署 Kubernetes 资源作为统一应用程序的操作符项目的选项,无需编写任何 Go 代码。
Red Hat 支持的 Operator SDK CLI 工具版本(包括与操作符项目相关的脚手架和测试工具)已弃用,并计划在未来版本的 OpenShift Container Platform 中删除。Red Hat 将在此版本的生命周期内为此功能提供错误修复和支持,但此功能将不再接收增强功能,并将从未来的 OpenShift Container Platform 版本中删除。 不建议使用 Red Hat 支持的 Operator SDK 版本创建新的操作符项目。拥有现有操作符项目的 Operator 作者可以使用 OpenShift Container Platform 4.17 版本中发布的 Operator SDK CLI 工具版本来维护其项目并创建针对较新版本的 OpenShift Container Platform 的 Operator 版本。 以下与操作符项目相关的基础镜像未被弃用。这些基础镜像的运行时功能和配置 API 仍然支持错误修复和解决 CVE。
有关 OpenShift Container Platform 中已弃用或删除的主要功能的最新列表,请参阅 OpenShift Container Platform 发行说明中的“已弃用和删除的功能”部分。 有关不受支持的社区维护版本的 Operator SDK 的信息,请参阅Operator SDK (Operator Framework)。 |
为了演示使用 Operator SDK 提供的工具和库设置和运行基于Ansible的操作符的基础知识,Operator 开发人员可以为 Memcached(一个分布式键值存储)构建一个基于 Ansible 的示例操作符,并将其部署到集群。
已安装 Operator SDK CLI
已安装 OpenShift CLI (oc
) 4.17+
Ansible 2.15.0
Ansible Runner 2.3.3+
Ansible Runner HTTP 事件发射器插件 1.0.0+
Python 3.9+
使用具有 cluster-admin
权限的帐户使用 oc
登录到 OpenShift Container Platform 4.17 集群
要允许集群拉取镜像,您推送镜像的存储库必须设置为公共存储库,或者您必须配置镜像拉取密钥。
您可以使用 Operator SDK 构建和部署一个简单的基于 Ansible 的 Memcached 操作符。
创建项目。
创建项目目录
$ 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。使用您可以推送到的注册表设置包含拉取规范的IMG
镜像。
$ 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"}
删除CR。
运行以下命令删除CR
$ oc delete -f config/samples/cache_v1_memcached.yaml -n memcached-operator-system
清理。
运行以下命令清理在此过程中创建的资源
$ make undeploy
请参阅基于Ansible的Operator的Operator SDK教程,以更深入地了解如何构建基于Ansible的Operator。