kubernetes Pod 學(xué)習(xí)

1 Pod結(jié)構(gòu)

Pod是kubernetes集群進(jìn)行管理的最小單元,程序要運(yùn)行必須部署在容器中,而容器必須存在于Pod中。Pod可以認(rèn)為是容器的封裝,一個(gè)Pod中可以存在一個(gè)或者多個(gè)容器。
每個(gè)Pod中都可以包含一個(gè)或者多個(gè)容器,這些容器可以分為兩類(lèi):

  • 用戶程序所在的容器,數(shù)量可多可少

  • Pause容器,這是每個(gè)Pod都會(huì)有的一個(gè)根容器,它的作用有兩個(gè):

    • 可以以它為依據(jù),評(píng)估整個(gè)Pod的健康狀態(tài)

    • 可以在根容器上設(shè)置Ip地址,其它容器都此Ip(Pod IP),以實(shí)現(xiàn)Pod內(nèi)部的網(wǎng)路通信

2 Pod定義

pod yaml 文件格式

apiVersion: v1     #必選,版本號(hào),例如v1
kind: Pod         #必選,資源類(lèi)型,例如 Pod
metadata:         #必選,元數(shù)據(jù)
  name: string     #必選,Pod名稱(chēng)
  namespace: string  #Pod所屬的命名空間,默認(rèn)為"default"
  labels:           #自定義標(biāo)簽列表
    - name: string                 
spec:  #必選,Pod中容器的詳細(xì)定義
  containers:  #必選,Pod中容器列表
  - name: string   #必選,容器名稱(chēng)
    image: string  #必選,容器的鏡像名稱(chēng)
    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ǔ)卷的名稱(chēng),需用volumes[]部分定義的的卷名
      mountPath: string #存儲(chǔ)卷在容器內(nèi)mount的絕對(duì)路徑,應(yīng)少于512字符
      readOnly: boolean #是否為只讀模式
    ports: #需要暴露的端口庫(kù)號(hào)列表
    - name: string        #端口的名稱(chēng)
      containerPort: int  #容器需要監(jiān)聽(tīng)的端口號(hào)
      hostPort: int       #容器所在主機(jī)需要監(jiān)聽(tīng)的端口號(hào),默認(rèn)與Container相同
      protocol: string    #端口協(xié)議,支持TCP和UDP,默認(rèn)TCP
    env:   #容器運(yùn)行前需設(shè)置的環(huán)境變量列表
    - name: string  #環(huán)境變量名稱(chēng)
      value: string #環(huán)境變量的值

在這里,可通過(guò)一個(gè)命令來(lái)查看每種資源的可配置項(xiàng)

#   kubectl explain 資源類(lèi)型         查看某種資源可以配置的一級(jí)屬性
#   kubectl explain 資源類(lèi)型.屬性     查看屬性的子屬性
[root@k8s-master01 ~]# kubectl explain pod
KIND:     Pod
VERSION:  v1
FIELDS:
   apiVersion   <string>
   kind <string>
   metadata     <Object>
   spec <Object>
   status       <Object>
[root@k8s-master01 ~]# kubectl explain pod.metadata

3 Pod 基本操作

在上面一節(jié)中提到pod yaml文件基本格式,其中重點(diǎn)的spec參數(shù),這一節(jié)我們以一個(gè)例子作為講解
首先編寫(xiě)一個(gè)簡(jiǎn)單的nginx yaml 文件

apiVersion: v1
kind: Pod
metadata:
  name: pod-base
  namespace: dev
  labels:
    user: k8s-admin
spec:
  containers:
  - name: nginx
    image: nginx:1.19
  - name: busybox
    image: busybox:1.30

創(chuàng)建Pod

[root@k8s-master01 pod]# kubectl apply -f pod-base.yaml
pod/pod-base created

查看Pod狀況

[root@k8s-master01 pod]# kubectl get pod -n dev

可以通過(guò)describe查看內(nèi)部的詳情

[root@k8s-master01 pod]# kubectl describe pod pod-base -n dev

進(jìn)入pod中的busybox容器,查看文件內(nèi)容

命令: kubectl exec  pod名稱(chēng) -n 命名空間 -it -c 容器名稱(chēng) /bin/sh  在容器內(nèi)部執(zhí)行命
kubectl exec pod-command -n dev -it -c busybox /bin/sh

鏡像拉取

apiVersion: v1
kind: Pod
metadata:
  name: pod-imagepullpolicy
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:1.19
    imagePullPolicy: Never # 用于設(shè)置鏡像拉取策略

