色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文詳解Kubernetes架構原理

馬哥Linux運維 ? 來源:高效運維 ? 作者:高效運維 ? 2022-07-14 09:50 ? 次閱讀

打開這篇文章的同學,想必對 Docker 都不會陌生。Docker 是一種虛擬容器技術,它上手比較簡單,只需在宿主機上起一個 DockerEngine,然后就能愉快的玩耍了,如:拉鏡像、起容器、掛載數據、映射端口等等。相對于 Kubernetes(K8S)的上手,可謂簡單很多。

那么 K8S 是什么,又為什么上手難度大?K8S 是一個基于容器技術的分布式集群管理系統,是谷歌幾十年來大規模應用容器技術的經驗積累和升華的一個重要成果。所以為了能夠支持大規模的集群管理,它承載了很多的組件,而且分布式本身的復雜度就很高。又因為 K8S 是谷歌出品的,依賴了很多谷歌自己的鏡像,所以對于國內的同學環境搭建的難度又增加了一層。

下面,我們帶著問題,一步步來看 K8S 中到底有哪些東西?

首先,既然是個分布式系統,那勢必有多個 Node 節點(物理主機或虛擬機),它們共同組成一個分布式集群,并且這些節點中會有一個 Master 節點,由它來統一管理 Node 節點。

如圖所示:

ff2ade1e-02b0-11ed-ba43-dac502259ad0.jpg

問題一:主節點和工作節點是如何通信的呢?

首先,Master 節點啟動時,會運行一個kube-apiserver進程,它提供了集群管理的 API 接口,是集群內各個功能模塊之間數據交互和通信的中心樞紐,并且它頁提供了完備的集群安全機制(后面還會講到)。

在 Node 節點上,使用 K8S 中的 kubelet 組件,在每個 Node 節點上都會運行一個 kubelet 進程,它負責向 Master 匯報自身節點的運行情況,如 Node 節點的注冊、終止、定時上報健康狀況等,以及接收 Master 發出的命令,創建相應 Pod。

在 K8S 中,Pod 是最基本的操作單元,它與 docker 的容器有略微的不同,因為 Pod 可能包含一個或多個容器(可以是 docker 容器),這些內部的容器是共享網絡資源的,即可以通過 localhost 進行相互訪問。

關于 Pod 內是如何做到網絡共享的,每個 Pod 啟動,內部都會啟動一個 pause 容器(google的一個鏡像),它使用默認的網絡模式,而其他容器的網絡都設置給它,以此來完成網絡的共享問題。

如圖所示:

ff386f16-02b0-11ed-ba43-dac502259ad0.jpg

問題二:Master 是如何將 Pod 調度到指定的 Node 上的?

該工作由 kube-scheduler 來完成,整個調度過程通過執行一些列復雜的算法最終為每個 Pod 計算出一個最佳的目標 Node,該過程由 kube-scheduler 進程自動完成。常見的有輪詢調度(RR)。當然也有可能,我們需要將 Pod 調度到一個指定的 Node 上,我們可以通過節點的標簽(Label)和 Pod 的 nodeSelector 屬性的相互匹配,來達到指定的效果。

如圖所示:

ff4aec36-02b0-11ed-ba43-dac502259ad0.jpg

關于標簽(Label)與選擇器(Selector)的概念,后面會進一步介紹

問題三:各節點、Pod 的信息都是統一維護在哪里的,由誰來維護?

從上面的 Pod 調度的角度看,我們得有一個存儲中心,用來存儲各節點資源使用情況、健康狀態、以及各 Pod 的基本信息等,這樣 Pod 的調度來能正常進行。

在 K8S 中,采用 etcd 組件作為一個高可用強一致性的存儲倉庫,該組件可以內置在 K8S 中,也可以外部搭建供 K8S 使用。

集群上的所有配置信息都存儲在了 etcd,為了考慮各個組件的相對獨立,以及整體的維護性,對于這些存儲數據的增、刪、改、查,統一由 kube-apiserver 來進行調用,apiserver 也提供了 REST 的支持,不僅對各個內部組件提供服務外,還對集群外部用戶暴露服務。

外部用戶可以通過 REST 接口,或者 kubectl 命令行工具進行集群管理,其內在都是與 apiserver 進行通信。

如圖所示:

ff597850-02b0-11ed-ba43-dac502259ad0.jpg

問題四:外部用戶如何訪問集群內運行的 Pod ?

前面講了外部用戶如何管理 K8S,而我們更關心的是內部運行的 Pod 如何對外訪問。使用過Docker的同學應該知道,如果使用 bridge 模式,在容器創建時,都會分配一個虛擬 IP,該 IP 外部是沒法訪問到的,我們需要做一層端口映射,將容器內端口與宿主機端口進行映射綁定,這樣外部通過訪問宿主機的指定端口,就可以訪問到內部容器端口了。

那么,K8S 的外部訪問是否也是這樣實現的?答案是否定的,K8S 中情況要復雜一些。因為上面講的 Docker是單機模式下的,而且一個容器對外就暴露一個服務。在分布式集群下,一個服務往往由多個 Application 提供,用來分擔訪問壓力,而且這些 Application 可能會分布在多個節點上,這樣又涉及到了跨主機的通信。

