1. 程式人生 > >Kubernetes 核心元件

Kubernetes 核心元件

Kubernetes主要由以下幾個核心元件組成
主要元件:

  • kube-apiserver : 提供了資源的增、刪、改、查等操作的唯一入口,並提供認證、授權、訪問控制、API註冊和發現等機制;
  • etcd :儲存了整個叢集的狀態;
  • kube-scheduler :負責資源的排程,按照預定的排程策略將Pod排程到相應的機器上;
  • kube-controller-manager:負責維護叢集的狀態,資源物件的自動化控制中心,比如故障檢測、自動擴充套件、滾動更新、服務帳戶和令牌控制器等;
  • cloud-controller-manager:與底層雲提供商互動的控制器;

節點元件:

  • kubelet : 負責Pod對應的容器的 建立、啟停等任務,與Master節點密切協作,實現叢集管理的基本功能。
  • kube-proxy:負責為Service提供cluster內部的服務發現和負載均衡;
  • Container Runtime :負責映象管理以及Pod和容器的真正執行(CRI)

外掛:

  • kube-dns負責為整個叢集提供DNS服務
  • Dashboard提供Web UI
  • 叢集資源監測
  • 叢集的日誌

Kubernetes提供了多種資源物件,使用者可以根據自己應用的特性加以選擇。這些物件有:

類別 類別
資源物件 Pod、ReplicaSet、ReplicationController、Deployment、StatefulSet、DaemonSet、Job、CronJob、HorizontalPodAutoscaling
配置物件 Node、Namespace、Service、Secret、ConfigMap、Ingress、Label、ThirdPartyResource、 ServiceAccount
儲存物件 Volume、Persistent Volume
策略物件 SecurityContext、ResourceQuota、LimitRange

三種IP
Node IP : Node 節點IP地址,Node IP 是Kubernetes叢集中每個節點的物理網絡卡的IP地址
Pod IP : Pod的IP地址 ,是一個虛擬二層網路
Cluster IP: Service的IP地址 ,也是一個虛擬IP,

資源物件

Pod: 是kuberneters 最重要最基本的概念,也是最簡的單位。 每個Pod都有一個Pause容器。
Pod型別:普通的Pod 和靜態的Pod
Label(標籤):核心概念,Label是附著到object上(例如Pod、Node、Service、RC等)的鍵值對。可以在建立object的時候指定,也可以在object建立後隨時指定。Labels的值對系統本身並沒有什麼含義,只是對使用者才有意義。
Replication Controller 和 ReplicaSet :用來確保容器應用的副本數始終保持在使用者定義的副本數。ReplicaSet 與Deployment 這兩個資源物件逐步替換之前RC的作用。雖然ReplicaSet可以獨立使用,但一般還是建議使用 Deployment 來自動管理ReplicaSet,這樣就無需擔心跟其他機制的不相容問題;

  • Pod期待的副本數(replicas)
  • 用於帥選目標Pod的Label Selector
  • 當Pod的副本數小於預期數量時,用於建立新Pod的Pod模板(template)

Deployment : 在Pod的管理物件RC、Deployment、DaemonSet和Job都是面向無狀態的服務
StatefulSet : 是為了解決有狀態服務的問題(對應Deployments和ReplicaSets是為無狀態服務而設計)

  • 穩定的持久化儲存,即Pod重新排程後還是能訪問到相同的持久化資料,基於PVC來實現
  • 穩定的網路標誌,即Pod重新排程後其PodName和HostName不變,基於Headless Service(即沒有Cluster IP的Service)來實現
  • 有序部署,有序擴充套件,即Pod是有順序的,在部署或者擴充套件的時候要依據定義的順序依次依次進行(即從0到N-1,在下一個Pod執行之前所有之前的Pod必須都是Running和Ready狀態),基於init containers來實現
  • 有序收縮,有序刪除(即從N-1到0)
    DaemonSet : 確保全部(或者一些)Node 上執行一個 Pod 的副本。當有 Node 加入叢集時,也會為他們新增一個 Pod 。當有 Node 從叢集移除時,這些 Pod 也會被回收。刪除 DaemonSet 將會刪除它建立的所有 Pod。
    Job:
    Horizontal Pod Autoscaling (HPA) : 使Pod水平自動縮放。Horizontal Pod Autoscaling僅適用於Deployment和ReplicaSet;

服務發現

Service 是一種抽象的:一個 Pod 的邏輯分組,一種可以訪問它們的策略 —— 通常稱為微服務。通常是通過 Label Selector實現的(還有沒有 selector 的 Service)。
在這裡插入圖片描述
Kubernetes Service 能夠支援 TCP 和 UDP 協議,預設 TCP 協議

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: backend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
      

Namespace :名稱空間為Kubernetes叢集提供虛擬的隔離作用,Kubernetes叢集初始有兩個名稱空間,分別是預設名稱空間default和系統名稱空間kube-system,除此以外,管理員可以可以建立新的名稱空間滿足需要。
Secret 金鑰物件 : Secret是用來儲存和傳遞密碼、金鑰、認證憑證這些敏感資訊的物件。
從Kubernetes的系統架構、技術概念和設計理念,我們可以看到Kubernetes系統最核心的兩個設計理念:一個是容錯性,一個是易擴充套件性。容錯性實際是保證Kubernetes系統穩定性和安全性的基礎,易擴充套件性是保證Kubernetes對變更友好,可以快速迭代增加新功能的基礎。