cloud-init
ステージでCoreOSsysctl
設定を行う方法を探しています。
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 ) 。 CoreOS cloud-init
write_files
セクションを使用して、/etc/sysctl.d/50-nf_conntrack.conf
にファイルを作成しています。ただし、CoreOSクラウド構成はsysctl.d
構成が既に行われた後に行われるため、取得されません。
おそらく、別のsystemd
ユニットファイルを使用してsysctl.d
ユニットを再起動できますか?これはどのように達成できますか?
CoreOS github Issue Trackerの回答を参照してください: 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
を呼び出すだけで、設定がすぐに有効になり、構成ファイルは後で再起動するために使用されます(インスタンスが永続的である場合)。
これには コマンドの実行 を使用します。
runcmd:
- sysctl -p /etc/sysctl.d/50-nf_conntrack.conf