使用operator-sdk 创新crd

安装operator-sdk

下载

RELEASE_VERSION=v0.11.0

curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu

curl -LO https://github.com/operator-framework/operator-sdk/releases/download/${RELEASE_VERSION}/operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu.asc

gpg --verify operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu.asc

如果本机没有安装公钥,会报错如下:

$ gpg --verify operator-sdk-${RELEASE_VERSION}-x86_64-apple-darwin.asc

$ gpg: assuming signed data in 'operator-sdk-${RELEASE_VERSION}-x86_64-apple-darwin'

$ gpg: Signature made Fri Apr 5 20:03:22 2019 CEST

$ gpg: using RSA key

$ gpg: Can't check signature: No public key

执行如下脚本:

gpg --recv-key "$KEY_ID"

gpg --keyserver keyserver.ubuntu.com --recv-key "$KEY_ID"

安装

$ chmod +x operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu && sudo mkdir -p /usr/local/bin/ && sudo cp operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu /usr/local/bin/operator-sdk && rm operator-sdk-${RELEASE_VERSION}-x86_64-linux-gnu

创建新的工程

## 初始化工程

mkdir -p $GOPATH/example/

cd $GOPATH/example

export GO111MODULE=on

operator-sdk new cronjob-operator --repo github.com//ThinkBlue1991/cronjob-operator

cd cronjob-operator

## 添加CRD的api

operator-sdk add api --api-version=cache.example.com/v1alpha1 --kind=CronJob

定义Status和spec

修改pkg/apis/cache/v1alphal/cronjob_types.go

修改types后,针对resource进行更新和生成代码

operator-sdk generate k8s

openapi验证

operator-sdk generate openapi

查看deploy/crds/cache.example.com_cronjob_crd.yaml 其中根据spec定义了crd参数的属性

增加新的Controller

operator-sdk add controller --api-version=cache.example.com/v1alpha1 --kind=CronJob

会在pkg/controller/cronjob/下出现cronjob_controller.go文件

修改cronjob_controller.go文件,主要关心函数func (r *ReconcileMemcached) Reconcile(request reconcile.Request) (reconcile.Result, error)

编译运行operator

kubectl create -f deploy/crds/cache.example.com_cronjob_crd.yaml

operator-sdk build hub.geovis.io/zhangjx/cronjob-operator:v0.1

docker push hub.geovis.io/zhangjx/cronjob-operator:v0.1

Note: hub.geovis.io是本地的私有仓库;dockerhub:docker pull zhangjx1991/cronjobs:v0.1

修改operator.yaml文件

sed -i 's|REPLACE_IMAGE|hub.geovis.io/zhangjx/cronjob-operator:v0.1|g' deploy/operator.yaml

执行其他的yaml文件

# Setup Service Account

$ kubectl create -f deploy/service_account.yaml

# Setup RBAC

$ kubectl create -f deploy/role.yaml

$ kubectl create -f deploy/role_binding.yaml

# Deploy the app-operator

$ kubectl create -f deploy/operator.yam

创建新的cronjob

kubectl create -f deploy/crds/cronjob.yaml

查看结果

crd

operator

job

Note:执行4次job任务,cronjob任务结束

