每个节点上一个 agent,组成 DaemonSet,用一个 CR 来下发 shell 命令,agent 在本地执行后将结果写回到 CR 的 status 中
apiVersion: distrun.demo.com/v1
kind: Cmd
metadata:
name: cmd-sample
spec:
# 命令主体,作为 `exec.CommandContext()` 的 name 参数
command: sleep
# 命令参数,作为 `exec.CommandContext()` 的 args 参数
args:
- "10"
# 最大执行时间,如果超过该时间命令还未执行完成,返回 `context deadline exceeded`
timeout: 1 # 单位秒,默认为 1
status:
# 是一个 map,键是节点名(利用 fieldRef 获得),值是命令执行的结果
results:
minikube:
error: context deadline exceeded
stderr: ""
stdout: ""
minikube-m02:
error: context deadline exceeded
stderr: ""
stdout: ""
minikube-m03:
error: context deadline exceeded
stderr: ""
stdout: ""
# 部署 CRD
make install
# 本地运行 operator
make run
# 部署 CR,后面可通过修改 `./config/samples` 中的文件并重新执行该命令来更新 CR
kubectl apply -f ./config/samples
# `minikube node add` 来加入新节点
# 部署 CRD
make install
# 会在本地生成 distrun:v1 镜像,IMG 的值可修改
make docker-build-new IMG=distrun:v1
# 将本地镜像载入到 minikube 中
minikube image load distrun:v1
# 部署相关组件到 minikube 中
make deploy IMG=distrun:v1
# 部署 CR,后面可通过修改 `./config/samples` 中的文件并重新执行该命令来更新 CR
kubectl apply -f ./config/samples
-
仅在
spec.command
或spec.args
变化时,agent 才会响应 -
应使用
make docker-build-new
命令来基于 busybox 构建镜像,kubebuilder 提供的原 Dockerfile 无法执行 shell 命令 -
因为场景原因,去掉了 manager 的
--leader-elect
参数