探針的生命周期
docker
創(chuàng)建:在創(chuàng)建階段,你需要選擇一個(gè)鏡像來(lái)運(yùn)行你的應(yīng)用。這個(gè)鏡像可以是公開的,如 Docker Hub 上的鏡像,也可以是你自己創(chuàng)建的自定義鏡像。創(chuàng)建自己的鏡像通常需要編寫一個(gè) Dockerfile,這個(gè)文件定義了創(chuàng)建鏡像所需的所有步驟,包括基礎(chǔ)鏡像、需要安裝的軟件包以及需要運(yùn)行的命令。
運(yùn)行:運(yùn)行階段是容器生命周期中最活躍的階段。在此階段,容器會(huì)運(yùn)行定義在 Dockerfile 中的命令。你可以通過(guò)命令行工具如 Docker CLI,或者通過(guò)編排工具如 Kubernetes 來(lái)啟動(dòng)容器。一旦容器開始運(yùn)行,它就會(huì)持續(xù)運(yùn)行,直到進(jìn)程結(jié)束或者被明確停止。
暫停和恢復(fù):在某些情況下,你可能需要暫時(shí)停止容器的運(yùn)行。這可以通過(guò) Docker CLI 的 pause 命令來(lái)完成。當(dāng)你準(zhǔn)備恢復(fù)容器的運(yùn)行時(shí),可以使用 unpause 命令。這些命令可以讓你在不完全停止容器的情況下,暫時(shí)釋放一些系統(tǒng)資源。
停止:當(dāng)你不再需要運(yùn)行容器時(shí),可以使用 Docker CLI 的 stop 命令來(lái)停止它。這會(huì)結(jié)束容器中的所有進(jìn)程,并釋放所有使用的系統(tǒng)資源。在某些情況下,你可能希望容器在完成一些任務(wù)后自動(dòng)停止。這可以通過(guò)在 Dockerfile 中定義的命令來(lái)實(shí)現(xiàn)。
刪除:如果你確定不再需要一個(gè)容器,可以使用 Docker CLI 的 rm 命令來(lái)刪除它。這會(huì)從你的系統(tǒng)中完全移除容器,并釋放所有相關(guān)的資源。
k8s
Pod 調(diào)度:一旦你創(chuàng)建了一個(gè) Pod,Kubernetes 的調(diào)度器會(huì)找到一個(gè)合適的節(jié)點(diǎn)來(lái)運(yùn)行這個(gè) Pod。這個(gè)階段,Pod 的狀態(tài)為 Pending。
Pod 初始化:在 Pod 被調(diào)度到一個(gè)節(jié)點(diǎn)后,kubelet 會(huì)開始創(chuàng)建和啟動(dòng) Pod 中的每個(gè)容器。對(duì)于每個(gè)容器,kubelet 會(huì)拉取所需的鏡像(如果本地沒(méi)有的話),然后運(yùn)行這個(gè)鏡像創(chuàng)建容器,最后執(zhí)行用戶指定的命令。如果 Pod 配置了 Init 容器,那么這些容器會(huì)在應(yīng)用容器之前按順序啟動(dòng)。
容器運(yùn)行:一旦所有的容器都啟動(dòng)了,Pod 就進(jìn)入 Running 狀態(tài)。在運(yùn)行過(guò)程中,kubelet 會(huì)定期執(zhí)行用戶配置的探針(如果有的話)來(lái)監(jiān)控容器的健康狀態(tài)。如果某個(gè)容器的探針檢查失敗,kubelet 可能會(huì)根據(jù)探針的配置來(lái)重啟這個(gè)容器或者整個(gè) Pod。
容器終止:當(dāng) Pod 要被刪除時(shí),或者 Pod 中的某個(gè)容器完成了它的任務(wù)并退出時(shí),這個(gè)容器就進(jìn)入終止階段。在這個(gè)階段,kubelet 會(huì)首先發(fā)送 SIGTERM 信號(hào)給容器中的進(jìn)程,然后等待一段時(shí)間,最后如果進(jìn)程還在運(yùn)行,kubelet 就會(huì)發(fā)送 SIGKILL 信號(hào)強(qiáng)制終止這個(gè)進(jìn)程。
Pod 刪除:當(dāng)所有的容器都終止后,Pod 就會(huì)被 kubelet 刪除,并從 API server 中刪除。刪除后,這個(gè) Pod 的所有資源都會(huì)被清理掉,包括日志、掛載的卷等。
流程圖
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-830104.html
prestop
我們添加 lifecycle 字段來(lái)添加一些生命周期鉤子:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:1.0.0
ports:
- containerPort: 8080
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
preStop:
exec:
command: ["/bin/sh", "-c", "nginx -s quit; while killall -0 nginx; do sleep 1; done"]
在這個(gè)配置中,我們添加了兩個(gè)生命周期鉤子。postStart 鉤子就像是一個(gè)歡迎儀式,當(dāng)容器創(chuàng)建后,它會(huì)打印一條歡迎消息。preStop 鉤子則像是一個(gè)禮貌的道別,它會(huì)優(yōu)雅地關(guān)閉 nginx 服務(wù),然后等待所有的 nginx 進(jìn)程退出。
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-830104.html
到了這里,關(guān)于飛天使-k8s知識(shí)點(diǎn)18-kubernetes實(shí)操3-pod的生命周期的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!