自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Kubernetes架構(gòu)原來這么簡(jiǎn)單

云計(jì)算 云原生
Kubernetes 也稱為 K8s,是用于自動(dòng)部署、擴(kuò)縮和管理容器化應(yīng)用程序的開源系統(tǒng)。

什么是 Kubernetes

Kubernetes 也稱為 K8s,是用于自動(dòng)部署、擴(kuò)縮和管理容器化應(yīng)用程序的開源系統(tǒng)。Kubernetes 是一個(gè)可移植、可擴(kuò)展的開源平臺(tái),用于管理容器化的工作負(fù)載和服務(wù),可促進(jìn)聲明式配置和自動(dòng)化。Kubernetes 擁有一個(gè)龐大且快速增長(zhǎng)的生態(tài),其服務(wù)、支持和工具的使用范圍相當(dāng)廣泛。Kubernetes 這個(gè)名字源于希臘語,意為“舵手”或“飛行員”。k8s 這個(gè)縮寫是因?yàn)? k 和 s 之間有八個(gè)字符的關(guān)系。Google 在 2014 年開源了 Kubernetes 項(xiàng)目。Kubernetes 建立在 Google 大規(guī)模運(yùn)行生產(chǎn)工作負(fù)載十幾年經(jīng)驗(yàn)的基礎(chǔ)上, 結(jié)合了社區(qū)中最優(yōu)秀的想法和實(shí)踐。

時(shí)光回溯

我們來了解一下為何 Kubernetes 能夠裨益四方

傳統(tǒng)部署時(shí)代:早期,各個(gè)組織是在物理服務(wù)器上運(yùn)行應(yīng)用程序。由于無法限制在物理服務(wù)器中運(yùn)行的應(yīng)用程序資源使用,因此會(huì)導(dǎo)致資源分配問題。例如,如果在同一臺(tái)物理服務(wù)器上運(yùn)行多個(gè)應(yīng)用程序, 則可能會(huì)出現(xiàn)一個(gè)應(yīng)用程序占用大部分資源的情況,而導(dǎo)致其他應(yīng)用程序的性能下降。一種解決方案是將每個(gè)應(yīng)用程序都運(yùn)行在不同的物理服務(wù)器上, 但是當(dāng)某個(gè)應(yīng)用程序資源利用率不高時(shí),剩余資源無法被分配給其他應(yīng)用程序, 而且維護(hù)許多物理服務(wù)器的成本很高。

虛擬化部署時(shí)代:因此,虛擬化技術(shù)被引入了。虛擬化技術(shù)允許你在單個(gè)物理服務(wù)器的 CPU 上運(yùn)行多臺(tái)虛擬機(jī)(VM)。虛擬化能使應(yīng)用程序在不同 VM 之間被彼此隔離,且能提供一定程度的安全性, 因?yàn)橐粋€(gè)應(yīng)用程序的信息不能被另一應(yīng)用程序隨意訪問。虛擬化技術(shù)能夠更好地利用物理服務(wù)器的資源,并且因?yàn)榭奢p松地添加或更新應(yīng)用程序, 而因此可以具有更高的可擴(kuò)縮性,以及降低硬件成本等等的好處。通過虛擬化,你可以將一組物理資源呈現(xiàn)為可丟棄的虛擬機(jī)集群。每個(gè) VM 是一臺(tái)完整的計(jì)算機(jī),在虛擬化硬件之上運(yùn)行所有組件,包括其自己的操作系統(tǒng)。

