国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【云原生】kubernetes深入理解Pod對象:基本管理

這篇具有很好參考價值的文章主要介紹了【云原生】kubernetes深入理解Pod對象:基本管理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers

目錄

一、Pod 基本概念

二、pod 常用命令

三、Pod 資源共享實現(xiàn)機(jī)制

3.1 共享網(wǎng)絡(luò)

3.2 共享存儲

四、Pod 狀態(tài)管理

五、重啟策略和健康檢查

5.1 基本概念

5.1.1 重啟策略

5.1.2 健康檢查有以下三種類型:

5.1.3 支持以下三種檢查方法:

5.2 示例講解

5.2.1 就緒健康檢查示例

六、Pod環(huán)境變量注入

6.1 變量定義方式

6.2?Pod屬性中獲取

6.3?ConfigMap獲取

七、Init Container

7.1 概念

7.2 應(yīng)用場景

7.3 使用 Init 容器示例


一、Pod 基本概念


Pod?是可以在 Kubernetes 中創(chuàng)建和管理的、最小的可部署的計算單元。

Pod?(就像在鯨魚莢或者豌豆莢中)是一組(一個或多個)?容器; 這些容器共享存儲、網(wǎng)絡(luò)、以及怎樣運(yùn)行這些容器的聲明。

Pod 特點

? ? ? ? ? 一個Pod可以理解為是一個應(yīng)用實例,提供服務(wù)

? ? ? ? ? Pod中容器始終部署在一個Node上

? ? ? ? ? Pod中容器共享網(wǎng)絡(luò)、存儲資源

? ? ? ? ? Kubernetes直接管理Pod,而不是容器

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers

? ? ? ?Pod 的共享上下文包括一組 Linux 名字空間、控制組(cgroup)和可能一些其他的隔離 ,即用來隔離 Docker 容器的技術(shù)。 在 Pod 的上下文中,每個獨立的應(yīng)用可能會進(jìn)一步實施隔離。

就 Docker 概念的術(shù)語而言,Pod 類似于共享命令空間和文件系統(tǒng)卷的一組 Docker 容器。


二、pod 常用命令


創(chuàng)建Pod:
kubectl apply -f	pod.yaml

或者使用命令 kubectl run nginx --image=nginx 

查看Pod:
kubectl get pods
kubectl describe pod <Pod名稱> 

查看日志:
kubectl logs <Pod名稱>	[-c CONTAINER] 
kubectl logs <Pod名稱>	[-c CONTAINER] -f 

進(jìn)入容器終端:
kubectl exec <Pod名稱> [-c CONTAINER] -- bash 

刪除Pod:
kubectl delete <Pod名稱>

三、Pod 資源共享實現(xiàn)機(jī)制


3.1 共享網(wǎng)絡(luò)


將業(yè)務(wù)容器網(wǎng)絡(luò)加入到“負(fù)責(zé)網(wǎng)絡(luò)的容器”實現(xiàn)網(wǎng)絡(luò)共享

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers

?在一個pod 中運(yùn)行兩個容器,兩個容器之間網(wǎng)絡(luò)是互通的。

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: test
  name: pod-net-test
  namespace: default
spec:
  containers:
  - image: busybox
    name: test01
    command: ["/bin/sh","-c","sleep 360000"]
  - image: nginx:1.17
    name: web

?進(jìn)入 web容器中在 index.html 頁面中輸入 “hello world” ,我們再從 test01 容器中下載 訪問

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers

3.2 共享存儲


一個pod中的容器通過數(shù)據(jù)卷共享數(shù)據(jù)。

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers

? ? ? ?通過在 web容器 /data 文件夾下創(chuàng)建一個文件 可以在容器 test 中查看 ,從而可以得出 pod 中容器中的部分?jǐn)?shù)據(jù)是共享的。

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: test
  name: pod-volume-test 
  namespace: default
spec:
  containers:
  - image: busybox 
    name: test
    command: ["/bin/sh","-c","sleep 360000"]
    volumeMounts:
    - name: log
      mountPath: /data
  - image: nginx
    name: web
    volumeMounts:
    - name: log
      mountPath: /data

  volumes:
  - name: log
    emptyDir: {}

