Google Kubernetes ইঞ্জিনে Jib-এর সাথে কন্টেইনারযুক্ত একটি মাইক্রোনট অ্যাপ্লিকেশন স্থাপন করুন

1. ওভারভিউ

মাইক্রোনট সম্পর্কে

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

মাইক্রোনট প্রদান করে:

  • দ্রুত স্টার্টআপ সময় এবং কম মেমরি খরচ — প্রতিফলন-ভিত্তিক আইওসি ফ্রেমওয়ার্কগুলি আপনার কোডের প্রতিটি একক ক্ষেত্র, পদ্ধতি এবং কনস্ট্রাক্টরের জন্য প্রতিফলন ডেটা লোড এবং ক্যাশ করে, যেখানে মাইক্রোনটের সাথে, আপনার অ্যাপ্লিকেশন শুরুর সময় এবং মেমরি খরচ আপনার আকারের সাথে আবদ্ধ নয় কোডবেস
  • ঘোষণামূলক, প্রতিক্রিয়াশীল, কম্পাইল-টাইম HTTP ক্লায়েন্ট — ঘোষণামূলকভাবে প্রতিক্রিয়াশীল HTTP ক্লায়েন্ট তৈরি করুন, যা কম্পাইল-টাইমে প্রয়োগ করা হয়, মেমরি খরচ হ্রাস করে।
  • নেটটিতে নির্মিত নন-ব্লকিং HTTP সার্ভার — একটি মসৃণ শেখার বক্ররেখা সহ, মাইক্রোনটের HTTP সার্ভার HTTP ক্লায়েন্টদের দ্বারা ব্যবহার করা যেতে পারে এমন APIগুলিকে প্রকাশ করা যতটা সম্ভব সহজ করে তোলে।
  • দ্রুত এবং সহজ পরীক্ষা — আপনার ইউনিট পরীক্ষায় সহজেই সার্ভার এবং ক্লায়েন্টদের স্পিন আপ করুন এবং তাৎক্ষণিকভাবে সেগুলি চালান।
  • দক্ষ কম্পাইল-টাইম নির্ভরতা ইনজেকশন এবং AOP — মাইক্রোনট একটি সাধারণ কম্পাইল-টাইম দিক-ভিত্তিক প্রোগ্রামিং API প্রদান করে যা প্রতিফলন ব্যবহার করে না।
  • সম্পূর্ণ প্রতিক্রিয়াশীল এবং নন-ব্লকিং অ্যাপ তৈরি করুন — মাইক্রোনট RxJava এবং রিঅ্যাক্টর সহ প্রতিক্রিয়াশীল স্ট্রীমগুলি প্রয়োগ করে এমন যে কোনও কাঠামোকে সমর্থন করে।

আরও তথ্যের জন্য, অনুগ্রহ করে মাইক্রোনট ওয়েবসাইট দেখুন।

কুবারনেটস সম্পর্কে

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

এই ল্যাবে, আপনি Kubernetes ইঞ্জিনে চলমান একটি সাধারণ Groovy-ভিত্তিক মাইক্রোনট মাইক্রোসার্ভিস স্থাপন করেন।

এই কোডল্যাবের লক্ষ্য হল আপনি আপনার মাইক্রোসার্ভিসকে কুবারনেটসে চলমান একটি প্রতিলিপিকৃত পরিষেবা হিসাবে চালান। আপনি আপনার মেশিনে তৈরি করা কোডটি নিন, এটিকে একটি ডকার কন্টেইনার ইমেজে পরিণত করুন এবং তারপরে কুবারনেটস ইঞ্জিনে সেই চিত্রটি চালান।

