pod 知識(shí)點(diǎn) 上

在 K8S 中, pod 是一個(gè)非常關(guān)鍵的存在,我們一起來(lái)看看 pod 具體是個(gè)什么?

[圖片上傳失敗...(image-da7e54-1687664619081)]

pod 是個(gè)啥?

pod 是個(gè)什么呢?pod 是 K8S中的一個(gè)核心概念

每一個(gè) pod 都會(huì)有一個(gè)特殊的根容器,叫做 pause 容器,pause 容器對(duì)應(yīng)的鏡像也是屬于 K8S 的一部分的

pod 里面可不僅僅只有 pause 容器,還可以有其他多個(gè)容器

[圖片上傳失敗...(image-15104e-1687664619081)]

之前文章我們稍微提到過(guò) pod,每一個(gè) pod ,都是一個(gè)具體應(yīng)用的實(shí)例,pod 有自己獨(dú)自的 IP,主機(jī)名,進(jìn)程等等

  • pod 與 容器是 1 對(duì)多的關(guān)系

一個(gè) pod 里面可以有多個(gè)容器,多個(gè)容器彼此共享網(wǎng)絡(luò)和存儲(chǔ)資源

我們都是通過(guò) pod 中的 pause 容器 來(lái)管理其他容器的, 因?yàn)?pause 容器會(huì)存儲(chǔ)所有的容器狀態(tài)

  • pod 和節(jié)點(diǎn)的關(guān)系

pod 存在于節(jié)點(diǎn)中,不同節(jié)點(diǎn)的 pod 相互通信,是通過(guò)二層網(wǎng)絡(luò)通信的

  • pod 自身還有啥不同的?

pod 自身還分成普通的 pod,和靜態(tài)的 pod

我們?nèi)绾味x一個(gè) pod

在 K8S 中定義一個(gè) pod 也是比較簡(jiǎn)單的,就是寫一個(gè) yaml 文件,只不過(guò)我們剛開(kāi)始需要多加嘗試和練習(xí)

yaml 文件大體是這樣的,純手寫 , 下面的配置,我把不太容易理解的或者說(shuō)是容易誤解的名詞解釋一下,其他的自行看英文即可理解

apiVersion: v1  // 版本號(hào)
kind: Pod       // 類型
metadata: 
  name: pod name
  namespace: pod namespace
  labels:
    - name: pod label
    annotations:
    - name: pod annotation  // 自定義注釋列表
spec:   // pod 中容器的詳細(xì)定義
  container:
  - name: container name
    image: container image
    imagesPullPolicy: [Always|Never|IfNotPresent] // 鏡像拉取策略
    command: command list
    agrs: app start params
    workingDir: work dir
    volumeMounts:
    - name: volume name
      mountPath: volume absolutely path
      readonly: boolean
    ports:
    - name: ports list name
      containerPort: 8888
      hostPort: 9999
      protocol: TCP  // 可以是 TCP 和 UDP
    env:
    - name: env name
      value: string
    resources:
      limits:
        cpu: string
        memory: string
      requeste:
        cpu: string
        memory: string
    livenessProbe:      // 健康檢查設(shè)置
      exec:
        command: [string]
      httpGet:          // 通過(guò) httpGet  方式檢查
        path: string
        port: string
        host: string
        scheme: string
        httpHeaders: 
        - name: httpHeaders name
          value: string 
      tcpSocket:        // 通過(guò) tcpSocket 方式檢查
        port: 80
      initialDelaySeconds: 0    // 首次檢查時(shí)間
      timeoutSeconds: 0         // 超時(shí)檢查時(shí)間
      periodSeconds: 0          // 檢查間隔時(shí)間
      successTreshold: 0
      failuerTreshold: 0
      securityContext:          // 安全配置
        privileged: false
    restartPolicy: [Always|Never|OnFailure]
    nodeSelector: object
    imagePullSecrets:
    - name: string
    hostNetwork: false          // 是否使用主機(jī)網(wǎng)絡(luò)模式?
  volumes:                      // 存儲(chǔ)卷
  - name: volumes list name
    emptyDir: {}
    hostPath:               // pod 所在主機(jī)的目錄,用于掛載
      path: string
    secret:                 // secret 類型 存儲(chǔ)卷
      secretName: secret name
      item:
      - key: specific key
        path: key path
    configMap:              // configmap 類型存儲(chǔ)卷
      name: string
      items:
      - key: specific key
        path: string

看了上面的這個(gè) yaml ,起初可能會(huì)覺(jué)得有點(diǎn)多,一下子記不住, xdm ,沒(méi)有讓你記住,咱們只需要知道 pod 的 yaml 是長(zhǎng) 這個(gè)樣子,里面都有哪些用法即可

pod 基本用法使用示例

在 K8S 中對(duì) pod 中的容器運(yùn)行也是有要求的

  • 容器的主程序是在前臺(tái)運(yùn)行,而不是后臺(tái),因此,應(yīng)用需要改造成前臺(tái)運(yùn)行的方式
  • 若 pod 中包含的容器是一個(gè)后臺(tái)執(zhí)行程序,那么執(zhí)行完命令之后,pod 就會(huì)被銷毀
  • 若 pod 是一個(gè) rc ,rc 就是 replicationController ,那么 pod 就會(huì)處于一個(gè) 創(chuàng)建,銷毀的循環(huán)中 需注意

我們分享創(chuàng)建的pod,可以是里面放 1 個(gè)容器,也可以是放多個(gè)容器的,根據(jù)我們需要去處理即可

1 個(gè) pod 放 1 個(gè)容器

例如我們 1 個(gè) pod 里面放 1 個(gè) mongdb 的容器,可以這樣來(lái)寫

[圖片上傳失敗...(image-fd0ece-1687664619081)]

1 個(gè) pod 放 多個(gè) 容器

例如我們 1 個(gè) pod 里面放 1 個(gè) mongodb 和 1 個(gè) redis 容器,可以這樣來(lái)寫

[圖片上傳失敗...(image-d4c8f-1687664619081)]

如何操作 pod

根據(jù)已有 yaml 創(chuàng)建 pod

kubectl create -f yaml文件

查看 pod 和 查看 pod 詳情

例如這樣的

[圖片上傳失敗...(image-4d4743-1687664619081)

  • kubectl get pod -A

查看所有命名空間下面的 pod

  • kubectl get pod pod名字
  • Kubectl get pod pod名字 -o wide

查看 pod 的更多信息

  • kubectl describe pod pod名字

查看 pod 的詳情

刪除 pod

  • kubectl delete pod pod名字
  • kubectl delete pod pod名字 -n 命名空間
  • kubectl delete pod --all

刪除所有的 pod

今天就到這里,學(xué)習(xí)所得,若有偏差,還請(qǐng)斧正

歡迎點(diǎn)贊,關(guān)注,收藏

朋友們,你的支持和鼓勵(lì),是我堅(jiān)持分享,提高質(zhì)量的動(dòng)力

[圖片上傳失敗...(image-3b8eac-1687664619081)]

好了,本次就到這里

技術(shù)是開(kāi)放的,我們的心態(tài),更應(yīng)是開(kāi)放的。擁抱變化,向陽(yáng)而生,努力向前行。

我是阿兵云原生,歡迎點(diǎn)贊關(guān)注收藏,下次見(jiàn)~

?著作權(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)容