Kubernetes 是一個(gè)可移植的贴唇、可擴(kuò)展的開源平臺鸣皂,用于管理容器化的工作負(fù)載和服務(wù)瞪讼,可促進(jìn)聲明式配置和自動化。Kubernetes 擁有一個(gè)龐大且快速增長的生態(tài)系統(tǒng)结笨。Kubernetes 的服務(wù)包晰、支持和工具廣泛可用。
名稱 Kubernetes 源于希臘語炕吸,意為 “舵手” 或 “飛行員”伐憾。Google 在 2014 年開源了 Kubernetes 項(xiàng)目。Kubernetes 建立在 Google 在大規(guī)模運(yùn)行生產(chǎn)工作負(fù)載方面擁有十幾年的經(jīng)驗(yàn)的基礎(chǔ)上赫模,結(jié)合了社區(qū)中最好的想法和實(shí)踐树肃。
言歸正傳
讓我們回顧一下為什么 Kubernetes 如此有用。
傳統(tǒng)部署時(shí)代: 早期瀑罗,組織在物理服務(wù)器上運(yùn)行應(yīng)用程序胸嘴。無法為物理服務(wù)器中的應(yīng)用程序定義資源邊界,這會導(dǎo)致資源分配問題斩祭。例如劣像,如果在物理服務(wù)器上運(yùn)行多個(gè)應(yīng)用程序,則可能會出現(xiàn)一個(gè)應(yīng)用程序占用大部分資源的情況摧玫,結(jié)果可能導(dǎo)致其他應(yīng)用程序的性能下降耳奕。一種解決方案是在不同的物理服務(wù)器上運(yùn)行每個(gè)應(yīng)用程序,但是由于資源利用不足而無法擴(kuò)展,并且組織維護(hù)許多物理服務(wù)器的成本很高屋群。
虛擬化部署時(shí)代: 作為解決方案闸婴,引入了虛擬化功能,它允許您在單個(gè)物理服務(wù)器的 CPU 上運(yùn)行多個(gè)虛擬機(jī)(VM)芍躏。虛擬化功能允許應(yīng)用程序在 VM 之間隔離邪乍,并提供安全級別,因?yàn)橐粋€(gè)應(yīng)用程序的信息不能被另一應(yīng)用程序自由地訪問对竣。
因?yàn)樘摂M化可以輕松地添加或更新應(yīng)用程序庇楞、降低硬件成本等等,所以虛擬化可以更好地利用物理服務(wù)器中的資源否纬,并可以實(shí)現(xiàn)更好的可伸縮性姐刁。
每個(gè) VM 是一臺完整的計(jì)算機(jī),在虛擬化硬件之上運(yùn)行所有組件烦味,包括其自己的操作系統(tǒng)。
容器部署時(shí)代: 容器類似于 VM壁拉,但是它們具有輕量級的隔離屬性谬俄,可以在應(yīng)用程序之間共享操作系統(tǒng)(OS)。因此弃理,容器被認(rèn)為是輕量級的溃论。容器與 VM 類似,具有自己的文件系統(tǒng)痘昌、CPU钥勋、內(nèi)存、進(jìn)程空間等辆苔。由于它們與基礎(chǔ)架構(gòu)分離算灸,因此可以跨云和 OS 分發(fā)進(jìn)行移植。
容器因具有許多優(yōu)勢而變得流行起來驻啤。下面列出了容器的一些好處:
- 敏捷應(yīng)用程序的創(chuàng)建和部署:與使用 VM 鏡像相比菲驴,提高了容器鏡像創(chuàng)建的簡便性和效率。
- 持續(xù)開發(fā)骑冗、集成和部署:通過快速簡單的回滾(由于鏡像不可變性)赊瞬,提供可靠且頻繁的容器鏡像構(gòu)建和部署。
- 關(guān)注開發(fā)與運(yùn)維的分離:在構(gòu)建/發(fā)布時(shí)而不是在部署時(shí)創(chuàng)建應(yīng)用程序容器鏡像贼涩,從而將應(yīng)用程序與基礎(chǔ)架構(gòu)分離巧涧。
- 可觀察性不僅可以顯示操作系統(tǒng)級別的信息和指標(biāo),還可以顯示應(yīng)用程序的運(yùn)行狀況和其他指標(biāo)信號遥倦。
- 跨開發(fā)谤绳、測試和生產(chǎn)的環(huán)境一致性:在便攜式計(jì)算機(jī)上與在云中相同地運(yùn)行。
- 云和操作系統(tǒng)分發(fā)的可移植性:可在 Ubuntu、RHEL闷供、CoreOS烟央、本地、Google Kubernetes Engine 和其他任何地方運(yùn)行歪脏。
- 以應(yīng)用程序?yàn)橹行牡墓芾恚禾岣叱橄蠹墑e疑俭,從在虛擬硬件上運(yùn)行 OS 到使用邏輯資源在 OS 上運(yùn)行應(yīng)用程序。
- 松散耦合婿失、分布式钞艇、彈性、解放的微服務(wù):應(yīng)用程序被分解成較小的獨(dú)立部分豪硅,并且可以動態(tài)部署和管理 - 而不是在一臺大型單機(jī)上整體運(yùn)行哩照。
- 資源隔離:可預(yù)測的應(yīng)用程序性能。
- 資源利用:高效率和高密度懒浮。
為什么需要 Kubernetes飘弧,它能做什么?
容器是打包和運(yùn)行應(yīng)用程序的好方式。在生產(chǎn)環(huán)境中砚著,您需要管理運(yùn)行應(yīng)用程序的容器次伶,并確保不會停機(jī)。例如稽穆,如果一個(gè)容器發(fā)生故障冠王,則需要啟動另一個(gè)容器。如果系統(tǒng)處理此行為舌镶,會不會更容易柱彻?
這就是 Kubernetes 的救援方法!Kubernetes 為您提供了一個(gè)可彈性運(yùn)行分布式系統(tǒng)的框架餐胀。Kubernetes 會滿足您的擴(kuò)展要求哟楷、故障轉(zhuǎn)移、部署模式等否灾。例如吓蘑,Kubernetes 可以輕松管理系統(tǒng)的 Canary 部署。
Kubernetes 為您提供:
- 服務(wù)發(fā)現(xiàn)和負(fù)載均衡
Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器坟冲,如果到容器的流量很大磨镶,Kubernetes 可以負(fù)載均衡并分配網(wǎng)絡(luò)流量,從而使部署穩(wěn)定健提。 - 存儲編排
Kubernetes 允許您自動掛載您選擇的存儲系統(tǒng)琳猫,例如本地存儲、公共云提供商等私痹。 - 自動部署和回滾
您可以使用 Kubernetes 描述已部署容器的所需狀態(tài)脐嫂,它可以以受控的速率將實(shí)際狀態(tài)更改為所需狀態(tài)统刮。例如,您可以自動化 Kubernetes 來為您的部署創(chuàng)建新容器账千,刪除現(xiàn)有容器并將它們的所有資源用于新容器侥蒙。 - 自動二進(jìn)制打包
Kubernetes 允許您指定每個(gè)容器所需 CPU 和內(nèi)存(RAM)。當(dāng)容器指定了資源請求時(shí)匀奏,Kubernetes 可以做出更好的決策來管理容器的資源鞭衩。 - 自我修復(fù)
Kubernetes 重新啟動失敗的容器、替換容器娃善、殺死不響應(yīng)用戶定義的運(yùn)行狀況檢查的容器论衍,并且在準(zhǔn)備好服務(wù)之前不將其通告給客戶端。 - 密鑰與配置管理
Kubernetes 允許您存儲和管理敏感信息聚磺,例如密碼坯台、OAuth 令牌和 ssh 密鑰。您可以在不重建容器鏡像的情況下部署和更新密鑰和應(yīng)用程序配置瘫寝,也無需在堆棧配置中暴露密鑰蜒蕾。
Kubernetes 不是什么
Kubernetes 不是傳統(tǒng)的、包羅萬象的 PaaS(平臺即服務(wù))系統(tǒng)焕阿。由于 Kubernetes 在容器級別而不是在硬件級別運(yùn)行滥搭,因此它提供了 PaaS 產(chǎn)品共有的一些普遍適用的功能,例如部署捣鲸、擴(kuò)展、負(fù)載均衡闽坡、日志記錄和監(jiān)視栽惶。但是,Kubernetes 不是單一的疾嗅,默認(rèn)解決方案是可選和可插拔的外厂。Kubernetes 提供了構(gòu)建開發(fā)人員平臺的基礎(chǔ),但是在重要的地方保留了用戶的選擇和靈活性代承。
Kubernetes:
Kubernetes 不限制支持的應(yīng)用程序類型汁蝶。Kubernetes 旨在支持極其多種多樣的工作負(fù)載,包括無狀態(tài)论悴、有狀態(tài)和數(shù)據(jù)處理工作負(fù)載掖棉。如果應(yīng)用程序可以在容器中運(yùn)行,那么它應(yīng)該可以在 Kubernetes 上很好地運(yùn)行膀估。
Kubernetes 不部署源代碼幔亥,也不構(gòu)建您的應(yīng)用程序。持續(xù)集成(CI)察纯、交付和部署(CI/CD)工作流取決于組織的文化和偏好以及技術(shù)要求帕棉。
Kubernetes 不提供應(yīng)用程序級別的服務(wù)作為內(nèi)置服務(wù)针肥,例如中間件(例如,消息中間件)香伴、數(shù)據(jù)處理框架(例如慰枕,Spark)、數(shù)據(jù)庫(例如即纲,mysql)具帮、緩存、集群存儲系統(tǒng)(例如崇裁,Ceph)匕坯。這樣的組件可以在 Kubernetes 上運(yùn)行,并且/或者可以由運(yùn)行在 Kubernetes 上的應(yīng)用程序通過可移植機(jī)制(例如拔稳,開放服務(wù)代理)來訪問葛峻。
Kubernetes 不指定日志記錄、監(jiān)視或警報(bào)解決方案巴比。它提供了一些集成作為概念證明术奖,并提供了收集和導(dǎo)出指標(biāo)的機(jī)制。
Kubernetes 不提供或不要求配置語言/系統(tǒng)(例如 jsonnet)轻绞,它提供了聲明性 API采记,該聲明性 API 可以由任意形式的聲明性規(guī)范所構(gòu)成。
Kubernetes 不提供也不采用任何全面的機(jī)器配置政勃、維護(hù)唧龄、管理或自我修復(fù)系統(tǒng)。
此外奸远,Kubernetes 不僅僅是一個(gè)編排系統(tǒng)既棺,實(shí)際上它消除了編排的需要。編排的技術(shù)定義是執(zhí)行已定義的工作流程:首先執(zhí)行 A懒叛,然后執(zhí)行 B丸冕,再執(zhí)行 C。相比之下薛窥,Kubernetes 包含一組獨(dú)立的胖烛、可組合的控制過程,這些過程連續(xù)地將當(dāng)前狀態(tài)驅(qū)動到所提供的所需狀態(tài)诅迷。從 A 到 C 的方式無關(guān)緊要佩番,也不需要集中控制,這使得系統(tǒng)更易于使用且功能更強(qiáng)大罢杉、健壯答捕、彈性和可擴(kuò)展性。