Kustomize के साथ स्केलिंग

1. मकसद

Kustomize एक ऐसा टूल है जो ऐप्लिकेशन के कॉन्फ़िगरेशन को पसंद के मुताबिक बनाने के लिए, टेंप्लेट-फ़्री तरीका उपलब्ध कराता है. इससे, पहले से मौजूद ऐप्लिकेशन का इस्तेमाल करना आसान हो जाता है. यह एक स्टैंडअलोन यूटिलिटी के तौर पर उपलब्ध है और इसे kubectl apply -k तक kubectl में बनाया गया है. इसका इस्तेमाल स्टैंडअलोन सीएलआई के तौर पर किया जा सकता है. ज़्यादा जानकारी के लिए, kustomize.io पर जाएं.

इस ट्यूटोरियल में, Kustomize के कुछ मुख्य कॉन्सेप्ट के बारे में अच्छे से जानकारी दी गई है. साथ ही, इसका इस्तेमाल ऐप्लिकेशन और एनवायरमेंट में होने वाले उतार-चढ़ाव को मैनेज करने के लिए किया जा सकता है.

ऐसा करने पर:

  • kustomize कमांड लाइन क्लाइंट का इस्तेमाल करें
  • सामान्य एलिमेंट को बदलना
  • बड़े यामल स्ट्रक्चर को पैच करें
  • ओवरले की कई लेयर का इस्तेमाल करें

2. आपका फ़ाइल फ़ोल्डर तैयार किया जा रहा है

  1. इस यूआरएल पर जाकर, Cloud Shell एडिटर खोलें

https://ide.cloud.google.com

  1. टर्मिनल विंडो में, इस ट्यूटोरियल के लिए एक ऐक्टिव डायरेक्ट्री बनाएं

mkdir kustomize-lab

  1. डायरेक्ट्री में बदलाव करें और IDE फ़ाइल फ़ोल्डर सेट करें

cd kustomize-lab && cloudshell workspace .

3. kustomize कमांड लाइन क्लाइंट का इस्तेमाल किया जा रहा है

kustomize की क्षमता, कस्टम वैल्यू के साथ बेस Kubernetes yamls को ओवरले करने और उनमें बदलाव करने की सुविधा से मिलती है. यह kustomize करने के लिए, एक बेस फ़ाइल की ज़रूरत होती है, जिसमें फ़ाइलें कहां हैं और उन्हें कैसे बदलना है, इसके निर्देश मौजूद होते हैं. Kustomize को Kubernetes ईकोसिस्टम में शामिल किया गया है और इसे कई तरीकों से लागू किया जा सकता है.

इस सेक्शन में, एक बेस kustomize कॉन्फ़िगरेशन बनाया जा सकता है और स्टैंडअलोन kustomize कमांड लाइन क्लाइंट का इस्तेमाल करके फ़ाइलों को प्रोसेस किया जा सकता है.

  1. शुरू करने के लिए, आपको एक फ़ोल्डर बनाना होगा, जिसमें आपकी बेस कॉन्फ़िगरेशन फ़ाइलें सेव रहेंगी

mkdir -p chat-app/base

  1. बेस फ़ोल्डर में एक सिंपल 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

  1. kustomization.yaml बेस बनाएं

Kustomize, एंट्री पॉइंट के तौर पर kustomization.yaml नाम की फ़ाइल को ढूंढता है. इस फ़ाइल में अलग-अलग बेस और ओवरराइड फ़ाइलों के साथ-साथ खास ओवरराइड वैल्यू के रेफ़रंस शामिल हैं.

एक ऐसी kustomization.yaml फ़ाइल बनाएं जो deployment.yaml को बुनियादी रिसॉर्स के तौर पर दिखाती हो.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. बेस फ़ोल्डर पर 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 में कुछ लेबल जोड़ने होंगे.

  1. सामान्य लेबल और नेमस्पेस शामिल करने के लिए, kustomization.yaml फ़ाइल को अपडेट करें.

अपने टर्मिनल में इन निर्देशों को कॉपी करें और उन्हें एक्ज़ीक्यूट करें

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

namespace: my-namespace

nameprefix: my-

commonLabels:

app: my-app

EOF

  1. बिल्ड कमांड एक्ज़ीक्यूट करें

बिल्ड को इस पॉइंट पर एक्ज़ीक्यूट करने से पता चलता है कि इससे मिलने वाली 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, बुनियादी संसाधनों को ओवरले करने वाले पैच भी लागू करने की सुविधा देता है. इस तकनीक का इस्तेमाल अक्सर ऐप्लिकेशन और एनवायरमेंट के बीच फ़र्क़ दिखाने के लिए किया जाता है.

