k8s 資源清單與pod

k8s中的資源

k8s中所有的內(nèi)容都抽象成了資源,資源實(shí)例化后,稱(chēng)為對(duì)象。所有對(duì)象可以通過(guò) get delete edit apply進(jìn)行增刪改查。通常分類(lèi)以下三類(lèi)資源

  • namespace級(jí)別資源:pod、rs、rc、deployment、service、ingress、volume、configmap...
  • 集群級(jí)別資源:namespace、node...
  • 元數(shù)據(jù)型資源:HPA...

namespace為資源提供了集群內(nèi)的邏輯隔離,需要注意的是,這只是邏輯隔離,不同namespace的pod有可能運(yùn)行在同一個(gè)節(jié)點(diǎn)node上。

pod概念理解

pod是k8s編排管理的最小單元,pod內(nèi)允許運(yùn)行多個(gè)容器,pod內(nèi)的容器共享同一個(gè)網(wǎng)絡(luò)命名空間、Linux協(xié)議棧與存儲(chǔ),pod可以簡(jiǎn)單理解為是一臺(tái)邏輯主機(jī)。

pod的生命周期

在pod的啟動(dòng)過(guò)程中,會(huì)依次執(zhí)行InitC容器與MainC容器。InitC容器順序運(yùn)行,運(yùn)行成功后即銷(xiāo)毀,InitC容器全部運(yùn)行成功后,才會(huì)運(yùn)行MainC容器。

k8s擁有三種方式的探針對(duì)mainc容器健康檢查

  • ExecAction: 在容器內(nèi)執(zhí)行執(zhí)行指定命令,命令返回0則認(rèn)為探測(cè)成功。
  • TcpSocketAction: 向pod內(nèi)指定端口的容器進(jìn)行tcp檢查,端口已經(jīng)打開(kāi)即為成功。
  • HttpGetAction: 向pod內(nèi)指定端口與路徑執(zhí)行http get請(qǐng)求,響應(yīng)嗎在200與400之間即為成功。

mainC容器擁有兩種類(lèi)型探針,readiness檢測(cè)與liveness檢測(cè)

  • readiness檢測(cè):就緒檢測(cè),檢測(cè)容器是否已經(jīng)準(zhǔn)備好對(duì)外提供服務(wù),如果檢測(cè)失敗,控制器會(huì)將此pod從endpoints中剔除,這個(gè)pod暫時(shí)不對(duì)外提供服務(wù)。readiness通常用于容器內(nèi)服務(wù)啟動(dòng)成功檢查。
  • liveness檢測(cè):存活檢測(cè),檢測(cè)容器是否正在運(yùn)行,如果檢測(cè)失敗,kubelet會(huì)殺死容器,容器會(huì)根據(jù)重啟策略來(lái)重啟。

pod內(nèi)的所有容器都可以擁有exec或httpGet類(lèi)型的鉤子,在容器的啟動(dòng)或銷(xiāo)毀階段執(zhí)行。

pod的生命周期

動(dòng)手實(shí)踐一下吧

通過(guò)kubctl apply -f xxx.yaml創(chuàng)建一個(gè)namespace,再創(chuàng)建一個(gè)運(yùn)行著nginx容器的pod。

apiVersion: v1
# 資源類(lèi)型
kind: Namespace
metadata:
  # 創(chuàng)建一個(gè)名稱(chēng)為test的命令空間
  name: test
apiVersion: v1
# 資源類(lèi)型
kind: Pod
metadata:
  # pod名稱(chēng)
  name: pod-test
  # pod所在namespace是test
  namespace: test
spec:
  # initC容器
  initContainers:
    - name: init-container
      image: busybox:latest
      command: ['sh','-c','echo init container is running && sleep 3600' ]
  # mainC容器
  containers:
    - name: nginx-pod
      image: nginx:latest
      ports:
        - name: nginx-port
          containerPort: 80
      # 鉤子
      lifecycle:
        # 容器啟動(dòng)鉤子
        postStart:
          exec:
             command: ["/bin/sh","-c", "echo pod is starting > /tmp/start "]
        #容器關(guān)閉鉤子
        preStop:
          exec:
             command: ["/bin/sh","-c", "echo pod is  stoping > /tmp/stop "]
      # 就緒檢測(cè)
      readinessProbe:
        # httpGet檢測(cè),podip:80/index.html
        httpGet:
          port: 80
          path: /index.html
      # 存活檢測(cè)
      livenessProbe:
        # tcp檢測(cè),檢測(cè)80端口是否打開(kāi)
        tcpSocket:
           port: 80
最后編輯于
?著作權(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ù)。

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