diff --git a/content/bn/blog/_index.md b/content/bn/blog/_index.md index afb22d0c8c8b0..feaefbf8a39e6 100644 --- a/content/bn/blog/_index.md +++ b/content/bn/blog/_index.md @@ -4,7 +4,11 @@ linkTitle: ব্লগ menu: main: title: "ব্লগ" - weight: 40 - post: > -

কুবারনেটিস এবং সাধারণভাবে কন্টেইনার স্পেসের জন্য সাম্প্রতিক সংবাদ পড়ুন, এবং প্রেস থেকে সরাসরি প্রাপ্ত প্রযুক্তিগত কিভাবে-কী পেতে থাকুন।

+ weight: 20 --- +{{< comment >}} + +ব্লগে অবদান সম্পর্কে তথ্যের জন্য, দেখুন +https://kubernetes.io/docs/contribute/new-content/blogs-case-studies/#write-a-blog-post + +{{< /comment >}} diff --git a/content/bn/case-studies/_index.html b/content/bn/case-studies/_index.html index a552c723d1827..48b93d73c77b2 100644 --- a/content/bn/case-studies/_index.html +++ b/content/bn/case-studies/_index.html @@ -1,9 +1,13 @@ --- -title: কেস অনুযায়ী পরীক্ষা -linkTitle: কেস অনুযায়ী পরীক্ষা -bigheader: কুবারনেটিস ব্যবহারকারীদের কেস অনুযায়ী পরীক্ষা -abstract: কুবারনেটিস ব্যবহারকারীদের একটি সংগ্রহ যারা উৎপাদনে এটি ব্যবহার করে +title: কেস স্টাডিজ +linkTitle: কেস স্টাডিজ +bigheader: কুবারনেটিস ব্যবহারকারীদের কেস স্টাডিজ +abstract: কুবারনেটিস ব্যবহারকারীদের একটি সংগ্রহ যারা প্রোডাকশনে এটি ব্যবহার করে. layout: basic class: gridPage +body_class: caseStudies cid: caseStudies +menu: + main: + weight: 60 --- diff --git a/content/bn/community/code-of-conduct.md b/content/bn/community/code-of-conduct.md index 199a9bf5e994e..fb6ddecc17b3e 100644 --- a/content/bn/community/code-of-conduct.md +++ b/content/bn/community/code-of-conduct.md @@ -7,7 +7,7 @@ cid: code-of-conduct _কুবারনেটিস অনুসরণ করে [CNCF কোড অফ কন্ডাক্ট](https://github.com/cncf/foundation/blob/main/code-of-conduct.md)। CNCF CoC এর পাঠ্যটি নীচে প্রতিলিপি করা হয়েছে, -[commit 71412bb02](https://github.com/cncf/foundation/blob/71412bb029090d42ecbeadb39374a337bfb48a9c/code-of-conduct.md) হিসাবে_ +[commit 71412bb02](https://github.com/cncf/foundation/blob/71412bb029090d42ecbeadb39374a337bfb48a9c/code-of-conduct-languages/bn.md) হিসাবে_
{{< include "static/cncf-code-of-conduct.md" >}} diff --git a/content/bn/community/static/cncf-code-of-conduct.md b/content/bn/community/static/cncf-code-of-conduct.md new file mode 100644 index 0000000000000..87ccc3f7b4f35 --- /dev/null +++ b/content/bn/community/static/cncf-code-of-conduct.md @@ -0,0 +1,85 @@ + +## CNCF কমিউনিটি কোড অফ কন্ডাক্ট (CNCF Community Code of Conduct) v1.3 + +### কমিউনিটি কোড অফ কন্ডাক্ট (Contributor Code of Conduct) + +CNCF কমিউনিটির অবদানকারী, রক্ষণাবেক্ষণকারী এবং অংশগ্রহণকারী হিসাবে, এবং একটি উন্মুক্ত এবং একটি উন্মুক্ত +এবং স্বাগতম জানানো কমিউনিটিতে গড়ে তোলার স্বার্থে, যে সমস্ত লোক অংশগ্রহণ করে বা অবদান রেখে সমস্যাগুলি রিপোর্ট করা, +ফিচারগুলো অনুরোধ পোস্ট করা, ডকুমেন্টেশন আপডেট করা, পুল অনুরোধ বা প্যাচ জমা দেওয়া, কনফারেন্স বা ইভেন্টে যোগদান করা, +বা অন্যান্য কমিউনিটি বা প্রকল্পের কার্যকলাপে জড়িত থাকার মাধ্যমে তাদের সকলকে আমরা সম্মান করার অঙ্গীকার করি। + +আমরা বয়স, শরীরের আকার, বর্ণ, অক্ষমতা, জাতিগততা, অভিজ্ঞতার স্তর, পারিবারিক অবস্থা, লিঙ্গ, লিঙ্গ পরিচয় এবং অভিব্যক্তি, বৈবাহিক অবস্থা, সামরিক বা প্রবীণ অবস্থা, জাতীয়তা, ব্যক্তিগত চেহারা, জাতি, ধর্ম, যৌন দৃষ্টিভঙ্গি, আর্থ-সামাজিক অবস্থা, উপজাতি বা বৈচিত্র্যের অন্য কোনও মাত্রা নির্বিশেষে প্রত্যেকের জন্য CNCF কমিউনিটিয়ের অংশগ্রহণকে একটি হয়রানি-মুক্ত অভিজ্ঞতা তৈরি করতে প্রতিশ্রুতিবদ্ধ। + +## সুযোগ (Scope) + +এই আচরণবিধি প্রযোজ্য: +* প্রকল্প এবং কমিউনিটির স্থানগুলির মধ্যে, +* অন্যান্য স্থানগুলিতে যখন কোনও পৃথক CNCF কমিউনিটির অংশগ্রহণকারীর কথা বা ক্রিয়াগুলি কোনও CNCF প্রকল্প, CNCF কমিউনিটি বা অন্য কোনও CNCF কমিউনিটির অংশগ্রহণকারীর দিকে পরিচালিত হয় + +### CNCF ইভেন্টস (CNCF Events) + +পেশাদার ইভেন্ট কর্মীদের সাথে লিনাক্স ফাউন্ডেশন দ্বারা উত্পাদিত CNCF ইভেন্টগুলি ইভেন্ট পৃষ্ঠায় উপলব্ধ লিনাক্স ফাউন্ডেশন [ইভেন্টস কোড অফ কন্ডাক্ট] () দ্বারা পরিচালিত হয়। এটি CNCF আচরণবিধির সাথে একত্রে ব্যবহার করার জন্য ডিজাইন করা হয়েছে। + +## আমাদের মান (Our Standards) + +CNCF কমিউনিটি উন্মুক্ত, অন্তর্ভুক্তিমূলক এবং শ্রদ্ধাশীল। আমাদের কমিউনিটির প্রতিটি সদস্যের তাদের পরিচয়কে সম্মান করার অধিকার রয়েছে। + +ইতিবাচক পরিবেশে অবদান রাখে এমন আচরণের উদাহরণগুলির মধ্যে রয়েছে তবে সীমাবদ্ধ নয়: + +* অন্যান্য মানুষের প্রতি সহানুভূতি এবং দয়া প্রদর্শন করা +* ভিন্ন মতামত, দৃষ্টিভঙ্গি এবং অভিজ্ঞতার প্রতি শ্রদ্ধাশীল হওয়া +* গঠনমূলক প্রতিক্রিয়া দেওয়া এবং সদয়ভাবে গ্রহণ করা +* দায় স্বীকার করা এবং আমাদের ভুলের দ্বারা ক্ষতিগ্রস্থদের কাছে ক্ষমা চাওয়া, + এবং অভিজ্ঞতা থেকে শিখা +* যা কেবল ব্যক্তি হিসাবে আমাদের জন্য নয়, সামগ্রিক কমিউনিটির জন্য সর্বোত্তম সেদিকে + মনোনিবেশ করা +* স্বাগত এবং অন্তর্ভুক্তিমূলক ভাষা ব্যবহার করা + +অগ্রহণযোগ্য আচরণের উদাহরণগুলির মধ্যে রয়েছে তবে সীমাবদ্ধ নয়: + +* যৌন ভাষা বা চিত্রাবলীর ব্যবহার +* ট্রলিং, অপমানজনক বা অবমাননাকর মন্তব্য এবং ব্যক্তিগত বা রাজনৈতিক আক্রমণ +* যে কোনও রূপে পাবলিক বা প্রাইভেট হয়রানি +* অন্যদের ব্যক্তিগত তথ্য প্রকাশ, যেমন তাদের স্পষ্ট অনুমতি ছাড়া + প্রকৃত বা ইমেল ঠিকানা প্রকাশ করা +* সহিংসতা, সহিংসতার হুমকি দেওয়া বা অন্যকে হিংসাত্মক আচরণে জড়িত হতে উত্সাহিত করা +* কারও সম্মতি ছাড়াই অনুসরণ করা বা অনুসরণ করা +* অবাঞ্ছিত শারীরিক যোগাযোগ +* অবাঞ্ছিত যৌন বা রোমান্টিক মনোযোগ বা অগ্রগতি +* অন্যান্য আচরণ যা পেশাদার পরিবেশে যুক্তিসঙ্গতভাবে অনুপযুক্ত বলে + বিবেচিত হতে পারে + +নিম্নলিখিত আচরণগুলিও নিষিদ্ধ: + +* আচরণবিধির তদন্তের সাথে সম্পর্কিত জেনেশুনে মিথ্যা বা বিভ্রান্তিকর তথ্য সরবরাহ করা বা অন্যথায় ইচ্ছাকৃতভাবে তদন্তে হস্তক্ষেপ করা। +* কোনও ব্যক্তির বিরুদ্ধে প্রতিশোধ নেওয়া কারণ তারা কোনও ঘটনা রিপোর্ট করেছে বা সাক্ষী হিসাবে কোনও ঘটনা সম্পর্কে তথ্য সরবরাহ করেছে। + +প্রকল্প রক্ষণাবেক্ষণকারীদের কমেন্ট, কমিট, কোড, উইকি এডিট, ইস্যু এবং অন্যান্য অবদান যা এই আচরণবিধির সাথে সামঞ্জস্যপূর্ণ নয় তা অপসারণ, এডিট বা প্রত্যাখ্যান করার অধিকার এবং দায়িত্ব রয়েছে। +এই আচরণবিধি গ্রহণ করে, প্রকল্প রক্ষণাবেক্ষণকারীরা একটি CNCF প্রকল্প পরিচালনার প্রতিটি ক্ষেত্রে এই নীতিগুলি ন্যায্য এবং ধারাবাহিকভাবে প্রয়োগ +করার জন্য প্রতিশ্রুতিবদ্ধ। +প্রকল্প রক্ষণাবেক্ষণকারীরা যারা আচরণবিধি অনুসরণ বা প্রয়োগ করে না তাদের প্রকল্প দল থেকে অস্থায়ীভাবে বা স্থায়ীভাবে অপসারণ করা যেতে পারে। + +## প্রতিবেদন (Reporting) + +কুবারনেটিস কমিউনিটির মধ্যে ঘটে যাওয়া ঘটনাগুলির জন্য, মাধ্যমে [কুবারনেটিস কোড অফ কন্ডাক্ট কমিটি](https://git.k8s.io/community/committee-code-of-conduct) এর সাথে যোগাযোগ করুন। আপনি তিন কার্যদিবসের মধ্যে একটি প্রতিক্রিয়া আশা করতে পারেন। + +অন্যান্য প্রকল্পের জন্য, বা প্রকল্প-অজ্ঞেয়বাদী বা একাধিক CNCF প্রকল্পকে প্রভাবিত করে এমন ঘটনাগুলির জন্য, দয়া করে এর মাধ্যমে [CNCF কোড অফ কন্ডাক্ট কমিটি](https://www.cncf.io/conduct/committee/) এর সাথে যোগাযোগ করুন। বিকল্পভাবে, আপনি আপনার প্রতিবেদন জমা দেওয়ার জন্য [CNCF কোড অফ কন্ডাক্ট কমিটি](https://www.cncf.io/conduct/committee/) এর যে কোনও স্বতন্ত্র সদস্যের সাথে যোগাযোগ করতে পারেন। বেনামে কীভাবে রিপোর্ট জমা দিতে হয়, সেই সহ কীভাবে রিপোর্ট জমা দিতে হয়, সেই বিষয়ে আরও বিস্তারিত নির্দেশাবলীর জন্য অনুগ্রহ করে আমাদের [ইনসিডেন্ট রেজোলিউশন প্রসিডিউরস](https://github.com/cncf/foundation/blob/main/code-of-conduct/coc-incident-resolution-procedures.md) দেখুন। আপনি তিন কার্যদিবসের মধ্যে একটি প্রতিক্রিয়া আশা করতে পারেন। + +লিনাক্স ফাউন্ডেশন দ্বারা উত্পাদিত CNCF ইভেন্টে ঘটে যাওয়া ঘটনাগুলির জন্য, দয়া করে সাথে যোগাযোগ করুন। + +## প্রয়োগ (Enforcement) + +একটি রিপোর্ট করা ঘটনার পর্যালোচনা ও তদন্তের পরে, সিওসি প্রতিক্রিয়া দল যার এখতিয়ার রয়েছে তারা এই আচরণবিধি এবং এর সম্পর্কিত ডকুমেন্টেশনের ভিত্তিতে কোন পদক্ষেপটি উপযুক্ত তা নির্ধারণ করবে। + +কোন আচরণবিধির ঘটনাগুলি প্রকল্প নেতৃত্ব দ্বারা পরিচালিত হয়, কোন ঘটনাগুলি CNCF কোড অফ কন্ডাক্ট কমিটি দ্বারা পরিচালিত হয় এবং কোন ঘটনাগুলি লিনাক্স ফাউন্ডেশন (এর ইভেন্ট টিম সহ) দ্বারা পরিচালিত হয় সে সম্পর্কে তথ্যের জন্য আমাদের [এখতিয়ার নীতি](https://github.com/cncf/foundation/blob/main/code-of-conduct/coc-committee-jurisdiction-policy.md) দেখুন। + +## সংশোধনী (Amendments) + +CNCF সনদের সাথে সামঞ্জস্যপূর্ণ, এই আচরণবিধিতে যে কোনও উল্লেখযোগ্য পরিবর্তন অবশ্যই প্রযুক্তিগত তদারকি কমিটি দ্বারা অনুমোদিত হতে হবে। + +## স্বীকারোক্তি (Acknowledgements) + +এই আচরণবিধিটি অবদানকারী চুক্তি থেকে অভিযোজিত +(http://contributor-covenant.org), সংস্করণ 2.0 এখানে উপলব্ধ +http://contributor-covenant.org/version/2/0/code_of_conduct/ diff --git a/content/bn/docs/concepts/_index.md b/content/bn/docs/concepts/_index.md index ac101b6a419e0..29cff2cc8e43a 100644 --- a/content/bn/docs/concepts/_index.md +++ b/content/bn/docs/concepts/_index.md @@ -10,4 +10,5 @@ weight: 40 ধারণা বিভাগটি আপনাকে কুবারনেটিস সিস্টেমের অংশগুলো এবং কুবারনেটিস আপনার {{< glossary_tooltip text="ক্লাস্টারের" term_id="cluster" length="all" >}} প্রতিনিধিত্ব করার জন্য যে অ্যাবস্ট্রাকশনগুলো ব্যবহার করে সেগুলো সম্পর্কে শিখতে সাহায্য করে এবং কুবারনেটিস কীভাবে কাজ করে সে সম্পর্কে আপনাকে গভীরভাবে বুঝতে সাহায্য করে । + diff --git a/content/bn/docs/concepts/extend-kubernetes/control-plane.png b/content/bn/docs/concepts/extend-kubernetes/control-plane.png new file mode 100644 index 0000000000000..fa61599e94118 Binary files /dev/null and b/content/bn/docs/concepts/extend-kubernetes/control-plane.png differ diff --git a/content/bn/docs/concepts/workloads/_index.md b/content/bn/docs/concepts/workloads/_index.md new file mode 100644 index 0000000000000..ec2432c66a9a2 --- /dev/null +++ b/content/bn/docs/concepts/workloads/_index.md @@ -0,0 +1,91 @@ +--- +title: "ওয়ার্কলোড" +weight: 55 +description: > + পড বুঝুন, কুবারনেটিসের সবচেয়ে ছোট ডেপ্লয়বল কম্পিউট অবজেক্ট এবং উচ্চ-লেভেল অবস্ট্রাক্শন যা আপনাকে সেগুলো চালাতে সাহায্য করে । +no_list: true +card: + title: ওয়ার্কলোড এবং পড + name: concepts + weight: 60 +--- + +{{< glossary_definition term_id="workload" length="short" >}} +আপনার ওয়ার্কলোড একটি একক উপাদান বা একাধিক যা একসাথে কাজ করে, কুবারনেটিসে আপনি এটিকে +[_pods_](/bn/docs/concepts/workloads/pods) এর একটি সেটের মধ্যে চালান। +কুবারনেটিসে, একটি পড আপনার ক্লাস্টারে +{{< glossary_tooltip text="কন্টেইনারগুলোর" term_id="container" >}} চলমান একটি সেট উপস্থাপন করে৷ + +কুবারনেটিস পডের একটি [সংজ্ঞায়িত জীবনচক্র](/bn/docs/concepts/workloads/pods/pod-lifecycle/). +উদাহরণস্বরূপ, একবার আপনার ক্লাস্টারে একটি পড চলমান হলে +{{< glossary_tooltip text="নোড" term_id="node" >}} যেখানে সেই পডটি চলছে +সেখানে একটি গুরুতর ত্রুটির অর্থ হলো সেই নোডের সমস্ত পড ব্যর্থ হয়েছে ৷ কুবারনেটিস ব্যর্থতার সেই লেভেলটিকে চূড়ান্ত হিসাবে বিবেচনা করে: +আপনাকে পুনরুদ্ধার করার জন্য একটি নতুন পড তৈরি করতে হবে, এমনকি যদি নোডটি পরে সুস্থ হয়ে ওঠে। + +যাইহোক, জীবনকে যথেষ্ট সহজ করতে, আপনাকে প্রতিটি পড সরাসরি পরিচালনা করতে হবে না। +পরিবর্তে, আপনি _ওয়ার্কলোড রিসোর্স_ ব্যবহার করতে পারেন যা আপনার পক্ষ থেকে পডের একটি সেট পরিচালনা করে। +এই রিসোর্সগুলো {{< glossary_tooltip term_id="controller" text="কন্ট্রোলার" >}} কনফিগার করে +যা নিশ্চিত করে যে সঠিক সংখ্যক পড চলছে, আপনার নির্দিষ্ট +স্টেটের সাথে মেলে৷ + +কুবারনেটিস বেশ কয়েকটি বিল্ট ইন ওয়ার্কলোড রিসোর্স সরবরাহ করে: + +* [ডিপ্লয়মেন্ট](/bn/docs/concepts/workloads/controllers/deployment/) এবং [রেপ্লিকাসেট](/bn/docs/concepts/workloads/controllers/replicaset/), + (ডিপ্লয়মেন্ট হলো একটি প্রতিস্থাপন ব্যবস্থা লিগেসি + {{< glossary_tooltip text="ReplicationController" term_id="replication-controller" >}} API এর) + ক্লাস্টারে একটি স্টেটলেস অ্যাপ্লিকেশান ওয়ার্কলোড পরিচালনা করার জন্য ডিপ্লয়মেন্ট একটি উপযুক্ত ব্যবস্থা , যেখানে + ডিপ্লয়মেন্টের যেকোনো পড বিনিময়যোগ্য এবং প্রয়োজনে প্রতিস্থাপন করা যেতে পারে। +* [স্টেটফুলসেট](/bn/docs/concepts/workloads/controllers/statefulset/) + আপনাকে এক বা একাধিক সম্পর্কিত পড চালাতে দেয় যা কোনোভাবে ট্র্যাক স্টেট করে। উদাহরণস্বরূপ, যদি আপনার + ওয়ার্কলোড ক্রমাগতভাবে ডেটা রেকর্ড করে, আপনি একটি স্টেটফুলসেট চালাতে পারেন যা প্রতিটি পডের সাথে একটি + [PersistentVolume](/bn/docs/concepts/storage/persistent-volumes/) এর সাথে মেলে। আপনার কোড, সেই স্টেটফুলসেটের + জন্য পডগুলিতে চলমান, সামগ্রিক স্থিতিস্থাপকতা উন্নত করতে একই স্টেটফুলসেটের অন্যান্য + পডগুলিতে ডেটা প্রতিলিপি করতে পারে। +* একটি [ডেমনসেট](/bn/docs/concepts/workloads/controllers/daemonset/) পডগুলোকে সংজ্ঞায়িত করে + যা একটি নির্দিষ্ট {{< glossary_tooltip text="নোড" term_id="node" >}} লোকাল সুবিধা প্রদান করে; + প্রতিবার আপনি আপনার ক্লাস্টারে একটি নোড যুক্ত করেন যা একটি ডেমনসেটের স্পেসিফিকেশনের সাথে মেলে, + কন্ট্রোল প্লেন সেই ডেমনসেটের জন্য একটি পডকে নতুন নোডে নির্ধারণ করে। + ডেমনসেটের প্রতিটি পড একটি ক্লাসিক Unix / POSIX সার্ভারে সিস্টেম ডেমনের মতো একই ভূমিকা পালন + করে। একটি ডেমনসেট আপনার ক্লাস্টার পরিচালনার জন্য গুরুত্বপূর্ণ হতে পারে, যেমন একটি প্লাগইন নোড অ্যাক্সেস করতে দেয় + [ক্লাস্টার নেটওয়ার্কিং](/bn/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-network-model), + এটি আপনাকে নোড পরিচালনা করতে সাহায্য করতে পারে, + অথবা এটি ঐচ্ছিক আচরণ প্রদান করতে পারে যা আপনি যে কন্টেইনার প্ল্যাটফর্মটি চালাচ্ছেন তা উন্নত করে। +* আপনি একটি + [Job](/bn/docs/concepts/workloads/controllers/job/) + এবং / বা একটি [CronJob](/bn/docs/concepts/workloads/controllers/cron-jobs/) + ব্যবহার করতে পারেন যা কাজগুলোকে চিহ্নিত করবে + যা সমাপ্তির জন্য চলবে পরে থামবে। + একটি Job একটি একক টাস্কের প্রতিনিধিত্ব করে, + যেখানে প্রতিটি CronJob একটি শিডিউল অনুযায়ী পুনরাবৃত্তি করে। + +বৃহত্তর কুবারনেটস ইকোসিস্টেমে, আপনি তৃতীয় পক্ষের ওয়ার্কলোডের রিসোর্সগুলো খুঁজে পেতে পারেন +যা অতিরিক্ত আচরণ প্রদান করে। একটি +[কাস্টম রিসোর্স ডেফিনিশন](/bn/docs/concepts/extend-kubernetes/api-extension/custom-resources/) ব্যবহার করে, +আপনি যদি কুবারনেটসের মূল অংশ নয় এমন একটি নির্দিষ্ট আচরণ চান তাহলে আপনি একটি তৃতীয় পক্ষের ওয়ার্কলোডের রিসোর্স যোগ করতে পারেন । +উদাহরণস্বরূপ, আপনি যদি আপনার অ্যাপ্লিকেশনের জন্য পডগুলির একটি গ্রুপ চালাতে চান +কিন্তু কাজ বন্ধ করতে চান যদি না _সব_ পডগুলো উপলব্ধ হয় (সম্ভবত কিছু উচ্চ-থ্রুপুট ডিস্ট্রিবিউট করা কাজের জন্য), +তাহলে আপনি সেই ফিচারটি প্রদান করে এমন একটি এক্সটেনশন বাস্তবায়ন বা ইনস্টল করতে পারেন। + +## {{% heading "whatsnext" %}} + +ওয়ার্কলোড ম্যানেজমেন্টের জন্য প্রতিটি API ধরণের সম্পর্কে পড়ার পাশাপাশি, +আপনি কীভাবে নির্দিষ্ট কাজগুলো করতে হবে তা পড়তে পারেন: + +* [একটি ডিপ্লয়মেন্ট ব্যবহার করে একটি স্টেটলেস অ্যাপ্লিকেশন চালান](/bn/docs/tasks/run-application/run-stateless-application-deployment/) +* একটি [একক উদাহরণ](/bn/docs/tasks/run-application/run-single-instance-stateful-application/) হিসাবে একটি স্টেটফুল অ্যাপ্লিকেশন চালান + অথবা একটি [রেপ্লিকেটেড সেট](/bn/docs/tasks/run-application/run-replicated-stateful-application/) হিসাবে +* [CronJob দিয়ে স্বয়ংক্রিয় কাজ চালান](/bn/docs/tasks/job/automated-tasks-with-cron-jobs/) + +কনফিগারেশন থেকে কোড আলাদা করার জন্য কুবারনেটিসের প্রক্রিয়া সম্পর্কে জানতে, +[কনফিগারেশন](/bn/docs/concepts/configuration/) দেখুন। + +কুবারনেটিস কীভাবে অ্যাপ্লিকেশনগুলির জন্য পডগুলো পরিচালনা করে +সে সম্পর্কে পটভূমি প্রদান করে এমন দুটি সাপোর্টকারী ধারণা রয়েছে: +* [গার্বেজ কালেকশন](/bn/docs/concepts/architecture/garbage-collection/) আপনার ক্লাস্টার + থেকে বস্তুগুলিকে তাদের _মালিকানাধীন রিসোর্স_ সরিয়ে ফেলার পরে পরিষ্কার করে। +* [_time-to-live after finished_ কন্ট্রোলার](/bn/docs/concepts/workloads/controllers/ttlafterfinished/) + কাজগুলো সম্পূর্ণ করার পর একটি নির্দিষ্ট সময় পেরিয়ে গেলে তা সরিয়ে দেয়। + +একবার আপনার অ্যাপ্লিকেশানটি চালু হয়ে গেলে, আপনি এটিকে একটি [সার্ভিস](/bn/docs/concepts/services-networking/service/) +হিসাবে ইন্টারনেটে উপলব্ধ করতে চাইতে পারেন বা, শুধুমাত্র ওয়েব অ্যাপ্লিকেশনের জন্য, +একটি [ইনগ্রেস](/bn/docs/concepts/services-networking/ingress) ব্যবহার করে । diff --git a/content/bn/docs/concepts/workloads/controllers/_index.md b/content/bn/docs/concepts/workloads/controllers/_index.md new file mode 100644 index 0000000000000..fa6a96f6830da --- /dev/null +++ b/content/bn/docs/concepts/workloads/controllers/_index.md @@ -0,0 +1,61 @@ +--- +title: "ওয়ার্কলোড ম্যানেজমেন্ট" +weight: 20 +simple_list: true +--- + +কুবারনেটিস বিভিন্ন বিল্ট ইন API দেয় ঘোষণামূলক ম্যানেজমেন্ট +{{< glossary_tooltip text="ওয়ার্কলোড" term_id="workload" >}} +এবং ওয়ার্কলোডের উপাদানের জন্য। + +অবশেষে, আপনার অ্যাপ্লিকেশন {{< glossary_tooltip term_id="Pod" text="পডের" >}} +মধ্যে রান হয় কন্টেইনার হিসেবে; যাইহোক, একক পড ম্যানেজ করা কষ্টসাধ্য। +উদাহরণস্বরূপ, যদি একটি পড ব্যর্থ হয়, আপনি তাহলে নতুন পড চালিয়ে এটিকে +রিপ্লেস করতে চাইবেন। কুবারনেটিস আপনার জন্য এটি করে দিবে। + +আপনি ওয়ার্ক লোড তৈরি করার জন্য কুবারনেটিস API ব্যবহার করতে পারেন +{{< glossary_tooltip text="অবজেক্ট" term_id="object" >}} যা পড +থেকে বেশি অবস্ট্রাক্শন লেভেল প্রদর্শন করে, তারপর কুবারনেটিস +{{< glossary_tooltip text="কন্ট্রোল প্লেন" term_id="control-plane" >}} স্বয়ংক্রিয়ভাবে আপনার +পক্ষ থেকে পড অবজেক্ট পরিচালনা করে, আপনার সংজ্ঞায়িত ওয়ার্কলোড অবজেক্টের স্পেসিফিকেশনের উপর ভিত্তি করে। + +ওয়ার্কলোড পরিচালনার জন্য বিল্ট ইন API গুলো হলো: + +[ডিপ্লয়মেন্ট](/bn/docs/concepts/workloads/controllers/deployment/) (এবং, পরোক্ষভাবে, [রেপ্লিকাসেট](/bn/docs/concepts/workloads/controllers/replicaset/)), +আপনার ক্লাস্টারে একটি অ্যাপ্লিকেশন চালানোর সবচেয়ে সাধারণ উপায়। +ক্লাস্টারে একটি স্টেটলেস অ্যাপ্লিকেশান ওয়ার্কলোড পরিচালনা করার জন্য ডিপ্লয়মেন্ট একটি উপযুক্ত ব্যবস্থা , যেখানে +ডিপ্লয়মেন্টের যেকোনো পড বিনিময়যোগ্য এবং প্রয়োজনে প্রতিস্থাপন করা যেতে পারে। +(ডিপ্লয়মেন্ট হলো একটি প্রতিস্থাপন ব্যবস্থা লিগেসি +{{< glossary_tooltip text="ReplicationController" term_id="replication-controller" >}} API এর). + +একটি [স্টেটফুলসেট](/bn/docs/concepts/workloads/controllers/statefulset/) আপনাকে অনুমতি দেয় +এক বা একাধিক পড পরিচালনা করার – সব একই অ্যাপ্লিকেশন কোড চালায় – যেখানে পড +একটি স্বতন্ত্র পরিচয় রাখতে চায়। এটি ডিপ্লয়মেন্ট থেকে ভিন্ন যেখানে +পড বিনিময়যোগ্য হয়ে থাকে । +স্টেটফুলসেটের সাধারণ কাজ হলো পড এবং পারসিসটেন্ট স্টোরেজ এর মধ্যে একটি লিঙ্ক তৈরি করা। +উদাহরণস্বরূপ, আপনি একটি স্টেটফুল সেট চালাতে পারেন যা প্রতিটি পডকে সংযুক্ত করে +একটি [PersistentVolume](/bn/docs/concepts/storage/persistent-volumes/) এর সাহায্যে।যদি +স্টেটফুলসেটের একটি পডও ব্যর্থ হয়, তাহলে কুবারনেটিস একটি প্রতিস্থাপন পড তৈরি করে +যা একই PersistentVolume এর সাথে সংযুক্ত থাকে। + +একটি [ডেমনসেট](/bn/docs/concepts/workloads/controllers/daemonset/) পডগুলোকে সংজ্ঞায়িত করে +যা একটি নির্দিষ্ট {{< glossary_tooltip text="নোড" term_id="node" >}} লোকাল সুবিধা প্রদান করে; +উদাহরণস্বরূপ, ড্রাইভার নোডের কন্টেইনারগুলোকে স্টোরেজ সিস্টেম অ্যাক্সেস করতে দেয়। আপনি তখন ডেমনসেট ব্যবহার করতে পারেন +যখন ড্রাইভার, বা অন্যান্য নোড-লেভেলের সার্ভিস,নোডে চালাতে হবে যেখানে এটি দরকারী। +ডেমনসেটের প্রতিটি পড একটি ক্লাসিক Unix / POSIX সার্ভারে সিস্টেম ডেমনের মতো +একই ভূমিকা পালন করে। +একটি ডেমনসেট আপনার ক্লাস্টার পরিচালনার জন্য গুরুত্বপূর্ণ হতে পারে, +যেমন একটি প্লাগইন নোড অ্যাক্সেস করতে দেয় +[ক্লাস্টার নেটওয়ার্কিং](/bn/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-network-model), +এটি আপনাকে নোড পরিচালনা করতে সাহায্য করতে পারে, +বা এটি কম সুবিধা প্রদান করতে পারে যা আপনি যে কন্টেইনার প্ল্যাটফর্মটি চালাচ্ছেন তা উন্নত করে। +আপনি আপনার ক্লাস্টারের প্রতিটি নোড জুড়ে বা শুধুমাত্র একটি উপসেট জুড়ে ডেমনসেট (এবং তাদের পড) চালাতে পারেন (উদাহরণস্বরূপ, +শুধুমাত্র GPU ইনস্টল করা নোডগুলিতে GPU এক্সিলারেটর ড্রাইভার ইনস্টল করুন)। + +আপনি একটি [Job](/bn/docs/concepts/workloads/controllers/job/) এবং / বা +একটি [CronJob](/bn/docs/concepts/workloads/controllers/cron-jobs/) ব্যবহার করতে পারেন +যা কাজগুলোকে চিহ্নিত করবে যা সমাপ্তির জন্য চলবে পরে থামবে। একটি Job একটি +একক টাস্কের প্রতিনিধিত্ব করে, যেখানে প্রতিটি CronJob একটি শিডিউল অনুযায়ী পুনরাবৃত্তি করে। + +এই বিভাগে অন্যান্য বিষয়: + diff --git a/content/bn/docs/contribute/_index.md b/content/bn/docs/contribute/_index.md index 1b3b2909fcd9f..db7d22f881f6b 100644 --- a/content/bn/docs/contribute/_index.md +++ b/content/bn/docs/contribute/_index.md @@ -1,6 +1,6 @@ --- -content_type: ধারণা -title: অবদান রাখো K8s ডকুমেনটেশনে +content_type: concept +title: কুবারনেটিসে অবদান linktitle: অবদান main_menu: true no_list: true @@ -8,181 +8,24 @@ weight: 80 card: name: অবদান weight: 10 - title: K8s এ অবদান রাখা শুরু করুন + title: কুবারনেটিসে অবদান --- -*কুবারনেটিস নতুন এবং অভিজ্ঞ সকল অবদানকারীদের থেকে উন্নতিকে স্বাগত জানায়!* +কুবারনেটিসে অবদান রাখার অনেক উপায় আছে। আপনি নতুন ফিচারগুলোর জন্য ডিজাইনে কাজ করতে পারেন, +আপনি আমাদের কাছে ইতিমধ্যে থাকা কোডটি ডকুমেন্ট করতে পারেন, আপনি আমাদের [ব্লগের](/bn/blog) জন্য লিখতে পারেন। +আরও আছে: আপনি সেই নতুন ফিচারগুলোর বাস্তবায়ন করতে পারেন বা বাগগুলি ঠিক করতে পারেন৷ আপনি লোকেদের আমাদের +অবদানকারী কমিউনিটিতে যোগ দিতে সাহায্য করতে পারেন, বা বিদ্যমান অবদানকারীদের সাপোর্ট করতে পারেন৷ -{{< note >}} -সাধারণভাবে কুবারনেটিস অবদান সম্পর্কে আরও জানতে, দেখুন -[অবদানকারীদের জন্য ডকুমেন্টেশন](https://www.কুবারনেটিস.dev/docs/)। -{{< /note >}} +এই সমস্ত ভিন্ন উপায়ে প্রকল্পে পার্থক্য আনতে, আমরা - কুবারনেটিস - +একটি ডেডিকেটেড ওয়েবসাইট তৈরি করেছি: https://k8s.dev/। +কুবারনেটিসে অবদান রাখার বিষয়ে আরও জানতে আপনি সেখানে যেতে পারেন। -এই ওয়েবসাইটটি [কুবারনেটিস SIG Docs](/docs/contribute/#get-involved-with-sig-docs) দ্বারা রক্ষণাবেক্ষণ করা হয় । +আপনি যদি বিশেষভাবে _এই_ ডকুমেন্টেশনে অবদান রাখার বিষয়ে জানতে চান, পড়ুন +[কুবারনেটিস ডকুমেন্টেশনে অবদান রাখুন](/docs/contribute/docs/)। -কুবারনেটিস ডকুমেন্টেশন অবদানকারী: - -- বিদ্যমান সামগ্রী উন্নত করুন -- নতুন কন্টেন্ট তৈরি করুন -- ডকুমেন্টেশন অনুবাদ করুন -- কুবারনেটিস রিলিজ চক্রের ডকুমেন্টেশন অংশগুলি পরিচালনা এবং প্রকাশ করুন - - - -## শুরু করুন - -যে কেউ ডকুমেন্টেশন সম্পর্কে একটি সমস্যা (issue) খুলতে পারে, বা পরিবর্তন করতে পারে - পুল রিকুয়েস্ট(pull request) দেয়ার মাধ্যমে -[`কুবারনেটিস/website` GitHub Repository](https://github.com/kubernetes/website) এ। আপনাকে -[git](https://git-scm.com/) এবং -[GitHub](https://lab.github.com/) সম্পর্কে জানতে হবে -কুবারনেটিস সম্প্রদায়ে কার্যকরভাবে কাজ করার জন্য। - - -ডকুমেন্টেশনের সাথে জড়িত হতে: - -1. CNCF [কন্ট্রিবিউটর লাইসেন্স চুক্তি](https://github.com/kubernetes/community/blob/master/CLA.md) স্বাক্ষর করুন। -2. [ডকুমেন্টেশন রিপোজিটরি](https://github.com/kubernetes/website) এবং ওয়েবসাইটের [স্ট্যাটিক সাইট জেনারেটর](https://gohugo.io) এর সাথে নিজেকে পরিচিত করুন । -3. নিশ্চিত করুন যে আপনি প্রাথমিক প্রক্রিয়াগুলি বুঝতে পেরেছেন৷ - [একটি পুল অনুরোধ খোলার](/docs/contribute/new-content/open-a-pr/) এবং - [পরিবর্তন পর্যালোচনা করার](/docs/contribute/review/reviewing-prs/)। - - - - - -{{< mermaid >}} -flowchart TB -subgraph third[পুল রিকোয়েস্ট খুলুন] -direction TB -U[ ] -.- -Q[বিষয়বস্তু উন্নত] --- N[সামগ্রী তৈরি করুন] -N --- O[Translate docs] -O --- P[Docs এর অংশগুলি পরিচালনা/প্রকাশ করুন
K8s রিলিজ চক্রের থেকে] - -end - -subgraph second[পুনঃমূল্যায়ন] -direction TB - T[ ] -.- - D[দেখুন
K8s/website
ভান্ডার] --- E[দেখুন
Hugo static সাইট
generator] - E --- F[মৌলিক
GitHub কমান্ড বুঝুন] - F --- G[পর্যালোচনা করো খোলা পুল রিকোয়েস্ট
এবং পর্যালোচনা পরিবর্তন করুন
প্রসেস] -end - -subgraph first[Sign up] - direction TB - S[ ] -.- - B[স্বাক্ষর করুন CNCF
অবদানকারী
লাইসেন্স চুক্তি] --- C[সিগ-Docs এ যোগ দিন
Slack channel] - C --- V[কুবারনেটিস-sig-docs-এ যোগ দিন
মেইলিং তালিকা] - V --- M[সাপ্তাহিকভাবে যোগদান করুন
সিগ-Docs কল
অথবা slack বৈঠকে] -end - -A([fa:fa-user নতুন
অবদানকারী]) --> first -A --> second -A --> third -A --> H[প্রশ্ন করো!!!] - - -classDef grey fill:#dddddd,stroke:#ffffff,stroke-width:px,color:#000000, font-size:15px; -classDef white fill:#ffffff,stroke:#000,stroke-width:px,color:#000,font-weight:bold -classDef spacewhite fill:#ffffff,stroke:#fff,stroke-width:0px,color:#000 -class A,B,C,D,E,F,G,H,M,Q,N,O,P,V grey -class S,T,U spacewhite -class first,second,third white -{{}} -***চিত্র - একজন নতুন অবদানকারীর জন্য শুরু করা*** - -উপরের চিত্রটি নতুন অবদানকারীদের জন্য একটি রোডম্যাপের রূপরেখা দেয়৷ আপনি `Sign up` এবং `Review` এর জন্য কিছু বা সমস্ত ধাপ অনুসরণ করতে পারেন। এখন আপনি 'Open PR'-এর অধীনে তালিকাভুক্ত কিছু সহ আপনার অবদানের উদ্দেশ্যগুলি অর্জনকারী PR খুলতে প্রস্তুত। আবার,আমরা প্রশ্নকে সবসময় স্বাগত জানাই! - - - -কিছু কাজের জন্য কুবারনেটিস সংস্থায় আরও বিশ্বাস এবং আরও অ্যাক্সেসের প্রয়োজন। -এ সম্পর্কে আরো বিস্তারিত জানার জন্য [SIG Docs এ অংশগ্রহণ করে](/docs/contribute/participate/) দেখুন -ভূমিকা এবং অনুমতি সমুহ। - - - - -## আপনার প্রথম অবদান - -আপনি আগে থেকে বেশ কয়েকটি ধাপ পর্যালোচনা করে আপনার প্রথম অবদানের জন্য প্রস্তুত করতে পারেন। নীচের চিত্রটি ধাপগুলিকে রূপরেখা দেয় এবং বিশদগুলি অনুসরণ করে৷ - - - - -{{< mermaid >}} -flowchart LR - subgraph second[প্রথম অবদান] - direction TB - S[ ] -.- - G[অন্যদের থেকে পুল রিকোয়েস্ট পর্যালোচনা করুন
K8s সদস্যদের মধ্য থেকে] --> - A[K8s/website চেক করুন
সমস্যা তালিকার জন্য
ভাল good first PRs] --> B[একটি পুল রিকোয়েস্ট খুলুন!!] - end - subgraph first[প্রস্তাবিত প্রস্তুতি] - direction TB - T[ ] -.- - D[অবদান ওভারভিউ পড়ুন] -->E[K8s বিষয়বস্তু পড়ুন
এবং শৈলী গাইড] - E --> F[Hugo পাতা সম্পর্কে জানুন
বিষয়বস্তুর প্রকার
এবং শর্টকোড] - end - - - first ----> second - - -classDef grey fill:#dddddd,stroke:#ffffff,stroke-width:px,color:#000000, font-size:15px; -classDef white fill:#ffffff,stroke:#000,stroke-width:px,color:#000,font-weight:bold -classDef spacewhite fill:#ffffff,stroke:#fff,stroke-width:0px,color:#000 -class A,B,D,E,F,G grey -class S,T spacewhite -class first,second white -{{}} -***চিত্র - আপনার প্রথম অবদানের জন্য প্রস্তুতি*** - - - -- [কন্ট্রিবিউশন ওভারভিউ](/docs/contribute/new-content/overview/) পড়ুন এবং - আপনি যেসব উপায়ে অবদান রাখতে পারেন সেসব সম্পর্কে জানুন । -- [`kubernetes/website` সমস্যা তালিকা](https://github.com/kubernetes/website/issues/) চেক করুন যা - ভালো এন্ট্রি পয়েন্ট তৈরি করে এমন সমস্যার জন্য। -- [GitHub ব্যবহার করে একটি পুল অনুরোধ খুলুন](/docs/contribute/new-content/open-a-pr/#changes-using-github) - বিদ্যমান ডকুমেন্টেশনে এবং GitHub-এ ফাইল করা সমস্যা ( filing issues in GitHub) সম্পর্কে আরও জানুন। -- অন্য কুবারনেটিস সম্প্রদায়ের সদস্যসদের থেকে - সঠিকতা এবং ভাষার জন্য [পুলের অনুরোধ পর্যালোচনা করুন](/docs/contribute/review/reviewing-prs/) -- কুবারনেটিস [content](/docs/contribute/style/content-guide/) এবং [শৈলী নির্দেশিকা](/docs/contribute/style/style-guide/) পড়ুন - যাতে আপনি অবহিত মন্তব্য করতে পারেন। -- [পৃষ্ঠা বিষয়বস্তুর প্রকার](/docs/contribute/style/page-content-types/) সম্পর্কে জানুন - এবং [Hugo শর্ট কোডস](/docs/contribute/style/hugo-shortcodes/)। - -## পরবর্তী পদক্ষেপ - -- ভান্ডার থেকে শিখুন [একটি স্থানীয় ক্লোন (local clone) থেকে কাজ করা](/docs/contribute/new-content/open-a-pr/#fork-the-repo) । -- ডকুমেনটেশন কর [একটি রিলিজের বৈশিষ্ট্য](/docs/contribute/new-content/new-features/)। -- [SIG Docs](/docs/contribute/participate/) এ অংশগ্রহণ করুন এবং একজন - [সদস্য বা পর্যালোচক](/docs/contribute/participate/roles-and-responsibilities/) হন। - -- একটি [স্থানীয়করণ](/docs/contribute/localization/) দিয়ে শুরু করুন বা সাহায্য করুন। - -## SIG Docs এর সাথে জড়িত হন - -[SIG Docs](/docs/contribute/participate/) হল অবদানকারীদের গ্রুপ যারা -কুবারনেটিস ডকুমেন্টেশন এবং ওয়েবসাইট প্রকাশ এবং বজায় রাখে । কুবারনেটিস অবদানকারীদের জন্য একটি দুর্দান্ত উপায় -SIG Docs এর সাথে জড়িত (বৈশিষ্ট্য -উন্নয়ন বা অন্যথায়) হওয়া যা কুবারনেটিস প্রকল্পে একটি বড় প্রভাব ফেলতে পারে। - -SIG Docs বিভিন্ন পদ্ধতির সাথে যোগাযোগ করে: - -- [কুবারনেটিস Slack উদাহরণ হিসেবে `#sig-docs`-এ যোগ দিন](https://slack.k8s.io/)। নিশ্চিত করবে - তোমার পরিচিতি যাতে দেয়া হয় । -- [`কুবারনেটিস-sig-docs` মেইলিং তালিকায় যোগ দিন](https://groups.google.com/forum/#!forum/kubernetes-sig-docs), - যেখানে বিস্তৃত আলোচনা সঞ্চালিত হয় এবং অফিসিয়াল সিদ্ধান্ত রেকর্ড করা হয়। -- [সাপ্তাহিক SIG Docs ভিডিও মিটিং](https://github.com/kubernetes/community/tree/master/sig-docs) যোগ দিন। মিটিংগুলি সর্বদা `#sig-docs`-এ ঘোষণা করা হয় এবং [কুবারনেটিস সম্প্রদায় মিটিং ক্যালেন্ডার](https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com&ctz=America/Los_Angeles). আপনাকে [জুম ক্লায়েন্ট](https://zoom.us/download) ডাউনলোড করতে হবে বা ফোন ব্যবহার করে ডায়াল করতে হবে। -- সেই সপ্তাহগুলিতে যখন ব্যক্তিগত জুম ভিডিও মিটিং হয় না তখন SIG Docs async স্ল্যাক স্ট্যান্ডআপ মিটিংয়ে যোগ দিন। সভাগুলি সর্বদা `#sig-docs`-এ ঘোষণা করা হয়। আপনি মিটিংয়ের ঘোষণার 24 ঘন্টা পর্যন্ত থ্রেডের যেকোনো একটিতে অবদান রাখতে পারেন। - -## অবদান রাখার অন্যান্য উপায় -- [কুবারনেটিস কমিউনিটি সাইট](/community/) দেখুন। টুইটার বা স্ট্যাক ওভারফ্লোতে অংশগ্রহণ করুন, স্থানীয় কুবারনেট মিটআপ এবং ইভেন্ট এবং আরও অনেক কিছু সম্পর্কে জানুন। -- কুবারনেটিস ফিচার ডেভেলপমেন্টের সাথে যুক্ত হতে [কন্ট্রিবিউটর চিটশীট](https://www.kubernetes.dev/docs/contributor-cheatsheet/) পড়ুন। -- [কুবারনেটিস Contributors](https://www.kubernetes.dev/) এবং [অতিরিক্ত অবদানকারী সংস্থান](https://www.kubernetes.dev/resources/) সম্পর্কে আরও জানতে অবদানকারীর সাইটে যান। -- একটি [ব্লগ পোস্ট বা কেস স্টাডি](/docs/contribute/new-content/blogs-case-studies/) জমা দিন। +এছাড়াও আপনি পড়তে পারেন +{{< glossary_tooltip text="CNCF" term_id="cncf" >}} +[পৃষ্ঠা](https://contribute.cncf.io/contributors/projects/#kubernetes) +কুবারনেটিস অবদান সম্পর্কে। diff --git a/content/bn/docs/home/_index.md b/content/bn/docs/home/_index.md index 84aafd236b825..35ba8b18e96d0 100644 --- a/content/bn/docs/home/_index.md +++ b/content/bn/docs/home/_index.md @@ -1,66 +1,67 @@ --- +# approvers: +# - chenopis ( The list of approvers is not necessary for the localized version. However, it is included because it helps maintain a certain line break, which further aids in updating a file.That's why it's kept in comment form. ) title: কুবারনেটিস ডকুমেন্টেশন noedit: true cid: docsHome layout: docsportal_home class: gridPage gridPageHome -linkTitle: "হোম" +linkTitle: "ডকুমেন্টেশন" main_menu: true weight: 10 hide_feedback: true menu: main: title: "ডকুমেন্টেশন" - weight: 20 - post: > -

