首页 > 解决方案 > 如何让容器关闭 Kubernetes 中的主机?

问题描述

我有一个 kubernetes 设置,其中一个是master节点和两个worker节点。在部署之后,即 a ,它会在两个节点daemonset上启动 pod 。worker这些 pod 包含 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/dockers 中的主机发出命令吗?

标签: dockerkubernetes

解决方案


您可以使用 kube api 访问您的集群。

https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/

从 Pod 访问 API 从 pod 访问 API 时,定位和验证到 apiserver 是有些不同的。

在 pod 中定位 apiserver 的推荐方法是使用 kubernetes.default.svc DNS 名称,该名称解析为服务 IP,该服务 IP 又将被路由到 apiserver。

向 apiserver 进行身份验证的推荐方法是使用服务帐户凭据。通过 kube-system,一个 pod 与一个服务帐户相关联,并且该服务帐户的凭证(令牌)被放置在该 pod 中每个容器的文件系统树中,位于 /var/run/secrets/kubernetes.io/serviceaccount /令牌。

排空节点,您可以使用它

驱逐 API

https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/

但我不太确定 pod 是否会耗尽自己的节点。解决方法可以是控制来自不同节点的其他 pod。


推荐阅读