Kubernetes介紹篇:是什麼? 爲何要用它?

是時候該學習Kubernetes了,否則都不敢說本身瞭解容器、瞭解Docker。html

一、Kubernetes的前世

Kubernetes,它是一個全新的基於容器技術的分佈式架構方案,近些年在容器領域使用很是普遍,做爲容器化部署實施的典型方案。編程

看似很新(相對於剛出現時來講),但它倒是谷歌十幾年以來大規模應用容器技術的經驗積累和昇華的重要成果。確切地說,Kubernetes是谷歌嚴格保密十幾年的祕密武器——Borg的一個開源版本。Borg是谷歌的一個久負盛名的內部使用的大規模集羣管理系統,它基於容器技術,目的是實現資源管理的自動化,以及跨過個數據中心資源利用率的最大化。十幾年以來,谷歌一直經過Borg系統管理者數據龐大的應用程序集羣,因爲谷歌員工都簽署了保密協議,即便離職也不能泄露Borg的內部設計,因此外界一直沒法瞭解關於它的更多信息。直到2015年4月,傳聞許久的Borg論文發佈,伴隨着Kubernetes的高調宣傳被谷歌首次公開,你們才得以瞭解它的更多內幕。正式因爲站在Borg這個前輩的肩膀上,汲取了Borg過去十年間的經驗與教訓,因此Kubernetes一經開源就一舉成名,並迅速稱霸容器領域。
在這裏插入圖片描述
Borg就是一個噴氣式飛機的駕駛系統,很是的專業和高大上,他適用於谷歌這樣的大公司,它有幾百萬的機器。Kubernetes是一個它的簡化版,它是一輛設計優良的轎車,它適合中小型公司,更方便的用它來調度本身的集羣。

安全

二、Kubernetes是什麼?

Kubernetes用於自動部署,擴展和管理容器化應用程序的開源系統,它將組成應用程序的容器組合成邏輯單元,以便於管理和服務發現。Kubernetes源自谷歌15年生產環境的運維經驗,同時凝聚了社區的最佳創意和實踐。
在這裏插入圖片描述
Kubernetes,構建在Docker技術之上,爲跨主機的容器化應用提供資源調度、服務發現、高可用管理和彈性伸縮等一整套功能,它提供了完善的管理工具,涵蓋開發、部署測試、運維監控等各個環節。它的目標不只僅是一個編排系統,更是提供一個規範,可讓你來描述集羣的架構,定義服務的最終狀態,Kubernetes能夠幫你將系統自動達到和維持在這個狀態。
在這裏插入圖片描述


服務器

2.1 亮點

亮點1:Kubernetes以「一切以服務(Service)爲中心,一切圍繞服務運轉」做爲指導思想的創新型產品。它在功能和架構設計上始終遵循着這一指導思想,構建在Kubernetes上的系統不只能夠獨立運行在物理機、虛擬機集羣或企業私有云上,也能夠被託管在公有云上。網絡

亮點2:Kubernetes是一個開放的開發平臺。與J2EE不一樣,它不侷限於任何一種語言,沒有限定任何編程接口,因此不管是用Java、Go、C++仍是Python編寫的程序,均可以被映射爲Kubernetes的Service,並經過標準的TCP通信協議進行交互。此外,Kubernetes平臺對現有的編程語言、編程框架、中間件沒有任何侵入性,作到了零侵入,所以現有的系統也很容易改造升級並遷移到Kubernetes平臺之上。架構

亮點3:Kubernetes的另外一個亮點是自動化。在Kubernetes的解決方案中,一個能夠自我擴展、自我診斷,而且容易升級,在收到服務擴容的請求後,Kubernetes會觸發調度流程,最終在選定的目標節點上啓動相應數據的服務實例副本,這些服務實例副本在啓動成功後會自動加入負載均衡器中並生效,整個過程無須額外的人工操做。另外,Kubernetes會定時巡查每一個服務的全部實例的可用性,確保服務實例的數量始終保持爲預期的數量,當它發現某個實例不可用時,會自動重啓該實例或者其餘節點上從新調度、運行一個新實例,這樣一個複雜的過程無須人工干預便可所有自動完成。負載均衡