容器部署時(shí)代:容器類似于 VM,但是更寬松的隔離特性,使容器之間可以共享操作系統(tǒng)(OS)。因此,容器比起 VM 被認(rèn)為是更輕量級(jí)的。且與 VM 類似,每個(gè)容器都具有自己的文件系統(tǒng)、CPU、內(nèi)存、進(jìn)程空間等。由于它們與基礎(chǔ)架構(gòu)分離,因此可以跨云和 OS 發(fā)行版本進(jìn)行移植。容器因具有許多優(yōu)勢(shì)而變得流行起來,例如:

  • 敏捷應(yīng)用程序的創(chuàng)建和部署:與使用 VM 鏡像相比,提高了容器鏡像創(chuàng)建的簡(jiǎn)便性和效率。
  • 持續(xù)開發(fā)、集成和部署:通過快速簡(jiǎn)單的回滾(由于鏡像不可變性), 提供可靠且頻繁的容器鏡像構(gòu)建和部署。
  • 關(guān)注開發(fā)與運(yùn)維的分離:在構(gòu)建、發(fā)布時(shí)創(chuàng)建應(yīng)用程序容器鏡像,而不是在部署時(shí), 從而將應(yīng)用程序與基礎(chǔ)架構(gòu)分離。
  • 可觀察性:不僅可以顯示 OS 級(jí)別的信息和指標(biāo),還可以顯示應(yīng)用程序的運(yùn)行狀況和其他指標(biāo)信號(hào)。
  • 跨開發(fā)、測(cè)試和生產(chǎn)的環(huán)境一致性:在筆記本計(jì)算機(jī)上也可以和在云中運(yùn)行一樣的應(yīng)用程序。
  • 跨云和操作系統(tǒng)發(fā)行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方運(yùn)行。
  • 以應(yīng)用程序?yàn)橹行牡墓芾恚禾岣叱橄蠹?jí)別,從在虛擬硬件上運(yùn)行 OS 到使用邏輯資源在 OS 上運(yùn)行應(yīng)用程序。
  • 松散耦合、分布式、彈性、解放的微服務(wù):應(yīng)用程序被分解成較小的獨(dú)立部分, 并且可以動(dòng)態(tài)部署和管理 - 而不是在一臺(tái)大型單機(jī)上整體運(yùn)行。
  • 資源隔離:可預(yù)測(cè)的應(yīng)用程序性能。
  • 資源利用:高效率和高密度。

為什么需要 Kubernetes,它能做什么

容器是打包和運(yùn)行應(yīng)用程序的好方式。在生產(chǎn)環(huán)境中, 你需要管理運(yùn)行著應(yīng)用程序的容器,并確保服務(wù)不會(huì)下線。例如,如果一個(gè)容器發(fā)生故障,則你需要啟動(dòng)另一個(gè)容器。如果此行為交由給系統(tǒng)處理,是不是會(huì)更容易一些?這就是 Kubernetes 要來做的事情!Kubernetes 為你提供了一個(gè)可彈性運(yùn)行分布式系統(tǒng)的框架。Kubernetes 會(huì)滿足你的擴(kuò)展要求、故障轉(zhuǎn)移你的應(yīng)用、提供部署模式等。例如,Kubernetes 可以輕松管理系統(tǒng)的 Canary (金絲雀) 部署。Kubernetes 為你提供:

  • 服務(wù)發(fā)現(xiàn)和負(fù)載均衡:Kubernetes 可以使用 DNS 名稱或自己的 IP 地址來暴露容器,為多個(gè)容器提供一個(gè)統(tǒng)一訪問入口(內(nèi)部IP地址和一個(gè)DNS名稱),并且負(fù)載均衡關(guān)聯(lián)的所有容器,使得用戶無需考慮容器IP問題。
  • 存儲(chǔ)編排:支持外掛存儲(chǔ)并對(duì)外掛存儲(chǔ)資源進(jìn)行編排,掛載外部存儲(chǔ)系統(tǒng),無論是來自本地存儲(chǔ),公有云(如:AWS),還是網(wǎng)絡(luò)存儲(chǔ)(如:NFS、Glusterfs、Ceph)都作為集群資源的一部分使用,極大提高存儲(chǔ)使用靈活性。
  • 自動(dòng)部署和回滾:K8S采用滾動(dòng)策略更新應(yīng)用,一個(gè)更新一個(gè)Pod,而不是同時(shí)刪除所有的Pod,如果更新過程中出現(xiàn)問題,將回滾更改,確保升級(jí)不收影響業(yè)務(wù)。
  • 自動(dòng)完成資源計(jì)算:Kubernetes 提供許多節(jié)點(diǎn)組成的集群,在這個(gè)集群上運(yùn)行容器化的任務(wù)。你告訴 Kubernetes 每個(gè)容器需要多少 CPU 和內(nèi)存 (RAM)。Kubernetes 可以將這些容器按實(shí)際情況調(diào)度到你的節(jié)點(diǎn)上,以最佳方式利用你的資源。
  • 自我修復(fù):在節(jié)點(diǎn)故障時(shí)重新啟動(dòng)失敗的容器,替換和重新部署,保證預(yù)期的副本數(shù)量;殺死健康檢查失敗的容器,并且在未準(zhǔn)備好之前不會(huì)處理客戶端請(qǐng)求,確保線上服務(wù)不中斷。
  • 集中化配置管理和密鑰管理:管理機(jī)密數(shù)據(jù)和應(yīng)用程序配置,而不需要把敏感數(shù)據(jù)暴露在鏡像里,提高敏感數(shù)據(jù)安全性,并可以將一些常用的配置存儲(chǔ)在K8S中,方便應(yīng)用程序使用。
  • 任務(wù)批量處理運(yùn)行:提供一次性任務(wù),定時(shí)任務(wù),滿足批量數(shù)據(jù)處理和分析的場(chǎng)景。

