站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

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

一、部署環(huán)境架構(gòu)以及方式

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

第一種部署方式

1、針對于master節(jié)點

將API Server、etcd、controller-manager、scheduler各組件進行yum install、編譯安裝或者展開安裝的方式手動直接安裝在master節(jié)點主機上,作為系統(tǒng)級守護進程運行。

2、針對于node節(jié)點

將kube-proxy、kubelet、docker、flannel各組件進行yum install或下載已預制好的二進制程序包手動安裝在node節(jié)點主機上,作為系統(tǒng)級守護進程運行。

此部署方式非常的繁瑣,出于安全方面的考慮,各組件之間通信都需要配置CA和證書。

注:此部署方式的缺點就是如果master宕機了,需要手動進行啟動這些系統(tǒng)級的守護進程

第二種部署方式

由于第一種部署方式比較繁瑣,此次我們采用kubeadm工具進行部署,由k8s官方所提供的專門部署集群的管理工具。

每一個節(jié)點主機上包括master節(jié)點都要手動安裝并運行docker,同時也都要手動安裝并運行kubelet。如果將第一個節(jié)點初始化為master節(jié)點,在執(zhí)行初始化這個步驟,其實就是通過kubeadm工具將API Server、etcd、controller-manager、scheduler各組件運行為Pod,也就是跑在docker上。而其他node節(jié)點,因已經(jīng)運行了kubelet、docker組件,剩下的kube-proxy組件也是要運行在Pod上。

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

docker:運行容器的引擎

但是以上master節(jié)點上的Pod都是靜態(tài)Pod(static Pod),并不受k8s自身管理,只是運行為Pod形式而已,也可運行為自托管Pod(本文不作闡述)。

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

而flannel組件也是運行在Pod上的系統(tǒng)級守護進程,起到各node節(jié)點通信作用。以下是flannel簡單介紹:

http://www.hospitaldelafe.com/Linux/2019-08/159869.htm

3、kubeadm的介紹

在GitHub上kubeadm的介紹:

https://github.com/kubernetes/kubeadm

二、Kubernetes集群的部署詳細步驟

(一)簡述部署流程

1、master、nodes節(jié)點要先安裝kubelet、kubeadm和docker

2、在master節(jié)點上運行kubeadm init進程進行初始化集群

3、將各node節(jié)點加入集群中:kubeadm join

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

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

(1)master節(jié)點環(huán)境安裝的準備工作

1、確保集群中的所有節(jié)點,服務(wù)器時間是同步的。設(shè)置詳情如下:

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

2、公司內(nèi)部局域網(wǎng)的服務(wù)器可配置hosts文件進行域名解析,例如馬哥視頻中的:

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

而云服務(wù)器需要另外考慮

注:阿里云服務(wù)器切記不要修改hostname

3、關(guān)閉防火墻服務(wù)

需要注意的是,CentOS Linux 7默認啟動了firewalld(防火墻服務(wù)),而Kubernetes的master與工作node之間會有大量的網(wǎng)絡(luò)通信,安全的做法是在防火墻上配置各組件需要相互通信的端口號。在一個安全的內(nèi)部網(wǎng)絡(luò)環(huán)境中可以關(guān)閉防火墻服務(wù):

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

4、獲取軟件包

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

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

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

圖中紅色框的為源碼包,而kubernetes.tar.gz不是源碼包,但包含所需的所有組件。建議下載官方預制好的,master、node相關(guān)組件分別分開組建的包,點擊CHANGELOG-1.11.md

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

點擊目錄Downloads for v1.11.3跳轉(zhuǎn)到

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

不管是master和node都應(yīng)該安裝服務(wù)端安裝包,像圖中的kubernetes-server-linux-amd64.tar.gz包,如果要進行交互,則需要安裝客戶端

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

如果是Cent OS,建議使用yum install安裝,Google官方已經(jīng)將這些組件制作成了RPM包,這些包需要RPM包生成器動態(tài)生成,所以不能下載到本地使用,只能通過在線倉庫進行安裝。

