天天看點

Kubernetes 是什麼以及其架構

一、什麼是 Kubernetes

Kubernetes,從官方網站上可以看到,它是一個工業級的容器編排平台。Kubernetes 這個單詞是希臘語,它的中文翻譯是“舵手”或者“飛行員”。在一些常見的資料中也會看到“ks”這個詞,也就是“k8s”,它是通過将8個字母“ubernete ”替換為“8”而導緻的一個縮寫。

Kubernetes 為什麼要用“舵手”來命名呢?大家可以看一下這張圖:

Kubernetes 是什麼以及其架構

這是一艘載着一堆集裝箱的輪船,輪船在大海上運着集裝箱奔波,把集裝箱送到它們該去的地方。我們之前其實介紹過一個概念叫做 container,container 這個英文單詞也有另外的一個意思就是“集裝箱”。Kubernetes 也就借着這個寓意,希望成為運送集裝箱的一個輪船,來幫助我們管理這些集裝箱,也就是管理這些容器。

這個就是為什麼會選用 Kubernetes 這個詞來代表這個項目的原因。更具體一點地來說:Kubernetes 是一個自動化的容器編排平台,它負責應用的部署、應用的彈性以及應用的管理,這些都是基于容器的。

二、Kubernetes 有如下幾個核心的功能:

  • 服務的發現與負載的均衡;
  • 容器的自動裝箱,我們也會把它叫做 scheduling,就是“排程”,把一個容器放到一個叢集的某一個機器上,Kubernetes 會幫助我們去做存儲的編排,讓存儲的聲明周期與容器的生命周期能有一個連接配接;
  • Kubernetes 會幫助我們去做自動化的容器的恢複。在一個叢集中,經常會出現主控端的問題或者說是 OS 的問題,導緻容器本身的不可用,Kubernetes 會自動地對這些不可用的容器進行恢複;
  • Kubernetes 會幫助我們去做應用的自動釋出與應用的復原,以及與應用相關的配置密文的管理;
  • 對于 job 類型任務,Kubernetes 可以去做批量的執行;
  • 為了讓這個叢集、這個應用更富有彈性,Kubernetes 也支援水準的伸縮。

下面,我們希望以三個例子跟大家更切實地介紹一下 Kubernetes 的能力。

1、排程

Kubernetes 可以把使用者送出的容器放到 Kubernetes 管理的叢集的某一台節點上去。Kubernetes 的排程器是執行這項能力的元件,它會觀察正在被排程的這個容器的大小、規格。

比如說它所需要的 CPU以及它所需要的 memory,然後在叢集中找一台相對比較空閑的機器來進行一次 placement,也就是一次放置的操作。在這個例子中,它可能會把紅顔色的這個容器放置到第二個空閑的機器上,來完成一次排程的工作。

Kubernetes 是什麼以及其架構

 2、自動修複

Kubernetes 有一個節點健康檢查的功能,它會監測這個叢集中所有的主控端,當主控端本身出現故障,或者軟體出現故障的時候,這個節點健康檢查會自動對它進行發現。

下面 Kubernetes 會把運作在這些失敗節點上的容器進行自動遷移,遷移到一個正在健康運作的主控端上,來完成叢集内容器的一個自動恢複。

Kubernetes 是什麼以及其架構

3、水準伸縮

Kubernetes 有業務負載檢查的能力,它會監測業務上所承擔的負載,如果這個業務本身的 CPU 使用率過高,或者響應時間過長,它可以對這個業務進行一次擴容。

比如說在下面的例子中,黃顔色的過度忙碌,Kubernetes 就可以把黃顔色負載從一份變為三份。接下來,它就可以通過負載均衡把原來打到第一個黃顔色上的負載平均分到三個黃顔色的負載上去,以此來提高響應的時間。

Kubernetes 是什麼以及其架構

 以上就是 Kubernetes 三個核心能力的簡單介紹。

三、Kubernetes 的架構