Kubernetes 組件

K8S 是屬于主從架構(gòu)(Master-Slave 架構(gòu)),即有 Master 節(jié)點(diǎn)負(fù)責(zé)集群的調(diào)度、管理和運(yùn)維,Slave 節(jié)點(diǎn)是集群中的運(yùn)算工作負(fù)載節(jié)點(diǎn)。主節(jié)點(diǎn)一般被稱為 Master 節(jié)點(diǎn),master節(jié)點(diǎn)上有 apiserver、controller-manager、scheduler 以及使用 etcd 做k8s集群存儲(chǔ);而從節(jié)點(diǎn)則被稱為 Worker Node 節(jié)點(diǎn),node節(jié)點(diǎn)上有 kubelet、kube-proxy、容器引擎(比如docker)。

Master組件

Kube-apiserver

kube-apiserver 是 Kubernetes 最重要的核心組件之一,主要提供以下的功能。

  • 提供集群管理的 REST API 接口,包括認(rèn)證授權(quán)、數(shù)據(jù)校驗(yàn)以及集群狀態(tài)變更等。
  • 提供其他模塊之間的數(shù)據(jù)交互和通信的樞紐(其他模塊通過 API Server 查詢或修改數(shù)據(jù),只有 API Server 才直接操作 etcd)。

API Server 負(fù)責(zé)接收 K8S 所有請(qǐng)求(來自 UI 界面或者 CLI 命令行工具), 然后根據(jù)用戶的具體請(qǐng)求,去通知其他組件干活??梢哉f API Server 是 K8S 集群架構(gòu)的大腦,是所有資源對(duì)象的操作入口。

Kube-controller-manager

執(zhí)行并管理各種控制器,是 K8S 集群中處理常規(guī)任務(wù)的后臺(tái)線程,是 K8S 集群里所有資源對(duì)象的自動(dòng)化控制中心。在 K8S 集群中,一個(gè)資源對(duì)應(yīng)一個(gè)控制器,而 Controller manager 就是負(fù)責(zé)管理這些控制器的。由一系列控制器組成,通過 API Server 監(jiān)控整個(gè)集群的狀態(tài),并確保集群處于預(yù)期的工作狀態(tài),比如當(dāng)某個(gè) Node 意外宕機(jī)時(shí),Controller Manager 會(huì)及時(shí)發(fā)現(xiàn)并執(zhí)行自動(dòng)化修復(fù)流程,確保集群始終處于預(yù)期的工作狀態(tài)。這些控制器主要包括:

  • Node Controller(節(jié)點(diǎn)控制器):負(fù)責(zé)在節(jié)點(diǎn)出現(xiàn)故障時(shí)發(fā)現(xiàn)和響應(yīng)。
  • Replication Controller(副本控制器):負(fù)責(zé)保證集群中一個(gè) RC(資源對(duì)象 Replication Controller)所關(guān)聯(lián)的 Pod 副本數(shù)始終保持預(yù)設(shè)值。可以理解成確保集群中有且僅有 N 個(gè) Pod 實(shí)例,N 是 RC 中定義的 Pod 副本數(shù)量。
  • Endpoints Controller(端點(diǎn)控制器):填充端點(diǎn)對(duì)象(即連接 Services 和 Pods),負(fù)責(zé)監(jiān)聽 Service 和對(duì)應(yīng)的 Pod 副本的變化??梢岳斫舛它c(diǎn)是一個(gè)服務(wù)暴露出來的訪問點(diǎn),如果需要訪問一個(gè)服務(wù),則必須知道它的 endpoint。
  • Service Account & Token Controllers(服務(wù)帳戶和令牌控制器):為新的命名空間創(chuàng)建默認(rèn)帳戶和 API 訪問令牌。
  • ResourceQuota Controller(資源配額控制器):確保指定的資源對(duì)象在任何時(shí)候都不會(huì)超量占用系統(tǒng)物理資源。
  • Namespace Controller(命名空間控制器):管理 namespace 的生命周期。
  • Service Controller(服務(wù)控制器):屬于 K8S 集群與外部的云平臺(tái)之間的一個(gè)接口控制器

