Kubernetes是什麼

Kubernetes概念node

簡介

kubernetes是一個Google開源的容器編排系統,用於自動部署,擴展和管理容器化應用程序。docker

  • 隨處運行:支持公有云,私有云,混合雲,物理機
  • 以集羣的方式運行、管理跨機器的容器,解決Docker跨機器容器之間的通信問題。
  • 可拓展:模塊化,可插拔,支持鉤子,可任意組合
  • 自修復:自動重調度,自動重啓,自動複製

k8s frame diagram

主要概念:

  • 容器組(Pod):被部署在單個節點上的,且包含一個或多個容器的容器組,Pod 是能夠被建立,調度,是 Kubernetes 管理最小部署單元,同一容器集中的全部容器共享同一個 IP 地址、IPC、主機名稱及其它資源。容器集會將網絡和存儲從底層容器中抽象出來,這樣,您就能更加輕鬆地在集羣中移動容器。
  • 節點(Node):一個節點是一個運行 Kubernetes 中的主機,虛擬機或物理主機。
  • 管理節點 (Master Node):用於控制 Kubernetes 節點的計算機,全部任務分配都來自於此。
  • 工做節點 (Minion Node):執行請求和分配任務的計算機,由 Kubernetes 主機負責對節點進行控制。
  • 命名空間(Namespace):Namespace 是對一組資源和對象的抽象集合,好比能夠用來將系統內部的對象劃分爲不一樣的項目組或用戶組。常見的 pods, services, replication controllers 和 deployments 等都是屬於某一個 namespace 的(默認是 default),而 node, persistentVolumes 等則不屬於任何 namespace。
  • 部署(Deployment):Deployment 是新一代用於 Pod 管理的對象,與 Replication Controller 相比,它提供了更加完善的功能,使用起來更加簡單方便。
  • Replication Controllers:主要負責指定數量的 pod 在同一時間一塊兒運行並保持平衡。解決Pod的線性擴容縮容問題。
  • 服務(services):解決Pod的服務發現問題,服務爲一組 Pod 提供單一穩定的名稱和地址,服務可將工做定義與容器集分離,Kubernetes 服務代理會自動將服務請求分配到正確的容器集 — 不管這個容器集會移到集羣中的哪一個位置,即便它已被替換,也是如此。
  • 標籤(labels):邏輯上的標記。用來關聯service、replication controller和pod.
  • 卷(Volume):Pod中可以被多個容器訪問的共享目錄,其生命週期與Pod相同跟容器無關。

Kubernetes 中,全部的容器都運行在 Pod 中,一個 Pod 來容納一個單獨的容器,或者多個合做的容器。在後一種狀況,Pod 中的容器被保證放置在同一個機器上,能夠共享資源。一個 Pod 也能包含零個或者更多的的 volume,volume 是對一個容器私有的目錄或者能夠在 Pod 中的容器間共享。對於用戶每一個建立的 Pod,系統會找一個健康運轉而且有足夠的容量的機器,而後開始將相應的容器在那裏啓動。若是一個容器失敗,它會被 Kubernetes 的 node agent 自動重啓,這個 node agent 被稱做 Kubelet。可是若是 Pod 或者他的機器出故障,它不會被自動轉移或者重啓,除非用戶也定義了一個 Replication Controller。後端

Pod 的副本集合能夠共同組成一整個應用,一個微服務,或者在一個多層應用的一層。一旦 Pod 建立好,系統會持續的監控他們的健康狀態,和它們運行時所在的機器的健康情況。若是一個 Pod 由於軟件問題或者所在機器故障出現問題,Replication 控制器會自動在健康的機器上建立一個新的 Pod。網絡

Kubernetes 支持一種獨特的網絡模型。Kubernetes 鼓勵用扁平的地址空間,而且不會動態的分配端口,而是採用讓用戶能夠選擇任意合適本身的端口。爲了實現這點,它給每個 Pod 分配了一個 IP 地址。負載均衡

Kubernetes 提供了 Service 的抽象,其提供了一穩定的 IP 地址和 DNS 名字,來對應一組動態的 Pod,例如一組構成一個微服務的 Pod。這個 Pod 組是經過 Label 選擇器來定義的,由於能夠指定任何的 Pod 組。當一個運行在 Kubernetes Pod 裏的容器鏈接到這個地址時,這個鏈接會被本地的代理轉發(稱做 kube proxy)。該代理運行在來源機器上,轉發的目的地是一個相應的後端容器,確切的後端是經過 round-robin 的策略進行選擇,以均衡負載。kube proxy 也會追蹤後端的 Pod 組的動態變化,如當 Pod 被位於新機器上的新的 Pod 取代的時候,於是服務的 IP 和 DNS 名字不用改變。框架

每個 Kubernetes 中的資源,如 Pod,都經過一個URI來被識別,而且有一個 UID。URI 中一個總要的組件是,對象的類型(如:Pod),對象的名字,和對象的 namespace(命名空間)。對於一個特定的對象類型,每個名字在其命名空間都是獨一無二的,在一個對象的名字沒有帶着命名空間的形式給出,那就是默認的命名空間,UID 在時間和空間的範圍都是惟一的。模塊化

關於 Service 的更多說明:Service 是應用服務的抽象,經過 labels 爲應用提供負載均衡和服務發現。匹配 labels 的 Pod IP 和端口列表組成 endpoints,由 kube-proxy 負責將服務 IP 負載均衡到這些 endpoints 上。
每一個 Service 都會自動分配一個 cluster IP(僅在集羣內部可訪問的虛擬地址)和 DNS 名,其餘容器能夠經過該地址或 DNS 來訪問服務,而不須要了解後端容器的運行。微服務

整體結構

  • Master組件:
    • ApiServer:做爲kubernetes系統的入口,封裝了核心對象的增刪改查操做。
    • Scheduler:插件式的調度器,負責集羣的資源調度,爲新建的pod分配機器。
    • Controller:負責管理各類控制器。如- - ReplicationController,
    • EndPointController等。
  • Node組件:
    • kubelet:負責管控docker容器,如啓動/中止、監控運行狀態等。
    • proxy:負責爲pod提供代理。它會按期從etcd獲取全部的service,並根據service信息建立代理。
  • 公共組件:
    • Etcd
    • flannel

image

參考

相關文章
相關標籤/搜索