【智簡聯接,萬物互聯】華為云·云享專家董昕:Serverless和微服務下, IoT的變革蓄勢待發
611
2025-04-02
一 Kubernetes概述
1.1 容器編排工具
docker 官方編排工具
docker compose # 單機編排工具 docker swarm # 將多臺 docker 提供的計算資源整合的接口,隨后 docker compose 編排的時候只需要面向這個整合的接口進行編排就行,無論接口下有多少個主機。 docker mechine # 將一個主機初始化為一個能夠加入 docker swarm 集群中的預置程序
mesos IDC 操作系統
IDC 操作系統,能將一個 IDC 提供的硬件資源,統一調度和分配,它只是一個資源分配工具,非能夠直接托管容器的,所以它提供了以個能夠直接編排框架,marathon。
kubernetes
目前最流行的容器編排工具,市場占有率最高
1.2 kubernetes
kubernetes 是希臘語,翻譯過來是:舵手的意思,它的原型是谷歌內部使用 Borg 集群管理系統,可以說是集結了 Borg 設計思想的精華,并且吸收了 Borg 系統中的經驗和教訓。
它的目標不僅僅是一個編排系統,而是提供一個規范,可以讓你來描述集群的架構,定義服務的最終狀態,Kubernetes可以幫你將系統自動地達到和維持在這個狀態。Kubernetes作為云原生應用的基石,相當于一個云操作系統,其重要性不言而喻。
kubernetes 在 2014 年發布了第一個版本,目前開源并托管在 Github 上。
https://github.com/Kubernetes
目前,AWS、阿里云、微軟云,目前已經原生支持 K8S ,目前已經可以讓用戶直接部署云原生的服務。
有什么優勢
- 基于 Borg 系統,設計成熟,開源、且輕量級,簡單易學、容易理解; - 模塊化,可插拔,支持鉤子,可任意組合,例如:網絡組件 flannel,存儲插件; - 故障發現(存活性探針)和自我修復能力(副本數量)、服務滾動升級(就緒探針)和在線擴容(副本數量)密鑰和配置管理; - 可擴展的資源自動調度機制(多維度的水平自動擴容)、多粒度的資源配額管理能力(資源限制)。
1.3 環境架構
Kubernetes 是一個集群,整合多臺計算機的計算能力,它是一種有中心節點模式的集群,在 K8S 集群中主機分為兩種角色:
Master:集群的管理節點,有一個或者一組節點,一般 3 個足夠了。 nodes:提供計算資源的節點,就是運行容器的節點,可以擴展。
客戶端創建啟動容器的請求交給 Master ,Master 上有一個調度器它能分析各 nodes 節點上的資源狀態,找一個最適合運行用戶容器的節點,并在這個節點上使用 Docker 啟動這個容器,node 節點的 Docker 在啟動容器時候會首先檢查本地有沒有鏡像,如果沒有就從倉庫中 pull 然后運行。
那么倉庫可以運行為容器,所以也可以托管在 Kubernetes 之上,其實 Kubernetes 可以托管自身,即自托管。
ApiServer
kubernetes 接收用戶創建容器等請求的是 Kubernetes Cluster,那么它對外提供服務的接口就是一個 API 接口 ,這個接口需要編程來訪問,或者通過編寫好的客戶端程序來訪問,Kubernetes Master 上有一個組件就是 ApiServer,來接收客端請求,解析客戶端請求,其主要功能包括認證授權、數據校驗以及集群狀態變更,以及負責其他模塊直接的相互通訊和數據交互,只有api server才能操作etcd,其他模塊想要獲取數據需要通過api server提供的接口進行相關數據操作
Scheduler
scheduler watch apiserver,接受系統或用戶請求是運行,如何要運行一個pod,那么 Master 會使用調度器(scheduler)根據請求來分配一個能夠運行容器的 nodes 節點,例如:根據用戶對資源要求,CPU、內存、來評估哪個 nodes 最合適運行。
大概的過程就是:首先是預選,從 nodes 中挑選出符合用戶容器運行要求的,然后在這些預選結果中進行優選,選出最佳的適配 node。
Controller(控制器)
如果運行容器的節點宕機或者容器本身運行出現問題,kubernetes 能夠在其他節點再啟動一個一模一樣的容器,這就是 Kubernetes 提供的自愈能力。
控制器就實現了監控它所負責的每一個容器的健康狀態,一旦發現不健康了,那么控制器會向 Master 發送請求,Master 會再次由調度器挑選出合適的節點再次運行這個容器。
它能持續性探測所管理的容器,一旦不健康,或不符合用戶定義的健康狀態,就會由它發起來請求,來保證容器向用戶希望的健康狀態遷徙。
而 Kubernets 支持眾多的控制器,支持容器健康的控制器只是其中一種。
ControllerManager(制器管理器)
在 Master 內置組件中有一個控制器管理器,它負責監視著每一個控制器,如果控制器不健康無法工作,那么由控制器管理器來確保控制器的健康,由于 Master 有多個,所以具有冗余性。
Pod(原子調度單元,是容器的封裝)
在 Kubernetes 上調度的原子單元,Kubernetes 不直接調度容器,而是 Pod,Pod可以理解為容器的二次封裝,可以由一個或者多個容器組成,多個容器共享同一個網絡名稱空間:NET、UTS、IPC。
同一個 POD 里的容器,還能共享同一個存儲卷,存儲卷可以屬于 POD。
一般一個 POD 只運行一個容器,如果需要在POD放多個容器,那么一般有一個主容器,其他容器是為主容器提供服務的。
Node(工作節點)
提供計算資源的節點,就是運行 Pod 的主機,Kubenetes Cluster 統一管理所有的 node 節點的計算資源,當用戶請求創建資源的時候,可以檢查目前集群還有沒有資源可以運行用戶的容器,這實現了統一調度統一管理的一個平臺。
Label(標簽)
一個由 key = value 組成的標簽,可以為 POD 打上一個標簽。
Selecter(標簽選擇器)
集群中運行的眾多 POD ,前面提到一個控制器可以管理若干個 POD ,那么控制器如何從集群中運行的所有 POD 中挑選出來自己需要管理的 POD 呢?
在創建一個 POD 的時候為 POD 打上一個標簽,讓程序可以通過這個標簽來識別出來這個POD,還可以用來區分一組相同功能的POD,例如:創建四個nginx pod,可以給每個pod加一個 K/V類型的標簽如:app=nginx,將來找出這四個 nginx pod,那么條件就是根據 擁有 key 為 app 的pod 并且 value 為 nginx 來挑出這組 POD。
標簽不是 POD 唯一具有的機制,其他的組件同樣可以有標簽。
1.4 架構和組件
Etcd
用于 Kubernetes 的后端數據存儲,所有集群數據都存儲在此處
Master 節點負責維護集群的目標狀態,上面運行的主控組件有
kube-apiserver # 對外暴露了 Kubernetes API,它是的 Kubernetes 前端控制層,只有 API Server 會與 etcd 通信,其它模塊都必須通過 API Server 訪問集群狀態 kube-controller-manager # 處理集群中常規任務,它是單獨的進程,內部包含多個控制器,例如維護 POD 數量 kube-scheduler # 監視新創建的 Pod 為新創建的 POD 分配合適的 node 節點
Node 節點實際負責實施,也就是運行 POD 的節點,上面運行的組件有
kubelet # 節點自注冊和節點狀態更新,它監測已經分配給自己的 Pod,為 POD 準備卷,下載 POD 所需的 Secret,下載鏡像并運行,進行生命周期探測,上報 POD 和節點狀態 kube-proxy # 通過維護主機上的網絡規則并執行連接轉發,將 Kubernetes 提供的網絡服務代理到每個節點上,實現了Kubernetes服務抽象 docker # 用于運行容器
插件
插件是增強集群功能的 Pod 和 Service,插件對象本身是受命名空間限制的,被創建于 kube-system 命名空間.
DNS
雖然其他插件并不是必需的,但所有 Kubernetes 集群都應該具有Cluster DNS,許多應用依賴于它,為 Kubernetes 服務提供DNS記錄,容器啟動該后會自動將 DNS 服務器包含在 resolv.conf 中.
其他
自己將手記發在:https://github.com/redhatxl/awesome-kubernetes-notes
歡迎一鍵三連。
Docker Kubernetes
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。