日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

k8s存储卷(empyDir;hostPath;nfs)

發(fā)布時間:2024/9/3 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 k8s存储卷(empyDir;hostPath;nfs) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一: emptyDir 存儲卷
    • 1.1 為什么使用存儲卷
    • 1.2 emptyDir 存儲卷的作用
    • 1.3 示例
  • 二: hostPath卷
    • 2.1 作用
    • 2.2 示例
  • 三: nfs共享存儲
    • 3.1 安裝配置nfs服務(wù)
    • 3.2 master 節(jié)點操作

一: emptyDir 存儲卷

1.1 為什么使用存儲卷

容器磁盤上的文件的生命周期是短暫的,這就使得在容器中運行重要應(yīng)用時會出現(xiàn)一些問題。首先,當(dāng)容器崩潰時, kubelet會重啟它,但是容器中的文件將丟失一容器以干凈的狀態(tài)(鏡像最初的狀態(tài))重新啟動。

其次,在Pod中同時運行多個容器時,這些容器之間通常需要共享文件。Kubernetes中的Volume抽象就很好的解決了這些問題。Pod中的容器通過Pause容器共享Volume。

1.2 emptyDir 存儲卷的作用

emptyDir存儲卷當(dāng)Pod被分配給節(jié)點時,首先創(chuàng)建emptyDir卷,并且只要該Pod在該節(jié)點上運行,該卷就會存在。正如卷的名字所述,它最初是空的。Pod中的容器可以讀取和寫入emptyDir卷中的相同文件,盡管該卷可以掛載到每個容器中的相同或不同路徑上。當(dāng)出于任何原因從節(jié)點中刪除Pod時, emptyDir中的數(shù)據(jù)將被永久刪除

1.3 示例

[root@master demo]# mkdir /opt/volumes [root@master demo]# cd /opt/volumes/ [root@master volumes]# vim pod-emptydir.yaml apiVersion: v1 kind: Pod metadata:name: pod-emptydirnamespace: defaultlabels:app: myapptier: frontend spec:containers:- name: myappimage: ikubernetes/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80#定義容器掛載的內(nèi)容volumeMounts:#使用的存儲卷名稱,如果跟下面的volume字段name值相同,則表示使用volume的這個卷- name: html#掛載到容器的哪個目錄mountPath: /usr/share/nginx/html/- name: busyboximage: busybox:latestimagePullPolicy: IfNotPresentvolumeMounts:- name: html#在容器內(nèi)定義掛載存儲名稱和掛載路徑mountPath: /data/command: ['/bin/sh','-c','while true;do echo $(date) >> /data/index.html;sleep 5;done']#定義存儲卷volumes:#定義存儲卷的名稱- name: html#定義存儲卷的類型emptyDir: {} [root@master volumes]# kubectl apply -f pod-emptydir.yaml[root@master volumes]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-emptydir 2/2 Running 0 3s 10.244.1.146 node01 <none> <none>#在上面定義了兩個容器,其中一個容器輸入日期到index.html中,然后驗證范圍nginx的htmnl是否可以獲取日期 #同時,在進入兩個容器里,查看掛載數(shù)據(jù)卷的目錄的數(shù)據(jù),以驗證兩個容器之間掛載的emptyDir實現(xiàn)共享[root@master volumes]# curl 10.244.1.146 Tue Nov 9 09:56:53 UTC 2021 Tue Nov 9 09:56:58 UTC 2021 Tue Nov 9 09:57:03 UTC 2021 Tue Nov 9 09:57:08 UTC 2021 Tue Nov 9 09:57:13 UTC 2021 Tue Nov 9 09:57:18 UTC 2021 [root@master volumes]# kubectl exec -it pod-emptydir -c busybox error: you must specify at least one command for the container [root@master volumes]# kubectl exec -it pod-emptydir -c busybox sh / # cat /data/index.html Tue Nov 9 09:56:53 UTC 2021 Tue Nov 9 09:56:58 UTC 2021 Tue Nov 9 09:57:03 UTC 2021 Tue Nov 9 09:57:08 UTC 2021 Tue Nov 9 09:57:13 UTC 2021 Tue Nov 9 09:57:18 UTC 2021 [root@master volumes]# kubectl exec -it pod-emptydir -c myapp sh / # cat /usr/share/nginx/html/index.html Tue Nov 9 09:56:53 UTC 2021 Tue Nov 9 09:56:58 UTC 2021 Tue Nov 9 09:57:03 UTC 2021 Tue Nov 9 09:57:08 UTC 2021 Tue Nov 9 09:57:13 UTC 2021 Tue Nov 9 09:57:18 UTC 2021 Tue Nov 9 09:57:23 UTC 2021 Tue Nov 9 09:57:28 UTC 2021 Tue Nov 9 09:57:33 UTC 2021 Tue Nov 9 09:57:38 UTC 2021