這里,K8S 引入了 Service 的概念,將多個相同的 Pod 包裝成一個完整的 service 對外提供服務,至于獲取到這些相同的 Pod,每個 Pod 啟動時都會設置 labels 屬性,在 Service 中我們通過選擇器 Selector,選擇具有相同 Name 標簽屬性的 Pod,作為整體服務,并將服務信息通過 Apiserver 存入 etcd 中,該工作由 Service Controller 來完成。同時,每個節點上會啟動一個 kube-proxy 進程,由它來負責服務地址到 Pod 地址的代理以及負載均衡等工作。

如圖所示:

ff697c78-02b0-11ed-ba43-dac502259ad0.jpg

問題五:Pod 如何動態擴容和縮放?

既然知道了服務是由 Pod 組成的,那么服務的擴容也就意味著 Pod 的擴容。通俗點講,就是在需要時將 Pod 復制多份,在不需要后,將 Pod 縮減至指定份數。K8S 中通過 Replication Controller 來進行管理,為每個 Pod 設置一個期望的副本數,當實際副本數與期望不符時,就動態的進行數量調整,以達到期望值。期望數值可以由我們手動更新,或自動擴容代理來完成。

如圖所示:

ff88409a-02b0-11ed-ba43-dac502259ad0.jpg

問題六:各個組件之間是如何相互協作的?

最后,講一下 kube-controller-manager 這個進程的作用。我們知道了 ectd 是作為集群數據的存儲中心, apiserver 是管理數據中心,作為其他進程與數據中心通信的橋梁。而 Service Controller、Replication Controller 這些統一交由 kube-controller-manager 來管理,kube-controller-manager 作為一個守護進程,每個 Controller 都是一個控制循環,通過 apiserver 監視集群的共享狀態,并嘗試將實際狀態與期望不符的進行改變。關于 Controller,manager 中還包含了 Node 節點控制器(Node Controller)、資源配額管控制器(ResourceQuota Controller)、命名空間控制器(Namespace Controller)等。

如圖所示:

ff98a994-02b0-11ed-ba43-dac502259ad0.jpg

總結

本文通過問答的方式,沒有涉及任何深入的實現細節,從整體的角度,概念性的介紹了 K8S 中涉及的基本概念,其中使用相關的包括有:

Node

Pod

Label

Selector

Replication Controller

Service Controller

ResourceQuota Controller

Namespace Controller

Node Controller

以及運行進程相關的有:

kube-apiserver

kube-controller-manager

kube-scheduler

kubelet

kube-proxy

pause

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 谷歌
    +關注

    關注

    27

    文章

    6161

    瀏覽量

    105300
  • 容器
    +關注

    關注

    0

    文章

    495

    瀏覽量

    22060
  • Docker
    +關注

    關注

    0

    文章

    457

    瀏覽量

    11846
  • kubernetes
    +關注

    關注

    0

    文章

    224

    瀏覽量

    8712

