ここでは、ステートフルサービスの作成に静的クラウドディスクが必要とされる典型的なシナリオおよび、静的クラウドディスクの使用手順を解説します。
シナリオと方法
クラウドディスクを利用するシナリオ
- 高いディスク I/O パフォーマンスを要求するアプリケーションを作成したいが、共有データが必要ない場合。 たとえば、MySQL、Redis および他のデータストレーサービスなどです。
- 高速書き込みをするログが必要な場合。
- お使いの保存データを永続的に存在させる場合。 ポッドのライフサイクルが終了してもデータが存在します。
静的クラウドディスクを利用するシナリオ
クラウドディスクを購入した場合。
静的クラウドディスクの使用方法
手動で PV (Persistent Volume) および PVC (Persistent Volume Claim) を作成します。
前提条件
- Kubernetes クラスターの作成が必要です。 詳しくは、Kubernetes クラスターの作成 をご参照ください。
- クラウドディスクの作成が必要です。 詳しくは、クラウドディスクの作成 ご参照ください。
- kubectl を利用して Kubernetes クラスターへ接続されている必要があります。kubectl を利用した Kubernetes クラスターへの接続 をご参照ください。
制限
- クラウドディスクは非共有ストレージデバイスで、Alibaba Cloud Storage Team により提供されます。 それぞれのクラウドディスクが 1 つのポッドにのみマウントできます。
- Kubernetes クラスターにおいて、クラウドディスクは、クラウドディスクと同一のゾーンにあるノードに対してのみマウントできます。
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 名です。 このパラメーターは、volumeID
パラメーターの値と同様のものである必要があります。クラウドディスク ID です。failure-domain.beta.kubernetes.io/zone: <your-zone>
: クラウドディスクがあるゾーンです。 たとえば、cn-hangzhou-b となります。failure-domain.beta.kubernetes.io/region: <your-region>
: クラウドディスクがあるリージョンです。 たとえば、cn-hangzhou となります。
複数のゾーンにある Kuberneters クラスターを使用する場合、
failure-domain.beta.kubernetes.io/zone
パラメーターおよびfailure-domain.beta.kubernetes.io/region
パラメーターを設定する必要があります。これにより、お使いのポッドがクラウドディスクのあるゾーンに対してスケジューリングされることが確実になります。 - 以下のコマンドを実行し、PV を作成します。
$ kubectl create -f pv-static.yaml
結果
Kubernetes で、左側のナビゲーションウィンドウから
をクリックします。対象のクラスターを選択し、作成された PV を確認します。PVC の作成
クラウドディスク用の PVC を作成します。 特に、selector
フィールドを作成された PV に対してフィルターするために設定する必要があります。これにより、PVC と正しい PV を関連付けることができます。
- 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
結果
Kubernetes で、左側のナビゲーションウィンドウから、
をクリックします。対象となるクラスターおよび名前空間を選択し、作成された 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
結果
Kubernetes で、左側のナビゲーションウィンドウから
をクリックします。対象となるクラスターおよび名前空間を選択し、作成されたデプロイを確認します。静的クラウドディスク上の永続データストレージ
- 以下のコマンドを実行し、作成されたデプロイがあるポッドを表示します。
$ kubectl get pod | grep static nginx-static-78c7dcb9d7-g9lll 2/2 Running 0 32s
- 以下のコマンドを実行し、新しいクラウドディスクが /data パスにマウントされたかどうかを確認します。
$ kubectl exec nginx-static-78c7dcb9d7-g9lll df | grep data /dev/vdf 20511312 45080 20449848 1% /data
- 以下のコマンドを実行し、/data パスにあるファイルを表示します。
$ kubectl exec nginx-static-78c7dcb9d7-g9lll ls /data lost+found
- 以下のコマンドを実行し、/data パスに static という名前のファイルを作成します。
$ kubectl exec nginx-static-78c7dcb9d7-g9lll touch /data/static
- 以下のコマンドを実行し、/data パスにあるファイルを表示します。
$ kubectl exec nginx-static-78c7dcb9d7-g9lll ls /data static lost+found
- 以下のコマンドを実行し、
nginx-static-78c7dcb9d7-g9lll
という名前のポッドを削除します。$ kubectl delete pod nginx-static-78c7dcb9d7-g9lll pod "nginx-static-78c7dcb9d7-g9lll" deleted
- もう 1 つの Kubernetes インターフェイスを開きます。以下のコマンドを実行し、上記のポッドの削除、および Kubernetes により新しいポッドが作成されたことを確認します。
$ kubectl get pod -w -l app=nginx NAME READY STATUS RESTARTS AGE nginx-static-78c7dcb9d7-g9lll 2/2 Running 0 50s nginx-static-78c7dcb9d7-g9lll 2/2 Terminating 0 72s nginx-static-78c7dcb9d7-h6brd 0/2 Pending 0 0s nginx-static-78c7dcb9d7-h6brd 0/2 Pending 0 0s nginx-static-78c7dcb9d7-h6brd 0/2 Init:0/1 0 0s nginx-static-78c7dcb9d7-g9lll 0/2 Terminating 0 73s nginx-static-78c7dcb9d7-h6brd 0/2 Init:0/1 0 5s nginx-static-78c7dcb9d7-g9lll 0/2 Terminating 0 78s nginx-static-78c7dcb9d7-g9lll 0/2 Terminating 0 78s nginx-static-78c7dcb9d7-h6brd 0/2 PodInitializing 0 6s nginx-static-78c7dcb9d7-h6brd 2/2 Running 0 8sg 0 8s
- 以下のコマンドを実行し、Kubernetes により新しく作成されたポッドを表示します。
$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-static-78c7dcb9d7-h6brd 2/2 Running 0 14s
- 以下のコマンドを実行し、/data パスに
static
という名前で作成されたファイルが削除されていないことを確認します。これは、静的クラウドディスク上のデータが永続的に保存されることを示しています。$ kubectl exec nginx-static-78c7dcb9d7-h6brd ls /data static lost+found