偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

測試技能提升篇—k8s的核心概念

云計算 云原生
本文重點介紹k8s中所涉及的核心概念,能夠幫助讀者快速地從整體方面了解k8s,便于初學(xué)者在實際工作中從事相關(guān)工作!

本文重點介紹k8s中所涉及的核心概念,能夠幫助讀者快速地從整體方面了解k8s,便于初學(xué)者在實際工作中從事相關(guān)工作!

Docker 和K8s

Docker是應(yīng)用最廣泛的容器技術(shù),它通過打包鏡像、啟動容器來創(chuàng)建服務(wù)。

k8s的全稱 kubernetes。它是一個完整的分布式系統(tǒng)支撐平臺,集群管理功能齊全。

Kubernetes同時提供完善的管理工具,涵蓋了開發(fā)、部署、測試、運行監(jiān)控等各個環(huán)節(jié)。

隨著應(yīng)用的日益復(fù)雜,容器的數(shù)量也不斷增加,由此衍生出管理運維容器這一重要問題。隨著云計算的發(fā)展,容器的漂移也是云端最大的挑戰(zhàn)。k8s正是在這種業(yè)務(wù)的驅(qū)動下,提出了一套全新的基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案,這是容器技術(shù)領(lǐng)域中一個重大突破和創(chuàng)新。

簡單地理解k8s可以管理運維容器(docker) 下圖是k8s的整體架構(gòu):

k8s中的重要概念

Master 節(jié)點

Master 節(jié)點負責(zé)對集群中所有容器的調(diào)度,各種資源對象的控制,以及響應(yīng)集群的所有請求。

Node 節(jié)點

Node 節(jié)點是 Kubernetes 的工作節(jié)點,負責(zé)運行業(yè)務(wù)容器。

集群(Cluster)

集群是一組被 Kubernetes 統(tǒng)一管理和調(diào)度的節(jié)點,被 Kubernetes 納管的節(jié)點可以是物理機或者虛擬機。集群其中一部分節(jié)點作為 Master 節(jié)點,負責(zé)集群狀態(tài)的管理和協(xié)調(diào),另一部分作為 Node 節(jié)點,負責(zé)執(zhí)行具體的任務(wù),實現(xiàn)用戶服務(wù)的啟停等功能。

標(biāo)簽(Label)

Label 是一組鍵值對,每一個資源對象都會擁有此字段。Kubernetes 中使用 Label 對資源進行標(biāo)記,然后根據(jù) Label 對資源進行分類和篩選。

命名空間(Namespace)

Kubernetes 中通過命名空間來實現(xiàn)資源的虛擬化隔離,將一組相關(guān)聯(lián)的資源放到同一個命名空間內(nèi),避免不同租戶的資源發(fā)生命名沖突,從邏輯上實現(xiàn)了多租戶的資源隔離。

容器組(Pod)

Pod 是 Kubernetes 中的最小調(diào)度單位,它由一個或多個容器組成,一個 Pod 內(nèi)地容器共享相同的網(wǎng)絡(luò)命名空間和存儲卷。Pod 是真正的業(yè)務(wù)進程的載體,在 Pod 運行前,Kubernetes 會先啟動一個 Pause 容器開辟一個網(wǎng)絡(luò)命名空間,完成網(wǎng)絡(luò)和存儲相關(guān)資源的初始化,然后再運行業(yè)務(wù)容器。也就是說每個Pod中都運行著一個特殊的被稱為Pause的容器,其他容器則為業(yè)務(wù)容器,這些業(yè)務(wù)容器共享Pause容器的網(wǎng)絡(luò)和Volume掛載卷。后面我們會繼續(xù)對其進行重點講解。

無狀態(tài)部署(Deployment)

Deployment 是一組 Pod 的抽象,Deployment用于部署無狀態(tài)的服務(wù),通過 Deployment 控制器保障用戶指定數(shù)量的容器副本正常運行,并且實現(xiàn)了滾動更新等高級功能,當(dāng)我們需要更新業(yè)務(wù)版本時,Deployment 會按照我們指定策略自動地殺死舊版本的 Pod 并且啟動新版本的 Pod。

