kubelet 服務未在 Kubernetes 主節點中執行(波動)
我試圖使用 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-reload和systemctl restart kubelet
這樣 kubelet.service 一直在執行。
謝謝!
錯誤日誌有你的答案:
Kubelet 執行失敗:配置錯誤:kubelet cgroup 驅動程序:“systemd”與 docker cgroup 驅動程序不同:“cgroupfs””