4 存儲與資源管理

k8s卷管理

k8s和docker默認(rèn)使用本地的主機(jī)磁盤

容器卷生命周期

在資源短缺下,k8s可能會停止容器,在相同或另一個(gè)k8s節(jié)點(diǎn)上重新啟動(dòng)容器

Pod內(nèi)共享卷

k8s中通一個(gè)Pod的多個(gè)容器可以共享相同IP地址、網(wǎng)絡(luò)端口和IPC,程序間可以通過localhost網(wǎng)絡(luò)相互通信,但文件系統(tǒng)是相互隔離的

示例:同個(gè)Pod中Tomcat和Nginx容器,可以通過localhost互相通信,但不能訪問彼此的配置文件

無狀態(tài)和有狀態(tài)程序

無狀態(tài)應(yīng)用程序中使用臨時(shí)卷,容器上應(yīng)用程序不需要保留數(shù)據(jù)

示例:通過k8s中的emptydir卷共享日志文件

有狀態(tài)應(yīng)用會使用持久卷,如ES,即使容器重新啟動(dòng)也必須保留數(shù)據(jù)

不需要在相同pod中配置ES容器,ES可獨(dú)立擴(kuò)展

Kubernetes持久卷和動(dòng)態(tài)配置

Persistent Volumne(PV),如AWS EBS、Google Persisten Disk

支持網(wǎng)絡(luò)(分布式)文件系統(tǒng),如NFS、ClusterFS、Ceph

還支持塊設(shè)備,如iSCSI和FC

持久卷抽象層聲明

直接將持久卷指定到配置文件中,與特定基礎(chǔ)設(shè)施構(gòu)成緊耦合

從容器角度,pod定義不應(yīng)鎖定到特定環(huán)境,基礎(chǔ)設(shè)施因環(huán)境而異,理想pod應(yīng)該是靈活的抽象的,僅指定卷名和掛載點(diǎn)

k8s提供抽象層,在pod和持久卷之間關(guān)聯(lián),稱為持久卷聲明 persistent volume claim,PVC,使基礎(chǔ)設(shè)施被分離出來,k8s管理員只需預(yù)先分配所需容量的持久卷,然后k8s將綁定持久卷和PVC

動(dòng)態(tài)配置和存儲類型

PVC為持久卷管理提供靈活性,但是預(yù)分配持久卷池不具備成本效益,尤其公有云

k8s通過支持持久卷的動(dòng)態(tài)配置dynamics provision來改善這種情況

k8s管理員定義持久卷provisioner,稱為存儲類storageClass,持久卷聲明要求storageClass動(dòng)態(tài)分配持久卷,后將其與PVC關(guān)聯(lián)

使用狀態(tài)集(StatefulSet)管理具有持有卷的Pod

狀態(tài)集和持久卷組合功能強(qiáng)大,可以使應(yīng)用程序變得更靈活,從而更方便進(jìn)行擴(kuò)展

狀態(tài)集涵蓋了Pod和持久卷之間的綁定,當(dāng)Pod擴(kuò)展或收縮時(shí),將同時(shí)創(chuàng)建或刪除Pod和持久卷

Pod的創(chuàng)建過程是串行的,如當(dāng)請求k8s擴(kuò)展另外兩個(gè)StatefulSet時(shí),k8s先創(chuàng)建持久卷聲明1和po1,再創(chuàng)建持久卷聲明2和pod2

即使一個(gè)pod已銷毀,狀態(tài)集也會保留pod的位置(名稱、IP、相關(guān)metadata)及持久卷,然后嘗試重新創(chuàng)建一個(gè)容器,重新分配到同一個(gè)pod并掛載相同的持久卷

可幫助控制Pod、持久卷的數(shù)量,同時(shí)通過Scheduler保證應(yīng)用程序始終在線

具有持久卷的狀態(tài)集需要?jiǎng)討B(tài)配置和存儲類,狀態(tài)集時(shí)刻擴(kuò)展的,添加pod時(shí),k8s需要知道如何配置持久卷

持久卷示例

ES集群

ES使用多個(gè)節(jié)點(diǎn)來構(gòu)建集群,有不同類型的節(jié)點(diǎn),如master、data、coordinate,每個(gè)節(jié)點(diǎn)在集群中有不同的角色和職責(zé),相應(yīng)的k8s配置和持久卷應(yīng)與之保持一致

示例:ES節(jié)點(diǎn)組件和角色

ES主節(jié)點(diǎn):唯一,其他節(jié)點(diǎn)需要指向它進(jìn)行注冊,使用statefulSet分配固定的DNS名稱

ES備份節(jié)點(diǎn):主節(jié)點(diǎn)的備用節(jié)點(diǎn),擴(kuò)展StatefulSet來分配,無需另外創(chuàng)建k8s對象

ES數(shù)據(jù)節(jié)點(diǎn):負(fù)責(zé)存儲數(shù)據(jù),如有更大的數(shù)據(jù)量或更多查詢請求,使用StatefulSet和持久卷進(jìn)行橫向擴(kuò)展,不需要DNS名稱,不需要為ES數(shù)據(jù)節(jié)點(diǎn)創(chuàng)建服務(wù)

ES協(xié)調(diào)節(jié)點(diǎn):負(fù)責(zé)負(fù)載均衡,需要水平擴(kuò)展以處理更多來自外部的HTTP流量,并不需要對數(shù)據(jù)持久保存,可以將復(fù)制集ReplicaSet與服務(wù)結(jié)合使用,對外暴露HTTP接口

Kubernetes資源管理

資源服務(wù)質(zhì)量(QoS)

可以關(guān)注管理員按不同優(yōu)先級分配和管理容器

根據(jù)Pod設(shè)置,按優(yōu)先級將pod分為三類:Guaranteed Pod->Burstable Pod->BestEffort Pod

配置BestEffort Pod

QoS中最低優(yōu)先級,資源短缺下,該類Pod將首先被終止(資源限制設(shè)置為0或不指定)

BestEffort Pod常用于無狀態(tài)和可恢復(fù)的應(yīng)用程序,如worker進(jìn)程、代理或緩存節(jié)點(diǎn)

配置Guaranteed Pod

QoS中最高優(yōu)先級,資源短缺下,k8s調(diào)度器會長期保障該類容器到最后

用來運(yùn)行關(guān)鍵任務(wù),如帶持久卷的后端數(shù)據(jù)庫、主節(jié)點(diǎn)

需要將資源限制和資源請求顯示設(shè)置為相同值,或僅設(shè)置資源限制

如不確定應(yīng)用程序所需CPU和內(nèi)存資源,可先試用Burstable類型觀察一段時(shí)間

配置Burstable Pod

資源限制配置不是強(qiáng)制性的,當(dāng)節(jié)點(diǎn)資源充足時(shí),pod可以盡可能的消耗CPU和內(nèi)存

任何類型的應(yīng)用都可以使用

如已知道應(yīng)用程序最小內(nèi)存大小,可指定請求資源,有助于k8s調(diào)度器分配正確的節(jié)點(diǎn)

QoS顆粒度是Pod級別而不是容器級別,如具有兩個(gè)容器的Pod,容器A容器GB配置B,則選B

資源使用監(jiān)控

如資源不足,Pod可能無法由k8s調(diào)度器進(jìn)行部署

kubectl describe nodes可以查看分配資源

如節(jié)點(diǎn)已運(yùn)行了Burstable Pod配置,但沒資源分配,則不用執(zhí)行該pod,需要k8s節(jié)點(diǎn)提供更多資源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容