ক্লাউড বিল্ডের সাথে Google Kubernetes Engine (GKE) তে ক্রমাগত স্থাপনা

1. ওভারভিউ

এই ল্যাবে, আপনি ক্লাউড বিল্ড সহ GKE-এর জন্য একটি অবিচ্ছিন্ন ডেলিভারি পাইপলাইন সেট আপ করতে শিখবেন। এই ল্যাবটি হাইলাইট করে যে কীভাবে বিভিন্ন গিট ইভেন্টের জন্য ক্লাউড বিল্ড কাজগুলিকে ট্রিগার করতে হয় সেইসাথে GKE-তে স্বয়ংক্রিয় ক্যানারি রিলিজের জন্য একটি সাধারণ প্যাটার্ন।

আপনি নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করবেন:

  • GKE অ্যাপ্লিকেশন তৈরি করুন
  • গিট শাখার জন্য স্বয়ংক্রিয় স্থাপনা
  • গিট প্রধান শাখার জন্য স্বয়ংক্রিয় স্থাপনা
  • গিট ট্যাগের জন্য স্বয়ংক্রিয় স্থাপনা

2. আপনি শুরু করার আগে

এই রেফারেন্স গাইডের জন্য, আপনার একটি Google ক্লাউড প্রকল্প প্রয়োজন। আপনি একটি নতুন তৈরি করতে পারেন, অথবা আপনি ইতিমধ্যে তৈরি করা একটি প্রকল্প নির্বাচন করতে পারেন:

  1. একটি Google ক্লাউড প্রকল্প নির্বাচন করুন বা তৈরি করুন৷

প্রকল্প নির্বাচক পৃষ্ঠাতে যান

  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. নিম্নলিখিত API সক্রিয় করুন:
    • রিসোর্স ম্যানেজার
    • জিকেই
    • ক্লাউড সোর্স রিপোজিটরি
    • ক্লাউড বিল্ড
    • কন্টেইনার রেজিস্ট্রি
    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. আপনি যদি আগে ক্লাউড শেল-এ গিট ব্যবহার না করে থাকেন, তাহলে user.name এবং user.email মানগুলি সেট করুন যা আপনি ব্যবহার করতে চান:
    git config --global user.email "YOUR_EMAIL_ADDRESS"
    git config --global user.name "YOUR_USERNAME"
    
  6. ক্লাউড সোর্স রিপোজিটরিতে নমুনা সংগ্রহস্থল থেকে কোড সংরক্ষণ করুন:
    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. আপনার ক্লাস্টারে ক্লাউড বিল্ডের অধিকার দিন৷ ক্লাউড বিল্ড আপনার GKE ক্লাস্টারে অ্যাপ্লিকেশনটি স্থাপন করবে এবং এটি করার জন্য অধিকারের প্রয়োজন হবে৷
    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
        --role=roles/container.developer
    

আপনার পরিবেশ প্রস্তুত!

4. আপনার GKE অ্যাপ্লিকেশন তৈরি করা

এই বিভাগে, আপনি এই টিউটোরিয়াল জুড়ে ব্যবহার করেন এমন প্রাথমিক উত্পাদন অ্যাপ্লিকেশনটি তৈরি এবং স্থাপন করুন।

  1. ক্লাউড বিল্ড দিয়ে অ্যাপ্লিকেশনটি তৈরি করুন:
    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. চলমান পডের সংখ্যা পর্যালোচনা করুন নিশ্চিত করুন যে আপনার সামনে চারটি পড চলছে, যার মধ্যে তিনটি প্রোডাকশন ট্র্যাফিকের জন্য এবং একটি ক্যানারি রিলিজের জন্য রয়েছে৷ এর মানে হল যে আপনার ক্যানারি রিলিজের পরিবর্তনগুলি 4 (25%) ব্যবহারকারীদের মধ্যে 1 জনকে প্রভাবিত করবে।
    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. অ্যাপ্লিকেশন পর্যালোচনা করুন পরিষেবার সংস্করণ আউটপুট পরীক্ষা করুন. এটি হ্যালো ওয়ার্ল্ড v1.0 পড়া উচিত
    curl http://$PRODUCTION_IP
    

অভিনন্দন! আপনি নমুনা অ্যাপ্লিকেশন স্থাপন! এরপরে, আপনি ক্রমাগত আপনার পরিবর্তনগুলি স্থাপন করার জন্য একটি ট্রিগার সেট আপ করবেন।

