2

我有一个带有 2 个带有 openconnect vpn 代理容器的 nginx 副本的部署(一个 pod 只有一个容器)。

它们开始时没有任何问题并且一切正常,但是一旦连接崩溃并且我的活性探测失败,nginx 容器将重新启动,最终以 CrashLoopbackoff 结束,因为 openconnect 和 nginx 重新启动失败

nginx:

host not found in upstream "example.server.org" in /etc/nginx/nginx.conf:11

打开连接:

getaddrinfo failed for host 'vpn.server.com': Temporary failure in name resolution

似乎 /etc/resolv.conf 是由 openconnect 编辑的,并且在 pod 重新启动时它保持不变(尽管它不是持久卷的一部分),我相信整个容器应该从一个干净的 docker 映像运行, /etc/resolv.conf 没有被修改,对吧?

修复 CrashLoopback 的唯一方法是删除 pod,然后部署 rc 运行一个可以工作的新 pod。

创建一个新的 pod 与当 pod 中的容器被 liveness 探针 restartPolicy: Always 重启时有什么不同?容器是否以干净的图像重新启动?

4

1 回答 1

1

restartPolicy适用于 Pod 中的所有容器,而不是 Pod 本身。Pod 通常只有在有人明确删除它们时才会重新创建。

我认为这解释了为什么重新启动的带有错误 resolv.conf 的容器会失败,但新的 pod 可以工作。

“重新启动的容器”就是这样,它不是从下载的 docker 映像中生成的。这就像杀死一个进程并启动它 - 新进程的文件系统与旧进程正在更新的文件系统相同。但是一个新的 pod 将创建一个新的容器,其本地文件系统视图与下载的 docker 映像中打包的相同 - 全新启动。

于 2017-12-26T18:03:17.897 回答