二: hostPath卷

2.1 作用

hostPath卷將node節(jié)點的文件系統(tǒng)中的文件或者目錄掛載到集群中

hostPath可以實現(xiàn)持久存儲,但是在node節(jié)點故障時,也會導(dǎo)致數(shù)據(jù)的丟失

2.2 示例

#在node01節(jié)點上創(chuàng)建掛載目錄 [root@node01 ~]# mkdir -p /data/pod/volume1 [root@node01 ~]# echo 'node01.myweb.com' > /data/pod/volume1/index.html#在node02 節(jié)點上創(chuàng)建掛載目錄 [root@node02 ~]# mkdir -p /data/pod/volume1 [root@node02 ~]# echo 'node02.myweb.com' > /data/pod/volume1/index.html [root@master volumes]# vim pod-hostpath.yaml apiVersion: v1 kind: Pod metadata:name: pod-hostpathnamespace: default spec:containers:- name: myappimage: ikubernetes/myapp:v1#定義容器你掛載內(nèi)容volumeMounts:#使用的存儲卷名稱,如果跟下面volume字段name值相同,則表示使用volume的這個存儲卷- name: html#掛載值容器中哪個目錄mountPath: /usr/share/nginx/htmlreadOnly: false#volumes字段定義了paues容器關(guān)聯(lián)的宿主機或分布式文件系統(tǒng)存儲卷 volumes:#存儲卷名稱- name: html#路徑,為宿主機存儲路徑hostPath:#在宿主機上目錄的路徑path: /data/pod/volume1#定義類型,這表示如果宿主機沒有此目錄則會自動創(chuàng)建type: DirectoryOrCreate [root@master volumes]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-hostpath 1/1 Running 0 14m 10.244.2.112 node02 <none> <none> #訪問測試 [root@master volumes]# curl 10.244.2.112 node02.myweb.com#刪除pod后,再重建,驗證是否依舊可以訪問原來的內(nèi)容 [root@master volumes]# kubectl delete -f pod-hostpath.yaml pod "pod-hostpath" deleted [root@master volumes]# kubectl apply -f pod-hostpath.yaml pod/pod-hostpath created [root@master volumes]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-hostpath 1/1 Running 0 6s 10.244.1.147 node01 <none> <none> [root@master volumes]# curl 10.244.1.147 node01.myweb.com

三: nfs共享存儲

3.1 安裝配置nfs服務(wù)

#在stor01(192.168.23.10)節(jié)點上安裝nfs,并配置nfs服務(wù) mkdir /data/volumes -p echo 'this is OTZ' >> /data/volumes/index.html chmod 777 /data/volumes/yum -y install nfs-utils rpcbindvim /etc/exports /data/volumes 192.168.23.0/24(rw,no_root_squash,sync)systemctl start rpcbind nfsExport list for host10: /data/volumes 192.168.23.0/24#所有節(jié)點配置hosts映射,或者配置DNS解析 echo '192.168.23.10 stor01' >> /etc/hosts

3.2 master 節(jié)點操作

apiVersion: v1 kind: Pod metadata:name: pod-vo1-nfsnamespace: default spec:#指定pod到 node01節(jié)點nodeName: node01containers:- name: myappimage: ikubernetes/myapp:v1volumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumes:- name: htmlnfs:path: /data/volumesserver: stor01 [root@master volumes]# kubectl apply -f pod-nfs-vo1.yaml pod/pod-vo1-nfs created [root@master volumes]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-vo1-nfs 1/1 Running 0 8s 10.244.1.148 node01 <none> <none> #訪問cluster ip [root@master volumes]# curl 10.244.1.148 this is OTZ

[root@master volumes]# kubectl delete pod pod-vo1-nfs pod "pod-vo1-nfs" deleted[root@master volumes]# vim pod-nfs-vo1.yaml apiVersion: v1 kind: Pod metadata:name: pod-vo1-nfsnamespace: default spec:#指定pod在node02節(jié)點nodeName: node02containers:- name: myappimage: ikubernetes/myapp:v1volumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumes:- name: htmlnfs:path: /data/volumesserver: stor01 [root@master volumes]# kubectl apply -f pod-nfs-vo1.yaml pod/pod-vo1-nfs created [root@master volumes]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod-vo1-nfs 1/1 Running 0 3s 10.244.2.114 node02 <none> <none> #訪問測試 [root@master volumes]# curl 10.244.2.114 this is OTZ

總結(jié)

以上是生活随笔為你收集整理的k8s存储卷(empyDir;hostPath;nfs)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。