Micro-PaaS(Docker+K8S)
1、概述
Docker是一種Linux容器工具集,它是為構建(Build)、交付(Ship)和運行(Run)分布式應用而設計的。
Kubernates:是開源的容器集群管理系統。它構建在Docker技術之上,為容器化的應用提供資源調度、部署運行、服務發現、擴容縮容等一套功能,本質上可看作是基於容器技術的Micro-PaaS平臺。
即第三代PaaS的代表性項目。
K8S的核心概念:
Kubernetes的核心概念
Pod:是若幹相關容器的組合,Pod包含的容器運行在同一臺宿主機上,這些容器使用相同的網絡命名空間、IP地址和端口,相互之間能通過localhost來發現和通信。另外,這些容器還可共享一塊存儲卷空間。在K8s中創建、調度和管理的最小單位是Pod,而不是容器,Pod通過提供更高層次的抽象,提供了靈活的部署和管理模式。
Replication Controller:用來控制管理Pod副本(Replica,或者稱為實例),Replication Controller確保任何時候K8s集群中有指定數量的Pod副本在運行。如果少於指定數量的Pod副本,Replication Controller會啟動新的Pod副本,反之會殺死多余的副本以保證數量不變。另外,Replication Controller是彈性伸縮、滾動升級的實現核心。
Service:Service是真實應用服務的抽象,定義了Pod的邏輯集合和訪問這個Pod集合的策略。Service將代理Pod對象表現為單一訪問接口,外部不需要了解後端Pod如何運行,提供了一套簡化的服務代理和發現機制。
Label:用於區分Pod、Service、Replication Controller的Key/Value對,實際上,Kubernetes中的任意API對象都可以通過Label進行標識,每個API對象可以有多個Lablel,但是每個Label的Key只能對應一個Value。Label是Service和Replication Controller運行的基礎,它們都通過Label來關聯Pod,相比於強綁定模型,這是一種非常好的松耦合關系。
Node:K8s屬於主從分布式集群架構,K8s Node運行並管理容器。Node作為K8s的操作單元,用來分配給Pod進行綁定,Pod最終運行在Node上,Node可以認為Pod的宿主機。
2、Kubernate的架構和組件
K8s屬於主從分布式架構,節點在角色上分為Master和Node。它遵循微服務架構理論,整個系統劃分出各個功能獨立的組件,組件之間邊界清晰,部署簡單,可以輕易地運行在各種系統和環境中。
K8s使用Etcd作為存儲蹭件,Etcd是一個高可用的鍵值存儲系統,靈感來自於Zk和Doozer,通過Raft一致性算法處理日誌復制以保證強一致性。K8s使用Etcd作為系統的配置存儲中心,K8s中的重要數據都持久化在Etcd中的,使得k8s架構的各個組件屬於無狀態,可以更簡單地實施分布式集群部署。
K8s Master作為控制節點,調度管理整個系統,包含以下組件。
K8s API Server:作為K8s系統的入口,其封裝了核心對象的增刪改查操作,以REST API接口方式提供給外部客戶和內部組件調用。它維護的REST對象將持久化到Etcd中。
K8s Scheduler:負責集群的資源調度,為新建的Pod分配機器。這部分工作分出來變成一個組件,意味著可以很方便地替換成其他的調度器。
K8s Controller Manager:負責執行各種控制器,目前已經實現很多控制器來保證K8s的正常運行。主要包含的控制器如下
控制器 | 說明 |
Replication Controller | 管理維護Replication Controller,關聯Replication Controller和Pod,保證Replication Controller定義的副本數量與實際運行Pod的數量是一致的。 |
Node Controller | 管理維護Node,定期檢查Node的健康狀態,標識出失效的Node |
Namespace Controller | 管理維護Namespace,定期清理無效的Namespace,包括Namespace下的API對象,像Pod、Service和Secret等 |
Service Controller | 管理維護Service,為LoadBalance類型的Service創建管理負載均衡器 |
Endpoints Controller | 管理維護Endpoints,關聯Service和Pod,創建Endpoints作為Service的後端,當Pod發生變化時,實時刷新新的Endpionts. |
Service Account Controller | 管理維護 |
Persistent Volume Controller | 管理維護 |
Daemon Set Controller | 管理維護 |
Deployment Controller | 管理維護 |
Job Controller | 管理維護 |
Pod Autoscaler Controller | 管理維護 |
Micro-PaaS(Docker+K8S)