Kubernetes入門之系統架構

目錄

目錄 1

1. 前言 1

2. 系統架構 2

2.1. 主從架構 2

2.2. 基本概念 3

2.3. 主控節點(Master Node) 4

2.3.1. kube-apiserver 4

2.3.2. kube-controller-manager 4

2.3.3. kube-scheduler 4

2.3.4. cloud-controller-manager 5

2.4. 工作節點(Work Node) 5

2.4.1. Kubelet 5

2.4.2. kube-proxy 5

2.4.3. Container Runtime 5

2.5. 擴展插件(Addons) 5

2.5.1. DNS 5

2.5.2. Web UI (Dashboard) 6

2.5.3. Container Resource Monitoring 6

2.5.4. Cluster-level Logging 6

 

  1. 前言

Kubernetes簡稱k8s(也縮寫爲kube),一個開源的用於自動化部署容器化(主要針對Docker,其它如katacontainersrkt也支持)應用程序系統,通過分組容器(容器組被命名爲Pod,Pod也是Kubernetes的最小調度單元)來調度和管理容器,官方網站:https://kubernetes.io/,本文大量參考了官方的https://kubernetes.io/docs/concepts/https://kubernetes.io/zh/(官方中文)等。

如何快速認識和上手Kubernetes?可從三方面入手,一是瞭解Kubernetes的系統架構,二是瞭解Kubernetes涉及的主要概念,三是動手安裝運行初體驗。

  1. 系統架構
    1. 主從架構

Kubernetes採用的是常見的主從架構(master-slave),注意這裏的Slave並不是Master的複製節點,而是工作節點(Work Node)。

Kubernetes官方把Slave節點直接叫節點(Node),本文把它叫作工作節點(Work Node),以從名稱上更好的區分於主控節點(Master Node)。其中Master爲單個節點,而Slave則多節點;Master負責管理、調度和監控,Slave負責執行。

Master由三部分組成:kube-apiserver、kube-controller-manager、kube-scheduler和cloud-controller-manager,每一成員均爲一獨立進程,Master依賴Etcd存儲各狀態數據;Slave由兩部分組成:kubelet、kube-proxy和Container Runtime,每一成員也均爲一獨立進程。

 

下爲Kubernetes官方提供的架構圖(cloud-controller manager還非正式發佈):

    1. 基本概念

前言部分已介紹Pod是Kubernetes的最小調度單元,而不是容器Container。Pod、容器(Container)和節點(Node,這裏特指工作節點)三者密切相關,可理解爲一種包含關係,如下圖所示:

 

如果把Pod視作進程組,則Container可視爲進程(實際上,一個容器內還可有多個物理進程)。一個Pod內可有多個容器,一個節點可有多個Pod,Kubernetes的最基本作用就是通過Pod來管理容器,包括分配運行容器的工作節點(Work Node)和容器的啓停等。因爲Pod是Kubernetes的最小調度單元,所以實際直接操作的是Pod。

Pod類似進程,是臨時性的,有五種狀態

Pending

待運行

Kubernetes已接受Pod,但一或多個容器映射還沒被創建,可能是調度正在下載容器映射等

Running

運行中

Pod已被調度到工作節點,所有的容器也已創建好,至少一個容器正在運行或正在(重)啓動中。

Succeeded

運行成功(結束)

Pod中的所有容器都運行結束,並且全部運行成功,而且不會重啓

Failed

運行失敗(結束)

Pod中的所有容器都運行結束,但至少有一個運行失敗(容器退出狀態非0)

Unknown

未知

通常是因爲無法和Pod所在節點通信,導致無法獲取Pod狀態

    1. 主控節點(Master Node)
      1. kube-apiserver

Kubernetes的對外窗口,是Kubernetes的控制面(control plane),操控Kubernetes需經過kube-apiserver。有兩種操作Kubernetes方法:一是使用Kubernetes提供的命令行工具kube-apiserver,二是使用Kubernetes提供的API。kube-apiserver是無狀態的且沒有單點問題,所以沒有主備之分。

      1. kube-controller-manager

