成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Kubernetes架構原來這么簡單

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

什么是 Kubernetes

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

時光回溯

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

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

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

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

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

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

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

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

Kubernetes 組件

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

Master組件

Kube-apiserver

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

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

API Server 負責接收 K8S 所有請求(來自 UI 界面或者 CLI 命令行工具), 然后根據(jù)用戶的具體請求,去通知其他組件干活。可以說 API Server 是 K8S 集群架構的大腦,是所有資源對象的操作入口。

Kube-controller-manager

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

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

Kube-scheduler

負責整個集群資源調度,根據(jù)調度算法為新創(chuàng)建的 Pod 選擇一個合適的 Node 節(jié)點。當用戶要部署服務時,Scheduler 會根據(jù)調度算法選擇最合適的 Node 節(jié)點來部署 Pod。調度算法:

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

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

Etcd存儲

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

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

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

Node 組件

Kubelet

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

Kube-Proxy

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

容器運行時(Container Runtime)

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

Kubernetes核心對象

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

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

Pod

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

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

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

kubectl apply -f nginx-pod.yaml

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

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

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

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

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

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

6、選擇主機:選擇得分最高的主機,進行binding操作,結果存儲到Etcd中

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

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

Namespace

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

Label

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

Deployment

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

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

Service

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

K8S各組件工作流程

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

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

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

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

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

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

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

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

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

責任編輯:華軒 來源: 云原生運維圈
相關推薦

2021-04-19 05:42:51

Mmap文件系統(tǒng)

2023-09-22 08:00:00

分布式鎖Redis

2020-09-24 06:44:54

HTTPS網(wǎng)站 HTTP

2020-11-27 10:34:01

HTTPHTTPS模型

2014-10-08 15:00:50

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

2019-03-15 10:55:12

通信系統(tǒng)手機

2014-11-25 15:02:01

客服系統(tǒng)

2010-08-02 13:55:20

2016-03-21 11:09:52

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

2025-03-20 12:33:36

2020-10-22 08:01:52

XMLJSON轉換

2021-06-10 06:57:39

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

2019-05-27 14:03:48

開發(fā)技能代碼

2022-01-27 14:12:49

Python游戲腳本

2021-12-30 10:55:54

Python游戲腳本

2022-11-02 19:08:48

微服務輪詢消費者

2020-11-02 14:38:56

Java 深度學習模型

2020-09-25 07:49:36

策略模式Spring

2019-05-14 10:50:11

HTTP協(xié)議HttpServlet

2021-02-01 12:18:55

策略模式Spring
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一级二级视频 | 久久综合影院 | 色视频在线免费观看 | 免费一看一级毛片 | 亚洲男人天堂av | 亚洲在线| 免费高清成人 | 亚洲网站观看 | 一本色道久久综合亚洲精品高清 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 黄色片网站国产 | 一级毛片色一级 | 成人免费在线视频 | 欧美综合国产精品久久丁香 | 亚洲人成在线观看 | 一级黄色片网站 | 久久国产区 | 黄视频在线网站 | 日韩三区在线观看 | 中文字幕观看 | 一区二区三区av | 夜夜精品浪潮av一区二区三区 | 久久久久久国产精品 | 成人一区在线观看 | 久久四虎| 在线看亚洲 | 日韩精品一区二区三区中文在线 | 妞干网av | 国产精品一区在线观看你懂的 | 欧美乱大交xxxxx另类电影 | 久久久久久一区 | 久久精品国产久精国产 | 日韩高清国产一区在线 | 大伊人久久 | 精品欧美一区二区中文字幕视频 | 蜜桃免费一区二区三区 | 亚洲网视频| 久久人体视频 | av男人的天堂av | 久久亚洲春色中文字幕久久久 | 成年人黄色小视频 |