Kubernetes介紹
Kubernetes是Google在2014年6月開源的一個Lark系統,使用Go語言開發,Kubernetes也叫K8S。
K8S是Google內部一個叫Borg的Lark系統衍生出來的,Borg已經在Google大規模生產運行十年之久。
K8S主要用於自動化部署、擴充和管理容器應用,提供了資源調度、部署管理、服務發現、擴容縮容、監控等一整套功能。
2015年7月,Kubernetes v1.0正式發布,截止到2017年9月29日最新穩定版本是v1.8。
Kubernetes目標是讓部署容器化應用簡單高效。
官方網站:www.kubernetes.io
Kubernetes主要功能:
n資料卷
Pod中容器之間共用資料,可以使用資料卷。
n應用程式健全狀態檢查
容器內服務可能進程堵塞無法處理請求,可以設定監控檢查策略保證應用健壯性。
n複製應用程式執行個體
控制器維護著Pod副本數量,保證一個Pod或一組同類的Pod數量始終可用。
nAuto Scaling
根據設定的指標(CPU利用率)自動縮放Pod副本數。
n服務發現
使用環境變數或DNS服務外掛程式保證容器中程式發現Pod入口訪問地址。
n負載平衡
一組Pod副本分配一個私人的叢集IP地址,負載平衡轉寄請求到後端容器。在叢集內部其他Pod可通過這個ClusterIP訪問應用。
n變換
更新服務不中斷,一次更新一個Pod,而不是同時刪除整個服務。
n服務編排
通過檔案描述部署服務,使得應用程式部署變得更高效。
n資源監控
Node節點群組件整合cAdvisor資源收集工具,可通過Heapster匯總整個叢集節點資源資料,然後儲存到InfluxDB時序資料庫,再由Grafana展示。
n提供認證和授權
支援屬性存取控制(ABAC)、角色存取控制(RBAC)認證授權策略。
基本對象概念
基本對象:
nPod
Pod是最小部署單元,一個Pod有一個或多個容器組成,Pod中容器共用儲存和網路,在同一台Docker主機上運行。
nService
Service一個應用服務抽象,定義了Pod邏輯集合和訪問這個Pod集合的策略。
Service代理Pod集合對外表現是為一個訪問入口,分配一個叢集IP地址,來自這個IP的請求將負載平衡轉寄後端Pod中的容器。
Service通過LableSelector選擇一組Pod提供服務。
nVolume
資料卷,共用Pod中容器使用的資料。
nNamespace
命名空間將對象邏輯上分配到不同Namespace,可以是不同的項目、使用者等區分管理,並設定控制策略,從而實現多租戶。
命名空間也稱為虛擬叢集。
nLable
標籤用於區分對象(比如Pod、Service),鍵/值對存在;每個對象可以有多個標籤,通過標籤關聯對象。
基於基本對象更高層次抽象:
nReplicaSet
下一代ReplicationController。確保任何給定時間指定的Pod副本數量,並提供聲明式更新等功能。
RC與RS唯一區別就是lableselector支援不同,RS支援新的基於集合的標籤,RC僅支援基於等式的標籤。
nDeployment
Deployment是一個更高層次的API對象,它管理ReplicaSets和Pod,並提供聲明式更新等功能。
官方建議使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,這就意味著可能永遠不需要直接操作ReplicaSet對象。
nStatefulSet
StatefulSet適合持久性的應用程式,有唯一的網路標識符(IP),持久儲存,有序的部署、擴充、刪除和變換。
nDaemonSet
DaemonSet確保所有(或一些)節點運行同一個Pod。當節點加入Kubernetes叢集中,Pod會被調度到該節點上運行,當節點從叢集中移除時,DaemonSet的Pod會被刪除。刪除DaemonSet會清理它所有建立的Pod。
nJob
一次性任務,運行完成後Pod銷毀,不再重新啟動新容器。還可以任務定時運行。
系統架構及組件功能
系統架構及組件功能
Master組件:
nkube-apiserver