K8s CRD开发
K8s CRD开发
Alexk8s CRD开发
- 开发前置环境需求
- kubebuilder
- kustomize
- k8s
- kubectl
- golang
- docker
创建crd
1 | kubebuilder init --domain qipajun.com --license apache2 --owner "alex" |
- 安装启动crd
1 | # k8s创建资源 |
1 | # 查看资源 |
1 | # 运行项目 |
1 | # 创建k8s crd资源 |
- 部署controller到集群中
1
2
3
4# 构建镜像
make docker-build docker-push IMG=liuhaogui/crd-demo-infra-controller:v0.0.1
# 部署到集群
make deploy IMG=liuhaogui/crd-demo-infra-controller:v0.0.1
1 | # 查看deploy |
开发需求
配置参数读取
- 结构体参数定义
api/v1/virtulmachine_types.go
1 | type VirtulMachineSpec struct { |
- 配置文件yaml设置参数
config/samples
1 | apiVersion: infra.qipajun.com/v1 |
- 实现相关事件处理 :
Reconcile
接口负责实现controller事件监听处理
1 | func (r *VirtulMachineReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { |
- 更新、构建运行
1 | kubectl apply -f config/samples/ |
1 | # 启动后打印配置参数信息 |
状态更新
- 定义状态参数
1 | type VirtulMachineStatus struct { |
- controller对状态做变动
1 | vm.Status.Status = "Running" |
- 运行查看状态变更
1 | # 构建运行 |
- log 查看状态变更和删除
1 | INFO[0000] [vm info] cpu: 1 , memory : 1G source="virtulmachine_controller.go:50" |