Google Kubernetes ইঞ্জিনে Kubernetes-এ একটি স্প্রিং বুট জাভা অ্যাপ স্থাপন করুন

Google Kubernetes ইঞ্জিনে Kubernetes-এ একটি স্প্রিং বুট জাভা অ্যাপ স্থাপন করুন

এই কোডল্যাব সম্পর্কে

subjectএপ্রি ২২, ২০২০-এ শেষবার আপডেট করা হয়েছে
account_circleএকজন Googler-এর লেখা

1. তুমি শুরু করার আগে

Kubernetes হল একটি ওপেন সোর্স প্রজেক্ট, যা ল্যাপটপ থেকে শুরু করে উচ্চ-উপলভ্যতা মাল্টি-নোড ক্লাস্টার, পাবলিক ক্লাউড থেকে অন-প্রিমিস ডিপ্লোয়মেন্ট এবং ভার্চুয়াল মেশিন (VM) উদাহরণ থেকে বেয়ার মেটাল পর্যন্ত বিভিন্ন পরিবেশে চলতে পারে।

এই কোডল্যাবে, আপনি একটি সাধারণ স্প্রিং বুট জাভা ওয়েব অ্যাপ GKE-তে Kubernetes- এ স্থাপন করবেন, যার লক্ষ্য হল আপনার ওয়েব অ্যাপটিকে Kubernetes-এ একটি প্রতিলিপিকৃত অ্যাপ হিসেবে চালানো। আপনি আপনার মেশিনে বিকাশ করা কোডটি নেবেন, এটিকে একটি ডকার কন্টেইনার ইমেজে পরিণত করবেন এবং GKE-তে ছবিটি চালান।

আপনি অন্তর্নিহিত অবকাঠামো সেট আপ করার পরিবর্তে কুবারনেটের অভিজ্ঞতার উপর আরও বেশি ফোকাস করার অনুমতি দিতে আপনি Google ক্লাউডে একটি সম্পূর্ণরূপে পরিচালিত Kubernetes পরিষেবা GKE ব্যবহার করবেন।

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

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

পূর্বশর্ত

  • জাভা প্রোগ্রামিং ভাষা এবং সরঞ্জামগুলির সাথে পরিচিতি
  • স্ট্যান্ডার্ড লিনাক্স টেক্সট এডিটর, যেমন Vim, Emacs এবং ন্যানো সম্পর্কে জ্ঞান

আপনি কি করবেন

  • ডকার কন্টেইনার হিসাবে একটি সাধারণ জাভা অ্যাপ প্যাকেজ করুন।
  • GKE-তে আপনার Kubernetes ক্লাস্টার তৈরি করুন।
  • আপনার জাভা অ্যাপটি GKE-তে Kubernetes-এ স্থাপন করুন।
  • আপনার পরিষেবা স্কেল করুন এবং একটি আপগ্রেড রোল আউট করুন৷
  • অ্যাক্সেস ড্যাশবোর্ড, একটি ওয়েব-ভিত্তিক Kubernetes ব্যবহারকারী ইন্টারফেস।

আপনি কি প্রয়োজন হবে

  • একটি Google ক্লাউড প্রকল্প
  • একটি ব্রাউজার, যেমন গুগল ক্রোম

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ (যদি আপনার ইতিমধ্যেই একটি Gmail বা G Suite অ্যাকাউন্ট না থাকে তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)

প্রজেক্ট আইডিটি মনে রাখবেন, সমস্ত Google ক্লাউড প্রকল্প জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এটি পরে এই কোডল্যাবে PROJECT_ID হিসাবে উল্লেখ করা হবে।

  1. এর পরে, Google ক্লাউড সংস্থানগুলি ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে৷

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

Google ক্লাউডের নতুন ব্যবহারকারীরা $300 বিনামূল্যের ট্রায়ালের জন্য যোগ্য৷

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন .

