POD
Pod是在K8s集群中運行部署應用或服務的最小單元,它是可以支持多容器的。Pod的設計理念是支持多個容器在一個Pod中共享網絡地址和文件系統,可以通過進程間通信和文件共享這種簡單高效的方式組合完成服務。
Pod是K8s集群中所有業務類型的基礎。
目前K8s中的業務主要可以分為長期伺服型(long-running)、批處理型(batch)、節點后台支撐型(node-daemon)和有狀態應用型(stateful application);分別對應的小機器人控制器為Deployment、Job、DaemonSet和PetSet。
復制控制器(Replication Controller,RC)
RC是K8s集群中最早的保證Pod高可用的API對象。通過監控運行中的Pod來保證集群中運行指定數目的Pod副本。指定的數目可以是多個也可以是1個;少於指定數目,RC就會啟動運行新的Pod副本;多於指定數目,RC就會殺死多余的Pod副本。
副本集(Replica Set,RS)
RS是新一代RC,提供同樣的高可用能力,區別主要在於RS后來居上,能支持更多種類的匹配模式。副本集對象一般不單獨使用,而是作為Deployment的理想狀態參數使用。
部署(Deployment)
部署表示用戶對K8s集群的一次更新操作。部署是一個比RS應用模式更廣的API對象,可以是創建一個新的服務,更新一個新的服務,也可以是滾動升級一個服務。滾動升級一個服務,實際是創建一個新的RS,然后逐漸將新RS中副本數增加到理想狀態,將舊RS中的副本數減小到0的復合操作。
服務(Service)
RC、RS和Deployment只是保證了支撐服務的微服務Pod的數量,但是沒有解決如何訪問這些服務的問題。。一個Pod只是一個運行服務的實例,隨時可能在一個節點上停止,在另一個節點以一個新的IP啟動一個新的Pod,因此不能以確定的IP和端口號提供服務。要穩定地提供服務需要服務發現和負載均衡能力。服務發現完成的工作,是針對客戶端訪問的服務,找到對應的的后端服務實例。
在K8s集群中,客戶端需要訪問的服務就是Service對象。每個Service會對應一個集群內部有效的虛擬IP,集群內部通過虛擬IP訪問一個服務。
在K8s集群中微服務的負載均衡是由Kube-proxy實現的。Kube-proxy是K8s集群內部的負載均衡器。它是一個分布式代理服務器,在K8s的每個節點上都有一個;這一設計體現了它的伸縮性優勢,需要訪問服務的節點越多,提供負載均衡能力的Kube-proxy就越多,高可用節點也隨之增多。
任務(Job)
Job是K8s用來控制批處理型任務的API對象。Job管理的Pod根據用戶的設置把任務成功完成就自動退出了。成功完成的標志根據不同的spec.completions策略而不同。
后台支撐服務集(DaemonSet)
典型的后台支撐型服務包括,存儲,日志和監控等在每個節點上支持K8s集群運行的服務。
有狀態服務集(PetSet)
K8s在1.3版本里發布了Alpha版的PetSet功能。PetSet是用來控制有狀態服務,PetSet中的每個Pod的名字都是事先確定的,不能更改。
PetSet中的Pod,每個Pod掛載自己獨立的存儲,如果一個Pod出現故障,從其他節點啟動一個同樣名字的Pod,要掛載上原來Pod的存儲繼續以它的狀態提供服務。
適合於PetSet的業務包括數據庫服務MySQL和PostgreSQL,集群化管理服務Zookeeper、etcd等有狀態服務。
聯合集群(Federation)
K8s在1.3版本里發布了beta版的Federation功能。K8s的設計定位是單一集群在同一個地域內,因為同一個地區的網絡性能才能滿足K8s的調度和計算存儲連接要求。而聯合集群服務就是為提供跨Region跨服務商K8s集群服務而設計的。
存儲卷(Volume)
K8s集群中的存儲卷跟Docker的存儲卷有些類似,只不過Docker的存儲卷作用范圍為一個容器,而K8s的存儲卷的生命周期和作用范圍是一個Pod。
持久存儲卷(Persistent Volume,PV)和持久存儲卷聲明(Persistent Volume Claim,PVC)
PV和PVC使得K8s集群具備了存儲的邏輯抽象能力,使得在配置Pod的邏輯里可以忽略對實際后台存儲技術的配置,由集群管理者配置。PV和Node是資源的提供者,PVC和Pod是資源的使用者。
節點(Node)
K8s集群中的計算能力由Node提供。是所有Pod運行所在的工作主機,統一特征是上面要運行kubelet管理節點上運行的容器。
密鑰對象(Secret)
Secret是用來保存和傳遞密碼、密鑰、認證憑證這些敏感信息的對象。使用Secret的好處是可以避免把敏感信息明文寫在配置文件里。
用戶帳戶(User Account)和服務帳戶(Service Account)
用戶賬戶是跨namespace的;而服務帳戶對應的是一個運行中程序的身份,與特定namespace是相關的。
命名空間(Namespace)
K8s集群初始有兩個命名空間,分別是默認命名空間default和系統命名空間kube-system,命名空間為K8s集群提供虛擬的隔離作用。
RBAC訪問授權
K8s在1.3版本中發布了alpha版的基於角色的訪問控制(Role-based Access Control,RBAC)的授權模式。