docker geovis_GitHub - ThinkBlue1991/cronjob-operator相关推荐

  1. 基于Docker的Consul服务发现集群搭建

    在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架 ...

  2. 基础设施即代码(IAC),Zalando Postgres Operator 简介

    Postgres Operator 在由 Patroni 提供支持的 Kubernetes (K8s) 上提供易于运行的高可用性 PostgreSQL 集群.它仅通过 Postgres 清单 (CRD ...

  3. docker 问题集

    宿主如果和容器系统不同的话,那不是和虚拟机一样,一层层的调用,那么 Docker 和虚拟机还有什么差别? 要把 Windows 和 Linux 分清楚,更要把内核(kernel)和用户空间(userl ...

  4. 【零基础搭建Docker和Minio】

    从零使用docker搭建Minio服务 为什么使用docker Docker搭建 使用Docker安装Minio 为什么使用docker 在云时代,开发者创建的应用必须是"任何时间任何地点& ...

  5. 《Kubernetes部署篇:基于docker使用kubespray工具部署高可用K8S集群(国内互联网方案四)》

    文章目录 一.部署背景简介 二.部署工具介绍 三.部署方案介绍 四.部署环境信息 五.部署资源下载 六.部署准备工作 6.1.系统内核升级 6.2.设置主机名 6.3.环境初始化 6.4.ssh多机互 ...

  6. 《Kubernetes部署篇:基于docker使用kubespray工具离线部署高可用K8S集群(国内专网方案)》

    文章目录 一.部署背景简介 二.部署工具介绍 三.部署方案介绍 四.部署环境信息 五.部署资源下载 六.部署准备工作 6.1.系统内核升级 6.2.设置主机名 6.3.环境初始化 6.4.ssh多机互 ...

  7. 《Kubernetes部署篇:基于docker使用kubespray工具部署高可用K8S集群(国内互联网方案三)》

    文章目录 一.部署背景简介 二.部署工具介绍 三.部署方案介绍 四.部署环境信息 五.部署资源下载 六.部署准备工作 6.1.系统内核升级 6.2.设置主机名 6.3.环境初始化 6.4.ssh多机互 ...

  8. 三分钟Docker-镜像、容器实战篇

    本文主要内容: Docker 镜像.容器 常用命令整理 使用Docker常见命令,搭建Consul集群 通过创建自定义镜像,把.NetCore Api运行在Docker中 1.镜像.容器命令 镜像 序 ...

  9. 《Kubernetes权威指南:从Docker到Kubernetes实践全接触》读书笔记

    写在前面 之前简单的了解过,但是机器的原因,只有单机,因为安装Docker的原因,本机VM上的红帽节点起不来了.懂得不多,视频上都是多节点的,所以教学视屏上的所以Demo没法搞. 前些时间公司的一个用 ...

最新文章

  1. WPF:Input and Commands输入和命令(1)
  2. 整理下java六种单例模式
  3. 成为Java流大师–第6部分:使用流创建新的数据库应用程序
  4. wpf项目中类库内新建用户控件和自定义控件的问题
  5. orm2 中文文档 8. 聚合
  6. Markdown中插入图片及图注
  7. 二十一天学通C语言:使用const声明指针变量
  8. mysql添加值_怎么给mysql添加值?
  9. 数字电子技术课程设计用单片机实现数字电子钟
  10. C语言从入门到放弃2022年8月3号
  11. Mac配置allure环境变量
  12. power bi数据分析_设置Power BI数据网关
  13. python如何导入datetime包
  14. 如何使用计算机计算平方面积,尺平方米换算计算器(面积单位换算器)
  15. python evn安装模块pip
  16. linux 用户 组区别吗,Linux用户组之主组和附加组
  17. 自从IDEA配上这个插件开发速度快了N倍
  18. 三角形的几何公式大全_高中数学公式、定理大全,你所需要的这里都有!
  19. 计算机桌面分区,明基XL2430T如何使用桌面分区?
  20. MATLAB 三维立体绘图

热门文章

  1. 32位/64位软件和系统的区别
  2. 利用相对坐标轻松完成网格袋布局
  3. 触类旁通Elasticsearch:扩展
  4. [Unity3D]Unity3D游戏开发之NPC对话系统的简单实现
  5. Android学习:常用控件
  6. PostgreSQL安装流程
  7. 日常工作/生活用处汇总
  8. 最新抖音快手小红书西瓜全平台解析接口api开发文档
  9. 编程网址-更新中……
  10. 打印墨水调钢笔墨水_如何通过更有效地打印节省现金,墨水和纸张