標籤(空格分隔):kubernetes系列linux
- 一:kuberentes 的volume 配置
說明: 容器磁盤上的文件的生命週期是短暫的,這就使得在容器中運行重要應用時會出現一些問題。首先,當容器崩潰 時,kubelet 會重啓它,可是容器中的文件將丟失——容器以乾淨的狀態(鏡像最初的狀態)從新啓動。其次,在 Pod 中同時運行多個容器時,這些容器之間一般須要共享文件。Kubernetes 中的 Volume 抽象就很好的解決了 這些問題 Kubernetes 中的卷有明確的壽命 —— 與封裝它的 Pod 相同。所f以,卷的生命比 Pod 中的全部容器都長,當這 個容器重啓時數據仍然得以保存。固然,當 Pod 再也不存在時,卷也將不復存在。也許更重要的是,Kubernetes 支持多種類型的卷,Pod 能夠同時使用任意數量的卷
Kubernetes 支持如下類型的卷: 1. awsElasticBlockStore azureDisk azureFile cephfs csi downwardAPI emptyDir 2. fc flocker gcePersistentDisk gitRepo glusterfs hostPath iscsi local nfs 3. persistentVolumeClaim projected portworxVolume quobyte rbd scaleIO secret 4. storageos vsphereVolume
當 Pod 被分配給節點時,首先建立 emptyDir 卷,而且只要該 Pod 在該節點上運行,該卷就會存在。正如卷的名 字所述,它最初是空的。Pod 中的容器能夠讀取和寫入 emptyDir 卷中的相同文件,儘管該卷能夠掛載到每一個容 器中的相同或不一樣路徑上。當出於任何緣由從節點中刪除 Pod 時, emptyDir 中的數據將被永久刪除
emptyDir 的用法有: 暫存空間,例如用於基於磁盤的合併排序 用做長時間計算崩潰恢復時的檢查點 Web服務器容器提供數據時,保存內容管理器容器提取的文件
vim emp.yaml apiVersion: v1 kind: Pod metadata: name: test-pd spec: containers: - image: wangyanglinux/myapp:v1 name: test-container volumeMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volume emptyDir: {} ---- kubectl apply -f emp.yaml
vim emp1.yaml --- apiVersion: v1 kind: Pod metadata: name: test-pd1 spec: containers: - image: wangyanglinux/myapp:v1 name: test-container volumeMounts: - mountPath: /cache name: cache-volume - name: liveness-exec-container image: busybox imagePullPolicy: IfNotPresent command: ["/bin/sh","-c", "sleep 6000s"] volumeMounts: - mountPath: /test name: cache-volume volumes: - name: cache-volume emptyDir: {} ---- kubectl apply -f emp1.yml
hostPath 卷將主機節點的文件系統中的文件或目錄掛載到集羣中 hostPath 的用途以下: 1.1 運行須要訪問 Docker 內部的容器;使用 /var/lib/docker 的 hostPath 1.2 在容器中運行 cAdvisor;使用 /dev/cgroups 的 hostPath 1.3 容許 pod 指定給定的 hostPath 是否應該在 pod 運行以前存在,是否應該建立,以及它應該以什麼形式存在 1.4 除了所需的 path 屬性以外,用戶還能夠爲 hostPath 卷指定 type
使用這種卷類型是請注意,由於: 1.1 因爲每一個節點上的文件都不一樣,具備相同配置(例如從 podTemplate 建立的)的 pod 在不一樣節點上的行爲可能會有所不一樣 1.2 當 Kubernetes 按照計劃添加資源感知調度時,將沒法考慮 hostPath 使用的資源 1.3 在底層主機上建立的文件或目錄只能由 root 寫入。您須要在特權容器中以 root 身份運行進程,或修改主機上的文件權限以便寫入
vim host.yaml --- apiVersion: v1 kind: Pod metadata: name: test-pd spec: containers: - image: wangyanglinux/myapp:v1 name: test-container volumeMounts: - mountPath: /test-pd name: test-volume volumes: - name: test-volume hostPath: path: /data type: Directory --- kubectl apply -f host.yaml