? ? ? ? 在web容器中的 /data 文件夾下創(chuàng)建 index.html 文件,我們可以看到 在test容器中可以 查看到 index.html文件。

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers


四、Pod 狀態(tài)管理


Pod 一共有 5 種狀態(tài),這個狀態(tài)反映在 Pod 的 status 屬性中

  • Pending:這個狀態(tài)意味著,Pod 的 YAML 文件已經(jīng)提交給了 Kubernetes,API 對象已經(jīng)被創(chuàng)建并保存在 Etcd 當(dāng)中。但是這個 Pod 還沒有被調(diào)度成功,最常見的原因比如 Pod 中某個容器啟動不成功
  • Running:這個狀態(tài)下,Pod 已經(jīng)調(diào)度成功。也就是它包含的容器都已經(jīng)創(chuàng)建成功,并且至少有一個正在運(yùn)行中
  • Succeeded:這個狀態(tài)意味著,Pod 里的所有容器都正常運(yùn)行成功并退出了。這種情況在運(yùn)行一次性任務(wù)時最為常見
  • Failed:這個狀態(tài)下,Pod 里至少有一個容器以不正常的狀態(tài)退出。這個狀態(tài)出現(xiàn)時,你得想辦法 Debug 這個容器,比如查看 Pod 的事件和日志。
  • Unknown:這是一個異常狀態(tài),意味著 Pod 的狀態(tài)不能集群檢測到,這很有可能是主從節(jié)點(Master 和 Kubelet)間的通信出現(xiàn)了問題。

五、重啟策略和健康檢查


5.1 基本概念


5.1.1 重啟策略

? Always:當(dāng)容器終止退出后,總是重啟容器,默認(rèn)策略。

? OnFailure:當(dāng)容器異常退出(退出狀態(tài)碼非0)時,才重啟容器。

? Never:當(dāng)容器終止退出,從不重啟容器。

5.1.2 健康檢查有以下三種類型:

? livenessProbe(存活檢查):如果檢查失敗,將殺死容器,根據(jù)Pod 的restartPolicy來操作。

? readinessProbe(就緒檢查):如果檢查失敗,Kubernetes會把Pod從service endpoints中剔除。

? startupProbe(啟動檢查):指示容器中的應(yīng)用是否已經(jīng)啟動。如果提供了啟動探針(startup probe),則禁用所有其他探針,直到它成功為止。如果啟動探針失敗,kubelet 將殺死容器,容器服從其重啟策略進(jìn)行重啟。如果容器沒有提供啟動探針,則默認(rèn)狀態(tài)為成功Success。

5.1.3 支持以下三種檢查方法:

? httpGet:發(fā)送HTTP請求,返回200-400范圍狀態(tài)碼為成功。

? exec:執(zhí)行Shell命令返回狀態(tài)碼是0為成功。

? tcpSocket:發(fā)起TCP Socket建立成功。

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers

5.2 示例講解


官網(wǎng)示例:

Configure Liveness, Readiness and Startup Probes | Kubernetes

5.2.1 就緒健康檢查示例

運(yùn)行一個 pod 在容器中 /tmp/healthy 目錄下創(chuàng)建文件并 刪除 ,存活檢查 檢查 此路徑是否存在。

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: pod-check 
spec:
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
    livenessProbe:    # 存活檢查
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
    readinessProbe:   # 就緒檢查
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5

###  Pod 健康檢查示例
kubectl apply -f pod-healthy-check.yaml
### 查看pod的詳細(xì)信息
kubectl describe pod  pod-check
### 暴露服務(wù)端口
kubectl expose pod pod-check --port=80 --target-port=80

? ? ? ? ? ?存活檢查生效,可以看到 pod 的restarts 次數(shù)已經(jīng)增加了 一次。

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers

? ? ? ? ? ? 就緒檢查失敗, K8s會把Pod從service endpoints中剔除, 從而失去此 service 。

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers


