Kubernetes 配置Pod以使用卷進行存儲

2022-06-09 11:50 更新

配置 Pod 以使用卷進行存儲

此頁面展示了如何配置 Pod 以使用卷進行存儲。

只要容器存在,容器的文件系統(tǒng)就會存在,因此當一個容器終止并重新啟動,對該容器的文件系統(tǒng)改動將丟失。 對于獨立于容器的持久化存儲,你可以使用卷。 這對于有狀態(tài)應(yīng)用程序尤為重要,例如鍵值存儲(如 Redis)和數(shù)據(jù)庫。

在開始之前

你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個節(jié)點的集群上運行本教程,且這些節(jié)點不作為控制平面主機。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構(gòu)建:

要檢查版本,請輸入 ?kubectl version?。

為 Pod 配置卷 

在本練習(xí)中,你將創(chuàng)建一個運行 Pod,該 Pod 僅運行一個容器并擁有一個類型為 emptyDir 的卷, 在整個 Pod 生命周期中一直存在,即使 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. 創(chuàng)建 Pod:
  2. kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml
    
  3. 驗證 Pod 中的容器是否正在運行,然后留意 Pod 的更改:
    kubectl get pod redis --watch
    

    輸出如下:

    NAME      READY     STATUS    RESTARTS   AGE
    redis     1/1       Running   0          13s
  4. 在另一個終端,用 shell 連接正在運行的容器:
    kubectl exec -it redis -- /bin/bash
    
  5. 在你的 Shell中,切換到 ?/data/redis? 目錄下,然后創(chuàng)建一個文件:
    root@redis:/data# cd /data/redis/
    root@redis:/data/redis# echo Hello > test-file
  6. 在你的 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
  7. 在你的 Shell 中,結(jié)束 Redis 進程:
    root@redis:/data/redis# kill <pid>
    

    其中 ?<pid>? 是 Redis 進程的 ID (PID)。

  8. 在你原先終端中,留意 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

此時,容器已經(jīng)終止并重新啟動。這是因為 Redis Pod 的 restartPolicy 為 ?Always?。

  1. 用 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. 刪除為此練習(xí)所創(chuàng)建的 Pod:
    kubectl delete pod redis
    


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號