開(kāi)啟部署新時(shí)代之Kubernetes
前言
之前指北君給大家介紹過(guò) Docker的教程,接下來(lái)我們撬開(kāi) Kubernetes 的大門(mén)。
1.官網(wǎng)鎮(zhèn)樓
https://kubernetes.io/
2.什么是 Kubernetes?
官方介紹:
Kubernetes 是一個(gè)可移植的、可擴(kuò)展的開(kāi)源平臺(tái), Google 在 2014 年將其開(kāi)源,它用于管理容器化的工作負(fù)載和服務(wù),可促進(jìn)聲明式配置和自動(dòng)化。
Kubernetes 擁有一個(gè)龐大且快速增長(zhǎng)的生態(tài)系統(tǒng)。Kubernetes 的服務(wù)、支持和工具廣泛可用。
通俗來(lái)說(shuō),Kubernetes 是一個(gè)容器編排工具。
當(dāng)業(yè)務(wù)規(guī)模足夠大時(shí),我們會(huì)有很多容器來(lái)跑各種服務(wù),這么多服務(wù)如何批量管理?
之前學(xué) Docker 時(shí)我們介紹過(guò)Docker的官方工具 Docker-compose ,但是這是一種單機(jī)容器管理工具,并不支持集群,雖然官方出了另一種集群管理工具 Docker Swarm,但是當(dāng)你用上 Kubernetes 之后,你會(huì)覺(jué)得他們都是弟弟。
2.1彩蛋
Kubernetes 這個(gè)名字源于希臘語(yǔ),意為“舵手”或“飛行員”。k8s 這個(gè)縮寫(xiě)是因?yàn)?k 和 s 之間有八個(gè)字符的關(guān)系。
3.部署時(shí)代演進(jìn)
3.1 傳統(tǒng)部署時(shí)代
部署一個(gè)服務(wù),會(huì)粗略估計(jì)服務(wù)所需要的機(jī)器性能,然后去采購(gòu)對(duì)應(yīng)的真實(shí)物理機(jī)器,然后在該機(jī)器上安裝服務(wù)需要的一些軟件,比如服務(wù)器Tomcat,數(shù)據(jù)庫(kù)MySQL等等。
(1)部署非常慢:采購(gòu)機(jī)器,安裝系統(tǒng),安裝軟件等等;
(2)成本高以及資源浪費(fèi):通常為了以防服務(wù)性能不夠,我們都會(huì)盡量采購(gòu)比預(yù)期資源高一點(diǎn)的機(jī)器,不僅會(huì)增加成本,還會(huì)造成機(jī)器資源浪費(fèi);
(3)難于擴(kuò)展與遷移:由于是真實(shí)的物理機(jī),擴(kuò)展或者遷移會(huì)比較麻煩;
3.2 虛擬機(jī)部署時(shí)代
VMware 相信大家都玩過(guò),通過(guò)VMware 我們能在自己電腦上創(chuàng)建很多虛擬機(jī)器,而物理機(jī)時(shí)代就是在一臺(tái)真實(shí)物理機(jī)上,虛擬出多臺(tái)機(jī)器,而且每臺(tái)機(jī)器都可以看做是一臺(tái)獨(dú)立的電腦。
相對(duì)于物理機(jī)時(shí)代,虛擬機(jī)能夠在一臺(tái)機(jī)器上創(chuàng)建多臺(tái)機(jī)器,能夠充分利用資源,并且也做到了機(jī)器之間的隔離,機(jī)器性能不夠用了,也可以通過(guò) Hypervisor 隨時(shí)進(jìn)行擴(kuò)展。
虛擬化技術(shù)相對(duì)于傳統(tǒng)部署時(shí)代能夠更好地利用物理服務(wù)器上的資源,并且因?yàn)榭奢p松地添加或更新應(yīng)用程序 而可以實(shí)現(xiàn)更好的可伸縮性,降低硬件成本等等。
但是每個(gè)虛擬機(jī)都需要安裝一些多余的東西,比如操作系統(tǒng),這算是額外的開(kāi)銷(xiāo)。
3.3 容器部署時(shí)代
容器類(lèi)似于 VM,但是它們具有被放寬的隔離屬性,可以在應(yīng)用程序之間共享操作系統(tǒng)(OS)。因此,容器被認(rèn)為是輕量級(jí)的。容器與 VM 類(lèi)似,具有自己的文件系統(tǒng)、CPU、內(nèi)存、進(jìn)程空間等??梢园讶萜骺醋鍪遣挥冒惭b操作系統(tǒng)的虛擬機(jī),容器化技術(shù)比虛擬機(jī)更加靈活,更加小巧,更加極致的利用物理機(jī)資源。
容器部署有如下優(yōu)點(diǎn):
- 敏捷應(yīng)用程序的創(chuàng)建和部署:與使用 VM 鏡像相比,提高了容器鏡像創(chuàng)建的簡(jiǎn)便性和效率。
- 持續(xù)開(kāi)發(fā)、集成和部署:通過(guò)快速簡(jiǎn)單的回滾(由于鏡像不可變性),支持可靠且頻繁的 容器鏡像構(gòu)建和部署。
- 關(guān)注開(kāi)發(fā)與運(yùn)維的分離:在構(gòu)建/發(fā)布時(shí)而不是在部署時(shí)創(chuàng)建應(yīng)用程序容器鏡像, 從而將應(yīng)用程序與基礎(chǔ)架構(gòu)分離。
- 可觀察性:不僅可以顯示操作系統(tǒng)級(jí)別的信息和指標(biāo),還可以顯示應(yīng)用程序的運(yùn)行狀況和其他指標(biāo)信號(hào)。
- 跨開(kāi)發(fā)、測(cè)試和生產(chǎn)的環(huán)境一致性:在便攜式計(jì)算機(jī)上與在云中相同地運(yùn)行。
- 跨云和操作系統(tǒng)發(fā)行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方運(yùn)行。
- 以應(yīng)用程序?yàn)橹行牡墓芾恚禾岣叱橄蠹?jí)別,從在虛擬硬件上運(yùn)行 OS 到使用邏輯資源在 OS 上運(yùn)行應(yīng)用程序。
- 松散耦合、分布式、彈性、解放的微服務(wù):應(yīng)用程序被分解成較小的獨(dú)立部分, 并且可以動(dòng)態(tài)部署和管理 - 而不是在一臺(tái)大型單機(jī)上整體運(yùn)行。
- 資源隔離:可預(yù)測(cè)的應(yīng)用程序性能。
- 資源利用:高效率和高密度。
4.為什么需要 Kubernetes?
進(jìn)入容器化部署時(shí)代了,我們會(huì)有很多容器需要管理,在生產(chǎn)環(huán)境中,我們需要保證容器不會(huì)停機(jī),或者容器停機(jī)了能夠馬上自啟,能夠監(jiān)控容器運(yùn)行狀態(tài),甚至容器的負(fù)載均衡等等,這些 Kubernetes 都可以幫我們做到。
- 服務(wù)發(fā)現(xiàn)和負(fù)載均衡
Kubernetes 可以使用 DNS 名稱(chēng)或自己的 IP 地址公開(kā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 允許你指定每個(gè)容器所需 CPU 和內(nèi)存(RAM)。當(dāng)容器指定了資源請(qǐng)求時(shí),Kubernetes 可以做出更好的決策來(lái)管理容器的資源。
- 自我修復(fù)
Kubernetes 重新啟動(dòng)失敗的容器、替換容器、殺死不響應(yīng)用戶定義的 運(yùn)行狀況檢查的容器,并且在準(zhǔn)備好服務(wù)之前不將其通告給客戶端。
- 密鑰與配置管理
Kubernetes 允許你存儲(chǔ)和管理敏感信息,例如密碼、OAuth 令牌和 ssh 密鑰。你可以在不重建容器鏡像的情況下部署和更新密鑰和應(yīng)用程序配置,類(lèi)似熱部署,也無(wú)需在堆棧配置中暴露密鑰。
5.Kubernetes 學(xué)習(xí)網(wǎng)站
(1)官網(wǎng):https://kubernetes.io/
(2)中文社區(qū):https://www.kubernetes.org.cn