亮點4:Kubernetes是一個完備的分佈式系統支撐平臺。具有完備的集羣管理能力,包括多層次的安全防禦和准入機制、多租戶應用支撐能力、透明的服務註冊和服務發現機制、內建的智能負載均衡器、強大的故障發現和自我修復能力、服務滾動升級和在線擴容能力、可擴展的資源自動調度機制,以及多粒度的資源配額管理能力。同時,Kubernetes提供了完善的管理工具,這些涵蓋了包括開發、部署測試、運維監控在內的各個環節。所以,Kubernetes是一個全新的基於容器技術的分佈式架構解決方案,而且是一個一站式的完備的分佈式系統開發和支持平臺。框架

隨着容器化部署環境限制、語言差別、容器數量的龐大、負載均衡、故障檢測、故障修復等問題,假若將過多的精力、時間放在這些地方,其工做量將會多大,將會讓不少企業、產品對容器望而止步。在容器化的時代,Kubernetes足以避免去上述面臨的問題,讓容器化使用變得的更加容易、輕鬆,只需花費更多的時間去完成業務功能的開發。運維

2.2 特性

Kubernetes特性以下:編程語言

Service拓撲: 基於集羣拓撲的服務流量路由。可讓一個服務基於集羣的Node拓撲進行流量路由。例如,一個服務能夠指定流量是被優先路由到一個和客戶端在同一個Node或者在同一可用區域的端點。
端點切片: Kubernetes 集羣中網絡端點的可擴展跟蹤。
存儲編排: 自動掛載所選存儲系統,包括本地存儲、諸如 GCPAWS 之類公有云提供商所提供的存儲或者諸如 NFS、iSCSI、Gluster、Ceph、Cinder 或 Flocker 這類網絡存儲系統。
Secret和配置管理: 部署和更新 Secrets 和應用程序的配置而沒必要從新構建容器鏡像,且沒必要將軟件堆棧配置中的祕密信息暴露出來。
批量執行: 除了服務以外,Kubernetes 還能夠管理你的批處理和 CI 工做負載,在指望時替換掉失效的容器。
服務發現與負載均衡: 無需修改您的應用程序便可使用陌生的服務發現機制。Kubernetes 爲容器提供了本身的 IP 地址和一個 DNS 名稱,而且能夠在它們之間實現負載均衡。
自我修復:從新啓動失敗的容器,在節點死亡時替換並從新調度容器,殺死不響應用戶定義的健康檢查的容器,而且在它們準備好服務以前不會將它們公佈給客戶端。
自動化上線和回滾: Kubernetes 會分步驟地將針對應用或其配置的更改上線,同時監視應用程序運行情況以確保你不會同時終止全部實例。若是出現問題,Kubernetes 會爲你回滾所做更改。你應該充分利用不斷成長的部署方案生態系統。
自動裝箱: 根據資源需求和其餘約束自動放置容器,同時避免影響可用性。將關鍵性工做負載和盡力而爲性質的服務工做負載進行混合放置,以提升資源利用率並節省更多資源。
IPv4/IPv6雙協議棧: 爲 Pod 和 Service 分配 IPv4 和 IPv6 地址。
水平擴縮: 使用一個簡單的命令、一個UI或基於CPU使用狀況自動對應用程序進行擴縮。









三、爲何使用Kubernetes?

使用Kubernetes的理由不少,最重要的理由是,IT行業歷來都是由新技術驅動的。

當前,Docker容器化技術已經被不少公司採用,從單機走向集羣已成爲必然。雲計算的蓬勃發展正在加速這一進程。Kubernetes做爲當前被業界普遍承認和看好的基於Docker的大規模容器化分佈式系統解決方案,獲得了以谷歌爲首的IT巨頭們的大力宣傳和維持推動。

