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
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