|
| 1 | +### create a kubebuilder project, it requires an empty folder |
| 2 | +``` |
| 3 | +kubebuilder init --domain cncamp.io |
| 4 | +``` |
| 5 | + |
| 6 | +### check project layout |
| 7 | +``` |
| 8 | +cat PROJECT |
| 9 | +domain: cncamp.io |
| 10 | +layout: |
| 11 | +- go.kubebuilder.io/v3 |
| 12 | +projectName: mysts |
| 13 | +repo: github.com/cncamp/demo-operator |
| 14 | +version: "3" |
| 15 | +``` |
| 16 | +### create API, create resource[Y], create controller[Y] |
| 17 | +``` |
| 18 | +kubebuilder create api --group apps --version v1beta1 --kind MyDaemonset |
| 19 | +``` |
| 20 | +### open project by IDE and edit api/v1alpha1/simplestatefulset_types.go |
| 21 | +``` |
| 22 | +// MyDaemonsetSpec defines the desired state of MyDaemonset |
| 23 | +type MyDaemonsetSpec struct { |
| 24 | + // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster |
| 25 | + // Important: Run "make" to regenerate code after modifying this file |
| 26 | +
|
| 27 | + // Foo is an example field of MyDaemonset. Edit mydaemonset_types.go to remove/update |
| 28 | + Image string `json:"image,omitempty"` |
| 29 | +} |
| 30 | +
|
| 31 | +// MyDaemonsetStatus defines the observed state of MyDaemonset |
| 32 | +type MyDaemonsetStatus struct { |
| 33 | + AvaiableReplicas int `json:"avaiableReplicas,omitempty"` |
| 34 | + // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster |
| 35 | + // Important: Run "make" to regenerate code after modifying this file |
| 36 | +} |
| 37 | +``` |
| 38 | +### check Makefile |
| 39 | +``` |
| 40 | +Build targets: |
| 41 | + ### create code skeletion |
| 42 | + manifests: generate crd |
| 43 | + generate: generate api functions, like deepCopy |
| 44 | + |
| 45 | + ### generate crd and install |
| 46 | + run: Run a controller from your host. |
| 47 | + install: Install CRDs into the K8s cluster specified in ~/.kube/config. |
| 48 | + |
| 49 | + ### docker build and deploy |
| 50 | + docker-build: Build docker image with the manager. |
| 51 | + docker-push: Push docker image with the manager. |
| 52 | + deploy: Deploy controller to the K8s cluster specified in ~/.kube/config. |
| 53 | +
|
| 54 | +``` |
| 55 | +### generate crd |
| 56 | +``` |
| 57 | +make manifests |
| 58 | +``` |
| 59 | +### build & install |
| 60 | +``` |
| 61 | +make build |
| 62 | +make docker-build |
| 63 | +make docker-push |
| 64 | +make deploy |
| 65 | +``` |
| 66 | +## enable webhooks |
| 67 | +### install cert-manager |
| 68 | +``` |
| 69 | +kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.6.1/cert-manager.yaml |
| 70 | +``` |
| 71 | +### create webhooks |
| 72 | +``` |
| 73 | +kubebuilder create webhook --group apps --version v1beta1 --kind MyDaemonset --defaulting --programmatic-validation |
| 74 | +``` |
| 75 | +### change code |
| 76 | +### enable webhook in |
| 77 | +``` |
| 78 | +config/default/kustomization.yaml |
| 79 | +``` |
| 80 | +### redeploy |
0 commit comments