1. 程式人生 > >k8s 叢集基本概念

k8s 叢集基本概念

一、概述:

  kubernetes是google開源的容器叢集管理系統,提供應用部署、維護、擴充套件機制等功能,利用kubernetes能方便管理跨叢集執行容器化的應用,簡稱:k8s(k與s之間有8個字母)

二、基本概念

  Pod:若干相關容器的組合,Pod包含的容器執行在同一host上,這些容器使用相同的網路命令空間、IP地址和埠,相互之間能通過localhost來發現和通訊。另外,這些容器還可共享一塊儲存卷空間。在k8s中建立,排程和管理的最小單位就是Pod,而非容器,Pod通過提供更高層次的抽象,提供了更加靈活的部署和管理模式;

    • k8s的基本操作單元,一個Pod由一個或多個容器組成,通常pod裡的容器執行的相同的應用;
    • 同一pod包含的容器執行在同一host上,作為統一管理單元:
            同一pod 共享著相同的volumes, network名稱空間, ip和port空間,這是通過Mapped Container做到的;
      • 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架構圖