Kubernetes又簡(jiǎn)稱K8s集群蹋盆,是一個(gè)基于容器技術(shù)的分布式架構(gòu)管理系統(tǒng)。
什么是容器?——開(kāi)發(fā)寫(xiě)好代碼之后需要在不同的環(huán)境下進(jìn)行部署運(yùn)行友扰,如果運(yùn)行環(huán)境發(fā)生變化,會(huì)導(dǎo)致代碼無(wú)法正常運(yùn)行庶柿。為了避免在底層環(huán)境上耗費(fèi)大量精力村怪,出現(xiàn)了容器技術(shù)。簡(jiǎn)單地說(shuō)浮庐,一個(gè)容器包含了完整的運(yùn)行時(shí)環(huán)境:除了應(yīng)用程序本身之外甚负,這個(gè)應(yīng)用所需的全部依賴、類庫(kù)、其他二進(jìn)制文件腊敲、配置文件等击喂,都統(tǒng)一被打入了一個(gè)稱為容器鏡像的包中。通過(guò)將應(yīng)用程序本身碰辅,和其依賴容器化懂昂,操作系統(tǒng)發(fā)行版本和其他基礎(chǔ)環(huán)境造成的差異,都被抽象掉了没宾。既然容器封裝了所有運(yùn)行應(yīng)用程序所必需的相關(guān)的細(xì)節(jié)凌彬,比如應(yīng)用依賴以及操作系統(tǒng),這就使得鏡像從一個(gè)環(huán)境移植到另外一個(gè)環(huán)境更加靈活循衰。
參見(jiàn)文章http://t.csdn.cn/dlkzZ
Master
集群的"大腦"铲敛,Kubernetes里的Master指的是集群控制節(jié)點(diǎn),負(fù)責(zé)整個(gè)集群的管理和控制会钝,基本上接收Kubernetes的所有控制命令伐蒋,master負(fù)責(zé)具體的執(zhí)行過(guò)程。master相當(dāng)于Kubernetes集群的大腦迁酸,一旦master宕機(jī)或者不可用先鱼,那么對(duì)集群內(nèi)容器應(yīng)用的管理都將失效。
運(yùn)行在master上的組件:
1.Kubernetes API Server(kube-apiserver)
Kubernetes API奸鬓,集群的統(tǒng)一入口焙畔,各組件協(xié)調(diào)者,以HTTP API提供接口服務(wù)串远,Kubernetes里所有資源的增刪改查和監(jiān)聽(tīng)操作都交給APIServer處理后再提交給Etcd存儲(chǔ)宏多。
2.Kubernetes Controller Manager(kube-controller-manager)
Kubernetes里所有資源對(duì)象的自動(dòng)化控制中心,可以理解為資源對(duì)象的大總管
3.kube-scheduler
負(fù)責(zé)資源調(diào)度(Pod調(diào)度)的進(jìn)程
Node
具體"干活"的澡罚,工作負(fù)載節(jié)點(diǎn)伸但,在Kubernetes集群中除了master節(jié)點(diǎn)外的機(jī)器被稱為Node。每個(gè)Node都會(huì)被Master分配一些工作負(fù)載(Docker容器)留搔,當(dāng)某個(gè)Node宕機(jī)時(shí)砌烁,其上的工作負(fù)載會(huì)被Master自動(dòng)轉(zhuǎn)移到其他Node節(jié)點(diǎn)上。
運(yùn)行在Node上的組件:
kubelet
kubelet是Master在Node節(jié)點(diǎn)上的Agent催式,管理本機(jī)運(yùn)行容器的生命周期函喉,負(fù)責(zé)Pod對(duì)應(yīng)容器的創(chuàng)建、啟停等任務(wù)荣月。同時(shí)與Master密切協(xié)作管呵,實(shí)現(xiàn)集群管理的基本功能,獲取Node節(jié)點(diǎn)上Pod的運(yùn)行狀態(tài)等
kube-proxy
在Node節(jié)點(diǎn)上實(shí)現(xiàn)Pod網(wǎng)絡(luò)代理哺窄,實(shí)現(xiàn)Kubernetes Service的通信和負(fù)載均衡機(jī)制的重要組件捐下。
docker
Docker引擎账锹,負(fù)責(zé)本機(jī)的容器的創(chuàng)建和管理工作
Pod(豆莢)
Pod 是一組容器(當(dāng)然也可以只有一個(gè))容器本身就是一個(gè)小盒子了,Pod 相當(dāng)于在容器上又包了一層小盒子坷襟,是‘容器’的容器奸柬。POD是K8S最小可部署的單元,一個(gè)POD就是一個(gè)進(jìn)程婴程。POD內(nèi)部容器網(wǎng)絡(luò)互通廓奕,每個(gè)POD都有獨(dú)立虛擬IP。POD都是部署完整的應(yīng)用或模塊
Replication Controller(復(fù)制控制器)
簡(jiǎn)稱RC,RC是Kubernetes系統(tǒng)中的核心概念之一档叔。它能夠保證Pod持續(xù)運(yùn)行桌粉,創(chuàng)建Pod,監(jiān)控Pod并保證Pod的數(shù)量衙四,在此基礎(chǔ)上提供一些高級(jí)特性铃肯,比如滾動(dòng)升級(jí)和彈性伸縮
Etcd
Etcd是Kubernetes提供默認(rèn)的存儲(chǔ)系統(tǒng),保存所有集群數(shù)據(jù)传蹈,使用時(shí)需要為Etcd數(shù)據(jù)提供備份計(jì)劃押逼。Etcd是一個(gè)高可用的鍵值存儲(chǔ)系統(tǒng)
Service?: pod對(duì)外服務(wù)的統(tǒng)一入口,下面可以維護(hù)著同一類的多個(gè)pod(與外界的橋梁)
Label?: 標(biāo)簽惦界,用于對(duì)pod進(jìn)行分類挑格,同一類的pod會(huì)有相同的標(biāo)簽;
NameSpace:命名空間表锻,用來(lái)隔離pod的運(yùn)行環(huán)境。Namespace 是用來(lái)做一個(gè)集群內(nèi)部的邏輯隔離的乞娄,它包括鑒權(quán)瞬逊、資源管理等。Kubernetes 的每個(gè)資源仪或,比如剛才講的 Pod确镊、Deployment、Service 都屬于一個(gè) Namespace范删,同一個(gè) Namespace 中的資源需要命名的唯一性蕾域,不同的 Namespace 中的資源可以重名。k8s 實(shí)現(xiàn)多租戶的方式到旦,將一個(gè)物理 Cluster 從邏輯上劃分成多個(gè)虛擬 Cluster旨巷,每個(gè)虛擬 Cluster 就是一個(gè) Namespace,不同 Namespace 間的資源完全隔離
參考文章:http://t.csdn.cn/GARRk添忘、http://t.csdn.cn/drTzQ采呐、http://t.csdn.cn/CTecz
K8s集群里的三種IP
Kubernetes集群里有三種IP地址,分別如下:
Node IP:Node節(jié)點(diǎn)的IP地址搁骑,即物理網(wǎng)卡的IP地址斧吐∮止蹋可以是物理機(jī)的IP(也可能是虛擬機(jī)IP)。每個(gè)Service都會(huì)在Node節(jié)點(diǎn)上開(kāi)通一個(gè)端口煤率,外部可以通過(guò)NodeIP:NodePort即可訪問(wèn)Service里的Pod,和我們?cè)L問(wèn)服務(wù)器部署的項(xiàng)目一樣仰冠,IP:端口/項(xiàng)目名
Pod IP:Pod的IP地址,即docker容器的IP地址蝶糯,此為虛擬IP地址洋只。是Docker?Engine根據(jù)docker網(wǎng)橋的IP地址段進(jìn)行分配的,通常是一個(gè)虛擬的二層網(wǎng)絡(luò)
同Service下的pod可以直接根據(jù)PodIP相互通信
不同Service下的pod在集群間pod通信要借助于 cluster ip
pod和集群外通信裳涛,要借助于node ip
Cluster IP:Service的IP地址木张,此為虛擬IP地址。外部網(wǎng)絡(luò)無(wú)法ping通端三,只有kubernetes集群內(nèi)部訪問(wèn)使用舷礼。
參考文章:http://t.csdn.cn/jQhsH