Kubernetes集群部署
一、Kubernetes簡(jiǎn)介
在Docker 作為高級(jí)容器引擎快速發(fā)展的同時(shí),在Google內(nèi)部,容器技術(shù)已經(jīng)應(yīng)用了很多年,Borg系統(tǒng)運(yùn)行管理著成千上萬的容器應(yīng)用。
Kubernetes項(xiàng)目來源于Borg,可以說是集結(jié)了Borg設(shè)計(jì)思想的精華,并且吸收了Borg系統(tǒng)中的經(jīng)驗(yàn)和教訓(xùn)。
Kubernetes對(duì)計(jì)算資源進(jìn)行了更高層次的抽象,通過將容器進(jìn)行細(xì)致的組合,將最終的應(yīng)用服務(wù)交給用戶。
Kubernetes的好處:
-
隱藏資源管理和錯(cuò)誤處理,用戶僅需要關(guān)注應(yīng)用的開發(fā)。
-
服務(wù)高可用、高可靠。
-
可將負(fù)載運(yùn)行在由成千上萬的機(jī)器聯(lián)合而成的集群中。
1.kubernetes設(shè)計(jì)架構(gòu)
Kubernetes集群包含有節(jié)點(diǎn)代理kubelet和Master組件(APIs, scheduler, etc),一切都基于分布式的存儲(chǔ)系統(tǒng)。
Kubernetes主要由以下幾個(gè)核心組件組成:
- etcd:保存了整個(gè)集群的狀態(tài)
- apiserver:提供了資源操作的唯一入口,并提供認(rèn)證、授權(quán)、訪問控制、API注冊(cè)和發(fā)現(xiàn)等機(jī)制
- controller manager:負(fù)責(zé)維護(hù)集群的狀態(tài),比如故障檢測(cè)、自動(dòng)擴(kuò)展、滾動(dòng)更新等
- scheduler:負(fù)責(zé)資源的調(diào)度,按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的機(jī)器上
- kubelet:負(fù)責(zé)維護(hù)容器的生命周期,同時(shí)也負(fù)責(zé)Volume(CVI)和網(wǎng)絡(luò)(CNI)的管理
- Container runtime:負(fù)責(zé)鏡像管理以及Pod和容器的真正運(yùn)行(CRI)
- kube-proxy:負(fù)責(zé)為Service提供cluster內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡
除了核心組件,還有一些推薦的Add-ons:
- kube-dns:負(fù)責(zé)為整個(gè)集群提供DNS服務(wù)
- Ingress Controller:為服務(wù)提供外網(wǎng)入口
- Heapster:提供資源監(jiān)控
- Dashboard:提供GUI
- Federation:提供跨可用區(qū)的集群
- Fluentd-elasticsearch:提供集群日志采集、存儲(chǔ)與查詢
Kubernetes設(shè)計(jì)理念和功能其實(shí)就是一個(gè)類似Linux的分層架構(gòu)
核心層:Kubernetes最核心的功能,對(duì)外提供API構(gòu)建高層的應(yīng)用,對(duì)內(nèi)提供插件式應(yīng)用執(zhí)行環(huán)境
應(yīng)用層:部署(無狀態(tài)應(yīng)用、有狀態(tài)應(yīng)用、批處理任務(wù)、集群應(yīng)用等)和路由(服務(wù)發(fā)現(xiàn)、DNS解析等)
管理層:系統(tǒng)度量(如基礎(chǔ)設(shè)施、容器和網(wǎng)絡(luò)的度量),自動(dòng)化(如自動(dòng)擴(kuò)展、動(dòng)態(tài)Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
接口層:kubectl命令行工具、客戶端SDK以及集群聯(lián)邦
生態(tài)系統(tǒng):在接口層之上的龐大容器集群管理調(diào)度的生態(tài)系統(tǒng),可以劃分為兩個(gè)范疇
- Kubernetes外部:日志、監(jiān)控、配置管理、CI、CD、Workflow、FaaS、OTS應(yīng)用、ChatOps等
- Kubernetes內(nèi)部:CRI、CNI、CVI、鏡像倉庫、Cloud Provider、集群自身的配置和管理等
二、Kubernetes部署
參考官網(wǎng)
-
關(guān)閉節(jié)點(diǎn)的selinux和iptables防火墻
-
所有節(jié)點(diǎn)部署docker引擎
-
所有節(jié)點(diǎn)都一樣server2 server3 server4
修改驅(qū)動(dòng)
[root@server2 docker]# vim daemon.json {"registry-mirrors": ["https://reg.westos.org"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2","storage-opts": ["overlay2.override_kernel_check=true"] } [root@server2 docker]# systemctl daemon-reload [root@server2 docker]# systemctl restart docker.service docker info 查看驅(qū)動(dòng)是否變成了systemd形式的
注意: 如果修改完之后重啟失敗,按照以下操作完成再次重啟即可
禁用swap分區(qū)
每個(gè)節(jié)點(diǎn)都需要做
#swapoff -a 注釋掉/etc/fstab文件中的swap定義 防止開機(jī)自啟安裝部署軟件kubeadm
[root@server2 ~]# cd /etc/yum.repos.d/ [root@server2 yum.repos.d]# vim k8s.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0此前如果配置了Centos的源,請(qǐng)先將它禁用,以免下載服務(wù)時(shí)有依賴性的影響。
每個(gè)節(jié)點(diǎn)操作一樣
默認(rèn)從k8s.gcr.io上下載組件鏡像,需要翻墻才可以,所以需要修改鏡像倉庫:
只有管理端需要拉取鏡像
初始化集群
安裝flannel網(wǎng)絡(luò)組件
https://github.com/coreos/flannel
鏈接: kube-flannel.yml 提取碼: s452
如果下載失敗,在網(wǎng)盤自行提取
[root@server2 ~]# kubectl get pod --namespace kube-system
加入網(wǎng)絡(luò)插件之后,狀態(tài)就會(huì)變成ready
為了方便,我們直接將需要的鏡像打包,發(fā)送給集群其他節(jié)點(diǎn),讓其本地拉取就行
[root@server2 ~]# docker save quay.io/coreos/flannel:v0.12.0-amd64 registry.aliyuncs.com/google_containers/pause:3.2 registry.aliyuncs.com/google_containers/coredns:1.7.0 registry.aliyuncs.com/google_containers/kube-proxy:v1.20.2 > node.tar [root@server2 ~]# scp node.tar server3:~/ [root@server2 ~]# scp node.tar server4:~/ [root@server3 ~]# docker load -i node.tar [root@server4 ~]# docker load -i node.tar在server3 server4執(zhí)行,初始化之后生成的。按照實(shí)際添加。
kubeadm join 172.25.1.2:6443 --token 3jc2ts.iby7sspiql1atfj2 \--discovery-token-ca-cert-hash sha256:e5d5e3660a96182995168d4d35199c7cc451601453fe074957de6bf023e1cecc最后在master端查看節(jié)點(diǎn)狀態(tài)
[root@server2 ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION server2 Ready control-plane,master 27m v1.20.2 server3 Ready <none> 26m v1.20.2 server4 Ready <none> 26m v1.20.2
如果查詢狀態(tài),以及pod 等都顯示正常,到這里集群部署就結(jié)束了。
總結(jié)
以上是生活随笔為你收集整理的Kubernetes集群部署的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python三大流程控制
- 下一篇: k8s之pod管理