k8s-實(shí)戰(zhàn)入門-Pod詳解(十)

本章節(jié)將詳細(xì)介紹Pod資源的各種配置(yaml)和原理。

5.1 Pod介紹

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


每個(gè)Pod中都可以包含一個(gè)或者多個(gè)容器,這些容器可以分為兩類:

  • 用戶程序所在的容器,數(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)路通信
    這里是Pod內(nèi)部的通訊,Pod的之間的通訊采用虛擬二層網(wǎng)絡(luò)技術(shù)來實(shí)現(xiàn),我們當(dāng)前環(huán)境用的是Flannel

5.1.2 Pod定義

下面是Pod的資源清單:

apiVersion: v1     #必選,版本號(hào),例如v1
kind: Pod         #必選,資源類型,例如 Pod
metadata:         #必選,元數(shù)據(jù)
  name: string     #必選,Pod名稱
  namespace: string  #Pod所屬的命名空間,默認(rèn)為"default"
  labels:           #自定義標(biāo)簽列表
    - name: string                 
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: #需要暴露的端口庫(kù)號(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)探測(cè)無響應(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)完成后首次探測(cè)的時(shí)間,單位為秒
       timeoutSeconds: 0          #對(duì)容器健康檢查探測(cè)等待響應(yīng)的超時(shí)時(shí)間,單位秒,默認(rèn)1秒
       periodSeconds: 0           #對(duì)容器監(jiān)控檢查的定期探測(cè)時(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
小提示:
# 在這里,可通過一個(gè)命令來查看每種資源的可配置項(xiàng)
#  kubectl **explain** 資源類型        查看某種資源可以配置的一級(jí)屬性
# kubectl explain 資源類型.屬性    查看屬性的子屬性
[root@master ~]# kubectl explain pod
[root@master ~]# kubectl explain pod.metadata
在kubernetes中基本所有資源的一級(jí)屬性都是一樣的,主要包含5部分:
 apiVersion  <string>    版本,由kubernetes內(nèi)部定義,版本號(hào)必須可以用 kubectl api-versions 查詢到
 kind <string>                類型,由kubernetes內(nèi)部定義,版本號(hào)必須可以用 kubectl api-resources 查詢到
metadata  <Object>    元數(shù)據(jù),主要是資源標(biāo)識(shí)和說明,常用的有name、namespace、labels等
> 
> spec <Object>              描述,這是配置中最重要的一部分,里面是對(duì)各種資源配置的詳細(xì)描述               
> 
> status  <Object>            狀態(tài)信息,里面的內(nèi)容不需要定義,由kubernetes自動(dòng)生成
kubectl apiversions
kubectl api-resources
kubectl get pods nginx-64777cd554-4k4pf -n dev -o yaml


在上面的屬性中,spec是接下來研究的重點(diǎn),繼續(xù)看下它的常見子屬性:

containers  <[]Object>      容器列表,用于定義容器的詳細(xì)信息
nodeName <String>          根據(jù)nodeName的值將pod調(diào)度到指定的Node節(jié)點(diǎn)上
nodeSelector  <map[]>      根據(jù)NodeSelector中定義的信息選擇將該P(yáng)od調(diào)度到包含這些label的Node 上
hostNetwork  <boolean>    是否使用主機(jī)網(wǎng)絡(luò)模式,默認(rèn)為false,如果設(shè)置為true,表示使用宿主機(jī)網(wǎng)絡(luò)
volumes      <[]Object>      存儲(chǔ)卷,用于定義Pod上面掛在的存儲(chǔ)信息
restartPolicy <string>      重啟策略,表示Pod在遇到故障的時(shí)候的處理策略
kubectl explain pods.spec
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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