1. मकसद
Kustomize एक ऐसा टूल है जो ऐप्लिकेशन के कॉन्फ़िगरेशन को पसंद के मुताबिक बनाने के लिए, टेंप्लेट-फ़्री तरीका उपलब्ध कराता है. इससे, पहले से मौजूद ऐप्लिकेशन का इस्तेमाल करना आसान हो जाता है. यह एक स्टैंडअलोन यूटिलिटी के तौर पर उपलब्ध है और इसे kubectl apply -k
तक kubectl में बनाया गया है. इसका इस्तेमाल स्टैंडअलोन सीएलआई के तौर पर किया जा सकता है. ज़्यादा जानकारी के लिए, kustomize.io पर जाएं.
इस ट्यूटोरियल में, Kustomize के कुछ मुख्य कॉन्सेप्ट के बारे में अच्छे से जानकारी दी गई है. साथ ही, इसका इस्तेमाल ऐप्लिकेशन और एनवायरमेंट में होने वाले उतार-चढ़ाव को मैनेज करने के लिए किया जा सकता है.
ऐसा करने पर:
- kustomize कमांड लाइन क्लाइंट का इस्तेमाल करें
- सामान्य एलिमेंट को बदलना
- बड़े यामल स्ट्रक्चर को पैच करें
- ओवरले की कई लेयर का इस्तेमाल करें
2. आपका फ़ाइल फ़ोल्डर तैयार किया जा रहा है
- इस यूआरएल पर जाकर, Cloud Shell एडिटर खोलें
https://ide.cloud.google.com
- टर्मिनल विंडो में, इस ट्यूटोरियल के लिए एक ऐक्टिव डायरेक्ट्री बनाएं
mkdir kustomize-lab
- डायरेक्ट्री में बदलाव करें और IDE फ़ाइल फ़ोल्डर सेट करें
cd kustomize-lab && cloudshell workspace .
3. kustomize कमांड लाइन क्लाइंट का इस्तेमाल किया जा रहा है
kustomize की क्षमता, कस्टम वैल्यू के साथ बेस Kubernetes yamls को ओवरले करने और उनमें बदलाव करने की सुविधा से मिलती है. यह kustomize करने के लिए, एक बेस फ़ाइल की ज़रूरत होती है, जिसमें फ़ाइलें कहां हैं और उन्हें कैसे बदलना है, इसके निर्देश मौजूद होते हैं. Kustomize को Kubernetes ईकोसिस्टम में शामिल किया गया है और इसे कई तरीकों से लागू किया जा सकता है.
इस सेक्शन में, एक बेस kustomize कॉन्फ़िगरेशन बनाया जा सकता है और स्टैंडअलोन kustomize कमांड लाइन क्लाइंट का इस्तेमाल करके फ़ाइलों को प्रोसेस किया जा सकता है.
- शुरू करने के लिए, आपको एक फ़ोल्डर बनाना होगा, जिसमें आपकी बेस कॉन्फ़िगरेशन फ़ाइलें सेव रहेंगी
mkdir -p chat-app/base
- बेस फ़ोल्डर में एक सिंपल kubernetes
deployment.yaml
बनाएं
cat <<EOF > chat-app/base/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`metadata:`
`name: chat-app`
`spec:`
`containers:`
`- name: chat-app`
`image: chat-app-image`
EOF
kustomization.yaml
बेस बनाएं
Kustomize, एंट्री पॉइंट के तौर पर kustomization.yaml नाम की फ़ाइल को ढूंढता है. इस फ़ाइल में अलग-अलग बेस और ओवरराइड फ़ाइलों के साथ-साथ खास ओवरराइड वैल्यू के रेफ़रंस शामिल हैं.
एक ऐसी kustomization.yaml
फ़ाइल बनाएं जो deployment.yaml
को बुनियादी रिसॉर्स के तौर पर दिखाती हो.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- बेस फ़ोल्डर पर kustomize कमांड चलाएं. ऐसा करने पर, YAML फ़ाइलों में डिप्लॉयमेंट के बिना कोई बदलाव नहीं होगा. ऐसा इसलिए, क्योंकि आपने अब तक किसी भी वैरिएशन को शामिल नहीं किया है.
kustomize build chat-app/base
आउटपुट को सीधे लागू करने के लिए, इस स्टैंडअलोन क्लाइंट को kubectl क्लाइंट के साथ जोड़ा जा सकता है, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है. ऐसा करने से बिल्ड कमांड का आउटपुट सीधे kubectl लागू कमांड में स्ट्रीम हो जाता है.
(लागू न करें - सिर्फ़ रेफ़रंस के लिए शामिल किया गया है)
kustomize build chat-app/base | kubectl apply -f -
यह तकनीक तब काम आती है, जब kustomize क्लाइंट के किसी खास वर्शन की ज़रूरत हो.
इसके अलावा, kusomize को kubectl में इंटिग्रेट किए गए टूल की मदद से भी एक्ज़ीक्यूट किया जा सकता है. जैसा कि नीचे दिए गए उदाहरण में बताया गया है.
(लागू न करें - सिर्फ़ रेफ़रंस के लिए शामिल किया गया है)
kubectl apply -k chat-app/base
4. कॉमन एलिमेंट बदलना
अब जब आपका फ़ाइल फ़ोल्डर कॉन्फ़िगर हो गया है और आपने पुष्टि की है कि kustomize काम कर रहा है, तो कुछ बुनियादी वैल्यू को ओवरराइड करने का समय आ गया है.
हर ऐप्लिकेशन और एनवायरमेंट के लिए, इमेज, नेमस्पेस, और लेबल को पसंद के मुताबिक बनाया जाता है. क्योंकि इन्हें आम तौर पर बदला जाता है, इसलिए Kustomize की मदद से आप सीधे kustomize.yaml
में उनका एलान कर सकते हैं. इससे इन सामान्य स्थितियों के लिए कई पैच बनाने की ज़रूरत नहीं पड़ती.
किसी टेंप्लेट का खास इंस्टेंस बनाने के लिए, अक्सर इस तकनीक का इस्तेमाल किया जाता है. संसाधनों के एक बेस सेट का इस्तेमाल, अब अलग-अलग सुविधाओं को लागू करने के लिए किया जा सकता है. इसके लिए, बस नाम और इसके नेमस्पेस को बदलना होगा.
इस उदाहरण में, आपको नेमस्पेस, नाम प्रीफ़िक्स जोड़ना होगा, और अपने kustomization.yaml
में कुछ लेबल जोड़ने होंगे.
- सामान्य लेबल और नेमस्पेस शामिल करने के लिए,
kustomization.yaml
फ़ाइल को अपडेट करें.
अपने टर्मिनल में इन निर्देशों को कॉपी करें और उन्हें एक्ज़ीक्यूट करें
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
namespace: my-namespace
nameprefix: my-
commonLabels:
app: my-app
EOF
- बिल्ड कमांड एक्ज़ीक्यूट करें
बिल्ड को इस पॉइंट पर एक्ज़ीक्यूट करने से पता चलता है कि इससे मिलने वाली YAML फ़ाइल में अब सेवा और डिप्लॉयमेंट, दोनों की परिभाषाओं में नेमस्पेस, लेबल, और प्रीफ़िक्स वाले नाम शामिल हैं.
kustomize build chat-app/base
ध्यान दें कि आउटपुट में ऐसे लेबल और नेमस्पेस कैसे शामिल होते हैं जो डिप्लॉयमेंट YAML फ़ाइल में नहीं हैं. ध्यान दें कि नाम को chat-app
से बदलकर my-chat-app
कैसे किया गया था
(आउटपुट कॉपी नहीं है)
kind: Deployment
metadata:
labels:
`app: my-app`
name: my-chat-app
namespace: my-namespace
5. बड़ी यामल संरचनाओं को पैच करना
Kustomize, बुनियादी संसाधनों को ओवरले करने वाले पैच भी लागू करने की सुविधा देता है. इस तकनीक का इस्तेमाल अक्सर ऐप्लिकेशन और एनवायरमेंट के बीच फ़र्क़ दिखाने के लिए किया जाता है.
इस चरण में, समान बुनियादी संसाधनों का इस्तेमाल करने वाले किसी एक ऐप्लिकेशन के लिए, अलग-अलग एनवायरमेंट बनाए जाएंगे.
- अलग-अलग एनवायरमेंट के लिए फ़ोल्डर बनाकर शुरुआत करें
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- स्टेज पैच को नीचे दिए गए निर्देश के साथ लिखें
cat <<EOF > chat-app/dev/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: dev`
EOF
- अब नीचे दिए गए निर्देश के साथ प्रोडक्शन पैच लिखें
cat <<EOF > chat-app/prod/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: prod`
EOF
ध्यान दें कि ऊपर दिए गए पैच में कंटेनर इमेज का नाम नहीं है. यह वैल्यू, पिछले चरण में बनाए गए base/Deployment.yaml में दी गई है. हालांकि, इन पैच में डेवलपर और प्रोडक्शन के लिए यूनीक एनवायरमेंट वैरिएबल शामिल होते हैं.
- बेस डायरेक्ट्री के लिए kustomize YAML फ़ाइलों को लागू करें
बेस kustomization.yaml को फिर से लिखें. नेमस्पेस और नाम का प्रीफ़िक्स हटाएं, क्योंकि यह सिर्फ़ बेस कॉन्फ़िगरेशन है और इसमें कोई बदलाव नहीं हुआ है. कुछ ही देर में उन फ़ील्ड को एनवायरमेंट की फ़ाइलों में ले जाया जाएगा.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- डेव डायरेक्ट्री के लिए kustomize YAML फ़ाइलों को लागू करें
अब अपने टर्मिनल में नीचे दिए गए निर्देशों का पालन करके, डेव और प्रोड के वैरिएशन लागू करें.
cat <<EOF > chat-app/dev/kustomization.yaml
bases:
- ../base
namespace: dev
nameprefix: dev-
commonLabels:
env: dev
patches:
- deployment.yaml
EOF
फ़ाइल के patches
: सेक्शन को जोड़े जाने पर ध्यान दें. इससे पता चलता है कि kustomize को बेस रिसॉर्स पर उन फ़ाइलों को ओवरले करना चाहिए.
- प्रोडक्शन डायरेक्ट्री के लिए, kustomize YAML फ़ाइलों को लागू करें
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- फ़ाइलों को मर्ज करने के लिए kustomize का इस्तेमाल करें
बेस और एनवायरमेंट की फ़ाइलों को बनाने के बाद, kustomize प्रोसेस को एक्ज़ीक्यूट किया जा सकता है, ताकि बेस फ़ाइलों को पैच किया जा सके.
मर्ज किए गए नतीजे देखने के लिए डेवलपर के लिए यह निर्देश चलाएं.
kustomize build chat-app/dev
ध्यान दें कि आउटपुट में मर्ज किए गए नतीजे शामिल होते हैं, जैसे कि बेस और डेव कॉन्फ़िगरेशन के लेबल. साथ ही, बेस से कंटेनर इमेज का नाम और डेव फ़ोल्डर से एनवायरमेंट वैरिएबल जैसे नतीजे शामिल होते हैं.
6. ओवरले की कई लेयर का इस्तेमाल करके
कई संगठनों की एक टीम होती है, जो ऐप्लिकेशन टीम की सहायता करने और प्लैटफ़ॉर्म को मैनेज करने में मदद करती है. अक्सर ये टीमें खास जानकारी शामिल करना चाहती हैं, जिसे सभी एनवायरमेंट में मौजूद सभी ऐप्लिकेशन में शामिल किया जाना चाहिए. जैसे, लॉगिंग एजेंट.
इस उदाहरण में, आपको एक shared-kustomize
फ़ोल्डर और संसाधन बनाने होंगे, जिन्हें सभी ऐप्लिकेशन में शामिल किया जाएगा. साथ ही, इस बात पर ध्यान नहीं दिया जाएगा कि वे किस एनवायरमेंट में डिप्लॉय किए गए हैं.
- Shared-kustomize फ़ोल्डर बनाएं
mkdir shared-kustomize
- शेयर किए गए फ़ोल्डर में कोई सामान्य
deployment.yaml
बनाएं
cat <<EOF > shared-kustomize/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: logging-agent`
`image: logging-agent-image`
EOF
- शेयर किए गए फ़ोल्डर में kustomization.yaml बनाएं
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- अपने ऐप्लिकेशन से shared-kustomize फ़ोल्डर का रेफ़रंस दें
चूंकि आप shared-kustomize
फ़ोल्डर को अपने सभी ऐप्लिकेशन के लिए आधार बनाना चाहते हैं, इसलिए आपको shared-kustomize
को आधार के रूप में उपयोग करने के लिए अपना chat-app/base/kustomization.yaml
अपडेट करना होगा. इसके बाद, उसके ऊपर अपना डिप्लॉयमेंट.yaml लगाएं. इसके बाद, एनवायरमेंट फ़ोल्डर उसके ऊपर फिर से पैच करेंगे.
अपने टर्मिनल में इन निर्देशों को कॉपी करें और उन्हें एक्ज़ीक्यूट करें
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- ../../shared-kustomize
commonLabels:
app: chat-app
patches:
- deployment.yaml
EOF
- kustomize चलाएं और डेवलपर के लिए मर्ज किए गए नतीजे देखें
kustomize build chat-app/dev
ध्यान दें कि आउटपुट में ऐप्लिकेशन बेस, ऐप्लिकेशन एनवायरमेंट, और shared-kustomize
फ़ोल्डर के मर्ज किए गए नतीजे शामिल हैं. खास तौर पर, कंटेनर सेक्शन में तीनों जगहों की वैल्यू देखी जा सकती हैं.
(आउटपुट कॉपी नहीं है)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>