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