建设银行网站201308,产品设计培训机构哪家好,帝国cms王猛微博,邯郸做网站就找安联网络文章目录 环境准备一个k8s集群开发工具包mac安装 实践初始化operator项目核心逻辑编写测试验证验证 部署 参考 环境准备
一个k8s集群
推荐使用docker-desktop#xff0c;本地单机集群
开发工具包
这里推荐使用脚手架工具kubebuilder 使用脚手架工具#xff0c;能生成项目… 文章目录 环境准备一个k8s集群开发工具包mac安装 实践初始化operator项目核心逻辑编写测试验证验证 部署 参考 环境准备
一个k8s集群
推荐使用docker-desktop本地单机集群
开发工具包
这里推荐使用脚手架工具kubebuilder 使用脚手架工具能生成项目模板开发人员只需要关注核心逻辑和方法即可
mac安装
brew install kubebuilder实践
初始化operator项目
# 新建项目文件夹
$ mkdir webapp-operator# 切入到项目文件夹
$ cd webapp-operator/# 初始化go module
$ go mod init webapp-operator# 初始化operator项目模板
$ kubebuilder init --domain kubebuilder.io# 创建api
# 这里我们创建一个 group 为 app, version 为 v1, kind 为 EasyService 的 api:
$ kubebuilder create api --group app --version v1 --kind EasyService生成的项目结构目录如下
$ tree webapp-operator/ -L 2
webapp-operator/
├── Dockerfile # 用于构建控制器镜像的 Dockerfile
├── Makefile # 用于控制器构建及部署的 Makefile
├── PROJECT # 用于生成组件的 kubebuilder 元数据
├── README.md
├── api # API 模板代码所在目录
│ └── v1
├── bin # 可执行程序
│ ├── controller-gen
│ ├── k8s
│ ├── kustomize
│ └── setup-envtest
├── cmd # 程序入口main
│ └── main.go
├── config # 采用 Kustomize YAML 定义的配置
│ ├── crd # CRD 相关, 当 make install 将 apply 此目录 yaml
│ ├── default # 控制器相关, 当 make deploy 将 apply 此目录 yaml
│ ├── manager
│ ├── prometheus
│ ├── rbac
│ └── samples
├── cover.out
├── go.mod
├── go.sum
├── hack
│ └── boilerplate.go.txt
├── internal
│ └── controller # 控制器逻辑所在目录**需要开发者完善**
└── resources # 非脚手架生成**开发者生成**├── deployment.go└── service.go核心逻辑编写
完整代码参考 webapp-operator
对象结构api、控制器controller修改完毕后需要更新crd的定义
$ make manifests测试验证
前提条件: 登录到在集群master上操作
1、将CRD安装到集群
$ make install # 安装完毕后可以在集群查到crd的信息
$ kubectl get crd | grep easyservice
easyservices.app.kubebuilder.io 2024-01-14T09:01:58Z2、 启动控制器
$ make run3、新建CR 新建名为easyservice-sample的自定义资源实例创建副本数量和对应的nodeport端口。 比如新建了一个easyservice-sample.yaml文件内容如下
apiVersion: app.kubebuilder.io/v1
kind: EasyService
metadata:name: easyservice-sample
spec:# TODO(user): Add fields heresize: 2image: nginx:1.7.9ports:- port: 80targetPort: 80nodePort: 31002当CR新建出来后controller就会收到相应的事件变更
# 新建CR
$ kubectl apply -f easyservice-sample.yaml验证
主机访问http://localhost:31002/ 会显示nginx的主页集群查看
$ kubectl get pods,deploy,EasyService,svc,crd
NAME READY STATUS RESTARTS AGE
pod/easyservice-sample-6cd6bf49f5-2xg57 1/1 Running 0 4h52m
pod/easyservice-sample-6cd6bf49f5-52l64 1/1 Running 0 12mNAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/easyservice-sample 2/2 2 2 4h52mNAME AGE
easyservice.app.kubebuilder.io/easyservice-sample 4h52mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/easyservice-sample NodePort 10.101.103.107 none 80:31002/TCP 4h52m
service/kubernetes ClusterIP 10.96.0.1 none 443/TCP 30dNAME CREATED AT
customresourcedefinition.apiextensions.k8s.io/easyservices.app.kubebuilder.io 2024-01-14T09:01:58Z部署
1、制作推送controller镜像
$ make docker-build docker-push IMGsome-registry/project-name:tag2、把controller部署到集群
$ make deploy IMGsome-registry/project-name:tag参考
K8s operator从0到1实战