Kubernetes集羣的部署方式及詳細步驟

 

1、部署環境架構以及方式html

第一種部署方式node

一、針對於master節點linux

將API Server、etcd、controller-manager、scheduler各組件進行yum install、編譯安裝或者展開安裝的方式手動直接安裝在master節點主機上,做爲系統級守護進程運行。git

二、針對於node節點github

將kube-proxy、kubelet、docker、flannel各組件進行yum install或下載已預製好的二進制程序包手動安裝在node節點主機上,做爲系統級守護進程運行。docker

此部署方式很是的繁瑣,出於安全方面的考慮,各組件之間通訊都須要配置CA和證書。vim

注:此部署方式的缺點就是若是master宕機了,須要手動進行啓動這些系統級的守護進程centos

第二種部署方式api

因爲第一種部署方式比較繁瑣,這次咱們採用kubeadm工具進行部署,由k8s官方所提供的專門部署集羣的管理工具。安全

每個節點主機上包括master節點都要手動安裝並運行docker,同時也都要手動安裝並運行kubelet。若是將第一個節點初始化爲master節點,在執行初始化這個步驟,其實就是經過kubeadm工具將API Server、etcd、controller-manager、scheduler各組件運行爲Pod,也就是跑在docker上。而其餘node節點,因已經運行了kubelet、docker組件,剩下的kube-proxy組件也是要運行在Pod上。

kubelet:負責能運行Pod化容器的核心組件

docker:運行容器的引擎

可是以上master節點上的Pod都是靜態Pod(static Pod),並不受k8s自身管理,只是運行爲Pod形式而已,也可運行爲自託管Pod(本文不做闡述)。

而flannel組件也是運行在Pod上的系統級守護進程,起到各node節點通訊做用。如下是flannel簡單介紹:

https://blog.csdn.net/xuguokun1986/article/details/53119330

三、kubeadm的介紹

在GitHub上kubeadm的介紹:

https://github.com/kubernetes/kubeadm

2、Kubernetes集羣的部署詳細步驟

(一)簡述部署流程

一、master、nodes節點要先安裝kubelet、kubeadm和docker

二、在master節點上運行kubeadm init進程進行初始化集羣

三、將各node節點加入集羣中:kubeadm join

kubeadm工做原理詳解見:https://github.com/kubernetes/kubeadm/blob/master/docs/design/design_v1.10.md(此文檔介紹的是k8s1.10版本)

(二)部署流程的詳細介紹

(1)master節點環境安裝的準備工做

一、確保集羣中的全部節點,服務器時間是同步的。設置詳情以下:

https://www.cnblogs.com/huhyoung/p/9657253.html

二、公司內部局域網的服務器可配置hosts文件進行域名解析,例如馬哥視頻中的:

而云服務器須要另外考慮

注:阿里雲服務器切記不要修改hostname

三、關閉防火牆服務

須要注意的是,CentOS Linux 7默認啓動了firewalld(防火牆服務),而Kubernetes的master與工做node之間會有大量的網絡通訊,安全的作法是在防火牆上配置各組件須要相互通訊的端口號。在一個安全的內部網絡環境中能夠關閉防火牆服務:

[root@master ~]# systemctl disable firewalld
[root@master ~]# systemctl stop firewalld

四、獲取軟件包

第一種部署方式獲取軟件包

源碼包獲取地址:https://github.com/kubernetes/kubernetes/releases

圖中紅色框的爲源碼包,而kubernetes.tar.gz不是源碼包,但包含所需的全部組件。建議下載官方預製好的,master、node相關組件分別分開組建的包,點擊CHANGELOG-1.11.md

點擊目錄Downloads for v1.11.3跳轉到

不論是master和node都應該安裝服務端安裝包,像圖中的kubernetes-server-linux-amd64.tar.gz包,若是要進行交互,則須要安裝客戶端

第二種部署方式獲取軟件包

若是是Cent OS,建議使用yum install安裝,Google官方已經將這些組件製做成了RPM包,這些包須要RPM包生成器動態生成,因此不能下載到本地使用,只能經過在線倉庫進行安裝。

