Kubernetes 又稱 K8s,是一個容器叢集管理系統,可以自動化的部署及管理多台機器上的多個容器。
容器建構在最底層的作業系統 Linux 之上,而 Kubernetes 又建構在容器之上。也因此為這些容器提供管理的功能。
Kubernetes官網對於Kubernetes的服務描述為 :
Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications.
這段描述說明了他的主要功能 :
- 自動部署多個容器到多台機器上 (Automating Deployment)
- 以叢集的方式針對服務負載量對容器自動進行擴展 (Scaling)
- 管理多個容器,自動偵測並重啟故障的容器 (Management)
為何需要 Kubernetes
雖然每個容器獨立運行不受其他容器互相干擾,但是隨著時間及需求增加,所需要運行的服務和資料量就會增加,這時就會需要進行擴展容量。
Kubernetes 就可以做到為了多台機器進行擴展容量,他提供了非常良好的資源調度。
Docker 也有提供 Docker Swarm 來提供多台機器調度的能力,但是功能上相較 Kubernetes 來說相對遜色許多。
Kubernetes 的分布式架構
Kubernetes 屬於分布式系統,而其具有四種基本的元件,由小到大分別為 : Pod、Worker Node、Master Node、Cluster。
Pod
Pod 為 Kubernetes 運作的最小單位,一個 Pod 可以由一個或多個容器組成,而這些 Pod 具有以下幾個特點 :
- 每個 Pod 都有屬於各自獨立的
yaml
檔。 - 同一個 Pod 中的容器共享同樣的網路和資源,彼此以 local port number 溝通。
- 一個 Pod 可以容納多個容器,但是一般情況建議一個 Pod 對應一個容器;然而如果多個容器的應用會高度耦合,也就是這些應用必須使用相同的資源,像是以往還沒有容器的概念時,有些應用必須要放在同一個主機或虛擬機上,這種情況就會把多個容器放在同一個 Pod。
Worker Node
Worker Node 簡稱 Node,是 Kubernetes 運作的最小硬體單位,一個 Node 對應到一台機器。
每個 Node 都有三個組件 : kubelet、kube-Proxy、Container Runtime
kubelet
- 該 Node 的管理員,負責管理該 Node 上的所有 Pod 的狀態並負責與 Master 溝通。Master 負責管理 Node,下方會再詳細介紹。
kube-Proxy
- 該 Node 的傳訊員,負責更新 Node 的 iptables,讓其他不在該 Node 中的物件可以得知該 Node 上所有 Pod 的最新狀態。
Container Runtime
- 該 Node 真正負責容器執行的程式,如 Docker 容器的 Container Runtime 即為 Docker Engine。
Master Node
Master Node 簡稱 Master,可以看成是一個特殊的 Node 負責管理其他的 Node。
Master 具有四個組件 : kube-apiserver、etcd、kube-scheduler、kube-controller-manager
kube-apiserver
- 管理整個 Kubernetes 所需的 API 接口,例如從 Command Line 下 kubectl 指令就會把指令送到此。
- 作為 Node 之間的溝通橋樑,Node 之間不允許直接溝通,必須透過 apiserver 轉介。
- 負責 Kubernetes 中請求的身分認證與授權。
etcd
- 存放 Kubernetes Cluster 的資料作為備份,當 Master 故障時,可以透過 etcd 還原 Kubernetes 的狀態。
kube-controller-manager
- 管理並運行 Kubernetes Controller,Controller 是負責監視 Cluster 狀態的 Process,如 Node Controller、Replication Controller。
- Process 會在 Cluster 與預期狀態不符時嘗試更新現有狀態。例如要多開一台機器以應付流量時,預期狀態會更新成 N+1,但現有狀態為 N,因此這時相對應的 Controller 就會想辦法多開一台機器。
- 上述提到的監視與嘗試更新也都需要透過訪問 kube-apiserver 達成。
kube-scheduler
- 整個 Kubernetes 上的調度員,scheduler 會監視新建立但還沒有被指定要放在哪個 Node 上的 Pod,並根據每個 Node 上的資源規定、硬體限制等等的條件去協調一個最適合的 Node 讓 Pod 運行。
Cluster
Kubernetes 中多個 Node 與 Master 的集合
Summary
本篇介紹了 Kubernetes 的基本概念以及架構,有了 Kubernetes 來幫忙管理 Container,在維護上就會更方便。下一篇我們就要來實際操作 Kubernetes。
參考
[1]什麼是 Kubernetes?| Microsoft Azure
[2]Kubernetes 基礎教學(一)原理介紹
[3]帶動IT轉型與軟體開發革命的Kubernetes
[4]KUBERNETES 技術分享 –【CLOUDMILE X GCPUG.TW
[5]Kubernetes在夯什麼—K8S基礎介紹
[6]前言 & 介紹Kubernetes
[7] GKE 系列文章(一) – 為什麼使用 Kubernetes