一、operator概述

Operator 是 Kubernetes 的扩展软件,它利用 定制资源 管理应用及其组件。 Operator 遵循 Kubernetes 的理念,特别是在控制器 方面[1]

k8s 的是一个高度自动化的系统,其中涵盖了常见应用程序所需的大部分功能,例如服务发现,负载均衡,HPA等等,这些功能是由 k8s 自带的一些控制器实现的,但是需求总是永无止境的,当我们有类似需求但是 k8s 又无法很好的满足的时候我们就可以使用 Operator 和 Custome Resource(自定义资源)来达到类似的效果。

例如常见的需求就有部署一个数据库,节点自动化运维,日志采集组件配置等等

从 Operator 理念的提出到现在已经有了很多工具可以帮助我们快速低成本的开发,其中最常用的就是 CoreOS 开源的 operator-sdk[3]和 k8s sig 小组维护的 kubebuilder[2],我们这个系列选用 kubebuilder。

开始之前我们先了解两个马上就会涉及到的核心概念

GV & GVK & GVR

GV: Api Group & Version
  API Group 是相关 API 功能的集合
  每个 Group 拥有一或多个 Versions
GVK: Group Version Kind
  每个 GV 都包含 N 个 api 类型,称之为 Kinds,不同 Version 同一个 Kinds 可能不同
GVR: Group Version Resource
  Resource 是 Kind 的对象标识,一般来 Kind 和 Resource 是 1:1 的,但是有时候存在 1:n 的关系,不过对于 Operator 来说都是 1:1 的关系

举个,我们在 k8s 中的 yaml 文件都有下面这么两行,例如上篇文章我们部署的 nginx deployment

apiVersion: apps/v1 # 这个是 GV,G 是 apps,V 是 v1
kind: Deployment # 这个就是 Kind
sepc: # 加上下放的 spec 就是 Resource了
...

kubebuilder的下载安装

针对centos7操作系统

wget https://github.com/kubernetes-sigs/kubebuilder/releases/download/v3.6.0/kubebuilder_linux_amd64
mv kubebuilder_linux_amd64 /usr/bin/kubebuilder
chmod a+x kubebuilder

安装kustomize

wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv4.5.6/kustomize_v4.5.6_linux_amd64.tar.gz
tar -zxvf kustomize_v4.5.6_linux_amd64.tar.gz
mv kustomize /usr/local/bin/

安装完成之后就能继续进行后续的开发了

项目初始化

先创建一个空文件夹,然后在文件夹内执行下方命令

kubebuilder init --domain=danielhu.cn --repo github.com/mohuishou/blog-code/k8s-operator/02-kubebuilder
  • –-domain lailin.xyz 我们的项目的域名
  • --repo xxx 是仓库地址,同时也是 go mode中的repo地址

创建api

kubebuilder create api --group apps --version v1 --kind Application

执行之后我们发现项目结构发生了一些变化

.
├── api
│ └── v1
│ ├── application_types.go # 这里是定义 spec 的地方
│ ├── groupversion_info.go # GV 的定义,一般无需修改
│ └── zz_generated.deepcopy.go
├── config
│ ├── crd # 自动生成的 crd 文件,不用修改这里,只需要修改了 v1 中的 go 文件之后执行 make generate 即可
│ ├── default
│ ├── manager
│ ├── prometheus
│ ├── rbac
│ └── samples # 这里是 crd 示例文件,可以用来部署到集群当中
├── controllers
│ ├── application_controller.go # 在这里实现 controller 的逻辑
│ └── suite_test.go # 这里写测试

CRD实现

最新文章

  1. DDD 主题交流会总结及计划
  2. solr多条件查询(四)
  3. js 获取 input file 文件 附给 image src
  4. LabVIEW系列——合并错误(VI)的用法
  5. UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)
  6. python+selenium的web自动化测试之二(Jenkins自动执行)
  7. WordPress更新提示无法创建目录的解决方案
  8. asp.net webform设计思路的思考
  9. python---session(tornado中使用)缓存
  10. dir()函数
  11. 【转载】 强化学习(七)时序差分离线控制算法Q-Learning
  12. Spring Cloud(Dalston.SR5)--Eureka 注册中心高可用-服务提供和消费
  13. c#泛型与其他语言的对比(深入理解c#)
  14. C#远程调用技术WebService修炼手册
  15. 利用图片中的exif元数据批量查找图片中所包含的GPS信息
  16. postgre与mysql区别
  17. Firefox及我使用的firefox扩展
  18. org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'testService' is defined
  19. pthread线程内存布局
  20. BZOJ2687 交与并/BZOJ2369 区间【决策单调性优化DP】【分治】

热门文章

  1. java逻辑运算&&与&的区别
  2. 手把手教你一套完善且高效的k8s离线部署方案
  3. npm Error: Cannot find module 'are-we-there-yet'
  4. 【机器学习】李宏毅——Domain Adaptation(领域自适应)
  5. k8s本地联调工具kt-connect
  6. [OpenCV实战]16 使用OpenCV实现多目标跟踪
  7. Spark详解(07-1) - SparkStreaming案例实操
  8. WebGoat-8.2.2靶场之不安全的反序列化漏洞
  9. 为测试管理正名,华为云CodeArts TestPlan的守护之道
  10. [C++]C++11:Function与Bind