k8s一 | 基本概念與組件原理

參考資料:從Docker到Kubernetes進階-陽明

一. 什么是kubernetes?

kubernetes是一個可移植的,可擴展的開源平臺恨豁,是Google開源的容器集群管理系統(tǒng)(谷歌內(nèi)部:Borg)围段,用于管理容器化的工作負載和服務(wù),可促進聲明式配置和自動化。

二. 為什么使用kubernetes?

k8s在Docker技術(shù)的基礎(chǔ)上,為容器化的應(yīng)用提供部署運行谬俄、資源調(diào)度、服務(wù)發(fā)現(xiàn)和動態(tài)伸縮等一系列完整功能弃理,提高了大規(guī)模容器集群管理的便捷性溃论。同時Kubernetes是一個完備的分布式系統(tǒng)支撐平臺,具有完備的集群管理能力痘昌,多擴多層次的安全防護和準入機制蔬芥、多租戶應(yīng)用支撐能力、透明的服務(wù)注冊和發(fā)現(xiàn)機制控汉、內(nèi)建智能負載均衡器笔诵、強大的故障發(fā)現(xiàn)和自我修復能力、服務(wù)滾動升級和在線擴容能力姑子、可擴展的資源自動調(diào)度機制以及多粒度的資源配額管理能力乎婿。同時Kubernetes提供完善的管理工具,涵蓋了包括開發(fā)街佑、部署測試谢翎、運維監(jiān)控在內(nèi)的各個環(huán)節(jié)。

三. 集群架構(gòu)及組件

1. 集群架構(gòu)

公眾號: 前行技術(shù)圈

Master
負責管理集群沐旨,部署集群所需組件etcd森逮,apiserver,controller manager磁携,scheduler褒侧。master 協(xié)調(diào)集群中的所有活動,例如調(diào)度應(yīng)用程序谊迄、維護應(yīng)用程序的所需狀態(tài)闷供、擴展應(yīng)用程序和滾動更新。

Node
節(jié)點是 Kubernetes 集群中的工作節(jié)點统诺,用于托管正在運行的應(yīng)用程序歪脏,可以是物理機或虛擬機。 每個工作節(jié)點都有一個 kubeletkube-proxy粮呢,它是管理節(jié)點并與 Kubernetes Master 節(jié)點進行通信的代理婿失。節(jié)點上還應(yīng)具有處理容器操作的容器運行時钞艇,例如 Docker 或 rkt。一個 Kubernetes 工作集群至少有三個節(jié)點豪硅。

2. 集群組件

  • etcd: 鍵值存儲數(shù)據(jù)庫哩照,維護集群內(nèi)各個節(jié)點狀態(tài)的一致性,保存集群的狀態(tài)及配置舟误;
  • apiserver:處理資源操作的請求葡秒,并提供認證姻乓、授權(quán)嵌溢、訪問控制、API 注冊和發(fā)現(xiàn)等機制蹋岩;
  • controller manager: 控制器管理赖草,負責維護集群的狀態(tài),如故障檢測剪个、自動擴展秧骑、滾動更新等;
  • scheduler:調(diào)度器扣囊,負責資源的調(diào)度乎折,按照預(yù)定的調(diào)度策略將 Pod 調(diào)度到相應(yīng)的節(jié)點;
  • kubelet:負責維護容器的生命周期侵歇, Pod 的創(chuàng)建骂澄、啟動、監(jiān)控惕虑、重啟坟冲、銷毀等工作,處理Master節(jié)點下發(fā)到本節(jié)點的任務(wù)溃蔫;
  • Container runtime: 負責鏡像管理以及 Pod 和容器的真正運行(CRI)健提;
  • kube-proxy: 負責為 Service 提供 cluster 內(nèi)部的服務(wù)發(fā)現(xiàn)和負載均衡;
  • Flannel/calico:網(wǎng)絡(luò)插件伟叛, 負責為整個集群提供 IP 服務(wù)私痹;
  • kube-dns/coredns: 負責為整個集群提供 DNS 服務(wù);
  • Ingress Controller: 為服務(wù)提供外網(wǎng)入口统刮;

四. 集群工作流程

集群各組件的通信原理侄榴,以創(chuàng)建Pod為例:


