Oracle Cloud Infrastructureドキュメント

永続的なボリューム・クレームの作成

コンテナのルート・ファイル・システムを介したコンテナ・ストレージは一時的なものであり、コンテナの削除と作成時に消える可能性があります。 永続的なボリュームを作成して使用して、コンテナの外部にデータを格納することができます。

永続的なボリューム・クレームを定義してクラスタに適用すると、要求にバインドされた永続的なボリュームが作成されます。 クレームは、ストレージが接続されているコンテナが終了しているかどうかにかかわらず、耐久性があり、永続的なストレージを提供する、基礎となるIaaSプロバイダのブロック・ストレージ・ボリュームです。

Oracle Cloud Infrastructureを基礎となるIaaSプロバイダとして使用すると、Block Storageサービスからボリュームをアタッチすることで、永続ボリュームの要求をプロビジョニングできます。

パー・システント・ボリューム・クレーム(PVC)は、ポッドがコンピューティング・リソースをリクエストする方法と同様に、ストレージのリクエストです。 PVCは、基礎となるストレージに抽象化レイヤーを提供します。 たとえば、管理者は、後で1つ以上の永続的なボリューム・クレームにバインドすることができるいくつかの静的永続ボリューム(PV)を作成できます。 これは、後でポッドが割り当てられるクラスタ・ノードを作成する管理者に似ています。 静的永続ボリュームのいずれもユーザーのPVCリクエストと一致しない場合、クラスタはPVCリクエストに一致するPVを動的に作成しようと試みる可能性があります。 この例では、後者の方法を使用しています。これは、クラスタ管理者がPVCリクエストに一致するPVを作成していないことを前提としています。

PVCがリクエストできる永続ストレージの最小量は50ギガ・バイトです。 リクエストが50ギガ・バイト未満の場合、リクエストは50ギガ・バイトに切り上げられます。

次のYAMLは、それぞれ50ギガ・バイトの永続ストレージ(storage: 50Gi)をリクエストする2つのPVCを定義しています。 デプロイメントのボリュームとして使用するクレームを定義するときは、PVCの名前(たとえば、mysqlclaim)を使用します。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysqlclaim
spec:
  storageClassName: "oci"
  selector:
    matchLabels:
      failure-domain.beta.kubernetes.io/zone: "US-ASHBURN-AD-1"
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpressclaim
spec:
  storageClassName: "oci"
  selector:
    matchLabels:
      failure-domain.beta.kubernetes.io/zone: "US-ASHBURN-AD-2"
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
ノート

前の例では、PVCは、matchLabels:failure-domain.beta.kubernetes.io/zoneを使用してAshburnリージョンの可用性ドメインにストレージをリクエストしています。 matchLabels:failure-domain.beta.kubernetes.io/zoneの値を指定する場合は、短縮されたバージョンの可用性ドメイン名を使用する必要があります。 たとえば、US-ASHBURN-AD-1US-ASHBURN-AD-2 可用性ドメイン名の短縮されたバージョンの一覧は、「リージョン名およびリージョン・コード別の可用性」を参照してください。

次のコマンドを入力して、YAMLファイルからPVCを作成します:

$ kubectl create -f https://raw.githubusercontent.com/wercker/oke_examples/master/kubernetes_examples/persistent_volume_claims.yaml

persistentvolumeclaim "mysqlclaim" created
persistentvolumeclaim "wordpressclaim" created

kubectl get pvcを呼び出して、PVCが作成され、永続ボリュームにバインドされていることを確認できます:

$ kubectl get pvc
			
NAME             STATUS    VOLUME                                                         CAPACITY   ACCESSMODES   STORAGECLASS   AGE
mysqlclaim       Bound     abyhqljrerxpanjto7b5zlxjesy4aedghc5c52f5v43xcrymo77ktdl6ibjq   50Gi       RWO           oci            4m
wordpressclaim   Bound     abyhqljt3rzldcclootxn7yrfgv36s7rnggcobennjohevykqpitzkinspka   50Gi       RWO           oci            4m

これらの永続ボリュームは、デプロイメントなどの他のオブジェクトを作成するときに使用できます。 たとえば、次のデプロイメント定義では、mysqlclaim PVCをmysql永続ストレージ・ボリュームとして使用するようにシステムに指示します。これは、/var/lib/mysqlというデプロイメントをホストするポッドによってマウントされます。

#MySQL Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - image: mysql:5.6
          name: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql
                  key: password
          ports:
            - containerPort: 3306
              name: mysql
          volumeMounts:
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql
      volumes:
        - name: mysql-persistent-storage
          persistentVolumeClaim:
            claimName: mysqlclaim