有狀態(tài)部署(StatefulSet)

StatefulSet本質(zhì)上是Deployment的一種變體用于部署有狀態(tài)的服務(wù),它所管理的Pod擁有固定的Pod名稱,啟停順序,在StatefulSet中,Pod名字稱為網(wǎng)絡(luò)標(biāo)識(hostname),還必須要用到共享存儲。

任務(wù)(Job)

Job 可以幫助我們創(chuàng)建一個 Pod 并且保證 Pod 的正常退出,如果 Pod 運行過程中出現(xiàn)了錯誤,Job 控制器可以幫助我們創(chuàng)建新的 Pod,直到 Pod 執(zhí)行成功或者達到指定重試次數(shù)。一種簡單的使用場景下,你會創(chuàng)建一個 Job 對象以一種可靠的方式運行某 Pod 直到完成。 當(dāng)?shù)谝粋€ Pod 失敗或者被刪除(比如因為節(jié)點硬件失效或者重啟)時,Job 對象會啟動一個新的 Pod。

服務(wù)(Service)

Service 是一組 Pod 訪問配置的抽象。每個pod有自己的ip地址,當(dāng)有多個pod提供相同的服務(wù)的時候,就需要有負載均衡的能力,這里就引入了service。

Pod

Pod的理解

Pod:k8s管理的最小單位,包括一個或多個容器,是提供實際業(yè)務(wù)服務(wù)的組件。一個Pod封裝一個應(yīng)用容器(也可以有多個容器),存儲資源、一個獨立的網(wǎng)絡(luò)IP以及管理控制容器運行方式的策略選項。Pod代表部署的一個單位:Kubernetes中單個應(yīng)用的實例,它可能由單個容器或多個容器共享組成的資源。

Pod中運行一個容器?!皁ne-container-per-Pod”模式是Kubernetes最常見的用法; 在這種情況下,你可以將Pod視為單個封裝的容器,但是Kubernetes是直接管理Pod而不是容器。Pods中運行多個需要一起工作的容器。Pod可以封裝緊密耦合的應(yīng)用,它們需要由多個容器組成,它們之間能夠共享資源,這些容器可以形成一個單一的內(nèi)部service單位 - 一個容器共享文件,另一個“sidecar”容器來更新這些文件,如下圖所示。Pod將這些容器的存儲資源作為一個實體來管理。

Pods提供兩種共享資源:網(wǎng)絡(luò)和存儲。

網(wǎng)絡(luò)

每個Pod被分配一個獨立的IP地址,Pod中的每個容器共享網(wǎng)絡(luò)命名空間,包括IP地址和網(wǎng)絡(luò)端口。Pod內(nèi)的容器可以使用localhost相互通信。當(dāng)Pod中的容器與Pod外部通信時,他們必須協(xié)調(diào)如何使用共享網(wǎng)絡(luò)資源(如端口)。

存儲

Pod可以指定一組共享存儲volumes。Pod中的所有容器都可以訪問共享volumes,允許這些容器共享數(shù)據(jù)。volumes 還用于Pod中的數(shù)據(jù)持久化,以防其中一個容器需要重新啟動而丟失數(shù)據(jù)。

Pod也是我們在實際工作中接觸最多的東東,特別是pod的資源清單(對應(yīng)的yaml文件),我們在后面會詳細介紹。

  • ReplicaSet(rs):是Pod的管理控制組件,監(jiān)控Pod的健康狀況,保障Pod按照用戶的期望去運行。rs是ReplicationController組件的升級版,增加了標(biāo)簽選擇器的范圍選擇功能。
  • Deployment:可管理rs、Pod,實現(xiàn)Pod應(yīng)用的滾動升級和回滾、擴容和縮容。
  • Service:是一種可以訪問 Pod邏輯分組的策略, Service通常是通過 Label Selector訪問 Pod組。集群中Pod的數(shù)量和訪問地址可能是變化的,這些Pod中的業(yè)務(wù)應(yīng)用需要對外提供服務(wù),可通過Service對外提供統(tǒng)一服務(wù)地址,Service通過標(biāo)簽選擇器,匹配一組提供服務(wù)的Pod,從而對客戶端隔離了后端Pod的變化。

