使用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資源,就可以避免拉取映象失敗的問題