文章目录
1. 主题
2. Operator SDK
2.1 安装
2.2 Build 准备
2.3 Go-Based Operator
3. Ansible Operator
3.1 概述
3.2 Workflow
3.3 创建新项目
3.4 项目概况
3.5 YAML Files
3.6 Build Container Image
3.7 Push to Registry
3.8 Update Deployment
3.9 安装基于ansible的操作系统
3.10 集群测试外
4. Helm Operator
4.1 概述
4.2 设置 Helm Operator
5. Operator 功能
✈推荐阅读:
docker 命令
podman 命令
crictl 命令
operator-sdk 命令
operator-sdk官网
1. 主题
- Operator SDK
- Build Preparation
- Go-Based Operator
- Ansible® Operator
- Helm Operator
- Operator Capabilities
2. Operator SDK
- 使用Kubernetes API库用编程语言编写的Operator
- Default: Go 可能的其他编程语言:java
- 需要编写整个控制器逻辑
- 需要了解informers、shared informers、对象缓存的工作队列和事件处理
Feature | Use |
高级api和抽象 | 更直观地编写运算逻辑 |
脚手架和代码生成工具 | 快速启动新项目 |
扩展 | 覆盖常用的Operator用例 |
2.1 安装
安装容器运行时和构建环境
docker
buildah
从Operator SDK GitHub主页下载Operator SDK可执行文件
将operator-sdk二进制可执行文件移动到PATH
参考:
完整的安装说明:Operator SDK home page
Example Installation
$ sudo wget https://github.com/operator-framework/operator-sdk/releases/download/v0.17.0/operator-sdk-v0.17.0-x86_64-linux-gnu -O /usr/local/bin/operator-sdk $ sudo chmod +x /usr/local/bin/operator-sdk
operator-sdk
executable located in /usr/local/bin
2.2 Build 准备
安装工具链
- 构建Operator容器映像所需的容器运行时
- Podman和其他工具优于Docker
- RHEL 7.6及更高版本:普通用户可以构建Operator容器映像
- Install build tools:
sudo yum -y install podman buildah skopeo
2.3 Go-Based Operator
创建新的基于go的项目
operator-sdk new app-operator \ --api-version=app.example.com/v1alpha1 \ --kind=App
Creates:
- Gopkg.lock, Gopkg.toml
- cmd, config, deploy, pkg
- tmp, vendor, version
Next step: Implement
参考:
3. Ansible Operator
3.1 概述
提供 base Operator image
执行Ansible Playbook或role
确认对象在那里
重新创建/删除对象发生了改变
Playbook or role必须是幂等的
允许在OpenShift中创建,但不允许删除对象
向所有创建的对象添加ownerReferences值
参考:
Ansible User Guide for Operator SDK
3.2 Workflow
Ansible Operator SDK创建所需的基本结构
更新Ansible内容
要在role/playbook中创建对象,使用k8s Ansible模块
使用提供的Dockerfile构建 Operator容器image
Push to image registry (e.g., Quay.io)
Update created YAML files
3.3 创建新项目
命令帮助
operator-sdk --help
为集群范围的Gitea Operator创建新的shell项目:
operator-sdk new gitea-operator \ --api-version=gpte.opentlc.com/v1alpha1 \ --kind=Gitea --type=ansible \ --generate-playbook
3.4 项目概况
watches.yaml:
--- - version: v1alpha1 group: gpte.opentlc.com kind: Gitea playbook: /opt/ansible/playbook.yml
- Ansible Operator的配置文件
- Use playbook or role
生成Dockerfile
如果不需要,删除复制playbook/roles
FROM quay.io/operator-framework/ansible-operator:v0.17.0 COPY requirements.yml ${HOME}/requirements.yml RUN ansible-galaxy collection install -r ${HOME}/requirements.yml \ && chmod -R ug+rwx ${HOME}/.ansible COPY watches.yaml ${HOME}/watches.yaml COPY roles/ ${HOME}/roles/ COPY playbook.yml ${HOME}/playbook.yml
3.5 YAML Files
其他创建文件:
ls -R build deploy
Sample output:
build: Dockerfile test-framework/ build/test-framework: ansible-test.sh Dockerfile deploy: crds/ operator.yaml role_binding.yaml role.yaml service_account.yaml deploy/crds: gpte.opentlc.com_giteas_crd.yaml gpte.opentlc.com_v1alpha1_gitea_cr.yaml
3.6 Build Container Image
构建Operator容器镜像,使用Operator -sdk
- 有正确名称和版本的tag
- 指定想要的
builder
(docker, podman, buildah) - 包括
registry
以接收推送
operator-sdk build quay.io/wkulhanek/gitea-operator:v0.0.1 --image-builder podman
3.7 Push to Registry
- 将构建的
image
推送到容器registry
- Use
podman push
, skopeo, ordocker push
(when using Docker):
$ podman push quay.io/wkulhanek/gitea-operator:v0.0.1
3.8 Update Deployment
- 更新
deploy/operator.yaml
中的占位符。实际容器图像位置的 - 更新
imagePullPolicy
以匹配您的首选项e.g. Always fordevelopment
:
[...] - name: gitea-operator # Replace this with the built image name image: quay.io/wkulhanek/gitea-operator:v0.0.1 ports: - containerPort: 60000 name: metrics imagePullPolicy: Always [...]
3.9 安装基于ansible的操作系统
像部署任何其他Operator一样部署基于ansible的Operator
创建CRD
需要 cluster-admin
Create project
Create service account
Create role or ClusterRole
Create RoleBinding or ClusterRoleBinding
Create deployment
3.10 集群测试外
一旦创建了所有先决条件,SDK就可以在集群外运行Operator了
替换deploy/operator.yaml的部署
仍然关注cr创建的事件
避免每次都需要重新构建/推送/重新部署容器映像
要在本地运行Operator:
登录OpenShift,在“Operator”目录下执行命令:
operator-sdk up local
4. Helm Operator
4.1 概述
- 将 Helm charts改变Operator
- 集群上不需要Tiller
- Helm charts 需要openshift兼容
- 不以root用户运行
- 没有其他的先决条件
参考:
Helm User Guide for Operator SDK
4.2 设置 Helm Operator
创建式helm项目
operator-sdk new nginx-operator --api-version=example.com/v1alpha1 --kind=Nginx --type=helm
参考:
5. Operator 功能