新手踩坑 k8s部署遇到的問題及可參考的解決辦法

2021-10-08 03:37:56 字數 3607 閱讀 6310

專案需要最近在了解k8s,嘗試使用虛擬機器模擬集群環境,結合了不同的部署教程,給出乙個基本的安裝流程,以及遇到的問題。

安裝環境:windows10+vmware(模擬集群環境)+ubuntu 16.04

思路:利用虛擬機器模擬集群環境,虛擬機上安裝ubuntu 16.04系統,建立了兩個虛擬機器,乙個作為master節點(集群的總控節點,相當於集群的大腦),乙個作為從節點node(相當於集群裡可供排程的資源),二者的關係相當於將軍-士兵,將軍只有乙個,士兵可以有很多,供將軍調配。需要在所有的節點(master和所有node)上安裝docker,kubeadm,kubelet,kubectl,master節點需要一些特別的配置,這是作為「大腦」的特殊地方。

安裝命令:

因為我安裝的過程遇到了太多的坑,主要精力花費在解決問題上了,所以安裝過程沒有截圖了,所有的命令都可以在這裡找到。

遇到的大部分問題都在於訪問限制,所以在一些命令中需要更換aliyun源,尤其是在集群初始化的時候。

這是集群的初始化命令,其中–pod-network-cidr引數指定的是pod網路的位址(對網路了解不深,為什麼這麼寫的原因還不了解),–apiserver-advertise-address指定的是master節點的網路位址,–image-registry指定的是國內映象位址

2.集群初始化遇到問題時,用該命令進行清理:sudo kubeadm reset

需要注意的是初始化之後有一系列的建立、拷貝admin.conf檔案到$home/.kube/下的操作,而reset操作並不會清理這個目錄,所以無比要手動刪除,否則之後的操作會報錯「unable to connect to the server: x509: certificate signed by unknown authority」。

the connection to the server raw.githubusercontent.com was refused - did you specify the right host or port?

the connection to the server localhost:8080 was refused - did you specify the right host or port?

networkplugin cni failed to set up pod 「coredns-9d85f5447-2j4t8_kube-system」 network: open /run/flannel/subnet.env: no such file or directory

遇到該問題是在獲取命名空間中的全部pod時出現的,主要原因是coredns對應的pod一直沒有running,針對這個問題有以下幾種解決辦法:

(1)檢視指定路徑下是否存在subnet.env檔案

/run/flannel/subnet.env的內容:

flannel_network=10.244.0.0/16

flannel_subnet=10.224.0.1/24

flannel_mtu=1450

flannel_ipmasq=true

(2)coredns pod的狀態顯示為「crashloopbackoff」

這個問題在報錯中給出了官方的解決辦法,造成這一問題的主要原因在於resolv.conf檔案中的nameserver設定為了127.0.0.1,指向了自身,導致出現了環路,而k8s環境中的某種機制檢測到了這種環路,所以不停的重啟該pod。解決辦法有兩種:

(i)sudo情況下修改resolv.conf檔案,將指向自身(127開頭)的nameserver一行注釋掉,新增8.8.8.8或114.114.114.114.(需要注意的是我的系統中resolv.conf檔案存在多個,而etc目錄下的resolv.conf連線到了run/resolvconf/resolv.conf,所以需要修改根源的檔案內容,注意注意!),然後重啟kubelet服務,

(ii)直接暴力刪除coredns出錯的節點,系統會自動重建該節點,如果進行了上述操作沒有反應的話可以嘗試這一招。

造成這一問題的原因在於:我在集群初始化之後修改了hostname(這一操作應當放在配置環境的開頭,否則原來可以running的pod變成了pending,錯誤日誌顯示找不到修改後的hostname),解決辦法就是kubeadm reset,然後重新操作。

7.[kubelet] downloading configuration for the kubelet from the 「kubelet-config-1.11」 configmap in the kube-system namespace configmaps 「kubelet-config-1.11」 is forbidden: user 「system:bootstrap:7df77e」 cannot get configmaps in the namespace "kube-system

這個錯誤出現在 在從節點上執行join命令加入master節點的時候,造成這一錯誤的原因在於master節點與「士兵」節點node的kubeadm,kubelet,kubectl或者docker版本不一致。在這種集群部署的過程中,版本還是乙個非常重要的地方,應當時刻注意版本資訊。解決辦法就是將所有相關的元件都解除安裝,然後apt-get install時指定為master節點所採用的版本。

8.節點新增成功,但狀態顯示notready

出現這一情況時,在從節點上執行 journalctl -f -u kubelet 檢視 kubelet日誌,提示notready的原因是

container runtime network not ready: networkready=false reason:networkpluginnotready message:docker: network plugin is not ready: cni config uninitialized」,造成這一問題的原因沒有了解清楚,只是照做了它的操作,執行命令 docker images|grep flannel,之後再在master節點上get nodes 就顯示ready了。

新手入門,從來沒有任何的部署經驗,想要了解k8s的機制,最好的方法還是自己部署一遍,遇到錯誤變查邊學對於了解大體的框架還是有很大幫助的。水平有限,歡迎指導。

【注意】最開始部署k8s完全是為了學習kubeflow,現在發現教程裡的乙個問題在於k8s版本過高,導致在該版本上配置kubeflow1.0不確定有沒有問題,在利用apt-get 安裝時,update之後的安裝自動安裝的是最新版本的docker和k8s,所以務必要自己指定安裝的版本,以免部署之後發現不適配!!!!!!!!!!!!!!!

K8S部署之VMWare網路拓撲踩坑

目錄知乎上最近發現一篇好文 k8s 01 基於ubuntu 20.04部署1.23版k8s集群,想著之前 k8s 部署一直不成功,那麼就照著這篇文章中說的試一試。結果在實驗時遇到了 vmware 虛擬網絡卡和虛擬網路的坑,經過仔細研究和查詢資料終於大致得到解決,所以就通過這篇文章記錄一下,給自己也是...

k8s問題整理 安裝helm踩坑

提示找不到請求的資源 error error installing the server could not find the requested resource原因是k8s高版本加入了service account的概念,這裡可以通過下面的方式配置service account,再init即可成...

k8s使用 ceph rbd 模式 踩坑

建立pod時,kubelet需要使用rbd命令去檢測和掛載pv對應的ceph image,所以要在所有的worker節點安裝ceph客戶端ceph common。將ceph的ceph.client.admin.keyring和ceph.conf檔案拷貝到master的 etc ceph目錄下 安裝失...