5. গিট শাখার জন্য স্বয়ংক্রিয় স্থাপনা

এই বিভাগে আপনি একটি ট্রিগার সেট আপ করবেন যা main ছাড়া অন্য কোন শাখার প্রতিশ্রুতিতে একটি ক্লাউডবিল্ড কাজ সম্পাদন করবে। এখানে ব্যবহৃত ক্লাউড বিল্ড ফাইলটি স্বয়ংক্রিয়ভাবে যেকোন বিদ্যমান বা নতুন শাখার জন্য একটি নামস্থান এবং স্থাপনা তৈরি করবে, যার ফলে ডেভেলপাররা মূল শাখার সাথে একীভূত হওয়ার আগে তাদের কোডের পূর্বরূপ দেখতে পারবেন।

  1. ট্রিগার সেট আপ করুন: এই ট্রিগারের মূল উপাদান হল branchName প্যারামিটারের সাথে main এবং invertRegex প্যারামিটারের সাথে মেলে যা সত্যে সেট করা হয় এবং main নয় এমন যেকোনো কিছুর সাথে মিল করার জন্য branchName প্যাটার্ন পরিবর্তন করে। আপনার রেফারেন্সের জন্য আপনি build/branch-trigger.json এ নিম্নলিখিত লাইনগুলি খুঁজে পেতে পারেন।
      "branchName": "main",
      "invertRegex": true
    
    অতিরিক্তভাবে এই ট্রিগারের সাথে ব্যবহৃত ক্লাউড বিল্ড ফাইলের শেষ কয়েকটি লাইন কাজটি ট্রিগারকারী শাখার নামে একটি নামস্থান তৈরি করে, তারপর নতুন নামস্থানের মধ্যে অ্যাপ্লিকেশন এবং পরিষেবা স্থাপন করে। আপনার রেফারেন্সের জন্য আপনি 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. ট্রিগার পর্যালোচনা করতে, কনসোলে ক্লাউড বিল্ড ট্রিগার পৃষ্ঠাতে যান। ট্রিগারে যান
  3. একটি নতুন শাখা তৈরি করুন:
    git checkout -b new-feature-1
    
  4. v1.1Edit 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. প্রগতিশীল বিল্ড পর্যালোচনা করতে, কনসোলে ক্লাউড বিল্ড ইতিহাস পৃষ্ঠাতে যান৷ বিল্ডস-এ যান একবার বিল্ড সম্পূর্ণ হলে পরবর্তী ধাপে যান
  7. নতুন নিয়োজিত শাখা পরিষেবার জন্য বাহ্যিক IP ঠিকানা পুনরুদ্ধার করুন।
    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. অ্যাপ্লিকেশনটি পর্যালোচনা করুন পরিষেবাটির সংস্করণ আউটপুট পরীক্ষা করুন৷ এটি হ্যালো ওয়ার্ল্ড v1.0 পড়া উচিত
    curl http://$BRANCH_IP
    

6. গিট প্রধান শাখার জন্য স্বয়ংক্রিয় স্থাপনা

প্রোডাকশনে কোড প্রকাশ করার আগে, নতুন কোড বেসে সমস্ত ট্রাফিক স্থানান্তর করার আগে লাইভ ট্রাফিকের একটি ছোট উপসেটে কোড প্রকাশ করা সাধারণ।

