এটি এই বিভাগটির বহু পৃষ্ঠার মুদ্রণযোগ্য দর্শন। মুদ্রণ করতে এখানে ক্লিক করুন.

এই পৃষ্ঠার নিয়মিত দৃশ্যে ফিরে আসুন.

নীতিমালা

নীতিগুলির সাথে সুরক্ষা এবং সর্বোত্তম-অনুশীলনগুলি পরিচালনা করুন

কুবারনেটিস নীতিগুলি এমন কনফিগারেশন যা অন্যান্য কনফিগারেশন বা রানটাইম আচরণগুলি পরিচালনা করে। কুবারনেটিস বিভিন্ন ধরণের নীতি সরবরাহ করে নীচে তা বর্ণিত হলো:

এপিআই (API) অবজেক্ট ব্যবহার করে পলিসি প্রয়োগ করুন

কিছু API অবজেক্ট নীতি হিসাবে কাজ করে। এখানে কিছু উদাহরণ দেওয়া হল:

ভর্তি নিয়ন্ত্রক ব্যবহার করে নীতিমালা প্রয়োগ করুন

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

কুবারনেটিস বেশ কয়েকটি অন্তর্নির্মিত ভর্তি নিয়ামক রয়েছে যা API সার্ভারের মাধ্যমে কনফিগারযোগ্য --enable-admission-plugin ফ্লাগ।

ভর্তি নিয়ন্ত্রকদের বিবরণ, উপলব্ধ ভর্তি নিয়ন্ত্রকদের সম্পূর্ণ তালিকা সহ, একটি ডেডিকেটেড অংশে নথিভুক্ত ( ডকুমেন্ট) করা হয়েছে।

ভ্যালিডেটিংএডমিশনপলিসি ব্যবহার করে নীতিগুলি প্রয়োগ করুন

ভর্তি নীতিগুলি যাচাই করা কমন এক্সপ্রেশন ল্যাঙ্গুয়েজ (সিইএল) ব্যবহার করে API সার্ভারে কনফিগারযোগ্য বৈধতা চেকগুলি কার্যকর করার অনুমতি দেয়। উদাহরণস্বরূপ, সর্বশেষ চিত্র ট্যাগের ব্যবহার নিষিদ্ধ করতে একটি ভ্যালিডেটিংঅ্যাডমিশনপলিসি ব্যবহার করা যেতে পারে।

একটি ভ্যালিডেটিঅ্যাডমিশনপলিসি একটি API অনুরোধের ভিত্তিতে কাজ করে এবং ব্যবহারকারীদের অ-সম্মতিযুক্ত কনফিগারেশন সম্পর্কে ব্লক, নিরীক্ষণ (হিসাবনিকাশ) এবং সতর্ক করতে ব্যবহার করা যেতে পারে।

উদাহরণ সহ ভ্যালিডেটিংএডমিশনপলিসি API সম্পর্কে বিশদ বিবরণ একটি ডেডিকেটেড অংশে নথিভুক্ত (ডকুমেন্ট) করা হয়েছে:

ডাইনামিক ভর্তি নিয়ন্ত্রণ ব্যবহার করে নীতিমালা প্রয়োগ করুন

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

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

ডায়নামিক ভর্তি নিয়ন্ত্রণের বিশদ বিবরণ একটি নিয়োজিত (ডেডিকেটেড) অংশে নথিভুক্ত ( ডকুমেন্ট) করা হয়েছে:

বাস্তবায়ন

নমনীয় নীতি ইঞ্জিন হিসাবে কাজ করে এমন ডায়নামিক অ্যাডমিশন কন্ট্রোলারগুলি কুবারনেটিস ইকোসিস্টেমে উন্নত(ডেভলাপ) করা হচ্ছে, যেমন:

Kubelet কনফিগারেশন ব্যবহার করে নীতি প্রয়োগ করুন

কুবারনেটিস প্রতিটি ওর্য়াকার নোডে Kubelet কনফিগার করার অনুমতি দেয়। কিছু Kubelet কনফিগারেশন নীতি হিসাবে কাজ করে:

1 - লিমিট রেঞ্জ