এই কোডল্যাবে খেলার বিভিন্ন অংশগুলির একটি চিত্র এখানে আপনাকে বুঝতে সাহায্য করার জন্য কিভাবে টুকরোগুলি একসাথে ফিট করে। আপনি কোডল্যাবের মাধ্যমে অগ্রগতির সাথে সাথে এটিকে একটি রেফারেন্স হিসাবে ব্যবহার করুন; আপনি যখন শেষ করবেন ততক্ষণে এটি সমস্ত বোঝা উচিত (তবে আপাতত এটিকে উপেক্ষা করুন)।

কুবারনেটস কোডল্যাব ডায়াগ্রাম 1 (2).png

এই কোডল্যাবের উদ্দেশ্যে, একটি পরিচালিত পরিবেশ ব্যবহার করে যেমন Kubernetes Engine (কম্পিউট ইঞ্জিনে চলমান Kubernetes-এর একটি Google-হোস্টেড সংস্করণ) আপনাকে অন্তর্নিহিত অবকাঠামো সেট আপ করার পরিবর্তে Kubernetes-এর অভিজ্ঞতার উপর বেশি মনোযোগ দিতে দেয়।

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

জিব সম্পর্কে

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

জিবের লক্ষ্য হল:

  • দ্রুত — আপনার পরিবর্তনগুলি দ্রুত স্থাপন করুন। Jib আপনার অ্যাপ্লিকেশনকে একাধিক স্তরে বিভক্ত করে, ক্লাস থেকে নির্ভরতা বিভক্ত করে। এখন আপনাকে আপনার সম্পূর্ণ জাভা অ্যাপ্লিকেশন পুনর্নির্মাণের জন্য ডকারের জন্য অপেক্ষা করতে হবে না - কেবল পরিবর্তিত স্তরগুলি স্থাপন করুন।
  • পুনরুত্পাদনযোগ্য — একই বিষয়বস্তু দিয়ে আপনার কন্টেইনার ইমেজ পুনর্নির্মাণ সবসময় একই ইমেজ তৈরি করে। আবার কখনও অপ্রয়োজনীয় আপডেট ট্রিগার করবেন না।
  • ডেমনলেস - আপনার CLI নির্ভরতা হ্রাস করুন। Maven বা Gradle থেকে আপনার ডকার ইমেজ তৈরি করুন এবং আপনার পছন্দের যেকোনো রেজিস্ট্রিতে ঠেলে দিন। আর ডকারফাইল লিখতে হবে না এবং ডকার বিল্ড/পুশ কলিং করতে হবে না।

আপনি Github প্রকল্প পৃষ্ঠাতে Jib সম্পর্কে আরও তথ্য পেতে পারেন।

এই টিউটোরিয়াল সম্পর্কে

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

নমুনাটি মাইক্রোনট ফ্রেমওয়ার্ক এবং অ্যাপাচি গ্রোভি প্রোগ্রামিং ভাষা ব্যবহার করে একটি সাধারণ হ্যালো ওয়ার্ল্ড পরিষেবা।

আপনি কি শিখবেন

  • জিব ব্যবহার করে ডকার ধারক হিসাবে একটি সাধারণ জাভা অ্যাপ্লিকেশন কীভাবে প্যাকেজ করবেন
  • কুবারনেটস ইঞ্জিনে কীভাবে আপনার কুবারনেটস ক্লাস্টার তৈরি করবেন।
  • কুবারনেটস ইঞ্জিনে কুবারনেটসে আপনার মাইক্রোনট পরিষেবা কীভাবে স্থাপন করবেন
  • কিভাবে আপনার পরিষেবা স্কেল আপ এবং একটি আপগ্রেড রোল আউট.
  • কুবারনেটস গ্রাফিকাল ড্যাশবোর্ড কীভাবে অ্যাক্সেস করবেন।

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

  • একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্প
  • একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
  • স্ট্যান্ডার্ড লিনাক্স টেক্সট এডিটর যেমন Vim, EMACs বা Nano এর সাথে পরিচিতি

আপনি কিভাবে এই টিউটোরিয়াল ব্যবহার করবেন?

