このエントリはKubernetesアドベントカレンダー2014の11日目です。
今日はCentOS7にインストールした場合の自動起動について確認します。
CentOS7での自動起動
CentOS6までは /etc/init.d/
配下のスクリプトを、
chkconfig
と service
を使って自動起動設定していましたね。
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
特徴的なのは After
と Requires
です。
このように順序・依存関係を記載することで、順番を制御できます。
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/*
で調整してくださいませ