ডিফল্টভাবে, কন্টেইনারগুলি একটি Kubernetes ক্লাস্টারে সীমাহীন compute resources দিয়ে চলে। Kubernetes resource quotas ব্যবহার করে, প্রশাসকরা (যাদের cluster operators ও বলা হয়) একটি নির্দিষ্ট namespace এর মধ্যে ক্লাস্টার রিসোর্স (যেমন CPU সময়, মেমরি, এবং পার্সিস্টেন্ট স্টোরেজ) এর ব্যবহার এবং তৈরি সীমাবদ্ধ করতে পারেন। একটি namespace এর মধ্যে, একটি Pod যতটা CPU এবং মেমরি ব্যবহার করতে পারে যতটা সেই namespace এ প্রযোজ্য ResourceQuotas দ্বারা অনুমোদিত। একজন ক্লাস্টার অপারেটর হিসাবে, বা একজন namespace-স্তরের প্রশাসক হিসাবে, আপনি এটাও নিশ্চিত করতে চিন্তিত হতে পারেন যে একটি একক অবজেক্ট একটি namespace এর মধ্যে সমস্ত উপলব্ধ রিসোর্স একচেটিয়া করতে পারে না।

একটি LimitRange হল একটি নীতি যা রিসোর্স বরাদ্দ (limits এবং requests) সীমাবদ্ধ করে যা আপনি একটি namespace এ প্রতিটি প্রযোজ্য অবজেক্ট ধরনের (যেমন Pod বা PersistentVolumeClaim) জন্য নির্দিষ্ট করতে পারেন।

একটি LimitRange সীমাবদ্ধতা প্রদান করে যা পারে:

  • একটি namespace এ প্রতি Pod বা Container এর জন্য ন্যূনতম এবং সর্বোচ্চ compute resources ব্যবহার প্রয়োগ করুন।
  • একটি namespace এ প্রতি PersistentVolumeClaim এর জন্য ন্যূনতম এবং সর্বোচ্চ স্টোরেজ অনুরোধ প্রয়োগ করুন।
  • একটি namespace এ একটি রিসোর্সের জন্য request এবং limit এর মধ্যে একটি অনুপাত প্রয়োগ করুন।
  • একটি namespace এ compute resources এর জন্য ডিফল্ট request/limit সেট করুন এবং রানটাইমে স্বয়ংক্রিয়ভাবে সেগুলি Container এ ইনজেক্ট করুন।

একটি LimitRange একটি নির্দিষ্ট namespace এ প্রয়োগ করা হয় যখন সেই namespace এ একটি LimitRange অবজেক্ট থাকে।

একটি LimitRange অবজেক্টের নাম অবশ্যই একটি বৈধ DNS subdomain name হতে হবে।

রিসোর্স limits এবং requests এর উপর সীমাবদ্ধতা

  • প্রশাসক একটি namespace এ একটি LimitRange তৈরি করেন।
  • ব্যবহারকারীরা সেই namespace এ অবজেক্ট তৈরি করেন (বা তৈরি করার চেষ্টা করেন), যেমন Pods বা PersistentVolumeClaims।
  • প্রথমত, LimitRange admission controller সমস্ত Pods (এবং তাদের containers) এর জন্য ডিফল্ট request এবং limit মান প্রয়োগ করে যা compute resource requirements সেট করে না।
  • দ্বিতীয়ত, LimitRange ব্যবহার ট্র্যাক করে নিশ্চিত করতে যে এটি namespace এ উপস্থিত যেকোনো LimitRange এ সংজ্ঞায়িত রিসোর্স minimum, maximum এবং ratio অতিক্রম করে না।
  • আপনি যদি একটি LimitRange সীমাবদ্ধতা লঙ্ঘন করে এমন একটি অবজেক্ট (Pod বা PersistentVolumeClaim) তৈরি বা আপডেট করার চেষ্টা করেন, API সার্ভারে আপনার অনুরোধ HTTP স্ট্যাটাস কোড 403 Forbidden এবং লঙ্ঘিত সীমাবদ্ধতা ব্যাখ্যা করে একটি বার্তা সহ ব্যর্থ হবে।
  • আপনি যদি একটি namespace এ একটি LimitRange যোগ করেন যা compute-সম্পর্কিত রিসোর্স যেমন cpu এবং memory এ প্রযোজ্য, আপনাকে অবশ্যই সেই মানগুলির জন্য requests বা limits নির্দিষ্ট করতে হবে। অন্যথায়, সিস্টেম Pod তৈরি প্রত্যাখ্যান করতে পারে।
  • LimitRange যাচাইকরণ শুধুমাত্র Pod admission পর্যায়ে ঘটে, চলমান Pods এ নয়। আপনি যদি একটি LimitRange যোগ বা পরিবর্তন করেন, সেই namespace এ ইতিমধ্যে বিদ্যমান Pods অপরিবর্তিত থাকে।
  • যদি দুই বা ততোধিক LimitRange অবজেক্ট namespace এ থাকে, তাহলে কোন ডিফল্ট মান প্রয়োগ করা হবে তা নির্ধারণযোগ্য নয়।

