Ubuntu

kubelet 服務未在 Kubernetes 主節點中執行(波動)

  • January 2, 2022

我試圖使用 kubeadm 創建一個 Kubernetes 集群。我啟動了一個 Ubuntu 18.04 伺服器,安裝了 docker(確保 docker.service 正在執行),安裝了 kubeadm kubelet 和 kubectl。

以下是我執行的步驟:

sudo apt-get update
sudo apt-get install docker.io -y
sudo systemctl enable docker
sudo systemctl start docker
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt-get install kubeadm kubelet kubectl -y
sudo apt-mark hold kubeadm kubelet kubectl 
kubeadm version
swapoff –a

sudo hostnamectl set-hostname master-node
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

執行sudo kubeadm init –pod-network-cidr=10.244.0.0/16後,我收到以下錯誤:

root@ip-172-31-10-50:/home/ubuntu# sudo kubeadm init –pod-network-cidr=192.168.0.0/16

$$ init $$使用 Kubernetes 版本:v1.23.1

$$ preflight $$進行飛行前檢查

$$ preflight $$拉取設置 Kubernetes 集群所需的鏡像

$$ preflight $$這可能需要一兩分鐘,具體取決於您的網際網路連接速度

$$ preflight $$您還可以使用“kubeadm config images pull”預先執行此操作

$$ certs $$使用 certificateDir 文件夾“/etc/kubernetes/pki”

$$ certs $$使用現有的 ca 證書頒發機構

$$ certs $$使用磁碟上現有的 apiserver 證書和密鑰

$$ certs $$使用磁碟上現有的 apiserver-kubelet-client 證書和密鑰

$$ certs $$使用現有的 front-proxy-ca 證書頒發機構

$$ certs $$使用磁碟上現有的前端代理客戶端證書和密鑰

$$ certs $$使用現有的 etcd/ca 證書頒發機構

$$ certs $$使用現有的 etcd/server 證書和磁碟上的密鑰

$$ certs $$使用現有的 etcd/peer 證書和磁碟上的密鑰

$$ certs $$使用現有的 etcd/healthcheck-client 證書和磁碟上的密鑰

$$ certs $$使用磁碟上現有的 apiserver-etcd-client 證書和密鑰

$$ certs $$使用現有的“sa”鍵

$$ kubeconfig $$使用 kubeconfig 文件夾“/etc/kubernetes”

$$ kubeconfig $$使用現有的 kubeconfig 文件:“/etc/kubernetes/admin.conf”

$$ kubeconfig $$使用現有的 kubeconfig 文件:“/etc/kubernetes/kubelet.conf”

$$ kubeconfig $$使用現有的 kubeconfig 文件:“/etc/kubernetes/controller-manager.conf”

$$ kubeconfig $$使用現有的 kubeconfig 文件:“/etc/kubernetes/scheduler.conf”

$$ kubelet-start $$將帶有標誌的 kubelet 環境文件寫入文件“/var/lib/kubelet/kubeadm-> flags.env”

$$ kubelet-start $$將 kubelet 配置寫入文件“/var/lib/kubelet/config.yaml”

$$ kubelet-start $$啟動 kubelet

$$ control-plane $$使用清單文件夾“/etc/kubernetes/manifests”

$$ control-plane $$為“kube-apiserver”創建靜態 Pod 清單

$$ control-plane $$為“kube-controller-manager”創建靜態 Pod 清單

$$ control-plane $$為“kube-scheduler”創建靜態 Pod 清單

$$ etcd $$在“/etc/kubernetes/manifests”中為本地 etcd 創建靜態 Pod 清單

$$ wait-control-plane $$等待 kubelet 作為靜態 Pod 從目錄“/etc/kubernetes/manifests”啟動控制平面。這可能需要長達 4m0s

$$ kubelet-check $$40 秒的初始超時已過。

$$ kubelet-check $$kubelet 似乎沒有執行或健康。

$$ kubelet-check $$等於“curl -sSL http://localhost:10248/healthz”的 HTTP 呼叫失敗並出現錯誤:獲取“http://localhost:10248/healthz”:撥打 tcp 127.0.0.1:10248:連接:連接被拒絕。

我嘗試使用Flannel 的 CIDR(10.244.0.0/16)Calico 的 CIDR(192.168.0.0/16)執行****kubectl init –pod-network-cidr。但是,我得到了同樣的錯誤。

另外,我觀察到我的 EC2 實例中Kubelet的狀態在波動。當我執行systemctl status kubelet.service時,有時它沒有執行,有時 Kubelet 正在執行。它自動發生。認為這是kubectl init失敗的原因,因為kubelet-check清楚地說:“看起來 kubelet 沒有執行或健康”

執行systemctl status kubelet.service後,報錯:

root@ip-172-31-10-50:/home/ubuntu# systemctl status kubelet.service

● kubelet.service - kubelet:Kubernetes 節點代理

已載入:已載入(/lib/systemd/system/kubelet.service;已啟用;供應商預設:已啟用)

Drop-In:/etc/systemd/system/kubelet.service.d

└─10-kubeadm.conf

活動:自 2021 年 12 月 29 日星期三以來啟動(自動重啟)(結果:退出程式碼)世界標準時間 17:52:35;3s 前

文件:https

://kubernetes.io/docs/home/ 程序:22901 ExecStart=/usr/bin/kubelet $ KUBELET_KUBECONFIG_ARGS $ KUBELET_CONFIG_ARGS $ KUBELET_KUBEADM_ARGS $ KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)

Main PID: 22901 (code=exited, status=1/FAILURE)

當我繼續執行systemctl status kubelet.service時,幾秒鐘後,kubectl.service 似乎正在執行,幾秒鐘後,它又失敗了。

…跳過…

● kubelet.service - kubelet:Kubernetes 節點代理

已載入:已載入(/lib/systemd/system/kubelet.service;已啟用;供應商預設:已啟用)

Drop-In:/etc/systemd/system /kubelet.service.d

└─10-kubeadm.conf

活動:自 2021 年 12 月 30 日星期四 18:50:49 UTC 起活動(執行);125ms 前

Docs: https://kubernetes.io/docs/home/

Main PID: 12895 (kubelet)

Tasks: 9 (limit: 4686)

CGroup: /system.slice/kubelet.service

└─12895 /usr/bin/kubelet –bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf > –kubeconfig=/etc/kubernetes/kubelet.conf –config=/var/lib/kubelet/conf

我不確定為什麼 kubelet 會以這種方式波動。

有誰知道如何解決這一問題?

我能夠通過編輯**/etc/systemd/system/kubelet.service.d/10-kubeadm.conf**來修復 kubelet.service 問題。

在文件中,我添加了Environment=“KUBELET_CGROUP_ARGS=–cgroup-driver=systemd”並註釋掉Environment=“KUBELET_CONFIG_ARGS=–config=/var/lib/kubelet/config.yaml”

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf供參考:

# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
#Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

然後執行:systemctl daemon-reloadsystemctl restart kubelet

這樣 kubelet.service 一直在執行。

謝謝!

錯誤日誌有你的答案:

Kubelet 執行失敗:配置錯誤:kubelet cgroup 驅動程序:“systemd”與 docker cgroup 驅動程序不同:“cgroupfs””

有關如何配置cgroup 驅動程序的資訊,請參閱 Kubernetes 文件

引用自:https://serverfault.com/questions/1088605