kubernetes 的數據的存儲 存儲卷


根據應用本身是否 需要持久存儲數據,以及某一此請求和此前的請求是否有關聯性,可以分為四類應用:

  1.有狀態要存儲 2.有狀態無持久存儲 3.無狀態無持久存儲4.無狀態有持久存儲

在k8s上的數據持久性:1.emptyDir:只在節點本地使用,一旦pod刪除存儲卷也刪除。只是用來做臨時目錄,可是做緩存用 沒有任何持久性

             2.hostPath:主機路徑,直接在宿主機上找一個目錄與容器建立關聯關系,也不具有真正意義上的持久性

             3.網絡連接性存儲 1)傳統意義上的存儲設備,本地的san(iscsi),nas(nfs,cifs)

                   2) 分布式存儲 文件系統級別的(glusterfs,cephfs) 塊存儲級別的(ceph) 

                   3)雲存儲  EBS、Azure Disk、

 可以通過命令  kubectl explain pod.spec.volumes

一、emptyDir:同一個pod內的多個容器可以共享同一個存儲卷,pod刪除存儲卷也刪除。不能實現數據存儲化

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    create_by: yiruiduan
spec:
  containers:
  - name: nginx
    image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html/
  - name: busybox
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: html
      mountPath: /data
    command: ['/bin/sh','-c',"while true;do echo $(date) >>/data/index.html;sleep 2;done"]
  volumes:
  - name: html
    emptyDir: {}

訪問nginx就可以看到動態生成的index.html

二、hostPathsu宿主機路徑,把pod所在的宿主機之上的文件 系統的某一目錄,與pod建立關系,在pod被刪除的時候,這個存儲卷是不會被刪除的。所以只要同一個pod能夠調度到同一個節點上,對應的數據依然是存在的。這只是節點及的持久,節點down了數據也就沒有了。存在數據丟失

apiVersion: v1
kind: Pod
metadata:
  name: pod-vol-hostpath
  namespace: default
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html

  volumes:
  - name: html
    hostPath:
      path: /data/pod/volume1
      type: DirectoryOrCreate #如果目錄不存在就創建

三、nfs共享存儲,節點掛在共享存儲。無論調度在那個節點上所有數據能共享訪問。

apiVersion: v1
kind: Pod
metadata:
  name: pod-vol-nfs
  namespace: default
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html

  volumes:
  - name: html
    nfs:
      path: /k8s #nfs所共享的目錄
      server: 192.168.1.120   #nfs服務器地址

四、pvc(persistentVolumeClaim)

        

首先要制作pv,它是不包含名稱空間中的。通過nfs共享目錄的形式

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv001
  labels:
    name: pv001
spec:
  nfs:
    path: /k8s/v1
    server: 192.168.1.120
  accessModes: ["ReadWriteMany","ReadWriteOnce"]   #訪問模式
capacity: #設置pv的大小 storage: 2Gi

制作pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
  namespace: default
spec:
  accessModes: ["ReadWriteMany"]    #是pv的訪問模式的子集
  resources:                        #所需pv的大小 
    requests:
      storage: 6Gi

pod 使用pvc

apiVersion: v1
kind: Pod
metadata:
  name: pod-vol-pvc
  namespace: default
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html

  volumes:
  - name: html
    persistentVolumeClaim:
      claimName: mypvc

pv的動態供給


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM