我有一个kubernetes设置,其中一个是master
节点,两个是worker
节点。部署daemonset
之后,它将在两个worker
节点上启动容器。这些吊舱包含2个容器。这些容器中运行着python脚本。 python脚本正常运行,但是在某个时间点之后的某个时间点,它需要向主机发送shutdown
命令。我可以直接发出命令shutdown -h now
,但这将在容器上而不在主机上运行,并给出以下错误:
Failed to connect to bus: No such file or directory
Failed to talk to init daemon.
要解决此问题,我可以获取主机的ip address
,然后可以将其ssh到其中,然后运行命令以安全地关闭主机。
但是还有其他方法可以向kubernetes / docker中的主机发出命令吗??
答案 0 :(得分:1)
您可以使用kube api访问集群。
https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/
从Pod中访问API从Pod中访问API时, 对apiserver的定位和身份验证有些不同。
在Pod中定位apiserver的推荐方法是使用 kubernetes.default.svc DNS名称,它解析为一个服务IP 依次将其路由到apiserver。
推荐的对apiserver进行身份验证的方法是使用服务 帐户凭证。通过kube-system,吊舱与服务相关联 帐户,并放置该服务帐户的凭据(令牌) 到该容器中每个容器的文件系统树中 /var/run/secrets/kubernetes.io/serviceaccount/token。
排干节点,您可以使用它
驱逐API
https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/
但是我不太确定Pod是否会耗尽自己的节点。解决方法可以控制来自不同节点的其他Pod。