গুগল কুবারনেটস ইঞ্জিন (GKE)-তে ADK এজেন্ট মোতায়েন করুন

1. ভূমিকা

সংক্ষিপ্ত বিবরণ

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

এই ল্যাবে, আপনি Google Agent Development Kit (ADK) দিয়ে তৈরি একটি মাল্টি-এজেন্ট সিস্টেম নেবেন এবং এটি Google Kubernetes Engine (GKE) এর একটি প্রোডাকশন-গ্রেড পরিবেশে স্থাপন করবেন।

চলচ্চিত্র ধারণা দলের এজেন্ট

এই ল্যাবে ব্যবহৃত নমুনা অ্যাপ্লিকেশনটি হল একটি "চলচ্চিত্র ধারণা দল" যা একাধিক সহযোগী এজেন্টদের সমন্বয়ে গঠিত: একজন গবেষক, একজন চিত্রনাট্যকার এবং একজন ফাইল লেখক। এই এজেন্টরা একসাথে কাজ করে ব্যবহারকারীদের চিন্তাভাবনা করতে এবং একটি ঐতিহাসিক ব্যক্তিত্ব সম্পর্কে একটি চলচ্চিত্রের পিচ রূপরেখা তৈরি করতে সহায়তা করে।

এজেন্ট প্রবাহের চিত্র

কেন GKE তে মোতায়েন করবেন?

আপনার এজেন্টকে উৎপাদন পরিবেশের চাহিদার জন্য প্রস্তুত করতে, আপনার স্কেলেবিলিটি, নিরাপত্তা এবং খরচ-দক্ষতার জন্য তৈরি একটি প্ল্যাটফর্মের প্রয়োজন। Google Kubernetes Engine (GKE) আপনার কন্টেইনারাইজড অ্যাপ্লিকেশন চালানোর জন্য এই শক্তিশালী এবং নমনীয় ভিত্তি প্রদান করে।

এটি আপনার উৎপাদন কাজের চাপের জন্য বেশ কিছু সুবিধা প্রদান করে:

  • স্বয়ংক্রিয় স্কেলিং এবং কর্মক্ষমতা : HorizontalPodAutoscaler (HPA) দিয়ে অপ্রত্যাশিত ট্র্যাফিক পরিচালনা করুন, যা লোডের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে এজেন্ট প্রতিলিপি যোগ করে বা অপসারণ করে। আরও বেশি চাহিদাপূর্ণ AI কাজের চাপের জন্য, আপনি GPU এবং TPU এর মতো হার্ডওয়্যার অ্যাক্সিলারেটর সংযুক্ত করতে পারেন।
  • সাশ্রয়ী রিসোর্স ব্যবস্থাপনা : GKE অটোপাইলট ব্যবহার করে খরচ অপ্টিমাইজ করুন, যা স্বয়ংক্রিয়ভাবে অন্তর্নিহিত অবকাঠামো পরিচালনা করে যাতে আপনি কেবলমাত্র আপনার অ্যাপ্লিকেশনের অনুরোধকৃত রিসোর্সের জন্য অর্থ প্রদান করতে পারেন।
  • সমন্বিত নিরাপত্তা এবং পর্যবেক্ষণযোগ্যতা : ওয়ার্কলোড আইডেন্টিটি ব্যবহার করে অন্যান্য গুগল ক্লাউড পরিষেবার সাথে নিরাপদে সংযোগ স্থাপন করুন, যা পরিষেবা অ্যাকাউন্ট কী পরিচালনা এবং সংরক্ষণের প্রয়োজন এড়ায়। কেন্দ্রীভূত পর্যবেক্ষণ এবং ডিবাগিংয়ের জন্য সমস্ত অ্যাপ্লিকেশন লগ স্বয়ংক্রিয়ভাবে ক্লাউড লগিংয়ে স্ট্রিম করা হয়।
  • নিয়ন্ত্রণ এবং বহনযোগ্যতা : ওপেন-সোর্স কুবারনেটসের সাথে ভেন্ডর লক-ইন এড়িয়ে চলুন। আপনার অ্যাপ্লিকেশনটি পোর্টেবল এবং যেকোনো কুবারনেটস ক্লাস্টারে, প্রাঙ্গনে বা অন্যান্য ক্লাউডে চলতে পারে।

তুমি কি শিখবে

এই ল্যাবে, আপনি নিম্নলিখিত কাজগুলি কীভাবে সম্পাদন করবেন তা শিখবেন:

  • একটি GKE অটোপাইলট ক্লাস্টার সরবরাহ করুন।
  • একটি অ্যাপ্লিকেশনকে একটি ডকারফাইল দিয়ে কন্টেইনারাইজ করুন এবং ছবিটিকে আর্টিফ্যাক্ট রেজিস্ট্রিতে ঠেলে দিন।
  • ওয়ার্কলোড আইডেন্টিটি ব্যবহার করে আপনার অ্যাপ্লিকেশনটিকে গুগল ক্লাউড এপিআই-এর সাথে নিরাপদে সংযুক্ত করুন।
  • একটি স্থাপনা এবং পরিষেবার জন্য Kubernetes ম্যানিফেস্ট লিখুন এবং প্রয়োগ করুন।
  • LoadBalancer ব্যবহার করে একটি অ্যাপ্লিকেশন ইন্টারনেটে প্রকাশ করুন।
  • একটি HorizontalPodAutoscaler (HPA) দিয়ে অটোস্কেলিং কনফিগার করুন।

2. প্রকল্প সেটআপ

গুগল অ্যাকাউন্ট

যদি আপনার ইতিমধ্যেই একটি ব্যক্তিগত Google অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি Google অ্যাকাউন্ট তৈরি করতে হবে।

কর্মক্ষেত্র বা স্কুল অ্যাকাউন্টের পরিবর্তে ব্যক্তিগত অ্যাকাউন্ট ব্যবহার করুন

গুগল ক্লাউড কনসোলে সাইন-ইন করুন

একটি ব্যক্তিগত গুগল অ্যাকাউন্ট ব্যবহার করে গুগল ক্লাউড কনসোলে সাইন-ইন করুন।

বিলিং সক্ষম করুন

একটি ব্যক্তিগত বিলিং অ্যাকাউন্ট সেট আপ করুন

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

একটি ব্যক্তিগত বিলিং অ্যাকাউন্ট সেট আপ করতে, ক্লাউড কনসোলে বিলিং সক্ষম করতে এখানে যান

কিছু নোট:

  • এই ল্যাবটি সম্পূর্ণ করতে ক্লাউড রিসোর্সে $1 USD এর কম খরচ হবে।
  • আরও চার্জ এড়াতে আপনি এই ল্যাবের শেষে রিসোর্স মুছে ফেলার ধাপগুলি অনুসরণ করতে পারেন।
  • নতুন ব্যবহারকারীরা $300 USD বিনামূল্যে ট্রায়ালের জন্য যোগ্য।

একটি প্রকল্প তৈরি করুন (ঐচ্ছিক)

যদি আপনার এই ল্যাবের জন্য ব্যবহার করতে চান এমন কোন বর্তমান প্রকল্প না থাকে, তাহলে এখানে একটি নতুন প্রকল্প তৈরি করুন

