最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

K8s基本單元Pod解讀

 更新時間:2025年08月14日 14:30:12   作者:大新屋  
Kubernetes中Pod是調(diào)度單元,包含多個容器及Pause容器,提供共享網(wǎng)絡(luò)、存儲等資源,狀態(tài)分為Pending、Running、Failed等,支持存活、就緒、啟動探針檢測容器健康

什么是Pod?

Pod是Kubernetes中的最小調(diào)度單元,k8s是通過定義一個Pod的資源,Pod資源里運(yùn)行一組、一個或多個容器,每個Pod還包含一個Pause容器。

Pause容器是Pod的父容器,它主要負(fù)責(zé)全局進(jìn)程的回收管理,同時通過Pause容器可以使用一個Pod里面的不同容器共享存儲、網(wǎng)絡(luò)、PID、IPC等,容器之間可以使用localhost:port相互訪問,可以使用volume等實現(xiàn)數(shù)據(jù)共享。根據(jù)Docker的構(gòu)造,Pod可被建模為一組具有共享命令空間、卷、IP地址和Port端口的容器。Pod對外提供一個IP讓其它Pod訪問到Pod資源里面的指定容器的端口。

提示:Kubernetes官方Pod說明文檔 https://kubernetes.io/docs/concepts/workloads/pods/

如下圖所示,可以通俗理解Pod,可以把Pod看做一個豌豆莢,而豌豆莢里的每個豆子都是Pod中的容器。

一、Pod運(yùn)行方式

1、查詢Pod

### 查詢Pod
kubectl get pods -A
kubectl get pods -n kube-system

### 查詢Containerd鏡像與容器信息
crictl images
crictl ps

### 查詢有關(guān)Pod官方說明
kubectl explain pod

2、命令方式創(chuàng)建Pod

### kubectl run命令參數(shù)說明:
# nginx自定義Pod名稱
# --image指定nginx鏡像下載地址
# --port指定nginx容器運(yùn)行端口
# --namespace 指定Pod的命名空間

### 創(chuàng)建Pod
kubectl run nginx --image=registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24 --port 80 --namespace=default

### 查看Pod信息
kubectl get pods -n default
kubectl get pods -n default -owide
kubectl logs -f nginx -n default
kubectl logs -f nginx -n default

### 刪除Pod
kubectl delete pods nginx

3、命令方式僅打印創(chuàng)建Pod的yaml文件但不創(chuàng)建Pod

