首頁 > 云計算 > 正文

圖文:你女朋友也能看懂的 Kubernetes !

2020-02-17 10:15:52  來源:知乎

摘要:最近,我開始了 Kubernetes 之旅,并且希望更好地了解其內部原理。我在這些方面做了一個演講!
關鍵詞: 云計算 容器 Kubernetes
  最近,我開始了 Kubernetes 之旅,并且希望更好地了解其內部原理。我在這些方面做了一個演講!
 
  容器
 
  在我們嘗試了解 Kubernetes 之前,讓我們花一點時間來澄清容器是什么,以及它們為什么如此受歡迎。
 
  畢竟,在不知道容器是什么的情況下談論容器編排器(Kubernetes)是沒有意義的!
\
容器
 
  “容器”是一個用來存放你放入的所有物品的容器。像應用程序代碼,依賴庫以及它的依賴關系一直到內核。
 
  這里的關鍵概念是隔離。將所有內容與其余內容隔離開,以便你更好地控制它們。
 
  容器提供三種隔離類型:
 
  • 工作區隔離(流程,網絡)
  • 資源隔離(CPU,內存)
  • 文件系統隔離(聯合文件系統)
 
  考慮一下像 VM 一樣的容器。它們精簡,快速(啟動)且體積小。而且,所有這些都沒有構建起來。
 
  取而代之的是,他們使用 Linux 系統中存在的結構(例如 cgroups,namespaces)在其上構建了一個不錯的抽象。
 
  現在我們知道什么是容器了,很容易理解為什么它們很受歡迎。不僅可以分發應用程序的二進制/代碼,還可以以實用的方式交付運行應用程序所需的整個環境。
 
  因為可以將容器構建為非常小的單元,解決“在我的機器上工作”問題的完美解決方案。
 
  什么時候使用 Kubernetes?
 
  容器一切都很好,軟件開發人員的生活現在要好很多。那么,為什么我們需要另一項技術,如 Kubernetes 這樣的容器編排工具呢?
\
  當進入某個狀態時,你需要用到它來管理眾多容器。
 
  問:我的前端容器在哪里,我要運行幾個?
 
  答:很難說,使用容器編排工具。
 
  問:如何使前端容器與新創建的后端容器對話?
 
  答:對 IP 進行硬編碼,或者,使用容器編排工具。
 
  問:如何進行滾動升級?
 
  答:在每個步驟中手動握住,或者,使用容器編排工具。
 
  為什么我更喜歡 Kubernetes
\
  有很多容器編排工具,例如 Docker Swarm,Mesos 和 Kubernetes。我的選擇是 Kubernetes(因此有了本文),因為 Kubernetes 是……
 
  就像樂高積木一樣,它不僅具有大規模運行容器編排所需的組件,而且還具有使用自定義組件交換內部和外部不同組件的靈活性。
 
  想要擁有一個自定義的調度程序,也很方便。需要具有新的資源類型,編寫一個 CRD。此外,社區非?;钴S,并且工具迅速發展。
 
  Kubernetes 架構
\
  每個 Kubernetes 集群都有兩種類型的節點,主節點和工作節點。顧名思義,主節點是在工作程序運行有效負載(應用程序)的地方控制和監視群集。
 
  集群可以與單個主節點一起工作,但是最好擁有三個以實現高可用性(稱為 HA 群集)。
 
  讓我們仔細看一下主節點及其組成:
\
 ?、賓tcd:數據庫,用于存儲有關 Kubernetes 對象,其當前狀態,訪問信息和其他集群配置信息的所有數據。
 
 ?、贏PI Server:RESTful API 服務器,公開端點以操作整個集群。主節點和工作節點中的幾乎所有組件都與該服務器通信以執行其職責。
 
 ?、壅{度程序:負責決定哪個有效負載需要在哪臺機器上運行。
 
 ?、芸刂乒芾砥鳎哼@是一個控制循環,它監視集群的狀態(通過調用 API 服務器來獲取此數據)并采取措施將其置于預期狀態。
\
 ?、輐ubelet:是工作節點的心臟。它與主節點 API 服務器通信并運行為其節點安排的容器。
 
 ?、辦ube-proxy:使用 IP 表/IPVS 處理 Pod 的網絡需求。
 
 ?、逷od:運行所有容器的 Kubernetes 的功勞。如果沒有 Pod 的抽象,就無法在 Kubernetes 中運行容器。Pod 添加了對容器之間的 Kuberenetes 聯網方式至關重要的功能。
\
快樂的 Pod
 
  一個 Pod 可以有多個容器,并且在這些容器中運行的所有服務器都可以將彼此視為本地主機。
 
  這使得將應用程序的不同方面分離為單獨的容器,并將它們全部作為一個容器加載在一起非常方便。
 
  有多種不同的 Pod 模式,例如 Sidecar,Proxy 和大使,可以滿足不同的需求。查看這篇文章[1]可以了解有關它們的更多信息。
 
  Pod 網絡接口提供了一種將其與同一節點和其他工作節點中的其他 Pod 通信的機制。
\
  而且,每個 Pod 都將分配有自己的 IP 地址,kube-proxy 將使用該 IP 地址來路由流量,而且此 IP 地址僅在群集中可見。
 
  所有容器也都可以看到安裝在容器內的卷,有時可以使用這些卷在容器之間進行異步通信。
 
  例如,假設你的應用是照片上傳應用(例如 Instagram),它可以將這些文件保存在一個卷中,而同一 Pod 中的另一個容器可以監視該卷中的新文件,并開始對其進行處理以創建多種尺寸,將它們上傳到云存儲。
 
  控制器
 
  在 Kubernetes 中,有很多控制器,例如 ReplicaSet,Replication Controllers,Deployments,StatefulSets 和 Service。
 
  這些是以一種或另一種方式控制 Pod 的對象。讓我們看一些重要的。
 
  (1) ReplicaSet
\
ReplicaSet 做自己擅長的事情,復制 Pod
 
  該控制器的主要職責是創建給定 Pod 的副本,如果 Pod 因某種原因死亡,則會通知該控制器,并立即跳入操作以創建新的 Pod。
 
  (2) Deployment
\
試圖控制 ReplicaSet 的部署(頭發凌亂)
 
  部署是一個高階對象,它使用 ReplicaSet 來管理副本。它通過放大新的 ReplicaSet 和縮小(最終刪除)現有的 ReplicaSet 來提供滾動升級。
 
  (3) Service
\
表示為無人機的服務,將數據包傳遞到相應的 Pod
 
  服務是一個控制器對象,其主要職責是在將“數據包”分發到相應節點時充當負載平衡器。
 
  基本上,它是一種控制器構造,用于在工作節點之間對相似的 Pod(通常由 Pod 標簽標識)進行分組。
 
  假設你的“前端”應用程序想與“后端”應用程序通信,則每個應用程序可能有許多正在運行的實例。
 
  你不必擔心對每個后端 Pod 的 IP 進行硬編碼,而是將數據包發送到后端服務,然后由后端服務決定如何進行負載平衡并相應地轉發。
 
  PS:請注意,服務更像是一個虛擬實體,因為所有數據包路由均由 IP 表/IPVS/CNI 插件處理。
 
  它只是使它更容易被視為一個真正的實體,讓它們脫穎而出以了解其在 Kubernetes 生態系統中的作用。
 
  (4) Ingress
\
進入一個浮動平臺,所有數據包都通過該平臺流入集群
 
  入口控制器是與外界聯系的單點,可以與集群中運行的所有服務進行對話。這使我們可以輕松地在單個位置設置安全策略,監視甚至記錄日志。
 
  PS:Kubernetes 中還有很多其他控制器對象,例如 DaemonSets,StatefulSets 和 Jobs。

第三十屆CIO班招生
法國布雷斯特商學院碩士班招生
北達軟EXIN網絡空間與IT安全基礎認證培訓
北達軟EXIN DevOps Professional認證培訓
責編:baiyl
股票行情实时查询软件下载