এই বিভাগে, আপনি একটি ট্রিগার প্রয়োগ করেন যা সক্রিয় হয় যখন কোড প্রধান শাখায় প্রতিশ্রুতিবদ্ধ হয়। ট্রিগারটি ক্যানারি স্থাপনা স্থাপন করে যা নতুন সংশোধনে সমস্ত লাইভ ট্রাফিকের 25% গ্রহণ করে।

  1. প্রধান শাখার জন্য ট্রিগার সেট আপ করুন:
    gcloud beta builds triggers create cloud-source-repositories \
      --trigger-config build/main-trigger.json
    
  2. নতুন ট্রিগার পর্যালোচনা করতে, কনসোলে ক্লাউড বিল্ড ট্রিগার পৃষ্ঠাতে যান। ট্রিগারে যান
  3. শাখাটিকে প্রধান লাইনে একত্রিত করুন এবং দূরবর্তী সংগ্রহস্থলে ধাক্কা দিন:
    git checkout main
    git merge new-feature-1
    git push gcp main
    
  4. প্রগতিশীল বিল্ড পর্যালোচনা করতে, কনসোলে ক্লাউড বিল্ড ইতিহাস পৃষ্ঠাতে যান৷ বিল্ড শেষ হয়ে গেলে পরবর্তী ধাপে যান
  5. সার্ভার থেকে একাধিক প্রতিক্রিয়া পর্যালোচনা করুন নিম্নলিখিত কমান্ডটি চালান এবং লক্ষ্য করুন যে প্রায় 25% প্রতিক্রিয়া হ্যালো ওয়ার্ল্ড v1.1 এর নতুন প্রতিক্রিয়া দেখাচ্ছে।
    while true; do curl -w "\n" http://$PRODUCTION_IP; sleep 1;  done
    
    আপনি যখন চালিয়ে যাওয়ার জন্য প্রস্তুত হন তখন লুপ থেকে বেরিয়ে আসতে Ctrl+c টিপুন।

7. গিট ট্যাগের জন্য স্বয়ংক্রিয় স্থাপনা

ক্যানারি স্থাপনাটি ট্রাফিকের একটি ছোট উপসেটের সাথে বৈধ হওয়ার পরে, আপনি লাইভ ট্রাফিকের অবশিষ্ট অংশে স্থাপনাটি ছেড়ে দেন।

এই বিভাগে, আপনি একটি ট্রিগার সেট আপ করেন যা সক্রিয় হয় যখন আপনি সংগ্রহস্থলে একটি ট্যাগ তৈরি করেন। ট্রিগারটি যথাযথ ট্যাগ সহ চিত্রটিকে লেবেল করে তারপর পণ্যগুলিতে আপডেটগুলি স্থাপন করে যাতে 100% ট্র্যাফিক ট্যাগ করা চিত্রটি অ্যাক্সেস করছে।

  1. ট্যাগ ট্রিগার সেট আপ করুন:
    gcloud beta builds triggers create cloud-source-repositories \
      --trigger-config build/tag-trigger.json
    
  2. নতুন ট্রিগার পর্যালোচনা করতে, কনসোলে ক্লাউড বিল্ড ট্রিগার পৃষ্ঠাতে যান। ট্রিগারে যান
  3. একটি নতুন ট্যাগ তৈরি করুন এবং রিমোট রিপোজিটরিতে চাপ দিন:
    git tag 1.1
    git push gcp 1.1
    
  4. প্রগতিশীল বিল্ড পর্যালোচনা করতে, কনসোলে ক্লাউড বিল্ড ইতিহাস পৃষ্ঠাতে যান৷ বিল্ডসে যান
  5. সার্ভার থেকে একাধিক প্রতিক্রিয়া পর্যালোচনা করুন নিম্নলিখিত কমান্ডটি চালান এবং নোট করুন যে 100% প্রতিক্রিয়াগুলি হ্যালো ওয়ার্ল্ড v1.1 এর নতুন প্রতিক্রিয়া দেখাচ্ছে এতে কিছুক্ষণ সময় লাগতে পারে কারণ নতুন পডগুলি GKE এর মধ্যে স্থাপন করা হয়েছে এবং স্বাস্থ্য পরীক্ষা করা হয়েছে
    while true; do curl -w "\n" http://$PRODUCTION_IP; sleep 1;  done
    
    আপনি যখন চালিয়ে যাওয়ার জন্য প্রস্তুত হন তখন লুপ থেকে বেরিয়ে আসতে Ctrl+c টিপুন। অভিনন্দন! আপনি GKE-তে আপনার অ্যাপ স্থাপন করার জন্য শাখা এবং ট্যাগের জন্য ক্লাউড বিল্ডে CI/CD ট্রিগার তৈরি করেছেন।

8. পরিষ্কার করা

প্রকল্পটি মুছুন

  1. ক্লাউড কনসোলে, সম্পদ পরিচালনা পৃষ্ঠাতে যান।
  2. প্রকল্প তালিকায়, আপনি যে প্রকল্পটি মুছতে চান সেটি নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন।
  3. ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন এবং তারপরে প্রোজেক্ট মুছে ফেলতে শাট ডাউন ক্লিক করুন।