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

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

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

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

Docker 和K8s

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

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

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

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

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

k8s中的重要概念

Master 節(jié)點(diǎn)

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

Node 節(jié)點(diǎn)

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

集群(Cluster)

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

標(biāo)簽(Label)

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

命名空間(Namespace)

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

容器組(Pod)

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

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

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

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

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

任務(wù)(Job)

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

服務(wù)(Service)

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

Pod

Pod的理解

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

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

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

網(wǎng)絡(luò)

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

存儲(chǔ)

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

Pod也是我們?cè)趯?shí)際工作中接觸最多的東東,特別是pod的資源清單(對(duì)應(yīng)的yaml文件),我們?cè)诤竺鏁?huì)詳細(xì)介紹。

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

Pod生命周期

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

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

Pod資源清單定義

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

kubernetes云計(jì)算

2024-07-22 13:43:31

Kubernetes容器

2022-03-22 08:52:40

KubernetesCPU內(nèi)存資源

2022-04-22 13:32:01

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

2023-11-06 07:16:22

WasmK8s模塊

2022-02-11 23:11:09

Kubernetes集群容器化

2023-07-11 07:12:21

Hadoop部署mysql

2023-07-10 07:22:16

2023-06-06 08:14:18

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

2021-04-29 08:43:17

k8s可觀測性Metrics

2023-09-06 08:12:04

k8s云原生

2024-01-26 14:35:03

鑒權(quán)K8sNode

2023-08-29 10:27:32

2020-05-12 10:20:39

K8s kubernetes中間件

2022-09-05 08:26:29

Kubernetes標(biāo)簽

2022-04-29 10:40:38

技術(shù)服務(wù)端K8s

2023-08-03 08:36:30

Service服務(wù)架構(gòu)
點(diǎn)贊
收藏

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