Cloud Build की मदद से, Google Kubernetes Engine (GKE) में लगातार डिप्लॉय करना

1. खास जानकारी

इस लैब में, आपको Cloud Build के साथ GKE (जीकेई) के लिए, लगातार डिलीवरी की प्रोसेस सेट अप करने का तरीका पता चलेगा. यह लैब, अलग-अलग git इवेंट के लिए Cloud Build जॉब को ट्रिगर करने के तरीके के साथ-साथ GKE में ऑटोमेटेड कैनरी रिलीज़ के लिए एक आसान पैटर्न को हाइलाइट करता है.

आपको ये चरण पूरे करने होंगे:

  • GKE (जीकेई) ऐप्लिकेशन बनाएं
  • git ब्रांच के लिए डिप्लॉयमेंट ऑटोमेट करना
  • git मुख्य ब्रांच के लिए डिप्लॉयमेंट ऑटोमेट करना
  • गिट टैग के लिए अपने-आप डिप्लॉयमेंट की सुविधा चालू करना

2. शुरू करने से पहले

इस रेफ़रंस गाइड के लिए, आपके पास Google Cloud प्रोजेक्ट होना चाहिए. नया प्रोजेक्ट बनाया जा सकता है या पहले से बनाया गया कोई प्रोजेक्ट चुना जा सकता है:

  1. Google Cloud प्रोजेक्ट चुनें या बनाएं.

प्रोजेक्ट चुनने वाले पेज पर जाएं

  1. अपने प्रोजेक्ट के लिए बिलिंग की सुविधा चालू करें.

बिलिंग की सुविधा चालू करें

3. आपके एनवायरमेंट को तैयार किया जा रहा है

  1. इस ट्यूटोरियल में इस्तेमाल करने के लिए, एनवायरमेंट वैरिएबल बनाएं:
    export PROJECT_ID=$(gcloud config get-value project)
    export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
    
    export ZONE=us-central1-b
    export CLUSTER=gke-progression-cluster
    export APP_NAME=myapp
    
  2. इन एपीआई को चालू करें:
    • रिसोर्स मैनेजर
    • GKE (जीकेई)
    • Cloud Source Repositories
    • Cloud Build
    • कंटेनर रजिस्ट्री
    gcloud services enable \
        cloudresourcemanager.googleapis.com \
        container.googleapis.com \
        sourcerepo.googleapis.com \
        cloudbuild.googleapis.com \
        containerregistry.googleapis.com \
        --async
    
  3. सैंपल सोर्स का क्लोन बनाएं और लैब डायरेक्ट्री पर स्विच करें:
    git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git gke-progression
    
    cd gke-progression/labs/gke-progression
    rm -rf ../../.git
    
  4. सैंपल रिपॉज़िटरी में प्लेसहोल्डर वैल्यू को अपने PROJECT_ID से बदलें:इस चरण में, आपके मौजूदा एनवायरमेंट के हिसाब से यूनीक कॉन्फ़िगरेशन फ़ाइलों के इंस्टेंस बनाए जाते हैं.अपडेट किए जा रहे टेंप्लेट के उदाहरण देखने के लिए, नीचे दिया गया कमांड चलाएं.
    cat k8s/deployments/dev/frontend-dev.yaml.tmpl
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है फ़ॉलोइन कमांड को लागू करके, वैरिएबल को बदलें.
    for template in $(find . -name '*.tmpl'); do envsubst '${PROJECT_ID} ${ZONE} ${CLUSTER} ${APP_NAME}' < ${template} > ${template%.*}; done
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है प्रतिस्थापन के बाद फ़ाइल के उदाहरण की समीक्षा करने के लिए, नीचे दिया गया कमांड चलाएं.
    cat k8s/deployments/dev/frontend-dev.yaml
    
  5. अगर आपने Cloud Shell में Git का इस्तेमाल पहले नहीं किया है, तो user.name और user.email की उन वैल्यू को सेट करें जिनका इस्तेमाल आपको करना है:
    git config --global user.email "YOUR_EMAIL_ADDRESS"
    git config --global user.name "YOUR_USERNAME"
    
  6. सैंपल रिपॉज़िटरी से मिले कोड को Cloud सोर्स डेटा स्टोर करने की जगहों में सेव करें:
    gcloud source repos create gke-progression
    git init
    git config credential.helper gcloud.sh
    git remote add gcp https://source.developers.google.com/p/$PROJECT_ID/r/gke-progression
    git branch -m main
    git add . && git commit -m "initial commit"
    git push gcp main
    
  7. अपना GKE (जीकेई) क्लस्टर बनाएं.
    gcloud container clusters create ${CLUSTER} \
        --project=${PROJECT_ID} \
        --zone=${ZONE}
    
  8. अपने क्लस्टर को Cloud Build के अधिकार दें.Cloud Build आपके GKE (जीकेई) क्लस्टर में इस ऐप्लिकेशन को डिप्लॉय करेगा. साथ ही, ऐसा करने के लिए Cloud Build को अधिकारों की ज़रूरत होगी.
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
        --role=roles/container.developer
    