公眾號:前行技術(shù)圈
  1. 使用REST API 創(chuàng)建Pod,即(kubectl create pod)請求apiserver网沾。
  2. apiserver接收到pod創(chuàng)建請求后癞蚕,寫入到Etcd,會存在記錄但不會創(chuàng)建辉哥。
  3. scheduluer 檢測到有未綁定 Node 的 Pod桦山,查找集群中資源充足的Node綁定攒射,并將調(diào)度信息寫入到Etcd。
  4. kubelet 通過監(jiān)測etcd數(shù)據(jù)庫恒水,檢測到有綁定該節(jié)點的Pod調(diào)度過來需要創(chuàng)建会放,調(diào)用container runtime 運行該 Pod。
  5. kubelet 通過 container runtime 取到 Pod 狀態(tài)钉凌,并更新到 apiserver 中咧最。

五. 基本概念

Kubernetes中的絕大部分概念都會被抽象成Kubernetes管理的一種資源對象,下圖為k8s資源對象全景圖

公眾號:前行技術(shù)圈

1. 相關(guān)名詞

NameSpace

Namespace 命名空間是對一組資源和對象的抽象集合御雕, 是 Linux 內(nèi)核用來隔離內(nèi)核資源的方式矢沿。NameSpace做隔離,Cgroups 做限制酸纲,rootfs 做文件系統(tǒng)捣鲸。

Label

Label 標簽以 key/value 的方式附加到資源對象上如Pod, 其他對象可以使用 Label Selector 來選擇一組相同 label 的對象闽坡。

2.編排對象

Pod

Pod是 Kubernetes 項目中最小的 API 資源對象栽惶,Pod可以由一個或多個業(yè)務(wù)容器和一個根容器(Pause容器)組成。一個Pod表示某個應(yīng)用的一個實例疾嗅。Kubernetes 項目的調(diào)度器外厂,是統(tǒng)一按照 Pod 而非容器的資源需求進行計算的,凡是調(diào)度代承、網(wǎng)絡(luò)汁蝶、存儲,以及安全相關(guān)的屬性次泽,基本上是 Pod 級別的穿仪。

可以這樣理解,云計算系統(tǒng)的操作系統(tǒng)是 k8s 意荤,容器就相當于是其進程啊片,而 Pod 則是進程組,容器鏡像就是這個系統(tǒng)里的“.exe”安裝包玖像。Pod 里的所有容器紫谷,它們共享PID、IPC捐寥、Network和UTS namespace笤昨,可以聲明共享同一個 Volume。

ReplicaSet

ReplicaSet是Pod副本的抽象握恳,用于解決Pod的擴容和伸縮瞒窒。

Deployment

Deployment通常用來部署無狀態(tài)應(yīng)用,如Web服務(wù)乡洼, 該服務(wù)運行的實例不會在本地存儲需要持久化的數(shù)據(jù)崇裁,并且多個實例對于同一個請求響應(yīng)的結(jié)果是完全一致的匕坯。在內(nèi)部使用ReplicaSet來實現(xiàn)Pod副本的創(chuàng)建。Deployment確保指定數(shù)量的Pod“副本”在運行拔稳,并且支持回滾和滾動升級葛峻。
創(chuàng)建Deployment時,需要指定 Pod模板和Label標簽巴比。

StatefulSet

StatefulSet通常用來部署有狀態(tài)應(yīng)用术奖,如Mysql服務(wù),服務(wù)運行的實例需要在本地存儲持久化數(shù)據(jù)轻绞,多個實例之間有依賴拓撲關(guān)系采记,比如:主從關(guān)系、主備關(guān)系铲球。如果停止掉依賴中的一個Pod挺庞,就會導致數(shù)據(jù)丟失或者集群崩潰晰赞。他的核心功能就是通過某種方式記錄這些狀態(tài)稼病,然后在 Pod 被重新創(chuàng)建時,能夠為新 Pod 恢復這些狀態(tài)掖鱼。它包含Deployment控制器ReplicaSet的所有功能然走,增加可以處理Pod的啟動順序,為保留每個Pod的狀態(tài)設(shè)置唯一標識戏挡,同時具有以下功能:

  • 穩(wěn)定的芍瑞、唯一的網(wǎng)絡(luò)標識符
  • 穩(wěn)定的、持久化的存儲
  • 有序的褐墅、優(yōu)雅的部署和縮放

DaemonSet

