CentOSでのデフォルトのDockerインストールは、systemd
Cgroupで始まります。私は公式のYUMリポジトリからKubernetesをインストールし、systemd drop-in 10-kubeadm.conf
には次の内容が含まれています。
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS
また、systemdドロップインが適切にオーバーライドされるかどうかを確認するために環境変数を取得しようとしました(systemctl show --property=Environment kubelet | cat
):
Environment=KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf\x20--kubeconfig=/etc/kubernetes/kubelet.conf KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests\x20--allow-privileged=true KUBELET_NETWORK_ARGS=--network-plugin=cni\x20--cni-conf-dir=/etc/cni/net.d\x20--cni-bin-dir=/opt/cni/bin KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10\x20--cluster-domain=cluster.local KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook\x20--client-ca-file=/etc/kubernetes/pki/ca.crt KUBELET_CADVISOR_ARGS=--cadvisor-port=0 KUBELET_CGROUP_ARGS=--cgroup-driver=systemd KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true\x20--cert-dir=/var/lib/kubelet/pki
kubeadm init --apiserver-advertise-address=X.X.X.X --pod-network-cidr=10.244.0.0/16
を使用してクラスターを初期化すると、プロセスは成功します。ただし、kubelet version
を実行すると、Cgroupの構成エラーが発生します。
error: failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
kubectl version
):1.9(GitVersion:1.9.1; Goバージョン:go1.9.2)docker version
):1.12.6この問題の正しい解決策は何ですか? KubernetesのCgroupをcgroupfsに変更しようとすると、kubeadmが「kubelet unresponsive」エラーを出し続けました。与えられたCGroupパラメータをKubernetesが受け入れるようにするにはどうすればよいですか?
こんにちは同じ問題がありました。 DockerとKubeletが同じcgroupドライバーで実行されるようにする必要があります。
Centosでは、Dockerはcgroupfsで実行され、kubeletはsystemd cgroupで実行されます。これを変更するには、Kubeletのドキュメントに従う必要があります。 https://kubernetes.io/docs/setup/independent/install-kubeadm/#configure-cgroup-driver-used-by-kubelet-on-master -node
これを修正するには、次のものが必要です。
sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
次にkubeletを再起動します
systemctl daemon-reload
systemctl restart kubelet
次のように、ファイル/ etc/sysconfig/kubeletをcgroup-driver値で変更します。
KUBELET_EXTRA_ARGS=--cgroup-driver=<value>
Docker Cgroupドライバーを取得するには:
docker info | grep -i 'cgroup driver'
次に、再読み込みsystemdデーモンと再起動kubelet:
systemctl daemon-reload
systemctl restart kubelet