1. 程式人生 > >使用kubeadm部署kubernetes叢集

使用kubeadm部署kubernetes叢集

一、安裝環境準備

1、安裝環境: centos7.5,一個master節點,兩個node節點

CentOS Linux release 7.5.1804 (Core)

2、設定/etc/hosts檔案的IP和主機名對映

10.20.0.14 k8smaster
10.20.0.15 k8snode1
10.20.0.16 k8snode2

二、總體安裝

以下安裝步驟若未指明,則都為在master節點的安裝

1、配置docker和k8s倉庫(/etc/yum.repo.d)

新建kubernetes.repo,編輯內容

[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/   #這裡使用的是國內阿里雲映象
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1

2、docker倉庫可直接在/etc/yum.repo.d目錄下通過

3、執行yum install docker kubelet-1.11.1 kubeadm-1.11.1 kubectl-1.11.1

注1:k8s這三個相關應用後面加入了-1.11.1,指明瞭安裝版本,若需要安裝最新版,則不需要加-1.11.1,但k8s版本更新較快,最新版可能不穩定且出問題後網上資料較少排查困難,因此不建議安裝最新版

然後手動匯入兩個金鑰檔案rpm --import yum-key.gpg  rpm --import rpm-package-key.gpg

三、docker相關安裝

4、為了使docker能正常訪問bridge-nf-call-iptables ,需要把如下兩個檔案內容修改為1

/proc/sys/net/bridge/bridge-nf-call-ip6tables

/proc/sys/net/bridge/bridge-nf-call-iptables

若這兩個檔案原來的值都為0,則參考如下教程修改https://blog.csdn.net/xypds2010/article/details/52212323,否則繼續

5、啟動docker並設定docker自啟動

systemctl start docker
systemctl enable docker

四、kubelet相關安裝

6、設定kubelet

1)rpm -ql kubelet 檢視kubelet安裝了哪些檔案

/etc/kubernetes/manifests
/etc/sysconfig/kubelet
/etc/systemd/system/kubelet.service
/usr/bin/kubelet

2)檢視配置檔案:cat /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS=

預設引數為空,可以先不用理會,後續有需要再修改

3)設定kubelet開機自啟動:

systemctl enable kubelet

五、使用kubeadm完成叢集初始化

7、在master節點初始化叢集

1)kubeadm init --help檢視init相關命令幫助

2)vim /etc/sysconfig/kubelet修改配置選項,忽略swap

3)KUBELET_EXTRA_ARGS="--fail-swap-on=false"

4)初始化

kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

5)如拉取映象失敗,則按如下方式處理

images=(kube-proxy-amd64:v1.11.1 kube-scheduler-amd64:v1.11.1 kube-controller-manager-amd64:v1.11.1 kube-apiserver-amd64:v1.11.1etcd-amd64:3.2.18 pause-amd64:3.1)
for imageName in ${images[@]} ; do
  docker pull mirrorgooglecontainers/$imageName  
  docker tag mirrorgooglecontainers/$imageName k8s.gcr.io/$imageName  
  docker rmi mirrorgooglecontainers/$imageName
done

該命令為從mirrorgooglecontainers倉庫拉取images裡指定的映象,並重命名tag,然後刪除原來的映象

由於映象倉庫國內無法訪問,因此一般都拉取失敗,此時就需要在本地先pull映象,然後用docker tag命令更改映象標籤

初始化完成之後提示成功

6)同時可以看到一條加入當前叢集的命令,該命令暫時不要執行,後續在node節點部署完之後再在node節點上安裝

7)使用kubectl get cs(cs為componentstatus簡寫)

8)使用kubectl get nodes檢視叢集節點,看到master節點處於NotReady狀態,這是因為叢集網路組建flannel並未安裝

9)到GitHub上搜索coreos/flannel倉庫,readme檔案裡可以看到如下安裝命令

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

執行該命令會自動拉去kube-proxy和kube-flannel映象,稍等片刻重新檢視節點狀態即為Ready狀態

10)同時使用kubectl get pods -n kube-system檢視組建狀態,-n後的引數指定了名稱空間,status為running代表無誤

六、在各node節點安裝docker和kubelet、kubeadm、kubectl工具

8、至此,master節點部署已經完成,接下需要做的就是在各node節點安裝dockers和kubelet、kubeadm、kubectl,然後執行kubeadm join那條命令將節點加入叢集

9、分別在node1和node2節點上重複上文一到三的安裝步驟(相關配置檔案可以直接用scp拷貝到兩個節點)

10、然後同樣用vim /etc/sysconfig/kubelet命令修改kubelet配置,修改內容為

KUBELET_EXTRA_ARGS="--fail-swap-on=false"

11、執行加入叢集的命令,需要新增--ignore-preflight-errors=Swap引數

kubeadm join 10.20.0.14:6443 --token 6dn3ug.44dcfvlnyt5orq63 --discovery-token-ca-cert-hash sha256:35717f83b75e9c3d580e46e1037d8bcbd43ec733c197d963eaf2f8a9f98a79ba  --ignore-preflight-errors=Swap

12、tomg同樣由於映象被牆的,此處加入叢集會失敗,使用kubectl get pods -n kube-system -o wide命令會看到有兩個pod一直在init和creating

13、此時使用kubectl describe pod kube-flannel-ds-amd64-ddtnx -n kube-system檢視錯誤資訊,可以看到還是因為映象拉取失敗的問題,因此將flannel、proxy和pause三個映象使用docker save和docker load命令從master拷貝到node1和node2上,這樣kubeadm就會從本地直接使用這些映象,避免了拉取失敗的問題

14、當兩個節點都加入集群后,使用kubectl get node命令檢視叢集節點是否就緒

使用kubectl get pods -n kube-system -o wide檢視pod狀態

當所有節點都為ready狀態且pod可以running起來就代表叢集可以正常運轉了

七、總結

       使用kubeadm工具可以大大簡化k8s部署流程,避免初學者因部署問題而望而卻步,主要的坑就是kubeadm指定的倉庫無法訪問,因此先在本地拉取然後再建立pod資源,就可以避免拉取映象失敗的問題