DaemonSet:服務(wù)守護進程拆檬,它的主要作用是在Kubernetes集群的所有節(jié)點中運行我們部署的守護進程,相當于在集群節(jié)點上分別部署Pod副本妥凳,如果有新節(jié)點加入集群竟贯,Daemonset會自動的在該節(jié)點上運行我們需要部署的Pod副本,相反如果有節(jié)點退出集群逝钥,Daemonset也會移除掉部署在舊節(jié)點的Pod副本屑那。

DaemonSet的主要特征:

  • 這個 Pod 運行在 Kubernetes 集群里的每一個節(jié)點(Node)上;
  • 每個節(jié)點上只會運行一個這樣的 Pod 實例艘款;
  • 如果新的節(jié)點加入 Kubernetes 集群后持际,該 Pod 會自動地在新節(jié)點上被創(chuàng)建出來;
  • 而當舊節(jié)點被刪除后哗咆,它上面的 Pod 也相應(yīng)地會被回收掉蜘欲。

DaemonSet常用場景:

  • 網(wǎng)絡(luò)插件的 Agent 組件,如(Flannel晌柬,Calico)需要運行在每一個節(jié)點上姥份,用來處理這個節(jié)點上的容器網(wǎng)絡(luò)呜叫;
  • 存儲插件的 Agent 組件,如(Ceph殿衰,Glusterfs)需要運行在每一個節(jié)點上朱庆,用來在這個節(jié)點上掛載F遠程存儲目錄;
  • 監(jiān)控系統(tǒng)的數(shù)據(jù)收集組件闷祥,如(Prometheus Node Exporter娱颊,Cadvisor)需要運行在每一個節(jié)點上,負責這個節(jié)點上的監(jiān)控信息搜集凯砍。
  • 日志系統(tǒng)的數(shù)據(jù)收集組件箱硕,如(Fluent,Logstash)需要運行在每一個節(jié)點上悟衩,負責這個節(jié)點上的日志信息搜集剧罩。

Job/CronJob

  • Job負責處理任務(wù),即僅執(zhí)行一次的任務(wù)座泳,它保證批處理任務(wù)的一個或多個Pod成功結(jié)束惠昔,解決一些需要進行批量數(shù)據(jù)處理和分析的需求,挑势,比如Jenkins Slave镇防,發(fā)布完代碼后任務(wù)結(jié)束,Pod自動銷毀潮饱;
  • CronJob則就是在Job上加上了時間調(diào)度来氧,用來執(zhí)行一些周期性的任務(wù)。

HPA

Horizontal Pod Autoscaling(Pod水平自動伸縮)香拉,簡稱HPA啦扬。通過監(jiān)控分析RC或者Deployment控制的所有Pod的負載變化情況來確定是否需要調(diào)整Pod的副本數(shù)量,這是HPA最基本的原理凫碌。

3. 其他對象

ConfigMap

ConfigMap:就是為了讓鏡像和配置文件解耦扑毡,以便實現(xiàn)鏡像的可移植性和可復用性,因為一個configMap其實就是一系列配置信息的集合证鸥,將來可直接注入到Pod中的容器使用僚楞,而注入方式有兩種,一種將configMap做為存儲卷枉层,一種是將configMap通過env中configMapKeyRef注入到容器中泉褐;

RBAC

RBAC:基于角色的訪問控制,可以用來給用戶授予對集群操作不同的權(quán)限鸟蜡。

Secret

Secret:用來保存敏感信息膜赃,例如密碼、OAuth 令牌和 ssh key等等揉忘,將這些信息放在Secret中比放在Pod的定義中或者docker鏡像中來說更加安全和靈活跳座。

4. 服務(wù)發(fā)現(xiàn)

Service

Service:是一種抽象的對象端铛,它定義了一組Pod的邏輯集合和一個用于訪問它們的策略,我們可以通過訪問Service來訪問到后端的Pod服務(wù)疲眷,其實這個概念和微服務(wù)非常類似禾蚕。一個Serivce下面包含的Pod集合一般是由Label Selector來決定的。

Ingress

Ingress:就是從 kuberenets 集群外部訪問集群的一個入口狂丝,將外部的請求轉(zhuǎn)發(fā)到集群內(nèi)不同的 Service 上换淆,其實就相當于 nginx、haproxy 等負載均衡代理服務(wù)器几颜,目前選擇有很多: traefik倍试、nginx-controller、Kubernetes Ingress Controller for Kong蛋哭、HAProxy Ingress controller县习。

