第一章 Kubernetes入門及實踐

第一章 Kubernetes入門及實踐

1.1 Kebernets介紹

Kubernetes(k8s)是Google2014年開源的容器集羣管理系統(谷歌內部:Borg),它主要用於容器容器化應用程序的部署、擴展和管理。

k8s提供了容器編排、資源調度、彈性伸縮、部署管理、服務發現等一系列功能。

k8s的目標是讓部署容器化的應用簡單並且高效,k8s提供了應用部署、規劃、更新、維護的一種機制!

官網地址:https://kubernetes.io/

1.2 Kubernetes主要功能

名詞 解釋
數據卷 Pod容器之間共享數據,可以使用數據卷
應用程序健康檢查 容器內服務可能進程堵塞無法處理請求,可以設置監控檢查策略保證應用健壯性
複製應用程序實列 控制器維護着Pod副本數量,保證一個Pod或一組同類的Pod數量始終可用
彈性伸縮 根據設定的指標(CPU利用率)自動縮放Pod副本數
服務發現 使用環境變量或DNS服務插件保證容器中程序發現Pod入口訪問地址
負載均衡 一組Pod副本分配一個私有的集羣IP地址,負載均衡轉發請求到後端容器.在集羣內部 其他Pod可通過這個ClusterIP訪問應用
滾動更新 更新服務不中斷,一次更新一個Pod,而不是刪除整個服務
服務編排 通過文件描述部署服務,使得應用程序部署變得高效
資源監控 Node節點組件集成cAvisor資源收集工具,可通過Heapster彙總整個集羣節點資源數據,然後存儲到1nfluxDE時序數據庫,再有Grafana展示
提供認證和授權 支持角色訪問控制(RBAC)認證授權等策略

1.3 設計架構及核心組件

在這裏插入圖片描述
上圖可以看到如下組件,使用特別的圖標表示Service和Label:

EN CN
Pod 根容器
Container 容器
Label 標籤
Replication Controller 複製控制器
Service 服務
Node 節點
Kubernets Master Kubernetes主節點

1.3.1 Master 節點組件

master節點上主要運行四個組件:api-server、scheduler、controller-manager、etcd。
在這裏插入圖片描述

組件 作用
api-server 提供了資源操作的唯一入口,各組件協調者並提供認證、授權、訪問控制、API註冊和發現機制
scheduler 負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上,Kubernets目前提供了調度算法,但同時也保證了接口,用戶可以根據自己的需求定義自己的調度算法
controller-manager 如果說APIServer做的是“前臺”工作的話,那麼controller manager就是負責“後臺”的.每個資源一般都對一個控制器,而controller manager 就是負責管理這些控制器的。比如我們通過APIServer創建一個pod,當這個pod創建成功後,APIserver的任務就算是完成了.而後面保證Pod的狀態和我們預期的一樣的重任就由controller manager 去保證了.
etcd etcd是一個高可用的鍵值存儲系統,Kubernets使用它來存儲各個資源的狀態,從而實現Restful的API

1.3.2 Node 節點組件

每個Node節點主要由三個模塊組成:kubelet、kube-proxy、Container runtime。
在這裏插入圖片描述

組件 作用
Container runtime 負責鏡像管理以及Pod和容器的真正運行(CRI);指的是容器運行環境,目前Kubernets支持docker和rkt兩種容器
kube-proxy 負責Service提供cluster內部的服務發現和負載均衡;該模塊實現了Kubernetesz中的服務發現和反向代理功能.反向代理方面:kube-proxy支持TCP和UDP鏈接轉發,默認基於Round Robin算法將客戶端流量轉發到與service對應的一組後端pod。服務發現方面,kube-proxy使用etcd的watch機制,監控集羣中service和endpoint對象數據的動態變化,並且維護一個service到endpoint的映射關係,從而保證了後端pod的IP變化不會對訪問者造成影響.另外kube-proxy還支持session affinity
kubelet 負責維護容器的生命週期,同時也負責Volume(CVI)和網絡(CNI)的管理;是Master在每個Node節點上面的agent,是Node節點上面最重要的模塊,它負責維護和管理該Node上面的所有容器但是如果所有容器不是通過Kubernetes創建,它並不會管理,本質上,它負責使Pod得運行狀態與期望的狀態一致

