設定 Pod 以使用 Volume 進行儲存
本頁說明如何設定 Pod 以使用 Volume 進行儲存。
容器的檔案系統僅在容器存在期間存在。因此,當容器終止並重新啟動時,檔案系統變更會遺失。為了獲得更一致且獨立於容器的儲存,您可以使用 Volume。這對於有狀態應用程式(例如鍵值儲存區 (如 Redis) 和資料庫)尤其重要。
準備開始
您需要有一個 Kubernetes 叢集,並且必須設定 kubectl 命令列工具以與您的叢集通訊。建議在至少有兩個節點且未充當控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個,或者您可以使用以下 Kubernetes 練習場之一
若要檢查版本,請輸入kubectl version
。為 Pod 設定 Volume
在本練習中,您會建立一個執行一個容器的 Pod。此 Pod 具有 emptyDir 類型的 Volume,其生命週期與 Pod 相同,即使容器終止並重新啟動也一樣。以下是 Pod 的組態檔
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
volumeMounts:
- name: redis-storage
mountPath: /data/redis
volumes:
- name: redis-storage
emptyDir: {}
建立 Pod
kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml
確認 Pod 的容器正在執行,然後監看 Pod 的變更
kubectl get pod redis --watch
輸出看起來像這樣
NAME READY STATUS RESTARTS AGE redis 1/1 Running 0 13s
在另一個終端機中,取得正在執行之容器的 Shell
kubectl exec -it redis -- /bin/bash
在您的 Shell 中,前往
/data/redis
,然後建立一個檔案root@redis:/data# cd /data/redis/ root@redis:/data/redis# echo Hello > test-file
在您的 Shell 中,列出正在執行的程序
root@redis:/data/redis# apt-get update root@redis:/data/redis# apt-get install procps root@redis:/data/redis# ps aux
輸出類似於這樣
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND redis 1 0.1 0.1 33308 3828 ? Ssl 00:46 0:00 redis-server *:6379 root 12 0.0 0.0 20228 3020 ? Ss 00:47 0:00 /bin/bash root 15 0.0 0.0 17500 2072 ? R+ 00:48 0:00 ps aux
在您的 Shell 中,終止 Redis 程序
root@redis:/data/redis# kill <pid>
其中
<pid>
是 Redis 程序 ID (PID)。在您的原始終端機中,監看 Redis Pod 的變更。最終,您會看到類似這樣
NAME READY STATUS RESTARTS AGE redis 1/1 Running 0 13s redis 0/1 Completed 0 6m redis 1/1 Running 1 6m
此時,容器已終止並重新啟動。這是因為 Redis Pod 的 restartPolicy 為 Always
。
取得重新啟動之容器的 Shell
kubectl exec -it redis -- /bin/bash
在您的 Shell 中,前往
/data/redis
,並確認test-file
仍然存在。root@redis:/data/redis# cd /data/redis/ root@redis:/data/redis# ls test-file
刪除您為本練習建立的 Pod
kubectl delete pod redis
下一步
上次修改時間:2023 年 8 月 24 日下午 6:38 PST:Use code_sample shortcode instead of code shortcode (e8b136c3b3)