天天看點

kubernetes大概的工作原理

先放一張Kubernetes的架構圖:

kubernetes大概的工作原理

整體來看,是一個老大,多個幹活的這種結構,基本上所有的分布式系統都是這樣,但是裡面的元件名稱就紛繁複雜,下面将一一解析。

1、中繼資料存儲與叢集維護

作為一個叢集系統,總要有一個統一的地方維護整個叢集以及任務的中繼資料。而且作為叢集系統的控制節點,為了高可用性,往往存在多個Master,在多個Master中間,總要有一個Leader。

在Kubernetes裡面,統一的存儲使用etcd來儲存,Leader的選舉也是通過etcd進行,因而有apiserver有參數--etcd-servers,controller和scheduler都有參數--master string指向apiserver,并且有參數--leader-elect選舉出Leader,也會有熟悉的--address ip。

2、API層與指令行

作為一個分布式系統,每一層都會有自己的API,但是對外往往需要一個統一的API接口層,一般除了酷酷的界面之外,為了自動化,往往會有一個指令行可以執行操作,其實指令裡面封裝的也是對API的調用。

對于Kubernetes,API層是一個單獨的程序apiserver提供,認證和鑒權也是在這一層實作的,所有對于kubernetes的管理平台的通路都是通過apiserver這一層進行的。

對于指令行,kubernetes是kubectl,通過向apiserver調用執行操作,例如pod,service,deployment等。Kubernetes也有自己的類似package的管理,Kubernetes Helm,但是指令就變成了helm了。

3、排程

當運作一個容器的時候,放在哪台節點上,這個過程是排程。對于Kubernetes,排程是由一個單獨的程序scheduler負責的。

Kubernetes也支援通過對Node設定Label,進而将pod放在某些節點上。另外kubernetes還有NodeAffinity:

  • RequiredDuringSchedulingRequiredDuringExecution:在排程的時候必須部署到某些節點,運作期如果條件不滿足則重新排程
  • RequiredDuringSchedulingIgnoredDuringExecution :在排程的時候必須部署到某些節點,運作期就算了。
  • PreferredDuringSchedulingIgnoredDuringExecution :在排程的時候最好部署到某些節點,運作期就算了。

4、副本與彈性伸縮

容器如果部署無狀态服務,一個好處就是可以多副本,并且可以彈性伸縮。

在Kubernetes裡面,副本數目是以pod為機關的,由controller程序控制,可以通過建立一個Deployment來控制副本數。

Kubernetes也可以實作autoscaling。有一個元件Horizontal Pod Autoscaling,可以通過監控CPU的使用情況動态調整Pod的數量。

5、編排

為了能夠通過編排檔案一鍵建立整個應用,需要有編排功能。Kubernetes的編排是基于yml檔案。

6、服務發現與DNS

容器平台的一個重要的功能是服務發現,也即當容器的位址改變的時候,可以自動進行服務之間的關聯。

一般的服務發現首先要通過DNS将服務名和應用關聯起來,可以基于DNS對一個服務的多個應用進行内部負載均衡,也有直接加一個内部負載均衡器來做這件事情。

Kubernetes的DNS元件是通過skyDNS實作的,負載均衡是通過将DNS轉化為VIP,有個内置的負載均衡器kube-proxy來完成這件事情。

7、容器

Kubernetes支援Docker、RKT等多種容器格式。

8、網絡

容器的網絡配置有Docker Libnetwork Container Network Model(CNM)和Container Network Interface(CNI)兩個陣營。Docker Libnetwork的優勢就是原生,而且和Docker容器生命周期結合緊密;缺點也可以了解為是原生,被Docker“綁架”。Kubernetes屬于CNI陣營,CNI的優勢是相容其他容器技術(e.g. rkt)及上層編排系統(Kuberneres & Mesos),而且社群活躍勢頭迅猛,缺點是非Docker原生。

9、存儲

Kubernetes可以建立Persistent Volumes,支援GCE,AWS,NFS,GlusterFS,Ceph等。

10、監控

容器的監控中Prometheus +cadvisor是主流的方案,而cadvisor來自Kubernetes的一個元件。

11、大資料與包管理

在kubernetes裡面部署大資料可以參考https://github.com/kubernetes/examples

12、負載均衡

這裡的負載均衡指的是外部負載均衡。在kubernetes中,外部負載均衡器是通過一個ingress controller根據請求進行建立,如果在雲平台例如GCE,可建立雲平台的負載均衡器,雲平台的負載均衡器可通過NodePort連接配接到後端的Service。

13、節點

kubernetes的Node上跑的是kubelet。

14、更新與復原

所有的容器平台對于容器多副本的更新全部都是要滾動更新,在Kubernetes裡面,同樣有對rolling update的支援。

網易雲基于Kubernetes的容器服務為使用者提供了無伺服器容器,讓企業能夠快速部署業務,輕松運維服務。容器服務支援彈性伸縮、垂直擴容、灰階更新、服務發現、服務編排、錯誤恢複及性能監測等功能。點選可免費試用

網易雲免費體驗館,0成本體驗20+款雲産品!

更多網易研發、産品、營運經驗分享請通路網易雲社群。

相關文章:

【推薦】 KEUC首次落地中國,網易雲深度剖析Kubernetes優化與實踐

【推薦】 棋牌遊戲大咖會:人工智能與營運、安全方面的那些事

【推薦】 21分鐘學會寫編譯器

繼續閱讀