1. 程式人生 > 其它 >Kubernetes(K8S)基礎概念

Kubernetes(K8S)基礎概念

1、容器

使用容器部署和以往部署應用的區別

傳統的應用部署方式是通過外掛或指令碼來安裝應用。這樣做的缺點是應用的執行、配置、管理、所有生存週期將與當前作業系統繫結,這樣做並不利於應用的升級更新/回滾等操作,當然也可以通過建立虛機的方式來實現某些功能,但是虛擬機器非常重,並不利於可移植性。

新的方式是通過部署容器方式實現,每個容器之間互相隔離,每個容器有自己的檔案系統 ,容器之間程序不會相互影響,能區分計算資源。相對於虛擬機器,容器能快速部署,由於容器與底層設施、機器檔案系統解耦的,所以它能在不同雲、不同版本作業系統間進行遷移。

容器佔用資源少、部署快,每個應用可以被打包成一個容器映象,每個應用與容器間成一對一關係也使容器有更大優勢,使用容器可以在build或release 的階段,為應用建立容器映象,因為每個應用不需要與其餘的應用堆疊組合,也不依賴於生產環境基礎結構,這使得從研發到測試、生產能提供一致環境。類似地,容器比虛機輕量、更“透明”,這更便於監控和管理。

容器優勢總結:

  • 快速建立/部署應用:與VM虛擬機器相比,容器映象的建立更加容易。
  • 持續開發、整合和部署:提供可靠且頻繁的容器映象構建/部署,並使用快速和簡單的回滾(由於映象不可變性)。
  • 開發和執行相分離:在build或者release階段建立容器映象,使得應用和基礎設施解耦。
  • 開發,測試和生產環境一致性:在本地或外網(生產環境)執行的一致性。
  • 雲平臺或其他作業系統:可以在 Ubuntu、RHEL、 CoreOS、on-prem、Google Container Engine或其它任何環境中執行。
  • Loosely coupled,分散式,彈性,微服務化:應用程式分為更小的、獨立的部件,可以動態部署和管理。
  • 資源隔離
  • 資源利用:更高效

2、K8S基本概念

Kubernetes是Google 2014年建立管理的,是Google 10多年大規模容器管理技術Borg的開源版本。

Kubernetes是容器叢集管理系統,是一個開源的平臺,可以實現容器叢集的自動化部署、自動擴縮容、維護等功能。

K8S的特點:

  • 快速部署應用

  • 快速擴充套件應用

  • 無縫對接新的應用功能

  • 節省資源,優化硬體資源的使用

  • 可移植: 支援公有云,私有云,混合雲,多重雲(multi-cloud)

  • 可擴充套件: 模組化, 外掛化, 可掛載, 可組合

  • 自動化: 自動部署,自動重啟,自動複製,自動伸縮/擴充套件

在 Kubenetes 中,所有的容器均在 Pod

中執行,一個 Pod 可以承載一個或者多個相關的容器,在後邊的案例中,同一個Pod中的容器會部署在同一個物理機器上並且能夠共享資源。一個 Pod 也可以包含 0 個或者多個 磁碟卷組(volumes),這些卷組將會以目錄的形式提供給一個容器,或者被所有 Pod 中的容器共享,對於使用者建立的每個 Pod,系統會自動選擇那個健康並且有足夠容量的機器,然後建立類似容器的容器,當容器建立失敗的時候,容器會被 node agent 自動的重啟,這個node agent 叫 kubelet,但是,如果是 Pod 失敗或者機器,它不會自動的轉移並且啟動,除非使用者定義了 replication controller

Kubernetes 對計算資源進行了更高層次的抽象,通過將容器進行細緻的組合,將最終的應用服務交給使用者。Kubernetes在模型建立之初就考慮了容器跨機連線的要求,支援多種網路解決方案,同時在Service層次構建叢集範圍的SDN網路。其目的是將服務發現和負載均衡放置到容器可達的範圍,這種透明的方式便利了各個服務間的通訊,併為微服務架構的實踐提供了平臺基礎。而在Pod層次上,作為Kubernetes可操作的最小物件,其特徵更是對微服務架構的原生支援。

K8S應用

可以在物理或虛擬機器的Kubernetes叢集上執行容器化應用,Kubernetes能提供一個以“容器為中心的基礎架構”,滿足在生產環境中執行應用的一些常見需求,如:

  • 多個程序(作為容器執行)協同工作(Pod)
  • 儲存系統掛載
  • Distributing secrets
  • 應用健康檢測
  • 應用例項的複製
  • Pod自動伸縮/擴充套件
  • Naming and discovering
  • 負載均衡
  • 滾動更新
  • 資源監控
  • 日誌訪問
  • 除錯應用程式
  • 提供認證和授權

K8S不是什麼

Kubernetes並不是傳統的PaaS(平臺即服務)系統。

  • Kubernetes不限制支援應用的型別,不限制應用框架。不限制受支援的語言runtimes (例如, Java, Python, Ruby) 。不區分 “apps” 或者“services”。 Kubernetes支援不同負載應用,包括有狀態、無狀態、資料處理型別的應用。只要這個應用可以在容器裡執行,那麼就能很好的執行在Kubernetes上。
  • Kubernetes不提供中介軟體(如message buses)、資料處理框架(如Spark)、資料庫(如Mysql)或者叢集儲存系統(如Ceph)作為內建服務。但這些應用都可以執行在Kubernetes上面。
  • Kubernetes不部署原始碼不編譯應用。持續整合的 (CI)工作流方面,不同的使用者有不同的需求和偏好的區域,因此,我們提供分層的 CI工作流,但並不定義它應該如何工作。
  • Kubernetes允許使用者選擇自己的日誌、監控和報警系統。
  • Kubernetes不提供或授權一個全面的應用程式配置 語言/系統。
  • Kubernetes不提供任何機器配置、維護、管理或者自修復系統。

Reference

中文文件

http://docs.kubernetes.org.cn/227.html