1、operator-sdk版本

operator-sdk version
operator-sdk version: "v1.20.0", commit: "deb3531ae20a5805b7ee30b71f13792b80bd49b1", kubernetes version: "1.23", go version: "go1.17.9", GOOS: "darwin", GOARCH: "amd64"

2、go版本

go version go1.17.9 darwin/amd64

3、创建项目

mkdir -p $HOME/projects/hello-operator
cd $HOME/projects/hello-operator
go env -w GOPROXY=https://goproxy.cn,direct
operator-sdk init --domain=bjbfd.github.io \
--repo=github.com/bjbfd/hello-operator \
--skip-go-version-check

4、创建API和控制器

operator-sdk create api \
--resource=true \
--controller=true \
--group=app \
--version=v1alpha1 \
--kind=Hello

5、定义 Hello 自定义资源(CR)的 API

修改 api/v1alpha1/hello_types.go 中的 Go 类型定义,使其具有以下 spec 和 status

type HellloSpec struct {
    Size int32 `json:"size"`
    Version string `json:"version"`
}

为资源类型更新生成的代码 :
make generate

运行以下命令以生成和更新 CRD 清单 :
make manifests

6、实现控制器

https://github.com/jxlwqq/hello-operator/tree/master/controllers,拷贝common.go、frontend.go和hello_controller.go
记得修改
--domain=
--repo=
//+kubebuilder:rbac:groups=

make manifests

7、生成镜像 & 运行operator

修改 Makefile 中 IMAGE_TAG_BASE 和 IMG

IMAGE_TAG_BASE ?= bjbfd/hello-operator
IMG ?= $(IMAGE_TAG_BASE):v1

make docker-build
make docker-push

make deploy

8、创建自定义资源

编辑 config/samples/app_v1alpha1_hello.yaml 上的 Hello CR 清单示例,使其包含以下规格:

apiVersion: app.bjbfd.github.io/v1alpha1
kind: Hello
metadata:
  name: hello-sample
spec:
  # Add fields here
  size: 1
  version: "1.9"

创建CR
kubectl apply -f config/samples/app_v1alpha1_hello.yaml

9、浏览器访问

浏览器访问:http://localhost:30691
image.png

如感兴趣,点赞加关注,谢谢!!!


journey
32 声望23 粉丝

引用和评论

0 条评论