1 概述
k8s的部署常見的工具和環境:
1,iaas(虛拟機):
1.1托管模型,部署在公有雲上,k8saas,目前沒有用于生産環境
1.2vps,和本地實體機搭建一樣,但是這裡網絡是虛拟網絡了
2,實體機:
3.1 建構工具 rancher 2.0
3.2 openshift(paas),紅帽的官方發行版,在這個版本裡有k8s相關的包
還有很多工具可以實作
3,kubeadm部署
4,借助于工具kubespray,kopts部署
5,ansible,基于roles實作部署
k8s的兩種部署方式
1.kubeadm方式部署,k8s可以把k8s自身的大部分應用管控起來,即運作于pod上,但是kubelet和docker不能這樣實作自托管,這兩個主機運作為守護程序,是以,隻需要在所有主機都安裝kubelet和docker,建構k8s叢集。相當于是自舉。etcd也是托管于pod上運作,使用kubeadm進行部署,安裝過程相對簡單。這些主件的pod一般為靜态pod(不屬于k8s管理),也可以運作為自托管的pod.每個主機都要運作flannel這個主件,可以運作為pod。flannel為動态pod
kubeadm的介紹可以檢視如下連結
https://github.com/kubernetes/kubeadm/blob/master/docs/design/design_v1.10.md
通過kubeadm init 完成叢集master節點的初始化,用kubeadm join加入叢集
2:手動配置,主節點和node都主要元件運作為系統級的守護程序,每一步都需要手動處理,如證書和配置過程都是用手動配置的。另外,這種方式在github上有playbook自動化實作
a).master:安裝apiserver,scheduler,controller-manager,etcd,flanel
b).node:安裝kublet,kub-proxy,docker(container engine),flannel,需要多個節點
c).etcd:安裝etcd存儲伺服器,建議配置為高可用
這種方式,可以到https://github.com/kubernetes/kubernetes/blob/master/changelog-1.11.md#downloads-for-v1112下載下傳相關的安裝包,注意,master或者node都是要安裝server端的包。client是互動時使用,也需要安裝,不建議使用這種方式安裝,難度較高
本文僅介紹使用kubeadm實作k8s叢集安裝
2 叢集安裝
最關鍵,伺服器的資源至少為2g記憶體,否則初始化k8s會報錯
預設情況下,會到google托管的站點下載下傳所有的鏡像
使用kubeadm安裝,預設網絡如下:
pod的預設ip 為 10.244.0.0/16
service的預設ip 10.92.0.0/12
節點網絡為:172.20.0.0/16
docker要和k8s結合使用,首先要先通過k8s認證,否則會報警。目前k8s隻認證到17.03.02之前的版本
準備三台主機,分别安裝docker和kubelet,其他服務都是通過自托管實作
安裝步驟如下三步
1.master和node 安裝 kubelet,kubeadm,docker
2.mster:kubeadm init
3.nodes:kubeadm join
第2和3步,相關步驟檢視https://github.com/kubernetes/kubeadm/blob/master/docs/design/design_v1.10.md
所有伺服器需要安裝docker-ce,kubeadm,kubelet,kubectl這四個包
2.1 環境準備
關閉防火牆,selinux,基于主機名通路(dns或者dns),同步時間(時間不一緻,叢集運作異常,如不能啟動),關閉swap分區
三台主機的hosts檔案如下
所有的主機,記憶體至少2g以上
關閉swap分區
關閉防火牆
使用時間伺服器同步所有的k8s叢集伺服器,防止出現異常,centos7使用chrony來同步時間
2.2 安裝docker-ce
使用清華或者阿裡雲的鏡像源
安裝指令
配置docker鏡像加速
阿裡雲上有大量的鏡像,是以建議使用阿裡雲進行加速
由于k8s安裝有很多鏡像國内下載下傳不到,因為編輯如下的配置檔案可以找到需要的鏡像,啟動docker前,在service配置段裡定義環境變量,environment,表示通過這個代理去加載k8s所需的鏡像,加載完成後,可以注釋掉,僅使用國内的加速器來拉取非k8s的鏡像,後續需要使用時,再開啟。
2.3 k8s叢集master節點安裝
k8s叢集節點都要安裝kubeadm,kubelet,kubectl
使用kubeadm官方文檔:https://kubernetes.io/docs/setup/independent/install-kubeadm/
官方的k8s包倉庫為https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86-64,這個站點國内目前打不開,建議使用國内具有k8s包的站點,這裡建議使用阿裡雲站點
https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
編輯k8s倉庫源檔案
然後再安裝即可
安裝軟體
目前,這邊安裝的版本為1.11.2
安裝k8s叢集,kubeadm會讀取/etc/systemd/system/kubelet.service.d/10-kubeadm.conf檔案的配置資訊,更改cgroup的驅動,這裡的驅動要要docker一緻,是以用docker info| grep cgroup指令檢視docker的驅動類型,如這裡查到的結果為 cgroupfs.是以修改kubeadm的配置檔案如下
#添加如下配置
啟動kubelet
注意,此時啟動會出現報錯,檢視/var/log/messages的日志
tail -f /var/log/messages
如果出現如下的報錯
failed to load kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file "/var/lib/kubelet/config.yaml", error: open /var/lib/kubelet/config.yaml: no such file or directory
忽略以上的報錯,設定為開機自啟動即可,因為此時的配置還沒初始化完成,是以此時不能啟動kubelet,等後續kubeadm啟動成功後再檢視
設定開機啟動
初始化kubeadm
檢視kubeadm相關的參數
建議執行 swapoff -a 關閉swap分區,不用配置上述選項
開始初始化
初始化過程的報錯
/var/log/messages日志出現如下的報錯,很有可能是伺服器的資源,尤其是記憶體太小,導緻節點啟動不成功
eviction_manager.go:243] eviction manager: failed to get get summary stats: failed to get node info: node "server74" not found
添加記憶體資源,centos7建議最後為2g記憶體
隻有遇到如下的日志,k8s才是安裝成功
successfully registered node server74
鏡像加載注意事項
初始化過程,預設會到gcr.io/google_containers站點拉取相關k8s的鏡像資訊,目前國内不能進行這些站點的通路,如果網絡不能通路google,則會出現鏡像錄取失敗的報錯
https://console.cloud.google.com/gcr/images/google-containers?project=google-containers
v1.11.2版本初始化需要的鏡像如下
k8s.gcr.io/kube-apiserver-amd64:v1.11.2
k8s.gcr.io/kube-controller-manager-amd64:v1.11.2
k8s.gcr.io/kube-scheduler-amd64:v1.11.2
k8s.gcr.io/kube-proxy-amd64:v1.11.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd-amd64:3.2.18
k8s.gcr.io/coredns:1.1.3
有個技術大牛把gcr.io的鏡像每天同步到https://github.com/anjia0532/gcr.io_mirror這個站點,是以,如果需要用到gcr.io的鏡像,可以執行如下的腳本進行鏡像拉取
執行如下的腳步進行安裝
鏡像拉取成功後再重新執行init指令
初始化指令執行成功後,執行如下的指令,啟動叢集
擷取元件的健康狀态
檢視節點資訊
這裡status未就緒,是因為沒有網絡插件,如flannel.位址https://github.com/coreos/flannel可以檢視flannel在github上的相關項目,執行如下的指令自動安裝flannel
執行完上述指令後,會拉取flannel的鏡像,可用docker image ls檢視flannel鏡像是否成功拉取,如quay.io/coreos/flannel :v0.10.0-amd64
鏡像拉取成功後,一般會把啟動起來。此時預設的node狀态為ready,如下
執行如下的指令,擷取目前系統上所有在運作的pod的狀态,指定名稱空間為kube-system,為系統級的pod,指令如下
執行如下指令,擷取目前系統的名稱空間
2.4 node節點操作
yum倉庫準備好後,在以下的兩個節點上執行安裝如下包,
關閉swap
開啟轉發的參數,根據實際報錯情況開啟,一般有如下三項
安裝完成後
啟動docker-ce
注意,kubelet此時不啟動,因為缺配置檔案,啟動也會報錯,是以不啟動
設定開機啟動,必須的操作
把配置檔案拷貝到要加入該master節點的node上,保持配置一緻。不是必須,建議操作
在server74 和 75 節點上,要執行如下的指令,加入master節點,注意,如下指令token和discovery-token-ca-cert-hash是随機生成,可以用指令查找,比較麻煩,建議安裝成功後,在成功的資訊中,如下的指令需要儲存,後期友善加入主節點。
在node上執行上述指令成功後,資訊如下
注意,可以忽略如下的報錯,隻要看到以上成功的資訊即表搭建成功
到這裡從節點配置完成
2.5 驗證
上述指令執行完成後,從節點同樣需要到網際網路上拉取flannel的鏡像,并啟動,是以需要一點時間,用docker images 檢視是否成功拉取flannel鏡像到本地,等flannel拉取成功啟動後,在master上可以看到node的狀态為ready.
需要在主節點上執行如下的指令,檢視node的資訊
需要檢視pod的詳細資訊,則添加選項-o wide
以上資訊有server74這個從節點的資訊,flannel和proxy都有兩個pod
把server75也加進去後,在master server76上檢視如下資訊
到這裡,k8s通過kubeadm搭建叢集成功