ステートフルサービス内のコンテナで障害が発生すると、データが失われる可能性があります。永続ストレージは、このようなデータ損失を防ぎます。このドキュメントでは、静的にプロビジョニングされたクラウドディスクボリュームを永続ストレージに使用する方法について説明します。
前提条件
次の作業が完了していることを確認してください。
背景情報
クラウドディスクの一般的な使用例は次のとおりです。
-
MySQL や Redis など、高いディスク I/O を必要とし、データ共有を必要としないデータストレージサービス。
-
高速なログ書き込み。
-
Pod のライフサイクルを超えたデータの永続化。
既存のクラウドディスクがある場合は、静的にプロビジョニングされたボリュームを使用します。
静的にプロビジョニングされたクラウドディスクボリュームを使用するには、PersistentVolume (PV) と PersistentVolumeClaim (PVC) を手動で作成する必要があります。詳細については、「静的にプロビジョニングされたクラウドディスクボリュームの使用」をご参照ください。
制限事項
-
クラウドディスクは共有されず、一度に 1 つの Pod にのみマウントできます。
-
クラウドディスクは、同じゾーン内のノードにのみマウントできます。
PVの作成
-
pv-static.yaml という名前のファイルを作成します。
apiVersion: v1 kind: PersistentVolume metadata: name: <your-disk-id> labels: alicloud-pvname: <your-disk-id> failure-domain.beta.kubernetes.io/zone: <your-zone> failure-domain.beta.kubernetes.io/region: <your-region> spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce flexVolume: driver: "alicloud/disk" fsType: "ext4" options: volumeId: "<your-disk-id>"説明-
alicloud-pvname: <your-disk-id>:PV の名前。クラウドディスク ID と同じである必要があります。 -
failure-domain.beta.kubernetes.io/zone: <your-zone>:クラウドディスクが配置されているゾーン。例: cn-hangzhou-b。 -
failure-domain.beta.kubernetes.io/region: <your-region>:クラウドディスクが配置されているリージョン。例: cn-hangzhou。
クラスターが複数のゾーンにまたがる場合は、
failure-domain.beta.kubernetes.io/zoneとfailure-domain.beta.kubernetes.io/regionを指定する必要があります。これにより、Pod がクラウドディスクと同じゾーンにスケジュールされるようになります。 -
-
次のコマンドを実行して PV を作成します。
kubectl create -f pv-static.yaml[検証結果]
ACK コンソールにログインします。
-
左側のナビゲーションペインで、クラスターリスト をクリックします。
-
クラスターリスト ページで、目的のクラスターの名前をクリックするか、Actions 列の 詳細 をクリックします。
-
クラスター管理ページの左側のナビゲーションペインで、 を選択します。リストで新しく作成された PV を表示できます。容量は 20Gi、アクセスモードは ReadWriteOnce、再利用ポリシーは Retain、ステータスは Available です。PV は、default 名前空間の永続ボリューム要求 pvc-disk にバインドされます。[操作] 列には、[タグの管理]、[YAML の表示]、および [削除] のオプションがあります。
PVCの作成
-
pvc-static.yaml という名前のファイルを作成します。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-disk spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi selector: matchLabels: alicloud-pvname: <your-disk-id> -
次のコマンドを実行して PVC を作成します。
kubectl create -f pvc-static.yaml[検証結果]
ACK コンソールにログインします。
-
左側のナビゲーションペインで、クラスターリスト をクリックします。
-
クラスターリスト ページで、対象クラスターの名前をクリックするか、Actions 列の 詳細 をクリックします。
-
クラスター管理ページの左側のナビゲーションペインで、 を選択します。
-
ボリュームクレーム ページで、作成した PVC を表示できます。
アプリケーションの作成
-
static.yaml という名前のファイルを作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-static labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - name: disk-pvc mountPath: "/data" volumes: - name: disk-pvc persistentVolumeClaim: claimName: pvc-disk -
次のコマンドを実行してアプリケーションを作成します。
kubectl create -f static.yaml[検証結果]
ACK コンソールにログインします。
-
左側のナビゲーションペインで、クラスターリスト をクリックします。
-
クラスターリスト ページで、対象のクラスターの名前をクリックするか、アクション 列の 詳細 をクリックします。
-
クラスター管理ページの左側のナビゲーションペインで、を選択します。
-
デプロイメントページで、作成したアプリケーションを表示できます。
データの永続性の検証
-
次のコマンドを実行して、アプリケーション Pod の名前を取得します。
kubectl get pod | grep static出力例:
nginx-static-78c7dcb9d7-g**** 1/1 Running 0 32s -
次のコマンドを実行して、クラウドディスクが /data パスにマウントされていることを確認します。
kubectl exec nginx-static-78c7dcb9d7-g**** -- df | grep data出力例:
/dev/vdf 20511312 45080 20449848 1% /data -
次のコマンドを実行して、/data パス内のファイルを一覧表示します。
kubectl exec nginx-static-78c7dcb9d7-g**** -- ls /data出力例:
lost+found -
static という名前のファイルを /data パスに作成します。
kubectl exec nginx-static-78c7dcb9d7-g**** -- touch /data/static -
次のコマンドを実行して、/data パス内のファイルを一覧表示します。
kubectl exec nginx-static-78c7dcb9d7-g**** -- ls /data出力例:
static lost+found -
nginx-static-78c7dcb9d7-g****という名前の Pod を削除するには、次のコマンドを実行します。kubectl delete pod nginx-static-78c7dcb9d7-g****出力例:
pod "nginx-static-78c7dcb9d7-g****" deleted -
別のターミナルウィンドウで、次のコマンドを実行して、Kubernetes が Pod を削除して再作成する様子を監視します。
kubectl get pod -w -l app=nginx出力例:
NAME READY STATUS RESTARTS AGE nginx-static-78c7dcb9d7-g**** 1/1 Running 0 50s nginx-static-78c7dcb9d7-g**** 1/1 Terminating 0 72s nginx-static-78c7dcb9d7-h**** 0/1 Pending 0 0s nginx-static-78c7dcb9d7-h**** 0/1 Pending 0 0s nginx-static-78c7dcb9d7-h**** 0/1 Init:0/1 0 0s nginx-static-78c7dcb9d7-g**** 0/1 Terminating 0 73s nginx-static-78c7dcb9d7-h**** 0/1 Init:0/1 0 5s nginx-static-78c7dcb9d7-g**** 0/1 Terminating 0 78s nginx-static-78c7dcb9d7-g**** 0/1 Terminating 0 78s nginx-static-78c7dcb9d7-h**** 0/1 PodInitializing 0 6s nginx-static-78c7dcb9d7-h**** 1/1 Running 0 8s -
次のコマンドを実行して、再作成された Pod の名前を取得します。
kubectl get pod出力例:
NAME READY STATUS RESTARTS AGE nginx-static-78c7dcb9d7-h**** 1/1 Running 0 14s -
次のコマンドを実行して、/data パス内のファイルを一覧表示します。作成した static ファイルがまだ存在していることから、静的にプロビジョニングされたクラウドディスク上のデータの永続性が確認できます。
kubectl exec nginx-static-78c7dcb9d7-h**** -- ls /data出力例:
static lost+found