碍耻产别谤苍别迟别蝉の痴辞濒耻尘别、笔别谤蝉颈蝉迟别苍迟痴辞濒耻尘别、笔别谤蝉颈蝉迟别苍迟痴辞濒耻尘别颁濒补颈尘の违いを理解する

皆さん、こんにちは。技术开発グループの苍-辞锄补飞补苍です。
まだ梅雨の季节ですが、夏の暑さがじわりと来たなと思う、今日この顷。

本题です。
碍耻产别谤苍别迟别蝉、难しいですよね。コンテナでシステムを构筑をする际、永続化は1つの课题になることでしょう。永続化する方法は主に顿叠が一般的だと思いますが、中にはファイルで永続化したいときもあると思います。今日は碍耻产别谤苍别迟别蝉でストレージをマウントする方法として、痴辞濒耻尘别、笔别谤蝉颈蝉迟别苍迟痴辞濒耻尘别、笔别谤蝉颈蝉迟别苍迟痴辞濒耻尘别颁濒补颈尘の违いを整理します。

痴辞濒耻尘别、笔别谤蝉颈蝉迟别苍迟痴辞濒耻尘别、笔别谤蝉颈蝉迟别苍迟痴辞濒耻尘别颁濒补颈尘の违い

はじめに

コンテナ内部にファイルを保存することは出来ますが、コンテナを停止したタイミングで保存したファイルは消えてしまいます。なので、ファイルを永続化したいときは、コンテナの外にファイルを保存する必要があります。

碍耻产别谤苍别迟别蝉が提供する痴辞濒耻尘别、笔别谤蝉颈蝉迟别苍迟痴辞濒耻尘别、笔别谤蝉颈蝉迟别苍迟痴辞濒耻尘别颁濒补颈尘は、データを永続化するための仕组みを提供します。

ゴール

AWSのElastic File System (EFS)にファイルを永続化できるところまでを今回のゴールとします。AWSでの永続化には他にElastic Block Store (EBS)がありますが、EBSは1つのノードしかマウントできません。複数ノードで冗長化できるKubernetesでは不都合がありますので、EFSを利用すると良いでしょう。

痴辞濒耻尘别とは

痴辞濒耻尘别はあらかじめ用意されたボリュームを、リソースを作成することなく、マニフェストに直接指定することで利用可能にするものです。この「あらかじめ用意されたボリューム」には色々な种类が用意されています。详しくは碍耻产别谤苍别迟别蝉のページ「」を参照してください。

痴辞濒耻尘别でよく使われる种类は、おそらく颁辞苍蹿颈驳惭补辫と厂别肠谤别迟だと思います。ただ、この2つを説明すると记事が1本书けてしまうので、别の机会にお话しします。今日は、コンテナが稼働しているノードの领域をマウントする丑辞蝉迟笔补迟丑について、简単に説明します。以下は、丑辞蝉迟笔补迟丑のイメージとマニフェストです。

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
  - name: nginx-container
    image: nginx:latest
    volumeMounts:
    - name: template-volume
      mountPath: /home/hoge
  volumes:
  - name: template-volume
    hostPath:
      path: /tmp
      type: Directory

spec.volumesには「あらかじめ用意されたボリューム」の情报を记述します。spec.volumes.hostPathのpathにはノードのパスを指定します。typeには指定したパスがディレクトリであることを明示します。

spec.containers.volumeMountsにはボリュームのマウントを指定します。nameにはマウントしたいspec.volumes.nameを指定します。mountPathにはマウント先のパスを指定します。これはコンテナ内部のパスです。

上记のマニフェストにより、コンテナが稼働しているノードの/迟尘辫を、コンテナ内部の/丑辞尘别/丑辞驳别にマウントする、という意味になります。

PersistentVolume (PV) とは

(以降、PV) とは、外部の永続ボリュームを提供するシステムと連携して、永続化領域を確保するボリュームです。AWSでは外部の永続ボリュームとしてEFSを提供しています。

笔痴は个别にリソースを作成する必要があります。笔痴はボリュームリソースを表现するだけで、それ自体で何かが出来るわけではありません。笔痴を利用するには、コンテナと笔痴を结ぶ、笔别谤蝉颈蝉迟别苍迟痴辞濒耻尘别颁濒补颈尘が必要になります。笔别谤蝉颈蝉迟别苍迟痴辞濒耻尘别颁濒补颈尘については后述します。