৩. ক্লাউড শেল এডিটর খুলুন

  1. সরাসরি ক্লাউড শেল এডিটরে যেতে এই লিঙ্কে ক্লিক করুন।
  2. আজই যদি যেকোনো সময় অনুমোদনের অনুরোধ করা হয়, তাহলে চালিয়ে যেতে অনুমোদন করুন- এ ক্লিক করুন। ক্লাউড শেল অনুমোদন করতে ক্লিক করুন
  3. যদি স্ক্রিনের নীচে টার্মিনালটি না দেখা যায়, তাহলে এটি খুলুন:
    • ভিউ ক্লিক করুন
    • টার্মিনাল ক্লিক করুন ক্লাউড শেল এডিটরে নতুন টার্মিনাল খুলুন
  4. টার্মিনালে, এই কমান্ড দিয়ে আপনার প্রকল্পটি সেট করুন:
    gcloud config set project [PROJECT_ID]
    
    • উদাহরণ:
      gcloud config set project lab-project-id-example
      
    • যদি আপনি আপনার প্রজেক্ট আইডি মনে রাখতে না পারেন, তাহলে আপনি আপনার সমস্ত প্রজেক্ট আইডি তালিকাভুক্ত করতে পারেন:
      gcloud projects list
      
      ক্লাউড শেল এডিটর টার্মিনালে প্রোজেক্ট আইডি সেট করুন
  5. আপনার এই বার্তাটি দেখা উচিত:
    Updated property [core/project].
    

৪. API গুলি সক্ষম করুন

GKE , Artifact Registry , Cloud Build , এবং Vertex AI ব্যবহার করার জন্য, আপনার Google Cloud Project-এ তাদের নিজ নিজ API গুলি সক্রিয় করতে হবে।

  • টার্মিনালে , API গুলি সক্রিয় করুন:
    gcloud services enable \
      container.googleapis.com \
      artifactregistry.googleapis.com \
      cloudbuild.googleapis.com \
      aiplatform.googleapis.com
    
    এটি শেষ হলে, আপনি নিম্নলিখিতটির মতো একটি আউটপুট দেখতে পাবেন:
    Operation "operations/acf.p2-176675280136-b03ab5e4-3483-4ebf-9655-43dc3b345c63" finished successfully.
    

API গুলির সাথে পরিচয় করিয়ে দেওয়া হচ্ছে

  • গুগল কুবারনেটস ইঞ্জিন এপিআই ( container.googleapis.com ) আপনাকে আপনার এজেন্ট চালানোর জন্য GKE ক্লাস্টার তৈরি এবং পরিচালনা করতে দেয়। গুগল অবকাঠামো ব্যবহার করে আপনার কন্টেইনারাইজড অ্যাপ্লিকেশনগুলি স্থাপন, পরিচালনা এবং স্কেল করার জন্য GKE একটি পরিচালিত পরিবেশ প্রদান করে।
  • আর্টিফ্যাক্ট রেজিস্ট্রি API ( artifactregistry.googleapis.com ) আপনার এজেন্টের কন্টেইনার ছবি সংরক্ষণের জন্য একটি নিরাপদ, ব্যক্তিগত সংগ্রহস্থল প্রদান করে। এটি কন্টেইনার রেজিস্ট্রির বিবর্তন এবং GKE এবং ক্লাউড বিল্ডের সাথে নির্বিঘ্নে সংহত হয়।
  • ক্লাউড বিল্ড API ( cloudbuild.googleapis.com ) আপনার ডকারফাইল থেকে ক্লাউডে আপনার কন্টেইনার ইমেজ তৈরি করতে gcloud builds submit কমান্ড দ্বারা ব্যবহৃত হয়। এটি একটি সার্ভারলেস CI/CD প্ল্যাটফর্ম যা Google ক্লাউড অবকাঠামোতে আপনার বিল্ডগুলি কার্যকর করে।
  • ভার্টেক্স এআই এপিআই ( aiplatform.googleapis.com ) আপনার মোতায়েন করা এজেন্টকে জেমিনি মডেলগুলির সাথে যোগাযোগ করে তার মূল কাজগুলি সম্পাদন করতে সক্ষম করে। এটি গুগল ক্লাউডের সমস্ত এআই পরিষেবার জন্য একীভূত এপিআই সরবরাহ করে।

৫. আপনার উন্নয়নের পরিবেশ প্রস্তুত করুন

ডিরেক্টরি কাঠামো তৈরি করুন

  1. টার্মিনালে , প্রজেক্ট ডিরেক্টরি এবং প্রয়োজনীয় সাবডিরেক্টরি তৈরি করুন:
    mkdir -p ~/adk_multiagent_system_gke/workflow_agents
    cd ~/adk_multiagent_system_gke
    
  2. টার্মিনালে , ক্লাউড শেল এডিটর এক্সপ্লোরারে ডিরেক্টরিটি খুলতে নিম্নলিখিত কমান্ডটি চালান।
    cloudshell open-workspace ~/adk_multiagent_systems
    
  3. বাম দিকের এক্সপ্লোরার প্যানেলটি রিফ্রেশ হবে। এখন আপনার তৈরি করা ডিরেক্টরিগুলি দেখতে পাবেন।
    বর্তমান ফাইল কাঠামোর স্ক্রিনশট
    নিম্নলিখিত ধাপগুলিতে ফাইল তৈরি করার সময়, আপনি দেখতে পাবেন যে ফাইলগুলি এই ডিরেক্টরিতে জমা হয়েছে।

স্টার্টার ফাইল তৈরি করুন

