Labels讓用戶可以隨心所欲地組織自己的資源。 Annotations讓用戶可以給資源添加定制化的信息以充分使用自己的工作流画髓,提供一種簡(jiǎn)單的管理工具平委。
API對(duì)象是K8s集群中的管理操作單元。K8s集群系統(tǒng)每支持一項(xiàng)新功能肉微,引入一項(xiàng)新技術(shù)蜡塌,一定會(huì)新引入對(duì)應(yīng)的API對(duì)象,支持對(duì)該功能的管理操作村象。例如副本集Replica Set對(duì)應(yīng)的API對(duì)象是RS攒至。
每個(gè)API對(duì)象都有3大類屬性:元數(shù)據(jù)metadata、規(guī)范spec和狀態(tài)status库菲。
最重要的也是最基礎(chǔ)的是微服務(wù)Pod志膀。
目前K8s中的業(yè)務(wù)主要可以分為長(zhǎng)期伺服型(long-running)、批處理型(batch)烫止、節(jié)點(diǎn)后臺(tái)支撐型(node-daemon)和有狀態(tài)應(yīng)用型(stateful application);分別對(duì)應(yīng)的小機(jī)器人控制器為Deployment戳稽、Job馆蠕、DaemonSet和PetSet,本文后面會(huì)一一介紹惊奇。
RC(Replication Controller)是K8s集群中最早的保證Pod高可用的API對(duì)象互躬。
RS(Replica Set)是新一代RC,提供同樣的高可用能力颂郎,區(qū)別主要在于RS后來居上吼渡,能支持更多種類的匹配模式。
部署(Deployment)表示用戶對(duì)K8s集群的一次更新操作乓序。部署是一個(gè)比RS應(yīng)用模式更廣的API對(duì)象寺酪,可以是創(chuàng)建一個(gè)新的服務(wù),更新一個(gè)新的服務(wù)寄雀,也可以是滾動(dòng)升級(jí)一個(gè)服務(wù)。
RC抬纸、RS和Deployment只是保證了支撐服務(wù)的微服務(wù)Pod的數(shù)量咙俩,但是沒有解決如何訪問這些服務(wù)的問題。每個(gè)Service會(huì)對(duì)應(yīng)一個(gè)k8s集群內(nèi)部有效的虛擬IP湿故,集群內(nèi)部通過虛擬IP訪問一個(gè)服務(wù)阿趁。
Kube-proxy是K8s集群內(nèi)部的負(fù)載均衡器。
Job是K8s用來控制批處理型任務(wù)的API對(duì)象坛猪。批處理業(yè)務(wù)與長(zhǎng)期伺服業(yè)務(wù)的主要區(qū)別是批處理業(yè)務(wù)的運(yùn)行有頭有尾脖阵,而長(zhǎng)期伺服業(yè)務(wù)在用戶不停止的情況下永遠(yuǎn)運(yùn)行。
后臺(tái)支撐服務(wù)集(DaemonSet)墅茉,核心關(guān)注點(diǎn)在K8s集群中的節(jié)點(diǎn)(物理機(jī)或虛擬機(jī))命黔,要保證每個(gè)節(jié)點(diǎn)上都有一個(gè)此類Pod運(yùn)行呜呐。
節(jié)點(diǎn)可能是所有集群節(jié)點(diǎn)也可能是通過nodeSelector選定的一些特定節(jié)點(diǎn)。典型的后臺(tái)支撐型服務(wù)包括悍募,存儲(chǔ)蘑辑,日志和監(jiān)控等在每個(gè)節(jié)點(diǎn)上支持K8s集群運(yùn)行的服務(wù)。
有狀態(tài)服務(wù)集(PetSet)坠宴,在云原生應(yīng)用的體系里洋魂,有下面兩組近義詞;第一組是無狀態(tài)(stateless)喜鼓、牲畜(cattle)副砍、無名(nameless)、可丟棄(disposable)庄岖;第二組是有狀態(tài)(stateful)豁翎、寵物(pet)、有名(having name)隅忿、不可丟棄(non-disposable)心剥。
RC和RS主要是控制提供無狀態(tài)服務(wù)的,其所控制的Pod的名字是隨機(jī)設(shè)置的硼控,重要的只是Pod總數(shù)刘陶;而PetSet是用來控制有狀態(tài)服務(wù),PetSet中的每個(gè)Pod的名字都是事先確定的牢撼,不能更改匙隔。
適合于PetSet的業(yè)務(wù)包括數(shù)據(jù)庫服務(wù)MySQL和PostgreSQL,集群化管理服務(wù)Zookeeper熏版、etcd等有狀態(tài)服務(wù)纷责。
PetSet做的只是將確定的Pod與確定的存儲(chǔ)關(guān)聯(lián)起來保證狀態(tài)的連續(xù)性。
集群聯(lián)邦(Federation)
在云計(jì)算環(huán)境中撼短,服務(wù)的作用距離范圍從近到遠(yuǎn)一般可以有:同主機(jī)(Host再膳,Node)、跨主機(jī)同可用區(qū)(Available Zone)曲横、跨可用區(qū)同地區(qū)(Region)喂柒、跨地區(qū)同服務(wù)商(Cloud Service Provider)、跨云平臺(tái)禾嫉。K8s的設(shè)計(jì)定位是單一集群在同一個(gè)地域內(nèi)灾杰,因?yàn)橥粋€(gè)地區(qū)的網(wǎng)絡(luò)性能才能滿足K8s的調(diào)度和計(jì)算存儲(chǔ)連接要求。而聯(lián)合集群服務(wù)就是為提供跨Region跨服務(wù)商K8s集群服務(wù)而設(shè)計(jì)的熙参。
存儲(chǔ)卷(Volume)
K8s集群中的存儲(chǔ)卷跟Docker的存儲(chǔ)卷有些類似艳吠,只不過Docker的存儲(chǔ)卷作用范圍為一個(gè)容器,而K8s的存儲(chǔ)卷的生命周期和作用范圍是一個(gè)Pod孽椰。每個(gè)Pod中聲明的存儲(chǔ)卷由Pod中的所有容器共享昭娩。使得存儲(chǔ)的使用者可以忽略后臺(tái)的實(shí)際存儲(chǔ)技術(shù)(例如AWS凛篙,Google或GlusterFS和Ceph),而將有關(guān)存儲(chǔ)實(shí)際技術(shù)的配置交給存儲(chǔ)管理員通過Persistent Volume來配置栏渺。
持久存儲(chǔ)卷(Persistent Volume呛梆,PV)和持久存儲(chǔ)卷聲明(Persistent Volume Claim,PVC)
PV和PVC使得K8s集群具備了存儲(chǔ)的邏輯抽象能力迈嘹。
節(jié)點(diǎn)(Node)
不論是物理機(jī)還是虛擬機(jī)削彬,工作主機(jī)的統(tǒng)一特征是上面要運(yùn)行kubelet管理節(jié)點(diǎn)上運(yùn)行的容器全庸。
密鑰對(duì)象(Secret)
Secret是用來保存和傳遞密碼秀仲、密鑰、認(rèn)證憑證這些敏感信息的對(duì)象壶笼。
用戶帳戶(User Account)和服務(wù)帳戶(Service Account)
顧名思義神僵,用戶帳戶為人提供賬戶標(biāo)識(shí),而服務(wù)賬戶為計(jì)算機(jī)進(jìn)程和K8s集群中運(yùn)行的Pod提供賬戶標(biāo)識(shí)覆劈。用戶帳戶和服務(wù)帳戶的一個(gè)區(qū)別是作用范圍保礼;用戶帳戶對(duì)應(yīng)的是人的身份,人的身份與服務(wù)的namespace無關(guān)责语,所以用戶賬戶是跨namespace的炮障;而服務(wù)帳戶對(duì)應(yīng)的是一個(gè)運(yùn)行中程序的身份,與特定namespace是相關(guān)的坤候。
RBAC訪問授權(quán)
K8s在1.3版本中發(fā)布了alpha版的基于角色的訪問控制(Role-based Access Control胁赢,RBAC)的授權(quán)模式。相對(duì)于基于屬性的訪問控制(Attribute-based Access Control白筹,ABAC)智末,RBAC主要是引入了角色(Role)和角色綁定(RoleBinding)的抽象概念。
https://www.kubernetes.org.cn/kubernetes%E8%AE%BE%E8%AE%A1%E7%90%86%E5%BF%B5
http://www.infoq.com/cn/articles/kubernetes-and-cloud-native-applications-part01