k8s 叢集基本概念
一、概述:
kubernetes是google開源的容器叢集管理系統,提供應用部署、維護、擴充套件機制等功能,利用kubernetes能方便管理跨叢集執行容器化的應用,簡稱:k8s(k與s之間有8個字母)
二、基本概念
Pod:若干相關容器的組合,Pod包含的容器執行在同一host上,這些容器使用相同的網路命令空間、IP地址和埠,相互之間能通過localhost來發現和通訊。另外,這些容器還可共享一塊儲存卷空間。在k8s中建立,排程和管理的最小單位就是Pod,而非容器,Pod通過提供更高層次的抽象,提供了更加靈活的部署和管理模式;
-
- k8s的基本操作單元,一個Pod由一個或多個容器組成,通常pod裡的容器執行的相同的應用;
- 同一pod包含的容器執行在同一host上,作為統一管理單元:
-
- pid ns:處於同一pod中的應用可以看到彼此的程序
- network ns:處於同一pod中的應用可以訪問一樣的ip和port空間
- ipc ns:處於同一pod的應用可以用systemV ipc 或者posix訊息佇列進行通訊
- UTC ns:處於同一pod應用共用一個主機名
-
ReplicationController (RC)
- RC是用來管理Pod的,每個RC由一個或多個Pod組成;在RC被建立之後,系統將會保持RC中的可用Pod的個數與建立RC時定義的Pod個數一致,如果Pod個數小於定義的個數,RC會啟動新的Pod,反之則會殺死多餘的Pod。
- RC通過定義的Pod模板被建立,建立後物件叫做Pods(也可以理解為RC),可以線上修改Pods的屬性,以實現動態縮減、擴充套件Pods的規模
- RC通過label關聯對應的Pods,通過修改Pods的label可以刪除對應的Pods在需要對Pods中的容器進行更新時,RC採用一個一個替換原則來更新整個Pods中的Pod;
-
reschudeling: 維護pod副本,“多退少補”;即使是某些minion宕機
- scaling:通過修改rc的副本數來水平擴充套件或者縮小執行的pods
- Rolling updates:一個一個地替換pods來rolling updates服務;
- multiple release tracks:如果需要在系統中執行multiple release 服務,replication controller使用labels來區分multiple release tracks;
Label
-
- Label是用於區分Pod、Service、RC的key/value鍵值對
- Pod、Service、RC可以有多個label,但是每個label的key只能對應一個value
- 整個系統都是通過Label進行關聯,得到真正需要操作的目標
Service
Service也是k8s的最小操作單元,是真實應用服務的抽象
Service通常用來將浮動的資源與後端真實提供服務的容器進行關聯
Service對外表現為一個單一的訪問介面,外部不需要了解後端的規模與機制
Service是定義在叢集中一組執行Pod集合的抽象資源,它提供了所有相同的功能。當一個Service資源被建立後,將會分配一個唯一的IP(也叫做叢集IP),這個IP地址將存在於Service的整個生命資源,Service一旦被建立,整個IP無法進行修改。
Pod可以通過Service進行通訊,並且所有的通訊將會通過Service自動負載均很到所有的Pod中的容器。
三、kubernetes組成
k8s主要包括:
kubectl 客戶端命令列工具:
將接收的命令,傳送給kube-apiserver,作為對整個平臺操作的入口。
kube-apiserver REST API服務:
作為整個系統的控制入口,以REST API的形式公開,可以橫向擴充套件在高可用的架構中。
kube-controller-manager 多個控制器的合體,用來執行整個系統中的後臺任務,多個控制程序的合體:
-
- Node Controller 負責整個系統中node up 或down的狀態的響應和通知
- Replication Controller 負責維持Pods中的正常執行的Pod的個數
- Endpoints Controller 負責維持Pods和Service的關聯關係
- Service Account & Token Controllers負責為新的名稱空間建立預設的賬號和API訪問的Token
kube-scheduler 任務排程、命令下發
負責監視新建立的Pods任務,下發至未分配的節點執行該任務
kube-proxy 網路代理轉發:
kube-proxy執行在每個節點上,負責整個網路規則的連線與轉發,使k8s中的service更加抽象化
kubelet 容器的管理
kubelet執行在每個節點上,作為整個系統的agent,監視著分配到該節點的Pods任務,負責掛載Pods所依賴的卷組,下載Pods的祕鑰,執行Pods中的容器(通常是docker),週期獲取所有容器的狀態,通過匯出Pod和節點的狀態反饋給REST系統;
etcd 資訊儲存
flannel IP地址的分配
四、k8s架構圖