本項ではContainer Managementのcgroup driverをcgroupfsからsystemdに変更する手順、および変更を切り戻す手順を記載します。
Kubernetes masterサーバ、nodeサーバにログインし、cgroup driverの設定を行います。
ログイン方法は、「運用ガイド」の「共通の操作」-「SSL-VPNの接続による各サーバへのログイン」を参照してください。
kubeletのサービス停止を行います。
# sudo systemctl stop kubelet
dockerの設定ファイルを更新します。
/etc/docker/daemon.json に cgroupdriverの定義を追加します。
# sudo vi /etc/docker/daemon.json
以下の様に修正を追加を行います。
{ "exec-opts": ["native.cgroupdriver=systemd"], ※この行を追加します。 "insecure-registries": [ "XXX.XXX.XXX.XXX:4567" ], "log-driver": "json-file", "log-opts": { "max-file": "10", "max-size": "10m" }, "storage-driver": "devicemapper", "storage-opts": [ "dm.directlvm_device=/dev/vdb" ] }
/usr/lib/systemd/system/docker.service から cgroupdriverの定義を削除します。
ご利用のプラットフォームに合わせ以下を実行してください。
【CentOSの場合】
# sudo sed -i -e "s#ExecStart=.*#ExecStart=/usr/bin/dockerd#g" /usr/lib/systemd/system/docker.service
【RHELの場合】
# sudo sed -i -e "/--exec-opt native.cgroupdriver=cgroupfs/d" /usr/lib/systemd/system/docker.service
dockerの設定変更の反映を行います。
以下のコマンドを実行し、設定ファイルの内容を反映してください。
# sudo systemctl daemon-reload # sudo systemctl restart docker
kubeletの設定ファイルを更新します。
以下のコマンドを実行し、cgroupdriverの定義を変更します。
# sudo systemctl daemon-reload # sudo systemctl restart docker
/etc/sysconfig/kubelet を編集します。
以下の様に --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice を追記します。
KUBELET_EXTRA_ARGS=--node-ip=XX.XX.XX.XX --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice
/var/lib/kubelet/kubeadm-flags.envを編集します。
# sudo vi /var/lib/kubelet/kubeadm-flags.env
以下の様に cgroup driverをsystemdに変更します。
KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --network-plugin=cni
kubeletの設定変更の反映を行います。
以下のコマンドを実行し、設定ファイルの変更を反映します。
# sudo systemctl daemon-reload # sudo systemctl start kubelet
kubeletのサービス停止を行います。
# sudo systemctl stop kubelet
dockerの設定ファイルを更新します。
/etc/docker/daemon.json から cgroupdriverの定義を削除します。
# sudo vi /etc/docker/daemon.json
以下の様にして定義を削除します。
{ "exec-opts": ["native.cgroupdriver=systemd"], ※この行を削除します。 "insecure-registries": [ "XXX.XXX.XXX.XXX:4567" ], "log-driver": "json-file", "log-opts": { "max-file": "10", "max-size": "10m" }, "storage-driver": "devicemapper", "storage-opts": [ "dm.directlvm_device=/dev/vdb" ] }
/usr/lib/systemd/system/docker.service に cgroupdriver の定義を追加します。
# sudo vi /usr/lib/systemd/system/docker.service
【RHELの場合】
[Unit] Description=Docker Application Container Engine : [Service] Type=notify : ExecStart=/usr/bin/dockerd-current \ --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \ --default-runtime=docker-runc \ --authorization-plugin=rhel-push-plugin \ --exec-opt native.cgroupdriver=cgroupfs \ ※この行を追加します。 --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \ --init-path=/usr/libexec/docker/docker-init-current \ $OPTIONS \ $DOCKER_STORAGE_OPTIONS \ $DOCKER_NETWORK_OPTIONS \ $ADD_REGISTRY \ $BLOCK_REGISTRY \ $INSECURE_REGISTRY \ $REGISTRIES
【CentOSの場合】
: ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=cgroupfs ※この行でcgroupfsを指定します。 ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0
dockerの設定変更の反映を行います。
以下のコマンドを実行し、設定ファイルの内容を反映してください。
# sudo systemctl daemon-reload # sudo systemctl restart docker
kubeletの設定ファイルを更新します。
以下のコマンドを実行し、cgroupdriverの定義を変更します。
# sudo sed -i -e 's/cgroupDriver: systemd/cgroupDriver: cgroupfs/' /usr/lib/systemd/system/kubelet.service.d/kubelet.conf
以下のコマンドを実行して、Kubernetes masterサーバの設定ファイルを変更します。
# sudo sed -i -e 's/--cgroup-driver=systemd/--cgroup-driver=cgroupfs/' /var/lib/kubelet/kubeadm-flags.env
kubeletの設定変更の反映を行います。
以下のコマンドを実行し、設定ファイルの変更を反映します。
# sudo systemctl daemon-reload # sudo systemctl start kubelet