Kube-scheduler

負(fù)責(zé)整個(gè)集群資源調(diào)度,根據(jù)調(diào)度算法為新創(chuàng)建的 Pod 選擇一個(gè)合適的 Node 節(jié)點(diǎn)。當(dāng)用戶要部署服務(wù)時(shí),Scheduler 會(huì)根據(jù)調(diào)度算法選擇最合適的 Node 節(jié)點(diǎn)來部署 Pod。調(diào)度算法:

  • 預(yù)選策略(predicate)
  • 優(yōu)選策略(priorities)

API Server 接收到請(qǐng)求創(chuàng)建一批 Pod ,API Server 會(huì)讓 Controller-manager 按照所預(yù)設(shè)的模板去創(chuàng)建 Pod,Controller-manager 會(huì)通過 API Server 去找 Scheduler 為新創(chuàng)建的 Pod 選擇最適合的 Node 節(jié)點(diǎn)。比如運(yùn)行這個(gè) Pod 需要 2C4G 的資源,Scheduler 會(huì)通過預(yù)選策略過濾掉不滿足策略的 Node 節(jié)點(diǎn)。Node 節(jié)點(diǎn)中還剩多少資源是通過匯報(bào)給 API Server 存儲(chǔ)在 etcd 里,API Server 會(huì)調(diào)用一個(gè)方法找到 etcd 里所有 Node 節(jié)點(diǎn)的剩余資源,再對(duì)比 Pod 所需要的資源,如果某個(gè) Node 節(jié)點(diǎn)的資源不足或者不滿足 預(yù)選策略的條件則無法通過預(yù)選。預(yù)選階段篩選出的節(jié)點(diǎn),在優(yōu)選階段會(huì)根據(jù)優(yōu)選策略為通過預(yù)選的 Node 節(jié)點(diǎn)進(jìn)行打分排名, 選擇得分最高的 Node。例如,資源越富裕、負(fù)載越小的 Node 可能具有越高的排名。

Etcd存儲(chǔ)

集群數(shù)據(jù)庫,保存整個(gè)集群的狀態(tài) etcd 作為服務(wù)發(fā)現(xiàn)系統(tǒng),有以下的特點(diǎn):

  • 簡(jiǎn)單:安裝配置簡(jiǎn)單,而且提供了HTTP API進(jìn)行交互,使用也很簡(jiǎn)單
  • 安全:支持SSI證書驗(yàn)證
  • 快速:?jiǎn)螌?shí)例支持每秒2k+讀操作
  • 可靠:采用rat算法,實(shí)現(xiàn)分布式系統(tǒng)數(shù)據(jù)的可用性和一致性

etcd 目前默認(rèn)使用2379端口提供HTTP API服務(wù), 2380端口和peer通信(這兩個(gè)端口已經(jīng)被IANA官方預(yù)留給etcd)。即etcd默認(rèn)使用2379端口對(duì)外為客戶端提供通訊,使用端口2380來進(jìn)行服務(wù)器間內(nèi)部通訊。etcd 在生產(chǎn)環(huán)境中一般推薦集群方式部署。由于etcd 的leader選舉機(jī)制,要求至少為3臺(tái)或以上的奇數(shù)臺(tái)。

Node 組件

Kubelet

