Kubernetes介紹
Kubernetes是Google在2014年開源的一個容器叢集管理系統,使用Go語言開發,Kuberneter也叫K8S
K8S是Google内部一個叫Borg的容器叢集管理系統衍生出來的,Borg已經在Google大規模生産運作十年之久。
K8S主要用于自動化部署、擴充和管理容器應用。提供了資源排程、部署管理、服務發現、擴容縮容、監控等一整套功能。
Kuberneter目标是讓部署容器化應用簡單高效
Kubernetes主要功能:

1. 資料卷
Pod中容器之間共享資料,可以使用資料卷。
2. 應用程式健康檢查
容器内服務可能程序堵塞無法處理請求,可以設定監控檢查政策保證應用健壯性。
3. 複制應用程式執行個體
控制器維護着Pod副本數量,保證一個Pod或一組同類的Pod數量始終可用。
4. 彈性伸縮
根據設定的名額(CPU使用率)自動縮放Pod副本數
5. 服務發現
使用環境變量或DNS服務插件保證容器中程式發現Pod入口通路位址。
6. 負載均衡
一組Pod副本配置設定一個私有的叢集IP位址,負載均衡轉發請求到後繼容器。在叢集内部其他Pod可通過這個ClusterIP通路應用。
7. 滾動更新
更新服務不中斷,一次更新一個Pod,而不是同時删除整個服務。
8. 服務編排
通過檔案描述部署服務,使的應用程式部署變得更高效。
9. 資源監控
Node節點元件內建cAdvisor資源收集工具,可通過Heapster彙總整個叢集節點資源資料,然後存儲到InfluxDB時序資料庫,再由Grafana展示。
10. 提供認證和授權
支援角色通路控制(RBAC)認證授權等政策。
核心對象概念
基本對象
1. Pod
Pod是最小部署單元,一個Pod有一個或多個容器組成,Pod中容器共享存儲和網絡,在同一台Docker主機上運作。
2. Service
Service一個應用服務抽象,定義了Pod邏輯集合和通路這個Pod集合的政策。
Service代理Pod集合對外表現是為一個通路入口,配置設定一個叢集IP位址,來自這個IP的請求将負載均衡轉發後端Pod中的容器。
Service通過Lable Selector選擇一組Pod提供服務。
3. Volume
資料卷,共享Pod中容器使用的資料。
4. Namespace
命名空間将對象邏輯上配置設定到不同Namespace,可以是不同的項目、使用者等區分管理,并設定控制政策,進而實作多租戶。
命名空間也稱為虛拟叢集。
5. Lable
标簽用于區分對象(比如Pod、Service),鍵/值對存在;每個對象可以有多個标簽,通過标簽關聯對象。
### 基于基本對象更高層次抽象:
1. ReplicaSet
下一代Replication Controller。確定任何給定時間指定的Pod副本數量,并提供聲明式更新等功能。
RC與RS唯一差別就是lable selector支援不同,RS支援新的基于集合的标簽。RS支援新的基于集合的标簽,RC僅支援基于等式的标簽。
2. Deployment
Deployment是一個更高層次的API對象,它管理ReplicaSets和Pod,并提供聲明式更新等功能。
官方建議使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,這就意味着可能永遠不需要直接操作ReplicaSet對象。
3. StatefulSet
StatefulSet适合持久性的應用程式,有唯一的網絡辨別符(IP),持久儲存,有序的部署、擴充、删除和滾動更新。
4. DaemonSet
DaemonSet確定所有(或一些)節點運作同一個Pod、當節點加入Kubernetes叢集中,Pod會被排程到節點上運作,當節點從叢集中移除時,DaemonSet的Pod會被删除,删除DaemonSet會清理它所有建立的Pod。
5. Job
一次性任務,運作完成後Pod銷毀,不再重新啟動新容器。還可以任務定時運作。