原文標題:關于 Kubernetes 架構原理,這是我看過最清晰明了的一篇

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    寶藏級微服務架構工具合集

    寶藏級熱門微服務架構工具包含Spring Boot、Eclipse Vert.X、Kubernetes、Tyk、RabbitMQ、Apache Kafka等。其中,Spring Boot簡化了微服
    的頭像 發表于 12-21 16:33 ?68次閱讀

    詳解Arm架構Armv9.6-A中的最新功能

    Arm CPU 是當今人工智能 (AI) 賦能軟件的關鍵,它可解釋、處理和執行指令。Arm 指令集架構 (ISA) 作為硬件和軟件的接口,指示處理器做什么和怎么做。Arm ISA 持續演進以滿足現代
    的頭像 發表于 12-17 10:22 ?664次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>詳解</b>Arm<b class='flag-5'>架構</b>Armv9.6-A中的最新功能

    看懂SoC的架構

    、SoC 架構圖:核心功能和設計目標 SoC 是基于通用處理器這樣的思路進行設計的,與 PC 設計思路樣。即通用處理器是由 CORE + MEM 兩部分組成,修改軟件來實現不同的功能,電腦還是
    的頭像 發表于 11-29 09:57 ?552次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>看懂SoC的<b class='flag-5'>架構</b>

    智慧公交是什么?帶你詳解智慧公交的解決方案!

    智慧公交是什么?帶你詳解智慧公交的解決方案!
    的頭像 發表于 11-05 12:26 ?271次閱讀
    智慧公交是什么?<b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>詳解</b>智慧公交的解決方案!

    CPK為什么要大于1.33?詳解CPK計算

    原文標題:CPK為什么要大于1.33?詳解CPK計算
    的頭像 發表于 11-01 11:08 ?307次閱讀

    Kubernetes集群搭建容器云需要幾臺服務器?

    Kubernetes集群搭建容器云需要幾臺服務器?至少需要4臺服務器。搭建容器云所需的服務器數量以及具體的搭建步驟,會根據所選用的技術棧、業務規模、架構設計以及安全需求等因素而有所不同。以下是個基于
    的頭像 發表于 10-21 10:06 ?154次閱讀

    使用Velero備份Kubernetes集群

    Velero 是 heptio 團隊(被 VMWare 收購)開源的 Kubernetes 集群備份、遷移工具。
    的頭像 發表于 08-05 15:43 ?349次閱讀
    使用Velero備份<b class='flag-5'>Kubernetes</b>集群

    如何使用Kubeadm命令在PetaExpress Ubuntu系統上安裝Kubernetes集群

    Kubernetes,通常縮寫為K8s,是個開源的容器編排平臺,旨在自動化容器化應用的部署、擴展和管理。有了Kubernetes,您可以輕松地部署、更新和擴展應用,而無需擔心底層基礎設施。
    的頭像 發表于 07-15 13:31 ?858次閱讀
    如何使用Kubeadm命令在PetaExpress Ubuntu系統上安裝<b class='flag-5'>Kubernetes</b>集群

    詳解CPU概念及運作原理

    )和RISC(精簡指令集)兩大類,CISC型CPU目前主要是x86架構,RISC型CPU主要包括ARM、RISC-V、MIPS、POWER、Alpha架構等。
    發表于 01-16 10:59 ?1947次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>詳解</b>CPU概念及運作原理

    Kubernetes Gateway API攻略教程

    Kubernetes Gateway API 剛剛 GA,旨在改進將集群服務暴露給外部的過程。這其中包括套更標準、更強大的 API資源,用于管理已暴露的服務。在這篇文章中,我將介紹 Gateway
    的頭像 發表于 01-12 11:32 ?882次閱讀
    <b class='flag-5'>Kubernetes</b> Gateway API攻略教程

    配置Kubernetes中Pod使用代理的兩種常見方式

    在企業網絡環境中進行Kubernetes集群的管理時,經常會遇到需要配置Pods通過HTTP代理服務器訪問Internet的情況。這可能是由于各種原因,如安全策略限制、網絡架構要求或者訪問特定資源
    的頭像 發表于 01-05 11:22 ?1127次閱讀
    配置<b class='flag-5'>Kubernetes</b>中Pod使用代理的兩種常見方式

    使用Jenkins和單個模板部署多個Kubernetes組件

    在持續集成和部署中,我們通常需要部署多個實例或組件到Kubernetes集群中。通過Jenkins的管道腳本,我們可以自動化這個過程。在本文中,我將演示如何使用Jenkins Pipeline及單個
    的頭像 發表于 01-02 11:40 ?760次閱讀
    使用Jenkins和單個模板部署多個<b class='flag-5'>Kubernetes</b>組件

    詳解pcb回流焊溫度選擇與調整

    詳解pcb回流焊溫度選擇與調整
    的頭像 發表于 12-29 10:20 ?1642次閱讀

    詳解LLM模型基本架構

    LLM 中非常重要的個概念是 Token,我們輸入給 LLM 和它輸出的都是 Token。Token 在這里可以看做語言的基本單位,中文般是詞或字(其實字也是詞)。比如:”我們喜歡 Rust
    發表于 12-25 10:38 ?3102次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>詳解</b>LLM模型基本<b class='flag-5'>架構</b>

    Kubernetes RBAC:掌握權限管理的精髓

    Kubernetes RBAC(Role-Based Access Control)是 Kubernetes項關鍵的安全功能,它通過細粒度的權限控制機制,確保集群資源僅被授權的用戶或服務賬號訪問。
    的頭像 發表于 12-25 09:43 ?472次閱讀
    主站蜘蛛池模板: 久章草一区二区| 97视频在线免费播放| 亚洲欧美国产综合在线一区| 亚洲AV无码乱码国产麻豆P| 亚洲乱码日产精品BD在线下载| 亚洲黄色大片| 在线观看成人免费视频| 99久久99久久久精品久久| 都市妖奇谈有声| 好大快用力深一点h视频| 久久亚洲免费视频| 啊灬啊别停灬用力啊在线观看视频 | 日日摸夜夜嗷嗷叫日日拍| 手机在线免费看毛片| 亚洲欧美日韩高清中文在线| 中文字幕免费在线视频| a在线视频免费观看| 国产成人无码免费精品果冻传媒 | 高清国语自产拍免费| 国产午夜三级一区二区三| 久久久久久电影| 全黄H全肉细节文NP| 亚洲AV无码一区二区三区牛牛| 2019夜夜| 99久久久国产精品免费调教| 国产精品1卡二卡三卡四卡乱码 | 国产精品成人影院| 久久久综合中文字幕久久| 热99RE久久精品国产| 亚洲你我色| MMM日本兽交| 国产在线精品亚洲第一区| 男同志在线观看| 亚洲 日韩 在线 国产 精品| 97精品视频| 国产欧美另类久久久品| 男女做爽爽爽视频免费软件| 校草让我脱了内裤给全班看| 999资源站| 果冻传媒最新视频在线观看 | 男人就爱吃这套下载|