আপনি যদি আগে কখনও ক্লাউড শেল শুরু না করে থাকেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রীন (ভাঁজের নীচে) উপস্থাপন করা হবে যা বর্ণনা করে। যদি এটি হয়, তবে চালিয়ে যান ক্লিক করুন (এবং আপনি এটি আর কখনও দেখতে পাবেন না)। এককালীন স্ক্রীনটি দেখতে কেমন তা এখানে রয়েছে:

ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷

এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, শুধুমাত্র একটি ব্রাউজার বা আপনার Chromebook দিয়ে করা যেতে পারে।

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

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি এটি না হয়, আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

3. সোর্স কোড পান

ক্লাউড শেল চালু হওয়ার পরে, আপনি হোম ডিরেক্টরিতে উদাহরণ সোর্স কোড ক্লোন করতে কমান্ড লাইন ব্যবহার করতে পারেন।

$ git clone https://github.com/spring-guides/gs-spring-boot.git
$ cd gs-spring-boot/complete

4. স্থানীয়ভাবে অ্যাপটি চালান

  1. আপনি স্প্রিং বুট প্লাগইন দিয়ে সাধারণত স্প্রিং বুট অ্যাপ শুরু করতে পারেন।
$ ./mvnw -DskipTests spring-boot:run
  1. অ্যাপটি শুরু হওয়ার পরে, ওয়েব প্রিভিউতে ক্লিক করুন ক্লাউড শেল টুলবারে এবং পোর্ট 8080-এ পূর্বরূপ নির্বাচন করুন।

আপনার ব্রাউজারে একটি ট্যাব খোলে এবং আপনি যে সার্ভারটি শুরু করেছেন তার সাথে সংযোগ স্থাপন করে৷

5. জাভা অ্যাপটিকে ডকার কন্টেইনার হিসেবে প্যাকেজ করুন

এর পরে, আপনাকে কুবারনেটে চালানোর জন্য আপনার অ্যাপ প্রস্তুত করতে হবে। প্রথম ধাপ হল ধারক এবং এর বিষয়বস্তু সংজ্ঞায়িত করা।

  1. অ্যাপের জন্য মোতায়েনযোগ্য JAR তৈরি করুন।
$ ./mvnw -DskipTests package
  1. আপনি যে কন্টেইনার ইমেজটি তৈরি করবেন তা সঞ্চয় করতে কন্টেইনার রেজিস্ট্রি সক্ষম করুন।
$ gcloud services enable containerregistry.googleapis.com
  1. কন্টেইনার ইমেজ তৈরি করতে জিব ব্যবহার করুন এবং কনটেইনার রেজিস্ট্রিতে এটি পুশ করুন।
$ ./mvnw -DskipTests com.google.cloud.tools:jib-maven-plugin:build \
  -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/hello-java:v1
  1. যদি সবকিছু ঠিকঠাক হয়, তাহলে আপনি কনটেইনার রেজিস্ট্রি > চিত্রগুলিতে নেভিগেট করে কনসোলে তালিকাভুক্ত ধারক চিত্রটি দেখতে সক্ষম হবেন। আপনার কাছে এখন একটি প্রজেক্ট-ওয়াইড ডকার ইমেজ উপলব্ধ রয়েছে, যা কুবারনেটস অ্যাক্সেস করতে এবং অর্কেস্ট্রেট করতে পারে যেমন আপনি কয়েক মিনিটের মধ্যে দেখতে পাবেন।
  1. এটি সম্পূর্ণ হওয়ার পরে (সবকিছু ডাউনলোড করতে এবং বের করতে কিছু সময় লাগবে), আপনি স্থানীয়ভাবে নিম্নলিখিত কমান্ডের সাহায্যে ছবিটি পরীক্ষা করতে পারেন, যা আপনার নতুন তৈরি কন্টেইনার ইমেজ থেকে পোর্ট 8080-এ ডেমন হিসাবে একটি ডকার কন্টেইনার চালাবে:
$ docker run -ti --rm -p 8080:8080 \
  gcr.io/$GOOGLE_CLOUD_PROJECT/hello-java:v1
  1. আবার, ক্লাউড শেলের ওয়েব প্রিভিউ বৈশিষ্ট্যের সুবিধা নিন।

  1. আপনি একটি নতুন ট্যাবে ডিফল্ট পৃষ্ঠা দেখতে হবে. অ্যাপটি স্থানীয়ভাবে একটি ডকার কন্টেইনারে চলছে তা যাচাই করার পরে, আপনি Control+C টিপে চলমান কন্টেইনারটি বন্ধ করতে পারেন।

6. আপনার ক্লাস্টার তৈরি করুন

আপনি আপনার GKE ক্লাস্টার তৈরি করতে প্রস্তুত৷ একটি ক্লাস্টারে Google দ্বারা পরিচালিত একটি Kubernetes API সার্ভার এবং কর্মী নোডের একটি সেট থাকে। কর্মী নোডগুলি হল কম্পিউট ইঞ্জিন ভিএম।

  1. প্রথমে, নিশ্চিত করুন যে সম্পর্কিত API বৈশিষ্ট্যগুলি সক্ষম করা আছে।
$ gcloud services enable compute.googleapis.com container.googleapis.com
Operation "operations/..." finished successfully
  1. দুটি n1-standard-1 নোড সহ একটি ক্লাস্টার তৈরি করুন (এটি সম্পূর্ণ হতে কয়েক মিনিট সময় লাগবে)।
$ gcloud container clusters create hello-java-cluster \
  --num-nodes 2 \
  --machine-type n1-standard-1 \
  --zone us-central1-c

শেষ পর্যন্ত, আপনি ক্লাস্টার তৈরি দেখতে হবে.