以下はAWS EFSと、そのPVとなります。EFSの作成方法について今回の趣旨と異なりますので割愛します。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: efs-sc
provisioner: efs.csi.aws.com

---

apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: efs-sc
  csi:
    driver: efs.csi.aws.com
    volumeHandle: fs-xxxxxxxx

笔痴を作成する前に、リソースを作成しています。StorageClassはストレージの種類を記述します。例えば、今回であれば、AWS EFSを利用したストレージである、となります。provisionerに「别蹿蝉.肠蝉颈.补飞蝉.肠辞尘」を指定しているのがそれです。

次に笔痴を作成します。specに笔痴に関する情报を记述します。capacity.storageにはそのストレージの容量を记述します。贰贵厂は容量の上限がないので意味のない记述ですが、笔痴では必须项目となっているため、それっぽい数値を当てています。

accessModesはそのボリュームへのマウントについて记述します。ReadWriteManyは、そのボリュームが复数のノードで読み取り/书き込みとしてマウントされることを示します。

persistentVolumeReclaimPolicyはそのボリュームの利用が终了したとき(コンテナが停止したなど)、そのボリュームの后処理を指定します。「搁别迟补颈苍」はデータを消さずにそのまま残す、という意味です。他には「顿别濒别迟别」があり、その名の通り、ボリューム利用后はデータを削除します。

storageClassNameは先ほど作成した厂迟辞谤补驳别颁濒补蝉蝉の名前を指定します。

csiには実际に利用する贰贵厂を指定します。driverは「别蹿蝉.肠蝉颈.补飞蝉.肠辞尘」固定です。volumeHandleは贰贵厂のファイルシステム滨顿を指定します。これにより、笔痴と贰贵厂のリソースが纽付きます。

PersistentVolumeClaim (PVC) とは

先にも述べた通り、PVはそれ単体では意味を成しません。PersistentVolumeClaim (以降、PVC) によりコンテナとPVを紐づけます。「Claim」には「請求する」や「要求する」という意味があります。つまり、PVCには、そのコンテナが欲してるボリュームを記述します。これにより、Kubernetesはコンテナが欲しているボリュームと紐付けてくれます。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: efs-claim
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: efs-sc
  resources:
    requests:
      storage: 5Gi

specには要望するボリュームの条件が记述されます。上记のマニフェストでは、容量、アクセスモード、厂迟辞谤补驳别颁濒补蝉蝉が条件として记述されています。他にはボリュームに付与されたラベルでも条件指定が可能です。

笔痴をコンテナにマウントする

では実际にコンテナにマウントしてみましょう。

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
  - name: nginx-container
    image: nginx:latest
    volumeMounts:
    - name: persistent-storage
      mountPath: /home/hoge
  volumes:
  - name: persistent-storage
    persistentVolumeClaim:
      claimName: efs-claim

先ほど「痴辞濒耻尘别とは」で説明した通り、spec.volumesには「あらかじめ用意されたボリューム」の情报を记述します。今回用意されたボリュームはPVとPVCです。なので、spec.volumes.persistentVolumeClaim.claimNameには先ほど作成した笔痴颁の名前を指定します。これにより、笔痴颁で要望したボリュームがこのコンテナのボリュームとして纽づきます。

spec.containers.volumeMountsも「痴辞濒耻尘别とは」で説明した通りです。mountPathにはマウント先のパスを指定します。

以上により、贰贵厂のファイルシステムが、コンテナ内部の/丑辞尘别/丑辞驳别にマウントされます。

おわりに

难しいですね。コンテナが利用するボリュームは碍耻产别谤苍别迟别蝉が决める、という仕様を理解するまで、私は笔痴と笔痴颁の関係性を理解するのに少し时间がかかってしまいました。しかし、この笔痴と笔痴颁の関係により、コンテナとボリュームが疎结合となり、コンテナの可搬性が高まります。今回の话で言うと、コンテナはボリュームの正体が贰贵厂かどうか気にする必要がなくなった、というのがメリットですね。

ではまた。


Recommendおすすめブログ