kubernetes中文官網(wǎng):https://kubernetes.io/zh/docs/home/
一 、kubernetes能做什么
- 服務(wù)發(fā)現(xiàn)和負(fù)載均衡
Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開(kāi)容器,如果進(jìn)入容器的流量很大走搁, Kubernetes 可以負(fù)載均衡并分配網(wǎng)絡(luò)流量奥邮,從而使部署穩(wěn)定臭脓。 - 存儲(chǔ)編排
Kubernetes 允許你自動(dòng)掛載你選擇的存儲(chǔ)系統(tǒng),例如本地存儲(chǔ)打颤、公共云提供商等财骨。 - 自動(dòng)部署和回滾
你可以使用 Kubernetes 描述已部署容器的所需狀態(tài),它可以以受控的速率將實(shí)際狀態(tài) 更改為期望狀態(tài)锈津。例如呀酸,你可以自動(dòng)化 Kubernetes 來(lái)為你的部署創(chuàng)建新容器, 刪除現(xiàn)有容器并將它們的所有資源用于新容器琼梆。 - 自動(dòng)完成裝箱計(jì)算
Kubernetes 允許你指定每個(gè)容器所需 CPU 和內(nèi)存(RAM)性誉。 當(dāng)容器指定了資源請(qǐng)求時(shí),Kubernetes 可以做出更好的決策來(lái)管理容器的資源茎杂。 - 自我修復(fù)
Kubernetes 重新啟動(dòng)失敗的容器错览、替換容器、殺死不響應(yīng)用戶定義的 運(yùn)行狀況檢查的容器煌往,并且在準(zhǔn)備好服務(wù)之前不將其通告給客戶端蝗砾。 - 密鑰與配置管理
Kubernetes 允許你存儲(chǔ)和管理敏感信息,例如密碼携冤、OAuth 令牌和 ssh 密鑰。 你可以在不重建容器鏡像的情況下部署和更新密鑰和應(yīng)用程序配置闲勺,也無(wú)需在堆棧配置中暴露密鑰曾棕。
二、 Kubernetes 組件
kubernetes官網(wǎng)架構(gòu)圖
1菜循、API server
API server是 Kubernetes 控制面的組件翘地, 該組件公開(kāi)了 Kubernetes API。 API 服務(wù)器是 Kubernetes 控制面的前端癌幕。
Kubernetes API server的主要實(shí)現(xiàn)是 kube-apiserver衙耕。 kube-apiserver 設(shè)計(jì)上考慮了水平伸縮,也就是說(shuō)勺远,它可通過(guò)部署多個(gè)實(shí)例進(jìn)行伸縮橙喘。 你可以運(yùn)行 kube-apiserver 的多個(gè)實(shí)例,并在這些實(shí)例之間平衡流量胶逢。
2厅瞎、etcd
etcd 是兼具一致性和高可用性的鍵值數(shù)據(jù)庫(kù),可以作為保存 Kubernetes 所有集群數(shù)據(jù)的后臺(tái)數(shù)據(jù)庫(kù)初坠,既有zookeeper的一致性和簸,也有redis的 高可用性。
請(qǐng)參考 etcd 文檔碟刺。
3锁保、kube-scheduler
控制平面組件,負(fù)責(zé)監(jiān)視新創(chuàng)建的、未指定運(yùn)行節(jié)點(diǎn)(node)的 Pods爽柒,選擇節(jié)點(diǎn)讓 Pod 在上面運(yùn)行吴菠。
調(diào)度決策考慮的因素包括單個(gè) Pod 和 Pod 集合的資源需求、硬件/軟件/策略約束霉赡、親和性和反親和性規(guī)范橄务、數(shù)據(jù)位置、工作負(fù)載間的干擾和最后時(shí)限穴亏。
4蜂挪、kube-controller-manager
運(yùn)行控制器進(jìn)程的控制平面組件。
從邏輯上講嗓化,每個(gè)控制器都是一個(gè)單獨(dú)的進(jìn)程棠涮, 但是為了降低復(fù)雜性,它們都被編譯到同一個(gè)可執(zhí)行文件刺覆,并在一個(gè)進(jìn)程中運(yùn)行严肪。
這些控制器包括:
- 節(jié)點(diǎn)控制器(Node Controller): 負(fù)責(zé)在節(jié)點(diǎn)出現(xiàn)故障時(shí)進(jìn)行通知和響應(yīng)
- 任務(wù)控制器(Job controller): 監(jiān)測(cè)代表一次性任務(wù)的 Job 對(duì)象,然后創(chuàng)建 Pods 來(lái)運(yùn)行這些任務(wù)直至完成
- 端點(diǎn)控制器(Endpoints Controller): 填充端點(diǎn)(Endpoints)對(duì)象(即加入 Service 與 Pod)
- 服務(wù)帳戶和令牌控制器(Service Account & Token Controllers): 為新的命名空間創(chuàng)建默認(rèn)帳戶和 API 訪問(wèn)令牌
5谦屑、cloud-controller-manager
云控制器管理器是指嵌入特定云的控制邏輯的 控制平面組件驳糯。 云控制器管理器使得你可以將你的集群連接到云提供商的 API 之上, 并將與該云平臺(tái)交互的組件同與你的集群交互的組件分離開(kāi)來(lái)氢橙。
cloud-controller-manager
僅運(yùn)行特定于云平臺(tái)的控制回路酝枢。 如果你在自己的環(huán)境中運(yùn)行 Kubernetes,或者在本地計(jì)算機(jī)中運(yùn)行學(xué)習(xí)環(huán)境悍手, 所部署的環(huán)境中不需要云控制器管理器帘睦。
與 kube-controller-manager
類似,cloud-controller-manager
將若干邏輯上獨(dú)立的 控制回路組合到同一個(gè)可執(zhí)行文件中坦康,供你以同一進(jìn)程的方式運(yùn)行竣付。 你可以對(duì)其執(zhí)行水平擴(kuò)容(運(yùn)行不止一個(gè)副本)以提升性能或者增強(qiáng)容錯(cuò)能力。
下面的控制器都包含對(duì)云平臺(tái)驅(qū)動(dòng)的依賴:
- 節(jié)點(diǎn)控制器(Node Controller): 用于在節(jié)點(diǎn)終止響應(yīng)后檢查云提供商以確定節(jié)點(diǎn)是否已被刪除
- 路由控制器(Route Controller): 用于在底層云基礎(chǔ)架構(gòu)中設(shè)置路由
- 服務(wù)控制器(Service Controller): 用于創(chuàng)建滞欠、更新和刪除云提供商負(fù)載均衡器
Node 組件
節(jié)點(diǎn)組件在每個(gè)節(jié)點(diǎn)上運(yùn)行古胆,維護(hù)運(yùn)行的 Pod 并提供 Kubernetes 運(yùn)行環(huán)境。
kubelet
一個(gè)在集群中每個(gè)節(jié)點(diǎn)(node)上運(yùn)行的代理筛璧。 它保證容器(containers)都 運(yùn)行在 Pod 中赤兴。
kubelet 接收一組通過(guò)各類機(jī)制提供給它的 PodSpecs,確保這些 PodSpecs 中描述的容器處于運(yùn)行狀態(tài)且健康隧哮。 kubelet 不會(huì)管理不是由 Kubernetes 創(chuàng)建的容器桶良。
kube-proxy
kube-proxy 是集群中每個(gè)節(jié)點(diǎn)上運(yùn)行的網(wǎng)絡(luò)代理, 實(shí)現(xiàn) Kubernetes 服務(wù)(Service) 概念的一部分沮翔。
kube-proxy 維護(hù)節(jié)點(diǎn)上的網(wǎng)絡(luò)規(guī)則陨帆。這些網(wǎng)絡(luò)規(guī)則允許從集群內(nèi)部或外部的網(wǎng)絡(luò)會(huì)話與 Pod 進(jìn)行網(wǎng)絡(luò)通信曲秉。
如果操作系統(tǒng)提供了數(shù)據(jù)包過(guò)濾層并可用的話,kube-proxy 會(huì)通過(guò)它來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)規(guī)則疲牵。否則承二, kube-proxy 僅轉(zhuǎn)發(fā)流量本身。
容器運(yùn)行時(shí)(Container Runtime)
容器運(yùn)行環(huán)境是負(fù)責(zé)運(yùn)行容器的軟件纲爸。
Kubernetes 支持多個(gè)容器運(yùn)行環(huán)境: Docker亥鸠、 containerd、CRI-O 以及任何實(shí)現(xiàn) Kubernetes CRI (容器運(yùn)行環(huán)境接口)识啦。