Kubernetes加入新節點,經驗總結

Kubernetes節點加入,經驗總結

Kubernetes主控節點創建後(方法參見上面的連接),就能夠隨時添加更多的工做節點進去構建更大的集羣(minikube設計爲單機開發使用,不能添加工做節點),容器實例能夠在全部符合條件的node上調度運行,這是Kubernetes最爲強大的功能。node

  • 由於容器工做負載能夠在任何節點上運行,因此存儲和計算資源都應該設計爲經過網絡接口訪問,資源、服務和計算任務都是浮動的。
  • kubeadm join 命令能夠添加工做節點。最簡單的方式是經過Token,主控節點上使用kubeadm token命令能夠管理集羣所產生的Token。

一、節點命名規則

K8S自己就是採用一套名稱規則來標記和篩選容器的系統。節點的命名有一個統一規劃,後面管理起來會更方便。局域網中直接會根據機器名列出節點,所以不要使用同名,最好加上數字編號,前面用英文字母順序,便於排序。git

二、節點加入命令

kubeadm init 結束時會自動產生節點加入的命令,最好記下來。github

若是忘了,可使用kubeadm token create --print-join-command 方法從新生成連接Token並打印輸出加入命令。網上搜了很久,終於發現這個方法,不過要1.9之後的版本才支持的,若是不支持這個參數,整個集羣的Kubeadm版本都須要升級到新版本。docker

三、確保Kubelet已啓動

每個node的kubelet都必須進去設置cgroup-drive和swap關閉的啓動選項,跟主控節點同樣(參見上民面安裝Kubernetes的方法),而後須要從新啓動,經過systemctl daemon-reload/systemctl restart kubelet來進行。ubuntu

若是node上顯示添加成功,但Master上顯示不出來,在node機上使用systemctl status kubelet查看下服務的狀態,檢查裏面的各項狀態,單獨處理。服務器

四、確保網絡flannel鏡像可用

quay.io的flannel網絡鏡像下載很慢,最好單獨下載。以下:網絡

docker pull quay.io/coreos/flannel:v0.10.1-amd64

若是用其它網絡驅動,也是同樣,須要確保可用。機器學習

五、網絡flannel依賴DNS鏡像

目前flannel網絡0.10.1的DNS須要依賴kube-dns1.14.8版本,不是Kubernetes1.10.2版本安裝時的1.14.10,須要單獨把容器鏡像下載下來。不然,速度太慢,還覺得死機了。以下:學習

docker pull k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8

六、Docker代理與Registry指向

 Docker的代理也是須要每一個node獨立設的,由於各個節點都是各自向Docker Registry請求下載鏡像,所以必定不要在K8S中使用本地編譯的Docker鏡像,要推送到服務器上,由於其餘節點仍是須要從Registry服務器去下載的,創建本地集羣的統一Registry 服務就很重要了,可使用Harbor 來搭建。spa

七、docker版本必須一致

 docker版本必須一致,不然老是NotReady,而後報CNI錯誤,Network NotReady等。

強制安裝爲18.03.1後變爲Ready。以下方法:

sudo apt install docker-ce=18.03.1~ce-0~ubuntu

可使用 apt-cache madison docker-ce 查看可用的docker版本。

目前最新的18.05有一些問題,而Nvidia-Docker2只支持到18.03.1,本身編譯的18.05的lib-container-runtime運行時出現CNI錯誤。

八、安裝Nvidia-Docker2和k8s GPU插件

若是須要作機器學習,工做節點上也須要安裝全部的Nvidia驅動、cuCuda、cuTensor、Nvidia-Docker2和Nvidia的K8S插件,不論是不是安裝有Nvidia的顯卡。

安裝方法參考:

安裝Kubernetes上的GPU支持軟件:

九、顯卡最好同樣

GPU節點的顯卡型號最好都同樣,不然調度時可能會出問題,輕者出現異常,重者直接致使節點掛掉。如今Kubernetes沒法對GPU內部資源進行識別和調度,基本管理單元是GPU塊數,並且是獨佔。一旦請求GPU的容器得到資源,不管是否在使用,其它的容器將不能同時請求該GPU,除非原來的容器退出。

十、診斷節點狀態

若是節點在kubectl get node能夠看見但狀態一直NotReady,可使用kubectl describe node my-node的方式,查看詳細的node運行狀況。

相關文章
相關標籤/搜索