參考文章:kubernetes介紹
第一章 kubernetes介紹
本章節(jié)主要介紹應(yīng)用程序在服務(wù)器上部署方式演變以及kubernetes的概念、組件和工作原理。
1.1 應(yīng)用部署方式演變
在部署應(yīng)用程序的方式上,主要經(jīng)歷了三個(gè)時(shí)代:
傳統(tǒng)部署:互聯(lián)網(wǎng)早期,會(huì)直接將應(yīng)用程序部署在物理機(jī)上
優(yōu)點(diǎn):簡(jiǎn)單,不需要其它技術(shù)的參與
缺點(diǎn):不能為應(yīng)用程序定義資源使用邊界,很難合理地分配計(jì)算資源,而且程序之間容易產(chǎn)生影響
虛擬化部署:可以在一臺(tái)物理機(jī)上運(yùn)行多個(gè)虛擬機(jī),每個(gè)虛擬機(jī)都是獨(dú)立的一個(gè)環(huán)境(比如VMware虛擬機(jī))
優(yōu)點(diǎn):程序環(huán)境不會(huì)相互產(chǎn)生影響,提供了一定程度的安全性
缺點(diǎn):增加了操作系統(tǒng),浪費(fèi)了部分資源
容器化部署:與虛擬化類似,但是共享了操作系統(tǒng)(比如docker容器)
優(yōu)點(diǎn):
可以保證每個(gè)容器擁有自己的文件系統(tǒng)、CPU、內(nèi)存、進(jìn)程空間等
運(yùn)行應(yīng)用程序所需要的資源都被容器包裝,并和底層基礎(chǔ)架構(gòu)解耦
容器化的應(yīng)用程序可以跨云服務(wù)商、跨Linux操作系統(tǒng)發(fā)行版進(jìn)行部署
容器化部署方式給帶來(lái)很多的便利,但是也會(huì)出現(xiàn)一些問(wèn)題,比如說(shuō):
- 一個(gè)容器故障停機(jī)了,怎么樣讓另外一個(gè)容器立刻啟動(dòng)去替補(bǔ)停機(jī)的容器
- 當(dāng)并發(fā)訪問(wèn)量變大的時(shí)候,怎么樣做到橫向擴(kuò)展容器數(shù)量
容器編排問(wèn)題——引入k8s
這些容器管理的問(wèn)題統(tǒng)稱為容器編排問(wèn)題,為了解決這些容器編排問(wèn)題,就產(chǎn)生了一些容器編排的軟件:
- Swarm:Docker自己的容器編排工具
- Mesos:Apache的一個(gè)資源統(tǒng)一管控的工具,需要和Marathon結(jié)合使用
- Kubernetes:Google開(kāi)源的的容器編排工具
主流容器編排工具市場(chǎng)占有率:
1.2 kubernetes簡(jiǎn)介
kubernetes,是一個(gè)全新的基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案,是谷歌嚴(yán)格保密十幾年的秘密武器----Borg系統(tǒng)的一個(gè)開(kāi)源版本,于2014年9月發(fā)布第一個(gè)版本,2015年7月發(fā)布第一個(gè)正式版本。
主要功能
kubernetes的本質(zhì)是一組服務(wù)器集群,它可以在集群的每個(gè)節(jié)點(diǎn)上運(yùn)行特定的程序,來(lái)對(duì)節(jié)點(diǎn)中的容器進(jìn)行管理。目的是實(shí)現(xiàn)資源管理的自動(dòng)化,主要提供了如下的主要功能:
自我修復(fù):一旦某一個(gè)容器崩潰,能夠在1秒中左右迅速啟動(dòng)新的容器
彈性伸縮:可以根據(jù)需要,自動(dòng)對(duì)集群中正在運(yùn)行的容器數(shù)量進(jìn)行調(diào)整
服務(wù)發(fā)現(xiàn):服務(wù)可以通過(guò)自動(dòng)發(fā)現(xiàn)的形式找到它所依賴的服務(wù)
負(fù)載均衡:如果一個(gè)服務(wù)起動(dòng)了多個(gè)容器,能夠自動(dòng)實(shí)現(xiàn)請(qǐng)求的負(fù)載均衡
版本回退:如果發(fā)現(xiàn)新發(fā)布的程序版本有問(wèn)題,可以立即回退到原來(lái)的版本
存儲(chǔ)編排:可以根據(jù)容器自身的需求自動(dòng)創(chuàng)建存儲(chǔ)卷
1.3 kubernetes組件
一個(gè)kubernetes集群主要是由控制節(jié)點(diǎn)(master)、工作節(jié)點(diǎn)(node) 構(gòu)成,每個(gè)節(jié)點(diǎn)上都會(huì)安裝不同的組件。
控制節(jié)點(diǎn)(master):集群的控制平面,負(fù)責(zé)集群的決策 ( 管理 )
ApiServer : 資源操作的唯一入口,接收用戶輸入的命令,提供認(rèn)證、授權(quán)、API注冊(cè)和發(fā)現(xiàn)等機(jī)制
Scheduler : 負(fù)責(zé)集群資源調(diào)度,按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的node節(jié)點(diǎn)上
ControllerManager : 負(fù)責(zé)維護(hù)集群的狀態(tài),比如程序部署安排、故障檢測(cè)、自動(dòng)擴(kuò)展、滾動(dòng)更新等
Etcd:負(fù)責(zé)存儲(chǔ)集群中各種資源對(duì)象的信息
工作節(jié)點(diǎn)(node):集群的數(shù)據(jù)平面,負(fù)責(zé)為容器提供運(yùn)行環(huán)境 ( 干活 )
Kubelet: 負(fù)責(zé)維護(hù)容器的生命周期,即通過(guò)控制docker,來(lái)創(chuàng)建、更新、銷(xiāo)毀容器
KubeProxy: 負(fù)責(zé)提供集群內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡
Docker: 負(fù)責(zé)節(jié)點(diǎn)上容器的各種操作
實(shí)例:nginx服務(wù)部署
下面,以部署一個(gè)nginx服務(wù)來(lái)說(shuō)明kubernetes系統(tǒng)各個(gè)組件調(diào)用關(guān)系:
-
首先要明確,一旦kubernetes環(huán)境啟動(dòng)之后,master和node都會(huì)將自身的信息存儲(chǔ)到etcd數(shù)據(jù)庫(kù)中
-
一個(gè)nginx服務(wù)的安裝請(qǐng)求會(huì)首先被發(fā)送到master節(jié)點(diǎn)的apiServer組件
-
apiServer組件會(huì)調(diào)用scheduler組件來(lái)決定到底應(yīng)該把這個(gè)服務(wù)安裝到哪個(gè)node節(jié)點(diǎn)上
在此時(shí),它會(huì)從etcd中讀取各個(gè)node節(jié)點(diǎn)的信息,然后按照一定的算法進(jìn)行選擇,并將結(jié)果告知apiServer
-
apiServer調(diào)用controller-manager去調(diào)度Node節(jié)點(diǎn)安裝nginx服務(wù)
-
kubelet接收到指令后,會(huì)通知docker,然后由docker來(lái)啟動(dòng)一個(gè)nginx的pod
pod是kubernetes的最小操作單元,容器必須跑在pod中至此,
-
一個(gè)nginx服務(wù)就運(yùn)行了,如果需要訪問(wèn)nginx,就需要通過(guò)kube-proxy來(lái)對(duì)pod產(chǎn)生訪問(wèn)的代理
這樣,外界用戶就可以訪問(wèn)集群中的nginx服務(wù)了
1.4 kubernetes概念
Master:集群控制節(jié)點(diǎn),每個(gè)集群需要至少一個(gè)master節(jié)點(diǎn)負(fù)責(zé)集群的管控
Node:工作負(fù)載節(jié)點(diǎn),由master分配容器到這些node工作節(jié)點(diǎn)上,然后node節(jié)點(diǎn)上的docker負(fù)責(zé)容器的運(yùn)行
在Kubernetes(k8s)中,一個(gè)“節(jié)點(diǎn)”(Node)通常是指集群中的一臺(tái)物理或虛擬機(jī)器,也就是宿主機(jī)(Host)。每個(gè)節(jié)點(diǎn)都能夠運(yùn)行由容器化的應(yīng)用程序組成的工作負(fù)載。Kubernetes集群通常由多個(gè)節(jié)點(diǎn)組成,這些節(jié)點(diǎn)被分為兩種類型:
-
Master節(jié)點(diǎn)(也稱為控制平面節(jié)點(diǎn)):Master節(jié)點(diǎn)負(fù)責(zé)管理集群的狀態(tài),包括調(diào)度工作負(fù)載、響應(yīng)集群事件(如擴(kuò)展或滾動(dòng)更新)、以及維護(hù)集群內(nèi)不同組件之間的通信。
-
Worker節(jié)點(diǎn):Worker節(jié)點(diǎn)是部署用戶容器化應(yīng)用程序的地方。每個(gè)Worker節(jié)點(diǎn)上都運(yùn)行著kubelet,它是一個(gè)代理,用于管理該節(jié)點(diǎn)并與Kubernetes的Master節(jié)點(diǎn)通信。Worker節(jié)點(diǎn)還運(yùn)行其他網(wǎng)絡(luò)和存儲(chǔ)相關(guān)的服務(wù),以確保容器化的應(yīng)用程序正常運(yùn)行。
在Kubernetes架構(gòu)中,節(jié)點(diǎn)提供了運(yùn)行容器所需的資源,例如CPU、內(nèi)存、網(wǎng)絡(luò)和存儲(chǔ)資源。每個(gè)節(jié)點(diǎn)都由Master節(jié)點(diǎn)監(jiān)控和管理,確保分配給它的Pods(即一組一個(gè)或多個(gè)容器)正常運(yùn)行。如果某個(gè)節(jié)點(diǎn)發(fā)生故障,Master節(jié)點(diǎn)可以將Pods重新調(diào)度到其他健康的節(jié)點(diǎn)上。
Pod:kubernetes的最小控制單元,容器都是運(yùn)行在pod中的,一個(gè)pod中可以有1個(gè)或者多個(gè)容器
Controller:控制器,通過(guò)它來(lái)實(shí)現(xiàn)對(duì)pod的管理,比如啟動(dòng)pod、停止pod、伸縮pod的數(shù)量等等
Service:pod對(duì)外服務(wù)的統(tǒng)一入口,下面可以維護(hù)同一類的多個(gè)pod(kube-proxy與service區(qū)別)
在 Kubernetes 中,kube-proxy
和 Service
是兩個(gè)相關(guān)但不同的概念,它們共同協(xié)作以提供對(duì)集群內(nèi)部和外部服務(wù)的訪問(wèn)。
-
kube-proxy
kube-proxy
是一個(gè)運(yùn)行在每個(gè) Kubernetes 節(jié)點(diǎn)上的網(wǎng)絡(luò)代理組件。它負(fù)責(zé)維護(hù)節(jié)點(diǎn)上的網(wǎng)絡(luò)規(guī)則,并實(shí)現(xiàn)了部分服務(wù)發(fā)現(xiàn)和負(fù)載均衡功能。kube-proxy
使得來(lái)自 Pod 內(nèi)部或集群外部的網(wǎng)絡(luò)流量能夠通過(guò)服務(wù)的虛擬IP地址(ClusterIP、NodePort、LoadBalancer IP等)被正確地轉(zhuǎn)發(fā)到后端的 Pod。kube-proxy
支持幾種流量轉(zhuǎn)發(fā)模式:- 用戶空間模式(User space mode):這是最早的模式,性能較低,現(xiàn)已不常使用。
- iptables 模式:利用 Linux 的 iptables 規(guī)則直接進(jìn)行包轉(zhuǎn)發(fā),性能較好,是默認(rèn)選項(xiàng)之一。
- IPVS 模式:使用 Linux 的 IP Virtual Server 進(jìn)行更高效的流量轉(zhuǎn)發(fā),適合大規(guī)模集群。
-
Service
Service
是 Kubernetes 提供的一個(gè)抽象概念,它定義了一種訪問(wèn)一組特定 Pod 的方式,無(wú)論這些 Pod 運(yùn)行在哪個(gè)節(jié)點(diǎn)上。每個(gè)Service
都有一個(gè)虛擬的固定IP地址(ClusterIP),以及一個(gè)DNS名稱,使得其他組件可以通過(guò)它訪問(wèn)后端的 Pod,而不需要關(guān)心 Pod 的具體位置。Service
對(duì)象支持多種類型:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-759627.html- ClusterIP:為服務(wù)提供一個(gè)內(nèi)部集群IP,只能從集群內(nèi)部訪問(wèn)。
-
NodePort:在 ClusterIP 的基礎(chǔ)上,為服務(wù)在每個(gè)節(jié)點(diǎn)上打開(kāi)一個(gè)端口,允許從集群外部通過(guò)
<節(jié)點(diǎn)IP>:<NodePort>
訪問(wèn)服務(wù)。 - LoadBalancer:在 NodePort 的基礎(chǔ)上,還會(huì)請(qǐng)求云提供商的負(fù)載均衡器,允許通過(guò)外部的負(fù)載均衡器IP訪問(wèn)服務(wù)。
- ExternalName:通過(guò)返回一個(gè)外部域名而非IP地址來(lái)轉(zhuǎn)發(fā)服務(wù)。
總的來(lái)說(shuō),kube-proxy
是負(fù)責(zé)實(shí)現(xiàn)服務(wù)連接和負(fù)載均衡的網(wǎng)絡(luò)代理,而 Service
是定義如何訪問(wèn)一組 Pod 的高級(jí)抽象。當(dāng)創(chuàng)建一個(gè) Service
時(shí),kube-proxy
將根據(jù) Service
的定義更新節(jié)點(diǎn)上的網(wǎng)絡(luò)規(guī)則,確保流量能夠被正確轉(zhuǎn)發(fā)到后端的 Pod。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-759627.html
Label:標(biāo)簽,用于對(duì)pod進(jìn)行分類,同一類pod會(huì)擁有相同的標(biāo)簽
NameSpace:命名空間,用來(lái)隔離pod的運(yùn)行環(huán)境
到了這里,關(guān)于云原生 黑馬Kubernetes教程(K8S教程)筆記——第一章 kubernetes介紹——Master集群控制節(jié)點(diǎn)、Node工作負(fù)載節(jié)點(diǎn)、Pod控制單元的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!