pod 文件管理服务器,k8s中pod的状态管理
這篇文章來說一下k8s中pod的狀態(tài)管理。
在k8s當中,一個pod是一個調(diào)度單元。一個pod可以包含一個或者多個容器。每個容器可以是一個網(wǎng)絡(luò)服務(wù)器前端,后端或者整個包含前后端的服務(wù)。
接下來我們來看看一個pod的狀態(tài)變化過程。
Pending
當我們創(chuàng)建一個pod的時候,它的第1個狀態(tài)是Pending。這個狀態(tài)是說k8s的API已經(jīng)接受了你的pod請求。但是還沒有真正的發(fā)起調(diào)度。
這個地方我們假設(shè)你有多臺機器,也可能是多臺虛擬機。調(diào)度器用來查找和申請不同的資源,比如說我們需要一個CPU加上2G的內(nèi)存來使用一個pod。
Creating
找到這些資源以后,調(diào)度器會在某臺機子上,為pod的創(chuàng)建做準備。此時pod的狀態(tài)就會進入到creating。在這個狀態(tài)下第1件事要做的就是把容器的鏡像下載下來。如果在當前機子上已經(jīng)有了這個鏡像的話,這個過程可以跳過。
Running
鏡像準備好以后,接下來的一個狀態(tài)就是running。在這個狀態(tài)下就會啟動容器也就是啟動你的應(yīng)用程序,比如后端服務(wù),等等。
CrashLoopBackOff
如果在運行的過程中發(fā)生了故障導(dǎo)致你的容器崩潰。這個時候k8s會重啟這個容器。如果經(jīng)常崩潰,啟動的次數(shù)過多的話。這個pod就會進入CrashLoopBackOff狀態(tài)。進入這個狀態(tài)以后,k8s不會立即再次啟動容器,而是會等一段時間,比如說10秒鐘以后再重啟。如果繼續(xù)重啟失敗的話,就會等20秒以后,以此類推。
這個時候你可能需要研究一下,到底發(fā)生了什么事情,繼而修復(fù)你的程序。
導(dǎo)致這種現(xiàn)象可能的情況有很多,比如說數(shù)據(jù)庫沒有準備好,某個依賴服務(wù)沒有啟動起來等等。
如果資源非常緊張調(diào)度器無法申請到的時候,我們會看到pod處于Pending的狀態(tài)。
解決這種問題的一般措施如下:
1.被動的等待資源釋放。
2.主動的釋放資源。
3.增加資源。
如果無法獲取到容器對應(yīng)的鏡像,也會使一個pod的狀態(tài)處于Pending。
檢查pods狀態(tài)的兩個常用命令如下:
kubectl get pods
kubectl describe pods
Health和Ready
每個pod對應(yīng)一個IP地址和端口,你可以用health和ready請求來檢查它們是否運轉(zhuǎn)正常。如果返回200類的狀態(tài)碼,說明一切正常,否則的話你可以手工重啟或者修復(fù)問題。
其他需要關(guān)注的pod的狀態(tài):
post start
post start,這是當你的容器啟動以后要觸發(fā)的狀態(tài)。
pre stop
另一個狀態(tài)是pre stop,描述的是在你的容器要終止之前要觸發(fā)的狀態(tài)。
容器初始化
在pod中可以定義容器初始化過程。一般的情況用在某個容器需要做一些初始化的工作,然后才啟動其他的容器。
這樣的案例,比如說需要做數(shù)據(jù)庫的遷移更新,文件的下載等等相對比較耗時而又必須的工作。
總結(jié)
以上是生活随笔為你收集整理的pod 文件管理服务器,k8s中pod的状态管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 豆瓣电台WP7客户端 开发记录6
- 下一篇: uIP各部分协议代码的分析