(2)master節(jié)點環(huán)境的安裝

1、配置yum倉庫

先安裝docker鏡像,去阿里云官方鏡像網(wǎng)站:https://opsx.alibaba.com/mirror找到docker-ce對應(yīng)的linux centos系統(tǒng)repo配置文件,右擊復制鏈接

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

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

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

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

接著再生成Kubernetes的倉庫文件,創(chuàng)建并編輯kubernetes.repo。

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

寫入以下內(nèi)容,baseurl和gpgkey的路徑可在阿里云官方鏡像網(wǎng)站Kubernetes目錄下找到。

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

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

創(chuàng)建完之后,獲取當前系統(tǒng)有效的repolist 

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

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

為了方便在node節(jié)點上安裝,可以將這個兩個配置文件通過scp命令復制到node節(jié)點服務(wù)器上

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

2、安裝各組件

kuberctl:API Server的命令行客戶端

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

可以看到加載到的是哪些版本的包

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

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

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

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

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

發(fā)現(xiàn)還是報同樣的錯,于是順便也把rpm包的key也下載下來進行導入

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

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

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

最后,都安裝成功了。

3、啟動docker

啟動docker后,需要注意的是它會去docker倉庫下載所依賴到的每個鏡像文件,這些鏡像文件暫時獲取不到,建議將相關(guān)鏡像文件通過其他途徑下載到本地然后導入使用,或者推送到本地倉庫。

在這里我們是借用別人此前提供的一種路徑來獲取并下載使用,因此在啟動之前,需要編輯vim /usr/lib/systemd/system/docker.service,在該文件中定義一個環(huán)境變量

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

注意NO_PROXY中間是有下劃線的。然后修改完配置文件之后需要重新加載配置文件,然后重新啟動,否則修改不會生效。

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

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

是否啟動成功用docker info查看一下,可以看出已經(jīng)啟動成功了

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

同時還要確保以下兩個參數(shù)值為1。通過網(wǎng)橋轉(zhuǎn)發(fā)的IP數(shù)據(jù)包會iptables規(guī)則過濾,而這兩個選項將阻止過濾Netfilter是默認情況下啟用了橋梁,如果不阻止會導致嚴重的混亂

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

如果不是1需要修改為1

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

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

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

查看配置文件發(fā)現(xiàn)額外參數(shù)是空的

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

4、設(shè)置kubelet、docker為開機啟動

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

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

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

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

[root@master ~]# systemctl stop kubelet        #將kubelet關(guān)閉

因各個組件還未初始化完成所以不能啟動,將其設(shè)置開機啟動即可

[root@master ~]# systemctl enable kubelet    #將其設(shè)置為開機啟動

[root@master ~]# systemctl enable docker    #將docker設(shè)置為開機啟動

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

5、kubeadm init初始化

查看kubeadm init的幫助信息 

[root@master ~]# kubeadm init –help

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

–apiserver-advertise-address:API服務(wù)器將通知它正在監(jiān)聽的IP地址,監(jiān)聽的地址為“0.0.0.0”,即本機所有IP地址。

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

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

–config:配置文件的路徑。警告:配置文件目前屬于實驗性,還不穩(wěn)定。

–ignore-preflight-errors:將錯誤顯示為警告的檢查列表進行忽略。例如:“IsPrivilegedUser,Swp”。Value ‘all’忽略所有檢查中的錯誤。

–pod-network-cidr:指定pod網(wǎng)絡(luò)的IP地址范圍。如果設(shè)置,控制平面將為每個節(jié)點自動分配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

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

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

如果在初始化中碰到swap不支持的報錯,如下圖

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

需要做兩個設(shè)定

①[root@master ~]# vim /etc/sysconfig/kubelet        #加入以下參數(shù)

KUBELET_EXTRA_ARGS=”–fail-swap-on=false”

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

