K8s
簡介
Kubernetes(k8s)中文文檔 Kubernetes概述_Kubernetes中文社區(qū)
Kubernetes官網(wǎng)
Kubernetes 是一個可移植的、可擴(kuò)展的開源平臺,用于管理容器化的工作負(fù)載和服務(wù),可促進(jìn)聲明式配置和自動化。 Kubernetes 擁有一個龐大且快速增長的生態(tài)系統(tǒng)。Kubernetes 的服務(wù)、支持和工具廣泛可用。
Kubernetes 這個名字源于希臘語,意為“舵手”或“飛行員”。k8s 這個縮寫是因?yàn)?k 和 s 之間有八個字符的關(guān)系。 Google 在 2014 年開源了 Kubernetes 項(xiàng)目。Kubernetes 建立在 Google 在大規(guī)模運(yùn)行生產(chǎn)工作負(fù)載方面擁有十幾年的經(jīng)驗(yàn) 的基礎(chǔ)上,結(jié)合了社區(qū)中最好的想法和實(shí)踐。
-
服務(wù)發(fā)現(xiàn)和負(fù)載均衡
Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器,如果進(jìn)入容器的流量很大, Kubernetes 可以負(fù)載均衡并分配網(wǎng)絡(luò)流量,從而使部署穩(wěn)定。
-
存儲編排
Kubernetes 允許你自動掛載你選擇的存儲系統(tǒng),例如本地存儲、公共云提供商等。
-
自動部署和回滾
你可以使用 Kubernetes 描述已部署容器的所需狀態(tài),它可以以受控的速率將實(shí)際狀態(tài) 更改為期望狀態(tài)。例如,你可以自動化 Kubernetes 來為你的部署創(chuàng)建新容器, 刪除現(xiàn)有容器并將它們的所有資源用于新容器。
-
自動完成裝箱計(jì)算
Kubernetes 允許你指定每個容器所需 CPU 和內(nèi)存(RAM)。 當(dāng)容器指定了資源請求時,Kubernetes 可以做出更好的決策來管理容器的資源。
-
自我修復(fù)
Kubernetes 重新啟動失敗的容器、替換容器、殺死不響應(yīng)用戶定義的 運(yùn)行狀況檢查的容器,并且在準(zhǔn)備好服務(wù)之前不將其通告給客戶端。
-
密鑰與配置管理
Kubernetes 允許你存儲和管理敏感信息,例如密碼、OAuth 令牌和 ssh 密鑰。 你可以在不重建容器鏡像的情況下部署和更新密鑰和應(yīng)用程序配置,也無需在堆棧配置中暴露密鑰。
架構(gòu)原理核心概念
控制平面組件(Control Plane Components)
控制平面的組件對集群做出全局決策(比如調(diào)度),以及檢測和響應(yīng)集群事件(例如,當(dāng)不滿足部署的 replicas
字段時,啟動新的 pod)。
控制平面組件可以在集群中的任何節(jié)點(diǎn)上運(yùn)行。 然而,為了簡單起見,設(shè)置腳本通常會在同一個計(jì)算機(jī)上啟動所有控制平面組件, 并且不會在此計(jì)算機(jī)上運(yùn)行用戶容器。 請參閱使用 kubeadm 構(gòu)建高可用性集群 中關(guān)于多 VM 控制平面設(shè)置的示例。
kube-apiserver
API 服務(wù)器是 Kubernetes 控制面的組件, 該組件公開了 Kubernetes API。 API 服務(wù)器是 Kubernetes 控制面的前端。
Kubernetes API 服務(wù)器的主要實(shí)現(xiàn)是 kube-apiserver。 kube-apiserver 設(shè)計(jì)上考慮了水平伸縮,也就是說,它可通過部署多個實(shí)例進(jìn)行伸縮。 你可以運(yùn)行 kube-apiserver 的多個實(shí)例,并在這些實(shí)例之間平衡流量。
etcd
etcd 是兼具一致性和高可用性的鍵值數(shù)據(jù)庫,可以作為保存 Kubernetes 所有集群數(shù)據(jù)的后臺數(shù)據(jù)庫。
您的 Kubernetes 集群的 etcd 數(shù)據(jù)庫通常需要有個備份計(jì)劃。
要了解 etcd 更深層次的信息,請參考 etcd 文檔。
kube-scheduler
控制平面組件,負(fù)責(zé)監(jiān)視新創(chuàng)建的、未指定運(yùn)行節(jié)點(diǎn)(node)的 Pods,選擇節(jié)點(diǎn)讓 Pod 在上面運(yùn)行。
調(diào)度決策考慮的因素包括單個 Pod 和 Pod 集合的資源需求、硬件/軟件/策略約束、親和性和反親和性規(guī)范、數(shù)據(jù)位置、工作負(fù)載間的干擾和最后時限。
kube-controller-manager
運(yùn)行控制器進(jìn)程的控制平面組件。
從邏輯上講,每個控制器都是一個單獨(dú)的進(jìn)程, 但是為了降低復(fù)雜性,它們都被編譯到同一個可執(zhí)行文件,并在一個進(jìn)程中運(yùn)行。
這些控制器包括:
- 節(jié)點(diǎn)控制器(Node Controller): 負(fù)責(zé)在節(jié)點(diǎn)出現(xiàn)故障時進(jìn)行通知和響應(yīng)
- 任務(wù)控制器(Job controller): 監(jiān)測代表一次性任務(wù)的 Job 對象,然后創(chuàng)建 Pods 來運(yùn)行這些任務(wù)直至完成
- 端點(diǎn)控制器(Endpoints Controller): 填充端點(diǎn)(Endpoints)對象(即加入 Service 與 Pod)
- 服務(wù)帳戶和令牌控制器(Service Account & Token Controllers): 為新的命名空間創(chuàng)建默認(rèn)帳戶和 API 訪問令牌
cloud-controller-manager
云控制器管理器是指嵌入特定云的控制邏輯的 控制平面組件。 云控制器管理器使得你可以將你的集群連接到云提供商的 API 之上, 并將與該云平臺交互的組件同與你的集群交互的組件分離開來。
cloud-controller-manager
僅運(yùn)行特定于云平臺的控制回路。 如果你在自己的環(huán)境中運(yùn)行 Kubernetes,或者在本地計(jì)算機(jī)中運(yùn)行學(xué)習(xí)環(huán)境, 所部署的環(huán)境中不需要云控制器管理器。
與 kube-controller-manager
類似,cloud-controller-manager
將若干邏輯上獨(dú)立的 控制回路組合到同一個可執(zhí)行文件中,供你以同一進(jìn)程的方式運(yùn)行。 你可以對其執(zhí)行水平擴(kuò)容(運(yùn)行不止一個副本)以提升性能或者增強(qiáng)容錯能力。
下面的控制器都包含對云平臺驅(qū)動的依賴:
- 節(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)組件在每個節(jié)點(diǎn)上運(yùn)行,維護(hù)運(yùn)行的 Pod 并提供 Kubernetes 運(yùn)行環(huán)境。
kubelet
一個在集群中每個節(jié)點(diǎn)(node)上運(yùn)行的代理。 它保證容器(containers)都 運(yùn)行在 Pod 中。
kubelet 接收一組通過各類機(jī)制提供給它的 PodSpecs,確保這些 PodSpecs 中描述的容器處于運(yùn)行狀態(tài)且健康。 kubelet 不會管理不是由 Kubernetes 創(chuàng)建的容器。
kube-proxy
kube-proxy 是集群中每個節(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ò)會話與 Pod 進(jìn)行網(wǎng)絡(luò)通信。
如果操作系統(tǒng)提供了數(shù)據(jù)包過濾層并可用的話,kube-proxy 會通過它來實(shí)現(xiàn)網(wǎng)絡(luò)規(guī)則。否則, kube-proxy 僅轉(zhuǎn)發(fā)流量本身。
容器運(yùn)行時(Container Runtime)
容器運(yùn)行環(huán)境是負(fù)責(zé)運(yùn)行容器的軟件。
Kubernetes 支持多個容器運(yùn)行環(huán)境: Docker、 containerd、CRI-O 以及任何實(shí)現(xiàn) Kubernetes CRI (容器運(yùn)行環(huán)境接口)。
插件(Addons)
插件使用 Kubernetes 資源(DaemonSet、 Deployment等)實(shí)現(xiàn)集群功能。 因?yàn)檫@些插件提供集群級別的功能,插件中命名空間域的資源屬于 kube-system
命名空間。
下面描述眾多插件中的幾種。有關(guān)可用插件的完整列表,請參見 插件(Addons)。
DNS
盡管其他插件都并非嚴(yán)格意義上的必需組件,但幾乎所有 Kubernetes 集群都應(yīng)該 有集群 DNS, 因?yàn)楹芏嗍纠夹枰?DNS 服務(wù)。
集群 DNS 是一個 DNS 服務(wù)器,和環(huán)境中的其他 DNS 服務(wù)器一起工作,它為 Kubernetes 服務(wù)提供 DNS 記錄。
Kubernetes 啟動的容器自動將此 DNS 服務(wù)器包含在其 DNS 搜索列表中。
Web 界面(儀表盤)
Dashboard 是 Kubernetes 集群的通用的、基于 Web 的用戶界面。 它使用戶可以管理集群中運(yùn)行的應(yīng)用程序以及集群本身并進(jìn)行故障排除。
容器資源監(jiān)控
容器資源監(jiān)控 將關(guān)于容器的一些常見的時間序列度量值保存到一個集中的數(shù)據(jù)庫中,并提供用于瀏覽這些數(shù)據(jù)的界面。
集群層面日志
集群層面日志 機(jī)制負(fù)責(zé)將容器的日志數(shù)據(jù) 保存到一個集中的日志存儲中,該存儲能夠提供搜索和瀏覽接口。
部署步驟
文章來源:http://www.zghlxwxcb.cn/news/detail-501966.html
未完待續(xù)...
文章來源地址http://www.zghlxwxcb.cn/news/detail-501966.html
到了這里,關(guān)于【系統(tǒng)開發(fā)】尚硅谷 - 谷粒商城項(xiàng)目筆記(十一):K8S的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!