项目作者: gfandada

项目描述 :
for k8s controller sample
高级语言: Go
项目地址: git://github.com/gfandada/samplecontroller.git
创建时间: 2019-04-15T02:13:02Z
项目社区:https://github.com/gfandada/samplecontroller

开源协议:Apache License 2.0

下载


简单的controller

  1. 也可以参考官方的samplehttps://github.com/kubernetes/sample-controller

实现步骤

1.向k8s集群提交CRD模板和其实例化对象,使k8s能识别

  1. 1 官方文档了解下CRD
  2. https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#create-a-customresourcedefinition
  3. 2 登录可以执行kubectl命令的机器,创建student.yaml文件
  4. [root@localhost student]# kubectl apply -f student.yaml
  5. customresourcedefinition.apiextensions.k8s.io/students.stable.k8s.io created
  6. [root@localhost student]# kubectl get crd
  7. NAME CREATED AT
  8. crontabs.stable.example.com 2019-03-26T01:48:32Z
  9. students.stable.k8s.io 2019-04-12T02:42:08Z
  10. 3 通过模板student.yaml来实例一个Student对象,创建test1.yaml,同理实例test2.yaml
  11. [root@localhost student]# kubectl apply -f test1.yaml
  12. student.stable.k8s.io/test1 created
  13. 4 kubectl describe std test1

2.自动生成代码前的准备工作

  1. 1 samplecontroller目录下新建目录,并添加以下文件
  2. [root@localhost studentcontroller]# tree pkg
  3. pkg
  4. ├── apis
  5. └── stable
  6. ├── register.go
  7. └── v1
  8. ├── doc.go
  9. ├── register.go
  10. ├── types.go
  11. 主要是为代码生成工具准备好资源对象的声明和注册接口
  12. 2 下载依赖
  13. go get -u k8s.io/apimachinery/pkg/apis/meta/v1
  14. go get -u k8s.io/code-generator/...

3.自动生成Client、Informer、WorkQueue相关的代码

  1. [root@localhost code-generator]# export GOPATH=/root/mygolang
  2. [root@localhost code-generator]# ./generate-groups.sh all "github.com/gfandada/samplecontroller/pkg/client" "github.com/gfandada/samplecontroller/pkg/apis" "stable:v1"
  3. Generating deepcopy funcs
  4. Generating clientset for stable:v1 at github.com/gfandada/samplecontroller/pkg/client/clientset
  5. Generating listers for stable:v1 at github.com/gfandada/samplecontroller/pkg/client/listers
  6. Generating informers for stable:v1 at github.com/gfandada/samplecontroller/pkg/client/informers
  7. [root@localhost samplecontroller]# tree pkg
  8. pkg
  9. ├── apis
  10. └── stable
  11. ├── register.go
  12. └── v1
  13. ├── doc.go
  14. ├── register.go
  15. ├── types.go
  16. └── zz_generated.deepcopy.go
  17. ├── client
  18. ├── clientset
  19. └── versioned
  20. ├── clientset.go
  21. ├── doc.go
  22. ├── fake
  23. ├── clientset_generated.go
  24. ├── doc.go
  25. └── register.go
  26. ├── scheme
  27. ├── doc.go
  28. └── register.go
  29. └── typed
  30. └── stable
  31. └── v1
  32. ├── doc.go
  33. ├── fake
  34. ├── doc.go
  35. ├── fake_stable_client.go
  36. └── fake_student.go
  37. ├── generated_expansion.go
  38. ├── stable_client.go
  39. └── student.go
  40. ├── informers
  41. └── externalversions
  42. ├── factory.go
  43. ├── generic.go
  44. ├── internalinterfaces
  45. └── factory_interfaces.go
  46. └── stable
  47. ├── interface.go
  48. └── v1
  49. ├── interface.go
  50. └── student.go
  51. └── listers
  52. └── stable
  53. └── v1
  54. ├── expansion_generated.go
  55. └── student.go

4.编写controller的业务逻辑

  1. 参考sample-controller工程,写的比较简单

5.启动controller

  1. [root@localhost samplecontroller]# ./samplecontroller
  2. 这是一个简易的自定制的k8s controller,用来演示k8s的终态运维的思想,
  3. https://github.com/gfandada/samplecontroller,
  4. gfandada@gmail.com
  5. Usage:
  6. samplecontroller [command]
  7. Available Commands:
  8. help Help about any command
  9. run run config=[kubeConfig的路径]
  10. Flags:
  11. --config string config file (default is $HOME/.samplecontroller.yaml)
  12. -h, --help help for samplecontroller
  13. -t, --toggle Help message for toggle
  14. Use "samplecontroller [command] --help" for more information about a command.
  15. [root@localhost samplecontroller]# ./samplecontroller run config=/root/.kube/config
  16. ERROR: logging before flag.Parse: I0415 15:02:28.619121 109337 samplecontroller.go:59] 创建事件广播器
  17. ERROR: logging before flag.Parse: I0415 15:02:28.619246 109337 samplecontroller.go:76] 监听studentadd/update/delete事件
  18. ERROR: logging before flag.Parse: I0415 15:02:28.619264 109337 samplecontroller.go:102] 开始controller业务,开始一次缓存数据同步
  19. ERROR: logging before flag.Parse: I0415 15:02:28.719511 109337 samplecontroller.go:107] 启动10worker
  20. ERROR: logging before flag.Parse: I0415 15:02:28.719547 109337 samplecontroller.go:112] worker已经全部启动
  21. ......
  22. FIMXE ERROR: logging before flag.Parse多个flag库有些冲突,不影响本项目,正式开发可以考虑去掉cobra,打开flag.Parse()

6.修改crd实例文件观察controller

  1. ........
  2. kubectl apply -f test1.yaml
  3. kubectl describe std test1