Skip to content

Latest commit

 

History

History
122 lines (101 loc) · 3.74 KB

4_6_Cloning.md

File metadata and controls

122 lines (101 loc) · 3.74 KB

Trident Fast PVC Cloningの使い方とユースケース

Tridentの特徴的な機能の1つである、PVC Fast Cloningについて紹介します。

PVC Fast Cloningとは

既存のPVCを高速にコピーする機能です。 この機能を活用すると実現できることとしては以下の内容のものがあります。

  • テストデータ設定済みの Database as a Service の実現
  • テスト用途の環境を瞬時にコピー
  • 本番環境からデータをコピーして、調査用の環境を作成し what-if 分析

また、ストレージ容量を消費しないというメリットもあります。

実際の設定方法

ここでは実際に使用するマニフェストを提示し、設定すべき項目について説明いたします。

まずはmysqlのパスワードをsecretに入れます。

$ kubectl create secret generic mysql-pass --from-literal=password=yourpassword -n [ネームスペース]

mysql自体のデプロイメントは以下のようなものをつかいます。 ここではベースとなるPVC mysql-pv-claimを作成します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysqldatabase
  labels:
    app: database
spec:
  selector:
    matchLabels:
      app: database
  template:
    metadata:
      labels:
        app: database
    spec:
      containers:
      - image: mysql:8
        name: mysqldatabase
        env:
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-pass
              key: password
        ports:
        - containerPort: 3306
          name: mysqldatabase
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: database
  annotations:
    trident.netapp.io/reclaimPolicy: "Retain"
    trident.netapp.io/exportPolicy: "default"
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: ontap-gold
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels:
    app: database
spec:
  ports:
    - port: 3306
  selector:
    app: database
    tier: mysql
  type: NodePort

起動後にデータを投入し元となるデータベースを作成します。

クローン元のPVCにはI/Oが発生していないことを強く推奨します。

クローニングはPVCのannotationに trident.netapp.io/cloneFromPVC を設定し、コピーもとのPVCを指定することで実現できます。

以下の記述を追記します。

annotation:
  trident.netapp.io/cloneFromPVC: mysql-pv-claim

上記の通りマニフェストを複数展開する方法もありますが、Helm を使うことでより簡単に展開することができます。 以下の2つの項目をhelm実行時に設定します。

  • persistence.storageClass=ontap-gold
  • persistence.annotations={trident.netapp.io/cloneFromPVC: XXX}
$ helm install stable/mysql --name [リリース名] --namespace [ネームスペース] --set persistence.storageClass=ontap-gold --set persistence.annotations."trident\.netapp\.io/cloneFromPVC"=[コピー元のPVC名]

マニフェストを随時書くのでははなく、上記のように必要部分(今回はストレージクラス名とannotation) のみを定義し迅速に展開することができます。

今回の例はデータベースを例として説明しましたが、大量のデータ・セットを配るようなオペレーションをするときにも同様の手段で実施することができます。