
- Kubernetes 教程
- Kubernetes - 首頁
- Kubernetes - 概覽
- Kubernetes - 架構
- Kubernetes - 設定
- Kubernetes - 映象
- Kubernetes - 作業
- Kubernetes - 標籤和選擇器
- Kubernetes - 名稱空間
- Kubernetes - 節點
- Kubernetes - 服務
- Kubernetes - Pod
- Kubernetes - 複製控制器
- Kubernetes - 副本集
- Kubernetes - 部署
- Kubernetes - 卷
- Kubernetes - 金鑰
- Kubernetes - 網路策略
- 高階 Kubernetes
- Kubernetes - API
- Kubernetes - Kubectl
- Kubernetes - Kubectl 命令
- Kubernetes - 建立應用程式
- Kubernetes - 應用程式部署
- Kubernetes - 自動擴充套件
- Kubernetes - 儀表盤設定
- Kubernetes - 監控
- Kubernetes 有用資源
- Kubernetes - 快速指南
- Kubernetes - 有用資源
- Kubernetes - 討論
Kubernetes - 卷
在 Kubernetes 中,卷可以被認為是一個目錄,Pod 中的容器可以訪問該目錄。Kubernetes 中有不同型別的卷,並且型別定義了卷是如何建立的以及其內容。
卷的概念在 Docker 中就已經存在,但唯一的問題是卷非常侷限於特定的 Pod。一旦 Pod 的生命週期結束,卷也會丟失。
另一方面,透過 Kubernetes 建立的卷不受任何容器的限制。它支援 Pod 內部署的任何或所有容器。Kubernetes 卷的一個關鍵優勢是,它支援不同型別的儲存,其中 Pod 可以同時使用多個儲存。
Kubernetes 卷的型別
以下是 Kubernetes 卷的一些常用型別:
emptyDir - 當 Pod 首次分配到節點時,會建立此型別的卷。只要 Pod 在該節點上執行,它就會保持活動狀態。卷最初為空,Pod 中的容器可以讀取和寫入 emptyDir 卷中的檔案。一旦 Pod 從節點中移除,emptyDir 中的資料就會被擦除。
hostPath - 此型別的卷將主機節點檔案系統中的檔案或目錄掛載到 Pod 中。
gcePersistentDisk - 此型別的卷將 Google Compute Engine (GCE) 永續性磁碟掛載到 Pod 中。當 Pod 從節點中移除時,gcePersistentDisk 中的資料保持不變。
awsElasticBlockStore - 此型別的卷將 Amazon Web Services (AWS) Elastic Block Store 掛載到 Pod 中。與 gcePersistentDisk 一樣,當 Pod 從節點中移除時,awsElasticBlockStore 中的資料保持不變。
nfs - nfs 卷允許將現有的 NFS(網路檔案系統)掛載到 Pod 中。當 Pod 從節點中移除時,nfs 卷中的資料不會被擦除。卷僅被解除安裝。
iscsi - iscsi 卷允許將現有的 iSCSI(IP 上的 SCSI)卷掛載到 Pod 中。
flocker - 它是一個開源的叢集容器資料卷管理器。它用於管理資料卷。flocker 卷允許將 Flocker 資料集掛載到 Pod 中。如果 Flocker 中不存在資料集,則需要先使用 Flocker API 建立它。
glusterfs - Glusterfs 是一個開源的網路檔案系統。glusterfs 卷允許將 glusterfs 卷掛載到 Pod 中。
rbd - RBD 代表 Rados 塊裝置。rbd 卷允許將 Rados 塊裝置卷掛載到 Pod 中。當 Pod 從節點中移除後,資料仍然保留。
cephfs - cephfs 卷允許將現有的 CephFS 卷掛載到 Pod 中。當 Pod 從節點中移除後,資料保持不變。
gitRepo - gitRepo 卷掛載一個空目錄,並將 git 儲存庫克隆到其中,供 Pod 使用。
secret - secret 卷用於將敏感資訊(例如密碼)傳遞給 Pod。
persistentVolumeClaim - persistentVolumeClaim 卷用於將 PersistentVolume 掛載到 Pod 中。PersistentVolume 是一種允許使用者“宣告”永續性儲存(例如 GCE 永續性磁碟或 iSCSI 卷)而不必瞭解特定雲環境的詳細資訊的方法。
downwardAPI - downwardAPI 卷用於使下行 API 資料可供應用程式使用。它掛載一個目錄並在純文字檔案中寫入請求的資料。
azureDiskVolume - AzureDiskVolume 用於將 Microsoft Azure 資料磁碟掛載到 Pod 中。
持久卷和持久卷宣告
持久卷 (PV) - 它是由管理員預配的一塊網路儲存。它是叢集中的一個資源,獨立於使用 PV 的任何單個 Pod。
持久卷宣告 (PVC) - Kubernetes 為其 Pod 請求的儲存稱為 PVC。使用者無需瞭解底層預配。宣告必須在建立 Pod 的同一個名稱空間中建立。
建立持久卷
kind: PersistentVolume ---------> 1 apiVersion: v1 metadata: name: pv0001 ------------------> 2 labels: type: local spec: capacity: -----------------------> 3 storage: 10Gi ----------------------> 4 accessModes: - ReadWriteOnce -------------------> 5 hostPath: path: "/tmp/data01" --------------------------> 6
在上面的程式碼中,我們定義了:
kind: PersistentVolume → 我們將 kind 定義為 PersistentVolume,這告訴 Kubernetes 正在使用的 yaml 檔案用於建立持久卷。
name: pv0001 → 我們要建立的持久卷的名稱。
capacity: → 此規範將定義我們嘗試建立的 PV 的容量。
storage: 10Gi → 這告訴底層基礎架構我們正在嘗試在定義的路徑上宣告 10Gi 空間。
ReadWriteOnce → 這告訴我們正在建立的卷的訪問許可權。
path: "/tmp/data01" → 此定義告訴機器我們正在嘗試在底層基礎架構上的此路徑下建立卷。
建立 PV
$ kubectl create –f local-01.yaml persistentvolume "pv0001" created
檢查 PV
$ kubectl get pv NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE pv0001 10Gi RWO Available 14s
描述 PV
$ kubectl describe pv pv0001
建立持久卷宣告
kind: PersistentVolumeClaim --------------> 1 apiVersion: v1 metadata: name: myclaim-1 --------------------> 2 spec: accessModes: - ReadWriteOnce ------------------------> 3 resources: requests: storage: 3Gi ---------------------> 4
在上面的程式碼中,我們定義了:
kind: PersistentVolumeClaim → 它指示底層基礎架構我們正在嘗試宣告指定數量的空間。
name: myclaim-1 → 我們嘗試建立的宣告的名稱。
ReadWriteOnce → 這指定了我們嘗試建立的宣告的模式。
storage: 3Gi → 這將告訴 Kubernetes 我們嘗試宣告的空間量。
建立 PVC
$ kubectl create –f myclaim-1 persistentvolumeclaim "myclaim-1" created
獲取有關 PVC 的詳細資訊
$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESSMODES AGE myclaim-1 Bound pv0001 10Gi RWO 7s
描述 PVC
$ kubectl describe pv pv0001
將 PV 和 PVC 與 POD 一起使用
kind: Pod apiVersion: v1 metadata: name: mypod labels: name: frontendhttp spec: containers: - name: myfrontend image: nginx ports: - containerPort: 80 name: "http-server" volumeMounts: ----------------------------> 1 - mountPath: "/usr/share/tomcat/html" name: mypd volumes: -----------------------> 2 - name: mypd persistentVolumeClaim: ------------------------->3 claimName: myclaim-1
在上面的程式碼中,我們定義了:
volumeMounts: → 這是將在其中進行掛載的容器中的路徑。
Volume: → 此定義定義了我們將要宣告的卷定義。
persistentVolumeClaim: → 在此之下,我們定義了將在定義的 Pod 中使用的卷名稱。