Based on https://github.com/resouer/k8s-controller-custom-resource.
Note: the source code is verbosely commented, so the source is meant to be read and to teach.
An example of a custom Kubernetes controller that's only purpose is to watch for the creation, updating, or deletion of all custom resource of type Network (in the all namespaces). This was created as an exercise to understand how Kubernetes controllers work and interact with the cluster and resources.
Clone repo:
git clone https://github.com/bbbmj/k8s-crd-controller-example
cd k8s-crd-controller-exampleBuild and run:
go build -o bin/samplecrd-controller ./cmd/
./bin/samplecrd-controller -kubeconfig=$HOME/.kube/config -alsologtostderr=trueYou can also use samplecrd-controller to create a Deployment and run it in Kubernetes. Note in this case, you don't need to specify -kubeconfig in CMD as default InClusterConfig will be used.
You should create the CRD of Network first:
kubectl apply -f artifacts/network-crd.yamlYou can then trigger an event by creating a Network API instance:
kubectl apply -f artifacts/my-network.yamlCURD the Network API instance, and check the logs of controller.
Enjoy!