一、Pod生命周期流程
Pod生命周期整個(gè)過程 如下圖:
1、在啟動(dòng)任何容器之前,前創(chuàng)建 pause 容器,它初始化Pod的環(huán)境并為后續(xù)加入的容器提供共享名稱空間。
2、初始化容器(initContainers):一個(gè)Pod可以定義任意個(gè)初始化容器,如上圖就定義了兩個(gè)初始化容器,初始化會(huì)按照YAML清單中順序執(zhí)行,當(dāng)最后一個(gè)初始化容器執(zhí)行成功后,才會(huì)去啟動(dòng)主容器。
3、啟動(dòng)鉤子(postStart):容器啟動(dòng)后執(zhí)行的一些操作。
4、容器探測(cè):
- 啟動(dòng)探測(cè)(Startupprobe):探測(cè)容器是否正常運(yùn)行。
- 存活探測(cè)(Livenessprobe):探測(cè)容器是否處于
Running
狀態(tài),如果不是根據(jù)重啟策略進(jìn)行響應(yīng)操作。 - 就緒探測(cè)(Readinessprobe):探測(cè)容器是否就緒對(duì)外提供服務(wù)。
5、停止鉤子(preStop):容器關(guān)閉前執(zhí)行的一些操作
二、初始化容器-initContainers
初始化容器官方參考文檔:
初始化容器指,在啟動(dòng)主容器前的一些操作,使用 pod.spec.initContainers
來定義初始化容器,可以定義多個(gè)初始化容器,會(huì)按照順序一次執(zhí)行,執(zhí)行完成后依次關(guān)閉初始化容器。當(dāng)所有初始化容器執(zhí)行完成且正常關(guān)閉后,才會(huì)去啟動(dòng)主容器。
實(shí)例:定義Pod資源,創(chuàng)建兩個(gè)初始化容器,初始化容器執(zhí)行 sleep 2,也就是說我們要等定義的兩個(gè)初始化容器都睡眠2秒后,才創(chuàng)建主容器
cat pod-init.yaml
---
apiVersion: v1
kind: Pod
metadata:
name: init-pod
labels:
env: uat
spec:
initContainers:
- name: init-1
image: busybox:1.28
imagePullPolicy: IfNotPresent
command: ["sh", "-c", "sleep 2"]
- name: init-2
image: busybox:1.28
imagePullPolicy: IfNotPresent
command: ["sh", "-c", "sleep 2"]
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
執(zhí)行YAML文件 && 實(shí)時(shí)觀察Pod狀態(tài):
kubectl apply -f pod-init.yaml
kubectl get pods init-pod -w
三、主容器操作-containers
查看幫助命令:
kubectl explain pod.spec.containers.lifecycle.preStop
參數(shù):
- exec:執(zhí)行命令
- httpGet:向容器IP地址的某指定端口的path發(fā)起HTTP GET請(qǐng)求
- tcpSocket:在容器啟動(dòng)前等待一個(gè)TCP端口打開
1、啟動(dòng)鉤子-lifecycle.postStart
該鉤子創(chuàng)建容器后立即被執(zhí)行,如果執(zhí)行失敗,則會(huì)根據(jù)重啟測(cè)試判斷是否重啟,這個(gè)鉤子不需要傳遞任何參數(shù)。
實(shí)例:定義Pod啟動(dòng)鉤子,容器運(yùn)行后記錄容器運(yùn)行時(shí)間
cat pod-1.yaml
---
apiVersion: v1
kind: Pod
metadata:
name: nginx-1
namespace: default
labels:
env: uat
app: nginx
spec:
containers:
- name: nginx-container
image: nginx
lifecycle:
postStart:
exec:
command: ['/bin/bash', '-c', 'echo "Start Time: $(date +%F)" > /root/time.txt']
執(zhí)行YAML文件:
kubectl apply -f pod-1.yaml
進(jìn)入容器,查看容器啟動(dòng)時(shí)間
kubectl exec -it nginx-1 -- /bin/bash
# cat /root/time.txt
Start Time: 2023-05-21
2、停止鉤子-lifecycle.preStop
容器停止前執(zhí)行操作,比如容器停止前發(fā)送信號(hào)告訴監(jiān)控系統(tǒng)此Pod將要停止等。
實(shí)例:創(chuàng)建Pod定義停止鉤子,在容器停止前,優(yōu)雅的關(guān)閉容器內(nèi)服務(wù)文章來源:http://www.zghlxwxcb.cn/news/detail-454433.html
cat pod-2.yaml
---
apiVersion: v1
kind: Pod
metadata:
name: nginx-2
namespace: default
labels:
env: uat
app: nginx
spec:
containers:
- name: nginx-container
image: nginx
lifecycle:
preStop:
exec:
command: ['/bin/bash', '-c', 'nginx -s stop']
執(zhí)行YAML清單:文章來源地址http://www.zghlxwxcb.cn/news/detail-454433.html
kubectl apply -f pod-2.yaml
到了這里,關(guān)于K8s之Pod生命周期、啟動(dòng)停止鉤子的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!