Questa pagina descrive come apportare modifiche alle risorse Kubernetes durante il processo di ripristino utilizzando le regole di trasformazione. Le regole di trasformazione sono pensate come miglioramento di una funzionalità precedente chiamata regole di sostituzione. Poiché non sono compatibili con le versioni precedenti delle regole di sostituzione, l'interfaccia delle regole di sostituzione ritirate è ancora disponibile.
Per visualizzare la documentazione relativa alle regole di sostituzione, vedi Modificare le risorse durante il ripristino.
Panoramica
Esistono diversi motivi per cui potresti voler modificare le risorse Kubernetes nell'ambito della procedura di ripristino:
Potresti voler creare un PersistentVolumeClaim (PVC) utilizzando un diverso provisioning di archiviazione. Ad esempio, vuoi passare dal driver in-tree di Kubernetes al driver CSI.
Potresti voler ripristinare uno spazio dei nomi con un nome diverso.
Potresti voler aggiungere, modificare o eliminare il valore associato a un'etichetta o a una chiave ConfigMap.
Potresti voler modificare il conteggio delle repliche in un deployment o in un StatefulSet.
Backup per GKE fornisce un meccanismo per apportare queste modifiche chiamato regole di trasformazione, che
puoi definire facoltativamente nell'ambito di un RestorePlan
.
Nella procedura di ripristino, le regole di trasformazione funzionano nel seguente modo:
Le regole sono organizzate in un elenco ordinato.
Tutte le risorse, ad eccezione di quelle
CustomResourceDefinition
, per le quali le trasformazioni non sono disponibili, da ripristinare vengono spostate in sequenza in questo elenco di regole.Ogni regola contiene una breve descrizione, i criteri di corrispondenza e le modifiche alle risorse.
Se una risorsa non corrisponde ai criteri di una regola, viene spostata alla regola successiva nell'elenco senza modifiche.
Se una risorsa corrisponde ai criteri di una regola, le modifiche della regola vengono applicate alla risorsa prima che venga spostata alla regola successiva nell'elenco.
Se vengono definite più regole, i criteri di corrispondenza di ogni regola vengono valutati in base alla versione della risorsa modificata dalle regole precedenti.
La versione finale della risorsa, dopo l'applicazione delle modifiche di qualsiasi regola di corrispondenza, è quella creata nel cluster.
Parametri della regola di trasformazione
Per creare una regola di trasformazione, fornisci le seguenti informazioni:
description
: una breve descrizione della regola di trasformazione.resourceFilter
: Questo filtro viene utilizzato per la corrispondenza con le risorse. Se non viene fornito alcunresourceFilter
, tutte le risorse corrispondono a questa regola.fieldActions
: questo è un elenco di modifiche da apportare alle risorse che corrispondono aresourceFilter
. Le modifiche vengono fornite come un elenco ordinato di azioni. L'ordine è importante perché il risultato di un'azione può influire sull'azione successiva nell'elenco. Se un'azione non va a buon fine, l'intero ripristino non andrà a buon fine.
Filtro risorse (resourceFilter
)
Per definire un filtro delle risorse, fornisci i seguenti parametri:
Parametro | Obbligatorio | Descrizione |
---|---|---|
namespaces |
facoltativo | Si tratta di un elenco di spazi dei nomi. Affinché una risorsa corrisponda a questa regola, deve essere una risorsa con spazio dei nomi e avere uno degli spazi dei nomi specificati. Se non viene fornito nulla per questo parametro, tutte le risorse corrisponderanno (tutte le risorse con spazio dei nomi e con ambito cluster). |
groupKinds |
facoltativo |
Questo è un elenco di tuple Group/Kind di risorse Kubernetes:
|
jsonPath |
facoltativo | Si tratta di un'espressione JSONPath utilizzata per la corrispondenza con le risorse. |
JSONPath (jsonPath
)
Un'espressione JSONPath viene utilizzata per trovare corrispondenze con le risorse. Se il risultato dell'espressione non è vuoto rispetto a una risorsa, questa risorsa viene considerata corrispondente.
Data la seguente risorsa:
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"
}
}
Esempio di utilizzo delle espressioni JSONPath:
Expression | Descrizione | Risultato |
---|---|---|
.metadata[?(@.name == 'mysql-cm')] |
L'oggetto metadata contiene la chiave name e il relativo valore è "mysql-cm" |
[ |
.metadata.labels['app\.kubernetes\.io/name'] |
Il valore stringa della chiave "app.kubernetes.io/name" in metadata.labels |
[ |
.data['primary\.cnf'] |
Il valore dell'oggetto della chiave "primary.cnf" in data |
[ |
.metadata[?(@.name =~ /^mysql-.*/i)] |
L'oggetto metadata contiene la chiave name e il relativo
valore corrisponde all'espressione regolare "/^mysql-.*/i".Le barre / vengono utilizzate per delimitare il pattern dell'espressione regolare. Il i alla fine dell'espressione regolare
è il flag per la corrispondenza senza distinzione tra maiuscole e minuscole. |
[ |
Se l'output dell'espressione JSONPath non è vuoto, la risorsa corrispondente corrisponderà a questa regola.
Pertanto, .metadata[?(@.name == 'mysql-cm')]
e .metadata[?(@.name == 'mysql-cm')].name
restituiscono lo stesso risultato
corrispondente, ovvero la risorsa il cui .metadata.name
è "mysql-cm"
.
Quando il filtro viene utilizzato in JSONPath per trovare una corrispondenza con una chiave in una mappa nella console Google Cloud , il carattere .
(punto) deve
essere sottoposto all'escape utilizzando una \
(barra rovesciata). Se JSONPath viene fornito nel contesto di YAML utilizzando gcloud CLI o Terraform Language, sono necessarie \\
(doppie barre rovesciate).
Ad esempio, .metadata.labels['app\.kubernetes\.io/name']
equivale a .metadata.labels['app\\.kubernetes\\.io/name']
in YAML o Terraform.
Ti consigliamo di utilizzare uno strumento di valutazione JSONPath con supporto delle espressioni regolari per testare l'espressione prima dell'uso.
Puoi anche utilizzare kubectl
per verificare il risultato delle espressioni JSONPath.
Per altri esempi, consulta la sezione Supporto di JSONPath.
Azione campo (fieldActions
)
Le azioni sui campi sono modellate in base a JSON Patch, che definisce una struttura di documento JSON per esprimere un'operazione da applicare a un documento JSON. Per definire un'azione sul campo, sono necessari i seguenti parametri:
path
: questo è un valore JSON Pointer che fa riferimento alla posizione nelle risorse di destinazione in cui viene eseguita l'operazione. I puntatori JSON iniziano sempre con una/
(barra) e i nomi delle proprietà (chiavi) che scendono negli elementi secondari sono separati anche da una/
(barra).op
: questo è il tipo di operazione eseguita sulle risorse. Sono supportate cinque operazioni:add
inserisce un nuovo oggetto o valore nelpath
specificato, a seconda di ciò a cui fa riferimentopath
.remove
rimuove il valore dapath
specificato.replace
sostituisce il valore inpath
specificato con un nuovo valore.move
rimuove il valore da una posizione e lo aggiunge alpath
specificato.copy
copia il valore da una posizione alpath
specificato.
Puoi trovare esempi di ogni operazione utilizzando la seguente definizione di pod:
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"
]
}
]
}
}
Aggiungi
value
è sempre obbligatorio per le operazioni add
e deve essere un elemento JSON valido.
La seguente azione aggiunge una nuova variabile di ambiente "PORT"
con valore "80"
al container nginx
.
op: add
path: "/spec/containers/0/env/0"
value: >
{
"name": "PORT",
"value": "80"
}
Originale
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
Trasformati
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
La seguente azione aggiunge un valore a una nuova etichetta app.kubernetes.io/name: nginx
al pod.
op: add
path: "/metadata/labels/app.kubernetes.io~1name"
value: "nginx"
Originale
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
Trasformati
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
La seguente azione sostituisce l'immagine del container nginx
per modificarla
da "nginx:latest"
a "nginx:stable"
.
op: add
path: "/spec/containers/0/image"
value: nginx:stable
Originale
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
Trasformati
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
Rimuovi
La seguente azione rimuove i requisiti di risorse per il container nginx
.
op: remove
path: "/spec/containers/0/resources"
Originale
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
Trasformati
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
Sostituisci
value
è obbligatorio per l'operazione replace
e deve essere un elemento JSON.
La seguente azione sostituisce l'immagine del container nginx
da nginx:latest
a nginx:stable
.
op: replace
path: "/spec/containers/0/image"
value: nginx:stable
Originale
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
Trasformati
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
Sposta
fromPath
è obbligatorio per l'operazione move
.
La seguente azione rimuove le variabili di ambiente dal container nginx
e le aggiunge
al container di inizializzazione install
.
op: move
fromPath: "/spec/containers/0/env"
path: "/spec/initContainers/0/env"
Originale
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
Trasformati
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
Copia
fromPath
è obbligatorio per l'operazione copy
.
La seguente azione copia le variabili di ambiente dal container nginx
al container init install
.
op: copy
fromPath: "/spec/containers/0/env"
path: "/spec/initContainers/0/env"
Originale
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
Trasformati
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
Per scoprire di più sulla definizione delle regole di trasformazione nella console Google Cloud , consulta Pianificare un insieme di ripristini.
Per definire le regole di trasformazione tramite gcloud CLI, crea un file contenente un array YAML
di transformationRules
e includi il parametro --transformation-rules-file=
nel
comando gcloud beta container backup-restore restore-plans create
.
Esempi di regole di trasformazione
Gli esempi seguenti sono forniti nel formato YAML utilizzato da gcloud CLI o dal linguaggio di configurazione Terraform.
Modifica di StorageClass degli oggetti PVC
Questo esempio modifica la StorageClass in tutte le risorse PersistentVolumeClaim ripristinate da
standard
a premium-rwo
:
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"
}
}
Clonare uno spazio dei nomi
Questo esempio clona uno spazio dei nomi da alpha a beta, creando un nuovo
spazio dei nomi "beta"
e ripristinando tutte le risorse da "alpha"
nel nuovo
spazio dei nomi "beta"
. Questo esempio richiede due regole di trasformazione: una
per lo spazio dei nomi stesso e una per le risorse all'interno dello spazio dei nomi.
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"
}
}
Modificare StorageClass di PVC e conteggio delle repliche in uno spazio dei nomi clonato
Questo esempio clona uno spazio dei nomi e poi applica una serie di modifiche alle risorse nel nuovo spazio dei nomi:
Modifica StorageClass sugli oggetti PVC da
standard
apremium-rwo
Modifica il numero di repliche del deployment
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"
}
}
Modificare, inserire e rimuovere le voci ConfigMap
Questo esempio modifica ConfigMap
che contiene la chiave dell'etichetta "app.kubernetes.io/name"
nello spazio dei nomi "mysql"
in:
Modifica il valore della voce
"endpoint"
in"192.0.2.127"
.Inserisci una nuova voce
"connection-timeout"
con valore"30s"
.Rimuovi la voce con la chiave
"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"
}
}
Aggiungi un'etichetta app.kubernetes.io/name
alle risorse il cui nome inizia con mysql-;
Questo esempio aggiunge un'etichetta app.kubernetes.io/name
con il valore mysql
a
tutte le risorse il cui nome inizia con mysql-:
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"
}
}
Assegna un indirizzo IP statico a un servizio di tipo LoadBalancer
Questo esempio assegna un indirizzo IP statico per il servizio "nginx-svc"
nello spazio dei nomi "nginx"
:
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"
}
}