Creating cluster hello-java-cluster...done.
Created [https://container.googleapis.com/v1/projects/...].
kubeconfig entry generated for hello-dotnet-cluster.
NAME                  ZONE            MASTER_VERSION  
hello-java-cluster  us-central1-c  ...

আপনার এখন GKE দ্বারা চালিত একটি সম্পূর্ণরূপে কার্যকরী Kubernetes ক্লাস্টার থাকা উচিত।

এখন আপনার কন্টেইনারাইজড অ্যাপটিকে কুবারনেটস ক্লাস্টারে স্থাপন করার সময়! এখন থেকে, আপনি kubectl কমান্ড লাইন ব্যবহার করবেন (ইতিমধ্যে আপনার ক্লাউড শেল পরিবেশে সেট আপ)। বাকি কোডল্যাবের জন্য Kubernetes ক্লায়েন্ট এবং সার্ভার সংস্করণ 1.2 বা উচ্চতর হতে হবে। kubectl version আপনাকে কমান্ডের বর্তমান সংস্করণ দেখাবে।

7. Kubernetes-এ আপনার অ্যাপ স্থাপন করুন

  1. একটি Kubernetes স্থাপনা আপনার তৈরি করা কন্টেইনার ইমেজ ব্যবহার করে আপনার অ্যাপের একাধিক দৃষ্টান্ত তৈরি, পরিচালনা এবং স্কেল করতে পারে। kubectl run কমান্ড ব্যবহার করে কুবারনেটসে আপনার অ্যাপের একটি উদাহরণ স্থাপন করুন।
$ kubectl create deployment hello-java \
  --image=gcr.io/$GOOGLE_CLOUD_PROJECT/hello-java:v1
  1. আপনি যে স্থাপনাটি তৈরি করেছেন তা দেখতে, কেবল নিম্নলিখিত কমান্ডটি চালান:
$ kubectl get deployments
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-java   1         1         1            1           37s
  1. স্থাপনার দ্বারা তৈরি অ্যাপের উদাহরণগুলি দেখতে, নিম্নলিখিত কমান্ডটি চালান:
$ kubectl get pods
NAME                         READY     STATUS    RESTARTS   AGE
hello-java-714049816-ztzrb   1/1       Running   0          57s

এই মুহুর্তে, আপনার ধারকটি কুবারনেটসের নিয়ন্ত্রণে চলমান থাকা উচিত, তবে আপনাকে এখনও এটিকে বাইরের বিশ্বের কাছে অ্যাক্সেসযোগ্য করতে হবে।

8. বহিরাগত ট্র্যাফিকের অনুমতি দিন

ডিফল্টরূপে, পড শুধুমাত্র ক্লাস্টারের মধ্যে তার অভ্যন্তরীণ আইপি দ্বারা অ্যাক্সেসযোগ্য। কুবারনেটস ভার্চুয়াল নেটওয়ার্কের বাইরে থেকে hello-java কন্টেইনার অ্যাক্সেসযোগ্য করার জন্য, আপনাকে কুবারনেটস পরিষেবা হিসাবে পডকে প্রকাশ করতে হবে।

  1. ক্লাউড শেল-এ, আপনি kubectl expose কমান্ড --type=LoadBalancer ফ্ল্যাগের সাথে মিলিত হয়ে পডটিকে সর্বজনীন ইন্টারনেটে প্রকাশ করতে পারেন। একটি বাহ্যিকভাবে অ্যাক্সেসযোগ্য আইপি তৈরির জন্য পতাকা প্রয়োজন।
$ kubectl create service loadbalancer hello-java --tcp=8080:8080

কমান্ডে ব্যবহৃত পতাকাটি নির্দিষ্ট করে যে আপনি অন্তর্নিহিত অবকাঠামো দ্বারা প্রদত্ত লোড ব্যালেন্সার ব্যবহার করবেন। নোট করুন যে আপনি সরাসরি স্থাপনা প্রকাশ করেন, পড নয়। এটি ফলস্বরূপ পরিষেবাটি স্থাপনার দ্বারা পরিচালিত সমস্ত পড জুড়ে ব্যালেন্স ট্র্যাফিক লোড করবে (এই ক্ষেত্রে, শুধুমাত্র একটি পড, তবে আপনি পরে আরও প্রতিলিপি যোগ করবেন)।

কুবারনেটস মাস্টার লোড ব্যালেন্সার এবং সংশ্লিষ্ট কম্পিউট ইঞ্জিন ফরওয়ার্ডিং নিয়ম, টার্গেট পুল এবং ফায়ারওয়াল নিয়ম তৈরি করে যাতে Google ক্লাউডের বাইরে থেকে পরিষেবাটি সম্পূর্ণরূপে অ্যাক্সেসযোগ্য হয়৷

  1. পরিষেবাটির সর্বজনীনভাবে অ্যাক্সেসযোগ্য IP ঠিকানা খুঁজে পেতে, কেবলমাত্র সমস্ত ক্লাস্টার পরিষেবাগুলি তালিকাভুক্ত করার জন্য kubectl কে অনুরোধ করুন৷
$ kubectl get services
NAME         CLUSTER-IP     EXTERNAL-IP      PORT(S)    AGE
Hello-java   10.3.253.62    aaa.bbb.ccc.ddd  8080/TCP    1m
kubernetes   10.3.240.1     <none>           443/TCP    5m
  1. লক্ষ্য করুন যে আপনার পরিষেবার জন্য তালিকাভুক্ত দুটি আইপি ঠিকানা রয়েছে, উভয়ই পরিবেশনকারী পোর্ট 8080। একটি হল অভ্যন্তরীণ আইপি ঠিকানা যা শুধুমাত্র আপনার ভার্চুয়াল প্রাইভেট ক্লাউডের মধ্যে দৃশ্যমান। অন্যটি হল এক্সটার্নাল লোড-ব্যালেন্সড আইপি অ্যাড্রেস। উদাহরণে, বাহ্যিক IP ঠিকানা হল aaa.bbb.ccc.ddd । আপনি এখন আপনার ব্রাউজারটিকে http://<EXTERNAL_IP>:8080-এ নির্দেশ করে পরিষেবাটিতে পৌঁছাতে সক্ষম হবেন৷

9. আপনার সেবা স্কেল

Kubernetes দ্বারা অফার করা শক্তিশালী বৈশিষ্ট্যগুলির মধ্যে একটি হল আপনার অ্যাপ স্কেল করা কতটা সহজ। ধরুন আপনার অ্যাপের জন্য হঠাৎ করে আরও ক্ষমতার প্রয়োজন। আপনি কেবল আপনার অ্যাপের উদাহরণগুলির জন্য একটি নতুন সংখ্যক প্রতিলিপি পরিচালনা করতে প্রতিলিপি নিয়ন্ত্রককে বলতে পারেন।

$ kubectl scale deployment hello-java --replicas=3
deployment "hello-java" scaled

$ kubectl get deployment
NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-java   3         3         3            3           22m

ঘোষণামূলক পদ্ধতির লক্ষ্য করুন। নতুন দৃষ্টান্ত শুরু বা বন্ধ করার পরিবর্তে, আপনি সর্বদা কতগুলি দৃষ্টান্ত চালানো উচিত তা ঘোষণা করুন। Kubernetes reconciliation loops সহজভাবে নিশ্চিত করে যে বাস্তবতা আপনার অনুরোধের সাথে মিলে যায় এবং প্রয়োজনে ব্যবস্থা নেয়।

10. আপনার পরিষেবাতে একটি আপগ্রেড রোল আউট করুন

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

  1. লঞ্চ এডিটর ক্লিক করে কোড এডিটর খুলুন ক্লাউড শেল মেনুতে।
  2. src/main/java/hello/HelloController.java এ নেভিগেট করুন এবং প্রতিক্রিয়ার মান আপডেট করুন।
package hello;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {    
   
@RequestMapping("/")
   
public String index() {
       
return "Greetings from Google Kubernetes Engine!";
   
}
}
  1. কন্টেইনার ইমেজের একটি নতুন সংস্করণ তৈরি এবং পুশ করতে Jib ব্যবহার করুন।
$ ./mvnw -DskipTests package \
  com.google.cloud.tools:jib-maven-plugin:build \
  -Dimage=gcr.io/$GOOGLE_CLOUD_PROJECT/hello-java:v2

অ্যাপের নতুন সংস্করণে আপনার রেপ্লিকেশন কন্ট্রোলারকে মসৃণভাবে আপডেট করার জন্য আপনি Kubernetes-এর জন্য প্রস্তুত!

  1. আপনার চলমান কন্টেইনারের জন্য ইমেজ লেবেল পরিবর্তন করার জন্য, আপনাকে বিদ্যমান hello-java ডিপ্লয়মেন্ট এডিট করতে হবে এবং ইমেজটিকে gcr.io/PROJECT_ID/hello-java:v1 তে পরিবর্তন করতে gcr.io/PROJECT_ID/hello-java:v2 । .
  1. আপনি কুবারনেটসকে আপনার অ্যাপের নতুন সংস্করণটি পুরো ক্লাস্টার জুড়ে এক সময়ে রোলিং আপডেটের সাথে স্থাপন করতে বলার জন্য kubectl set image কমান্ড ব্যবহার করতে পারেন।
$ kubectl set image deployment/hello-java \
  hello-java=gcr.io/$GOOGLE_CLOUD_PROJECT/hello-java:v2

deployment "hello-java" image updated
  1. এটি নতুন প্রতিক্রিয়া ফিরিয়ে দিচ্ছে তা দেখতে আবার http://EXTERNAL_IP:8080 চেক করুন৷

11. রোল ব্যাক

উফ! আপনি অ্যাপের একটি নতুন সংস্করণের সাথে ভুল করেছেন? সম্ভবত নতুন সংস্করণে একটি ত্রুটি রয়েছে এবং আপনাকে দ্রুত এটি ফিরিয়ে আনতে হবে। Kubernetes এর সাহায্যে, আপনি সহজেই এটিকে আগের অবস্থায় ফিরিয়ে আনতে পারেন। নিম্নলিখিত কমান্ডটি চালিয়ে অ্যাপটি রোল ব্যাক করুন:

$ kubectl rollout undo deployment/hello-java

12. অভিনন্দন

আপনি GKE-তে Kubernetes-এ একটি নতুন জাভা-ভিত্তিক ওয়েব অ্যাপ তৈরি এবং স্থাপন করতে শিখেছেন।

আরও জানুন