2015年,谷歌聯合20多家公司一塊兒創建了CNCF(Cloud Native Computing Foundation,雲原生計算基金會)開源組織來推廣Kubernetes,並由此開創了雲原生應用(Cloud Native Application)的新時代。做爲CNCF「欽定」的官方雲原平生臺,Kubernetes正在顛覆應用程序的開發方式。

不妨從如下幾個方面來看看,你必定會喜歡上它的哦!

3.1 一個平臺搞定全部

使用 Kubernetes部署任何應用都是小菜一碟。只要應用能夠打包成鏡像,可以容器部署,Kubernetes就必定能啓動它。
在這裏插入圖片描述
無論什麼語言、什麼框架寫的應用(如:Java, Python, Node.js),Kubernetes均可以在任何環境中安全的啓動它,如:物理服務器、虛擬機、雲環境。

3.2 雲環境無縫遷移

若是你有換雲環境的需求,例如從GCP到AWS,使用Kubernetes的話,你就不用有任何擔憂。
在這裏插入圖片描述
Kubernetes徹底兼容各類雲服務提供商,例如 Google CloudAmazonMicrosoft Azure,還能夠工做在 CloudStack, OpenStack, OVirt, Photon, VSphere等。

3.3 高效的利用資源

看下圖,左邊是4個虛擬機,黃色和藍色部分是運行的應用,白色部分是未使用的內存和處理器資源。

右邊,一樣的應用打包運行在容器中。
在這裏插入圖片描述
Kubernetes若是發現有節點工做不飽和,便會從新分配pod,幫助咱們節省開銷,高效的利用內存、處理器等資源。

若是一個節點宕機了,Kubernetes會自動從新建立以前運行在此節點上的pod,在其餘節點上運行。

3.4 開箱即用的自動縮放能力

網絡、負載均衡、複製等特性,對於Kubernetes都是開箱即用的。

pod是無狀態運行的,任什麼時候候有pod宕了,立馬會有其餘pod接替它的工做,用戶徹底感受不到。

若是用戶量忽然暴增,現有的pod規模不足了,那麼會自動建立出一批新的pod,以適應當前的需求。

反之亦然,當負載降下來的時候,Kubernetes也會自動縮減 pod 的數量。
在這裏插入圖片描述

3.5 使CI/CD更簡單

你沒必要精通於ChefAnsible這類工具,只須要對 CI 服務寫個簡單的腳本而後運行它,就會使用你的代碼建立一個新的 pod,並部署到 Kubernetes集羣裏面。

應用打包在容器中使其能夠安全的運行在任何地方,例如你的 PC、一個雲服務器,使得測試極其簡單。
在這裏插入圖片描述

3.5 可靠性

Kubernetes如此流行的一個重要緣由是:應用會一直順利運行,不會被pod或節點的故障所中斷。

若是出現故障,Kubernetes會建立必要數量的應用鏡像,並分配到健康的pod或節點中,直到系統恢復。

並且用戶不會感到任何不適。
在這裏插入圖片描述

一個容器化的基礎設施是有自愈能力的,能夠提供應用程序的不間斷操做,即便一部分基礎設施出現故障。

四、總結

Kubernetes使得應用的啓動、遷移、部署變得簡單又安全。

沒必要擔憂應用遷移後工做出現問題,也不用擔憂一臺服務器沒法應付突發的用戶量。

須要注意的是,你的應用最好使用微服務架構進行開發,由於微服務應用比單體應用更適合作容器化。

不要爲了單純的使用Kubernetes而引入,要看你的系統規模是否值得去用,不然可能拔苗助長,畢竟Kubernetes的學習是須要必定成本。

參考文章:

  1. http://www.mamicode.com/info-detail-1436432.html
  2. https://yellow.systems/blog/why-you-should-use-kubernetes-in-your-next-project
相關文章
相關標籤/搜索