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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

如圖所示:

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

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

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

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

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

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

如圖所示:

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

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

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

如圖所示:

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

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

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

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

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

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

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

如圖所示:

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

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

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

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

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

如圖所示:

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

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

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

如圖所示:

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

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

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

如圖所示:

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

總結(jié)

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

Node

Pod

Label

Selector

Replication Controller

Service Controller

ResourceQuota Controller

Namespace Controller

Node Controller

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

kube-apiserver

kube-controller-manager

kube-scheduler

kubelet

kube-proxy

pause

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

    關(guān)注

    27

    文章

    6254

    瀏覽量

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

    關(guān)注

    0

    文章

    531

    瀏覽量

    22965
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    532

    瀏覽量

    14247
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    263

    瀏覽量

    9494

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

    從“人機(jī)交互”到“數(shù)字預(yù)演”:詳解 HMI、SCADA 與虛擬調(diào)試的閉環(huán)架構(gòu)
    的頭像 發(fā)表于 03-05 11:36 ?68次閱讀
    從“人機(jī)交互”到“數(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的核心機(jī)制之,決定了Pod最終運(yùn)行在哪個(gè)節(jié)點(diǎn)上。默認(rèn)調(diào)度器kube-scheduler通過系列預(yù)選(Filtering)和優(yōu)選(Scoring)算法完成調(diào)度決策,但默認(rèn)行為在生產(chǎn)環(huán)境中往往不夠
    的頭像 發(fā)表于 02-27 11:08 ?152次閱讀

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

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

    Kubernetes kubectl命令行工具詳解

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

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

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

    高效管理Kubernetes集群的實(shí)用技巧

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

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

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

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

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

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

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

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

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

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

    開關(guān)電源的各個(gè)元器件怎么計(jì)算?損耗怎么估算?散熱器的大小怎么計(jì)算? 51頁圖文詳解,帶你弄懂! 純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關(guān)注、點(diǎn)贊、評(píng)論支持
    發(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 ?3084次閱讀
    <b class='flag-5'>Kubernetes</b> Helm入門指南

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

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

    Kubernetes中部署MySQL集群

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

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

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