Pod生命周期

  1. pending:pod已經(jīng)被系統(tǒng)認可了,但是內(nèi)部的container還沒有創(chuàng)建出來。這里包含調(diào)度到node上的時間以及下載鏡像的時間,會持續(xù)一小段時間。
  2. Running:pod已經(jīng)與node綁定了(調(diào)度成功),而且pod中所有的container已經(jīng)創(chuàng)建出來,至少有一個容器在運行中,或者容器的進程正在啟動或者重啟狀態(tài)。--這里需要注意pod雖然已經(jīng)Running了,但是內(nèi)部的container不一定完全可用。因此需要進一步檢測container的狀態(tài)。
  3. Succeeded:這個狀態(tài)很少出現(xiàn),表明pod中的所有container已經(jīng)成功的terminated了,而且不會再被拉起了。
  4. Failed:pod中的所有容器都被terminated,至少一個container是非正常終止的。(退出的時候返回了一個非0的值或者是被系統(tǒng)直接終止)
  5. unknown:由于某些原因pod的狀態(tài)獲取不到,有可能是由于通信問題。

一般情況下pod最常見的就是前兩種狀態(tài)。而且當(dāng)Running的時候,需要進一步關(guān)注container的狀態(tài)。下面就來看下container的狀態(tài)有哪些

