好的,让我尝试在这里回答我自己的问题。我认为Amit Kumar Gupta
最接近我所相信的这里发生的事情。
由于我使用的是 Deployment 和我的 PVC ReadWriteOnce
,我基本上只能在一个节点上使用一个运行 jenkins 的 pod。
weibelds
答案让我意识到我是在对 Kubernetes 默认执行的一个概念提出问题。如果我的 pod 出现故障(在我的情况下,我通过硬断电来模拟故障来故意关闭节点),集群(控制器?)将检测到这一点并在另一个节点上生成一个新的 pod。
到目前为止一切都很好,但后来我注意到我的新 pod 卡在了ContainerCreating
状态。
describe
在我的新 pod(ContainerCreating
状态中的)上运行 a显示了这一点
Warning FailedAttachVolume 16m attachdetach-controller Multi-Attach error for volume "pvc-cb772fdb-492b-4ef5-a63e-4e483b8798fd" Volume is already used by pod(s) jenkins-deployment-6ddd796846-dgpnm
Warning FailedMount 70s (x7 over 14m) kubelet, cc-pool-bg6u Unable to mount volumes for pod "jenkins-deployment-6ddd796846-wjbkl_default(93747d74-b208-421c-afa4-8d467e717649)": timeout expired waiting for volumes to attach or mount for pod "default"/"jenkins-deployment-6ddd796846-wjbkl". list of unmounted volumes=[jenkins-home]. list of unattached volumes=[jenkins-home default-token-wd6p7]
然后它开始打击我,这是有道理的。这是一个遗憾,但它是有道理的。
由于我对节点进行了硬断电,因此 PV 随之下降。因此,现在控制器尝试在新节点上启动一个新 pod,但它无法传输 PV,因为前一个 pod 上的那个变得无法访问。
当我阅读更多关于此的内容时,我读到 DigitalOcean 仅支持ReadWriteOnce
,这让我现在想知道,我到底如何才能在 Digital Ocean 上的 Kubernetes 集群上为仅由几个简单的液滴组成的有状态应用程序实现简单的故障转移?