(2)master節點環境的安裝

一、配置yum倉庫

先安裝docker鏡像,去阿里雲官方鏡像網站:https://opsx.alibaba.com/mirror找到docker-ce對應的linux centos系統repo配置文件,右擊複製連接

而後進入/etc/yum.repos.d目錄,下載到本地。

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

接着再生成Kubernetes的倉庫文件,建立並編輯kubernetes.repo。

[root@master yum.repos.d]# vim kubernetes.repo

寫入如下內容,baseurl和gpgkey的路徑可在阿里雲官方鏡像網站Kubernetes目錄下找到。

 

[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

 

建立完以後,獲取當前系統有效的repolist 

[root@master yum.repos.d]# yum repolist

爲了方便在node節點上安裝,能夠將這個兩個配置文件經過scp命令複製到node節點服務器上

[root@master yum.repos.d]# scp kubernetes.repo docker-ce.repo node1:/etc/yum.repos.d/

二、安裝各組件

kuberctl:API Server的命令行客戶端

[root@master yum.repos.d]# yum install docker-ce kubelet kubeadm kubectl

能夠看到加載到的是哪些版本的包

安裝到cri-tools-1.11.1-0.x86_64包時提示gpgkey沒有安裝

將yum-key.gpg下載到本地進行rpm --import導入

發現仍是報一樣的錯,因而順便也把rpm包的key也下載下來進行導入

wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

最後,都安裝成功了。

三、啓動docker

啓動docker後,須要注意的是它會去docker倉庫下載所依賴到的每一個鏡像文件,這些鏡像文件暫時獲取不到,建議將相關鏡像文件經過其餘途徑下載到本地而後導入使用,或者推送到本地倉庫。

在這裏咱們是借用別人此前提供的一種路徑來獲取並下載使用,所以在啓動以前,須要編輯vim /usr/lib/systemd/system/docker.service,在該文件中定義一個環境變量

注意NO_PROXY中間是有下劃線的。而後修改完配置文件以後須要從新加載配置文件,而後從新啓動,不然修改不會生效。

[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl start docker

是否啓動成功用docker info查看一下,能夠看出已經啓動成功了

同時還要確保如下兩個參數值爲1。經過網橋轉發的IP數據包會iptables規則過濾,而這兩個選項將阻止過濾Netfilter是默認狀況下啓用了橋樑,若是不阻止會致使嚴重的混亂

若是不是1須要修改成1

echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

經過[root@master ~]# rpm -ql kubelet  命令查看都安裝了什麼文件

 

查看配置文件發現額外參數是空的

四、設置kubelet、docker爲開機啓動

[root@master ~]# systemctl start kubelet
[root@master ~]# systemctl status kubelet

這邊沒有明顯的錯誤提示,所以查看日誌[root@master ~]# tail /var/log/messages

[root@master ~]# systemctl stop kubelet        #將kubelet關閉

因各個組件還未初始化完成因此不能啓動,將其設置開機啓動便可

[root@master ~]# systemctl enable kubelet    #將其設置爲開機啓動

[root@master ~]# systemctl enable docker    #將docker設置爲開機啓動

五、kubeadm init初始化

查看kubeadm init的幫助信息 

[root@master ~]# kubeadm init --help

--apiserver-advertise-address:API服務器將通知它正在監聽的IP地址,監聽的地址爲「0.0.0.0」,即本機全部IP地址。

--apiserver-bind-port:API服務器綁定到的端口。(默認:6443)

--cert-dir:加載證書的相關目錄(默認:/etc/kubernetes/pki)

--config:配置文件的路徑。警告:配置文件目前屬於實驗性,還不穩定。

--ignore-preflight-errors:將錯誤顯示爲警告的檢查列表進行忽略。例如:「IsPrivilegedUser,Swp」。Value 'all'忽略全部檢查中的錯誤。

--pod-network-cidr:指定pod網絡的IP地址範圍。若是設置,控制平面將爲每一個節點自動分配CIDRs。

--service-cidr:爲service VIPs使用不一樣的IP地址。(默認「10.96.0.0/12」)

而後咱們指定選項進行初始化:

[root@master ~]# kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

若是在初始化中碰到swap不支持的報錯,以下圖

須要作兩個設定

①[root@master ~]# vim /etc/sysconfig/kubelet        #加入如下參數

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

②[root@master ~]# 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   #在初始化時加入--ignore選項

最後經過[root@master ~]# docker image ls 查看鏡像都拉取完了

其中k8s.gcr.io/pause就是基礎架構容器,能夠不用啓動,其餘容器能夠將它當成模板進行網絡、存儲卷複製。

特別注意:

其中有兩個附件:CoreDNS和kube-proxy

CoreDNS:CoreDNS已經經歷過三個版本:sky-dns()----->kube-dns(1.3版本)----->CoreDNS(1.11版本)

kube-proxy:做爲附件運行自託管與k8s之上,來幫忙負責生成service資源相關的iptables或者ipvs規則,在1.11版本默認使用ipvs。

六、建立kube目錄,添加kubectl配置

建議用普通用戶運行如下三個命令:

mkdir -p $HOME/.kube;

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config;

sudo chown $(id -u):$(id -g) $HOME/.kube/config

因不是生產環境,因此此處直接用root權限執行,第三步更改屬主和屬組也不須要操做

還未執行以上三個命令時,查看nodes節點是會報如下錯誤:

執行完以後,再查看nodes節點時,結果以下:

能夠看出master的狀態是未就緒(NotReady),之因此是這種狀態是由於還缺乏一個附件flannel或者Calico,沒有網絡各Pod是沒法通訊的。

也能夠經過檢查組件的健康狀態

[root@master ~]# kubectl get componentstatus      #componentstatus可簡寫爲cs

七、添加網絡組件(flannel)

 組件flannel能夠經過https://github.com/coreos/flannel中獲取,此處也有介紹怎麼安裝

若是Kubernetes版本是1.7以上執行這行命令便可,在線自動獲取部署清單,而後基於此清單下載鏡像啓動並部署

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

看到不少東西被建立是還不夠的,還須要查看flannel是否處於正常啓動並運行的狀態,纔算正在的部署完成

[root@node1 ~]# docker image ls           #查看flannel鏡像是否有被拉取下來

能夠看到flannel鏡像已經下載下來了

注意:從這步開始我用的版本是v1.11.2,因爲代理到期,致使以前的鏡像下載不到從新換了途徑下載,因此大家kubeadm init初始化時記得對應上版本。

[root@node1 ~]# kubectl get pods --all-namespaces       #查看全部名稱空間的pod,同時能夠看到flannel已經正常啓動

[root@node1 ~]# kubectl get pods -n kube-system          #查看名稱空間爲kube-system的pod

[root@localhost ~]# kubectl get ns    #查看有哪些名稱空間

系統級別的Pod都在名稱空間kube-system中

這樣咱們的master節點就部署好了

八、

(3)node節點環境的安裝

[root@node01 ~]# rpm --import rpm-package-key.gpg

[root@node01 ~]# yum install -y docker-ce kubelet kubeadm

[root@master ~]# scp /usr/lib/systemd/system/docker.service node01:/usr/lib/systemd/system/docker.service

[root@master ~]# scp /etc/sysconfig/kubelet node01://etc/sysconfig/

[root@node01 ~]# systemctl daemon-reload

[root@node01 ~]# systemctl start docker

[root@node01 ~]# systemctl enble docker kubelet

[root@node01 ~]# kubeadm join 172.20.0.70:6443 --token jpy0lt.fxz77am8dgr4r93f --discovery-token-ca-cert-hash sha256:70b67aa60ebb2eef3e3e4f76e5278fc23e6972c1c4e0848d744b93caa6f9b6ec --ignore-preflight-errors=Swap

加入成功以後,等如下鏡像下載完以後這個node節點就ok了。

能夠經過kubectl get pods -n kube-system -o wide查看flannel和proxy有兩個,一個在master節點上,一個在node01節點上。

 

相關文章
相關標籤/搜索