5. 存儲對象

PV/PVC

  • PV 的全稱是:PersistentVolume(持久化卷),是對底層的共享存儲的一種抽象谆趾,PV 由管理員進行創(chuàng)建和配置躁愿,它和具體的底層的共享存儲技術(shù)的實現(xiàn)方式有關(guān),比如 Ceph棺妓、GlusterFS攘已、NFS 等炮赦,都是通過插件機制完成與共享存儲的對接怜跑。
  • PVC 的全稱是:PersistentVolumeClaim(持久化卷聲明),PVC 是用戶存儲的一種聲明吠勘,PVC 和 Pod 比較類似性芬,Pod 消耗的是節(jié)點,PVC 消耗的是 PV 資源剧防,Pod 可以請求 CPU 和內(nèi)存植锉,而 PVC 可以請求特定的存儲空間和訪問模式。對于真正使用存儲的用戶不需要關(guān)心底層的存儲實現(xiàn)細節(jié)峭拘,只需要直接使用 PVC 即可俊庇。

StorageClass

StorageClass:動態(tài) PV,可以自動幫我們創(chuàng)建 PV鸡挠,不再需要手動創(chuàng)建PV辉饱。

6. 其他概念

Helm

Helm:包管理工具,相當于kubernetes環(huán)境下的yum包管理工具拣展。

CRD

CRD是對 Kubernetes API 的擴展彭沼,Kubernetes 中的每個資源都是一個 API 對象的集合,例如我們在YAML文件里定義的那些spec都是對 Kubernetes 中的資源對象的定義备埃,所有的自定義資源可以跟 Kubernetes 中內(nèi)建的資源一樣使用 kubectl 操作姓惑。

Operator

Operator是由CoreOS公司開發(fā)的褐奴,用來擴展 Kubernetes API,特定的應(yīng)用程序控制器于毙,它用來創(chuàng)建敦冬、配置和管理復雜的有狀態(tài)應(yīng)用,如數(shù)據(jù)庫唯沮、緩存和監(jiān)控系統(tǒng)匪补。Operator基于 Kubernetes 的資源和控制器概念之上構(gòu)建,但同時又包含了應(yīng)用程序特定的一些專業(yè)知識烂翰,比如創(chuàng)建一個數(shù)據(jù)庫的Operator夯缺,則必須對創(chuàng)建的數(shù)據(jù)庫的各種運維方式非常了解,創(chuàng)建Operator的關(guān)鍵是CRD(自定義資源)的設(shè)計甘耿。Operator是將運維人員對軟件操作的知識給代碼化踊兜,同時利用 Kubernetes 強大的抽象來管理大規(guī)模的軟件應(yīng)用。


下篇文章:使用kubeadm快速部署K8S集群
系列文章:深入理解Kuerneters

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末佳恬,一起剝皮案震驚了整個濱河市捏境,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毁葱,老刑警劉巖垫言,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異倾剿,居然都是意外死亡筷频,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門前痘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凛捏,“玉大人,你說我怎么就攤上這事芹缔∨餮ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵最欠,是天一觀的道長示罗。 經(jīng)常有香客問我,道長芝硬,這世上最難降的妖魔是什么蚜点? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮吵取,結(jié)果婚禮上禽额,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好脯倒,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布实辑。 她就那樣靜靜地躺著,像睡著了一般藻丢。 火紅的嫁衣襯著肌膚如雪剪撬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天悠反,我揣著相機與錄音残黑,去河邊找鬼。 笑死斋否,一個胖子當著我的面吹牛梨水,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茵臭,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼疫诽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了旦委?” 一聲冷哼從身側(cè)響起奇徒,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缨硝,沒想到半個月后摩钙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡查辩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年胖笛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宜肉。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡匀钧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谬返,到底是詐尸還是另有隱情,我是刑警寧澤日杈,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布遣铝,位于F島的核電站,受9級特大地震影響莉擒,放射性物質(zhì)發(fā)生泄漏酿炸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一涨冀、第九天 我趴在偏房一處隱蔽的房頂上張望填硕。 院中可真熱鬧,春花似錦、人聲如沸扁眯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姻檀。三九已至命满,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绣版,已是汗流浹背胶台。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杂抽,地道東北人诈唬。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像缩麸,于是被迫代替她去往敵國和親讯榕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容