CNI প্লাগইন-সম্পর্কিত ত্রুটি ট্রাবলশুট করা

CNI প্লাগইন-সম্পর্কিত ত্রুটি এড়াতে, যাচাই করুন যে আপনি একটি কন্টেইনার রানটাইম ব্যবহার করছেন বা আপগ্রেড করছেন যা আপনার কুবারনেটিসের ভার্সনের সাথে সঠিকভাবে কাজ করার জন্য পরীক্ষা করা হয়েছে।

"Incompatible CNI versions" এবং "Failed to destroy network for sandbox" ত্রুটি সম্পর্কে

containerd v1.6.0-v1.6.3 এ Pod CNI নেটওয়ার্ক সেটআপ এবং টিয়ার ডাউনের জন্য সার্ভিস সমস্যা বিদ্যমান যখন CNI প্লাগইন আপগ্রেড করা হয়নি এবং/অথবা CNI কনফিগ ভার্সন CNI কনফিগ ফাইলে ঘোষণা করা হয়নি। containerd টিম রিপোর্ট করে, "এই সমস্যাগুলি containerd v1.6.4 এ সমাধান করা হয়েছে।"

containerd v1.6.0-v1.6.3 এর সাথে, যদি আপনি CNI প্লাগইন আপগ্রেড না করেন এবং/অথবা CNI কনফিগ ভার্সন ঘোষণা না করেন, আপনি নিম্নলিখিত "Incompatible CNI versions" বা "Failed to destroy network for sandbox" ত্রুটি অবস্থার সম্মুখীন হতে পারেন।

Incompatible CNI versions ত্রুটি

যদি আপনার CNI প্লাগইনের ভার্সন কনফিগে প্লাগইন ভার্সনের সাথে সঠিকভাবে মেলে না কারণ কনফিগ ভার্সন প্লাগইন ভার্সনের চেয়ে পরবর্তী, containerd লগ সম্ভবত একটি Pod স্টার্টআপে এরকম একটি ত্রুটি বার্তা দেখাবে:

incompatible CNI versions; config is \"1.0.0\", plugin supports [\"0.1.0\" \"0.2.0\" \"0.3.0\" \"0.3.1\" \"0.4.0\"]"

এই সমস্যা সমাধান করতে, আপনার CNI প্লাগইন এবং CNI কনফিগ ফাইল আপডেট করুন

Failed to destroy network for sandbox ত্রুটি

যদি CNI প্লাগইন কনফিগে প্লাগইনের ভার্সন অনুপস্থিত থাকে, Pod চলতে পারে। তবে, Pod বন্ধ করা এরকম একটি ত্রুটি জেনারেট করে:

ERROR[2022-04-26T00:43:24.518165483Z] StopPodSandbox for "b" failed
error="failed to destroy network for sandbox \"bbc85f891eaf060c5a879e27bba9b6b06450210161dfdecfbb2732959fb6500a\": invalid version \"\": the version is empty"

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

আপনার CNI প্লাগইন এবং CNI কনফিগ ফাইল আপডেট করা

যদি আপনি containerd v1.6.0-v1.6.3 ব্যবহার করছেন এবং "Incompatible CNI versions" বা "Failed to destroy network for sandbox" ত্রুটির সম্মুখীন হয়েছেন, আপনার CNI প্লাগইন আপডেট করা এবং CNI কনফিগ ফাইল এডিট করার কথা বিবেচনা করুন।

