2025-03-23 18:07:50 +08:00
|
|
|
# 如何开发 k8s operator
|
|
|
|
|
2025-03-30 10:08:43 +08:00
|
|
|
## 准备
|
|
|
|
|
2025-03-23 18:07:50 +08:00
|
|
|
```sh
|
|
|
|
# https://github.com/kubernetes-sigs/kubebuilder/releases/tag/v4.5.1
|
|
|
|
curl -L -o kubebuilder "https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH)"
|
|
|
|
chmod +x kubebuilder && sudo mv kubebuilder /usr/local/bin/
|
|
|
|
```
|
|
|
|
|
|
|
|
```sh
|
|
|
|
kubebuilder version
|
|
|
|
Version: main.version{KubeBuilderVersion:"4.5.1", KubernetesVendor:"1.32.1", GitCommit:"0ace7a8753c52b35014e43edc2a0b0454b78e769", BuildDate:"2025-02-21T20:16:18Z", GoOs:"darwin", GoArch:"arm64"}
|
2025-03-30 10:08:43 +08:00
|
|
|
```
|
|
|
|
|
|
|
|
## CRD开发(API)
|
|
|
|
|
|
|
|
1. 编辑CRD
|
|
|
|
```sh
|
|
|
|
make manifests
|
|
|
|
make generate
|
|
|
|
```
|
|
|
|
|
|
|
|
2. 安装
|
|
|
|
```sh
|
|
|
|
make install
|
|
|
|
```
|
|
|
|
|
|
|
|
3. 编辑样例
|
|
|
|
```yaml
|
|
|
|
apiVersion: devops.go17/v1beta1
|
|
|
|
kind: AccessBinding
|
|
|
|
metadata:
|
|
|
|
labels:
|
|
|
|
app.kubernetes.io/name: operator
|
|
|
|
app.kubernetes.io/managed-by: kustomize
|
|
|
|
name: accessbinding-sample
|
|
|
|
spec:
|
|
|
|
namespace: 'default'
|
|
|
|
deployment: 'nginx-test'
|
|
|
|
```
|
|
|
|
|
|
|
|
4. 验证
|
|
|
|
```sh
|
|
|
|
kubectl apply -f config/samples/devops_v1beta1_accessbinding.yaml
|
|
|
|
kubectl get AccessBinding
|
|
|
|
kubectl delete AccessBinding accessbinding-sample
|
|
|
|
```
|
|
|
|
|
|
|
|
## Controller开发
|