【问题标题】:Correct way to define k8s-user-startup-script定义 k8s-user-startup-script 的正确方法
【发布时间】:2016-05-11 22:46:00
【问题描述】:

这就像一个后续问题:Recommended way to persistently change kube-env variables

我正在尝试为 GKE 实例定义 k8s-user-startup-script 的可能性(我想为每个节点安装额外的软件)。

k8s-user-startup-script 添加到实例组模板“自定义元数据”是可行的,但这会被 gcloud container clusters upgrade 覆盖,这会创建一个新的实例模板,而不会“继承”额外的 k8s-user-startup-script 当前模板的元数据。

我还尝试将 k8s-user-startup-script 添加到项目元数据中(我认为这将被我的项目的所有实例继承,如 here 所述)但是不考虑。

定义保持集群升级的k8s-user-startup-script的正确方法是什么? 或者,更一般地说,自定义 GKE 节点的理想方式是什么?

【问题讨论】:

    标签: kubernetes google-kubernetes-engine


    【解决方案1】:

    Google Container Engine 不支持节点的自定义启动脚本。

    正如我在Recommended way to persistently change kube-env variables 中提到的,您可以使用 DaemonSet 来自定义您的节点。在特权模式下运行的 DaemonSet 几乎可以做任何你可以用启动脚本做的事情,但需要注意的是它在节点启动生命周期中稍晚完成。由于 DaemonSet 将在集群中的所有节点上运行,因此它将自动应用于任何加入的新节点(通过集群调整大小),并且因为它是一个 Kubernetes API 对象,它将在操作系统升级时保持不变。

    【讨论】:

    • 感谢您的意见!将去一个特权/hostNetwork DaemonSet 比。
    • 请参阅github.com/kubernetes/contrib/tree/master/startup-script 了解如何使用 DaemonSet 执行此操作的示例。
    • 但是如何在app启动前使用它来配置内核参数呢?比如:``` echo 1024 > /proc/sys/net/core/somaxconn echo never > /sys/kernel/mm/transparent_hugepage/enabled ```
    • 在部署应用程序之前将守护程序集部署到您的集群?或者,如果您确实需要同时部署它们,您可以让您的应用程序监视文件并等待启动,直到它具有正确的值(通过 dockerfile 中的简单外壳包装器)。
    • 注意:如果您需要修改网络配置以便能够首先拉取运行守护程序集所需的图像,则此方法不起作用:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    相关资源
    最近更新 更多