はじめてのKubernetes その2

Volume について

コンテナのデータは一時的なもので、Pod/コンテナが削除されてもデータが消えないよう。Volume にデータの永続化をしいく。Pod 内のコンテナ間データ共有にも使える。

Volume の種類

  • emptyDir
  • hostPath
  • configMap
  • secret
  • gcePersistentDisk
  • awsElasticBlockStore
  • csi
  • downwardAPI
  • nfs

  • minikube のローカル環境を使用しているため emptyDir や hostPath を使ってみる

emptyDir を使ってみる

date-tail.yaml

apiVersion: v1
kind: Pod
metadata:
  name: date-tail
spec:
  containers:
  - name: date
    image: alpine
    command: ["sh", "-c"]
    args:
    - |
      exec >> /var/log/date-tail/output.log
      echo -n 'Start at: '

         date

        sleep 1
      done
    volumeMounts:
    - name: log-volume
      mountPath: /var/log/date-tail
  - name: tail
    image: alpine
    command: ["sh", "-c"]
    args:
    - |
      tail -f /var/log/date-tail/output.log
    volumeMounts:
    og-volume
       mountPath: /var/log/date-tail

  volumes:
  - name: log-volume
    emptyDir:
  terminationGracePeriodSeconds: 0

  • この Pod は date コンテナ、tail コンテナ、Volume に log-volume があります。date コンテナと tail コンテナは、log-volume をマウントしている。

emptyDir を使った Pod を作成する

# date-tailを作成
kubectl apply -f date-tail.yaml
 pod/date-tail created

# dateコンテナのファイルを確認してみる
kubectl exec -it date-tail -c date ls /var/log/date-tail
 output.log

# tailコンテナのファイルを確認してみる
kubectl exec -it date-tail -c tail ls /var/log/date-tail
 output.log

# tailコンテナの方では tail -f を実行しているので kubectl logs でその出力が確認できる。
kubectl logs date-tail -c tail -f --tail=10
 Fri Mar 22 13:22:42 UTC 2019
 Fri Mar 22 13:22:43 UTC 2019
 Fri Mar 22 13:22:44 UTC 2019
 Fri Mar 22 13:22:45 UTC 2019
 Fri Mar 22 13:22:46 UTC 2019
 Fri Mar 22 13:22:47 UTC 2019
 Fri Mar 22 13:22:48 UTC 2019


# date-tailのPodを削除
kubectl delete -f date-tail.yaml
 pod "date-tail" deleted

hostPath を使ってみる

  • emptyDir は Pod が削除された際に対象の Volume のデータも削除される。 よってコンテナ間のデータ共有のみで使用できる。

  • volume のタイプを hostPath に変更してみる date-tail.yaml を修正してみる

# 修正前
  volumes:
  - name: log-volume
    emptyDir:
# 修正後
  volumes:
  - name: log-volume
    hostPath:
      path: /data/date-tail
  • こうすることで、Pod を削除しても/data/date-tailのデータは削除されることなく残っています。

minikube で使えるパス

# Podを再作成してみる
kubectl replace --force -f date-tail.yaml

minikube の VM にファイルがあるか確認

minikube ssh


ls /data/
 date-tail  minikube
ls /data/date-tail/
 output.log

  • 実際に GKE などを使うと gcePersistentDisk へ保存したりするとそのときの確認はおいおいやる予定