आपका एनवायरमेंट तैयार है!

4. आपका GKE (जीकेई) ऐप्लिकेशन बनाया जा रहा है

इस सेक्शन में, प्रोडक्शन के लिए वह ऐप्लिकेशन बनाया और डिप्लॉय किया जाता है जिसका इस्तेमाल इस ट्यूटोरियल में किया जाता है.

  1. Cloud Build की मदद से ऐप्लिकेशन बनाएं:
    gcloud builds submit --tag gcr.io/$PROJECT_ID/$APP_NAME:1.0.0 src/
    
  2. कैनरी और प्रोडक्शन एनवायरमेंट में मैन्युअल तरीके से डिप्लॉय करें:kubectl apply निर्देशों का इस्तेमाल करके, प्रोडक्शन और कैनरी डिप्लॉयमेंट और सेवाएं बनाएं.
    kubectl create ns production
    kubectl apply -f k8s/deployments/prod -n production
    kubectl apply -f k8s/deployments/canary -n production
    kubectl apply -f k8s/services -n production
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है यहां डिप्लॉय की गई सेवा, ट्रैफ़िक को कैनरी और प्रोडक्शन, दोनों डिप्लॉयमेंट पर रूट करेगी.
  3. दौड़ने वाले पॉड की संख्या की समीक्षा करें, यह पक्का करें कि आपके पास फ़्रंटएंड के लिए चार पॉड चल रहे हैं. इसमें, प्रोडक्शन ट्रैफ़िक के लिए तीन और कैनरी रिलीज़ के लिए एक पॉड शामिल है. इसका मतलब है कि आपकी कैनरी रिलीज़ में किए गए बदलावों का असर, चार में से सिर्फ़ 1 (25%) उपयोगकर्ताओं पर पड़ेगा.
    kubectl get pods -n production -l app=$APP_NAME -l role=frontend
    
  4. प्रोडक्शन सेवाओं के लिए बाहरी आईपी पता वापस पाएं.
    kubectl get service $APP_NAME -n production
    
    लोड बैलेंसर से आईपी पता वापस मिलने पर, अगले चरण पर जाएं
  5. बाद में इस्तेमाल करने के लिए बाहरी आईपी को सेव करें.
    export PRODUCTION_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}"  --namespace=production services $APP_NAME)
    
  6. ऐप्लिकेशन की समीक्षा करें सेवा के वर्शन आउटपुट की जाँच करें. इसे Hello World v1.0 फ़ॉर्मैट में होना चाहिए
    curl http://$PRODUCTION_IP
    

बधाई हो! आपने सैंपल ऐप्लिकेशन डिप्लॉय किया है! इसके बाद, अपने बदलावों को लगातार लागू करने के लिए आपको ट्रिगर सेट अप करने होंगे.

5. git ब्रांच के लिए डिप्लॉयमेंट ऑटोमेट करना

