k8s儲存卷
阿新 • • 發佈:2021-11-09
儲存卷
容器磁碟上的檔案的生命週期是短暫的,這就使得在容器中執行重要應用時會出現一些問題。首先, 當容器崩潰時,kubelet會重啟它,但是容器中的檔案將丟失容器以乾淨的狀態 (映象最初的狀態)重新啟動。其次,在Pod中同時執行多個容器時,這些容器之間通常需要共享檔案。Kubernetes 中的Volume抽象就很好的解決了這些問題。Pod中的容器通過Pause容器共享Volume。
emptyDir儲存卷
當Pod被分配給節點時,首先建立emptyDir卷,並且只要該Pod在該節點上執行,該卷就會存在。正如卷的名字所述,它最初是空的。Pod 中的容器可以讀取和寫入emptyDir卷中的相同檔案,儘管該卷可以掛載到每個容器中的相同或不同路徑上。當出於任何原因從節點中刪除 Pod 時,emptyDir中的資料將被永久刪除。 mkdir shiyan cd /shiyan vim pod4.yaml apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx spec: containers: - name: nginx1 image: nginx ports: - name: http containerPort: 80 volumeMounts: #定義容器掛載內容 - name: html #使用儲存卷名稱,如果跟下面volume欄位name值相同,則表示使用volume的這個儲存卷 mountPath: /usr/share/nginx/html/ #掛載至容器中哪個目錄 - name: nginx2 image: nginx volumeMounts: - name: html mountPath: /data/ command: ['/bin/bash','-c','while true;do echo $(date) >> /data/index.html;sleep 2;done'] volumes: - name: html emptyDir: {} kubectl exec -it nginx -c nginx2 sh #-c指定pod裡面的容器名進入
hostPath儲存卷
hostPath卷將 node 節點的檔案系統中的檔案或目錄掛載到叢集中。
hostPath可以實現持久儲存,但是在node節點故障時,也會導致資料的丟失。
在 node01 節點上建立掛載目錄
mkdir -p /data/pod/
echo 'node1.com' > /data/pod/index.html
在 node02 節點上建立掛載目錄
mkdir -p /data/pod/
echo 'node2.com' > /data/pod/index.html
建立 Pod 資源
vim pod5.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts: #定義容器掛載內容
- name: html #使用儲存卷名稱於volume定義 的name相同
mountPath: /usr/share/nginx/html/ #定義容器內的掛載目錄
readOnly: false #讀寫掛載方式,預設為讀寫模式false
volumes:
- name: html #定義儲存卷名稱
hostPath: #路徑,宿主機儲存路徑
path: /data/pod/ #在宿主機上目錄的路徑
type: DirectoryOrCreate #定義型別,如果宿主機沒有此目錄會自動建立
kubectl get pods -o wide
curl 10.244.2.6 #刪除pod重建檔案內容依然存在,直接修改主機內的目錄也可以
nfs共享儲存卷
在新節點(node3)安裝nfs並配置服務 mkdir /data/pod -p chmod 777 /data/pod/ echo 'node3' > /data/pod/index.html vim /etc/exports /data/pod 192.168.150.0/24(rw,no_root_squash) systemctl start rpcbind systemctl start nfs showmount -e Export list for localhost.localdomain: /data/pod 192.168.150.0/24 master節點操作,k8s叢集需要新增主機名對映 vim pod6.yaml apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx volumeMounts: - name: html mountPath: /usr/share/nginx/html/ volumes: - name: html nfs: #指定掛載型別為nfs path: /data/pod/ server: stor03 #指定nfs伺服器名,只能是主機名不能為IP地址