真正運(yùn)行容器的組件,管理pod的聲明周期,每個(gè) Node 上都會(huì)啟動(dòng)一個(gè) kubelet 服務(wù)進(jìn)程。該進(jìn)程用于處理 Master 下發(fā)到本節(jié)點(diǎn)的任務(wù),管理 Pod 及 Pod 中的容器。每個(gè) kubelet 進(jìn)程都會(huì)在 API Server 上注冊(cè)節(jié)點(diǎn)自身的信息,定期向 Master 匯報(bào)節(jié)點(diǎn)資源的使用情況,并通過 cAdvisor 監(jiān)控容器和節(jié)點(diǎn)資源。

Kube-Proxy

在 K8S 集群中微服務(wù)的負(fù)載均衡是由 Kube-proxy 實(shí)現(xiàn)的。Kube-proxy 是 K8S 集群內(nèi)部的負(fù)載均衡器。它是一個(gè)分布式代理服務(wù)器,在 K8S 的每個(gè)節(jié)點(diǎn)上都會(huì)運(yùn)行一個(gè) Kube-proxy 組件。在每個(gè) Node 節(jié)點(diǎn)上實(shí)現(xiàn) Pod 網(wǎng)絡(luò)代理,負(fù)責(zé)維護(hù)網(wǎng)絡(luò)規(guī)則和四層負(fù)載均衡工作。負(fù)責(zé)寫入規(guī)則至iptables、ipvs實(shí)現(xiàn)服務(wù)映射訪問的,轉(zhuǎn)發(fā)請(qǐng)求并管理負(fù)載均衡的進(jìn)程。Kube-apiserver 通過監(jiān)控 Kube-Proxy 進(jìn)行對(duì) Kubernetes Service 的更新和端點(diǎn)的維護(hù)。

容器運(yùn)行時(shí)(Container Runtime)

真正運(yùn)行應(yīng)用的載體 ,當(dāng) kubernetes 把 pod 調(diào)度到節(jié)點(diǎn)上,節(jié)點(diǎn)上的 kubelet會(huì)指示 docker 啟動(dòng)特定的容器。接著,kubelet 會(huì)通過 docker 持續(xù)地收集容器的信息, 然后提交到主節(jié)點(diǎn)上。docker 會(huì)如往常一樣拉取容器鏡像、啟動(dòng)或停止容器。不同點(diǎn)僅僅在于這是由自動(dòng)化系統(tǒng)控制而非管理員在每個(gè)節(jié)點(diǎn)上手動(dòng)操作的。Kubernetes 支持許多容器運(yùn)行環(huán)境,例如 containerd、 docker、CRI-O 以及 Kubernetes CRI (容器運(yùn)行環(huán)境接口) 等。

Kubernetes核心對(duì)象

Kubernetes 中的所有內(nèi)容都被抽象為“資源”,如 Pod、Service、Node 等都是資源。“對(duì)象”就是“資源”的實(shí)例,是持久化的實(shí)體。Kubernetes 支持多種不同的方式來創(chuàng)建和管理 Kubernetes 對(duì)象,比如:

  • 采用kubectl的命令方式
  • yaml文件方式

Pod

Pod是 Kubernetes 創(chuàng)建或部署的最小/最簡(jiǎn)單的基本單位,一個(gè) Pod 由一個(gè)或多個(gè)容器組成,Pod 中容器共享網(wǎng)絡(luò)、存儲(chǔ)和計(jì)算資源。使用 yaml 定義一個(gè)簡(jiǎn)單的 nginx 服務(wù),它包含一個(gè)鏡像為 nginx 的容器:(nginx-pod.yaml):

apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx spec: 
containers: - name: nginx image: nginx ports: - containerPort: 80

使用 Kubectl 工具將這個(gè) Pod 創(chuàng)建到 Kubernetes 集群中:

kubectl apply -f nginx-pod.yaml

Pod 在 Kubernetes 集群中被創(chuàng)建的基本流程如下所示:

1、用戶提交創(chuàng)建POD請(qǐng)求

2、API Server 處理用戶請(qǐng)求,存儲(chǔ)Pod數(shù)據(jù)到Etcd

3、Schedule通過和 API Server的監(jiān)聽機(jī)制,查看到新的pod,嘗試為Pod綁定Node

