ストレージにボリュームを使用するPodを構成する
このページでは、ストレージにボリュームを使用するPodを構成する方法を示します。
コンテナのファイルシステムは、コンテナが存在する間のみ存続します。 そのため、コンテナが終了して再起動すると、ファイルシステムの変更は失われます。 コンテナに依存しない、より一貫したストレージを実現するには、ボリュームを使用できます。 これは、キーバリューストア(Redisなど)やデータベースなどのステートフルアプリケーションにとって特に重要です。
始める前に
Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:
バージョンを確認するには次のコマンドを実行してください:  kubectl version.
Podのボリュームを構成する
この演習では、1つのコンテナを実行するPodを作成します。 今回作成するPodには、コンテナが終了して再起動した場合でもPodの寿命が続くemptyDirタイプのボリュームがあります。 これが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
- 
別のターミナルで、実行中のコンテナへのシェルを取得します: kubectl exec -it redis -- /bin/bash
- 
シェルで、 /data/redisに移動し、ファイルを作成します:root@redis:/data# cd /data/redis/ root@redis:/data/redis# echo Hello > test-file
- 
シェルで、実行中のプロセスを一覧表示します: 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
- 
シェルで、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であるためです。
- 
再起動されたコンテナへのシェルを取得します: kubectl exec -it redis -- /bin/bash
- 
シェルで /data/redisに移動し、test-fileがまだ存在することを確認します。root@redis:/data/redis# cd /data/redis/ root@redis:/data/redis# ls test-file
- 
この演習用に作成したPodを削除します: kubectl delete pod redis