项目作者: bensooraj

项目描述 :
A dummy k8s Custom Resource
高级语言: Go
项目地址: git://github.com/bensooraj/puffin-controller.git
创建时间: 2020-12-15T08:12:09Z
项目社区:https://github.com/bensooraj/puffin-controller

开源协议:

下载


Inspired from TGI Kubernetes (Episode 40) hosted by Kris Nóva (@kris-nova). The original code can be found here.

Basic setup:

  1. # initialize!
  2. $ kubebuilder init --domain bensooraj.com
  3. # Create the k8s API boilerplate template
  4. $ kubebuilder create api --group birds --version v1beta1 --kind Puffin
  5. Create Resource [y/n]
  6. y
  7. Create Controller [y/n]
  8. y
  9. Writing scaffold for you to edit...
  10. api/v1beta1/puffin_types.go
  11. controllers/puffin_controller.go
  12. Running make:
  13. $ make
  14. /Users/Bensooraj/go/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
  15. go fmt ./...
  16. go vet ./...
  17. go build -o bin/manager main.go

Install the CRDs into the cluster:

  1. $ make install
  2. /Users/Bensooraj/go/bin/controller-gen "crd:trivialVersions=true" rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
  3. kustomize build config/crd | kubectl apply -f -
  4. customresourcedefinition.apiextensions.k8s.io/puffins.birds.bensooraj.com created

Run the controller (this will run in the foreground, so switch to a new terminal if you want to leave it running):

  1. $ make run
  2. # /Users/Bensooraj/go/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
  3. /Users/Bensooraj/go/bin/controller-gen object:headerFile="hack/boilerplate.go.txt" paths="./..."
  4. go fmt ./...
  5. go vet ./...
  6. /Users/Bensooraj/go/bin/controller-gen "crd:trivialVersions=true" rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
  7. go run ./main.go
  8. 2020-12-15T13:37:27.472+0530 INFO controller-runtime.metrics metrics server is starting to listen {"addr": ":8080"}
  9. 2020-12-15T13:37:27.473+0530 INFO setup starting manager
  10. 2020-12-15T13:37:27.473+0530 INFO controller-runtime.manager starting metrics server {"path": "/metrics"}
  11. 2020-12-15T13:37:27.474+0530 INFO controller-runtime.controller Starting EventSource {"controller": "puffin", "source": "kind source: /, Kind="}
  12. 2020-12-15T13:37:27.574+0530 INFO controller-runtime.controller Starting Controller {"controller": "puffin"}
  13. 2020-12-15T13:37:27.574+0530 INFO controller-runtime.controller Starting workers {"controller": "puffin", "worker count": 1}
  14. 2020-12-15T13:37:52.731+0530 INFO controllers.Puffin Setting logged to true {"puffin": "default/tufted-puffin"}
  15. 2020-12-15T13:37:52.731+0530 INFO controllers.Puffin [PENDING] tufted-puffin will be assigned a color shortly!
  16. {"puffin": "default/tufted-puffin"}
  17. 2020-12-15T13:37:52.768+0530 DEBUG controller-runtime.controller Successfully Reconciled {"controller": "puffin", "request": "default/tufted-puffin"}
  18. 2020-12-15T13:37:52.773+0530 INFO controllers.Puffin [COLORED] tufted-puffin is assigned the color red!
  19. {"puffin": "default/tufted-puffin"}
  20. 2020-12-15T13:37:52.773+0530 DEBUG controller-runtime.controller Successfully Reconciled {"controller": "puffin", "request": "default/tufted-puffin"}
  21. 2020-12-15T13:37:52.821+0530 INFO controllers.Puffin [PENDING] horned-puffin will be assigned a color shortly!
  22. {"puffin": "default/horned-puffin"}
  23. 2020-12-15T13:37:52.868+0530 DEBUG controller-runtime.controller Successfully Reconciled {"controller": "puffin", "request": "default/horned-puffin"}
  24. 2020-12-15T13:37:52.868+0530 INFO controllers.Puffin [COLORED] horned-puffin is assigned the color orange!
  25. {"puffin": "default/horned-puffin"}
  26. 2020-12-15T13:37:52.868+0530 DEBUG controller-runtime.controller Successfully Reconciled {"controller": "puffin", "request": "default/horned-puffin"}

Install instances of the Custom Resources

  1. $ kubectl apply -f config/samples/

Cleanup

  1. $ make uninstall

Resource:

  1. https://insujang.github.io/2020-02-13/programming-kubernetes-crd/

Random note to self:

https://github.com/kubernetes-sigs/kubebuilder/issues/806

  1. // Watch ReplicaSets and enqueue ReplicaSet object key
  2. if err := c.Watch(&source.Kind{Type: &appsv1.ReplicaSet{}}, &handler.EnqueueRequestForObject{}); err != nil {
  3. entryLog.Error(err, "unable to watch ReplicaSets")
  4. os.Exit(1)
  5. }