除了核心組件,還有一些推薦的Add-ons(插件):

  • kube-dns負責爲整個集羣提供DNS服務
  • Ingress Controller爲服務提供外網入口
  • Heapster提供資源監控
  • Dashboard提供GUI
  • Federation提供跨可用區的集羣
  • Fluentd-elasticsearch提供集羣日誌採集、存儲與查詢
    master與node關係:
    在這裏插入圖片描述

1.3.3 分層架構

Kubernetes設計理念和功能其實就是一個類似Linux的分層架構,如下圖所示
在這裏插入圖片描述

  • 核心層:Kubernetes最核心的功能,對外提供API構建高層的應用,對內提供插件式應用執行環境
  • 應用層:部署(無狀態應用、有狀態應用、批處理任務、集羣應用等)和路由(服務發現、DNS解析等)
  • 管理層:系統度量(如基礎設施、容器和網絡的度量),自動化(如自動擴展、動態Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
  • 接口層:kubectl命令行工具、客戶端SDK以及集羣聯邦
  • 生態系統:在接口層之上的龐大容器集羣管理調度的生態系統,可以劃分爲兩個範疇
    - Kubernetes外部:日誌、監控、配置管理、CI、CD、Workflow、FaaS、OTS應用、ChatOps等
    - Kubernetes內部:CRI、CNI、CVI、鏡像倉庫、Cloud Provider、集羣自身的配置和管理等

1.4 基本對象概念

基本對象:

名稱 概念
pod 容器Pod是最小的部署單元,一個Pod有一個或多個容器組成,Pod中容器共享存儲和網絡,在同一個Docker主機上運行
Service Service一個應用服務抽象,定義了Pod邏輯集合和訪問這個Pod集合的策略。Service代理Pod集合對外表現是爲一個訪問入口,分配一個集羣IP地址,來自這個IP的請求將負載均衡轉發後端Pod中的容器。Service通過Lable Selector選擇一組Pod提供服務。
Volume 數據卷,共享Pod中容器使用的數據。分爲臨時卷、本地卷和網絡卷,臨時卷和本地卷位於Node本地,常用於數據緩存
Namespace 命名空間將對象邏輯上分配到不同Namespace,可以是不同的項目、用戶等區分管理,並設定控制策略,從而實現多租戶。命名空間也稱爲虛擬集羣。同一類型資源對象的Name必須唯一,邏輯分組,默認名稱空間是default
Lable 標籤用於區分對象(比如Pod、 Service),是key/values數據;每個對象可以有多個標籤,通過標籤關聯對象。標籤可以在創建一個對象的時候直接給與,也可以在後期隨時修改,每一個對象可以擁有多個標籤,但是,key值必須是唯一的。

基於基本對象更高層次抽象:

名稱 概念
ReplicaSet 下一代Replication Controller。確保任何給定時間指定的Pod副本數量,並提供聲明式更新等功能。RC與RS唯一區別就是lable selector支持不同, RS支持新的基於集合的標籤, RC僅支持基於等式的標籤。
Deployment Deployment是一個更高層次的API對象,它管理ReplicaSets和Pod,並提供聲明式更新等功能。官方建議使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,這就意味着可能永遠不需要直接操作。
StatefulSet StatefulSet適合持久性的應用程序,有唯一的網絡標識符(IP),持久存儲,有序的部署、擴展、刪除和滾動更新。
DaemonSet DaemonSet確保所有(或一些)節點運行同一個Pod。當節點加入Kubernetes集羣中, Pod會被調度到該節點上運行,當節點從集羣中。移除時, DaemonSet的Pod會被刪除。刪除DaemonSet會清理它所有創建的Pod。
Job 一次性任務,運行完成後Pod銷燬,不再重新啓動新容器。還可以任務定時運行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章