Kubernetes 架構及基礎概念

衣舞晨風發表於2017-10-12

一、K8S架構

這裡寫圖片描述

  • K8S 叢集組成
    • 分散式儲存(Etcd)
    • 控制節點(Master)
    • 工作節點(Node)
  • 只有 apiserver 與儲存通訊
    • 使用者直接訪問 apiserver
    • 內部程式,包括 kubelet, controller 均通過 apiserver 訪問儲存
    • 出於安全考慮
  • 配置管理操作宣告式而非命令式

二、基礎概念

1、Namespace與ResourceQuota

Namespace

  • 物理叢集上的虛擬叢集
  • 使用者級別的資源限制,使用者只需關注 namespace 上的資源情況
  • 預設沒有資源限制,需要通過 ResourceQuota 來配額

這裡寫圖片描述

ResourceQuota: Namespace 資源配額

  • 計算資源配額
    • CPU,MEM
  • k8s 元素數量配額

2、Resource

這裡寫圖片描述

3、Label 和 Selector

Label

  • 用於區分資源的 key/value 鍵值對

  • 資源可以擁有多個 label

這裡寫圖片描述

selector

  • 根據 label 選擇對應的資源
  • Equality-based 選擇器

    • kubectl get pods -l environment=production,tier=frontend
  • Set-based 選擇器

    • kubectl get pods -l ‘environment in (production),tier in (frontend)’

4、Master節點

這裡寫圖片描述

5、Node

這裡寫圖片描述

6、Pod

  • 多個容器的集合
  • 最小排程單位
  • 共享 namespace
    • PID 名字空間(同一 Pod 內的容器能看到其他容器的PID,Docker 容器暫不支援)
    • 網路名字空間(共享 IP 和 localhost)
    • IPC 名字空間(能夠使用 SystemV IPC 或者POSIX 訊息佇列進行通訊)
    • UTS 名字空間(共享同一個主機名)
  • Pod 的網路原則:一 Pod 一 IP
  • 防止埠衝突
  • 方便服務註冊

這裡寫圖片描述

7、Service

  • 一個唯一指定的名字
  • 一個虛擬 IP 和埠號
  • 服務型別
    • ClusterIP(default)
    • Nodeport
    • LoadBalancer
  • 服務發現
    • 環境變數
    • DNS

這裡寫圖片描述

8、ReplicationController

ReplicationController(簡稱RC)是確保使用者定義的Pod副本數保持不變。
這裡寫圖片描述

RC 替代方法:
ReplicaSet
ReplicaSet是支援新的set-based選擇器要求的下一代ReplicationController 。
Deployment(推薦)

9、StatefulSets

Pod排程執行時,如果應用不需要任何穩定的標示、有序的部署、刪除和擴充套件,則應該使用一組無狀態副本的控制器來部署應用,例如 Deployment 或 ReplicaSet更適合無狀態服務需求。

10、Volumes

  • Pod 生命週期內一直可用
  • Pod 內容器共享
  • 當前支援的型別
    • emptyDir:Pod 與 Node 繫結/解綁時建立/刪除
    • hostPath:掛載 Node 上的目錄
    • gcePersistentDisk
    • nfs

這裡寫圖片描述

Volumes(儲存卷)是Pod中能夠被多個容器訪問的共享目錄。Kubernetes的Volumes概念與Docker的Volumes比較類似,但並不完全相同。Kubernetes中的Volumes與Pod生命週期相同,而不與容器的生命週期相關。當容器終止或者重啟時,Volumes中的資料也不會丟失。另外,Kubernetes支援多種型別的Volumes,並且一個Pod可以同時使用任意多個Volumes。

emptyDir:一個EmptyDir Volume是在Pod分配到Node時建立的。從它的名稱就可以看出,它的初始內容為空。同一個Pod中所有容器可以讀和寫EmptyDir中的相同檔案。當Pod從Node上移除時,EmptyDir中的資料也會永久刪除。
EmptyDir的一些用途如下:
- 臨時空間,例如用於某些應用程式執行時所需的臨時目錄,且無需永久保留;
- 長時間任務的中間過程CheckPoint臨時儲存目錄;
- 一個容器需要從另一個容器中獲取資料的目錄(多容器共享目錄)。

hostPath:在Pod上掛載宿主機上的檔案或目錄。
hostPath通常可以用於:

  • 容器應用程式生成的日誌檔案需要永久儲存,可以使用宿主機的高速檔案系統進行儲存;
  • 需要訪問宿主機上Docker引擎內部資料結構的容器應用,可以通過定義hostPath為宿主機/var/lib/docker目錄使得容器內部應用可以直接訪問Docker的檔案系統。
  • 在不同Node上具有相同配置的Pod可能會因為宿主機上的目錄和檔案不同而導致對Volume上目錄和檔案的訪問結果不一致;

11、ConfigMap

  • 應用映象和配置分離
  • 資料型別為鍵值對
  • Pod 使用 ConfigMap 的三種方式
    • 命令列引數
    • 環境變數
    • 資料卷檔案

12、Deployment

  • 確保任意時間都有指定數量的Pod “副本”在執行
  • 通過 Pod 選擇器篩選出對應的Pod 例項並實時監控其狀態和數量
  • 提供 Pod 和 Replica Set 的宣告式更新
  • 把部署,滾動更新和回滾進行了自動化
  • 建立 Deployment
    • kubectl create -f docs/user-guide/nginx-deployment.yaml –record
  • 更新 Deployment
    • kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
  • 檢視 Deployment 的修訂版本
    • kubectl rollout history deployment/nginx-deployment

Deployment負責建立和更新應用。建立Deployment後,Kubernetes master 會將Deployment建立好的應用例項排程到叢集中的各個節點。
應用例項建立完成後,Kubernetes Deployment Controller會持續監視這些例項。如果管理例項的節點被關閉或刪除,那麼 Deployment Controller將會替換它們,實現自我修復能力。
建立Deployment時,需要為應用程式指定容器映象以及要執行的副本數,後續可以通過Deployment更新來更改該這些資訊。

13、API group

  • 每個 API group 中的資源可以單獨的 enable/disable
  • 每個 API group 有不同的版本,單獨開發維護

14、PersistentVolume (PV)

  • 叢集中的一塊網路儲存
  • 獨立於 Pod 的生命週期
  • 支援的 PV 型別
    • GCEPersistentDisk
    • AWSElasticBlockStore
    • NFS
    • Cinder
    • iSCSI

本文整理自網路

個人微信公眾號:
這裡寫圖片描述

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章