Auf dieser Seite wird beschrieben, wie Sie während der Wiederherstellung mithilfe von Transformationsregeln Änderungen an Kubernetes-Ressourcen vornehmen. Transformationsregeln sind als Verbesserung gegenüber einem früheren Feature, die Substitutionsregeln genannt werden, gedacht. Da sie nicht mit Substitutionsregeln kompatibel sind, ist die Schnittstelle der verworfenen Substitutionsregeln weiterhin verfügbar.
Die Dokumentation zu Substitutionsregeln finden Sie unter Ressourcen während der Wiederherstellung ändern.
Übersicht
Es gibt mehrere Gründe, warum Kubernetes-Ressourcen im Rahmen der Wiederherstellung geändert werden können:
Sie möchten einen PersistentVolumeClaim (PVC) mit einem anderen Speicherbereitsteller erstellen. Sie können beispielsweise vom integrierten Kubernetes-Treiber zum CSI-Treiber wechseln.
Sie können einen Namespace unter einem anderen Namen wiederherstellen.
Sie können den mit einem Label oder ConfigMap-Schlüssel verknüpften Wert hinzufügen, ändern oder löschen.
Sie können die Anzahl der Replikate in einem Deployment oder StatefulSet ändern.
Backup for GKE bietet einen Mechanismus zum Ausführen dieser Änderungen, die als Transformationsregeln bezeichnet werden und die Sie optional als Teil eines RestorePlan
definieren können.
Im Wiederherstellungsprozess funktionieren Transformationsregeln so:
Regeln sind in einer sortierten Liste organisiert.
Alle Ressourcen außer
CustomResourceDefinition
-Ressourcen, für die keine Transformationen verfügbar sind, werden nacheinander in dieser Liste von Regeln verschoben.Jede Regel enthält eine kurze Beschreibung, Übereinstimmungskriterien und Ressourcenänderungen.
Wenn eine Ressource nicht den Kriterien einer Regel entspricht, wird sie ohne Änderung zur nächsten Regel in der Liste verschoben.
Wenn eine Ressource mit den Kriterien einer Regel übereinstimmt, werden die Änderungen der Regel auf die Ressource angewendet, bevor sie zur nächsten Regel in der Liste verschoben wird.
Wenn mehrere Regeln definiert sind, werden die Abgleichskriterien jeder Regel anhand der Version der Ressource ausgewertet, die durch vorherige Regeln geändert wurde.
Die endgültige Version der Ressource wird nach Anwendung der Änderungen für die übereinstimmende Regel im Cluster erstellt.
Parameter für Transformationsregeln
Zum Erstellen einer Transformationsregel geben Sie die folgenden Informationen an:
description
: Dies ist eine kurze Beschreibung der Transformationsregel.resourceFilter
: Dieser Filter wird für den Abgleich mit Ressourcen verwendet. Wenn keinresourceFilter
angegeben ist, entsprechen alle Ressourcen dieser Regel.fieldActions
: Dies ist eine Liste von Änderungen, die an den Ressourcen vorgenommen werden sollen, die demresourceFilter
entsprechen. Die Änderungen werden als sortierte Liste von Aktionen bereitgestellt. Die Reihenfolge ist hier wichtig, da sich das Ergebnis einer Aktion auf die nächste Aktion in der Liste auswirken kann. Wenn eine Aktion fehlschlägt, schlägt die gesamte Wiederherstellung fehl.
Ressourcenfilter (resourceFilter
)
Geben Sie die folgenden Parameter an, um einen Ressourcenfilter zu definieren:
Parameter | Erforderlich | Beschreibung |
---|---|---|
namespaces |
optional | Dies ist eine Liste von Namespaces. Damit eine Ressource dieser Regel entspricht, muss es sich um eine Namespace-Ressource handeln und einen der angegebenen Namespaces haben. Wenn für diesen Parameter nichts angegeben ist, stimmen alle Ressourcen überein (alle Namespace- und clusterbezogenen Ressourcen). |
groupKinds |
optional |
Dies ist eine Liste von Tupeln der Group/Kind -Ressource von Kubernetes:
|
jsonPath |
optional | Dies ist ein JSONPath, mit dem Ressourcen abgeglichen werden. |
JSONPath (jsonPath
)
Ein JSONPath-Ausdruck wird zum Abgleich mit Ressourcen verwendet. Wenn das Ergebnis des Ausdrucks nicht für eine Ressource leer ist, wird diese Ressource als abgeglichen betrachtet.
Betrachten Sie diese Ressource:
YAML
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-cm
labels:
app: mysql
app.kubernetes.io/name: mysql
data:
primary.cnf: |
# Apply this config only on the primary.
[mysqld]
log-bin
replica.cnf: |
# Apply this config only on replicas.
[mysqld]
super-read-only
JSON
{
"apiVersion": "v1",
"kind": "ConfigMap",
"metadata": {
"name": "mysql-cm",
"labels": {
"app": "mysql",
"app.kubernetes.io/name": "mysql"
}
},
"data": {
"primary.cnf": "# Apply this config only on the primary.\n[mysqld]\nlog-bin\n",
"replica.cnf": "# Apply this config only on replicas.\n[mysqld]\nsuper-read-only\n"
}
}
Beispiel für die Verwendung von JSONPath-Ausdrücken:
Expression | Beschreibung | Ergebnis |
---|---|---|
.metadata[?(@.name == 'mysql-cm')] |
Das Objekt metadata enthält den Schlüssel name und der Wert ist "mysql-cm". |
[ |
.metadata.labels['app\.kubernetes\.io/name'] |
Der Stringwert des Schlüssels "app.kubernetes.io/name" unter metadata.labels |
[ |
.data['primary\.cnf'] |
Der Objektwert des Schlüssels "primary.cnf" unter data |
[ |
.metadata[?(@.name =~ /^mysql-.*/i)] |
Das metadata -Objekt enthält den Schlüssel name und dessen Wert entspricht dem regulären Ausdruck "/^mysql-.*/i".Die Schrägstriche / werden verwendet, um das Muster des regulären Ausdrucks zu trennen. Das i am Ende des regulären Ausdrucks ist das Flag für den Abgleich ohne Berücksichtigung der Groß- und Kleinschreibung. |
[ |
Solange die Ausgabe des JSONPath-Ausdrucks nicht leer ist, entspricht die entsprechende Ressource dieser Regel.
Daher führen .metadata[?(@.name == 'mysql-cm')]
und .metadata[?(@.name == 'mysql-cm')].name
zum selben übereinstimmenden Ergebnis, das mit der Ressource übereinstimmt, deren .metadata.name
"mysql-cm"
ist.
Wenn der Filter in JSONPath für den Abgleich eines Schlüssels in einer Zuordnung in der Google Cloud Console verwendet wird, muss .
(Punkt) mit einem \
(umgekehrter Schrägstrich) maskiert werden. Wenn der JSONPath im Kontext der YAML mit der gcloud CLI oder der Terraform Language bereitgestellt wird, sind \\
(doppelte Schrägstriche) erforderlich.
.metadata.labels['app\.kubernetes\.io/name']
entspricht beispielsweise .metadata.labels['app\\.kubernetes\\.io/name']
in YAML oder Terraform.
Wir empfehlen die Verwendung eines JSONPath-Bewertungstools mit Unterstützung für reguläre Ausdrücke, um den Ausdruck vor der Verwendung zu testen.
Sie können auch kubectl
verwenden, um das Ergebnis von JSONPath-Ausdrücken zu prüfen.
Weitere Beispiele finden Sie unter JSONPath-Unterstützung.
Feldaktion (fieldActions
)
Feldaktionen werden auf der Grundlage von JSON Patch modelliert. Dieser Wert definiert eine JSON-Dokumentstruktur zur Darstellung eines Vorgangs, der auf ein JSON-Dokument angewendet werden soll. Zum Definieren einer Feldaktion sind die folgenden Parameter erforderlich:
path
: Dies ist ein JSON-Pointer-Wert, der auf den Standort in Zielressourcen verweist, in dem der Vorgang ausgeführt wird. JSON-Zeiger beginnen immer mit einem/
(Schrägstrich) und die Attributnamen (Schlüssel) werden von untergeordneten Elementen ebenfalls durch einen/
(Schrägstrich) getrennt.op
: Dies ist der Typ des Vorgangs, der für Ressourcen ausgeführt wird. Fünf Vorgänge werden unterstützt:add
fügt ein neues Objekt oder einen neuen Wert in den angegebenenpath
ein, je nachdem, worauf derpath
verweist.remove
entfernt den Wert aus dem angegebenenpath
.replace
ersetzt den Wert am angegebenenpath
durch einen neuen Wert.move
entfernt den Wert aus einem Standort und fügt ihn dem angegebenenpath
hinzu.copy
kopiert den Wert von einem Standort in den angegebenenpath
.
Beispiele für jeden Vorgang finden Sie in der folgenden Pod-Definition:
YAML
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
JSON
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "nginx",
"namespace": "ns",
"labels": {
"app": "nginx"
}
},
"spec": {
"containers": [
{
"name": "nginx",
"image": "nginx:latest",
"ports": [
{
"containerPort": 80
}
],
"env": [
{
"name": "PROTOCOL",
"value": "https"
}
],
"resources": {
"limits": {
"cpu": "250m",
"memory": "64Mi"
}
}
}
],
"initContainers": [
{
"name": "install",
"image": "busybox:stable",
"command": [
"wget",
"-O",
"/tmp/index.html",
"http://info.cern.ch"
]
}
]
}
}
Hinzufügen
value
ist immer für add
-Vorgänge erforderlich und muss ein gültiges JSON-Element sein.
Durch die folgende Aktion wird dem Container nginx
die neue Umgebungsvariable "PORT"
mit dem Wert "80"
hinzugefügt.
op: add
path: "/spec/containers/0/env/0"
value: >
{
"name": "PORT",
"value": "80"
}
Original
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
Umgewandelt
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
- name: PORT # newly added
value: "80" # newly added
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
Die folgende Aktion fügt dem Pod den Wert eines neuen Labels app.kubernetes.io/name: nginx
hinzu.
op: add
path: "/metadata/labels/app.kubernetes.io~1name"
value: "nginx"
Original
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
Umgewandelt
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
app.kubernetes.io/name: nginx # newly added
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
Mit der folgenden Aktion wird das Image des Containers nginx
von "nginx:latest"
in "nginx:stable"
geändert.
op: add
path: "/spec/containers/0/image"
value: nginx:stable
Original
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
Umgewandelt
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:stable # replaced
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
Entfernen
Mit der folgenden Aktion werden die Ressourcenanforderungen für den Container nginx
entfernt.
op: remove
path: "/spec/containers/0/resources"
Original
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
Umgewandelt
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
# resource requirements are removed
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
Ersetzen
value
ist für den replace
-Vorgang erforderlich und muss ein JSON-Element sein.
Durch die folgende Aktion wird das Image des Containers nginx
von nginx:latest
durch nginx:stable
ersetzt.
op: replace
path: "/spec/containers/0/image"
value: nginx:stable
Original
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
Umgewandelt
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:stable # replaced
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
Verschieben
fromPath
ist für den move
-Vorgang erforderlich.
Mit der folgenden Aktion werden Umgebungsvariablen aus dem Container nginx
entfernt und dem install
-init-Container hinzugefügt.
op: move
fromPath: "/spec/containers/0/env"
path: "/spec/initContainers/0/env"
Original
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
Umgewandelt
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
# "env" is moved to "install" container
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
env: # moved "from" nginx container
- name: PROTOCOL
value: https
Kopieren
fromPath
ist für den copy
-Vorgang erforderlich.
Mit der folgenden Aktion werden Umgebungsvariablen aus dem Container nginx
in den Init-Container install
kopiert.
op: copy
fromPath: "/spec/containers/0/env"
path: "/spec/initContainers/0/env"
Original
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
Umgewandelt
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: ns
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
env:
- name: PROTOCOL
value: "https"
resources:
limits:
cpu: "250m"
memory: "64Mi"
initContainers:
- name: install
image: busybox:stable
command:
- wget
- "-O"
- "/tmp/index.html"
- http://info.cern.ch
env: # copy from "nginx" container
- name: PROTOCOL
value: https
Weitere Informationen zum Definieren von Transformationsregeln in der Google Cloud Console finden Sie unter Eine Reihe von Wiederherstellungen planen.
Zum Definieren von Transformationsregeln über die gcloud CLI erstellen Sie eine Datei mit einem YAML-Array von transformationRules
und fügen den Parameter --transformation-rules-file=
in den Befehl gcloud beta container backup-restore restore-plans create
ein.
Beispiele für Transformationsregeln
Die folgenden Beispiele finden Sie im YAML-Format, das von der gcloud CLI oder der Terraform-Konfigurationssprache verwendet wird.
StorageClass von PVCs ändern
In diesem Beispiel wird die StorageClass in allen wiederhergestellten PersistentVolumeClaim-Ressourcen von standard
in premium-rwo
geändert:
YAML
transformationRules:
- description: Change StorageClass in PVC from standard to premium-rwo
resourceFilter:
namespaces: []
jsonPath: ".spec[?(@.storageClassName == 'standard')]"
groupKinds:
- resourceGroup: ""
resourceKind: PersistentVolumeClaim
fieldActions:
- op: REPLACE
path: "/spec/storageClassName"
value: "premium-rwo"
Terraform
transformation_rules {
description = "Change StorageClass in PVC from standard to premium-rwo"
resource_filter {
json_path = ".spec[?(@.storageClassName == 'standard')]"
group_kinds {
resource_kind = "PersistentVolumeClaim"
}
}
field_actions {
op = "REPLACE"
path = "/spec/storageClassName"
value = "premium-rwo"
}
}
Namespace klonen
In diesem Beispiel wird ein Namespace von Alpha auf Beta geklont. Dabei wird ein neuer Namespace "beta"
erstellt und alle Ressourcen von "alpha"
werden im neuen Namespace "beta"
wiederhergestellt. In diesem Beispiel sind zwei Transformationsregeln erforderlich – eine für den Namespace selbst und eine für die Ressourcen innerhalb des Namespace.
YAML
transformationRules:
- description: Rename namespace name from alpha to beta
resourceFilter:
namespaces: []
jsonPath: ".metadata[?(@.name == 'alpha')]"
groupKinds:
- resourceGroup: ""
resourceKind: Namespace
fieldActions:
- op: REPLACE
path: "/metadata/name"
value: "beta"
- description: Clone all resources from namespace alpha to beta
resourceFilter:
namespaces: ["alpha"]
fieldActions:
- op: REPLACE
path: "/metadata/namespace"
value: "beta"
Terraform
transformation_rules {
description = "Rename namespace name from alpha to beta"
resource_filter {
json_path = ".metadata[?(@.name == 'alpha')]"
group_kinds {
resource_kind = "Namespace"
}
}
field_actions {
op = "REPLACE"
path = "/metadata/name"
value = "beta"
}
}
transformation_rules {
description = "Clone all resources from namespace alpha to beta"
resource_filter {
namespaces = ["alpha"]
}
field_actions {
op = "REPLACE"
path = "/metadata/namespace"
value = "beta"
}
}
StorageClass von PVCs und Replikatanzahl in einem geklonten Namespace ändern
In diesem Beispiel wird ein Namespace geklont und dann eine Reihe von Änderungen auf Ressourcen im neuen Namespace angewendet:
StorageClass für PVCs von
standard
inpremium-rwo
ändernÄndern Sie die Replikatanzahl der Bereitstellung
nginx
in3
.
YAML
transformationRules:
- description: Rename the namespace from alpha to beta
resourceFilter:
namespaces: []
jsonPath: ".metadata[?(@.name == 'alpha')]"
groupKinds:
- resourceGroup: ""
resourceKind: Namespace
fieldActions:
- op: REPLACE
path: "/metadata/name"
value: "beta"
- description: Change all resources from namespace alpha to beta
resourceFilter:
namespaces: ["alpha"]
fieldActions:
- op: REPLACE
path: "/metadata/namespace"
value: "beta"
- description: Change the StorageClass on PVCs from standard to premium-rwo
resourceFilter:
namespaces: ["beta"]
jsonPath: ".spec[?(@.storageClassName == 'standard')]"
groupKinds:
- resourceGroup: ""
resourceKind: PersistentVolumeClaim
fieldActions:
- op: REPLACE
path: "/spec/storageClassName"
value: "premium-rwo"
- description: Change the replica count of the Deployment nginx from 7 to 3
resourceFilter:
namespaces: ["beta"]
jsonPath: ".metadata[?(@.name == 'nginx')]"
groupKinds:
- resourceGroup: apps
resourceKind: Deployment
fieldActions:
- op: REPLACE
path: "/spec/replicas"
value: "3"
Terraform
transformation_rules {
description = "Rename the namespace from alpha to beta"
resource_filter {
json_path = ".metadata[?(@.name == 'alpha')]"
group_kinds {
resource_kind = "Namespace"
}
}
field_actions {
op = "REPLACE"
path = "/metadata/name"
value = "beta"
}
}
transformation_rules {
description = "Change all resources from namespace alpha to beta"
resource_filter {
namespaces = ["alpha"]
}
field_actions {
op = "REPLACE"
path = "/metadata/namespace"
value = "beta"
}
}
transformation_rules {
description = "Change the StorageClass on PVCs from standard to premium-rwo"
resource_filter {
namespaces = ["beta"]
json_path = ".spec[?(@.storageClassName == 'standard')]"
group_kinds {
resource_kind = "PersistentVolumeClaim"
}
}
field_actions {
op = "REPLACE"
path = "/spec/storageClassName"
value = "premium-rwo"
}
}
transformation_rules {
description = "Change the replica count of the Deployment nginx from 7 to 3"
resource_filter {
namespaces = ["beta"]
json_path = ".metadata[?(@.name == 'nginx')]"
group_kinds {
resource_group = "apps"
resource_kind = "Deployment"
}
}
field_actions {
op = "REPLACE"
path = "/spec/replicas"
value = "3"
}
}
ConfigMap-Einträge ändern, einfügen und entfernen
In diesem Beispiel wird ConfigMap
, das den Labelschlüssel "app.kubernetes.io/name"
im Namespace "mysql"
enthält, so geändert:
Ändern Sie den Wert des Eintrags
"endpoint"
in"192.0.2.127"
.Fügen Sie einen neuen Eintrag
"connection-timeout"
mit dem Wert"30s"
ein.Entfernen Sie den Eintrag mit dem Schlüssel
"read-timeout"
.
YAML
transformationRules:
- description: Change, insert, remove `ConfigMap` entres
resourceFilter:
namespaces: ["mysql"]
jsonPath: ".metadata.labels['app\\.kubernetes\\.io/name']"
groupKinds:
- resourceGroup: ""
resourceKind: ConfigMap
fieldActions:
- op: REPLACE
path: "/data/endpoint"
value: "192.0.2.127"
- op: ADD
path: "/data/connection-timeout"
value: "30s"
- op: REMOVE
path: "/data/read-timeout"
Terraform
transformation_rules {
description = "Change, insert, remove `ConfigMap` entres"
resource_filter {
namespaces = ["mysql"]
json_path = ".metadata.labels['app\\.kubernetes\\.io/name']"
group_kinds {
resource_kind = "ConfigMap"
}
}
field_actions {
op = "REPLACE"
path = "/data/endpoint"
value = "192.0.2.127"
}
field_actions {
op = "ADD"
path = "/data/connection-timeout"
value = "30s"
}
field_actions {
op = "REMOVE"
path = "/data/read-timeout"
}
}
Fügen Sie Ressourcen das Label app.kubernetes.io/name
hinzu, deren Name mit mysql- beginnt.
In diesem Beispiel wird allen Ressourcen, deren Name mit mysql- beginnt, das Label app.kubernetes.io/name
mit dem Wert mysql
hinzugefügt:
YAML
transformationRules:
- description: Add a label to resources whose name starts with
resourceFilter:
namespaces: []
jsonPath: ".metadata[?(@.name =~ /^mysql-.*/i)]"
fieldActions:
- op: ADD
path: "/metadata/labels/app.kubernetes.io~1name"
value: "mysql"
Terraform
transformation_rules {
description = "Add a label to resources whose name starts with"
resource_filter {
json_path = ".metadata[?(@.name =~ /^mysql-.*/i)]"
}
field_actions {
op = "ADD"
path = "/metadata/labels/app.kubernetes.io~1name"
value = "mysql"
}
}
Statische IP-Adresse für einen Dienst des Typs LoadBalancer zuweisen
In diesem Beispiel wird dem Dienst "nginx-svc"
im Namespace "nginx"
eine statische IP-Adresse zugewiesen:
YAML
transformationRules:
- description: Assign a static IP to Service nginx-svc
resourceFilter:
namespaces: ["nginx"]
jsonPath: ".metadata[?(@.name == 'nginx-svc')]"
groupKinds:
- resourceGroup: ""
resourceKind: Service
fieldActions:
- op: ADD
path: "/spec/loadBalancerIP"
value: "192.0.2.127"
Terraform
transformation_rules {
description = "Assign a static IP to Service nginx-svc"
resource_filter {
namespaces = ["nginx"]
json_path = ".metadata[?(@.name == 'nginx-svc')]"
group_kinds {
resource_kind = "Service"
}
}
field_actions {
op = "ADD"
path = "/spec/loadBalancerIP"
value = "192.0.2.127"
}
}