इस सेक्शन में, एक ट्रिगर सेट अप किया जाएगा. यह ट्रिगर, main के अलावा किसी भी अन्य ब्रांच का इस्तेमाल करके Cloudbuild जॉब को एक्ज़ीक्यूट करेगा. यहां इस्तेमाल की गई Cloud Build फ़ाइल, किसी भी मौजूदा या नई ब्रांच के लिए, अपने-आप नेमस्पेस और डिप्लॉयमेंट बन जाएगी. इससे डेवलपर, मुख्य ब्रांच के साथ इंटिग्रेशन से पहले अपने कोड की झलक देख पाएंगे.

  1. ट्रिगर सेट अप करें:इस ट्रिगर का मुख्य कॉम्पोनेंट branchName पैरामीटर का इस्तेमाल करना है, ताकि main और invertRegex पैरामीटर से मैच किया जा सके. यह पैरामीटर 'सही' पर सेट है. साथ ही, यह branchName पैटर्न में बदलाव करता है, ताकि वह main के अलावा किसी और चीज़ से मैच कर सके. आपके रेफ़रंस के लिए, build/branch-trigger.json में ये लाइनें देखी जा सकती हैं.
      "branchName": "main",
      "invertRegex": true
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इसके अलावा, इस ट्रिगर के साथ इस्तेमाल की जाने वाली Cloud Build फ़ाइल की आखिरी कुछ लाइनें, जॉब को ट्रिगर करने वाली ब्रांच के नाम पर एक नेमस्पेस बनाती हैं. इसके बाद, नए नेमस्पेस में ऐप्लिकेशन और सेवा को डिप्लॉय करती हैं. आपके रेफ़रंस के लिए, build/branch-cloudbuild.yaml
      kubectl get ns ${BRANCH_NAME} || kubectl create ns ${BRANCH_NAME}
      kubectl apply --namespace ${BRANCH_NAME} --recursive -f k8s/deployments/dev
      kubectl apply --namespace ${BRANCH_NAME} --recursive -f k8s/services
    
    में ये लाइनें देखी जा सकती हैं अब आपने इस्तेमाल किया जा रहा तरीका समझ लिया है. इसलिए, नीचे दिए गए gcloud कमांड की मदद से ट्रिगर बनाएं.
    gcloud beta builds triggers create cloud-source-repositories \
      --trigger-config build/branch-trigger.json
    
  2. ट्रिगर की समीक्षा करने के लिए, कंसोल में Cloud Build के ट्रिगर पेज पर जाएं.ट्रिगर पर जाएं
  3. नई ब्रांच बनाएं:
    git checkout -b new-feature-1
    
  4. इस कोड में बदलाव करके, v1.1बदलाव src/app.py को दिखाएं और रिस्पॉन्स को 1.0 से 1.1 में बदलें
    @app.route('/')
    def hello_world():
        return 'Hello World v1.1'
    
  5. बदलाव करें और रिमोट रिपॉज़िटरी में पुश करें:
    git add . && git commit -m "updated" && git push gcp new-feature-1
    
  6. बिल्ड की प्रोग्रेस की समीक्षा करने के लिए, कंसोल में Cloud Build के इतिहास पेज पर जाएं.बिल्ड पर जाएंबिल्ड के पूरा होने के बाद, अगले चरण पर जाएं
  7. डिप्लॉय की गई नई ब्रांच सेवा के लिए, एक्सटर्नल आईपी पता वापस पाएं.
    kubectl get service $APP_NAME -n new-feature-1
    
    लोड बैलेंसर से आईपी पता वापस मिलने पर, अगले चरण पर जाएं
  8. बाद में इस्तेमाल करने के लिए बाहरी आईपी को सेव करें.
    export BRANCH_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}"  --namespace=new-feature-1 services $APP_NAME)
    
  9. ऐप्लिकेशन की समीक्षा करें. सेवा का वर्शन आउटपुट देखें. इसे Hello World v1.0 फ़ॉर्मैट में होना चाहिए
    curl http://$BRANCH_IP
    

6. git मुख्य ब्रांच के लिए, डिप्लॉयमेंट को ऑटोमेट करना

कोड को प्रोडक्शन में रिलीज़ करने से पहले, सभी ट्रैफ़िक को नए कोड बेस पर माइग्रेट करने से पहले, कोड को लाइव ट्रैफ़िक के एक छोटे सबसेट पर रिलीज़ करना सामान्य बात है.

