如何理解kubernetes概念

一,k8s框架與組件

etcd(持久化存儲)

Etcd是CoreOS開源的一個高可用強一致性的分佈式存儲服務。
Kubernetes使用Etcd作爲數據存儲後端,把需要記錄的pod、rc、service等資源信息存儲在Etcd中


Etcd使用raft算法將一組主機組成集羣,raft 集羣中的每個節點都可以根據集羣運行的情況在三種狀態間切換:
follower、candidate與leader。
leader 和follower 之間保持心跳,如果follower在一段時間內沒有收到來自leader的心跳,就會轉爲candidate,發出新的選主請求。當一個節點獲得了大於一半節點的投票後會轉爲leader節點

apiServer(k8s訪問接口)

API Server提供了k8s各類資源對象(pod,RC,Service等)的增刪改查及watch等HTTP Rest接口,是整個系統的數據總線和數據中心。
在 kubernetes 集羣中,API Server 有着非常重要的角色。API Server負責和etcd交互(其他組件不會直接操作etcd,只有 API Server 這麼做),是整個 kubernetes 集羣的數據中心,所有的交互都是以API Server爲核心的。簡單來說,API Server 提供了以下功能:

1. 整個集羣管理的API接口:所有對集羣進行的查詢和管理都要通過API Server來進行
2. 集羣內部各個模塊之間通信的樞紐:所有模塊之之間並不會之間互相調用,而是通過和 API Server 打交道來完成自己那部分的工作
3. 集羣安全控制:API Server 提供的驗證和授權保證了整個集羣的安全

Controller-manager(管理控制)

Controller Manager 是一個集羣內部的管理控制中心,有一組控制器構成,這組控制器負責集羣內部的 Node、Pod、Endpoint、Namespace、ServiceAccount、ResourceQuota 等等資源的管理。
每個Controller通過API Server提供的接口實時監控整個集羣的每個資源對象的當前狀態,當發生各種故障導致系統狀態發生變化時,會嘗試將系統狀態修 復到“期望狀態”。

scheduler(調度)

負責集羣的資源調度,爲新建的pod分配機器。
根據特定的調度算法將pod調度到指定的工作節點(Node)上,這一過程也叫綁定(bind)。Scheduler的輸入爲需要調度的Pod 和可以被調度的節點(Node)的信息,輸出爲調度算法選擇的Node,並將該pod bind到該Node。

調度過程分爲兩步, predicate以及prioritize
1. predicate篩選滿足條件的node
2. prioritize給剩下node打分,選擇分數最高的node,作爲bind的node

kube-proxy(網絡轉發)

kube-proxy負責service的實現,即實現了k8s內部從pod到service和外部從node port到service的訪問。

集羣中的每個 Node 都有 Kubelet 進程,該進程用於處理 Master 節點下發到本節點的任務,管理 Pod 以及Pod 中的容器。
節點管理:kubelet 啓動時向 API Server 註冊節點信息,並定時向 API Server 彙報節點狀況;
Pod管理:創建/刪除 Pod,下載容器鏡像,用 Pause 創建容器,運行容器,校驗容器是否正確等;

kubelet(任務執行)

容器健康檢查: 通過訪問容器的 HTTP 接口(HTTP 狀態碼作爲判斷依據)來判斷容器是否健康;
cAdvisor 資源監控: cAdvisor 集成到 kubelet 程序的代碼之中,負責查找當前節點的容器,自動採集容器級別的 CPU、內存、文件系統和網絡使用的統計信息。

二,k8s基本原語與操作

namespace(命名空間)

通過將系統內部的對象“分配”到不同的Namespace中,形成邏輯上分組的不同項目、小組或用戶組,便於不同的分組在共享使用整個集羣的資源的同時還能被分別管理,namespace與Resource Quota(配額)一起提供多租戶管理
Kubernetes集羣在啓動後,會創建一個名爲“default”的Namespace,如果不特別指明Namespace,則用戶創建的Pod、RC、Service都被系統創建到“default”的Namespace中。
kube-system是預留的命名空間,系統服務在kube-system下運行可以通過配置RBAC, 每個用戶只能使用自己命名空間下的資源

resource quota(配額)
1. 用於限制命名空間下資源的使用
2. 命名空間下如果沒有配額, 則視爲無限制
3. 可以限制cpu,memory,存儲卷等
4. 目前主要是限制pod的創建

Pod(容器組)

K8S中最小的調度單位
 一個pod只會調度到一臺機器,不會橫跨兩臺機器
 一個pod調度完成之後,不會移動到其他機器
容器組中包含一個或多個容器

• 共享網絡空間
• infra 容器用於維持容器組IP
• 共享存儲卷

pod來源:
• 用戶可以創建pod
• Job,Rs,Deployment,Statefulset產生 

Label&Annotation(標籤&註釋)

所有k8s元素共有屬性
• label
key=value,value是簡單字符串
• 用於資源選擇以及簡單的數據存放

deployment

pod生命週期
Pending (pod中至少還有一個容器還沒有啓動)
Running (pod中所有容器都啓動了,並且至少一個容器還在運行中)
Succeed (pod中所有容器都退出了,並且都成功退出)
Failed (pod中所有容器都退出了,並且至少一個容器失敗退出)
Unknow (無法或者容器狀態)


 

 

 

廣告位

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章