Operator是一个感知应用状态的控制器
Operator是使用CRD实现的定制化Controller,它与K8s内建的Controller遵循同样的运行模式
1.安装Operator
git clone https://github.com/operator-framework/operator-sdk.git
make dep&make install
operator-sdk version
2.Operator开发流程
3.开发准备
git clone https://github.com/kubernetes/kubernetes.git
cp -R kuebernetes/staging/src/k8s.io $GOPATH/src/k8s.io
mkdir $GOPATH/src/sigs.k8s.io
cd $GOPATH/src/sigs.k8s.io
git clone https://github.com/kubernetes-sigs/controller-runtime.git
4.创建项目工程
operator-sdk new testpod-operator --skip-validation=true --repo=github.com/test-com/testpod-operator #最后一个参数用作GitHub开源
5.添加CRD资源类型的API
cd testpod-operator
operator-sdk add api --api-version=k8s.test.com/v1alpha1 --kind=TestPod #自定义的CRD资源类型为TestPod
上述操作会在pkg目录下的apis下创建一个k8s的文件夹,其中k8s文件夹下会生成v1alpha1版本的脚手架代码,后期需要改动的为testpod_types.go这个文件,其中TestPodSpec结构体为期望的状态,TestPodStatus结构体为集群中实际运行的状态
6.添加自定义资源的控制器
operator-sdk add controller --api-version=k8s.test.com/v1alpha1 --kind=TestPod
上述操作会在controller文件夹下生成testpod文件夹,该文件夹下的testpod_controller.go文件将会在后期主要开发
7.开发Controller
当k8s文件夹下会生成v1alpha1版本下的脚手架代码testpod_types.go发生改动时,需要执行operator-sdk generate k8s
重新生成脚手架代码框架,执行operator-sdk generate crds
更新k8s.test.com_testpods_crd.yaml
8.编译工程
operator-sdk build registry/testpod-operator #生成工程部署需要的镜像文件,registry为私有仓库地址
9.push镜像到私有仓库
docker push registry/testpod-operator #方便k8s集群部署时可以从私有仓库直接拉取
10.部署Operator
# 1.部署service_account
kubectl apply -f deploy/service_account.yaml
# 2.部署角色
kubectl apply -f deploy/role.yaml
# 3.部署角色绑定
kubectl apply -f deploy/role_binding.yaml
# 4.部署crd
kubectl apply -f deploy/crds/k8s.test.com_testpods-crd.yaml
# 5.部署Operator(controller)
kubectl apply -f deploy/operator.yaml
# 6.部署应用Pod
kubectl apply -f deploy/crds/k8s.test.com_v1alph1_testpod_cr.yaml
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。