Halaman ini menjelaskan cara memodifikasi resource Kubernetes selama proses pemulihan menggunakan aturan transformasi. Aturan transformasi dimaksudkan sebagai peningkatan dari fitur sebelumnya yang disebut aturan penggantian. Karena tidak kompatibel mundur dengan aturan penggantian, antarmuka aturan penggantian yang tidak digunakan lagi masih tersedia.
Untuk melihat dokumentasi aturan penggantian, lihat Mengubah resource selama pemulihan.
Ringkasan
Ada beberapa alasan mengapa Anda mungkin ingin mengubah resource Kubernetes sebagai bagian dari proses pemulihan:
Anda mungkin ingin membuat PersistentVolumeClaim (PVC) menggunakan penyedia penyimpanan yang berbeda. Misalnya, Anda ingin beralih dari driver in-tree Kubernetes ke driver CSI.
Anda mungkin ingin memulihkan namespace dengan nama yang berbeda.
Anda mungkin ingin menambahkan, mengubah, atau menghapus nilai yang terkait dengan label atau kunci ConfigMap.
Anda mungkin ingin mengubah jumlah replika di Deployment atau StatefulSet.
Pencadangan untuk GKE menyediakan mekanisme untuk melakukan perubahan ini yang disebut aturan transformasi, yang dapat Anda tentukan secara opsional sebagai bagian dari RestorePlan
.
Dalam proses pemulihan, aturan transformasi berfungsi sebagai berikut:
Aturan disusun dalam daftar berurutan.
Semua resource—kecuali resource
CustomResourceDefinition
, yang transformasinya tidak tersedia—yang akan dipulihkan akan bergerak secara berurutan melalui daftar aturan ini.Setiap aturan berisi deskripsi singkat, kriteria pencocokan, dan pengeditan resource.
Jika resource tidak cocok dengan kriteria aturan, resource tersebut akan berpindah ke aturan berikutnya dalam daftar tanpa modifikasi.
Jika resource cocok dengan kriteria aturan, pengeditan aturan akan diterapkan ke resource sebelum resource berpindah ke aturan berikutnya dalam daftar.
Jika beberapa aturan ditentukan, kriteria pencocokan setiap aturan akan dievaluasi terhadap versi resource yang diubah oleh aturan sebelumnya.
Versi akhir resource, setelah pengeditan aturan yang cocok diterapkan, adalah yang dibuat di cluster.
Parameter aturan transformasi
Anda membuat aturan transformasi dengan memberikan informasi berikut:
description
: Ini adalah deskripsi singkat aturan transformasi.resourceFilter
: Filter ini digunakan untuk mencocokkan resource. Jika tidak adaresourceFilter
yang diberikan, semua resource cocok dengan aturan ini.fieldActions
: Ini adalah daftar pengeditan yang akan dilakukan pada resource yang cocok denganresourceFilter
. Pengeditan diberikan sebagai daftar tindakan yang diurutkan. Urutan penting di sini karena hasil dari satu tindakan dapat memengaruhi tindakan berikutnya dalam daftar. Jika ada tindakan yang gagal, seluruh pemulihan akan gagal.
Filter resource (resourceFilter
)
Untuk menentukan filter resource, Anda memberikan parameter berikut:
Parameter | Wajib | Deskripsi |
---|---|---|
namespaces |
opsional | Daftar ini merupakan daftar namespace. Agar cocok dengan aturan ini, resource harus berupa resource dengan namespace dan memiliki salah satu namespace yang ditentukan. Jika tidak ada yang disediakan untuk parameter ini, semua resource akan cocok (semua resource dengan namespace dan cakupan cluster). |
groupKinds |
opsional |
Berikut adalah daftar tuple Group/Kind resource Kubernetes:
|
jsonPath |
opsional | Ini adalah ekspresi JSONPath yang digunakan untuk mencocokkan dengan resource. |
JSONPath (jsonPath
)
Ekspresi JSONPath digunakan untuk mencocokkan resource. Jika hasil ekspresi tidak kosong terhadap resource, maka resource ini dianggap cocok.
Dengan resource berikut:
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"
}
}
Contoh penggunaan ekspresi JSONPath:
Ekspresi | Deskripsi | Hasil |
---|---|---|
.metadata[?(@.name == 'mysql-cm')] |
Objek metadata berisi kunci name dan nilainya adalah "mysql-cm" |
[ |
.metadata.labels['app\.kubernetes\.io/name'] |
Nilai string kunci "app.kubernetes.io/name" di bagian metadata.labels |
[ |
.data['primary\.cnf'] |
Nilai objek kunci "primary.cnf" di data |
[ |
.metadata[?(@.name =~ /^mysql-.*/i)] |
Objek metadata berisi kunci name dan
nilainya cocok dengan ekspresi reguler "/^mysql-.*/i".Garis miring / digunakan untuk membatasi pola ekspresi reguler. i di akhir ekspresi reguler
adalah tanda untuk pencocokan yang tidak peka huruf besar/kecil. |
[ |
Selama output ekspresi JSONPath tidak kosong, resource yang sesuai akan cocok dengan aturan ini.
Dengan demikian, .metadata[?(@.name == 'mysql-cm')]
dan .metadata[?(@.name == 'mysql-cm')].name
menghasilkan hasil pencocokan yang sama, yaitu mencocokkan resource yang .metadata.name
-nya adalah "mysql-cm"
.
Saat filter digunakan di JSONPath untuk mencocokkan kunci dalam peta di konsol Google Cloud , .
(titik) harus
dilepaskan menggunakan \
(backslash). Jika JSONPath disediakan dalam konteks YAML menggunakan gcloud CLI atau Terraform Language, \\
(garis miring terbalik ganda) diperlukan.
Misalnya, .metadata.labels['app\.kubernetes\.io/name']
setara dengan .metadata.labels['app\\.kubernetes\\.io/name']
di YAML atau Terraform.
Sebaiknya gunakan alat evaluator JSONPath dengan dukungan ekspresi reguler untuk menguji ekspresi sebelum digunakan.
Anda juga dapat menggunakan kubectl
untuk memverifikasi hasil ekspresi JSONPath.
Lihat Dukungan JSONPath untuk contoh lainnya.
Tindakan kolom (fieldActions
)
Tindakan kolom dimodelkan berdasarkan Patch JSON, yang menentukan struktur dokumen JSON untuk menyatakan operasi yang akan diterapkan ke dokumen JSON. Untuk menentukan tindakan kolom, parameter berikut diperlukan:
path
: Ini adalah nilai JSON Pointer yang mereferensikan lokasi di resource target tempat operasi dilakukan. Penunjuk JSON selalu dimulai dengan/
(garis miring), dan nama properti (kunci) yang turun ke elemen turunan juga dipisahkan oleh/
(garis miring).op
: Ini adalah jenis operasi yang dilakukan terhadap resource, lima operasi yang didukung adalah:add
menyisipkan objek atau nilai baru kepath
yang ditentukan, bergantung pada apa yang dirujuk olehpath
.remove
menghapus nilai daripath
yang ditentukan.replace
menggantikan nilai padapath
yang ditentukan dengan nilai baru.move
menghapus nilai dari lokasi dan menambahkannya kepath
yang ditentukan.copy
menyalin nilai dari suatu lokasi kepath
yang ditentukan.
Anda dapat menemukan contoh setiap operasi, menggunakan definisi Pod berikut:
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"
]
}
]
}
}
Tambahkan
value
selalu diperlukan untuk operasi add
, dan harus berupa elemen JSON yang valid.
Tindakan berikut menambahkan variabel lingkungan baru "PORT"
dengan nilai "80"
ke container nginx
.
op: add
path: "/spec/containers/0/env/0"
value: >
{
"name": "PORT",
"value": "80"
}
Asli
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
Ditransformasi
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
Tindakan berikut menambahkan nilai ke label baru app.kubernetes.io/name: nginx
ke Pod.
op: add
path: "/metadata/labels/app.kubernetes.io~1name"
value: "nginx"
Asli
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
Ditransformasi
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
Tindakan berikut mengganti image container nginx
untuk mengubahnya
dari "nginx:latest"
menjadi "nginx:stable"
.
op: add
path: "/spec/containers/0/image"
value: nginx:stable
Asli
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
Ditransformasi
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
Hapus
Tindakan berikut menghapus persyaratan resource untuk penampung nginx
.
op: remove
path: "/spec/containers/0/resources"
Asli
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
Ditransformasi
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
Ganti
value
diperlukan untuk operasi replace
, dan harus berupa elemen JSON.
Tindakan berikut menggantikan image container nginx
dari nginx:latest
menjadi nginx:stable
.
op: replace
path: "/spec/containers/0/image"
value: nginx:stable
Asli
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
Ditransformasi
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
Pindahkan
fromPath
diperlukan untuk operasi move
.
Tindakan berikut menghapus variabel lingkungan dari container nginx
dan menambahkannya ke container init install
.
op: move
fromPath: "/spec/containers/0/env"
path: "/spec/initContainers/0/env"
Asli
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
Ditransformasi
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
Salin
fromPath
diperlukan untuk operasi copy
.
Tindakan berikut menyalin variabel lingkungan dari container nginx
ke container init install
.
op: copy
fromPath: "/spec/containers/0/env"
path: "/spec/initContainers/0/env"
Asli
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
Ditransformasi
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
Untuk mempelajari lebih lanjut cara menentukan aturan transformasi di konsol Google Cloud , lihat Merencanakan serangkaian pemulihan.
Untuk menentukan aturan transformasi melalui gcloud CLI, buat file yang berisi array YAML
dari transformationRules
dan sertakan parameter --transformation-rules-file=
dalam
perintah gcloud beta container backup-restore restore-plans create
.
Contoh aturan transformasi
Contoh berikut tersedia dalam format YAML yang digunakan oleh gcloud CLI atau Terraform Configuration Language.
Mengubah StorageClass PVC
Contoh ini mengubah StorageClass di semua resource PersistentVolumeClaim yang dipulihkan dari
standard
menjadi 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"
}
}
Meng-clone Namespace
Contoh ini meng-clone namespace dari alfa ke beta—membuat namespace "beta"
baru dan memulihkan semua resource dari "alpha"
ke namespace "beta"
baru. Contoh ini memerlukan dua aturan transformasi—satu untuk namespace itu sendiri, dan satu untuk resource dalam 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"
}
}
Mengubah StorageClass PVC dan jumlah replika dalam namespace yang di-clone
Contoh ini meng-clone namespace, lalu menerapkan serangkaian perubahan pada resource di namespace baru:
Mengubah StorageClass pada PVC dari
standard
menjadipremium-rwo
Ubah jumlah replika Deployment
nginx
menjadi3
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"
}
}
Mengubah, menyisipkan, dan menghapus entri ConfigMap
Contoh ini mengubah ConfigMap
yang berisi kunci label "app.kubernetes.io/name"
dalam namespace "mysql"
menjadi:
Ubah nilai entri
"endpoint"
menjadi"192.0.2.127"
.Sisipkan entri
"connection-timeout"
baru dengan nilai"30s"
.Hapus entri dengan kunci
"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"
}
}
Tambahkan label app.kubernetes.io/name
ke resource yang namanya diawali dengan mysql-;
Contoh ini menambahkan label app.kubernetes.io/name
dengan nilai mysql
ke
semua resource yang namanya diawali dengan 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"
}
}
Menetapkan alamat IP statis untuk Service jenis LoadBalancer
Contoh ini menetapkan alamat IP statis untuk Layanan "nginx-svc"
di
namespace "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"
}
}