通过 Operator 的方案,可以对 Kubernetes 的功能进行友好地扩展。Operatpr = CRD + Controller。首先通过 yaml 定义,生成 CRD ,然后 Controller 不断地监听 etcd 中的数据,执行相应动作。开发 Operator 时,有很多繁琐且重复的事情。KubeBuilder 可以帮助我们快速生成骨架代码,开发一个 Kubernetes 的扩展功能, 更多介绍可以参考文档:Kubernetes 复杂有状态应用管理框架 – Operator 。本篇文档,主要是尝试使用 KubeBuilder 开发一个 Operator 。
1. 环境准备
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@@ -7,7 +7,7 @@ COPY go.mod go.mod
COPY go.sum go.sum
1. cache deps before building and copying source so that we don't need to re-download as much
1. and so that source changes don't invalidate our downloaded layer
-RUN go mod download
+RUN GOPROXY=https://gocenter.io go mod download
1. Copy the go source
COPY main.go main.go
@@ -19,7 +19,7 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -o manager
1. Use distroless as minimal base image to package the manager binary
1. Refer to https://github.com/GoogleContainerTools/distroless for more details
-FROM gcr.io/distroless/static:latest
+FROM gcr.azk8s.cn/distroless/static:latest
WORKDIR /
COPY --from=builder /workspace/manager .
ENTRYPOINT ["/manager"]
|
2.5. 构建并推送镜像测试
本地构建并推送镜像
1
2
3
|
kubectl get crd
NAME CREATED AT
apiexampleas.groupa.k8s.chenshaowen.com 2019-09-24T07:24:45Z
|
1
2
3
|
kubectl get deploy -n kube-api-system
NAME READY UP-TO-DATE AVAILABLE AGE
kube-api-controller-manager 1/1 1 1 46s
|
1
|
kubectl apply -f config/samples/groupa_v1beta1_apiexamplea.yaml
|
1
2
3
4
|
kubectl get apiexampleas.groupa.k8s.chenshaowen.com
NAME AGE
apiexamplea-sample 61s
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
kubectl get apiexampleas.groupa.k8s.chenshaowen.com apiexamplea-sample -o yaml
apiVersion: groupa.k8s.chenshaowen.com/v1beta1
kind: ApiExampleA
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"groupa.k8s.chenshaowen.com/v1beta1","kind":"ApiExampleA","metadata":{"annotations":{},"name":"apiexamplea-sample","namespace":"default"},"spec":{"foo":"bar"}}
creationTimestamp: "2019-09-24T07:29:16Z"
generation: 1
name: apiexamplea-sample
namespace: default
resourceVersion: "635450"
selfLink: /apis/groupa.k8s.chenshaowen.com/v1beta1/namespaces/default/apiexampleas/apiexamplea-sample
uid: 05398ab4-7d4a-4f2e-af30-b59e61680c7e
spec:
foo: bar
|
3. 在 Project 中写入逻辑