②[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 查看鏡像都拉取完了

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

其中k8s.gcr.io/pause就是基礎(chǔ)架構(gòu)容器,可以不用啟動,其他容器可以將它當成模板進行網(wǎng)絡(luò)、存儲卷復制。

特別注意:

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

CoreDNS:CoreDNS已經(jīng)經(jīng)歷過三個版本:sky-dns()—–>kube-dns(1.3版本)—–>CoreDNS(1.11版本)

kube-proxy:作為附件運行自托管與k8s之上,來幫忙負責生成service資源相關(guān)的iptables或者ipvs規(guī)則,在1.11版本默認使用ipvs。

6、創(chuàng)建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

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

因不是生產(chǎn)環(huán)境,所以此處直接用root權(quán)限執(zhí)行,第三步更改屬主和屬組也不需要操作

還未執(zhí)行以上三個命令時,查看nodes節(jié)點是會報以下錯誤:

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

執(zhí)行完之后,再查看nodes節(jié)點時,結(jié)果如下:

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

可以看出master的狀態(tài)是未就緒(NotReady),之所以是這種狀態(tài)是因為還缺少一個附件flannel或者Calico,沒有網(wǎng)絡(luò)各Pod是無法通信的。

也可以通過檢查組件的健康狀態(tài)

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

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

7、添加網(wǎng)絡(luò)組件(flannel)

 組件flannel可以通過https://github.com/coreos/flannel中獲取,此處也有介紹怎么安裝

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

如果Kubernetes版本是1.7以上執(zhí)行這行命令即可,在線自動獲取部署清單,然后基于此清單下載鏡像啟動并部署

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

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

看到很多東西被創(chuàng)建是還不夠的,還需要查看flannel是否處于正常啟動并運行的狀態(tài),才算正在的部署完成

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

可以看到flannel鏡像已經(jīng)下載下來了

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

注意:從這步開始我用的版本是v1.11.2,由于代理到期,導致之前的鏡像下載不到重新?lián)Q了途徑下載,所以你們kubeadm init初始化時記得對應(yīng)上版本。

[root@node1 ~]# kubectl get pods –all-namespaces       #查看所有名稱空間的pod,同時可以看到flannel已經(jīng)正常啟動

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

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

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

系統(tǒng)級別的Pod都在名稱空間kube-system中

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

這樣我們的master節(jié)點就部署好了

8、

(3)node節(jié)點環(huán)境的安裝

[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節(jié)點就ok了。

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

可以通過kubectl get pods -n kube-system -o wide查看flannel和proxy有兩個,一個在master節(jié)點上,一個在node01節(jié)點上。

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

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

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
97在线精品视频| 500av导航大全精品| 免费99精品国产自在现线| 久久精品影院永久网址| 伊人久久精品无码二区麻豆 | 精品成人一区二区三区免费视频| 国产精品成年片在线观看| 亚洲日韩国产AV无码无码精品| 亚洲精品国产电影午夜| 十八18禁国产精品www| 国产精品jizz视频| 亚洲精品高清国产一线久久| 99精品全国免费观看视频..| 中文国产成人精品久久96| 精品视频一区二区三区四区五区| 七次郎在线视频精品视频| 精品小视频在线观看| 一区二区三区四区精品| 日韩一级电影在线观看| 日韩中文字幕免费| 日韩高清在线免费观看| 美女内射无套日韩免费播放| 日韩制服国产精品一区| 国产日韩在线视看高清视频手机| 日韩a毛片免费观看| 网友偷拍日韩精品| 国产精品日韩AV在线播放| 精品日韩亚洲AV无码| 日韩美女va毛片在线播放| 精品女同一区二区三区在线| 一本大道无码日韩精品影视| 偷拍精品视频一区二区三区| 亚洲av午夜精品一区二区三区 | 久久国产精品久久久| 国产精品毛片一区二区三区| 久久精品国产亚洲AV麻豆不卡| 无码囯产精品一区二区免费| 99久久er热在这里只有精品99 | 在线观看亚洲AV日韩AV| 日韩精品中文字幕无码专区| 九九九精品视频免费|