六、Pod環(huán)境變量注入


6.1 變量定義方式


  • 自定義變量值
  • 變量值從Pod屬性中獲取
  • 變量值從Sectet、ConfigMap獲取

官方示例地址:通過環(huán)境變量將 Pod 信息呈現(xiàn)給容器 | Kubernetes

6.2?Pod屬性中獲取


apiVersion: v1
kind: Pod
metadata:
  name: pod-env-vars
spec:
  containers:
    - name: test
      image: busybox
      command: [ "sh", "-c", "sleep 36000"]
      env:
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: MY_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: MY_POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: MY_POD_SERVICE_ACCOUNT
          valueFrom:
            fieldRef:
              fieldPath: spec.serviceAccountName
        - name: Hello
          value: "helle Kubernetes!"
  restartPolicy: Never

? ? ? ? ? ?進(jìn)入容器 查看Pod 信息,我們使用echo $可以輸出結(jié)果

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers

6.3?ConfigMap獲取


官網(wǎng)示例地址:?ConfigMap | Kubernetes

? ? ? ?ConfigMap 是一種 API 對象,用來將非機(jī)密性的數(shù)據(jù)保存到鍵值對中。使用時,?Pods?可以將其用作環(huán)境變量、命令行參數(shù)或者存儲卷中的配置文件。

? ? ? ?使用 ConfigMap 來將你的配置數(shù)據(jù)和應(yīng)用程序代碼分開。ConfigMap 在設(shè)計上不是用來保存大量數(shù)據(jù)的。在 ConfigMap 中保存的數(shù)據(jù)不可超過 1 MiB。如果你需要保存超出此尺寸限制的數(shù)據(jù),你可能希望考慮掛載存儲卷 或者使用獨立的數(shù)據(jù)庫或者文件服務(wù)。

congfigMap.yaml?

apiVersion: v1
kind: ConfigMap
metadata:
  name: game-demo
data:  
  # 類屬性鍵:每一個鍵都映射到一個值
  player_initial_lives: "3"
  ui_properties_file_name: "user-interface.properties"
  
  game.properties: |
    enemy.types=aliens,monsters
    player.maximum-lives=5    
  user-interface.properties: |
    color.good=purple
    color.bad=yellow
    allow.textmode=true  

?pod-configMap.yaml

apiVersion: v1
kind: Pod
metadata:
  name: configmap-demo-pod
spec:
  containers:
    - name: demo
      image: alpine
      command: ["sleep", "3600"]
      env:
        - name: PLAYER_INITIAL_LIVES # 請注意這里和 ConfigMap 中的鍵名是不一樣的
          valueFrom:
            configMapKeyRef:
              name: game-demo           # 這個值來自 ConfigMap
              key: player_initial_lives # 需要取值的鍵
        - name: UI_PROPERTIES_FILE_NAME
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: ui_properties_file_name
      volumeMounts:
      - name: config
        mountPath: "/config"
        readOnly: true
  volumes:
    - name: config
      configMap:
        name: game-demo
        items:
        - key: "game.properties"
          path: "game.properties"
        - key: "user-interface.properties"
          path: "user-interface.properties"

創(chuàng)建Pod?

kubectl apply -f  configMap.yaml
kubectl apply   -f  pod-configMap.yaml

configmap-demo-pod運(yùn)行, 進(jìn)入容器可以看到 掛載目錄成功。

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers


七、Init Container


7.1 概念


Init Container:顧名思義,用于初始化工作,執(zhí)行完就結(jié)束,可以理解為一次性任務(wù)。

? 支持大部分應(yīng)用容器配置,但不支持健康檢查

? 優(yōu)先應(yīng)用容器執(zhí)行

7.2 應(yīng)用場景


? 環(huán)境檢查:例如確保應(yīng)用容器依賴的服務(wù)啟動后再啟動應(yīng)用容器

? 初始化配置:例如給應(yīng)用容器準(zhǔn)備配置文件,工具安裝和安裝腳本運(yùn)行。

7.3 使用 Init 容器示例


