1、kubernetes 基本介紹
????kubernetes,簡(jiǎn)稱 K8s,是用 8 代替 8 個(gè)字符“ubernete”而成的縮寫(xiě)。是一個(gè)開(kāi)源的,用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化的應(yīng)用,Kubernetes 的目標(biāo)是讓部署容器化的應(yīng)用簡(jiǎn)單并且高效(powerful),Kubernetes 提供了應(yīng)用部署,規(guī)劃,更新,維護(hù)的一種機(jī)制。
????傳統(tǒng)的應(yīng)用部署方式是通過(guò)插件或腳本來(lái)安裝應(yīng)用。這樣做的缺點(diǎn)是應(yīng)用的運(yùn)行、配置、管理、所有生存周期將與當(dāng)前操作系統(tǒng)綁定,這樣做并不利于應(yīng)用的升級(jí)更新/回滾等操作,當(dāng)然也可以通過(guò)創(chuàng)建虛擬機(jī)的方式來(lái)實(shí)現(xiàn)某些功能,但是虛擬機(jī)非常重,并不利于可移植性。
????新的方式是通過(guò)部署容器方式實(shí)現(xiàn),每個(gè)容器之間互相隔離,每個(gè)容器有自己的文件系統(tǒng) ,容器之間進(jìn)程不會(huì)相互影響,能區(qū)分計(jì)算資源。相對(duì)于虛擬機(jī),容器能快速部署,由于容器與底層設(shè)施、機(jī)器文件系統(tǒng)解耦的,所以它能在不同云、不同版本操作系統(tǒng)間進(jìn)行遷移。
????容器占用資源少、部署快,每個(gè)應(yīng)用可以被打包成一個(gè)容器鏡像,每個(gè)應(yīng)用與容器間成一對(duì)一關(guān)系也使容器有更大優(yōu)勢(shì),使用容器可以在 build 或 release 的階段,為應(yīng)用創(chuàng)建容器鏡像,因?yàn)槊總€(gè)應(yīng)用不需要與其余的應(yīng)用堆棧組合,也不依賴于生產(chǎn)環(huán)境基礎(chǔ)結(jié)構(gòu),這使得????從研發(fā)到測(cè)試、生產(chǎn)能提供一致環(huán)境。類似地,容器比虛擬機(jī)輕量、更“透明”,這更便于監(jiān)控和管理。
????Kubernetes 是 Google 開(kāi)源的一個(gè)容器編排引擎,它支持自動(dòng)化部署、大規(guī)模可伸縮、應(yīng)用容器化管理。在生產(chǎn)環(huán)境中部署一個(gè)應(yīng)用程序時(shí),通常要部署該應(yīng)用的多個(gè)實(shí)例以便對(duì)應(yīng)用請(qǐng)求進(jìn)行負(fù)載均衡。
????在 Kubernetes 中,我們可以創(chuàng)建多個(gè)容器,每個(gè)容器里面運(yùn)行一個(gè)應(yīng)用實(shí)例,然后通過(guò)內(nèi)置的負(fù)載均衡策略,實(shí)現(xiàn)對(duì)這一組應(yīng)用實(shí)例的管理、發(fā)現(xiàn)、訪問(wèn),而這些細(xì)節(jié)都不需要運(yùn)維人員去進(jìn)行復(fù)雜的手工配置和處理。
2、kubernetes 功能和架構(gòu)
2.1 概述
????Kubernetes 是一個(gè)輕便的和可擴(kuò)展的開(kāi)源平臺(tái),用于管理容器化應(yīng)用和服務(wù)。通過(guò) Kubernetes 能夠進(jìn)行應(yīng)用的自動(dòng)化部署和擴(kuò)縮容。在 Kubernetes 中,會(huì)將組成應(yīng)用的容 器組合成一個(gè)邏輯單元以更易管理和發(fā)現(xiàn)。Kubernetes 積累了作為 Google 生產(chǎn)環(huán)境運(yùn)行 工作負(fù)載 15 年的經(jīng)驗(yàn),并吸收了來(lái)自于社區(qū)的最佳想法和實(shí)踐。
2.2 k8s功能
自動(dòng)裝箱:基于容器對(duì)應(yīng)用運(yùn)行環(huán)境的資源配置要求自動(dòng)部署應(yīng)用容器;
自我修復(fù)(自愈能力):當(dāng)容器失敗時(shí),會(huì)對(duì)容器進(jìn)行重啟;當(dāng)所部署的 Node 節(jié)點(diǎn)有問(wèn)題時(shí),會(huì)對(duì)容器進(jìn)行重新部署和重新調(diào)度;當(dāng)容器未通過(guò)監(jiān)控檢查時(shí),會(huì)關(guān)閉此容器直到容器正常運(yùn)行時(shí),才會(huì)對(duì)外提供服務(wù);
水平拓展:通過(guò)簡(jiǎn)單的命令、用戶 UI 界面或基于 CPU 等資源使用情況,對(duì)應(yīng)用容器進(jìn)行規(guī)模擴(kuò)大 或規(guī)模剪裁;
滾動(dòng)更新:可以根據(jù)應(yīng)用的變化,對(duì)應(yīng)用容器運(yùn)行的應(yīng)用,進(jìn)行一次性或批量式更新;
版本回退:可以根據(jù)應(yīng)用部署情況,對(duì)應(yīng)用容器運(yùn)行的應(yīng)用,進(jìn)行歷史版本即時(shí)回退;
密鑰和配置管理:在不需要重新構(gòu)建鏡像的情況下,可以部署和更新密鑰和應(yīng)用配置,類似熱部署;
存儲(chǔ)編排:自動(dòng)實(shí)現(xiàn)存儲(chǔ)系統(tǒng)掛載及應(yīng)用,特別對(duì)有狀態(tài)應(yīng)用實(shí)現(xiàn)數(shù)據(jù)持久化非常重要 存儲(chǔ)系統(tǒng)可以來(lái)自于本地目錄、網(wǎng)絡(luò)存儲(chǔ)(NFS、Gluster、Ceph 等)、公共云存儲(chǔ)服務(wù)
批處理:提供一次性任務(wù),定時(shí)任務(wù);滿足批量數(shù)據(jù)處理和分析的場(chǎng)景。
2.3 應(yīng)用部署架構(gòu)分類
無(wú)中心節(jié)點(diǎn)架構(gòu):GlusterFS
有中心節(jié)點(diǎn)架構(gòu):HDFS、K8S
2.4 k8s集群架構(gòu)
2.5 k8s集群架構(gòu)節(jié)點(diǎn)角色功能
2.5.1 Master Node
k8s 集群控制節(jié)點(diǎn),對(duì)集群進(jìn)行調(diào)度管理,接受集群外用戶去集群操作請(qǐng)求; Master Node 由 API Server、Scheduler、ClusterState Store(ETCD 數(shù)據(jù)庫(kù))和 Controller MangerServer 所組成。
apiserver提供了資源操作的唯一入口,并提供認(rèn)證、授權(quán)、訪問(wèn)控制、API注冊(cè)和發(fā)現(xiàn)等機(jī)制;
controller manager負(fù)責(zé)維護(hù)集群的狀態(tài),比如故障檢測(cè)、自動(dòng)擴(kuò)展、滾動(dòng)更新等;
scheduler負(fù)責(zé)資源的調(diào)度,按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的機(jī)器上;
etcd保存了整個(gè)集群的狀態(tài);
2.5.1 Worker Node
集群工作節(jié)點(diǎn),運(yùn)行用戶業(yè)務(wù)應(yīng)用容器; Worker Node 包含 kubelet、kube proxy 和 ContainerRuntime;
kubelet負(fù)責(zé)維護(hù)容器的生命周期,同時(shí)也負(fù)責(zé)Volume(CVI)和網(wǎng)絡(luò)(CNI)的管理;
kube-proxy負(fù)責(zé)為Service提供cluster內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡;
Container runtime負(fù)責(zé)鏡像管理以及Pod和容器的真正運(yùn)行(CRI);