CentOS7での自動起動

このエントリはKubernetesアドベントカレンダー2014の11日目です。

今日はCentOS7にインストールした場合の自動起動について確認します。

CentOS7での自動起動

CentOS6までは /etc/init.d/ 配下のスクリプトを、 chkconfigservice を使って自動起動設定していましたね。

CentOS7では systemd ( systemctl )を使うので、このあたりがガラッと変わります。

dockerを起動する場合は以下のようにします。

systemctl start docker.service

dockerを自動起動有効にする場合は以下のようにします。

systemctl enable docker.service

自動起動の仕込み

自動起動の有効・無効は systemctl enable|diable で切り替えますが、 その設定ファイルは /usr/lib/systemd/system 配下にあります。

以下のファイルを /usr/lib/systemd/system/etcd.service に配置すると、etcdが自動起動できるようになります。

[Unit]
Description=etcd
After=network.target

[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/etcd
ExecStart=/usr/local/sbin/etcd -name=${NAME} -data-dir=${DATA_DIR} -addr=${ADDR} -peer-addr=${PEER_ADDR} ${OPTS}
Restart=on-failure

[Install]
WantedBy=multi-user.target

以下のファイルを /usr/lib/systemd/system/flannel.service に配置すると、flannelが自動起動できるようになります。

[Unit]
Description=flanneld
After=etcd.service
Requires=etcd.service

[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/flanneld
ExecStart=/usr/local/sbin/flanneld -etcd-endpoint=${ETCD_ENDPOINT} -ip-masq=${IP_MASQ} -iface=${IFACE} ${OPTS}
Restart=on-failure

[Install]
WantedBy=multi-user.target

特徴的なのは AfterRequires です。 このように順序・依存関係を記載することで、順番を制御できます。 Kubernetesの場合、```etcd -> flannel -> docker -> kube-apiserver ...`` という順序であることが必要なのでこのように前後を指定することでうまく起動してくれます。

ワンポイント

起動に失敗した場合、デフォルトは100msec後にリトライします。 [Service]RestartSec を指定しておくとこの100msecを変更することができます。

dockerが起動するときに /run/flannel/subnet.env が生成されている必要があります。 flannel起動後あまりにもすぐにdockerが起動しようとすると失敗するため、 RestartSec=3s などと記載しておくとうまく自動起動してくれます。

まとめ

簡単インストール+自動起動するための設定ファイル群をまとめてgithubに置いてますのでご活用ください。

netmarkjp/kubernetes-init-files

※細かい設定は /etc/sysconfig/* で調整してくださいませ


See also