Pod資源清單定義

  • apiVersion: v1 #必選,版本號,例如v1
  • kind: Pod   #必選,資源類型,例如 Pod
  • metadata:   #必選,元數(shù)據(jù)
  • name: string #必選,Pod名稱
  • namespace: string #Pod所屬的命名空間,默認為"default"
  • labels:    #自定義標(biāo)簽列表  
  • spec: #必選,Pod中容器的詳細定義
  • containers: #必選,Pod中容器列表
  • - name: string #必選,容器名稱
  • image: string #必選,容器的鏡像名稱
  • imagePullPolicy: [ Always|Never|IfNotPresent ] #獲取鏡像的策略
  • command: [string] #容器的啟動命令列表,如不指定,使用打包時使用的啟動命令
  • args: [string] #容器的啟動命令參數(shù)列表
  • workingDir: string #容器的工作目錄
  • volumeMounts: #掛載到容器內(nèi)部的存儲卷配置
  • - name: string #引用pod定義的共享存儲卷的名稱,需用volumes[]部分定義的的卷名
  • mountPath: string #存儲卷在容器內(nèi)mount的絕對路徑,應(yīng)少于512字符
  • readOnly: boolean #是否為只讀模式
  • ports: #需要暴露的端口庫號列表
  • - name: string #端口的名稱
  • containerPort: int #容器需要監(jiān)聽的端口號
  • hostPort: int #容器所在主機需要監(jiān)聽的端口號,默認與Container相同
  • protocol: string #端口協(xié)議,支持TCP和UDP,默認TCP
  • env: #容器運行前需設(shè)置的環(huán)境變量列表
  • - name: string #環(huán)境變量名稱
  • value: string #環(huán)境變量的值
  • resources: #資源限制和請求的設(shè)置
  • limits: #資源限制的設(shè)置
  • cpu: string #Cpu的限制,單位為core數(shù),將用于docker run --cpu-shares參數(shù)
  • memory: string #內(nèi)存限制,單位可以為Mib/Gib,將用于docker run --memory參數(shù)
  • requests: #資源請求的設(shè)置
  • cpu: string #Cpu請求,容器啟動的初始可用數(shù)量
  • memory: string #內(nèi)存請求,容器啟動的初始可用數(shù)量
  • lifecycle: #生命周期鉤子
  • postStart: #容器啟動后立即執(zhí)行此鉤子,如果執(zhí)行失敗,會根據(jù)重啟策略進行重啟
  • preStop: #容器終止前執(zhí)行此鉤子,無論結(jié)果如何,容器都會終止
  • livenessProbe: #對Pod內(nèi)各容器健康檢查的設(shè)置,當(dāng)探測無響應(yīng)幾次后將自動重啟該容器
  • exec:   #對Pod容器內(nèi)檢查方式設(shè)置為exec方式
  • command: [string] #exec方式需要制定的命令或腳本
  • httpGet: #對Pod內(nèi)個容器健康檢查方法設(shè)置為HttpGet,需要制定Path、port
  • path: string
  • port: number
  • host: string
  • scheme: string
  • HttpHeaders:
  • - name: string
  • value: string
  • tcpSocket: #對Pod內(nèi)個容器健康檢查方式設(shè)置為tcpSocket方式
  • port: number
  • initialDelaySeconds: 0 #容器啟動完成后首次探測的時間,單位為秒
  • timeoutSeconds: 0    #對容器健康檢查探測等待響應(yīng)的超時時間,單位秒,默認1秒
  • periodSeconds: 0    #對容器監(jiān)控檢查的定期探測時間設(shè)置,單位秒,默認10秒一次
  • successThreshold: 0
  • failureThreshold: 0
  • securityContext:
  • privileged: false
  • restartPolicy: [Always | Never | OnFailure] #Pod的重啟策略
  • nodeName: <string> #設(shè)置NodeName表示將該Pod調(diào)度到指定到名稱的node節(jié)點上
  • nodeSelector: obeject #設(shè)置NodeSelector表示將該Pod調(diào)度到包含這個label的node上
  • imagePullSecrets: #Pull鏡像時使用的secret名稱,以key:secretkey格式指定
  • - name: string
  • hostNetwork: false #是否使用主機網(wǎng)絡(luò)模式,默認為false,如果設(shè)置為true,表示使用宿主機網(wǎng)絡(luò)
  • volumes: #在該pod上定義共享存儲卷列表
  • - name: string #共享存儲卷名稱 (volumes類型有很多種)
  • emptyDir: {} #類型為emtyDir的存儲卷,與Pod同生命周期的一個臨時目錄。為空值
  • hostPath: string #類型為hostPath的存儲卷,表示掛載Pod所在宿主機的目錄
  • path: string    #Pod所在宿主機的目錄,將被用于同期中mount的目錄
  • secret:    #類型為secret的存儲卷,掛載集群與定義的secret對象到容器內(nèi)部
  • scretname: string
  • items:
  • - key: string
  • path: string
  • configMap: #類型為configMap的存儲卷,掛載預(yù)定義的configMap對象到容器內(nèi)部
  • name: string
  • items:
  • - key: string
  • path: string
責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2023-09-11 15:35:25

2022-09-05 17:28:25

k8sNode IPClusterIP

2021-04-12 20:42:50

K8S端口內(nèi)存

2024-07-22 13:43:31

Kubernetes容器

2024-02-28 18:13:00

kubernetes云計算

2022-02-11 23:11:09

Kubernetes集群容器化

2022-03-22 08:52:40

KubernetesCPU內(nèi)存資源

2023-11-06 07:16:22

WasmK8s模塊

2022-04-22 13:32:01

K8s容器引擎架構(gòu)

2023-07-11 07:12:21

Hadoop部署mysql

2023-07-10 07:22:16

2023-06-06 08:14:18

核心Docker應(yīng)用程序

2023-09-06 08:12:04

k8s云原生

2021-04-29 08:43:17

k8s可觀測性Metrics

2023-08-29 10:27:32

2024-01-26 14:35:03

鑒權(quán)K8sNode

2023-08-03 08:36:30

Service服務(wù)架構(gòu)

2023-08-04 08:19:02

2023-05-25 21:38:30

2017-09-29 17:20:13

大數(shù)據(jù)MySQLsqlyog
點贊
收藏

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