Kubernetes 架構是一個比較典型的二層架構和 server-client 架構。Master 作為中央的管控節點,會去與 Node 進行一個連接配接。

所有 UI 的、clients、這些 user 側的元件,隻會和 Master 進行連接配接,把希望的狀态或者想執行的指令下發給 Master,Master 會把這些指令或者狀态下發給相應的節點,進行最終的執行。

Kubernetes 是什麼以及其架構

 Kubernetes 的 Master 包含四個主要的元件:API Server、Controller、Scheduler 以及 etcd。如下圖所示:

Kubernetes 是什麼以及其架構
  • API Server:顧名思義是用來處理 API 操作的,Kubernetes 中所有的元件都會和 API Server 進行連接配接,元件與元件之間一般不進行獨立的連接配接,都依賴于 API Server 進行消息的傳送
  • Controller:是控制器,它用來完成對叢集狀态的一些管理。比如剛剛我們提到的兩個例子之中,第一個自動對容器進行修複、第二個自動進行水準擴張,都是由 Kubernetes 中的 Controller 來進行完成的
  • Scheduler:是排程器,“排程器”顧名思義就是完成排程的操作,就是我們剛才介紹的第一個例子中,把一個使用者送出的 Container,依據它對 CPU、對 memory 請求大小,找一台合适的節點,進行放置
  • etcd:是一個分布式的一個存儲系統,API Server 中所需要的這些原資訊都被放置在 etcd 中,etcd 本身是一個高可用系統,通過 etcd 保證整個 Kubernetes 的 Master 元件的高可用性

  我們剛剛提到的 API Server,它本身在部署結構上是一個可以水準擴充的一個部署元件;Controller 是一個可以進行熱備的一個部署元件,它隻有一個 active,它的排程器也是相應的,雖然隻有一個 active,但是可以進行熱備。

Kubernetes 的架構:Node

Kubernetes 的 Node 是真正運作業務負載的,每個業務負載會以 Pod 的形式運作。等一下我會介紹一下 Pod 的概念。一個 Pod 中運作的一個或者多個容器,真正去運作這些 Pod 的元件的是叫做 kubelet,也就是 Node 上最為關鍵的元件,它通過 API Server 接收到所需要 Pod 運作的狀态,然後送出到我們下面畫的這個 Container Runtime 元件中。

Kubernetes 是什麼以及其架構

 在 OS 上去建立容器所需要運作的環境,最終把容器或者 Pod 運作起來,也需要對存儲跟網絡進行管理。Kubernetes 并不會直接進行網絡存儲的操作,他們會靠 Storage Plugin 或者是網絡的 Plugin 來進行操作。使用者自己或者雲廠商都會去寫相應的 Storage Plugin 或者 Network Plugin,去完成存儲操作或網絡操作。

在 Kubernetes 自己的環境中,也會有 Kubernetes 的 Network,它是為了提供 Service network 來進行搭網組網的。(等一下我們也會去介紹“service”這個概念。)真正完成 service 組網的元件的是 Kube-proxy,它是利用了 iptable 的能力來進行組建 Kubernetes 的 Network,就是 cluster network,以上就是 Node 上面的四個元件。

Kubernetes 的 Node 并不會直接和 user 進行 interaction,它的 interaction 隻會通過 Master。而 User 是通過 Master 向節點下發這些資訊的。Kubernetes 每個 Node 上,都會運作我們剛才提到的這幾個元件。

下面我們以一個例子再去看一下 Kubernetes 架構中的這些元件,是如何互相進行 interaction 的。

Kubernetes 是什麼以及其架構

使用者可以通過 UI 或者 CLI 送出一個 Pod 給 Kubernetes 進行部署,這個 Pod 請求首先會通過 CLI 或者 UI 送出給 Kubernetes API Server,下一步 API Server 會把這個資訊寫入到它的存儲系統 etcd,之後 Scheduler 會通過 API Server 的 watch 或者叫做 notification 機制得到這個資訊:有一個 Pod 需要被排程。

繼續閱讀