Kubernetes控制管理器是Kubernetes的大腦,通過kube-apiserver管理和監控Kubernetes的各種資源,由幾大管理控制器組成:

Node Controller

節點控制器

負責在節點出現故障時進行通知和響應

Replication Controller

副本控制器

負責爲系統中的每個副本控制器對象維護正確數量的Pod

Endpoints Controller

端點控制器

填充Endpoints對象(即,加入Services&Pods)

Service Account & Token Controllers

服務帳戶和訪問令牌控制器

爲新Namespace創建默認帳戶和API訪問令牌

 

kube-controller-manager有單點,所以有主備kube-controller-manager,通過選舉的方式產生主kube-controller-manager。

      1. kube-scheduler

調度器監視新創建的未分配工作節點的Pod,將Pod調度到(分配)最佳的工作節點。Kubernetes支持自定義調度器,來取代默認的kube-scheduler調度器。

如果調度器不能爲Pod找到合適的工作節點,則Pod保持未調度狀態,直到被調度分配工作節點。

kube-scheduler通過兩步操作爲Pod選擇一個工作節點:

 

操作

說明

1

Filtering

過濾出合適的工作節點,如果沒有過濾出任何工作節點,則Pod保持爲未調度狀態

2

Scoring

對工作節點打分,選擇分數最高的,分數相同的隨機選擇

 

kube-scheduler有單點,所以有主備kube-scheduler,通過選舉的方式產生主kube-scheduler。

      1. cloud-controller-manager

雲控制管理器運行與底層雲提供商(如AWS)交互的控制器,也由四大管理控制器組成:

Node Controller

節點控制器

用於檢查雲提供程序,以確定節點停止響應後是否已將其刪除到雲中

Route Controller

路由控制器

用於在基礎雲基礎架構中設置路由

Service Controller

服務控制器

用於創建、更新和刪除雲提供商負載平衡器

Volume Controller

控制器

用於創建、附加和安裝卷以及與雲提供商交互以編排卷

    1. 工作節點(Work Node)
      1. Kubelet

運行在每個工作節點上的系統代理(Agent),確保容器運行在Pod中,Kubelet確保PodSpec描述的容器運行正常。Kubelet只管理Kubernetes所創建的容器,而不管理其它非Kubernetes創建的容器。

      1. kube-proxy

運行在每個工作節點上的網絡代理(Proxy),實現了Kubernetes Service概念的部分。kube-proxy維護工作節點上的網絡規則,這些規則允許Kubernetes集羣內外部與Pod進行網絡通訊。如果系統的數據包過濾層可用,則kube-proxy使用它,否則kube-proxy自己轉發流量。

      1. Container Runtime

Kubernetes支持除Docker外的多種容器,運行具體的容器是通過容器運行時完成的。Kubernetes支持:Docker、containerdcri-o、rktlet、Frakti和實現Kubernetes CRI(容器運行時接口,Container Runtime Interface)的任何容器。

    1. 擴展插件(Addons)

擴展插件使用Kubernetes資源實現集羣特性,因爲它們提供了羣集級功能,所以插件的命名空間資源屬於kube-system命名空間,下列是部分可選的插件。

      1. DNS

除DNS外的其它的擴展插件不是必須的,但應有集羣級的DNS服務器。由Kubernetes啓動的容器,會在其DNS搜索中自動包括此DNS服務器。

      1. Web UI (Dashboard)

儀表板(Dashboard)是Kubernetes集羣的通用基於Web的UI,它允許用戶管理集羣中運行的應用程序以及集羣本身並進行故障排除。

      1. Container Resource Monitoring

容器資源監視在中央數據庫中記錄有關容器的一般時間序指標,並提供用於瀏覽該數據的UI。

      1. Cluster-level Logging

集羣級日誌記錄,負責通過搜索/瀏覽接口將容器日誌保存到中央日誌存儲中。

 

 

發佈了519 篇原創文章 · 獲贊 73 · 訪問量 446萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章