Kubernetes(K8S)是什麼?

  Kubernetes,又稱爲 k8s(首字母爲 k、首字母與尾字母之間有 8 個字符、尾字母爲 s,所以簡稱 k8s)或者簡稱爲 "kube" ,是一種可自動實施 Linux 容器操作的開源平臺。它可以幫助用戶省去應用容器化過程的許多手動部署和擴展操作。也就是說,您可以將運行 Linux 容器的多組主機聚集在一起,由 Kubernetes 幫助您輕鬆高效地管理這些集羣。而且,這些集羣可跨公共雲私有云混合雲部署主機。因此,對於要求快速擴展的雲原生應用而言(例如藉助 Apache Kafka 進行的實時數據流處理),Kubernetes 是理想的託管平臺。

  Kubernetes 最初由 Google 的工程師開發和設計。Google 是最早研發 Linux 容器技術的企業之一(組建了cgroups),曾公開分享介紹 Google 如何將一切都運行於容器之中(這是 Google 雲服務背後的技術)。Google 每週會啓用超過 20 億個容器——全都由內部平臺 Borg 支撐。Borg 是 Kubernetes 的前身,多年來開發 Borg 的經驗教訓成了影響 Kubernetes 中許多技術的主要因素。

  真正的生產型應用會涉及多個容器。這些容器必須跨多個服務器主機進行部署。容器安全性需要多層部署,因此可能會比較複雜。但 Kubernetes 有助於解決這一問題。Kubernetes 可以提供所需的編排和管理功能,以便您針對這些工作負載大規模部署容器。藉助 Kubernetes 編排功能,您可以構建跨多個容器的應用服務、跨集羣調度、擴展這些容器,並長期持續管理這些容器的健康狀況。有了 Kubernetes,您便可切實採取一些措施來提高 IT 安全性

  Kubernetes 還需要與聯網、存儲、安全性、遙測和其他服務整合,以提供全面的容器基礎架構。

Kubernetes explained - diagram

  當然,這取決於您如何在您的環境中使用容器。Linux 容器中的基本應用將它們視作高效、快速的虛擬機。一旦把它部署到生產環境或擴展爲多個應用,您顯然需要許多託管在相同位置的容器來協同提供各種服務。隨着這些容器的累積,您運行環境中容器的數量會急劇增加,複雜度也隨之增長。

  Kubernetes 通過將容器分類組成"容器集" (pod) ,解決了容器增殖帶來的許多常見問題容器集爲分組容器增加了一個抽象層,可幫助您調用工作負載,併爲這些容器提供所需的聯網和存儲等服務。Kubernetes 的其它部分可幫助您在這些容器集之間達成負載平衡,同時確保運行正確數量的容器,充分支持您的工作負載。

  如果能正確實施 Kubernetes,再輔以其它開源項目(例如 Atomic 註冊表Open vSwitchheapsterOAuth 以及 SELinux),您就能夠輕鬆編排容器基礎架構的各個部分。

  在您生產環境中(尤其是當您要面向雲優化應用開發時)使用 Kubernetes 的主要優勢在於,它提供了一個便捷有效的平臺,讓您可以在物理機和虛擬機集羣上調度和運行容器。更廣泛一點說,它可以幫助您在生產環境中,完全實施並依託基於容器的基礎架構運營。由於 Kubernetes 的實質在於實現操作任務自動化,所以您可以將其它應用平臺或管理系統分配給您的許多相同任務交給容器來執行。

利用 Kubernetes,您能夠達成以下目標:

  • 跨多臺主機進行容器編排。
  • 更加充分地利用硬件,最大程度獲取運行企業應用所需的資源。
  • 有效管控應用部署和更新,並實現自動化操作。
  • 掛載和增加存儲,用於運行有狀態的應用。
  • 快速、按需擴展容器化應用及其資源。
  • 對服務進行聲明式管理,保證所部署的應用始終按照部署的方式運行。
  • 利用自動佈局、自動重啓、自動複製以及自動擴展功能,對應用實施狀況檢查和自我修復。

但是,Kubernetes 需要依賴其它項目來全面提供這些經過編排的服務。因此,藉助其它開源項目可以幫助您將 Kubernetes 的全部功用發揮出來。這些功能包括:

  • 註冊表,通過 Atomic 註冊表或 Docker 註冊表等項目實現。
  • 聯網,通過 OpenvSwitch 和智能邊緣路由等項目實現。
  • 遙測,通過 heapster、kibana、hawkular 和 elastic 等項目實現。
  • 安全性,通過 LDAP、SELinux、RBAC 和 OAUTH 等項目以及多租戶層來實現。
  • 自動化,參照 Ansible 手冊進行安裝和集羣生命週期管理。
  • 服務,可通過自帶預建版常用應用模式的豐富內容目錄來提供。

Kubernetes官方文檔相關術語表👉:https://kubernetes.io/zh-cn/docs/reference/

和其它技術一樣,Kubernetes 也會採用一些專用的詞彙,這可能會對初學者理解和掌握這項技術造成一定的障礙。爲了幫助您瞭解 Kubernetes,我們在下面來解釋一些常用術語。

  • 主機(Master): 用於控制 Kubernetes 節點的計算機。所有任務分配都來自於此。
  • 節點(Node):負責執行請求和所分配任務的計算機。由 Kubernetes 主機負責對節點進行控制。
  • 容器集(Pod):被部署在單個節點上的,且包含一個或多個容器的容器組。同一容器集中的所有容器共享同一個 IP 地址、IPC、主機名稱及其它資源。容器集會將網絡和存儲從底層容器中抽象出來。這樣,您就能更加輕鬆地在集羣中移動容器。
  • 複製控制器(Replication controller):用於控制應在集羣某處運行的完全相同的容器集副本數量。
  • 服務(Service):將工作內容與容器集分離。Kubernetes 服務代理會自動將服務請求分發到正確的容器集——無論這個容器集會移到集羣中的哪個位置,甚至可以被替換掉。
  • Kubelet:運行在節點上的服務,可讀取容器清單(container manifest),確保指定的容器啓動並運行。
  • kubectl: Kubernetes 的命令行配置工具。

Kubernetes diagram

  Kubernetes 基於操作系統運行(例如紅帽企業Linux),並與在節點上運行的容器集交互。由 Kubernetes 主機接收管理員(或 DevOps 團隊)發出的命令,然後將這些指令轉發給從屬的節點。這種移交操作與多種服務同時作用,自動確定哪個節點最適合執行該任務。然後,它將在該節點分配資源,並指派容器集來完成任務請求。

因此,就基礎架構而言,管理容器的方式基本沒變。但您對容器的掌控力得到提升,無需對獨立的容器或節點實施微觀管理,就能更好地管理容器。當然,某些工作是必須的,但大部分都是關於分配 Kubernetes 主機、定義節點以及定義容器集。

Docker運行狀態

  Docker(點擊查看Docker原理)技術仍然執行它原本的工作。當 kubernetes 將容器集調度到一個節點上時,該節點上的 kubelet 會發送指令讓 docker 啓動指定的容器。kubelet 隨後會不斷從 docker 收集這些容器的狀態,並將這些信息彙集至主機。Docker 將容器拉至該節點,並按照常規啓動和停止這些容器。不同在於,自動化系統要求 docker 在所有節點上對所有容器執行這些操作,而非要求管理員手動操作。

原文地址:

Red Hat:https://www.redhat.com/zh/topics/containers/what-is-kubernetes

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章