kubernetes 的volume 配置

kubernetes 的volume 配置

標籤(空格分隔):kubernetes系列linux


  • 一:kuberentes 的volume 配置

一:kuberentes 的volume 配置

1.1 背景

說明:

容器磁盤上的文件的生命週期是短暫的,這就使得在容器中運行重要應用時會出現一些問題。首先,當容器崩潰
時,kubelet 會重啓它,可是容器中的文件將丟失——容器以乾淨的狀態(鏡像最初的狀態)從新啓動。其次,在
Pod 中同時運行多個容器時,這些容器之間一般須要共享文件。Kubernetes 中的  Volume 抽象就很好的解決了
這些問題

Kubernetes 中的卷有明確的壽命 —— 與封裝它的 Pod 相同。所f以,卷的生命比 Pod 中的全部容器都長,當這
個容器重啓時數據仍然得以保存。固然,當 Pod 再也不存在時,卷也將不復存在。也許更重要的是,Kubernetes
支持多種類型的卷,Pod 能夠同時使用任意數量的卷

image_1e375j3051qbosoe111ub5o1sev9.png-73kB

1.2 卷的類型

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

1.3 emptyDir

當 Pod 被分配給節點時,首先建立  emptyDir 卷,而且只要該 Pod 在該節點上運行,該卷就會存在。正如卷的名
字所述,它最初是空的。Pod 中的容器能夠讀取和寫入  emptyDir 卷中的相同文件,儘管該卷能夠掛載到每一個容
器中的相同或不一樣路徑上。當出於任何緣由從節點中刪除 Pod 時, emptyDir 中的數據將被永久刪除

image_1e375le3vn55njt1o9i1jv7t4m.png-50.3kB

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

image_1e42jvgfajlj1jt21ntftlvvcr9.png-81kB


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

image_1e42kla6t9jck2a36cndv11cmm.png-99.2kB

image_1e43qjh2k1bre1lc0cth1lma1mrh9.png-43.5kB

image_1e43qk2en1qt91q5jthdlar1bssm.png-50kB

image_1e43qkj3n6esrg21lvoa112qo13.png-64.5kB


1.4 hostpath

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

image_1e43rbrc6o8e1f7t1gum9305p11t.png-75.3kB


image_1e43qrkj816sfejoo6a1on1otr1g.png-201.5kB

使用這種卷類型是請注意,由於:

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

image_1e43shu279kg9oc6e41d7l36a2a.png-164.7kB

image_1e43sj6ij1qcp12mi167d1s3kuio2q.png-159.8kB

image_1e43sjsp1bv1lq21nfm1etkoml3d.png-26.3kB

image_1e43skdlh1mnvcct1gh4k8uh2d3q.png-141.8kB

image_1e43sl3bgbqs114g1aak97u11tp4a.png-38kB

相關文章
相關標籤/搜索