শুধুমাত্র মাধ্যমে এটি পড়ুন এটি পড়ুন এবং ব্যায়াম সম্পূর্ণ করুন

এইচটিএমএল/সিএসএস ওয়েব অ্যাপ তৈরি করার ক্ষেত্রে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

নবজাতক মধ্যবর্তী দক্ষ

আপনি Google ক্লাউড প্ল্যাটফর্ম পরিষেবাগুলি ব্যবহার করার বিষয়ে আপনার অভিজ্ঞতাকে কীভাবে মূল্যায়ন করবেন?

নবজাতক মধ্যবর্তী দক্ষ

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

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

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCemXuD0pdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCemXuD0pdYncY5Gv3GU Zw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLpGtQd5Q55

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3oK3o67gCu67jCGUJCGUX67j

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

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

এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। "ক্লিনিং আপ" বিভাগে যে কোনও নির্দেশাবলী অনুসরণ করতে ভুলবেন না যা আপনাকে কীভাবে সংস্থানগুলি বন্ধ করতে হবে তা পরামর্শ দেয় যাতে আপনি এই টিউটোরিয়ালের বাইরে বিলিং করতে না পারেন৷ Google ক্লাউডের নতুন ব্যবহারকারীরা $300USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

3. মাইক্রোনট নমুনা সোর্স কোড পান

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

$ git clone https://github.com/GoogleContainerTools/jib.git
$ cd jib/examples/micronaut/

4. কোড একটি দ্রুত চেহারা

আমাদের মাইক্রোনট সাধারণ পরিষেবাটি একটি নিয়ামক দিয়ে তৈরি যা কুখ্যাত হ্যালো ওয়ার্ল্ড বার্তাকে আউটপুট করে:

@Controller("/hello")
class HelloController {
    @Get("/")
    String index() {
        "Hello World"
    }
}

HelloController কন্ট্রোলার /hello পাথের অধীনে অনুরোধের জবাব দিচ্ছে, এবং index() পদ্ধতি HTTP GET অনুরোধগুলি গ্রহণ করে।

আউটপুটে সঠিক বার্তা দেওয়া হয়েছে কিনা তা পরীক্ষা করার জন্য একটি স্পক পরীক্ষার ক্লাসও উপলব্ধ।

class HelloControllerSpec extends Specification {
    @Shared
    @AutoCleanup
    EmbeddedServer embeddedServer = ApplicationContext.run(EmbeddedServer)

    @Shared
    @AutoCleanup
    RxHttpClient client = embeddedServer.applicationContext.createBean(RxHttpClient, embeddedServer.getURL()) 

    void "test hello world response"() {
        when:
        HttpRequest request = HttpRequest.GET('/hello')
        String rsp  = client.toBlocking().retrieve(request)

        then:
        rsp == "Hello World"
    }
}

একটি সাধারণ ইউনিট পরীক্ষার চেয়েও, এই পরীক্ষাটি আসলে একই মাইক্রোনট সার্ভার স্ট্যাক চালায় ( নেটটি ফ্রেমওয়ার্কের উপর ভিত্তি করে) যা উত্পাদনে চালানো হয়। সুতরাং আপনার কোডের আচরণ আপনার পরীক্ষার মতো পণ্যের ক্ষেত্রেও একই হবে।

পরীক্ষা চালানোর জন্য, সবকিছু ঠিক আছে তা দেখতে আপনি নিম্নলিখিত কমান্ডটি চালাতে পারেন:

./gradlew test

5. স্থানীয়ভাবে অ্যাপ্লিকেশন চালান

আপনি নিম্নোক্ত Gradle কমান্ড দিয়ে সাধারণত মাইক্রোনট পরিষেবা শুরু করতে পারেন:

$ ./gradlew run

একবার অ্যাপ্লিকেশন শুরু হয়ে গেলে, আপনি সামান্য + আইকনের জন্য একটি অতিরিক্ত ক্লাউড শেল ইনস্ট্যান্স খুলতে পারেন এবং তারপরে কার্ল দিয়ে চেক করুন যে আপনি প্রত্যাশিত আউটপুট পেয়েছেন:

$ curl localhost:8080/hello

এবং আপনি একটি সাধারণ "হ্যালো ওয়ার্ল্ড" বার্তা দেখতে পাবেন।

6. জিবের সাথে ডকার কন্টেইনার হিসাবে অ্যাপ্লিকেশনটিকে প্যাকেজ করুন

এরপরে, কুবারনেটসে চালানোর জন্য আপনার অ্যাপ প্রস্তুত করুন। সেই উদ্দেশ্যে, আমরা আমাদের জন্য কঠোর পরিশ্রম করার জন্য জিবের সদ্ব্যবহার করব, কারণ আমাদের নিজেদের একটি Dockerfile স্পর্শ করতে হবে না!

আসুন আমাদের কন্টেইনার তৈরি করতে কমান্ডটি চালাই:

$ ./gradlew jibDockerBuild

এখানে আউটপুট আপনি দেখতে হবে:

Tagging image with generated image reference micronaut-jib:0.1. If you'd like to specify a different tag, you can set the jib.to.image parameter in your build.gradle, or use the --im
age=<MY IMAGE> commandline flag.

Containerizing application to Docker daemon as micronaut-jib:0.1...
warning: Base image 'gcr.io/distroless/java' does not use a specific image digest - build may not be reproducible
Getting base image gcr.io/distroless/java...
Building dependencies layer...
Building resources layer...
Building classes layer...
Finalizing...

