নতুন ইতিহাস

অপেক্ষা: সুন্দর শিল্প যা আপনাকে শাসন করা উচিত

দ্বারা Nicolas Fränkel6m2025/04/25
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

সম্প্রতি, GKE এবং GitHub Actions এর সাথে Kubernetes এ আপনার পুল অনুরোধ পরীক্ষা করার সময়, আমি একই সমস্যা দ্বিগুণ মুখোমুখি হয়েছি: পরিষেবা A পরিষেবা B প্রয়োজন, কিন্তু পরিষেবা A পরিষেবা B তুলনায় দ্রুত শুরু হয়, এবং সিস্টেম ব্যর্থ হয়।
featured image - অপেক্ষা: সুন্দর শিল্প যা আপনাকে শাসন করা উচিত
Nicolas Fränkel HackerNoon profile picture

সম্প্রতি, একটি কর্মশালাতে কাজ করার সময়GKE এবং GitHub অ্যাকশন সহ Kubernetes এ আপনার পুল অনুরোধ পরীক্ষা করুন, আমি একই সমস্যা দুবার মুখোমুখি হয়েছি: পরিষেবা A পরিষেবা B প্রয়োজন, কিন্তু পরিষেবা A পরিষেবা B তুলনায় দ্রুত শুরু করে এবং সিস্টেম ব্যর্থ হয়।

অপেক্ষায় রয়েছেন কুমার

Kubernetes এ অপেক্ষা করার জন্য এটি অদ্ভুত মনে হতে পারে। Kubernetes প্ল্যাটফর্মের স্বেচ্ছাসেবী প্রকৃতি তার বৃহত্তম সুবিধাগুলির মধ্যে একটি।


অ্যাপ্লিকেশনটি খুব দ্রুত শুরু করে এবং ব্যস্তভাবে ডাটাবেসের সাথে সংযোগ স্থাপন করার চেষ্টা করে। এদিকে, ডাটাবেসটি প্রদত্ত ডেটাবেসের সাথে নিজেকে শুরু করে; সংযোগটি ব্যর্থ হয়।Failedরাষ্ট্র


কিছু সময়ের পরে, Kubernetes অ্যাপ্লিকেশন পড এর অবস্থা অনুরোধ করে. কারণ এটি ব্যর্থ হয়, এটি এটি বন্ধ করে এবং একটি নতুন পড শুরু করে. এই মুহূর্তে, দুটি জিনিস ঘটতে পারে: ডাটাবেস পড এখনও প্রস্তুত নয়, এবং এটি এক্সপোর্ডে ফিরে এসেছে, অথবা এটি প্রস্তুত, এবং অ্যাপ্লিকেশন অবশেষে সংযোগ করে।

প্রক্রিয়াকে গতিশীল করার জন্য, Kubernetes অফারস্টার্টআপ পরীক্ষা:


startupProbe:
  httpGet:
    path: /health
    port: 8080
  failureThreshold: 30
  periodSeconds: 10


উপরের স্যান্ড দিয়ে, Kubernetes পডের অবস্থা অনুরোধ করার আগে একটি প্রাথমিক দশ সেকেন্ডের জন্য অপেক্ষা করে. যদি এটি ব্যর্থ হয়, তবে এটি আরও দশ সেকেন্ডের জন্য অপেক্ষা করে।


আপনি HTTP দেখতে পেতে পারেন/healthঅ্যাপ্লিকেশন: Kubernetes দুটি অ্যাপ্লিকেশন অফার করেপরীক্ষাConfiguration সেটিংসঃhttpGetঅথবাexec. প্রথমটি ওয়েব অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত, যখন পরবর্তীটি অন্যান্য অ্যাপ্লিকেশনগুলির জন্য। এটি মানে আমরা বুঝতে হবে যে পডটি কোন ধরনের কনটেইনার অন্তর্ভুক্ত করে এবং এটি সম্ভব হলে এর অবস্থা কীভাবে চেক করা যায়।হেলমেট চার্টপ্রয়োগ করার সময় এটি নিম্নলিখিত দেখায়:


startupProbe:
  exec:
    command:
      - /bin/sh
      - -c
      - -e
      - exec pg_isready -U $PG_USER -h $PG_HOST -p $PG_PORT

লক্ষ্য করুন যে উপরের একটি সহজকরণ, যেহেতু এটি আনন্দে ডাটাবেস নাম এবং একটি এসএসএল সার্টিফিকেটকে অবহেলা করে।


আপনি যদি এটি সঠিকভাবে কনফিগার করেন তবে স্টার্টআপ সনডারটি ডিফল্ট পরিস্থিতির তুলনায় জিনিসগুলি গতিশীল করে। আপনি একটি দীর্ঘ প্রাথমিক দেরি এবং তারপর সংক্ষিপ্ত বৃদ্ধি সেট করতে পারেন. তবে, কনটেইনারগুলি যত বেশি বৈচিত্র্যপূর্ণ, এটি কনফিগার করা কঠিন হবে, কারণ আপনাকে প্রত্যেকটি ভিত্তিক কনটেইনারে বিশেষজ্ঞ হতে হবে।


বিকল্পগুলি খুঁজে বের করা লাভজনক হবে।

অপেক্ষা4x

বিকল্পগুলি এমন সরঞ্জাম যা অপেক্ষার উপর দৃষ্টি আকর্ষণ করে।অপেক্ষাএই ধারণাটি খুবই সহজ, এই ধারণাটি সহজ:


./wait-for একটি স্ক্রিপ্ট যা docker কনটেইনার মত পরিষেবাগুলি সমন্বয় করার জন্য ডিজাইন করা হয়েছে. এটি sh এবং alpine সামঞ্জস্যপূর্ণ।

./wait-forএকটি স্ক্রিপ্ট ডিজাইন করা হয়েছে docker কনটেইনার মত পরিষেবাগুলি সমন্বয় করার জন্য।shএবংalpineএকমত


এখানে একটি HTTP API জন্য অপেক্ষা কিভাবে:


sh -c './wait-for http://my.api/health -- echo "The api is up! Let's use it"'


এটি কাজটি সম্পন্ন করেছে, কিন্তু সেই সময়ে, আপনাকে স্ক্রিপ্টটি কপি করতে এবং ম্যানুয়ালভাবে আপডেটগুলির জন্য চেক করতে হয়েছিল. আমি চেক করেছি, এবং প্রকল্পটি এখন একটি নিয়মিত কনটেইনার সরবরাহ করে।


অপেক্ষা4xএকই ভূমিকা পালন করে, কিন্তু একটি সংস্করণযুক্ত কনটেইনার হিসাবে উপলব্ধ এবং আরও পরিষেবাগুলি প্রদান করে যা অপেক্ষা করতে পারে: HTTP, DNS, ডাটাবেস এবং বার্তা রেখা।


আপনি যে কোনও টুল ব্যবহার করেন, আপনি এটি একটি ভিতরে ব্যবহার করতে পারেনইনিংস কনটেইনার:


একটি পড অ্যাপ্লিকেশনগুলি চালানোর একাধিক কনটেইনার থাকতে পারে, কিন্তু এটি একটি বা একাধিক init কনটেইনারও থাকতে পারে, যা অ্যাপ্লিকেশন কনটেইনারগুলি চালানোর আগে চালানো হয়।

Init কনটেইনার সাধারণ কনটেইনার, ব্যতিক্রম:


    প্রতিটি init কনটেইনার পরবর্তী শুরু করার আগে সফলভাবে সম্পন্ন করতে হবে।

একটি পড অ্যাপ্লিকেশনগুলি চালানোর একাধিক কনটেইনার থাকতে পারে, কিন্তু এটি একটি বা একাধিক init কনটেইনারও থাকতে পারে, যা অ্যাপ্লিকেশন কনটেইনারগুলি চালানোর আগে চালানো হয়।

Init কনটেইনার সাধারণ কনটেইনার, ব্যতিক্রম:


    প্রতিটি init কনটেইনার পরবর্তী শুরু করার আগে সফলভাবে সম্পন্ন করতে হবে।


পরবর্তী কল্পনা করুনPodএটি একটি PostgreSQL উপর নির্ভর করেDeployment:


apiVersion: v1
kind: Pod
metadata:
  labels:
    type: app
    app: recommandations
spec:
  containers:
    - name: recommandations
      image: recommandations:latest
      envFrom:
        - configMapRef:
            name: postgres-config


অ্যাপ্লিকেশনটি পাইথন এবং বেশ দ্রুত শুরু হয়. এটি PostgreSQL ডাটাবেসের সাথে সংযোগ করার চেষ্টা করে. দুর্ভাগ্যবশত, ডাটাবেসটি প্রাথমিককরণ শেষ করেনি, তাই সংযোগটি ব্যর্থ হয়, এবং Kubernetes পডটি পুনরায় চালু করে।


আমরা এটি একটি সঙ্গে সমাধান করতে পারেনinitContainerএকটি অপেক্ষা কনটেইনার:


apiVersion: v1
kind: Pod
metadata:
  labels:
    type: app
    app: recommandations
spec:
  initContainers:
    - name: wait-for-postgres
      image: atkrad/wait4x:3.1
      command:
        - wait4x
        - postgresql
        - postgres://$(DATABASE_URL)?sslmode=disable
      envFrom:
        - configMapRef:
            name: postgres-config
  containers:
    - name: recommandations
      image: recommandations:latest
      envFrom:
        - configMapRef:
            name: postgres-config


উপরে উল্লেখিত পরিস্থিতিতে,initContainerডাটাবেস সংযোগগুলি গ্রহণ না হওয়া পর্যন্ত এটি থেমে থাকে না।recommandationsকনটেইনার শুরু করতে পারে. Kubernetes শেষ করতে হবে নাPodপূর্ববর্তী সেটিংয়ের মতো! এটি কম লগ এবং সম্ভবত কম সতর্কতা অন্তর্ভুক্ত করে।

যখন অপেক্ষা বাধ্যতামূলক হয়ে যায়

উপরের একটি সামান্য উন্নতি, কিন্তু আপনি এটি ছাড়া করতে পারেন. অন্যান্য ক্ষেত্রে, অপেক্ষা বাধ্যতামূলক হয়ে যায়. আমি সম্প্রতি উপরে উল্লেখিত কর্মশালা জন্য প্রস্তুতি করার সময় এটি অভিজ্ঞ।


  • পাইপলাইন Kubernetes পাশে একটি ম্যানিফেস্ট প্রয়োগ
  • পরবর্তী ধাপে, এটি পরীক্ষা চালান
  • অ্যাপ্লিকেশনটি পড়ার আগে পরীক্ষা শুরু হলে এটি ব্যর্থ হয়।


আমরা পরীক্ষা করার আগে ব্যাক এন্ড প্রস্তুত পর্যন্ত অপেক্ষা করতে হবে।wait4xঅপেক্ষা করার জন্যPodআমরা পরীক্ষা চালু করার আগে অনুরোধগুলি গ্রহণ করতে:


      - name: Wait until the application has started
        uses: addnab/docker-run-action@v3                                       #1
        with:
          image: atkrad/wait4x:latest
          run: wait4x http ${{ env.BASE_URL }}/health --expect-status-code 200  #2
  1. GitHub অ্যাকশন একটি কনটেইনার চালানোর অনুমতি দেয়. আমি পরিবর্তে গু বাইনারি ডাউনলোড করতে পারতাম।
  2. অপেক্ষা করুন /health এন্ডপুট একটি 200 প্রতিক্রিয়া কোড ফেরত।

উপসংহার

Kubernetes স্টার্টআপ স্যান্ডারগুলি অপরিহার্য পুনরায় চালু হওয়ার জন্য একটি চমৎকার উপায় যখন আপনি সেবাগুলি চালু করেন যা একে অপরের উপর নির্ভর করে।initContainerwait4xএটি একটি সরঞ্জাম যা অন্যান্য পরিস্থিতিতে ব্যবহার করা যেতে পারে. এটি এখন আমার টুলবোর্ডের অংশ।


To go further:


  • অপেক্ষা4x
  • তাই কি আপনাকে কিছু Kubernetes সম্পদ অপেক্ষা করতে হবে?



প্রাথমিকভাবে প্রকাশিত A Java Geek এ 20 এপ্রিল, 2025

জাভা Geek

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks