Kubernetes介紹
Kubernetes是google在2014年6月開源的一個容器集群管理系統,使用go語言開發,Kubernetes也稱k8s。
k8s是google內部一個叫borg的容器集群管理系統衍生出來的,borg已經在google大規模生產運行十年之久。
k8s主要用於自動化部署、擴展和管理容器應用,提供了資源調度、部署管理、服務發現、擴容縮容、監控等一整套功能。
2015年7月,kubernetes v1.0正式發布。
kubernetes目標是讓部署容器化應用簡單高效。
官方網址:https://kubernetes.io/
Kubernetes主要功能
數據卷
Pod中容器之間共享數據,可以使用數據卷。
應用程序健康檢查
容器內服務可能進程阻塞無法處理請求,可以設置監控檢查策略保證應用健壯性。
復制應用程序實例
控制器維護pod副本數量,保證一個pod或一組同類的pod數量始終可用。
彈性伸縮
根據設定的指標(CPU利用率)自動縮放pod副本數。
服務發現
使用環境變量或DNS服務插件保證容器中程序發現pod入口訪問地址。
負載均衡
一組pod副本分配一個私有的集群ip地址,負載均衡轉發請求到后端容器。在集群內部其他pod可通過這個clusterIP訪問應用。
滾動更新
更新服務不中斷,一次更新一個pod,而不是同時刪除整個服務。
服務編排
通過文件描述部署服務,使得應用程序部署變得更高效。
資源監控
Node節點組件集成cAdvisor資源收集工具,可通過Heapster匯總整個集群節點資源數據,然后存儲到InfluxDB時序數據庫,再由Grafana展示。
提供認證和授權
支持角色訪問控制(RBAC)認證授權等策略。
基本對象概念
基本對象
Pod
Pod是最小部署單元,一個Pod有一個或多個容器組成,Pod中容器共享存儲和網絡,在同一台Docker主機上運行。
Service
Service一個應用服務抽象,定義了Pod邏輯集合和訪問這個Pod集合的策略。
Service代理Pod集合對外表現是為一個訪問入口,分配一個集群IP地址,來自這個IP的請求將負載均衡轉發后端Pod中的容器。
Service通過Lable Selector選擇一組Pod提供服務。
Volume
數據卷,共享Pod中容器使用的數據。
Namespace
命名空間將對象邏輯上分配到不同Namespace,可以是不同的項目、用戶等區分管理,並設定控制策略,從而實現多租戶。
命名空間也稱為虛擬集群。
Lable
標簽用於區分對象(例如Pod、Service)、鍵值對存在,每個對象可以有多個標簽,通過標簽關聯對象。
基於基本對象更高層次抽象
ReplicaSet
下一代Replication Controller。確保任何給定時間指定的Pod副本數量,並提供聲明正式更新等功能。
RC與RS唯一區別就是lable selector支持不同,RS支持新的基於集合的標簽,RC僅支持基於等式的標簽。
Deployment
Deployment是一個更高層次的API對象,它管理ReplicaSets和Pod,並提供聲明式更新等功能。
官方建議使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,這就意味着可能永遠不需要直接操作ReplicaSet對象。
StatefulSet
StatefulSet適合持久性的應用程序,有唯一的網絡標識符(IP),持久存儲,有序的部署、擴展、刪除和滾動更新。
DaemonSet
DaemonSet確保所有(或一些)節點運行同一個Pod。當節點加入Kubernetes集群中,Pod會被調度到該節點上運行,當節點從集群中移除時,DaemonSet的Pod會被刪除。刪除DaemonSet會清理它所有創建的Pod。
Job
一次性任務,運行完成后Pod銷毀,不再重新啟動新容器,還可以任務定時運行。
系統架構及組件功能
master組件
kube-apiserver
kube-apiserver API,集群的統一入口,各組件協調者,以HTTP API提供接口服務,所有對象資源的增刪改查和監聽操作都交給APIService處理后再提交給Etcd存儲。
kuber-controller-manager
處理集群中常規后台任務,一個資源對應一個控制器,而controllerManager就是負責管理這些控制器的。
kuber-scheduler
根據調度算法為新創建的Pod選擇一個Node節點。
Node組件
kubelet
kubelet是master在Node節點上的Agent,管理本機運行容器的生命周期,例如創建容器、Pod掛載數據卷、下載secret、獲取容器和節點狀態等工作。kubelet將每個Pod轉換成一組容器。
kube-proxy
在Node節點上實現Pod網絡代理,維護網絡規和四層負載均衡工作。
docker或rocket/rkt
運行容器。
第三方服務
etcd
分布式鍵值存儲系統。用於保持集群狀態,例如Pod、Service等對象信息。