Container entrypoint set to [java, -cp, /app/resources:/app/classes:/app/libs/*, example.micronaut.Application]
Loading to Docker daemon...

Built image to Docker daemon as micronaut-jib:0.1

এখন যেহেতু আমাদের ছবিটি নির্মিত হয়েছে, আসুন ক্লাউড শেলের প্রথম ট্যাবে আমাদের ডকার ইমেজটি চালিয়ে আমাদের বন্ধুত্বপূর্ণ হ্যালো বার্তাটি দেখতে পাচ্ছি কিনা তা পরীক্ষা করে দেখি:

$ docker run -it -p 8080:8080 micronaut-jib:0.1
16:57:20.255 [main] INFO  i.m.context.env.DefaultEnvironment - Established active environments: [cloud, gcp]
16:57:23.203 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 2926ms. Server Running: http://97b7d76ccf3f:8080

আমাদের পরিষেবা চলছে, তাই আমরা এখন আমাদের দ্বিতীয় ক্লাউড শেল ট্যাবে আমাদের কার্ল কমান্ড চালু করতে পারি, এটি প্রত্যাশিতভাবে কাজ করছে কিনা তা দেখতে:

$ curl localhost:8080/hello
Hello World

আপনি ক্লাউড শেলে Ctrl+C টিপে কন্টেইনার বন্ধ করতে পারেন।

7. আমাদের কন্টেইনারাইজড পরিষেবাকে রেজিস্ট্রিতে পুশ করা

এখন যেহেতু ছবিটি উদ্দেশ্য অনুযায়ী কাজ করে আপনি এটিকে Google কন্টেইনার রেজিস্ট্রিতে ঠেলে দিতে পারেন, প্রতিটি Google ক্লাউড প্রকল্প থেকে (তবে Google ক্লাউড প্ল্যাটফর্মের বাইরে থেকেও) অ্যাক্সেসযোগ্য আপনার ডকার চিত্রগুলির জন্য একটি ব্যক্তিগত সংগ্রহস্থল৷

রেজিস্ট্রিতে পুশ করতে সক্ষম হওয়ার আগে, টুলস > কনটেইনার রেজিস্ট্রি- এ গিয়ে আমাদের প্রোজেক্টের জন্য কনটেইনার রেজিস্ট্রি সক্ষম হয়েছে কিনা তা নিশ্চিত করি। যদি এটি সক্ষম না হয়, তাহলে আপনি নিম্নলিখিত ডায়ালগটি দেখতে পাবেন, তারপর এটি সক্ষম করতে দয়া করে " কনটেইনার রেজিস্ট্রি API সক্ষম করুন " এ ক্লিক করুন:

ac812e6260ac7dfb.png

রেজিস্ট্রি প্রস্তুত হয়ে গেলে, চিত্রটিকে রেজিস্ট্রিতে পুশ করতে, নিম্নলিখিত কমান্ডগুলি চালু করুন:

$ gcloud auth configure-docker
$ docker tag micronaut-jib:0.1 \
         gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.1
$ docker push gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.1

উপরের কমান্ডগুলি gcloud SDK কে কনফিগার করতে দেয় এবং ডকারকে আপনার কনটেইনার রেজিস্ট্রির উদাহরণে ছবিগুলিকে পুশ করতে, রেজিস্ট্রিতে তার অবস্থানে নির্দেশ করতে ছবিটিকে ট্যাগ করতে এবং তারপরে এটিকে রেজিস্ট্রিতে পুশ করতে দেয়৷

যদি সবকিছু ঠিকঠাক হয় এবং কিছুক্ষণ পরে আপনি কনসোলে তালিকাভুক্ত ধারক চিত্রটি দেখতে সক্ষম হবেন: সরঞ্জাম > কন্টেইনার রেজিস্ট্রি । এই মুহুর্তে আপনার কাছে এখন একটি প্রজেক্ট-ব্যাপী ডকার ইমেজ উপলব্ধ রয়েছে যা কুবারনেটস অ্যাক্সেস করতে এবং অর্কেস্ট্রেট করতে পারে যেমন আপনি কয়েক মিনিটের মধ্যে দেখতে পাবেন।

12224c4e42183b4e.png

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

ঠিক আছে, আপনি এখন আপনার Kubernetes ইঞ্জিন ক্লাস্টার তৈরি করতে প্রস্তুত কিন্তু তার আগে, ওয়েব কনসোলের Google Kubernetes ইঞ্জিন বিভাগে নেভিগেট করুন এবং সিস্টেমটি শুরু হওয়ার জন্য অপেক্ষা করুন (এটি মাত্র কয়েক সেকেন্ড লাগবে)।

20c0587c0108b8ba.png

একটি ক্লাস্টারে Google দ্বারা পরিচালিত একটি Kubernetes মাস্টার API সার্ভার এবং কর্মী নোডের একটি সেট থাকে। কর্মী নোডগুলি হল কম্পিউট ইঞ্জিন ভার্চুয়াল মেশিন। দুটি n1-standard-1 নোড সহ একটি ক্লাস্টার তৈরি করতে আপনার CloudShell সেশন থেকে gcloud CLI ব্যবহার করুন (এটি সম্পূর্ণ হতে কয়েক মিনিট সময় লাগবে):

$ gcloud container clusters create hello-cluster \
  --num-nodes 2 \
  --machine-type n1-standard-1 \
  --zone us-central1-c

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

Creating cluster hello-cluster in us-central1-c...done.
Created [https://container.googleapis.com/v1/projects/mn-gke-test/zones/us-central1-c/clusters/hello-cluster].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-central1-c/hello-cluster?project=mn-gke-test
kubeconfig entry generated for hello-cluster.
NAME           LOCATION       MASTER_VERSION  MASTER_IP       MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
hello-cluster  us-central1-c  1.9.7-gke.7     35.239.224.115  n1-standard-1  1.9.7-gke.7   2          RUNNING

আপনার এখন Google Kubernetes ইঞ্জিন দ্বারা চালিত একটি সম্পূর্ণ-কার্যকর কুবারনেটস ক্লাস্টার থাকা উচিত:

d9e1e314769753e7.png

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

9. Kubernetes-এ আপনার আবেদন স্থাপন করুন

একটি Kubernetes স্থাপনা আপনার তৈরি করা কন্টেইনার ইমেজ ব্যবহার করে আপনার অ্যাপ্লিকেশনের একাধিক দৃষ্টান্ত তৈরি, পরিচালনা এবং স্কেল করতে পারে। kubectl create deployment কমান্ড ব্যবহার করে Kubernetes-এ আপনার অ্যাপ্লিকেশনের একটি স্থাপনা তৈরি করা যাক:

$ kubectl create deployment hello-micronaut \
  --image=gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.1

আপনি এইমাত্র তৈরি করা স্থাপনা দেখতে, কেবল চালান:

$ kubectl get deployments
NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
hello-micronaut   1         1         1            1           5m

স্থাপনার দ্বারা তৈরি অ্যাপ্লিকেশন দৃষ্টান্তগুলি দেখতে, এই কমান্ডটি চালান:

$ kubectl get pods
NAME                               READY     STATUS    RESTARTS   AGE
hello-micronaut-5647fb98c5-lh5h7   1/1       Running   0          5m

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

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

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

ক্লাউড শেল থেকে আপনি kubectl expose কমান্ড --type=LoadBalancer ফ্ল্যাগের সাথে মিলিত হয়ে পডটিকে সর্বজনীন ইন্টারনেটে প্রকাশ করতে পারেন। এই পতাকা একটি বাহ্যিকভাবে অ্যাক্সেসযোগ্য আইপি তৈরির জন্য প্রয়োজন:

$ kubectl expose deployment hello-micronaut --type=LoadBalancer --port=8080

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

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

পরিষেবাটির সর্বজনীনভাবে অ্যাক্সেসযোগ্য IP ঠিকানা খুঁজে পেতে, কেবলমাত্র kubectl সমস্ত ক্লাস্টার পরিষেবাগুলি তালিকাভুক্ত করার জন্য অনুরোধ করুন:

$ kubectl get services
NAME              TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
hello-micronaut   LoadBalancer   10.39.243.251   aaa.bbb.ccc.ddd 8080:30354/TCP   1m
kubernetes        ClusterIP      10.39.240.1     <none>          443/TCP          31m

মনে রাখবেন আপনার পরিষেবার জন্য তালিকাভুক্ত 2টি আইপি ঠিকানা রয়েছে, উভয়ই পরিবেশনকারী পোর্ট 8080 । একটি হল অভ্যন্তরীণ আইপি যা শুধুমাত্র আপনার ক্লাউড ভার্চুয়াল নেটওয়ার্কের ভিতরে দৃশ্যমান; অন্যটি হল এক্সটার্নাল লোড-ব্যালেন্সড আইপি। এই উদাহরণে, বাহ্যিক IP ঠিকানা হল aaa.bbb.ccc.ddd

আপনি এখন এই ঠিকানায় আপনার ব্রাউজারকে নির্দেশ করে পরিষেবাতে পৌঁছাতে সক্ষম হবেন: http://<EXTERNAL_IP> :8080 /hello

11. আপনার পরিষেবা স্কেল আপ

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

$ kubectl scale deployment hello-micronaut --replicas=3
deployment.extensions "hello-micronaut" scaled

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

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

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

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

প্রথমত, এর অ্যাপ্লিকেশন পরিবর্তন করা যাক. ক্লাউড শেল থেকে কোড এডিটর খুলুন।

5aee8f3d1e003571.png

/jib/examples/micronaut/src/main/groovy/example/micronaut/HelloController.groovy এ নেভিগেট করুন এবং প্রতিক্রিয়ার মান আপডেট করুন:

@Controller("/hello")
class HelloController {
    @Get("/")
    String index() {
        "Hello Kubernetes World"
    }
}

/jib/examples/micronaut/build.gradle এ, আমরা এই লাইনটি আপডেট করে আমাদের চিত্রের সংস্করণ 0.1 থেকে 0.2 এ আপগ্রেড করব:

version '0.2'

তারপরে সর্বশেষ পরিবর্তনগুলির সাথে অ্যাপ্লিকেশনটিকে পুনর্নির্মাণ এবং প্যাকেজ করুন:

$ ./gradlew jibDockerBuild

এবং ধারক চিত্র রেজিস্ট্রিতে চিত্রটিকে ট্যাগ করুন এবং পুশ করুন:

$ docker tag micronaut-jib:0.2 \
         gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.2
$ docker push gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.2

আপনি এখন Kubernetes-এর জন্য আপনার রেপ্লিকেশন কন্ট্রোলারটিকে অ্যাপ্লিকেশনের নতুন সংস্করণে মসৃণভাবে আপডেট করার জন্য প্রস্তুত। আপনার চলমান কন্টেইনারের জন্য ইমেজ লেবেল পরিবর্তন করতে, আপনাকে বিদ্যমান hello-micronaut deployment সম্পাদনা করতে হবে এবং চিত্রটিকে gcr.io/PROJECT_ID/micronaut-jib:0.1 থেকে gcr.io/PROJECT_ID/micronaut-jib:0.2 এ পরিবর্তন করতে হবে। .

আপনি কুবারনেটসকে আপনার অ্যাপ্লিকেশনের নতুন সংস্করণকে পুরো ক্লাস্টার জুড়ে এক সময়ে রোলিং আপডেটের সাথে স্থাপন করতে বলার জন্য kubectl set image কমান্ড ব্যবহার করতে পারেন:

$ kubectl set image deployment/hello-micronaut \
          micronaut-jib=gcr.io/$GOOGLE_CLOUD_PROJECT/micronaut-jib:0.2

deployment.apps "hello-micronaut" image updated

এটি নতুন প্রতিক্রিয়া ফিরিয়ে দিচ্ছে তা দেখতে আবার http://EXTERNAL_IP:8080 চেক করুন৷

13. পিছনে রোল

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

$ kubectl rollout undo deployment/hello-micronaut

আপনি যদি পরিষেবাটির আউটপুট দেখে থাকেন তবে আমরা আমাদের প্রাথমিক "হ্যালো ওয়ার্ল্ড" বার্তায় ফিরে আসব।

14. সারাংশ

এই ধাপে, আপনি একটি সাধারণ Apache Groovy-ভিত্তিক মাইক্রোনট হ্যালো ওয়ার্ল্ড পরিষেবা সেট আপ করেছেন এবং এটি সরাসরি ক্লাউড শেল থেকে চালান, এটিকে জিবের সাথে একটি ধারক হিসাবে প্যাকেজ করে এবং এটিকে Google Kubernetes ইঞ্জিনে স্থাপন করেন৷

15. অভিনন্দন!

আপনি Google Kubernetes ইঞ্জিনে Kubernetes-এ একটি নতুন Apache Groovy / Micronaut ওয়েব-ভিত্তিক মাইক্রোসার্ভিস কীভাবে তৈরি এবং স্থাপন করতে হয় তা শিখেছেন।

আরও জানুন

  • জিব ডকুমেন্টেশন এবং নমুনা: https://github.com/GoogleContainerTools/jib/
  • মাইক্রোনট ওয়েব সাইট: http://micronaut.io/
  • Google ক্লাউড প্ল্যাটফর্মে জাভা: https://cloud.google.com/java/
  • জাভা উদাহরণের জন্য: https://cloud.google.com/java/samples
  • Kubernetes-এর একটি দীর্ঘ এবং আরও সম্পূর্ণ টিউটোরিয়ালের জন্য, bit.ly/k8s-lab দেখুন যেখানে এটি আপনাকে একটি ফুল-স্ট্যাক অ্যাপ্লিকেশন স্থাপনের মাধ্যমে নিয়ে যাবে।

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন 2.0 জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।