天天看點

【Kubernetes實踐指南】Kubernetes架構介紹

作為運維工程師,堅持學習才是寒冬中的生存之道。Kubernetes的浪潮已經來了,不管我們是否願意,生産中是否使用,Kubernetes已經不知不覺成為運維必備技能。本文介紹Kubernetes架構,作為入門的第一篇文章。

Kubernetes介紹

Kubernetes源于希臘語,意為“舵手”或“飛行員”,是用于自動部署,擴充和管理容器化應用程式的開源系統,由于K和S之間有8個字母,被簡稱為K8S。

Kubernetes建構在Google 15年生産環境經驗基礎之上,可以将Kubernetes看作為Google内部的容器管理平台Borg和Omega的開源版本,當然他們之間是有一些差異的。

Kubernetes系統架構

Kubernetes被設計為Master和Node兩個角色,Master為控制節點,Node為計算節點或者叫工作節點,在Master節點上有一個API Server服務,對外提供标準的RestAPI,這也是Kubernetes叢集的入口,意外着隻要和叢集進行互動必須連接配接到API Server上。

【Kubernetes實踐指南】Kubernetes架構介紹

Master節點介紹

Kubernetes Master節點主要有4個元件,API Server、Scheduler、Controller、etcd。如下圖所示:

【Kubernetes實踐指南】Kubernetes架構介紹

  • API Server:提供Kubernetes API接口,主要處理Rest操作以及更新Etcd中的對象。是所有資源增删改查的唯一入口。
  • Scheduler:綁定Pod到Node上,主要做資源排程。
  • Controller Manager:所有其他群集級别的功能,目前由控制器Manager執行。資源對象的自動化控制中心,Kubernetes叢集有很多控制器。
  • Etcd:所有持久化的狀态資訊存儲在- Etcd中,這個是Kubernetes叢集的資料庫。

    Node節點介紹

Node節點是Kubernetes叢集的工作節點,在Node節點上主要運作了Docker、Kubelet、kube-proxy三個服務(Fluentd請先忽略),如下圖所示:

【Kubernetes實踐指南】Kubernetes架構介紹
  • Docker Engine:負責節點的容器的管理工作,最終建立出來的是一個Docker容器。
  • Kubelet:安裝在Node上的代理服務,和API Server進行通信,用來管理Pods以及容器、鏡像、Volume等,實作對叢集對節點的管理。
  • Kube-proxy:安裝在Node上的網絡代理服務,提供網絡代理以及負載均衡,實作與Service通訊。

Kubernetes邏輯架構

在上面的介紹中提到像Pod、Service這些概念,在Kubernetes的系統架構圖中并沒有展現出來,這些可以了解為Kubernetes邏輯架構中的元件。也就是在Master和Node上并不具體存在的一個服務或者程序,但卻是Kubernetes的元件,也是我們的管理對象。主要有Pod、Service和各種控制器等。 PodPod是Kubernetes的最小管理單元,一個Pod可以包含一組容器和卷。雖然一個Pod裡面可以包含一個或者多個容器,但是Pod隻有一個IP位址,而且Pod重新開機後,IP位址會發生變化。

【Kubernetes實踐指南】Kubernetes架構介紹

Controller一個應用如果可以有一個或者多個Pod,就像你給某一個應用做叢集,叢集中的所有Pod是一模一樣的。Kubernetes中有很多控制器可以來管理Pod,例如下圖的Replication Controller可以控制Pod的副本數量,進而實作橫向擴充。

【Kubernetes實踐指南】Kubernetes架構介紹

Kubernetes中有很多控制器,後面的章節我們會逐漸講到,常用的控制器如下:

  • Replication Controller(新版本已經被ReplicaSet所替代)
  • ReplicaSet(新版本被封裝在Deployment中)
  • Deployment:封裝了Pod的副本管理、部署更新、復原、擴容、縮容等功能。
  • DaemonSet:保證所有的Node上有且隻有一個Pod在運作。
  • StatefulSet:有狀态的應用,為Pod提供唯一的辨別,它可以保證部署和scale的順序。
  • Job:使用Kubernetes運作單一任務。
  • CronJob:使用Kubernetes運作定時任務。

    Service

由于Pod的生命周期是短暫的,而且每次重新開機Pod的IP位址都會發生變化,而且一個Pod有多個副本,也就是說一個叢集中有了多個節點,就需要考慮負載均衡的問題。Kubernetes使用Service來實作Pod的通路,而且Service有一個Cluster IP,通常也稱之為VIP,是固定不變的。

【Kubernetes實踐指南】Kubernetes架構介紹

Kubernetes網絡介紹

在Kubernetes叢集中存在着三種網絡,分别是Node網絡、Pod網絡和Service網絡,這幾種網絡之間的通信需要依靠網絡插件,Kubernetes本身并沒有提供,社群提供了像Flannel、Calico、Canal等,後面章節會詳述。

Node網絡

Node網絡指的是Kubernetes Node節點本地的網絡,在本實驗環境中使用的是192.168.56.0/24這個網段,所有的Node和Master在該網段都可以正常通信。

Pod網絡

後面建立的Pod,每一個Pod都會有一個IP位址,這個IP位址網絡段被稱之為Pod網絡,如下圖所示。

【Kubernetes實踐指南】Kubernetes架構介紹

Service網絡

Service是為Pod提供通路和負載均衡的網絡位址段,如下圖所示。

【Kubernetes實踐指南】Kubernetes架構介紹

Kubernetes的元件和知識絕非如此,快速入門可以先了解這麼多,下一章節,我們先快速的部署一個Kubernetes叢集。

繼續閱讀