這個章節(jié)展示了如何使用卷配置pod存儲。
容器文件系統(tǒng)只要容器存在才能生效捌朴,所以當一個容器終端并重新啟動時對于文件系統(tǒng)所做的修改將會丟失。對于單獨容器的一致性存儲可以使用volume树灶。這對于有狀態(tài)應用尤為重要吧雹,例如key-value存儲和數(shù)據(jù)庫嘹黔。例如redis是一個key-value的內存存儲账嚎。
給pod配置卷
在本次實驗莫瞬,新建一個運行一個容器的pod。這個pod有一個類型為empytDir的卷郭蕉,持續(xù)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: {}
1.新建pod:
kubectl create -f http://k8s.io/docs/tasks/configure-pod-container/pod-redis.yaml
2.驗證pod的容器是否運行召锈,并查看pod的改變:
kubectl get --watch pod redis
輸出大概是這樣子:
NAME READY STATUS RESTARTS AGE
redis 1/1 Running 0 13s
3.在別的終端旁振,使用shell進入運行的容器內部:
kubectl exec -it redis -- /bin/bash
4.在shell里進入/data/redis目錄里面,并新建一個文件:
root@redis:/data/redis# echo Hello > test-file
5.在shell里查看運行的進程列表:
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
6.在shell里殺掉redis進程:
root@redis:/data/redis# kill <pid>
pid是redis的進程id涨岁。
7.在原來的終端查看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蹬铺。
1.使用shell進入重新啟動的容器:
kubectl exec -it redis -- /bin/bash
2.進入/data/redis目錄并且看到test-file還在這里。