এখানে প্রতিটি Node এর জন্য সাধারণ ধাপগুলির একটি সংক্ষিপ্ত বিবরণ রয়েছে:

  1. নিরাপদে Node ড্রেইন এবং কর্ডন করুন

  2. আপনার কন্টেইনার রানটাইম এবং kubelet সার্ভিস বন্ধ করার পরে, নিম্নলিখিত আপগ্রেড অপারেশন সম্পাদন করুন:

    • যদি আপনি CNI প্লাগইন চালাচ্ছেন, সেগুলি সর্বশেষ ভার্সনে আপগ্রেড করুন।
    • যদি আপনি নন-CNI প্লাগইন ব্যবহার করছেন, সেগুলি CNI প্লাগইন দিয়ে প্রতিস্থাপন করুন। প্লাগইনের সর্বশেষ ভার্সন ব্যবহার করুন।
    • প্লাগইন কনফিগারেশন ফাইল আপডেট করুন যাতে CNI স্পেসিফিকেশনের একটি ভার্সন নির্দিষ্ট বা মেলে যা প্লাগইন সমর্থন করে, যেমন নিম্নলিখিত "একটি উদাহরণ containerd কনফিগারেশন ফাইল" বিভাগে দেখানো হয়েছে।
    • containerd এর জন্য, নিশ্চিত করুন যে আপনি CNI loopback প্লাগইনের সর্বশেষ ভার্সন (v1.0.0 বা পরবর্তী) ইনস্টল করেছেন।
    • Node কম্পোনেন্ট (উদাহরণস্বরূপ, kubelet) কুবারনেটিস v1.24 এ আপগ্রেড করুন
    • কন্টেইনার রানটাইমের সবচেয়ে বর্তমান ভার্সনে আপগ্রেড করুন বা ইনস্টল করুন।
  3. আপনার কন্টেইনার রানটাইম এবং kubelet রিস্টার্ট করে Node কে আপনার ক্লাস্টারে ফিরিয়ে আনুন। Node আনকর্ডন করুন (kubectl uncordon <nodename>)।

একটি উদাহরণ containerd কনফিগারেশন ফাইল

নিম্নলিখিত উদাহরণটি containerd রানটাইম v1.6.x এর জন্য একটি কনফিগারেশন দেখায়, যা CNI স্পেসিফিকেশনের একটি সাম্প্রতিক ভার্সন (v1.0.0) সমর্থন করে।

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

কুবারনেটিসে, containerd রানটাইম একটি loopback ইন্টারফেস, lo, Pod এ যোগ করে একটি ডিফল্ট আচরণ হিসাবে। containerd রানটাইম একটি CNI প্লাগইনের মাধ্যমে loopback ইন্টারফেস কনফিগার করে, loopbackloopback প্লাগইন containerd রিলিজ প্যাকেজের অংশ হিসাবে ডিস্ট্রিবিউট করা হয় যার cni উপাধি রয়েছে। containerd v1.6.0 এবং পরবর্তী একটি CNI v1.0.0-সামঞ্জস্যপূর্ণ loopback প্লাগইন সেইসাথে অন্যান্য ডিফল্ট CNI প্লাগইন অন্তর্ভুক্ত করে। loopback প্লাগইনের জন্য কনফিগারেশন containerd দ্বারা অভ্যন্তরীণভাবে করা হয়, এবং CNI v1.0.0 ব্যবহার করতে সেট করা হয়। এর মানে এও যে loopback প্লাগইনের ভার্সন অবশ্যই v1.0.0 বা পরবর্তী হতে হবে যখন এই নতুন ভার্সন containerd শুরু হয়।

নিম্নলিখিত bash কমান্ড একটি উদাহরণ CNI কনফিগ জেনারেট করে। এখানে, 1.0.0 কনফিগ ভার্সনের জন্য মান cniVersion ফিল্ডে অ্যাসাইন করা হয় যখন containerd CNI bridge প্লাগইন ইনভোক করে তখন ব্যবহারের জন্য।

cat << EOF | tee /etc/cni/net.d/10-containerd-net.conflist
{
 "cniVersion": "1.0.0",
 "name": "containerd-net",
 "plugins": [
   {
     "type": "bridge",
     "bridge": "cni0",
     "isGateway": true,
     "ipMasq": true,
     "promiscMode": true,
     "ipam": {
       "type": "host-local",
       "ranges": [
         [{
           "subnet": "10.88.0.0/16"
         }],
         [{
           "subnet": "2001:db8:4860::/64"
         }]
       ],
       "routes": [
         { "dst": "0.0.0.0/0" },
         { "dst": "::/0" }
       ]
     }
   },
   {
     "type": "portmap",
     "capabilities": {"portMappings": true},
     "externalSetMarkChain": "KUBE-MARK-MASQ"
   }
 ]
}
EOF

পূর্ববর্তী উদাহরণে IP অ্যাড্রেস রেঞ্জগুলি আপডেট করুন যা আপনার ব্যবহারের ক্ষেত্রে এবং নেটওয়ার্ক অ্যাড্রেসিং পরিকল্পনার উপর ভিত্তি করে।