इस सेक्शन में, एक ट्रिगर लागू किया गया है, जो मुख्य ब्रांच के लिए कोड के तय होने पर चालू होता है. ट्रिगर कैनरी डिप्लॉयमेंट का इस्तेमाल करता है, जिसे नए बदलाव पर पूरे लाइव ट्रैफ़िक का 25% मिलता है.

  1. मुख्य ब्रांच के लिए ट्रिगर सेट अप करें:
    gcloud beta builds triggers create cloud-source-repositories \
      --trigger-config build/main-trigger.json
    
  2. नए ट्रिगर की समीक्षा करने के लिए, कंसोल में Cloud Build के ट्रिगर पेज पर जाएं.ट्रिगर पर जाएं
  3. ब्रांच को मुख्य लाइन में मर्ज करें और उसे रिमोट रिपॉज़िटरी में पुश करें:
    git checkout main
    git merge new-feature-1
    git push gcp main
    
  4. बिल्ड की प्रोग्रेस की समीक्षा करने के लिए, कंसोल में Cloud Build इतिहास पेज पर जाएं.बिल्ड पर जाएंबिल्ड पर जाने के बाद, अगले चरण पर जाएं
  5. सर्वर से मिले एक से ज़्यादा रिस्पॉन्स की समीक्षा करें. नीचे दिया गया निर्देश चलाएं और ध्यान दें कि करीब 25% रिस्पॉन्स, Hello World v1.1 के नए रिस्पॉन्स दिखा रहे हैं
    while true; do curl -w "\n" http://$PRODUCTION_IP; sleep 1;  done
    
    जब आप जारी रखने के लिए तैयार हों, तो लूप से बाहर निकलने के लिए Ctrl+c दबाएं.

7. Git टैग के लिए डिप्लॉयमेंट ऑटोमेट करना

ट्रैफ़िक के एक छोटे सबसेट से कैनरी डिप्लॉयमेंट की पुष्टि होने के बाद, बाकी बचे ट्रैफ़िक के लिए डिप्लॉयमेंट को रिलीज़ किया जाता है.

इस सेक्शन में, उस ट्रिगर को सेट अप किया जाता है जो रिपॉज़िटरी में टैग बनाने पर चालू होता है. ट्रिगर इमेज को सही टैग के साथ लेबल करता है. इसके बाद, यह पक्का करने के लिए अपडेट लागू करता है कि 100% ट्रैफ़िक, टैग की गई इमेज को ऐक्सेस कर रहा है.

  1. टैग ट्रिगर सेट अप करें:
    gcloud beta builds triggers create cloud-source-repositories \
      --trigger-config build/tag-trigger.json
    
  2. नए ट्रिगर की समीक्षा करने के लिए, कंसोल में Cloud Build के ट्रिगर पेज पर जाएं.ट्रिगर पर जाएं
  3. नया टैग बनाएं और रिमोट रिपॉज़िटरी में पुश करें:
    git tag 1.1
    git push gcp 1.1
    
  4. बिल्ड की प्रोग्रेस की समीक्षा करने के लिए, कंसोल में Cloud Build इतिहास पेज पर जाएं.बिल्ड पर जाएं
  5. सर्वर से मिले एक से ज़्यादा रिस्पॉन्स की समीक्षा करें. इसके लिए, यहां दिया गया निर्देश चलाएं और ध्यान दें कि 100% रिस्पॉन्स, Hello World v1.1 का नया रिस्पॉन्स दिखा रहे हैं. इसमें कुछ समय लग सकता है, क्योंकि GKE (जीकेई) में नए पॉड डिप्लॉय किए जाते हैं और उनकी परफ़ॉर्मेंस की जांच की जाती है
    while true; do curl -w "\n" http://$PRODUCTION_IP; sleep 1;  done
    
    जब आप आगे बढ़ने के लिए तैयार हों, तब लूप से बाहर निकलने के लिए Ctrl+c दबाएं.बधाई हो! आपने Cloud Build में ब्रांच और टैग के लिए सीआई/सीडी ट्रिगर बनाए हैं, ताकि GKE (जीकेई) पर अपने ऐप्लिकेशन डिप्लॉय किए जा सकें.

8. साफ़-सफ़ाई सेवा

प्रोजेक्ट मिटाएं

  1. Cloud Console में, संसाधन मैनेज करें पेज पर जाएं.
  2. प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे मिटाना है. इसके बाद, मिटाएं पर क्लिक करें.
  3. डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए, शट डाउन करें पर क्लिक करें.