【发布时间】:2021-07-15 01:24:23
【问题描述】:
我想在特定部署的 pod 重新启动时运行特定的 Kubernetes 作业。
特别是,我有一个 Redis 部署。它没有永久存储支持。当 Redis 部署中的 pod 重新启动时,我想在 Redis 中填充一些键。
有没有办法在 pod 重启时触发作业?
【问题讨论】:
标签: kubernetes
我想在特定部署的 pod 重新启动时运行特定的 Kubernetes 作业。
特别是,我有一个 Redis 部署。它没有永久存储支持。当 Redis 部署中的 pod 重新启动时,我想在 Redis 中填充一些键。
有没有办法在 pod 重启时触发作业?
【问题讨论】:
标签: kubernetes
有一种方法可以使用以下命令重新运行作业:
kubectl get job <job name> -n <namespace> -o json | jq 'del(.spec.selector)' | jq 'del(.spec.template.metadata.labels)'| kubectl replace --force -f -
这可行,但它不是完全自动的。
比较有效的解决方案是将job中与单个pod相关的命令复制到pod的deployment中。然后每当它重新启动时,这些命令就会运行。
containers:
- name: <container name>
command:
- /bin/sh
- -c
- |
<first command>;
<second command>;
【讨论】:
我想到的最佳选择是 k8s 运算符 - 一个简单的 python/go 脚本监视您的目标 pod(按标签、名称、命名空间等)并在状态更改时执行一些操作。
操作员只是具有特殊功能的部署。有多种实现方式,其中一种是https://sdk.operatorframework.io/docs/building-operators/golang/quickstart/
您也可以使用https://github.com/kubernetes-client/python#examples(查看第二个示例)。
您可以摆脱这项工作,并在运算符本身内部编写您的 redis 逻辑。
【讨论】: