本項では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