利用 python operator 框架 创建k8s operator,本项目使用 kopf框架。 kopf文档:https://kopf.readthedocs.io/en/latest/ kopf项目:https://github.com/zalando-incubator/kopf
可以实时监控k8s中的事件,并做出相应的操作,下面是一些例子:
下面例子,是使用自定义一些资源创建新的pod。
有两种部署方式:
1.1 打包,并推送到DockerHub中:
$ docker build -t koza/k8s-operator-example:latest .
$ docker push koza/k8s-operator-example:latest
1.3.部署:
先创建一个sa(此opera的任务是创建一个PO,所以需要一个具备创建pod权限的sa,这里简单直接赋予cluster-admin),此sa配置在部署文件(py-kopf-deployment.yaml)中。 (你也可以利用:rbac-example.yaml创建)
$ kubectl create sa admin-sa
$ kubectl create clusterrolebinding test-admin-sa \
--clusterrole=cluster-admin \
--serviceaccount=default:admin-sa \
--namespace=default
$ kubectl apply -f ./py-kopf-deployment.yaml
$ kubectl get po
NAME READY STATUS RESTARTS AGE
py-kopf-operator-854b666b4f-52sbz 1/1 Running 0 29m
1.4 创建自定义资源:
kubectl apply -f ./task-crd.yaml
$ kubectl get tasks
No resources found in default namespace.
1.5 使用自定义资源,创建一个任务:
kubectl apply -f ./task_1.yaml
$ kubectl get tasks
NAME AGE
task-1 5s
该任务是触发创建一个POD:
$ kubectl get po
NAME READY STATUS RESTARTS AGE
task-1-8cff75566-jb4f5 1/1 Running 0 37s
2.1 安装Kopf:
pip3 install kopf
2.2 安装本项目依赖的包:
pip3 install urllib3
pip3 install yaml
pip3 install kubernetes
2.3 创建kopf需要的资源:
#k8s <= 1.5
kubectl apply -f peering-v1beta1.yaml
#k8s >= 1.6
kubectl apply -f peering-v1beta1.yaml
2.4 启动operator
$ kopf run ./py-kopf.py --verbose
2.5 使用自定义资源,创建一个任务:
kubectl apply -f ./task_1.yaml
$ kubectl get tasks
NAME AGE
task-1 5s
该任务是触发创建一个POD:
$ kubectl get po
NAME READY STATUS RESTARTS AGE
task-1-8cff75566-jb4f5 1/1 Running 0 37s
Content type
Image
Digest
Size
336.1 MB
Last updated
about 6 years ago
docker pull koza/k8s-operator-example