一、Kubernetes?是什么
Kubernetes?是一個(gè)全新的基于容器技術(shù)的分布式架構(gòu)解決方案,是?Google?開源的一個(gè)容器集群管理系統(tǒng),Kubernetes?簡稱?K8S。
Kubernetes?是一個(gè)一站式的完備的分布式系統(tǒng)開發(fā)和支撐平臺,更是一個(gè)開放平臺,對現(xiàn)有的編程語言、編程框架、中間件沒有任何侵入性。
Kubernetes?提供了完善的管理工具,這些工具涵蓋了開發(fā)、部署測試、運(yùn)維監(jiān)控在內(nèi)的各個(gè)環(huán)節(jié)。
Kubernetes?具有完備的集群管理能力,包括多層次的安全防護(hù)和準(zhǔn)入機(jī)制、多租戶應(yīng)用支撐能力、透明的服務(wù)注冊和服務(wù)發(fā)現(xiàn)機(jī)制、內(nèi)建智能負(fù)載均衡器、強(qiáng)大的故障發(fā)現(xiàn)和自我修復(fù)能力、服務(wù)滾動(dòng)升級和在線擴(kuò)容能力、可擴(kuò)展的資源自動(dòng)調(diào)度機(jī)制、多粒度的資源配額管理能力。
Kubernetes?官方文檔:Kubernetes
二、Kubernetes?特性
①?自我修復(fù)
在節(jié)點(diǎn)故障時(shí),重新啟動(dòng)失敗的容器,替換和重新部署,保證預(yù)期的副本數(shù)量;殺死健康檢查失敗的容器,并且在未準(zhǔn)備好之前不會(huì)處理用戶的請求,確保線上服務(wù)不中斷。
?
②?彈性伸縮
使用命令、UI或者基于CPU使用情況自動(dòng)快速擴(kuò)容和縮容應(yīng)用程序?qū)嵗?,保證應(yīng)用業(yè)務(wù)高峰并發(fā)時(shí)的高可用性;業(yè)務(wù)低峰時(shí)回收資源,以最小成本運(yùn)行服務(wù)。
?
③?自動(dòng)部署和回滾
K8S采用滾動(dòng)更新策略更新應(yīng)用,一次更新一個(gè)Pod,而不是同時(shí)刪除所有Pod,如果更新過程中出現(xiàn)問題,將回滾更改,確保升級不影響業(yè)務(wù)。
?
④?服務(wù)發(fā)現(xiàn)和負(fù)載均衡
K8S為多個(gè)容器提供一個(gè)統(tǒng)一訪問入口(內(nèi)部IP地址和一個(gè)DNS名稱),并且負(fù)載均衡關(guān)聯(lián)的所有容器,使得用戶無需考慮容器IP問題。
?
⑤?機(jī)密和配置管理
管理機(jī)密數(shù)據(jù)和應(yīng)用程序配置,而不需要把敏感數(shù)據(jù)暴露在鏡像里,提高敏感數(shù)據(jù)安全性。并可以將一些常用的配置存儲在K8S中,方便應(yīng)用程序使用。
?
⑥?存儲編排
掛載外部存儲系統(tǒng),無論是來自本地存儲,公有云,還是網(wǎng)絡(luò)存儲,都作為集群資源的一部分使用,極大提高存儲使用靈活性。
?
⑦?批處理
提供一次性任務(wù),定時(shí)任務(wù);滿足批量數(shù)據(jù)處理和分析的場景。
三、基礎(chǔ)架構(gòu)圖
核心組件:
??etcd保存了整個(gè)集群的狀態(tài)和應(yīng)用部署的信息;
??Kube-apiserver提供了資源操作的唯一入口,并提供認(rèn)證、授權(quán)、訪問控制、API注冊和發(fā)現(xiàn)等機(jī)制;
??Kube-Controller-manager負(fù)責(zé)維護(hù)集群的狀態(tài),比如故障檢測、自動(dòng)擴(kuò)展、滾動(dòng)更新等;
??Kube-scheduler負(fù)責(zé)資源的調(diào)度,按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的機(jī)器上;
?
??kubelet負(fù)責(zé)節(jié)點(diǎn)注冊和心跳發(fā)送、應(yīng)用生命周期管理、應(yīng)用健康檢查、CSI存儲接口對接存儲;
??Container?runtime負(fù)責(zé)鏡像管理以及Pod和容器的真正運(yùn)行(CRI);
??kube-proxy負(fù)責(zé)服務(wù)暴露實(shí)現(xiàn);???????????
?
注意:kubelet、container?Runtime、kube-proxy這幾個(gè)組件在master節(jié)點(diǎn)也可以有。master節(jié)點(diǎn)也可以組集群。具體作用可自行檢索。
Node和Pod是不同的概念,Node是物理或虛擬機(jī)器,而Pod是一個(gè)或多個(gè)容器的集合。Pod可以在Node上運(yùn)行,一個(gè)Node可以運(yùn)行多個(gè)Pod,一個(gè)Pod也可以跨多個(gè)Node運(yùn)行。
四、配額限額
(1)資源配置
要配置兩個(gè):
request--資源請求,?limit--最大限制;
實(shí)例:
?spec:
??????containers:
??????-?name:?hostnames
????????image:?mirrorgooglecontainers/serve_hostname
????????resources:
??????????requests:
????????????cpu:?100m
????????????memory:?100Mi
??????????limits:
????????????cpu:?100m
????????????memory:?100Mi
????????????
100?millicpu,也就是?0.1?個(gè)?CPU?的意思。也可以寫成?cpu:0.1;
memory100Mi:1Mi=1024*1024;1M=1000*1000,所以這里就是100MB內(nèi)存的意思。
問題:按理說設(shè)置limit最大資源限制就可以了,類似docker-compose上面配置一樣,為什么k8s還要設(shè)置一個(gè)request資源請求參數(shù)?
?
答:`resources.requests`?字段可以指定?Pod?所需的?CPU?和內(nèi)存資源量。Kubernetes?調(diào)度器會(huì)根據(jù)這個(gè)參數(shù)來選擇合適的節(jié)點(diǎn),以確保節(jié)點(diǎn)上的資源能夠滿足?Pod?的需求。如果沒有設(shè)置這個(gè)參數(shù),Kubernetes?調(diào)度器會(huì)默認(rèn)將?Pod?的資源需求設(shè)置為?0,這可能會(huì)導(dǎo)致?Pod?被調(diào)度到資源不足的節(jié)點(diǎn)上,從而影響?Pod?的性能和穩(wěn)定性。
需要注意的是,resources.requests?字段只是一個(gè)建議值,Kubernetes?調(diào)度器并不會(huì)強(qiáng)制要求節(jié)點(diǎn)提供這些資源。如果節(jié)點(diǎn)上的資源不足,Pod?仍然可能會(huì)出現(xiàn)資源不足的情況。因此,在設(shè)置?resources.requests?字段時(shí),需要根據(jù)實(shí)際情況合理設(shè)置,以確保?Pod?能夠正常運(yùn)行。
(2)資源搶占
對于內(nèi)存這類不可壓縮資源,如果發(fā)生資源搶占,則會(huì)按照優(yōu)先級的高低進(jìn)行Pod的驅(qū)逐(關(guān)閉掉)。驅(qū)逐的策略為:?優(yōu)先驅(qū)逐Request=Limit=0(BestEffort級別)的Pod,其次驅(qū)逐Request?!=Limit?(Burstable)。0<Request==Limit的Pod的會(huì)被保留;文章來源:http://www.zghlxwxcb.cn/news/detail-686594.html
Request設(shè)置按比例分占CPU調(diào)度的時(shí)間片,所以反過來說,request值設(shè)得越大,也就意味著,發(fā)生資源搶占時(shí),每個(gè)Pod分到的CPU時(shí)間片也越多;文章來源地址http://www.zghlxwxcb.cn/news/detail-686594.html
到了這里,關(guān)于k8s(kubernetes)介紹篇的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!