提示:使用命令方式添加參數(shù)–dry-run=client僅運(yùn)行打印創(chuàng)建Pod信息但不創(chuàng)建Pod,適用于快速創(chuàng)建一個Pod的yaml文件模`

mkdir -p /data/yaml/pod
kubectl run nginx --image=registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24 --port 80 --namespace=default --dry-run=client -oyaml > /data/yaml/pod/nginx.yaml

4、使用yaml文件創(chuàng)建Pod

提示:yaml文件是一種輕量級的數(shù)據(jù)序列化標(biāo)準(zhǔn),易于閱讀和編寫,非常適合用來定義Kubernetes的資源對象,如Pod、Service、Deployment等

### yaml文件參數(shù)說明:
apiversion: v1                                              # 填寫API資源版本號,通過kubectl api-resources | grep pods命令查詢API資源版本號
kind: Pod      # 類型Pod,可選 Deployment、StatefuSet、Service等,根據(jù)需要選擇
metadata:                                                   # 資源的元數(shù)據(jù)或?qū)傩?
  labels:                                                   # 設(shè)置Pod標(biāo)簽
app: nginx-app                                              # 自定義Pod標(biāo)簽名稱
  name: nginx-pod                                           # 自定義Pod名稱
  namespace: default                                        # 設(shè)置Pod所屬命名空間,默認(rèn)default命名空間
spec:                                                       # 定義Pod的資源行為
  containers:   # 定義容器規(guī)格,包含一個或多個容器規(guī)格
  - image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24   # 指定容器拉取鏡像地址
    imagePullPolicy: IfNotPresent # 鏡像拉取策略,Always每次啟動都通過--image參數(shù)拉取鏡像(默認(rèn)值);IfNotPresent本地有鏡像就使用本地的,沒有再通過--image參數(shù)拉??;Never 不拉取--image參數(shù)的鏡像
    name: nginx01             # 自定義容器名稱,用于區(qū)分Pod資源的多個容器
ports:	                      # 指定容器端口列表,可以定義一個或多個端口
	- containerPort:80        # 指定容器需要暴露的端口
  restartPolicy: Always       # 容器重啟策略,Always容器失效時,自動重啟容器(默認(rèn)值),OnFailure容器不為0狀態(tài)碼終止時,自動重啟容器;Never無論容器任何狀態(tài)都不會重啟
  
### 編寫創(chuàng)建Pod的yaml文件
cat > /data/yaml/pod/nginx.yaml <<  'EOF'
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: nginx-app
  name: nginx-pod
  namespace: default
spec:
  containers:
  - image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24
    imagePullPolicy: IfNotPresent
    name: nginx01
    ports:
    - containerPort: 80
  restartPolicy: Always
EOF

### 創(chuàng)建Pod并查詢Pod信息
kubectl create -f /data/yaml/pod/nginx.yaml
kubectl get pods -n default
kubectl get pods -n default –owide

### 刪除Pod
kubectl delete -f /data/yaml/pod/nginx.yaml

二、Pod Phase變化階段

  • 提示:根據(jù)Pod狀態(tài)字段Phase的不同取值對容器狀態(tài)進(jìn)行排查
  • 提示:Pod的Phase字段只有Pending、Running、Successed、Failed、Unknow,其余的為處于上述狀態(tài)的原因,可以通過kubectl get pods xxx -oyaml查看
  • 提示:Kubernetes官方Pod Phase說明:https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle
ValueDescription
Pending(掛起)Pod已被Kubnetes系統(tǒng)接受,但是一個或多個容器還沒有設(shè)置好并準(zhǔn)備好運(yùn)行。這包括Pod等待調(diào)度的時間,以及通過網(wǎng)絡(luò)下載容器映像所花費的時間,可以通過kubectl describe pods查看處于Pending狀態(tài)的原因。
Running(運(yùn)行中)Pod已經(jīng)被綁定到一個節(jié)點上,并且所有的容器都已經(jīng)被創(chuàng)建,而且至少有一個是運(yùn)行狀態(tài),或者是正在啟動或重啟,可以通過kubectl logs查看Pod的日志。
Successed(成功)Pod中的所有容器都已成功終止,并且不會重新啟動,可以通過kubectl logs查看Pod日志。
Failed(失?。?/td>Pod中的所有容器都已終止,并且至少有一個容器因失敗而終止。也就是說,容器要么以非零狀態(tài)退出,要么被系統(tǒng)終止,并且沒有設(shè)置為自動重新啟動,可以通過kubectl logs和kubectl describe查看Pod日志和狀態(tài)。
Unknown(未知)由于某些原因,無法獲得Pod的狀態(tài)。此階段通常是由于與運(yùn)行Pod的節(jié)點通信時出現(xiàn)錯誤而發(fā)生的。
Unknown(未知)包含以下狀態(tài)Description
InagePullBackOff(ErrImagePulll)鏡像拉取失敗,一般由于鏡像不存在、網(wǎng)絡(luò)不通或者需要登錄認(rèn)證引起的,可以使用kubectl describe pods 命令或者kubectl logs命令查看具體原因。
CrashLoopBackOff容器啟動失敗,可以通過logs命令查看具體原因,一般為啟動命令不正確,健康檢查不通過等。
OOMKilled容器內(nèi)存溢出,一般是容器的內(nèi)存Limit設(shè)置過小或者程序本身有內(nèi)存溢出,可以通過kubectl logs查看程序啟動日志。
TeminatingPod正在被刪除,可以通過kubectl escribe查看狀態(tài)。
SysctlForbiddenPod自定義了內(nèi)核配置,但kubelet沒有添加內(nèi)核配置或配置的內(nèi)核參數(shù)不支持,可以通過kubectl describe pods 查看具體原因。
Completed容器內(nèi)部主進(jìn)程退出,一般計劃任務(wù)執(zhí)行結(jié)束會顯示該狀態(tài),此時可以通過kubectl logs查看容器日志。
ContainnerCreatingPod正在創(chuàng)建,一般為正在下載鏡像或有配置不當(dāng)?shù)牡胤剑梢酝ㄟ^kubectl describe pods查看具體原因。

三、Pod三種探針

1、什么是探針

Kubernetes(K8s)中的探針(Probe)主要用于檢測和管理容器的健康狀態(tài),確保服務(wù)的穩(wěn)定性和高可用性。

探針主要有三種類型:存活探針(Liveness Probe)、就緒探針(Readiness Probe)和啟動探針(Startup Probe),每種探針都有其特定的作用和應(yīng)用場景。

存活探針(Liveness Probe)

  • 存活探針用于判斷容器服務(wù)是否仍然處于運(yùn)行狀態(tài)。
  • 如果存活探針失敗,Kubernetes將殺死容器并重新啟動它。
  • 這通常用于檢測應(yīng)用是否因為某些錯誤或掛起而無法繼續(xù)運(yùn)行。

就緒探針(Readiness Probe)

  • 就緒探針用于判斷容器是否準(zhǔn)備好接收流量。
  • 如果探針檢測失敗,Kubernetes會將該P(yáng)od從服務(wù)的負(fù)載均衡池中移除,防止流量發(fā)送到未準(zhǔn)備好的Pod。
  • 就緒探針適用于需要初始化的應(yīng)用程序,例如在啟動時連接數(shù)據(jù)庫或加載緩存。

啟動探針(Startup Probe)

  • 啟動探針用于檢測容器的啟動過程是否完成,特別適用于啟動時間較長的容器。
  • 當(dāng)啟動探針配置存在時,kubelet不會執(zhí)行存活和就緒探針,直到啟動探針成功為止。
  • 這可以有效避免在應(yīng)用還未完全啟動時就被誤判為不健康或就緒,進(jìn)而被錯誤地重啟或流量過早涌入。
  • 啟動探針適用于慢啟動服務(wù),例如需要長時間初始化的應(yīng)用。

2、Pod啟動過程

創(chuàng)建Pod — Pending — ContainerCreate — Running — InitContainer — Container — StartupProbe(執(zhí)行第一個探針) — LivenessProbe(執(zhí)行第二個探針)/ReadinessProbe(執(zhí)行第三個探針) — Endpoin 添加Pod IP

3、Pod退出過程

刪除Pod — Dead(30s寬限期內(nèi)) — Terminating — PreStop(寬限期結(jié)束PreStop未結(jié)束,再次獲得2秒的寬限期,寬限期結(jié)束,Pod收到SIGKILL信息) — EndPoints 刪除Pod IP(kubelet請求APIServer,將寬限期設(shè)置為0,然后進(jìn)行刪除操作)

4、Pod 探針?biāo)溺姍z查機(jī)制

提示:Kubernetes官方關(guān)掉探針檢查機(jī)制說明 https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes

  • exec:在容器內(nèi)執(zhí)行一個命令,如果命令返回值為0,則認(rèn)為容器健康,否則反之
  • tcpSocket:通過TCP連接檢查容器指定的端口,如果端口打開,則認(rèn)為容器健康,否則反之
  • httpGet:對指定端口和路徑上Pod的IP地址執(zhí)行HTTP GET請求,如果狀態(tài)碼大于等于200且小于400,則認(rèn)為容器健康,否則反之
  • grpc:使用gRPC執(zhí)行遠(yuǎn)程過程調(diào)用。目標(biāo)應(yīng)執(zhí)行g(shù)RPC運(yùn)行狀況檢查。如果響應(yīng)的狀態(tài)為SERVING,則認(rèn)為容器健康,否則反之

5、創(chuàng)建Pod 包含就緒探針Readiness Probe并測試

(1)、就緒探針Readiness Probe參數(shù)說明

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: nginx-app
  name: nginx-pod
  namespace: default
spec:
  containers:
  - image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24
    imagePullPolicy: IfNotPresent
    name: nginx01
    readinessProbe:             # 選擇就緒探針Readiness Probe類型
      httpGet:                  # 選擇探針httpGet檢查機(jī)制,HTTP GET請求方式
        path: /index.html       # 請求路徑
        port: 8080              # 請求端口
        scheme: HTTP            # 請求的協(xié)議,HTTP協(xié)議或HTTPS協(xié)議
      initialDelaySeconds: 10   # 容器啟動后等待多少秒開始進(jìn)行首次探測,默認(rèn)值0秒
      timeoutSeconds: 2         # 探測請求超時時間,默認(rèn)值1秒
      periodSeconds: 5          # 執(zhí)行探測的頻率,表示每5秒探測一次。對于Liveness Probe和Readiness Probe,默認(rèn)值都是10秒。對于Startup Probe默認(rèn)值沒有設(shè)置,必須顯式指定
      successThreshold: 1       # 在探測成功前需要連續(xù)探測多少次才算成功。默認(rèn)值為1。這通常在Startup Probe中使用以避免過早的成功判斷
      failureThreshold: 2       # 在探測失敗后需要連續(xù)探測多少次才算失敗。對于Liveness Probe,默認(rèn)值為3;對于Readiness Probe,默認(rèn)值為3;對于Startup Probe,默認(rèn)值沒有設(shè)置,必須顯式指定
    ports:
    - containerPort: 80
  restartPolicy: Always

(2)、創(chuàng)建一個診斷成功的Pod包含就緒探針Readiness Proe(httpGet檢查規(guī)則)

### 編寫Pod 包含就緒探針Readiness Probe的yaml文件(指定一個容器真實存在的端口,例如80端口)
cat > /data/yaml/pod/nginx-ReadinessProbe.yaml << 'EOF'
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: nginx-app
  name: nginx-pod
  namespace: default
spec:
  containers:
  - image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24
    imagePullPolicy: IfNotPresent
    name: nginx01
    readinessProbe:
      httpGet:
        path: /index.html
        port: 80
        scheme: HTTP
      initialDelaySeconds: 10
      timeoutSeconds: 2
      periodSeconds: 5
      successThreshold: 1
      failureThreshold: 2
    ports:
    - containerPort: 80
  restartPolicy: Always
EOF

### 創(chuàng)建Pod 包含就緒探針Readiness Probe并檢查
kubectl create -f /data/yaml/pod/nginx-ReadinessProbe.yaml
kubectl get pods -n default -owide

### 查看創(chuàng)建的Pod是否已生成探針配置
root@k8s-master01:~# kubectl get pods -n default -oyaml | grep -A 9 "readinessProbe"
      readinessProbe:
        failureThreshold: 2
        httpGet:
          path: /index.html
          port: 80
          scheme: HTTP
        initialDelaySeconds: 10
        periodSeconds: 5
        successThreshold: 1
        timeoutSeconds: 2

### 刪除Pod
kubectl delete -f /data/yaml/pod/nginx-ReadinessProbe.yaml

(3)、創(chuàng)建一個診斷失敗的Pod包含就緒探針Readiness Proe(httpGet檢查規(guī)則)

### 編寫Pod 包含就緒探針Readiness Probe的yaml文件(指定一個容器不存在的端口,例如8080端口)
cat > /data/yaml/pod/nginx-ReadinessProbe.yaml << 'EOF'
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: nginx-app
  name: nginx-pod
  namespace: default
spec:
  containers:
  - image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24
    imagePullPolicy: IfNotPresent
    name: nginx01
    readinessProbe:
      httpGet:
        path: /index.html
        port: 8080
        scheme: HTTP
      initialDelaySeconds: 10
      timeoutSeconds: 2
      periodSeconds: 5
      successThreshold: 1
      failureThreshold: 2
    ports:
    - containerPort: 80
  restartPolicy: Always
EOF

### 創(chuàng)建Pod 包含就緒探針Readiness Probe
kubectl create -f /data/yaml/pod/nginx-ReadinessProbe.yaml

### 查看已創(chuàng)建的Pod,雖然Pod顯示SATUS顯示Running,但READY顯示0/1是代表容器運(yùn)行失敗的
root@k8s-master01:~# kubectl get pods -n default -owide
NAME        READY   STATUS    RESTARTS   AGE   IP               NODE         NOMINATED NODE   READINESS GATES
nginx-pod   0/1     Running   0          64s   172.30.135.135   k8s-node03   <none>           <none>

### 就緒探針(Readiness Probe)如果檢查失敗,容器Service流量就會被切斷,但K8s集群內(nèi)所有節(jié)點仍可以訪問nginx服務(wù)
root@k8s-master01:~# kubectl describe pods nginx-pod -n default
………………………..
Events:
  Type     Reason     Age                     From               Message
  ----     ------     ----                    ----               -------
  Normal   Scheduled  7m42s                   default-scheduler  Successfully assigned default/nginx-pod to k8s-node03
  Normal   Pulled     7m41s                   kubelet            Container image "registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24" already present on machine
  Normal   Created    7m41s                   kubelet            Created container: nginx01
  Normal   Started    7m41s                   kubelet            Started container nginx01
  Warning  Unhealthy  2m36s (x64 over 7m31s)  kubelet            Readiness probe failed: Get "http://172.30.135.135:8080/index.html": dial tcp 172.30.135.135:8080: connect: connection refused

root@k8s-master01:~# curl -I 172.30.135.135
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Mon, 21 Apr 2025 09:30:26 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Tue, 11 Apr 2023 01:45:34 GMT
Connection: keep-alive
ETag: "6434bbbe-267"
Accept-Ranges: bytes


### 刪除Pod
kubectl delete -f /data/yaml/pod/nginx-ReadinessProbe.yaml

6、創(chuàng)建Pod 包含存活探針Liveness Probe并測試

(1)、存活探針Liveness Probe參數(shù)說明

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: nginx-app
  name: nginx-pod
  namespace: default
spec:
  containers:
  - image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24
    imagePullPolicy: IfNotPresent
    name: nginx01
    livenessProbe:                  # 選擇存活探針Liveness Probe類型
      tcpSocket:                    # 選擇探針tcpSocket檢查機(jī)制,檢查端口是否存活
        port: 80                    # 設(shè)置檢查的存活端口80
      initialDelaySeconds: 10       # 容器啟動后等待多少秒開始進(jìn)行首次探測,默認(rèn)值0秒
      timeoutSeconds: 2             # 探測請求超時時間,默認(rèn)值1秒
      periodSeconds: 5              # 執(zhí)行探測的頻率,表示每5秒探測一次。對于Liveness Probe和Readiness Probe,默認(rèn)值都是10秒。對于Startup Probe默認(rèn)值沒有設(shè)置,必須顯式指定
      successThreshold: 1           # 在探測成功前需要連續(xù)探測多少次才算成功。默認(rèn)值為1。這通常在Startup Probe中使用以避免過早的成功判斷
      failureThreshold: 2           # 在探測失敗后需要連續(xù)探測多少次才算失敗。默認(rèn)值依賴于探針類型。對于Liveness Probe,默認(rèn)值為3;對于Readiness Probe,默認(rèn)值為3;對于Startup Probe,默認(rèn)值沒有設(shè)置,必須顯式指定
    ports:
    - containerPort: 80
  restartPolicy: Always

(2)、創(chuàng)建一個診斷成功的Pod包含存放探針Liveness Proe(tcpSocket檢查規(guī)則)

### 編寫Pod 包含就緒探針Readiness Probe的yaml文件(指定一個容器真實存在的端口,例如80端口)
cat > /data/yaml/pod/nginx-LivenessProbe.yaml << 'EOF'
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: nginx-app
  name: nginx-pod
  namespace: default
spec:
  containers:
  - image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24
    imagePullPolicy: IfNotPresent
    name: nginx01
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 10
      timeoutSeconds: 2
      periodSeconds: 5
      successThreshold: 1
      failureThreshold: 2
    ports:
    - containerPort: 80
  restartPolicy: Always
EOF

### 創(chuàng)建Pod 包含存活探針Liveness Probe并檢查
kubectl create -f /data/yaml/pod/nginx-LivenessProbe.yaml
kubectl get pods -n default -owide

### 查看創(chuàng)建的Pod是否已生成探針配置
root@k8s-master01:~# kubectl get pods -n default -oyaml | grep -A 7 "livenessProbe"
      livenessProbe:
        failureThreshold: 2
        initialDelaySeconds: 10
        periodSeconds: 5
        successThreshold: 1
        tcpSocket:
          port: 80
        timeoutSeconds: 2

### 刪除Pod
kubectl delete -f /data/yaml/pod/nginx-LivenessProbe.yaml

(3)、創(chuàng)建一個診斷失敗的Pod包含存活探針Liveness Proe(tcpSocket檢查規(guī)則)

### 編寫Pod 包含存活探針Liveness Probe的yaml文件(指定一個容器不存在的端口,例如8080端口)
cat > /data/yaml/pod/nginx-LivenessProbe.yaml << 'EOF'
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: nginx-app
  name: nginx-pod
  namespace: default
spec:
  containers:
  - image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24
    imagePullPolicy: IfNotPresent
    name: nginx01
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 10
      timeoutSeconds: 2
      periodSeconds: 5
      successThreshold: 1
      failureThreshold: 2
    ports:
    - containerPort: 80
  restartPolicy: Always
EOF

### 創(chuàng)建Pod 包含存活探針Liveness Probe
kubectl create -f /data/yaml/pod/nginx-ReadinessProbe.yaml

### 查看Pod自動重啟次數(shù)RESTARTS顯示為3次,存活探針Liveness Probe只要探測失敗就會重啟Pod的容器
root@k8s-master01:~# kubectl get pod -n default
NAME        READY   STATUS    RESTARTS     AGE
nginx-pod   1/1     Running   3 (2s ago)   62s

### 查看Pod運(yùn)行詳細(xì)描述,存活探針Liveness Probe診斷失敗,容器發(fā)生重啟
root@k8s-master01:~# kubectl describe pod nginx-pod -n default
…………………
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  93s                default-scheduler  Successfully assigned default/nginx-pod to k8s-node01
  Normal   Created    32s (x4 over 92s)  kubelet            Created container: nginx01
  Normal   Started    32s (x4 over 92s)  kubelet            Started container nginx01
  Warning  Unhealthy  13s (x8 over 78s)  kubelet            Liveness probe failed: dial tcp 172.30.85.203:8080: connect: connection refused
  Normal   Killing    13s (x4 over 73s)  kubelet            Container nginx01 failed liveness probe, will be restarted
  Normal   Pulled     12s (x5 over 92s)  kubelet            Container image "registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24" already present on machine

### 刪除Pod
kubectl delete -f /data/yaml/pod/nginx-LivenessProbe.yaml

7、創(chuàng)建Pod 包含啟動探針Startup Probe并測試

(1)、啟動探針Startup Probe參數(shù)說明

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: nginx-app
  name: nginx-pod
  namespace: default
spec:
  containers:
  - image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24
    imagePullPolicy: IfNotPresent
    name: nginx01
    startupProbe:                 # 選擇啟動探針Startup Probe類型
      exec:                      # 選擇探針exec檢查機(jī)制,檢查該文件是否存在容器中
        command:               # 指令方式運(yùn)行,需要確認(rèn)容器中有該指令,否則容器會被啟動探針判定成失敗
        - ls
        - /etc/nginx/nginx.conf
      initialDelaySeconds: 10      # 容器啟動后等待多少秒開始進(jìn)行首次探測,默認(rèn)值0秒,根據(jù)實際情況設(shè)置,如果該容器啟動非常緩慢,時間設(shè)置長些
      timeoutSeconds: 2         # 探測請求超時時間,默認(rèn)值1秒
      periodSeconds: 5          # 執(zhí)行探測的頻率,表示每5秒探測一次。對于Liveness Probe和Readiness Probe,默認(rèn)值都是10秒。對于Startup Probe默認(rèn)值沒有設(shè)置,必須顯式指定
      successThreshold: 1        # 在探測成功前需要連續(xù)探測多少次才算成功。默認(rèn)值為1。這通常在Startup Probe中使用以避免過早的成功判斷
      failureThreshold: 2         # 在探測失敗后需要連續(xù)探測多少次才算失敗。默認(rèn)值依賴于探針類型。對于Liveness Probe,默認(rèn)值為3;對于Readiness Probe,默認(rèn)值為3;對于Startup Probe,默認(rèn)值沒有設(shè)置,必須顯式指定
    ports:
    - containerPort: 80
  restartPolicy: Always

(2)、創(chuàng)建一個診斷成功的Pod包含啟動探針Startup Probe(exec檢查規(guī)則)

### 編寫Pod 包含啟動探針Startup Probe的yaml文件(ls命令和/etc/nginx/nginx.conf文件已存在該容器中)
cat > /data/yaml/pod/nginx-StartupProbe.yaml << 'EOF'
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: nginx-app
  name: nginx-pod
  namespace: default
spec:
  containers:
  - image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24
    imagePullPolicy: IfNotPresent
    name: nginx01
    startupProbe:
      exec:
        command:
        - ls
        - /etc/nginx/nginx.conf
      initialDelaySeconds: 60
      timeoutSeconds: 2
      periodSeconds: 5
      successThreshold: 1
      failureThreshold: 2
    ports:
    - containerPort: 80
  restartPolicy: Always
EOF

### 創(chuàng)建Pod 包含啟動探針Startup Probe并檢查
kubectl create -f /data/yaml/pod/nginx-StartupProbe.yaml
kubectl get pods -n default -owide

### 查看創(chuàng)建的Pod是否已生成探針配置
root@k8s-master01:~# kubectl get pods -n default -oyaml | grep -A 9 "startupProbe"
      startupProbe:
        exec:
          command:
          - ls
          - /etc/nginx/nginx.conf
        failureThreshold: 2
        initialDelaySeconds: 60
        periodSeconds: 5
        successThreshold: 1
        timeoutSeconds: 2

### 刪除Pod
kubectl delete -f /data/yaml/pod/nginx-StartupProbe.yaml

(3)、創(chuàng)建一個診斷失敗的Pod包含啟動探針Startup Probe(exec檢查規(guī)則)

### 編寫Pod 包含啟動探針Startup Probe的yaml文件(ls命令已存在該容器中,但指定的/usr/local/nginx.conf不存在該容器中)
cat > /data/yaml/pod/nginx-StartupProbe.yaml << 'EOF'
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    app: nginx-app
  name: nginx-pod
  namespace: default
spec:
  containers:
  - image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24
    imagePullPolicy: IfNotPresent
    name: nginx01
    startupProbe:
      exec:
        command:
        - ls
        - /usr/local/nginx.conf
      initialDelaySeconds: 60
      timeoutSeconds: 2
      periodSeconds: 5
      successThreshold: 1
      failureThreshold: 2
    ports:
    - containerPort: 80
  restartPolicy: Always
EOF

### 創(chuàng)建Pod 包含啟動探針Startup Probe
kubectl create -f /data/yaml/pod/nginx-StartupProbel.yaml

### 查看Pod自動重啟次數(shù)RESTARTS顯示為3次,啟動探針Startup Probe只要探測失敗就會重啟Pod的容器
root@k8s-master01:~# kubectl get pods -n default
NAME        READY   STATUS    RESTARTS      AGE
nginx-pod   0/1     Running   3 (29s ago)   3m59s

### 查看Pod運(yùn)行詳細(xì)描述,啟動探針Startup Probe診斷失敗,容器發(fā)生重啟
root@k8s-master01:~# kubectl describe pods nginx-pod -n default
Events:
  Type     Reason     Age                  From               Message
  ----     ------     ----                 ----               -------
  Normal   Scheduled  4m14s                default-scheduler  Successfully assigned default/nginx-pod to k8s-node03
  Normal   Pulled     44s (x4 over 4m13s)  kubelet            Container image "registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24" already present on machine
  Normal   Created    44s (x4 over 4m13s)  kubelet            Created container: nginx01
  Warning  Unhealthy  44s (x6 over 3m9s)   kubelet            Startup probe failed: ls: cannot access '/usr/local/nginx.conf': No such file or directory
  Normal   Killing    44s (x3 over 3m4s)   kubelet            Container nginx01 failed startup probe, will be restarted
  Normal   Started    43s (x4 over 4m13s)  kubelet            Started container nginx01

### 刪除Pod
kubectl delete -f /data/yaml/pod/nginx-StartupProbel.yaml

8、Pod平滑退出

### 參數(shù)說明
    lifecycle:
       postStart:             ### 容器創(chuàng)建完成后執(zhí)行指令(要保證容器內(nèi)必須有mkdir命令,否則容器創(chuàng)建失?。?,可以是exec httpGet TCPSocket
         exec:
            command:
            - sh
            - -c
            - 'mkdir /data'
       preStop:               ### 設(shè)置容器停止前的寬限時間或者執(zhí)行退出服務(wù)命令
         exec:
           command:
           - sh
           - -c
           - sleep 10

### yam文件方式
cat > /data/yaml/pod/nginx.yaml << 'EOF'
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: registry.cn-shenzhen.aliyuncs.com/dockerghost/nginx:1.24
    name: nginx
    lifecycle:
       postStart:
         exec:
            command:
            - sh
            - -c
            - 'mkdir /data'
       preStop:
         exec:
           command:
           - sh
           - -c
           - sleep 10
    startupProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 5
      timeoutSeconds: 2
      periodSeconds: 10
      successThreshold: 1
      failureThreshold: 5
    readinessProbe:
      httpGet:
        path: /index.html
        port: 80
        scheme: HTTP
      initialDelaySeconds: 2
      timeoutSeconds: 2
      periodSeconds: 5
      successThreshold: 1
      failureThreshold: 2
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 2
      timeoutSeconds: 2
      periodSeconds: 5
      successThreshold: 1
      failureThreshold: 2
    command:
    - sh
    - -c
    - nginx -g "daemon off;"
  restartPolicy: OnFailure
EOF

cd /data/yaml/
kubectl delete -f nginx.yaml
kubectl create -f nginx.yaml
kubectl get pods
kubectl describe pods nginx
kubectl exec -it nginx -- sh
kubectl delete -f nginx.yaml

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • kubernetes存儲之GlusterFS集群詳解

    kubernetes存儲之GlusterFS集群詳解

    最近工作中用到了GlusterFS作為Kubernetes的存儲,這篇文章主要給大家介紹了關(guān)于kubernetes存儲之GlusterFS集群的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Containerd容器運(yùn)行yum安裝與二進(jìn)制安裝

    Containerd容器運(yùn)行yum安裝與二進(jìn)制安裝

    這篇文章主要為大家介紹了Containerd容器運(yùn)行yum安裝與二進(jìn)制安裝,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • k8s pod resources:{}設(shè)置的含義及說明

    k8s pod resources:{}設(shè)置的含義及說明

    Pod的資源請求和限制決定了其在Kubernetes集群中的優(yōu)先級和調(diào)度行為,未設(shè)置資源請求和限制的Pod會被歸類為BestEffort,優(yōu)先級最低,資源不足時可能被驅(qū)逐,合理設(shè)置requests和limits可以避免資源爭搶和意外驅(qū)逐,提高系統(tǒng)的穩(wěn)定性和資源利用率
    2026-02-02
  • 詳解Kubernetes 中容器跨主機(jī)網(wǎng)絡(luò)

    詳解Kubernetes 中容器跨主機(jī)網(wǎng)絡(luò)

    這篇文章主要為大家介紹了Kubernetes中容器跨主機(jī)網(wǎng)絡(luò)是怎么樣的,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • K8S部署lnmp項目全過程

    K8S部署lnmp項目全過程

    這篇文章主要介紹了K8S部署lnmp項目全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • K8S安裝及配置教程

    K8S安裝及配置教程

    這篇文章主要介紹了K8S安裝及配置教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-03-03
  • Kubernetes中crictl的詳細(xì)用法教程與應(yīng)用實戰(zhàn)記錄

    Kubernetes中crictl的詳細(xì)用法教程與應(yīng)用實戰(zhàn)記錄

    crictl作為Kubernetes的容器運(yùn)行時接口(CRI)的命令行工具,為Kubernetes的調(diào)試和管理提供了強(qiáng)大的支持,通過本文的詳細(xì)介紹,你應(yīng)該已經(jīng)掌握了crictl的基本安裝、配置、常用命令以及高級用法,需要的朋友可以參考下
    2024-07-07
  • k8s的包管理工具h(yuǎn)elm使用簡介

    k8s的包管理工具h(yuǎn)elm使用簡介

    這篇文章主要為大家介紹了k8s的包管理工具h(yuǎn)elm使用簡介,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理(最新推薦)

    k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理(最新推薦)

    這篇文章主要介紹了k8s整合istio配置gateway入口、配置集群內(nèi)部服務(wù)調(diào)用管理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • kubernetes token過期生成永久過程

    kubernetes token過期生成永久過程

    本文介紹了如何生成、查看和更新JWT(JSON Web Token),包括生成帶有過期時間的token,以及如何更新token以重新加入node
    2025-12-12

最新評論

弥渡县| 乌海市| 乌审旗| 阳信县| 太仓市| 遂昌县| 崇阳县| 余干县| 建德市| 巴林左旗| 黑龙江省| 塔城市| 赫章县| 荥阳市| 乐亭县| 宣汉县| 满洲里市| 五原县| 固始县| 浦东新区| 舟曲县| 兴城市| 玉树县| 东宁县| 元阳县| 乡城县| 含山县| 天柱县| 郎溪县| 茂名市| 叶城县| 深泽县| 宁晋县| 盐津县| 望谟县| 疏勒县| 新晃| 汽车| 扎兰屯市| 双鸭山市| 长汀县|