91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

一文詳解Kubernetes架構(gòu)原理

馬哥Linux運維 ? 來源:高效運維 ? 作者:高效運維 ? 2022-07-14 09:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

如圖所示:

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

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

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

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

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

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

如圖所示:

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

問題二:Master 是如何將 Pod 調(diào)度到指定的 Node 上的?

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

如圖所示:

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

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

問題三:各節(jié)點、Pod 的信息都是統(tǒng)一維護在哪里的,由誰來維護?

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

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

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

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

如圖所示:

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

問題四:外部用戶如何訪問集群內(nèi)運行的 Pod ?

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

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

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

如圖所示:

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

問題五:Pod 如何動態(tài)擴容和縮放?

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

如圖所示:

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

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

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

如圖所示:

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

總結(jié)

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

Node

Pod

Label

Selector

Replication Controller

Service Controller

ResourceQuota Controller

Namespace Controller

Node Controller

以及運行進程相關(guān)的有:

kube-apiserver

kube-controller-manager

kube-scheduler

kubelet

kube-proxy

pause

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

    關(guān)注

    27

    文章

    6254

    瀏覽量

    111485
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    532

    瀏覽量

    22970
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    532

    瀏覽量

    14260
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    263

    瀏覽量

    9495

原文標題:關(guān)于 Kubernetes 架構(gòu)原理,這是我看過最清晰明了的一篇

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    從“人機交互”到“數(shù)字預(yù)演”:詳解 HMI、SCADA 與虛擬調(diào)試的閉環(huán)架構(gòu)

    從“人機交互”到“數(shù)字預(yù)演”:詳解 HMI、SCADA 與虛擬調(diào)試的閉環(huán)架構(gòu)
    的頭像 發(fā)表于 03-05 11:36 ?119次閱讀
    從“人機交互”到“數(shù)字預(yù)演”:<b class='flag-5'>詳解</b> HMI、SCADA 與虛擬調(diào)試的閉環(huán)<b class='flag-5'>架構(gòu)</b>

    Kubernetes Pod調(diào)度策略原理與落地指南

    Pod調(diào)度是Kubernetes的核心機制之,決定了Pod最終運行在哪個節(jié)點上。默認調(diào)度器kube-scheduler通過系列預(yù)選(Filtering)和優(yōu)選(Scoring)算法完成調(diào)度決策,但默認行為在生產(chǎn)環(huán)境中往往不夠
    的頭像 發(fā)表于 02-27 11:08 ?166次閱讀

    KubePi:開源Kubernetes可視化管理面板,讓集群管理如此簡單

    KubePi:開源Kubernetes可視化管理面板,讓集群管理如此簡單 在云原生時代,Kubernetes已成為容器編排的事實標準,但其復(fù)雜性卻讓許多開發(fā)者望而卻步。KubePi作為款現(xiàn)代化
    發(fā)表于 02-11 12:53

    Kubernetes kubectl命令行工具詳解

    kubectl是Kubernetes官方提供的命令行工具,作為與Kubernetes集群交互的主要接口,它通過調(diào)用Kubernetes API Server實現(xiàn)對集群資源的全面管理。在生產(chǎn)環(huán)境中,運維工程師需要熟練掌握kubec
    的頭像 發(fā)表于 02-02 16:40 ?445次閱讀

    香港服務(wù)器支持Docker和Kubernetes嗎?

    在云原生技術(shù)成為主流的今天,Docker和Kubernetes(K8s)已成為現(xiàn)代化應(yīng)用開發(fā)和部署的事實標準。對于選擇香港服務(wù)器的開發(fā)者與企業(yè)而言,個核心問題是:香港服務(wù)器能否完美支持Docker
    的頭像 發(fā)表于 10-21 15:47 ?701次閱讀

    高效管理Kubernetes集群的實用技巧

    作為名經(jīng)驗豐富的運維工程師,我深知在日常的Kubernetes集群管理中,熟練掌握kubectl命令是提升工作效率的關(guān)鍵。今天,我將分享15個經(jīng)過實戰(zhàn)檢驗的kubectl實用技巧,幫助你像藝術(shù)家樣優(yōu)雅地管理K8s集群。
    的頭像 發(fā)表于 08-13 15:57 ?950次閱讀

    生產(chǎn)環(huán)境中Kubernetes容器安全的最佳實踐

    隨著容器化技術(shù)的快速發(fā)展,Kubernetes已成為企業(yè)級容器編排的首選平臺。然而,在享受Kubernetes帶來的便利性和可擴展性的同時,安全問題也日益凸顯。本文將從運維工程師的角度,深入探討生產(chǎn)環(huán)境中Kubernetes容器
    的頭像 發(fā)表于 07-14 11:09 ?744次閱讀

    樹莓派部署 Kubernetes:通過 UDM Pro 實現(xiàn) BGP 負載均衡!

    最近,我將家庭實驗室的架構(gòu)核心切換為組樹莓派。盡管在樹莓派上運行的Kubernetes發(fā)行版眾多,但在資源受限的設(shè)備上運行Kubernetes時,控制平面的開銷是
    的頭像 發(fā)表于 06-25 18:00 ?970次閱讀
    樹莓派部署 <b class='flag-5'>Kubernetes</b>:通過 UDM Pro 實現(xiàn) BGP 負載均衡!

    k8s網(wǎng)絡(luò)的基本介紹

    Kubernetes網(wǎng)絡(luò)是指在Kubernetes集群中不同組件之間進行通信和交互的網(wǎng)絡(luò)架構(gòu)。
    的頭像 發(fā)表于 06-16 13:42 ?956次閱讀

    詳解Kubernetes中的Pod調(diào)度親和性

    Kubernetes(K8s)中,Pod 調(diào)度親和性(Affinity) 是種高級調(diào)度策略,用于控制 Pod 與節(jié)點(Node)或其他 Pod 之間的關(guān)聯(lián)(親和)或反關(guān)聯(lián)(反親和)關(guān)系。通過親和性規(guī)則,管理員可以更精細地控制 Pod 的調(diào)度行為,滿足業(yè)務(wù)的拓撲約束、
    的頭像 發(fā)表于 06-07 13:56 ?959次閱讀

    【必看】開關(guān)電源中每個元器件的計算+51頁圖文詳解

    開關(guān)電源的各個元器件怎么計算?損耗怎么估算?散熱器的大小怎么計算? 51頁圖文詳解,帶你弄懂! 純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關(guān)注、點贊、評論支持
    發(fā)表于 05-12 16:20

    Kubernetes Helm入門指南

    Helm 是 Kubernetes 的包管理工具,它允許開發(fā)者和系統(tǒng)管理員通過定義、打包和部署應(yīng)用程序來簡化 Kubernetes 應(yīng)用的管理工作。Helm 的出現(xiàn)是為了解決在 Kubernetes
    的頭像 發(fā)表于 04-30 13:42 ?3102次閱讀
    <b class='flag-5'>Kubernetes</b> Helm入門指南

    如何在基于Arm Neoverse平臺的CPU上構(gòu)建分布式Kubernetes集群

    在本文中,我們將以 X(原 Twitter)為例,演示如何在基于 Arm Neoverse 平臺的 CPU 上構(gòu)建分布式 Kubernetes 集群,以根據(jù)推實時監(jiān)控情緒變化。如此來,你可以充分利用 Arm Neoverse
    的頭像 發(fā)表于 03-25 15:58 ?844次閱讀
    如何在基于Arm Neoverse平臺的CPU上構(gòu)建分布式<b class='flag-5'>Kubernetes</b>集群

    Kubernetes中部署MySQL集群

    般情況下 Kubernetes 可以通過 ReplicaSet 以個 Pod 模板創(chuàng)建多個 pod 副本,但是它們都是無狀態(tài)的,任何時候它們都可以被個全新的 pod 替換。
    的頭像 發(fā)表于 03-18 16:22 ?799次閱讀
    <b class='flag-5'>Kubernetes</b>中部署MySQL集群

    Kubernetes包管理工具Helm的安裝和使用

    Helm 可以幫助我們管理 Kubernetes 應(yīng)用程序 - Helm Charts 可以定義、安裝和升級復(fù)雜的 Kubernetes 應(yīng)用程序,Charts 包很容易創(chuàng)建、版本管理、分享和分布。
    的頭像 發(fā)表于 03-13 16:06 ?2202次閱讀