మాస్టరింగ్ కస్టమైజ్: నేమ్స్పేస్ మార్పుల తర్వాత ప్యాచింగ్
Kubernetes Kustomize అనేది డెవలపర్లు కాన్ఫిగరేషన్లను సమర్ధవంతంగా నిర్వహించడంలో సహాయపడే శక్తివంతమైన సాధనం. అయినప్పటికీ, నేమ్స్పేస్లను మార్చడం వంటి పరివర్తనలను వర్తింపజేయడం, తర్వాత అదనపు ప్యాచ్లు అవసరమైనప్పుడు సవాళ్లను సృష్టించగల సందర్భాలు ఉన్నాయి.
మీరు నేమ్స్పేస్ను సెట్ చేసే `kustomization.yaml`ని కలిగి ఉన్నారని ఊహించుకోండి మరియు తర్వాత, మీరు అదే రిసోర్స్కి ప్యాచ్ని వర్తింపజేయాలి. ఈ పరిస్థితి ఒక ఆచరణాత్మక ప్రశ్నను లేవనెత్తుతుంది: నేమ్స్పేస్ పరివర్తన తర్వాత ప్యాచ్ అమలు చేయబడిందని మీరు ఎలా నిర్ధారిస్తారు? ఇది వాస్తవ ప్రపంచ కుబెర్నెట్స్ విస్తరణలలో ఎదుర్కొనే సాధారణ సవాలు. 🔧
ప్రక్రియ నిరుత్సాహంగా అనిపించవచ్చు, కానీ సరైన పద్ధతులతో, మీరు దీన్ని సజావుగా సాధించవచ్చు. మీరు వనరులను అప్డేట్ చేస్తున్నా లేదా డైనమిక్ ఎన్విరాన్మెంట్లను నిర్వహిస్తున్నా, ఈ వర్క్ఫ్లోను అర్థం చేసుకోవడం వల్ల మీ సమయాన్ని ఆదా చేయవచ్చు మరియు కాన్ఫిగరేషన్ లోపాలను తగ్గించవచ్చు.
ఈ కథనంలో, కస్టమైజ్లో నేమ్స్పేస్ పరివర్తన తర్వాత ప్యాచ్ని ఎలా కాల్ చేయాలో మేము విశ్లేషిస్తాము. నేమ్స్పేస్లను వర్తింపజేసేటప్పుడు ఎంపిక చేసిన వనరులను ఎలా మినహాయించాలో కూడా మేము చర్చిస్తాము. స్పష్టమైన ఉదాహరణలు మరియు నిపుణుల చిట్కాల ద్వారా, మీరు మీ Kubernetes పనిభారం కోసం Kustomize సామర్థ్యాన్ని అన్లాక్ చేస్తారు. 🚀
ఆదేశం | ఉపయోగం యొక్క ఉదాహరణ |
---|---|
config.load_kube_config() | డిఫాల్ట్ స్థానం (~/.kube/config) నుండి Kubernetes కాన్ఫిగరేషన్ను లోడ్ చేస్తుంది. Python Kubernetes క్లయింట్ని ఉపయోగించి క్లస్టర్తో పరస్పర చర్య చేయడానికి ఇది చాలా అవసరం. |
yaml.safe_load() | YAML ఫైల్లను పైథాన్ నిఘంటువులుగా మార్చడానికి వాటిని సురక్షితంగా అన్వయించండి. ఇది ఏకపక్ష కోడ్ అమలును నిరోధిస్తుంది, ఇది కాన్ఫిగరేషన్ ఫైల్లను లోడ్ చేయడానికి సురక్షితంగా చేస్తుంది. |
api.create_namespaced_custom_object() | కుబెర్నెటెస్ క్లస్టర్లోని నిర్దిష్ట నేమ్స్పేస్లో అనుకూల వనరును సృష్టిస్తుంది లేదా అప్డేట్ చేస్తుంది. పరివర్తనలను డైనమిక్గా వర్తింపజేయడానికి ఇది కీలకం. |
resource['metadata']['namespace'] | రిసోర్స్ యొక్క మెటాడేటా విభాగంలో నేమ్స్పేస్ ఫీల్డ్ను యాక్సెస్ చేస్తుంది మరియు అప్డేట్ చేస్తుంది, నిర్దిష్ట నేమ్స్పేస్లకు పరివర్తనలు సరిగ్గా వర్తింపజేయబడతాయని నిర్ధారిస్తుంది. |
json.MarshalIndent() | ఇండెంట్ చేయబడిన JSON స్ట్రింగ్లో Go structని సీరియలైజ్ చేస్తుంది. రూపాంతరం చెందిన వనరులను డీబగ్గింగ్ లేదా లాగింగ్ చేసేటప్పుడు చదవగలిగే అవుట్పుట్ను ఉత్పత్తి చేయడానికి ఉపయోగపడుతుంది. |
map[string]interface{} | రిసోర్స్ ఫీల్డ్లను అప్డేట్ చేయడం ద్వారా ప్యాచ్లను డైనమిక్గా వర్తింపజేయడానికి అనుమతించే సౌకర్యవంతమైన కీ-విలువ నిర్మాణాన్ని సూచించడానికి Goలో ఉపయోగించబడుతుంది. |
applyNamespace() | రిసోర్స్ యొక్క నేమ్స్పేస్ ఫీల్డ్ను అప్డేట్ చేసే కస్టమ్ ఫంక్షన్. ఇది పరివర్తన తర్కంలో మాడ్యులారిటీ మరియు పునర్వినియోగాన్ని నిర్ధారిస్తుంది. |
applyPatch() | ప్యాచ్ డేటాను ఇప్పటికే ఉన్న వనరులో విలీనం చేసే అనుకూల ఫంక్షన్. డైనమిక్ అప్డేట్లను హ్యాండిల్ చేస్తుంది, ఇది సౌకర్యవంతమైన కస్టమైజ్ ఆపరేషన్లకు అనుకూలంగా ఉంటుంది. |
CustomObjectsApi() | Kubernetes అనుకూల వనరులతో పరస్పర చర్య చేయడానికి పైథాన్లో నిర్దిష్ట API క్లయింట్. ఇది ప్రామాణికం కాని కుబెర్నెట్స్ వస్తువులను నిర్వహించడానికి ప్రధానమైనది. |
os package in Go | ఎన్విరాన్మెంట్ వేరియబుల్స్ మరియు సిస్టమ్ సమాచారానికి యాక్సెస్ను అందిస్తుంది. స్క్రిప్ట్లలో డైనమిక్గా ఫైల్ పాత్లు లేదా కాన్ఫిగరేషన్లను తిరిగి పొందడానికి తరచుగా ఉపయోగిస్తారు. |
కస్టమైజ్లో నేమ్స్పేస్ మార్పుల తర్వాత ప్యాచ్లు పని చేయడం
పైన అందించిన స్క్రిప్ట్లు కుబెర్నెటీస్లో ఒక నిర్దిష్ట సవాలును సూచిస్తాయి: a తర్వాత ప్యాచ్ని వర్తింపజేయడం కస్టమైజ్ ఉపయోగించి. `config.load_kube_config()` కమాండ్తో కుబెర్నెట్స్ కాన్ఫిగరేషన్ను లోడ్ చేయడం ద్వారా పైథాన్ స్క్రిప్ట్ ప్రారంభమవుతుంది. ఇది స్క్రిప్ట్ను క్లస్టర్కి కనెక్ట్ చేస్తుంది, ఇది వనరులను డైనమిక్గా నిర్వహించడానికి అనుమతిస్తుంది. కనెక్ట్ అయిన తర్వాత, YAML కాన్ఫిగరేషన్ ఫైల్లు `yaml.safe_load()` ఉపయోగించి చదవబడతాయి మరియు అన్వయించబడతాయి, ఇది సంభావ్య సంక్లిష్టమైన YAML నిర్మాణాలను నిర్వహించడానికి సురక్షితమైన మార్గం. తదుపరి తారుమారు కోసం నేమ్స్పేస్ ఫీల్డ్తో సహా మొత్తం మెటాడేటా సురక్షితంగా లోడ్ చేయబడిందని ఇది నిర్ధారిస్తుంది. 📜
పైథాన్ స్క్రిప్ట్లోని మొదటి కీ ఫంక్షన్, `apply_namespace_transformation()`, ఇచ్చిన రిసోర్స్ యొక్క నేమ్స్పేస్ను సవరిస్తుంది. ఇది వనరు యొక్క మెటాడేటా ఫీల్డ్ను అప్డేట్ చేస్తుంది మరియు క్లస్టర్కి ఈ మార్పులను వర్తింపజేయడానికి కుబెర్నెట్స్ క్లయింట్ లైబ్రరీ నుండి `create_namespaced_custom_object()` ఫంక్షన్ని ఉపయోగిస్తుంది. ఈ దశ చాలా కీలకమైనది ఎందుకంటే తదుపరి సవరణలు చేయడానికి ముందు నేమ్స్పేస్ సరిగ్గా కేటాయించబడిందని ఇది నిర్ధారిస్తుంది. ఇది రాబోయే ప్యాచింగ్ ప్రక్రియకు వేదికగా భావించండి. ఇది లేకుండా, వనరు ఎక్కడ ఉందో క్లస్టర్కు తెలియదు. 🚀
రెండవ ఫంక్షన్, `apply_patch()`, నేమ్స్పేస్ నవీకరించబడిన తర్వాత వనరులో అదనపు మార్పులను విలీనం చేయడానికి రూపొందించబడింది. ప్యాచ్ ఫైల్ను చదవడం ద్వారా, ఫంక్షన్ లోడ్ చేయబడిన వనరుకు డైనమిక్గా మార్పులను వర్తింపజేస్తుంది. లేబుల్లు లేదా ఉల్లేఖనాలను అప్డేట్ చేయడం వంటి వివిధ దృశ్యాలకు అనుగుణంగా ప్యాచ్ని రూపొందించవచ్చు కాబట్టి ఇది సౌలభ్యాన్ని నిర్ధారిస్తుంది. మాడ్యులర్ విధానాన్ని ఉపయోగించడం వలన మీరు బహుళ వర్క్ఫ్లోలలో ఈ ఫంక్షన్లను మళ్లీ ఉపయోగించుకోవచ్చు. అవుట్పుట్ ఈ నవీకరణల విజయాన్ని నిర్ధారిస్తుంది, సంక్లిష్ట విస్తరణలలో స్పష్టత మరియు హామీని అందిస్తుంది.
మరోవైపు, గో స్క్రిప్ట్, గో టైప్ సిస్టమ్ మరియు JSON హ్యాండ్లింగ్ సామర్థ్యాల సౌలభ్యాన్ని పెంచడం ద్వారా భిన్నమైన విధానాన్ని హైలైట్ చేస్తుంది. `applyNamespace()` మరియు `applyPatch()` వంటి విధులు గో నిర్మాణాలపై పనిచేయడానికి రూపొందించబడ్డాయి, రకం భద్రత మరియు ఖచ్చితత్వాన్ని నిర్ధారిస్తాయి. ఉదాహరణకు, `json.MarshalIndent()` కమాండ్ బాగా-ఫార్మాట్ చేయబడిన JSON అవుట్పుట్ను ఉత్పత్తి చేస్తుంది, ఇది వనరుల కాన్ఫిగరేషన్లను డీబగ్ చేయడం మరియు ధృవీకరించడం సులభతరం చేస్తుంది. మీరు పైథాన్ లేదా గో ఉపయోగిస్తున్నా, రెండు స్క్రిప్ట్లు మాడ్యులారిటీ మరియు రీడబిలిటీ యొక్క ప్రాముఖ్యతను నొక్కిచెబుతాయి, మీ కస్టమైజ్ ప్యాచ్లు నేమ్స్పేస్ పరివర్తనలతో సజావుగా పని చేసేలా చూస్తాయి. 🛠️
కుబెర్నెటెస్ కస్టమైజ్లో నేమ్స్పేస్ ట్రాన్స్ఫర్మేషన్ తర్వాత ప్యాచ్లను నిర్వహించడం
కుబెర్నెట్స్ క్లయింట్ లైబ్రరీతో పైథాన్ స్క్రిప్ట్ని ఉపయోగించి బ్యాకెండ్ సొల్యూషన్
# Import necessary libraries
from kubernetes import client, config
import yaml
import os
# Load Kubernetes configuration
config.load_kube_config()
# Define a function to apply the namespace transformation
def apply_namespace_transformation(resource_path, namespace):
with open(resource_path, 'r') as file:
resource = yaml.safe_load(file)
resource['metadata']['namespace'] = namespace
api = client.CustomObjectsApi()
group = resource['apiVersion'].split('/')[0]
version = resource['apiVersion'].split('/')[1]
kind = resource['kind'].lower() + 's'
api.create_namespaced_custom_object(group, version, namespace, kind, resource)
# Define a function to apply a patch
def apply_patch(resource_path, patch_path, namespace):
with open(resource_path, 'r') as file:
resource = yaml.safe_load(file)
with open(patch_path, 'r') as file:
patch = yaml.safe_load(file)
resource['metadata']['namespace'] = namespace
for key, value in patch.items():
resource[key] = value
print(f"Patched resource: {resource}")
# Usage example
apply_namespace_transformation("extensionconfig.yaml", "foooo")
apply_patch("extensionconfig.yaml", "patch.yaml", "foooo")
నేమ్స్పేస్ మరియు ప్యాచ్లను డైనమిక్గా నిర్వహించడానికి కస్టమైజ్ని ఉపయోగించడం
Goలో వ్రాసిన కస్టమైజ్ ట్రాన్స్ఫార్మర్ ప్లగ్ఇన్ని ఉపయోగించి డైనమిక్ సొల్యూషన్
package main
import (
"encoding/json"
"fmt"
"os"
)
type Resource struct {
APIVersion string `json:"apiVersion"`
Kind string `json:"kind"`
Metadata Metadata `json:"metadata"`
}
type Metadata struct {
Name string `json:"name"`
Namespace string `json:"namespace"`
}
func applyNamespace(resource *Resource, namespace string) {
resource.Metadata.Namespace = namespace
}
func applyPatch(resource *Resource, patch map[string]interface{}) {
for key, value := range patch {
switch key {
case "metadata":
meta := value.(map[string]interface{})
for mk, mv := range meta {
if mk == "namespace" {
resource.Metadata.Namespace = mv.(string)
}
}
}
}
}
func main() {
resource := Resource{
APIVersion: "runtime.cluster.x-k8s.io/v1alpha1",
Kind: "ExtensionConfig",
Metadata: Metadata{Name: "my-extensionconfig"},
}
applyNamespace(&resource, "foooo")
patch := map[string]interface{}{
"metadata": map[string]interface{}{
"namespace": "foooo",
},
}
applyPatch(&resource, patch)
result, _ := json.MarshalIndent(resource, "", " ")
fmt.Println(string(result))
}
వనరుల మినహాయింపు మరియు అధునాతన నేమ్స్పేస్ నిర్వహణను అర్థం చేసుకోవడం
నేమ్స్పేస్ పరివర్తనల నుండి నిర్దిష్ట వనరులను ఎలా మినహాయించాలో అర్థం చేసుకోవడం కుబెర్నెటెస్ కస్టమైజ్తో పని చేయడంలో ఒక ముఖ్యమైన అంశం. డిఫాల్ట్గా, `kustomization.yaml` ఫైల్లో నేమ్స్పేస్ని వర్తింపజేయడం అన్ని జాబితా చేయబడిన వనరులను ప్రభావితం చేస్తుంది, అయితే కొన్ని వనరులు తప్పనిసరిగా నేమ్స్పేస్-స్వతంత్రంగా ఉండవలసిన సందర్భాలు ఉన్నాయి. ఉదాహరణకు, `ClusterRole` లేదా `ClusterRoleBinding` వంటి క్లస్టర్-విస్తృత వనరులు నిర్దిష్ట నేమ్స్పేస్తో ముడిపడి ఉండవు మరియు తప్పుగా సవరించబడితే విరిగిపోవచ్చు. `నేమ్స్పేస్: ఏదీ లేదు` కాన్ఫిగరేషన్ని ఉపయోగించడం లేదా మీ కస్టమైజ్ ఫైల్లో వ్యూహాత్మకంగా మినహాయింపులను ఉంచడం ఈ సమస్యను పరిష్కరించడంలో సహాయపడుతుంది. 🛡️
ఒక నిర్దిష్ట క్రమంలో బహుళ ప్యాచ్లు వర్తింపజేయడం మరొక సంబంధిత సవాలు. కస్టమైజ్ ప్రక్రియలు వరుసగా పాచెస్, కానీ నేమ్స్పేస్ పరివర్తనలతో కలిపినప్పుడు, సంక్లిష్టత పెరుగుతుంది. దీనిని పరిష్కరించడానికి, ప్రతి ప్యాచ్ పరివర్తన యొక్క సరైన దశకు స్కోప్ చేయబడిందని నిర్ధారిస్తూ, వ్యూహాత్మక వనరుల ఓవర్లేలను ప్రభావితం చేయడం ఉత్తమం. వ్యూహాత్మక విలీన ప్యాచ్లు మరియు JSON ప్యాచ్ల కలయికను ఉపయోగించడం అత్యంత ప్రభావవంతంగా ఉంటుంది. `patchesStrategicMerge` ఫీల్డ్ డెవలపర్లను మాడ్యులారిటీని నిర్వహించడానికి మరియు ఖచ్చితమైన నవీకరణలను నిర్ధారించడానికి అనుమతిస్తుంది. 🚀
చివరగా, పర్యావరణ-నిర్దిష్ట కాన్ఫిగరేషన్లను నిర్వహించడం అనేది Kustomize కోసం ఒక కీలక ఉపయోగ సందర్భం. ఉదాహరణకు, బహుళ-పర్యావరణ సెటప్లో (దేవ్, స్టేజింగ్, ప్రోడ్), పర్యావరణం ఆధారంగా నేమ్స్పేస్ పరివర్తనలు మరియు ప్యాచ్లు మారాలని మీరు కోరుకోవచ్చు. `kustomization.yaml` ఫైల్లను ప్రత్యేక పర్యావరణ ఫోల్డర్లుగా నిర్వహించడం ద్వారా, మీరు డూప్లికేషన్ లేకుండా ప్రత్యేకమైన కాన్ఫిగరేషన్లను సజావుగా వర్తింపజేయవచ్చు. ఈ విధానం స్పష్టమైన మరియు స్కేలబుల్ విస్తరణ వ్యూహాన్ని కొనసాగిస్తూనే కస్టమైజ్ యొక్క సౌలభ్యాన్ని ఎక్కువగా ఉపయోగించుకుంటుంది. మీ కస్టమైజేషన్ మానిఫెస్ట్లలో కామెంట్లు మరియు వివరణాత్మక డాక్యుమెంటేషన్తో సహా పెద్ద టీమ్ల నిర్వహణను మరింత నిర్ధారిస్తుంది. 📜
- నేమ్స్పేస్ రూపాంతరాల నుండి నేను వనరును ఎలా మినహాయించాలి?
- మీరు ఉపయోగించవచ్చు నేమ్స్పేస్ మార్పుల ద్వారా వనరులను ప్రభావితం చేయకుండా మినహాయించడానికి మీ `kustomization.yaml`లో ఎంపిక.
- నేను క్లస్టర్-వైడ్ వనరులకు ప్యాచ్లను వర్తింపజేయవచ్చా?
- అవును, మీరు చేయగలరు, కానీ ఉపయోగించడం ద్వారా నేమ్స్పేస్ రూపాంతరాల నుండి వనరు మినహాయించబడిందని నిర్ధారించుకోండి లేదా వనరును ప్రత్యేక `kustomization.yaml` ఫైల్లో ఉంచడం.
- ప్యాచ్లు క్రమంలో వర్తించబడుతున్నాయని నేను ఎలా నిర్ధారించుకోవాలి?
- ఉపయోగించండి ఫీల్డ్ చేసి, మీ `kustomization.yaml`లో అవసరమైన క్రమంలో ప్యాచ్లను జాబితా చేయండి.
- నేను వ్యూహాత్మక విలీన ప్యాచ్లు మరియు JSON ప్యాచ్లు రెండింటినీ కలిపి ఉపయోగించవచ్చా?
- అవును, కస్టమైజ్ రెండు విధానాలకు మద్దతు ఇస్తుంది. మీరు వాటిని `patchesStrategicMerge`లో పేర్కొనవచ్చు మరియు వరుసగా ఖాళీలను.
- నా కాన్ఫిగరేషన్లను వర్తింపజేయడానికి ముందు నేను వాటిని ఎలా ధృవీకరించగలను?
- పరుగు అవుట్పుట్ను పరిదృశ్యం చేయడానికి మరియు క్లస్టర్కు వర్తించే ముందు YAML నిర్మాణాన్ని ధృవీకరించడానికి.
- రెండు పాచెస్ వైరుధ్యం అయితే ఏమి జరుగుతుంది?
- కస్టమైజ్ ప్యాచ్లను అవి జాబితా చేయబడిన క్రమంలో వర్తింపజేస్తుంది. వైరుధ్యం ఉన్నట్లయితే, తర్వాతి ప్యాచ్ మునుపటి దాన్ని ఓవర్రైట్ చేస్తుంది.
- నేను నా `kustomization.yaml`తో సమస్యలను ఎలా డీబగ్ చేయగలను?
- ఉపయోగించండి సమస్య ప్రాంతాన్ని గుర్తించడానికి `kubectl`తో ఫ్లాగ్ చేయండి లేదా మీ స్క్రిప్ట్లకు వెర్బోస్ లాగింగ్ను జోడించండి.
- నేను హెల్మ్తో కస్టమైజ్ని ఉపయోగించవచ్చా?
- అవును, హెల్మ్ అవుట్పుట్ను రిసోర్స్ ఫైల్గా పరిగణించడం ద్వారా Kustomize హెల్మ్ చార్ట్లపై మార్పులను అతివ్యాప్తి చేస్తుంది.
- నేను బహుళ-పర్యావరణ కాన్ఫిగరేషన్లను ఎలా నిర్వహించగలను?
- మీ `kustomization.yaml` ఫైల్లను ఎన్విరాన్మెంట్-నిర్దిష్ట ఫోల్డర్లుగా నిర్వహించండి మరియు వాటిని ప్రత్యేక అతివ్యాప్తితో సూచించండి.
- వర్తింపజేసిన నేమ్స్పేస్ని ధృవీకరించడానికి నేను ఏ సాధనాలను ఉపయోగించగలను?
- ఉపయోగించండి నేమ్స్పేస్ సరిగ్గా వర్తింపజేయబడిందని ధృవీకరించడానికి వనరు పేరుతో.
- పాచెస్ నుండి నిర్దిష్ట వనరులను మినహాయించడం సాధ్యమేనా?
- అవును, వనరు-నిర్దిష్ట `kustomization.yaml` ఫైల్లను సృష్టించడం ద్వారా లేదా మీ స్క్రిప్ట్లలో షరతులతో కూడిన లాజిక్ని ఉపయోగించడం ద్వారా.
కుబెర్నెటెస్లో నేమ్స్పేస్ పరివర్తనలను పరిష్కరించడం మరియు ప్యాచింగ్ చేయడం జాగ్రత్తగా ప్రణాళిక అవసరం. వంటి సాధనాలను ఉపయోగించడం , డెవలపర్లు విస్తరణ ప్రక్రియలలో స్థిరత్వం మరియు ఖచ్చితత్వాన్ని నిర్ధారిస్తూ కాన్ఫిగరేషన్లను డైనమిక్గా నిర్వహించగలరు.
వ్యూహాత్మకంగా మినహాయింపులను వర్తింపజేయడం ద్వారా మరియు ప్యాచింగ్ ఫీచర్లను పెంచడం ద్వారా, వినియోగదారులు వారి విస్తరణ పైప్లైన్లను మెరుగుపరచవచ్చు. ఇది అభివృద్ధి చెందుతున్న వాతావరణాలకు అనుకూలతను నిర్ధారిస్తుంది మరియు బలమైన కుబెర్నెట్స్ క్లస్టర్ నిర్వహణను ప్రోత్సహిస్తుంది. 🌟
- Kustomize మరియు దాని ఫీచర్ల గురించిన వివరాలను అధికారిక Kubernetes డాక్యుమెంటేషన్లో చూడవచ్చు: కుబెర్నెటెస్ కస్టమైజ్ డాక్యుమెంటేషన్ .
- నేమ్స్పేస్ పరివర్తనలు మరియు మినహాయింపుల నిర్వహణపై అంతర్దృష్టుల కోసం, ఈ కమ్యూనిటీ గైడ్ని చూడండి: GitHub రిపోజిటరీని అనుకూలీకరించండి .
- ఈ వివరణాత్మక గైడ్ నుండి కుబెర్నెట్స్లో వ్యూహాత్మక విలీనం మరియు JSON ప్యాచ్ల గురించి మరింత తెలుసుకోండి: కుబెర్నెట్స్ ప్యాచ్ డాక్యుమెంటేషన్ .
- అధునాతన వినియోగ సందర్భాలు మరియు వాస్తవ-ప్రపంచ ఉదాహరణలను అన్వేషించడానికి, ఈ వనరును చూడండి: Kustomize.io .