簡介
此文講解如何使用Volume配置Pod的存儲。
容器的文件系統與容器是同生共死的關系。所以,當容器終止或重啟時,文件系統會變化或丟失。為了獲得獨立於容器的更一致的存儲,可以使用Volume
。這對於有狀態應用程序(例如鍵值存儲(例如Redis)和數據庫)尤其重要。
備注:此文檔參考官方文檔,並加以自己的理解。如有誤導性的內容,請批評指正。
配置Pod的Volume
創建一個Pod,該Pod之運行了一個容器。此Pod具有類型為emptyDir
的Volume,即使容器終止並重新啟動,該Volume
也會在Pod的整個生命周期內持續存在。文件名:redis.yaml
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: {}
1、創建Pod
# kubectl apply -f /root/k8s-example/pods/redis.yaml
2、確認Pod中的容器的運行狀態,觀測Pod的變化
# kubectl get pod redis --watch
輸出結果如下
NAME READY STATUS RESTARTS AGE
redis 1/1 Running 0 3m17s
3、在另一個終端,用shell進入容器
# kubectl exec -it redis -- /bin/bash
4、在shell中,進入/data/redis/
,創建一個文件
# kubectl exec -it redis -- /bin/bash
root@redis:/data# cd /data/redis/
root@redis:/data/redis# echo Hello > test-file
5、在shell中,列出正在運行的進程
root@redis:/data/redis# apt 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.0 40696 2580 ? Ssl 08:35 0:01 redis-server *:6379
root 18 0.0 0.0 3956 2060 pts/0 Ss 08:40 0:00 /bin/bash
root 332 0.0 0.0 7628 1404 pts/0 R+ 08:45 0:00 ps aux
6、在shell中,kill掉 Redis 進程
root@redis:/data/redis# kill <pid>
<pid>
即為 Redis 的進程 ID,可以看出進程ID為1
7、在原來的終端中,看到Redis的Pod發生改變,如下:
# kubectl get pod redis --watch
NAME READY STATUS RESTARTS AGE
redis 1/1 Running 0 3m17s
redis 0/1 Completed 0 11m
redis 1/1 Running 1 11m
容器被終止和重啟,因為Redis的Pod中restartPolicy
的值為Always
。
1、然后再次進入重啟后的Redis Pod的shell中,查看創建的文件依然存在
# kubectl exec -it redis -- /bin/bash
2、在shell中,進入/data/redis/
目錄,確認test-file
文件是否依然存在
root@redis:/data/redis# cd /data/redis/
root@redis:/data/redis# ls
test-file
3、刪除創建的Pod
# kubectl delete pod redis