kubernetes 存儲volume,pv和pvc的使用


emptyDIR 臨時目錄

hostPath :使用主機的路徑

網絡存儲:

  傳統的設備存儲:NAS,SAN

  分布式存儲:glusterfs,rbd,cephfs

     雲存儲:EBS,Azure,阿里雲的 

一、emptyDir 的類型:一個pod里面2個容易,掛載同一個目錄,

注意:emptyDir的生命周期同pod周期,簡單來說,pod刪除了,emptyDir也隨之刪除

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    ports:
    - name: http
      containerPort: 80
    volumeMounts:  #容器掛載
    - name: html
      mountPath: /data/web/html/
  - name: busybox
    image: busybox:latest
    command: ["/bin/sh" ,"-c","sleep 3600"]
    volumeMounts:   #容器掛載
    - name: html
      mountPath: /data/
  volumes:     #定義存儲
  - name: html
    emptyDir: {}

二、hostPath 類型存儲

apiVersion: v1
kind: Pod
metadata:
  name: nginx-volume
  namespace: default
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html/
  volumes:
  - name: html
    hostPath:
      path: /data/nginx/v1/
      type: DirectoryOrCreate

三、nfs 類型存儲

首先要准備好nfs,我在172.17.1.36的機器上安裝nfs,到處的目錄為/nfs/data

yum install nfs-utils

vim vim /etc/exports   

/nfs/data/    172.17.0.0/16(rw,no_root_squash)   

systemctl start nfs

nfs准備好了,注意,在pod的節點機器要一定確定可以掛載nfs類型的,否則創建pod會出錯。執行yum install nfs-utils  就可以掛載了

nfs pod 的yaml文件:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-volume-nfs
  namespace: default
spec:
  containers:
  - name: nginx-nfs
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html/
  volumes:
  - name: html
    nfs:
      path: /nfs/data/
      server: 172.17.1.36

四、pv,pvc的使用

對於pv和pvc,首先要准備存儲的,我用的是nfs,在172.17.1.36的節點上划分了5個路徑作為存儲的設備。

mkdir /data/{v1,v2,v3,v4,v5} -pv

vim /etc/exports

添加如下的內容:

/data/v1 172.17.0.0/16(rw,no_root_squash)
/data/v2 172.17.0.0/16(rw,no_root_squash)
/data/v3 172.17.0.0/16(rw,no_root_squash)
/data/v4 172.17.0.0/16(rw,no_root_squash)
/data/v5 172.17.0.0/16(rw,no_root_squash)

保存,導出下。

exportfs -avr

查看下是否正常。

nfs的存儲的好了。下一步要先創建pv,yaml文件如下

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv01
  labels:
    name: pv01
spec:
  nfs:
    path: /data/v1/
    server: 172.17.1.36
  accessModes: ["ReadWriteOnce","ReadWriteMany"]
  capacity:
    storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv02
  labels:
    name: pv02
spec:
  nfs:
    path: /data/v2/
    server: 172.17.1.36
  accessModes: ["ReadWriteOnce","ReadWriteMany"]
  capacity:
    storage: 3Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv03
  labels:
    name: pv03
spec:
  nfs:
    path: /data/v3/
    server: 172.17.1.36
  accessModes: ["ReadWriteOnce","ReadWriteMany"]
  capacity:
    storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv04
  labels:
    name: pv04
spec:
  nfs:
    path: /data/v4/
    server: 172.17.1.36
  accessModes: ["ReadWriteOnce","ReadWriteMany"]
  capacity:
    storage: 10Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv05
  labels:
    name: pv05
spec:
  nfs:
    path: /data/v5/
    server: 172.17.1.36
  accessModes: ["ReadWriteOnce","ReadWriteMany"]
  capacity:
    storage: 10Gi

 kubectl apply -f pv-nfs.yaml

顯示,pv創建完成

接下來創建pvc 和pod,yaml文件如下

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
  namespace: default
spec:
  accessModes: ["ReadWriteMany"]
  resources:
    requests:
      storage: 5Gi               #到這里是創建pvc的
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx-volume-pvc
  namespace: default
spec:
  containers:
  - name: nginx-pvc
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html/
  volumes:               #這里是選擇volume的類型
  - name: html
    persistentVolumeClaim:
      claimName: mypvc

 

 顯示pvc創建好了,同時pvc綁定了一個pv,到此pv和pvc的安裝部署完成。

ps:pv和pvc是一對一綁定的。但是多個pod可以掛載同一個pvc  

通常使用的流程是,首先創建存儲,在創建pv,接着創建pvc,pod掛載到相應的pvc。


免責聲明!

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



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