001.Kubernetes簡介
阿新 • • 發佈:2019-01-11
一 Kubernetes概述
Kubernetes是一個全新的基於容器技術的分散式架構領先方案。Kubernetes(k8s)是Google開源的容器叢集管理系統(谷歌內部:Borg)。在Docker技術的基礎上,為容器化的應用提供部署執行、資源排程、服務發現和動態伸縮等一系列完整功能,提高了大規模容器叢集管理的便捷性。 Kubernetes是一個完備的分散式系統支撐平臺,具有完備的叢集管理能力,多擴多層次的安全防護和准入機制、多租戶應用支撐能力、透明的服務註冊和發現機制、內建智慧負載均衡器、強大的故障發現和自我修復能力、服務滾動升級和線上擴容能力、可擴充套件的資源自動排程機制以及多粒度的資源配額管理能力。- 擁有一個唯一指定的名字
- 擁有一個虛擬IP(Cluster IP、Service IP、或VIP)和埠號
- 能夠提供某種遠端服務能力
- 被對映到了提供這種服務能力的一組容器應用上
- 目標Pod的定義
- 目標Pod需要執行的副本數量(Replicas)
- 要監控的目標Pod標籤(Label)
二 Kubernetes優勢、場景、特點
Kubernetes主要優勢:- 容器編排
- 輕量級
- 開源
- 彈性伸縮
- 負載均衡
- 快速部署應用
- 快速擴充套件應用
- 無縫對接新的應用功能
- 節省資源,優化硬體資源的使用
- 可移植: 支援公有云,私有云,混合雲,多重雲(multi-cloud)
- 可擴充套件: 模組化, 外掛化, 可掛載, 可組合
- 自動化: 自動部署,自動重啟,自動複製,自動伸縮/擴充套件
三 Kubetcl的核心概念
3.1 Master
k8s叢集的管理節點,負責管理叢集,提供叢集的資源資料訪問入口。擁有Etcd儲存服務(可選),執行Api Server程序,Controller Manager服務程序及Scheduler服務程序,關聯工作節點Node。- Kubernetes API server提供HTTP Rest介面的關鍵服務程序,是Kubernetes裡所有資源的增、刪、改、查等操作的唯一入口。也是叢集控制的入口程序;
- Kubernetes Controller Manager是Kubernetes所有資源物件的自動化控制中心;
- Kubernetes Schedule是負責資源排程(Pod排程)的程序。
3.2 Node
Node是Kubernetes叢集架構中執行Pod的服務節點(亦叫agent或minion)。Node是Kubernetes叢集操作的單元,用來承載被分配Pod的執行,是Pod執行的宿主機。關聯Master管理節點,擁有名稱和IP、系統資源資訊。執行docker eninge服務,守護程序kunelet及負載均衡器kube-proxy. 每個Node節點都執行著以下一組關鍵程序- kubelet:負責對Pod對於的容器的建立、啟停等任務,同時與Master節點協作,實現叢集管理的基本功能;
- kube-proxy:實現Kubernetes Service的通訊與負載均衡機制的重要元件;
- Docker Engine(Docker):Docker引擎,負責本機容器的建立和管理工作。
3.3 Pod
運行於Node節點上,若干相關容器的組合。Pod內包含的容器執行在同一宿主機上,使用相同的網路名稱空間、IP地址和埠,能夠通過localhost進行通訊。Pod是Kurbernetes進行建立、排程和管理的最小單位,它提供了比容器更高層次的抽象,使得部署和管理更加靈活。一個Pod可以包含一個容器或者多個相關容器。 Pod有兩種型別:普通Pod和靜態Pod。後者比較特殊,它並不存在Kubernetes的etcd儲存中,而是存放在某個具體的Node上的一個具體檔案中,並且只在此Node上啟動。普通Pod一旦被建立,就會被放入etcd儲存中,隨後會被Kubernetes Master排程到摸個具體的Node上進行繫結,隨後該Pod被對應的Node上的kubelet程序例項化成一組相關的Docker容器並啟動起來,在預設情況下,當Pod裡的某個容器停止時,Kubernetes會自動檢測到這個問題並且重啟這個Pod(重啟Pod裡的所有容器),如果Pod所在的Node宕機,則會將這個Node上的所有Pod重新排程到其他節點上。 Pod的IP與ContainerPort(容器埠)共同構成了Endpoint,表示此Pod中的一個服務程序對外的通訊地址。 每個Pod也可以對其能使用的資源設定相應配額,CPU和記憶體的數值都為絕對值,CPU通常定義為千分之一單位,如100-300m,表示佔用0.1——0.3個CPU,記憶體通常以位元組數表示,如64Mi。3.4 Label(標籤)
Kubernetes中的任意API物件都是通過Label進行標識,Label的實質是一系列的Key/Value鍵值對,其中key與value可自定義。Label可以附加到各種資源物件上,如Node、Pod、Service、RC等,一個資源物件可以定義任意數量的Label,同一個Label也可以被新增到任意數量的資源物件上去。Label是Replication Controller和Service執行的基礎,二者通過Label來進行關聯Node上執行的Pod,可以通過Label Selector(標籤選擇器)查詢和篩選資源物件。 一些常用的Label如下:- 版本標籤:"release":"stable","release":"canary"......
- 環境標籤:"environment":"dev","environment":"qa","environment":"production"
- 架構標籤:"tier":"frontend","tier":"backend","tier":"middleware"
- 分割槽標籤:"partition":"customerA","partition":"customerB"
- 質量管控標籤:"track":"daily","track":"weekly"
- kube-Controller程序通過資源物件RC上定義Label Selector來篩選要監控的Pod副本的數量,從而實現副本數量始終符合預期設定的全自動控制流程
- kube-proxy程序通過Service的Label Selector來選擇對應的Pod,自動建立起每個Service島對應Pod的請求轉發路由表,從而實現Service的智慧負載均衡
- 通過對某些Node定義特定的Label,並且在Pod定義檔案中使用Nodeselector這種標籤排程策略,kuber-scheduler程序可以實現Pod”定向排程“的特性。
3.5 Replication Controller
Replication Controller用來管理Pod的副本,保證叢集中存在指定數量的Pod副本。叢集中副本的數量大於指定數量,則會停止指定數量之外的多餘容器數量,反之,則會啟動少於指定數量個數的容器,保證數量不變。Replication Controller是實現彈性伸縮、動態擴容和滾動升級的核心。 定義RC包括如下幾個部分:- Pod期待的副本數(replicas);
- 用於篩選目標Pod的Label Selector;
- 當Pod的副本數小於預期數量時,用於建立Pod的Pod模板(template)。
- 通過定義RC實現Pod的建立過程及副本數量自動控制;
- RC裡包括完整的Pod定義模板;
- RC通過Label Selector機制實現副本的自動控制;
- 通過改變RC裡的Pod副本數量,可以實現Pod的擴容或縮容功能;
- 通過改變RC的Pod模板的映象版本,可以實現Pod的滾動升級功能。
3.6 Deployment
Deployment在內部使用了RS來實現目的,Deployment相當於RC的一次升級,其最大的特色為可以隨時獲知當前Pod的部署進度。 Deployment場景:- 建立一個Deployment物件來生成對應的RS並完成Pod副本的建立過程;
- 檢查Deployment的狀態來看部署動作是否完成(即副本數量是否達到預期值);
- 更新Deployment以建立新的Pod(比如映象升級);
- 如果當前Deployment不穩定,則回滾到一個早先Deployment版本;
- 掛起或恢復一個Deployment。
3.7 HPA(Horizontal Pod Autoscaler)
Pod的橫向自動擴容,也是Kubernetes的一種資源,通過追蹤分析RC控制的所有Pod目標的負載變化情況,來確定是否需要針對性的調整Pod副本數量。 HPA針對Pod負載的兩種度量方式:- CPUUtilizationPercentage;
- 應用程式自定義的度量指標。
3.8 Service
Service定義了Pod的邏輯集合和訪問該集合的策略,是真實服務的抽象。Service提供了一個統一的服務訪問入口以及服務代理和發現機制,關聯多個相同Label的Pod,使用者不需要了解後臺Pod是如何執行。 外部系統訪問Service的機制: Kubernetes的三種IP:- Node IP:Node節點的IP地址
- Pod IP: Pod的IP地址
- Cluster IP:Service的IP地址
- Cluster IP僅僅作用於Kubernetes Service這個物件,並由Kubernetes管理和分配P地址;
- Cluster IP無法被ping,他沒有一個“實體網路物件”來響應;
- Cluster IP只能結合Service Port組成一個具體的通訊埠,單獨的Cluster IP不具備通訊的基礎,並且他們屬於Kubernetes叢集這樣一個封閉的空間。
- Kubernetes叢集之內,Node IP網、Pod IP網與Cluster IP網之間的通訊,採用的是Kubernetes自己設計的一種區別於常規的IP路由的程式設計方式的特殊路由規則。
3.9 Volume(儲存卷)
Volume是Pod中能夠被多個容器訪問的共享目錄,Kubernetes中的Volume是定義在Pod上,可以被一個或多個Pod中的容器掛載到某個目錄下。Kubernetes中的Volume與Pod的生命週期相同,與容器的生命週期並無直接關係。Kubernetes的Volume支援多種型別的後端驅動,如glusterfs、ceph。 Volume常見型別:- emptyDir:為Pod分配到Node的時候建立。無需指定宿主機的目錄檔案,為Kubernetes自動分配的目錄。
- hostPath:為在Pod上掛載宿主機上的檔案或目錄。
提示:若不同Node上具有相同配置的Pod可能因為宿主機的目錄結構不一致從而導致訪問結構不一致。
- NFS:NFS網路檔案系統;
- iSCSI:iSCSI儲存裝置;
- flocker;
- rbd:
- glusterfs。