什么是Kubernetes
- kubernetes的簡(jiǎn)稱(chēng)K8S(k和s之間有8個(gè)字母)绣版,是Google團(tuán)隊(duì)發(fā)起并維護(hù)的基于Docker的開(kāi)源容器集群管理系統(tǒng)偿枕,它不僅支持常見(jiàn)的云平臺(tái),而且支持內(nèi)部數(shù)據(jù)中心醇蝴。建于 Docker 之上的 Kubernetes 可以構(gòu)建一個(gè)容器的調(diào)度服務(wù),其目的是讓用戶(hù)透過(guò)Kubernetes集群來(lái)進(jìn)行云端容器集群的管理,而無(wú)需用戶(hù)進(jìn)行復(fù)雜的設(shè)置工作系統(tǒng)會(huì)自動(dòng)選取合適的工作節(jié)點(diǎn)來(lái)執(zhí)行具體的容器集群調(diào)度處理工作魔种。其核心概念是Container Pod(容器倉(cāng))。一個(gè)Pod是有一組工作于同一物理工作節(jié)點(diǎn)的容器構(gòu)成的粉洼。這些組容器擁有相同的網(wǎng)絡(luò)命名空間/IP以及存儲(chǔ)配額节预,可以根據(jù)實(shí)際情況對(duì)每一個(gè)Pod進(jìn)行端口映射叶摄。此外,Kubernetes工作節(jié)點(diǎn)會(huì)由主系統(tǒng)進(jìn)行管理安拟,節(jié)點(diǎn)包含了能夠運(yùn)行Docker容器所用到的服務(wù)蛤吓。
Kubernetes主要功能
- 基于容器的應(yīng)用部署、維護(hù)和滾動(dòng)升級(jí)
- 負(fù)載均衡和服務(wù)發(fā)現(xiàn)
- 夸機(jī)器和夸地區(qū)的集群調(diào)度
- 自動(dòng)伸縮
- 無(wú)狀態(tài)服務(wù)和有狀態(tài)服務(wù)
- 廣泛Volume支持
- 插件機(jī)制保證擴(kuò)展性
Kubernetes是一個(gè)平臺(tái)
- Kubernetes 提供了很多的功能糠赦,它可以簡(jiǎn)化應(yīng)用程序的工作流会傲,加快開(kāi)發(fā)速度。通常拙泽,一個(gè)成功的應(yīng)用編排系統(tǒng)需要有較強(qiáng)的自動(dòng)化能力淌山,這也是為什么 Kubernetes 被設(shè)計(jì)作為構(gòu)建組件和工具的生態(tài)系統(tǒng)平臺(tái),以便更輕松地部署顾瞻、擴(kuò)展和管理應(yīng)用程序泼疑。
- 用戶(hù)可以使用 Label 以自己的方式組織管理資源,還可以使用 Annotation 來(lái)自定義資源的描述信息荷荤,比如為管理工具提供狀態(tài)檢查等退渗。
- 此外,Kubernetes 控制器也是構(gòu)建在跟開(kāi)發(fā)人員和用戶(hù)使用的相同的 API 之上蕴纳。用戶(hù)還可以編寫(xiě)自己的控制器和調(diào)度器会油,也可以通過(guò)各種插件機(jī)制擴(kuò)展系統(tǒng)的功能。
- 這種設(shè)計(jì)使得可以方便地在 Kubernetes 之上構(gòu)建各種應(yīng)用系統(tǒng)袱蚓。
Kubernetes 不是什么
Kubernetes 不是一個(gè)傳統(tǒng)意義上钞啸,包羅萬(wàn)象的 PaaS (平臺(tái)即服務(wù)) 系統(tǒng)。它給用戶(hù)預(yù)留了選擇的自由喇潘。
- 不限制支持的應(yīng)用程序類(lèi)型体斩,它不插手應(yīng)用程序框架, 也不限制支持的語(yǔ)言 (如 Java, Python, Ruby 等),只要應(yīng)用符合 12 因素 即可颖低。Kubernetes 旨在支持極其多樣化的工作負(fù)載絮吵,包括無(wú)狀態(tài)、有狀態(tài)和數(shù)據(jù)處理工作負(fù)載忱屑。只要應(yīng)用可以在容器中運(yùn)行蹬敲,那么它就可以很好的在 Kubernetes 上運(yùn)行。
- 不提供內(nèi)置的中間件 (如消息中間件)莺戒、數(shù)據(jù)處理框架 (如 Spark)伴嗡、數(shù)據(jù)庫(kù) (如 mysql) 或集群存儲(chǔ)系統(tǒng) (如 Ceph) 等。這些應(yīng)用直接運(yùn)行在 Kubernetes 之上从铲。
- 不提供點(diǎn)擊即部署的服務(wù)市場(chǎng)瘪校。
- 不直接部署代碼,也不會(huì)構(gòu)建您的應(yīng)用程序,但您可以在 Kubernetes 之上構(gòu)建需要的持續(xù)集成 (CI) 工作流阱扬。
- 允許用戶(hù)選擇自己的日志泣懊、監(jiān)控和告警系統(tǒng)。
- 不提供應(yīng)用程序配置語(yǔ)言或系統(tǒng) (如 jsonnet)麻惶。
- 不提供機(jī)器配置馍刮、維護(hù)、管理或自愈系統(tǒng)窃蹋。
另外卡啰,已經(jīng)有很多 PaaS 系統(tǒng)運(yùn)行在 Kubernetes 之上,如 Openshift, Deis 和 Eldarion 等脐彩。 您也可以構(gòu)建自己的 PaaS 系統(tǒng)碎乃,或者只使用 Kubernetes 管理您的容器應(yīng)用。
當(dāng)然了惠奸,Kubernetes 不僅僅是一個(gè) “編排系統(tǒng)”,它消除了編排的需要恰梢。Kubernetes 通過(guò)聲明式的 API 和一系列獨(dú)立佛南、可組合的控制器保證了應(yīng)用總是在期望的狀態(tài),而用戶(hù)并不需要關(guān)心中間狀態(tài)是如何轉(zhuǎn)換的嵌言。這使得整個(gè)系統(tǒng)更容易使用嗅回,而且更強(qiáng)大、更可靠摧茴、更具彈性和可擴(kuò)展性绵载。
核心組件
Kubernetes 主要由以下幾個(gè)核心組件組成:
- etcd 保存了整個(gè)集群的狀態(tài);
- apiserver 提供了資源操作的唯一入口苛白,并提供認(rèn)證娃豹、授權(quán)、訪(fǎng)問(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ī)器上蓬抄;
- kubelet 負(fù)責(zé)維護(hù)容器的生命周期,同時(shí)也負(fù)責(zé) Volume(CVI)和網(wǎng)絡(luò)(CNI)的管理夯到;
- Container runtime 負(fù)責(zé)鏡像管理以及 Pod 和容器的真正運(yùn)行(CRI)嚷缭;
- kube-proxy 負(fù)責(zé)為 Service 提供 cluster 內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡
kubernetes版本
Kubernetes 的穩(wěn)定版本在發(fā)布后會(huì)繼續(xù)支持 9 個(gè)月。