Kubernetes K8s 平台中pod资源配置详解
Kubernetes K8s 平臺中pod資源配置詳解
- 定義文件內容
- 介紹
- Requests與Limits
- Kubernetes 中的資源單位
- CPU的含義
- 內存的含義
定義文件內容
Pod定義文件的完整內容:
apiVersion:v1 #必選,版本號,例如v1 kind:Pod #必選,Pod metadata: #必選,元數(shù)據(jù)name:string #必選,Pod名稱,命名需要規(guī)范namespace:string #必選,Pod所屬于的命名空間,不寫的話默認創(chuàng)建在default空間labels: #自定義標簽- name:string #自定義標簽名字annotations: #自定義注釋- name:string #自定義注釋列表 spec: #必選,取值類型為Object,Pod中容器的詳細定義containers: #必選,Pod中容器列表- name:string #必選,容器名稱,命名需要規(guī)范image:string #必選,容器的鏡像名稱imagePullPolicy:[Always| Never | IfNotPresent] #獲取鏡像的策略 Alawys表示下載鏡像 IfnotPresent表示優(yōu)先使用本地鏡像,否則下載鏡像,Nerver表示僅使用本地鏡像command: [string] #容器的啟動命令列表,如不指定,使用打包時使用的啟動命令args: [string] #容器的啟動命令參數(shù)列表workingDir: string #容器的工作目錄volumeMounts: #掛載到容器內部的存儲卷配置- name: string #引用pod定義的共享存儲卷的名稱,需用volumes[]部分定義的的卷名mountPath: string #存儲卷在容器內mount的絕對路徑,應少于512字符readOnly: boolean #是否為只讀模式ports: #需要暴露的端口庫號列表- name: string #端口號名稱containerPort: int #容器需要監(jiān)聽的端口號hostPort: int #容器所在主機需要監(jiān)聽的端口號,默認與Container相同protocol: string #端口協(xié)議,支持TCP和UDP,默認TCPenv: #容器運行前需設置的環(huán)境變量列表- name: string #環(huán)境變量名稱value: string #環(huán)境變量的值resources: #資源限制和請求的設置limits: #資源限制的設置cpu: string #Cpu的限制,單位為core數(shù),將用于docker run --cpu-shares參數(shù)memory: string #內存限制,單位可以為Mib/Gib,將用于docker run --memory參數(shù)requests: #資源請求的設置cpu: string #Cpu請求,容器啟動的初始可用數(shù)量memory: string #內存清楚,容器啟動的初始可用數(shù)量livenessProbe: #對Pod內個容器健康檢查的設置,當探測無響應幾次后將自動重啟該容器,檢查方法有exec、httpGet和tcpSocket,對一個容器只需設置其中一種方法即可exec: #對Pod容器內檢查方式設置為exec方式command: [string] #exec方式需要制定的命令或腳本httpGet: #對Pod內個容器健康檢查方法設置為HttpGet,需要制定Path、portpath: stringport: numberhost: stringscheme: stringHttpHeaders:- name: stringvalue: stringtcpSocket: #對Pod內個容器健康檢查方式設置為tcpSocket方式port: numberinitialDelaySeconds: 0 #容器啟動完成后首次探測的時間,單位為秒timeoutSeconds: 0 #對容器健康檢查探測等待響應的超時時間,單位秒,默認1秒periodSeconds: 0 #對容器監(jiān)控檢查的定期探測時間設置,單位秒,默認10秒一次successThreshold: 0failureThreshold: 0securityContext:privileged:falserestartPolicy: [Always | Never | OnFailure] #Pod的重啟策略,默認值為Always,Always表示一旦不管以何種方式終止運行,kubelet都將重啟,OnFailure表示只有Pod以非0退出碼退出才重啟,Nerver表示不再重啟該PodnodeSelector: obeject #設置NodeSelector表示將該Pod調度到包含這個label的node上,以key:value的格式指定imagePullSecrets: #Pull鏡像時使用的secret名稱,以key:secretkey格式指定- name: stringhostNetwork:false #是否使用主機網(wǎng)絡模式,默認為false,如果設置為true,表示使用宿主機網(wǎng)絡volumes: #在該pod上定義共享存儲卷列表- name: string #共享存儲卷名稱 (volumes類型有很多種)emptyDir: {} #類型為emtyDir的存儲卷,與Pod同生命周期的一個臨時目錄。為空值hostPath: string #類型為hostPath的存儲卷,表示掛載Pod所在宿主機的目錄path: string #Pod所在宿主機的目錄,將被用于同期中mount的目錄secret: #類型為secret的存儲卷,掛載集群與定義的secre對象到容器內部scretname: string items: - key: stringpath: stringconfigMap: #類型為configMap的存儲卷,掛載預定義的configMap對象到容器內部name: stringitems:- key: stringpath: string介紹
在K8s中定義Pod中運行容器有兩個維度的限制:
- 資源需求:即運行Pod的節(jié)點必須滿足運行Pod的最基本需求才能運行Pod。
如: Pod運行至少需要2G內存,1核CPU。 - 資源限額:即運行Pod期間,可能內存使用量會增加,那最多能使用多少內存,這就是資源限額。
Requests與Limits
Requests: 就是需求限制,也叫軟限制。
Limits:最大限制,也叫硬限制。
通常來說:Limits >= Requests 并且requests 和 limits 通常要一起配置,若只配置了requests,而不配置limits,則很可能導致Pod會吃掉(占用)所有資源。
注意事項:
- requests未設置時,默認與limits相同。limits未設置時,默認值與集群配置相關。
- 可以使用requests來設置各容器需要的最小資源。limits用于限制運行時容器占用的資源,用來限制容器的最大CPU、內存的使用率。
- 當容器申請內存超過limits時會被終止,并根據(jù)重啟策略進行重啟。
Kubernetes 中的資源單位
CPU的含義
CPU資源的約束和請求以 CPU 為單位。
Kubernetes中的一個CPU等于云平臺上的 1個vCPU/核 和裸機Intel處理器上的 1個超線程 。
可以表達帶小數(shù) CPU 的請求。spec.containers[].resources.requests.cpu 為 0.5 的 Container 肯定能夠獲得請求 1 CPU 的容器的一半 CPU 資源。表達式 0.1 等價于表達式 100m, 可以看作 “100 millicpu”。有些人說成是“一百毫 cpu”,其實說的是同樣的事情。 具有小數(shù)點(如 0.1)的請求由 API 轉換為 100m;最大精度是 1m 。 因此,應該優(yōu)先考慮使用 100m 的形式。
CPU 總是按絕對數(shù)量來請求的,不可以使用相對數(shù)量; 0.1 的 CPU 在單核、雙核、48 核的機器上的意義是一樣的。
另一種說法:
我們知道2核2線程的CPU,可被系統(tǒng)識別為4個邏輯CPU,在K8s中對CPU的分配限制是對邏輯CPU做分片限制的。也就是說分配給容器一個CPU,實際是分配一個邏輯CPU。而且1個邏輯CPU還可被單獨劃分子單位,即 1個邏輯CPU,還可被劃分為1000個millicore(毫核), 簡單說就是1個邏輯CPU,繼續(xù)邏輯分割為1000個毫核。
毫核:可簡單理解為將CPU的時間片做邏輯分割,每一段時間片就是一個毫核。所以:500m 就是500毫核,即0.5個邏輯CPU。
內存的含義
內存的約束和請求以字節(jié)為單位。可以使用以下后綴之一以一般整數(shù)或定點數(shù)字形式來表示內存: E、P、T、G、M、k。也可以使用對應的 2 的冪數(shù):Ei、Pi、Ti、Gi、Mi、Ki。 例如,以下表達式所代表的是大致相同的值:
128974848、129e6、129M、123Mi
- K,M,G,T,P,E :通常這些單位是以1000為換算標準的。
- Ki, Mi,Gi,Ti, Pi, Ei:通常這些單位是以1024為換算標準的。
下面是個例子。
以下 Pod 有兩個 Container。每個 Container 的請求為 0.25 cpu 和 64MiB(226 字節(jié))內存, 每個容器的資源約束為 0.5 cpu 和 128MiB 內存。 可以認為該 Pod 的資源請求為 0.5 cpu 和 128 MiB 內存,資源限制為 1 cpu 和 256MiB 內存。
apiVersion: v1 kind: Pod metadata:name: frontend spec:containers:- name: appimage: images.my-company.example/app:v4env:- name: MYSQL_ROOT_PASSWORDvalue: "password"resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"- name: log-aggregatorimage: images.my-company.example/log-aggregator:v6resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"總結
以上是生活随笔為你收集整理的Kubernetes K8s 平台中pod资源配置详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python-获取UUID
- 下一篇: 未来已来——工作空间 WorkSpace