一个新的Kubernetes部署,具有2个以上的副本以实现高可用性。
我希望能够只在第一个pod上执行命令,比如说创建一个DB,让其他副本等待第一个完成。
为了实现这一点,我只想在pod中知道这是否是副本#1。
所以在pod的入口点,我可以测试:
if [ $REPLICA_ID -eq 1 ]; then
CreateDB
else
WaitForDB
fi
这可以在Kubernetes中实现吗?
一个新的Kubernetes部署,具有2个以上的副本以实现高可用性。
我希望能够只在第一个pod上执行命令,比如说创建一个DB,让其他副本等待第一个完成。
为了实现这一点,我只想在pod中知道这是否是副本#1。
所以在pod的入口点,我可以测试:
if [ $REPLICA_ID -eq 1 ]; then
CreateDB
else
WaitForDB
fi
这可以在Kubernetes中实现吗?
2条答案
按热度按时间zrfyljdw1#
在Kubernetes中,
Deployment
被认为是无状态的,因此不提供您正在寻找的功能。您应该更深入地了解StatefulSet
及其特性。A
StatefulSet
例如支持有序创建,当与通常可用的readinessProbe
结合使用时,您可以创建所需的行为。另外,pod名称在StatefulSet
中是稳定的,因此您可以使用Pod
的hostname
进行测试。sqxo8psd2#
与公认的答案不同,init container不是更适合您的问题描述吗?
添加某种信号量系统(如果需要的话)以确保它被正确执行?