一、概述:
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架構圖