如何在 CoreOS cloud-init 上设置 sysctl 变量?

如何在 CoreOS cloud-init 上设置 sysctl 变量?

我正在寻找一种在 CoreOS 阶段设置sysctl它的方法cloud-init

CoreOS 版本的cloud-init仅允许少量配置指令,与常规的 不同cloud-init。例如,没有runcmd部分(请参阅http://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/)。

systemdsysctl提供一种通过文件管理设置的方法(http://www.freedesktop.org/software/systemd/man/sysctl.d.html)。我正在使用 CoreOScloud-init write_files部分在 处创建一个文件/etc/sysctl.d/50-nf_conntrack.conf。但它不会被拾取,因为 CoreOS 云配置发生在sysctl.d配置已经完成之后。

也许我可以用其他systemd单元文件来重启该sysctl.d单元?该如何实现?

答案1

请参阅 CoreOS github 问题跟踪器上的答案: https://github.com/coreos/bugs/issues/747#issuecomment-142764415

将来可能会有更简单的方法,但是现在您可以简单地编写一个单元来在 cloudinit 期间调用 systemd-sysctl;它将在写入 write_files 中指定的任何文件后启动:

#cloud-config 
.... 
coreos:
  units:
    - name: update-sysctl.service
      command: start
      content: |
        [Unit]
        Description=Update sysctl values written by cloud-config
        [Service]
        ExecStart=/usr/lib/systemd/systemd-sysctl ...

答案2

感谢其他人提供的一些提示。

您可以这样做来运行类似于 runcmd 的任意命令。

- name: runcmd.service
  command: start
  content: |
    [Unit]
    Description=Runs a command

    [Service]
    Type=oneshot
    ExecStart=/bin/sh -c "touch /etc/environment;"

答案3

您可以简单地sysctl自己调用该文件以使设置立即生效,并且该配置文件将用于以后的重启(如果您的实例是持久的)。

我会用运行命令为了这。

runcmd:
- sysctl -p /etc/sysctl.d/50-nf_conntrack.conf

相关内容