imagePullPolicy,用于設(shè)置鏡像拉取策略,kubernetes支持配置三種拉取策略:

  • Always:總是從遠(yuǎn)程倉(cāng)庫(kù)拉取鏡像(一直遠(yuǎn)程下載)
  • IfNotPresent:本地有則使用本地鏡像,本地沒(méi)有則從遠(yuǎn)程倉(cāng)庫(kù)拉取鏡像(本地有就本地 本地沒(méi)遠(yuǎn)程下載)
  • Never:只使用本地鏡像,從不去遠(yuǎn)程倉(cāng)庫(kù)拉取,本地沒(méi)有就報(bào)錯(cuò) (一直使用本地)
    默認(rèn)值說(shuō)明:
    如果鏡像tag為具體版本號(hào), 默認(rèn)策略是:IfNotPresent
    如果鏡像tag為:latest(最終版本) ,默認(rèn)策略是always

端口設(shè)置,也就是containers的ports選項(xiàng)。

apiVersion: v1
kind: Pod
metadata:
  name: pod-ports
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports: # 設(shè)置容器暴露的端口列表 對(duì)外提供服務(wù)的端口
    - name: nginx-port
      containerPort: 80  # 指定端口號(hào)
      protocol: TCP  #指定端口通訊協(xié)議

資源配額

容器中的程序要運(yùn)行,肯定是要占用一定資源的,比如cpu和內(nèi)存等,如果不對(duì)某個(gè)容器的資源做限制,那么它就可能吃掉大量資源,導(dǎo)致其它容器無(wú)法運(yùn)行。針對(duì)這種情況,kubernetes提供了對(duì)內(nèi)存和cpu的資源進(jìn)行配額的機(jī)制,這種機(jī)制主要通過(guò)resources選項(xiàng)實(shí)現(xiàn),他有兩個(gè)子選項(xiàng):

  • limits:用于限制運(yùn)行時(shí)容器的最大占用資源,當(dāng)容器占用資源超過(guò)limits時(shí)會(huì)被終止,并進(jìn)行重啟
  • requests :用于設(shè)置容器需要的最小資源,如果環(huán)境資源不夠,容器將無(wú)法啟動(dòng)
    接下來(lái),編寫(xiě)一個(gè)測(cè)試案例,創(chuàng)建pod-resources.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-resources
  namespace: dev
spec:
  containers:
  - name: nginx
    image: nginx:latest
    resources: # 資源配額
      limits:  # 限制資源(上限)
        cpu: "2" # CPU限制,單位是core數(shù)
        memory: "10Gi" # 內(nèi)存限制
      requests: # 請(qǐng)求資源(下限)
        cpu: "1"  # CPU限制,單位是core數(shù)
        memory: "10Mi"  # 內(nèi)存限制

在這對(duì)cpu和memory的單位做一個(gè)說(shuō)明:

  • cpu:core數(shù),可以為整數(shù)或小數(shù)
  • memory: 內(nèi)存大小,可以使用Gi、Mi、G、M等形式
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Pod介紹 Pod是kubernetes中可以創(chuàng)建和部署的最小也是最簡(jiǎn)的單位。一個(gè)Pod代表著集群中運(yùn)行的一個(gè)進(jìn)程...
    小波同學(xué)閱讀 2,267評(píng)論 0 1
  • 介紹 Pod結(jié)構(gòu) 每個(gè)Pod中都可以包含一個(gè)或者多個(gè)容器,這些容器可以分為兩類(lèi): 用戶程序所在的容器,數(shù)量可多可少...
    _大叔_閱讀 311評(píng)論 0 1
  • 一、Pod的介紹 Pod是k8s最小部署單元,一個(gè)Pod中可以有一個(gè)或者多個(gè)容器也就是一組容器的集合,Pod又稱(chēng)為...
    雞蛋掛面閱讀 619評(píng)論 0 0
  • 控制器管理的 Pod: 生產(chǎn)環(huán)境中可以用控制器創(chuàng)建和管理多個(gè) pod??刂破髟?pod 失敗的情況下可以處理副本、...
    菜頭_355f閱讀 868評(píng)論 0 1
  • 寫(xiě)在前面 前面的系列文章已介紹kubernetes架構(gòu),安裝,升級(jí)和快速入門(mén),讀者通過(guò)文章的實(shí)操已對(duì)kuberne...
    HappyLau談云計(jì)算閱讀 663評(píng)論 0 0

友情鏈接更多精彩內(nèi)容