4、過濾主機(jī):調(diào)度器用一組規(guī)則過濾掉不符合要求的主機(jī),比如Pod指定了所需要的資源,那么就要過濾掉資源不夠的主機(jī)

5、主機(jī)打分:對(duì)第一步篩選出的符合要求的主機(jī)進(jìn)行打分,在此階段,調(diào)度器會(huì)考慮一些整體優(yōu)化策略,比如把一個(gè)Replication Controller的副本分布到不同的主機(jī)上,使用最低負(fù)載的主機(jī)等

6、選擇主機(jī):選擇得分最高的主機(jī),進(jìn)行binding操作,結(jié)果存儲(chǔ)到Etcd中

7、kubelet根據(jù)調(diào)度結(jié)果執(zhí)行Pod創(chuàng)建操作:綁定成功后,會(huì)啟動(dòng)container, Docker run, scheduler會(huì)調(diào)用API Server的API在etcd中創(chuàng)建一個(gè)bound pod對(duì)象,描述在一個(gè)工作節(jié)點(diǎn)上綁定運(yùn)行的所有pod信息。運(yùn)行在每個(gè)工作節(jié)點(diǎn)上的kubelet也會(huì)定期與etcd同步bound pod信息,一旦發(fā)現(xiàn)應(yīng)該在該工作節(jié)點(diǎn)上運(yùn)行的bound pod對(duì)象沒有更新,則調(diào)用Docker API創(chuàng)建并啟動(dòng)pod內(nèi)的容器

8、POD創(chuàng)建完成

Namespace

Namespace(命名空間)是對(duì)一組資源和對(duì)象的抽象集合,比如可以用來將系統(tǒng)內(nèi)部的對(duì)象劃分為不同的項(xiàng)目組或用戶組。常見的 Pods、Services、Deployments 等都是屬于某一個(gè) Namespace 的(默認(rèn)是 default),比如上面我們的 Nginx Pod 沒有指定 namespace,則默認(rèn)就在 default 命名空間下面,而 Node, PersistentVolumes 等資源則不屬于任何 Namespace,是全局的。

Label

給某個(gè)資源對(duì)象定義一個(gè) Label,就相當(dāng)于給它打了一個(gè)標(biāo)簽;隨后可以通過標(biāo)簽選擇器(Label selector)查詢和篩選擁有某些 Label 的資源對(duì)象。

Deployment

Deployment 是來管理 Pod 的資源對(duì)象。Deployment 確保任意時(shí)間都有指定數(shù)量的 Pod“副本”在運(yùn)行。如果為某個(gè) Pod 創(chuàng)建了 Deployment 并且指定 3 個(gè)副本,它會(huì)創(chuàng)建 3 個(gè) Pod,并且持續(xù)監(jiān)控它們。如果某個(gè) Pod 不響應(yīng),那么 Deployment 會(huì)替換它,始終保持總數(shù)為 3。如果之前不響應(yīng)的 Pod 恢復(fù)了,現(xiàn)在就有 4 個(gè) Pod 了,那么 Deployment 會(huì)將其中一個(gè)終止保持總數(shù)為 3。如果在運(yùn)行中將副本總數(shù)改為 5,Deployment 會(huì)立刻啟動(dòng) 2 個(gè)新 Pod,保證總數(shù)為 5。持回滾和滾動(dòng)升級(jí)。當(dāng)創(chuàng)建 Deployment 時(shí),需要指定兩個(gè)東西:

  • Pod 模板:用來創(chuàng)建 Pod 副本的模板
  • Label 標(biāo)簽:Deployment 需要監(jiān)控的 Pod 的標(biāo)簽。

Service