? ? ? ?部署一個web網(wǎng)站,網(wǎng)站程序沒有打到鏡像中,而是希望從代碼倉庫中動態(tài)拉取放到應(yīng)用容器中。下面的例子定義了一個具有 一 個 Init 容器的簡單 Pod。 等待 index下載成功 。 一旦這 Init容器 啟動完成,Pod 將啟動 spec 節(jié)中的應(yīng)用容器。

apiVersion: v1
kind: Pod
metadata:
  name: init-demo
spec:
  initContainers:
  - name: download
    image: busybox
    command: ['wget','-O', '/opt/index.html','http://www.ctnrs.com']
    volumeMounts:
    - name: wwwroot
      mountPath: "/opt"
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: wwwroot
      mountPath: /usr/share/nginx/html
  volumes:
  - name: wwwroot
    emptyDir: {}

? ? ? ?從pod 的狀態(tài)中我們可以看到 InitContainer 中的執(zhí)行狀態(tài)處于 Init?

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers

? ? ? ? ? ? init-demo 已處于運(yùn)行之中

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers

因此,Pod中會有這幾種類型的容器:

? Infrastructure Container:基礎(chǔ)容器,維護(hù)整個Pod網(wǎng)絡(luò)空間

? InitContainers:初始化容器,先于業(yè)務(wù)容器開始執(zhí)行

? Containers:業(yè)務(wù)容器,并行啟動

------------------------ 感謝點贊!--------------------------------

pod restarts,#  Kubernetes,docker,kubernetes,容器,livenessProbe,InitContainers文章來源地址http://www.zghlxwxcb.cn/news/detail-722907.html

