<

一足遅れて Kubernetes を学び始める - 11. config&storage その2 -

ストーリー

  1. 一足遅れて Kubernetes を学び始める - 01. 環境選択編 -
  2. 一足遅れて Kubernetes を学び始める - 02. Docker For Mac -
  3. 一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -
  4. 一足遅れて Kubernetes を学び始める - 04. kubectl -
  5. 一足遅れて Kubernetes を学び始める - 05. workloads その 1 -
  6. 一足遅れて Kubernetes を学び始める - 06. workloads その 2 -
  7. 一足遅れて Kubernetes を学び始める - 07. workloads その 3 -
  8. 一足遅れて Kubernetes を学び始める - 08. discovery&LB その 1 -
  9. 一足遅れて Kubernetes を学び始める - 09. discovery&LB その 2 -
  10. 一足遅れて Kubernetes を学び始める - 10. config&storage その 1 -
  11. 一足遅れて Kubernetes を学び始める - 11. config&storage その 2 -
  12. 一足遅れて Kubernetes を学び始める - 12. リソース制限 -
  13. 一足遅れて Kubernetes を学び始める - 13. ヘルスチェックとコンテナライフサイクル -
  14. 一足遅れて Kubernetes を学び始める - 14. スケジューリング -
  15. 一足遅れて Kubernetes を学び始める - 15. セキュリティ -
  16. 一足遅れて Kubernetes を学び始める - 16. コンポーネント -

前回

一足遅れて Kubernetes を学び始める - 10. config&storage その 1 -では、config について学習しました。 今回は、storage を学びます。

Volume と PresistentVolume

Volume は、あらかじめ決められた利用可能なボリュームを指します。こちらは、ボリュームの削除や新規作成ができません。 PresistentVolume は、外部にある永続ボリュームを指します。こちらは、ボリュームの削除や新規作成ができます。 DB のようなステートフルなものは PresistentVolume を使います。 一時的なものなら、Volume を使うのですかね?

※ PresistentVolumeClaim は、PresistentVolume をアサインするためのリソース。

Volume の種類

書籍(kubernetes 完全ガイド)で紹介されていた Volume の種類は、下記のとおりです。

  • emptyDir
    • 一時的なディスク領域を利用
    • pod 削除されると、emptyDir も削除
    • マウント先を指定できない
  • hostPath
    • emptyDir のマウント先を指定できる版
  • downwardAPI
    • Pod の情報をファイルとして配置したファイルをマウント
  • projected
    • secret/configMap/downwardAPI/serviceAccountToken を1つにまとめたディレクトを作成し、マウント

types-of-volumes

Volume を残すことができないので、Pod を削除する際は気をつけないとダメですね。 ログをファイルとして保存するなら、一時的に Volume が良いのですかね。 ただ、定期的に外部ストレージに移さないといけないですので、手間です。 (そもそも、ログはストリームにして外部サービスに流すのがベスト)

プロダクトとしては、あんまり使い道ない...?

PresistentVolume の種類

外部の永続ボリュームを利用します。例えば、下記の種類があります。

  • GCE Persistent Disk
  • AWS Elastic Block Store
  • NFS
  • iSCSI
  • Ceph
  • OpenStack Cinder
  • GlusterFS

一足遅れて Kubernetes を学び始める - 06. workloads その 2 -では、NFS を使いましたね。 PersistentVolume の作成方法は、外部の永続ボリュームによって違うのですが、共通して言えるところもあるみたいなので、 そこを書いてみます。

  • ラベル
    • PersistentVolume をラベリングすることで、指定しやすくする
  • 容量
    • Volume で要求する容量。最も小さい容量からアサインされる。
  • アクセスモード
    • ReadWriteOnce
      • 単一ノードから Read/Write が可能
    • ReadOnlyMany
      • 複数ノードから Read が可能
    • ReadWriteMany
      • 複数ノードから Read/Write が可能
  • Reclaim Policy
    • Volume を使い終わったあと、破棄するか再利用するかのポリシー
      • Delete
        • PersistentVolume の実体を削除
      • Retain
        • PersistentVolume の実体を残さず保持
        • 再度マウントされない
      • Recycle
        • PersistentVolume のデータを削除し、再利用可能にする
        • 再度マウントされる
        • (廃止予定で、DynamicProvisioning を利用すること)
  • StorageClass
    • 各プロバイザーが提供するストレージの型
      • 基本的に自動作成されている

PersistentVolumeClaim

実際に、PresistentVolume を使うためには、PresistentVolumeClaim で要求を出す必要があります。 必要な項目は、下記です。

  • ラベルセレクタ
    • ラベルでフィルタリング
  • 容量
    • 求めている容量
  • アクセスモード
    • PresistentVolume のアクセスモードを参照
  • StorageClass
    • PresistentVolume の StorageClass を参照

要求を満たした Volume が RetainPolicy だった場合、Claim を削除した時点で「Released」になります。

最後に

今回は、書籍をそのまま書いた感じになりました。 実際に試したのは、一足遅れて Kubernetes を学び始める - 06. workloads その 2 -です。 まあ、あんまり深くはハマらない方が良いのではと思いました。 次回は、こちらです。

役立ったら、☕でサポートしてね!

シェアしよう

関連するタグ