在K8S的集群里,雖然每個(gè)Pod會(huì)被分配一個(gè)單獨(dú)的IP地址,但由于Pod是有生命周期的(它們可以被創(chuàng)建,而且銷毀之后不會(huì)再啟動(dòng)),隨時(shí)可能會(huì)因?yàn)闃I(yè)務(wù)的變更,導(dǎo)致這個(gè) IP 地址也會(huì)隨著 Pod 的銷毀而消失。而Service 就是用來解決這個(gè)問題的核心概念。Service 是應(yīng)用服務(wù)的抽象,通過 Labels 為應(yīng)用提供負(fù)載均衡和服務(wù)發(fā)現(xiàn)。匹配 Labels 的 Pod IP 和端口列表組成 Endpoints,由 kube-proxy 負(fù)責(zé)將服務(wù) IP 負(fù)載均衡到這些 Endpoints 上。每個(gè) Service 都會(huì)自動(dòng)分配一個(gè) cluster IP(僅在集群內(nèi)部可訪問的虛擬地址)和 DNS 名,其他容器可以通過該地址或 DNS 來訪問服務(wù),而不需要了解后端容器的運(yùn)行。

K8S各組件工作流程

1、運(yùn)維人員向kube-apiserver發(fā)出指令(我想干什么,我期望事情是什么狀態(tài))

2、api響應(yīng)命令,通過一系列認(rèn)證授權(quán),把pod數(shù)據(jù)存儲(chǔ)到etcd,創(chuàng)建deployment資源并初始化。(期望狀態(tài))

3、controller通過list-watch機(jī)制,監(jiān)測(cè)發(fā)現(xiàn)新的deployment,將該資源加入到內(nèi)部工作隊(duì)列,發(fā)現(xiàn)該資源沒有關(guān)聯(lián)的pod和replicaset,啟用deployment controller創(chuàng)建replicaset資源,再啟用replicaset controller創(chuàng)建pod。

4、所有controller被創(chuàng)建完成后.將deployment,replicaset,pod資源更新存儲(chǔ)到etcd。

5、scheduler通過list-watch機(jī)制,監(jiān)測(cè)發(fā)現(xiàn)新的pod,經(jīng)過主機(jī)過濾、主機(jī)打分規(guī)則,將pod綁定(binding)到合適的主機(jī)。6、將綁定結(jié)果存儲(chǔ)到etcd。

7、kubelet每隔 20s(可以自定義)向apiserver通過NodeName 獲取自身Node上所要運(yùn)行的pod清單.通過與自己的內(nèi)部緩存進(jìn)行比較,新增加pod。

8、kubelet創(chuàng)建pod。

9、kube-proxy為新創(chuàng)建的pod注冊(cè)動(dòng)態(tài)DNS到CoreOS。給pod的service添加iptables/ipvs規(guī)則,用于服務(wù)發(fā)現(xiàn)和負(fù)載均衡。

10、controller通過control loop(控制循環(huán))將當(dāng)前pod狀態(tài)與用戶所期望的狀態(tài)做對(duì)比,如果當(dāng)前狀態(tài)與用戶期望狀態(tài)不同,則controller會(huì)將pod修改為用戶期望狀態(tài),實(shí)在不行會(huì)將此pod刪掉,然后重新創(chuàng)建pod。

責(zé)任編輯:華軒 來源: 云原生運(yùn)維圈
相關(guān)推薦

2021-04-19 05:42:51

Mmap文件系統(tǒng)

2023-09-22 08:00:00

分布式鎖Redis

2020-11-27 10:34:01

HTTPHTTPS模型

2020-09-24 06:44:54

HTTPS網(wǎng)站 HTTP

2014-10-08 15:00:50

SUSE操作系統(tǒng)云計(jì)算

2019-03-15 10:55:12

通信系統(tǒng)手機(jī)

2014-11-25 15:02:01

客服系統(tǒng)

2016-03-21 11:09:52

Tableau/大數(shù)據(jù)

2010-08-02 13:55:20

2025-03-20 12:33:36

2020-10-22 08:01:52

XMLJSON轉(zhuǎn)換

2021-06-10 06:57:39

Redis存儲(chǔ)數(shù)據(jù)庫

2021-12-30 10:55:54

Python游戲腳本

2019-05-27 14:03:48

開發(fā)技能代碼

2022-01-27 14:12:49

Python游戲腳本

2022-11-02 19:08:48

微服務(wù)輪詢消費(fèi)者

2020-11-02 14:38:56

Java 深度學(xué)習(xí)模型

2019-05-14 10:50:11

HTTP協(xié)議HttpServlet

2020-09-25 07:49:36

策略模式Spring

2021-02-01 12:18:55

策略模式Spring
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)