0%

Kubernetes (一) - 基本概念

Kubernetes

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的分布式架構

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