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

全視角瞭解基於容器的編排工具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)

分享創造快樂