到了這里,關(guān)于【云原生】kubernetes深入理解Pod對象:基本管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【探索 Kubernetes|作業(yè)管理篇 系列 8】探究 Pod 的 API 對象屬性級別與重要字段用法

    【探索 Kubernetes|作業(yè)管理篇 系列 8】探究 Pod 的 API 對象屬性級別與重要字段用法

    大家好,我是秋意零。 本專欄上一篇中,我們介紹了 Pod 的核心思想以及 Pod 的工作原理。今天我們還是探討 Pod ,聊一聊 Pod 的基本概念。 ?? 簡介 ?? 個人主頁 : 秋意零 ?? 個人介紹 :在校期間參與眾多云計算相關(guān)比賽,如:?? “省賽”、“國賽” ,并斬獲多項獎項榮

    2024年02月08日
    瀏覽(27)
  • 云原生Kubernetes:pod基礎(chǔ)

    云原生Kubernetes:pod基礎(chǔ)

    目錄 一、理論 1.pod 2.pod容器分類 3.鏡像拉取策略 4.pod 的重啟策略 二、實驗 1.Pod容器的分類 2.鏡像拉取策略 三、問題 1.apiVersion 報錯 2.pod v1版本資源未注冊 3.格式錯誤 4.取行顯示指定pod信息 四、總結(jié) (1)? 概念 ?Pod是kubernetes中最小的資源管理組件,Pod也是最小化運(yùn)行容器化應(yīng)

    2024年02月09日
    瀏覽(20)
  • 【云原生】Kubernetes之 Pod hook(鉤子)

    Pod hook(鉤子)是由 Kubernetes 管理的 kubelet 發(fā)起的,當(dāng)容器中的進(jìn)程啟動前或者容器中的進(jìn)程終止之前運(yùn)行,這是包含在容器的生命周期之中。可以同時為 Pod 中的所有容器都配置 hook。 Hook 的類型包括兩種: exec:執(zhí)行一段命令 HTTP:發(fā)送 HTTP 請求 示例如下: 說明: postStar

    2024年02月15日
    瀏覽(20)
  • 【云原生|Kubernetes】08-Pod中的Init容器

    Init 容器是一種特殊容器,在 Pod內(nèi)的應(yīng)用容器啟動之前運(yùn)行。Init 容器可以包括一些應(yīng)用鏡像中不存在的實用工具和安裝腳本。 你可以在 Pod 的spec中與用來描述應(yīng)用容器的 containers 數(shù)組平行的位置指定 Init 容器。 Init 容器的狀態(tài)在 status.initContainerStatuses 字段中以容器狀態(tài)數(shù)組

    2024年02月09日
    瀏覽(50)
  • 【云原生|Kubernetes】05-Pod的存儲卷(Volume)

    【云原生|Kubernetes】05-Pod的存儲卷(Volume)

    Volume 是Pod 中能夠被多個容器訪問的共享目錄。 Kubernetes 中的Volume 概念、用 途和目的與 Docke 中的 Vo lume 比較類似,但二者不能等價, 首先 Kubernetes 中的Volume 被定義在 Pod上 ,被一個 Pod 里的多個容器掛載到具體的文件目錄 ;其次, Kubernete 中的 Volume與 Pod 的生命周期相同,但

    2024年02月07日
    瀏覽(45)
  • 在CSDN學(xué)Golang云原生(Kubernetes Pod)

    在 Kubernetes 中,Pod 是最小的可部署單元,它包含一個或多個容器。使用 Golang 來定義和操作 Pod 時,需要使用 kubernetes/client-go 包提供的 API。 以下是 Golang 定義和基本用法 Pod 的示例: 安裝 kubernetes/client-go 包 在 Golang 環(huán)境中安裝 kubernetes/client-go 包,該包提供了訪問 Kubernetes

    2024年02月15日
    瀏覽(29)
  • Kubernetes詳解(十五)——Pod對象創(chuàng)建過程

    Kubernetes詳解(十五)——Pod對象創(chuàng)建過程

    今天繼續(xù)給大家介紹Linux運(yùn)維相關(guān)知識,本文主要內(nèi)容是Pod對象創(chuàng)建過程。 Pod對象是Kubernetes集群的基礎(chǔ)對象,其創(chuàng)建過程如下所示: 從上圖中可以看出,Pod的創(chuàng)建過程主要有以下步驟: 1、用戶通過kubele或者其他API客戶端提交Pod創(chuàng)建指令。 2、API將Pod對象的相關(guān)信息存入ETC

    2024年02月05日
    瀏覽(24)
  • 在CSDN學(xué)Golang云原生(Kubernetes Pod調(diào)度)

    在 Kubernetes 中,可以使用 NodeSelector 字段來指定 Pod 調(diào)度到哪些節(jié)點上運(yùn)行。NodeSelector 是一個鍵值對的 map,其中鍵是節(jié)點的標(biāo)簽名,值是標(biāo)簽值。具體步驟如下: 在節(jié)點上添加標(biāo)簽 首先需要在節(jié)點上添加相應(yīng)的標(biāo)簽,例如: 編寫 Pod 的 YAML 文件 在編寫 Pod 的 YAML 文件時,需

    2024年02月15日
    瀏覽(25)
  • 在CSDN學(xué)Golang云原生(Kubernetes Pod無狀態(tài)部署)

    Kubernetes中的Pod是可以動態(tài)創(chuàng)建、銷毀的,如果希望Pod只使用靜態(tài)的IP地址而不是自動生成一個IP地址,那么就需要使用靜態(tài)Pod。 靜態(tài)Pod是在kubelet啟動時通過指定文件夾路徑來加載的。當(dāng)kubelet檢測到這些配置文件變化后,它會創(chuàng)建或刪除相應(yīng)的Pod,這樣就可以輕松地部署靜態(tài)

    2024年02月15日
    瀏覽(21)
  • 在CSDN學(xué)Golang云原生(Kubernetes Pod 有狀態(tài)部署)

    Kubernetes StatefulSet 是 Kubernetes 中的一種資源類型,它能夠保證有狀態(tài)服務(wù)(Stateful Service)的唯一性和順序部署,適用于需要持久化存儲、網(wǎng)絡(luò)標(biāo)識、狀態(tài)管理等場景。MongoDB 是一個非常流行的 NoSQL 數(shù)據(jù)庫,下面我們介紹如何使用 Kubernetes StatefulSet 部署 MongoDB 集群。 創(chuàng)建一個

    2024年02月15日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包