歡迎光臨
每天分享高質量文章

全視角瞭解基於容器的編排工具Kubernetes

Kubernetes在希臘語中是“船長”或者“水手”的意思,Kubernetes誕生於谷歌,2014年開源給了CNCF。它由Go語言開發,標的是建造一個執行大量容器生產環境的強大平臺。Kubernetes庫可以在GitHub[1]中找到。


什麼是Kubernetes

Kubernetes是支援Docker容器的開源編排系統,使用者可以用來管理叢集化容器應用。簡化例如部署、擴充套件、配置、版本管理和滾動升級等DevOps任務。大量考慮擴充套件性分散式應用都由執行於容器中的微服務構成。
容器提供一種將應用/微服務執行環境隔離的機制。但是容器仍然需要管理,以便實現排程,分配資源和負載均衡等功能。因此,資料一致性和網路配置複雜性對管理叢集化容器環境提出了很大挑戰。
Kubernetes在基礎架構之上提供了一層解決方案。Kubernetes使用標簽來標識物件,可以基於標識進行查詢。標簽是開放結構,可以用來指代角色,名稱和其它重要屬性。

Kubernetes Master

Kubernetes叢集中控制服務被稱為Master,或者控制面板(control panel),負責叢集管理和監控、更改、作業排程和時間回覆。

Kubernetes Master由執行在叢集單一節點上的四個行程構成,這節點被稱為Master節點。
Kube-apiserver
Master的大腦和Master的前端或者控制面板。Kube-apiserver實現RESTful API,透過manifest檔案轉化為json檔案。Manifest檔案生宣告應用狀態,例如意向記錄,驗證併在叢集內部署。Master對外暴露預設埠443,kubectl(命令列)可以透過此埠向Master傳送命令和查詢。
Cluster Store
Cluster Store透過etcd提供一致性儲存和狀態,是分散式、一致性,可觀察的模組。etcd是一個開源分散式kay-value資料庫,提供後臺叢集一致性和狀態管理的分散式系統。Kubernetes使用etcd作為叢集中的“可信源”,儲存和複製Kubernetes使用的叢集間資料。
Cluster Store也是用Go語言開發的,並使用Raft協議[2],幫助etcd從硬體失效和網路分割槽問題中恢復正常。
Kube-controller-manager
Kubernetes controller manager是Kubernetes中最核心模組,是Kubernetes控制器的控制器。透過API伺服器監控叢集狀態,並控制叢集狀態轉化。隨Kubernetes帶來的控制器包括replication controller、endpoints controller、namespace controller和service account controller。當變化發生時,controller讀取新狀態並完成實現新狀態的步驟。這些步驟可能包括擴充套件或者縮減應用規模和服務點等等。replication controller提供複製Pod所需的Pod模板,以及擴充套件或者縮減Pod的邏輯,也可用於序列部署。
Kube-scheduler
此模組負責監控新Pod並將負載分佈到叢集特定節點的操作。確保負載被正確排程到每個節點,並不會超出可用資源範圍。


Kubernetes Node

做具體工作的伺服器被稱為nodes。

每個叢集中node都執行兩個行程:
Kubelet
  • node上主要Kubernetes代理行程

  • 向叢集註冊node

  • 與API伺服器分配作業

  • 定義做作業Pod實體

  • 向master彙報

  • 透過暴露埠10255,監控kubelet狀態。

Kube-proxy
類似於節點的大腦,反映了每個節點網路服務。確保每個Pod或者自己的IP。如果一個Pod中有多個容器,他們會共享一個IP,併在一個服務中所有Pod之間負載均衡。


Kubernetes Objects

Pod
Pod是Kubernetes的基礎構成,是在叢集節點上部署的最基本單元。Pod提供容器之間隔離。一般來說每個Pod中只執行一個容器,但有時候容器之間是緊耦合的,需要在一個Pod中執行兩個容器。Pod之間透過網路接力實現與環境的互聯。每個Pod擁有唯一IP地址,Pod內容器共享網路空間,包括IP地址和網路埠。
Service
Kubernetes Pods一旦掛掉就無法複活。Kubernetes不得不維護應用狀態,當Pod出現問題,新Pod會被加入,但會有不同IP地址。這樣就要求Pod發現功能,由Service來提供。
Service在網路地址後隱藏了大量Pods,Pods可以不斷更替但是服務IP地址和埠不變。其他應用可以透過Kubernetes Service發現功能找到應用服務。
Kubernetes Service具有如下特點:
  • 永續性

  • 可發現

  • 負載均衡

  • 提供虛擬IP層

  • 透過標簽選擇定位Pod

捲(Volume)
捲是容器存放資訊的場所。容器在盤(on-disk)檔案是臨時的,一旦容器掛掉資訊就丟失。第二,在同一個Pod內執行容器之間共享資訊很困難。Kubernetes捲會在Pod內容器之間提供資料共享,即使容器重啟資料仍然線上。對應用來說,捲以本地檔案系統方式存在,可以用本地磁碟,EBS等方式實現。
名稱空間(Namespace)
名稱空間提供Kubernetes內部分組機制。Services、Pods、Replication controllers以及捲都可以執行在名稱空間中。提供叢集間某種程度的隔離。適用於多個團隊之間共享專案,提供了在不同使用者之間共享資源的一種方式。
總結

Kubernetes是微服務叢集和編排有力工具,儘管還處於相對初期階段,但是相信會帶來叢集架構管理方面的大量有用功能。
如果想基於Kubernetes部署容器化應用,可以從Minikube開始。Minikube是本地部署Kubernetes的一個工具。
相關連結:
  1. https://github.com/kubernetes/kubernetes

  2. https://raft.github.io/

原文連結:https://dzone.com/articles/a-complete-introduction-to-kubernetes-an-orchestra

Kubernetes入門與進階實戰培訓

本次培訓內容包括:Docker基礎、容器技術、Docker映象、資料共享與持久化、Docker三駕馬車、Docker實踐、Kubernetes基礎、Pod基礎與進階、常用物件操作、服務發現、Helm、Kubernetes核心元件原理分析、Kubernetes服務質量保證、排程詳解與應用場景、網路、基於Kubernetes的CI/CD、基於Kubernetes的配置管理等,點選瞭解具體培訓內容
6月22日正式上課,點選閱讀原文連結即可報名。
贊(0)

分享創造快樂