Kubernetes 是一個開源平臺,用于自動進(jìn)行容器編排,即容器化應(yīng)用程序的部署、擴(kuò)展和管理。
什么是 KUBERNETES?
Kubernetes 提供了一個框架,用于部署、管理、擴(kuò)展和切換分布式容器,這些容器是隨依賴項(xiàng)和配置打包的微服務(wù)。
它建立在 Google 十多年的容器管理系統(tǒng)開發(fā)經(jīng)驗(yàn)基礎(chǔ)上,并結(jié)合了來自社區(qū)的出色想法、模式和實(shí)踐。
為何選擇 KUBERNETES?
軟件容器隨著 2013 年出現(xiàn)的Docker得到了普及,而現(xiàn)在,Moby也發(fā)揮了這一作用。容器鏡像會打包整個運(yùn)行時(shí)環(huán)境,包括應(yīng)用程序,以及執(zhí)行應(yīng)用程序所需的所有依賴項(xiàng)、庫和其他二進(jìn)制文件以及配置文件。與虛機(jī)相比,容器具有相似的資源和隔離優(yōu)勢,但更為輕巧,因?yàn)槿萜鲗?a target="_blank">操作系統(tǒng)虛擬化而非采用硬件。容器便于移植,占用空間以及使用的系統(tǒng)資源更少,且?guī)酌腌妰?nèi)即可加快運(yùn)行。容器還可提高開發(fā)者的效率。DevOps 團(tuán)隊(duì)無需再等待操作系統(tǒng)來配置計(jì)算機(jī),他們可以快速將應(yīng)用程序打包到容器中并部署。
得益于這些優(yōu)勢,容器立即受到開發(fā)者的青睞,并迅速成為云應(yīng)用程序部署的熱門選擇。容器的普及意味著一些組織很快會運(yùn)行成千上萬個容器,因此需要實(shí)現(xiàn)管理自動化。Kubernetes 簡化了容器管理,因此大受歡迎,并通過進(jìn)一步支持微服務(wù)架構(gòu)使容器成為主流,該架構(gòu)促進(jìn)了云原生應(yīng)用程序的快速交付和可擴(kuò)展編排。
云原生計(jì)算基金會 (Cloud Native Computing Foundation)成立于 2015 年,是 Linux 基金會的一個項(xiàng)目,旨在推動云原生技術(shù)的采用。其中包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施以及聲明性 API,并圍繞一套通用標(biāo)準(zhǔn)使開發(fā)者保持一致。CNCF 為許多增長快速的開源項(xiàng)目(包括 Kubernetes)提供了供應(yīng)商中性平臺。該團(tuán)隊(duì)的工作有助于防止 Kubernetes 代碼庫出現(xiàn)分叉。因此,各大計(jì)算平臺和云提供商現(xiàn)在都支持相同的 Kubernetes 代碼庫。雖然已經(jīng)出現(xiàn)了 Kubernetes 的品牌版本(如Red HatOpenShift或 Amazon Elastic Kubernetes Service),但其底層代碼是相同的。
KUBERNETES 的工作原理是什么?
Kubernetes 引入了一個分組概念(稱為“POD”),允許多個容器在主機(jī)上運(yùn)行,并共享資源,而不會發(fā)生沖突。POD 可用于定義共享服務(wù)(如目錄、IP 地址或存儲),并公開至 POD 中的所有容器。這使得應(yīng)用程序內(nèi)的服務(wù)能夠容器化并一起運(yùn)行,因?yàn)槊總€容器都與主應(yīng)用程序緊密相連。
節(jié)點(diǎn)代理稱為 kubelet,用于管理 POD、容器和圖像。Kubernetes 控制器管理 POD 集群,并確保分配充足資源,以實(shí)現(xiàn)所需的可擴(kuò)展性和性能級別。
Kubernetes 提供各種有用服務(wù),特別是在集群環(huán)境中。它實(shí)現(xiàn)了服務(wù)發(fā)現(xiàn)和負(fù)載均衡的自動化,自動安裝存儲系統(tǒng),并自動推廣和回退,以達(dá)到指定的預(yù)期狀態(tài)。它還會監(jiān)控容器運(yùn)行狀況、重啟出現(xiàn)故障的容器,并啟用密碼和密鑰等敏感信息以安全存儲在容器中。
這簡化了機(jī)器和服務(wù)管理,使單個管理員能夠管理同時(shí)運(yùn)行的數(shù)千個容器。Kubernetes 還允許跨現(xiàn)場部署到公共或私有云,以及介于兩者之間的混合部署的編制。
Kubernetes 因其作為一個支持混合云計(jì)算平臺的承諾引起了很多關(guān)注。由于每個物理和虛擬環(huán)境中的代碼庫都相同,因此從理論上講,容器化應(yīng)用程序可以在支持 Kubernetes 的任何平臺上運(yùn)行。業(yè)界仍在持續(xù)討論混合架構(gòu)的優(yōu)點(diǎn)。支持者表示,這種方法可以避免出現(xiàn)鎖定問題,而反對者則認(rèn)為,在可移植性方面做出的妥協(xié)在于,開發(fā)者只能使用一系列有限的開源技術(shù),無法利用品牌云和本地平臺上的全部服務(wù)功能。
KUBERNETES 用例
如上所述,混合和多云部署是 Kubernetes 的一個理想用例,因?yàn)閼?yīng)用程序無需與底層平臺綁定。Kubernetes 負(fù)責(zé)處理資源分配并監(jiān)控容器運(yùn)行狀況,以確保根據(jù)需要提供服務(wù)。
Kubernetes 還非常適合可用性至關(guān)重要的環(huán)境,因?yàn)榫幣牌骺梢缘钟收蠈?shí)例、端口沖突和資源瓶頸等問題。
容器是一種用于無服務(wù)器計(jì)算的基礎(chǔ)技術(shù),在這種計(jì)算中,應(yīng)用程序由活躍的服務(wù)構(gòu)建,這些服務(wù)僅針對該應(yīng)用程序的需要執(zhí)行函數(shù)。無服務(wù)器計(jì)算有點(diǎn)用詞不當(dāng),因?yàn)槿萜鞅仨氃诜?wù)器上運(yùn)行。但目標(biāo)是將虛機(jī)封裝到容器中,以盡可能減少調(diào)配虛機(jī)所需的成本和時(shí)間,這些容器幾毫秒內(nèi)即可啟動,由 Kubernetes 管理。
Kubernetes 還有一個稱為命名空間的功能,指一個集群內(nèi)的虛擬集群。允許運(yùn)營和開發(fā)團(tuán)隊(duì)共享同一組物理機(jī),并訪問相同服務(wù),而不會造成沖突。
KUBERNETES 的重要意義
數(shù)據(jù)科學(xué)家
數(shù)據(jù)科學(xué)的挑戰(zhàn)之一是在可復(fù)制的環(huán)境中創(chuàng)建可重復(fù)的實(shí)驗(yàn),并能夠跟蹤和監(jiān)控生產(chǎn)中的指標(biāo)。容器能夠創(chuàng)建具有多個協(xié)調(diào)階段的可重復(fù)流程,這些流程以可復(fù)制的方式協(xié)同工作,用于處理、特征提取和測試。
Kubernetes 中的聲明性配置描述了服務(wù)之間的關(guān)系。微服務(wù)架構(gòu)使調(diào)試變得更容易,并改善了數(shù)據(jù)科學(xué)團(tuán)隊(duì)成員之間的協(xié)作。數(shù)據(jù)科學(xué)家還可以利用BinderHub等擴(kuò)展程序,從存儲庫中構(gòu)建和注冊容器鏡像,并將它們發(fā)布為其他用戶可交互使用的共享筆記本。
Kubeflow等擴(kuò)展程序簡化了在 Kubernetes 中設(shè)置和維護(hù)機(jī)器學(xué)習(xí)工作流程和管線的過程。編排器具有可移植性優(yōu)勢,讓數(shù)據(jù)科學(xué)家可以在筆記本電腦上進(jìn)行開發(fā),并隨時(shí)隨地進(jìn)行部署。
Devops
數(shù)據(jù)工程師很難將機(jī)器學(xué)習(xí)模型投入生產(chǎn)。他們花時(shí)間編輯配置文件、分配服務(wù)器資源,還要擔(dān)心如何在不導(dǎo)致項(xiàng)目崩潰的情況下擴(kuò)展模型并整合 GPU。容器生態(tài)系統(tǒng)引入了許多工具,旨在簡化數(shù)據(jù)工程師的工作。
例如,Istio是一個可配置的開源服務(wù)網(wǎng)格層,可用于輕松創(chuàng)建一個具備自動化負(fù)載均衡、服務(wù)到服務(wù)身份驗(yàn)證以及監(jiān)控的已部署服務(wù)網(wǎng)絡(luò),且無需對服務(wù)代碼做任何更改。它可精細(xì)控制流量行為、豐富的路由規(guī)則、重試、故障轉(zhuǎn)移和故障注入,以及用于訪問控制、速率限制和配額的可插入策略層和配置 API。
Kubernetes 生態(tài)系統(tǒng)借助此類專用工具繼續(xù)發(fā)展,使服務(wù)器配置隱形,允許數(shù)據(jù)工程師可視化依賴項(xiàng),從而簡化配置和故障排除。
為何 KUBERNETES 在 GPU 上表現(xiàn)更出色
Kubernetes 包括對 GPU 的支持,這使得配置和使用 GPU 資源來加速數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等工作負(fù)載變得容易。設(shè)備插件允許 POD 訪問 GPU 等專用硬件功能,并作為可調(diào)度資源公開。
隨著 AI 應(yīng)用程序和服務(wù)的不斷增加以及公有云中 GPU 的全面發(fā)售,Kubernetes 需要具備 GPU 感知能力。NVIDIA 一直在穩(wěn)步構(gòu)建其軟件庫,以優(yōu)化在容器環(huán)境中使用的 GPU。例如,NVIDIA GPU 上的 Kubernetes支持多云 GPU 集群通過跨多節(jié)點(diǎn)集群 GPU 加速容器的自動化部署、維護(hù)、調(diào)度和操作實(shí)現(xiàn)無縫擴(kuò)展。
GPU 上的 Kubernetes NVIDIA 具有以下主要特性:
借助 NVIDIA 設(shè)備插件,在 Kubernetes 中啟用 GPU 支持
指定 GPU 屬性(例如 GPU 類型和內(nèi)存需求),以便在異構(gòu) GPU 群集中進(jìn)行部署
借助NVIDIA DCGM、Prometheus 和 Grafana 的集成 GPU 監(jiān)控堆棧,允許對 GPU 指標(biāo)和運(yùn)行狀況進(jìn)行可視化和監(jiān)控
支持多個基礎(chǔ)容器運(yùn)行時(shí),例如 Docker 和 CRI-O
NVIDIA DGX系統(tǒng)提供官方支持
NVIDIA EGX堆棧是一款可擴(kuò)展的原生云軟件堆棧,可實(shí)現(xiàn)由 Kubernetes 管理的容器化加速 AI 計(jì)算。借助 NVIDIA EGX 堆棧,組織可以在幾分鐘內(nèi)輕松部署經(jīng)過更新的 AI 容器。
但是,Kubernetes 并不是什么靈丹妙藥。它為資源發(fā)現(xiàn)和管理提供了良好的 API,但其并非簡化資源使用的全部解決方案。因此,NVIDIA 開發(fā)了 Triton,這是一個開源推理服務(wù)平臺,允許用戶在任何 GPU 或基于 CPU 的接口上部署 AI 訓(xùn)練模型。在 Kubernetes 環(huán)境中運(yùn)行 Triton,可以完全從軟件中提取出硬件。在這種情況下,Kubernetes 充當(dāng) Triton 運(yùn)行的基礎(chǔ)。Triton 負(fù)責(zé)提取節(jié)點(diǎn)內(nèi)的硬件,而 Kubernetes 負(fù)責(zé)編排集群,使其能夠更有效地向外擴(kuò)展。
GPU 硬件中的 KUBERNETES
除了軟件之外,NVIDIA 已采取措施定制其硬件,以用于虛擬化環(huán)境。不過,這并非 Kubernetes 所特有。隨著公司推出基于 Ampere的 A100 企業(yè)級 GPU 和 DGX A100 服務(wù)器,NVIDIA 還推出了多實(shí)例 GPU (MIG)。MIG 允許將單個 A100 GPU 分割為七個小 GPU,類似于將 CPU 分割成多個單獨(dú)核心。允許用戶使用 Kubernetes 等容器運(yùn)行時(shí)以更精確的粒度自動擴(kuò)展其應(yīng)用程序。
在 MIG 推出之前,GPU 加速 Kubernetes 集群中的每個節(jié)點(diǎn)都需要自己的專用 GPU。有了 MIG,單個 NVIDIA A100(DGX A100 中有 8 個)現(xiàn)在可以支持多達(dá) 7 個小節(jié)點(diǎn)。這使得應(yīng)用程序和資源可以實(shí)現(xiàn)更大規(guī)模的線性擴(kuò)展。
隨著 AI 服務(wù)成為 GPU 加速工作負(fù)載,而這正處于成功前的拐點(diǎn),GPU 將開始進(jìn)入 Kubernetes 的主流。隨著形勢發(fā)展,人們會把 GPU 加速視為一個快速或高效的按鈕,而不必考慮 GPU 開發(fā)或編程。
原文標(biāo)題:NVIDIA 大講堂 | 什么是 KUBERNETES?
文章出處:【微信公眾號:NVIDIA英偉達(dá)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
NVIDIA
+關(guān)注
關(guān)注
14文章
4978瀏覽量
102990 -
開源平臺
+關(guān)注
關(guān)注
0文章
8瀏覽量
6836 -
kubernetes
+關(guān)注
關(guān)注
0文章
224瀏覽量
8712
原文標(biāo)題:NVIDIA 大講堂 | 什么是 KUBERNETES?
文章出處:【微信號:NVIDIA_China,微信公眾號:NVIDIA英偉達(dá)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論