Kubernetes 架構及基礎概念
一、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
相關文章
- 4、kubernetes基礎概念
- ES 架構及基礎 - 1架構
- MyBatis 基礎搭建及架構概述MyBatis架構
- 分散式 PostgreSQL - Citus 架構及概念分散式SQL架構
- 分散式 PostgreSQL - Citus 架構及概念分散式SQL架構
- 【Kubernetes系列】第2篇 基礎概念介紹
- MySQL基礎架構MySql架構
- MySQL 基礎架構MySql架構
- 資料湖架構及概念簡介架構
- Spring Cloud雲架構-Restful 基礎架構SpringCloud架構REST
- 架構設計之一——基礎架構架構
- redis哨兵架構基礎Redis架構
- MySQL基礎架構分析MySql架構
- 探索ABP基礎架構架構
- MySQL之基礎架構MySql架構
- 《SpringBoot 基礎架構師》Spring Boot架構
- 搭建基礎架構-Page架構
- 搭建基礎架構-ResultMsg架構
- 深入理解TensorFlow架構設計與實現原理 3 :基礎概念架構
- 架構設計 | 分散式事務①概念簡介和基礎理論架構分散式
- 《架構基礎 從需求到架構》讀書架構
- 《大前端 基礎元件》系列 CSS基礎架構前端元件CSS架構
- Python基礎知識架構Python架構
- Angular基礎筆記(架構)Angular筆記架構
- RESTful 架構 基礎講解REST架構
- 基礎架構遷雲(三)架構
- 基礎架構遷雲(一)架構
- 基礎架構遷雲二()架構
- HBase架構與基礎命令架構
- 探索ABP基礎架構-下架構
- IT架構的基礎實施架構
- Mysql實戰:基礎架構MySql架構
- HotDB 基礎架構詳解架構
- 銀行IT架構變遷史(金融IT基礎架構)架構
- 前端資料結構---相關基礎概念前端資料結構
- elasticsearch(4)- 架構概念Elasticsearch架構
- 使用Spring Cloud Kubernetes基於Kubernetes、Spring Boot和Docker構建微服務架構 - MoriohCloudSpring BootDocker微服務架構
- Kubernetes架構簡述架構
- 圖解 Kubernetes 架構圖解架構