openshift operator-sdk 入门

简介: 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 功能

✈推荐阅读:


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

参考:

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

参考:

5. Operator 功能

1035234-20181020215539574-213176954.png

相关文章
|
算法 IDE 开发工具
火爆全网开源额温枪同平台之华大HC32L136 SDK开发入门
火爆全网开源额温枪同平台之华大HC32L136 SDK开发入门
255 1
|
存储 自然语言处理 NoSQL
表格存储 Node.js SDK 开发入门
本文将结合电商订单场景为例,介绍表格存储 Tablestore Node.js SDK 的基本使用方法。
412 1
|
存储 自然语言处理 NoSQL
表格存储 Python SDK 开发入门
本文将结合电商订单场景为例,介绍表格存储 Tablestore Python SDK 的基本使用方法。
580 0
|
存储 自然语言处理 NoSQL
表格存储 Go SDK 开发入门
本文将结合电商订单场景为例,介绍表格存储 Tablestore Go SDK 的基本使用方法。
313 0
|
自然语言处理 NoSQL Java
表格存储 Java SDK 开发入门
本文将结合电商订单场景为例,介绍表格存储 Tablestore Java SDK 的基本使用方法。
948 0
|
弹性计算 API 开发工具
阿里云资源编排服务Python SDK使用入门
阿里云资源编排服务(ROS)为我们维护云计算资源提供了一个低成本、可靠、标准化的方案。基于ROS提供的能力,我们只要编写和维护资源模板文件,就可以达到维护云计算资源的目的。 ROS同时提供RESTful API和SDK,这使得我们可以很容易的把ROS对于资源的操作能力集成到我们的应用中。
19089 0
|
JavaScript Java Serverless
|
开发工具 Android开发 C++
短视频SDK的编译设计与实现系列(一)——CMake基础入门
一、背景介绍 在开写之前,简单介绍一下我要写这篇文章的背景及出发的方向。我们团队主要是做端上的多媒体开发,而这里面有大量的代码都是用c++来写的,由于历史原因,原先的工程结构其交叉编译配置比较复杂,另外加上团队很多同学之前都是做端上业务开发的,本身对于c/c++的交叉编译不是特别熟悉,因此萌生了从实用角度梳理一篇能够帮大家快速扫盲的Cmake基础教程的想法,同时也是对我自己的一次学习总结。 既
4183 0
|
Web App开发 PHP 开发工具
|
JSON Java 开发工具