Pods এর জন্য LimitRange এবং admission checks

একটি LimitRange এটি প্রয়োগ করা ডিফল্ট মানগুলির সামঞ্জস্য পরীক্ষা করে না। এর মানে হল যে LimitRange দ্বারা সেট করা limit এর জন্য একটি ডিফল্ট মান spec এ container এর জন্য নির্দিষ্ট request মানের চেয়ে কম হতে পারে যা একটি ক্লায়েন্ট API সার্ভারে জমা দেয়। যদি এটি ঘটে, চূড়ান্ত Pod শিডিউলযোগ্য হবে না।

উদাহরণস্বরূপ, আপনি এই ম্যানিফেস্ট দিয়ে একটি LimitRange সংজ্ঞায়িত করেন:

apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-resource-constraint
spec:
  limits:
  - default: # this section defines default limits
      cpu: 500m
    defaultRequest: # this section defines default requests
      cpu: 500m
    max: # max and min define the limit range
      cpu: "1"
    min:
      cpu: 100m
    type: Container

একটি Pod এর সাথে যা 700m এর একটি CPU resource request ঘোষণা করে, কিন্তু একটি limit নয়:

apiVersion: v1
kind: Pod
metadata:
  name: example-conflict-with-limitrange-cpu
spec:
  containers:
  - name: demo
    image: registry.k8s.io/pause:2.0
    resources:
      requests:
        cpu: 700m

তাহলে সেই Pod শিডিউল করা হবে না, এর মতো একটি ত্রুটি সহ ব্যর্থ হবে:

Pod "example-conflict-with-limitrange-cpu" is invalid: spec.containers[0].resources.requests: Invalid value: "700m": must be less than or equal to cpu limit

আপনি যদি request এবং limit উভয়ই সেট করেন, তাহলে সেই নতুন Pod একই LimitRange থাকা সত্ত্বেও সফলভাবে শিডিউল হবে:

apiVersion: v1
kind: Pod
metadata:
  name: example-no-conflict-with-limitrange-cpu
spec:
  containers:
  - name: demo
    image: registry.k8s.io/pause:2.0
    resources:
      requests:
        cpu: 700m
      limits:
        cpu: 700m

উদাহরণ রিসোর্স সীমাবদ্ধতা

LimitRange ব্যবহার করে তৈরি করা যেতে পারে এমন নীতির উদাহরণ হল:

  • 8 GiB RAM এবং 16 cores এর ক্ষমতা সহ একটি 2 node ক্লাস্টারে, একটি namespace এ Pods কে 100m CPU অনুরোধ করতে এবং CPU এর জন্য সর্বোচ্চ 500m limit এবং Memory এর জন্য 200Mi অনুরোধ এবং Memory এর জন্য সর্বোচ্চ 600Mi limit সীমাবদ্ধ করুন।
  • তাদের specs এ cpu এবং memory requests ছাড়া শুরু হওয়া Containers এর জন্য ডিফল্ট CPU limit এবং request 150m এবং memory ডিফল্ট request 300Mi সংজ্ঞায়িত করুন।

যে ক্ষেত্রে namespace এর মোট limits Pods/Containers এর limits এর সমষ্টির চেয়ে কম, রিসোর্সের জন্য প্রতিদ্বন্দ্বিতা হতে পারে। এই ক্ষেত্রে, Containers বা Pods তৈরি করা হবে না।

প্রতিদ্বন্দ্বিতা বা একটি LimitRange এর পরিবর্তন ইতিমধ্যে তৈরি করা রিসোর্সগুলিকে প্রভাবিত করবে না।

এর পরের কি

limits ব্যবহারের উদাহরণের জন্য, দেখুন:

প্রসঙ্গ এবং ঐতিহাসিক তথ্যের জন্য LimitRanger design document দেখুন।