【发布时间】:2017-12-12 05:47:10
【问题描述】:
我正在使用kube-aws 在 AWS 上运行 Kubernetes 集群,一切正常。
现在,我意识到我正在使用的版本 (v1.7.10_coreos.0) 中没有打开 cron 作业,而 Kubernetes 的文档只说明了以下内容:
对于以前版本的集群 (
并且该文本中指向的文档仅说明了这一点(它是实际的完整文档):
在启动 API 服务器时,可以通过传递 --runtime-config=api/ 标志来打开或关闭特定的 API 版本。例如:要关闭 v1 API,请通过 --runtime-config=api/v1=false。 runtime-config 还支持 2 个特殊键:api/all 和 api/legacy 分别控制所有和旧版 API。例如,要关闭除 v1 之外的所有 API 版本,请传递 --runtime-config=api/all=false,api/v1=true。就这些标志而言,旧版 API 是那些已明确弃用的 API(例如 v1beta3)。
我一直未能找到有关如何更改正在运行的集群的配置的信息,当然,我不想尝试在api-server 上重新运行该命令。
请注意,kube-aws 仍然使用hyperkube,而不是kubeadm。另外,/etc/kubernetes/manifests-目录只包含ssl-目录。
我要应用的设置是这样的:--runtime-config=batch/v2alpha1=true
应用此设置并重启apiservers 的正确方法是什么,最好使用kubectl?
谢谢。
【问题讨论】:
-
/etc/kubernetes/manifests不寻常地为空,而且完全丢失,因为在 90% 的情况下,apiserver 是静态配置 bykubelet,以摆脱需要工作的 apiserver 使用 kubectl 来对付的先有鸡还是先有蛋的情况。您的设置可能使用 systemd 来管理 kubelet 和 apiserver,所以systemctl list-units | grep -E 'kube|apiserver'看看是否有任何有趣的东西出现。但无论哪种方式,更改 apiserver 的命令行是我所知道的完成您所要求的唯一机制 -
感谢您的评论,马修!该命令的输出给了我一个错误:
Failed to get D-Bus connection: Unknown error -1。我在apiserverpod 之一上运行它。如果清单目录为空,添加它是否安全?我很好奇如何更新配置然后重新启动apiserver。我只是杀死豆荚吗?或者我可以使用kubectl运行命令来重新启动 apiserver? -
我正在其中一个 apiserver pod 上运行它 啊哈,现在我知道发生了什么;抱歉:您将希望在这些 apiserver 的节点上执行该操作(以及对 apiserver 运行方式的所有其他更改)(同样,我希望它是静态的);由于评论太长,我将在单独的评论中回答下半场
-
如何更新配置然后重启 apiserver 假设 (!) apiserver 是由静态清单声明的,那么当磁盘上的文件更改时(在秒),我希望
kubelet注意到这个变化,杀死 apiserver 容器/Pod,并使用新的配置重新启动它——就像它被编程为通过来自 apiserver 本身的命令一样。如果您有多主机,AFAIK 还必须更新其他节点上匹配的 apiserver 清单,在验证第一个更改是否符合您的预期之后 -
感谢 Matthew,非常感谢您的帮助!显然,我没有用 alpha 类型集测试它,这有点尴尬。我真的以为我做到了。但是,您现在提供的信息对我来说仍然非常有价值,因为我还没有找到关于它的文档。我在哪里可以找到那个静态清单?因为它不在
/etc/kubernetes/manifests中?请注意,我使用了kube-aws,它使用hyperkube,而不是kubeadm,用于部署。
标签: amazon-web-services cron kubernetes