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

1. मकसद

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

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

आपको:

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

2. आपका Workspace खाता तैयार किया जा रहा है

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

https://ide.cloud.google.com

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

mkdir kustomize-lab

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

cd kustomize-lab && cloudshell workspace .

3. kustomize कमांड लाइन क्लाइंट का इस्तेमाल करना

Kustomize की सबसे बड़ी खासियत यह है कि यह कस्टम वैल्यू के साथ, Kubernetes की बुनियादी YAML फ़ाइलों को ओवरले और उनमें बदलाव कर सकता है. इसके लिए, 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 apply कमांड में स्ट्रीम हो जाता है.

(Do Not Execute - Included for reference only)

kustomize build chat-app/base | kubectl apply -f -

अगर kustomize क्लाइंट के किसी खास वर्शन की ज़रूरत है, तो यह तकनीक काम की होती है.

इसके अलावा, kustomize को kubectl में इंटिग्रेट किए गए टूल की मदद से भी चलाया जा सकता है. जैसा कि यहां दिए गए उदाहरण में दिखाया गया है.

(Do Not Execute - Included for reference only)

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. बिल्ड कमांड को लागू करना

इस पॉइंट पर बिल्ड को एक्ज़ीक्यूट करने से पता चलता है कि अब वाईएएमएल फ़ाइल में, सर्विस और डिप्लॉयमेंट, दोनों की परिभाषाओं में नेमस्पेस, लेबल, और प्रीफ़िक्स वाले नाम शामिल हैं.

kustomize build chat-app/base

ध्यान दें कि आउटपुट में ऐसे लेबल और नेमस्पेस शामिल हैं जो डिप्लॉयमेंट की वाईएएमएल फ़ाइल में मौजूद नहीं हैं. यह भी ध्यान दें कि नाम को chat-app से बदलकर my-chat-app कैसे किया गया

(आउटपुट को कॉपी न करें)

kind: Deployment

metadata:

labels:

`app: my-app`

name: my-chat-app

namespace: my-namespace

5. बड़े YAML स्ट्रक्चर को पैच करना

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

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

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

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

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. dev डायरेक्ट्री के लिए 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. prod डायरेक्ट्री के लिए 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. शेयर किया गया 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. अपने ऐप्लिकेशन से, शेयर किए गए kustomize फ़ोल्डर का रेफ़रंस दें

अगर आपको shared-kustomize फ़ोल्डर को अपने सभी ऐप्लिकेशन के लिए बुनियादी फ़ोल्डर के तौर पर इस्तेमाल करना है, तो आपको chat-app/base/kustomization.yaml को अपडेट करना होगा. इससे shared-kustomize को बुनियादी फ़ोल्डर के तौर पर इस्तेमाल किया जा सकेगा. इसके बाद, सबसे ऊपर मौजूद deployment.yaml को पैच करें. इसके बाद, एनवायरमेंट फ़ोल्डर को फिर से पैच किया जाएगा.

अपने टर्मिनल में यहां दी गई कमांड को कॉपी करें और चलाएं

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

bases:

- ../../shared-kustomize

commonLabels:

app: chat-app

patches:

- deployment.yaml

EOF

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

kustomize build chat-app/dev

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

(output do not copy)

<pre>

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

</pre>