इस चरण में, समान बुनियादी संसाधनों का इस्तेमाल करने वाले किसी एक ऐप्लिकेशन के लिए, अलग-अलग एनवायरमेंट बनाए जाएंगे.

  1. अलग-अलग एनवायरमेंट के लिए फ़ोल्डर बनाकर शुरुआत करें

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. स्टेज पैच को नीचे दिए गए निर्देश के साथ लिखें

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

  1. अब नीचे दिए गए निर्देश के साथ प्रोडक्शन पैच लिखें

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 में दी गई है. हालांकि, इन पैच में डेवलपर और प्रोडक्शन के लिए यूनीक एनवायरमेंट वैरिएबल शामिल होते हैं.

  1. बेस डायरेक्ट्री के लिए kustomize YAML फ़ाइलों को लागू करें

बेस kustomization.yaml को फिर से लिखें. नेमस्पेस और नाम का प्रीफ़िक्स हटाएं, क्योंकि यह सिर्फ़ बेस कॉन्फ़िगरेशन है और इसमें कोई बदलाव नहीं हुआ है. कुछ ही देर में उन फ़ील्ड को एनवायरमेंट की फ़ाइलों में ले जाया जाएगा.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. डेव डायरेक्ट्री के लिए kustomize YAML फ़ाइलों को लागू करें

अब अपने टर्मिनल में नीचे दिए गए निर्देशों का पालन करके, डेव और प्रोड के वैरिएशन लागू करें.

cat <<EOF > chat-app/dev/kustomization.yaml

bases:

- ../base

namespace: dev

nameprefix: dev-

commonLabels:

env: dev

patches:

- deployment.yaml

EOF

फ़ाइल के patches: सेक्शन को जोड़े जाने पर ध्यान दें. इससे पता चलता है कि kustomize को बेस रिसॉर्स पर उन फ़ाइलों को ओवरले करना चाहिए.

  1. प्रोडक्शन डायरेक्ट्री के लिए, kustomize YAML फ़ाइलों को लागू करें

cat <<EOF > chat-app/prod/kustomization.yaml

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. फ़ाइलों को मर्ज करने के लिए kustomize का इस्तेमाल करें

बेस और एनवायरमेंट की फ़ाइलों को बनाने के बाद, kustomize प्रोसेस को एक्ज़ीक्यूट किया जा सकता है, ताकि बेस फ़ाइलों को पैच किया जा सके.

मर्ज किए गए नतीजे देखने के लिए डेवलपर के लिए यह निर्देश चलाएं.

kustomize build chat-app/dev

ध्यान दें कि आउटपुट में मर्ज किए गए नतीजे शामिल होते हैं, जैसे कि बेस और डेव कॉन्फ़िगरेशन के लेबल. साथ ही, बेस से कंटेनर इमेज का नाम और डेव फ़ोल्डर से एनवायरमेंट वैरिएबल जैसे नतीजे शामिल होते हैं.

6. ओवरले की कई लेयर का इस्तेमाल करके

कई संगठनों की एक टीम होती है, जो ऐप्लिकेशन टीम की सहायता करने और प्लैटफ़ॉर्म को मैनेज करने में मदद करती है. अक्सर ये टीमें खास जानकारी शामिल करना चाहती हैं, जिसे सभी एनवायरमेंट में मौजूद सभी ऐप्लिकेशन में शामिल किया जाना चाहिए. जैसे, लॉगिंग एजेंट.

इस उदाहरण में, आपको एक shared-kustomize फ़ोल्डर और संसाधन बनाने होंगे, जिन्हें सभी ऐप्लिकेशन में शामिल किया जाएगा. साथ ही, इस बात पर ध्यान नहीं दिया जाएगा कि वे किस एनवायरमेंट में डिप्लॉय किए गए हैं.

  1. Shared-kustomize फ़ोल्डर बनाएं

mkdir shared-kustomize

  1. शेयर किए गए फ़ोल्डर में कोई सामान्य 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

  1. शेयर किए गए फ़ोल्डर में kustomization.yaml बनाएं

cat <<EOF > shared-kustomize/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. अपने ऐप्लिकेशन से 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

  1. kustomize चलाएं और डेवलपर के लिए मर्ज किए गए नतीजे देखें

kustomize build chat-app/dev

ध्यान दें कि आउटपुट में ऐप्लिकेशन बेस, ऐप्लिकेशन एनवायरमेंट, और shared-kustomize फ़ोल्डर के मर्ज किए गए नतीजे शामिल हैं. खास तौर पर, कंटेनर सेक्शन में तीनों जगहों की वैल्यू देखी जा सकती हैं.

(आउटपुट कॉपी नहीं है)

&lt;pre&gt;

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

&lt;/pre&gt;