operator
文章
01 简介
基本介绍简介Operator 是由 CoreOS 开发的,用来扩展 Kubernetes API,特定的应用程序控制器,它用来创建、配置和管理复杂的有状态应用,如数据库、缓存和监控系统。Operator 基于 Kubernetes 的资源和控制器概念之上构建,但同时又包含了应用程序特定的领域知识。创建Operator 的关键是CRD(自定义资源)的设计。 Operator 直接使用 Kubernetes API进行开发,也就是说他们可以根据这些控制器内部编写的自定义规则来监控集群、更改 Pods/Services、对正在运行的应用进行扩缩容。 Operator pattern首先由 CoreOS 提出,通过结合 CRD 和 custom controller 将特定应用的运维知识转换为代码,实现应用运维的自动化和智能化。Operator 允许 kubernetes 来管理复杂的,有状态的分布式应用程序,并由 kubernetes 对其进行自动化管理,例如,etcd operator 能够创建并管理一组 etcd 集群, 定制化的 controller 组件了解这些资源,...
02 Operator-sdk
使用实例搭建go开发环境 下载 1brew install go 配置环境变量 123GOPATH=GOROOT=GOPROXY= 安装operator-sdk工具 1brew install operator-sdk 创建项目1234567891011121314151617181920212223242526272829303132333435363738$ operator-sdk new opdemo......# 该过程需要科学上网,需要花费很长时间,请耐心等待......$ cd opdemo && tree -L 2.├── Gopkg.lock├── Gopkg.toml├── build│ ├── Dockerfile│ ├── _output│ └── bin├── cmd│ └── manager├── deploy│ ├── crds│ ├── operator.yaml│ ├── role.yaml│ ├── role_binding.yaml│ └── service_account.y...
03 Kubebuilder
1 概述构建阶段 工作流程 2 使用流程安装kubebuilder12brew install kubebuilderkubebuilder version 创建工程 初始化一个项目目录 123mkdir -p $GOPATH/src/ykl.com/customer-controller/go mod init contollers.happyhacker.io 定义crd所属的domain,生成一个工程.定义 crd 所属的 domain,这个指令会帮助你生成一个工程。 1kubebuilder init --domain estom.com --license apache2 --owner "Estom" 创建后的目录结构如下: cmd目录下是启动脚本,编译后会在bin目录下生成manage可执行文件 config目录下是基础工程配置。 1234567891011121314151617181920212223242526272829303132.├── Dockerfile├── Makefile├── PROJECT├── READ...
04 原理
在开发 operator,每种自定义资源只能包含有两种子资源——Status 和 Scale。这里探究一下Status的使用。 关键对象Status资源12345678910111213141516171819202122232425262728// ApplicationSpec defines the desired state of Applicationtype ApplicationSpec struct { // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster // Important: Run "make" to regenerate code after modifying this file // Foo is an example field of Application. Edit application_types.go to remove/update Foo string `json:"foo,omitempty"`}// Ap...
05 client-go
Client-go简介client-go是对K8s集群的二次开发工具,所以client-go是k8s开发者的必备工具之一。client-go实现对kubernetes集群中资源对象(包括deployment、service、ingress、replicaSet、pod、namespace、node等)的增删改查等操作。 client-go主要提供了四种类型的客户端: RESTClient: 是对HTTP Request进行了封装,实现了RESTful风格的API。其他客户端都是在RESTClient基础上的实现。可与用于k8s内置资源和CRD资源 ClientSet:是对k8s内置资源对象的客户端的集合,默认情况下,不能操作CRD资源,但是通过client-gen代码生成的话,也是可以操作CRD资源的。 DynamicClient:不仅能对K8S内置资源进行处理,还可以对CRD资源进行处理,不需要client-gen生成代码即可实现。 DiscoveryClient:用于发现kube-apiserver所支持的资源组、资源版本、资源信息(即Group、Version、Re...
06 client-go创建资源
### 创建Ingress方法 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131package janimport ( janv1 "develop-operator/apis/jan/v1" appv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" v1 "k8s.io/api/networking/v1" metav1 &q...