টিউটোরিয়াল এবং রেফারেন্স ডকুমেন্টেশন সহ কুবারনেটিস কীভাবে ব্যবহার করবেন তা শিখুন । এমনকি আপনি ডক্সে অবদান রাখতে সাহায্য করতে পারেন!

+ weight: 10 description: > - কুবারনেটিস হল একটি ওপেন সোর্স কন্টেইনার অর্কেস্ট্রেশন ইঞ্জিন যাতে কনটেইনারাইজড অ্যাপ্লিকেশনের ডিপ্লয়মেন্ট, স্কেলিং এবং ম্যানেজমেন্ট করা যায়। ওপেন সোর্স প্রকল্পটি Cloud Native Computing Foundation দ্বারা হোস্ট করা হয়। + কুবারনেটিস হলো একটি ওপেন সোর্স কন্টেইনার অর্কেস্ট্রেশন ইঞ্জিন যাতে কন্টেইনারাইজড অ্যাপ্লিকেশনের ডিপ্লয়মেন্ট, স্কেলিং এবং ম্যানেজমেন্ট করা যায়। ওপেন সোর্স প্রকল্পটি Cloud Native Computing Foundation দ্বারা হোস্ট করা হয়। overview: > - কুবারনেটিস হল একটি ওপেন সোর্স কন্টেইনার অর্কেস্ট্রেশন ইঞ্জিন যাতে কনটেইনারাইজড অ্যাপ্লিকেশনের ডিপ্লয়মেন্ট, স্কেলিং এবং ম্যানেজমেন্ট করা যায়। ওপেন সোর্স প্রকল্পটি Cloud Native Computing Foundation (CNCF) দ্বারা হোস্ট করা হয়। - + কুবারনেটিস হলো একটি ওপেন সোর্স কন্টেইনার অর্কেস্ট্রেশন ইঞ্জিন যাতে কন্টেইনারাইজড অ্যাপ্লিকেশনের ডিপ্লয়মেন্ট, স্কেলিং এবং ম্যানেজমেন্ট করা যায়। ওপেন সোর্স প্রকল্পটি Cloud Native Computing Foundation (CNCF) দ্বারা হোস্ট করা হয়। cards: - name: concepts title: "কুবারনেটিস বুঝুন" description: "কুবারনেটিস এবং এর মৌলিক ধারণা সম্পর্কে জানুন।" button: "ধারণা দেখুন" - button_path: "/docs/concepts" + button_path: "/bn/docs/concepts" - name: tutorials title: "কুবারনেটিস ব্যাবহার করুন" description: "কুবারনেটিস এ অ্যাপ্লিকেশন কিভাবে স্থাপন করতে হয় তা শিখতে টিউটোরিয়াল অনুসরণ করুন।" button: "টিউটোরিয়াল দেখুন" - button_path: "/docs/tutorials" + button_path: "/bn/docs/tutorials" - name: setup title: "একটি K8s ক্লাস্টার সেট আপ করুন" - description: "আপনার সম্পদ এবং প্রয়োজনের উপর ভিত্তি করে কুবারনেটিস চালান।" + description: "আপনার রিসোর্স এবং প্রয়োজনের উপর ভিত্তি করে কুবারনেটিস চালান।" button: "কুবারনেটিস সেট আপ করুন" - button_path: "/docs/setup" + button_path: "/bn/docs/setup" - name: tasks title: "কুবারনেটিস কীভাবে ব্যবহার করবেন তা শিখুন" - description: "সাধারণ কাজগুলি এবং পদক্ষেপগুলির একটি সংক্ষিপ্ত ক্রম ব্যবহার করে কীভাবে সেগুলি সম্পাদন করা যায় দেখুন ।" - button: "কাজ দেখুন" - button_path: "/docs/tasks" -- name: training - title: "প্রশিক্ষণ" - description: "কুবারনেটিস -এ প্রত্যয়িত হন এবং আপনার cloud native প্রকল্পগুলিকে সফল করুন!" - button: "প্রশিক্ষণ দেখুন" - button_path: "/training" + description: "সাধারণ টাস্কগুলো এবং পদক্ষেপগুলোর একটি সংক্ষিপ্ত ক্রম ব্যবহার করে কীভাবে সেগুলো সম্পাদন করা যায় দেখুন ।" + button: "টাস্ক দেখুন" + button_path: "/bn/docs/tasks" - name: reference title: রেফারেন্স তথ্য দেখুন - description: পরিভাষা, কমান্ড লাইন সিনট্যাক্স, API সংস্থান প্রকার এবং সেটআপ টুল ডকুমেন্টেশন ব্রাউজ করুন। - button: রেফারেন্স দেখুন - button_path: /docs/reference + description: পরিভাষা, কমান্ড লাইন সিনট্যাক্স, API রিসোর্স প্রকার এবং সেটআপ টুল ডকুমেন্টেশন ব্রাউজ করুন। + button: "রেফারেন্স দেখুন" + button_path: "/bn/docs/reference" - name: contribute - title: ডক্সে অবদান রাখুন - description: আপনি প্রকল্পে নতুন হোন বা আপনি দীর্ঘ সময় ধরে আছেন, যে কেউ অবদান রাখতে পারেন । - button: ডক্সে অবদান রাখুন - button_path: /docs/contribute -- name: release-notes - title: K8s রিলিজ নোট - description: আপনি যদি কুবারনেটিস ইনস্টল করছেন বা নতুন সংস্করণে আপগ্রেড করছেন, বর্তমান রিলিজ নোটগুলি পড়ুন। + title: কুবারনেটিসে অবদান + description: আপনি কিভাবে কুবারনেটিসে আরও ভাল করতে সাহায্য করতে পারেন তা খুঁজে বের করুন। + button: "অবদান রাখার উপায় দেখুন" + button_path: "/bn/docs/contribute" +- name: training + title: "প্রশিক্ষণ" + description: "কুবারনেটিসে সার্টিফাইড হন এবং আপনার ক্লাউড নেটিভ প্রকল্পগুলিকে সফল করুন!" + button: "প্রশিক্ষণ দেখুন" + button_path: "/bn/training" +- name: Download + title: কুবারনেটিস ডাউনলোড করুন + description: কুবারনেটিস ইনস্টল করুন বা নতুন সংস্করণে আপগ্রেড করুন। button: "কুবারনেটিস ডাউনলোড করুন" - button_path: "/docs/setup/release/notes" + button_path: "/bn/releases/download" - name: about title: ডকুমেন্টেশন সম্পর্কে - description: এই ওয়েবসাইটে কুবারনেটিস-এর বর্তমান এবং পূর্ববর্তী ৪ সংস্করণের ডকুমেন্টেশন রয়েছে। + description: এই ওয়েবসাইটটিতে কুবারনেটিসের বর্তমান এবং পূর্ববর্তী 4 সংস্করণের ডকুমেন্টেশন রয়েছে। + button: "উপলব্ধ সংস্করণ দেখুন" + button_path: "/bn/docs/home/supported-doc-versions" --- diff --git a/content/bn/docs/home/supported-doc-versions.md b/content/bn/docs/home/supported-doc-versions.md index 902de5f864905..1b9831ad463d6 100644 --- a/content/bn/docs/home/supported-doc-versions.md +++ b/content/bn/docs/home/supported-doc-versions.md @@ -2,16 +2,13 @@ title: উপলব্ধ ডকুমেন্টেশনের সংস্করণ content_type: custom layout: supported-versions -card: - name: about - weight: 10 - title: উপলব্ধ ডকুমেন্টেশনের সংস্করণ +weight: 10 --- +এই ওয়েবসাইটটিতে কুবারনেটিসের বর্তমান সংস্করণ এবং +কুবারনেটিসের আগের চারটি সংস্করণের ডকুমেন্টেশন রয়েছে। -এই ওয়েবসাইটটিতে কুবারনেটিসের আগের চারটি সংস্করণ এবং বর্তমান সংস্করণের জন্য ডকুমেন্টেশন রয়েছে। - - -কুবারনেটিসের ( Kubernetes) সংস্করণটি বর্তমানে সমর্থিত (supported) কিনা তা থেকে কুবারনেটিসের (Kubernetes) সংস্করণের জন্য ডকুমেন্টেশনের প্রাপ্যতা আলাদা রয়েছে । - -কুবারনেটিসের এর কোন সংস্করণ আনুষ্ঠানিকভাবে সমর্থিত, এবং কতদিনের জন্য তা সম্বন্ধে জানতে [Support period](/releases/patch-releases/#support-period) পড়ুন। +কুবারনেটিস সংস্করণের জন্য ডকুমেন্টেশনের প্রাপ্যতা সেই রিলিজটি +বর্তমানে সাপোর্টেড কিনা তা থেকে আলাদা। +কুবারনেটিসের কোন সংস্করণ আনুষ্ঠানিকভাবে সাপোর্টেড, এবং কতদিনের জন্য +তা জানতে [সাপোর্ট সময়কাল](/bn/releases/patch-releases/#support-period) পড়ুন। diff --git a/content/bn/docs/images/diagram-guide-example-3.svg b/content/bn/docs/images/diagram-guide-example-3.svg new file mode 100644 index 0000000000000..f72b797fe3130 --- /dev/null +++ b/content/bn/docs/images/diagram-guide-example-3.svg @@ -0,0 +1 @@ +mecontrol planeapi-servercontrol planeetcd datastorecontrol planecontrollermanagercontrol planeschedulernodekubeletnodecontainerruntime1. kubectl create -f pod.yaml2. save new state3. check for changes4. watch for unassigned pods(s)5. notify about pod w nodename=" "6. assign pod to node7. save new state8. look for newly assigned pod(s)9. bind pod to node10. start container11. update pod status12. save new statemecontrol planeapi-servercontrol planeetcd datastorecontrol planecontrollermanagercontrol planeschedulernodekubeletnodecontainerruntime diff --git a/content/bn/docs/images/gateway-kind-relationships.svg b/content/bn/docs/images/gateway-kind-relationships.svg new file mode 100644 index 0000000000000..f5ed657cf733b --- /dev/null +++ b/content/bn/docs/images/gateway-kind-relationships.svg @@ -0,0 +1 @@ +
cluster
GatewayClass
Gateway
HTTPRoute
diff --git a/content/bn/docs/images/gateway-request-flow.svg b/content/bn/docs/images/gateway-request-flow.svg new file mode 100644 index 0000000000000..e6b4c666b45f9 --- /dev/null +++ b/content/bn/docs/images/gateway-request-flow.svg @@ -0,0 +1 @@ + diff --git a/content/bn/docs/images/ha-control-plane-(bn-version).svg b/content/bn/docs/images/ha-control-plane-(bn-version).svg new file mode 100644 index 0000000000000..e680077825146 --- /dev/null +++ b/content/bn/docs/images/ha-control-plane-(bn-version).svg @@ -0,0 +1,5 @@ + + + + + diff --git a/content/bn/docs/images/ingress.svg b/content/bn/docs/images/ingress.svg new file mode 100644 index 0000000000000..ffd1b4c72e1d1 --- /dev/null +++ b/content/bn/docs/images/ingress.svg @@ -0,0 +1 @@ +
cluster
Ingress-managed
load balancer
routing rule
Ingress
Pod
Service
Pod
client
diff --git a/content/bn/docs/images/ingressFanOut.svg b/content/bn/docs/images/ingressFanOut.svg new file mode 100644 index 0000000000000..d65422c663d66 --- /dev/null +++ b/content/bn/docs/images/ingressFanOut.svg @@ -0,0 +1 @@ +
cluster
Ingress-managed
load balancer
/foo
/bar
Ingress, 178.91.123.132
Pod
Service service1:4200
Pod
Pod
Service service2:8080
Pod
client
diff --git a/content/bn/docs/images/ingressNameBased.svg b/content/bn/docs/images/ingressNameBased.svg new file mode 100644 index 0000000000000..51a355d45923c --- /dev/null +++ b/content/bn/docs/images/ingressNameBased.svg @@ -0,0 +1 @@ +
cluster
Ingress-managed
load balancer
Host: foo.bar.com
Host: bar.foo.com
Ingress, 178.91.123.132
Pod
Service service1:80
Pod
Pod
Service service2:80
Pod
client
diff --git a/content/bn/docs/images/kubernetes-cluster-network.svg b/content/bn/docs/images/kubernetes-cluster-network.svg new file mode 100644 index 0000000000000..03add4e256018 --- /dev/null +++ b/content/bn/docs/images/kubernetes-cluster-network.svg @@ -0,0 +1 @@ + diff --git a/content/bn/docs/images/podSchedulingGates.svg b/content/bn/docs/images/podSchedulingGates.svg new file mode 100644 index 0000000000000..2d08f823ddf61 --- /dev/null +++ b/content/bn/docs/images/podSchedulingGates.svg @@ -0,0 +1 @@ +
scheduling gate removed
no
yes
pod created
pod scheduling gated
pod scheduling ready
pod running
empty scheduling gates?
diff --git a/content/bn/docs/images/tutor-service-nodePort-fig01.svg b/content/bn/docs/images/tutor-service-nodePort-fig01.svg new file mode 100644 index 0000000000000..b84ebb6f9919a --- /dev/null +++ b/content/bn/docs/images/tutor-service-nodePort-fig01.svg @@ -0,0 +1 @@ +
SNAT
SNAT
client
Node 2
Node 1
Endpoint
diff --git a/content/bn/docs/images/tutor-service-nodePort-fig02.svg b/content/bn/docs/images/tutor-service-nodePort-fig02.svg new file mode 100644 index 0000000000000..7d084b859708b --- /dev/null +++ b/content/bn/docs/images/tutor-service-nodePort-fig02.svg @@ -0,0 +1 @@ +
client
Node 1
Node 2
endpoint
diff --git a/content/bn/docs/reference/glossary/annotation.md b/content/bn/docs/reference/glossary/annotation.md new file mode 100644 index 0000000000000..b1e073e6bb9b2 --- /dev/null +++ b/content/bn/docs/reference/glossary/annotation.md @@ -0,0 +1,17 @@ +--- +title: এনোটেশন +id: annotation +date: 2018-04-12 +full_link: /docs/concepts/overview/working-with-objects/annotations +short_description: > + একটি কী-ভ্যালু(key-value) জোড় যা অবজেক্টের সাথে ইচ্ছামত অ-শনাক্তকারী মেটাডেটা সংযুক্ত করতে ব্যবহৃত হয়। + +aka: +tags: +- fundamental +--- +একটি কী-ভ্যালু(key-value) জোড় যা অবজেক্টের সাথে ইচ্ছামত অ-শনাক্তকারী মেটাডেটা সংযুক্ত করতে ব্যবহৃত হয়। + + + +এনোটেশনের মেটাডেটা ছোট অথবা বড়, বিন্যাসিত বা অবিন্যাসিত হতে পারে, এবং এটিতে {{< glossary_tooltip text="লেবেল" term_id="label" >}} দ্বারা অনুমোদিত নয় এমন ক্যারেক্টার থাকতে পারে। টুল এবং লাইব্রেরির মতো ক্লায়েন্ট এই মেটাডেটা পুনরুদ্ধার করতে পারে। diff --git a/content/bn/docs/reference/glossary/app-container.md b/content/bn/docs/reference/glossary/app-container.md new file mode 100644 index 0000000000000..4f31f513e50bf --- /dev/null +++ b/content/bn/docs/reference/glossary/app-container.md @@ -0,0 +1,18 @@ +--- +title: অ্যাপ কন্টেইনার +id: app-container +date: 2019-02-12 +full_link: +short_description: > + কোনো ওয়ার্কলোডের একটি অংশ চালানোর জন্য ব্যবহৃত কন্টেইনার। init কন্টেইনারের সাথে তুলনা করুন। + +aka: +tags: +- workload +--- +অ্যাপ্লিকেশন কন্টেইনার (অথবা অ্যাপ কন্টেইনার) হল একটি {{< glossary_tooltip text="পড" term_id="pod" >}}-এর মধ্যে থাকা {{< glossary_tooltip text="কন্টেইনার" term_id="container" >}}গুলি, যা যেকোনো {{< glossary_tooltip text="ইনিশিয়ালাইজেশন কন্টেইনার" term_id="init-container" >}} সম্পন্ন হওয়ার পর চালু হয়। + + + +একটি ইনিট কন্টেইনার আপনাকে ইনিশিয়ালাইজেশনের বিবরণ পৃথক করতে দেয় যা সার্বিকভাবে {{< glossary_tooltip text="ওয়ার্কলোড" term_id="workload" >}} এর জন্য গুরুত্বপূর্ণ, এবং যা অ্যাপ্লিকেশন কন্টেইনার চালু হওয়ার পরে চালানোর প্রয়োজন নেই। +যদি একটি পডে কোনো ইনিট কন্টেইনার কনফিগার করা না হয়, তবে সেই পডের সব কন্টেইনারই অ্যাপ কন্টেইনার হয়। diff --git a/content/bn/docs/reference/glossary/configmap.md b/content/bn/docs/reference/glossary/configmap.md new file mode 100644 index 0000000000000..8d542977ecd7c --- /dev/null +++ b/content/bn/docs/reference/glossary/configmap.md @@ -0,0 +1,20 @@ +--- +title: কনফিগম্যাপ (ConfigMap) +id: configmap +date: 2018-04-12 +full_link: /bn/docs/concepts/configuration/configmap/ +short_description: > + একটি API অবজেক্ট কী-ভ্যালু (key-value) জোড়ায় অ-গোপনীয় ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। এটি এনভায়রনমেন্ট ভেরিয়েবল , কমান্ড-লাইন আর্গুমেন্ট বা একটি ভলিউমে কনফিগারেশন ফাইল হিসাবে ব্যবহার করা যেতে পারে। + +aka: +tags: +- core-object +--- +একটি API অবজেক্ট কী-ভ্যালু(key-value) জোড়ায় অ-গোপনীয় ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। +{{< glossary_tooltip text="পডগুলো" term_id="pod" >}} কনফিগম্যাপকে এনভায়রনমেন্ট ভেরিয়েবল, +কমান্ড-লাইন আর্গুমেন্ট বা {{< glossary_tooltip text="ভলিউমে" term_id="volume" >}} +কনফিগারেশন ফাইল হিসেবে ব্যবহার করতে পারে। + + + +একটি কনফিগম্যাপ (ConfigMap) আপনাকে আপনার {{< glossary_tooltip text="কন্টেইনার ইমেজ" term_id="image" >}} থেকে এনভায়রনমেন্ট-নির্দিষ্ট কনফিগারেশন দ্বিগুণ করার অনুমতি দেয়, যাতে আপনার অ্যাপ্লিকেশনগুলি সহজেই পোর্টেবল হয়৷ diff --git a/content/bn/docs/reference/glossary/control-plane.md b/content/bn/docs/reference/glossary/control-plane.md new file mode 100644 index 0000000000000..8d6d0cc85e9c0 --- /dev/null +++ b/content/bn/docs/reference/glossary/control-plane.md @@ -0,0 +1,25 @@ +--- +title: কন্ট্রোল প্লেন +id: control-plane +date: 2019-05-12 +full_link: +short_description: > + কন্টেইনার অর্কেস্ট্রেশন লেয়ার যা কন্টেইনারের জীবনচক্র সংজ্ঞায়িত, ডেপ্লয় এবং পরিচালনা করতে API এবং ইন্টারফেসগুলিকে প্রকাশ করে। + +aka: +tags: +- fundamental +--- +কন্টেইনার অর্কেস্ট্রেশন লেয়ার যা কন্টেইনারের জীবনচক্র সংজ্ঞায়িত, ডেপ্লয় এবং পরিচালনা করতে API এবং ইন্টারফেসগুলিকে প্রকাশ করে। + + + + এই লেয়ারটি বিভিন্ন উপাদান দ্বারা গঠিত, যেমন (কিন্তু এতে সীমাবদ্ধ নয়): + + * {{< glossary_tooltip text="etcd" term_id="etcd" >}} + * {{< glossary_tooltip text="API সার্ভার" term_id="kube-apiserver" >}} + * {{< glossary_tooltip text="শিডিউলার" term_id="kube-scheduler" >}} + * {{< glossary_tooltip text="কন্ট্রোলার ম্যানেজারr" term_id="kube-controller-manager" >}} + * {{< glossary_tooltip text="ক্লাউড কন্ট্রোলার ম্যানেজার" term_id="cloud-controller-manager" >}} + + এই উপাদানগুলি ট্রাডিশনাল অপারেটিং সিস্টেম সার্ভিস (daemons) বা কন্টেইনার হিসাবে চালানো যেতে পারে। এই উপাদানগুলি চালানো হোস্টগুলিকে ঐতিহাসিকভাবে {{< glossary_tooltip text="masters" term_id="master" >}} বলা হত। diff --git a/content/bn/docs/reference/glossary/daemonset.md b/content/bn/docs/reference/glossary/daemonset.md new file mode 100644 index 0000000000000..592b08d3d9d8a --- /dev/null +++ b/content/bn/docs/reference/glossary/daemonset.md @@ -0,0 +1,19 @@ +--- +title: ডেমনসেট +id: daemonset +date: 2018-04-12 +full_link: /bn/docs/concepts/workloads/controllers/daemonset +short_description: > + একটি পডের একটি কপি একটি ক্লাস্টারে নোডগুলির একটি সেট জুড়ে চলছে তা নিশ্চিত করে৷ + +aka: +tags: +- fundamental +- core-object +- workload +--- + একটি {{< glossary_tooltip text="পডের" term_id="pod" >}} একটি কপি একটি {{< glossary_tooltip text="ক্লাস্টারে" term_id="cluster" >}} নোডগুলির একটি সেট জুড়ে চলছে তা নিশ্চিত করে৷ + + + +লগ কালেক্টর এবং মনিটরিং এজেন্টের মতো সিস্টেম ডেমন(daemon) ডেপ্লয় করতে ব্যবহৃত হয় যা সাধারণত প্রতিটি {{< glossary_tooltip term_id="node" >}}-এ চলতে হবে। diff --git a/content/bn/docs/reference/glossary/ephemeral-container.md b/content/bn/docs/reference/glossary/ephemeral-container.md new file mode 100644 index 0000000000000..8b15c76c763d1 --- /dev/null +++ b/content/bn/docs/reference/glossary/ephemeral-container.md @@ -0,0 +1,19 @@ +--- +title: ইফেমেরাল কন্টেইনার(Ephemeral Container) +id: ephemeral-container +date: 2019-08-26 +full_link: /bn/docs/concepts/workloads/pods/ephemeral-containers/ +short_description: > + এক ধরনের কন্টেইনার যা আপনি অস্থায়ীভাবে একটি পডের ভিতরে রান করতে পারেন। + +aka: +tags: +- fundamental +--- +এক ধরনের {{< glossary_tooltip term_id="container" >}} যা আপনি অস্থায়ীভাবে একটি {{< glossary_tooltip term_id="pod" >}}এর ভিতরে রান করতে পারেন। + + + +আপনি যদি সমস্যা নিয়ে চলমান একটি পড তদন্ত করতে চান তবে আপনি সেই পডে একটি অস্থায়ী কন্টেইনার যোগ করতে পারেন এবং ডায়াগনস্টিকস চালাতে পারেন। ইফেমেরাল কন্টেইনারগুলির কোনও রিসোর্স বা শিডিউলিং গ্যারান্টি নেই এবং ওয়ার্কলোড এর কোনও অংশ চালানোর জন্য সেগুলি আপনার ব্যবহার করা উচিত নয়। + +ইফেমেরাল কনটেইনার {{< glossary_tooltip text="স্ট্যাটিক পড" term_id="static-pod" >}} দ্বারা সাপোর্টেড নয়৷ diff --git a/content/bn/docs/reference/glossary/kube-apiserver.md b/content/bn/docs/reference/glossary/kube-apiserver.md new file mode 100644 index 0000000000000..5d0a74c8df35b --- /dev/null +++ b/content/bn/docs/reference/glossary/kube-apiserver.md @@ -0,0 +1,23 @@ +--- +title: API সার্ভার +id: kube-apiserver +date: 2018-04-12 +full_link: /bn/docs/concepts/overview/components/#kube-apiserver +short_description: > + কন্ট্রোল প্লেন উপাদান যা কুবারনেটিস API পরিবেশন করে। + +aka: +- kube-apiserver +tags: +- architecture +- fundamental +--- + API সার্ভার হলো কুবারনেটিস {{< glossary_tooltip text="কন্ট্রোল প্লেন" term_id="control-plane" >}} +এর একটি উপাদান যা কুবারনেটিস API কে প্রকাশ করে ৷ +API সার্ভার কুবারনেটিস কন্ট্রোল প্লেনের ফ্রন্ট এন্ড হিসেবে কাজ করে। + + + +কুবারনেটিস API সার্ভারের প্রধান বাস্তবায়ন হলো [kube-apiserver](/docs/reference/generated/kube-apiserver/)। +kube-apiserver অনুভূমিকভাবে স্কেল করার জন্য ডিজাইন করা হয়েছে—অর্থাৎ, এটি আরও বেশি উদাহরণ ডেপ্লয় করে স্কেল করে। +আপনি একাধিক kube-apiserver উদাহরণ চালাতে পারেন এবং সেই উদাহরণগুলির মধ্যে ট্রাফিক ব্যালেন্স করতে পারেন। diff --git a/content/bn/docs/reference/glossary/mirror-pod.md b/content/bn/docs/reference/glossary/mirror-pod.md new file mode 100644 index 0000000000000..56ba89ba383bd --- /dev/null +++ b/content/bn/docs/reference/glossary/mirror-pod.md @@ -0,0 +1,22 @@ +--- +title: মিরর-পড +id: mirror-pod +date: 2019-08-06 +short_description: > + API সার্ভারের একটি অবজেক্ট যা একটি kubelet এ একটি স্ট্যাটিক পড ট্র্যাক করে। + +aka: +tags: +- fundamental +--- + +একটি {{< glossary_tooltip text="পড" term_id="pod" >}} অবজেক্ট যা একটি {{< glossary_tooltip text="kubelet" term_id="kubelet" >}} +ব্যবহার করে {{< glossary_tooltip text="স্ট্যাটিক পড" term_id="static-pod" >}} উপস্থাপন করতে । + + + +যখন kubelet তার কনফিগারেশনে একটি স্ট্যাটিক পড খুঁজে পায়, তখন এটি স্বয়ংক্রিয়ভাবে +এটির জন্য কুবারনেটিস API সার্ভারে একটি পড অবজেক্ট তৈরি করার চেষ্টা করে। +এর মানে হল যে পডটি API সার্ভারে দৃশ্যমান হবে, কিন্তু সেখান থেকে কন্ট্রোল করা যাবে না। + +(উদাহরণস্বরূপ, একটি মিরর পড অপসারণ করা kubelet ডেমন(daemon) এটি চালানো বন্ধ করবে না)। diff --git a/content/bn/docs/reference/glossary/node.md b/content/bn/docs/reference/glossary/node.md new file mode 100644 index 0000000000000..6d7b9f87d100a --- /dev/null +++ b/content/bn/docs/reference/glossary/node.md @@ -0,0 +1,19 @@ +--- +title: নোড +id: node +date: 2018-04-12 +full_link: /docs/concepts/architecture/nodes/ +short_description: > + নোড হলো কুবারনেটিসে একটি ওয়ার্কার মেশিন। + +aka: +tags: +- fundamental +--- +নোড হলো কুবারনেটিসে একটি ওয়ার্কার মেশিন। + + + +একটি ওয়ার্কার নোড একটি ভার্চুয়াল মেশিন বা ফিজিক্যাল মেশিন হতে পারে, একটি ক্লাস্টারের উপর নির্ভর করে । এটির {{< glossary_tooltip text="পডগুলোকে" term_id="pod" >}} সহজে চালানোর জন্য প্রয়োজনীয় সকল লোকাল ডেমন(daemons) বা সার্ভিস আছে এবং এটি কন্ট্রোল প্লেন দ্বারা পরিচালিত হয়। একটি নোডের ডেমনগুলোতে থাকে {{< glossary_tooltip text="kubelet" term_id="kubelet" >}}, {{< glossary_tooltip text="kube-proxy" term_id="kube-proxy" >}}, এবং একটি কন্টেইনার রানটাইম যা {{< glossary_tooltip text="CRI" term_id="cri" >}} সম্পাদন করে যেমন {{< glossary_tooltip term_id="docker" >}} + +প্রাথমিক কুবারনেটিস সংস্করণে, নোডগুলি "Minions" হিসেবে পরিচিত ছিল। diff --git a/content/bn/docs/reference/glossary/object.md b/content/bn/docs/reference/glossary/object.md new file mode 100644 index 0000000000000..2ba25d021bbcb --- /dev/null +++ b/content/bn/docs/reference/glossary/object.md @@ -0,0 +1,21 @@ +--- +title: অবজেক্ট +id: object +date: 2020-10-12 +full_link: /bn/docs/concepts/overview/working-with-objects/#kubernetes-objects +short_description: > + কুবারনেটিস সিস্টেমের একটি সত্তা, আপনার ক্লাস্টারের অবস্থার অংশ প্রতিনিধিত্ব করে। +aka: +tags: +- fundamental +--- + কুবারনেটিস সিস্টেমের একটি সত্তা। কুবারনেটিস API আপনার ক্লাস্টারের অবস্থা উপস্থাপন করতে +এই সত্তাগুলি ব্যবহার করে। + + + +একটি কুবারনেটিস অবজেক্ট সাধারণত একটি "record of intent" - একবার আপনি অবজেক্টটি তৈরি করলে, +কুবারনেটিস {{< glossary_tooltip text="কন্ট্রোল প্লেনটি " term_id="control-plane" >}} +এটির প্রতিনিধিত্ব করে এমন আইটেমটি আসলে বিদ্যমান আছে কিনা তা নিশ্চিত করতে ক্রমাগত কাজ করে। +একটি অবজেক্ট তৈরি করে, আপনি কুবারনেটিস সিস্টেমকে কার্যকরভাবে বলছেন যে আপনি আপনার ক্লাস্টারের +ওয়ার্কলোডের সেই অংশটি কেমন দেখতে চান; এটি আপনার ক্লাস্টারের কাঙ্ক্ষিত অবস্থা। diff --git a/content/bn/docs/reference/glossary/replication-controller.md b/content/bn/docs/reference/glossary/replication-controller.md new file mode 100644 index 0000000000000..0e542650a274f --- /dev/null +++ b/content/bn/docs/reference/glossary/replication-controller.md @@ -0,0 +1,25 @@ +--- +title: ReplicationController +id: replication-controller +date: 2018-04-12 +full_link: +short_description: > + একটি (ডেপ্রিসিয়েটেড) API অবজেক্ট যা একটি প্রতিলিপিকৃত অ্যাপ্লিকেশন পরিচালনা করে। + +aka: +tags: +- workload +- core-object +--- + একটি ওয়ার্কলোডের রিসোর্স যা একটি প্রতিলিপিকৃত অ্যাপ্লিকেশন পরিচালনা করে, +নিশ্চিত করে যে একটি {{< glossary_tooltip text="পড" term_id="pod" >}} এর একটি নির্দিষ্ট সংখ্যক দৃষ্টান্ত চলছে ৷ + + + +কন্ট্রোল প্লেন নিশ্চিত করে যে নির্দিষ্ট সংখ্যক পড চলছে, এমনকি যদি কিছু পড ব্যর্থ হয়, +যদি আপনি ম্যানুয়ালি পড মুছে ফেলেন, বা যদি অনেকগুলি ভুল করে শুরু করা হয়। + +{{< note >}} +ReplicationController ডেপ্রিসিয়েটেড করা হয়েছে। দেখুন +{{< glossary_tooltip text="ডিপ্লয়মেন্ট" term_id="deployment" >}}, যা একই রকম। +{{< /note >}} diff --git a/content/bn/docs/reference/glossary/secret.md b/content/bn/docs/reference/glossary/secret.md new file mode 100644 index 0000000000000..f3a94ee75b01c --- /dev/null +++ b/content/bn/docs/reference/glossary/secret.md @@ -0,0 +1,27 @@ +--- +title: সিক্রেট +id: secret +date: 2018-04-12 +full_link: /bn/docs/concepts/configuration/secret/ +short_description: > + সংবেদনশীল তথ্য, যেমন পাসওয়ার্ড, OAuth টোকেন এবং ssh কী(keys) গুলো সংরক্ষণ করে। + +aka: +tags: +- core-object +- security +--- +সংবেদনশীল তথ্য, যেমন পাসওয়ার্ড, OAuth টোকেন এবং ssh কী(keys) গুলো সংরক্ষণ করে। + + + +সিক্রেট গুলো আপনাকে কীভাবে সংবেদনশীল তথ্য ব্যবহার করা হয় তার উপর আরও নিয়ন্ত্রণ দেয় +এবং দুর্ঘটনাজনিত এক্সপোজারের ঝুঁকি হ্রাস করে। সিক্রেট ভ্যালুগুলি base64 স্ট্রিং হিসাবে এনকোড +করা হয় এবং ডিফল্টরূপে এনক্রিপ্ট না করে সংরক্ষণ করা হয় তবে +[বাকি সময়ে এনক্রিপ্ট](/bn/docs/tasks/administer-cluster/encrypt-data/#ensure-all-secrets-are-encrypted) করার জন্য কনফিগার করা যেতে পারে। + +একটি {{< glossary_tooltip text="পড" term_id="pod" >}} বিভিন্ন উপায়ে সিক্রেটকে উল্লেখ করতে পারে, +যেমন একটি ভলিউম মাউন্ট বা এনভায়রনমেন্ট ভেরিয়েবল হিসাবে। +সিক্রেটগুলি গোপনীয় ডেটার জন্য ডিজাইন করা হয়েছে এবং +[কনফিগম্যাপগুলি](/bn/docs/tasks/configure-pod-container/configure-pod-configmap/) +অ-গোপনীয় ডেটার জন্য ডিজাইন করা হয়েছে ৷ diff --git a/content/bn/docs/reference/glossary/service-account.md b/content/bn/docs/reference/glossary/service-account.md new file mode 100644 index 0000000000000..b85c8d2b9b61b --- /dev/null +++ b/content/bn/docs/reference/glossary/service-account.md @@ -0,0 +1,19 @@ +--- +title: সার্ভিস অ্যাকাউন্ট +id: service-account +date: 2018-04-12 +full_link: /docs/tasks/configure-pod-container/configure-service-account/ +short_description: > + পডে চলমান কার্যক্রমের জন্য একটি পরিচিতি সরবরাহ করে। + +aka: +tags: +- fundamental +- core-object +--- + +{{< glossary_tooltip text="পডে" term_id="pod" >}} চলমান কার্যক্রমের জন্য একটি পরিচিতি সরবরাহ করে। + + + +যখন পডে ভেতরের প্রক্রিয়াগুলি ক্লাস্টার অ্যাক্সেস করে, তাদেরকে প্রাসঙ্গিক সার্ভিস অ্যাকাউন্ট হিসেবে API সার্ভার দ্বারা অথেনটিকেট(authenticate) করা হয়, উদাহরণস্বরূপ, `default`। যদি আপনি সার্ভিস অ্যাকাউন্ট নির্দিষ্ট না করে একটি পড তৈরি করেন, তাহলে স্বয়ংক্রিয়ভাবে একই {{< glossary_tooltip text="নেমস্পেস" term_id="namespace" >}} এ ডিফল্ট সার্ভিস অ্যাকাউন্টটি নির্ধারন করে দেওয়া হয়। diff --git a/content/bn/docs/reference/glossary/sidecar-containers.md b/content/bn/docs/reference/glossary/sidecar-container.md similarity index 100% rename from content/bn/docs/reference/glossary/sidecar-containers.md rename to content/bn/docs/reference/glossary/sidecar-container.md diff --git a/content/bn/docs/reference/glossary/workload.md b/content/bn/docs/reference/glossary/workload.md new file mode 100644 index 0000000000000..7dd37c9a33a3c --- /dev/null +++ b/content/bn/docs/reference/glossary/workload.md @@ -0,0 +1,22 @@ +--- +title: ওয়ার্কলোড +id: workload +date: 2019-02-13 +full_link: /bn/docs/concepts/workloads/ +short_description: > + ওয়ার্কলোড হলো কুবারনেটিস-এ চলমান একটি অ্যাপ্লিকেশন। + +aka: +tags: +- fundamental +--- + ওয়ার্কলোড হলো কুবারনেটিস-এ চলমান একটি অ্যাপ্লিকেশন। + + + +বিভিন্ন কোর অবজেক্ট যা ওয়ার্কলোডের বিভিন্ন ধরণ বা অংশগুলির প্রতিনিধিত্ব করে তাদের মধ্যে ডেমনসেট(DaemonSet), +ডিপ্লয়মেন্ট, জব, রেপ্লিকাসেট(ReplicaSet), এবং স্টেটফুলসেট অবজেক্ট(StatefulSet objects) অন্তর্ভুক্ত। + +উদাহরণস্বরূপ, একটি ওয়ার্কলোড যেখানে একটি ওয়েব সার্ভার এবং একটি ডেটাবেস রয়েছে +তারা ডেটাবেসটি একটি {{< glossary_tooltip term_id="StatefulSet" >}} এ +এবং ওয়েব সার্ভারটি একটি {{< glossary_tooltip term_id="Deployment" >}} এ চালাতে পারে। diff --git a/content/bn/docs/tasks/_index.md b/content/bn/docs/tasks/_index.md index 1b4379b881c7c..8ab034e3ae986 100644 --- a/content/bn/docs/tasks/_index.md +++ b/content/bn/docs/tasks/_index.md @@ -1,14 +1,15 @@ --- -title: কাজ +title: টাস্ক main_menu: true weight: 50 -content_type: ধারণা +content_type: concept --- কুবারনেটিস ডকুমেন্টেশনের এই বিভাগে এমন পৃষ্ঠা রয়েছে -যা দেখায় কিভাবে পৃথক কাজ করতে হয়। সাধারণত পদক্ষেপের একটি সংক্ষিপ্ত ক্রম দিয়ে একটি টাস্ক পেজ দেখায় কিভাবে একটি একক জিনিস করতে হয়। +যা দেখায় কিভাবে পৃথক টাস্ক করতে হয়। সাধারণত পদক্ষেপের একটি +সংক্ষিপ্ত ক্রম দিয়ে একটি টাস্ক পেজ দেখায় কিভাবে একটি একক জিনিস করতে হয়। আপনি যদি একটি টাস্ক পৃষ্ঠা লিখতে চান, দেখুন কীভাবে -[একটি ডকুমেন্টেশন পুল অনুরোধ তৈরি করা](/docs/contribute/new-content/open-a-pr/) যায়। +[একটি ডকুমেন্টেশন পুল রিকোয়েস্ট তৈরি করা](/docs/contribute/new-content/open-a-pr/) যায়। diff --git a/content/bn/docs/tutorials/configuration/configure-java-microservice/_index.md b/content/bn/docs/tutorials/configuration/configure-java-microservice/_index.md new file mode 100644 index 0000000000000..6614577d2d593 --- /dev/null +++ b/content/bn/docs/tutorials/configuration/configure-java-microservice/_index.md @@ -0,0 +1,4 @@ +--- +title: "উদাহরণ: একটি জাভা মাইক্রোসার্ভিস কনফিগার করা" +weight: 10 +--- diff --git a/content/bn/docs/update-user-guide-links.py b/content/bn/docs/update-user-guide-links.py new file mode 100644 index 0000000000000..7c449d73efb08 --- /dev/null +++ b/content/bn/docs/update-user-guide-links.py @@ -0,0 +1,85 @@ +import subprocess +import re + +# Finds the documents to rewrite for files that include user-guide-content-moved.md. +# Then opens these files and processes the stuff after those lines to figure out where +# the line should move to. +# Returns a list of ('old/path', 'new/path') tuples. +def find_documents_to_rewrite(): + cmd = "ag --markdown -Q -l \"{% include user-guide-content-moved.md %}\"" + moved_docs = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout.read().splitlines() + + rewrites = [] + for doc in moved_docs: + location = doc_location(doc) + destinations = get_destinations_for_doc(doc) + + if len(destinations) == 0: + print("Unable to get possible destinations for %s" % doc) + elif len(destinations) > 1: + print("%s has multiple potential destinations. Not rewriting links." % doc) + else: + # print("%s --> %s" % (location, destinations[0])) + rewrites.append((location, destinations[0])) + + return rewrites + +# Returns the location of the documentation as we will refer to it in the markdown. +# /docs/path/to/foo/index.md are available at /docs/path/to/foo/ +# /docs/path/to/foo/bar.md are available at /docs/path/to/foo/bar/ +def doc_location(filename): + if filename.endswith('/index.md'): + return "/docs/" + filename[:-9] + "/" + else: + return "/docs/" + filename[:-3] + "/" + +REDIRECT_REGEX = re.compile("^.*\[(.*)\]\((.*)\)$") + +def get_destinations_for_doc(filename): + destination_paths = [] + with open(filename) as f: + lines = [line.rstrip('\n').rstrip('\r') for line in f.readlines()] + + # Remove empty lines + lines = filter(bool, lines) + + content_moved_index = lines.index("{% include user-guide-content-moved.md %}") + + # Get everything after that line. + destinations = lines[content_moved_index + 1:] + for destination in destinations: + result = REDIRECT_REGEX.match(destination) + if not result: + return [] + doc_title = result.group(1) # Unused, can print it out for more info. + new_path = result.group(2) + destination_paths.append(new_path) + + return destination_paths + +# Given a list of (old/path, new/path) tuples executes a sed command across all files in +# to replace (/docs/path/to/old/doc/) with (/docs/path/to/new/doc/). +def rewrite_documents(rewrites): + cmd = "find . -name '*.md' -type f -exec sed -i.bak 's@(%s)@(%s)@g' '{}' \;" + for original, new in rewrites: + + print("%s --> %s" % (original, new)) + original = original.replace('-', '\-') + new = new.replace('-', '\-') + + #print(cmd % (original, new)) + subprocess.call(cmd % (original, new), shell=True) + +# We can't have in-line replace across multiple files without sudo (I think), so it +# creates a lot of backups that we have to delete. +def remove_sed_backups(): + cmd = "find . -name '*.bak' -delete" + subprocess.call(cmd, shell=True) + +def main(): + rewrites = find_documents_to_rewrite() + rewrite_documents(rewrites) + remove_sed_backups() + +if __name__ == "__main__": + main() diff --git a/content/bn/examples/README.md b/content/bn/examples/README.md new file mode 100644 index 0000000000000..0ac9922b5c8ca --- /dev/null +++ b/content/bn/examples/README.md @@ -0,0 +1,11 @@ +স্থানীয়করণের জন্য পরীক্ষা চালানোর জন্য, নিম্নলিখিত কমান্ডটি ব্যবহার করুন: + +``` +go test k8s.io/website/content//examples +``` + +যেখানে `` একটি ভাষার দুটি অক্ষর উপস্থাপনা। উদাহরণ স্বরূপ: + +``` +go test k8s.io/website/content/en/examples +``` diff --git a/content/bn/examples/application/job/cronjob.yaml b/content/bn/examples/application/job/cronjob.yaml new file mode 100644 index 0000000000000..78d0e2d314792 --- /dev/null +++ b/content/bn/examples/application/job/cronjob.yaml @@ -0,0 +1,19 @@ +apiVersion: batch/v1 +kind: CronJob +metadata: + name: hello +spec: + schedule: "* * * * *" + jobTemplate: + spec: + template: + spec: + containers: + - name: hello + image: busybox:1.28 + imagePullPolicy: IfNotPresent + command: + - /bin/sh + - -c + - date; echo Hello from the Kubernetes cluster + restartPolicy: OnFailure diff --git a/content/bn/examples/application/job/indexed-job-vol.yaml b/content/bn/examples/application/job/indexed-job-vol.yaml new file mode 100644 index 0000000000000..cecc2b7e65ab6 --- /dev/null +++ b/content/bn/examples/application/job/indexed-job-vol.yaml @@ -0,0 +1,27 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: 'indexed-job' +spec: + completions: 5 + parallelism: 3 + completionMode: Indexed + template: + spec: + restartPolicy: Never + containers: + - name: 'worker' + image: 'docker.io/library/busybox' + command: + - "rev" + - "/input/data.txt" + volumeMounts: + - mountPath: /input + name: input + volumes: + - name: input + downwardAPI: + items: + - path: "data.txt" + fieldRef: + fieldPath: metadata.annotations['batch.kubernetes.io/job-completion-index'] diff --git a/content/bn/examples/application/job/indexed-job.yaml b/content/bn/examples/application/job/indexed-job.yaml new file mode 100644 index 0000000000000..5b80d3526491f --- /dev/null +++ b/content/bn/examples/application/job/indexed-job.yaml @@ -0,0 +1,35 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: 'indexed-job' +spec: + completions: 5 + parallelism: 3 + completionMode: Indexed + template: + spec: + restartPolicy: Never + initContainers: + - name: 'input' + image: 'docker.io/library/bash' + command: + - "bash" + - "-c" + - | + items=(foo bar baz qux xyz) + echo ${items[$JOB_COMPLETION_INDEX]} > /input/data.txt + volumeMounts: + - mountPath: /input + name: input + containers: + - name: 'worker' + image: 'docker.io/library/busybox' + command: + - "rev" + - "/input/data.txt" + volumeMounts: + - mountPath: /input + name: input + volumes: + - name: input + emptyDir: {} diff --git a/content/bn/examples/application/job/job-sidecar.yaml b/content/bn/examples/application/job/job-sidecar.yaml new file mode 100644 index 0000000000000..ce483b872ef6f --- /dev/null +++ b/content/bn/examples/application/job/job-sidecar.yaml @@ -0,0 +1,26 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: myjob +spec: + template: + spec: + containers: + - name: myjob + image: alpine:latest + command: ['sh', '-c', 'echo "logging" > /opt/logs.txt'] + volumeMounts: + - name: data + mountPath: /opt + initContainers: + - name: logshipper + image: alpine:latest + restartPolicy: Always + command: ['sh', '-c', 'tail -F /opt/logs.txt'] + volumeMounts: + - name: data + mountPath: /opt + restartPolicy: Never + volumes: + - name: data + emptyDir: {} diff --git a/content/bn/examples/application/job/job-tmpl.yaml b/content/bn/examples/application/job/job-tmpl.yaml new file mode 100644 index 0000000000000..d7dbbafd62bc5 --- /dev/null +++ b/content/bn/examples/application/job/job-tmpl.yaml @@ -0,0 +1,18 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: process-item-$ITEM + labels: + jobgroup: jobexample +spec: + template: + metadata: + name: jobexample + labels: + jobgroup: jobexample + spec: + containers: + - name: c + image: busybox:1.28 + command: ["sh", "-c", "echo Processing item $ITEM && sleep 5"] + restartPolicy: Never diff --git a/content/bn/examples/examples.go b/content/bn/examples/examples.go new file mode 100644 index 0000000000000..9a2cc2ecdc684 --- /dev/null +++ b/content/bn/examples/examples.go @@ -0,0 +1,17 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package examples diff --git a/content/bn/examples/examples_test.go b/content/bn/examples/examples_test.go new file mode 100644 index 0000000000000..ee17a3fdee6ab --- /dev/null +++ b/content/bn/examples/examples_test.go @@ -0,0 +1,850 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package examples_test + +import ( + "bufio" + "bytes" + "fmt" + "io" + "os" + "path/filepath" + "strings" + "testing" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apimachinery/pkg/util/yaml" + "k8s.io/kubernetes/pkg/api/legacyscheme" + + "k8s.io/kubernetes/pkg/apis/admissionregistration" + admreg_validation "k8s.io/kubernetes/pkg/apis/admissionregistration/validation" + + "k8s.io/kubernetes/pkg/apis/apps" + apps_validation "k8s.io/kubernetes/pkg/apis/apps/validation" + + "k8s.io/kubernetes/pkg/apis/autoscaling" + autoscaling_validation "k8s.io/kubernetes/pkg/apis/autoscaling/validation" + + "k8s.io/kubernetes/pkg/apis/batch" + batch_validation "k8s.io/kubernetes/pkg/apis/batch/validation" + + api "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/apis/core/validation" + + // "k8s.io/kubernetes/pkg/apis/flowcontrol" + // flowcontrol_validation "k8s.io/kubernetes/pkg/apis/flowcontrol/validation" + + "k8s.io/kubernetes/pkg/apis/networking" + networking_validation "k8s.io/kubernetes/pkg/apis/networking/validation" + + "k8s.io/kubernetes/pkg/apis/policy" + policy_validation "k8s.io/kubernetes/pkg/apis/policy/validation" + + "k8s.io/kubernetes/pkg/apis/rbac" + rbac_validation "k8s.io/kubernetes/pkg/apis/rbac/validation" + + "k8s.io/kubernetes/pkg/apis/storage" + storage_validation "k8s.io/kubernetes/pkg/apis/storage/validation" + + "k8s.io/kubernetes/pkg/capabilities" + + // initialize install packages + _ "k8s.io/kubernetes/pkg/apis/admissionregistration/install" + _ "k8s.io/kubernetes/pkg/apis/apps/install" + _ "k8s.io/kubernetes/pkg/apis/autoscaling/install" + _ "k8s.io/kubernetes/pkg/apis/batch/install" + _ "k8s.io/kubernetes/pkg/apis/core/install" + _ "k8s.io/kubernetes/pkg/apis/networking/install" + _ "k8s.io/kubernetes/pkg/apis/policy/install" + _ "k8s.io/kubernetes/pkg/apis/rbac/install" + _ "k8s.io/kubernetes/pkg/apis/storage/install" +) + +var ( + Groups map[string]TestGroup + serializer runtime.SerializerInfo +) + +// TestGroup contains GroupVersion to uniquely identify the API +type TestGroup struct { + externalGroupVersion schema.GroupVersion +} + +// GroupVersion makes copy of schema.GroupVersion +func (g TestGroup) GroupVersion() *schema.GroupVersion { + copyOfGroupVersion := g.externalGroupVersion + return ©OfGroupVersion +} + +// Codec returns the codec for the API version to test against +func (g TestGroup) Codec() runtime.Codec { + if serializer.Serializer == nil { + return legacyscheme.Codecs.LegacyCodec(g.externalGroupVersion) + } + return legacyscheme.Codecs.CodecForVersions(serializer.Serializer, legacyscheme.Codecs.UniversalDeserializer(), schema.GroupVersions{g.externalGroupVersion}, nil) +} + +func initGroups() { + Groups = make(map[string]TestGroup) + groupNames := []string{ + admissionregistration.GroupName, + api.GroupName, + apps.GroupName, + autoscaling.GroupName, + batch.GroupName, + networking.GroupName, + policy.GroupName, + rbac.GroupName, + storage.GroupName, + } + + for _, gn := range groupNames { + versions := legacyscheme.Scheme.PrioritizedVersionsForGroup(gn) + Groups[gn] = TestGroup{ + externalGroupVersion: schema.GroupVersion{ + Group: gn, + Version: versions[0].Version, + }, + } + } +} + +func getCodecForObject(obj runtime.Object) (runtime.Codec, error) { + kinds, _, err := legacyscheme.Scheme.ObjectKinds(obj) + if err != nil { + return nil, fmt.Errorf("unexpected encoding error: %v", err) + } + kind := kinds[0] + + for _, group := range Groups { + if group.GroupVersion().Group != kind.Group { + continue + } + + if legacyscheme.Scheme.Recognizes(kind) { + return group.Codec(), nil + } + } + // Codec used for unversioned types + if legacyscheme.Scheme.Recognizes(kind) { + serializer, ok := runtime.SerializerInfoForMediaType(legacyscheme.Codecs.SupportedMediaTypes(), runtime.ContentTypeJSON) + if !ok { + return nil, fmt.Errorf("no serializer registered for json") + } + return serializer.Serializer, nil + } + return nil, fmt.Errorf("unexpected kind: %v", kind) +} + +func validateObject(obj runtime.Object) (errors field.ErrorList) { + podValidationOptions := validation.PodValidationOptions{ + AllowInvalidPodDeletionCost: false, + AllowIndivisibleHugePagesValues: true, + } + netValidationOptions := networking_validation.NetworkPolicyValidationOptions{ + AllowInvalidLabelValueInSelector: false, + } + pdbValidationOptions := policy_validation.PodDisruptionBudgetValidationOptions{ + AllowInvalidLabelValueInSelector: false, + } + clusterroleValidationOptions := rbac_validation.ClusterRoleValidationOptions{ + AllowInvalidLabelValueInSelector: false, + } + + // Enable CustomPodDNS for testing + // feature.DefaultFeatureGate.Set("CustomPodDNS=true") + switch t := obj.(type) { + case *admissionregistration.ValidatingWebhookConfiguration: + errors = admreg_validation.ValidateValidatingWebhookConfiguration(t) + case *admissionregistration.ValidatingAdmissionPolicy: + errors = admreg_validation.ValidateValidatingAdmissionPolicy(t) + case *api.ConfigMap: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = validation.ValidateConfigMap(t) + case *api.Endpoints: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = validation.ValidateEndpointsCreate(t) + case *api.LimitRange: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = validation.ValidateLimitRange(t) + case *api.Namespace: + errors = validation.ValidateNamespace(t) + case *api.PersistentVolume: + opts := validation.PersistentVolumeSpecValidationOptions{} + errors = validation.ValidatePersistentVolume(t, opts) + case *api.PersistentVolumeClaim: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + opts := validation.PersistentVolumeClaimSpecValidationOptions{} + errors = validation.ValidatePersistentVolumeClaim(t, opts) + case *api.Pod: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = validation.ValidatePodCreate(t, podValidationOptions) + case *api.PodList: + for i := range t.Items { + errors = append(errors, validateObject(&t.Items[i])...) + } + case *api.PodTemplate: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = validation.ValidatePodTemplate(t, podValidationOptions) + case *api.ReplicationController: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = validation.ValidateReplicationController(t, podValidationOptions) + case *api.ReplicationControllerList: + for i := range t.Items { + errors = append(errors, validateObject(&t.Items[i])...) + } + case *api.ResourceQuota: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = validation.ValidateResourceQuota(t) + case *api.Secret: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = validation.ValidateSecret(t) + case *api.Service: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + // handle clusterIPs, logic copied from service strategy + if len(t.Spec.ClusterIP) > 0 && len(t.Spec.ClusterIPs) == 0 { + t.Spec.ClusterIPs = []string{t.Spec.ClusterIP} + } + errors = validation.ValidateService(t) + case *api.ServiceAccount: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = validation.ValidateServiceAccount(t) + case *api.ServiceList: + for i := range t.Items { + errors = append(errors, validateObject(&t.Items[i])...) + } + case *apps.StatefulSet: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = apps_validation.ValidateStatefulSet(t, podValidationOptions) + case *apps.DaemonSet: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = apps_validation.ValidateDaemonSet(t, podValidationOptions) + case *apps.Deployment: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = apps_validation.ValidateDeployment(t, podValidationOptions) + case *apps.ReplicaSet: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = apps_validation.ValidateReplicaSet(t, podValidationOptions) + case *autoscaling.HorizontalPodAutoscaler: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = autoscaling_validation.ValidateHorizontalPodAutoscaler(t) + case *batch.CronJob: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = batch_validation.ValidateCronJobCreate(t, podValidationOptions) + case *batch.Job: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + + // Job needs generateSelector called before validation, and job.Validate does this. + if strings.Index(t.ObjectMeta.Name, "$") > -1 { + t.ObjectMeta.Name = "skip-for-good" + } + t.ObjectMeta.UID = types.UID("fakeuid") + if t.Spec.Template.ObjectMeta.Labels == nil { + t.Spec.Template.ObjectMeta.Labels = make(map[string]string) + } + t.Spec.Template.ObjectMeta.Labels["controller-uid"] = "fakeuid" + t.Spec.Template.ObjectMeta.Labels["job-name"] = t.ObjectMeta.Name + if t.Spec.Selector == nil { + t.Spec.Selector = &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "controller-uid": "fakeuid", + "job-name": t.ObjectMeta.Name, + }, + } + } + opts := batch_validation.JobValidationOptions{ + RequirePrefixedLabels: false, + } + errors = batch_validation.ValidateJob(t, opts) + + // case *flowcontrol.FlowSchema: + // TODO: This is still failing + // errors = flowcontrol_validation.ValidateFlowSchema(t) + + case *networking.Ingress: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = networking_validation.ValidateIngressCreate(t) + case *networking.IngressClass: + errors = networking_validation.ValidateIngressClass(t) + case *networking.NetworkPolicy: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = networking_validation.ValidateNetworkPolicy(t, netValidationOptions) + case *policy.PodDisruptionBudget: + if t.Namespace == "" { + t.Namespace = api.NamespaceDefault + } + errors = policy_validation.ValidatePodDisruptionBudget(t, pdbValidationOptions) + case *rbac.ClusterRole: + // clusterole does not accept namespace + errors = rbac_validation.ValidateClusterRole(t, clusterroleValidationOptions) + case *rbac.ClusterRoleBinding: + // clusterolebinding does not accept namespace + errors = rbac_validation.ValidateClusterRoleBinding(t) + case *rbac.RoleBinding: + errors = rbac_validation.ValidateRoleBinding(t) + case *storage.StorageClass: + // storageclass does not accept namespace + errors = storage_validation.ValidateStorageClass(t) + default: + errors = field.ErrorList{} + errors = append(errors, field.InternalError(field.NewPath(""), fmt.Errorf("no validation defined for %#v", obj))) + } + return errors +} + +// Walks inDir for any json/yaml files. Converts yaml to json, and calls fn for +// each file found with the contents in data. +func walkConfigFiles(inDir string, t *testing.T, fn func(name, path string, data [][]byte)) error { + return filepath.Walk(inDir, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + if info.IsDir() && path != inDir { + return filepath.SkipDir + } + + file := filepath.Base(path) + if ext := filepath.Ext(file); ext == ".json" || ext == ".yaml" { + data, err := os.ReadFile(path) + if err != nil { + return err + } + name := strings.TrimSuffix(file, ext) + + var docs [][]byte + if ext == ".yaml" { + // YAML can contain multiple documents. + splitter := yaml.NewYAMLReader(bufio.NewReader(bytes.NewBuffer(data))) + for { + doc, err := splitter.Read() + if err == io.EOF { + break + } + if err != nil { + return fmt.Errorf("%s: %v", path, err) + } + out, err := yaml.ToJSON(doc) + if err != nil { + return fmt.Errorf("%s: %v", path, err) + } + // deal with "empty" document (e.g. pure comments) + if string(out) != "null" { + docs = append(docs, out) + } + } + } else { + docs = append(docs, data) + } + + t.Logf("Checking file %s\n", name) + fn(name, path, docs) + } + return nil + }) +} + +func TestExampleObjectSchemas(t *testing.T) { + initGroups() + + // Please help maintain the alphabeta order in the map + cases := map[string]map[string][]runtime.Object{ + "access": { + "deployment-replicas-policy": {&admissionregistration.ValidatingAdmissionPolicy{}}, + "endpoints-aggregated": {&rbac.ClusterRole{}}, + "image-matches-namespace-environment.policy": {&admissionregistration.ValidatingAdmissionPolicy{}}, + "validating-admission-policy-audit-annotation": {&admissionregistration.ValidatingAdmissionPolicy{}}, + "validating-admission-policy-match-conditions": {&admissionregistration.ValidatingAdmissionPolicy{}}, + }, + "access/certificate-signing-request": { + "clusterrole-approve": {&rbac.ClusterRole{}}, + "clusterrole-create": {&rbac.ClusterRole{}}, + "clusterrole-sign": {&rbac.ClusterRole{}}, + }, + "admin": { + "namespace-dev": {&api.Namespace{}}, + "namespace-prod": {&api.Namespace{}}, + "snowflake-deployment": {&apps.Deployment{}}, + }, + "admin/cloud": { + "ccm-example": {&api.ServiceAccount{}, &rbac.ClusterRoleBinding{}, &apps.DaemonSet{}}, + }, + "admin/dns": { + "busybox": {&api.Pod{}}, + "dns-horizontal-autoscaler": {&api.ServiceAccount{}, &rbac.ClusterRole{}, &rbac.ClusterRoleBinding{}, &apps.Deployment{}}, + "dnsutils": {&api.Pod{}}, + }, + // TODO: "admin/konnectivity" is not include yet. + "admin/logging": { + "fluentd-sidecar-config": {&api.ConfigMap{}}, + "two-files-counter-pod": {&api.Pod{}}, + "two-files-counter-pod-agent-sidecar": {&api.Pod{}}, + "two-files-counter-pod-streaming-sidecar": {&api.Pod{}}, + }, + "admin/resource": { + "cpu-constraints": {&api.LimitRange{}}, + "cpu-constraints-pod": {&api.Pod{}}, + "cpu-constraints-pod-2": {&api.Pod{}}, + "cpu-constraints-pod-3": {&api.Pod{}}, + "cpu-constraints-pod-4": {&api.Pod{}}, + "cpu-defaults": {&api.LimitRange{}}, + "cpu-defaults-pod": {&api.Pod{}}, + "cpu-defaults-pod-2": {&api.Pod{}}, + "cpu-defaults-pod-3": {&api.Pod{}}, + "limit-mem-cpu-container": {&api.LimitRange{}}, + "limit-mem-cpu-pod": {&api.LimitRange{}}, + "limit-range-pod-1": {&api.Pod{}}, + "limit-range-pod-2": {&api.Pod{}}, + "limit-range-pod-3": {&api.Pod{}}, + "limit-memory-ratio-pod": {&api.LimitRange{}}, + "memory-constraints": {&api.LimitRange{}}, + "memory-constraints-pod": {&api.Pod{}}, + "memory-constraints-pod-2": {&api.Pod{}}, + "memory-constraints-pod-3": {&api.Pod{}}, + "memory-constraints-pod-4": {&api.Pod{}}, + "memory-defaults": {&api.LimitRange{}}, + "memory-defaults-pod": {&api.Pod{}}, + "memory-defaults-pod-2": {&api.Pod{}}, + "memory-defaults-pod-3": {&api.Pod{}}, + "pvc-limit-lower": {&api.PersistentVolumeClaim{}}, + "pvc-limit-greater": {&api.PersistentVolumeClaim{}}, + "quota-mem-cpu": {&api.ResourceQuota{}}, + "quota-mem-cpu-pod": {&api.Pod{}}, + "quota-mem-cpu-pod-2": {&api.Pod{}}, + "quota-objects": {&api.ResourceQuota{}}, + "quota-objects-pvc": {&api.PersistentVolumeClaim{}}, + "quota-objects-pvc-2": {&api.PersistentVolumeClaim{}}, + "quota-pod": {&api.ResourceQuota{}}, + "quota-pod-deployment": {&apps.Deployment{}}, + "storagelimits": {&api.LimitRange{}}, + }, + "admin/sched": { + "clusterrole": {&rbac.ClusterRole{}}, + "my-scheduler": {&api.ServiceAccount{}, &rbac.ClusterRoleBinding{}, &rbac.ClusterRoleBinding{}, &rbac.RoleBinding{}, &api.ConfigMap{}, &apps.Deployment{}}, + "pod1": {&api.Pod{}}, + "pod2": {&api.Pod{}}, + "pod3": {&api.Pod{}}, + }, + "application": { + "deployment": {&apps.Deployment{}}, + "deployment-patch": {&apps.Deployment{}}, + "deployment-retainkeys": {&apps.Deployment{}}, + "deployment-scale": {&apps.Deployment{}}, + "deployment-sidecar": {&apps.Deployment{}}, + "deployment-update": {&apps.Deployment{}}, + "nginx-app": {&api.Service{}, &apps.Deployment{}}, + "nginx-with-request": {&apps.Deployment{}}, + "php-apache": {&apps.Deployment{}, &api.Service{}}, + "shell-demo": {&api.Pod{}}, + "simple_deployment": {&apps.Deployment{}}, + "update_deployment": {&apps.Deployment{}}, + }, + "application/cassandra": { + "cassandra-service": {&api.Service{}}, + "cassandra-statefulset": {&apps.StatefulSet{}, &storage.StorageClass{}}, + }, + "application/guestbook": { + "frontend-deployment": {&apps.Deployment{}}, + "frontend-service": {&api.Service{}}, + "redis-follower-deployment": {&apps.Deployment{}}, + "redis-follower-service": {&api.Service{}}, + "redis-leader-deployment": {&apps.Deployment{}}, + "redis-leader-service": {&api.Service{}}, + }, + "application/hpa": { + "php-apache": {&autoscaling.HorizontalPodAutoscaler{}}, + }, + "application/job": { + "cronjob": {&batch.CronJob{}}, + "job-sidecar": {&batch.Job{}}, + "job-tmpl": {&batch.Job{}}, + "indexed-job": {&batch.Job{}}, + "indexed-job-vol": {&batch.Job{}}, + }, + "application/job/rabbitmq": { + "job": {&batch.Job{}}, + "rabbitmq-statefulset": {&apps.StatefulSet{}}, + "rabbitmq-service": {&api.Service{}}, + }, + "application/job/redis": { + "job": {&batch.Job{}}, + "redis-pod": {&api.Pod{}}, + "redis-service": {&api.Service{}}, + }, + "application/mongodb": { + "mongo-deployment": {&apps.Deployment{}}, + "mongo-service": {&api.Service{}}, + }, + "application/mysql": { + "mysql-configmap": {&api.ConfigMap{}}, + "mysql-deployment": {&api.Service{}, &apps.Deployment{}}, + "mysql-pv": {&api.PersistentVolume{}, &api.PersistentVolumeClaim{}}, + "mysql-services": {&api.Service{}, &api.Service{}}, + "mysql-statefulset": {&apps.StatefulSet{}}, + }, + "application/nginx": { + "nginx-deployment": {&apps.Deployment{}}, + "nginx-svc": {&api.Service{}}, + }, + "application/ssa": { + "nginx-deployment": {&apps.Deployment{}}, + "nginx-deployment-no-replicas": {&apps.Deployment{}}, + }, + "application/web": { + "web": {&api.Service{}, &apps.StatefulSet{}}, + "web-parallel": {&api.Service{}, &apps.StatefulSet{}}, + }, + "application/wordpress": { + "mysql-deployment": {&api.Service{}, &api.PersistentVolumeClaim{}, &apps.Deployment{}}, + "wordpress-deployment": {&api.Service{}, &api.PersistentVolumeClaim{}, &apps.Deployment{}}, + }, + "application/zookeeper": { + "zookeeper": {&api.Service{}, &api.Service{}, &policy.PodDisruptionBudget{}, &apps.StatefulSet{}}, + }, + "concepts/policy/limit-range": { + "example-conflict-with-limitrange-cpu": {&api.Pod{}}, + "problematic-limit-range": {&api.LimitRange{}}, + "example-no-conflict-with-limitrange-cpu": {&api.Pod{}}, + }, + "configmap": { + "configmaps": {&api.ConfigMap{}, &api.ConfigMap{}}, + "configmap-multikeys": {&api.ConfigMap{}}, + "configure-pod": {&api.Pod{}}, + }, + "controllers": { + "daemonset": {&apps.DaemonSet{}}, + "daemonset-label-selector": {&apps.DaemonSet{}}, + "fluentd-daemonset": {&apps.DaemonSet{}}, + "fluentd-daemonset-update": {&apps.DaemonSet{}}, + "frontend": {&apps.ReplicaSet{}}, + "hpa-rs": {&autoscaling.HorizontalPodAutoscaler{}}, + "job": {&batch.Job{}}, + "job-backoff-limit-per-index-example": {&batch.Job{}}, + "job-pod-failure-policy-config-issue": {&batch.Job{}}, + "job-pod-failure-policy-example": {&batch.Job{}}, + "job-pod-failure-policy-failjob": {&batch.Job{}}, + "job-pod-failure-policy-ignore": {&batch.Job{}}, + "replicaset": {&apps.ReplicaSet{}}, + "replication": {&api.ReplicationController{}}, + "replication-nginx-1.14.2": {&api.ReplicationController{}}, + "replication-nginx-1.16.1": {&api.ReplicationController{}}, + "nginx-deployment": {&apps.Deployment{}}, + }, + "debug": { + "counter-pod": {&api.Pod{}}, + "event-exporter": {&api.ServiceAccount{}, &rbac.ClusterRoleBinding{}, &apps.Deployment{}}, + "fluentd-gcp-configmap": {&api.ConfigMap{}}, + "fluentd-gcp-ds": {&apps.DaemonSet{}}, + "node-problem-detector": {&apps.DaemonSet{}}, + "node-problem-detector-configmap": {&apps.DaemonSet{}}, + "termination": {&api.Pod{}}, + }, + "pods": { + "commands": {&api.Pod{}}, + "init-containers": {&api.Pod{}}, + "lifecycle-events": {&api.Pod{}}, + "pod-configmap-env-var-valueFrom": {&api.Pod{}}, + "pod-configmap-envFrom": {&api.Pod{}}, + "pod-configmap-volume": {&api.Pod{}}, + "pod-configmap-volume-specific-key": {&api.Pod{}}, + "pod-multiple-configmap-env-variable": {&api.Pod{}}, + "pod-nginx-preferred-affinity": {&api.Pod{}}, + "pod-nginx-required-affinity": {&api.Pod{}}, + "pod-nginx-specific-node": {&api.Pod{}}, + "pod-nginx": {&api.Pod{}}, + "pod-projected-svc-token": {&api.Pod{}}, + "pod-rs": {&api.Pod{}, &api.Pod{}}, + "pod-single-configmap-env-variable": {&api.Pod{}}, + "pod-with-affinity-preferred-weight": {&api.Pod{}}, + "pod-with-node-affinity": {&api.Pod{}}, + "pod-with-pod-affinity": {&api.Pod{}}, + "pod-with-scheduling-gates": {&api.Pod{}}, + "pod-with-toleration": {&api.Pod{}}, + "pod-without-scheduling-gates": {&api.Pod{}}, + "private-reg-pod": {&api.Pod{}}, + "share-process-namespace": {&api.Pod{}}, + "simple-pod": {&api.Pod{}}, + "two-container-pod": {&api.Pod{}}, + "user-namespaces-stateless": {&api.Pod{}}, + }, + "pods/config": { + "redis-pod": {&api.Pod{}}, + "example-redis-config": {&api.ConfigMap{}}, + }, + "pods/inject": { + "dapi-envars-container": {&api.Pod{}}, + "dapi-envars-pod": {&api.Pod{}}, + "dapi-volume": {&api.Pod{}}, + "dapi-volume-resources": {&api.Pod{}}, + "dependent-envars": {&api.Pod{}}, + "envars": {&api.Pod{}}, + "pod-multiple-secret-env-variable": {&api.Pod{}}, + "pod-secret-envFrom": {&api.Pod{}}, + "pod-single-secret-env-variable": {&api.Pod{}}, + "secret": {&api.Secret{}}, + "secret-envars-pod": {&api.Pod{}}, + "secret-pod": {&api.Pod{}}, + }, + "pods/probe": { + "exec-liveness": {&api.Pod{}}, + "grpc-liveness": {&api.Pod{}}, + "http-liveness": {&api.Pod{}}, + "pod-with-http-healthcheck": {&api.Pod{}}, + "pod-with-tcp-socket-healthcheck": {&api.Pod{}}, + "tcp-liveness-readiness": {&api.Pod{}}, + }, + "pods/qos": { + "qos-pod": {&api.Pod{}}, + "qos-pod-2": {&api.Pod{}}, + "qos-pod-3": {&api.Pod{}}, + "qos-pod-4": {&api.Pod{}}, + "qos-pod-5": {&api.Pod{}}, + }, + "pods/resource": { + "cpu-request-limit": {&api.Pod{}}, + "cpu-request-limit-2": {&api.Pod{}}, + "extended-resource-pod": {&api.Pod{}}, + "extended-resource-pod-2": {&api.Pod{}}, + "memory-request-limit": {&api.Pod{}}, + "memory-request-limit-2": {&api.Pod{}}, + "memory-request-limit-3": {&api.Pod{}}, + }, + "pods/security": { + "hello-apparmor": {&api.Pod{}}, + "security-context": {&api.Pod{}}, + "security-context-2": {&api.Pod{}}, + "security-context-3": {&api.Pod{}}, + "security-context-4": {&api.Pod{}}, + }, + "pods/storage": { + "projected": {&api.Pod{}}, + "projected-secret-downwardapi-configmap": {&api.Pod{}}, + "projected-secrets-nondefault-permission-mode": {&api.Pod{}}, + "projected-service-account-token": {&api.Pod{}}, + "pv-claim": {&api.PersistentVolumeClaim{}}, + "pv-duplicate": {&api.Pod{}}, + "pv-pod": {&api.Pod{}}, + "pv-volume": {&api.PersistentVolume{}}, + "redis": {&api.Pod{}}, + "projected-clustertrustbundle": {&api.Pod{}}, + }, + "pods/topology-spread-constraints": { + "one-constraint": {&api.Pod{}}, + "one-constraint-with-nodeaffinity": {&api.Pod{}}, + "two-constraints": {&api.Pod{}}, + }, + "policy": { + "priority-class-resourcequota": {&api.ResourceQuota{}}, + "zookeeper-pod-disruption-budget-maxunavailable": {&policy.PodDisruptionBudget{}}, + "zookeeper-pod-disruption-budget-minavailable": {&policy.PodDisruptionBudget{}}, + }, + /* TODO: This doesn't work yet. + "priority-and-fairness": { + "health-for-strangers": {&flowcontrol.FlowSchema{}}, + }, + */ + "secret/serviceaccount": { + "mysecretname": {&api.Secret{}}, + }, + "security": { + "example-baseline-pod": {&api.Pod{}}, + "podsecurity-baseline": {&api.Namespace{}}, + "podsecurity-privileged": {&api.Namespace{}}, + "podsecurity-restricted": {&api.Namespace{}}, + }, + "service": { + "nginx-service": {&api.Service{}}, + "load-balancer-example": {&apps.Deployment{}}, + "pod-with-graceful-termination": {&apps.Deployment{}}, + "explore-graceful-termination-nginx": {&api.Service{}}, + }, + "service/access": { + "backend-deployment": {&apps.Deployment{}}, + "backend-service": {&api.Service{}}, + "frontend-deployment": {&apps.Deployment{}}, + "frontend-service": {&api.Service{}}, + "hello-application": {&apps.Deployment{}}, + }, + "service/networking": { + "curlpod": {&apps.Deployment{}}, + "custom-dns": {&api.Pod{}}, + "default-ingressclass": {&networking.IngressClass{}}, + "dual-stack-default-svc": {&api.Service{}}, + "dual-stack-ipfamilies-ipv6": {&api.Service{}}, + "dual-stack-ipv6-svc": {&api.Service{}}, + "dual-stack-prefer-ipv6-lb-svc": {&api.Service{}}, + "dual-stack-preferred-ipfamilies-svc": {&api.Service{}}, + "dual-stack-preferred-svc": {&api.Service{}}, + "external-lb": {&networking.IngressClass{}}, + "example-ingress": {&networking.Ingress{}}, + "hostaliases-pod": {&api.Pod{}}, + "ingress-resource-backend": {&networking.Ingress{}}, + "ingress-wildcard-host": {&networking.Ingress{}}, + "minimal-ingress": {&networking.Ingress{}}, + "name-virtual-host-ingress": {&networking.Ingress{}}, + "name-virtual-host-ingress-no-third-host": {&networking.Ingress{}}, + "namespaced-params": {&networking.IngressClass{}}, + "networkpolicy": {&networking.NetworkPolicy{}}, + "networkpolicy-multiport-egress": {&networking.NetworkPolicy{}}, + "network-policy-allow-all-egress": {&networking.NetworkPolicy{}}, + "network-policy-allow-all-ingress": {&networking.NetworkPolicy{}}, + "network-policy-default-deny-egress": {&networking.NetworkPolicy{}}, + "network-policy-default-deny-ingress": {&networking.NetworkPolicy{}}, + "network-policy-default-deny-all": {&networking.NetworkPolicy{}}, + "nginx-policy": {&networking.NetworkPolicy{}}, + "nginx-secure-app": {&api.Service{}, &apps.Deployment{}}, + "nginx-svc": {&api.Service{}}, + "run-my-nginx": {&apps.Deployment{}}, + "simple-fanout-example": {&networking.Ingress{}}, + "test-ingress": {&networking.Ingress{}}, + "tls-example-ingress": {&networking.Ingress{}}, + }, + "windows": { + "configmap-pod": {&api.ConfigMap{}, &api.Pod{}}, + "daemonset": {&apps.DaemonSet{}}, + "deploy-hyperv": {&apps.Deployment{}}, + "deploy-resource": {&apps.Deployment{}}, + "emptydir-pod": {&api.Pod{}}, + "hostpath-volume-pod": {&api.Pod{}}, + "run-as-username-container": {&api.Pod{}}, + "run-as-username-pod": {&api.Pod{}}, + "secret-pod": {&api.Secret{}, &api.Pod{}}, + "simple-pod": {&api.Pod{}}, + }, + } + + // Note a key in the following map has to be complete relative path + filesIgnore := map[string]map[string]bool{ + "audit": { + "audit-policy": true, + }, + // PSP is dropped in v1.29, do not validate them + "policy": { + "baseline-psp": true, + "example-psp": true, + "privileged-psp": true, + "restricted-psp": true, + }, + } + capabilities.SetForTests(capabilities.Capabilities{ + AllowPrivileged: true, + }) + + for dir, expected := range cases { + tested := 0 + numExpected := 0 + path := dir + // Test if artifacts do exist + for name := range expected { + fn := path + "/" + name + _, err1 := os.Stat(fn + ".yaml") + _, err2 := os.Stat(fn + ".json") + if err1 != nil && err2 != nil { + t.Errorf("Test case defined for non-existent file %s", fn) + } + } + t.Logf("Checking path %s/\n", path) + err := walkConfigFiles(path, t, func(name, path string, docs [][]byte) { + expectedTypes, found := expected[name] + if !found { + p := filepath.Dir(path) + if files, ok := filesIgnore[p]; ok { + if files[name] { + return + } + } + t.Errorf("%s: %s does not have a test case defined", path, name) + return + } + numExpected += len(expectedTypes) + if len(expectedTypes) != len(docs) { + t.Errorf("%s: number of expected types (%v) doesn't match number of docs in YAML (%v)", path, len(expectedTypes), len(docs)) + return + } + for i, data := range docs { + expectedType := expectedTypes[i] + tested++ + if expectedType == nil { + t.Logf("skipping : %s/%s\n", path, name) + return + } + + codec, err := getCodecForObject(expectedType) + if err != nil { + t.Errorf("Could not get codec for %s: %s", expectedType, err) + } + if err := runtime.DecodeInto(codec, data, expectedType); err != nil { + t.Errorf("%s did not decode correctly: %v\n%s", path, err, string(data)) + return + } + if errors := validateObject(expectedType); len(errors) > 0 { + t.Errorf("%s did not validate correctly: %v", path, errors) + } + } + }) + if err != nil { + t.Errorf("Expected no error, Got %v on Path %v", err, path) + } + if tested != numExpected { + t.Errorf("Directory %v: Expected %d examples, Got %d", path, len(expected), tested) + } + } +} diff --git a/content/bn/includes/default-storage-class-prereqs.md b/content/bn/includes/default-storage-class-prereqs.md new file mode 100644 index 0000000000000..c0b74c8a2263a --- /dev/null +++ b/content/bn/includes/default-storage-class-prereqs.md @@ -0,0 +1,5 @@ +আপনার হয় একটি ডিফল্ট [StorageClass](/bn/docs/concepts/storage/storage-classes/) সহ +একটি [dynamic PersistentVolume provisioner](/bn/docs/concepts/storage/dynamic-provisioning/) থাকতে হবে, +অথবা এখানে ব্যবহৃত [PersistentVolumeClaims](/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) +গুলোকে সন্তুষ্ট করার জন্য নিজেকে [statically provision PersistentVolumes](/docs/concepts/storage/persistent-volumes/#provisioning) +করতে হবে। diff --git a/content/bn/includes/task-tutorial-prereqs-node-upgrade.md b/content/bn/includes/task-tutorial-prereqs-node-upgrade.md new file mode 100644 index 0000000000000..e2f63196581b3 --- /dev/null +++ b/content/bn/includes/task-tutorial-prereqs-node-upgrade.md @@ -0,0 +1,3 @@ +আপনার সমস্ত নোডগুলিতে শেল অ্যাক্সেস থাকতে হবে এবং আপনার ক্লাস্টারের সাথে যোগাযোগ করার জন্য +kubectl কমান্ড-লাইন টুলটি কনফিগার করা আবশ্যক। কমপক্ষে দুটি নোড সহ একটি ক্লাস্টারে এই টিউটোরিয়ালটি +চালানোর পরামর্শ দেওয়া হচ্ছে যা কন্ট্রোল প্লেন হোস্ট হিসাবে কাজ করছে না। diff --git a/content/bn/includes/task-tutorial-prereqs.md b/content/bn/includes/task-tutorial-prereqs.md index f545a022698fb..7b16860b08cc3 100644 --- a/content/bn/includes/task-tutorial-prereqs.md +++ b/content/bn/includes/task-tutorial-prereqs.md @@ -1,4 +1,8 @@ -আপনার একটি Kubernetes ক্লাস্টার থাকতে হবে এবং আপনার ক্লাস্টারের সাথে যোগাযোগের জন্য kubectl কমান্ড-লাইন টুলটি কনফিগার করা আবশ্যক । কমপক্ষে দুটি নোড সহ একটি ক্লাস্টারে (যা কন্ট্রোল প্লেন হোস্ট হিসাবে কাজ করছে না) এই টিউটোরিয়ালটি চালাতে হবে । আপনার যদি ইতিমধ্যে একটি ক্লাস্টার না থাকে তবে আপনি [minikube](https://minikube.sigs.k8s.io/docs/tutorials/multi_node/) ব্যবহার করে একটি তৈরি করতে পারেনি বা এই Kubernetes playground-গুলির মধ্যে একটি ব্যবহার করতে পারেন । +আপনার একটি কুবারনেটিস ক্লাস্টার থাকতে হবে এবং আপনার ক্লাস্টারের সাথে যোগাযোগের জন্য +kubectl কমান্ড-লাইন টুলটি কনফিগার করা আবশ্যক । কমপক্ষে দুটি নোড সহ একটি ক্লাস্টারে (যা কন্ট্রোল প্লেন হোস্ট হিসাবে কাজ করছে না) এই টিউটোরিয়ালটি চালাতে হবে । আপনার যদি ইতিমধ্যে একটি ক্লাস্টার না থাকে তবে আপনি +[minikube](https://minikube.sigs.k8s.io/docs/tutorials/multi_node/) +ব্যবহার করে একটি তৈরি করতে পারেনি বা এই Kubernetes playground-গুলির +মধ্যে একটি ব্যবহার করতে পারেন । * [Killercoda](https://killercoda.com/playgrounds/scenario/kubernetes) -* [Play with Kubernetes](http://labs.play-with-k8s.com/) +* [Play with Kubernetes](https://labs.play-with-k8s.com/) diff --git a/content/bn/includes/user-guide-content-moved.md b/content/bn/includes/user-guide-content-moved.md new file mode 100644 index 0000000000000..bcbbe54bd8dcd --- /dev/null +++ b/content/bn/includes/user-guide-content-moved.md @@ -0,0 +1,3 @@ +কুবারনেটিস ডক্সের ইউজার গাইড বিভাগের বিষয়গুলো +[টাস্ক](/bn/docs/tasks/), [টিউটোরিয়াল](/bn/docs/tutorials/) এবং +[ধারণা](/bn/docs/concepts) বিভাগে সরানো হচ্ছে। এই বিষয়ের কনটেন্ট স্থানান্তরিত হয়েছে: diff --git a/content/bn/releases/patch-releases.md b/content/bn/releases/patch-releases.md index 43a9b95d21a20..20505bb0ab50c 100644 --- a/content/bn/releases/patch-releases.md +++ b/content/bn/releases/patch-releases.md @@ -76,11 +76,11 @@ type: docs নিম্নলিখিত মাসিক রিলিজ পয়েন্টগুলির লক্ষ্য করব। অপরিকল্পিত, গুরুত্বপূর্ণ রিলিজগুলি এদের মধ্যেও ঘটতে পারে। -| মাসিক প্যাচ রিলিজ | চেরি পিক শেষ সময় | লক্ষ্য তারিখ | +| Monthly Patch Release | Cherry Pick Deadline | Target date | | --------------------- | -------------------- | ----------- | -| মার্চ 2024 | 2024-03-08 | 2024-03-13 | -| এপ্রিল 2024 | 2024-04-12 | 2024-04-17 | -| মে 2024 | 2024-05-10 | 2024-05-15 | +| April 2024 | 2024-04-12 | 2024-04-16 | +| May 2024 | 2024-05-10 | 2024-05-14 | +| June 2024 | 2024-06-07 | 2024-06-11 | ## সক্রিয় শাখাগুলির জন্য বিস্তারিত রিলিজ ইতিহাস diff --git a/content/bn/training/_index.html b/content/bn/training/_index.html new file mode 100644 index 0000000000000..4d255bc87965b --- /dev/null +++ b/content/bn/training/_index.html @@ -0,0 +1,158 @@ +--- +title: প্রশিক্ষণ +bigheader: কুবারনেটিস প্রশিক্ষণ এবং সার্টিফিকেশন +abstract: প্রশিক্ষণ প্রোগ্রাম, সার্টিফিকেশন, এবং পার্টনার। +layout: basic +cid: training +class: training +body_class: training +menu: + main: + weight: 30 +--- + +
+
+
+
+

আপনার ক্লাউড নেটিভ ক্যারিয়ার তৈরি করুন

+

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

+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ +
+
+
+

edX-এ একটি বিনামূল্যে কোর্স নিন

+
+
+
+
+
+ কুবারনেটিসের পরিচিতি
 
+
+

কুবারনেটিস শিখতে চান? কন্টেইনারাইজড অ্যাপ্লিকেশন পরিচালনার জন্য এই শক্তিশালী সিস্টেমে একটি গভীর প্রাইমার পান।

+
+ কোর্সে যান +
+
+
+
+
+ ক্লাউড ইনফ্রাস্ট্রাকচার প্রযুক্তির পরিচিতি +
+

ওপেন সোর্স লিডার লিনাক্স ফাউন্ডেশন থেকে সরাসরি ক্লাউড প্রযুক্তি নির্মাণ ও পরিচালনার মৌলিক বিষয়গুলো শিখুন।

+
+ কোর্সে যান +
+
+
+
+
+ লিনাক্সের পরিচিতি +
+

কখনো লিনাক্স শিখেনি? একটি রিফ্রেশ চান? প্রধান লিনাক্স ডিস্ট্রিবিউশন ফ্যামিলিগুলোতে গ্রাফিকাল ইন্টারফেস এবং কমান্ড লাইন উভয় ব্যবহার করে লিনাক্সের একটি ভাল কাজের জ্ঞান বিকাশ করুন।

+
+ কোর্সে যান +
+
+
+
+ +
+
+
+

লিনাক্স ফাউন্ডেশন দিয়ে শিখুন

+

লিনাক্স ফাউন্ডেশন কুবারনেটিস অ্যাপ্লিকেশন ডেভেলপমেন্ট এবং অপারেশন লাইফসাইকেলের সমস্ত দিকগুলোর জন্য প্রশিক্ষক-নেতৃত্বাধীন এবং স্ব-গতির কোর্স অফার করে।

+

+ কোর্স দেখুন +
+
+
+ +
+
+

কুবারনেটিস সার্টিফাইড পান

+
+
+
+ Kubernetes and Cloud Native Associate (KCNA) +
+

কুবারনেটিস এবং Kubernetes and Cloud Native Associate (KCNA) পরীক্ষা কুবারনেটিস এবং বৃহত্তর ক্লাউড নেটিভ ইকোসিস্টেমে ব্যবহারকারীর মৌলিক জ্ঞান এবং দক্ষতা প্রদর্শন করে।

+

একটি সার্টিফাইড KCNA সমগ্র ক্লাউড নেটিভ ইকোসিস্টেমের ধারণাগত জ্ঞান নিশ্চিত করবে, বিশেষ করে কুবারনেটিসের উপর ফোকাস করে।

+
+ সার্টিফিকেশনে যান +
+
+ +
+ Kubernetes and Cloud Native Security Associate (KCSA) +
+

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

+

একটি সার্টিফাইড KCSA সম্মতির উদ্দেশ্য পূরণের জন্য কুবারনেটিস ক্লাস্টারগুলোর বেসলাইন নিরাপত্তা কনফিগারেশনের একটি বোঝার বিষয়টি নিশ্চিত করবে।

+
+ সার্টিফিকেশনে যান +
+
+
+ Certified Kubernetes Application Developer (CKAD) +
+

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

+

একটি CKAD অ্যাপ্লিকেশন রিসোর্সগুলোকে সংজ্ঞায়িত করতে পারে এবং কুবারনেটিসে স্কেলযোগ্য অ্যাপ্লিকেশন এবং সরঞ্জামগুলি তৈরি, নিরীক্ষণ এবং সমস্যা সমাধানের জন্য মূল আদিম ব্যবহার করতে পারে।

+
+ সার্টিফিকেশনে যান +
+
+
+ Certified Kubernetes Administrator (CKA) +
+ +

Certified Kubernetes Administrator (CKA) প্রোগ্রাম নিশ্চিত করে যে কুবারনেটিস অ্যাডমিনিস্ট্রেটরদের দায়িত্ব পালন করার জন্য CKA-এর দক্ষতা, জ্ঞান এবং যোগ্যতা রয়েছে।

+

একজন সার্টিফাইড কুবারনেটিস অ্যাডমিনিস্ট্রেটর মৌলিক ইনস্টলেশন করার পাশাপাশি প্রোডাকশন-গ্রেড কুবারনেটিস ক্লাস্টারগুলো কনফিগার এবং পরিচালনা করার ক্ষমতা প্রদর্শন করেছেন।

+
+ সার্টিফিকেশনে যান +
+
+
+ Certified Kubernetes Security Specialist (CKS) +
+ +

Certified Kubernetes Security Specialist (CKS) প্রোগ্রামটি নিশ্চিত করে যে ধারক বিস্তৃত সর্বোত্তম অনুশীলনের সাথে কমফোর্টেবল এবং সক্ষম। CKS সার্টিফিকেশন নির্মাণ, স্থাপনা এবং রানটাইম চলাকালীন কন্টেইনার-ভিত্তিক অ্যাপ্লিকেশন এবং কুবারনেটিস প্ল্যাটফর্মগুলি সুরক্ষিত করার দক্ষতা কভার করে।

+

CKS-এর প্রার্থীদের অবশ্যই একটি বর্তমান Certified Kubernetes Administrator (CKA) সার্টিফিকেশন ধারণ করতে হবে যাতে তারা CKS-এ বসার আগে যথেষ্ট কুবারনেটিস দক্ষতার অধিকারী।

+
+ সার্টিফিকেশনে যান +
+
+
+
+ +
+
+
+

কুবারনেটিস ট্রেনিং পার্টনার

+

কুবারনেটিস ট্রেনিং পার্টনাররা আমাদের নেটওয়ার্ক কুবারনেটিস এবং ক্লাউড নেটিভ প্রকল্পের জন্য প্রশিক্ষণ সার্ভিস প্রদান করে।

+
+
+
+ {{< cncf-landscape helpers=false category="special--kubernetes-training-partner" >}} +
+