এখন আপনি অ্যাপ্লিকেশনটির জন্য প্রয়োজনীয় স্টার্টার ফাইল তৈরি করবেন।

  1. টার্মিনালে নিম্নলিখিতটি চালিয়ে callback_logging.py তৈরি করুন। এই ফাইলটি পর্যবেক্ষণের জন্য লগিং পরিচালনা করে।
    cat <<EOF > ~/adk_multiagent_systems/callback_logging.py
    """
    Provides helper functions for observability. Handles formatting and sending 
    agent queries, responses, and tool calls to Google Cloud Logging to aid 
    in monitoring and debugging.
    """
    import logging
    import google.cloud.logging
    
    from google.adk.agents.callback_context import CallbackContext
    from google.adk.models import LlmResponse, LlmRequest
    
    
    def log_query_to_model(callback_context: CallbackContext, llm_request: LlmRequest):
        cloud_logging_client = google.cloud.logging.Client()
        cloud_logging_client.setup_logging()
        if llm_request.contents and llm_request.contents[-1].role == 'user':
             if llm_request.contents[-1].parts and "text" in llm_request.contents[-1].parts:
                last_user_message = llm_request.contents[-1].parts[0].text
                logging.info(f"[query to {callback_context.agent_name}]: " + last_user_message)
    
    def log_model_response(callback_context: CallbackContext, llm_response: LlmResponse):
        cloud_logging_client = google.cloud.logging.Client()
        cloud_logging_client.setup_logging()
        if llm_response.content and llm_response.content.parts:
            for part in llm_response.content.parts:
                if part.text:
                    logging.info(f"[response from {callback_context.agent_name}]: " + part.text)
                elif part.function_call:
                    logging.info(f"[function call from {callback_context.agent_name}]: " + part.function_call.name)
    EOF
    
  2. টার্মিনালে নিম্নলিখিতটি চালিয়ে workflow_agents/__init__.py তৈরি করুন। এটি ডিরেক্টরিটিকে একটি পাইথন প্যাকেজ হিসাবে চিহ্নিত করে।
    cat <<EOF > ~/adk_multiagent_systems/workflow_agents/__init__.py
    """
    Marks the directory as a Python package and exposes the agent module, 
    allowing the ADK to discover and register the agents defined within.
    """
    from . import agent
    EOF
    
  3. টার্মিনালে নিম্নলিখিতটি চালিয়ে workflow_agents/agent.py তৈরি করুন। এই ফাইলটিতে আপনার মাল্টি-এজেন্ট টিমের মূল লজিক রয়েছে।
    cat <<EOF > ~/adk_multiagent_systems/workflow_agents/agent.py
    """
    Defines the core multi-agent workflow. Configures individual agents (Researcher, 
    Screenwriter, File Writer), assigns their specific tools, and orchestrates 
    their collaboration using the ADK's SequentialAgent pattern.
    """
    import os
    import logging
    import google.cloud.logging
    
    from callback_logging import log_query_to_model, log_model_response
    from dotenv import load_dotenv
    
    from google.adk import Agent
    from google.adk.agents import SequentialAgent, LoopAgent, ParallelAgent
    from google.adk.tools.tool_context import ToolContext
    from google.adk.tools.langchain_tool import LangchainTool  # import
    from google.genai import types
    
    from langchain_community.tools import WikipediaQueryRun
    from langchain_community.utilities import WikipediaAPIWrapper
    
    
    cloud_logging_client = google.cloud.logging.Client()
    cloud_logging_client.setup_logging()
    
    load_dotenv()
    
    model_name = os.getenv("MODEL")
    print(model_name)
    
    # Tools
    
    
    def append_to_state(
        tool_context: ToolContext, field: str, response: str
    ) -> dict[str, str]:
        """Append new output to an existing state key.
    
        Args:
            field (str): a field name to append to
            response (str): a string to append to the field
    
        Returns:
            dict[str, str]: {"status": "success"}
        """
        existing_state = tool_context.state.get(field, [])
        tool_context.state[field] = existing_state + [response]
        logging.info(f"[Added to {field}] {response}")
        return {"status": "success"}
    
    
    def write_file(
        tool_context: ToolContext,
        directory: str,
        filename: str,
        content: str
    ) -> dict[str, str]:
        target_path = os.path.join(directory, filename)
        os.makedirs(os.path.dirname(target_path), exist_ok=True)
        with open(target_path, "w") as f:
            f.write(content)
        return {"status": "success"}
    
    
    # Agents
    
    file_writer = Agent(
        name="file_writer",
        model=model_name,
        description="Creates marketing details and saves a pitch document.",
        instruction="""
        PLOT_OUTLINE:
        { PLOT_OUTLINE? }
    
        INSTRUCTIONS:
        - Create a marketable, contemporary movie title suggestion for the movie described in the PLOT_OUTLINE. If a title has been suggested in PLOT_OUTLINE, you can use it, or replace it with a better one.
        - Use your 'write_file' tool to create a new txt file with the following arguments:
            - for a filename, use the movie title
            - Write to the 'movie_pitches' directory.
            - For the 'content' to write, extract the following from the PLOT_OUTLINE:
                - A logline
                - Synopsis or plot outline
        """,
        generate_content_config=types.GenerateContentConfig(
            temperature=0,
        ),
        tools=[write_file],
    )
    
    screenwriter = Agent(
        name="screenwriter",
        model=model_name,
        description="As a screenwriter, write a logline and plot outline for a biopic about a historical character.",
        instruction="""
        INSTRUCTIONS:
        Your goal is to write a logline and three-act plot outline for an inspiring movie about a historical character(s) described by the PROMPT: { PROMPT? }
    
        - If there is CRITICAL_FEEDBACK, use those thoughts to improve upon the outline.
        - If there is RESEARCH provided, feel free to use details from it, but you are not required to use it all.
        - If there is a PLOT_OUTLINE, improve upon it.
        - Use the 'append_to_state' tool to write your logline and three-act plot outline to the field 'PLOT_OUTLINE'.
        - Summarize what you focused on in this pass.
    
        PLOT_OUTLINE:
        { PLOT_OUTLINE? }
    
        RESEARCH:
        { research? }
    
        CRITICAL_FEEDBACK:
        { CRITICAL_FEEDBACK? }
        """,
        generate_content_config=types.GenerateContentConfig(
            temperature=0,
        ),
        tools=[append_to_state],
    )
    
    researcher = Agent(
        name="researcher",
        model=model_name,
        description="Answer research questions using Wikipedia.",
        instruction="""
        PROMPT:
        { PROMPT? }
    
        PLOT_OUTLINE:
        { PLOT_OUTLINE? }
    
        CRITICAL_FEEDBACK:
        { CRITICAL_FEEDBACK? }
    
        INSTRUCTIONS:
        - If there is a CRITICAL_FEEDBACK, use your wikipedia tool to do research to solve those suggestions
        - If there is a PLOT_OUTLINE, use your wikipedia tool to do research to add more historical detail
        - If these are empty, use your Wikipedia tool to gather facts about the person in the PROMPT
        - Use the 'append_to_state' tool to add your research to the field 'research'.
        - Summarize what you have learned.
        Now, use your Wikipedia tool to do research.
        """,
        generate_content_config=types.GenerateContentConfig(
            temperature=0,
        ),
        tools=[
            LangchainTool(tool=WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())),
            append_to_state,
        ],
    )
    
    film_concept_team = SequentialAgent(
        name="film_concept_team",
        description="Write a film plot outline and save it as a text file.",
        sub_agents=[
            researcher,
            screenwriter,
            file_writer
        ],
    )
    
    root_agent = Agent(
        name="greeter",
        model=model_name,
        description="Guides the user in crafting a movie plot.",
        instruction="""
        - Let the user know you will help them write a pitch for a hit movie. Ask them for   
          a historical figure to create a movie about.
        - When they respond, use the 'append_to_state' tool to store the user's response
          in the 'PROMPT' state key and transfer to the 'film_concept_team' agent
        """,
        generate_content_config=types.GenerateContentConfig(
            temperature=0,
        ),
        tools=[append_to_state],
        sub_agents=[film_concept_team],
    )
    EOF
    

আপনার ফাইলের কাঠামো এখন এইরকম দেখাবে:
বর্তমান ফাইল কাঠামোর স্ক্রিনশট

ভার্চুয়াল পরিবেশ সেট আপ করুন

  • টার্মিনালে , uv ব্যবহার করে একটি ভার্চুয়াল পরিবেশ তৈরি এবং সক্রিয় করুন। এটি নিশ্চিত করে যে আপনার প্রকল্পের নির্ভরতাগুলি পাইথন সিস্টেমের সাথে বিরোধ না করে।
    uv venv
    source .venv/bin/activate
    

ইনস্টল করার প্রয়োজনীয়তা

  1. requirements.txt ফাইল তৈরি করতে টার্মিনালে নিম্নলিখিত কমান্ডটি চালান।
    cat <<EOF > ~/adk_multiagent_systems/requirements.txt
    # Lists all Python dependencies required to run the multi-agent system,
    # including the Google ADK, LangChain community tools, and web server libraries.
    langchain-community==0.3.20
    wikipedia==1.4.0
    google-adk==1.8.0
    fastapi==0.121.2
    uvicorn==0.38.0
    EOF
    
  2. টার্মিনালে আপনার ভার্চুয়াল পরিবেশে প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করুন।
    uv pip install -r requirements.txt
    

পরিবেশ ভেরিয়েবল সেট আপ করুন

  1. টার্মিনালে নিম্নলিখিত কমান্ডটি ব্যবহার করে .env ফাইলটি তৈরি করুন, যা স্বয়ংক্রিয়ভাবে আপনার প্রকল্প আইডি এবং অঞ্চল সন্নিবেশ করবে।
    cat <<EOF > ~/adk_multiagent_systems/.env
    GOOGLE_CLOUD_PROJECT="$(gcloud config get-value project)"
    GOOGLE_CLOUD_PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"
    GOOGLE_CLOUD_LOCATION="us-central1"
    GOOGLE_GENAI_USE_VERTEXAI=true
    MODEL="gemini-2.5-flash"
    EOF
    
  2. টার্মিনালে , আপনার শেল সেশনে ভেরিয়েবলগুলি লোড করুন।
    source .env
    

সংক্ষিপ্তসার

এই বিভাগে, আপনি আপনার প্রকল্পের জন্য স্থানীয় ভিত্তি স্থাপন করেছেন:

  • ডিরেক্টরি কাঠামো এবং প্রয়োজনীয় এজেন্ট স্টার্টার ফাইলগুলি তৈরি করা হয়েছে ( agent.py , callback_logging.py , requirements.txt )।
  • একটি ভার্চুয়াল পরিবেশ ( uv ) ব্যবহার করে আপনার নির্ভরতা বিচ্ছিন্ন করা হয়েছে।
  • আপনার প্রকল্প আইডি এবং অঞ্চলের মতো প্রকল্প-নির্দিষ্ট বিবরণ সংরক্ষণ করার জন্য পরিবেশ ভেরিয়েবল ( .env ) কনফিগার করা হয়েছে।

৬. এজেন্ট ফাইলটি অন্বেষণ করুন

আপনি ল্যাবের জন্য সোর্স কোড সেট আপ করেছেন, যার মধ্যে একটি পূর্বে লিখিত, মাল্টি-এজেন্ট সিস্টেমও রয়েছে। অ্যাপ্লিকেশনটি স্থাপন করার আগে, এজেন্টদের কীভাবে সংজ্ঞায়িত করা হয় তা বোঝা সহায়ক। মূল এজেন্ট লজিকটি workflow_agents/agent.py তে অবস্থিত।

  1. ক্লাউড শেল এডিটরে, বাম দিকের ফাইল এক্সপ্লোরার ব্যবহার করে adk_multiagent_system_gke/workflow_agents/ এ যান এবং agent.py ফাইলটি খুলুন।
  2. ফাইলটি একবার দেখে নাও। তোমাকে প্রতিটি লাইন বুঝতে হবে না, তবে উচ্চ-স্তরের কাঠামোটি লক্ষ্য করো:
    • পৃথক এজেন্ট: ফাইলটি তিনটি স্বতন্ত্র Agent অবজেক্টকে সংজ্ঞায়িত করে: researcher , screenwriter এবং file_writer । প্রতিটি এজেন্টকে একটি নির্দিষ্ট instruction (তার প্রম্পট) এবং ব্যবহারের জন্য অনুমোদিত tools একটি তালিকা দেওয়া হয় (যেমন WikipediaQueryRun টুল বা একটি কাস্টম write_file টুল)।
    • এজেন্ট গঠন: পৃথক এজেন্টদের একসাথে একটি SequentialAgent এ আবদ্ধ করা হয় যার নাম film_concept_team । এটি ADK-কে এই এজেন্টগুলিকে একের পর এক চালাতে বলে, একটি থেকে অন্যটিতে অবস্থা স্থানান্তর করে।
    • রুট এজেন্ট: একটি root_agent ("greeter" নামক) প্রাথমিক ব্যবহারকারীর ইন্টারঅ্যাকশন পরিচালনা করার জন্য সংজ্ঞায়িত করা হয়। যখন ব্যবহারকারী একটি প্রম্পট প্রদান করে, তখন এই এজেন্ট এটিকে অ্যাপ্লিকেশনের অবস্থায় সংরক্ষণ করে এবং তারপর film_concept_team ওয়ার্কফ্লোতে নিয়ন্ত্রণ স্থানান্তর করে।

এই কাঠামোটি বোঝার মাধ্যমে আপনি কী মোতায়েন করতে চলেছেন তা স্পষ্ট করতে সাহায্য করে: কেবল একটি একক এজেন্ট নয়, বরং ADK দ্বারা পরিচালিত বিশেষায়িত এজেন্টদের একটি সমন্বিত দল।

৭. একটি GKE অটোপাইলট ক্লাস্টার তৈরি করুন

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

  1. টার্মিনালে , adk-cluster নামে একটি নতুন GKE অটোপাইলট ক্লাস্টার তৈরি করুন।
    gcloud container clusters create-auto adk-cluster \
      --location=$GOOGLE_CLOUD_LOCATION \
      --project=$GOOGLE_CLOUD_PROJECT
    
    এই কমান্ডটি একটি সম্পূর্ণরূপে পরিচালিত Kubernetes ক্লাস্টার প্রদান করে। GKE অটোপাইলট স্বয়ংক্রিয়ভাবে নোড, স্কেলিং এবং নিরাপত্তা কনফিগার করে, ক্লাস্টারের ক্রিয়াকলাপগুলিকে সহজ করে তোলে।
  2. ক্লাস্টার তৈরি হয়ে গেলে, টার্মিনালে এটি চালিয়ে kubectl এর সাথে সংযোগ স্থাপনের জন্য কনফিগার করুন:
    gcloud container clusters get-credentials adk-cluster \
      --location=$GOOGLE_CLOUD_LOCATION \
      --project=$GOOGLE_CLOUD_PROJECT
    
    এই কমান্ডটি আপনার স্থানীয় পরিবেশকে আপনার নতুন GKE ক্লাস্টারের সাথে সংযুক্ত করে। এটি স্বয়ংক্রিয়ভাবে ক্লাস্টারের এন্ডপয়েন্ট এবং প্রমাণীকরণ শংসাপত্রগুলি সংগ্রহ করে এবং একটি স্থানীয় কনফিগারেশন ফাইল ( ~/.kube/config ) আপডেট করে। এই বিন্দু থেকে, kubectl কমান্ড-লাইন টুলটি প্রমাণীকরণ করা হবে এবং আপনার adk-cluster সাথে যোগাযোগ করার জন্য নির্দেশিত হবে।

সংক্ষিপ্তসার

এই বিভাগে, আপনি পরিকাঠামোর ব্যবস্থা করেছেন:

  • gcloud ব্যবহার করে একটি সম্পূর্ণরূপে পরিচালিত GKE অটোপাইলট ক্লাস্টার তৈরি করা হয়েছে।
  • নতুন ক্লাস্টারের সাথে প্রমাণীকরণ এবং যোগাযোগের জন্য আপনার স্থানীয় kubectl টুলটি কনফিগার করা হয়েছে।

৮. অ্যাপ্লিকেশনটি কন্টেইনারাইজ করুন এবং পুশ করুন

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

এই প্রক্রিয়াটিতে তিনটি মূল ধাপ রয়েছে:

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

স্থাপনের জন্য আবেদনপত্র প্রস্তুত করুন

