このページでは、復元プロセス中に Kubernetes リソースを変更する方法について説明します。
概要
復元プロセスの一部として Kubernetes リソースを変更したいと考える理由はいくつかあります。次に例を示します。
別のストレージ プロビジョナーを使用して PVC をプロビジョニングする必要がある場合があります(Kubernetes の in-tree ドライバから CSI ドライバに移行する場合など)。
別の名前で名前空間を復元する必要がある場合があります。
Deployment または StatefulSet でレプリカ数を変更する必要がある場合があります。
Backup for GKE には、この処理を行う置換ルールという仕組みが用意されており、必要に応じ、RestorePlan
の一部として定義できます。
置換ルールとは、置換フィールド値とともに指定される一連の一致条件のことです。置換ルールは、以下のように復元プロセスで使用できます。
まず、Backup for GKE は、復元構成のスコープ パラメータ(名前空間、グループ / 種類など)に基づいて、復元するリソースセットを割り出します。
Backup for GKE が、置換ルールの順序付きリストに対して復元用に選択された各リソースを評価します。ルールがリソースに一致する場合、そのリソースは更新されてフィールド値が置き換わります。すべてのリソースがすべてのルールと照合され、同じリソースで複数の置換が行われる可能性があります。
すべてのルールが評価されると、Backup for GKE によって結果のリソースセットがターゲット クラスタに作成されます。
置換ルールのパラメータ
置換ルールを定義するには、次のパラメータを指定します。
パラメータ | 必須 | 説明 |
---|---|---|
targetNamespaces | 省略可 |
名前空間のリストです。このルールに一致するリソースは、名前空間付きリソースであり、指定された名前空間のいずれかが付けられている必要があります。
|
targetGroupKinds | 省略可 |
Kubernetes リソース グループ / 種類のタプルのリストです。
|
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'