復元中にリソースを変更する(非推奨)


このページでは、復元プロセス中に Kubernetes リソースを変更する方法について説明します。

概要

復元プロセスの一部として Kubernetes リソースを変更したいと考える理由はいくつかあります。次に例を示します。

  • 別のストレージ プロビジョナーを使用して PVC をプロビジョニングする必要がある場合があります(Kubernetes の in-tree ドライバから CSI ドライバに移行する場合など)。

  • 別の名前で名前空間を復元する必要がある場合があります。

  • Deployment または StatefulSet でレプリカ数を変更する必要がある場合があります。

Backup for GKE には、この処理を行う置換ルールという仕組みが用意されており、必要に応じ、RestorePlan の一部として定義できます。

置換ルールとは、置換フィールド値とともに指定される一連の一致条件のことです。置換ルールは、以下のように復元プロセスで使用できます。

  1. まず、Backup for GKE は、復元構成のスコープ パラメータ(名前空間、グループ / 種類など)に基づいて、復元するリソースセットを割り出します。

  2. Backup for GKE が、置換ルールの順序付きリストに対して復元用に選択された各リソースを評価します。ルールがリソースに一致する場合、そのリソースは更新されてフィールド値が置き換わります。すべてのリソースがすべてのルールと照合され、同じリソースで複数の置換が行われる可能性があります。

  3. すべてのルールが評価されると、Backup for GKE によって結果のリソースセットがターゲット クラスタに作成されます。

置換ルールのパラメータ

置換ルールを定義するには、次のパラメータを指定します。

パラメータ 必須 説明
targetNamespaces 省略可 名前空間のリストです。このルールに一致するリソースは、名前空間付きリソースであり、指定された名前空間のいずれかが付けられている必要があります。
  • このパラメータに何も指定しないと、すべてのリソース(すべての名前空間付きリソースとクラスタ スコープのリソース)が一致します。
  • 空の文字列("")を指定すると、クラスタ スコープのリソースにのみ一致します。Google Cloud コンソールで、[名前空間が指定されたリソースを除外する] チェックボックスをオンにすると、リストを 1 つの空の文字列に設定できます。
targetGroupKinds 省略可 Kubernetes リソース グループ / 種類のタプルのリストです。
  • このパラメータに何も指定しないと、すべてのリソースが一致します(グループや種類による制限はありません)。
  • 1 つ以上のグループ / 種類が指定された場合、リソースがルールに一致するためには、その中の 1 つに一致する必要があります。
targetJsonPath 必須 リソースと照合される JSONPath 式です。このルールはリソースと一致するだけでなく、リソース内の特定の属性にも一致します。
originalValuePattern 省略可 属性の現在の値と照合される正規表現です。指定しない場合、属性は常に一致します。
newValue 必須 一致した属性値に使用する新しい値です。

Google Cloud コンソールでの置換ルールの定義について詳しくは、一連の復元を計画するをご覧ください。

gcloud CLI を使用して置換ルールを定義するには、substitutionRules の YAML 配列を含むファイルを作成し、gcloud beta container backup-restore restore-plans create コマンドに --substitution-rules-file= パラメータを含めます。

置換ルールの例

以下の例は、gcloud CLI で使用される YAML 形式で記載しています。

StorageClass を変更する

この例では、復元されたすべての PersistentVolumeClaim リソースの StorageClass を、standard から premium-rwo に変更します。

substitutionRules:
- targetGroupKinds:
  - resourceGroup: ''
    resourceKind: PersistentVolumeClaim
  targetJsonPath: "{..storageClassName}"
  originalValuePattern: standard
  newValue: premium-rwo

名前空間のクローンを作成する

この例では、名前空間を「alpha」から「beta」にクローン作成します。つまり、新しい名前空間「beta」を作成し、「alpha」のすべてのリソースを新しい名前空間「beta」に復元します。この例では、2 つの置換ルール(名前空間用に 1 つ、名前空間内のリソース用に 1 つ)が必要です。

substitutionRules:
- targetNamespaces:
  - ''
  targetGroupKinds:
  - resourceGroup: ''
    resourceKind: Namespace
  targetJsonPath: "{.metadata.name}"
  originalValuePattern: alpha
  newValue: beta
- targetNamespaces:
  - alpha
  targetJsonPath: "{.metadata.namespace}"
  originalValuePattern: alpha
  newValue: beta

クローン作成された名前空間内の StorageClass とレプリカ数を変更する

この例では、名前空間のクローンを作成し、新しい名前空間のリソースに一連の変更を適用します。

  • PVC の StorageClass を standard から premium-rwo に変更します

  • Deployment のレプリカ数を 7 から 3 に変更します

substitutionRules:
- targetNamespaces:
  - ''
  targetGroupKinds:
  - resourceGroup: ''
    resourceKind: Namespace
  targetJsonPath: "{.metadata.name}"
  originalValuePattern: alpha
  newValue: beta
- targetNamespaces:
  - alpha
  targetJsonPath: "{.metadata.namespace}"
  originalValuePattern: alpha
  newValue: beta
- targetNamespaces:
  - beta
  targetGroupKinds:
  - resourceGroup: ''
    resourceKind: PersistentVolumeClaim
  targetJsonPath: "{..storageClassName}"
  originalValuePattern: standard
  newValue: premium-rwo
- targetNamespaces:
  - beta
  targetGroupKinds:
  - resourceGroup: apps
    resourceKind: Deployment
  targetJsonPath: "{$.spec.replicas}"
  originalValuePattern: '7'
  newValue: '3'