Flexvolume scenario cloud disk migration scheme

概要:

Alibaba Cloud Container Service にアプリケーションをデプロイし、クラウドディスクデータボリュームを使用してデータを保存している場合、データ移行、データロールバック、ディスクタイプの変更が必要になることがあります。本ソリューションは、クラスター内で実行される FlexVolume と Disk-Controller を活用したクラウドディスクデータ管理ソリューションを提供します。


以下のシナリオに対応しています:

ディスクローテーション:SSD クラウドディスクから ESSD クラウドディスクへのローテーション、またはその逆。
ディスクローテーション:暗号化クラウドディスクから非暗号化ディスクへのローテーション、またはその逆。
アベイラビリティゾーン間の移行:アベイラビリティゾーン A で使用していたディスクをアベイラビリティゾーン B で使用する場合。
クロスリージョン移行:杭州リージョンで使用していたクラウドディスクを北京リージョンで使用する場合。
データロールバック:定期的なスナップショットを取得しているディスクで、特定バージョンのスナップショットを使用してデータをリストアする場合。

本ソリューションの全体的な原理は、クラウドディスクスナップショット技術を通じてデータロールバック、移行、割り当ての操作を実装し、データ整合性を維持することです。

ディスクタイプ変換シナリオ:
前述の MySQL インスタンスでは、3 つの Pod が 3 つの SSD クラウドディスクを使用しています。ローテーションによりこれら 3 つのクラウドディスクを ESSD タイプに変換しますが、データの一貫性は維持されます。ローテーションプロセスは以下の通りです:

複数のクラウドディスクのスナップショットを作成する。
スナップショットから新しい PVC と PV を作成する。
PVC と PV の名前は新しい StatefulSet の命名規則に従う必要がある。


ステップ 1:スナップショットを作成する。
3 つの Pod に対応する PV 情報からクラウドディスク ID を特定し、ECS コンソールで各クラウドディスクのスナップショットを作成します。



3 つのクラウドディスクスナップショットの ID は以下の通りです:

pod-0 -> ssd-mysql-0 -> d-2ze48olpbvnlpofw9wpi -> s-2zeh66llz43m8g65y4um
pod-1 -> ssd-mysql-1 -> d-2ze6sw4nc3n9ovquss0s -> s-2zegk0d8ne75tz0g15zd
pod-2 -> ssd-mysql-2 -> d-2zeddogm2wsjovoch45m -> s-2zec3gco02of30dt6lgb
ステップ 2:新しい PVC を作成する。
古い PVC テンプレートは以下の通りです:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ssd-mysql-0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: alicloud-disk-ssd

新しい PVC を作成します:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
provider.disksnapshot.aliyuncs.com/disk-snapshot-id: s-2zeh66llz43m8g65y4um
name: essd-mysql-0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: alicloud-disk-essd
変更点は以下の通りです:
1) 名前を essd-mysql-0 に変更する。
2) アノテーションを追加し、値は pod-0 および pvc-0 に対応するクラウドディスクスナップショット ID を設定する。
3) storageClassName を alicloud-disk-essd に変更する。


PVC を作成します:

# kubectl apply -f pvc-0.yaml
essd-mysql-0 Bound d-2ze1nxm8hrcdmktxuocn 20Gi RWO alicloud-disk-essd 18m

同様に、pvc-1:essd-mysql-1、pvc-2:essd-mysql-2 を作成します。

essd-mysql-1 Bound d-2zeh66llz43m8tzeminq 20Gi RWO alicloud-disk-essd 2m27s
essd-mysql-2 Bound d-2ze383b6z44xjm79qoj2 20Gi RWO alicloud-disk-essd 2m25s


ステップ 3:アプリケーションを更新する。
古い StatefulSet を削除し、新しい StatefulSet を作成します。テンプレートは以下の通りです:

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: "mysql"
replicas: 3
selector:
matchLabels:
app:mysql
template:
metadata:
labels:
app:mysql
spec:
containers:
- image: mysql:5.6
name: mysql
command: ["sh", "-c"]
args: ["sleep 10000"]
volumeMounts:
-name: essd
mountPath: /data
volumeClaimTemplates:
- metadata:
name: essd
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "alicloud-disk-ssd"
resources:
requests:
storage: 20Gi
古いテンプレートと比較して、2 箇所を修正する必要があります:
1) volumeClaimTemplates の名前を essd に変更する。
2) volumeMounts の名前を essd に変更する。

# kubectl describe pod mysql-0 |grep ClaimName
ClaimName: essd-mysql-0
# kubectl describe pod mysql-1 |grep ClaimName
ClaimName: essd-mysql-1
# kubectl describe pod mysql-2 |grep ClaimName
ClaimName: essd-mysql-2

# kubectl exec mysql-0 ls /data
lost+found mysql0

# kubectl exec mysql-1 ls /data
lost+found mysql1

# kubectl exec mysql-2 ls /data
lost+found mysql2
以上より、3 レプリカの MySQL のクラウドディスクはスナップショットを通じて ESSD タイプに変更されました。

Related Articles

Explore More Special Offers

  1. Short Message Service(SMS) & Mail Service

    50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00

phone お問い合わせ
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.