天天看點

k8s 之二 kubeadm安裝k8s叢集

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搭建叢集成功

繼續閱讀