容器是打包和運(yùn)行應(yīng)用程序的好方式。在生產(chǎn)環(huán)境中, 你需要管理運(yùn)行著應(yīng)用程序的容器,并確保服務(wù)不會(huì)下線。 例如,如果一個(gè)容器發(fā)生故障,則你需要啟動(dòng)另一個(gè)容器。 如果此行為交由給系統(tǒng)處理,是不是會(huì)更容易一些?
這就是 Kubernetes 要來(lái)做的事情! Kubernetes 為你提供了一個(gè)可彈性運(yùn)行分布式系統(tǒng)的框架。 Kubernetes 會(huì)滿足你的擴(kuò)展要求、故障轉(zhuǎn)移你的應(yīng)用、提供部署模式等。 例如,Kubernetes 可以輕松管理系統(tǒng)的 Canary 部署。
Kubernetes 為你提供:
- 服務(wù)發(fā)現(xiàn)和負(fù)載均衡
Kubernetes 可以使用 DNS 名稱或自己的 IP 地址來(lái)曝露容器。 如果進(jìn)入容器的流量很大, Kubernetes 可以負(fù)載均衡并分配網(wǎng)絡(luò)流量,從而使部署穩(wěn)定。 - 存儲(chǔ)編排
Kubernetes 允許你自動(dòng)掛載你選擇的存儲(chǔ)系統(tǒng),例如本地存儲(chǔ)、公共云提供商等。 - 自動(dòng)部署和回滾
你可以使用 Kubernetes 描述已部署容器的所需狀態(tài), 它可以以受控的速率將實(shí)際狀態(tài)更改為期望狀態(tài)。 例如,你可以自動(dòng)化 Kubernetes 來(lái)為你的部署創(chuàng)建新容器, 刪除現(xiàn)有容器并將它們的所有資源用于新容器。 - 自動(dòng)完成裝箱計(jì)算
你為 Kubernetes 提供許多節(jié)點(diǎn)組成的集群,在這個(gè)集群上運(yùn)行容器化的任務(wù)。 你告訴 Kubernetes 每個(gè)容器需要多少 CPU 和內(nèi)存 (RAM)。 Kubernetes 可以將這些容器按實(shí)際情況調(diào)度到你的節(jié)點(diǎn)上,以最佳方式利用你的資源。 - 自我修復(fù)
Kubernetes 將重新啟動(dòng)失敗的容器、替換容器、殺死不響應(yīng)用戶定義的運(yùn)行狀況檢查的容器, 并且在準(zhǔn)備好服務(wù)之前不將其通告給客戶端。 - 密鑰與配置管理
Kubernetes 允許你存儲(chǔ)和管理敏感信息,例如密碼、OAuth 令牌和 ssh 密鑰。 你可以在不重建容器鏡像的情況下部署和更新密鑰和應(yīng)用程序配置,也無(wú)需在堆棧配置中暴露密鑰。
Kubernetes 不是傳統(tǒng)的、包羅萬(wàn)象的 PaaS(平臺(tái)即服務(wù))系統(tǒng)。 由于 Kubernetes 是在容器級(jí)別運(yùn)行,而非在硬件級(jí)別,它提供了 PaaS 產(chǎn)品共有的一些普遍適用的功能, 例如部署、擴(kuò)展、負(fù)載均衡,允許用戶集成他們的日志記錄、監(jiān)控和警報(bào)方案。 但是,Kubernetes 不是單體式(monolithic)系統(tǒng),那些默認(rèn)解決方案都是可選、可插拔的。 Kubernetes 為構(gòu)建開(kāi)發(fā)人員平臺(tái)提供了基礎(chǔ),但是在重要的地方保留了用戶選擇權(quán),能有更高的靈活性。
Kubernetes:
- 不限制支持的應(yīng)用程序類型。 Kubernetes 旨在支持極其多種多樣的工作負(fù)載,包括無(wú)狀態(tài)、有狀態(tài)和數(shù)據(jù)處理工作負(fù)載。 如果應(yīng)用程序可以在容器中運(yùn)行,那么它應(yīng)該可以在 Kubernetes 上很好地運(yùn)行。
- 不部署源代碼,也不構(gòu)建你的應(yīng)用程序。 持續(xù)集成(CI)、交付和部署(CI/CD)工作流取決于組織的文化和偏好以及技術(shù)要求。
- 不提供應(yīng)用程序級(jí)別的服務(wù)作為內(nèi)置服務(wù),例如中間件(例如消息中間件)、 數(shù)據(jù)處理框架(例如 Spark)、數(shù)據(jù)庫(kù)(例如 MySQL)、緩存、集群存儲(chǔ)系統(tǒng) (例如 Ceph)。這樣的組件可以在 Kubernetes 上運(yùn)行,并且/或者可以由運(yùn)行在 Kubernetes 上的應(yīng)用程序通過(guò)可移植機(jī)制 (例如開(kāi)放服務(wù)代理)來(lái)訪問(wèn)。
- 不是日志記錄、監(jiān)視或警報(bào)的解決方案。 它集成了一些功能作為概念證明,并提供了收集和導(dǎo)出指標(biāo)的機(jī)制。
- 不提供也不要求配置用的語(yǔ)言、系統(tǒng)(例如 jsonnet),它提供了聲明性 API, 該聲明性 API 可以由任意形式的聲明性規(guī)范所構(gòu)成。
- 不提供也不采用任何全面的機(jī)器配置、維護(hù)、管理或自我修復(fù)系統(tǒng)。
- 此外,Kubernetes 不僅僅是一個(gè)編排系統(tǒng),實(shí)際上它消除了編排的需要。 編排的技術(shù)定義是執(zhí)行已定義的工作流程:首先執(zhí)行 A,然后執(zhí)行 B,再執(zhí)行 C。 而 Kubernetes 包含了一組獨(dú)立可組合的控制過(guò)程,可以連續(xù)地將當(dāng)前狀態(tài)驅(qū)動(dòng)到所提供的預(yù)期狀態(tài)。 你不需要在乎如何從 A 移動(dòng)到 C,也不需要集中控制,這使得系統(tǒng)更易于使用 且功能更強(qiáng)大、系統(tǒng)更健壯,更為彈性和可擴(kuò)展。