新的Kubernetes部署,具有2个以上的副本以实现高可用性。
我希望能够仅在第一个pod上执行命令,假设创建一个DB,让其他副本等待第一个副本完成。
为了实现这一点,我只想在pod中知道它是否是副本#1。
所以在pod的入口点我可以测试:
if [ $REPLICA_ID -eq 1 ]; then
CreateDB
else
WaitForDB
fi
这可以在Kubernetes中完成吗?
答案 0 :(得分:3)
在Kubernetes中Deployment
被视为无国籍,因此无法提供您正在寻找的功能。您应该考虑StatefulSet
及其功能。
例如StatefulSet
。支持ordered creation,当与您通常可用的readinessProbe
窗格结合使用时,您可以创建所需的行为。播客名称在StatefulSet
内也是稳定的,因此您可以使用hostname
的{{1}}进行测试。
答案 1 :(得分:2)
而不是接受的答案,init container不能更好地符合您的问题描述吗?
添加某种信号量系统(如果需要)以确保它正确执行?