如何在CoreOS的cloud-init中设置sysctlvariables?

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

cloud-init的CoreOS版本只允许less量的configuration指令,并且与常规的cloud-init 。 例如,没有runcmd节(请参阅http://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/ )。

systemd提供了一种通过文件pipe理sysctl设置的方法( http://www.freedesktop.org/software/systemd/man/sysctl.d.html )。 我正在使用write_files cloud-init write_files部分在/etc/sysctl.d/50-nf_conntrack.conf创build一个文件。 但是它不会被拾取,因为sysctl.d云configuration是在sysctl.dconfiguration已经发生之后发生的。

也许我可以以某种方式使用另一个systemd单元文件重新启动sysctl.d单元? 这怎么能做到呢?

请参阅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 ... 

感谢别人的一些提示。

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

 - name: runcmd.service command: start content: | [Unit] Description=Runs a command [Service] Type=oneshot ExecStart=/bin/sh -c "touch /etc/environment;" 

你可以直接调用sysctl来使这些设置立即生效,configuration文件将用于以后的重启(如果你的实例是持久的)。

我会用这个运行命令 。

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