![如何在 CoreOS cloud-init 上设置 sysctl 变量?](https://linux22.com/image/634767/%E5%A6%82%E4%BD%95%E5%9C%A8%20CoreOS%20cloud-init%20%E4%B8%8A%E8%AE%BE%E7%BD%AE%20sysctl%20%E5%8F%98%E9%87%8F%EF%BC%9F.png)
我正在寻找一种在 CoreOS 阶段设置sysctl
它的方法cloud-init
。
CoreOS 版本的cloud-init
仅允许少量配置指令,与常规的 不同cloud-init
。例如,没有runcmd
部分(请参阅http://coreos.com/docs/cluster-management/setup/cloudinit-cloud-config/)。
systemd
sysctl
提供一种通过文件管理设置的方法(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