Cette page explique comment modifier des ressources Kubernetes pendant le processus de restauration à l'aide de règles de transformation. Les règles de transformation visent à apporter une amélioration par rapport à une fonctionnalité précédente appelée règles de substitution. Comme elles ne sont pas rétrocompatibles avec les règles de substitution, l'interface des règles de substitution obsolètes est toujours disponible.
Pour afficher la documentation sur les règles de substitution, consultez la section Modifier des ressources lors de la restauration.
Présentation
Plusieurs raisons peuvent vous pousser à modifier des ressources Kubernetes dans le cadre du processus de restauration :
Vous pouvez créer un objet PersistentVolumeClaim (PVC) à l'aide d'un autre approvisionneur de stockage. Par exemple, vous souhaitez passer du pilote "in-tree" de Kubernetes au pilote CSI.
Vous souhaitez restaurer un espace de noms sous un autre nom.
Vous pouvez ajouter, modifier ou supprimer la valeur associée à une étiquette ou à une clé ConfigMap.
Vous souhaitez modifier le nombre d'instances répliquées dans une installation exécutée en tant que Deployment ou StatefulSet.
Sauvegarde pour GKE fournit un mécanisme permettant d'effectuer ces modifications, appelé règles de transformation, que vous pouvez éventuellement définir dans le cadre d'un RestorePlan
.
Dans le processus de restauration, les règles de transformation fonctionnent comme suit :
Les règles sont organisées sous forme de liste numérotée.
Toutes les ressources, à l'exception des ressources
CustomResourceDefinition
pour lesquelles les transformations ne sont pas disponibles, peuvent être restaurées de manière séquentielle via cette liste de règles.Chaque règle contient une brève description, des critères de correspondance et des modifications de ressources.
Si une ressource ne correspond pas aux critères d'une règle, elle passe à la règle suivante sans modification.
Si une ressource correspond aux critères d'une règle, les modifications de la règle sont appliquées à la ressource avant de passer à la règle suivante de la liste.
Si plusieurs règles sont définies, les critères de correspondance de chaque règle sont évalués en fonction de la version de la ressource modifiée par les règles précédentes.
La version finale de la ressource, après application des modifications de la règle correspondante, est celle créée dans le cluster.
Paramètres d'une règle de transformation
Vous créez une règle de transformation en fournissant les informations suivantes :
description
: courte description de la règle de transformation.resourceFilter
: ce filtre permet de mettre en correspondance les ressources. Si aucunresourceFilter
n'est fourni, toutes les ressources correspondent à cette règle.fieldActions
: liste des modifications à apporter aux ressources correspondant auresourceFilter
. Les modifications sont fournies sous la forme d'une liste numérotée d'actions. L'ordre est important, car le résultat d'une action peut affecter l'action suivante de la liste. Si une action échoue, l'intégralité de la restauration échoue.
Filtre de ressource (resourceFilter
)
Pour définir un filtre de ressource, vous devez fournir les paramètres suivants :
Paramètre | Obligatoire | Description |
---|---|---|
namespaces |
facultatif | Il s'agit d'une liste d'espaces de noms. Pour qu'une ressource corresponde à cette règle, il doit s'agir d'une ressource associée à un espace de noms, et celui-ci doit correspondre à l'un des espaces de noms donnés. Si rien n'est spécifié pour ce paramètre, toutes les ressources correspondent (toutes les ressources sont des ressources associées à un espace de noms et des ressources à l'échelle d'un cluster). |
groupKinds |
facultatif |
Voici une liste de tuples de ressources Kubernetes Group/Kind :
|
jsonPath |
facultatif | Il s'agit d'une expression JSONPath utilisée pour mettre en correspondance des ressources. |
JSONPath (jsonPath
)
Une expression JSONPath permet de mettre en correspondance les ressources. Si le résultat de l'expression n'est pas vide par rapport à une ressource, cette ressource est considérée comme correspondante.
Compte tenu de la ressource suivante :
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"
}
}
Exemple d'utilisation d'expressions JSONPath :
Expression | Description | Résultat |
---|---|---|
.metadata[?(@.name == 'mysql-cm')] |
L'objet metadata contient la clé name et sa valeur est "mysql-cm". |
[ |
.metadata.labels['app\.kubernetes\.io/name'] |
Valeur de chaîne de la clé "app.kubernetes.io/name" sous metadata.labels |
[ |
.data['primary\.cnf'] |
Valeur d'objet de la clé "primary.cnf" sous data |
[ |
.metadata[?(@.name =~ /^mysql-.*/i)] |
L'objet metadata contient la clé name et sa valeur correspond à l'expression régulière "/^mysql-.*/i".Les barres obliques / permettent de délimiter le modèle d'expression régulière. La lettre i à la fin de l'expression régulière est l'option permettant de définir une correspondance non sensible à la casse. |
[ |
Tant que le résultat de l'expression JSONPath n'est pas vide, la ressource correspondante correspond à cette règle.
Ainsi, .metadata[?(@.name == 'mysql-cm')]
et .metadata[?(@.name == 'mysql-cm')].name
génèrent le même résultat correspondant, qui correspond à la ressource dont le champ .metadata.name
est défini sur "mysql-cm"
.
Lorsque le filtre est utilisé dans JSONPath pour correspondre à une clé d'un mappage dans la console Google Cloud, .
(point) doit être échappé à l'aide d'une \
(barre oblique inverse). Si le chemin JSONPath est fourni dans le contexte de YAML à l'aide de gcloud CLI ou du langage Terraform, des barres obliques inverses (\\
) sont nécessaires.
Par exemple, .metadata.labels['app\.kubernetes\.io/name']
correspond à .metadata.labels['app\\.kubernetes\\.io/name']
dans YAML ou Terraform.
Nous vous recommandons d'utiliser un outil d'évaluation JSONPath compatible avec les expressions régulières pour tester l'expression avant toute utilisation.
Vous pouvez également utiliser kubectl
pour vérifier le résultat des expressions JSONPath.
Pour plus d'exemples, consultez la page Assistance JSONPath.
Action de champ (fieldActions
)
Les actions de champ sont modélisées en fonction d'un correctif JSON, qui définit une structure de documents JSON permettant d'exprimer une opération à appliquer à un document JSON. Pour définir une action de champ, les paramètres suivants sont requis :
path
: valeur de pointeur JSON faisant référence à l'emplacement dans les ressources cibles où l'opération est effectuée. Les valeurs de pointeur JSON commencent toujours par une barre oblique (/
), et les noms de propriété (clés) descendent dans les éléments enfants, séparés par une barre oblique (/
).op
: correspond au type d'opération effectuée sur les ressources. Cinq opérations sont acceptées :add
insère un nouvel objet ou une nouvelle valeur dans lepath
spécifié, en fonction des valeur référencées par lepath
.remove
supprime la valeur dupath
spécifié.replace
remplace la valeur dupath
spécifié par une nouvelle valeur.move
supprime la valeur d'un emplacement et l'ajoute aupath
spécifié.copy
copie la valeur d'un emplacement dans lepath
spécifié.
Vous pouvez trouver des exemples de chaque opération en utilisant la définition de pod suivante :
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"
]
}
]
}
}
Ajouter
value
est toujours requis pour les opérations add
et doit être un élément JSON légal.
Cette action ajoute une variable d'environnement "PORT"
avec la valeur "80"
au conteneur nginx
.
op: add
path: "/spec/containers/0/env/0"
value: >
{
"name": "PORT",
"value": "80"
}
Données
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
Transformé
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
L'action suivante ajoute une valeur à une nouvelle étiquette app.kubernetes.io/name: nginx
au pod.
op: add
path: "/metadata/labels/app.kubernetes.io~1name"
value: "nginx"
Données
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
Transformé
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
L'action suivante remplace l'image du conteneur nginx
pour la faire passer de "nginx:latest"
à "nginx:stable"
.
op: add
path: "/spec/containers/0/image"
value: nginx:stable
Données
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
Transformé
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
Supprimer
L'action suivante supprime les ressources nécessaires du conteneur nginx
.
op: remove
path: "/spec/containers/0/resources"
Données
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
Transformé
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
Remplacer
value
est requis pour l'opération replace
. Il doit s'agir d'un élément JSON.
L'action suivante remplace l'image du conteneur nginx
nginx:latest
par nginx:stable
.
op: replace
path: "/spec/containers/0/image"
value: nginx:stable
Données
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
Transformé
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
Déplacer
fromPath
est requis pour l'opération move
.
L'action suivante supprime les variables d'environnement du conteneur nginx
et les ajoute au conteneur d'initialisation install
.
op: move
fromPath: "/spec/containers/0/env"
path: "/spec/initContainers/0/env"
Données
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
Transformé
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
Copier
fromPath
est requis pour l'opération copy
.
L'action suivante copie les variables d'environnement du conteneur nginx
vers le conteneur d'initialisation install
.
op: copy
fromPath: "/spec/containers/0/env"
path: "/spec/initContainers/0/env"
Données
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
Transformé
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
Pour en savoir plus sur la définition des règles de substitution dans la console Google Cloud, consultez la page Planifier un ensemble de restaurations.
Pour définir des règles de transformation via gcloud CLI, créez un fichier contenant un tableau YAML de transformationRules
et incluez le paramètre --transformation-rules-file=
dans la commande gcloud beta container backup-restore restore-plans create
.
Exemples de règles de transformation
Les exemples suivants sont fournis au format YAML utilisé par gcloud CLI ou le langage de configuration Terraform.
Modifier la StorageClass des PVC
Cet exemple modifie la StorageClass dans toutes les ressources PersistentVolumeClaim restaurées pour la faire passer de standard
à 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"
}
}
Cloner un espace de noms
Cet exemple clone un espace de noms de la version alpha à la version bêta. Pour ce faire, créez un espace de noms "beta"
et restaurez toutes les ressources de "alpha"
dans le nouvel espace de noms "beta"
. Cet exemple nécessite deux règles de transformation : une pour l'espace de noms lui-même et une pour les ressources qu'il contient.
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"
}
}
Modifier la StorageClass des PVC et le nombre d'instances répliquées dans un espace de noms cloné
Cet exemple clone un espace de noms, puis applique un ensemble de modifications aux ressources dans le nouvel espace de noms :
Modifiez la ressource StorageClass sur les PVC de
standard
enpremium-rwo
.Remplacez le nombre d'instances répliquées du déploiement
nginx
par3
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"
}
}
Modifier, insérer et supprimer des entrées ConfigMap
Cet exemple modifie le fichier ConfigMap
contenant la clé d'étiquette "app.kubernetes.io/name"
dans l'espace de noms "mysql"
pour :
Remplacer la valeur de l'entrée
"endpoint"
par"192.0.2.127"
.Insérer une nouvelle entrée
"connection-timeout"
avec la valeur"30s"
.Supprimer l'entrée contenant la clé
"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"
}
}
Ajouter une étiquette app.kubernetes.io/name
aux ressources dont le nom commence par mysql-
Cet exemple ajoute une étiquette app.kubernetes.io/name
avec la valeur mysql
à toutes les ressources dont le nom commence par 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"
}
}
Attribuer une adresse IP statique pour un service de type LoadBalancer
Cet exemple attribue une adresse IP statique au service "nginx-svc"
dans l'espace de noms "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"
}
}