k8sReplicaSet控制器


一、ReplicaSet概述

簡稱RS,是pod控制器類型的一種實現,用於確保由其管控的pod對象副本數在任一時刻都能精確滿足期望的數量。ReplicaSet控制器資源啟動后會查找集群中匹配其標簽選擇器的pod資源對象,當前活動對象的數量與其期望的數量不吻合時,多則刪除,少則通過pod模板創建以補足,等pod資源副本數量符合期望值后即進入下一輪和解循環。

RS的副本數量、標簽選擇器甚至是pod模板都可以隨時按需進行修改,不過僅改動期望的副本數量會對現存的pod副本產生直接影響。修改標簽選擇器可能會使得現有的pod副本的標簽變得不在匹配,此時rs控制器要做的不過是不再計入它們而已。另外,在創建完成后,rs也不再關注pod對象中的實際內容,因此pod模板的改動也只會對后來新建的pod副本產生影響。相比較於手動創建和管理pod資源來說,rs能夠實現以下功能:

1、確保pod資源對象的數量反映期望值:rs需要確保由其控制運行的pod副本數量精確吻合配置中定義的期望值,否則就會自動補足所缺或終止所余。

2、確保pod監控運行:探測到由其管控的pod對象因其所在的工作節點故障而不可用時,自動請求由調度器於其他工作節點創建缺失的pod副本。

3、彈性伸縮:業務規模因各種原因經常存在明顯波動,在波峰或波谷期間,可以通過rs控制器動態調整相關pod資源對象數量。此外,在必要時還可以通過hpa(HroizontalPodAutoscaler)控制器實現pod資源規模的自動伸縮。

二、創建RS

類似於pod資源,創建rs控制器對象同樣可以使用yaml或json格式的清單文件定義其配置,而后使用相關的創建命令來完成資源創建。

replicas:期望的pod對象副本數

selector:當前控制器匹配pod對象副本的標簽選擇器,支持matchLabels和matchExpressions兩種匹配機制。

template:用於補足pod副本數量時使用的pod模板資源。

minReadySeconds:新建的pod對象,在啟動后的多長時間內如果其容器未發生崩潰等異常情況即被視為就緒;默認0s,表示一旦就緒性探測成功,即被視作可用。

三、RS管控下的pod對象

實際中存在着不少可能導致pod對象數目與期望值不符合的可能性,如pod對象的意外刪除、pod對象標簽的變動、控制器的標簽選擇器變動、甚至是工作節點故障等。rs控制器的和解循環過程能夠實時監控到這些異常,並及時啟動和解操作。

1、缺少pod副本

任何原因導致的相關pod對象丟失,都會由rs控制器自動補足。另外,強行修改隸屬於控制器的某pod資源的標簽,會導致它不再被控制器作為副本計數,這也將觸發控制器的pod對象副本缺失補足機制。修改后的標簽如果又能被其他控制器資源的標簽選擇器所命中,則此時它又成了隸屬於另一控制器的副本。如果修改后的pod對象不再隸屬於任何控制器,那么它將成為自主式pod。

2、多出pod副本

一旦被標簽選擇器匹配到的pod資源數量因任何原因超出期望值,多余的部分都將被控制器自動刪除。這就意味着,任何自助式的活本隸屬於其他控制器的pod資源,其標簽變動的結果一旦匹配到了其他的副本數足額的控制器,就會導致這類pod資源被刪除。

3、查看pod資源變動的相關事件

使用kubectl describe replicasets命令可以打印出rs控制器的詳細狀態。事實上,rs控制器能對pod對象數目的異常及時做出響應,是因為它向api server注冊監控了相關資源及其列表的變動信息,於是api server會在變動發生時立即通知給相關的監控客戶端。因而節點自身故障而導致的pod對象丟失,rs控制器一樣會使用補足資源的方式進行處理。

四、更新rs控制器

rs控制器的核心組成部分是標簽選擇器、副本數量及pod模板,但更新操作一般是圍繞raplicas和template兩個字段值進行的,改動pod模板的定義對已經創建完成的活動對象無效,但在用戶逐個關閉其舊版本的pod資源后就能以新代舊,實現控制器下應用版本的滾動升級。另外,修改副本數量也就意味着應用規模的擴展或收縮。

1、更改pod模板

rs控制器的pod模板可隨時按需修改,但它僅影響這之后由其新建的pod對象,對已有的副本不會產生作用。對新版本的清單文件執行kubectl apply或kubectl replace命令即可完成控制器資源的修改操作。不過控制器管控的現存pod對象仍未改變。此時,手動刪除控制器現有的pod對象,並由控制器基於新的pod模板自動創建出足額的pod副本即可完成一次應用的升級。實際使用時,還需要更完善的機制,即便是僅執行了一到多次刪除操作,手動執行更替操作也並非一項輕松任務。更高級別的pod控制器deployment能夠實現更完善的滾動更新和回滾,並為用戶提供自定義更新策略的接口。而且,還可以實現藍綠部署、金絲雀部署和灰度部署等。

2、擴容和縮容

改動rs對象配置中期望的pod副本數量會由控制器實時做出響應,從而實現應用規模的水平伸縮。replicas的修改及應用方式同pod模板,不過,kubectl還提供了一個專用的子命令scale用於實現應用規模的伸縮,它支持從清單文件中獲取新的目標副本數量,也可以直接在命令行通過“--replicas”選項進行讀取。

五、刪除rs控制器資源

使用kubectl delete命令刪除rs對象時默認會一並刪除其管控的各pod對象。又是,考慮到這些pod資源未必由其創建,或者即使由其創建卻也並非其自身的組成部分。故而使用“--cascade=false”選項,取消級聯刪除相關的pod對象。盡管rs控制器功能強大,但在實踐中,它卻並非時用戶直接使用的控制器,而是deployment。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM