kubernetes 是什么
這一頁是Kubernetes的概述。Kubernetes是一個(gè)可移植的锨能、可擴(kuò)展的丑罪、開源的平臺(tái),用于管理容器化的工作負(fù)載和服務(wù)杰扫,它促進(jìn)了聲明式配置和自動(dòng)化队寇。它有一個(gè)龐大的、快速增長的生態(tài)系統(tǒng)章姓。
回顧歷史
讓我們回顧一下Kubernetes為什么如此有用佳遣。
傳統(tǒng)部署時(shí)代
早期凡伊,組織機(jī)構(gòu)在物理服務(wù)器上運(yùn)行應(yīng)用程序零渐,沒有辦法為物理服務(wù)器中的應(yīng)用程序定義資源邊界,這導(dǎo)致了資源分配問題系忙。例如诵盼,如果在一個(gè)物理服務(wù)器上運(yùn)行多個(gè)應(yīng)用程序,那么在某些實(shí)例中,一個(gè)應(yīng)用程序可能會(huì)占用大部分資源风宁,從而導(dǎo)致其他應(yīng)用程序的性能不佳洁墙。對(duì)此的解決方案是在不同的物理服務(wù)器上運(yùn)行每個(gè)應(yīng)用程序。但是戒财,由于資源沒有得到充分利用热监,并且對(duì)于組織來說,維護(hù)許多物理服務(wù)器是昂貴的饮寞。
虛擬化部署時(shí)代
虛擬化作為一種解決方案被引入孝扛。它允許您在單個(gè)物理服務(wù)器的CPU上運(yùn)行多個(gè)虛擬機(jī)(vm)。虛擬化允許應(yīng)用程序在虛擬機(jī)之間進(jìn)行隔離幽崩,并提供一定級(jí)別的安全性疗琉,因?yàn)橐粋€(gè)應(yīng)用程序的信息不能被另一個(gè)應(yīng)用程序自由訪問。
虛擬化允許更好地利用物理服務(wù)器中的資源歉铝,并允許更好的可伸縮性,因?yàn)榭梢暂p松地添加或更新應(yīng)用程序凑耻,降低硬件成本等太示。通過虛擬化,您可以將一組物理資源表示為一次性虛擬機(jī)集群香浩。
每個(gè)VM都是一個(gè)完整的機(jī)器类缤,運(yùn)行虛擬化硬件之上的所有組件,包括自己的操作系統(tǒng)邻吭。
容器部署時(shí)代
容器類似于虛擬機(jī)餐弱,但它們放寬了隔離屬性,以便在應(yīng)用程序之間共享操作系統(tǒng)囱晴。因此膏蚓,容器被認(rèn)為是輕量級(jí)的。與VM類似畸写,容器有自己的文件系統(tǒng)驮瞧、CPU共享、內(nèi)存和進(jìn)程空間等枯芬。由于它們與底層基礎(chǔ)設(shè)施解耦论笔,它們可以在云和操作系統(tǒng)發(fā)行版之間移植。
container之所以受歡迎千所,是因?yàn)樗鼈兲峁┝祟~外的好處狂魔,比如:
- 敏捷的應(yīng)用程序創(chuàng)建和部署:與使用VM映像相比,容器映像創(chuàng)建更加容易和高效淫痰。
- 持續(xù)開發(fā)最楷、集成和部署:提供可靠和頻繁的容器映像構(gòu)建和部署,并提供快速和高效的回滾(由于映像不變性)。
- 開發(fā)和運(yùn)維分離:在構(gòu)建或發(fā)布時(shí)而不是部署時(shí)創(chuàng)建應(yīng)用程序容器映像管嬉,從而將應(yīng)用程序與基礎(chǔ)設(shè)施分離皂林。
- 可觀測性不僅顯示操作系統(tǒng)級(jí)的信息和度量,而且還顯示應(yīng)用程序運(yùn)行狀況和其他信號(hào)蚯撩。
- 跨開發(fā)础倍、測試和生產(chǎn)的環(huán)境一致性:在筆記本電腦上運(yùn)行與在云中運(yùn)行相同。
- 云和操作系統(tǒng)發(fā)行可移植性:可以運(yùn)行在Ubuntu胎挎、RHEL沟启、CoreOS、on-premises犹菇、主要公共云和任何其他地方德迹。
- 以應(yīng)用程序?yàn)橹行牡墓芾?將抽象級(jí)別從在虛擬硬件上運(yùn)行操作系統(tǒng)提高到在使用邏輯資源的操作系統(tǒng)上運(yùn)行應(yīng)用程序。
- 松散耦合的揭芍、分布式的胳搞、彈性的、自由的微服務(wù):應(yīng)用程序被分解成更小的称杨、獨(dú)立的部分肌毅,可以動(dòng)態(tài)地部署和管理,而不是運(yùn)行在一個(gè)大型單一用途機(jī)器上的單片堆棧姑原。
- 資源隔離:可預(yù)測的應(yīng)用程序性能悬而。
- 資源利用:高效密度。
你為什么需要Kubernetes锭汛,它能做什么
容器是打包和運(yùn)行應(yīng)用程序的好方法笨奠。在生產(chǎn)環(huán)境中,您需要管理運(yùn)行應(yīng)用程序的容器唤殴,并確保沒有停機(jī)般婆。例如,如果一個(gè)容器宕機(jī)朵逝,則需要啟動(dòng)另一個(gè)容器腺兴。如果這種行為由一個(gè)系統(tǒng)來處理,不是會(huì)更容易嗎廉侧?
這就是Kubernetes拯救我們的方式!Kubernetes為您提供了一個(gè)可彈性運(yùn)行分布式系統(tǒng)的框架页响。它負(fù)責(zé)應(yīng)用程序的擴(kuò)展和故障轉(zhuǎn)移,提供部署模式等段誊。例如闰蚕,Kubernetes可以輕松地為您的系統(tǒng)管理金絲雀部署。
Kubernetes提供如下功能:
-
Service discovery and load balancing
Kubernetes可以使用DNS名稱或自己的IP地址公開容器连舍。當(dāng)一個(gè)容器的流量比較大時(shí)没陡,Kubernetes能夠?qū)W(wǎng)絡(luò)流量進(jìn)行負(fù)載均衡和分配,從而保證部署的穩(wěn)定性。
-
Storage orchestration
Kubernetes允許您自動(dòng)掛載您所選擇的存儲(chǔ)系統(tǒng)盼玄,比如本地存儲(chǔ)贴彼、公共云提供商等等。
-
Automated rollouts and rollbacks
您可以使用Kubernetes描述已部署容器所需的狀態(tài)埃儿,它可以以受控的速率將實(shí)際狀態(tài)更改為所需狀態(tài)器仗。例如,您可以自動(dòng)化Kubernetes為您的部署創(chuàng)建新的容器童番,刪除現(xiàn)有的容器精钮,并將它們的所有資源采用到新容器中。
-
Automatic bin packing
您為Kubernetes提供了一個(gè)節(jié)點(diǎn)集群剃斧,它可以使用這些節(jié)點(diǎn)來運(yùn)行容器化的任務(wù)轨香。告訴Kubernetes每個(gè)容器需要多少CPU和內(nèi)存(RAM)。Kubernetes可以將容器放置到您的節(jié)點(diǎn)上幼东,以充分利用您的資源臂容。
-
Self-healing 自愈
Kubernetes重啟失敗的容器,替換容器根蟹,終止不響應(yīng)用戶定義的健康檢查的容器策橘,并且在它們準(zhǔn)備好服務(wù)之前不會(huì)將它們通告給客戶端。
-
Secret and configuration management
Kubernetes允許您存儲(chǔ)和管理敏感信息娜亿,如密碼、OAuth令牌和SSH密鑰蚌堵。您可以部署和更新秘密和應(yīng)用程序配置买决,而不需要重新構(gòu)建容器映像,也不需要在堆棧配置中暴露秘密吼畏。
kubernetes不能做什么
Kubernetes不是一個(gè)傳統(tǒng)的督赤、包羅萬象的PaaS(平臺(tái)即服務(wù))系統(tǒng)。由于Kubernetes是在容器級(jí)而不是在硬件級(jí)操作的泻蚊,所以它提供了一些PaaS產(chǎn)品普遍適用的特性躲舌,比如部署、伸縮性雄、負(fù)載平衡没卸,并允許用戶集成他們的日志、監(jiān)視和警報(bào)解決方案秒旋。然而约计,Kubernetes不是單片的,這些默認(rèn)的解決方案是可選的和可插拔的迁筛。Kubernetes為構(gòu)建開發(fā)人員平臺(tái)提供了構(gòu)建模塊煤蚌,但在重要的地方保留了用戶的選擇和靈活性。
Kubernetes:
- 不限制支持的應(yīng)用程序類型。Kubernetes的目標(biāo)是支持各種各樣的工作負(fù)載尉桩,包括無狀態(tài)筒占、有狀態(tài)和數(shù)據(jù)處理工作負(fù)載。如果應(yīng)用程序可以在容器中運(yùn)行蜘犁,那么它在Kubernetes上應(yīng)該運(yùn)行得很好翰苫。
- 不會(huì)部署源代碼,也不會(huì)構(gòu)建應(yīng)用程序沽瘦。持續(xù)集成革骨、交付和部署(CICD)工作流由組織文化、首選項(xiàng)以及技術(shù)需求決定析恋。
- 不提供應(yīng)用級(jí)服務(wù)良哲,如中間件(如消息總線)、數(shù)據(jù)處理框架(如Spark)助隧、數(shù)據(jù)庫(如MySQL)筑凫、緩存、集群存儲(chǔ)系統(tǒng)(如Ceph)等內(nèi)置服務(wù)并村。這些組件可以在Kubernetes上運(yùn)行巍实,或者可以通過可移植的機(jī)制(如Open Service Broker)被運(yùn)行在Kubernetes上的應(yīng)用程序訪問。
- 不指定日志記錄哩牍、監(jiān)視或警報(bào)解決方案棚潦。它提供了一些集成作為概念證明,以及收集和導(dǎo)出指標(biāo)的機(jī)制膝昆。
- 不提供或強(qiáng)制要求配置語言或系統(tǒng)(例如丸边,Jsonnet)。它提供了一個(gè)聲明性API荚孵,可以被任意形式的聲明性規(guī)范作為目標(biāo)妹窖。
- 不提供或采用任何全面的機(jī)器配置、維護(hù)收叶、管理或自修復(fù)系統(tǒng)骄呼。
- 此外,Kubernetes不僅僅是一個(gè)編配系統(tǒng)判没。事實(shí)上蜓萄,它消除了對(duì)編配的需要。編排的技術(shù)定義是一個(gè)已定義工作流的執(zhí)行:首先執(zhí)行A澄峰,然后執(zhí)行B绕德,然后執(zhí)行C。相反摊阀,Kubernetes由一組獨(dú)立的耻蛇、可組合的控制過程組成踪蹬,這些過程不斷地將當(dāng)前狀態(tài)推向所提供的期望狀態(tài)。從A到C的方式并不重要臣咖,也不需要集中控制跃捣。這將產(chǎn)生一個(gè)更易于使用、更強(qiáng)大夺蛇、更健壯疚漆、更有彈性和可擴(kuò)展的系統(tǒng)。