一、Kubernetes 簡介
Kubernetes 簡稱 k8s,是支援雲原生部署的一個平台,起源于谷歌。谷歌早在十幾年之前就對其應用,通過容器方式進行部署。
k8s 本質上就是用來簡化微服務的開發和部署的,關注點包括自愈和自動伸縮、排程和釋出、調用鍊監控、配置管理、Metrics 監控、日志監控、彈性和容錯、API 管理、服務安全等,k8s 将這些微服務的公共關注點以元件形式封裝打包到 k8s 這個大平台中,讓開發人員在開發微服務時專注于業務邏輯的實作,而不需要去特别關系微服務底層的這些公共關注點,大大簡化了微服務應用的開發和部署,提高了開發效率。
二、Kubernetes 架構
k8s 總體架構采用了經典的 master slave 架構模式,分 master 節點和 worker 節點,節點可以是虛拟機也可以是實體機。
master 節點由以下元件組成;
etcd,一種的分布式存儲機制,底層采用 Raft 協定,k8s 叢集的狀态資料包括配置、節點等都存儲于 etcd 中,它儲存了整個叢集的狀态。
API server,對外提供操作和擷取 k8s 叢集資源的的 API,是唯一操作 etcd 的元件,其他的元件包括管理者操作都是通過 API server 進行互動的,可以将它了解成 etcd 的 “代理人”。
Scheduler,在 k8s 叢集中做調動決策,負責資源的排程,按照預定的排程政策将 Pod 排程到相應的機器上。
Controller Manager,相當于叢集狀态的協調者,觀察着叢集的實際狀态,與 etcd 中的預期狀态進行對比,如果不一緻則對資源進行協調操作讓實際狀态和預期狀态達到最終的一緻,維護叢集的狀态,比如故障檢測、自動擴充、滾動更新等。
worker 節點由以下元件組成:
Controller Runtime,下載下傳鏡像和運作容器的元件,負責鏡像管理以及 Pod 和容器的真正運作(CRI)。
Pod,k8s 中特有的一個概念,可以了解為對容器的包裝,是 k8s 的基本排程機關,實際的容器時運作在 Pod 中的,一個節點可以啟動一個或多個 Pod。
kubelet,負責管理 worker 節點上的元件,與 master 節點上的 API server 節點進行互動,接受指令執行操作。
kube-proxy,負責對 Pod 進行尋址和負載均衡
使用者操作 k8s 叢集一般是通過 kubectl 指令行工具或者 dashboard;Pod 之間進行通訊是通過叢集内部的覆寫網絡 Overlay Network,外部流量想要進入叢集通路 Pod 則是通過負載均衡 Load Balander 裝置進行。
三、Kunbernetes 有哪些核心概念?
1. 叢集 Cluster
叢集有多個節點組成且可以按需添加節點(實體機/虛拟機),每一個節點都包含一定數量的 CPU 和記憶體 RAM。
2. 容器 Container
k8s 本身是一個容器排程平台,從主控端作業系統來看,容器就是一個一個的程序。從容器内部來看容器就是一個作業系統,它有着自己的網絡、CPU、檔案系統等資源。
3. POD
k8s 也不是直接排程容器的,而是将其封裝成了一個個 POD,POD 才是 k8s 的基本排程機關。每個 POD 中可以運作一個或多個容器,共享 POD 的檔案系統、IP 和網絡等資源,每一個 POD 隻有一個 IP。
4. 副本集 ReplicaSet
一個應用釋出時會釋出多個 POD 執行個體,副本集可對應一個應用的一組 POD,它可以通過模闆來規範某個應用的容器鏡像、端口,副本數量等。運作時副本集會監控和維護 POD 的數量,數量過多則會下線 POD,過少則啟動 POD。
5. 服務 service
POD 在 k8s 中是不固定的,可能會挂起或者重新開機,且挂起重新開機都是不可預期的,那麼這就會導緻服務的 IP 也随着不停的變化,給使用者的尋址造成一定的困難。而 service 就是用來解決這個問題的,它屏蔽了應用的 IP 尋址和負載均衡,消費方可直接通過服務名來通路目标服務,尋址和負載均衡均由 service 底層進行。
6. 釋出 Deployment
副本集就是一種基本的釋出機制,可以實作基本的或者進階的應用釋出,但操作較為繁瑣。未來簡化這些操作,k8s 引入了 Deployment 來管理 ReplicaSet,實作一些進階釋出機制。
7. ConfigMap/Secret
微服務在上線時需要設定一些可變配置,環境不同則配置值不同,有些配置如資料庫的連接配接字元串在啟動時就應該配好,有些配置則可以在運作中動态調整。為了實作針對不同環境靈活實作動态配置,微服務就需要 ConfigMap 的支援。
k8s 平台内置支援微服務的配置(ConfigMap),開發人員将配置填寫在 ConfigMap 中,k8s 再 将 ConfigMap 中的配置以環境變量的形式注入 POD,這樣 POD 中的應用就可以通路這些配置。
Secret 是一種特殊的 ConfigMap,提供更加安全的存儲和通路配置機制。
8. DaemonSet
在微服務中,每個節點需要配置一個常駐守護程序。DaemonSet 可支援在每一個 worker 節點上面配置一個守護程序 POD 并且保證每一個節點上有且僅有一個 POD。
9. 核心概念總結
概念 | 作用 |
cluster | 超大計算機抽象,由節點組成 |
Container | 應用居住和運作在容器中 |
Pod | Kubernetes 基本排程機關 |
Service | 應用Pods的通路點,屏蔽IP尋址和負載均衡 |
Deployment | 管理ReplicaSet,支援滾動等進階釋出機制 |
ConfigMap/Secrets | 應用配置,secret敏感資料配置 |
DaemonSet | 保證每個節點有且僅有一個Pod,常見于監控 |
以上概念點為 Kubernetes 最基本和最重要的概念總結,掌握後可适用于絕大部分雲原生場景,還有部分概念本文未作介紹。