0
点赞
收藏
分享

微信扫一扫

openshift operator-sdk 入门


文章目录

  • ​​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 功能​​

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 安装

  1. 安装容器运行时和构建环境
  • docker
  • buildah
  1. 从Operator SDK GitHub主页下载Operator SDK可执行文件
  2. 将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

参考:
​​​Operator SDK home page​​

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, or​​docker 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 for​​development​​:

[...]
- 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

参考:

  • ​​Helm User Guide for Operator SDK​​

5. Operator 功能

openshift operator-sdk 入门_operator

举报

相关推荐

0 条评论