আপনার ADK এজেন্টের অনুরোধ গ্রহণের জন্য একটি ওয়েব সার্ভারের প্রয়োজন। main.py ফাইলটি এই এন্ট্রি পয়েন্ট হিসেবে কাজ করবে, FastAPI ফ্রেমওয়ার্ক ব্যবহার করে HTTP-র মাধ্যমে আপনার এজেন্টের কার্যকারিতা প্রকাশ করবে।

  1. টার্মিনালে adk_multiagent_system_gke ডিরেক্টরির রুটে, main.py নামে একটি নতুন ফাইল তৈরি করুন।
    cat <<EOF > ~/adk_multiagent_systems/main.py
    """
    Serves as the application entry point. Initializes the FastAPI web server, 
    discovers the agents defined in the workflow directory, and exposes them 
    via HTTP endpoints for interaction.
    """
    
    import os
    
    import uvicorn
    from fastapi import FastAPI
    from google.adk.cli.fast_api import get_fast_api_app
    
    # Get the directory where main.py is located
    AGENT_DIR = os.path.dirname(os.path.abspath(__file__))
    
    # Configure the session service (e.g., SQLite for local storage)
    SESSION_SERVICE_URI = "sqlite:///./sessions.db"
    
    # Configure CORS to allow requests from various origins for this lab
    ALLOWED_ORIGINS = ["http://localhost", "http://localhost:8080", "*"]
    
    # Enable the ADK's built-in web interface
    SERVE_WEB_INTERFACE = True
    
    # Call the ADK function to discover agents and create the FastAPI app
    app: FastAPI = get_fast_api_app(
        agents_dir=AGENT_DIR,
        session_service_uri=SESSION_SERVICE_URI,
        allow_origins=ALLOWED_ORIGINS,
        web=SERVE_WEB_INTERFACE,
    )
    
    # You can add more FastAPI routes or configurations below if needed
    # Example:
    # @app.get("/hello")
    # async def read_root():
    #     return {"Hello": "World"}
    
    if __name__ == "__main__":
        # Get the port from the PORT environment variable provided by the container runtime
        # Run the Uvicorn server, listening on all available network interfaces (0.0.0.0)
        uvicorn.run(app, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
    EOF
    
    এই ফাইলটি ADK লাইব্রেরি ব্যবহার করে আপনার প্রোজেক্টের এজেন্টদের আবিষ্কার করে এবং একটি FastAPI ওয়েব অ্যাপ্লিকেশনে মোড়ানো হয়। uvicorn সার্ভার এই অ্যাপ্লিকেশনটি চালায়, হোস্ট 0.0.0.0 এ শোনার মাধ্যমে যেকোনো IP ঠিকানা থেকে এবং PORT পরিবেশ ভেরিয়েবল দ্বারা নির্দিষ্ট পোর্ট থেকে সংযোগ গ্রহণ করে, যা আমরা পরে আমাদের Kubernetes ম্যানিফেস্টে সেট করব।

    এই মুহুর্তে, ক্লাউড শেল এডিটরের এক্সপ্লোরার প্যানেলে আপনার ফাইলের কাঠামোটি এইরকম দেখাবে: বর্তমান ফাইল কাঠামোর স্ক্রিনশট

ডকারের সাহায্যে ADK এজেন্টকে কন্টেইনারাইজ করুন

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

  1. টার্মিনালে adk_multiagent_system_gke ডিরেক্টরির রুটে, Dockerfile নামে একটি নতুন ফাইল তৈরি করুন।
    cat <<'EOF' > ~/adk_multiagent_systems/Dockerfile
    # Defines the blueprint for the container image. Installs dependencies,
    # sets up a secure non-root user, and specifies the startup command to run the 
    # agent web server.
    
    # Use an official lightweight Python image as the base
    FROM python:3.13-slim
    
    # Set the working directory inside the container
    WORKDIR /app
    
    # Create a non-root user for security best practices
    RUN adduser --disabled-password --gecos "" myuser
    
    # Copy and install dependencies first to leverage Docker's layer caching
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    
    # Copy all application code into the container
    COPY . .
    
    # Create the directory where the agent will write files at runtime
    # The -p flag ensures the command doesn't fail if the directory already exists
    RUN mkdir -p movie_pitches
    
    # Change ownership of EVERYTHING in /app to the non-root user
    # Without this, the running agent would be denied permission to write files.
    RUN chown -R myuser:myuser /app
    
    # Switch the active user from root to the non-root user
    USER myuser
    
    # Add the user's local binary directory to the system's PATH
    ENV PATH="/home/myuser/.local/bin:$PATH"
    
    # Define the command to run when the container starts
    CMD ["sh", "-c", "uvicorn main:app --host 0.0.0.0 --port $PORT"]
    EOF
    
    এই মুহুর্তে, ক্লাউড শেল এডিটরের এক্সপ্লোরার প্যানেলে আপনার ফাইলের কাঠামোটি এইরকম দেখাবে: বর্তমান ফাইল কাঠামোর স্ক্রিনশট

কন্টেইনার ইমেজ তৈরি করুন এবং আর্টিফ্যাক্ট রেজিস্ট্রিতে পুশ করুন

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

  1. টার্মিনালে , আপনার কন্টেইনার ইমেজ সংরক্ষণের জন্য একটি নতুন আর্টিফ্যাক্ট রেজিস্ট্রি সংগ্রহস্থল তৈরি করুন।
    gcloud artifacts repositories create adk-repo \
      --repository-format=docker \
      --location=$GOOGLE_CLOUD_LOCATION \
      --description="ADK repository"
    
  2. টার্মিনালে , আপনার কন্টেইনার ইমেজ তৈরি করতে gcloud builds submit ব্যবহার করুন এবং এটিকে রিপোজিটরিতে পুশ করুন।
    gcloud builds submit \
      --tag $GOOGLE_CLOUD_LOCATION-docker.pkg.dev/$GOOGLE_CLOUD_PROJECT/adk-repo/adk-agent:latest \
      --project=$GOOGLE_CLOUD_PROJECT \
      .
    
    এই একক কমান্ডটি আপনার Dockerfile ধাপগুলি কার্যকর করার জন্য ক্লাউড বিল্ড, একটি সার্ভারবিহীন CI/CD প্ল্যাটফর্ম ব্যবহার করে। এটি ক্লাউডে ছবিটি তৈরি করে, আপনার আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরির ঠিকানা দিয়ে ট্যাগ করে এবং স্বয়ংক্রিয়ভাবে সেখানে পুশ করে।
  3. টার্মিনাল থেকে, ছবিটি তৈরি হয়েছে কিনা তা যাচাই করুন:
    gcloud artifacts docker images list \
      $GOOGLE_CLOUD_LOCATION-docker.pkg.dev/$GOOGLE_CLOUD_PROJECT/adk-repo \
      --project=$GOOGLE_CLOUD_PROJECT
    

সংক্ষিপ্তসার

এই বিভাগে, আপনি স্থাপনার জন্য আপনার কোড প্যাকেজ করেছেন:

  • আপনার এজেন্টদের একটি FastAPI ওয়েব সার্ভারে মোড়ানোর জন্য একটি main.py এন্ট্রি পয়েন্ট তৈরি করা হয়েছে।
  • আপনার কোড এবং নির্ভরতাগুলিকে একটি পোর্টেবল ছবিতে একত্রিত করার জন্য একটি Dockerfile সংজ্ঞায়িত করা হয়েছে।
  • ছবিটি তৈরি করতে এবং এটিকে একটি নিরাপদ আর্টিফ্যাক্ট রেজিস্ট্রি সংগ্রহস্থলে পুশ করতে ক্লাউড বিল্ড ব্যবহার করা হয়েছে।

৯. কুবারনেটস ম্যানিফেস্ট তৈরি করুন

এখন যেহেতু আপনার কন্টেইনার ইমেজটি আর্টিফ্যাক্ট রেজিস্ট্রিতে তৈরি এবং সংরক্ষণ করা হয়েছে, আপনাকে GKE-কে এটি কীভাবে চালাতে হবে তা নির্দেশ দিতে হবে। এর মধ্যে দুটি প্রধান কার্যকলাপ জড়িত:

  • অনুমতি কনফিগার করা : আপনি ক্লাস্টারের মধ্যে আপনার এজেন্টের জন্য একটি নিবেদিতপ্রাণ পরিচয় তৈরি করবেন এবং এটিকে প্রয়োজনীয় Google ক্লাউড API গুলিতে (বিশেষ করে, Vertex AI ) নিরাপদ অ্যাক্সেস প্রদান করবেন।
  • অ্যাপ্লিকেশনের অবস্থা নির্ধারণ করা : আপনি একটি Kubernetes ম্যানিফেস্ট ফাইল লিখবেন, একটি YAML ডকুমেন্ট যা আপনার অ্যাপ্লিকেশনটি চালানোর জন্য প্রয়োজনীয় সবকিছু ঘোষণামূলকভাবে সংজ্ঞায়িত করে, যার মধ্যে রয়েছে কন্টেইনার ইমেজ, পরিবেশের ভেরিয়েবল এবং এটি কীভাবে নেটওয়ার্কে প্রকাশ করা উচিত।

ভার্টেক্স এআই-এর জন্য কুবেরনেটস সার্ভিস অ্যাকাউন্ট কনফিগার করুন

জেমিনি মডেলগুলি অ্যাক্সেস করার জন্য আপনার এজেন্টের Vertex AI API এর সাথে যোগাযোগ করার অনুমতি প্রয়োজন। GKE-তে এই অনুমতি দেওয়ার জন্য সবচেয়ে নিরাপদ, প্রস্তাবিত পদ্ধতি হল Workload Identity । Workload Identity আপনাকে একটি Kubernetes-নেটিভ পরিচয় (একটি Kubernetes পরিষেবা অ্যাকাউন্ট ) একটি Google ক্লাউড পরিচয় (একটি IAM পরিষেবা অ্যাকাউন্ট ) এর সাথে লিঙ্ক করতে দেয়, স্ট্যাটিক JSON কীগুলি ডাউনলোড, পরিচালনা এবং সংরক্ষণ করার প্রয়োজন সম্পূর্ণরূপে এড়িয়ে যায়।

  1. টার্মিনালে , Kubernetes পরিষেবা অ্যাকাউন্ট ( adk-agent-sa ) তৈরি করুন। এটি GKE ক্লাস্টারের ভিতরে আপনার এজেন্টের জন্য একটি পরিচয় তৈরি করে যা আপনার পডগুলি ব্যবহার করতে পারে।
    kubectl create serviceaccount adk-agent-sa
    
  2. টার্মিনালে , একটি পলিসি বাইন্ডিং তৈরি করে আপনার Kubernetes পরিষেবা অ্যাকাউন্টটি Google Cloud IAM-এর সাথে লিঙ্ক করুন। এই কমান্ডটি আপনার adk-agent-sa কে aiplatform.user ভূমিকা প্রদান করে, যা এটিকে নিরাপদে Vertex AI API চালু করার অনুমতি দেয়।
    gcloud projects add-iam-policy-binding projects/${GOOGLE_CLOUD_PROJECT} \
        --role=roles/aiplatform.user \
        --member=principal://iam.googleapis.com/projects/${GOOGLE_CLOUD_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${GOOGLE_CLOUD_PROJECT}.svc.id.goog/subject/ns/default/sa/adk-agent-sa \
        --condition=None
    

Kubernetes ম্যানিফেস্ট ফাইল তৈরি করুন

Kubernetes আপনার অ্যাপ্লিকেশনের পছন্দসই অবস্থা নির্ধারণ করতে YAML ম্যানিফেস্ট ফাইল ব্যবহার করে। আপনি দুটি অপরিহার্য Kubernetes অবজেক্ট ধারণকারী একটি deployment.yaml ফাইল তৈরি করবেন: একটি Deployment এবং একটি Service

  1. টার্মিনাল থেকে, deployment.yaml ফাইলটি তৈরি করুন।
    cat <<EOF > ~/adk_multiagent_systems/deployment.yaml
    # Defines the Kubernetes resources required to deploy the application to GKE. 
    # Includes the Deployment (to run the container pods) and the Service 
    # (to expose the application via a Load Balancer).
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: adk-agent
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: adk-agent
      template:
        metadata:
          labels:
            app: adk-agent
        spec:
          # Assign the Kubernetes Service Account for Workload Identity
          serviceAccountName: adk-agent-sa
          containers:
          - name: adk-agent
            imagePullPolicy: Always
            # The path to the container image in Artifact Registry
            image: ${GOOGLE_CLOUD_LOCATION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/adk-repo/adk-agent:latest
            # Define the resources for GKE Autopilot to provision
            resources:
              limits:
                memory: "1Gi"
                cpu: "1000m"
                ephemeral-storage: "512Mi"
              requests:
                memory: "1Gi"
                cpu: "1000m"
                ephemeral-storage: "512Mi"
            ports:
            - containerPort: 8080
            # Environment variables passed to the application
            env:
            - name: PORT
              value: "8080"
            - name: GOOGLE_CLOUD_PROJECT
              value: ${GOOGLE_CLOUD_PROJECT}
            - name: GOOGLE_CLOUD_LOCATION
              value: ${GOOGLE_CLOUD_LOCATION}
            - name: GOOGLE_GENAI_USE_VERTEXAI
              value: "true"
            - name: MODEL
              value: "gemini-2.5-flash"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: adk-agent
    spec:
      # Create a public-facing Network Load Balancer with an external IP
      type: LoadBalancer
      ports:
      - port: 80
        targetPort: 8080
      selector:
        app: adk-agent
    EOF
    
    এই মুহুর্তে, ক্লাউড শেল এডিটরের এক্সপ্লোরার প্যানেলে আপনার ফাইলের কাঠামোটি এইরকম দেখাবে: বর্তমান ফাইল কাঠামোর স্ক্রিনশট

সংক্ষিপ্তসার

এই বিভাগে, আপনি নিরাপত্তা এবং স্থাপনার কনফিগারেশন সংজ্ঞায়িত করেছেন:

  • ওয়ার্কলোড আইডেন্টিটি ব্যবহার করে একটি Kubernetes পরিষেবা অ্যাকাউন্ট তৈরি করা হয়েছে এবং এটি Google Cloud IAM-এর সাথে লিঙ্ক করা হয়েছে, যার ফলে আপনার পডগুলি কী পরিচালনা না করেই Vertex AI-তে নিরাপদে অ্যাক্সেস করতে পারবে।
  • একটি deployment.yaml ফাইল তৈরি করা হয়েছে যা Deployment (পডগুলি কীভাবে চালাতে হয়) এবং পরিষেবা (লোড ব্যালেন্সারের মাধ্যমে কীভাবে এগুলি প্রকাশ করতে হয়) সংজ্ঞায়িত করে।

১০. অ্যাপ্লিকেশনটি GKE তে স্থাপন করুন

আপনার ম্যানিফেস্ট ফাইলটি সংজ্ঞায়িত করে এবং আপনার কন্টেইনার ইমেজটি আর্টিফ্যাক্ট রেজিস্ট্রিতে পুশ করে, আপনি এখন আপনার অ্যাপ্লিকেশনটি স্থাপন করতে প্রস্তুত। এই কাজে, আপনি GKE ক্লাস্টারে আপনার কনফিগারেশন প্রয়োগ করতে kubectl ব্যবহার করবেন এবং তারপরে আপনার এজেন্ট সঠিকভাবে শুরু হচ্ছে কিনা তা নিশ্চিত করার জন্য স্থিতি পর্যবেক্ষণ করবেন।

  1. আপনার টার্মিনালে , আপনার ক্লাস্টারে deployment.yaml ম্যানিফেস্ট প্রয়োগ করুন।
    kubectl apply -f deployment.yaml
    
    kubectl apply কমান্ড আপনার deployment.yaml ফাইলটি Kubernetes API সার্ভারে পাঠায়। এরপর সার্ভার আপনার কনফিগারেশনটি পড়ে এবং Deployment এবং Service অবজেক্ট তৈরির কাজটি পরিচালনা করে।
  2. টার্মিনালে , রিয়েল-টাইমে আপনার স্থাপনার অবস্থা পরীক্ষা করুন। পডগুলি Running অবস্থায় থাকা পর্যন্ত অপেক্ষা করুন।
    kubectl get pods -l=app=adk-agent --watch
    
    আপনি পডটি বিভিন্ন পর্যায়ের মধ্য দিয়ে যেতে দেখতে পাবেন:
    • মুলতুবি : পডটি ক্লাস্টার দ্বারা গৃহীত হয়েছে, কিন্তু ধারকটি এখনও তৈরি করা হয়নি।
    • কন্টেইনার তৈরি : GKE আর্টিফ্যাক্ট রেজিস্ট্রি থেকে আপনার কন্টেইনারের ছবি টেনে আনছে এবং কন্টেইনারটি শুরু করছে।
    • চলমান : সফল! কন্টেইনারটি চলছে, এবং আপনার এজেন্টের আবেদনটি লাইভ।
  3. স্ট্যাটাসটি Running দেখানোর পরে, ওয়াচ কমান্ড বন্ধ করতে টার্মিনালে CTRL+C টিপুন এবং কমান্ড প্রম্পটে ফিরে যান।

সংক্ষিপ্তসার

এই বিভাগে, আপনি কাজের চাপ চালু করেছেন:

  • ক্লাস্টারে আপনার ম্যানিফেস্ট পাঠাতে kubectl apply ব্যবহার করা হয়েছে।
  • অ্যাপ্লিকেশনটি সফলভাবে শুরু হয়েছে কিনা তা নিশ্চিত করার জন্য পডের জীবনচক্র (মুলতুবি -> কন্টেইনার তৈরি -> চলমান) পর্যবেক্ষণ করা হয়েছে।

১১. এজেন্টের সাথে যোগাযোগ করুন

আপনার ADK এজেন্ট এখন GKE তে লাইভ চলছে এবং একটি পাবলিক লোড ব্যালান্সারের মাধ্যমে ইন্টারনেটের সাথে যুক্ত। আপনি এজেন্টের ওয়েব ইন্টারফেসের সাথে সংযোগ স্থাপন করে এর সাথে ইন্টারঅ্যাক্ট করবেন এবং যাচাই করবেন যে পুরো সিস্টেমটি সঠিকভাবে কাজ করছে।

আপনার পরিষেবার বাহ্যিক আইপি ঠিকানাটি খুঁজুন

এজেন্ট অ্যাক্সেস করার জন্য, আপনাকে প্রথমে GKE আপনার পরিষেবার জন্য যে পাবলিক IP ঠিকানাটি সরবরাহ করেছে তা পেতে হবে।

  1. টার্মিনালে , আপনার পরিষেবার বিশদ জানতে নিম্নলিখিত কমান্ডটি চালান।
    kubectl get service adk-agent
    
  2. EXTERNAL-IP কলামে মানটি সন্ধান করুন। পরিষেবাটি প্রথম স্থাপনের পরে IP ঠিকানাটি বরাদ্দ করতে এক বা দুই মিনিট সময় লাগতে পারে। যদি এটি pending হিসাবে দেখায়, তাহলে এক মিনিট অপেক্ষা করুন এবং আবার কমান্ডটি চালান। আউটপুটটি এইরকম দেখাবে:
    NAME                TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
    adk-agent-service   LoadBalancer   10.120.12.234   34.123.45.67    80:31234/TCP   5m
    
    EXTERNAL-IP (যেমন, 34.123.45.67) এর অধীনে তালিকাভুক্ত ঠিকানাটি হল আপনার এজেন্টের পাবলিক এন্ট্রি পয়েন্ট।

মোতায়েন করা এজেন্ট পরীক্ষা করুন

এখন আপনি আপনার ব্রাউজার থেকে সরাসরি ADK এর অন্তর্নির্মিত ওয়েব UI অ্যাক্সেস করতে পাবলিক IP ঠিকানা ব্যবহার করতে পারেন।

  1. টার্মিনাল থেকে বাহ্যিক আইপি ঠিকানা ( EXTERNAL-IP ) কপি করুন।
  2. আপনার ওয়েব ব্রাউজারে একটি নতুন ট্যাব খুলুন এবং http://[EXTERNAL-IP] টাইপ করুন, [EXTERNAL-IP] এর পরিবর্তে আপনার কপি করা IP ঠিকানাটি লিখুন।
  3. এখন আপনার ADK ওয়েব ইন্টারফেসটি দেখা উচিত।
  4. নিশ্চিত করুন যে এজেন্ট ড্রপ-ডাউন মেনুতে workflow_agents নির্বাচন করা আছে।
  5. টোকেন স্ট্রিমিং চালু করুন।
  6. নতুন কথোপকথন শুরু করতে hello টাইপ করুন এবং এন্টার টিপুন।
  7. ফলাফল লক্ষ্য করুন। এজেন্টের দ্রুত উত্তরে অভিবাদন জানানো উচিত: "আমি তোমাকে একটি হিট সিনেমার জন্য একটি পিচ লিখতে সাহায্য করতে পারি। তুমি কোন ঐতিহাসিক ব্যক্তিত্বকে নিয়ে সিনেমা বানাতে চাও?"
  8. যখন কোনও ঐতিহাসিক চরিত্র বেছে নিতে বলা হবে, তখন আপনার আগ্রহের একটি চরিত্র বেছে নিন। কিছু ধারণার মধ্যে রয়েছে:
    • the most successful female pirate in history
    • the woman who invented the first computer compiler
    • a legendary lawman of the American Wild West

সংক্ষিপ্তসার

এই বিভাগে, আপনি স্থাপনা যাচাই করেছেন:

  • লোডব্যালেন্সার দ্বারা বরাদ্দকৃত বহিরাগত আইপি ঠিকানা পুনরুদ্ধার করা হয়েছে।
  • মাল্টি-এজেন্ট সিস্টেমটি প্রতিক্রিয়াশীল এবং কার্যকরী কিনা তা নিশ্চিত করার জন্য একটি ব্রাউজারের মাধ্যমে ADK ওয়েব UI অ্যাক্সেস করা হয়েছে।

১২. অটোস্কেলিং কনফিগার করুন

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

আপনি একটি HorizontalPodAutoscaler (HPA) কনফিগার করবেন, একটি Kubernetes কন্ট্রোলার যা রিয়েল-টাইম CPU ব্যবহারের উপর ভিত্তি করে আপনার ডিপ্লয়মেন্টে চলমান পডের সংখ্যা স্বয়ংক্রিয়ভাবে সামঞ্জস্য করে।

  1. ক্লাউড শেল এডিটর টার্মিনালে , adk_multiagent_system_gke ডিরেক্টরির রুটে একটি নতুন hpa.yaml ফাইল তৈরি করুন।
    cloudshell edit ~/adk_multiagent_systems/hpa.yaml
    
  2. নতুন hpa.yaml ফাইলে নিম্নলিখিত বিষয়বস্তু যোগ করুন:
    # Configures the HorizontalPodAutoscaler (HPA) to automatically scale 
    # the number of running agent pods up or down based on CPU utilization 
    # to handle varying traffic loads.
    
    apiVersion: autoscaling/v1
    kind: HorizontalPodAutoscaler
    metadata:
      name: adk-agent-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: adk-agent
      minReplicas: 1
      maxReplicas: 5
      targetCPUUtilizationPercentage: 50
    
    এই HPA অবজেক্টটি আমাদের adk-agent Deployment কে লক্ষ্য করে। এটি নিশ্চিত করে যে সর্বদা কমপক্ষে 1টি পড চলমান থাকে, সর্বাধিক 5টি পড সেট করে এবং গড় CPU ব্যবহার 50% এর কাছাকাছি রাখার জন্য প্রতিলিপি যোগ/অপসারণ করে। এই মুহুর্তে, ক্লাউড শেল এডিটরের এক্সপ্লোরার প্যানেলে আপনার ফাইলের কাঠামোটি দেখতে এইরকম হওয়া উচিত: বর্তমান ফাইল কাঠামোর স্ক্রিনশট
  3. টার্মিনালে পেস্ট করে আপনার ক্লাস্টারে HPA প্রয়োগ করুন।
    kubectl apply -f hpa.yaml
    

অটোস্কেলার যাচাই করুন

HPA এখন সক্রিয় এবং আপনার স্থাপনার উপর নজর রাখছে। এটি কীভাবে কাজ করছে তা দেখার জন্য আপনি এর অবস্থা পরীক্ষা করতে পারেন।

  1. আপনার HPA এর অবস্থা জানতে টার্মিনালে নিম্নলিখিত কমান্ডটি চালান।
    kubectl get hpa adk-agent-hpa
    
    আউটপুটটি দেখতে এরকম হবে:
    NAME            REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
    adk-agent-hpa   Deployment/adk-agent   0%/50%    1         5         1          30s
    
    আপনার এজেন্ট এখন স্বয়ংক্রিয়ভাবে ট্র্যাফিকের প্রতিক্রিয়ায় স্কেল করবে।

সংক্ষিপ্তসার

এই বিভাগে, আপনি উৎপাদন ট্র্যাফিকের জন্য অপ্টিমাইজ করেছেন:

  • স্কেলিং নিয়ম সংজ্ঞায়িত করার জন্য একটি hpa.yaml ম্যানিফেস্ট তৈরি করা হয়েছে।
  • CPU ব্যবহারের উপর ভিত্তি করে পড রেপ্লিকার সংখ্যা স্বয়ংক্রিয়ভাবে সামঞ্জস্য করতে HorizontalPodAutoscaler (HPA) স্থাপন করা হয়েছে।

১৩. উৎপাদনের প্রস্তুতি

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

সম্পদ বরাদ্দের সাথে কর্মক্ষমতা সামঞ্জস্য করুন

GKE Autopilot- এ, আপনি আপনার deployment.yaml এ রিসোর্স requests নির্দিষ্ট করে আপনার অ্যাপ্লিকেশনের জন্য প্রভিশন করা CPU এবং মেমোরির পরিমাণ নিয়ন্ত্রণ করেন।

যদি আপনি দেখেন যে আপনার এজেন্ট ধীর গতিতে কাজ করছে অথবা মেমোরির অভাবে ক্র্যাশ করছে, তাহলে আপনি আপনার deployment.yamlresources ব্লক সম্পাদনা করে এবং kubectl apply ব্যবহার করে ফাইলটি পুনরায় প্রয়োগ করে এর রিসোর্স বরাদ্দ বাড়াতে পারেন।

উদাহরণস্বরূপ, স্মৃতি দ্বিগুণ করতে:

# In deployment.yaml
# ...
        resources:
          requests:
            memory: "2Gi"  # Increased from 1Gi
            cpu: "1000m"
# ...

CI/CD দিয়ে আপনার কর্মপ্রবাহ স্বয়ংক্রিয় করুন

এই ল্যাবে, আপনি ম্যানুয়ালি কমান্ড চালাতেন। পেশাদার অনুশীলন হল একটি CI/CD (কন্টিনিউয়াস ইন্টিগ্রেশন/কন্টিনিউয়াস ডিপ্লয়মেন্ট) পাইপলাইন তৈরি করা। একটি সোর্স কোড রিপোজিটরি (যেমন GitHub) কে ক্লাউড বিল্ড ট্রিগারের সাথে সংযুক্ত করে, আপনি সম্পূর্ণ ডিপ্লয়মেন্ট স্বয়ংক্রিয় করতে পারেন।

পাইপলাইনের মাধ্যমে, আপনি যখনই কোড পরিবর্তন করবেন, ক্লাউড বিল্ড স্বয়ংক্রিয়ভাবে এটি করতে পারবে:

  1. নতুন কন্টেইনার ইমেজ তৈরি করুন।
  2. ছবিটি আর্টিফ্যাক্ট রেজিস্ট্রিতে ঠেলে দিন।
  3. আপনার GKE ক্লাস্টারে আপডেট করা Kubernetes ম্যানিফেস্ট প্রয়োগ করুন।

গোপন তথ্য নিরাপদে পরিচালনা করুন

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

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

এখানে আপনার অনুরোধ করা ক্লিন আপ রিসোর্স বিভাগটি রয়েছে, যা কনক্লুশন বিভাগের ঠিক আগে ঢোকানো হয়েছে।

১৪. সম্পদ পরিষ্কার করুন

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

GKE ক্লাস্টার মুছে ফেলুন

এই ল্যাবে GKE ক্লাস্টার হল প্রাথমিক খরচের চালিকাশক্তি। এটি মুছে ফেললে কম্পিউট চার্জ বন্ধ হয়ে যায়।

  1. টার্মিনালে, নিম্নলিখিত কমান্ডটি চালান:
    gcloud container clusters delete adk-cluster \
      --location=$GOOGLE_CLOUD_LOCATION \
      --quiet
    

আর্টিফ্যাক্ট রেজিস্ট্রি সংগ্রহস্থল মুছে ফেলুন

আর্টিফ্যাক্ট রেজিস্ট্রিতে সংরক্ষিত কন্টেইনার চিত্রগুলির জন্য স্টোরেজ খরচ হয়।

  1. টার্মিনালে, নিম্নলিখিত কমান্ডটি চালান:
    gcloud artifacts repositories delete adk-repo \
      --location=$GOOGLE_CLOUD_LOCATION \
      --quiet
    

প্রকল্পটি মুছুন (ঐচ্ছিক)

যদি আপনি এই ল্যাবের জন্য বিশেষভাবে একটি নতুন প্রকল্প তৈরি করে থাকেন এবং এটি আবার ব্যবহার করার পরিকল্পনা না করেন, তাহলে পরিষ্কার করার সবচেয়ে সহজ উপায় হল সম্পূর্ণ প্রকল্পটি মুছে ফেলা।

  1. টার্মিনালে, নিম্নলিখিত কমান্ডটি চালান ( [YOUR_PROJECT_ID] কে আপনার প্রকৃত প্রকল্প আইডি দিয়ে প্রতিস্থাপন করুন):
    gcloud projects delete [YOUR_PROJECT_ID]
    

১৫. উপসংহার

অভিনন্দন! আপনি একটি প্রোডাকশন-গ্রেড GKE ক্লাস্টারে একটি মাল্টি-এজেন্ট ADK অ্যাপ্লিকেশন সফলভাবে স্থাপন করেছেন। এটি একটি উল্লেখযোগ্য অর্জন যা একটি আধুনিক ক্লাউড-নেটিভ অ্যাপ্লিকেশনের মূল জীবনচক্রকে অন্তর্ভুক্ত করে, যা আপনাকে আপনার নিজস্ব জটিল এজেন্টিক সিস্টেম স্থাপনের জন্য একটি শক্ত ভিত্তি প্রদান করে।

সংক্ষিপ্তসার

এই ল্যাবে, আপনি শিখেছেন:

দরকারী সম্পদ