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對變更友好,可以快速迭代增加新功能的基礎。