- go mod init
go mod init js.domain/fastapi-operator
- operator init
operator-sdk init --domain js.domain --project-name js-project --owner "jongsoo"
- create api
operator-sdk create api --group js-group --version v1 --kind JsKind --version v1beta1
- add spec
- ...
- make generate
- make manifests
- make docker file
docker build manager-operator .
- docker tag
docker tag manager-operator:latest jongsoo/manager-operator:latest
- docker push
docker push jongsoo/manager-operator:latest
- make deploy
- check pod
k get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
js-project-system js-project-controller-manager-7f747fdd7-rxht2 2/2 Running 0 6m14s
- create crd
kubectl apply -f config/samples/js_v1_jskind.yaml
- validate crd
kubectl get jskind
NAME AGE
jskind-sample 2m24s
k get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
jskind-sample 1/1 1 1 4m40s
k get pod
NAMESPACE NAME READY STATUS RESTARTS AGE
default jskind-sample-7f5cf4864b-fvwwc 1/1 Running 0 54s
k get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jskind-sample NodePort 10.100.93.163 <none> 80:32278/TCP 15h
k get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
jskind-sample nginx * 80 15h
- operator log 확인
k logs js-project-controller-manager-7f747fdd7-rxht2 -n js-project-system
2024-05-31T01:26:07Z INFO setup starting manager
2024-05-31T01:26:07Z INFO controller-runtime.metrics Starting metrics server
2024-05-31T01:26:07Z INFO starting server {"kind": "health probe", "addr": "[::]:8081"}
2024-05-31T01:26:07Z INFO controller-runtime.metrics Serving metrics server {"bindAddress": "127.0.0.1:8080", "secure": false}
I0531 01:26:07.190538 1 leaderelection.go:250] attempting to acquire leader lease js-project-system/dfdb12f8.js.domain...
I0531 01:26:07.198344 1 leaderelection.go:260] successfully acquired lease js-project-system/dfdb12f8.js.domain
2024-05-31T01:26:07Z DEBUG events js-project-controller-manager-7f747fdd7-rxht2_490fbf60-4d24-4255-b050-ddc7748ae2e3 became leader {"type": "Normal", "object": {"kind":"Lease","namespace":"js-project-system","name":"dfdb12f8.js.domain","uid":"114c7e78-1fb9-4ace-bde7-870b22c59f31","apiVersion":"coordination.k8s.io/v1","resourceVersion":"91700"}, "reason": "LeaderElection"}
2024-05-31T01:26:07Z INFO Starting EventSource {"controller": "jskind", "controllerGroup": "js-group.js.domain", "controllerKind": "JsKind", "source": "kind source: *v1beta1.JsKind"}
2024-05-31T01:26:07Z INFO Starting Controller {"controller": "jskind", "controllerGroup": "js-group.js.domain", "controllerKind": "JsKind"}
2024-05-31T01:26:07Z INFO Starting workers {"controller": "jskind", "controllerGroup": "js-group.js.domain", "controllerKind": "JsKind", "worker count": 1}
2024-05-31T01:28:11Z INFO Finalizer 추가 {"controller": "jskind", "controllerGroup": "js-group.js.domain", "controllerKind": "JsKind", "JsKind": {"name":"jskind-sample","namespace":"default"}, "namespace": "default", "name": "jskind-sample", "reconcileID": "04026b5e-d12a-4556-9c57-0aabee916c12"}
2024-05-31T01:28:11Z INFO JsKind 생성 {"controller": "jskind", "controllerGroup": "js-group.js.domain", "controllerKind": "JsKind", "JsKind": {"name":"jskind-sample","namespace":"default"}, "namespace": "default", "name": "jskind-sample", "reconcileID": "443921c9-0c32-4030-a48b-b78424367938"}
2024-05-31T01:28:11Z INFO Deployment 생성 {"controller": "jskind", "controllerGroup": "js-group.js.domain", "controllerKind": "JsKind", "JsKind": {"name":"jskind-sample","namespace":"default"}, "namespace": "default", "name": "jskind-sample", "reconcileID": "443921c9-0c32-4030-a48b-b78424367938"}
2024-05-31T01:28:12Z INFO Service 생성 {"controller": "jskind", "controllerGroup": "js-group.js.domain", "controllerKind": "JsKind", "JsKind": {"name":"jskind-sample","namespace":"default"}, "namespace": "default", "name": "jskind-sample", "reconcileID": "443921c9-0c32-4030-a48b-b78424367938"}
2024-05-31T01:28:12Z INFO Ingress 생성 {"controller": "jskind", "controllerGroup": "js-group.js.domain", "controllerKind": "JsKind", "JsKind": {"name":"jskind-sample","namespace":"default"}, "namespace": "default", "name": "jskind-sample", "reconcileID": "443921c9-0c32-4030-a48b-b78424367938"}