研究了一下後發現
這是kubernetes的 Preemption
[1] 引起的
中文翻譯成 先佔
佔什麼鬼 誰看得懂啊?
爬了[1]的文後,簡單翻譯一下我的認知
在說明Preemption
前,先說一下kubernetes裡的一個屬性 優先權(priority)
這個屬性叫做 priorityClassName
[2],是讓你設定Pod的優先權
例如:若這個pod是負責Application類的,不能死掉的,那就可以把他的優先權調高;若這個Pod是負責類似監控啊,batch之類的,死掉一下比較沒關係的,就可以把優先權調低(其實不要設定就好XD)
(跳一下回來主題)
Kubernetes的特性,就是它可以彈性的調配Pod的資源
但如果資源不夠時(CPU or memory),該怎麼辦?
kubernetes會先犧牲掉優先權(priority)較低的pod
它會把priority較低的pod,先回收到排程區(scheduled)
把資源讓給system pod或priority較高的pod
等有多餘可調度的資源時,再把排程區的pod起起來。
上述說明中的
「把資源讓給system pod或priority較高的pod」就是Preemption
(我的認知)
因此,若出現Preemption的狀態時
priority較低的pod上,就會出現這個訊息
「Preempted in order to admit critical pod」
kubenetes就是跟你說:這個pod的資源要被別人搶走囉😆
謎之音:那如果我所有的pod都沒有設定priority咧?
答:那就隨機回收阿!
因此,上方 error2
的圖
replicas:1
但卻顯示兩個pod的原因
是因為第一個pod被回收了,所以出現驚嘆號
但過一陣子,資源調度ok了,因此第二個pod就長出來了
但kubernetes可能因為比較貼心(亂猜)
所以並沒有把第一個pod的狀態砍掉,有留給使用者查詢
最後,該如何處理這個驚嘆號咧?
不用懷疑,直接delete這個pod就好😅
以上為學習筆記,若有誤刊,或觀念不清楚的地方,請通知我!
謝謝
參考文件
[1] https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#preemption
[2]https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#pod-priority