k8s之數據存儲


查看k8s支持的存儲類

kubectl explain pods.spec.volumes

 

 

1.emptydir

kubectl explain pods.spec.volumes.emptyDir

 

kubectl explain pods.spec.containers 容器中設置

kubectl explain pods.spec.containers.volumeMounts

 

實例:

cd manifests/

mkdir volumes

cd volumes/

cp ../pod-demo.yaml  ./

mv pod-demo.yaml pod-vol-demo.yaml

vim pod-vol-demo.yaml

 

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  關聯pod存儲卷名

 mountPath: /data/web/html  容器中掛載的路徑

 

  - name: busybox

    image: busybox:latest

imagePullPolicy: IfNotPresent

volumeMounts:

- name: html

   mountPath: /data

    command:

    - "/bin/sh"

    - "-c"

    - "sleep 3600"

  volumes:  pod存儲卷

  - name: html  pod存儲卷名

    emptyDir: {}  pod存儲卷類型

 

kubectl apply -f pod-vol-demo.yaml

kubectl exec -it pod-demo -c busybox -- /bin/sh

                     -c  指定busybox容器

df -hT 查看掛載

cd /data

date >> index.html

 

 

 

 kubectl exec -it pod-demo -c myapp  -- /bin/sh

                     連入myapp容器

 

df -hT

cd /data/web/html

cat index.html 可以判定兩個容器共享一個目錄 emptyDir

 

 

實例:

kubectl delete -f pod-vol-demo.yaml

apiVersion: v1

kind: Pod

metadata:

  name: pod-demo

  namespace: default

  labels:

    app: myapp

    tier: frontend

spec:

  containers:

  - name: myapp

    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: {}

 

kubectl apply -f pod-vol-demo.yaml

curl 10.244.1.120 訪問驗證數據

 

 

 

1.1 gitrRepo

kubectl explain pod.spec.volumes.gitRepo

 

 

 

2.hostPath 宿主機路徑 掛載宿主機真實目錄,pod消失,數據還在宿主機目錄上

節點級持久

 kubectl explain pod.spec.volumes.hostPath

vim pod-hostpath-vol.yaml

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:  pod存儲卷類型

      path: /data/pod/volume1 指定的hostPath存儲路徑,即本地目錄路徑

      type: DirectoryOrCreate 類型 目錄不存在則創建

 

 

在兩個節點執行,用於驗證

mkdir -p /data/pod/volume1

echo "node1.baidu.com" > /data/pod/volume1/index.html

 

創建

kubectl apply -f pod-hostpath-vol.yaml

kubectl get pods -o wide

 

驗證

curl 10.244.1.122

 

 

 3.網絡共享存儲  nfs  具有持久性

實例

node2作為 nfs共享存儲

yum install nfs-utils -y

mkdir /data/volumes

vim /etc/exports

/data/volumes   192.168.81.0/24(rw,no_root_squash) 壓縮root權限

systemctl start nfs  nfs工作在2049端口

 

node1節點測試

mount -t nfs node2:/data/volumes /mnt

 

不支持掛載,安裝nfs套件

yum install nfs-utils -y

mount -t nfs node2:/data/volumes /mnt 測試能掛載上才能做網絡共享存儲

然后卸載 umount /mnt/

 

cp pod-hostpath-vol.yaml pod-nfs-vol.yaml

kubectl explain pods.spec.volumes.nfs

vim pod-nfs-vol.yaml

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:  指定pod存儲卷類型為nfs網絡共享存儲

      path: /data/volumes  nfs的共享目錄

      server: node2  nfs服務器地址

 

 

創建

kubectl apply -f pod-nfs-vol.yaml

 

驗證

kubectl get pods  -o wide

nfs共享目錄創建一個網頁

echo "<h1>nfs store</h1>"  > /data/volumes/index.html

curl 10.244.2.96

 

 

 

4.persistentVolumeClaim  PVC 持久存儲申請  

kubectl explain pod.spec.volumes.persistentVolumeClaim

kubectl explain pvc

pvc pv一一對應

pvc可以給多個pod訪問

 

創建pv

以前面nfs為存儲

cd /data/volumes

mkdir v{1,2,3,4,5}

vim /etc/exports

/data/volumes/v1        192.168.81.0/24(rw,no_root_squash)

/data/volumes/v2        192.168.81.0/24(rw,no_root_squash)

/data/volumes/v3        192.168.81.0/24(rw,no_root_squash)

/data/volumes/v4        192.168.81.0/24(rw,no_root_squash)

/data/volumes/v5        192.168.81.0/24(rw,no_root_squash)

 

systemctl restart nfs

exportfs -arv

node1showmount -e node2

masterk8s5個存儲卷定義成pv

kubectl explain pv

kubectl explain pv.spec

kubectl explain pv.spec.nfs

vim pv-demo.yaml

 

apiVersion: v1

kind: PersistentVolume 資源類型 pv

metadata:

  name: pv001  pv

  labels:  pv標簽

    name: pv001

    polity: fast

spec:  pv規格

  nfs:  pv的存儲類型nfs

    path: /data/volumes/v1  nfs共享的目錄

server: node2  nfs服務器地址

accessModes: ["ReadWriteMany","ReadWriteOnce"]  pv讀寫模式 多路讀寫 單路讀寫

capacity:  pv最大容量

storage: 1Gi   最大容量1Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv002

  labels:

    name: pv002

    polity: fast

spec:

  nfs:

    path: /data/volumes/v2

    server: node2

  accessModes: ["ReadWriteOnce"]

  capacity:

    storage: 5Gi

---

 

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv003

  labels:

    name: pv003

    polity: fast

spec:

  nfs:

    path: /data/volumes/v3

    server: node2

  accessModes: ["ReadWriteMany","ReadWriteOnce"]

  capacity:

    storage: 20Gi

---

 

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv004

  labels:

    name: pv004

    polity: fast

spec:

  nfs:

    path: /data/volumes/v4

    server: node2

  accessModes: ["ReadWriteMany","ReadWriteOnce"]

  capacity:

    storage: 10Gi

---

 

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv005

  labels:

    name: pv005

    polity: fast

spec:

  nfs:

    path: /data/volumes/v5

    server: node2

  accessModes: ["ReadWriteMany","ReadWriteOnce"]

  capacity:

    storage: 10Gi

    

 

創建

kubectl apply -f pv-demo.yaml

kubectl get pv

 

注:RECLAIM POLICY 回收策略  pvc綁定解除之后數據處理問題

 

 

創建pvc

vim pod-vol-pvc.yaml

 

apiVersion: v1

kind: PersistentVolumeClaim 資源類型 pvc

metadata:

  name: mypvc   pvc

  namespace: default  pvc名稱空間要與使用該pvcpod名稱空間一致

spec: 規格

  accessModes: ["ReadWriteMany"]  指定使用pv的方式 多路讀寫

  resources:  要求的資源大小

    requests:  要求

      storage: 6Gi 大小6G存儲

 

---

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:  指定pod存儲類型

  - name: html  pod存儲名

    persistentVolumeClaim:  pod存儲類型為pvc

      claimName: mypvc  申請名,就是pvc

 

 

創建pvcpod

kubectl apply -f pod-vol-pvc.yaml

                             

 

驗證

 kubectl get pv 可以看到一個pv被綁定了

 kubectl get pvc 查看pvc

kubectl get pods -o wide

kubectl describe pods pod-vol-pvc

 

測試:

nfsv5目錄

echo test node v5 > index.html

然后在任一節點

curl 10.244.2.49

 

kubectl delete pods pod-vol-pvc  刪除pod數據依然在


免責聲明!

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



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