From f08c06a7a840e299861fe246fc2ae4abdfc47f82 Mon Sep 17 00:00:00 2001 From: Imtiaz1234 <78928464+Imtiaz1234@users.noreply.github.com> Date: Thu, 10 Feb 2022 02:40:08 +0600 Subject: [PATCH 0001/1086] Create _index.html --- content/bn/case-studies/_index.html | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 content/bn/case-studies/_index.html diff --git a/content/bn/case-studies/_index.html b/content/bn/case-studies/_index.html new file mode 100644 index 0000000000..a436a7cfec --- /dev/null +++ b/content/bn/case-studies/_index.html @@ -0,0 +1,9 @@ +--- +title: কেস অনুযায়ী পরীক্ষা +linkTitle: কেস অনুযায়ী পরীক্ষা +bigheader: কুবারনেটিস ব্যবহারকারীদের কেস অনুযাজায় পরীক্ষা +abstract: কুবারনেটিস ব্যবহারকারীদের একটি সংগ্রহ যারা উৎপাদনে এটি ব্যবহার করে +layout: basic +class: gridPage +cid: caseStudies +--- From bb1003378bec202ee8a6ba56b3cabc44ae81a25a Mon Sep 17 00:00:00 2001 From: Imtiaz1234 <78928464+Imtiaz1234@users.noreply.github.com> Date: Thu, 10 Feb 2022 02:42:07 +0600 Subject: [PATCH 0002/1086] Update _index.html --- content/bn/case-studies/_index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/case-studies/_index.html b/content/bn/case-studies/_index.html index a436a7cfec..a552c723d1 100644 --- a/content/bn/case-studies/_index.html +++ b/content/bn/case-studies/_index.html @@ -1,7 +1,7 @@ --- title: কেস অনুযায়ী পরীক্ষা linkTitle: কেস অনুযায়ী পরীক্ষা -bigheader: কুবারনেটিস ব্যবহারকারীদের কেস অনুযাজায় পরীক্ষা +bigheader: কুবারনেটিস ব্যবহারকারীদের কেস অনুযায়ী পরীক্ষা abstract: কুবারনেটিস ব্যবহারকারীদের একটি সংগ্রহ যারা উৎপাদনে এটি ব্যবহার করে layout: basic class: gridPage From 8fd8330e2f45fb9d75b90251f4695cec3113171c Mon Sep 17 00:00:00 2001 From: nazma1234 <78928674+nazma1234@users.noreply.github.com> Date: Thu, 10 Feb 2022 03:57:18 +0600 Subject: [PATCH 0003/1086] Translated turnkey-solutions.md --- .../production-environment/turnkey-solutions.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 content/bn/docs/setup/production-environment/turnkey-solutions.md diff --git a/content/bn/docs/setup/production-environment/turnkey-solutions.md b/content/bn/docs/setup/production-environment/turnkey-solutions.md new file mode 100644 index 0000000000..b7b3e2f9e4 --- /dev/null +++ b/content/bn/docs/setup/production-environment/turnkey-solutions.md @@ -0,0 +1,12 @@ +--- +title: Turnkey ক্লাউড সমাধান +content_type: ধারণা +weight: 30 +--- + + +এই পৃষ্ঠাটি কুবারনেটিস প্রত্যয়িত সমাধান প্রদানকারীদের একটি তালিকা প্রদান করে। প্রতিটিা প্রদানকারীর পৃষ্ঠা থেকে, আপনি প্রোডাক্সশন এর জন্য প্রস্তুত ক্লাস্টার ইনস্টল এবং সেটআপ করা শিখতে পারেন + + + +{{< cncf-landscape helpers=true category="certified-kubernetes-hosted" >}} From cb1b566c27da87d0d1a8f275c4c1a60ef93eb018 Mon Sep 17 00:00:00 2001 From: nazma1234 <78928674+nazma1234@users.noreply.github.com> Date: Thu, 10 Feb 2022 04:02:30 +0600 Subject: [PATCH 0004/1086] Update turnkey-solutions.md --- .../bn/docs/setup/production-environment/turnkey-solutions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/setup/production-environment/turnkey-solutions.md b/content/bn/docs/setup/production-environment/turnkey-solutions.md index b7b3e2f9e4..2927014919 100644 --- a/content/bn/docs/setup/production-environment/turnkey-solutions.md +++ b/content/bn/docs/setup/production-environment/turnkey-solutions.md @@ -5,7 +5,7 @@ weight: 30 --- -এই পৃষ্ঠাটি কুবারনেটিস প্রত্যয়িত সমাধান প্রদানকারীদের একটি তালিকা প্রদান করে। প্রতিটিা প্রদানকারীর পৃষ্ঠা থেকে, আপনি প্রোডাক্সশন এর জন্য প্রস্তুত ক্লাস্টার ইনস্টল এবং সেটআপ করা শিখতে পারেন +এই পৃষ্ঠাটি কুবারনেটিস প্রত্যয়িত সমাধান প্রদানকারীদের একটি তালিকা প্রদান করে। প্রতিটি প্রদানকারীর পৃষ্ঠা থেকে, আপনি প্রোডাক্সশন এর জন্য প্রস্তুত ক্লাস্টার ইনস্টল এবং সেটআপ করা শিখতে পারেন From 0e049d5b480a07b2eb1231563810e5f3905b9c59 Mon Sep 17 00:00:00 2001 From: Saber382 <78927820+Saber382@users.noreply.github.com> Date: Mon, 21 Feb 2022 12:58:52 +0600 Subject: [PATCH 0005/1086] Updating _index.md --- content/bn/docs/contribute/_index.md | 100 +++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 content/bn/docs/contribute/_index.md diff --git a/content/bn/docs/contribute/_index.md b/content/bn/docs/contribute/_index.md new file mode 100644 index 0000000000..0cf7a4b0f3 --- /dev/null +++ b/content/bn/docs/contribute/_index.md @@ -0,0 +1,100 @@ +--- +content_type: ধারণা +title: অবদান রাখো K8s ডকুমেনটেশন +linktitle: অবদান +main_menu: true +no_list: true +weight: 80 +card: + name: অবদান + weight: 10 + title: K8s এ অবদান রাখা শুরু করুন +--- + + + +*Kubernetes নতুন এবং অভিজ্ঞ সকল অবদানকারীদের থেকে উন্নতিকে (immprovements) স্বাগত জানায়!* + +{{< note >}} +সাধারণভাবে Kubernetes অবদান সম্পর্কে আরও জানতে, দেখুন +[অবদানকারীদের জন্য ডকুমেন্টেশন](https://www.kubernetes.dev/docs/)। +{{< /note >}} + +এই ওয়েবসাইটটি [Kubernetes SIG ডক্স](/docs/contribute/#get-involved-with-sig-docs) দ্বারা রক্ষণাবেক্ষণ করা হয় । + +Kubernetes ডকুমেন্টেশন অবদানকারী: + +- বিদ্যমান সামগ্রী উন্নত করুন +- নতুন কন্টেন্ট তৈরি করুন +- ডকুমেন্টেশন অনুবাদ করুন +- Kubernetes রিলিজ চক্রের ডকুমেন্টেশন অংশগুলি পরিচালনা এবং প্রকাশ করুন + + + +## শুরু করুন (Get Started) + +যে কেউ ডকুমেন্টেশন সম্পর্কে একটি সমস্যা (issue) খুলতে পারে, বা পরিবর্তন করতে পারে + পুল রিকুয়েস্ট(Pull Request) দেয়ার মাধ্যমে +[`kubernetes/website` GitHub সংগ্রহস্থল](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) স্বাক্ষর করুন। +1. [ডকুমেন্টেশন রিপোজিটরি](https://github.com/kubernetes/website) এবং ওয়েবসাইটের [স্ট্যাটিক সাইট জেনারেটর](https://gohugo.io) এর সাথে নিজেকে পরিচিত করুন । +1. নিশ্চিত করুন যে আপনি প্রাথমিক প্রক্রিয়াগুলি বুঝতে পেরেছেন৷ + [একটি পুল অনুরোধ খোলার](/docs/contribute/new-content/open-a-pr/) এবং + [পরিবর্তন পর্যালোচনা করার](/docs/contribute/review/reviewing-prs/)। + +কিছু কাজের জন্য Kubernetes সংস্থায় আরও বিশ্বাস এবং আরও অ্যাক্সেসের প্রয়োজন। +এ সম্পর্কে আরো বিস্তারিত জানার জন্য [SIG ডক্সে অংশগ্রহণ করে](/docs/contribute/participate/) দেখুন +ভূমিকা এবং অনুমতি সমুহ। + +## আপনার প্রথম অবদান (Your first Contribution) + +- [কন্ট্রিবিউশন ওভারভিউ](/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) সম্পর্কে আরও জানুন। +- অন্য Kubernetes সম্প্রদায়ের সদস্যসদের থেকে + সঠিকতা এবং ভাষার জন্য [পুলের অনুরোধ পর্যালোচনা করুন](/docs/contribute/review/reviewing-prs/) +- Kubernetes [content](/docs/contribute/style/content-guide/) এবং [শৈলী নির্দেশিকা](/docs/contribute/style/style-guide/) পড়ুন + যাতে আপনি অবহিত মন্তব্য করতে পারেন। +- [পৃষ্ঠা বিষয়বস্তুর প্রকার](/docs/contribute/style/page-content-types/) সম্পর্কে জানুন + এবং [Hugo শর্ট কোডস](/docs/contribute/style/hugo-shortcodes/)। + +## পরবর্তী পদক্ষেপ (Next steps) + +- ভান্ডার থেকে শিখুন [একটি স্থানীয় ক্লোন (local clone) থেকে কাজ করা](/docs/contribute/new-content/open-a-pr/#fork-the-repo) । +- ডকুমেনটেশন কর [একটি রিলিজের বৈশিষ্ট্য](/docs/contribute/new-content/new-features/)। +- [SIG ডক্স](/docs/contribute/participate/) এ অংশগ্রহণ করুন এবং একজন + [সদস্য বা পর্যালোচক](/docs/contribute/participate/roles-and-responsibilities/) হন। + +- একটি [স্থানীয়করণ](/docs/contribute/localization/) দিয়ে শুরু করুন বা সাহায্য করুন। + +## SIG ডক্সের সাথে জড়িত হন (Get involved with SIG Docs) + +[SIG ডক্স](/docs/contribute/participate/) হল অবদানকারীদের গ্রুপ যারা +Kubernetes ডকুমেন্টেশন এবং ওয়েবসাইট প্রকাশ এবং বজায় রাখে । কুবারনেটিস অবদানকারীদের জন্য একটি দুর্দান্ত উপায় +SIG ডক্সের সাথে জড়িত (বৈশিষ্ট্য +উন্নয়ন বা অন্যথায়) হওয়া যা কুবারনেটিস প্রকল্পে একটি বড় প্রভাব ফেলতে পারে। + +SIG ডক্স বিভিন্ন পদ্ধতির সাথে যোগাযোগ করে: + +- [Kubernetes Slack উদাহরণ হিসেবে `#sig-docs`-এ যোগ দিন](https://slack.k8s.io/)। নিশ্চিত করবে + তোমার পরিচিতি যাতে দেয়া হয় । +- [`kubernetes-sig-docs` মেইলিং তালিকায় যোগ দিন](https://groups.google.com/forum/#!forum/kubernetes-sig-docs), + যেখানে বিস্তৃত আলোচনা সঞ্চালিত হয় এবং অফিসিয়াল সিদ্ধান্ত রেকর্ড করা হয়। +- [সাপ্তাহিক SIG ডক্স ভিডিও মিটিং](https://github.com/kubernetes/community/tree/master/sig-docs) যোগ দিন। মিটিংগুলি সর্বদা `#sig-docs`-এ ঘোষণা করা হয় এবং [Kubernetes সম্প্রদায় মিটিং ক্যালেন্ডার](https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com&ctz=America/-এ যোগ করা হয়) লস এঞ্জেলেস). আপনাকে [জুম ক্লায়েন্ট](https://zoom.us/download) ডাউনলোড করতে হবে বা ফোন ব্যবহার করে ডায়াল করতে হবে। + + +## অবদান রাখার অন্যান্য উপায় (Other ways to contribute) + +- [Kubernetes কমিউনিটি সাইট](/community/) দেখুন। টুইটার বা স্ট্যাক ওভারফ্লোতে অংশগ্রহণ করুন, স্থানীয় কুবারনেট মিটআপ এবং ইভেন্ট এবং আরও অনেক কিছু সম্পর্কে জানুন। +- Kubernetes ফিচার ডেভেলপমেন্টের সাথে জড়িত হতে [কন্ট্রিবিউটর চিটশিট](https://github.com/kubernetes/community/tree/master/contributors/guide/contributor-cheatsheet) পড়ুন। +- একটি [ব্লগ পোস্ট বা কেস স্টাডি](/docs/contribute/new-content/blogs-case-studies/) জমা দিন। From 1abcb6d2b345318a1d96ea2ce7602dd2b6c1e356 Mon Sep 17 00:00:00 2001 From: Saber382 <78927820+Saber382@users.noreply.github.com> Date: Mon, 21 Feb 2022 19:37:24 +0600 Subject: [PATCH 0006/1086] Update content/bn/docs/contribute/_index.md Co-authored-by: Anubhav Vardhan --- content/bn/docs/contribute/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/contribute/_index.md b/content/bn/docs/contribute/_index.md index 0cf7a4b0f3..29e86e19ff 100644 --- a/content/bn/docs/contribute/_index.md +++ b/content/bn/docs/contribute/_index.md @@ -44,8 +44,8 @@ Kubernetes ডকুমেন্টেশন অবদানকারী: ডকুমেন্টেশনের সাথে জড়িত হতে: 1. CNCF [কন্ট্রিবিউটর লাইসেন্স চুক্তি](https://github.com/kubernetes/community/blob/master/CLA.md) স্বাক্ষর করুন। -1. [ডকুমেন্টেশন রিপোজিটরি](https://github.com/kubernetes/website) এবং ওয়েবসাইটের [স্ট্যাটিক সাইট জেনারেটর](https://gohugo.io) এর সাথে নিজেকে পরিচিত করুন । -1. নিশ্চিত করুন যে আপনি প্রাথমিক প্রক্রিয়াগুলি বুঝতে পেরেছেন৷ +2. [ডকুমেন্টেশন রিপোজিটরি](https://github.com/kubernetes/website) এবং ওয়েবসাইটের [স্ট্যাটিক সাইট জেনারেটর](https://gohugo.io) এর সাথে নিজেকে পরিচিত করুন । +3. নিশ্চিত করুন যে আপনি প্রাথমিক প্রক্রিয়াগুলি বুঝতে পেরেছেন৷ [একটি পুল অনুরোধ খোলার](/docs/contribute/new-content/open-a-pr/) এবং [পরিবর্তন পর্যালোচনা করার](/docs/contribute/review/reviewing-prs/)। From f1abc011052908d371e4ea315862d09338cedd88 Mon Sep 17 00:00:00 2001 From: Saber382 <78927820+Saber382@users.noreply.github.com> Date: Mon, 21 Feb 2022 20:17:37 +0600 Subject: [PATCH 0007/1086] Updated contents --- content/bn/docs/contribute/_index.md | 94 +++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 3 deletions(-) diff --git a/content/bn/docs/contribute/_index.md b/content/bn/docs/contribute/_index.md index 29e86e19ff..e1ae26dd22 100644 --- a/content/bn/docs/contribute/_index.md +++ b/content/bn/docs/contribute/_index.md @@ -48,13 +48,100 @@ Kubernetes ডকুমেন্টেশন অবদানকারী: 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[ডক্সের অংশগুলি পরিচালনা/প্রকাশ করুন
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[সিগ-ডক্সে যোগ দিন
Slack channel] + C --- V[kubernetes-sig-docs-এ যোগ দিন
মেইলিং তালিকা] + V --- M[সাপ্তাহিকভাবে যোগদান করুন
সিগ-ডক্স কল
অথবা 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 খুলতে প্রস্তুত। আবার,আমরা প্রশ্ন সবসময় স্বাগত জানাই! + + + কিছু কাজের জন্য Kubernetes সংস্থায় আরও বিশ্বাস এবং আরও অ্যাক্সেসের প্রয়োজন। এ সম্পর্কে আরো বিস্তারিত জানার জন্য [SIG ডক্সে অংশগ্রহণ করে](/docs/contribute/participate/) দেখুন ভূমিকা এবং অনুমতি সমুহ। + + + ## আপনার প্রথম অবদান (Your first Contribution) +আপনি আগে থেকে বেশ কয়েকটি ধাপ পর্যালোচনা করে আপনার প্রথম অবদানের জন্য প্রস্তুত করতে পারেন। নীচের চিত্রটি ধাপগুলিকে রূপরেখা দেয় এবং বিশদগুলি অনুসরণ করে৷ + + + + +{{< 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/) চেক করুন যা @@ -91,10 +178,11 @@ SIG ডক্স বিভিন্ন পদ্ধতির সাথে যো - [`kubernetes-sig-docs` মেইলিং তালিকায় যোগ দিন](https://groups.google.com/forum/#!forum/kubernetes-sig-docs), যেখানে বিস্তৃত আলোচনা সঞ্চালিত হয় এবং অফিসিয়াল সিদ্ধান্ত রেকর্ড করা হয়। - [সাপ্তাহিক SIG ডক্স ভিডিও মিটিং](https://github.com/kubernetes/community/tree/master/sig-docs) যোগ দিন। মিটিংগুলি সর্বদা `#sig-docs`-এ ঘোষণা করা হয় এবং [Kubernetes সম্প্রদায় মিটিং ক্যালেন্ডার](https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com&ctz=America/-এ যোগ করা হয়) লস এঞ্জেলেস). আপনাকে [জুম ক্লায়েন্ট](https://zoom.us/download) ডাউনলোড করতে হবে বা ফোন ব্যবহার করে ডায়াল করতে হবে। - +- সেই সপ্তাহগুলিতে যখন ব্যক্তিগত জুম ভিডিও মিটিং হয় না তখন SIG ডক্স অ্যাসিঙ্ক স্ল্যাক স্ট্যান্ডআপ মিটিংয়ে যোগ দিন। সভাগুলি সর্বদা `#sig-docs`-এ ঘোষণা করা হয়। আপনি মিটিংয়ের ঘোষণার 24 ঘন্টা পর্যন্ত থ্রেডের যেকোনো একটিতে অবদান রাখতে পারেন। ## অবদান রাখার অন্যান্য উপায় (Other ways to contribute) - [Kubernetes কমিউনিটি সাইট](/community/) দেখুন। টুইটার বা স্ট্যাক ওভারফ্লোতে অংশগ্রহণ করুন, স্থানীয় কুবারনেট মিটআপ এবং ইভেন্ট এবং আরও অনেক কিছু সম্পর্কে জানুন। -- Kubernetes ফিচার ডেভেলপমেন্টের সাথে জড়িত হতে [কন্ট্রিবিউটর চিটশিট](https://github.com/kubernetes/community/tree/master/contributors/guide/contributor-cheatsheet) পড়ুন। +- Kubernetes ফিচার ডেভেলপমেন্টের সাথে যুক্ত হতে [কন্ট্রিবিউটর চিটশীট](https://www.kubernetes.dev/docs/contributor-cheatsheet/) পড়ুন। +- [Kubernetes Contributors](https://www.kubernetes.dev/) এবং [অতিরিক্ত অবদানকারী সংস্থান](https://www.kubernetes.dev/resources/) সম্পর্কে আরও জানতে অবদানকারীর সাইটে যান। - একটি [ব্লগ পোস্ট বা কেস স্টাডি](/docs/contribute/new-content/blogs-case-studies/) জমা দিন। From 383e25b7e4c209a4821a5220e7848c0c9c36d161 Mon Sep 17 00:00:00 2001 From: Saber382 <78927820+Saber382@users.noreply.github.com> Date: Mon, 21 Feb 2022 20:20:16 +0600 Subject: [PATCH 0008/1086] Updated Titles --- content/bn/docs/contribute/_index.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/content/bn/docs/contribute/_index.md b/content/bn/docs/contribute/_index.md index e1ae26dd22..5acd1f13ba 100644 --- a/content/bn/docs/contribute/_index.md +++ b/content/bn/docs/contribute/_index.md @@ -31,7 +31,7 @@ Kubernetes ডকুমেন্টেশন অবদানকারী: -## শুরু করুন (Get Started) +## শুরু করুন যে কেউ ডকুমেন্টেশন সম্পর্কে একটি সমস্যা (issue) খুলতে পারে, বা পরিবর্তন করতে পারে পুল রিকুয়েস্ট(Pull Request) দেয়ার মাধ্যমে @@ -106,7 +106,7 @@ class first,second,third white -## আপনার প্রথম অবদান (Your first Contribution) +## আপনার প্রথম অবদান আপনি আগে থেকে বেশ কয়েকটি ধাপ পর্যালোচনা করে আপনার প্রথম অবদানের জন্য প্রস্তুত করতে পারেন। নীচের চিত্রটি ধাপগুলিকে রূপরেখা দেয় এবং বিশদগুলি অনুসরণ করে৷ @@ -155,7 +155,7 @@ class first,second white - [পৃষ্ঠা বিষয়বস্তুর প্রকার](/docs/contribute/style/page-content-types/) সম্পর্কে জানুন এবং [Hugo শর্ট কোডস](/docs/contribute/style/hugo-shortcodes/)। -## পরবর্তী পদক্ষেপ (Next steps) +## পরবর্তী পদক্ষেপ - ভান্ডার থেকে শিখুন [একটি স্থানীয় ক্লোন (local clone) থেকে কাজ করা](/docs/contribute/new-content/open-a-pr/#fork-the-repo) । - ডকুমেনটেশন কর [একটি রিলিজের বৈশিষ্ট্য](/docs/contribute/new-content/new-features/)। @@ -164,7 +164,7 @@ class first,second white - একটি [স্থানীয়করণ](/docs/contribute/localization/) দিয়ে শুরু করুন বা সাহায্য করুন। -## SIG ডক্সের সাথে জড়িত হন (Get involved with SIG Docs) +## SIG ডক্সের সাথে জড়িত হন [SIG ডক্স](/docs/contribute/participate/) হল অবদানকারীদের গ্রুপ যারা Kubernetes ডকুমেন্টেশন এবং ওয়েবসাইট প্রকাশ এবং বজায় রাখে । কুবারনেটিস অবদানকারীদের জন্য একটি দুর্দান্ত উপায় @@ -180,8 +180,7 @@ SIG ডক্স বিভিন্ন পদ্ধতির সাথে যো - [সাপ্তাহিক SIG ডক্স ভিডিও মিটিং](https://github.com/kubernetes/community/tree/master/sig-docs) যোগ দিন। মিটিংগুলি সর্বদা `#sig-docs`-এ ঘোষণা করা হয় এবং [Kubernetes সম্প্রদায় মিটিং ক্যালেন্ডার](https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com&ctz=America/-এ যোগ করা হয়) লস এঞ্জেলেস). আপনাকে [জুম ক্লায়েন্ট](https://zoom.us/download) ডাউনলোড করতে হবে বা ফোন ব্যবহার করে ডায়াল করতে হবে। - সেই সপ্তাহগুলিতে যখন ব্যক্তিগত জুম ভিডিও মিটিং হয় না তখন SIG ডক্স অ্যাসিঙ্ক স্ল্যাক স্ট্যান্ডআপ মিটিংয়ে যোগ দিন। সভাগুলি সর্বদা `#sig-docs`-এ ঘোষণা করা হয়। আপনি মিটিংয়ের ঘোষণার 24 ঘন্টা পর্যন্ত থ্রেডের যেকোনো একটিতে অবদান রাখতে পারেন। -## অবদান রাখার অন্যান্য উপায় (Other ways to contribute) - +## অবদান রাখার অন্যান্য উপায় - [Kubernetes কমিউনিটি সাইট](/community/) দেখুন। টুইটার বা স্ট্যাক ওভারফ্লোতে অংশগ্রহণ করুন, স্থানীয় কুবারনেট মিটআপ এবং ইভেন্ট এবং আরও অনেক কিছু সম্পর্কে জানুন। - Kubernetes ফিচার ডেভেলপমেন্টের সাথে যুক্ত হতে [কন্ট্রিবিউটর চিটশীট](https://www.kubernetes.dev/docs/contributor-cheatsheet/) পড়ুন। - [Kubernetes Contributors](https://www.kubernetes.dev/) এবং [অতিরিক্ত অবদানকারী সংস্থান](https://www.kubernetes.dev/resources/) সম্পর্কে আরও জানতে অবদানকারীর সাইটে যান। From 1c2bc96c5576a6a86ac9d19c1466c4879446c489 Mon Sep 17 00:00:00 2001 From: Rey Lejano Date: Wed, 23 Mar 2022 11:37:16 -0700 Subject: [PATCH 0009/1086] initial Bengali branch commit Signed-off-by: Rey Lejano --- OWNERS_ALIASES | 8 ++++++++ README-bn.md | 0 config.toml | 12 ++++++++++++ content/bn/OWNERS | 13 +++++++++++++ data/i18n/bn/OWNERS | 13 +++++++++++++ data/i18n/bn/bn.toml | 1 + i18n/bn.toml | 1 + 7 files changed, 48 insertions(+) create mode 100644 README-bn.md create mode 100644 content/bn/OWNERS create mode 100644 data/i18n/bn/OWNERS create mode 100644 data/i18n/bn/bn.toml create mode 100644 i18n/bn.toml diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index ce80300961..e5177fddbe 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -8,6 +8,14 @@ aliases: - onlydole - sftim - nate-double-u + sig-docs-bn-owners: #A dmins for Bengali content + - ikramulkayes + - mitul3737 + - Mouly22 + sig-docs-bn-reviewers: # PR reviews for Bengali content + - ikramulkayes + - mitul3737 + - Mouly22 sig-docs-de-owners: # Admins for German content - bene2k1 - mkorbi diff --git a/README-bn.md b/README-bn.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/config.toml b/config.toml index c71f4fcdea..8cd4368855 100644 --- a/config.toml +++ b/config.toml @@ -485,3 +485,15 @@ languagedirection = "ltr" time_format_blog = "02.01.2006" # A list of language codes to look for untranslated content, ordered from left to right. language_alternatives = ["en"] + +[languages.bn] +title = "Kubernetes" +description = "প্রোডাকশন-গ্রেড কন্টেইনার অর্কেস্ট্রেশন" +languageName = "বাংলা Bengali" +weight = 15 +contentDir = "content/bn" +languagedirection = "ltr" + +[languages.bn.params] +time_format_blog = "01.02.2006" +language_alternatives = ["en"] diff --git a/content/bn/OWNERS b/content/bn/OWNERS new file mode 100644 index 0000000000..00691f0372 --- /dev/null +++ b/content/bn/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# This is the localization project for Bengali. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-bn-reviews + +approvers: +- sig-docs-bn-owners + +labels: +- language/bn diff --git a/data/i18n/bn/OWNERS b/data/i18n/bn/OWNERS new file mode 100644 index 0000000000..3da604c3fa --- /dev/null +++ b/data/i18n/bn/OWNERS @@ -0,0 +1,13 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +# Localized strings for Bengali. +# Teams and members are visible at https://github.com/orgs/kubernetes/teams. + +reviewers: +- sig-docs-bn-reviews + +approvers: +- sig-docs-bn-owners + +labels: +- language/bn diff --git a/data/i18n/bn/bn.toml b/data/i18n/bn/bn.toml new file mode 100644 index 0000000000..40ee75f7df --- /dev/null +++ b/data/i18n/bn/bn.toml @@ -0,0 +1 @@ +# i18n strings for the Bengali (main) site. diff --git a/i18n/bn.toml b/i18n/bn.toml new file mode 100644 index 0000000000..331ee2545c --- /dev/null +++ b/i18n/bn.toml @@ -0,0 +1 @@ +../data/i18n/bn/bn.toml From 90cb48066799d7b6f77d60e3135e0e066a25e8ee Mon Sep 17 00:00:00 2001 From: Rey Lejano Date: Wed, 23 Mar 2022 12:15:57 -0700 Subject: [PATCH 0010/1086] fix typo in owners aliases for Bengali Signed-off-by: Rey Lejano --- OWNERS_ALIASES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index e5177fddbe..edb59c1ccd 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -12,7 +12,7 @@ aliases: - ikramulkayes - mitul3737 - Mouly22 - sig-docs-bn-reviewers: # PR reviews for Bengali content + sig-docs-bn-reviews: # PR reviews for Bengali content - ikramulkayes - mitul3737 - Mouly22 From 04c3c9de1bfe7dd939deb29468074762a44022d2 Mon Sep 17 00:00:00 2001 From: Rey Lejano Date: Wed, 23 Mar 2022 12:28:23 -0700 Subject: [PATCH 0011/1086] remove non k8s org member in owners aliases for Bengali Signed-off-by: Rey Lejano --- OWNERS_ALIASES | 2 -- 1 file changed, 2 deletions(-) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index edb59c1ccd..e17ce15f58 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -9,11 +9,9 @@ aliases: - sftim - nate-double-u sig-docs-bn-owners: #A dmins for Bengali content - - ikramulkayes - mitul3737 - Mouly22 sig-docs-bn-reviews: # PR reviews for Bengali content - - ikramulkayes - mitul3737 - Mouly22 sig-docs-de-owners: # Admins for German content From dfd3955667cad8f64115e3b454d66f2cfce82e78 Mon Sep 17 00:00:00 2001 From: Rey Lejano Date: Wed, 23 Mar 2022 13:15:12 -0700 Subject: [PATCH 0012/1086] remove non k8s org member in owners aliases for Bengali Signed-off-by: Rey Lejano --- OWNERS_ALIASES | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index e17ce15f58..f98d2fe19a 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -8,12 +8,10 @@ aliases: - onlydole - sftim - nate-double-u - sig-docs-bn-owners: #A dmins for Bengali content + sig-docs-bn-owners: # Admins for Bengali content - mitul3737 - - Mouly22 sig-docs-bn-reviews: # PR reviews for Bengali content - mitul3737 - - Mouly22 sig-docs-de-owners: # Admins for German content - bene2k1 - mkorbi From f376f3be0ca1636be41c179ebfc2f78568751beb Mon Sep 17 00:00:00 2001 From: Rey Lejano Date: Wed, 23 Mar 2022 19:24:20 -0700 Subject: [PATCH 0013/1086] add README-bn.md --- README-bn.md | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) diff --git a/README-bn.md b/README-bn.md index e69de29bb2..624d40ad9f 100644 --- a/README-bn.md +++ b/README-bn.md @@ -0,0 +1,193 @@ +# Kubernetes ডকুমেন্টেশন + +[![Build Status](https://api.travis-ci.org/kubernetes/website.svg?branch=master)](https://travis-ci.org/kubernetes/website) +[![GitHub release](https://img.shields.io/github/release/kubernetes/website.svg)](https://github.com/kubernetes/website/releases/latest) + +স্বাগত! এই সংগ্রহস্থলে [Kubernetes ওয়েবসাইট এবং ডকুমেন্টেশন](https://kubernetes.io/) তৈরি করার জন্য প্রয়োজনীয় সমস্ত উপাদান রয়েছে। আমরা খুবই আনন্দিত যে আপনি অবদান রাখতে চান! + + +- [ডকুমেন্টেশন এ অবদান](#contributing-to-the-docs) +- [স্থানীয়করণ ReadMeগুলি](#localization-readmemds) + +## `README.md` এর স্থানীয়করণ কুবারনেটস ডকুমেন্টেশন +আপনি বাংলা স্থানীয়করণের রক্ষণাবেক্ষণকারীদের (maintainers) কাছে পৌঁছাতে পারেন: +* MD Shahriyar Al Mustakim Mitul ([LinkedIn](https://www.linkedin.com/in/md-shahriyar-al-mustakim-mitul-9084b31a0/), [Twitter](https://twitter.com/ShahriyarMitul), [GitHub](https://github.com/mitul3737)) +* [Slack চ্যানেল](https://kubernetes.slack.com/messages/kubernetes-docs-bn) + + + +## এই সংগ্রহস্থল ব্যবহার করে + + +আপনি Hugo (বর্ধিত সংস্করণ) ব্যবহার করে স্থানীয়ভাবে ওয়েবসাইটটি চালাতে পারেন, অথবা আপনি এটি একটি কন্টেইনার রানটাইমে চালাতে পারেন। আমরা দৃঢ়ভাবে কন্টেইনার রানটাইম ব্যবহার করার পরামর্শ দিই, কারণ এটি লাইভ ওয়েবসাইটের সাথে স্থাপনার ধারাবাহিকতা দেয়। + +## পূর্বশর্ত + +এই সংগ্রহস্থলটি(repository) ব্যবহার করার জন্য, আপনাকে লোকাল সিস্টেম বা, ডিভাইস এ নিম্নলিখিত জিনিস ইনস্টল করতে হবে: + +- [npm](https://www.npmjs.com/) +- [Go](https://golang.org/) +- [Hugo (বর্ধিত সংস্করণ)](https://gohugo.io/) +- একটি ধারক রানটাইম, উদাহরন হিসেবে [Docker](https://www.docker.com/). + +আপনি কাজ শুরু করার আগে, দরকারি জিনিশগুলি ইনস্টল করুন। সংগ্রহস্থল ক্লোন(clone) করুন এবং ডিরেক্টরিতে(directory) প্রবেশ করুন: +```bash +git clone https://github.com/kubernetes/website.git +cd website +``` + +কুবারনেটিস ওয়েবসাইটটি [Docsy Hugo থিম](https://github.com/google/docsy#readme) ব্যবহার করে। এমনকি যদি আপনি একটি কনটেইনার ওয়েবসাইট চালানোর পরিকল্পনা করেন, আমরা দৃঢ়ভাবে নিম্নলিখিতগুলি চালিয়ে সাবমডিউল এবং অন্যান্য প্রয়োজনীয় জিনিসগুলিশগুলি পুল(pull) করার পরামর্শ দিই: + + +```bash +# ডকসি সাবমডিউল পুল করুন +git submodule update --init --recursive --depth 1 +``` + +## একটি কনটেইনার ব্যবহার করে ওয়েবসাইট চালানো + +একটি কনটেইনারে সাইটটি তৈরি করতে, কনটেইনার চিত্র(container image) তৈরি করতে এবং এটি চালাতে নিম্নলিখিতটি চালান: + +```bash +make container-image +make container-serve +``` + +আপনি যদি ত্রুটি দেখতে পান, তাহলে সম্ভবত এর অর্থ হল Hugo কন্টেইনারে যথেষ্ট কম্পিউটিং স্থান উপস্থিত ছিল না। এটি সমাধান করতে, আপনার মেশিনে ডকারের (Docker) জন্য অনুমোদিত CPU এবং মেমরি ব্যবহারের পরিমাণ বাড়ান [MacOSX](https://docs.docker.com/docker-for-mac/#resources) এবং [Windows](https://docs.docker.com/docker-for-windows/#resources) + +ওয়েবসাইটটি দেখতে -এ আপনার ব্রাউজার খুলুন। আপনি সোর্স ফাইলগুলিতে পরিবর্তন করার সাথে সাথে, Hugo ওয়েবসাইট আপডেট করে এবং একটি ব্রাউজার রিফ্রেশ করতে বাধ্য করে। + +## Hugo ব্যবহার করে লোকাল ডিভাইস এ ওয়েবসাইট চালানো + +নিশ্চিত করুন যে Hugo বর্ধিত সংস্করণ ইনস্টল করা হয়েছে `HUGO_VERSION`নামক এনভায়রনমেন্ট ভেরিয়েবল দ্বারা[`netlify.toml`](netlify.toml#L10) + +স্থানীয়ভাবে সাইট তৈরি এবং পরীক্ষা করতে, চালান: + +```bash +# নির্ভরতা গুলি ইনস্টল করুন +npm ci +make serve +``` + +এটি পোর্ট 1313-এ স্থানীয় হুগো সার্ভার শুরু করবে। ওয়েবসাইট দেখতে -এ আপনার ব্রাউজার খুলুন। আপনি সোর্স ফাইলগুলিতে পরিবর্তন করার সাথে সাথে, Hugo ওয়েবসাইট আপডেট হবে এবং একটি ব্রাউজার রিফ্রেশ করতে বাধ্য করে। + + +## API রেফারেন্স পৃষ্ঠা তৈরি করা + + +`content/en/docs/reference/kubernetes-api` এ অবস্থিত API রেফারেন্স পৃষ্ঠাগুলি ব্যবহার করে Swagger স্পেসিফিকেশন থেকে তৈরি করা হয়েছে + +একটি নতুন কুবারনেটিস(Kubernetes) রিলিজের জন্য রেফারেন্স পৃষ্ঠাগুলি আপডেট করতে এই পদক্ষেপগুলি অনুসরণ করুন: + +1. `api-ref-generator` সাবমডিউল পুল (Pull) করুন: + + ```bash + git submodule update --init --recursive --depth 1 + ``` + +2. Swagger স্পেসিফিকেশন আপডেট করুন: + + ```bash + curl 'https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json' > api-ref-assets/api/swagger.json + ``` + +3. `api-ref-assets/config/`-এ, নতুন রিলিজের পরিবর্তনগুলি প্রতিফলিত করতে `toc.yaml` এবং `fields.yaml` ফাইলগুলিকে হালনাগাদ করে নিন। + + +4. পরবর্তী, পৃষ্ঠাগুলি তৈরি করুন: + + ```bash + make api-reference + ``` + + আপনি একটি কনটেইনার চিত্র (Container image) থেকে সাইট তৈরি এবং পরিবেশন করে স্থানীয়ভাবে ফলাফল পরীক্ষা করতে পারেন: + + ```bash + make container-image + make container-serve + ``` + + একটি ওয়েব ব্রাউজারে, API রেফারেন্স দেখতে এ যান। + +5.যখন নতুন চুক্তির সমস্ত পরিবর্তন কনফিগারেশন ফাইল `toc.yaml` এবং `fields.yaml`-এ প্রতিফলিত হয়, তখন নতুন জেনারেট করা API রেফারেন্স পৃষ্ঠাগুলির সাথে একটি পুল অনুরোধ (Pull request) তৈরি করুন। + + +## সমস্যা সমাধান + +### error: failed to transform resource: TOCSS: failed to transform "scss/main.scss" (text/x-scss): this feature is not available in your current Hugo version + + +প্রযুক্তিগত কারণে হুগোকে দুই সেট বাইনারিতে পাঠানো হয়েছে। বর্তমান ওয়েবসাইটটি শুধুমাত্র **Hugo Extended** সংস্করণের উপর ভিত্তি করে চলে। [রিলিজ পৃষ্ঠা](https://github.com/gohugoio/hugo/releases) নামের মধ্যে `বর্ধিত(extended)` সহ সংরক্ষণাগারগুলি খুঁজুন। নিশ্চিত করতে, `হুগো সংস্করণ (hugo version)` চালান এবং `বর্ধিত (extended)` শব্দটি সন্ধান করুন। + + +### অনেকগুলি খোলা ফাইলের জন্য macOS সমস্যা সমাধান করা হচ্ছে + +আপনি যদি macOS-এ `make serve` চালান এবং নিম্নলিখিত ত্রুটি পান: + +```bash +ERROR 2020/08/01 19:09:18 Error: listen tcp 127.0.0.1:1313: socket: too many open files +make: *** [serve] Error 1 +``` + +খোলা ফাইলগুলির জন্য বর্তমান সীমা পরীক্ষা করার চেষ্টা করুন: + +`launchctl limit maxfiles` + +তারপর নিম্নলিখিত কমান্ডগুলি চালান ( থেকে নেয়া): + +```shell +#!/bin/sh +# নিচের গুলি মূল সারাংশ(gist) লিঙ্ক, এবং আমার সারাংশ(gist) লিঙ্ক এর সাথে সম্পর্ক স্থাপন করি. +# curl -O https://gist.githubusercontent.com/a2ikm/761c2ab02b7b3935679e55af5d81786a/raw/ab644cb92f216c019a2f032bbf25e258b01d87f9/limit.maxfiles.plist +# curl -O https://gist.githubusercontent.com/a2ikm/761c2ab02b7b3935679e55af5d81786a/raw/ab644cb92f216c019a2f032bbf25e258b01d87f9/limit.maxproc.plist +curl -O https://gist.githubusercontent.com/tombigel/d503800a282fcadbee14b537735d202c/raw/ed73cacf82906fdde59976a0c8248cce8b44f906/limit.maxfiles.plist +curl -O https://gist.githubusercontent.com/tombigel/d503800a282fcadbee14b537735d202c/raw/ed73cacf82906fdde59976a0c8248cce8b44f906/limit.maxproc.plist +sudo mv limit.maxfiles.plist /Library/LaunchDaemons +sudo mv limit.maxproc.plist /Library/LaunchDaemons +sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist +sudo chown root:wheel /Library/LaunchDaemons/limit.maxproc.plist +sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist +``` + + +এটি ক্যাটালিনার(Catalina) পাশাপাশি Mojave macOS এর জন্য কাজ করে। + +## SIG ডক্সের সাথে জড়িত হন + +[কমিউনিটি পৃষ্ঠা](https://github.com/kubernetes/community/tree/master/sig-docs#meetings) এ SIG ডক্স কুবারনেটিস সম্প্রদায় এবং মিটিং সম্পর্কে আরও জানুন। + +এছাড়াও আপনি এই প্রকল্পের রক্ষণাবেক্ষণকারীদের কাছে পৌঁছাতে পারেন: +- [Slack](https://kubernetes.slack.com/messages/sig-docs) + - [এই Slack এর জন্য একটি আমন্ত্রণ পান](https://slack.k8s.io/) +- [মেইলিং তালিকা](https://groups.google.com/forum/#!forum/kubernetes-sig-docs) + +## ডক্স এ অবদান রাখুন + +আপনি আপনার GitHub অ্যাকাউন্টে এই সংগ্রহস্থলের (repository) একটি অনুলিপি তৈরি করতে স্ক্রিনের উপরের ডানদিকে **Fork** বোতামে ক্লিক করতে পারেন। এই অনুলিপিটিকে _ফর্ক(fork)_ বলা হয়। আপনার ফর্কটতিতে আপনি যে কোনো পরিবর্তন করতে চান এবং আপনি যখন সেই পরিবর্তনগুলি আমাদের কাছে পাঠাতে প্রস্তুত হন, তখন আপনার ফর্কে যান এবং এটি সম্পর্কে আমাদের জানাতে একটি নতুন পুল অনুরোধ (Pull request) তৈরি করুন৷ + +একবার আপনার পুল অনুরোধ(Pull request) তৈরি হয়ে গেলে, একজন Kubernetes পর্যালোচক স্পষ্ট, কার্যকর প্রতিক্রিয়া প্রদানের দায়িত্ব নেবেন। পুল অনুরোধের মালিক হিসাবে, **কুবারনেটস (Kubernetes) পর্যালোচক আপনাকে যে প্রতিক্রিয়া প্রদান করেছেন তা সমাধান করার জন্য আপনার পুল অনুরোধ (Pull request) সংশোধন করার দায়িত্ব আপনার।** + + +এছাড়াও, মনে রাখবেন যে আপনার কাছে একাধিক Kubernetes পর্যালোচক আপনাকে প্রতিক্রিয়া প্রদান করতে পারেন বা আপনি একজন Kubernetes পর্যালোচকের কাছ থেকে প্রতিক্রিয়া পেতে পারেন যা আপনাকে প্রতিক্রিয়া প্রদানের জন্য প্রাথমিকভাবে নির্ধারিত একটি থেকে আলাদা। + + +তদুপরি, কিছু ক্ষেত্রে, আপনার একজন পর্যালোচক প্রয়োজনের সময় একজন কুবারনেটস কারিগরি পর্যালোচনাকারীর কাছ থেকে প্রযুক্তিগত পর্যালোচনা চাইতে পারেন। পর্যালোচকরা যথাসময়ে প্রতিক্রিয়া প্রদানের জন্য তাদের যথাসাধ্য চেষ্টা করবেন কিন্তু প্রতিক্রিয়ার সময় পরিস্থিতির উপর ভিত্তি করে পরিবর্তিত হতে পারে। + +Kubernetes ডকুমেন্টেশনে অবদান সম্পর্কে আরও তথ্যের জন্য, দেখুন: +- [কুবারনেটিস ডক্সে অবদান রাখুন](https://kubernetes.io/docs/contribute/) +- [পৃষ্ঠা বিষয়বস্তুর প্রকার](https://kubernetes.io/docs/contribute/style/page-content-types/) +- [ডকুমেন্টেশন শৈলী গাইড](https://kubernetes.io/docs/contribute/style/style-guide/) +- [কুবারনেটিস ডকুমেন্টেশন স্থানীয়করণ](https://kubernetes.io/docs/contribute/localization/) + + + +## আচরণ বিধি + +Kubernetes সম্প্রদায়ে অংশগ্রহণ [CNCF কোড অফ কন্ডাক্ট](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) দ্বারা পরিচালিত হয়। + +## ধন্যবাদ + +Kubernetes সম্প্রদায়ের অংশগ্রহণে উন্নতি লাভ করে, এবং আমরা আমাদের ওয়েবসাইট এবং আমাদের ডকুমেন্টেশনে আপনার অবদানের প্রশংসা করি! + + + From aab30afd7d29fddf4ce5d9b328f4fd285ecdd3ff Mon Sep 17 00:00:00 2001 From: Umme Abira Azmary <95493187+Mouly22@users.noreply.github.com> Date: Fri, 25 Mar 2022 12:14:53 +0600 Subject: [PATCH 0014/1086] Create _index.html --- content/bn/_index.html | 61 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 content/bn/_index.html diff --git a/content/bn/_index.html b/content/bn/_index.html new file mode 100644 index 0000000000..9c93c159e9 --- /dev/null +++ b/content/bn/_index.html @@ -0,0 +1,61 @@ +--- +title: "প্রোডাকশন-গ্রেড কন্টেইনার অর্কেস্ট্রেশন" +abstract: "স্বয়ংক্রিয় ধারক স্থাপনা, স্কেলিং এবং ব্যবস্থাপনা" +cid: home +sitemap: + priority: 1.0 +--- + +{{< blocks/section id="oceanNodes" >}} +{{% blocks/feature image="flower" %}} +[কুবারনেটস]({{< relref "/docs/concepts/overview/what-is-kubernetes" >}}), K8s নামেও পরিচিত, কনটেইনারাইজড অ্যাপ্লিকেশনের স্বয়ংক্রিয় স্থাপনা, স্কেলিং এবং পরিচালনার জন্য একটি ওপেন-সোর্স সিস্টেম। + +এটি কন্টেইনারগুলিকে গোষ্ঠীভুক্ত করে যা সহজ ব্যবস্থাপনা এবং আবিষ্কারের জন্য লজিক্যাল ইউনিটে একটি অ্যাপ্লিকেশন তৈরি করে। কুবারনেটস সর্বোত্তম-জাত ধারণা এবং অনুশীলনের সাথে মিলিতভাবে [Google-এ উৎপাদন কাজের লোড চালানোর অভিজ্ঞতা 15 বছরের](http://queue.acm.org/detail.cfm?id=2898444), সম্প্রদায় তৈরি করে। +{{% /blocks/feature %}} + +{{% blocks/feature image="scalable" %}} +#### বিশ্বব্যাপী স্কেল ক্ষমতা + +Google সপ্তাহে বিলিয়ন কন্টেইনার চালানোর অনুমতি একই নীতিতে ডিজাইন করে পায়, সেই একই নীতিতে ডিজাইন এটি ডিজাইন করা হয় দেয়, Kubernetes ব্যবহারকারীর অপস টিম না বাড়িয়ে স্কেল করতে পারে। + +{{% /blocks/feature %}} + +{{% blocks/feature image="blocks" %}} +#### প্রয়োজন মোতাবেক বিকাশ ঘটানো + +স্থানীয়ভাবে পরীক্ষা করা বা বিশ্বব্যাপী এন্টারপ্রাইজ চালানো, আপনার চাহিদাগুলি যতই জটিল হোক না কেন, কুবারনেটস আপনার অ্যাপ্লিকেশনগুলিকে ধারাবাহিকভাবে এবং সহজে বিতরণ করার জন্য আপনাকে সাহায্য করে। + +{{% /blocks/feature %}} + +{{% blocks/feature image="suitcase" %}} +#### K8s যেকোনো এপ্লিকেশন এ রান করানো + +কুবারনেটস হল এমন ওপেন সোর্স যা আপনাকে অন-প্রিমিসেস, হাইব্রিড বা পাবলিক ক্লাউড অবকাঠামোর সুবিধা নেওয়ার স্বাধীনতা দেয়, যাতে আপনি সহজেই কাজের চাপগুলি যেখানে আপনার কাছে গুরুত্বপূর্ণ সেখানে স্থানান্তর করতে পারেন। + +{{% /blocks/feature %}} + +{{< /blocks/section >}} + +{{< blocks/section id="video" background-image="kub_video_banner_homepage" >}} +
+

150+ মাইক্রোসার্ভিস কুবারনেটে স্থানান্তরিত করার চ্যালেঞ্জসমূহ

+

Sarah Wells এর মতে, Technical Director for Operations and Reliability, Financial Times

+ +
+
+ 17-20 মে, 2022-এ KubeCon ইউরোপে যোগ দিন +
+
+
+
+ 24-28 অক্টোবর, 2022-এ KubeCon উত্তর আমেরিকাতে যোগ দিন +
+
+ + +
+{{< /blocks/section >}} + +{{< blocks/kubernetes-features >}} + +{{< blocks/case-studies >}} From 97ee3621551f2e9430f4e644064afbe602143f89 Mon Sep 17 00:00:00 2001 From: Umme Abira Azmary <95493187+Mouly22@users.noreply.github.com> Date: Fri, 25 Mar 2022 12:20:04 +0600 Subject: [PATCH 0015/1086] Create _index.md --- content/bn/releases/_index.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 content/bn/releases/_index.md diff --git a/content/bn/releases/_index.md b/content/bn/releases/_index.md new file mode 100644 index 0000000000..6e42fbfb28 --- /dev/null +++ b/content/bn/releases/_index.md @@ -0,0 +1,28 @@ +--- +linktitle: প্রকাশের ইতিহাস +Title: প্রকাশনাসমূহ +Type: docs +--- + + + + +কুবারনেটস প্রজেক্ট সাম্প্রতিক তিনটি পর্যন্ত ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}) ছোট রিলিজের জন্য রিলিজ শাখা বজায় রাখে। Kubernetes 1.19 এবং নতুন ভার্সন আনুমানিক 1 বছরের প্যাচ সমর্থন পায়। Kubernetes 1.18 এবং তার বেশি বয়সীরা প্রায় 9 মাস প্যাচ সমর্থন পেয়েছে। + +Kubernetes সংস্করণ **x.y.z** হিসাবে প্রকাশ করা হয়, +যেখানে **x** হল প্রধান সংস্করণ, **y** হল অপ্রধান সংস্করণ এবং **z** হল প্যাচ সংস্করণ, যা [শব্দার্থিক সংস্করণ](https://semver.org/) পরিভাষা অনুসরণ করে হয়। + +অতিরিক্ত তথ্যসমূহ [version skew policy](/releases/version-skew-policy/) নথিতে সংরক্ষিত রয়েছে। + + + + +## প্রকাশের ইতিহাস + +{{< release-data >}} + +## আসন্ন রিলিজ + +চেক করুন [সময়সূচী](https://github.com/kubernetes/sig-release/tree/master/releases/release-{{< skew nextMinorVersion >}}) আসন্ন **{{< skew nextMinorVersion >}}** Kubernetes মুক্তিপ্রকাশ! + +## সহায়ক রিসোর্স From ed9c7e34746456efaf7612b9c2f6d966bf47ca3e Mon Sep 17 00:00:00 2001 From: Umme Abira Azmary <95493187+Mouly22@users.noreply.github.com> Date: Fri, 25 Mar 2022 15:34:18 +0600 Subject: [PATCH 0016/1086] Delete _index.md --- content/bn/releases/_index.md | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 content/bn/releases/_index.md diff --git a/content/bn/releases/_index.md b/content/bn/releases/_index.md deleted file mode 100644 index 6e42fbfb28..0000000000 --- a/content/bn/releases/_index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -linktitle: প্রকাশের ইতিহাস -Title: প্রকাশনাসমূহ -Type: docs ---- - - - - -কুবারনেটস প্রজেক্ট সাম্প্রতিক তিনটি পর্যন্ত ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}) ছোট রিলিজের জন্য রিলিজ শাখা বজায় রাখে। Kubernetes 1.19 এবং নতুন ভার্সন আনুমানিক 1 বছরের প্যাচ সমর্থন পায়। Kubernetes 1.18 এবং তার বেশি বয়সীরা প্রায় 9 মাস প্যাচ সমর্থন পেয়েছে। - -Kubernetes সংস্করণ **x.y.z** হিসাবে প্রকাশ করা হয়, -যেখানে **x** হল প্রধান সংস্করণ, **y** হল অপ্রধান সংস্করণ এবং **z** হল প্যাচ সংস্করণ, যা [শব্দার্থিক সংস্করণ](https://semver.org/) পরিভাষা অনুসরণ করে হয়। - -অতিরিক্ত তথ্যসমূহ [version skew policy](/releases/version-skew-policy/) নথিতে সংরক্ষিত রয়েছে। - - - - -## প্রকাশের ইতিহাস - -{{< release-data >}} - -## আসন্ন রিলিজ - -চেক করুন [সময়সূচী](https://github.com/kubernetes/sig-release/tree/master/releases/release-{{< skew nextMinorVersion >}}) আসন্ন **{{< skew nextMinorVersion >}}** Kubernetes মুক্তিপ্রকাশ! - -## সহায়ক রিসোর্স From bf3224e851988001bf3c0ce2f0058628e9373746 Mon Sep 17 00:00:00 2001 From: Imtiaz1234 <78928464+Imtiaz1234@users.noreply.github.com> Date: Fri, 25 Mar 2022 19:51:07 +0600 Subject: [PATCH 0017/1086] Create _index.md --- content/bn/docs/home/_index.md | 66 ++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 content/bn/docs/home/_index.md diff --git a/content/bn/docs/home/_index.md b/content/bn/docs/home/_index.md new file mode 100644 index 0000000000..886331c712 --- /dev/null +++ b/content/bn/docs/home/_index.md @@ -0,0 +1,66 @@ +--- +title: কুবারনেটিস ডকুমেন্টেশন +noedit: true +cid: docsHome +layout: docsportal_home +class: gridPage gridPageHome +linkTitle: "হোম" +main_menu: true +weight: 10 +hide_feedback: true +menu: + main: + title: "ডকুমেন্টেশন" + weight: 20 + post: > +

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

+description: > + কুবারনেটিস হল একটি ওপেন সোর্স কন্টেইনার অর্কেস্ট্রেশন ইঞ্জিন যাতে কনটেইনারাইজড অ্যাপ্লিকেশনের ডিপ্লয়মেন্ট, স্কেলিং এবং ম্যানেজমেন্ট করা যায়। ওপেন সোর্স প্রকল্পটি Cloud Native Computing Foundation দ্বারা হোস্ট করা হয়। +overview: > + কুবারনেটিস হল একটি ওপেন সোর্স কন্টেইনার অর্কেস্ট্রেশন ইঞ্জিন যাতে কনটেইনারাইজড অ্যাপ্লিকেশনের ডিপ্লয়মেন্ট, স্কেলিং এবং ম্যানেজমেন্ট করা যায়। ওপেন সোর্স প্রকল্পটি Cloud Native Computing Foundation (CNCF) দ্বারা হোস্ট করা হয়। + +cards: +- name: concepts + title: "কুবারনেটিস বুঝুন" + description: "কুবারনেটিস এবং এর মৌলিক ধারণা সম্পর্কে জানুন।" + button: "ধারণা দেখুন" + button_path: "/docs/concepts" +- name: tutorials + title: "কুবারনেটিস ব্যাবহার করুন" + description: "কুবারনেটিস এ অ্যাপ্লিকেশন কিভাবে স্থাপন করতে হয় তা শিখতে টিউটোরিয়াল অনুসরণ করুন।" + button: "টিউটোরিয়াল দেখুন" + button_path: "/docs/tutorials" +- name: setup + title: "একটি K8s ক্লাস্টার সেট আপ করুন" + description: "আপনার সম্পদ এবং প্রয়োজনের উপর ভিত্তি করে কুবারনেটিস চালান।" + button: "কুবারনেটিস সেট আপ করুন" + button_path: "/docs/setup" +- name: tasks + title: "কুবারনেটিস কীভাবে ব্যবহার করবেন তা শিখুন" + description: "সাধারণ কাজগুলি দেখুন এবং পদক্ষেপগুলির একটি সংক্ষিপ্ত ক্রম ব্যবহার করে কীভাবে সেগুলি সম্পাদন করা যায়।" + button: "কাজ দেখুন" + button_path: "/docs/tasks" +- name: training + title: "প্রশিক্ষণ" + description: "কুবারনেটিস -এ প্রত্যয়িত হন এবং আপনার cloud native প্রকল্পগুলিকে সফল করুন!" + button: "প্রশিক্ষণ দেখুন" + button_path: "/training" +- name: reference + title: রেফারেন্স তথ্য দেখুন + description: পরিভাষা, কমান্ড লাইন সিনট্যাক্স, API সংস্থান প্রকার এবং সেটআপ টুল ডকুমেন্টেশন ব্রাউজ করুন। + button: রেফারেন্স দেখুন + button_path: /docs/reference +- name: contribute + title: ডক্সে অবদান রাখুন + description: যে কেউ অবদান রাখতে পারেন, আপনি প্রকল্পে নতুন হোন বা আপনি দীর্ঘ সময় ধরে আছেন। + button: ডক্সে অবদান রাখুন + button_path: /docs/contribute +- name: release-notes + title: K8s রিলিজ নোট + description: আপনি যদি কুবারনেটিস ইনস্টল করছেন বা নতুন সংস্করণে আপগ্রেড করছেন, বর্তমান রিলিজ নোটগুলি পড়ুন। + button: "কুবারনেটিস ডাউনলোড করুন" + button_path: "/docs/setup/release/notes" +- name: about + title: ডকুমেন্টেশন সম্পর্কে + description: এই ওয়েবসাইটে কুবারনেটিস-এর বর্তমান এবং পূর্ববর্তী ৪ সংস্করণের ডকুমেন্টেশন রয়েছে। +--- From 0e0ee6ea2e00f45957f78521ffb313e03fbd687d Mon Sep 17 00:00:00 2001 From: nazma1234 <78928674+nazma1234@users.noreply.github.com> Date: Fri, 25 Mar 2022 20:29:12 +0600 Subject: [PATCH 0018/1086] Update turnkey-solutions.md --- .../bn/docs/setup/production-environment/turnkey-solutions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/setup/production-environment/turnkey-solutions.md b/content/bn/docs/setup/production-environment/turnkey-solutions.md index 2927014919..f727d25045 100644 --- a/content/bn/docs/setup/production-environment/turnkey-solutions.md +++ b/content/bn/docs/setup/production-environment/turnkey-solutions.md @@ -1,11 +1,11 @@ --- -title: Turnkey ক্লাউড সমাধান +title: আগে থেকে প্রস্তুত ক্লাউড সমাধান content_type: ধারণা weight: 30 --- -এই পৃষ্ঠাটি কুবারনেটিস প্রত্যয়িত সমাধান প্রদানকারীদের একটি তালিকা প্রদান করে। প্রতিটি প্রদানকারীর পৃষ্ঠা থেকে, আপনি প্রোডাক্সশন এর জন্য প্রস্তুত ক্লাস্টার ইনস্টল এবং সেটআপ করা শিখতে পারেন +এই পৃষ্ঠাটি কুবারনেটিস প্রত্যয়িত সমাধান প্রদানকারীদের একটি তালিকা প্রদান করে। প্রতিটি প্রদানকারীর পৃষ্ঠা থেকে, আপনি প্রোডাক্সশন এর জন্য প্রস্তুত ক্লাস্টার ইনস্টল এবং সেটআপ করা শিখতে পারেন From 9e64b37e0286e86ccb49bffc890ff14b9a94533a Mon Sep 17 00:00:00 2001 From: Rey Lejano Date: Fri, 25 Mar 2022 11:28:12 -0700 Subject: [PATCH 0019/1086] update bn.toml based on en Signed-off-by: Rey Lejano --- data/i18n/bn/bn.toml | 275 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) diff --git a/data/i18n/bn/bn.toml b/data/i18n/bn/bn.toml index 40ee75f7df..0848492b81 100644 --- a/data/i18n/bn/bn.toml +++ b/data/i18n/bn/bn.toml @@ -1 +1,276 @@ # i18n strings for the Bengali (main) site. +# NOTE: Please keep the entries in alphabetical order when editing +[caution] +other = "Caution:" + +[cleanup_heading] +other = "Cleaning up" + +[community_events_calendar] +other = "Events Calendar" + +[community_forum_name] +other = "Forum" + +[community_github_name] +other = "GitHub" + +[community_slack_name] +other = "Slack" + +[community_stack_overflow_name] +other = "Stack Overflow" + +[community_twitter_name] +other = "Twitter" + +[community_youtube_name] +other = "YouTube" + +[deprecation_title] +other = "You are viewing documentation for Kubernetes version:" + +[deprecation_warning] +other = " documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the " + +[deprecation_file_warning] +other = "Deprecated" + +[docs_label_browse] +other = "Browse Docs" + +[docs_label_contributors] +other = "Contributors" + +[docs_label_i_am] +other = "I AM..." + +[docs_label_users] +other = "Users" + +[docs_version_current] +other = "(this documentation)" + +[docs_version_latest_heading] +other = "Latest version" + +[docs_version_other_heading] +other = "Older versions" + +[end_of_life] +other = "End of Life:" + +[envvars_heading] +other = "Environment variables" + +[error_404_were_you_looking_for] +other = "Were you looking for:" + +[examples_heading] +other = "Examples" + +[feature_state] +other = "FEATURE STATE:" + +[feedback_heading] +other = "Feedback" + +[feedback_no] +other = "No" + +[feedback_question] +other = "Was this page helpful?" + +[feedback_yes] +other = "Yes" + +[inline_list_separator] +other = "," + +[input_placeholder_email_address] +other = "email address" + +[javascript_required] +other = "JavaScript must be [enabled](https://www.enable-javascript.com/) to view this content" + +[latest_release] +other = "Latest Release:" + +[latest_version] +other = "latest version." + +[layouts_blog_pager_prev] +other = "<< Prev" + +[layouts_blog_pager_next] +other = "Next >>" + +[layouts_case_studies_list_tell] +other = "Tell your story" + +[layouts_docs_glossary_aka] +other = "Also known as" + +[layouts_docs_glossary_description] +other = "This glossary is intended to be a comprehensive, standardized list of Kubernetes terminology. It includes technical terms that are specific to Kubernetes, as well as more general terms that provide useful context." + +[layouts_docs_glossary_deselect_all] +other = "Deselect all" + +[layouts_docs_glossary_click_details_after] +other = "indicators below to get a longer explanation for any particular term." + +[layouts_docs_glossary_click_details_before] +other = "Click on the" + +[layouts_docs_glossary_filter] +other = "Filter terms according to their tags" + +[layouts_docs_glossary_select_all] +other = "Select all" + +[layouts_docs_partials_feedback_improvement] +other = "suggest an improvement" + +[layouts_docs_partials_feedback_issue] +other = "Open an issue in the GitHub repo if you want to " + +[layouts_docs_partials_feedback_or] +other = "or" + +[layouts_docs_partials_feedback_problem] +other = "report a problem" + +[layouts_docs_partials_feedback_thanks] +other = "Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on" + +[layouts_docs_search_fetching] +other = "Fetching results..." + +[main_by] +other = "by" + +[main_cncf_project] +other = """We are a CNCF graduated project

""" + +[main_community_explore] +other = "Explore the community" + +[main_contribute] +other = "Contribute" + +[main_copyright_notice] +other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" + +[main_documentation_license] +other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" + +[main_github_invite] +other = "Interested in hacking on the core Kubernetes code base?" + +[main_github_view_on] +other = "View On GitHub" + +[main_kubernetes_features] +other = "Kubernetes Features" + +[main_kubeweekly_baseline] +other = "Interested in receiving the latest Kubernetes news? Sign up for KubeWeekly." + +[main_kubernetes_past_link] +other = "View past newsletters" + +[main_kubeweekly_signup] +other = "Subscribe" + +[main_page_history] +other ="Page History" + +[main_page_last_modified_on] +other = "Page last modified on" + +[main_read_about] +other = "Read about" + +[main_read_more] +other = "Read more" + +[not_applicable] +# Localization teams: it's OK to use a longer text here +other = "n/a" + +[note] +other = "Note:" + +[objectives_heading] +other = "Objectives" + +[options_heading] +other = "Options" + +[outdated_blog__message] +other = "This article is more than one year old. Older articles may contain outdated content. Check that the information in the page has not become incorrect since its publication." + +[post_create_issue] +other = "Create an issue" + +[prerequisites_heading] +other = "Before you begin" + +[previous_patches] +other = "Patch Releases:" + +[release_date_after] +other = ")" + +[release_date_before] +other = "(released: " + +# See https://gohugo.io/functions/format/#gos-layout-string +# Use a suitable format for your locale +[release_date_format] +other = "2006-01-02" + +[seealso_heading] +other = "See Also" + +[subscribe_button] +other = "Subscribe" + +[synopsis_heading] +other = "Synopsis" + +[thirdparty_message] +other = """This section links to third party projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for these projects, which are listed alphabetically. To add a project to this list, read the content guide before submitting a change. More information.""" + +[thirdparty_message_edit_disclaimer] +other="""Third party content advice""" + + +[thirdparty_message_single_item] +other = """🛇 This item links to a third party project or product that is not part of Kubernetes itself. More information""" + +[thirdparty_message_disclaimer] +other = """

Items on this page refer to third party products or projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for those third-party products or projects. See the CNCF website guidelines for more details.

You should read the content guide before proposing a change that adds an extra third-party link.

""" + +[ui_search_placeholder] +other = "Search" + +[version_check_mustbe] +other = "Your Kubernetes server must be version " + +[version_check_mustbeorlater] +other = "Your Kubernetes server must be at or later than version " + +[version_check_tocheck] +other = "To check the version, enter " + +[version_menu] +other = "Versions" + +[warning] +other = "Warning:" + +[whatsnext_heading] +other = "What's next" + From e1131ea715bd5c283fb427e9d3f803fa188d7991 Mon Sep 17 00:00:00 2001 From: Umme Abira Azmary <95493187+Mouly22@users.noreply.github.com> Date: Sat, 26 Mar 2022 00:44:32 +0600 Subject: [PATCH 0020/1086] Delete _index.html --- content/bn/_index.html | 61 ------------------------------------------ 1 file changed, 61 deletions(-) delete mode 100644 content/bn/_index.html diff --git a/content/bn/_index.html b/content/bn/_index.html deleted file mode 100644 index 9c93c159e9..0000000000 --- a/content/bn/_index.html +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: "প্রোডাকশন-গ্রেড কন্টেইনার অর্কেস্ট্রেশন" -abstract: "স্বয়ংক্রিয় ধারক স্থাপনা, স্কেলিং এবং ব্যবস্থাপনা" -cid: home -sitemap: - priority: 1.0 ---- - -{{< blocks/section id="oceanNodes" >}} -{{% blocks/feature image="flower" %}} -[কুবারনেটস]({{< relref "/docs/concepts/overview/what-is-kubernetes" >}}), K8s নামেও পরিচিত, কনটেইনারাইজড অ্যাপ্লিকেশনের স্বয়ংক্রিয় স্থাপনা, স্কেলিং এবং পরিচালনার জন্য একটি ওপেন-সোর্স সিস্টেম। - -এটি কন্টেইনারগুলিকে গোষ্ঠীভুক্ত করে যা সহজ ব্যবস্থাপনা এবং আবিষ্কারের জন্য লজিক্যাল ইউনিটে একটি অ্যাপ্লিকেশন তৈরি করে। কুবারনেটস সর্বোত্তম-জাত ধারণা এবং অনুশীলনের সাথে মিলিতভাবে [Google-এ উৎপাদন কাজের লোড চালানোর অভিজ্ঞতা 15 বছরের](http://queue.acm.org/detail.cfm?id=2898444), সম্প্রদায় তৈরি করে। -{{% /blocks/feature %}} - -{{% blocks/feature image="scalable" %}} -#### বিশ্বব্যাপী স্কেল ক্ষমতা - -Google সপ্তাহে বিলিয়ন কন্টেইনার চালানোর অনুমতি একই নীতিতে ডিজাইন করে পায়, সেই একই নীতিতে ডিজাইন এটি ডিজাইন করা হয় দেয়, Kubernetes ব্যবহারকারীর অপস টিম না বাড়িয়ে স্কেল করতে পারে। - -{{% /blocks/feature %}} - -{{% blocks/feature image="blocks" %}} -#### প্রয়োজন মোতাবেক বিকাশ ঘটানো - -স্থানীয়ভাবে পরীক্ষা করা বা বিশ্বব্যাপী এন্টারপ্রাইজ চালানো, আপনার চাহিদাগুলি যতই জটিল হোক না কেন, কুবারনেটস আপনার অ্যাপ্লিকেশনগুলিকে ধারাবাহিকভাবে এবং সহজে বিতরণ করার জন্য আপনাকে সাহায্য করে। - -{{% /blocks/feature %}} - -{{% blocks/feature image="suitcase" %}} -#### K8s যেকোনো এপ্লিকেশন এ রান করানো - -কুবারনেটস হল এমন ওপেন সোর্স যা আপনাকে অন-প্রিমিসেস, হাইব্রিড বা পাবলিক ক্লাউড অবকাঠামোর সুবিধা নেওয়ার স্বাধীনতা দেয়, যাতে আপনি সহজেই কাজের চাপগুলি যেখানে আপনার কাছে গুরুত্বপূর্ণ সেখানে স্থানান্তর করতে পারেন। - -{{% /blocks/feature %}} - -{{< /blocks/section >}} - -{{< blocks/section id="video" background-image="kub_video_banner_homepage" >}} -
-

150+ মাইক্রোসার্ভিস কুবারনেটে স্থানান্তরিত করার চ্যালেঞ্জসমূহ

-

Sarah Wells এর মতে, Technical Director for Operations and Reliability, Financial Times

- -
-
- 17-20 মে, 2022-এ KubeCon ইউরোপে যোগ দিন -
-
-
-
- 24-28 অক্টোবর, 2022-এ KubeCon উত্তর আমেরিকাতে যোগ দিন -
-
- - -
-{{< /blocks/section >}} - -{{< blocks/kubernetes-features >}} - -{{< blocks/case-studies >}} From ad4bb49ff212ca443159043f569c881c60459510 Mon Sep 17 00:00:00 2001 From: Umme Abira Azmary <95493187+Mouly22@users.noreply.github.com> Date: Sat, 26 Mar 2022 00:45:33 +0600 Subject: [PATCH 0021/1086] Create _index.md --- content/bn/docs/reference/glossary/_index.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/docs/reference/glossary/_index.md diff --git a/content/bn/docs/reference/glossary/_index.md b/content/bn/docs/reference/glossary/_index.md new file mode 100644 index 0000000000..c3a290c2aa --- /dev/null +++ b/content/bn/docs/reference/glossary/_index.md @@ -0,0 +1,11 @@ +--- +title: শব্দকোষ +layout: glossary +noedit: true +default_active_tag: fundamental +weight: 5 +card: + name: reference + weight: 10 + title: শব্দকোষ +--- From c76f5ffc709de0519139f31cd3a5f4e922b112c1 Mon Sep 17 00:00:00 2001 From: MD Ikramul Kayes <67923321+ikramulkayes@users.noreply.github.com> Date: Fri, 29 Apr 2022 03:01:07 +0600 Subject: [PATCH 0022/1086] [bn] Localize --- .../concepts/overview/what-is-kubernetes.md | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 content/bn/docs/concepts/overview/what-is-kubernetes.md diff --git a/content/bn/docs/concepts/overview/what-is-kubernetes.md b/content/bn/docs/concepts/overview/what-is-kubernetes.md new file mode 100644 index 0000000000..b0947caef4 --- /dev/null +++ b/content/bn/docs/concepts/overview/what-is-kubernetes.md @@ -0,0 +1,94 @@ +--- +reviewers: +- bgrant0607 +- mikedanese +শিরোনাম: কুবারনেটিস কি ? +বর্ণনা: > + কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, যা ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবা, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে উপলব্ধ। +বিষয়বস্তুর_প্রকার: ধারণা +ওজন: ১০ +কার্ড: + নাম: ধারণা + ওজন: ১০ +সাইটম্যাপ: + অগ্রাধিকার: ০.৯ +--- + + +এই পৃষ্ঠাটি কুবারনেটিসের একটি পরিদর্শন। + + + +কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, যা ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবা, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে উপলব্ধ। + +কুবারনেটিস নামটি গ্রীক থেকে এসেছে, যার অর্থ হেলমসম্যান বা পাইলট। "K" এবং "s" এর মধ্যে আটটি অক্ষর গণনা করার ফলে একটি সংক্ষিপ্ত রূপ K8s। Google ২০১৪ সালে কুবারনেটিস প্রজেক্টটি উন্মুক্ত করে। কুবারনেটিস [Google-এর ১৫ বছরেরও বেশি অভিজ্ঞতা](/blog/2015/04/borg-predecessor-to-kubernetes/) উৎপাদিত কাজের লোডগুলিকে সর্বোত্তম-প্রজন্মের ধারণাগুলির সাথে একত্রিত করে এবং সম্প্রদায় থেকে অনুশীলন। + +## অতিতে যাই + +চলুন অতিতে যেয়ে এক নজরে দেখে নেওয়া যাক কেন কুবারনেটস এতটা কাজে লাগে। + +![স্থাপনার বিবর্তন](/images/docs/Container_Evolution.svg) + +**ঐতিহ্যবাহী স্থাপনার যুগ:** +প্রথম দিকে, সংস্থাগুলি ফিজিক্যাল সার্ভারগুলিতে অ্যাপ্লিকেশন চালাত। একটি ফিজিক্যাল সার্ভারে অ্যাপ্লিকেশনের জন্য রিসোর্স সীমানা নির্ধারণ করার কোন উপায় ছিল না, এবং এর ফলে রিসোর্স বরাদ্দ সমস্যা হয়েছে। উদাহরণস্বরূপ, যদি একটি ফিজিক্যাল সার্ভারে একাধিক অ্যাপ্লিকেশান চালিত হয়, এমন উদাহরণ হতে পারে যেখানে একটি অ্যাপ্লিকেশন বেশিরভাগ সংস্থান গ্রহণ করবে, এবং ফলস্বরূপ, অন্যান্য অ্যাপ্লিকেশনগুলি কম পারফর্ম করবে। এই জন্য একটি সমাধান একটি ভিন্ন ফিজিক্যাল সার্ভারে প্রতিটি অ্যাপ্লিকেশন চালানো হবে. কিন্তু সম্পদের অব্যবহৃত হওয়ার কারণে এটির মাপকাঠিি ঠিক করা যায়নি এবং অনেকগুলি ফিজিক্যাল সার্ভার বজায় রাখা সংস্থাগুলির জন্য ব্যয়বহুল ছিল। + +**ভার্চুয়ালাইজড স্থাপনার যুগ:** একটি সমাধান হিসাবে, ভার্চুয়ালাইজেশন চালু করা হয়েছিল। এটি আপনাকে একটি একক শারীরিক সার্ভারের CPU-তে একাধিক ভার্চুয়াল মেশিন (VMs) চালানো যায়। ভার্চুয়ালাইজেশন অ্যাপ্লিকেশনগুলিকে VM-এর মধ্যে বিচ্ছিন্ন করার অনুমতি দেয় এবং একটি স্তরের নিরাপত্তা প্রদান করে কারণ একটি অ্যাপ্লিকেশনের তথ্য অন্য অ্যাপ্লিকেশন দ্বারা অবাধে অ্যাক্সেস করা যায় না।জাভার্চুয়ালাইজেশন একটি ফিজিক্যাল সার্ভারে রিসোর্সগুলির আরও ভাল ব্যবহারের অনুমতি দেয় এবং আরও ভাল স্কেলেবিলিটির অনুমতি দেয় কারণ একটি অ্যাপ্লিকেশন সহজে যোগ বা আপডেট করা যায়, হার্ডওয়্যার খরচ কমায় এবং আরও অনেক কিছু। ভার্চুয়ালাইজেশনের মাধ্যমে আপনি ডিসপোজেবল ভার্চুয়াল মেশিনের একটি ক্লাস্টার হিসাবে ভৌত সম্পদের একটি সেট উপস্থাপন করতে পারেন। + +প্রতিটি VM হল একটি সম্পূর্ণ মেশিন যা ভার্চুয়ালাইজড হার্ডওয়্যারের উপরে নিজস্ব অপারেটিং সিস্টেম সহ সমস্ত উপাদান চালায়। + +**কন্টেইনার স্থাপনের যুগ:** কনটেইনারগুলি VM-এর মতোই, তবে অ্যাপ্লিকেশনগুলির মধ্যে অপারেটিং সিস্টেম (OS) ভাগ করার জন্য তাদের শিথিল বিচ্ছিন্নতা বৈশিষ্ট্য রয়েছে৷ অতএব, পাত্রে হালকা বলে মনে করা হয়। একটি VM-এর মতো, একটি ধারকটির নিজস্ব ফাইল সিস্টেম, CPU ভাগ, মেমরি, প্রক্রিয়া স্থান এবং আরও অনেক কিছু রয়েছে। যেহেতু এগুলি অন্তর্নিহিত অবকাঠামো থেকে আলাদা করা হয়েছে, তারা ক্লাউড এবং OS ডিস্ট্রিবিউশন জুড়ে বহনযোগ্য। + +কনটেইনারগুলি জনপ্রিয় হয়ে উঠেছে কারণ তারা অতিরিক্ত সুবিধা প্রদান করে, যেমন: + +* এজাইল অ্যাপ্লিকেশন তৈরি এবং স্থাপনা: ভিএম ইমেজ ব্যবহারের তুলনায় কন্টেইনার ইমেজ তৈরির সহজতা এবং দক্ষতা বেশি। +* ক্রমাগত বিকাশ, একীকরণ এবং স্থাপনা: দ্রুত এবং দক্ষ রোলব্যাকগুলির সাথে নির্ভরযোগ্য এবং ঘন ঘন কন্টেইনার ইমেজ তৈরি এবং স্থাপনার ব্যবস্থা করে (চিত্র অপরিবর্তনীয়তার কারণে). +* ডেভ এবং অপস উদ্বেগের বিচ্ছেদ: স্থাপনার সময় না করে বিল্ড/রিলিজ সময়ে অ্যাপ্লিকেশন কন্টেইনার ইমেজ তৈরি করুন, যার ফলে অবকাঠামো থেকে অ্যাপ্লিকেশনগুলিকে বিচ্ছেদ করা যায়। +* পর্যবেক্ষণযোগ্যতা: শুধুমাত্র OS-স্তরের তথ্য এবং মেট্রিক্সই নয়, প্রয়োগের স্বাস্থ্য এবং অন্যান্য সংকেতও। +* ডেভেলপমেন্ট, টেস্টিং এবং প্রোডাকশন জুড়ে পরিবেশগত সামঞ্জস্য: একটি ল্যাপটপে ক্লাউডের মতোই চলে। +* ক্লাউড এবং ওএস ডিস্ট্রিবিউশন পোর্টেবিলিটি: Ubuntu, RHEL, CoreOS, on-premises, on major public clouds, এবং অন্য কোথাও চলে। +* অ্যাপ্লিকেশন-কেন্দ্রিক ব্যবস্থাপনা: ভার্চুয়াল হার্ডওয়্যারে একটি OS চালানো থেকে লজিক্যাল রিসোর্স ব্যবহার করে একটি OS-এ একটি অ্যাপ্লিকেশন চালানো পর্যন্ত বিমূর্ততার স্তর বাড়ায়। +* ঢিলেঢালাভাবে সংযুক্ত, বিতরণ করা, স্থিতিস্থাপক, মুক্ত মাইক্রো-পরিষেবা: অ্যাপ্লিকেশনগুলিকে ছোট, স্বাধীন টুকরোগুলিতে বিভক্ত করা হয় এবং গতিশীলভাবে স্থাপন ও পরিচালনা করা যায় – একটি বড় একক-উদ্দেশ্য মেশিনে চলমান একটি মনোলিথিক স্ট্যাক নয়।. +* সম্পদ বিচ্ছিন্নতা: অনুমানযোগ্য অ্যাপ্লিকেশন কর্মক্ষমতা। +* সম্পদের ব্যবহার: উচ্চ দক্ষতা এবং ঘনত্ব। + +## আপনার কেন কুবারনেটিস দরকার এবং এটি কী করতে পারে {#কেন-আপনার-দরকার-কুবারনেটিস-এবং-কী-পারে-এটি-করতে} + +কন্টেইনারগুলি আপনার অ্যাপ্লিকেশনগুলিকে বান্ডিল এবং চালানোর একটি ভাল উপায়৷ একটি উৎপাদন পরিবেশে, আপনাকে সেই কন্টেইনারগুলিকে পরিচালনা করতে হবে যা অ্যাপ্লিকেশনগুলি চালায় এবং নিশ্চিত করতে হবে যে কোনও ডাউনটাইম নেই৷ উদাহরণস্বরূপ, যদি একটি ধারক ডাউন হয়ে যায়, তখন অন্য ধারকের শুরু হতে হবে। এই আচরণ একটি সিস্টেম দ্বারা পরিচালিত হলে এটি সহজ হবে না? + +এভাবেই কুবারনেটিস উদ্ধারে আসে! কুবারনেটিস আপনাকে সিস্টেমগুলিকে স্থিতিস্থাপকভাবে চালানোর জন্য একটি কাঠামো প্রদান করে। এটি আপনার অ্যাপ্লিকেশনের জন্য স্কেলিং এবং ফেইলওভারের যত্ন নেয়, স্থাপনার নিদর্শন প্রদান করে এবং আরও অনেক কিছু করে। উদাহরণস্বরূপ, কুবারনেটিস সহজেই আপনার সিস্টেমের জন্য একটি ক্যানারি স্থাপনা পরিচালনা করতে পারে। + +কুবারনেটিস আপনাকে সরবরাহ করে: + +* **পরিষেবা আবিষ্কার এবং লোড ব্যালেন্সিং** +কুবারনেটিস ডিএনএস নাম ব্যবহার করে বা তাদের নিজস্ব আইপি ঠিকানা ব্যবহার করে একটি ধারক প্রকাশ করতে পারে। একটি কন্টেইনারে ট্রাফিক বেশি হলে, কুবারনেটিস লোড ব্যালেন্স এবং নেটওয়ার্ক ট্র্যাফিক বিতরণ করতে সক্ষম হয় যাতে স্থাপনা স্থিতিশীল থাকে। +* **স্টোরেজ অর্কেস্ট্রেশন** +কুবারনেটিস আপনাকে স্বয়ংক্রিয়ভাবে আপনার পছন্দের একটি স্টোরেজ সিস্টেম মাউন্ট করার অনুমতি দেয়, যেমন স্থানীয় স্টোরেজ, পাবলিক ক্লাউড প্রদানকারী এবং আরও অনেক কিছু। +* **স্বয়ংক্রিয় রোলআউট এবং রোলব্যাক** +আপনি কুবারনেটিস ব্যবহার করে আপনার স্থাপন করা কন্টেইনার জন্য পছন্দসই অবস্থা বর্ণনা করতে পারেন এবং এটি একটি নিয়ন্ত্রিত হারে প্রকৃত অবস্থাকে পছন্দসই অবস্থায় পরিবর্তন করতে পারে। উদাহরণস্বরূপ, আপনি আপনার স্থাপনার জন্য নতুন কন্টেইনার তৈরি করতে, বিদ্যমান কন্টেইনারগুলি সরাতে এবং নতুন কন্টেইনারে তাদের সমস্ত রিসোরস গ্রহণ করতে কুবারনেটসকে স্বয়ংক্রিয়ভাবে করতে পারেন। +* **স্বয়ংক্রিয় বিন প্যাকিং** +আপনি কুবারনেটিসকে নোডের একটি ক্লাস্টার প্রদান করেন যা এটি কন্টেইনারাইজড কাজ চালাতে ব্যবহার করতে পারে। আপনি কুবারনেটসকে বলুন প্রতিটি কন্টেইনারের কত CPU এবং মেমরি (RAM) প্রয়োজন। কুবারনেটিস আপনার সম্পদের সর্বোত্তম ব্যবহার করতে আপনার নোডগুলিতে কন্টেইনারে মানানসই করতে পারে। +* **স্ব-নিরাময়** + কন্টেইনারগুলি পুনরায় বন্ধ করে চালু করে যেগুলো ব্যর্থ হয়, কন্টেইনারগুলিকে প্রতিস্থাপন করে, আপনার ব্যবহারকারী-সংজ্ঞায়িত স্বাস্থ্য পরীক্ষায় সাড়া না দেওয়া কন্টেইনারগুলিকে বাতিল করে এবং ক্লায়েন্টদের কাছে সেগুলিকে উপস্থাপন করে না যতক্ষণ না তারা পরিবেশন করার জন্য প্রস্তুত হয়৷ +* **গোপন এবং কনফিগারেশন ব্যবস্থাপনা** +কুবারনেটিস আপনাকে পাসওয়ার্ড, OAuth টোকেন এবং SSH কীগুলির মতো সংবেদনশীল তথ্য সংরক্ষণ এবং পরিচালনা করতে দেয়। আপনি আপনার কন্টেইনারের চিত্রগুলি পুনর্নির্মাণ না করে এবং আপনার স্ট্যাক কনফিগারেশনে গোপনীয়তা প্রকাশ না করেই গোপনীয়তা এবং অ্যাপ্লিকেশন কনফিগারেশন স্থাপন এবং আপডেট করতে পারেন। + +## কুবারনেটিস কি না + +কুবারনেটিস একটি ঐতিহ্যগত, সর্ব-অন্তর্ভুক্ত PaaS (পরিষেবা হিসাবে প্ল্যাটফর্ম) সিস্টেম নয়। যেহেতু Kubernetes হার্ডওয়্যার স্তরের পরিবর্তে কন্টেইনার স্তরে কাজ করে, তাই এটি PaaS অফারগুলির জন্য সাধারণভাবে কিছু প্রযোজ্য বৈশিষ্ট্য প্রদান করে, যেমন স্থাপনা, স্কেলিং, লোড ব্যালেন্সিং, এবং ব্যবহারকারীদের তাদের লগিং, পর্যবেক্ষণ এবং সতর্কতা সমাধানগুলিকে একীভূত করতে দেয়৷ যাইহোক, কুবারনেটিস একচেটিয়া নয়, এবং এই ডিফল্ট সমাধান ঐচ্ছিক এবং প্লাগযোগ্য। কুবারনেটিস বিকাশকারী প্ল্যাটফর্ম তৈরির জন্য বিল্ডিং ব্লক সরবরাহ করে, কিন্তু যেখানে এটি গুরুত্বপূর্ণ সেখানে ব্যবহারকারীর পছন্দ এবং নমনীয়তা সংরক্ষণ করে। + +কুবারনেটিস: + +* সমর্থিত অ্যাপ্লিকেশনের ধরন সীমাবদ্ধ করে না। কুবারনেটিস-এর লক্ষ্য স্টেটলেস, স্টেটফুল, এবং ডেটা-প্রসেসিং ওয়ার্কলোড সহ অত্যন্ত বৈচিত্র্যময় কাজের লোড সহায়তা করা। যদি একটি অ্যাপ্লিকেশন একটি পাত্রে চলতে পারে তবে এটি কুবারনেটে দুর্দান্ত চালানো সম্ভব। +* সোর্স কোড স্থাপন করে না এবং আপনার অ্যাপ্লিকেশন তৈরি করে না। ক্রমাগত ইন্টিগ্রেশন, ডেলিভারি, এবং ডিপ্লয়মেন্ট (CI/CD) ওয়ার্কফ্লোগুলি সংস্থার প্রকৃতির উপর এবং পছন্দগুলির পাশাপাশি প্রযুক্তিগত প্রয়োজনীয়তা দ্বারা নির্ধারিত হয়। +* মিডলওয়্যার (উদাহরণস্বরূপ, বার্তা বাস), ডেটা-প্রসেসিং ফ্রেমওয়ার্ক (উদাহরণস্বরূপ, স্পার্ক), ডাটাবেস (উদাহরণস্বরূপ, মাইএসকিউএল), ক্যাশে, বা ক্লাস্টার স্টোরেজ সিস্টেম (উদাহরণস্বরূপ, Ceph) এর মতো অ্যাপ্লিকেশন-স্তরের পরিষেবা প্রদান করে না। অন্তর্নির্মিত পরিষেবা হিসাবে। এই ধরনের উপাদানগুলি কুবারনেটিস-এ চলতে পারে, এবং/অথবা পোর্টেবল মেকানিজম, যেমন [ওপেন সার্ভিস ব্রোকার](https://openservicebrokerapi.org/) এর মাধ্যমে Kubernetes-এ চলমান অ্যাপ্লিকেশনের মাধ্যমে অ্যাক্সেস করা যেতে পারে। +* লগিং, পর্যবেক্ষণ, বা সতর্কতা সমাধান নির্দেশ করে না। এটি ধারণার প্রমাণ হিসাবে কিছু ইন্টিগ্রেশন এবং মেট্রিক্স সংগ্রহ ও রপ্তানি করার প্রক্রিয়া প্রদান করে। +* কনফিগারেশন ভাষা/সিস্টেম প্রদান করে না বা বাধ্যতামূলক করে না (উদাহরণস্বরূপ, জসননেট)। এটি একটি ঘোষণামূলক API প্রদান করে যা ঘোষণামূলক স্পেসিফিকেশনের নির্বিচারে ফর্ম দ্বারা লক্ষ্যধারন করা যেতে পারে। +* কোন ব্যাপক যান্ত্রিক কনফিগারেশন, রক্ষণাবেক্ষণ, ব্যবস্থাপনা, বা স্ব-নিরাময় সিস্টেম প্রদান বা গ্রহণ করে না। +*উপরন্তু, কুবারনেটিস একটি নিছক অর্কেস্ট্রেশন সিস্টেম নয়। প্রকৃতপক্ষে, এটি অর্কেস্ট্রেশনের প্রয়োজনীয়তা দূর করে। অর্কেস্ট্রেশনের প্রযুক্তিগত সংজ্ঞা হল একটি সংজ্ঞায়িত কর্মপ্রবাহের সঞ্চালন: প্রথমে A, তারপর B, তারপর C করুন। বিপরীতে, Kubernetes স্বাধীন, সংমিশ্রণযোগ্য নিয়ন্ত্রণ প্রক্রিয়াগুলির একটি সেট নিয়ে গঠিত যা বর্তমান অবস্থাকে প্রদত্ত পছন্দসই অবস্থার দিকে ক্রমাগত চালিত করে। আপনি A থেকে C পর্যন্ত কিভাবে যাবেন তা বিবেচ্য নয়। কেন্দ্রীভূত নিয়ন্ত্রণেরও প্রয়োজন নেই। এর ফলে এমন একটি সিস্টেম তৈরি হয় যা ব্যবহার করা সহজ এবং আরও শক্তিশালী, মজবুত, স্থিতিস্থাপক এবং বর্ধনশীল। + + + +## {{% heading "এরপর কি" %}} + +* কটাক্ষপাত করুন [Kubernetes Components](/docs/concepts/overview/components/) +* প্রস্তুত [Get Started](/docs/setup/)? From 621e3142a27c50257f938860556887bed535ec2b Mon Sep 17 00:00:00 2001 From: MD Ikramul Kayes <67923321+ikramulkayes@users.noreply.github.com> Date: Fri, 29 Apr 2022 11:27:49 +0600 Subject: [PATCH 0023/1086] 1st --- content/bn/docs/concepts/overview/what-is-kubernetes.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/content/bn/docs/concepts/overview/what-is-kubernetes.md b/content/bn/docs/concepts/overview/what-is-kubernetes.md index b0947caef4..7ce30e5278 100644 --- a/content/bn/docs/concepts/overview/what-is-kubernetes.md +++ b/content/bn/docs/concepts/overview/what-is-kubernetes.md @@ -1,7 +1,5 @@ --- -reviewers: -- bgrant0607 -- mikedanese + শিরোনাম: কুবারনেটিস কি ? বর্ণনা: > কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, যা ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবা, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে উপলব্ধ। From c6d14c7ee73d055e90ad015d78c5598b043f120d Mon Sep 17 00:00:00 2001 From: Rey Lejano Date: Thu, 5 May 2022 12:45:32 -0700 Subject: [PATCH 0024/1086] Update Bengali localization owners --- OWNERS_ALIASES | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index f98d2fe19a..f3e215d216 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -11,7 +11,9 @@ aliases: sig-docs-bn-owners: # Admins for Bengali content - mitul3737 sig-docs-bn-reviews: # PR reviews for Bengali content + - Imtiaz1234 - mitul3737 + - rajibmitra sig-docs-de-owners: # Admins for German content - bene2k1 - mkorbi From 76ab2e85786759784141012462e6339876891c98 Mon Sep 17 00:00:00 2001 From: Rey Lejano Date: Thu, 5 May 2022 12:47:15 -0700 Subject: [PATCH 0025/1086] Update Bengali localization owners --- OWNERS_ALIASES | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index f3e215d216..efa1e3a531 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -9,7 +9,9 @@ aliases: - sftim - nate-double-u sig-docs-bn-owners: # Admins for Bengali content + - Imtiaz1234 - mitul3737 + - rajibmitra sig-docs-bn-reviews: # PR reviews for Bengali content - Imtiaz1234 - mitul3737 From 5c774d5b2f1862d7a9b93c2776eaee40dc9b2263 Mon Sep 17 00:00:00 2001 From: MD Ikramul Kayes <67923321+ikramulkayes@users.noreply.github.com> Date: Fri, 6 May 2022 13:52:33 +0600 Subject: [PATCH 0026/1086] =?UTF-8?q?=E0=A7=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concepts/overview/what-is-kubernetes.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/content/bn/docs/concepts/overview/what-is-kubernetes.md b/content/bn/docs/concepts/overview/what-is-kubernetes.md index 7ce30e5278..33d931b244 100644 --- a/content/bn/docs/concepts/overview/what-is-kubernetes.md +++ b/content/bn/docs/concepts/overview/what-is-kubernetes.md @@ -3,17 +3,17 @@ শিরোনাম: কুবারনেটিস কি ? বর্ণনা: > কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, যা ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবা, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে উপলব্ধ। -বিষয়বস্তুর_প্রকার: ধারণা -ওজন: ১০ -কার্ড: - নাম: ধারণা - ওজন: ১০ -সাইটম্যাপ: - অগ্রাধিকার: ০.৯ +content_type: concept +weight: 10 +card: + name: concepts + weight: 10 +sitemap: + priority: 0.9 --- -এই পৃষ্ঠাটি কুবারনেটিসের একটি পরিদর্শন। +এই পৃষ্ঠাটি কুবারনেটিসের একটি পরিপূর্ণ ধারণা প্রদান করে । @@ -23,14 +23,14 @@ ## অতিতে যাই -চলুন অতিতে যেয়ে এক নজরে দেখে নেওয়া যাক কেন কুবারনেটস এতটা কাজে লাগে। +চলুন অতিতে যেয়ে এক নজরে দেখে নেওয়া যাক কেন কুবারনেটিস এতটা কাজে লাগে। ![স্থাপনার বিবর্তন](/images/docs/Container_Evolution.svg) **ঐতিহ্যবাহী স্থাপনার যুগ:** -প্রথম দিকে, সংস্থাগুলি ফিজিক্যাল সার্ভারগুলিতে অ্যাপ্লিকেশন চালাত। একটি ফিজিক্যাল সার্ভারে অ্যাপ্লিকেশনের জন্য রিসোর্স সীমানা নির্ধারণ করার কোন উপায় ছিল না, এবং এর ফলে রিসোর্স বরাদ্দ সমস্যা হয়েছে। উদাহরণস্বরূপ, যদি একটি ফিজিক্যাল সার্ভারে একাধিক অ্যাপ্লিকেশান চালিত হয়, এমন উদাহরণ হতে পারে যেখানে একটি অ্যাপ্লিকেশন বেশিরভাগ সংস্থান গ্রহণ করবে, এবং ফলস্বরূপ, অন্যান্য অ্যাপ্লিকেশনগুলি কম পারফর্ম করবে। এই জন্য একটি সমাধান একটি ভিন্ন ফিজিক্যাল সার্ভারে প্রতিটি অ্যাপ্লিকেশন চালানো হবে. কিন্তু সম্পদের অব্যবহৃত হওয়ার কারণে এটির মাপকাঠিি ঠিক করা যায়নি এবং অনেকগুলি ফিজিক্যাল সার্ভার বজায় রাখা সংস্থাগুলির জন্য ব্যয়বহুল ছিল। +প্রথম দিকে, সংস্থাগুলি ফিজিক্যাল সার্ভারগুলিতে অ্যাপ্লিকেশন চালাত। একটি ফিজিক্যাল সার্ভারে অ্যাপ্লিকেশনের জন্য রিসোর্স সীমানা নির্ধারণ করার কোন উপায় ছিল না, এবং এর ফলে রিসোর্স বরাদ্দ সমস্যা হয়েছে। উদাহরণস্বরূপ, যদি একটি ফিজিক্যাল সার্ভারে একাধিক অ্যাপ্লিকেশান চালিত হয়, এমন উদাহরণ হতে পারে যেখানে একটি অ্যাপ্লিকেশন বেশিরভাগ সংস্থান গ্রহণ করবে, এবং ফলস্বরূপ, অন্যান্য অ্যাপ্লিকেশনগুলি কম পারফর্ম করবে। এই জন্য একটি সমাধান একটি ভিন্ন ফিজিক্যাল সার্ভারে প্রতিটি অ্যাপ্লিকেশন চালানো হবে। কিন্তু সম্পদের অব্যবহৃত হওয়ার কারণে এটির মাপকাঠিি ঠিক করা যায়নি এবং অনেকগুলি ফিজিক্যাল সার্ভার বজায় রাখা সংস্থাগুলির জন্য ব্যয়বহুল ছিল। -**ভার্চুয়ালাইজড স্থাপনার যুগ:** একটি সমাধান হিসাবে, ভার্চুয়ালাইজেশন চালু করা হয়েছিল। এটি আপনাকে একটি একক শারীরিক সার্ভারের CPU-তে একাধিক ভার্চুয়াল মেশিন (VMs) চালানো যায়। ভার্চুয়ালাইজেশন অ্যাপ্লিকেশনগুলিকে VM-এর মধ্যে বিচ্ছিন্ন করার অনুমতি দেয় এবং একটি স্তরের নিরাপত্তা প্রদান করে কারণ একটি অ্যাপ্লিকেশনের তথ্য অন্য অ্যাপ্লিকেশন দ্বারা অবাধে অ্যাক্সেস করা যায় না।জাভার্চুয়ালাইজেশন একটি ফিজিক্যাল সার্ভারে রিসোর্সগুলির আরও ভাল ব্যবহারের অনুমতি দেয় এবং আরও ভাল স্কেলেবিলিটির অনুমতি দেয় কারণ একটি অ্যাপ্লিকেশন সহজে যোগ বা আপডেট করা যায়, হার্ডওয়্যার খরচ কমায় এবং আরও অনেক কিছু। ভার্চুয়ালাইজেশনের মাধ্যমে আপনি ডিসপোজেবল ভার্চুয়াল মেশিনের একটি ক্লাস্টার হিসাবে ভৌত সম্পদের একটি সেট উপস্থাপন করতে পারেন। +**ভার্চুয়ালাইজড স্থাপনার যুগ:** একটি সমাধান হিসাবে, ভার্চুয়ালাইজেশন চালু করা হয়েছিল। এটি আপনাকে একটি একক শারীরিক সার্ভারের CPU-তে একাধিক ভার্চুয়াল মেশিন (VMs) চালানো যায়। ভার্চুয়ালাইজেশন অ্যাপ্লিকেশনগুলিকে VM-এর মধ্যে বিচ্ছিন্ন করার অনুমতি দেয় এবং একটি স্তরের নিরাপত্তা প্রদান করে কারণ একটি অ্যাপ্লিকেশনের তথ্য অন্য অ্যাপ্লিকেশন দ্বারা অবাধে অ্যাক্সেস করা যায় না। ভার্চুয়ালাইজেশন একটি ফিজিক্যাল সার্ভারে রিসোর্সগুলির আরও ভালো ব্যবহারের অনুমতি দেয় এবং আরও ভাল স্কেলেবিলিটির অনুমতি দেয় কারণ একটি অ্যাপ্লিকেশন সহজে যোগ বা আপডেট করা যায়, হার্ডওয়্যার খরচ কমায় এবং আরও অনেক কিছু। ভার্চুয়ালাইজেশনের মাধ্যমে আপনি ডিসপোজেবল ভার্চুয়াল মেশিনের একটি ক্লাস্টার হিসাবে ভৌত সম্পদের একটি সেট উপস্থাপন করতে পারেন। প্রতিটি VM হল একটি সম্পূর্ণ মেশিন যা ভার্চুয়ালাইজড হার্ডওয়্যারের উপরে নিজস্ব অপারেটিং সিস্টেম সহ সমস্ত উপাদান চালায়। @@ -39,7 +39,7 @@ কনটেইনারগুলি জনপ্রিয় হয়ে উঠেছে কারণ তারা অতিরিক্ত সুবিধা প্রদান করে, যেমন: * এজাইল অ্যাপ্লিকেশন তৈরি এবং স্থাপনা: ভিএম ইমেজ ব্যবহারের তুলনায় কন্টেইনার ইমেজ তৈরির সহজতা এবং দক্ষতা বেশি। -* ক্রমাগত বিকাশ, একীকরণ এবং স্থাপনা: দ্রুত এবং দক্ষ রোলব্যাকগুলির সাথে নির্ভরযোগ্য এবং ঘন ঘন কন্টেইনার ইমেজ তৈরি এবং স্থাপনার ব্যবস্থা করে (চিত্র অপরিবর্তনীয়তার কারণে). +* ক্রমাগত বিকাশ, একীকরণ এবং স্থাপনা: দ্রুত এবং দক্ষ রোলব্যাকগুলির সাথে নির্ভরযোগ্য এবং ঘন ঘন কন্টেইনার image তৈরি এবং স্থাপনার ব্যবস্থা করে (image অপরিবর্তনীয়তার কারণে). * ডেভ এবং অপস উদ্বেগের বিচ্ছেদ: স্থাপনার সময় না করে বিল্ড/রিলিজ সময়ে অ্যাপ্লিকেশন কন্টেইনার ইমেজ তৈরি করুন, যার ফলে অবকাঠামো থেকে অ্যাপ্লিকেশনগুলিকে বিচ্ছেদ করা যায়। * পর্যবেক্ষণযোগ্যতা: শুধুমাত্র OS-স্তরের তথ্য এবং মেট্রিক্সই নয়, প্রয়োগের স্বাস্থ্য এবং অন্যান্য সংকেতও। * ডেভেলপমেন্ট, টেস্টিং এবং প্রোডাকশন জুড়ে পরিবেশগত সামঞ্জস্য: একটি ল্যাপটপে ক্লাউডের মতোই চলে। @@ -49,11 +49,11 @@ * সম্পদ বিচ্ছিন্নতা: অনুমানযোগ্য অ্যাপ্লিকেশন কর্মক্ষমতা। * সম্পদের ব্যবহার: উচ্চ দক্ষতা এবং ঘনত্ব। -## আপনার কেন কুবারনেটিস দরকার এবং এটি কী করতে পারে {#কেন-আপনার-দরকার-কুবারনেটিস-এবং-কী-পারে-এটি-করতে} +## আপনার কেন কুবারনেটিস দরকার এবং এটি কী করতে পারে {#why-you-need-kubernetes-and-what-can-it-do} কন্টেইনারগুলি আপনার অ্যাপ্লিকেশনগুলিকে বান্ডিল এবং চালানোর একটি ভাল উপায়৷ একটি উৎপাদন পরিবেশে, আপনাকে সেই কন্টেইনারগুলিকে পরিচালনা করতে হবে যা অ্যাপ্লিকেশনগুলি চালায় এবং নিশ্চিত করতে হবে যে কোনও ডাউনটাইম নেই৷ উদাহরণস্বরূপ, যদি একটি ধারক ডাউন হয়ে যায়, তখন অন্য ধারকের শুরু হতে হবে। এই আচরণ একটি সিস্টেম দ্বারা পরিচালিত হলে এটি সহজ হবে না? -এভাবেই কুবারনেটিস উদ্ধারে আসে! কুবারনেটিস আপনাকে সিস্টেমগুলিকে স্থিতিস্থাপকভাবে চালানোর জন্য একটি কাঠামো প্রদান করে। এটি আপনার অ্যাপ্লিকেশনের জন্য স্কেলিং এবং ফেইলওভারের যত্ন নেয়, স্থাপনার নিদর্শন প্রদান করে এবং আরও অনেক কিছু করে। উদাহরণস্বরূপ, কুবারনেটিস সহজেই আপনার সিস্টেমের জন্য একটি ক্যানারি স্থাপনা পরিচালনা করতে পারে। +এভাবেই কুবারনেটিস কাজে আসে। কুবারনেটিস আপনাকে সিস্টেমগুলিকে স্থিতিস্থাপকভাবে চালানোর জন্য একটি কাঠামো প্রদান করে। এটি আপনার অ্যাপ্লিকেশনের জন্য স্কেলিং এবং ফেইলওভারের যত্ন নেয়, স্থাপনার নিদর্শন প্রদান করে এবং আরও অনেক কিছু করে। উদাহরণস্বরূপ, কুবারনেটিস সহজেই আপনার সিস্টেমের জন্য একটি ক্যানারি স্থাপনা পরিচালনা করতে পারে। কুবারনেটিস আপনাকে সরবরাহ করে: @@ -62,9 +62,9 @@ * **স্টোরেজ অর্কেস্ট্রেশন** কুবারনেটিস আপনাকে স্বয়ংক্রিয়ভাবে আপনার পছন্দের একটি স্টোরেজ সিস্টেম মাউন্ট করার অনুমতি দেয়, যেমন স্থানীয় স্টোরেজ, পাবলিক ক্লাউড প্রদানকারী এবং আরও অনেক কিছু। * **স্বয়ংক্রিয় রোলআউট এবং রোলব্যাক** -আপনি কুবারনেটিস ব্যবহার করে আপনার স্থাপন করা কন্টেইনার জন্য পছন্দসই অবস্থা বর্ণনা করতে পারেন এবং এটি একটি নিয়ন্ত্রিত হারে প্রকৃত অবস্থাকে পছন্দসই অবস্থায় পরিবর্তন করতে পারে। উদাহরণস্বরূপ, আপনি আপনার স্থাপনার জন্য নতুন কন্টেইনার তৈরি করতে, বিদ্যমান কন্টেইনারগুলি সরাতে এবং নতুন কন্টেইনারে তাদের সমস্ত রিসোরস গ্রহণ করতে কুবারনেটসকে স্বয়ংক্রিয়ভাবে করতে পারেন। +আপনি কুবারনেটিস ব্যবহার করে আপনার স্থাপন করা কন্টেইনার জন্য পছন্দসই অবস্থা বর্ণনা করতে পারেন এবং এটি একটি নিয়ন্ত্রিত হারে প্রকৃত অবস্থাকে পছন্দসই অবস্থায় পরিবর্তন করতে পারে। উদাহরণস্বরূপ, আপনি আপনার স্থাপনার জন্য নতুন কন্টেইনার তৈরি করতে, বিদ্যমান কন্টেইনারগুলি সরাতে এবং নতুন কন্টেইনারে তাদের সমস্ত রিসোর্স গ্রহণ করতে কুবারনেটিসকে স্বয়ংক্রিয়ভাবে করতে পারেন। * **স্বয়ংক্রিয় বিন প্যাকিং** -আপনি কুবারনেটিসকে নোডের একটি ক্লাস্টার প্রদান করেন যা এটি কন্টেইনারাইজড কাজ চালাতে ব্যবহার করতে পারে। আপনি কুবারনেটসকে বলুন প্রতিটি কন্টেইনারের কত CPU এবং মেমরি (RAM) প্রয়োজন। কুবারনেটিস আপনার সম্পদের সর্বোত্তম ব্যবহার করতে আপনার নোডগুলিতে কন্টেইনারে মানানসই করতে পারে। +আপনি কুবারনেটিসকে নোডের একটি ক্লাস্টার প্রদান করেন যা এটি কন্টেইনারাইজড কাজ চালাতে ব্যবহার করতে পারে। আপনি কুবারনেটিসকেে বলুন প্রতিটি কন্টেইনারের কত CPU এবং মেমরি (RAM) প্রয়োজন। কুবারনেটিস আপনার সম্পদের সর্বোত্তম ব্যবহার করতে আপনার নোডগুলিতে কন্টেইনারে মানানসই করতে পারে। * **স্ব-নিরাময়** কন্টেইনারগুলি পুনরায় বন্ধ করে চালু করে যেগুলো ব্যর্থ হয়, কন্টেইনারগুলিকে প্রতিস্থাপন করে, আপনার ব্যবহারকারী-সংজ্ঞায়িত স্বাস্থ্য পরীক্ষায় সাড়া না দেওয়া কন্টেইনারগুলিকে বাতিল করে এবং ক্লায়েন্টদের কাছে সেগুলিকে উপস্থাপন করে না যতক্ষণ না তারা পরিবেশন করার জন্য প্রস্তুত হয়৷ * **গোপন এবং কনফিগারেশন ব্যবস্থাপনা** @@ -78,7 +78,7 @@ * সমর্থিত অ্যাপ্লিকেশনের ধরন সীমাবদ্ধ করে না। কুবারনেটিস-এর লক্ষ্য স্টেটলেস, স্টেটফুল, এবং ডেটা-প্রসেসিং ওয়ার্কলোড সহ অত্যন্ত বৈচিত্র্যময় কাজের লোড সহায়তা করা। যদি একটি অ্যাপ্লিকেশন একটি পাত্রে চলতে পারে তবে এটি কুবারনেটে দুর্দান্ত চালানো সম্ভব। * সোর্স কোড স্থাপন করে না এবং আপনার অ্যাপ্লিকেশন তৈরি করে না। ক্রমাগত ইন্টিগ্রেশন, ডেলিভারি, এবং ডিপ্লয়মেন্ট (CI/CD) ওয়ার্কফ্লোগুলি সংস্থার প্রকৃতির উপর এবং পছন্দগুলির পাশাপাশি প্রযুক্তিগত প্রয়োজনীয়তা দ্বারা নির্ধারিত হয়। -* মিডলওয়্যার (উদাহরণস্বরূপ, বার্তা বাস), ডেটা-প্রসেসিং ফ্রেমওয়ার্ক (উদাহরণস্বরূপ, স্পার্ক), ডাটাবেস (উদাহরণস্বরূপ, মাইএসকিউএল), ক্যাশে, বা ক্লাস্টার স্টোরেজ সিস্টেম (উদাহরণস্বরূপ, Ceph) এর মতো অ্যাপ্লিকেশন-স্তরের পরিষেবা প্রদান করে না। অন্তর্নির্মিত পরিষেবা হিসাবে। এই ধরনের উপাদানগুলি কুবারনেটিস-এ চলতে পারে, এবং/অথবা পোর্টেবল মেকানিজম, যেমন [ওপেন সার্ভিস ব্রোকার](https://openservicebrokerapi.org/) এর মাধ্যমে Kubernetes-এ চলমান অ্যাপ্লিকেশনের মাধ্যমে অ্যাক্সেস করা যেতে পারে। +* মিডলওয়্যার (উদাহরণস্বরূপ, বার্তা বাস), ডেটা-প্রসেসিং ফ্রেমওয়ার্ক (উদাহরণস্বরূপ, স্পার্ক(Spark)), ডাটাবেস (উদাহরণস্বরূপ, মাইএসকিউএল(MySql)), ক্যাশে, বা ক্লাস্টার স্টোরেজ সিস্টেম (উদাহরণস্বরূপ, Ceph) এর মতো অ্যাপ্লিকেশন-স্তরের পরিষেবা প্রদান করে না। অন্তর্নির্মিত পরিষেবা হিসাবে। এই ধরনের উপাদানগুলি কুবারনেটিস-এ চলতে পারে, এবং/অথবা পোর্টেবল মেকানিজম, যেমন [ওপেন সার্ভিস ব্রোকার](https://openservicebrokerapi.org/) এর মাধ্যমে Kubernetes-এ চলমান অ্যাপ্লিকেশনের মাধ্যমে অ্যাক্সেস করা যেতে পারে। * লগিং, পর্যবেক্ষণ, বা সতর্কতা সমাধান নির্দেশ করে না। এটি ধারণার প্রমাণ হিসাবে কিছু ইন্টিগ্রেশন এবং মেট্রিক্স সংগ্রহ ও রপ্তানি করার প্রক্রিয়া প্রদান করে। * কনফিগারেশন ভাষা/সিস্টেম প্রদান করে না বা বাধ্যতামূলক করে না (উদাহরণস্বরূপ, জসননেট)। এটি একটি ঘোষণামূলক API প্রদান করে যা ঘোষণামূলক স্পেসিফিকেশনের নির্বিচারে ফর্ম দ্বারা লক্ষ্যধারন করা যেতে পারে। * কোন ব্যাপক যান্ত্রিক কনফিগারেশন, রক্ষণাবেক্ষণ, ব্যবস্থাপনা, বা স্ব-নিরাময় সিস্টেম প্রদান বা গ্রহণ করে না। @@ -86,7 +86,7 @@ -## {{% heading "এরপর কি" %}} +## {{% heading "whatsnext" %}} * কটাক্ষপাত করুন [Kubernetes Components](/docs/concepts/overview/components/) * প্রস্তুত [Get Started](/docs/setup/)? From 7e5f39cb119898e88336ecb7492757215cd9a7c4 Mon Sep 17 00:00:00 2001 From: MD Ikramul Kayes <67923321+ikramulkayes@users.noreply.github.com> Date: Sat, 7 May 2022 18:53:27 +0600 Subject: [PATCH 0027/1086] updated please check --- .../docs/concepts/overview/what-is-kubernetes.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/content/bn/docs/concepts/overview/what-is-kubernetes.md b/content/bn/docs/concepts/overview/what-is-kubernetes.md index 33d931b244..fb18388798 100644 --- a/content/bn/docs/concepts/overview/what-is-kubernetes.md +++ b/content/bn/docs/concepts/overview/what-is-kubernetes.md @@ -17,9 +17,9 @@ sitemap: -কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, যা ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবা, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে উপলব্ধ। +কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, যা ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস এর পরিষেবা, ব্যবহারযোগ্যতা, এবং সরঞ্জাম ব্যাপকভাবে বিস্তৃত। -কুবারনেটিস নামটি গ্রীক থেকে এসেছে, যার অর্থ হেলমসম্যান বা পাইলট। "K" এবং "s" এর মধ্যে আটটি অক্ষর গণনা করার ফলে একটি সংক্ষিপ্ত রূপ K8s। Google ২০১৪ সালে কুবারনেটিস প্রজেক্টটি উন্মুক্ত করে। কুবারনেটিস [Google-এর ১৫ বছরেরও বেশি অভিজ্ঞতা](/blog/2015/04/borg-predecessor-to-kubernetes/) উৎপাদিত কাজের লোডগুলিকে সর্বোত্তম-প্রজন্মের ধারণাগুলির সাথে একত্রিত করে এবং সম্প্রদায় থেকে অনুশীলন। +কুবারনেটিস নামটি গ্রীক থেকে এসেছে, যার অর্থ হেলমসম্যান বা পাইলট। "K" এবং "s" এর মধ্যে আটটি অক্ষর গণনা করার ফলে একটি সংক্ষিপ্ত রূপ K8s। গুগল ২০১৪ সালে কুবারনেটিস প্রজেক্টটি উন্মুক্ত করেছে। ফলস্বরূপ কুবারনেটিস [গুগল-এর ১৫ বছরেরও বেশি অভিজ্ঞতার](/blog/2015/04/borg-predecessor-to-kubernetes/) মাধ্যমে উৎপাদন কাজ স্কেল পর্যায়ে সেরা ধারণা এবং অনুশীলনের সাথে পরিচালনা করে। ## অতিতে যাই @@ -38,9 +38,9 @@ sitemap: কনটেইনারগুলি জনপ্রিয় হয়ে উঠেছে কারণ তারা অতিরিক্ত সুবিধা প্রদান করে, যেমন: -* এজাইল অ্যাপ্লিকেশন তৈরি এবং স্থাপনা: ভিএম ইমেজ ব্যবহারের তুলনায় কন্টেইনার ইমেজ তৈরির সহজতা এবং দক্ষতা বেশি। +* এজাইল অ্যাপ্লিকেশন তৈরি এবং স্থাপনা: ভিএম ইমেজ(VM Image) ব্যবহারের তুলনায় কন্টেইনার ইমেজ(Container Image) তৈরির সহজতা এবং দক্ষতা বেশি। * ক্রমাগত বিকাশ, একীকরণ এবং স্থাপনা: দ্রুত এবং দক্ষ রোলব্যাকগুলির সাথে নির্ভরযোগ্য এবং ঘন ঘন কন্টেইনার image তৈরি এবং স্থাপনার ব্যবস্থা করে (image অপরিবর্তনীয়তার কারণে). -* ডেভ এবং অপস উদ্বেগের বিচ্ছেদ: স্থাপনার সময় না করে বিল্ড/রিলিজ সময়ে অ্যাপ্লিকেশন কন্টেইনার ইমেজ তৈরি করুন, যার ফলে অবকাঠামো থেকে অ্যাপ্লিকেশনগুলিকে বিচ্ছেদ করা যায়। +* ডেভ(Dev) এবং অপস(Ops) উদ্বেগের বিচ্ছেদ: বিল্ড/রিলিজের সময়ে অ্যাপ্লিকেশন কন্টেইনার ইমেজ তৈরি করে ডিপ্লয়মেন্টের সময়ের তুলনায়, ফলস্বরূপ অ্যাপ্লিকেশনগুলি অবকাঠামো থেকে বিচ্ছিন্ন হয়। * পর্যবেক্ষণযোগ্যতা: শুধুমাত্র OS-স্তরের তথ্য এবং মেট্রিক্সই নয়, প্রয়োগের স্বাস্থ্য এবং অন্যান্য সংকেতও। * ডেভেলপমেন্ট, টেস্টিং এবং প্রোডাকশন জুড়ে পরিবেশগত সামঞ্জস্য: একটি ল্যাপটপে ক্লাউডের মতোই চলে। * ক্লাউড এবং ওএস ডিস্ট্রিবিউশন পোর্টেবিলিটি: Ubuntu, RHEL, CoreOS, on-premises, on major public clouds, এবং অন্য কোথাও চলে। @@ -51,7 +51,7 @@ sitemap: ## আপনার কেন কুবারনেটিস দরকার এবং এটি কী করতে পারে {#why-you-need-kubernetes-and-what-can-it-do} -কন্টেইনারগুলি আপনার অ্যাপ্লিকেশনগুলিকে বান্ডিল এবং চালানোর একটি ভাল উপায়৷ একটি উৎপাদন পরিবেশে, আপনাকে সেই কন্টেইনারগুলিকে পরিচালনা করতে হবে যা অ্যাপ্লিকেশনগুলি চালায় এবং নিশ্চিত করতে হবে যে কোনও ডাউনটাইম নেই৷ উদাহরণস্বরূপ, যদি একটি ধারক ডাউন হয়ে যায়, তখন অন্য ধারকের শুরু হতে হবে। এই আচরণ একটি সিস্টেম দ্বারা পরিচালিত হলে এটি সহজ হবে না? +কন্টেইনারসমূহ অ্যাপ্লিকেশন একত্রকরণ এবং চালানোর একটি ভালো উপায়৷ একটি উৎপাদন পরিবেশে, কন্টেইনারসমূহ এমন ভাবে পরিচালনা করতে হবে যা অ্যাপ্লিকেশনগুলি চালানোর সময় যেন কোনো ডাউনটাইম না থাকে তা নিশ্চিত করবে। উদাহরণস্বরূপ, যদি একটি কন্টেইনার ডাউন হয়, তাহলে অন্য কন্টেইনার কে সেই মুহূর্তে চালু হতে হবে। আর এই অবস্থাটি একটি সিস্টেম দ্বারা পরিচালিত হলে এটি কি সহজ হবে না? এভাবেই কুবারনেটিস কাজে আসে। কুবারনেটিস আপনাকে সিস্টেমগুলিকে স্থিতিস্থাপকভাবে চালানোর জন্য একটি কাঠামো প্রদান করে। এটি আপনার অ্যাপ্লিকেশনের জন্য স্কেলিং এবং ফেইলওভারের যত্ন নেয়, স্থাপনার নিদর্শন প্রদান করে এবং আরও অনেক কিছু করে। উদাহরণস্বরূপ, কুবারনেটিস সহজেই আপনার সিস্টেমের জন্য একটি ক্যানারি স্থাপনা পরিচালনা করতে পারে। @@ -88,5 +88,5 @@ sitemap: ## {{% heading "whatsnext" %}} -* কটাক্ষপাত করুন [Kubernetes Components](/docs/concepts/overview/components/) -* প্রস্তুত [Get Started](/docs/setup/)? +* এটি দেখুন [কুবারনেটিস উপাদান](/docs/concepts/overview/components/) +* প্রস্তুত [এখানে থেকে শুরু করুন ](/docs/setup/)? From 5f993c8e227e7f46024c2c6c4214ce0e3e98aa8f Mon Sep 17 00:00:00 2001 From: Imtiaz1234 <78928464+Imtiaz1234@users.noreply.github.com> Date: Sun, 8 May 2022 05:57:17 +0600 Subject: [PATCH 0028/1086] [bn] Localize `content/bn/docs/tutorials/_index.md` (#32886) * Created _index.md * Delete content/bn/docs/setup directory * Create _index.md * Updated the file --- content/bn/docs/tutorials/_index.md | 63 +++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 content/bn/docs/tutorials/_index.md diff --git a/content/bn/docs/tutorials/_index.md b/content/bn/docs/tutorials/_index.md new file mode 100644 index 0000000000..880744326a --- /dev/null +++ b/content/bn/docs/tutorials/_index.md @@ -0,0 +1,63 @@ +--- +title: টিউটোরিয়াল +main_menu: true +no_list: true +weight: 60 +content_type: ধারণা +--- + + + +কুবারনেটিস ডকুমেন্টেশনের এই বিভাগে টিউটোরিয়াল রয়েছে। +একটি টিউটোরিয়াল দেখায় কিভাবে একটি লক্ষ্য অর্জন করতে হয় যা একটি একক থেকে বড় +[টাস্ক](/docs/tasks/)। সাধারণত একটি টিউটোরিয়ালের বেশ কয়েকটি বিভাগ থাকে যার প্রতিটিরই ধাপের ক্রম রয়েছে। +প্রতিটি টিউটোরিয়ালের মাধ্যমে হাঁটার আগে, আপনি [প্রমিত শব্দকোষ](/docs/reference/glossary/) পৃষ্ঠা বুকমার্ক করতে চাইতে পারেন +পরবর্তী রেফারেন্সের জন্য । + + + +## বেসিক + +* [কুবারনেটিস বেসিক](/docs/tutorials/kubernetes-basics/) হল একটি গভীর ইন্টারেক্টিভ টিউটোরিয়াল যা আপনাকে কুবারনেটিস সিস্টেম বুঝতে এবং কিছু মৌলিক কুবারনেটিস বৈশিষ্ট্যগুলি ব্যবহার করে দেখতে সাহায্য করে। + +* [কুবারনেটিসের ভূমিকা (edX)](https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x#) + +* [হ্যালো মিনিকুব](/docs/tutorials/hello-minikube/) + +## কনফিগারেশন + +* [উদাহরণ: একটি জাভা মাইক্রোসার্ভিস কনফিগার কর](/docs/tutorials/configuration/configure-java-microservice/) + +* [কনফিগার ম্যাপ ব্যবহার করে রেডিস কনফিগার কর](/docs/tutorials/configuration/configure-redis-using-configmap/) + +## স্টেটলেস অ্যাপ্লিকেশন + +* [একটি ক্লাস্টারে একটি অ্যাপ্লিকেশন অ্যাক্সেস করার জন্য একটি বহিরাগত আইপি ঠিকানা প্রকাশ করয ](/docs/tutorials/stateless-application/expose-external-ip-address/) + +* [উদাহরণ: Redis এর সাথে PHP গেস্টবুক অ্যাপ্লিকেশন স্থাপন কর](/docs/tutorials/stateless-application/guestbook/) + +## স্টেটফুল অ্যাপ্লিকেশন + +* [স্টেটফুল সেটের বেসিক](/docs/tutorials/stateful-application/basic-stateful-set/) + +* [উদাহরণ: ওয়ার্ডপ্রেস এবং স্থায়ী ভলিউম সহ MySQL](/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/) + +* [উদাহরণ: স্টেটফুল সেটের সাথে ক্যাসান্দ্রা স্থাপন কর](/docs/tutorials/stateful-application/cassandra/) + +* [জুকিপার চালাই, একটি সিপি ডিস্ট্রিবিউটেড সিস্টেম](/docs/tutorials/stateful-application/zookeeper/) + +## ক্লাস্টার + +* [এপ্আর্মর ](/docs/tutorials/clusters/apparmor/) + +* [সেকোম্প](/docs/tutorials/clusters/seccomp/) + +## সেবা + +* [উৎস আইপি ব্যবহার কর](/docs/tutorials/services/source-ip/) + +## {{% heading "whatsnext" %}} + +আপনি যদি একটি টিউটোরিয়াল লিখতে চান, +[সামগ্রী পৃষ্ঠার ধরন](/docs/contribute/style/page-content-types/) দেখুন +টিউটোরিয়াল পৃষ্ঠার ধরন সম্পর্কে তথ্যের জন্য। From b1d77fbee7a83647cd823887e470b46ea5090255 Mon Sep 17 00:00:00 2001 From: Imtiaz1234 <78928464+Imtiaz1234@users.noreply.github.com> Date: Sun, 8 May 2022 06:05:17 +0600 Subject: [PATCH 0029/1086] [bn] Localize `content/bn/docs/tasks/tools/_index.md` (#32885) * Created _index.md * Delete content/bn/docs/setup directory * Create _index.md * Update _index.md * Updated the index file --- content/bn/docs/tasks/tools/_index.md | 59 +++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 content/bn/docs/tasks/tools/_index.md diff --git a/content/bn/docs/tasks/tools/_index.md b/content/bn/docs/tasks/tools/_index.md new file mode 100644 index 0000000000..c9040fd408 --- /dev/null +++ b/content/bn/docs/tasks/tools/_index.md @@ -0,0 +1,59 @@ +--- +title: "টুল ইনস্টল করুন" +description: আপনার কম্পিউটারে কুবারনেটিস টুল সেট আপ করুন। +weight: 10 +no_list: true +--- + +## kubectl + + +কুবারনেটিস কমান্ড-লাইন টুল, [kubectl](/docs/reference/kubectl/kubectl/) +আপনাকে কুবারনেটিস ক্লাস্টারগুলির বিরুদ্ধে কমান্ড চালাতে অনুমতি দেয় । +আপনি অ্যাপ্লিকেশন স্থাপন করতে, ক্লাস্টার সংস্থান পরিদর্শন ও পরিচালনা করতে এবং লগ দেখতে kubectl ব্যবহার করতে পারেন। +আরও তথ্যের জন্য kubectl অপারেশনগুলির একটি সম্পূর্ণ তালিকা সহ দেখুন +[`kubectl` রেফারেন্স ডকুমেন্টেশন](/docs/reference/kubectl/)। + +kubectl বিভিন্ন লিনাক্স প্ল্যাটফর্ম, macOS এবং Windows এ ইনস্টলযোগ্য। +নীচে আপনার পছন্দের অপারেটিং সিস্টেম খুঁজুন। + +- [লিনাক্সে kubectl ইনস্টল করুন](/docs/tasks/tools/install-kubectl-linux) +- [macOS-এ kubectl ইনস্টল করুন](/docs/tasks/tools/install-kubectl-macos) +- [উইন্ডোজে kubectl ইনস্টল করুন](/docs/tasks/tools/install-kubectl-windows) + +## kind + +[`kind`](https://kind.sigs.k8s.io/docs/) আপনাকে কুবারনেটিস চালাতে দেয় +আপনার স্থানীয় কম্পিউটারে। আপনি +[ডকার](https://docs.docker.com/get-docker/) ইনস্টল এবং কনফিগার করুন। + +এই ধরনের [কুইক শুরু](https://kind.sigs.k8s.io/docs/user/quick-start/) পৃষ্ঠা আপনাকে +কী করতে হবে তা দেখায়। + +বিভিন্ন ধরনের কুইক স্টার্ট গাইড দেখুন + +## minikube + +`kind` এর মতো, [`minikube`](https://minikube.sigs.k8s.io/) একটি টুল যা আপনাকে স্থানীয়ভাবে কুবারনেটিস চালাতে দেয় । +`minikube` আপনার ব্যক্তিগত কম্পিউটারের (উইন্ডোজ, ম্যাকোস এবং লিনাক্স পিসি সহ) উপর একটি একক-নোড কুবারনেটিস ক্লাস্টার চালায় +যাতে আপনি চেষ্টা করে দেখতে পারেন কুবারনেটিস, বা দৈনন্দিন উন্নয়ন কাজের জন্য। + +আপনি অফিসিয়াল নির্দেশিকা [শুরু করুন!](https://minikube.sigs.k8s.io/docs/start/) +অনুসরণ করতে পারেন যদি আপনার ফোকাস হয় টুল ইনস্টল করার উপর। + +minikube শুরু করুন! গাইডটি দেখুন + +একবার আপনার `minikube` কাজ করলে, আপনি এটি [একটি নমুনা অ্যাপ্লিকেশন চালাতে](/docs/tutorials/hello-minikube/) ব্যবহার করতে পারেন । + +## kubeadm + + +আপনি কুবারনেটিস ক্লাস্টার তৈরি এবং পরিচালনা করতে {{< glossary_tooltip term_id="kubeadm" text="kubeadm" >}} টুল ব্যবহার করতে পারেন। +এটি একটি ন্যূনতম কার্যকর, নিরাপদ ক্লাস্টার আপ এবং ব্যবহারকারী বান্ধব উপায়ে চালানোর জন্য প্রয়োজনীয় ক্রিয়া সম্পাদন করে। + +[kubeadm ইনস্টল করা](/docs/setup/production-environment/tools/kubeadm/install-kubeadm/) আপনাকে দেখায় কিভাবে kubeadm ইনস্টল করতে হয়। +একবার ইনস্টল হয়ে গেলে আপনি এটিকে [একটি ক্লাস্টার তৈরি করতে](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/) ব্যবহার করতে পারেন। + + + +kubeadm ইনস্টল গাইড দেখুন From e5f9f5fa09b91a26692ebe8f98a5124d2e49d961 Mon Sep 17 00:00:00 2001 From: Saber382 <78927820+Saber382@users.noreply.github.com> Date: Sun, 8 May 2022 09:10:26 +0600 Subject: [PATCH 0030/1086] Updated the index file --- content/bn/docs/contribute/_index.md | 71 ++++++++++++++-------------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/content/bn/docs/contribute/_index.md b/content/bn/docs/contribute/_index.md index 5acd1f13ba..25f20b1a3a 100644 --- a/content/bn/docs/contribute/_index.md +++ b/content/bn/docs/contribute/_index.md @@ -13,32 +13,32 @@ card: -*Kubernetes নতুন এবং অভিজ্ঞ সকল অবদানকারীদের থেকে উন্নতিকে (immprovements) স্বাগত জানায়!* +*কুবারনেটিস নতুন এবং অভিজ্ঞ সকল অবদানকারীদের থেকে উন্নতিকে স্বাগত জানায়!* {{< note >}} -সাধারণভাবে Kubernetes অবদান সম্পর্কে আরও জানতে, দেখুন -[অবদানকারীদের জন্য ডকুমেন্টেশন](https://www.kubernetes.dev/docs/)। +সাধারণভাবে কুবারনেটিস অবদান সম্পর্কে আরও জানতে, দেখুন +[অবদানকারীদের জন্য ডকুমেন্টেশন](https://www.কুবারনেটিস.dev/docs/)। {{< /note >}} -এই ওয়েবসাইটটি [Kubernetes SIG ডক্স](/docs/contribute/#get-involved-with-sig-docs) দ্বারা রক্ষণাবেক্ষণ করা হয় । +এই ওয়েবসাইটটি [কুবারনেটিস SIG Docs](/docs/contribute/#get-involved-with-sig-docs) দ্বারা রক্ষণাবেক্ষণ করা হয় । -Kubernetes ডকুমেন্টেশন অবদানকারী: +কুবারনেটিস ডকুমেন্টেশন অবদানকারী: - বিদ্যমান সামগ্রী উন্নত করুন - নতুন কন্টেন্ট তৈরি করুন - ডকুমেন্টেশন অনুবাদ করুন -- Kubernetes রিলিজ চক্রের ডকুমেন্টেশন অংশগুলি পরিচালনা এবং প্রকাশ করুন +- কুবারনেটিস রিলিজ চক্রের ডকুমেন্টেশন অংশগুলি পরিচালনা এবং প্রকাশ করুন ## শুরু করুন -যে কেউ ডকুমেন্টেশন সম্পর্কে একটি সমস্যা (issue) খুলতে পারে, বা পরিবর্তন করতে পারে - পুল রিকুয়েস্ট(Pull Request) দেয়ার মাধ্যমে -[`kubernetes/website` GitHub সংগ্রহস্থল](https://github.com/kubernetes/website) এ। আপনাকে +যে কেউ ডকুমেন্টেশন সম্পর্কে একটি সমস্যা (issue) খুলতে পারে, বা পরিবর্তন করতে পারে + পুল রিকুয়েস্ট(pull request) দেয়ার মাধ্যমে +[`কুবারনেটিস/website` GitHub Repository](https://github.com/kubernetes/website) এ। আপনাকে [git](https://git-scm.com/) এবং [GitHub](https://lab.github.com/) সম্পর্কে জানতে হবে -কুবারনেটস সম্প্রদায়ে কার্যকরভাবে কাজ করার জন্য। +কুবারনেটিস সম্প্রদায়ে কার্যকরভাবে কাজ করার জন্য। ডকুমেন্টেশনের সাথে জড়িত হতে: @@ -50,7 +50,7 @@ Kubernetes ডকুমেন্টেশন অবদানকারী: [পরিবর্তন পর্যালোচনা করার](/docs/contribute/review/reviewing-prs/)। - + {{< mermaid >}} @@ -60,7 +60,7 @@ direction TB U[ ] -.- Q[বিষয়বস্তু উন্নত] --- N[সামগ্রী তৈরি করুন] N --- O[Translate docs] -O --- P[ডক্সের অংশগুলি পরিচালনা/প্রকাশ করুন
K8s রিলিজ চক্রের থেকে] +O --- P[Docs এর অংশগুলি পরিচালনা/প্রকাশ করুন
K8s রিলিজ চক্রের থেকে] end @@ -75,9 +75,9 @@ end subgraph first[Sign up] direction TB S[ ] -.- - B[স্বাক্ষর করুন CNCF
অবদানকারী
লাইসেন্স চুক্তি] --- C[সিগ-ডক্সে যোগ দিন
Slack channel] - C --- V[kubernetes-sig-docs-এ যোগ দিন
মেইলিং তালিকা] - V --- M[সাপ্তাহিকভাবে যোগদান করুন
সিগ-ডক্স কল
অথবা slack বৈঠক] + B[স্বাক্ষর করুন CNCF
অবদানকারী
লাইসেন্স চুক্তি] --- C[সিগ-Docs এ যোগ দিন
Slack channel] + C --- V[কুবারনেটিস-sig-docs-এ যোগ দিন
মেইলিং তালিকা] + V --- M[সাপ্তাহিকভাবে যোগদান করুন
সিগ-Docs কল
অথবা slack বৈঠকে] end A([fa:fa-user নতুন
অবদানকারী]) --> first @@ -95,12 +95,12 @@ class first,second,third white {{}} ***চিত্র - একজন নতুন অবদানকারীর জন্য শুরু করা*** -উপরের চিত্রটি নতুন অবদানকারীদের জন্য একটি রোডম্যাপের রূপরেখা দেয়৷ আপনি `Sign up` এবং `Review` এর জন্য কিছু বা সমস্ত ধাপ অনুসরণ করতে পারেন। এখন আপনি 'Open PR'-এর অধীনে তালিকাভুক্ত কিছু সহ আপনার অবদানের উদ্দেশ্যগুলি অর্জনকারী PR খুলতে প্রস্তুত। আবার,আমরা প্রশ্ন সবসময় স্বাগত জানাই! +উপরের চিত্রটি নতুন অবদানকারীদের জন্য একটি রোডম্যাপের রূপরেখা দেয়৷ আপনি `Sign up` এবং `Review` এর জন্য কিছু বা সমস্ত ধাপ অনুসরণ করতে পারেন। এখন আপনি 'Open PR'-এর অধীনে তালিকাভুক্ত কিছু সহ আপনার অবদানের উদ্দেশ্যগুলি অর্জনকারী PR খুলতে প্রস্তুত। আবার,আমরা প্রশ্নকে সবসময় স্বাগত জানাই! -কিছু কাজের জন্য Kubernetes সংস্থায় আরও বিশ্বাস এবং আরও অ্যাক্সেসের প্রয়োজন। -এ সম্পর্কে আরো বিস্তারিত জানার জন্য [SIG ডক্সে অংশগ্রহণ করে](/docs/contribute/participate/) দেখুন +কিছু কাজের জন্য কুবারনেটিস সংস্থায় আরও বিশ্বাস এবং আরও অ্যাক্সেসের প্রয়োজন। +এ সম্পর্কে আরো বিস্তারিত জানার জন্য [SIG Docs এ অংশগ্রহণ করে](/docs/contribute/participate/) দেখুন ভূমিকা এবং অনুমতি সমুহ। @@ -110,7 +110,7 @@ class first,second,third white আপনি আগে থেকে বেশ কয়েকটি ধাপ পর্যালোচনা করে আপনার প্রথম অবদানের জন্য প্রস্তুত করতে পারেন। নীচের চিত্রটি ধাপগুলিকে রূপরেখা দেয় এবং বিশদগুলি অনুসরণ করে৷ - + {{< mermaid >}} @@ -119,7 +119,7 @@ flowchart LR direction TB S[ ] -.- G[অন্যদের থেকে পুল রিকোয়েস্ট পর্যালোচনা করুন
K8s সদস্যদের মধ্য থেকে] --> - A[K8s/website চেক করুন
সমস্যা তালিকার জন্য
ভাল প্রথম পুল রিকোয়েস্ট (good first PRs)] --> B[একটি পুল রিকোয়েস্ট খুলুন!!] + A[K8s/website চেক করুন
সমস্যা তালিকার জন্য
ভাল good first PRs] --> B[একটি পুল রিকোয়েস্ট খুলুন!!] end subgraph first[প্রস্তাবিত প্রস্তুতি] direction TB @@ -142,15 +142,16 @@ 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) সম্পর্কে আরও জানুন। -- অন্য Kubernetes সম্প্রদায়ের সদস্যসদের থেকে +- অন্য কুবারনেটিস সম্প্রদায়ের সদস্যসদের থেকে সঠিকতা এবং ভাষার জন্য [পুলের অনুরোধ পর্যালোচনা করুন](/docs/contribute/review/reviewing-prs/) -- Kubernetes [content](/docs/contribute/style/content-guide/) এবং [শৈলী নির্দেশিকা](/docs/contribute/style/style-guide/) পড়ুন +- কুবারনেটিস [content](/docs/contribute/style/content-guide/) এবং [শৈলী নির্দেশিকা](/docs/contribute/style/style-guide/) পড়ুন যাতে আপনি অবহিত মন্তব্য করতে পারেন। - [পৃষ্ঠা বিষয়বস্তুর প্রকার](/docs/contribute/style/page-content-types/) সম্পর্কে জানুন এবং [Hugo শর্ট কোডস](/docs/contribute/style/hugo-shortcodes/)। @@ -159,29 +160,29 @@ class first,second white - ভান্ডার থেকে শিখুন [একটি স্থানীয় ক্লোন (local clone) থেকে কাজ করা](/docs/contribute/new-content/open-a-pr/#fork-the-repo) । - ডকুমেনটেশন কর [একটি রিলিজের বৈশিষ্ট্য](/docs/contribute/new-content/new-features/)। -- [SIG ডক্স](/docs/contribute/participate/) এ অংশগ্রহণ করুন এবং একজন +- [SIG Docs](/docs/contribute/participate/) এ অংশগ্রহণ করুন এবং একজন [সদস্য বা পর্যালোচক](/docs/contribute/participate/roles-and-responsibilities/) হন। - একটি [স্থানীয়করণ](/docs/contribute/localization/) দিয়ে শুরু করুন বা সাহায্য করুন। -## SIG ডক্সের সাথে জড়িত হন +## SIG Docs এর সাথে জড়িত হন -[SIG ডক্স](/docs/contribute/participate/) হল অবদানকারীদের গ্রুপ যারা -Kubernetes ডকুমেন্টেশন এবং ওয়েবসাইট প্রকাশ এবং বজায় রাখে । কুবারনেটিস অবদানকারীদের জন্য একটি দুর্দান্ত উপায় -SIG ডক্সের সাথে জড়িত (বৈশিষ্ট্য +[SIG Docs](/docs/contribute/participate/) হল অবদানকারীদের গ্রুপ যারা +কুবারনেটিস ডকুমেন্টেশন এবং ওয়েবসাইট প্রকাশ এবং বজায় রাখে । কুবারনেটিস অবদানকারীদের জন্য একটি দুর্দান্ত উপায় +SIG Docs এর সাথে জড়িত (বৈশিষ্ট্য উন্নয়ন বা অন্যথায়) হওয়া যা কুবারনেটিস প্রকল্পে একটি বড় প্রভাব ফেলতে পারে। -SIG ডক্স বিভিন্ন পদ্ধতির সাথে যোগাযোগ করে: +SIG Docs বিভিন্ন পদ্ধতির সাথে যোগাযোগ করে: -- [Kubernetes Slack উদাহরণ হিসেবে `#sig-docs`-এ যোগ দিন](https://slack.k8s.io/)। নিশ্চিত করবে +- [কুবারনেটিস Slack উদাহরণ হিসেবে `#sig-docs`-এ যোগ দিন](https://slack.k8s.io/)। নিশ্চিত করবে তোমার পরিচিতি যাতে দেয়া হয় । -- [`kubernetes-sig-docs` মেইলিং তালিকায় যোগ দিন](https://groups.google.com/forum/#!forum/kubernetes-sig-docs), +- [`কুবারনেটিস-sig-docs` মেইলিং তালিকায় যোগ দিন](https://groups.google.com/forum/#!forum/kubernetes-sig-docs), যেখানে বিস্তৃত আলোচনা সঞ্চালিত হয় এবং অফিসিয়াল সিদ্ধান্ত রেকর্ড করা হয়। -- [সাপ্তাহিক SIG ডক্স ভিডিও মিটিং](https://github.com/kubernetes/community/tree/master/sig-docs) যোগ দিন। মিটিংগুলি সর্বদা `#sig-docs`-এ ঘোষণা করা হয় এবং [Kubernetes সম্প্রদায় মিটিং ক্যালেন্ডার](https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com&ctz=America/-এ যোগ করা হয়) লস এঞ্জেলেস). আপনাকে [জুম ক্লায়েন্ট](https://zoom.us/download) ডাউনলোড করতে হবে বা ফোন ব্যবহার করে ডায়াল করতে হবে। -- সেই সপ্তাহগুলিতে যখন ব্যক্তিগত জুম ভিডিও মিটিং হয় না তখন SIG ডক্স অ্যাসিঙ্ক স্ল্যাক স্ট্যান্ডআপ মিটিংয়ে যোগ দিন। সভাগুলি সর্বদা `#sig-docs`-এ ঘোষণা করা হয়। আপনি মিটিংয়ের ঘোষণার 24 ঘন্টা পর্যন্ত থ্রেডের যেকোনো একটিতে অবদান রাখতে পারেন। +- [সাপ্তাহিক 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 ঘন্টা পর্যন্ত থ্রেডের যেকোনো একটিতে অবদান রাখতে পারেন। ## অবদান রাখার অন্যান্য উপায় -- [Kubernetes কমিউনিটি সাইট](/community/) দেখুন। টুইটার বা স্ট্যাক ওভারফ্লোতে অংশগ্রহণ করুন, স্থানীয় কুবারনেট মিটআপ এবং ইভেন্ট এবং আরও অনেক কিছু সম্পর্কে জানুন। -- Kubernetes ফিচার ডেভেলপমেন্টের সাথে যুক্ত হতে [কন্ট্রিবিউটর চিটশীট](https://www.kubernetes.dev/docs/contributor-cheatsheet/) পড়ুন। -- [Kubernetes Contributors](https://www.kubernetes.dev/) এবং [অতিরিক্ত অবদানকারী সংস্থান](https://www.kubernetes.dev/resources/) সম্পর্কে আরও জানতে অবদানকারীর সাইটে যান। +- [কুবারনেটিস কমিউনিটি সাইট](/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/) জমা দিন। From 70e1ac866e67ed6e5c217bb1e4c7db20aad6f8a3 Mon Sep 17 00:00:00 2001 From: Imtiaz1234 <78928464+Imtiaz1234@users.noreply.github.com> Date: Sun, 8 May 2022 09:19:19 +0600 Subject: [PATCH 0031/1086] Update the index file --- content/bn/docs/contribute/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/contribute/_index.md b/content/bn/docs/contribute/_index.md index 25f20b1a3a..1b3b2909fc 100644 --- a/content/bn/docs/contribute/_index.md +++ b/content/bn/docs/contribute/_index.md @@ -1,6 +1,6 @@ --- content_type: ধারণা -title: অবদান রাখো K8s ডকুমেনটেশন +title: অবদান রাখো K8s ডকুমেনটেশনে linktitle: অবদান main_menu: true no_list: true From e82d01b4ed2db6b9d3759f466e6c33441473ff44 Mon Sep 17 00:00:00 2001 From: MD Ikramul Kayes <67923321+ikramulkayes@users.noreply.github.com> Date: Sun, 8 May 2022 13:55:37 +0600 Subject: [PATCH 0032/1086] updated --- content/bn/docs/concepts/overview/what-is-kubernetes.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/bn/docs/concepts/overview/what-is-kubernetes.md b/content/bn/docs/concepts/overview/what-is-kubernetes.md index fb18388798..79955bbacf 100644 --- a/content/bn/docs/concepts/overview/what-is-kubernetes.md +++ b/content/bn/docs/concepts/overview/what-is-kubernetes.md @@ -70,7 +70,7 @@ sitemap: * **গোপন এবং কনফিগারেশন ব্যবস্থাপনা** কুবারনেটিস আপনাকে পাসওয়ার্ড, OAuth টোকেন এবং SSH কীগুলির মতো সংবেদনশীল তথ্য সংরক্ষণ এবং পরিচালনা করতে দেয়। আপনি আপনার কন্টেইনারের চিত্রগুলি পুনর্নির্মাণ না করে এবং আপনার স্ট্যাক কনফিগারেশনে গোপনীয়তা প্রকাশ না করেই গোপনীয়তা এবং অ্যাপ্লিকেশন কনফিগারেশন স্থাপন এবং আপডেট করতে পারেন। -## কুবারনেটিস কি না +## কুবারনেটিস কি নয় কুবারনেটিস একটি ঐতিহ্যগত, সর্ব-অন্তর্ভুক্ত PaaS (পরিষেবা হিসাবে প্ল্যাটফর্ম) সিস্টেম নয়। যেহেতু Kubernetes হার্ডওয়্যার স্তরের পরিবর্তে কন্টেইনার স্তরে কাজ করে, তাই এটি PaaS অফারগুলির জন্য সাধারণভাবে কিছু প্রযোজ্য বৈশিষ্ট্য প্রদান করে, যেমন স্থাপনা, স্কেলিং, লোড ব্যালেন্সিং, এবং ব্যবহারকারীদের তাদের লগিং, পর্যবেক্ষণ এবং সতর্কতা সমাধানগুলিকে একীভূত করতে দেয়৷ যাইহোক, কুবারনেটিস একচেটিয়া নয়, এবং এই ডিফল্ট সমাধান ঐচ্ছিক এবং প্লাগযোগ্য। কুবারনেটিস বিকাশকারী প্ল্যাটফর্ম তৈরির জন্য বিল্ডিং ব্লক সরবরাহ করে, কিন্তু যেখানে এটি গুরুত্বপূর্ণ সেখানে ব্যবহারকারীর পছন্দ এবং নমনীয়তা সংরক্ষণ করে। @@ -88,5 +88,5 @@ sitemap: ## {{% heading "whatsnext" %}} -* এটি দেখুন [কুবারনেটিস উপাদান](/docs/concepts/overview/components/) -* প্রস্তুত [এখানে থেকে শুরু করুন ](/docs/setup/)? +* [কুবারনেটিস উপাদানটি] দেখুন(/docs/concepts/overview/components/) +* [শুরু করতে] প্রস্তুত আপনি?(/docs/setup/)? From 49fac2085507805e1062e1aeffcd808e2bf24468 Mon Sep 17 00:00:00 2001 From: Umme Abira Azmary <95493187+Mouly22@users.noreply.github.com> Date: Mon, 9 May 2022 18:48:55 +0600 Subject: [PATCH 0033/1086] Create _index.html --- content/bn/_index.html | 61 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 content/bn/_index.html diff --git a/content/bn/_index.html b/content/bn/_index.html new file mode 100644 index 0000000000..53c72b3842 --- /dev/null +++ b/content/bn/_index.html @@ -0,0 +1,61 @@ +--- +title: "প্রোডাকশন-গ্রেড কন্টেইনার অর্কেস্ট্রেশন" +abstract: "স্বয়ংক্রিয় ধারক স্থাপনা, স্কেলিং এবং ব্যবস্থাপনা" +cid: home +sitemap: + priority: 1.0 +--- + +{{< blocks/section id="oceanNodes" >}} +{{% blocks/feature image="flower" %}} +[কুবারনেটিস]({{< relref "/docs/concepts/overview/what-is-kubernetes" >}}), K8s নামেও পরিচিত, কনটেইনারাইজড অ্যাপ্লিকেশনের স্বয়ংক্রিয় স্থাপনা, স্কেলিং এবং পরিচালনার জন্য একটি ওপেন-সোর্স সিস্টেম। + +এটি কন্টেইনারগুলিকে গোষ্ঠীভুক্ত করে যা সহজ ব্যবস্থাপনা এবং আবিষ্কারের জন্য লজিক্যাল ইউনিটে একটি অ্যাপ্লিকেশন তৈরি করে। কুবারনেটিস [Google-এ উৎপাদন কাজের লোড চালানোর 15 বছরের অভিজ্ঞতার](http://queue.acm.org/detail.cfm?id=2898444) দ্বারা উৎপাদন কাজ সর্বোত্তম-জাত ধারণা এবং অনুশীলনের মাধ্যমে পরিচালনা করে। +{{% /blocks/feature %}} + +{{% blocks/feature image="scalable" %}} +#### বিশ্বব্যাপী স্কেল ক্ষমতা + +Google সপ্তাহে বিলিয়ন কন্টেইনার চালানোর জন্য যে নীতিতে ডিজাইন প্রয়োগ করে, সেই একই নীতিতে কুবারনেটিস ডিজাইন করা হয়, ফলস্বরূপ কুবারনেটিস ব্যবহারকারীরা অপস টিম না বাড়িয়ে স্কেল করতে পারে। + +{{% /blocks/feature %}} + +{{% blocks/feature image="blocks" %}} +#### প্রয়োজন মোতাবেক বিকাশ ঘটানো + +স্থানীয়ভাবে পরীক্ষা করা বা বিশ্বব্যাপী এন্টারপ্রাইজ চালানো, আপনার চাহিদাগুলি যতই জটিল হোক না কেন, কুবারনেটিস আপনার অ্যাপ্লিকেশনগুলিকে ধারাবাহিকভাবে এবং সহজে বিতরণ করার জন্য আপনাকে সাহায্য করে। + +{{% /blocks/feature %}} + +{{% blocks/feature image="suitcase" %}} +#### K8s যেকোনো এপ্লিকেশন এ রান করানো + +কুবারনেটিস হল এমন ওপেন সোর্স যা আপনাকে অন-প্রিমিসেস, হাইব্রিড বা পাবলিক ক্লাউড অবকাঠামোর সুবিধা নেওয়ার স্বাধীনতা দেয়, যাতে আপনি সহজেই কাজের চাপগুলি যেখানে আপনার কাছে গুরুত্বপূর্ণ সেখানে স্থানান্তর করতে পারেন। + +{{% /blocks/feature %}} + +{{< /blocks/section >}} + +{{< blocks/section id="video" background-image="kub_video_banner_homepage" >}} +
+

150+ মাইক্রোসার্ভিস কুবারনেটিসে স্থানান্তরিত করার চ্যালেঞ্জসমূহ

+

Sarah Wells এর মতে, Technical Director for Operations and Reliability, Financial Times

+ +
+
+ 17-20 মে, 2022-এ KubeCon ইউরোপে যোগ দিন +
+
+
+
+ 24-28 অক্টোবর, 2022-এ KubeCon উত্তর আমেরিকাতে যোগ দিন +
+
+ + +
+{{< /blocks/section >}} + +{{< blocks/kubernetes-features >}} + +{{< blocks/case-studies >}} From 3710678a8901a97c614a2088123cb9ef688287e7 Mon Sep 17 00:00:00 2001 From: Umme Abira Azmary <95493187+Mouly22@users.noreply.github.com> Date: Mon, 9 May 2022 19:00:00 +0600 Subject: [PATCH 0034/1086] Create _index.md --- content/bn/releases/_index.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 content/bn/releases/_index.md diff --git a/content/bn/releases/_index.md b/content/bn/releases/_index.md new file mode 100644 index 0000000000..470635ff23 --- /dev/null +++ b/content/bn/releases/_index.md @@ -0,0 +1,28 @@ +--- +linktitle: প্রকাশের ইতিহাস +title: প্রকাশনাসমূহ +type: docs +--- + + + + +কুবারনেটিস প্রজেক্ট সাম্প্রতিক তিনটি পর্যন্ত ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}) ছোট রিলিজের জন্য রিলিজ শাখা বজায় রাখে। কুবারনেটিস 1.19 এবং নতুন ভার্সন আনুমানিক 1 বছরের প্যাচ সমর্থন পায়। কুবারনেটিস 1.18 এবং তার বেশি বয়সীরা প্রায় 9 মাস প্যাচ সমর্থন পেয়েছে। + +কুবারনেটিস সংস্করণ **x.y.z** হিসাবে প্রকাশ করা হয়, +যেখানে **x** হল প্রধান সংস্করণ, **y** হল অপ্রধান সংস্করণ এবং **z** হল প্যাচ সংস্করণ, যা [শব্দার্থিক সংস্করণ](https://semver.org/) পরিভাষা অনুসরণ করে হয়। + +অতিরিক্ত তথ্যসমূহ [version skew policy](/releases/version-skew-policy/) নথিতে সংরক্ষিত রয়েছে। + + + + +## প্রকাশের ইতিহাস + +{{< release-data >}} + +## আসন্ন রিলিজ + +কুবারনেটিস মুক্তিপ্রকাশ এর আসন্ন **{{< skew nextMinorVersion >}}** [সময়সূচী](https://github.com/kubernetes/sig-release/tree/master/releases/release-{{< skew nextMinorVersion >}}) চেক করুন! + +## সহায়ক রিসোর্স From 0c053612b4a5eb6d2e9ae7f319271644e00f3fff Mon Sep 17 00:00:00 2001 From: Imtiaz1234 <78928464+Imtiaz1234@users.noreply.github.com> Date: Mon, 9 May 2022 23:53:18 +0600 Subject: [PATCH 0035/1086] [bn] Localize `content/bn/docs/tasks/_index.md` (#32883) * Created _index.md * Delete content/bn/docs/setup directory * Create _index.md --- content/bn/docs/tasks/_index.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/docs/tasks/_index.md diff --git a/content/bn/docs/tasks/_index.md b/content/bn/docs/tasks/_index.md new file mode 100644 index 0000000000..1b4379b881 --- /dev/null +++ b/content/bn/docs/tasks/_index.md @@ -0,0 +1,14 @@ +--- +title: কাজ +main_menu: true +weight: 50 +content_type: ধারণা +--- + + + +কুবারনেটিস ডকুমেন্টেশনের এই বিভাগে এমন পৃষ্ঠা রয়েছে +যা দেখায় কিভাবে পৃথক কাজ করতে হয়। সাধারণত পদক্ষেপের একটি সংক্ষিপ্ত ক্রম দিয়ে একটি টাস্ক পেজ দেখায় কিভাবে একটি একক জিনিস করতে হয়। + +আপনি যদি একটি টাস্ক পৃষ্ঠা লিখতে চান, দেখুন কীভাবে +[একটি ডকুমেন্টেশন পুল অনুরোধ তৈরি করা](/docs/contribute/new-content/open-a-pr/) যায়। From c05586189e7ac05193d43e905f2fc3698f4cac1a Mon Sep 17 00:00:00 2001 From: Imtiaz1234 <78928464+Imtiaz1234@users.noreply.github.com> Date: Tue, 10 May 2022 00:21:19 +0600 Subject: [PATCH 0036/1086] [bn] Localized `content/bn/docs/setup/_index.md` (#32839) * Created _index.md * Delete content/bn/docs/setup directory * Updated _index.md * Updated the file * Update --- content/bn/docs/setup/_index.md | 61 +++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 content/bn/docs/setup/_index.md diff --git a/content/bn/docs/setup/_index.md b/content/bn/docs/setup/_index.md new file mode 100644 index 0000000000..713b3b8f1e --- /dev/null +++ b/content/bn/docs/setup/_index.md @@ -0,0 +1,61 @@ +--- +title: শুরু করা যাক +main_menu: true +weight: 20 +content_type: concept +no_list: true +card: + name: setup + weight: 20 + anchors: + - anchor: "#লার্নিং পরিবেশ" + title: লার্নিং পরিবেশ + - anchor: "#উৎপাদনের পরিবেশ" + title: উৎপাদনের পরিবেশ +--- + + + +এই বিভাগে কুবারনেটিস সেট আপ এবং চালানোর বিভিন্ন উপায় তালিকাভুক্ত করা হয়েছে। +আপনি যখন কুবারনেটিস ইনস্টল করেন, তখন : রক্ষণাবেক্ষণের সহজতা, নিরাপত্তা, +নিয়ন্ত্রণ, উপলব্ধ সংস্থান, এবং একটি ক্লাস্টার পরিচালনা ও পরিচালনার জন্য প্রয়োজনীয় দক্ষতা এর উপর ভিত্তি করে একটি ইনস্টলেশন প্রকার চয়ন করুন । + +আপনি একটি কুবারনেটিস ক্লাস্টার স্থাপন করতে [কুবারনেটিস ডাউনলোড](/releases/download/) করতে পারেন +একটি স্থানীয় মেশিনে, ক্লাউডে বা আপনার নিজস্ব ডেটাসেন্টারের জন্য। + +আপনি যদি নিজে একটি কুবারনেটিস ক্লাস্টার পরিচালনা করতে না চান, তাহলে আপনি একটি পরিচালিত পরিষেবা বাছাই করতে পারেন, যার মধ্যে রয়েছে +[প্রত্যয়িত প্ল্যাটফর্ম](/docs/setup/production-environment/turnkey-solutions/)। +এছাড়াও ক্লাউড এবং বিস্তৃত পরিসর জুড়ে অন্যান্য প্রমিত এবং বেয়ার মেটাল পরিবেশ সম্বলিত কাস্টম সমাধান রয়েছে । + + + +## লার্নিং পরিবেশ + +আপনি যদি কুবারনেটিস শিখছেন, কুবারনেটিস সম্প্রদায় দ্বারা সমর্থিত টুল ব্যবহার করে, বাস্তুতন্ত্রের সরঞ্জাম ব্যবহার করে স্থানীয় মেশিনে কুবারনেটিস ক্লাস্টার সেট আপ করার জন্য তাহলে [ইনস্টল টুলস](/docs/tasks/tools/) দেখুন। + +## উৎপাদনের পরিবেশ + +একটি [উৎপাদন পরিবেশ](/docs/setup/production-environment/) এর সমাধান মূল্যায়ন করার সময় বিবেচনা করুন কোন দিকগুলো +একটি কুবারনেটিস ক্লাস্টার (বা _abstractions_) পরিচালনা করে আপনি নিজের মাধ্যমেে পরিচালনা করতে চান এবং কোন দিকগুলো আপনি +একটি প্রদানকারীর কাছে হস্তান্তর করতে পছন্দ করেন। + + +নিজের থেকে একটি ক্লাস্টার পরিচালনার জন্য কুবারনেটিস হতে +আনুষ্ঠানিকভাবে সমর্থিত টুল [kubeadm](/docs/setup/production-environment/tools/kubeadm/) রয়েছে। + + + +## {{% heading "whatsnext" %}} + +- [কুবারনেটিস ডাউনলোড করুন](/releases/download/) +- `kubectl` সহ ডাউনলোড এবং [ইনস্টল](/docs/tasks/tools/) করুন +- আপনার নতুন ক্লাস্টারের জন্য একটি [কন্টেইনার রানটাইম](/docs/setup/production-environment/container-runtimes/) নির্বাচন করুন +- ক্লাস্টার সেটআপের জন্য [সর্বোত্তম অনুশীলন](/docs/setup/best-practices/) সম্পর্কে জানুন + +কুবারনেটিস এর {{< glossary_tooltip term_id="control-plane" text="control plan" >}} এর জন্য ডিজাইন করা হয়েছে যা +লিনাক্সে চালান। আপনার ক্লাস্টারের মধ্যে আপনি লিনাক্স বা উইন্ডোজ সহ অন্যান্য অপারেটিং সিস্টেম অ্যাপ্লিকেশন চালাতে পারেন । +- [উইন্ডোজ নোডের সাথে ক্লাস্টার সেট আপ](/docs/setup/production-environment/windows/) শিখুন + + + + From c7370d48bb7d76871f8b44f61deee480fdeb4b95 Mon Sep 17 00:00:00 2001 From: Imtiaz1234 <78928464+Imtiaz1234@users.noreply.github.com> Date: Tue, 10 May 2022 00:34:16 +0600 Subject: [PATCH 0037/1086] Update the index file --- content/bn/docs/home/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/home/_index.md b/content/bn/docs/home/_index.md index 886331c712..84aafd236b 100644 --- a/content/bn/docs/home/_index.md +++ b/content/bn/docs/home/_index.md @@ -37,7 +37,7 @@ cards: button_path: "/docs/setup" - name: tasks title: "কুবারনেটিস কীভাবে ব্যবহার করবেন তা শিখুন" - description: "সাধারণ কাজগুলি দেখুন এবং পদক্ষেপগুলির একটি সংক্ষিপ্ত ক্রম ব্যবহার করে কীভাবে সেগুলি সম্পাদন করা যায়।" + description: "সাধারণ কাজগুলি এবং পদক্ষেপগুলির একটি সংক্ষিপ্ত ক্রম ব্যবহার করে কীভাবে সেগুলি সম্পাদন করা যায় দেখুন ।" button: "কাজ দেখুন" button_path: "/docs/tasks" - name: training @@ -52,7 +52,7 @@ cards: button_path: /docs/reference - name: contribute title: ডক্সে অবদান রাখুন - description: যে কেউ অবদান রাখতে পারেন, আপনি প্রকল্পে নতুন হোন বা আপনি দীর্ঘ সময় ধরে আছেন। + description: আপনি প্রকল্পে নতুন হোন বা আপনি দীর্ঘ সময় ধরে আছেন, যে কেউ অবদান রাখতে পারেন । button: ডক্সে অবদান রাখুন button_path: /docs/contribute - name: release-notes From 441ebaaa60f30c085b46b2a027023fd240d19a77 Mon Sep 17 00:00:00 2001 From: shahriyar101931 <78928278+shahriyar101931@users.noreply.github.com> Date: Wed, 29 Jun 2022 11:56:57 +0600 Subject: [PATCH 0038/1086] Created the supported docs file --- content/bn/docs/home/supported-doc-versions.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/bn/docs/home/supported-doc-versions.md diff --git a/content/bn/docs/home/supported-doc-versions.md b/content/bn/docs/home/supported-doc-versions.md new file mode 100644 index 0000000000..cb2daeda68 --- /dev/null +++ b/content/bn/docs/home/supported-doc-versions.md @@ -0,0 +1,17 @@ +--- +title: উপলব্ধ ডকুমেন্টেশন সংস্করণ +content_type: custom +layout: supported-versions +card: + name: about + weight: 10 + title: উপলব্ধ ডকুমেন্টেশন সংস্করণ +--- + + +এই ওয়েবসাইটটিতে কুবারনেটিসের আগের চারটি সংস্করণ এবং বর্তমান সংস্করণের জন্য ডকুমেন্টেশন রয়েছে। + + +কুবারনেটিসের ( Kubernetes) সংস্করণটি বর্তমানে সমর্থিত (supported) কিনা তা থেকে কুবারনেটিসের ( Kubernetes) সংস্করণের জন্য ডকুমেন্টেশনের প্রাপ্যতা আলাদা রয়েছে । + +কুবারনেটিসের এর কোন সংস্করণ আনুষ্ঠানিকভাবে সমর্থিত, এবং কতদিনের জন্য তা সম্বন্ধে জানতে [Support period](/releases/patch-releases/#support-period) পড়ুন। From 67d5cd7600771e51f7ea117ab52ef9a7101f58a1 Mon Sep 17 00:00:00 2001 From: shahriyar101931 <78928278+shahriyar101931@users.noreply.github.com> Date: Wed, 29 Jun 2022 12:03:49 +0600 Subject: [PATCH 0039/1086] Update supported-doc-versions.md --- content/bn/docs/home/supported-doc-versions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/home/supported-doc-versions.md b/content/bn/docs/home/supported-doc-versions.md index cb2daeda68..6c6463f80e 100644 --- a/content/bn/docs/home/supported-doc-versions.md +++ b/content/bn/docs/home/supported-doc-versions.md @@ -1,11 +1,11 @@ --- -title: উপলব্ধ ডকুমেন্টেশন সংস্করণ +title: উপলব্ধ ডকুমেন্টেশনের সংস্করণ content_type: custom layout: supported-versions card: name: about weight: 10 - title: উপলব্ধ ডকুমেন্টেশন সংস্করণ + title: উপলব্ধ ডকুমেন্টেশনের সংস্করণ --- From 79d1d49797aec04c76f68e792c941b6b346c7eff Mon Sep 17 00:00:00 2001 From: shahriyar101931 <78928278+shahriyar101931@users.noreply.github.com> Date: Wed, 29 Jun 2022 12:04:24 +0600 Subject: [PATCH 0040/1086] Update supported-doc-versions.md --- content/bn/docs/home/supported-doc-versions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/home/supported-doc-versions.md b/content/bn/docs/home/supported-doc-versions.md index 6c6463f80e..902de5f864 100644 --- a/content/bn/docs/home/supported-doc-versions.md +++ b/content/bn/docs/home/supported-doc-versions.md @@ -12,6 +12,6 @@ card: এই ওয়েবসাইটটিতে কুবারনেটিসের আগের চারটি সংস্করণ এবং বর্তমান সংস্করণের জন্য ডকুমেন্টেশন রয়েছে। -কুবারনেটিসের ( Kubernetes) সংস্করণটি বর্তমানে সমর্থিত (supported) কিনা তা থেকে কুবারনেটিসের ( Kubernetes) সংস্করণের জন্য ডকুমেন্টেশনের প্রাপ্যতা আলাদা রয়েছে । +কুবারনেটিসের ( Kubernetes) সংস্করণটি বর্তমানে সমর্থিত (supported) কিনা তা থেকে কুবারনেটিসের (Kubernetes) সংস্করণের জন্য ডকুমেন্টেশনের প্রাপ্যতা আলাদা রয়েছে । কুবারনেটিসের এর কোন সংস্করণ আনুষ্ঠানিকভাবে সমর্থিত, এবং কতদিনের জন্য তা সম্বন্ধে জানতে [Support period](/releases/patch-releases/#support-period) পড়ুন। From c3e1be3c5e33095f4e81d0844905f4c7e65568f9 Mon Sep 17 00:00:00 2001 From: Md Shahriyar Al Mustakim Mitul Date: Wed, 29 Jun 2022 12:08:46 +0600 Subject: [PATCH 0041/1086] Revert "[bn] Localize content/bn/docs/home/supported-doc-versions.md" --- content/bn/docs/home/supported-doc-versions.md | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 content/bn/docs/home/supported-doc-versions.md diff --git a/content/bn/docs/home/supported-doc-versions.md b/content/bn/docs/home/supported-doc-versions.md deleted file mode 100644 index 902de5f864..0000000000 --- a/content/bn/docs/home/supported-doc-versions.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: উপলব্ধ ডকুমেন্টেশনের সংস্করণ -content_type: custom -layout: supported-versions -card: - name: about - weight: 10 - title: উপলব্ধ ডকুমেন্টেশনের সংস্করণ ---- - - -এই ওয়েবসাইটটিতে কুবারনেটিসের আগের চারটি সংস্করণ এবং বর্তমান সংস্করণের জন্য ডকুমেন্টেশন রয়েছে। - - -কুবারনেটিসের ( Kubernetes) সংস্করণটি বর্তমানে সমর্থিত (supported) কিনা তা থেকে কুবারনেটিসের (Kubernetes) সংস্করণের জন্য ডকুমেন্টেশনের প্রাপ্যতা আলাদা রয়েছে । - -কুবারনেটিসের এর কোন সংস্করণ আনুষ্ঠানিকভাবে সমর্থিত, এবং কতদিনের জন্য তা সম্বন্ধে জানতে [Support period](/releases/patch-releases/#support-period) পড়ুন। From 391fc9092a401fe25ffa54366792cbd8c27c8722 Mon Sep 17 00:00:00 2001 From: shahriyar101931 <78928278+shahriyar101931@users.noreply.github.com> Date: Wed, 29 Jun 2022 12:22:05 +0600 Subject: [PATCH 0042/1086] Created the supported docs file (#34693) --- content/bn/docs/home/supported-doc-versions.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/bn/docs/home/supported-doc-versions.md diff --git a/content/bn/docs/home/supported-doc-versions.md b/content/bn/docs/home/supported-doc-versions.md new file mode 100644 index 0000000000..902de5f864 --- /dev/null +++ b/content/bn/docs/home/supported-doc-versions.md @@ -0,0 +1,17 @@ +--- +title: উপলব্ধ ডকুমেন্টেশনের সংস্করণ +content_type: custom +layout: supported-versions +card: + name: about + weight: 10 + title: উপলব্ধ ডকুমেন্টেশনের সংস্করণ +--- + + +এই ওয়েবসাইটটিতে কুবারনেটিসের আগের চারটি সংস্করণ এবং বর্তমান সংস্করণের জন্য ডকুমেন্টেশন রয়েছে। + + +কুবারনেটিসের ( Kubernetes) সংস্করণটি বর্তমানে সমর্থিত (supported) কিনা তা থেকে কুবারনেটিসের (Kubernetes) সংস্করণের জন্য ডকুমেন্টেশনের প্রাপ্যতা আলাদা রয়েছে । + +কুবারনেটিসের এর কোন সংস্করণ আনুষ্ঠানিকভাবে সমর্থিত, এবং কতদিনের জন্য তা সম্বন্ধে জানতে [Support period](/releases/patch-releases/#support-period) পড়ুন। From d436341e76c8c8ad678bd3ff64665e1b16972da2 Mon Sep 17 00:00:00 2001 From: Tanmay Sarkar <84321236+sarkartanmay393@users.noreply.github.com> Date: Sun, 14 Aug 2022 22:00:13 +0530 Subject: [PATCH 0043/1086] Localize content/bn/docs/tutorials/hello-minikube.md (#34934) * New Add : hello-minikube Totorial. Signed-off-by: Tanmay Sarkar <84321236+sarkartanmay393@users.noreply.github.com> * Applied mentor's suggestions. Signed-off-by: Tanmay Sarkar <84321236+sarkartanmay393@users.noreply.github.com> * Some more suggestions added. Signed-off-by: Tanmay Sarkar <84321236+sarkartanmay393@users.noreply.github.com> Signed-off-by: Tanmay Sarkar <84321236+sarkartanmay393@users.noreply.github.com> --- content/bn/docs/tutorials/hello-minikube.md | 288 ++++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 content/bn/docs/tutorials/hello-minikube.md diff --git a/content/bn/docs/tutorials/hello-minikube.md b/content/bn/docs/tutorials/hello-minikube.md new file mode 100644 index 0000000000..cdce7d1a03 --- /dev/null +++ b/content/bn/docs/tutorials/hello-minikube.md @@ -0,0 +1,288 @@ + --- +title: হ্যালো Minikube (Hello Minikube) +content_type: tutorial +weight: 5 +menu: + main: + title: "Get Started" + weight: 10 + post: > +

কাজ শুরু করতে প্রস্তুত? একটি সাধারণ কুবারনেটিস ক্লাস্টার তৈরি করুন যা একটি নমুনা অ্যাপ চালায় ।

+ +card: + name: tutorials + weight: 10 +--- + + + +এই টিউটোরিয়ালে দেখবো কিভাবে একটি অ্যাপ্লিকেশনকে মিনিকিউব ও কাটাকোডা ব্যবহার করে কুবারনেটিস ক্লাস্টারে চালানো যাবে। + +{{< note >}} +ইন্সটল করার জন্য +[minikube স্টার্ট](https://minikube.sigs.k8s.io/docs/start/) এর নির্দেশনা দেখো। +{{< /note >}} + +## {{% heading "objectives" %}} + +* মিনিকিউবে একটি সরল অ্যাপ্লিকেশন স্থাপন করুন। +* অ্যাপ্লিকেশনটিকে চালান। +* অ্যাপ্লিকেশন লগ (log) দেখুন। + +## {{% heading "prerequisites" %}} + +এই টিউটোরিয়ালটি একটি কন্টেইনার ইমেজ প্রদান করে যা NGINX ব্যবহার করে সমস্ত অনুরোধে সাড়া দেয়। + + + +## একটি মিনিকিউব ক্লাস্টার তৈরি করা। + +1. ক্লিক করুন **Launch Terminal** এ + + {{< kat-button >}} + +{{< note >}} +মিনিকুব স্থানীয়ভাবে ইনস্টল করা থাকলে, `minikube start` চালান। `minikube dashboard` কমান্ড কার্যকর করার আগে, একটি নতুন টার্মিনাল খুলুন, সেই টার্মিনালে `minikube dashboard` কমান্ডটি চালান এবং মূল টার্মিনালে ফিরে যান। +{{< /note >}} + +2. একটি ব্রাউজারে কুবারনেটিস ড্যাশবোর্ড খুলুন: + + ```shell + minikube dashboard + ``` + +3. Katacoda পরিবেশ (Katacoda Environment): টার্মিনাল প্যানেলের শীর্ষে প্লাস ক্লিক করুন, তারপরে ক্লিক করুন **Select port to view on Host 1** । + +4. Katacoda পরিবেশ (Katacoda Environment): `30000` লিখুন এবং **Display Port** এ ক্লিক করুন। + +{{< note >}} +আপনি যখন `minikube dashboard` কমান্ড ইস্যু করেন, তখন ড্যাশবোর্ড অ্যাড-অন এবং প্রক্সি সক্রিয় হয় এবং প্রক্সিতে সংযোগ করার জন্য একটি ডিফল্ট ওয়েব ব্রাউজার উইন্ডো খোলে। +আপনি ড্যাশবোর্ড থেকে কুবারনেটিস সংস্থান তৈরি করতে পারেন যেমন স্থাপনা বা পরিষেবা। + +আপনি যদি `root` এনভায়রনমেন্টে কমান্ড নির্বাহ করছেন, তাহলে [URL ব্যবহার করে ড্যাশবোর্ড অ্যাক্সেস করা] (#open-dashboard-with-url) পড়ুন। + +ডিফল্টরূপে, ড্যাশবোর্ড শুধুমাত্র কুবারনেটিস অভ্যন্তরীণ ভার্চুয়াল নেটওয়ার্ক থেকে অ্যাক্সেসযোগ্য। + +`dashboard` কমান্ড কুবারনেটিস ভার্চুয়াল নেটওয়ার্কের বাইরে থেকে ড্যাশবোর্ড অ্যাক্সেস করার জন্য একটি অস্থায়ী প্রক্সি তৈরি করে। + +আপনি `Ctrl+C` টিপে প্রক্সি থেকে প্রস্থান করতে পারেন। +কমান্ডটি শেষ হওয়ার পরে, ড্যাশবোর্ডটি কুবারনেটিস ক্লাস্টারে চলতে থাকে। +আপনি আবার `dashboard` কমান্ড চালিয়ে ড্যাশবোর্ড অ্যাক্সেস করার জন্য আরেকটি প্রক্সি তৈরি করতে পারেন। +{{< /note >}} + +## URL ব্যবহার করে ড্যাশবোর্ড খুলুন + +আপনি যদি ওয়েব ব্রাউজারটি স্বয়ংক্রিয়ভাবে খুলতে না চান তবে আপনি `--url` ফ্ল্যাগ দিয়ে নিম্নলিখিত কমান্ডটি কার্যকর করে ড্যাশবোর্ড অ্যাক্সেস URL মুদ্রণ করতে পারেন : + +```shell +minikube dashboard --url +``` + +## ডিপ্লয়মেন্ট (Deployment) তৈরি করুন + +কুবারনেটিস [পডস](/bn/docs/concepts/workloads/pods/) নেটওয়ার্কিং উদ্দেশ্যে এক বা একাধিক পাত্রের একটি গ্রুপ একসাথে গোষ্ঠীবদ্ধ করে। +এই টিউটোরিয়ালের পডটিতে (pod) শুধুমাত্র একটি পাত্র রয়েছে। কুবারনেটিস +[Deployment](/bn/docs/concepts/workloads/controllers/deployment/) হলো পডের +একটি স্বাস্থ্য পরীক্ষা করে এবং পডের ধারকটি বন্ধ হয়ে গেলে পুনরায় চালু করে। পড তৈরি এবং স্কেলিং পরিচালনা করার উপায় হিসাবে স্থাপনের সুপারিশ করা হয়। + +1. পড পরিচালনা ও স্থাপনা তৈরি করতে `kubectl create` কমান্ডটি চালান। এই পডগুলি প্রদত্ত Docker ইমেজ এর উপর ভিত্তি করে কন্টেইনার চালায়। + + ```shell + kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4 + ``` + +2. ডিপ্লয়মেন্টটি দেখুন: + + ```shell + kubectl get deployments + ``` + + অনুরূপ আউটপুট দেখবেন: + + ``` + NAME READY UP-TO-DATE AVAILABLE AGE + hello-node 1/1 1 1 1m + ``` + +3. পডটি দেখুন: + + ```shell + kubectl get pods + ``` + + অনুরূপ আউটপুট দেখবেন: + + ``` + NAME READY STATUS RESTARTS AGE + hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m + ``` + +4. ক্লাস্টার ইভেন্ট দেখুন: + + ```shell + kubectl get events + ``` + +5. `kubectl` এর কনফিগারেশন দেখুন: + + ```shell + kubectl config view + ``` + +{{< note >}} +`kubectl` কমান্ড সম্পর্কে আরও তথ্যের জন্য, দেখুন [kubectl overview](/docs/reference/kubectl/). +{{< /note >}} + +## সার্ভিস (Service) তৈরি করুন + +সাধারণত, পড শুধুমাত্র কুবারনেটিস ক্লাস্টারের অভ্যন্তরীণ আইপি (Internal IP) ঠিকানা দ্বারা অ্যাক্সেসযোগ্য। কুবারনেটিস ভার্চুয়াল নেটওয়ার্কের বাইরে থেকে 'hello-node' কন্টেইনারকে অ্যাক্সেসযোগ্য করতে, আপনাকে কুবারনেটিস সার্ভিস হিসাবে পডটিকে প্রকাশ করতে হবে। + +1. সর্বজনীন ইন্টারনেটে (Public Internet) পডটি প্রকাশ করুন `kubectl expose` কমান্ড ব্যবহার করে: + + ```shell + kubectl expose deployment hello-node --type=LoadBalancer --port=8080 + ``` + + `--type=LoadBalancer` ফ্ল্যগটি নির্দেশ করে যে আপনি ক্লাস্টারের বাইরে আপনার পরিষেবা প্রকাশ করতে চান। + `k8s.gcr.io/echoserver` কনটেইনারের ভিতরের অ্যাপ্লিকেশন কোড শুধুমাত্র TCP port 8080 থেকেই শোনা হয়। আপনি যদি একটি ভিন্ন পোর্ট প্রকাশ করতে `kubectl expose` ব্যবহার করেন, তাহলে ক্লায়েন্টরা সেই অন্য পোর্টের সাথে সংযোগ করতে পারবে না। + +2. তৈরি করা সার্ভিসটি দেখুন: + + ```shell + kubectl get services + ``` + + অনুরূপ আউটপুট দেখবেন: + + ``` + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + hello-node LoadBalancer 10.108.144.78 8080:30369/TCP 21s + kubernetes ClusterIP 10.96.0.1 443/TCP 23m + ``` + + ক্লাউড প্রদানকারীরা (Cloud Providers) যারা লোড ব্যালেন্সার (Load Balancer) সমর্থন করে, তাতে একটি External IP Address ব্যবস্থা করা হয়, সার্ভিসটি অ্যাক্সেস করার জন্য। + মিনিকিউব-এ, `LoadBalancer` প্রকারটি `minikube service` কমান্ডের মাধ্যমে পরিষেবাটিকে অ্যাক্সেসযোগ্য করে তোলে। + +3. নিম্নলিখিত কমান্ড চালান: + + ```shell + minikube service hello-node + ``` + +4. Katacoda পরিবেশ (Katacoda Environment): টার্মিনাল প্যানেলের শীর্ষে প্লাস ক্লিক করুন, তারপরে ক্লিক করুন **Select port to view on Host 1** + +5. শুধুমাত্র Katacoda পরিবেশ (Katacoda Environment): সার্ভিস আউটপুটে `8080` এর বিপরীতে প্রদর্শিত ৫-সংখ্যার পোর্ট নম্বরটি নোট করুন। এই পোর্ট নম্বরটি এলোমেলোভাবে তৈরি করা হয়েছে এবং এটি আপনার জন্য আলাদা হতে পারে। পোর্ট নম্বর টেক্সট বক্সে আপনার নম্বর টাইপ করুন, তারপর ডিসপ্ল পোর্টে (default port) ক্লিক করুন। আগের উদাহরণটি ব্যবহার করে, আপনি `30369` টাইপ করবেন। + + এটি একটি ব্রাউজার উইন্ডো খোলে যা আপনার অ্যাপটি পরিবেশন করে এবং অ্যাপের প্রতিক্রিয়া দেখায়। + +## অ্যাডন সক্রিয় করুন (Addons) + +মিনিকিউব টুলটিতে অন্তর্নির্মিত অ্যাডনগুলির (Internal addons) একটি সেট রয়েছে যা স্থানীয় কুবারনেটিস পরিবেশে এনেবেল (enable), ডিজেবল (disable) এবং ওপেন (open) করা যেতে পারে। + +1. বর্তমানে সমর্থিত অ্যাডনগুলির তালিকা: + + ```shell + minikube addons list + ``` + + অনুরূপ আউটপুট দেখবেন: + + ``` + addon-manager: enabled + dashboard: enabled + default-storageclass: enabled + efk: disabled + freshpod: disabled + gvisor: disabled + helm-tiller: disabled + ingress: disabled + ingress-dns: disabled + logviewer: disabled + metrics-server: disabled + nvidia-driver-installer: disabled + nvidia-gpu-device-plugin: disabled + registry: disabled + registry-creds: disabled + storage-provisioner: enabled + storage-provisioner-gluster: disabled + ``` + +2. একটি অ্যাডন এনেবেল (enable) করুন, উদাহরণস্বরূপ `metrics-server`: + + ```shell + minikube addons enable metrics-server + ``` + + অনুরূপ আউটপুট দেখবেন: + + ``` + The 'metrics-server' addon is enabled + ``` + +3. আপনার তৈরি করা পড এবং সার্ভিস দেখুন: + + ```shell + kubectl get pod,svc -n kube-system + ``` + + অনুরূপ আউটপুট দেখবেন: + + ``` + NAME READY STATUS RESTARTS AGE + pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m + pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m + pod/metrics-server-67fb648c5 1/1 Running 0 26s + pod/etcd-minikube 1/1 Running 0 34m + pod/influxdb-grafana-b29w8 2/2 Running 0 26s + pod/kube-addon-manager-minikube 1/1 Running 0 34m + pod/kube-apiserver-minikube 1/1 Running 0 34m + pod/kube-controller-manager-minikube 1/1 Running 0 34m + pod/kube-proxy-rnlps 1/1 Running 0 34m + pod/kube-scheduler-minikube 1/1 Running 0 34m + pod/storage-provisioner 1/1 Running 0 34m + + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + service/metrics-server ClusterIP 10.96.241.45 80/TCP 26s + service/kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP 34m + service/monitoring-grafana NodePort 10.99.24.54 80:30002/TCP 26s + service/monitoring-influxdb ClusterIP 10.111.169.94 8083/TCP,8086/TCP 26s + ``` + +4. ডিজেবল (disable) করুন `metrics-server`: + + ```shell + minikube addons disable metrics-server + ``` + + অনুরূপ আউটপুট দেখবেন: + + ``` + metrics-server was successfully disabled + ``` + +## পরিষ্কার করুন (Clean up) + +এখন আপনি আপনার ক্লাস্টারে তৈরি রিসোর্সগুলি পরিষ্কার করতে পারেন: + +```shell +kubectl delete service hello-node +kubectl delete deployment hello-node +``` + +ঐচ্ছিকভাবে, মিনিকিউব ভার্চুয়াল মেশিন (Minikube Virtual Machine) বন্ধ করুন: + +```shell +minikube stop +``` + +ঐচ্ছিকভাবে, মিনিকিউব ভার্চুয়াল মেশিন (Minikube Virtual Machine) মুছুন ফেলুন: + +```shell +minikube delete +``` + +## {{% heading "whatsnext" %}} + +* [Deployment objects](/docs/concepts/workloads/controllers/deployment/) এর ব্যাপারে আরো জানুন। +* [Deploying applications](/docs/tasks/run-application/run-stateless-application-deployment/) এর ব্যাপারে আরো জানুন। +* [Service objects](/docs/concepts/services-networking/service/) এর ব্যাপারে আরো জানুন। From fc2f0d02cdacc4d780ae90cd9565975e5fa4ce6d Mon Sep 17 00:00:00 2001 From: Abdullah Ibne Hanif Arean <70502574+AbdullahArean@users.noreply.github.com> Date: Thu, 18 Aug 2022 23:50:22 +0600 Subject: [PATCH 0044/1086] [bn] Localized content/bn/docs/tutorials/kubernetes-basics/create-cluster/_index.md (#36065) * Localized content/bn/docs/tutorials/kubernetes-basics/create-cluster/_index.md Signed-off-by: AbdullahArean <2019-917-795@student.cse.du.ac.bd> * Update content/bn/docs/tutorials/kubernetes-basics/create-cluster/_index.md Co-authored-by: Md Shahriyar Al Mustakim Mitul Signed-off-by: AbdullahArean <2019-917-795@student.cse.du.ac.bd> Co-authored-by: Md Shahriyar Al Mustakim Mitul --- .../tutorials/kubernetes-basics/create-cluster/_index.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/create-cluster/_index.md diff --git a/content/bn/docs/tutorials/kubernetes-basics/create-cluster/_index.md b/content/bn/docs/tutorials/kubernetes-basics/create-cluster/_index.md new file mode 100644 index 0000000000..f064c9eea8 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/create-cluster/_index.md @@ -0,0 +1,6 @@ +--- +title: ক্লাস্টার তৈরি করুন +weight: 10 +--- + +কুবারনেটিস সম্পর্কে জানুন {{< glossary_tooltip text="ক্লাস্টার" term_id="cluster" length="all" >}} এবং মিনিকিউব দিয়ে সহজ ক্লাস্টার তৈরি করুন। \ No newline at end of file From 6df4accd01107bcb17fcc05839a41cb18bed858a Mon Sep 17 00:00:00 2001 From: Pratik Dey <56970651+PratikDey@users.noreply.github.com> Date: Sat, 10 Sep 2022 20:55:23 +0530 Subject: [PATCH 0045/1086] added _index.md file in best pratices folder (#36722) --- content/bn/docs/setup/best-practices/_index.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/setup/best-practices/_index.md diff --git a/content/bn/docs/setup/best-practices/_index.md b/content/bn/docs/setup/best-practices/_index.md new file mode 100644 index 0000000000..2a07325ea3 --- /dev/null +++ b/content/bn/docs/setup/best-practices/_index.md @@ -0,0 +1,4 @@ +--- +title: সেরা অনুশীলন +weight: 40 +--- From 2c8fc369554d639560cec898501a6b43fdbb4d98 Mon Sep 17 00:00:00 2001 From: Pratik Dey <56970651+PratikDey@users.noreply.github.com> Date: Thu, 27 Oct 2022 12:26:32 +0530 Subject: [PATCH 0046/1086] Localizes ``content/bn/docs/reference/_index.md`` (#36753) * added _index.md file in best pratices folder * Localized `content/bn/docs/reference/_index.md` * Localized `content/bn/docs/reference/_index.md` * Localized `content/bn/docs/reference/_index.md` * Localized `content/bn/docs/reference/_index.md` --- content/bn/docs/reference/_index.md | 85 +++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 content/bn/docs/reference/_index.md diff --git a/content/bn/docs/reference/_index.md b/content/bn/docs/reference/_index.md new file mode 100644 index 0000000000..ec38ddc9c2 --- /dev/null +++ b/content/bn/docs/reference/_index.md @@ -0,0 +1,85 @@ +--- +title: Reference (রেফারেন্স) +linkTitle: "রেফারেন্স" +main_menu: true +weight: 70 +content_type: ধারণা +no_list: true +--- + + + +কুবারনেটিস ডকুমেন্টেশনের এই বিভাগে রেফারেন্স রয়েছে। + + + +## এপিআই রেফারেন্স + +- [শব্দকোষ](/docs/reference/glossary/) - কুবারনেটিস পরিভাষার একটি ব্যাপক, প্রমিত তালিকা + +- [কুবারনেটিস এপিআই রেফারেন্স](/docs/reference/kubernetes-api/) +- [কুবারনেটিস জন্য এক-পৃষ্ঠা এপিআই রেফারেন্স {{< param "version" >}}](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/) +- [কুবারনেটিস এপিআই-এর ব্যবহার](/docs/reference/using-api/) - কুবারনেটিস এপিআই-এর পরিদর্শন +- [এপিআই প্রবেশাধিকার নিয়ন্ত্রণ](/docs/reference/access-authn-authz/) কুবারনেটিস কীভাবে এপিআই অ্যাক্সেস নিয়ন্ত্রণ করে তার বিশদ বিবরণ +- [সুপরিচিত লেবেল, টীকা এবং কলঙ্ক](/docs/reference/labels-annotations-taints/) + +## অধিকারীরূপে সমর্থিত ক্লায়েন্ট লাইব্রেরি + +একটি প্রোগ্রামিং ভাষা থেকে কুবারনেটিস এপিআই কল করতে, আপনি ব্যবহার করতে পারেন +[ক্লায়েন্ট লাইব্রেরি](/docs/reference/using-api/client-libraries/). অধিকারীরূপে সমর্থিত ক্লায়েন্ট লাইব্রেরিগুলি: + +- [কুবারনেটিস Go ক্লায়েন্ট লাইব্রেরি](https://github.com/kubernetes/client-go/) +- [কুবারনেটিস Python ক্লায়েন্ট লাইব্রেরি](https://github.com/kubernetes-client/python) +- [কুবারনেটিস Java ক্লায়েন্ট লাইব্রেরি](https://github.com/kubernetes-client/java) +- [কুবারনেটিস JavaScript ক্লায়েন্ট লাইব্রেরি](https://github.com/kubernetes-client/javascript) +- [কুবারনেটিস C# ক্লায়েন্ট লাইব্রেরি](https://github.com/kubernetes-client/csharp) +- [কুবারনেটিস Haskell ক্লায়েন্ট লাইব্রেরি](https://github.com/kubernetes-client/haskell) + +## সিএলআই + +- [kubectl](/docs/reference/kubectl/) - কমান্ড চালানো এবং কুবারনেটিস ক্লাস্টার পরিচালনার জন্য প্রধান CLI টুল। + - [JSONPath](/docs/reference/kubectl/jsonpath/) - সিনট্যাক্স গাইড [JSONPath expressions](https://goessner.net/articles/JsonPath/) kubectl এর সাথে ব্যবহারের জন্য । +- [কিউবএডিএম](/docs/reference/setup-tools/kubeadm/) - CLI টুল যা সহজে একটি নিরাপদ কুবারনেটিস ক্লাস্টার সরবরাহ করতে পারে। + +## উপাদান + +- [কিউবলেট](/docs/reference/command-line-tools-reference/kubelet/) - প্রাথমিক এজেন্ট যা প্রতিটি নোডে চলে। কিউবলেটটি পডস্পেকসের একটি সেট নেয় এবং নিশ্চিত করে যে বর্ণিত পাত্রগুলি চলমান এবং স্বাস্থ্যকর। +- [কিউব-এপিআইসার্ভার](/docs/reference/command-line-tools-reference/kube-apiserver/) - রেস্ট এপিআই যা এপিআই অবজেক্ট যেমন পড, সার্ভিস, রেপ্লিকেশন কন্ট্রোলারের জন্য ডেটা যাচাই করে এবং কনফিগার করে। +- [কিউব-কন্ট্রোলার-ম্যানেজার](/docs/reference/command-line-tools-reference/kube-controller-manager/) - ডেমন যা কুবারনেটসের সাথে পাঠানো মূল নিয়ন্ত্রণ লুপগুলিকে এম্বেড করে। +- [কিউব-প্রক্সি](/docs/reference/command-line-tools-reference/kube-proxy/) - ব্যাক-এন্ডের একটি সেট জুড়ে সাধারণ TCP/UDP স্ট্রিম ফরওয়ার্ডিং বা রাউন্ড-রবিন TCP/UDP ফরওয়ার্ডিং করতে পারে। +- [কিউব-শিডিউলার](/docs/reference/command-line-tools-reference/kube-scheduler/) - শিডিউলার যে প্রাপ্যতা, কর্মক্ষমতা, এবং ক্ষমতা পরিচালনা করে। + + - [শিডিউলার নীতি](/docs/reference/scheduling/policies) + - [শিডিউলার প্রোফাইল](/docs/reference/scheduling/config#profiles) + +- [পোর্ট এবং প্রোটোকলের](/docs/reference/ports-and-protocols/) তালিকা যা + কন্ট্রোল প্লেন এবং কর্মী নোডগুলিতে খুলে রাখা উচিত + +## কনফিগ এপিআইগুলি + +এই বিভাগটি "অপ্রকাশিত" এপিআই-এর জন্য ডকুমেন্টেশন হোস্ট করে যা কুবারনেটিস উপাদান বা টুল কনফিগার করতে ব্যবহৃত হয়। এই এপিআইগুলির বেশিরভাগই এপিআই-সার্ভার দ্বারা আরামদায়ক উপায়ে প্রকাশ করা হয় না যদিও সেগুলি একটি ব্যবহারকারী বা অপারেটরের জন্য একটি ক্লাস্টার ব্যবহার বা পরিচালনা করার জন্য অপরিহার্য। + +- [কিউব-এপিআইসার্ভার কনফিগারেশন (v1alpha1)](/docs/reference/config-api/apiserver-config.v1alpha1/) +- [কিউব-এপিআইসার্ভার কনফিগারেশন (v1)](/docs/reference/config-api/apiserver-config.v1/) +- [কিউব-এপিআইসার্ভার এনক্রিপশন (v1)](/docs/reference/config-api/apiserver-encryption.v1/) +- [কিউবলেট কনফিগারেশন (v1alpha1)](/docs/reference/config-api/kubelet-config.v1alpha1/) এবং + [কিউবলেট কনফিগারেশন (v1beta1)](/docs/reference/config-api/kubelet-config.v1beta1/) +- [কিউবলেট শংসাপত্র প্রদানকারী (v1alpha1)](/docs/reference/config-api/kubelet-credentialprovider.v1alpha1/) +- [কিউব-শিডিউলার কনফিগারেশন (v1beta2)](/docs/reference/config-api/kube-scheduler-config.v1beta2/) এবং + [কিউব-শিডিউলার কনফিগারেশন (v1beta3)](/docs/reference/config-api/kube-scheduler-config.v1beta3/) +- [কিউব-প্রক্সি কনফিগারেশন (v1alpha1)](/docs/reference/config-api/kube-proxy-config.v1alpha1/) +- [`audit.k8s.io/v1` এপিআই](/docs/reference/config-api/apiserver-audit.v1/) +- [ক্লায়েন্ট প্রমাণীকরণ এপিআই (v1beta1)](/docs/reference/config-api/client-authentication.v1beta1/) এবং + [ক্লায়েন্ট প্রমাণীকরণ এপিআই (v1)](/docs/reference/config-api/client-authentication.v1/) +- [ওয়েবহুক অ্যাডমিশন কনফিগারেশন (v1)](/docs/reference/config-api/apiserver-webhookadmission.v1/) + +## কিউবএডিএম এর জন্য কনফিগার এপিআই + +- [v1beta2](/docs/reference/config-api/kubeadm-config.v1beta2/) +- [v1beta3](/docs/reference/config-api/kubeadm-config.v1beta3/) + +## ডিজাইন ডক্স + +কুবারনেটিস কার্যকারিতার জন্য ডিজাইন ডক্সের একটি সংরক্ষণাগার বলা যায়। ভাল শুরু পয়েন্ট হয় +[কুবারনেটিস স্থাপত্য](https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md) এবং +[কুবারনেটিস ডিজাইন পরিদর্শন](https://git.k8s.io/community/contributors/design-proposals). From ed684c1eefd6e68b0c2dd8c1207e9d828314cfe1 Mon Sep 17 00:00:00 2001 From: Arindam Majumder <109217591+Arindam200@users.noreply.github.com> Date: Fri, 23 Dec 2022 09:57:26 +0530 Subject: [PATCH 0047/1086] [bn] Localized content/bn/includes/task-tutorial-prereqs.md (#38506) * Create task-tutorial-prereqs.md * Update content/bn/includes/task-tutorial-prereqs.md Co-authored-by: Md Shahriyar Al Mustakim Mitul Co-authored-by: Md Shahriyar Al Mustakim Mitul --- content/bn/includes/task-tutorial-prereqs.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/includes/task-tutorial-prereqs.md diff --git a/content/bn/includes/task-tutorial-prereqs.md b/content/bn/includes/task-tutorial-prereqs.md new file mode 100644 index 0000000000..f545a02269 --- /dev/null +++ b/content/bn/includes/task-tutorial-prereqs.md @@ -0,0 +1,4 @@ +আপনার একটি Kubernetes ক্লাস্টার থাকতে হবে এবং আপনার ক্লাস্টারের সাথে যোগাযোগের জন্য 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/) From 9cdf6572346741e53c8f81127a61c321d8007e2b Mon Sep 17 00:00:00 2001 From: Arindam Majumder <109217591+Arindam200@users.noreply.github.com> Date: Sat, 7 Jan 2023 19:41:26 +0530 Subject: [PATCH 0048/1086] [bn] Localize content/bn/docs/tasks/tools/included/_index.md (#38787) * Create task-tutorial-prereqs.md * Update content/bn/includes/task-tutorial-prereqs.md Co-authored-by: Md Shahriyar Al Mustakim Mitul * Create _index.md * Update content/bn/docs/tasks/tools/included/_index.md Co-authored-by: Bishal Das <70086051+bishal7679@users.noreply.github.com> Co-authored-by: Md Shahriyar Al Mustakim Mitul Co-authored-by: Bishal Das <70086051+bishal7679@users.noreply.github.com> --- content/bn/docs/tasks/tools/included/_index.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 content/bn/docs/tasks/tools/included/_index.md diff --git a/content/bn/docs/tasks/tools/included/_index.md b/content/bn/docs/tasks/tools/included/_index.md new file mode 100644 index 0000000000..131e557b8b --- /dev/null +++ b/content/bn/docs/tasks/tools/included/_index.md @@ -0,0 +1,6 @@ +--- +শিরোনাম: "অন্তর্ভুক্ত টুলস" +বিবরণ: "প্রধান kubectl-installs-*.md পেজগুলিতে স্নিপেট গুলি অন্তর্ভুক্ত করতে হবে।" +headless: true +toc_hide: true +--- From 307f62f85ebe59cfa95c8eff800b336964bf1b26 Mon Sep 17 00:00:00 2001 From: nazma1234 <78928674+nazma1234@users.noreply.github.com> Date: Sun, 5 Feb 2023 18:45:45 +0600 Subject: [PATCH 0049/1086] Scale intro file for dev-bn --- .../kubernetes-basics/scale/scale-intro.html | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/scale/scale-intro.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/scale/scale-intro.html b/content/bn/docs/tutorials/kubernetes-basics/scale/scale-intro.html new file mode 100644 index 0000000000..c6cec53079 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/scale/scale-intro.html @@ -0,0 +1,120 @@ +--- +title: আপনার অ্যাপের একাধিক উদাহরণ (instance) চালান +weight: 10 +--- + + + + + + + +
+ +
+ +
+ +
+

উদ্দেশ্য

+
    +
  • kubectl ব্যবহার করে একটি অ্যাপ স্কেল করুন।
  • +
+
+ +
+

একটি অ্যাপ্লিকেশন স্কেলিং

+ +

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

+ +

স্কেলিং একটি স্থাপনার প্রতিলিপি সংখ্যা পরিবর্তন করে সম্পন্ন করা হয়

+ +
+
+
+

সারসংক্ষেপ:

+
    +
  • একটি স্থাপনার স্কেলিং
  • +
+
+
+

+ আপনি শুরু থেকে kubectl create deployment কমান্ডের --replicas প্যারামিটার ব্যবহার করে একাধিক উদাহরণ সহ একটি স্থাপনা তৈরি করতে পারেন

+
+
+
+
+ +
+
+

স্কেলিং এর ধারণা

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

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

+ +

একটি অ্যাপ্লিকেশনের একাধিক দৃষ্টান্ত চালানোর জন্য তাদের সকলে ট্রাফিক বিতরণ করার একটি উপায় প্রয়োজন। পরিষেবাগুলিতে একটি সমন্বিত লোড-ব্যালেন্সার রয়েছে যা একটি উন্মুক্ত স্থাপনার সমস্ত পডগুলিতে নেটওয়ার্ক ট্র্যাফিক বিতরণ করবে। পরিষেবাগুলি কেবলমাত্র উপলভ্য পডগুলিতে ট্র্যাফিক পাঠানো হয়েছে তা নিশ্চিত করার জন্য এন্ডপয়েন্টগুলি ব্যবহার করে ক্রমাগত চলমান পডগুলি পর্যবেক্ষণ করবে।

+ +
+
+
+

একটি স্থাপনায় প্রতিলিপির সংখ্যা পরিবর্তন করে স্কেলিং সম্পন্ন করা হয়।

+
+
+
+ +
+ +
+
+

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

+
+
+
+ + + +
+ +
+ + + From cb940f6c8ed4f1ef57cdbf712a3a5c8703edee9e Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Tue, 28 Feb 2023 03:13:15 +0600 Subject: [PATCH 0050/1086] Create _index.md --- content/bn/docs/tutorials/kubernetes-basics/expose/_index.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/expose/_index.md diff --git a/content/bn/docs/tutorials/kubernetes-basics/expose/_index.md b/content/bn/docs/tutorials/kubernetes-basics/expose/_index.md new file mode 100644 index 0000000000..e23825d3d5 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/expose/_index.md @@ -0,0 +1,4 @@ +--- +শিরোনাম: আপনার অ্যাপটি প্রকাশ্যে প্রকাশ করুন +ওজন: ৪০ +--- From a0e67dcd3597a17d96be1d1c2d0f5bcebdeab85e Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Tue, 28 Feb 2023 10:43:33 +0600 Subject: [PATCH 0051/1086] Update _index.md --- content/bn/docs/tutorials/kubernetes-basics/expose/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/tutorials/kubernetes-basics/expose/_index.md b/content/bn/docs/tutorials/kubernetes-basics/expose/_index.md index e23825d3d5..8e3b0d5079 100644 --- a/content/bn/docs/tutorials/kubernetes-basics/expose/_index.md +++ b/content/bn/docs/tutorials/kubernetes-basics/expose/_index.md @@ -1,4 +1,4 @@ --- -শিরোনাম: আপনার অ্যাপটি প্রকাশ্যে প্রকাশ করুন -ওজন: ৪০ +title: আপনার অ্যাপটি প্রকাশ্যে প্রকাশ করুন +weight: ৪০ --- From e0962459e5fa06c453c4e1de4380124924fddb37 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Tue, 28 Feb 2023 10:52:31 +0600 Subject: [PATCH 0052/1086] Update content/bn/docs/tutorials/kubernetes-basics/expose/_index.md Co-authored-by: Md Shahriyar Al Mustakim Mitul --- content/bn/docs/tutorials/kubernetes-basics/expose/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/tutorials/kubernetes-basics/expose/_index.md b/content/bn/docs/tutorials/kubernetes-basics/expose/_index.md index 8e3b0d5079..8af22bf1b3 100644 --- a/content/bn/docs/tutorials/kubernetes-basics/expose/_index.md +++ b/content/bn/docs/tutorials/kubernetes-basics/expose/_index.md @@ -1,4 +1,4 @@ --- title: আপনার অ্যাপটি প্রকাশ্যে প্রকাশ করুন -weight: ৪০ +weight: 4০ --- From 35a9e220c8dc7c80cd48e55900b24a4d2ff360bc Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Tue, 28 Feb 2023 23:37:16 +0600 Subject: [PATCH 0053/1086] [bn] Localized content/bn/docs/tutorials/kubernetes-basics/update/_index.md (#39713) * Create _index.md * Update _index.md * Update content/bn/docs/tutorials/kubernetes-basics/update/_index.md Co-authored-by: Md Shahriyar Al Mustakim Mitul --------- Co-authored-by: Md Shahriyar Al Mustakim Mitul --- content/bn/docs/tutorials/kubernetes-basics/update/_index.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/update/_index.md diff --git a/content/bn/docs/tutorials/kubernetes-basics/update/_index.md b/content/bn/docs/tutorials/kubernetes-basics/update/_index.md new file mode 100644 index 0000000000..241137e639 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/update/_index.md @@ -0,0 +1,4 @@ +--- +title: আপনার অ্যাপ্লিকেশন আপডেট করুন +weight: 60 +--- From 44b191a49510f4d82962d004c53b8c6890d3c491 Mon Sep 17 00:00:00 2001 From: Abhijeet Basfore <68768410+abhijeet-26@users.noreply.github.com> Date: Wed, 1 Mar 2023 19:39:17 +0530 Subject: [PATCH 0054/1086] [bn] Localisation for deploy-intro (#39325) * Deploy-intro.html file added Signed-off-by: Abhijeet Basfore abhibas14@gmail.com * Update content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update deploy-intro.html Signed-off-by: Abhijeet Basfore abhibas14@gmail.com * Update content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html Co-authored-by: Md Shahriyar Al Mustakim Mitul --------- Signed-off-by: Abhijeet Basfore abhibas14@gmail.com Co-authored-by: Md Shahriyar Al Mustakim Mitul --- .../deploy-app/deploy-intro.html | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html b/content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html new file mode 100644 index 0000000000..9f7806e526 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html @@ -0,0 +1,110 @@ +--- +title: kubectl ব্যবহার করে একটি ডিপ্লোয়মেন্ট তৈরি করা + +weight: 10 +--- + + + + + + + + +
+ +
+ +
+ +
+

উদ্দেশ্য

+
    +
  • অ্যাপ্লিকেশন ডিপ্লোয়মেন্ট সম্পর্কে জানুন ।
  • +
  • kubectl দিয়ে কুবারনেটিসে আপনার প্রথম অ্যাপ স্থাপন করুন।
  • +
+
+ +
+

কুবারনেটিস ডিপ্লোয়মেন্ট

+

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

+ +

একবার অ্যাপ্লিকেশন দৃষ্টান্ত তৈরি হয়ে গেলে, একটি কুবারনেটস ডিপ্লয়মেন্ট কন্ট্রোলার ক্রমাগত সেই দৃষ্টান্তগুলি পর্যবেক্ষণ করে। +যদি কোনো দৃষ্টান্ত (instance) হোস্টিং নোড নিচে চলে যায় বা মুছে ফেলা হয়, তাহলে ডিপ্লয়মেন্ট কন্ট্রোলার ক্লাস্টারের অন্য নোডের দৃষ্টান্তের (instance) সাথে প্রতিস্থাপন করে। এটি মেশিনের ব্যর্থতা বা রক্ষণাবেক্ষণের জন্য একটি স্ব-নিরাময় প্রক্রিয়া সরবরাহ করে।

+ +

একটি প্রাক-অর্কেস্ট্রেশন (pre-orchestration) বিশ্বে, ইনস্টলেশন স্ক্রিপ্টগুলি প্রায়শই অ্যাপ্লিকেশন শুরু করার জন্য ব্যবহার করা হত, কিন্তু তারা মেশিনের ব্যর্থতা থেকে পুনরুদ্ধারের অনুমতি দেয়নি। আপনার অ্যাপ্লিকেশন দৃষ্টান্ত তৈরি করে এবং সেগুলিকে নোড জুড়ে চালিয়ে রেখে, কুবারনেটস ডিপ্লয়মেন্টগুলি অ্যাপ্লিকেশন পরিচালনার জন্য একটি মৌলিকভাবে ভিন্ন পদ্ধতি প্রদান করে।

+ +
+ +
+
+

সারসংক্ষেপ :

+
    +
  • ডিপ্লয়মেন্ট
  • +
  • Kubectl
  • +
+
+
+

+ আপনার আবেদনের দৃষ্টান্ত তৈরি এবং আপডেট করার জন্য একটি ডিপ্লয়মেন্ট দায়ী | +

+
+
+
+
+ +
+
+

কুবারনেটিসে আপনার প্রথম অ্যাপ ডিপ্লোয় করুন

+
+
+ +
+
+

+
+
+
+ +
+
+ +

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

+ +

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

+ + + + +
+
+
+

কুবারনেটিসে মোতায়েন করার জন্য অ্যাপ্লিকেশনগুলিকে সমর্থিত কন্টেইনার পদ্ধতি প্যাকেজ করা দরকার

+
+
+
+ +
+
+

+ আপনার প্রথম স্থাপনার জন্য, আপনি একটি ডকার কন্টেনারে প্যাকেজ করা একটি হ্যালো-নোড অ্যাপ্লিকেশন ব্যবহার করবেন যা সমস্ত অনুরোধগুলিকে প্রতিধ্বনিত করতে NGINX ব্যবহার করে। (যদি আপনি ইতিমধ্যে একটি হ্যালো-নোড অ্যাপ্লিকেশন তৈরি করার এবং একটি কন্টেইনার ব্যবহার করে এটি স্থাপন করার চেষ্টা না করে থাকেন তবে আপনি হ্যালো মিনিকুব টিউটোরিয়াল (Hello Minikube tutorial) থেকে নির্দেশাবলী অনুসরণ করে প্রথমে এটি করতে পারেন)। +

+ +

এখন যেহেতু আপনি জানেন যে ডিপ্লয়মেন্টগুলি কী, আসুন অনলাইন টিউটোরিয়ালটিতে যাই এবং আমাদের প্রথম অ্যাপটি স্থাপন করি!

+
+
+
+ + + +
+ +
+ + + From 22a997d1e61f92eca5153d6477d40de7114e4096 Mon Sep 17 00:00:00 2001 From: Abhijeet Basfore <68768410+abhijeet-26@users.noreply.github.com> Date: Wed, 1 Mar 2023 20:27:17 +0530 Subject: [PATCH 0055/1086] [bn] Localization for explore (#39391) * explore folder added Signed-off-by: Abhijeet Basfore abhibas14@gmail.com * Create explore-interactive.html Signed-off-by: Abhijeet Basfore abhibas14@gmail.com * Update content/bn/docs/tutorials/kubernetes-basics/explore/explore-interactive.html Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tutorials/kubernetes-basics/explore/explore-interactive.html Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tutorials/kubernetes-basics/explore/_index.md Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tutorials/kubernetes-basics/explore/_index.md Co-authored-by: Md Shahriyar Al Mustakim Mitul --------- Signed-off-by: Abhijeet Basfore abhibas14@gmail.com Co-authored-by: Md Shahriyar Al Mustakim Mitul --- .../kubernetes-basics/explore/_index.md | 4 ++ .../explore/explore-interactive.html | 37 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/explore/_index.md create mode 100644 content/bn/docs/tutorials/kubernetes-basics/explore/explore-interactive.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/explore/_index.md b/content/bn/docs/tutorials/kubernetes-basics/explore/_index.md new file mode 100644 index 0000000000..e8c65e55f6 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/explore/_index.md @@ -0,0 +1,4 @@ +--- +title: আপনার অ্যাপ্লিকেশানকে অন্বেষণ করুন +weight: 30 +--- diff --git a/content/bn/docs/tutorials/kubernetes-basics/explore/explore-interactive.html b/content/bn/docs/tutorials/kubernetes-basics/explore/explore-interactive.html new file mode 100644 index 0000000000..6b705a5933 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/explore/explore-interactive.html @@ -0,0 +1,37 @@ +--- +title: ইন্টারেক্টিভ প্রশিক্ষণ - আপনার অ্যাপ্লিকেশানকে অন্বেষণ করুন +weight: 20 +--- + + + + + + + +{{< katacoda-tutorial >}} + + + + + From 93892227134f0124d3159ff8336a4484edc8a85e Mon Sep 17 00:00:00 2001 From: Noor E Jannat Nafia <90461705+noor-e-jannatnafia@users.noreply.github.com> Date: Fri, 3 Mar 2023 19:34:59 +0600 Subject: [PATCH 0056/1086] Localized content/bn/docs/tasks/tools/included/verify-kubectl.md (#39668) * I have created a file in bn of 'content/bn/docs/tasks/tools/included/verify-kubectl.md' * The file is updated. * Updated again. --- .../tasks/tools/included/verify-kubectl.md | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 content/bn/docs/tasks/tools/included/verify-kubectl.md diff --git a/content/bn/docs/tasks/tools/included/verify-kubectl.md b/content/bn/docs/tasks/tools/included/verify-kubectl.md new file mode 100644 index 0000000000..21f617e91a --- /dev/null +++ b/content/bn/docs/tasks/tools/included/verify-kubectl.md @@ -0,0 +1,36 @@ +--- +title: "kubectl ইনস্টল যাচাই করুন" +description: "কিভাবে kubectl যাচাই করবেন।" +headless: true +_build: + list: never + render: never + publishResources: false +--- + +kubectl-এর জন্য একটি কুবারনেটিস ক্লাস্টার খুঁজে পেতে এবং নেটওয়ার্ক পেতে, এটির একটি প্রয়োজন +[kubeconfig ফাইল](/docs/concepts/configuration/organize-cluster-access-kubeconfig/), +আপনি ব্যবহার করে একটি ক্লাস্টার তৈরি করার সময় যা স্বয়ংক্রিয়ভাবে তৈরি হয় +[kube-up.sh](https://github.com/kubernetes/kubernetes/blob/master/cluster/kube-up.sh) +অথবা সফলভাবে একটি Minikube ক্লাস্টার স্থাপন করুন। +ডিফল্টরূপে, kubectl কনফিগারেশন `~/.kube/config` এ অবস্থিত। + +ক্লাস্টার অবস্থা পেয়ে kubectl সঠিকভাবে কনফিগার করা হয়েছে তা পরীক্ষা করুন: + +```shell +kubectl cluster-info +``` +আপনি যদি একটি URL দেখতে পান, তাহলে আপনার ক্লাস্টার অ্যাক্সেস করার জন্য kubectl সঠিকভাবে কনফিগার করা হয়েছে। + +আপনি যদি নিম্নলিখিতগুলির মতো একটি বার্তা দেখতে পান, তাহলে বুঝবেন যে kubectl সঠিকভাবে কনফিগার করা হয়নি বা একটি Kubernetes ক্লাস্টারের সাথে সংযোগ করতে সক্ষম নয়। +``` +সার্ভারের সাথে সংযোগ প্রত্যাখ্যান করা হয়েছিল - আপনি কি সঠিক হোস্ট বা পোর্ট উল্লেখ করেছেন? +``` + +উদাহরণস্বরূপ, আপনি যদি আপনার ল্যাপটপে (স্থানীয়ভাবে) একটি কুবারনেটিস ক্লাস্টার চালাতে চান, তাহলে আপনাকে প্রথমে মিনিকুবের মতো একটি টুল ইনস্টল করতে হবে এবং তারপরে উপরে বর্ণিত কমান্ডগুলি পুনরায় চালাতে হবে। + +যদি kubectl ক্লাস্টার-তথ্য url প্রতিক্রিয়া প্রদান করে কিন্তু আপনি আপনার ক্লাস্টার অ্যাক্সেস করতে না পারেন, এটি সঠিকভাবে কনফিগার করা হয়েছে কিনা তা পরীক্ষা করতে, ব্যবহার করুন: + +```shell +kubectl cluster-info dump +``` From 1875834adbad4f711f8a233e7ea0e203f5ab7554 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Sat, 4 Mar 2023 01:04:00 +0600 Subject: [PATCH 0057/1086] [bn] Localized content/bn/docs/tutorials/kubernetes-basics/expose/expose-interactive.html (#39763) * Create expose-interactive.html * Update content/bn/docs/tutorials/kubernetes-basics/expose/expose-interactive.html Co-authored-by: Md Shahriyar Al Mustakim Mitul --------- Co-authored-by: Md Shahriyar Al Mustakim Mitul --- .../expose/expose-interactive.html | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/expose/expose-interactive.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/expose/expose-interactive.html b/content/bn/docs/tutorials/kubernetes-basics/expose/expose-interactive.html new file mode 100644 index 0000000000..d4ce55d805 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/expose/expose-interactive.html @@ -0,0 +1,35 @@ +--- +title: ইন্টারেক্টিভ টিউটোরিয়াল - আপনার অ্যাপ প্রকাশ করা +weight: 20 +--- + + + + + + + +{{< katacoda-tutorial >}} + +
+ +
+ +
+
+
+
+ + +
+ +
+ + + From 4081937677a4c6d7d313f48a65ead4b4fb19b8ab Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Sat, 4 Mar 2023 01:05:01 +0600 Subject: [PATCH 0058/1086] [bn] Localized content/bn/docs/tutorials/kubernetes-basics/expose/expose-intro.html (#39762) * Create expose-intro.html * Update expose-intro.html * Update content/bn/docs/tutorials/kubernetes-basics/expose/expose-intro.html Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tutorials/kubernetes-basics/expose/expose-intro.html Co-authored-by: Md Shahriyar Al Mustakim Mitul --------- Co-authored-by: Md Shahriyar Al Mustakim Mitul --- .../expose/expose-intro.html | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/expose/expose-intro.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/expose/expose-intro.html b/content/bn/docs/tutorials/kubernetes-basics/expose/expose-intro.html new file mode 100644 index 0000000000..910c80f192 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/expose/expose-intro.html @@ -0,0 +1,100 @@ +--- +title: আপনার অ্যাপ প্রকাশ করতে একটি পরিষেবা ব্যবহার করা +weight: 10 +--- + + + + + + + +
+ +
+ +
+
+

উদ্দেশ্য

+
    +
  • কুবারনের্টিস-এ একটি পরিষেবা সম্পর্কে জানুন
  • +
  • label এবং labelSelector বস্তু একটি পরিষেবার সাথে কিভাবে সম্পর্কিত তা বুঝুন
  • +
  • একটি পরিষেবা ব্যবহার করে কুবারনেটিস ক্লাস্টারের বাইরে একটি অ্যাপ্লিকেশন প্রকাশ করুন
  • +
+
+ +
+

কুবারনেটিস পরিষেবার ওভারভিউ

+ +

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

+ +

কুবারনেটিস-এ একটি পরিষেবা হল একটি বিমূর্ততা যা পডগুলির একটি যৌক্তিক সেট এবং একটি নীতি যার দ্বারা সেগুলি অ্যাক্সেস করা যায় তা সংজ্ঞায়িত করে৷ পরিষেবাগুলি নির্ভরশীল পডগুলির মধ্যে একটি আলগা সংযোগ সক্ষম করে৷ একটি পরিষেবা YAML (পছন্দের) বা JSON ব্যবহার করে সংজ্ঞায়িত করা হয়, যেমন সমস্ত কুবারনেটিস অবজেক্ট। একটি পরিষেবা দ্বারা লক্ষ্য করা পডের সেট সাধারণত একটি লেবেলনির্বাচক দ্বারা নির্ধারিত হয় (বিশেষে একটি নির্বাচক অন্তর্ভুক্ত না করে কেন আপনি একটি পরিষেবা পেতে পারেন তা নীচে দেখুন)।

+ +

যদিও প্রতিটি পডের একটি অনন্য আইপি ঠিকানা রয়েছে, তবে সেই আইপিগুলি পরিষেবা ছাড়া ক্লাস্টারের বাইরে প্রকাশ করা হয় না। পরিষেবাগুলি আপনার অ্যাপ্লিকেশনগুলিকে ট্রাফিক পেতে অনুমতি দেয়৷ ServiceSpec-এ টাইপ উল্লেখ করে পরিষেবাগুলিকে বিভিন্ন উপায়ে প্রকাশ করা যেতে পারে:

+
    +
  • ClusterIP (ডিফল্ট) - ক্লাস্টারে একটি অভ্যন্তরীণ আইপিতে পরিষেবাটি প্রকাশ করে৷ এই ধরনের পরিষেবা শুধুমাত্র ক্লাস্টারের মধ্যে থেকে পৌঁছানো যায়।
  • +
  • NodePort - NAT ব্যবহার করে ক্লাস্টারে প্রতিটি নির্বাচিত নোডের একই পোর্টে পরিষেবাটি প্রকাশ করে। <NodeIP>:<NodePort> ব্যবহার করে ক্লাস্টারের বাইরে থেকে একটি পরিষেবা অ্যাক্সেসযোগ্য করে তোলে। ClusterIP এর সুপারসেট।
  • +
  • লোডব্যালেন্সার - বর্তমান ক্লাউডে একটি বাহ্যিক লোড ব্যালেন্সার তৈরি করে (যদি সমর্থিত হয়) এবং পরিষেবাতে একটি নির্দিষ্ট, বাহ্যিক আইপি বরাদ্দ করে৷ নোডপোর্টের সুপারসেট।
  • +
  • ExternalName - পরিষেবাটিকে externalName ক্ষেত্রের বিষয়বস্তুতে (যেমন foo.bar.example.com) ম্যাপ করে, একটি CNAME এর মান সহ রেকর্ড করুন। কোন ধরনের প্রক্সি সেট আপ করা হয় না. এই ধরনের v1.7 বা উচ্চতর kube-dns, অথবা CoreDNS সংস্করণ 0.0.8 বা উচ্চতর প্রয়োজন।
  • +
+

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

+

অতিরিক্ত, নোট করুন যে পরিষেবাগুলির সাথে কিছু ব্যবহারের ক্ষেত্রে রয়েছে যেগুলির মধ্যে একটি নির্বাচক সংজ্ঞায়িত করা নেই৷ নির্বাচক ছাড়া তৈরি করা একটি পরিষেবা সংশ্লিষ্ট এন্ডপয়েন্ট অবজেক্ট তৈরি করবে না। এটি ব্যবহারকারীদের ম্যানুয়ালি নির্দিষ্ট শেষ পয়েন্টে একটি পরিষেবা ম্যাপ করতে দেয়। কোন নির্বাচক না থাকার আরেকটি সম্ভাবনা হল আপনি কঠোরভাবে type: ExternalName ব্যবহার করছেন।

+
+
+
+

সারাংশ

+
    +
  • বাহ্যিক ট্র্যাফিকের কাছে পডগুলিকে প্রকাশ করা
  • +
  • একাধিক পড জুড়ে ভারসাম্যপূর্ণ ট্রাফিক লোড করুন
  • +
  • লেবেল ব্যবহার করা
  • +
+
+
+

একটি কুবারনেটিস পরিষেবা হল একটি বিমূর্ত স্তর যা পডগুলির একটি যৌক্তিক সেটকে সংজ্ঞায়িত করে এবং সেই পডগুলির জন্য বহিরাগত ট্রাফিক এক্সপোজার, লোড ব্যালেন্সিং এবং পরিষেবা আবিষ্কার সক্ষম করে৷

+
+
+
+
+ +
+
+

পরিষেবা এবং লেবেল

+
+
+ +
+
+

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

+

পরিষেবাগুলি লেবেল এবং নির্বাচকদের ব্যবহার করে পডের একটি সেটের সাথে মেলে, একটি আদিম গ্রুপিং যা কুবারনেটসের বস্তুতে লজিক্যাল অপারেশনের অনুমতি দেয় . লেবেল হল কী/মান জোড়া বস্তুর সাথে সংযুক্ত এবং যেকোনো উপায়ে ব্যবহার করা যেতে পারে:

+
    +
  • উন্নয়ন, পরীক্ষা এবং উৎপাদনের জন্য মনোনীত বস্তু
  • +
  • এম্বেড সংস্করণ ট্যাগ
  • +
  • ট্যাগ ব্যবহার করে একটি বস্তুকে শ্রেণীবদ্ধ করুন
  • +
+
+
+ +
+ +
+
+

+
+
+
+
+
+

লেবেলগুলি তৈরির সময় বা পরে বস্তুর সাথে সংযুক্ত করা যেতে পারে। এগুলি যে কোনও সময় পরিবর্তন করা যেতে পারে। আসুন এখন একটি পরিষেবা ব্যবহার করে আমাদের অ্যাপ্লিকেশনটি প্রকাশ করি এবং কিছু লেবেল প্রয়োগ করি৷

৷ +
+
+
+ +
+
+ + + From 40f0ee409d3ec8c755a4ed37a3eae441c64c63b5 Mon Sep 17 00:00:00 2001 From: Abhijeet Basfore <68768410+abhijeet-26@users.noreply.github.com> Date: Sat, 4 Mar 2023 11:36:16 +0530 Subject: [PATCH 0059/1086] explore-intro file added Signed-off-by: Abhijeet Basfore abhibas14@gmail.com --- .../explore/explore-intro.html | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/explore/explore-intro.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/explore/explore-intro.html b/content/bn/docs/tutorials/kubernetes-basics/explore/explore-intro.html new file mode 100644 index 0000000000..cdc115e308 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/explore/explore-intro.html @@ -0,0 +1,138 @@ +--- +title: পড এবং নোড দেখা +weight: 10 +--- + + + + + + + +
+ +
+ +
+ +
+

উদ্দেশ্য

+
    +
  • কুবারনেটিসে পডস সম্পর্কে জানুন।
  • +
  • কুবারনেটিসে নোডস সম্পর্কে জানুন।
  • +
  • ডিপ্লোয় করা অ্যাপ্লিকেশনের সমস্যা সমাধান(Troubleshoot) করুন।
  • +
+
+ +
+

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

+

আপনি যখন মডিউল 2 -এ একটি ডিপ্লোয়মেন্ট তৈরি করেন, তখন কুবারনেটস আপনার অ্যাপ্লিকেশন দৃষ্টান্ত হোস্ট করার জন্য একটি পড তৈরি করে। একটি পড হল একটি কুবারনেটস প্রত্যাহরণ যা এক বা একাধিক অ্যাপ্লিকেশন কন্টেইনারগুলির একটি গ্রুপকে প্রতিনিধিত্ব করে (যেমন ডকার), এবং সেই পাত্রগুলির জন্য কিছু শেয়ার করা সংস্থান। এই সম্পদ অন্তর্ভুক্ত:

+
    +
  • ভাগ করা স্টোরেজ, পরিমাণ হিসাবে
  • +
  • নেটওয়ার্কিং, একটি অনন্য ক্লাস্টার আইপি ঠিকানা হিসাবে
  • +
  • প্রতিটি কন্টেইনার কিভাবে চালাতে হয় সে সম্পর্কে তথ্য, যেমন কন্টেইনার ইমেজ সংস্করণ বা নির্দিষ্ট পোর্ট ব্যবহার করতে হবে
  • +
+

একটি পড একটি অ্যাপ্লিকেশন-নির্দিষ্ট "লজিক্যাল হোস্ট" মডেল করে এবং এতে বিভিন্ন অ্যাপ্লিকেশন পাত্র থাকতে পারে যা তুলনামূলকভাবে শক্তভাবে সংযুক্ত থাকে। উদাহরণ স্বরূপ, একটি পড আপনার Node.js অ্যাপের পাশাপাশি একটি ভিন্ন ধারক যা Node.js ওয়েব সার্ভার দ্বারা প্রকাশিত ডেটা ফিড করে উভয় ধারক অন্তর্ভুক্ত করতে পারে। একটি পডের কন্টেইনারগুলি একটি আইপি ঠিকানা এবং পোর্ট স্পেস ভাগ করে, সর্বদা সহ-অবস্থিত এবং সহ-নির্ধারিত, এবং একই নোডে একটি ভাগ করা প্রসঙ্গে চালিত হয়।

+ +

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

+ +
+
+
+

সারসংক্ষেপ:

+
    +
  • পডস
  • +
  • নোডস
  • +
  • Kubectl প্রধান কমান্ড
  • +
+
+
+

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

+
+
+
+
+ +
+
+

পডসের পরিদর্শন

+
+
+ +
+
+

+
+
+
+ +
+
+

নোডস

+

একটি পড সর্বদা একটি নোডে চলে | একটি নোড হল কুবারনেটিসে একটি কর্মী মেশিন এবং ক্লাস্টারের উপর নির্ভর করে একটি ভার্চুয়াল বা ফিজিক্যাল মেশিন হতে পারে। প্রতিটি নোড নিয়ন্ত্রণ সমতল দ্বারা পরিচালিত হয়। একটি নোডে একাধিক পড থাকতে পারে এবং কুবারনেটস কন্ট্রোল প্লেন স্বয়ংক্রিয়ভাবে ক্লাস্টারের নোড জুড়ে পডগুলির সময়সূচী পরিচালনা করে। কন্ট্রোল প্লেনের স্বয়ংক্রিয় সময়সূচী প্রতিটি নোডে উপলব্ধ সংস্থানগুলিকে বিবেচনা করে।

+ +

প্রতিটি কুবারনেটস নোড কমপক্ষে রান করে:

+
    +
  • কুবেলেট, কুবারনেটিস কন্ট্রোল প্লেন এবং নোডের মধ্যে যোগাযোগের জন্য দায়ী একটি প্রক্রিয়া; এটি একটি মেশিনে চলমান পড এবং পাত্রগুলি পরিচালনা করে।
  • +
  • একটি কন্টেইনার রানটাইম (ডকারের মতো) একটি রেজিস্ট্রি থেকে কন্টেইনার ইমেজ টেনে আনা, কন্টেইনার আনপ্যাক করা এবং অ্যাপ্লিকেশন চালানোর জন্য দায়ী।
  • +
+ +
+
+
+

কন্টেইনারগুলি শুধুমাত্র একটি একক পডে একসাথে নির্ধারিত হওয়া উচিত যদি সেগুলি শক্তভাবে সংযুক্ত থাকে এবং ডিস্কের মতো সংস্থানগুলি ভাগ করতে হয়৷

+
+
+
+ +
+ +
+
+

নোড পরিদর্শন

+
+
+ +
+
+

+
+
+
+ +
+
+

kubectl এর সাথে সমস্যা সমাধান(Troubleshooting)

+

মডিউল 2 - এ, আপনি Kubectl কমান্ড-লাইন ইন্টারফেস ব্যবহার করেছেন। আপনি ডিপ্লোয় করা অ্যাপ্লিকেশন এবং তাদের পরিবেশ সম্পর্কে তথ্য পেতে মডিউল 3 এ এটি ব্যবহার করা চালিয়ে যাবেন। সবচেয়ে সাধারণ ক্রিয়াকলাপগুলি নিম্নলিখিত kubectl কমান্ড দিয়ে করা যেতে পারে:

+
    +
  • kubectl get - সম্পদ(resource) তালিকা
  • +
  • kubectl describe - একটি সম্পদ সম্পর্কে বিস্তারিত তথ্য দেখান
  • +
  • kubectl logs - একটি পডে কন্টেইনার থেকে লগ দেখানো
  • +
  • kubectl exec - একটি পডের একটি কন্টেইনার একটি কমান্ড চালান
  • +
+ +

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

+ +

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

+ +
+
+
+

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

+
+
+
+
+ + + +
+ +
+ + + \ No newline at end of file From 42e68d9116021d5c17cf6c4c3e3d0107b1cf9cef Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Mon, 6 Mar 2023 12:54:57 +0600 Subject: [PATCH 0060/1086] [bn] Localizes content/bn/docs/tasks/tools/install-kubectl-windows.md (#39785) * Create install-kubectl-windows.md * Update install-kubectl-windows.md * Update install-kubectl-windows.md * Update content/bn/docs/tasks/tools/install-kubectl-windows.md Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tasks/tools/install-kubectl-windows.md Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tasks/tools/install-kubectl-windows.md Co-authored-by: Md Shahriyar Al Mustakim Mitul --------- Co-authored-by: Md Shahriyar Al Mustakim Mitul --- .../tasks/tools/install-kubectl-windows.md | 217 ++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 content/bn/docs/tasks/tools/install-kubectl-windows.md diff --git a/content/bn/docs/tasks/tools/install-kubectl-windows.md b/content/bn/docs/tasks/tools/install-kubectl-windows.md new file mode 100644 index 0000000000..7615a9d9d7 --- /dev/null +++ b/content/bn/docs/tasks/tools/install-kubectl-windows.md @@ -0,0 +1,217 @@ +--- +reviewers: +- mitul3737 +title: উইন্ডোজে kubectl ইনস্টল এবং সেট আপ করুন +content_type: task +weight: 10 +card: + name: tasks + weight: 20 + title: উইন্ডোজে kubectl ইনস্টল করুন +--- + +## {{% heading "prerequisites" %}} + +আপনাকে অবশ্যই একটি kubectl সংস্করণ ব্যবহার করতে হবে যা আপনার ক্লাস্টারের একটি ছোট সংস্করণের পার্থক্যের মধ্যে রয়েছে। উদাহরণ স্বরূপ, একটি v{{< skew currentVersion >}} ক্লায়েন্ট v{{< skew currentVersionAddMinor -1 >}}, v{{< skew currentVersionAddMinor 0 >}}, and v{{< skew currentVersionAddMinor 1 >}} কন্ট্রল প্লেনের সাথে যোগাযোগ করতে পারবে। +kubectl এর সর্বশেষ সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করা অপ্রত্যাশিত সমস্যাগুলি এড়াতে সাহায্য করে৷ + +## উইন্ডোজে kubectl ইনস্টল করুন + +উইন্ডোজে kubectl ইনস্টল করার জন্য নিম্নলিখিত পদ্ধতিগুলো অনুসরণ করতে পারেন: + +- [উইন্ডোজে কার্ল ব্যাবহার kubectl বাইনারি ইনস্টল করুন](#install-kubectl-binary-with-curl-on-windows) +- [Chocolatey, Scoop, বা winget ব্যবহার করে Windows এ ইনস্টল করুন](#install-nonstandard-package-tools) + +### উইন্ডোজে কার্ল ব্যাবহার kubectl বাইনারি ইনস্টল করুন + +1. [latest release {{< param "fullversion" >}}](https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe) ডাউনলোড করুন। + + অথবা যদি আপনার `curl` ইনস্টল থাকে, এই কমান্ডটি ব্যবহার করুন: + + ```powershell + curl.exe -LO "https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe" + ``` + + {{< note >}} + সর্বশেষ স্থিতিশীল সংস্করণ খুঁজে বের করতে (উদাহরণস্বরূপ, স্ক্রিপ্টিংয়ের জন্য), [https://dl.k8s.io/release/stable.txt](https://dl.k8s.io/release/stable.txt) দেখতে পারেন। + {{< /note >}} + +1. বাইনারি যাচাই করুন (অপশনাল) + + `kubectl` চেকসাম ফাইলটি ডাউনলোড করুন: + + ```powershell + curl.exe -LO "https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe.sha256" + ``` + + চেকসাম ফাইলের বিপরীতে `kubectl` বাইনারি যাচাই করুন: + + - ডাউনলোড করা চেকসাম ফাইলের সাথে ম্যানুয়ালি `CertUtil` এর আউটপুট তুলনা করতে কমান্ড প্রম্পট ব্যবহার করে: + + ```cmd + CertUtil -hashfile kubectl.exe SHA256 + type kubectl.exe.sha256 + ``` + + - একটি `True` বা `False` ফলাফল পেতে `-eq` অপারেটর ব্যবহার করে যাচাইকরণ স্বয়ংক্রিয় করতে PowerShell ব্যবহার করে: + + ```powershell + $(Get-FileHash -Algorithm SHA256 .\kubectl.exe).Hash -eq $(Get-Content .\kubectl.exe.sha256) + ``` + +1. আপনার `PATH` এনভায়রনমেন্ট ভেরিয়েবলে `kubectl` বাইনারি ফোল্ডারটি অ্যাপেন্ড বা প্রিপেন্ড করুন। + +1. `kubectl`-এর সংস্করণ ডাউনলোড করা একই রকম তা নিশ্চিত করতে পরীক্ষা করুন + + ```cmd + kubectl version --client + ``` + {{< note >}} + উপরের কমান্ডটি একটি সতর্ক বার্তা তৈরি করবে: + ``` + WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. + ``` + আপনি এই সতর্কতা উপেক্ষা করতে পারেন. আপনি শুধুমাত্র `kubectl` এর যে সংস্করণটি ইনস্টল করেছেন তা পরীক্ষা করছেন। + + {{< /note >}} + + অথবা সংস্করণের বিস্তারিত দেখার জন্য এটি ব্যবহার করুন: + + ```cmd + kubectl version --client --output=yaml + ``` + +1. প্লাগইন ইনস্টল করার পরে, ইনস্টলেশন ফাইলগুলি পরিষ্কার করুন: + + ```powershell + del kubectl.exe kubectl.exe.sha256 + ``` + +{{< note >}} +[উইন্ডোজের জন্য ডকার ডেস্কটপ](https://docs.docker.com/docker-for-windows/#kubernetes) `PATH`-এ `kubectl` এর নিজস্ব সংস্করণ যোগ করে। +আপনি যদি আগে ডকার ডেস্কটপ ইনস্টল করে থাকেন, তাহলে আপনাকে ডকার ডেস্কটপ ইনস্টলার দ্বারা যোগ করা একটির আগে আপনার `PATH` এন্ট্রি স্থাপন করতে হবে অথবা ডকার ডেস্কটপের `kubectl` সরিয়ে ফেলতে হবে। +{{< /note >}} + +### Chocolatey, Scoop, বা winget ব্যবহার করে Windows এ ইনস্টল করুন {#install-nonstandard-package-tools} + +1. উইন্ডোজে kubectl ইনস্টল করতে আপনি উভয় [Chocolatey](https://chocolatey.org) প্যাকেজ ম্যানেজার, [Scoop](https://scoop.sh) কমান্ড-লাইন ইনস্টলার, অথবা [winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/) প্যাকেজ ম্যানেজার ব্যবহার করতে পারেন। + + {{< tabs name="kubectl_win_install" >}} + {{% tab name="choco" %}} + ```powershell + choco install kubernetes-cli + ``` + {{% /tab %}} + {{% tab name="scoop" %}} + ```powershell + scoop install kubectl + ``` + {{% /tab %}} + {{% tab name="winget" %}} + ```powershell + winget install -e --id Kubernetes.kubectl + ``` + {{% /tab %}} + {{< /tabs >}} + +1. আপনার ইনস্টল করা সংস্করণ আপ-টু-ডেট কিনা তা নিশ্চিত করতে পরীক্ষা করুন: + + ```powershell + kubectl version --client + ``` + +1. আপনার হোম ডিরেক্টরিতে নেভিগেট করুন: + + ```powershell + # If you're using cmd.exe, run: cd %USERPROFILE% + cd ~ + ``` + +1. `.kube` ডিরেক্টরি তৈরি করুন: + + ```powershell + mkdir .kube + ``` + +1. আপনার তৈরি করা `.kube` ডিরেক্টরিতে ঢুকে পড়ুন: + + ```powershell + cd .kube + ``` + +1. একটি দূরবর্তী Kubernetes ক্লাস্টার ব্যবহার করতে kubectl কনফিগার করুরু + + ```powershell + New-Item config -type file + ``` + +{{< note >}} +আপনার পছন্দের টেক্সট এডিটর, যেমন নোটপ্যাড দিয়ে কনফিগার ফাইলটি সম্পাদনা করুন। +{{< /note >}} + +## kubectl কনফিগারেশন যাচাই করুন + +{{< include "included/verify-kubectl.md" >}} + +## অপশনাল kubectl কনফিগারেশন এবং প্লাগইন + +### শেল ওটোকমপ্লিট চালু করুন + +kubectl Bash, Zsh, Fish এবং PowerShell-এর জন্য ওটোকম্পিট সমর্থন প্রদান করে, যা আপনাকে অনেক টাইপিং করা থেকে রক্ষা করতে পারে। + +পাওয়ারশেলের জন্য ওটোকম্পিট সেট আপ করার পদ্ধতিগুলি নীচে দেওয়া হল। + +{{< include "included/optional-kubectl-configs-pwsh.md" >}} + +### `kubectl convert` প্লাগইন ইনস্টল করুন + +{{< include "included/kubectl-convert-overview.md" >}} + +1. কমান্ড সহ সর্বশেষ রিলিজ ডাউনলোড করুন: + + ```powershell + curl.exe -LO "https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl-convert.exe" + ``` + +1. বাইনারি যাচাই করুন (অপশনাল)। + + `kubectl-convert` চেকসাম ফাইলটি ডাউনলোড কর্সনা + + ```powershell + curl.exe -LO "https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubectl-convert.exe.sha256" + ``` + + চেকসাম ফাইলের বিপরীতে `kubectl-convert` বাইনারি যাচাই করুন: + + - ডাউনলোড করা চেকসাম ফাইলের সাথে ম্যানুয়ালি `CertUtil` এর আউটপুট তুলনা করতে কমান্ড প্রম্পট ব্যবহার করে: + + ```cmd + CertUtil -hashfile kubectl-convert.exe SHA256 + type kubectl-convert.exe.sha256 + ``` + + - একটি `True` বা `False` ফলাফল পেতে `-eq` অপারেটর ব্যবহার করে যাচাইকরণ স্বয়ংক্রিয় করতে PowerShell ব্যবহার করে: + + ```powershell + $($(CertUtil -hashfile .\kubectl-convert.exe SHA256)[1] -replace " ", "") -eq $(type .\kubectl-convert.exe.sha256) + ``` + +1. আপনার `PATH` এনভায়রনমেন্ট ভেরিয়েবলের সাথে `kubectl-convert` বাইনারি ফোল্ডারটি অ্যাপেন্ড বা প্রিপেন্ড করুন। + +1. প্লাগইন সফলভাবে ইনস্টল করা হয়েছে যাচাই করুন। + + ```shell + kubectl convert --help + ``` + + আপনি যদি একটি ত্রুটি দেখতে না পান, এর মানে হল প্লাগইনটি সফলভাবে ইনস্টল করা হয়েছে। + +1. প্লাগইন ইনস্টল করার পরে, ইনস্টলেশন ফাইলগুলি পরিষ্কার করুন: + + ```powershell + del kubectl-convert.exe kubectl-convert.exe.sha256 + ``` + +## {{% heading "whatsnext" %}} + +{{< include "included/kubectl-whats-next.md" >}} From 3573e76f5fe84fd525056287f4d5df9e342c42b6 Mon Sep 17 00:00:00 2001 From: Abhijeet Basfore <68768410+abhijeet-26@users.noreply.github.com> Date: Mon, 6 Mar 2023 16:34:24 +0530 Subject: [PATCH 0061/1086] Create _index.md --- content/bn/docs/tutorials/kubernetes-basics/scale/_index.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/scale/_index.md diff --git a/content/bn/docs/tutorials/kubernetes-basics/scale/_index.md b/content/bn/docs/tutorials/kubernetes-basics/scale/_index.md new file mode 100644 index 0000000000..fb6f9901f5 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/scale/_index.md @@ -0,0 +1,4 @@ +--- +title: আপনার অ্যাপ পরিসর করুন +weight: 50 +--- From aeb9427df6d006dd31e0d951ef637c923660aeb5 Mon Sep 17 00:00:00 2001 From: Adib Reza <92293886+AdibReza@users.noreply.github.com> Date: Thu, 9 Mar 2023 00:05:13 +0600 Subject: [PATCH 0062/1086] Localized content/bn/docs/tasks/tools/included/kubectl-whats-next.md (#39660) * Create kubectl-whats-next.md * Update content/bn/docs/tasks/tools/included/kubectl-whats-next.md Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tasks/tools/included/kubectl-whats-next.md Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tasks/tools/included/kubectl-whats-next.md Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tasks/tools/included/kubectl-whats-next.md Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tasks/tools/included/kubectl-whats-next.md Co-authored-by: Md Shahriyar Al Mustakim Mitul --------- Co-authored-by: Md Shahriyar Al Mustakim Mitul --- .../tasks/tools/included/kubectl-whats-next.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 content/bn/docs/tasks/tools/included/kubectl-whats-next.md diff --git a/content/bn/docs/tasks/tools/included/kubectl-whats-next.md b/content/bn/docs/tasks/tools/included/kubectl-whats-next.md new file mode 100644 index 0000000000..24321bce6e --- /dev/null +++ b/content/bn/docs/tasks/tools/included/kubectl-whats-next.md @@ -0,0 +1,16 @@ +--- +title: "এরপর কি?" +description: "kubectl ইন্সটল করার পর যা হবে" +headless: true +_build: + list: never + render: never + publishResources: false +--- + +* [ইনস্টল করুন Minikube](https://minikube.sigs.k8s.io/docs/start/) +* ক্লাস্টার তৈরি সম্পর্কে আরও জানতে দেখুন [গাইড শুরু করা](/bn/docs/setup/) ফাইলটি । +* [আপনার অ্যাপ্লিকেশানটি কীভাবে লঞ্চ করবেন এবং প্রকাশ করবেন তা জানুন ।](/docs/tasks/access-application-cluster/service-access-application-cluster/) +* আপনার যদি এমন একটি ক্লাস্টারে অ্যাক্সেসের প্রয়োজন হয় যা আপনি তৈরি করেননি, দেখুন + [ক্লাস্টার অ্যাক্সেস নথি ভাগ করেন](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/). +* [kubectl রেফারেন্স ডক্স](/docs/reference/kubectl/kubectl/) পড়ুন । From b326f5f52f9ff83acfdbc879df6a5dfd0780c2eb Mon Sep 17 00:00:00 2001 From: Abhijeet Basfore <68768410+abhijeet-26@users.noreply.github.com> Date: Thu, 9 Mar 2023 00:23:14 +0530 Subject: [PATCH 0064/1086] Create scale-interactive.html (#39852) Signed-off-by: Abhijeet Basfore --- .../scale/scale-interactive.html | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/scale/scale-interactive.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/scale/scale-interactive.html b/content/bn/docs/tutorials/kubernetes-basics/scale/scale-interactive.html new file mode 100644 index 0000000000..b2f794a19b --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/scale/scale-interactive.html @@ -0,0 +1,37 @@ +--- +title: ইন্টারেক্টিভ টিউটোরিয়াল - আপনার অ্যাপ পরিসর করুন +weight: 20 +--- + + + + + + + +{{< katacoda-tutorial >}} + + + + + From 7012091c652d109610d6bb894970767145f71bf0 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Thu, 9 Mar 2023 10:10:00 +0600 Subject: [PATCH 0065/1086] [bn] localization content/bn/docs/setup/learning-environment/_index.md added (#39839) * content\bn\docs\setup\learning-environment\_index.md added * content\bn\docs\setup\learning-environment\_index.md update * content\bn\docs\setup\learning-environment\_index.md update --- .../docs/setup/learning-environment/_index.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 content/bn/docs/setup/learning-environment/_index.md diff --git a/content/bn/docs/setup/learning-environment/_index.md b/content/bn/docs/setup/learning-environment/_index.md new file mode 100644 index 0000000000..806bf7ed74 --- /dev/null +++ b/content/bn/docs/setup/learning-environment/_index.md @@ -0,0 +1,28 @@ +--- +title: শিক্ষার পরিবেশ +weight: 20 +--- + + + + From 3f67c347a6ec942e377f765ec9f9e7cca37018f1 Mon Sep 17 00:00:00 2001 From: Abhijeet Basfore <68768410+abhijeet-26@users.noreply.github.com> Date: Thu, 9 Mar 2023 20:30:03 +0530 Subject: [PATCH 0066/1086] Create deploy-interactive.html (#39885) --- .../deploy-app/deploy-interactive.html | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html b/content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html new file mode 100644 index 0000000000..267f489b5e --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html @@ -0,0 +1,45 @@ +--- +title: ইন্টারেক্টিভ টিউটোরিয়াল - একটি অ্যাপ ডিপ্লোয় করা +weight: 20 +--- + + + + + + + +{{< katacoda-tutorial >}} + +
+ +
+ +
+
+

+ একটি পড হল একটি কুবারনেটিসে অ্যাপ্লিকেশনের মৌলিক এক্সিকিউশন ইউনিট। প্রতিটি পড আপনার ক্লাস্টারে চলমান কাজের চাপের একটি অংশ উপস্থাপন করে। পড সম্পর্কে আরও জানুন. +

+
+
+ +
+
+
+
+ +
+ + +
+ +
+ + + From 555f281f346e9a6001bc334b7a16a357b46574ae Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Fri, 10 Mar 2023 02:50:30 +0600 Subject: [PATCH 0067/1086] [bn] Localizes content/bn/docs/tasks/tools/install-kubectl-macos.md (#39893) * Create install-kubectl-macos.md * Update install-kubectl-macos.md * Update install-kubectl-macos.md --- .../docs/tasks/tools/install-kubectl-macos.md | 282 ++++++++++++++++++ 1 file changed, 282 insertions(+) create mode 100644 content/bn/docs/tasks/tools/install-kubectl-macos.md diff --git a/content/bn/docs/tasks/tools/install-kubectl-macos.md b/content/bn/docs/tasks/tools/install-kubectl-macos.md new file mode 100644 index 0000000000..fe2b318a46 --- /dev/null +++ b/content/bn/docs/tasks/tools/install-kubectl-macos.md @@ -0,0 +1,282 @@ +--- +reviewers: +- mitul3737 +title: macOS এ kubectl ইনস্টল এবং সেট আপ করুন +content_type: task +weight: 10 +card: + name: tasks + weight: 20 + title: macOS এ kubectl ইনস্টল করুন +--- + +## {{% heading "prerequisites" %}} + +আপনাকে অবশ্যই একটি kubectl সংস্করণ ব্যবহার করতে হবে যা আপনার ক্লাস্টারের একটি ছোট সংস্করণের পার্থক্যের মধ্যে রয়েছে। উদাহরণস্বরূপ, একটি v{{< skew currentVersion >}} ক্লায়েন্ট v{{< skew currentVersionAddMinor -1 >}}, v{{< skew currentVersionAddMinor 0 >}}, এবং v{{< skew currentVersionAddMinor 1 >}} নিয়ন্ত্রণ প্লেন এর সাথে যোগাযোগ করতে পারে। +kubectl এর সর্বশেষ সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করা অপ্রত্যাশিত সমস্যাগুলি এড়াতে সাহায্য করে৷ + +## macOS এ kubectl ইনস্টল করুন + +macOS এ kubectl ইনস্টল করার জন্য নিম্নলিখিত পদ্ধতি রয়েছেঃ + +- [macOS এ kubectl ইনস্টল করুন](#install-kubectl-on-macos) + - [macOS-এ কার্ল দিয়ে kubectl বাইনারি ইনস্টল করুন](#install-kubectl-binary-with-curl-on-macos) + - [MacOS এ Homebrew দিয়ে ইনস্টল করুন](#install-with-homebrew-on-macos) + - [MacOS এ Macports দিয়ে ইনস্টল করুন](#install-with-macports-on-macos) +- [kubectl কনফিগারেশন যাচাই করুন](#verify-kubectl-configuration) +- [বাড়তি kubectl কনফিগারেশন এবং প্লাগইন](#optional-kubectl-configurations-and-plugins) + - [শেল অটোকমপ্লিট সক্ষম করুন](#enable-shell-autocompletion) + - [`kubectl convert` প্লাগইন ইনস্টল করুন](#install-kubectl-convert-plugin) + +### macOS-এ কার্ল সহ kubectl বাইনারি ইনস্টল করুন + +১. সর্বশেষ রিলিজ ডাউনলোড করুন: + + {{< tabs name="download_binary_macos" >}} + {{< tab name="Intel" codelang="bash" >}} + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl" + {{< /tab >}} + {{< tab name="Apple Silicon" codelang="bash" >}} + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl" + {{< /tab >}} + {{< /tabs >}} + + {{< note >}} + একটি নির্দিষ্ট সংস্করণ ডাউনলোড করতে, নির্দিষ্ট সংস্করণের সাথে কমান্ডের `$(curl -L -s https://dl.k8s.io/release/stable.txt)` অংশটি প্রতিস্থাপন করুন। + + উদাহরণস্বরূপ, Intel macOS-এ সংস্করণ {{< param "fullversion" >}} ডাউনলোড করতে, টাইপ করুন: + + ```bash + curl -LO "https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/darwin/amd64/kubectl" + ``` + + এবং অ্যাপল সিলিকনে macOS এর জন্য, টাইপ করুন: + + ```bash + curl -LO "https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/darwin/arm64/kubectl" + ``` + + {{< /note >}} + +২. বাইনারি যাচাই করুন (ঐচ্ছিক) + + kubectl checksum ফাইল ডাউনলোড করুন: + + {{< tabs name="download_checksum_macos" >}} + {{< tab name="Intel" codelang="bash" >}} + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl.sha256" + {{< /tab >}} + {{< tab name="Apple Silicon" codelang="bash" >}} + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl.sha256" + {{< /tab >}} + {{< /tabs >}} + + চেকসাম ফাইলের বিপরীতে kubectl বাইনারি যাচাই করুন: + + ```bash + echo "$(cat kubectl.sha256) kubectl" | shasum -a 256 --check + ``` + + বৈধ হলে, আউটপুট হল: + + ```console + kubectl: OK + ``` + + চেক ব্যর্থ হলে, `shasum` অশূন্য স্থিতি সহ প্রস্থান করে এবং অনুরূপ আউটপুট প্রিন্ট করে: + + ```bash + kubectl: FAILED + shasum: WARNING: 1 computed checksum did NOT match + ``` + + {{< note >}} + বাইনারি এবং চেকসামের একই সংস্করণ ডাউনলোড করুন। + {{< /note >}} + +৩. kubectl বাইনারি এক্সিকিউটেবল করুন। + + ```bash + chmod +x ./kubectl + ``` + +৪. আপনার সিস্টেম `PATH`-এ একটি ফাইল অবস্থানে kubectl বাইনারি সরান। + + ```bash + sudo mv ./kubectl /usr/local/bin/kubectl + sudo chown root: /usr/local/bin/kubectl + ``` + + {{< note >}} + নিশ্চিত করুন যে `/usr/local/bin` আপনার PATH এনভায়রনমেন্ট ভেরিয়েবলে আছে। + {{< /note >}} + +৫. আপনার ইনস্টল করা সংস্করণ আপ-টু-ডেট কিনা তা নিশ্চিত করতে পরীক্ষা করুন: + + ```bash + kubectl version --client + ``` + + {{< note >}} + উপরের কমান্ডটি একটি সতর্কতা তৈরি করবে: + ``` + WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. + ``` + আপনি এই সতর্কতা উপেক্ষা করতে পারেন. আপনি শুধুমাত্র `kubectl` এর যে সংস্করণটি ইনস্টল করেছেন তা পরীক্ষা করছেন। + + {{< /note >}} + + অথবা সংস্করণের বিস্তারিত দেখার জন্য এটি ব্যবহার করুন: + + ```cmd + kubectl version --client --output=yaml + ``` + +৬. প্লাগইন ইনস্টল করার পরে, ইনস্টলেশন ফাইলগুলি পরিষ্কার করুন: + + ```bash + rm kubectl kubectl.sha256 + ``` + +### MacOS এ Homebrew দিয়ে ইনস্টল করুন + +আপনি যদি macOS-এ থাকেন এবং [Homebrew](https://brew.sh/) প্যাকেজ ম্যানেজার ব্যবহার করেন, তাহলে আপনি Homebrew-এর সাথে kubectl ইনস্টল করতে পারেন। + +১. ইনস্টলেশন কমান্ড চালান: + + ```bash + brew install kubectl + ``` + + অথবা, + + ```bash + brew install kubernetes-cli + ``` + +২. আপনার ইনস্টল করা সংস্করণ আপ-টু-ডেট কিনা তা নিশ্চিত করতে পরীক্ষা করুন: + + ```bash + kubectl version --client + ``` + +### MacOS এ Macports দিয়ে ইনস্টল করুন + +আপনি যদি macOS এ থাকেন এবং [Macports](https://macports.org/) প্যাকেজ ম্যানেজার ব্যবহার করেন, তাহলে আপনি ম্যাকপোর্টের সাথে kubectl ইনস্টল করতে পারেন। + +১. ইনস্টলেশন কমান্ড চালান: + + ```bash + sudo port selfupdate + sudo port install kubectl + ``` + +২. আপনার ইনস্টল করা সংস্করণ আপ-টু-ডেট কিনা তা নিশ্চিত করতে পরীক্ষা করুন: + + ```bash + kubectl version --client + ``` + +## kubectl কনফিগারেশন যাচাই করুন + +{{< include "included/verify-kubectl.md" >}} + +## ঐচ্ছিক kubectl কনফিগারেশন এবং প্লাগইন + +### শেল অটোকমপ্লিট সক্ষম করুন + +kubectl Bash, Zsh, Fish এবং PowerShell-এর জন্য অটোকমপ্লিট সমর্থন প্রদান করে যা আপনাকে অনেক টাইপিং বাঁচাতে পারে। + +নীচে Bash, Fish, এবং Zsh-এর জন্য স্বয়ংসম্পূর্ণতা সেট আপ করার পদ্ধতিগুলি রয়েছে৷ + +{{< tabs name="kubectl_autocompletion" >}} +{{< tab name="Bash" include="included/optional-kubectl-configs-bash-mac.md" />}} +{{< tab name="Fish" include="included/optional-kubectl-configs-fish.md" />}} +{{< tab name="Zsh" include="included/optional-kubectl-configs-zsh.md" />}} +{{< /tabs >}} + +### `kubectl convert` প্লাগইন ইনস্টল করুন + +{{< include "included/kubectl-convert-overview.md" >}} + +১. কমান্ড সহ সর্বশেষ রিলিজ ডাউনলোড করুন: + + {{< tabs name="download_convert_binary_macos" >}} + {{< tab name="Intel" codelang="bash" >}} + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl-convert" + {{< /tab >}} + {{< tab name="Apple Silicon" codelang="bash" >}} + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl-convert" + {{< /tab >}} + {{< /tabs >}} + +২. বাইনারি যাচাই করুন (ঐচ্ছিক) + + kubectl-convert checksum ফাইলটি ডাউনলোড করুন: + + {{< tabs name="download_convert_checksum_macos" >}} + {{< tab name="Intel" codelang="bash" >}} + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl-convert.sha256" + {{< /tab >}} + {{< tab name="Apple Silicon" codelang="bash" >}} + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl-convert.sha256" + {{< /tab >}} + {{< /tabs >}} + + চেকসাম ফাইলের বিপরীতে kubectl-রূপান্তর বাইনারি যাচাই করুন: + + ```bash + echo "$(cat kubectl-convert.sha256) kubectl-convert" | shasum -a 256 --check + ``` + + বৈধ হলে, আউটপুট হল: + + ```console + kubectl-convert: OK + ``` + + চেক ব্যর্থ হলে, `shasum` অশূন্য স্থিতি সহ প্রস্থান করে এবং অনুরূপ আউটপুট প্রিন্ট করে: + + ```bash + kubectl-convert: FAILED + shasum: WARNING: 1 computed checksum did NOT match + ``` + + {{< note >}} + বাইনারি এবং চেকসামের একই সংস্করণ ডাউনলোড করুন। + {{< /note >}} + +৩. kubectl-রূপান্তর বাইনারি এক্সিকিউটেবল করুন + + ```bash + chmod +x ./kubectl-convert + ``` + +৪. আপনার সিস্টেম `PATH`-এ একটি ফাইল অবস্থানে kubectl-রূপান্তর বাইনারি সরান। + + ```bash + sudo mv ./kubectl-convert /usr/local/bin/kubectl-convert + sudo chown root: /usr/local/bin/kubectl-convert + ``` + + {{< note >}} + নিশ্চিত করুন যে `/usr/local/bin` আপনার PATH এনভায়রনমেন্ট ভেরিয়েবলে আছে। + {{< /note >}} + +৫. প্লাগইন সফলভাবে ইনস্টল করা হয়েছে যাচাই করুন + + ```shell + kubectl convert --help + ``` + + আপনি যদি একটি ত্রুটি দেখতে না পান, এর মানে হল প্লাগইনটি সফলভাবে ইনস্টল করা হয়েছে। + +৬. প্লাগইন ইনস্টল করার পরে, ইনস্টলেশন ফাইলগুলি পরিষ্কার করুন: + + ```bash + rm kubectl-convert kubectl-convert.sha256 + ``` + +## {{% heading "whatsnext" %}} + +{{< include "included/kubectl-whats-next.md" >}} From a78335de6870373a9123808f270823e744a4021d Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Fri, 10 Mar 2023 04:02:31 +0600 Subject: [PATCH 0068/1086] Create optional-kubectl-configs-zsh.md (#39896) --- .../included/optional-kubectl-configs-zsh.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md diff --git a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md new file mode 100644 index 0000000000..fef65f35db --- /dev/null +++ b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md @@ -0,0 +1,28 @@ +--- +title: zsh অটোকমপ্লিসন" +description: "zsh অটোকমপ্লিসনের জন্য কিছু ঐচ্ছিক কনফিগারেশন।" +headless: true +_build: + list: never + render: never + publishResources: false +--- + +Zsh-এর জন্য kubectl কমপ্লিশন স্ক্রিপ্ট `kubectl completion zsh` কমান্ড দিয়ে তৈরি করা যেতে পারে। আপনার শেলে সমাপ্তি স্ক্রিপ্ট সোর্স করা kubectl স্বয়ংসম্পূর্ণতা সক্ষম করে। 12 + +আপনার সমস্ত শেল সেশনে এটি করতে, আপনার `~/.zshrc` ফাইলে নিম্নলিখিত যোগ করুন: + +```zsh +source <(kubectl completion zsh) +``` + +আপনার যদি kubectl-এর একটি উপনাম থাকে, kubectl স্বয়ংসম্পূর্ণতা স্বয়ংক্রিয়ভাবে এটির সাথে কাজ করবে। + +আপনার শেল পুনরায় লোড করার পরে, kubectl স্বয়ংসম্পূর্ণতা কাজ করা উচিত। + +যদি আপনি একটি ত্রুটি পান যেমন `2: command not found: compdef`, তাহলে আপনার `~/.zshrc` ফাইলের শুরুতে নিম্নলিখিত যোগ করুন: + +```zsh +autoload -Uz compinit +compinit +``` From 1cd7ea4f367f23f28cfdca72d562175fb9b6817d Mon Sep 17 00:00:00 2001 From: Abhijeet Basfore <68768410+abhijeet-26@users.noreply.github.com> Date: Fri, 10 Mar 2023 12:06:43 +0530 Subject: [PATCH 0069/1086] Create cluster-interactive.html --- .../create-cluster/cluster-interactive.html | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html b/content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html new file mode 100644 index 0000000000..14f6547727 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html @@ -0,0 +1,33 @@ +--- +title: ইন্টারেক্টিভ টিউটোরিয়াল - একটি ক্লাস্টার তৈরি করা +weight: 20 +--- + + + + + + + +{{< katacoda-tutorial >}} + + + + + From cc58e06843a93d428552564f21d2e76f2df199fb Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Sat, 11 Mar 2023 04:34:39 +0000 Subject: [PATCH 0070/1086] Fix Bengali localization strings (#39811) * Ensure that i18n/bn.toml is really a symlink * Start out with an empty (commented out) list of strings. This will fall back to the English original. --- data/i18n/bn/bn.toml | 519 ++++++++++++++++++++++++++++--------------- i18n/bn.toml | 2 +- 2 files changed, 337 insertions(+), 184 deletions(-) mode change 100644 => 120000 i18n/bn.toml diff --git a/data/i18n/bn/bn.toml b/data/i18n/bn/bn.toml index 0848492b81..76295d16ea 100644 --- a/data/i18n/bn/bn.toml +++ b/data/i18n/bn/bn.toml @@ -1,276 +1,429 @@ # i18n strings for the Bengali (main) site. # NOTE: Please keep the entries in alphabetical order when editing -[caution] -other = "Caution:" -[cleanup_heading] -other = "Cleaning up" +#[auto_generated_edit_notice] +#other = "(auto-generated page)" -[community_events_calendar] -other = "Events Calendar" +#[auto_generated_pageinfo] +#other = """

This page is automatically generated.

If you plan to report an issue with this page, mention that the page is auto-generated in your issue description. The fix may need to happen elsewhere in the Kubernetes project.

""" -[community_forum_name] -other = "Forum" +#[caution] +#other = "Caution:" -[community_github_name] -other = "GitHub" +#[cleanup_heading] +#other = "Cleaning up" -[community_slack_name] -other = "Slack" +#[community_events_calendar] +#other = "Events Calendar" -[community_stack_overflow_name] -other = "Stack Overflow" +#[community_forum_name] +#other = "Forum" -[community_twitter_name] -other = "Twitter" +#[community_github_name] +#other = "GitHub" -[community_youtube_name] -other = "YouTube" +#[community_slack_name] +#other = "Slack" -[deprecation_title] -other = "You are viewing documentation for Kubernetes version:" +#[community_stack_overflow_name] +#other = "Stack Overflow" -[deprecation_warning] -other = " documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the " +#[community_twitter_name] +#other = "Twitter" -[deprecation_file_warning] -other = "Deprecated" +#[community_youtube_name] +#other = "YouTube" -[docs_label_browse] -other = "Browse Docs" +## Avoid using conjunction_1. +## Must match the context in layouts/shortcodes/release-data.html +## Appears on https://kubernetes.io/releases/ +## For example the "and" in "Complete 1.25 Schedule and Changelog" +#[conjunction_1] +#other = "and" -[docs_label_contributors] -other = "Contributors" +#[cve_id] +#other = "CVE ID" -[docs_label_i_am] -other = "I AM..." +#[cve_issue_url] +#other = "CVE GitHub Issue URL" -[docs_label_users] -other = "Users" +#[cve_summary] +#other = "Issue Summary" -[docs_version_current] -other = "(this documentation)" +#[cve_table] +#other = "Official Kubernetes CVE List" -[docs_version_latest_heading] -other = "Latest version" +#[cve_table_date_format] +#other = "02 Jan 2006 15:04:05 MST" -[docs_version_other_heading] -other = "Older versions" +#[cve_table_date_format_string] +#other = "(last updated: %s)" -[end_of_life] -other = "End of Life:" +#[deprecation_title] +#other = "You are viewing documentation for Kubernetes version:" -[envvars_heading] -other = "Environment variables" +#[deprecation_warning] +#other = " documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the " -[error_404_were_you_looking_for] -other = "Were you looking for:" +#[deprecation_file_warning] +#other = "Deprecated" -[examples_heading] -other = "Examples" +#[dockershim_message] +#other = """Dockershim has been removed from the Kubernetes project as of release 1.24. Read the Dockershim Removal FAQ for further details.""" -[feature_state] -other = "FEATURE STATE:" +#[docs_label_browse] +#other = "Browse Docs" -[feedback_heading] -other = "Feedback" +#[docs_label_contributors] +#other = "Contributors" -[feedback_no] -other = "No" +#[docs_label_i_am] +#other = "I AM..." -[feedback_question] -other = "Was this page helpful?" +#[docs_label_users] +#other = "Users" -[feedback_yes] -other = "Yes" +#[docs_version_current] +#other = "(this documentation)" -[inline_list_separator] -other = "," +#[docs_version_latest_heading] +#other = "Latest version" -[input_placeholder_email_address] -other = "email address" +#[docs_version_other_heading] +#other = "Older versions" -[javascript_required] -other = "JavaScript must be [enabled](https://www.enable-javascript.com/) to view this content" +#[end_of_life] +#other = "End of Life:" -[latest_release] -other = "Latest Release:" +#[envvars_heading] +#other = "Environment variables" -[latest_version] -other = "latest version." +#[error_404_were_you_looking_for] +#other = "Were you looking for:" -[layouts_blog_pager_prev] -other = "<< Prev" +#[examples_heading] +#other = "Examples" -[layouts_blog_pager_next] -other = "Next >>" +#[feature_state] +#other = "FEATURE STATE:" -[layouts_case_studies_list_tell] -other = "Tell your story" +#[feedback_heading] +#other = "Feedback" -[layouts_docs_glossary_aka] -other = "Also known as" +#[feedback_no] +#other = "No" -[layouts_docs_glossary_description] -other = "This glossary is intended to be a comprehensive, standardized list of Kubernetes terminology. It includes technical terms that are specific to Kubernetes, as well as more general terms that provide useful context." +#[feedback_question] +#other = "Was this page helpful?" -[layouts_docs_glossary_deselect_all] -other = "Deselect all" +#[feedback_yes] +#other = "Yes" -[layouts_docs_glossary_click_details_after] -other = "indicators below to get a longer explanation for any particular term." +#[final_patch_release] +#other = "Final Patch Release" -[layouts_docs_glossary_click_details_before] -other = "Click on the" +#[inline_list_separator] +#other = "," -[layouts_docs_glossary_filter] -other = "Filter terms according to their tags" +#[input_placeholder_email_address] +#other = "email address" -[layouts_docs_glossary_select_all] -other = "Select all" +#[javascript_required] +#other = "JavaScript must be [enabled](https://www.enable-javascript.com/) to view this content" -[layouts_docs_partials_feedback_improvement] -other = "suggest an improvement" +#[latest_release] +#other = "Latest Release:" -[layouts_docs_partials_feedback_issue] -other = "Open an issue in the GitHub repo if you want to " +#[latest_version] +#other = "latest version." -[layouts_docs_partials_feedback_or] -other = "or" +#[layouts_blog_pager_next] +#other = "Next >>" -[layouts_docs_partials_feedback_problem] -other = "report a problem" +#[layouts_blog_pager_prev] +#other = "<< Prev" -[layouts_docs_partials_feedback_thanks] -other = "Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on" +#[layouts_case_studies_list_tell] +#other = "Tell your story" -[layouts_docs_search_fetching] -other = "Fetching results..." +#[layouts_docs_glossary_aka] +#other = "Also known as" -[main_by] -other = "by" +#[layout_docs_glossary_architecture_description] +#other = "The inner components of Kubernetes." -[main_cncf_project] -other = """We are a CNCF graduated project

""" +#[layout_docs_glossary_architecture_name] +#other = "Architecture" -[main_community_explore] -other = "Explore the community" +#[layouts_docs_glossary_click_details_after] +#other = "indicators below to get a longer explanation for any particular term." -[main_contribute] -other = "Contribute" +#[layouts_docs_glossary_click_details_before] +#other = "Click on the" -[main_copyright_notice] -other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" +#[layout_docs_glossary_community_description] +#other = "Related to Kubernetes open-source development." -[main_documentation_license] -other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" +#[layout_docs_glossary_community_name] +#other = "Community" -[main_github_invite] -other = "Interested in hacking on the core Kubernetes code base?" +#[layout_docs_glossary_core-object_description] +#other = "A resource type that Kubernetes supports by default." -[main_github_view_on] -other = "View On GitHub" +#[layout_docs_glossary_core-object_name] +#other = "Core Object" -[main_kubernetes_features] -other = "Kubernetes Features" +#[layouts_docs_glossary_description] +#other = "This glossary is intended to be a comprehensive, standardized list of Kubernetes terminology. It includes technical terms that are specific to Kubernetes, as well as more general terms that provide useful context." -[main_kubeweekly_baseline] -other = "Interested in receiving the latest Kubernetes news? Sign up for KubeWeekly." +#[layouts_docs_glossary_deselect_all] +#other = "Deselect all" -[main_kubernetes_past_link] -other = "View past newsletters" +#[layout_docs_glossary_extension_description] +#other = "Supported customizations of Kubernetes." -[main_kubeweekly_signup] -other = "Subscribe" +#[layout_docs_glossary_extension_name] +#other = "Extension" -[main_page_history] -other ="Page History" +#[layouts_docs_glossary_filter] +#other = "Filter terms according to their tags" -[main_page_last_modified_on] -other = "Page last modified on" +#[layout_docs_glossary_fundamental_description] +#other = "Relevant for a first-time user of Kubernetes." -[main_read_about] -other = "Read about" +#[layout_docs_glossary_fundamental_name] +#other = "Fundamental" -[main_read_more] -other = "Read more" +#[layout_docs_glossary_networking_description] +#other = "How Kubernetes components talk to each other (and to programs outside the cluster)." -[not_applicable] -# Localization teams: it's OK to use a longer text here -other = "n/a" +#[layout_docs_glossary_networking_name] +#other = "Networking" -[note] -other = "Note:" +#[layout_docs_glossary_operation_description] +#other = "Starting and maintaining Kubernetes." -[objectives_heading] -other = "Objectives" +#[layout_docs_glossary_operation_name] +#other = "Operation" -[options_heading] -other = "Options" +#[layout_docs_glossary_security_description] +#other = "Keeping Kubernetes applications safe and secure." -[outdated_blog__message] -other = "This article is more than one year old. Older articles may contain outdated content. Check that the information in the page has not become incorrect since its publication." +#[layout_docs_glossary_security_name] +#other = "Security" -[post_create_issue] -other = "Create an issue" +#[layouts_docs_glossary_select_all] +#other = "Select all" -[prerequisites_heading] -other = "Before you begin" +#[layout_docs_glossary_storage_description] +#other = "How Kubernetes applications handle persistent data." -[previous_patches] -other = "Patch Releases:" +#[layout_docs_glossary_storage_name] +#other = "Storage" -[release_date_after] -other = ")" +#[layout_docs_glossary_tool_description] +#other = "Software that makes Kubernetes easier or better to use." -[release_date_before] -other = "(released: " +#[layout_docs_glossary_tool_name] +#other = "Tool" -# See https://gohugo.io/functions/format/#gos-layout-string -# Use a suitable format for your locale -[release_date_format] -other = "2006-01-02" +#[layout_docs_glossary_user-type_description] +#other = "Represents a common type of Kubernetes user." -[seealso_heading] -other = "See Also" +#[layout_docs_glossary_user-type_name] +#other = "User Type" -[subscribe_button] -other = "Subscribe" +#[layout_docs_glossary_workload_description] +#other = "Applications running on Kubernetes." -[synopsis_heading] -other = "Synopsis" +#[layout_docs_glossary_workload_name] +#other = "Workload" -[thirdparty_message] -other = """This section links to third party projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for these projects, which are listed alphabetically. To add a project to this list, read the content guide before submitting a change. More information.""" +#[layouts_docs_partials_feedback_improvement] +#other = "suggest an improvement" -[thirdparty_message_edit_disclaimer] -other="""Third party content advice""" +#[layouts_docs_partials_feedback_issue] +#other = "Open an issue in the GitHub repo if you want to " +#[layouts_docs_partials_feedback_or] +#other = "or" -[thirdparty_message_single_item] -other = """🛇 This item links to a third party project or product that is not part of Kubernetes itself. More information""" +#[layouts_docs_partials_feedback_problem] +#other = "report a problem" -[thirdparty_message_disclaimer] -other = """

Items on this page refer to third party products or projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for those third-party products or projects. See the CNCF website guidelines for more details.

You should read the content guide before proposing a change that adds an extra third-party link.

""" +#[layouts_docs_partials_feedback_thanks] +#other = "Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on" -[ui_search_placeholder] -other = "Search" +#[layouts_docs_search_fetching] +#other = "Fetching results..." -[version_check_mustbe] -other = "Your Kubernetes server must be version " +#[main_by] +#other = "by" -[version_check_mustbeorlater] -other = "Your Kubernetes server must be at or later than version " +#[main_cncf_project] +#other = """We are a CNCF graduated project

""" -[version_check_tocheck] -other = "To check the version, enter " +#[main_community_explore] +#other = "Explore the community" -[version_menu] -other = "Versions" +#[main_contribute] +#other = "Contribute" -[warning] -other = "Warning:" +#[main_copyright_notice] +#other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" -[whatsnext_heading] -other = "What's next" +#[main_documentation_license] +#other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" +#[main_github_invite] +#other = "Interested in hacking on the core Kubernetes code base?" + +#[main_github_view_on] +#other = "View On GitHub" + +#[main_kubernetes_features] +#other = "Kubernetes Features" + +#[main_kubeweekly_baseline] +#other = "Interested in receiving the latest Kubernetes news? Sign up for KubeWeekly." + +#[main_kubernetes_past_link] +#other = "View past newsletters" + +#[main_kubeweekly_signup] +#other = "Subscribe" + +#[main_page_history] +#other ="Page History" + +#[main_page_last_modified_on] +#other = "Page last modified on" + +#[main_read_about] +#other = "Read about" + +#[main_read_more] +#other = "Read more" + +#[not_applicable] +## Localization teams: it's OK to use a longer text here +#other = "n/a" + +#[note] +#other = "Note:" + +#[objectives_heading] +#other = "Objectives" + +#[options_heading] +#other = "Options" + +#[outdated_blog__message] +#other = "This article is more than one year old. Older articles may contain outdated content. Check that the information in the page has not become incorrect since its publication." + +#[patch_release] +#other = "Patch Release" + +#[post_create_issue] +#other = "Create an issue" + +#[prerequisites_heading] +#other = "Before you begin" + +#[previous_patches] +#other = "Patch Releases:" + +#[release_date_after] +#other = ")" + +#[release_date_before] +#other = "(released: " + +## See https://gohugo.io/functions/format/#gos-layout-string +## Use a suitable format for your locale +#[release_date_format] +#other = "2006-01-02" + +#[release_cherry_pick_deadline] +#other = "Cherry Pick Deadline" + +#[release_end_of_life_date] +#other = "End Of Life Date" + +#[release_full_details_initial_text] +#other = "Complete" + +#[release_information_navbar] +#other = "Release Information" + +#[release_minor_version] +#other = "Minor Version" + +#[release_info_next_patch] +#other = "Next patch release is **%s**." + +## Localization note: You can use Markdown here. +## The three placeholders (in order) are: +## Kubernetes minor version +## maintenance mode date +## end of life date +## +## Keep this order. It is OK to use more than one sentence, and it's also OK to change the +## tense of the text so long as the meaning is clear. +#[release_info_eol] +#other = "**%s** enters maintenance mode on **%s** and End of Life is on **%s**." + +#[release_note] +#other = "Note" + +#[release_schedule] +#other = "Schedule" + +#[release_target_date] +#other = "Target Date" + +#[release_changelog] +#other = "Changelog" + +#[seealso_heading] +#other = "See Also" + +#[subscribe_button] +#other = "Subscribe" + +#[synopsis_heading] +#other = "Synopsis" + +#[thirdparty_message] +#other = """This section links to third party projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for these projects, which are listed alphabetically. To add a project to this list, read the content guide before submitting a change. More information.""" + +#[thirdparty_message_edit_disclaimer] +#other="""Third party content advice""" + + +#[thirdparty_message_single_item] +#other = """🛇 This item links to a third party project or product that is not part of Kubernetes itself. More information""" + +#[thirdparty_message_disclaimer] +#other = """

Items on this page refer to third party products or projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for those third-party products or projects. See the CNCF website guidelines for more details.

You should read the content guide before proposing a change that adds an extra third-party link.

""" + +#[ui_search_placeholder] +#other = "Search" + +#[version_check_mustbe] +#other = "Your Kubernetes server must be version " + +#[version_check_mustbeorlater] +#other = "Your Kubernetes server must be at or later than version " + +#[version_check_tocheck] +#other = "To check the version, enter " + +#[version_menu] +#other = "Versions" + +#[warning] +#other = "Warning:" + +#[whatsnext_heading] +#other = "What's next" diff --git a/i18n/bn.toml b/i18n/bn.toml deleted file mode 100644 index 331ee2545c..0000000000 --- a/i18n/bn.toml +++ /dev/null @@ -1 +0,0 @@ -../data/i18n/bn/bn.toml diff --git a/i18n/bn.toml b/i18n/bn.toml new file mode 120000 index 0000000000..8fa2e4ddc5 --- /dev/null +++ b/i18n/bn.toml @@ -0,0 +1 @@ +../data/i18n/bn/bn.toml \ No newline at end of file From 7e661dd761e943aff133f24d76e54622099c83e4 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Sat, 11 Mar 2023 10:54:40 +0600 Subject: [PATCH 0071/1086] [bn] Localizes content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md (#39916) * Create optional-kubectl-configs-bash-mac.md * Update optional-kubectl-configs-bash-mac.md --- .../optional-kubectl-configs-bash-mac.md | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md diff --git a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md new file mode 100644 index 0000000000..9e677011fb --- /dev/null +++ b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md @@ -0,0 +1,92 @@ +--- +title: "macOS এ ব্যাশ অটোকমপ্লিট" +description: "macOS-এ ব্যাশ অটোকমপ্লিট এর জন্য কিছু ঐচ্ছিক কনফিগারেশন।" +headless: true +_build: + list: never + render: never + publishResources: false +--- + +### ভূমিকা + +Bash-এর জন্য kubectl কমপ্লিশন স্ক্রিপ্ট `kubectl completion bash` দিয়ে তৈরি করা যেতে পারে। আপনার শেলে এই স্ক্রিপ্টটি সোর্স করা kubectl সম্পূর্ণতা সক্ষম করে। + +কিন্তু, kubectl কমপ্লিসন স্ক্রিপ্ট নির্ভর করে [**bash-completion**](https://github.com/scop/bash-completion) যা আপনাকে আগে ইনস্টল করতে হবে। + +{{< warning>}} +bash-completion এর দুটি সংস্করণ আছে, v1 এবং v2। V1 Bash 3.2 এর জন্য (যা macOS-এ ডিফল্ট), এবং v2 হল Bash 4.1+ এর জন্য। kubectl পূর্ণতা স্ক্রিপ্ট ** কাজ করে না** সঠিকভাবে bash-completion v1 এবং Bash 3.2 এর সাথে। এর জন্য **ব্যাশ-সম্পূর্ণ v2** এবং **ব্যাশ 4.1+** প্রয়োজন। সুতরাং, macOS-এ kubectl সমাপ্তি সঠিকভাবে ব্যবহার করতে সক্ষম হতে, আপনাকে Bash 4.1+ ([*instructions*](https://itnext.io/upgrading-bash-on-macos-7138bd1066ba)) ইনস্টল এবং ব্যবহার করতে হবে। নিম্নলিখিত নির্দেশাবলী অনুমান করে যে আপনি Bash 4.1+ ব্যবহার করেন (অর্থাৎ, 4.1 বা তার পরবর্তী যেকোনো Bash সংস্করণ)। +{{< /warning >}} + +### Bash আপগ্রেড করুন + +এখানে নির্দেশাবলী অনুমান করে আপনি ব্যাশ 4.1+ ব্যবহার করছেন। আপনি রান করে আপনার ব্যাশের সংস্করণটি পরীক্ষা করতে পারেন: + +```bash +echo $BASH_VERSION +``` + +যদি এটি খুব পুরানো হয়, আপনি Homebrew ব্যবহার করে এটি ইনস্টল/আপগ্রেড করতে পারেন: + +```bash +brew install bash +``` + +আপনার শেল পুনরায় লোড করুন এবং যাচাই করুন যে পছন্দসই সংস্করণটি ব্যবহার করা হচ্ছে: + +```bash +echo $BASH_VERSION $SHELL +``` + +Homebrew সাধারণত `/usr/local/bin/bash` এ ইনস্টল হয়। + +### ব্যাশ-কমপ্লিসন ইনস্টল করুন + +{{< note >}} +উল্লিখিত হিসাবে, এই নির্দেশাবলী অনুমান করে আপনি Bash 4.1+ ব্যবহার করেন, যার মানে আপনি bash-completion v2 ইনস্টল করবেন (Bash 3.2 এবং bash-completion v1 এর বিপরীতে, এই ক্ষেত্রে kubectl সমাপ্তি কাজ করবে না)। +{{< /note >}} + +আপনি পরীক্ষা করতে পারেন যদি আপনার bash-completion v2 ইতিমধ্যেই `type _init_completion` দিয়ে ইনস্টল করা আছে। যদি না হয়, আপনি homebrew দিয়ে এটি ইনস্টল করতে পারেন: + +```bash +brew install bash-completion@2 +``` + +এই কমান্ডের আউটপুটে যেমন বলা হয়েছে, আপনার `~/.bash_profile` ফাইলে নিম্নলিখিত যোগ করুন: + +```bash +brew_etc="$(brew --prefix)/etc" && [[ -r "${brew_etc}/profile.d/bash_completion.sh" ]] && . "${brew_etc}/profile.d/bash_completion.sh" +``` + +আপনার শেল পুনরায় লোড করুন এবং যাচাই করুন যে bash-completion v2 সঠিকভাবে `type _init_completion` দিয়ে ইনস্টল করা আছে। + +### kubectl অটোকমপ্লিসন চালু করুন + +আপনাকে এখন নিশ্চিত করতে হবে যে আপনার সমস্ত শেল সেশনে kubectl কমপ্লিসনের স্ক্রিপ্টটি পাওয়া যায়। এটি অর্জন করার একাধিক উপায় রয়েছে: + +- আপনার `~/.bash_profile` ফাইলে কমপ্লিসনের স্ক্রিপ্ট উৎস করুন: + + ```bash + echo 'source <(kubectl completion bash)' >>~/.bash_profile + ``` + +- `/usr/local/etc/bash_completion.d` ডিরেক্টরিতে কমপ্লিসনের স্ক্রিপ্ট যোগ করুন: + + ```bash + kubectl completion bash >/usr/local/etc/bash_completion.d/kubectl + ``` + +- আপনার যদি kubectl এর জন্য একটি উপনাম থাকে তবে আপনি সেই উপনামের সাথে কাজ করার জন্য শেল কমপ্লিসন বাড়াতে পারেন: + + ```bash + echo 'alias k=kubectl' >>~/.bash_profile + echo 'complete -o default -F __start_kubectl k' >>~/.bash_profile + ``` + +- আপনি যদি হোমব্রু দিয়ে kubectl ইনস্টল করেন (যেমন [এখানে ব্যাখ্যা করা হয়েছে](/docs/tasks/tools/install-kubectl-macos/#install-with-homebrew-on-macos)), তাহলে kubectl কমপ্লিসনের স্ক্রিপ্ট ইতিমধ্যেই `/-এ থাকা উচিত usr/local/etc/bash_completion.d/kubectl`। সেক্ষেত্রে আপনার কিছু করার দরকার নেই। + + {{< note >}} + bash-completion v2-এর Homebrew ইনস্টলেশনটি `BASH_COMPLETION_COMPAT_DIR` ডিরেক্টরির সমস্ত ফাইলকে উৎস করে, তাই পরবর্তী দুটি পদ্ধতি কাজ করে। + {{< /note >}} + +যে কোনো ক্ষেত্রে, আপনার শেল পুনরায় লোড করার পরে, kubectl সমাপ্তি কাজ করা উচিত। From adea57f68e0ec90c0634799180dfb9d13eb0a442 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Sun, 12 Mar 2023 23:36:42 +0600 Subject: [PATCH 0072/1086] [bn] Localize content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md (#39937) * Create optional-kubectl-configs-bash-linux.md * Update optional-kubectl-configs-bash-linux.md --- .../optional-kubectl-configs-bash-linux.md | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md diff --git a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md new file mode 100644 index 0000000000..a67b0643c9 --- /dev/null +++ b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md @@ -0,0 +1,60 @@ +--- +title: "লিনাক্সে ব্যাশ অটোকমপ্লিসন" +description: "লিনাক্সে ব্যাশ অটোকমপ্লিসনের জন্য কিছু ঐচ্ছিক কনফিগারেশন।" +headless: true +_build: + list: never + render: never + publishResources: false +--- + +### ভূমিকা + +ব্যাশ-এর জন্য kubectl কমপ্লিশন স্ক্রিপ্ট `kubectl completion bash` কমান্ড দিয়ে তৈরি করা যেতে পারে। আপনার শেলে সমাপ্তি স্ক্রিপ্ট সোর্স করা kubectl অটোকমপ্লিসন সক্ষম করে। + +যাইহোক, কমপ্লিসন স্ক্রিপ্ট [**ব্যাশ-কমপ্লিসন**](https://github.com/scop/bash-completion) এর উপর নির্ভর করে, তার মানে হচ্ছে আপনাকে প্রথমে এই সফ্টওয়্যারটি ইনস্টল করতে হবে (আপনার ব্যাশ-কমপ্লিসন ইতিমধ্যেই ইনস্টল করা আছে কিনা তা `type _init_completion` চালিয়ে পরীক্ষা করতে পারেন)। + +### ব্যাশ-কমপ্লিসন ইনস্টল করুন + +ব্যাশ-কমপ্লিসন অনেক প্যাকেজ ম্যানেজার দ্বারা প্রদান করা হয় ([এখানে](https://github.com/scop/bash-completion#installation) দেখুন)। আপনি এটিকে `apt-get install bash-completion` অথবা `yum install bash-completion`, ইত্যাদি দিয়ে ইনস্টল করতে পারেন। + +উপরের কমান্ডগুলি `/usr/share/bash-completion/bash_completion` তৈরি করে, যা ব্যাশ-কমপ্লিসন এর প্রধান স্ক্রিপ্ট। আপনার প্যাকেজ ম্যানেজারের উপর নির্ভর করে, আপনাকে ম্যানুয়ালি এই ফাইলটি আপনার `~/.bashrc` ফাইলে সোর্স করতে হবে। +জানতে চাইলে, আপনার শেল পুনরায় লোড করুন এবং `type_init_completion` চালান। কমান্ডটি সফল হলে, আপনি ইতিমধ্যেই সেট করেছেন, অন্যথায় আপনার `~/.bashrc` ফাইলে নিম্নলিখিত যোগ করুন: + +```bash +source /usr/share/bash-completion/bash_completion +``` + +আপনার শেল পুনরায় লোড করুন এবং `type _init_completion` লিখে ব্যাশ-কমপ্লিসন সঠিকভাবে ইনস্টল করা হয়েছে কিনা তা যাচাই করুন। + +### kubectl অটোকমপ্লিসন চালু করুন + +#### ব্যাশ + +আপনাকে এখন নিশ্চিত করতে হবে যে kubectl সমাপ্তি স্ক্রিপ্টটি আপনার সমস্ত শেল সেশনে পাওয়া যায়। আপনি এটি করতে পারেন যা দুটি উপায় আছেঃ + +{{< tabs name="kubectl_bash_autocompletion" >}} +{{< tab name="User" codelang="bash" >}} +echo 'source <(kubectl completion bash)' >>~/.bashrc +{{< /tab >}} +{{< tab name="System" codelang="bash" >}} +kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null +{{< /tab >}} +{{< /tabs >}} + +আপনার যদি kubectl এর জন্য একটি অ্যালিঅ্যাস থাকে তবে আপনি সেই অ্যালিঅ্যাসের সাথে কাজ করার জন্য শেল কমপ্লিসন বাড়াতে পারেনঃ + +```bash +echo 'alias k=kubectl' >>~/.bashrc +echo 'complete -o default -F __start_kubectl k' >>~/.bashrc +``` + +{{< note >}} +ব্যাশ-কমপ্লিসনের সূত্র `/etc/bash_completion.d`-এ সমস্ত কমপ্লিসন স্ক্রিপ্ট। +{{< /note >}} + +উভয় পন্থা সমতুল্য। আপনার শেল পুনরায় লোড করার পরে, kubectl অটোকমপ্লিসন কাজ করা উচিত। +শেলের বর্তমান সেশনে ব্যাশ অটোকমপ্লিসন সক্ষম করতে, ~/.bashrc ফাইলটি উৎস করুনঃ +```bash +source ~/.bashrc +``` From b49b1b08de58a44eb362bd56d13dafd4a69c6319 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Tue, 14 Mar 2023 02:18:50 +0600 Subject: [PATCH 0073/1086] [bn] Localizes content/bn/docs/tasks/tools/install-kubectl-linux.md (#39938) * Create install-kubectl-linux.md * Update install-kubectl-linux.md * Update install-kubectl-linux.md --- .../docs/tasks/tools/install-kubectl-linux.md | 279 ++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 content/bn/docs/tasks/tools/install-kubectl-linux.md diff --git a/content/bn/docs/tasks/tools/install-kubectl-linux.md b/content/bn/docs/tasks/tools/install-kubectl-linux.md new file mode 100644 index 0000000000..4ced6bda94 --- /dev/null +++ b/content/bn/docs/tasks/tools/install-kubectl-linux.md @@ -0,0 +1,279 @@ +--- +reviewers: +- mitul3737 +title: লিনাক্সে kubectl ইনস্টল এবং সেট আপ করুন +content_type: task +weight: 10 +card: + name: tasks + weight: 20 + title: লিনাক্সে kubectl ইনস্টল করুন +--- + +## {{% heading "prerequisites" %}} + +আপনাকে অবশ্যই একটি kubectl সংস্করণ ব্যবহার করতে হবে যা আপনার ক্লাস্টারের একটি ছোট সংস্করণের পার্থক্যের মধ্যে রয়েছে। উদাহরণস্বরূপ, একটি v{{< skew currentVersion >}} ক্লায়েন্ট v{{< skew currentVersionAddMinor -1 >}}, v{{< skew currentVersionAddMinor 0 >}}, এবং v{{< skew currentVersionAddMinor 1 >}} এর কন্ট্রোল প্লেনের সাথে যোগাযোগ করতে পারে। +kubectl এর সর্বশেষ সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করা অপ্রত্যাশিত সমস্যাগুলি এড়াতে সাহায্য করে৷ + +## লিনাক্সে kubectl ইনস্টল করুন + +লিনাক্সে kubectl ইনস্টল করার জন্য নিম্নলিখিত পদ্ধতি বিদ্যমানঃ + +- [লিনাক্সে কার্ল দিয়ে kubectl বাইনারি ইনস্টল করুন](#install-kubectl-binary-with-curl-on-linux) +- [নেটিভ প্যাকেজ ম্যানেজমেন্ট দিয়ে ইনস্টল করুন](#install-using-native-package-management) +- [অন্যান্য প্যাকেজ ব্যবস্থাপনা ব্যবহার করে ইনস্টল করুন](#install-using-other-package-management) + +### লিনাক্সে কার্ল সহ kubectl বাইনারি ইনস্টল করুন + +১. কমান্ড সহ সর্বশেষ রিলিজ ডাউনলোড করুন: + + ```bash + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" + ``` + + {{< note >}} +একটি নির্দিষ্ট সংস্করণ ডাউনলোড করতে, নির্দিষ্ট সংস্করণের সাথে কমান্ডের `$(curl -L -s https://dl.k8s.io/release/stable.txt)` অংশটি প্রতিস্থাপন করুন। + +উদাহরণস্বরূপ, লিনাক্সে সংস্করণ {{< param "fullversion" >}} ডাউনলোড করতে, টাইপ করুন: + + ```bash + curl -LO https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/linux/amd64/kubectl + ``` + {{< /note >}} + +২. বাইনারি যাচাই করুন (ঐচ্ছিক) + + kubectl চেকসাম ফাইল ডাউনলোড করুন: + + ```bash + curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256" + ``` + + চেকসাম ফাইলের বিপরীতে kubectl বাইনারি যাচাই করুন: + + ```bash + echo "$(cat kubectl.sha256) kubectl" | sha256sum --check + ``` + + বৈধ হলে, আউটপুট হবে: + + ```console + kubectl: OK + ``` + + চেক ব্যর্থ হলে, `sha256` অশূন্য স্থিতি সহ প্রস্থান করে এবং অনুরূপ আউটপুট প্রিন্ট করে: + + ```bash + kubectl: FAILED + sha256sum: WARNING: 1 computed checksum did NOT match + ``` + + {{< note >}} + বাইনারি এবং চেকসামের একই সংস্করণ ডাউনলোড করুন। + {{< /note >}} + +৩. kubectl ইনস্টল করুন + + ```bash + sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + ``` + + {{< note >}} + যদি আপনার টার্গেট সিস্টেমে রুট অ্যাক্সেস না থাকে, তাহলেও আপনি `~/.local/bin` ডিরেক্টরিতে kubectl ইনস্টল করতে পারেন: + + ```bash + chmod +x kubectl + mkdir -p ~/.local/bin + mv ./kubectl ~/.local/bin/kubectl + # and then append (or prepend) ~/.local/bin to $PATH + ``` + + {{< /note >}} + +৪. আপনার ইনস্টল করা সংস্করণ আপ-টু-ডেট কিনা তা নিশ্চিত করতে পরীক্ষা করুন: + + ```bash + kubectl version --client + ``` + {{< note >}} + উপরের কমান্ডটি একটি সতর্কতা তৈরি করবে: + ``` + WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. + ``` + আপনি এই সতর্কতা উপেক্ষা করতে পারেন। আপনি শুধুমাত্র `kubectl` এর সংস্করণটি পরীক্ষা করছেন যা আপনি ইনস্টল করেছেন। + + + {{< /note >}} + + অথবা সংস্করণের বিস্তারিত দেখার জন্য এটি ব্যবহার করুনঃ + + ```cmd + kubectl version --client --output=yaml + ``` + +### নেটিভ প্যাকেজ ম্যানেজমেন্ট ব্যবহার করে ইনস্টল করুন + +{{< tabs name="kubectl_install" >}} +{{% tab name="Debian-based distributions" %}} + +১. `apt` প্যাকেজ ইনডেক্স আপডেট করুন এবং Kubernetes `apt` রিপোযিটোরী ব্যবহার করার জন্য প্রয়োজনীয় প্যাকেজ ইনস্টল করুন: + + ```shell + sudo apt-get update + sudo apt-get install -y ca-certificates curl + ``` + আপনি যদি ডেবিয়ান ৯ (স্ট্রেচ) বা তার আগে ব্যবহার করেন তবে আপনাকে `apt-transport-https` ইনস্টল করতে হবে: + ```shell + sudo apt-get install -y apt-transport-https + ``` + +২. গুগল ক্লাউড পাবলিক সাইনিং কী ডাউনলোড করুন: + + ```shell + sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg + ``` + +৩. কুবারনেটিস `apt` রিপোযিটোরী যোগ করুন: + + ```shell + echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list + ``` + +৪. নতুন রিপোযিটোরীর সাথে `apt` প্যাকেজ ইনডেক্স আপডেট করুন এবং kubectl ইনস্টল করুন: + + ```shell + sudo apt-get update + sudo apt-get install -y kubectl + ``` +{{< note >}} +ডেবিয়ান ১২ এবং উবুন্টু ২২.০৪ এর চেয়ে পুরানো রিলিজে, `/etc/apt/keyrings` ডিফল্টরূপে বিদ্যমান নেই। +আপনার প্রয়োজন হলে আপনি এই ডিরেক্টরিটি তৈরি করতে পারেন, এটি ওয়ার্ল্ড-রিডেবল কিন্তু শুধুমাত্র অ্যাডমিনদের দ্বারা লেখার যোগ্য। + +{{< /note >}} + +{{% /tab %}} + +{{% tab name="Red Hat-based distributions" %}} +```bash +cat <}} + +### অন্যান্য প্যাকেজ ব্যবস্থাপনা ব্যবহার করে ইনস্টল করুন + +{{< tabs name="other_kubectl_install" >}} +{{% tab name="Snap" %}} +আপনি যদি উবুন্টু বা অন্য একটি লিনাক্স ডিস্ট্রিবিউশনে থাকেন যা [স্ন্যাপ](https://snapcraft.io/docs/core/install) প্যাকেজ ম্যানেজার সমর্থন করে, তাহলে kubectl একটি [স্ন্যাপ](https://snapcraft.io/) অ্যাপ্লিকেশান হিসেবে পাওয়া যাবে। + + +```shell +snap install kubectl --classic +kubectl version --client +``` + +{{% /tab %}} + +{{% tab name="Homebrew" %}} +আপনি যদি লিনাক্সে থাকেন এবং [হোম্ব্রু](https://docs.brew.sh/Homebrew-on-Linux) প্যাকেজ ম্যানেজার ব্যবহার করেন, তাহলে kubectl [ইনস্টলেশন](https://docs.brew.sh/Homebrew-on-Linux#install) এর জন্য পাওয়া যাবে। + +```shell +brew install kubectl +kubectl version --client +``` + +{{% /tab %}} + +{{< /tabs >}} + +## kubectl কনফিগারেশন যাচাই করুন + +{{< include "included/verify-kubectl.md" >}} + +## ঐচ্ছিক kubectl কনফিগারেশন এবং প্লাগই + +### শেল অটোকম্পিসন চালু করুন + +kubectl Bash, Zsh, Fish এবং PowerShell-এর জন্য অটোকম্পিসন সমর্থন প্রদান করে, যা আপনাকে অনেক টাইপিং বাঁচাতে পারে। + +নীচে Bash, Fish, এবং Zsh-এর জন্য স্বয়ংসম্পূর্ণতা সেট আপ করার পদ্ধতিগুলি রয়েছে৷ + +{{< tabs name="kubectl_autocompletion" >}} +{{< tab name="Bash" include="included/optional-kubectl-configs-bash-linux.md" />}} +{{< tab name="Fish" include="included/optional-kubectl-configs-fish.md" />}} +{{< tab name="Zsh" include="included/optional-kubectl-configs-zsh.md" />}} +{{< /tabs >}} + +### `kubectl convert` প্লাগইন ইনস্টল করুন + +{{< include "included/kubectl-convert-overview.md" >}} + +১. কমান্ড সহ সর্বশেষ রিলিজ ডাউনলোড করুন: + + ```bash + curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert" + ``` + +২. বাইনারি যাচাই করুন (ঐচ্ছিক) + + kubectl-convert চেকসাম ফাইলটি ডাউনলোড করুন: + + ```bash + curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert.sha256" + ``` + + চেকসাম ফাইলের বিপরীতে kubectl-রূপান্তর বাইনারি যাচাই করুন: + + ```bash + echo "$(cat kubectl-convert.sha256) kubectl-convert" | sha256sum --check + ``` + + বৈধ হলে, আউটপুট হল: + + ```console + kubectl-convert: OK + ``` + + চেক ব্যর্থ হলে, `sha256` অশূন্য স্থিতি সহ প্রস্থান করে এবং অনুরূপ আউটপুট প্রিন্ট করে: + + ```bash + kubectl-convert: FAILED + sha256sum: WARNING: 1 computed checksum did NOT match + ``` + + {{< note >}} + বাইনারি এবং চেকসামের একই সংস্করণ ডাউনলোড করুন। + {{< /note >}} + +৩. kubectl-convert ইনস্টল করুন + + ```bash + sudo install -o root -g root -m 0755 kubectl-convert /usr/local/bin/kubectl-convert + ``` + +৪. প্লাগইন সফলভাবে ইনস্টল করা হয়েছে যাচাই করুন + + ```shell + kubectl convert --help + ``` + + আপনি যদি একটি ত্রুটি দেখতে না পান, এর মানে হল প্লাগইনটি সফলভাবে ইনস্টল করা হয়েছে। + +৫. প্লাগইন ইনস্টল করার পরে, ইনস্টলেশন ফাইলগুলি পরিষ্কার করুন: + + ```bash + rm kubectl-convert kubectl-convert.sha256 + ``` + +## {{% heading "whatsnext" %}} + +{{< include "included/kubectl-whats-next.md" >}} From 48a5b2615c76bfe2a452f5bbd346c574cc1a56da Mon Sep 17 00:00:00 2001 From: Noor E Jannat Nafia <90461705+noor-e-jannatnafia@users.noreply.github.com> Date: Sun, 19 Mar 2023 19:13:16 +0600 Subject: [PATCH 0074/1086] Localized content/bn/docs/tutorials/kubernetes-basics/deploy-app/_index.md (#40118) --- .../bn/docs/tutorials/kubernetes-basics/deploy-app/_index.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/deploy-app/_index.md diff --git a/content/bn/docs/tutorials/kubernetes-basics/deploy-app/_index.md b/content/bn/docs/tutorials/kubernetes-basics/deploy-app/_index.md new file mode 100644 index 0000000000..104441aec9 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/deploy-app/_index.md @@ -0,0 +1,4 @@ +--- +title: একটি অ্যাপ স্থাপন করা +weight: 20 +--- From b247ae971e49b526358be06425667faaf4ba7030 Mon Sep 17 00:00:00 2001 From: Noor E Jannat Nafia <90461705+noor-e-jannatnafia@users.noreply.github.com> Date: Sun, 19 Mar 2023 19:15:16 +0600 Subject: [PATCH 0075/1086] Localized content/bn/docs/tasks/tools/included/kubectl-convert-overview.md (#40079) * Localized content/bn/docs/tasks/tools/included/kubectl-convert-overview.md * It has been updated. --- .../tools/included/kubectl-convert-overview.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/docs/tasks/tools/included/kubectl-convert-overview.md diff --git a/content/bn/docs/tasks/tools/included/kubectl-convert-overview.md b/content/bn/docs/tasks/tools/included/kubectl-convert-overview.md new file mode 100644 index 0000000000..0a155193c1 --- /dev/null +++ b/content/bn/docs/tasks/tools/included/kubectl-convert-overview.md @@ -0,0 +1,14 @@ +--- +title: "kubectl-convert পরিদর্শন" +description: >- + একটি kubectl প্লাগইন যা আপনাকে একটি Kubernetes আপিআই এর সংস্করণ থেকে একটি ভিন্ন সংস্করণে রূপান্তর করতে দেয়। +headless: true +_build: + list: never + render: never + publishResources: false +--- + +কুবারনেটিস কমান্ড-লাইন টুল `kubectl` এর জন্য একটি প্লাগইন, যা আপনাকে বিভিন্ন আপিআই সংস্করণ এর মধ্যে রূপান্তর করতে দেয়। +এটি নতুন কুবারনেটিস রিলিজের সাথে একটি অ-বঞ্চিত আপিআই সংস্করণে স্থানান্তর করতে বিশেষভাবে সহায়ক হতে পারে। +আরও তথ্যের জন্য, [অপ্রচলিত apis-এ মাইগ্রেট করুন](/docs/reference/using-api/deprecation-guide/#migrate-to-non-deprecated-apis) From 3a14c7991ee077903fe0b4f2da0aa7f2bc75f36a Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Mon, 20 Mar 2023 16:13:17 +0600 Subject: [PATCH 0076/1086] [bn] Localizes `content/bn/docs/tutorials/kubernetes-basics/update/update-intro.html` (#40133) * Create install-kubectl-linux.md * Update install-kubectl-linux.md * Update install-kubectl-linux.md * Create _index.html * Create update-intro.html * Delete install-kubectl-linux.md * Delete _index.html * Update content/bn/docs/tutorials/kubernetes-basics/update/update-intro.html Co-authored-by: Md Shahriyar Al Mustakim Mitul --------- Co-authored-by: Md Shahriyar Al Mustakim Mitul --- .../update/update-intro.html | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/update/update-intro.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/update/update-intro.html b/content/bn/docs/tutorials/kubernetes-basics/update/update-intro.html new file mode 100644 index 0000000000..5773282dd0 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/update/update-intro.html @@ -0,0 +1,133 @@ +--- +title: একটি রোলিং আপডেট সম্পাদন করা +weight: 10 +--- + + + + + + + +
+ +
+ +
+ +
+

উদ্দেশ্য

+
    +
  • kubectl ব্যবহার করে একটি রোলিং আপডেট সম্পাদন করুন।
  • +
+
+ +
+

একটি অ্যাপ্লিকেশন আপডেট করা হচ্ছে

+ +

ব্যবহারকারীরা আশা করে যে অ্যাপ্লিকেশনগুলি সর্বদা উপলব্ধ থাকবে এবং ডেভেলপাররা দিনে কয়েকবার তাদের নতুন সংস্করণ স্থাপন করবে বলে আশা করা হচ্ছে। কুবারনেটিসে এটি রোলিং আপডেটের সাথে করা হয়। ঘূর্ণায়মান আপডেটগুলি নতুনগুলির সাথে পড দৃষ্টান্তগুলিকে ক্রমবর্ধমানভাবে আপডেট করে শূন্য ডাউনটাইম সহ স্থাপনার আপডেটগুলি ঘটতে দেয়৷ নতুন পডগুলি উপলব্ধ সংস্থান সহ নোডগুলিতে নির্ধারিত হবে৷

+ +

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

+ +
+
+
+

সারাংশঃ

+
    +
  • একটি অ্যাপ আপডেট করা হচ্ছে
  • +
+
+
+

রোলিং আপডেটগুলি নতুনগুলির সাথে পডস দৃষ্টান্তগুলিকে ক্রমবর্ধমানভাবে আপডেট করার মাধ্যমে শূন্য ডাউনটাইম সহ স্থাপনার আপডেটগুলি ঘটতে দেয়৷

+
+
+
+
+ +
+
+

রোলিং আপডেট ওভারভিউ

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

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

+

রোলিং আপডেটগুলি নিম্নলিখিত ক্রিয়াগুলিকে অনুমতি দেয়ঃ

+
    +
  • একটি পরিবেশ থেকে অন্য পরিবেশে একটি অ্যাপ্লিকেশন প্রচার করুন (কন্টেইনার ইমেজ আপডেটের মাধ্যমে)
  • +
  • পূর্ববর্তী সংস্করণে রোলব্যাক করুন
  • +
  • ক্রমাগত একীকরণ এবং শূন্য ডাউনটাইম সহ অ্যাপ্লিকেশনগুলির ক্রমাগত বিতরণ
  • + +
+ +
+
+
+

যদি একটি স্থাপনা পাবলিকলি প্রকাশ করা হয়, পরিষেবাটি আপডেটের সময় শুধুমাত্র উপলব্ধ পডগুলিতে ট্র্যাফিক লোড-ব্যালেন্স করবে।

+
+
+
+ +
+ +
+
+

নিম্নলিখিত ইন্টারেক্টিভ টিউটোরিয়ালে, আমরা আমাদের অ্যাপ্লিকেশনটিকে একটি নতুন সংস্করণে আপডেট করব এবং একটি রোলব্যাকও করব৷

+
+
+
+ + + +
+ +
+ + + From a865ee853f61f785f9afeb2b7c33b2c2495afe91 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Wed, 22 Mar 2023 09:50:36 +0600 Subject: [PATCH 0077/1086] [bn] Localizes `content/bn/docs/tutorials/kubernetes-basics/_index.html` (#40097) * Create install-kubectl-linux.md * Update install-kubectl-linux.md * Update install-kubectl-linux.md * Create _index.html * Delete install-kubectl-linux.md * Update content/bn/docs/tutorials/kubernetes-basics/_index.html Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tutorials/kubernetes-basics/_index.html Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tutorials/kubernetes-basics/_index.html Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tutorials/kubernetes-basics/_index.html Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tutorials/kubernetes-basics/_index.html Co-authored-by: Md Shahriyar Al Mustakim Mitul * Update content/bn/docs/tutorials/kubernetes-basics/_index.html Co-authored-by: Md Shahriyar Al Mustakim Mitul --------- Co-authored-by: Md Shahriyar Al Mustakim Mitul --- .../tutorials/kubernetes-basics/_index.html | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/_index.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/_index.html b/content/bn/docs/tutorials/kubernetes-basics/_index.html new file mode 100644 index 0000000000..1a6a2753b7 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/_index.html @@ -0,0 +1,117 @@ +--- +title: কুবারনেটিসের বেসিক শিখুন +linkTitle: কুবারনেটিসের বেসিক শিখুন +no_list: true +weight: 10 +card: + name: tutorials + weight: 20 + title: টিউটোরিয়াল +--- + + + + + + + + + +
+ +
+ +
+
+

কুবারনেটিস বেসিক

+

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

+

ইন্টারেক্টিভ টিউটোরিয়াল ব্যবহার করে, আপনি এগুলো শিখতে পারেনঃ

+
    +
  • একটি ক্লাস্টারে একটি কন্টেইনারাইজড অ্যাপ্লিকেশন স্থাপন করুন।
  • +
  • ডিপ্লয়মেন্ট স্কেল করুন।
  • +
  • একটি নতুন সফ্টওয়্যার সংস্করণ দিয়ে কন্টেইনারাইজড অ্যাপ্লিকেশন আপডেট করুন।
  • +
  • কন্টেইনারাইজড অ্যাপ্লিকেশন ডিবাগ করুন।
  • +
+

টিউটোরিয়ালগুলি আপনার ওয়েব ব্রাউজারে একটি ভার্চুয়াল টার্মিনাল চালানোর জন্য Katacoda ব্যবহার করে যা Minikube চালায়, কুবারনেটের একটি ছোট আকারের স্থানীয় স্থাপনা যা যেকোনো জায়গায় চলতে পারে। কোন সফ্টওয়্যার ইনস্টল বা কিছু কনফিগার করার কোন প্রয়োজন নেই; প্রতিটি ইন্টারেক্টিভ টিউটোরিয়াল সরাসরি আপনার ওয়েব ব্রাউজার থেকে চলে।

+
+
+ +
+ +
+
+

কুবারনেটিস আপনার জন্য কী করতে পারে?

+

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

+
+
+ +
+ + + +
+ +
+ + + From 31cf6b61adfec815b68b10755f919033bd03f51a Mon Sep 17 00:00:00 2001 From: Pratik Kotal Date: Thu, 23 Mar 2023 23:50:32 +0530 Subject: [PATCH 0078/1086] Localizes content/en/docs/tutorials/kubernetes-basics/update/update-interactive.html to bengali (#39992) * Localizes content/en/docs/tutorials/kubernetes-basics/update/update-interactive.html Signed-off-by: PratikforCoding * Changed the required changes Signed-off-by: PratikforCoding * Update update-interactive.html * Update update-interactive.html --------- Signed-off-by: PratikforCoding --- .../update/update-interactive.html | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/update/update-interactive.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/update/update-interactive.html b/content/bn/docs/tutorials/kubernetes-basics/update/update-interactive.html new file mode 100644 index 0000000000..79894a7ec7 --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/update/update-interactive.html @@ -0,0 +1,33 @@ +--- +title: মিথস্ক্রিয় প্রশিক্ষণ - অ্যাপটিকে আধুনিক রূপ দেওয়া +weight: 20 +--- + + + + + + + +{{< katacoda-tutorial >}} + + + + + From a661457dbce70146b951692a9343d03f291a10c1 Mon Sep 17 00:00:00 2001 From: Nikhil Barik Date: Sat, 25 Mar 2023 20:29:53 +0530 Subject: [PATCH 0079/1086] [bn] Localizes data/i18n/bn/bn.toml (#40102) * Update bn.toml * Apply suggestions from code review Co-authored-by: Md Shahriyar Al Mustakim Mitul * address comments * Update bn.toml --------- Co-authored-by: Md Shahriyar Al Mustakim Mitul --- data/i18n/bn/bn.toml | 552 +++++++++++++++++++++---------------------- 1 file changed, 276 insertions(+), 276 deletions(-) diff --git a/data/i18n/bn/bn.toml b/data/i18n/bn/bn.toml index 76295d16ea..17bbff36dd 100644 --- a/data/i18n/bn/bn.toml +++ b/data/i18n/bn/bn.toml @@ -1,366 +1,366 @@ # i18n strings for the Bengali (main) site. # NOTE: Please keep the entries in alphabetical order when editing -#[auto_generated_edit_notice] -#other = "(auto-generated page)" +[auto_generated_edit_notice] +other = "(auto-generated page)" -#[auto_generated_pageinfo] -#other = """

This page is automatically generated.

If you plan to report an issue with this page, mention that the page is auto-generated in your issue description. The fix may need to happen elsewhere in the Kubernetes project.

""" +[auto_generated_pageinfo] +other = """

এই পৃষ্ঠাটি স্বয়ংক্রিয়ভাবে তৈরি হয়।

আপনি যদি এই পৃষ্ঠার সাথে একটি সমস্যা রিপোর্ট করার পরিকল্পনা করেন, তাহলে উল্লেখ করুন যে পৃষ্ঠাটি আপনার সমস্যার বিবরণে স্বয়ংক্রিয়ভাবে তৈরি হয়েছে। Kubernetes প্রজেক্টের অন্য কোথাও ঠিক করার প্রয়োজন হতে পারে।

""" -#[caution] -#other = "Caution:" +[caution] +other = "সতর্কতা:" -#[cleanup_heading] -#other = "Cleaning up" +[cleanup_heading] +other = "ক্লিনিং" -#[community_events_calendar] -#other = "Events Calendar" +[community_events_calendar] +other = "ঘটনার দিনপঞ্জিকা" -#[community_forum_name] -#other = "Forum" +[community_forum_name] +other = "ফোরাম" -#[community_github_name] -#other = "GitHub" +[community_github_name] +other = "GitHub" -#[community_slack_name] -#other = "Slack" +[community_slack_name] +other = "Slack" -#[community_stack_overflow_name] -#other = "Stack Overflow" +[community_stack_overflow_name] +other = "Stack Overflow" -#[community_twitter_name] -#other = "Twitter" +[community_twitter_name] +other = "Twitter" -#[community_youtube_name] -#other = "YouTube" +[community_youtube_name] +other = "YouTube" ## Avoid using conjunction_1. ## Must match the context in layouts/shortcodes/release-data.html ## Appears on https://kubernetes.io/releases/ ## For example the "and" in "Complete 1.25 Schedule and Changelog" -#[conjunction_1] -#other = "and" +[conjunction_1] +other = "and" -#[cve_id] -#other = "CVE ID" +[cve_id] +other = "CVE ID" -#[cve_issue_url] -#other = "CVE GitHub Issue URL" +[cve_issue_url] +other = "CVE GitHub Issue URL" -#[cve_summary] -#other = "Issue Summary" +[cve_summary] +other = "Issue Summary" -#[cve_table] -#other = "Official Kubernetes CVE List" +[cve_table] +other = "Official Kubernetes CVE List" -#[cve_table_date_format] -#other = "02 Jan 2006 15:04:05 MST" +[cve_table_date_format] +other = "02 Jan 2006 15:04:05 MST" -#[cve_table_date_format_string] -#other = "(last updated: %s)" +[cve_table_date_format_string] +other = "(last updated: %s)" -#[deprecation_title] -#other = "You are viewing documentation for Kubernetes version:" +[deprecation_title] +other = "আপনি Kubernetes সংস্করণের জন্য ডকুমেন্টেশন দেখছেন:" -#[deprecation_warning] -#other = " documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the " +[deprecation_warning] +other = " ডকুমেন্টেশন আর সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয় না। আপনি বর্তমানে যে সংস্করণটি দেখছেন সেটি একটি স্ট্যাটিক স্ন্যাপশট। আপ-টু-ডেট ডকুমেন্টেশনের জন্য, দেখুন " -#[deprecation_file_warning] -#other = "Deprecated" +[deprecation_file_warning] +other = "ডেপ্রিক্যাটেড" -#[dockershim_message] -#other = """Dockershim has been removed from the Kubernetes project as of release 1.24. Read the Dockershim Removal FAQ for further details.""" +[dockershim_message] +other = """1.24 রিলিজ হিসাবে Dockershim কুবারনেটিস প্রকল্প থেকে সরানো হয়েছে। বিস্তারি তথ্যের জন্য Dockershim Removal FAQ পড়ুন। """ -#[docs_label_browse] -#other = "Browse Docs" +[docs_label_browse] +other = "ডক্স ব্রাউজ করুন" -#[docs_label_contributors] -#other = "Contributors" +[docs_label_contributors] +other = "অবদানকারীরা" -#[docs_label_i_am] -#other = "I AM..." +[docs_label_i_am] +other = "আমি..." -#[docs_label_users] -#other = "Users" +[docs_label_users] +other = "অবদানকারীরা" -#[docs_version_current] -#other = "(this documentation)" +[docs_version_current] +other = "(এই ডকুমেন্টেশন)" -#[docs_version_latest_heading] -#other = "Latest version" +[docs_version_latest_heading] +other = "সর্বশেষ সংস্করণ" -#[docs_version_other_heading] -#other = "Older versions" +[docs_version_other_heading] +other = "পুরানো সংস্করণ" -#[end_of_life] -#other = "End of Life:" +[end_of_life] +other = "জীবনের শেষ:" -#[envvars_heading] -#other = "Environment variables" +[envvars_heading] +other = "ইন্বাইরন্মন্ট বেরীঅবল" -#[error_404_were_you_looking_for] -#other = "Were you looking for:" +[error_404_were_you_looking_for] +other = "আপনি এই খুঁজছেন:" -#[examples_heading] -#other = "Examples" +[examples_heading] +other = "উদাহরণ" -#[feature_state] -#other = "FEATURE STATE:" +[feature_state] +other = "ফীচর স্থিতি:" -#[feedback_heading] -#other = "Feedback" +[feedback_heading] +other = "প্রতিক্রিয়া" -#[feedback_no] -#other = "No" +[feedback_no] +other = "না" -#[feedback_question] -#other = "Was this page helpful?" +[feedback_question] +other = "এই পেজটি কি সহায়ক ছিল?" -#[feedback_yes] -#other = "Yes" +[feedback_yes] +other = "হ্যাঁ" -#[final_patch_release] -#other = "Final Patch Release" +[final_patch_release] +other = "চূড়ান্ত প্যাচ রিলিজ" -#[inline_list_separator] -#other = "," +[inline_list_separator] +other = "," -#[input_placeholder_email_address] -#other = "email address" +[input_placeholder_email_address] +other = "ইমেল ঠিকানা" -#[javascript_required] -#other = "JavaScript must be [enabled](https://www.enable-javascript.com/) to view this content" +[javascript_required] +other = "এই বিষয়বস্তু দেখতে JavaScript [চালু](https://www.enable-javascript.com/) থাকতে হবে" -#[latest_release] -#other = "Latest Release:" +[latest_release] +other = "সর্বশেষ রিলিজ:" -#[latest_version] -#other = "latest version." +[latest_version] +other = "সর্বশেষ সংস্করণ" -#[layouts_blog_pager_next] -#other = "Next >>" +[layouts_blog_pager_next] +other = "পরবর্তী >>" -#[layouts_blog_pager_prev] -#other = "<< Prev" +[layouts_blog_pager_prev] +other = "<< পূর্ববর্তী" -#[layouts_case_studies_list_tell] -#other = "Tell your story" +[layouts_case_studies_list_tell] +other = "আপনার স্টোরী বলুন" -#[layouts_docs_glossary_aka] -#other = "Also known as" +[layouts_docs_glossary_aka] +other = "এই নামেও পরিচিত" -#[layout_docs_glossary_architecture_description] -#other = "The inner components of Kubernetes." +[layout_docs_glossary_architecture_description] +other = "কুবারনেটসের অভ্যন্তরীণ উপাদান" -#[layout_docs_glossary_architecture_name] -#other = "Architecture" +[layout_docs_glossary_architecture_name] +other = "আর্কিটেকচার" -#[layouts_docs_glossary_click_details_after] -#other = "indicators below to get a longer explanation for any particular term." +[layouts_docs_glossary_click_details_after] +other = "কোনো নির্দিষ্ট শব্দের জন্য একটি দীর্ঘ ব্যাখ্যা পেতে নীচের সূচকগুলি" -#[layouts_docs_glossary_click_details_before] -#other = "Click on the" +[layouts_docs_glossary_click_details_before] +other = "ক্লিক করুন" -#[layout_docs_glossary_community_description] -#other = "Related to Kubernetes open-source development." +[layout_docs_glossary_community_description] +other = "Kubernetes ওপেন সোর্স ডেভেলপমেন্ট সম্পর্কিত" -#[layout_docs_glossary_community_name] -#other = "Community" +[layout_docs_glossary_community_name] +other = "কম্যূনটী" -#[layout_docs_glossary_core-object_description] -#other = "A resource type that Kubernetes supports by default." +[layout_docs_glossary_core-object_description] +other = "একটি রিসোর্স টাইপ যা কুবারনেটস ডিফল্টরূপে সমর্থন করে" -#[layout_docs_glossary_core-object_name] -#other = "Core Object" +[layout_docs_glossary_core-object_name] +other = "মূল বস্তু" -#[layouts_docs_glossary_description] -#other = "This glossary is intended to be a comprehensive, standardized list of Kubernetes terminology. It includes technical terms that are specific to Kubernetes, as well as more general terms that provide useful context." +[layouts_docs_glossary_description] +other = "এই শব্দকোষটি Kubernetes পরিভাষার একটি বিস্তৃত, প্রমিত তালিকা হওয়ার উদ্দেশ্যে করা হয়েছে। এতে প্রযুক্তিগত শব্দ রয়েছে যা কুবারনেটসের জন্য নির্দিষ্ট, সেইসাথে আরও সাধারণ শব্দ যা দরকারী প্রসঙ্গ প্রদান করে।" -#[layouts_docs_glossary_deselect_all] -#other = "Deselect all" +[layouts_docs_glossary_deselect_all] +other = "সব গুলো অনির্বাচিত কর" -#[layout_docs_glossary_extension_description] -#other = "Supported customizations of Kubernetes." +[layout_docs_glossary_extension_description] +other = "Kubernetes এর সমর্থিত কাস্টমাইজেশন।" -#[layout_docs_glossary_extension_name] -#other = "Extension" +[layout_docs_glossary_extension_name] +other = "ইক্স্টেন্শন" -#[layouts_docs_glossary_filter] -#other = "Filter terms according to their tags" +[layouts_docs_glossary_filter] +other = "তাদের ট্যাগ অনুযায়ী শর্তাবলী ফিল্টার" -#[layout_docs_glossary_fundamental_description] -#other = "Relevant for a first-time user of Kubernetes." +[layout_docs_glossary_fundamental_description] +other = "Kubernetes-এর প্রথমবারের ব্যবহারকারীর জন্য প্রাসঙ্গিক" -#[layout_docs_glossary_fundamental_name] -#other = "Fundamental" +[layout_docs_glossary_fundamental_name] +other = "মৌলিক" -#[layout_docs_glossary_networking_description] -#other = "How Kubernetes components talk to each other (and to programs outside the cluster)." +[layout_docs_glossary_networking_description] +other = "কিভাবে Kubernetes উপাদান একে অপরের সাথে কথা বলে (এবং ক্লাস্টারের বাইরের প্রোগ্রামগুলিতে)।" -#[layout_docs_glossary_networking_name] -#other = "Networking" +[layout_docs_glossary_networking_name] +other = "নেটওয়ার্কিং" -#[layout_docs_glossary_operation_description] -#other = "Starting and maintaining Kubernetes." +[layout_docs_glossary_operation_description] +other = "Kubernetes শুরু করা এবং মেন্টনন্স রাখা" -#[layout_docs_glossary_operation_name] -#other = "Operation" +[layout_docs_glossary_operation_name] +other = "অপারেশন" -#[layout_docs_glossary_security_description] -#other = "Keeping Kubernetes applications safe and secure." +[layout_docs_glossary_security_description] +other = "Kubernetes অ্যাপ্লিকেশন নিরাপদ এবং সুরক্ষিত রাখা" -#[layout_docs_glossary_security_name] -#other = "Security" +[layout_docs_glossary_security_name] +other = "নিরাপত্তা" -#[layouts_docs_glossary_select_all] -#other = "Select all" +[layouts_docs_glossary_select_all] +other = "সব নির্বাচন করুন" -#[layout_docs_glossary_storage_description] -#other = "How Kubernetes applications handle persistent data." +[layout_docs_glossary_storage_description] +other = "কুবারনেটস অ্যাপ্লিকেশনগুলি কীভাবে স্থায়ী ডেটা পরিচালনা করে" -#[layout_docs_glossary_storage_name] -#other = "Storage" +[layout_docs_glossary_storage_name] +other = "স্টোরেজ" -#[layout_docs_glossary_tool_description] -#other = "Software that makes Kubernetes easier or better to use." +[layout_docs_glossary_tool_description] +other = "সফ্টওয়্যার যা Kubernetes ব্যবহার করা সহজ বা ভাল করে তোলে" -#[layout_docs_glossary_tool_name] -#other = "Tool" +[layout_docs_glossary_tool_name] +other = "টুল" -#[layout_docs_glossary_user-type_description] -#other = "Represents a common type of Kubernetes user." +[layout_docs_glossary_user-type_description] +other = "একটি সাধারণ Kubernetes ব্যবহারকারীর প্রতিনিধিত্ব করে" -#[layout_docs_glossary_user-type_name] -#other = "User Type" +[layout_docs_glossary_user-type_name] +other = "ব্যবহারকারীর ধরন" -#[layout_docs_glossary_workload_description] -#other = "Applications running on Kubernetes." +[layout_docs_glossary_workload_description] +other = "Kubernetes এ চলমান অ্যাপ্লিকেশন" -#[layout_docs_glossary_workload_name] -#other = "Workload" +[layout_docs_glossary_workload_name] +other = "বর্ক্লোড" -#[layouts_docs_partials_feedback_improvement] -#other = "suggest an improvement" +[layouts_docs_partials_feedback_improvement] +other = "উন্নতির পরামর্শ দিন" -#[layouts_docs_partials_feedback_issue] -#other = "Open an issue in the GitHub repo if you want to " +[layouts_docs_partials_feedback_issue] +other = "আপনি চাইলে GitHub রেপোতে একটি ইশূ খুলুন " -#[layouts_docs_partials_feedback_or] -#other = "or" +[layouts_docs_partials_feedback_or] +other = "অথবা" -#[layouts_docs_partials_feedback_problem] -#other = "report a problem" +[layouts_docs_partials_feedback_problem] +other = "একটি সমস্যা রিপোর্ট করুন" -#[layouts_docs_partials_feedback_thanks] -#other = "Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on" +[layouts_docs_partials_feedback_thanks] +other = "সাহায্য করার জন্য ধন্যবাদ. কুবারনেটস কীভাবে ব্যবহার করবেন সে সম্পর্কে আপনার যদি একটি নির্দিষ্ট, উত্তরযোগ্য প্রশ্ন থাকে তবে এটি জিজ্ঞাসা করুন" -#[layouts_docs_search_fetching] -#other = "Fetching results..." +[layouts_docs_search_fetching] +other = "ফলাফল আনা হচ্ছে..." -#[main_by] -#other = "by" +[main_by] +other = "দ্বারা" -#[main_cncf_project] -#other = """We are a CNCF graduated project

""" +[main_cncf_project] +other = """Āmarā ēkaṭi CNCF গ্রৈজূএটিড প্রকল্প

""" -#[main_community_explore] -#other = "Explore the community" +[main_community_explore] +other = "কম্যূনটী অন্বেষণ করুন" -#[main_contribute] -#other = "Contribute" +[main_contribute] +other = "কন্ট্রিব্যূট করুন" -#[main_copyright_notice] -#other = """The Linux Foundation ®. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page""" +[main_copyright_notice] +other = """The Linux Foundation ®. সমস্ত অধিকার সংরক্ষিত। The Linux Foundation নিবন্ধিত ট্রেডমার্ক এবং ট্রেডমার্ক ব্যবহার করে। The Linux Foundation এর ট্রেডমার্কের তালিকার জন্য, অনুগ্রহ করে আমাদের Trademark Usage page দেখুন """ -#[main_documentation_license] -#other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0""" +[main_documentation_license] +other = """The Kubernetes Authors | ডকুমেন্টেশন CC BY 4.0 লাইসেন্সের অধীনে বিতরণ করা হয়েছে""" -#[main_github_invite] -#other = "Interested in hacking on the core Kubernetes code base?" +[main_github_invite] +other = "মূল Kubernetes কোড বেস হ্যাকিং করতে আগ্রহী?" -#[main_github_view_on] -#other = "View On GitHub" +[main_github_view_on] +other = "GitHub-এ দেখুন" -#[main_kubernetes_features] -#other = "Kubernetes Features" +[main_kubernetes_features] +other = "Kubernetes ফীচর্জ়" -#[main_kubeweekly_baseline] -#other = "Interested in receiving the latest Kubernetes news? Sign up for KubeWeekly." +[main_kubeweekly_baseline] +other = "সর্বশেষ Kubernetes খবর পেতে আগ্রহী? KubeWeekly এর জন্য সাইন আপ করুন" -#[main_kubernetes_past_link] -#other = "View past newsletters" +[main_kubernetes_past_link] +other = "অতীতের নিউজলেটার দেখুন" -#[main_kubeweekly_signup] -#other = "Subscribe" +[main_kubeweekly_signup] +other = "সাবস্ক্রাইব" -#[main_page_history] -#other ="Page History" +[main_page_history] +other ="পৃষ্ঠার ইতিহাস" -#[main_page_last_modified_on] -#other = "Page last modified on" +[main_page_last_modified_on] +other = "পৃষ্ঠায় সর্বশেষ পরিবর্তন করা হয়েছে" -#[main_read_about] -#other = "Read about" +[main_read_about] +other = "সম্পর্কে পড়ুন" -#[main_read_more] -#other = "Read more" +[main_read_more] +other = "আরও পড়ুন" -#[not_applicable] +[not_applicable] ## Localization teams: it's OK to use a longer text here -#other = "n/a" +other = "প্রযোজ্য নয়" -#[note] -#other = "Note:" +[note] +other = "বিঃদ্রঃ:" -#[objectives_heading] -#other = "Objectives" +[objectives_heading] +other = "উদ্দেশ্য" -#[options_heading] -#other = "Options" +[options_heading] +other = "বিকল্প" -#[outdated_blog__message] -#other = "This article is more than one year old. Older articles may contain outdated content. Check that the information in the page has not become incorrect since its publication." +[outdated_blog__message] +other = "এই নিবন্ধটি এক বছরেরও বেশি পুরনো। পুরানো নিবন্ধে পুরানো বিষয়বস্তু থাকতে পারে। পৃষ্ঠায় তথ্য প্রকাশের পর থেকে ভুল হয়ে গেছে তা পরীক্ষা করুন।" -#[patch_release] -#other = "Patch Release" +[patch_release] +other = "প্যাচ রিলিজ" -#[post_create_issue] -#other = "Create an issue" +[post_create_issue] +other = "একটি ইশূ তৈরি করুন" -#[prerequisites_heading] -#other = "Before you begin" +[prerequisites_heading] +other = "শুরু করার আগে" -#[previous_patches] -#other = "Patch Releases:" +[previous_patches] +other = "প্যাচ রিলিজ:" -#[release_date_after] -#other = ")" +[release_date_after] +other = ")" -#[release_date_before] -#other = "(released: " +[release_date_before] +other = "(রিলীস হয়েছিল: " -## See https://gohugo.io/functions/format/#gos-layout-string -## Use a suitable format for your locale -#[release_date_format] -#other = "2006-01-02" +# See https://gohugo.io/functions/format/gos-layout-string +# Use a suitable format for your locale +[release_date_format] +other = "2006-01-02" -#[release_cherry_pick_deadline] -#other = "Cherry Pick Deadline" +[release_cherry_pick_deadline] +other = "Cherry Pick সময়সীমা" -#[release_end_of_life_date] -#other = "End Of Life Date" +[release_end_of_life_date] +other = "End Of Life তারিখ" -#[release_full_details_initial_text] -#other = "Complete" +[release_full_details_initial_text] +other = "সম্পূর্ণ" -#[release_information_navbar] -#other = "Release Information" +[release_information_navbar] +other = "রিলিজ তথ্য" -#[release_minor_version] -#other = "Minor Version" +[release_minor_version] +other = "ক্ষুদ্র সংস্করণ" -#[release_info_next_patch] -#other = "Next patch release is **%s**." +[release_info_next_patch] +other = "পরবর্তী প্যাচ রিলিজ হয় **%s**." ## Localization note: You can use Markdown here. ## The three placeholders (in order) are: @@ -370,60 +370,60 @@ ## ## Keep this order. It is OK to use more than one sentence, and it's also OK to change the ## tense of the text so long as the meaning is clear. -#[release_info_eol] -#other = "**%s** enters maintenance mode on **%s** and End of Life is on **%s**." +[release_info_eol] +other = "**%s** enters maintenance mode on **%s** and End of Life is on **%s**." -#[release_note] -#other = "Note" +[release_note] +other = "বিঃদ্রঃ" -#[release_schedule] -#other = "Schedule" +[release_schedule] +other = "সময়সূচী" -#[release_target_date] -#other = "Target Date" +[release_target_date] +other = "লক্ষ্য তারিখ" -#[release_changelog] -#other = "Changelog" +[release_changelog] +other = "চেঞ্জলগ" -#[seealso_heading] -#other = "See Also" +[seealso_heading] +other = "আরো দেখুন" -#[subscribe_button] -#other = "Subscribe" +[subscribe_button] +other = "সাবস্ক্রাইব" -#[synopsis_heading] -#other = "Synopsis" +[synopsis_heading] +other = "সারমর্ম" -#[thirdparty_message] -#other = """This section links to third party projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for these projects, which are listed alphabetically. To add a project to this list, read the content guide before submitting a change. More information.""" +[thirdparty_message] +other = """এই বিভাগটি তৃতীয় পক্ষের (third party) প্রকল্পগুলির সাথে লিঙ্ক করে যা Kubernetes দ্বারা প্রয়োজনীয় কার্যকারিতা প্রদান করে। Kubernetes প্রকল্প লেখক এই প্রকল্পগুলির জন্য দায়ী নয়, যা বর্ণানুক্রমিকভাবে তালিকাভুক্ত করা হয়েছে। এই তালিকায় একটি প্রকল্প যোগ করতে, একটি পরিবর্তন জমা দেওয়ার আগে content guide পড়ুন। অধিক তথ্য""" -#[thirdparty_message_edit_disclaimer] -#other="""Third party content advice""" +[thirdparty_message_edit_disclaimer] +other="""তৃতীয় পক্ষের বিষয়বস্তু পরামর্শ""" -#[thirdparty_message_single_item] -#other = """🛇 This item links to a third party project or product that is not part of Kubernetes itself. More information""" +[thirdparty_message_single_item] +other = """🛇 এই আইটেমটি একটি তৃতীয় পক্ষের প্রকল্প বা পণ্যের সাথে লিঙ্ক করে যা নিজে Kubernetes এর অংশ নয়। অধিক তথ্য""" -#[thirdparty_message_disclaimer] -#other = """

Items on this page refer to third party products or projects that provide functionality required by Kubernetes. The Kubernetes project authors aren't responsible for those third-party products or projects. See the CNCF website guidelines for more details.

You should read the content guide before proposing a change that adds an extra third-party link.

""" +[thirdparty_message_disclaimer] +other = """

এই পৃষ্ঠার আইটেমগুলি তৃতীয় পক্ষের পণ্য বা প্রকল্পগুলিকে নির্দেশ করে যা কুবারনেটসের প্রয়োজনীয় কার্যকারিতা প্রদান করে। Kubernetes প্রকল্পের লেখকরা সেই তৃতীয় পক্ষের পণ্য বা প্রকল্পগুলির জন্য দায়ী নয়৷ আরো বিস্তারিত জানার জন্য CNCF website guidelines দেখুন।

একটি অতিরিক্ত তৃতীয় পক্ষের লিঙ্ক যোগ করে এমন একটি পরিবর্তন প্রস্তাব করার আগে আপনার content guide পড়া উচিত।

""" -#[ui_search_placeholder] -#other = "Search" +[ui_search_placeholder] +other = "অনুসন্ধান করুন" -#[version_check_mustbe] -#other = "Your Kubernetes server must be version " +[version_check_mustbe] +other = "আপনার Kubernetes সার্ভার সংস্করণ হতে হবে " -#[version_check_mustbeorlater] -#other = "Your Kubernetes server must be at or later than version " +[version_check_mustbeorlater] +other = "আপনার Kubernetes সার্ভার সংস্করণের চেয়ে বা তার পরে হতে হবে " -#[version_check_tocheck] -#other = "To check the version, enter " +[version_check_tocheck] +other = "সংস্করণ পরীক্ষা করতে, এন্টার করুন " -#[version_menu] -#other = "Versions" +[version_menu] +other = "সংস্করণ" -#[warning] -#other = "Warning:" +[warning] +other = "সতর্কতা:" -#[whatsnext_heading] -#other = "What's next" +[whatsnext_heading] +other = "এর পরের কি" From 63f024d5edfc5fe38dac0e94e1d18351746d6c33 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Sun, 26 Mar 2023 21:49:23 +0600 Subject: [PATCH 0080/1086] Create _index.md --- .../setup/production-environment/_index.md | 290 ++++++++++++++++++ 1 file changed, 290 insertions(+) create mode 100644 content/bn/docs/setup/production-environment/_index.md diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md new file mode 100644 index 0000000000..aeff7a64ce --- /dev/null +++ b/content/bn/docs/setup/production-environment/_index.md @@ -0,0 +1,290 @@ +--- +title: "প্রোডাকশন পরিবেশ" +description: একটি প্রোডাকশন-মানের কুবারনেটস ক্লাস্টার তৈরি করুন +weight: 30 +no_list: true +--- + + +একটি প্রোডাকশন-মানের কুবারনেটস ক্লাস্টারের জন্য পরিকল্পনা এবং প্রস্তুতি প্রয়োজন। +আপনার কুবারনেটিস ক্লাস্টার যদি সংকটপূর্ণ কাজের চাপ চালাতে হয়, তাহলে এটি অবশ্যই স্থিতিস্থাপক হওয়ার জন্য কনফিগার করতে হবে। +এই পৃষ্ঠাটি ব্যাখ্যা করে যে আপনি একটি প্রোডাকশন-প্রস্তুত ক্লাস্টার সেট আপ করতে নিতে পারেন, +অথবা প্রোডাকশন ব্যবহারের জন্য একটি বিদ্যমান ক্লাস্টার প্রচার করতে। +আপনি যদি ইতিমধ্যেই প্রোডাকশন সেটআপের সাথে পরিচিত হন এবং লিঙ্কগুলি চান তবে [পরবর্তী](#what-s-next) এ এগিয়ে যান। + + + +## প্রোডাকশন বিবেচনা + +সাধারণত, একটি প্রোডাকশন কুবারনেটিস ক্লাস্টার পরিবেশে ব্যক্তিগত শিক্ষা, উন্নয়ন, বা পরীক্ষার পরিবেশ কুবারনেটিস এর চেয়ে বেশি প্রয়োজনীয়তা থাকে। +একটি প্রোডাকশন পরিবেশের অনেক ব্যবহারকারীর নিরাপদ অ্যাক্সেস, সামঞ্জস্যপূর্ণ প্রাপ্যতা এবং পরিবর্তিত চাহিদাগুলির সাথে খাপ খাইয়ে নেওয়ার জন্য সংস্থানগুলির প্রয়োজন হতে পারে। + +As you decide where you want your production Kubernetes environment to live +(on premises or in a cloud) and the amount of management you want to take +on or hand to others, consider how your requirements for a Kubernetes cluster +are influenced by the following issues: + +- *Availability*: A single-machine Kubernetes [learning environment](/docs/setup/#learning-environment) +has a single point of failure. Creating a highly available cluster means considering: + - Separating the control plane from the worker nodes. + - Replicating the control plane components on multiple nodes. + - Load balancing traffic to the cluster’s {{< glossary_tooltip term_id="kube-apiserver" text="API server" >}}. + - Having enough worker nodes available, or able to quickly become available, as changing workloads warrant it. + +- *Scale*: If you expect your production Kubernetes environment to receive a stable amount of +demand, you might be able to set up for the capacity you need and be done. However, +if you expect demand to grow over time or change dramatically based on things like +season or special events, you need to plan how to scale to relieve increased +pressure from more requests to the control plane and worker nodes or scale down to reduce unused +resources. + +- *Security and access management*: You have full admin privileges on your own +Kubernetes learning cluster. But shared clusters with important workloads, and +more than one or two users, require a more refined approach to who and what can +access cluster resources. You can use role-based access control +([RBAC](/docs/reference/access-authn-authz/rbac/)) and other +security mechanisms to make sure that users and workloads can get access to the +resources they need, while keeping workloads, and the cluster itself, secure. +You can set limits on the resources that users and workloads can access +by managing [policies](/docs/concepts/policy/) and +[container resources](/docs/concepts/configuration/manage-resources-containers/). + +Before building a Kubernetes production environment on your own, consider +handing off some or all of this job to +[Turnkey Cloud Solutions](/docs/setup/production-environment/turnkey-solutions/) +providers or other [Kubernetes Partners](https://kubernetes.io/partners/). +Options include: + +- *Serverless*: Just run workloads on third-party equipment without managing +a cluster at all. You will be charged for things like CPU usage, memory, and +disk requests. +- *Managed control plane*: Let the provider manage the scale and availability +of the cluster's control plane, as well as handle patches and upgrades. +- *Managed worker nodes*: Configure pools of nodes to meet your needs, +then the provider makes sure those nodes are available and ready to implement +upgrades when needed. +- *Integration*: There are providers that integrate Kubernetes with other +services you may need, such as storage, container registries, authentication +methods, and development tools. + +Whether you build a production Kubernetes cluster yourself or work with +partners, review the following sections to evaluate your needs as they relate +to your cluster’s *control plane*, *worker nodes*, *user access*, and +*workload resources*. + +## Production cluster setup + +In a production-quality Kubernetes cluster, the control plane manages the +cluster from services that can be spread across multiple computers +in different ways. Each worker node, however, represents a single entity that +is configured to run Kubernetes pods. + +### Production control plane + +The simplest Kubernetes cluster has the entire control plane and worker node +services running on the same machine. You can grow that environment by adding +worker nodes, as reflected in the diagram illustrated in +[Kubernetes Components](/docs/concepts/overview/components/). +If the cluster is meant to be available for a short period of time, or can be +discarded if something goes seriously wrong, this might meet your needs. + +If you need a more permanent, highly available cluster, however, you should +consider ways of extending the control plane. By design, one-machine control +plane services running on a single machine are not highly available. +If keeping the cluster up and running +and ensuring that it can be repaired if something goes wrong is important, +consider these steps: + +- *Choose deployment tools*: You can deploy a control plane using tools such +as kubeadm, kops, and kubespray. See +[Installing Kubernetes with deployment tools](/docs/setup/production-environment/tools/) +to learn tips for production-quality deployments using each of those deployment +methods. Different [Container Runtimes](/docs/setup/production-environment/container-runtimes/) +are available to use with your deployments. +- *Manage certificates*: Secure communications between control plane services +are implemented using certificates. Certificates are automatically generated +during deployment or you can generate them using your own certificate authority. +See [PKI certificates and requirements](/docs/setup/best-practices/certificates/) for details. +- *Configure load balancer for apiserver*: Configure a load balancer +to distribute external API requests to the apiserver service instances running on different nodes. See +[Create an External Load Balancer](/docs/tasks/access-application-cluster/create-external-load-balancer/) +for details. +- *Separate and backup etcd service*: The etcd services can either run on the +same machines as other control plane services or run on separate machines, for +extra security and availability. Because etcd stores cluster configuration data, +backing up the etcd database should be done regularly to ensure that you can +repair that database if needed. +See the [etcd FAQ](https://etcd.io/docs/v3.4/faq/) for details on configuring and using etcd. +See [Operating etcd clusters for Kubernetes](/docs/tasks/administer-cluster/configure-upgrade-etcd/) +and [Set up a High Availability etcd cluster with kubeadm](/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/) +for details. +- *Create multiple control plane systems*: For high availability, the +control plane should not be limited to a single machine. If the control plane +services are run by an init service (such as systemd), each service should run on at +least three machines. However, running control plane services as pods in +Kubernetes ensures that the replicated number of services that you request +will always be available. +The scheduler should be fault tolerant, +but not highly available. Some deployment tools set up [Raft](https://raft.github.io/) +consensus algorithm to do leader election of Kubernetes services. If the +primary goes away, another service elects itself and take over. +- *Span multiple zones*: If keeping your cluster available at all times is +critical, consider creating a cluster that runs across multiple data centers, +referred to as zones in cloud environments. Groups of zones are referred to as regions. +By spreading a cluster across +multiple zones in the same region, it can improve the chances that your +cluster will continue to function even if one zone becomes unavailable. +See [Running in multiple zones](/docs/setup/best-practices/multiple-zones/) for details. +- *Manage on-going features*: If you plan to keep your cluster over time, +there are tasks you need to do to maintain its health and security. For example, +if you installed with kubeadm, there are instructions to help you with +[Certificate Management](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/) +and [Upgrading kubeadm clusters](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/). +See [Administer a Cluster](/docs/tasks/administer-cluster/) +for a longer list of Kubernetes administrative tasks. + +To learn about available options when you run control plane services, see +[kube-apiserver](/docs/reference/command-line-tools-reference/kube-apiserver/), +[kube-controller-manager](/docs/reference/command-line-tools-reference/kube-controller-manager/), +and [kube-scheduler](/docs/reference/command-line-tools-reference/kube-scheduler/) +component pages. For highly available control plane examples, see +[Options for Highly Available topology](/docs/setup/production-environment/tools/kubeadm/ha-topology/), +[Creating Highly Available clusters with kubeadm](/docs/setup/production-environment/tools/kubeadm/high-availability/), +and [Operating etcd clusters for Kubernetes](/docs/tasks/administer-cluster/configure-upgrade-etcd/). +See [Backing up an etcd cluster](/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster) +for information on making an etcd backup plan. + +### Production worker nodes + +Production-quality workloads need to be resilient and anything they rely +on needs to be resilient (such as CoreDNS). Whether you manage your own +control plane or have a cloud provider do it for you, you still need to +consider how you want to manage your worker nodes (also referred to +simply as *nodes*). + +- *Configure nodes*: Nodes can be physical or virtual machines. If you want to +create and manage your own nodes, you can install a supported operating system, +then add and run the appropriate +[Node services](/docs/concepts/overview/components/#node-components). Consider: + - The demands of your workloads when you set up nodes by having appropriate memory, CPU, and disk speed and storage capacity available. + - Whether generic computer systems will do or you have workloads that need GPU processors, Windows nodes, or VM isolation. +- *Validate nodes*: See [Valid node setup](/docs/setup/best-practices/node-conformance/) +for information on how to ensure that a node meets the requirements to join +a Kubernetes cluster. +- *Add nodes to the cluster*: If you are managing your own cluster you can +add nodes by setting up your own machines and either adding them manually or +having them register themselves to the cluster’s apiserver. See the +[Nodes](/docs/concepts/architecture/nodes/) section for information on how to set up Kubernetes to add nodes in these ways. +- *Add Windows nodes to the cluster*: Kubernetes offers support for Windows +worker nodes, allowing you to run workloads implemented in Windows containers. See +[Windows in Kubernetes](/docs/setup/production-environment/windows/) for details. +- *Scale nodes*: Have a plan for expanding the capacity your cluster will +eventually need. See [Considerations for large clusters](/docs/setup/best-practices/cluster-large/) +to help determine how many nodes you need, based on the number of pods and +containers you need to run. If you are managing nodes yourself, this can mean +purchasing and installing your own physical equipment. +- *Autoscale nodes*: Most cloud providers support +[Cluster Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#readme) +to replace unhealthy nodes or grow and shrink the number of nodes as demand requires. See the +[Frequently Asked Questions](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md) +for how the autoscaler works and +[Deployment](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#deployment) +for how it is implemented by different cloud providers. For on-premises, there +are some virtualization platforms that can be scripted to spin up new nodes +based on demand. +- *Set up node health checks*: For important workloads, you want to make sure +that the nodes and pods running on those nodes are healthy. Using the +[Node Problem Detector](/docs/tasks/debug-application-cluster/monitor-node-health/) +daemon, you can ensure your nodes are healthy. + +## Production user management + +In production, you may be moving from a model where you or a small group of +people are accessing the cluster to where there may potentially be dozens or +hundreds of people. In a learning environment or platform prototype, you might have a single +administrative account for everything you do. In production, you will want +more accounts with different levels of access to different namespaces. + +Taking on a production-quality cluster means deciding how you +want to selectively allow access by other users. In particular, you need to +select strategies for validating the identities of those who try to access your +cluster (authentication) and deciding if they have permissions to do what they +are asking (authorization): + +- *Authentication*: The apiserver can authenticate users using client +certificates, bearer tokens, an authenticating proxy, or HTTP basic auth. +You can choose which authentication methods you want to use. +Using plugins, the apiserver can leverage your organization’s existing +authentication methods, such as LDAP or Kerberos. See +[Authentication](/docs/reference/access-authn-authz/authentication/) +for a description of these different methods of authenticating Kubernetes users. +- *Authorization*: When you set out to authorize your regular users, you will probably choose between RBAC and ABAC authorization. See [Authorization Overview](/docs/reference/access-authn-authz/authorization/) to review different modes for authorizing user accounts (as well as service account access to your cluster): + - *Role-based access control* ([RBAC](/docs/reference/access-authn-authz/rbac/)): Lets you assign access to your cluster by allowing specific sets of permissions to authenticated users. Permissions can be assigned for a specific namespace (Role) or across the entire cluster (ClusterRole). Then using RoleBindings and ClusterRoleBindings, those permissions can be attached to particular users. + - *Attribute-based access control* ([ABAC](/docs/reference/access-authn-authz/abac/)): Lets you create policies based on resource attributes in the cluster and will allow or deny access based on those attributes. Each line of a policy file identifies versioning properties (apiVersion and kind) and a map of spec properties to match the subject (user or group), resource property, non-resource property (/version or /apis), and readonly. See [Examples](/docs/reference/access-authn-authz/abac/#examples) for details. + +As someone setting up authentication and authorization on your production Kubernetes cluster, here are some things to consider: + +- *Set the authorization mode*: When the Kubernetes API server +([kube-apiserver](/docs/reference/command-line-tools-reference/kube-apiserver/)) +starts, the supported authentication modes must be set using the *--authorization-mode* +flag. For example, that flag in the *kube-adminserver.yaml* file (in */etc/kubernetes/manifests*) +could be set to Node,RBAC. This would allow Node and RBAC authorization for authenticated requests. +- *Create user certificates and role bindings (RBAC)*: If you are using RBAC +authorization, users can create a CertificateSigningRequest (CSR) that can be +signed by the cluster CA. Then you can bind Roles and ClusterRoles to each user. +See [Certificate Signing Requests](/docs/reference/access-authn-authz/certificate-signing-requests/) +for details. +- *Create policies that combine attributes (ABAC)*: If you are using ABAC +authorization, you can assign combinations of attributes to form policies to +authorize selected users or groups to access particular resources (such as a +pod), namespace, or apiGroup. For more information, see +[Examples](/docs/reference/access-authn-authz/abac/#examples). +- *Consider Admission Controllers*: Additional forms of authorization for +requests that can come in through the API server include +[Webhook Token Authentication](/docs/reference/access-authn-authz/authentication/#webhook-token-authentication). +Webhooks and other special authorization types need to be enabled by adding +[Admission Controllers](/docs/reference/access-authn-authz/admission-controllers/) +to the API server. + +## Set limits on workload resources + +Demands from production workloads can cause pressure both inside and outside +of the Kubernetes control plane. Consider these items when setting up for the +needs of your cluster's workloads: + +- *Set namespace limits*: Set per-namespace quotas on things like memory and CPU. See +[Manage Memory, CPU, and API Resources](/docs/tasks/administer-cluster/manage-resources/) +for details. You can also set +[Hierarchical Namespaces](/blog/2020/08/14/introducing-hierarchical-namespaces/) +for inheriting limits. +- *Prepare for DNS demand*: If you expect workloads to massively scale up, +your DNS service must be ready to scale up as well. See +[Autoscale the DNS service in a Cluster](/docs/tasks/administer-cluster/dns-horizontal-autoscaling/). +- *Create additional service accounts*: User accounts determine what users can +do on a cluster, while a service account defines pod access within a particular +namespace. By default, a pod takes on the default service account from its namespace. +See [Managing Service Accounts](/docs/reference/access-authn-authz/service-accounts-admin/) +for information on creating a new service account. For example, you might want to: + - Add secrets that a pod could use to pull images from a particular container registry. See [Configure Service Accounts for Pods](/docs/tasks/configure-pod-container/configure-service-account/) for an example. + - Assign RBAC permissions to a service account. See [ServiceAccount permissions](/docs/reference/access-authn-authz/rbac/#service-account-permissions) for details. + +## {{% heading "whatsnext" %}} + +- Decide if you want to build your own production Kubernetes or obtain one from +available [Turnkey Cloud Solutions](/docs/setup/production-environment/turnkey-solutions/) +or [Kubernetes Partners](https://kubernetes.io/partners/). +- If you choose to build your own cluster, plan how you want to +handle [certificates](/docs/setup/best-practices/certificates/) +and set up high availability for features such as +[etcd](/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/) +and the +[API server](/docs/setup/production-environment/tools/kubeadm/ha-topology/). +- Choose from [kubeadm](/docs/setup/production-environment/tools/kubeadm/), [kops](/docs/setup/production-environment/tools/kops/) or [Kubespray](/docs/setup/production-environment/tools/kubespray/) +deployment methods. +- Configure user management by determining your +[Authentication](/docs/reference/access-authn-authz/authentication/) and +[Authorization](/docs/reference/access-authn-authz/authorization/) methods. +- Prepare for application workloads by setting up +[resource limits](/docs/tasks/administer-cluster/manage-resources/), +[DNS autoscaling](/docs/tasks/administer-cluster/dns-horizontal-autoscaling/) +and [service accounts](/docs/reference/access-authn-authz/service-accounts-admin/). From df1394dfd301cabab13ceb021c345a1cea5a6f7f Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Mon, 27 Mar 2023 16:16:15 +0600 Subject: [PATCH 0081/1086] Update _redirects --- static/_redirects | 1 + 1 file changed, 1 insertion(+) diff --git a/static/_redirects b/static/_redirects index b8b28e1948..2bb2d4719d 100644 --- a/static/_redirects +++ b/static/_redirects @@ -6,6 +6,7 @@ /concepts/containers/container-lifecycle-hooks/ /docs/concepts/containers/container-lifecycle-hooks/ 301 /docs/ /docs/home/ 301! +/bn/docs /bn/docs/home/ 301! /de/docs/ /de/docs/home/ 301! /es/docs/ /es/docs/home/ 301! /fr/docs/ /fr/docs/home/ 301! From 22ce1299903220c8c9062732b92e91982dbc8ed1 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Mon, 3 Apr 2023 19:54:06 +0000 Subject: [PATCH 0082/1086] Update _index.md --- .../setup/production-environment/_index.md | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md index aeff7a64ce..9be43a9391 100644 --- a/content/bn/docs/setup/production-environment/_index.md +++ b/content/bn/docs/setup/production-environment/_index.md @@ -16,20 +16,17 @@ no_list: true ## প্রোডাকশন বিবেচনা -সাধারণত, একটি প্রোডাকশন কুবারনেটিস ক্লাস্টার পরিবেশে ব্যক্তিগত শিক্ষা, উন্নয়ন, বা পরীক্ষার পরিবেশ কুবারনেটিস এর চেয়ে বেশি প্রয়োজনীয়তা থাকে। +সাধারণত, একটি প্রোডাকশন কুবারনেটিস ক্লাস্টার পরিবেশে ব্যক্তিগত শিক্ষা, উন্নয়ন, বা পরীক্ষার পরিবেশ কুবারনেটিস এর চেয়ে বেশি প্রয়োজনীয়তা থাকে। একটি প্রোডাকশন পরিবেশের অনেক ব্যবহারকারীর নিরাপদ অ্যাক্সেস, সামঞ্জস্যপূর্ণ প্রাপ্যতা এবং পরিবর্তিত চাহিদাগুলির সাথে খাপ খাইয়ে নেওয়ার জন্য সংস্থানগুলির প্রয়োজন হতে পারে। -As you decide where you want your production Kubernetes environment to live -(on premises or in a cloud) and the amount of management you want to take -on or hand to others, consider how your requirements for a Kubernetes cluster -are influenced by the following issues: +আপনি যখন সিদ্ধান্ত নিচ্ছেন যে আপনি আপনার উৎপাদন কুবারনেটস পরিবেশ কোথায় রাখতে চান (প্রাঙ্গনে বা ক্লাউডে) এবং আপনি যে পরিমাণ ব্যবস্থাপনা নিতে চান বা অন্যদের হাতে দিতে চান, বিবেচনা করুন কিভাবে একটি কুবারনেটিস ক্লাস্টারের জন্য আপনার প্রয়োজনীয়তা নিম্নলিখিত সমস্যাগুলির দ্বারা প্রভাবিত হয়: -- *Availability*: A single-machine Kubernetes [learning environment](/docs/setup/#learning-environment) -has a single point of failure. Creating a highly available cluster means considering: - - Separating the control plane from the worker nodes. - - Replicating the control plane components on multiple nodes. - - Load balancing traffic to the cluster’s {{< glossary_tooltip term_id="kube-apiserver" text="API server" >}}. - - Having enough worker nodes available, or able to quickly become available, as changing workloads warrant it. +- *প্রাপ্যতা*: একটি একক-মেশিন কুবারনেটিস [লার্নিং এনভায়রনমেন্ট](/docs/setup/#learning-environment) +ব্যর্থতার একক পয়েন্ট আছে। একটি অত্যন্ত উপলব্ধ ক্লাস্টার তৈরি করার অর্থ বিবেচনা করা: + - কর্মী নোড থেকে নিয়ন্ত্রণ সমতল পৃথক করা। + - একাধিক নোডগুলিতে নিয়ন্ত্রণ সমতল উপাদানগুলির প্রতিলিপি করা। + - ক্লাস্টারের {{< glossary_tooltip term_id="kube-apiserver" text="API সার্ভার" >}}-এ ব্যালেন্সিং ট্রাফিক লোড করুন৷ + - পর্যাপ্ত কর্মী নোড উপলব্ধ থাকা, বা দ্রুত উপলব্ধ হতে সক্ষম, কারণ পরিবর্তিত কাজের চাপ এটি নিশ্চিত করে। - *Scale*: If you expect your production Kubernetes environment to receive a stable amount of demand, you might be able to set up for the capacity you need and be done. However, From 9bb85d92995541cd619368c3ad835cf2148a7dcb Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Mon, 10 Apr 2023 14:30:42 +0000 Subject: [PATCH 0083/1086] Update _index.md --- content/bn/docs/setup/production-environment/_index.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md index 9be43a9391..a3ff024116 100644 --- a/content/bn/docs/setup/production-environment/_index.md +++ b/content/bn/docs/setup/production-environment/_index.md @@ -28,12 +28,7 @@ no_list: true - ক্লাস্টারের {{< glossary_tooltip term_id="kube-apiserver" text="API সার্ভার" >}}-এ ব্যালেন্সিং ট্রাফিক লোড করুন৷ - পর্যাপ্ত কর্মী নোড উপলব্ধ থাকা, বা দ্রুত উপলব্ধ হতে সক্ষম, কারণ পরিবর্তিত কাজের চাপ এটি নিশ্চিত করে। -- *Scale*: If you expect your production Kubernetes environment to receive a stable amount of -demand, you might be able to set up for the capacity you need and be done. However, -if you expect demand to grow over time or change dramatically based on things like -season or special events, you need to plan how to scale to relieve increased -pressure from more requests to the control plane and worker nodes or scale down to reduce unused -resources. +- *স্কেল*: আপনি যদি আশা করেন আপনার প্রোডাকশন কুবারনেটিস পরিবেশ একটি স্থিতিশীল পরিমাণে চাহিদা পাবে, তাহলে আপনি আপনার প্রয়োজনীয় ক্ষমতার জন্য সেট আপ করতে সক্ষম হবেন এবং সম্পন্ন হবে। কিন্তু, আপনি যদি সময়ের সাথে সাথে চাহিদা বাড়তে বা ঋতু বা বিশেষ ইভেন্টের মতো বিষয়গুলির উপর ভিত্তি করে নাটকীয়ভাবে পরিবর্তনের আশা করেন, তাহলে আপনাকে পরিকল্পনা করতে হবে কীভাবে বৃদ্ধির উপশম করতে হবে কন্ট্রোল প্লেন এবং কর্মী নোডগুলিতে আরও অনুরোধ থেকে চাপ বা অব্যবহৃত সংস্থানগুলি কমাতে স্কেল ডাউন। - *Security and access management*: You have full admin privileges on your own Kubernetes learning cluster. But shared clusters with important workloads, and From 469d33ecd361c5e4f1da598d99252bfe981d7550 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Mon, 10 Apr 2023 15:11:29 +0000 Subject: [PATCH 0084/1086] Update _index.md --- .../setup/production-environment/_index.md | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md index a3ff024116..57f6dbb034 100644 --- a/content/bn/docs/setup/production-environment/_index.md +++ b/content/bn/docs/setup/production-environment/_index.md @@ -28,18 +28,14 @@ no_list: true - ক্লাস্টারের {{< glossary_tooltip term_id="kube-apiserver" text="API সার্ভার" >}}-এ ব্যালেন্সিং ট্রাফিক লোড করুন৷ - পর্যাপ্ত কর্মী নোড উপলব্ধ থাকা, বা দ্রুত উপলব্ধ হতে সক্ষম, কারণ পরিবর্তিত কাজের চাপ এটি নিশ্চিত করে। -- *স্কেল*: আপনি যদি আশা করেন আপনার প্রোডাকশন কুবারনেটিস পরিবেশ একটি স্থিতিশীল পরিমাণে চাহিদা পাবে, তাহলে আপনি আপনার প্রয়োজনীয় ক্ষমতার জন্য সেট আপ করতে সক্ষম হবেন এবং সম্পন্ন হবে। কিন্তু, আপনি যদি সময়ের সাথে সাথে চাহিদা বাড়তে বা ঋতু বা বিশেষ ইভেন্টের মতো বিষয়গুলির উপর ভিত্তি করে নাটকীয়ভাবে পরিবর্তনের আশা করেন, তাহলে আপনাকে পরিকল্পনা করতে হবে কীভাবে বৃদ্ধির উপশম করতে হবে কন্ট্রোল প্লেন এবং কর্মী নোডগুলিতে আরও অনুরোধ থেকে চাপ বা অব্যবহৃত সংস্থানগুলি কমাতে স্কেল ডাউন। +- *স্কেল*: আপনি যদি আশা করেন আপনার প্রোডাকশন কুবারনেটিস পরিবেশ একটি স্থিতিশীল পরিমাণে চাহিদা পাবে, তাহলে আপনি আপনার প্রয়োজনীয় ক্ষমতার জন্য সেট আপ করতে সক্ষম হবেন এবং সম্পন্ন হবে। কিন্তু, আপনি যদি সময়ের সাথে সাথে চাহিদা বাড়তে বা সিজন বা বিশেষ ইভেন্টের মতো বিষয়গুলির উপর ভিত্তি করে নাটকীয়ভাবে পরিবর্তনের আশা করেন, তাহলে আপনাকে পরিকল্পনা করতে হবে কীভাবে বৃদ্ধির উপশম করতে হবে কন্ট্রোল প্লেন এবং কর্মী নোডগুলিতে আরও অনুরোধ থেকে চাপ বা অব্যবহৃত সংস্থানগুলি কমাতে স্কেল ডাউন। -- *Security and access management*: You have full admin privileges on your own -Kubernetes learning cluster. But shared clusters with important workloads, and -more than one or two users, require a more refined approach to who and what can -access cluster resources. You can use role-based access control -([RBAC](/docs/reference/access-authn-authz/rbac/)) and other -security mechanisms to make sure that users and workloads can get access to the -resources they need, while keeping workloads, and the cluster itself, secure. -You can set limits on the resources that users and workloads can access -by managing [policies](/docs/concepts/policy/) and -[container resources](/docs/concepts/configuration/manage-resources-containers/). +- *নিরাপত্তা এবং অ্যাক্সেস ম্যানেজমেন্ট*: আপনার নিজস্ব কুবারনেটিস লার্নিং ক্লাস্টারে আপনার সম্পূর্ণ অ্যাডমিন সুবিধা রয়েছে। কিন্তু গুরুত্বপূর্ণ কাজের চাপ সহ ভাগ করা ক্লাস্টার, এবং এক বা দুইজনের বেশি ব্যবহারকারীর জন্য কে এবং কি ক্লাস্টার সংস্থান অ্যাক্সেস করতে পারে, তার জন্য আরও পরিমার্জিত পদ্ধতির প্রয়োজন। আপনি ভূমিকা-ভিত্তিক অ্যাক্সেস কন্ট্রোল ([RBAC](/docs/reference/access-authn-authz/rbac/)) এবং অন্যান্য নিরাপত্তা ব্যবস্থা ব্যবহার করতে পারেন যাতে ব্যবহারকারী এবং কাজের চাপ তাদের প্রয়োজনীয় সংস্থানগুলিতে অ্যাক্সেস পেতে পারে, পাশাপাশি কাজের চাপ, এবং ক্লাস্টার নিরাপদ থাকে। +আপনি [নীতি](/docs/concepts/policy/) এবং পরিচালনার মাধ্যমে ব্যবহারকারী এবং কাজের চাপ অ্যাক্সেস করতে পারে এমন সংস্থানগুলির সীমা নির্ধারণ করতে পারেন এবং +[কনটেইনার সম্পদ](/docs/concepts/configuration/manage-resources-containers/)। + +নিজের হাতে একটি কুবারনেটস উৎপাদন পরিবেশ তৈরি করার আগে, এই কাজটির কিছু বা সমস্ত কাজ [টার্নকি ক্লাউড সলিউশন](/docs/setup/production-environment/turnkey-solutions/) প্রদানকারী বা অন্যান্য [কুবারনেটিস পার্টনার](https://kubernetes.io/partners/) এর কাছে হস্তান্তর করার কথা বিবেচনা করুন। +বিকল্পগুলোর মধ্যে রয়েছেঃ Before building a Kubernetes production environment on your own, consider handing off some or all of this job to From 0272c9d1a92cf9d9633671a2aac208ef2cc09802 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak <36653429+Acesif@users.noreply.github.com> Date: Mon, 10 Apr 2023 15:12:08 +0000 Subject: [PATCH 0085/1086] Update _index.md --- content/bn/docs/setup/production-environment/_index.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md index 57f6dbb034..55f4258a27 100644 --- a/content/bn/docs/setup/production-environment/_index.md +++ b/content/bn/docs/setup/production-environment/_index.md @@ -37,12 +37,6 @@ no_list: true নিজের হাতে একটি কুবারনেটস উৎপাদন পরিবেশ তৈরি করার আগে, এই কাজটির কিছু বা সমস্ত কাজ [টার্নকি ক্লাউড সলিউশন](/docs/setup/production-environment/turnkey-solutions/) প্রদানকারী বা অন্যান্য [কুবারনেটিস পার্টনার](https://kubernetes.io/partners/) এর কাছে হস্তান্তর করার কথা বিবেচনা করুন। বিকল্পগুলোর মধ্যে রয়েছেঃ -Before building a Kubernetes production environment on your own, consider -handing off some or all of this job to -[Turnkey Cloud Solutions](/docs/setup/production-environment/turnkey-solutions/) -providers or other [Kubernetes Partners](https://kubernetes.io/partners/). -Options include: - - *Serverless*: Just run workloads on third-party equipment without managing a cluster at all. You will be charged for things like CPU usage, memory, and disk requests. From 20251d0f9293bc3b9d5651ca5c9702c7308bfedd Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak Date: Mon, 17 Apr 2023 01:38:01 +0600 Subject: [PATCH 0086/1086] Update _index.md --- .../setup/production-environment/_index.md | 162 ++++++------------ 1 file changed, 53 insertions(+), 109 deletions(-) diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md index 55f4258a27..2a8a7dc30c 100644 --- a/content/bn/docs/setup/production-environment/_index.md +++ b/content/bn/docs/setup/production-environment/_index.md @@ -37,126 +37,70 @@ no_list: true নিজের হাতে একটি কুবারনেটস উৎপাদন পরিবেশ তৈরি করার আগে, এই কাজটির কিছু বা সমস্ত কাজ [টার্নকি ক্লাউড সলিউশন](/docs/setup/production-environment/turnkey-solutions/) প্রদানকারী বা অন্যান্য [কুবারনেটিস পার্টনার](https://kubernetes.io/partners/) এর কাছে হস্তান্তর করার কথা বিবেচনা করুন। বিকল্পগুলোর মধ্যে রয়েছেঃ -- *Serverless*: Just run workloads on third-party equipment without managing -a cluster at all. You will be charged for things like CPU usage, memory, and -disk requests. -- *Managed control plane*: Let the provider manage the scale and availability -of the cluster's control plane, as well as handle patches and upgrades. -- *Managed worker nodes*: Configure pools of nodes to meet your needs, -then the provider makes sure those nodes are available and ready to implement -upgrades when needed. -- *Integration*: There are providers that integrate Kubernetes with other -services you may need, such as storage, container registries, authentication -methods, and development tools. +- *সার্ভারলেস*: কোনও ক্লাস্টার পরিচালনা না করেই তৃতীয় পক্ষের সরঞ্জামগুলিতে কাজের চাপ চালান। সিপিউ ব্যবহার, মেমরি এবং ডিস্ক অনুরোধের মতো জিনিসগুলির জন্য আপনাকে চার্জ করা হবে। +- *পরিচালিত কন্ট্রোল প্লেন*: প্রদানকারীকে ক্লাস্টারের কন্ট্রোল প্লেনের স্কেল এবং প্রাপ্যতা, সেইসাথে প্যাচ এবং আপগ্রেডগুলি পরিচালনা করতে দিন। +- *পরিচালিত কর্মী নোড*: আপনার প্রয়োজন মেটাতে নোডগুলির পুল কনফিগার করুন, তারপর প্রদানকারী নিশ্চিত করে যে সেই নোডগুলি উপলব্ধ এবং প্রয়োজনের সময় আপগ্রেড বাস্তবায়নের জন্য প্রস্তুত। +- *ইন্টিগ্রেশন*: এমন প্রোভাইডার আছে যারা কুবারনেটসকে আপনার প্রয়োজন হতে পারে এমন অন্যান্য পরিষেবার সাথে একীভূত করে, যেমন স্টোরেজ, কনটেইনার রেজিস্ট্রি, প্রমাণীকরণ পদ্ধতি এবং ডেভেলপমেন্ট টুল। -Whether you build a production Kubernetes cluster yourself or work with -partners, review the following sections to evaluate your needs as they relate -to your cluster’s *control plane*, *worker nodes*, *user access*, and -*workload resources*. +আপনি নিজে একটি প্রোডাকশন কুবারনেটস ক্লাস্টার তৈরি করুন বা অংশীদারদের সাথে কাজ করুন না কেন, আপনার ক্লাস্টারের *কন্ট্রোল প্লেন*, *ওয়ার্কার নোড*, *ব্যবহারকারীর অ্যাক্সেস* এবং *ওয়ার্কলোড রিসোর্স* এর সাথে সম্পর্কিত আপনার চাহিদাগুলি মূল্যায়ন করতে নিম্নলিখিত বিভাগগুলি পর্যালোচনা করুন। -## Production cluster setup +## উৎপাদন ক্লাস্টার সেটআপ -In a production-quality Kubernetes cluster, the control plane manages the -cluster from services that can be spread across multiple computers -in different ways. Each worker node, however, represents a single entity that -is configured to run Kubernetes pods. +একটি উৎপাদন-মানের কুবারনেটস ক্লাস্টারে, কন্ট্রোল প্লেন পরিষেবাগুলি থেকে ক্লাস্টার পরিচালনা করে যা একাধিক কম্পিউটারে বিভিন্ন উপায়ে ছড়িয়ে পড়তে পারে। প্রতিটি কর্মী নোড, তবে, একটি একক সত্তাকে প্রতিনিধিত্ব করে যা কুবারনেটস পড চালানোর জন্য কনফিগার করা হয়েছে। -### Production control plane +### উৎপাদন নিয়ন্ত্রণ প্লেন -The simplest Kubernetes cluster has the entire control plane and worker node -services running on the same machine. You can grow that environment by adding -worker nodes, as reflected in the diagram illustrated in -[Kubernetes Components](/docs/concepts/overview/components/). -If the cluster is meant to be available for a short period of time, or can be -discarded if something goes seriously wrong, this might meet your needs. +সহজতম কুবারনেটিস ক্লাস্টারে একই মেশিনে পুরো নিয়ন্ত্রণ সমতল এবং কর্মী নোড পরিষেবাগুলি চলছে। আপনি কর্মী নোডগুলি যোগ করে সেই পরিবেশটি বৃদ্ধি করতে পারেন, যেমনটি [কুবারনেটিস উপাদান](/docs/concepts/overview/components/) এ চিত্রিত চিত্রে প্রতিফলিত হয়েছে। -If you need a more permanent, highly available cluster, however, you should -consider ways of extending the control plane. By design, one-machine control -plane services running on a single machine are not highly available. -If keeping the cluster up and running -and ensuring that it can be repaired if something goes wrong is important, -consider these steps: +যদি ক্লাস্টারটি অল্প সময়ের জন্য উপলভ্য থাকে বা কিছু গুরুতর ভুল হয়ে গেলে তা বাতিল করা যেতে পারে, তাহলে এটি আপনার প্রয়োজন মেটাতে পারে। -- *Choose deployment tools*: You can deploy a control plane using tools such -as kubeadm, kops, and kubespray. See -[Installing Kubernetes with deployment tools](/docs/setup/production-environment/tools/) -to learn tips for production-quality deployments using each of those deployment -methods. Different [Container Runtimes](/docs/setup/production-environment/container-runtimes/) -are available to use with your deployments. -- *Manage certificates*: Secure communications between control plane services -are implemented using certificates. Certificates are automatically generated -during deployment or you can generate them using your own certificate authority. -See [PKI certificates and requirements](/docs/setup/best-practices/certificates/) for details. -- *Configure load balancer for apiserver*: Configure a load balancer -to distribute external API requests to the apiserver service instances running on different nodes. See -[Create an External Load Balancer](/docs/tasks/access-application-cluster/create-external-load-balancer/) -for details. -- *Separate and backup etcd service*: The etcd services can either run on the -same machines as other control plane services or run on separate machines, for -extra security and availability. Because etcd stores cluster configuration data, -backing up the etcd database should be done regularly to ensure that you can -repair that database if needed. -See the [etcd FAQ](https://etcd.io/docs/v3.4/faq/) for details on configuring and using etcd. -See [Operating etcd clusters for Kubernetes](/docs/tasks/administer-cluster/configure-upgrade-etcd/) -and [Set up a High Availability etcd cluster with kubeadm](/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/) -for details. -- *Create multiple control plane systems*: For high availability, the -control plane should not be limited to a single machine. If the control plane -services are run by an init service (such as systemd), each service should run on at -least three machines. However, running control plane services as pods in -Kubernetes ensures that the replicated number of services that you request -will always be available. -The scheduler should be fault tolerant, -but not highly available. Some deployment tools set up [Raft](https://raft.github.io/) -consensus algorithm to do leader election of Kubernetes services. If the -primary goes away, another service elects itself and take over. -- *Span multiple zones*: If keeping your cluster available at all times is -critical, consider creating a cluster that runs across multiple data centers, -referred to as zones in cloud environments. Groups of zones are referred to as regions. -By spreading a cluster across -multiple zones in the same region, it can improve the chances that your -cluster will continue to function even if one zone becomes unavailable. -See [Running in multiple zones](/docs/setup/best-practices/multiple-zones/) for details. -- *Manage on-going features*: If you plan to keep your cluster over time, -there are tasks you need to do to maintain its health and security. For example, -if you installed with kubeadm, there are instructions to help you with -[Certificate Management](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/) -and [Upgrading kubeadm clusters](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/). -See [Administer a Cluster](/docs/tasks/administer-cluster/) -for a longer list of Kubernetes administrative tasks. +আপনার যদি আরও স্থায়ী, অত্যন্ত উপলব্ধ ক্লাস্টারের প্রয়োজন হয় তবে, আপনার নিয়ন্ত্রণ সমতল প্রসারিত করার উপায়গুলি বিবেচনা করা উচিত। নকশা অনুসারে, একক মেশিনে চলমান এক-মেশিন নিয়ন্ত্রণ বিমান পরিষেবাগুলি খুব বেশি উপলব্ধ নয়। +যদি ক্লাস্টার চালু রাখা এবং চালানো এবং কিছু ভুল হলে তা মেরামত করা যায় তা নিশ্চিত করা গুরুত্বপূর্ণ, এই পদক্ষেপগুলি বিবেচনা করুনঃ -To learn about available options when you run control plane services, see -[kube-apiserver](/docs/reference/command-line-tools-reference/kube-apiserver/), -[kube-controller-manager](/docs/reference/command-line-tools-reference/kube-controller-manager/), -and [kube-scheduler](/docs/reference/command-line-tools-reference/kube-scheduler/) -component pages. For highly available control plane examples, see -[Options for Highly Available topology](/docs/setup/production-environment/tools/kubeadm/ha-topology/), -[Creating Highly Available clusters with kubeadm](/docs/setup/production-environment/tools/kubeadm/high-availability/), -and [Operating etcd clusters for Kubernetes](/docs/tasks/administer-cluster/configure-upgrade-etcd/). -See [Backing up an etcd cluster](/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster) -for information on making an etcd backup plan. +- *ডিপ্লয়মেন্ট টুলস চয়ন করুন*: আপনি kubeadm, kops এবং kubespray এর মত টুল ব্যবহার করে একটি কন্ট্রোল প্লেন স্থাপন করতে পারেন। দেখা +[ডিপ্লয়মেন্ট টুলের সাথে কুবারনেটস ইনস্টল করা হচ্ছে](/docs/setup/production-environment/tools/) +প্রতিটি স্থাপনার পদ্ধতি ব্যবহার করে উৎপাদন-মানের স্থাপনার জন্য টিপস শিখতে। ভিন্ন [কন্টেইনার রানটাইমস](/docs/setup/production-environment/container-runtimes/) +আপনার স্থাপনার সাথে ব্যবহার করার জন্য উপলব্ধ। +- *শংসাপত্র পরিচালনা করুন*: নিয়ন্ত্রণ বিমান পরিষেবাগুলির মধ্যে সুরক্ষিত যোগাযোগ শংসাপত্র ব্যবহার করে প্রয়োগ করা হয়। শংসাপত্রগুলি স্থাপনের সময় স্বয়ংক্রিয়ভাবে তৈরি হয় বা আপনি আপনার নিজের শংসাপত্র কর্তৃপক্ষ ব্যবহার করে সেগুলি তৈরি করতে পারেন৷ +বিস্তারিত জানার জন্য [PKI সার্টিফিকেট এবং প্রয়োজনীয়তা](/docs/setup/best-practices/certificates/) দেখুন। +- *এপিআইসার্ভার জন্য লোড ব্যালেন্সার কনফিগার করুন*: একটি লোড ব্যালেন্সার কনফিগার করুন +বিভিন্ন নোডে চলমান এপিআইসার্ভার পরিষেবা দৃষ্টান্তগুলিতে বাহ্যিক API অনুরোধগুলি বিতরণ করতে। বিস্তারিত জানার জন্য [একটি বহিরাগত লোড ব্যালেন্সার তৈরি করুন](/docs/tasks/access-application-cluster/create-external-load-balancer/) দেখুন। +- *পৃথক এবং ব্যাকআপ etcd পরিষেবা*: etcd পরিষেবাগুলি হয় অন্যান্য কন্ট্রোল প্লেন পরিষেবাগুলির মতো একই মেশিনে চালানো যেতে পারে বা অতিরিক্ত নিরাপত্তা এবং প্রাপ্যতার জন্য আলাদা মেশিনে চলতে পারে৷ যেহেতু etcd ক্লাস্টার কনফিগারেশন ডেটা সঞ্চয় করে, তাই etcd ডাটাবেসের ব্যাকআপ নিয়মিত করা উচিত যাতে আপনি প্রয়োজনে সেই ডাটাবেসটি মেরামত করতে পারেন। +etcd কনফিগার এবং ব্যবহার সম্পর্কে বিস্তারিত জানার জন্য [etcd FAQ](https://etcd.io/docs/v3.4/faq/) দেখুন। +[Kubernetes-এর জন্য অপারেটিং etcd ক্লাস্টার](/docs/tasks/administer-cluster/configure-upgrade-etcd/) দেখুন এবং [kubeadm-এর সাথে একটি উচ্চ প্রাপ্যতা etcd ক্লাস্টার সেট আপ করুন](/docs/setup/production-environment/tools/kubeadm /setup-ha-etcd-with-kubeadm/) +বিস্তারিত জানার জন্য. +- *একাধিক কন্ট্রোল প্লেন সিস্টেম তৈরি করুন*: উচ্চ প্রাপ্যতার জন্য, +নিয়ন্ত্রণ সমতল একটি একক মেশিনে সীমাবদ্ধ করা উচিত নয়। যদি কন্ট্রোল প্লেন পরিষেবাগুলি একটি init পরিষেবা দ্বারা চালিত হয় (যেমন systemd), প্রতিটি পরিষেবা কমপক্ষে তিনটি মেশিনে চালানো উচিত। যাইহোক, Kubernetes-এ পড হিসাবে কন্ট্রোল প্লেন পরিষেবাগুলি চালানো নিশ্চিত করে যে আপনার অনুরোধ করা পরিষেবাগুলির প্রতিলিপিকৃত সংখ্যা সর্বদা উপলব্ধ থাকবে। +সময়সূচী ত্রুটি সহনশীল হতে হবে, কিন্তু অত্যন্ত উপলব্ধ নয়। কিছু স্থাপনার টুল সেট আপ করা [Raft](https://raft.github.io/) কুবারনেটিস পরিষেবার নেতা নির্বাচন করতে ঐক্যমত্য অ্যালগরিদম। যদি প্রাইমারি চলে যায়, অন্য সার্ভিস নিজেই নির্বাচন করে এবং দায়িত্ব নেয়। +- *একাধিক অঞ্চল স্প্যান করুন*: যদি আপনার ক্লাস্টারকে সর্বদা উপলব্ধ রাখা গুরুত্বপূর্ণ হয়, তবে একটি ক্লাস্টার তৈরি করার কথা বিবেচনা করুন যা একাধিক ডেটা সেন্টার জুড়ে চলে, ক্লাউড পরিবেশে অঞ্চল হিসাবে উল্লেখ করা হয়। অঞ্চলগুলির গ্রুপগুলিকে অঞ্চল হিসাবে উল্লেখ করা হয়। +একই অঞ্চলে একাধিক অঞ্চলে একটি ক্লাস্টার ছড়িয়ে দেওয়ার মাধ্যমে, এটি একটি জোন অনুপলব্ধ হয়ে গেলেও আপনার ক্লাস্টারটি কাজ করা চালিয়ে যাওয়ার সম্ভাবনাকে উন্নত করতে পারে। +বিস্তারিত জানার জন্য [একাধিক জোনে চলমান](/docs/setup/best-practices/multiple-zones/) দেখুন। +- *চলমান বৈশিষ্ট্যগুলি পরিচালনা করুন*: আপনি যদি সময়ের সাথে সাথে আপনার ক্লাস্টার রাখার পরিকল্পনা করেন তবে এর স্বাস্থ্য এবং নিরাপত্তা বজায় রাখার জন্য আপনাকে কিছু কাজ করতে হবে। উদাহরণ স্বরূপ, +আপনি kubeadm এর সাথে ইনস্টল করলে, আপনাকে সাহায্য করার জন্য নির্দেশাবলী রয়েছে +[শংসাপত্র ব্যবস্থাপনা](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/) +এবং [kubeadm ক্লাস্টার আপগ্রেড করা](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/)। +কুবারনেটিস প্রশাসনিক কাজগুলির একটি দীর্ঘ তালিকার জন্য [ক্লাস্টার অ্যাডমিনিস্টার](/docs/tasks/administer-cluster/) দেখুন। -### Production worker nodes +আপনি যখন কন্ট্রোল প্লেন পরিষেবাগুলি চালান তখন উপলব্ধ বিকল্পগুলি সম্পর্কে জানতে, দেখুন [kube-apisserver](/docs/reference/command-line-tools-reference/kube-apiserver/), +[কুব-কন্ট্রোলার-ম্যানেজার](/docs/reference/command-line-tools-reference/kube-controller-manager/), +এবং [কুব-শিডিউলার](/docs/reference/command-line-tools-reference/kube-scheduler/) +উপাদান পৃষ্ঠা। অত্যন্ত উপলব্ধ নিয়ন্ত্রণ সমতল উদাহরণের জন্য, দেখুন +[অত্যন্ত উপলব্ধ টপোলজির জন্য বিকল্পগুলি](/docs/setup/production-environment/tools/kubeadm/ha-topology/), +[kubeadm-এর সাহায্যে অত্যন্ত উপলভ্য ক্লাস্টার তৈরি করা](/docs/setup/production-environment/tools/kubeadm/high-availability/), +এবং [Kubernetes-এর জন্য অপারেটিং etcd ক্লাস্টার](/docs/tasks/administer-cluster/configure-upgrade-etcd/)। +দেখুন [একটি etcd ক্লাস্টার ব্যাক আপ করা](/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster) +একটি etcd ব্যাকআপ পরিকল্পনা তৈরির তথ্যের জন্য। -Production-quality workloads need to be resilient and anything they rely -on needs to be resilient (such as CoreDNS). Whether you manage your own -control plane or have a cloud provider do it for you, you still need to -consider how you want to manage your worker nodes (also referred to -simply as *nodes*). +### প্রোডাকশন ওয়ার্কার নোড -- *Configure nodes*: Nodes can be physical or virtual machines. If you want to -create and manage your own nodes, you can install a supported operating system, -then add and run the appropriate -[Node services](/docs/concepts/overview/components/#node-components). Consider: - - The demands of your workloads when you set up nodes by having appropriate memory, CPU, and disk speed and storage capacity available. - - Whether generic computer systems will do or you have workloads that need GPU processors, Windows nodes, or VM isolation. -- *Validate nodes*: See [Valid node setup](/docs/setup/best-practices/node-conformance/) -for information on how to ensure that a node meets the requirements to join -a Kubernetes cluster. -- *Add nodes to the cluster*: If you are managing your own cluster you can -add nodes by setting up your own machines and either adding them manually or -having them register themselves to the cluster’s apiserver. See the -[Nodes](/docs/concepts/architecture/nodes/) section for information on how to set up Kubernetes to add nodes in these ways. +উৎপাদন-গুণমানের কাজের চাপ স্থিতিস্থাপক হতে হবে এবং তারা যেকোন কিছুর উপর নির্ভর করে স্থিতিস্থাপক হতে হবে (যেমন CoreDNS)। আপনি নিজের কন্ট্রোল প্লেন পরিচালনা করুন বা একটি ক্লাউড প্রদানকারী আপনার জন্য এটি করুন, আপনাকে এখনও বিবেচনা করতে হবে কিভাবে আপনি আপনার কর্মী নোডগুলি পরিচালনা করতে চান (এছাড়াও সহজভাবে *নোড* হিসাবে উল্লেখ করা হয়)। + +- *নোডগুলি কনফিগার করুন*: নোডগুলি শারীরিক বা ভার্চুয়াল মেশিন হতে পারে। আপনি যদি নিজের নোডগুলি তৈরি করতে এবং পরিচালনা করতে চান তবে আপনি একটি সমর্থিত অপারেটিং সিস্টেম ইনস্টল করতে পারেন, তারপরে উপযুক্ত যোগ করুন এবং চালান +[নোড পরিষেবাগুলি](/docs/concepts/overview/components/#node-components)। বিবেচনা করুন: + - উপযুক্ত মেমরি, সিপিউ, এবং ডিস্কের গতি এবং স্টোরেজ ক্ষমতা উপলব্ধ থাকার মাধ্যমে আপনি যখন নোড সেট আপ করেন তখন আপনার কাজের চাপের চাহিদা। + - জেনেরিক কম্পিউটার সিস্টেমগুলি করবে কিনা বা আপনার কাছে এমন কাজের চাপ আছে যেগুলির জন্য জিপিউ প্রসেসর, উইন্ডোজ নোড, বা ভিএম বিচ্ছিন্নতা প্রয়োজন। +- *ভ্যালিডেট নোড*: কিভাবে একটি নোড একটি কুবারনেটিস ক্লাস্টারে যোগদানের প্রয়োজনীয়তা পূরণ করে তা নিশ্চিত করার জন্য তথ্যের জন্য [ভ্যালিড নোড সেটআপ](/docs/setup/best-practices/node-conformance/) দেখুন। +- *ক্লাস্টারে নোড যোগ করুন*: আপনি যদি নিজের ক্লাস্টার পরিচালনা করেন তাহলে আপনি আপনার নিজস্ব মেশিন সেট আপ করে নোড যোগ করতে পারেন এবং হয় সেগুলিকে ম্যানুয়ালি যোগ করে অথবা ক্লাস্টারের এপিসার্ভারে নিজেদের নিবন্ধন করতে পারেন। এই উপায়ে নোড যোগ করার জন্য Kubernetes কিভাবে সেট আপ করতে হয় সে সম্পর্কে তথ্যের জন্য [নোডসমুহ](/docs/concepts/architecture/nodes/) বিভাগটি দেখুন। - *Add Windows nodes to the cluster*: Kubernetes offers support for Windows worker nodes, allowing you to run workloads implemented in Windows containers. See [Windows in Kubernetes](/docs/setup/production-environment/windows/) for details. From a039b1fc4659796c8e5cb8ad0e4a181490a2471b Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak Date: Mon, 17 Apr 2023 02:01:44 +0600 Subject: [PATCH 0087/1086] Update _index.md --- .../setup/production-environment/_index.md | 158 +++++++----------- 1 file changed, 58 insertions(+), 100 deletions(-) diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md index 2a8a7dc30c..3287d463b7 100644 --- a/content/bn/docs/setup/production-environment/_index.md +++ b/content/bn/docs/setup/production-environment/_index.md @@ -101,116 +101,74 @@ etcd কনফিগার এবং ব্যবহার সম্পর্ক - জেনেরিক কম্পিউটার সিস্টেমগুলি করবে কিনা বা আপনার কাছে এমন কাজের চাপ আছে যেগুলির জন্য জিপিউ প্রসেসর, উইন্ডোজ নোড, বা ভিএম বিচ্ছিন্নতা প্রয়োজন। - *ভ্যালিডেট নোড*: কিভাবে একটি নোড একটি কুবারনেটিস ক্লাস্টারে যোগদানের প্রয়োজনীয়তা পূরণ করে তা নিশ্চিত করার জন্য তথ্যের জন্য [ভ্যালিড নোড সেটআপ](/docs/setup/best-practices/node-conformance/) দেখুন। - *ক্লাস্টারে নোড যোগ করুন*: আপনি যদি নিজের ক্লাস্টার পরিচালনা করেন তাহলে আপনি আপনার নিজস্ব মেশিন সেট আপ করে নোড যোগ করতে পারেন এবং হয় সেগুলিকে ম্যানুয়ালি যোগ করে অথবা ক্লাস্টারের এপিসার্ভারে নিজেদের নিবন্ধন করতে পারেন। এই উপায়ে নোড যোগ করার জন্য Kubernetes কিভাবে সেট আপ করতে হয় সে সম্পর্কে তথ্যের জন্য [নোডসমুহ](/docs/concepts/architecture/nodes/) বিভাগটি দেখুন। -- *Add Windows nodes to the cluster*: Kubernetes offers support for Windows -worker nodes, allowing you to run workloads implemented in Windows containers. See -[Windows in Kubernetes](/docs/setup/production-environment/windows/) for details. -- *Scale nodes*: Have a plan for expanding the capacity your cluster will -eventually need. See [Considerations for large clusters](/docs/setup/best-practices/cluster-large/) -to help determine how many nodes you need, based on the number of pods and -containers you need to run. If you are managing nodes yourself, this can mean -purchasing and installing your own physical equipment. -- *Autoscale nodes*: Most cloud providers support -[Cluster Autoscaler](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#readme) -to replace unhealthy nodes or grow and shrink the number of nodes as demand requires. See the -[Frequently Asked Questions](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md) -for how the autoscaler works and -[Deployment](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#deployment) -for how it is implemented by different cloud providers. For on-premises, there -are some virtualization platforms that can be scripted to spin up new nodes -based on demand. -- *Set up node health checks*: For important workloads, you want to make sure -that the nodes and pods running on those nodes are healthy. Using the -[Node Problem Detector](/docs/tasks/debug-application-cluster/monitor-node-health/) -daemon, you can ensure your nodes are healthy. +- *ক্লাস্টারে উইন্ডোজ নোড যোগ করুন*: কুবারনেটস উইন্ডোজ ওয়ার্কার নোডের জন্য সমর্থন অফার করে, যা আপনাকে উইন্ডোজ কন্টেইনারে বাস্তবায়িত ওয়ার্কলোড চালানোর অনুমতি দেয়। বিস্তারিত জানার জন্য [কুবারনেটিস-এ উইন্ডোজ](/docs/setup/production-environment/windows/) দেখুন। +- *স্কেল নোড*: শেষ পর্যন্ত আপনার ক্লাস্টারের প্রয়োজন হবে এমন ক্ষমতা বাড়ানোর জন্য একটি পরিকল্পনা করুন। দেখুন [বড় ক্লাস্টারগুলির জন্য বিবেচনা](/docs/setup/best-practices/cluster-large/) +আপনার কতগুলি নোড দরকার তা নির্ধারণ করতে সাহায্য করার জন্য, আপনার চালানোর জন্য পড এবং পাত্রের সংখ্যার উপর ভিত্তি করে। আপনি যদি নিজে নোড পরিচালনা করেন, তাহলে এর অর্থ হতে পারে আপনার নিজের শারীরিক সরঞ্জাম কেনা এবং ইনস্টল করা। +- *অটোস্কেল নোড*: বেশিরভাগ ক্লাউড প্রদানকারী সমর্থন করে +[ক্লাস্টার অটোস্কেলার](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#readme) অস্বাস্থ্যকর নোডগুলি প্রতিস্থাপন করতে বা চাহিদা অনুযায়ী নোডের সংখ্যা বৃদ্ধি এবং সঙ্কুচিত করতে। দেখুন অটোস্ক্যালার কিভাবে কাজ করে এবং [ডিপ্লয়মেন্ট](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#deployment) কীভাবে এটি বিভিন্ন ক্লাউড প্রদানকারী দ্বারা প্রয়োগ করা হয়। অন-প্রিমিসেসের জন্য, কিছু ভার্চুয়ালাইজেশন প্ল্যাটফর্ম রয়েছে যা চাহিদার ভিত্তিতে নতুন নোডগুলিকে স্পিন করার জন্য স্ক্রিপ্ট করা যেতে পারে। +- *নোড স্বাস্থ্য পরীক্ষা সেট আপ করুন*: গুরুত্বপূর্ণ কাজের চাপের জন্য, আপনি নিশ্চিত করতে চান যে সেই নোডগুলিতে চলমান নোড এবং পডগুলি স্বাস্থ্যকর। [নোড প্রবলেম ডিটেক্টর](/docs/tasks/debug-application-cluster/monitor-node-health/) ডেমন ব্যবহার করে, আপনি নিশ্চিত করতে পারেন আপনার নোডগুলি সুস্থ। -## Production user management +## উৎপাদন ব্যবহারকারী ব্যবস্থাপনা -In production, you may be moving from a model where you or a small group of -people are accessing the cluster to where there may potentially be dozens or -hundreds of people. In a learning environment or platform prototype, you might have a single -administrative account for everything you do. In production, you will want -more accounts with different levels of access to different namespaces. +উৎপাদনে, আপনি হয়ত এমন একটি মডেল থেকে সরে যাচ্ছেন যেখানে আপনি বা একটি ছোট গোষ্ঠী ক্লাস্টারে প্রবেশ করছেন যেখানে সম্ভাব্য কয়েক ডজন বা শত শত লোক থাকতে পারে। একটি শেখার পরিবেশে বা প্ল্যাটফর্ম প্রোটোটাইপে, আপনার একটি একক থাকতে পারে আপনি যা করেন তার জন্য প্রশাসনিক অ্যাকাউন্ট। উৎপাদনে, আপনি বিভিন্ন নামস্থানে বিভিন্ন স্তরের অ্যাক্সেস সহ আরও অ্যাকাউন্ট চাইবেন। -Taking on a production-quality cluster means deciding how you -want to selectively allow access by other users. In particular, you need to -select strategies for validating the identities of those who try to access your -cluster (authentication) and deciding if they have permissions to do what they -are asking (authorization): +একটি উৎপাদন-গুণমানের ক্লাস্টার নেওয়ার অর্থ হল আপনি কীভাবে বেছে বেছে অন্য ব্যবহারকারীদের অ্যাক্সেসের অনুমতি দিতে চান তা নির্ধারণ করা। বিশেষ করে, যারা আপনার ক্লাস্টার (প্রমাণিকরণ) অ্যাক্সেস করার চেষ্টা করে তাদের পরিচয় যাচাই করার জন্য এবং তারা যা জিজ্ঞাসা করছে (অনুমোদন) করার অনুমতি আছে কিনা তা নির্ধারণ করার জন্য আপনাকে কৌশল নির্বাচন করতে হবেঃ -- *Authentication*: The apiserver can authenticate users using client -certificates, bearer tokens, an authenticating proxy, or HTTP basic auth. -You can choose which authentication methods you want to use. -Using plugins, the apiserver can leverage your organization’s existing -authentication methods, such as LDAP or Kerberos. See -[Authentication](/docs/reference/access-authn-authz/authentication/) -for a description of these different methods of authenticating Kubernetes users. -- *Authorization*: When you set out to authorize your regular users, you will probably choose between RBAC and ABAC authorization. See [Authorization Overview](/docs/reference/access-authn-authz/authorization/) to review different modes for authorizing user accounts (as well as service account access to your cluster): - - *Role-based access control* ([RBAC](/docs/reference/access-authn-authz/rbac/)): Lets you assign access to your cluster by allowing specific sets of permissions to authenticated users. Permissions can be assigned for a specific namespace (Role) or across the entire cluster (ClusterRole). Then using RoleBindings and ClusterRoleBindings, those permissions can be attached to particular users. - - *Attribute-based access control* ([ABAC](/docs/reference/access-authn-authz/abac/)): Lets you create policies based on resource attributes in the cluster and will allow or deny access based on those attributes. Each line of a policy file identifies versioning properties (apiVersion and kind) and a map of spec properties to match the subject (user or group), resource property, non-resource property (/version or /apis), and readonly. See [Examples](/docs/reference/access-authn-authz/abac/#examples) for details. +- *প্রমাণিকরণ*: apiserver ক্লায়েন্ট ব্যবহার করে ব্যবহারকারীদের প্রমাণীকরণ করতে পারে +শংসাপত্র, বহনকারী টোকেন, একটি প্রমাণীকরণ প্রক্সি, বা HTTP মৌলিক প্রমাণীকরণ। +আপনি কোন প্রমাণীকরণ পদ্ধতি ব্যবহার করতে চান তা চয়ন করতে পারেন। +প্লাগইন ব্যবহার করে, apiserver আপনার প্রতিষ্ঠানের বিদ্যমান সুবিধা নিতে পারে +প্রমাণীকরণ পদ্ধতি, যেমন LDAP বা Kerberos। দেখা +[প্রমাণকরণ](/docs/reference/access-authn-authz/authentication/) +কুবারনেটিস ব্যবহারকারীদের প্রমাণীকরণের এই বিভিন্ন পদ্ধতির বর্ণনার জন্য। +- *অনুমোদন*: আপনি যখন আপনার নিয়মিত ব্যবহারকারীদের অনুমোদন করার জন্য প্রস্তুত হন, আপনি সম্ভবত RBAC এবং ABAC অনুমোদনের মধ্যে বেছে নেবেন। ব্যবহারকারীর অ্যাকাউন্ট অনুমোদনের জন্য বিভিন্ন মোড পর্যালোচনা করতে [প্রমাণকরণ ওভারভিউ](/docs/reference/access-authn-authz/authorization/) দেখুন (সেইসাথে আপনার ক্লাস্টারে পরিষেবা অ্যাকাউন্ট অ্যাক্সেস): + - *ভুমিকা-ভিত্তিক অ্যাক্সেস কন্ট্রোল* ([RBAC](/docs/reference/access-authn-authz/rbac/)): প্রমাণীকৃত ব্যবহারকারীদের নির্দিষ্ট সেটের অনুমতি প্রদান করে আপনাকে আপনার ক্লাস্টারে অ্যাক্সেস বরাদ্দ করতে দেয়। একটি নির্দিষ্ট নামস্থান (ভূমিকা) বা সমগ্র ক্লাস্টার জুড়ে (ClusterRole) অনুমতিগুলি বরাদ্দ করা যেতে পারে। তারপর RoleBindings এবং ClusterRoleBindings ব্যবহার করে, সেই অনুমতিগুলি নির্দিষ্ট ব্যবহারকারীদের সাথে সংযুক্ত করা যেতে পারে। + - *অ্যাট্রিবিউট-ভিত্তিক অ্যাক্সেস কন্ট্রোল* ([ABAC](/docs/reference/access-authn-authz/abac/)): আপনাকে ক্লাস্টারে রিসোর্স অ্যাট্রিবিউটের উপর ভিত্তি করে নীতি তৈরি করতে দেয় এবং সেই অ্যাট্রিবিউটগুলির উপর ভিত্তি করে অ্যাক্সেসের অনুমতি দেয় বা অস্বীকার করে। একটি নীতি ফাইলের প্রতিটি লাইন সংস্করণ বৈশিষ্ট্য (apiVersion এবং প্রকার) এবং বিষয় (ব্যবহারকারী বা গোষ্ঠী), সংস্থান সম্পত্তি, অ-সম্পদ সম্পত্তি (/সংস্করণ বা /এপিস) এবং শুধুমাত্র পঠনযোগ্য বৈশিষ্ট্যের সাথে মেলে বিশেষ বৈশিষ্ট্যগুলির একটি মানচিত্র সনাক্ত করে। বিস্তারিত জানার জন্য [উদাহরণ](/docs/reference/access-authn-authz/abac/#examples) দেখুন। -As someone setting up authentication and authorization on your production Kubernetes cluster, here are some things to consider: +যেহেতু কেউ আপনার প্রোডাকশন কুবারনেটস ক্লাস্টারে প্রমাণীকরণ এবং অনুমোদন সেট আপ করছে, এখানে কিছু বিষয় বিবেচনা করার আছেঃ -- *Set the authorization mode*: When the Kubernetes API server +- *অনুমোদন মোড সেট করুন*: যখন Kubernetes API সার্ভার ([kube-apiserver](/docs/reference/command-line-tools-reference/kube-apiserver/)) -starts, the supported authentication modes must be set using the *--authorization-mode* -flag. For example, that flag in the *kube-adminserver.yaml* file (in */etc/kubernetes/manifests*) -could be set to Node,RBAC. This would allow Node and RBAC authorization for authenticated requests. -- *Create user certificates and role bindings (RBAC)*: If you are using RBAC -authorization, users can create a CertificateSigningRequest (CSR) that can be -signed by the cluster CA. Then you can bind Roles and ClusterRoles to each user. -See [Certificate Signing Requests](/docs/reference/access-authn-authz/certificate-signing-requests/) -for details. -- *Create policies that combine attributes (ABAC)*: If you are using ABAC -authorization, you can assign combinations of attributes to form policies to -authorize selected users or groups to access particular resources (such as a -pod), namespace, or apiGroup. For more information, see -[Examples](/docs/reference/access-authn-authz/abac/#examples). -- *Consider Admission Controllers*: Additional forms of authorization for -requests that can come in through the API server include -[Webhook Token Authentication](/docs/reference/access-authn-authz/authentication/#webhook-token-authentication). -Webhooks and other special authorization types need to be enabled by adding -[Admission Controllers](/docs/reference/access-authn-authz/admission-controllers/) -to the API server. +শুরু হয়, সমর্থিত প্রমাণীকরণ মোডগুলি অবশ্যই *--অথরাইজেশন-মোড* ব্যবহার করে সেট করতে হবে +পতাকা উদাহরণস্বরূপ, *kube-adminserver.yaml* ফাইলে সেই পতাকা (*/etc/kubernetes/manifests*-এ) +Node, RBAC এ সেট করা যেতে পারে। এটি প্রমাণীকৃত অনুরোধের জন্য নোড এবং RBAC অনুমোদনের অনুমতি দেবে। +- *ব্যবহারকারী সার্টিফিকেট এবং রোল বাইন্ডিং (RBAC)* তৈরি করুন: আপনি যদি RBAC অনুমোদন ব্যবহার করেন, ব্যবহারকারীরা একটি CertificateSigningRequest (CSR) তৈরি করতে পারেন যা ক্লাস্টার CA দ্বারা স্বাক্ষরিত হতে পারে। তারপর আপনি প্রতিটি ব্যবহারকারীর ভূমিকা এবং ক্লাস্টার রোল বাঁধাই করতে পারেন। +[শংসাপত্র স্বাক্ষরের অনুরোধ](/docs/reference/access-authn-authz/certificate-signing-requests/) দেখুন +বিস্তারিত জানার জন্য. +- *অ্যাট্রিবিউটগুলিকে একত্রিত করে এমন নীতিগুলি তৈরি করুন (ABAC)*: আপনি যদি ABAC অনুমোদন ব্যবহার করেন তবে আপনি নির্দিষ্ট সংস্থানগুলি (যেমন একটি পড), নামস্থান, বা apiGroup অ্যাক্সেস করার জন্য নির্বাচিত ব্যবহারকারী বা গোষ্ঠীগুলিকে অনুমোদন করার জন্য নীতিগুলি গঠনের জন্য বৈশিষ্ট্যগুলির সংমিশ্রণ বরাদ্দ করতে পারেন৷ আরও তথ্যের জন্য, [উদাহরণ](/docs/reference/access-authn-authz/abac/#examples) দেখুন। +- *ভর্তি নিয়ন্ত্রকদের বিবেচনা করুন*: API সার্ভারের মাধ্যমে আসতে পারে এমন অনুরোধের জন্য অনুমোদনের অতিরিক্ত ফর্ম অন্তর্ভুক্ত +[ওয়েবহুক টোকেন প্রমাণীকরণ](/docs/reference/access-authn-authz/authentication/#webhook-token-authentication)। +API সার্ভারে [ভর্তি কন্ট্রোলার](/docs/reference/access-authn-authz/admission-controllers/) যোগ করে ওয়েবহুক এবং অন্যান্য বিশেষ অনুমোদনের ধরন সক্ষম করতে হবে। -## Set limits on workload resources +## কাজের চাপের সম্পদের সীমা নির্ধারণ করুন -Demands from production workloads can cause pressure both inside and outside -of the Kubernetes control plane. Consider these items when setting up for the -needs of your cluster's workloads: +প্রোডাকশন ওয়ার্কলোডের চাহিদা কুবারনেটস কন্ট্রোল প্লেনের ভিতরে এবং বাইরে উভয় ক্ষেত্রেই চাপ সৃষ্টি করতে পারে। আপনার ক্লাস্টারের কাজের চাপের প্রয়োজনের জন্য সেট আপ করার সময় এই আইটেমগুলি বিবেচনা করুনঃ -- *Set namespace limits*: Set per-namespace quotas on things like memory and CPU. See -[Manage Memory, CPU, and API Resources](/docs/tasks/administer-cluster/manage-resources/) -for details. You can also set -[Hierarchical Namespaces](/blog/2020/08/14/introducing-hierarchical-namespaces/) -for inheriting limits. -- *Prepare for DNS demand*: If you expect workloads to massively scale up, -your DNS service must be ready to scale up as well. See -[Autoscale the DNS service in a Cluster](/docs/tasks/administer-cluster/dns-horizontal-autoscaling/). -- *Create additional service accounts*: User accounts determine what users can -do on a cluster, while a service account defines pod access within a particular -namespace. By default, a pod takes on the default service account from its namespace. -See [Managing Service Accounts](/docs/reference/access-authn-authz/service-accounts-admin/) -for information on creating a new service account. For example, you might want to: - - Add secrets that a pod could use to pull images from a particular container registry. See [Configure Service Accounts for Pods](/docs/tasks/configure-pod-container/configure-service-account/) for an example. - - Assign RBAC permissions to a service account. See [ServiceAccount permissions](/docs/reference/access-authn-authz/rbac/#service-account-permissions) for details. +- *নেমস্পেস সীমা সেট করুন*: মেমরি এবং সিপিইউ এর মত জিনিসগুলিতে প্রতি-নেমস্পেস কোটা সেট করুন। দেখা +[মেমরি, সিপিইউ এবং এপিআই সংস্থানগুলি পরিচালনা করুন](/docs/tasks/administer-cluster/manage-resources/) +বিস্তারিত জানার জন্য. আপনিও সেট করতে পারেন +[হায়ারার্কিক্যাল নামস্থান](/blog/2020/08/14/introducing-hierarchical-namespaces/) +উত্তরাধিকার সীমার জন্য। +- *ডিএনএস চাহিদার জন্য প্রস্তুত করুন*: আপনি যদি আশা করেন যে কাজের চাপ ব্যাপকভাবে বৃদ্ধি পাবে, আপনার ডিএনএস পরিষেবাটিও স্কেল বাড়াতে প্রস্তুত থাকতে হবে। দেখা +[একটি ক্লাস্টারে DNS পরিষেবাটি অটোস্কেল করুন](/docs/tasks/administer-cluster/dns-horizontal-autoscaling/)। +- *অতিরিক্ত পরিষেবা অ্যাকাউন্ট তৈরি করুন*: ব্যবহারকারীর অ্যাকাউন্টগুলি নির্ধারণ করে যে ব্যবহারকারীরা একটি ক্লাস্টারে কী করতে পারে, যখন একটি পরিষেবা অ্যাকাউন্ট একটি নির্দিষ্ট নামস্থানের মধ্যে পড অ্যাক্সেসকে সংজ্ঞায়িত করে। ডিফল্টরূপে, একটি পড তার নামস্থান থেকে ডিফল্ট পরিষেবা অ্যাকাউন্টে নেয়। +দেখুন [পরিষেবা অ্যাকাউন্ট পরিচালনা](/docs/reference/access-authn-authz/service-accounts-admin/) +একটি নতুন পরিষেবা অ্যাকাউন্ট তৈরির তথ্যের জন্য। উদাহরণস্বরূপ, আপনি চাইতে পারেন: + - গোপনীয়তা যোগ করুন যা একটি পড একটি নির্দিষ্ট ধারক রেজিস্ট্রি থেকে ছবি তুলতে ব্যবহার করতে পারে। উদাহরণের জন্য [পডের জন্য পরিষেবা অ্যাকাউন্ট কনফিগার করুন](/docs/tasks/configure-pod-container/configure-service-account/) দেখুন। + - একটি পরিষেবা অ্যাকাউন্টে RBAC অনুমতি বরাদ্দ করুন। বিস্তারিত জানার জন্য [ServiceAccount permissions](/docs/reference/access-authn-authz/rbac/#service-account-permissions) দেখুন। ## {{% heading "whatsnext" %}} -- Decide if you want to build your own production Kubernetes or obtain one from -available [Turnkey Cloud Solutions](/docs/setup/production-environment/turnkey-solutions/) -or [Kubernetes Partners](https://kubernetes.io/partners/). -- If you choose to build your own cluster, plan how you want to -handle [certificates](/docs/setup/best-practices/certificates/) -and set up high availability for features such as -[etcd](/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/) -and the -[API server](/docs/setup/production-environment/tools/kubeadm/ha-topology/). -- Choose from [kubeadm](/docs/setup/production-environment/tools/kubeadm/), [kops](/docs/setup/production-environment/tools/kops/) or [Kubespray](/docs/setup/production-environment/tools/kubespray/) -deployment methods. -- Configure user management by determining your -[Authentication](/docs/reference/access-authn-authz/authentication/) and -[Authorization](/docs/reference/access-authn-authz/authorization/) methods. -- Prepare for application workloads by setting up -[resource limits](/docs/tasks/administer-cluster/manage-resources/), -[DNS autoscaling](/docs/tasks/administer-cluster/dns-horizontal-autoscaling/) -and [service accounts](/docs/reference/access-authn-authz/service-accounts-admin/). +- আপনি নিজের প্রোডাকশন কুবারনেটস তৈরি করতে চান বা উপলব্ধ [টার্নকি ক্লাউড সলিউশনস](/docs/setup/production-environment/turnkey-solutions/) থেকে একটি পেতে চান কিনা তা স্থির করুন অথবা [কুবারনেটিস পার্টনার](https://kubernetes.io/partners/)। +- আপনি যদি নিজের ক্লাস্টার তৈরি করতে চান, তাহলে পরিকল্পনা করুন কিভাবে আপনি [শংসাপত্র] (/docs/setup/best-practices/certificates/) পরিচালনা করতে চান +এবং যেমন বৈশিষ্ট্য জন্য উচ্চ প্রাপ্যতা সেট আপ +[etcd](/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/) এবং [API সার্ভার](/docs/setup/production-environment/tools/kubeadm/ha- টপোলজি/)। +- [kubeadm](/docs/setup/production-environment/tools/kubeadm/), [kops](/docs/setup/production-environment/tools/kops/) অথবা [Kubespray](/docs/setup/) থেকে বেছে নিন উত্পাদন-পরিবেশ/সরঞ্জাম/কুবেস্প্রে/) +স্থাপনা পদ্ধতি। +- আপনার নির্ধারণ করে ব্যবহারকারী ব্যবস্থাপনা কনফিগার করুন +[প্রমাণকরণ](/docs/reference/access-authn-authz/authentication/) এবং +[অনুমোদন](/docs/reference/access-authn-authz/authorization/) পদ্ধতি। +- সেট আপ করে অ্যাপ্লিকেশন ওয়ার্কলোডের জন্য প্রস্তুত করুন +[সম্পদ সীমা](/docs/tasks/administer-cluster/manage-resources/), +[DNS অটোস্কেলিং](/docs/tasks/administer-cluster/dns-horizontal-autoscaling/) +এবং [পরিষেবা অ্যাকাউন্ট](/docs/reference/access-authn-authz/service-accounts-admin/)। From 38d57db9a64c5c129a72b5415500e3099fbfabd2 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak Date: Sat, 10 Jun 2023 00:43:45 +0600 Subject: [PATCH 0088/1086] Update content/bn/docs/setup/production-environment/_index.md Co-authored-by: Md Shahriyar Al Mustakim Mitul --- content/bn/docs/setup/production-environment/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md index 3287d463b7..6309ea3537 100644 --- a/content/bn/docs/setup/production-environment/_index.md +++ b/content/bn/docs/setup/production-environment/_index.md @@ -1,6 +1,6 @@ --- title: "প্রোডাকশন পরিবেশ" -description: একটি প্রোডাকশন-মানের কুবারনেটস ক্লাস্টার তৈরি করুন +description: একটি প্রোডাকশন-মানের কুবারনেটিস ক্লাস্টার তৈরি করুন weight: 30 no_list: true --- From 16f75649957f36d06843f26843c5894e27e7c6d4 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak Date: Sat, 10 Jun 2023 00:43:52 +0600 Subject: [PATCH 0089/1086] Update content/bn/docs/setup/production-environment/_index.md Co-authored-by: Md Shahriyar Al Mustakim Mitul --- content/bn/docs/setup/production-environment/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md index 6309ea3537..a7dc2cc532 100644 --- a/content/bn/docs/setup/production-environment/_index.md +++ b/content/bn/docs/setup/production-environment/_index.md @@ -6,7 +6,7 @@ no_list: true --- -একটি প্রোডাকশন-মানের কুবারনেটস ক্লাস্টারের জন্য পরিকল্পনা এবং প্রস্তুতি প্রয়োজন। +একটি প্রোডাকশন-মানের কুবারনেটিস ক্লাস্টারের জন্য পরিকল্পনা এবং প্রস্তুতি প্রয়োজন। আপনার কুবারনেটিস ক্লাস্টার যদি সংকটপূর্ণ কাজের চাপ চালাতে হয়, তাহলে এটি অবশ্যই স্থিতিস্থাপক হওয়ার জন্য কনফিগার করতে হবে। এই পৃষ্ঠাটি ব্যাখ্যা করে যে আপনি একটি প্রোডাকশন-প্রস্তুত ক্লাস্টার সেট আপ করতে নিতে পারেন, অথবা প্রোডাকশন ব্যবহারের জন্য একটি বিদ্যমান ক্লাস্টার প্রচার করতে। From f2765c6096a8b40711f6a48e9f771b337aa97ce0 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak Date: Sat, 10 Jun 2023 00:44:23 +0600 Subject: [PATCH 0090/1086] Update content/bn/docs/setup/production-environment/_index.md Co-authored-by: Md Shahriyar Al Mustakim Mitul --- content/bn/docs/setup/production-environment/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md index a7dc2cc532..129a25b86d 100644 --- a/content/bn/docs/setup/production-environment/_index.md +++ b/content/bn/docs/setup/production-environment/_index.md @@ -10,7 +10,7 @@ no_list: true আপনার কুবারনেটিস ক্লাস্টার যদি সংকটপূর্ণ কাজের চাপ চালাতে হয়, তাহলে এটি অবশ্যই স্থিতিস্থাপক হওয়ার জন্য কনফিগার করতে হবে। এই পৃষ্ঠাটি ব্যাখ্যা করে যে আপনি একটি প্রোডাকশন-প্রস্তুত ক্লাস্টার সেট আপ করতে নিতে পারেন, অথবা প্রোডাকশন ব্যবহারের জন্য একটি বিদ্যমান ক্লাস্টার প্রচার করতে। -আপনি যদি ইতিমধ্যেই প্রোডাকশন সেটআপের সাথে পরিচিত হন এবং লিঙ্কগুলি চান তবে [পরবর্তী](#what-s-next) এ এগিয়ে যান। +আপনি যদি ইতিমধ্যেই প্রোডাকশন সেটআপের সাথে পরিচিত হন এবং লিঙ্কগুলি চান তবে [পরবর্তী ধাপ](#what-s-next) এ এগিয়ে যান। From f3fac00f53fdab884ee378af9e306a9424ba6829 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak Date: Sat, 10 Jun 2023 00:45:03 +0600 Subject: [PATCH 0091/1086] Update content/bn/docs/setup/production-environment/_index.md Co-authored-by: Md Shahriyar Al Mustakim Mitul --- content/bn/docs/setup/production-environment/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md index 129a25b86d..00f7974b51 100644 --- a/content/bn/docs/setup/production-environment/_index.md +++ b/content/bn/docs/setup/production-environment/_index.md @@ -19,7 +19,7 @@ no_list: true সাধারণত, একটি প্রোডাকশন কুবারনেটিস ক্লাস্টার পরিবেশে ব্যক্তিগত শিক্ষা, উন্নয়ন, বা পরীক্ষার পরিবেশ কুবারনেটিস এর চেয়ে বেশি প্রয়োজনীয়তা থাকে। একটি প্রোডাকশন পরিবেশের অনেক ব্যবহারকারীর নিরাপদ অ্যাক্সেস, সামঞ্জস্যপূর্ণ প্রাপ্যতা এবং পরিবর্তিত চাহিদাগুলির সাথে খাপ খাইয়ে নেওয়ার জন্য সংস্থানগুলির প্রয়োজন হতে পারে। -আপনি যখন সিদ্ধান্ত নিচ্ছেন যে আপনি আপনার উৎপাদন কুবারনেটস পরিবেশ কোথায় রাখতে চান (প্রাঙ্গনে বা ক্লাউডে) এবং আপনি যে পরিমাণ ব্যবস্থাপনা নিতে চান বা অন্যদের হাতে দিতে চান, বিবেচনা করুন কিভাবে একটি কুবারনেটিস ক্লাস্টারের জন্য আপনার প্রয়োজনীয়তা নিম্নলিখিত সমস্যাগুলির দ্বারা প্রভাবিত হয়: +আপনি যখন সিদ্ধান্ত নিচ্ছেন যে আপনি আপনার উৎপাদন কুবারনেটিস পরিবেশ কোথায় রাখতে চান (প্রাঙ্গনে বা ক্লাউডে) এবং আপনি যে পরিমাণ ব্যবস্থাপনা নিতে চান বা অন্যদের হাতে দিতে চান, বিবেচনা করুন কিভাবে একটি কুবারনেটিস ক্লাস্টারের জন্য আপনার প্রয়োজনীয়তা নিম্নলিখিত সমস্যাগুলির দ্বারা প্রভাবিত হয়: - *প্রাপ্যতা*: একটি একক-মেশিন কুবারনেটিস [লার্নিং এনভায়রনমেন্ট](/docs/setup/#learning-environment) ব্যর্থতার একক পয়েন্ট আছে। একটি অত্যন্ত উপলব্ধ ক্লাস্টার তৈরি করার অর্থ বিবেচনা করা: From a82e8466621deba7fccc5fbe3323c24c56baf6a4 Mon Sep 17 00:00:00 2001 From: Asif Zubayer Palak Date: Sat, 10 Jun 2023 00:54:49 +0600 Subject: [PATCH 0092/1086] Update _index.md --- content/bn/docs/setup/production-environment/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md index 00f7974b51..65accb7b9c 100644 --- a/content/bn/docs/setup/production-environment/_index.md +++ b/content/bn/docs/setup/production-environment/_index.md @@ -9,14 +9,14 @@ no_list: true একটি প্রোডাকশন-মানের কুবারনেটিস ক্লাস্টারের জন্য পরিকল্পনা এবং প্রস্তুতি প্রয়োজন। আপনার কুবারনেটিস ক্লাস্টার যদি সংকটপূর্ণ কাজের চাপ চালাতে হয়, তাহলে এটি অবশ্যই স্থিতিস্থাপক হওয়ার জন্য কনফিগার করতে হবে। এই পৃষ্ঠাটি ব্যাখ্যা করে যে আপনি একটি প্রোডাকশন-প্রস্তুত ক্লাস্টার সেট আপ করতে নিতে পারেন, -অথবা প্রোডাকশন ব্যবহারের জন্য একটি বিদ্যমান ক্লাস্টার প্রচার করতে। +অথবা প্রোডাকশন ব্যবহারের জন্য একটি বিদ্যমান ক্লাস্টার কিভাবে প্রচার করতে পারেন। আপনি যদি ইতিমধ্যেই প্রোডাকশন সেটআপের সাথে পরিচিত হন এবং লিঙ্কগুলি চান তবে [পরবর্তী ধাপ](#what-s-next) এ এগিয়ে যান। ## প্রোডাকশন বিবেচনা -সাধারণত, একটি প্রোডাকশন কুবারনেটিস ক্লাস্টার পরিবেশে ব্যক্তিগত শিক্ষা, উন্নয়ন, বা পরীক্ষার পরিবেশ কুবারনেটিস এর চেয়ে বেশি প্রয়োজনীয়তা থাকে। +সাধারণত, একটি প্রোডাকশন কুবারনেটিস ক্লাস্টার পরিবেশে শুধু ব্যক্তিগত শিক্ষা, ডেভেলপমেন্ট, বা পরীক্ষার পরিবেশ কুবারনেটিস যথেষ্ট নয়, তার চেয়ে বেশি প্রয়োজনীয়তা থাকে। একটি প্রোডাকশন পরিবেশের অনেক ব্যবহারকারীর নিরাপদ অ্যাক্সেস, সামঞ্জস্যপূর্ণ প্রাপ্যতা এবং পরিবর্তিত চাহিদাগুলির সাথে খাপ খাইয়ে নেওয়ার জন্য সংস্থানগুলির প্রয়োজন হতে পারে। আপনি যখন সিদ্ধান্ত নিচ্ছেন যে আপনি আপনার উৎপাদন কুবারনেটিস পরিবেশ কোথায় রাখতে চান (প্রাঙ্গনে বা ক্লাউডে) এবং আপনি যে পরিমাণ ব্যবস্থাপনা নিতে চান বা অন্যদের হাতে দিতে চান, বিবেচনা করুন কিভাবে একটি কুবারনেটিস ক্লাস্টারের জন্য আপনার প্রয়োজনীয়তা নিম্নলিখিত সমস্যাগুলির দ্বারা প্রভাবিত হয়: From 496c1509e595cd0ebff3b6bd48190fb87f0af93d Mon Sep 17 00:00:00 2001 From: Md Shahriyar Al Mustakim Mitul Date: Thu, 29 Jun 2023 10:13:32 +0600 Subject: [PATCH 0093/1086] Revert "[bn] Localized `content/bn/docs/setup/production-environment/_index.md`" --- .../setup/production-environment/_index.md | 174 ------------------ 1 file changed, 174 deletions(-) delete mode 100644 content/bn/docs/setup/production-environment/_index.md diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md deleted file mode 100644 index 65accb7b9c..0000000000 --- a/content/bn/docs/setup/production-environment/_index.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: "প্রোডাকশন পরিবেশ" -description: একটি প্রোডাকশন-মানের কুবারনেটিস ক্লাস্টার তৈরি করুন -weight: 30 -no_list: true ---- - - -একটি প্রোডাকশন-মানের কুবারনেটিস ক্লাস্টারের জন্য পরিকল্পনা এবং প্রস্তুতি প্রয়োজন। -আপনার কুবারনেটিস ক্লাস্টার যদি সংকটপূর্ণ কাজের চাপ চালাতে হয়, তাহলে এটি অবশ্যই স্থিতিস্থাপক হওয়ার জন্য কনফিগার করতে হবে। -এই পৃষ্ঠাটি ব্যাখ্যা করে যে আপনি একটি প্রোডাকশন-প্রস্তুত ক্লাস্টার সেট আপ করতে নিতে পারেন, -অথবা প্রোডাকশন ব্যবহারের জন্য একটি বিদ্যমান ক্লাস্টার কিভাবে প্রচার করতে পারেন। -আপনি যদি ইতিমধ্যেই প্রোডাকশন সেটআপের সাথে পরিচিত হন এবং লিঙ্কগুলি চান তবে [পরবর্তী ধাপ](#what-s-next) এ এগিয়ে যান। - - - -## প্রোডাকশন বিবেচনা - -সাধারণত, একটি প্রোডাকশন কুবারনেটিস ক্লাস্টার পরিবেশে শুধু ব্যক্তিগত শিক্ষা, ডেভেলপমেন্ট, বা পরীক্ষার পরিবেশ কুবারনেটিস যথেষ্ট নয়, তার চেয়ে বেশি প্রয়োজনীয়তা থাকে। -একটি প্রোডাকশন পরিবেশের অনেক ব্যবহারকারীর নিরাপদ অ্যাক্সেস, সামঞ্জস্যপূর্ণ প্রাপ্যতা এবং পরিবর্তিত চাহিদাগুলির সাথে খাপ খাইয়ে নেওয়ার জন্য সংস্থানগুলির প্রয়োজন হতে পারে। - -আপনি যখন সিদ্ধান্ত নিচ্ছেন যে আপনি আপনার উৎপাদন কুবারনেটিস পরিবেশ কোথায় রাখতে চান (প্রাঙ্গনে বা ক্লাউডে) এবং আপনি যে পরিমাণ ব্যবস্থাপনা নিতে চান বা অন্যদের হাতে দিতে চান, বিবেচনা করুন কিভাবে একটি কুবারনেটিস ক্লাস্টারের জন্য আপনার প্রয়োজনীয়তা নিম্নলিখিত সমস্যাগুলির দ্বারা প্রভাবিত হয়: - -- *প্রাপ্যতা*: একটি একক-মেশিন কুবারনেটিস [লার্নিং এনভায়রনমেন্ট](/docs/setup/#learning-environment) -ব্যর্থতার একক পয়েন্ট আছে। একটি অত্যন্ত উপলব্ধ ক্লাস্টার তৈরি করার অর্থ বিবেচনা করা: - - কর্মী নোড থেকে নিয়ন্ত্রণ সমতল পৃথক করা। - - একাধিক নোডগুলিতে নিয়ন্ত্রণ সমতল উপাদানগুলির প্রতিলিপি করা। - - ক্লাস্টারের {{< glossary_tooltip term_id="kube-apiserver" text="API সার্ভার" >}}-এ ব্যালেন্সিং ট্রাফিক লোড করুন৷ - - পর্যাপ্ত কর্মী নোড উপলব্ধ থাকা, বা দ্রুত উপলব্ধ হতে সক্ষম, কারণ পরিবর্তিত কাজের চাপ এটি নিশ্চিত করে। - -- *স্কেল*: আপনি যদি আশা করেন আপনার প্রোডাকশন কুবারনেটিস পরিবেশ একটি স্থিতিশীল পরিমাণে চাহিদা পাবে, তাহলে আপনি আপনার প্রয়োজনীয় ক্ষমতার জন্য সেট আপ করতে সক্ষম হবেন এবং সম্পন্ন হবে। কিন্তু, আপনি যদি সময়ের সাথে সাথে চাহিদা বাড়তে বা সিজন বা বিশেষ ইভেন্টের মতো বিষয়গুলির উপর ভিত্তি করে নাটকীয়ভাবে পরিবর্তনের আশা করেন, তাহলে আপনাকে পরিকল্পনা করতে হবে কীভাবে বৃদ্ধির উপশম করতে হবে কন্ট্রোল প্লেন এবং কর্মী নোডগুলিতে আরও অনুরোধ থেকে চাপ বা অব্যবহৃত সংস্থানগুলি কমাতে স্কেল ডাউন। - -- *নিরাপত্তা এবং অ্যাক্সেস ম্যানেজমেন্ট*: আপনার নিজস্ব কুবারনেটিস লার্নিং ক্লাস্টারে আপনার সম্পূর্ণ অ্যাডমিন সুবিধা রয়েছে। কিন্তু গুরুত্বপূর্ণ কাজের চাপ সহ ভাগ করা ক্লাস্টার, এবং এক বা দুইজনের বেশি ব্যবহারকারীর জন্য কে এবং কি ক্লাস্টার সংস্থান অ্যাক্সেস করতে পারে, তার জন্য আরও পরিমার্জিত পদ্ধতির প্রয়োজন। আপনি ভূমিকা-ভিত্তিক অ্যাক্সেস কন্ট্রোল ([RBAC](/docs/reference/access-authn-authz/rbac/)) এবং অন্যান্য নিরাপত্তা ব্যবস্থা ব্যবহার করতে পারেন যাতে ব্যবহারকারী এবং কাজের চাপ তাদের প্রয়োজনীয় সংস্থানগুলিতে অ্যাক্সেস পেতে পারে, পাশাপাশি কাজের চাপ, এবং ক্লাস্টার নিরাপদ থাকে। -আপনি [নীতি](/docs/concepts/policy/) এবং পরিচালনার মাধ্যমে ব্যবহারকারী এবং কাজের চাপ অ্যাক্সেস করতে পারে এমন সংস্থানগুলির সীমা নির্ধারণ করতে পারেন এবং -[কনটেইনার সম্পদ](/docs/concepts/configuration/manage-resources-containers/)। - -নিজের হাতে একটি কুবারনেটস উৎপাদন পরিবেশ তৈরি করার আগে, এই কাজটির কিছু বা সমস্ত কাজ [টার্নকি ক্লাউড সলিউশন](/docs/setup/production-environment/turnkey-solutions/) প্রদানকারী বা অন্যান্য [কুবারনেটিস পার্টনার](https://kubernetes.io/partners/) এর কাছে হস্তান্তর করার কথা বিবেচনা করুন। -বিকল্পগুলোর মধ্যে রয়েছেঃ - -- *সার্ভারলেস*: কোনও ক্লাস্টার পরিচালনা না করেই তৃতীয় পক্ষের সরঞ্জামগুলিতে কাজের চাপ চালান। সিপিউ ব্যবহার, মেমরি এবং ডিস্ক অনুরোধের মতো জিনিসগুলির জন্য আপনাকে চার্জ করা হবে। -- *পরিচালিত কন্ট্রোল প্লেন*: প্রদানকারীকে ক্লাস্টারের কন্ট্রোল প্লেনের স্কেল এবং প্রাপ্যতা, সেইসাথে প্যাচ এবং আপগ্রেডগুলি পরিচালনা করতে দিন। -- *পরিচালিত কর্মী নোড*: আপনার প্রয়োজন মেটাতে নোডগুলির পুল কনফিগার করুন, তারপর প্রদানকারী নিশ্চিত করে যে সেই নোডগুলি উপলব্ধ এবং প্রয়োজনের সময় আপগ্রেড বাস্তবায়নের জন্য প্রস্তুত। -- *ইন্টিগ্রেশন*: এমন প্রোভাইডার আছে যারা কুবারনেটসকে আপনার প্রয়োজন হতে পারে এমন অন্যান্য পরিষেবার সাথে একীভূত করে, যেমন স্টোরেজ, কনটেইনার রেজিস্ট্রি, প্রমাণীকরণ পদ্ধতি এবং ডেভেলপমেন্ট টুল। - -আপনি নিজে একটি প্রোডাকশন কুবারনেটস ক্লাস্টার তৈরি করুন বা অংশীদারদের সাথে কাজ করুন না কেন, আপনার ক্লাস্টারের *কন্ট্রোল প্লেন*, *ওয়ার্কার নোড*, *ব্যবহারকারীর অ্যাক্সেস* এবং *ওয়ার্কলোড রিসোর্স* এর সাথে সম্পর্কিত আপনার চাহিদাগুলি মূল্যায়ন করতে নিম্নলিখিত বিভাগগুলি পর্যালোচনা করুন। - -## উৎপাদন ক্লাস্টার সেটআপ - -একটি উৎপাদন-মানের কুবারনেটস ক্লাস্টারে, কন্ট্রোল প্লেন পরিষেবাগুলি থেকে ক্লাস্টার পরিচালনা করে যা একাধিক কম্পিউটারে বিভিন্ন উপায়ে ছড়িয়ে পড়তে পারে। প্রতিটি কর্মী নোড, তবে, একটি একক সত্তাকে প্রতিনিধিত্ব করে যা কুবারনেটস পড চালানোর জন্য কনফিগার করা হয়েছে। - -### উৎপাদন নিয়ন্ত্রণ প্লেন - -সহজতম কুবারনেটিস ক্লাস্টারে একই মেশিনে পুরো নিয়ন্ত্রণ সমতল এবং কর্মী নোড পরিষেবাগুলি চলছে। আপনি কর্মী নোডগুলি যোগ করে সেই পরিবেশটি বৃদ্ধি করতে পারেন, যেমনটি [কুবারনেটিস উপাদান](/docs/concepts/overview/components/) এ চিত্রিত চিত্রে প্রতিফলিত হয়েছে। - -যদি ক্লাস্টারটি অল্প সময়ের জন্য উপলভ্য থাকে বা কিছু গুরুতর ভুল হয়ে গেলে তা বাতিল করা যেতে পারে, তাহলে এটি আপনার প্রয়োজন মেটাতে পারে। - -আপনার যদি আরও স্থায়ী, অত্যন্ত উপলব্ধ ক্লাস্টারের প্রয়োজন হয় তবে, আপনার নিয়ন্ত্রণ সমতল প্রসারিত করার উপায়গুলি বিবেচনা করা উচিত। নকশা অনুসারে, একক মেশিনে চলমান এক-মেশিন নিয়ন্ত্রণ বিমান পরিষেবাগুলি খুব বেশি উপলব্ধ নয়। -যদি ক্লাস্টার চালু রাখা এবং চালানো এবং কিছু ভুল হলে তা মেরামত করা যায় তা নিশ্চিত করা গুরুত্বপূর্ণ, এই পদক্ষেপগুলি বিবেচনা করুনঃ - -- *ডিপ্লয়মেন্ট টুলস চয়ন করুন*: আপনি kubeadm, kops এবং kubespray এর মত টুল ব্যবহার করে একটি কন্ট্রোল প্লেন স্থাপন করতে পারেন। দেখা -[ডিপ্লয়মেন্ট টুলের সাথে কুবারনেটস ইনস্টল করা হচ্ছে](/docs/setup/production-environment/tools/) -প্রতিটি স্থাপনার পদ্ধতি ব্যবহার করে উৎপাদন-মানের স্থাপনার জন্য টিপস শিখতে। ভিন্ন [কন্টেইনার রানটাইমস](/docs/setup/production-environment/container-runtimes/) -আপনার স্থাপনার সাথে ব্যবহার করার জন্য উপলব্ধ। -- *শংসাপত্র পরিচালনা করুন*: নিয়ন্ত্রণ বিমান পরিষেবাগুলির মধ্যে সুরক্ষিত যোগাযোগ শংসাপত্র ব্যবহার করে প্রয়োগ করা হয়। শংসাপত্রগুলি স্থাপনের সময় স্বয়ংক্রিয়ভাবে তৈরি হয় বা আপনি আপনার নিজের শংসাপত্র কর্তৃপক্ষ ব্যবহার করে সেগুলি তৈরি করতে পারেন৷ -বিস্তারিত জানার জন্য [PKI সার্টিফিকেট এবং প্রয়োজনীয়তা](/docs/setup/best-practices/certificates/) দেখুন। -- *এপিআইসার্ভার জন্য লোড ব্যালেন্সার কনফিগার করুন*: একটি লোড ব্যালেন্সার কনফিগার করুন -বিভিন্ন নোডে চলমান এপিআইসার্ভার পরিষেবা দৃষ্টান্তগুলিতে বাহ্যিক API অনুরোধগুলি বিতরণ করতে। বিস্তারিত জানার জন্য [একটি বহিরাগত লোড ব্যালেন্সার তৈরি করুন](/docs/tasks/access-application-cluster/create-external-load-balancer/) দেখুন। -- *পৃথক এবং ব্যাকআপ etcd পরিষেবা*: etcd পরিষেবাগুলি হয় অন্যান্য কন্ট্রোল প্লেন পরিষেবাগুলির মতো একই মেশিনে চালানো যেতে পারে বা অতিরিক্ত নিরাপত্তা এবং প্রাপ্যতার জন্য আলাদা মেশিনে চলতে পারে৷ যেহেতু etcd ক্লাস্টার কনফিগারেশন ডেটা সঞ্চয় করে, তাই etcd ডাটাবেসের ব্যাকআপ নিয়মিত করা উচিত যাতে আপনি প্রয়োজনে সেই ডাটাবেসটি মেরামত করতে পারেন। -etcd কনফিগার এবং ব্যবহার সম্পর্কে বিস্তারিত জানার জন্য [etcd FAQ](https://etcd.io/docs/v3.4/faq/) দেখুন। -[Kubernetes-এর জন্য অপারেটিং etcd ক্লাস্টার](/docs/tasks/administer-cluster/configure-upgrade-etcd/) দেখুন এবং [kubeadm-এর সাথে একটি উচ্চ প্রাপ্যতা etcd ক্লাস্টার সেট আপ করুন](/docs/setup/production-environment/tools/kubeadm /setup-ha-etcd-with-kubeadm/) -বিস্তারিত জানার জন্য. -- *একাধিক কন্ট্রোল প্লেন সিস্টেম তৈরি করুন*: উচ্চ প্রাপ্যতার জন্য, -নিয়ন্ত্রণ সমতল একটি একক মেশিনে সীমাবদ্ধ করা উচিত নয়। যদি কন্ট্রোল প্লেন পরিষেবাগুলি একটি init পরিষেবা দ্বারা চালিত হয় (যেমন systemd), প্রতিটি পরিষেবা কমপক্ষে তিনটি মেশিনে চালানো উচিত। যাইহোক, Kubernetes-এ পড হিসাবে কন্ট্রোল প্লেন পরিষেবাগুলি চালানো নিশ্চিত করে যে আপনার অনুরোধ করা পরিষেবাগুলির প্রতিলিপিকৃত সংখ্যা সর্বদা উপলব্ধ থাকবে। -সময়সূচী ত্রুটি সহনশীল হতে হবে, কিন্তু অত্যন্ত উপলব্ধ নয়। কিছু স্থাপনার টুল সেট আপ করা [Raft](https://raft.github.io/) কুবারনেটিস পরিষেবার নেতা নির্বাচন করতে ঐক্যমত্য অ্যালগরিদম। যদি প্রাইমারি চলে যায়, অন্য সার্ভিস নিজেই নির্বাচন করে এবং দায়িত্ব নেয়। -- *একাধিক অঞ্চল স্প্যান করুন*: যদি আপনার ক্লাস্টারকে সর্বদা উপলব্ধ রাখা গুরুত্বপূর্ণ হয়, তবে একটি ক্লাস্টার তৈরি করার কথা বিবেচনা করুন যা একাধিক ডেটা সেন্টার জুড়ে চলে, ক্লাউড পরিবেশে অঞ্চল হিসাবে উল্লেখ করা হয়। অঞ্চলগুলির গ্রুপগুলিকে অঞ্চল হিসাবে উল্লেখ করা হয়। -একই অঞ্চলে একাধিক অঞ্চলে একটি ক্লাস্টার ছড়িয়ে দেওয়ার মাধ্যমে, এটি একটি জোন অনুপলব্ধ হয়ে গেলেও আপনার ক্লাস্টারটি কাজ করা চালিয়ে যাওয়ার সম্ভাবনাকে উন্নত করতে পারে। -বিস্তারিত জানার জন্য [একাধিক জোনে চলমান](/docs/setup/best-practices/multiple-zones/) দেখুন। -- *চলমান বৈশিষ্ট্যগুলি পরিচালনা করুন*: আপনি যদি সময়ের সাথে সাথে আপনার ক্লাস্টার রাখার পরিকল্পনা করেন তবে এর স্বাস্থ্য এবং নিরাপত্তা বজায় রাখার জন্য আপনাকে কিছু কাজ করতে হবে। উদাহরণ স্বরূপ, -আপনি kubeadm এর সাথে ইনস্টল করলে, আপনাকে সাহায্য করার জন্য নির্দেশাবলী রয়েছে -[শংসাপত্র ব্যবস্থাপনা](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/) -এবং [kubeadm ক্লাস্টার আপগ্রেড করা](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/)। -কুবারনেটিস প্রশাসনিক কাজগুলির একটি দীর্ঘ তালিকার জন্য [ক্লাস্টার অ্যাডমিনিস্টার](/docs/tasks/administer-cluster/) দেখুন। - -আপনি যখন কন্ট্রোল প্লেন পরিষেবাগুলি চালান তখন উপলব্ধ বিকল্পগুলি সম্পর্কে জানতে, দেখুন [kube-apisserver](/docs/reference/command-line-tools-reference/kube-apiserver/), -[কুব-কন্ট্রোলার-ম্যানেজার](/docs/reference/command-line-tools-reference/kube-controller-manager/), -এবং [কুব-শিডিউলার](/docs/reference/command-line-tools-reference/kube-scheduler/) -উপাদান পৃষ্ঠা। অত্যন্ত উপলব্ধ নিয়ন্ত্রণ সমতল উদাহরণের জন্য, দেখুন -[অত্যন্ত উপলব্ধ টপোলজির জন্য বিকল্পগুলি](/docs/setup/production-environment/tools/kubeadm/ha-topology/), -[kubeadm-এর সাহায্যে অত্যন্ত উপলভ্য ক্লাস্টার তৈরি করা](/docs/setup/production-environment/tools/kubeadm/high-availability/), -এবং [Kubernetes-এর জন্য অপারেটিং etcd ক্লাস্টার](/docs/tasks/administer-cluster/configure-upgrade-etcd/)। -দেখুন [একটি etcd ক্লাস্টার ব্যাক আপ করা](/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster) -একটি etcd ব্যাকআপ পরিকল্পনা তৈরির তথ্যের জন্য। - -### প্রোডাকশন ওয়ার্কার নোড - -উৎপাদন-গুণমানের কাজের চাপ স্থিতিস্থাপক হতে হবে এবং তারা যেকোন কিছুর উপর নির্ভর করে স্থিতিস্থাপক হতে হবে (যেমন CoreDNS)। আপনি নিজের কন্ট্রোল প্লেন পরিচালনা করুন বা একটি ক্লাউড প্রদানকারী আপনার জন্য এটি করুন, আপনাকে এখনও বিবেচনা করতে হবে কিভাবে আপনি আপনার কর্মী নোডগুলি পরিচালনা করতে চান (এছাড়াও সহজভাবে *নোড* হিসাবে উল্লেখ করা হয়)। - -- *নোডগুলি কনফিগার করুন*: নোডগুলি শারীরিক বা ভার্চুয়াল মেশিন হতে পারে। আপনি যদি নিজের নোডগুলি তৈরি করতে এবং পরিচালনা করতে চান তবে আপনি একটি সমর্থিত অপারেটিং সিস্টেম ইনস্টল করতে পারেন, তারপরে উপযুক্ত যোগ করুন এবং চালান -[নোড পরিষেবাগুলি](/docs/concepts/overview/components/#node-components)। বিবেচনা করুন: - - উপযুক্ত মেমরি, সিপিউ, এবং ডিস্কের গতি এবং স্টোরেজ ক্ষমতা উপলব্ধ থাকার মাধ্যমে আপনি যখন নোড সেট আপ করেন তখন আপনার কাজের চাপের চাহিদা। - - জেনেরিক কম্পিউটার সিস্টেমগুলি করবে কিনা বা আপনার কাছে এমন কাজের চাপ আছে যেগুলির জন্য জিপিউ প্রসেসর, উইন্ডোজ নোড, বা ভিএম বিচ্ছিন্নতা প্রয়োজন। -- *ভ্যালিডেট নোড*: কিভাবে একটি নোড একটি কুবারনেটিস ক্লাস্টারে যোগদানের প্রয়োজনীয়তা পূরণ করে তা নিশ্চিত করার জন্য তথ্যের জন্য [ভ্যালিড নোড সেটআপ](/docs/setup/best-practices/node-conformance/) দেখুন। -- *ক্লাস্টারে নোড যোগ করুন*: আপনি যদি নিজের ক্লাস্টার পরিচালনা করেন তাহলে আপনি আপনার নিজস্ব মেশিন সেট আপ করে নোড যোগ করতে পারেন এবং হয় সেগুলিকে ম্যানুয়ালি যোগ করে অথবা ক্লাস্টারের এপিসার্ভারে নিজেদের নিবন্ধন করতে পারেন। এই উপায়ে নোড যোগ করার জন্য Kubernetes কিভাবে সেট আপ করতে হয় সে সম্পর্কে তথ্যের জন্য [নোডসমুহ](/docs/concepts/architecture/nodes/) বিভাগটি দেখুন। -- *ক্লাস্টারে উইন্ডোজ নোড যোগ করুন*: কুবারনেটস উইন্ডোজ ওয়ার্কার নোডের জন্য সমর্থন অফার করে, যা আপনাকে উইন্ডোজ কন্টেইনারে বাস্তবায়িত ওয়ার্কলোড চালানোর অনুমতি দেয়। বিস্তারিত জানার জন্য [কুবারনেটিস-এ উইন্ডোজ](/docs/setup/production-environment/windows/) দেখুন। -- *স্কেল নোড*: শেষ পর্যন্ত আপনার ক্লাস্টারের প্রয়োজন হবে এমন ক্ষমতা বাড়ানোর জন্য একটি পরিকল্পনা করুন। দেখুন [বড় ক্লাস্টারগুলির জন্য বিবেচনা](/docs/setup/best-practices/cluster-large/) -আপনার কতগুলি নোড দরকার তা নির্ধারণ করতে সাহায্য করার জন্য, আপনার চালানোর জন্য পড এবং পাত্রের সংখ্যার উপর ভিত্তি করে। আপনি যদি নিজে নোড পরিচালনা করেন, তাহলে এর অর্থ হতে পারে আপনার নিজের শারীরিক সরঞ্জাম কেনা এবং ইনস্টল করা। -- *অটোস্কেল নোড*: বেশিরভাগ ক্লাউড প্রদানকারী সমর্থন করে -[ক্লাস্টার অটোস্কেলার](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#readme) অস্বাস্থ্যকর নোডগুলি প্রতিস্থাপন করতে বা চাহিদা অনুযায়ী নোডের সংখ্যা বৃদ্ধি এবং সঙ্কুচিত করতে। দেখুন অটোস্ক্যালার কিভাবে কাজ করে এবং [ডিপ্লয়মেন্ট](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#deployment) কীভাবে এটি বিভিন্ন ক্লাউড প্রদানকারী দ্বারা প্রয়োগ করা হয়। অন-প্রিমিসেসের জন্য, কিছু ভার্চুয়ালাইজেশন প্ল্যাটফর্ম রয়েছে যা চাহিদার ভিত্তিতে নতুন নোডগুলিকে স্পিন করার জন্য স্ক্রিপ্ট করা যেতে পারে। -- *নোড স্বাস্থ্য পরীক্ষা সেট আপ করুন*: গুরুত্বপূর্ণ কাজের চাপের জন্য, আপনি নিশ্চিত করতে চান যে সেই নোডগুলিতে চলমান নোড এবং পডগুলি স্বাস্থ্যকর। [নোড প্রবলেম ডিটেক্টর](/docs/tasks/debug-application-cluster/monitor-node-health/) ডেমন ব্যবহার করে, আপনি নিশ্চিত করতে পারেন আপনার নোডগুলি সুস্থ। - -## উৎপাদন ব্যবহারকারী ব্যবস্থাপনা - -উৎপাদনে, আপনি হয়ত এমন একটি মডেল থেকে সরে যাচ্ছেন যেখানে আপনি বা একটি ছোট গোষ্ঠী ক্লাস্টারে প্রবেশ করছেন যেখানে সম্ভাব্য কয়েক ডজন বা শত শত লোক থাকতে পারে। একটি শেখার পরিবেশে বা প্ল্যাটফর্ম প্রোটোটাইপে, আপনার একটি একক থাকতে পারে আপনি যা করেন তার জন্য প্রশাসনিক অ্যাকাউন্ট। উৎপাদনে, আপনি বিভিন্ন নামস্থানে বিভিন্ন স্তরের অ্যাক্সেস সহ আরও অ্যাকাউন্ট চাইবেন। - -একটি উৎপাদন-গুণমানের ক্লাস্টার নেওয়ার অর্থ হল আপনি কীভাবে বেছে বেছে অন্য ব্যবহারকারীদের অ্যাক্সেসের অনুমতি দিতে চান তা নির্ধারণ করা। বিশেষ করে, যারা আপনার ক্লাস্টার (প্রমাণিকরণ) অ্যাক্সেস করার চেষ্টা করে তাদের পরিচয় যাচাই করার জন্য এবং তারা যা জিজ্ঞাসা করছে (অনুমোদন) করার অনুমতি আছে কিনা তা নির্ধারণ করার জন্য আপনাকে কৌশল নির্বাচন করতে হবেঃ - -- *প্রমাণিকরণ*: apiserver ক্লায়েন্ট ব্যবহার করে ব্যবহারকারীদের প্রমাণীকরণ করতে পারে -শংসাপত্র, বহনকারী টোকেন, একটি প্রমাণীকরণ প্রক্সি, বা HTTP মৌলিক প্রমাণীকরণ। -আপনি কোন প্রমাণীকরণ পদ্ধতি ব্যবহার করতে চান তা চয়ন করতে পারেন। -প্লাগইন ব্যবহার করে, apiserver আপনার প্রতিষ্ঠানের বিদ্যমান সুবিধা নিতে পারে -প্রমাণীকরণ পদ্ধতি, যেমন LDAP বা Kerberos। দেখা -[প্রমাণকরণ](/docs/reference/access-authn-authz/authentication/) -কুবারনেটিস ব্যবহারকারীদের প্রমাণীকরণের এই বিভিন্ন পদ্ধতির বর্ণনার জন্য। -- *অনুমোদন*: আপনি যখন আপনার নিয়মিত ব্যবহারকারীদের অনুমোদন করার জন্য প্রস্তুত হন, আপনি সম্ভবত RBAC এবং ABAC অনুমোদনের মধ্যে বেছে নেবেন। ব্যবহারকারীর অ্যাকাউন্ট অনুমোদনের জন্য বিভিন্ন মোড পর্যালোচনা করতে [প্রমাণকরণ ওভারভিউ](/docs/reference/access-authn-authz/authorization/) দেখুন (সেইসাথে আপনার ক্লাস্টারে পরিষেবা অ্যাকাউন্ট অ্যাক্সেস): - - *ভুমিকা-ভিত্তিক অ্যাক্সেস কন্ট্রোল* ([RBAC](/docs/reference/access-authn-authz/rbac/)): প্রমাণীকৃত ব্যবহারকারীদের নির্দিষ্ট সেটের অনুমতি প্রদান করে আপনাকে আপনার ক্লাস্টারে অ্যাক্সেস বরাদ্দ করতে দেয়। একটি নির্দিষ্ট নামস্থান (ভূমিকা) বা সমগ্র ক্লাস্টার জুড়ে (ClusterRole) অনুমতিগুলি বরাদ্দ করা যেতে পারে। তারপর RoleBindings এবং ClusterRoleBindings ব্যবহার করে, সেই অনুমতিগুলি নির্দিষ্ট ব্যবহারকারীদের সাথে সংযুক্ত করা যেতে পারে। - - *অ্যাট্রিবিউট-ভিত্তিক অ্যাক্সেস কন্ট্রোল* ([ABAC](/docs/reference/access-authn-authz/abac/)): আপনাকে ক্লাস্টারে রিসোর্স অ্যাট্রিবিউটের উপর ভিত্তি করে নীতি তৈরি করতে দেয় এবং সেই অ্যাট্রিবিউটগুলির উপর ভিত্তি করে অ্যাক্সেসের অনুমতি দেয় বা অস্বীকার করে। একটি নীতি ফাইলের প্রতিটি লাইন সংস্করণ বৈশিষ্ট্য (apiVersion এবং প্রকার) এবং বিষয় (ব্যবহারকারী বা গোষ্ঠী), সংস্থান সম্পত্তি, অ-সম্পদ সম্পত্তি (/সংস্করণ বা /এপিস) এবং শুধুমাত্র পঠনযোগ্য বৈশিষ্ট্যের সাথে মেলে বিশেষ বৈশিষ্ট্যগুলির একটি মানচিত্র সনাক্ত করে। বিস্তারিত জানার জন্য [উদাহরণ](/docs/reference/access-authn-authz/abac/#examples) দেখুন। - -যেহেতু কেউ আপনার প্রোডাকশন কুবারনেটস ক্লাস্টারে প্রমাণীকরণ এবং অনুমোদন সেট আপ করছে, এখানে কিছু বিষয় বিবেচনা করার আছেঃ - -- *অনুমোদন মোড সেট করুন*: যখন Kubernetes API সার্ভার -([kube-apiserver](/docs/reference/command-line-tools-reference/kube-apiserver/)) -শুরু হয়, সমর্থিত প্রমাণীকরণ মোডগুলি অবশ্যই *--অথরাইজেশন-মোড* ব্যবহার করে সেট করতে হবে -পতাকা উদাহরণস্বরূপ, *kube-adminserver.yaml* ফাইলে সেই পতাকা (*/etc/kubernetes/manifests*-এ) -Node, RBAC এ সেট করা যেতে পারে। এটি প্রমাণীকৃত অনুরোধের জন্য নোড এবং RBAC অনুমোদনের অনুমতি দেবে। -- *ব্যবহারকারী সার্টিফিকেট এবং রোল বাইন্ডিং (RBAC)* তৈরি করুন: আপনি যদি RBAC অনুমোদন ব্যবহার করেন, ব্যবহারকারীরা একটি CertificateSigningRequest (CSR) তৈরি করতে পারেন যা ক্লাস্টার CA দ্বারা স্বাক্ষরিত হতে পারে। তারপর আপনি প্রতিটি ব্যবহারকারীর ভূমিকা এবং ক্লাস্টার রোল বাঁধাই করতে পারেন। -[শংসাপত্র স্বাক্ষরের অনুরোধ](/docs/reference/access-authn-authz/certificate-signing-requests/) দেখুন -বিস্তারিত জানার জন্য. -- *অ্যাট্রিবিউটগুলিকে একত্রিত করে এমন নীতিগুলি তৈরি করুন (ABAC)*: আপনি যদি ABAC অনুমোদন ব্যবহার করেন তবে আপনি নির্দিষ্ট সংস্থানগুলি (যেমন একটি পড), নামস্থান, বা apiGroup অ্যাক্সেস করার জন্য নির্বাচিত ব্যবহারকারী বা গোষ্ঠীগুলিকে অনুমোদন করার জন্য নীতিগুলি গঠনের জন্য বৈশিষ্ট্যগুলির সংমিশ্রণ বরাদ্দ করতে পারেন৷ আরও তথ্যের জন্য, [উদাহরণ](/docs/reference/access-authn-authz/abac/#examples) দেখুন। -- *ভর্তি নিয়ন্ত্রকদের বিবেচনা করুন*: API সার্ভারের মাধ্যমে আসতে পারে এমন অনুরোধের জন্য অনুমোদনের অতিরিক্ত ফর্ম অন্তর্ভুক্ত -[ওয়েবহুক টোকেন প্রমাণীকরণ](/docs/reference/access-authn-authz/authentication/#webhook-token-authentication)। -API সার্ভারে [ভর্তি কন্ট্রোলার](/docs/reference/access-authn-authz/admission-controllers/) যোগ করে ওয়েবহুক এবং অন্যান্য বিশেষ অনুমোদনের ধরন সক্ষম করতে হবে। - -## কাজের চাপের সম্পদের সীমা নির্ধারণ করুন - -প্রোডাকশন ওয়ার্কলোডের চাহিদা কুবারনেটস কন্ট্রোল প্লেনের ভিতরে এবং বাইরে উভয় ক্ষেত্রেই চাপ সৃষ্টি করতে পারে। আপনার ক্লাস্টারের কাজের চাপের প্রয়োজনের জন্য সেট আপ করার সময় এই আইটেমগুলি বিবেচনা করুনঃ - -- *নেমস্পেস সীমা সেট করুন*: মেমরি এবং সিপিইউ এর মত জিনিসগুলিতে প্রতি-নেমস্পেস কোটা সেট করুন। দেখা -[মেমরি, সিপিইউ এবং এপিআই সংস্থানগুলি পরিচালনা করুন](/docs/tasks/administer-cluster/manage-resources/) -বিস্তারিত জানার জন্য. আপনিও সেট করতে পারেন -[হায়ারার্কিক্যাল নামস্থান](/blog/2020/08/14/introducing-hierarchical-namespaces/) -উত্তরাধিকার সীমার জন্য। -- *ডিএনএস চাহিদার জন্য প্রস্তুত করুন*: আপনি যদি আশা করেন যে কাজের চাপ ব্যাপকভাবে বৃদ্ধি পাবে, আপনার ডিএনএস পরিষেবাটিও স্কেল বাড়াতে প্রস্তুত থাকতে হবে। দেখা -[একটি ক্লাস্টারে DNS পরিষেবাটি অটোস্কেল করুন](/docs/tasks/administer-cluster/dns-horizontal-autoscaling/)। -- *অতিরিক্ত পরিষেবা অ্যাকাউন্ট তৈরি করুন*: ব্যবহারকারীর অ্যাকাউন্টগুলি নির্ধারণ করে যে ব্যবহারকারীরা একটি ক্লাস্টারে কী করতে পারে, যখন একটি পরিষেবা অ্যাকাউন্ট একটি নির্দিষ্ট নামস্থানের মধ্যে পড অ্যাক্সেসকে সংজ্ঞায়িত করে। ডিফল্টরূপে, একটি পড তার নামস্থান থেকে ডিফল্ট পরিষেবা অ্যাকাউন্টে নেয়। -দেখুন [পরিষেবা অ্যাকাউন্ট পরিচালনা](/docs/reference/access-authn-authz/service-accounts-admin/) -একটি নতুন পরিষেবা অ্যাকাউন্ট তৈরির তথ্যের জন্য। উদাহরণস্বরূপ, আপনি চাইতে পারেন: - - গোপনীয়তা যোগ করুন যা একটি পড একটি নির্দিষ্ট ধারক রেজিস্ট্রি থেকে ছবি তুলতে ব্যবহার করতে পারে। উদাহরণের জন্য [পডের জন্য পরিষেবা অ্যাকাউন্ট কনফিগার করুন](/docs/tasks/configure-pod-container/configure-service-account/) দেখুন। - - একটি পরিষেবা অ্যাকাউন্টে RBAC অনুমতি বরাদ্দ করুন। বিস্তারিত জানার জন্য [ServiceAccount permissions](/docs/reference/access-authn-authz/rbac/#service-account-permissions) দেখুন। - -## {{% heading "whatsnext" %}} - -- আপনি নিজের প্রোডাকশন কুবারনেটস তৈরি করতে চান বা উপলব্ধ [টার্নকি ক্লাউড সলিউশনস](/docs/setup/production-environment/turnkey-solutions/) থেকে একটি পেতে চান কিনা তা স্থির করুন অথবা [কুবারনেটিস পার্টনার](https://kubernetes.io/partners/)। -- আপনি যদি নিজের ক্লাস্টার তৈরি করতে চান, তাহলে পরিকল্পনা করুন কিভাবে আপনি [শংসাপত্র] (/docs/setup/best-practices/certificates/) পরিচালনা করতে চান -এবং যেমন বৈশিষ্ট্য জন্য উচ্চ প্রাপ্যতা সেট আপ -[etcd](/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/) এবং [API সার্ভার](/docs/setup/production-environment/tools/kubeadm/ha- টপোলজি/)। -- [kubeadm](/docs/setup/production-environment/tools/kubeadm/), [kops](/docs/setup/production-environment/tools/kops/) অথবা [Kubespray](/docs/setup/) থেকে বেছে নিন উত্পাদন-পরিবেশ/সরঞ্জাম/কুবেস্প্রে/) -স্থাপনা পদ্ধতি। -- আপনার নির্ধারণ করে ব্যবহারকারী ব্যবস্থাপনা কনফিগার করুন -[প্রমাণকরণ](/docs/reference/access-authn-authz/authentication/) এবং -[অনুমোদন](/docs/reference/access-authn-authz/authorization/) পদ্ধতি। -- সেট আপ করে অ্যাপ্লিকেশন ওয়ার্কলোডের জন্য প্রস্তুত করুন -[সম্পদ সীমা](/docs/tasks/administer-cluster/manage-resources/), -[DNS অটোস্কেলিং](/docs/tasks/administer-cluster/dns-horizontal-autoscaling/) -এবং [পরিষেবা অ্যাকাউন্ট](/docs/reference/access-authn-authz/service-accounts-admin/)। From df098f7ae15896a22207cc021b6269b74d86dc0a Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Sat, 8 Jul 2023 18:09:03 +0600 Subject: [PATCH 0094/1086] content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html added (#41807) Signed-off-by: Sajib Adhikary --- .../create-cluster/cluster-intro.html | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html diff --git a/content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html b/content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html new file mode 100644 index 0000000000..62ae23574f --- /dev/null +++ b/content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html @@ -0,0 +1,109 @@ +--- +title: একটি ক্লাস্টার তৈরি করতে Minikube ব্যবহার করো +weight: 10 +--- + + + + + + + + + +
+ +
+ +
+ +
+

Objectives

+
    +
  • Kubernetes ক্লাস্টার কি তা জানুন.
  • +
  • Minikube কি তা জানুন.
  • +
  • একটি অনলাইন টার্মিনাল ব্যবহার করে একটি Kubernetes ক্লাস্টার শুরু করুন।
  • +
+
+ +
+

Kubernetes Clusters

+

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

+

>একটি কুবারনেটিস ক্লাস্টার দুটি ধরণের সংস্থান নিয়ে গঠিত: + +

    +
  • The নিয়ন্ত্রণ প্যানেল (Control Plane) ক্লাস্টার (cluster) সমন্বয় করে
  • +
  • নোড (Nodes) হল কর্মীরা যারা অ্যাপ্লিকেশনটি (applications) চালায়
  • +
+

+
+ +
+
+

সারসংক্ষেপ:

+
    +
  • কুবারনেটিস ক্লাস্টার (Kubernetes cluster)
  • +
  • মিনিকুব (Minikube)
  • +
+
+
+

+ কুবারনেটিস হল একটি প্রোডাকশন-গ্রেড, ওপেন-সোর্স প্ল্যাটফর্ম যা কম্পিউটার ক্লাস্টারের মধ্যে এবং জুড়ে অ্যাপ্লিকেশন কন্টেইনারগুলির প্লেসমেন্ট (শিডিউলিং) এবং এক্সিকিউশনকে অর্কেস্ট্রেট করে। + +

+
+
+
+
+ +
+
+

ক্লাস্টার ডায়াগ্রাম (Cluster Diagram)

+
+
+ +
+
+

+
+
+
+ +
+
+

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

+

একটি নোড হল একটি VM বা একটি শারীরিক কম্পিউটার যা একটি কুবারনেটিস ক্লাস্টারে কর্মী মেশিন হিসাবে কাজ করে। প্রতিটি নোডের একটি কুবেলেট থাকে, যা নোড পরিচালনা এবং কুবারনেটিস কন্ট্রোল প্লেনের সাথে যোগাযোগের জন্য একটি এজেন্ট। নোডের কনটেইনার ক্রিয়াকলাপ পরিচালনা করার জন্য সরঞ্জাম থাকা উচিত, যেমন কন্টেইনার বা ডকার। একটি Kubernetes ক্লাস্টার যা উৎপাদন ট্র্যাফিক পরিচালনা করে তার ন্যূনতম তিনটি নোড থাকা উচিত কারণ যদি একটি নোড নিচে চলে যায়, তাহলে একটি etcd সদস্য এবং একটি কন্ট্রোল প্লেন ইনস্ট্যান্স উভয়ই হারিয়ে যায় এবং রিডানডেন্সি আপস করা হয়। আপনি আরো কন্ট্রোল প্লেন নোড যোগ করে এই ঝুঁকি কমাতে পারেন।

+ +
+
+
+

কন্ট্রোল প্লেনগুলি (Control Planes) চলমান অ্যাপ্লিকেশনগুলি হোস্ট করতে ব্যবহৃত ক্লাস্টার এবং নোডগুলি পরিচালনা করে।

+
+
+
+ +
+
+

আপনি যখন কুবারনেটিসএ অ্যাপ্লিকেশনগুলি স্থাপন করেন, তখন আপনি কন্ট্রোল প্লেনকে অ্যাপ্লিকেশন কন্টেইনারগুলি শুরু করতে বলেন৷ কন্ট্রোল প্লেন ক্লাস্টারের নোডগুলিতে চালানোর জন্য কন্টেইনারগুলি নির্ধারণ করে। নোডগুলি কুবারনেটিস API ব্যবহার করে কন্ট্রোল প্লেনের সাথে যোগাযোগ করে, যা কন্ট্রোল প্লেন প্রকাশ করে৷ শেষ ব্যবহারকারীরাও ক্লাস্টারের সাথে ইন্টারঅ্যাক্ট করতে সরাসরি কুবারনেটিস API ব্যবহার করতে পারেন।

+ +

একটি কুবারনেটিস ক্লাস্টার শারীরিক বা ভার্চুয়াল মেশিনে স্থাপন করা যেতে পারে। কুবারনেটিসের বিকাশ শুরু করতে সাথে, আপনি মিনিকুব ব্যবহার করতে পারেন। মিনিকুব হল একটি হালকা ওজনের কুবারনেটিস বাস্তবায়ন যা আপনার স্থানীয় মেশিনে একটি VM তৈরি করে এবং শুধুমাত্র একটি নোড ধারণকারী একটি সাধারণ ক্লাস্টার স্থাপন করে। মিনিকুব লিনাক্স (Minikube Linux), macOS এবং Windows সিস্টেমের জন্য উপলব্ধ। মিনিকুব CLI আপনার ক্লাস্টারের সাথে কাজ করার জন্য প্রাথমিক বুটস্ট্র্যাপিং ক্রিয়াকলাপগুলি প্রদান করে, যার মধ্যে শুরু, থামানো, স্থিতি এবং মুছে ফেলা হয়। এই টিউটোরিয়ালের জন্য, তবে, আপনি মিনিকুবের আগে থেকে ইনস্টল করা একটি প্রদত্ত অনলাইন টার্মিনাল ব্যবহার করবেন৷

+

এখন যেহেতু আপনি জানেন কুবারনেটিস কী, আসুন অনলাইন টিউটোরিয়ালটিতে যাই এবং আমাদের প্রথম ক্লাস্টার শুরু করি!

+ +
+
+
+ + + +
+ +
+ + + From eb769da69b9d24906981faae6c69ddec5e8ba946 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Mon, 10 Jul 2023 00:57:04 +0600 Subject: [PATCH 0095/1086] added: content/bn/docs/setup/production-environment/_index.md (#41958) Signed-off-by: Sajib Adhikary --- .../setup/production-environment/_index.md | 174 ++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 content/bn/docs/setup/production-environment/_index.md diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md new file mode 100644 index 0000000000..a2f8dbd620 --- /dev/null +++ b/content/bn/docs/setup/production-environment/_index.md @@ -0,0 +1,174 @@ +--- +title: "প্রোডাকশন পরিবেশ" +description: একটি প্রোডাকশন-মানের কুবারনেটিস ক্লাস্টার তৈরি করুন +weight: 30 +no_list: true +--- + + +একটি প্রোডাকশন-মানের কুবারনেটিস ক্লাস্টারের জন্য পরিকল্পনা এবং প্রস্তুতি প্রয়োজন। +আপনার কুবারনেটিস ক্লাস্টার যদি সংকটপূর্ণ কাজের চাপ চালাতে হয়, তাহলে এটি অবশ্যই স্থিতিস্থাপক হওয়ার জন্য কনফিগার করতে হবে। +এই পৃষ্ঠাটি ব্যাখ্যা করে যে আপনি একটি প্রোডাকশন-প্রস্তুত ক্লাস্টার সেট আপ করতে নিতে পারেন, +অথবা প্রোডাকশন ব্যবহারের জন্য একটি বিদ্যমান ক্লাস্টার কিভাবে প্রচার করতে পারেন। +আপনি যদি ইতিমধ্যেই প্রোডাকশন সেটআপের সাথে পরিচিত হন এবং লিঙ্কগুলি চান তবে [পরবর্তী ধাপ](#what-s-next) এ এগিয়ে যান। + + + +## প্রোডাকশন বিবেচনা + +সাধারণত, একটি প্রোডাকশন কুবারনেটিস ক্লাস্টার পরিবেশে শুধু ব্যক্তিগত শিক্ষা, ডেভেলপমেন্ট, বা পরীক্ষার পরিবেশ কুবারনেটিস যথেষ্ট নয়, তার চেয়ে বেশি প্রয়োজনীয়তা থাকে। +একটি প্রোডাকশন পরিবেশের অনেক ব্যবহারকারীর নিরাপদ অ্যাক্সেস, সামঞ্জস্যপূর্ণ প্রাপ্যতা এবং পরিবর্তিত চাহিদাগুলির সাথে খাপ খাইয়ে নেওয়ার জন্য সংস্থানগুলির প্রয়োজন হতে পারে। + +আপনি যখন সিদ্ধান্ত নিচ্ছেন যে আপনি আপনার উৎপাদন কুবারনেটিস পরিবেশ কোথায় রাখতে চান (প্রাঙ্গনে বা ক্লাউডে) এবং আপনি যে পরিমাণ ব্যবস্থাপনা নিতে চান বা অন্যদের হাতে দিতে চান, বিবেচনা করুন কিভাবে একটি কুবারনেটিস ক্লাস্টারের জন্য আপনার প্রয়োজনীয়তা নিম্নলিখিত সমস্যাগুলির দ্বারা প্রভাবিত হয়: + +- *প্রাপ্যতা*: একটি একক-মেশিন কুবারনেটিস [লার্নিং এনভায়রনমেন্ট](/docs/setup/#learning-environment) +ব্যর্থতার একক পয়েন্ট আছে। একটি অত্যন্ত উপলব্ধ ক্লাস্টার তৈরি করার অর্থ বিবেচনা করা: + - কর্মী নোড থেকে নিয়ন্ত্রণ সমতল পৃথক করা। + - একাধিক নোডগুলিতে নিয়ন্ত্রণ সমতল উপাদানগুলির প্রতিলিপি করা। + - ক্লাস্টারের {{< glossary_tooltip term_id="kube-apiserver" text="API সার্ভার" >}}-এ ব্যালেন্সিং ট্রাফিক লোড করুন৷ + - পর্যাপ্ত কর্মী নোড উপলব্ধ থাকা, বা দ্রুত উপলব্ধ হতে সক্ষম, কারণ পরিবর্তিত কাজের চাপ এটি নিশ্চিত করে। + +- *স্কেল*: আপনি যদি আশা করেন আপনার প্রোডাকশন কুবারনেটিস পরিবেশ একটি স্থিতিশীল পরিমাণে চাহিদা পাবে, তাহলে আপনি আপনার প্রয়োজনীয় ক্ষমতার জন্য সেট আপ করতে সক্ষম হবেন এবং সম্পন্ন হবে। কিন্তু, আপনি যদি সময়ের সাথে সাথে চাহিদা বাড়তে বা সিজন বা বিশেষ ইভেন্টের মতো বিষয়গুলির উপর ভিত্তি করে নাটকীয়ভাবে পরিবর্তনের আশা করেন, তাহলে আপনাকে পরিকল্পনা করতে হবে কীভাবে বৃদ্ধির উপশম করতে হবে কন্ট্রোল প্লেন এবং কর্মী নোডগুলিতে আরও অনুরোধ থেকে চাপ বা অব্যবহৃত সংস্থানগুলি কমাতে স্কেল ডাউন। + +- *নিরাপত্তা এবং অ্যাক্সেস ম্যানেজমেন্ট*: আপনার নিজস্ব কুবারনেটিস লার্নিং ক্লাস্টারে আপনার সম্পূর্ণ অ্যাডমিন সুবিধা রয়েছে। কিন্তু গুরুত্বপূর্ণ কাজের চাপ সহ ভাগ করা ক্লাস্টার, এবং এক বা দুইজনের বেশি ব্যবহারকারীর জন্য কে এবং কি ক্লাস্টার সংস্থান অ্যাক্সেস করতে পারে, তার জন্য আরও পরিমার্জিত পদ্ধতির প্রয়োজন। আপনি ভূমিকা-ভিত্তিক অ্যাক্সেস কন্ট্রোল ([RBAC](/docs/reference/access-authn-authz/rbac/)) এবং অন্যান্য নিরাপত্তা ব্যবস্থা ব্যবহার করতে পারেন যাতে ব্যবহারকারী এবং কাজের চাপ তাদের প্রয়োজনীয় সংস্থানগুলিতে অ্যাক্সেস পেতে পারে, পাশাপাশি কাজের চাপ, এবং ক্লাস্টার নিরাপদ থাকে। +আপনি [নীতি](/docs/concepts/policy/) এবং পরিচালনার মাধ্যমে ব্যবহারকারী এবং কাজের চাপ অ্যাক্সেস করতে পারে এমন সংস্থানগুলির সীমা নির্ধারণ করতে পারেন এবং +[কনটেইনার সম্পদ](/docs/concepts/configuration/manage-resources-containers/)। + +নিজের হাতে একটি কুবারনেটস উৎপাদন পরিবেশ তৈরি করার আগে, এই কাজটির কিছু বা সমস্ত কাজ [টার্নকি ক্লাউড সলিউশন](/docs/setup/production-environment/turnkey-solutions/) প্রদানকারী বা অন্যান্য [কুবারনেটিস পার্টনার](https://kubernetes.io/partners/) এর কাছে হস্তান্তর করার কথা বিবেচনা করুন। +বিকল্পগুলোর মধ্যে রয়েছেঃ + +- *সার্ভারলেস*: কোনও ক্লাস্টার পরিচালনা না করেই তৃতীয় পক্ষের সরঞ্জামগুলিতে কাজের চাপ চালান। সিপিউ ব্যবহার, মেমরি এবং ডিস্ক অনুরোধের মতো জিনিসগুলির জন্য আপনাকে চার্জ করা হবে। +- *পরিচালিত কন্ট্রোল প্লেন*: প্রদানকারীকে ক্লাস্টারের কন্ট্রোল প্লেনের স্কেল এবং প্রাপ্যতা, সেইসাথে প্যাচ এবং আপগ্রেডগুলি পরিচালনা করতে দিন। +- *পরিচালিত কর্মী নোড*: আপনার প্রয়োজন মেটাতে নোডগুলির পুল কনফিগার করুন, তারপর প্রদানকারী নিশ্চিত করে যে সেই নোডগুলি উপলব্ধ এবং প্রয়োজনের সময় আপগ্রেড বাস্তবায়নের জন্য প্রস্তুত। +- *ইন্টিগ্রেশন*: এমন প্রোভাইডার আছে যারা কুবারনেটসকে আপনার প্রয়োজন হতে পারে এমন অন্যান্য পরিষেবার সাথে একীভূত করে, যেমন স্টোরেজ, কনটেইনার রেজিস্ট্রি, প্রমাণীকরণ পদ্ধতি এবং ডেভেলপমেন্ট টুল। + +আপনি নিজে একটি প্রোডাকশন কুবারনেটস ক্লাস্টার তৈরি করুন বা অংশীদারদের সাথে কাজ করুন না কেন, আপনার ক্লাস্টারের *কন্ট্রোল প্লেন*, *ওয়ার্কার নোড*, *ব্যবহারকারীর অ্যাক্সেস* এবং *ওয়ার্কলোড রিসোর্স* এর সাথে সম্পর্কিত আপনার চাহিদাগুলি মূল্যায়ন করতে নিম্নলিখিত বিভাগগুলি পর্যালোচনা করুন। + +## উৎপাদন ক্লাস্টার সেটআপ + +একটি উৎপাদন-মানের কুবারনেটস ক্লাস্টারে, কন্ট্রোল প্লেন পরিষেবাগুলি থেকে ক্লাস্টার পরিচালনা করে যা একাধিক কম্পিউটারে বিভিন্ন উপায়ে ছড়িয়ে পড়তে পারে। প্রতিটি কর্মী নোড, তবে, একটি একক সত্তাকে প্রতিনিধিত্ব করে যা কুবারনেটস পড চালানোর জন্য কনফিগার করা হয়েছে। + +### উৎপাদন নিয়ন্ত্রণ প্লেন + +সহজতম কুবারনেটিস ক্লাস্টারে একই মেশিনে পুরো নিয়ন্ত্রণ সমতল এবং কর্মী নোড পরিষেবাগুলি চলছে। আপনি কর্মী নোডগুলি যোগ করে সেই পরিবেশটি বৃদ্ধি করতে পারেন, যেমনটি [কুবারনেটিস উপাদান](/docs/concepts/overview/components/) এ চিত্রিত চিত্রে প্রতিফলিত হয়েছে। + +যদি ক্লাস্টারটি অল্প সময়ের জন্য উপলভ্য থাকে বা কিছু গুরুতর ভুল হয়ে গেলে তা বাতিল করা যেতে পারে, তাহলে এটি আপনার প্রয়োজন মেটাতে পারে। + +আপনার যদি আরও স্থায়ী, অত্যন্ত উপলব্ধ ক্লাস্টারের প্রয়োজন হয় তবে, আপনার নিয়ন্ত্রণ সমতল প্রসারিত করার উপায়গুলি বিবেচনা করা উচিত। নকশা অনুসারে, একক মেশিনে চলমান এক-মেশিন নিয়ন্ত্রণ বিমান পরিষেবাগুলি খুব বেশি উপলব্ধ নয়। +যদি ক্লাস্টার চালু রাখা এবং চালানো এবং কিছু ভুল হলে তা মেরামত করা যায় তা নিশ্চিত করা গুরুত্বপূর্ণ, এই পদক্ষেপগুলি বিবেচনা করুনঃ + +- *ডিপ্লয়মেন্ট টুলস চয়ন করুন*: আপনি kubeadm, kops এবং kubespray এর মত টুল ব্যবহার করে একটি কন্ট্রোল প্লেন স্থাপন করতে পারেন। দেখা +[ডিপ্লয়মেন্ট টুলের সাথে কুবারনেটস ইনস্টল করা হচ্ছে](/docs/setup/production-environment/tools/) +প্রতিটি স্থাপনার পদ্ধতি ব্যবহার করে উৎপাদন-মানের স্থাপনার জন্য টিপস শিখতে। ভিন্ন [কন্টেইনার রানটাইমস](/docs/setup/production-environment/container-runtimes/) +আপনার স্থাপনার সাথে ব্যবহার করার জন্য উপলব্ধ। +- *শংসাপত্র পরিচালনা করুন*: নিয়ন্ত্রণ বিমান পরিষেবাগুলির মধ্যে সুরক্ষিত যোগাযোগ শংসাপত্র ব্যবহার করে প্রয়োগ করা হয়। শংসাপত্রগুলি স্থাপনের সময় স্বয়ংক্রিয়ভাবে তৈরি হয় বা আপনি আপনার নিজের শংসাপত্র কর্তৃপক্ষ ব্যবহার করে সেগুলি তৈরি করতে পারেন৷ +বিস্তারিত জানার জন্য [PKI সার্টিফিকেট এবং প্রয়োজনীয়তা](/docs/setup/best-practices/certificates/) দেখুন। +- *এপিআইসার্ভার জন্য লোড ব্যালেন্সার কনফিগার করুন*: একটি লোড ব্যালেন্সার কনফিগার করুন +বিভিন্ন নোডে চলমান এপিআইসার্ভার পরিষেবা দৃষ্টান্তগুলিতে বাহ্যিক API অনুরোধগুলি বিতরণ করতে। বিস্তারিত জানার জন্য [একটি বহিরাগত লোড ব্যালেন্সার তৈরি করুন](/docs/tasks/access-application-cluster/create-external-load-balancer/) দেখুন। +- *পৃথক এবং ব্যাকআপ etcd পরিষেবা*: etcd পরিষেবাগুলি হয় অন্যান্য কন্ট্রোল প্লেন পরিষেবাগুলির মতো একই মেশিনে চালানো যেতে পারে বা অতিরিক্ত নিরাপত্তা এবং প্রাপ্যতার জন্য আলাদা মেশিনে চলতে পারে৷ যেহেতু etcd ক্লাস্টার কনফিগারেশন ডেটা সঞ্চয় করে, তাই etcd ডাটাবেসের ব্যাকআপ নিয়মিত করা উচিত যাতে আপনি প্রয়োজনে সেই ডাটাবেসটি মেরামত করতে পারেন। +etcd কনফিগার এবং ব্যবহার সম্পর্কে বিস্তারিত জানার জন্য [etcd FAQ](https://etcd.io/docs/v3.4/faq/) দেখুন। +[Kubernetes-এর জন্য অপারেটিং etcd ক্লাস্টার](/docs/tasks/administer-cluster/configure-upgrade-etcd/) দেখুন এবং [kubeadm-এর সাথে একটি উচ্চ প্রাপ্যতা etcd ক্লাস্টার সেট আপ করুন](/docs/setup/production-environment/tools/kubeadm /setup-ha-etcd-with-kubeadm/) +বিস্তারিত জানার জন্য. +- *একাধিক কন্ট্রোল প্লেন সিস্টেম তৈরি করুন*: উচ্চ প্রাপ্যতার জন্য, +নিয়ন্ত্রণ সমতল একটি একক মেশিনে সীমাবদ্ধ করা উচিত নয়। যদি কন্ট্রোল প্লেন পরিষেবাগুলি একটি init পরিষেবা দ্বারা চালিত হয় (যেমন systemd), প্রতিটি পরিষেবা কমপক্ষে তিনটি মেশিনে চালানো উচিত। যাইহোক, Kubernetes-এ পড হিসাবে কন্ট্রোল প্লেন পরিষেবাগুলি চালানো নিশ্চিত করে যে আপনার অনুরোধ করা পরিষেবাগুলির প্রতিলিপিকৃত সংখ্যা সর্বদা উপলব্ধ থাকবে। +সময়সূচী ত্রুটি সহনশীল হতে হবে, কিন্তু অত্যন্ত উপলব্ধ নয়। কিছু স্থাপনার টুল সেট আপ করা [Raft](https://raft.github.io/) কুবারনেটিস পরিষেবার নেতা নির্বাচন করতে ঐক্যমত্য অ্যালগরিদম। যদি প্রাইমারি চলে যায়, অন্য সার্ভিস নিজেই নির্বাচন করে এবং দায়িত্ব নেয়। +- *একাধিক অঞ্চল স্প্যান করুন*: যদি আপনার ক্লাস্টারকে সর্বদা উপলব্ধ রাখা গুরুত্বপূর্ণ হয়, তবে একটি ক্লাস্টার তৈরি করার কথা বিবেচনা করুন যা একাধিক ডেটা সেন্টার জুড়ে চলে, ক্লাউড পরিবেশে অঞ্চল হিসাবে উল্লেখ করা হয়। অঞ্চলগুলির গ্রুপগুলিকে অঞ্চল হিসাবে উল্লেখ করা হয়। +একই অঞ্চলে একাধিক অঞ্চলে একটি ক্লাস্টার ছড়িয়ে দেওয়ার মাধ্যমে, এটি একটি জোন অনুপলব্ধ হয়ে গেলেও আপনার ক্লাস্টারটি কাজ করা চালিয়ে যাওয়ার সম্ভাবনাকে উন্নত করতে পারে। +বিস্তারিত জানার জন্য [একাধিক জোনে চলমান](/docs/setup/best-practices/multiple-zones/) দেখুন। +- *চলমান বৈশিষ্ট্যগুলি পরিচালনা করুন*: আপনি যদি সময়ের সাথে সাথে আপনার ক্লাস্টার রাখার পরিকল্পনা করেন তবে এর স্বাস্থ্য এবং নিরাপত্তা বজায় রাখার জন্য আপনাকে কিছু কাজ করতে হবে। উদাহরণ স্বরূপ, +আপনি kubeadm এর সাথে ইনস্টল করলে, আপনাকে সাহায্য করার জন্য নির্দেশাবলী রয়েছে +[শংসাপত্র ব্যবস্থাপনা](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/) +এবং [kubeadm ক্লাস্টার আপগ্রেড করা](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/)। +কুবারনেটিস প্রশাসনিক কাজগুলির একটি দীর্ঘ তালিকার জন্য [ক্লাস্টার অ্যাডমিনিস্টার](/docs/tasks/administer-cluster/) দেখুন। + +আপনি যখন কন্ট্রোল প্লেন পরিষেবাগুলি চালান তখন উপলব্ধ বিকল্পগুলি সম্পর্কে জানতে, দেখুন [kube-apisserver](/docs/reference/command-line-tools-reference/kube-apiserver/), +[কুব-কন্ট্রোলার-ম্যানেজার](/docs/reference/command-line-tools-reference/kube-controller-manager/), +এবং [কুব-শিডিউলার](/docs/reference/command-line-tools-reference/kube-scheduler/) +উপাদান পৃষ্ঠা। অত্যন্ত উপলব্ধ নিয়ন্ত্রণ সমতল উদাহরণের জন্য, দেখুন +[অত্যন্ত উপলব্ধ টপোলজির জন্য বিকল্পগুলি](/docs/setup/production-environment/tools/kubeadm/ha-topology/), +[kubeadm-এর সাহায্যে অত্যন্ত উপলভ্য ক্লাস্টার তৈরি করা](/docs/setup/production-environment/tools/kubeadm/high-availability/), +এবং [Kubernetes-এর জন্য অপারেটিং etcd ক্লাস্টার](/docs/tasks/administer-cluster/configure-upgrade-etcd/)। +দেখুন [একটি etcd ক্লাস্টার ব্যাক আপ করা](/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster) +একটি etcd ব্যাকআপ পরিকল্পনা তৈরির তথ্যের জন্য। + +### প্রোডাকশন ওয়ার্কার নোড + +উৎপাদন-গুণমানের কাজের চাপ স্থিতিস্থাপক হতে হবে এবং তারা যেকোন কিছুর উপর নির্ভর করে স্থিতিস্থাপক হতে হবে (যেমন CoreDNS)। আপনি নিজের কন্ট্রোল প্লেন পরিচালনা করুন বা একটি ক্লাউড প্রদানকারী আপনার জন্য এটি করুন, আপনাকে এখনও বিবেচনা করতে হবে কিভাবে আপনি আপনার কর্মী নোডগুলি পরিচালনা করতে চান (এছাড়াও সহজভাবে *নোড* হিসাবে উল্লেখ করা হয়)। + +- *নোডগুলি কনফিগার করুন*: নোডগুলি শারীরিক বা ভার্চুয়াল মেশিন হতে পারে। আপনি যদি নিজের নোডগুলি তৈরি করতে এবং পরিচালনা করতে চান তবে আপনি একটি সমর্থিত অপারেটিং সিস্টেম ইনস্টল করতে পারেন, তারপরে উপযুক্ত যোগ করুন এবং চালান +[নোড পরিষেবাগুলি](/docs/concepts/overview/components/#node-components)। বিবেচনা করুন: + - উপযুক্ত মেমরি, সিপিউ, এবং ডিস্কের গতি এবং স্টোরেজ ক্ষমতা উপলব্ধ থাকার মাধ্যমে আপনি যখন নোড সেট আপ করেন তখন আপনার কাজের চাপের চাহিদা। + - জেনেরিক কম্পিউটার সিস্টেমগুলি করবে কিনা বা আপনার কাছে এমন কাজের চাপ আছে যেগুলির জন্য জিপিউ প্রসেসর, উইন্ডোজ নোড, বা ভিএম বিচ্ছিন্নতা প্রয়োজন। +- *ভ্যালিডেট নোড*: কিভাবে একটি নোড একটি কুবারনেটিস ক্লাস্টারে যোগদানের প্রয়োজনীয়তা পূরণ করে তা নিশ্চিত করার জন্য তথ্যের জন্য [ভ্যালিড নোড সেটআপ](/docs/setup/best-practices/node-conformance/) দেখুন। +- *ক্লাস্টারে নোড যোগ করুন*: আপনি যদি নিজের ক্লাস্টার পরিচালনা করেন তাহলে আপনি আপনার নিজস্ব মেশিন সেট আপ করে নোড যোগ করতে পারেন এবং হয় সেগুলিকে ম্যানুয়ালি যোগ করে অথবা ক্লাস্টারের এপিসার্ভারে নিজেদের নিবন্ধন করতে পারেন। এই উপায়ে নোড যোগ করার জন্য Kubernetes কিভাবে সেট আপ করতে হয় সে সম্পর্কে তথ্যের জন্য [নোডসমুহ](/docs/concepts/architecture/nodes/) বিভাগটি দেখুন। +- *ক্লাস্টারে উইন্ডোজ নোড যোগ করুন*: কুবারনেটস উইন্ডোজ ওয়ার্কার নোডের জন্য সমর্থন অফার করে, যা আপনাকে উইন্ডোজ কন্টেইনারে বাস্তবায়িত ওয়ার্কলোড চালানোর অনুমতি দেয়। বিস্তারিত জানার জন্য [কুবারনেটিস-এ উইন্ডোজ](/docs/setup/production-environment/windows/) দেখুন। +- *স্কেল নোড*: শেষ পর্যন্ত আপনার ক্লাস্টারের প্রয়োজন হবে এমন ক্ষমতা বাড়ানোর জন্য একটি পরিকল্পনা করুন। দেখুন [বড় ক্লাস্টারগুলির জন্য বিবেচনা](/docs/setup/best-practices/cluster-large/) +আপনার কতগুলি নোড দরকার তা নির্ধারণ করতে সাহায্য করার জন্য, আপনার চালানোর জন্য পড এবং পাত্রের সংখ্যার উপর ভিত্তি করে। আপনি যদি নিজে নোড পরিচালনা করেন, তাহলে এর অর্থ হতে পারে আপনার নিজের শারীরিক সরঞ্জাম কেনা এবং ইনস্টল করা। +- *অটোস্কেল নোড*: বেশিরভাগ ক্লাউড প্রদানকারী সমর্থন করে +[ক্লাস্টার অটোস্কেলার](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#readme) অস্বাস্থ্যকর নোডগুলি প্রতিস্থাপন করতে বা চাহিদা অনুযায়ী নোডের সংখ্যা বৃদ্ধি এবং সঙ্কুচিত করতে। দেখুন অটোস্ক্যালার কিভাবে কাজ করে এবং [ডিপ্লয়মেন্ট](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler#deployment) কীভাবে এটি বিভিন্ন ক্লাউড প্রদানকারী দ্বারা প্রয়োগ করা হয়। অন-প্রিমিসেসের জন্য, কিছু ভার্চুয়ালাইজেশন প্ল্যাটফর্ম রয়েছে যা চাহিদার ভিত্তিতে নতুন নোডগুলিকে স্পিন করার জন্য স্ক্রিপ্ট করা যেতে পারে। +- *নোড স্বাস্থ্য পরীক্ষা সেট আপ করুন*: গুরুত্বপূর্ণ কাজের চাপের জন্য, আপনি নিশ্চিত করতে চান যে সেই নোডগুলিতে চলমান নোড এবং পডগুলি স্বাস্থ্যকর। [নোড প্রবলেম ডিটেক্টর](/docs/tasks/debug-application-cluster/monitor-node-health/) ডেমন ব্যবহার করে, আপনি নিশ্চিত করতে পারেন আপনার নোডগুলি সুস্থ। + +## উৎপাদন ব্যবহারকারী ব্যবস্থাপনা + +উৎপাদনে, আপনি হয়ত এমন একটি মডেল থেকে সরে যাচ্ছেন যেখানে আপনি বা একটি ছোট গোষ্ঠী ক্লাস্টারে প্রবেশ করছেন যেখানে সম্ভাব্য কয়েক ডজন বা শত শত লোক থাকতে পারে। একটি শেখার পরিবেশে বা প্ল্যাটফর্ম প্রোটোটাইপে, আপনার একটি একক থাকতে পারে আপনি যা করেন তার জন্য প্রশাসনিক অ্যাকাউন্ট। উৎপাদনে, আপনি বিভিন্ন নামস্থানে বিভিন্ন স্তরের অ্যাক্সেস সহ আরও অ্যাকাউন্ট চাইবেন। + +একটি উৎপাদন-গুণমানের ক্লাস্টার নেওয়ার অর্থ হল আপনি কীভাবে বেছে বেছে অন্য ব্যবহারকারীদের অ্যাক্সেসের অনুমতি দিতে চান তা নির্ধারণ করা। বিশেষ করে, যারা আপনার ক্লাস্টার (প্রমাণিকরণ) অ্যাক্সেস করার চেষ্টা করে তাদের পরিচয় যাচাই করার জন্য এবং তারা যা জিজ্ঞাসা করছে (অনুমোদন) করার অনুমতি আছে কিনা তা নির্ধারণ করার জন্য আপনাকে কৌশল নির্বাচন করতে হবেঃ + +- *প্রমাণিকরণ*: apiserver ক্লায়েন্ট ব্যবহার করে ব্যবহারকারীদের প্রমাণীকরণ করতে পারে +শংসাপত্র, বহনকারী টোকেন, একটি প্রমাণীকরণ প্রক্সি, বা HTTP মৌলিক প্রমাণীকরণ। +আপনি কোন প্রমাণীকরণ পদ্ধতি ব্যবহার করতে চান তা চয়ন করতে পারেন। +প্লাগইন ব্যবহার করে, apiserver আপনার প্রতিষ্ঠানের বিদ্যমান সুবিধা নিতে পারে +প্রমাণীকরণ পদ্ধতি, যেমন LDAP বা Kerberos। দেখা +[প্রমাণকরণ](/docs/reference/access-authn-authz/authentication/) +কুবারনেটিস ব্যবহারকারীদের প্রমাণীকরণের এই বিভিন্ন পদ্ধতির বর্ণনার জন্য। +- *অনুমোদন*: আপনি যখন আপনার নিয়মিত ব্যবহারকারীদের অনুমোদন করার জন্য প্রস্তুত হন, আপনি সম্ভবত RBAC এবং ABAC অনুমোদনের মধ্যে বেছে নেবেন। ব্যবহারকারীর অ্যাকাউন্ট অনুমোদনের জন্য বিভিন্ন মোড পর্যালোচনা করতে [প্রমাণকরণ ওভারভিউ](/docs/reference/access-authn-authz/authorization/) দেখুন (সেইসাথে আপনার ক্লাস্টারে পরিষেবা অ্যাকাউন্ট অ্যাক্সেস): + - *ভুমিকা-ভিত্তিক অ্যাক্সেস কন্ট্রোল* ([RBAC](/docs/reference/access-authn-authz/rbac/)): প্রমাণীকৃত ব্যবহারকারীদের নির্দিষ্ট সেটের অনুমতি প্রদান করে আপনাকে আপনার ক্লাস্টারে অ্যাক্সেস বরাদ্দ করতে দেয়। একটি নির্দিষ্ট নামস্থান (ভূমিকা) বা সমগ্র ক্লাস্টার জুড়ে (ClusterRole) অনুমতিগুলি বরাদ্দ করা যেতে পারে। তারপর RoleBindings এবং ClusterRoleBindings ব্যবহার করে, সেই অনুমতিগুলি নির্দিষ্ট ব্যবহারকারীদের সাথে সংযুক্ত করা যেতে পারে। + - *অ্যাট্রিবিউট-ভিত্তিক অ্যাক্সেস কন্ট্রোল* ([ABAC](/docs/reference/access-authn-authz/abac/)): আপনাকে ক্লাস্টারে রিসোর্স অ্যাট্রিবিউটের উপর ভিত্তি করে নীতি তৈরি করতে দেয় এবং সেই অ্যাট্রিবিউটগুলির উপর ভিত্তি করে অ্যাক্সেসের অনুমতি দেয় বা অস্বীকার করে। একটি নীতি ফাইলের প্রতিটি লাইন সংস্করণ বৈশিষ্ট্য (apiVersion এবং প্রকার) এবং বিষয় (ব্যবহারকারী বা গোষ্ঠী), সংস্থান সম্পত্তি, অ-সম্পদ সম্পত্তি (/সংস্করণ বা /এপিস) এবং শুধুমাত্র পঠনযোগ্য বৈশিষ্ট্যের সাথে মেলে বিশেষ বৈশিষ্ট্যগুলির একটি মানচিত্র সনাক্ত করে। বিস্তারিত জানার জন্য [উদাহরণ](/docs/reference/access-authn-authz/abac/#examples) দেখুন। + +যেহেতু কেউ আপনার প্রোডাকশন কুবারনেটস ক্লাস্টারে প্রমাণীকরণ এবং অনুমোদন সেট আপ করছে, এখানে কিছু বিষয় বিবেচনা করার আছেঃ + +- *অনুমোদন মোড সেট করুন*: যখন Kubernetes API সার্ভার +([kube-apiserver](/docs/reference/command-line-tools-reference/kube-apiserver/)) +শুরু হয়, সমর্থিত প্রমাণীকরণ মোডগুলি অবশ্যই *--অথরাইজেশন-মোড* ব্যবহার করে সেট করতে হবে +পতাকা উদাহরণস্বরূপ, *kube-adminserver.yaml* ফাইলে সেই পতাকা (*/etc/kubernetes/manifests*-এ) +Node, RBAC এ সেট করা যেতে পারে। এটি প্রমাণীকৃত অনুরোধের জন্য নোড এবং RBAC অনুমোদনের অনুমতি দেবে। +- *ব্যবহারকারী সার্টিফিকেট এবং রোল বাইন্ডিং (RBAC)* তৈরি করুন: আপনি যদি RBAC অনুমোদন ব্যবহার করেন, ব্যবহারকারীরা একটি CertificateSigningRequest (CSR) তৈরি করতে পারেন যা ক্লাস্টার CA দ্বারা স্বাক্ষরিত হতে পারে। তারপর আপনি প্রতিটি ব্যবহারকারীর ভূমিকা এবং ক্লাস্টার রোল বাঁধাই করতে পারেন। +[শংসাপত্র স্বাক্ষরের অনুরোধ](/docs/reference/access-authn-authz/certificate-signing-requests/) দেখুন +বিস্তারিত জানার জন্য. +- *অ্যাট্রিবিউটগুলিকে একত্রিত করে এমন নীতিগুলি তৈরি করুন (ABAC)*: আপনি যদি ABAC অনুমোদন ব্যবহার করেন তবে আপনি নির্দিষ্ট সংস্থানগুলি (যেমন একটি পড), নামস্থান, বা apiGroup অ্যাক্সেস করার জন্য নির্বাচিত ব্যবহারকারী বা গোষ্ঠীগুলিকে অনুমোদন করার জন্য নীতিগুলি গঠনের জন্য বৈশিষ্ট্যগুলির সংমিশ্রণ বরাদ্দ করতে পারেন৷ আরও তথ্যের জন্য, [উদাহরণ](/docs/reference/access-authn-authz/abac/#examples) দেখুন। +- *ভর্তি নিয়ন্ত্রকদের বিবেচনা করুন*: API সার্ভারের মাধ্যমে আসতে পারে এমন অনুরোধের জন্য অনুমোদনের অতিরিক্ত ফর্ম অন্তর্ভুক্ত +[ওয়েবহুক টোকেন প্রমাণীকরণ](/docs/reference/access-authn-authz/authentication/#webhook-token-authentication)। +API সার্ভারে [ভর্তি কন্ট্রোলার](/docs/reference/access-authn-authz/admission-controllers/) যোগ করে ওয়েবহুক এবং অন্যান্য বিশেষ অনুমোদনের ধরন সক্ষম করতে হবে। + +## কাজের চাপের সম্পদের সীমা নির্ধারণ করুন + +প্রোডাকশন ওয়ার্কলোডের চাহিদা কুবারনেটস কন্ট্রোল প্লেনের ভিতরে এবং বাইরে উভয় ক্ষেত্রেই চাপ সৃষ্টি করতে পারে। আপনার ক্লাস্টারের কাজের চাপের প্রয়োজনের জন্য সেট আপ করার সময় এই আইটেমগুলি বিবেচনা করুনঃ + +- *নেমস্পেস সীমা সেট করুন*: মেমরি এবং সিপিইউ এর মত জিনিসগুলিতে প্রতি-নেমস্পেস কোটা সেট করুন। দেখা +[মেমরি, সিপিইউ এবং এপিআই সংস্থানগুলি পরিচালনা করুন](/docs/tasks/administer-cluster/manage-resources/) +বিস্তারিত জানার জন্য. আপনিও সেট করতে পারেন +[হায়ারার্কিক্যাল নামস্থান](/blog/2020/08/14/introducing-hierarchical-namespaces/) +উত্তরাধিকার সীমার জন্য। +- *ডিএনএস চাহিদার জন্য প্রস্তুত করুন*: আপনি যদি আশা করেন যে কাজের চাপ ব্যাপকভাবে বৃদ্ধি পাবে, আপনার ডিএনএস পরিষেবাটিও স্কেল বাড়াতে প্রস্তুত থাকতে হবে। দেখা +[একটি ক্লাস্টারে DNS পরিষেবাটি অটোস্কেল করুন](/docs/tasks/administer-cluster/dns-horizontal-autoscaling/)। +- *অতিরিক্ত পরিষেবা অ্যাকাউন্ট তৈরি করুন*: ব্যবহারকারীর অ্যাকাউন্টগুলি নির্ধারণ করে যে ব্যবহারকারীরা একটি ক্লাস্টারে কী করতে পারে, যখন একটি পরিষেবা অ্যাকাউন্ট একটি নির্দিষ্ট নামস্থানের মধ্যে পড অ্যাক্সেসকে সংজ্ঞায়িত করে। ডিফল্টরূপে, একটি পড তার নামস্থান থেকে ডিফল্ট পরিষেবা অ্যাকাউন্টে নেয়। +দেখুন [পরিষেবা অ্যাকাউন্ট পরিচালনা](/docs/reference/access-authn-authz/service-accounts-admin/) +একটি নতুন পরিষেবা অ্যাকাউন্ট তৈরির তথ্যের জন্য। উদাহরণস্বরূপ, আপনি চাইতে পারেন: + - গোপনীয়তা যোগ করুন যা একটি পড একটি নির্দিষ্ট ধারক রেজিস্ট্রি থেকে ছবি তুলতে ব্যবহার করতে পারে। উদাহরণের জন্য [পডের জন্য পরিষেবা অ্যাকাউন্ট কনফিগার করুন](/docs/tasks/configure-pod-container/configure-service-account/) দেখুন। + - একটি পরিষেবা অ্যাকাউন্টে RBAC অনুমতি বরাদ্দ করুন। বিস্তারিত জানার জন্য [ServiceAccount permissions](/docs/reference/access-authn-authz/rbac/#service-account-permissions) দেখুন। + +## {{% heading "whatsnext" %}} + +- আপনি নিজের প্রোডাকশন কুবারনেটস তৈরি করতে চান বা উপলব্ধ [টার্নকি ক্লাউড সলিউশনস](/docs/setup/production-environment/turnkey-solutions/) থেকে একটি পেতে চান কিনা তা স্থির করুন অথবা [কুবারনেটিস পার্টনার](https://kubernetes.io/partners/)। +- আপনি যদি নিজের ক্লাস্টার তৈরি করতে চান, তাহলে পরিকল্পনা করুন কিভাবে আপনি [শংসাপত্র] (/docs/setup/best-practices/certificates/) পরিচালনা করতে চান +এবং যেমন বৈশিষ্ট্য জন্য উচ্চ প্রাপ্যতা সেট আপ +[etcd](/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/) এবং [API সার্ভার](/docs/setup/production-environment/tools/kubeadm/ha- টপোলজি/)। +- [kubeadm](/docs/setup/production-environment/tools/kubeadm/), [kops](/docs/setup/production-environment/tools/kops/) অথবা [Kubespray](/docs/setup/) থেকে বেছে নিন উত্পাদন-পরিবেশ/সরঞ্জাম/কুবেস্প্রে/) +স্থাপনা পদ্ধতি। +- আপনার নির্ধারণ করে ব্যবহারকারী ব্যবস্থাপনা কনফিগার করুন +[প্রমাণকরণ](/docs/reference/access-authn-authz/authentication/) এবং +[অনুমোদন](/docs/reference/access-authn-authz/authorization/) পদ্ধতি। +- সেট আপ করে অ্যাপ্লিকেশন ওয়ার্কলোডের জন্য প্রস্তুত করুন +[সম্পদ সীমা](/docs/tasks/administer-cluster/manage-resources/), +[DNS অটোস্কেলিং](/docs/tasks/administer-cluster/dns-horizontal-autoscaling/) +এবং [পরিষেবা অ্যাকাউন্ট](/docs/reference/access-authn-authz/service-accounts-admin/)। \ No newline at end of file From 9c28ab530e82e0b1ac2ab130e20da03431a70e3e Mon Sep 17 00:00:00 2001 From: asem-hamid <155321064+asem-hamid@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:09:34 +0600 Subject: [PATCH 0096/1086] Update README-bn.md fix small typing mistake --- README-bn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-bn.md b/README-bn.md index 624d40ad9f..5c0041dfb1 100644 --- a/README-bn.md +++ b/README-bn.md @@ -30,7 +30,7 @@ - [Hugo (বর্ধিত সংস্করণ)](https://gohugo.io/) - একটি ধারক রানটাইম, উদাহরন হিসেবে [Docker](https://www.docker.com/). -আপনি কাজ শুরু করার আগে, দরকারি জিনিশগুলি ইনস্টল করুন। সংগ্রহস্থল ক্লোন(clone) করুন এবং ডিরেক্টরিতে(directory) প্রবেশ করুন: +আপনি কাজ শুরু করার আগে, দরকারি জিনিসগুলো ইনস্টল করুন। সংগ্রহস্থল ক্লোন(clone) করুন এবং ডিরেক্টরিতে(directory) প্রবেশ করুন: ```bash git clone https://github.com/kubernetes/website.git cd website From 2acaf64578e6f192a80fa1b5779776404e4f557e Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 14:13:39 +0600 Subject: [PATCH 0097/1086] Update _index.md --- content/bn/docs/tasks/tools/included/_index.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/tasks/tools/included/_index.md b/content/bn/docs/tasks/tools/included/_index.md index 131e557b8b..7aab4049c9 100644 --- a/content/bn/docs/tasks/tools/included/_index.md +++ b/content/bn/docs/tasks/tools/included/_index.md @@ -1,6 +1,10 @@ --- -শিরোনাম: "অন্তর্ভুক্ত টুলস" -বিবরণ: "প্রধান kubectl-installs-*.md পেজগুলিতে স্নিপেট গুলি অন্তর্ভুক্ত করতে হবে।" +title: "অন্তর্ভুক্ত টুলস" +description: "স্নিপেট গুলো সংযুক্ত করতে হবে প্রধান kubectl-installs-*.md পেজগুলোতে ।" headless: true toc_hide: true +_build: + list: never + render: never + publishResources: false --- From fa78212a144cd38a0a64f5dfe32e99064e92d173 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 14:31:30 +0600 Subject: [PATCH 0098/1086] Update verify-kubectl.md --- content/bn/docs/tasks/tools/included/verify-kubectl.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/content/bn/docs/tasks/tools/included/verify-kubectl.md b/content/bn/docs/tasks/tools/included/verify-kubectl.md index 21f617e91a..2121f3c65d 100644 --- a/content/bn/docs/tasks/tools/included/verify-kubectl.md +++ b/content/bn/docs/tasks/tools/included/verify-kubectl.md @@ -8,11 +8,10 @@ _build: publishResources: false --- -kubectl-এর জন্য একটি কুবারনেটিস ক্লাস্টার খুঁজে পেতে এবং নেটওয়ার্ক পেতে, এটির একটি প্রয়োজন +kubectl-এর জন্য একটি কুবারনেটিস ক্লাস্টার খুঁজে পেতে এবং অ্যাক্সেস পেতে, যার জন্য প্রয়োজন [kubeconfig ফাইল](/docs/concepts/configuration/organize-cluster-access-kubeconfig/), -আপনি ব্যবহার করে একটি ক্লাস্টার তৈরি করার সময় যা স্বয়ংক্রিয়ভাবে তৈরি হয় -[kube-up.sh](https://github.com/kubernetes/kubernetes/blob/master/cluster/kube-up.sh) -অথবা সফলভাবে একটি Minikube ক্লাস্টার স্থাপন করুন। +যা স্বয়ংক্রিয়ভাবে তৈরি হয় যখন আপনি একটি ক্লাস্টার তৈরি করেন +[kube-up.sh](https://github.com/kubernetes/kubernetes/blob/master/cluster/kube-up.sh) ব্যবহার করে অথবা সফলভাবে একটি Minikube ক্লাস্টার স্থাপন করুন। ডিফল্টরূপে, kubectl কনফিগারেশন `~/.kube/config` এ অবস্থিত। ক্লাস্টার অবস্থা পেয়ে kubectl সঠিকভাবে কনফিগার করা হয়েছে তা পরীক্ষা করুন: @@ -22,7 +21,7 @@ kubectl cluster-info ``` আপনি যদি একটি URL দেখতে পান, তাহলে আপনার ক্লাস্টার অ্যাক্সেস করার জন্য kubectl সঠিকভাবে কনফিগার করা হয়েছে। -আপনি যদি নিম্নলিখিতগুলির মতো একটি বার্তা দেখতে পান, তাহলে বুঝবেন যে kubectl সঠিকভাবে কনফিগার করা হয়নি বা একটি Kubernetes ক্লাস্টারের সাথে সংযোগ করতে সক্ষম নয়। +আপনি যদি নিম্নলিখিতগুলোর মতো একটি বার্তা দেখতে পান, তাহলে বুঝবেন যে kubectl সঠিকভাবে কনফিগার করা হয়নি বা একটি Kubernetes ক্লাস্টারের সাথে সংযোগ করতে সক্ষম নয়। ``` সার্ভারের সাথে সংযোগ প্রত্যাখ্যান করা হয়েছিল - আপনি কি সঠিক হোস্ট বা পোর্ট উল্লেখ করেছেন? ``` From 87c5bb058d6c19a565f0c6a1d0ebe1e6ba901d63 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 15:09:49 +0600 Subject: [PATCH 0099/1086] Update verify-kubectl.md --- .../tasks/tools/included/verify-kubectl.md | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/content/bn/docs/tasks/tools/included/verify-kubectl.md b/content/bn/docs/tasks/tools/included/verify-kubectl.md index 2121f3c65d..3ee62d0979 100644 --- a/content/bn/docs/tasks/tools/included/verify-kubectl.md +++ b/content/bn/docs/tasks/tools/included/verify-kubectl.md @@ -11,7 +11,8 @@ _build: kubectl-এর জন্য একটি কুবারনেটিস ক্লাস্টার খুঁজে পেতে এবং অ্যাক্সেস পেতে, যার জন্য প্রয়োজন [kubeconfig ফাইল](/docs/concepts/configuration/organize-cluster-access-kubeconfig/), যা স্বয়ংক্রিয়ভাবে তৈরি হয় যখন আপনি একটি ক্লাস্টার তৈরি করেন -[kube-up.sh](https://github.com/kubernetes/kubernetes/blob/master/cluster/kube-up.sh) ব্যবহার করে অথবা সফলভাবে একটি Minikube ক্লাস্টার স্থাপন করুন। +[kube-up.sh](https://github.com/kubernetes/kubernetes/blob/master/cluster/kube-up.sh) +ব্যবহার করে অথবা সফলভাবে একটি Minikube ক্লাস্টার স্থাপন করুন। ডিফল্টরূপে, kubectl কনফিগারেশন `~/.kube/config` এ অবস্থিত। ক্লাস্টার অবস্থা পেয়ে kubectl সঠিকভাবে কনফিগার করা হয়েছে তা পরীক্ষা করুন: @@ -19,17 +20,33 @@ kubectl-এর জন্য একটি কুবারনেটিস ক্ ```shell kubectl cluster-info ``` + আপনি যদি একটি URL দেখতে পান, তাহলে আপনার ক্লাস্টার অ্যাক্সেস করার জন্য kubectl সঠিকভাবে কনফিগার করা হয়েছে। -আপনি যদি নিম্নলিখিতগুলোর মতো একটি বার্তা দেখতে পান, তাহলে বুঝবেন যে kubectl সঠিকভাবে কনফিগার করা হয়নি বা একটি Kubernetes ক্লাস্টারের সাথে সংযোগ করতে সক্ষম নয়। +আপনি যদি নিম্নলিখিতগুলোর মতো একটি বার্তা দেখতে পান, তাহলে বুঝবেন যে kubectl সঠিকভাবে কনফিগার করা হয়নি +অথবা একটি Kubernetes ক্লাস্টারের সাথে সংযোগ করতে সক্ষম নয়। + ``` সার্ভারের সাথে সংযোগ প্রত্যাখ্যান করা হয়েছিল - আপনি কি সঠিক হোস্ট বা পোর্ট উল্লেখ করেছেন? ``` -উদাহরণস্বরূপ, আপনি যদি আপনার ল্যাপটপে (স্থানীয়ভাবে) একটি কুবারনেটিস ক্লাস্টার চালাতে চান, তাহলে আপনাকে প্রথমে মিনিকুবের মতো একটি টুল ইনস্টল করতে হবে এবং তারপরে উপরে বর্ণিত কমান্ডগুলি পুনরায় চালাতে হবে। +উদাহরণস্বরূপ, আপনি যদি আপনার ল্যাপটপে (স্থানীয়ভাবে) একটি কুবারনেটিস ক্লাস্টার চালাতে চান, +তাহলে আপনাকে প্রথমে মিনিকুবের মতো একটি টুল ইনস্টল করতে হবে এবং তারপরে উপরে বর্ণিত কমান্ডগুলি পুনরায় চালাতে হবে। -যদি kubectl ক্লাস্টার-তথ্য url প্রতিক্রিয়া প্রদান করে কিন্তু আপনি আপনার ক্লাস্টার অ্যাক্সেস করতে না পারেন, এটি সঠিকভাবে কনফিগার করা হয়েছে কিনা তা পরীক্ষা করতে, ব্যবহার করুন: +যদি kubectl ক্লাস্টার-তথ্য url প্রতিক্রিয়া প্রদান করে কিন্তু আপনি আপনার ক্লাস্টার অ্যাক্সেস করতে না পারেন, +এটি সঠিকভাবে কনফিগার করা হয়েছে কিনা তা পরীক্ষা করতে, ব্যবহার করুন: ```shell kubectl cluster-info dump ``` + +### 'No Auth Provider Found' ত্রুটি বার্তার সমস্যা সমাধান {#no-auth-provider-found} + +কুবারনেটিস 1.26-এ, kubectl নিম্নলিখিত ক্লাউড প্রদানকারীদের পরিচালিত কুবারনেটিস অফারগুলোর জন্য অন্তর্নির্মিত অথেনটিকেশন সরিয়ে দিয়েছে। +এই প্রদানকারীরা ক্লাউডের-নির্দিষ্ট অথেনটিকেশন প্রদানের জন্য kubectl প্লাগইন প্রকাশ করেছে। +নির্দেশাবলীর জন্য, নিম্নলিখিত প্রদানকারী ডকুমেন্টেশন পড়ুন: + +* Azure AKS: [kubelogin plugin](https://azure.github.io/kubelogin/) +* Google Kubernetes Engine: [gke-gcloud-auth-plugin](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl#install_plugin) + +(একই ত্রুটির বার্তা দেখার অন্যান্য কারণও থাকতে পারে, এই পরিবর্তনের সাথে সম্পর্কিত নয়।) From d3dfaa475029fd78ffa60cef1ce4060c64e49651 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 15:17:16 +0600 Subject: [PATCH 0100/1086] Update optional-kubectl-configs-zsh.md --- .../docs/tasks/tools/included/optional-kubectl-configs-zsh.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md index fef65f35db..b2343f22a9 100644 --- a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md +++ b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md @@ -1,5 +1,5 @@ ---- -title: zsh অটোকমপ্লিসন" +--- +title: "zsh অটোকমপ্লিসন" description: "zsh অটোকমপ্লিসনের জন্য কিছু ঐচ্ছিক কনফিগারেশন।" headless: true _build: From f628be32cb450bee0ca399010761d8a9c5ebe752 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 15:20:18 +0600 Subject: [PATCH 0101/1086] Update optional-kubectl-configs-bash-linux.md --- .../tools/included/optional-kubectl-configs-bash-linux.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md index a67b0643c9..3a046fe50c 100644 --- a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md +++ b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md @@ -1,6 +1,6 @@ --- -title: "লিনাক্সে ব্যাশ অটোকমপ্লিসন" -description: "লিনাক্সে ব্যাশ অটোকমপ্লিসনের জন্য কিছু ঐচ্ছিক কনফিগারেশন।" +title: "লিনাক্সে ব্যাশ স্বয়ংক্রিয় সমাপ্তি" +description: "লিনাক্সে ব্যাশ স্বয়ংক্রিয় সমাপ্তি এর জন্য কিছু ঐচ্ছিক কনফিগারেশন।" headless: true _build: list: never From ab3e53bbb275d856d415ac5809b2c4ec1e4e5663 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 15:20:40 +0600 Subject: [PATCH 0102/1086] Update optional-kubectl-configs-bash-mac.md --- .../tasks/tools/included/optional-kubectl-configs-bash-mac.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md index 9e677011fb..7c1af5bcc3 100644 --- a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md +++ b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md @@ -1,6 +1,6 @@ --- -title: "macOS এ ব্যাশ অটোকমপ্লিট" -description: "macOS-এ ব্যাশ অটোকমপ্লিট এর জন্য কিছু ঐচ্ছিক কনফিগারেশন।" +title: "macOS এ ব্যাশ স্বয়ংক্রিয় সমাপ্তি" +description: "macOS-এ ব্যাশ স্বয়ংক্রিয় সমাপ্তি এর জন্য কিছু ঐচ্ছিক কনফিগারেশন।" headless: true _build: list: never From e918a552967e1974178b2a2ff32f6fabd46b253b Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 15:21:09 +0600 Subject: [PATCH 0103/1086] Update optional-kubectl-configs-zsh.md --- .../docs/tasks/tools/included/optional-kubectl-configs-zsh.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md index b2343f22a9..4a7cace442 100644 --- a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md +++ b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md @@ -1,6 +1,6 @@ --- -title: "zsh অটোকমপ্লিসন" -description: "zsh অটোকমপ্লিসনের জন্য কিছু ঐচ্ছিক কনফিগারেশন।" +title: "zsh স্বয়ংক্রিয় সমাপ্তি" +description: "zsh স্বয়ংক্রিয় সমাপ্তি এর জন্য কিছু ঐচ্ছিক কনফিগারেশন।" headless: true _build: list: never From 5222959fd4aec41bfdaf6a95d3cb14e3bdc5ea07 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 15:40:25 +0600 Subject: [PATCH 0104/1086] Create optional-kubectl-configs-fish.md --- .../included/optional-kubectl-configs-fish.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 content/bn/docs/tasks/tools/included/optional-kubectl-configs-fish.md diff --git a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-fish.md b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-fish.md new file mode 100644 index 0000000000..c29b9d36fd --- /dev/null +++ b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-fish.md @@ -0,0 +1,23 @@ +--- +title: "fish স্বয়ংক্রিয় সমাপ্তি" +description: "fish শেল স্বয়ংক্রিয় সমাপ্তি চালু করার জন্য ঐচ্ছিক কনফিগারেশন।" +headless: true +_build: + list: never + render: never + publishResources: false +--- + +{{< note >}} +kubectl 1.23 বা তার পরের সংস্করণ প্রয়োজন fish এর স্বয়ংক্রিয় সমাপ্তি করার জন্য । +{{< /note >}} + +fish এর জন্য kubectl কমপ্লিশন স্ক্রিপ্ট `kubectl completion fish` কমান্ড দিয়ে তৈরি করা যেতে পারে। আপনার শেলের মধ্যে সমাপ্তি স্ক্রিপ্ট সোর্স করা kubectl স্বয়ংক্রিয় সমাপ্তি চালু করে। + +আপনার সমস্ত শেল সেশনে এটি করতে, আপনার `~/.config/fish/config.fish` ফাইলে নিম্নলিখিত লাইন যুক্ত করুন: + +```shell +kubectl completion fish | source +``` + +আপনার শেল পুনরায় লোড করার পরে, kubectl স্বয়ংক্রিয় সমাপ্তি কাজ করা উচিত। From da096aa5a61121f99e2da3181f1ba2a2abc3af25 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 15:50:18 +0600 Subject: [PATCH 0105/1086] Update optional-kubectl-configs-fish.md --- .../docs/tasks/tools/included/optional-kubectl-configs-fish.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-fish.md b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-fish.md index c29b9d36fd..27d6ef7b7e 100644 --- a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-fish.md +++ b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-fish.md @@ -12,7 +12,7 @@ _build: kubectl 1.23 বা তার পরের সংস্করণ প্রয়োজন fish এর স্বয়ংক্রিয় সমাপ্তি করার জন্য । {{< /note >}} -fish এর জন্য kubectl কমপ্লিশন স্ক্রিপ্ট `kubectl completion fish` কমান্ড দিয়ে তৈরি করা যেতে পারে। আপনার শেলের মধ্যে সমাপ্তি স্ক্রিপ্ট সোর্স করা kubectl স্বয়ংক্রিয় সমাপ্তি চালু করে। +fish এর জন্য kubectl সমাপ্তি স্ক্রিপ্ট `kubectl completion fish` কমান্ড দিয়ে তৈরি করা যেতে পারে। আপনার শেলের মধ্যে সমাপ্তি স্ক্রিপ্ট সোর্স করা kubectl স্বয়ংক্রিয় সমাপ্তি চালু করে। আপনার সমস্ত শেল সেশনে এটি করতে, আপনার `~/.config/fish/config.fish` ফাইলে নিম্নলিখিত লাইন যুক্ত করুন: From 4e81d6df796288d4e4ed86918854f10f5141089c Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 15:56:17 +0600 Subject: [PATCH 0106/1086] Create optional-kubectl-configs-pwsh.md --- .../included/optional-kubectl-configs-pwsh.md | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 content/bn/docs/tasks/tools/included/optional-kubectl-configs-pwsh.md diff --git a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-pwsh.md b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-pwsh.md new file mode 100644 index 0000000000..159aa0eeb0 --- /dev/null +++ b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-pwsh.md @@ -0,0 +1,27 @@ +--- +title: "PowerShell স্বয়ংক্রিয় সমাপ্তি" +description: "powershell স্বয়ংক্রিয় সমাপ্তি এর জন্য কিছু ঐচ্ছিক কনফিগারেশন।" +headless: true +_build: + list: never + render: never + publishResources: false +--- + +PowerShell-এর জন্য kubectl সমাপ্তি স্ক্রিপ্ট `kubectl completion powershell` কমান্ড দিয়ে তৈরি করা যেতে পারে। + +আপনার সমস্ত শেল সেশনে এটি করতে, আপনার `$PROFILE` ফাইলে নিম্নলিখিত লাইন যোগ করুন: + +```powershell +kubectl completion powershell | Out-String | Invoke-Expression +``` + +এই কমান্ডটি প্রতিটি PowerShell স্টার্ট আপে স্বয়ংক্রিয় সমাপ্তি স্ক্রিপ্ট পুনরায় তৈরি করবে। আপনি চাইলে জেনারেট করা স্ক্রিপ্টটি সরাসরি আপনার `$PROFILE` ফাইলে যোগ করতে পারেন। + +আপনার `$PROFILE` ফাইলে জেনারেট করা স্ক্রিপ্ট যোগ করতে, আপনার পাওয়ারশেল প্রম্পটে নিম্নলিখিত লাইনটি চালান: + +```powershell +kubectl completion powershell >> $PROFILE +``` + +আপনার শেল পুনরায় লোড করার পরে, kubectl স্বয়ংক্রিয় সমাপ্তি কাজ করা উচিত। From bf1541e8968bd6c395dd9ff8ac6404f8c9e83ebe Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 16:09:30 +0600 Subject: [PATCH 0107/1086] Create blocks.svg --- content/bn/_common-resources/images/blocks.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/_common-resources/images/blocks.svg diff --git a/content/bn/_common-resources/images/blocks.svg b/content/bn/_common-resources/images/blocks.svg new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/content/bn/_common-resources/images/blocks.svg @@ -0,0 +1 @@ + From 3a3a74dad4d03092a1a6af0576a15a1da77ce533 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 16:10:23 +0600 Subject: [PATCH 0108/1086] Create index.md --- content/bn/_common-resources/index.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 content/bn/_common-resources/index.md diff --git a/content/bn/_common-resources/index.md b/content/bn/_common-resources/index.md new file mode 100644 index 0000000000..ca03031f1e --- /dev/null +++ b/content/bn/_common-resources/index.md @@ -0,0 +1,3 @@ +--- +headless: true +--- From ee7cdd61b28bb7e167923cf8008191e1ed259c58 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 16:12:43 +0600 Subject: [PATCH 0109/1086] Update blocks.svg --- content/bn/_common-resources/images/blocks.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/_common-resources/images/blocks.svg b/content/bn/_common-resources/images/blocks.svg index 8b13789179..623019b1e9 100644 --- a/content/bn/_common-resources/images/blocks.svg +++ b/content/bn/_common-resources/images/blocks.svg @@ -1 +1 @@ - +kubernetes_icons From 998eb76a3391f9a80c6a20be516dd139506b0678 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 16:13:37 +0600 Subject: [PATCH 0110/1086] Create flower.svg --- content/bn/_common-resources/images/flower.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/_common-resources/images/flower.svg diff --git a/content/bn/_common-resources/images/flower.svg b/content/bn/_common-resources/images/flower.svg new file mode 100644 index 0000000000..334ae9c8b4 --- /dev/null +++ b/content/bn/_common-resources/images/flower.svg @@ -0,0 +1 @@ +kubernetes_icons From f34d632af830c2b22e6c52f9395dcacc87d629a7 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 16:15:35 +0600 Subject: [PATCH 0111/1086] Add files via upload --- .../images/kub_video_banner_homepage.jpg | Bin 0 -> 709415 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/bn/_common-resources/images/kub_video_banner_homepage.jpg diff --git a/content/bn/_common-resources/images/kub_video_banner_homepage.jpg b/content/bn/_common-resources/images/kub_video_banner_homepage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e40d92a50363b659ea2b4eadf33e6639534e9442 GIT binary patch literal 709415 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


~Zd?xuE*8(Y)l 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

Jwhzp+Zaj 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%0D4!(ci@L+XLvdyC^V$oYr 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�|mKQVsklecfC>e`}iY{5;#A;gJU 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≦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

tN|0xHBA~UiB8017^x&h$c4+u@A`96P%Co< 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%0D@+WT3>)Oe z;pxq8$K>YhBaYXSGPB5yIDklbu6G92jX$_A68UzY*p-RbkB?2js1w*-@ zlH_f}<%$O5LMoiln35lXj?@Q{B}Cwg1khwgDnvmfayX4*jQKgrXiF+Y8nK>Nbf=uV<^UFicQciL>2qf0m7ti zpiKm$0+1vLDh6lTizPxPDT;--^Vm=-5|jv%C>lV8LZWC2;4rEB(PUbo%GgQHh{Hl|}%dX$y7*0YL~eBO|>k6@tGknEmOrHOP{32V=!W14GVfGBg+% zsR@f6u}vxv#E=Q}=9P^hB$6^|j)#yvVxssH9V7ucq9S75ikMKyB$%W&i4bJOQzFo3 zB7z=jlv< zl(Xt_MS?)6o+u=Qf_-R0W6b0nP!&UiCMk-7NGCnHqzps});`l5jD34+YiE1-c2=e0$Ud=mi?-lEY0W>>h06&6BDiMNy} z0p6>BaD}I6(YC#D2?Wdz)s}F#!Q0o);~q^mZWOeI2_AsvD;%PAapvw;Ty5nkB1a-= zQEz>fZd2mOARPCrBIwJOJ=`-k>fI?p+68HZ&Q^R0D@H2P3cV(^F9#*M3^o7+nKaQ3 T;rul4C=0QqjBOO?bbtTZ7Cu~r literal 0 HcmV?d00001 From 85d662792d4dbeae213f1f4977db235406c61186 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 16:16:37 +0600 Subject: [PATCH 0112/1086] Create scalable.svg --- content/bn/_common-resources/images/scalable.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/_common-resources/images/scalable.svg diff --git a/content/bn/_common-resources/images/scalable.svg b/content/bn/_common-resources/images/scalable.svg new file mode 100644 index 0000000000..900eef34ff --- /dev/null +++ b/content/bn/_common-resources/images/scalable.svg @@ -0,0 +1 @@ +kubernetes_icons From 23b159f1c783f19e8746e3028a6705e541359a4d Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 16:17:19 +0600 Subject: [PATCH 0113/1086] Create suitcase.svg --- content/bn/_common-resources/images/suitcase.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/_common-resources/images/suitcase.svg diff --git a/content/bn/_common-resources/images/suitcase.svg b/content/bn/_common-resources/images/suitcase.svg new file mode 100644 index 0000000000..687a444bc2 --- /dev/null +++ b/content/bn/_common-resources/images/suitcase.svg @@ -0,0 +1 @@ +kubernetes_icons From a9b29dd46699c0fee975f4fcbf8fb44b6c410104 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Thu, 1 Feb 2024 21:10:53 +0000 Subject: [PATCH 0114/1086] Fix config for Bengali --- hugo.toml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/hugo.toml b/hugo.toml index b37024bf4c..8f4d113403 100644 --- a/hugo.toml +++ b/hugo.toml @@ -305,6 +305,19 @@ i18nDir = "./data/i18n" [languages.en.params] description = "Production-Grade Container Orchestration" +[languages.bn] +title = "Kubernetes" +weight = 2 +languageName = "বাংলা (Bengali)" +contentDir = "content/bn" +languagedirection = "ltr" + +[languages.bn.params] +time_format_blog = "01.02.2006" +language_alternatives = ["en"] +description = "প্রোডাকশন-গ্রেড কন্টেইনার অর্কেস্ট্রেশন" +languageNameLatinScript = "বাংলা" + [languages.zh-cn] title = "Kubernetes" languageName = "中文 (Chinese)" @@ -511,15 +524,3 @@ languagedirection = "ltr" languageNameLatinScript = "Tiếng Việt" description = "Giải pháp điều phối container trong môi trường production" - -[languages.bn] -title = "Kubernetes" -description = "প্রোডাকশন-গ্রেড কন্টেইনার অর্কেস্ট্রেশন" -languageName = "বাংলা Bengali" -weight = 15 -contentDir = "content/bn" -languagedirection = "ltr" - -[languages.bn.params] -time_format_blog = "01.02.2006" -language_alternatives = ["en"] From 0b8df02067b5dab520ae2fb6a05f6f2ed8dddfc3 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Sat, 3 Feb 2024 16:57:45 +0000 Subject: [PATCH 0115/1086] Fix language ordering --- hugo.toml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/hugo.toml b/hugo.toml index 8f4d113403..880b7becf3 100644 --- a/hugo.toml +++ b/hugo.toml @@ -307,8 +307,8 @@ description = "Production-Grade Container Orchestration" [languages.bn] title = "Kubernetes" -weight = 2 languageName = "বাংলা (Bengali)" +weight = 2 contentDir = "content/bn" languagedirection = "ltr" @@ -316,12 +316,12 @@ languagedirection = "ltr" time_format_blog = "01.02.2006" language_alternatives = ["en"] description = "প্রোডাকশন-গ্রেড কন্টেইনার অর্কেস্ট্রেশন" -languageNameLatinScript = "বাংলা" +languageNameLatinScript = "Bengali" # aka Bangla [languages.zh-cn] title = "Kubernetes" languageName = "中文 (Chinese)" -weight = 2 +weight = 3 contentDir = "content/zh-cn" languagedirection = "ltr" @@ -334,7 +334,7 @@ description = "生产级别的容器编排系统" [languages.fr] title = "Kubernetes" languageName = "Français (French)" -weight = 3 +weight = 4 contentDir = "content/fr" languagedirection = "ltr" @@ -348,7 +348,7 @@ languageNameLatinScript = "Français" [languages.de] title = "Kubernetes" languageName = "Deutsch (German)" -weight = 4 +weight = 5 contentDir = "content/de" languagedirection = "ltr" @@ -362,7 +362,7 @@ languageNameLatinScript = "Deutsch" [languages.hi] title = "Kubernetes" languageName = "हिन्दी (Hindi)" -weight = 5 +weight = 6 contentDir = "content/hi" languagedirection = "ltr" @@ -376,7 +376,7 @@ languageNameLatinScript = "Hindi" [languages.id] title = "Kubernetes" languageName ="Bahasa Indonesia (Indonesian)" -weight = 6 +weight = 7 contentDir = "content/id" languagedirection = "ltr" @@ -390,7 +390,7 @@ languageNameLatinScript = "Bahasa Indonesia" [languages.it] title = "Kubernetes" languageName = "Italiano (Italian)" -weight = 7 +weight = 8 contentDir = "content/it" languagedirection = "ltr" @@ -404,7 +404,7 @@ languageNameLatinScript = "Italiano" [languages.ja] title = "Kubernetes" languageName = "日本語 (Japanese)" -weight = 8 +weight = 9 contentDir = "content/ja" languagedirection = "ltr" @@ -417,7 +417,7 @@ description = "プロダクショングレードのコンテナ管理基盤" [languages.ko] title = "Kubernetes" languageName = "한국어 (Korean)" -weight = 9 +weight = 10 contentDir = "content/ko" languagedirection = "ltr" @@ -445,7 +445,7 @@ languageNameLatinScript = "Korean" [languages.pl] title = "Kubernetes" languageName = "Polski (Polish)" -weight = 10 +weight = 11 contentDir = "content/pl" languagedirection = "ltr" @@ -459,7 +459,7 @@ languageNameLatinScript = "Polski" [languages.pt-br] title = "Kubernetes" languageName = "Português (Portuguese)" -weight = 11 +weight = 12 contentDir = "content/pt-br" languagedirection = "ltr" @@ -474,7 +474,7 @@ languageNameLatinScript = "Português" [languages.ru] title = "Kubernetes" languageName = "Русский (Russian)" -weight = 12 +weight = 13 contentDir = "content/ru" languagedirection = "ltr" @@ -488,7 +488,7 @@ languageNameLatinScript = "Russian" [languages.es] title = "Kubernetes" languageName = "Español (Spanish)" -weight = 13 +weight = 14 contentDir = "content/es" languagedirection = "ltr" @@ -502,7 +502,7 @@ languageNameLatinScript = "Español" [languages.uk] title = "Kubernetes" languageName = "Українська (Ukrainian)" -weight = 14 +weight = 15 contentDir = "content/uk" languagedirection = "ltr" @@ -517,7 +517,7 @@ languageNameLatinScript = "Ukrainian" title = "Kubernetes" languageName = "Tiếng Việt (Vietnamese)" contentDir = "content/vi" -weight = 15 +weight = 16 languagedirection = "ltr" [languages.vi.params] From d634df3cd3f782dd9a3d2b86388afb7f69b19ab5 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Thu, 1 Feb 2024 21:12:54 +0000 Subject: [PATCH 0116/1086] Fix glossary for Bengali --- content/bn/docs/reference/glossary/{_index.md => index.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename content/bn/docs/reference/glossary/{_index.md => index.md} (100%) diff --git a/content/bn/docs/reference/glossary/_index.md b/content/bn/docs/reference/glossary/index.md similarity index 100% rename from content/bn/docs/reference/glossary/_index.md rename to content/bn/docs/reference/glossary/index.md From 1a7b08a4c6f956b55e62cebb384ed8f129b5a1a5 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 3 Feb 2024 23:12:41 +0600 Subject: [PATCH 0117/1086] Update optional-kubectl-configs-zsh.md --- .../docs/tasks/tools/included/optional-kubectl-configs-zsh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md index 4a7cace442..166e8cd7f7 100644 --- a/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md +++ b/content/bn/docs/tasks/tools/included/optional-kubectl-configs-zsh.md @@ -1,4 +1,4 @@ ---- +--- title: "zsh স্বয়ংক্রিয় সমাপ্তি" description: "zsh স্বয়ংক্রিয় সমাপ্তি এর জন্য কিছু ঐচ্ছিক কনফিগারেশন।" headless: true From 5de04aba9ebaa4e527b5438d39c58661ae548107 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Mon, 5 Feb 2024 18:03:19 +0600 Subject: [PATCH 0118/1086] Create notes.md --- content/bn/releases/notes.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/bn/releases/notes.md diff --git a/content/bn/releases/notes.md b/content/bn/releases/notes.md new file mode 100644 index 0000000000..bf45902cd3 --- /dev/null +++ b/content/bn/releases/notes.md @@ -0,0 +1,17 @@ +--- +linktitle: রিলিজ নোটস +title: নোটস +type: docs +description: > + কুবারনেটিস রিলিজ নোটস। +sitemap: + priority: 0.5 +--- + +আপনার কুবারনেটিস সংস্করণের সাথে মেলে এমন [চেঞ্জলগ (Changelog)](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG) +পড়ার মাধ্যমে রিলিজ নোট পাওয়া যাবে। {{< skew currentVersionAddMinor 0 >}}-এর চেঞ্জলগ দেখুন +[গিটহাব](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-{{< skew currentVersionAddMinor 0 >}}.md) । + +বিকল্পভাবে, রিলিজ নোটস অনলাইনে অনুসন্ধান এবং ফিল্টার করা যেতে পারে: [relnotes.k8s.io](https://relnotes.k8s.io)। +{{< skew currentVersionAddMinor 0 >}}-এর জন্য ফিল্টার করা রিলিজ নোটগুলো দেখুন +[relnotes.k8s.io](https://relnotes.k8s.io/?releaseVersions={{< skew currentVersionAddMinor 0 >}}.0)। From 6a584205cbeb0262f9d6ca193892067df34a734f Mon Sep 17 00:00:00 2001 From: aakash deshmane <127671909+aakashdeshamne@users.noreply.github.com> Date: Tue, 6 Feb 2024 00:20:30 +0530 Subject: [PATCH 0119/1086] first commit --- content/en/releases/_index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/content/en/releases/_index.md b/content/en/releases/_index.md index 3748f9231b..fc2343685c 100644 --- a/content/en/releases/_index.md +++ b/content/en/releases/_index.md @@ -32,3 +32,6 @@ Check out the [schedule](https://github.com/kubernetes/sig-release/tree/master/r for the upcoming **{{< skew nextMinorVersion >}}** Kubernetes release! ## Helpful Resources + +Refer the [Kubernetes Release Team](https://github.com/kubernetes/sig-release/tree/master/release-team) resources +for key information on roles and release process. From 39f2b03444fa1ab7d7f8387866a2b3c8b60b19c3 Mon Sep 17 00:00:00 2001 From: aakash deshmane <127671909+aakashdeshamne@users.noreply.github.com> Date: Tue, 6 Feb 2024 16:34:49 +0530 Subject: [PATCH 0120/1086] Update content/en/releases/_index.md Co-authored-by: Gaurav Padam --- content/en/releases/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/releases/_index.md b/content/en/releases/_index.md index fc2343685c..98c4a44cb9 100644 --- a/content/en/releases/_index.md +++ b/content/en/releases/_index.md @@ -34,4 +34,4 @@ for the upcoming **{{< skew nextMinorVersion >}}** Kubernetes release! ## Helpful Resources Refer the [Kubernetes Release Team](https://github.com/kubernetes/sig-release/tree/master/release-team) resources -for key information on roles and release process. +for key information on roles and the release process. From e3e2db70cef91e05ccda608ebb3996d8e1f12ba5 Mon Sep 17 00:00:00 2001 From: aakash deshmane <127671909+aakashdeshamne@users.noreply.github.com> Date: Tue, 6 Feb 2024 16:35:10 +0530 Subject: [PATCH 0121/1086] Update content/en/releases/_index.md Co-authored-by: Gaurav Padam --- content/en/releases/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/releases/_index.md b/content/en/releases/_index.md index 98c4a44cb9..d2e2528c30 100644 --- a/content/en/releases/_index.md +++ b/content/en/releases/_index.md @@ -33,5 +33,5 @@ for the upcoming **{{< skew nextMinorVersion >}}** Kubernetes release! ## Helpful Resources -Refer the [Kubernetes Release Team](https://github.com/kubernetes/sig-release/tree/master/release-team) resources +Refer to the [Kubernetes Release Team](https://github.com/kubernetes/sig-release/tree/master/release-team) resources for key information on roles and the release process. From c9daa3a6d1969aa67b69486d4494f3f910993902 Mon Sep 17 00:00:00 2001 From: Arhell Date: Sun, 11 Feb 2024 02:18:57 +0200 Subject: [PATCH 0122/1086] [ko] Update configure-redis-using-configmap.md --- .../tutorials/configuration/configure-redis-using-configmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/ko/docs/tutorials/configuration/configure-redis-using-configmap.md b/content/ko/docs/tutorials/configuration/configure-redis-using-configmap.md index ddb64440bc..a2ab35bd98 100644 --- a/content/ko/docs/tutorials/configuration/configure-redis-using-configmap.md +++ b/content/ko/docs/tutorials/configuration/configure-redis-using-configmap.md @@ -61,7 +61,7 @@ kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/conte Redis 파드 매니페스트의 내용을 검토하고 다음의 사항을 염두에 둔다. * `config` 라는 이름의 볼륨은 `spec.volumes[1]` 에 의해서 생성된다. -* `spec.volumes[1].items[0]` 내부의 `key` 와 `path` 는 `config` 볼륨에 `redis.conf` 라는 파일명으로 지정된 +* `spec.volumes[1].configMap.items[0]` 내부의 `key` 와 `path` 는 `config` 볼륨에 `redis.conf` 라는 파일명으로 지정된 `example-redis-config` 컨피그맵의 `redis-config` 키를 노출시킨다. * 그리고 `config` 볼륨은 `spec.containers[0].volumeMounts[1]` 에 의해서 `/redis-master` 에 마운트된다. From 81611b79cc86d448ba119fca43f43b490f0cde32 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 18 Feb 2024 15:41:09 +0600 Subject: [PATCH 0123/1086] Update hello-minikube.md --- content/bn/docs/tutorials/hello-minikube.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/content/bn/docs/tutorials/hello-minikube.md b/content/bn/docs/tutorials/hello-minikube.md index cdce7d1a03..eea25618f9 100644 --- a/content/bn/docs/tutorials/hello-minikube.md +++ b/content/bn/docs/tutorials/hello-minikube.md @@ -1,4 +1,4 @@ - --- +--- title: হ্যালো Minikube (Hello Minikube) content_type: tutorial weight: 5 @@ -283,6 +283,8 @@ minikube delete ## {{% heading "whatsnext" %}} + +* _[kubectl এর সাথে কুবারনেটিসে আপনার প্রথম অ্যাপ স্থাপন](/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/)_ করার টিউটোরিয়াল। * [Deployment objects](/docs/concepts/workloads/controllers/deployment/) এর ব্যাপারে আরো জানুন। * [Deploying applications](/docs/tasks/run-application/run-stateless-application-deployment/) এর ব্যাপারে আরো জানুন। * [Service objects](/docs/concepts/services-networking/service/) এর ব্যাপারে আরো জানুন। From db9ec6117084343521a2aea77f38380344e4aea2 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 18 Feb 2024 17:40:49 +0600 Subject: [PATCH 0124/1086] Create _index.md --- content/bn/docs/tutorials/configuration/_index.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/tutorials/configuration/_index.md diff --git a/content/bn/docs/tutorials/configuration/_index.md b/content/bn/docs/tutorials/configuration/_index.md new file mode 100644 index 0000000000..a688a7251e --- /dev/null +++ b/content/bn/docs/tutorials/configuration/_index.md @@ -0,0 +1,4 @@ +--- +title: "কনফিগারেশন" +weight: 30 +--- From 533c8a53826329275ce476daa46232c442444947 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 18 Feb 2024 17:56:23 +0600 Subject: [PATCH 0125/1086] Create _index.md --- content/bn/docs/tutorials/security/_index.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/docs/tutorials/security/_index.md diff --git a/content/bn/docs/tutorials/security/_index.md b/content/bn/docs/tutorials/security/_index.md new file mode 100644 index 0000000000..ac33aa20dc --- /dev/null +++ b/content/bn/docs/tutorials/security/_index.md @@ -0,0 +1,11 @@ +--- +title: "নিরাপত্তা" +weight: 40 +--- + +কুবারনেটিস ক্লাস্টার পরিচালনাকারী বেশিরভাগ সংস্থা এবং লোকেদের জন্য নিরাপত্তা একটি গুরুত্বপূর্ণ উদ্বেগ। +আপনি একটি মৌলিক [নিরাপত্তা চেকলিস্ট](/bn/docs/concepts/security/security-checklist/) খুঁজে পেতে পারেন +কুবারনেটিস ডকুমেন্টেশনের অন্যত্র । + +কুবারনেটিসের নিরাপত্তার দিকগুএও কীভাবে স্থাপন এবং পরিচালনা করতে হয় তা শিখতে, +আপনি এই বিভাগে টিউটোরিয়ালগুলো অনুসরণ করতে পারেন। From 57b3315fa7d196271928fab5ce1fe046b566789c Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 18 Feb 2024 17:59:19 +0600 Subject: [PATCH 0126/1086] Create _index.md --- content/bn/docs/tutorials/stateful-application/_index.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/tutorials/stateful-application/_index.md diff --git a/content/bn/docs/tutorials/stateful-application/_index.md b/content/bn/docs/tutorials/stateful-application/_index.md new file mode 100644 index 0000000000..3a4dcdd7c5 --- /dev/null +++ b/content/bn/docs/tutorials/stateful-application/_index.md @@ -0,0 +1,4 @@ +--- +title: "স্টেটফুল অ্যাপ্লিকেশন" +weight: 50 +--- From e3fb4331d57c1a9be8a0159eda5dc46c835a70c1 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 18 Feb 2024 18:00:37 +0600 Subject: [PATCH 0127/1086] Create _index.md --- content/bn/docs/tutorials/stateless-application/_index.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/tutorials/stateless-application/_index.md diff --git a/content/bn/docs/tutorials/stateless-application/_index.md b/content/bn/docs/tutorials/stateless-application/_index.md new file mode 100644 index 0000000000..848fe53793 --- /dev/null +++ b/content/bn/docs/tutorials/stateless-application/_index.md @@ -0,0 +1,4 @@ +--- +title: "স্টেটলেস অ্যাপ্লিকেশন" +weight: 40 +--- From 8e7c0c7d10d140d140e86e9900e0c9723fb05550 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 18 Feb 2024 18:02:04 +0600 Subject: [PATCH 0128/1086] Create _index.md --- content/bn/docs/tutorials/services/_index.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/tutorials/services/_index.md diff --git a/content/bn/docs/tutorials/services/_index.md b/content/bn/docs/tutorials/services/_index.md new file mode 100644 index 0000000000..4bb0b023bc --- /dev/null +++ b/content/bn/docs/tutorials/services/_index.md @@ -0,0 +1,4 @@ +--- +title: "সেবা" +weight: 70 +--- From 527df0ce55dfcb1c04fac4204a192c880f9fd808 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 18 Feb 2024 18:14:25 +0600 Subject: [PATCH 0129/1086] Update hello-minikube.md --- content/bn/docs/tutorials/hello-minikube.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/content/bn/docs/tutorials/hello-minikube.md b/content/bn/docs/tutorials/hello-minikube.md index eea25618f9..8a09bcfe2a 100644 --- a/content/bn/docs/tutorials/hello-minikube.md +++ b/content/bn/docs/tutorials/hello-minikube.md @@ -1,5 +1,5 @@ --- -title: হ্যালো Minikube (Hello Minikube) +title: হ্যালো মিনিকুব (Hello Minikube) content_type: tutorial weight: 5 menu: @@ -8,7 +8,6 @@ menu: weight: 10 post: >

কাজ শুরু করতে প্রস্তুত? একটি সাধারণ কুবারনেটিস ক্লাস্টার তৈরি করুন যা একটি নমুনা অ্যাপ চালায় ।

- card: name: tutorials weight: 10 @@ -16,12 +15,8 @@ card: -এই টিউটোরিয়ালে দেখবো কিভাবে একটি অ্যাপ্লিকেশনকে মিনিকিউব ও কাটাকোডা ব্যবহার করে কুবারনেটিস ক্লাস্টারে চালানো যাবে। - -{{< note >}} -ইন্সটল করার জন্য -[minikube স্টার্ট](https://minikube.sigs.k8s.io/docs/start/) এর নির্দেশনা দেখো। -{{< /note >}} +এই টিউটোরিয়ালটি আপনাকে দেখায় কিভাবে মিনিকুব ব্যবহার করে কুবারনেটিস এ একটি নমুনা অ্যাপ চালাতে হয়। +টিউটোরিয়ালটি একটি কন্টেইনার চিত্র প্রদান করে যা NGINX ব্যবহার করে সমস্ত অনুরোধগুলোকে প্রতিধ্বনিত করে ৷ ## {{% heading "objectives" %}} From 4af8e0f82279c6f216b2a09cd953204ef87de1b5 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 18 Feb 2024 18:21:15 +0600 Subject: [PATCH 0130/1086] Update _index.md --- content/bn/docs/tutorials/_index.md | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/content/bn/docs/tutorials/_index.md b/content/bn/docs/tutorials/_index.md index 880744326a..4ff19ffd7a 100644 --- a/content/bn/docs/tutorials/_index.md +++ b/content/bn/docs/tutorials/_index.md @@ -10,52 +10,47 @@ content_type: ধারণা কুবারনেটিস ডকুমেন্টেশনের এই বিভাগে টিউটোরিয়াল রয়েছে। একটি টিউটোরিয়াল দেখায় কিভাবে একটি লক্ষ্য অর্জন করতে হয় যা একটি একক থেকে বড় -[টাস্ক](/docs/tasks/)। সাধারণত একটি টিউটোরিয়ালের বেশ কয়েকটি বিভাগ থাকে যার প্রতিটিরই ধাপের ক্রম রয়েছে। -প্রতিটি টিউটোরিয়ালের মাধ্যমে হাঁটার আগে, আপনি [প্রমিত শব্দকোষ](/docs/reference/glossary/) পৃষ্ঠা বুকমার্ক করতে চাইতে পারেন -পরবর্তী রেফারেন্সের জন্য । +[টাস্ক](/docs/tasks/)। সাধারণত একটি টিউটোরিয়ালের বেশ কয়েকটি বিভাগ থাকে +যার প্রতিটিরই ধাপের ক্রম রয়েছে। +প্রতিটি টিউটোরিয়ালের মাধ্যমে হাঁটার আগে, আপনি [প্রমিত শব্দকোষ](/docs/reference/glossary/) +পৃষ্ঠা বুকমার্ক করতে চাইতে পারেন পরবর্তী রেফারেন্সের জন্য । ## বেসিক -* [কুবারনেটিস বেসিক](/docs/tutorials/kubernetes-basics/) হল একটি গভীর ইন্টারেক্টিভ টিউটোরিয়াল যা আপনাকে কুবারনেটিস সিস্টেম বুঝতে এবং কিছু মৌলিক কুবারনেটিস বৈশিষ্ট্যগুলি ব্যবহার করে দেখতে সাহায্য করে। - +* [কুবারনেটিস বেসিক](/docs/tutorials/kubernetes-basics/) হলো একটি গভীর ইন্টারেক্টিভ টিউটোরিয়াল যা আপনাকে কুবারনেটিস সিস্টেম বুঝতে এবং কিছু মৌলিক কুবারনেটিস বৈশিষ্ট্যগুলো ব্যবহার করে দেখতে সাহায্য করে। * [কুবারনেটিসের ভূমিকা (edX)](https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x#) - * [হ্যালো মিনিকুব](/docs/tutorials/hello-minikube/) ## কনফিগারেশন * [উদাহরণ: একটি জাভা মাইক্রোসার্ভিস কনফিগার কর](/docs/tutorials/configuration/configure-java-microservice/) - * [কনফিগার ম্যাপ ব্যবহার করে রেডিস কনফিগার কর](/docs/tutorials/configuration/configure-redis-using-configmap/) ## স্টেটলেস অ্যাপ্লিকেশন * [একটি ক্লাস্টারে একটি অ্যাপ্লিকেশন অ্যাক্সেস করার জন্য একটি বহিরাগত আইপি ঠিকানা প্রকাশ করয ](/docs/tutorials/stateless-application/expose-external-ip-address/) - * [উদাহরণ: Redis এর সাথে PHP গেস্টবুক অ্যাপ্লিকেশন স্থাপন কর](/docs/tutorials/stateless-application/guestbook/) ## স্টেটফুল অ্যাপ্লিকেশন * [স্টেটফুল সেটের বেসিক](/docs/tutorials/stateful-application/basic-stateful-set/) - * [উদাহরণ: ওয়ার্ডপ্রেস এবং স্থায়ী ভলিউম সহ MySQL](/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/) - * [উদাহরণ: স্টেটফুল সেটের সাথে ক্যাসান্দ্রা স্থাপন কর](/docs/tutorials/stateful-application/cassandra/) - * [জুকিপার চালাই, একটি সিপি ডিস্ট্রিবিউটেড সিস্টেম](/docs/tutorials/stateful-application/zookeeper/) -## ক্লাস্টার - -* [এপ্আর্মর ](/docs/tutorials/clusters/apparmor/) - -* [সেকোম্প](/docs/tutorials/clusters/seccomp/) - ## সেবা +* [পরিষেবাগুলোর সাথে অ্যাপ্লিকেশনগুলো সংযুক্ত কর](/docs/tutorials/services/connect-applications-service/) * [উৎস আইপি ব্যবহার কর](/docs/tutorials/services/source-ip/) +## নিরাপত্তা + +* [ক্লাস্টার স্তরে পড নিরাপত্তা মান প্রয়োগ করুন](/docs/tutorials/security/cluster-level-pss/) +* [নেমস্পেস স্তরে পড নিরাপত্তা মান প্রয়োগ করুন](/docs/tutorials/security/ns-level-pss/) +* [AppArmor](/docs/tutorials/security/apparmor/) +* [Seccomp](/docs/tutorials/security/seccomp/) ## {{% heading "whatsnext" %}} আপনি যদি একটি টিউটোরিয়াল লিখতে চান, From 4e6051684a4feb7686ec61a6eb42969599b012ae Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 18 Feb 2024 22:47:22 +0600 Subject: [PATCH 0131/1086] Create _index.md --- content/bn/docs/_index.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 content/bn/docs/_index.md diff --git a/content/bn/docs/_index.md b/content/bn/docs/_index.md new file mode 100644 index 0000000000..55aeef24fe --- /dev/null +++ b/content/bn/docs/_index.md @@ -0,0 +1,6 @@ +--- +linktitle: কুবারনেটিস ডকুমেন্টেশন +title: ডকুমেন্টেশন +sitemap: + priority: 1.0 +--- From c74869f4658a24a6cb4246f7f9251f4885afc904 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 18 Feb 2024 22:58:09 +0600 Subject: [PATCH 0132/1086] Create _index.md --- content/bn/docs/concepts/_index.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 content/bn/docs/concepts/_index.md diff --git a/content/bn/docs/concepts/_index.md b/content/bn/docs/concepts/_index.md new file mode 100644 index 0000000000..f2fe915186 --- /dev/null +++ b/content/bn/docs/concepts/_index.md @@ -0,0 +1,13 @@ +--- +title: ধারণা +main_menu: true +content_type: concept +weight: 40 +--- + + + +ধারণা বিভাগটি আপনাকে কুবারনেটিস সিস্টেমের অংশগুলো এবং কুবারনেটিস আপনার ক্লাস্টারের প্রতিনিধিত্ব করার জন্য যে অ্যাবস্ট্রাকশনগুলো ব্যবহার করে সেগুলো সম্পর্কে শিখতে সাহায্য করে এবং কুবারনেটিস কীভাবে কাজ করে সে সম্পর্কে আপনাকে গভীরভাবে বুঝতে সাহায্য করে । + + + From 84dbeaa63567b594908b64b4ebf45807e7eb8969 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 18 Feb 2024 23:04:02 +0600 Subject: [PATCH 0133/1086] Update _index.md --- content/bn/docs/concepts/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/_index.md b/content/bn/docs/concepts/_index.md index f2fe915186..ac101b6a41 100644 --- a/content/bn/docs/concepts/_index.md +++ b/content/bn/docs/concepts/_index.md @@ -7,7 +7,7 @@ weight: 40 -ধারণা বিভাগটি আপনাকে কুবারনেটিস সিস্টেমের অংশগুলো এবং কুবারনেটিস আপনার ক্লাস্টারের প্রতিনিধিত্ব করার জন্য যে অ্যাবস্ট্রাকশনগুলো ব্যবহার করে সেগুলো সম্পর্কে শিখতে সাহায্য করে এবং কুবারনেটিস কীভাবে কাজ করে সে সম্পর্কে আপনাকে গভীরভাবে বুঝতে সাহায্য করে । +ধারণা বিভাগটি আপনাকে কুবারনেটিস সিস্টেমের অংশগুলো এবং কুবারনেটিস আপনার {{< glossary_tooltip text="ক্লাস্টারের" term_id="cluster" length="all" >}} প্রতিনিধিত্ব করার জন্য যে অ্যাবস্ট্রাকশনগুলো ব্যবহার করে সেগুলো সম্পর্কে শিখতে সাহায্য করে এবং কুবারনেটিস কীভাবে কাজ করে সে সম্পর্কে আপনাকে গভীরভাবে বুঝতে সাহায্য করে । From 264dfe4db71f9d1e4eba9d7d7b09e7048327a858 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 18 Feb 2024 23:10:41 +0600 Subject: [PATCH 0134/1086] Create _index.md --- content/bn/docs/concepts/architecture/_index.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 content/bn/docs/concepts/architecture/_index.md diff --git a/content/bn/docs/concepts/architecture/_index.md b/content/bn/docs/concepts/architecture/_index.md new file mode 100644 index 0000000000..5fcba1b640 --- /dev/null +++ b/content/bn/docs/concepts/architecture/_index.md @@ -0,0 +1,8 @@ +--- +title: "ক্লাস্টার স্থাপত্য(Cluster Architecture)" +weight: 30 +description: > + কুবারনেটিসের পিছনে স্থাপত্যের ধারণা । +--- + +{{< figure src="/images/docs/kubernetes-cluster-architecture.svg" alt="কুবারনেটিসের উপাদান" caption="কুবারনেটিস ক্লাস্টার স্থাপত্য" class="diagram-large" >}} From f214523dcd41670fb5cdec109b2342ed9c86cc99 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Mon, 19 Feb 2024 00:00:01 +0600 Subject: [PATCH 0135/1086] Create _index.md --- content/bn/docs/concepts/containers/_index.md | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 content/bn/docs/concepts/containers/_index.md diff --git a/content/bn/docs/concepts/containers/_index.md b/content/bn/docs/concepts/containers/_index.md new file mode 100644 index 0000000000..78f67ff25f --- /dev/null +++ b/content/bn/docs/concepts/containers/_index.md @@ -0,0 +1,56 @@ +--- +title: কন্টেইনার +weight: 40 +description: রানটাইম নির্ভরতা সহ একটি অ্যাপ্লিকেশন প্যাকেজ করার প্রযুক্তি। +reviewers: +- erictune +- thockin +content_type: concept +card: + name: concepts + weight: 50 +--- + + + +আপনার চালানো প্রতিটি কন্টেইনার পুনরাবৃত্তিযোগ্য; +নির্ভরতা অন্তর্ভুক্ত করা থেকে প্রমিতকরণের (standardization) অর্থ হলো আপনি যেখানেই এটি চালান +সেখানই আপনি একই আচরণ পাবেন। + +কন্টেইনার অন্তর্নিহিত হোস্ট পরিকাঠামো থেকে অ্যাপ্লিকেশনগুলোকে দ্বিগুণ করে৷ +এটি বিভিন্ন ক্লাউড বা ওএস পরিবেশে স্থাপনাকে সহজ করে তোলে। + +একটি কুবারনেটিস ক্লাস্টারের প্রতিটি {{< glossary_tooltip text="নোড" term_id="node" >}} , +সেই নোডের জন্য নির্ধারিত [পড](/bn/docs/concepts/workloads/pods/) +গঠনকারী কন্টেইনারগুলো চালায়। +একটি পডের কন্টেইনারগুলো একই নোডে চালানোর জন্য সহ-অবস্থিত (co-located) এবং সহ-নির্ধারিত (co-scheduled)। + + + + +## কন্টেইনার ছবি +একটি [কন্টেইনার ছবি](/bn/docs/concepts/containers/images/) হলো একটি রেডি-টু-রান সফ্টওয়্যার প্যাকেজ +যাতে একটি অ্যাপ্লিকেশন চালানোর জন্য প্রয়োজনীয় সমস্ত কিছু থাকে: +কোড এবং যেকোন রানটাইম, অ্যাপ্লিকেশন এবং সিস্টেম লাইব্রেরি +এবং যেকোনো প্রয়োজনীয় সেটিংসের জন্য ডিফল্ট মান। + +কন্টেইনারগুলো স্টেটলেস এবং [অপরিবর্তনীয়](https://glossary.cncf.io/bn/immutable-infrastructure/) +হওয়ার উদ্দেশ্যে করা হয়েছে: +আপনার এমন একটি কন্টেইনারের কোড পরিবর্তন করা উচিত নয় +যা ইতিমধ্যেই চলছে ৷ আপনার যদি একটি কন্টেইনারাইজড অ্যাপ্লিকেশন থাকে +এবং পরিবর্তন করতে চান, সঠিক প্রক্রিয়াটি হলো একটি নতুন ছবি তৈরি করা +যাতে পরিবর্তনটি অন্তর্ভুক্ত থাকে, +তারপর আপডেট করা ছবি থেকে শুরু করতে কন্টেইনারটি পুনরায় তৈরি করুন । + +## কন্টেইনার রানটাইম + +{{< glossary_definition term_id="container-runtime" length="all" >}} + +সাধারণত, আপনি আপনার ক্লাস্টারকে একটি পডের জন্য ডিফল্ট কন্টেইনার রানটাইম বাছাই করার +অনুমতি দিতে পারেন। আপনি যদি আপনার ক্লাস্টারে একাধিক কন্টেইনার রানটাইম ব্যবহার করতে চান, +আপনি একটি পডের জন্য [রানটাইম ক্লাস](/bn/docs/concepts/containers/runtime-class/) +নির্দিষ্ট করতে পারেন যাতে কুবারনেটিস একটি নির্দিষ্ট কন্টেইনার রানটাইম ব্যবহার করে +সেই কন্টেইনারগুলো চালায়। + +আপনি একই কন্টেইনার রানটাইম সহ বিভিন্ন পড চালানোর জন্য রানটাইম ক্লাস ব্যবহার করতে পারেন +কিন্তু ভিন্ন সেটিংসের সাথে। From bc58b4395ceff12f0a30d16195a0f80152ad9430 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Mon, 19 Feb 2024 00:21:16 +0600 Subject: [PATCH 0136/1086] Update _index.md --- content/bn/docs/concepts/containers/_index.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/content/bn/docs/concepts/containers/_index.md b/content/bn/docs/concepts/containers/_index.md index 78f67ff25f..66cbdc07dc 100644 --- a/content/bn/docs/concepts/containers/_index.md +++ b/content/bn/docs/concepts/containers/_index.md @@ -2,9 +2,6 @@ title: কন্টেইনার weight: 40 description: রানটাইম নির্ভরতা সহ একটি অ্যাপ্লিকেশন প্যাকেজ করার প্রযুক্তি। -reviewers: -- erictune -- thockin content_type: concept card: name: concepts From 6a3b42add6ee06fcc2fbad47d444a03a4724e874 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 19 Feb 2024 22:22:59 +0600 Subject: [PATCH 0137/1086] localize search.md --- content/bn/search.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/search.md diff --git a/content/bn/search.md b/content/bn/search.md new file mode 100644 index 0000000000..f5a4392d02 --- /dev/null +++ b/content/bn/search.md @@ -0,0 +1,4 @@ +--- +layout: অনুসন্ধান +title: অনুসন্ধানের ফলাফল +--- From 37767cd21e3e57ccd24298a3225886e63e435171 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 19 Feb 2024 23:30:32 +0600 Subject: [PATCH 0138/1086] Update search.md --- content/bn/search.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/search.md b/content/bn/search.md index f5a4392d02..a30e423dbb 100644 --- a/content/bn/search.md +++ b/content/bn/search.md @@ -1,4 +1,4 @@ --- -layout: অনুসন্ধান +layout: search title: অনুসন্ধানের ফলাফল --- From 8e75ac851d624385d48b694312dc82b9f311c461 Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Tue, 20 Feb 2024 21:22:38 +0600 Subject: [PATCH 0139/1086] Create _index.md --- content/bn/docs/concepts/configuration/_index.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 content/bn/docs/concepts/configuration/_index.md diff --git a/content/bn/docs/concepts/configuration/_index.md b/content/bn/docs/concepts/configuration/_index.md new file mode 100644 index 0000000000..117efc49f0 --- /dev/null +++ b/content/bn/docs/concepts/configuration/_index.md @@ -0,0 +1,6 @@ +--- +title: "কনফিগারেশন" +weight: 80 +description: > + পডস কনফিগার করার জন্য কুবারনেটিস যে রিসোর্সগুলো প্রদান করে । +--- From 22a3e2745d8dd0a99277d2a02da9adf146894dd0 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Tue, 20 Feb 2024 23:06:33 +0600 Subject: [PATCH 0140/1086] Create _index.md --- .../concepts/services-networking/_index.md | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 content/bn/docs/concepts/services-networking/_index.md diff --git a/content/bn/docs/concepts/services-networking/_index.md b/content/bn/docs/concepts/services-networking/_index.md new file mode 100644 index 0000000000..5a4341c430 --- /dev/null +++ b/content/bn/docs/concepts/services-networking/_index.md @@ -0,0 +1,65 @@ +--- +title: "পরিষেবা, লোড ব্যালেন্সিং এবং নেটওয়ার্কিং" +weight: 60 +description: > + কুবারনেটিসে নেটওয়ার্কিংয়ের পিছনে থাকা ধারণা এবং রিসোর্স। +--- + +## কুবারনেটিস নেটওয়ার্ক মডেল + +একটি ক্লাস্টারের প্রতিটি [`পড`](/bn/docs/concepts/workloads/pods/) তার নিজস্ব ক্লাস্টার-ওয়াইড আইপি ঠিকানা পায়। +এর অর্থ হলো আপনাকে `পডের` মধ্যে স্পষ্টভাবে লিঙ্ক তৈরি করার দরকার নেই +এবং পোর্টগুলো হোস্ট করার জন্য আপনাকে ম্যাপিং কন্টেইনার পোর্টগুলোর সাথে মোকাবিলা করতে হবে না। +এটি একটি পরিষ্কার, পিছনের-সামঞ্জস্যপূর্ণ মডেল (backwards-compatible model) তৈরি করে +যেখানে পোর্ট বরাদ্দকরণ, নামকরণ, পরিষেবা আবিষ্কার (service discovery), [লোড ব্যালেন্সিং](/bn/docs/concepts/services-networking/ingress/#load-balancing), অ্যাপ্লিকেশন কনফিগারেশন এবং মাইগ্রেশনের +দৃষ্টিকোণ থেকে `পডগুলোকে` অনেকটা ভিএম (Virtual Machine) বা ফিজিক্যাল হোস্টের মতোই +বিবেচনা করা যেতে পারে। + +কুবারনেটিস যেকোন নেটওয়ার্কিং বাস্তবায়নে নিম্নলিখিত মৌলিক প্রয়োজনীয়তাগুলো আরোপ করে +(যেকোনো ইচ্ছাকৃত নেটওয়ার্ক বিভাজন নীতি ব্যতীত): + + * পড NAT ছাড়া অন্য কোনো [নোডে](/docs/concepts/architecture/nodes/) + অন্য সব পডের সঙ্গে যোগাযোগ করতে পারে + * একটি নোডের এজেন্ট (যেমন system daemons, kubelet) সেই নোডের সমস্ত + পডের সাথে যোগাযোগ করতে পারে + +দ্রষ্টব্য: হোস্ট নেটওয়ার্কে (যেমন লিনাক্স) চলমান `পডগুলোকে` সমর্থন করে এমন প্ল্যাটফর্মগুলোর জন্য, +যখন পডগুলো একটি নোডের হোস্ট নেটওয়ার্কের সাথে সংযুক্ত থাকে তখনও +তারা সমস্ত নোডের সমস্ত পডের সাথে যোগাযোগ করতে পারে NAT ছাড়া ৷ + +এই মডেলটি শুধুমাত্র সামগ্রিকভাবে কম জটিল নয়, +এটি প্রধানত কুবারনেটিসের ইচ্ছার সাথে সামঞ্জস্যপূর্ণ যাতে ভিএম থেকে কন্টেইনারে +অ্যাপের লো-ফ্রিকশন পোর্টিং সক্ষম করা যায়। যদি আপনার কাজ আগে কোনো ভিএম-এ চলত, তাহলে আপনার ভিএম-এর IP ছিল এবং +আপনার প্রোজেক্টের অন্যান্য ভিএম-এর সাথে কথা বলতে পারে। এটি একই মৌলিক মডেল। + +কুবারনেটিস আইপি ঠিকানাগুলো `পড` স্কোপে বিদ্যমান - একটি `পডের` মধ্যে থাকা কন্টেনারগুলো +তাদের নেটওয়ার্ক নেমস্পেসগুলো ভাগ করে - তাদের IP ঠিকানা এবং MAC ঠিকানা সহ। +এর মানে হলো যে একটি `পডের` মধ্যে থাকা কন্টেইনারগুলো একে অপরের পোর্টে `লোকালহোস্টে` পৌঁছাতে পারে। +এটি আরো বোঝায় যে একটি `পডের` মধ্যে থাকা কন্টেইনারগুলোকে পোর্ট ব্যবহারের সমন্বয় করতে হবে, +তবে এটি একটি ভিএম-এর প্রক্রিয়াগুলোর থেকে আলাদা নয়। +এটিকে "IP-per-pod" মডেল বলা হয়। + +এটি কীভাবে প্রয়োগ করা হয় তা ব্যবহার করা নির্দিষ্ট কন্টেইনার রানটাইমের একটি ডিটেইল। + +`নোডেই` পোর্টের জন্য অনুরোধ করা সম্ভব যা আপনার `পডে` ফরোয়ার্ড করা হয় +(যাকে হোস্ট পোর্ট বলা হয়), কিন্তু এটি একটি খুব বিশিষ্ট অপারেশন। +সেই ফরোয়ার্ডিং কীভাবে বাস্তবায়িত হয় তাও কন্টেইনার রানটাইমের ডিটেইল। +`পড` নিজেই হোস্ট পোর্টের অস্তিত্ব বা অ-অস্তিত্ব সম্পর্কে অন্ধ। + +কুবারনেটিস নেটওয়ার্কিং চারটি উদ্বেগের সমাধান করে: +- লুপব্যাকের মাধ্যমে একটি পডের মধ্যে কন্টেইনার [যোগাযোগের জন্য নেটওয়ার্কিং ব্যবহার করে](/bn/docs/concepts/services-networking/dns-pod-service/) । +- ক্লাস্টার নেটওয়ার্কিং বিভিন্ন পডের মধ্যে যোগাযোগ প্রদান করে। +- [পরিষেবা](/bn/docs/concepts/services-networking/service/) API আপনাকে আপনার ক্লাস্টারের + বাইরে থেকে পৌঁছানোর জন্য [পডসে চলমান একটি অ্যাপ্লিকেশন প্রকাশ](/docs/tutorials/services/connect-applications-service/) + করতে দেয় । + - [ইনগ্রেস](/bn/docs/concepts/services-networking/ingress/) বিশেষত HTTP অ্যাপ্লিকেশন, ওয়েবসাইট + এবং এপিআই প্রকাশ করার জন্য অতিরিক্ত কার্যকারিতা প্রদান করে। + - [গেটওয়ে API](/bn/docs/concepts/services-networking/gateway/) হলো একটি {{}} + যেটি মডেলিং পরিষেবা নেটওয়ার্কিংয়ের জন্য API ধরণের একটি অভিব্যক্তিপূর্ণ (expressive), এক্সটেনসিবল, এবং ভূমিকা-ভিত্তিক পরিবার প্রদান করে। +- এছাড়া আপনি [শুধুমাত্র আপনার ক্লাস্টারের মধ্যে ব্যবহারের জন্য পরিষেবাগুলো প্রকাশ করতে](/docs/concepts/services-networking/service-traffic-policy/) + পরিষেবাগুলো ব্যবহার করতে পারেন । + +[কানেক্টিং অ্যাপ্লিকেশানস উইথ সার্ভিস](/bn/docs/tutorials/services/connect-applications-service/) টিউটোরিয়াল আপনাকে একটি হ্যান্ডস-অন উদাহরণ সহ পরিষেবা এবং কুবারনেটিস নেটওয়ার্কিং সম্পর্কে শিখতে দেয়। + +[ক্লাস্টার নেটওয়ার্কিং](/bn/docs/concepts/cluster-administration/networking/) ব্যাখ্যা করে +কিভাবে আপনার ক্লাস্টারের জন্য নেটওয়ার্কিং সেট আপ করতে হয় এবং এর সাথে জড়িত প্রযুক্তিগুলোর একটি ওভারভিউ প্রদান করে। From fbbda307fe972a743041fced93f216f14da8a0bb Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Tue, 20 Feb 2024 23:09:36 +0600 Subject: [PATCH 0141/1086] Create _index.md --- content/bn/docs/concepts/storage/_index.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 content/bn/docs/concepts/storage/_index.md diff --git a/content/bn/docs/concepts/storage/_index.md b/content/bn/docs/concepts/storage/_index.md new file mode 100644 index 0000000000..96a52c44f4 --- /dev/null +++ b/content/bn/docs/concepts/storage/_index.md @@ -0,0 +1,6 @@ +--- +title: "স্টোরেজ" +weight: 70 +description: > + আপনার ক্লাস্টারে পডগুলোতে দীর্ঘমেয়াদী এবং অস্থায়ী উভয় স্টোরেজ সরবরাহ করার উপায়। +--- From ced8c62a8a020f8a8e2ae923dc45f6f26263b2ee Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Wed, 21 Feb 2024 23:52:10 +0600 Subject: [PATCH 0142/1086] /policy/_index.md localize intialize --- content/bn/docs/concepts/policy/_index.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/bn/docs/concepts/policy/_index.md diff --git a/content/bn/docs/concepts/policy/_index.md b/content/bn/docs/concepts/policy/_index.md new file mode 100644 index 0000000000..e69de29bb2 From e71ee541f063721c92afedef153ebf2ecf71a37f Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Thu, 22 Feb 2024 00:16:13 +0600 Subject: [PATCH 0143/1086] localize _index.md upto title --- content/bn/docs/concepts/policy/_index.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/content/bn/docs/concepts/policy/_index.md b/content/bn/docs/concepts/policy/_index.md index e69de29bb2..a6d58641a5 100644 --- a/content/bn/docs/concepts/policy/_index.md +++ b/content/bn/docs/concepts/policy/_index.md @@ -0,0 +1,15 @@ +--- +title: "নীতিমালা" +weight: 90 +no_list: true +description: > + নীতিগুলির সাথে সুরক্ষা এবং সর্বোত্তম-অনুশীলনগুলি পরিচালনা করুন +--- + + + +কুবারনেটিস নীতিগুলি এমন কনফিগারেশন যা অন্যান্য কনফিগারেশন বা রানটাইম আচরণগুলি পরিচালনা করে। কুবারনেটিস বিভিন্ন ধরণের নীতি সরবরাহ করে নীচে তা বর্ণিত হলো: + + + + From d8b63f3c1f52c63f021b1c8ad637e0e8769a078a Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Fri, 23 Feb 2024 23:50:57 +0600 Subject: [PATCH 0144/1086] localise _index.md --- content/bn/docs/concepts/policy/_index.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/policy/_index.md b/content/bn/docs/concepts/policy/_index.md index a6d58641a5..47a6914792 100644 --- a/content/bn/docs/concepts/policy/_index.md +++ b/content/bn/docs/concepts/policy/_index.md @@ -12,4 +12,15 @@ description: > - +## এপিআই (API) অবজেক্ট ব্যবহার করে পলিসি প্রয়োগ করুন + + কিছু এপিআই অবজেক্ট নীতি হিসাবে কাজ করে। এখানে কিছু উদাহরণ দেওয়া হল: +* [নেটওয়ার্ক নীতি](/docs/concepts/services-networking/network-policies/) একটি কাজের চাপের জন্য প্রবেশ এবং প্রস্থানে ট্র্যাফিক সীমাবদ্ধ করতে ব্যবহার করা যেতে পারে। +* [লিমিটরেঞ্জস](/docs/concepts/policy/limit-range/) বিভিন্ন বস্তুর ধরণের জুড়ে রিসোর্স বরাদ্দের সীমাবদ্ধতা পরিচালনা করে। +* [রিসোর্সকোটাস](/docs/concepts/policy/resource-quotas/) একটি জন্য সম্পদ খরচ সীমাবদ্ধ করুন {{< glossary_tooltip text="namespace" term_id="namespace" >}} + + ## ভর্তি নিয়ন্ত্রক ব্যবহার করে নীতিমালা প্রয়োগ করুন + + একটি {{< glossary_tooltip text="admission controller" term_id="admission-controller" >}} + এপিআই সার্ভারে চলে + উদাহরণস্বরূপ, [অলওয়েজইমেজপুল](/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages) অ্যাডমিশন কন্ট্রোলার ইমেজ পুল পলিসি 'অলওয়েজ' এ সেট করতে একটি নতুন পড সংশোধন করে। From 079303361676757bb22b7edc3aa7ae3539638741 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Sat, 24 Feb 2024 00:55:22 +0600 Subject: [PATCH 0145/1086] Update _index.md --- content/bn/docs/concepts/policy/_index.md | 33 +++++++++++++++++++---- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/content/bn/docs/concepts/policy/_index.md b/content/bn/docs/concepts/policy/_index.md index 47a6914792..e648d153ca 100644 --- a/content/bn/docs/concepts/policy/_index.md +++ b/content/bn/docs/concepts/policy/_index.md @@ -14,13 +14,36 @@ description: > ## এপিআই (API) অবজেক্ট ব্যবহার করে পলিসি প্রয়োগ করুন - কিছু এপিআই অবজেক্ট নীতি হিসাবে কাজ করে। এখানে কিছু উদাহরণ দেওয়া হল: + কিছু API অবজেক্ট নীতি হিসাবে কাজ করে। এখানে কিছু উদাহরণ দেওয়া হল: * [নেটওয়ার্ক নীতি](/docs/concepts/services-networking/network-policies/) একটি কাজের চাপের জন্য প্রবেশ এবং প্রস্থানে ট্র্যাফিক সীমাবদ্ধ করতে ব্যবহার করা যেতে পারে। * [লিমিটরেঞ্জস](/docs/concepts/policy/limit-range/) বিভিন্ন বস্তুর ধরণের জুড়ে রিসোর্স বরাদ্দের সীমাবদ্ধতা পরিচালনা করে। * [রিসোর্সকোটাস](/docs/concepts/policy/resource-quotas/) একটি জন্য সম্পদ খরচ সীমাবদ্ধ করুন {{< glossary_tooltip text="namespace" term_id="namespace" >}} - ## ভর্তি নিয়ন্ত্রক ব্যবহার করে নীতিমালা প্রয়োগ করুন +## ভর্তি নিয়ন্ত্রক ব্যবহার করে নীতিমালা প্রয়োগ করুন + +একটি {{< glossary_tooltip text="admission controller" term_id="admission-controller" >}} +API সার্ভারে চলে +এবং API অনুরোধগুলিকে যাচাই বা পরিবর্তন করতে পারে। কিছু ভর্তি নিয়ন্ত্রক নীতি প্রয়োগ করার জন্য কাজ করে। +উদাহরণস্বরূপ, [অলওয়েজইমেজপুল](/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages) অ্যাডমিশন কন্ট্রোলার ইমেজ পুল পলিসি 'অলওয়েজ' এ সেট করতে একটি নতুন পড সংশোধন করে। + +কুবারনেটিস বেশ কয়েকটি অন্তর্নির্মিত ভর্তি নিয়ামক রয়েছে যা API সার্ভের মাধ্যমে কনফিগারযোগ্য `--enable-admission-plugin` ফ্লাগ। + +ভর্তি নিয়ন্ত্রকদের বিবরণ, উপলব্ধ ভর্তি নিয়ন্ত্রকদের সম্পূর্ণ তালিকা সহ, একটি ডেডিকেটেড বিভাগে নথিভুক্ত (ডকুমেন্ট) করা হয়েছে। + +* [ভর্তি নিয়ন্ত্রকরা](/docs/reference/access-authn-authz/admission-controllers/) + +## ভ্যালিডেটিংএডমিশনপলিসি ব্যবহার করে নীতিগুলি প্রয়োগ করুন + +ভর্তি নীতিগুলি যাচাই করা কমন এক্সপ্রেশন ল্যাঙ্গুয়েজ (সিইএল) ব্যবহার করে API সার্ভারে কনফিগারযোগ্য বৈধতা চেকগুলি কার্যকর করার অনুমতি দেয়। উদাহরণস্বরূপ, 'সর্বশেষ' চিত্র ট্যাগের ব্যবহার নিষিদ্ধ করতে একটি 'ভ্যালিডেটিং অ্যাডমিশন পলিসি' ব্যবহার করা যেতে পারে। + +একটি 'ভ্যালিডেটি অ্যাডমিশনপলিসি' একটি API অনুরোধের ভিত্তিতে কাজ করে এবং ব্যবহারকারীদের অ-সম্মতিযুক্ত কনফিগারেশন সম্পর্কে ব্লক, নিরীক্ষণ (হিসাবনিকাশ) এবং সতর্ক করতে ব্যবহার করা যেতে পারে। + +উদাহরণ সহ 'ভ্যালিডেটিংএডমিশনপলিসি' API সম্পর্কে বিশদ বিবরণ একটি ডেডিকেটেড বিভাগে নথিভুক্ত (ডকুমেন্ট) করা হয়েছে: +* [ভ্যালিডেটিং এডমিশন পলিসি](/docs/reference/access-authn-authz/validating-admission-policy/) + + + + + + - একটি {{< glossary_tooltip text="admission controller" term_id="admission-controller" >}} - এপিআই সার্ভারে চলে - উদাহরণস্বরূপ, [অলওয়েজইমেজপুল](/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages) অ্যাডমিশন কন্ট্রোলার ইমেজ পুল পলিসি 'অলওয়েজ' এ সেট করতে একটি নতুন পড সংশোধন করে। From 3b723e6beff6ea586d7d868f045eafb3e321f4f7 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 25 Feb 2024 13:08:44 +0600 Subject: [PATCH 0146/1086] Create search.md --- content/bn/search.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/search.md diff --git a/content/bn/search.md b/content/bn/search.md new file mode 100644 index 0000000000..ab2978475d --- /dev/null +++ b/content/bn/search.md @@ -0,0 +1,4 @@ +--- +layout: search +title: অনুসন্ধান ফলাফল +--- From 13085e81143e0cc721af74c2df1714445be6d916 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 25 Feb 2024 14:24:04 +0600 Subject: [PATCH 0147/1086] Create download.md --- content/bn/releases/download.md | 82 +++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 content/bn/releases/download.md diff --git a/content/bn/releases/download.md b/content/bn/releases/download.md new file mode 100644 index 0000000000..bef7c320e5 --- /dev/null +++ b/content/bn/releases/download.md @@ -0,0 +1,82 @@ +--- +title: কুবারনেটিস ডাউনলোড করুন +type: docs +--- + +কুবারনেটিস প্রতিটি উপাদানের জন্য বাইনারি পাঠায় সেইসাথে একটি ক্লাস্টারের সাথে বুটস্ট্র্যাপ বা +ইন্টারঅ্যাক্ট (interact) করার জন্য ক্লায়েন্ট অ্যাপ্লিকেশনগুলোর একটি আদর্শ সেটও পাঠায় । এপিআই +সার্ভারের মতো উপাদানগুলো একটি ক্লাস্টারের ভিতরে কন্টেইনার ইমেজগুলোর মধ্যে চলতে সক্ষম । +সেই উপাদানগুলো অফিসিয়াল রিলিজ প্রক্রিয়ার অংশ হিসাবে কন্টেইনার ইমেজেও পাঠানো হয় । +সমস্ত বাইনারি এবং সেইসাথে কন্টেইনার ইমেজ একাধিক অপারেটিং সিস্টেমের পাশাপাশি +একাধিক হার্ডওয়্যার আর্কিটেকচারের জন্য উপলব্ধ (available) । + +### kubectl + + + +কুবারনেটিস কমান্ড-লাইন টুল, [kubectl](/bn/docs/reference/kubectl/kubectl/), +আপনাকে কুবারনেটিস ক্লাস্টারগুলোর বিপরীতে কমান্ড চালানোর অনুমতি দেয় । + +আপনি অ্যাপ্লিকেশন স্থাপন(deploy) করতে, ক্লাস্টার রিসোর্স পরিদর্শন ও পরিচালনা করতে এবং লগ দেখতে kubectl +ব্যবহার করতে পারেন । kubectl অপারেশনগুলোর একটি সম্পূর্ণ তালিকা সহ আরও তথ্যের জন্য, +[`kubectl` রেফারেন্স ডকুমেন্টেশন](/bn/docs/reference/kubectl/) দেখুন । + +kubectl বিভিন্ন লিনাক্স প্ল্যাটফর্ম, macOS এবং উইন্ডোজে ইনস্টলযোগ্য । +নীচে আপনার পছন্দের অপারেটিং সিস্টেম খুঁজুন। + +- [লিনাক্সে kubectl ইনস্টল করুন](/bn/docs/tasks/tools/install-kubectl-linux) +- [macOS এ kubectl ইনস্টল করুন](/bn/docs/tasks/tools/install-kubectl-macos) +- [উইন্ডোজে kubectl ইনস্টল করুন](/bn/docs/tasks/tools/install-kubectl-windows) + +## কন্টেইনার ইমেজ + +সমস্ত কুবারনেটিস কন্টেইনার ছবি `registry.k8s.io` +কন্টেইনার ইমেজ রেজিস্ট্রিতে স্থাপন করা হয় । + +| কন্টেইনার ইমেজ | সমর্থিত আর্কিটেকচার | +| ------------------------------------------------------------------------- | --------------------------------- | +| registry.k8s.io/kube-apiserver:v{{< skew currentPatchVersion >}} | amd64, arm, arm64, ppc64le, s390x | +| registry.k8s.io/kube-controller-manager:v{{< skew currentPatchVersion >}} | amd64, arm, arm64, ppc64le, s390x | +| registry.k8s.io/kube-proxy:v{{< skew currentPatchVersion >}} | amd64, arm, arm64, ppc64le, s390x | +| registry.k8s.io/kube-scheduler:v{{< skew currentPatchVersion >}} | amd64, arm, arm64, ppc64le, s390x | +| registry.k8s.io/conformance:v{{< skew currentPatchVersion >}} | amd64, arm, arm64, ppc64le, s390x | + +### কন্টেইনার ইমেজ আর্কিটেকচার + +সমস্ত কন্টেইনার ইমেজ একাধিক আর্কিটেকচারের জন্য উপলব্ধ, যেখানে কন্টেইনার +রানটাইম অন্তর্নিহিত প্ল্যাটফর্মের উপর ভিত্তি করে সঠিকটি বেছে নেওয়া উচিত। +কন্টেইনার ইমেজ নামের প্রত্যয়যোগ একটি ডেডিকেটেড আর্কিটেকচারও নেওয়া সম্ভব, +উদাহরণস্বরূপ +`registry.k8s.io/kube-apiserver-arm64:v{{< skew currentPatchVersion >}}` । + +### কন্টেইনার ইমেজ স্বাক্ষর + +{{< feature-state for_k8s_version="v1.26" state="beta" >}} + +কুবারনেটিস {{< param "version" >}} এর জন্য, +কন্টেইনার ইমেজগুলো [sigstore](https://sigstore.dev) স্বাক্ষর +ব্যবহার করে স্বাক্ষরিত হয়: + +{{< note >}} +কন্টেইনার ইমেজ sigstore স্বাক্ষর বর্তমানে বিভিন্ন ভৌগলিক অবস্থানের মধ্যে মেলে না। +এই সমস্যা সম্পর্কে আরও তথ্য সংশ্লিষ্ট [GitHub issue](https://github.com/kubernetes/registry.k8s.io/issues/187) +তে পাওয়া যাবে । +{{< /note >} + +কুবারনেটিস প্রজেক্ট [SPDX 2.3](https://spdx.dev/specifications/) ফরম্যাটে স্বাক্ষরিত +কুবারনেটিস কন্টেইনার ইমেজের একটি তালিকা প্রকাশ করে। +আপনি এই তালিকাটি আনতে ব্যবহার করতে পারেন: + +```shell +curl -Ls "https://sbom.k8s.io/$(curl -Ls https://dl.k8s.io/release/stable.txt)/release" | grep "SPDXID: SPDXRef-Package-registry.k8s.io" | grep -v sha256 | cut -d- -f3- | sed 's/-/\//' | sed 's/-v1/:v1/' +``` + +কুবারনেটিস মূল উপাদানগুলোর স্বাক্ষরিত কন্টেইনার ইমেজগুলো ম্যানুয়ালি যাচাই করতে, +[স্বাক্ষরিত কন্টেইনার ইমেজগুলো যাচাই](/bn/docs/tasks/administer-cluster/verify-signed-artifacts) করুন । + +আপনি যদি একটি নির্দিষ্ট আর্কিটেকচারের জন্য একটি কন্টেইনার ইমেজ নেন, +তাহলে একক-আর্কিটেকচার ইমেজটি মাল্টি-আর্কিটেকচার ম্যানিফেস্ট তালিকার মতোই সাইন ইন করা হয়। + +## বাইনারি + +{{< release-binaries >}} From 9658ce4b6fa53812a5bd3097f190c9a64934750f Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 26 Feb 2024 00:44:46 +0600 Subject: [PATCH 0148/1086] final localize _index.md --- content/bn/docs/concepts/policy/_index.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/concepts/policy/_index.md b/content/bn/docs/concepts/policy/_index.md index e648d153ca..858aded60d 100644 --- a/content/bn/docs/concepts/policy/_index.md +++ b/content/bn/docs/concepts/policy/_index.md @@ -28,7 +28,7 @@ API সার্ভারে চলে কুবারনেটিস বেশ কয়েকটি অন্তর্নির্মিত ভর্তি নিয়ামক রয়েছে যা API সার্ভের মাধ্যমে কনফিগারযোগ্য `--enable-admission-plugin` ফ্লাগ। -ভর্তি নিয়ন্ত্রকদের বিবরণ, উপলব্ধ ভর্তি নিয়ন্ত্রকদের সম্পূর্ণ তালিকা সহ, একটি ডেডিকেটেড বিভাগে নথিভুক্ত (ডকুমেন্ট) করা হয়েছে। +ভর্তি নিয়ন্ত্রকদের বিবরণ, উপলব্ধ ভর্তি নিয়ন্ত্রকদের সম্পূর্ণ তালিকা সহ, একটি নিয়োজিত (ডেডিকেটেড) অংশে নথিভুক্ত ( ডকুমেন্ট) করা হয়েছে। * [ভর্তি নিয়ন্ত্রকরা](/docs/reference/access-authn-authz/admission-controllers/) @@ -38,12 +38,31 @@ API সার্ভারে চলে একটি 'ভ্যালিডেটি অ্যাডমিশনপলিসি' একটি API অনুরোধের ভিত্তিতে কাজ করে এবং ব্যবহারকারীদের অ-সম্মতিযুক্ত কনফিগারেশন সম্পর্কে ব্লক, নিরীক্ষণ (হিসাবনিকাশ) এবং সতর্ক করতে ব্যবহার করা যেতে পারে। -উদাহরণ সহ 'ভ্যালিডেটিংএডমিশনপলিসি' API সম্পর্কে বিশদ বিবরণ একটি ডেডিকেটেড বিভাগে নথিভুক্ত (ডকুমেন্ট) করা হয়েছে: +উদাহরণ সহ 'ভ্যালিডেটিংএডমিশনপলিসি' API সম্পর্কে বিশদ বিবরণ একটি নিয়োজিত (ডেডিকেটেড) অংশে নথিভুক্ত ( ডকুমেন্ট) করা হয়েছে: * [ভ্যালিডেটিং এডমিশন পলিসি](/docs/reference/access-authn-authz/validating-admission-policy/) +## ডাইনামিক ভর্তি নিয়ন্ত্রণ ব্যবহার করে নীতিমালা প্রয়োগ করুন +ডায়নামিক অ্যাডমিশন কন্ট্রোলার (বা অ্যাডমিশন ওয়েবহুক) এপিআই সার্ভারের বাইরে পৃথক অ্যাপ্লিকেশন হিসাবে চালিত হয় যা এপিআই অনুরোধগুলির বৈধতা বা মিউটেশন সম্পাদনের জন্য ওয়েবহুক অনুরোধগুলি গ্রহণ করতে নিবন্ধন করে। +ডায়নামিক অ্যাডমিশন কন্ট্রোলারগুলি এপিআই অনুরোধগুলিতে নীতি প্রয়োগ করতে এবং অন্যান্য নীতি-ভিত্তিক কর্মপ্রবাহকে ট্রিগার করতে ব্যবহার করা যেতে পারে। একটি ডায়নামিক ভর্তি কন্ট্রোলার অন্যান্য ক্লাস্টার সংস্থান এবং বহিরাগত ডেটা পুনরুদ্ধারের প্রয়োজন সহ জটিল চেকগুলি সম্পাদন করতে পারে। উদাহরণস্বরূপ, একটি ইমেজ যাচাইকরণ কন্টেইনার চিত্রের স্বাক্ষর এবং প্রত্যয়নগুলি যাচাই করতে ওসিআই (OCI) রেজিস্ট্রি থেকে ডেটা খুঁজতে পারে। +ডায়নামিক ভর্তি নিয়ন্ত্রণের বিশদ বিবরণ একটি নিয়োজিত (ডেডিকেটেড) অংশে নথিভুক্ত ( ডকুমেন্ট) করা হয়েছে: +* [ডাইনামিক ভর্তি নিয়ন্ত্রণ](/docs/reference/access-authn-authz/extensible-admission-controllers/) +### বাস্তবায়ন {#implementations-admission-control} +{{% thirdparty-content %}} + +নমনীয় নীতি ইঞ্জিন হিসাবে কাজ করে এমন ডায়নামিক অ্যাডমিশন কন্ট্রোলারগুলি কুবারনেটিস ইকোসিস্টেমে উন্নত(ডেভলাপ) করা হচ্ছে, যেমন: +- [কুবেওয়ার্ডেন](https://github.com/kubewarden) +- [কেওয়াইভার্নো (Kyverno)](https://kyverno.io) +- [ওপিএ গেটকিপার](https://github.com/open-policy-agent/gatekeeper) +- [পোলারিস](https://polaris.docs.fairwinds.com/admission-controller/) + +## কুবেলেট কনফিগারেশন ব্যবহার করে নীতি প্রয়োগ করুন + +কুবারনেটিস প্রতিটি ওর্য়াকার নোডে কুবেলেট কনফিগার করার অনুমতি দেয়। কিছু কুবেলেট কনফিগারেশন নীতি হিসাবে কাজ করে: +* [প্রক্রিয়া আইডি সীমা এবং সংরক্ষণ](/docs/concepts/policy/pid-limiting/) বরাদ্দযোগ্য পিআইডি সীমাবদ্ধ এবং সংরক্ষণ করতে ব্যবহৃত হয়। +* [নোড রিসোর্স ম্যানেজার](/docs/concepts/policy/node-resource-managers/) বিলম্ব-সমালোচনামূলক এবং উচ্চ-থ্রুপুট ওয়ার্কলোডের জন্য গণনা, মেমরি এবং ডিভাইস সংস্থানগুলি পরিচালনা করতে পারে। From 0b2060b194bbee0fc5d316fa499d06e47539c375 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 26 Feb 2024 01:10:20 +0600 Subject: [PATCH 0149/1086] Localize content/en/docs/concepts/workloads/pods/_index.md --- content/bn/docs/concepts/workloads/pods/_index.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/bn/docs/concepts/workloads/pods/_index.md diff --git a/content/bn/docs/concepts/workloads/pods/_index.md b/content/bn/docs/concepts/workloads/pods/_index.md new file mode 100644 index 0000000000..e69de29bb2 From 370a34122ab941b06eedb0df35da7a549699c3e3 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 26 Feb 2024 02:06:24 +0600 Subject: [PATCH 0150/1086] fix error, localize ,_index.md --- content/bn/docs/concepts/policy/_index.md | 26 +++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/content/bn/docs/concepts/policy/_index.md b/content/bn/docs/concepts/policy/_index.md index 858aded60d..5ddeb190d9 100644 --- a/content/bn/docs/concepts/policy/_index.md +++ b/content/bn/docs/concepts/policy/_index.md @@ -17,14 +17,14 @@ description: > কিছু API অবজেক্ট নীতি হিসাবে কাজ করে। এখানে কিছু উদাহরণ দেওয়া হল: * [নেটওয়ার্ক নীতি](/docs/concepts/services-networking/network-policies/) একটি কাজের চাপের জন্য প্রবেশ এবং প্রস্থানে ট্র্যাফিক সীমাবদ্ধ করতে ব্যবহার করা যেতে পারে। * [লিমিটরেঞ্জস](/docs/concepts/policy/limit-range/) বিভিন্ন বস্তুর ধরণের জুড়ে রিসোর্স বরাদ্দের সীমাবদ্ধতা পরিচালনা করে। -* [রিসোর্সকোটাস](/docs/concepts/policy/resource-quotas/) একটি জন্য সম্পদ খরচ সীমাবদ্ধ করুন {{< glossary_tooltip text="namespace" term_id="namespace" >}} +* [রিসোর্স কোটা](/bn/docs/concepts/policy/resource-quotas/) একটি জন্য সম্পদ খরচ সীমাবদ্ধ করুন {{< glossary_tooltip text="namespace" term_id="namespace" >}} ## ভর্তি নিয়ন্ত্রক ব্যবহার করে নীতিমালা প্রয়োগ করুন একটি {{< glossary_tooltip text="admission controller" term_id="admission-controller" >}} API সার্ভারে চলে এবং API অনুরোধগুলিকে যাচাই বা পরিবর্তন করতে পারে। কিছু ভর্তি নিয়ন্ত্রক নীতি প্রয়োগ করার জন্য কাজ করে। -উদাহরণস্বরূপ, [অলওয়েজইমেজপুল](/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages) অ্যাডমিশন কন্ট্রোলার ইমেজ পুল পলিসি 'অলওয়েজ' এ সেট করতে একটি নতুন পড সংশোধন করে। +উদাহরণস্বরূপ, [অলওয়েজইমেজপুল](/bn/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages) অ্যাডমিশন কন্ট্রোলার ইমেজ পুল পলিসি `অলওয়েজ` এ সেট করতে একটি নতুন পড সংশোধন করে। কুবারনেটিস বেশ কয়েকটি অন্তর্নির্মিত ভর্তি নিয়ামক রয়েছে যা API সার্ভের মাধ্যমে কনফিগারযোগ্য `--enable-admission-plugin` ফ্লাগ। @@ -34,12 +34,12 @@ API সার্ভারে চলে ## ভ্যালিডেটিংএডমিশনপলিসি ব্যবহার করে নীতিগুলি প্রয়োগ করুন -ভর্তি নীতিগুলি যাচাই করা কমন এক্সপ্রেশন ল্যাঙ্গুয়েজ (সিইএল) ব্যবহার করে API সার্ভারে কনফিগারযোগ্য বৈধতা চেকগুলি কার্যকর করার অনুমতি দেয়। উদাহরণস্বরূপ, 'সর্বশেষ' চিত্র ট্যাগের ব্যবহার নিষিদ্ধ করতে একটি 'ভ্যালিডেটিং অ্যাডমিশন পলিসি' ব্যবহার করা যেতে পারে। +ভর্তি নীতিগুলি যাচাই করা কমন এক্সপ্রেশন ল্যাঙ্গুয়েজ (সিইএল) ব্যবহার করে API সার্ভারে কনফিগারযোগ্য বৈধতা চেকগুলি কার্যকর করার অনুমতি দেয়। উদাহরণস্বরূপ, `সর্বশেষ` চিত্র ট্যাগের ব্যবহার নিষিদ্ধ করতে একটি `ভ্যালিডেটিংঅ্যাডমিশনপলিসি` ব্যবহার করা যেতে পারে। -একটি 'ভ্যালিডেটি অ্যাডমিশনপলিসি' একটি API অনুরোধের ভিত্তিতে কাজ করে এবং ব্যবহারকারীদের অ-সম্মতিযুক্ত কনফিগারেশন সম্পর্কে ব্লক, নিরীক্ষণ (হিসাবনিকাশ) এবং সতর্ক করতে ব্যবহার করা যেতে পারে। +একটি `ভ্যালিডেটিঅ্যাডমিশনপলিসি` একটি API অনুরোধের ভিত্তিতে কাজ করে এবং ব্যবহারকারীদের অ-সম্মতিযুক্ত কনফিগারেশন সম্পর্কে ব্লক, নিরীক্ষণ (হিসাবনিকাশ) এবং সতর্ক করতে ব্যবহার করা যেতে পারে। -উদাহরণ সহ 'ভ্যালিডেটিংএডমিশনপলিসি' API সম্পর্কে বিশদ বিবরণ একটি নিয়োজিত (ডেডিকেটেড) অংশে নথিভুক্ত ( ডকুমেন্ট) করা হয়েছে: -* [ভ্যালিডেটিং এডমিশন পলিসি](/docs/reference/access-authn-authz/validating-admission-policy/) +উদাহরণ সহ `ভ্যালিডেটিংএডমিশনপলিসি` API সম্পর্কে বিশদ বিবরণ একটি নিয়োজিত (ডেডিকেটেড) অংশে নথিভুক্ত ( ডকুমেন্ট) করা হয়েছে: +* [ভ্যালিডেটিং এডমিশন পলিসি](/bn/docs/reference/access-authn-authz/validating-admission-policy/) ## ডাইনামিক ভর্তি নিয়ন্ত্রণ ব্যবহার করে নীতিমালা প্রয়োগ করুন @@ -49,20 +49,20 @@ API সার্ভারে চলে ডায়নামিক অ্যাডমিশন কন্ট্রোলারগুলি এপিআই অনুরোধগুলিতে নীতি প্রয়োগ করতে এবং অন্যান্য নীতি-ভিত্তিক কর্মপ্রবাহকে ট্রিগার করতে ব্যবহার করা যেতে পারে। একটি ডায়নামিক ভর্তি কন্ট্রোলার অন্যান্য ক্লাস্টার সংস্থান এবং বহিরাগত ডেটা পুনরুদ্ধারের প্রয়োজন সহ জটিল চেকগুলি সম্পাদন করতে পারে। উদাহরণস্বরূপ, একটি ইমেজ যাচাইকরণ কন্টেইনার চিত্রের স্বাক্ষর এবং প্রত্যয়নগুলি যাচাই করতে ওসিআই (OCI) রেজিস্ট্রি থেকে ডেটা খুঁজতে পারে। ডায়নামিক ভর্তি নিয়ন্ত্রণের বিশদ বিবরণ একটি নিয়োজিত (ডেডিকেটেড) অংশে নথিভুক্ত ( ডকুমেন্ট) করা হয়েছে: -* [ডাইনামিক ভর্তি নিয়ন্ত্রণ](/docs/reference/access-authn-authz/extensible-admission-controllers/) +* [ডাইনামিক ভর্তি নিয়ন্ত্রণ](/bn/docs/reference/access-authn-authz/extensible-admission-controllers/) ### বাস্তবায়ন {#implementations-admission-control} {{% thirdparty-content %}} নমনীয় নীতি ইঞ্জিন হিসাবে কাজ করে এমন ডায়নামিক অ্যাডমিশন কন্ট্রোলারগুলি কুবারনেটিস ইকোসিস্টেমে উন্নত(ডেভলাপ) করা হচ্ছে, যেমন: -- [কুবেওয়ার্ডেন](https://github.com/kubewarden) -- [কেওয়াইভার্নো (Kyverno)](https://kyverno.io) -- [ওপিএ গেটকিপার](https://github.com/open-policy-agent/gatekeeper) -- [পোলারিস](https://polaris.docs.fairwinds.com/admission-controller/) +- [Kubewarden](https://github.com/kubewarden) +- [Kyverno](https://kyverno.io) +- [OPA Gatekeeper](https://github.com/open-policy-agent/gatekeeper) +- [Polaris](https://polaris.docs.fairwinds.com/admission-controller/) ## কুবেলেট কনফিগারেশন ব্যবহার করে নীতি প্রয়োগ করুন কুবারনেটিস প্রতিটি ওর্য়াকার নোডে কুবেলেট কনফিগার করার অনুমতি দেয়। কিছু কুবেলেট কনফিগারেশন নীতি হিসাবে কাজ করে: -* [প্রক্রিয়া আইডি সীমা এবং সংরক্ষণ](/docs/concepts/policy/pid-limiting/) বরাদ্দযোগ্য পিআইডি সীমাবদ্ধ এবং সংরক্ষণ করতে ব্যবহৃত হয়। -* [নোড রিসোর্স ম্যানেজার](/docs/concepts/policy/node-resource-managers/) বিলম্ব-সমালোচনামূলক এবং উচ্চ-থ্রুপুট ওয়ার্কলোডের জন্য গণনা, মেমরি এবং ডিভাইস সংস্থানগুলি পরিচালনা করতে পারে। +* [প্রক্রিয়া আইডি সীমা এবং সংরক্ষণ](/bn/docs/concepts/policy/pid-limiting/) বরাদ্দযোগ্য পিআইডি সীমাবদ্ধ এবং সংরক্ষণ করতে ব্যবহৃত হয়। +* [নোড রিসোর্স ম্যানেজার](/bn/docs/concepts/policy/node-resource-managers/) বিলম্ব-সমালোচনামূলক এবং উচ্চ-থ্রুপুট ওয়ার্কলোডের জন্য গণনা, মেমরি এবং ডিভাইস সংস্থানগুলি পরিচালনা করতে পারে। From 1a9c14953121cf4550dc42713cd87773533bb207 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 26 Feb 2024 02:10:58 +0600 Subject: [PATCH 0151/1086] Update _index.md --- content/bn/docs/concepts/policy/_index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/bn/docs/concepts/policy/_index.md b/content/bn/docs/concepts/policy/_index.md index 5ddeb190d9..88f1049c88 100644 --- a/content/bn/docs/concepts/policy/_index.md +++ b/content/bn/docs/concepts/policy/_index.md @@ -15,8 +15,8 @@ description: > ## এপিআই (API) অবজেক্ট ব্যবহার করে পলিসি প্রয়োগ করুন কিছু API অবজেক্ট নীতি হিসাবে কাজ করে। এখানে কিছু উদাহরণ দেওয়া হল: -* [নেটওয়ার্ক নীতি](/docs/concepts/services-networking/network-policies/) একটি কাজের চাপের জন্য প্রবেশ এবং প্রস্থানে ট্র্যাফিক সীমাবদ্ধ করতে ব্যবহার করা যেতে পারে। -* [লিমিটরেঞ্জস](/docs/concepts/policy/limit-range/) বিভিন্ন বস্তুর ধরণের জুড়ে রিসোর্স বরাদ্দের সীমাবদ্ধতা পরিচালনা করে। +* [নেটওয়ার্ক নীতি](/bn/docs/concepts/services-networking/network-policies/) একটি কাজের চাপের জন্য প্রবেশ এবং প্রস্থানে ট্র্যাফিক সীমাবদ্ধ করতে ব্যবহার করা যেতে পারে। +* [লিমিট রেঞ্জ](/bn/docs/concepts/policy/limit-range/) বিভিন্ন বস্তুর ধরণের জুড়ে রিসোর্স বরাদ্দের সীমাবদ্ধতা পরিচালনা করে। * [রিসোর্স কোটা](/bn/docs/concepts/policy/resource-quotas/) একটি জন্য সম্পদ খরচ সীমাবদ্ধ করুন {{< glossary_tooltip text="namespace" term_id="namespace" >}} ## ভর্তি নিয়ন্ত্রক ব্যবহার করে নীতিমালা প্রয়োগ করুন @@ -30,7 +30,7 @@ API সার্ভারে চলে ভর্তি নিয়ন্ত্রকদের বিবরণ, উপলব্ধ ভর্তি নিয়ন্ত্রকদের সম্পূর্ণ তালিকা সহ, একটি নিয়োজিত (ডেডিকেটেড) অংশে নথিভুক্ত ( ডকুমেন্ট) করা হয়েছে। -* [ভর্তি নিয়ন্ত্রকরা](/docs/reference/access-authn-authz/admission-controllers/) +* [ভর্তি নিয়ন্ত্রকরা](/bn/docs/reference/access-authn-authz/admission-controllers/) ## ভ্যালিডেটিংএডমিশনপলিসি ব্যবহার করে নীতিগুলি প্রয়োগ করুন From f3be5bb217b1293c4ada9865aa12007615ce141a Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 26 Feb 2024 14:26:03 +0600 Subject: [PATCH 0152/1086] Update Localize _index.md and solved errors --- content/bn/docs/concepts/policy/_index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/content/bn/docs/concepts/policy/_index.md b/content/bn/docs/concepts/policy/_index.md index 88f1049c88..c769903b11 100644 --- a/content/bn/docs/concepts/policy/_index.md +++ b/content/bn/docs/concepts/policy/_index.md @@ -17,18 +17,18 @@ description: > কিছু API অবজেক্ট নীতি হিসাবে কাজ করে। এখানে কিছু উদাহরণ দেওয়া হল: * [নেটওয়ার্ক নীতি](/bn/docs/concepts/services-networking/network-policies/) একটি কাজের চাপের জন্য প্রবেশ এবং প্রস্থানে ট্র্যাফিক সীমাবদ্ধ করতে ব্যবহার করা যেতে পারে। * [লিমিট রেঞ্জ](/bn/docs/concepts/policy/limit-range/) বিভিন্ন বস্তুর ধরণের জুড়ে রিসোর্স বরাদ্দের সীমাবদ্ধতা পরিচালনা করে। -* [রিসোর্স কোটা](/bn/docs/concepts/policy/resource-quotas/) একটি জন্য সম্পদ খরচ সীমাবদ্ধ করুন {{< glossary_tooltip text="namespace" term_id="namespace" >}} +* [রিসোর্স কোটা](/bn/docs/concepts/policy/resource-quotas/) একটি জন্য সম্পদ খরচ সীমাবদ্ধ করুন {{< glossary_tooltip text="নেমস্পেস" term_id="namespace" >}} ## ভর্তি নিয়ন্ত্রক ব্যবহার করে নীতিমালা প্রয়োগ করুন -একটি {{< glossary_tooltip text="admission controller" term_id="admission-controller" >}} +একটি {{< glossary_tooltip text="ভর্তি নিয়ন্ত্রক" term_id="admission-controller" >}} API সার্ভারে চলে এবং API অনুরোধগুলিকে যাচাই বা পরিবর্তন করতে পারে। কিছু ভর্তি নিয়ন্ত্রক নীতি প্রয়োগ করার জন্য কাজ করে। উদাহরণস্বরূপ, [অলওয়েজইমেজপুল](/bn/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages) অ্যাডমিশন কন্ট্রোলার ইমেজ পুল পলিসি `অলওয়েজ` এ সেট করতে একটি নতুন পড সংশোধন করে। -কুবারনেটিস বেশ কয়েকটি অন্তর্নির্মিত ভর্তি নিয়ামক রয়েছে যা API সার্ভের মাধ্যমে কনফিগারযোগ্য `--enable-admission-plugin` ফ্লাগ। +কুবারনেটিস বেশ কয়েকটি অন্তর্নির্মিত ভর্তি নিয়ামক রয়েছে যা API সার্ভারের মাধ্যমে কনফিগারযোগ্য `--enable-admission-plugin` ফ্লাগ। -ভর্তি নিয়ন্ত্রকদের বিবরণ, উপলব্ধ ভর্তি নিয়ন্ত্রকদের সম্পূর্ণ তালিকা সহ, একটি নিয়োজিত (ডেডিকেটেড) অংশে নথিভুক্ত ( ডকুমেন্ট) করা হয়েছে। +ভর্তি নিয়ন্ত্রকদের বিবরণ, উপলব্ধ ভর্তি নিয়ন্ত্রকদের সম্পূর্ণ তালিকা সহ, একটি ডেডিকেটেড অংশে নথিভুক্ত ( ডকুমেন্ট) করা হয়েছে। * [ভর্তি নিয়ন্ত্রকরা](/bn/docs/reference/access-authn-authz/admission-controllers/) @@ -38,7 +38,7 @@ API সার্ভারে চলে একটি `ভ্যালিডেটিঅ্যাডমিশনপলিসি` একটি API অনুরোধের ভিত্তিতে কাজ করে এবং ব্যবহারকারীদের অ-সম্মতিযুক্ত কনফিগারেশন সম্পর্কে ব্লক, নিরীক্ষণ (হিসাবনিকাশ) এবং সতর্ক করতে ব্যবহার করা যেতে পারে। -উদাহরণ সহ `ভ্যালিডেটিংএডমিশনপলিসি` API সম্পর্কে বিশদ বিবরণ একটি নিয়োজিত (ডেডিকেটেড) অংশে নথিভুক্ত ( ডকুমেন্ট) করা হয়েছে: +উদাহরণ সহ `ভ্যালিডেটিংএডমিশনপলিসি` API সম্পর্কে বিশদ বিবরণ একটি ডেডিকেটেড অংশে নথিভুক্ত (ডকুমেন্ট) করা হয়েছে: * [ভ্যালিডেটিং এডমিশন পলিসি](/bn/docs/reference/access-authn-authz/validating-admission-policy/) @@ -61,8 +61,8 @@ API সার্ভারে চলে - [OPA Gatekeeper](https://github.com/open-policy-agent/gatekeeper) - [Polaris](https://polaris.docs.fairwinds.com/admission-controller/) -## কুবেলেট কনফিগারেশন ব্যবহার করে নীতি প্রয়োগ করুন +## Kubelet কনফিগারেশন ব্যবহার করে নীতি প্রয়োগ করুন -কুবারনেটিস প্রতিটি ওর্য়াকার নোডে কুবেলেট কনফিগার করার অনুমতি দেয়। কিছু কুবেলেট কনফিগারেশন নীতি হিসাবে কাজ করে: +কুবারনেটিস প্রতিটি ওর্য়াকার নোডে Kubelet কনফিগার করার অনুমতি দেয়। কিছু Kubelet কনফিগারেশন নীতি হিসাবে কাজ করে: * [প্রক্রিয়া আইডি সীমা এবং সংরক্ষণ](/bn/docs/concepts/policy/pid-limiting/) বরাদ্দযোগ্য পিআইডি সীমাবদ্ধ এবং সংরক্ষণ করতে ব্যবহৃত হয়। * [নোড রিসোর্স ম্যানেজার](/bn/docs/concepts/policy/node-resource-managers/) বিলম্ব-সমালোচনামূলক এবং উচ্চ-থ্রুপুট ওয়ার্কলোডের জন্য গণনা, মেমরি এবং ডিভাইস সংস্থানগুলি পরিচালনা করতে পারে। From 520443f613a2fae8ab866ed053c662ec1c416a0d Mon Sep 17 00:00:00 2001 From: Pronay <78101731+itsPronay@users.noreply.github.com> Date: Tue, 27 Feb 2024 11:11:59 +0600 Subject: [PATCH 0153/1086] localize patch-releases.md --- content/bn/releases/patch-releases.md | 92 +++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 content/bn/releases/patch-releases.md diff --git a/content/bn/releases/patch-releases.md b/content/bn/releases/patch-releases.md new file mode 100644 index 0000000000..757e48106b --- /dev/null +++ b/content/bn/releases/patch-releases.md @@ -0,0 +1,92 @@ +--- +title: প্যাচ রিলিজ +type: docs +--- + +কুবারনেটিস প্যাচ রিলিজের সময়সূচি এবং দলের যোগাযোগ তথ্য। + +কুবারনেটিস রিলিজ সাইকেলের সাধারণ তথ্যের জন্য, [রিলিজ প্রক্রিয়া বর্ণনা][release process description] দেখুন। + +## ক্যাডেন্স + +আমাদের সাধারণ প্যাচ রিলিজ ক্যাডেন্স মাসিক। এটা +সাধারণত একটু দ্রুত (1 থেকে 2 সপ্তাহ) হলেও, যখন একটি 1.X মাইনর রিলিজের পরে প্যাচ রিলিজের প্রথমটি হয়। গুরুত্বপূর্ণ বাগ সংশোধন আরও +সাধারণ সংলগ্নতার বাইরে একটি আগামী রিলিজ সৃষ্টি করতে পারে। আমরা এছাড়াও লক্ষ্য করি যে প্রধান ছুটির সময়ে রিলিজ করা হবে না। + +## যোগাযোগ + +প্যাচ রিলিজ দলের সম্পূর্ণ যোগাযোগের বিস্তারিত তথ্যের জন্য [রিলিজ ম্যানেজার পৃষ্ঠা][release-managers] দেখুন। + +দয়া করে আমাদেরকে একটি কার্য দিন দিন - আমরা সময় অঞ্চল অনুযায়ী থাকতে পারি! + +রিলিজের মধ্যে দলটি প্রতি সপ্তাহের ভিতরে আসা চেরি পিক অনুরোধগুলি দেখছে। +দলটি চেরি পিক অনুরোধকারীদের সাথে GitHub PR, SIG চ্যানেল (স্ল্যাকে) +এবং স্ল্যাকের [email](mailto:release-managers-private@kubernetes.io) +মাধ্যমে যোগাযোগ করবে, এবং যদি পিআরে কোনো প্রশ্ন থাকে। + +## চেরি পিক +[চেরি পিক প্রসেস][cherry-picks] অনুসরণ করুন। + +চেরি পিক গুলির জন্য গিটহাবে পার্শ্ববর্তী লেবেলসহ (উদাহরণস্বরূপ, +অনুমোদিত, lgtm, রিলিজ-নোট) এবং চেরি পিকের শেষকার পূর্বে CI টেস্ট পাস করতে হবে। +এটা সাধারণত লক্ষ্য করা হয় লক্ষ্য রিলিজের দুই দিন পূর্বে, তবে এটা আরও হতে পারে। +পিআরের প্রস্তুতি যে পরিপ্রেক্ষিতে তা অনেক ভাল, কারণ আমাদের যখন চেরি পিক আপনার +চেরি পিক মানচিত্রে মারার পূর্বে CI সিগনাল পেতে সময় লাগে। + +মারা যাওয়া চেরি পিক পিআর যে মার্জ মানদণ্ডগুলি ভুলে গিয়েছে তা অনুসরণ করা হবে +এবং পরবর্তী প্যাচ রিলিজের জন্য ট্র্যাক করা হবে। + +## সমর্থন পরিমাণ + +[বার্ষিক সমর্থন কেপ][yearly-support] অনুসারে, কুবার্নিটিস কমিউনিটি +প্রায় চৌদ্দ (১৪) মাসের জন্য সক্রিয় প্যাচ রিলিজ সিরিজের সমর্থন করবে। + +এই সময়সীমার প্রথম বারো মাসগুলি মান হিসাবে গণ্য হবে। + +বারো মাসের শেষে, নিম্নলিখিত ঘটনা ঘটবে: + +- [রিলিজ ম্যানেজার][release-managers] একটি রিলিজ কাটবে +- প্যাচ রিলিজ সিরিজটি মেইন্টেনেন্স মোডে প্রবেশ করবে + +দুই মাসের মেইন্টেনেন্স মোডে অবস্থানের সময়সীমার দায়িত্ব মোডে রিলিজ +ম্যানেজাররা অতিরিক্ত মেইন্টেনেন্স রিলিজ কাটতে পারেন যাতে নিম্নলিখিত সমস্যাগুলি সমাধান করা যায়: + +- CVEs (সিকিউরিটি সংজ্ঞায়িত পরিষদের পরামর্শে) +- ডিপেন্ডেন্সি সমস্যাগুলি (বেস ইমেজ আপডেট সহ) +- গুরুত্বপূর্ণ কোর কম্পোনেন্ট সমস্যাগুলি + +দুই মাসের মেইন্টেনেন্স মোড সময়সীমার শেষে, প্যাচ রিলিজ সিরিজটি ইওএল +(শেষ জীবনের শেষ) হিসাবে গণ্য হবে এবং সম্পর্কিত ব্রাঞ্চে চেরি পিক + +## আগামী মাসিক রিলিজ + +বাগ ফিক্সের গুরুত্বের সাথে সময়সীমা পরিবর্তন করতে পারে, তবে আমরা সহজে পরিকল্পনা করতে +নিম্নলিখিত মাসিক রিলিজ পয়েন্টগুলির লক্ষ্য করব। অপরিকল্পিত, গুরুত্বপূর্ণ রিলিজগুলি এদের মধ্যেও ঘটতে পারে। + +| মাসিক প্যাচ রিলিজ | চেরি পিক শেষ সময় | লক্ষ্য তারিখ | +| --------------------- | -------------------- | ----------- | +| মার্চ 2024 | 2024-03-08 | 2024-03-13 | +| এপ্রিল 2024 | 2024-04-12 | 2024-04-17 | +| মে 2024 | 2024-05-10 | 2024-05-15 | + +## সক্রিয় শাখাগুলির জন্য বিস্তারিত রিলিজ ইতিহাস + +{{< release-branches >}} + +## অসক্রিয় শাখা ইতিহাস + +এই রিলিজগুলি আর সমর্থিত নয়। + +{{< eol-releases >}} + +[cherry-picks]: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-release/cherry-picks.md +[release-managers]: /releases/release-managers +[release process description]: /releases/release +[yearly-support]: https://git.k8s.io/enhancements/keps/sig-release/1498-kubernetes-yearly-support-period/README.md + + + + + + + From 7e10f5a4efe824dae2cf543e54214f69991e5bc0 Mon Sep 17 00:00:00 2001 From: Pronay <78101731+itsPronay@users.noreply.github.com> Date: Tue, 27 Feb 2024 11:31:22 +0600 Subject: [PATCH 0154/1086] Update patch-releases.md --- content/bn/releases/patch-releases.md | 46 +++++++++++++++------------ 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/content/bn/releases/patch-releases.md b/content/bn/releases/patch-releases.md index 757e48106b..7e5a01eae4 100644 --- a/content/bn/releases/patch-releases.md +++ b/content/bn/releases/patch-releases.md @@ -5,13 +5,16 @@ type: docs কুবারনেটিস প্যাচ রিলিজের সময়সূচি এবং দলের যোগাযোগ তথ্য। -কুবারনেটিস রিলিজ সাইকেলের সাধারণ তথ্যের জন্য, [রিলিজ প্রক্রিয়া বর্ণনা][release process description] দেখুন। +কুবারনেটিস রিলিজ সাইকেলের সাধারণ তথ্যের জন্য, +[রিলিজ প্রক্রিয়া বর্ণনা][release process description] দেখুন। ## ক্যাডেন্স আমাদের সাধারণ প্যাচ রিলিজ ক্যাডেন্স মাসিক। এটা -সাধারণত একটু দ্রুত (1 থেকে 2 সপ্তাহ) হলেও, যখন একটি 1.X মাইনর রিলিজের পরে প্যাচ রিলিজের প্রথমটি হয়। গুরুত্বপূর্ণ বাগ সংশোধন আরও -সাধারণ সংলগ্নতার বাইরে একটি আগামী রিলিজ সৃষ্টি করতে পারে। আমরা এছাড়াও লক্ষ্য করি যে প্রধান ছুটির সময়ে রিলিজ করা হবে না। +সাধারণত একটু দ্রুত (1 থেকে 2 সপ্তাহ) হলেও, যখন একটি 1.X মাইনর +রিলিজের পরে প্যাচ রিলিজের প্রথমটি হয়। গুরুত্বপূর্ণ বাগ সংশোধন আরও +সাধারণ সংলগ্নতার বাইরে একটি আগামী রিলিজ সৃষ্টি করতে পারে। আমরা +এছাড়াও লক্ষ্য করি যে প্রধান ছুটির সময়ে রিলিজ করা হবে না। ## যোগাযোগ @@ -22,16 +25,19 @@ type: docs রিলিজের মধ্যে দলটি প্রতি সপ্তাহের ভিতরে আসা চেরি পিক অনুরোধগুলি দেখছে। দলটি চেরি পিক অনুরোধকারীদের সাথে GitHub PR, SIG চ্যানেল (স্ল্যাকে) এবং স্ল্যাকের [email](mailto:release-managers-private@kubernetes.io) -মাধ্যমে যোগাযোগ করবে, এবং যদি পিআরে কোনো প্রশ্ন থাকে। +মাধ্যমে যোগাযোগ করবে, এবং যদি পিআরে কোনো +প্রশ্ন থাকে। ## চেরি পিক + [চেরি পিক প্রসেস][cherry-picks] অনুসরণ করুন। চেরি পিক গুলির জন্য গিটহাবে পার্শ্ববর্তী লেবেলসহ (উদাহরণস্বরূপ, অনুমোদিত, lgtm, রিলিজ-নোট) এবং চেরি পিকের শেষকার পূর্বে CI টেস্ট পাস করতে হবে। এটা সাধারণত লক্ষ্য করা হয় লক্ষ্য রিলিজের দুই দিন পূর্বে, তবে এটা আরও হতে পারে। -পিআরের প্রস্তুতি যে পরিপ্রেক্ষিতে তা অনেক ভাল, কারণ আমাদের যখন চেরি পিক আপনার -চেরি পিক মানচিত্রে মারার পূর্বে CI সিগনাল পেতে সময় লাগে। +পিআরের প্রস্তুতি যে পরিপ্রেক্ষিতে তা অনেক ভাল, কারণ আমাদের যখন +চেরি পিক আপনার চেরি পিক মানচিত্রে মারার পূর্বে CI সিগনাল পেতে +সময় লাগে। মারা যাওয়া চেরি পিক পিআর যে মার্জ মানদণ্ডগুলি ভুলে গিয়েছে তা অনুসরণ করা হবে এবং পরবর্তী প্যাচ রিলিজের জন্য ট্র্যাক করা হবে। @@ -39,9 +45,11 @@ type: docs ## সমর্থন পরিমাণ [বার্ষিক সমর্থন কেপ][yearly-support] অনুসারে, কুবার্নিটিস কমিউনিটি -প্রায় চৌদ্দ (১৪) মাসের জন্য সক্রিয় প্যাচ রিলিজ সিরিজের সমর্থন করবে। +প্রায় চৌদ্দ (১৪) মাসের জন্য সক্রিয় প্যাচ রিলিজ সিরিজের +সমর্থন করবে। -এই সময়সীমার প্রথম বারো মাসগুলি মান হিসাবে গণ্য হবে। +এই সময়সীমার প্রথম বারো মাসগুলি মান হিসাবে +গণ্য হবে। বারো মাসের শেষে, নিম্নলিখিত ঘটনা ঘটবে: @@ -56,18 +64,23 @@ type: docs - গুরুত্বপূর্ণ কোর কম্পোনেন্ট সমস্যাগুলি দুই মাসের মেইন্টেনেন্স মোড সময়সীমার শেষে, প্যাচ রিলিজ সিরিজটি ইওএল -(শেষ জীবনের শেষ) হিসাবে গণ্য হবে এবং সম্পর্কিত ব্রাঞ্চে চেরি পিক +(শেষ জীবনের শেষ) হিসাবে গণ্য হবে এবং সম্পর্কিত ব্রাঞ্চে চেরি পিক +শীঘ্রই পরে বন্ধ করা হবে + +মনে রাখবেন যে, রক্ষণাবেক্ষণ মোড এবং EOL লক্ষ্যের জন্য মাসের 28 তারিখ বেছে নেওয়া হয়েছিল +সরলতার জন্য (প্রতি মাসে এটি আছে)। ## আগামী মাসিক রিলিজ বাগ ফিক্সের গুরুত্বের সাথে সময়সীমা পরিবর্তন করতে পারে, তবে আমরা সহজে পরিকল্পনা করতে -নিম্নলিখিত মাসিক রিলিজ পয়েন্টগুলির লক্ষ্য করব। অপরিকল্পিত, গুরুত্বপূর্ণ রিলিজগুলি এদের মধ্যেও ঘটতে পারে। +নিম্নলিখিত মাসিক রিলিজ পয়েন্টগুলির লক্ষ্য করব। অপরিকল্পিত, +গুরুত্বপূর্ণ রিলিজগুলি এদের মধ্যেও ঘটতে পারে। | মাসিক প্যাচ রিলিজ | চেরি পিক শেষ সময় | লক্ষ্য তারিখ | | --------------------- | -------------------- | ----------- | -| মার্চ 2024 | 2024-03-08 | 2024-03-13 | -| এপ্রিল 2024 | 2024-04-12 | 2024-04-17 | -| মে 2024 | 2024-05-10 | 2024-05-15 | +| মার্চ 2024 | 2024-03-08 | 2024-03-13 | +| এপ্রিল 2024 | 2024-04-12 | 2024-04-17 | +| মে 2024 | 2024-05-10 | 2024-05-15 | ## সক্রিয় শাখাগুলির জন্য বিস্তারিত রিলিজ ইতিহাস @@ -83,10 +96,3 @@ type: docs [release-managers]: /releases/release-managers [release process description]: /releases/release [yearly-support]: https://git.k8s.io/enhancements/keps/sig-release/1498-kubernetes-yearly-support-period/README.md - - - - - - - From 5365230b07045eb7d1c853d95bb150097de0e77d Mon Sep 17 00:00:00 2001 From: Pronay <78101731+itsPronay@users.noreply.github.com> Date: Tue, 27 Feb 2024 12:07:36 +0600 Subject: [PATCH 0155/1086] Update patch-releases.md --- content/bn/releases/patch-releases.md | 36 +++++++++++++-------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/content/bn/releases/patch-releases.md b/content/bn/releases/patch-releases.md index 7e5a01eae4..c49b703722 100644 --- a/content/bn/releases/patch-releases.md +++ b/content/bn/releases/patch-releases.md @@ -8,9 +8,9 @@ type: docs কুবারনেটিস রিলিজ সাইকেলের সাধারণ তথ্যের জন্য, [রিলিজ প্রক্রিয়া বর্ণনা][release process description] দেখুন। -## ক্যাডেন্স +## ক্যাডেন্স(Cadence) -আমাদের সাধারণ প্যাচ রিলিজ ক্যাডেন্স মাসিক। এটা +আমাদের সাধারণ প্যাচ রিলিজ ক্যাডেন্সের মাসিক। এটা সাধারণত একটু দ্রুত (1 থেকে 2 সপ্তাহ) হলেও, যখন একটি 1.X মাইনর রিলিজের পরে প্যাচ রিলিজের প্রথমটি হয়। গুরুত্বপূর্ণ বাগ সংশোধন আরও সাধারণ সংলগ্নতার বাইরে একটি আগামী রিলিজ সৃষ্টি করতে পারে। আমরা @@ -20,7 +20,7 @@ type: docs প্যাচ রিলিজ দলের সম্পূর্ণ যোগাযোগের বিস্তারিত তথ্যের জন্য [রিলিজ ম্যানেজার পৃষ্ঠা][release-managers] দেখুন। -দয়া করে আমাদেরকে একটি কার্য দিন দিন - আমরা সময় অঞ্চল অনুযায়ী থাকতে পারি! +দয়া করে আমাদেরকে একটি কার্য দিন দিন - আমরা ভিন্ন টাইমজোন অনুযায়ী থাকতে পারি! রিলিজের মধ্যে দলটি প্রতি সপ্তাহের ভিতরে আসা চেরি পিক অনুরোধগুলি দেখছে। দলটি চেরি পিক অনুরোধকারীদের সাথে GitHub PR, SIG চ্যানেল (স্ল্যাকে) @@ -32,23 +32,23 @@ type: docs [চেরি পিক প্রসেস][cherry-picks] অনুসরণ করুন। -চেরি পিক গুলির জন্য গিটহাবে পার্শ্ববর্তী লেবেলসহ (উদাহরণস্বরূপ, -অনুমোদিত, lgtm, রিলিজ-নোট) এবং চেরি পিকের শেষকার পূর্বে CI টেস্ট পাস করতে হবে। +চেরি পিক গুলির জন্য গিটহাবে পার্শ্ববর্তী লেবেলসহ (উদাহরণস্বরূপ +`approved`, `lgtm`, `release-note`) এবং চেরি পিকের শেষকার পূর্বে CI টেস্ট পাস করতে হবে। এটা সাধারণত লক্ষ্য করা হয় লক্ষ্য রিলিজের দুই দিন পূর্বে, তবে এটা আরও হতে পারে। পিআরের প্রস্তুতি যে পরিপ্রেক্ষিতে তা অনেক ভাল, কারণ আমাদের যখন চেরি পিক আপনার চেরি পিক মানচিত্রে মারার পূর্বে CI সিগনাল পেতে সময় লাগে। -মারা যাওয়া চেরি পিক পিআর যে মার্জ মানদণ্ডগুলি ভুলে গিয়েছে তা অনুসরণ করা হবে -এবং পরবর্তী প্যাচ রিলিজের জন্য ট্র্যাক করা হবে। +চেরি পিক PR গুলো, যেগুলো মার্জ মানদন্ড মিস করবে, সেগুলো অনুসরণ এবং ট্রাক করা হবে +পরবর্তী প্যাঁচ রিলিজ এর জন্য । -## সমর্থন পরিমাণ +## সাপোর্ট পিরিয়ড -[বার্ষিক সমর্থন কেপ][yearly-support] অনুসারে, কুবার্নিটিস কমিউনিটি +[বার্ষিক সাপোর্ট KEP][yearly-support] অনুসারে, কুবারনেটিস কমিউনিটি প্রায় চৌদ্দ (১৪) মাসের জন্য সক্রিয় প্যাচ রিলিজ সিরিজের সমর্থন করবে। -এই সময়সীমার প্রথম বারো মাসগুলি মান হিসাবে +এই সময়সীমার প্রথম বারো মাসগুলি স্ট্যান্ডার্ড পিরিয়ড হিসাবে গণ্য হবে। বারো মাসের শেষে, নিম্নলিখিত ঘটনা ঘটবে: @@ -63,8 +63,8 @@ type: docs - ডিপেন্ডেন্সি সমস্যাগুলি (বেস ইমেজ আপডেট সহ) - গুরুত্বপূর্ণ কোর কম্পোনেন্ট সমস্যাগুলি -দুই মাসের মেইন্টেনেন্স মোড সময়সীমার শেষে, প্যাচ রিলিজ সিরিজটি ইওএল -(শেষ জীবনের শেষ) হিসাবে গণ্য হবে এবং সম্পর্কিত ব্রাঞ্চে চেরি পিক +দুই মাসের মেইন্টেনেন্স মোড সময়সীমার শেষে, প্যাচ রিলিজ সিরিজটি EOL (end of life) +হিসাবে গণ্য হবে এবং সম্পর্কিত ব্রাঞ্চে চেরি পিক শীঘ্রই পরে বন্ধ করা হবে মনে রাখবেন যে, রক্ষণাবেক্ষণ মোড এবং EOL লক্ষ্যের জন্য মাসের 28 তারিখ বেছে নেওয়া হয়েছিল @@ -76,11 +76,11 @@ type: docs নিম্নলিখিত মাসিক রিলিজ পয়েন্টগুলির লক্ষ্য করব। অপরিকল্পিত, গুরুত্বপূর্ণ রিলিজগুলি এদের মধ্যেও ঘটতে পারে। -| মাসিক প্যাচ রিলিজ | চেরি পিক শেষ সময় | লক্ষ্য তারিখ | +| মাসিক প্যাচ রিলিজ | চেরি পিক শেষ সময় | লক্ষ্য তারিখ | | --------------------- | -------------------- | ----------- | -| মার্চ 2024 | 2024-03-08 | 2024-03-13 | -| এপ্রিল 2024 | 2024-04-12 | 2024-04-17 | -| মে 2024 | 2024-05-10 | 2024-05-15 | +| মার্চ 2024 | 2024-03-08 | 2024-03-13 | +| এপ্রিল 2024 | 2024-04-12 | 2024-04-17 | +| মে 2024 | 2024-05-10 | 2024-05-15 | ## সক্রিয় শাখাগুলির জন্য বিস্তারিত রিলিজ ইতিহাস @@ -93,6 +93,6 @@ type: docs {{< eol-releases >}} [cherry-picks]: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-release/cherry-picks.md -[release-managers]: /releases/release-managers -[release process description]: /releases/release +[release-managers]: /bn/releases/release-managers +[release process description]: /bn/releases/release [yearly-support]: https://git.k8s.io/enhancements/keps/sig-release/1498-kubernetes-yearly-support-period/README.md From f21f93a1bff6622a36d6083a51c5bfbbab35b133 Mon Sep 17 00:00:00 2001 From: Pronay <78101731+itsPronay@users.noreply.github.com> Date: Tue, 27 Feb 2024 12:15:07 +0600 Subject: [PATCH 0156/1086] Update patch-releases.md --- content/bn/releases/patch-releases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/releases/patch-releases.md b/content/bn/releases/patch-releases.md index c49b703722..43a9b95d21 100644 --- a/content/bn/releases/patch-releases.md +++ b/content/bn/releases/patch-releases.md @@ -13,7 +13,7 @@ type: docs আমাদের সাধারণ প্যাচ রিলিজ ক্যাডেন্সের মাসিক। এটা সাধারণত একটু দ্রুত (1 থেকে 2 সপ্তাহ) হলেও, যখন একটি 1.X মাইনর রিলিজের পরে প্যাচ রিলিজের প্রথমটি হয়। গুরুত্বপূর্ণ বাগ সংশোধন আরও -সাধারণ সংলগ্নতার বাইরে একটি আগামী রিলিজ সৃষ্টি করতে পারে। আমরা +সাধারণ ক্যাডেন্সের বাইরে একটি আগামী রিলিজ সৃষ্টি করতে পারে। আমরা এছাড়াও লক্ষ্য করি যে প্রধান ছুটির সময়ে রিলিজ করা হবে না। ## যোগাযোগ From 00fc32f685cce71693462247eee59f1e67ab8aa1 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Tue, 27 Feb 2024 07:42:37 +0000 Subject: [PATCH 0157/1086] [bn] Localize content/bn/docs/concepts/overview/_index.md --- .../{what-is-kubernetes.md => _index.md} | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) rename content/bn/docs/concepts/overview/{what-is-kubernetes.md => _index.md} (93%) diff --git a/content/bn/docs/concepts/overview/what-is-kubernetes.md b/content/bn/docs/concepts/overview/_index.md similarity index 93% rename from content/bn/docs/concepts/overview/what-is-kubernetes.md rename to content/bn/docs/concepts/overview/_index.md index 79955bbacf..dd34e6991e 100644 --- a/content/bn/docs/concepts/overview/what-is-kubernetes.md +++ b/content/bn/docs/concepts/overview/_index.md @@ -1,15 +1,17 @@ --- -শিরোনাম: কুবারনেটিস কি ? -বর্ণনা: > - কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, যা ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবা, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে উপলব্ধ। +title: "ওভারভিউ" +description: > + কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবাগুলি, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে সহজলভ্য। content_type: concept -weight: 10 +weight: 20 card: name: concepts weight: 10 -sitemap: - priority: 0.9 + anchors: + - anchor: "#why-you-need-kubernetes-and-what-can-it-do" + title: কুবারনেটিস কি? +no_list: true --- @@ -17,9 +19,10 @@ sitemap: -কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, যা ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস এর পরিষেবা, ব্যবহারযোগ্যতা, এবং সরঞ্জাম ব্যাপকভাবে বিস্তৃত। -কুবারনেটিস নামটি গ্রীক থেকে এসেছে, যার অর্থ হেলমসম্যান বা পাইলট। "K" এবং "s" এর মধ্যে আটটি অক্ষর গণনা করার ফলে একটি সংক্ষিপ্ত রূপ K8s। গুগল ২০১৪ সালে কুবারনেটিস প্রজেক্টটি উন্মুক্ত করেছে। ফলস্বরূপ কুবারনেটিস [গুগল-এর ১৫ বছরেরও বেশি অভিজ্ঞতার](/blog/2015/04/borg-predecessor-to-kubernetes/) মাধ্যমে উৎপাদন কাজ স্কেল পর্যায়ে সেরা ধারণা এবং অনুশীলনের সাথে পরিচালনা করে। +কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবাগুলি, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে সহজলভ্য। + +কুবারনেটিস নামটি গ্রীক থেকে এসেছে, যার অর্থ হেলমসম্যান বা পাইলট। "K" এবং "s" এর মধ্যে আটটি অক্ষর গণনা করার ফলে একটি সংক্ষিপ্ত রূপ K8s। গুগল ২০১৪ সালে কুবারনেটিস প্রজেক্টটি ওপেন সোর্স করেছে। কুবারনেটিস [Google-এর 15 বছরেরও বেশি অভিজ্ঞতা](/blog/2015/04/borg-predecessor-to-kubernetes/) সম্প্রদায়ের সেরা-প্রজন্মের ধারণা এবং অনুশীলনের সাথে স্কেলে উৎপাদন কাজের চাপগুলিকে একত্রিত করে। ## অতিতে যাই From ba0395f4402e4972356936203e12f0e42e4b7cba Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Wed, 28 Feb 2024 14:54:18 +0000 Subject: [PATCH 0158/1086] [bn] Localize content/bn/docs/concepts/overview/_index.md --- content/bn/docs/concepts/overview/_index.md | 151 +++++++++++++++----- 1 file changed, 117 insertions(+), 34 deletions(-) diff --git a/content/bn/docs/concepts/overview/_index.md b/content/bn/docs/concepts/overview/_index.md index dd34e6991e..8b072fa38f 100644 --- a/content/bn/docs/concepts/overview/_index.md +++ b/content/bn/docs/concepts/overview/_index.md @@ -20,9 +20,14 @@ no_list: true -কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবাগুলি, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে সহজলভ্য। +কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড +ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। +এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবাগুলি, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে সহজলভ্য। -কুবারনেটিস নামটি গ্রীক থেকে এসেছে, যার অর্থ হেলমসম্যান বা পাইলট। "K" এবং "s" এর মধ্যে আটটি অক্ষর গণনা করার ফলে একটি সংক্ষিপ্ত রূপ K8s। গুগল ২০১৪ সালে কুবারনেটিস প্রজেক্টটি ওপেন সোর্স করেছে। কুবারনেটিস [Google-এর 15 বছরেরও বেশি অভিজ্ঞতা](/blog/2015/04/borg-predecessor-to-kubernetes/) সম্প্রদায়ের সেরা-প্রজন্মের ধারণা এবং অনুশীলনের সাথে স্কেলে উৎপাদন কাজের চাপগুলিকে একত্রিত করে। +কুবারনেটিস নামটি গ্রীক থেকে এসেছে, যার অর্থ হেলমসম্যান বা পাইলট। +"K" এবং "s" এর মধ্যে আটটি অক্ষর গণনা করার ফলে একটি সংক্ষিপ্ত রূপ K8s। গুগল ২০১৪ সালে কুবারনেটিস প্রজেক্টটি ওপেন সোর্স করেছে। কুবারনেটিস +[Google-এর 15 বছরেরও বেশি অভিজ্ঞতা](/blog/2015/04/borg-predecessor-to-kubernetes/) সম্প্রদায়ের সেরা-প্রজন্মের ধারণা +এবং অনুশীলনের সাথে স্কেলে উৎপাদন কাজের চাপগুলিকে একত্রিত করে। ## অতিতে যাই @@ -31,65 +36,143 @@ no_list: true ![স্থাপনার বিবর্তন](/images/docs/Container_Evolution.svg) **ঐতিহ্যবাহী স্থাপনার যুগ:** -প্রথম দিকে, সংস্থাগুলি ফিজিক্যাল সার্ভারগুলিতে অ্যাপ্লিকেশন চালাত। একটি ফিজিক্যাল সার্ভারে অ্যাপ্লিকেশনের জন্য রিসোর্স সীমানা নির্ধারণ করার কোন উপায় ছিল না, এবং এর ফলে রিসোর্স বরাদ্দ সমস্যা হয়েছে। উদাহরণস্বরূপ, যদি একটি ফিজিক্যাল সার্ভারে একাধিক অ্যাপ্লিকেশান চালিত হয়, এমন উদাহরণ হতে পারে যেখানে একটি অ্যাপ্লিকেশন বেশিরভাগ সংস্থান গ্রহণ করবে, এবং ফলস্বরূপ, অন্যান্য অ্যাপ্লিকেশনগুলি কম পারফর্ম করবে। এই জন্য একটি সমাধান একটি ভিন্ন ফিজিক্যাল সার্ভারে প্রতিটি অ্যাপ্লিকেশন চালানো হবে। কিন্তু সম্পদের অব্যবহৃত হওয়ার কারণে এটির মাপকাঠিি ঠিক করা যায়নি এবং অনেকগুলি ফিজিক্যাল সার্ভার বজায় রাখা সংস্থাগুলির জন্য ব্যয়বহুল ছিল। +প্রথম দিকে, সংস্থাগুলি ফিজিক্যাল সার্ভারগুলিতে অ্যাপ্লিকেশন চালাত। +একটি ফিজিক্যাল সার্ভারে অ্যাপ্লিকেশনের জন্য রিসোর্স সীমানা নির্ধারণ করার কোন উপায় ছিল না, +এবং এর ফলে রিসোর্স বরাদ্দ সমস্যা হয়েছে। উদাহরণস্বরূপ, যদি একটি ফিজিক্যাল সার্ভারে একাধিক অ্যাপ্লিকেশান চালিত হয়, +এমন উদাহরণ হতে পারে যেখানে একটি অ্যাপ্লিকেশন বেশিরভাগ সংস্থান গ্রহণ করবে, এবং ফলস্বরূপ, অন্যান্য অ্যাপ্লিকেশনগুলি কম পারফর্ম করবে। +এই জন্য একটি সমাধান একটি ভিন্ন ফিজিক্যাল সার্ভারে প্রতিটি অ্যাপ্লিকেশন চালানো হবে। +কিন্তু সম্পদের অব্যবহৃত হওয়ার কারণে এটির মাপকাঠিি ঠিক করা যায়নি এবং +অনেকগুলি ফিজিক্যাল সার্ভার বজায় রাখা সংস্থাগুলির জন্য ব্যয়বহুল ছিল। -**ভার্চুয়ালাইজড স্থাপনার যুগ:** একটি সমাধান হিসাবে, ভার্চুয়ালাইজেশন চালু করা হয়েছিল। এটি আপনাকে একটি একক শারীরিক সার্ভারের CPU-তে একাধিক ভার্চুয়াল মেশিন (VMs) চালানো যায়। ভার্চুয়ালাইজেশন অ্যাপ্লিকেশনগুলিকে VM-এর মধ্যে বিচ্ছিন্ন করার অনুমতি দেয় এবং একটি স্তরের নিরাপত্তা প্রদান করে কারণ একটি অ্যাপ্লিকেশনের তথ্য অন্য অ্যাপ্লিকেশন দ্বারা অবাধে অ্যাক্সেস করা যায় না। ভার্চুয়ালাইজেশন একটি ফিজিক্যাল সার্ভারে রিসোর্সগুলির আরও ভালো ব্যবহারের অনুমতি দেয় এবং আরও ভাল স্কেলেবিলিটির অনুমতি দেয় কারণ একটি অ্যাপ্লিকেশন সহজে যোগ বা আপডেট করা যায়, হার্ডওয়্যার খরচ কমায় এবং আরও অনেক কিছু। ভার্চুয়ালাইজেশনের মাধ্যমে আপনি ডিসপোজেবল ভার্চুয়াল মেশিনের একটি ক্লাস্টার হিসাবে ভৌত সম্পদের একটি সেট উপস্থাপন করতে পারেন। +**ভার্চুয়ালাইজড স্থাপনার যুগ:** একটি সমাধান হিসাবে, ভার্চুয়ালাইজেশন চালু করা হয়েছিল। এটি আপনাকে +একটি একক শারীরিক সার্ভারের CPU-তে একাধিক ভার্চুয়াল মেশিন (VMs) চালানো যায়। ভার্চুয়ালাইজেশন +অ্যাপ্লিকেশনগুলিকে VM-এর মধ্যে বিচ্ছিন্ন করার অনুমতি দেয় এবং একটি স্তরের নিরাপত্তা প্রদান করে +কারণ একটি অ্যাপ্লিকেশনের তথ্য অন্য অ্যাপ্লিকেশন দ্বারা অবাধে অ্যাক্সেস করা যায় না। + +ভার্চুয়ালাইজেশন একটি ফিজিক্যাল সার্ভারে রিসোর্সগুলির আরও ভালো ব্যবহারের অনুমতি দেয় এবং +আরও ভাল স্কেলেবিলিটির অনুমতি দেয় কারণ একটি অ্যাপ্লিকেশন সহজে যোগ বা আপডেট করা যায়, হার্ডওয়্যার খরচ কমায় +এবং আরও অনেক কিছু। ভার্চুয়ালাইজেশনের মাধ্যমে আপনি ডিসপোজেবল ভার্চুয়াল মেশিনের +একটি ক্লাস্টার হিসাবে ফিজিক্যাল সম্পদের একটি সেট উপস্থাপন করতে পারেন। -প্রতিটি VM হল একটি সম্পূর্ণ মেশিন যা ভার্চুয়ালাইজড হার্ডওয়্যারের উপরে নিজস্ব অপারেটিং সিস্টেম সহ সমস্ত উপাদান চালায়। +প্রতিটি VM হল একটি সম্পূর্ণ মেশিন যা ভার্চুয়ালাইজড হার্ডওয়্যারের উপরে নিজস্ব অপারেটিং সিস্টেম +সহ সমস্ত উপাদান চালায়। -**কন্টেইনার স্থাপনের যুগ:** কনটেইনারগুলি VM-এর মতোই, তবে অ্যাপ্লিকেশনগুলির মধ্যে অপারেটিং সিস্টেম (OS) ভাগ করার জন্য তাদের শিথিল বিচ্ছিন্নতা বৈশিষ্ট্য রয়েছে৷ অতএব, পাত্রে হালকা বলে মনে করা হয়। একটি VM-এর মতো, একটি ধারকটির নিজস্ব ফাইল সিস্টেম, CPU ভাগ, মেমরি, প্রক্রিয়া স্থান এবং আরও অনেক কিছু রয়েছে। যেহেতু এগুলি অন্তর্নিহিত অবকাঠামো থেকে আলাদা করা হয়েছে, তারা ক্লাউড এবং OS ডিস্ট্রিবিউশন জুড়ে বহনযোগ্য। +**কন্টেইনার স্থাপনের যুগ:** কনটেইনারগুলি VM-এর মতোই, তবে অ্যাপ্লিকেশনগুলির +মধ্যে অপারেটিং সিস্টেম (OS) ভাগ করার জন্য তাদের শিথিল বিচ্ছিন্নতা বৈশিষ্ট্য রয়েছে৷ +অতএব, পাত্রে হালকা বলে মনে করা হয়। একটি VM-এর মতো, একটি কনটেইনারের +নিজস্ব ফাইল সিস্টেম, CPU ভাগ, মেমরি, প্রক্রিয়া স্থান এবং আরও অনেক কিছু রয়েছে। যেহেতু এগুলি +অন্তর্নিহিত অবকাঠামো থেকে আলাদা করা হয়েছে, তারা ক্লাউড এবং +OS ডিস্ট্রিবিউশন জুড়ে বহনযোগ্য। কনটেইনারগুলি জনপ্রিয় হয়ে উঠেছে কারণ তারা অতিরিক্ত সুবিধা প্রদান করে, যেমন: -* এজাইল অ্যাপ্লিকেশন তৈরি এবং স্থাপনা: ভিএম ইমেজ(VM Image) ব্যবহারের তুলনায় কন্টেইনার ইমেজ(Container Image) তৈরির সহজতা এবং দক্ষতা বেশি। -* ক্রমাগত বিকাশ, একীকরণ এবং স্থাপনা: দ্রুত এবং দক্ষ রোলব্যাকগুলির সাথে নির্ভরযোগ্য এবং ঘন ঘন কন্টেইনার image তৈরি এবং স্থাপনার ব্যবস্থা করে (image অপরিবর্তনীয়তার কারণে). -* ডেভ(Dev) এবং অপস(Ops) উদ্বেগের বিচ্ছেদ: বিল্ড/রিলিজের সময়ে অ্যাপ্লিকেশন কন্টেইনার ইমেজ তৈরি করে ডিপ্লয়মেন্টের সময়ের তুলনায়, ফলস্বরূপ অ্যাপ্লিকেশনগুলি অবকাঠামো থেকে বিচ্ছিন্ন হয়। -* পর্যবেক্ষণযোগ্যতা: শুধুমাত্র OS-স্তরের তথ্য এবং মেট্রিক্সই নয়, প্রয়োগের স্বাস্থ্য এবং অন্যান্য সংকেতও। -* ডেভেলপমেন্ট, টেস্টিং এবং প্রোডাকশন জুড়ে পরিবেশগত সামঞ্জস্য: একটি ল্যাপটপে ক্লাউডের মতোই চলে। -* ক্লাউড এবং ওএস ডিস্ট্রিবিউশন পোর্টেবিলিটি: Ubuntu, RHEL, CoreOS, on-premises, on major public clouds, এবং অন্য কোথাও চলে। -* অ্যাপ্লিকেশন-কেন্দ্রিক ব্যবস্থাপনা: ভার্চুয়াল হার্ডওয়্যারে একটি OS চালানো থেকে লজিক্যাল রিসোর্স ব্যবহার করে একটি OS-এ একটি অ্যাপ্লিকেশন চালানো পর্যন্ত বিমূর্ততার স্তর বাড়ায়। -* ঢিলেঢালাভাবে সংযুক্ত, বিতরণ করা, স্থিতিস্থাপক, মুক্ত মাইক্রো-পরিষেবা: অ্যাপ্লিকেশনগুলিকে ছোট, স্বাধীন টুকরোগুলিতে বিভক্ত করা হয় এবং গতিশীলভাবে স্থাপন ও পরিচালনা করা যায় – একটি বড় একক-উদ্দেশ্য মেশিনে চলমান একটি মনোলিথিক স্ট্যাক নয়।. +* এজাইল অ্যাপ্লিকেশন তৈরি এবং স্থাপনায়: ভিএম ইমেজ (VM Image) ব্যবহারের তুলনায় কন্টেইনার ইমেজ (Container Image) + তৈরির সহজতা এবং দক্ষতা বেশি। +* ক্রমাগত বিকাশ, একীকরণ এবং স্থাপনা: দ্রুত এবং দক্ষ রোলব্যাকগুলির + সাথে নির্ভরযোগ্য এবং ঘন ঘন কন্টেইনার image তৈরি এবং স্থাপনার + ব্যবস্থা করে (image অপরিবর্তনীয়তার কারণে). +* ডেভ (Dev) এবং অপস (Ops) উদ্বেগের বিচ্ছেদ: বিল্ড/রিলিজের সময়ে অ্যাপ্লিকেশন কন্টেইনার ইমেজ তৈরি করে + ডিপ্লয়মেন্টের সময়ের তুলনায়, ফলস্বরূপ অ্যাপ্লিকেশনগুলি অবকাঠামো থেকে বিচ্ছিন্ন হয়। +* পর্যবেক্ষণযোগ্যতা: শুধুমাত্র OS-স্তরের তথ্য এবং মেট্রিক্সই নয়, + প্রয়োগের স্বাস্থ্য এবং অন্যান্য সংকেতও। +* ডেভেলপমেন্ট, টেস্টিং এবং প্রোডাকশন জুড়ে পরিবেশগত সামঞ্জস্য: একটি + ল্যাপটপে ক্লাউডের মতোই চলে। +* ক্লাউড এবং ওএস ডিস্ট্রিবিউশন পোর্টেবিলিটি: উবুন্টু (Ubuntu), রেল (RHEL), কোরওস (CoreOS), অন-প্রিমিসেস (on-premises), + প্রধান পাবলিক ক্লাউডসর উপর, এবং অন্য কোথাও চলে। +* অ্যাপ্লিকেশন-কেন্দ্রিক ব্যবস্থাপনা: ভার্চুয়াল হার্ডওয়্যারে একটি OS চালানো থেকে + লজিক্যাল রিসোর্স ব্যবহার করে একটি OS-এ একটি অ্যাপ্লিকেশন চালানো পর্যন্ত বিমূর্ততার স্তর বাড়ায়। +* ঢিলেঢালাভাবে সংযুক্ত, বিতরণ করা, স্থিতিস্থাপক, মুক্ত মাইক্রো-পরিষেবা: অ্যাপ্লিকেশনগুলিকে + ছোট, স্বাধীন টুকরোগুলিতে বিভক্ত করা হয় এবং গতিশীলভাবে স্থাপন ও পরিচালনা করা যায় – + একটি বড় একক-উদ্দেশ্য মেশিনে চলমান একটি মনোলিথিক স্ট্যাক নয়।. * সম্পদ বিচ্ছিন্নতা: অনুমানযোগ্য অ্যাপ্লিকেশন কর্মক্ষমতা। * সম্পদের ব্যবহার: উচ্চ দক্ষতা এবং ঘনত্ব। ## আপনার কেন কুবারনেটিস দরকার এবং এটি কী করতে পারে {#why-you-need-kubernetes-and-what-can-it-do} -কন্টেইনারসমূহ অ্যাপ্লিকেশন একত্রকরণ এবং চালানোর একটি ভালো উপায়৷ একটি উৎপাদন পরিবেশে, কন্টেইনারসমূহ এমন ভাবে পরিচালনা করতে হবে যা অ্যাপ্লিকেশনগুলি চালানোর সময় যেন কোনো ডাউনটাইম না থাকে তা নিশ্চিত করবে। উদাহরণস্বরূপ, যদি একটি কন্টেইনার ডাউন হয়, তাহলে অন্য কন্টেইনার কে সেই মুহূর্তে চালু হতে হবে। আর এই অবস্থাটি একটি সিস্টেম দ্বারা পরিচালিত হলে এটি কি সহজ হবে না? +কন্টেইনারসমূহ অ্যাপ্লিকেশন একত্রকরণ এবং চালানোর একটি ভালো উপায়৷ একটি উৎপাদন +পরিবেশে, কন্টেইনারসমূহ এমন ভাবে পরিচালনা করতে হবে যা অ্যাপ্লিকেশনগুলি চালানোর সময় +যেন কোনো ডাউনটাইম না থাকে তা নিশ্চিত করবে। উদাহরণস্বরূপ, যদি একটি কন্টেইনার ডাউন হয়, তাহলে অন্য +কন্টেইনার কে সেই মুহূর্তে চালু হতে হবে। আর এই অবস্থাটি একটি সিস্টেম দ্বারা পরিচালিত হলে এটি কি সহজ হবে না? -এভাবেই কুবারনেটিস কাজে আসে। কুবারনেটিস আপনাকে সিস্টেমগুলিকে স্থিতিস্থাপকভাবে চালানোর জন্য একটি কাঠামো প্রদান করে। এটি আপনার অ্যাপ্লিকেশনের জন্য স্কেলিং এবং ফেইলওভারের যত্ন নেয়, স্থাপনার নিদর্শন প্রদান করে এবং আরও অনেক কিছু করে। উদাহরণস্বরূপ, কুবারনেটিস সহজেই আপনার সিস্টেমের জন্য একটি ক্যানারি স্থাপনা পরিচালনা করতে পারে। +এভাবেই কুবারনেটস উদ্ধারে আসে!। কুবারনেটিস একটি কাঠামো প্রদান করে আপনাকে +সিস্টেমগুলিকে স্থিতিস্থাপকভাবে চালানোর জন্য । এটি আপনার অ্যাপ্লিকেশনের জন্য স্কেলিং এবং ফেইলওভারের যত্ন নেয়, +স্থাপনার নিদর্শন প্রদান করে এবং আরও অনেক কিছু করে। উদাহরণস্বরূপ, কুবারনেটিস +সহজেই আপনার সিস্টেমের জন্য একটি ক্যানারি স্থাপনা পরিচালনা করতে পারে। কুবারনেটিস আপনাকে সরবরাহ করে: * **পরিষেবা আবিষ্কার এবং লোড ব্যালেন্সিং** -কুবারনেটিস ডিএনএস নাম ব্যবহার করে বা তাদের নিজস্ব আইপি ঠিকানা ব্যবহার করে একটি ধারক প্রকাশ করতে পারে। একটি কন্টেইনারে ট্রাফিক বেশি হলে, কুবারনেটিস লোড ব্যালেন্স এবং নেটওয়ার্ক ট্র্যাফিক বিতরণ করতে সক্ষম হয় যাতে স্থাপনা স্থিতিশীল থাকে। + কুবারনেটিস ডিএনএস নাম ব্যবহার করে বা তাদের নিজস্ব আইপি ঠিকানা ব্যবহার করে একটি ধারক প্রকাশ করতে পারে। + একটি কন্টেইনারে ট্রাফিক বেশি হলে, কুবারনেটিস লোড ব্যালেন্স এবং নেটওয়ার্ক ট্র্যাফিক + বিতরণ করতে সক্ষম হয় যাতে স্থাপনা স্থিতিশীল থাকে। * **স্টোরেজ অর্কেস্ট্রেশন** -কুবারনেটিস আপনাকে স্বয়ংক্রিয়ভাবে আপনার পছন্দের একটি স্টোরেজ সিস্টেম মাউন্ট করার অনুমতি দেয়, যেমন স্থানীয় স্টোরেজ, পাবলিক ক্লাউড প্রদানকারী এবং আরও অনেক কিছু। + কুবারনেটিস আপনাকে স্বয়ংক্রিয়ভাবে আপনার পছন্দের একটি স্টোরেজ সিস্টেম মাউন্ট করার অনুমতি দেয়, যেমন + স্থানীয় স্টোরেজ, পাবলিক ক্লাউড প্রদানকারী এবং আরও অনেক কিছু। * **স্বয়ংক্রিয় রোলআউট এবং রোলব্যাক** -আপনি কুবারনেটিস ব্যবহার করে আপনার স্থাপন করা কন্টেইনার জন্য পছন্দসই অবস্থা বর্ণনা করতে পারেন এবং এটি একটি নিয়ন্ত্রিত হারে প্রকৃত অবস্থাকে পছন্দসই অবস্থায় পরিবর্তন করতে পারে। উদাহরণস্বরূপ, আপনি আপনার স্থাপনার জন্য নতুন কন্টেইনার তৈরি করতে, বিদ্যমান কন্টেইনারগুলি সরাতে এবং নতুন কন্টেইনারে তাদের সমস্ত রিসোর্স গ্রহণ করতে কুবারনেটিসকে স্বয়ংক্রিয়ভাবে করতে পারেন। + আপনি কুবারনেটিস ব্যবহার করে আপনার স্থাপন করা কন্টেইনার জন্য পছন্দসই অবস্থা বর্ণনা করতে পারেন + এবং এটি একটি নিয়ন্ত্রিত হারে প্রকৃত অবস্থাকে পছন্দসই অবস্থায় পরিবর্তন করতে পারে। + উদাহরণস্বরূপ, আপনি কুবারনেটিস দিয়ে স্বয়ংক্রিয়ভাবে আপনার স্থাপনার জন্য নতুন কন্টেইনার তৈরি, + বিদ্যমান কন্টেইনারগুলি সরাতে এবং নতুন কন্টেইনারে তাদের সমস্ত রিসোর্স গ্রহণ করতে পারেন। * **স্বয়ংক্রিয় বিন প্যাকিং** -আপনি কুবারনেটিসকে নোডের একটি ক্লাস্টার প্রদান করেন যা এটি কন্টেইনারাইজড কাজ চালাতে ব্যবহার করতে পারে। আপনি কুবারনেটিসকেে বলুন প্রতিটি কন্টেইনারের কত CPU এবং মেমরি (RAM) প্রয়োজন। কুবারনেটিস আপনার সম্পদের সর্বোত্তম ব্যবহার করতে আপনার নোডগুলিতে কন্টেইনারে মানানসই করতে পারে। + আপনি কুবারনেটিসকে নোডের একটি ক্লাস্টার প্রদান করেন যা এটি কন্টেইনারাইজড কাজ চালাতে ব্যবহার করতে পারে। + আপনি কুবারনেটিসকেে বলুন প্রতিটি কন্টেইনারের কত CPU এবং মেমরি (RAM) প্রয়োজন। কুবারনেটিস আপনার + সম্পদের সর্বোত্তম ব্যবহার করতে আপনার নোডগুলিতে কন্টেইনারে মানানসই করতে পারে। * **স্ব-নিরাময়** - কন্টেইনারগুলি পুনরায় বন্ধ করে চালু করে যেগুলো ব্যর্থ হয়, কন্টেইনারগুলিকে প্রতিস্থাপন করে, আপনার ব্যবহারকারী-সংজ্ঞায়িত স্বাস্থ্য পরীক্ষায় সাড়া না দেওয়া কন্টেইনারগুলিকে বাতিল করে এবং ক্লায়েন্টদের কাছে সেগুলিকে উপস্থাপন করে না যতক্ষণ না তারা পরিবেশন করার জন্য প্রস্তুত হয়৷ + কুবারনেটিস ব্যর্থ কন্টেইনারগুলি পুনরায় চালু করে, কন্টেইনারগুলিকে প্রতিস্থাপন করে, এমন কন্টেইনারগুলিকে বন্ধ করে + যেটি আপনার ব্যবহারকারী-সংজ্ঞায়িত স্বাস্থ্য পরীক্ষায় সাড়া দেয় না এবং ক্লায়েন্টদের কাছে তাদের বিজ্ঞাপন দেবেন না যতক্ষণ না এটি + পরিবেশন করার জন্য প্রস্তুত। * **গোপন এবং কনফিগারেশন ব্যবস্থাপনা** -কুবারনেটিস আপনাকে পাসওয়ার্ড, OAuth টোকেন এবং SSH কীগুলির মতো সংবেদনশীল তথ্য সংরক্ষণ এবং পরিচালনা করতে দেয়। আপনি আপনার কন্টেইনারের চিত্রগুলি পুনর্নির্মাণ না করে এবং আপনার স্ট্যাক কনফিগারেশনে গোপনীয়তা প্রকাশ না করেই গোপনীয়তা এবং অ্যাপ্লিকেশন কনফিগারেশন স্থাপন এবং আপডেট করতে পারেন। + কুবারনেটিস আপনাকে সংবেদনশীল তথ্য সংরক্ষণ এবং পরিচালনা করতে দেয়, যেমন পাসওয়ার্ড, ওঅথ (OAuth) টোকেন + এবং এসএসএইচ (SSH) কী। আপনি গোপনীয়তা এবং অ্যাপ্লিকেশনের কনফিগারেশন স্থাপন এবং আপডেট করতে পারবেন + আপনার কন্টেইনার চিত্রগুলি পুনর্নির্মাণ করা ছাড়াই, এবং আপনার স্ট্যাক কনফিগারেশনের গোপনীয়তা প্রকাশ না করে। +* **ব্যাচ এক্সেকিউশন** + পরিষেবাগুলি ছাড়াও, কুবারনেটস আপনার ব্যাচ এবং সিআই ওয়ার্কলোডগুলি পরিচালনা করতে পারে, যদি ইচ্ছা হয় তবে ব্যর্থ কন্টেইনারগুলি প্রতিস্থাপন করতে পারে। +* **অনুভূমিক স্কেলিং** + একটি সাধারণ কমান্ডের সাহায্যে, একটি UI সহ, বা স্বয়ংক্রিয়ভাবে CPU ব্যবহারের উপর ভিত্তি করে আপনার অ্যাপ্লিকেশনকে উপরে এবং নীচে স্কেল করুন। +* **IPv4/IPv6 ডুয়াল-স্ট্যাক** + পড এবং পরিষেবাগুলিতে IPv4 এবং IPv6 ঠিকানাগুলির বরাদ্দ৷ +* **Designed for extensibility** + আপস্ট্রিম সোর্স কোড পরিবর্তন না করে আপনার কুবারনেটিস ক্লাস্টারে বৈশিষ্ট্য যোগ করুন। ## কুবারনেটিস কি নয় -কুবারনেটিস একটি ঐতিহ্যগত, সর্ব-অন্তর্ভুক্ত PaaS (পরিষেবা হিসাবে প্ল্যাটফর্ম) সিস্টেম নয়। যেহেতু Kubernetes হার্ডওয়্যার স্তরের পরিবর্তে কন্টেইনার স্তরে কাজ করে, তাই এটি PaaS অফারগুলির জন্য সাধারণভাবে কিছু প্রযোজ্য বৈশিষ্ট্য প্রদান করে, যেমন স্থাপনা, স্কেলিং, লোড ব্যালেন্সিং, এবং ব্যবহারকারীদের তাদের লগিং, পর্যবেক্ষণ এবং সতর্কতা সমাধানগুলিকে একীভূত করতে দেয়৷ যাইহোক, কুবারনেটিস একচেটিয়া নয়, এবং এই ডিফল্ট সমাধান ঐচ্ছিক এবং প্লাগযোগ্য। কুবারনেটিস বিকাশকারী প্ল্যাটফর্ম তৈরির জন্য বিল্ডিং ব্লক সরবরাহ করে, কিন্তু যেখানে এটি গুরুত্বপূর্ণ সেখানে ব্যবহারকারীর পছন্দ এবং নমনীয়তা সংরক্ষণ করে। +কুবারনেটিস একটি ঐতিহ্যগত, সর্ব-অন্তর্ভুক্ত PaaS (পরিষেবা হিসাবে প্ল্যাটফর্ম) সিস্টেম নয়। +যেহেতু Kubernetes হার্ডওয়্যার স্তরের পরিবর্তে কন্টেইনার স্তরে কাজ করে, +তাই এটি PaaS অফারগুলির জন্য সাধারণভাবে কিছু প্রযোজ্য বৈশিষ্ট্য প্রদান করে, যেমন +স্থাপনা, স্কেলিং, লোড ব্যালেন্সিং, এবং ব্যবহারকারীদের তাদের লগিং, পর্যবেক্ষণ +এবং সতর্কতা সমাধানগুলিকে একীভূত করতে দেয়৷ যাইহোক, কুবারনেটিস একচেটিয়া নয়, এবং এই ডিফল্ট সমাধান +ঐচ্ছিক এবং প্লাগযোগ্য। কুবারনেটিস বিকাশকারী প্ল্যাটফর্ম তৈরির জন্য বিল্ডিং ব্লক সরবরাহ করে, +কিন্তু যেখানে এটি গুরুত্বপূর্ণ সেখানে ব্যবহারকারীর পছন্দ এবং নমনীয়তা সংরক্ষণ করে। কুবারনেটিস: -* সমর্থিত অ্যাপ্লিকেশনের ধরন সীমাবদ্ধ করে না। কুবারনেটিস-এর লক্ষ্য স্টেটলেস, স্টেটফুল, এবং ডেটা-প্রসেসিং ওয়ার্কলোড সহ অত্যন্ত বৈচিত্র্যময় কাজের লোড সহায়তা করা। যদি একটি অ্যাপ্লিকেশন একটি পাত্রে চলতে পারে তবে এটি কুবারনেটে দুর্দান্ত চালানো সম্ভব। -* সোর্স কোড স্থাপন করে না এবং আপনার অ্যাপ্লিকেশন তৈরি করে না। ক্রমাগত ইন্টিগ্রেশন, ডেলিভারি, এবং ডিপ্লয়মেন্ট (CI/CD) ওয়ার্কফ্লোগুলি সংস্থার প্রকৃতির উপর এবং পছন্দগুলির পাশাপাশি প্রযুক্তিগত প্রয়োজনীয়তা দ্বারা নির্ধারিত হয়। -* মিডলওয়্যার (উদাহরণস্বরূপ, বার্তা বাস), ডেটা-প্রসেসিং ফ্রেমওয়ার্ক (উদাহরণস্বরূপ, স্পার্ক(Spark)), ডাটাবেস (উদাহরণস্বরূপ, মাইএসকিউএল(MySql)), ক্যাশে, বা ক্লাস্টার স্টোরেজ সিস্টেম (উদাহরণস্বরূপ, Ceph) এর মতো অ্যাপ্লিকেশন-স্তরের পরিষেবা প্রদান করে না। অন্তর্নির্মিত পরিষেবা হিসাবে। এই ধরনের উপাদানগুলি কুবারনেটিস-এ চলতে পারে, এবং/অথবা পোর্টেবল মেকানিজম, যেমন [ওপেন সার্ভিস ব্রোকার](https://openservicebrokerapi.org/) এর মাধ্যমে Kubernetes-এ চলমান অ্যাপ্লিকেশনের মাধ্যমে অ্যাক্সেস করা যেতে পারে। -* লগিং, পর্যবেক্ষণ, বা সতর্কতা সমাধান নির্দেশ করে না। এটি ধারণার প্রমাণ হিসাবে কিছু ইন্টিগ্রেশন এবং মেট্রিক্স সংগ্রহ ও রপ্তানি করার প্রক্রিয়া প্রদান করে। -* কনফিগারেশন ভাষা/সিস্টেম প্রদান করে না বা বাধ্যতামূলক করে না (উদাহরণস্বরূপ, জসননেট)। এটি একটি ঘোষণামূলক API প্রদান করে যা ঘোষণামূলক স্পেসিফিকেশনের নির্বিচারে ফর্ম দ্বারা লক্ষ্যধারন করা যেতে পারে। -* কোন ব্যাপক যান্ত্রিক কনফিগারেশন, রক্ষণাবেক্ষণ, ব্যবস্থাপনা, বা স্ব-নিরাময় সিস্টেম প্রদান বা গ্রহণ করে না। -*উপরন্তু, কুবারনেটিস একটি নিছক অর্কেস্ট্রেশন সিস্টেম নয়। প্রকৃতপক্ষে, এটি অর্কেস্ট্রেশনের প্রয়োজনীয়তা দূর করে। অর্কেস্ট্রেশনের প্রযুক্তিগত সংজ্ঞা হল একটি সংজ্ঞায়িত কর্মপ্রবাহের সঞ্চালন: প্রথমে A, তারপর B, তারপর C করুন। বিপরীতে, Kubernetes স্বাধীন, সংমিশ্রণযোগ্য নিয়ন্ত্রণ প্রক্রিয়াগুলির একটি সেট নিয়ে গঠিত যা বর্তমান অবস্থাকে প্রদত্ত পছন্দসই অবস্থার দিকে ক্রমাগত চালিত করে। আপনি A থেকে C পর্যন্ত কিভাবে যাবেন তা বিবেচ্য নয়। কেন্দ্রীভূত নিয়ন্ত্রণেরও প্রয়োজন নেই। এর ফলে এমন একটি সিস্টেম তৈরি হয় যা ব্যবহার করা সহজ এবং আরও শক্তিশালী, মজবুত, স্থিতিস্থাপক এবং বর্ধনশীল। - - +* সমর্থিত অ্যাপ্লিকেশনের ধরন সীমাবদ্ধ করে না। কুবারনেটিস একটি লক্ষ্য হল + স্টেটলেস, স্টেটফুল এবং ডেটা-প্রসেসিং সহ অত্যন্ত বৈচিত্র্যময় কাজের চাপ কাজের ভার + সমর্থন করা। যদি একটি অ্যাপ্লিকেশন একটি কন্টেইনারে চলতে পারে তবে কুবারনেটিসেও দুর্দান্ত চলা উচিত। +* সোর্স কোড স্থাপন করে না এবং আপনার অ্যাপ্লিকেশন তৈরি করে না। একটানা ইন্টিগ্রেশন, + ডেলিভারি, এবং ডিপ্লোয়মেন্ট (CI/CD) ওয়ার্কফ্লোগুলি প্রতিষ্ঠানের সংস্কৃতি এবং + পছন্দের পাশাপাশি প্রযুক্তিগত প্রয়োজনীয়তা দ্বারা নির্ধারিত হয়। +* অ্যাপ্লিকেশন-স্তরের পরিষেবা প্রদান করে না, যেমন মিডলওয়্যার (উদাহরণস্বরূপ, বার্তা বাস), + ডেটা-প্রসেসিং ফ্রেমওয়ার্ক (উদাহরণস্বরূপ, স্পার্ক), ডাটাবেস (উদাহরণস্বরূপ, মাইএসকিউএল), ক্যাশে, বা + বিল্ট-ইন পরিষেবা হিসাবে ক্লাস্টার স্টোরেজ সিস্টেম (উদাহরণস্বরূপ, Ceph)। এই ধরনের উপাদান চলতে পারে + কুবারনেটিসে, এবং/অথবা পোর্টেবল মেকানিজমের মাধ্যমে কুবারনেটিস এ চলমান অ্যাপ্লিকেশন দ্বারা অ্যাক্সেস করা + যেতে পারে, যেমন [ওপেন সার্ভিস ব্রোকার](https://openservicebrokerapi.org/)। +* লগিং, মনিটরিং বা সতর্কতা সমাধান নির্দেশ করে না। এটি ধারণার প্রমাণ হিসাবে কিছু ইন্টিগ্রেশন প্রদান + করে, এবং মেট্রিক্স সংগ্রহ এবং রপ্তানি করার প্রক্রিয়া। +* এটি কনফিগারেশন ভাষা/সিস্টেম প্রদান বা আদেশ দেয় না (উদাহরণস্বরূপ, Jsonnet)। এটি একটি ঘোষণামূলক + এপিআই প্রদান করে যা ঘোষণামূলক স্পেসিফিকেশনের নির্বিচারে ফর্ম দ্বারা লক্ষ্য করা যেতে পারে। +* কোন ব্যাপক মেশিন কনফিগারেশন, রক্ষণাবেক্ষণ, ব্যবস্থাপনা প্রদান বা গ্রহণ করে না, + বা স্ব-নিরাময় সিস্টেম। +* উপরন্তু, কুবারনেটিস একটি নিছক অর্কেস্ট্রেশন সিস্টেম নয়। আসলে, এটি অর্কেস্ট্রেশনের জন্য + প্রয়োজনীয়তা দূর করে। অর্কেস্ট্রেশনের প্রযুক্তিগত সংজ্ঞা হল একটি সংজ্ঞায়িত ওয়ার্কফ্লো কার্যকর করা: + প্রথমে A, তারপর B, তারপর C করুন। বিপরীতে, কুবারনেটিস স্বাধীন, কম্পোজযোগ্য একটি সেট নিয়ে গঠিত + নিয়ন্ত্রণ প্রক্রিয়া যা ক্রমাগত বর্তমান অবস্থাকে প্রদত্ত পছন্দসই অবস্থার দিকে চালিত করে। + আপনি A থেকে C পর্যন্ত কিভাবে যাবেন তা বিবেচ্য নয়। কেন্দ্রীভূত নিয়ন্ত্রণেরও প্রয়োজন নেই। এই + সিস্টেমের ফলাফল যা ব্যবহার করা সহজ এবং আরও শক্তিশালী, মজবুত, স্থিতিস্থাপক এবং এক্সটেনসিবল। ## {{% heading "whatsnext" %}} -* [কুবারনেটিস উপাদানটি] দেখুন(/docs/concepts/overview/components/) -* [শুরু করতে] প্রস্তুত আপনি?(/docs/setup/)? +* [কুবারনেটিস উপাদান](/docs/concepts/overview/components/) একবার দেখুন +* [কুবারনেটিস এপিআই](/docs/concepts/overview/kubernetes-api/) একবার দেখুন +* [ক্লাস্টার আর্কিটেকচার](/docs/concepts/architecture/) একবার দেখুন +* [শুরু করতে](/docs/setup/) প্রস্তুত আপনি? From 23ba46a9285e9e59cd961231424c444f1b58432a Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Thu, 29 Feb 2024 06:16:17 +0000 Subject: [PATCH 0159/1086] [bn] Localize update of content/bn/docs/concepts/overview/_index.md --- content/bn/docs/concepts/overview/_index.md | 43 ++++++++++----------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/content/bn/docs/concepts/overview/_index.md b/content/bn/docs/concepts/overview/_index.md index 8b072fa38f..5a872ffd7c 100644 --- a/content/bn/docs/concepts/overview/_index.md +++ b/content/bn/docs/concepts/overview/_index.md @@ -1,16 +1,15 @@ --- - title: "ওভারভিউ" description: > কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবাগুলি, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে সহজলভ্য। content_type: concept weight: 20 -card: +card name: concepts weight: 10 anchors: - anchor: "#why-you-need-kubernetes-and-what-can-it-do" - title: কুবারনেটিস কি? + title: কুবারনেটিস কেন? no_list: true --- @@ -25,9 +24,10 @@ no_list: true এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবাগুলি, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে সহজলভ্য। কুবারনেটিস নামটি গ্রীক থেকে এসেছে, যার অর্থ হেলমসম্যান বা পাইলট। -"K" এবং "s" এর মধ্যে আটটি অক্ষর গণনা করার ফলে একটি সংক্ষিপ্ত রূপ K8s। গুগল ২০১৪ সালে কুবারনেটিস প্রজেক্টটি ওপেন সোর্স করেছে। কুবারনেটিস -[Google-এর 15 বছরেরও বেশি অভিজ্ঞতা](/blog/2015/04/borg-predecessor-to-kubernetes/) সম্প্রদায়ের সেরা-প্রজন্মের ধারণা -এবং অনুশীলনের সাথে স্কেলে উৎপাদন কাজের চাপগুলিকে একত্রিত করে। +"K" এবং "s" এর মধ্যে আটটি অক্ষর গণনা করার ফলে একটি সংক্ষিপ্ত রূপ K8s। গুগল ২০১৪ সালে +কুবারনেটিস প্রজেক্টটি ওপেন সোর্স করেছে। কুবারনেটিস +[15 বছরেরও বেশি সময় ধরে Google-এর অভিজ্ঞতাকে](/blog/2015/04/borg-predecessor-to-kubernetes/) একত্রিত করেছে +যা কমিউনিটির সেরা আইডিয়া এবং অনুশীলনের সাথে স্কেলে উৎপাদন কাজের চাপ চালানোর। ## অতিতে যাই @@ -45,7 +45,7 @@ no_list: true অনেকগুলি ফিজিক্যাল সার্ভার বজায় রাখা সংস্থাগুলির জন্য ব্যয়বহুল ছিল। **ভার্চুয়ালাইজড স্থাপনার যুগ:** একটি সমাধান হিসাবে, ভার্চুয়ালাইজেশন চালু করা হয়েছিল। এটি আপনাকে -একটি একক শারীরিক সার্ভারের CPU-তে একাধিক ভার্চুয়াল মেশিন (VMs) চালানো যায়। ভার্চুয়ালাইজেশন +একটি একক ফিজিক্যাল সার্ভারের CPU-তে একাধিক ভার্চুয়াল মেশিন (VMs) চালানো যায়। ভার্চুয়ালাইজেশন অ্যাপ্লিকেশনগুলিকে VM-এর মধ্যে বিচ্ছিন্ন করার অনুমতি দেয় এবং একটি স্তরের নিরাপত্তা প্রদান করে কারণ একটি অ্যাপ্লিকেশনের তথ্য অন্য অ্যাপ্লিকেশন দ্বারা অবাধে অ্যাক্সেস করা যায় না। @@ -59,20 +59,19 @@ no_list: true **কন্টেইনার স্থাপনের যুগ:** কনটেইনারগুলি VM-এর মতোই, তবে অ্যাপ্লিকেশনগুলির মধ্যে অপারেটিং সিস্টেম (OS) ভাগ করার জন্য তাদের শিথিল বিচ্ছিন্নতা বৈশিষ্ট্য রয়েছে৷ -অতএব, পাত্রে হালকা বলে মনে করা হয়। একটি VM-এর মতো, একটি কনটেইনারের +অতএব, কন্টেইনারগুলোকে হালকা বলে মনে করা হয়। একটি VM-এর মতো, একটি কনটেইনারের নিজস্ব ফাইল সিস্টেম, CPU ভাগ, মেমরি, প্রক্রিয়া স্থান এবং আরও অনেক কিছু রয়েছে। যেহেতু এগুলি অন্তর্নিহিত অবকাঠামো থেকে আলাদা করা হয়েছে, তারা ক্লাউড এবং OS ডিস্ট্রিবিউশন জুড়ে বহনযোগ্য। -কনটেইনারগুলি জনপ্রিয় হয়ে উঠেছে কারণ তারা অতিরিক্ত সুবিধা প্রদান করে, যেমন: +কন্টেইনারগুলো জনপ্রিয় হয়ে উঠেছে কারণ তারা অতিরিক্ত সুবিধা প্রদান করে, যেমন: -* এজাইল অ্যাপ্লিকেশন তৈরি এবং স্থাপনায়: ভিএম ইমেজ (VM Image) ব্যবহারের তুলনায় কন্টেইনার ইমেজ (Container Image) +* এজাইল (Agile) অ্যাপ্লিকেশন তৈরি এবং স্থাপনায়: ভিএম ইমেজ (VM Image) ব্যবহারের তুলনায় কন্টেইনার ইমেজ (Container Image) তৈরির সহজতা এবং দক্ষতা বেশি। -* ক্রমাগত বিকাশ, একীকরণ এবং স্থাপনা: দ্রুত এবং দক্ষ রোলব্যাকগুলির - সাথে নির্ভরযোগ্য এবং ঘন ঘন কন্টেইনার image তৈরি এবং স্থাপনার - ব্যবস্থা করে (image অপরিবর্তনীয়তার কারণে). +* ক্রমাগত বিকাশ, একীকরণ এবং স্থাপনা: নির্ভরযোগ্য এবং ঘন ঘন + কন্টেইনার ইমেজ তৈরি এবং স্থাপনার জন্য প্রদান করে দ্রুত এবং দক্ষ রোলব্যাকের (ইমেজ অপরিবর্তনীয়তার কারণে) সাথে । * ডেভ (Dev) এবং অপস (Ops) উদ্বেগের বিচ্ছেদ: বিল্ড/রিলিজের সময়ে অ্যাপ্লিকেশন কন্টেইনার ইমেজ তৈরি করে - ডিপ্লয়মেন্টের সময়ের তুলনায়, ফলস্বরূপ অ্যাপ্লিকেশনগুলি অবকাঠামো থেকে বিচ্ছিন্ন হয়। + ডিপ্লয়মেন্টের সময়ের তুলনায়, ফলস্বরূপ অ্যাপ্লিকেশনগুলি অবকাঠামো থেকে বিচ্ছিন্ন হয়। * পর্যবেক্ষণযোগ্যতা: শুধুমাত্র OS-স্তরের তথ্য এবং মেট্রিক্সই নয়, প্রয়োগের স্বাস্থ্য এবং অন্যান্য সংকেতও। * ডেভেলপমেন্ট, টেস্টিং এবং প্রোডাকশন জুড়ে পরিবেশগত সামঞ্জস্য: একটি @@ -84,8 +83,8 @@ OS ডিস্ট্রিবিউশন জুড়ে বহনযোগ্ * ঢিলেঢালাভাবে সংযুক্ত, বিতরণ করা, স্থিতিস্থাপক, মুক্ত মাইক্রো-পরিষেবা: অ্যাপ্লিকেশনগুলিকে ছোট, স্বাধীন টুকরোগুলিতে বিভক্ত করা হয় এবং গতিশীলভাবে স্থাপন ও পরিচালনা করা যায় – একটি বড় একক-উদ্দেশ্য মেশিনে চলমান একটি মনোলিথিক স্ট্যাক নয়।. -* সম্পদ বিচ্ছিন্নতা: অনুমানযোগ্য অ্যাপ্লিকেশন কর্মক্ষমতা। -* সম্পদের ব্যবহার: উচ্চ দক্ষতা এবং ঘনত্ব। +* রিসোর্স আইসোলেশন: অনুমানযোগ্য অ্যাপ্লিকেশন কর্মক্ষমতা। +* রিসোর্স ব্যবহার: উচ্চ দক্ষতা এবং ঘনত্ব। ## আপনার কেন কুবারনেটিস দরকার এবং এটি কী করতে পারে {#why-you-need-kubernetes-and-what-can-it-do} @@ -131,8 +130,8 @@ OS ডিস্ট্রিবিউশন জুড়ে বহনযোগ্ একটি সাধারণ কমান্ডের সাহায্যে, একটি UI সহ, বা স্বয়ংক্রিয়ভাবে CPU ব্যবহারের উপর ভিত্তি করে আপনার অ্যাপ্লিকেশনকে উপরে এবং নীচে স্কেল করুন। * **IPv4/IPv6 ডুয়াল-স্ট্যাক** পড এবং পরিষেবাগুলিতে IPv4 এবং IPv6 ঠিকানাগুলির বরাদ্দ৷ -* **Designed for extensibility** - আপস্ট্রিম সোর্স কোড পরিবর্তন না করে আপনার কুবারনেটিস ক্লাস্টারে বৈশিষ্ট্য যোগ করুন। +* **এক্সটেনসিবিলিটির জন্য ডিজাইন** + আপস্ট্রিম (upstream) সোর্স কোড পরিবর্তন না করে আপনার কুবারনেটিস ক্লাস্টারে বৈশিষ্ট্য যোগ করুন। ## কুবারনেটিস কি নয় @@ -172,7 +171,7 @@ OS ডিস্ট্রিবিউশন জুড়ে বহনযোগ্ ## {{% heading "whatsnext" %}} -* [কুবারনেটিস উপাদান](/docs/concepts/overview/components/) একবার দেখুন -* [কুবারনেটিস এপিআই](/docs/concepts/overview/kubernetes-api/) একবার দেখুন -* [ক্লাস্টার আর্কিটেকচার](/docs/concepts/architecture/) একবার দেখুন -* [শুরু করতে](/docs/setup/) প্রস্তুত আপনি? +* [কুবারনেটিস উপাদান](/bn/docs/concepts/overview/components/) একবার দেখুন +* [কুবারনেটিস এপিআই](/bn/docs/concepts/overview/kubernetes-api/) একবার দেখুন +* [ক্লাস্টার আর্কিটেকচার](/bn/docs/concepts/architecture/) একবার দেখুন +* [শুরু করতে](/bn/docs/setup/) প্রস্তুত আপনি? From e7deded90d7041111780dada2a460c453eb94c01 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Thu, 29 Feb 2024 06:18:08 +0000 Subject: [PATCH 0160/1086] [bn] Localize update of content/bn/docs/concepts/overview/_index.md Signed-off-by: Sajib Adhikary --- content/bn/docs/concepts/overview/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/overview/_index.md b/content/bn/docs/concepts/overview/_index.md index 5a872ffd7c..abbb24723c 100644 --- a/content/bn/docs/concepts/overview/_index.md +++ b/content/bn/docs/concepts/overview/_index.md @@ -4,7 +4,7 @@ description: > কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবাগুলি, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে সহজলভ্য। content_type: concept weight: 20 -card +card: name: concepts weight: 10 anchors: From aa0968a734133eebdfbf96a1be286f911237cd4c Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 29 Feb 2024 23:42:18 +0600 Subject: [PATCH 0161/1086] Update OWNERS_ALIASES --- OWNERS_ALIASES | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index f5d5ebf303..9beecb1853 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -17,10 +17,12 @@ aliases: - seokho-son - tengqm sig-docs-bn-owners: # Admins for Bengali content + - asem-hamid - Imtiaz1234 - mitul3737 - rajibmitra sig-docs-bn-reviews: # PR reviews for Bengali content + - asem-hamid - Imtiaz1234 - mitul3737 - rajibmitra From a67b19e06a9d600f98085ec26780df9639adc26e Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Fri, 1 Mar 2024 19:25:06 +0600 Subject: [PATCH 0162/1086] Delete content/bn/search.md --- content/bn/search.md | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 content/bn/search.md diff --git a/content/bn/search.md b/content/bn/search.md deleted file mode 100644 index ab2978475d..0000000000 --- a/content/bn/search.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -layout: search -title: অনুসন্ধান ফলাফল ---- From 1704886ec23a14cdb406c5526f14fe946d7924ae Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Sat, 2 Mar 2024 08:55:54 +0000 Subject: [PATCH 0163/1086] [bn] Localize content/bn/docs/concepts/overview/_index.md Signed-off-by: Sajib Adhikary --- content/bn/docs/concepts/overview/_index.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/content/bn/docs/concepts/overview/_index.md b/content/bn/docs/concepts/overview/_index.md index abbb24723c..a6311e04a0 100644 --- a/content/bn/docs/concepts/overview/_index.md +++ b/content/bn/docs/concepts/overview/_index.md @@ -68,10 +68,12 @@ OS ডিস্ট্রিবিউশন জুড়ে বহনযোগ্ * এজাইল (Agile) অ্যাপ্লিকেশন তৈরি এবং স্থাপনায়: ভিএম ইমেজ (VM Image) ব্যবহারের তুলনায় কন্টেইনার ইমেজ (Container Image) তৈরির সহজতা এবং দক্ষতা বেশি। -* ক্রমাগত বিকাশ, একীকরণ এবং স্থাপনা: নির্ভরযোগ্য এবং ঘন ঘন - কন্টেইনার ইমেজ তৈরি এবং স্থাপনার জন্য প্রদান করে দ্রুত এবং দক্ষ রোলব্যাকের (ইমেজ অপরিবর্তনীয়তার কারণে) সাথে । -* ডেভ (Dev) এবং অপস (Ops) উদ্বেগের বিচ্ছেদ: বিল্ড/রিলিজের সময়ে অ্যাপ্লিকেশন কন্টেইনার ইমেজ তৈরি করে - ডিপ্লয়মেন্টের সময়ের তুলনায়, ফলস্বরূপ অ্যাপ্লিকেশনগুলি অবকাঠামো থেকে বিচ্ছিন্ন হয়। +* ক্রমাগত বিকাশ, একীকরণ এবং স্থাপনা: নির্ভরযোগ্য এবং ঘন ঘন + কন্টেইনার ইমেজ তৈরি এবং স্থাপনার জন্য প্রদান করে দ্রুত এবং + দক্ষ রোলব্যাকের (ইমেজ অপরিবর্তনীয়তার কারণে) সাথে । +* ডেভ (Dev) এবং অপস (Ops) উদ্বেগের বিচ্ছেদ: বিল্ড/রিলিজের সময়ে + অ্যাপ্লিকেশন কন্টেইনার ইমেজ তৈরি করে ডিপ্লয়মেন্টের সময়ের তুলনায়, + ফলস্বরূপ অ্যাপ্লিকেশনগুলি অবকাঠামো থেকে বিচ্ছিন্ন হয়। * পর্যবেক্ষণযোগ্যতা: শুধুমাত্র OS-স্তরের তথ্য এবং মেট্রিক্সই নয়, প্রয়োগের স্বাস্থ্য এবং অন্যান্য সংকেতও। * ডেভেলপমেন্ট, টেস্টিং এবং প্রোডাকশন জুড়ে পরিবেশগত সামঞ্জস্য: একটি From e080feca7c35db96bacec3eff814754db165376d Mon Sep 17 00:00:00 2001 From: MD TANVIR AHMED <38840252+cloudwithtanvir@users.noreply.github.com> Date: Sat, 2 Mar 2024 15:28:53 +0000 Subject: [PATCH 0164/1086] Completed localization of k8s working with object file --- .../overview/working-with-objects/_index.md | 175 ++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 content/bn/docs/concepts/overview/working-with-objects/_index.md diff --git a/content/bn/docs/concepts/overview/working-with-objects/_index.md b/content/bn/docs/concepts/overview/working-with-objects/_index.md new file mode 100644 index 0000000000..645127c039 --- /dev/null +++ b/content/bn/docs/concepts/overview/working-with-objects/_index.md @@ -0,0 +1,175 @@ +--- +title: কুবারনেটিসে অবজেক্ট +content_type: concept +weight: 10 +description: > + কুবারনেটিস অবজেক্ট হল কুবারনেটিস সিস্টেমে স্থায়ী সত্তা। + কুবারনেটিস আপনার ক্লাস্টারের অবস্থার প্রতিনিধিত্ব করতে এই সত্তাগুলি ব্যবহার করে। + কুবারনেটিস অবজেক্ট মডেল এবং এই বস্তুর সাথে কিভাবে কাজ করতে হয় সে সম্পর্কে জানুন। +simple_list: true +card: + name: concepts + weight: 40 +--- + + + +এই পৃষ্ঠাটি ব্যাখ্যা করে কুবারনেটিস API-তে কুবারনেটিস অবজেক্টগুলি কীভাবে প্রতিনিধিত্ব করা হয় এবং +আপনি কিভাবে তা `.yaml` ফরম্যাটে প্রকাশ করতে পারেন। + + + +## কুবারনেটিস অবজেক্ট বোঝা {#kubernetes-objects} + +*কুবারনেটিস অবজেক্ট* হল কুবারনেটিস সিস্টেমের সত্তা সংরক্ষিত এন্টিটিগুলি। কুবারনেটিস এই +এন্টিটিগুলি ব্যবহার করে আপনার ক্লাস্টারের অবস্থা প্রকাশ করতে। বিশেষভাবে, তারা বর্ণনা করতে পারে: + +- কোন কন্টেনার অ্যাপ্লিকেশন কি রান করছে (এবং কোন নোডগুলিতে) +- ঐ অ্যাপ্লিকেশনগুলির জন্য উপলব্ধ সম্পদ +- ঐ অ্যাপ্লিকেশনগুলির কিভাবে ব্যবহার করতে হবে, উদাহরণস্বরূপ পুনরারম্ভন নীতি, আপগ্রেড, এবং ত্রুটি সহ্যতা + +একটি কুবারনেটিস অবজেক্ট হল একটি "উদ্দেশ্যের রেকর্ড" - একবার আপনি অবজেক্ট তৈরি করে দিলে, +কুবারনেটিস সিস্টেম সরাসরি এই অবজেক্টটি থাকার নিশ্চয়তার জন্য কাজ করবে। অবজেক্ট তৈরি করে +আপনি সাধারণত কুবারনেটিস সিস্টেমকে বলে দিচ্ছেন যে আপনার ক্লাস্টারের ওয়ার্কলোড কি হবে; এটা +হল আপনার ক্লাস্টারের *কাঙ্ক্ষিত অবস্থা*। + +কুবারনেটিস অবজেক্টগুলির সাথে কাজ করতে - তা তৈরি, পরিবর্তন করতে বা মুছতে - আপনার +[কুবারনেটিস API](/docs/concepts/overview/kubernetes-api/) ব্যবহার করতে হবে। উদাহরণস্বরূপ, +যখন আপনি `kubectl` কমান্ড-লাইন ইন্টারফেস ব্যবহার করেন, তখন CLI আপনার জন্য প্রয়োজনীয় +কুবারনেটিস API কল করে। আপনি একটি [Client Libraries](/docs/reference/using-api/ +client-libraries/) ব্যবহার করে নিজের প্রোগ্রামে কুবারনেটিস API সরাসরি ব্যবহার করতে পারেন। + +### অবজেক্ট স্পেক এবং স্ট্যাটাস + +প্রায় সব কুবারনেটিস অবজেক্টের একটি `spec` এবং একটি `status` নেস্টেড অবজেক্ট ফিল্ড রয়েছে +যা অবজেক্টের কনফিগারেশন নিয়ন্ত্রণ করে: অবজেক্টের _`spec`_ এবং _`status`_। +যে অবজেক্টগুলির `spec` থাকে, আপনার অবজেক্ট তৈরি করতে এটা নির্ধারণ করতে হবে +যখন অবজেক্ট তৈরি করছেন, +যে কোন রিসোর্সের বৈশিষ্ট্য বর্ণনা প্রদান করে: এর _কাঙ্ক্ষিত অবস্থা_। + +`status` অবজেক্টের _বর্তমান অবস্থা_ বর্ণনা করে, যা কুবারনেটিস সিস্টেম এবং এর উপাদানগুলি +প্রদান এবং আপডেট করে। কুবারনেটিস +{{< glossary_tooltip text="control plane" term_id="control-plane" >}} +সরাসরি এবং সক্রিয়ভাবে প্রতিটি অবজেক্টের +বর্তমান অবস্থা পরিচালনা করে যাতে আপনি প্রদত্ত অবস্থা মিলে। + +উদাহরণস্বরূপ: কুবারনেটিসে, একটি ডিপ্লয়মেন্ট একটি অবজেক্ট যা আপনার ক্লাস্টারে চলমান একটি +অ্যাপ্লিকেশন প্রতিনিধিত্ব করতে পারে। ডিপ্লয়মেন্ট তৈরি করতে যখন আপনি +ডিপ্লয়মেন্ট তৈরি করেন, আপনি ডিপ্লয়মেন্ট `spec` সেট করতে পারেন যে ় +আপনি চাইছেন অ্যাপ্লিকেশনের তিনটি রিপ্লিকা চলমান থাকুক। +কুবারনেটিস সিস্টেম ডিপ্লয়মেন্ট স্পেক পড়ে এবং আপনার প্রদত্ত ডিপ্লয়মেন্ট +এর তিনটি ইনস্ট্যান্স চালু করে, এই স্ট্যাটাস আপনার স্পেক অনুসারে আপডেট করে। +যদি সেই ইনস্ট্যান্সগুলোর মধ্যে কোনওটি ব্যর্থ হয় (একটি স্ট্যাটাস পরিবর্তন), +কুবারনেটিস সিস্টেম স্পেক এবং স্ট্যাটাস মধ্যে পার্থক্যের প্রতিক্রিয়া দিয়ে একটি +সংশোধন করে এই ক্ষেত্রে, একটি প্রতিস্থাপন ইনস্ট্যান্স চালু করে। + +বিস্তারিত তথ্যের জন্য অবজেক্ট স্পেক, স্ট্যাটাস এবং মেটাডেটা দেখুন, +[Kubernetes API Conventions](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md). + +### একটি কুবারনেটিস অবজেক্ট বর্ণনা + +যখন আপনি কুবারনেটিসে একটি অবজেক্ট তৈরি করছেন, আপনাকে অবজেক্ট স্পেক উপায় +যা দরকার তার কাঙ্ক্ষিত অবস্থা বর্ণনা করে এবং অবজেক্ট সম্পর্কে +কিছু মৌলিক তথ্য (যেমন নাম) প্রদান করতে হবে। যখন আপনি অবজেক্ট তৈরি +করতে কুবারনেটিস API ব্যবহার করেন (এটা সরাসরি বা `kubectl` এর মাধ্যমে), +তখন ঐ API অনুরোধটি এই তথ্যকে একটি JSON রিকোয়েস্ট বডি হিসেবে অন্তর্ভুক্ত করতে হবে। +সাধারণত, আপনি ম্যানিফেস্ট নামে ফাইলে তথ্য সরবরাহ করেন (আপনি যদি চান তবে আপনি JSON ফরম্যাট +ব্যবহার করতে পারেন এই ম্যানিফেস্টগুলির জন্য নিয়মিত হতে হবে)। `kubectl` এর মতো টুলগুলি +HTTP অনুরোধের সময় ম্যানিফেস্ট থেকে তথ্যকে JSON বা অন্য যে কোনও সমর্থিত সিরিয়ালাইজেশন ফরম্যাটে রূপান্তর করে। + +এখানে একটি উদাহরণ ম্যানিফেস্ট দেওয়া হল একটি কুবারনেটিস ডিপ্লয়মেন্টের জন্য প্রয়োজনীয় +ক্ষেত্রগুলি এবং অবজেক্ট স্পেকের জন্যের একটি নমুনা: + +{{% code_sample file="application/deployment.yaml" %}} + +একটি উপরের মতো ম্যানিফেস্ট ফাইল ব্যবহার করে একটি ডিপ্লয়মেন্ট তৈরি করার একটি উপায় হল +[`kubectl apply`](/docs/reference/generated/kubectl/kubectl-commands#apply) কমান্ড ব্যবহার +করা, `kubectl` এর কমান্ড-লাইন ইন্টারফেসে `yaml` ফাইলটি আর্গুমেন্ট হিসেবে পাঠানো। একটি উদাহরণ: + +```shell +kubectl apply -f https://k8s.io/examples/application/deployment.yaml +``` + +আউটপুট এর অনুরূপ: + +``` +deployment.apps/nginx-deployment created +``` + + +### প্রয়োজনীয় ক্ষেত্র + +আপনার কুবারনেটিস অবজেক্ট এর জন্য ম্যানিফেস্ট (YAML বা JSON ফাইল) এ নিম্নলিখিত ক্ষেত্রগুলির জন্য মান নির্ধারণ করতে হবে: + +* `apiVersion` - আপনি কোন ভার্সনের কুবারনেটিস API ব্যবহার করছেন তা উল্লেখ করতে হবে +* `kind` - আপনি কোন ধরনের অবজেক্ট তৈরি করতে চান তা উল্লেখ করতে হবে +* `metadata` - অবজেক্ট যে সাহায্য করে অনন্যভাবে সনাক্ত করা যায়, যেমন `name` স্ট্রিং, `UID`, এবং ঐচ্ছিক `namespace` +* `spec` - অবজেক্টের জন্য আপনি কি অবস্থা চান + +অবজেক্ট স্পেকের নির্দিষ্ট বিন্যাস প্রতিটি Kubernetes অবজেক্টের জন্য বিভিন্ন এবং এই বিশিষ্ট +ফিল্ডগুলি সহজ। [Kubernetes API রেফারেন্স](/docs/reference/kubernetes-api/) +এই অবজেক্টের সমস্ত অবজেক্টের জন্য স্পেক ফরম্যাট খুঁজে পাওয়ার সাহায্য করতে পারে। + +উদাহরণস্বরূপ, দেখুন [`spec` ফিল্ড](/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec) +Pod API রেফারেন্স এর জন্য। +প্রতিটি Pod এর জন্য, `.spec` ফিল্ড পড় এবং এর অবস্থার জন্য নির্দিষ্ট পড়ে বসে (পরিমাণ এবং +পড়ের মধ্যে কন্টেনার ইমেজের নাম সহ)। +আরও একটি অবজেক্ট স্পেসিফিকেশনের উদাহরণ হল +[`spec` ফিল্ড](/docs/reference/kubernetes-api/workload-resources/stateful-set-v1/#StatefulSetSpec) +StatefulSet API এর জন্য। StatefulSet এর জন্য, `.spec` ফিল্ড নির্দিষ্ট করে এবং সেট করে +এর অবস্থা। +StatefulSet এর `.spec` এর মধ্যে একটি [template](/docs/concepts/workloads/pods/#pod-templates) +পড় অবজেক্ট স্থাপনাকারী পড় প্রদান করে যা +StatefulSet স্পেসিফিকেশন পূরণ করার জন্য অনুমতি দেয়। +অন্যান্য প্রকারের অবজেক্ট গুলির জন্য বিভিন্ন `.status` থাকতে পারে; আবার, API রেফারেন্স পৃষ্ঠাগুলি +এই `.status` ফিল্ডের গঠন এবং এর প্রত্যেক বিভিন্ন প্রকারের অবজেক্টের জন্য তার বিষয়বস্তু বিবরণ করে। + +{{< note >}} +[YAML কনফিগারেশনের সেরা প্রথাগুলি](/docs/concepts/configuration/overview/) এক্ষেত্রে অতিরিক্ত +তথ্য দেওয়া আছে। +{{< /note >}} + +## সার্ভার সাইড ফিল্ড ভেরিফিকেশন + +Kubernetes v1.25 থেকে শুরু করে, API সার্ভার সার্ভার সাইড +[field validation](/docs/reference/using-api/api-concepts/#field-validation) +যা অব্যক্ত বা পুনরায় ফিল্ড অনুমান করে একটি অবজেক্টে। এটি সমস্ত কার্যকারিতা প্রদান করে +`kubectl --validate` এর সার্ভার সাইড এ কর্মক্ষমতা। + +`kubectl` টুলটি ব্যবহার করে `--validate` ফ্ল্যাগ ব্যবহার করে ফিল্ড ভেরিফিকেশনের স্তর সেট করে। এটি গ্রহণ করে +মান `ignore`, `warn`, এবং `strict` এবং এটি `true` (যুক্ত অর্থ `strict`) +এবং `false` (যুক্ত অর্থ `ignore`) মান গ্রহণ করে। `kubectl` এর ডিফল্ট ভেরিফিকেশন সেটিং হল `--validate=true`। + +`Strict` +: সখ্য ফিল্ড ভেরিফিকেশন, ভেরিফিকেশন ব্যর্থ হওয়ায় ত্রুটি করে + +`Warn` +: ফিল্ড ভেরিফিকেশন করা হয়, কিন্তু ত্রুটিগুলি একটি বিরোধ হিসেবে উল্লেখ করা হয় অবশ্য নয় অনুরোধ ব্যর্থ হতে + +`Ignore` +: কোনো সার্ভার সাইড ফিল্ড ভেরিফিকেশন করা হয় না + +যখন `kubectl` এর একটি API সার্ভারে সংযোগ করতে পারে না যে কোন ফিল্ড ভেরিফিকেশন সাপোর্ট করে তখন এটি ফেলে যায় +ক্লায়েন্ট-সাইড ভেরিফিকেশন ব্যবহার করা হয়। কুবারনেটিস 1.27 এবং তারপরের সংস্করণ সবসময় ফিল্ড ভেরিফিকেশন প্রদান করে; +পুরাতন কুবারনেটিস রিলিসেগুলিতে এটি হতে পারে না। যদি আপনার ক্লাস্টার v1.27 এর চেয়ে পুরানো হয় তবে এপনার কুবারনেটিস +সংস্করণের জন্য ডকুমেন্টেশন চেক করুন। + +## {{% heading "whatsnext" %}} + +যদি আপনি নতুন কুবারনেটিসে এসেছেন, তাহলে নিম্নলিখিত বিষয়গুলি সম্পর্কে আরো পড়ুন: + +* [Pods](/docs/concepts/workloads/pods/) যা হলে সবচেয়ে গুরুত্বপূর্ণ মৌলিক কুবারনেটিস অবজেক্ট। +* [Deployment](/docs/concepts/workloads/controllers/deployment/) অবজেক্টগুলি। +* [Controllers](/docs/concepts/architecture/controller/) কুবারনেটিসে। +* [kubectl](/docs/reference/kubectl/) এবং [kubectl কমান্ড](/docs/reference/generated/kubectl/kubectl-commands)। + +[Kubernetes Object Management](/docs/concepts/overview/working-with-objects/object-management/) +`kubectl` ব্যবহার করে অবজেক্ট পরিচালনা করার উপায়গুলি বিস্তারিত ভাবে বর্ণনা করে। +আপনার কাছে এটি নেই তাহলে [kubectl ইনস্টল করুন](/docs/tasks/tools/#kubectl) যদি আগে থেকে না থাকে। + +কুবারনেটিস API সাধারণভাবে সম্পর্কে জানতে, পড়ুন: + +* [Kubernetes API overview](/docs/reference/using-api/) + +কুবারনেটিসে অবজেক্টগুলির বিস্তারিত জানতে, এই বিভাগে অন্যান্য পৃষ্ঠাগুলি পড়ুন: + \ No newline at end of file From 2027b3e1f27cf954658da2b6a92fe85ec0be897a Mon Sep 17 00:00:00 2001 From: pranav-pandey0804 Date: Thu, 7 Mar 2024 14:49:47 +0530 Subject: [PATCH 0165/1086] retitled section on home page --- content/hi/docs/home/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/hi/docs/home/_index.md b/content/hi/docs/home/_index.md index 090b7c752b..14dec042ef 100644 --- a/content/hi/docs/home/_index.md +++ b/content/hi/docs/home/_index.md @@ -55,7 +55,7 @@ cards: button: प्रलेखन में योगदान करें button_path: /docs/contribute - name: release-notes - title: कुबेरनेट्स रिलीज नोट्स + title: कुबेरनेट्स डाउनलोड करें description: यदि आप कुबेरनेट्स इंस्टॉल कर रहे हैं या नवीनतम संस्करण में अपग्रेड कर रहे हैं, तो वर्तमान रिलीज़ नोट्स देखें। button: कुबेरनेट्स डाउनलोड करें button_path: "/docs/setup/release/notes" From 4dde8759cc3a5c669357804566d3ad68220e2f23 Mon Sep 17 00:00:00 2001 From: stkasulanati Date: Thu, 7 Mar 2024 22:20:44 +0530 Subject: [PATCH 0166/1086] Update networking.md Replaced the word "between" with among, as there can more than two applications sharing the same machines. --- content/en/docs/concepts/cluster-administration/networking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/cluster-administration/networking.md b/content/en/docs/concepts/cluster-administration/networking.md index 9cf1579bee..adb4d46b06 100644 --- a/content/en/docs/concepts/cluster-administration/networking.md +++ b/content/en/docs/concepts/cluster-administration/networking.md @@ -19,7 +19,7 @@ problems to address: -Kubernetes is all about sharing machines between applications. Typically, +Kubernetes is all about sharing machines among applications. Typically, sharing machines requires ensuring that two applications do not try to use the same ports. Coordinating ports across multiple developers is very difficult to do at scale and exposes users to cluster-level issues outside of their control. From c01bc83a7952ac37d1a19ada83922b7ac8dea64a Mon Sep 17 00:00:00 2001 From: Saiful Islam <136887493+saifulshark@users.noreply.github.com> Date: Sat, 9 Mar 2024 00:38:33 +0600 Subject: [PATCH 0167/1086] _index.md(Updated) --- content/bn/releases/_index.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/content/bn/releases/_index.md b/content/bn/releases/_index.md index 470635ff23..23c33d60ee 100644 --- a/content/bn/releases/_index.md +++ b/content/bn/releases/_index.md @@ -2,19 +2,24 @@ linktitle: প্রকাশের ইতিহাস title: প্রকাশনাসমূহ type: docs +layout: প্রকাশ-তথ্য +notoc: সত্য --- - -কুবারনেটিস প্রজেক্ট সাম্প্রতিক তিনটি পর্যন্ত ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}) ছোট রিলিজের জন্য রিলিজ শাখা বজায় রাখে। কুবারনেটিস 1.19 এবং নতুন ভার্সন আনুমানিক 1 বছরের প্যাচ সমর্থন পায়। কুবারনেটিস 1.18 এবং তার বেশি বয়সীরা প্রায় 9 মাস প্যাচ সমর্থন পেয়েছে। +কুবারনেটিস প্রজেক্ট সাম্প্রতিক তিনটি পর্যন্ত ছোট রিলিজের জন্য রিলিজ শাখা বজায় রাখে। +({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}) +কুবারনেটিস 1.19 এবং নতুন ভার্সন +[আনুমানিক 1 বছরের প্যাচ সাপোর্ট পায়(patch support)](/releases/patch-releases/#support-period) +কুবারনেটিস 1.18 এবং তার বেশি বয়সীরা প্রায় 9 মাস প্যাচ সাপোর্ট (patch support) পেয়েছে। কুবারনেটিস সংস্করণ **x.y.z** হিসাবে প্রকাশ করা হয়, -যেখানে **x** হল প্রধান সংস্করণ, **y** হল অপ্রধান সংস্করণ এবং **z** হল প্যাচ সংস্করণ, যা [শব্দার্থিক সংস্করণ](https://semver.org/) পরিভাষা অনুসরণ করে হয়। +যেখানে **x** হল মুখ্য সংস্করণ, **y** হল গৌণ সংস্করণ এবং **z** হল প্যাচ ভার্সন (patch version), +যা [শব্দার্থিক সংস্করণ](https://semver.org/) পরিভাষা অনুসরণ করে হয়। অতিরিক্ত তথ্যসমূহ [version skew policy](/releases/version-skew-policy/) নথিতে সংরক্ষিত রয়েছে। - ## প্রকাশের ইতিহাস @@ -23,6 +28,6 @@ type: docs ## আসন্ন রিলিজ -কুবারনেটিস মুক্তিপ্রকাশ এর আসন্ন **{{< skew nextMinorVersion >}}** [সময়সূচী](https://github.com/kubernetes/sig-release/tree/master/releases/release-{{< skew nextMinorVersion >}}) চেক করুন! +কুবারনেটিস রিলিজ এর আসন্ন **{{< skew nextMinorVersion >}}** [সময়সূচী](https://github.com/kubernetes/sig-release/tree/master/releases/release-{{< skew nextMinorVersion >}}) চেক করুন! ## সহায়ক রিসোর্স From 847ea4971bbb6c870ae176e1ae4fd101878c4792 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Sat, 9 Mar 2024 03:59:50 +0600 Subject: [PATCH 0168/1086] localize _index.md draft v1 of localize --- .../bn/docs/concepts/workloads/pods/_index.md | 400 ++++++++++++++++++ 1 file changed, 400 insertions(+) diff --git a/content/bn/docs/concepts/workloads/pods/_index.md b/content/bn/docs/concepts/workloads/pods/_index.md index e69de29bb2..61609f004e 100644 --- a/content/bn/docs/concepts/workloads/pods/_index.md +++ b/content/bn/docs/concepts/workloads/pods/_index.md @@ -0,0 +1,400 @@ +--- +reviewers: +- erictune +title: Pods +content_type: concept +weight: 10 +no_list: true +--- + + + +_পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্রতম স্থাপনযোগ্য একক যা আপনি কুবারনেটিসে তৈরি এবং পরিচালনা করতে পারেন। + +একটি _পড_ (তিমি বা মটর শুঁটির একটি পডের মতো) এক বা একাধিকটির একটি গ্রুপ +{{< glossary_tooltip text="কন্টেইনার" term_id="container" >}}, শেয়ার্ড স্টোরেজ এবং নেটওয়ার্ক রিসোর্স গুলির সাথে, এবং কন্টেইনার কীভাবে চালানো যায় তার জন্য একটি নির্দিষ্টকরণ। একটি পডের সামগ্রী সর্বদা সহ-অবস্থিত এবং +সহ-নির্ধারিত, এবং একটি শেয়ার্ড প্রসঙ্গে চালে। একটি পড মডেল একটি +অ্যাপ্লিকেশন-নির্দিষ্ট "লজিক্যাল হোস্ট": এটিতে এক বা একাধিক অ্যাপ্লিকেশন রয়েছে +কন্টেইনার যা তুলনামূলকভাবে শক্তভাবে মিলিত হয়। +নন-ক্লাউড প্রেক্ষাপটে, একই ভৌত (ফিজিক্যাল) বা ভার্চুয়াল মেশিনে সঞ্চালিত অ্যাপ্লিকেশনগুলি একই লজিক্যাল হোস্টে নির্বাহিত ক্লাউড অ্যাপ্লিকেশনগুলির সাথে সাদৃশ্যপূর্ণ। + +পাশাপাশি অ্যাপ্লিকেশন কন্টেইনার, একটি পড থাকতে পারে +[init containers](/docs/concepts/workloads/pods/init-containers/) যে চলমান +পড স্টার্টআপের সময়। ডিবাগ করার জন্য আপনি ইনজেকশনও দিতে পারেন +[ephemeral containers](/docs/concepts/workloads/pods/ephemeral-containers/) +যদি আপনার ক্লাস্টার এটি অফার করে। + + + +## পড কি? + +{{< note >}} +ক্লাস্টারের প্রতিটি নোডে আপনাকে একটি [কন্টেইনার রানটাইম](/docs/setup/production-environment/container-runtimes/) ইনস্টল +করতে হবে যাতে পডগুলি সেখানে চলতে পারে। +{{< /note >}} + +একটি পডের শেয়ার্ড প্রসঙ্গ হল লিনাক্স নেমস্পেস, cgroups এবং +বিচ্ছিন্নতার সম্ভাব্য অন্যান্য দিক - একই জিনিস যা একটি {{< glossary_tooltip text="container" term_id="container" >}} বিচ্ছিন্ন করে। একটি পডের প্রেক্ষাপটের মধ্যে, পৃথক অ্যাপ্লিকেশন থাকতে পারে +আরও উপ-বিচ্ছিন্নতা প্রয়োগ করা হয়েছে। + +একটি পড শেয়ার্ড নেমস্পেস এবং শেয়ার্ড ফাইল সিস্টেম ভলিউম সহ কন্টেইনারগুলির সেটের অনুরূপ। + +কুবারনেটিস ক্লাস্টারের পড দুটি প্রধান উপায়ে ব্যবহৃত হয়: + +* **পড যা একটি একক কন্টেইনার চলে**" এক-কন্টেইনার-প্রতি-পড" মডেলটি + কুবারনেটিসের সবচেয়ে সাধারণ ব্যবহার; এই ক্ষেত্রে, আপনি একটি একক কন্টেইনারর চারপাশে একটি মোড়ক হিসাবে + একটি পডকে ভাবতে পারেন; কুবারনেটিস সরাসরি কন্টেইনারগুলি পরিচালনা করার পরিবর্তে + পডগুলি পরিচালনা করে। +* **পডগুলি যা একাধিক কন্টেইনার চলে যা একসাথে কাজ করা দরকার**। একটি পড + [একাধিক সহ-অবস্থিত কন্টেইনার](#how-pods-manage-multiple-containers) + দ্বারা গঠিত একটি অ্যাপ্লিকেশনকে এনক্যাপসুলেট করতে পারে + যেগুলি শক্তভাবে সংযুক্ত এবং সম্পদ ভাগ করতে হবে৷ এই সহ-অবস্থিত কন্টেইনারগুলি + একটি একক সমন্বিত ইউনিট গঠন করে। + + একটি একক পডে একাধিক সহ-অবস্থিত এবং সহ-পরিচালিত পাত্রে গোষ্ঠীবদ্ধ করা একটি + অপেক্ষাকৃত উন্নত ব্যবহারের ক্ষেত্রে। আপনার এই প্যাটার্নটি কেবলমাত্র নির্দিষ্ট ক্ষেত্রে ব্যবহার করা উচিত + যেখানে আপনার পাত্রে শক্তভাবে সংযুক্ত করা হয়েছে। + + প্রতিলিপি প্রদানের জন্য আপনাকে একাধিক পাত্র চালানোর দরকার নেই (স্থিতিস্থাপকতার জন্য + বা ক্ষমতা); আপনার একাধিক প্রতিলিপি প্রয়োজন হলে, দেখুন + [ওয়ার্কলোড ম্যানেজমেন্ট](/docs/concepts/workloads/controllers/)। + +## Using Pods + +নিচে একটি পডের উদাহরণ দেওয়া হল যেটিতে একটি কন্টেইনার রয়েছে যা `nginx:1.14.2` ছবিটি চালাচ্ছে। + +{{% code_sample file="pods/simple-pod.yaml" %}} + +উপরে দেখানো পড তৈরি করতে, নিম্নলিখিত কমান্ডটি চালান: +```shell +kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml +``` + +পড সাধারণত সরাসরি তৈরি করা হয় না এবং ওয়ার্কলোড রিসোর্স ব্যবহার করে তৈরি করা হয়। +কিভাবে পডগুলিব্যবহার করা হয় সে সম্পর্কে আরও তথ্যের জন্য [Working with Pods](#working-with-pods) দেখুন +ওয়ার্কলোড রিসোর্স সহ। + +### Workload resources for managing pods + +সাধারণত আপনাকে সরাসরি পড তৈরি করতে হবে না, এমনকি সিঙ্গেলটন পডও।পরিবর্তে,ওয়ার্কলোড রিসোর্স গুলি ব্যবহার করে সেগুলি তৈরি করুন যেমন {{< glossary_tooltip text="স্থাপনা" +term_id="deployment" >}} বা {{< glossary_tooltip text="চাকরি" term_id="job" >}}। +আপনার পডের অবস্থা ট্র্যাক করার প্রয়োজন হলে, বিবেচনা করুন +{{< glossary_tooltip text="StatefulSet" term_id="statefulset" >}} রিসোর্স। + + +প্রতিটি পড একটি প্রদত্ত অ্যাপ্লিকেশনের একটি একক দৃষ্টান্ত চালানোর জন্য বোঝানো হয়। যদি তুমি চাও +আপনার অ্যাপ্লিকেশনকে অনুভূমিকভাবে স্কেল করুন (আরো দৃষ্টান্ত চালানোর মাধ্যমে আরো সামগ্রিক রিসোর্স +প্রদান করতে), আপনার একাধিক পড ব্যবহার করা উচিত, প্রতিটি উদাহরণের জন্য একটি। +Kubernetes-এ, এটিকে সাধারণত _প্রতিলিপি_ হিসাবে উল্লেখ করা হয়। +প্রতিলিপিকৃত পডগুলি সাধারণত একটি কাজের চাপ রিসোর্স এবং এর +{{< glossary_tooltip text="controller" term_id="controller" >}} দ্বারা একটি গ্রুপ হিসাবে তৈরি এবং পরিচালিত হয়। + +দেখুন [পড এবং কন্ট্রোলার](#pods-and-controllers) আরও তথ্যের জন্য কিভাবে +কুবারনেটিস অ্যাপ্লিকেশন বাস্তবায়নের জন্য ওয়ার্কলোড রিসোর্স এবং তাদের কন্ট্রোলার ব্যবহার করে +স্কেলিং এবং অটো-হিলিং। + +পডগুলি স্থানীয়ভাবে তাদের উপাদান পাত্রের জন্য দুটি ধরণের ভাগ করা সংস্থান সরবরাহ করে: +[নেটওয়ার্কিং](#pod-networking) এবং [স্টোরেজ](#pod-storage)। + + +## পডগুলি নিয়ে কাজ করা + +আপনি খুবই কম সময় সরাসরি কুবারনেটিস-এ এমনকি সিঙ্গেলটন পডগুলি-তে পৃথক পড তৈরি করবেন। এই +কারণ পডগুলি তুলনামূলকভাবে অল্পক্ষণস্থায়ী, নিষ্পত্তিযোগ্য হিসাবে ডিজাইন করা হয়েছে। যখন +একটি পড তৈরি করা হয় (প্রত্যক্ষভাবে আপনার দ্বারা বা পরোক্ষভাবে একটি +{{}}) দ্বারা, নতুন পডটি +আপনার ক্লাস্টারে একটি {{< glossary_tooltip term_id="node" >}} চালানোর জন্য নির্ধারিত হয়। +পডটি সেই নোডে থাকে যতক্ষণ না পড এক্সিকিউশন শেষ করে, পড অবজেক্টটি মুছে ফেলা হয়, +পডটিকে রিসোর্সের অভাবের জন্য *উচ্ছেদ* করা হয়, বা নোড ব্যর্থ হয়। + +{{< note >}} +একটি পডের মধ্যে একটি কন্টেইনার পুনরায় চালু করা সাথে একটি পড পুনরায় চালু করার বিভ্রান্ত হওয়া উচিত নয়। একটি পড +একটি প্রক্রিয়া নয়, কিন্তু কন্টেইনার(গুলি) চালানোর জন্য একটি পরিবেশ। এটি মুছে ফেলা না হওয়া পর্যন্ত +একটি পড টিকে থাকে। +{{< /note >}} + +একটি পডের নাম অবশ্যই একটি বৈধ +[DNS সাবডোমেন](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names) +মান হতে হবে, তবে এটি পড হোস্টনামের জন্য অপ্রত্যাশিত ফলাফল তৈরি করতে পারে। সর্বোত্তম সামঞ্জস্যের জন্য, +নামের আরো সীমাবদ্ধ নিয়ম অনুসরণ করা উচিত এর জন্য +[DNS লেবেল](/docs/concepts/overview/working-with-objects/names#dns-label-names)। + +### পড অপারেটিং সিস্টেম(OS) + +{{< feature-state state="stable" for_k8s_version="v1.25" >}} + +আপনি যে OS-এ পড চালাতে চান তা নির্দেশ করার জন্য আপনাকে `.spec.os.name` যে কোনো একটি ক্ষেত্রে `windows` +বা `linux`-তে সেট করতে হবে। এই দুটিই একমাত্র অপারেটিং সিস্টেম যা এখন +কুবারনেটিস দ্বারা সমর্থিত। ভবিষ্যতে, এই তালিকা প্রসারিত করা হতে পারে। + +কুবারনেটিস v{{< skew currentVersion >}} -এ, এই ক্ষেত্রের জন্য আপনি যে +মান সেট করেছেন তা পডগুলির জন্য {{< glossary_tooltip text="scheduling" term_id="kube-scheduler" >}} কোনও প্রভাব ফেলবে না ৷ +সেট করা `.spec.os.name` পড অপারেটিং সিস্টেমকে প্রামাণিকভাবে +সনাক্ত করতে সহায়তা করে এবং বৈধতার জন্য ব্যবহৃত হয়। Kubelet একটি পড চালাতে প্রত্যাখ্যান করে যেখানে আপনি একটি পড +এর অপারেটিং সিস্টেম নির্দিষ্ট করেছেন, যদি এটি সেই নোডের অপারেটিং সিস্টেমের মতো না হয় +যেখানে সেই Kubelet চলছে। +[পডের নিরাপত্তা মান](/docs/concepts/security/pod-security-standards/) সেই অপারেটিং সিস্টেমের সাথে প্রাসঙ্গিক নয় +এমন নীতি প্রয়োগ করা এড়াতে এই ক্ষেত্রটিও ব্যবহার করা হয়৷ + +### পড এবং কন্ট্রোলার + +আপনি আপনার জন্য একাধিক পড তৈরি এবং পরিচালনা করতে ওয়ার্কলোড রিসোর্স ব্যবহার করতে পারেন। পড ব্যর্থতার +ক্ষেত্রে রিসোর্স জন্য একটি কন্ট্রোলার প্রতিলিপি এবং রোলআউট এবং স্বয়ংক্রিয় +নিরাময় পরিচালনা করে। উদাহরণস্বরূপ, যদি একটি নোড ব্যর্থ হয়, একটি কন্ট্রোলার লক্ষ্য করে যে +সেই নোডের পডগুলি কাজ করা বন্ধ করে দিয়েছে এবং একটি প্রতিস্থাপন পড তৈরি করে। সময়সূচী একটি সুস্থ নোডে +প্রতিস্থাপন পড স্থাপন করে। + +এখানে কাজের চাপ রিসোর্সগুলির কিছু উদাহরণ রয়েছে যা এক বা একাধিক পডগুলি পরিচালনা করে: + +* {{< glossary_tooltip text="Deployment(ডিপলয়ম্যান্টস)" term_id="deployment" >}} +* {{< glossary_tooltip text="StatefulSet(স্টেটফুল সেট)" term_id="statefulset" >}} +* {{< glossary_tooltip text="DaemonSet(DaemonSets)" term_id="daemonset" >}} + +### পড টেমপ্লেট + +রিসোর্সগুলির জন্য {{< glossary_tooltip text="workload" term_id="workload">}} কন্ট্রোলাররা একটি _পড টেমপ্লেট_ থেকে পড তৈরি করে +এবং আপনার পক্ষে সেই পডগুলি পরিচালনা করে৷ + +পড টেমপ্লেটগুলি হল পড তৈরির জন্য স্পেসিফিকেশন, এবং ওয়ার্কলোড রিসোর্সগুলির অন্তর্ভুক্ত যেমন +[ডিপলয়ম্যান্টস](/docs/concepts/workloads/controllers/deployment/), +[জব](/docs/concepts/workloads/controllers/job/), এবং +[DaemonSets](/docs/concepts/workloads/controllers/daemonset/)। + +ওয়ার্কলোড রিসোর্সের প্রতিটি কন্ট্রোলার প্রকৃত পড তৈরি করতে ওয়ার্কলোড অবজেক্টের ভিতরে `পড টেম্পলেট` +ব্যবহার করে। `PodTemplate` হল আপনার অ্যাপ চালানোর জন্য যে কোনো ওয়ার্কলোড রিসোর্স ব্যবহার +করা সেই কাঙ্ক্ষিত অবস্থার অংশ। + +নিচের নমুনাটি একটি সাধারণ কাজের জন্য একটি `টেমপ্লেট` সহ একটি ম্যানিফেস্ট যা একটি কন্টেইনার শুরু করে। +সেই পডের কন্টেইনারটি একটি বার্তা প্রিন্ট করে তারপর বিরতি দেয়। + +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: hello +spec: + template: + # This is the pod template + spec: + containers: + - name: hello + image: busybox:1.28 + command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600'] + restartPolicy: OnFailure + # The pod template ends here +``` + +পড টেমপ্লেট পরিবর্তন করা বা একটি নতুন পড টেমপ্লেটে স্যুইচ করা আগে থেকেই বিদ্যমান পডগুলিতে +সরাসরি প্রভাব ফেলে না। আপনি যদি কোনও ওয়ার্কলোড রিসোর্সের জন্য পড টেমপ্লেট পরিবর্তন করেন তবে সেই রিসোর্সটি এর +প্রতিস্থাপন পড তৈরি করতে হবে যা আপডেট করা টেমপ্লেট ব্যবহার করে। + +উদাহরণস্বরূপ, StatefulSet কন্ট্রোলার নিশ্চিত করে যে চলমান পডগুলি প্রতিটি StatefulSet অবজেক্টের +বর্তমান পড টেমপ্লেটের একই ।আপনি যদি স্টেটফুলসেট ইডিট করেন তার পড টেমপ্লেট পরিবর্তন করতে, +স্টেটফুলসেট আপডেট করা টেমপ্লেটের উপর ভিত্তি করে নতুন পড তৈরি করা শুরু করে। +অবশেষে, সমস্ত পুরানো পড নতুন পড দিয়ে প্রতিস্থাপিত হয় এবং আপডেট সম্পূর্ণ হয়। + +প্রতিটি ওয়ার্কলোড রিসোর্স পড টেমপ্লেটে পরিবর্তনগুলি পরিচালনা করার জন্য নিজস্ব নিয়মগুলি প্রয়োগ করে৷ +আপনি যদি বিশেষভাবে স্টেটফুলসেট সম্পর্কে আরও পড়তে চান, স্টেটফুলসেট বেসিক টিউটোরিয়ালটিতে +[আপডেট কৌশল](/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets) পড়ুন। + +নোডগুলিতে, {{< glossary_tooltip term_id="kubelet" text="kubelet">}} +পড টেমপ্লেট এবং আপডেটগুলির আশেপাশে কোনও বিবরণ সরাসরি পর্যবেক্ষণ বা পরিচালনা করে না; +এই বিবরণগুলি দূরে এব্যস্ট্রাক হয় ৷ উদ্বেগের এব্যস্ট্রাকশন এবং বিচ্ছেদ সিস্টেমের +শব্দার্থিকে সরল করে, এবং বিদ্যমান কোড পরিবর্তন না করে ক্লাস্টারের আচরণকে প্রসারিত করা +সম্ভবপর করে তোলে। + +## পড আপডেট এবং প্রতিস্থাপন + +পূর্ববর্তী সেকশনে উল্লিখিত হিসাবে, যখন একটি কাজের চাপ রিসোর্সের জন্য পড +টেমপ্লেট পরিবর্তন করা হয়, তখন নিয়ামক বিদ্যমান পডগুলিকে আপডেট বা প্যাচ করার পরিবর্তে আপডেট করা টেমপ্লেটের +উপর ভিত্তি করে নতুন পড তৈরি করে। + +কুবারনেটিস আপনাকে সরাসরি পড পরিচালনা করতে বাধা দেয় না। এটি একটি +চলমান পডের কিছু ক্ষেত্র আপডেট করা সম্ভব। যাইহোক, পড আপডেটের ক্রিয়াকলাপ +যেমন +[`প্যাচ`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#patch-pod-v1-core), এবং +[`প্রতিস্থাপন`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#replace-pod-v1-core) +কিছু সীমাবদ্ধতা রয়েছে : + +- একটি পড সম্পর্কে বেশিরভাগ মেটাডেটা অপরিবর্তনীয়। উদাহরণস্বরূপ + আপনি `namespace`, `name`, `uid`, বা `creationTimestamp` ক্ষেত্র + পরিবর্তন করতে পারবেন না; `generation` ক্ষেত্রটি অনন্য। এটি কেবলমাত্র সেই আপডেটগুলি গ্রহণ করে যা ক্ষেত্রের বর্তমান + মান বৃদ্ধি করে। +- যদি `metadata.deletionTimestamp` সেট করা থাকে, তবে `metadata.finalizers` তালিকায় কোনো + নতুন এন্ট্রি যোগ করা যাবে না। +- পড আপডেটগুলি `spec.containers[*].image` ব্যতীত অন্য কোনো ক্ষেত্র পরিবর্তন করতে পারে না, + `spec.initContainers[*].image`, `spec.activeDeadlineSeconds` বা + `spec.tolerations`। `spec.tolerations` এর জন্য, আপনি শুধুমাত্র নতুন এন্ট্রি যোগ করতে পারেন। +- `spec.activeDeadlineSeconds` ক্ষেত্র আপডেট করার সময়, দুই ধরনের আপডেটের + অনুমতি দেওয়া হয়: + + 1. একটি ধনাত্মক সংখ্যায় নিযুক্ত করা ক্ষেত্র সেট করা; + 2. ক্ষেত্রটিকে একটি ধনাত্মক সংখ্যা থেকে একটি ছোট, অ নেতিবাচক সংখ্যায় + আপডেট করা হচ্ছে। + +## রিসোর্স ভাগাভাগি এবং যোগাযোগ + +পডগুলি তাদের উপাদান কন্টেইনারর মধ্যে ডেটা ভাগ করে নেওয়া এবং যোগাযোগ করতে +সক্ষম করে। + +### পডগুলিতে স্টোরেজ {#pod-storage} + +একটি পড শেয়ার্ড স্টোরেজের একটি সেট নির্দিষ্ট করতে পারে +{{< glossary_tooltip text="ভলিউম" term_id="volume" >}} । পডের সমস্ত +কন্টেইনারে ভাগ করা ভলিউমগুলি অ্যাক্সেস করতে পারে, সেই কন্টেইনারগুলিকে ডেটা +ভাগ করতে দেয় ৷ ভলিউমগুলি একটি পডের মধ্যে স্থায়ী ডেটাকে টিকে থাকার +অনুমতি দেয় যদি এর মধ্যে থাকা একটি কন্টেইনারকে পুনরায় চালু করতে হয় । দেখুন +[স্টোরেজ](/docs/concepts/storage/) কুবারনেটিস কীভাবে শেয়ার্ড স্টোরেজ +প্রয়োগ করে এবং এটি পডের কাছে উপলব্ধ করে সে বিষয়ে আরও তথ্যের জন্য। + +### পড নেটওয়ার্কিং + +প্রতিটি পড প্রতিটি এড্রেস পরিবারের জন্য একটি একক আইপি এড্রেস বরাদ্দ করা হয় । একটি পডের +প্রতিটি কন্টেইনার আইপি এড্রেস এবং নেটওয়ার্ক পোর্ট সহ নেটওয়ার্ক +নেমস্পেস শেয়ার করে । একটি পডের ভিতরে (এবং **শুধুমাত্র** তখন), পডের অন্তর্গত কন্টেইনারগুলি +`লোকালহোস্ট` ব্যবহার করে একে অপরের সাথে যোগাযোগ করতে পারে। যখন একটি পডের কন্টেইনারগুলি *পডের বাইরে* এনটিটির সাথে যোগাযোগ করে, +তখন তাদের অবশ্যই সমন্বয় করতে হবে যে +তারা কীভাবে ভাগ করা নেটওয়ার্ক রিসোর্সগুলি (যেমন পোর্ট) ব্যবহার করে। +একটি পডের মধ্যে, কন্টেইনারগুলি একটি আইপি ঠিকানা এবং পোর্ট স্পেস ভাগ করে এবং +একে অপরকে `লোকালহোস্ট` এর মাধ্যমে খুঁজে পেতে পারে। একটি পডের কন্টেইনারগুলি যেমন SystemV semaphores বা +POSIX শেয়ার্ড মেমরির সাথে স্ট্যান্ডার্ড ইন্টার-প্রসেস ব্যবহার করে +একে অপরের সাথে যোগাযোগ করতে পারে। বিভিন্ন পডের কন্টেইনারগুলির ইউনিক IP এড্রেস থাকে +এবং বিশেষ কনফিগারেশন ছাড়া OS-লেভেলের IPC দ্বারা যোগাযোগ করতে পারে না। +যে কন্টেইনারগুলি একটি ভিন্ন পডে চলমান একটি কন্টেইনারের সাথে ইন্টারঅ্যাক্ট করতে চায় তারা যোগাযোগের জন্য +আইপি নেটওয়ার্কিং ব্যবহার করতে পারে। + +পডের মধ্যে থাকা কন্টেইনারগুলি সিস্টেমের হোস্টনামটিকে পডের জন্য কনফিগার করা +`নাম`-এর মতই দেখতে পায়। এই সেকশনে [networking](/docs/concepts/cluster-administration/networking/) এই বিষয়ে +আরো আছে। + +## কন্টেইনারগুলির জন্য বিশেষাধিকার মোড + +{{< note >}} +আপনার {{< glossary_tooltip text="কন্টেইনার রানটাইম" term_id="container-runtime">}} এই সেটিংটি প্রাসঙ্গিক হওয়ার জন্য একটি বিশেষাধিকারপ্রাপ্ত কন্টেইনারের ধারণাকে সমর্থন করতে হবে৷ +{{< /note >}} + +অপারেটিং সিস্টেমের প্রশাসনিক ক্ষমতা ব্যবহার করার জন্য একটি পডের যেকোনো কন্টেইনার বিশেষ সুবিধাপ্রাপ্ত মোডে চলতে পারে +যা অন্যথায় অ্যাক্সেসযোগ্য হবে না। এটি উইন্ডোজ এবং লিনাক্স উভয়ের জন্যই সহজলভ্য। + +### লিনাক্স বিশেষাধিকার কন্টেইনার + +লিনাক্সে, পডের যেকোনো কনটেইনার স্পেকের +[নিরাপত্তা প্রসঙ্গ](/docs/tasks/configure-pod-container/security-context/) তে `privileged` (লিনাক্স) ফ্লাগ ব্যবহার করে সুবিধাপ্রাপ্ত মোড +সক্রিয় করতে পারে। এটি এমন কন্টেইনারগুলির জন্য দরকারী যেগুলি অপারেটিং সিস্টেমের প্রশাসনিক +ক্ষমতাগুলি ব্যবহার করতে চায় যেমন নেটওয়ার্ক স্ট্যাক নিপূণভাবে ব্যবহার করা বা হার্ডওয়্যার ডিভাইসগুলি অ্যাক্সেস করা। + +### উইন্ডোজ বিশেষাধিকার কন্টেইনার + +{{< feature-state for_k8s_version="v1.26" state="stable" >}} + +উইন্ডোজে, আপনি পড স্পেকের নিরাপত্তা প্রসঙ্গে `windowsOptions.hostProcess` ফ্লাগ সেট করে একটি +[উইন্ডোজে HostProcess পড](/docs/tasks/configure-pod-container/create-hostprocess-pod) তৈরি করতে পারেন। এই পডের সমস্ত কন্টেইনার +অবশ্যই Windows HostProcess কন্টেইনার হিসাবে চালাতে হবে। HostProcess পডগুলি সরাসরি হোস্টে চলে এবং লিনাক্স সুবিধাপ্রাপ্ত +কন্টেইনারগুলির মতো প্রশাসনিক কাজ সম্পাদন করতেও ব্যবহার করা যেতে পারে। + +## স্ট্যাটিক পডগুলি + +_স্ট্যাটিক পডগুলি_ একটি নির্দিষ্ট নোডে kubelet daemon দ্বারা +সরাসরি পরিচালিত হয়, {{< glossary_tooltip text="API সার্ভার"term_id="kube-apiserver" >}} +তাদের পর্যবেক্ষণ করে না। +যেখানে বেশিরভাগ পড নিয়ন্ত্রণ সমতল দ্বারা পরিচালিত হয় (উদাহরণস্বরূপ, একটি +{{< glossary_tooltip text="Deployment" term_id="deployment">}}), +স্ট্যাটিক পডগুলির জন্য, kubelet সরাসরি প্রতিটি স্ট্যাটিক পডের তত্ত্বাবধান করে (এবং এটি ব্যর্থ হলে পুনরায় চালু করে)। + +একটি নির্দিষ্ট নোডে স্ট্যাটিক পডগুলি সবসময় একটি {{< glossary_tooltip term_id="kubelet">}} এর সাথে আবদ্ধ থাকে। +স্ট্যাটিক পডের প্রধান ব্যবহার হল একটি স্ব-হোস্টেড কন্ট্রোল প্লেনে চালানো: অন্য কথায়, +ব্যক্তিগত [কন্ট্রোল প্লেন উপাদান](/docs/concepts/overview/components/#control-plane-components) তত্ত্বাবধানে kubelet ব্যবহার করা। + +kubelet স্বয়ংক্রিয়ভাবে প্রতিটি স্ট্যাটিক পডের জন্য কুবারনেটিস API সার্ভারে একটি +{{< glossary_tooltip text="মিরর পড" term_id="mirror-pod" >}} তৈরির চেষ্টা করে। +এর মানে হল যে একটি নোডে চলমান পডগুলি API সার্ভারে দৃশ্যমান, +তবে সেখান থেকে নিয়ন্ত্রণ করা যায় না। আরও তথ্যের জন্য [স্থির পড তৈরি করুন](/docs/tasks/configure-pod-container/static-pod) গাইডটি দেখুন। + +{{< note >}} +একটি স্ট্যাটিক পডের `spec` অন্যান্য API অবজেক্টের উল্লেখ করতে পারে না +(উদাহরণস্বরূপ, {{< glossary_tooltip text="ServiceAccount" term_id="service-account" >}}, +{{< glossary_tooltip text="ConfigMap" term_id="configmap" >}}, +{{< glossary_tooltip text="Secret" term_id="secret" >}}, ইত্যাদি). +{{< /note >}} + +## একাধিক পাত্র সহ শুঁটি {#how-pods-manage-multiple-containers} + +পডগুলি একাধিক সহযোগিতা প্রক্রিয়া (পাত্র হিসাবে) সমর্থন করার জন্য ডিজাইন করা হয়েছে যা পরিষেবার একটি +সমন্বিত একক গঠন করে। একটি পডের পাত্রগুলি ক্লাস্টারের একই শারীরিক বা ভার্চুয়াল মেশিনে +স্বয়ংক্রিয়ভাবে সহ-অবস্থিত এবং সহ-নির্ধারিত। কন্টেইনারগুলি +সম্পদ এবং নির্ভরতা ভাগ করে নিতে পারে, একে অপরের সাথে যোগাযোগ করতে পারে এবং কখন এবং কীভাবে সেগুলি +বন্ধ করা হয় তা সমন্বয় করতে পারে। + + +কুবারনেটস ক্লাস্টারের শুঁটি দুটি প্রধান উপায়ে ব্যবহৃত হয়: + +* **পড যা একটি একক পাত্র চালায়**। "এক-কন্টেইনার-পার-পড" মডেলটি কুবারনেটের + সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে; এই ক্ষেত্রে, আপনি একটি একক পাত্রের + চারপাশে একটি মোড়ক হিসাবে একটি পডকে ভাবতে পারেন; কুবারনেটস সরাসরি কন্টেইনারগুলি পরিচালনা + করার পরিবর্তে পডগুলি পরিচালনা করে। +* **পড যা একাধিক পাত্র চালায় যেগুলি একসাথে কাজ করতে হবে**। একটি পড + একাধিক সহ-অবস্থিত পাত্রে গঠিত একটি অ্যাপ্লিকেশনকে + এনক্যাপসুলেট করতে পারে যা শক্তভাবে সংযুক্ত থাকে এবং + সম্পদ ভাগ করে নেওয়ার প্রয়োজন হয়। এই সহ-অবস্থিত কন্টেইনারগুলি + পরিষেবার একটি একক সমন্বিত ইউনিট গঠন করে—উদাহরণস্বরূপ, + একটি কন্টেইনার জনসাধারণের কাছে ভাগ করা ভলিউমে ডেটা সংরক্ষণ করে, যখন একটি পৃথক + {{< glossary_tooltip text="sidecar container" term_id="sidecar-container" >}} + সেই ফাইলগুলিকে রিফ্রেশ বা আপডেট করে৷ + পড এই কন্টেইনার, স্টোরেজ রিসোর্স এবং একটি ক্ষণস্থায়ী নেটওয়ার্ক পরিচয়কে একক + ইউনিট হিসাবে একত্রে মোড়ক করে। + +উদাহরণস্বরূপ, আপনার কাছে একটি ধারক থাকতে পারে যেটি +একটি শেয়ার্ড ভলিউমের ফাইলগুলির জন্য একটি ওয়েব সার্ভার হিসাবে কাজ করে এবং একটি পৃথক +[সাইডকার কন্টেইনার](/docs/concepts/workloads/pods/sidecar-containers/) +যা একটি দূরবর্তী উৎস থেকে সেই ফাইলগুলিকে আপডেট করে, যেমনটি নিম্নলিখিত চিত্রে রয়েছে: + +{{< চিত্র src="/images/docs/pod.svg" alt="পড তৈরির চিত্র" class="diagram-medium" >}} + +কিছু পডের আছে {{< glossary_tooltip text="init containers" term_id="init-container" >}} +পাশাপাশি {{< glossary_tooltip text="app containers" term_id="app-container" >}}। +ডিফল্টরূপে, init কন্টেইনারগুলি অ্যাপ কন্টেইনারগুলি শুরু হওয়ার আগে চলে এবং সম্পূর্ণ হয়। + +আপনার কাছে [সাইডকার কন্টেইনার](/docs/concepts/workloads/pods/sidecar-containers/) থাকতে পারে। +যেগুলি প্রধান অ্যাপ্লিকেশন পডকে সহায়ক পরিষেবা প্রদান করে (উদাহরণস্বরূপ: একটি পরিষেবা জাল)। + +{{< feature-state for_k8s_version="v1.29" state="beta" >}} + +ডিফল্টরূপে সক্রিয় করা হয়েছে, `SidecarContainers` [ফিচার গেট](/docs/reference/command-line-tools-reference/feature-gates/) +init কন্টেইনারগুলির জন্য আপনাকে `restartPolicy: সর্বদা` নির্দিষ্ট করতে দেয়। +'সর্বদা' পুনঃসূচনা নীতি সেট করা নিশ্চিত করে যে কন্টেইনারগুলি যেখানে আপনি এটি সেট করেছেন +সেগুলিকে _sidecars_ হিসাবে গণ্য করা হয় যেগুলি পডের পুরো জীবনকাল চলা অবস্থায় থাকে। +যে কন্টেইনারগুলিকে আপনি স্পষ্টভাবে সাইডকার কন্টেনার +হিসাবে সংজ্ঞায়িত করেছেন সেগুলি মূল অ্যাপ্লিকেশন পডের আগে শুরু হয় এবং পড বন্ধ না +হওয়া পর্যন্ত চলমান থাকে। + + +## কন্টেইনার probes + +একটি _probe_ একটি ডায়াগনস্টিক যা একটি কন্টেইনার কুবেলেট দ্বারা পর্যায়ক্রমে সম্পাদিত হয়। একটি ডায়গনিস্টিক সঞ্চালনের জন্য, kubelet বিভিন্ন ক্রিয়াকলাপ করতে পারে: + +- `ExecAction` (কন্টেইনারের রানটাইমের সাহায্যে সম্পাদিত হয়েছে) +- `TCPSocketAction` (kubelet দ্বারা সরাসরি চেক করা হয়েছে) +- `HTTPGetAction` (kubelet দ্বারা সরাসরি চেক করা হয়েছে) + +আপনি পডের জীবনচক্র ডকুমেন্টেশনে [probes](/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) +সম্পর্কে আরও পড়তে পারেন। + +## {{% heading "whatsnext" %}} + +* [একটি পডের জীবনচক্র](/docs/concepts/workloads/pods/pod-lifecycle/) সম্পর্কে জানুন। +* [RuntimeClass](/docs/concepts/containers/runtime-class/) সম্পর্কে জানুন এবং আপনি কীভাবে এটি ব্যবহার করতে পারেন + বিভিন্ন কন্টেইনারের রানটাইম কনফিগারেশন সহ বিভিন্ন পড কনফিগার করুন। +* [PodDisruptionBudget](/docs/concepts/workloads/pods/disruptions/) সম্পর্কে পড়ুন এবং প্রতিবন্ধকতার সময় অ্যাপ্লিকেশনের প্রাপ্যতা পরিচালনা করার জন্য আপনি কীভাবে এটি ব্যবহার করতে পারেন। +* Pod হল Kubernetes REST API-এর একটি শীর্ষ-স্তরের রিসোর্স। + {{< api-reference page="workload-resources/pod-v1" >}} + অবজেক্টের সংজ্ঞা বস্তুর বিস্তারিত বর্ণনা করে। +* [ডিস্ট্রিবিউটেড সিস্টেম টুলকিট: কম্পোজিট কন্টেইনারগুলির জন্য প্যাটার্ন](/blog/2015/06/the-distributed-system-toolkit-patterns/) একাধিক কন্টেইনার সহ পডগুলির জন্য সাধারণ লেআউটগুলি ব্যাখ্যা করে। +* [পড টপোলজি স্প্রেড সীমাবদ্ধতা] (/docs/concepts/scheduling-eviction/topology-spread-constraints/) সম্পর্কে পড়ুন। + +কুবারনেটিস কেন অন্যান্য রিসোর্সগুলিতে মোড়ানোর প্রসঙ্গটি বোঝার জন্য একটি সাধারণ পড API (যেমন {{< glossary_tooltip text="স্টেটফুল সেট" term_id="statefulset" >}}) বা {{< glossary_tooltip text="ডিপলয়মেন্ট" term_id="deployment">}}) তে , আপনি পূর্ববর্তী আর্ট সম্পর্কে পড়তে পারেন, যার মধ্যে রয়েছে: + +* [Aurora](https://aurora.apache.org/documentation/latest/reference/configuration/#job-schema) +* [Borg](https://research.google.com/pubs/pub43438.html) +* [ম্যারাথন](https://mesosphere.github.io/marathon/docs/rest-api.html) +* [ওমেগা](https://research.google/pubs/pub41684/) +* [টুপারওয়্যার](https://engineering.fb.com/data-center-engineering/tupperware/)। From bed671b2b2d131badf13ce9024934bae2718e8eb Mon Sep 17 00:00:00 2001 From: Saiful Islam <136887493+saifulshark@users.noreply.github.com> Date: Sat, 9 Mar 2024 15:16:23 +0600 Subject: [PATCH 0169/1086] Update _index.md --- content/bn/releases/_index.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/content/bn/releases/_index.md b/content/bn/releases/_index.md index 23c33d60ee..f778330edb 100644 --- a/content/bn/releases/_index.md +++ b/content/bn/releases/_index.md @@ -2,23 +2,23 @@ linktitle: প্রকাশের ইতিহাস title: প্রকাশনাসমূহ type: docs -layout: প্রকাশ-তথ্য -notoc: সত্য +layout: release-info +notoc: true --- কুবারনেটিস প্রজেক্ট সাম্প্রতিক তিনটি পর্যন্ত ছোট রিলিজের জন্য রিলিজ শাখা বজায় রাখে। -({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}) +({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}). কুবারনেটিস 1.19 এবং নতুন ভার্সন -[আনুমানিক 1 বছরের প্যাচ সাপোর্ট পায়(patch support)](/releases/patch-releases/#support-period) +[আনুমানিক 1 বছরের প্যাচ সাপোর্ট পায়(patch support)](bn/releases/patch-releases/#support-period) কুবারনেটিস 1.18 এবং তার বেশি বয়সীরা প্রায় 9 মাস প্যাচ সাপোর্ট (patch support) পেয়েছে। কুবারনেটিস সংস্করণ **x.y.z** হিসাবে প্রকাশ করা হয়, যেখানে **x** হল মুখ্য সংস্করণ, **y** হল গৌণ সংস্করণ এবং **z** হল প্যাচ ভার্সন (patch version), যা [শব্দার্থিক সংস্করণ](https://semver.org/) পরিভাষা অনুসরণ করে হয়। -অতিরিক্ত তথ্যসমূহ [version skew policy](/releases/version-skew-policy/) নথিতে সংরক্ষিত রয়েছে। +অতিরিক্ত তথ্যসমূহ [version skew policy](bn/releases/version-skew-policy/) নথিতে সংরক্ষিত রয়েছে। @@ -28,6 +28,7 @@ notoc: সত্য ## আসন্ন রিলিজ -কুবারনেটিস রিলিজ এর আসন্ন **{{< skew nextMinorVersion >}}** [সময়সূচী](https://github.com/kubernetes/sig-release/tree/master/releases/release-{{< skew nextMinorVersion >}}) চেক করুন! +চেক করুন [সময়সূচী](https://github.com/kubernetes/sig-release/tree/master/releases/release-{{< skew nextMinorVersion >}}) +আসন্ন **{{< skew nextMinorVersion >}}** কুবারনেটিস রিলিজ! ## সহায়ক রিসোর্স From ad594fae31d3bb320a14a418a45640e7ae0e8714 Mon Sep 17 00:00:00 2001 From: Saiful Islam <136887493+saifulshark@users.noreply.github.com> Date: Sat, 9 Mar 2024 17:48:24 +0600 Subject: [PATCH 0170/1086] (Update) _index.md --- content/bn/releases/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/releases/_index.md b/content/bn/releases/_index.md index f778330edb..1fdbaf0ab3 100644 --- a/content/bn/releases/_index.md +++ b/content/bn/releases/_index.md @@ -11,14 +11,14 @@ notoc: true কুবারনেটিস প্রজেক্ট সাম্প্রতিক তিনটি পর্যন্ত ছোট রিলিজের জন্য রিলিজ শাখা বজায় রাখে। ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}). কুবারনেটিস 1.19 এবং নতুন ভার্সন -[আনুমানিক 1 বছরের প্যাচ সাপোর্ট পায়(patch support)](bn/releases/patch-releases/#support-period) +[আনুমানিক 1 বছরের প্যাচ সাপোর্ট পায়(patch support)](/bn/releases/patch-releases/#support-period) কুবারনেটিস 1.18 এবং তার বেশি বয়সীরা প্রায় 9 মাস প্যাচ সাপোর্ট (patch support) পেয়েছে। কুবারনেটিস সংস্করণ **x.y.z** হিসাবে প্রকাশ করা হয়, যেখানে **x** হল মুখ্য সংস্করণ, **y** হল গৌণ সংস্করণ এবং **z** হল প্যাচ ভার্সন (patch version), যা [শব্দার্থিক সংস্করণ](https://semver.org/) পরিভাষা অনুসরণ করে হয়। -অতিরিক্ত তথ্যসমূহ [version skew policy](bn/releases/version-skew-policy/) নথিতে সংরক্ষিত রয়েছে। +অতিরিক্ত তথ্যসমূহ [version skew policy](/bn/releases/version-skew-policy/) নথিতে সংরক্ষিত রয়েছে। From 5219863ce742c1a91da1b14393856f0e71d81d3f Mon Sep 17 00:00:00 2001 From: pranav-pandey0804 Date: Sat, 9 Mar 2024 17:47:25 +0530 Subject: [PATCH 0171/1086] updated button_path --- content/hi/docs/home/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/hi/docs/home/_index.md b/content/hi/docs/home/_index.md index 14dec042ef..2416f867bd 100644 --- a/content/hi/docs/home/_index.md +++ b/content/hi/docs/home/_index.md @@ -58,7 +58,7 @@ cards: title: कुबेरनेट्स डाउनलोड करें description: यदि आप कुबेरनेट्स इंस्टॉल कर रहे हैं या नवीनतम संस्करण में अपग्रेड कर रहे हैं, तो वर्तमान रिलीज़ नोट्स देखें। button: कुबेरनेट्स डाउनलोड करें - button_path: "/docs/setup/release/notes" + button_path: "https://kubernetes.io/releases/download/" - name: about title: प्रलेखन के बारे में description: इस वेबसाइट में कुबेरनेट्स के वर्तमान और पिछले 4 संस्करणों के लिए प्रलेखन हैं। From 32a73e5e80cd4e0c790573bfc579f822dfbc3f68 Mon Sep 17 00:00:00 2001 From: PRANAV PANDEY Date: Sun, 10 Mar 2024 09:59:52 +0530 Subject: [PATCH 0172/1086] Update content/hi/docs/home/_index.md Co-authored-by: Dipesh Rawat --- content/hi/docs/home/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/hi/docs/home/_index.md b/content/hi/docs/home/_index.md index 2416f867bd..7c029c9674 100644 --- a/content/hi/docs/home/_index.md +++ b/content/hi/docs/home/_index.md @@ -58,7 +58,7 @@ cards: title: कुबेरनेट्स डाउनलोड करें description: यदि आप कुबेरनेट्स इंस्टॉल कर रहे हैं या नवीनतम संस्करण में अपग्रेड कर रहे हैं, तो वर्तमान रिलीज़ नोट्स देखें। button: कुबेरनेट्स डाउनलोड करें - button_path: "https://kubernetes.io/releases/download/" + button_path: "/releases/download" - name: about title: प्रलेखन के बारे में description: इस वेबसाइट में कुबेरनेट्स के वर्तमान और पिछले 4 संस्करणों के लिए प्रलेखन हैं। From eaede48df95c7e82b4c44b8071547be3c7faa68b Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 11 Mar 2024 00:57:48 +0600 Subject: [PATCH 0173/1086] Update _index.md --- .../bn/docs/concepts/workloads/pods/_index.md | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/content/bn/docs/concepts/workloads/pods/_index.md b/content/bn/docs/concepts/workloads/pods/_index.md index 61609f004e..1dab8c0358 100644 --- a/content/bn/docs/concepts/workloads/pods/_index.md +++ b/content/bn/docs/concepts/workloads/pods/_index.md @@ -19,9 +19,9 @@ _পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্র নন-ক্লাউড প্রেক্ষাপটে, একই ভৌত (ফিজিক্যাল) বা ভার্চুয়াল মেশিনে সঞ্চালিত অ্যাপ্লিকেশনগুলি একই লজিক্যাল হোস্টে নির্বাহিত ক্লাউড অ্যাপ্লিকেশনগুলির সাথে সাদৃশ্যপূর্ণ। পাশাপাশি অ্যাপ্লিকেশন কন্টেইনার, একটি পড থাকতে পারে -[init containers](/docs/concepts/workloads/pods/init-containers/) যে চলমান +[init কন্টেইনার](/docs/concepts/workloads/pods/init-containers/) যে চলমান পড স্টার্টআপের সময়। ডিবাগ করার জন্য আপনি ইনজেকশনও দিতে পারেন -[ephemeral containers](/docs/concepts/workloads/pods/ephemeral-containers/) +[ephemeral কন্টেইনার](/docs/concepts/workloads/pods/ephemeral-containers/) যদি আপনার ক্লাস্টার এটি অফার করে। @@ -34,7 +34,7 @@ _পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্র {{< /note >}} একটি পডের শেয়ার্ড প্রসঙ্গ হল লিনাক্স নেমস্পেস, cgroups এবং -বিচ্ছিন্নতার সম্ভাব্য অন্যান্য দিক - একই জিনিস যা একটি {{< glossary_tooltip text="container" term_id="container" >}} বিচ্ছিন্ন করে। একটি পডের প্রেক্ষাপটের মধ্যে, পৃথক অ্যাপ্লিকেশন থাকতে পারে +বিচ্ছিন্নতার সম্ভাব্য অন্যান্য দিক - একই জিনিস যা একটি {{< glossary_tooltip text="কন্টেইনার" term_id="container" >}} বিচ্ছিন্ন করে। একটি পডের প্রেক্ষাপটের মধ্যে, পৃথক অ্যাপ্লিকেশন থাকতে পারে আরও উপ-বিচ্ছিন্নতা প্রয়োগ করা হয়েছে। একটি পড শেয়ার্ড নেমস্পেস এবং শেয়ার্ড ফাইল সিস্টেম ভলিউম সহ কন্টেইনারগুলির সেটের অনুরূপ। @@ -45,7 +45,7 @@ _পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্র কুবারনেটিসের সবচেয়ে সাধারণ ব্যবহার; এই ক্ষেত্রে, আপনি একটি একক কন্টেইনারর চারপাশে একটি মোড়ক হিসাবে একটি পডকে ভাবতে পারেন; কুবারনেটিস সরাসরি কন্টেইনারগুলি পরিচালনা করার পরিবর্তে পডগুলি পরিচালনা করে। -* **পডগুলি যা একাধিক কন্টেইনার চলে যা একসাথে কাজ করা দরকার**। একটি পড +* **পডগুলি যা একাধিক কন্টেইনার চলে যা একসাথে কাজ করা দরকার** একটি পড [একাধিক সহ-অবস্থিত কন্টেইনার](#how-pods-manage-multiple-containers) দ্বারা গঠিত একটি অ্যাপ্লিকেশনকে এনক্যাপসুলেট করতে পারে যেগুলি শক্তভাবে সংযুক্ত এবং সম্পদ ভাগ করতে হবে৷ এই সহ-অবস্থিত কন্টেইনারগুলি @@ -59,7 +59,7 @@ _পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্র বা ক্ষমতা); আপনার একাধিক প্রতিলিপি প্রয়োজন হলে, দেখুন [ওয়ার্কলোড ম্যানেজমেন্ট](/docs/concepts/workloads/controllers/)। -## Using Pods +## পডের ব্যবহার নিচে একটি পডের উদাহরণ দেওয়া হল যেটিতে একটি কন্টেইনার রয়েছে যা `nginx:1.14.2` ছবিটি চালাচ্ছে। @@ -71,12 +71,12 @@ kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml ``` পড সাধারণত সরাসরি তৈরি করা হয় না এবং ওয়ার্কলোড রিসোর্স ব্যবহার করে তৈরি করা হয়। -কিভাবে পডগুলিব্যবহার করা হয় সে সম্পর্কে আরও তথ্যের জন্য [Working with Pods](#working-with-pods) দেখুন +কিভাবে পডগুলিব্যবহার করা হয় সে সম্পর্কে আরও তথ্যের জন্য [পডগুলির সাথে কাজ](#working-with-pods) দেখুন ওয়ার্কলোড রিসোর্স সহ। -### Workload resources for managing pods +### পড পরিচালনার জন্য ওয়ার্কলোডের রিসোর্স -সাধারণত আপনাকে সরাসরি পড তৈরি করতে হবে না, এমনকি সিঙ্গেলটন পডও।পরিবর্তে,ওয়ার্কলোড রিসোর্স গুলি ব্যবহার করে সেগুলি তৈরি করুন যেমন {{< glossary_tooltip text="স্থাপনা" +সাধারণত আপনাকে সরাসরি পড তৈরি করতে হবে না, এমনকি সিঙ্গেলটন পডও। পরিবর্তে,ওয়ার্কলোড রিসোর্সগুলি ব্যবহার করে সেগুলি তৈরি করুন যেমন {{< glossary_tooltip text="রিসোর্স" term_id="deployment" >}} বা {{< glossary_tooltip text="চাকরি" term_id="job" >}}। আপনার পডের অবস্থা ট্র্যাক করার প্রয়োজন হলে, বিবেচনা করুন {{< glossary_tooltip text="StatefulSet" term_id="statefulset" >}} রিসোর্স। @@ -87,13 +87,13 @@ term_id="deployment" >}} বা {{< glossary_tooltip text="চাকরি" term প্রদান করতে), আপনার একাধিক পড ব্যবহার করা উচিত, প্রতিটি উদাহরণের জন্য একটি। Kubernetes-এ, এটিকে সাধারণত _প্রতিলিপি_ হিসাবে উল্লেখ করা হয়। প্রতিলিপিকৃত পডগুলি সাধারণত একটি কাজের চাপ রিসোর্স এবং এর -{{< glossary_tooltip text="controller" term_id="controller" >}} দ্বারা একটি গ্রুপ হিসাবে তৈরি এবং পরিচালিত হয়। +{{< glossary_tooltip text="কন্ট্রোলার" term_id="controller" >}} দ্বারা একটি গ্রুপ হিসাবে তৈরি এবং পরিচালিত হয়। দেখুন [পড এবং কন্ট্রোলার](#pods-and-controllers) আরও তথ্যের জন্য কিভাবে কুবারনেটিস অ্যাপ্লিকেশন বাস্তবায়নের জন্য ওয়ার্কলোড রিসোর্স এবং তাদের কন্ট্রোলার ব্যবহার করে স্কেলিং এবং অটো-হিলিং। -পডগুলি স্থানীয়ভাবে তাদের উপাদান পাত্রের জন্য দুটি ধরণের ভাগ করা সংস্থান সরবরাহ করে: +পডগুলি স্থানীয়ভাবে তাদের উপাদান পাত্রের জন্য দুটি ধরণের ভাগ করা রিসোর্স সরবরাহ করে: [নেটওয়ার্কিং](#pod-networking) এবং [স্টোরেজ](#pod-storage)। @@ -102,7 +102,7 @@ Kubernetes-এ, এটিকে সাধারণত _প্রতিলিপ আপনি খুবই কম সময় সরাসরি কুবারনেটিস-এ এমনকি সিঙ্গেলটন পডগুলি-তে পৃথক পড তৈরি করবেন। এই কারণ পডগুলি তুলনামূলকভাবে অল্পক্ষণস্থায়ী, নিষ্পত্তিযোগ্য হিসাবে ডিজাইন করা হয়েছে। যখন একটি পড তৈরি করা হয় (প্রত্যক্ষভাবে আপনার দ্বারা বা পরোক্ষভাবে একটি -{{}}) দ্বারা, নতুন পডটি +{{}}) দ্বারা, নতুন পডটি আপনার ক্লাস্টারে একটি {{< glossary_tooltip term_id="node" >}} চালানোর জন্য নির্ধারিত হয়। পডটি সেই নোডে থাকে যতক্ষণ না পড এক্সিকিউশন শেষ করে, পড অবজেক্টটি মুছে ফেলা হয়, পডটিকে রিসোর্সের অভাবের জন্য *উচ্ছেদ* করা হয়, বা নোড ব্যর্থ হয়। @@ -146,13 +146,13 @@ Kubernetes-এ, এটিকে সাধারণত _প্রতিলিপ এখানে কাজের চাপ রিসোর্সগুলির কিছু উদাহরণ রয়েছে যা এক বা একাধিক পডগুলি পরিচালনা করে: -* {{< glossary_tooltip text="Deployment(ডিপলয়ম্যান্টস)" term_id="deployment" >}} -* {{< glossary_tooltip text="StatefulSet(স্টেটফুল সেট)" term_id="statefulset" >}} -* {{< glossary_tooltip text="DaemonSet(DaemonSets)" term_id="daemonset" >}} +* {{< glossary_tooltip text="ডিপলয়ম্যান্টস" term_id="deployment" >}} +* {{< glossary_tooltip text="স্টেটফুল সেট" term_id="statefulset" >}} +* {{< glossary_tooltip text="DaemonSet" term_id="daemonset" >}} ### পড টেমপ্লেট -রিসোর্সগুলির জন্য {{< glossary_tooltip text="workload" term_id="workload">}} কন্ট্রোলাররা একটি _পড টেমপ্লেট_ থেকে পড তৈরি করে +রিসোর্সগুলির জন্য {{< glossary_tooltip text="ওয়ার্কলোড" term_id="workload">}} কন্ট্রোলাররা একটি _পড টেমপ্লেট_ থেকে পড তৈরি করে এবং আপনার পক্ষে সেই পডগুলি পরিচালনা করে৷ পড টেমপ্লেটগুলি হল পড তৈরির জন্য স্পেসিফিকেশন, এবং ওয়ার্কলোড রিসোর্সগুলির অন্তর্ভুক্ত যেমন @@ -289,7 +289,7 @@ POSIX শেয়ার্ড মেমরির সাথে স্ট্য উইন্ডোজে, আপনি পড স্পেকের নিরাপত্তা প্রসঙ্গে `windowsOptions.hostProcess` ফ্লাগ সেট করে একটি [উইন্ডোজে HostProcess পড](/docs/tasks/configure-pod-container/create-hostprocess-pod) তৈরি করতে পারেন। এই পডের সমস্ত কন্টেইনার -অবশ্যই Windows HostProcess কন্টেইনার হিসাবে চালাতে হবে। HostProcess পডগুলি সরাসরি হোস্টে চলে এবং লিনাক্স সুবিধাপ্রাপ্ত +অবশ্যই উইন্ডোজ HostProcess কন্টেইনার হিসাবে চালাতে হবে। HostProcess পডগুলি সরাসরি হোস্টে চলে এবং লিনাক্স সুবিধাপ্রাপ্ত কন্টেইনারগুলির মতো প্রশাসনিক কাজ সম্পাদন করতেও ব্যবহার করা যেতে পারে। ## স্ট্যাটিক পডগুলি @@ -298,7 +298,7 @@ _স্ট্যাটিক পডগুলি_ একটি নির্দি সরাসরি পরিচালিত হয়, {{< glossary_tooltip text="API সার্ভার"term_id="kube-apiserver" >}} তাদের পর্যবেক্ষণ করে না। যেখানে বেশিরভাগ পড নিয়ন্ত্রণ সমতল দ্বারা পরিচালিত হয় (উদাহরণস্বরূপ, একটি -{{< glossary_tooltip text="Deployment" term_id="deployment">}}), +{{< glossary_tooltip text="ডিপ্লয়মেন্ট" term_id="deployment">}}), স্ট্যাটিক পডগুলির জন্য, kubelet সরাসরি প্রতিটি স্ট্যাটিক পডের তত্ত্বাবধান করে (এবং এটি ব্যর্থ হলে পুনরায় চালু করে)। একটি নির্দিষ্ট নোডে স্ট্যাটিক পডগুলি সবসময় একটি {{< glossary_tooltip term_id="kubelet">}} এর সাথে আবদ্ধ থাকে। @@ -317,7 +317,7 @@ kubelet স্বয়ংক্রিয়ভাবে প্রতিটি {{< glossary_tooltip text="Secret" term_id="secret" >}}, ইত্যাদি). {{< /note >}} -## একাধিক পাত্র সহ শুঁটি {#how-pods-manage-multiple-containers} +## একাধিক পাত্র সহ পড {#how-pods-manage-multiple-containers} পডগুলি একাধিক সহযোগিতা প্রক্রিয়া (পাত্র হিসাবে) সমর্থন করার জন্য ডিজাইন করা হয়েছে যা পরিষেবার একটি সমন্বিত একক গঠন করে। একটি পডের পাত্রগুলি ক্লাস্টারের একই শারীরিক বা ভার্চুয়াল মেশিনে @@ -326,9 +326,9 @@ kubelet স্বয়ংক্রিয়ভাবে প্রতিটি বন্ধ করা হয় তা সমন্বয় করতে পারে। -কুবারনেটস ক্লাস্টারের শুঁটি দুটি প্রধান উপায়ে ব্যবহৃত হয়: +কুবারনেটিস ক্লাস্টারের পড দুটি প্রধান উপায়ে ব্যবহৃত হয়: -* **পড যা একটি একক পাত্র চালায়**। "এক-কন্টেইনার-পার-পড" মডেলটি কুবারনেটের +* **পড যা একটি একক পাত্র চালায়**। "এক-কন্টেইনার-পার-পড" মডেলটি কুবারনেটিসের সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে; এই ক্ষেত্রে, আপনি একটি একক পাত্রের চারপাশে একটি মোড়ক হিসাবে একটি পডকে ভাবতে পারেন; কুবারনেটস সরাসরি কন্টেইনারগুলি পরিচালনা করার পরিবর্তে পডগুলি পরিচালনা করে। @@ -351,7 +351,7 @@ kubelet স্বয়ংক্রিয়ভাবে প্রতিটি {{< চিত্র src="/images/docs/pod.svg" alt="পড তৈরির চিত্র" class="diagram-medium" >}} কিছু পডের আছে {{< glossary_tooltip text="init containers" term_id="init-container" >}} -পাশাপাশি {{< glossary_tooltip text="app containers" term_id="app-container" >}}। +পাশাপাশি {{< glossary_tooltip text="অ্যাপ কন্টেইনার" term_id="app-container" >}}। ডিফল্টরূপে, init কন্টেইনারগুলি অ্যাপ কন্টেইনারগুলি শুরু হওয়ার আগে চলে এবং সম্পূর্ণ হয়। আপনার কাছে [সাইডকার কন্টেইনার](/docs/concepts/workloads/pods/sidecar-containers/) থাকতে পারে। From 5b4be2e65ce4d31cabcc3a75880531a2f975e447 Mon Sep 17 00:00:00 2001 From: Arhell Date: Mon, 11 Mar 2024 00:13:46 +0200 Subject: [PATCH 0174/1086] [ko] Correcting API field paths --- content/ko/docs/concepts/storage/volumes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/ko/docs/concepts/storage/volumes.md b/content/ko/docs/concepts/storage/volumes.md index d8ddfd0e0f..09b6a54061 100644 --- a/content/ko/docs/concepts/storage/volumes.md +++ b/content/ko/docs/concepts/storage/volumes.md @@ -983,7 +983,7 @@ vSphere CSI 드라이버에서 생성된 새 볼륨은 이러한 파라미터를 ## subPath 사용하기 {#using-subpath} 때로는 단일 파드에서 여러 용도의 한 볼륨을 공유하는 것이 유용하다. -`volumeMounts.subPath` 속성을 사용해서 root 대신 참조하는 볼륨 내의 하위 경로를 +`volumeMounts[*].subPath` 속성을 사용해서 root 대신 참조하는 볼륨 내의 하위 경로를 지정할 수 있다. 다음의 예시는 단일 공유 볼륨을 사용하여 LAMP 스택(리눅스 Apache MySQL PHP)이 @@ -1268,7 +1268,7 @@ FlexVolume 사용자는 워크로드가 동등한 CSI 드라이버를 사용하 마운트 전파를 통해 컨테이너가 마운트한 볼륨을 동일한 파드의 다른 컨테이너 또는 동일한 노드의 다른 파드로 공유할 수 있다. -볼륨 마운트 전파는 `Container.volumeMounts` 의 `mountPropagation` 필드에 +볼륨 마운트 전파는 `containers[*].volumeMounts` 의 `mountPropagation` 필드에 의해 제어된다. 그 값은 다음과 같다. * `None` - 이 볼륨 마운트는 호스트의 볼륨 또는 해당 서브디렉터리에 From 7d5814a697cff824cb1b493036f20afb1acb6050 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Tue, 12 Mar 2024 02:25:35 +0600 Subject: [PATCH 0175/1086] Update _index.md update localize link --- .../bn/docs/concepts/workloads/pods/_index.md | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/content/bn/docs/concepts/workloads/pods/_index.md b/content/bn/docs/concepts/workloads/pods/_index.md index 1dab8c0358..b3deed9bc8 100644 --- a/content/bn/docs/concepts/workloads/pods/_index.md +++ b/content/bn/docs/concepts/workloads/pods/_index.md @@ -19,9 +19,9 @@ _পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্র নন-ক্লাউড প্রেক্ষাপটে, একই ভৌত (ফিজিক্যাল) বা ভার্চুয়াল মেশিনে সঞ্চালিত অ্যাপ্লিকেশনগুলি একই লজিক্যাল হোস্টে নির্বাহিত ক্লাউড অ্যাপ্লিকেশনগুলির সাথে সাদৃশ্যপূর্ণ। পাশাপাশি অ্যাপ্লিকেশন কন্টেইনার, একটি পড থাকতে পারে -[init কন্টেইনার](/docs/concepts/workloads/pods/init-containers/) যে চলমান +[init কন্টেইনার](/bn/docs/concepts/workloads/pods/init-containers/) যে চলমান পড স্টার্টআপের সময়। ডিবাগ করার জন্য আপনি ইনজেকশনও দিতে পারেন -[ephemeral কন্টেইনার](/docs/concepts/workloads/pods/ephemeral-containers/) +[ephemeral কন্টেইনার](/bn/docs/concepts/workloads/pods/ephemeral-containers/) যদি আপনার ক্লাস্টার এটি অফার করে। @@ -29,7 +29,7 @@ _পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্র ## পড কি? {{< note >}} -ক্লাস্টারের প্রতিটি নোডে আপনাকে একটি [কন্টেইনার রানটাইম](/docs/setup/production-environment/container-runtimes/) ইনস্টল +ক্লাস্টারের প্রতিটি নোডে আপনাকে একটি [কন্টেইনার রানটাইম](/bn/docs/setup/production-environment/container-runtimes/) ইনস্টল করতে হবে যাতে পডগুলি সেখানে চলতে পারে। {{< /note >}} @@ -39,7 +39,7 @@ _পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্র একটি পড শেয়ার্ড নেমস্পেস এবং শেয়ার্ড ফাইল সিস্টেম ভলিউম সহ কন্টেইনারগুলির সেটের অনুরূপ। -কুবারনেটিস ক্লাস্টারের পড দুটি প্রধান উপায়ে ব্যবহৃত হয়: +কুবারনেটিস ক্লাস্টারের পড প্রধানট দুটি উপায়ে ব্যবহৃত হয়: * **পড যা একটি একক কন্টেইনার চলে**" এক-কন্টেইনার-প্রতি-পড" মডেলটি কুবারনেটিসের সবচেয়ে সাধারণ ব্যবহার; এই ক্ষেত্রে, আপনি একটি একক কন্টেইনারর চারপাশে একটি মোড়ক হিসাবে @@ -57,7 +57,7 @@ _পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্র প্রতিলিপি প্রদানের জন্য আপনাকে একাধিক পাত্র চালানোর দরকার নেই (স্থিতিস্থাপকতার জন্য বা ক্ষমতা); আপনার একাধিক প্রতিলিপি প্রয়োজন হলে, দেখুন - [ওয়ার্কলোড ম্যানেজমেন্ট](/docs/concepts/workloads/controllers/)। + [ওয়ার্কলোড ম্যানেজমেন্ট](/bn/docs/concepts/workloads/controllers/)। ## পডের ব্যবহার @@ -72,11 +72,11 @@ kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml পড সাধারণত সরাসরি তৈরি করা হয় না এবং ওয়ার্কলোড রিসোর্স ব্যবহার করে তৈরি করা হয়। কিভাবে পডগুলিব্যবহার করা হয় সে সম্পর্কে আরও তথ্যের জন্য [পডগুলির সাথে কাজ](#working-with-pods) দেখুন -ওয়ার্কলোড রিসোর্স সহ। +ওয়ার্কলোড রিসোর্স সহ। ### পড পরিচালনার জন্য ওয়ার্কলোডের রিসোর্স -সাধারণত আপনাকে সরাসরি পড তৈরি করতে হবে না, এমনকি সিঙ্গেলটন পডও। পরিবর্তে,ওয়ার্কলোড রিসোর্সগুলি ব্যবহার করে সেগুলি তৈরি করুন যেমন {{< glossary_tooltip text="রিসোর্স" +সাধারণত আপনাকে সরাসরি পড তৈরি করতে হবে না, এমনকি সিঙ্গেলটন পডও। পরিবর্তে, ওয়ার্কলোড রিসোর্সগুলি ব্যবহার করে সেগুলি তৈরি করুন যেমন {{< glossary_tooltip text="রিসোর্স" term_id="deployment" >}} বা {{< glossary_tooltip text="চাকরি" term_id="job" >}}। আপনার পডের অবস্থা ট্র্যাক করার প্রয়োজন হলে, বিবেচনা করুন {{< glossary_tooltip text="StatefulSet" term_id="statefulset" >}} রিসোর্স। @@ -85,7 +85,7 @@ term_id="deployment" >}} বা {{< glossary_tooltip text="চাকরি" term প্রতিটি পড একটি প্রদত্ত অ্যাপ্লিকেশনের একটি একক দৃষ্টান্ত চালানোর জন্য বোঝানো হয়। যদি তুমি চাও আপনার অ্যাপ্লিকেশনকে অনুভূমিকভাবে স্কেল করুন (আরো দৃষ্টান্ত চালানোর মাধ্যমে আরো সামগ্রিক রিসোর্স প্রদান করতে), আপনার একাধিক পড ব্যবহার করা উচিত, প্রতিটি উদাহরণের জন্য একটি। -Kubernetes-এ, এটিকে সাধারণত _প্রতিলিপি_ হিসাবে উল্লেখ করা হয়। +কুবারনেটিসে-এ, এটিকে সাধারণত _প্রতিলিপি_ হিসাবে উল্লেখ করা হয়। প্রতিলিপিকৃত পডগুলি সাধারণত একটি কাজের চাপ রিসোর্স এবং এর {{< glossary_tooltip text="কন্ট্রোলার" term_id="controller" >}} দ্বারা একটি গ্রুপ হিসাবে তৈরি এবং পরিচালিত হয়। @@ -100,7 +100,7 @@ Kubernetes-এ, এটিকে সাধারণত _প্রতিলিপ ## পডগুলি নিয়ে কাজ করা আপনি খুবই কম সময় সরাসরি কুবারনেটিস-এ এমনকি সিঙ্গেলটন পডগুলি-তে পৃথক পড তৈরি করবেন। এই -কারণ পডগুলি তুলনামূলকভাবে অল্পক্ষণস্থায়ী, নিষ্পত্তিযোগ্য হিসাবে ডিজাইন করা হয়েছে। যখন +কারণে পডগুলি তুলনামূলকভাবে অল্পক্ষণস্থায়ী, নিষ্পত্তিযোগ্য হিসাবে ডিজাইন করা হয়েছে। যখন একটি পড তৈরি করা হয় (প্রত্যক্ষভাবে আপনার দ্বারা বা পরোক্ষভাবে একটি {{}}) দ্বারা, নতুন পডটি আপনার ক্লাস্টারে একটি {{< glossary_tooltip term_id="node" >}} চালানোর জন্য নির্ধারিত হয়। @@ -109,15 +109,15 @@ Kubernetes-এ, এটিকে সাধারণত _প্রতিলিপ {{< note >}} একটি পডের মধ্যে একটি কন্টেইনার পুনরায় চালু করা সাথে একটি পড পুনরায় চালু করার বিভ্রান্ত হওয়া উচিত নয়। একটি পড -একটি প্রক্রিয়া নয়, কিন্তু কন্টেইনার(গুলি) চালানোর জন্য একটি পরিবেশ। এটি মুছে ফেলা না হওয়া পর্যন্ত +একটি প্রক্রিয়া নয়, কিন্তু কন্টেইনার(গুলি) চালানোর জন্য এটি একটি পরিবেশ। এটি মুছে ফেলা না হওয়া পর্যন্ত একটি পড টিকে থাকে। {{< /note >}} একটি পডের নাম অবশ্যই একটি বৈধ -[DNS সাবডোমেন](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names) +[DNS সাবডোমেন](/bn/docs/concepts/overview/working-with-objects/names#dns-subdomain-names) মান হতে হবে, তবে এটি পড হোস্টনামের জন্য অপ্রত্যাশিত ফলাফল তৈরি করতে পারে। সর্বোত্তম সামঞ্জস্যের জন্য, নামের আরো সীমাবদ্ধ নিয়ম অনুসরণ করা উচিত এর জন্য -[DNS লেবেল](/docs/concepts/overview/working-with-objects/names#dns-label-names)। +[DNS লেবেল](/bn/docs/concepts/overview/working-with-objects/names#dns-label-names)। ### পড অপারেটিং সিস্টেম(OS) @@ -133,7 +133,7 @@ Kubernetes-এ, এটিকে সাধারণত _প্রতিলিপ সনাক্ত করতে সহায়তা করে এবং বৈধতার জন্য ব্যবহৃত হয়। Kubelet একটি পড চালাতে প্রত্যাখ্যান করে যেখানে আপনি একটি পড এর অপারেটিং সিস্টেম নির্দিষ্ট করেছেন, যদি এটি সেই নোডের অপারেটিং সিস্টেমের মতো না হয় যেখানে সেই Kubelet চলছে। -[পডের নিরাপত্তা মান](/docs/concepts/security/pod-security-standards/) সেই অপারেটিং সিস্টেমের সাথে প্রাসঙ্গিক নয় +[পডের নিরাপত্তা মান](/bn/docs/concepts/security/pod-security-standards/) সেই অপারেটিং সিস্টেমের সাথে প্রাসঙ্গিক নয় এমন নীতি প্রয়োগ করা এড়াতে এই ক্ষেত্রটিও ব্যবহার করা হয়৷ ### পড এবং কন্ট্রোলার @@ -156,9 +156,9 @@ Kubernetes-এ, এটিকে সাধারণত _প্রতিলিপ এবং আপনার পক্ষে সেই পডগুলি পরিচালনা করে৷ পড টেমপ্লেটগুলি হল পড তৈরির জন্য স্পেসিফিকেশন, এবং ওয়ার্কলোড রিসোর্সগুলির অন্তর্ভুক্ত যেমন -[ডিপলয়ম্যান্টস](/docs/concepts/workloads/controllers/deployment/), -[জব](/docs/concepts/workloads/controllers/job/), এবং -[DaemonSets](/docs/concepts/workloads/controllers/daemonset/)। +[ডিপলয়ম্যান্টস](/bn/docs/concepts/workloads/controllers/deployment/), +[জব](/bn/docs/concepts/workloads/controllers/job/), এবং +[DaemonSets](/bn/docs/concepts/workloads/controllers/daemonset/)। ওয়ার্কলোড রিসোর্সের প্রতিটি কন্ট্রোলার প্রকৃত পড তৈরি করতে ওয়ার্কলোড অবজেক্টের ভিতরে `পড টেম্পলেট` ব্যবহার করে। `PodTemplate` হল আপনার অ্যাপ চালানোর জন্য যে কোনো ওয়ার্কলোড রিসোর্স ব্যবহার @@ -188,14 +188,14 @@ spec: সরাসরি প্রভাব ফেলে না। আপনি যদি কোনও ওয়ার্কলোড রিসোর্সের জন্য পড টেমপ্লেট পরিবর্তন করেন তবে সেই রিসোর্সটি এর প্রতিস্থাপন পড তৈরি করতে হবে যা আপডেট করা টেমপ্লেট ব্যবহার করে। -উদাহরণস্বরূপ, StatefulSet কন্ট্রোলার নিশ্চিত করে যে চলমান পডগুলি প্রতিটি StatefulSet অবজেক্টের -বর্তমান পড টেমপ্লেটের একই ।আপনি যদি স্টেটফুলসেট ইডিট করেন তার পড টেমপ্লেট পরিবর্তন করতে, +উদাহরণস্বরূপ, স্টেটফুলসেট কন্ট্রোলার নিশ্চিত করে যে চলমান পডগুলি প্রতিটি স্টেটফুলসেট অবজেক্টের +বর্তমান পড টেমপ্লেটের একই । আপনি যদি স্টেটফুলসেট ইডিট করেন তার পড টেমপ্লেট পরিবর্তন করতে, স্টেটফুলসেট আপডেট করা টেমপ্লেটের উপর ভিত্তি করে নতুন পড তৈরি করা শুরু করে। অবশেষে, সমস্ত পুরানো পড নতুন পড দিয়ে প্রতিস্থাপিত হয় এবং আপডেট সম্পূর্ণ হয়। -প্রতিটি ওয়ার্কলোড রিসোর্স পড টেমপ্লেটে পরিবর্তনগুলি পরিচালনা করার জন্য নিজস্ব নিয়মগুলি প্রয়োগ করে৷ +প্রতিটি ওয়ার্কলোড রিসোর্স পড টেমপ্লেটের পরিবর্তনগুলি পরিচালনা করার জন্য নিজস্ব নিয়মগুলি প্রয়োগ করে৷ আপনি যদি বিশেষভাবে স্টেটফুলসেট সম্পর্কে আরও পড়তে চান, স্টেটফুলসেট বেসিক টিউটোরিয়ালটিতে -[আপডেট কৌশল](/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets) পড়ুন। +[আপডেট কৌশল](/bn/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets) পড়ুন। নোডগুলিতে, {{< glossary_tooltip term_id="kubelet" text="kubelet">}} পড টেমপ্লেট এবং আপডেটগুলির আশেপাশে কোনও বিবরণ সরাসরি পর্যবেক্ষণ বা পরিচালনা করে না; @@ -212,8 +212,8 @@ spec: কুবারনেটিস আপনাকে সরাসরি পড পরিচালনা করতে বাধা দেয় না। এটি একটি চলমান পডের কিছু ক্ষেত্র আপডেট করা সম্ভব। যাইহোক, পড আপডেটের ক্রিয়াকলাপ যেমন -[`প্যাচ`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#patch-pod-v1-core), এবং -[`প্রতিস্থাপন`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#replace-pod-v1-core) +[`প্যাচ`](/bn/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#patch-pod-v1-core), এবং +[`প্রতিস্থাপন`](/bn/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#replace-pod-v1-core) কিছু সীমাবদ্ধতা রয়েছে : - একটি পড সম্পর্কে বেশিরভাগ মেটাডেটা অপরিবর্তনীয়। উদাহরণস্বরূপ @@ -244,7 +244,7 @@ spec: কন্টেইনারে ভাগ করা ভলিউমগুলি অ্যাক্সেস করতে পারে, সেই কন্টেইনারগুলিকে ডেটা ভাগ করতে দেয় ৷ ভলিউমগুলি একটি পডের মধ্যে স্থায়ী ডেটাকে টিকে থাকার অনুমতি দেয় যদি এর মধ্যে থাকা একটি কন্টেইনারকে পুনরায় চালু করতে হয় । দেখুন -[স্টোরেজ](/docs/concepts/storage/) কুবারনেটিস কীভাবে শেয়ার্ড স্টোরেজ +[স্টোরেজ](/bn/docs/concepts/storage/) কুবারনেটিস কীভাবে শেয়ার্ড স্টোরেজ প্রয়োগ করে এবং এটি পডের কাছে উপলব্ধ করে সে বিষয়ে আরও তথ্যের জন্য। ### পড নেটওয়ার্কিং @@ -264,7 +264,7 @@ POSIX শেয়ার্ড মেমরির সাথে স্ট্য আইপি নেটওয়ার্কিং ব্যবহার করতে পারে। পডের মধ্যে থাকা কন্টেইনারগুলি সিস্টেমের হোস্টনামটিকে পডের জন্য কনফিগার করা -`নাম`-এর মতই দেখতে পায়। এই সেকশনে [networking](/docs/concepts/cluster-administration/networking/) এই বিষয়ে +`নাম`-এর মতই দেখতে পায়। এই সেকশনে [networking](/bn/docs/concepts/cluster-administration/networking/) এই বিষয়ে আরো আছে। ## কন্টেইনারগুলির জন্য বিশেষাধিকার মোড @@ -279,7 +279,7 @@ POSIX শেয়ার্ড মেমরির সাথে স্ট্য ### লিনাক্স বিশেষাধিকার কন্টেইনার লিনাক্সে, পডের যেকোনো কনটেইনার স্পেকের -[নিরাপত্তা প্রসঙ্গ](/docs/tasks/configure-pod-container/security-context/) তে `privileged` (লিনাক্স) ফ্লাগ ব্যবহার করে সুবিধাপ্রাপ্ত মোড +[নিরাপত্তা প্রসঙ্গ](/bn/docs/tasks/configure-pod-container/security-context/) তে `privileged` (লিনাক্স) ফ্লাগ ব্যবহার করে সুবিধাপ্রাপ্ত মোড সক্রিয় করতে পারে। এটি এমন কন্টেইনারগুলির জন্য দরকারী যেগুলি অপারেটিং সিস্টেমের প্রশাসনিক ক্ষমতাগুলি ব্যবহার করতে চায় যেমন নেটওয়ার্ক স্ট্যাক নিপূণভাবে ব্যবহার করা বা হার্ডওয়্যার ডিভাইসগুলি অ্যাক্সেস করা। @@ -288,7 +288,7 @@ POSIX শেয়ার্ড মেমরির সাথে স্ট্য {{< feature-state for_k8s_version="v1.26" state="stable" >}} উইন্ডোজে, আপনি পড স্পেকের নিরাপত্তা প্রসঙ্গে `windowsOptions.hostProcess` ফ্লাগ সেট করে একটি -[উইন্ডোজে HostProcess পড](/docs/tasks/configure-pod-container/create-hostprocess-pod) তৈরি করতে পারেন। এই পডের সমস্ত কন্টেইনার +[উইন্ডোজে HostProcess পড](/bn/docs/tasks/configure-pod-container/create-hostprocess-pod) তৈরি করতে পারেন। এই পডের সমস্ত কন্টেইনার অবশ্যই উইন্ডোজ HostProcess কন্টেইনার হিসাবে চালাতে হবে। HostProcess পডগুলি সরাসরি হোস্টে চলে এবং লিনাক্স সুবিধাপ্রাপ্ত কন্টেইনারগুলির মতো প্রশাসনিক কাজ সম্পাদন করতেও ব্যবহার করা যেতে পারে। @@ -303,12 +303,12 @@ _স্ট্যাটিক পডগুলি_ একটি নির্দি একটি নির্দিষ্ট নোডে স্ট্যাটিক পডগুলি সবসময় একটি {{< glossary_tooltip term_id="kubelet">}} এর সাথে আবদ্ধ থাকে। স্ট্যাটিক পডের প্রধান ব্যবহার হল একটি স্ব-হোস্টেড কন্ট্রোল প্লেনে চালানো: অন্য কথায়, -ব্যক্তিগত [কন্ট্রোল প্লেন উপাদান](/docs/concepts/overview/components/#control-plane-components) তত্ত্বাবধানে kubelet ব্যবহার করা। +ব্যক্তিগত [কন্ট্রোল প্লেন উপাদান](/bn/docs/concepts/overview/components/#control-plane-components) তত্ত্বাবধানে kubelet ব্যবহার করা। kubelet স্বয়ংক্রিয়ভাবে প্রতিটি স্ট্যাটিক পডের জন্য কুবারনেটিস API সার্ভারে একটি {{< glossary_tooltip text="মিরর পড" term_id="mirror-pod" >}} তৈরির চেষ্টা করে। এর মানে হল যে একটি নোডে চলমান পডগুলি API সার্ভারে দৃশ্যমান, -তবে সেখান থেকে নিয়ন্ত্রণ করা যায় না। আরও তথ্যের জন্য [স্থির পড তৈরি করুন](/docs/tasks/configure-pod-container/static-pod) গাইডটি দেখুন। +তবে সেখান থেকে নিয়ন্ত্রণ করা যায় না। আরও তথ্যের জন্য [স্থির পড তৈরি করুন](/bn/docs/tasks/configure-pod-container/static-pod) গাইডটি দেখুন। {{< note >}} একটি স্ট্যাটিক পডের `spec` অন্যান্য API অবজেক্টের উল্লেখ করতে পারে না @@ -338,14 +338,14 @@ kubelet স্বয়ংক্রিয়ভাবে প্রতিটি সম্পদ ভাগ করে নেওয়ার প্রয়োজন হয়। এই সহ-অবস্থিত কন্টেইনারগুলি পরিষেবার একটি একক সমন্বিত ইউনিট গঠন করে—উদাহরণস্বরূপ, একটি কন্টেইনার জনসাধারণের কাছে ভাগ করা ভলিউমে ডেটা সংরক্ষণ করে, যখন একটি পৃথক - {{< glossary_tooltip text="sidecar container" term_id="sidecar-container" >}} + {{< glossary_tooltip text="সাইডকার কন্টেইনার" term_id="sidecar-container" >}} সেই ফাইলগুলিকে রিফ্রেশ বা আপডেট করে৷ পড এই কন্টেইনার, স্টোরেজ রিসোর্স এবং একটি ক্ষণস্থায়ী নেটওয়ার্ক পরিচয়কে একক ইউনিট হিসাবে একত্রে মোড়ক করে। উদাহরণস্বরূপ, আপনার কাছে একটি ধারক থাকতে পারে যেটি একটি শেয়ার্ড ভলিউমের ফাইলগুলির জন্য একটি ওয়েব সার্ভার হিসাবে কাজ করে এবং একটি পৃথক -[সাইডকার কন্টেইনার](/docs/concepts/workloads/pods/sidecar-containers/) +[সাইডকার কন্টেইনার](/bn/docs/concepts/workloads/pods/sidecar-containers/) যা একটি দূরবর্তী উৎস থেকে সেই ফাইলগুলিকে আপডেট করে, যেমনটি নিম্নলিখিত চিত্রে রয়েছে: {{< চিত্র src="/images/docs/pod.svg" alt="পড তৈরির চিত্র" class="diagram-medium" >}} @@ -354,12 +354,12 @@ kubelet স্বয়ংক্রিয়ভাবে প্রতিটি পাশাপাশি {{< glossary_tooltip text="অ্যাপ কন্টেইনার" term_id="app-container" >}}। ডিফল্টরূপে, init কন্টেইনারগুলি অ্যাপ কন্টেইনারগুলি শুরু হওয়ার আগে চলে এবং সম্পূর্ণ হয়। -আপনার কাছে [সাইডকার কন্টেইনার](/docs/concepts/workloads/pods/sidecar-containers/) থাকতে পারে। +আপনার কাছে [সাইডকার কন্টেইনার](/bn/docs/concepts/workloads/pods/sidecar-containers/) থাকতে পারে। যেগুলি প্রধান অ্যাপ্লিকেশন পডকে সহায়ক পরিষেবা প্রদান করে (উদাহরণস্বরূপ: একটি পরিষেবা জাল)। {{< feature-state for_k8s_version="v1.29" state="beta" >}} -ডিফল্টরূপে সক্রিয় করা হয়েছে, `SidecarContainers` [ফিচার গেট](/docs/reference/command-line-tools-reference/feature-gates/) +ডিফল্টরূপে সক্রিয় করা হয়েছে, `SidecarContainers` [ফিচার গেট](/bn/docs/reference/command-line-tools-reference/feature-gates/) init কন্টেইনারগুলির জন্য আপনাকে `restartPolicy: সর্বদা` নির্দিষ্ট করতে দেয়। 'সর্বদা' পুনঃসূচনা নীতি সেট করা নিশ্চিত করে যে কন্টেইনারগুলি যেখানে আপনি এটি সেট করেছেন সেগুলিকে _sidecars_ হিসাবে গণ্য করা হয় যেগুলি পডের পুরো জীবনকাল চলা অবস্থায় থাকে। @@ -376,15 +376,15 @@ init কন্টেইনারগুলির জন্য আপনাকে - `TCPSocketAction` (kubelet দ্বারা সরাসরি চেক করা হয়েছে) - `HTTPGetAction` (kubelet দ্বারা সরাসরি চেক করা হয়েছে) -আপনি পডের জীবনচক্র ডকুমেন্টেশনে [probes](/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) +আপনি পডের জীবনচক্র ডকুমেন্টেশনে [probes](/bn/docs/concepts/workloads/pods/pod-lifecycle/#container-probes) সম্পর্কে আরও পড়তে পারেন। ## {{% heading "whatsnext" %}} -* [একটি পডের জীবনচক্র](/docs/concepts/workloads/pods/pod-lifecycle/) সম্পর্কে জানুন। -* [RuntimeClass](/docs/concepts/containers/runtime-class/) সম্পর্কে জানুন এবং আপনি কীভাবে এটি ব্যবহার করতে পারেন +* [একটি পডের জীবনচক্র](/bn/docs/concepts/workloads/pods/pod-lifecycle/) সম্পর্কে জানুন। +* [RuntimeClass](/bn/docs/concepts/containers/runtime-class/) সম্পর্কে জানুন এবং আপনি কীভাবে এটি ব্যবহার করতে পারেন বিভিন্ন কন্টেইনারের রানটাইম কনফিগারেশন সহ বিভিন্ন পড কনফিগার করুন। -* [PodDisruptionBudget](/docs/concepts/workloads/pods/disruptions/) সম্পর্কে পড়ুন এবং প্রতিবন্ধকতার সময় অ্যাপ্লিকেশনের প্রাপ্যতা পরিচালনা করার জন্য আপনি কীভাবে এটি ব্যবহার করতে পারেন। +* [PodDisruptionBudget](/bn/docs/concepts/workloads/pods/disruptions/) সম্পর্কে পড়ুন এবং প্রতিবন্ধকতার সময় অ্যাপ্লিকেশনের প্রাপ্যতা পরিচালনা করার জন্য আপনি কীভাবে এটি ব্যবহার করতে পারেন। * Pod হল Kubernetes REST API-এর একটি শীর্ষ-স্তরের রিসোর্স। {{< api-reference page="workload-resources/pod-v1" >}} অবজেক্টের সংজ্ঞা বস্তুর বিস্তারিত বর্ণনা করে। From 34201e6ed53883a76ac74b27f94d652025bfaa96 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Tue, 12 Mar 2024 02:44:49 +0600 Subject: [PATCH 0177/1086] Update _index.md --- content/bn/docs/concepts/workloads/pods/_index.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/bn/docs/concepts/workloads/pods/_index.md b/content/bn/docs/concepts/workloads/pods/_index.md index b3deed9bc8..76cbbb3541 100644 --- a/content/bn/docs/concepts/workloads/pods/_index.md +++ b/content/bn/docs/concepts/workloads/pods/_index.md @@ -26,7 +26,7 @@ _পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্র -## পড কি? +## পড কি ? {{< note >}} ক্লাস্টারের প্রতিটি নোডে আপনাকে একটি [কন্টেইনার রানটাইম](/bn/docs/setup/production-environment/container-runtimes/) ইনস্টল @@ -48,7 +48,7 @@ _পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্র * **পডগুলি যা একাধিক কন্টেইনার চলে যা একসাথে কাজ করা দরকার** একটি পড [একাধিক সহ-অবস্থিত কন্টেইনার](#how-pods-manage-multiple-containers) দ্বারা গঠিত একটি অ্যাপ্লিকেশনকে এনক্যাপসুলেট করতে পারে - যেগুলি শক্তভাবে সংযুক্ত এবং সম্পদ ভাগ করতে হবে৷ এই সহ-অবস্থিত কন্টেইনারগুলি + যেগুলি শক্তভাবে সংযুক্ত এবং রিসোর্স ভাগ করতে হবে৷ এই সহ-অবস্থিত কন্টেইনারগুলি একটি একক সমন্বিত ইউনিট গঠন করে। একটি একক পডে একাধিক সহ-অবস্থিত এবং সহ-পরিচালিত পাত্রে গোষ্ঠীবদ্ধ করা একটি @@ -93,7 +93,7 @@ term_id="deployment" >}} বা {{< glossary_tooltip text="চাকরি" term কুবারনেটিস অ্যাপ্লিকেশন বাস্তবায়নের জন্য ওয়ার্কলোড রিসোর্স এবং তাদের কন্ট্রোলার ব্যবহার করে স্কেলিং এবং অটো-হিলিং। -পডগুলি স্থানীয়ভাবে তাদের উপাদান পাত্রের জন্য দুটি ধরণের ভাগ করা রিসোর্স সরবরাহ করে: +পডগুলি স্থানীয়ভাবে তাদের উপাদান পাত্রের জন্য দুই ধরণের ভাগ করা রিসোর্স সরবরাহ করে: [নেটওয়ার্কিং](#pod-networking) এবং [স্টোরেজ](#pod-storage)। @@ -322,20 +322,20 @@ kubelet স্বয়ংক্রিয়ভাবে প্রতিটি পডগুলি একাধিক সহযোগিতা প্রক্রিয়া (পাত্র হিসাবে) সমর্থন করার জন্য ডিজাইন করা হয়েছে যা পরিষেবার একটি সমন্বিত একক গঠন করে। একটি পডের পাত্রগুলি ক্লাস্টারের একই শারীরিক বা ভার্চুয়াল মেশিনে স্বয়ংক্রিয়ভাবে সহ-অবস্থিত এবং সহ-নির্ধারিত। কন্টেইনারগুলি -সম্পদ এবং নির্ভরতা ভাগ করে নিতে পারে, একে অপরের সাথে যোগাযোগ করতে পারে এবং কখন এবং কীভাবে সেগুলি +রিসোর্স এবং নির্ভরতা ভাগ করে নিতে পারে, একে অপরের সাথে যোগাযোগ করতে পারে এবং কখন এবং কীভাবে সেগুলি বন্ধ করা হয় তা সমন্বয় করতে পারে। কুবারনেটিস ক্লাস্টারের পড দুটি প্রধান উপায়ে ব্যবহৃত হয়: -* **পড যা একটি একক পাত্র চালায়**। "এক-কন্টেইনার-পার-পড" মডেলটি কুবারনেটিসের +* **পড যা একটি একক পাত্র চালায়**। "এক-কন্টেইনার-প্রতি-পড" মডেলটি কুবারনেটিসের সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে; এই ক্ষেত্রে, আপনি একটি একক পাত্রের চারপাশে একটি মোড়ক হিসাবে একটি পডকে ভাবতে পারেন; কুবারনেটস সরাসরি কন্টেইনারগুলি পরিচালনা করার পরিবর্তে পডগুলি পরিচালনা করে। * **পড যা একাধিক পাত্র চালায় যেগুলি একসাথে কাজ করতে হবে**। একটি পড একাধিক সহ-অবস্থিত পাত্রে গঠিত একটি অ্যাপ্লিকেশনকে এনক্যাপসুলেট করতে পারে যা শক্তভাবে সংযুক্ত থাকে এবং - সম্পদ ভাগ করে নেওয়ার প্রয়োজন হয়। এই সহ-অবস্থিত কন্টেইনারগুলি + রিসোর্স ভাগ করে নেওয়ার প্রয়োজন হয়। এই সহ-অবস্থিত কন্টেইনারগুলি পরিষেবার একটি একক সমন্বিত ইউনিট গঠন করে—উদাহরণস্বরূপ, একটি কন্টেইনার জনসাধারণের কাছে ভাগ করা ভলিউমে ডেটা সংরক্ষণ করে, যখন একটি পৃথক {{< glossary_tooltip text="সাইডকার কন্টেইনার" term_id="sidecar-container" >}} From bac185db3f57e0db57a6d8eccf1787c1d7e992a2 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Tue, 12 Mar 2024 04:21:00 +0000 Subject: [PATCH 0178/1086] [bn] Localize `content/bn/docs/setup/production-environment/tools/_index.md` --- .../production-environment/tools/_index.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 content/bn/docs/setup/production-environment/tools/_index.md diff --git a/content/bn/docs/setup/production-environment/tools/_index.md b/content/bn/docs/setup/production-environment/tools/_index.md new file mode 100644 index 0000000000..874c67db38 --- /dev/null +++ b/content/bn/docs/setup/production-environment/tools/_index.md @@ -0,0 +1,22 @@ +--- +title: স্থাপনার সরঞ্জাম সহ কুবারনেটিস ইনস্টল করা +weight: 30 +no_list: true +--- + +আপনার নিজস্ব প্রোডাকশন কুবারনেটিস ক্লাস্টার সেট আপ করার জন্য অনেক পদ্ধতি এবং সরঞ্জাম আছে। +উদাহরণ স্বরূপ: + +- [কুবেআদম](/bn/docs/setup/production-environment/tools/kubeadm/) + +- [কপ্স](https://kops.sigs.k8s.io/): একটি স্বয়ংক্রিয় ক্লাস্টার প্রভিশনিং টুল। + টিউটোরিয়াল, সর্বোত্তম অনুশীলন, কনফিগারেশন বিকল্প এবং তথ্যের জন্য + সম্প্রদায়ের কাছে পৌঁছানো, বিস্তারিত জানার জন্য + অনুগ্রহ করে চেক করুন [`kOps` ওয়েবসাইট](https://kops.sigs.k8s.io/)। + +- [Kubespray](https://kubespray.io/): + [Ansible](https://docs.ansible.com/) প্লেবুকের একটি রচনা, + [ইনভেন্টরি](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/ansible.md#inventory), + প্রভিশনিং টুলস, এবং জেনেরিক ওস/কুবারনেটিস ক্লাস্টার কনফিগারেশনের জন্য ডোমেন জ্ঞান + ব্যবস্থাপনা কাজ। আপনি স্ল্যাক চ্যানেলে সম্প্রদায়ের সাথে যোগাযোগ করতে পারেন + [#kubespray](https://kubernetes.slack.com/messages/kubespray/)। \ No newline at end of file From 2824b384b0f0f21ca346a59572b158736a3b0a2e Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Tue, 12 Mar 2024 04:21:00 +0000 Subject: [PATCH 0179/1086] [bn] Localize content/bn/docs/setup/production-environment/tools/_index.md Signed-off-by: Sajib Adhikary --- .../production-environment/tools/_index.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 content/bn/docs/setup/production-environment/tools/_index.md diff --git a/content/bn/docs/setup/production-environment/tools/_index.md b/content/bn/docs/setup/production-environment/tools/_index.md new file mode 100644 index 0000000000..874c67db38 --- /dev/null +++ b/content/bn/docs/setup/production-environment/tools/_index.md @@ -0,0 +1,22 @@ +--- +title: স্থাপনার সরঞ্জাম সহ কুবারনেটিস ইনস্টল করা +weight: 30 +no_list: true +--- + +আপনার নিজস্ব প্রোডাকশন কুবারনেটিস ক্লাস্টার সেট আপ করার জন্য অনেক পদ্ধতি এবং সরঞ্জাম আছে। +উদাহরণ স্বরূপ: + +- [কুবেআদম](/bn/docs/setup/production-environment/tools/kubeadm/) + +- [কপ্স](https://kops.sigs.k8s.io/): একটি স্বয়ংক্রিয় ক্লাস্টার প্রভিশনিং টুল। + টিউটোরিয়াল, সর্বোত্তম অনুশীলন, কনফিগারেশন বিকল্প এবং তথ্যের জন্য + সম্প্রদায়ের কাছে পৌঁছানো, বিস্তারিত জানার জন্য + অনুগ্রহ করে চেক করুন [`kOps` ওয়েবসাইট](https://kops.sigs.k8s.io/)। + +- [Kubespray](https://kubespray.io/): + [Ansible](https://docs.ansible.com/) প্লেবুকের একটি রচনা, + [ইনভেন্টরি](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/ansible.md#inventory), + প্রভিশনিং টুলস, এবং জেনেরিক ওস/কুবারনেটিস ক্লাস্টার কনফিগারেশনের জন্য ডোমেন জ্ঞান + ব্যবস্থাপনা কাজ। আপনি স্ল্যাক চ্যানেলে সম্প্রদায়ের সাথে যোগাযোগ করতে পারেন + [#kubespray](https://kubernetes.slack.com/messages/kubespray/)। \ No newline at end of file From 7cf72488142918ac198e256a90f964e4649f6b6a Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Tue, 12 Mar 2024 05:21:27 +0000 Subject: [PATCH 0180/1086] [bn] Localize Resolved Issies content/bn/docs/setup/production-environment/tools/_index.md --- .../setup/production-environment/tools/_index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/content/bn/docs/setup/production-environment/tools/_index.md b/content/bn/docs/setup/production-environment/tools/_index.md index 874c67db38..c5a1a4dc8e 100644 --- a/content/bn/docs/setup/production-environment/tools/_index.md +++ b/content/bn/docs/setup/production-environment/tools/_index.md @@ -7,16 +7,16 @@ no_list: true আপনার নিজস্ব প্রোডাকশন কুবারনেটিস ক্লাস্টার সেট আপ করার জন্য অনেক পদ্ধতি এবং সরঞ্জাম আছে। উদাহরণ স্বরূপ: -- [কুবেআদম](/bn/docs/setup/production-environment/tools/kubeadm/) +- [kubeadm](/bn/docs/setup/production-environment/tools/kubeadm/) -- [কপ্স](https://kops.sigs.k8s.io/): একটি স্বয়ংক্রিয় ক্লাস্টার প্রভিশনিং টুল। - টিউটোরিয়াল, সর্বোত্তম অনুশীলন, কনফিগারেশন বিকল্প এবং তথ্যের জন্য - সম্প্রদায়ের কাছে পৌঁছানো, বিস্তারিত জানার জন্য - অনুগ্রহ করে চেক করুন [`kOps` ওয়েবসাইট](https://kops.sigs.k8s.io/)। +- [kops](https://kops.sigs.k8s.io/): একটি স্বয়ংক্রিয় ক্লাস্টার প্রভিশনিং টুল। + টিউটোরিয়াল, সর্বোত্তম অনুশীলন, কনফিগারেশন বিকল্প এবং কমিউনিটির + কাছে পৌঁছানো তথ্যের জন্য, অনুগ্রহ করে চেক করুন + [`kOps` ওয়েবসাইট](https://kops.sigs.k8s.io/) বিস্তারিত জানতে। - [Kubespray](https://kubespray.io/): [Ansible](https://docs.ansible.com/) প্লেবুকের একটি রচনা, [ইনভেন্টরি](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/ansible.md#inventory), - প্রভিশনিং টুলস, এবং জেনেরিক ওস/কুবারনেটিস ক্লাস্টার কনফিগারেশনের জন্য ডোমেন জ্ঞান - ব্যবস্থাপনা কাজ। আপনি স্ল্যাক চ্যানেলে সম্প্রদায়ের সাথে যোগাযোগ করতে পারেন + প্রভিশনিং টুলস, এবং জেনেরিক ওস/কুবারনেটিস ক্লাস্টার কনফিগারেশন ব্যবস্থাপনা কাজের + জন্য ডোমেন জ্ঞান । আপনি স্ল্যাক চ্যানেলে সম্প্রদায়ের সাথে যোগাযোগ করতে পারেন [#kubespray](https://kubernetes.slack.com/messages/kubespray/)। \ No newline at end of file From a81d40ac9aa74c0043be0c5b2a783c7e72346dd0 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Tue, 12 Mar 2024 06:00:37 +0000 Subject: [PATCH 0181/1086] [bn] Localize content/bn/_index.html update --- content/bn/_index.html | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/content/bn/_index.html b/content/bn/_index.html index 53c72b3842..ef4dd9e053 100644 --- a/content/bn/_index.html +++ b/content/bn/_index.html @@ -6,31 +6,35 @@ sitemap: priority: 1.0 --- +{{< site-searchbar >}} + {{< blocks/section id="oceanNodes" >}} {{% blocks/feature image="flower" %}} -[কুবারনেটিস]({{< relref "/docs/concepts/overview/what-is-kubernetes" >}}), K8s নামেও পরিচিত, কনটেইনারাইজড অ্যাপ্লিকেশনের স্বয়ংক্রিয় স্থাপনা, স্কেলিং এবং পরিচালনার জন্য একটি ওপেন-সোর্স সিস্টেম। +[কুবারনেটিস]({{< relref "/docs/concepts/overview/" >}}), K8s নামেও পরিচিত, কনটেইনারাইজড অ্যাপ্লিকেশনের স্বয়ংক্রিয় স্থাপনা, স্কেলিং এবং পরিচালনার জন্য একটি ওপেন-সোর্স সিস্টেম। এটি কন্টেইনারগুলিকে গোষ্ঠীভুক্ত করে যা সহজ ব্যবস্থাপনা এবং আবিষ্কারের জন্য লজিক্যাল ইউনিটে একটি অ্যাপ্লিকেশন তৈরি করে। কুবারনেটিস [Google-এ উৎপাদন কাজের লোড চালানোর 15 বছরের অভিজ্ঞতার](http://queue.acm.org/detail.cfm?id=2898444) দ্বারা উৎপাদন কাজ সর্বোত্তম-জাত ধারণা এবং অনুশীলনের মাধ্যমে পরিচালনা করে। {{% /blocks/feature %}} {{% blocks/feature image="scalable" %}} -#### বিশ্বব্যাপী স্কেল ক্ষমতা +#### গ্রহ স্কেল Google সপ্তাহে বিলিয়ন কন্টেইনার চালানোর জন্য যে নীতিতে ডিজাইন প্রয়োগ করে, সেই একই নীতিতে কুবারনেটিস ডিজাইন করা হয়, ফলস্বরূপ কুবারনেটিস ব্যবহারকারীরা অপস টিম না বাড়িয়ে স্কেল করতে পারে। {{% /blocks/feature %}} {{% blocks/feature image="blocks" %}} -#### প্রয়োজন মোতাবেক বিকাশ ঘটানো +#### কখনই আউটগ্রো করবে না -স্থানীয়ভাবে পরীক্ষা করা বা বিশ্বব্যাপী এন্টারপ্রাইজ চালানো, আপনার চাহিদাগুলি যতই জটিল হোক না কেন, কুবারনেটিস আপনার অ্যাপ্লিকেশনগুলিকে ধারাবাহিকভাবে এবং সহজে বিতরণ করার জন্য আপনাকে সাহায্য করে। +স্থানীয়ভাবে পরীক্ষা করা হোক বা বিশ্বব্যাপী এন্টারপ্রাইজ চালানো হোক না কেন, আপনার প্রয়োজনীয়তা যত জটিলই হোক না কেন আপনার অ্যাপ্লিকেশনগুলিকে ধারাবাহিকভাবে এবং সহজে সরবরাহ করতে Kubernetes নমনীয়তা আপনার সাথে বৃদ্ধি পায়। {{% /blocks/feature %}} {{% blocks/feature image="suitcase" %}} -#### K8s যেকোনো এপ্লিকেশন এ রান করানো +#### যে কোন জায়গায় K8s চালান -কুবারনেটিস হল এমন ওপেন সোর্স যা আপনাকে অন-প্রিমিসেস, হাইব্রিড বা পাবলিক ক্লাউড অবকাঠামোর সুবিধা নেওয়ার স্বাধীনতা দেয়, যাতে আপনি সহজেই কাজের চাপগুলি যেখানে আপনার কাছে গুরুত্বপূর্ণ সেখানে স্থানান্তর করতে পারেন। +কুবারনেটিস হল ওপেন সোর্স যা আপনাকে অন-প্রিমিসেস, হাইব্রিড বা পাবলিক ক্লাউড অবকাঠামোর সুবিধা নেওয়ার স্বাধীনতা দেয়, যেখানে আপনি অনায়াসে কাজের চাপ আপনার কাছে গুরুত্বপূর্ণ সেখানে স্থানান্তর করতে দেন। + +কুবারনেটিস ডাউনলোড করতে, [ডাউনলোড](/releases/download/) বিভাগে যান। {{% /blocks/feature %}} @@ -38,17 +42,17 @@ Google সপ্তাহে বিলিয়ন কন্টেইনার {{< blocks/section id="video" background-image="kub_video_banner_homepage" >}}
@@ -58,4 +62,4 @@ Google সপ্তাহে বিলিয়ন কন্টেইনার {{< blocks/kubernetes-features >}} -{{< blocks/case-studies >}} +{{< blocks/case-studies >}} \ No newline at end of file From 4ca8dd1620544e7abb84404362e9135d94f53989 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Tue, 12 Mar 2024 06:32:04 +0000 Subject: [PATCH 0182/1086] [bn] Localize content/bn/releases/download.md update Signed-off-by: Sajib Adhikary --- content/bn/releases/download.md | 56 ++++++++++++++++----------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/content/bn/releases/download.md b/content/bn/releases/download.md index bef7c320e5..45e22136c6 100644 --- a/content/bn/releases/download.md +++ b/content/bn/releases/download.md @@ -3,25 +3,25 @@ title: কুবারনেটিস ডাউনলোড করুন type: docs --- -কুবারনেটিস প্রতিটি উপাদানের জন্য বাইনারি পাঠায় সেইসাথে একটি ক্লাস্টারের সাথে বুটস্ট্র্যাপ বা -ইন্টারঅ্যাক্ট (interact) করার জন্য ক্লায়েন্ট অ্যাপ্লিকেশনগুলোর একটি আদর্শ সেটও পাঠায় । এপিআই -সার্ভারের মতো উপাদানগুলো একটি ক্লাস্টারের ভিতরে কন্টেইনার ইমেজগুলোর মধ্যে চলতে সক্ষম । -সেই উপাদানগুলো অফিসিয়াল রিলিজ প্রক্রিয়ার অংশ হিসাবে কন্টেইনার ইমেজেও পাঠানো হয় । -সমস্ত বাইনারি এবং সেইসাথে কন্টেইনার ইমেজ একাধিক অপারেটিং সিস্টেমের পাশাপাশি -একাধিক হার্ডওয়্যার আর্কিটেকচারের জন্য উপলব্ধ (available) । +কুবারনেটিস প্রতিটি উপাদানের জন্য বাইনারি পাঠায় সেইসাথে একটি ক্লাস্টারের সাথে বুটস্ট্র্যাপ বা +ইন্টারঅ্যাক্ট (interact) করার জন্য ক্লায়েন্ট অ্যাপ্লিকেশনগুলোর একটি আদর্শ সেটও পাঠায়। এপিআই +সার্ভারের মতো উপাদানগুলো একটি ক্লাস্টারের ভিতরে কন্টেইনার ইমেজগুলোর মধ্যে চলতে সক্ষম। +সেই উপাদানগুলো অফিসিয়াল রিলিজ প্রক্রিয়ার অংশ হিসাবে কন্টেইনার ইমেজেও পাঠানো হয়। +সমস্ত বাইনারি এবং সেইসাথে কন্টেইনার ইমেজ একাধিক অপারেটিং সিস্টেমের পাশাপাশি +একাধিক হার্ডওয়্যার আর্কিটেকচারের জন্য উপলব্ধ (available)। ### kubectl -কুবারনেটিস কমান্ড-লাইন টুল, [kubectl](/bn/docs/reference/kubectl/kubectl/), -আপনাকে কুবারনেটিস ক্লাস্টারগুলোর বিপরীতে কমান্ড চালানোর অনুমতি দেয় । +কুবারনেটিস কমান্ড-লাইন টুল, [kubectl](/bn/docs/reference/kubectl/kubectl/), +আপনাকে কুবারনেটিস ক্লাস্টারগুলোর বিপরীতে কমান্ড চালানোর অনুমতি দেয়। -আপনি অ্যাপ্লিকেশন স্থাপন(deploy) করতে, ক্লাস্টার রিসোর্স পরিদর্শন ও পরিচালনা করতে এবং লগ দেখতে kubectl -ব্যবহার করতে পারেন । kubectl অপারেশনগুলোর একটি সম্পূর্ণ তালিকা সহ আরও তথ্যের জন্য, -[`kubectl` রেফারেন্স ডকুমেন্টেশন](/bn/docs/reference/kubectl/) দেখুন । +আপনি অ্যাপ্লিকেশন স্থাপন(deploy) করতে, ক্লাস্টার রিসোর্স পরিদর্শন ও পরিচালনা করতে এবং লগ দেখতে kubectl +ব্যবহার করতে পারেন। kubectl অপারেশনগুলোর একটি সম্পূর্ণ তালিকা সহ আরও তথ্যের জন্য, +[`kubectl` রেফারেন্স ডকুমেন্টেশন](/bn/docs/reference/kubectl/) দেখুন। -kubectl বিভিন্ন লিনাক্স প্ল্যাটফর্ম, macOS এবং উইন্ডোজে ইনস্টলযোগ্য । +kubectl বিভিন্ন লিনাক্স প্ল্যাটফর্ম, ম্যাকওস এবং উইন্ডোজে ইনস্টলযোগ্য। নীচে আপনার পছন্দের অপারেটিং সিস্টেম খুঁজুন। - [লিনাক্সে kubectl ইনস্টল করুন](/bn/docs/tasks/tools/install-kubectl-linux) @@ -30,10 +30,10 @@ kubectl বিভিন্ন লিনাক্স প্ল্যাটফর ## কন্টেইনার ইমেজ -সমস্ত কুবারনেটিস কন্টেইনার ছবি `registry.k8s.io` +সমস্ত কুবারনেটিস কন্টেইনার ছবি `registry.k8s.io` কন্টেইনার ইমেজ রেজিস্ট্রিতে স্থাপন করা হয় । -| কন্টেইনার ইমেজ | সমর্থিত আর্কিটেকচার | +| কন্টেইনার ইমেজ | সমর্থিত আর্কিটেকচার | | ------------------------------------------------------------------------- | --------------------------------- | | registry.k8s.io/kube-apiserver:v{{< skew currentPatchVersion >}} | amd64, arm, arm64, ppc64le, s390x | | registry.k8s.io/kube-controller-manager:v{{< skew currentPatchVersion >}} | amd64, arm, arm64, ppc64le, s390x | @@ -43,38 +43,38 @@ kubectl বিভিন্ন লিনাক্স প্ল্যাটফর ### কন্টেইনার ইমেজ আর্কিটেকচার -সমস্ত কন্টেইনার ইমেজ একাধিক আর্কিটেকচারের জন্য উপলব্ধ, যেখানে কন্টেইনার +সমস্ত কন্টেইনার ইমেজ একাধিক আর্কিটেকচারের জন্য উপলব্ধ, যেখানে কন্টেইনার রানটাইম অন্তর্নিহিত প্ল্যাটফর্মের উপর ভিত্তি করে সঠিকটি বেছে নেওয়া উচিত। -কন্টেইনার ইমেজ নামের প্রত্যয়যোগ একটি ডেডিকেটেড আর্কিটেকচারও নেওয়া সম্ভব, +কন্টেইনার ইমেজ নামের প্রত্যয়যোগ একটি ডেডিকেটেড আর্কিটেকচারও নেওয়া সম্ভব, উদাহরণস্বরূপ -`registry.k8s.io/kube-apiserver-arm64:v{{< skew currentPatchVersion >}}` । +`registry.k8s.io/kube-apiserver-arm64:v{{< skew currentPatchVersion >}}`। ### কন্টেইনার ইমেজ স্বাক্ষর {{< feature-state for_k8s_version="v1.26" state="beta" >}} -কুবারনেটিস {{< param "version" >}} এর জন্য, -কন্টেইনার ইমেজগুলো [sigstore](https://sigstore.dev) স্বাক্ষর +কুবারনেটিস {{< param "version" >}} এর জন্য, +কন্টেইনার ইমেজগুলো [sigstore](https://sigstore.dev) স্বাক্ষর ব্যবহার করে স্বাক্ষরিত হয়: {{< note >}} -কন্টেইনার ইমেজ sigstore স্বাক্ষর বর্তমানে বিভিন্ন ভৌগলিক অবস্থানের মধ্যে মেলে না। -এই সমস্যা সম্পর্কে আরও তথ্য সংশ্লিষ্ট [GitHub issue](https://github.com/kubernetes/registry.k8s.io/issues/187) -তে পাওয়া যাবে । -{{< /note >} +কন্টেইনার ইমেজ sigstore স্বাক্ষর বর্তমানে বিভিন্ন ভৌগলিক অবস্থানের মধ্যে মেলে না। +এই সমস্যা সম্পর্কে আরও তথ্য সংশ্লিষ্ট [GitHub issue](https://github.com/kubernetes/registry.k8s.io/issues/187) +তে পাওয়া যাবে। +{{< /note >}} -কুবারনেটিস প্রজেক্ট [SPDX 2.3](https://spdx.dev/specifications/) ফরম্যাটে স্বাক্ষরিত -কুবারনেটিস কন্টেইনার ইমেজের একটি তালিকা প্রকাশ করে। +কুবারনেটিস প্রজেক্ট [SPDX 2.3](https://spdx.dev/specifications/) ফরম্যাটে স্বাক্ষরিত +কুবারনেটিস কন্টেইনার ইমেজের একটি তালিকা প্রকাশ করে। আপনি এই তালিকাটি আনতে ব্যবহার করতে পারেন: ```shell curl -Ls "https://sbom.k8s.io/$(curl -Ls https://dl.k8s.io/release/stable.txt)/release" | grep "SPDXID: SPDXRef-Package-registry.k8s.io" | grep -v sha256 | cut -d- -f3- | sed 's/-/\//' | sed 's/-v1/:v1/' ``` -কুবারনেটিস মূল উপাদানগুলোর স্বাক্ষরিত কন্টেইনার ইমেজগুলো ম্যানুয়ালি যাচাই করতে, -[স্বাক্ষরিত কন্টেইনার ইমেজগুলো যাচাই](/bn/docs/tasks/administer-cluster/verify-signed-artifacts) করুন । +কুবারনেটিস মূল উপাদানগুলোর স্বাক্ষরিত কন্টেইনার ইমেজগুলো ম্যানুয়ালি যাচাই করতে, +[স্বাক্ষরিত কন্টেইনার ইমেজগুলো যাচাই](/bn/docs/tasks/administer-cluster/verify-signed-artifacts) করুন। -আপনি যদি একটি নির্দিষ্ট আর্কিটেকচারের জন্য একটি কন্টেইনার ইমেজ নেন, +আপনি যদি একটি নির্দিষ্ট আর্কিটেকচারের জন্য একটি কন্টেইনার ইমেজ নেন, তাহলে একক-আর্কিটেকচার ইমেজটি মাল্টি-আর্কিটেকচার ম্যানিফেস্ট তালিকার মতোই সাইন ইন করা হয়। ## বাইনারি From ed5ffed5c51a86968ffbb86834a1cfce390b9793 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Tue, 12 Mar 2024 06:50:43 +0000 Subject: [PATCH 0183/1086] [bn] Fix: Localize content/bn/_index.html Signed-off-by: Sajib Adhikary --- content/bn/_index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/bn/_index.html b/content/bn/_index.html index ef4dd9e053..40f122fbd1 100644 --- a/content/bn/_index.html +++ b/content/bn/_index.html @@ -16,7 +16,7 @@ sitemap: {{% /blocks/feature %}} {{% blocks/feature image="scalable" %}} -#### গ্রহ স্কেল +#### বিশ্বব্যাপী স্কেল Google সপ্তাহে বিলিয়ন কন্টেইনার চালানোর জন্য যে নীতিতে ডিজাইন প্রয়োগ করে, সেই একই নীতিতে কুবারনেটিস ডিজাইন করা হয়, ফলস্বরূপ কুবারনেটিস ব্যবহারকারীরা অপস টিম না বাড়িয়ে স্কেল করতে পারে। @@ -25,14 +25,14 @@ Google সপ্তাহে বিলিয়ন কন্টেইনার {{% blocks/feature image="blocks" %}} #### কখনই আউটগ্রো করবে না -স্থানীয়ভাবে পরীক্ষা করা হোক বা বিশ্বব্যাপী এন্টারপ্রাইজ চালানো হোক না কেন, আপনার প্রয়োজনীয়তা যত জটিলই হোক না কেন আপনার অ্যাপ্লিকেশনগুলিকে ধারাবাহিকভাবে এবং সহজে সরবরাহ করতে Kubernetes নমনীয়তা আপনার সাথে বৃদ্ধি পায়। +স্থানীয়ভাবে পরীক্ষা করা হোক বা বিশ্বব্যাপী এন্টারপ্রাইজ চালানো হোক না কেন, আপনার প্রয়োজনীয়তা যত জটিলই হোক না কেন আপনার অ্যাপ্লিকেশনগুলিকে ধারাবাহিকভাবে এবং সহজে সরবরাহ করতে কুবারনেটিসের নমনীয়তা আপনার সাথে বৃদ্ধি পায়। {{% /blocks/feature %}} {{% blocks/feature image="suitcase" %}} #### যে কোন জায়গায় K8s চালান -কুবারনেটিস হল ওপেন সোর্স যা আপনাকে অন-প্রিমিসেস, হাইব্রিড বা পাবলিক ক্লাউড অবকাঠামোর সুবিধা নেওয়ার স্বাধীনতা দেয়, যেখানে আপনি অনায়াসে কাজের চাপ আপনার কাছে গুরুত্বপূর্ণ সেখানে স্থানান্তর করতে দেন। +কুবারনেটিস হল ওপেন সোর্স যা আপনাকে অন-প্রিমিসেস, হাইব্রিড বা পাবলিক ক্লাউড অবকাঠামোর সুবিধা নেওয়ার স্বাধীনতা দেয়, যাতে আপনি সহজেই কাজের চাপগুলি যেখানে আপনার কাছে গুরুত্বপূর্ণ সেখানে স্থানান্তর করতে পারেন। কুবারনেটিস ডাউনলোড করতে, [ডাউনলোড](/releases/download/) বিভাগে যান। From 7fa8e17d569ad9fd3518ed9660c4f4ed8eee7f28 Mon Sep 17 00:00:00 2001 From: Puru <5674762+tuladhar@users.noreply.github.com> Date: Wed, 13 Mar 2024 09:14:42 +0545 Subject: [PATCH 0184/1086] Move suffix parameter to the second position --- .../tools/kubeadm/control-plane-flags.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/control-plane-flags.md b/content/en/docs/setup/production-environment/tools/kubeadm/control-plane-flags.md index 6b3724c8f7..046a727f76 100644 --- a/content/en/docs/setup/production-environment/tools/kubeadm/control-plane-flags.md +++ b/content/en/docs/setup/production-environment/tools/kubeadm/control-plane-flags.md @@ -170,12 +170,12 @@ For example, `kube-apiserver0+merge.yaml` or just `etcd.json`. - `target` can be one of `kube-apiserver`, `kube-controller-manager`, `kube-scheduler`, `etcd` and `kubeletconfiguration`. +- `suffix` is an optional string that can be used to determine which patches are applied first +alpha-numerically. - `patchtype` can be one of `strategic`, `merge` or `json` and these must match the patching formats [supported by kubectl](/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch). The default `patchtype` is `strategic`. - `extension` must be either `json` or `yaml`. -- `suffix` is an optional string that can be used to determine which patches are applied first -alpha-numerically. {{< note >}} If you are using `kubeadm upgrade` to upgrade your kubeadm nodes you must again provide the same From 798020b176d985a5b38bf9967cf22364d0cdee87 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary Date: Wed, 13 Mar 2024 12:57:47 +0600 Subject: [PATCH 0185/1086] [bn] Localize content/bn/docs/reference/glossary/container-runtime.md Signed-off-by: Sajib Adhikary --- .../reference/glossary/container-runtime.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 content/bn/docs/reference/glossary/container-runtime.md diff --git a/content/bn/docs/reference/glossary/container-runtime.md b/content/bn/docs/reference/glossary/container-runtime.md new file mode 100644 index 0000000000..7cd0f75ef5 --- /dev/null +++ b/content/bn/docs/reference/glossary/container-runtime.md @@ -0,0 +1,22 @@ +--- +title: কন্টেইনার রানটাইম +id: container-runtime +date: 2019-06-05 +full_link: /bn/docs/setup/production-environment/container-runtimes +short_description: > + কন্টেইনার রানটাইম হল সেই সফটওয়্যার যা কন্টেইনার চালানোর জন্য দায়ী। + +aka: +tags: +- fundamental +- workload +--- + একটি মৌলিক উপাদান যা কুবারনেটিসকে কার্যকরভাবে কন্টেইনার চালানোর ক্ষমতা দেয়। + এটি কুবারনেটিস পরিবেশের মধ্যে কন্টেইনারগুলির সম্পাদন এবং জীবনচক্র পরিচালনার জন্য দায়ী। + + + +কুবারনেটস কনটেইনার রানটাইম সমর্থন করে যেমন +{{< glossary_tooltip term_id="containerd" >}}, {{< glossary_tooltip term_id="cri-o" >}}, +এবং [কুবারনেটিস CRI (কন্টেইনার রানটাইম +ইন্টারফেস)](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md)। \ No newline at end of file From 099bc5700b6cbad905bbffa4a957e8e9a04a2cc8 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary Date: Wed, 13 Mar 2024 12:57:47 +0600 Subject: [PATCH 0186/1086] [bn] Localize content/bn/docs/reference/glossary/container-runtime.md - This commit fix build error: ```bash ERROR [bn] "docs/concepts/containers/_index.md": "container-runtime" is not a valid glossary term_id, see ./docs/reference/glossary/* for a full list ``` Signed-off-by: Sajib Adhikary --- .../reference/glossary/container-runtime.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 content/bn/docs/reference/glossary/container-runtime.md diff --git a/content/bn/docs/reference/glossary/container-runtime.md b/content/bn/docs/reference/glossary/container-runtime.md new file mode 100644 index 0000000000..7cd0f75ef5 --- /dev/null +++ b/content/bn/docs/reference/glossary/container-runtime.md @@ -0,0 +1,22 @@ +--- +title: কন্টেইনার রানটাইম +id: container-runtime +date: 2019-06-05 +full_link: /bn/docs/setup/production-environment/container-runtimes +short_description: > + কন্টেইনার রানটাইম হল সেই সফটওয়্যার যা কন্টেইনার চালানোর জন্য দায়ী। + +aka: +tags: +- fundamental +- workload +--- + একটি মৌলিক উপাদান যা কুবারনেটিসকে কার্যকরভাবে কন্টেইনার চালানোর ক্ষমতা দেয়। + এটি কুবারনেটিস পরিবেশের মধ্যে কন্টেইনারগুলির সম্পাদন এবং জীবনচক্র পরিচালনার জন্য দায়ী। + + + +কুবারনেটস কনটেইনার রানটাইম সমর্থন করে যেমন +{{< glossary_tooltip term_id="containerd" >}}, {{< glossary_tooltip term_id="cri-o" >}}, +এবং [কুবারনেটিস CRI (কন্টেইনার রানটাইম +ইন্টারফেস)](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md)। \ No newline at end of file From 7dacb2f1468fe3bf7129dd65b439190852c897d1 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary Date: Wed, 13 Mar 2024 15:42:25 +0600 Subject: [PATCH 0187/1086] [bn] Resolved localize content/bn/_index.html Signed-off-by: Sajib Adhikary --- content/bn/_index.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/bn/_index.html b/content/bn/_index.html index 40f122fbd1..ac60496bc0 100644 --- a/content/bn/_index.html +++ b/content/bn/_index.html @@ -1,6 +1,6 @@ --- title: "প্রোডাকশন-গ্রেড কন্টেইনার অর্কেস্ট্রেশন" -abstract: "স্বয়ংক্রিয় ধারক স্থাপনা, স্কেলিং এবং ব্যবস্থাপনা" +abstract: "স্বয়ংক্রিয় কন্টেইনার স্থাপনা, স্কেলিং এবং ব্যবস্থাপনা" cid: home sitemap: priority: 1.0 @@ -12,13 +12,13 @@ sitemap: {{% blocks/feature image="flower" %}} [কুবারনেটিস]({{< relref "/docs/concepts/overview/" >}}), K8s নামেও পরিচিত, কনটেইনারাইজড অ্যাপ্লিকেশনের স্বয়ংক্রিয় স্থাপনা, স্কেলিং এবং পরিচালনার জন্য একটি ওপেন-সোর্স সিস্টেম। -এটি কন্টেইনারগুলিকে গোষ্ঠীভুক্ত করে যা সহজ ব্যবস্থাপনা এবং আবিষ্কারের জন্য লজিক্যাল ইউনিটে একটি অ্যাপ্লিকেশন তৈরি করে। কুবারনেটিস [Google-এ উৎপাদন কাজের লোড চালানোর 15 বছরের অভিজ্ঞতার](http://queue.acm.org/detail.cfm?id=2898444) দ্বারা উৎপাদন কাজ সর্বোত্তম-জাত ধারণা এবং অনুশীলনের মাধ্যমে পরিচালনা করে। +এটি সহজ ব্যবস্থাপনা এবং আবিষ্কারের জন্য লজিক্যাল ইউনিটে একটি অ্যাপ্লিকেশন তৈরি করে এমন কন্টেইনারগুলিকে গোষ্ঠীভুক্ত করে। কুবারনেটিস Google-এ প্রোডাকশন ওয়ার্কলোড চালানোর 15 বছরের অভিজ্ঞতার ভিত্তিতে তৈরি করা । {{% /blocks/feature %}} {{% blocks/feature image="scalable" %}} #### বিশ্বব্যাপী স্কেল -Google সপ্তাহে বিলিয়ন কন্টেইনার চালানোর জন্য যে নীতিতে ডিজাইন প্রয়োগ করে, সেই একই নীতিতে কুবারনেটিস ডিজাইন করা হয়, ফলস্বরূপ কুবারনেটিস ব্যবহারকারীরা অপস টিম না বাড়িয়ে স্কেল করতে পারে। +Google সপ্তাহে বিলিয়ন কন্টেইনার চালানোর জন্য যে নীতিতে ডিজাইন প্রয়োগ করে, সেই একই নীতিতে কুবারনেটিস ডিজাইন করা হয়, ফলস্বরূপ কুবারনেটিস ব্যবহারকারীরা অপরেশন টিম না বাড়িয়ে স্কেল করতে পারে। {{% /blocks/feature %}} @@ -34,7 +34,7 @@ Google সপ্তাহে বিলিয়ন কন্টেইনার কুবারনেটিস হল ওপেন সোর্স যা আপনাকে অন-প্রিমিসেস, হাইব্রিড বা পাবলিক ক্লাউড অবকাঠামোর সুবিধা নেওয়ার স্বাধীনতা দেয়, যাতে আপনি সহজেই কাজের চাপগুলি যেখানে আপনার কাছে গুরুত্বপূর্ণ সেখানে স্থানান্তর করতে পারেন। -কুবারনেটিস ডাউনলোড করতে, [ডাউনলোড](/releases/download/) বিভাগে যান। +কুবারনেটিস ডাউনলোড করতে22, [ডাউনলোড](/bn/releases/download/) বিভাগে যান। {{% /blocks/feature %}} @@ -42,7 +42,7 @@ Google সপ্তাহে বিলিয়ন কন্টেইনার {{< blocks/section id="video" background-image="kub_video_banner_homepage" >}}
-

150+ মাইক্রোসার্ভিস কুবারনেটে স্থানান্তরিত করার চ্যালেঞ্জ

+

150+ মাইক্রোসার্ভিস কুবারনেটিসে স্থানান্তরিত করার চ্যালেঞ্জ

সারাহ ওয়েলস দ্বারা, অপারেশনস এবং নির্ভরযোগ্যতার জন্য প্রযুক্তিগত পরিচালক, ফিনান্সিয়াল টাইমস


From 430177a178a1b485ffda1bc47dee82647d14dc0c Mon Sep 17 00:00:00 2001 From: Sajib Adhikary Date: Wed, 13 Mar 2024 15:50:09 +0600 Subject: [PATCH 0188/1086] [bn] Resolved localize content/bn/docs/reference/glossary/container-runtime.md Signed-off-by: Sajib Adhikary --- content/bn/docs/reference/glossary/container-runtime.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/reference/glossary/container-runtime.md b/content/bn/docs/reference/glossary/container-runtime.md index 7cd0f75ef5..aa3c681a79 100644 --- a/content/bn/docs/reference/glossary/container-runtime.md +++ b/content/bn/docs/reference/glossary/container-runtime.md @@ -2,7 +2,7 @@ title: কন্টেইনার রানটাইম id: container-runtime date: 2019-06-05 -full_link: /bn/docs/setup/production-environment/container-runtimes +full_link: /docs/setup/production-environment/container-runtimes short_description: > কন্টেইনার রানটাইম হল সেই সফটওয়্যার যা কন্টেইনার চালানোর জন্য দায়ী। From 5ed4e96d3a462626d34be8e408e4cef022be3dd2 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary Date: Wed, 13 Mar 2024 16:05:57 +0600 Subject: [PATCH 0189/1086] [bn] Resolved localize entry _index.html Signed-off-by: Sajib Adhikary --- content/bn/_index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/bn/_index.html b/content/bn/_index.html index ac60496bc0..27ce14aab8 100644 --- a/content/bn/_index.html +++ b/content/bn/_index.html @@ -12,13 +12,13 @@ sitemap: {{% blocks/feature image="flower" %}} [কুবারনেটিস]({{< relref "/docs/concepts/overview/" >}}), K8s নামেও পরিচিত, কনটেইনারাইজড অ্যাপ্লিকেশনের স্বয়ংক্রিয় স্থাপনা, স্কেলিং এবং পরিচালনার জন্য একটি ওপেন-সোর্স সিস্টেম। -এটি সহজ ব্যবস্থাপনা এবং আবিষ্কারের জন্য লজিক্যাল ইউনিটে একটি অ্যাপ্লিকেশন তৈরি করে এমন কন্টেইনারগুলিকে গোষ্ঠীভুক্ত করে। কুবারনেটিস Google-এ প্রোডাকশন ওয়ার্কলোড চালানোর 15 বছরের অভিজ্ঞতার ভিত্তিতে তৈরি করা । +এটি সহজ ব্যবস্থাপনা এবং আবিষ্কারের জন্য লজিক্যাল ইউনিটে একটি অ্যাপ্লিকেশন তৈরি করে এমন কন্টেইনারগুলিকে গোষ্ঠীভুক্ত করে। কুবারনেটিস Google-এ প্রোডাকশন ওয়ার্কলোড চালানোর 15 বছরের অভিজ্ঞতার ভিত্তিতে তৈরি করে, কমিউনিটির সেরা ধারণা এবং অনুশীলনের সাথে মিলিত ভাবে। {{% /blocks/feature %}} {{% blocks/feature image="scalable" %}} #### বিশ্বব্যাপী স্কেল -Google সপ্তাহে বিলিয়ন কন্টেইনার চালানোর জন্য যে নীতিতে ডিজাইন প্রয়োগ করে, সেই একই নীতিতে কুবারনেটিস ডিজাইন করা হয়, ফলস্বরূপ কুবারনেটিস ব্যবহারকারীরা অপরেশন টিম না বাড়িয়ে স্কেল করতে পারে। +Google সপ্তাহে বিলিয়ন কন্টেইনার চালানোর জন্য যে নীতিতে ডিজাইন প্রয়োগ করে, সেই একই নীতিতে কুবারনেটিস ডিজাইন করা হয়, ফলস্বরূপ কুবারনেটিস ব্যবহারকারীরা অপারেশন টিম না বাড়িয়ে স্কেল করতে পারে। {{% /blocks/feature %}} @@ -34,7 +34,7 @@ Google সপ্তাহে বিলিয়ন কন্টেইনার কুবারনেটিস হল ওপেন সোর্স যা আপনাকে অন-প্রিমিসেস, হাইব্রিড বা পাবলিক ক্লাউড অবকাঠামোর সুবিধা নেওয়ার স্বাধীনতা দেয়, যাতে আপনি সহজেই কাজের চাপগুলি যেখানে আপনার কাছে গুরুত্বপূর্ণ সেখানে স্থানান্তর করতে পারেন। -কুবারনেটিস ডাউনলোড করতে22, [ডাউনলোড](/bn/releases/download/) বিভাগে যান। +কুবারনেটিস ডাউনলোড করতে, [ডাউনলোড](/bn/releases/download/) বিভাগে যান। {{% /blocks/feature %}} From ef8ca3629f1e61d2cbbabab58f03b538622c0c6d Mon Sep 17 00:00:00 2001 From: mietnik Date: Thu, 14 Mar 2024 11:49:04 +0000 Subject: [PATCH 0190/1086] check-service-exists Following tutorial step by step at this point service is not defined --- .../docs/tutorials/kubernetes-basics/update/update-intro.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/tutorials/kubernetes-basics/update/update-intro.html b/content/en/docs/tutorials/kubernetes-basics/update/update-intro.html index 28e7681af4..b325f9826e 100644 --- a/content/en/docs/tutorials/kubernetes-basics/update/update-intro.html +++ b/content/en/docs/tutorials/kubernetes-basics/update/update-intro.html @@ -141,8 +141,8 @@ description: |-

Verify an update

-

First, check that the app is running. To find the exposed IP address and port, run the describe service command:

-

kubectl describe services/kubernetes-bootcamp

+

First, check that the service is running, as you might have deleted it in previous tutorial step, run describe services/kubernetes-bootcamp. If it's missing, you can create it again with: +

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080

Create an environment variable called NODE_PORT that has the value of the Node port assigned:

export NODE_PORT="$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')"
echo "NODE_PORT=$NODE_PORT"

From ea5cb12d08a9a9f5dd241cfffd335cc7dafc8252 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Fri, 15 Mar 2024 00:23:48 +0600 Subject: [PATCH 0191/1086] Update _index.md fixeed error after review --- .../bn/docs/concepts/workloads/pods/_index.md | 132 +++++++++--------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/content/bn/docs/concepts/workloads/pods/_index.md b/content/bn/docs/concepts/workloads/pods/_index.md index 76cbbb3541..97cee57f23 100644 --- a/content/bn/docs/concepts/workloads/pods/_index.md +++ b/content/bn/docs/concepts/workloads/pods/_index.md @@ -9,20 +9,20 @@ no_list: true -_পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্রতম স্থাপনযোগ্য একক যা আপনি কুবারনেটিসে তৈরি এবং পরিচালনা করতে পারেন। +_পড_ হলো কম্পিউটিংয়ের ক্ষুদ্রতম স্থাপনযোগ্য একক যা আপনি কুবারনেটিসে তৈরি এবং পরিচালনা করতে পারেন। -একটি _পড_ (তিমি বা মটর শুঁটির একটি পডের মতো) এক বা একাধিকটির একটি গ্রুপ -{{< glossary_tooltip text="কন্টেইনার" term_id="container" >}}, শেয়ার্ড স্টোরেজ এবং নেটওয়ার্ক রিসোর্স গুলির সাথে, এবং কন্টেইনার কীভাবে চালানো যায় তার জন্য একটি নির্দিষ্টকরণ। একটি পডের সামগ্রী সর্বদা সহ-অবস্থিত এবং +একটি পড (তিমি বা মটর শুঁটির একটি পডের মতো) এক বা একাধিক +{{< glossary_tooltip text="কন্টেইনার" term_id="container" >}} এর একটি গ্রুপ , শেয়ার্ড স্টোরেজ এবং নেটওয়ার্ক রিসোর্স গুলির সাথে, এবং কন্টেইনার কীভাবে চালানো যায় তার জন্য একটি স্পেসিফিকেশন। একটি পডের সামগ্রী সর্বদা সহ-অবস্থিত এবং সহ-নির্ধারিত, এবং একটি শেয়ার্ড প্রসঙ্গে চালে। একটি পড মডেল একটি অ্যাপ্লিকেশন-নির্দিষ্ট "লজিক্যাল হোস্ট": এটিতে এক বা একাধিক অ্যাপ্লিকেশন রয়েছে কন্টেইনার যা তুলনামূলকভাবে শক্তভাবে মিলিত হয়। নন-ক্লাউড প্রেক্ষাপটে, একই ভৌত (ফিজিক্যাল) বা ভার্চুয়াল মেশিনে সঞ্চালিত অ্যাপ্লিকেশনগুলি একই লজিক্যাল হোস্টে নির্বাহিত ক্লাউড অ্যাপ্লিকেশনগুলির সাথে সাদৃশ্যপূর্ণ। -পাশাপাশি অ্যাপ্লিকেশন কন্টেইনার, একটি পড থাকতে পারে -[init কন্টেইনার](/bn/docs/concepts/workloads/pods/init-containers/) যে চলমান -পড স্টার্টআপের সময়। ডিবাগ করার জন্য আপনি ইনজেকশনও দিতে পারেন -[ephemeral কন্টেইনার](/bn/docs/concepts/workloads/pods/ephemeral-containers/) -যদি আপনার ক্লাস্টার এটি অফার করে। +পাশাপাশি অ্যাপ্লিকেশন কন্টেইনারে, একটি পড থাকতে পারে +{{< glossary_tooltip text="init কন্টেইনার" term_id="init-container" >}} যেটি চলে +পড স্টার্টআপের সময়। আপনি ইনজেকশনও করতে পারেন +{{< glossary_tooltip text="ephemeral কন্টেইনার" term_id="ephemeral-container" >}} +একটি চলমান পড ডিবাগ করার জন্য। @@ -33,35 +33,35 @@ _পড_ হ'ল কম্পিউটিংয়ের ক্ষুদ্র করতে হবে যাতে পডগুলি সেখানে চলতে পারে। {{< /note >}} -একটি পডের শেয়ার্ড প্রসঙ্গ হল লিনাক্স নেমস্পেস, cgroups এবং +একটি পডের শেয়ার্ড প্রসঙ্গ হল লিনাক্স নেমস্পেস(namespaces), cgroups এবং বিচ্ছিন্নতার সম্ভাব্য অন্যান্য দিক - একই জিনিস যা একটি {{< glossary_tooltip text="কন্টেইনার" term_id="container" >}} বিচ্ছিন্ন করে। একটি পডের প্রেক্ষাপটের মধ্যে, পৃথক অ্যাপ্লিকেশন থাকতে পারে আরও উপ-বিচ্ছিন্নতা প্রয়োগ করা হয়েছে। একটি পড শেয়ার্ড নেমস্পেস এবং শেয়ার্ড ফাইল সিস্টেম ভলিউম সহ কন্টেইনারগুলির সেটের অনুরূপ। -কুবারনেটিস ক্লাস্টারের পড প্রধানট দুটি উপায়ে ব্যবহৃত হয়: +কুবারনেটিস ক্লাস্টারের পড প্রধানত দুটি উপায়ে ব্যবহৃত হয়: -* **পড যা একটি একক কন্টেইনার চলে**" এক-কন্টেইনার-প্রতি-পড" মডেলটি +* **পড যা একটি একক কন্টেইনার চালায়**" এক-কন্টেইনার-প্রতি-পড" মডেলটি কুবারনেটিসের সবচেয়ে সাধারণ ব্যবহার; এই ক্ষেত্রে, আপনি একটি একক কন্টেইনারর চারপাশে একটি মোড়ক হিসাবে একটি পডকে ভাবতে পারেন; কুবারনেটিস সরাসরি কন্টেইনারগুলি পরিচালনা করার পরিবর্তে পডগুলি পরিচালনা করে। -* **পডগুলি যা একাধিক কন্টেইনার চলে যা একসাথে কাজ করা দরকার** একটি পড +* **পডগুলি যা একাধিক কন্টেইনার চালায় যা একসাথে কাজ করা দরকার** একটি পড [একাধিক সহ-অবস্থিত কন্টেইনার](#how-pods-manage-multiple-containers) - দ্বারা গঠিত একটি অ্যাপ্লিকেশনকে এনক্যাপসুলেট করতে পারে + দ্বারা গঠিত একটি অ্যাপ্লিকেশনকে এনক্যাপসুলেট(encapsulate) করতে পারে যেগুলি শক্তভাবে সংযুক্ত এবং রিসোর্স ভাগ করতে হবে৷ এই সহ-অবস্থিত কন্টেইনারগুলি একটি একক সমন্বিত ইউনিট গঠন করে। - একটি একক পডে একাধিক সহ-অবস্থিত এবং সহ-পরিচালিত পাত্রে গোষ্ঠীবদ্ধ করা একটি + একটি একক পডে একাধিক সহ-অবস্থিত এবং সহ-পরিচালিত কন্টেইনারে গোষ্ঠীবদ্ধ করা একটি অপেক্ষাকৃত উন্নত ব্যবহারের ক্ষেত্রে। আপনার এই প্যাটার্নটি কেবলমাত্র নির্দিষ্ট ক্ষেত্রে ব্যবহার করা উচিত - যেখানে আপনার পাত্রে শক্তভাবে সংযুক্ত করা হয়েছে। + যেখানে আপনার কন্টেইনারে শক্তভাবে সংযুক্ত করা হয়েছে। - প্রতিলিপি প্রদানের জন্য আপনাকে একাধিক পাত্র চালানোর দরকার নেই (স্থিতিস্থাপকতার জন্য + প্রতিলিপি প্রদানের জন্য আপনাকে একাধিক কন্টেইনার চালানোর দরকার নেই (স্থিতিস্থাপকতার জন্য বা ক্ষমতা); আপনার একাধিক প্রতিলিপি প্রয়োজন হলে, দেখুন [ওয়ার্কলোড ম্যানেজমেন্ট](/bn/docs/concepts/workloads/controllers/)। ## পডের ব্যবহার -নিচে একটি পডের উদাহরণ দেওয়া হল যেটিতে একটি কন্টেইনার রয়েছে যা `nginx:1.14.2` ছবিটি চালাচ্ছে। +নিচে একটি পডের উদাহরণ দেওয়া হল যেটিতে একটি কন্টেইনার রয়েছে যা `nginx:1.14.2` ইমেজটি চালাচ্ছে। {{% code_sample file="pods/simple-pod.yaml" %}} @@ -71,36 +71,36 @@ kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml ``` পড সাধারণত সরাসরি তৈরি করা হয় না এবং ওয়ার্কলোড রিসোর্স ব্যবহার করে তৈরি করা হয়। -কিভাবে পডগুলিব্যবহার করা হয় সে সম্পর্কে আরও তথ্যের জন্য [পডগুলির সাথে কাজ](#working-with-pods) দেখুন -ওয়ার্কলোড রিসোর্স সহ। +কিভাবে পডগুলিব্যবহার করা হয় ওয়ার্কলোড রিসোর্স সহ সে সম্পর্কে আরও তথ্যের জন্য +[পডগুলির সাথে কাজ](#working-with-pods) দেখুন। ### পড পরিচালনার জন্য ওয়ার্কলোডের রিসোর্স -সাধারণত আপনাকে সরাসরি পড তৈরি করতে হবে না, এমনকি সিঙ্গেলটন পডও। পরিবর্তে, ওয়ার্কলোড রিসোর্সগুলি ব্যবহার করে সেগুলি তৈরি করুন যেমন {{< glossary_tooltip text="রিসোর্স" -term_id="deployment" >}} বা {{< glossary_tooltip text="চাকরি" term_id="job" >}}। +সাধারণত আপনাকে সরাসরি পড তৈরি করতে হবে না, এমনকি সিঙ্গেলটন পডও। পরিবর্তে, ওয়ার্কলোড রিসোর্সগুলি ব্যবহার করে সেগুলি তৈরি করুন যেমন {{< glossary_tooltip text="স্থাপনা" +term_id="ডিপলয়ম্যান্ট" >}} বা {{< glossary_tooltip text="জব" term_id="job" >}}। আপনার পডের অবস্থা ট্র্যাক করার প্রয়োজন হলে, বিবেচনা করুন -{{< glossary_tooltip text="StatefulSet" term_id="statefulset" >}} রিসোর্স। +{{< glossary_tooltip text="স্টেটফুলসেট" term_id="statefulset" >}} রিসোর্স। -প্রতিটি পড একটি প্রদত্ত অ্যাপ্লিকেশনের একটি একক দৃষ্টান্ত চালানোর জন্য বোঝানো হয়। যদি তুমি চাও -আপনার অ্যাপ্লিকেশনকে অনুভূমিকভাবে স্কেল করুন (আরো দৃষ্টান্ত চালানোর মাধ্যমে আরো সামগ্রিক রিসোর্স +প্রতিটি পড একটি প্রদত্ত অ্যাপ্লিকেশনের একটি একক উদাহরণ চালানোর জন্য বোঝানো হয়। যদি আপনি চান +আপনার অ্যাপ্লিকেশনকে অনুভূমিকভাবে স্কেল করতে (আরো উদাহরণ চালানোর মাধ্যমে আরো সামগ্রিক রিসোর্স প্রদান করতে), আপনার একাধিক পড ব্যবহার করা উচিত, প্রতিটি উদাহরণের জন্য একটি। কুবারনেটিসে-এ, এটিকে সাধারণত _প্রতিলিপি_ হিসাবে উল্লেখ করা হয়। -প্রতিলিপিকৃত পডগুলি সাধারণত একটি কাজের চাপ রিসোর্স এবং এর +প্রতিলিপিকৃত পডগুলি সাধারণত একটি ওয়ার্কলোড রিসোর্স {{< glossary_tooltip text="কন্ট্রোলার" term_id="controller" >}} দ্বারা একটি গ্রুপ হিসাবে তৈরি এবং পরিচালিত হয়। দেখুন [পড এবং কন্ট্রোলার](#pods-and-controllers) আরও তথ্যের জন্য কিভাবে -কুবারনেটিস অ্যাপ্লিকেশন বাস্তবায়নের জন্য ওয়ার্কলোড রিসোর্স এবং তাদের কন্ট্রোলার ব্যবহার করে -স্কেলিং এবং অটো-হিলিং। +কুবারনেটিস অ্যাপ্লিকেশন স্কেলিং এবং অটো-হিলিং বাস্তবায়নের জন্য ওয়ার্কলোড রিসোর্স এবং তাদের কন্ট্রোলার +ব্যবহার করে। -পডগুলি স্থানীয়ভাবে তাদের উপাদান পাত্রের জন্য দুই ধরণের ভাগ করা রিসোর্স সরবরাহ করে: +পডগুলি স্থানীয়ভাবে তাদের উপাদান কন্টেইনারের জন্য দুই ধরণের ভাগ করা রিসোর্স সরবরাহ করে: [নেটওয়ার্কিং](#pod-networking) এবং [স্টোরেজ](#pod-storage)। ## পডগুলি নিয়ে কাজ করা আপনি খুবই কম সময় সরাসরি কুবারনেটিস-এ এমনকি সিঙ্গেলটন পডগুলি-তে পৃথক পড তৈরি করবেন। এই -কারণে পডগুলি তুলনামূলকভাবে অল্পক্ষণস্থায়ী, নিষ্পত্তিযোগ্য হিসাবে ডিজাইন করা হয়েছে। যখন +কারণে পডগুলি তুলনামূলকভাবে অল্পক্ষণস্থায়ী, নিষ্পত্তিযোগ্য(disposable) হিসাবে ডিজাইন করা হয়েছে। যখন একটি পড তৈরি করা হয় (প্রত্যক্ষভাবে আপনার দ্বারা বা পরোক্ষভাবে একটি {{}}) দ্বারা, নতুন পডটি আপনার ক্লাস্টারে একটি {{< glossary_tooltip term_id="node" >}} চালানোর জন্য নির্ধারিত হয়। @@ -116,8 +116,8 @@ term_id="deployment" >}} বা {{< glossary_tooltip text="চাকরি" term একটি পডের নাম অবশ্যই একটি বৈধ [DNS সাবডোমেন](/bn/docs/concepts/overview/working-with-objects/names#dns-subdomain-names) মান হতে হবে, তবে এটি পড হোস্টনামের জন্য অপ্রত্যাশিত ফলাফল তৈরি করতে পারে। সর্বোত্তম সামঞ্জস্যের জন্য, -নামের আরো সীমাবদ্ধ নিয়ম অনুসরণ করা উচিত এর জন্য -[DNS লেবেল](/bn/docs/concepts/overview/working-with-objects/names#dns-label-names)। +নামের আরো সীমাবদ্ধ নিয়ম অনুসরণ করা উচিত +[DNS লেবেল](/bn/docs/concepts/overview/working-with-objects/names#dns-label-names)এর জন্য। ### পড অপারেটিং সিস্টেম(OS) @@ -128,7 +128,7 @@ term_id="deployment" >}} বা {{< glossary_tooltip text="চাকরি" term কুবারনেটিস দ্বারা সমর্থিত। ভবিষ্যতে, এই তালিকা প্রসারিত করা হতে পারে। কুবারনেটিস v{{< skew currentVersion >}} -এ, এই ক্ষেত্রের জন্য আপনি যে -মান সেট করেছেন তা পডগুলির জন্য {{< glossary_tooltip text="scheduling" term_id="kube-scheduler" >}} কোনও প্রভাব ফেলবে না ৷ +মান সেট করেছেন তা পডগুলির জন্য {{< glossary_tooltip text="শিডিউলিং" term_id="kube-scheduler" >}} কোনও প্রভাব ফেলবে না ৷ সেট করা `.spec.os.name` পড অপারেটিং সিস্টেমকে প্রামাণিকভাবে সনাক্ত করতে সহায়তা করে এবং বৈধতার জন্য ব্যবহৃত হয়। Kubelet একটি পড চালাতে প্রত্যাখ্যান করে যেখানে আপনি একটি পড এর অপারেটিং সিস্টেম নির্দিষ্ট করেছেন, যদি এটি সেই নোডের অপারেটিং সিস্টেমের মতো না হয় @@ -141,14 +141,14 @@ term_id="deployment" >}} বা {{< glossary_tooltip text="চাকরি" term আপনি আপনার জন্য একাধিক পড তৈরি এবং পরিচালনা করতে ওয়ার্কলোড রিসোর্স ব্যবহার করতে পারেন। পড ব্যর্থতার ক্ষেত্রে রিসোর্স জন্য একটি কন্ট্রোলার প্রতিলিপি এবং রোলআউট এবং স্বয়ংক্রিয় নিরাময় পরিচালনা করে। উদাহরণস্বরূপ, যদি একটি নোড ব্যর্থ হয়, একটি কন্ট্রোলার লক্ষ্য করে যে -সেই নোডের পডগুলি কাজ করা বন্ধ করে দিয়েছে এবং একটি প্রতিস্থাপন পড তৈরি করে। সময়সূচী একটি সুস্থ নোডে +সেই নোডের পডগুলি কাজ করা বন্ধ করে দিয়েছে এবং একটি প্রতিস্থাপন পড তৈরি করে। শিডিউলার একটি সুস্থ নোডে প্রতিস্থাপন পড স্থাপন করে। -এখানে কাজের চাপ রিসোর্সগুলির কিছু উদাহরণ রয়েছে যা এক বা একাধিক পডগুলি পরিচালনা করে: +এখানে ওয়ার্কলোড রিসোর্সগুলির কিছু উদাহরণ রয়েছে যা এক বা একাধিক পডগুলি পরিচালনা করে: * {{< glossary_tooltip text="ডিপলয়ম্যান্টস" term_id="deployment" >}} * {{< glossary_tooltip text="স্টেটফুল সেট" term_id="statefulset" >}} -* {{< glossary_tooltip text="DaemonSet" term_id="daemonset" >}} +* {{< glossary_tooltip text="ডেমোনসেট" term_id="daemonset" >}} ### পড টেমপ্লেট @@ -158,10 +158,10 @@ term_id="deployment" >}} বা {{< glossary_tooltip text="চাকরি" term পড টেমপ্লেটগুলি হল পড তৈরির জন্য স্পেসিফিকেশন, এবং ওয়ার্কলোড রিসোর্সগুলির অন্তর্ভুক্ত যেমন [ডিপলয়ম্যান্টস](/bn/docs/concepts/workloads/controllers/deployment/), [জব](/bn/docs/concepts/workloads/controllers/job/), এবং -[DaemonSets](/bn/docs/concepts/workloads/controllers/daemonset/)। +[ডেমোনসেট](/bn/docs/concepts/workloads/controllers/daemonset/)। ওয়ার্কলোড রিসোর্সের প্রতিটি কন্ট্রোলার প্রকৃত পড তৈরি করতে ওয়ার্কলোড অবজেক্টের ভিতরে `পড টেম্পলেট` -ব্যবহার করে। `PodTemplate` হল আপনার অ্যাপ চালানোর জন্য যে কোনো ওয়ার্কলোড রিসোর্স ব্যবহার +ব্যবহার করে। `পড টেম্পলেট` হল আপনার অ্যাপ চালানোর জন্য যে কোনো ওয়ার্কলোড রিসোর্স ব্যবহার করা সেই কাঙ্ক্ষিত অবস্থার অংশ। নিচের নমুনাটি একটি সাধারণ কাজের জন্য একটি `টেমপ্লেট` সহ একটি ম্যানিফেস্ট যা একটি কন্টেইনার শুরু করে। @@ -205,8 +205,8 @@ spec: ## পড আপডেট এবং প্রতিস্থাপন -পূর্ববর্তী সেকশনে উল্লিখিত হিসাবে, যখন একটি কাজের চাপ রিসোর্সের জন্য পড -টেমপ্লেট পরিবর্তন করা হয়, তখন নিয়ামক বিদ্যমান পডগুলিকে আপডেট বা প্যাচ করার পরিবর্তে আপডেট করা টেমপ্লেটের +পূর্ববর্তী সেকশনে উল্লিখিত হিসাবে, যখন একটি ওয়ার্কলোড রিসোর্সের জন্য পড +টেমপ্লেট পরিবর্তন করা হয়, তখন কন্ট্রোলার বিদ্যমান পডগুলিকে আপডেট বা প্যাচ করার পরিবর্তে আপডেট করা টেমপ্লেটের উপর ভিত্তি করে নতুন পড তৈরি করে। কুবারনেটিস আপনাকে সরাসরি পড পরিচালনা করতে বাধা দেয় না। এটি একটি @@ -222,15 +222,15 @@ spec: মান বৃদ্ধি করে। - যদি `metadata.deletionTimestamp` সেট করা থাকে, তবে `metadata.finalizers` তালিকায় কোনো নতুন এন্ট্রি যোগ করা যাবে না। -- পড আপডেটগুলি `spec.containers[*].image` ব্যতীত অন্য কোনো ক্ষেত্র পরিবর্তন করতে পারে না, - `spec.initContainers[*].image`, `spec.activeDeadlineSeconds` বা - `spec.tolerations`। `spec.tolerations` এর জন্য, আপনি শুধুমাত্র নতুন এন্ট্রি যোগ করতে পারেন। +- পড আপডেটগুলি `spec.containers[*].image`, `spec.initContainers[*].image`, `spec.activeDeadlineSeconds` বা + `spec.tolerations` ব্যতীত অন্য কোনো ক্ষেত্র পরিবর্তন করতে পারে না। + `spec.tolerations` এর জন্য, আপনি শুধুমাত্র নতুন এন্ট্রি যোগ করতে পারেন। - `spec.activeDeadlineSeconds` ক্ষেত্র আপডেট করার সময়, দুই ধরনের আপডেটের অনুমতি দেওয়া হয়: - 1. একটি ধনাত্মক সংখ্যায় নিযুক্ত করা ক্ষেত্র সেট করা; - 2. ক্ষেত্রটিকে একটি ধনাত্মক সংখ্যা থেকে একটি ছোট, অ নেতিবাচক সংখ্যায় - আপডেট করা হচ্ছে। + 1. একটি ধনাত্মক সংখ্যায় আনঅ্যাসাইন করা ক্ষেত্র সেট করা; + 2. ক্ষেত্রটিকে একটি ধনাত্মক সংখ্যা থেকে একটি ছোট, অ-ঋণাত্মক সংখ্যায় + আপডেট করা। ## রিসোর্স ভাগাভাগি এবং যোগাযোগ @@ -239,8 +239,8 @@ spec: ### পডগুলিতে স্টোরেজ {#pod-storage} -একটি পড শেয়ার্ড স্টোরেজের একটি সেট নির্দিষ্ট করতে পারে -{{< glossary_tooltip text="ভলিউম" term_id="volume" >}} । পডের সমস্ত +একটি পড শেয়ার্ড স্টোরেজ {{< glossary_tooltip text="ভলিউম" term_id="volume" >}} +এর একটি সেট নির্দিষ্ট করতে পারে। পডের সমস্ত কন্টেইনারে ভাগ করা ভলিউমগুলি অ্যাক্সেস করতে পারে, সেই কন্টেইনারগুলিকে ডেটা ভাগ করতে দেয় ৷ ভলিউমগুলি একটি পডের মধ্যে স্থায়ী ডেটাকে টিকে থাকার অনুমতি দেয় যদি এর মধ্যে থাকা একটি কন্টেইনারকে পুনরায় চালু করতে হয় । দেখুন @@ -297,7 +297,7 @@ POSIX শেয়ার্ড মেমরির সাথে স্ট্য _স্ট্যাটিক পডগুলি_ একটি নির্দিষ্ট নোডে kubelet daemon দ্বারা সরাসরি পরিচালিত হয়, {{< glossary_tooltip text="API সার্ভার"term_id="kube-apiserver" >}} তাদের পর্যবেক্ষণ করে না। -যেখানে বেশিরভাগ পড নিয়ন্ত্রণ সমতল দ্বারা পরিচালিত হয় (উদাহরণস্বরূপ, একটি +যেখানে বেশিরভাগ পড নিয়ন্ত্রণ কন্ট্রোল প্লেন দ্বারা পরিচালিত হয় (উদাহরণস্বরূপ, একটি {{< glossary_tooltip text="ডিপ্লয়মেন্ট" term_id="deployment">}}), স্ট্যাটিক পডগুলির জন্য, kubelet সরাসরি প্রতিটি স্ট্যাটিক পডের তত্ত্বাবধান করে (এবং এটি ব্যর্থ হলে পুনরায় চালু করে)। @@ -317,10 +317,10 @@ kubelet স্বয়ংক্রিয়ভাবে প্রতিটি {{< glossary_tooltip text="Secret" term_id="secret" >}}, ইত্যাদি). {{< /note >}} -## একাধিক পাত্র সহ পড {#how-pods-manage-multiple-containers} +## একাধিক কন্টেইনার সহ পড {#how-pods-manage-multiple-containers} -পডগুলি একাধিক সহযোগিতা প্রক্রিয়া (পাত্র হিসাবে) সমর্থন করার জন্য ডিজাইন করা হয়েছে যা পরিষেবার একটি -সমন্বিত একক গঠন করে। একটি পডের পাত্রগুলি ক্লাস্টারের একই শারীরিক বা ভার্চুয়াল মেশিনে +পডগুলি একাধিক সহযোগিতা প্রক্রিয়া (কন্টেইনার হিসাবে) সমর্থন করার জন্য ডিজাইন করা হয়েছে যা পরিষেবার একটি +সমন্বিত একক গঠন করে। একটি পডের কন্টেইনারগুলি ক্লাস্টারের একই ফিজিক্যাল বা ভার্চুয়াল মেশিনে স্বয়ংক্রিয়ভাবে সহ-অবস্থিত এবং সহ-নির্ধারিত। কন্টেইনারগুলি রিসোর্স এবং নির্ভরতা ভাগ করে নিতে পারে, একে অপরের সাথে যোগাযোগ করতে পারে এবং কখন এবং কীভাবে সেগুলি বন্ধ করা হয় তা সমন্বয় করতে পারে। @@ -328,12 +328,12 @@ kubelet স্বয়ংক্রিয়ভাবে প্রতিটি কুবারনেটিস ক্লাস্টারের পড দুটি প্রধান উপায়ে ব্যবহৃত হয়: -* **পড যা একটি একক পাত্র চালায়**। "এক-কন্টেইনার-প্রতি-পড" মডেলটি কুবারনেটিসের - সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে; এই ক্ষেত্রে, আপনি একটি একক পাত্রের +* **পড যা একটি একক কন্টেইনার চালায়**। "এক-কন্টেইনার-প্রতি-পড" মডেলটি কুবারনেটিসের + সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে; এই ক্ষেত্রে, আপনি একটি একক কন্টেইনারের চারপাশে একটি মোড়ক হিসাবে একটি পডকে ভাবতে পারেন; কুবারনেটস সরাসরি কন্টেইনারগুলি পরিচালনা করার পরিবর্তে পডগুলি পরিচালনা করে। -* **পড যা একাধিক পাত্র চালায় যেগুলি একসাথে কাজ করতে হবে**। একটি পড - একাধিক সহ-অবস্থিত পাত্রে গঠিত একটি অ্যাপ্লিকেশনকে +* **পড যা একাধিক কন্টেইনার চালায় যেগুলি একসাথে কাজ করতে হবে**। একটি পড + একাধিক সহ-অবস্থিত কন্টেইনারে গঠিত একটি অ্যাপ্লিকেশনকে এনক্যাপসুলেট করতে পারে যা শক্তভাবে সংযুক্ত থাকে এবং রিসোর্স ভাগ করে নেওয়ার প্রয়োজন হয়। এই সহ-অবস্থিত কন্টেইনারগুলি পরিষেবার একটি একক সমন্বিত ইউনিট গঠন করে—উদাহরণস্বরূপ, @@ -343,25 +343,25 @@ kubelet স্বয়ংক্রিয়ভাবে প্রতিটি পড এই কন্টেইনার, স্টোরেজ রিসোর্স এবং একটি ক্ষণস্থায়ী নেটওয়ার্ক পরিচয়কে একক ইউনিট হিসাবে একত্রে মোড়ক করে। -উদাহরণস্বরূপ, আপনার কাছে একটি ধারক থাকতে পারে যেটি +উদাহরণস্বরূপ, আপনার কাছে একটি কন্টেইনার থাকতে পারে যেটি একটি শেয়ার্ড ভলিউমের ফাইলগুলির জন্য একটি ওয়েব সার্ভার হিসাবে কাজ করে এবং একটি পৃথক [সাইডকার কন্টেইনার](/bn/docs/concepts/workloads/pods/sidecar-containers/) যা একটি দূরবর্তী উৎস থেকে সেই ফাইলগুলিকে আপডেট করে, যেমনটি নিম্নলিখিত চিত্রে রয়েছে: -{{< চিত্র src="/images/docs/pod.svg" alt="পড তৈরির চিত্র" class="diagram-medium" >}} +{{< figure src="/images/docs/pod.svg" alt="পড তৈরির চিত্র" class="diagram-medium" >}} -কিছু পডের আছে {{< glossary_tooltip text="init containers" term_id="init-container" >}} +কিছু পডের আছে {{< glossary_tooltip text="init কন্টেইনার" term_id="init-container" >}} পাশাপাশি {{< glossary_tooltip text="অ্যাপ কন্টেইনার" term_id="app-container" >}}। ডিফল্টরূপে, init কন্টেইনারগুলি অ্যাপ কন্টেইনারগুলি শুরু হওয়ার আগে চলে এবং সম্পূর্ণ হয়। -আপনার কাছে [সাইডকার কন্টেইনার](/bn/docs/concepts/workloads/pods/sidecar-containers/) থাকতে পারে। -যেগুলি প্রধান অ্যাপ্লিকেশন পডকে সহায়ক পরিষেবা প্রদান করে (উদাহরণস্বরূপ: একটি পরিষেবা জাল)। +আপনার কাছে সাইডকার কন্টেইনার থাকতে পারে +যেগুলি প্রধান অ্যাপ্লিকেশন পডকে সহায়ক পরিষেবা প্রদান করে (উদাহরণস্বরূপ: একটি পরিষেবা মেশ)। {{< feature-state for_k8s_version="v1.29" state="beta" >}} ডিফল্টরূপে সক্রিয় করা হয়েছে, `SidecarContainers` [ফিচার গেট](/bn/docs/reference/command-line-tools-reference/feature-gates/) -init কন্টেইনারগুলির জন্য আপনাকে `restartPolicy: সর্বদা` নির্দিষ্ট করতে দেয়। -'সর্বদা' পুনঃসূচনা নীতি সেট করা নিশ্চিত করে যে কন্টেইনারগুলি যেখানে আপনি এটি সেট করেছেন +init কন্টেইনারগুলির জন্য আপনাকে `restartPolicy: Always` নির্দিষ্ট করতে দেয়। +`Always` পুনঃসূচনা নীতি সেট করা নিশ্চিত করে যে কন্টেইনারগুলি যেখানে আপনি এটি সেট করেছেন সেগুলিকে _sidecars_ হিসাবে গণ্য করা হয় যেগুলি পডের পুরো জীবনকাল চলা অবস্থায় থাকে। যে কন্টেইনারগুলিকে আপনি স্পষ্টভাবে সাইডকার কন্টেনার হিসাবে সংজ্ঞায়িত করেছেন সেগুলি মূল অ্যাপ্লিকেশন পডের আগে শুরু হয় এবং পড বন্ধ না @@ -370,7 +370,7 @@ init কন্টেইনারগুলির জন্য আপনাকে ## কন্টেইনার probes -একটি _probe_ একটি ডায়াগনস্টিক যা একটি কন্টেইনার কুবেলেট দ্বারা পর্যায়ক্রমে সম্পাদিত হয়। একটি ডায়গনিস্টিক সঞ্চালনের জন্য, kubelet বিভিন্ন ক্রিয়াকলাপ করতে পারে: +একটি probe একটি ডায়াগনস্টিক যা একটি কন্টেইনার kubelet দ্বারা পর্যায়ক্রমে সম্পাদিত হয়। একটি ডায়গনিস্টিক সঞ্চালনের জন্য, kubelet বিভিন্ন ক্রিয়াকলাপ করতে পারে: - `ExecAction` (কন্টেইনারের রানটাইমের সাহায্যে সম্পাদিত হয়েছে) - `TCPSocketAction` (kubelet দ্বারা সরাসরি চেক করা হয়েছে) @@ -395,6 +395,6 @@ init কন্টেইনারগুলির জন্য আপনাকে * [Aurora](https://aurora.apache.org/documentation/latest/reference/configuration/#job-schema) * [Borg](https://research.google.com/pubs/pub43438.html) -* [ম্যারাথন](https://mesosphere.github.io/marathon/docs/rest-api.html) -* [ওমেগা](https://research.google/pubs/pub41684/) -* [টুপারওয়্যার](https://engineering.fb.com/data-center-engineering/tupperware/)। +* [Marathon](https://mesosphere.github.io/marathon/docs/rest-api.html) +* [Omega](https://research.google/pubs/pub41684/) +* [Tupperware](https://engineering.fb.com/data-center-engineering/tupperware/)। From fdb3486e594b8add77613b31ae7e9a39d836cb31 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Fri, 15 Mar 2024 01:27:35 +0600 Subject: [PATCH 0192/1086] Update _index.md --- content/bn/docs/concepts/workloads/pods/_index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/bn/docs/concepts/workloads/pods/_index.md b/content/bn/docs/concepts/workloads/pods/_index.md index 97cee57f23..90a666a569 100644 --- a/content/bn/docs/concepts/workloads/pods/_index.md +++ b/content/bn/docs/concepts/workloads/pods/_index.md @@ -76,8 +76,8 @@ kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml ### পড পরিচালনার জন্য ওয়ার্কলোডের রিসোর্স -সাধারণত আপনাকে সরাসরি পড তৈরি করতে হবে না, এমনকি সিঙ্গেলটন পডও। পরিবর্তে, ওয়ার্কলোড রিসোর্সগুলি ব্যবহার করে সেগুলি তৈরি করুন যেমন {{< glossary_tooltip text="স্থাপনা" -term_id="ডিপলয়ম্যান্ট" >}} বা {{< glossary_tooltip text="জব" term_id="job" >}}। +সাধারণত আপনাকে সরাসরি পড তৈরি করতে হবে না, এমনকি সিঙ্গেলটন পডও। পরিবর্তে, ওয়ার্কলোড রিসোর্সগুলি ব্যবহার করে সেগুলি তৈরি করুন যেমন {{< glossary_tooltip text="ডিপলয়ম্যান্ট" +term_id="deployment" >}} বা {{< glossary_tooltip text="জব" term_id="job" >}}। আপনার পডের অবস্থা ট্র্যাক করার প্রয়োজন হলে, বিবেচনা করুন {{< glossary_tooltip text="স্টেটফুলসেট" term_id="statefulset" >}} রিসোর্স। @@ -354,7 +354,7 @@ kubelet স্বয়ংক্রিয়ভাবে প্রতিটি পাশাপাশি {{< glossary_tooltip text="অ্যাপ কন্টেইনার" term_id="app-container" >}}। ডিফল্টরূপে, init কন্টেইনারগুলি অ্যাপ কন্টেইনারগুলি শুরু হওয়ার আগে চলে এবং সম্পূর্ণ হয়। -আপনার কাছে সাইডকার কন্টেইনার থাকতে পারে +আপনার কাছে [সাইডকার কন্টেইনার](/bn/docs/concepts/workloads/pods/sidecar-containers/) থাকতে পারে যেগুলি প্রধান অ্যাপ্লিকেশন পডকে সহায়ক পরিষেবা প্রদান করে (উদাহরণস্বরূপ: একটি পরিষেবা মেশ)। {{< feature-state for_k8s_version="v1.29" state="beta" >}} @@ -370,7 +370,7 @@ init কন্টেইনারগুলির জন্য আপনাকে ## কন্টেইনার probes -একটি probe একটি ডায়াগনস্টিক যা একটি কন্টেইনার kubelet দ্বারা পর্যায়ক্রমে সম্পাদিত হয়। একটি ডায়গনিস্টিক সঞ্চালনের জন্য, kubelet বিভিন্ন ক্রিয়াকলাপ করতে পারে: +একটি _probe_ একটি ডায়াগনস্টিক যা একটি কন্টেইনার kubelet দ্বারা পর্যায়ক্রমে সম্পাদিত হয়। একটি ডায়গনিস্টিক সঞ্চালনের জন্য, kubelet বিভিন্ন ক্রিয়াকলাপ করতে পারে: - `ExecAction` (কন্টেইনারের রানটাইমের সাহায্যে সম্পাদিত হয়েছে) - `TCPSocketAction` (kubelet দ্বারা সরাসরি চেক করা হয়েছে) From b29db11cea6eb60f294b7a8fd3e63a073d8b0d8e Mon Sep 17 00:00:00 2001 From: Pronay <78101731+itsPronay@users.noreply.github.com> Date: Fri, 15 Mar 2024 02:08:47 +0600 Subject: [PATCH 0193/1086] Create release-managers.md Translated --- content/bn/releases/release-managers.md | 171 ++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 content/bn/releases/release-managers.md diff --git a/content/bn/releases/release-managers.md b/content/bn/releases/release-managers.md new file mode 100644 index 0000000000..f96fa2d3f8 --- /dev/null +++ b/content/bn/releases/release-managers.md @@ -0,0 +1,171 @@ +--- +title: রিলিজ ম্যানেজারস +type: docs +--- + +"রিলিজ ম্যানেজারস" হল একটি ছাত্রবৃন্দের একটি সংক্ষিপ্ত উপনাম যা প্রকাশনা শাখা +পরিচালনা করতে দায়িত্বশীল কুবারনেটিস অবদানকারীদের সংক্রান্ত। তাদের দ্বারা SIG +রিলিজ প্রদান করা সরঞ্জাম ব্যবহার করে রিলিজ শাখা রক্ষণ এবং রিলিজ তৈরি করা হয়। + +প্রত্যেক ভূমিকার দায়িত্ব নীচে বর্ণিত হয়েছে। + +- [যোগাযোগ](#contact) + - [নিরাপত্তা ইম্বার্গো নীতি](#security-embargo-policy) +- [হ্যান্ডবুক](#handbooks) +- [রিলিজ ম্যানেজারস](#release-managers) + - [রিলিজ ম্যানেজার হওয়া](#becoming-a-release-manager) +- [রিলিজ ম্যানেজার অ্যাসোসিয়েটস](#release-manager-associates) + - [রিলিজ ম্যানেজার অ্যাসোসিয়েট হওয়া](#becoming-a-release-manager-associate) +- [SIG রিলিজ লিডস](#sig-release-leads) + - [চেয়ারস](#chairs) + - [টেকনিক্যাল লিডস](#technical-leads) + + ## যোগাযোগ + +| মেইলিং লিস্ট | স্ল্যাক | দৃশ্যমান | ব্যবহার | সদস্যতা | +| --- | --- | --- | --- | --- | +| [release-managers@kubernetes.io](mailto:release-managers@kubernetes.io) | [#release-management](https://kubernetes.slack.com/messages/CJH2GBF7Y) (চ্যানেল) / @release-managers (ইউজার গ্রুপ) | পাবলিক | রিলিজ ম্যানেজারদের জন্য পাবলিক আলোচনা | সকল রিলিজ ম্যানেজার (অ্যাসোসিয়েট, এবং SIG চেয়ারস সহ) | +| [release-managers-private@kubernetes.io](mailto:release-managers-private@kubernetes.io) | নেই | প্রাইভেট | স্পেশাল রিলিজ ম্যানেজারদের জন্য প্রাইভেট আলোচনা | রিলিজ ম্যানেজার, SIG রিলিজ লীডারশিপ | +| [security-release-team@kubernetes.io](mailto:security-release-team@kubernetes.io) | [#security-release-team](https://kubernetes.slack.com/archives/G0162T1RYHG) (চ্যানেল) / @security-rel-team (ইউজার গ্রুপ) | প্রাইভেট | সিকিউরিটি রিলিজ সমন্বয় সিকিউরিটি প্রতিক্রিয়া কমিটি সহ | [security-discuss-private@kubernetes.io](mailto:security-discuss-private@kubernetes.io), [release-managers-private@kubernetes.io](mailto:release-managers-private@kubernetes.io) | + +### নিরাপত্তা ইম্বার্গো নীতি + +কিছু রিলিজ সম্পর্কিত তথ্য ইম্বার্গোর অধীনে রয়েছে এবং আমরা তারা সেট করার জন্য নীতি নির্ধারণ করেছি। অধিক তথ্যের জন্য দয়া করে +[নিরাপত্তা ইম্বার্গো নীতি](https://github.com/kubernetes/committee-security-response/blob/main/private-distributors-list.md#embargo-policy) +দেখুন। + +## হ্যান্ডবুক + +**লক্ষ্যস্থান: প্যাচ রিলিজ টীম এবং শাখা ম্যানেজার হ্যান্ডবুকগুলি পরের তারিখে ডিডুপ্লিকেট করা হবে।** + +- [প্যাচ রিলিজ টীম](handbook-patch-release) +- [শাখা ম্যানেজার](handbook-branch-mgmt) + + +## রিলিজ ম্যানেজার + +**নোট:** ডকুমেন্টেশনে প্যাচ রিলিজ টিম এবং ব্রাঞ্চ ম্যানেজমেন্ট ভূমিকা সম্পর্কে উল্লেখ থাকতে পারে। এই দুই ভূমিকা রিলিজ ম্যানেজার ভূমিকায় একীভূত করা হয়েছে। + +মিনিমাম প্রয়োজনীয়তা রিলিজ ম্যানেজার এবং রিলিজ ম্যানেজার অ্যাসোসিয়েটগুলির জন্য নিম্নলিখিত: + +- বেসিক ইউনিক্স কমান্ডের পরিচিতি এবং শেল স্ক্রিপ্ট ডিবাগ করতে পারা। +- `git` এবং সম্পর্কিত `git` কমান্ড লাইন ইনভোকেশন এর মাধ্যমে ব্রাঞ্চ সোর্স কোড ওয়ার্কফ্লো পরিচয়। +- গুগল ক্লাউডের সাধারণ জ্ঞান (ক্লাউড বিল্ড এবং ক্লাউড স্টোরেজ)। +- সাহায্য চাইতে উপলব্ধ এবং স্পষ্টভাবে যোগাযোগ করতে খোলামেলা। +- কুবার্নিটিস কমিউনিটি [সদস্যতা][community-membership] + +রিলিজ ম্যানেজারদের দায়িত্ব অনুসারে: + +- কুবার্নিটিস রিলিজ করা এবং সমন্বয় করা: + - প্যাচ রিলিজ (`x.y.z`, যেখানে `z` > 0) + - মাইনর রিলিজ (`x.y.z`, যেখানে `z` = 0) + - প্রি-রিলিজ (আলফা, বেটা এবং রিলিজ ক্যান্ডিডেট) + - প্রতিটি রিলিজ চক্রে রিলিজ টিম সঙ্গে কাজ করা + - প্যাচ রিলিজের জন্য [সময়সূচি এবং গতি নির্ধারণ করা][patches] +- রিলিজ ব্রাঞ্চগুলি মেন্টেনেন্স করা: + - চেরি পিকগুলি পর্যালোচনা করা + - রিলিজ ব্রাঞ্চটি স্বাস্থ্যকর রাখা এবং কোনও অপ্রত্যাশিত প্যাচ মার্জ না হয়ে থাকা +- [রিলিজ ম্যানেজার অ্যাসোসিয়েটগুলির](#রিলিজ-ম্যানেজার-অ্যাসোসিয়েটগুলি) গ্রুপ মেন্টরিং করা +- k/release এ বৈশিষ্ট্যগুলি উন্নত করা এবং কোড রক্ষণ করা +- রিলিজ ম্যানেজার অ্যাসোসিয়েটগুলি এবং অবদানকারীদের সমর্থন করা যাতে তারা বাদী প্রোগ্রামে অংশগ্রহণ করতে পারে +- - মাসিকভাবে অ্যাসোসিয়েটগুলির সাথে চেক ইন করুন এবং কাজ দেয়ার জন্য তাদের সামর্থ্য বৃদ্ধি করুন, তাদেরকে রিলিজ করতে সাহায্য করুন এবং মেন্টরিং করুন + - অ্যাসোসিয়েটগুলির নতুন অবদানকারীদের নিয়োগে সহায়তা করা এবং তাদেরকে উচিত কাজ প্রস্তাব করা উদাহরণস্বরূপে প্রশ্নের উত্তর দেওয়া + +এই দলটি কার্যত সম্পর্কে ঘনিষ্ট সমবা-সহযোগিতা করে +[সুরক্ষা সম্প্রতি কমিটি][src] এবং অতএব উল্লেখ করা উচিত +[সুরক্ষা রিলিজ প্রক্রিয়া][security-release-process] এ নির্ধারিত নির্দেশিকা মেনে চলতে হবে। + +GitHub অ্যাক্সেস নিয়ন্ত্রণ: [@kubernetes/release-managers](https://github.com/orgs/kubernetes/teams/release-managers) + +GitHub উল্লেখ: [@kubernetes/release-engineering](https://github.com/orgs/kubernetes/teams/release-engineering) + +- Adolfo García Veytia ([@puerco](https://github.com/puerco)) +- Cici Huang ([@cici37](https://github.com/cici37)) +- Carlos Panato ([@cpanato](https://github.com/cpanato)) +- Jeremy Rickard ([@jeremyrickard](https://github.com/jeremyrickard)) +- Marko Mudrinić ([@xmudrii](https://github.com/xmudrii)) +- Nabarun Pal ([@palnabarun](https://github.com/palnabarun)) +- Sascha Grunert ([@saschagrunert](https://github.com/saschagrunert)) +- Stephen Augustus ([@justaugustus](https://github.com/justaugustus)) +- Verónica López ([@verolop](https://github.com/verolop)) + +### রিলিজ ম্যানেজার হওয়ার পথ + +রিলিজ ম্যানেজার হতে চাইলে, প্রথমে কাউকে রিলিজ ম্যানেজার অ্যাসোসিয়েট হিসেবে কাজ করতে হবে। অ্যাসোসিয়েটরা কয়েকটি চক্র জুড়ে রিলিজের উপর সক্রিয়ভাবে কাজ করে রিলিজ ম্যানেজারে পদোন্নতি পায়: + +- নেতৃত্ব দেওয়ার ইচ্ছা প্রদর্শন করা +- রিলিজ ম্যানেজারদের সাথে ট্যাগ-টিম করে প্যাচগুলিতে কাজ করা, যাতে শেষ পর্যন্ত স্বাধীনভাবে একটি রিলিজ কাটা যায় + - রিলিজের একটি সীমাবদ্ধ কার্যকারিতা থাকার কারণে, আমরা ইমেজ প্রচার এবং অন্যান্য কোর রিলিজ ইঞ্জিনিয়ারিং কাজের উল্লেখযোগ্য অবদানকেও মূল্যায়ন করি +- অ্যাসোসিয়েটদের কাজ কিভাবে হচ্ছে তা জিজ্ঞাসাবাদ করা, উন্নতির প্রস্তাবনা দেওয়া, ফিডব্যাক সংগ্রহ করা এবং পরিবর্তন চালনা করা +- নির্ভরযোগ্য এবং দ্রুত সাড়া দেওয়া +- এমন উন্নত কাজে নিজেকে নিযুক্ত করা যা সম্পন্ন করতে রিলিজ ম্যানেজার-স্তরের অ্যাক্সেস এবং সুবিধার প্রয়োজন + +## রিলিজ ম্যানেজার অ্যাসোসিয়েটস + +রিলিজ ম্যানেজার অ্যাসোসিয়েটরা হলেন রিলিজ ম্যানেজারদের শিক্ষানবিশ, যাদের আগে রিলিজ ম্যানেজার শ্যাডো হিসেবে পরিচিত করা হতো। তাদের দায়িত্ব হল: + +- প্যাচ রিলিজের কাজ, চেরি পিক রিভিউ +- k/release আপডেট করা: নির্ভরশীলতা আপডেট করা এবং সোর্স কোডবেজে অভ্যস্ত হওয়া +- ডকুমেন্টেশনে অবদান রাখা: হ্যান্ডবুকগুলি মেনটেইন করা, নিশ্চিত করা যে রিলিজ প্রক্রিয়াগুলি ডকুমেন্টেড হয়েছে +- একজন রিলিজ ম্যানেজারের সাহায্যে: রিলিজ টিমের সাথে রিলিজ চক্রের সময় কাজ করা এবং কুবেরনেটস রিলিজ কাটা +- - অগ্রাধিকার এবং যোগাযোগে সাহায্যের সুযোগ খুঁজে বের করা + - প্যাচ রিলিজ সম্পর্কে প্রাক-ঘোষণা এবং আপডেট পাঠানো + - ক্যালেন্ডার আপডেট করা, রিলিজের তারিখ এবং মাইলস্টোনগুলির সাথে সাহায্য করা + [রিলিজ চক্রের টাইমলাইন][k-sig-release-releases] থেকে +- বাডি প্রোগ্রামের মাধ্যমে, নতুন অবদানকারীদের অনবোর্ডিং করা এবং তাদের সাথে কাজের জুটি বাঁধা + +GitHub মেনশনস: @kubernetes/release-engineering + +- অর্ণো ম্যুকাম ([@ameukam](https://github.com/ameukam)) +- জিম এঞ্জেল ([@jimangel](https://github.com/jimangel)) +- জোসেফ স্যান্ডোভাল ([@jrsapi](https://github.com/jrsapi)) +- জ্যান্ডার গ্রিজওয়িনস্কি([@salaxander](https://github.com/salaxander)) + +### রিলিজ ম্যানেজার অ্যাসোসিয়েট হওয়ার পথ + +অবদানকারীরা নিম্নলিখিত দেখানোর মাধ্যমে অ্যাসোসিয়েট হতে পারেন: + +- নিয়মিত অংশগ্রহণ, যার মধ্যে ৬-১২ মাসের সক্রিয় রিলিজ ইঞ্জিনিয়ারিং-সম্পর্কিত কাজ অন্তর্ভুক্ত +- একটি রিলিজ চক্রে রিলিজ টিমে একজন টেকনিকাল লিড হিসেবে ভূমিকা পালনের অভিজ্ঞতা + - এই অভিজ্ঞতা সিগ রিলিজের সাথে সামগ্রিকভাবে কাজ করার একটি দৃঢ় ভিত্তি প্রদান করে—আমাদের প্রত্যাশা সম্পর্কে ধারণা দেয়, যা টেকনিকাল দক্ষতা, যোগাযোগ/সাড়াদানের ক্ষমতা, এবং নির্ভরযোগ্যতাকে আবৃত্তি করে +- Testgrid এর সাথে আমাদের ইন্টার‌্যাকশন উন্নতি, লাইব্রেরিগুলি পরিষ্কার করা ইত্যাদি কাজে অবদান রাখা + - এই প্রচেষ্টাগুলি রিলিজ ম্যানেজারদের এবং অ্যাসোসিয়েটদের সাথে ইন্টার‌্যাক্ট করা এবং জুটি বাঁধা + + ## এসআইজি রিলিজ লিডস + +এসআইজি রিলিজ চেয়ারস এবং টেকনিকাল লিডস দায়ী আছেন: + +- এসআইজি রিলিজের গভর্নেন্সের জন্য +- রিলিজ ম্যানেজার এবং অ্যাসোসিয়েটদের জন্য জ্ঞান বিনিময় সেশন নেতৃত্ব দান +- নেতৃত্ব এবং অগ্রাধিকার নির্ধারণে কোচিং প্রদান + +তারা এখানে স্পষ্টভাবে উল্লেখ করা হয়েছে কারণ তারা প্রতিটি ভূমিকার জন্য বিভিন্ন যোগাযোগ চ্যানেল এবং অনুমতি গ্রুপ (GitHub টিমস, GCP অ্যাক্সেস) এর মালিক। এই হিসাবে, তারা অত্যন্ত অধিকারপ্রাপ্ত কমিউনিটি সদস্য এবং কিছু ব্যক্তিগত যোগাযোগের জন্য সচেতন, যা কখনো কখনো কুবেরনেটিস নিরাপত্তা প্রকাশনার সাথে সম্পর্কিত হতে পারে। + +GitHub টিম: [@kubernetes/sig-release-leads](https://github.com/orgs/kubernetes/teams/sig-release-leads) + +### চেয়ারস + +- জেরেমি রিকার্ড ([@jeremyrickard](https://github.com/jeremyrickard)) +- সাস্চা গ্রুনের্ট ([@saschagrunert](https://github.com/saschagrunert)) +- স্টিফেন অগাস্টাস ([@justaugustus](https://github.com/justaugustus)) + +### টেকনিকাল লিডস + +- আদলফো গার্সিয়া ভেইটিয়া ([@puerco](https://github.com/puerco)) +- কার্লোস পানাতো ([@cpanato](https://github.com/cpanato)) +- ভেরোনিকা লোপেজ ([@verolop](https://github.com/verolop)) + + ## পূর্ববর্তী শাখা ম্যানেজাররা + +পূর্ববর্তী শাখা ম্যানেজারদের তালিকা [releases directory][k-sig-release-releases]-এ kubernetes/sig-release রিপোজিটরিতে `release-x.y/release_team.md` ফাইলে পাওয়া যাবে। + +উদাহরণ: [1.15 Release Team](https://git.k8s.io/sig-release/releases/release-1.15/release_team.md) + +[community-membership]: https://git.k8s.io/community/community-membership.md#member +[handbook-branch-mgmt]: https://git.k8s.io/sig-release/release-engineering/role-handbooks/branch-manager.md +[handbook-patch-release]: https://git.k8s.io/sig-release/release-engineering/role-handbooks/patch-release-team.md +[k-sig-release-releases]: https://git.k8s.io/sig-release/releases +[patches]: /releases/patch-releases/ +[src]: https://git.k8s.io/community/committee-security-response/README.md +[release-team]: https://git.k8s.io/sig-release/release-team/README.md +[security-release-process]: https://git.k8s.io/security/security-release-process.md From 4b125935790188612e6ad014330864f53a292e12 Mon Sep 17 00:00:00 2001 From: Pronay <78101731+itsPronay@users.noreply.github.com> Date: Fri, 15 Mar 2024 02:16:30 +0600 Subject: [PATCH 0194/1086] Update release-managers.md Text format improve --- content/bn/releases/release-managers.md | 80 +++++++++++++++++-------- 1 file changed, 55 insertions(+), 25 deletions(-) diff --git a/content/bn/releases/release-managers.md b/content/bn/releases/release-managers.md index f96fa2d3f8..fe7f8a60d3 100644 --- a/content/bn/releases/release-managers.md +++ b/content/bn/releases/release-managers.md @@ -30,7 +30,8 @@ type: docs ### নিরাপত্তা ইম্বার্গো নীতি -কিছু রিলিজ সম্পর্কিত তথ্য ইম্বার্গোর অধীনে রয়েছে এবং আমরা তারা সেট করার জন্য নীতি নির্ধারণ করেছি। অধিক তথ্যের জন্য দয়া করে +কিছু রিলিজ সম্পর্কিত তথ্য ইম্বার্গোর অধীনে রয়েছে এবং আমরা তারা সেট করার জন্য নীতি নির্ধারণ করেছি। +অধিক তথ্যের জন্য দয়া করে [নিরাপত্তা ইম্বার্গো নীতি](https://github.com/kubernetes/committee-security-response/blob/main/private-distributors-list.md#embargo-policy) দেখুন। @@ -41,15 +42,17 @@ type: docs - [প্যাচ রিলিজ টীম](handbook-patch-release) - [শাখা ম্যানেজার](handbook-branch-mgmt) - ## রিলিজ ম্যানেজার -**নোট:** ডকুমেন্টেশনে প্যাচ রিলিজ টিম এবং ব্রাঞ্চ ম্যানেজমেন্ট ভূমিকা সম্পর্কে উল্লেখ থাকতে পারে। এই দুই ভূমিকা রিলিজ ম্যানেজার ভূমিকায় একীভূত করা হয়েছে। +**নোট:** ডকুমেন্টেশনে প্যাচ রিলিজ টিম এবং ব্রাঞ্চ ম্যানেজমেন্ট ভূমিকা সম্পর্কে +উল্লেখ থাকতে পারে। এই দুই ভূমিকা রিলিজ ম্যানেজার ভূমিকায় একীভূত +করা হয়েছে। মিনিমাম প্রয়োজনীয়তা রিলিজ ম্যানেজার এবং রিলিজ ম্যানেজার অ্যাসোসিয়েটগুলির জন্য নিম্নলিখিত: - বেসিক ইউনিক্স কমান্ডের পরিচিতি এবং শেল স্ক্রিপ্ট ডিবাগ করতে পারা। -- `git` এবং সম্পর্কিত `git` কমান্ড লাইন ইনভোকেশন এর মাধ্যমে ব্রাঞ্চ সোর্স কোড ওয়ার্কফ্লো পরিচয়। +- `git` এবং সম্পর্কিত `git` কমান্ড লাইন ইনভোকেশন এর মাধ্যমে +- ব্রাঞ্চ সোর্স কোড ওয়ার্কফ্লো পরিচয়। - গুগল ক্লাউডের সাধারণ জ্ঞান (ক্লাউড বিল্ড এবং ক্লাউড স্টোরেজ)। - সাহায্য চাইতে উপলব্ধ এবং স্পষ্টভাবে যোগাযোগ করতে খোলামেলা। - কুবার্নিটিস কমিউনিটি [সদস্যতা][community-membership] @@ -60,16 +63,21 @@ type: docs - প্যাচ রিলিজ (`x.y.z`, যেখানে `z` > 0) - মাইনর রিলিজ (`x.y.z`, যেখানে `z` = 0) - প্রি-রিলিজ (আলফা, বেটা এবং রিলিজ ক্যান্ডিডেট) - - প্রতিটি রিলিজ চক্রে রিলিজ টিম সঙ্গে কাজ করা + - প্রতিটি রিলিজ চক্রে রিলিজ টিম + সঙ্গে কাজ করা - প্যাচ রিলিজের জন্য [সময়সূচি এবং গতি নির্ধারণ করা][patches] - রিলিজ ব্রাঞ্চগুলি মেন্টেনেন্স করা: - চেরি পিকগুলি পর্যালোচনা করা - - রিলিজ ব্রাঞ্চটি স্বাস্থ্যকর রাখা এবং কোনও অপ্রত্যাশিত প্যাচ মার্জ না হয়ে থাকা + - রিলিজ ব্রাঞ্চটি স্বাস্থ্যকর রাখা এবং কোনও + অপ্রত্যাশিত প্যাচ মার্জ না হয়ে থাকা - [রিলিজ ম্যানেজার অ্যাসোসিয়েটগুলির](#রিলিজ-ম্যানেজার-অ্যাসোসিয়েটগুলি) গ্রুপ মেন্টরিং করা - k/release এ বৈশিষ্ট্যগুলি উন্নত করা এবং কোড রক্ষণ করা -- রিলিজ ম্যানেজার অ্যাসোসিয়েটগুলি এবং অবদানকারীদের সমর্থন করা যাতে তারা বাদী প্রোগ্রামে অংশগ্রহণ করতে পারে -- - মাসিকভাবে অ্যাসোসিয়েটগুলির সাথে চেক ইন করুন এবং কাজ দেয়ার জন্য তাদের সামর্থ্য বৃদ্ধি করুন, তাদেরকে রিলিজ করতে সাহায্য করুন এবং মেন্টরিং করুন - - অ্যাসোসিয়েটগুলির নতুন অবদানকারীদের নিয়োগে সহায়তা করা এবং তাদেরকে উচিত কাজ প্রস্তাব করা উদাহরণস্বরূপে প্রশ্নের উত্তর দেওয়া +- রিলিজ ম্যানেজার অ্যাসোসিয়েটগুলি এবং অবদানকারীদের সমর্থন করা যাতে তারা বাদী + প্রোগ্রামে অংশগ্রহণ করতে পারে + - মাসিকভাবে অ্যাসোসিয়েটগুলির সাথে চেক ইন করুন এবং কাজ দেয়ার জন্য তাদের সামর্থ্য বৃদ্ধি করুন, + তাদেরকে রিলিজ করতে সাহায্য করুন এবং মেন্টরিং করুন + - অ্যাসোসিয়েটগুলির নতুন অবদানকারীদের নিয়োগে সহায়তা করা এবং + তাদেরকে উচিত কাজ প্রস্তাব করা উদাহরণস্বরূপে প্রশ্নের উত্তর দেওয়া এই দলটি কার্যত সম্পর্কে ঘনিষ্ট সমবা-সহযোগিতা করে [সুরক্ষা সম্প্রতি কমিটি][src] এবং অতএব উল্লেখ করা উচিত @@ -91,28 +99,39 @@ GitHub উল্লেখ: [@kubernetes/release-engineering](https://github.com/ ### রিলিজ ম্যানেজার হওয়ার পথ -রিলিজ ম্যানেজার হতে চাইলে, প্রথমে কাউকে রিলিজ ম্যানেজার অ্যাসোসিয়েট হিসেবে কাজ করতে হবে। অ্যাসোসিয়েটরা কয়েকটি চক্র জুড়ে রিলিজের উপর সক্রিয়ভাবে কাজ করে রিলিজ ম্যানেজারে পদোন্নতি পায়: +রিলিজ ম্যানেজার হতে চাইলে, প্রথমে কাউকে রিলিজ ম্যানেজার অ্যাসোসিয়েট হিসেবে কাজ করতে হবে। +অ্যাসোসিয়েটরা কয়েকটি চক্র জুড়ে রিলিজের উপর সক্রিয়ভাবে কাজ করে রিলিজ +ম্যানেজারে পদোন্নতি পায়: - নেতৃত্ব দেওয়ার ইচ্ছা প্রদর্শন করা -- রিলিজ ম্যানেজারদের সাথে ট্যাগ-টিম করে প্যাচগুলিতে কাজ করা, যাতে শেষ পর্যন্ত স্বাধীনভাবে একটি রিলিজ কাটা যায় +- রিলিজ ম্যানেজারদের সাথে ট্যাগ-টিম করে প্যাচগুলিতে কাজ করা, + শেষ পর্যন্ত +- স্বাধীনভাবে একটি রিলিজ কাটা যায় - রিলিজের একটি সীমাবদ্ধ কার্যকারিতা থাকার কারণে, আমরা ইমেজ প্রচার এবং অন্যান্য কোর রিলিজ ইঞ্জিনিয়ারিং কাজের উল্লেখযোগ্য অবদানকেও মূল্যায়ন করি -- অ্যাসোসিয়েটদের কাজ কিভাবে হচ্ছে তা জিজ্ঞাসাবাদ করা, উন্নতির প্রস্তাবনা দেওয়া, ফিডব্যাক সংগ্রহ করা এবং পরিবর্তন চালনা করা +- অ্যাসোসিয়েটদের কাজ কিভাবে হচ্ছে তা জিজ্ঞাসাবাদ করা, উন্নতির প্রস্তাবনা দেওয়া, +- ফিডব্যাক সংগ্রহ করা এবং পরিবর্তন চালনা করা - নির্ভরযোগ্য এবং দ্রুত সাড়া দেওয়া -- এমন উন্নত কাজে নিজেকে নিযুক্ত করা যা সম্পন্ন করতে রিলিজ ম্যানেজার-স্তরের অ্যাক্সেস এবং সুবিধার প্রয়োজন +- এমন উন্নত কাজে নিজেকে নিযুক্ত করা যা সম্পন্ন করতে রিলিজ +- ম্যানেজার-স্তরের অ্যাক্সেস এবং সুবিধার প্রয়োজন ## রিলিজ ম্যানেজার অ্যাসোসিয়েটস -রিলিজ ম্যানেজার অ্যাসোসিয়েটরা হলেন রিলিজ ম্যানেজারদের শিক্ষানবিশ, যাদের আগে রিলিজ ম্যানেজার শ্যাডো হিসেবে পরিচিত করা হতো। তাদের দায়িত্ব হল: +রিলিজ ম্যানেজার অ্যাসোসিয়েটরা হলেন রিলিজ ম্যানেজারদের শিক্ষানবিশ, যাদের আগে রিলিজ ম্যানেজার শ্যাডো হিসেবে পরিচিত করা হতো। তাদের +দায়িত্ব হল: - প্যাচ রিলিজের কাজ, চেরি পিক রিভিউ -- k/release আপডেট করা: নির্ভরশীলতা আপডেট করা এবং সোর্স কোডবেজে অভ্যস্ত হওয়া -- ডকুমেন্টেশনে অবদান রাখা: হ্যান্ডবুকগুলি মেনটেইন করা, নিশ্চিত করা যে রিলিজ প্রক্রিয়াগুলি ডকুমেন্টেড হয়েছে -- একজন রিলিজ ম্যানেজারের সাহায্যে: রিলিজ টিমের সাথে রিলিজ চক্রের সময় কাজ করা এবং কুবেরনেটস রিলিজ কাটা +- k/release আপডেট করা: নির্ভরশীলতা আপডেট করা এবং সোর্স +- কোডবেজে অভ্যস্ত হওয়া +- ডকুমেন্টেশনে অবদান রাখা: হ্যান্ডবুকগুলি মেনটেইন করা, নিশ্চিত করা + যে রিলিজ প্রক্রিয়াগুলি ডকুমেন্টেড হয়েছে +- একজন রিলিজ ম্যানেজারের সাহায্যে: রিলিজ টিমের সাথে রিলিজ + চক্রের সময় কাজ করা এবং কুবেরনেটস রিলিজ কাটা - - অগ্রাধিকার এবং যোগাযোগে সাহায্যের সুযোগ খুঁজে বের করা - প্যাচ রিলিজ সম্পর্কে প্রাক-ঘোষণা এবং আপডেট পাঠানো - ক্যালেন্ডার আপডেট করা, রিলিজের তারিখ এবং মাইলস্টোনগুলির সাথে সাহায্য করা [রিলিজ চক্রের টাইমলাইন][k-sig-release-releases] থেকে -- বাডি প্রোগ্রামের মাধ্যমে, নতুন অবদানকারীদের অনবোর্ডিং করা এবং তাদের সাথে কাজের জুটি বাঁধা +- বাডি প্রোগ্রামের মাধ্যমে, নতুন অবদানকারীদের অনবোর্ডিং করা এবং + তাদের সাথে কাজের জুটি বাঁধা GitHub মেনশনস: @kubernetes/release-engineering @@ -125,11 +144,17 @@ GitHub মেনশনস: @kubernetes/release-engineering অবদানকারীরা নিম্নলিখিত দেখানোর মাধ্যমে অ্যাসোসিয়েট হতে পারেন: -- নিয়মিত অংশগ্রহণ, যার মধ্যে ৬-১২ মাসের সক্রিয় রিলিজ ইঞ্জিনিয়ারিং-সম্পর্কিত কাজ অন্তর্ভুক্ত -- একটি রিলিজ চক্রে রিলিজ টিমে একজন টেকনিকাল লিড হিসেবে ভূমিকা পালনের অভিজ্ঞতা - - এই অভিজ্ঞতা সিগ রিলিজের সাথে সামগ্রিকভাবে কাজ করার একটি দৃঢ় ভিত্তি প্রদান করে—আমাদের প্রত্যাশা সম্পর্কে ধারণা দেয়, যা টেকনিকাল দক্ষতা, যোগাযোগ/সাড়াদানের ক্ষমতা, এবং নির্ভরযোগ্যতাকে আবৃত্তি করে -- Testgrid এর সাথে আমাদের ইন্টার‌্যাকশন উন্নতি, লাইব্রেরিগুলি পরিষ্কার করা ইত্যাদি কাজে অবদান রাখা - - এই প্রচেষ্টাগুলি রিলিজ ম্যানেজারদের এবং অ্যাসোসিয়েটদের সাথে ইন্টার‌্যাক্ট করা এবং জুটি বাঁধা +- নিয়মিত অংশগ্রহণ, যার মধ্যে ৬-১২ মাসের সক্রিয় রিলিজ + ইঞ্জিনিয়ারিং-সম্পর্কিত কাজ অন্তর্ভুক্ত +- একটি রিলিজ চক্রে রিলিজ টিমে একজন টেকনিকাল + লিড হিসেবে ভূমিকা পালনের অভিজ্ঞতা + - এই অভিজ্ঞতা সিগ রিলিজের সাথে সামগ্রিকভাবে কাজ করার একটি দৃঢ় + ভিত্তি প্রদান করে—আমাদের প্রত্যাশা সম্পর্কে ধারণা দেয়, যা টেকনিকাল দক্ষতা, + যোগাযোগ/সাড়াদানের ক্ষমতা, এবং নির্ভরযোগ্যতাকে আবৃত্তি করে +- Testgrid এর সাথে আমাদের ইন্টার‌্যাকশন উন্নতি, লাইব্রেরিগুলি পরিষ্কার করা + ইত্যাদি কাজে অবদান রাখা + - এই প্রচেষ্টাগুলি রিলিজ ম্যানেজারদের এবং অ্যাসোসিয়েটদের সাথে + ইন্টার‌্যাক্ট করা এবং জুটি বাঁধা ## এসআইজি রিলিজ লিডস @@ -139,7 +164,11 @@ GitHub মেনশনস: @kubernetes/release-engineering - রিলিজ ম্যানেজার এবং অ্যাসোসিয়েটদের জন্য জ্ঞান বিনিময় সেশন নেতৃত্ব দান - নেতৃত্ব এবং অগ্রাধিকার নির্ধারণে কোচিং প্রদান -তারা এখানে স্পষ্টভাবে উল্লেখ করা হয়েছে কারণ তারা প্রতিটি ভূমিকার জন্য বিভিন্ন যোগাযোগ চ্যানেল এবং অনুমতি গ্রুপ (GitHub টিমস, GCP অ্যাক্সেস) এর মালিক। এই হিসাবে, তারা অত্যন্ত অধিকারপ্রাপ্ত কমিউনিটি সদস্য এবং কিছু ব্যক্তিগত যোগাযোগের জন্য সচেতন, যা কখনো কখনো কুবেরনেটিস নিরাপত্তা প্রকাশনার সাথে সম্পর্কিত হতে পারে। +তারা এখানে স্পষ্টভাবে উল্লেখ করা হয়েছে কারণ তারা প্রতিটি ভূমিকার +জন্য বিভিন্ন যোগাযোগ চ্যানেল এবং অনুমতি গ্রুপ (GitHub টিমস, GCP অ্যাক্সেস) +এর মালিক। এই হিসাবে, তারা অত্যন্ত অধিকারপ্রাপ্ত কমিউনিটি সদস্য এবং কিছু ব্যক্তিগত যো +গাযোগের জন্য সচেতন, যা কখনো কখনো কুবেরনেটিস নিরাপত্তা প্রকাশনার সাথে সম্পর্কিত +হতে পারে। GitHub টিম: [@kubernetes/sig-release-leads](https://github.com/orgs/kubernetes/teams/sig-release-leads) @@ -157,7 +186,8 @@ GitHub টিম: [@kubernetes/sig-release-leads](https://github.com/orgs/kubern ## পূর্ববর্তী শাখা ম্যানেজাররা -পূর্ববর্তী শাখা ম্যানেজারদের তালিকা [releases directory][k-sig-release-releases]-এ kubernetes/sig-release রিপোজিটরিতে `release-x.y/release_team.md` ফাইলে পাওয়া যাবে। +পূর্ববর্তী শাখা ম্যানেজারদের তালিকা [releases directory][k-sig-release-releases]-এ kubernetes/sig-release রিপোজিটরিতে +`release-x.y/release_team.md` ফাইলে পাওয়া যাবে। উদাহরণ: [1.15 Release Team](https://git.k8s.io/sig-release/releases/release-1.15/release_team.md) From c9c9ef243ddbc33a83265c23d07a57a0e4534666 Mon Sep 17 00:00:00 2001 From: Pronay <78101731+itsPronay@users.noreply.github.com> Date: Fri, 15 Mar 2024 02:18:30 +0600 Subject: [PATCH 0195/1086] Update release-managers.md --- content/bn/releases/release-managers.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/bn/releases/release-managers.md b/content/bn/releases/release-managers.md index fe7f8a60d3..fcc1f7b87f 100644 --- a/content/bn/releases/release-managers.md +++ b/content/bn/releases/release-managers.md @@ -3,9 +3,9 @@ title: রিলিজ ম্যানেজারস type: docs --- -"রিলিজ ম্যানেজারস" হল একটি ছাত্রবৃন্দের একটি সংক্ষিপ্ত উপনাম যা প্রকাশনা শাখা -পরিচালনা করতে দায়িত্বশীল কুবারনেটিস অবদানকারীদের সংক্রান্ত। তাদের দ্বারা SIG -রিলিজ প্রদান করা সরঞ্জাম ব্যবহার করে রিলিজ শাখা রক্ষণ এবং রিলিজ তৈরি করা হয়। +"রিলিজ ম্যানেজাররা" হল একটি সার্বিক শব্দ যা কুবেরনেটিসের সেই অবদানকারীদের +নির্দেশ করে, যারা রিলিজ ব্রাঞ্চগুলি বজায় রাখা এবং SIG Release দ্বারা +সরবরাহিত টুলগুলি ব্যবহার করে রিলিজ তৈরি করার দায়িত্বে থাকে। প্রত্যেক ভূমিকার দায়িত্ব নীচে বর্ণিত হয়েছে। From c8ce961bf9073b7b02ba3cb412bb92852ef71efb Mon Sep 17 00:00:00 2001 From: Pronay <78101731+itsPronay@users.noreply.github.com> Date: Fri, 15 Mar 2024 02:21:19 +0600 Subject: [PATCH 0196/1086] Update release-managers.md --- content/bn/releases/release-managers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/releases/release-managers.md b/content/bn/releases/release-managers.md index fcc1f7b87f..f6443ff37c 100644 --- a/content/bn/releases/release-managers.md +++ b/content/bn/releases/release-managers.md @@ -3,7 +3,7 @@ title: রিলিজ ম্যানেজারস type: docs --- -"রিলিজ ম্যানেজাররা" হল একটি সার্বিক শব্দ যা কুবেরনেটিসের সেই অবদানকারীদের +"রিলিজ ম্যানেজাররা" হল একটি সার্বিক শব্দ যা কুবার্নিটিসের সেই অবদানকারীদের নির্দেশ করে, যারা রিলিজ ব্রাঞ্চগুলি বজায় রাখা এবং SIG Release দ্বারা সরবরাহিত টুলগুলি ব্যবহার করে রিলিজ তৈরি করার দায়িত্বে থাকে। From c274efbd31638fb56375635a1cad7567d561b803 Mon Sep 17 00:00:00 2001 From: Pronay Date: Fri, 15 Mar 2024 23:50:31 +0600 Subject: [PATCH 0197/1086] Update release-managers.md Fixed error & format --- content/bn/releases/release-managers.md | 96 +++++++++++++------------ 1 file changed, 49 insertions(+), 47 deletions(-) diff --git a/content/bn/releases/release-managers.md b/content/bn/releases/release-managers.md index f6443ff37c..2abac3b9b1 100644 --- a/content/bn/releases/release-managers.md +++ b/content/bn/releases/release-managers.md @@ -3,7 +3,7 @@ title: রিলিজ ম্যানেজারস type: docs --- -"রিলিজ ম্যানেজাররা" হল একটি সার্বিক শব্দ যা কুবার্নিটিসের সেই অবদানকারীদের +"রিলিজ ম্যানেজাররা" হল একটি সার্বিক শব্দ যা কুবারনেটিসের সেই অবদানকারীদের নির্দেশ করে, যারা রিলিজ ব্রাঞ্চগুলি বজায় রাখা এবং SIG Release দ্বারা সরবরাহিত টুলগুলি ব্যবহার করে রিলিজ তৈরি করার দায়িত্বে থাকে। @@ -26,7 +26,7 @@ type: docs | --- | --- | --- | --- | --- | | [release-managers@kubernetes.io](mailto:release-managers@kubernetes.io) | [#release-management](https://kubernetes.slack.com/messages/CJH2GBF7Y) (চ্যানেল) / @release-managers (ইউজার গ্রুপ) | পাবলিক | রিলিজ ম্যানেজারদের জন্য পাবলিক আলোচনা | সকল রিলিজ ম্যানেজার (অ্যাসোসিয়েট, এবং SIG চেয়ারস সহ) | | [release-managers-private@kubernetes.io](mailto:release-managers-private@kubernetes.io) | নেই | প্রাইভেট | স্পেশাল রিলিজ ম্যানেজারদের জন্য প্রাইভেট আলোচনা | রিলিজ ম্যানেজার, SIG রিলিজ লীডারশিপ | -| [security-release-team@kubernetes.io](mailto:security-release-team@kubernetes.io) | [#security-release-team](https://kubernetes.slack.com/archives/G0162T1RYHG) (চ্যানেল) / @security-rel-team (ইউজার গ্রুপ) | প্রাইভেট | সিকিউরিটি রিলিজ সমন্বয় সিকিউরিটি প্রতিক্রিয়া কমিটি সহ | [security-discuss-private@kubernetes.io](mailto:security-discuss-private@kubernetes.io), [release-managers-private@kubernetes.io](mailto:release-managers-private@kubernetes.io) | +| [security-release-team@kubernetes.io](mailto:security-release-team@kubernetes.io) | [#security-release-team](https://kubernetes.slack.com/archives/G0162T1RYHG) (চ্যানেল) / @security-rel-team (ইউজার গ্রুপ) | প্রাইভেট | সিকিউরিটি রেসপন্স কমিটির সাথে সিকিউরিটি রিলিজ সমন্বয় | [security-discuss-private@kubernetes.io](mailto:security-discuss-private@kubernetes.io), [release-managers-private@kubernetes.io](mailto:release-managers-private@kubernetes.io) | ### নিরাপত্তা ইম্বার্গো নীতি @@ -39,8 +39,8 @@ type: docs **লক্ষ্যস্থান: প্যাচ রিলিজ টীম এবং শাখা ম্যানেজার হ্যান্ডবুকগুলি পরের তারিখে ডিডুপ্লিকেট করা হবে।** -- [প্যাচ রিলিজ টীম](handbook-patch-release) -- [শাখা ম্যানেজার](handbook-branch-mgmt) +- [প্যাচ রিলিজ টীম][handbook-patch-release] +- [শাখা ম্যানেজার][handbook-branch-mgmt] ## রিলিজ ম্যানেজার @@ -51,10 +51,10 @@ type: docs মিনিমাম প্রয়োজনীয়তা রিলিজ ম্যানেজার এবং রিলিজ ম্যানেজার অ্যাসোসিয়েটগুলির জন্য নিম্নলিখিত: - বেসিক ইউনিক্স কমান্ডের পরিচিতি এবং শেল স্ক্রিপ্ট ডিবাগ করতে পারা। -- `git` এবং সম্পর্কিত `git` কমান্ড লাইন ইনভোকেশন এর মাধ্যমে -- ব্রাঞ্চ সোর্স কোড ওয়ার্কফ্লো পরিচয়। +- git এবং সম্পর্কিত git কমান্ড লাইন ইনভোকেশন এর মাধ্যমে +ব্রাঞ্চ সোর্স কোড ওয়ার্কফ্লো পরিচিতি। - গুগল ক্লাউডের সাধারণ জ্ঞান (ক্লাউড বিল্ড এবং ক্লাউড স্টোরেজ)। -- সাহায্য চাইতে উপলব্ধ এবং স্পষ্টভাবে যোগাযোগ করতে খোলামেলা। +- সাহায্য চাওয়া এবং স্পষ্টভাবে যোগাযোগের জন্য উন্মুক্ত। - কুবার্নিটিস কমিউনিটি [সদস্যতা][community-membership] রিলিজ ম্যানেজারদের দায়িত্ব অনুসারে: @@ -65,23 +65,23 @@ type: docs - প্রি-রিলিজ (আলফা, বেটা এবং রিলিজ ক্যান্ডিডেট) - প্রতিটি রিলিজ চক্রে রিলিজ টিম সঙ্গে কাজ করা - - প্যাচ রিলিজের জন্য [সময়সূচি এবং গতি নির্ধারণ করা][patches] + - প্যাচ রিলিজের জন্য [সময়সূচি এবং ক্যাডেন্স নির্ধারণ করা][patches] - রিলিজ ব্রাঞ্চগুলি মেন্টেনেন্স করা: - চেরি পিকগুলি পর্যালোচনা করা - রিলিজ ব্রাঞ্চটি স্বাস্থ্যকর রাখা এবং কোনও - অপ্রত্যাশিত প্যাচ মার্জ না হয়ে থাকা + অপ্রত্যাশিত প্যাচ মার্জ না হয়ে থাকা নিশ্চিত করা । - [রিলিজ ম্যানেজার অ্যাসোসিয়েটগুলির](#রিলিজ-ম্যানেজার-অ্যাসোসিয়েটগুলি) গ্রুপ মেন্টরিং করা - k/release এ বৈশিষ্ট্যগুলি উন্নত করা এবং কোড রক্ষণ করা -- রিলিজ ম্যানেজার অ্যাসোসিয়েটগুলি এবং অবদানকারীদের সমর্থন করা যাতে তারা বাদী - প্রোগ্রামে অংশগ্রহণ করতে পারে +- Buddy প্রোগ্রামে সক্রিয়ভাবে অংশগ্রহণের মাধ্যমে রিলিজ ম্যানেজার সহযোগী +এবং অবদানকারীদের সহায়তা করা - মাসিকভাবে অ্যাসোসিয়েটগুলির সাথে চেক ইন করুন এবং কাজ দেয়ার জন্য তাদের সামর্থ্য বৃদ্ধি করুন, তাদেরকে রিলিজ করতে সাহায্য করুন এবং মেন্টরিং করুন - - অ্যাসোসিয়েটগুলির নতুন অবদানকারীদের নিয়োগে সহায়তা করা এবং - তাদেরকে উচিত কাজ প্রস্তাব করা উদাহরণস্বরূপে প্রশ্নের উত্তর দেওয়া + - অ্যাসোসিয়েটগুলির নতুন অবদানকারীদের নিয়োগে সহায়তা করা +যেমন, প্রশ্নের উত্তর দেওয়া এবং তাদের জন্য উপযুক্ত কাজের পরামর্শ দেওয়া -এই দলটি কার্যত সম্পর্কে ঘনিষ্ট সমবা-সহযোগিতা করে -[সুরক্ষা সম্প্রতি কমিটি][src] এবং অতএব উল্লেখ করা উচিত -[সুরক্ষা রিলিজ প্রক্রিয়া][security-release-process] এ নির্ধারিত নির্দেশিকা মেনে চলতে হবে। +এই দলটি মাঝে মাঝে [সিকিউরিটি রেসপন্স কমিটির][src🖐 +সাথে ঘনিষ্ঠভাবে কাজ করে এবং তাই [সিকিউরিটি রিলিজ প্রসেসে][security-release-process🖐 +উল্লিখিত নির্দেশিকা মেনে চলা উচিত। GitHub অ্যাক্সেস নিয়ন্ত্রণ: [@kubernetes/release-managers](https://github.com/orgs/kubernetes/teams/release-managers) @@ -105,14 +105,14 @@ GitHub উল্লেখ: [@kubernetes/release-engineering](https://github.com/ - নেতৃত্ব দেওয়ার ইচ্ছা প্রদর্শন করা - রিলিজ ম্যানেজারদের সাথে ট্যাগ-টিম করে প্যাচগুলিতে কাজ করা, - শেষ পর্যন্ত -- স্বাধীনভাবে একটি রিলিজ কাটা যায় - - রিলিজের একটি সীমাবদ্ধ কার্যকারিতা থাকার কারণে, আমরা ইমেজ প্রচার এবং অন্যান্য কোর রিলিজ ইঞ্জিনিয়ারিং কাজের উল্লেখযোগ্য অবদানকেও মূল্যায়ন করি + শেষ পর্যন্ত স্বাধীনভাবে একটি রিলিজ + কাটা যায় । + রিলিজের একটি সীমাবদ্ধ কার্যকারিতা থাকার কারণে, আমরা ইমেজ প্রচার এবং অন্যান্য কোর রিলিজ ইঞ্জিনিয়ারিং কাজের উল্লেখযোগ্য অবদানকেও মূল্যায়ন করি । - অ্যাসোসিয়েটদের কাজ কিভাবে হচ্ছে তা জিজ্ঞাসাবাদ করা, উন্নতির প্রস্তাবনা দেওয়া, -- ফিডব্যাক সংগ্রহ করা এবং পরিবর্তন চালনা করা -- নির্ভরযোগ্য এবং দ্রুত সাড়া দেওয়া +ফিডব্যাক সংগ্রহ করা এবং পরিবর্তন চালনা করা +- নির্ভরযোগ্য এবং দ্রুত সাড়া দেওয়া । - এমন উন্নত কাজে নিজেকে নিযুক্ত করা যা সম্পন্ন করতে রিলিজ -- ম্যানেজার-স্তরের অ্যাক্সেস এবং সুবিধার প্রয়োজন + ম্যানেজার-স্তরের অ্যাক্সেস এবং সুবিধার প্রয়োজন । ## রিলিজ ম্যানেজার অ্যাসোসিয়েটস @@ -121,24 +121,24 @@ GitHub উল্লেখ: [@kubernetes/release-engineering](https://github.com/ - প্যাচ রিলিজের কাজ, চেরি পিক রিভিউ - k/release আপডেট করা: নির্ভরশীলতা আপডেট করা এবং সোর্স -- কোডবেজে অভ্যস্ত হওয়া +কোডবেজে অভ্যস্ত হওয়া - ডকুমেন্টেশনে অবদান রাখা: হ্যান্ডবুকগুলি মেনটেইন করা, নিশ্চিত করা যে রিলিজ প্রক্রিয়াগুলি ডকুমেন্টেড হয়েছে - একজন রিলিজ ম্যানেজারের সাহায্যে: রিলিজ টিমের সাথে রিলিজ চক্রের সময় কাজ করা এবং কুবেরনেটস রিলিজ কাটা -- - অগ্রাধিকার এবং যোগাযোগে সাহায্যের সুযোগ খুঁজে বের করা +- অগ্রাধিকার এবং যোগাযোগে সাহায্যের সুযোগ খুঁজে বের করা - প্যাচ রিলিজ সম্পর্কে প্রাক-ঘোষণা এবং আপডেট পাঠানো - ক্যালেন্ডার আপডেট করা, রিলিজের তারিখ এবং মাইলস্টোনগুলির সাথে সাহায্য করা [রিলিজ চক্রের টাইমলাইন][k-sig-release-releases] থেকে -- বাডি প্রোগ্রামের মাধ্যমে, নতুন অবদানকারীদের অনবোর্ডিং করা এবং +- Buddy প্রোগ্রামের মাধ্যমে, নতুন অবদানকারীদের অনবোর্ডিং করা এবং তাদের সাথে কাজের জুটি বাঁধা GitHub মেনশনস: @kubernetes/release-engineering -- অর্ণো ম্যুকাম ([@ameukam](https://github.com/ameukam)) -- জিম এঞ্জেল ([@jimangel](https://github.com/jimangel)) -- জোসেফ স্যান্ডোভাল ([@jrsapi](https://github.com/jrsapi)) -- জ্যান্ডার গ্রিজওয়িনস্কি([@salaxander](https://github.com/salaxander)) +- Arnaud Meukam ([@ameukam](https://github.com/ameukam)) +- Jim Angel ([@jimangel](https://github.com/jimangel)) +- Joseph Sandoval ([@jrsapi](https://github.com/jrsapi)) +- Xander Grzywinski ([@salaxander](https://github.com/salaxander)) ### রিলিজ ম্যানেজার অ্যাসোসিয়েট হওয়ার পথ @@ -148,41 +148,43 @@ GitHub মেনশনস: @kubernetes/release-engineering ইঞ্জিনিয়ারিং-সম্পর্কিত কাজ অন্তর্ভুক্ত - একটি রিলিজ চক্রে রিলিজ টিমে একজন টেকনিকাল লিড হিসেবে ভূমিকা পালনের অভিজ্ঞতা - - এই অভিজ্ঞতা সিগ রিলিজের সাথে সামগ্রিকভাবে কাজ করার একটি দৃঢ় - ভিত্তি প্রদান করে—আমাদের প্রত্যাশা সম্পর্কে ধারণা দেয়, যা টেকনিকাল দক্ষতা, - যোগাযোগ/সাড়াদানের ক্ষমতা, এবং নির্ভরযোগ্যতাকে আবৃত্তি করে -- Testgrid এর সাথে আমাদের ইন্টার‌্যাকশন উন্নতি, লাইব্রেরিগুলি পরিষ্কার করা - ইত্যাদি কাজে অবদান রাখা + - SIG রিলিজ সামগ্রিকভাবে কীভাবে কাজ করে তা বোঝার জন্য এই +অভিজ্ঞতাটি একটি শক্ত ভিত্তিরেখা প্রদান করে—যার মধ্যে প্রযুক্তিগত দক্ষতা, +যোগাযোগ/রেস্পন্সিভনেস এবং নির্ভরযোগ্যতা সম্পর্কিত আমাদের প্রত্যাশাগুলি অন্তর্ভুক্ত +- k/release আইটেমগুলিতে কাজ করা যা Testgrid এর সাথে আমাদের ইন্টার‌্যাকশন এর +উন্নত করে, লাইব্রেরি পরিষ্কার করা ইত্যাদি কাজে অবদান রাখা - এই প্রচেষ্টাগুলি রিলিজ ম্যানেজারদের এবং অ্যাসোসিয়েটদের সাথে - ইন্টার‌্যাক্ট করা এবং জুটি বাঁধা + ইন্টার‌্যাক্ট করা এবং জুটি বাঁধা প্রয়োজন - ## এসআইজি রিলিজ লিডস + ## SIG রিলিজ লিডস -এসআইজি রিলিজ চেয়ারস এবং টেকনিকাল লিডস দায়ী আছেন: +SIG রিলিজ চেয়ারস এবং টেকনিকাল লিডস দায়ী আছেন: -- এসআইজি রিলিজের গভর্নেন্সের জন্য +- SIG রিলিজের গভর্নেন্সের জন্য - রিলিজ ম্যানেজার এবং অ্যাসোসিয়েটদের জন্য জ্ঞান বিনিময় সেশন নেতৃত্ব দান - নেতৃত্ব এবং অগ্রাধিকার নির্ধারণে কোচিং প্রদান -তারা এখানে স্পষ্টভাবে উল্লেখ করা হয়েছে কারণ তারা প্রতিটি ভূমিকার +তাদের এখানে স্পষ্টভাবে উল্লেখ করা হয়েছে কারণ তারা প্রতিটি ভূমিকার জন্য বিভিন্ন যোগাযোগ চ্যানেল এবং অনুমতি গ্রুপ (GitHub টিমস, GCP অ্যাক্সেস) -এর মালিক। এই হিসাবে, তারা অত্যন্ত অধিকারপ্রাপ্ত কমিউনিটি সদস্য এবং কিছু ব্যক্তিগত যো -গাযোগের জন্য সচেতন, যা কখনো কখনো কুবেরনেটিস নিরাপত্তা প্রকাশনার সাথে সম্পর্কিত +এর মালিক। এই হিসাবে, তারা অত্যন্ত অধিকারপ্রাপ্ত কমিউনিটি সদস্য এবং কিছু ব্যক্তিগত +যোগাযোগের জন্য সচেতন, যা কখনো কখনো কুবারনেটিস নিরাপত্তা প্রকাশনার সাথে সম্পর্কিত হতে পারে। GitHub টিম: [@kubernetes/sig-release-leads](https://github.com/orgs/kubernetes/teams/sig-release-leads) ### চেয়ারস -- জেরেমি রিকার্ড ([@jeremyrickard](https://github.com/jeremyrickard)) -- সাস্চা গ্রুনের্ট ([@saschagrunert](https://github.com/saschagrunert)) -- স্টিফেন অগাস্টাস ([@justaugustus](https://github.com/justaugustus)) +- Jeremy Rickard ([@jeremyrickard](https://github.com/jeremyrickard)) +- Sascha Grunert ([@saschagrunert](https://github.com/saschagrunert)) +- Stephen Augustus ([@justaugustus](https://github.com/justaugustus)) ### টেকনিকাল লিডস -- আদলফো গার্সিয়া ভেইটিয়া ([@puerco](https://github.com/puerco)) -- কার্লোস পানাতো ([@cpanato](https://github.com/cpanato)) -- ভেরোনিকা লোপেজ ([@verolop](https://github.com/verolop)) +- Adolfo García Veytia ([@puerco](https://github.com/puerco)) +- Carlos Panato ([@cpanato](https://github.com/cpanato)) +- Verónica López ([@verolop](https://github.com/verolop)) + + ## পূর্ববর্তী শাখা ম্যানেজাররা From 8714c26ee62cfc2c655e3915461d878acb3d6fde Mon Sep 17 00:00:00 2001 From: Benedikt Bongartz Date: Sat, 16 Mar 2024 01:27:02 +0100 Subject: [PATCH 0198/1086] Update content/en/blog/_posts/2021-09-03-api-server-tracing.md Signed-off-by: Benedikt Bongartz --- content/en/blog/_posts/2021-09-03-api-server-tracing.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2021-09-03-api-server-tracing.md b/content/en/blog/_posts/2021-09-03-api-server-tracing.md index 344ff8fa46..c1a062d1bf 100644 --- a/content/en/blog/_posts/2021-09-03-api-server-tracing.md +++ b/content/en/blog/_posts/2021-09-03-api-server-tracing.md @@ -42,7 +42,11 @@ samplingRatePerMillion: 10000 ### Enabling Etcd Tracing -Add `--experimental-enable-distributed-tracing`, `--experimental-distributed-tracing-address=0.0.0.0:4317`, `--experimental-distributed-tracing-service-name=etcd` flags to etcd to enable tracing. Note that this traces every request, so it will probably generate a lot of traces if you enable it. Required etcd version is [v3.5+](https://etcd.io/docs/v3.5/op-guide/monitoring/#distributed-tracing). +Add `--experimental-enable-distributed-tracing`, `--experimental-distributed-tracing-address=0.0.0.0:4317`, `--experimental-distributed-tracing-service-name=etcd` flags to etcd to enable tracing. Note that this traces every request, so it will probably generate a lot of traces if you enable it. Required etcd version is [3.5 up to 3.5.4](https://etcd.io/docs/v3.5/op-guide/monitoring/#distributed-tracing). + +Starting from version 3.5.5 until version 3.5.10, the default sampling rate for traces is set to 0%, meaning no traces were collected by default. Unfortunately, there is no option provided to configure a higher sampling rate. ([See details](https://github.com/etcd-io/etcd/pull/16951)) + +In version [3.5.11](https://github.com/etcd-io/etcd/blob/main/CHANGELOG/CHANGELOG-3.5.md#v3511-2023-12-07), the number of samples to collect per million spans can be configured using the newly introduced `--experimental-distributed-tracing-sampling-rate=1000000` flag. ### Example Trace: List Nodes From c371319b0e3282ecd288d434206cd847eb8abe53 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Sat, 16 Mar 2024 14:08:58 +0600 Subject: [PATCH 0199/1086] Update _index.md --- content/bn/docs/concepts/workloads/pods/_index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/content/bn/docs/concepts/workloads/pods/_index.md b/content/bn/docs/concepts/workloads/pods/_index.md index 90a666a569..748f9fbc68 100644 --- a/content/bn/docs/concepts/workloads/pods/_index.md +++ b/content/bn/docs/concepts/workloads/pods/_index.md @@ -1,6 +1,4 @@ --- -reviewers: -- erictune title: Pods content_type: concept weight: 10 From a5b8e3fb888c4576138d813f875c68b03d5ac8ca Mon Sep 17 00:00:00 2001 From: Pronay Date: Sat, 16 Mar 2024 14:30:17 +0600 Subject: [PATCH 0200/1086] Update release-managers.md --- content/bn/releases/release-managers.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/content/bn/releases/release-managers.md b/content/bn/releases/release-managers.md index 2abac3b9b1..18ff5e616d 100644 --- a/content/bn/releases/release-managers.md +++ b/content/bn/releases/release-managers.md @@ -51,7 +51,7 @@ type: docs মিনিমাম প্রয়োজনীয়তা রিলিজ ম্যানেজার এবং রিলিজ ম্যানেজার অ্যাসোসিয়েটগুলির জন্য নিম্নলিখিত: - বেসিক ইউনিক্স কমান্ডের পরিচিতি এবং শেল স্ক্রিপ্ট ডিবাগ করতে পারা। -- git এবং সম্পর্কিত git কমান্ড লাইন ইনভোকেশন এর মাধ্যমে +- `git` এবং সম্পর্কিত `git` কমান্ড লাইন ইনভোকেশন এর মাধ্যমে ব্রাঞ্চ সোর্স কোড ওয়ার্কফ্লো পরিচিতি। - গুগল ক্লাউডের সাধারণ জ্ঞান (ক্লাউড বিল্ড এবং ক্লাউড স্টোরেজ)। - সাহায্য চাওয়া এবং স্পষ্টভাবে যোগাযোগের জন্য উন্মুক্ত। @@ -79,8 +79,8 @@ type: docs - অ্যাসোসিয়েটগুলির নতুন অবদানকারীদের নিয়োগে সহায়তা করা যেমন, প্রশ্নের উত্তর দেওয়া এবং তাদের জন্য উপযুক্ত কাজের পরামর্শ দেওয়া -এই দলটি মাঝে মাঝে [সিকিউরিটি রেসপন্স কমিটির][src🖐 -সাথে ঘনিষ্ঠভাবে কাজ করে এবং তাই [সিকিউরিটি রিলিজ প্রসেসে][security-release-process🖐 +এই দলটি মাঝে মাঝে [সিকিউরিটি রেসপন্স কমিটির][src] +সাথে ঘনিষ্ঠভাবে কাজ করে এবং তাই [সিকিউরিটি রিলিজ প্রসেসে][security-release-process] উল্লিখিত নির্দেশিকা মেনে চলা উচিত। GitHub অ্যাক্সেস নিয়ন্ত্রণ: [@kubernetes/release-managers](https://github.com/orgs/kubernetes/teams/release-managers) @@ -105,9 +105,9 @@ GitHub উল্লেখ: [@kubernetes/release-engineering](https://github.com/ - নেতৃত্ব দেওয়ার ইচ্ছা প্রদর্শন করা - রিলিজ ম্যানেজারদের সাথে ট্যাগ-টিম করে প্যাচগুলিতে কাজ করা, - শেষ পর্যন্ত স্বাধীনভাবে একটি রিলিজ - কাটা যায় । - রিলিজের একটি সীমাবদ্ধ কার্যকারিতা থাকার কারণে, আমরা ইমেজ প্রচার এবং অন্যান্য কোর রিলিজ ইঞ্জিনিয়ারিং কাজের উল্লেখযোগ্য অবদানকেও মূল্যায়ন করি । +শেষ পর্যন্ত স্বাধীনভাবে একটি রিলিজ কাটা যায় । + - রিলিজের একটি সীমাবদ্ধ কার্যকারিতা থাকার কারণে, আমরা ইমেজ প্রচার +এবং অন্যান্য কোর রিলিজ ইঞ্জিনিয়ারিং কাজের উল্লেখযোগ্য অবদানকেও মূল্যায়ন করি । - অ্যাসোসিয়েটদের কাজ কিভাবে হচ্ছে তা জিজ্ঞাসাবাদ করা, উন্নতির প্রস্তাবনা দেওয়া, ফিডব্যাক সংগ্রহ করা এবং পরিবর্তন চালনা করা - নির্ভরযোগ্য এবং দ্রুত সাড়া দেওয়া । @@ -184,9 +184,7 @@ GitHub টিম: [@kubernetes/sig-release-leads](https://github.com/orgs/kubern - Carlos Panato ([@cpanato](https://github.com/cpanato)) - Verónica López ([@verolop](https://github.com/verolop)) - - - ## পূর্ববর্তী শাখা ম্যানেজাররা +--- পূর্ববর্তী শাখা ম্যানেজারদের তালিকা [releases directory][k-sig-release-releases]-এ kubernetes/sig-release রিপোজিটরিতে `release-x.y/release_team.md` ফাইলে পাওয়া যাবে। From 2ca3999396e0169ffa75b6e27e81baed3a122057 Mon Sep 17 00:00:00 2001 From: MD TANVIR AHMED <38840252+cloudwithtanvir@users.noreply.github.com> Date: Sat, 16 Mar 2024 11:00:51 +0000 Subject: [PATCH 0201/1086] Updated localization of k8s working with object file --- .../overview/working-with-objects/_index.md | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/content/bn/docs/concepts/overview/working-with-objects/_index.md b/content/bn/docs/concepts/overview/working-with-objects/_index.md index 645127c039..89da6c3fc0 100644 --- a/content/bn/docs/concepts/overview/working-with-objects/_index.md +++ b/content/bn/docs/concepts/overview/working-with-objects/_index.md @@ -25,8 +25,8 @@ card: এন্টিটিগুলি ব্যবহার করে আপনার ক্লাস্টারের অবস্থা প্রকাশ করতে। বিশেষভাবে, তারা বর্ণনা করতে পারে: - কোন কন্টেনার অ্যাপ্লিকেশন কি রান করছে (এবং কোন নোডগুলিতে) -- ঐ অ্যাপ্লিকেশনগুলির জন্য উপলব্ধ সম্পদ -- ঐ অ্যাপ্লিকেশনগুলির কিভাবে ব্যবহার করতে হবে, উদাহরণস্বরূপ পুনরারম্ভন নীতি, আপগ্রেড, এবং ত্রুটি সহ্যতা +- ঐ অ্যাপ্লিকেশনগুলির জন্য রিসোর্স +- ঐ অ্যাপ্লিকেশনগুলির কিভাবে ব্যবহার করতে হবে, উদাহরণস্বরূপ রিস্টার্ট নীতি, আপগ্রেড, এবং ফল্ট-টলারেন্স একটি কুবারনেটিস অবজেক্ট হল একটি "উদ্দেশ্যের রেকর্ড" - একবার আপনি অবজেক্ট তৈরি করে দিলে, কুবারনেটিস সিস্টেম সরাসরি এই অবজেক্টটি থাকার নিশ্চয়তার জন্য কাজ করবে। অবজেক্ট তৈরি করে @@ -34,28 +34,28 @@ card: হল আপনার ক্লাস্টারের *কাঙ্ক্ষিত অবস্থা*। কুবারনেটিস অবজেক্টগুলির সাথে কাজ করতে - তা তৈরি, পরিবর্তন করতে বা মুছতে - আপনার -[কুবারনেটিস API](/docs/concepts/overview/kubernetes-api/) ব্যবহার করতে হবে। উদাহরণস্বরূপ, +[কুবারনেটিস API](/bn/docs/concepts/overview/kubernetes-api/) ব্যবহার করতে হবে। উদাহরণস্বরূপ, যখন আপনি `kubectl` কমান্ড-লাইন ইন্টারফেস ব্যবহার করেন, তখন CLI আপনার জন্য প্রয়োজনীয় -কুবারনেটিস API কল করে। আপনি একটি [Client Libraries](/docs/reference/using-api/ -client-libraries/) ব্যবহার করে নিজের প্রোগ্রামে কুবারনেটিস API সরাসরি ব্যবহার করতে পারেন। +কুবারনেটিস API কল করে। আপনি একটি +[Client Libraries](/docs/reference/using-api/client-libraries/) ব্যবহার করে নিজের প্রোগ্রামে কুবারনেটিস API সরাসরি ব্যবহার করতে পারেন। ### অবজেক্ট স্পেক এবং স্ট্যাটাস প্রায় সব কুবারনেটিস অবজেক্টের একটি `spec` এবং একটি `status` নেস্টেড অবজেক্ট ফিল্ড রয়েছে যা অবজেক্টের কনফিগারেশন নিয়ন্ত্রণ করে: অবজেক্টের _`spec`_ এবং _`status`_। যে অবজেক্টগুলির `spec` থাকে, আপনার অবজেক্ট তৈরি করতে এটা নির্ধারণ করতে হবে -যখন অবজেক্ট তৈরি করছেন, -যে কোন রিসোর্সের বৈশিষ্ট্য বর্ণনা প্রদান করে: এর _কাঙ্ক্ষিত অবস্থা_। +যখন অবজেক্ট তৈরি করবেন, +যে রিসোর্সের বৈশিষ্ট্য বর্ণনা প্রদান করবেন: এর _কাঙ্ক্ষিত অবস্থা_। `status` অবজেক্টের _বর্তমান অবস্থা_ বর্ণনা করে, যা কুবারনেটিস সিস্টেম এবং এর উপাদানগুলি প্রদান এবং আপডেট করে। কুবারনেটিস {{< glossary_tooltip text="control plane" term_id="control-plane" >}} সরাসরি এবং সক্রিয়ভাবে প্রতিটি অবজেক্টের -বর্তমান অবস্থা পরিচালনা করে যাতে আপনি প্রদত্ত অবস্থা মিলে। +বর্তমান অবস্থা পরিচালনা করে যাতে আপনার প্রদত্ত অবস্থা মিলে। উদাহরণস্বরূপ: কুবারনেটিসে, একটি ডিপ্লয়মেন্ট একটি অবজেক্ট যা আপনার ক্লাস্টারে চলমান একটি অ্যাপ্লিকেশন প্রতিনিধিত্ব করতে পারে। ডিপ্লয়মেন্ট তৈরি করতে যখন আপনি -ডিপ্লয়মেন্ট তৈরি করেন, আপনি ডিপ্লয়মেন্ট `spec` সেট করতে পারেন যে ় +ডিপ্লয়মেন্ট তৈরি করেন, আপনি ডিপ্লয়মেন্ট `spec` সেট করতে পারেন যে আপনি চাইছেন অ্যাপ্লিকেশনের তিনটি রিপ্লিকা চলমান থাকুক। কুবারনেটিস সিস্টেম ডিপ্লয়মেন্ট স্পেক পড়ে এবং আপনার প্রদত্ত ডিপ্লয়মেন্ট এর তিনটি ইনস্ট্যান্স চালু করে, এই স্ট্যাটাস আপনার স্পেক অনুসারে আপডেট করে। @@ -68,14 +68,14 @@ client-libraries/) ব্যবহার করে নিজের প্রো ### একটি কুবারনেটিস অবজেক্ট বর্ণনা -যখন আপনি কুবারনেটিসে একটি অবজেক্ট তৈরি করছেন, আপনাকে অবজেক্ট স্পেক উপায় +যখন আপনি কুবারনেটিসে একটি অবজেক্ট তৈরি করবেন, আপনাকে অবজেক্ট spec প্রদান করতে হবে যা দরকার তার কাঙ্ক্ষিত অবস্থা বর্ণনা করে এবং অবজেক্ট সম্পর্কে কিছু মৌলিক তথ্য (যেমন নাম) প্রদান করতে হবে। যখন আপনি অবজেক্ট তৈরি করতে কুবারনেটিস API ব্যবহার করেন (এটা সরাসরি বা `kubectl` এর মাধ্যমে), তখন ঐ API অনুরোধটি এই তথ্যকে একটি JSON রিকোয়েস্ট বডি হিসেবে অন্তর্ভুক্ত করতে হবে। -সাধারণত, আপনি ম্যানিফেস্ট নামে ফাইলে তথ্য সরবরাহ করেন (আপনি যদি চান তবে আপনি JSON ফরম্যাট -ব্যবহার করতে পারেন এই ম্যানিফেস্টগুলির জন্য নিয়মিত হতে হবে)। `kubectl` এর মতো টুলগুলি -HTTP অনুরোধের সময় ম্যানিফেস্ট থেকে তথ্যকে JSON বা অন্য যে কোনও সমর্থিত সিরিয়ালাইজেশন ফরম্যাটে রূপান্তর করে। +সাধারণত, আপনি একটি manifest নামে পরিচিত ফাইলে kubectl কে তথ্য প্রদান করেন। নিয়ম অনুসারে, ম্যানিফেস্ট হল YAML (আপনি JSON +ফরম্যাটও ব্যবহার করতে পারেন)। HTTP-এর মাধ্যমে API অনুরোধ করার সময় টুল যেমন kubectl একটি ম্যানিফেস্ট থেকে তথ্যকে JSON বা অন্য +সমর্থিত সিরিয়ালাইজেশন ফরম্যাটে রূপান্তর করে। এখানে একটি উদাহরণ ম্যানিফেস্ট দেওয়া হল একটি কুবারনেটিস ডিপ্লয়মেন্টের জন্য প্রয়োজনীয় ক্ষেত্রগুলি এবং অবজেক্ট স্পেকের জন্যের একটি নমুনা: @@ -83,7 +83,7 @@ HTTP অনুরোধের সময় ম্যানিফেস্ট থ {{% code_sample file="application/deployment.yaml" %}} একটি উপরের মতো ম্যানিফেস্ট ফাইল ব্যবহার করে একটি ডিপ্লয়মেন্ট তৈরি করার একটি উপায় হল -[`kubectl apply`](/docs/reference/generated/kubectl/kubectl-commands#apply) কমান্ড ব্যবহার +[`kubectl apply`](/bn/docs/reference/generated/kubectl/kubectl-commands#apply) কমান্ড ব্যবহার করা, `kubectl` এর কমান্ড-লাইন ইন্টারফেসে `yaml` ফাইলটি আর্গুমেন্ট হিসেবে পাঠানো। একটি উদাহরণ: ```shell @@ -106,45 +106,45 @@ deployment.apps/nginx-deployment created * `metadata` - অবজেক্ট যে সাহায্য করে অনন্যভাবে সনাক্ত করা যায়, যেমন `name` স্ট্রিং, `UID`, এবং ঐচ্ছিক `namespace` * `spec` - অবজেক্টের জন্য আপনি কি অবস্থা চান -অবজেক্ট স্পেকের নির্দিষ্ট বিন্যাস প্রতিটি Kubernetes অবজেক্টের জন্য বিভিন্ন এবং এই বিশিষ্ট -ফিল্ডগুলি সহজ। [Kubernetes API রেফারেন্স](/docs/reference/kubernetes-api/) -এই অবজেক্টের সমস্ত অবজেক্টের জন্য স্পেক ফরম্যাট খুঁজে পাওয়ার সাহায্য করতে পারে। +অবজেক্ট spec সুনির্দিষ্ট ফরম্যাট প্রতিটি কুবারনেটিস অবজেক্টের জন্য আলাদা, এবং +সেই বস্তুর জন্য নির্দিষ্ট নেস্টেড ক্ষেত্র রয়েছে। [Kubernetes API রেফারেন্স](/bn/docs/reference/kubernetes-api/) +ব্যবহার করে আপনি যে সমস্ত অবজেক্ট তৈরি করতে পারেন তার জন্য নির্দিষ্ট ফরম্যাট খুঁজে পেতে সাহায্য করতে পারে। -উদাহরণস্বরূপ, দেখুন [`spec` ফিল্ড](/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec) +উদাহরণস্বরূপ, দেখুন [`spec` ফিল্ড](/bn/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec) Pod API রেফারেন্স এর জন্য। -প্রতিটি Pod এর জন্য, `.spec` ফিল্ড পড় এবং এর অবস্থার জন্য নির্দিষ্ট পড়ে বসে (পরিমাণ এবং -পড়ের মধ্যে কন্টেনার ইমেজের নাম সহ)। +প্রতিটি Pod এর জন্য, `.spec` ক্ষেত্রটি পড এবং তার কাঙ্ক্ষিত অবস্থা (যেমন সেই পডের মধ্যে প্রতিটি কন্টেইনারের জন্য কন্টেইনার ইমেজের নাম) +নির্দিষ্ট করে৷ আরও একটি অবজেক্ট স্পেসিফিকেশনের উদাহরণ হল [`spec` ফিল্ড](/docs/reference/kubernetes-api/workload-resources/stateful-set-v1/#StatefulSetSpec) StatefulSet API এর জন্য। StatefulSet এর জন্য, `.spec` ফিল্ড নির্দিষ্ট করে এবং সেট করে এর অবস্থা। -StatefulSet এর `.spec` এর মধ্যে একটি [template](/docs/concepts/workloads/pods/#pod-templates) -পড় অবজেক্ট স্থাপনাকারী পড় প্রদান করে যা -StatefulSet স্পেসিফিকেশন পূরণ করার জন্য অনুমতি দেয়। +StatefulSet এর `.spec` এর মধ্যে একটি [টেমপ্লেট](/bn/docs/concepts/workloads/pods/#pod-templates) +পড অবজেক্টের জন্য । সেই টেমপ্লেটটি Pods বর্ণনা করে যা +StatefulSet কন্ট্রোলার স্টেটফুলসেট স্পেসিফিকেশন সন্তুষ্ট করার জন্য তৈরি করবে। অন্যান্য প্রকারের অবজেক্ট গুলির জন্য বিভিন্ন `.status` থাকতে পারে; আবার, API রেফারেন্স পৃষ্ঠাগুলি এই `.status` ফিল্ডের গঠন এবং এর প্রত্যেক বিভিন্ন প্রকারের অবজেক্টের জন্য তার বিষয়বস্তু বিবরণ করে। {{< note >}} -[YAML কনফিগারেশনের সেরা প্রথাগুলি](/docs/concepts/configuration/overview/) এক্ষেত্রে অতিরিক্ত -তথ্য দেওয়া আছে। +YAML কনফিগারেশন ফাইল লেখার অতিরিক্ত তথ্যের জন্য +[কনফিগারেশন সেরা অনুশীলন](/bn/docs/concepts/configuration/overview/) দেখুন। {{< /note >}} ## সার্ভার সাইড ফিল্ড ভেরিফিকেশন -Kubernetes v1.25 থেকে শুরু করে, API সার্ভার সার্ভার সাইড -[field validation](/docs/reference/using-api/api-concepts/#field-validation) +কুবারনেটিস v1.25 থেকে শুরু করে, API সার্ভার সার্ভার সাইড +[field validation](/bn/docs/reference/using-api/api-concepts/#field-validation) যা অব্যক্ত বা পুনরায় ফিল্ড অনুমান করে একটি অবজেক্টে। এটি সমস্ত কার্যকারিতা প্রদান করে `kubectl --validate` এর সার্ভার সাইড এ কর্মক্ষমতা। `kubectl` টুলটি ব্যবহার করে `--validate` ফ্ল্যাগ ব্যবহার করে ফিল্ড ভেরিফিকেশনের স্তর সেট করে। এটি গ্রহণ করে -মান `ignore`, `warn`, এবং `strict` এবং এটি `true` (যুক্ত অর্থ `strict`) -এবং `false` (যুক্ত অর্থ `ignore`) মান গ্রহণ করে। `kubectl` এর ডিফল্ট ভেরিফিকেশন সেটিং হল `--validate=true`। +মান `ignore`, `warn`, এবং `strict` এবং এটি `true` (`strict` এর সমান) +এবং `false` ( `ignore` এর সমান) মান গ্রহণ করে। `kubectl` এর ডিফল্ট ভেরিফিকেশন সেটিং হল `--validate=true`। `Strict` -: সখ্য ফিল্ড ভেরিফিকেশন, ভেরিফিকেশন ব্যর্থ হওয়ায় ত্রুটি করে +: Strict ফিল্ড ভেরিফিকেশন, ভেরিফিকেশন ব্যর্থ হওয়ায় errors দেখায় `Warn` -: ফিল্ড ভেরিফিকেশন করা হয়, কিন্তু ত্রুটিগুলি একটি বিরোধ হিসেবে উল্লেখ করা হয় অবশ্য নয় অনুরোধ ব্যর্থ হতে +: ফিল্ড ভেরিফিকেশন করা হয়, কিন্তু errors গুলি অনুরোধ ব্যর্থ হওয়ার পরিবর্তে সতর্কতা হিসাবে প্রকাশ করা হয় `Ignore` : কোনো সার্ভার সাইড ফিল্ড ভেরিফিকেশন করা হয় না @@ -158,18 +158,18 @@ Kubernetes v1.25 থেকে শুরু করে, API সার্ভার যদি আপনি নতুন কুবারনেটিসে এসেছেন, তাহলে নিম্নলিখিত বিষয়গুলি সম্পর্কে আরো পড়ুন: -* [Pods](/docs/concepts/workloads/pods/) যা হলে সবচেয়ে গুরুত্বপূর্ণ মৌলিক কুবারনেটিস অবজেক্ট। -* [Deployment](/docs/concepts/workloads/controllers/deployment/) অবজেক্টগুলি। -* [Controllers](/docs/concepts/architecture/controller/) কুবারনেটিসে। -* [kubectl](/docs/reference/kubectl/) এবং [kubectl কমান্ড](/docs/reference/generated/kubectl/kubectl-commands)। +* [Pods](/bn/docs/concepts/workloads/pods/) যা হলে সবচেয়ে গুরুত্বপূর্ণ মৌলিক কুবারনেটিস অবজেক্ট। +* [Deployment](/bn/docs/concepts/workloads/controllers/deployment/) অবজেক্টগুলি। +* [Controllers](/bn/docs/concepts/architecture/controller/) কুবারনেটিসে। +* [kubectl](/bn/docs/reference/kubectl/) এবং [kubectl কমান্ড](/bn/docs/reference/generated/kubectl/kubectl-commands)। -[Kubernetes Object Management](/docs/concepts/overview/working-with-objects/object-management/) +[কুবারনেটিস অবজেক্ট ম্যানেজমেন্ট](/bn/docs/concepts/overview/working-with-objects/object-management/) `kubectl` ব্যবহার করে অবজেক্ট পরিচালনা করার উপায়গুলি বিস্তারিত ভাবে বর্ণনা করে। -আপনার কাছে এটি নেই তাহলে [kubectl ইনস্টল করুন](/docs/tasks/tools/#kubectl) যদি আগে থেকে না থাকে। +আপনার কাছে যদি আগে থেকে না থাকে তাহলে [kubectl ইনস্টল করুন](/bn/docs/tasks/tools/#kubectl)। কুবারনেটিস API সাধারণভাবে সম্পর্কে জানতে, পড়ুন: -* [Kubernetes API overview](/docs/reference/using-api/) +* [Kubernetes API overview](/bn/docs/reference/using-api/) কুবারনেটিসে অবজেক্টগুলির বিস্তারিত জানতে, এই বিভাগে অন্যান্য পৃষ্ঠাগুলি পড়ুন: - \ No newline at end of file + \ No newline at end of file From c5a8a0fb6ce9faf12cc8ddd78f8c4d3bc9e62c14 Mon Sep 17 00:00:00 2001 From: MD TANVIR AHMED <38840252+cloudwithtanvir@users.noreply.github.com> Date: Sat, 16 Mar 2024 17:14:18 +0000 Subject: [PATCH 0202/1086] Updated localization of k8s working with object file --- .../bn/docs/concepts/overview/working-with-objects/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/overview/working-with-objects/_index.md b/content/bn/docs/concepts/overview/working-with-objects/_index.md index 89da6c3fc0..2f3f6bdb8c 100644 --- a/content/bn/docs/concepts/overview/working-with-objects/_index.md +++ b/content/bn/docs/concepts/overview/working-with-objects/_index.md @@ -115,7 +115,7 @@ Pod API রেফারেন্স এর জন্য। প্রতিটি Pod এর জন্য, `.spec` ক্ষেত্রটি পড এবং তার কাঙ্ক্ষিত অবস্থা (যেমন সেই পডের মধ্যে প্রতিটি কন্টেইনারের জন্য কন্টেইনার ইমেজের নাম) নির্দিষ্ট করে৷ আরও একটি অবজেক্ট স্পেসিফিকেশনের উদাহরণ হল -[`spec` ফিল্ড](/docs/reference/kubernetes-api/workload-resources/stateful-set-v1/#StatefulSetSpec) +[`spec` ফিল্ড](/bn/docs/reference/kubernetes-api/workload-resources/stateful-set-v1/#StatefulSetSpec) StatefulSet API এর জন্য। StatefulSet এর জন্য, `.spec` ফিল্ড নির্দিষ্ট করে এবং সেট করে এর অবস্থা। StatefulSet এর `.spec` এর মধ্যে একটি [টেমপ্লেট](/bn/docs/concepts/workloads/pods/#pod-templates) From 3e6270ccda00861645a9afc04db7280a72eacd46 Mon Sep 17 00:00:00 2001 From: Pronay Date: Sun, 17 Mar 2024 02:15:32 +0600 Subject: [PATCH 0203/1086] Create _index.md --- content/bn/docs/concepts/security/_index.md | 129 ++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 content/bn/docs/concepts/security/_index.md diff --git a/content/bn/docs/concepts/security/_index.md b/content/bn/docs/concepts/security/_index.md new file mode 100644 index 0000000000..a150a6358d --- /dev/null +++ b/content/bn/docs/concepts/security/_index.md @@ -0,0 +1,129 @@ +--- +title: "নিরাপত্তা" +weight: 85 +description: > + ক্লাউড-নেটিভ ওয়ার্কলোডকে নিরাপত্তা রক্ষা করার প্রস্তুতির জন্য ধারণাগুলি। +simple_list: true +--- + +এই কুবারনেটিসের নথিপত্রের এই অংশের উদ্দেশ্য আপনাকে ক্লাউড-নেটিভ প্রযুক্তিতে +নিরাপত্তামুলকভাবে ওয়ার্কলোডগুলি পরিচালনা শেখানোর সাহায্য করা এবং একটি কুবারনেটিসের ক্লাস্টার +নিরাপত্তামুলকভাবে রাখার গুরুত্বপূর্ণ দিক সম্পর্কে জানানো। + +কুবারনেটিসের ক্লাউড-নেটিভ বিশ্বাসের উপর ভিত্তি করে এবং ক্লাউড-নেটিভ তথ্য নিরাপত্তা সম্পর্কে ভাল অনুশীলনের +জন্য {{< glossary_tooltip text="CNCF" term_id="cncf" >}} থেকে +পরামর্শ প্রদান করে। + +আপনার ক্লাস্টার এবং অ্যাপ্লিকেশনগুলিকে কীভাবে সুরক্ষিত করবেন +সে সম্পর্কে বিস্তৃত প্রেক্ষাপটের জন্য +[ক্লাউড নেটিভ নিরাপত্তা এবং কুবারনেটিস](/docs/concepts/security/cloud-native-security/) পড়ুন। + +## কুবারনেটিসের নিরাপত্তা ব্যবস্থা {#security-mechanisms} + +কুবারনেটিসের অনেকগুলি API এবং নিরাপত্তা নিয়ন্ত্রণ সহ অনেকগুলি নিরাপত্তা নিয়ন্ত্রণ অন্তর্ভুক্ত +করে, এবং তথ্য নিরাপত্তা পরিচালনার কিভাবে অংশ হতে পারে তা সম্পর্কে [নীতি](#policies) নির্ধারণের উপায় রয়েছে। + +### কন্ট্রোল প্লেন সুরক্ষা + +কোন কুবারনেটিসের ক্লাস্টারের জন্য একটি প্রধান নিরাপত্তা ব্যবস্থা হ'ল +[কুবারনেটিসের API অ্যাক্সেসের নির্দেশিকা](/docs/concepts/security/controlling-access) প্রতিষ্ঠা করা। + +কুবারনেটিসের আপনার কন্ট্রোল প্লেনের মধ্যে এবং এর গ্রাহকদের মধ্যে তথ্য এনক্রিপশন প্রদানের জন্য +TLS কনফিগার এবং ব্যবহার করার প্রত্যাশা করে। +[কুবারনেটিসের কন্ট্রোল প্লেনে তথ্য এনক্রিপশন ইন ট্রানজিট](/docs/tasks/tls/managing-tls-in-a-cluster/) +এবং কন্ট্রোল প্লেনের মধ্যে ডেটা জন্য [অবশিষ্ট এনক্রিপশন](/docs/tasks/administer-cluster/encrypt-data/) +প্রয়োজনীয়; এটা আপনার নিজের ওয়ার্কলোডের ডেটা জন্য অবশিষ্ট এনক্রিপশন ব্যবহারের থেকে আলাদা করা, যা +আপনার জন্য ভালো একটি ধারণা হতে পারে। + +### গোপনীয়তা + +[গোপনীয়](/docs/concepts/configuration/secret/) API গোপনীয়তা প্রয়োজন করে কনফিগারেশন মান সরবরাহ +করার জন্য মৌলিক সুরক্ষা প্রদান করে। + +### ওয়ার্কলোড সুরক্ষা + +পড এবং তাদের কন্টেনারগুলি যথাযথভাবে আলাদা করা নিশ্চিত করতে +[পড নিরাপত্তা মান](/docs/concepts/security/pod-security-standards/) বাধ্যতামূলক করুন। +আপনি প্রয়োজন হলে [ব্যবহারকারী কাস্টম আইসোলেশন নির্ধারণ করার জন্য](/docs/concepts/containers/runtime-class) +[রানটাইমক্লাসগুলি](/docs/concepts/containers/runtime-class) ব্যবহার করতে পারেন। + +[নেটওয়ার্ক নীতি](/docs/concepts/services-networking/network-policies/) আপনাকে +পডগুলির মধ্যে, অথবা আপনার ক্লাস্টারের বাইরের নেটওয়ার্ক মধ্যে নেটওয়ার্ক ট্রাফিক নিয়ন্ত্রণ করতে দেয়। + +আপনি এই ব্যাপক বিজ্ঞান থেকে নিরাপত্তা নিয়ন্ত্রণ প্রয়োগ করতে পারেন যেটি পডগুলি, তাদের কন্টেনারগুলি, +এবং তাদের মধ্যে চালিত ইমেজের সম্পর্কে অবাধ্য বা বিচারগত নিরাপত্তা নিয়ন্ত্রণ পরিচালনা করার দিকে প্রয়োজন হতে পারে। + +### অডিটিং + +কুবারনেটিস [অডিটিং লগিং](/docs/tasks/debug/debug-cluster/audit/) একটি নিরাপত্তা-সংশ্লিষ্ট, +সময়মাপনী সেট অফ রেকর্ড সরবরাহ করে যা ক্লাস্টারের ক্রিয়াকলাপের অনুক্রমিক ডকুমেন্ট করে। ক্লাস্টার +ব্যবহারকারীদের দ্বারা উত্পন্ন ক্রিয়াকলাপ, কুবার্নিটিস API ব্যবহার করা অ্যাপ্লিকেশন এবং নিয়ন্ত্রণ প্লেন নিজস্ব +ক্রিয়াকলাপগুলি অডিট করে। + +## ক্লাউড প্রদায়কের নিরাপত্তা + +{{% thirdparty-content vendor="true" %}} + +আপনি যদি আপনার নিজের হার্ডওয়্যার বা একটি বিভিন্ন ক্লাউড প্রদায়কে একটি কুবারনেটিস ক্লাস্টার চালাচ্ছেন, +নিরাপত্তা সেরা অনুশীলনের জন্য আপনার নথি দেখুন। +এখানে কিছু জনপ্রিয় ক্লাউড প্রদায়কদের নিরাপত্তা নথিগুলির লিঙ্ক: + +{{< table caption="ক্লাউড প্রদায়কের নিরাপত্তা" >}} + +IaaS প্রদায়ক | লিঙ্ক | +-------------------- | ------------ | +আলিবাবা ক্লাউড | https://www.alibabacloud.com/trust-center | +আমাজন ওয়েব সার্ভিস | https://aws.amazon.com/security | +গুগল ক্লাউড প্ল্যাটফর্ম | https://cloud.google.com/security | +হুয়াওয়ে ক্লাউড | https://www.huaweicloud.com/intl/en-us/securecenter/overallsafety | +আইবিএম ক্লাউড | https://www.ibm.com/cloud/security | +মাইক্রোসফট আজওর | https://docs.microsoft.com/en-us/azure/security/azure-security | +অরাকেল ক্লাউড ইন্ফ্রাস্ট্রাকচার | https://www.oracle.com/security | +VMware vSphere | https://www.vmware.com/security/hardening-guides | + +{{< /table >}} + +## নীতি + +আপনি কুবারনেটিস-নেটিভ মেকানিজম ব্যবহার করে নিরাপত্তা নীতি নির্ধারণ করতে পারেন, +যেমন [NetworkPolicy](/docs/concepts/services-networking/network-policies/) +(নেটওয়ার্ক প্যাকেট ফিল্টারিং উপর ঘোষণামূলক নিয়ন্ত্রণ) বা +[ValidatingAdmisisonPolicy](/docs/reference/access-authn-authz/validating-admission-policy/) (কে কি +পরিবর্তন করতে পারে তা সম্পর্কে উঘোষণামূলক সীমাবদ্ধতা). + +তবে, আপনি কুবারনেটিস পরিবেশের চারপাশে নীতি কার্যান্বয়নে নির্ভর করতে পারেন। কুবার্নিটিস এক্সটেনশন মেকানিজম সরবরাহ করে +এই পরিবেশ প্রকল্পগুলির উপর তাদের নিজস্ব নীতি নিয়ন্ত্রণ সাধারণের জন্য +উন্মোচনের সুযোগ প্রদান করতে। এগুলি উদাহরণ হিসেবে উল্লেখ করা যেতে পারে: +সোর্স কোড পর্যালোচনা, কন্টেনার ইমেজ অনুমোদন, এপিআই অ্যাক্সেস নিয়ন্ত্রণ, +নেটওয়ার্কিং, এবং অন্যান্য। + +নীতি মেকানিজম এবং কুবারনেটিসের সম্পর্কে আরও তথ্য জানতে, +[নীতি](/docs/concepts/policy/) পড়ুন। + +## {{% heading "whatsnext" %}} + +সম্পর্কিত কুবারনেটিস নিরাপত্তা বিষয়গুলি জানুন: + +* [আপনার ক্লাস্টার নিরাপত্তা সুরক্ষা করা](/docs/tasks/administer-cluster/securing-a-cluster/) +* [পরিচিত দুর্বলতা](/docs/reference/issues-security/official-cve-feed/) + কুবারনেটিসে (এবং আরও তথ্যের লিঙ্ক) +* [ট্রানজিটে ডেটা এনক্রিপশন](/docs/tasks/tls/managing-tls-in-a-cluster/) কন্ট্রোল প্লেনের জন্য +* [অবশিষ্ট ডেটা এনক্রিপশন](/docs/tasks/administer-cluster/encrypt-data/) +* [কুবারনেটিস API অ্যাক্সেস নিয়ন্ত্রণ](/docs/concepts/security/controlling-access) +* [নেটওয়ার্ক নীতি](/docs/concepts/services-networking/network-policies/) +* [কুবার্নিটিসে গোপনীয়তা](/docs/concepts/configuration/secret/) +* [পডগুলির নিরাপত্তা মান](/docs/concepts/security/pod-security-standards/) +* [রানটাইমক্লাস](/docs/concepts/containers/runtime-class) + +প্রসঙ্গ জানুন: + + +* [ক্লাউড নেটিভ নিরাপত্তা এবং কুবারনেটিস](/docs/concepts/security/cloud-native-security/) পড়ুন। + +সার্টিফাইড: + +* [সার্টিফাইড কুবারনেটিস নিরাপত্তা বিশেষজ্ঞ](https://training.linuxfoundation.org/certification/certified-kubernetes-security-specialist/) + সার্টিফিকেশন এবং সর্বাধিক প্রশিক্ষণ কোর্স। + +এই অধ্যায়ে আরো পড়ুন: + From 38ed7dace2b72f20d7b1e785378b78956897d569 Mon Sep 17 00:00:00 2001 From: Pronay Date: Sun, 17 Mar 2024 02:40:06 +0600 Subject: [PATCH 0204/1086] Create _index.html --- content/bn/partners/_index.html | 53 +++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 content/bn/partners/_index.html diff --git a/content/bn/partners/_index.html b/content/bn/partners/_index.html new file mode 100644 index 0000000000..0b9f33ac6f --- /dev/null +++ b/content/bn/partners/_index.html @@ -0,0 +1,53 @@ +--- +title: পার্টনার +bigheader: কুবারনেটিস পার্টনার +abstract: কুবারনেটিস ইকোসিস্টেম বৃদ্ধি করা। +class: gridPage +cid: partners +--- + +
+
কুবারনেটিস পার্টনাররা একটি স্বস্তিকারী, জীবন্ত কোডবেস তৈরি করতে সহায়তা করে যা সমতুল্য প্ল্যাটফর্মের একটি স্পেক্ট্রাম সমর্থন করে।
+
+
+
+
+ কুবারনেটিস সার্টিফাইড সার্ভিস প্রভাইডার +
+
একটি গভীর অভিজ্ঞতা সহ সনাক্ত সেবা প্রদানকারী যারা উদ্যোগপূর্ণভাবে কুবারনেটিস গ্রহণ সাফল্যের জন্য প্রয়োগ করে। +


+ +

আপনি যদি হতে চান + KCSP? +
+
+
+
+
+ সার্টিফাইড কুবারনেটিস ডিস্ট্রিবিউশন, হোস্টেড প্ল্যাটফর্ম, এবং ইনস্টলার +
সফটওয়্যার সামঞ্জস্যতা নিশ্চিত করে যে প্রতিটি বিক্রেতার সংস্করণের কুবারনেটিস প্রয়োজনীয় API সমর্থন করে। +


+ +

আপনি কি হতে চান + কুবারনেটিস সার্টিফাইড? +
+
+
+
+
+ কুবারনেটিস প্রশিক্ষণ পার্টনার +
+
পরীক্ষিত প্রশিক্ষণ প্রদানকারী যাদের ক্লাউড নেটিভ প্রযুক্তি প্রশিক্ষণে গভীর অভিজ্ঞতা রয়েছে। +


+ +

আপনি কি হতে চান + KTP? +
+
+
+ {{< cncf-landscape helpers=true >}} +
+ + From 334f5b30026ad263cbca37a8bc3f51730e3f04fe Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Sun, 17 Mar 2024 04:48:58 +0600 Subject: [PATCH 0205/1086] Create _index.md --- .../concepts/scheduling-eviction/_index.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 content/bn/docs/concepts/scheduling-eviction/_index.md diff --git a/content/bn/docs/concepts/scheduling-eviction/_index.md b/content/bn/docs/concepts/scheduling-eviction/_index.md new file mode 100644 index 0000000000..f3612bc2bf --- /dev/null +++ b/content/bn/docs/concepts/scheduling-eviction/_index.md @@ -0,0 +1,40 @@ +--- +title: "শিডিউলিং, প্রিএম্পশন এবং উচ্ছেদ" +weight: 95 +content_type: concept +description: > + কুবারনেটিসে, শিডিউলিং মানে হল নিশ্চিত করা যে পডগুলি নোডগুলির + সাথে মিলিত হয়েছে কিনা যাতে কিউবলেট তাদের রান করতে পারে। + প্রিএম্পশন হল স্বল্প অগ্রাধিকার পডগুলি বাতিল করার প্রক্রিয়া যাতে উচ্চ + অগ্রাধিকার পডগুলি নোডগুলিতে শিডিউল করতে পারে। উচ্ছেদ হল + রিসোর্স-ক্ষুধার্ত নোডগুলিতে এক বা একাধিক পডগুলি প্রত্যাহার করার প্রক্রিয়া। +no_list: সঠিক +--- + +কুবারনেটিসে, শিডিউলিং মানে হল নিশ্চিত করা যে {{}} +{{}} সাথে মিলিত হয়েছে কিনা যাতে {{}} তাদের +রান করতে পারে। প্রিএম্পশন হল স্বল্প {{}} পডগুলি বাতিল করার প্রক্রিয়া +যাতে উচ্চ অগ্রাধিকার পডগুলি নোডগুলিতে শিডিউল করতে পারে। উচ্ছেদ হল সম্পদ-ক্ষুধার্ত নোডগুলিতে এক বা +একাধিক পডগুলি প্রত্যাহার করার প্রক্রিয়া। + +## শিডিউলিং + +* [কুবারনেটস এর শিডিউলিং](/docs/concepts/scheduling-eviction/kube-scheduler/) +* [নোডগুলিতে পডস বরাদ্দ করা](/docs/concepts/scheduling-eviction/assign-pod-node/) +* [পডস এর ঊর্ধ্বে](/docs/concepts/scheduling-eviction/pod-overhead/) +* [পডস এর টপোলজি ছড়িয়ে যাওয়ার সীমাবদ্ধতা](/docs/concepts/scheduling-eviction/topology-spread-constraints/) +* [টেইন্টস এবং টলারেশনস](/docs/concepts/scheduling-eviction/taint-and-toleration/) +* [শিডিউলিং ফ্রেমওয়ার্ক](/docs/concepts/scheduling-eviction/scheduling-framework) +* [গতিশীল রিসোর্স বরাদ্দ করা](/docs/concepts/scheduling-eviction/dynamic-resource-allocation) +* [শিডিউলিং এর টিউনিং করার কর্মক্ষমতা](/docs/concepts/scheduling-eviction/scheduler-perf-tuning/) +* [সম্প্রসারিত রিসোর্স এর জন্য রিসোর্স বিন প্যাকিং](/docs/concepts/scheduling-eviction/resource-bin-packing/) +* [পড শিডিউলিং এর সাধনযোগ্যতা](/docs/concepts/scheduling-eviction/pod-scheduling-readiness/) +* [ডিশেডিউলার](https://github.com/kubernetes-sigs/descheduler#descheduler-for-kubernetes) + +## পড ভাঙ্গন + +{{}} + +* [পড অগ্রাধিকার এবং প্রিম্পশন](/docs/concepts/scheduling-eviction/pod-priority-preemption/) +* [নোড-চাপের জন্য উত্সাদন](/docs/concepts/scheduling-eviction/node-pressure-eviction/) +* [API-প্রবর্তিত উচ্ছেদ](/docs/concepts/scheduling-eviction/api-eviction/) From 656ee82a412c7b300c70a0ab13938df3ac64a12f Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Sun, 17 Mar 2024 12:46:59 +0600 Subject: [PATCH 0206/1086] Update _index.md --- .../docs/concepts/scheduling-eviction/_index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/content/bn/docs/concepts/scheduling-eviction/_index.md b/content/bn/docs/concepts/scheduling-eviction/_index.md index f3612bc2bf..cff816445d 100644 --- a/content/bn/docs/concepts/scheduling-eviction/_index.md +++ b/content/bn/docs/concepts/scheduling-eviction/_index.md @@ -1,27 +1,27 @@ --- -title: "শিডিউলিং, প্রিএম্পশন এবং উচ্ছেদ" +title: "শিডিউলিং, প্রিএম্পশন এবং ইভিকশন" weight: 95 content_type: concept description: > কুবারনেটিসে, শিডিউলিং মানে হল নিশ্চিত করা যে পডগুলি নোডগুলির সাথে মিলিত হয়েছে কিনা যাতে কিউবলেট তাদের রান করতে পারে। প্রিএম্পশন হল স্বল্প অগ্রাধিকার পডগুলি বাতিল করার প্রক্রিয়া যাতে উচ্চ - অগ্রাধিকার পডগুলি নোডগুলিতে শিডিউল করতে পারে। উচ্ছেদ হল + অগ্রাধিকার পডগুলি নোডগুলিতে শিডিউল করতে পারে। ইভিকশন হল রিসোর্স-ক্ষুধার্ত নোডগুলিতে এক বা একাধিক পডগুলি প্রত্যাহার করার প্রক্রিয়া। -no_list: সঠিক +no_list: True --- কুবারনেটিসে, শিডিউলিং মানে হল নিশ্চিত করা যে {{}} {{}} সাথে মিলিত হয়েছে কিনা যাতে {{}} তাদের রান করতে পারে। প্রিএম্পশন হল স্বল্প {{}} পডগুলি বাতিল করার প্রক্রিয়া -যাতে উচ্চ অগ্রাধিকার পডগুলি নোডগুলিতে শিডিউল করতে পারে। উচ্ছেদ হল সম্পদ-ক্ষুধার্ত নোডগুলিতে এক বা +যাতে উচ্চ অগ্রাধিকার পডগুলি নোডগুলিতে শিডিউল করতে পারে। ইভিকশন হল সম্পদ-ক্ষুধার্ত নোডগুলিতে এক বা একাধিক পডগুলি প্রত্যাহার করার প্রক্রিয়া। ## শিডিউলিং * [কুবারনেটস এর শিডিউলিং](/docs/concepts/scheduling-eviction/kube-scheduler/) * [নোডগুলিতে পডস বরাদ্দ করা](/docs/concepts/scheduling-eviction/assign-pod-node/) -* [পডস এর ঊর্ধ্বে](/docs/concepts/scheduling-eviction/pod-overhead/) +* [পডসের অতিরিক্ত ব্যয়](/docs/concepts/scheduling-eviction/pod-overhead/) * [পডস এর টপোলজি ছড়িয়ে যাওয়ার সীমাবদ্ধতা](/docs/concepts/scheduling-eviction/topology-spread-constraints/) * [টেইন্টস এবং টলারেশনস](/docs/concepts/scheduling-eviction/taint-and-toleration/) * [শিডিউলিং ফ্রেমওয়ার্ক](/docs/concepts/scheduling-eviction/scheduling-framework) @@ -31,10 +31,10 @@ no_list: সঠিক * [পড শিডিউলিং এর সাধনযোগ্যতা](/docs/concepts/scheduling-eviction/pod-scheduling-readiness/) * [ডিশেডিউলার](https://github.com/kubernetes-sigs/descheduler#descheduler-for-kubernetes) -## পড ভাঙ্গন +## পডস এর বিঘ্নিত হওয়া {{}} * [পড অগ্রাধিকার এবং প্রিম্পশন](/docs/concepts/scheduling-eviction/pod-priority-preemption/) -* [নোড-চাপের জন্য উত্সাদন](/docs/concepts/scheduling-eviction/node-pressure-eviction/) -* [API-প্রবর্তিত উচ্ছেদ](/docs/concepts/scheduling-eviction/api-eviction/) +* [নোড-চাপের জন্য ইভিকশন](/docs/concepts/scheduling-eviction/node-pressure-eviction/) +* [API-প্রবর্তিত ইভিকশন](/docs/concepts/scheduling-eviction/api-eviction/) From dbcc5128dfe70f45013fca452a31f1acf97ad567 Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Sun, 17 Mar 2024 12:49:28 +0600 Subject: [PATCH 0207/1086] Update _index.md --- content/bn/docs/concepts/scheduling-eviction/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/scheduling-eviction/_index.md b/content/bn/docs/concepts/scheduling-eviction/_index.md index cff816445d..0c70411365 100644 --- a/content/bn/docs/concepts/scheduling-eviction/_index.md +++ b/content/bn/docs/concepts/scheduling-eviction/_index.md @@ -31,7 +31,7 @@ no_list: True * [পড শিডিউলিং এর সাধনযোগ্যতা](/docs/concepts/scheduling-eviction/pod-scheduling-readiness/) * [ডিশেডিউলার](https://github.com/kubernetes-sigs/descheduler#descheduler-for-kubernetes) -## পডস এর বিঘ্নিত হওয়া +## পডস এর ভাঙ্গন {{}} From c63cef54526f1b4fb91a2c02b621cf189ef1432c Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Sun, 17 Mar 2024 14:37:46 +0600 Subject: [PATCH 0208/1086] Update _index.md --- content/bn/docs/concepts/scheduling-eviction/_index.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/content/bn/docs/concepts/scheduling-eviction/_index.md b/content/bn/docs/concepts/scheduling-eviction/_index.md index 0c70411365..badd011f28 100644 --- a/content/bn/docs/concepts/scheduling-eviction/_index.md +++ b/content/bn/docs/concepts/scheduling-eviction/_index.md @@ -12,10 +12,11 @@ no_list: True --- কুবারনেটিসে, শিডিউলিং মানে হল নিশ্চিত করা যে {{}} -{{}} সাথে মিলিত হয়েছে কিনা যাতে {{}} তাদের -রান করতে পারে। প্রিএম্পশন হল স্বল্প {{}} পডগুলি বাতিল করার প্রক্রিয়া -যাতে উচ্চ অগ্রাধিকার পডগুলি নোডগুলিতে শিডিউল করতে পারে। ইভিকশন হল সম্পদ-ক্ষুধার্ত নোডগুলিতে এক বা -একাধিক পডগুলি প্রত্যাহার করার প্রক্রিয়া। +{{}} সাথে মিলিত হয়েছে কিনা যাতে +{{}} তাদের রান করতে পারে। প্রিএম্পশন হল স্বল্প +{{}} পডগুলি বাতিল করার প্রক্রিয়া যাতে উচ্চ +অগ্রাধিকার পডগুলি নোডগুলিতে শিডিউল করতে পারে। ইভিকশন হল রিসোর্স-ক্ষুধার্ত নোডগুলিতে এক বা একাধিক +পডগুলি প্রত্যাহার করার প্রক্রিয়া। ## শিডিউলিং From 7beb610af8589743f6fb46d07ef9ef2d5095035e Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Sun, 17 Mar 2024 19:51:41 +0600 Subject: [PATCH 0209/1086] Create _index.md --- content/bn/blog/_index.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 content/bn/blog/_index.md diff --git a/content/bn/blog/_index.md b/content/bn/blog/_index.md new file mode 100644 index 0000000000..d0e8c76469 --- /dev/null +++ b/content/bn/blog/_index.md @@ -0,0 +1,16 @@ +--- +title: কুবারনেটস ব্লগ +linkTitle: ব্লগ +menu: + main: + title: "ব্লগ" + weight: 40 + post: > +

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

+--- +{{< comment >}} + +ব্লগে কন্ট্রিবিউটিং সম্পর্কিত তথ্যের জন্য, দেখুন +https://kubernetes.io/docs/contribute/new-content/blogs-case-studies/#write-a-blog-post + +{{< /comment >}} From 404b9d7609f3e24b8def8a04936d3bd461d38b70 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:19:32 +0600 Subject: [PATCH 0210/1086] Add files via upload --- content/bn/docs/concepts/windows/_index.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/bn/docs/concepts/windows/_index.md diff --git a/content/bn/docs/concepts/windows/_index.md b/content/bn/docs/concepts/windows/_index.md new file mode 100644 index 0000000000..e69de29bb2 From 048848815f8696f17870dbde07f4f5afa7c6020f Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Sun, 17 Mar 2024 23:55:12 +0600 Subject: [PATCH 0211/1086] Update content/bn/blog/_index.md Co-authored-by: Tim Bannister --- content/bn/blog/_index.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/content/bn/blog/_index.md b/content/bn/blog/_index.md index d0e8c76469..e2da880cea 100644 --- a/content/bn/blog/_index.md +++ b/content/bn/blog/_index.md @@ -8,9 +8,3 @@ menu: post: >

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

--- -{{< comment >}} - -ব্লগে কন্ট্রিবিউটিং সম্পর্কিত তথ্যের জন্য, দেখুন -https://kubernetes.io/docs/contribute/new-content/blogs-case-studies/#write-a-blog-post - -{{< /comment >}} From f7bbbc37d507f10bf9175d8cf99af92bce579e3f Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 18 Mar 2024 00:02:01 +0600 Subject: [PATCH 0212/1086] Update _index.md --- content/bn/docs/concepts/windows/_index.md | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/content/bn/docs/concepts/windows/_index.md b/content/bn/docs/concepts/windows/_index.md index e69de29bb2..fe9bd17f9e 100644 --- a/content/bn/docs/concepts/windows/_index.md +++ b/content/bn/docs/concepts/windows/_index.md @@ -0,0 +1,33 @@ +--- +title: "কুবারনেটিসে উইন্ডোজ" +simple_list: true +weight: 200 # late in list +description: >- + কুবারনেটিস নোড সমর্থন করে যা মাইক্রোসফ্ট উইন্ডোজ চালায়। +--- + +কুবারনেটিস ওয়ার্কার {{< glossary_tooltip text="নোড" term_id="node" >}} লিনাক্স বা মাইক্রোসফ্ট +উইন্ডোজ চালাতে সহায়তা করে। + +{{% thirdparty-content single="true" %}} + +CNCF এবং এর মূল লিনাক্স ফাউন্ডেশন সামঞ্জস্যের প্রতি বিক্রেতা-নিরপেক্ষ +পদ্ধতি গ্রহণ করে। আপনার [উইন্ডোজ সার্ভার](https://www.microsoft.com/en-us/windows-server) এ একটি কুবারনেটিস ক্লাস্টারে +একটি কর্মী নোড হিসাবে যোগদান করা সম্ভব। + +আপনি [উইন্ডোজে kubectl ইনস্টল এবং সেট আপ ](/bn/docs/tasks/tools/install-kubectl-windows/) করতে পারেন +আপনার ক্লাস্টারের মধ্যে যে কোন অপারেটিং সিস্টেম ব্যবহার করেন না কেন। + +আপনি যদি উইন্ডোজে নোড ব্যবহার করেন তবে আপনি পড়তে পারেন: + +* [উইন্ডোজে নেটওয়ার্কিং](/bn/docs/concepts/services-networking/windows-networking/) +* [কুবারনেটসে উইন্ডোজ স্টোরেজ](/bn/docs/concepts/storage/windows-storage/) +* [উইন্ডোজ নোডের জন্য রিসোর্স ব্যবস্থাপনা](/bn/docs/concepts/configuration/windows-resource-management/) +* [উইন্ডোজ পড এবং কন্টেইনারগুলির জন্য RunAsUserName কনফিগার করুন](/bn/docs/tasks/configure-pod-container/configure-runasusername/) +* [একটি উইন্ডোজ হোস্টপ্রসেস(HostProcess) পড তৈরি করুন](/bn/docs/tasks/configure-pod-container/create-hostprocess-pod/) +* [উইন্ডোজ পড এবং কন্টেইনারগুলির জন্য গ্রুপ পরিচালিত পরিষেবা অ্যাকাউন্টগুলি কনফিগার করুন](/bn/docs/tasks/configure-pod-container/configure-gmsa/) +* [উইন্ডোজ নোডের জন্য নিরাপত্তা](/bn/docs/concepts/security/windows-security/) +* [উইন্ডোজ ডিবাগিং টিপস](/bn/docs/tasks/debug/debug-cluster/windows/) +* [কুবারনেটিসে উইন্ডোজ কন্টেইনার নির্ধারণের জন্য নির্দেশিকা](/bn/docs/concepts/windows/user-guide) + +অথবা, একটি ওভারভিউ জন্য, পড়ুন: From e589e3a408bc3657d7c980460ac4388eac284888 Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Mon, 18 Mar 2024 01:22:40 +0600 Subject: [PATCH 0213/1086] Update turnkey-solutions.md --- .../docs/setup/production-environment/turnkey-solutions.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/setup/production-environment/turnkey-solutions.md b/content/bn/docs/setup/production-environment/turnkey-solutions.md index f727d25045..2e800b8d1f 100644 --- a/content/bn/docs/setup/production-environment/turnkey-solutions.md +++ b/content/bn/docs/setup/production-environment/turnkey-solutions.md @@ -1,11 +1,13 @@ --- title: আগে থেকে প্রস্তুত ক্লাউড সমাধান content_type: ধারণা -weight: 30 +weight: 40 --- -এই পৃষ্ঠাটি কুবারনেটিস প্রত্যয়িত সমাধান প্রদানকারীদের একটি তালিকা প্রদান করে। প্রতিটি প্রদানকারীর পৃষ্ঠা থেকে, আপনি প্রোডাক্সশন এর জন্য প্রস্তুত ক্লাস্টার ইনস্টল এবং সেটআপ করা শিখতে পারেন +এই পৃষ্ঠাটি কুবারনেটিস প্রত্যয়িত সমাধান প্রদানকারীদের একটি তালিকা প্রদান করে। প্রতিটি প্রদানকারীর +পৃষ্ঠা থেকে, আপনি প্রোডাক্সশন এর জন্য প্রস্তুত ক্লাস্টার ইনস্টল এবং সেটআপ করা +শিখতে পারেন From 081730cb20d57fde205aabe76545cd1a2a9406f3 Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Mon, 18 Mar 2024 01:24:05 +0600 Subject: [PATCH 0214/1086] Update turnkey-solutions.md --- .../bn/docs/setup/production-environment/turnkey-solutions.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/content/bn/docs/setup/production-environment/turnkey-solutions.md b/content/bn/docs/setup/production-environment/turnkey-solutions.md index 2e800b8d1f..c552b6b8ab 100644 --- a/content/bn/docs/setup/production-environment/turnkey-solutions.md +++ b/content/bn/docs/setup/production-environment/turnkey-solutions.md @@ -5,9 +5,7 @@ weight: 40 --- -এই পৃষ্ঠাটি কুবারনেটিস প্রত্যয়িত সমাধান প্রদানকারীদের একটি তালিকা প্রদান করে। প্রতিটি প্রদানকারীর -পৃষ্ঠা থেকে, আপনি প্রোডাক্সশন এর জন্য প্রস্তুত ক্লাস্টার ইনস্টল এবং সেটআপ করা -শিখতে পারেন +এই পৃষ্ঠাটি কুবারনেটিস প্রত্যয়িত সমাধান প্রদানকারীদের একটি তালিকা প্রদান করে। প্রতিটি প্রদানকারীর পৃষ্ঠা থেকে, আপনি প্রোডাক্সশন এর জন্য প্রস্তুত ক্লাস্টার ইনস্টল এবং সেটআপ করা শিখতে পারেন From 201f00a670262368224438e25da221d97a90ab71 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 18 Mar 2024 22:38:15 +0600 Subject: [PATCH 0215/1086] Add files via upload --- .../concepts/cluster-administration/_index.md | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 content/bn/docs/concepts/cluster-administration/_index.md diff --git a/content/bn/docs/concepts/cluster-administration/_index.md b/content/bn/docs/concepts/cluster-administration/_index.md new file mode 100644 index 0000000000..d46d1dd677 --- /dev/null +++ b/content/bn/docs/concepts/cluster-administration/_index.md @@ -0,0 +1,51 @@ +--- +title: ক্লাস্টার প্রশাসন +reviewers: +- davidopp +- lavalamp +weight: 100 +content_type: concept +description: > + একটি কুবারনেটিস ক্লাস্টার তৈরি বা পরিচালনার জন্য প্রাসঙ্গিক নিম্ন-স্তরের বিশদ। +no_list: true +card: + name: setup + weight: 60 + anchors: + - anchor: "#securing-a-cluster" + title: একটি ক্লাস্টার সুরক্ষিত +--- + + + +ক্লাস্টার প্রশাসন ওভারভিউ(overview) যে কেউ একটি কুবারনেটিস ক্লাস্টার তৈরি বা পরিচালনা করছেন তাঁর জন্য। +এটি মূল কুবারনেটিসের এর সাথে কিছু পরিচিতি অনুমান করে [ধারণা](/bn/docs/concepts/)। + + + +## একটি ক্লাস্টার পরিকল্পনা + +এ নির্দেশিকাগুলি দেখুন [সেট আপ](/bn/docs/setup/) কুবারনেটিস ক্লাস্টারগুলি কীভাবে পরিকল্পনা, সেট আপ এবং কনফিগার +করতে হয় তার উদাহরণগুলির জন্য৷ এই নিবন্ধে তালিকাভুক্ত সমাধানগুলিকে বলা হয় *distros*। + +{{< note >}} +সমস্ত ডিস্ট্রো(distros) সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয় না। কুবারনেটিসে সাম্প্রতিক সংস্করণের সাথে পরীক্ষা করা +হয়েছে এমন ডিস্ট্রোগুলি বেছে নিন। +{{< /note >}} + +একটি গাইড নির্বাচন করার আগে, এখানে কিছু বিবেচনা আছে: + +- আপনি কি আপনার কম্পিউটারে কুবারনেটিস ব্যবহার করে দেখতে চান, বা আপনি একটি উচ্চ-উপলব্ধতা(availability) তৈরি করতে চান, + মাল্টি-নোড ক্লাস্টার ? আপনার প্রয়োজনের জন্য সবচেয়ে উপযুক্ত ডিস্ট্রো বেছে নিন। +- আপনি কি ব্যবহার করবেন **হোস্ট করা কুবারনেটিস ক্লাস্টার** , যেমন + [গুগল কুবারনেটিস ইঞ্জিন](https://cloud.google.com/kubernetes-engine/), অথবা **আপনার নিজস্ব ক্লাস্টার হোস্ট করছেন** ? +- আপনার ক্লাস্টার কি **অন-প্রিমিসেস**, বা **ক্লাউডে (IaaS)** হবে ? কুবারনেটিস হাইব্রিড ক্লাস্টারগুলিকে + সরাসরি সমর্থন করে না। এর পরিবর্তে, আপনি একাধিক ক্লাস্টার সেট আপ করতে পারেন। +- **যদি আপনি কুবারনেটিস অন-প্রিমিসেস কনফিগার করছেন**, তাহলে বিবেচনা করুন + [নেটওয়ার্কিং মডেল](/bn/docs/concepts/cluster-administration/networking/) সবচেয়ে উপযুক্ত। +- আপনি কি **"বেয়ার মেটাল(bare metal)" হার্ডওয়্যার** অথবা **ভার্চুয়াল মেশিনে (VMs)** চালাবেন? +- আপনি কি **একটি ক্লাস্টার চালাতে চান**, অথবা আপনি কি **কুবারনেটিস প্রজেক্ট কোডের সক্রিয় বিকাশ** করার আশা করছেন? + যদি পরেরটি হয়, একটি সক্রিয়ভাবে-বিকশিত ডিস্ট্রো নির্বাচন করুন। কিছু ডিস্ট্রো শুধুমাত্র বাইনারি রিলিজ ব্যবহার করে,কিন্তু, + পছন্দের একটি বৃহত্তর বৈচিত্র অফার করে। +- একটি ক্লাস্টার চালানোর জন্য প্রয়োজনীয় [উপাদান](/bn/docs/concepts/overview/components/) এর সাথে নিজেকে পরিচিত করুন৷ + From 7a95d0f794c2196826af466de2cef2c45c069283 Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Tue, 19 Mar 2024 00:45:44 +0600 Subject: [PATCH 0216/1086] Update _index.md --- content/bn/docs/setup/_index.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/content/bn/docs/setup/_index.md b/content/bn/docs/setup/_index.md index 713b3b8f1e..ffb368e50b 100644 --- a/content/bn/docs/setup/_index.md +++ b/content/bn/docs/setup/_index.md @@ -2,7 +2,7 @@ title: শুরু করা যাক main_menu: true weight: 20 -content_type: concept +content_type: ধারণা no_list: true card: name: setup @@ -23,6 +23,10 @@ card: আপনি একটি কুবারনেটিস ক্লাস্টার স্থাপন করতে [কুবারনেটিস ডাউনলোড](/releases/download/) করতে পারেন একটি স্থানীয় মেশিনে, ক্লাউডে বা আপনার নিজস্ব ডেটাসেন্টারের জন্য। +বেশ কিছু [কুবারনেটস উপাদান](/docs/concepts/overview/components/) যেমন {{< glossary_tooltip text="kube-apiserver" term_id="kube-apiserver" >}} বা {{< glossary_tooltip text="kube-proxy" term_id="kube-proxy" >}} [কন্টেইনার ইমেজ](/releases/download/#container-images) হিসাবেও ক্লাস্টারের মধ্যে স্থাপন করা যায়। + +যেখানেই সম্ভব কুবারনেটিস উপাদানগুলি কন্টেইনার ইমেজ হিসাবে চালানোর , এবং কুবারনেটিস দ্বারা সেই উপাদানগুলি পরিচালনা করার **সুপারিশ** করা হয়েছে । যে উপাদানগুলি কন্টেইনার রান করে - বিশেষভাবে, কিউবলেট - সেগুলিকে এই বিভাগে অন্তর্ভুক্ত করা যায় না। + আপনি যদি নিজে একটি কুবারনেটিস ক্লাস্টার পরিচালনা করতে না চান, তাহলে আপনি একটি পরিচালিত পরিষেবা বাছাই করতে পারেন, যার মধ্যে রয়েছে [প্রত্যয়িত প্ল্যাটফর্ম](/docs/setup/production-environment/turnkey-solutions/)। এছাড়াও ক্লাউড এবং বিস্তৃত পরিসর জুড়ে অন্যান্য প্রমিত এবং বেয়ার মেটাল পরিবেশ সম্বলিত কাস্টম সমাধান রয়েছে । From 9081cabc2b134f59010935df185ec71e4f7787c0 Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Tue, 19 Mar 2024 00:47:35 +0600 Subject: [PATCH 0217/1086] Update _index.md --- content/bn/docs/setup/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/setup/_index.md b/content/bn/docs/setup/_index.md index ffb368e50b..4a0c3c3891 100644 --- a/content/bn/docs/setup/_index.md +++ b/content/bn/docs/setup/_index.md @@ -25,7 +25,7 @@ card: বেশ কিছু [কুবারনেটস উপাদান](/docs/concepts/overview/components/) যেমন {{< glossary_tooltip text="kube-apiserver" term_id="kube-apiserver" >}} বা {{< glossary_tooltip text="kube-proxy" term_id="kube-proxy" >}} [কন্টেইনার ইমেজ](/releases/download/#container-images) হিসাবেও ক্লাস্টারের মধ্যে স্থাপন করা যায়। -যেখানেই সম্ভব কুবারনেটিস উপাদানগুলি কন্টেইনার ইমেজ হিসাবে চালানোর , এবং কুবারনেটিস দ্বারা সেই উপাদানগুলি পরিচালনা করার **সুপারিশ** করা হয়েছে । যে উপাদানগুলি কন্টেইনার রান করে - বিশেষভাবে, কিউবলেট - সেগুলিকে এই বিভাগে অন্তর্ভুক্ত করা যায় না। +যেখানেই সম্ভব কুবারনেটিস উপাদানগুলি কন্টেইনার ইমেজ হিসাবে রান করা , এবং কুবারনেটিস দ্বারা সেই উপাদানগুলি পরিচালনা করার **সুপারিশ** করা হয়েছে । যে উপাদানগুলি কন্টেইনার রান করে - বিশেষভাবে, কিউবলেট - সেগুলিকে এই বিভাগে অন্তর্ভুক্ত করা যায় না। আপনি যদি নিজে একটি কুবারনেটিস ক্লাস্টার পরিচালনা করতে না চান, তাহলে আপনি একটি পরিচালিত পরিষেবা বাছাই করতে পারেন, যার মধ্যে রয়েছে [প্রত্যয়িত প্ল্যাটফর্ম](/docs/setup/production-environment/turnkey-solutions/)। From ae3baf58b1cae869829827712ef5aed138981101 Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Tue, 19 Mar 2024 18:06:51 +0600 Subject: [PATCH 0218/1086] Create _index.md --- .../docs/setup/production-environment/tools/kubeadm/_index.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/setup/production-environment/tools/kubeadm/_index.md diff --git a/content/bn/docs/setup/production-environment/tools/kubeadm/_index.md b/content/bn/docs/setup/production-environment/tools/kubeadm/_index.md new file mode 100644 index 0000000000..144066fffa --- /dev/null +++ b/content/bn/docs/setup/production-environment/tools/kubeadm/_index.md @@ -0,0 +1,4 @@ +--- +title: "kubeadm সাহায্যে ক্লাস্টার বুটস্ট্রাপ করা হয়" +weight: 10 +--- From 954e1938e96b0a6f58b094ca6cd63ef857b7fed6 Mon Sep 17 00:00:00 2001 From: Pronay Date: Tue, 19 Mar 2024 22:17:53 +0600 Subject: [PATCH 0219/1086] Create index.md --- content/bn/includes/index.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 content/bn/includes/index.md diff --git a/content/bn/includes/index.md b/content/bn/includes/index.md new file mode 100644 index 0000000000..293bb26ae2 --- /dev/null +++ b/content/bn/includes/index.md @@ -0,0 +1,3 @@ +--- +headless: সত্য +--- From 48c260fb799ca398771cbaf771ae398034d6e530 Mon Sep 17 00:00:00 2001 From: Pronay Date: Tue, 19 Mar 2024 22:50:15 +0600 Subject: [PATCH 0220/1086] Create partner-style.css --- content/bn/includes/partner-style.css | 200 ++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 content/bn/includes/partner-style.css diff --git a/content/bn/includes/partner-style.css b/content/bn/includes/partner-style.css new file mode 100644 index 0000000000..afc3b8f0be --- /dev/null +++ b/content/bn/includes/partner-style.css @@ -0,0 +1,200 @@ +/* বিভাগসমূহ */ +.section { + clear: both; + padding: 0px; + margin-bottom: 2em; +} + +.kcsp_section { + clear: both; + padding: 0px; + margin-bottom: 2em; +} + +/* কলাম সেটআপ */ +.col { + display: block; + float:left; + margin: 1% 0 1% 1.6%; + background-color: #f9f9f9; +} +.col:first-child { margin-left: 0; } + +/* গ্রুপিং */ +.group:before, +.group:after { + content:""; + display:table; +} +.group:after { + clear:both; +} +.group { + zoom:1; /* আইই 6/7 এর জন্য */ +} + +/* তিনটি গ্রিড */ +.span_3_of_3 { + width: 35%; + background-color: #f9f9f9; + padding: 20px; +} +.span_2_of_3 { + width: 35%; + background-color: #f9f9f9; + padding: 20px; +} +.span_1_of_3 { + width: 35%; + background-color: #f9f9f9; + padding: 20px; +} + +.col-container { + display: table; /* কন্টেন্টের উপাদানগুলি একটি টেবিল হিসেবে ব্যবহার করুন */ + width: 100%; /* সম্পূর্ণ প্রসারের জন্য পূর্ণ প্রস্থ */ + padding-bottom: 30px; +} + +.col-nav { + display: table-cell; /* কন্টেনারের উপাদানগুলি টেবিল সেল হিসেবে কাজ করার জন্য */ + width: 18%; + background-color: #f9f9f9; + padding: 20px; + border: 5px solid white; +} + +/* 480 পিক্সেলের নিচে পূর্ণ প্রস্থে যান */ + +@media only screen and (max-width: 480px) { + .col { margin: 1% 0 1% 0%;} + .span_3_of_3, .span_2_of_3, .span_1_of_3 { width: 100%; } +} + +@media only screen and (max-width: 650px) { + .col-nav { + display: block; + width: 100%; + } +} + +.button{ + max-width: 100%; + box-sizing: border-box; + margin: 0; + display: inline-block; + border-radius: 6px; + padding: 0 20px; + line-height: 40px; + color: #ffffff; + font-size: 16px; + background-color: #3371e3; + text-decoration: none; + } + +h5 { + font-size: 16px; + line-height: 1.5em; + margin-bottom: 2em; +} + +#usersGrid a { + display: inline-block; + background-color: #f9f9f9; +} + +#ktpContainer, #distContainer, #kcspContainer, #isvContainer, #servContainer { + position: relative; + width: 100%; + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +#isvContainer { + margin-bottom: 80px; +} + +#kcspContainer { + margin-bottom: 80px; +} + +#distContainer { + margin-bottom: 80px; +} + +#ktpContainer { + margin-bottom: 80px; +} + +.partner-box { + position: relative; + width: 47%; + max-width: 48%; + min-width: 48%; + margin-bottom: 20px; + padding: 20px; + flex: 1; + display: flex; + justify-content: left; + align-items: flex-start; +} + +.partner-box img { + background-color: #f9f9f9; +} + +.partner-box > div { + margin-left: 30px; +} + +.partner-box a { + color: #3576E3; +} + +@media screen and (max-width: 1024px) { + .partner-box { + flex-direction: column; + justify-content: flex-start; + } + + .partner-box > div { + margin: 20px 0 0; + } +} + +@media screen and (max-width: 568px) { + #ktpContainer, #distContainter, #kcspContainer, #isvContainer, #servContainer { + justify-content: center; + } + + .partner-box { + flex-direction: column; + justify-content: flex-start; + width: 100%; + max-width: 100%; + min-width: 100%; + } + + .partner-box > div { + margin: 20px 0 0; + } +} + +@media screen and (max-width: 568px) { + #ktpContainer, #distContainer, #kcspContainer, #isvContainer, #servContainer { + justify-content: center; + } + + .partner-box { + flex-direction: column; + justify-content: flex-start; + width: 100%; + max-width: 100%; + min-width: 100%; + } + + .partner-box > div { + margin: 20px 0 0; + } +} From 8b37c44cf7b4b9567bb2d22069e547202e3f6269 Mon Sep 17 00:00:00 2001 From: Pronay Date: Tue, 19 Mar 2024 23:09:29 +0600 Subject: [PATCH 0221/1086] Create federation-deprecation-warning-note.md --- content/bn/includes/federation-deprecation-warning-note.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 content/bn/includes/federation-deprecation-warning-note.md diff --git a/content/bn/includes/federation-deprecation-warning-note.md b/content/bn/includes/federation-deprecation-warning-note.md new file mode 100644 index 0000000000..cce2a4c111 --- /dev/null +++ b/content/bn/includes/federation-deprecation-warning-note.md @@ -0,0 +1,3 @@ +`Federation v1` এর ব্যবহার অনুমোদিত নয়। `Federation v1` কখনও GA অবস্থায় পৌঁছেনি এবং বর্তমানে উন্নতি সক্রিয় নহে। ডকুমেন্টেশন ঐতিহাসিক উদ্দেশ্যে মাত্র। + +বিস্তারিত জানতে, [Kubernetes Federation v2](https://github.com/kubernetes-sigs/federation-v2) এর ইন্টেন্ডেড প্রতিস্থাপন দেখুন। From 393fa0a23e0a0d6ab0e0b852d9881bcf29b8f3c5 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 20 Mar 2024 00:47:43 +0600 Subject: [PATCH 0222/1086] Create _index.md --- .../docs/concepts/extend-kubernetes/_index.md | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 content/bn/docs/concepts/extend-kubernetes/_index.md diff --git a/content/bn/docs/concepts/extend-kubernetes/_index.md b/content/bn/docs/concepts/extend-kubernetes/_index.md new file mode 100644 index 0000000000..a5a4103034 --- /dev/null +++ b/content/bn/docs/concepts/extend-kubernetes/_index.md @@ -0,0 +1,164 @@ +--- +title: কুবারনেটিস প্রসারিত করা +weight: 999 # this section should come last +description: আপনার কুবারনেটিস ক্লাস্টারের আচরণ পরিবর্তন করার বিভিন্ন উপায়। +reviewers: +- erictune +- lavalamp +- cheftako +- chenopis +feature: + title: সম্প্রসারণযোগ্যতার জন্য ডিজাইন করা হয়েছে + description: > + আপস্ট্রিম সোর্স কোড পরিবর্তন না করে আপনার কুবারনেটিস ক্লাস্টারে ফিচার যোগ করুন। +content_type: concept +no_list: true +--- + + + +কুবারনেটিস খুবই কনফিগারযোগ্য এবং সম্প্রসারণযোগ্য। ফলস্বরূপ, কুবারনেটিস প্রজেক্ট কোডে ফর্ক(fork) +বা প্যাচ জমা দেওয়ার খুব কমই প্রয়োজন হয়। + +এই নির্দেশিকাটি একটি কুবারনেটিস ক্লাস্টার কাস্টমাইজ করার উপায়গুলো বর্ণনা করে ৷ এই নির্দেশিকাটি +{{< glossary_tooltip text="ক্লাস্টার অপারেটরদের" term_id="cluster-operator" >}} লক্ষ্য করে বানানো যারা তাদের কুবারনেটিস ক্লাস্টারকে +তাদের কাজের পরিবেশের প্রয়োজনের সাথে কীভাবে মানিয়ে নিতে হয় তা বুঝতে চায়। +ডেভেলপাররা যারা সম্ভাব্য {{< glossary_tooltip text="প্ল্যাটফর্ম ডেভেলপকারী" term_id="platform-developer" >}} +বা কুবারনেটিস প্রজেক্ট {{< glossary_tooltip text="কন্ট্রিবিউটরা" term_id="contributor" >}} , +এক্সটেনশন পয়েন্ট (extension points) কি এবং প্যাটার্ন বিদ্যমান এর পরিচিতি হিসাবে এবং +তাদের ট্রেড-অফ আর সীমাবদ্ধতা জানার জন্য এই নির্দেশিকাটিকে দরকারী হিসেবে পাবে। + +কাস্টমাইজেশন পন্থাগুলিকে বিস্তৃতভাবে [কনফিগারেশনে](#কনফিগারেশন) বিভক্ত করা যেতে পারে, +যার মধ্যে শুধুমাত্র কমান্ড লাইন আর্গুমেন্ট, লোকাল কনফিগারেশন ফাইল বা API রিসোর্স পরিবর্তন করা জড়িত; +এবং [এক্সটেনশন](#এক্সটেনশন), যার মধ্যে অতিরিক্ত প্রোগ্রাম চালানো, অতিরিক্ত নেটওয়ার্ক সার্ভিস বা উভয়ই জড়িত। +এই ডকুমেন্টটি মূলত এক্সটেনশন সম্পর্কে। + + + +## কনফিগারেশন + +*কনফিগারেশন ফাইল* এবং *কমান্ড আর্গুমেন্ট* অনলাইন ডকুমেন্টেশনের [রেফারেন্স](/bn/docs/reference/) বিভাগে ডকুমেন্টেড করা হয়েছে, +প্রতিটি বাইনারির জন্য একটি পৃষ্ঠা রয়েছে : + +* [`kube-apiserver`](/bn/docs/reference/command-line-tools-reference/kube-apiserver/) +* [`kube-controller-manager`](/bn/docs/reference/command-line-tools-reference/kube-controller-manager/) +* [`kube-scheduler`](/bn/docs/reference/command-line-tools-reference/kube-scheduler/) +* [`kubelet`](/bn/docs/reference/command-line-tools-reference/kubelet/) +* [`kube-proxy`](/bn/docs/reference/command-line-tools-reference/kube-proxy/) + +কমান্ড আর্গুমেন্ট এবং কনফিগারেশন ফাইল সবসময় একটি হোস্ট করা কুবারনেটিস সার্ভিস বা পরিচালিত ইনস্টলেশনের +সাথে একটি ডিস্ট্রিবিউশন এ পরিবর্তনযোগ্য নাও হতে পারে। যখন তারা পরিবর্তনযোগ্য হয়, তারা সাধারণত ক্লাস্টার +অপারেটর দ্বারা পরিবর্তনযোগ্য হয়। এছাড়াও, এগুলো ভবিষ্যতের কুবারনেটিস সংস্করণে পরিবর্তন হতে পারে, এবং সেগুলো +সেট করার জন্য রিস্টারটিং প্রক্রিয়া প্রয়োজন হতে পারে। এই কারণে, সেগুলি শুধুমাত্র তখনই ব্যবহার করা উচিত +যখন অন্য কোন বিকল্প থাকে না। + +বিল্ট-ইন *পলিসি API* গুলো, যেমন [ResourceQuota](/bn/docs/concepts/policy/resource-quotas/), +[NetworkPolicy](/bn/docs/concepts/services-networking/network-policies/) এবং Role-based Access Control +([RBAC](/bn/docs/reference/access-authn-authz/rbac/)), হলো বিল্ট-ইন কুবারনেটিস API যা ঘোষণামূলকভাবে কনফিগার করা নীতি সেটিংস প্রদান করে। +API গুলো সাধারণত হোস্ট করা কুবারনেটিস সার্ভিস এবং পরিচালিত কুবারনেটিস ইনস্টলেশনগুলোর সাথে ব্যবহারযোগ্য। +বিল্ট-ইন পলিসি API গুলো অন্যান্য কুবারনেটিস রিসোর্স যেমন পডের মতো একই নিয়ম অনুসরণ করে। +আপনি যখন [স্থিতিশীল](/bn/docs/reference/using-api/#api-versioning) একটি পলিসি API ব্যবহার করেন, +তখন আপনি অন্যান্য কুবারনেটিস API-এর মতো একটি [সংজ্ঞায়িত সাপোর্ট পলিসি](/bn/docs/reference/using-api/deprecation-policy/) থেকে উপকৃত হন। +এই কারণে, পলিসি API গুলো *কনফিগারেশন ফাইল* এবং *কমান্ড আর্গুমেন্ট* এর বদলে যেখানে উপযুক্ত সেখানে সুপারিশ করা হয় । + +## এক্সটেনশন + +এক্সটেনশন হলো সফ্টওয়্যার উপাদান যা কুবারনেটিসের সাথে প্রসারিত এবং গভীরভাবে একত্রিত হয়। +তারা এটিকে নতুন টাইপের এবং নতুন ধরণের হার্ডওয়্যার সাপোর্ট করার জন্য মানিয়ে নেয়। + +অনেক ক্লাস্টার অ্যাডমিনিস্ট্রেটর কুবারনেটিসের হোস্টেড বা ডিস্ট্রিবিউশন উদাহরণ ব্যবহার করে। +এই ক্লাস্টারগুলো পূর্বে ইনস্টল করা এক্সটেনশনগুলোর সাথে আসে। ফলস্বরূপ, বেশিরভাগ কুবারনেটিস +ব্যবহারকারীদের এক্সটেনশন ইনস্টল করার প্রয়োজন হবে না এবং এমনকি কম ব্যবহারকারীদের নতুন বানাতে হবে। + +### এক্সটেনশন প্যাটার্ন + +কুবারনেটিস ডিজাইন করা হয়েছে ক্লায়েন্ট প্রোগ্রাম লিখার মাধ্যমে স্বয়ংক্রিয় হতে । +কুবারনেটিস API-তে পড়া এবং/অথবা লেখা যে কোনো প্রোগ্রাম দরকারী অটোমেশন প্রদান করতে পারে। +*অটোমেশন* ক্লাস্টারে চলতে পারে বা এটি বন্ধ করতে পারে। +এই ডকুমেন্টের নির্দেশিকা অনুসরণ করে আপনি অত্যন্ত উপলব্ধ এবং শক্তিশালী অটোমেশন লিখতে পারেন। +অটোমেশন সাধারণত হোস্ট করা ক্লাস্টার এবং পরিচালিত ইনস্টলেশন সহ যেকোন কুবারনেটিস +ক্লাস্টারের সাথে কাজ করে। + +ক্লায়েন্ট প্রোগ্রাম লেখার জন্য একটি নির্দিষ্ট প্যাটার্ন রয়েছে যা কুবারনেটিসের +সাথে ভালভাবে কাজ করে যাকে {{< glossary_tooltip term_id="controller" text="কন্ট্রোলার" >}} +প্যাটার্ন বলা হয়। কন্ট্রোলাররা সাধারণত একটি অবজেক্টের `.spec` পড়ে, সম্ভবত জিনিসগুলি করে এবং +তারপর অবজেক্টের `.status` আপডেট করে ৷ + +একটি কন্ট্রোলার হল কুবারনেটিস API-এর ক্লায়েন্ট। যখন কুবারনেটিস ক্লায়েন্ট হয় এবং +একটি রিমোট সার্ভিসে কল করে, কুবারনেটিস এটিকে একটি *webhook* বলে। রিমোট সার্ভিসকে +*webhook backend* বলা হয়। কাস্টম কন্ট্রোলারের মতো, webhookগুলো ব্যর্থতার একটি পয়েন্ট যোগ করে। + +{{< note >}} +কুবারনেটিসের বাইরে, “webhook” শব্দটি সাধারণত অ্যাসিঙ্ক্রোনাস(asynchronous) বিজ্ঞপ্তিগুলির জন্য একটি প্রক্রিয়াকে বোঝায়, +যেখানে webhook কল অন্য সিস্টেম বা উপাদানের জন্য একমুখী বিজ্ঞপ্তি হিসাবে কাজ করে। +কুবারনেটিস ইকোসিস্টেমে, এমনকি সিঙ্ক্রোনাস(synchronous) HTTP কলআউটগুলোকে প্রায়শই +“webhooks” হিসাবে বর্ণনা করা হয়। +{{< /note >}} + +webhook মডেলে, কুবারনেটিস একটি রিমোট সার্ভিসে একটি নেটওয়ার্ক অনুরোধ করে। +বিকল্প *binary Plugin* মডেলের সাথে, কুবারনেটস একটি বাইনারি (প্রোগ্রাম) চালায়। +বাইনারি প্লাগইনগুলো kubelet দ্বারা ব্যবহৃত হয় (উদাহরণস্বরূপ, [CSI storage plugins](https://kubernetes-csi.github.io/docs/) এবং +[CNI network plugins](/bn/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)), এবং +kubectl দ্বারা ([প্লাগইনগুলোর সাথে প্রসারিত kubectl](/bn/docs/tasks/extend-kubectl/kubectl-plugins/) দেখুন)। + +### এক্সটেনশন পয়েন্ট + +এই ডায়াগ্রামটি একটি কুবারনেটিস ক্লাস্টারের এক্সটেনশন পয়েন্ট এবং এটি +অ্যাক্সেসকারী ক্লায়েন্টদের দেখায়। + + + +{{< figure src="/docs/concepts/extend-kubernetes/extension-points.png" + alt="কুবারনেটিসের জন্য সাতটি সংখ্যাযুক্ত এক্সটেনশন পয়েন্টের প্রতীকী উপস্থাপনা" + class="diagram-large" caption="কুবারনেটিস এক্সটেনশন পয়েন্ট" >}} + +#### চিত্রের চাবিকাঠি + +1. ব্যবহারকারীরা প্রায়ই `kubectl` ব্যবহার করে কুবারনেটিস API এর সাথে যোগাযোগ করে। [প্লাগইন](#client-extensions) + ক্লায়েন্টদের আচরণ কাস্টমাইজ করে। জেনেরিক এক্সটেনশন রয়েছে যা বিভিন্ন ক্লায়েন্টের জন্য প্রযোজ্য হতে পারে, সেইসাথে`kubectl` + প্রসারিত করার নির্দিষ্ট উপায়ও । + +1. API সার্ভার সমস্ত অনুরোধ পরিচালনা করে। API সার্ভারে বিভিন্ন ধরণের এক্সটেনশন পয়েন্টগুলো তাদের কনটেন্টের উপর + ভিত্তি করে অনুরোধগুলো প্রমাণীকরণ(authenticating), বা তাদের ব্লক করার অনুমতি দেয়, বিষয়বস্তু পরিবর্তন করে এবং + মুছে ফেলার ব্যবস্থা করে। এগুলো [API অ্যাক্সেস এক্সটেনশন](#API-অ্যাক্সেস-এক্সটেনশন) বিভাগে বর্ণিত হয়েছে। + +1. এপিআই সার্ভার বিভিন্ন ধরণের *রিসোর্স* সরবরাহ করে। *বিল্ট-ইন রিসোর্স ধরনের*, যেমন + `pods`, কুবারনেটিস প্রজেক্ট দ্বারা সংজ্ঞায়িত করা হয় এবং পরিবর্তন করা যায় না। + কুবারনেটিস API প্রসারিত করার বিষয়ে জানতে [API এক্সটেনশন](#API-এক্সটেনশন) পড়ুন। + +1. কুবারনেটিস শিডিউলার কোন নোডগুলোতে পড স্থাপন করবে তা + [নির্ধারণ](/bn/docs/concepts/scheduling-eviction/assign-pod-node/) করে। শিডিউলিং প্রসারিত করার + বিভিন্ন উপায় রয়েছে, যা [শিডিউলিং এক্সটেনশন](#শিডিউলিং-এক্সটেনশন) বিভাগে বর্ণিত করা হয়েছে। + +1. কুবারনেটিসের বেশিরভাগ আচরণ {{< glossary_tooltip term_id="controller" text="কন্ট্রোলার" >}} + নামক প্রোগ্রাম দ্বারা বাস্তবায়িত হয়, যেগুলো API সার্ভারের ক্লায়েন্ট। + কন্ট্রোলারগুলো প্রায়শই কাস্টম রিসোর্সগুলোর সাথে একত্রে ব্যবহৃত হয়। + আরও জানতে [অটোমেশনের সাথে নতুন API-এর সমন্বয়](#অটোমেশনের-সাথে-নতুন-API-এর-সমন্বয়) এবং + [বিল্ট-ইন রিসোর্স পরিবর্তন](#বিল্ট-ইন-রিসোর্স-পরিবর্তন) পড়ুন। + +1. kubelet সার্ভারে (নোড) চলে এবং ক্লাস্টার নেটওয়ার্কে তাদের নিজস্ব আইপি সহ ভার্চুয়াল সার্ভারের মতো পডগুলোকে + দেখাতে সহায়তা করে। [নেটওয়ার্ক প্লাগইনগুলো](#নেটওয়ার্ক-প্লাগইনগুলো) পড নেটওয়ার্কিং এর বিভিন্ন বাস্তবায়নের + অনুমতি দেয়। + +1. আপনি কাস্টম হার্ডওয়্যার বা অন্যান্য বিশেষ নোড-লোকাল সুবিধাগুলো একীভূত করতে [ডিভাইস প্লাগইনগুলো](#ডিভাইস-প্লাগইন) + ব্যবহার করতে পারেন এবং আপনার ক্লাস্টারে চলমান পডগুলোতে এগুলো উপলব্ধ করতে পারেন৷ + kubelet ডিভাইস প্লাগইনগুলোর সাথে কাজ করার জন্য সাপোর্ট অন্তর্ভুক্ত করে। + + kubelet পড এবং তাদের কন্টেইনারের জন্য + {{< glossary_tooltip text="ভলিউম" term_id="volume" >}} মাউন্ট এবং আনমাউন্ট করে। + আপনি নতুন ধরনের স্টোরেজ এবং অন্যান্য ভলিউম টাইপের জন্য সাপোর্ট যোগ করতে + স্টোরেজ প্লাগইন ব্যবহার করতে পারেন। + + +#### এক্সটেনশন পয়েন্ট চয়েস ফ্লোচার্ট {#এক্সটেনশন-ফ্লোচার্ট} + +আপনি কোথা থেকে শুরু করবেন তা নিশ্চিত না হলে, এই ফ্লোচার্টটি সাহায্য করতে পারবে৷ +মনে রাখবেন কিছু সমাধানে বিভিন্ন ধরনের এক্সটেনশন জড়িত থাকতে পারে। + + + +{{< figure src="/docs/concepts/extend-kubernetes/flowchart.svg" + alt="প্রয়োগকারীদের জন্য ব্যবহারের ক্ষেত্র এবং নির্দেশিকা সম্পর্কে প্রশ্ন সহ ফ্লোচার্ট। সবুজ বৃত্ত হ্যাঁ নির্দেশ করে; লাল বৃত্ত না নির্দেশ করে।" + class="diagram-large" caption="একটি এক্সটেনশন পদ্ধতি নির্বাচন করতে ফ্লোচার্ট গাইড" >}} + +--- From 8257affbcdd3497571ab604d8116b7430a2fe582 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 20 Mar 2024 20:00:58 +0600 Subject: [PATCH 0223/1086] Update _index.md --- .../docs/concepts/extend-kubernetes/_index.md | 186 +++++++++++++++++- 1 file changed, 177 insertions(+), 9 deletions(-) diff --git a/content/bn/docs/concepts/extend-kubernetes/_index.md b/content/bn/docs/concepts/extend-kubernetes/_index.md index a5a4103034..c5a2871621 100644 --- a/content/bn/docs/concepts/extend-kubernetes/_index.md +++ b/content/bn/docs/concepts/extend-kubernetes/_index.md @@ -2,11 +2,6 @@ title: কুবারনেটিস প্রসারিত করা weight: 999 # this section should come last description: আপনার কুবারনেটিস ক্লাস্টারের আচরণ পরিবর্তন করার বিভিন্ন উপায়। -reviewers: -- erictune -- lavalamp -- cheftako -- chenopis feature: title: সম্প্রসারণযোগ্যতার জন্য ডিজাইন করা হয়েছে description: > @@ -114,12 +109,12 @@ kubectl দ্বারা ([প্লাগইনগুলোর সাথে #### চিত্রের চাবিকাঠি -1. ব্যবহারকারীরা প্রায়ই `kubectl` ব্যবহার করে কুবারনেটিস API এর সাথে যোগাযোগ করে। [প্লাগইন](#client-extensions) +1. ব্যবহারকারীরা প্রায়ই `kubectl` ব্যবহার করে কুবারনেটিস API এর সাথে যোগাযোগ করে। [প্লাগইন](#ক্লায়েন্ট-এক্সটেনশন) ক্লায়েন্টদের আচরণ কাস্টমাইজ করে। জেনেরিক এক্সটেনশন রয়েছে যা বিভিন্ন ক্লায়েন্টের জন্য প্রযোজ্য হতে পারে, সেইসাথে`kubectl` প্রসারিত করার নির্দিষ্ট উপায়ও । 1. API সার্ভার সমস্ত অনুরোধ পরিচালনা করে। API সার্ভারে বিভিন্ন ধরণের এক্সটেনশন পয়েন্টগুলো তাদের কনটেন্টের উপর - ভিত্তি করে অনুরোধগুলো প্রমাণীকরণ(authenticating), বা তাদের ব্লক করার অনুমতি দেয়, বিষয়বস্তু পরিবর্তন করে এবং + ভিত্তি করে অনুরোধগুলো অথেন্টিকেটিং(authenticating), বা তাদের ব্লক করার অনুমতি দেয়, বিষয়বস্তু পরিবর্তন করে এবং মুছে ফেলার ব্যবস্থা করে। এগুলো [API অ্যাক্সেস এক্সটেনশন](#API-অ্যাক্সেস-এক্সটেনশন) বিভাগে বর্ণিত হয়েছে। 1. এপিআই সার্ভার বিভিন্ন ধরণের *রিসোর্স* সরবরাহ করে। *বিল্ট-ইন রিসোর্স ধরনের*, যেমন @@ -137,7 +132,7 @@ kubectl দ্বারা ([প্লাগইনগুলোর সাথে [বিল্ট-ইন রিসোর্স পরিবর্তন](#বিল্ট-ইন-রিসোর্স-পরিবর্তন) পড়ুন। 1. kubelet সার্ভারে (নোড) চলে এবং ক্লাস্টার নেটওয়ার্কে তাদের নিজস্ব আইপি সহ ভার্চুয়াল সার্ভারের মতো পডগুলোকে - দেখাতে সহায়তা করে। [নেটওয়ার্ক প্লাগইনগুলো](#নেটওয়ার্ক-প্লাগইনগুলো) পড নেটওয়ার্কিং এর বিভিন্ন বাস্তবায়নের + দেখাতে সহায়তা করে। [নেটওয়ার্ক প্লাগইনগুলো](#নেটওয়ার্ক-প্লাগইন) পড নেটওয়ার্কিং এর বিভিন্ন বাস্তবায়নের অনুমতি দেয়। 1. আপনি কাস্টম হার্ডওয়্যার বা অন্যান্য বিশেষ নোড-লোকাল সুবিধাগুলো একীভূত করতে [ডিভাইস প্লাগইনগুলো](#ডিভাইস-প্লাগইন) @@ -147,7 +142,7 @@ kubectl দ্বারা ([প্লাগইনগুলোর সাথে kubelet পড এবং তাদের কন্টেইনারের জন্য {{< glossary_tooltip text="ভলিউম" term_id="volume" >}} মাউন্ট এবং আনমাউন্ট করে। আপনি নতুন ধরনের স্টোরেজ এবং অন্যান্য ভলিউম টাইপের জন্য সাপোর্ট যোগ করতে - স্টোরেজ প্লাগইন ব্যবহার করতে পারেন। + [স্টোরেজ প্লাগইন](#স্টোরেজ-প্লাগইন) ব্যবহার করতে পারেন। #### এক্সটেনশন পয়েন্ট চয়েস ফ্লোচার্ট {#এক্সটেনশন-ফ্লোচার্ট} @@ -162,3 +157,176 @@ kubectl দ্বারা ([প্লাগইনগুলোর সাথে class="diagram-large" caption="একটি এক্সটেনশন পদ্ধতি নির্বাচন করতে ফ্লোচার্ট গাইড" >}} --- + +## ক্লায়েন্ট এক্সটেনশন + +kubectl-এর জন্য প্লাগইন হলো পৃথক বাইনারি যা নির্দিষ্ট সাবকমান্ডের আচরণ যোগ বা প্রতিস্থাপন করে। +`kubectl` টুলটি [ক্রেডেনশিয়াল(credential) প্লাগইনগুলোর](/bn/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins) সাথেও একীভূত করতে পারে। +এই এক্সটেনশনগুলো শুধুমাত্র একটি একক ব্যবহারকারীর লোকাল পরিবেশকে প্রভাবিত করে, এবং তাই সাইট-ব্যাপী পলিসিগুলো প্রয়োগ করতে পারে না। + +আপনি যদি `kubectl` টুল প্রসারিত করতে চান, তাহলে [প্লাগইন সহ kubectl প্রসারিত করা](/bn/docs/tasks/extend-kubectl/kubectl-plugins/) পড়ুন। + +## API এক্সটেনশন + +### কাস্টম রিসোর্স সংজ্ঞা + +আপনি যদি নতুন কন্ট্রোলার, অ্যাপ্লিকেশন কনফিগারেশন অবজেক্ট বা অন্যান্য ডিক্লারেটিভ +API সংজ্ঞায়িত করতে চান এবং কুবারনেটিস টুলস যেমন `kubectl` ব্যবহার করে সেগুলো +পরিচালনা করতে চান তাহলে কুবারনেটিসে একটি কাস্টম রিসোর্স যোগ করার কথা বিবেচনা করুন। + +কাস্টম রিসোর্স সম্পর্কে আরও জানতে, +[কাস্টম রিসোর্স](/bn/docs/concepts/extend-kubernetes/api-extension/custom-resources/) কনসেপ্ট গাইড দেখুন। + +### API এগ্রিগেশন লেয়ার(aggregation layer) + +আপনি কুবারনেটিস [API এগ্রিগেশন লেয়ার](/bn/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/) ব্যবহার করতে পারেন +কুবারনেটিস API-কে [মেট্রিক্সের](/bn/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/) মতো অতিরিক্ত সার্ভিসের সাথে একীভূত করতে। + +### অটোমেশনের সাথে নতুন API-এর সমন্বয় + +একটি কাস্টম রিসোর্স API এবং একটি কন্ট্রোল লুপের সংমিশ্রণকে +{{< glossary_tooltip term_id="controller" text="কন্ট্রোলার" >}} প্যাটার্ন বলা হয়। যদি আপনার +কন্ট্রোলার একটি কাঙ্ক্ষিত অবস্থার উপর ভিত্তি করে অবকাঠামো স্থাপনকারী মানব অপারেটরের স্থান নেয়, +তাহলে কন্ট্রোলারও {{< glossary_tooltip text="অপারেটর প্যাটার্ন" term_id="operator-pattern" >}} অনুসরণ করতে পারে। +অপারেটর প্যাটার্ন নির্দিষ্ট অ্যাপ্লিকেশন পরিচালনা করতে ব্যবহৃত হয়; সাধারণত, এগুলো হলো এমন অ্যাপ্লিকেশন +যা অবস্থা বজায় রাখে এবং সেগুলোকে কীভাবে পরিচালনা করা হয় তার যত্নের প্রয়োজন হয়৷ + +আপনি আপনার নিজস্ব কাস্টম API এবং কন্ট্রোল লুপগুলোও তৈরি করতে পারেন যা অন্যান্য রিসোর্সগুলো পরিচালনা করতে পারে, +যেমন স্টোরেজ, বা পলিসিগুলো সংজ্ঞায়িত করতে (যেমন একটি অ্যাক্সেস কন্ট্রোল রেস্ট্রিকশন)। + +### বিল্ট-ইন রিসোর্স পরিবর্তন + +আপনি যখন কাস্টম রিসোর্স যোগ করে কুবারনেটিস API প্রসারিত করেন, তখন যোগ করা রিসোর্স সবসময় +একটি নতুন API গ্রুপে পড়ে। আপনি বিদ্যমান API গ্রুপগুলোকে প্রতিস্থাপন বা পরিবর্তন করতে পারবেন না ৷ +একটি API যোগ করলে আপনাকে বিদ্যমান API-এর আচরণকে সরাসরি প্রভাবিত করতে দেওয়া না (যেমন পড), +যেখানে _API অ্যাক্সেস এক্সটেনশানগুলো_ করে। + +## API অ্যাক্সেস এক্সটেনশন + +যখন একটি অনুরোধ কুবারনেটিস API সার্ভারে পৌঁছায়, এটি প্রথমে _অথেন্টিকেটেড(authenticated)_ করা হয়, +তারপর _অনুমোদিত(authorized)_ হয় এবং তারপরে আসে বিভিন্ন ধরণের _অ্যাডমিশন কন্ট্রোলের(admission control)_ +বিষয় (কিছু অনুরোধ প্রকৃতপক্ষে অথেন্টিকেটেড(authenticated) নয়, এবং স্পেশাল ট্রিটমেন্ট পান)। +এই প্রবাহ সম্পর্কে আরও জানতে +[কুবারনেটিস API-এ অ্যাক্সেস কন্ট্রোল করা](/bn/docs/concepts/security/controlling-access/) দেখুন। + +কুবারনেটিস অথেন্টিকেশন/অনুমোদন প্রবাহের প্রতিটি ধাপ এক্সটেনশন পয়েন্ট অফার করে। + +### অথেন্টিকেশন(Authentication) + +ক্লায়েন্ট অনুরোধ করার জন্য একটি ব্যবহারকারীর নামের সমস্ত অনুরোধে +[অথেন্টিকেশন](/bn/docs/reference/access-authn-authz/authentication/) শিরোনাম বা সার্টিফিকেট যুক্ত করে। + +কুবারনেটিস এর বেশ কয়েকটি বিল্ট-ইন অথেন্টিকেশন পদ্ধতি রয়েছে যা এটি সাপোর্ট করে। +এটি একটি অথেন্টিকেটিং প্রক্সির পিছনেও বসতে পারে এবং এটি একটি `অনুমোদন(Authorization)` টোকেন পাঠাতে পারে যাচাইয়ের জন্য: +শিরোনাম থেকে একটি রিমোট সার্ভিসে (একটি [অথেন্টিকেশন webhook](/bn/docs/reference/access-authn-authz/authentication/#webhook-token-authentication)) +যদি সেগুলো আপনার প্রয়োজনগুলো পূরণ না করে৷ + +### অনুমোদন(Authorization) + +[অনুমোদন](/bn/docs/reference/access-authn-authz/authorization/) নির্ধারণ করে যে নির্দিষ্ট ব্যবহারকারীরা API রিসোর্সগুলোতে +পড়তে, লিখতে এবং অন্যান্য ক্রিয়াকলাপ করতে পারে কিনা। এটি সম্পূর্ণ রিসোর্সের লেভেলে কাজ করে -- এটি ইচ্ছামত +অবজেক্টের ফিল্ডের উপর ভিত্তি করে বৈষম্য করে না। + +যদি বিল্ট-ইন অনুমোদনের উপায়গুলো আপনার চাহিদা পূরণ না করে, +তাহলে একটি [অনুমোদন webhook](/bn/docs/reference/access-authn-authz/webhook/) +কাস্টম কোডে কল করার অনুমতি দেয় যা একটি অনুমোদনের সিদ্ধান্ত নেয়। + +### ডাইনামিক অ্যাডমিশন কন্ট্রোল + +একটি অনুরোধ অনুমোদিত হওয়ার পরে, যদি এটি একটি লিখিত অপারেশন হয়, তবে এটি +[অ্যাডমিশন কন্ট্রোলের](/bn/docs/reference/access-authn-authz/admission-controllers/) পদক্ষেপগুলোর +মধ্য দিয়ে যায়। বিল্ট-ইন পদক্ষেপগুলো ছাড়াও, বেশ কয়েকটি এক্সটেনশন রয়েছে: + +* [ইমেজ পলিসি webhook](/bn/docs/reference/access-authn-authz/admission-controllers/#imagepolicywebhook) + কন্টেইনারে কোন ছবি চালানো যাবে তা সীমাবদ্ধ করে। +* ইচ্ছামত অ্যাডমিশন কন্ট্রোলের সিদ্ধান্ত নিতে, একটি সাধারণ + [অ্যাডমিশন webhook](/bn/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks) + ব্যবহার করা যেতে পারে। অ্যাডমিশন ওয়েবহুক সৃষ্টি বা আপডেট প্রত্যাখ্যান করতে পারে। + কিছু অ্যাডমিশন webhook ইনকামিং রিকোয়েস্ট ডেটা পরিবর্তন করে কুবারনেটিস দ্বারা আরও পরিচালনা করার আগে। + +## অবকাঠামো এক্সটেনশন + +### ডিভাইস প্লাগইন + +_ডিভাইস প্লাগইনগুলো_ একটি [ডিভাইস প্লাগইনের](/bn/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/) +মাধ্যমে একটি নোডকে নতুন নোড রিসোর্সগুলো (সিপিইউ এবং মেমরির মতো বিল্টইনগুলো ছাড়াও) +আবিষ্কার করতে দেয় । + +### স্টোরেজ প্লাগইন + +{{< glossary_tooltip text="কন্টেইনার স্টোরেজ ইন্টারফেস(Container Storage Interface)" term_id="csi" >}} (CSI) +প্লাগইনগুলো নতুন ধরনের ভলিউমের জন্য সাপোর্ট সহ কুবারনেটিস প্রসারিত করার একটি উপায় প্রদান করে। +ভলিউমগুলো টেকসই এক্সটার্নাল স্টোরেজ দ্বারা সাহায্যপ্রাপ্ত করা যেতে পারে, বা ক্ষণস্থায়ী স্টোরেজ(ephemeral storage) প্রদান করতে পারে, +অথবা তারা একটি ফাইল সিস্টেম প্যারাডাইম ব্যবহার করে তথ্যের জন্য একটি রিড-অনলি ইন্টারফেস দিতে পারে । + +কুবারনেটিস এছাড়াও FlexVolume প্লাগইনগুলোর জন্য সাপোর্ট অন্তর্ভুক্ত করে, +যা কুবারনেটিস v1.23 (CSI-এর পক্ষে) থেকে ডেপ্রিসিয়েটেড(deprecated) করা হয়েছে । + +FlexVolume প্লাগইনগুলো ব্যবহারকারীদের ভলিউম প্রকারগুলো মাউন্ট করার অনুমতি দেয় যা সাধারণত কুবারনেটিস দ্বারা সাপোর্টেড নয়। +আপনি যখন FlexVolume স্টোরেজের উপর নির্ভর করে এমন একটি পড চালান, তখন kubelet ভলিউম মাউন্ট করার জন্য একটি বাইনারি প্লাগইন কল করে। +আর্কাইভ করা [FlexVolume](https://git.k8s.io/design-proposals-archive/storage/flexvolume-deployment.md) +ডিজাইন প্রস্তাবে এই পদ্ধতির আরও বিশদ বিবরণ রয়েছে। + +[The Kubernetes Volume Plugin FAQ for Storage Vendors](https://github.com/kubernetes/community/blob/master/sig-storage/volume-plugin-faq.md#kubernetes-volume-plugin-faq-for-storage-vendors) তে +স্টোরেজ প্লাগইনগুলোর সাধারণ তথ্য অন্তর্ভুক্ত রয়েছে । + +### নেটওয়ার্ক প্লাগইন + +আপনার কুবারনেটিস ক্লাস্টারের একটি _নেটওয়ার্ক প্লাগইন_ প্রয়োজন যাতে একটি কার্যকরী পড নেটওয়ার্ক থাকে +এবং কুবারনেটিস নেটওয়ার্ক মডেলের অন্যান্য দিকগুলোকে সাপোর্ট করতে পারে৷ + +[নেটওয়ার্ক প্লাগইনগুলো](/bn/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) +কুবারনেটিসকে বিভিন্ন নেটওয়ার্কিং টপোলজি এবং প্রযুক্তির সাথে কাজ করার অনুমতি দেয়। + +### Kubelet ইমেজ ক্রেডেনশিয়াল প্রোভাইডার প্লাগইন (Kubelet image credential provider plugins) + +{{< feature-state for_k8s_version="v1.26" state="stable" >}} +Kubelet ইমেজ ক্রেডেনশিয়াল প্রোভাইডাররা হলো Kubelet এর জন্য প্লাগইন যা ডাইনামিকভাবে ইমেজ +রেজিস্ট্রি ক্রেডেনশিয়ালগুলো পুনরুদ্ধার করতে পারে। কন্টেইনার ইমেজ রেজিস্ট্রি থেকে ইমেজ তোলার সময় +ক্রেডেনশিয়ালগুলো ব্যবহার করা হয় যা কনফিগারেশনের সাথে মেলে। + +প্লাগইনগুলো বহিরাগত সার্ভিসগুলোর সাথে যোগাযোগ করতে পারে বা ক্রেডেনশিয়ালগুলো পেতে লোকাল ফাইলগুলো ব্যবহার করতে পারে ৷ +এইভাবে, kubelet এর প্রতিটি রেজিস্ট্রির জন্য স্ট্যাটিক ক্রেডেনশিয়ালের প্রয়োজন নেই এবং বিভিন্ন অথেন্টিকেশন পদ্ধতি এবং +প্রোটোকল সাপোর্ট করতে পারে । + +প্লাগইন কনফিগারেশনের বিশদ বিবরণের জন্য, +[একটি Kubelet ইমেজ ক্রেডেনশিয়াল প্রোভাইডার কনফিগার ](/bn/docs/tasks/administer-cluster/kubelet-credential-provider/) দেখুন। + +## শিডিউলিং এক্সটেনশন + +শিডিউলার হলো একটি বিশেষ ধরনের কন্ট্রোলার যা পডগুলো দেখে এবং +নোডগুলোতে পড বরাদ্দ করে। +অন্যান্য কুবারনেটিস উপাদানগুলো ব্যবহার করা চালিয়ে যাওয়ার সময় ডিফল্ট শিডিউলার +সম্পূর্ণরূপে প্রতিস্থাপন করা যেতে পারে, অথবা +[একাধিক শিডিউলার](/bn/docs/tasks/extend-kubernetes/configure-multiple-schedulers/) একই সময়ে চলতে পারে। + +এটি একটি উল্লেখযোগ্য উদ্যোগ, এবং প্রায় সমস্ত কুবারনেটিস ব্যবহারকারীরা দেখতে পান +যে তাদের শিডিউলার পরিবর্তন করার প্রয়োজন নেই। + +আপনি কোন [শিডিউলার প্লাগইনগুলো](/bn/docs/reference/scheduling/config/#scheduling-plugins) সক্রিয় তা নিয়ন্ত্রণ করতে পারেন বা +বিভিন্ন নামযুক্ত [শিডিউলার প্রোফাইলের](/bn/docs/reference/scheduling/config/#multiple-profiles) সাথে প্লাগইনগুলোর সেটগুলোকে সংযুক্ত করতে পারেন ৷ +আপনি আপনার নিজস্ব প্লাগইনও লিখতে পারেন যা এক বা একাধিক kube-scheduler এর +[এক্সটেনশন পয়েন্টের](/bn/docs/concepts/scheduling-eviction/scheduling-framework/#extension-points) সাথে একত্রিত হয় । + +অবশেষে, বিল্ট-ইন `kube-scheduler` উপাদানটি একটি +[webhook](https://git.k8s.io/design-proposals-archive/scheduling/scheduler_extender.md)কে +সাপোর্ট করে যা একটি রিমোট HTTP ব্যাকএন্ড (শিডিউলার এক্সটেনশন) ফিল্টার এবং/অথবা +নোডগুলোকে অগ্রাধিকার দেওয়ার অনুমতি দেয় যা kube-scheduler একটি পডের জন্য বেছে নেয়। + +{{< note >}} +আপনি শুধুমাত্র একটি শিডিউলার এক্সটেন্ডার webhook এর মাধ্যমে নোড ফিল্টারিং +এবং নোড অগ্রাধিকারকে প্রভাবিত করতে পারেন; +webhook ইন্টিগ্রেশনের মাধ্যমে অন্যান্য এক্সটেনশন পয়েন্ট পাওয়া যায় না। +{{< /note >}} + +## {{% heading "whatsnext" %}} + +* অবকাঠামো এক্সটেনশন সম্পর্কে আরও জানুন + * [ডিভাইস প্লাগইন](/bn/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/) + * [নেটওয়ার্ক প্লাগইন](/bn/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) + * CSI [স্টোরেজ প্লাগইন](https://kubernetes-csi.github.io/docs/) +* [kubectl প্লাগইন](/bn/docs/tasks/extend-kubectl/kubectl-plugins/) সম্পর্কে জানুন +* [কাস্টম রিসোর্স](/bn/docs/concepts/extend-kubernetes/api-extension/custom-resources/) সম্পর্কে আরও জানুন +* [এক্সটেনশন API সার্ভার](/bn/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/) সম্পর্কে আরও জানুন +* [ডাইনামিক অ্যাডমিশন কন্ট্রোল](/bn/docs/reference/access-authn-authz/extensible-admission-controllers/) সম্পর্কে জানুন +* [অপারেটর প্যাটার্ন](/bn/docs/concepts/extend-kubernetes/operator/) সম্পর্কে জানুন From b69e79cedb6a30a380947787bb8ea1bfbbba2b9e Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Thu, 21 Mar 2024 00:23:28 +0600 Subject: [PATCH 0224/1086] Update _index.md --- .../concepts/cluster-administration/_index.md | 52 +++++++++++++++++-- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/content/bn/docs/concepts/cluster-administration/_index.md b/content/bn/docs/concepts/cluster-administration/_index.md index d46d1dd677..dc829f1892 100644 --- a/content/bn/docs/concepts/cluster-administration/_index.md +++ b/content/bn/docs/concepts/cluster-administration/_index.md @@ -1,8 +1,5 @@ --- title: ক্লাস্টার প্রশাসন -reviewers: -- davidopp -- lavalamp weight: 100 content_type: concept description: > @@ -38,7 +35,7 @@ card: - আপনি কি আপনার কম্পিউটারে কুবারনেটিস ব্যবহার করে দেখতে চান, বা আপনি একটি উচ্চ-উপলব্ধতা(availability) তৈরি করতে চান, মাল্টি-নোড ক্লাস্টার ? আপনার প্রয়োজনের জন্য সবচেয়ে উপযুক্ত ডিস্ট্রো বেছে নিন। - আপনি কি ব্যবহার করবেন **হোস্ট করা কুবারনেটিস ক্লাস্টার** , যেমন - [গুগল কুবারনেটিস ইঞ্জিন](https://cloud.google.com/kubernetes-engine/), অথবা **আপনার নিজস্ব ক্লাস্টার হোস্ট করছেন** ? + [গুগল কুবারনেটিস ইঞ্জিন](https://cloud.google.com/kubernetes-engine/), অথবা **আপনার নিজস্ব ক্লাস্টার হোস্ট করছেন**? - আপনার ক্লাস্টার কি **অন-প্রিমিসেস**, বা **ক্লাউডে (IaaS)** হবে ? কুবারনেটিস হাইব্রিড ক্লাস্টারগুলিকে সরাসরি সমর্থন করে না। এর পরিবর্তে, আপনি একাধিক ক্লাস্টার সেট আপ করতে পারেন। - **যদি আপনি কুবারনেটিস অন-প্রিমিসেস কনফিগার করছেন**, তাহলে বিবেচনা করুন @@ -49,3 +46,50 @@ card: পছন্দের একটি বৃহত্তর বৈচিত্র অফার করে। - একটি ক্লাস্টার চালানোর জন্য প্রয়োজনীয় [উপাদান](/bn/docs/concepts/overview/components/) এর সাথে নিজেকে পরিচিত করুন৷ +## একটি ক্লাস্টার পরিচালনা করা + +* শিখুন কিভাবে [নোড পরিচালনা করবেন](/bn/docs/concepts/architecture/nodes/)। + +* কিভাবে সেট আপ এবং পরিচালনা করতে হয় [রিসোর্স কোটা](/bn/docs/concepts/policy/resource-quotas/) শেয়ার্ড ক্লাস্টারগুলির জন্য তা শিখুন। + +## একটি ক্লাস্টার সুরক্ষিত করা + +* [জেনারেট সার্টিফিকেট](/bn/docs/tasks/administer-cluster/certificates/) বিভিন্ন টুল চেইন ব্যবহার করে সার্টিফিকেট + তৈরি করার ধাপগুলি বর্ণনা করে। + +* [কুবারনেটিস কন্টেইনার এনভায়রনমেন্ট](/bn/docs/concepts/containers/container-environment/) একটি কুবারনেটিস + নোডে Kubelet পরিচালিত কন্টেইনারগুলির পরিবেশ বর্ণনা করে। + +* [Kubernetes API-তে অ্যাক্সেস নিয়ন্ত্রণ](/bn/docs/concepts/security/controlling-access) বর্ণনা করে + কিভাবে কুবারনেটিস তার নিজস্ব API এর জন্য অ্যাক্সেস নিয়ন্ত্রণ প্রয়োগ করে। + +* [যাচাইকরণ](/bn/docs/reference/access-authn-authz/authentication/) বিভিন্ন যাচাইকরণ বিকল্প সহ, + কুবারনেটিসে যাচাইকরণের ব্যাখ্যা দেয়। + +* [অথোরাইজেশন](/bn/docs/reference/access-authn-authz/authorization/) যাচাইকরণ থেকে আলাদা, + এবং HTTP কলগুলি কীভাবে পরিচালনা করা হয় তা নিয়ন্ত্রণ করে। + +* [ভর্তি নিয়ন্ত্রকদের ব্যবহার](/bn/docs/reference/access-authn-authz/admission-controllers/) + প্লাগ-ইনগুলি ব্যাখ্যা করে যা যাচাইকরণ এবং অনুমোদনের পরে কুবারনেটস API সার্ভারে + অনুরোধগুলিকে বাধা দেয়। + +* [কুবারনেটিস ক্লাস্টারে Sysctls ব্যবহার ](/bn/docs/tasks/administer-cluster/sysctl-cluster/) + একজন প্রশাসকের কাছে বর্ণনা করে যে কীভাবে কার্নেল প্যারামিটার সেট করতে `sysctl` কমান্ড-লাইন টুল ব্যবহার করতে হয় +। + +* [অডিটিং](/bn/docs/tasks/debug/debug-cluster/audit/) বর্ণনা করে কিভাবে কুবারনেটিসের অডিট লগের সাথে + যোগাযোগ করতে হয়। + +### Kubelet সুরক্ষিত করা + +* [কন্ট্রোল প্লেন-নোড কমিউনিকেশন](/bn/docs/concepts/architecture/control-plane-node-communication/) +* [TLS বুটস্ট্র্যাপিং](/bn/docs/reference/access-authn-authz/kubelet-tls-bootstrapping/) +* [Kubelet যাচাইকরণ/অনুমোদন](/bn/docs/reference/access-authn-authz/kubelet-authn-authz/) + +## ঐচ্ছিক ক্লাস্টার সার্ভিস + +* [DNS ইন্টিগ্রেশন](/bn/docs/concepts/services-networking/dns-pod-service/) বর্ণনা করে কিভাবে সরাসরি কুবারনেটিস পরিষেবাতে + একটি DNS নাম সমাধান করা যায়। + +* [লগিং এবং মনিটরিং ক্লাস্টার অ্যাক্টিভিটি](/bn/docs/concepts/cluster-administration/logging/) + ব্যাখ্যা করে কিভাবে কুবারনেটিসে লগিং কাজ করে এবং কিভাবে এটি বাস্তবায়ন করা যায়। From deababfc359de1b06452d6b88faa8b7e284175e5 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 23 Mar 2024 12:24:36 +0600 Subject: [PATCH 0225/1086] Update _index.md --- .../bn/docs/concepts/extend-kubernetes/_index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/content/bn/docs/concepts/extend-kubernetes/_index.md b/content/bn/docs/concepts/extend-kubernetes/_index.md index c5a2871621..b61d07cb7f 100644 --- a/content/bn/docs/concepts/extend-kubernetes/_index.md +++ b/content/bn/docs/concepts/extend-kubernetes/_index.md @@ -49,7 +49,7 @@ no_list: true বিল্ট-ইন *পলিসি API* গুলো, যেমন [ResourceQuota](/bn/docs/concepts/policy/resource-quotas/), [NetworkPolicy](/bn/docs/concepts/services-networking/network-policies/) এবং Role-based Access Control -([RBAC](/bn/docs/reference/access-authn-authz/rbac/)), হলো বিল্ট-ইন কুবারনেটিস API যা ঘোষণামূলকভাবে কনফিগার করা নীতি সেটিংস প্রদান করে। +([RBAC](/bn/docs/reference/access-authn-authz/rbac/)), হলো বিল্ট-ইন কুবারনেটিস API যা ঘোষণামূলকভাবে কনফিগার করা পলিসি সেটিংস প্রদান করে। API গুলো সাধারণত হোস্ট করা কুবারনেটিস সার্ভিস এবং পরিচালিত কুবারনেটিস ইনস্টলেশনগুলোর সাথে ব্যবহারযোগ্য। বিল্ট-ইন পলিসি API গুলো অন্যান্য কুবারনেটিস রিসোর্স যেমন পডের মতো একই নিয়ম অনুসরণ করে। আপনি যখন [স্থিতিশীল](/bn/docs/reference/using-api/#api-versioning) একটি পলিসি API ব্যবহার করেন, @@ -81,12 +81,12 @@ API গুলো সাধারণত হোস্ট করা কুবার একটি কন্ট্রোলার হল কুবারনেটিস API-এর ক্লায়েন্ট। যখন কুবারনেটিস ক্লায়েন্ট হয় এবং একটি রিমোট সার্ভিসে কল করে, কুবারনেটিস এটিকে একটি *webhook* বলে। রিমোট সার্ভিসকে -*webhook backend* বলা হয়। কাস্টম কন্ট্রোলারের মতো, webhookগুলো ব্যর্থতার একটি পয়েন্ট যোগ করে। +*webhook backend* বলা হয়। কাস্টম কন্ট্রোলারের মতো, webhook গুলো ব্যর্থতার একটি পয়েন্ট যোগ করে। {{< note >}} কুবারনেটিসের বাইরে, “webhook” শব্দটি সাধারণত অ্যাসিঙ্ক্রোনাস(asynchronous) বিজ্ঞপ্তিগুলির জন্য একটি প্রক্রিয়াকে বোঝায়, যেখানে webhook কল অন্য সিস্টেম বা উপাদানের জন্য একমুখী বিজ্ঞপ্তি হিসাবে কাজ করে। -কুবারনেটিস ইকোসিস্টেমে, এমনকি সিঙ্ক্রোনাস(synchronous) HTTP কলআউটগুলোকে প্রায়শই +কুবারনেটিস ইকোসিস্টেমে, এমনকি সিঙ্ক্রোনাস(synchronous) HTTP কলআউটগুলোকে প্রায়ই “webhooks” হিসাবে বর্ণনা করা হয়। {{< /note >}} @@ -127,7 +127,7 @@ kubectl দ্বারা ([প্লাগইনগুলোর সাথে 1. কুবারনেটিসের বেশিরভাগ আচরণ {{< glossary_tooltip term_id="controller" text="কন্ট্রোলার" >}} নামক প্রোগ্রাম দ্বারা বাস্তবায়িত হয়, যেগুলো API সার্ভারের ক্লায়েন্ট। - কন্ট্রোলারগুলো প্রায়শই কাস্টম রিসোর্সগুলোর সাথে একত্রে ব্যবহৃত হয়। + কন্ট্রোলারগুলো প্রায়ই কাস্টম রিসোর্সগুলোর সাথে একত্রে ব্যবহৃত হয়। আরও জানতে [অটোমেশনের সাথে নতুন API-এর সমন্বয়](#অটোমেশনের-সাথে-নতুন-API-এর-সমন্বয়) এবং [বিল্ট-ইন রিসোর্স পরিবর্তন](#বিল্ট-ইন-রিসোর্স-পরিবর্তন) পড়ুন। @@ -238,10 +238,10 @@ API সংজ্ঞায়িত করতে চান এবং কুবা মধ্য দিয়ে যায়। বিল্ট-ইন পদক্ষেপগুলো ছাড়াও, বেশ কয়েকটি এক্সটেনশন রয়েছে: * [ইমেজ পলিসি webhook](/bn/docs/reference/access-authn-authz/admission-controllers/#imagepolicywebhook) - কন্টেইনারে কোন ছবি চালানো যাবে তা সীমাবদ্ধ করে। + কন্টেইনারে কোন ইমেজ চালানো যাবে তা সীমাবদ্ধ করে। * ইচ্ছামত অ্যাডমিশন কন্ট্রোলের সিদ্ধান্ত নিতে, একটি সাধারণ [অ্যাডমিশন webhook](/bn/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks) - ব্যবহার করা যেতে পারে। অ্যাডমিশন ওয়েবহুক সৃষ্টি বা আপডেট প্রত্যাখ্যান করতে পারে। + ব্যবহার করা যেতে পারে। অ্যাডমিশন webhook সৃষ্টি বা আপডেট প্রত্যাখ্যান করতে পারে। কিছু অ্যাডমিশন webhook ইনকামিং রিকোয়েস্ট ডেটা পরিবর্তন করে কুবারনেটিস দ্বারা আরও পরিচালনা করার আগে। ## অবকাঠামো এক্সটেনশন @@ -249,7 +249,7 @@ API সংজ্ঞায়িত করতে চান এবং কুবা ### ডিভাইস প্লাগইন _ডিভাইস প্লাগইনগুলো_ একটি [ডিভাইস প্লাগইনের](/bn/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/) -মাধ্যমে একটি নোডকে নতুন নোড রিসোর্সগুলো (সিপিইউ এবং মেমরির মতো বিল্টইনগুলো ছাড়াও) +মাধ্যমে একটি নোডকে নতুন নোড রিসোর্সগুলো (CPU এবং মেমরির মতো বিল্টইনগুলো ছাড়াও) আবিষ্কার করতে দেয় । ### স্টোরেজ প্লাগইন @@ -260,7 +260,7 @@ _ডিভাইস প্লাগইনগুলো_ একটি [ডিভ অথবা তারা একটি ফাইল সিস্টেম প্যারাডাইম ব্যবহার করে তথ্যের জন্য একটি রিড-অনলি ইন্টারফেস দিতে পারে । কুবারনেটিস এছাড়াও FlexVolume প্লাগইনগুলোর জন্য সাপোর্ট অন্তর্ভুক্ত করে, -যা কুবারনেটিস v1.23 (CSI-এর পক্ষে) থেকে ডেপ্রিসিয়েটেড(deprecated) করা হয়েছে । +যা কুবারনেটিস v1.23 (CSI-এর পক্ষে) থেকে ডেপ্রিকেটেড(deprecated) করা হয়েছে । FlexVolume প্লাগইনগুলো ব্যবহারকারীদের ভলিউম প্রকারগুলো মাউন্ট করার অনুমতি দেয় যা সাধারণত কুবারনেটিস দ্বারা সাপোর্টেড নয়। আপনি যখন FlexVolume স্টোরেজের উপর নির্ভর করে এমন একটি পড চালান, তখন kubelet ভলিউম মাউন্ট করার জন্য একটি বাইনারি প্লাগইন কল করে। From f340503713443c28681e32b032b87359119c04f9 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 23 Mar 2024 12:26:51 +0600 Subject: [PATCH 0226/1086] Update _index.md --- content/bn/docs/concepts/extend-kubernetes/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/extend-kubernetes/_index.md b/content/bn/docs/concepts/extend-kubernetes/_index.md index b61d07cb7f..3b6a916a9e 100644 --- a/content/bn/docs/concepts/extend-kubernetes/_index.md +++ b/content/bn/docs/concepts/extend-kubernetes/_index.md @@ -26,7 +26,7 @@ no_list: true কাস্টমাইজেশন পন্থাগুলিকে বিস্তৃতভাবে [কনফিগারেশনে](#কনফিগারেশন) বিভক্ত করা যেতে পারে, যার মধ্যে শুধুমাত্র কমান্ড লাইন আর্গুমেন্ট, লোকাল কনফিগারেশন ফাইল বা API রিসোর্স পরিবর্তন করা জড়িত; এবং [এক্সটেনশন](#এক্সটেনশন), যার মধ্যে অতিরিক্ত প্রোগ্রাম চালানো, অতিরিক্ত নেটওয়ার্ক সার্ভিস বা উভয়ই জড়িত। -এই ডকুমেন্টটি মূলত এক্সটেনশন সম্পর্কে। +এই ডকুমেন্টটি মূলত _এক্সটেনশন_ সম্পর্কে। From 7d5372f0c8080d3d2f0525a1d5f1d41ed4e6022a Mon Sep 17 00:00:00 2001 From: asem-hamid Date: Sun, 24 Mar 2024 16:43:17 +0600 Subject: [PATCH 0227/1086] create api-extension\_index.md --- .../docs/concepts/extend-kubernetes/_index.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/docs/concepts/extend-kubernetes/_index.md diff --git a/content/bn/docs/concepts/extend-kubernetes/_index.md b/content/bn/docs/concepts/extend-kubernetes/_index.md new file mode 100644 index 0000000000..da23053c9a --- /dev/null +++ b/content/bn/docs/concepts/extend-kubernetes/_index.md @@ -0,0 +1,19 @@ +--- +title: কুবারনেটিস API প্রসারিত করা +weight: 30 +--- + +কাস্টম রিসোর্স হলো কুবারনেটিস API এর এক্সটেনশন। কুবারনেটিস আপনার ক্লাস্টারে কাস্টম রিসোর্স যোগ করার দুটি উপায় প্রদান করে: + +- [CustomResourceDefinition](bn/docs/concepts/extend-kubernetes/api-extension/custom-resources/) (CRD) + মেকানিজম আপনাকে একটি API গ্রুপ, ধরনের, এবং স্কিমা দিয়ে ঘোষণামূলকভাবে একটি নতুন কাস্টম API সংজ্ঞায়িত করতে দেয় + যা আপনি নির্দিষ্ট করেছেন। + কুবারনেটিস কন্ট্রোল প্লেন আপনার কাস্টম রিসোর্সের স্টোরেজ পরিবেশন এবং পরিচালনা করে। CRD গুলো আপনাকে আপনার + ক্লাস্টারের জন্য একটি কাস্টম API সার্ভার না লিখে এবং চালানো ছাড়াই নতুন ধরণের রিসোর্স তৈরি করতে দেয় । +- [এগ্রিগেশন লেয়ারটি](bn/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/) + প্রাইমারি API সার্ভারের পিছনে থাকে, যা একটি প্রক্সি হিসেবে কাজ করে। + এই ব্যবস্থাটিকে API এগ্রিগেশন (API Aggregation)(AA) বলা হয়, যা আপনাকে আপনার + নিজস্ব API সার্ভার লিখে এবং স্থাপন করার মাধ্যমে আপনার কাস্টম রিসোর্সগুলোর জন্য + বিশেষায়িত বাস্তবায়ন প্রদান করতে দেয়। + প্রধান API সার্ভার আপনার API সার্ভারে আপনার নির্দিষ্ট করা কাস্টম API গুলোর জন্য অনুরোধগুলো অর্পণ করে, + সেগুলোকে এর সমস্ত ক্লায়েন্টদের জন্য উপলব্ধ করে৷ \ No newline at end of file From 56d96fd1ab76f27c78d8cb1ddb9117ecee3d5028 Mon Sep 17 00:00:00 2001 From: asem-hamid Date: Sun, 24 Mar 2024 16:47:07 +0600 Subject: [PATCH 0228/1086] update _index.md --- content/bn/docs/concepts/services-networking/_index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/bn/docs/concepts/services-networking/_index.md b/content/bn/docs/concepts/services-networking/_index.md index 5a4341c430..503f22b729 100644 --- a/content/bn/docs/concepts/services-networking/_index.md +++ b/content/bn/docs/concepts/services-networking/_index.md @@ -18,7 +18,7 @@ description: > কুবারনেটিস যেকোন নেটওয়ার্কিং বাস্তবায়নে নিম্নলিখিত মৌলিক প্রয়োজনীয়তাগুলো আরোপ করে (যেকোনো ইচ্ছাকৃত নেটওয়ার্ক বিভাজন নীতি ব্যতীত): - * পড NAT ছাড়া অন্য কোনো [নোডে](/docs/concepts/architecture/nodes/) + * পড NAT ছাড়া অন্য কোনো [নোডে](/bn/docs/concepts/architecture/nodes/) অন্য সব পডের সঙ্গে যোগাযোগ করতে পারে * একটি নোডের এজেন্ট (যেমন system daemons, kubelet) সেই নোডের সমস্ত পডের সাথে যোগাযোগ করতে পারে @@ -50,16 +50,16 @@ description: > - লুপব্যাকের মাধ্যমে একটি পডের মধ্যে কন্টেইনার [যোগাযোগের জন্য নেটওয়ার্কিং ব্যবহার করে](/bn/docs/concepts/services-networking/dns-pod-service/) । - ক্লাস্টার নেটওয়ার্কিং বিভিন্ন পডের মধ্যে যোগাযোগ প্রদান করে। - [পরিষেবা](/bn/docs/concepts/services-networking/service/) API আপনাকে আপনার ক্লাস্টারের - বাইরে থেকে পৌঁছানোর জন্য [পডসে চলমান একটি অ্যাপ্লিকেশন প্রকাশ](/docs/tutorials/services/connect-applications-service/) + বাইরে থেকে পৌঁছানোর জন্য [পডসে চলমান একটি অ্যাপ্লিকেশন প্রকাশ](/bn/docs/tutorials/services/connect-applications-service/) করতে দেয় । - [ইনগ্রেস](/bn/docs/concepts/services-networking/ingress/) বিশেষত HTTP অ্যাপ্লিকেশন, ওয়েবসাইট এবং এপিআই প্রকাশ করার জন্য অতিরিক্ত কার্যকারিতা প্রদান করে। - [গেটওয়ে API](/bn/docs/concepts/services-networking/gateway/) হলো একটি {{}} যেটি মডেলিং পরিষেবা নেটওয়ার্কিংয়ের জন্য API ধরণের একটি অভিব্যক্তিপূর্ণ (expressive), এক্সটেনসিবল, এবং ভূমিকা-ভিত্তিক পরিবার প্রদান করে। -- এছাড়া আপনি [শুধুমাত্র আপনার ক্লাস্টারের মধ্যে ব্যবহারের জন্য পরিষেবাগুলো প্রকাশ করতে](/docs/concepts/services-networking/service-traffic-policy/) +- এছাড়া আপনি [শুধুমাত্র আপনার ক্লাস্টারের মধ্যে ব্যবহারের জন্য পরিষেবাগুলো প্রকাশ করতে](/bn/docs/concepts/services-networking/service-traffic-policy/) পরিষেবাগুলো ব্যবহার করতে পারেন । [কানেক্টিং অ্যাপ্লিকেশানস উইথ সার্ভিস](/bn/docs/tutorials/services/connect-applications-service/) টিউটোরিয়াল আপনাকে একটি হ্যান্ডস-অন উদাহরণ সহ পরিষেবা এবং কুবারনেটিস নেটওয়ার্কিং সম্পর্কে শিখতে দেয়। [ক্লাস্টার নেটওয়ার্কিং](/bn/docs/concepts/cluster-administration/networking/) ব্যাখ্যা করে -কিভাবে আপনার ক্লাস্টারের জন্য নেটওয়ার্কিং সেট আপ করতে হয় এবং এর সাথে জড়িত প্রযুক্তিগুলোর একটি ওভারভিউ প্রদান করে। +কিভাবে আপনার ক্লাস্টারের জন্য নেটওয়ার্কিং সেট আপ করতে হয় এবং এর সাথে জড়িত প্রযুক্তিগুলোর একটি ওভারভিউ প্রদান করে। \ No newline at end of file From 49453bbf9e550183c91e9709a5a83f09991444bb Mon Sep 17 00:00:00 2001 From: Pronay Sarker Date: Sun, 24 Mar 2024 20:03:58 +0600 Subject: [PATCH 0229/1086] Update _index.md --- content/bn/docs/concepts/security/_index.md | 98 ++++++++++----------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/content/bn/docs/concepts/security/_index.md b/content/bn/docs/concepts/security/_index.md index a150a6358d..61ad67d8b2 100644 --- a/content/bn/docs/concepts/security/_index.md +++ b/content/bn/docs/concepts/security/_index.md @@ -6,67 +6,67 @@ description: > simple_list: true --- -এই কুবারনেটিসের নথিপত্রের এই অংশের উদ্দেশ্য আপনাকে ক্লাউড-নেটিভ প্রযুক্তিতে +এই কুবারনেটিস ডকুমেন্টেশনের এই অংশের উদ্দেশ্য আপনাকে ক্লাউড-নেটিভ প্রযুক্তিতে নিরাপত্তামুলকভাবে ওয়ার্কলোডগুলি পরিচালনা শেখানোর সাহায্য করা এবং একটি কুবারনেটিসের ক্লাস্টার নিরাপত্তামুলকভাবে রাখার গুরুত্বপূর্ণ দিক সম্পর্কে জানানো। -কুবারনেটিসের ক্লাউড-নেটিভ বিশ্বাসের উপর ভিত্তি করে এবং ক্লাউড-নেটিভ তথ্য নিরাপত্তা সম্পর্কে ভাল অনুশীলনের +কুবারনেটিস ক্লাউড-নেটিভ স্থাপত্যের উপর ভিত্তি করে এবং ক্লাউড-নেটিভ তথ্য নিরাপত্তা সম্পর্কে ভাল অনুশীলনের জন্য {{< glossary_tooltip text="CNCF" term_id="cncf" >}} থেকে পরামর্শ প্রদান করে। আপনার ক্লাস্টার এবং অ্যাপ্লিকেশনগুলিকে কীভাবে সুরক্ষিত করবেন সে সম্পর্কে বিস্তৃত প্রেক্ষাপটের জন্য -[ক্লাউড নেটিভ নিরাপত্তা এবং কুবারনেটিস](/docs/concepts/security/cloud-native-security/) পড়ুন। +[ক্লাউড নেটিভ নিরাপত্তা এবং কুবারনেটিস](/bn/docs/concepts/security/cloud-native-security/) পড়ুন। ## কুবারনেটিসের নিরাপত্তা ব্যবস্থা {#security-mechanisms} -কুবারনেটিসের অনেকগুলি API এবং নিরাপত্তা নিয়ন্ত্রণ সহ অনেকগুলি নিরাপত্তা নিয়ন্ত্রণ অন্তর্ভুক্ত -করে, এবং তথ্য নিরাপত্তা পরিচালনার কিভাবে অংশ হতে পারে তা সম্পর্কে [নীতি](#policies) নির্ধারণের উপায় রয়েছে। +কুবারনেটিসের মধ্যে বেশ কয়েকটি API এবং নিরাপত্তা কন্ট্রোল রয়েছে, +সেইসাথে [পলিসিগুলি](#পলিসি) সংজ্ঞায়িত করার উপায় যা আপনি কীভাবে তথ্য সুরক্ষা পরিচালনা করেন তার অংশ গঠন করতে পারে। ### কন্ট্রোল প্লেন সুরক্ষা -কোন কুবারনেটিসের ক্লাস্টারের জন্য একটি প্রধান নিরাপত্তা ব্যবস্থা হ'ল -[কুবারনেটিসের API অ্যাক্সেসের নির্দেশিকা](/docs/concepts/security/controlling-access) প্রতিষ্ঠা করা। +কোন কুবারনেটিসের ক্লাস্টারের জন্য একটি প্রধান নিরাপত্তা ব্যবস্থা হলো +[কুবারনেটিস API-এ অ্যাক্সেস কন্ট্রোল ](bn/docs/concepts/security/controlling-access) করা। -কুবারনেটিসের আপনার কন্ট্রোল প্লেনের মধ্যে এবং এর গ্রাহকদের মধ্যে তথ্য এনক্রিপশন প্রদানের জন্য -TLS কনফিগার এবং ব্যবহার করার প্রত্যাশা করে। -[কুবারনেটিসের কন্ট্রোল প্লেনে তথ্য এনক্রিপশন ইন ট্রানজিট](/docs/tasks/tls/managing-tls-in-a-cluster/) -এবং কন্ট্রোল প্লেনের মধ্যে ডেটা জন্য [অবশিষ্ট এনক্রিপশন](/docs/tasks/administer-cluster/encrypt-data/) -প্রয়োজনীয়; এটা আপনার নিজের ওয়ার্কলোডের ডেটা জন্য অবশিষ্ট এনক্রিপশন ব্যবহারের থেকে আলাদা করা, যা -আপনার জন্য ভালো একটি ধারণা হতে পারে। +কুবারনেটিস আশা করে যে আপনি কন্ট্রোল প্লেনের মধ্যে এবং কন্ট্রোল প্লেন এবং এর ক্লায়েন্টদের মধ্যে +[ট্রানজিটে ডেটা এনক্রিপশন](/bn/docs/tasks/tls/managing-tls-in-a-cluster/) +প্রদান করতে TLS কনফিগার করবেন এবং ব্যবহার করবেন। আপনি কুবারনেটিস কন্ট্রোল প্লেনের মধ্যে +সংরক্ষিত ডেটার জন্য [এনক্রিপশন এট রেস্ট(encryption at rest)](/bn/docs/tasks/administer-cluster/encrypt-data/) সক্ষম করতে পারেন; +এটি আপনার নিজের ওয়ার্কলোডের ডেটার জন্য এনক্রিপশন এট রেস্ট ব্যবহার করা থেকে আলাদা, +যা একটি ভাল আইডিয়াও হতে পারে -### গোপনীয়তা +### সিক্রেট -[গোপনীয়](/docs/concepts/configuration/secret/) API গোপনীয়তা প্রয়োজন করে কনফিগারেশন মান সরবরাহ -করার জন্য মৌলিক সুরক্ষা প্রদান করে। +[সিক্রেট](/bn/docs/concepts/configuration/secret/) API কনফিগারেশন ভ্যালুগুলির জন্য মৌলিক +সুরক্ষা প্রদান করে যার জন্য গোপনীয়তা প্রয়োজন । ### ওয়ার্কলোড সুরক্ষা -পড এবং তাদের কন্টেনারগুলি যথাযথভাবে আলাদা করা নিশ্চিত করতে -[পড নিরাপত্তা মান](/docs/concepts/security/pod-security-standards/) বাধ্যতামূলক করুন। -আপনি প্রয়োজন হলে [ব্যবহারকারী কাস্টম আইসোলেশন নির্ধারণ করার জন্য](/docs/concepts/containers/runtime-class) -[রানটাইমক্লাসগুলি](/docs/concepts/containers/runtime-class) ব্যবহার করতে পারেন। +পড এবং তাদের কন্টেনারগুলি যথাযথভাবে আইসোলেট নিশ্চিত করতে +[পড নিরাপত্তা স্ট্যান্ডার্ডস](/bn/docs/concepts/security/pod-security-standards/) +আপনার প্রয়োজন হলে কাস্টম আইসোলেশন নির্ধারণ করার জন্য আপনি +[RuntimeClasses](/bn/docs/concepts/containers/runtime-class) ব্যবহার করতে পারেন। -[নেটওয়ার্ক নীতি](/docs/concepts/services-networking/network-policies/) আপনাকে +[নেটওয়ার্ক পলিসি](/bn/docs/concepts/services-networking/network-policies/) আপনাকে পডগুলির মধ্যে, অথবা আপনার ক্লাস্টারের বাইরের নেটওয়ার্ক মধ্যে নেটওয়ার্ক ট্রাফিক নিয়ন্ত্রণ করতে দেয়। -আপনি এই ব্যাপক বিজ্ঞান থেকে নিরাপত্তা নিয়ন্ত্রণ প্রয়োগ করতে পারেন যেটি পডগুলি, তাদের কন্টেনারগুলি, -এবং তাদের মধ্যে চালিত ইমেজের সম্পর্কে অবাধ্য বা বিচারগত নিরাপত্তা নিয়ন্ত্রণ পরিচালনা করার দিকে প্রয়োজন হতে পারে। +আপনি পড, তাদের কন্টেনারগুলি এবং তাদের মধ্যে চলা ইমেজগুলির চারপাশে প্রতিরোধমূলক বা ডিটেক্টিভ +কন্ট্রোলগুলি প্রয়োগ করতে বিস্তৃত ইকোসিস্টেম থেকে সিকিউরিটি কন্ট্রোল স্থাপন করতে পারেন । ### অডিটিং -কুবারনেটিস [অডিটিং লগিং](/docs/tasks/debug/debug-cluster/audit/) একটি নিরাপত্তা-সংশ্লিষ্ট, -সময়মাপনী সেট অফ রেকর্ড সরবরাহ করে যা ক্লাস্টারের ক্রিয়াকলাপের অনুক্রমিক ডকুমেন্ট করে। ক্লাস্টার +কুবারনেটিস [অডিটিং লগিং](/bn/docs/tasks/debug/debug-cluster/audit/) একটি নিরাপত্তা-সংশ্লিষ্ট, +সময়ানুক্রমিক সেট অফ রেকর্ড সরবরাহ করে যা ক্লাস্টারের ক্রিয়াকলাপের অনুক্রমিক ডকুমেন্ট করে। ক্লাস্টার ব্যবহারকারীদের দ্বারা উত্পন্ন ক্রিয়াকলাপ, কুবার্নিটিস API ব্যবহার করা অ্যাপ্লিকেশন এবং নিয়ন্ত্রণ প্লেন নিজস্ব ক্রিয়াকলাপগুলি অডিট করে। -## ক্লাউড প্রদায়কের নিরাপত্তা +## ক্লাউড প্রোভাইডার নিরাপত্তা {{% thirdparty-content vendor="true" %}} -আপনি যদি আপনার নিজের হার্ডওয়্যার বা একটি বিভিন্ন ক্লাউড প্রদায়কে একটি কুবারনেটিস ক্লাস্টার চালাচ্ছেন, -নিরাপত্তা সেরা অনুশীলনের জন্য আপনার নথি দেখুন। -এখানে কিছু জনপ্রিয় ক্লাউড প্রদায়কদের নিরাপত্তা নথিগুলির লিঙ্ক: +আপনি যদি আপনার নিজের হার্ডওয়্যার বা অন্য কোনো ক্লাউড প্রোভাইডার এ একটি কুবারনেটিস ক্লাস্টার চালান, +তাহলে নিরাপত্তার সর্বোত্তম অনুশীলনের জন্য আপনার ডকুমেন্টেশনের সাথে পরামর্শ করুন। +এখানে কিছু জনপ্রিয় ক্লাউড প্রোভাইডার এর নিরাপত্তা ডকুমেন্টেশনের লিঙ্ক রয়েছে : {{< table caption="ক্লাউড প্রদায়কের নিরাপত্তা" >}} @@ -83,47 +83,47 @@ VMware vSphere | https://www.vmware.com/security/hardening-guides | {{< /table >}} -## নীতি +## পলিসি আপনি কুবারনেটিস-নেটিভ মেকানিজম ব্যবহার করে নিরাপত্তা নীতি নির্ধারণ করতে পারেন, -যেমন [NetworkPolicy](/docs/concepts/services-networking/network-policies/) -(নেটওয়ার্ক প্যাকেট ফিল্টারিং উপর ঘোষণামূলক নিয়ন্ত্রণ) বা -[ValidatingAdmisisonPolicy](/docs/reference/access-authn-authz/validating-admission-policy/) (কে কি -পরিবর্তন করতে পারে তা সম্পর্কে উঘোষণামূলক সীমাবদ্ধতা). +যেমন [NetworkPolicy](/bn/docs/concepts/services-networking/network-policies/) +(নেটওয়ার্ক প্যাকেট ফিল্টারিং উপর ঘোষণামূলক কন্ট্রোল) বা +[ValidatingAdmisisonPolicy](/bn/docs/reference/access-authn-authz/validating-admission-policy/) +(কুবারনেটিস API ব্যবহার করে কেউ কী পরিবর্তন করতে পারে তার ঘোষণামূলক সীমাবদ্ধতা)। -তবে, আপনি কুবারনেটিস পরিবেশের চারপাশে নীতি কার্যান্বয়নে নির্ভর করতে পারেন। কুবার্নিটিস এক্সটেনশন মেকানিজম সরবরাহ করে -এই পরিবেশ প্রকল্পগুলির উপর তাদের নিজস্ব নীতি নিয়ন্ত্রণ সাধারণের জন্য +তবে, আপনি কুবারনেটিস পরিবেশের চারপাশে পলিসি কার্যান্বয়নে নির্ভর করতে পারেন। কুবারনেটিস এক্সটেনশন মেকানিজম সরবরাহ করে +এই পরিবেশ প্রকল্পগুলির উপর তাদের নিজস্ব পলিসি নিয়ন্ত্রণ সাধারণের জন্য উন্মোচনের সুযোগ প্রদান করতে। এগুলি উদাহরণ হিসেবে উল্লেখ করা যেতে পারে: সোর্স কোড পর্যালোচনা, কন্টেনার ইমেজ অনুমোদন, এপিআই অ্যাক্সেস নিয়ন্ত্রণ, নেটওয়ার্কিং, এবং অন্যান্য। -নীতি মেকানিজম এবং কুবারনেটিসের সম্পর্কে আরও তথ্য জানতে, -[নীতি](/docs/concepts/policy/) পড়ুন। +পলিসি মেকানিজম এবং কুবারনেটিসের সম্পর্কে আরও তথ্য জানতে, +[পলিসি](/bn/docs/concepts/policy/) পড়ুন। ## {{% heading "whatsnext" %}} সম্পর্কিত কুবারনেটিস নিরাপত্তা বিষয়গুলি জানুন: -* [আপনার ক্লাস্টার নিরাপত্তা সুরক্ষা করা](/docs/tasks/administer-cluster/securing-a-cluster/) -* [পরিচিত দুর্বলতা](/docs/reference/issues-security/official-cve-feed/) +* [আপনার ক্লাস্টার নিরাপত্তা সুরক্ষা করা](/bn/docs/tasks/administer-cluster/securing-a-cluster/) +* [পরিচিত দুর্বলতা](/bn/docs/reference/issues-security/official-cve-feed/) কুবারনেটিসে (এবং আরও তথ্যের লিঙ্ক) -* [ট্রানজিটে ডেটা এনক্রিপশন](/docs/tasks/tls/managing-tls-in-a-cluster/) কন্ট্রোল প্লেনের জন্য -* [অবশিষ্ট ডেটা এনক্রিপশন](/docs/tasks/administer-cluster/encrypt-data/) -* [কুবারনেটিস API অ্যাক্সেস নিয়ন্ত্রণ](/docs/concepts/security/controlling-access) -* [নেটওয়ার্ক নীতি](/docs/concepts/services-networking/network-policies/) -* [কুবার্নিটিসে গোপনীয়তা](/docs/concepts/configuration/secret/) -* [পডগুলির নিরাপত্তা মান](/docs/concepts/security/pod-security-standards/) -* [রানটাইমক্লাস](/docs/concepts/containers/runtime-class) +* [ট্রানজিটে ডেটা এনক্রিপশন](/bn/docs/tasks/tls/managing-tls-in-a-cluster/) কন্ট্রোল প্লেনের জন্য +* [ডেটা এনক্রিপশন এট রেস্ট](/bn/docs/tasks/administer-cluster/encrypt-data/) +* [কুবারনেটিস API অ্যাক্সেস নিয়ন্ত্রণ](/bn/docs/concepts/security/controlling-access) +* [নেটওয়ার্ক পলিসি](/bn/bn/docs/concepts/services-networking/network-policies/) পড এর জন্য +* [কুবারনেটিসে সিক্রেট](/bn/docs/concepts/configuration/secret/) +* [পডগুলির নিরাপত্তা স্ট্যান্ডার্ডস](/bn/docs/concepts/security/pod-security-standards/) +* [RuntimeClasses](/bn/docs/concepts/containers/runtime-class) প্রসঙ্গ জানুন: -* [ক্লাউড নেটিভ নিরাপত্তা এবং কুবারনেটিস](/docs/concepts/security/cloud-native-security/) পড়ুন। +* [ক্লাউড নেটিভ নিরাপত্তা এবং কুবারনেটিস](/bn/docs/concepts/security/cloud-native-security/) পড়ুন। সার্টিফাইড: * [সার্টিফাইড কুবারনেটিস নিরাপত্তা বিশেষজ্ঞ](https://training.linuxfoundation.org/certification/certified-kubernetes-security-specialist/) - সার্টিফিকেশন এবং সর্বাধিক প্রশিক্ষণ কোর্স। + সার্টিফিকেশন এবং অফিসিয়াল প্রশিক্ষণ কোর্স। এই অধ্যায়ে আরো পড়ুন: From 2cba8677a6ae039d2445660be7b1c99b459accc9 Mon Sep 17 00:00:00 2001 From: Pronay Sarker Date: Sun, 24 Mar 2024 20:04:53 +0600 Subject: [PATCH 0230/1086] Update _index.md --- content/bn/docs/concepts/security/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/security/_index.md b/content/bn/docs/concepts/security/_index.md index 61ad67d8b2..0eb04a1551 100644 --- a/content/bn/docs/concepts/security/_index.md +++ b/content/bn/docs/concepts/security/_index.md @@ -110,7 +110,7 @@ VMware vSphere | https://www.vmware.com/security/hardening-guides | * [ট্রানজিটে ডেটা এনক্রিপশন](/bn/docs/tasks/tls/managing-tls-in-a-cluster/) কন্ট্রোল প্লেনের জন্য * [ডেটা এনক্রিপশন এট রেস্ট](/bn/docs/tasks/administer-cluster/encrypt-data/) * [কুবারনেটিস API অ্যাক্সেস নিয়ন্ত্রণ](/bn/docs/concepts/security/controlling-access) -* [নেটওয়ার্ক পলিসি](/bn/bn/docs/concepts/services-networking/network-policies/) পড এর জন্য +* [নেটওয়ার্ক পলিসি](/bn/docs/concepts/services-networking/network-policies/) পড এর জন্য * [কুবারনেটিসে সিক্রেট](/bn/docs/concepts/configuration/secret/) * [পডগুলির নিরাপত্তা স্ট্যান্ডার্ডস](/bn/docs/concepts/security/pod-security-standards/) * [RuntimeClasses](/bn/docs/concepts/containers/runtime-class) From bc064ce3a3b57eb574190d899b7291dac8caf4dd Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Tue, 26 Mar 2024 00:24:33 +0600 Subject: [PATCH 0231/1086] adds extension-points.png --- .../extend-kubernetes/extension-points.png | Bin 0 -> 39521 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/bn/docs/concepts/extend-kubernetes/extension-points.png diff --git a/content/bn/docs/concepts/extend-kubernetes/extension-points.png b/content/bn/docs/concepts/extend-kubernetes/extension-points.png new file mode 100644 index 0000000000000000000000000000000000000000..8e9359c0cb60b391c18376cefce78b0a28bac552 GIT binary patch literal 39521 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 literal 0 HcmV?d00001 From e010879da27a78e7aaaf350c49dcb650e71d7201 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Tue, 26 Mar 2024 00:40:16 +0600 Subject: [PATCH 0232/1086] Update _index.md --- content/bn/docs/concepts/extend-kubernetes/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/concepts/extend-kubernetes/_index.md b/content/bn/docs/concepts/extend-kubernetes/_index.md index 3b6a916a9e..b0ff189015 100644 --- a/content/bn/docs/concepts/extend-kubernetes/_index.md +++ b/content/bn/docs/concepts/extend-kubernetes/_index.md @@ -101,9 +101,9 @@ kubectl দ্বারা ([প্লাগইনগুলোর সাথে এই ডায়াগ্রামটি একটি কুবারনেটিস ক্লাস্টারের এক্সটেনশন পয়েন্ট এবং এটি অ্যাক্সেসকারী ক্লায়েন্টদের দেখায়। - + -{{< figure src="/docs/concepts/extend-kubernetes/extension-points.png" +{{< figure src="/bn/docs/concepts/extend-kubernetes/extension-points.png" alt="কুবারনেটিসের জন্য সাতটি সংখ্যাযুক্ত এক্সটেনশন পয়েন্টের প্রতীকী উপস্থাপনা" class="diagram-large" caption="কুবারনেটিস এক্সটেনশন পয়েন্ট" >}} From 2348c36db829f6e54dc233a151f65e1973fc3335 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Tue, 26 Mar 2024 01:30:00 +0600 Subject: [PATCH 0233/1086] Create flowchart.svg --- content/bn/docs/concepts/extend-kubernetes/flowchart.svg | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/concepts/extend-kubernetes/flowchart.svg diff --git a/content/bn/docs/concepts/extend-kubernetes/flowchart.svg b/content/bn/docs/concepts/extend-kubernetes/flowchart.svg new file mode 100644 index 0000000000..94bc7c7222 --- /dev/null +++ b/content/bn/docs/concepts/extend-kubernetes/flowchart.svg @@ -0,0 +1,4 @@ + + + +
হ্যাঁ
হ্যাঁ
"API Extensions" এ যান
"API Extensions" এ যান
আপনি কি কুবারনেটিস API এ সম্পূর্ণ নতুন ধরনের যোগ করতে চান?
আপনি যোগ করতে চান...
না
না
আপনি কি কিছু বা সমস্ত API প্রকারে ফিল্ডগুলোকে রেস্ট্রিক্ট বা স্বয়ংক্রিয়ভাবে এডিট করতে চান?
আপনি কি রেস্ট্রিক্ট করতে চান বা...
হ্যাঁ
হ্যাঁ
"API Access Extensions" এ যান
"API Access Extensions" এ যান
না
না
আপনি কি বিল্ট-ইন API প্রকারের অন্তর্নিহিত বাস্তবায়ন পরিবর্তন করতে চান?
আপনি কি বিল্ট-ইন API প্রকারের...
হ্যাঁ
হ্যাঁ
না
না
না
না
হ্যাঁ
হ্যাঁ
আপনি কি ভলিউম, সার্ভিস, ইনগ্রেস, পারসিস্টেন্ট ভলিউম পরিবর্তন করতে চান?
আপনি কি ভলিউম, সার্ভিস, ইনগ্রেস...
"Infrastructure" এ যান
"Infrastructure" এ যান
"Automation" এ যান
"Automation" এ যান
Text is not SVG - cannot display
From 25687368df7a7f53409eb2af514d54043fe0f687 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Tue, 26 Mar 2024 01:31:53 +0600 Subject: [PATCH 0234/1086] Update _index.md --- content/bn/docs/concepts/extend-kubernetes/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/extend-kubernetes/_index.md b/content/bn/docs/concepts/extend-kubernetes/_index.md index b0ff189015..08354bc5b6 100644 --- a/content/bn/docs/concepts/extend-kubernetes/_index.md +++ b/content/bn/docs/concepts/extend-kubernetes/_index.md @@ -152,7 +152,7 @@ kubectl দ্বারা ([প্লাগইনগুলোর সাথে -{{< figure src="/docs/concepts/extend-kubernetes/flowchart.svg" +{{< figure src="/bn/docs/concepts/extend-kubernetes/flowchart.svg" alt="প্রয়োগকারীদের জন্য ব্যবহারের ক্ষেত্র এবং নির্দেশিকা সম্পর্কে প্রশ্ন সহ ফ্লোচার্ট। সবুজ বৃত্ত হ্যাঁ নির্দেশ করে; লাল বৃত্ত না নির্দেশ করে।" class="diagram-large" caption="একটি এক্সটেনশন পদ্ধতি নির্বাচন করতে ফ্লোচার্ট গাইড" >}} From 6730fdeae63ffead1e0e734bb9b5443bcc8b9c9b Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Tue, 26 Mar 2024 12:57:19 +0600 Subject: [PATCH 0235/1086] Update _index.md --- content/bn/docs/setup/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/setup/_index.md b/content/bn/docs/setup/_index.md index 4a0c3c3891..64684aaecf 100644 --- a/content/bn/docs/setup/_index.md +++ b/content/bn/docs/setup/_index.md @@ -2,7 +2,7 @@ title: শুরু করা যাক main_menu: true weight: 20 -content_type: ধারণা +content_type: concept no_list: true card: name: setup From ef99945763cebccdf055440396b082754b98b1d5 Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Tue, 26 Mar 2024 13:06:32 +0600 Subject: [PATCH 0236/1086] Update _index.md --- .../concepts/scheduling-eviction/_index.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/content/bn/docs/concepts/scheduling-eviction/_index.md b/content/bn/docs/concepts/scheduling-eviction/_index.md index badd011f28..abce2f356c 100644 --- a/content/bn/docs/concepts/scheduling-eviction/_index.md +++ b/content/bn/docs/concepts/scheduling-eviction/_index.md @@ -1,10 +1,10 @@ --- -title: "শিডিউলিং, প্রিএম্পশন এবং ইভিকশন" +title: "শিডিউলিং, প্রিএম্পশন এবং ইভিকশন (Scheduling, Preemption and Eviction)" weight: 95 content_type: concept description: > - কুবারনেটিসে, শিডিউলিং মানে হল নিশ্চিত করা যে পডগুলি নোডগুলির - সাথে মিলিত হয়েছে কিনা যাতে কিউবলেট তাদের রান করতে পারে। + কুবারনেটিস, শিডিউলিং মানে হল নিশ্চিত করা যে পডগুলি নোডগুলির + সাথে মিলিত হয়েছে কিনা যাতে kubelet তাদের রান করতে পারে। প্রিএম্পশন হল স্বল্প অগ্রাধিকার পডগুলি বাতিল করার প্রক্রিয়া যাতে উচ্চ অগ্রাধিকার পডগুলি নোডগুলিতে শিডিউল করতে পারে। ইভিকশন হল রিসোর্স-ক্ষুধার্ত নোডগুলিতে এক বা একাধিক পডগুলি প্রত্যাহার করার প্রক্রিয়া। @@ -13,29 +13,29 @@ no_list: True কুবারনেটিসে, শিডিউলিং মানে হল নিশ্চিত করা যে {{}} {{}} সাথে মিলিত হয়েছে কিনা যাতে -{{}} তাদের রান করতে পারে। প্রিএম্পশন হল স্বল্প +{{}} তাদের রান করতে পারে। প্রিএম্পশন হল স্বল্প {{}} পডগুলি বাতিল করার প্রক্রিয়া যাতে উচ্চ অগ্রাধিকার পডগুলি নোডগুলিতে শিডিউল করতে পারে। ইভিকশন হল রিসোর্স-ক্ষুধার্ত নোডগুলিতে এক বা একাধিক পডগুলি প্রত্যাহার করার প্রক্রিয়া। ## শিডিউলিং -* [কুবারনেটস এর শিডিউলিং](/docs/concepts/scheduling-eviction/kube-scheduler/) -* [নোডগুলিতে পডস বরাদ্দ করা](/docs/concepts/scheduling-eviction/assign-pod-node/) -* [পডসের অতিরিক্ত ব্যয়](/docs/concepts/scheduling-eviction/pod-overhead/) -* [পডস এর টপোলজি ছড়িয়ে যাওয়ার সীমাবদ্ধতা](/docs/concepts/scheduling-eviction/topology-spread-constraints/) -* [টেইন্টস এবং টলারেশনস](/docs/concepts/scheduling-eviction/taint-and-toleration/) -* [শিডিউলিং ফ্রেমওয়ার্ক](/docs/concepts/scheduling-eviction/scheduling-framework) -* [গতিশীল রিসোর্স বরাদ্দ করা](/docs/concepts/scheduling-eviction/dynamic-resource-allocation) -* [শিডিউলিং এর টিউনিং করার কর্মক্ষমতা](/docs/concepts/scheduling-eviction/scheduler-perf-tuning/) -* [সম্প্রসারিত রিসোর্স এর জন্য রিসোর্স বিন প্যাকিং](/docs/concepts/scheduling-eviction/resource-bin-packing/) -* [পড শিডিউলিং এর সাধনযোগ্যতা](/docs/concepts/scheduling-eviction/pod-scheduling-readiness/) +* [কুবারনেটস এর শিডিউলিং](/bn/docs/concepts/scheduling-eviction/kube-scheduler/) +* [নোডগুলিতে পডস বরাদ্দ করা](/bn/docs/concepts/scheduling-eviction/assign-pod-node/) +* [পডসের অতিরিক্ত ব্যয়](/bn/docs/concepts/scheduling-eviction/pod-overhead/) +* [পডস এর টপোলজি ছড়িয়ে যাওয়ার সীমাবদ্ধতা](/bn/docs/concepts/scheduling-eviction/topology-spread-constraints/) +* [টেইন্টস এবং টলারেশনস](/bn/docs/concepts/scheduling-eviction/taint-and-toleration/) +* [শিডিউলিং ফ্রেমওয়ার্ক](/bn/docs/concepts/scheduling-eviction/scheduling-framework) +* [ডাইনামিক রিসোর্স বরাদ্দ করা](/bn/docs/concepts/scheduling-eviction/dynamic-resource-allocation) +* [শিডিউলার পারফরমেন্স টিউনিং](/bn/docs/concepts/scheduling-eviction/scheduler-perf-tuning/) +* [সম্প্রসারিত রিসোর্স এর জন্য রিসোর্স বিন প্যাকিং](/bn/docs/concepts/scheduling-eviction/resource-bin-packing/) +* [পড শিডিউলিং এর সাধনযোগ্যতা](/bn/docs/concepts/scheduling-eviction/pod-scheduling-readiness/) * [ডিশেডিউলার](https://github.com/kubernetes-sigs/descheduler#descheduler-for-kubernetes) ## পডস এর ভাঙ্গন {{}} -* [পড অগ্রাধিকার এবং প্রিম্পশন](/docs/concepts/scheduling-eviction/pod-priority-preemption/) -* [নোড-চাপের জন্য ইভিকশন](/docs/concepts/scheduling-eviction/node-pressure-eviction/) -* [API-প্রবর্তিত ইভিকশন](/docs/concepts/scheduling-eviction/api-eviction/) +* [পড অগ্রাধিকার এবং প্রিম্পশন](/bn/docs/concepts/scheduling-eviction/pod-priority-preemption/) +* [নোড-প্রেসার ইভিকশন](/bn/docs/concepts/scheduling-eviction/node-pressure-eviction/) +* [API-প্রবর্তিত ইভিকশন](/bn/docs/concepts/scheduling-eviction/api-eviction/) From 4523c48ac8248020e56918794da18a950d97bfc7 Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Tue, 26 Mar 2024 13:10:46 +0600 Subject: [PATCH 0237/1086] Update _index.md --- content/bn/blog/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/blog/_index.md b/content/bn/blog/_index.md index e2da880cea..afb22d0c8c 100644 --- a/content/bn/blog/_index.md +++ b/content/bn/blog/_index.md @@ -1,10 +1,10 @@ --- -title: কুবারনেটস ব্লগ +title: কুবারনেটিস ব্লগ linkTitle: ব্লগ menu: main: title: "ব্লগ" weight: 40 post: > -

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

+

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

--- From 1f251b7b0570e300c310fa7686a1a14ecf738ebf Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Tue, 26 Mar 2024 15:33:11 +0600 Subject: [PATCH 0238/1086] Update turnkey-solutions.md --- .../setup/production-environment/turnkey-solutions.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/content/bn/docs/setup/production-environment/turnkey-solutions.md b/content/bn/docs/setup/production-environment/turnkey-solutions.md index c552b6b8ab..7e8ff407f2 100644 --- a/content/bn/docs/setup/production-environment/turnkey-solutions.md +++ b/content/bn/docs/setup/production-environment/turnkey-solutions.md @@ -1,11 +1,13 @@ --- -title: আগে থেকে প্রস্তুত ক্লাউড সমাধান -content_type: ধারণা +title: টার্নকি ক্লাউড সলিউশন(Turnkey Cloud Solutions) +content_type: concept weight: 40 --- -এই পৃষ্ঠাটি কুবারনেটিস প্রত্যয়িত সমাধান প্রদানকারীদের একটি তালিকা প্রদান করে। প্রতিটি প্রদানকারীর পৃষ্ঠা থেকে, আপনি প্রোডাক্সশন এর জন্য প্রস্তুত ক্লাস্টার ইনস্টল এবং সেটআপ করা শিখতে পারেন +এই পৃষ্ঠাটি কুবারনেটিস প্রত্যয়িত সমাধান প্রদানকারীদের একটি তালিকা প্রদান করে। প্রতিটি প্রদানকারীর পৃষ্ঠা থেকে, +আপনি প্রোডাকশন এর জন্য প্রস্তুত ক্লাস্টার ইনস্টল এবং +সেটআপ করা শিখতে পারেন From 5127a592a68fadbb73c21e53c8a10c118db8f85c Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Tue, 26 Mar 2024 15:36:36 +0600 Subject: [PATCH 0239/1086] Update _index.md --- .../docs/setup/production-environment/tools/kubeadm/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/setup/production-environment/tools/kubeadm/_index.md b/content/bn/docs/setup/production-environment/tools/kubeadm/_index.md index 144066fffa..8b10351e49 100644 --- a/content/bn/docs/setup/production-environment/tools/kubeadm/_index.md +++ b/content/bn/docs/setup/production-environment/tools/kubeadm/_index.md @@ -1,4 +1,4 @@ --- -title: "kubeadm সাহায্যে ক্লাস্টার বুটস্ট্রাপ করা হয়" +title: "kubeadm এর সাহায্যে ক্লাস্টার বুটস্ট্রাপ করা" weight: 10 --- From b193e786ff1a11118fd4b429d072fcff69a6a544 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Wed, 27 Mar 2024 00:23:23 +0600 Subject: [PATCH 0240/1086] Update _index.md --- content/bn/docs/concepts/windows/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/concepts/windows/_index.md b/content/bn/docs/concepts/windows/_index.md index fe9bd17f9e..c0d75ab5a3 100644 --- a/content/bn/docs/concepts/windows/_index.md +++ b/content/bn/docs/concepts/windows/_index.md @@ -13,7 +13,7 @@ description: >- CNCF এবং এর মূল লিনাক্স ফাউন্ডেশন সামঞ্জস্যের প্রতি বিক্রেতা-নিরপেক্ষ পদ্ধতি গ্রহণ করে। আপনার [উইন্ডোজ সার্ভার](https://www.microsoft.com/en-us/windows-server) এ একটি কুবারনেটিস ক্লাস্টারে -একটি কর্মী নোড হিসাবে যোগদান করা সম্ভব। +একটি ওয়ার্কার নোড হিসাবে যোগদান করা সম্ভব। আপনি [উইন্ডোজে kubectl ইনস্টল এবং সেট আপ ](/bn/docs/tasks/tools/install-kubectl-windows/) করতে পারেন আপনার ক্লাস্টারের মধ্যে যে কোন অপারেটিং সিস্টেম ব্যবহার করেন না কেন। @@ -21,7 +21,7 @@ CNCF এবং এর মূল লিনাক্স ফাউন্ডেশ আপনি যদি উইন্ডোজে নোড ব্যবহার করেন তবে আপনি পড়তে পারেন: * [উইন্ডোজে নেটওয়ার্কিং](/bn/docs/concepts/services-networking/windows-networking/) -* [কুবারনেটসে উইন্ডোজ স্টোরেজ](/bn/docs/concepts/storage/windows-storage/) +* [কুবারনেটিসে উইন্ডোজ স্টোরেজ](/bn/docs/concepts/storage/windows-storage/) * [উইন্ডোজ নোডের জন্য রিসোর্স ব্যবস্থাপনা](/bn/docs/concepts/configuration/windows-resource-management/) * [উইন্ডোজ পড এবং কন্টেইনারগুলির জন্য RunAsUserName কনফিগার করুন](/bn/docs/tasks/configure-pod-container/configure-runasusername/) * [একটি উইন্ডোজ হোস্টপ্রসেস(HostProcess) পড তৈরি করুন](/bn/docs/tasks/configure-pod-container/create-hostprocess-pod/) From e3edc0bd6c3d8dbb64773b902197f75eff4ab373 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 27 Mar 2024 00:26:27 +0600 Subject: [PATCH 0241/1086] Create simple-pod.yaml --- content/bn/examples/pods/simple-pod.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 content/bn/examples/pods/simple-pod.yaml diff --git a/content/bn/examples/pods/simple-pod.yaml b/content/bn/examples/pods/simple-pod.yaml new file mode 100644 index 0000000000..0e79d8a3c6 --- /dev/null +++ b/content/bn/examples/pods/simple-pod.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Pod +metadata: + name: nginx +spec: + containers: + - name: nginx + image: nginx:1.14.2 + ports: + - containerPort: 80 From 560f9104ef9e351bcd0d5ca84777a2a96fe46c77 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 27 Mar 2024 00:50:24 +0600 Subject: [PATCH 0242/1086] Create deployment.yaml --- .../bn/examples/application/deployment.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/application/deployment.yaml diff --git a/content/bn/examples/application/deployment.yaml b/content/bn/examples/application/deployment.yaml new file mode 100644 index 0000000000..dbed8bc72b --- /dev/null +++ b/content/bn/examples/application/deployment.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + selector: + matchLabels: + app: nginx + replicas: 2 # tells deployment to run 2 pods matching the template + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.14.2 + ports: + - containerPort: 80 From bccaafe640c1d3d212b0dfc94459dca4df64e239 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 27 Mar 2024 14:13:46 +0600 Subject: [PATCH 0243/1086] Update deployment.yaml --- content/bn/examples/application/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/examples/application/deployment.yaml b/content/bn/examples/application/deployment.yaml index dbed8bc72b..6ff818be62 100644 --- a/content/bn/examples/application/deployment.yaml +++ b/content/bn/examples/application/deployment.yaml @@ -6,7 +6,7 @@ spec: selector: matchLabels: app: nginx - replicas: 2 # tells deployment to run 2 pods matching the template + replicas: 2 # ডিপ্লয়মেন্টকে টেমপ্লেটের সাথে মিলে যাওয়া 2টি পড চালাতে বলে template: metadata: labels: From c1fc4ff62a3df94e6dd904682c5a5d4ecaf5d830 Mon Sep 17 00:00:00 2001 From: Pronay Sarker Date: Fri, 29 Mar 2024 21:35:37 +0600 Subject: [PATCH 0244/1086] Update partner-style.css --- content/bn/includes/partner-style.css | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/content/bn/includes/partner-style.css b/content/bn/includes/partner-style.css index afc3b8f0be..dc120872e0 100644 --- a/content/bn/includes/partner-style.css +++ b/content/bn/includes/partner-style.css @@ -1,4 +1,4 @@ -/* বিভাগসমূহ */ +/* SECTIONS */ .section { clear: both; padding: 0px; @@ -11,7 +11,7 @@ margin-bottom: 2em; } -/* কলাম সেটআপ */ +/* COLUMN SETUP */ .col { display: block; float:left; @@ -20,7 +20,8 @@ } .col:first-child { margin-left: 0; } -/* গ্রুপিং */ + +/* GROUPING */ .group:before, .group:after { content:""; @@ -30,10 +31,10 @@ clear:both; } .group { - zoom:1; /* আইই 6/7 এর জন্য */ + zoom:1; /* For IE 6/7 */ } -/* তিনটি গ্রিড */ +/* GRID OF THREE */ .span_3_of_3 { width: 35%; background-color: #f9f9f9; @@ -51,20 +52,20 @@ } .col-container { - display: table; /* কন্টেন্টের উপাদানগুলি একটি টেবিল হিসেবে ব্যবহার করুন */ - width: 100%; /* সম্পূর্ণ প্রসারের জন্য পূর্ণ প্রস্থ */ + display: table; /* Make the container element behave like a table */ + width: 100%; /* Set full-width to expand the whole page */ padding-bottom: 30px; } .col-nav { - display: table-cell; /* কন্টেনারের উপাদানগুলি টেবিল সেল হিসেবে কাজ করার জন্য */ + display: table-cell; /* Make elements inside the container behave like table cells */ width: 18%; background-color: #f9f9f9; padding: 20px; border: 5px solid white; } -/* 480 পিক্সেলের নিচে পূর্ণ প্রস্থে যান */ +/* GO FULL WIDTH AT LESS THAN 480 PIXELS */ @media only screen and (max-width: 480px) { .col { margin: 1% 0 1% 0%;} From 0acf9ebed7fb1a0674fcc986327437abed28a4ec Mon Sep 17 00:00:00 2001 From: Pronay Sarker Date: Fri, 29 Mar 2024 21:39:23 +0600 Subject: [PATCH 0245/1086] Update _index.md --- content/bn/docs/concepts/security/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/concepts/security/_index.md b/content/bn/docs/concepts/security/_index.md index 0eb04a1551..cc87ce22cd 100644 --- a/content/bn/docs/concepts/security/_index.md +++ b/content/bn/docs/concepts/security/_index.md @@ -85,7 +85,7 @@ VMware vSphere | https://www.vmware.com/security/hardening-guides | ## পলিসি -আপনি কুবারনেটিস-নেটিভ মেকানিজম ব্যবহার করে নিরাপত্তা নীতি নির্ধারণ করতে পারেন, +আপনি কুবারনেটিস-নেটিভ মেকানিজম ব্যবহার করে নিরাপত্তা পলিসি নির্ধারণ করতে পারেন, যেমন [NetworkPolicy](/bn/docs/concepts/services-networking/network-policies/) (নেটওয়ার্ক প্যাকেট ফিল্টারিং উপর ঘোষণামূলক কন্ট্রোল) বা [ValidatingAdmisisonPolicy](/bn/docs/reference/access-authn-authz/validating-admission-policy/) @@ -117,7 +117,7 @@ VMware vSphere | https://www.vmware.com/security/hardening-guides | প্রসঙ্গ জানুন: - + * [ক্লাউড নেটিভ নিরাপত্তা এবং কুবারনেটিস](/bn/docs/concepts/security/cloud-native-security/) পড়ুন। সার্টিফাইড: From 35ddd679e536385d8b59e5d3ccc114eded53835e Mon Sep 17 00:00:00 2001 From: Pronay Sarker Date: Fri, 29 Mar 2024 21:43:17 +0600 Subject: [PATCH 0246/1086] Update _index.html --- content/bn/partners/_index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/partners/_index.html b/content/bn/partners/_index.html index 0b9f33ac6f..2dc386f010 100644 --- a/content/bn/partners/_index.html +++ b/content/bn/partners/_index.html @@ -7,7 +7,7 @@ cid: partners ---
-
কুবারনেটিস পার্টনাররা একটি স্বস্তিকারী, জীবন্ত কোডবেস তৈরি করতে সহায়তা করে যা সমতুল্য প্ল্যাটফর্মের একটি স্পেক্ট্রাম সমর্থন করে।
+
কুবারনেটিস পার্টনাররা একটি শক্তিশালী, জীবন্ত কোডবেস তৈরি করতে সহায়তা করে যা সমতুল্য প্ল্যাটফর্মের একটি স্পেক্ট্রাম সমর্থন করে।
@@ -25,7 +25,7 @@ cid: partners
সার্টিফাইড কুবারনেটিস ডিস্ট্রিবিউশন, হোস্টেড প্ল্যাটফর্ম, এবং ইনস্টলার -
সফটওয়্যার সামঞ্জস্যতা নিশ্চিত করে যে প্রতিটি বিক্রেতার সংস্করণের কুবারনেটিস প্রয়োজনীয় API সমর্থন করে। + সফটওয়্যার সামঞ্জস্যতা নিশ্চিত করে যে প্রতিটি ভেন্ডরের সংস্করণের কুবারনেটিস প্রয়োজনীয় API সমর্থন করে।




আপনি কি হতে চান From 0c3a5c8ca6b36ca23c47deb2d154fa5bbe256ce5 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Sun, 31 Mar 2024 03:30:12 +0600 Subject: [PATCH 0247/1086] Create addons.md --- content/bn/docs/reference/glossary/addons.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 content/bn/docs/reference/glossary/addons.md diff --git a/content/bn/docs/reference/glossary/addons.md b/content/bn/docs/reference/glossary/addons.md new file mode 100644 index 0000000000..3d70d7daea --- /dev/null +++ b/content/bn/docs/reference/glossary/addons.md @@ -0,0 +1,16 @@ +--- +title: অ্যাড-অন +id: addons +date: 2019-12-15 +full_link: /docs/concepts/cluster-administration/addons/ +short_description: > + কুবারনেটিসের কার্যকারিতা প্রসারিত করে এমন রিসোর্স। + +aka: +tags: +- tool +--- + কুবারনেটিসের কার্যকারিতা প্রসারিত করে এমন রিসোর্স। + + +[অ্যাডঅন ইনস্টল করা](/bn/docs/concepts/cluster-administration/addons/) আপনার ক্লাস্টারের সাথে অ্যাড-অন ব্যবহার করার বিষয়ে আরও ব্যাখ্যা করে এবং কিছু জনপ্রিয় অ্যাড-অন তালিকাভুক্ত করে। From acf8918f5476f6c77979b086b506c582fb1c550f Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Sun, 31 Mar 2024 17:01:20 +0600 Subject: [PATCH 0248/1086] Localization of namespace.md --- content/bn/docs/reference/glossary/namespace.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 content/bn/docs/reference/glossary/namespace.md diff --git a/content/bn/docs/reference/glossary/namespace.md b/content/bn/docs/reference/glossary/namespace.md new file mode 100644 index 0000000000..318db14f0c --- /dev/null +++ b/content/bn/docs/reference/glossary/namespace.md @@ -0,0 +1,15 @@ +--- +title: নেমস্পেস(namespace) +id: নেমস্পেস +date: ২০১৮-০৪-১২ +full_link: /docs/concepts/overview/working-with-objects/namespaces +short_description: > + একটি অ্যাবস্ট্রাকশন যা কুবার্নেটিস ব্যবহার করে রিসোর্স গ্রুপের আইসোলেশন সাপোর্ট করার জন্য একটি একক ক্লাস্টার এর মধ্য। + +aka: +tags: +- fundamental +--- +একটি অ্যাবস্ট্রাকশন যা কুবার্নেটিস ব্যবহার করে রিসোর্স গ্রুপের আইসোলেশন সাপোর্ট করার জন্য একটি একক {{< glossary_tooltip text="cluster" term_id="cluster" >}} এর মধ্যে। + +নেমস্পেস একটি ক্লাস্টারে বস্তুগুলিকে(Objects) সংগঠিত করতে এবং ক্লাস্টার রিসোর্সগুলোকে বিভক্ত করার উপায় প্রদান করতে ব্যবহৃত হয়। রিসোর্সের নাম একটি নেমস্পেস এর মধ্যে অনন্য(unique) হতে হবে, কিন্তু একাধিক নেমস্পেস এর মধ্যে নয়। নেমস্পেস-ভিত্তিক স্কোপিং শুধুমাত্র নেমস্পেস এর মধ্যে থাকা বস্তুর(Objects) জন্য প্রযোজ্য (যেমন ডিপ্লয়মেন্টস, সার্ভিসেস, ইত্যাদি) এবং ক্লাস্টার-ওয়াইড অবজেক্টের জন্য নয় (যেমন স্টোরেজক্লাস, নোডস, পারসিস্টেন্ট ভলিউম, ইত্যাদি)। From e1172fc512a202a8765a28701f8953b06943c2cf Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Sun, 31 Mar 2024 21:27:13 +0600 Subject: [PATCH 0249/1086] Update namespace.md Added a comma --- content/bn/docs/reference/glossary/namespace.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/reference/glossary/namespace.md b/content/bn/docs/reference/glossary/namespace.md index 318db14f0c..fbb6f6ecc6 100644 --- a/content/bn/docs/reference/glossary/namespace.md +++ b/content/bn/docs/reference/glossary/namespace.md @@ -4,12 +4,12 @@ id: নেমস্পেস date: ২০১৮-০৪-১২ full_link: /docs/concepts/overview/working-with-objects/namespaces short_description: > - একটি অ্যাবস্ট্রাকশন যা কুবার্নেটিস ব্যবহার করে রিসোর্স গ্রুপের আইসোলেশন সাপোর্ট করার জন্য একটি একক ক্লাস্টার এর মধ্য। + একটি অ্যাবস্ট্রাকশন যা কুবার্নেটিস ব্যবহার করে রিসোর্স গ্রুপের আইসোলেশন সাপোর্ট করার জন্য, একটি একক ক্লাস্টার এর মধ্য। aka: tags: - fundamental --- -একটি অ্যাবস্ট্রাকশন যা কুবার্নেটিস ব্যবহার করে রিসোর্স গ্রুপের আইসোলেশন সাপোর্ট করার জন্য একটি একক {{< glossary_tooltip text="cluster" term_id="cluster" >}} এর মধ্যে। +একটি অ্যাবস্ট্রাকশন যা কুবার্নেটিস ব্যবহার করে রিসোর্স গ্রুপের আইসোলেশন সাপোর্ট করার জন্য, একটি একক {{< glossary_tooltip text="cluster" term_id="cluster" >}} এর মধ্যে। নেমস্পেস একটি ক্লাস্টারে বস্তুগুলিকে(Objects) সংগঠিত করতে এবং ক্লাস্টার রিসোর্সগুলোকে বিভক্ত করার উপায় প্রদান করতে ব্যবহৃত হয়। রিসোর্সের নাম একটি নেমস্পেস এর মধ্যে অনন্য(unique) হতে হবে, কিন্তু একাধিক নেমস্পেস এর মধ্যে নয়। নেমস্পেস-ভিত্তিক স্কোপিং শুধুমাত্র নেমস্পেস এর মধ্যে থাকা বস্তুর(Objects) জন্য প্রযোজ্য (যেমন ডিপ্লয়মেন্টস, সার্ভিসেস, ইত্যাদি) এবং ক্লাস্টার-ওয়াইড অবজেক্টের জন্য নয় (যেমন স্টোরেজক্লাস, নোডস, পারসিস্টেন্ট ভলিউম, ইত্যাদি)। From db89603b76888387d0a8f1a0e1a3c7c3a80cdc18 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Sun, 31 Mar 2024 21:29:09 +0600 Subject: [PATCH 0250/1086] Update namespace.md fixes a typo --- content/bn/docs/reference/glossary/namespace.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/reference/glossary/namespace.md b/content/bn/docs/reference/glossary/namespace.md index fbb6f6ecc6..b2c695a877 100644 --- a/content/bn/docs/reference/glossary/namespace.md +++ b/content/bn/docs/reference/glossary/namespace.md @@ -4,7 +4,7 @@ id: নেমস্পেস date: ২০১৮-০৪-১২ full_link: /docs/concepts/overview/working-with-objects/namespaces short_description: > - একটি অ্যাবস্ট্রাকশন যা কুবার্নেটিস ব্যবহার করে রিসোর্স গ্রুপের আইসোলেশন সাপোর্ট করার জন্য, একটি একক ক্লাস্টার এর মধ্য। + একটি অ্যাবস্ট্রাকশন যা কুবার্নেটিস ব্যবহার করে রিসোর্স গ্রুপের আইসোলেশন সাপোর্ট করার জন্য, একটি একক ক্লাস্টার এর মধ্যে। aka: tags: From d30aa8b5c729be8541a1dab2e84173bc79046d4a Mon Sep 17 00:00:00 2001 From: AdiyanAbdurRahman <78403903+AdiyanAbdurRahman@users.noreply.github.com> Date: Sun, 31 Mar 2024 21:32:17 +0600 Subject: [PATCH 0251/1086] Create job.md --- content/bn/docs/reference/glossary/job.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/docs/reference/glossary/job.md diff --git a/content/bn/docs/reference/glossary/job.md b/content/bn/docs/reference/glossary/job.md new file mode 100644 index 0000000000..48ea468c5b --- /dev/null +++ b/content/bn/docs/reference/glossary/job.md @@ -0,0 +1,19 @@ +--- +title: জব +id: job +date: 2018-04-12 +full_link: /docs/concepts/workloads/controllers/job/ +short_description: > + একটি সীমিত বা ব্যাচ টাস্ক যা সম্পূর্ণ হওয়া পর্যন্ত চলে৷ + +aka: +tags: +- fundamental +- core-object +- workload +--- + একটি সীমিত বা ব্যাচ টাস্ক যা সম্পূর্ণ হওয়া পর্যন্ত চলে৷ + + + +এক বা একাধিক {{< glossary_tooltip term_id="pod" >}} অবজেক্ট তৈরি করে এবং নিশ্চিত করে যে তাদের একটি নির্দিষ্ট সংখ্যক সফলভাবে সমাপ্ত হয়েছে। পডস(Pods) সফলভাবে সম্পন্ন হওয়ার সাথে সাথে জব(Job) সফল সমাপ্তিগুলিকে ট্র্যাক করে৷ From 33564c5fd3ae1a3d975f3321850e0439a556788a Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 1 Apr 2024 02:11:12 +0600 Subject: [PATCH 0252/1086] Update addons.md --- content/bn/docs/reference/glossary/addons.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/reference/glossary/addons.md b/content/bn/docs/reference/glossary/addons.md index 3d70d7daea..03021f212c 100644 --- a/content/bn/docs/reference/glossary/addons.md +++ b/content/bn/docs/reference/glossary/addons.md @@ -2,7 +2,7 @@ title: অ্যাড-অন id: addons date: 2019-12-15 -full_link: /docs/concepts/cluster-administration/addons/ +full_link: /bn/docs/concepts/cluster-administration/addons/ short_description: > কুবারনেটিসের কার্যকারিতা প্রসারিত করে এমন রিসোর্স। From 4cb0e477f5f0938f7371a443310b9278056dc0c1 Mon Sep 17 00:00:00 2001 From: Arhell Date: Mon, 1 Apr 2024 00:33:20 +0300 Subject: [PATCH 0253/1086] [ko] Added link to netcat official site and '-v' key to netcat command example --- .../production-environment/tools/kubeadm/install-kubeadm.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md b/content/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md index 0de4f7a4d1..2921943935 100644 --- a/content/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md +++ b/content/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md @@ -48,10 +48,10 @@ card: ## 필수 포트 확인 {#check-required-ports} [필수 포트들](/ko/docs/reference/networking/ports-and-protocols/)은 쿠버네티스 컴포넌트들이 서로 통신하기 위해서 열려 있어야 -한다. 다음과 같이 netcat과 같은 도구를 이용하여 포트가 열려 있는지 확인해 볼 수 있다. +한다. 다음과 같이 [netcat](https://netcat.sourceforge.net)과 같은 도구를 이용하여 포트가 열려 있는지 확인해 볼 수 있다. ```shell -nc 127.0.0.1 6443 +nc 127.0.0.1 6443 -v ``` 사용자가 사용하는 파드 네트워크 플러그인은 특정 포트를 열어야 할 수도 From b26c7cf472bd62ce4db2a732afa8c9e1b5643922 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 1 Apr 2024 06:25:58 +0600 Subject: [PATCH 0254/1086] Create admission-controller.md --- .../glossary/admission-controller.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 content/bn/docs/reference/glossary/admission-controller.md diff --git a/content/bn/docs/reference/glossary/admission-controller.md b/content/bn/docs/reference/glossary/admission-controller.md new file mode 100644 index 0000000000..38eff31e65 --- /dev/null +++ b/content/bn/docs/reference/glossary/admission-controller.md @@ -0,0 +1,22 @@ +--- +title: এডমিশন কন্ট্রোলার +id: admission-controller +date: 2019-06-28 +full_link: /bn/docs/reference/access-authn-authz/admission-controllers/ +short_description: > + কোডের একটি অংশ যা অবজেক্টের অধ্যবসায়ের পূর্বে কুবারনেটিস এপিআই(API) সার্ভারের অনুরোধগুলিকে বাধা দেয়। + +aka: +tags: +- extension +- security +--- +কোডের একটি অংশ যা অবজেক্টের অধ্যবসায়ের পূর্বে কুবারনেটিস এপিআই (API) সার্ভারের অনুরোধগুলিকে বাধা দেয়। + + + +এডমিশন কন্ট্রোলারগুলি কুবারনেটিস এপিআই (API) সার্ভারের জন্য কনফিগারযোগ্য এবং হতে পারে "বৈধকরণ", "পরিবর্তন" বা +উভয়ই। যেকোনো এডমিশন কন্ট্রোলার অনুরোধ প্রত্যাখ্যান করতে পারে। পরিবর্তন কন্ট্রোলারগুলি যে বস্তুগুলি স্বীকার করে তা পরিবর্তন করতে পারে; +কন্ট্রোলারগুলি বৈধ নাও হতে পারে + +* [কুবারনেটিস ডকুমেন্টেশনে এডমিশন কন্ট্রোলার](/bn/docs/reference/access-authn-authz/admission-controllers/) From 69fe6451a5542edd9729ba7d7cdd6d6f852c65dd Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Mon, 1 Apr 2024 10:26:22 +0600 Subject: [PATCH 0255/1086] [bn] Localization of cluster.md Localized the cluster.md to bangali --- content/bn/docs/reference/glossary/cluster.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 content/bn/docs/reference/glossary/cluster.md diff --git a/content/bn/docs/reference/glossary/cluster.md b/content/bn/docs/reference/glossary/cluster.md new file mode 100644 index 0000000000..ba52b8ba52 --- /dev/null +++ b/content/bn/docs/reference/glossary/cluster.md @@ -0,0 +1,23 @@ +--- +title: ক্লাস্টার(Cluster) +id: ক্লাস্টার +date: ২০১৯-০৬-১৫ +full_link: +short_description: > + ওয়ার্কিং(working) মেশিনের একটি সেট, যাকে নোড বলা হয়, যা কন্টেইনারাইজড অ্যাপ্লিকেশন চালায়। প্রতিটি ক্লাস্টারে কমপক্ষে একটি ওয়ার্কার নোড থাকে। + +aka: +tags: +- fundamental +- operation +--- +ওয়ার্কিং(working) মেশিনের একটি সেট, যাকে {{< glossary_tooltip text="nodes" term_id="node" >}} বলা হয়, +যা কন্টেইনারাইজড অ্যাপ্লিকেশন চালায়। প্রতিটি ক্লাস্টারে কমপক্ষে একটি ওয়ার্কার নোড থাকে। + + +ওয়ার্কিং নোড(গুলো) হোস্ট করে {{< glossary_tooltip text="Pods" term_id="pod" >}} যা হচ্ছে +অ্যাপ্লিকেশন এর কাজেরচাপ(workload) এর উপাদান। +{{< glossary_tooltip text="control plane" term_id="control-plane" >}} পরিচালনা করে +ওয়ার্কার নোডগুলো(nodes) এবং পডগুলো(pods)। উৎপাদন পরিবেশে, কন্ট্রোল প্লেন(control plane) সাধারণত +একাধিক কম্পিউটার জুড়ে চলে এবং একটি ক্লাস্টার সাধারণত একাধিক নোড চালায়, প্রদান করে +ত্রুটি-সহনশীলতা(fault-tolerance) এবং উচ্চ প্রাপ্যতা(high-availability)। From 3e7bd64ec78829fb0851635a4f92dc500cb933a6 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Tue, 2 Apr 2024 12:00:55 +0600 Subject: [PATCH 0256/1086] =?UTF-8?q?Replace=20=E0=A6=85=E0=A6=A8=E0=A7=81?= =?UTF-8?q?=E0=A6=AE=E0=A7=8B=E0=A6=A6=E0=A6=A8=20with=20=E0=A6=85?= =?UTF-8?q?=E0=A6=A5=E0=A7=8B=E0=A6=B0=E0=A6=BE=E0=A6=87=E0=A6=9C=E0=A7=87?= =?UTF-8?q?=E0=A6=B6=E0=A6=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bn/docs/concepts/extend-kubernetes/_index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/content/bn/docs/concepts/extend-kubernetes/_index.md b/content/bn/docs/concepts/extend-kubernetes/_index.md index 08354bc5b6..49f310d627 100644 --- a/content/bn/docs/concepts/extend-kubernetes/_index.md +++ b/content/bn/docs/concepts/extend-kubernetes/_index.md @@ -209,7 +209,7 @@ API সংজ্ঞায়িত করতে চান এবং কুবা এই প্রবাহ সম্পর্কে আরও জানতে [কুবারনেটিস API-এ অ্যাক্সেস কন্ট্রোল করা](/bn/docs/concepts/security/controlling-access/) দেখুন। -কুবারনেটিস অথেন্টিকেশন/অনুমোদন প্রবাহের প্রতিটি ধাপ এক্সটেনশন পয়েন্ট অফার করে। +কুবারনেটিস অথেন্টিকেশন/অথোরাইজেশন প্রবাহের প্রতিটি ধাপ এক্সটেনশন পয়েন্ট অফার করে। ### অথেন্টিকেশন(Authentication) @@ -217,19 +217,19 @@ API সংজ্ঞায়িত করতে চান এবং কুবা [অথেন্টিকেশন](/bn/docs/reference/access-authn-authz/authentication/) শিরোনাম বা সার্টিফিকেট যুক্ত করে। কুবারনেটিস এর বেশ কয়েকটি বিল্ট-ইন অথেন্টিকেশন পদ্ধতি রয়েছে যা এটি সাপোর্ট করে। -এটি একটি অথেন্টিকেটিং প্রক্সির পিছনেও বসতে পারে এবং এটি একটি `অনুমোদন(Authorization)` টোকেন পাঠাতে পারে যাচাইয়ের জন্য: +এটি একটি অথেন্টিকেটিং প্রক্সির পিছনেও বসতে পারে এবং এটি একটি `অথোরাইজেশন(Authorization)` টোকেন পাঠাতে পারে যাচাইয়ের জন্য: শিরোনাম থেকে একটি রিমোট সার্ভিসে (একটি [অথেন্টিকেশন webhook](/bn/docs/reference/access-authn-authz/authentication/#webhook-token-authentication)) যদি সেগুলো আপনার প্রয়োজনগুলো পূরণ না করে৷ -### অনুমোদন(Authorization) +### অথোরাইজেশন(Authorization) -[অনুমোদন](/bn/docs/reference/access-authn-authz/authorization/) নির্ধারণ করে যে নির্দিষ্ট ব্যবহারকারীরা API রিসোর্সগুলোতে +[অথোরাইজেশন](/bn/docs/reference/access-authn-authz/authorization/) নির্ধারণ করে যে নির্দিষ্ট ব্যবহারকারীরা API রিসোর্সগুলোতে পড়তে, লিখতে এবং অন্যান্য ক্রিয়াকলাপ করতে পারে কিনা। এটি সম্পূর্ণ রিসোর্সের লেভেলে কাজ করে -- এটি ইচ্ছামত অবজেক্টের ফিল্ডের উপর ভিত্তি করে বৈষম্য করে না। -যদি বিল্ট-ইন অনুমোদনের উপায়গুলো আপনার চাহিদা পূরণ না করে, -তাহলে একটি [অনুমোদন webhook](/bn/docs/reference/access-authn-authz/webhook/) -কাস্টম কোডে কল করার অনুমতি দেয় যা একটি অনুমোদনের সিদ্ধান্ত নেয়। +যদি বিল্ট-ইন অথোরাইজেশনের উপায়গুলো আপনার চাহিদা পূরণ না করে, +তাহলে একটি [অথোরাইজেশন webhook](/bn/docs/reference/access-authn-authz/webhook/) +কাস্টম কোডে কল করার অনুমতি দেয় যা একটি অথোরাইজেশনের সিদ্ধান্ত নেয়। ### ডাইনামিক অ্যাডমিশন কন্ট্রোল From 5ec7c1d39b5469f47881f181ccd65a687a724383 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Tue, 2 Apr 2024 13:20:00 +0600 Subject: [PATCH 0257/1086] id and text localization problem resolve cluster.md resolved id and text localization --- content/bn/docs/reference/glossary/cluster.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/bn/docs/reference/glossary/cluster.md b/content/bn/docs/reference/glossary/cluster.md index ba52b8ba52..7c81b02920 100644 --- a/content/bn/docs/reference/glossary/cluster.md +++ b/content/bn/docs/reference/glossary/cluster.md @@ -1,7 +1,7 @@ --- title: ক্লাস্টার(Cluster) -id: ক্লাস্টার -date: ২০১৯-০৬-১৫ +id: cluster +date: 2019-06-15 full_link: short_description: > ওয়ার্কিং(working) মেশিনের একটি সেট, যাকে নোড বলা হয়, যা কন্টেইনারাইজড অ্যাপ্লিকেশন চালায়। প্রতিটি ক্লাস্টারে কমপক্ষে একটি ওয়ার্কার নোড থাকে। @@ -11,13 +11,13 @@ tags: - fundamental - operation --- -ওয়ার্কিং(working) মেশিনের একটি সেট, যাকে {{< glossary_tooltip text="nodes" term_id="node" >}} বলা হয়, +ওয়ার্কিং(working) মেশিনের একটি সেট, যাকে {{< glossary_tooltip text="নোডগুলো" term_id="node" >}} বলা হয়, যা কন্টেইনারাইজড অ্যাপ্লিকেশন চালায়। প্রতিটি ক্লাস্টারে কমপক্ষে একটি ওয়ার্কার নোড থাকে। -ওয়ার্কিং নোড(গুলো) হোস্ট করে {{< glossary_tooltip text="Pods" term_id="pod" >}} যা হচ্ছে +ওয়ার্কিং নোড(গুলো) হোস্ট করে {{< glossary_tooltip text="পডগুলো" term_id="pod" >}} যা হচ্ছে অ্যাপ্লিকেশন এর কাজেরচাপ(workload) এর উপাদান। -{{< glossary_tooltip text="control plane" term_id="control-plane" >}} পরিচালনা করে +{{< glossary_tooltip text="কন্ট্রোল প্লেন" term_id="control-plane" >}} পরিচালনা করে ওয়ার্কার নোডগুলো(nodes) এবং পডগুলো(pods)। উৎপাদন পরিবেশে, কন্ট্রোল প্লেন(control plane) সাধারণত একাধিক কম্পিউটার জুড়ে চলে এবং একটি ক্লাস্টার সাধারণত একাধিক নোড চালায়, প্রদান করে ত্রুটি-সহনশীলতা(fault-tolerance) এবং উচ্চ প্রাপ্যতা(high-availability)। From 135b6509bb15040e82a4c86774831a9ca276947e Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Tue, 2 Apr 2024 14:14:02 +0600 Subject: [PATCH 0258/1086] fixed namespace.md Id fixed date fixed link fixed Text inside {{<>}} fixed indentation fixed Text after fixed --- content/bn/docs/reference/glossary/namespace.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/content/bn/docs/reference/glossary/namespace.md b/content/bn/docs/reference/glossary/namespace.md index b2c695a877..05de1bb9c3 100644 --- a/content/bn/docs/reference/glossary/namespace.md +++ b/content/bn/docs/reference/glossary/namespace.md @@ -1,8 +1,8 @@ --- title: নেমস্পেস(namespace) -id: নেমস্পেস -date: ২০১৮-০৪-১২ -full_link: /docs/concepts/overview/working-with-objects/namespaces +id: namespace +date: 2018-04-12 +full_link: /bn/docs/concepts/overview/working-with-objects/namespaces short_description: > একটি অ্যাবস্ট্রাকশন যা কুবার্নেটিস ব্যবহার করে রিসোর্স গ্রুপের আইসোলেশন সাপোর্ট করার জন্য, একটি একক ক্লাস্টার এর মধ্যে। @@ -10,6 +10,8 @@ aka: tags: - fundamental --- -একটি অ্যাবস্ট্রাকশন যা কুবার্নেটিস ব্যবহার করে রিসোর্স গ্রুপের আইসোলেশন সাপোর্ট করার জন্য, একটি একক {{< glossary_tooltip text="cluster" term_id="cluster" >}} এর মধ্যে। +একটি অ্যাবস্ট্রাকশন যা কুবার্নেটিস ব্যবহার করে রিসোর্স গ্রুপের আইসোলেশন সাপোর্ট করার জন্য, একটি একক {{< glossary_tooltip text="ক্লাস্টার" term_id="cluster" >}} এর মধ্যে। + -নেমস্পেস একটি ক্লাস্টারে বস্তুগুলিকে(Objects) সংগঠিত করতে এবং ক্লাস্টার রিসোর্সগুলোকে বিভক্ত করার উপায় প্রদান করতে ব্যবহৃত হয়। রিসোর্সের নাম একটি নেমস্পেস এর মধ্যে অনন্য(unique) হতে হবে, কিন্তু একাধিক নেমস্পেস এর মধ্যে নয়। নেমস্পেস-ভিত্তিক স্কোপিং শুধুমাত্র নেমস্পেস এর মধ্যে থাকা বস্তুর(Objects) জন্য প্রযোজ্য (যেমন ডিপ্লয়মেন্টস, সার্ভিসেস, ইত্যাদি) এবং ক্লাস্টার-ওয়াইড অবজেক্টের জন্য নয় (যেমন স্টোরেজক্লাস, নোডস, পারসিস্টেন্ট ভলিউম, ইত্যাদি)। + +নেমস্পেস একটি ক্লাস্টারে অবজেক্টগুলিকে সংগঠিত করতে এবং ক্লাস্টার রিসোর্সগুলোকে বিভক্ত করার উপায় প্রদান করতে ব্যবহৃত হয়। রিসোর্সের নাম একটি নেমস্পেস এর মধ্যে অনন্য(unique) হতে হবে, কিন্তু নেমস্পেস জুড়ে নয় নয়। নেমস্পেস-ভিত্তিক স্কোপিং শুধুমাত্র নেমস্পেস এর মধ্যে থাকা অবজেক্টের জন্য প্রযোজ্য (যেমন ডিপ্লয়মেন্টস, সার্ভিস, ইত্যাদি) এবং ক্লাস্টার-ওয়াইড অবজেক্টের জন্য নয় (যেমন স্টোরেজক্লাস, নোড, পারসিস্টেন্ট ভলিউম, ইত্যাদি)। From 777aba69000f57342a4670ef9c13865b5a943ac0 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Tue, 2 Apr 2024 14:26:47 +0600 Subject: [PATCH 0259/1086] Fixed cluster.md Id fixed date fixed short description fixed description fixed --- content/bn/docs/reference/glossary/cluster.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/content/bn/docs/reference/glossary/cluster.md b/content/bn/docs/reference/glossary/cluster.md index 7c81b02920..699a4469c9 100644 --- a/content/bn/docs/reference/glossary/cluster.md +++ b/content/bn/docs/reference/glossary/cluster.md @@ -4,20 +4,20 @@ id: cluster date: 2019-06-15 full_link: short_description: > - ওয়ার্কিং(working) মেশিনের একটি সেট, যাকে নোড বলা হয়, যা কন্টেইনারাইজড অ্যাপ্লিকেশন চালায়। প্রতিটি ক্লাস্টারে কমপক্ষে একটি ওয়ার্কার নোড থাকে। + ওয়ার্কার(worker) মেশিনের একটি সেট, যাকে নোড বলা হয়, যা কন্টেইনারাইজড অ্যাপ্লিকেশন চালায়। প্রতিটি ক্লাস্টারে কমপক্ষে একটি ওয়ার্কার নোড থাকে। aka: tags: - fundamental - operation --- -ওয়ার্কিং(working) মেশিনের একটি সেট, যাকে {{< glossary_tooltip text="নোডগুলো" term_id="node" >}} বলা হয়, +ওয়ার্কার(worker) মেশিনের একটি সেট, যাকে {{< glossary_tooltip text="নোড" term_id="node" >}} বলা হয়, যা কন্টেইনারাইজড অ্যাপ্লিকেশন চালায়। প্রতিটি ক্লাস্টারে কমপক্ষে একটি ওয়ার্কার নোড থাকে। -ওয়ার্কিং নোড(গুলো) হোস্ট করে {{< glossary_tooltip text="পডগুলো" term_id="pod" >}} যা হচ্ছে -অ্যাপ্লিকেশন এর কাজেরচাপ(workload) এর উপাদান। -{{< glossary_tooltip text="কন্ট্রোল প্লেন" term_id="control-plane" >}} পরিচালনা করে -ওয়ার্কার নোডগুলো(nodes) এবং পডগুলো(pods)। উৎপাদন পরিবেশে, কন্ট্রোল প্লেন(control plane) সাধারণত -একাধিক কম্পিউটার জুড়ে চলে এবং একটি ক্লাস্টার সাধারণত একাধিক নোড চালায়, প্রদান করে -ত্রুটি-সহনশীলতা(fault-tolerance) এবং উচ্চ প্রাপ্যতা(high-availability)। +ওয়ার্কিং নোড(গুলো) {{< glossary_tooltip text="পড" term_id="pod" >}} হোস্ট করে যা +অ্যাপ্লিকেশন ওয়ার্কলোড এর উপাদান । +{{< glossary_tooltip text="কন্ট্রোল প্লেন" term_id="control-plane" >}} ক্লাস্টারে থাকা +ওয়ার্কার নোডগুলো এবং পডগুলো। প্রোডাকশন পরিবেশে, কন্ট্রোল প্লেন সাধারণত একাধিক +কম্পিউটার জুড়ে চলে এবং একটি ক্লাস্টার সাধারণত একাধিক নোড চালায়, +ত্রুটি-সহনশীলতা(fault-tolerance) এবং উচ্চ প্রাপ্যতা(high-availability) প্রদান করে । From 5dd23064ea9d9e465bf0141cf7317c1e1f325b27 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Tue, 2 Apr 2024 18:04:48 +0600 Subject: [PATCH 0260/1086] Update _index.md --- .../concepts/cluster-administration/_index.md | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/content/bn/docs/concepts/cluster-administration/_index.md b/content/bn/docs/concepts/cluster-administration/_index.md index dc829f1892..b8270565c6 100644 --- a/content/bn/docs/concepts/cluster-administration/_index.md +++ b/content/bn/docs/concepts/cluster-administration/_index.md @@ -1,28 +1,28 @@ --- -title: ক্লাস্টার প্রশাসন +title: ক্লাস্টার অ্যাডমিনিস্ট্রেশন weight: 100 content_type: concept description: > - একটি কুবারনেটিস ক্লাস্টার তৈরি বা পরিচালনার জন্য প্রাসঙ্গিক নিম্ন-স্তরের বিশদ। + একটি কুবারনেটিস ক্লাস্টার তৈরি বা পরিচালনার জন্য প্রাসঙ্গিক নিম্ন-স্তরের ডিটেইল। no_list: true card: name: setup weight: 60 anchors: - anchor: "#securing-a-cluster" - title: একটি ক্লাস্টার সুরক্ষিত + title: একটি ক্লাস্টার সুরক্ষিতকরণ --- -ক্লাস্টার প্রশাসন ওভারভিউ(overview) যে কেউ একটি কুবারনেটিস ক্লাস্টার তৈরি বা পরিচালনা করছেন তাঁর জন্য। -এটি মূল কুবারনেটিসের এর সাথে কিছু পরিচিতি অনুমান করে [ধারণা](/bn/docs/concepts/)। +ক্লাস্টার অ্যাডমিনিস্ট্রেশন ওভারভিউ(overview) যে কেউ একটি কুবারনেটিস ক্লাস্টার তৈরি বা পরিচালনা করছেন তাঁর জন্য। +এটি মূল কুবারনেটিসের [ধারণাগুলোর](/bn/docs/concepts/) সাথে কিছু পরিচিতি আশা করে ।। ## একটি ক্লাস্টার পরিকল্পনা -এ নির্দেশিকাগুলি দেখুন [সেট আপ](/bn/docs/setup/) কুবারনেটিস ক্লাস্টারগুলি কীভাবে পরিকল্পনা, সেট আপ এবং কনফিগার +[সেট আপ](/bn/docs/setup/) এ নির্দেশিকাগুলি দেখুন কুবারনেটিস ক্লাস্টারগুলি কীভাবে পরিকল্পনা, সেট আপ এবং কনফিগার করতে হয় তার উদাহরণগুলির জন্য৷ এই নিবন্ধে তালিকাভুক্ত সমাধানগুলিকে বলা হয় *distros*। {{< note >}} @@ -49,6 +49,7 @@ card: ## একটি ক্লাস্টার পরিচালনা করা * শিখুন কিভাবে [নোড পরিচালনা করবেন](/bn/docs/concepts/architecture/nodes/)। + * এ সম্পর্কে পড়ুন [cluster autoscaling](/docs/concepts/cluster-administration/cluster-autoscaling/). * কিভাবে সেট আপ এবং পরিচালনা করতে হয় [রিসোর্স কোটা](/bn/docs/concepts/policy/resource-quotas/) শেয়ার্ড ক্লাস্টারগুলির জন্য তা শিখুন। @@ -60,21 +61,21 @@ card: * [কুবারনেটিস কন্টেইনার এনভায়রনমেন্ট](/bn/docs/concepts/containers/container-environment/) একটি কুবারনেটিস নোডে Kubelet পরিচালিত কন্টেইনারগুলির পরিবেশ বর্ণনা করে। -* [Kubernetes API-তে অ্যাক্সেস নিয়ন্ত্রণ](/bn/docs/concepts/security/controlling-access) বর্ণনা করে - কিভাবে কুবারনেটিস তার নিজস্ব API এর জন্য অ্যাক্সেস নিয়ন্ত্রণ প্রয়োগ করে। +* [Kubernetes API-তে অ্যাক্সেস কন্ট্রোল](/bn/docs/concepts/security/controlling-access) বর্ণনা করে + কিভাবে কুবারনেটিস তার নিজস্ব API এর জন্য অ্যাক্সেস কন্ট্রোল প্রয়োগ করে। -* [যাচাইকরণ](/bn/docs/reference/access-authn-authz/authentication/) বিভিন্ন যাচাইকরণ বিকল্প সহ, - কুবারনেটিসে যাচাইকরণের ব্যাখ্যা দেয়। +* [অথেন্টিকেশন](/bn/docs/reference/access-authn-authz/authentication/) বিভিন্ন অথেন্টিকেশন বিকল্প সহ, + কুবারনেটিসে অথেন্টিকেশনের ব্যাখ্যা দেয়। -* [অথোরাইজেশন](/bn/docs/reference/access-authn-authz/authorization/) যাচাইকরণ থেকে আলাদা, +* [অথোরাইজেশন](/bn/docs/reference/access-authn-authz/authorization/) অথেন্টিকেশন থেকে আলাদা, এবং HTTP কলগুলি কীভাবে পরিচালনা করা হয় তা নিয়ন্ত্রণ করে। -* [ভর্তি নিয়ন্ত্রকদের ব্যবহার](/bn/docs/reference/access-authn-authz/admission-controllers/) - প্লাগ-ইনগুলি ব্যাখ্যা করে যা যাচাইকরণ এবং অনুমোদনের পরে কুবারনেটস API সার্ভারে +* [অ্যাডমিশন কন্ট্রোলের ব্যবহার](/bn/docs/reference/access-authn-authz/admission-controllers/) + ব্যাখ্যা করে প্লাগ-ইনগুলি প্লাগ-ইনগুলি অথেন্টিকেশন এবং অথোরাইজেশনের পরে কুবারনেটস API সার্ভারে অনুরোধগুলিকে বাধা দেয়। * [কুবারনেটিস ক্লাস্টারে Sysctls ব্যবহার ](/bn/docs/tasks/administer-cluster/sysctl-cluster/) - একজন প্রশাসকের কাছে বর্ণনা করে যে কীভাবে কার্নেল প্যারামিটার সেট করতে `sysctl` কমান্ড-লাইন টুল ব্যবহার করতে হয় + একজন অ্যাডমিনিস্ট্রেটর কাছে বর্ণনা করে যে কীভাবে কার্নেল প্যারামিটার সেট করতে `sysctl` কমান্ড-লাইন টুল ব্যবহার করতে হয় । * [অডিটিং](/bn/docs/tasks/debug/debug-cluster/audit/) বর্ণনা করে কিভাবে কুবারনেটিসের অডিট লগের সাথে @@ -84,9 +85,9 @@ card: * [কন্ট্রোল প্লেন-নোড কমিউনিকেশন](/bn/docs/concepts/architecture/control-plane-node-communication/) * [TLS বুটস্ট্র্যাপিং](/bn/docs/reference/access-authn-authz/kubelet-tls-bootstrapping/) -* [Kubelet যাচাইকরণ/অনুমোদন](/bn/docs/reference/access-authn-authz/kubelet-authn-authz/) +* [Kubelet অথেন্টিকেশন /অথোরাইজেশন](/bn/docs/reference/access-authn-authz/kubelet-authn-authz/) -## ঐচ্ছিক ক্লাস্টার সার্ভিস +## অপশনাল ক্লাস্টার সার্ভিস * [DNS ইন্টিগ্রেশন](/bn/docs/concepts/services-networking/dns-pod-service/) বর্ণনা করে কিভাবে সরাসরি কুবারনেটিস পরিষেবাতে একটি DNS নাম সমাধান করা যায়। From c631c66df23ab5c725045ba4324e0c7b6bfd386b Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Tue, 2 Apr 2024 19:15:49 +0600 Subject: [PATCH 0261/1086] Update _index.md --- content/bn/docs/setup/_index.md | 40 ++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/content/bn/docs/setup/_index.md b/content/bn/docs/setup/_index.md index 64684aaecf..0defff2c76 100644 --- a/content/bn/docs/setup/_index.md +++ b/content/bn/docs/setup/_index.md @@ -8,57 +8,65 @@ card: name: setup weight: 20 anchors: - - anchor: "#লার্নিং পরিবেশ" + - anchor: "#learning-environment" title: লার্নিং পরিবেশ - - anchor: "#উৎপাদনের পরিবেশ" - title: উৎপাদনের পরিবেশ + - anchor: "#production-environment" + title: প্রোডাকশন পরিবেশ --- এই বিভাগে কুবারনেটিস সেট আপ এবং চালানোর বিভিন্ন উপায় তালিকাভুক্ত করা হয়েছে। আপনি যখন কুবারনেটিস ইনস্টল করেন, তখন : রক্ষণাবেক্ষণের সহজতা, নিরাপত্তা, -নিয়ন্ত্রণ, উপলব্ধ সংস্থান, এবং একটি ক্লাস্টার পরিচালনা ও পরিচালনার জন্য প্রয়োজনীয় দক্ষতা এর উপর ভিত্তি করে একটি ইনস্টলেশন প্রকার চয়ন করুন । +কন্ট্রোল, উপলব্ধ রিসোর্স, এবং একটি ক্লাস্টার পরিচালনা ও পরিচালনার জন্য প্রয়োজনীয় দক্ষতা এর উপর ভিত্তি করে একটি ইনস্টলেশন প্রকার নির্বাচন করুন । -আপনি একটি কুবারনেটিস ক্লাস্টার স্থাপন করতে [কুবারনেটিস ডাউনলোড](/releases/download/) করতে পারেন +আপনি একটি কুবারনেটিস ক্লাস্টার স্থাপন করতে [কুবারনেটিস ডাউনলোড](/bn/releases/download/) করতে পারেন একটি স্থানীয় মেশিনে, ক্লাউডে বা আপনার নিজস্ব ডেটাসেন্টারের জন্য। -বেশ কিছু [কুবারনেটস উপাদান](/docs/concepts/overview/components/) যেমন {{< glossary_tooltip text="kube-apiserver" term_id="kube-apiserver" >}} বা {{< glossary_tooltip text="kube-proxy" term_id="kube-proxy" >}} [কন্টেইনার ইমেজ](/releases/download/#container-images) হিসাবেও ক্লাস্টারের মধ্যে স্থাপন করা যায়। +বেশ কিছু [কুবারনেটিস উপাদান](/bn/docs/concepts/overview/components/) যেমন {{< glossary_tooltip text="kube-apiserver" term_id="kube-apiserver" >}} বা {{< glossary_tooltip +text="kube-proxy" +term_id="kube-proxy" >}} [কন্টেইনার ইমেজ](/bn/releases/download/#container-images) হিসাবেও ক্লাস্টারের মধ্যে +স্থাপন করা যায়। যেখানেই সম্ভব কুবারনেটিস উপাদানগুলি কন্টেইনার ইমেজ হিসাবে রান করা , এবং কুবারনেটিস দ্বারা সেই উপাদানগুলি পরিচালনা করার **সুপারিশ** করা হয়েছে । যে উপাদানগুলি কন্টেইনার রান করে - বিশেষভাবে, কিউবলেট - সেগুলিকে এই বিভাগে অন্তর্ভুক্ত করা যায় না। আপনি যদি নিজে একটি কুবারনেটিস ক্লাস্টার পরিচালনা করতে না চান, তাহলে আপনি একটি পরিচালিত পরিষেবা বাছাই করতে পারেন, যার মধ্যে রয়েছে -[প্রত্যয়িত প্ল্যাটফর্ম](/docs/setup/production-environment/turnkey-solutions/)। +[প্রত্যয়িত প্ল্যাটফর্ম](/bn/docs/setup/production-environment/turnkey-solutions/)। এছাড়াও ক্লাউড এবং বিস্তৃত পরিসর জুড়ে অন্যান্য প্রমিত এবং বেয়ার মেটাল পরিবেশ সম্বলিত কাস্টম সমাধান রয়েছে । + + + + + ## লার্নিং পরিবেশ আপনি যদি কুবারনেটিস শিখছেন, কুবারনেটিস সম্প্রদায় দ্বারা সমর্থিত টুল ব্যবহার করে, বাস্তুতন্ত্রের সরঞ্জাম ব্যবহার করে স্থানীয় মেশিনে কুবারনেটিস ক্লাস্টার সেট আপ করার জন্য তাহলে [ইনস্টল টুলস](/docs/tasks/tools/) দেখুন। + + ## উৎপাদনের পরিবেশ -একটি [উৎপাদন পরিবেশ](/docs/setup/production-environment/) এর সমাধান মূল্যায়ন করার সময় বিবেচনা করুন কোন দিকগুলো +একটি [উৎপাদন পরিবেশ](/bn/docs/setup/production-environment/) এর সমাধান মূল্যায়ন করার সময় বিবেচনা করুন কোন দিকগুলো একটি কুবারনেটিস ক্লাস্টার (বা _abstractions_) পরিচালনা করে আপনি নিজের মাধ্যমেে পরিচালনা করতে চান এবং কোন দিকগুলো আপনি একটি প্রদানকারীর কাছে হস্তান্তর করতে পছন্দ করেন। নিজের থেকে একটি ক্লাস্টার পরিচালনার জন্য কুবারনেটিস হতে -আনুষ্ঠানিকভাবে সমর্থিত টুল [kubeadm](/docs/setup/production-environment/tools/kubeadm/) রয়েছে। - - +আনুষ্ঠানিকভাবে সমর্থিত টুল [kubeadm](/bn/docs/setup/production-environment/tools/kubeadm/) রয়েছে। ## {{% heading "whatsnext" %}} -- [কুবারনেটিস ডাউনলোড করুন](/releases/download/) -- `kubectl` সহ ডাউনলোড এবং [ইনস্টল](/docs/tasks/tools/) করুন -- আপনার নতুন ক্লাস্টারের জন্য একটি [কন্টেইনার রানটাইম](/docs/setup/production-environment/container-runtimes/) নির্বাচন করুন -- ক্লাস্টার সেটআপের জন্য [সর্বোত্তম অনুশীলন](/docs/setup/best-practices/) সম্পর্কে জানুন +- [কুবারনেটিস ডাউনলোড করুন](/bn/releases/download/) +- `kubectl` সহ ডাউনলোড এবং [ইনস্টল](/bn/docs/tasks/tools/) করুন +- আপনার নতুন ক্লাস্টারের জন্য একটি [কন্টেইনার রানটাইম](/bn/docs/setup/production-environment/container-runtimes/) নির্বাচন করুন +- ক্লাস্টার সেটআপের জন্য [সর্বোত্তম অনুশীলন](/bn/docs/setup/best-practices/) সম্পর্কে জানুন কুবারনেটিস এর {{< glossary_tooltip term_id="control-plane" text="control plan" >}} এর জন্য ডিজাইন করা হয়েছে যা লিনাক্সে চালান। আপনার ক্লাস্টারের মধ্যে আপনি লিনাক্স বা উইন্ডোজ সহ অন্যান্য অপারেটিং সিস্টেম অ্যাপ্লিকেশন চালাতে পারেন । -- [উইন্ডোজ নোডের সাথে ক্লাস্টার সেট আপ](/docs/setup/production-environment/windows/) শিখুন +- [উইন্ডোজ নোডের সাথে ক্লাস্টার সেট আপ](/bn/docs/setup/production-environment/windows/) শিখুন From 4cd047b5a0f0ad895fb14e7e0907b69b24032d8d Mon Sep 17 00:00:00 2001 From: Adiyan <78403903+AdiyanAbdurRahman@users.noreply.github.com> Date: Tue, 2 Apr 2024 19:30:56 +0600 Subject: [PATCH 0262/1086] Update content/en/docs/reference/glossary/job.md updated the changes suggested. --- content/bn/docs/reference/glossary/job.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/reference/glossary/job.md b/content/bn/docs/reference/glossary/job.md index 48ea468c5b..fce6e81e4a 100644 --- a/content/bn/docs/reference/glossary/job.md +++ b/content/bn/docs/reference/glossary/job.md @@ -16,4 +16,4 @@ tags: -এক বা একাধিক {{< glossary_tooltip term_id="pod" >}} অবজেক্ট তৈরি করে এবং নিশ্চিত করে যে তাদের একটি নির্দিষ্ট সংখ্যক সফলভাবে সমাপ্ত হয়েছে। পডস(Pods) সফলভাবে সম্পন্ন হওয়ার সাথে সাথে জব(Job) সফল সমাপ্তিগুলিকে ট্র্যাক করে৷ +এক বা একাধিক {{< glossary_tooltip term_id="pod" >}} অবজেক্ট তৈরি করে এবং নিশ্চিত করে যে তাদের একটি নির্দিষ্ট সংখ্যক সফলভাবে সমাপ্ত হয়েছে। পডগুলো সফলভাবে সম্পন্ন হওয়ার সাথে সাথে জব(Job) সফল সমাপ্তিগুলিকে ট্র্যাক করে৷ From d782fc2fa37a8cd9c2e773426ca6d3ed7d8f2182 Mon Sep 17 00:00:00 2001 From: Adiyan <78403903+AdiyanAbdurRahman@users.noreply.github.com> Date: Tue, 2 Apr 2024 22:54:15 +0600 Subject: [PATCH 0263/1086] Update job.md Changed /docs/concepts/workloads/controllers/job/ to /bn/docs/concepts/workloads/controllers/job/ --- content/bn/docs/reference/glossary/job.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/reference/glossary/job.md b/content/bn/docs/reference/glossary/job.md index fce6e81e4a..0ff5d63386 100644 --- a/content/bn/docs/reference/glossary/job.md +++ b/content/bn/docs/reference/glossary/job.md @@ -2,7 +2,7 @@ title: জব id: job date: 2018-04-12 -full_link: /docs/concepts/workloads/controllers/job/ +full_link: /bn/docs/concepts/workloads/controllers/job/ short_description: > একটি সীমিত বা ব্যাচ টাস্ক যা সম্পূর্ণ হওয়া পর্যন্ত চলে৷ From 6f9623651f73bdb73b9a64df2d59af48026b98f1 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Tue, 2 Apr 2024 23:01:14 +0600 Subject: [PATCH 0264/1086] Paragraph updated Updated the issue with previous paragraph structure. --- content/bn/docs/reference/glossary/cluster.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/reference/glossary/cluster.md b/content/bn/docs/reference/glossary/cluster.md index 699a4469c9..78eb902431 100644 --- a/content/bn/docs/reference/glossary/cluster.md +++ b/content/bn/docs/reference/glossary/cluster.md @@ -18,6 +18,6 @@ tags: ওয়ার্কিং নোড(গুলো) {{< glossary_tooltip text="পড" term_id="pod" >}} হোস্ট করে যা অ্যাপ্লিকেশন ওয়ার্কলোড এর উপাদান । {{< glossary_tooltip text="কন্ট্রোল প্লেন" term_id="control-plane" >}} ক্লাস্টারে থাকা -ওয়ার্কার নোডগুলো এবং পডগুলো। প্রোডাকশন পরিবেশে, কন্ট্রোল প্লেন সাধারণত একাধিক +ওয়ার্কার নোডগুলো এবং পডগুলো পরিচালনা করে । প্রোডাকশন পরিবেশে, কন্ট্রোল প্লেন সাধারণত একাধিক কম্পিউটার জুড়ে চলে এবং একটি ক্লাস্টার সাধারণত একাধিক নোড চালায়, ত্রুটি-সহনশীলতা(fault-tolerance) এবং উচ্চ প্রাপ্যতা(high-availability) প্রদান করে । From 7a824e72a15d5013d175aa3cc62dbf68832928ec Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Tue, 2 Apr 2024 23:05:32 +0600 Subject: [PATCH 0265/1086] Extra space after period fixed --- content/bn/docs/reference/glossary/cluster.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/bn/docs/reference/glossary/cluster.md b/content/bn/docs/reference/glossary/cluster.md index 78eb902431..1495610814 100644 --- a/content/bn/docs/reference/glossary/cluster.md +++ b/content/bn/docs/reference/glossary/cluster.md @@ -16,8 +16,8 @@ tags: ওয়ার্কিং নোড(গুলো) {{< glossary_tooltip text="পড" term_id="pod" >}} হোস্ট করে যা -অ্যাপ্লিকেশন ওয়ার্কলোড এর উপাদান । +অ্যাপ্লিকেশন ওয়ার্কলোড এর উপাদান। {{< glossary_tooltip text="কন্ট্রোল প্লেন" term_id="control-plane" >}} ক্লাস্টারে থাকা -ওয়ার্কার নোডগুলো এবং পডগুলো পরিচালনা করে । প্রোডাকশন পরিবেশে, কন্ট্রোল প্লেন সাধারণত একাধিক +ওয়ার্কার নোডগুলো এবং পডগুলো পরিচালনা করে। প্রোডাকশন পরিবেশে, কন্ট্রোল প্লেন সাধারণত একাধিক কম্পিউটার জুড়ে চলে এবং একটি ক্লাস্টার সাধারণত একাধিক নোড চালায়, -ত্রুটি-সহনশীলতা(fault-tolerance) এবং উচ্চ প্রাপ্যতা(high-availability) প্রদান করে । +ত্রুটি-সহনশীলতা(fault-tolerance) এবং উচ্চ প্রাপ্যতা(high-availability) প্রদান করে। From e6da4fbc3c3518c078281537215e94068e0c6db9 Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Wed, 3 Apr 2024 01:05:44 +0600 Subject: [PATCH 0266/1086] Update _index.md --- content/bn/docs/setup/_index.md | 64 +++++++++++---------------------- 1 file changed, 21 insertions(+), 43 deletions(-) diff --git a/content/bn/docs/setup/_index.md b/content/bn/docs/setup/_index.md index 0defff2c76..7c5466f3e6 100644 --- a/content/bn/docs/setup/_index.md +++ b/content/bn/docs/setup/_index.md @@ -13,61 +13,39 @@ card: - anchor: "#production-environment" title: প্রোডাকশন পরিবেশ --- - - এই বিভাগে কুবারনেটিস সেট আপ এবং চালানোর বিভিন্ন উপায় তালিকাভুক্ত করা হয়েছে। আপনি যখন কুবারনেটিস ইনস্টল করেন, তখন : রক্ষণাবেক্ষণের সহজতা, নিরাপত্তা, কন্ট্রোল, উপলব্ধ রিসোর্স, এবং একটি ক্লাস্টার পরিচালনা ও পরিচালনার জন্য প্রয়োজনীয় দক্ষতা এর উপর ভিত্তি করে একটি ইনস্টলেশন প্রকার নির্বাচন করুন । - আপনি একটি কুবারনেটিস ক্লাস্টার স্থাপন করতে [কুবারনেটিস ডাউনলোড](/bn/releases/download/) করতে পারেন একটি স্থানীয় মেশিনে, ক্লাউডে বা আপনার নিজস্ব ডেটাসেন্টারের জন্য। - -বেশ কিছু [কুবারনেটিস উপাদান](/bn/docs/concepts/overview/components/) যেমন {{< glossary_tooltip text="kube-apiserver" term_id="kube-apiserver" >}} বা {{< glossary_tooltip -text="kube-proxy" -term_id="kube-proxy" >}} [কন্টেইনার ইমেজ](/bn/releases/download/#container-images) হিসাবেও ক্লাস্টারের মধ্যে -স্থাপন করা যায়। - -যেখানেই সম্ভব কুবারনেটিস উপাদানগুলি কন্টেইনার ইমেজ হিসাবে রান করা , এবং কুবারনেটিস দ্বারা সেই উপাদানগুলি পরিচালনা করার **সুপারিশ** করা হয়েছে । যে উপাদানগুলি কন্টেইনার রান করে - বিশেষভাবে, কিউবলেট - সেগুলিকে এই বিভাগে অন্তর্ভুক্ত করা যায় না। - +বেশ কিছু [কুবারনেটিস উপাদান](/bn/docs/concepts/overview/components/) যেমন {{< glossary_tooltip text="kube-apiserver" term_id="kube-apiserver" >}} বা {{< glossary_tooltip text="kube-proxy" term_id="kube-proxy" >}} +[কন্টেইনার ইমেজ](/bn/releases/download/#container-images) হিসাবেও ক্লাস্টারের মধ্যে স্থাপন করা যায়। +যেখানেই সম্ভব কুবারনেটিস উপাদানগুলি কন্টেইনার ইমেজ হিসাবে রান করা , +এবং কুবারনেটিস দ্বারা সেই উপাদানগুলি পরিচালনা করার **সুপারিশ** করা হয়েছে । +যে উপাদানগুলি কন্টেইনার রান করে - বিশেষভাবে, kubelet - সেগুলিকে এই বিভাগে অন্তর্ভুক্ত করা যায় না। আপনি যদি নিজে একটি কুবারনেটিস ক্লাস্টার পরিচালনা করতে না চান, তাহলে আপনি একটি পরিচালিত পরিষেবা বাছাই করতে পারেন, যার মধ্যে রয়েছে -[প্রত্যয়িত প্ল্যাটফর্ম](/bn/docs/setup/production-environment/turnkey-solutions/)। -এছাড়াও ক্লাউড এবং বিস্তৃত পরিসর জুড়ে অন্যান্য প্রমিত এবং বেয়ার মেটাল পরিবেশ সম্বলিত কাস্টম সমাধান রয়েছে । - - - - - - +[সার্টিফাইড প্ল্যাটফর্ম](/bn/docs/setup/production-environment/turnkey-solutions/)। +এছাড়াও ক্লাউড এবং বিস্তৃত পরিসর জুড়ে অন্যান্য স্ট্যান্ডার্ডাইজেড এবং বেয়ার মেটাল পরিবেশ +সম্বলিত কাস্টম সমাধান রয়েছে । - ## লার্নিং পরিবেশ - -আপনি যদি কুবারনেটিস শিখছেন, কুবারনেটিস সম্প্রদায় দ্বারা সমর্থিত টুল ব্যবহার করে, বাস্তুতন্ত্রের সরঞ্জাম ব্যবহার করে স্থানীয় মেশিনে কুবারনেটিস ক্লাস্টার সেট আপ করার জন্য তাহলে [ইনস্টল টুলস](/docs/tasks/tools/) দেখুন। - - - -## উৎপাদনের পরিবেশ - -একটি [উৎপাদন পরিবেশ](/bn/docs/setup/production-environment/) এর সমাধান মূল্যায়ন করার সময় বিবেচনা করুন কোন দিকগুলো -একটি কুবারনেটিস ক্লাস্টার (বা _abstractions_) পরিচালনা করে আপনি নিজের মাধ্যমেে পরিচালনা করতে চান এবং কোন দিকগুলো আপনি +আপনি যদি কুবারনেটিস শিখছেন, কুবারনেটিস কমিউনিটি দ্বারা সমর্থিত টুল ব্যবহার করে, +ইকোসিস্টেম টুল ব্যবহার করে লোকাল মেশিনে কুবারনেটিস ক্লাস্টার সেট আপ করার জন্য +তাহলে [ইনস্টল টুলস](/bn/docs/tasks/tools/) দেখুন। +## প্রোডাকশন পরিবেশ +একটি [প্রোডাকশন পরিবেশ](/bn/docs/setup/production-environment/) এর সমাধান মূল্যায়ন করার সময় +বিবেচনা করুন কোন দিকগুলো একটি কুবারনেটিস ক্লাস্টার (বা _abstractions_) পরিচালনা করে আপনি +নিজের মাধ্যমেে পরিচালনা করতে চান এবং কোন দিকগুলো আপনি একটি প্রদানকারীর কাছে হস্তান্তর করতে পছন্দ করেন। - - নিজের থেকে একটি ক্লাস্টার পরিচালনার জন্য কুবারনেটিস হতে -আনুষ্ঠানিকভাবে সমর্থিত টুল [kubeadm](/bn/docs/setup/production-environment/tools/kubeadm/) রয়েছে। - +আনুষ্ঠানিকভাবে সমর্থিত টুল [kubeadm](/bn/docs/setup/production-environment/tools/kubeadm/) রয়েছে। ## {{% heading "whatsnext" %}} - - [কুবারনেটিস ডাউনলোড করুন](/bn/releases/download/) -- `kubectl` সহ ডাউনলোড এবং [ইনস্টল](/bn/docs/tasks/tools/) করুন +- `kubectl` সহ টুলগুলো ডাউনলোড এবং [ইনস্টল](/bn/docs/tasks/tools/) করুন - আপনার নতুন ক্লাস্টারের জন্য একটি [কন্টেইনার রানটাইম](/bn/docs/setup/production-environment/container-runtimes/) নির্বাচন করুন - ক্লাস্টার সেটআপের জন্য [সর্বোত্তম অনুশীলন](/bn/docs/setup/best-practices/) সম্পর্কে জানুন - -কুবারনেটিস এর {{< glossary_tooltip term_id="control-plane" text="control plan" >}} এর জন্য ডিজাইন করা হয়েছে যা -লিনাক্সে চালান। আপনার ক্লাস্টারের মধ্যে আপনি লিনাক্স বা উইন্ডোজ সহ অন্যান্য অপারেটিং সিস্টেম অ্যাপ্লিকেশন চালাতে পারেন । -- [উইন্ডোজ নোডের সাথে ক্লাস্টার সেট আপ](/bn/docs/setup/production-environment/windows/) শিখুন - - - - +কুবারনেটিস এর {{< glossary_tooltip term_id="কন্ট্রোল-প্লেন" text="control plan" >}} এর জন্য ডিজাইন করা হয়েছে যা +লিনাক্সে চালান। আপনার ক্লাস্টারের মধ্যে আপনি লিনাক্স বা উইন্ডোজ সহ অন্যান্য অপারেটিং সিস্টেমে +অ্যাপ্লিকেশন চালাতে পারেন । +- [উইন্ডোজ নোডের সাথে ক্লাস্টার সেট আপ](/bn//docs/concepts/windows/) From 28af3e119c598cbe842b609fa516d78985ae51c0 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 3 Apr 2024 02:10:26 +0600 Subject: [PATCH 0267/1086] Create _index.md --- .../extend-kubernetes/api-extension/_index.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/docs/concepts/extend-kubernetes/api-extension/_index.md diff --git a/content/bn/docs/concepts/extend-kubernetes/api-extension/_index.md b/content/bn/docs/concepts/extend-kubernetes/api-extension/_index.md new file mode 100644 index 0000000000..c4d9b34aa0 --- /dev/null +++ b/content/bn/docs/concepts/extend-kubernetes/api-extension/_index.md @@ -0,0 +1,19 @@ +--- +title: কুবারনেটিস API প্রসারিত করা +weight: 30 +--- + +কাস্টম রিসোর্স হলো কুবারনেটিস API এর এক্সটেনশন। কুবারনেটিস আপনার ক্লাস্টারে কাস্টম রিসোর্স যোগ করার দুটি উপায় প্রদান করে: + +- [CustomResourceDefinition](bn/docs/concepts/extend-kubernetes/api-extension/custom-resources/) (CRD) + মেকানিজম আপনাকে একটি API গ্রুপ, ধরনের, এবং স্কিমা দিয়ে ঘোষণামূলকভাবে একটি নতুন কাস্টম API সংজ্ঞায়িত করতে দেয় + যা আপনি নির্দিষ্ট করেছেন। + কুবারনেটিস কন্ট্রোল প্লেন আপনার কাস্টম রিসোর্সের স্টোরেজ পরিবেশন এবং পরিচালনা করে। CRD গুলো আপনাকে আপনার + ক্লাস্টারের জন্য একটি কাস্টম API সার্ভার না লিখে এবং চালানো ছাড়াই নতুন ধরণের রিসোর্স তৈরি করতে দেয় । +- [এগ্রিগেশন লেয়ারটি](bn/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/) + প্রাইমারি API সার্ভারের পিছনে থাকে, যা একটি প্রক্সি হিসেবে কাজ করে। + এই ব্যবস্থাটিকে API এগ্রিগেশন (API Aggregation)(AA) বলা হয়, যা আপনাকে আপনার + নিজস্ব API সার্ভার লিখে এবং স্থাপন করার মাধ্যমে আপনার কাস্টম রিসোর্সগুলোর জন্য + বিশেষায়িত বাস্তবায়ন প্রদান করতে দেয়। + প্রধান API সার্ভার আপনার API সার্ভারে আপনার নির্দিষ্ট করা কাস্টম API গুলোর জন্য অনুরোধগুলো অর্পণ করে, + সেগুলোকে এর সমস্ত ক্লায়েন্টদের জন্য উপলব্ধ করে৷ From a526b06e7a6c5472822f2035bed11902c7e1cfe3 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 3 Apr 2024 02:10:43 +0600 Subject: [PATCH 0268/1086] Delete content/bn/docs/concepts/extend-kubernetes/_index.md --- .../docs/concepts/extend-kubernetes/_index.md | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 content/bn/docs/concepts/extend-kubernetes/_index.md diff --git a/content/bn/docs/concepts/extend-kubernetes/_index.md b/content/bn/docs/concepts/extend-kubernetes/_index.md deleted file mode 100644 index da23053c9a..0000000000 --- a/content/bn/docs/concepts/extend-kubernetes/_index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: কুবারনেটিস API প্রসারিত করা -weight: 30 ---- - -কাস্টম রিসোর্স হলো কুবারনেটিস API এর এক্সটেনশন। কুবারনেটিস আপনার ক্লাস্টারে কাস্টম রিসোর্স যোগ করার দুটি উপায় প্রদান করে: - -- [CustomResourceDefinition](bn/docs/concepts/extend-kubernetes/api-extension/custom-resources/) (CRD) - মেকানিজম আপনাকে একটি API গ্রুপ, ধরনের, এবং স্কিমা দিয়ে ঘোষণামূলকভাবে একটি নতুন কাস্টম API সংজ্ঞায়িত করতে দেয় - যা আপনি নির্দিষ্ট করেছেন। - কুবারনেটিস কন্ট্রোল প্লেন আপনার কাস্টম রিসোর্সের স্টোরেজ পরিবেশন এবং পরিচালনা করে। CRD গুলো আপনাকে আপনার - ক্লাস্টারের জন্য একটি কাস্টম API সার্ভার না লিখে এবং চালানো ছাড়াই নতুন ধরণের রিসোর্স তৈরি করতে দেয় । -- [এগ্রিগেশন লেয়ারটি](bn/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/) - প্রাইমারি API সার্ভারের পিছনে থাকে, যা একটি প্রক্সি হিসেবে কাজ করে। - এই ব্যবস্থাটিকে API এগ্রিগেশন (API Aggregation)(AA) বলা হয়, যা আপনাকে আপনার - নিজস্ব API সার্ভার লিখে এবং স্থাপন করার মাধ্যমে আপনার কাস্টম রিসোর্সগুলোর জন্য - বিশেষায়িত বাস্তবায়ন প্রদান করতে দেয়। - প্রধান API সার্ভার আপনার API সার্ভারে আপনার নির্দিষ্ট করা কাস্টম API গুলোর জন্য অনুরোধগুলো অর্পণ করে, - সেগুলোকে এর সমস্ত ক্লায়েন্টদের জন্য উপলব্ধ করে৷ \ No newline at end of file From 38b5f41ac591c0752df485b3dd13860d2bcc6f84 Mon Sep 17 00:00:00 2001 From: Zaynul Abedin Miah <111334392+azaynul10@users.noreply.github.com> Date: Wed, 3 Apr 2024 02:41:53 +0600 Subject: [PATCH 0269/1086] Update _index.md --- content/bn/docs/setup/_index.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/content/bn/docs/setup/_index.md b/content/bn/docs/setup/_index.md index 7c5466f3e6..d2821fadcd 100644 --- a/content/bn/docs/setup/_index.md +++ b/content/bn/docs/setup/_index.md @@ -13,39 +13,55 @@ card: - anchor: "#production-environment" title: প্রোডাকশন পরিবেশ --- + + এই বিভাগে কুবারনেটিস সেট আপ এবং চালানোর বিভিন্ন উপায় তালিকাভুক্ত করা হয়েছে। আপনি যখন কুবারনেটিস ইনস্টল করেন, তখন : রক্ষণাবেক্ষণের সহজতা, নিরাপত্তা, কন্ট্রোল, উপলব্ধ রিসোর্স, এবং একটি ক্লাস্টার পরিচালনা ও পরিচালনার জন্য প্রয়োজনীয় দক্ষতা এর উপর ভিত্তি করে একটি ইনস্টলেশন প্রকার নির্বাচন করুন । + আপনি একটি কুবারনেটিস ক্লাস্টার স্থাপন করতে [কুবারনেটিস ডাউনলোড](/bn/releases/download/) করতে পারেন একটি স্থানীয় মেশিনে, ক্লাউডে বা আপনার নিজস্ব ডেটাসেন্টারের জন্য। + বেশ কিছু [কুবারনেটিস উপাদান](/bn/docs/concepts/overview/components/) যেমন {{< glossary_tooltip text="kube-apiserver" term_id="kube-apiserver" >}} বা {{< glossary_tooltip text="kube-proxy" term_id="kube-proxy" >}} [কন্টেইনার ইমেজ](/bn/releases/download/#container-images) হিসাবেও ক্লাস্টারের মধ্যে স্থাপন করা যায়। + যেখানেই সম্ভব কুবারনেটিস উপাদানগুলি কন্টেইনার ইমেজ হিসাবে রান করা , এবং কুবারনেটিস দ্বারা সেই উপাদানগুলি পরিচালনা করার **সুপারিশ** করা হয়েছে । যে উপাদানগুলি কন্টেইনার রান করে - বিশেষভাবে, kubelet - সেগুলিকে এই বিভাগে অন্তর্ভুক্ত করা যায় না। + আপনি যদি নিজে একটি কুবারনেটিস ক্লাস্টার পরিচালনা করতে না চান, তাহলে আপনি একটি পরিচালিত পরিষেবা বাছাই করতে পারেন, যার মধ্যে রয়েছে [সার্টিফাইড প্ল্যাটফর্ম](/bn/docs/setup/production-environment/turnkey-solutions/)। এছাড়াও ক্লাউড এবং বিস্তৃত পরিসর জুড়ে অন্যান্য স্ট্যান্ডার্ডাইজেড এবং বেয়ার মেটাল পরিবেশ সম্বলিত কাস্টম সমাধান রয়েছে । + + ## লার্নিং পরিবেশ + আপনি যদি কুবারনেটিস শিখছেন, কুবারনেটিস কমিউনিটি দ্বারা সমর্থিত টুল ব্যবহার করে, ইকোসিস্টেম টুল ব্যবহার করে লোকাল মেশিনে কুবারনেটিস ক্লাস্টার সেট আপ করার জন্য তাহলে [ইনস্টল টুলস](/bn/docs/tasks/tools/) দেখুন। + ## প্রোডাকশন পরিবেশ + একটি [প্রোডাকশন পরিবেশ](/bn/docs/setup/production-environment/) এর সমাধান মূল্যায়ন করার সময় বিবেচনা করুন কোন দিকগুলো একটি কুবারনেটিস ক্লাস্টার (বা _abstractions_) পরিচালনা করে আপনি নিজের মাধ্যমেে পরিচালনা করতে চান এবং কোন দিকগুলো আপনি একটি প্রদানকারীর কাছে হস্তান্তর করতে পছন্দ করেন। + নিজের থেকে একটি ক্লাস্টার পরিচালনার জন্য কুবারনেটিস হতে আনুষ্ঠানিকভাবে সমর্থিত টুল [kubeadm](/bn/docs/setup/production-environment/tools/kubeadm/) রয়েছে। + ## {{% heading "whatsnext" %}} + - [কুবারনেটিস ডাউনলোড করুন](/bn/releases/download/) - `kubectl` সহ টুলগুলো ডাউনলোড এবং [ইনস্টল](/bn/docs/tasks/tools/) করুন - আপনার নতুন ক্লাস্টারের জন্য একটি [কন্টেইনার রানটাইম](/bn/docs/setup/production-environment/container-runtimes/) নির্বাচন করুন - ক্লাস্টার সেটআপের জন্য [সর্বোত্তম অনুশীলন](/bn/docs/setup/best-practices/) সম্পর্কে জানুন + কুবারনেটিস এর {{< glossary_tooltip term_id="কন্ট্রোল-প্লেন" text="control plan" >}} এর জন্য ডিজাইন করা হয়েছে যা লিনাক্সে চালান। আপনার ক্লাস্টারের মধ্যে আপনি লিনাক্স বা উইন্ডোজ সহ অন্যান্য অপারেটিং সিস্টেমে অ্যাপ্লিকেশন চালাতে পারেন । -- [উইন্ডোজ নোডের সাথে ক্লাস্টার সেট আপ](/bn//docs/concepts/windows/) + +- [উইন্ডোজ নোডের সাথে ক্লাস্টার সেট আপ](/bn//docs/concepts/windows/) শিখুন From d05bad08f9e32577bb6742b33aaa831601068d33 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Wed, 3 Apr 2024 15:47:50 +0600 Subject: [PATCH 0270/1086] [bn] Localization of deployment.md [bn] localization of deployment.md --- .../bn/docs/reference/glossary/deployment.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 content/bn/docs/reference/glossary/deployment.md diff --git a/content/bn/docs/reference/glossary/deployment.md b/content/bn/docs/reference/glossary/deployment.md new file mode 100644 index 0000000000..ebdc8290ce --- /dev/null +++ b/content/bn/docs/reference/glossary/deployment.md @@ -0,0 +1,21 @@ +--- +title: ডিপ্লয়মেন্ট(Deployment) +id: deployment +date: 2018-04-12 +full_link: /bn/docs/concepts/workloads/controllers/deployment/ +short_description: > + আপনার ক্লাস্টারে একটি প্রতিলিপিকৃত(replicated) অ্যাপ্লিকেশন পরিচালনা করে। + +aka: +tags: +- fundamental +- core-object +- workload +--- + একটি এপিআই(API) অবজেক্ট যা একটি প্রতিলিপিকৃত অ্যাপ্লিকেশন পরিচালনা করে, সাধারণত লোকাল স্টেট ব্যতিত পড রান করার মাধ্যমে। + + + +প্রতিটি প্রতিলিপি একটি {{< glossary_tooltip term_id="pod" >}} দ্বারা উপস্থাপিত হয়, এবং পডগুলি তাদের মধ্যে ডিস্ট্রিবিউট করা হয় +একটি ক্লাস্টারের {{< glossary_tooltip text="নোড" term_id="node" >}} এর মাধমে। +যেসকল ওয়ার্কলোড এর জন্য লোকলা স্টেট প্রয়োজন, তাদের জন্য {{< glossary_tooltip term_id="StatefulSet" >}} ব্যবহার করার কথা বিবেচনা করুন। From 3ea36ad9777918d80bd4eff5b202ab3ee4cf13d1 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Wed, 3 Apr 2024 19:06:30 +0600 Subject: [PATCH 0271/1086] Update _index.md --- content/bn/docs/concepts/cluster-administration/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/cluster-administration/_index.md b/content/bn/docs/concepts/cluster-administration/_index.md index b8270565c6..0864241069 100644 --- a/content/bn/docs/concepts/cluster-administration/_index.md +++ b/content/bn/docs/concepts/cluster-administration/_index.md @@ -71,7 +71,7 @@ card: এবং HTTP কলগুলি কীভাবে পরিচালনা করা হয় তা নিয়ন্ত্রণ করে। * [অ্যাডমিশন কন্ট্রোলের ব্যবহার](/bn/docs/reference/access-authn-authz/admission-controllers/) - ব্যাখ্যা করে প্লাগ-ইনগুলি প্লাগ-ইনগুলি অথেন্টিকেশন এবং অথোরাইজেশনের পরে কুবারনেটস API সার্ভারে + ব্যাখ্যা করে প্লাগ-ইনগুলি অথেন্টিকেশন এবং অথোরাইজেশনের পরে কুবারনেটস API সার্ভারে অনুরোধগুলিকে বাধা দেয়। * [কুবারনেটিস ক্লাস্টারে Sysctls ব্যবহার ](/bn/docs/tasks/administer-cluster/sysctl-cluster/) From 545767f5baf28bb725398327c2f78efb025597f2 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Thu, 4 Apr 2024 09:48:09 +0600 Subject: [PATCH 0272/1086] Update deployment.md Typo Fixed --- content/bn/docs/reference/glossary/deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/reference/glossary/deployment.md b/content/bn/docs/reference/glossary/deployment.md index ebdc8290ce..4b877b99dc 100644 --- a/content/bn/docs/reference/glossary/deployment.md +++ b/content/bn/docs/reference/glossary/deployment.md @@ -18,4 +18,4 @@ tags: প্রতিটি প্রতিলিপি একটি {{< glossary_tooltip term_id="pod" >}} দ্বারা উপস্থাপিত হয়, এবং পডগুলি তাদের মধ্যে ডিস্ট্রিবিউট করা হয় একটি ক্লাস্টারের {{< glossary_tooltip text="নোড" term_id="node" >}} এর মাধমে। -যেসকল ওয়ার্কলোড এর জন্য লোকলা স্টেট প্রয়োজন, তাদের জন্য {{< glossary_tooltip term_id="StatefulSet" >}} ব্যবহার করার কথা বিবেচনা করুন। +যেসকল ওয়ার্কলোড এর জন্য লোকাল স্টেট প্রয়োজন, তাদের জন্য {{< glossary_tooltip term_id="StatefulSet" >}} ব্যবহার করা বিবেচনা করুন। From 91ac0c68c8c22b2f93cac21af4acb8191b7f197a Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Fri, 5 Apr 2024 14:03:59 +0600 Subject: [PATCH 0273/1086] Update admission-controller.md --- .../bn/docs/reference/glossary/admission-controller.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/bn/docs/reference/glossary/admission-controller.md b/content/bn/docs/reference/glossary/admission-controller.md index 38eff31e65..d90f019a40 100644 --- a/content/bn/docs/reference/glossary/admission-controller.md +++ b/content/bn/docs/reference/glossary/admission-controller.md @@ -1,22 +1,22 @@ --- -title: এডমিশন কন্ট্রোলার +title: অ্যাডমিশন কন্ট্রোলার id: admission-controller date: 2019-06-28 full_link: /bn/docs/reference/access-authn-authz/admission-controllers/ short_description: > - কোডের একটি অংশ যা অবজেক্টের অধ্যবসায়ের পূর্বে কুবারনেটিস এপিআই(API) সার্ভারের অনুরোধগুলিকে বাধা দেয়। + কোডের একটি অংশ যা অবজেক্টের পার্সিস্টেন্সের পূর্বে কুবারনেটিস এপিআই(API) সার্ভারের অনুরোধগুলিকে বাধা দেয়। aka: tags: - extension - security --- -কোডের একটি অংশ যা অবজেক্টের অধ্যবসায়ের পূর্বে কুবারনেটিস এপিআই (API) সার্ভারের অনুরোধগুলিকে বাধা দেয়। +কোডের একটি অংশ যা অবজেক্টের পার্সিস্টেন্সের পূর্বে কুবারনেটিস এপিআই(API) সার্ভারের অনুরোধগুলিকে বাধা দেয়। -এডমিশন কন্ট্রোলারগুলি কুবারনেটিস এপিআই (API) সার্ভারের জন্য কনফিগারযোগ্য এবং হতে পারে "বৈধকরণ", "পরিবর্তন" বা +অ্যাডমিশন কন্ট্রোলার কুবারনেটিস এপিআই (API) সার্ভারের জন্য কনফিগারযোগ্য এবং হতে পারে "বৈধকরণ", "পরিবর্তন" বা উভয়ই। যেকোনো এডমিশন কন্ট্রোলার অনুরোধ প্রত্যাখ্যান করতে পারে। পরিবর্তন কন্ট্রোলারগুলি যে বস্তুগুলি স্বীকার করে তা পরিবর্তন করতে পারে; কন্ট্রোলারগুলি বৈধ নাও হতে পারে -* [কুবারনেটিস ডকুমেন্টেশনে এডমিশন কন্ট্রোলার](/bn/docs/reference/access-authn-authz/admission-controllers/) +* [কুবারনেটিস ডকুমেন্টেশনে অ্যাডমিশন কন্ট্রোলার](/bn/docs/reference/access-authn-authz/admission-controllers/) From e960241984d2d957f74abe70230bfbc2a5c5d697 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Sat, 6 Apr 2024 04:44:24 +0600 Subject: [PATCH 0274/1086] Update admission-controller.md --- content/bn/docs/reference/glossary/admission-controller.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/bn/docs/reference/glossary/admission-controller.md b/content/bn/docs/reference/glossary/admission-controller.md index d90f019a40..b8ccf61c3e 100644 --- a/content/bn/docs/reference/glossary/admission-controller.md +++ b/content/bn/docs/reference/glossary/admission-controller.md @@ -4,19 +4,19 @@ id: admission-controller date: 2019-06-28 full_link: /bn/docs/reference/access-authn-authz/admission-controllers/ short_description: > - কোডের একটি অংশ যা অবজেক্টের পার্সিস্টেন্সের পূর্বে কুবারনেটিস এপিআই(API) সার্ভারের অনুরোধগুলিকে বাধা দেয়। + কোডের একটি অংশ যা অবজেক্টের পার্সিস্টেন্সের(persistence) পূর্বে কুবারনেটিস API সার্ভারের অনুরোধগুলিকে বাধা দেয়। aka: tags: - extension - security --- -কোডের একটি অংশ যা অবজেক্টের পার্সিস্টেন্সের পূর্বে কুবারনেটিস এপিআই(API) সার্ভারের অনুরোধগুলিকে বাধা দেয়। +কোডের একটি অংশ যা অবজেক্টের পার্সিস্টেন্সের(persistence) পূর্বে কুবারনেটিস API সার্ভারের অনুরোধগুলিকে বাধা দেয়। অ্যাডমিশন কন্ট্রোলার কুবারনেটিস এপিআই (API) সার্ভারের জন্য কনফিগারযোগ্য এবং হতে পারে "বৈধকরণ", "পরিবর্তন" বা -উভয়ই। যেকোনো এডমিশন কন্ট্রোলার অনুরোধ প্রত্যাখ্যান করতে পারে। পরিবর্তন কন্ট্রোলারগুলি যে বস্তুগুলি স্বীকার করে তা পরিবর্তন করতে পারে; +উভয়ই। যেকোনো অ্যাডমিশন কন্ট্রোলার অনুরোধ প্রত্যাখ্যান করতে পারে। পরিবর্তন কন্ট্রোলারগুলি যে বস্তুগুলি স্বীকার করে তা পরিবর্তন করতে পারে; কন্ট্রোলারগুলি বৈধ নাও হতে পারে * [কুবারনেটিস ডকুমেন্টেশনে অ্যাডমিশন কন্ট্রোলার](/bn/docs/reference/access-authn-authz/admission-controllers/) From 4215a9ec6d14c0a2de535927f307fb8214cb8276 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Sat, 6 Apr 2024 10:46:46 +0600 Subject: [PATCH 0275/1086] Removed Bangla of API remove bangali of API --- content/bn/docs/reference/glossary/deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/reference/glossary/deployment.md b/content/bn/docs/reference/glossary/deployment.md index 4b877b99dc..496194415c 100644 --- a/content/bn/docs/reference/glossary/deployment.md +++ b/content/bn/docs/reference/glossary/deployment.md @@ -12,7 +12,7 @@ tags: - core-object - workload --- - একটি এপিআই(API) অবজেক্ট যা একটি প্রতিলিপিকৃত অ্যাপ্লিকেশন পরিচালনা করে, সাধারণত লোকাল স্টেট ব্যতিত পড রান করার মাধ্যমে। + একটি API অবজেক্ট যা একটি প্রতিলিপিকৃত অ্যাপ্লিকেশন পরিচালনা করে, সাধারণত লোকাল স্টেট ব্যতিত পড রান করার মাধ্যমে। From b3bbe90bc9e6275ce01021de9e9ec6b6ce647b5a Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Sat, 6 Apr 2024 11:21:45 +0600 Subject: [PATCH 0276/1086] Localization of container.md Localization of container.md --- .../bn/docs/reference/glossary/container.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/docs/reference/glossary/container.md diff --git a/content/bn/docs/reference/glossary/container.md b/content/bn/docs/reference/glossary/container.md new file mode 100644 index 0000000000..58cb674855 --- /dev/null +++ b/content/bn/docs/reference/glossary/container.md @@ -0,0 +1,19 @@ +--- +title: কন্টেইনার(Container) +id: container +date: 2018-04-12 +full_link: /bn/docs/concepts/containers/ +short_description: > + একটি লাইটওয়েট এবং পোর্টেবল এক্সিকিউটেবল ইমেজ যা সফ্টওয়্যার এবং এর সকল ডিপেন্ডেন্সি ধারণ করে। + +aka: +tags: +- fundamental +- workload +--- + একটি লাইটওয়েট এবং পোর্টেবল এক্সিকিউটেবল ইমেজ যা সফ্টওয়্যার এবং এর সকল ডিপেন্ডেন্সি ধারণ করে। + + + +কন্টেইনার হোস্ট ইনফ্রাস্ট্রাকচার থেকে অ্যাপ্লিকেশন কে আলাদা(decouple) করে বিভিন্ন ক্লাউড এবং OS এনভায়রনমেন্টে ডিপ্লয়মেন্ট সহজ করার জন্য, এবং সহজে স্কেলিং করার জন্য। +যে অ্যাপ্লিকেশনগুলি কন্টেইনারের ভিতরে চলে তাদের কন্টেইনারাইজড অ্যাপ্লিকেশন বলা হয়। এই অ্যাপ্লিকেশনগুলো এবং তাদের ডিপেন্ডেন্সিগুলোকে বান্ডেল করার প্রক্রিয়াকে কন্টেইনারেইজেশন বলা হয়। From 04c5c84d9bb370a38bc5391fe5864004dfdc8cf2 Mon Sep 17 00:00:00 2001 From: Taehyun Hwang Date: Sat, 6 Apr 2024 16:32:41 +0900 Subject: [PATCH 0277/1086] Update en/docs --- .../working-with-objects/common-labels.md | 18 +++++++++--------- .../labels-annotations-taints/_index.md | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/content/en/docs/concepts/overview/working-with-objects/common-labels.md b/content/en/docs/concepts/overview/working-with-objects/common-labels.md index c6bda86afe..c952108315 100644 --- a/content/en/docs/concepts/overview/working-with-objects/common-labels.md +++ b/content/en/docs/concepts/overview/working-with-objects/common-labels.md @@ -36,7 +36,7 @@ on every resource object. | Key | Description | Example | Type | | ----------------------------------- | --------------------- | -------- | ---- | | `app.kubernetes.io/name` | The name of the application | `mysql` | string | -| `app.kubernetes.io/instance` | A unique name identifying the instance of an application | `mysql-abcxzy` | string | +| `app.kubernetes.io/instance` | A unique name identifying the instance of an application | `mysql-abcxyz` | string | | `app.kubernetes.io/version` | The current version of the application (e.g., a [SemVer 1.0](https://semver.org/spec/v1.0.0.html), revision hash, etc.) | `5.7.21` | string | | `app.kubernetes.io/component` | The component within the architecture | `database` | string | | `app.kubernetes.io/part-of` | The name of a higher level application this one is part of | `wordpress` | string | @@ -51,7 +51,7 @@ kind: StatefulSet metadata: labels: app.kubernetes.io/name: mysql - app.kubernetes.io/instance: mysql-abcxzy + app.kubernetes.io/instance: mysql-abcxyz app.kubernetes.io/version: "5.7.21" app.kubernetes.io/component: database app.kubernetes.io/part-of: wordpress @@ -67,7 +67,7 @@ than once where different websites are different installations of WordPress. The name of an application and the instance name are recorded separately. For example, WordPress has a `app.kubernetes.io/name` of `wordpress` while it has an instance name, represented as `app.kubernetes.io/instance` with a value of -`wordpress-abcxzy`. This enables the application and instance of the application +`wordpress-abcxyz`. This enables the application and instance of the application to be identifiable. Every instance of an application must have a unique name. ## Examples @@ -85,7 +85,7 @@ kind: Deployment metadata: labels: app.kubernetes.io/name: myservice - app.kubernetes.io/instance: myservice-abcxzy + app.kubernetes.io/instance: myservice-abcxyz ... ``` @@ -96,7 +96,7 @@ kind: Service metadata: labels: app.kubernetes.io/name: myservice - app.kubernetes.io/instance: myservice-abcxzy + app.kubernetes.io/instance: myservice-abcxyz ... ``` @@ -114,7 +114,7 @@ kind: Deployment metadata: labels: app.kubernetes.io/name: wordpress - app.kubernetes.io/instance: wordpress-abcxzy + app.kubernetes.io/instance: wordpress-abcxyz app.kubernetes.io/version: "4.9.4" app.kubernetes.io/managed-by: helm app.kubernetes.io/component: server @@ -130,7 +130,7 @@ kind: Service metadata: labels: app.kubernetes.io/name: wordpress - app.kubernetes.io/instance: wordpress-abcxzy + app.kubernetes.io/instance: wordpress-abcxyz app.kubernetes.io/version: "4.9.4" app.kubernetes.io/managed-by: helm app.kubernetes.io/component: server @@ -146,7 +146,7 @@ kind: StatefulSet metadata: labels: app.kubernetes.io/name: mysql - app.kubernetes.io/instance: mysql-abcxzy + app.kubernetes.io/instance: mysql-abcxyz app.kubernetes.io/version: "5.7.21" app.kubernetes.io/managed-by: helm app.kubernetes.io/component: database @@ -162,7 +162,7 @@ kind: Service metadata: labels: app.kubernetes.io/name: mysql - app.kubernetes.io/instance: mysql-abcxzy + app.kubernetes.io/instance: mysql-abcxyz app.kubernetes.io/version: "5.7.21" app.kubernetes.io/managed-by: helm app.kubernetes.io/component: database diff --git a/content/en/docs/reference/labels-annotations-taints/_index.md b/content/en/docs/reference/labels-annotations-taints/_index.md index ad6ee70446..5d024df7d7 100644 --- a/content/en/docs/reference/labels-annotations-taints/_index.md +++ b/content/en/docs/reference/labels-annotations-taints/_index.md @@ -66,7 +66,7 @@ Starting from v1.9, this label is deprecated. Type: Label -Example: `app.kubernetes.io/instance: "mysql-abcxzy"` +Example: `app.kubernetes.io/instance: "mysql-abcxyz"` Used on: All Objects (typically used on [workload resources](/docs/reference/kubernetes-api/workload-resources/)). From 523a119eb173fca61cfd4b98c27ba301ee52c305 Mon Sep 17 00:00:00 2001 From: Sergey Shevchenko Date: Sat, 6 Apr 2024 15:26:50 +0300 Subject: [PATCH 0278/1086] feat: Update image name documentation --- content/en/docs/concepts/containers/images.md | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/content/en/docs/concepts/containers/images.md b/content/en/docs/concepts/containers/images.md index 8602d6c98d..2eab2c8aa4 100644 --- a/content/en/docs/concepts/containers/images.md +++ b/content/en/docs/concepts/containers/images.md @@ -33,17 +33,35 @@ Container images are usually given a name such as `pause`, `example/mycontainer` Images can also include a registry hostname; for example: `fictional.registry.example/imagename`, and possibly a port number as well; for example: `fictional.registry.example:10443/imagename`. -If you don't specify a registry hostname, Kubernetes assumes that you mean the Docker public registry. +If you don't specify a registry hostname, Kubernetes assumes that you mean the [Docker public registry](https://hub.docker.com/). +You can change this behaviour by setting default image registry in [container runtime](/docs/setup/production-environment/container-runtimes/) configuration. -After the image name part you can add a _tag_ (in the same way you would when using with commands -like `docker` or `podman`). Tags let you identify different versions of the same series of images. +After the image name part you can add a _tag_ or _digest_ (in the same way you would when using with commands +like `docker` or `podman`). Tags let you identify different versions of the same series of images. +Digests are a unique identifier for a specific version of an image. Digests are hashes of the image's content, +and are immutable. Tags can be moved to point to different images, but digests are fixed. Image tags consist of lowercase and uppercase letters, digits, underscores (`_`), -periods (`.`), and dashes (`-`). -There are additional rules about where you can place the separator -characters (`_`, `-`, and `.`) inside an image tag. +periods (`.`), and dashes (`-`). It can be up to 128 characters long. And must follow the +next regex pattern: `[a-zA-Z0-9_][a-zA-Z0-9._-]{0,127}` +You can read more about and find validation regex in the +[OCI Distribution Specification](https://github.com/opencontainers/distribution-spec/blob/v1.1.0/spec.md#workflow-categories). If you don't specify a tag, Kubernetes assumes you mean the tag `latest`. +Image digests consists of a hash algorithm (such as `sha256`) and a hash value. For example: +`sha256:1ff6c18fbef2045af6b9c16bf034cc421a29027b800e4f9b68ae9b1cb3e9ae07` +You can find more information about digests format in the +[OCI Image Specification](https://github.com/opencontainers/image-spec/blob/v1.1.0/descriptor.md#digests). + +Some image name examples that Kubernetes can use are: + +- `busybox` - Image name only, no tag or digest. Kubernetes will use Docker public registry and latest tag. (Same as `docker.io/library/busybox:latest`) +- `busybox:1.32.0` - Image name with tag. Kubernetes will use Docker public registry. (Same as `docker.io/library/busybox:1.32.0`) +- `registry.k8s.io/pause:latest` - Image name with a custom registry and latest tag. +- `registry.k8s.io/pause:3.5` - Image name with a custom registry and non-latest tag. +- `registry.k8s.io/pause@sha256:1ff6c18fbef2045af6b9c16bf034cc421a29027b800e4f9b68ae9b1cb3e9ae07` - Image name with digest. +- `registry.k8s.io/pause:3.5@sha256:1ff6c18fbef2045af6b9c16bf034cc421a29027b800e4f9b68ae9b1cb3e9ae07` - Image name with tag and digest. Only digest will be used for pulling. + ## Updating images When you first create a {{< glossary_tooltip text="Deployment" term_id="deployment" >}}, From 67c5b2e28cafb51817d46b2c468760c8f60c1d31 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" <95066025+radiumSodium@users.noreply.github.com> Date: Mon, 8 Apr 2024 13:07:49 +0600 Subject: [PATCH 0279/1086] [bn] localization of init-container.md --- .../docs/reference/glossary/init-container.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 content/bn/docs/reference/glossary/init-container.md diff --git a/content/bn/docs/reference/glossary/init-container.md b/content/bn/docs/reference/glossary/init-container.md new file mode 100644 index 0000000000..c471719f14 --- /dev/null +++ b/content/bn/docs/reference/glossary/init-container.md @@ -0,0 +1,21 @@ +--- +title: ইনিট কন্টেইনার(Init Container) +id: init-container +date: 2018-04-12 +full_link: +short_description: > + এক বা একাধিক ইনিশিয়ালাইজেশন কন্টেইনার যা অবশ্যই কোনো অ্যাপ কন্টেইনার রান করার পূর্বে রান হতে হবে। +full_link: /bn/docs/concepts/workloads/pods/init-containers/ +aka: +tags: +- fundamental +--- + এক বা একাধিক ইনিশিয়ালাইজেশন {{< glossary_tooltip text="কন্টেইনার" term_id="container" >}} যা অবশ্যই কোনো অ্যাপ কন্টেইনার রান করার পূর্বে রান হতে হবে। + + + +ইনিশিয়ালাইজেশন(ইনিট) কন্টেনারগুলি সাধারণ অ্যাপ কন্টেইনারগুলির মতো, একটি পার্থক্য সহ: কোন অ্যাপ কন্টেইনার শুরু করার আগে ইনিট কন্টেইনারগুলি অবশ্যই রান হতে হবে৷ ইনিট কন্টেইনারগুলো ধারাবাহিকভাবে রান করে: প্রতিটি ইনিট কন্টেইনারকে অবশ্যই পরবর্তী কন্টেইনার শুরু হওয়ার পূর্বেই রান হতে হবে। + +{{< glossary_tooltip text="সাইডকার কন্টেইনার" term_id="sidecar-container" >}}এর বিপরীতে, ইনিট কন্টেইনারগুলি পড স্টার্টআপের পরে চলতে থাকে না। + +আরও তথ্যের জন্য, পড়ুন [ইনিট কন্টেইনার](/bn/docs/concepts/workloads/pods/init-containers/). From d737e98e73eb8f1e5f884bc9575c995bd84b1ffb Mon Sep 17 00:00:00 2001 From: Nafisa-Tabassum-Mim Date: Mon, 8 Apr 2024 16:10:31 +0600 Subject: [PATCH 0280/1086] some folder added in case-studies --- content/bn/case-studies/adform/index.html | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/bn/case-studies/adform/index.html diff --git a/content/bn/case-studies/adform/index.html b/content/bn/case-studies/adform/index.html new file mode 100644 index 0000000000..e69de29bb2 From 889010f0c804f3c0ee2ece1e34c0c420305de4fc Mon Sep 17 00:00:00 2001 From: Nafisa-Tabassum-Mim Date: Mon, 8 Apr 2024 16:14:29 +0600 Subject: [PATCH 0281/1086] again some folder added --- content/bn/case-studies/adidas/index.html | 0 content/bn/case-studies/ancestry/index.html | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/bn/case-studies/adidas/index.html create mode 100644 content/bn/case-studies/ancestry/index.html diff --git a/content/bn/case-studies/adidas/index.html b/content/bn/case-studies/adidas/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ancestry/index.html b/content/bn/case-studies/ancestry/index.html new file mode 100644 index 0000000000..e69de29bb2 From c8dcfee5599be279946bcbb26381a6a87f3b09e5 Mon Sep 17 00:00:00 2001 From: Nafisa-Tabassum-Mim Date: Mon, 8 Apr 2024 16:34:47 +0600 Subject: [PATCH 0282/1086] all the folders added in case-studies --- content/bn/case-studies/amadeus/index.html | 0 content/bn/case-studies/ant-financial/index.html | 0 content/bn/case-studies/appdirect/index.html | 0 content/bn/case-studies/babylon/index.html | 0 content/bn/case-studies/blablacar/index.html | 0 content/bn/case-studies/blackrock/index.html | 0 content/bn/case-studies/booking-com/index.html | 0 content/bn/case-studies/booz-allen/index.html | 0 content/bn/case-studies/bose/index.html | 0 content/bn/case-studies/box/index.html | 0 content/bn/case-studies/buffer/index.html | 0 content/bn/case-studies/capital-one/index.html | 0 content/bn/case-studies/cern/index.html | 0 content/bn/case-studies/chinaunicom/index.html | 0 content/bn/case-studies/city-of-montreal/index.html | 0 content/bn/case-studies/crowdfire/index.html | 0 content/bn/case-studies/daocloud/index.html | 0 content/bn/case-studies/denso/index.html | 0 content/bn/case-studies/golfnow/index.html | 0 content/bn/case-studies/haufegroup/index.html | 0 content/bn/case-studies/huawei/index.html | 0 content/bn/case-studies/ibm/index.html | 0 content/bn/case-studies/ing/index.html | 0 content/bn/case-studies/jd-com/index.html | 0 content/bn/case-studies/naic/index.html | 0 content/bn/case-studies/nav/index.html | 0 content/bn/case-studies/nerdalize/index.html | 0 content/bn/case-studies/netease/index.html | 0 content/bn/case-studies/newyorktimes/index.html | 0 content/bn/case-studies/nokia/index.html | 0 content/bn/case-studies/nordstrom/index.html | 0 content/bn/case-studies/northwestern-mutual/index.html | 0 content/bn/case-studies/ocado/index.html | 0 content/bn/case-studies/openAI/index.html | 0 content/bn/case-studies/peardeck/index.html | 0 content/bn/case-studies/pearson/index.html | 0 content/bn/case-studies/pingcap/index.html | 0 content/bn/case-studies/pinterest/index.html | 0 content/bn/case-studies/prowise/index.html | 0 content/bn/case-studies/ricardo-ch/index.html | 0 content/bn/case-studies/slamtec/index.html | 0 content/bn/case-studies/slingtv/index.html | 0 content/bn/case-studies/sos/index.html | 0 content/bn/case-studies/spotify/index.html | 0 content/bn/case-studies/squarespace/index.html | 0 content/bn/case-studies/thredup/index.html | 0 content/bn/case-studies/vsco/index.html | 0 content/bn/case-studies/wikimedia/index.html | 0 content/bn/case-studies/wink/index.html | 0 content/bn/case-studies/woorank/index.html | 0 content/bn/case-studies/workiva/index.html | 0 content/bn/case-studies/yahoo-japan/index.html | 0 content/bn/case-studies/ygrene/index.html | 0 content/bn/case-studies/zalando/index.html | 0 54 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/bn/case-studies/amadeus/index.html create mode 100644 content/bn/case-studies/ant-financial/index.html create mode 100644 content/bn/case-studies/appdirect/index.html create mode 100644 content/bn/case-studies/babylon/index.html create mode 100644 content/bn/case-studies/blablacar/index.html create mode 100644 content/bn/case-studies/blackrock/index.html create mode 100644 content/bn/case-studies/booking-com/index.html create mode 100644 content/bn/case-studies/booz-allen/index.html create mode 100644 content/bn/case-studies/bose/index.html create mode 100644 content/bn/case-studies/box/index.html create mode 100644 content/bn/case-studies/buffer/index.html create mode 100644 content/bn/case-studies/capital-one/index.html create mode 100644 content/bn/case-studies/cern/index.html create mode 100644 content/bn/case-studies/chinaunicom/index.html create mode 100644 content/bn/case-studies/city-of-montreal/index.html create mode 100644 content/bn/case-studies/crowdfire/index.html create mode 100644 content/bn/case-studies/daocloud/index.html create mode 100644 content/bn/case-studies/denso/index.html create mode 100644 content/bn/case-studies/golfnow/index.html create mode 100644 content/bn/case-studies/haufegroup/index.html create mode 100644 content/bn/case-studies/huawei/index.html create mode 100644 content/bn/case-studies/ibm/index.html create mode 100644 content/bn/case-studies/ing/index.html create mode 100644 content/bn/case-studies/jd-com/index.html create mode 100644 content/bn/case-studies/naic/index.html create mode 100644 content/bn/case-studies/nav/index.html create mode 100644 content/bn/case-studies/nerdalize/index.html create mode 100644 content/bn/case-studies/netease/index.html create mode 100644 content/bn/case-studies/newyorktimes/index.html create mode 100644 content/bn/case-studies/nokia/index.html create mode 100644 content/bn/case-studies/nordstrom/index.html create mode 100644 content/bn/case-studies/northwestern-mutual/index.html create mode 100644 content/bn/case-studies/ocado/index.html create mode 100644 content/bn/case-studies/openAI/index.html create mode 100644 content/bn/case-studies/peardeck/index.html create mode 100644 content/bn/case-studies/pearson/index.html create mode 100644 content/bn/case-studies/pingcap/index.html create mode 100644 content/bn/case-studies/pinterest/index.html create mode 100644 content/bn/case-studies/prowise/index.html create mode 100644 content/bn/case-studies/ricardo-ch/index.html create mode 100644 content/bn/case-studies/slamtec/index.html create mode 100644 content/bn/case-studies/slingtv/index.html create mode 100644 content/bn/case-studies/sos/index.html create mode 100644 content/bn/case-studies/spotify/index.html create mode 100644 content/bn/case-studies/squarespace/index.html create mode 100644 content/bn/case-studies/thredup/index.html create mode 100644 content/bn/case-studies/vsco/index.html create mode 100644 content/bn/case-studies/wikimedia/index.html create mode 100644 content/bn/case-studies/wink/index.html create mode 100644 content/bn/case-studies/woorank/index.html create mode 100644 content/bn/case-studies/workiva/index.html create mode 100644 content/bn/case-studies/yahoo-japan/index.html create mode 100644 content/bn/case-studies/ygrene/index.html create mode 100644 content/bn/case-studies/zalando/index.html diff --git a/content/bn/case-studies/amadeus/index.html b/content/bn/case-studies/amadeus/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ant-financial/index.html b/content/bn/case-studies/ant-financial/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/appdirect/index.html b/content/bn/case-studies/appdirect/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/babylon/index.html b/content/bn/case-studies/babylon/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/blablacar/index.html b/content/bn/case-studies/blablacar/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/blackrock/index.html b/content/bn/case-studies/blackrock/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/booking-com/index.html b/content/bn/case-studies/booking-com/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/booz-allen/index.html b/content/bn/case-studies/booz-allen/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/bose/index.html b/content/bn/case-studies/bose/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/box/index.html b/content/bn/case-studies/box/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/buffer/index.html b/content/bn/case-studies/buffer/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/capital-one/index.html b/content/bn/case-studies/capital-one/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/cern/index.html b/content/bn/case-studies/cern/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/chinaunicom/index.html b/content/bn/case-studies/chinaunicom/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/city-of-montreal/index.html b/content/bn/case-studies/city-of-montreal/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/crowdfire/index.html b/content/bn/case-studies/crowdfire/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/daocloud/index.html b/content/bn/case-studies/daocloud/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/denso/index.html b/content/bn/case-studies/denso/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/golfnow/index.html b/content/bn/case-studies/golfnow/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/haufegroup/index.html b/content/bn/case-studies/haufegroup/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/huawei/index.html b/content/bn/case-studies/huawei/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ibm/index.html b/content/bn/case-studies/ibm/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ing/index.html b/content/bn/case-studies/ing/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/jd-com/index.html b/content/bn/case-studies/jd-com/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/naic/index.html b/content/bn/case-studies/naic/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/nav/index.html b/content/bn/case-studies/nav/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/nerdalize/index.html b/content/bn/case-studies/nerdalize/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/netease/index.html b/content/bn/case-studies/netease/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/newyorktimes/index.html b/content/bn/case-studies/newyorktimes/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/nokia/index.html b/content/bn/case-studies/nokia/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/nordstrom/index.html b/content/bn/case-studies/nordstrom/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/northwestern-mutual/index.html b/content/bn/case-studies/northwestern-mutual/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ocado/index.html b/content/bn/case-studies/ocado/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/openAI/index.html b/content/bn/case-studies/openAI/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/peardeck/index.html b/content/bn/case-studies/peardeck/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/pearson/index.html b/content/bn/case-studies/pearson/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/pingcap/index.html b/content/bn/case-studies/pingcap/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/pinterest/index.html b/content/bn/case-studies/pinterest/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/prowise/index.html b/content/bn/case-studies/prowise/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ricardo-ch/index.html b/content/bn/case-studies/ricardo-ch/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/slamtec/index.html b/content/bn/case-studies/slamtec/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/slingtv/index.html b/content/bn/case-studies/slingtv/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/sos/index.html b/content/bn/case-studies/sos/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/spotify/index.html b/content/bn/case-studies/spotify/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/squarespace/index.html b/content/bn/case-studies/squarespace/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/thredup/index.html b/content/bn/case-studies/thredup/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/vsco/index.html b/content/bn/case-studies/vsco/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/wikimedia/index.html b/content/bn/case-studies/wikimedia/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/wink/index.html b/content/bn/case-studies/wink/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/woorank/index.html b/content/bn/case-studies/woorank/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/workiva/index.html b/content/bn/case-studies/workiva/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/yahoo-japan/index.html b/content/bn/case-studies/yahoo-japan/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ygrene/index.html b/content/bn/case-studies/ygrene/index.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/zalando/index.html b/content/bn/case-studies/zalando/index.html new file mode 100644 index 0000000000..e69de29bb2 From 858ffca121a2988c4c9ea5a111c845c23092d9e5 Mon Sep 17 00:00:00 2001 From: Pronay Sarker Date: Mon, 8 Apr 2024 21:26:43 +0600 Subject: [PATCH 0283/1086] Update federation-deprecation-warning-note.md --- content/bn/includes/federation-deprecation-warning-note.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/includes/federation-deprecation-warning-note.md b/content/bn/includes/federation-deprecation-warning-note.md index cce2a4c111..ae1dc3cb9f 100644 --- a/content/bn/includes/federation-deprecation-warning-note.md +++ b/content/bn/includes/federation-deprecation-warning-note.md @@ -1,3 +1,3 @@ -`Federation v1` এর ব্যবহার অনুমোদিত নয়। `Federation v1` কখনও GA অবস্থায় পৌঁছেনি এবং বর্তমানে উন্নতি সক্রিয় নহে। ডকুমেন্টেশন ঐতিহাসিক উদ্দেশ্যে মাত্র। +`Federation v1` ব্যবহার দৃঢ়ভাবে নিরুৎসাহিত করা হয়। `Federation V1` কখনই GA স্ট্যাটাস অর্জন করেনি এবং আর সক্রিয় ডেভেলপমেন্ট অধীনে নেই। ডকুমেন্টেশন শুধুমাত্র ঐতিহাসিক উদ্দেশ্যে । -বিস্তারিত জানতে, [Kubernetes Federation v2](https://github.com/kubernetes-sigs/federation-v2) এর ইন্টেন্ডেড প্রতিস্থাপন দেখুন। +বিস্তারিত জানতে, এর ইন্টেন্ডেড প্রতিস্থাপন দেখুন , [Kubernetes Federation v2](https://github.com/kubernetes-sigs/federation-v2) । From 9e7591102bf52e3c86118c8a7f569a3528a61c44 Mon Sep 17 00:00:00 2001 From: Pronay Sarker Date: Mon, 8 Apr 2024 21:29:00 +0600 Subject: [PATCH 0284/1086] Update index.md --- content/bn/includes/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/includes/index.md b/content/bn/includes/index.md index 293bb26ae2..ca03031f1e 100644 --- a/content/bn/includes/index.md +++ b/content/bn/includes/index.md @@ -1,3 +1,3 @@ --- -headless: সত্য +headless: true --- From badc7082da764ced44bb39db6a3c7e6d1f4358c3 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Tue, 9 Apr 2024 00:49:38 +0600 Subject: [PATCH 0285/1086] Create affinity.md --- .../bn/docs/reference/glossary/affinity.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 content/bn/docs/reference/glossary/affinity.md diff --git a/content/bn/docs/reference/glossary/affinity.md b/content/bn/docs/reference/glossary/affinity.md new file mode 100644 index 0000000000..37b2d36c9d --- /dev/null +++ b/content/bn/docs/reference/glossary/affinity.md @@ -0,0 +1,22 @@ +--- +title: অ্যাফিনিটি +id: affinity +date: 2019-01-11 +full_link: /bn/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity +short_description: > + সময়সূচী দ্বারা ব্যবহৃত নিয়ম নির্ধারণ করে পড কোথায় রাখতে হবে +aka: +tags: +- fundamental +--- + +কুবারনেটিসে, _অ্যাফিনিটি_ হল নিয়মগুলির একটি সেট যা পডগুলি কোথায় রাখতে হবে সে সম্পর্কে সময়সূচীকে ইঙ্গিত দেয়। + + +দুই ধরণের অ্যাফিনিটি রয়েছে: +* [নোড অ্যাফিনিটি](/bn/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity) +* [পড-টু-পড অ্যাফিনিটি](/bn/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-ant-affinity) + +নিয়মগুলি সংজ্ঞায়িত করা হয়েছে কুবারনেটিস ব্যবহার করে {{< glossary_tooltip term_id="label" text="লেবেল">}}, +এবং {{< glossary_tooltip term_id="selector" text="নির্বাচক">}} এ উল্লেখ করা হয়েছে {{< glossary_tooltip term_id="pod" text="পড" >}}, +এবং সেগুলি হয় প্রয়োজন বা পছন্দের হতে পারে, আপনি কতটা কঠোরভাবে সময়সূচীকে তাদের প্রয়োগ করতে চান তার উপর নির্ভর করে। From fc5f9eabf9cd72b3c02cfb94243af753c0fe95fc Mon Sep 17 00:00:00 2001 From: Nafisa-Tabassum-Mim Date: Tue, 9 Apr 2024 02:40:23 +0600 Subject: [PATCH 0286/1086] pic added --- content/bn/case-studies/adform/index.html | 86 +++++++++++++++++ content/bn/case-studies/adidas/index.html | 78 ++++++++++++++++ content/bn/case-studies/amadeus/index.html | 84 +++++++++++++++++ content/bn/case-studies/ancestry/index.html | 92 +++++++++++++++++++ .../bn/case-studies/ant-financial/index.html | 82 +++++++++++++++++ content/bn/case-studies/appdirect/index.html | 85 +++++++++++++++++ content/bn/case-studies/babylon/index.html | 84 +++++++++++++++++ .../blablacar/blablacar_featured.png | 0 8 files changed, 591 insertions(+) create mode 100644 content/bn/case-studies/blablacar/blablacar_featured.png diff --git a/content/bn/case-studies/adform/index.html b/content/bn/case-studies/adform/index.html index e69de29bb2..0be118b046 100644 --- a/content/bn/case-studies/adform/index.html +++ b/content/bn/case-studies/adform/index.html @@ -0,0 +1,86 @@ +--- +title: Adform Case Study +linkTitle: Adform +case_study_styles: true +cid: caseStudies +logo: adform_featured_logo.png +draft: false +featured: true +weight: 47 +quote: > + Kubernetes enabled the self-healing and immutable infrastructure. We can do faster releases, so our developers are really happy. They can ship our features faster than before, and that makes our clients happier. + +new_case_study_styles: true +heading_background: /images/case-studies/adform/banner1.jpg +heading_title_logo: /images/adform_logo.png +subheading: > + Improving Performance and Morale with Cloud Native +case_study_details: + - Company: AdForm + - Location: Copenhagen, Denmark + - Industry: Adtech +--- + +

Challenge

+ +

Adform's mission is to provide a secure and transparent full stack of advertising technology to enable digital ads across devices. The company has a large infrastructure: OpenStack-based private clouds running on 1,100 physical servers in 7 data centers around the world, 3 of which were opened in the past year. With the company's growth, the infrastructure team felt that "our private cloud was not really flexible enough," says IT System Engineer Edgaras Apšega. "The biggest pain point is that our developers need to maintain their virtual machines, so rolling out technology and new software takes time. We were really struggling with our releases, and we didn't have self-healing infrastructure."

+ +

Solution

+ +

The team, which had already been using Prometheus for monitoring, embraced Kubernetes and cloud native practices in 2017. "To start our Kubernetes journey, we had to adapt all our software, so we had to choose newer frameworks," says Apšega. "We also adopted the microservices way, so observability is much better because you can inspect the bug or the services separately."

+ +

Impact

+ +

"Kubernetes helps our business a lot because our features are coming to market faster," says Apšega. The release process went from several hours to several minutes. Autoscaling has been at least 6 times faster than the semi-manual VM bootstrapping and application deployment required before. The team estimates that the company has experienced cost savings of 4-5x due to less hardware and fewer man hours needed to set up the hardware and virtual machines, metrics, and logging. Utilization of the hardware resources has been reduced as well, with containers notching 2-3 times more efficiency over virtual machines. "The deployments are very easy because developers just push the code and it automatically appears on Kubernetes," says Apšega. Prometheus has also had a positive impact: "It provides high availability for metrics and alerting. We monitor everything starting from hardware to applications. Having all the metrics in Grafana dashboards provides great insight on your systems."

+ +{{< case-studies/quote author="Edgaras Apšega, IT Systems Engineer, Adform" >}} +"Kubernetes enabled the self-healing and immutable infrastructure. We can do faster releases, so our developers are really happy. They can ship our features faster than before, and that makes our clients happier." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Adform made headlines last year when it detected the HyphBot ad fraud network that was costing some businesses hundreds of thousands of dollars a day. +{{< /case-studies/lead >}} + +

With its mission to provide a secure and transparent full stack of advertising technology to enable an open internet, Adform published a white paper revealing what it did—and others could too—to limit customers' exposure to the scam.

+ +

In that same spirit, Adform is sharing its cloud native journey. "When you see that everyone shares their best practices, it inspires you to contribute back to the project," says IT Systems Engineer Edgaras Apšega.

+ +

The company has a large infrastructure: OpenStack-based private clouds running on 1,100 physical servers in their own seven data centers around the world, three of which were opened in the past year. With the company's growth, the infrastructure team felt that "our private cloud was not really flexible enough," says Apšega. "The biggest pain point is that our developers need to maintain their virtual machines, so rolling out technology and new software really takes time. We were really struggling with our releases, and we didn't have self-healing infrastructure."

+ +{{< case-studies/quote + image="/images/case-studies/adform/banner3.jpg" + author="Edgaras Apšega, IT Systems Engineer, Adform" +>}} +"The fact that Cloud Native Computing Foundation incubated Kubernetes was a really big point for us because it was vendor neutral. And we can see that a community really gathers around it. Everyone shares their experiences, their knowledge, and the fact that it's open source, you can contribute." +{{< /case-studies/quote >}} + +

The team, which had already been using Prometheus for monitoring, embraced Kubernetes, microservices, and cloud native practices. "The fact that Cloud Native Computing Foundation incubated Kubernetes was a really big point for us because it was vendor neutral," says Apšega. "And we can see that a community really gathers around it."

+ +

A proof of concept project was started, with a Kubernetes cluster running on bare metal in the data center. When developers saw how quickly containers could be spun up compared to the virtual machine process, "they wanted to ship their containers in production right away, and we were still doing proof of concept," says IT Systems Engineer Andrius Cibulskis.

+ +

Of course, a lot of work still had to be done. "First of all, we had to learn Kubernetes, see all of the moving parts, how they glue together," says Apšega. "Second of all, the whole CI/CD part had to be redone, and our DevOps team had to invest more man hours to implement it. And third is that developers had to rewrite the code, and they're still doing it."

+ +

The first production cluster was launched in the spring of 2018, and is now up to 20 physical machines dedicated for pods throughout three data centers, with plans for separate clusters in the other four data centers. The user-facing Adform application platform, data distribution platform, and back ends are now all running on Kubernetes. "Many APIs for critical applications are being developed for Kubernetes," says Apšega. "Teams are rewriting their applications to .NET core, because it supports containers, and preparing to move to Kubernetes. And new applications, by default, go in containers."

+ +{{< case-studies/quote + image="/images/case-studies/adform/banner4.jpg" + author="Andrius Cibulskis, IT Systems Engineer, Adform" +>}} +"Releases are really nice for them, because they just push their code to Git and that's it. They don't have to worry about their virtual machines anymore." +{{< /case-studies/quote >}} + +

This big push has been driven by the real impact that these new practices have had. "Kubernetes helps our business a lot because our features are coming to market faster," says Apšega. "The deployments are very easy because developers just push the code and it automatically appears on Kubernetes." The release process went from several hours to several minutes. Autoscaling is at least six times faster than the semi-manual VM bootstrapping and application deployment required before.

+ +

The team estimates that the company has experienced cost savings of 4-5x due to less hardware and fewer man hours needed to set up the hardware and virtual machines, metrics, and logging. Utilization of the hardware resources has been reduced as well, with containers notching two to three times more efficiency over virtual machines.

+ +

Prometheus has also had a positive impact: "It provides high availability for metrics and alerting," says Apšega. "We monitor everything starting from hardware to applications. Having all the metrics in Grafana dashboards provides great insight on our systems."

+ +{{< case-studies/quote author="Edgaras Apšega, IT Systems Engineer, Adform" >}} +"I think that our company just started our cloud native journey. It seems like a huge road ahead, but we're really happy that we joined it." +{{< /case-studies/quote >}} + +

All of these benefits have trickled down to individual team members, whose working lives have been changed for the better. "They used to have to get up at night to re-start some services, and now Kubernetes handles all of that," says Apšega. Adds Cibulskis: "Releases are really nice for them, because they just push their code to Git and that's it. They don't have to worry about their virtual machines anymore." Even the security teams have been impacted. "Security teams are always not happy," says Apšega, "and now they're happy because they can easily inspect the containers."

+ +

The company plans to remain in the data centers for now, "mostly because we want to keep all the data, to not share it in any way," says Cibulskis, "and it's cheaper at our scale." But, Apšega says, the possibility of using a hybrid cloud for computing is intriguing: "One of the projects we're interested in is the Virtual Kubelet that lets you spin up the working nodes on different clouds to do some computing."

+ +

Apšega, Cibulskis and their colleagues are keeping tabs on how the cloud native ecosystem develops, and are excited to contribute where they can. "I think that our company just started our cloud native journey," says Apšega. "It seems like a huge road ahead, but we're really happy that we joined it."

\ No newline at end of file diff --git a/content/bn/case-studies/adidas/index.html b/content/bn/case-studies/adidas/index.html index e69de29bb2..f656698f70 100644 --- a/content/bn/case-studies/adidas/index.html +++ b/content/bn/case-studies/adidas/index.html @@ -0,0 +1,78 @@ +--- +title: adidas Case Study +linkTitle: adidas +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/adidas/banner1.png +heading_title_text: adidas +use_gradient_overlay: true +subheading: > + Staying True to Its Culture, adidas Got 40% of Its Most Impactful Systems Running on Kubernetes in a Year +case_study_details: + - Company: adidas + - Location: Herzogenaurach, Germany + - Industry: Fashion +--- + +

Challenge

+ +

In recent years, the adidas team was happy with its software choices from a technology perspective—but accessing all of the tools was a problem. For instance, "just to get a developer VM, you had to send a request form, give the purpose, give the title of the project, who's responsible, give the internal cost center a call so that they can do recharges," says Daniel Eichten, Senior Director of Platform Engineering. "The best case is you got your machine in half an hour. Worst case is half a week or sometimes even a week."

+ +

Solution

+ +

To improve the process, "we started from the developer point of view," and looked for ways to shorten the time it took to get a project up and running and into the adidas infrastructure, says Senior Director of Platform Engineering Fernando Cornago. They found the solution with containerization, agile development, continuous delivery, and a cloud native platform that includes Kubernetes and Prometheus.

+ +

Impact

+ +

Just six months after the project began, 100% of the adidas e-commerce site was running on Kubernetes. Load time for the e-commerce site was reduced by half. Releases went from every 4-6 weeks to 3-4 times a day. With 4,000 pods, 200 nodes, and 80,000 builds per month, adidas is now running 40% of its most critical, impactful systems on its cloud native platform.

+ +{{< case-studies/quote + image="/images/case-studies/adidas/banner2.png" + author="FERNANDO CORNAGO, SENIOR DIRECTOR OF PLATFORM ENGINEERING AT ADIDAS" +>}} +"For me, Kubernetes is a platform made by engineers for engineers. It's relieving the development team from tasks that they don't want to do, but at the same time giving the visibility of what is behind the curtain, so they can also control it." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +In recent years, the adidas team was happy with its software choices from a technology perspective—but accessing all of the tools was a problem. +{{< /case-studies/lead >}} + +

For engineers at adidas, says Daniel Eichten, Senior Director of Platform Engineering, "it felt like being an artist with your hands tied behind your back, and you're supposed to paint something."

+ +

For instance, "just to get a developer VM, you had to send a request form, give the purpose, give the title of the project, who's responsible, give the internal cost center a call so that they can do recharges," says Eichten. "Eventually, after a ton of approvals, then the provisioning of the machine happened within minutes, and then the best case is you got your machine in half an hour. Worst case is half a week or sometimes even a week."

+ +

To improve the process, "we started from the developer point of view," and looked for ways to shorten the time it took to get a project up and running and into the adidas infrastructure, says Senior Director of Platform Engineering Fernando Cornago.

+ +{{< case-studies/quote author="DANIEL EICHTEN, SENIOR DIRECTOR OF PLATFORM ENGINEERING AT ADIDAS" >}} +"I call our cloud native platform the field of dreams. We built it, and we never anticipated that people would come and just love it." +{{< /case-studies/quote >}} + +

"We were engineers before," adds Eichten. "We know what a typical engineer needs, is craving for, what he or she doesn't want to take care of. For us it was pretty clear. We filled the gaps that no one wants to take care of, and we make the stuff that is usually painful as painless as possible." The goals: to improve speed, operability, and observability.

+ +

Cornago and Eichten found the solution with containerization, agile development, continuous delivery, and a cloud native platform that includes Kubernetes and Prometheus. "Choosing Kubernetes was pretty clear," says Eichten. "Day zero, deciding, easy. Day one, installing, configuring, easy. Day two, keeping it up and running even with small workloads, if something goes wrong, you don't know how these things work in detail, you're lost. For day two problems, we needed a partner who's helping us."

+ +

In early 2017, adidas chose Giant Swarm to consult, install, configure, and run all of its Kubernetes clusters in AWS and on premise. "There is no competitive edge over our competitors like Puma or Nike in running and operating a Kubernetes cluster," says Eichten. "Our competitive edge is that we teach our internal engineers how to build cool e-comm stores that are fast, that are resilient, that are running perfectly."

+ +{{< case-studies/quote + image="/images/case-studies/adidas/banner3.png" + author="DANIEL EICHTEN, SENIOR DIRECTOR OF PLATFORM ENGINEERING AT ADIDAS" +>}} +"There is no competitive edge over our competitors like Puma or Nike in running and operating a Kubernetes cluster. Our competitive edge is that we teach our internal engineers how to build cool e-comm stores that are fast, that are resilient, that are running perfectly." +{{< /case-studies/quote >}} + +

Adds Cornago: "For me, our Kubernetes platform is made by engineers for engineers. It's relieving the development team from tasks that they don't want to do, but at the same time giving the visibility of what is behind the curtain, so they can also control it."

+ +

Case in point: For Cyber Week, the team has to create a lot of custom metrics. In November 2017, "because we used the same Prometheus that we use for monitoring the cluster, we really filled the Prometheus database, and we were not able to reduce the retention period [enough]," says Cornago. So during the freeze period before the peak shopping week, five engineers from the platform team worked with five engineers from the e-comm team to figure out a federated solution that was implemented in two days.

+ +

In addition to being ready for Cyber Week—100% of the adidas e-commerce site was running on Kubernetes then, just six months after the project began—the cloud native stack has had other impressive results. Load time for the e-commerce site was reduced by half. Releases went from every 4-6 weeks to 3-4 times a day. With 4,000 pods, 200 nodes, and 80,000 builds per month, adidas is now running 40% of its most critical, impactful systems on its cloud native platform.

+ +

And adoption has spread quickly among adidas's 300-strong engineering corps. "I call our cloud native platform the field of dreams," says Eichten. "We built it, and we never anticipated that people would come and just love it."

+ +

For one thing, "everybody who can touch a line of code" has spent one full week onboarding and learning the platform with members of the 35-person platform engineering team, says Cornago. "We try to spend 50% of our time sitting with the teams, because this is the only way to understand how our platform is being used. And this is how the teams will feel safe that there is someone on the other side of the wall, also feeling the pain."

+ +

Additionally, Cornago and Eichten took advantage of the fact that as a fashion athletic wear brand, adidas has sports and competition in its DNA. "Top-down mandates don't work at adidas, but gamification works," says Cornago. "So this year we had a DevOps Cup competition. Every team created new technical capabilities and had a hypothesis of how this affected business value. We announced the winner at a big internal tech summit with more than 600 people. It's been really, really useful for the teams."

+ +

So if they had any advice for other companies looking to start a cloud native journey, it would be this: "There is no one-size-fits-all for all companies," says Cornago. "Apply your company's culture to everything that you do."

\ No newline at end of file diff --git a/content/bn/case-studies/amadeus/index.html b/content/bn/case-studies/amadeus/index.html index e69de29bb2..c6976f0c0d 100644 --- a/content/bn/case-studies/amadeus/index.html +++ b/content/bn/case-studies/amadeus/index.html @@ -0,0 +1,84 @@ +--- +title: Amadeus Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/amadeus/banner1.jpg +heading_title_logo: /images/amadeus_logo.png +subheading: > + Another Technical Evolution for a 30-Year-Old Company +case_study_details: + - Company: Amadeus IT Group + - Location: Madrid, Spain + - Industry: Travel Technology +--- + +

Challenge

+ +

In the past few years, Amadeus, which provides IT solutions to the travel industry around the world, found itself in need of a new platform for the 5,000 services supported by its service-oriented architecture. The 30-year-old company operates its own data center in Germany, and there were growing demands internally and externally for solutions that needed to be geographically dispersed. And more generally, "we had objectives of being even more highly available," says Eric Mountain, Senior Expert, Distributed Systems at Amadeus. Among the company's goals: to increase automation in managing its infrastructure, optimize the distribution of workloads, use data center resources more efficiently, and adopt new technologies more easily.

+ +

Solution

+ +

Mountain has been overseeing the company's migration to Kubernetes, using OpenShift Container Platform, Red Hat's enterprise container platform.

+ +

Impact

+ +

One of the first projects the team deployed in Kubernetes was the Amadeus Airline Cloud Availability solution, which helps manage ever-increasing flight-search volume. "It's now handling in production several thousand transactions per second, and it's deployed in multiple data centers throughout the world," says Mountain. "It's not a migration of an existing workload; it's a whole new workload that we couldn't have done otherwise. [This platform] gives us access to market opportunities that we didn't have before."

+ +{{< case-studies/quote author="Eric Mountain, Senior Expert, Distributed Systems at Amadeus IT Group" >}} +"We want multi-data center capabilities, and we want them for our mainstream system as well. We didn't think that we could achieve them with our existing system. We need new automation, things that Kubernetes and OpenShift bring." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +In his two decades at Amadeus, Eric Mountain has been the migrations guy. +{{< /case-studies/lead >}} + +

Back in the day, he worked on the company's move from Unix to Linux, and now he's overseeing the journey to cloud native. "Technology just keeps changing, and we embrace it," he says. "We are celebrating our 30 years this year, and we continue evolving and innovating to stay cost-efficient and enhance everyone's travel experience, without interrupting workflows for the customers who depend on our technology."

+ +

That was the challenge that Amadeus—which provides IT solutions to the travel industry around the world, from flight searches to hotel bookings to customer feedback—faced in 2014. The technology team realized it was in need of a new platform for the 5,000 services supported by its service-oriented architecture.

+ +

The tipping point occurred when they began receiving many requests, internally and externally, for solutions that needed to be geographically outside the company's main data center in Germany. "Some requests were for running our applications on customer premises," Mountain says. "There were also new services we were looking to offer that required response time to the order of a few hundred milliseconds, which we couldn't achieve with transatlantic traffic. Or at least, not without eating into a considerable portion of the time available to our applications for them to process individual queries."

+ +

More generally, the company was interested in leveling up on high availability, increasing automation in managing infrastructure, optimizing the distribution of workloads and using data center resources more efficiently. "We have thousands and thousands of servers," says Mountain. "These servers are assigned roles, so even if the setup is highly automated, the machine still has a given role. It's wasteful on many levels. For instance, an application doesn't necessarily use the machine very optimally. Virtualization can help a bit, but it's not a silver bullet. If that machine breaks, you still want to repair it because it has that role and you can't simply say, 'Well, I'll bring in another machine and give it that role.' It's not fast. It's not efficient. So we wanted the next level of automation."

+ +{{< case-studies/quote image="/images/case-studies/amadeus/banner3.jpg" >}} +"We hope that if we build on what others have built, what we do might actually be upstream-able. As Kubernetes and OpenShift progress, we see that we are indeed able to remove some of the additional layers we implemented to compensate for gaps we perceived earlier." +{{< /case-studies/quote >}} + +

While mainly a C++ and Java shop, Amadeus also wanted to be able to adopt new technologies more easily. Some of its developers had started using languages like Python and databases like Couchbase, but Mountain wanted still more options, he says, "in order to better adapt our technical solutions to the products we offer, and open up entirely new possibilities to our developers." Working with recent technologies and cool new things would also make it easier to attract new talent.

+ +

All of those needs led Mountain and his team on a search for a new platform. "We did a set of studies and proofs of concept over a fairly short period, and we considered many technologies," he says. "In the end, we were left with three choices: build everything on premise, build on top of Kubernetes whatever happens to be missing from our point of view, or go with OpenShift and build whatever remains there."

+ +

The team decided against building everything themselves—though they'd done that sort of thing in the past—because "people were already inventing things that looked good," says Mountain.

+ +

Ultimately, they went with OpenShift Container Platform, Red Hat's Kubernetes-based enterprise offering, instead of building on top of Kubernetes because "there was a lot of synergy between what we wanted and the way Red Hat was anticipating going with OpenShift," says Mountain. "They were clearly developing Kubernetes, and developing certain things ahead of time in OpenShift, which were important to us, such as more security."

+ +

The hope was that those particular features would eventually be built into Kubernetes, and, in the case of security, Mountain feels that has happened. "We realize that there's always a certain amount of automation that we will probably have to develop ourselves to compensate for certain gaps," says Mountain. "The less we do that, the better for us. We hope that if we build on what others have built, what we do might actually be upstream-able. As Kubernetes and OpenShift progress, we see that we are indeed able to remove some of the additional layers we implemented to compensate for gaps we perceived earlier."

+ +{{< case-studies/quote image="/images/case-studies/amadeus/banner4.jpg" >}} +"It's not a migration of an existing workload; it's a whole new workload that we couldn't have done otherwise. [This platform] gives us access to market opportunities that we didn't have before." +{{< /case-studies/quote >}} + +

The first project the team tackled was one that they knew had to run outside the data center in Germany. Because of the project's needs, "We couldn't rely only on the built-in Kubernetes service discovery; we had to layer on top of that an extra service discovery level that allows us to load balance at the operation level within our system," says Mountain. They also built a stream dedicated to monitoring, which at the time wasn't offered in the Kubernetes or OpenShift ecosystem. Now that Prometheus and other products are available, Mountain says the company will likely re-evaluate their monitoring system: "We obviously always like to leverage what Kubernetes and OpenShift can offer." +

+ +

The second project ended up going into production first: the Amadeus Airline Cloud Availability solution, which helps manage ever-increasing flight-search volume and was deployed in public cloud. Launched in early 2016, it is "now handling in production several thousand transactions per second, and it's deployed in multiple data centers throughout the world," says Mountain. "It's not a migration of an existing workload; it's a whole new workload that we couldn't have done otherwise. [This platform] gives us access to market opportunities that we didn't have before."

+ +

Having been through this kind of technical evolution more than once, Mountain has advice on how to handle the cultural changes. "That's one aspect that we can tackle progressively," he says. "We have to go on supplying our customers with new features on our pre-existing products, and we have to keep existing products working. So we can't simply do absolutely everything from one day to the next. And we mustn't sell it that way."

+ +

The first order of business, then, is to pick one or two applications to demonstrate that the technology works. Rather than choosing a high-impact, high-risk project, Mountain's team selected a smaller application that was representative of all the company's other applications in its complexity: "We just made sure we picked something that's complex enough, and we showed that it can be done."

+ +{{< case-studies/quote >}} +"The bottom line is we want these multi-data center capabilities, and we want them as well for our mainstream system," he says. "And we don't think that we can implement them with our previous system. We need the new automation, homogeneity, and scale that Kubernetes and OpenShift bring." +{{< /case-studies/quote >}} + +

Next comes convincing people. "On the operations side and on the R&D side, there will be people who say quite rightly, 'There is a system, and it works, so why change?'" Mountain says. "The only thing that really convinces people is showing them the value." For Amadeus, people realized that the Airline Cloud Availability product could not have been made available on the public cloud with the company's existing system. The question then became, he says, "Do we go into a full-blown migration? Is that something that is justified?"

+ +

"The bottom line is we want these multi-data center capabilities, and we want them as well for our mainstream system," he says. "And we don't think that we can implement them with our previous system. We need the new automation, homogeneity, and scale that Kubernetes and OpenShift bring."

+ +

So how do you get everyone on board? "Make sure you have good links between your R&D and your operations," he says. "Also make sure you're going to talk early on to the investors and stakeholders. Figure out what it is that they will be expecting from you, that will convince them or not, that this is the right way for your company."

+ +

His other advice is simply to make the technology available for people to try it. "Kubernetes and OpenShift Origin are open source software, so there's no complicated license key for the evaluation period and you're not limited to 30 days," he points out. "Just go and get it running." Along with that, he adds, "You've got to be prepared to rethink how you do things. Of course making your applications as cloud native as possible is how you'll reap the most benefits: 12 factors, CI/CD, which is continuous integration, continuous delivery, but also continuous deployment."

+ +

And while they explore that aspect of the technology, Mountain and his team will likely be practicing what he preaches to others taking the cloud native journey. "See what happens when you break it, because it's important to understand the limits of the system," he says. Or rather, he notes, the advantages of it. "Breaking things on Kube is actually one of the nice things about it—it recovers. It's the only real way that you'll see that you might be able to do things."

\ No newline at end of file diff --git a/content/bn/case-studies/ancestry/index.html b/content/bn/case-studies/ancestry/index.html index e69de29bb2..7cc1715443 100644 --- a/content/bn/case-studies/ancestry/index.html +++ b/content/bn/case-studies/ancestry/index.html @@ -0,0 +1,92 @@ +--- +title: Ancestry Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/ancestry/banner1.jpg +heading_title_logo: /images/ancestry_logo.png +subheading: > + Digging Into the Past With New Technology +case_study_details: + - Company: Ancestry + - Location: Lehi, Utah + - Industry: Internet Company, Online Services +--- + +

Challenge

+ +

Ancestry, the global leader in family history and consumer genomics, uses sophisticated engineering and technology to help everyone, everywhere discover the story of what led to them. The company has spent more than 30 years innovating and building products and technologies that at their core, result in real and emotional human responses. Ancestry currently serves more than 2.6 million paying subscribers, holds 20 billion historical records, 90 million family trees and more than four million people are in its AncestryDNA network, making it the largest consumer genomics DNA network in the world. The company's popular website, ancestry.com, has been working with big data long before the term was popularized. The site was built on hundreds of services, technologies and a traditional deployment methodology. "It's worked well for us in the past," says Paul MacKay, software engineer and architect at Ancestry, "but had become quite cumbersome in its processing and is time-consuming. As a primarily online service, we are constantly looking for ways to accelerate to be more agile in delivering our solutions and our products."

+ +

Solution

+ +

The company is transitioning to cloud native infrastructure, using Docker containerization, Kubernetes orchestration and Prometheus for cluster monitoring.

+ +

Impact

+ +

"Every single product, every decision we make at Ancestry, focuses on delighting our customers with intimate, sometimes life-changing discoveries about themselves and their families," says MacKay. "As the company continues to grow, the increased productivity gains from using Kubernetes has helped Ancestry make customer discoveries faster. With the move to Dockerization for example, instead of taking between 20 to 50 minutes to deploy a new piece of code, we can now deploy in under a minute for much of our code. We've truly experienced significant time savings in addition to the various features and benefits from cloud native and Kubernetes-type technologies."

+ +{{< case-studies/quote author="PAUL MACKAY, SOFTWARE ENGINEER AND ARCHITECT AT ANCESTRY" >}} +"At a certain point, you have to step back if you're going to push a new technology and get key thought leaders with engineers within the organization to become your champions for new technology adoption. At training sessions, the development teams were always the ones that were saying, 'Kubernetes saved our time tremendously; it's an enabler. It really is incredible.'" +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +It started with a Shaky Leaf. +{{< /case-studies/lead >}} + +

Since its introduction a decade ago, the Shaky Leaf icon has become one of Ancestry's signature features, which signals to users that there's a helpful hint you can use to find out more about your family tree.

+ +

So when the company decided to begin moving its infrastructure to cloud native technology, the first service that was launched on Kubernetes, the open source platform for managing application containers across clusters of hosts, was this hint system. Think of it as Amazon's recommended products, but instead of recommending products the company recommends records, stories, or familial connections. "It was a very important part of the site," says Ancestry software engineer and architect Paul MacKay, "but also small enough for a pilot project that we knew we could handle in a very appropriate, secure way."

+ +

And when it went live smoothly in early 2016, "our deployment time for this service literally was cut down from 50 minutes to 2 or 5 minutes," MacKay adds. "The development team was just thrilled because we're focused on supplying a great experience for our customers. And that means features, it means stability, it means all those things that we need for a first-in-class type operation."

+ +

The stability of that Shaky Leaf was a signal for MacKay and his team that their decision to embrace cloud native technologies was the right one for the company. With a private data center, Ancestry built its website (which launched in 1996) on hundreds of services and technologies and a traditional deployment methodology. "It worked well for us in the past, but the sum of the legacy systems became quite cumbersome in its processing and was time-consuming," says MacKay. "We were looking for other ways to accelerate, to be more agile in delivering our solutions and our products."

+ +{{< case-studies/quote image="/images/case-studies/ancestry/banner3.jpg" >}} +"And when it [Kubernetes] went live smoothly in early 2016, 'our deployment time for this service literally was cut down from 50 minutes to 2 or 5 minutes,' MacKay adds. 'The development team was just thrilled because we're focused on supplying a great experience for our customers. And that means features, it means stability, it means all those things that we need for a first-in-class type operation.'" +{{< /case-studies/quote >}} + +

That need led them in 2015 to explore containerization. Ancestry engineers had already been using technology like Java and Python on Linux, so part of the decision was about making the infrastructure more Linux-friendly. They quickly decided that they wanted to go with Docker for containerization, "but it always comes down to the orchestration part of it to make it really work," says MacKay.

+ +

His team looked at orchestration platforms offered by Docker Compose, Mesos and OpenStack, and even started to prototype some homegrown solutions. And then they started hearing rumblings of the imminent release of Kubernetes v1.0. "At the forefront, we were looking at the secret store, so we didn't have to manage that all ourselves, the config maps, the methodology of seamless deployment strategy," he says. "We found that how Kubernetes had done their resources, their types, their labels and just their interface was so much further advanced than the other things we had seen. It was a feature fit."

+ +{{< case-studies/lead >}} +Plus, MacKay says, "I just believed in the confidence that comes with the history that Google has with containerization. So we started out right on the leading edge of it. And we haven't looked back since." +{{< /case-studies/lead >}} + +

Which is not to say that adopting a new technology hasn't come with some challenges. "Change is hard," says MacKay. "Not because the technology is hard or that the technology is not good. It's just that people like to do things like they had done [before]. You have the early adopters and you have those who are coming in later. It was a learning experience on both sides."

+ +

Figuring out the best deployment operations for Ancestry was a big part of the work it took to adopt cloud native infrastructure. "We want to make sure the process is easy and also controlled in the manner that allows us the highest degree of security that we demand and our customers demand," says MacKay. "With Kubernetes and other products, there are some good solutions, but a little bit of glue is needed to bring it into corporate processes and governances. It's like having a set of gloves that are generic, but when you really do want to grab something you have to make it so it's customized to you. That's what we had to do."

+ +

Their best practices include allowing their developers to deploy into development stage and production, but then controlling the aspects that need governance and auditing, such as secrets. They found that having one namespace per service is useful for achieving that containment of secrets and config maps. And for their needs, having one container per pod makes it easier to manage and to have a smaller unit of deployment. +

+ +{{< case-studies/quote image="/images/case-studies/ancestry/banner4.jpg" >}} +"The success of Ancestry's first deployment of the hint system on Kubernetes helped create momentum for greater adoption of the technology." +{{< /case-studies/quote >}} + +

With that process established, the time spent on deployment was cut down to under a minute for some services. "As programmers, we have what's called REPL: read, evaluate, print, and loop, but with Kubernetes, we have CDEL: compile, deploy, execute, and loop," says MacKay. "It's a very quick loop back and a great benefit to understand that when our services are deployed in production, they're the same as what we tested in the pre-production environments. The approach of cloud native for Ancestry provides us a better ability to scale and to accommodate the business needs as work loads occur."

+ +

The success of Ancestry's first deployment of the hint system on Kubernetes helped create momentum for greater adoption of the technology. "Engineers like to code, they like to do features, they don't like to sit around waiting for things to be deployed and worrying about scaling up and out and down," says MacKay. "After a while the engineers became our champions. At training sessions, the development teams were always the ones saying, 'Kubernetes saved our time tremendously; it's an enabler; it really is incredible.' Over time, we were able to convince our management that this was a transition that the industry is making and that we needed to be a part of it."

+ +

A year later, Ancestry has transitioned a good number of applications to Kubernetes. "We have many different services that make up the rich environment that [the website] has from both the DNA side and the family history side," says MacKay. "We have front-end stacks, back-end stacks and back-end processing type stacks that are in the cluster."

+ +

The company continues to weigh which services it will move forward to Kubernetes, which ones will be kept as is, and which will be replaced in the future and thus don't have to be moved over. MacKay estimates that the company is "approaching halfway on those features that are going forward. We don't have to do a lot of convincing anymore. It's more of an issue of timing with getting product management and engineering staff the knowledge and information that they need."

+ +{{< case-studies/quote >}} +"... 'I believe in Kubernetes. I believe in containerization. I think if we can get there and establish ourselves in that world, we will be further along and far better off being agile and all the things we talk about, and it'll go forward.'" +{{< /case-studies/quote >}} + +

Looking ahead, MacKay sees Ancestry maximizing the benefits of Kubernetes in 2017. "We're very close to having everything that should be or could be in a Linux-friendly world in Kubernetes by the end of the year," he says, adding that he's looking forward to features such as federation and horizontal pod autoscaling that are currently in the works. "Kubernetes has been very wonderful for us and we continue to ride the wave."

+ +

That wave, he points out, has everything to do with the vibrant Kubernetes community, which has grown by leaps and bounds since Ancestry joined it as an early adopter. "This is just a very rough way of judging it, but on Slack in June 2015, there were maybe 500 on there," MacKay says. "The last time I looked there were maybe 8,500 just on the Slack channel. There are so many major companies and different kinds of companies involved now. It's the variety of contributors, the number of contributors, the incredibly competent and friendly community."

+ +

As much as he and his team at Ancestry have benefited from what he calls "the goodness and the technical abilities of many" in the community, they've also contributed information about best practices, logged bug issues and participated in the open source conversation. And they've been active in attending meetups to help educate and give back to the local tech community in Utah. Says MacKay: "We're trying to give back as far as our experience goes, rather than just code."

+ +

When he meets with companies considering adopting cloud native infrastructure, the best advice he has to give from Ancestry's Kubernetes journey is this: "Start small, but with hard problems," he says. And "you need a patron who understands the vision of containerization, to help you tackle the political as well as other technical roadblocks that can occur when change is needed."

+ +

With the changes that MacKay's team has led over the past year and a half, cloud native will be part of Ancestry's technological genealogy for years to come. MacKay has been such a champion of the technology that he says people have jokingly accused him of having a Kubernetes tattoo.

+ +

"I really don't," he says with a laugh. "But I'm passionate. I'm not exclusive to any technology; I use whatever I need that's out there that makes us great. If it's something else, I'll use it. But right now I believe in Kubernetes. I believe in containerization. I think if we can get there and establish ourselves in that world, we will be further along and far better off being agile and all the things we talk about, and it'll go forward."

+ +

He pauses. "So, yeah, I guess you can say I'm an evangelist for Kubernetes," he says. "But I'm not getting a tattoo!"

\ No newline at end of file diff --git a/content/bn/case-studies/ant-financial/index.html b/content/bn/case-studies/ant-financial/index.html index e69de29bb2..8dfcf18eb9 100644 --- a/content/bn/case-studies/ant-financial/index.html +++ b/content/bn/case-studies/ant-financial/index.html @@ -0,0 +1,82 @@ +--- +title: Ant Financial Case Study +linkTitle: ant-financial +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/antfinancial/banner1.jpg +heading_title_logo: /images/antfinancial_logo.png +subheading: > + Ant Financial's Hypergrowth Strategy Using Kubernetes +case_study_details: + - Company: Ant Financial + - Location: Hangzhou, China + - Industry: Financial Services +--- + +

Challenge

+ +

Officially founded in October 2014, Ant Financial originated from Alipay, the world's largest online payment platform that launched in 2004. The company also offers numerous other services leveraging technology innovation. With the volume of transactions Alipay handles for its 900+ million users worldwide (through its local and global partners)—256,000 transactions per second at the peak of Double 11 Singles Day 2017, and total gross merchandise value of $31 billion for Singles Day 2018—not to mention that of its other services, Ant Financial faces "data processing challenge in a whole new way," says Haojie Hang, who is responsible for Product Management for the Storage and Compute Group. "We see three major problems of operating at that scale: how to provide real-time compute, storage, and processing capability, for instance to make real-time recommendations for fraud detection; how to provide intelligence on top of this data, because there's too much data and then we're not getting enough insight; and how to apply security in the application level, in the middleware level, the system level, even the chip level." In order to provide reliable and consistent services to its customers, Ant Financial embraced containers in early 2014, and soon needed an orchestration solution for the tens-of-thousands-of-node clusters in its data centers.

+ +

Solution

+ +

After investigating several technologies, the team chose Kubernetes for orchestration, as well as a number of other CNCF projects, including Prometheus, OpenTracing, etcd and CoreDNS. "In late 2016, we decided that Kubernetes will be the de facto standard," says Hang. "Looking back, we made the right bet on the right technology. But then we needed to move the production workload from the legacy infrastructure to the latest Kubernetes-enabled platform, and that took some time, because we are very careful in terms of reliability and consistency." All core financial systems were containerized by November 2017, and the migration to Kubernetes is ongoing.

+ +

Impact

+ +

"We've seen at least tenfold in improvement in terms of the operations with cloud native technology, which means you can have tenfold increase in terms of output," says Hang. Ant also provides its fully integrated financial cloud platform to business partners around the world, and hopes to power the next generation of digital banking with deep experience in service innovation and technology expertise. Hang says the team hasn't begun to focus on optimizing the Kubernetes platform, either: "Because we're still in the hyper growth stage, we're not in a mode where we do cost saving yet."

+ +{{< case-studies/quote author="HAOJIE HANG, PRODUCT MANAGEMENT, ANT FINANCIAL" >}} +"In late 2016, we decided that Kubernetes will be the de facto standard. Looking back, we made the right bet on the right technology." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +A spinoff of the multinational conglomerate Alibaba, Ant Financial boasts a $150+ billion valuation and the scale to match. The fintech startup, launched in 2014, is comprised of Alipay, the world's largest online payment platform, and numerous other services leveraging technology innovation. +{{< /case-studies/lead >}} + +

And the volume of transactions that Alipay handles for over 900 million users worldwide (through its local and global partners) is staggering: 256,000 per second at the peak of Double 11 Singles Day 2017, and total gross merchandise value of $31 billion for Singles Day 2018. With the mission of "bringing the world equal opportunities," Ant Financial is dedicated to creating an open, shared credit system and financial services platform through technology innovations.

+ +

Combine that with the operations of its other properties—such as the Huabei online credit system, Jiebei lending service, and the 350-million-user Ant Forest green energy mobile app—and Ant Financial faces "data processing challenge in a whole new way," says Haojie Hang, who is responsible for Product Management for the Storage and Compute Group. "We see three major problems of operating at that scale: how to provide real-time compute, storage, and processing capability, for instance to make real-time recommendations for fraud detection; how to provide intelligence on top of this data, because there's too much data and we're not getting enough insight; and how to apply security in the application level, in the middleware level, the system level, even the chip level."

+ +

To address those challenges and provide reliable and consistent services to its customers, Ant Financial embraced Docker containerization in 2014. But they soon realized that they needed an orchestration solution for some tens-of-thousands-of-node clusters in the company's data centers.

+ +{{< case-studies/quote + image="/images/case-studies/antfinancial/banner3.jpg" + author="RANGER YU, GLOBAL TECHNOLOGY PARTNERSHIP & DEVELOPMENT, ANT FINANCIAL" +>}} +"On Double 11 this year, we had plenty of nodes on Kubernetes, but compared to the whole scale of our infrastructure, this is still in progress." +{{< /case-studies/quote >}} + +

The team investigated several technologies, including Docker Swarm and Mesos. "We did a lot of POCs, but we're very careful in terms of production systems, because we want to make sure we don't lose any data," says Hang. "You cannot afford to have a service downtime for one minute; even one second has a very, very big impact. We operate every day under pressure to provide reliable and consistent services to consumers and businesses in China and globally."

+ +

Ultimately, Hang says Ant chose Kubernetes because it checked all the boxes: a strong community, technology that "will be relevant in the next three to five years," and a good match for the company's engineering talent. "In late 2016, we decided that Kubernetes will be the de facto standard," says Hang. "Looking back, we made the right bet on the right technology. But then we needed to move the production workload from the legacy infrastructure to the latest Kubernetes-enabled platform. We spent a lot of time learning and then training our people to build applications on Kubernetes well."

+ +

All core financial systems were containerized by November 2017, and the migration to Kubernetes is ongoing. Ant's platform also leverages a number of other CNCF projects, including Prometheus, OpenTracing, etcd and CoreDNS. "On Double 11 this year, we had plenty of nodes on Kubernetes, but compared to the whole scale of our infrastructure, this is still in progress," says Ranger Yu, Global Technology Partnership & Development.

+ +{{< case-studies/quote + image="/images/case-studies/antfinancial/banner4.jpg" + author="HAOJIE HANG, PRODUCT MANAGEMENT, ANT FINANCIAL" +>}} +"We're very grateful for CNCF and this amazing technology, which we need as we continue to scale globally. We're definitely embracing the community and open source more in the future." +{{< /case-studies/quote >}} + +

Still, there has already been an impact. "Cloud native technology has benefited us greatly in terms of efficiency," says Hang. "In general, we want to make sure our infrastructure is nimble and flexible enough for the work that could happen tomorrow. That's the goal. And with cloud native technology, we've seen at least tenfold improvement in operations, which means you can have tenfold increase in terms of output. Let's say you are operating 10 nodes with one person. With cloud native, tomorrow you can have 100 nodes."

+ +

Ant also provides its financial cloud platform to partners around the world, and hopes to power the next generation of digital banking with deep experience in service innovation and technology expertise. Hang says the team hasn't begun to focus on optimizing the Kubernetes platform, either: "Because we're still in the hyper growth stage, we're not in a mode where we do cost-saving yet."

+ +

The CNCF community has also been a valuable asset during Ant Financial's move to cloud native. "If you are applying a new technology, it's very good to have a community to discuss technical problems with other users," says Hang. "We're very grateful for CNCF and this amazing technology, which we need as we continue to scale globally. We're definitely embracing the community and open sourcing more in the future."

+ +{{< case-studies/quote + image="/images/case-studies/antfinancial/banner4.jpg" + author="RANGER YU, GLOBAL TECHNOLOGY PARTNERSHIP & DEVELOPMENT, ANT FINANCIAL" +>}} +"In China, we are the North Star in terms of innovation in financial and other related services," says Hang. "We definitely want to make sure we're still leading in the next 5 to 10 years with our investment in technology." +{{< /case-studies/quote >}} + +

In fact, the company has already started to open source some of its cloud native middleware. "We are going to be very proactive about that," says Yu. "CNCF provided a platform so everyone can plug in or contribute components. This is very good open source governance."

+ +

Looking ahead, the Ant team will continue to evaluate many other CNCF projects. Building a service mesh community in China, the team has brought together many China-based companies and developers to discuss the potential of that technology. "Service mesh is very attractive for Chinese developers and end users because we have a lot of legacy systems running now, and it's an ideal mid-layer to glue everything together, both new and legacy," says Hang. "For new technologies, we look very closely at whether they will last."

+ +

At Ant, Kubernetes passed that test with flying colors, and the team hopes other companies will follow suit. "In China, we are the North Star in terms of innovation in financial and other related services," says Hang. "We definitely want to make sure we're still leading in the next 5 to 10 years with our investment in technology."

\ No newline at end of file diff --git a/content/bn/case-studies/appdirect/index.html b/content/bn/case-studies/appdirect/index.html index e69de29bb2..0a20dee2ac 100644 --- a/content/bn/case-studies/appdirect/index.html +++ b/content/bn/case-studies/appdirect/index.html @@ -0,0 +1,85 @@ +--- +title: AppDirect Case Study +linkTitle: AppDirect +case_study_styles: true +cid: caseStudies +logo: appdirect_featured_logo.png +featured: true +weight: 4 +quote: > + We made the right decisions at the right time. Kubernetes and the cloud native technologies are now seen as the de facto ecosystem. + +new_case_study_styles: true +heading_background: /images/case-studies/appdirect/banner1.jpg +heading_title_logo: /images/appdirect_logo.png +subheading: > + AppDirect: How AppDirect Supported the 10x Growth of Its Engineering Staff with Kubernetes +case_study_details: + - Company: AppDirect + - Location: San Francisco, California + - Industry: Software +--- + +

Challenge

+ +

AppDirect provides an end-to-end commerce platform for cloud-based products and services. When Director of Software Development Pierre-Alexandre Lacerte began working there in 2014, the company had a monolith application deployed on a "tomcat infrastructure, and the whole release process was complex for what it should be," he says. "There were a lot of manual steps involved, with one engineer building a feature, then another team picking up the change. So you had bottlenecks in the pipeline to ship a feature to production." At the same time, the engineering team was growing, and the company realized it needed a better infrastructure to both support that growth and increase velocity.

+ +

Solution

+ +

"My idea was: Let's create an environment where teams can deploy their services faster, and they will say, 'Okay, I don't want to build in the monolith anymore. I want to build a service,'" says Lacerte. They considered and prototyped several different technologies before deciding to adopt Kubernetes in early 2016. Lacerte's team has also integrated Prometheus monitoring into the platform; tracing is next. Today, AppDirect has more than 50 microservices in production and 15 Kubernetes clusters deployed on AWS and on premise around the world.

+ +

Impact

+ +

The Kubernetes platform has helped support the engineering team's 10x growth over the past few years. Coupled with the fact that they were continually adding new features, Lacerte says, "I think our velocity would have slowed down a lot if we didn't have this new infrastructure." Moving to Kubernetes and services has meant that deployments have become much faster due to less dependency on custom-made, brittle shell scripts with SCP commands. Time to deploy a new version has shrunk from 4 hours to a few minutes. Additionally, the company invested a lot of effort to make things self-service for developers. "Onboarding a new service doesn't require Jira tickets or meeting with three different teams," says Lacerte. Today, the company sees 1,600 deployments per week, compared to 1-30 before. The company also achieved cost savings by moving its marketplace and billing monoliths to Kubernetes from legacy EC2 hosts as well as by leveraging autoscaling, as traffic is higher during business hours.

+ +{{< case-studies/quote author="Alexandre Gervais, Staff Software Developer, AppDirect" >}} +"It was an immense engineering culture shift, but the benefits are undeniable in terms of scale and speed." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +With its end-to-end commerce platform for cloud-based products and services, AppDirect has been helping organizations such as Comcast and GoDaddy simplify the digital supply chain since 2009. +{{< /case-studies/lead >}} + +

When Director of Software Development Pierre-Alexandre Lacerte started working there in 2014, the company had a monolith application deployed on a "tomcat infrastructure, and the whole release process was complex for what it should be," he says. "There were a lot of manual steps involved, with one engineer building a feature then creating a pull request, and a QA or another engineer validating the feature. Then it gets merged and someone else will take care of the deployment. So we had bottlenecks in the pipeline to ship a feature to production."

+ +

At the same time, the engineering team of 40 was growing, and the company wanted to add an increasing number of features to its products. As a member of the platform team, Lacerte began hearing from multiple teams that wanted to deploy applications using different frameworks and languages, from Node.js to Spring Boot Java. He soon realized that in order to both support growth and increase velocity, the company needed a better infrastructure, and a system in which teams are autonomous, can do their own deploys, and be responsible for their services in production.

+ +{{< case-studies/quote + image="/images/case-studies/appdirect/banner3.jpg" + author="Alexandre Gervais, Staff Software Developer, AppDirect" +>}} +"We made the right decisions at the right time. Kubernetes and the cloud native technologies are now seen as the de facto ecosystem. We know where to focus our efforts in order to tackle the new wave of challenges we face as we scale out. The community is so active and vibrant, which is a great complement to our awesome internal team." +{{< /case-studies/quote >}} + +

From the beginning, Lacerte says, "My idea was: Let's create an environment where teams can deploy their services faster, and they will say, 'Okay, I don't want to build in the monolith anymore. I want to build a service.'" (Lacerte left the company in 2019.)

+ +

Working with the operations team, Lacerte's group got more control and access to the company's AWS infrastructure, and started prototyping several orchestration technologies. "Back then, Kubernetes was a little underground, unknown," he says. "But we looked at the community, the number of pull requests, the velocity on GitHub, and we saw it was getting traction. And we found that it was much easier for us to manage than the other technologies."

+ +

They spun up the first few services on Kubernetes using Chef and Terraform provisioning, and as more services were added, more automation was, too. "We have clusters around the world—in Korea, in Australia, in Germany, and in the U.S.," says Lacerte. "Automation is critical for us." They're now largely using Kops, and are looking at managed Kubernetes offerings from several cloud providers.

+ +

Today, though the monolith still exists, there are fewer and fewer commits and features. All teams are deploying on the new infrastructure, and services are the norm. AppDirect now has more than 50 microservices in production and 15 Kubernetes clusters deployed on AWS and on premise around the world.

+ +

Lacerte's strategy ultimately worked because of the very real impact the Kubernetes platform has had to deployment time. Due to less dependency on custom-made, brittle shell scripts with SCP commands, time to deploy a new version has shrunk from 4 hours to a few minutes. Additionally, the company invested a lot of effort to make things self-service for developers. "Onboarding a new service doesn't require Jira tickets or meeting with three different teams," says Lacerte. Today, the company sees 1,600 deployments per week, compared to 1-30 before.

+ +{{< case-studies/quote + image="/images/case-studies/appdirect/banner4.jpg" + author="Pierre-Alexandre Lacerte, Director of Software Development, AppDirect" +>}} +"I think our velocity would have slowed down a lot if we didn't have this new infrastructure." +{{< /case-studies/quote >}} + +

Additionally, the Kubernetes platform has helped support the engineering team's 10x growth over the past few years. "Ownership, a core value of AppDirect, reflects in our ability to ship services independently of our monolith code base," says Staff Software Developer Alexandre Gervais, who worked with Lacerte on the initiative. "Small teams now own critical parts of our business domain model, and they operate in their decoupled domain of expertise, with limited knowledge of the entire codebase. This reduces and isolates some of the complexity." Coupled with the fact that they were continually adding new features, Lacerte says, "I think our velocity would have slowed down a lot if we didn't have this new infrastructure."

+ +

The company also achieved cost savings by moving its marketplace and billing monoliths to Kubernetes from legacy EC2 hosts as well as by leveraging autoscaling, as traffic is higher during business hours.

+ +

AppDirect's cloud native stack also includes gRPC and Fluentd, and the team is currently working on setting up OpenCensus. The platform already has Prometheus integrated, so "when teams deploy their service, they have their notifications, alerts and configurations," says Lacerte. "For example, in the test environment, I want to get a message on Slack, and in production, I want a Slack message and I also want to get paged. We have integration with pager duty. Teams have more ownership on their services."

+ +{{< case-studies/quote author="Pierre-Alexandre Lacerte, Director of Software Development, AppDirect" >}} +"We moved from a culture limited to 'pushing code in a branch' to exciting new responsibilities outside of the code base: deployment of features and configurations; monitoring of application and business metrics; and on-call support in case of outages. It was an immense engineering culture shift, but the benefits are undeniable in terms of scale and speed." +{{< /case-studies/quote >}} + +

That of course also means more responsibility. "We asked engineers to expand their horizons," says Gervais. "We moved from a culture limited to 'pushing code in a branch' to exciting new responsibilities outside of the code base: deployment of features and configurations; monitoring of application and business metrics; and on-call support in case of outages. It was an immense engineering culture shift, but the benefits are undeniable in terms of scale and speed."

+ +

As the engineering ranks continue to grow, the platform team has a new challenge, of making sure that the Kubernetes platform is accessible and easily utilized by everyone. "How can we make sure that when we add more people to our team that they are efficient, productive, and know how to ramp up on the platform?" Lacerte says. So we have the evangelists, the documentation, some project examples. We do demos, we have AMA sessions. We're trying different strategies to get everyone's attention."

+ +

Three and a half years into their Kubernetes journey, Gervais feels AppDirect "made the right decisions at the right time," he says. "Kubernetes and the cloud native technologies are now seen as the de facto ecosystem. We know where to focus our efforts in order to tackle the new wave of challenges we face as we scale out. The community is so active and vibrant, which is a great complement to our awesome internal team. Going forward, our focus will really be geared towards benefiting from the ecosystem by providing added business value in our day-to-day operations."

\ No newline at end of file diff --git a/content/bn/case-studies/babylon/index.html b/content/bn/case-studies/babylon/index.html index e69de29bb2..156d6e0178 100644 --- a/content/bn/case-studies/babylon/index.html +++ b/content/bn/case-studies/babylon/index.html @@ -0,0 +1,84 @@ +--- +title: Babylon Case Study +linkTitle: Babylon +case_study_styles: true +cid: caseStudies +logo: babylon_featured_logo.svg +featured: true +weight: 1 +quote: > + Kubernetes is a great platform for machine learning because it comes with all the scheduling and scalability that you need. + +new_case_study_styles: true +heading_background: /images/case-studies/babylon/banner4.jpg +heading_title_text: Babylon +use_gradient_overlay: true +subheading: > + AppDirect: How Cloud Native Is Enabling Babylon's Medical AI Innovations +case_study_details: + - Company: Babylon + - Location: United Kingdom + - Industry: AI, Healthcare +--- + +

Challenge

+ +

A large number of Babylon's products leverage machine learning and artificial intelligence, and in 2019, there wasn't enough computing power in-house to run a particular experiment. The company was also growing (from 100 to 1,600 in three years) and planning expansion into other countries.

+ +

Solution

+ +

Babylon had migrated its user-facing applications to a Kubernetes platform in 2018, so the infrastructure team turned to Kubeflow, a toolkit for machine learning on Kubernetes. "We tried to create a Kubernetes core server, we deployed Kubeflow, and we orchestrated the whole experiment, which ended up being a really good success," says AI Infrastructure Lead Jérémie Vallée. The team began building a self-service AI training platform on top of Kubernetes.

+ +

Impact

+ +

Instead of waiting hours or days to be able to compute, teams can get access instantaneously. Clinical validations used to take 10 hours; now they are done in under 20 minutes. The portability of the cloud native platform has also enabled Babylon to expand into other countries.

+ +{{< case-studies/quote + image="/images/case-studies/babylon/banner1.jpg" + author="JÉRÉMIE VALLÉE, AI INFRASTRUCTURE LEAD AT BABYLON" +>}} +"Kubernetes is a great platform for machine learning because it comes with all the scheduling and scalability that you need." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Babylon's mission is to put accessible and affordable healthcare services in the hands of every person on earth. +{{< /case-studies/lead >}} + +

Since its launch in the U.K. in 2013, the startup has facilitated millions of digital consultations around the world. In the U.K., patients were typically waiting a week or two for a doctor's appointment. Through Babylon's NHS service, GP at Hand—which has more than 75,000 registered patients—39% get an appointment through their phone within 30 minutes, and 89% within 6 hours.

+ +

That's just the start. "We try to combine different types of technology with the medical expertise that we have in-house to build products that will help patients manage and understand their health, and also help doctors be more efficient at what they do," says Jérémie Vallée, AI Infrastructure Lead at Babylon.

+ +

A large number of these products leverage machine learning and artificial intelligence, and in 2019, researchers hit a pain point. "We have some servers in-house where our researchers were doing a lot of AI experiments and some training of models, and we came to a point where we didn't have enough compute in-house to run a particular experiment," says Vallée.

+ +

Babylon had migrated its user-facing applications to a Kubernetes platform in 2018, "and we had a lot of Kubernetes knowledge thanks to the migration," he adds. To optimize some of the models that had been created, the team turned to Kubeflow, a toolkit for machine learning on Kubernetes. "We tried to create a Kubernetes core server, we deployed Kubeflow, and we orchestrated the whole experiment, which ended up being a really good success," he says.

+ +

Based on that experience, Vallée's team was tasked with building a self-service platform to help Babylon's AI teams become more efficient, and by extension help get products to market faster. The main requirements: (1) the ability to give researchers and engineers access to the compute they needed, regardless of the size of the experiments they may need to run; (2) a way to provide teams with the best tools that they needed to do their work, on demand and in a centralized way; and (3) the training platform had to be close to the data that was being managed, because of the company's expansion into different countries.

+ +{{< case-studies/quote author="CAROLINE HARGROVE, CHIEF TECHNOLOGY OFFICER AT BABYLON" >}} +"Delivering a self-service platform where users are empowered to run their own workload has enabled our data scientist community to do hyper parameter tuning and general algorithm development without any cloud skill and without the help of platform engineers, thus accelerating our innovation." +{{< /case-studies/quote >}} + +

Kubernetes was an enabler on every count. "Kubernetes is a great platform for machine learning because it comes with all the scheduling and scalability that you need," says Vallée. The need to keep data in every country in which Babylon operates requires a multi-region, multi-cloud strategy, and some countries might not even have a public cloud provider at all. "We wanted to make this platform portable so that we can run training jobs anywhere," he says. "Kubernetes offered a base layer that allows you to deploy the platform outside of the cloud provider, and then deploy whatever tooling you need. That was a very good selling point for us."

+ +

Once the team decided to build the Babylon AI Research platform on top of Kubernetes, they referred to the Cloud Native Landscape to build out the stack: Prometheus and Grafana for monitoring; an Istio service mesh to control the network on the training platform and control what access all of the workflows would have; Helm to deploy the stack; and Flux to manage the GitOps part of the pipeline.

+ +

The cloud native AI platform has had a huge impact at Babylon. The first research projects run on the platform mostly involved machine learning and natural language processing. These experiments required a huge amount of compute—1600 CPU, 3.2 TB RAM—which was much more than Babylon had in-house. Plus, access to compute used to take hours, or sometimes even days, depending on how busy the platform team was. "Now, with Kubernetes and the self-service platform that we provide, it's pretty much instantaneous," says Vallée.

+ +

Another important type of work that's done on the platform is clinical validation for new applications such as Babylon's Symptom Checker, which calculates the probability of a disease given the evidence input by the user. "Being in healthcare, we want all of our models to be safe before they're going to hit production," says Vallée. Using Argo for GitOps "enabled us to scale the process massively."

+ +{{< case-studies/quote + image="/images/case-studies/babylon/banner2.jpg" + author="JEAN MARIE FERDEGUE, DIRECTOR OF PLATFORM OPERATIONS AT BABYLON" +>}} +"Giving a Kubernetes-based platform to our data scientists has meant increased security, increased innovation through empowerment, and a more affordable health service as our cloud engineers are building an experience that is used by hundreds on a daily basis, rather than supporting specific bespoke use cases." +{{< /case-studies/quote >}} + +

Researchers used to have to wait up to 10 hours to get results on new versions of their models. With Kubernetes, that time is now down to under 20 minutes. Plus, previously they could only run one clinical validation at a time, now they can run many parallel ones if they need to—a huge benefit considering that in the past three years, Babylon has grown from 100 to 1,600 employees.

+ +

"Delivering a self-service platform where users are empowered to run their own workload has enabled our data scientist community to do hyper parameter tuning and general algorithm development without any cloud skill and without the help of platform engineers, thus accelerating our innovation," says Chief Technology Officer Caroline Hargrove.

+ +

Adds Director of Platform Operations Jean Marie Ferdegue: "Giving a Kubernetes-based platform to our data scientists has meant increased security, increased innovation through empowerment, and a more affordable health service as our cloud engineers are building an experience that is used by hundreds on a daily basis, rather than supporting specific bespoke use cases."

+ +

Plus, as Babylon continues to expand, "it will be very easy to onboard new countries," says Vallée. "Fifteen months ago when we deployed this platform, we had one big environment in the U.K., but now we have one in Canada, we have one in Asia, and we have one coming in the U.S. This is one of the things that Kubernetes and the other cloud native projects have enabled for us."

+ +

Babylon's road map for cloud native involves onboarding all of the company's AI efforts to the platform. Increasingly, that includes AI services of care. "I think this is going to be an interesting field where AI and healthcare meet," Vallée says. "It's kind of a complex problem and there's a lot of issues around this. So with our platform, we want to say, 'What can we do to make this less painful for our developers and machine learning engineers?'"

\ No newline at end of file diff --git a/content/bn/case-studies/blablacar/blablacar_featured.png b/content/bn/case-studies/blablacar/blablacar_featured.png new file mode 100644 index 0000000000..e69de29bb2 From 3325f2e7592130348d78d6bfdb03aabe616ef4d6 Mon Sep 17 00:00:00 2001 From: lorenzogrv Date: Wed, 10 Apr 2024 06:13:16 +0200 Subject: [PATCH 0287/1086] kubectl debian install guide On a bare-metal Debian 12 clean install, gnupg is needed. Maybe it should be noted with prose --- content/en/docs/tasks/tools/install-kubectl-linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/tools/install-kubectl-linux.md b/content/en/docs/tasks/tools/install-kubectl-linux.md index 57af2f5f6d..23af5952d5 100644 --- a/content/en/docs/tasks/tools/install-kubectl-linux.md +++ b/content/en/docs/tasks/tools/install-kubectl-linux.md @@ -130,7 +130,7 @@ The following methods exist for installing kubectl on Linux: ```shell sudo apt-get update # apt-transport-https may be a dummy package; if so, you can skip that package - sudo apt-get install -y apt-transport-https ca-certificates curl + sudo apt-get install -y apt-transport-https ca-certificates curl gnupg ``` 2. Download the public signing key for the Kubernetes package repositories. The same signing key is used for all repositories so you can disregard the version in the URL: From 3054b8562d2603f67caf7c4088734d948c9dfd86 Mon Sep 17 00:00:00 2001 From: 7sunarni <710720732@qq.com> Date: Wed, 10 Apr 2024 16:19:42 +0800 Subject: [PATCH 0288/1086] example(affinity): rename pod-with-affinity-anti-affinity.yaml => pod-with-affinity-preferred-weight.yaml Signed-off-by: 7sunarni <710720732@qq.com> --- content/en/docs/concepts/scheduling-eviction/assign-pod-node.md | 2 +- content/en/examples/examples_test.go | 2 +- ...ti-affinity.yaml => pod-with-affinity-preferred-weight.yaml} | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename content/en/examples/pods/{pod-with-affinity-anti-affinity.yaml => pod-with-affinity-preferred-weight.yaml} (94%) diff --git a/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md b/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md index 374f044b5f..5d62867331 100644 --- a/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md +++ b/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md @@ -173,7 +173,7 @@ scheduling decision for the Pod. For example, consider the following Pod spec: -{{% code_sample file="pods/pod-with-affinity-anti-affinity.yaml" %}} +{{% code_sample file="pods/pod-with-affinity-preferred-weight.yaml" %}} If there are two possible nodes that match the `preferredDuringSchedulingIgnoredDuringExecution` rule, one with the diff --git a/content/en/examples/examples_test.go b/content/en/examples/examples_test.go index f0d4a13bbd..ee17a3fdee 100644 --- a/content/en/examples/examples_test.go +++ b/content/en/examples/examples_test.go @@ -613,7 +613,7 @@ func TestExampleObjectSchemas(t *testing.T) { "pod-projected-svc-token": {&api.Pod{}}, "pod-rs": {&api.Pod{}, &api.Pod{}}, "pod-single-configmap-env-variable": {&api.Pod{}}, - "pod-with-affinity-anti-affinity": {&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{}}, diff --git a/content/en/examples/pods/pod-with-affinity-anti-affinity.yaml b/content/en/examples/pods/pod-with-affinity-preferred-weight.yaml similarity index 94% rename from content/en/examples/pods/pod-with-affinity-anti-affinity.yaml rename to content/en/examples/pods/pod-with-affinity-preferred-weight.yaml index cb8c5650b0..3b064daaec 100644 --- a/content/en/examples/pods/pod-with-affinity-anti-affinity.yaml +++ b/content/en/examples/pods/pod-with-affinity-preferred-weight.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: Pod metadata: - name: with-affinity-anti-affinity + name: with-affinity-preferred-weight spec: affinity: nodeAffinity: From 390f83ae74bcf6c0a6773aa61c9b54498b54c42b Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Wed, 10 Apr 2024 16:53:12 +0600 Subject: [PATCH 0289/1086] redundant full link removed there was one extra blank full link that has been removed --- content/bn/docs/reference/glossary/init-container.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/content/bn/docs/reference/glossary/init-container.md b/content/bn/docs/reference/glossary/init-container.md index c471719f14..9ff121cc66 100644 --- a/content/bn/docs/reference/glossary/init-container.md +++ b/content/bn/docs/reference/glossary/init-container.md @@ -2,10 +2,9 @@ title: ইনিট কন্টেইনার(Init Container) id: init-container date: 2018-04-12 -full_link: +full_link: /bn/docs/concepts/workloads/pods/init-containers/ short_description: > এক বা একাধিক ইনিশিয়ালাইজেশন কন্টেইনার যা অবশ্যই কোনো অ্যাপ কন্টেইনার রান করার পূর্বে রান হতে হবে। -full_link: /bn/docs/concepts/workloads/pods/init-containers/ aka: tags: - fundamental From 3b18b1e80ec77c52959c7a7ea51ad65110b23af0 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Wed, 10 Apr 2024 17:22:56 +0600 Subject: [PATCH 0290/1086] [bn] Localization of ephemeral-container.md --- .../reference/glossary/ephemeral-container.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/docs/reference/glossary/ephemeral-container.md 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 0000000000..be9d65c4de --- /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" >}} দ্বারা সমর্থিত নয়৷ From a287246471fb71e80193593881743a45a9d30ee6 Mon Sep 17 00:00:00 2001 From: Ben B Date: Wed, 10 Apr 2024 19:56:43 +0200 Subject: [PATCH 0291/1086] Update content/en/blog/_posts/2021-09-03-api-server-tracing.md Co-authored-by: Rey Lejano --- content/en/blog/_posts/2021-09-03-api-server-tracing.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/en/blog/_posts/2021-09-03-api-server-tracing.md b/content/en/blog/_posts/2021-09-03-api-server-tracing.md index c1a062d1bf..7dcc2f315d 100644 --- a/content/en/blog/_posts/2021-09-03-api-server-tracing.md +++ b/content/en/blog/_posts/2021-09-03-api-server-tracing.md @@ -42,6 +42,7 @@ samplingRatePerMillion: 10000 ### Enabling Etcd Tracing +_Update: the following was added after the blog was published_ Add `--experimental-enable-distributed-tracing`, `--experimental-distributed-tracing-address=0.0.0.0:4317`, `--experimental-distributed-tracing-service-name=etcd` flags to etcd to enable tracing. Note that this traces every request, so it will probably generate a lot of traces if you enable it. Required etcd version is [3.5 up to 3.5.4](https://etcd.io/docs/v3.5/op-guide/monitoring/#distributed-tracing). Starting from version 3.5.5 until version 3.5.10, the default sampling rate for traces is set to 0%, meaning no traces were collected by default. Unfortunately, there is no option provided to configure a higher sampling rate. ([See details](https://github.com/etcd-io/etcd/pull/16951)) From 910583877890e08c3afb44aa10008413d6a7a5e3 Mon Sep 17 00:00:00 2001 From: Sergey Shevchenko Date: Sun, 14 Apr 2024 18:13:23 +0300 Subject: [PATCH 0292/1086] Fix review comments --- content/en/docs/concepts/containers/images.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/content/en/docs/concepts/containers/images.md b/content/en/docs/concepts/containers/images.md index 2eab2c8aa4..fc0fad2c91 100644 --- a/content/en/docs/concepts/containers/images.md +++ b/content/en/docs/concepts/containers/images.md @@ -34,7 +34,8 @@ Images can also include a registry hostname; for example: `fictional.registry.ex and possibly a port number as well; for example: `fictional.registry.example:10443/imagename`. If you don't specify a registry hostname, Kubernetes assumes that you mean the [Docker public registry](https://hub.docker.com/). -You can change this behaviour by setting default image registry in [container runtime](/docs/setup/production-environment/container-runtimes/) configuration. +You can change this behaviour by setting default image registry in +[container runtime](/docs/setup/production-environment/container-runtimes/) configuration. After the image name part you can add a _tag_ or _digest_ (in the same way you would when using with commands like `docker` or `podman`). Tags let you identify different versions of the same series of images. @@ -45,13 +46,13 @@ Image tags consist of lowercase and uppercase letters, digits, underscores (`_`) periods (`.`), and dashes (`-`). It can be up to 128 characters long. And must follow the next regex pattern: `[a-zA-Z0-9_][a-zA-Z0-9._-]{0,127}` You can read more about and find validation regex in the -[OCI Distribution Specification](https://github.com/opencontainers/distribution-spec/blob/v1.1.0/spec.md#workflow-categories). +[OCI Distribution Specification](https://github.com/opencontainers/distribution-spec/blob/master/spec.md#workflow-categories). If you don't specify a tag, Kubernetes assumes you mean the tag `latest`. Image digests consists of a hash algorithm (such as `sha256`) and a hash value. For example: `sha256:1ff6c18fbef2045af6b9c16bf034cc421a29027b800e4f9b68ae9b1cb3e9ae07` You can find more information about digests format in the -[OCI Image Specification](https://github.com/opencontainers/image-spec/blob/v1.1.0/descriptor.md#digests). +[OCI Image Specification](https://github.com/opencontainers/image-spec/blob/master/descriptor.md#digests). Some image name examples that Kubernetes can use are: From 82c6a0c56366b53e56c401fa5d5017bf48ad8349 Mon Sep 17 00:00:00 2001 From: Naqeeb <59777921+naqeebghazi@users.noreply.github.com> Date: Mon, 15 Apr 2024 16:31:50 +0100 Subject: [PATCH 0293/1086] Update assign-pod-node.md Definitions of Gt and Lt mixed up but now amended --- .../en/docs/concepts/scheduling-eviction/assign-pod-node.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md b/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md index 374f044b5f..4df2363529 100644 --- a/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md +++ b/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md @@ -634,8 +634,8 @@ The following operators can only be used with `nodeAffinity`. | Operator | Behaviour | | :------------: | :-------------: | -| `Gt` | The supplied value will be parsed as an integer, and that integer is less than the integer that results from parsing the value of a label named by this selector | -| `Lt` | The supplied value will be parsed as an integer, and that integer is greater than the integer that results from parsing the value of a label named by this selector | +| `Gt` | The supplied value will be parsed as an integer, and that integer is greater than the integer that results from parsing the value of a label named by this selector | +| `Lt` | The supplied value will be parsed as an integer, and that integer is less than the integer that results from parsing the value of a label named by this selector | {{}} From 962f89adcbcc116fae88f9a9c0595ca874ffca13 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Mon, 15 Apr 2024 23:32:13 +0600 Subject: [PATCH 0294/1086] Update affinity.md --- content/bn/docs/reference/glossary/affinity.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/bn/docs/reference/glossary/affinity.md b/content/bn/docs/reference/glossary/affinity.md index 37b2d36c9d..45dbfd8cb1 100644 --- a/content/bn/docs/reference/glossary/affinity.md +++ b/content/bn/docs/reference/glossary/affinity.md @@ -1,16 +1,16 @@ --- -title: অ্যাফিনিটি +title: অ্যাফিনিটি (Affinity) id: affinity date: 2019-01-11 full_link: /bn/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity short_description: > - সময়সূচী দ্বারা ব্যবহৃত নিয়ম নির্ধারণ করে পড কোথায় রাখতে হবে + শিডিউলার দ্বারা ব্যবহৃত নিয়ম নির্ধারণ করে পড কোথায় রাখতে হবে aka: tags: - fundamental --- -কুবারনেটিসে, _অ্যাফিনিটি_ হল নিয়মগুলির একটি সেট যা পডগুলি কোথায় রাখতে হবে সে সম্পর্কে সময়সূচীকে ইঙ্গিত দেয়। +কুবারনেটিসে, _অ্যাফিনিটি_ হল নিয়মগুলির একটি সেট যা পডগুলি কোথায় রাখতে হবে সে সম্পর্কে শিডিউলারকে ইঙ্গিত দেয়। দুই ধরণের অ্যাফিনিটি রয়েছে: @@ -19,4 +19,4 @@ tags: নিয়মগুলি সংজ্ঞায়িত করা হয়েছে কুবারনেটিস ব্যবহার করে {{< glossary_tooltip term_id="label" text="লেবেল">}}, এবং {{< glossary_tooltip term_id="selector" text="নির্বাচক">}} এ উল্লেখ করা হয়েছে {{< glossary_tooltip term_id="pod" text="পড" >}}, -এবং সেগুলি হয় প্রয়োজন বা পছন্দের হতে পারে, আপনি কতটা কঠোরভাবে সময়সূচীকে তাদের প্রয়োগ করতে চান তার উপর নির্ভর করে। +এবং সেগুলি হয় প্রয়োজন বা পছন্দের হতে পারে, আপনি কতটা কঠোরভাবে শিডিউলারকে তাদের প্রয়োগ করতে চান তার উপর নির্ভর করে। From 28786506549703623c814e3f3eaa5a3db1cb0599 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Tue, 16 Apr 2024 00:29:27 +0600 Subject: [PATCH 0295/1086] Create statefulset.md --- .../bn/docs/reference/glossary/statefulset.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 content/bn/docs/reference/glossary/statefulset.md diff --git a/content/bn/docs/reference/glossary/statefulset.md b/content/bn/docs/reference/glossary/statefulset.md new file mode 100644 index 0000000000..05883a5124 --- /dev/null +++ b/content/bn/docs/reference/glossary/statefulset.md @@ -0,0 +1,22 @@ +--- +title: স্টেটফুলসেট +id: statefulset +date: 2018-04-12 +full_link: /bn/docs/concepts/workloads/controllers/statefulset/ +short_description: > + একটি স্টেটফুলসেট প্রতিটি পডের জন্য টেকসই স্টোরেজ এবং ক্রমাগত শনাক্তকারী সহ পডের একটি সেট ডিপ্লয়মেন্ট এবং স্কেলিং পরিচালনা করে। + +aka: +tags: +- fundamental +- core-object +- workload +- storage +--- + সেটের ডিপ্লয়মেন্ট এবং স্কেলিং পরিচালনা করে {{< glossary_tooltip text="পড" term_id="pod">}}, *এবং ক্রম এবং অনন্যতা সম্পর্কে গ্যারান্টি প্রদান করে* পডগুলির ৷ + + + +যেমন একটি {{< glossary_tooltip term_id="deployment" >}}, একটি স্টেটফুলসেট পডগুলি পরিচালনা করে যা একটি অভিন্ন কন্টেইনার স্পেকের উপর ভিত্তি করে। একটি স্থাপনার থেকে ভিন্ন, একটি স্টেটফুলসেট তার প্রতিটি পডের জন্য একটি স্টিকি পরিচয় বজায় রাখে। এই পডগুলি একই স্পেক (spec) থেকে তৈরি করা হয়েছে, কিন্তু বিনিময়যোগ্য নয়: প্রতিটিরই একটি স্থায়ী শনাক্তকারী থাকে যা এটি যেকোনো পুনঃনির্ধারণ জুড়ে বজায় রাখে। + +আপনি যদি আপনার ওয়ার্কলোডের জন্য পার্সিস্টেন্স (persistence) প্রদান করতে স্টোরেজ ভলিউম ব্যবহার করতে চান, আপনি সমাধানের অংশ হিসাবে স্টেটফুলসেট ব্যবহার করতে পারেন। যদিও স্টেটফুলসেটে পৃথক পড ব্যর্থতার জন্য সংবেদনশীল, ক্রমাগত পড শনাক্তকারী নতুন পডের সাথে বিদ্যমান ভলিউমগুলিকে মেলানো সহজ করে তোলে যা ব্যর্থ হয়েছে এমন যেকোনোটি প্রতিস্থাপন করে। From 80bdec25aded3d42fb0c5567b81e84dd1f80b9f7 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 17 Apr 2024 21:56:25 +0600 Subject: [PATCH 0296/1086] Update _index.md --- content/bn/docs/concepts/extend-kubernetes/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/concepts/extend-kubernetes/_index.md b/content/bn/docs/concepts/extend-kubernetes/_index.md index 49f310d627..358d419679 100644 --- a/content/bn/docs/concepts/extend-kubernetes/_index.md +++ b/content/bn/docs/concepts/extend-kubernetes/_index.md @@ -259,8 +259,8 @@ _ডিভাইস প্লাগইনগুলো_ একটি [ডিভ ভলিউমগুলো টেকসই এক্সটার্নাল স্টোরেজ দ্বারা সাহায্যপ্রাপ্ত করা যেতে পারে, বা ক্ষণস্থায়ী স্টোরেজ(ephemeral storage) প্রদান করতে পারে, অথবা তারা একটি ফাইল সিস্টেম প্যারাডাইম ব্যবহার করে তথ্যের জন্য একটি রিড-অনলি ইন্টারফেস দিতে পারে । -কুবারনেটিস এছাড়াও FlexVolume প্লাগইনগুলোর জন্য সাপোর্ট অন্তর্ভুক্ত করে, -যা কুবারনেটিস v1.23 (CSI-এর পক্ষে) থেকে ডেপ্রিকেটেড(deprecated) করা হয়েছে । +কুবারনেটিস এছাড়াও [FlexVolume](/bn/docs/concepts/storage/volumes/#flexvolume) প্লাগইনগুলোর জন্য সাপোর্ট অন্তর্ভুক্ত করে, +যা কুবারনেটিস v1.23 (CSI-এর পক্ষে) থেকে অবমূল্যায়িত(deprecated) করা হয়েছে । FlexVolume প্লাগইনগুলো ব্যবহারকারীদের ভলিউম প্রকারগুলো মাউন্ট করার অনুমতি দেয় যা সাধারণত কুবারনেটিস দ্বারা সাপোর্টেড নয়। আপনি যখন FlexVolume স্টোরেজের উপর নির্ভর করে এমন একটি পড চালান, তখন kubelet ভলিউম মাউন্ট করার জন্য একটি বাইনারি প্লাগইন কল করে। From 7f25b56c078e01ff4ada26d55f4039fe48d5f126 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 17 Apr 2024 22:11:53 +0600 Subject: [PATCH 0297/1086] Create _index.md --- .../compute-storage-net/_index.md | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 content/bn/docs/concepts/extend-kubernetes/compute-storage-net/_index.md diff --git a/content/bn/docs/concepts/extend-kubernetes/compute-storage-net/_index.md b/content/bn/docs/concepts/extend-kubernetes/compute-storage-net/_index.md new file mode 100644 index 0000000000..bfbbbc0940 --- /dev/null +++ b/content/bn/docs/concepts/extend-kubernetes/compute-storage-net/_index.md @@ -0,0 +1,43 @@ +--- +title: কম্পিউট, স্টোরেজ, এবং নেটওয়ার্কিং এক্সটেনশন +weight: 30 +no_list: true +--- + +এই বিভাগটি আপনার ক্লাস্টারের এক্সটেনশনগুলোকে কভার করে যা কুবারনেটিসের অংশ হিসাবে আসে না। +আপনি এই এক্সটেনশনগুলো আপনার ক্লাস্টারে নোডগুলোকে উন্নত করতে বা পডকে একসাথে লিঙ্ক করে এমন +নেটওয়ার্ক ফ্যাব্রিক প্রদান করতে ব্যবহার করতে পারেন। + +* [CSI](/bn/docs/concepts/storage/volumes/#csi) এবং [FlexVolume](/bn/docs/concepts/storage/volumes/#flexvolume) স্টোরেজ প্লাগইন + + {{< glossary_tooltip text="কন্টেইনার স্টোরেজ ইন্টারফেস" term_id="csi" >}} (CSI) প্লাগইনগুলো নতুন ধরনের + ভলিউমের জন্য সাপোর্ট সহ কুবারনেটিসকে প্রসারিত করার একটি উপায় প্রদান করে।ভলিউমগুলি টেকসই এক্সটার্নাল স্টোরেজ + দ্বারা ব্যাক করা যেতে পারে, বা ক্ষণস্থায়ী স্টোরেজ প্রদান করতে পারে, অথবা তারা একটি ফাইল সিস্টেম প্যারাডাইম ব্যবহার করে + তথ্যের জন্য একটি পঠনযোগ্য ইন্টারফেস অফার করতে পারে। + + কুবারনেটিস এছাড়াও [FlexVolume](/bn/docs/concepts/storage/volumes/#flexvolume) প্লাগইনগুলোর জন্য সাপোর্ট অন্তর্ভুক্ত করে, + যা কুবারনেটিস v1.23 (CSI-এর পক্ষে) থেকে অবমূল্যায়িত(deprecated) করা হয়েছে । + + FlexVolume প্লাগইনগুলো ব্যবহারকারীদের ভলিউম প্রকারগুলো মাউন্ট করার অনুমতি দেয় যা সাধারণত কুবারনেটিস + দ্বারা সাপোর্টেড নয়। আপনি যখন FlexVolume স্টোরেজের উপর নির্ভর করে এমন একটি পড চালান, তখন kubelet + ভলিউম মাউন্ট করার জন্য একটি বাইনারি প্লাগইন কল করে। আর্কাইভ করা + [FlexVolume](https://git.k8s.io/design-proposals-archive/storage/flexvolume-deployment.md) + ডিজাইন প্রস্তাবে এই পদ্ধতির আরও বিশদ বিবরণ রয়েছে। + + [The Kubernetes Volume Plugin FAQ for Storage Vendors](https://github.com/kubernetes/community/blob/master/sig-storage/volume-plugin-faq.md#kubernetes-volume-plugin-faq-for-storage-vendors) তে + স্টোরেজ প্লাগইনগুলোর সাধারণ তথ্য অন্তর্ভুক্ত রয়েছে । + +* [ডিভাইস প্লাগইন](/bn/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/) + + ডিভাইস প্লাগইনগুলো একটি নোডকে নতুন নোড সুবিধাগুলি আবিষ্কার করার অনুমতি দেয় + (বিল্ট-ইন নোড রিসোর্স যেমন `cpu` এবং `মেমরি` ছাড়াও), এবং তাদের অনুরোধকারী + পডগুলোতে এই কাস্টম নোড-লোকাল সুবিধাগুলো সরবরাহ করে। + +* [নেটওয়ার্ক প্লাগইন](/bn/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) + + একটি নেটওয়ার্ক প্লাগইন কুবারনেটিসকে বিভিন্ন নেটওয়ার্কিং টপোলজি এবং প্রযুক্তির সাথে কাজ করার অনুমতি দেয়। + আপনার কুবারনেটিস ক্লাস্টারের একটি _নেটওয়ার্ক প্লাগইন_ প্রয়োজন যাতে একটি কার্যকরী পড নেটওয়ার্ক থাকে + এবং কুবারনেটিস নেটওয়ার্ক মডেলের অন্যান্য দিকগুলোকে সাপোর্ট করতে পারে ৷ + + কুবারনেটিস {{< skew currentVersion >}} {{< glossary_tooltip text="CNI" term_id="cni" >}} + নেটওয়ার্ক প্লাগইনগুলোর সাথে সামঞ্জস্যপূর্ণ ৷ From 610753c7687d8a45f750cdc2afa045dd27c888c9 Mon Sep 17 00:00:00 2001 From: Shannon Kularathna Date: Tue, 2 Apr 2024 11:28:04 -0400 Subject: [PATCH 0298/1086] Add page for kernel-level security concepts --- .../linux-kernel-security-constraints.md | 305 ++++++++++++++++++ .../en/docs/concepts/workloads/pods/_index.md | 44 +-- .../en/docs/tutorials/security/apparmor.md | 20 +- 3 files changed, 333 insertions(+), 36 deletions(-) create mode 100644 content/en/docs/concepts/security/linux-kernel-security-constraints.md diff --git a/content/en/docs/concepts/security/linux-kernel-security-constraints.md b/content/en/docs/concepts/security/linux-kernel-security-constraints.md new file mode 100644 index 0000000000..b5d748ee4e --- /dev/null +++ b/content/en/docs/concepts/security/linux-kernel-security-constraints.md @@ -0,0 +1,305 @@ +--- +title: Linux kernel security constraints for Pods and containers +description: > + Overview of Linux kernel security modules and constraints that you can use to + harden your Pods and containers. +content_type: concept +weight: 100 +--- + + + +This page describes some of the security features that are built into the Linux +kernel that you can use in your Kubernetes workloads. To learn how to apply +these features to your Pods and containers, refer to +[Configure a SecurityContext for a Pod or Container](/docs/tasks/configure-pod-container/security-context/). +You should already be familiar with Linux and with the basics of Kubernetes +workloads. + + + +## Run workloads without root privileges {#run-without-root} + +When you deploy a workload in Kubernetes, use the Pod specification to restrict +that workload from running as the root user on the node. You can use the Pod +`securityContext` to define the specific Linux user and group for the processes in +the Pod, and explicitly restrict containers from running as root users. Setting +these values in the Pod manifest takes precedence over similar values in the +container image, which is especially useful if you're running images that you +don't own. + +{{< caution >}} +Ensure that the user or group that you assign to the workload has the permissions +required for the application to function correctly. Changing the user or group +to one that doesn't have the correct permissions could lead to file access +issues or failed operations. +{{< /caution >}} + +Configuring the kernel security features on this page provides fine-grained +control over the actions that processes in your cluster can take, but managing +these configurations can be challenging at scale. Running containers as +non-root, or in user namespaces if you need root privileges, helps to reduce the +chance that you'll need to enforce your configured kernel security capabilities. + +## Security features in the Linux kernel {#linux-security-features} + +Kubernetes lets you configure and use Linux kernel features to improve isolation +and harden your containerized workloads. Common features include the following: + +* **Secure computing mode (seccomp)**: Filter which system calls a process can + make +* **AppArmor**: Restrict the access privileges of individual programs +* **Security Enhanced Linux (SELinux)**: Assign security labels to objects for + more manageable security policy enforcement + +To configure settings for one of these features, the operating system that you +choose for your nodes must enable the feature in the kernel. For example, +Ubuntu 7.10 and later enable AppArmor by default. To learn whether your OS +enables a specific feature, consult the OS documentation. + +You use the `securityContext` field in your Pod specification to define the +constraints that apply to those processes. The `securityContext` field also +supports other security settings, such as specific Linux capabilities or file +access permissions using UIDs and GIDs. To learn more, refer to +[Configure a SecurityContext for a Pod or Container](/docs/tasks/configure-pod-container/security-context/). + +### seccomp + +Some of your workloads might need privileges to perform specific actions as the +root user on your node's host machine. Linux uses *capabilities* to divide the +available privileges into categories, so that processes can get the privileges +required to perform specific actions without being granted all privileges. Each +capability has a set of system calls (syscalls) that a process can make. seccomp +lets you restrict these individual syscalls. +It can be used to sandbox the privileges of a process, restricting the calls it +is able to make from userspace into the kernel. + +In Kubernetes, you use a *container runtime* on each node to run your +containers. Example runtimes include CRI-O, Docker, or containerd. Each runtime +allows only a subset of Linux capabilities by default. You can further limit the +allowed syscalls individually by using a seccomp profile. Container runtimes +usually include a default seccomp profile. +Kubernetes lets you automatically +apply seccomp profiles loaded onto a node to your Pods and containers. + +{{}} +Kubernetes also has the `allowPrivilegeEscalation` setting for Pods and +containers. When set to `false`, this prevents processes from gaining new +capabilities and restricts unprivileged users from changing the applied seccomp +profile to a more permissive profile. +{{}} + +To learn how to implement seccomp in Kubernetes, refer to +[Restrict a Container's Syscalls with seccomp](/docs/tutorials/security/seccomp/). + +To learn more about seccomp, see +[Seccomp BPF](https://www.kernel.org/doc/html/latest/userspace-api/seccomp_filter.html) +in the Linux kernel documentation. + +#### Considerations for seccomp {#seccomp-considerations} + +seccomp is a low-level security configuration that you should only configure +yourself if you require fine-grained control over Linux syscalls. Using +seccomp, especially at scale, has the following risks: + +* Configurations might break during application updates +* Attackers can still use allowed syscalls to exploit vulnerabilities +* Profile management for individual applications becomes challenging at scale + +**Recommendation**: Use the default seccomp profile that's bundled with your +container runtime. If you need a more isolated environment, consider using a +sandbox, such as gVisor. Sandboxes solve the preceding risks with custom +seccomp profiles, but require more compute resources on your nodes and might +have compatibility issues with GPUs and other specialized hardware. + +### AppArmor and SELinux: policy-based mandatory access control {#policy-based-mac} + +You can use Linux policy-based mandatory access control (MAC) mechanisms, such +as AppArmor and SELinux, to harden your Kubernetes workloads. + +#### AppArmor + + + +[AppArmor](https://apparmor.net/) is a Linux kernel security module that +supplements the standard Linux user and group based permissions to confine +programs to a limited set of resources. AppArmor can be configured for any +application to reduce its potential attack surface and provide greater in-depth +defense. It is configured through profiles tuned to allow the access needed by a +specific program or container, such as Linux capabilities, network access, and +file permissions. Each profile can be run in either enforcing mode, which blocks +access to disallowed resources, or complain mode, which only reports violations. + +AppArmor can help you to run a more secure deployment by restricting what +containers are allowed to do, and/or provide better auditing through system +logs. The container runtime that you use might ship with a default AppArmor +profile, or you can use a custom profile. + +To learn how to use AppArmor in Kubernetes, refer to +[Restrict a Container's Access to Resources with AppArmor](/docs/tutorials/security/apparmor/). + +#### SELinux + +SELinux is a Linux kernel security module that lets you restrict the access +that a specific *subject*, such as a process, has to the files on your system. +You define security policies that apply to subjects that have specific SELinux +labels. When a process that has an SELinux label attempts to access a file, the +SELinux server checks whether that process' security policy allows the access +and makes an authorization decision. + +In Kubernetes, you can set an SELinux label in the `securityContext` field of +your manifest. The specified labels are assigned to those processes. If you +have configured security policies that affect those labels, the host OS kernel +enforces these policies. + +To learn how to use SELinux in Kubernetes, refer to +[Assign SELinux labels to a container](/docs/tasks/configure-pod-container/security-context/#assign-selinux-labels-to-a-container). + +#### Differences between AppArmor and SELinux {#apparmor-selinux-diff} + +The operating system on your Linux nodes usually includes one of either +AppArmor or SELinux. Both mechanisms provide similar types of protection, but +have differences such as the following: + +* **Configuration**: AppArmor uses profiles to define access to resources. + SELinux uses policies that apply to specific labels. +* **Policy application**: In AppArmor, you define resources using file paths. + SELinux uses the index node (inode) of a resource to identify the resource. + +### Summary of features {#summary} + +The following table describes the use cases and scope of each security control. +You can use all of these controls together to build a more hardened system. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Summary of Linux kernel security features
Security featureDescriptionHow to useExample
seccompRestrict individual kernel calls in the userspace. Reduces the + likelihood that a vulnerability that uses a restricted syscall would + compromise the system.Specify a loaded seccomp profile in the Pod or container specification + to apply its constraints to the processes in the Pod.Reject the unshare syscall, which was used in + CVE-2022-0185.
AppArmorRestrict program access to specific resources. Reduces the attack + surface of the program. Improves audit logging.Specify a loaded AppArmor profile in the container specification.Restrict a read-only program from writing to any file path + in the system.
SELinuxRestrict access to resources such as files, applications, ports, and + processes using labels and security policies.Specify access restrictions for specific labels. Tag processes with + those labels to enforce the access restrictions related to the label.Restrict a container from accessing files outside its own filesystem.
+ +{{< note >}} +Mechanisms like AppArmor and SELinux can provide protection that extends beyond +the container. For example, you can use SELinux to help mitigate +[CVE-2019-5736](https://access.redhat.com/security/cve/cve-2019-5736). +{{< /note >}} + +### Considerations for managing custom configurations {#considerations-custom-configurations} + +seccomp, AppArmor, and SELinux usually have a default configuration that offers +basic protections. You can also create custom profiles and policies that meet +the requirements of your workloads. Managing and distributing these custom +configurations at scale might be challenging, especially if you use all three +features together. To help you to manage these configurations at scale, use a +tool like the +[Kubernetes Security Profiles Operator](https://github.com/kubernetes-sigs/security-profiles-operator). + +## Kernel-level security features and privileged containers {#kernel-security-features-privileged-containers} + +Kubernetes lets you specify that some trusted containers can run in +*privileged* mode. Any container in a Pod can run in privileged mode to use +operating system administrative capabilities that would otherwise be +inaccessible. This is available for both Windows and Linux. + +Privileged containers explicitly override some of the Linux kernel constraints +that you might use in your workloads, as follows: + +* **seccomp**: Privileged containers run as the `Unconfined` seccomp profile, + overriding any seccomp profile that you specified in your manifest. +* **AppArmor**: Privileged containers ignore any applied AppArmor profiles. +* **SELinux**: Privileged containers run as the `unconfined_t` domain. + +### Privileged containers {#privileged-containers} + + + +Any container in a Pod can enable *Privileged mode* if you set the +`privileged: true` field in the +[`securityContext`](/docs/tasks/configure-pod-container/security-context/) +field for the container. Privileged containers override or undo many other hardening settings such as the applied seccomp profile, AppArmor profile, or +SELinux constraints. Privileged containers are given all Linux capabilities, +including capabilities that they don't require. For example, a root user in a +privileged container might be able to use the `CAP_SYS_ADMIN` and +`CAP_NET_ADMIN` capabilities on the node, bypassing the runtime seccomp +configuration and other restrictions. + +In most cases, you should avoid using privileged containers, and instead grant +the specific capabilities required by your container using the `capabilities` +field in the `securityContext` field. Only use privileged mode if you have a +capability that you can't grant with the securityContext. This is useful for +containers that want to use operating system administrative capabilities such +as manipulating the network stack or accessing hardware devices. + +<<<<<<< Updated upstream +### Windows privileged containers {#windows-privileged-containers} + +{{< feature-state for_k8s_version="1.26" state="stable" >}} + +In Windows, you can create a +[Windows HostProcess pod](/docs/tasks/configure-pod-container/create-hostprocess-pod) +by setting the `windowsOptions.hostProcess` flag on the security context of the +pod spec. All containers in these pods must run as Windows HostProcess +containers. HostProcess pods run directly on the host and can also be used to +perform administrative tasks as is done with Linux privileged containers. In +order to use this feature, the WindowsHostProcessContainers feature gate must be +enabled. +======= +In Kubernetes version 1.26 and later, you can also run Windows containers in a +similarly privileged mode by setting the `windowsOptions.hostProcess` flag on +the security context of the Pod spec. For details and instructions, see +[Create a Windows HostProcess Pod](/docs/tasks/configure-pod-container/create-hostprocess-pod/). +>>>>>>> Stashed changes + +## Recommendations and best practices {#recommendations-best-practices} + +* Before configuring kernel-level security capabilities, you should consider + implementing network-level isolation. For more information, read the + [Security Checklist](/docs/concepts/security/security-checklist/#network-security). +* Unless necessary, run Linux workloads as non-root by setting specific user and + group IDs in your Pod manifest and by specifying `runAsNonRoot: true`. + +Additionally, you can run workloads in user namespaces by setting +`hostUsers: false` in your Pod manifest. This lets you run containers as root +users in the user namespace, but as non-root users in the host namespace on the +node. This is still in early stages of development and might not have the level +of support that you need. For instructions, refer to +[Use a User Namespace With a Pod](/docs/tasks/configure-pod-container/user-namespaces/). + +## {{% heading "whatsnext" %}} + +* [Learn how to use AppArmor](/docs/tutorials/security/apparmor/) +* [Learn how to use seccomp](/docs/tutorials/security/seccomp/) +* [Learn how to use SELinux](/docs/tasks/configure-pod-container/security-context/#assign-selinux-labels-to-a-container) diff --git a/content/en/docs/concepts/workloads/pods/_index.md b/content/en/docs/concepts/workloads/pods/_index.md index 4439087584..730815c557 100644 --- a/content/en/docs/concepts/workloads/pods/_index.md +++ b/content/en/docs/concepts/workloads/pods/_index.md @@ -270,30 +270,34 @@ Containers within the Pod see the system hostname as being the same as the confi `name` for the Pod. There's more about this in the [networking](/docs/concepts/cluster-administration/networking/) section. -## Privileged mode for containers +## Pod security settings {#pod-security} -{{< note >}} -Your {{< glossary_tooltip text="container runtime" term_id="container-runtime" >}} must support the concept of a privileged container for this setting to be relevant. -{{< /note >}} +To set security constraints on Pods and containers, you use the +`securityContext` field in the Pod specification. This field gives you +granular control over what a Pod or individual containers can do. For example: -Any container in a pod can run in privileged mode to use operating system administrative capabilities -that would otherwise be inaccessible. This is available for both Windows and Linux. +* Drop specific Linux capabilities to avoid the impact of a CVE. +* Force all processes in the Pod to run as a non-root user or as a specific + user or group ID. +* Set a specific seccomp profile. +* Set Windows security options, such as whether containers run as HostProcess. -### Linux privileged containers +{{< caution >}} +You can also use the Pod securityContext to enable +[_privileged mode_](/docs/concepts/security/linux-kernel-security-constraints/#privileged-containers) +in Linux containers. Privileged mode overrides many of the other security +settings in the securityContext. Avoid using this setting unless you can't grant +the equivalent permissions by using other fields in the securityContext. +In Kubernetes 1.26 and later, you can run Windows containers in a similarly +privileged mode by setting the `windowsOptions.hostProcess` flag on the +security context of the Pod spec. For details and instructions, see +[Create a Windows HostProcess Pod](/docs/tasks/configure-pod-container/create-hostprocess-pod/). +{{< /caution >}} -In Linux, any container in a Pod can enable privileged mode using the `privileged` (Linux) flag -on the [security context](/docs/tasks/configure-pod-container/security-context/) of the -container spec. This is useful for containers that want to use operating system administrative -capabilities such as manipulating the network stack or accessing hardware devices. - -### Windows privileged containers - -{{< feature-state for_k8s_version="v1.26" state="stable" >}} - -In Windows, you can create a [Windows HostProcess pod](/docs/tasks/configure-pod-container/create-hostprocess-pod) by setting the -`windowsOptions.hostProcess` flag on the security context of the pod spec. All containers in these -pods must run as Windows HostProcess containers. HostProcess pods run directly on the host and can also be used -to perform administrative tasks as is done with Linux privileged containers. +* To learn about kernel-level security constraints that you can use, + see [Linux kernel security constraints for Pods and containers](/docs/concepts/security/linux-kernel-security-constraints). +* To learn more about the Pod security context, see + [Configure a Security Context for a Pod or Container](/docs/tasks/configure-pod-container/security-context/). ## Static Pods diff --git a/content/en/docs/tutorials/security/apparmor.md b/content/en/docs/tutorials/security/apparmor.md index 49e9f641fd..a2f265e373 100644 --- a/content/en/docs/tutorials/security/apparmor.md +++ b/content/en/docs/tutorials/security/apparmor.md @@ -10,22 +10,10 @@ weight: 30 {{< feature-state for_k8s_version="v1.4" state="beta" >}} - -[AppArmor](https://apparmor.net/) is a Linux kernel security module that supplements the standard Linux user and group based -permissions to confine programs to a limited set of resources. AppArmor can be configured for any -application to reduce its potential attack surface and provide greater in-depth defense. It is -configured through profiles tuned to allow the access needed by a specific program or container, -such as Linux capabilities, network access, file permissions, etc. Each profile can be run in either -*enforcing* mode, which blocks access to disallowed resources, or *complain* mode, which only reports -violations. - -On Kubernetes, AppArmor can help you to run a more secure deployment by restricting what containers are allowed to -do, and/or provide better auditing through system logs. However, it is important to keep in mind -that AppArmor is not a silver bullet and can only do so much to protect against exploits in your -application code. It is important to provide good, restrictive profiles, and harden your -applications and cluster from other angles as well. - - +This page shows you how to load AppArmor profiles on your nodes and enforce +those profiles in Pods. To learn more about how Kubernetes can confine Pods using +AppArmor, see +[Linux kernel security constraints for Pods and containers](/docs/concepts/security/linux-kernel-security-constraints/#apparmor). ## {{% heading "objectives" %}} From 7416c9c4d2a7456f270f71a040cecf0b38d2a316 Mon Sep 17 00:00:00 2001 From: Shannon Kularathna Date: Mon, 2 Oct 2023 14:56:35 -0400 Subject: [PATCH 0299/1086] Modify Windows HostProcess section to point to dedicated page --- .../security/linux-kernel-security-constraints.md | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/content/en/docs/concepts/security/linux-kernel-security-constraints.md b/content/en/docs/concepts/security/linux-kernel-security-constraints.md index b5d748ee4e..9b494a5748 100644 --- a/content/en/docs/concepts/security/linux-kernel-security-constraints.md +++ b/content/en/docs/concepts/security/linux-kernel-security-constraints.md @@ -263,25 +263,10 @@ capability that you can't grant with the securityContext. This is useful for containers that want to use operating system administrative capabilities such as manipulating the network stack or accessing hardware devices. -<<<<<<< Updated upstream -### Windows privileged containers {#windows-privileged-containers} - -{{< feature-state for_k8s_version="1.26" state="stable" >}} - -In Windows, you can create a -[Windows HostProcess pod](/docs/tasks/configure-pod-container/create-hostprocess-pod) -by setting the `windowsOptions.hostProcess` flag on the security context of the -pod spec. All containers in these pods must run as Windows HostProcess -containers. HostProcess pods run directly on the host and can also be used to -perform administrative tasks as is done with Linux privileged containers. In -order to use this feature, the WindowsHostProcessContainers feature gate must be -enabled. -======= In Kubernetes version 1.26 and later, you can also run Windows containers in a similarly privileged mode by setting the `windowsOptions.hostProcess` flag on the security context of the Pod spec. For details and instructions, see [Create a Windows HostProcess Pod](/docs/tasks/configure-pod-container/create-hostprocess-pod/). ->>>>>>> Stashed changes ## Recommendations and best practices {#recommendations-best-practices} From ac84da5dc61985fb5ce60bbcd53de89516faeb2d Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Thu, 18 Apr 2024 12:42:27 +0200 Subject: [PATCH 0300/1086] Fix selected search bar border styling --- assets/scss/_custom.scss | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/assets/scss/_custom.scss b/assets/scss/_custom.scss index 30875f18f3..f4f07feca4 100644 --- a/assets/scss/_custom.scss +++ b/assets/scss/_custom.scss @@ -1059,10 +1059,11 @@ div.alert > em.javascript-required { flex-grow: 1; overflow-x: hidden; width: auto; -} -.search-bar:focus-within { - border: 2.5px solid rgba(47, 135, 223, 0.7); + &:focus-within { + outline: 1.5px solid rgba(47, 135, 223, 0.7); + border: 1px solid rgba(47, 135, 223, 0.7); + } } .search-bar i.search-icon { From 80433133be22ef1fe7c2f94201c01ac1ca8c945d Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Thu, 18 Apr 2024 18:30:23 +0100 Subject: [PATCH 0301/1086] Drop vestigial Federation page (Bahasa Indonesia) There's no English original any more, so we can drop this page. --- .../cluster-administration/federation.md | 196 ------------------ 1 file changed, 196 deletions(-) delete mode 100644 content/id/docs/concepts/cluster-administration/federation.md diff --git a/content/id/docs/concepts/cluster-administration/federation.md b/content/id/docs/concepts/cluster-administration/federation.md deleted file mode 100644 index d59da126ad..0000000000 --- a/content/id/docs/concepts/cluster-administration/federation.md +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: Federation -content_type: concept -weight: 80 ---- - - - -{{< deprecationfilewarning >}} -{{< include "federation-deprecation-warning-note.md" >}} -{{< /deprecationfilewarning >}} - -Laman ini menjelaskan alasan dan cara penggunaan _federation_ untuk melakukan manajemen -klaster Kubernetes. - - - -## Kenapa _Federation_ ? - -_Federation_ membuat proses manajemen klaster multipel menjadi lebih mudah. -_Federation_ mencapai hal ini dengan cara menyediakan 2 buah fondasi: - - * Melakukan sinkronisasi _resource_ di seluruh klaster: _Federation_ - menyediakan kemampuan untuk melakukan sinkronisasi _resources_ pada _multiple_ - klaster. Sebagai contoh, kamu dapat memastikan _Deployment_ yang sama - tersedia pada klaster multipel. - * _Cross_ _cluster_ _Discovery_: _Federation_ menyediakan kemampuan untuk melakukan - konfigurasi otomatis server DNS dan _load balancer_ dari semua klaster. - Misalnya, kamu dapat memastikan bahwa sebuah VIP atau DNS global dapat digunakan - untuk mengakses _backend_ dari klaster multipel. - -Beberapa penggunaan _federation_ adalah sebagai berikut: - -* _High Availability_: Melakukan _load balance_ di seluruh klaster serta - melakukan konfigurasi otomatis server DNS dan _load balancer_, _federation_ - meminimalisasi dampak yang terjadi apabila terjadi kegagalan klaster. -* Mencegah _lock-in_ yang terjadi akibat penyedia layanan: Dengan cara mempermudah - proses migrasi antar klaster. - - -Manfaat _federation_ tidak akan terlalu kelihatan kecuali kamu memiliki beberapa klaster. -Beberapa alasan kenapa kamu butuh beberapa klaster adalah: - -* _Latency_ yang rendah: Memiliki klaster yang berada di _region_ yang berbeda - meminimalisasi _latency_ dengan cara menyajikan konten ke pengguna - berdasarkan _region_ yang paling dekat dengan pengguna tersebut. -* Isolasi _fault_: Akan lebih baik apabila kita memiliki beberapa klaster kecil - dibandingkan sebuah klaster besar untuk melakukan isolasi _fault_ (misalnya saja - klaster ini bisa saja berada di _availability_ zona dan penyedia layanan _cloud_ - yang berbeda). -* Skalabilitas: Terdapat batasan skalabilitas untuk sebuah klaster Kubernetes, - hal ini sebenarnya tidak menjadi masalah bagi sebagian besar pengguna. Untuk informasi - lebih lanjut kamu bisa membaca - [_Kubernetes Scaling_ dan Perencanaan Performa](https://git.k8s.io/community/sig-scalability/goals.md)). -* [_Hybrid cloud_](#hybrid-cloud-capabilities): Kamu dapat memiliki _multiple_ klsuter - pada penyedia layanan _cloud_ yang berbeda ataupun menggunakan _on-premsie_. - -### Kekurangan - -Meskipun terdapat banyak kelebihan dari penggunaan _federation_, -terdapat beberapa kekurangan _federation_ yang dijabarkan sebagai berikut: - -* Peningkatan _bandwidth_ dan biaya untuk jaringan: _control plane_ _federation_ bertugas mengawasi semua - kulster yang ada untuk menjamin _state_ yang ada saat ini sesuai dengan _state_ yang diinginkan. Hal ini dapat menyebabkan - peningkatan biaya jaringan apabila klaster yang ada dijalankan pada _region_ yang berbeda baik pada penyedia - layanan _cloud_ yang sama maupun berbeda. -* Berkurangnya isolasi antar klaster: Sebuah _bug_ yang ada pada _control plane_ _federation_ dapat - berdampak pada semua klaster. Hal ini dapat dihindari dengan cara mejaga logika yang ada pada _control plane_ _federation_ - seminimum mungkin. -* Kematangan: Proyek _federation_ ini tergolong baru dan belum cukup matang. - Tidak semua _resource_ yang ada tersedia dan masih banyak feature _alpha_. [_Issue_ - 88](https://github.com/kubernetes/federation/issues/88) memberikan detail - isu-isu terkait sistem yang masih berusaha dicari solusinya. - -### Kemampuan _Hybrid_ Penggunaan Layanan Penyedian _Cloud_ - -_Federation_ pada Kubernetes memungkinkan klaster untuk dijalankan -pada penyedia layanan _cloud_ yang berbeda (misalnya Google Cloud, AWS), dan _on-premise_ -(misalnya OpenStack). [Kubefed](/docs/tasks/federation/set-up-cluster-federation-kubefed/) -adalah salah satu cara yang direkomendasikan untuk melakukan proses _deploy_ -klaster _federation_. - -Dengan demikian, [_resources_ API](#resources-api) yang kamu miliki -dapat berada di klaster atau bahkan penyedia layanan _cloud_ yang berbeda. - -## Mengaktifkan _Federation_ - -Untuk bisa melakukan _federation_ pada klaster yang berbeda, -pertama kamu harus mengaktifkan _control plane_ _federation_. -Ikuti [petunjuk mengaktifkan _control plane_ _federation_](/docs/tutorials/federation/set-up-cluster-federation-kubefed/) -untuk informasi lebih lanjut. - -## `Resources` API - -Setelah kamu mengaktifkan _control plane_, kamu dapat menggunakan _resource_ API _federation_. -Berikut merupakan panduan yang akan menjelaskan masing-masing _resource_ secara mendetail: - -* [Cluster](/docs/tasks/administer-federation/cluster/) -* [ConfigMap](/docs/tasks/administer-federation/configmap/) -* [DaemonSets](/docs/tasks/administer-federation/daemonset/) -* [Deployment](/docs/tasks/administer-federation/deployment/) -* [Events](/docs/tasks/administer-federation/events/) -* [Hpa](/docs/tasks/administer-federation/hpa/) -* [Ingress](/docs/tasks/administer-federation/ingress/) -* [Jobs](/docs/tasks/administer-federation/job/) -* [Namespaces](/docs/tasks/administer-federation/namespaces/) -* [ReplicaSets](/docs/tasks/administer-federation/replicaset/) -* [Secrets](/docs/tasks/administer-federation/secret/) -* [Services](/id/docs/concepts/cluster-administration/federation-service-discovery/) - - -[Referensi Dokumentasi API](/docs/reference/federation/) memberikan semua daftar -_resources_ yang disediakan _apiserver_ _federation_. - -## Penghapusan Berantai - -Kubernetes versi 1.6 menyediakan mekanisme penghapusan berantai -untuk _resource_ yang ada pada _federation_. Dengan penghapusan berantai, -ketika kamu menghapus sebuah _resource_ dari _control plane_ _federation_, -kamu juga akan menghapus segala _resource_ tersebut pada semua klaster yang ada. - -Mekanisme penghapusan berantai ini tidak diaktifkan secara _default_ -ketika menggunakan REST API. Untuk mengaktifkannya, ubah nilai dari opsi -`DeleteOptions.orphanDependents=false` ketika kamu menghapus sebuah _resource_ -dari _control plane_ _federation_ dengan menggunakan REST API. -Penggunaan `kubectl delete`mengaktifkan penhapusan berantai secara _default_. -Kamu dapat menonaktifkannya dengan menggunakan `kubectl delete --cascade=false` - -Catatan: Kubernetes versi 1.5 menyediakan penghapusan berantai -untuk sebagian _resource_ _federation_. - -## Cakupan dari Sebuah Klaster - -Pada penyedia IaaS seperti Google Compute Engine atau Amazon Web Services, sebuah VM ada di dalam -[zona](https://cloud.google.com/compute/docs/zones) atau [_availability -zone_](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html). -Kami menyarankan agar semua VM pada klaster Kubernetes berada pada _availability_ zona yang sama, karena: - - - dibandingkan dengan sebuah klaster global Kubernetes, terdapat lebih sedikit _single-points of failure_. - - dibandingkan dengan sebuah klaster yang tersebar pada _availability zone_ yang mungkin berbeda, akan lebih mudah untuk merencanakan properti _availability_ dari sebuah - klaster yang berada pada satu zona. - - ketika pengembang Kubernetes mendesain sistem (misalnya, memperkirakan _latency_, _bandwidth_, atau - _failure_ yang mungkin terjadi) pengembang tersebut memperkirakan semua mesin akan berada pada sebuah _data center_ yang sama, atau setidaknya masih terdapat pada satu wilayah. - -Sangat direkomendasikan untuk menjalankan sedikit klaster dengan lebih banyak VM pada setiap _availability_ zona; -meskipun begitu hal ini tidak menutup kemungkinan untuk menjalankan klaster multipel -pada setiap _availability_ zona. - -Alasan kenapa menjalankan lebih sedikit klaster pada setiap _availability_ zona lebih dianjurkan: - - - meningkatkan _bin packing_ _Pod_ pada beberapa kasus dimana terdapat lebih banyak _node_ dalam sebuah klaster (mengurangi terjadinya _fragmentation_ _resource_). - - mengurangi _overhead_ operasional (meskipun keuntungan ini akan berkurang seiring bertambah matangnya proses dan _tooling_ operasional). - - mengurangi biaya _resource_ tetap per klaster, misalnya VM _apiserver_. - -Alasan untuk memiliki klaster multipel: - - - _policy_ kemananan yang ketat membutuhkan isolasi antar _work_ _class_ (baca Partisi Klaster di bawah). - - melakukan penerapan Kubernetes dan/atau perangkat lunak lain yang versi baru ke salah satu klaster. - -## Memilih jumlah klaster yang tepat - -Pemilihan jumlah klaster yang tepat merupakan pilihan yang relatif statis, dan hanya akan ditinjau kembali sewaktu-waktu. -Sebaliknya, jumlah _node_ dan _pod_ dalam suatu _service_ dapat berubah secara cepat seiring bertambahnya _workload_. - -Untuk memilih jumlah klaster, pertama, pilih _region_ yang memiliki _latency_ yang masih dapat dimaklumi untuk semua pengguna aplikasi kamu -(jika kamu menggunakan _Content Distribution Network_, kebutuhan informasi nilai _latency_ CDN tidak perlu diperhatikan). -Masalah legal juga perlu diperhitungkan. Misalnya sebuah perusahaan dengan pelanggan global bisa jadi memilih klaster di _region_ -US, EU, AP, dan SA. Jumlah _region_ ini dimisalkan dengan `R`. - -Kedua, pilih berapa banyak klaster yang bisa jadi _unavailable_ secara bersamaan tanpa membuat _service_ menjadi _unavailable_. -Misalkan jumlah klaster _unavailable_ ini sebagai `U`. Jika kamu tidak yakin, maka 1 merupakan pilihan yang tergolong -dapat diterima. - -Jika aplikasimu memungkinkan trafik untuk di-_load balance_ ke _region_ mana saja ketika terjadi _failure_ pada klaster, -maka kamu setidaknya membutuhkan nilai yang lebih banyak dari jumlah `R` atau `U + 1` klaster. Jika tidak (misalnya, kamu -ingin menjamin stabilnya _latency_ ketika terjadi _failure_ pada klaster) maka kamu membutuhkan `R * (U + 1)` klaster -(`U + 1` di setiap _region_ yang ada pada `R`). Pada kasus lain, cobalah untuk menerapkan satu klaster - pada zona yang berbeda. - -Terakhir, jika klaster yang kamu miliki membutuhkan jumlah _node_ yang melebihi nilai yang direkomendasikan untuk sebuah klaster Kubernetes, -maka kamu membutuhkan lebih banyak klaster. Kubernetes v1.3 mampu menangani hingga 1000 node untuk setiap klaster. Kubernetes v1.8 -mampu menangani hingga 5000 node untuk tiap klaster. Baca [Membangun Klaster Besar](/docs/setup/cluster-large/) untuk petunjuk lebih lanjut. - - - -## {{% heading "whatsnext" %}} - -* Pelajari lebih lanjut tentang [proposal - _Federation_](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/multicluster/federation.md). -* Baca [petunjuk pengaktifan](/docs/tutorials/federation/set-up-cluster-federation-kubefed/) klaster _federation_. -* Lihat [seminar tentang _federation_ pada Kubecon2016](https://www.youtube.com/watch?v=pq9lbkmxpS8) -* Lihat [_update_ _federation_ pada Kubecon2017 Eropa](https://www.youtube.com/watch?v=kwOvOLnFYck) -* Lihat [_update_ _sig-multicluster_ pada Kubecon2018 Eropa](https://www.youtube.com/watch?v=vGZo5DaThQU) -* Lihat [presentasi prototipe _Federation-v2_ pada Kubecon2018 Eropa](https://youtu.be/q27rbaX5Jis?t=7m20s) -* Lihat [petunjuk penggunaan _Federation-v2_](https://github.com/kubernetes-sigs/federation-v2/blob/master/docs/userguide.md) - From 5f225c96c1956a0bd1303daea588feaf054e73cf Mon Sep 17 00:00:00 2001 From: Arhell Date: Fri, 19 Apr 2024 00:33:50 +0300 Subject: [PATCH 0302/1086] [ko] Utilize code style for inline command --- content/ko/docs/tasks/tools/included/verify-kubectl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/ko/docs/tasks/tools/included/verify-kubectl.md b/content/ko/docs/tasks/tools/included/verify-kubectl.md index b935582b7a..03c40b3010 100644 --- a/content/ko/docs/tasks/tools/included/verify-kubectl.md +++ b/content/ko/docs/tasks/tools/included/verify-kubectl.md @@ -27,7 +27,7 @@ The connection to the server was refused - did you specify th 예를 들어, 랩톱에서 로컬로 쿠버네티스 클러스터를 실행하려면, Minikube와 같은 도구를 먼저 설치한 다음 위에서 언급한 명령을 다시 실행해야 한다. -kubectl cluster-info가 URL 응답을 반환하지만 클러스터에 접근할 수 없는 경우, 올바르게 구성되었는지 확인하려면 다음을 사용한다. +`kubectl cluster-info`가 URL 응답을 반환하지만 클러스터에 접근할 수 없는 경우, 올바르게 구성되었는지 확인하려면 다음을 사용한다. ```shell kubectl cluster-info dump From 89afec6c9acc0467d84c979cee9e4d5844de1b8f Mon Sep 17 00:00:00 2001 From: Nafisa-Tabassum-Mim Date: Fri, 19 Apr 2024 05:11:37 +0600 Subject: [PATCH 0303/1086] pictures file added --- .../adform/adform_featured_logo.png | 0 .../adform/adform_featured_logo.svg | 0 .../case-studies/adidas/adidas-featured.svg | 0 .../case-studies/amadeus/amadeus_featured.png | 0 .../case-studies/amadeus/amadeus_featured.svg | 0 .../bn/case-studies/amadeus/amadeus_logo.png | 0 .../ancestry/ancestry_featured.png | 0 .../ancestry/ancestry_featured.svg | 0 .../case-studies/ancestry/ancestry_logo.png | 0 .../ant-financial_featured_logo.png | 0 .../ant-financial_featured_logo.svg | 0 .../appdirect/appdirect_featured_logo.png | 0 .../appdirect/appdirect_featured_logo.svg | 0 .../babylon/babylon_featured_logo.png | 0 .../babylon/babylon_featured_logo.svg | 0 .../blablacar/blablacar_featured.svg | 0 .../case-studies/blablacar/blablacar_logo.png | 0 content/bn/case-studies/blablacar/index.html | 85 +++++++++++++ .../blackrock/blackrock_featured.png | 0 .../blackrock/blackrock_featured.svg | 0 .../case-studies/blackrock/blackrock_logo.png | 0 content/bn/case-studies/blackrock/index.html | 83 +++++++++++++ .../booking-com/booking.com_featured_logo.png | 0 .../booking-com/booking.com_featured_logo.svg | 0 .../bn/case-studies/booking-com/index.html | 86 +++++++++++++ .../booz-allen/booz-allen-featured-logo.png | 0 .../booz-allen/booz-allen-featured-logo.svg | 0 content/bn/case-studies/booz-allen/index.html | 80 ++++++++++++ .../case-studies/bose/bose_featured_logo.png | 0 .../case-studies/bose/bose_featured_logo.svg | 0 content/bn/case-studies/bose/index.html | 87 +++++++++++++ content/bn/case-studies/box/box_featured.png | 0 content/bn/case-studies/box/box_featured.svg | 0 content/bn/case-studies/box/box_logo.png | 0 content/bn/case-studies/box/box_small.png | 0 content/bn/case-studies/box/box_small.svg | 0 content/bn/case-studies/box/index.html | 100 +++++++++++++++ content/bn/case-studies/box/video.png | 0 .../case-studies/buffer/buffer_featured.png | 0 .../case-studies/buffer/buffer_featured.svg | 0 .../bn/case-studies/buffer/buffer_logo.png | 0 content/bn/case-studies/buffer/index.html | 83 +++++++++++++ .../capital-one/capitalone_featured_logo.png | 0 .../capital-one/capitalone_featured_logo.svg | 0 .../bn/case-studies/capital-one/index.html | 62 ++++++++++ .../case-studies/cern/cern_featured_logo.png | 0 content/bn/case-studies/cern/cern_logo.svg | 0 content/bn/case-studies/cern/index.html | 81 +++++++++++++ .../chinaunicom/chinaunicom_featured_logo.png | 0 .../chinaunicom/chinaunicom_featured_logo.svg | 0 .../bn/case-studies/chinaunicom/index.html | 77 ++++++++++++ .../city-of-montreal_featured_logo.png | 0 .../city-of-montreal_featured_logo.svg | 0 .../case-studies/city-of-montreal/index.html | 81 +++++++++++++ .../crowdfire/crowdfire_featured_logo.png | 0 .../crowdfire/crowdfire_featured_logo.svg | 0 content/bn/case-studies/crowdfire/index.html | 85 +++++++++++++ .../daocloud/daocloud_featured_logo.png | 0 .../daocloud/daocloud_featured_logo.svg | 0 content/bn/case-studies/daocloud/index.html | 114 ++++++++++++++++++ .../denso/denso_featured_logo.svg | 0 content/bn/case-studies/denso/index.html | 82 +++++++++++++ .../case-studies/golfnow/golfnow_featured.png | 0 .../case-studies/golfnow/golfnow_featured.svg | 0 .../bn/case-studies/golfnow/golfnow_logo.png | 0 content/bn/case-studies/golfnow/index.html | 89 ++++++++++++++ .../haufegroup/haufegroup_featured.png | 0 .../haufegroup/haufegroup_featured.svg | 0 .../haufegroup/haufegroup_logo.png | 0 content/bn/case-studies/haufegroup/index.html | 85 +++++++++++++ .../case-studies/huawei/huawei_featured.png | 0 .../case-studies/huawei/huawei_featured.svg | 0 .../bn/case-studies/huawei/huawei_logo.png | 0 content/bn/case-studies/huawei/index.html | 73 +++++++++++ .../bn/case-studies/ibm/ibm_featured_logo.png | 0 .../bn/case-studies/ibm/ibm_featured_logo.svg | 0 content/bn/case-studies/ibm/index.html | 80 ++++++++++++ content/bn/case-studies/ing/index.html | 78 ++++++++++++ .../bn/case-studies/ing/ing_featured_logo.png | 0 .../bn/case-studies/ing/ing_featured_logo.svg | 0 content/bn/case-studies/jd-com/index.html | 79 ++++++++++++ .../jd-com/jd-com_featured_logo.png | 0 .../jd-com/jd-com_featured_logo.svg | 0 content/bn/case-studies/naic/index.html | 87 +++++++++++++ .../case-studies/naic/naic_featured_logo.png | 0 .../case-studies/naic/naic_featured_logo.svg | 0 content/bn/case-studies/nav/index.html | 81 +++++++++++++ .../bn/case-studies/nav/nav_featured_logo.png | 0 .../bn/case-studies/nav/nav_featured_logo.svg | 0 .../nerdalize/nerdalize_featured_logo.png | 0 .../nerdalize/nerdalize_featured_logo.svg | 0 content/bn/case-studies/netease/index.html | 76 ++++++++++++ .../netease/netease_featured_logo.png | 0 .../netease/netease_featured_logo.svg | 0 .../bn/case-studies/newyorktimes/index.html | 73 +++++++++++ .../newyorktimes/newyorktimes_featured.png | 0 .../newyorktimes/newyorktimes_featured.svg | 0 .../newyorktimes/newyorktimes_logo.png | 0 content/bn/case-studies/nokia/index.html | 77 ++++++++++++ .../nokia/nokia_featured_logo.png | 0 .../nokia/nokia_featured_logo.svg | 0 content/bn/case-studies/nordstrom/index.html | 75 ++++++++++++ .../nordstrom/nordstrom_featured_logo.png | 0 .../nordstrom/nordstrom_featured_logo.svg | 0 .../northwestern_featured_logo.png | 0 .../northwestern_featured_logo.svg | 69 +++++++++++ content/bn/case-studies/ocado/index.html | 83 +++++++++++++ .../ocado/ocado_featured_logo.png | 0 .../ocado/ocado_featured_logo.svg | 0 content/bn/case-studies/openAI/index.html | 69 +++++++++++ .../case-studies/openAI/openai_featured.png | 0 .../case-studies/openAI/openai_featured.svg | 0 .../bn/case-studies/openAI/openai_logo.png | 0 content/bn/case-studies/peardeck/index.html | 87 +++++++++++++ .../peardeck/peardeck_featured.png | 0 .../peardeck/peardeck_featured.svg | 0 .../case-studies/peardeck/peardeck_logo.png | 0 content/bn/case-studies/pearson/index.html | 83 +++++++++++++ .../case-studies/pearson/pearson_featured.png | 0 .../case-studies/pearson/pearson_featured.svg | 0 .../bn/case-studies/pearson/pearson_logo.png | 0 content/bn/case-studies/pingcap/index.html | 79 ++++++++++++ .../pingcap/pingcap_featured_logo.png | 0 .../pingcap/pingcap_featured_logo.svg | 0 content/bn/case-studies/pinterest/index.html | 84 +++++++++++++ .../pinterest/pinterest_feature.png | 0 .../pinterest/pinterest_feature.svg | 0 .../case-studies/pinterest/pinterest_logo.png | 0 content/bn/case-studies/prowise/index.html | 83 +++++++++++++ .../prowise/prowise_featured_logo.png | 0 .../prowise/prowise_featured_logo.svg | 0 content/bn/case-studies/ricardo-ch/index.html | 79 ++++++++++++ .../ricardo-ch/ricardo-ch_featured_logo.png | 0 .../ricardo-ch/ricardo-ch_featured_logo.svg | 0 content/bn/case-studies/slamtec/index.html | 71 +++++++++++ .../slamtec/slamtec_featured_logo.png | 0 .../slamtec/slamtec_featured_logo.svg | 0 content/bn/case-studies/slingtv/index.html | 79 ++++++++++++ .../slingtv/slingtv_featured_logo.png | 0 .../slingtv/slingtv_featured_logo.svg | 0 content/bn/case-studies/sos/index.html | 83 +++++++++++++ .../bn/case-studies/sos/sos_featured_logo.png | 0 .../bn/case-studies/sos/sos_featured_logo.svg | 0 content/bn/case-studies/spotify/index.html | 79 ++++++++++++ .../case-studies/spotify/spotify_featured.svg | 0 .../spotify/spotify_featured_logo.png | 0 .../bn/case-studies/squarespace/index.html | 71 +++++++++++ .../squarespace/squarespace_featured_logo.png | 0 .../squarespace/squarespace_featured_logo.svg | 0 content/bn/case-studies/thredup/index.html | 77 ++++++++++++ .../thredup/thredup_featured_logo.png | 0 .../thredup/thredup_featured_logo.svg | 0 content/bn/case-studies/vsco/index.html | 79 ++++++++++++ .../case-studies/vsco/vsco_featured_logo.png | 0 .../case-studies/vsco/vsco_featured_logo.svg | 0 content/bn/case-studies/wikimedia/index.html | 66 ++++++++++ .../wikimedia/wikimedia_featured.png | 0 .../wikimedia/wikimedia_featured.svg | 0 .../case-studies/wikimedia/wikimedia_logo.png | 0 content/bn/case-studies/wink/index.html | 87 +++++++++++++ .../bn/case-studies/wink/wink_featured.png | 0 .../bn/case-studies/wink/wink_featured.svg | 0 content/bn/case-studies/wink/wink_logo.png | 0 content/bn/case-studies/woorank/index.html | 79 ++++++++++++ .../woorank/woorank_featured_logo.png | 0 .../woorank/woorank_featured_logo.svg | 0 content/bn/case-studies/workiva/index.html | 93 ++++++++++++++ .../workiva/workiva_featured_logo.png | 0 .../workiva/workiva_featured_logo.svg | 0 .../bn/case-studies/yahoo-japan/index.html | 4 + .../yahoo-japan/yahooJapan_logo.png | 0 .../yahoo-japan/yahooJapan_logo.svg | 0 .../ygrene/ygrene_featured_logo.png | 0 .../ygrene/ygrene_featured_logo.svg | 82 +++++++++++++ 174 files changed, 3805 insertions(+) create mode 100644 content/bn/case-studies/adform/adform_featured_logo.png create mode 100644 content/bn/case-studies/adform/adform_featured_logo.svg create mode 100644 content/bn/case-studies/adidas/adidas-featured.svg create mode 100644 content/bn/case-studies/amadeus/amadeus_featured.png create mode 100644 content/bn/case-studies/amadeus/amadeus_featured.svg create mode 100644 content/bn/case-studies/amadeus/amadeus_logo.png create mode 100644 content/bn/case-studies/ancestry/ancestry_featured.png create mode 100644 content/bn/case-studies/ancestry/ancestry_featured.svg create mode 100644 content/bn/case-studies/ancestry/ancestry_logo.png create mode 100644 content/bn/case-studies/ant-financial/ant-financial_featured_logo.png create mode 100644 content/bn/case-studies/ant-financial/ant-financial_featured_logo.svg create mode 100644 content/bn/case-studies/appdirect/appdirect_featured_logo.png create mode 100644 content/bn/case-studies/appdirect/appdirect_featured_logo.svg create mode 100644 content/bn/case-studies/babylon/babylon_featured_logo.png create mode 100644 content/bn/case-studies/babylon/babylon_featured_logo.svg create mode 100644 content/bn/case-studies/blablacar/blablacar_featured.svg create mode 100644 content/bn/case-studies/blablacar/blablacar_logo.png create mode 100644 content/bn/case-studies/blackrock/blackrock_featured.png create mode 100644 content/bn/case-studies/blackrock/blackrock_featured.svg create mode 100644 content/bn/case-studies/blackrock/blackrock_logo.png create mode 100644 content/bn/case-studies/booking-com/booking.com_featured_logo.png create mode 100644 content/bn/case-studies/booking-com/booking.com_featured_logo.svg create mode 100644 content/bn/case-studies/booz-allen/booz-allen-featured-logo.png create mode 100644 content/bn/case-studies/booz-allen/booz-allen-featured-logo.svg create mode 100644 content/bn/case-studies/bose/bose_featured_logo.png create mode 100644 content/bn/case-studies/bose/bose_featured_logo.svg create mode 100644 content/bn/case-studies/box/box_featured.png create mode 100644 content/bn/case-studies/box/box_featured.svg create mode 100644 content/bn/case-studies/box/box_logo.png create mode 100644 content/bn/case-studies/box/box_small.png create mode 100644 content/bn/case-studies/box/box_small.svg create mode 100644 content/bn/case-studies/box/video.png create mode 100644 content/bn/case-studies/buffer/buffer_featured.png create mode 100644 content/bn/case-studies/buffer/buffer_featured.svg create mode 100644 content/bn/case-studies/buffer/buffer_logo.png create mode 100644 content/bn/case-studies/capital-one/capitalone_featured_logo.png create mode 100644 content/bn/case-studies/capital-one/capitalone_featured_logo.svg create mode 100644 content/bn/case-studies/cern/cern_featured_logo.png create mode 100644 content/bn/case-studies/cern/cern_logo.svg create mode 100644 content/bn/case-studies/chinaunicom/chinaunicom_featured_logo.png create mode 100644 content/bn/case-studies/chinaunicom/chinaunicom_featured_logo.svg create mode 100644 content/bn/case-studies/city-of-montreal/city-of-montreal_featured_logo.png create mode 100644 content/bn/case-studies/city-of-montreal/city-of-montreal_featured_logo.svg create mode 100644 content/bn/case-studies/crowdfire/crowdfire_featured_logo.png create mode 100644 content/bn/case-studies/crowdfire/crowdfire_featured_logo.svg create mode 100644 content/bn/case-studies/daocloud/daocloud_featured_logo.png create mode 100644 content/bn/case-studies/daocloud/daocloud_featured_logo.svg create mode 100644 content/bn/case-studies/denso/denso_featured_logo.svg create mode 100644 content/bn/case-studies/golfnow/golfnow_featured.png create mode 100644 content/bn/case-studies/golfnow/golfnow_featured.svg create mode 100644 content/bn/case-studies/golfnow/golfnow_logo.png create mode 100644 content/bn/case-studies/haufegroup/haufegroup_featured.png create mode 100644 content/bn/case-studies/haufegroup/haufegroup_featured.svg create mode 100644 content/bn/case-studies/haufegroup/haufegroup_logo.png create mode 100644 content/bn/case-studies/huawei/huawei_featured.png create mode 100644 content/bn/case-studies/huawei/huawei_featured.svg create mode 100644 content/bn/case-studies/huawei/huawei_logo.png create mode 100644 content/bn/case-studies/ibm/ibm_featured_logo.png create mode 100644 content/bn/case-studies/ibm/ibm_featured_logo.svg create mode 100644 content/bn/case-studies/ing/ing_featured_logo.png create mode 100644 content/bn/case-studies/ing/ing_featured_logo.svg create mode 100644 content/bn/case-studies/jd-com/jd-com_featured_logo.png create mode 100644 content/bn/case-studies/jd-com/jd-com_featured_logo.svg create mode 100644 content/bn/case-studies/naic/naic_featured_logo.png create mode 100644 content/bn/case-studies/naic/naic_featured_logo.svg create mode 100644 content/bn/case-studies/nav/nav_featured_logo.png create mode 100644 content/bn/case-studies/nav/nav_featured_logo.svg create mode 100644 content/bn/case-studies/nerdalize/nerdalize_featured_logo.png create mode 100644 content/bn/case-studies/nerdalize/nerdalize_featured_logo.svg create mode 100644 content/bn/case-studies/netease/netease_featured_logo.png create mode 100644 content/bn/case-studies/netease/netease_featured_logo.svg create mode 100644 content/bn/case-studies/newyorktimes/newyorktimes_featured.png create mode 100644 content/bn/case-studies/newyorktimes/newyorktimes_featured.svg create mode 100644 content/bn/case-studies/newyorktimes/newyorktimes_logo.png create mode 100644 content/bn/case-studies/nokia/nokia_featured_logo.png create mode 100644 content/bn/case-studies/nokia/nokia_featured_logo.svg create mode 100644 content/bn/case-studies/nordstrom/nordstrom_featured_logo.png create mode 100644 content/bn/case-studies/nordstrom/nordstrom_featured_logo.svg create mode 100644 content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.png create mode 100644 content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.svg create mode 100644 content/bn/case-studies/ocado/ocado_featured_logo.png create mode 100644 content/bn/case-studies/ocado/ocado_featured_logo.svg create mode 100644 content/bn/case-studies/openAI/openai_featured.png create mode 100644 content/bn/case-studies/openAI/openai_featured.svg create mode 100644 content/bn/case-studies/openAI/openai_logo.png create mode 100644 content/bn/case-studies/peardeck/peardeck_featured.png create mode 100644 content/bn/case-studies/peardeck/peardeck_featured.svg create mode 100644 content/bn/case-studies/peardeck/peardeck_logo.png create mode 100644 content/bn/case-studies/pearson/pearson_featured.png create mode 100644 content/bn/case-studies/pearson/pearson_featured.svg create mode 100644 content/bn/case-studies/pearson/pearson_logo.png create mode 100644 content/bn/case-studies/pingcap/pingcap_featured_logo.png create mode 100644 content/bn/case-studies/pingcap/pingcap_featured_logo.svg create mode 100644 content/bn/case-studies/pinterest/pinterest_feature.png create mode 100644 content/bn/case-studies/pinterest/pinterest_feature.svg create mode 100644 content/bn/case-studies/pinterest/pinterest_logo.png create mode 100644 content/bn/case-studies/prowise/prowise_featured_logo.png create mode 100644 content/bn/case-studies/prowise/prowise_featured_logo.svg create mode 100644 content/bn/case-studies/ricardo-ch/ricardo-ch_featured_logo.png create mode 100644 content/bn/case-studies/ricardo-ch/ricardo-ch_featured_logo.svg create mode 100644 content/bn/case-studies/slamtec/slamtec_featured_logo.png create mode 100644 content/bn/case-studies/slamtec/slamtec_featured_logo.svg create mode 100644 content/bn/case-studies/slingtv/slingtv_featured_logo.png create mode 100644 content/bn/case-studies/slingtv/slingtv_featured_logo.svg create mode 100644 content/bn/case-studies/sos/sos_featured_logo.png create mode 100644 content/bn/case-studies/sos/sos_featured_logo.svg create mode 100644 content/bn/case-studies/spotify/spotify_featured.svg create mode 100644 content/bn/case-studies/spotify/spotify_featured_logo.png create mode 100644 content/bn/case-studies/squarespace/squarespace_featured_logo.png create mode 100644 content/bn/case-studies/squarespace/squarespace_featured_logo.svg create mode 100644 content/bn/case-studies/thredup/thredup_featured_logo.png create mode 100644 content/bn/case-studies/thredup/thredup_featured_logo.svg create mode 100644 content/bn/case-studies/vsco/vsco_featured_logo.png create mode 100644 content/bn/case-studies/vsco/vsco_featured_logo.svg create mode 100644 content/bn/case-studies/wikimedia/wikimedia_featured.png create mode 100644 content/bn/case-studies/wikimedia/wikimedia_featured.svg create mode 100644 content/bn/case-studies/wikimedia/wikimedia_logo.png create mode 100644 content/bn/case-studies/wink/wink_featured.png create mode 100644 content/bn/case-studies/wink/wink_featured.svg create mode 100644 content/bn/case-studies/wink/wink_logo.png create mode 100644 content/bn/case-studies/woorank/woorank_featured_logo.png create mode 100644 content/bn/case-studies/woorank/woorank_featured_logo.svg create mode 100644 content/bn/case-studies/workiva/workiva_featured_logo.png create mode 100644 content/bn/case-studies/workiva/workiva_featured_logo.svg create mode 100644 content/bn/case-studies/yahoo-japan/yahooJapan_logo.png create mode 100644 content/bn/case-studies/yahoo-japan/yahooJapan_logo.svg create mode 100644 content/bn/case-studies/ygrene/ygrene_featured_logo.png create mode 100644 content/bn/case-studies/ygrene/ygrene_featured_logo.svg diff --git a/content/bn/case-studies/adform/adform_featured_logo.png b/content/bn/case-studies/adform/adform_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/adform/adform_featured_logo.svg b/content/bn/case-studies/adform/adform_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/adidas/adidas-featured.svg b/content/bn/case-studies/adidas/adidas-featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/amadeus/amadeus_featured.png b/content/bn/case-studies/amadeus/amadeus_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/amadeus/amadeus_featured.svg b/content/bn/case-studies/amadeus/amadeus_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/amadeus/amadeus_logo.png b/content/bn/case-studies/amadeus/amadeus_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ancestry/ancestry_featured.png b/content/bn/case-studies/ancestry/ancestry_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ancestry/ancestry_featured.svg b/content/bn/case-studies/ancestry/ancestry_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ancestry/ancestry_logo.png b/content/bn/case-studies/ancestry/ancestry_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ant-financial/ant-financial_featured_logo.png b/content/bn/case-studies/ant-financial/ant-financial_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ant-financial/ant-financial_featured_logo.svg b/content/bn/case-studies/ant-financial/ant-financial_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/appdirect/appdirect_featured_logo.png b/content/bn/case-studies/appdirect/appdirect_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/appdirect/appdirect_featured_logo.svg b/content/bn/case-studies/appdirect/appdirect_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/babylon/babylon_featured_logo.png b/content/bn/case-studies/babylon/babylon_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/babylon/babylon_featured_logo.svg b/content/bn/case-studies/babylon/babylon_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/blablacar/blablacar_featured.svg b/content/bn/case-studies/blablacar/blablacar_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/blablacar/blablacar_logo.png b/content/bn/case-studies/blablacar/blablacar_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/blablacar/index.html b/content/bn/case-studies/blablacar/index.html index e69de29bb2..ab3a011e52 100644 --- a/content/bn/case-studies/blablacar/index.html +++ b/content/bn/case-studies/blablacar/index.html @@ -0,0 +1,85 @@ +--- +title: BlaBlaCar Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/blablacar/banner1.jpg +heading_title_logo: /images/blablacar_logo.png +subheading: > + Turning to Containerization to Support Millions of Rideshares +case_study_details: + - Company: BlaBlaCar + - Location: Paris, France + - Industry: Ridesharing Company +--- + +

Challenge

+ +

The world's largest long-distance carpooling community, BlaBlaCar, connects 40 million members across 22 countries. The company has been experiencing exponential growth since 2012 and needed its infrastructure to keep up. "When you're thinking about doubling the number of servers, you start thinking, 'What should I do to be more efficient?'" says Simon Lallemand, Infrastructure Engineer at BlaBlaCar. "The answer is not to hire more and more people just to deal with the servers and installation." The team knew they had to scale the platform, but wanted to stay on their own bare metal servers.

+ +

Solution

+ +

Opting not to shift to cloud virtualization or use a private cloud on their own servers, the BlaBlaCar team became early adopters of containerization, using the CoreOs runtime rkt, initially deployed using fleet cluster manager. Last year, the company switched to Kubernetes orchestration, and now also uses Prometheus for monitoring.

+ +

Impact

+ +

"Before using containers, it would take sometimes a day, sometimes two, just to create a new service," says Lallemand. "With all the tooling that we made around the containers, copying a new service now is a matter of minutes. It's really a huge gain. We are better at capacity planning in our data center because we have fewer constraints due to this abstraction between the services and the hardware we run on. For the developers, it also means they can focus only on the features that they're developing, and not on the infrastructure."

+ +{{< case-studies/quote author="Simon Lallemand, Infrastructure Engineer at BlaBlaCar" >}} +"When you're switching to this cloud-native model and running everything in containers, you have to make sure that at any moment you can reboot without any downtime and without losing traffic. [With Kubernetes] our infrastructure is much more resilient and we have better availability than before." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +For the 40 million users of BlaBlaCar, it's easy to find strangers headed in the same direction to share rides and costs. You can even choose how much "bla bla" chatter you want from a long-distance ride mate. +{{< /case-studies/lead >}} + +

Behind the scenes, though, the infrastructure was falling woefully behind the rider community's exponential growth. Founded in 2006, the company hit its current stride around 2012. "Our infrastructure was very traditional," says Infrastructure Engineer Simon Lallemand, who began working at the company in 2014. "In the beginning, it was a bit chaotic because we had to [grow] fast. But then comes the time when you have to design things to make it manageable."

+ +

By 2015, the company had about 50 bare metal servers. The team was using a MySQL database and PHP, but, Lallemand says, "it was a very static way." They also utilized the configuration management system, Chef, but had little automation in its process. "When you're thinking about doubling the number of servers, you start thinking, 'What should I do to be more efficient?'" says Lallemand. "The answer is not to hire more and more people just to deal with the servers and installation."

+ +

Instead, BlaBlaCar began its cloud-native journey but wasn't sure which route to take. "We could either decide to go into cloud virtualization or even use a private cloud on our own servers," says Lallemand. "But going into the cloud meant we had to make a lot of changes in our application work, and we were just not ready to make the switch from on premise to the cloud." They wanted to keep the great performance they got on bare metal, so they didn't want to go to virtualization on premise.

+ +

The solution: containerization. This was early 2015 and containers were still relatively new. "It was a bold move at the time," says Lallemand. "We decided that the next servers that we would buy in the new data center would all be the same model, so we could outsource the maintenance of the servers. And we decided to go with containers and with CoreOS Container Linux as an abstraction for this hardware. It seemed future-proof to go with containers because we could see what companies were already doing with containers."

+ +{{< case-studies/quote image="/images/case-studies/blablacar/banner3.jpg">}} +"With all the tooling that we made around the containers, copying a new service is a matter of minutes. It's a huge gain. For the developers, it means they can focus only on the features that they're developing and not on the infrastructure or the hour they would test their code, or the hour that it would get deployed." +{{< /case-studies/quote >}} + +

Next, they needed to choose a runtime for the containers, but "there were very few deployments in production at that time," says Lallemand. They experimented with Docker but decided to go with rkt. Lallemand explains that for BlaBlaCar, it was "much simpler to integrate things that are on rkt." At the time, the project was still pre-v1.0, so "we could speak with the developers of rkt and give them feedback. It was an advantage." Plus, he notes, rkt was very stable, even at this early stage.

+ +

Once those decisions were made that summer, the company came up with a plan for implementation. First, they formed a task force to create a workflow that would be tested by three of the 10 members on Lallemand's team. But they took care to run regular workshops with all 10 members to make sure everyone was on board. "When you're focused on your product sometimes you forget if it's really user friendly, whether other people can manage to create containers too," Lallemand says. "So we did a lot of iterations to find a good workflow."

+ +

After establishing the workflow, Lallemand says with a smile that "we had this strange idea that we should try the most difficult thing first. Because if it works, it will work for everything." So the first project the team decided to containerize was the database. "Nobody did that at the time, and there were really no existing tools for what we wanted to do, including building container images," he says. So the team created their own tools, such as dgr, which builds container images so that the whole team has a common framework to build on the same images with the same standards. They also revamped the service-discovery tools Nerve and Synapse; their versions, Go-Nerve and Go-Synapse, were written in Go and built to be more efficient and include new features. All of these tools were open-sourced.

+ +

At the same time, the company was working to migrate its entire platform to containers with a deadline set for Christmas 2015. With all the work being done in parallel, BlaBlaCar was able to get about 80 percent of its production into containers by its deadline with live traffic running on containers during December. (It's now at 100 percent.) "It's a really busy time for traffic," says Lallemand. "We knew that by using those new servers with containers, it would help us handle the traffic."

+ +

In the middle of that peak season for carpooling, everything worked well. "The biggest impact that we had was for the deployment of new services," says Lallemand. "Before using containers, we had to first deploy a new server and create configurations with Chef. It would take sometimes a day, sometimes two, just to create a new service. And with all the tooling that we made around the containers, copying a new service is a matter of minutes. So it's really a huge gain. For the developers, it means they can focus only on the features that they're developing and not on the infrastructure or the hour they would test their code, or the hour that it would get deployed."

+ +{{< case-studies/quote image="/images/case-studies/blablacar/banner4.jpg" >}} +"We realized that there was a really strong community around it [Kubernetes], which meant we would not have to maintain a lot of tools of our own," says Lallemand. "It was better if we could contribute to some bigger project like Kubernetes." +{{< /case-studies/quote >}} + +

In order to meet their self-imposed deadline, one of the decisions they made was to not do any "orchestration magic" for containers in the first production alignment. Instead, they used the basic fleet tool from CoreOS to deploy their containers. (They did build a tool called GGN, which they've open-sourced, to make it more manageable for their system engineers to use.)

+ +

Still, the team knew that they'd want more orchestration. "Our tool was doing a pretty good job, but at some point you want to give more autonomy to the developer team," Lallemand says. "We also realized that we don't want to be the single point of contact for developers when they want to launch new services." By the summer of 2016, they found their answer in Kubernetes, which had just begun supporting rkt implementation.

+ +

After discussing their needs with their contacts at CoreOS and Google, they were convinced that Kubernetes would work for BlaBlaCar. "We realized that there was a really strong community around it, which meant we would not have to maintain a lot of tools of our own," says Lallemand. "It was better if we could contribute to some bigger project like Kubernetes." They also started using Prometheus, as they were looking for "service-oriented monitoring that could be updated nightly." Production on Kubernetes began in December 2016. "We like to do crazy stuff around Christmas," he adds with a laugh.

+ +

BlaBlaCar now has about 3,000 pods, with 1200 of them running on Kubernetes. Lallemand leads a "foundations team" of 25 members who take care of the networks, databases and systems for about 100 developers. There have been some challenges getting to this point. "The rkt implementation is still not 100 percent finished," Lallemand points out. "It's really good, but there are some features still missing. We have questions about how we do things with stateful services, like databases. We know how we will be migrating some of the services; some of the others are a bit more complicated to deal with. But the Kubernetes community is making a lot of progress on that part."

+ +

The team is particularly happy that they're now able to plan capacity better in the company's data center. "We have fewer constraints since we have this abstraction between the services and the hardware we run on," says Lallemand. "If we lose a server because there's a hardware problem on it, we just move the containers onto another server. It's much more efficient. We do that by just changing a line in the configuration file. And with Kubernetes, it should be automatic, so we would have nothing to do."

+ +{{< case-studies/quote >}} +"If we lose a server because there's a hardware problem on it, we just move the containers onto another server. It's much more efficient. We do that by just changing a line in the configuration file. With Kubernetes, it should be automatic, so we would have nothing to do." +{{< /case-studies/quote >}} + +

And these advances ultimately trickle down to BlaBlaCar's users. "We have improved availability overall on our website," says Lallemand. "When you're switching to this cloud-native model with running everything in containers, you have to make sure that you can at any moment reboot a server or a data container without any downtime, without losing traffic. So now our infrastructure is much more resilient and we have better availability than before."

+ +

Within BlaBlaCar's technology department, the cloud-native journey has created some profound changes. Lallemand thinks that the regular meetings during the conception stage and the training sessions during implementation helped. "After that everybody took part in the migration process," he says. "Then we split the organization into different 'tribes'—teams that gather developers, product managers, data analysts, all the different jobs, to work on a specific part of the product. Before, they were organized by function. The idea is to give all these tribes access to the infrastructure directly in a self-service way without having to ask. These people are really autonomous. They have responsibility of that part of the product, and they can make decisions faster."

+ +

This DevOps transformation turned out to be a positive one for the company's staffers. "The team was very excited about the DevOps transformation because it was new, and we were working to make things more reliable, more future-proof," says Lallemand. "We like doing things that very few people are doing, other than the internet giants."

+ +

With these changes already making an impact, BlaBlaCar is looking to split up more and more of its application into services. "I don't say microservices because they're not so micro," Lallemand says. "If we can split the responsibilities between the development teams, it would be easier to manage and more reliable, because we can easily add and remove services if one fails. You can handle it easily, instead of adding a big monolith that we still have."

+ +

When Lallemand speaks to other European companies curious about what BlaBlaCar has done with its infrastructure, he tells them to come along for the ride. "I tell them that it's such a pleasure to deal with the infrastructure that we have today compared to what we had before," he says. "They just need to keep in mind their real motive, whether it's flexibility in development or reliability or so on, and then go step by step towards reaching those objectives. That's what we've done. It's important not to do technology for the sake of technology. Do it for a purpose. Our focus was on helping the developers."

\ No newline at end of file diff --git a/content/bn/case-studies/blackrock/blackrock_featured.png b/content/bn/case-studies/blackrock/blackrock_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/blackrock/blackrock_featured.svg b/content/bn/case-studies/blackrock/blackrock_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/blackrock/blackrock_logo.png b/content/bn/case-studies/blackrock/blackrock_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/blackrock/index.html b/content/bn/case-studies/blackrock/index.html index e69de29bb2..50cc5ebc97 100644 --- a/content/bn/case-studies/blackrock/index.html +++ b/content/bn/case-studies/blackrock/index.html @@ -0,0 +1,83 @@ +--- +title: BlackRock Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/blackrock/banner1.jpg +heading_title_logo: /images/blackrock_logo.png +subheading: > + Rolling Out Kubernetes in Production in 100 Days +case_study_details: + - Company: BlackRock + - Location: New York, NY + - Industry: Financial Services +--- + +

Challenge

+ +

The world's largest asset manager, BlackRock operates a very controlled static deployment scheme, which has allowed for scalability over the years. But in their data science division, there was a need for more dynamic access to resources. "We want to be able to give every investor access to data science, meaning Python notebooks, or even something much more advanced, like a MapReduce engine based on Spark," says Michael Francis, a Managing Director in BlackRock's Product Group, which runs the company's investment management platform. "Managing complex Python installations on users' desktops is really hard because everyone ends up with slightly different environments. We have existing environments that do these things, but we needed to make it real, expansive and scalable. Being able to spin that up on demand, tear it down, make that much more dynamic, became a critical thought process for us. It's not so much that we had to solve our main core production problem, it's how do we extend that? How do we evolve?"

+ +

Solution

+ +

Drawing from what they learned during a pilot done last year using Docker environments, Francis put together a cross-sectional team of 20 to build an investor research web app using Kubernetes with the goal of getting it into production within one quarter.

+ +

Impact

+ +

"Our goal was: How do you give people tools rapidly without having to install them on their desktop?" says Francis. And the team hit the goal within 100 days. Francis is pleased with the results and says, "We're going to use this infrastructure for lots of other application workloads as time goes on. It's not just data science; it's this style of application that needs the dynamism. But I think we're 6-12 months away from making a [large scale] decision. We need to gain experience of running the system in production, we need to understand failure modes and how best to manage operational issues. What's interesting is that just having this technology there is changing the way our developers are starting to think about their future development."

+ +{{< case-studies/quote author="Michael Francis, Managing Director, BlackRock">}} +"My message to other enterprises like us is you can actually integrate Kubernetes into an existing, well-orchestrated machinery. You don't have to throw out everything you do. And using Kubernetes made a complex problem significantly easier." +{{< /case-studies/quote >}} + +

One of the management objectives for BlackRock's Product Group employees in 2017 was to "build cool stuff." Led by Managing Director Michael Francis, a cross-sectional group of 20 did just that: They rolled out a full production Kubernetes environment and released a new investor research web app on it. In 100 days.

+ +

For a company that's the world's largest asset manager, "just equipment procurement can take 100 days sometimes, let alone from inception to delivery," says Karl Wieman, a Senior System Administrator. "It was an aggressive schedule. But it moved the dial." In fact, the project achieved two goals: It solved a business problem (creating the needed web app) as well as provided real-world, in-production experience with Kubernetes, a cloud-native technology that the company was eager to explore. "It's not so much that we had to solve our main core production problem, it's how do we extend that? How do we evolve?" says Francis. The ultimate success of this project, beyond delivering the app, lies in the fact that "we've managed to integrate a radically new thought process into a controlled infrastructure that we didn't want to change."

+ +

After all, in its three decades of existence, BlackRock has "a very well-established environment for managing our compute resources," says Francis. "We manage large cluster processes on machines, so we do a lot of orchestration and management for our main production processes in a way that's very cloudish in concept. We're able to manage them in a very controlled, static deployment scheme, and that has given us a huge amount of scalability."

+ +

Though that works well for the core production, the company has found that some data science workloads require more dynamic access to resources. "It's a very bursty process," says Francis, who is head of data for the company's Aladdin investment management platform division.

+ +

Aladdin, which connects the people, information and technology needed for money management in real time, is used internally and is also sold as a platform to other asset managers and insurance companies. "We want to be able to give every investor access to data science, meaning Python notebooks, or even something much more advanced, like a MapReduce engine based on Spark," says Francis. But "managing complex Python installations on users' desktops is really hard because everyone ends up with slightly different environments. Docker allows us to flatten that environment."

+ +{{< case-studies/quote image="/images/case-studies/blackrock/banner3.jpg">}} +"We manage large cluster processes on machines, so we do a lot of orchestration and management for our main production processes in a way that's very cloudish in concept. We're able to manage them in a very controlled, static deployment scheme, and that has given us a huge amount of scalability." +{{< /case-studies/quote >}} + +

Still, challenges remain. "If you have a shared cluster, you get this storming herd problem where everyone wants to do the same thing at the same time," says Francis. "You could put limits on it, but you'd have to build an infrastructure to define limits for our processes, and the Python notebooks weren't really designed for that. We have existing environments that do these things, but we needed to make it real, expansive, and scalable. Being able to spin that up on demand, tear it down, and make that much more dynamic, became a critical thought process for us."

+ +

Made up of managers from technology, infrastructure, production operations, development and information security, Francis's team was able to look at the problem holistically and come up with a solution that made sense for BlackRock. "Our initial straw man was that we were going to build everything using Ansible and run it all using some completely different distributed environment," says Francis. "That would have been absolutely the wrong thing to do. Had we gone off on our own as the dev team and developed this solution, it would have been a very different product. And it would have been very expensive. We would not have gone down the route of running under our existing orchestration system. Because we don't understand it. These guys [in operations and infrastructure] understand it. Having the multidisciplinary team allowed us to get to the right solutions and that actually meant we didn't build anywhere near the amount we thought we were going to end up building."

+ +

In search of a solution in which they could manage usage on a user-by-user level, Francis's team gravitated to Red Hat's OpenShift Kubernetes offering. The company had already experimented with other cloud-native environments, but the team liked that Kubernetes was open source, and "we felt the winds were blowing in the direction of Kubernetes long term," says Francis. "Typically we make technology choices that we believe are going to be here in 5-10 years' time, in some form. And right now, in this space, Kubernetes feels like the one that's going to be there." Adds Uri Morris, Vice President of Production Operations: "When you see that the non-Google committers to Kubernetes overtook the Google committers, that's an indicator of the momentum."

+ +

Once that decision was made, the major challenge was figuring out how to make Kubernetes work within BlackRock's existing framework. "It's about understanding how we can operate, manage and support a platform like this, in addition to tacking it onto our existing technology platform," says Project Manager Michael Maskallis. "All the controls we have in place, the change management process, the software development lifecycle, onboarding processes we go through—how can we do all these things?"

+ +

The first (anticipated) speed bump was working around issues behind BlackRock's corporate firewalls. "One of our challenges is there are no firewalls in most open source software," says Francis. "So almost all install scripts fail in some bizarre way, and pulling down packages doesn't necessarily work." The team ran into these types of problems using Minikube and did a few small pushes back to the open source project.

+ +{{< case-studies/quote image="/images/case-studies/blackrock/banner4.jpg">}} +"Typically we make technology choices that we believe are going to be here in 5-10 years' time, in some form. And right now, in this space, Kubernetes feels like the one that's going to be there." +{{< /case-studies/quote >}} + +

There were also questions about service discovery. "You can think of Aladdin as a cloud of services with APIs between them that allows us to build applications rapidly," says Francis. "It's all on a proprietary message bus, which gives us all sorts of advantages but at the same time, how does that play in a third party [platform]?"

+ +

Another issue they had to navigate was that in BlackRock's existing system, the messaging protocol has different instances in the different development, test and production environments. While Kubernetes enables a more DevOps-style model, it didn't make sense for BlackRock. "I think what we are very proud of is that the ability for us to push into production is still incredibly rapid in this [new] infrastructure, but we have the control points in place, and we didn't have to disrupt everything," says Francis. "A lot of the cost of this development was thinking how best to leverage our internal tools. So it was less costly than we actually thought it was going to be."

+ +

The project leveraged tools associated with the messaging bus, for example. "The way that the Kubernetes cluster will talk to our internal messaging platform is through a gateway program, and this gateway program already has built-in checks and throttles," says Morris. "We can use them to control and potentially throttle the requests coming in from Kubernetes's very elastic infrastructure to the production infrastructure. We'll continue to go in that direction. It enables us to scale as we need to from the operational perspective."

+ +

The solution also had to be complementary with BlackRock's centralized operational support team structure. "The core infrastructure components of Kubernetes are hooked into our existing orchestration framework, which means that anyone in our support team has both control and visibility to the cluster using the existing operational tools," Morris explains. "That means that I don't need to hire more people."

+ +

With those points established, the team created a procedure for the project: "We rolled this out first to a development environment, then moved on to a testing environment and then eventually to two production environments, in that sequential order," says Maskallis. "That drove a lot of our learning curve. We have all these moving parts, the software components on the infrastructure side, the software components with Kubernetes directly, the interconnectivity with the rest of the environment that we operate here at BlackRock, and how we connect all these pieces. If we came across issues, we fixed them, and then moved on to the different environments to replicate that until we eventually ended up in our production environment where this particular cluster is supposed to live."

+ +

The team had weekly one-hour working sessions with all the members (who are located around the world) participating, and smaller breakout or deep-dive meetings focusing on specific technical details. Possible solutions would be reported back to the group and debated the following week. "I think what made it a successful experiment was people had to work to learn, and they shared their experiences with others," says Vice President and Software Developer Fouad Semaan. Then, Francis says, "We gave our engineers the space to do what they're good at. This hasn't been top-down."

+ +{{< case-studies/quote >}} +"The core infrastructure components of Kubernetes are hooked into our existing orchestration framework, which means that anyone in our support team has both control and visibility to the cluster using the existing operational tools. That means that I don't need to hire more people." +{{< /case-studies/quote >}} + +

They were led by one key axiom: To stay focused and avoid scope creep. This meant that they wouldn't use features that weren't in the core of Kubernetes and Docker. But if there was a real need, they'd build the features themselves. Luckily, Francis says, "Because of the rapidity of the development, a lot of things we thought we would have to build ourselves have been rolled into the core product. [The package manager Helm is one example]. People have similar problems."

+ +

By the end of the 100 days, the app was up and running for internal BlackRock users. The initial capacity of 30 users was hit within hours, and quickly increased to 150. "People were immediately all over it," says Francis. In the next phase of this project, they are planning to scale up the cluster to have more capacity.

+ +

Even more importantly, they now have in-production experience with Kubernetes that they can continue to build on—and a complete framework for rolling out new applications. "We're going to use this infrastructure for lots of other application workloads as time goes on. It's not just data science; it's this style of application that needs the dynamism," says Francis. "Is it the right place to move our core production processes onto? It might be. We're not at a point where we can say yes or no, but we felt that having real production experience with something like Kubernetes at some form and scale would allow us to understand that. I think we're 6-12 months away from making a [large scale] decision. We need to gain experience of running the system in production, we need to understand failure modes and how best to manage operational issues."

+ +

For other big companies considering a project like this, Francis says commitment and dedication are key: "We got the signoff from [senior management] from day one, with the commitment that we were able to get the right people. If I had to isolate what makes something complex like this succeed, I would say senior hands-on people who can actually drive it make a huge difference." With that in place, he adds, "My message to other enterprises like us is you can actually integrate Kubernetes into an existing, well-orchestrated machinery. You don't have to throw out everything you do. And using Kubernetes made a complex problem significantly easier."

\ No newline at end of file diff --git a/content/bn/case-studies/booking-com/booking.com_featured_logo.png b/content/bn/case-studies/booking-com/booking.com_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/booking-com/booking.com_featured_logo.svg b/content/bn/case-studies/booking-com/booking.com_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/booking-com/index.html b/content/bn/case-studies/booking-com/index.html index e69de29bb2..5278cd0bab 100644 --- a/content/bn/case-studies/booking-com/index.html +++ b/content/bn/case-studies/booking-com/index.html @@ -0,0 +1,86 @@ +--- +title: Booking.com Case Study +linkTitle: Booking.com +case_study_styles: true +cid: caseStudies +logo: booking.com_featured_logo.png +featured: true +weight: 3 +quote: > + We realized that we needed to learn Kubernetes better in order to fully use the potential of it. At that point, we made the shift to build our own Kubernetes platform. + +new_case_study_styles: true +heading_background: /images/case-studies/booking/banner1.jpg +heading_title_text: Booking.com +use_gradient_overlay: true +subheading: > + After Learning the Ropes with a Kubernetes Distribution, Booking.com Built a Platform of Its Own +case_study_details: + - Company: Booking.com + - Location: Netherlands + - Industry: Travel +--- + +

Challenge

+ +

In 2016, Booking.com migrated to an OpenShift platform, which gave product developers faster access to infrastructure. But because Kubernetes was abstracted away from the developers, the infrastructure team became a "knowledge bottleneck" when challenges arose. Trying to scale that support wasn't sustainable.

+ +

Solution

+ +

After a year operating OpenShift, the platform team decided to build its own vanilla Kubernetes platform—and ask developers to learn some Kubernetes in order to use it. "This is not a magical platform," says Ben Tyler, Principal Developer, B Platform Track. "We're not claiming that you can just use it with your eyes closed. Developers need to do some learning, and we're going to do everything we can to make sure they have access to that knowledge."

+ +

Impact

+ +

Despite the learning curve, there's been a great uptick in adoption of the new Kubernetes platform. Before containers, creating a new service could take a couple of days if the developers understood Puppet, or weeks if they didn't. On the new platform, it can take as few as 10 minutes. About 500 new services were built on the platform in the first 8 months.

+ +{{< case-studies/quote + image="/images/case-studies/booking/banner2.jpg" + author="BEN TYLER, PRINCIPAL DEVELOPER, B PLATFORM TRACK AT BOOKING.COM" +>}} +"As our users learn Kubernetes and become more sophisticated Kubernetes users, they put pressure on us to provide a better, more native Kubernetes experience, which is great. It's a super healthy dynamic." +{{< /case-studies/quote >}} + +​{{< case-studies/lead >}} +Booking.com has a long history with Kubernetes: In 2015, a team at the travel platform prototyped a container platform based on Mesos and Marathon. +{{< /case-studies/lead >}} + +

Impressed by what the technology offered, but in need of enterprise features at its scale—the site handles more than 1.5 million room-night reservations a day on average—the team decided to adopt an OpenShift platform.

+ +

This platform, which was wrapped in a Heroku-style, high-level CLI interface, "was definitely popular with our product developers," says Ben Tyler, Principal Developer, B Platform Track. "We gave them faster access to infrastructure."

+ +

But, he adds, "anytime something went slightly off the rails, developers didn't have any of the knowledge required to support themselves."

+ +

And after a year of operating this platform, the infrastructure team found that it had become "a knowledge bottleneck," he says. "Most of the developers who used it did not know it was Kubernetes underneath. An application failure and a platform failure both looked like failures of that Heroku-style tool."

+ +

Scaling the necessary support did not seem feasible or sustainable, so the platform team needed a new solution. The understanding of Kubernetes that they had gained operating the OpenShift platform gave them confidence to build a vanilla Kubernetes platform of their own and customize it to suit the company's needs.

+ +{{< case-studies/quote author="EDUARD IACOBOAIA, SENIOR SYSTEM ADMINISTRATOR, B PLATFORM TRACK AT BOOKING.COM" >}} +"For entering the landscape, OpenShift was definitely very helpful. It shows you what the technology can do, and it makes it easy for you to use it. After we spent some time on it, we realized that we needed to learn Kubernetes better in order to fully use the potential of it. At that point, we made the shift to build our own Kubernetes platform. We definitely benefit in the long term for taking that step and investing the time in gaining that knowledge." +{{< /case-studies/quote >}} + +

"For entering the landscape, OpenShift was definitely very helpful," says Eduard Iacoboaia, Senior System Administrator, B Platform Track. "It shows you what the technology can do, and it makes it easy for you to use it. After we spent some time on it, we realized that we needed to learn Kubernetes better in order to fully use the potential of it. At that point, we made the shift to build our own Kubernetes platform. We definitely benefit in the long term for taking that step and investing the time in gaining that knowledge."

+ +

Iacoboaia's team had customized a lot of OpenShift tools to make them work at Booking.com, and "those integrations points were kind of fragile," he says. "We spent much more time understanding all the components of Kubernetes, how they work, how they interact with each other." That research led the team to switch from OpenShift's built-in Ansible playbooks to Puppet deployments, which are used for the rest of Booking's infrastructure. The control plane was also moved from inside the cluster onto bare metal, as the company runs tens of thousands of bare-metal servers and a large infrastructure for running applications on bare metal. (Booking runs Kubernetes in multiple clusters in multiple data centers across the various regions where it has compute.) "We decided to keep it as simple as possible and to also use the tools that we know best," says Iacoboaia.

+ +

The other big change was that product engineers would have to learn Kubernetes in order to onboard. "This is not a magical platform," says Tyler. "We're not claiming that you can just use it with your eyes closed. Developers need to do some learning, and we're going to do everything we can to make sure they have access to that knowledge." That includes trainings, blog posts, videos, and Udemy courses.

+ +

Despite the learning curve, there's been a great uptick in adoption of the new Kubernetes platform. "I think the reason we've been able to strike this bargain successfully is that we're not asking them to learn a proprietary app system," says Tyler. "We're asking them to learn something that's open source, where the knowledge is transferable. They're investing in their own careers by learning Kubernetes."

+ +

One clear sign that this strategy has been a success is that in the support channel, when users have questions, other product engineers are jumping in to respond. "I haven't seen that kind of community engagement around a particular platform product internally before," says Tyler. "It helps a lot that it's visibly an ecosystem standard outside of the company, so people feel value in investing in that knowledge and sharing it with others, which is really, really powerful."

+ +{{< case-studies/quote + image="/images/case-studies/booking/banner3.jpg" + author="BEN TYLER, PRINCIPAL DEVELOPER, B PLATFORM TRACK AT BOOKING.COM" +>}} +"We have a tutorial. You follow the tutorial. Your code is running. Then, it's business-logic time. The time to gain access to resources is decreased enormously." +{{< /case-studies/quote >}} + +

There's other quantifiable evidence too: Before containers, creating a new service could take a couple of days if the developers understood Puppet, or weeks if they didn't. On the new platform, it takes 10 minutes. "We have a tutorial. You follow the tutorial. Your code is running. Then, it's business-logic time," says Tyler. "The time to gain access to resources is decreased enormously." About 500 new services were built in the first 8 months on the platform, with hundreds of releases per day.

+ +

The platform offers different "layers of contracts, so to speak," says Tyler. "At the very base, it's just Kubernetes. If you're a pro Kubernetes user, here's a Kubernetes API, just like you get from GKE or AKS. We're trying to be a provider on that same level. But our whole job inside the company is to be a bigger value add than just vanilla infrastructure, so we provide a set of base images for our main stacks, Perl and Java."

+ +

And "as our users learn Kubernetes and become more sophisticated Kubernetes users, they put pressure on us to provide a better more native Kubernetes experience, which is great," says Tyler. "It's a super healthy dynamic."

+ +

The platform also includes other CNCF technologies, such as Envoy, Helm, and Prometheus. Most of the critical service traffic for Booking.com is routed through Envoy, and Prometheus is used primarily to monitor infrastructure components. Helm is consumed as a packaging standard. The team also developed and open sourced Shipper, an extension for Kubernetes to add more complex rollout strategies and multi-cluster orchestration.

+ +

To be sure, there have been internal discussions about the wisdom of building a Kubernetes platform from the ground up. "This is not really our core competency—Kubernetes and travel, they're kind of far apart, right?" says Tyler. "But we've made a couple of bets on CNCF components that have worked out really well for us. Envoy and Kubernetes, in particular, have been really beneficial to our organization. We were able to customize them, either because we could look at the source code or because they had extension points, and we were able to get value out of them very quickly without having to change any paradigms internally."

\ No newline at end of file diff --git a/content/bn/case-studies/booz-allen/booz-allen-featured-logo.png b/content/bn/case-studies/booz-allen/booz-allen-featured-logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/booz-allen/booz-allen-featured-logo.svg b/content/bn/case-studies/booz-allen/booz-allen-featured-logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/booz-allen/index.html b/content/bn/case-studies/booz-allen/index.html index e69de29bb2..ae4adef42f 100644 --- a/content/bn/case-studies/booz-allen/index.html +++ b/content/bn/case-studies/booz-allen/index.html @@ -0,0 +1,80 @@ +--- +title: Booz Allen Case Study +linkTitle: Booz Allen Hamilton +case_study_styles: true +cid: caseStudies +logo: booz-allen-featured-logo.svg +featured: true +weight: 2 +quote: > + Kubernetes is a great solution for us. It allows us to rapidly iterate on our clients' demands. + +new_case_study_styles: true +heading_background: /images/case-studies/booz-allen/banner4.jpg +heading_title_text: Booz Allen Hamilton +use_gradient_overlay: true +subheading: > + How Booz Allen Hamilton Is Helping Modernize the Federal Government with Kubernetes +case_study_details: + - Company: Booz Allen Hamilton + - Location: United States + - Industry: Government +--- + +

Challenge

+ +

In 2017, Booz Allen Hamilton's Strategic Innovation Group worked with the federal government to relaunch the decade-old recreation.gov website, which provides information and real-time booking for more than 100,000 campsites and facilities on federal lands across the country. The infrastructure needed to be agile, reliable, and scalable—as well as repeatable for the other federal agencies that are among Booz Allen Hamilton's customers.

+ +

Solution

+ +

"The only way that we thought we could be successful with this problem across all the different agencies is to create a microservice architecture and containers, so that we could be very dynamic and very agile to any given agency for whatever requirements that they may have," says Booz Allen Hamilton Senior Lead Technologist Martin Folkoff. To meet those requirements, Folkoff's team looked to Kubernetes for orchestration.

+ +

Impact

+ +

With the recreation.gov Kubernetes platform, changes can be implemented in about 30 minutes, compared to the multiple hours or even days legacy government applications require to review the code, get approval, and deploy the fix. Recreation.gov deploys to production on average 10 times a day. With monitoring, security, and logging built in, developers can create and publish new services to production within a week. Additionally, Folkoff says, "supporting the large, existing monoliths in the government is extremely expensive," and migrating into a more modern platform has resulted in perhaps 50% cost savings.

+ +{{< case-studies/quote + image="/images/case-studies/booz-allen/banner2.jpg" + author="JOSH BOYD, CHIEF TECHNOLOGIST AT BOOZ ALLEN HAMILTON" +>}} +"When there's a regulatory change in an agency, or a legislative change in Congress, or an executive order that changes the way you do business, how do I deploy that and get that out to the people who need it rapidly? At the end of the day, that's the problem we're trying to help the government solve with tools like Kubernetes." +{{< /case-studies/quote >}} +​ +​{{< case-studies/lead >}} +The White House launched an IT modernization effort in 2017, and in addition to improving cybersecurity and shifting to the public cloud and a consolidated IT model, "the federal government is looking to provide a better experience to citizens in every way that we interact with the government through every channel," says Booz Allen Hamilton Senior Lead Technologist Martin Folkoff. +{{< /case-studies/lead >}} + +

To that end, Folkoff's Strategic Innovation Group worked with the federal government last year to relaunch the decade-old recreation.gov website, which provides information and real-time booking for more than 100,000 campsites and facilities on federal lands across the country.

+ +

The infrastructure needed to be agile, reliable, and scalable—as well as repeatable for the other federal agencies that are among Booz Allen Hamilton's customers. "The only way that we thought we could be successful with this problem across all the different agencies is to create a microservice architecture, so that we could be very dynamic and very agile to any given agency for whatever requirements that they may have," says Folkoff.

+ +{{< case-studies/quote author="MARTIN FOLKOFF, SENIOR LEAD TECHNOLOGIST AT BOOZ ALLEN HAMILTON" >}} +"With CNCF, there's a lot of focus on scale, and so there's a lot of comfort knowing that as the project grows, we're going to be comfortable using that tool set." +{{< /case-studies/quote >}} + +

Booz Allen Hamilton, which has provided consulting services to the federal government for more than a century, introduced microservices, Docker containers, and AWS to its federal agency clients about five years ago. The next logical step was Kubernetes for orchestration. "Knowing that we had to be really agile and really reliable and scalable, we felt that the only technology that we know that can enable those kinds of things are the ones the CNCF provides," Folkoff says. "One of the things that is always important for the government is to make sure that the things that we build really endure. Using technology that is supported across multiple different companies and has strong governance gives people a lot of confidence."

+ +

Kubernetes was also aligned with the government's open source and IT modernization initiatives, so there has been an uptick in its usage at federal agencies over the past two years. "Now that Kubernetes is becoming offered as a service by the cloud providers like AWS and Microsoft, we're starting to see even more interest," says Chief Technologist Josh Boyd. Adds Folkoff: "With CNCF, there's a lot of focus on scale, and so there's a lot of comfort knowing that as the project grows, we're going to be comfortable using that tool set."

+ +

The greenfield recreation.gov project allowed the team to build a new Kubernetes-enabled site running on AWS, and the migration lasted only a week, when the old site didn't take bookings. "For the actual transition, we just swapped a DNS server, and it only took about 35 seconds between the old site being down and our new site being up and available," Folkoff adds.

+​ +{{< case-studies/quote + image="/images/case-studies/booz-allen/banner1.png" + author="MARTIN FOLKOFF, SENIOR LEAD TECHNOLOGIST AT BOOZ ALLEN HAMILTON" +>}} +"Kubernetes alone enables a dramatic reduction in cost as resources are prioritized to the day's event" +{{< /case-studies/quote >}} + +

In addition to its work with the Department of Interior for recreation.gov, Booz Allen Hamilton has brought Kubernetes to various Defense, Intelligence, and civilian agencies. Says Boyd: "When there's a regulatory change in an agency, or a legislative change in Congress, or an executive order that changes the way you do business, how do I deploy that and get that out to the people who need it rapidly? At the end of the day, that's the problem we're trying to help the government solve with tools like Kubernetes."

+ +

For recreation.gov, the impact was clear and immediate. With the Kubernetes platform, Folkoff says, "if a new requirement for a permit comes out, we have the ability to design and develop and implement that completely independently of reserving a campsite. It provides a much better experience to users." Today, changes can be implemented in about 30 minutes, compared to the multiple hours or even days legacy government applications require to review the code, get approval, and deploy the fix. Recreation.gov deploys to production on average 10 times a day.

+ +

Developer velocity has been improved. "When I want to do monitoring or security or logging, I don't have to do anything to my services or my application to enable that anymore," says Boyd. "I get all of this magic just by being on the Kubernetes platform." With all of those things built in, developers can create and publish new services to production within one week.

+ +

Additionally, Folkoff says, "supporting the large, existing monoliths in the government is extremely expensive," and migrating into a more modern platform has resulted in perhaps 50% cost savings. "Kubernetes alone enables a dramatic reduction in cost as resources are prioritized to the day's event," he says. "For example, during a popular campsite release, camping-related services are scaled out while permit services are scaled down."

+ +

So far, "Kubernetes is a great solution for us," says Folkoff. "It allows us to rapidly iterate on our clients' demands." Looking ahead, the team sees further adoption of the Kubernetes platform across federal agencies. Says Boyd: "You get the ability for the rapid delivery of business value for your customers. You now have observability into everything that you're doing. You don't have these onesies and twosies unicorn servers anymore. Now everything that you deploy is deployed in the same way, it's all instrumented the same way, and it's all built and deployed the same way through our CI/CD processes."

+ +

They also see a push toward re-platforming. "There's still a lot of legacy workloads out there," says Boyd. "We've got the new challenges of greenfield development and integration with legacy systems, but also that brown field of 'Hey, how do I take this legacy monolith and get it onto a platform where now it's instrumented with all the magic of the Kubernetes platform without having to do a whole lot to my application?' I think re-platforming is a pretty big use case for the government right now."

+ +

And given the success that they've had with Kubernetes so far, Boyd says, "I think at this point that technology is becoming pretty easy to sell." Adds Folkoff: "People are really excited about being able to deploy, scale, be reliable, and do cheaper maintenance of all of this."

\ No newline at end of file diff --git a/content/bn/case-studies/bose/bose_featured_logo.png b/content/bn/case-studies/bose/bose_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/bose/bose_featured_logo.svg b/content/bn/case-studies/bose/bose_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/bose/index.html b/content/bn/case-studies/bose/index.html index e69de29bb2..c8e0661664 100644 --- a/content/bn/case-studies/bose/index.html +++ b/content/bn/case-studies/bose/index.html @@ -0,0 +1,87 @@ +--- +title: Bose Case Study +linkTitle: Bose +case_study_styles: true +cid: caseStudies +logo: bose_featured_logo.png +featured: false +weight: 2 +quote: > + The CNCF Landscape quickly explains what's going on in all the different areas from storage to cloud providers to automation and so forth. This is our shopping cart to build a cloud infrastructure. We can go choose from the different aisles. + +new_case_study_styles: true +heading_background: /images/case-studies/bose/banner1.jpg +heading_title_logo: /images/bose_logo.png +subheading: > + Bose: Supporting Rapid Development for Millions of IoT Products With Kubernetes +case_study_details: + - Company: Bose Corporation + - Location: Framingham, Massachusetts + - Industry: Consumer Electronics +--- + +

Challenge

+ +

A household name in high-quality audio equipment, Bose has offered connected products for more than five years, and as that demand grew, the infrastructure had to change to support it. "We needed to provide a mechanism for developers to rapidly prototype and deploy services all the way to production pretty fast," says Lead Cloud Engineer Josh West. In 2016, the company decided to start building a platform from scratch. The primary goal: "To be one to two steps ahead of the different product groups so that we are never scrambling to catch up with their scale," says Cloud Architecture Manager Dylan O'Mahony.

+ +

Solution

+ +

From the beginning, the team knew it wanted a microservices architecture. After evaluating and prototyping a couple of orchestration solutions, the team decided to adopt Kubernetes for its scaled IoT Platform-as-a-Service running on AWS. The platform, which also incorporated Prometheus monitoring, launched in production in 2017, serving over 3 million connected products from the get-go. Bose has since adopted a number of other CNCF technologies, including Fluentd, CoreDNS, Jaeger, and OpenTracing.

+ +

Impact

+ +

With about 100 engineers onboarded, the platform is now enabling 30,000 non-production deployments across dozens of microservices per year. In 2018, there were 1250+ production deployments. Just one production cluster holds 1,800 namespaces and 340 worker nodes. "We had a brand new service taken from concept through coding and deployment all the way to production, including hardening, security testing and so forth, in less than two and a half weeks," says O'Mahony.

+ +{{< case-studies/quote author="Josh West, Lead Cloud Engineer, Bose" >}} +"At Bose we're building an IoT platform that has enabled our physical products. If it weren't for Kubernetes and the rest of the CNCF projects being free open source software with such a strong community, we would never have achieved scale, or even gotten to launch on schedule." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +A household name in high-quality audio equipment, Bose has offered connected products for more than five years, and as that demand grew, the infrastructure had to change to support it. +{{< /case-studies/lead >}} + +

"We needed to provide a mechanism for developers to rapidly prototype and deploy services all the way to production pretty fast," says Lead Cloud Engineer Josh West. "There were a lot of cloud capabilities we wanted to provide to support our audio equipment and experiences."

+ +

In 2016, the company decided to start building an IoT platform from scratch. The primary goal: "To be one to two steps ahead of the different product groups so that we are never scrambling to catch up with their scale," says Cloud Architecture Manager Dylan O'Mahony. "If they release a new connected product, we want to be already well ahead of being able to handle whatever scale that they're going to throw at us."

+ +

From the beginning, the team knew it wanted a microservices architecture and platform as a service. After evaluating and prototyping orchestration solutions, including Mesos and Docker Swarm, the team decided to adopt Kubernetes for its platform running on AWS. Kubernetes was still in 1.5, but already the technology could do much of what the team wanted and needed for the present and the future. For West, that meant having storage and network handled. O'Mahony points to Kubernetes' portability in case Bose decides to go multi-cloud.

+ +

"Bose is a company that looks out for the long term," says West. "Going with a quick commercial off-the-shelf solution might've worked for that point in time, but it would not have carried us forward, which is what we needed from Kubernetes and the CNCF."

+ +{{< case-studies/quote + image="/images/case-studies/bose/banner3.jpg" + author="Dylan O'Mahony, Cloud Architecture Manager, Bose" +>}} +"Everybody on the team thinks in terms of automation, leaning out the processes, getting things done as quickly as possible. When you step back and look at what it means for a 50-plus-year-old speaker company to have that sort of culture, it really is quite incredible, and I think the tools that we use and the foundation that we've built with them is a huge piece of that." +{{< /case-studies/quote >}} + +

The team spent time working on choosing tooling to make the experience easier for developers. "Our developers interact with tools provided by our Ops team, and the Ops team run all of their tooling on top of Kubernetes," says O'Mahony. "We try not to make direct Kubernetes access the only way. In fact, ideally, our developers wouldn't even need to know that they're running on Kubernetes."

+ +

The platform, which also incorporated Prometheus monitoring from the beginning, backdoored its way into production in 2017, serving over 3 million connected products from the get-go. "Even though the speakers and the products that we were designing this platform for were still quite a ways away from being launched, we did have some connected speakers on the market," says O'Mahony. "We basically started to point certain features of those speakers and the apps that go with those speakers to this platform."

+ +

Today, just one of Bose's production clusters holds 1,800 namespaces/discrete services and 340 nodes. With about 100 engineers now onboarded, the platform infrastructure is now enabling 30,000 non-production deployments across dozens of microservices per year. In 2018, there were 1250+ production deployments.. It's a staggering improvement over some of Bose's previous deployment processes, which supported far fewer deployments and services.

+ +{{< case-studies/quote + image="/images/case-studies/bose/banner4.jpg" + author="Josh West, Lead Cloud Engineer, Bose" +>}} +"The CNCF Landscape quickly explains what's going on in all the different areas from storage to cloud providers to automation and so forth. This is our shopping cart to build a cloud infrastructure. We can go choose from the different aisles." +{{< /case-studies/quote >}} + +

"We had a brand new service deployed from concept through coding and deployment all the way to production, including hardening, security testing and so forth, in less than two and a half weeks," says O'Mahony. "Everybody thinks in terms of automation, leaning out the processes, getting things done as quickly as possible. When you step back and look at what it means for a 50-plus-year-old speaker company to have that sort of culture, it really is quite incredible, and I think the tools that we use and the foundation that we've built is a huge piece of that."

+ +

Many of those technologies—such as Fluentd, CoreDNS, Jaeger, and OpenTracing—come from the CNCF Landscape, which West and O'Mahony have relied upon throughout Bose's cloud native journey. "The CNCF Landscape quickly explains what's going on in all the different areas from storage to cloud providers to automation and so forth," says West. "This is our shopping cart to build a cloud infrastructure. We can go choose from the different aisles."

+ +

And, he adds, "If it weren't for Kubernetes and the rest of the CNCF projects being free open source software with such a strong community, we would never have achieved scale, or even gotten to launch on schedule."

+ +

Another benefit of going cloud native: "We are even attracting much more talent into Bose because we're so involved with the CNCF Landscape," says West. (Yes, they're hiring.) "It's just enabled so many people to do so many great things and really brought Bose into the future of cloud."

+ +{{< case-studies/quote author="Dylan O'Mahony, Cloud Architecture Manager, Bose" >}} +"We have a lot going on to support many more of our business units at Bose in addition to the consumer electronics division, which we currently do. It's only because of the cloud native landscape and the tools and the features that are available that we can provide such a fantastic cloud platform for all the developers and divisions that are trying to enable some pretty amazing experiences." +{{< /case-studies/quote >}} + +

In the coming year, the team wants to work on service mesh and serverless, as well as expansion around the world. "Getting our latency down by going multi-region is going to be a big focus for us," says O'Mahony. "In order to make sure that our customers in Japan, Australia, and everywhere else are having a good experience, we want to have points of presence closer to them. It's never been done at Bose before."

+ +

That won't stop them, because the team is all about lofty goals. "We want to get to billions of connected products!" says West. "We have a lot going on to support many more of our business units at Bose in addition to the consumer electronics division, which we currently do. It's only because of the cloud native landscape and the tools and the features that are available that we can provide such a fantastic cloud platform for all the developers and divisions that are trying to enable some pretty amazing experiences."

+ +

In fact, given the scale the platform is already supporting, says O'Mahony, "doing anything other than Kubernetes, I think, would be folly at this point."

\ No newline at end of file diff --git a/content/bn/case-studies/box/box_featured.png b/content/bn/case-studies/box/box_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/box/box_featured.svg b/content/bn/case-studies/box/box_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/box/box_logo.png b/content/bn/case-studies/box/box_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/box/box_small.png b/content/bn/case-studies/box/box_small.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/box/box_small.svg b/content/bn/case-studies/box/box_small.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/box/index.html b/content/bn/case-studies/box/index.html index e69de29bb2..a1e2beefc3 100644 --- a/content/bn/case-studies/box/index.html +++ b/content/bn/case-studies/box/index.html @@ -0,0 +1,100 @@ +--- +title: Box Case Study +case_study_styles: true +cid: caseStudies +video: https://www.youtube.com/embed/of45hYbkIZs?autoplay=1 +quote: > + Kubernetes has the opportunity to be the new cloud platform. The amount of innovation that's going to come from being able to standardize on Kubernetes as a platform is incredibly exciting - more exciting than anything I've seen in the last 10 years of working on the cloud. + +new_case_study_styles: true +heading_background: /images/case-studies/box/banner1.jpg +heading_title_logo: /images/box_logo.png +subheading: > + An Early Adopter Envisions a New Cloud Platform +case_study_details: + - Company: Box + - Location: Redwood City, California + - Industry: Technology +--- + +

Challenge

+ +

Founded in 2005, the enterprise content management company allows its more than 50 million users to manage content in the cloud. Box was built primarily with bare metal inside the company's own data centers, with a monolithic PHP code base. As the company was expanding globally, it needed to focus on "how we run our workload across many different cloud infrastructures from bare metal to public cloud," says Sam Ghods, Cofounder and Services Architect of Box. "It's been a huge challenge because of different clouds, especially bare metal, have very different interfaces."

+ +

Solution

+ +

Over the past couple of years, Box has been decomposing its infrastructure into microservices, and became an early adopter of, as well as contributor to, Kubernetes container orchestration. Kubernetes, Ghods says, has allowed Box's developers to "target a universal set of concepts that are portable across all clouds."

+ +

Impact

+ +

"Before Kubernetes," Ghods says, "our infrastructure was so antiquated it was taking us more than six months to deploy a new microservice. Today, a new microservice takes less than five days to deploy. And we're working on getting it to an hour."

+ +{{< case-studies/quote author="SAM GHOUDS, CO-FOUNDER AND SERVICES ARCHITECT OF BOX" >}} +"We looked at a lot of different options, but Kubernetes really stood out....the fact that on day one it was designed to run on bare metal just as well as Google Cloud meant that we could actually migrate to it inside of our data centers, and then use those same tools and concepts to run across public cloud providers as well." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +In the summer of 2014, Box was feeling the pain of a decade's worth of hardware and software infrastructure that wasn't keeping up with the company's needs. +{{< /case-studies/lead >}} + +

A platform that allows its more than 50 million users (including governments and big businesses like General Electric) to manage and share content in the cloud, Box was originally a PHP monolith of millions of lines of code built exclusively with bare metal inside of its own data centers. It had already begun to slowly chip away at the monolith, decomposing it into microservices. And "as we've been expanding into regions around the globe, and as the public cloud wars have been heating up, we've been focusing a lot more on figuring out how we run our workload across many different environments and many different cloud infrastructure providers," says Box Cofounder and Services Architect Sam Ghods. "It's been a huge challenge thus far because of all these different providers, especially bare metal, have very different interfaces and ways in which you work with them."

+ +

Box's cloud native journey accelerated that June, when Ghods attended DockerCon. The company had come to the realization that it could no longer run its applications only off bare metal, and was researching containerizing with Docker, virtualizing with OpenStack, and supporting public cloud.

+ +

At that conference, Google announced the release of its Kubernetes container management system, and Ghods was won over. "We looked at a lot of different options, but Kubernetes really stood out, especially because of the incredibly strong team of Borg veterans and the vision of having a completely infrastructure-agnostic way of being able to run cloud software," he says, referencing Google's internal container orchestrator Borg. "The fact that on day one it was designed to run on bare metal just as well as Google Cloud meant that we could actually migrate to it inside of our data centers, and then use those same tools and concepts to run across public cloud providers as well."

+ +

Another plus: Ghods liked that Kubernetes has a universal set of API objects like pod, service, replica set and deployment object, which created a consistent surface to build tooling against. "Even PaaS layers like OpenShift or Deis that build on top of Kubernetes still treat those objects as first-class principles," he says. "We were excited about having these abstractions shared across the entire ecosystem, which would result in a lot more momentum than we saw in other potential solutions."

+ +

Box deployed Kubernetes in a cluster in a production data center just six months later. Kubernetes was then still pre-beta, on version 0.11. They started small: The very first thing Ghods's team ran on Kubernetes was a Box API checker that confirms Box is up. "That was just to write and deploy some software to get the whole pipeline functioning," he says. Next came some daemons that process jobs, which was "nice and safe because if they experienced any interruptions, we wouldn't fail synchronous incoming requests from customers."

+ +{{< case-studies/quote image="/images/case-studies/box/banner3.jpg">}} +"As we've been expanding into regions around the globe, and as the public cloud wars have been heating up, we've been focusing a lot more on figuring out how we [can have Kubernetes help] run our workload across many different environments and many different cloud infrastructure providers." +{{< /case-studies/quote >}} + +

The first live service, which the team could route to and ask for information, was launched a few months later. At that point, Ghods says, "We were comfortable with the stability of the Kubernetes cluster. We started to port some services over, then we would increase the cluster size and port a few more, and that's ended up to about 100 servers in each data center that are dedicated purely to Kubernetes. And that's going to be expanding a lot over the next 12 months, probably too many hundreds if not thousands."

+ +

While observing teams who began to use Kubernetes for their microservices, "we immediately saw an uptick in the number of microservices being released," Ghods notes. "There was clearly a pent-up demand for a better way of building software through microservices, and the increase in agility helped our developers be more productive and make better architectural choices."

+ +{{< case-studies/lead >}} +"There was clearly a pent-up demand for a better way of building software through microservices, and the increase in agility helped our developers be more productive and make better architectural choices." +{{< /case-studies/lead >}} + +

Ghods reflects that as early adopters, Box had a different journey from what companies experience now. "We were definitely lock step with waiting for certain things to stabilize or features to get released," he says. "In the early days we were doing a lot of contributions [to components such as kubectl apply] and waiting for Kubernetes to release each of them, and then we'd upgrade, contribute more, and go back and forth several times. The entire project took about 18 months from our first real deployment on Kubernetes to having general availability. If we did that exact same thing today, it would probably be no more than six."

+ +

In any case, Box didn't have to make too many modifications to Kubernetes for it to work for the company. "The vast majority of the work our team has done to implement Kubernetes at Box has been making it work inside of our existing (and often legacy) infrastructure," says Ghods, "such as upgrading our base operating system from RHEL6 to RHEL7 or integrating it into Nagios, our monitoring infrastructure. But overall Kubernetes has been remarkably flexible with fitting into many of our constraints, and we've been running it very successfully on our bare metal infrastructure."

+ +

Perhaps the bigger challenge for Box was a cultural one. "Kubernetes, and cloud native in general, represents a pretty big paradigm shift, and it's not very incremental," Ghods says. "We're essentially making this pitch that Kubernetes is going to solve everything because it does things the right way and everything is just suddenly better. But it's important to keep in mind that it's not nearly as proven as many other solutions out there. You can't say how long this or that company took to do it because there just aren't that many yet. Our team had to really fight for resources because our project was a bit of a moonshot."

+ +{{< case-studies/quote image="/images/case-studies/box/banner4.jpg">}} +"The vast majority of the work our team has done to implement Kubernetes at Box has been making it work inside of our existing [and often legacy] infrastructure....overall Kubernetes has been remarkably flexible with fitting into many of our constraints, and we've been running it very successfully on our bare metal infrastructure." +{{< /case-studies/quote >}} + +

Having learned from experience, Ghods offers these two pieces of advice for companies going through similar challenges:

+ +{{< case-studies/lead >}} +1. Deliver early and often. +{{< /case-studies/lead >}} + +

Service discovery was a huge problem for Box, and the team had to decide whether to build an interim solution or wait for Kubernetes to natively satisfy Box's unique requirements. After much debate, "we just started focusing on delivering something that works, and then dealing with potentially migrating to a more native solution later," Ghods says. "The above-all-else target for the team should always be to serve real production use cases on the infrastructure, no matter how trivial. This helps keep the momentum going both for the team itself and for the organizational perception of the project."

+ +{{< case-studies/lead >}} +2. Keep an open mind about what your company has to abstract away from developers and what it doesn't. +{{< /case-studies/lead >}} + +

Early on, the team built an abstraction on top of Docker files to help ensure that images had the right security updates. This turned out to be superfluous work, since container images are considered immutable and you can easily scan them post-build to ensure they do not contain vulnerabilities. Because managing infrastructure through containerization is such a discontinuous leap, it's better to start by interacting directly with the native tools and learning their unique advantages and caveats. An abstraction should be built only after a practical need for it arises.

+ +

In the end, the impact has been powerful. "Before Kubernetes," Ghods says, "our infrastructure was so antiquated it was taking us more than six months to deploy a new microservice. Now a new microservice takes less than five days to deploy. And we're working on getting it to an hour. Granted, much of that six months was due to how broken our systems were, but bare metal is intrinsically a difficult platform to support unless you have a system like Kubernetes to help manage it."

+ +

By Ghods's estimate, Box is still several years away from his goal of being a 90-plus percent Kubernetes shop. "We're very far along on having a mission-critical, stable Kubernetes deployment that provides a lot of value," he says. "Right now about five percent of all of our compute runs on Kubernetes, and I think in the next six months we'll likely be between 20 to 50 percent. We're working hard on enabling all stateless service use cases, and shift our focus to stateful services after that."

+ +{{< case-studies/quote >}} +"Ghods predicts that Kubernetes has the opportunity to be the new cloud platform. '...because it's a never-before-seen level of automation and intelligence surrounding infrastructure that is portable and agnostic to every way you can run your infrastructure.'" +{{< /case-studies/quote >}} + +

In fact, that's what he envisions across the industry: Ghods predicts that Kubernetes has the opportunity to be the new cloud platform. Kubernetes provides an API consistent across different cloud platforms including bare metal, and "I don't think people have seen the full potential of what's possible when you can program against one single interface," he says. "The same way AWS changed infrastructure so that you don't have to think about servers or cabinets or networking equipment anymore, Kubernetes enables you to focus exclusively on the containers that you're running, which is pretty exciting. That's the vision."

+ +

Ghods points to projects that are already in development or recently released for Kubernetes as a cloud platform: cluster federation, the Dashboard UI, and CoreOS's etcd operator. "I honestly believe it's the most exciting thing I've seen in cloud infrastructure," he says, "because it's a never-before-seen level of automation and intelligence surrounding infrastructure that is portable and agnostic to every way you can run your infrastructure."

+ +

Box, with its early decision to use bare metal, embarked on its Kubernetes journey out of necessity. But Ghods says that even if companies don't have to be agnostic about cloud providers today, Kubernetes may soon become the industry standard, as more and more tooling and extensions are built around the API.

+ +

"The same way it doesn't make sense to deviate from Linux because it's such a standard," Ghods says, "I think Kubernetes is going down the same path. It is still early days—the documentation still needs work and the user experience for writing and publishing specs to the Kubernetes clusters is still rough. When you're on the cutting edge you can expect to bleed a little. But the bottom line is, this is where the industry is going. Three to five years from now it's really going to be shocking if you run your infrastructure any other way."

\ No newline at end of file diff --git a/content/bn/case-studies/box/video.png b/content/bn/case-studies/box/video.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/buffer/buffer_featured.png b/content/bn/case-studies/buffer/buffer_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/buffer/buffer_featured.svg b/content/bn/case-studies/buffer/buffer_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/buffer/buffer_logo.png b/content/bn/case-studies/buffer/buffer_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/buffer/index.html b/content/bn/case-studies/buffer/index.html index e69de29bb2..8cc55fca92 100644 --- a/content/bn/case-studies/buffer/index.html +++ b/content/bn/case-studies/buffer/index.html @@ -0,0 +1,83 @@ +--- +title: Buffer Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/buffer/banner3.jpg +heading_title_logo: /images/buffer.png +subheading: > + Making Deployments Easy for a Small, Distributed Team +case_study_details: + - Company: Buffer + - Location: Around the World + - Industry: Social Media Technology +--- + +

Challenge

+ +

With a small but fully distributed team of 80 working across almost a dozen time zones, Buffer—which offers social media management to agencies and marketers—was looking to solve its "classic monolithic code base problem," says Architect Dan Farrelly. "We wanted to have the kind of liquid infrastructure where a developer could create an app and deploy it and scale it horizontally as necessary."

+ +

Solution

+ +

Embracing containerization, Buffer moved its infrastructure from Amazon Web Services' Elastic Beanstalk to Docker on AWS, orchestrated with Kubernetes.

+ +

Impact

+ +

The new system "leveled up our ability with deployment and rolling out new changes," says Farrelly. "Building something on your computer and knowing that it's going to work has shortened things up a lot. Our feedback cycles are a lot faster now too."

+ +{{< case-studies/quote author="DAN FARRELLY, BUFFER ARCHITECT" >}} +"It's amazing that we can use the Kubernetes solution off the shelf with our team. And it just keeps getting better. Before we even know that we need something, it's there in the next release or it's coming in the next few months." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Dan Farrelly uses a carpentry analogy to explain the problem his company, Buffer, began having as its team of developers grew over the past few years. +{{< /case-studies/lead >}} + +

"If you're building a table by yourself, it's fine," the company's architect says. "If you bring in a second person to work on the table, maybe that person can start sanding the legs while you're sanding the top. But when you bring a third or fourth person in, someone should probably work on a different table." Needing to work on more and more different tables led Buffer on a path toward microservices and containerization made possible by Kubernetes.

+ +

Since around 2012, Buffer had already been using Elastic Beanstalk, the orchestration service for deploying infrastructure offered by Amazon Web Services. "We were deploying a single monolithic PHP application, and it was the same application across five or six environments," says Farrelly. "We were very much a product-driven company. It was all about shipping new features quickly and getting things out the door, and if something was not broken, we didn't spend too much time on it. If things were getting a little bit slow, we'd maybe use a faster server or just scale up one instance, and it would be good enough. We'd move on."

+ +

But things came to a head in 2016. With the growing number of committers on staff, Farrelly and Buffer's then-CTO, Sunil Sadasivan, decided it was time to re-architect and rethink their infrastructure. "It was a classic monolithic code base problem," says Farrelly.

Some of the company's team was already successfully using Docker in their development environment, but the only application running on Docker in production was a marketing website that didn't see real user traffic. They wanted to go further with Docker, and the next step was looking at options for orchestration.

+ +{{< case-studies/quote image="/images/case-studies/buffer/banner1.jpg" >}} +And all the things Kubernetes did well suited Buffer's needs. "We wanted to have the kind of liquid infrastructure where a developer could create an app and deploy it and scale it horizontally as necessary," says Farrelly. "We quickly used some scripts to set up a couple of test clusters, we built some small proof-of-concept applications in containers, and we deployed things within an hour. We had very little experience in running containers in production. It was amazing how quickly we could get a handle on it [Kubernetes]." +{{< /case-studies/quote >}} + +

First they considered Mesosphere, DC/OS and Amazon Elastic Container Service (which their data systems team was already using for some data pipeline jobs). While they were impressed by these offerings, they ultimately went with Kubernetes. "We run on AWS still, so spinning up, creating services and creating load balancers on demand for us without having to configure them manually was a great way for our team to get into this," says Farrelly. "We didn't need to figure out how to configure this or that, especially coming from a former Elastic Beanstalk environment that gave us an automatically-configured load balancer. I really liked Kubernetes' controls of the command line. It just took care of ports. It was a lot more flexible. Kubernetes was designed for doing what it does, so it does it very well."

+ +

And all the things Kubernetes did well suited Buffer's needs. "We wanted to have the kind of liquid infrastructure where a developer could create an app and deploy it and scale it horizontally as necessary," says Farrelly. "We quickly used some scripts to set up a couple of test clusters, we built some small proof-of-concept applications in containers, and we deployed things within an hour. We had very little experience in running containers in production. It was amazing how quickly we could get a handle on it [Kubernetes]."

+ +

Above all, it provided a powerful solution for one of the company's most distinguishing characteristics: their remote team that's spread across a dozen different time zones. "The people with deep knowledge of our infrastructure live in time zones different from our peak traffic time zones, and most of our product engineers live in other places," says Farrelly. "So we really wanted something where anybody could get a grasp of the system early on and utilize it, and not have to worry that the deploy engineer is asleep. Otherwise people would sit around for 12 to 24 hours for something. It's been really cool to see people moving much faster."

+ +

With a relatively small engineering team—just 25 people, and only a handful working on infrastructure, with the majority front-end developers—Buffer needed "something robust for them to deploy whatever they wanted," says Farrelly. Before, "it was only a couple of people who knew how to set up everything in the old way. With this system, it was easy to review documentation and get something out extremely quickly. It lowers the bar for us to get everything in production. We don't have the big team to build all these tools or manage the infrastructure like other larger companies might."

+ +{{< case-studies/quote image="/images/case-studies/buffer/banner4.jpg" >}} +"In our old way of working, the feedback loop was a lot longer, and it was delicate because if you deployed something, the risk was high to potentially break something else," Farrelly says. "With the kind of deploys that we built around Kubernetes, we were able to detect bugs and fix them, and get them deployed super fast. The second someone is fixing [a bug], it's out the door." +{{< /case-studies/quote >}} + +

To help with this, Buffer developers wrote a deploy bot that wraps the Kubernetes deploy process and can be used by every team. "Before, our data analysts would update, say, a Python analysis script and have to wait for the lead on that team to click the button and deploy it," Farrelly explains. "Now our data analysts can make a change, enter a Slack command, '/deploy,' and it goes out instantly. They don't need to wait on these slow turnaround times. They don't even know where it's running; it doesn't matter."

+ +

One of the first applications the team built from scratch using Kubernetes was a new image resizing service. As a social media management tool that allows marketing teams to collaborate on posts and send updates across multiple social media profiles and networks, Buffer has to be able to resize photographs as needed to meet the varying limitations of size and format posed by different social networks. "We always had these hacked together solutions," says Farrelly.

+ +

To create this new service, one of the senior product engineers was assigned to learn Docker and Kubernetes, then build the service, test it, deploy it and monitor it—which he was able to do relatively quickly. "In our old way of working, the feedback loop was a lot longer, and it was delicate because if you deployed something, the risk was high to potentially break something else," Farrelly says. "With the kind of deploys that we built around Kubernetes, we were able to detect bugs and fix them, and get them deployed super fast. The second someone is fixing [a bug], it's out the door."

+ +

Plus, unlike with their old system, they could scale things horizontally with one command. "As we rolled it out," Farrelly says, "we could anticipate and just click a button. This allowed us to deal with the demand that our users were placing on the system and easily scale it to handle it."

+ +

Another thing they weren't able to do before was a canary deploy. This new capability "made us so much more confident in deploying big changes," says Farrelly. "Before, it took a lot of testing, which is still good, but it was also a lot of 'fingers crossed.' And this is something that gets run 800,000 times a day, the core of our business. If it doesn't work, our business doesn't work. In a Kubernetes world, I can do a canary deploy to test it for 1 percent and I can shut it down very quickly if it isn't working. This has leveled up our ability to deploy and roll out new changes quickly while reducing risk."

+ +{{< case-studies/quote >}} +"If you want to run containers in production, with nearly the power that Google uses internally, this [Kubernetes] is a great way to do that," Farrelly says. "We're a relatively small team that's actually running Kubernetes, and we've never run anything like it before. So it's more approachable than you might think. That's the one big thing that I tell people who are experimenting with it. Pick a couple of things, roll it out, kick the tires on this for a couple of months and see how much it can handle. You start learning a lot this way." +{{< /case-studies/quote >}} + +

By October 2016, 54 percent of Buffer's traffic was going through their Kubernetes cluster. "There's a lot of our legacy functionality that still runs alright, and those parts might move to Kubernetes or stay in our old setup forever," says Farrelly. But the company made the commitment at that time that going forward, "all new development, all new features, will be running on Kubernetes."

+ +

The plan for 2017 is to move all the legacy applications to a new Kubernetes cluster, and run everything they've pulled out of their old infrastructure, plus the new services they're developing in Kubernetes, on another cluster. "I want to bring all the benefits that we've seen on our early services to everyone on the team," says Farrelly.

+ +{{< case-studies/lead >}} +For Buffer's engineers, it's an exciting process. "Every time we're deploying a new service, we need to figure out: OK, what's the architecture? How do these services communicate? What's the best way to build this service?" Farrelly says. "And then we use the different features that Kubernetes has to glue all the pieces together. It's enabling us to experiment as we're learning how to design a service-oriented architecture. Before, we just wouldn't have been able to do it. This is actually giving us a blank white board so we can do whatever we want on it." +{{< /case-studies/lead >}} + +

Part of that blank slate is the flexibility that Kubernetes offers should the time come when Buffer may want or need to change its cloud. "It's cloud agnostic so maybe one day we could switch to Google or somewhere else," Farrelly says. "We're very deep in Amazon but it's nice to know we could move away if we need to."

+ +

At this point, the team at Buffer can't imagine running their infrastructure any other way—and they're happy to spread the word. "If you want to run containers in production, with nearly the power that Google uses internally, this [Kubernetes] is a great way to do that," Farrelly says. "We're a relatively small team that's actually running Kubernetes, and we've never run anything like it before. So it's more approachable than you might think. That's the one big thing that I tell people who are experimenting with it. Pick a couple of things, roll it out, kick the tires on this for a couple of months and see how much it can handle. You start learning a lot this way."

\ No newline at end of file diff --git a/content/bn/case-studies/capital-one/capitalone_featured_logo.png b/content/bn/case-studies/capital-one/capitalone_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/capital-one/capitalone_featured_logo.svg b/content/bn/case-studies/capital-one/capitalone_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/capital-one/index.html b/content/bn/case-studies/capital-one/index.html index e69de29bb2..145b1e0b04 100644 --- a/content/bn/case-studies/capital-one/index.html +++ b/content/bn/case-studies/capital-one/index.html @@ -0,0 +1,62 @@ +--- +title: Capital One Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/capitalone/banner1.jpg +heading_title_logo: /images/capitalone-logo.png +subheading: > + Supporting Fast Decisioning Applications with Kubernetes +case_study_details: + - Company: Capital One + - Location: McLean, Virginia + - Industry: Retail banking +--- + +

Challenge

+ +

The team set out to build a provisioning platform for Capital One applications deployed on AWS that use streaming, big-data decisioning, and machine learning. One of these applications handles millions of transactions a day; some deal with critical functions like fraud detection and credit decisioning. The key considerations: resilience and speed—as well as full rehydration of the cluster from base AMIs.

+ +

Solution

+ +

The decision to run Kubernetes "is very strategic for us," says John Swift, Senior Director Software Engineering. "We use Kubernetes as a substrate or an operating system, if you will. There's a degree of affinity in our product development."

+ +

Impact

+ +

"Kubernetes is a significant productivity multiplier," says Lead Software Engineer Keith Gasser, adding that to run the platform without Kubernetes would "easily see our costs triple, quadruple what they are now for the amount of pure AWS expense." Time to market has been improved as well: "Now, a team can come to us and we can have them up and running with a basic decisioning app in a fortnight, which before would have taken a whole quarter, if not longer." Deployments increased by several orders of magnitude. Plus, the rehydration/cluster-rebuild process, which took a significant part of a day to do manually, now takes a couple hours with Kubernetes automation and declarative configuration.

+ +{{< case-studies/quote author="Jamil Jadallah, Scrum Master" >}} + +
+"With the scalability, the management, the coordination, Kubernetes really empowers us and gives us more time back than we had before." +{{< /case-studies/quote >}} + +

As a top 10 U.S. retail bank, Capital One has applications that handle millions of transactions a day. Big-data decisioning—for fraud detection, credit approvals and beyond—is core to the business. To support the teams that build applications with those functions for the bank, the cloud team led by Senior Director Software Engineering John Swift embraced Kubernetes for its provisioning platform. "Kubernetes and its entire ecosystem are very strategic for us," says Swift. "We use Kubernetes as a substrate or an operating system, if you will. There's a degree of affinity in our product development."

+ +

Almost two years ago, the team embarked on this journey by first working with Docker. Then came Kubernetes. "We wanted to put streaming services into Kubernetes as one feature of the workloads for fast decisioning, and to be able to do batch alongside it," says Lead Software Engineer Keith Gasser. "Once the data is streamed and batched, there are so many tool sets in Flink that we use for decisioning. We want to provide the tools in the same ecosystem, in a consistent way, rather than have a large custom snowflake ecosystem where every tool needs its own custom deployment. Kubernetes gives us the ability to bring all of these together, so the richness of the open source and even the license community dealing with big data can be corralled."

+ +{{< case-studies/quote image="/images/case-studies/capitalone/banner3.jpg" >}} +"We want to provide the tools in the same ecosystem, in a consistent way, rather than have a large custom snowflake ecosystem where every tool needs its own custom deployment. Kubernetes gives us the ability to bring all of these together, so the richness of the open source and even the license community dealing with big data can be corralled." +{{< /case-studies/quote >}} + +

In this first year, the impact has already been great. "Time to market is really huge for us," says Gasser. "Especially with fraud, you have to be very nimble in the way you respond to threats in the marketplace—being able to add and push new rules, detect new patterns of behavior, detect anomalies in account and transaction flows." With Kubernetes, "a team can come to us and we can have them up and running with a basic decisioning app in a fortnight, which before would have taken a whole quarter, if not longer. Kubernetes is a manifold productivity multiplier."

+ +

Teams now have the tools to be autonomous in their deployments, and as a result, deployments have increased by two orders of magnitude. "And that was with just seven dedicated resources, without needing a whole group sitting there watching everything," says Scrum Master Jamil Jadallah. "That's a huge cost savings. With the scalability, the management, the coordination, Kubernetes really empowers us and gives us more time back than we had before."

+ +{{< case-studies/quote image="/images/case-studies/capitalone/banner4.jpg" >}} +With Kubernetes, "a team can come to us and we can have them up and running with a basic decisioning app in a fortnight, which before would have taken a whole quarter, if not longer. Kubernetes is a manifold productivity multiplier." +{{< /case-studies/quote >}} + +

Kubernetes has also been a great time-saver for Capital One's required period "rehydration" of clusters from base AMIs. To minimize the attack vulnerability profile for applications in the cloud, "Our entire clusters get rebuilt from scratch periodically, with new fresh instances and virtual server images that are patched with the latest and greatest security patches," says Gasser. This process used to take the better part of a day, and personnel, to do manually. It's now a quick Kubernetes job.

+ +

Savings extend to both capital and operating expenses. "It takes very little to get into Kubernetes because it's all open source," Gasser points out. "We went the DIY route for building our cluster, and we definitely like the flexibility of being able to embrace the latest from the community immediately without waiting for a downstream company to do it. There's capex related to those licenses that we don't have to pay for. Moreover, there's capex savings for us from some of the proprietary software that we get to sunset in our particular domain. So that goes onto our ledger in a positive way as well." (Some of those open source technologies include Prometheus, Fluentd, gRPC, Istio, CNI, and Envoy.)

+ +{{< case-studies/quote >}} +"If we had to do all of this without Kubernetes, on underlying cloud services, I could easily see our costs triple, quadruple what they are now for the amount of pure AWS expense. That doesn't account for personnel to deploy and maintain all the additional infrastructure." +{{< /case-studies/quote >}} + + +

And on the opex side, Gasser says, the savings are high. "We run dozens of services, we have scores of pods, many daemon sets, and since we're data-driven, we take advantage of EBS-backed volume claims for all of our stateful services. If we had to do all of this without Kubernetes, on underlying cloud services, I could easily see our costs triple, quadruple what they are now for the amount of pure AWS expense. That doesn't account for personnel to deploy and maintain all the additional infrastructure."

+ +

The team is confident that the benefits will continue to multiply—without a steep learning curve for the engineers being exposed to the new technology. "As we onboard additional tenants in this ecosystem, I think the need for folks to understand Kubernetes may not necessarily go up. In fact, I think it goes down, and that's good," says Gasser. "Because that really demonstrates the scalability of the technology. You start to reap the benefits, and they can concentrate on all the features they need to build for great decisioning in the business— fraud decisions, credit decisions—and not have to worry about, 'Is my AWS server broken? Is my pod not running?'"

\ No newline at end of file diff --git a/content/bn/case-studies/cern/cern_featured_logo.png b/content/bn/case-studies/cern/cern_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/cern/cern_logo.svg b/content/bn/case-studies/cern/cern_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/cern/index.html b/content/bn/case-studies/cern/index.html index e69de29bb2..2fdd4a27a9 100644 --- a/content/bn/case-studies/cern/index.html +++ b/content/bn/case-studies/cern/index.html @@ -0,0 +1,81 @@ +--- +title: CERN Case Study +linkTitle: cern +case_study_styles: true +cid: caseStudies +logo: cern_featured_logo.png + +new_case_study_styles: true +heading_background: /images/case-studies/cern/banner1.jpg +heading_title_text: CERN +subheading: > + CERN: Processing Petabytes of Data More Efficiently with Kubernetes +case_study_details: + - Company: CERN + - Location: Geneva, Switzerland + - Industry: Particle physics research +--- + +

Challenge

+ +

At CERN, the European Organization for Nuclear Research, physicists conduct experiments to learn about fundamental science. In its particle accelerators, "we accelerate protons to very high energy, close to the speed of light, and we make the two beams of protons collide," says CERN Software Engineer Ricardo Rocha. "The end result is a lot of data that we have to process." CERN currently stores 330 petabytes of data in its data centers, and an upgrade of its accelerators expected in the next few years will drive that number up by 10x. Additionally, the organization experiences extreme peaks in its workloads during periods prior to big conferences, and needs its infrastructure to scale to those peaks. "We want to have a more hybrid infrastructure, where we have our on premise infrastructure but can make use of public clouds temporarily when these peaks come up," says Rocha. "We've been looking to new technologies that can help improve our efficiency in our infrastructure so that we can dedicate more of our resources to the actual processing of the data."

+ +

Solution

+ +

CERN's technology team embraced containerization and cloud native practices, choosing Kubernetes for orchestration, Helm for deployment, Prometheus for monitoring, and CoreDNS for DNS resolution inside the clusters. Kubernetes federation has allowed the organization to run some production workloads both on premise and in public clouds.

+ +

Impact

+ +

"Kubernetes gives us the full automation of the application," says Rocha. "It comes with built-in monitoring and logging for all the applications and the workloads that deploy in Kubernetes. This is a massive simplification of our current deployments." The time to deploy a new cluster for a complex distributed storage system has gone from more than 3 hours to less than 15 minutes. Adding new nodes to a cluster used to take more than an hour; now it takes less than 2 minutes. The time it takes to autoscale replicas for system components has decreased from more than an hour to less than 2 minutes. Initially, virtualization gave 20% overhead, but with tuning this was reduced to ~5%. Moving to Kubernetes on bare metal would get this to 0%. Not having to host virtual machines is expected to also get 10% of memory capacity back.

+ +{{< case-studies/quote author="Ricardo Rocha, Software Engineer, CERN" >}} +"Kubernetes is something we can relate to very much because it's naturally distributed. What it gives us is a uniform API across heterogeneous resources to define our workloads. This is something we struggled with a lot in the past when we want to expand our resources outside our infrastructure." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +With a mission of researching fundamental science, and a stable of extremely large machines, the European Organization for Nuclear Research (CERN) operates at what can only be described as hyperscale. +{{< /case-studies/lead >}} + +

Experiments are conducted in particle accelerators, the biggest of which is 27 kilometers in circumference. "We accelerate protons to very high energy, to close to the speed of light, and we make the two beams of protons collide in well-defined places," says CERN Software Engineer Ricardo Rocha. "We build experiments around these places where we do the collisions. The end result is a lot of data that we have to process."

+ +

And he does mean a lot: CERN currently stores and processes 330 petabytes of data—gathered from 4,300 projects and 3,300 users—using 10,000 hypervisors and 320,000 cores in its data centers.

+ +

Over the years, the CERN technology department has built a large computing infrastructure, based on OpenStack private clouds, to help the organization's physicists analyze and treat all this data. The organization experiences extreme peaks in its workloads. "Very often, just before conferences, physicists want to do an enormous amount of extra analysis to publish their papers, and we have to scale to these peaks, which means overcommitting resources in some cases," says Rocha. "We want to have a more hybrid infrastructure, where we have our on premise infrastructure but can make use of public clouds temporarily when these peaks come up."

+ +

Additionally, few years ago, CERN announced that it would be doing a big upgrade of its accelerators, which will mean a ten-fold increase in the amount of data that can be collected. "So we've been looking to new technologies that can help improve our efficiency in our infrastructure, so that we can dedicate more of our resources to the actual processing of the data," says Rocha.

+ +{{< case-studies/quote + image="/images/case-studies/cern/banner3.jpg" + author="Ricardo Rocha, Software Engineer, CERN" +>}} +"Before, the tendency was always: 'I need this, I get a couple of developers, and I implement it.' Right now it's 'I need this, I'm sure other people also need this, so I'll go and ask around.' The CNCF is a good source because there's a very large catalog of applications available. It's very hard right now to justify developing a new product in-house. There is really no real reason to keep doing that. It's much easier for us to try it out, and if we see it's a good solution, we try to reach out to the community and start working with that community." +{{< /case-studies/quote >}} + +

Rocha's team started looking at Kubernetes and containerization in the second half of 2015. "We've been using distributed infrastructures for decades now," says Rocha. "Kubernetes is something we can relate to very much because it's naturally distributed. What it gives us is a uniform API across heterogeneous resources to define our workloads. This is something we struggled with a lot in the past when we want to expand our resources outside our infrastructure."

+ +

The team created a prototype system for users to deploy their own Kubernetes cluster in CERN's infrastructure, and spent six months validating the use cases and making sure that Kubernetes integrated with CERN's internal systems. The main use case is batch workloads, which represent more than 80% of resource usage at CERN. (One single project that does most of the physics data processing and analysis alone consumes 250,000 cores.) "This is something where the investment in simplification of the deployment, logging, and monitoring pays off very quickly," says Rocha. Other use cases include Spark-based data analysis and machine learning to improve physics analysis. "The fact that most of these technologies integrate very well with Kubernetes makes our lives easier," he adds.

+ +

The system went into production in October 2016, also using Helm for deployment, Prometheus for monitoring, and CoreDNS for DNS resolution within the cluster. "One thing that Kubernetes gives us is the full automation of the application," says Rocha. "So it comes with built-in monitoring and logging for all the applications and the workloads that deploy in Kubernetes. This is a massive simplification of our current deployments." The time to deploy a new cluster for a complex distributed storage system has gone from more than 3 hours to less than 15 minutes.

+ +

Adding new nodes to a cluster used to take more than an hour; now it takes less than 2 minutes. The time it takes to autoscale replicas for system components has decreased from more than an hour to less than 2 minutes.

+ +{{< case-studies/quote + image="/images/case-studies/cern/banner4.jpg" + author="Ricardo Rocha, Software Engineer, CERN" +>}} +"With Kubernetes, there's a well-established technology and a big community that we can contribute to. It allows us to do our physics analysis without having to focus so much on the lower level software. This is just exciting. We are looking forward to keep contributing to the community and collaborating with everyone." +{{< /case-studies/quote >}} + +

Rocha points out that the metric used in the particle accelerators may be events per second, but in reality "it's how fast and how much of the data we can process that actually counts." And efficiency has certainly been improved with Kubernetes. Initially, virtualization gave 20% overhead, but with tuning this was reduced to ~5%. Moving to Kubernetes on bare metal would get this to 0%. Not having to host virtual machines is expected to also get 10% of memory capacity back.

+ +

Kubernetes federation, which CERN has been using for a portion of its production workloads since February 2018, has allowed the organization to adopt a hybrid cloud strategy. And it was remarkably simple to do. "We had a summer intern working on federation," says Rocha. "For many years, I've been developing distributed computing software, which took like a decade and a lot of effort from a lot of people to stabilize and make sure it works. And for our intern, in a couple of days he was able to demo to me and my team that we had a cluster at CERN and a few clusters outside in public clouds that were federated together and that we could submit workloads to. This was shocking for us. It really shows the power of using this kind of well-established technologies."

+ +

With such results, adoption of Kubernetes has made rapid gains at CERN, and the team is eager to give back to the community. "If we look back into the '90s and early 2000s, there were not a lot of companies focusing on systems that have to scale to this kind of size, storing petabytes of data, analyzing petabytes of data," says Rocha. "The fact that Kubernetes is supported by such a wide community and different backgrounds, it motivates us to contribute back."

+ +{{< case-studies/quote author="Ricardo Rocha, Software Engineer, CERN" >}} +This means that the physicist can build his or her analysis and publish it in a repository, share it with colleagues, and in 10 years redo the same analysis with new data. If we looked back even 10 years, this was just a dream." +{{< /case-studies/quote >}} + +

These new technologies aren't just enabling infrastructure improvements. CERN also uses the Kubernetes-based Reana/Recast platform for reusable analysis, which is "the ability to define physics analysis as a set of workflows that are fully containerized in one single entry point," says Rocha. "This means that the physicist can build his or her analysis and publish it in a repository, share it with colleagues, and in 10 years redo the same analysis with new data. If we looked back even 10 years, this was just a dream."

+ +

All of these things have changed the culture at CERN considerably. A decade ago, "The tendency was always: 'I need this, I get a couple of developers, and I implement it,'" says Rocha. "Right now it's 'I need this, I'm sure other people also need this, so I'll go and ask around.' The CNCF is a good source because there's a very large catalog of applications available. It's very hard right now to justify developing a new product in-house. There is really no real reason to keep doing that. It's much easier for us to try it out, and if we see it's a good solution, we try to reach out to the community and start working with that community."

\ No newline at end of file diff --git a/content/bn/case-studies/chinaunicom/chinaunicom_featured_logo.png b/content/bn/case-studies/chinaunicom/chinaunicom_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/chinaunicom/chinaunicom_featured_logo.svg b/content/bn/case-studies/chinaunicom/chinaunicom_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/chinaunicom/index.html b/content/bn/case-studies/chinaunicom/index.html index e69de29bb2..ee6cfdcabd 100644 --- a/content/bn/case-studies/chinaunicom/index.html +++ b/content/bn/case-studies/chinaunicom/index.html @@ -0,0 +1,77 @@ +--- +title: China Unicom Case Study +linkTitle: chinaunicom +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/chinaunicom/banner1.jpg +heading_title_logo: /images/chinaunicom_logo.png +subheading: > + China Unicom: How China Unicom Leveraged Kubernetes to Boost Efficiency and Lower IT Costs +case_study_details: + - Company: China Unicom + - Location: Beijing, China + - Industry: Telecom +--- + +

Challenge

+ +

China Unicom is one of the top three telecom operators in China, and to serve its 300 million users, the company runs several data centers with thousands of servers in each, using Docker containerization and VMWare and OpenStack infrastructure since 2016. Unfortunately, "the resource utilization rate was relatively low," says Chengyu Zhang, Group Leader of Platform Technology R&D, "and we didn't have a cloud platform to accommodate our hundreds of applications." Formerly an entirely state-owned company, China Unicom has in recent years taken private investment from BAT (Baidu, Alibaba, Tencent) and JD.com, and is now focusing on internal development using open source technology, rather than commercial products. As such, Zhang's China Unicom Lab team began looking for open source orchestration for its cloud infrastructure.

+ +

Solution

+ +

Because of its rapid growth and mature open source community, Kubernetes was a natural choice for China Unicom. The company's Kubernetes-enabled cloud platform now hosts 50 microservices and all new development going forward. "Kubernetes has improved our experience using cloud infrastructure," says Zhang. "There is currently no alternative technology that can replace it." China Unicom also uses Istio for its microservice framework, Envoy, CoreDNS, and Fluentd.

+ +

Impact

+ +

At China Unicom, Kubernetes has improved both operational and development efficiency. Resource utilization has increased by 20-50%, lowering IT infrastructure costs, and deployment time has gone from a couple of hours to 5-10 minutes. "This is mainly because of the self-healing and scalability, so we can increase our efficiency in operation and maintenance," Zhang says. "For example, we currently have only five people maintaining our multiple systems. We could never imagine we can achieve this scalability in such a short time."

+ +{{< case-studies/quote author="Chengyu Zhang, Group Leader of Platform Technology R&D, China Unicom" >}} +"Kubernetes has improved our experience using cloud infrastructure. There is currently no alternative technology that can replace it." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +With more than 300 million users, China Unicom is one of the country's top three telecom operators. +{{< /case-studies/lead >}} + +

Behind the scenes, the company runs multiple data centers with thousands of servers in each, using Docker containerization and VMWare and OpenStack infrastructure since 2016. Unfortunately, "the resource utilization rate was relatively low," says Chengyu Zhang, Group Leader of Platform Technology R&D, "and we didn't have a cloud platform to accommodate our hundreds of applications."

+ +

Zhang's team, which is responsible for new technology, R&D and platforms, set out to find an IT management solution. Formerly an entirely state-owned company, China Unicom has in recent years taken private investment from BAT (Baidu, Alibaba, Tencent) and JD.com, and is now focusing on homegrown development using open source technology, rather than commercial products. For that reason, the team began looking for open source orchestration for its cloud infrastructure.

+ +{{< case-studies/quote + image="/images/case-studies/chinaunicom/banner3.jpg" + author="Chengyu Zhang, Group Leader of Platform Technology R&D, China Unicom" +>}} +"We could never imagine we can achieve this scalability in such a short time." +{{< /case-studies/quote >}} + +

Though China Unicom was already using Mesos for a core telecom operator system, the team felt that Kubernetes was a natural choice for the new cloud platform. "The main reason was that it has a mature community," says Zhang. "It grows very rapidly, and so we can learn a lot from others' best practices." China Unicom also uses Istio for its microservice framework, Envoy, CoreDNS, and Fluentd.

+ +

The company's Kubernetes-enabled cloud platform now hosts 50 microservices and all new development going forward. China Unicom developers can easily leverage the technology through APIs, without doing the development work themselves. The cloud platform provides 20-30 services connected to the company's data center PaaS platform, as well as supports things such as big data analysis for internal users in the branch offices across the 31 provinces in China.

+ +

"Kubernetes has improved our experience using cloud infrastructure," says Zhang. "There is currently no alternative technology that can replace it."

+ +{{< case-studies/quote + image="/images/case-studies/chinaunicom/banner4.jpg" + author="Jie Jia, Member of Platform Technology R&D, China Unicom" +>}} +"This technology is relatively complicated, but as long as developers get used to it, they can enjoy all the benefits." +{{< /case-studies/quote >}} + +

In fact, Kubernetes has boosted both operational and development efficiency at China Unicom. Resource utilization has increased by 20-50%, lowering IT infrastructure costs, and deployment time has gone from a couple of hours to 5-10 minutes. "This is mainly because of the self-healing and scalability of Kubernetes, so we can increase our efficiency in operation and maintenance," Zhang says. "For example, we currently have only five people maintaining our multiple systems."

+ +

With the wins China Unicom has experienced with Kubernetes, Zhang and his team are eager to give back to the community. That starts with participating in meetups and conferences, and offering advice to other companies that are considering a similar path. "Especially for those companies who have had traditional cloud computing system, I really recommend them to join the cloud native computing community," says Zhang.

+ +{{< case-studies/quote author="Jie Jia, Member of Platform Technology R&D, China Unicom" >}} +"Companies can use the managed services offered by companies like Rancher, because they have already customized this technology, you can easily leverage this technology." +{{< /case-studies/quote >}} + +

Platform Technology R&D team member Jie Jia adds that though "this technology is relatively complicated, as long as developers get used to it, they can enjoy all the benefits." And Zhang points out that in his own experience with virtual machine cloud, "Kubernetes and these cloud native technologies are relatively simpler."

+ +

Plus, "companies can use the managed services offered by companies like Rancher, because they have already customized this technology," says Jia. "You can easily leverage this technology."

+ +

Looking ahead, China Unicom plans to develop more applications on Kubernetes, focusing on big data and machine learning. The team is continuing to optimize the cloud platform that it built, and hopes to pass the conformance test to join CNCF's Certified Kubernetes Conformance Program. They're also hoping to someday contribute code back to the community.

+ +

If that sounds ambitious, it's because the results they've gotten from adopting Kubernetes have been beyond even their greatest expectations. Says Zhang: "We could never imagine we can achieve this scalability in such a short time."

\ No newline at end of file diff --git a/content/bn/case-studies/city-of-montreal/city-of-montreal_featured_logo.png b/content/bn/case-studies/city-of-montreal/city-of-montreal_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/city-of-montreal/city-of-montreal_featured_logo.svg b/content/bn/case-studies/city-of-montreal/city-of-montreal_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/city-of-montreal/index.html b/content/bn/case-studies/city-of-montreal/index.html index e69de29bb2..e115ef666e 100644 --- a/content/bn/case-studies/city-of-montreal/index.html +++ b/content/bn/case-studies/city-of-montreal/index.html @@ -0,0 +1,81 @@ +--- +title: City of Montreal Case Study +linkTitle: city-of-montreal +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/montreal/banner1.jpg +heading_title_logo: /images/montreal_logo.png +subheading: > + City of Montréal - How the City of Montréal Is Modernizing Its 30-Year-Old, Siloed Architecture with Kubernetes +case_study_details: + - Company: City of Montréal + - Location: Montréal, Québec, Canada + - Industry: Government +--- + +

Challenge

+ +

Like many governments, Montréal has a number of legacy systems, and "we have systems that are older than some developers working here," says the city's CTO, Jean-Martin Thibault. "We have mainframes, all flavors of Windows, various flavors of Linux, old and new Oracle systems, Sun servers, all kinds of databases. Like all big corporations, some of the most important systems, like Budget and Human Resources, were developed on mainframes in-house over the past 30 years." There are over 1,000 applications in all, and most of them were running on different ecosystems. In 2015, a new management team decided to break down those silos, and invest in IT in order to move toward a more integrated governance for the city. They needed to figure out how to modernize the architecture.

+ +

Solution

+ +

The first step was containerization. The team started with a small Docker farm with four or five servers, with Rancher for providing access to the Docker containers and their logs and Jenkins to deploy. "We based our effort on the new trends; we understood the benefits of immutability and deployments without downtime and such things," says Solutions Architect Marc Khouzam. They soon realized they needed orchestration as well, and opted for Kubernetes. Says Enterprise Architect Morgan Martinet: "Kubernetes offered concepts on how you would describe an architecture for any kind of application, and based on those concepts, deploy what's required to run the infrastructure. It was becoming a de facto standard."

+ +

Impact

+ +

The time to market has improved drastically, from many months to a few weeks. Deployments went from months to hours. "In the past, you would have to ask for virtual machines, and that alone could take weeks, easily," says Thibault. "Now you don't even have to ask for anything. You just create your project and it gets deployed." Kubernetes has also improved the efficiency of how the city uses its compute resources: "Before, the 200 application components we currently run on Kubernetes would have required hundreds of virtual machines, and now, if we're talking about a single environment of production, we are able to run them on 8 machines, counting the masters of Kubernetes," says Martinet. And it's all done with a small team of just 5 people operating the Kubernetes clusters.

+ +{{< case-studies/quote author="JEAN-MARTIN THIBAULT, CTO, CITY OF MONTRÉAL" >}} +"We realized the limitations of having a non-orchestrated Docker environment. Kubernetes came to the rescue, bringing in all these features that make it a lot easier to manage and give a lot more benefits to the users." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +The second biggest municipality in Canada, Montréal has a large number of legacy systems keeping the government running. And while they don't quite date back to the city's founding in 1642, "we have systems that are older than some developers working here," jokes the city's CTO, Jean-Martin Thibault. +{{< /case-studies/lead >}} + +

"We have mainframes, all flavors of Windows, various flavors of Linux, old and new Oracle systems, Sun servers, all kinds of databases. Some of the most important systems, like Budget and Human Resources, were developed on mainframes in-house over the past 30 years."

+ +

In recent years, that fact became a big pain point. There are over 1,000 applications in all, running on almost as many different ecosystems. In 2015, a new city management team decided to break down those silos, and invest in IT in order to move toward a more integrated governance. "The organization was siloed, so as a result the architecture was siloed," says Thibault. "Once we got integrated into one IT team, we decided to redo an overall enterprise architecture."

+ +

The first step to modernize the architecture was containerization. "We based our effort on the new trends; we understood the benefits of immutability and deployments without downtime and such things," says Solutions Architect Marc Khouzam. The team started with a small Docker farm with four or five servers, with Rancher for providing access to the Docker containers and their logs and Jenkins for deployment.

+ +{{< case-studies/quote + image="/images/case-studies/montreal/banner3.jpg" + author="MARC KHOUZAM, SOLUTIONS ARCHITECT, CITY OF MONTRÉAL" +>}} +"Getting a project running in Kubernetes is entirely dependent on how long you need to program the actual software. It's no longer dependent on deployment. Deployment is so fast that it's negligible." +{{< /case-studies/quote >}} + +

But this Docker farm setup had some limitations, including the lack of self-healing and dynamic scaling based on traffic, and the effort required to optimize server resources and scale to multiple instances of the same container. The team soon realized they needed orchestration as well. "Kubernetes came to the rescue," says Thibault, "bringing in all these features that make it a lot easier to manage and give a lot more benefits to the users."

+ +

The team had evaluated several orchestration solutions, but Kubernetes stood out because it addressed all of the pain points. (They were also inspired by Yahoo! Japan's use case, which the team members felt came close to their vision.) "Kubernetes offered concepts on how you would describe an architecture for any kind of application, and based on those concepts, deploy what's required to run the infrastructure," says Enterprise Architect Morgan Martinet. "It was becoming a de facto standard. It also promised portability across cloud providers. The choice of Kubernetes now gives us many options such as running clusters in-house or in any IaaS provider, or even using Kubernetes-as-a-service in any of the major cloud providers."

+ +

Another important factor in the decision was vendor neutrality. "As a government entity, it is essential for us to be neutral in our selection of products and providers," says Thibault. "The independence of the Cloud Native Computing Foundation from any company provides this."

+ +{{< case-studies/quote + image="/images/case-studies/montreal/banner4.jpg" + author="MORGAN MARTINET, ENTERPRISE ARCHITECT, CITY OF MONTRÉAL" +>}} +"Kubernetes has been great. It's been stable, and it provides us with elasticity, resilience, and robustness. While re-architecting for Kubernetes, we also benefited from the monitoring and logging aspects, with centralized logging, Prometheus logging, and Grafana dashboards. We have enhanced visibility of what's being deployed." +{{< /case-studies/quote >}} + +

The Kubernetes implementation began with the deployment of a small cluster using an internal Ansible playbook, which was soon replaced by the Kismatic distribution. Given the complexity they saw in operating a Kubernetes platform, they decided to provide development groups with an automated CI/CD solution based on Helm. "An integrated CI/CD solution on Kubernetes standardized how the various development teams designed and deployed their solutions, but allowed them to remain independent," says Khouzam.

+ +

During the re-architecting process, the team also added Prometheus for monitoring and alerting, Fluentd for logging, and Grafana for visualization. "We have enhanced visibility of what's being deployed," says Martinet. Adds Khouzam: "The big benefit is we can track anything, even things that don't run inside the Kubernetes cluster. It's our way to unify our monitoring effort."

+ +

All together, the cloud native solution has had a positive impact on velocity as well as administrative overhead. With standardization, code generation, automatic deployments into Kubernetes, and standardized monitoring through Prometheus, the time to market has improved drastically, from many months to a few weeks. Deployments went from months and weeks of planning down to hours. "In the past, you would have to ask for virtual machines, and that alone could take weeks to properly provision," says Thibault. Plus, for dedicated systems, experts often had to be brought in to install them with their own recipes, which could take weeks and months.

+ +

Now, says Khouzam, "we can deploy pretty much any application that's been Dockerized without any help from anybody. Getting a project running in Kubernetes is entirely dependent on how long you need to program the actual software. It's no longer dependent on deployment. Deployment is so fast that it's negligible."

+ +{{< case-studies/quote author="MORGAN MARTINET, ENTERPRISE ARCHITECT, CITY OF MONTRÉAL">}} +"We're working with the market when possible, to put pressure on our vendors to support Kubernetes, because it's a much easier solution to manage" +{{< /case-studies/quote >}} + +

Kubernetes has also improved the efficiency of how the city uses its compute resources: "Before, the 200 application components we currently run in Kubernetes would have required hundreds of virtual machines, and now, if we're talking about a single environment of production, we are able to run them on 8 machines, counting the masters of Kubernetes," says Martinet. And it's all done with a small team of just five people operating the Kubernetes clusters. Adds Martinet: "It's a dramatic improvement no matter what you measure."

+ +

So it should come as no surprise that the team's strategy going forward is to target Kubernetes as much as they can. "If something can't run inside Kubernetes, we'll wait for it," says Thibault. That means they haven't moved any of the city's Windows systems onto Kubernetes, though it's something they would like to do. "We're working with the market when possible, to put pressure on our vendors to support Kubernetes, because it's a much easier solution to manage," says Martinet.

+ +

Thibault sees a near future where 60% of the city's workloads are running on a Kubernetes platform—basically any and all of the use cases that they can get to work there. "It's so much more efficient than the way we used to do things," he says. "There's no looking back."

\ No newline at end of file diff --git a/content/bn/case-studies/crowdfire/crowdfire_featured_logo.png b/content/bn/case-studies/crowdfire/crowdfire_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/crowdfire/crowdfire_featured_logo.svg b/content/bn/case-studies/crowdfire/crowdfire_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/crowdfire/index.html b/content/bn/case-studies/crowdfire/index.html index e69de29bb2..d369be1a1a 100644 --- a/content/bn/case-studies/crowdfire/index.html +++ b/content/bn/case-studies/crowdfire/index.html @@ -0,0 +1,85 @@ +--- +title: Crowdfire Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/crowdfire/banner1.jpg +heading_title_logo: /images/crowdfire_logo.png +subheading: > + How to Keep Iterating a Fast-Growing App With a Cloud-Native Approach +case_study_details: + - Company: Crowdfire + - Location: Mumbai, India + - Industry: Social Media Software +--- + +

Challenge

+ +

Crowdfire helps content creators create their content anywhere on the Internet and publish it everywhere else in the right format. Since its launch in 2010, it has grown to 16 million users. The product began as a monolith app running on Google App Engine, and in 2015, the company began a transformation to microservices running on Amazon Web Services Elastic Beanstalk. "It was okay for our use cases initially, but as the number of services, development teams and scale increased, the deploy times, self-healing capabilities and resource utilization started to become problems for us," says Software Engineer Amanpreet Singh, who leads the infrastructure team for Crowdfire.

+ +

Solution

+ +

"We realized that we needed a more cloud-native approach to deal with these issues," says Singh. The team decided to implement a custom setup of Kubernetes based on Terraform and Ansible.

+ +

Impact

+ +

"Kubernetes has helped us reduce the deployment time from 15 minutes to less than a minute," says Singh. "Due to Kubernetes's self-healing nature, the operations team doesn't need to do any manual intervention in case of a node or pod failure." Plus, he says, "Dev-Prod parity has improved since developers can experiment with options in dev/staging clusters, and when it's finalized, they just commit the config changes in the respective code repositories. These changes automatically get replicated on the production cluster via CI/CD pipelines."

+ +{{< case-studies/quote author="Amanpreet Singh, Software Engineer at Crowdfire" >}} +"In the 15 months that we've been using Kubernetes, it has been amazing for us. It enabled us to iterate quickly, increase development speed, and continuously deliver new features and bug fixes to our users, while keeping our operational costs and infrastructure management overhead under control." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +"If you build it, they will come." +{{< /case-studies/lead >}} + +

For most content creators, only half of that movie quote may ring true. Sure, platforms like Wordpress, YouTube and Shopify have made it simple for almost anyone to start publishing new content online, but attracting an audience isn't as easy. Crowdfire "helps users publish their content to all possible places where their audience exists," says Amanpreet Singh, a Software Engineer at the company based in Mumbai, India. Crowdfire has gained more than 16 million users—from bloggers and artists to makers and small businesses—since its launch in 2010.

+ +

With that kind of growth—and a high demand from users for new features and continuous improvements—the Crowdfire team struggled to keep up behind the scenes. In 2015, they moved their monolith Java application to Amazon Web Services Elastic Beanstalk and started breaking it down into microservices.

+ +

It was a good first step, but the team soon realized they needed to go further down the cloud-native path, which would lead them to Kubernetes. "It was okay for our use cases initially, but as the number of services and development teams increased and we scaled further, deploy times, self-healing capabilities and resource utilization started to become problematic," says Singh, who leads the infrastructure team at Crowdfire. "We realized that we needed a more cloud-native approach to deal with these issues."

+ +

As he looked around for solutions, Singh had a checklist of what Crowdfire needed. "We wanted to keep some things separate so they could be shipped independent of other things; this would help remove blockers and let different teams work at their own pace," he says. "We also make a lot of data-driven decisions, so shipping a feature and its iterations quickly was a must."

+ +

Kubernetes checked all the boxes and then some. "One of the best things was the built-in service discovery," he says. "When you have a bunch of microservices that need to call each other, having internal DNS readily available and service IPs and ports automatically set as environment variables help a lot." Plus, he adds, "Kubernetes's opinionated approach made it easier to get started."

+ +{{< case-studies/quote image="/images/case-studies/crowdfire/banner3.jpg" >}} +"We realized that we needed a more cloud-native approach to deal with these issues," says Singh. The team decided to implement a custom setup of Kubernetes based on Terraform and Ansible." +{{< /case-studies/quote >}} + +

There was another compelling business reason for the cloud-native approach. "In today's world of ever-changing business requirements, using cloud native technology provides a variety of options to choose from—even the ability to run services in a hybrid cloud environment," says Singh. "Businesses can keep services in a region closest to the users, and thus benefit from high-availability and resiliency."

+ +

So in February 2016, Singh set up a test Kubernetes cluster using the kube-up scripts provided. "I explored the features and was able to deploy an application pretty easily," he says. "However, it seemed like a black box since I didn't understand the components completely, and had no idea what the kube-up script did under the hood. So when it broke, it was hard to find the issue and fix it."

+ +

To get a better understanding, Singh dove into the internals of Kubernetes, reading the docs and even some of the code. And he looked to the Kubernetes community for more insight. "I used to stay up a little late every night (a lot of users were active only when it's night here in India) and would try to answer questions on the Kubernetes community Slack from users who were getting started," he says. "I would also follow other conversations closely. I must admit I was able to avoid a lot of issues in our setup because I knew others had faced the same issues."

+ +

Based on the knowledge he gained, Singh decided to implement a custom setup of Kubernetes based on Terraform and Ansible. "I wrote Terraform to launch Kubernetes master and nodes (Auto Scaling Groups) and an Ansible playbook to install the required components," he says. (The company recently switched to using prebaked AMIs to make the node bringup faster, and is planning to change its networking layer.)

+ +{{< case-studies/quote image="/images/case-studies/crowdfire/banner4.jpg" >}} +"Kubernetes helped us reduce the deployment time from 15 minutes to less than a minute. Due to Kubernetes's self-healing nature, the operations team doesn't need to do any manual intervention in case of a node or pod failure." +{{< /case-studies/quote >}} + +

First, the team migrated a few staging services from Elastic Beanstalk to the new Kubernetes staging cluster, and then set up a production cluster a month later to deploy some services. The results were convincing. "By the end of March 2016, we established that all the new services must be deployed on Kubernetes," says Singh. "Kubernetes helped us reduce the deployment time from 15 minutes to less than a minute. Due to Kubernetes's self-healing nature, the operations team doesn't need to do any manual intervention in case of a node or pod failure." On top of that, he says, "Dev-Prod parity has improved since developers can experiment with options in dev/staging clusters, and when it's finalized, they just commit the config changes in the respective code repositories. These changes automatically get replicated on the production cluster via CI/CD pipelines. This brings more visibility into the changes being made, and keeping an audit trail."

+ +

Over the next six months, the team worked on migrating all the services from Elastic Beanstalk to Kubernetes, except for the few that were deprecated and would soon be terminated anyway. The services were moved one at a time, and their performance was monitored for two to three days each. Today, "We're completely migrated and we run all new services on Kubernetes," says Singh.

+ +

The impact has been considerable: With Kubernetes, the company has experienced a 90% cost savings on Elastic Load Balancer, which is now only used for their public, user-facing services. Their EC2 operating expenses have been decreased by as much as 50%.

+ +

All 30 engineers at Crowdfire were onboarded at once. "I gave an internal talk where I shared the basic components and demoed the usage of kubectl," says Singh. "Everyone was excited and happy about using Kubernetes. Developers have more control and visibility into their applications running in production now. Most of all, they're happy with the low deploy times and self-healing services."

+ +

And they're much more productive, too. "Where we used to do about 5 deployments per day," says Singh, "now we're doing 30+ production and 50+ staging deployments almost every day."

+ +{{< case-studies/quote >}} +The impact has been considerable: With Kubernetes, the company has experienced a 90% cost savings on Elastic Load Balancer, which is now only used for their public, user-facing services. Their EC2 operating expenses have been decreased by as much as 50%. +{{< /case-studies/quote >}} + +

Singh notes that almost all of the engineers interact with the staging cluster on a daily basis, and that has created a cultural change at Crowdfire. "Developers are more aware of the cloud infrastructure now," he says. "They've started following cloud best practices like better health checks, structured logs to stdout [standard output], and config via files or environment variables."

+ +

With Crowdfire's commitment to Kubernetes, Singh is looking to expand the company's cloud-native stack. The team already uses Prometheus for monitoring, and he says he is evaluating Linkerd and Envoy Proxy as a way to "get more metrics about request latencies and failures, and handle them better." Other CNCF projects, including OpenTracing and gRPC are also on his radar.

+ +

Singh has found that the cloud-native community is growing in India, too, particularly in Bangalore. "A lot of startups and new companies are starting to run their infrastructure on Kubernetes," he says.

+ +

And when people ask him about Crowdfire's experience, he has this advice to offer: "Kubernetes is a great piece of technology, but it might not be right for you, especially if you have just one or two services or your app isn't easy to run in a containerized environment," he says. "Assess your situation and the value that Kubernetes provides before going all in. If you do decide to use Kubernetes, make sure you understand the components that run under the hood and what role they play in smoothly running the cluster. Another thing to consider is if your apps are 'Kubernetes-ready,' meaning if they have proper health checks and handle termination signals to shut down gracefully."

+ +

And if your company fits that profile, go for it. Crowdfire clearly did—and is now reaping the benefits. "In the 15 months that we've been using Kubernetes, it has been amazing for us," says Singh. "It enabled us to iterate quickly, increase development speed and continuously deliver new features and bug fixes to our users, while keeping our operational costs and infrastructure management overhead under control."

\ No newline at end of file diff --git a/content/bn/case-studies/daocloud/daocloud_featured_logo.png b/content/bn/case-studies/daocloud/daocloud_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/daocloud/daocloud_featured_logo.svg b/content/bn/case-studies/daocloud/daocloud_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/daocloud/index.html b/content/bn/case-studies/daocloud/index.html index e69de29bb2..0344b3241e 100644 --- a/content/bn/case-studies/daocloud/index.html +++ b/content/bn/case-studies/daocloud/index.html @@ -0,0 +1,114 @@ +--- +title: DaoCloud Case Study +linkTitle: DaoCloud +case_study_styles: true +cid: caseStudies +logo: daocloud_featured_logo.svg + +css: /css/style_daocloud.css +new_case_study_styles: true +heading_background: /images/case-studies/daocloud/banner1.jpg +heading_title_logo: /images/daocloud-light.svg +subheading: > + Seek Global Optimal Solutions for Digital World +case_study_details: + - Company: DaoCloud + - Location: Shanghai, China + - Industry: Cloud Native +--- + +

Challenges

+ +

DaoCloud, founded in 2014, is an innovation leader in the field of cloud native. It boasts independent intellectual property rights of core technologies for crafting an open cloud platform to empower the digital transformation of enterprises.

+ +

DaoCloud has been engaged in cloud native since its inception. As containerization is crucial for cloud native business, a cloud platform that does not have containers as infrastructure is unlikely to attract its potential users. Therefore, the first challenge confronting DaoCloud is how to efficiently manage and schedule numerous containers while maintaining stable connectivity between them.

+ +

As cloud native technology gains momentum, cloud native solutions proliferate like mushrooms after rain. However, having more choices is not always a good thing, because choosing from various products to globally maximize benefits and minimize cost is always challenging and demanding. Therefore, another obstacle ahead of DaoCloud is how to pick out the best runner in each field and organize them into one platform that can achieve global optimum for cloud native.

+ +

Solutions

+ +

As the de facto standard for container orchestration, Kubernetes is undoubtedly the preferred container solution. Paco Xu, head of the Open Source and Advanced Development team at DaoCloud, stated, "Kubernetes is a fundamental tool in the current container ecosystem. Most services or applications are deployed and managed in Kubernetes clusters."

+ +

Regarding finding the global optimal solutions for cloud native technology, Peter Pan, R&D Vice President of DaoCloud, believes that "the right way is to focus on Kubernetes, coordinate relevant best practices and advanced technologies, and build a widely applicable platform."

+ +

Results

+ +

In the process of embracing cloud native technology, DaoCloud continues to learn from Kubernetes and other excellent CNCF open source projects. It has formed a product architecture centered on DaoCloud Enterprise, a platform for cloud native applications. Using Kubernetes and other cutting-edge cloud native technologies as a foundation, DaoCloud provides solid cloud native solutions for military, finance, manufacturing, energy, government, and retail clients. It helps promote digital transformation of many companies, such as SPD Bank, Huatai Securities, Fullgoal Fund, SAIC Motor, Haier, Fudan University, Watsons, Genius Auto Finance, State Grid Corporation of China, etc.

+ +{{< case-studies/quote + image="/images/case-studies/daocloud/banner2.jpg" + author="Kebe Liu, Service Mesh Expert, DaoCloud" +>}} +"As DaoCloud Enterprise becomes more powerful and attracts more users, some customers need to use Kubernetes instead of Swarm for application orchestration. We, as providers, need to meet the needs of our users." +{{< /case-studies/quote >}} + +

DaoCloud was founded to help traditional enterprises move their applications to the cloud and realize digital transformation. The first product released after the company's establishment, DaoCloud Enterprise 1.0, is a Docker-based container engine platform that can easily build images and run them in containers.

+ +

However, as applications and containers increase in number, coordinating and scheduling these containers became a bottleneck that restricted product performance. DaoCloud Enterprise 2.0 used Docker Swarm to manage containers, but the increasingly complex container scheduling system gradually went beyond the competence of Docker Swarm.

+ +

Fortunately, Kubernetes began to stand out at this time. It rapidly grew into the industrial standard for container orchestration with its competitive rich functions, stable performance, timely community support, and strong compatibility. Paco Xu said, "Enterprise container platforms need container orchestration to standardize the process of moving to the cloud. Kubernetes was accepted as the de facto standard for container orchestration around 2016 and 2017. Our products started to support it in 2017."

+ +

After thorough comparisons and evaluations, DaoCloud Enterprise 2.8, debuted in 2017, officially adopted Kubernetes (v1.6.7) as its container orchestration tool. Since then, DaoCloud Enterprise 3.0 (2018) used Kubernetes v1.10, and DaoCloud Enterprise 4.0 (2021) adopted Kubernetes v1.18. The latest version, DaoCloud Enterprise 5.0 (2022), supports Kubernetes v1.23 to v1.26.

+ +

Kubernetes served as an inseparable part of these four releases over six years, which speaks volumes about the fact that using Kubernetes in DaoCloud Enterprise was the right choice. DaoCloud has proven, through its own experience and actions, that Kubernetes is the best choice for container orchestration and that it has always been a loyal fan of Kubernetes.

+ +{{< case-studies/quote + image="/images/case-studies/daocloud/banner3.jpg" + author="Ting Ye, Vice President of Product Innovation, DaoCloud" +>}} +"Kubernetes is the cornerstone for refining our products towards world-class software." +{{< /case-studies/quote >}} + +

Kubernetes helped our product and research teams realized automation of test, build, check, and release process, ensuring the quality of deliverables. It also helped build our smart systems of collaboration about product requirements & definition, multilingual product materials, debugging, and miscellaneous challenges, improving the efficiency of intra- and inter-department collaboration.

+ +

On the one hand, Kubernetes makes our products more performant and competitive. DaoCloud integrates relevant practices and technologies around Kubernetes to polish its flagship offering – DaoCloud Enterprise. The latest 5th version, released in 2022, covers application stores, application delivery, microservice governance, observability, data services, multi-cloud management, cloud-edge collaboration, and other functions. DaoCloud Enterprise 5.0 is an inclusive integration of cloud native technologies.

+ +

DaoCloud deployed a Kubernetes platform for SPD Bank, improving its application deployment efficiency by 82%, shortening its delivery cycle from half a year to one month, and promoting its transaction success rate to 99.999%.

+ +

In terms of Sichuan Tianfu Bank, the scaling time was reduced from several hours to an average of 2 minutes, product iteration cycle was shortened from two months to two weeks, and application rollout time was cut by 76.76%.

+ +

As for a joint-venture carmaker, its delivery cycle shortened from two months to one or two weeks, success rate of application deployment increased by 53%, and application rollout became ten times more efficient. In the case of a multinational retailer, application deployment issues were solved by 46%, and fault location efficiency rose by more than 90%.

+ +

For a large-scale securities firm, its business procedure efficiency was enhanced by 30%, and resource costs were lowered by about 35%.

+ +

With this product, Fullgoal Fund shortened its middleware deployment time from hours to minutes, improved middleware operation and maintenance capabilities by 50%, containerization by 60%, and resource utilization by 40%.

+ +

On the other hand, our product development is also based on Kubernetes. DaoCloud deployed Gitlab based on Kubernetes and established a product development process of "Gitlab -> PR -> Auto Tests -> Builds & Releases", which significantly improved our development efficiency, reduced repetitive tests, and realized automatic release of applications. This approach greatly saves operation and maintenance costs, enabling technicians to invest more time and energy in product development to offer better cloud native products.

+ +{{< case-studies/quote + image="/images/case-studies/daocloud/banner4.jpg" + author="Paco Xu, Header of Open Source & Advanced Development Team, DaoCloud" +>}} +"Our developers actively contribute to open source projects and build technical expertise. DaoCloud has established a remarkable presence in the Kubernetes and Istio communities." +{{< /case-studies/quote >}} + +

DaoCloud is deeply involved in contributing to Kubernetes and other cloud native open source projects. Our participation and contributions in these communities continue to grow. In the year of 2022, DaoCloud was ranked third globally in terms of cumulative contribution to Kubernetes (data from Stackalytics as of January 5, 2023).

+ +

In August 2022, Kubernetes officially organized an interview with community contributors, and four outstanding contributors from the Asia-Pacific region were invited. Half of them came from DaoCloud, namely Shiming Zhang and Paco Xu. Both are Reviewers of SIG Node. Furthermore, at the KubeCon + CloudNative North America 2022, Kante Yin from DaoCloud won the 2022 Contributor Award of Kubernetes.

+ +

In addition, DaoCloud continue to practice its cloud native beliefs and contribute to the Kubernetes ecosystem by sharing source code of several excellent projects, including Clusterpedia, Kubean, CloudTTY, KLTS, Merbridge, HwameiStor, Spiderpool, and KWOK, on GitHub.

+ +

In particular:

+ +
    +
  • Clusterpedia: Designed for resource synchronization across clusters, Clusterpedia is compatible with Kubernetes OpenAPIs and offers a powerful search function for quick and effective retrieval of all resources in clusters.
  • +
  • Kubean: With Kubean, it's possible to quickly create production-ready Kubernetes clusters and integrate clusters from other providers.
  • +
  • CloudTTY: CloudTTY is a web terminal and cloud shell operator for Kubernetes cloud native environments, allowing for management of Kubernetes clusters on a web page from anywhere and at any time.
  • +
  • KLTS: Providing long-term free maintenance for earlier versions of Kubernetes, KLTS ensures stability and support for older Kubernetes deployments. Additionally, Piraeus is an easy and secure storage solution for Kubernetes with high performance and availability.
  • +
  • KWOK: Short for Kubernetes WithOut Kubelet, KWOK is a toolkit that enables the setup of a cluster of thousands of nodes in seconds. All nodes are simulated to behave like real ones, resulting in low resource usage that makes it easy to experiment on a laptop.
  • +
+ +

DaoCloud utilizes its practical experience across industries to contribute to Kubernetes-related open source projects, with an aim of making cloud native technologies, represented by Kubernetes, better function in production environment.

+ +{{< case-studies/quote + image="/images/case-studies/daocloud/banner5.jpg" + author="Song Zheng, Technology GM, DaoCloud" +>}} +"DaoCloud, as one of the first cloud native technology training partners certified by CNCF, will continue to carry out trainings to help more companies find their best ways for going to the cloud." +{{< /case-studies/quote >}} + +

Enterprise users need a global optimal solution, which can be understood as an inclusive platform that can maximize the advantages of multi-cloud management, application delivery, observability, cloud-edge collaboration, microservice governance, application store, and data services. In today's cloud native ecosystem, these functions cannot be achieved without Kubernetes as the underlying container orchestration tool. Therefore, Kubernetes is crucial to DaoCloud's mission of finding the optimal solution in the digital world, and all future product development will continue to be based on Kubernetes.

+ +

Kubernetes training and promotion activities have always been attached great importance in DaoCloud. In 2017, the company took the lead in passing CNCF's Certified Kubernetes Conformance Program through its featured product — DaoCloud Enterprise. In 2018, it became a CNCF-certified Kubernetes service provider and training partner.

+ +

On November 18, 2022, the "Kubernetes Community Days" event was successfully held in Chengdu, organized by CNCF, DaoCloud, Huawei Cloud, Sichuan Tianfu Bank, and OPPO. The event brought together end-users, contributors, and technical experts from open-source communities to share best practices and innovative ideas about Kubernetes and cloud native. In the future, DaoCloud will continue to contribute to Kubernetes projects, and expand the influence of Kubernetes through project training, community contributions and other activities.

\ No newline at end of file diff --git a/content/bn/case-studies/denso/denso_featured_logo.svg b/content/bn/case-studies/denso/denso_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/denso/index.html b/content/bn/case-studies/denso/index.html index e69de29bb2..e42a7854e3 100644 --- a/content/bn/case-studies/denso/index.html +++ b/content/bn/case-studies/denso/index.html @@ -0,0 +1,82 @@ +--- +title: Denso Case Study +linkTitle: Denso +case_study_styles: true +cid: caseStudies +logo: denso_featured_logo.svg +featured: true +weight: 4 +quote: > + We got Kubernetes experts involved on our team, and it dramatically accelerated development speed. + +new_case_study_styles: true +heading_background: /images/case-studies/denso/banner2.jpg +heading_title_text: Denso +use_gradient_overlay: true +subheading: > + How DENSO Is Fueling Development on the Vehicle Edge with Kubernetes +case_study_details: + - Company: Denso + - Location: Japan + - Industry: Automotive, Edge +--- + +

Challenge

+ +

DENSO Corporation is one of the biggest automotive components suppliers in the world. With the advent of connected cars, the company launched a Digital Innovation Department to expand into software, working on vehicle edge and vehicle cloud products. But there were several technical challenges to creating an integrated vehicle edge/cloud platform: "the amount of computing resources, the occasional lack of mobile signal, and an enormous number of distributed vehicles," says R&D Product Manager Seiichi Koizumi.

+ +

Solution

+ +

Koizumi's team realized that because mobility services evolve every day, they needed the flexibility of the cloud native ecosystem for their platform. After considering other orchestrators, DENSO went with Kubernetes for orchestration and added Prometheus, Fluentd, Envoy, Istio, and Helm to the platform. Today, DENSO is using a vehicle edge computer, a private Kubernetes cloud, and managed Kubernetes (GKE, EKS, AKS).

+ +

Impact

+ +

Critical layer features can take 2-3 years to implement in the traditional, waterfall model of development at DENSO. With the Kubernetes platform and agile methods, there's a 2-month development cycle for non-critical software. Now, ten new applications are released a year, and a new prototype is introduced every week. "By utilizing Kubernetes managed services, such as GKE/EKS/AKS, we can unify the environment and simplify our maintenance operation," says Koizumi.

+ +{{< case-studies/quote + image="/images/case-studies/denso/banner1.png" + author="SEIICHI KOIZUMI, R&D PRODUCT MANAGER, DIGITAL INNOVATION DEPARTMENT AT DENSO" +>}} +"Another disruptive innovation is coming, so to survive in this situation, we need to change our culture." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Spun off from Toyota in 1949, DENSO Corporation is one of the top automotive suppliers in the world today, with consolidated net revenue of $48.3 billion. +{{< /case-studies/lead >}} + +

The company's mission is "contributing to a better world by creating value together with a vision for the future"—and part of that vision in recent years has been development on the vehicle edge and vehicle cloud.

+ +

With the advent of connected cars, DENSO established a Digital Innovation Department to expand its business beyond the critical layer of the engine, braking systems, and other automotive parts into the non-critical analytics and entertainment layer. Comparing connected cars to smartphones, R&D Product Manager Seiichi Koizumi says DENSO wants the ability to quickly and easily develop and install apps for the "blank slate" of the car, and iterate them based on the driver's preferences. Thus "we need a flexible application platform," he says.

+ +

But working on vehicle edge and vehicle cloud products meant there were several technical challenges: "the amount of computing resources, the occasional lack of mobile signal, and an enormous number of distributed vehicles," says Koizumi. "We are tackling these challenges to create an integrated vehicle edge/cloud platform."

+ +{{< case-studies/quote author="SEIICHI KOIZUMI, R&D PRODUCT MANAGER, DIGITAL INNOVATION DEPARTMENT AT DENSO" >}} +"We got Kubernetes experts involved on our team, and it dramatically accelerated development speed." +{{< /case-studies/quote >}} + +

Koizumi's team realized that because mobility services evolve every day, they needed the flexibility of the cloud native ecosystem for their platform. As they evaluated technologies, they were led by these criteria: Because their service-enabler business needed to support multiple cloud and on-premise environments, the solution needed to be cloud agnostic, with no vendor lock-in and open governance. It also had to support an edge-cloud integrated environment.

+ +

After considering other orchestrators, DENSO went with Kubernetes for orchestration and added Prometheus, Fluentd, Envoy, Istio, and Helm to the platform. During implementation, the team used "design thinking to clarify use cases and their value proposition," says Koizumi. Next, an agile development team worked on a POC, then an MVP, in DevOps style. "Even in the development phase, we are keeping a channel to end users," he adds.

+ +

One lesson learned during this process was the value of bringing in experts. "We tried to learn Kubernetes and cloud native technologies from scratch, but it took more time than expected," says Koizumi. "We got Kubernetes experts involved on our team, and it dramatically accelerated development speed."

+ +{{< case-studies/quote + image="/images/case-studies/denso/banner4.jpg" + author="SEIICHI KOIZUMI, R&D PRODUCT MANAGER, DIGITAL INNOVATION DEPARTMENT AT DENSO" +>}} +"By utilizing Kubernetes managed services, such as GKE/EKS/AKS, we can unify the environment and simplify our maintenance operation." +{{< /case-studies/quote >}} + +

Today, DENSO is using a vehicle edge computer, a private Kubernetes cloud, and managed Kubernetes on GKE, EKS, and AKS. "We are developing a vehicle edge/cloud integrated platform based on a microservice and service mesh architecture," says Koizumi. "We extend cloud into multiple vehicle edges and manage it as a unified platform."

+ +

Cloud native has enabled DENSO to deliver applications via its new dash cam, which has a secure connection that collects data to the cloud. "It's like a smartphone," he says. "We are installing new applications and getting the data through the cloud, and we can keep updating new applications all through the dash cam."

+ +

The unified cloud native platform, combined with agile development, has had a positive impact on productivity. Critical layer features—those involving engines or braking systems, for example—can take 2-3 years to implement at DENSO, because of the time needed to test safety, but also because of the traditional, waterfall model of development. With the Kubernetes platform and agile methods, there's a 2-month development cycle for non-critical software. Now, ten new applications are released a year, and with the department's scrum-style development, a new prototype is introduced every week.

+ +

Application portability has also led to greater developer efficiency. "There's no need to care about differences in the multi-cloud platform anymore," says Koizumi. Now, "we are also trying to have the same portability between vehicle edge and cloud platform."

+ +

Another improvement: Automotive Tier-1 suppliers like DENSO always have multiple Tier-2 suppliers. "To provide automotive-grade high-availability services, we tried to do the same thing on a multi-cloud platform," says Koizumi. Before Kubernetes, maintaining two different systems simultaneously was difficult. "By utilizing Kubernetes managed services, such as GKE/EKS/AKS, we can unify the environment and simplify our maintenance operation," he says.

+ +

Cloud native has also profoundly changed the culture at DENSO. The Digital Innovation Department is known as "Noah's Ark," and it has grown from 2 members to 70—with plans to more than double in the next year. The way they operate is completely different from the traditional Japanese automotive culture. But just as the company embraced change brought by hybrid cars in the past decade, Koizumi says, they're doing it again now, as technology companies have moved into the connected car space. "Another disruptive innovation is coming," he says, "so to survive in this situation, we need to change our culture."

+ +

Looking ahead, Koizumi and his team are expecting serverless and zero-trust security architecture to be important enhancements of Kubernetes. They are glad DENSO has come along for the ride. "Mobility service businesses require agility and flexibility," he says. "DENSO is trying to bring cloud native flexibility into the vehicle infrastructure."

\ No newline at end of file diff --git a/content/bn/case-studies/golfnow/golfnow_featured.png b/content/bn/case-studies/golfnow/golfnow_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/golfnow/golfnow_featured.svg b/content/bn/case-studies/golfnow/golfnow_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/golfnow/golfnow_logo.png b/content/bn/case-studies/golfnow/golfnow_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/golfnow/index.html b/content/bn/case-studies/golfnow/index.html index e69de29bb2..4f731436cf 100644 --- a/content/bn/case-studies/golfnow/index.html +++ b/content/bn/case-studies/golfnow/index.html @@ -0,0 +1,89 @@ +--- +title: GolfNow Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/golfnow/banner1.jpg +heading_title_logo: /images/golfnow_logo.png +subheading: > + Saving Time and Money with Cloud Native Infrastructure +case_study_details: + - Company: GolfNow + - Location: Orlando, Florida + - Industry: Golf Industry Technology and Services Provider +--- + +

Challenge

+ +

A member of the NBC Sports Group, GolfNow is the golf industry's technology and services leader, managing 10 different products, as well as the largest e-commerce tee time marketplace in the world. As its business began expanding rapidly and globally, GolfNow's monolithic application became problematic. "We kept growing our infrastructure vertically rather than horizontally, and the cost of doing business became problematic," says Sheriff Mohamed, GolfNow's Director, Architecture. "We wanted the ability to more easily expand globally."

+ +

Solution

+ +

Turning to microservices and containerization, GolfNow began moving its applications and databases from third-party services to its own clusters running on Docker and Kubernetes.

+ +

Impact

+ +

The results were immediate. While maintaining the same capacity—and beyond, during peak periods—GolfNow saw its infrastructure costs for the first application virtually cut in half.

+ +{{< case-studies/quote author="SHERIFF MOHAMED, DIRECTOR, ARCHITECTURE AT GOLFNOW" >}} +"With our growth we obviously needed to expand our infrastructure, and we kept growing vertically rather than horizontally. We were basically wasting money and doubling the cost of our infrastructure." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +It's not every day that you can say you've slashed an operating expense by half. +{{< /case-studies/lead >}} + +

But Sheriff Mohamed and Josh Chandler did just that when they helped lead their company, GolfNow, on a journey from a monolithic to a containerized, cloud native infrastructure managed by Kubernetes.

+ +

A top-performing business within the NBC Sports Group, GolfNow is a technology and services company with the largest tee time marketplace in the world. GolfNow serves 5 million active golfers across 10 different products. In recent years, the business had grown so fast that the infrastructure supporting their giant monolithic application (written in C#.NET and backed by SQL Server database management system) could not keep up. "With our growth we obviously needed to expand our infrastructure, and we kept growing vertically rather than horizontally," says Sheriff, GolfNow's Director, Architecture. "Our costs were growing exponentially. And on top of that, we had to build a Disaster Recovery (DR) environment, which then meant we'd have to copy exactly what we had in our original data center to another data center that was just the standby. We were basically wasting money and doubling the cost of our infrastructure."

+ +

In moving just the first of GolfNow's important applications—a booking engine for golf courses and B2B marketing platform—from third-party services to their own Kubernetes environment, "our bill went down drastically," says Sheriff.

+ +

The path to those stellar results began in late 2014. In order to support GolfNow's global growth, the team decided that the company needed to have multiple data centers and the ability to quickly and easily re-route traffic as needed. "From there we knew that we needed to go in a direction of breaking things apart, microservices, and containerization," says Sheriff. "At the time we were trying to get away from C#.NET and SQL Server since it didn't run very well on Linux, where everything container was running smoothly."

+ +

To that end, the team shifted to working with Node.js, the open-source, cross-platform JavaScript runtime environment for developing tools and applications, and MongoDB, the open-source database program. At the time, Docker, the platform for deploying applications in containers, was still new. But once the team began experimenting with it, Sheriff says, "we realized that was the way we wanted to go, especially since that's the way the industry is heading."

+ +{{< case-studies/quote image="/images/case-studies/golfnow/banner3.jpg" >}} +"The team migrated the rest of the application into their Kubernetes cluster. And the impact was immediate: On top of cutting monthly costs by a large percentage, says Sheriff, 'Running at the same capacity and during our peak time, we were able to horizontally grow. Since we were using our VMs more efficiently with containers, we didn't have to pay extra money at all.'" +{{< /case-studies/quote >}} + +

GolfNow's dev team ran an "internal, low-key" proof of concept and were won over. "We really liked how easy it was to be able to pass containers around to each other and have them up and running in no time, exactly the way it was running on my machine," says Sheriff. "Because that is always the biggest gripe that Ops has with developers, right? 'It worked on my machine!' But then we started getting to the point of, 'How do we make sure that these things stay up and running?'"

+ +

That led the team on a quest to find the right orchestration system for the company's needs. Sheriff says the first few options they tried were either too heavy or "didn't feel quite right." In late summer 2015, they discovered the just-released Kubernetes, which Sheriff immediately liked for its ease of use. "We did another proof of concept," he says, "and Kubernetes won because of the fact that the community backing was there, built on top of what Google had already done."

+ +

But before they could go with Kubernetes, NBC, GolfNow's parent company, also asked them to comparison shop with another company. Sheriff and his team liked the competing company's platform user interface, but didn't like that its platform would not allow containers to run natively on Docker. With no clear decision in sight, Sheriff's VP at GolfNow, Steve McElwee, set up a three-month trial during which a GolfNow team (consisting of Sheriff and Josh, who's now Lead Architect, Open Platforms) would build out a Kubernetes environment, and a large NBC team would build out one with the other company's platform.

+ +

"We spun up the cluster and we tried to get everything to run the way we wanted it to run," Sheriff says. "The biggest thing that we took away from it is that not only did we want our applications to run within Kubernetes and Docker, we also wanted our databases to run there. We literally wanted our entire infrastructure to run within Kubernetes."

+ +

At the time there was nothing in the community to help them get Kafka and MongoDB clusters running within a Kubernetes and Docker environment, so Sheriff and Josh figured it out on their own, taking a full month to get it right. "Everything started rolling from there," Sheriff says. "We were able to get all our applications connected, and we finished our side of the proof of concept a month in advance. My VP was like, 'Alright, it's over. Kubernetes wins.'"

+ +

The next step, beginning in January 2016, was getting everything working in production. The team focused first on one application that was already written in Node.js and MongoDB. A booking engine for golf courses and B2B marketing platform, the application was already going in the microservice direction but wasn't quite finished yet. At the time, it was running in Heroku Compose and other third-party services—resulting in a large monthly bill.

+ +{{< case-studies/quote image="/images/case-studies/golfnow/banner4.jpg" >}} +"'The time I spent actually moving the applications was under 30 seconds! We can move data centers in just incredible amounts of time. If you haven't come from the Kubernetes world you wouldn't believe me.' Sheriff puts it in these terms: 'Before Kubernetes I wasn't sleeping at night, literally. I was woken up all the time, because things were down. After Kubernetes, I've been sleeping at night.'" +{{< /case-studies/quote >}} + +

"The goal was to take all of that out and put it within this new platform we've created with Kubernetes on Google Compute Engine (GCE)," says Sheriff. "So we ended up building piece by piece, in parallel, what was out in Heroku and Compose, in our Kubernetes cluster. Then, literally, just switched configs in the background. So in Heroku we had the app running hitting a Compose database. We'd take the config, change it and make it hit the database that was running in our cluster."

+ +

Using this procedure, they were able to migrate piecemeal, without any downtime. The first migration was done during off hours, but to test the limits, the team migrated the second database in the middle of the day, when lots of users were running the application. "We did it," Sheriff says, "and again it was successful. Nobody noticed."

+ +

After three weeks of monitoring to make sure everything was running stable, the team migrated the rest of the application into their Kubernetes cluster. And the impact was immediate: On top of cutting monthly costs by a large percentage, says Sheriff, "Running at the same capacity and during our peak time, we were able to horizontally grow. Since we were using our VMs more efficiently with containers, we didn't have to pay extra money at all."

+ +

Not only were they saving money, but they were also saving time. "I had a meeting this morning about migrating some applications from one cluster to another," says Josh. "I spent about 2 hours explaining the process. The time I spent actually moving the applications was under 30 seconds! We can move data centers in just incredible amounts of time. If you haven't come from the Kubernetes world you wouldn't believe me." Sheriff puts it in these terms: "Before Kubernetes I wasn't sleeping at night, literally. I was woken up all the time, because things were down. After Kubernetes, I've been sleeping at night."

+ +

A small percentage of the applications on GolfNow have been migrated over to the Kubernetes environment. "Our Core Team is rewriting a lot of the .NET applications into .NET Core [which is compatible with Linux and Docker] so that we can run them within containers," says Sheriff.

+ +

Looking ahead, Sheriff and his team want to spend 2017 continuing to build a whole platform around Kubernetes with Drone, an open-source continuous delivery platform, to make it more developer-centric. "Now they're able to manage configuration, they're able to manage their deployments and things like that, making all these subteams that are now creating all these microservices, be self sufficient," he says. "So it can pull us away from applications and allow us to just make sure the cluster is running and healthy, and then actually migrate that over to our Ops team."

+ +{{< case-studies/quote >}} +"Having gone from complete newbies to production-ready in three months, the GolfNow team is eager to encourage other companies to follow their lead. 'This is The Six Million Dollar Man of the cloud right now,' adds Josh. 'Just try it out, watch it happen. I feel like the proof is in the pudding when you look at these kinds of application stacks. They're faster, they're more resilient.'" +{{< /case-studies/quote >}} + +

And long-term, Sheriff has an even bigger goal for getting more people into the Kubernetes fold. "We're actually trying to make this platform generic enough so that any of our sister companies can use it if they wish," he says. "Most definitely I think it can be used as a model. I think the way we migrated into it, the way we built it out, are all ways that I think other companies can learn from, and should not be afraid of."

+ +

The GolfNow team is also giving back to the Kubernetes community by open-sourcing a bot framework that Josh built. "We noticed that the dashboard user interface is actually moving a lot faster than when we started," says Sheriff. "However we realized what we needed was something that's more of a bot that really helps us administer Kubernetes as a whole through Slack." Josh explains: "With the Kubernetes-Slack integration, you can essentially hook into a cluster and the issue commands and edit configurations. We've tried to simplify the security configuration as much as possible. We hope this will be our major thank you to Kubernetes, for everything you've given us."

+ +

Having gone from complete newbies to production-ready in three months, the GolfNow team is eager to encourage other companies to follow their lead. The lessons they've learned: "You've got to have buy-in from your boss," says Sheriff. "Another big deal is having two to three people dedicated to this type of endeavor. You can't have people who are half in, half out." And if you don't have buy-in from the get go, proving it out will get you there.

+ +

"This is The Six Million Dollar Man of the cloud right now," adds Josh. "Just try it out, watch it happen. I feel like the proof is in the pudding when you look at these kinds of application stacks. They're faster, they're more resilient."

\ No newline at end of file diff --git a/content/bn/case-studies/haufegroup/haufegroup_featured.png b/content/bn/case-studies/haufegroup/haufegroup_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/haufegroup/haufegroup_featured.svg b/content/bn/case-studies/haufegroup/haufegroup_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/haufegroup/haufegroup_logo.png b/content/bn/case-studies/haufegroup/haufegroup_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/haufegroup/index.html b/content/bn/case-studies/haufegroup/index.html index e69de29bb2..3867b727a3 100644 --- a/content/bn/case-studies/haufegroup/index.html +++ b/content/bn/case-studies/haufegroup/index.html @@ -0,0 +1,85 @@ +--- +title: Haufe Group Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/haufegroup/banner1.jpg +heading_title_logo: /images/haufegroup_logo.png +subheading: > + Paving the Way for Cloud Native for Midsize Companies +case_study_details: + - Company: Haufe Group + - Location: Freiburg, Germany + - Industry: Media and Software +--- + +

Challenge

+ +

Founded in 1930 as a traditional publisher, Haufe Group has grown into a media and software company with 95 percent of its sales from digital products. Over the years, the company has gone from having "hardware in the basement" to outsourcing its infrastructure operations and IT. More recently, the development of new products, from Internet portals for tax experts to personnel training software, has created demands for increased speed, reliability and scalability. "We need to be able to move faster," says Solution Architect Martin Danielsson. "Adapting workloads is something that we really want to be able to do."

+ +

Solution

+

Haufe Group began its cloud-native journey when Microsoft Azure became available in Europe; the company needed cloud deployments for its desktop apps with bandwidth-heavy download services. "After that, it has been different projects trying out different things," says Danielsson. Two years ago, Holger Reinhardt joined Haufe Group as CTO and rapidly re-oriented the traditional host provider-based approach toward a cloud and API-first strategy.

+ +

A core part of this strategy was a strong mandate to embrace infrastructure-as-code across the entire software deployment lifecycle via Docker. The company is now getting ready to go live with two services in production using Kubernetes orchestration on Microsoft Azure and Amazon Web Services. The team is also working on breaking up one of their core Java Enterprise desktop products into microservices to allow for better evolvability and dynamic scaling in the cloud.

+ +

Impact

+

With the ability to adapt workloads, Danielsson says, teams "will be able to scale down to around half the capacity at night, saving 30 percent of the hardware cost." Plus, shorter release times have had a major impact. "Before, we had to announce at least a week in advance when we wanted to do a release because there was a huge checklist of things that you had to do," he says. "By going cloud native, we have the infrastructure in place to be able to automate all of these things. Now we can get a new release done in half an hour instead of days."

+ +{{< case-studies/quote author="Martin Danielsson, Solution Architect, Haufe Group" >}} +"Over the next couple of years, people won't even think that much about it when they want to run containers. Kubernetes is going to be the go-to solution." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +More than 80 years ago, Haufe Group was founded as a traditional publishing company, printing books and commentary on paper. +{{< /case-studies/lead >}} + +

By the 1990s, though, the company's leaders recognized that the future was digital, and to their credit, were able to transform Haufe Group into a media and software business that now gets 95 percent of its sales from digital products. "Among the German companies doing this, we were one of the early adopters," says Martin Danielsson, Solution Architect for Haufe Group.

+ +

And now they're leading the way for midsize companies embracing cloud-native technology like Kubernetes. "The really big companies like Ticketmaster and Google get it right, and the startups get it right because they're faster," says Danielsson. "We're in this big lump of companies in the middle with a lot of legacy, a lot of structure, a lot of culture that does not easily fit the cloud technologies. We're just 1,500 people, but we have hundreds of customer-facing applications. So we're doing things that will be relevant for many companies of our size or even smaller."

+ +

Many of those legacy challenges stemmed from simply following the technology trends of the times. "We used to do full DevOps," he says. In the 1990s and 2000s, "that meant that you had your hardware in the basement. And then 10 years ago, the hype of the moment was to outsource application operations, outsource everything, and strip down your IT department to take away the distraction of all these hardware things. That's not our area of expertise. We didn't want to be an infrastructure provider. And now comes the backlash of that."

+ +

Haufe Group began feeling the pain as they were developing more new products, from Internet portals for tax experts to personnel training software, that have created demands for increased speed, reliability and scalability. "Right now, we have this break in workflows, where we go from writing concepts to developing, handing it over to production and then handing that over to your host provider," he says. "And then when things go bad we have no clue what went wrong. We definitely want to take back control, and we want to move a lot faster. Adapting workloads is something that we really want to be able to do."

+ +

Those needs led them to explore cloud-native technology. Their first foray into the cloud was doing deployments in Microsoft Azure, once it became available in Europe, for desktop products that had built-in download services. Hosting expenses for such bandwidth-heavy services were too high, so the company turned to the cloud. "After that, it has been different projects trying out different things," says Danielsson.

+ +{{< case-studies/quote image="/images/case-studies/haufegroup/banner3.jpg" >}} +"We have been doing containers for the last two years, and we really got the hang of how they work," says Danielsson. "But it was always for development and test, never in production, because we didn't fully understand how that would work. And to me, Kubernetes was definitely the technology that solved that." +{{< /case-studies/quote >}} + +

Two years ago, Holger Reinhardt joined Haufe Group as CTO and rapidly re-oriented the traditional host provider-based approach toward a cloud and API-first strategy. A core part of this strategy was a strong mandate to embrace infrastructure-as-code across the entire software deployment lifecycle via Docker. Some experiments went further than others; German regulations about sensitive data proved to be a road block in moving some workloads to Azure and Amazon Web Services. "Due to our history, Germany is really strict with things like personally identifiable data," Danielsson says.

+ +

These experiments took on new life with the arrival of the Azure Sovereign Cloud for Germany (an Azure clone run by the German T-Systems provider). With the availability of Azure.de—which conforms to Germany's privacy regulations—teams started to seriously consider deploying production loads in Docker into the cloud. "We have been doing containers for the last two years, and we really got the hang of how they work," says Danielsson. "But it was always for development and test, never in production, because we didn't fully understand how that would work. And to me, Kubernetes was definitely the technology that solved that."

+ +

In parallel, Danielsson had built an API management system with the aim of supporting CI/CD scenarios, aspects of which were missing in off-the-shelf API management products. With a foundation based on Mashape's Kong gateway, it is open-sourced as wicked.haufe.io. He put wicked.haufe.io to use with his product team.

Otherwise, Danielsson says his philosophy was "don't try to reinvent the wheel all the time. Go for what's there and 99 percent of the time it will be enough. And if you think you really need something custom or additional, think perhaps once or twice again. One of the things that I find so amazing with this cloud-native framework is that everything ties in."

+ +

Currently, Haufe Group is working on two projects using Kubernetes in production. One is a new mobile application for researching legislation and tax laws. "We needed a way to take out functionality from a legacy core and put an application on top of that with an API gateway—a lot of moving parts that screams containers," says Danielsson. So the team moved the build pipeline away from "deploying to some old, huge machine that you could deploy anything to" and onto a Kubernetes cluster where there would be automatic CI/CD "with feature branches and all these things that were a bit tedious in the past."

+ +{{< case-studies/quote image="/images/case-studies/haufegroup/banner4.jpg" >}} +"Before, we had to announce at least a week in advance when we wanted to do a release because there was a huge checklist of things that you had to do," says Danielsson. "By going cloud native, we have the infrastructure in place to be able to automate all of these things. Now we can get a new release done in half an hour instead of days." +{{< /case-studies/quote >}} + +

It was a proof of concept effort, and the proof was in the pudding. "Everyone was really impressed at what we accomplished in a week," says Danielsson. "We did these kinds of integrations just to make sure that we got a handle on how Kubernetes works. If you can create optimism and buzz around something, it's half won. And if the developers and project managers know this is working, you're more or less done." Adds Reinhardt: "You need to create some very visible, quick wins in order to overcome the status quo."

+ +

The impact on the speed of deployment was clear: "Before, we had to announce at least a week in advance when we wanted to do a release because there was a huge checklist of things that you had to do," says Danielsson. "By going cloud native, we have the infrastructure in place to be able to automate all of these things. Now we can get a new release done in half an hour instead of days."

+ +

The potential impact on cost was another bonus. "Hosting applications is quite expensive, so moving to the cloud is something that we really want to be able to do," says Danielsson. With the ability to adapt workloads, teams "will be able to scale down to around half the capacity at night, saving 30 percent of the hardware cost."

+ +

Just as importantly, Danielsson says, there's added flexibility: "When we try to move or rework applications that are really crucial, it's often tricky to validate whether the path we want to take is going to work out well. In order to validate that, we would need to reproduce the environment and really do testing, and that's prohibitively expensive and simply not doable with traditional host providers. Cloud native gives us the ability to do risky changes and validate them in a cost-effective way."

+ +

As word of the two successful test projects spread throughout the company, interest in Kubernetes has grown. "We want to be able to support our developers in running Kubernetes clusters but we're not there yet, so we allow them to do it as long as they're aware that they are on their own," says Danielsson. "So that's why we are also looking at things like [the managed Kubernetes platform] CoreOS Tectonic, Azure Container Service, ECS, etc. These kinds of services will be a lot more relevant to midsize companies that want to leverage cloud native but don't have the IT departments or the structure around that."

+ +

In the next year and a half, Danielsson says the company will be working on moving one of their legacy desktop products, a web app for researching legislation and tax laws originally built in Java Enterprise, onto cloud-native technology. "We're doing a microservice split out right now so that we can independently deploy the different parts," he says. The main website, which provides free content for customers, is also moving to cloud native.

+ +{{< case-studies/quote >}} +"the execution of a strategy requires alignment of culture, structure and technology. Only if those three dimensions are aligned can you successfully execute a transformation into microservices and cloud-native architectures. And it is only then that the Cloud will pay the dividends in much faster speeds in product innovation and much lower operational costs." +{{< /case-studies/quote >}} + +

But with these goals, Danielsson believes there are bigger cultural challenges that need to be constantly addressed. The move to new technology, not to mention a shift toward DevOps, means a lot of change for employees. "The roles were rather fixed in the past," he says. "You had developers, you had project leads, you had testers. And now you get into these really, really important things like test automation. Testers aren't actually doing click testing anymore, and they have to write automated testing. And if you really want to go full-blown CI/CD, all these little pieces have to work together so that you get the confidence to do a check in, and know this check in is going to land in production, because if I messed up, some test is going to break. This is a really powerful thing because whatever you do, whenever you merge something into the trunk or to the master, this is going live. And that's where you either get the people or they run away screaming." Danielsson understands that it may take some people much longer to get used to the new ways.

+ +

"Culture is nothing that you can force on people," he says. "You have to live it for yourself. You have to evangelize. You have to show the advantages time and time again: This is how you can do it, this is what you get from it." To that end, his team has scheduled daylong workshops for the staff, bringing in outside experts to talk about everything from API to Devops to cloud.

+ +

For every person who runs away screaming, many others get drawn in. "Get that foot in the door and make them really interested in this stuff," says Danielsson. "Usually it catches on. We have people you never would have expected chanting, 'Docker Docker Docker' now. It's cool to see them realize that there is a world outside of their Python libraries. It's awesome to see them really work with Kubernetes."

+ +

Ultimately, Reinhardt says, "the execution of a strategy requires alignment of culture, structure and technology. Only if those three dimensions are aligned can you successfully execute a transformation into microservices and cloud-native architectures. And it is only then that the Cloud will pay the dividends in much faster speeds in product innovation and much lower operational costs."

\ No newline at end of file diff --git a/content/bn/case-studies/huawei/huawei_featured.png b/content/bn/case-studies/huawei/huawei_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/huawei/huawei_featured.svg b/content/bn/case-studies/huawei/huawei_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/huawei/huawei_logo.png b/content/bn/case-studies/huawei/huawei_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/huawei/index.html b/content/bn/case-studies/huawei/index.html index e69de29bb2..a6caa3eee9 100644 --- a/content/bn/case-studies/huawei/index.html +++ b/content/bn/case-studies/huawei/index.html @@ -0,0 +1,73 @@ +--- +title: Huawei Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/huawei/banner1.jpg +heading_title_logo: /images/huawei_logo.png +subheading: > + Embracing Cloud Native as a User – and a Vendor +case_study_details: + - Company: Huawei + - Location: Shenzhen, China + - Industry: Telecommunications Equipment +--- + +

Challenge

+ +

A multinational company that's the largest telecommunications equipment manufacturer in the world, Huawei has more than 180,000 employees. In order to support its fast business development around the globe, Huawei has eight data centers for its internal I.T. department, which have been running 800+ applications in 100K+ VMs to serve these 180,000 users. With the rapid increase of new applications, the cost and efficiency of management and deployment of VM-based apps all became critical challenges for business agility. "It's very much a distributed system so we found that managing all of the tasks in a more consistent way is always a challenge," says Peixin Hou, the company's Chief Software Architect and Community Director for Open Source. "We wanted to move into a more agile and decent practice."

+ +

Solution

+ +

After deciding to use container technology, Huawei began moving the internal I.T. department's applications to run on Kubernetes. So far, about 30 percent of these applications have been transferred to cloud native.

+ +

Impact

+ +

"By the end of 2016, Huawei's internal I.T. department managed more than 4,000 nodes with tens of thousands containers using a Kubernetes-based Platform as a Service (PaaS) solution," says Hou. "The global deployment cycles decreased from a week to minutes, and the efficiency of application delivery has been improved 10 fold." For the bottom line, he says, "We also see significant operating expense spending cut, in some circumstances 20-30 percent, which we think is very helpful for our business." Given the results Huawei has had internally – and the demand it is seeing externally – the company has also built the technologies into FusionStage™, the PaaS solution it offers its customers.

+ +{{< case-studies/quote author="Peixin Hou, chief software architect and community director for open source" >}} +"If you're a vendor, in order to convince your customer, you should use it yourself. Luckily because Huawei has a lot of employees, we can demonstrate the scale of cloud we can build using this technology." +{{< /case-studies/quote >}} + +

Huawei's Kubernetes journey began with one developer. Over two years ago, one of the engineers employed by the networking and telecommunications giant became interested in Kubernetes, the technology for managing application containers across clusters of hosts, and started contributing to its open source community. As the technology developed and the community grew, he kept telling his managers about it.

+ +

And as fate would have it, at the same time, Huawei was looking for a better orchestration system for its internal enterprise I.T. department, which supports every business flow processing. "We have more than 180,000 employees worldwide, and a complicated internal procedure, so probably every week this department needs to develop some new applications," says Peixin Hou, Huawei's Chief Software Architect and Community Director for Open Source. "Very often our I.T. departments need to launch tens of thousands of containers, with tasks running across thousands of nodes across the world. It's very much a distributed system, so we found that managing all of the tasks in a more consistent way is always a challenge."

+ +

In the past, Huawei had used virtual machines to encapsulate applications, but "every time when we start a VM," Hou says, "whether because it's a new service or because it was a service that was shut down because of some abnormal node functioning, it takes a lot of time." Huawei turned to containerization, so the timing was right to try Kubernetes. It took a year to adopt that engineer's suggestion – the process "is not overnight," says Hou – but once in use, he says, "Kubernetes basically solved most of our problems. Before, the time of deployment took about a week, now it only takes minutes. The developers are happy. That department is also quite happy."

+ +

Hou sees great benefits to the company that come with using this technology: "Kubernetes brings agility, scale-out capability, and DevOps practice to the cloud-based applications," he says. "It provides us with the ability to customize the scheduling architecture, which makes possible the affinity between container tasks that gives greater efficiency. It supports multiple container formats. It has extensive support for various container networking solutions and container storage."

+ +{{< case-studies/quote image="/images/case-studies/huawei/banner3.jpg" >}} +"Kubernetes basically solved most of our problems. Before, the time of deployment took about a week, now it only takes minutes. The developers are happy. That department is also quite happy." +{{< /case-studies/quote >}} + +

And not least of all, there's an impact on the bottom line. Says Hou: "We also see significant operating expense spending cut in some circumstances 20-30 percent, which is very helpful for our business."

+ +

Pleased with those initial results, and seeing a demand for cloud native technologies from its customers, Huawei doubled down on Kubernetes. In the spring of 2016, the company became not only a user but also a vendor.

+ +

"We built the Kubernetes technologies into our solutions," says Hou, referring to Huawei's FusionStage™ PaaS offering. "Our customers, from very big telecommunications operators to banks, love the idea of cloud native. They like Kubernetes technology. But they need to spend a lot of time to decompose their applications to turn them into microservice architecture, and as a solution provider, we help them. We've started to work with some Chinese banks, and we see a lot of interest from our customers like China Mobile and Deutsche Telekom."

+ +

"If you're just a user, you're just a user," adds Hou. "But if you're a vendor, in order to even convince your customers, you should use it yourself. Luckily because Huawei has a lot of employees, we can demonstrate the scale of cloud we can build using this technology. We provide customer wisdom." While Huawei has its own private cloud, many of its customers run cross-cloud applications using Huawei's solutions. It's a big selling point that most of the public cloud providers now support Kubernetes. "This makes the cross-cloud transition much easier than with other solutions," says Hou.

+ +{{< case-studies/quote image="/images/case-studies/huawei/banner4.jpg" >}} +"Our customers, from very big telecommunications operators to banks, love the idea of cloud native. They like Kubernetes technology. But they need to spend a lot of time to decompose their applications to turn them into microservice architecture, and as a solution provider, we help them." +{{< /case-studies/quote >}} + +

Within Huawei itself, once his team completes the transition of the internal business procedure department to Kubernetes, Hou is looking to convince more departments to move over to the cloud native development cycle and practice. "We have a lot of software developers, so we will provide them with our platform as a service solution, our own product," he says. "We would like to see significant cuts in their iteration cycle."

+ +

Having overseen the initial move to Kubernetes at Huawei, Hou has advice for other companies considering the technology: "When you start to design the architecture of your application, think about cloud native, think about microservice architecture from the beginning," he says. "I think you will benefit from that."

+ +

But if you already have legacy applications, "start from some microservice-friendly part of those applications first, parts that are relatively easy to be decomposed into simpler pieces and are relatively lightweight," Hou says. "Don't think from day one that within how many days I want to move the whole architecture, or move everything into microservices. Don't put that as a kind of target. You should do it in a gradual manner. And I would say for legacy applications, not every piece would be suitable for microservice architecture. No need to force it."

+ +

After all, as enthusiastic as Hou is about Kubernetes at Huawei, he estimates that "in the next 10 years, maybe 80 percent of the workload can be distributed, can be run on the cloud native environments. There's still 20 percent that's not, but it's fine. If we can make 80 percent of our workload really be cloud native, to have agility, it's a much better world at the end of the day."

+ +{{< case-studies/quote >}} +"In the next 10 years, maybe 80 percent of the workload can be distributed, can be run on the cloud native environments. There's still 20 percent that's not, but it's fine. If we can make 80 percent of our workload really be cloud native, to have agility, it's a much better world at the end of the day." +{{< /case-studies/quote >}} + +

In the nearer future, Hou is looking forward to new features that are being developed around Kubernetes, not least of all the ones that Huawei is contributing to. Huawei engineers have worked on the federation feature (which puts multiple Kubernetes clusters in a single framework to be managed seamlessly), scheduling, container networking and storage, and a just-announced technology called Container Ops, which is a DevOps pipeline engine. "This will put every DevOps job into a container," he explains. "And then this container mechanism is running using Kubernetes, but is also used to test Kubernetes. With that mechanism, we can make the containerized DevOps jobs be created, shared and managed much more easily than before."

+ +

Still, Hou sees this technology as only halfway to its full potential. First and foremost, he'd like to expand the scale it can orchestrate, which is important for supersized companies like Huawei – as well as some of its customers.

+ +

Hou proudly notes that two years after that first Huawei engineer became a contributor to and evangelist for Kubernetes, Huawei is now a top contributor to the community. "We've learned that the more you contribute to the community," he says, "the more you get back."

\ No newline at end of file diff --git a/content/bn/case-studies/ibm/ibm_featured_logo.png b/content/bn/case-studies/ibm/ibm_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ibm/ibm_featured_logo.svg b/content/bn/case-studies/ibm/ibm_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ibm/index.html b/content/bn/case-studies/ibm/index.html index e69de29bb2..e93536d159 100644 --- a/content/bn/case-studies/ibm/index.html +++ b/content/bn/case-studies/ibm/index.html @@ -0,0 +1,80 @@ +--- +title: IBM Case Study +linkTitle: IBM +case_study_styles: true +cid: caseStudies +logo: ibm_featured_logo.svg +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/ibm/banner1.jpg +heading_title_logo: /images/ibm_logo.png +subheading: > + Building an Image Trust Service on Kubernetes with Notary and TUF +case_study_details: + - Company: IBM + - Location: Armonk, New York + - Industry: Cloud Computing +--- + +

Challenge

+ +

IBM Cloud offers public, private, and hybrid cloud functionality across a diverse set of runtimes from its OpenWhisk-based function as a service (FaaS) offering, managed Kubernetes and containers, to Cloud Foundry platform as a service (PaaS). These runtimes are combined with the power of the company's enterprise technologies, such as MQ and DB2, its modern artificial intelligence (AI) Watson, and data analytics services. Users of IBM Cloud can exploit capabilities from more than 170 different cloud native services in its catalog, including capabilities such as IBM's Weather Company API and data services. In the later part of 2017, the IBM Cloud Container Registry team wanted to build out an image trust service.

+ +

Solution

+ +

The work on this new service culminated with its public availability in the IBM Cloud in February 2018. The image trust service, called Portieris, is fully based on the Cloud Native Computing Foundation (CNCF) open source project Notary, according to Michael Hough, a software developer with the IBM Cloud Container Registry team. Portieris is a Kubernetes admission controller for enforcing content trust. Users can create image security policies for each Kubernetes namespace, or at the cluster level, and enforce different levels of trust for different images. Portieris is a key part of IBM's trust story, since it makes it possible for users to consume the company's Notary offering from within their IKS clusters. The offering is that Notary server runs in IBM's cloud, and then Portieris runs inside the IKS cluster. This enables users to be able to have their IKS cluster verify that the image they're loading containers from contains exactly what they expect it to, and Portieris is what allows an IKS cluster to apply that verification.

+ +

Impact

+ +

IBM's intention in offering a managed Kubernetes container service and image registry is to provide a fully secure end-to-end platform for its enterprise customers. "Image signing is one key part of that offering, and our container registry team saw Notary as the de facto way to implement that capability in the current Docker and container ecosystem," Hough says. The company had not been offering image signing before, and Notary is the tool it used to implement that capability. "We had a multi-tenant Docker Registry with private image hosting," Hough says. "The Docker Registry uses hashes to ensure that image content is correct, and data is encrypted both in flight and at rest. But it does not provide any guarantees of who pushed an image. We used Notary to enable users to sign images in their private registry namespaces if they so choose."

+ +{{< case-studies/quote author="Michael Hough, a software developer with the IBM Container Registry team" >}} +"We see CNCF as a safe haven for cloud native open source, providing stability, longevity, and expected maintenance for member projects—no matter the originating vendor or project." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Docker had already created the Notary project as an implementation of The Update Framework (TUF), and this implementation of TUF provided the capabilities for Docker Content Trust. +{{< /case-studies/lead >}} + +

"After contribution to CNCF of both TUF and Notary, we perceived that it was becoming the de facto standard for image signing in the container ecosystem", says Michael Hough, a software developer with the IBM Cloud Container Registry team.

+ +

The key reason for selecting Notary was that it was already compatible with the existing authentication stack IBM's container registry was using. So was the design of TUF, which does not require the registry team to have to enter the business of key management. Both of these were "attractive design decisions that confirmed our choice of Notary," he says.

+ +

The introduction of Notary to implement image signing capability in IBM Cloud encourages increased security across IBM's cloud platform, "where we expect it will include both the signing of official IBM images as well as expected use by security-conscious enterprise customers," Hough says. "When combined with security policy implementations, we expect an increased use of deployment policies in CI/CD pipelines that allow for fine-grained control of service deployment based on image signers."

+ +

The availability of image signing "is a huge benefit to security-conscious customers who require this level of image provenance and security," Hough says. "With our IBM Cloud Kubernetes as-a-service offering and the admission controller we have made available, it allows both IBM services as well as customers of the IBM public cloud to use security policies to control service deployment."

+ +{{< case-studies/quote + image="/images/case-studies/ibm/banner3.jpg" + author="Michael Hough, a software developer with the IBM Cloud Container Registry team" +>}} +"Image signing is one key part of our Kubernetes container service offering, and our container registry team saw Notary as the de facto way to implement that capability in the current Docker and container ecosystem" +{{< /case-studies/quote >}} + +

Now that the Notary-implemented service is generally available in IBM's public cloud as a component of its existing IBM Cloud Container Registry, it is deployed as a highly available service across five IBM Cloud regions. This high-availability deployment has three instances across two zones in each of the five regions, load balanced with failover support. "We have also deployed it with end-to-end TLS support through to our back-end IBM Cloudant persistence storage service," Hough says.

+ +

The IBM team has created and open sourced a Kubernetes admission controller called Portieris, which uses Notary signing information combined with customer-defined security policies to control image deployment into their cluster. "We are hoping to drive adoption of Portieris through its use of our Notary offering," Hough says.

+ +

IBM has been a key player in the creation and support of open source foundations, including CNCF. Todd Moore, IBM's vice president of Open Technology, is the current CNCF governing board chair and a number of IBMers are active across many of the CNCF member projects.

+ +{{< case-studies/quote + image="/images/case-studies/ibm/banner4.jpg" + author="Michael Hough, a software developer with the IBM Cloud Container Registry team" +>}} +"With our IBM Cloud Kubernetes as-a-service offering and the admission controller we have made available, it allows both IBM services as well as customers of the IBM public cloud to use security policies to control service deployment." +{{< /case-studies/quote >}} + +

"Given that, we see CNCF as a safe haven for cloud native open source, providing stability, longevity, and expected maintenance for member projects—no matter the originating vendor or project," Hough says. Because the entire cloud native world is a fast-moving area with many competing vendors and solutions, "we see the CNCF model as an arbiter of openness and fair play across the ecosystem," he says.

+ +

With both TUF and Notary as part of CNCF, IBM expects there to be standardization around these capabilities beyond just de facto standards for signing and provenance. IBM has determined to not simply consume Notary, but also to contribute to the open source project where applicable. "IBMers have contributed a CouchDB backend to support our use of IBM Cloudant as the persistent store; and are working on generalization of the pkcs11 provider, allowing support of other security hardware devices beyond Yubikey," Hough says.

+ +{{< case-studies/quote author="Michael Hough, a software developer with the IBM Cloud Container Registry team" >}} +"There are new projects addressing these challenges, including within CNCF. We will definitely be following these advancements with interest. We found the Notary community to be an active and friendly community open to changes, such as our addition of a CouchDB backend for persistent storage." +{{< /case-studies/quote >}} + +

The company has used other CNCF projects containerd, Envoy, Prometheus, gRPC, and CNI, and is looking into SPIFFE and SPIRE as well for potential future use.

+ +

What advice does Hough have for other companies that are looking to deploy Notary or a cloud native infrastructure?

+ +

"While this is true for many areas of cloud native infrastructure software, we found that a high-availability, multi-region deployment of Notary requires a solid implementation to handle certificate management and rotation," he says. "There are new projects addressing these challenges, including within CNCF. We will definitely be following these advancements with interest. We found the Notary community to be an active and friendly community open to changes, such as our addition of a CouchDB backend for persistent storage."

\ No newline at end of file diff --git a/content/bn/case-studies/ing/index.html b/content/bn/case-studies/ing/index.html index e69de29bb2..037ba9775d 100644 --- a/content/bn/case-studies/ing/index.html +++ b/content/bn/case-studies/ing/index.html @@ -0,0 +1,78 @@ +--- +title: ING Case Study +linkTitle: ING +case_study_styles: true +cid: caseStudies +weight: 50 +featured: true +quote: > + The big cloud native promise to our business is the ability to go from idea to production within 48 hours. We are some years away from this, but that's quite feasible to us. + +new_case_study_styles: true +heading_background: /images/case-studies/ing/banner1.jpg +heading_title_logo: /images/ing_logo.png +subheading: > + Driving Banking Innovation with Cloud Native +case_study_details: + - Company: ING + - Location: Amsterdam, Netherlands + - Industry: Finance +--- + +

Challenge

+ +

After undergoing an agile transformation, ING realized it needed a standardized platform to support the work their developers were doing. "Our DevOps teams got empowered to be autonomous," says Infrastructure Architect Thijs Ebbers. "It has benefits; you get all kinds of ideas. But a lot of teams are going to devise the same wheel. Teams started tinkering with Docker, Docker Swarm, Kubernetes, Mesos. Well, it's not really useful for a company to have one hundred wheels, instead of one good wheel.

+ +

Solution

+ +

Using Kubernetes for container orchestration and Docker for containerization, the ING team began building an internal public cloud for its CI/CD pipeline and green-field applications. The pipeline, which has been built on Mesos Marathon, will be migrated onto Kubernetes. The bank-account management app Yolt in the U.K. (and soon France and Italy) market already is live hosted on a Kubernetes framework. At least two greenfield projects currently on the Kubernetes framework will be going into production later this year. By the end of 2018, the company plans to have converted a number of APIs used in the banking customer experience to cloud native APIs and host these on the Kubernetes-based platform.

+ +

Impact

+ +

"Cloud native technologies are helping our speed, from getting an application to test to acceptance to production," says Infrastructure Architect Onno Van der Voort. "If you walk around ING now, you see all these DevOps teams, doing stand-ups, demoing. They try to get new functionality out there really fast. We held a hackathon for one of our existing components and basically converted it to cloud native within 2.5 days, though of course the tail takes more time before code is fully production ready."

+ +{{< case-studies/quote author="Thijs Ebbers, Infrastructure Architect, ING">}} +"The big cloud native promise to our business is the ability to go from idea to production within 48 hours. We are some years away from this, but that's quite feasible to us." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +ING has long embraced innovation in banking, launching the internet-based ING Direct in 1997. +{{< /case-studies/lead >}} + +

In that same spirit, the company underwent an agile transformation a few years ago. "Our DevOps teams got empowered to be autonomous," says Infrastructure Architect Thijs Ebbers. "It has benefits; you get all kinds of ideas. But a lot of teams are going to devise the same wheel. Teams started tinkering with Docker, Docker Swarm, Kubernetes, Mesos. Well, it's not really useful for a company to have one hundred wheels, instead of one good wheel."

+ +

Looking to standardize the deployment process within the company's strict security guidelines, the team looked at several solutions and found that in the past year, "Kubernetes won the container management framework wars," says Ebbers. "We decided to standardize ING on a Kubernetes framework." Everything is run on premise due to banking regulations, he adds, but "we will be building an internal public cloud. We are trying to get on par with what public clouds are doing. That's one of the reasons we got Kubernetes."

+ +

They also embraced Docker to address a major pain point in ING's CI/CD pipeline. Before containerization, "Every development team had to order a VM, and it was quite a heavy delivery model for them," says Infrastructure Architect Onno Van der Voort. "Another use case for containerization is when the application travels through the pipeline, they fire up Docker containers to do test work against the applications and after they've done the work, the containers get killed again."

+ +{{< case-studies/quote + image="/images/case-studies/ing/banner3.jpg" + author="Thijs Ebbers, Infrastructure Architect, ING" +>}} +"We decided to standardize ING on a Kubernetes framework." Everything is run on premise due to banking regulations, he adds, but "we will be building an internal public cloud. We are trying to get on par with what public clouds are doing. That's one of the reasons we got Kubernetes." +{{< /case-studies/quote >}} + +

Because of industry regulations, applications are only allowed to go through the pipeline, where compliance is enforced, rather than be deployed directly into a container. "We have to run the complete platform of services we need, many routing from different places," says Van der Voort. "We need this Kubernetes framework for deploying the containers, with all those components, monitoring, logging. It's complex." For that reason, ING has chosen to start on the OpenShift Origin Kubernetes distribution.

+ +

Already, "cloud native technologies are helping our speed, from getting an application to test to acceptance to production," says Van der Voort. "If you walk around ING now, you see all these DevOps teams, doing stand-ups, demoing. They try to get new functionality out there really fast. We held a hackathon for one of our existing components and basically converted it to cloud native within 2.5 days, though of course the tail takes more time before code is fully production ready."

+ +

The pipeline, which has been built on Mesos Marathon, will be migrated onto Kubernetes. Some legacy applications are also being rewritten as cloud native in order to run on the framework. At least two smaller greenfield projects built on Kubernetes will go into production this year. By the end of 2018, the company plans to have converted a number of APIs used in the banking customer experience to cloud native APIs and host these on the Kubernetes-based platform.

+ +{{< case-studies/quote + image="/images/case-studies/ing/banner4.jpg" + author="Onno Van der Voort, Infrastructure Architect, ING" +>}} +"We have to run the complete platform of services we need, many routing from different places. We need this Kubernetes framework for deploying the containers, with all those components, monitoring, logging. It's complex." +{{< /case-studies/quote >}} + +

The team, however, doesn't see the bank's back-end systems going onto the Kubernetes platform. "Our philosophy is it only makes sense to move things to cloud if they are cloud native," says Van der Voort. "If you have traditional architecture, build traditional patterns, it doesn't hold any value to go to the cloud." Adds Cloud Platform Architect Alfonso Fernandez-Barandiaran: "ING has a strategy about where we will go, in order to improve our agility. So it's not about how cool this technology is, it's about finding the right technology and the right approach."

+ +

The Kubernetes framework will be hosting some greenfield projects that are high priority for ING: applications the company is developing in response to PSD2, the European Commission directive requiring more innovative online and mobile payments that went into effect at the beginning of 2018. For example, a bank-account management app called Yolt, serving the U.K. market (and soon France and Italy), was built on a Kubernetes platform and has gone into production. ING is also developing blockchain-enabled applications that will live on the Kubernetes platform. "We've been contacted by a lot of development teams that have ideas with what they want to do with containers," says Ebbers.

+ +{{< case-studies/quote author="Alfonso Fernandez-Barandiaran, Cloud Platform Architect, ING" >}} +Even with the particular requirements that come in banking, ING has managed to take a lead in technology and innovation. "Every time we have constraints, we look for maybe a better way that we can use this technology." +{{< /case-studies/quote >}} + +

Even with the particular requirements that come in banking, ING has managed to take a lead in technology and innovation. "Every time we have constraints, we look for maybe a better way that we can use this technology," says Fernandez-Barandiaran.

+ +

The results, after all, are worth the effort. "The big cloud native promise to our business is the ability to go from idea to production within 48 hours," says Ebbers. "That would require all these projects to be mature. We are some years away from this, but that's quite feasible to us."

diff --git a/content/bn/case-studies/ing/ing_featured_logo.png b/content/bn/case-studies/ing/ing_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ing/ing_featured_logo.svg b/content/bn/case-studies/ing/ing_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/jd-com/index.html b/content/bn/case-studies/jd-com/index.html index e69de29bb2..447beb0653 100644 --- a/content/bn/case-studies/jd-com/index.html +++ b/content/bn/case-studies/jd-com/index.html @@ -0,0 +1,79 @@ +--- +title: JD.com Case Study +linkTitle: jd-com +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/jdcom/banner1.jpg +heading_title_logo: /images/jdcom_logo.png +subheading: > + JD.com: How JD.com Pioneered Kubernetes for E-Commerce at Hyperscale +case_study_details: + - Company: JD.com + - Location: Beijing, China + - Industry: eCommerce +--- + +

Challenge

+ +

With more than 300 million active users and total 2017 revenue of more than $55 billion, JD.com is China's largest retailer, and its operations are the epitome of hyperscale. For example, there are more than a trillion images in JD.com's product databases—with 100 million being added daily—and this enormous amount of data needs to be instantly accessible. In 2014, JD.com moved its applications to containers running on bare metal machines using OpenStack and Docker to "speed up the delivery of our computing resources and make the operations much simpler," says Haifeng Liu, JD.com's Chief Architect. But by the end of 2015, with tens of thousands of nodes running in multiple data centers, "we encountered a lot of problems because our platform was not strong enough, and we suffered from bottlenecks and scalability issues," says Liu. "We needed infrastructure for the next five years of development, now."

+ +

Solution

+ +

JD.com turned to Kubernetes to accommodate its clusters. At the beginning of 2016, the company began to transition from OpenStack to Kubernetes, and today, JD.com runs the world's largest Kubernetes cluster. "Kubernetes has provided a strong foundation on top of which we have customized the solution to suit our needs as China's largest retailer."

+ +

Impact

+ +

"We have greater data center efficiency, better managed resources, and smarter deployment with the Kubernetes platform," says Liu. Deployment time went from several hours to tens of seconds. Efficiency has improved by 20-30%, measured in IT costs. With the further optimizations the team is working on, Liu believes there is the potential to save hundreds of millions of dollars a year. But perhaps the best indication of success was the annual Singles Day shopping event, which ran on the Kubernetes platform for the first time in 2018. Over 11 days, transaction volume on JD.com was $23 billion, and "our e-commerce platforms did great," says Liu. "Infrastructure led the way to prep for 11.11. We took the approach of predicting volume, emulating the behavior of customers to prepare beforehand, and drilled for malfunctions. Because of Kubernetes's scalability, we were able to handle an extremely high level of demand."

+ +{{< case-studies/quote author="HAIFENG LIU, CHIEF ARCHITECT, JD.com" >}} +"Kubernetes helped us reduce the complexity of operations to make distributed systems stable and scalable. Most importantly, we can leverage Kubernetes for scheduling resources to reduce hardware costs. That's the big win." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +With more than 300 million active users and $55.7 billion in annual revenues last year, JD.com is China's largest retailer, and its operations are the epitome of hyperscale. +{{< /case-studies/lead >}} + +

For example, there are more than a trillion images in JD.com's product databases for customers, with 100 million being added daily. And this enormous amount of data needs to be instantly accessible to enable a smooth online customer experience.

+ +

In 2014, JD.com moved its applications to containers running on bare metal machines using OpenStack and Docker to "speed up the delivery of our computing resources and make the operations much simpler," says Haifeng Liu, JD.com's Chief Architect. But by the end of 2015, with hundreds of thousands of nodes in multiple data centers, "we encountered a lot of problems because our platform was not strong enough, and we suffered from bottlenecks and scalability issues," Liu adds. "We needed infrastructure for the next five years of development, now."

+ +

After considering a number of orchestration technologies, JD.com decided to adopt Kubernetes to accommodate its ever-growing clusters. "The main reason is because Kubernetes can give us more efficient, scalable and much simpler application deployments, plus we can leverage it to do flexible platform scheduling," says Liu.

+ +{{< case-studies/quote + image="/images/case-studies/jdcom/banner3.jpg" + author="HAIFENG LIU, CHIEF ARCHITECT, JD.com" +>}} +"We customized Kubernetes and built a modern system on top of it. This entire ecosystem of Kubernetes plus our own optimizations have helped us save costs and time." +{{< /case-studies/quote >}} + +

The fact that Kubernetes is based on Google's Borg also gave the company confidence. The team liked that Kubernetes has a clear and simple architecture, and that it's developed mostly in Go, which is a popular language within JD.com. Though he felt that at the time Kubernetes "was not mature enough," Liu says, "we adopted it anyway."

+ +

The team spent a year developing the new container engine platform based on Kubernetes, and at the end of 2016, began promoting it within the company. "We wanted the cluster to be the default way for creating services, so scalability is easier," says Liu. "We talked to developers, interest grew, and we solved problems together." Some of these problems included networking performance and etcd scalability. "But during the past two years, Kubernetes has become more mature and very stable," he adds.

+ +

Today, the company runs the world's largest Kubernetes cluster. "We customized Kubernetes and built a modern system on top of it," says Liu. "This entire ecosystem of Kubernetes plus our own optimizations have helped us save costs and time. We have greater data center efficiency, better managed resources, and smarter deployment with the Kubernetes platform."

+ +{{< case-studies/quote + image="/images/case-studies/jdcom/banner4.jpg" + author="HAIFENG LIU, CHIEF ARCHITECT, JD.com" +>}} +"My advice is first you need to combine this technology with your own businesses, and the second is you need clear goals. You cannot just use the technology because others are using it. You need to consider your own objectives." +{{< /case-studies/quote >}} + +

The results are clear: Deployment time went from several hours to tens of seconds. Efficiency has improved by 20-30%, measured in IT costs. But perhaps the best indication of success was the annual Singles Day shopping event, which ran on the Kubernetes platform for the first time in 2018. Over 11 days, transaction volume on JD.com was $23 billion, and "our e-commerce platforms did great," says Liu. "Infrastructure led the way to prep for 11.11. We took the approach of predicting volume, emulating the behavior of customers to prepare beforehand, and drilled for malfunctions. Because of Kubernetes's scalability, we were able to handle an extremely high level of demand."

+ +

JD.com is now in its second stage with Kubernetes: The platform is already stable, scalable, and flexible, so the focus is on how to run things much more efficiently to further reduce costs. With the optimizations the team is working on with resource management, Liu believes there is the potential to save hundreds of millions of dollars a year.

+ +

"We run Kubernetes and container clusters on roughly tens of thousands of physical bare metal nodes," he says. "Using Kubernetes and leveraging our own machine learning pipeline to predict how many resources we need for each application we use, and our own intelligent scaling algorithm, we can improve our resource usage. If we boost the resource usage, for example, by several percent, that means we can reduce huge hardware costs. Then we don't need that many servers to get that same amount of workload. That can save us a lot of resources."

+ +{{< case-studies/quote author="HAIFENG LIU, CHIEF ARCHITECT, JD.com" >}} +"We can share our successful experience with the community, and we also receive good feedback from others. So it's mutually beneficial." +{{< /case-studies/quote >}} + +

JD.com, which won CNCF's 2018 End User Award, is also using Helm, CNI, Harbor, and Vitess on its platform. JD.com developers have made considerable contributions to Vitess, the CNCF project for scalable MySQL cluster management, and the company hopes to donate its own project to CNCF in the near future. Community participation is a priority for JD.com. "We have a good partnership with this community," says Liu. "We can share our successful experience with the community, and we also receive good feedback from others. So it's mutually beneficial."

+ +

To that end, Liu offers this advice for other companies considering adopting cloud native technology. "First you need to combine this technology with your own businesses, and the second is you need clear goals," he says. "You cannot just use the technology because others are using it. You need to consider your own objectives."

+ +

For JD.com's objectives, these cloud native technologies have been an ideal fit with the company's own homegrown innovation. "Kubernetes helped us reduce the complexity of operations to make distributed systems stable and scalable," says Liu. "Most importantly, we can leverage Kubernetes for scheduling resources to reduce hardware costs. That's the big win."

\ No newline at end of file diff --git a/content/bn/case-studies/jd-com/jd-com_featured_logo.png b/content/bn/case-studies/jd-com/jd-com_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/jd-com/jd-com_featured_logo.svg b/content/bn/case-studies/jd-com/jd-com_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/naic/index.html b/content/bn/case-studies/naic/index.html index e69de29bb2..23955bdef8 100644 --- a/content/bn/case-studies/naic/index.html +++ b/content/bn/case-studies/naic/index.html @@ -0,0 +1,87 @@ +--- +title: NAIC Case Study +linkTitle: NAIC +case_study_styles: true +cid: caseStudies +logo: naic_featured_logo.png +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/naic/banner1.jpg +heading_title_logo: /images/naic_logo.png +subheading: > + A Culture and Technology Transition Enabled by Kubernetes +case_study_details: + - Company: NAIC + - Location: Washington, DC + - Industry: Regulatory +--- + +

Challenge

+ +

The National Association of Insurance Commissioners (NAIC), the U.S. standard-setting and regulatory support organization, was looking for a way to deliver new services faster to provide more value for members and staff. It also needed greater agility to improve productivity internally.

+ +

Solution

+ +

Beginning in 2016, they started using Cloud Native Computing Foundation (CNCF) tools such as Prometheus. NAIC began hosting internal systems and development systems on Kubernetes at the beginning of 2018, as part of a broad move toward the public cloud. "Our culture and technology transition is a strategy embraced by our top leaders," says Dan Barker, Chief Enterprise Architect. "It has already proven successful by allowing us to accelerate our value pipeline by more than double while decreasing our costs by more than half. We are also seeing customer satisfaction increase as we add more and more applications to these new technologies."

+ +

Impact

+ +

Leveraging Kubernetes, "our development teams can create rapid prototypes far faster than they used to," Barker said. Applications running on Kubernetes are more resilient than those running in other environments. The deployment of open source solutions is helping influence company culture, as NAIC becomes a more open and transparent organization.

+ +

"We completed a small prototype in two days that would have previously taken at least a month," Barker says. Resiliency is currently measured in how much downtime systems have. "They've basically had none, and the occasional issue is remedied in minutes," he says.

+ +{{< case-studies/quote author="Dan Barker, Chief Enterprise Architect, NAIC" >}} +"Our culture and technology transition is a strategy embraced by our top leaders. It has already proven successful by allowing us to accelerate our value pipeline by more than double while decreasing our costs by more than half. We are also seeing customer satisfaction increase as we add more and more applications to these new technologies." +{{< /case-studies/quote >}} + +

NAIC—which was created and overseen by the chief insurance regulators from the 50 states, the District of Columbia and five U.S. territories—provides a means through which state insurance regulators establish standards and best practices, conduct peer reviews, and coordinate their regulatory oversight. Their staff supports these efforts and represents the collective views of regulators in the United States and internationally. NAIC members, together with the organization's central resources, form the national system of state-based insurance regulation in the United States.

+ +

The organization has been using the cloud for years, and wanted to find more ways to quickly deliver new services that provide more value for members and staff. They looked to Kubernetes for a solution. Within NAIC, several groups are leveraging Kubernetes, one being the Platform Engineering Team. "The team building out these tools are not only deploying and operating Kubernetes, but they're also using them," Barker says. "In fact, we're using GitLab to deploy Kubernetes with a pipeline using kops. This team was created from developers, operators, and quality engineers from across the company, so their jobs have changed quite a bit."

+ +

In addition, NAIC is onboarding teams to the new platform, and those teams have seen a lot of change in how they work and what they can do. "They now have more power in creating their own infrastructure and deploying their own applications," Barker says. They also use pipelines to facilitate their currently manual processes. NAIC has consumers who are using GitLab heavily, and they're starting to use Kubernetes to deploy simple applications that help their internal processes.

+ +{{< case-studies/quote + image="/images/case-studies/naic/banner3.jpg" + author="Dan Barker, Chief Enterprise Architect, NAIC" +>}} +"In our experience, vendor lock-in and tooling that is highly specific results in less resilient technology with fewer minds working to solve problems and grow the community." +{{< /case-studies/quote >}} + +

"We needed greater agility to enable our own productivity internally," he says. "We decided it was right for us to move everything to the public cloud [Amazon Web Services] to help with that process and be able to access many of the native tools that allows us to move faster by not needing to build everything." +The NAIC also wanted to be cloud-agnostic, "and Kubernetes helps with this for our compute layer," Barker says. "Compute is pretty standard across the clouds, and now we can take advantage of any of them while getting all of the other features Kubernetes offers."

+ +

The NAIC currently hosts internal systems and development systems on Kubernetes, and has already seen how impactful it can be. "Our development teams can create rapid prototypes in minutes instead of weeks," Barker says. "This recently happened with an internal tool that had no measurable wait time on the infrastructure. It was solely development bound. There is now a central shared resource that lives in AWS, which means it can grow as needed."

+ +

The native integrations into Kubernetes at NAIC has made it easy to write code and have it running in minutes instead of weeks. Applications running on Kubernetes have also proven to be more resilient than those running in other environments. "We even have teams using this to create more internal tools to help with communication or automating some of their current tasks," Barker says.

+ +

"We knew that Kubernetes had become the de facto standard for container orchestration," he says. "Two major factors for selecting this were the three major cloud vendors hosting their own versions and having it hosted in a neutral party as fully open source."

+ +

As for other CNCF projects, NAIC is using Prometheus on a small scale and hopes to continue using it moving forward because of the seamless integration with Kubernetes. The Association also is considering gRPC as its internal communications standard, Envoy in conjunction with Istio for service mesh, OpenTracing and Jaeger for tracing aggregation, and Fluentd with its Elasticsearch cluster.

+ +{{< case-studies/quote + image="/images/case-studies/naic/banner4.jpg" + author="Dan Barker, Chief Enterprise Architect, NAIC" +>}} +"We knew that Kubernetes had become the de facto standard for container orchestration. Two major factors for selecting this were the three major cloud vendors hosting their own versions and having it hosted in a neutral party as fully open source." +{{< /case-studies/quote >}} + +

The open governance and broad industry participation in CNCF provided a comfort level with the technology, Barker says. "We also see it as helping to influence our own company culture," he says. "We're moving to be a more open and transparent company, and we are encouraging our staff to get involved with the different working groups and codebases. We recently became CNCF members to help further our commitment to community contribution and transparency."

+ +

Factors such as vendor-neutrality and cross-industry investment were important in the selection. "In our experience, vendor lock-in and tooling that is highly specific results in less resilient technology with fewer minds working to solve problems and grow the community," Barker says.

+ +

NAIC is a largely Oracle shop, Barker says, and has been running mostly Java on JBoss. "However, we have years of history with other applications," he says. "Some of these have been migrated by completely rewriting the application, while others are just being modified slightly to fit into this new paradigm."

+ +

Running on AWS cloud, the Association has not specifically taken a microservices approach. "We are moving to microservices where practical, but we haven't found that it's a necessity to operate them within Kubernetes," Barker says.

+ +

All of its databases are currently running within public cloud services, but they have explored eventually running those in Kubernetes, as it makes sense. "We're doing this to get more reuse from common components and to limit our failure domains to something more manageable and observable," Barker says.

+ +{{< case-studies/quote author="Dan Barker, Chief Enterprise Architect, NAIC" >}} +"We have been able to move much faster at lower cost than we were able to in the past," Barker says. "We were able to complete one of our projects in a year, when the previous version took over two years. And the new project cost $500,000 while the original required $3 million, and with fewer defects. We are also able to push out new features much faster." +{{< /case-studies/quote >}} + +

NAIC has seen a significant business impact from its efforts. "We have been able to move much faster at lower cost than we were able to in the past," Barker says. "We were able to complete one of our projects in a year, when the previous version took over two years. And the new project cost $500,000 while the original required $3 million, and with fewer defects. We are also able to push out new features much faster."

+ +

He says the organization is moving toward continuous deployment "because the business case makes sense. The research is becoming very hard to argue with. We want to reduce our batch sizes and optimize on delivering value to customers and not feature count. This is requiring a larger cultural shift than just a technology shift."

+ +

NAIC is "becoming more open and transparent, as well as more resilient to failure," Barker says. "Even our customers are wanting more and more of this and trying to figure out how they can work with us to accomplish our mutual goals faster. Members of the insurance industry have reached out so that we can better learn together and grow as an industry."

\ No newline at end of file diff --git a/content/bn/case-studies/naic/naic_featured_logo.png b/content/bn/case-studies/naic/naic_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/naic/naic_featured_logo.svg b/content/bn/case-studies/naic/naic_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/nav/index.html b/content/bn/case-studies/nav/index.html index e69de29bb2..14a4405ce0 100644 --- a/content/bn/case-studies/nav/index.html +++ b/content/bn/case-studies/nav/index.html @@ -0,0 +1,81 @@ +--- +title: Nav Case Study +linkTitle: Nav +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/nav/banner1.jpg +heading_title_logo: /images/nav_logo.png +subheading: > + How A Startup Reduced Its Infrastructure Costs by 50% With Kubernetes +case_study_details: + - Company: Nav + - Location: Salt Lake City, Utah, and San Mateo, California + - Industry: Financial services for businesses +--- + +

Challenge

+ +

Founded in 2012, Nav provides small business owners with access to their business credit scores from all three major commercial credit bureaus—Equifax, Experian and Dun & Bradstreet—and financing options that best fit their needs. Five years in, the startup was growing rapidly, and "our cloud environments were getting very large, and our usage of those environments was extremely low, like under 1%," says Director of Engineering Travis Jeppson. "We wanted our usage of cloud environments to be more tightly coupled with what we actually needed, so we started looking at containerization and orchestration to help us be able to run workloads that were distinct from one another but could share a similar resource pool."

+ +

Solution

+ +

After evaluating a number of orchestration solutions, the Nav team decided to adopt Kubernetes running on AWS. The strength of the community around Kubernetes was a strong draw, as well as its Google provenance. Plus, "the other solutions tended to be fairly heavy-handed, really complex, really large, and really hard to manage just off the bat," says Jeppson. "Kubernetes gave us a very simple way to be able to step into an orchestration solution that fit our needs at the time, but also the extensibility of it allowed us to be able to grow with it and be able to build in more features and functionality later on."

+ +

Impact

+ +

The four-person team got Kubernetes up and running in six months, and the full migration of Nav's 25 microservices was completed in another six months. The results have been impressive: Resource utilization, which led the company on this path in the first place, has increased from 1% to 40%. Launching a new service used to take two developers two weeks; now it takes only one developer less than 10 minutes. Deployments have increased 5x. And the company is saving 50% in infrastructure costs.

+ +{{< case-studies/quote author="Travis Jeppson, Director of Engineering, Nav" >}} + +
+"Kubernetes gave us a very simple way to be able to step into an orchestration solution that fit our needs at the time, but also the extensibility of it allowed us to be able to grow with it and be able to build in more features and functionality later on." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Founded in 2012, Nav provides small business owners with access to their business credit scores from all three major commercial credit bureaus—Equifax, Experian and Dun & Bradstreet—as well as details on their businesses' financial health and financing options that best fit their needs. Its mission boils down to this, says Director of Engineering Travis Jeppson: "to increase the success rate of small businesses." +{{< /case-studies/lead >}} + +

A couple of years ago, Nav recognized an obstacle in its own path to success. The business was growing rapidly, and "our cloud environments were getting very large, and our usage of those environments was extremely low, like under 1%," says Jeppson. "Most of the problem was around the ability to scale. We were just throwing money at it. 'Let's just spin up more servers. Let's just do more things in order to handle an increased load.' And with us being a startup, that could lead to our demise. We don't have the money to burn on that kind of stuff."

+ +

Plus, every new service had to go through 10 different people, taking an unacceptably long two weeks to launch. "All of the patch management and the server management was done very manually, and so we all had to watch it and maintain it really well," adds Jeppson. "It was just a very troublesome system."

+ +{{< case-studies/quote + image="/images/case-studies/nav/banner3.jpg" + author="Travis Jeppson, Director of Engineering, Nav" +>}} +"The community is absolutely vital: being able to pass ideas around, talk about a lot of the similar challenges that we're all facing, and just get help. I like that we're able to tackle the same problems for different reasons but help each other along the way." +{{< /case-studies/quote >}} + +

Jeppson had worked with containers at his previous job, and pitched that technology to Nav's management as a solution to these problems. He got the green light in early 2017. "We wanted our usage of cloud environments to be more tightly coupled with what we actually needed, so we started looking at containerization and orchestration to help us be able to run workloads that were distinct from one another but could share a similar resource pool," he says.

+ +

After evaluating a number of orchestration solutions, the company decided to adopt Kubernetes running on AWS. The strength of the community around Kubernetes was a strong draw, as was its Google origins. Additionally, "the other solutions tended to be fairly heavy-handed, really complex, really large, and really hard to manage just off the bat," says Jeppson. "Kubernetes gave us a very simple way to be able to step into an orchestration solution that fit our needs at the time, but the extensibility of it would also allow us to grow with it and build in more features and functionality later on."

+ +

Jeppson's four-person Engineering Services team got Kubernetes up and running in six months (they decided to use Kubespray to spin up clusters), and the full migration of Nav's 25 microservices and one primary monolith was completed in another six months. "We couldn't rewrite everything; we couldn't stop," he says. "We had to stay up, we had to stay available, and we had to have minimal amount of downtime. So we got really comfortable around our building pipeline, our metrics and logging, and then around Kubernetes itself: how to launch it, how to upgrade it, how to service it. And we moved little by little."

+ +{{< case-studies/quote + image="/images/case-studies/nav/banner4.jpg" + author="Travis Jeppson, Director of Engineering, Nav" +>}} +"Kubernetes has brought so much value to Nav by allowing all of these new freedoms that we had just never had before." +{{< /case-studies/quote >}} + +

A crucial part of the process involved educating Nav's 50 engineers and being transparent regarding the new workflow as well as the roadmap for the migration. Jeppson did regular presentations along the way, and a week of four-hours-a-day labs for the entire staff of engineers. He then created a repository in GitLab to house all of the information. "We showed all the frontend and backend developers how to go in, create their own namespace using kubectl, all themselves," he says. "Now, a lot of times, they just come to us and say, 'This is ready.' We click a little button in GitLab to allow it to release into production, and they're off to the races."

+ +

Since the migration was completed in early 2018, the results have been impressive: Resource utilization, which led the company on this path in the first place, has increased from 1% to 40%. Launching a new service used to take two developers two weeks; now it takes only one developer less than 10 minutes. Deployments have increased 5x, from 10 a day to 50 a day. And the company is saving 50% in infrastructure costs on the computational side. "Next we want to go in to address the database side, and once we do that, then we're going to continue to drop that cost quite a bit more," says Jeppson.

+ +

Kubernetes has also helped Nav with its compliance needs. Before, "we had to map one application to one server, mostly due to different compliance regulations around data," Jeppson says. "With the Kubernetes API, we could add in network policies and segregate that data and restrict it if needed." The company segregates its cluster into an unrestricted zone and a restricted zone, which has its own set of nodes where data protection happens. The company also uses the Twistlock tool to ensure security, "and that makes it a lot easier to sleep at night," he adds.

+ +{{< case-studies/quote author="Travis Jeppson, Director of Engineering, Nav" >}} +"We're talking four to 10 times the amount of traffic that we handle now, and it's just like, 'Oh, yeah. We're good. Kubernetes handles this for us.'" +{{< /case-studies/quote >}} + +

With Kubernetes in place, the Nav team also started improving the system's metrics and logging by adopting Prometheus. "Prometheus created a standard around metrics that was really easy for a developer to adopt," says Jeppson. "They have the freedom to display what they want, to do what they need, and keep their codebase clean, and that to us was absolutely a must."

+ +

Next up for Nav in the coming year: looking at tracing, storage, and service mesh. They're currently evaluating Envoy, OpenTracing, and Jaeger after spending much of KubeCon talking to other companies. "The community is absolutely vital: being able to pass ideas around, talk about a lot of the similar challenges that we're all facing, and just get help. I like that we're able to tackle the same problems for different reasons but help each other along the way," says Jeppson. "There's still so, so much to do around scalability, around being able to really fully adopt a cloud native solution."

+ +

Of course, it all starts with Kubernetes. With that technology, Jeppson's team has built a platform that allows Nav to scale, and that "has brought so much value to Nav by allowing all of these new freedoms that we had just never had before," he says.

+ +

Conversations about new products used to be bogged down by the fact they'd have to wait six months to get an environment set up with isolation and then figure out how to handle spikes of traffic. "But now it's just nothing to us," says Jeppson. "We're talking four to 10 times the amount of traffic that we handle now, and it's just like, 'Oh, yeah. We're good. Kubernetes handles this for us.'"

\ No newline at end of file diff --git a/content/bn/case-studies/nav/nav_featured_logo.png b/content/bn/case-studies/nav/nav_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/nav/nav_featured_logo.svg b/content/bn/case-studies/nav/nav_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/nerdalize/nerdalize_featured_logo.png b/content/bn/case-studies/nerdalize/nerdalize_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/nerdalize/nerdalize_featured_logo.svg b/content/bn/case-studies/nerdalize/nerdalize_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/netease/index.html b/content/bn/case-studies/netease/index.html index e69de29bb2..a23afaaf56 100644 --- a/content/bn/case-studies/netease/index.html +++ b/content/bn/case-studies/netease/index.html @@ -0,0 +1,76 @@ +--- +title: NetEase Case Study +linkTitle: NetEase +case_study_styles: true +cid: caseStudies +logo: netease_featured_logo.png +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/netease/banner1.jpg +heading_title_logo: /images/netease_logo.png +subheading: > + How NetEase Leverages Kubernetes to Support Internet Business Worldwide +case_study_details: + - Company: NetEase + - Location: Hangzhou, China + - Industry: Internet technology +--- + +

Challenge

+ +

Its gaming business is one of the largest in the world, but that's not all that NetEase provides to Chinese consumers. The company also operates e-commerce, advertising, music streaming, online education, and email platforms; the last of which serves almost a billion users with free email services through sites like 163.com. In 2015, the NetEase Cloud team providing the infrastructure for all of these systems realized that their R&D process was slowing down developers. "Our users needed to prepare all of the infrastructure by themselves," says Feng Changjian, Architect for NetEase Cloud and Container Service. "We were eager to provide the infrastructure and tools for our users automatically via serverless container service."

+ +

Solution

+ +

After considering building its own orchestration solution, NetEase decided to base its private cloud platform on Kubernetes. The fact that the technology came out of Google gave the team confidence that it could keep up with NetEase's scale. "After our 2-to-3-month evaluation, we believed it could satisfy our needs," says Feng. The team started working with Kubernetes in 2015, before it was even 1.0. Today, the NetEase internal cloud platform—which also leverages the CNCF projects Prometheus, Envoy, Harbor, gRPC, and Helm—runs 10,000 nodes in a production cluster and can support up to 30,000 nodes in a cluster. Based on its learnings from its internal platform, the company introduced a Kubernetes-based cloud and microservices-oriented PaaS product, NetEase Qingzhou Microservice, to outside customers.

+ +

Impact

+ +

The NetEase team reports that Kubernetes has increased R&D efficiency by more than 100%. Deployment efficiency has improved by 280%. "In the past, if we wanted to do upgrades, we needed to work with other teams, even in other departments," says Feng. "We needed special staff to prepare everything, so it took about half an hour. Now we can do it in only 5 minutes." The new platform also allows for mixed deployments using GPU and CPU resources. "Before, if we put all the resources toward the GPU, we won't have spare resources for the CPU. But now we have improvements thanks to the mixed deployments," he says. Those improvements have also brought an increase in resource utilization.

+ +{{< case-studies/quote author="Zeng Yuxing, Architect, NetEase" >}} +"The system can support 30,000 nodes in a single cluster. In production, we have gotten the data of 10,000 nodes in a single cluster. The whole internal system is using this system for development, test, and production." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Its gaming business is the fifth-largest in the world, but that's not all that NetEase provides consumers. +{{< /case-studies/lead >}} + +

The company also operates e-commerce, advertising, music streaming, online education, and email platforms in China; the last of which serves almost a billion users with free email services through popular sites like 163.com and 126.com. With that kind of scale, the NetEase Cloud team providing the infrastructure for all of these systems realized in 2015 that their R&D process was making it hard for developers to keep up with demand. "Our users needed to prepare all of the infrastructure by themselves," says Feng Changjian, Architect for NetEase Cloud and Container Service. "We were eager to provide the infrastructure and tools for our users automatically via serverless container service."

+ +

After considering building its own orchestration solution, NetEase decided to base its private cloud platform on Kubernetes. The fact that the technology came out of Google gave the team confidence that it could keep up with NetEase's scale. "After our 2-to-3-month evaluation, we believed it could satisfy our needs," says Feng.

+ +{{< case-studies/quote + image="/images/case-studies/netease/banner3.jpg" + author="Feng Changjian, Architect for NetEase Cloud and Container Service, NetEase" +>}} +"We leveraged the programmability of Kubernetes so that we can build a platform to satisfy the needs of our internal customers for upgrades and deployment." +{{< /case-studies/quote >}} + +

The team started adopting Kubernetes in 2015, before it was even 1.0, because it was relatively easy to use and enabled DevOps at the company. "We abandoned some of the concepts of Kubernetes; we only wanted to use the standardized framework," says Feng. "We leveraged the programmability of Kubernetes so that we can build a platform to satisfy the needs of our internal customers for upgrades and deployment."

+ +

The team first focused on building the container platform to manage resources better, and then turned their attention to improving its support of microservices by adding internal systems such as monitoring. That has meant integrating the CNCF projects Prometheus, Envoy, Harbor, gRPC, and Helm. "We are trying to provide a simplified and standardized process, so our users and customers can leverage our best practices," says Feng.

+ +

And the team is continuing to make improvements. For example, the e-commerce part of the business needs to leverage mixed deployments, which in the past required using two separate platforms: the infrastructure-as-a-service platform and the Kubernetes platform. More recently, NetEase has created a cross-platform application that enables using both with one-command deployment.

+ +{{< case-studies/quote + image="/images/case-studies/netease/banner4.jpg" + author="Li Lanqing, Kubernetes Developer, NetEase" +>}} +"As long as a company has a mature team and enough developers, I think Kubernetes is a very good technology that can help them." +{{< /case-studies/quote >}} + +

Today, the NetEase internal cloud platform "can support 30,000 nodes in a single cluster," says Architect Zeng Yuxing. "In production, we have gotten the data of 10,000 nodes in a single cluster. The whole internal system is using this system for development, test, and production."

+ +

The NetEase team reports that Kubernetes has increased R&D efficiency by more than 100%. Deployment efficiency has improved by 280%. "In the past, if we wanted to do upgrades, we needed to work with other teams, even in other departments," says Feng. "We needed special staff to prepare everything, so it took about half an hour. Now we can do it in only 5 minutes." The new platform also allows for mixed deployments using GPU and CPU resources. "Before, if we put all the resources toward the GPU, we won't have spare resources for the CPU. But now we have improvements thanks to the mixed deployments." Those improvements have also brought an increase in resource utilization.

+ +{{< case-studies/quote author="Li Lanqing, Kubernetes Developer, NetEase">}} +"By engaging with this community, we can gain some experience from it and we can also benefit from it. We can see what are the concerns and the challenges faced by the community, so we can get involved." +{{< /case-studies/quote >}} + +

Based on the results and learnings from using its internal platform, the company introduced a Kubernetes-based cloud and microservices-oriented PaaS product, NetEase Qingzhou Microservice, to outside customers. "The idea is that we can find the problems encountered by our game and e-commerce and cloud music providers, so we can integrate their experiences and provide a platform to satisfy the needs of our users," says Zeng.

+ +

With or without the use of the NetEase product, the team encourages other companies to try Kubernetes. "As long as a company has a mature team and enough developers, I think Kubernetes is a very good technology that can help them," says Kubernetes developer Li Lanqing.

+ +

As an end user as well as a vendor, NetEase has become more involved in the community, learning from other companies and sharing what they've done. The team has been contributing to the Harbor and Envoy projects, providing feedback as the technologies are being tested at NetEase scale. "We are a team focusing on addressing the challenges of microservices architecture," says Feng. "By engaging with this community, we can gain some experience from it and we can also benefit from it. We can see what are the concerns and the challenges faced by the community, so we can get involved."

\ No newline at end of file diff --git a/content/bn/case-studies/netease/netease_featured_logo.png b/content/bn/case-studies/netease/netease_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/netease/netease_featured_logo.svg b/content/bn/case-studies/netease/netease_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/newyorktimes/index.html b/content/bn/case-studies/newyorktimes/index.html index e69de29bb2..291c06a6c0 100644 --- a/content/bn/case-studies/newyorktimes/index.html +++ b/content/bn/case-studies/newyorktimes/index.html @@ -0,0 +1,73 @@ +--- +title: New York Times Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/newyorktimes/banner1.jpg +heading_title_logo: /images/newyorktimes_logo.png +subheading: > + The New York Times: From Print to the Web to Cloud Native +case_study_details: + - Company: New York Times + - Location: New York, N.Y. + - Industry: News Media +--- + +

Challenge

+ +

When the company decided a few years ago to move out of its data centers, its first deployments on the public cloud were smaller, less critical applications managed on virtual machines. "We started building more and more tools, and at some point we realized that we were doing a disservice by treating Amazon as another data center," says Deep Kapadia, Executive Director, Engineering at The New York Times. Kapadia was tapped to lead a Delivery Engineering Team that would "design for the abstractions that cloud providers offer us."

+ +

Solution

+ +

The team decided to use Google Cloud Platform and its Kubernetes-as-a-service offering, GKE.

+ +

Impact

+ +

Speed of delivery increased. Some of the legacy VM-based deployments took 45 minutes; with Kubernetes, that time was "just a few seconds to a couple of minutes," says Engineering Manager Brian Balser. Adds Li: "Teams that used to deploy on weekly schedules or had to coordinate schedules with the infrastructure team now deploy their updates independently, and can do it daily when necessary." Adopting Cloud Native Computing Foundation technologies allows for a more unified approach to deployment across the engineering staff, and portability for the company.

+ +{{< case-studies/quote author="Deep Kapadia, Executive Director, Engineering at The New York Times" >}} +{{< youtube DqS_IPw-c6o youtube-quote-sm >}} +{{< youtube Tm4VfJtOHt8 youtube-quote-sm >}} +"I think once you get over the initial hump, things get a lot easier and actually a lot faster." +{{< /case-studies/quote >}} + +

Founded in 1851 and known as the newspaper of record, The New York Times is a digital pioneer: Its first website launched in 1996, before Google even existed. After the company decided a few years ago to move out of its private data centers—including one located in the pricy real estate of Manhattan. It recently took another step into the future by going cloud native.

+ +

At first, the infrastructure team "managed the virtual machines in the Amazon cloud, and they deployed more critical applications in our data centers and the less critical ones on AWS as an experiment," says Deep Kapadia, Executive Director, Engineering at The New York Times. "We started building more and more tools, and at some point we realized that we were doing a disservice by treating Amazon as another data center."

+ +

To get the most out of the cloud, Kapadia was tapped to lead a new Delivery Engineering Team that would "design for the abstractions that cloud providers offer us." In mid-2016, they began looking at the Google Cloud Platform and its Kubernetes-as-a-service offering, GKE.

+ +

At the time, says team member Tony Li, a Site Reliability Engineer, "We had some internal tooling that attempted to do what Kubernetes does for containers, but for VMs. We asked why are we building and maintaining these tools ourselves?"

+ +

In early 2017, the first production application—the nytimes.com mobile homepage—began running on Kubernetes, serving just 1% of the traffic. Today, almost 100% of the nytimes.com site's end-user facing applications run on GCP, with the majority on Kubernetes.

+ +{{< case-studies/quote image="/images/case-studies/newyorktimes/banner3.jpg" >}} +"We had some internal tooling that attempted to do what Kubernetes does for containers, but for VMs. We asked why are we building and maintaining these tools ourselves?" +{{< /case-studies/quote >}} + +

The team found that the speed of delivery was immediately impacted. "Deploying Docker images versus spinning up VMs was quite a lot faster," says Engineering Manager Brian Balser. Some of the legacy VM-based deployments took 45 minutes; with Kubernetes, that time was "just a few seconds to a couple of minutes."

+ +

The plan is to get as much as possible, not just the website, running on Kubernetes, and beyond that, moving toward serverless deployments. For instance, The New York Times crossword app was built on Google App Engine, which has been the main platform for the company's experimentation with serverless. "The hardest part was getting the engineers over the hurdle of how little they had to do," Chief Technology Officer Nick Rockwell recently told The CTO Advisor. "Our experience has been very, very good. We have invested a lot of work into deploying apps on container services, and I'm really excited about experimenting with deploying those on App Engine Flex and AWS Fargate and seeing how that feels, because that's a great migration path."

+ +

There are some exceptions to the move to cloud native, of course. "We have the print publishing business as well," says Kapadia. "A lot of that is definitely not going down the cloud-native path because they're using vendor software and even special machinery that prints the physical paper. But even those teams are looking at things like App Engine and Kubernetes if they can."

+ +

Kapadia acknowledges that there was a steep learning curve for some engineers, but "I think once you get over the initial hump, things get a lot easier and actually a lot faster."

+ +{{< case-studies/quote image="/images/case-studies/newyorktimes/banner4.jpg" >}} +"Right now, every team is running a small Kubernetes cluster, but it would be nice if we could all live in a larger ecosystem," says Kapadia. "Then we can harness the power of things like service mesh proxies that can actually do a lot of instrumentation between microservices, or service-to-service orchestration. Those are the new things that we want to experiment with as we go forward." +{{< /case-studies/quote >}} + +

At The New York Times, they did. As teams started sharing their own best practices with each other, "We're no longer the bottleneck for figuring out certain things," Kapadia says. "Most of the infrastructure and systems were managed by a centralized function. We've sort of blown that up, partly because Google and Amazon have tools that allow us to do that. We provide teams with complete ownership of their Google Cloud Platform projects, and give them a set of sensible defaults or standards. We let them know, 'If this works for you as is, great! If not, come talk to us and we'll figure out how to make it work for you.'"

+ +

As a result, "It's really allowed teams to move at a much more rapid pace than they were able to in the past," says Kapadia. Adds Li: "The use of GKE means each team can get their own compute cluster, reducing the number of individual instances they have to care about since developers can treat the cluster as a whole. Because the ticket-based workflow was removed from requesting resources and connections, developers can just call an API to get what they want. Teams that used to deploy on weekly schedules or had to coordinate schedules with the infrastructure team now deploy their updates independently, and can do it daily when necessary."

+ +

Another benefit to adopting Kubernetes: allowing for a more unified approach to deployment across the engineering staff. "Before, many teams were building their own tools for deployment," says Balser. With Kubernetes—as well as the other CNCF projects The New York Times uses, including Fluentd to collect logs for all of its AWS servers, gRPC for its Publishing Pipeline, Prometheus, and Envoy—"we can benefit from the advances that each of these technologies make, instead of trying to catch up."

+ +{{< case-studies/quote >}} +Li calls the Cloud Native Computing Foundation's projects "a northern star that we can all look at and follow." +{{< /case-studies/quote >}} + +

These open-source technologies have given the company more portability. "CNCF has enabled us to follow an industry standard," says Kapadia. "It allows us to think about whether we want to move away from our current service providers. Most of our applications are connected to Fluentd. If we wish to switch our logging provider from provider A to provider B we can do that. We're running Kubernetes in GCP today, but if we want to run it in Amazon or Azure, we could potentially look into that as well."

+ +

Li calls the Cloud Native Computing Foundation's projects "a northern star that we can all look at and follow." Led by that star, the team is looking ahead to a year of onboarding the remaining half of the 40 or so product engineering teams to extract even more value out of the technology. "Right now, every team is running a small Kubernetes cluster, but it would be nice if we could all live in a larger ecosystem," says Kapadia. "Then we can harness the power of things like service mesh proxies that can actually do a lot of instrumentation between microservices, or service-to-service orchestration. Those are the new things that we want to experiment with as we go forward."

\ No newline at end of file diff --git a/content/bn/case-studies/newyorktimes/newyorktimes_featured.png b/content/bn/case-studies/newyorktimes/newyorktimes_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/newyorktimes/newyorktimes_featured.svg b/content/bn/case-studies/newyorktimes/newyorktimes_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/newyorktimes/newyorktimes_logo.png b/content/bn/case-studies/newyorktimes/newyorktimes_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/nokia/index.html b/content/bn/case-studies/nokia/index.html index e69de29bb2..b22465034a 100644 --- a/content/bn/case-studies/nokia/index.html +++ b/content/bn/case-studies/nokia/index.html @@ -0,0 +1,77 @@ +--- +title: Nokia Case Study +linkTitle: Nokia +case_study_styles: true +cid: caseStudies +logo: nokia_featured_logo.png + +new_case_study_styles: true +heading_background: /images/case-studies/nokia/banner1.jpg +heading_title_logo: /images/nokia_logo.png +subheading: > + Nokia: Enabling 5G and DevOps at a Telecom Company with Kubernetes +case_study_details: + - Company: Nokia + - Location: Espoo, Finland + - Industry: Telecommunications +--- + +

Challenge

+ +

Nokia's core business is building telecom networks end-to-end; its main products are related to the infrastructure, such as antennas, switching equipment, and routing equipment. "As telecom vendors, we have to deliver our software to several telecom operators and put the software into their infrastructure, and each of the operators have a bit different infrastructure," says Gergely Csatari, Senior Open Source Engineer. "There are operators who are running on bare metal. There are operators who are running on virtual machines. There are operators who are running on VMware Cloud and OpenStack Cloud. We want to run the same product on all of these different infrastructures without changing the product itself."

+ +

Solution

+ +

The company decided that moving to cloud native technologies would allow teams to have infrastructure-agnostic behavior in their products. Teams at Nokia began experimenting with Kubernetes in pre-1.0 versions. "The simplicity of the label-based scheduling of Kubernetes was a sign that showed us this architecture will scale, will be stable, and will be good for our purposes," says Csatari. The first Kubernetes-based product, the Nokia Telephony Application Server, went live in early 2018. "Now, all the products are doing some kind of re-architecture work, and they're moving to Kubernetes."

+ +

Impact

+ +

Kubernetes has enabled Nokia's foray into 5G. "When you develop something that is part of the operator's infrastructure, you have to develop it for the future, and Kubernetes and containers are the forward-looking technologies," says Csatari. The teams using Kubernetes are already seeing clear benefits. "By separating the infrastructure and the application layer, we have less dependencies in the system, which means that it's easier to implement features in the application layer," says Csatari. And because teams can test the exact same binary artifact independently of the target execution environment, "we find more errors in early phases of the testing, and we do not need to run the same tests on different target environments, like VMware, OpenStack, or bare metal," he adds. As a result, "we save several hundred hours in every release."

+ +{{< case-studies/quote author="Gergely Csatari, Senior Open Source Engineer, Nokia" >}} +"When people are picking up their phones and making a call on Nokia networks, they are creating containers in the background with Kubernetes." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Nokia was the first name in mobile phones when they were becoming ubiquitous in the late 1990s and early 2000s. But by 2014, the company had sold off its mobile device division and was focusing its core business not on the handhelds used for calls, but on the networks. +{{< /case-studies/lead >}} + +

Today, Nokia is building telecom networks end-to-end—from antennas to switching and routing equipment—serving operators in more than 120 countries. "As telecom vendors, we have to deliver our software to several telecom operators and put the software into their infrastructure, and each of the operators have a bit different infrastructure," says Gergely Csatari, Senior Open Source Engineer at Nokia. "There are operators who are running on bare metal. There are operators who are running on virtual machines. There are operators who are running on VMware Cloud and OpenStack Cloud. We want to run the same product on all of these different infrastructures without changing the product itself."

+ +

Looking for a way to allow its teams to build products with infrastructure-agnostic behavior, the company decided to embrace containerization, Kubernetes, and other cloud native technologies, a move that is being made across the telecom industry. Since early 2018, "when people are picking up their phones and making a call on Nokia networks, they are creating containers in the background with Kubernetes," says Csatari. "Now, all the products are doing some kind of re-architecture work, and they're moving to Kubernetes."

+ +{{< case-studies/quote + image="/images/case-studies/nokia/banner3.jpg" + author="Gergely Csatari, Senior Open Source Engineer, Nokia" +>}} +"Having the community and CNCF around Kubernetes is not only important for having a connection to other companies who are using Kubernetes and a forum where you can ask or discuss features of Kubernetes. But as a company who would like to contribute to Kubernetes, it was very important to have a CLA (Contributors License Agreement) which is connected to the CNCF and not to a particular company. That was a critical step for us to start contributing to Kubernetes and Helm." +{{< /case-studies/quote >}} + +

Nokia's cloud native journey began about two years ago, when Csatari's team was building the company's Telephony Application Server (TAS). "We wanted to have a service execution engine in the product, which was a totally separate function from all other parts," he says. "There, we had the possibility to think about new architectures and new tools that we could use. We created this particular product based on Kubernetes, and we liked the work, so we started to talk about cloud native and containers and all of these things. We did a very extensive research of different container orchestration tools. We knew that we have some, let's say, strange or different requirements because of the special environment that our software is running on."

+ +

For one thing, Nokia's software serves millions of people, and is required to have the carrier-grade "five nines" availability: to be up 99.999% of the time. "If you turn it to minutes, this means we're allowed to have only 10 minutes of downtime in a whole year," says Csatari. "Downtime here means that you are not able to serve the person to full capacity, which means that we cannot fail. This includes software upgrades, everything, because when you call 911, you're using our software, and you expect that it will work."

+ +

That meant that they needed to be able to set affinity and anti-affinity rules in their orchestration tools. "You cannot put all of the functions to the same physical host because physical hosts are failing," Csatari explains. "If you fail with one physical host, then you lose all of the core processing processes. Then there are no calls going through. So we have to divide them among the different physical hosts. At that time, only Kubernetes was able to provide these features. The simplicity of the label-based scheduling of Kubernetes was a sign that showed us this architecture will scale, will be stable, and will be good for our purposes."

+ +{{< case-studies/quote + image="/images/case-studies/nokia/banner4.jpg" + author="Gergely Csatari, Senior Open Source Engineer, Nokia" +>}} +"Kubernetes opened the window to all of these open source projects instead of implementing everything in house. Our engineers can focus more on the application level, which is actually the thing what we are selling, and not on the infrastructure level. For us, the most important thing about Kubernetes is it allows us to focus on value creation of our business." +{{< /case-studies/quote >}} + +

The TAS went live in early 2018, and now Kubernetes is also enabling Nokia's foray into 5G. The company is introducing microservices architecture and Kubernetes while adding 5G features to existing products. And all new 5G product development will be on top of Kubernetes. "When you develop something that is part of the operator's infrastructure, you have to develop it for the future, and Kubernetes and containers are the forward-looking technologies," says Csatari.

+ +

There have been real time savings thanks to Kubernetes. "By separating the infrastructure and the application layer, we have less dependencies in the system, which means that it's easier to implement features in the application layer," says Csatari. Because teams can test the exact same binary artifact independently of the target execution environment, "we find more errors in early phases of the testing, and we do not need to run the same tests on different target environments, like VMware, OpenStack or bare metal," he adds. As a result, "we save several hundred hours in every release."

+ +

Moving from Nokia's legacy cluster management system, which had been built in-house more than thirty years ago, to a Kubernetes platform also meant that "we started using Linux as a base operating system, so we just opened the window to all of these open source projects instead of implementing everything in house," says Csatari. (From CNCF's ecosystem, the team is already using Helm, gRPC, CNI, Prometheus, and Envoy, and plans to implement CoreDNS.) "Our engineers can focus more on the application level, which is actually the thing what we are selling, and not on the infrastructure level. For us, the most important thing about Kubernetes is it allows us to focus on value creation of our business."

+ +{{< case-studies/quote author="Gergely Csatari, Senior Open Source Engineer, Nokia" >}} +"I had some discussions at KubeCon with people from the networking SIG and the resource management working group, to work together on our requirements, and that's very exciting for me and my colleagues," +{{< /case-studies/quote >}} + +

The company has a long-term goal of moving the entire product portfolio into the Kubernetes platform. To that end, Nokia teams are working together with other companies to add the features needed to use Kubernetes with the real-time, nanosecond-sensitive applications close to the edge of the radio network.

+ +

And the CNCF community is proving to be a great forum for that collaboration. "I had some discussions at KubeCon with people from the networking SIG and the resource management working group, to work together on our requirements, and that's very exciting for me and my colleagues," says Csatari. "Previously, everybody had the same problem, but everybody just did it in his own, and now we are trying to solve the same problem together."

+ +

Perhaps the biggest impact that Kubernetes is having on Nokia, Csatari believes, is that people are starting to think about how a telecom company can do DevOps. "We are building a DevOps pipeline, which reaches from the actual developer to the customers, and thinking about new ways how can we digitally deliver our software to our customers and get feedback from the customers right to the engineers," he says. "This is something that will fundamentally change how telecom companies are delivering software, and how quickly can we develop new features. This is because of the usage of containers and, of course, the usage of Kubernetes."

\ No newline at end of file diff --git a/content/bn/case-studies/nokia/nokia_featured_logo.png b/content/bn/case-studies/nokia/nokia_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/nokia/nokia_featured_logo.svg b/content/bn/case-studies/nokia/nokia_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/nordstrom/index.html b/content/bn/case-studies/nordstrom/index.html index e69de29bb2..c3f2a436b5 100644 --- a/content/bn/case-studies/nordstrom/index.html +++ b/content/bn/case-studies/nordstrom/index.html @@ -0,0 +1,75 @@ +--- +title: Nordstrom Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/nordstrom/banner1.jpg +heading_title_logo: /images/nordstrom_logo.png +subheading: > + Finding Millions in Potential Savings in a Tough Retail Climate +case_study_details: + - Company: Nordstrom + - Location: Seattle, Washington + - Industry: Retail +--- + +

Challenge

+ +

Nordstrom wanted to increase the efficiency and speed of its technology operations, which includes the Nordstrom.com e-commerce site. At the same time, Nordstrom Technology was looking for ways to tighten its technology operational costs.

+ +

Solution

+ +

After embracing a DevOps transformation and launching a continuous integration/continuous deployment (CI/CD) project four years ago, the company reduced its deployment time from three months to 30 minutes. But they wanted to go even faster across environments, so they began their cloud native journey, adopting Docker containers orchestrated with Kubernetes.

+ +

Impact

+ +

Nordstrom Technology developers using Kubernetes now deploy faster and can "just focus on writing applications," says Dhawal Patel, a senior engineer on the team building a Kubernetes enterprise platform for Nordstrom. Furthermore, the team has increased Ops efficiency, improving CPU utilization from 5x to 12x depending on the workload. "We run thousands of virtual machines (VMs), but aren't effectively using all those resources," says Patel. "With Kubernetes, without even trying to make our cluster efficient, we are currently at a 10x increase."

+ +{{< case-studies/quote author="Dhawal Patel, senior engineer at Nordstrom" >}} +"We are always looking for ways to optimize and provide more value through technology. With Kubernetes we are showcasing two types of efficiency that we can bring: Dev efficiency and Ops efficiency. It's a win-win." +{{< /case-studies/quote >}} + +

When Dhawal Patel joined Nordstrom five years ago as an application developer for the retailer's website, he realized there was an opportunity to help speed up development cycles.

+ +

In those early DevOps days, Nordstrom Technology still followed a traditional model of silo teams and functions. "As a developer, I was spending more time fixing environments than writing code and adding value to business," Patel says. "I was passionate about that—so I was given the opportunity to help fix it."

+ +

The company was eager to move faster, too, and in 2013 launched the first continuous integration/continuous deployment (CI/CD) project. That project was the first step in Nordstrom's cloud native journey.

+ +

Dev and Ops team members built a CI/CD pipeline, working with the company's servers on premise. The team chose Chef, and wrote cookbooks that automated virtual IP creation, servers, and load balancing. "After we completed the project, deployment went from three months to 30 minutes," says Patel. "We still had multiple environments—dev, test, staging, then production—so with each environment running the Chef cookbooks, it took 30 minutes. It was a huge achievement at that point."

+ +

But new environments still took too long to turn up, so the next step was working in the cloud. Today, Nordstrom Technology has built an enterprise platform that allows the company's 1,500 developers to deploy applications running as Docker containers in the cloud, orchestrated with Kubernetes.

+ +{{< case-studies/quote image="/images/case-studies/nordstrom/banner3.jpg" >}} +"We made a bet that Kubernetes was going to take off, informed by early indicators of community support and project velocity, so we rebuilt our system with Kubernetes at the core," +{{< /case-studies/quote >}} + +

"The cloud provided faster access to resources, because it took weeks for us to get a virtual machine (VM) on premises," says Patel. "But now we can do the same thing in only five minutes."

+ +

Nordstrom's first foray into scheduling containers on a cluster was a homegrown system based on CoreOS fleet. They began doing a few proofs of concept projects with that system until Kubernetes 1.0 was released when they made the switch. "We made a bet that Kubernetes was going to take off, informed by early indicators of community support and project velocity, so we rebuilt our system with Kubernetes at the core," says Marius Grigoriu, Sr. Manager of the Kubernetes team at Nordstrom.

+ +

While Kubernetes is often thought as a platform for microservices, the first application to launch on Kubernetes in a critical production role at Nordstrom was Jira. "It was not the ideal microservice we were hoping to get as our first application," Patel admits, "but the team that was working on it was really passionate about Docker and Kubernetes, and they wanted to try it out. They had their application running on premises, and wanted to move it to Kubernetes."

+ +

The benefits were immediate for the teams that came on board. "Teams running on our Kubernetes cluster loved the fact that they had fewer issues to worry about. They didn't need to manage infrastructure or operating systems," says Grigoriu. "Early adopters loved the declarative nature of Kubernetes. They loved the reduced surface area they had to deal with."

+ +{{< case-studies/quote image="/images/case-studies/nordstrom/banner4.jpg">}} +"Teams running on our Kubernetes cluster loved the fact that they had fewer issues to worry about. They didn't need to manage infrastructure or operating systems," says Grigoriu. "Early adopters loved the declarative nature of Kubernetes. They loved the reduced surface area they had to deal with." +{{< /case-studies/quote >}} + +

To support these early adopters, Patel's team began growing the cluster and building production-grade services. "We integrated with Prometheus for monitoring, with a Grafana front end; we used Fluentd to push logs to Elasticsearch, so that gives us log aggregation," says Patel. The team also added dozens of open-source components, including CNCF projects and has made contributions to Kubernetes, Terraform, and kube2iam.

+ +

There are now more than 60 development teams running Kubernetes in Nordstrom Technology, and as success stories have popped up, more teams have gotten on board. "Our initial customer base, the ones who were willing to try this out, are now going and evangelizing to the next set of users," says Patel. "One early adopter had Docker containers and he was not sure how to run it in production. We sat with him and within 15 minutes we deployed it in production. He thought it was amazing, and more people in his org started coming in."

+ +

For Nordstrom Technology, going cloud-native has vastly improved development and operational efficiency. The developers using Kubernetes now deploy faster and can focus on building value in their applications. One such team started with a 25-minute merge to deploy by launching virtual machines in the cloud. Switching to Kubernetes was a 5x speedup in their process, improving their merge to deploy time to 5 minutes.

+ +{{< case-studies/quote >}} +"With Kubernetes, without even trying to make our cluster efficient, we are currently at 40 percent CPU utilization—a 10x increase. we are running 2600+ customer pods that would have been 2600+ VMs if they had gone directly to the cloud. We are running them on 40 VMs now, so that's a huge reduction in operational overhead." +{{< /case-studies/quote >}} + +

Speed is great, and easily demonstrated, but perhaps the bigger impact lies in the operational efficiency. "We run thousands of VMs on AWS, and their overall average CPU utilization is about four percent," says Patel. "With Kubernetes, without even trying to make our cluster efficient, we are currently at 40 percent CPU utilization—a 10x increase. We are running 2600+ customer pods that would have been 2600+ VMs if they had gone directly to the cloud. We are running them on 40 VMs now, so that's a huge reduction in operational overhead."

+ +

Nordstrom Technology is also exploring running Kubernetes on bare metal on premises. "If we can build an on-premises Kubernetes cluster," says Patel, "we could bring the power of cloud to provision resources fast on-premises. Then for the developer, their interface is Kubernetes; they might not even realize or care that their services are now deployed on premises because they're only working with Kubernetes."

+ +

For that reason, Patel is eagerly following Kubernetes' development of multi-cluster capabilities. "With cluster federation, we can have our on-premise as the primary cluster and the cloud as a secondary burstable cluster," he says. "So, when there is an anniversary sale or Black Friday sale, and we need more containers - we can go to the cloud."

+ +

That kind of possibility—as well as the impact that Grigoriu and Patel's team has already delivered using Kubernetes—is what led Nordstrom on its cloud native journey in the first place. "The way the retail environment is today, we are trying to build responsiveness and flexibility where we can," says Grigoriu. "Kubernetes makes it easy to: bring efficiency to both the Dev and Ops side of the equation. It's a win-win."

\ No newline at end of file diff --git a/content/bn/case-studies/nordstrom/nordstrom_featured_logo.png b/content/bn/case-studies/nordstrom/nordstrom_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/nordstrom/nordstrom_featured_logo.svg b/content/bn/case-studies/nordstrom/nordstrom_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.png b/content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.svg b/content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.svg new file mode 100644 index 0000000000..b10ca384f5 --- /dev/null +++ b/content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.svg @@ -0,0 +1,69 @@ +--- +title: Northwestern Mutual Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/northwestern/banner1.jpg +heading_title_logo: /images/northwestern_logo.png +subheading: > + Cloud Native at Northwestern Mutual +case_study_details: + - Company: Northwestern Mutual + - Location: Milwaukee, WI + - Industry: Insurance and Financial Services +--- + +

Challenge

+ +

In the spring of 2015, Northwestern Mutual acquired a fintech startup, LearnVest, and decided to take "Northwestern Mutual's leading products and services and meld it with LearnVest's digital experience and innovative financial planning platform," says Brad Williams, Director of Engineering for Client Experience, Northwestern Mutual. The company's existing infrastructure had been optimized for batch workflows hosted on on-prem networks; deployments were very traditional, focused on following a process instead of providing deployment agility. "We had to build a platform that was elastically scalable, but also much more responsive, so we could quickly get data to the client website so our end-customers have the experience they expect," says Williams.

+ +

Solution

+ +

The platform team came up with a plan for using the public cloud (AWS), Docker containers, and Kubernetes for orchestration. "Kubernetes gave us that base framework so teams can be very autonomous in what they're building and deliver very quickly and frequently," says Northwestern Mutual Cloud Native Engineer Frank Greco Jr. The team also built and open-sourced Kanali, a Kubernetes-native API management tool that uses OpenTracing, Jaeger, and gRPC.

+ +

Impact

+ +

Before, infrastructure deployments could take weeks; now, it is done in a matter of minutes. The number of deployments has increased dramatically, from about 24 a year to over 500 in just the first 10 months of 2017. Availability has also increased: There used to be a six-hour control window for commits every Sunday morning, as well as other periods of general maintenance, during which outages could happen. "Now we have eliminated the planned outage windows," says Bryan Pfremmer, App Platform Teams Manager, Northwestern Mutual. Kanali has had an impact on the bottom line. The vendor API management product that the company previously used required 23 servers, "dedicated, to only API management," says Pfremmer. "Now it's all integrated in the existing stack and running as another deployment on Kubernetes. And that's just one environment. Between the three that we had plus the test, that's hard dollar savings."

+ +{{< case-studies/quote author="Frank Greco Jr., Cloud Native Engineer at Northwestern Mutual">}} +"In a large enterprise, you're going to have people using Kubernetes, but then you're also going to have people using WAS and .NET. You may not be at a point where your whole stack can be cloud native. What if you can take your API management tool and make it cloud native, but still proxy to legacy systems? Using different pieces that are cloud native, open source and Kubernetes native, you can do pretty innovative stuff." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +For more than 160 years, Northwestern Mutual has maintained its industry leadership in part by keeping a strong focus on risk management. +{{< /case-studies/lead >}} + +

For many years, the company took a similar approach to managing its technology and has recently undergone a digital transformation to advance the company's digital strategy - including making a lot of noise in the cloud-native world.

+ +

In the spring of 2015, this insurance and financial services company acquired a fintech startup, LearnVest, and decided to take "Northwestern Mutual's leading products and services and meld it with LearnVest's digital experience and innovative financial planning platform," says Brad Williams, Director of Engineering for Client Experience, Northwestern Mutual. The company's existing infrastructure had been optimized for batch workflows hosted on an on-premise datacenter; deployments were very traditional and had to many manual steps that were error prone.

+ +

In order to give the company's 4.5 million clients the digital experience they'd come to expect, says Williams, "We had to build a platform that was elastically scalable, but also much more responsive, so we could quickly get data to the client website. We essentially said, 'You build the system that you think is necessary to support a new, modern-facing one.' That's why we departed from anything legacy."

+ +{{< case-studies/quote image="/images/case-studies/northwestern/banner3.jpg" >}} +"Kubernetes has definitely been the right choice for us. It gave us that base framework so teams can be autonomous in what they're building and deliver very quickly and frequently." +{{< /case-studies/quote >}} + +

Williams and the rest of the platform team decided that the first step would be to start moving from private data centers to AWS. With a new microservice architecture in mind—and the freedom to implement what was best for the organization—they began using Docker containers. After looking into the various container orchestration options, they went with Kubernetes, even though it was still in beta at the time. "There was some debate whether we should build something ourselves, or just leverage that product and evolve with it," says Northwestern Mutual Cloud Native Engineer Frank Greco Jr. "Kubernetes has definitely been the right choice for us. It gave us that base framework so teams can be autonomous in what they're building and deliver very quickly and frequently."

+ +

As early adopters, the team had to do a lot of work with Ansible scripts to stand up the cluster. "We had a lot of hard security requirements given the nature of our business," explains Bryan Pfremmer, App Platform Teams Manager, Northwestern Mutual. "We found ourselves running a configuration that very few other people ever tried." The client experience group was the first to use the new platform; today, a few hundred of the company's 1,500 engineers are using it and more are eager to get on board.

+ +

The results have been dramatic. Before, infrastructure deployments could take two weeks; now, it is done in a matter of minutes. Now with a focus on Infrastructure automation, and self-service, "You can take an app to production in that same day if you want to," says Pfremmer.

+ +{{< case-studies/quote image="/images/case-studies/northwestern/banner4.jpg" >}} +"Now, developers have autonomy, they can use this whenever they want, however they want. It becomes more valuable the more instrumentation downstream that happens, as we mature in it." +{{< /case-studies/quote >}} + +

The process used to be so cumbersome that minor bug releases would be bundled with feature releases. With the new streamlined system enabled by Kubernetes, the number of deployments has increased from about 24 a year to more than 500 in just the first 10 months of 2017. Availability has also been improved: There used to be a six-hour control window for commits every early Sunday morning, as well as other periods of general maintenance, during which outages could happen. "Now there's no planned outage window," notes Pfremmer.

+ +

Northwestern Mutual built that API management tool—called Kanali—and open sourced it in the summer of 2017. The team took on the project because it was a key capability for what they were building and prior the solution worked in an "anti-cloud native way that was different than everything else we were doing," says Greco. Now API management is just another container deployed to Kubernetes along with a separate Jaeger deployment.

+ +

Now the engineers using the Kubernetes deployment platform have the added benefit of visibility in production—and autonomy. Before, a centralized team and would have to run a trace. "Now, developers have autonomy, they can use this whenever they want, however they want. It becomes more valuable the more instrumentation downstream that happens, as we mature in it." says Greco.

+ +{{< case-studies/quote >}} +"We're trying to make what we're doing known so that we can find people who are like, 'Yeah, that's interesting. I want to come do it!'" +{{< /case-studies/quote >}} + +

But the team didn't stop there. "In a large enterprise, you're going to have people using Kubernetes, but then you're also going to have people using WAS and .NET," says Greco. "You may not be at a point where your whole stack can be cloud native. What if you can take your API management tool and make it cloud native, but still proxy to legacy systems? Using different pieces that are cloud native, open source and Kubernetes native, you can do pretty innovative stuff."

+ +

As the team continues to improve its stack and share its Kubernetes best practices, it feels that Northwestern Mutual's reputation as a technology-first company is evolving too. "No one would think a company that's 160-plus years old is foraying this deep into the cloud and infrastructure stack," says Pfremmer. And they're hoping that means they'll be able to attract new talent. "We're trying to make what we're doing known so that we can find people who are like, 'Yeah, that's interesting. I want to come do it!'"

\ No newline at end of file diff --git a/content/bn/case-studies/ocado/index.html b/content/bn/case-studies/ocado/index.html index e69de29bb2..33674e0598 100644 --- a/content/bn/case-studies/ocado/index.html +++ b/content/bn/case-studies/ocado/index.html @@ -0,0 +1,83 @@ +--- +title: Ocado Case Study +linkTitle: Ocado +case_study_styles: true +cid: caseStudies +logo: ocado_featured_logo.png +featured: true +weight: 4 +quote: > + People at Ocado Technology have been quite amazed. They ask, 'Can we do this on a Dev cluster?' and 10 minutes later we have rolled out something that is deployed across the cluster. The speed from idea to implementation to deployment is amazing. + +new_case_study_styles: true +heading_background: /images/case-studies/ocado/banner1.jpg +heading_title_logo: /images/ocado_logo.png +subheading: > + Ocado: Running Grocery Warehouses with a Cloud Native Platform +case_study_details: + - Company: Ocado Technology + - Location: Hatfield, England + - Industry: Grocery retail technology and platforms +--- + +

Challenge

+ +

The world's largest online-only grocery retailer, Ocado developed the Ocado Smart Platform to manage its own operations, from websites to warehouses, and is now licensing the technology to other retailers such as Kroger. To set up the first warehouses for the platform, Ocado shifted from virtual machines and Puppet infrastructure to Docker containers, using CoreOS's fleet scheduler to provision all the services on its OpenStack-based private cloud on bare metal. As the Smart Platform grew and "fleet was going end-of-life," says Platform Engineer Mike Bryant, "we started looking for a more complete platform, with all of these disparate infrastructure services being brought together in one unified API."

+ +

Solution

+ +

The team decided to migrate from fleet to Kubernetes on Ocado's private cloud. The Kubernetes stack currently uses kubeadm for bootstrapping, CNI with Weave Net for networking, Prometheus Operator for monitoring, Fluentd for logging, and OpenTracing for distributed tracing. The first app on Kubernetes, a business-critical service in the warehouses, went into production in the summer of 2017, with a mass migration continuing into 2018. Hundreds of Ocado engineers working on the Smart Platform are now deploying on Kubernetes.

+ +

Impact

+ +

With Kubernetes, "the speed from idea to implementation to deployment is amazing," says Bryant. "I've seen features go from development to production inside of a week now. In the old world, a new application deployment could easily take over a month." And because there are no longer restrictive deployment windows in the warehouses, the rate of deployments has gone from as few as two per week to dozens per week. Ocado has also achieved cost savings because Kubernetes gives the team the ability to have more fine-grained resource allocation. Says DevOps Team Leader Kevin McCormack: "We have more confidence in the resource allocation/separation features of Kubernetes, so we have been able to migrate from around 10 fleet clusters to one Kubernetes cluster." The team also uses Prometheus and Grafana to visualize resource allocation, and makes the data available to developers. "The increased visibility offered by Prometheus means developers are more aware of what they are using and how their use impacts others, especially since we now have one shared cluster," says McCormack. "I'd estimate that we use about 15-25% less hardware resources to host the same applications in Kubernetes in our test environments."

+ +{{< case-studies/quote author="Mike Bryant, Platform Engineer, Ocado" >}} +"People at Ocado Technology have been quite amazed. They ask, 'Can we do this on a Dev cluster?' and 10 minutes later we have rolled out something that is deployed across the cluster. The speed from idea to implementation to deployment is amazing." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +When it was founded in 2000, Ocado was an online-only grocery retailer in the U.K. In the years since, it has expanded from delivering produce to families to providing technology to other grocery retailers. +{{< /case-studies/lead >}} + +

The company began developing its Ocado Smart Platform to manage its own operations, from websites to warehouses, and is now licensing the technology to other grocery chains around the world, such as Kroger. To set up the first warehouses on the platform, Ocado shifted from virtual machines and Puppet infrastructure to Docker containers, using CoreOS's fleet scheduler to provision all the services on its OpenStack-based private cloud on bare metal. As the Smart Platform grew, and "fleet was going end-of-life," says Platform Engineer Mike Bryant, "we started looking for a more complete platform, with all of these disparate infrastructure services being brought together in one unified API."

+ +

Bryant had already been using Kubernetes with Code for Life, a children's education project that's part of Ocado's charity arm. "We really liked it, so we started looking at it seriously for our production workloads," says Bryant. The team that managed fleet had researched orchestration solutions and landed on Kubernetes as well. "We were looking for a platform with wide adoption, and that was where the momentum was," says DevOps Team Leader Kevin McCormack. The two paths converged, and "We didn't even go through any proof-of-concept stage. The Code for Life work served that purpose," says Bryant.

+ +{{< case-studies/quote + image="/images/case-studies/ocado/banner3.jpg" + author="Kevin McCormack, DevOps Team Leader, Ocado" +>}} +"We were looking for a platform with wide adoption, and that was where the momentum was, the two paths converged, and we didn't even go through any proof-of-concept stage. The Code for Life work served that purpose," +{{< /case-studies/quote >}} + +

In the summer of 2016, the team began migrating from fleet to Kubernetes on Ocado's private cloud. The Kubernetes stack currently uses kubeadm for bootstrapping, CNI with Weave Net for networking, Prometheus Operator for monitoring, Fluentd for logging, and OpenTracing for distributed tracing.

+ +

The first app on Kubernetes, a business-critical service in the warehouses, went into production a year later. Once that app was running smoothly, a mass migration continued into 2018. Hundreds of Ocado engineers working on the Smart Platform are now deploying on Kubernetes, and the platform is live in Ocado's warehouses, managing tens of thousands of orders a week. At full capacity, Ocado's latest warehouse in Erith, southeast London, will deliver more than 200,000 orders per week, making it the world's largest facility for online grocery.

+ +

There are about 150 microservices now running on Kubernetes, with multiple instances of many of them. "We're not just deploying all these microservices at once. We're deploying them all for one warehouse, and then they're all being deployed again for the next warehouse, and again and again," says Bryant.

+ +

The move to Kubernetes was eye-opening for many people at Ocado Technology. "In the early days of putting the platform into our test infrastructure, the technical architect asked what network performance was like on Weave Net with encryption turned on," recalls Bryant. "So we found a Docker container for iPerf, wrote a daemon set, deployed it. A few moments later, we've deployed the entire thing across this cluster. He was pretty blown away by that."

+ +{{< case-studies/quote + image="/images/case-studies/ocado/banner4.jpg" + author="Mike Bryant, Platform Engineer, Ocado" +>}} +"The unified API of Kubernetes means this is all in one place, and it's one flow for approval and rollout. I've seen features go from development to production inside of a week now. In the old world, a new application deployment could easily take over a month." +{{< /case-studies/quote >}} + +

Indeed, the impact has been profound. "Prior to containerization, we had quite restrictive deployment windows in our warehouses," says Bryant. "Moving to microservices, we've been able to deploy much more frequently. We've been able to move towards continuous delivery in a number of areas. In our older warehouse, new application deployments involve talking to a bunch of different teams for different levels of the stack: from VM provisioning, to storage, to load balancers, and so on. The unified API of Kubernetes means this is all in one place, and it's one flow for approval and rollout. I've seen features go from development to production inside of a week now. In the old world, a new application deployment could easily take over a month."

+ +

The rate of deployment has gone from as few as two per week to dozens per week. "With Kubernetes, some of our development teams have been able to deploy their application to production on the new platform without us noticing," says Bryant, "which means they're faster at doing what they need to do and we have less work."

+ +

Ocado has also achieved cost savings because Kubernetes gives the team the ability to have more fine-grained resource allocation. "That lets us shrink quite a lot of our deployments from being per-core VM deployments to having fractions of the core," says Bryant. Adds McCormack: "We have more confidence in the resource allocation/separation features of Kubernetes, so we have been able to migrate from around 10 fleet clusters to one Kubernetes cluster. This means we use our hardware better since if we have to always have two nodes of excess capacity available in case of node failures then we only need two extra instead of 20."

+ +{{< case-studies/quote author="Mike Bryant, Platform Engineer, Ocado" >}} +"CNCF have provided us with support of different technologies. We've been able to adopt those in a very easy fashion. We do like that CNCF is vendor agnostic. We're not being asked to commit to this one way of doing things. The vast diversity of viewpoints in CNCF lead to better technology." +{{< /case-studies/quote >}} + +

The team also uses Prometheus and Grafana to visualize resource allocation, and makes the data available to developers. "The increased visibility offered by Prometheus means developers are more aware of what they are using and how their use impacts others, especially since we now have one shared cluster," says McCormack. "I'd estimate that we use about 15-25% less hardware resource to host the same applications in Kubernetes in our test environments."

+ +

One of the broader benefits of cloud native, says Bryant, is the unified API. "We have one method of doing our deployments that covers the wide range of things we need to do, and we can extend the API," he says. In addition to using Prometheus Operator, the Ocado team has started writing its own operators, some of which have been open sourced. Plus, "CNCF has provided us with support of these different technologies. We've been able to adopt those in a very easy fashion. We do like that CNCF is vendor agnostic. We're not being asked to commit to this one way of doing things. The vast diversity of viewpoints in the CNCF leads to better technology."

+ +

Ocado's own technology, in the form of its Smart Platform, will soon be used around the world. And cloud native plays a crucial role in this global expansion. "I wouldn't have wanted to try it without Kubernetes," says Bryant. "Kubernetes has made it so much nicer, especially to have that consistent way of deploying all of the applications, then taking the same thing and being able to replicate it. It's very valuable."

\ No newline at end of file diff --git a/content/bn/case-studies/ocado/ocado_featured_logo.png b/content/bn/case-studies/ocado/ocado_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ocado/ocado_featured_logo.svg b/content/bn/case-studies/ocado/ocado_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/openAI/index.html b/content/bn/case-studies/openAI/index.html index e69de29bb2..6fb2089528 100644 --- a/content/bn/case-studies/openAI/index.html +++ b/content/bn/case-studies/openAI/index.html @@ -0,0 +1,69 @@ +--- +title: OpenAI Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/openAI/banner1.jpg +heading_title_logo: /images/openAI_logo.png +subheading: > + Launching and Scaling Up Experiments, Made Simple +case_study_details: + - Company: OpenAI + - Location: San Francisco, California + - Industry: Artificial Intelligence Research +--- + +

Challenge

+ +

An artificial intelligence research lab, OpenAI needed infrastructure for deep learning that would allow experiments to be run either in the cloud or in its own data center, and to easily scale. Portability, speed, and cost were the main drivers.

+ +

Solution

+ +

OpenAI began running Kubernetes on top of AWS in 2016, and in early 2017 migrated to Azure. OpenAI runs key experiments in fields including robotics and gaming both in Azure and in its own data centers, depending on which cluster has free capacity. "We use Kubernetes mainly as a batch scheduling system and rely on our autoscaler to dynamically scale up and down our cluster," says Christopher Berner, Head of Infrastructure. "This lets us significantly reduce costs for idle nodes, while still providing low latency and rapid iteration."

+ +

Impact

+ +

The company has benefited from greater portability: "Because Kubernetes provides a consistent API, we can move our research experiments very easily between clusters," says Berner. Being able to use its own data centers when appropriate is "lowering costs and providing us access to hardware that we wouldn't necessarily have access to in the cloud," he adds. "As long as the utilization is high, the costs are much lower there." Launching experiments also takes far less time: "One of our researchers who is working on a new distributed training system has been able to get his experiment running in two or three days. In a week or two he scaled it out to hundreds of GPUs. Previously, that would have easily been a couple of months of work."

+ +{{< case-studies/quote >}} + +
+Check out "Building the Infrastructure that Powers the Future of AI" presented by Vicki Cheung, Member of Technical Staff & Jonas Schneider, Member of Technical Staff at OpenAI from KubeCon/CloudNativeCon Europe 2017. +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +From experiments in robotics to old-school video game play research, OpenAI's work in artificial intelligence technology is meant to be shared. +{{< /case-studies/lead >}} + +

With a mission to ensure powerful AI systems are safe, OpenAI cares deeply about open source—both benefiting from it and contributing safety technology into it. "The research that we do, we want to spread it as widely as possible so everyone can benefit," says OpenAI's Head of Infrastructure Christopher Berner. The lab's philosophy—as well as its particular needs—lent itself to embracing an open source, cloud native strategy for its deep learning infrastructure.

+ +

OpenAI started running Kubernetes on top of AWS in 2016, and a year later, migrated the Kubernetes clusters to Azure. "We probably use Kubernetes differently from a lot of people," says Berner. "We use it for batch scheduling and as a workload manager for the cluster. It's a way of coordinating a large number of containers that are all connected together. We rely on our autoscaler to dynamically scale up and down our cluster. This lets us significantly reduce costs for idle nodes, while still providing low latency and rapid iteration."

+ +

In the past year, Berner has overseen the launch of several Kubernetes clusters in OpenAI's own data centers. "We run them in a hybrid model where the control planes—the Kubernetes API servers, etcd and everything—are all in Azure, and then all of the Kubernetes nodes are in our own data center," says Berner. "The cloud is really convenient for managing etcd and all of the masters, and having backups and spinning up new nodes if anything breaks. This model allows us to take advantage of lower costs and have the availability of more specialized hardware in our own data center."

+ +{{< case-studies/quote image="/images/case-studies/openAI/banner3.jpg" >}} +OpenAI's experiments take advantage of Kubernetes' benefits, including portability. "Because Kubernetes provides a consistent API, we can move our research experiments very easily between clusters..." +{{< /case-studies/quote >}} + +

Different teams at OpenAI currently run a couple dozen projects. While the largest-scale workloads manage bare cloud VMs directly, most of OpenAI's experiments take advantage of Kubernetes' benefits, including portability. "Because Kubernetes provides a consistent API, we can move our research experiments very easily between clusters," says Berner. The on-prem clusters are generally "used for workloads where you need lots of GPUs, something like training an ImageNet model. Anything that's CPU heavy, that's run in the cloud. But we also have a number of teams that run their experiments both in Azure and in our own data centers, just depending on which cluster has free capacity, and that's hugely valuable."

+ +

Berner has made the Kubernetes clusters available to all OpenAI teams to use if it's a good fit. "I've worked a lot with our games team, which at the moment is doing research on classic console games," he says. "They had been running a bunch of their experiments on our dev servers, and they had been trying out Google cloud, managing their own VMs. We got them to try out our first on-prem Kubernetes cluster, and that was really successful. They've now moved over completely to it, and it has allowed them to scale up their experiments by 10x, and do that without needing to invest significant engineering time to figure out how to manage more machines. A lot of people are now following the same path."

+ +{{< case-studies/quote image="/images/case-studies/openAI/banner4.jpg" >}} +"One of our researchers who is working on a new distributed training system has been able to get his experiment running in two or three days," says Berner. "In a week or two he scaled it out to hundreds of GPUs. Previously, that would have easily been a couple of months of work." +{{< /case-studies/quote >}} + +

That path has been simplified by frameworks and tools that two of OpenAI's teams have developed to handle interaction with Kubernetes. "You can just write some Python code, fill out a bit of configuration with exactly how many machines you need and which types, and then it will prepare all of those specifications and send it to the Kube cluster so that it gets launched there," says Berner. "And it also provides a bit of extra monitoring and better tooling that's designed specifically for these machine learning projects."

+ +

The impact that Kubernetes has had at OpenAI is impressive. With Kubernetes, the frameworks and tooling, including the autoscaler, in place, launching experiments takes far less time. "One of our researchers who is working on a new distributed training system has been able to get his experiment running in two or three days," says Berner. "In a week or two he scaled it out to hundreds of GPUs. Previously, that would have easily been a couple of months of work."

+ +

Plus, the flexibility they now have to use their on-prem Kubernetes cluster when appropriate is "lowering costs and providing us access to hardware that we wouldn't necessarily have access to in the cloud," he says. "As long as the utilization is high, the costs are much lower in our data center. To an extent, you can also customize your hardware to exactly what you need."

+ +{{< case-studies/quote author="CHRISTOPHER BERNER, HEAD OF INFRASTRUCTURE FOR OPENAI" >}} +"Research teams can now take advantage of the frameworks we've built on top of Kubernetes, which make it easy to launch experiments, scale them by 10x or 50x, and take little effort to manage." +{{< /case-studies/quote >}} + +

OpenAI is also benefiting from other technologies in the CNCF cloud-native ecosystem. gRPC is used by many of its systems for communications between different services, and Prometheus is in place "as a debugging tool if things go wrong," says Berner. "We actually haven't had any real problems in our Kubernetes clusters recently, so I don't think anyone has looked at our Prometheus monitoring in a while. If something breaks, it will be there."

+ +

One of the things Berner continues to focus on is Kubernetes' ability to scale, which is essential to deep learning experiments. OpenAI has been able to push one of its Kubernetes clusters on Azure up to more than 2,500 nodes. "I think we'll probably hit the 5,000-machine number that Kubernetes has been tested at before too long," says Berner, adding, "We're definitely hiring if you're excited about working on these things!"

\ No newline at end of file diff --git a/content/bn/case-studies/openAI/openai_featured.png b/content/bn/case-studies/openAI/openai_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/openAI/openai_featured.svg b/content/bn/case-studies/openAI/openai_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/openAI/openai_logo.png b/content/bn/case-studies/openAI/openai_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/peardeck/index.html b/content/bn/case-studies/peardeck/index.html index e69de29bb2..a4a71916ca 100644 --- a/content/bn/case-studies/peardeck/index.html +++ b/content/bn/case-studies/peardeck/index.html @@ -0,0 +1,87 @@ +--- +title: Pear Deck Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/peardeck/banner3.jpg +heading_title_logo: /images/peardeck_logo.png +subheading: > + Infrastructure for a Growing EdTech Startup +case_study_details: + - Company: Pear Deck + - Location: Iowa City, Iowa + - Industry: Educational Software +--- + +

Challenge

+ +

The three-year-old startup provides a web app for teachers to interact with their students in the classroom. The JavaScript app was built on Google's web app development platform Firebase, using Heroku. As the user base steadily grew, so did the development team. "We outgrew Heroku when we started wanting to have multiple services, and the deploying story got pretty horrendous. We were frustrated that we couldn't have the developers quickly stage a version," says CEO Riley Eynon-Lynch. "Tracing and monitoring became basically impossible." On top of that, many of Pear Deck's customers are behind government firewalls and connect through Firebase, not Pear Deck's servers, making troubleshooting even more difficult.

+ +

Solution

+ +

In 2016, the company began moving their code from Heroku to containers running on Google Kubernetes Engine, orchestrated by Kubernetes and monitored with Prometheus.

+ +

Impact

+ +

The new cloud native stack immediately improved the development workflow, speeding up deployments. Prometheus gave Pear Deck "a lot of confidence, knowing that people are still logging into the app and using it all the time," says Eynon-Lynch. "The biggest impact is being able to work as a team on the configuration in git in a pull request, and the biggest confidence comes from the solidity of the abstractions and the trust that we have in Kubernetes actually making our yaml files a reality."

+ +{{< case-studies/quote author="RILEY EYNON-LYNCH, CEO OF PEAR DECK" >}} +"We didn't even realize how stressed out we were about our lack of insight into what was happening with the app. I'm really excited and have more and more confidence in the actual state of our application for our actual users, and not just what the CPU graphs are saying, because of Prometheus and Kubernetes." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +With the speed befitting a startup, Pear Deck delivered its first prototype to customers within three months of incorporating. +{{< /case-studies/lead >}} + +

As a former high school math teacher, CEO Riley Eynon-Lynch felt an urgency to provide a tech solution to classes where instructors struggle to interact with every student in a short amount of time. "Pear Deck is an app that students can use to interact with the teacher all at once," he says. "When the teacher asks a question, instead of just the kid at the front of the room answering again, everybody can answer every single question. It's a huge fundamental shift in the messaging to the students about how much we care about them and how much they are a part of the classroom."

+ +

Eynon-Lynch and his partners quickly built a JavaScript web app on Google's web app development platform Firebase, and launched the minimum viable product [MVP] on Heroku "because it was fast and easy," he says. "We made everything as easy as we could."

+ +

But once it launched, the user base began growing steadily at a rate of 30 percent a month. "Our Heroku bill was getting totally insane," Eynon-Lynch says. But even more crucially, as the company hired more developers to keep pace, "we outgrew Heroku. We wanted to have multiple services and the deploying story got pretty horrendous. We were frustrated that we couldn't have the developers quickly stage a version. Tracing and monitoring became basically impossible."

+ +

On top of that, many of Pear Deck's customers are behind government firewalls and connect through Firebase, not Pear Deck's servers, making troubleshooting even more difficult.

+ +

The team began looking around for another solution, and finally decided in early 2016 to start moving the app from Heroku to containers running on Google Kubernetes Engine, orchestrated by Kubernetes and monitored with Prometheus.

+ +{{< case-studies/quote image="/images/case-studies/peardeck/banner1.jpg" >}} +"When it became clear that Google Kubernetes Engine was going to have a lot of support from Google and be a fully-managed Kubernetes platform, it seemed very obvious to us that was the way to go," says Eynon-Lynch. +{{< /case-studies/quote >}} + +

They had considered other options like Google's App Engine (which they were already using for one service) and Amazon's Elastic Compute Cloud (EC2), while experimenting with running one small service that wasn't accessible to the Internet in Kubernetes. "When it became clear that Google Kubernetes Engine was going to have a lot of support from Google and be a fully-managed Kubernetes platform, it seemed very obvious to us that was the way to go," says Eynon-Lynch. "We didn't really consider Terraform and the other competitors because the abstractions offered by Kubernetes just jumped off the page to us."

+ +

Once the team started porting its Heroku apps into Kubernetes, which was "super easy," he says, the impact was immediate. "Before, to make a new version of the app meant going to Heroku and reconfiguring 10 new services, so basically no one was willing to do it, and we never staged things," he says. "Now we can deploy our exact same configuration in lots of different clusters in 30 seconds. We have a full set up that's always running, and then any of our developers or designers can stage new versions with one command, including their recent changes. We stage all the time now, and everyone stopped talking about how cool it is because it's become invisible how great it is."

+ +

Along with Kubernetes came Prometheus. "Until pretty recently we didn't have any kind of visibility into aggregate server metrics or performance," says Eynon-Lynch. The team had tried to use Google Kubernetes Engine's Stackdriver monitoring, but had problems making it work, and considered New Relic. When they started looking at Prometheus in the fall of 2016, "the fit between the abstractions in Prometheus and the way we think about how our system works, was so clear and obvious," he says.

+ +

The integration with Kubernetes made set-up easy. Once Helm installed Prometheus, "We started getting a graph of the health of all our Kubernetes nodes and pods immediately. I think we were pretty hooked at that point," Eynon-Lynch says. "Then we got our own custom instrumentation working in 15 minutes, and had an actively updated count of requests that we could do, rate on and get a sense of how many users are connected at a given point. And then it was another hour before we had alarms automatically showing up in our Slack channel. All that was in one afternoon. And it was an afternoon of gasping with delight, basically!"

+ +{{< case-studies/quote image="/images/case-studies/peardeck/banner2.jpg" >}} +"We started getting a graph of the health of all our Kubernetes nodes and pods immediately. I think we were pretty hooked at that point," Eynon-Lynch says. "Then we got our own custom instrumentation working in 15 minutes, and had an actively updated count of requests that we could do, rate on and get a sense of how many users are connected at a given point. And then it was another hour before we had alarms automatically showing up in our Slack channel. All that was in one afternoon. And it was an afternoon of gasping with delight, basically!" +{{< /case-studies/quote >}} + +

With Pear Deck's specific challenges—traffic through Firebase as well as government firewalls—Prometheus was a game-changer. "We didn't even realize how stressed out we were about our lack of insight into what was happening with the app," Eynon-Lynch says. Before, when a customer would report that the app wasn't working, the team had to manually investigate the problem without knowing whether customers were affected all over the world, or whether Firebase was down, and where.

+ +

To help solve that problem, the team wrote a script that pings Firebase from several different geographical locations, and then reports the responses to Prometheus in a histogram. "A huge impact that Prometheus had on us was just an amazing sigh of relief, of feeling like we knew what was happening," he says. "It took 45 minutes to implement [the Firebase alarm] because we knew that we had this trustworthy metrics platform in Prometheus. We weren't going to have to figure out, 'Where do we send these metrics? How do we aggregate the metrics? How do we understand them?'"

+ +

Plus, Prometheus has allowed Pear Deck to build alarms for business goals. One measures the rate of successful app loads and goes off if the day's loads are less than 90 percent of the loads from seven days before. "We run a JavaScript app behind ridiculous firewalls and all kinds of crazy browser extensions messing with it—Chrome will push a feature that breaks some CSS that we're using," Eynon-Lynch says. "So that gives us a lot of confidence, and we at least know that people are still logging into the app and using it all the time."

+ +

Now, when a customer complains, and none of the alarms have gone off, the team can feel confident that it's not a widespread problem. "Just to be sure, we can go and double check the graphs and say, 'Yep, there's currently 10,000 people connected to that Firebase node. It's definitely working. Let's investigate your network settings, customer,'" he says. "And we can pass that back off to our support reps instead of the whole development team freaking out that Firebase is down."

+ +

Pear Deck is also giving back to the community, building and open-sourcing a metrics aggregator that enables end-user monitoring in Prometheus. "We can measure, for example, the time to interactive-dom on the web clients," he says. "The users all report that to our aggregator, then the aggregator reports to Prometheus. So we can set an alarm for some client side errors."

+ +

Most of Pear Deck's services have now been moved onto Kubernetes. And all of the team's new code is going on Kubernetes. "Kubernetes lets us experiment with service configurations and stage them on a staging cluster all at once, and test different scenarios and talk about them as a development team looking at code, not just talking about the steps we would eventually take as humans," says Eynon-Lynch.

+ +{{< case-studies/quote >}} +"A huge impact that Prometheus had on us was just an amazing sigh of relief, of feeling like we knew what was happening. It took 45 minutes to implement [the Firebase alarm] because we knew that we had this trustworthy metrics platform in Prometheus...in terms of the cloud, Kubernetes and Prometheus have so much to offer," he says. +{{< /case-studies/quote >}} + +

Looking ahead, the team is planning to explore autoscaling on Kubernetes. With users all over the world but mostly in the United States, there are peaks and valleys in the traffic. One service that's still on App Engine can get as many as 10,000 requests a second during the day but far less at night. "We pay for the same servers at night, so I understand there's autoscaling that we can be taking advantage of," he says. "Implementing it is a big worry, exposing the rest of our Kubernetes cluster to us and maybe messing that up. But it's definitely our intention to move everything over, because now none of the developers want to work on that app anymore because it's such a pain to deploy it."

+ +

They're also eager to explore the work that Kubernetes is doing with stateful sets. "Right now all of the services we run in Kubernetes are stateless, and Google basically runs our databases for us and manages backups," Eynon-Lynch says. "But we're interested in building our own web-socket solution that doesn't have to be super stateful but will have maybe an hour's worth of state on it."

+ +

That project will also involve Prometheus, for a dark launch of web socket connections. "We don't know how reliable web socket connections behind all these horrible firewalls will be to our servers," he says. "We don't know what work Firebase has done to make them more reliable. So I'm really looking forward to trying to get persistent connections with web sockets to our clients and have optional tools to understand if it's working. That's our next new adventure, into stateful servers."

+ +

As for Prometheus, Eynon-Lynch thinks the company has only gotten started. "We haven't instrumented all our important features, especially those that depend on third parties," he says. "We have to wait for those third parties to tell us they're down, which sometimes they don't do for a long time. So I'm really excited and have more and more confidence in the actual state of our application for our actual users, and not just what the CPU graphs are saying, because of Prometheus and Kubernetes."

+ +

For a spry startup that's continuing to grow rapidly—and yes, they're hiring!—Pear Deck is notably satisfied with how its infrastructure has evolved in the cloud native ecosystem. "Usually I have some angsty thing where I want to get to the new, better technology," says Eynon-Lynch, "but in terms of the cloud, Kubernetes and Prometheus have so much to offer."

\ No newline at end of file diff --git a/content/bn/case-studies/peardeck/peardeck_featured.png b/content/bn/case-studies/peardeck/peardeck_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/peardeck/peardeck_featured.svg b/content/bn/case-studies/peardeck/peardeck_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/peardeck/peardeck_logo.png b/content/bn/case-studies/peardeck/peardeck_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/pearson/index.html b/content/bn/case-studies/pearson/index.html index e69de29bb2..563a3f9331 100644 --- a/content/bn/case-studies/pearson/index.html +++ b/content/bn/case-studies/pearson/index.html @@ -0,0 +1,83 @@ +--- +title: Pearson Case Study +linkTitle: Pearson +case_study_styles: true +cid: caseStudies +featured: false +quote: > + We're already seeing tremendous benefits with Kubernetes—improved engineering productivity, faster delivery of applications and a simplified infrastructure. But this is just the beginning. Kubernetes will help transform the way that educational content is delivered online. + +new_case_study_styles: true +heading_background: /images/case-studies/pearson/banner1.jpg +heading_title_logo: /images/pearson_logo.png +subheading: > + Reinventing the World's Largest Education Company With Kubernetes +case_study_details: + - Company: Pearson + - Location: Global + - Industry: Education +--- + +

Challenge

+ +

A global education company serving 75 million learners, Pearson set a goal to more than double that number, to 200 million, by 2025. A key part of this growth is in digital learning experiences, and Pearson was having difficulty in scaling and adapting to its growing online audience. They needed an infrastructure platform that would be able to scale quickly and deliver products to market faster.

+ +

Solution

+ +

"To transform our infrastructure, we had to think beyond simply enabling automated provisioning," says Chris Jackson, Director for Cloud Platforms & SRE at Pearson. "We realized we had to build a platform that would allow Pearson developers to build, manage and deploy applications in a completely different way." The team chose Docker container technology and Kubernetes orchestration "because of its flexibility, ease of management and the way it would improve our engineers' productivity."

+ +

Impact

+ +

With the platform, there has been substantial improvements in productivity and speed of delivery. "In some cases, we've gone from nine months to provision physical assets in a data center to just a few minutes to provision and get a new idea in front of a customer," says John Shirley, Lead Site Reliability Engineer for the Cloud Platform Team. Jackson estimates they've achieved 15-20% developer productivity savings. Before, outages were an issue during their busiest time of year, the back-to-school period. Now, there's high confidence in their ability to meet aggressive customer SLAs.

+ +{{< case-studies/quote author="Chris Jackson, Director for Cloud Platforms & SRE at Pearson" >}} +"We're already seeing tremendous benefits with Kubernetes—improved engineering productivity, faster delivery of applications and a simplified infrastructure. But this is just the beginning. Kubernetes will help transform the way that educational content is delivered online." +{{< /case-studies/quote >}} + +

In 2015, Pearson was already serving 75 million learners as the world's largest education company, offering curriculum and assessment tools for Pre-K through college and beyond. Understanding that innovating the digital education experience was the key to the future of all forms of education, the company set out to increase its reach to 200 million people by 2025.

+ +

That goal would require a transformation of its existing infrastructure, which was in data centers. In some cases, it took nine months to provision physical assets. In order to adapt to the demands of its growing online audience, Pearson needed an infrastructure platform that would be able to scale quickly and deliver business-critical products to market faster. "We had to think beyond simply enabling automated provisioning," says Chris Jackson, Director for Cloud Platforms & SRE at Pearson. "We realized we had to build a platform that would allow Pearson developers to build, manage and deploy applications in a completely different way."

+ +

With 400 development groups and diverse brands with varying business and technical needs, Pearson embraced Docker container technology so that each brand could experiment with building new types of content using their preferred technologies, and then deliver it using containers. Jackson chose Kubernetes orchestration "because of its flexibility, ease of management and the way it would improve our engineers' productivity," he says.

+ +

The team adopted Kubernetes when it was still version 1.2 and are still going strong now on 1.7; they use Terraform and Ansible to deploy it on to basic AWS primitives. "We were trying to understand how we can create value for Pearson from this technology," says Ben Somogyi, Principal Architect for the Cloud Platforms. "It turned out that Kubernetes' benefits are huge. We're trying to help our applications development teams that use our platform go faster, so we filled that gap with a CI/CD pipeline that builds their images for them, standardizes them, patches everything up, allows them to deploy their different environments onto the cluster, and obfuscating the details of how difficult the work underneath the covers is."

+ +{{< case-studies/quote + image="/images/case-studies/pearson/banner3.jpg" + author="Chris Jackson, Director for Cloud Platforms & SRE at Pearson" +>}} +"Your internal customers need to feel like they are choosing the very best option for them. We are experiencing this first hand in the growth of adoption. We are seeing triple-digit, year-on-year growth of the service." +{{< /case-studies/quote >}} + +

That work resulted in two tools for building and deploying applications in the cluster that Pearson has open sourced. "We're an education company, so we want to share what we can," says Somogyi.

+ +

Now that development teams no longer have to worry about infrastructure, there have been substantial improvements in productivity and speed of delivery. "In some cases, we've gone from nine months to provision physical assets in a data center to just a few minutes to provision and to get a new idea in front of a customer," says John Shirley, Lead Site Reliability Engineer for the Cloud Platform Team.

+ +

According to Jackson, the Cloud Platforms team can "provision a new proof-of-concept environment for a development team in minutes, and then they can take that to production as quickly as they are able to. This is the value proposition of all major technology services, and we had to compete like one to become our developers' preferred choice. Just because you work for the same company, you do not have the right to force people into a mediocre service. Your internal customers need to feel like they are choosing the very best option for them. We are experiencing this first hand in the growth of adoption. We are seeing triple-digit, year-on-year growth of the service."

+ +

Jackson estimates they've achieved a 15-20% boost in productivity for developer teams who adopt the platform. They also see a reduction in the number of customer-impacting incidents. Plus, says Jackson, "Teams who were previously limited to 1-2 releases per academic year can now ship code multiple times per day!"

+ +{{< case-studies/quote + image="/images/case-studies/pearson/banner4.jpg" + author="Chris Jackson, Director for Cloud Platforms & SRE at Pearson" +>}} +"Teams who were previously limited to 1-2 releases per academic year can now ship code multiple times per day!" +{{< /case-studies/quote >}} + +

Availability has also been positively impacted. The back-to-school period is the company's busiest time of year, and "you have to keep applications up," says Somogyi. Before, this was a pain point for the legacy infrastructure. Now, for the applications that have been migrated to the Kubernetes platform, "We have 100% uptime. We're not worried about 9s. There aren't any. It's 100%, which is pretty astonishing for us, compared to some of the existing platforms that have legacy challenges," says Shirley.

+ +

"You can't even begin to put a price on how much that saves the company," Jackson explains. "A reduction in the number of support cases takes load out of our operations. The customer sentiment of having a reliable product drives customer retention and growth. It frees us to think about investing more into our digital transformation and taking a better quality of education to a global scale."

+ +

The platform itself is also being broken down, "so we can quickly release smaller pieces of the platform, like upgrading our Kubernetes or all the different modules that make up our platform," says Somogyi. "One of the big focuses in 2018 is this scheme of delivery to update the platform itself."

+ +

Guided by Pearson's overarching goal of getting to 200 million users, the team has run internal tests of the platform's scalability. "We had a challenge: 28 million requests within a 10 minute period," says Shirley. "And we demonstrated that we can hit that, with an acceptable latency. We saw that we could actually get that pretty readily, and we scaled up in just a few seconds, using open source tools entirely. Shout out to Locustfor that one. So that's amazing."

+ +{{< case-studies/quote author="Benjamin Somogyi, Principal Systems Architect at Pearson" >}} +"We have 100% uptime. We're not worried about 9s. There aren't any. It's 100%, which is pretty astonishing for us, compared to some of the existing platforms that have legacy challenges. You can't even begin to put a price on how much that saves the company." +{{< /case-studies/quote >}} + +

In just two years, "We're already seeing tremendous benefits with Kubernetes—improved engineering productivity, faster delivery of applications and a simplified infrastructure," says Jackson. "But this is just the beginning. Kubernetes will help transform the way that educational content is delivered online."

+ +

So far, about 15 production products are running on the new platform, including Pearson's new flagship digital education service, the Global Learning Platform. The Cloud Platform team continues to prepare, onboard and support customers that are a good fit for the platform. Some existing products will be refactored into 12-factor apps, while others are being developed so that they can live on the platform from the get-go. "There are challenges with bringing in new customers of course, because we have to help them to see a different way of developing, a different way of building," says Shirley.

+ +

But, he adds, "It is our corporate motto: Always Learning. We encourage those teams that haven't started a cloud native journey, to see the future of technology, to learn, to explore. It will pique your interest. Keep learning."

\ No newline at end of file diff --git a/content/bn/case-studies/pearson/pearson_featured.png b/content/bn/case-studies/pearson/pearson_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/pearson/pearson_featured.svg b/content/bn/case-studies/pearson/pearson_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/pearson/pearson_logo.png b/content/bn/case-studies/pearson/pearson_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/pingcap/index.html b/content/bn/case-studies/pingcap/index.html index e69de29bb2..ea8890736b 100644 --- a/content/bn/case-studies/pingcap/index.html +++ b/content/bn/case-studies/pingcap/index.html @@ -0,0 +1,79 @@ +--- +title: pingcap Case Study +linkTitle: pingcap +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/pingcap/banner1.jpg +heading_title_logo: /images/pingcap_logo.png +subheading: > + PingCAP Bets on Cloud Native for Its TiDB Database Platform +case_study_details: + - Company: PingCAP + - Location: Beijing, China, and San Mateo, CA + - Industry: Software +--- + +

Challenge

+ +

PingCAP is the company leading the development of the popular open source NewSQL database TiDB, which is MySQL-compatible, can handle hybrid transactional and analytical processing (HTAP) workloads, and has a cloud native architectural design. "Having a hybrid multi-cloud product is an important part of our global go-to-market strategy," says Kevin Xu, General Manager of Global Strategy and Operations. In order to achieve that, the team had to address two challenges: "how to deploy, run, and manage a distributed stateful application, such as a distributed database like TiDB, in a containerized world," Xu says, and "how to deliver an easy-to-use, consistent, and reliable experience for our customers when they use TiDB in the cloud, any cloud, whether that's one cloud provider or a combination of different cloud environments." Knowing that using a distributed system isn't easy, they began looking for the right orchestration layer to help reduce some of that complexity for end users.

+ +

Solution

+ +

The team started looking at Kubernetes for orchestration early on. "We knew Kubernetes had the promise of helping us solve our problems," says Xu. "We were just waiting for it to mature." In early 2018, PingCAP began integrating Kubernetes into its internal development as well as in its TiDB product. At that point, the team has already had experience using other cloud native technologies, having integrated both Prometheus and gRPC as parts of the TiDB platform earlier on.

+ +

Impact

+ +

Xu says that PingCAP customers have had a "very positive" response so far to Kubernetes being the tool to deploy and manage TiDB. Prometheus, with Grafana as the dashboard, is installed by default when customers deploy TiDB, so that they can monitor performance and make any adjustments needed to reach their target before and while deploying TiDB in production. That monitoring layer "makes the evaluation process and communication much smoother," says Xu.

+ +

With the company's Kubernetes-based Operator implementation, which is open sourced, customers are now able to deploy, run, manage, upgrade, and maintain their TiDB clusters in the cloud with no downtime, and reduced workload, burden and overhead. And internally, says Xu, "we've completely switched to Kubernetes for our own development and testing, including our data center infrastructure and Schrodinger, an automated testing platform for TiDB. With Kubernetes, our resource usage is greatly improved. Our developers can allocate and deploy clusters themselves, and the deploying process has gone from hours to minutes, so we can devote fewer people to manage IDC resources. The productivity improvement is about 15%, and as we gain more Kubernetes knowledge on the debugging and diagnosis front, the productivity should improve to more than 20%."

+ +{{< case-studies/quote author="KEVIN XU, GENERAL MANAGER OF GLOBAL STRATEGY AND OPERATIONS, PINGCAP" >}} +"We knew Kubernetes had the promise of helping us solve our problems. We were just waiting for it to mature, so we can fold it into our own development and product roadmap." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Since it was introduced in 2015, the open source NewSQL database TiDB has gained a following for its compatibility with MySQL, its ability to handle hybrid transactional and analytical processing (HTAP) workloads—and its cloud native architectural design. +{{< /case-studies/lead >}} + +

PingCAP, the company behind TiDB, designed the platform with cloud in mind from day one, says Kevin Xu, General Manager of Global Strategy and Operations, and "having a hybrid multi-cloud product is an important part of our global go-to-market strategy."

+ +

In order to achieve that, the team had to address two challenges: "how to deploy, run, and manage a distributed stateful application, such as a distributed database like TiDB, in a containerized world," Xu says, and "how to deliver an easy-to-use, consistent, and reliable experience for our customers when they use TiDB in the cloud, any cloud, whether that's one cloud provider or a combination of different cloud environments."

+ +

Knowing that using a distributed system isn't easy, the PingCAP team began looking for the right orchestration layer to help reduce some of that complexity for end users. Kubernetes had been on their radar for quite some time. "We knew Kubernetes had the promise of helping us solve our problems," says Xu. "We were just waiting for it to mature."

+ +{{< case-studies/quote + image="/images/case-studies/pingcap/banner3.jpg" + author="KEVIN XU, GENERAL MANAGER OF GLOBAL STRATEGY AND OPERATIONS, PINGCAP" +>}} +"With the governance process being so open, it's not hard to find out what's the latest development in the technology and community, or figure out who to reach out to if we have problems or issues." +{{< /case-studies/quote >}} + +

That time came in early 2018, when PingCAP began integrating Kubernetes into its internal development as well as in its TiDB product. "Having Kubernetes be part of the CNCF, as opposed to having only the backing of one individual company, was valuable in having confidence in the longevity of the technology," says Xu. Plus, "with the governance process being so open, it's not hard to find out what's the latest development in the technology and community, or figure out who to reach out to if we have problems or issues."

+ +

TiDB's cloud native architecture consists of a stateless SQL layer (also called TiDB) and a persistent key-value storage layer that supports distributed transactions (TiKV, which is now in the CNCF Sandbox), which are loosely coupled. "You can scale both out or in depending on your computation and storage needs, and the two scaling processes can happen independent of each other," says Xu. The PingCAP team also built the TiDB Operator based on Kubernetes, which helps bootstrap a TiDB cluster on any cloud environment and simplifies and automates deployment, scaling, scheduling, upgrades, and maintenance. The company also recently previewed its fully-managed TiDB Cloud offering.

+ +{{< case-studies/quote + image="/images/case-studies/pingcap/banner4.jpg" + author="KEVIN XU, GENERAL MANAGER OF GLOBAL STRATEGY AND OPERATIONS, PINGCAP" +>}} +"A cloud native infrastructure will not only save you money and allow you to be more in control of the infrastructure resources you consume, but also empower new product innovation, new experience for your users, and new business possibilities. It's both a cost reducer and a money maker." +{{< /case-studies/quote >}} + +

The entire TiDB platform leverages Kubernetes and other cloud native technologies, including Prometheus for monitoring and gRPC for interservice communication.

+ +

So far, the customer response to the Kubernetes-enabled platform has been "very positive." Prometheus, with Grafana as the dashboard, is installed by default when customers deploy TiDB, so that they can monitor and make any adjustments needed to reach their performance requirements before deploying TiDB in production. That monitoring layer "makes the evaluation process and communication much smoother," says Xu. With the company's Kubernetes-based Operator implementation, customers are now able to deploy, run, manage, upgrade, and maintain their TiDB clusters in the cloud with no downtime, and reduced workload, burden and overhead.

+ +

These technologies have also had an impact internally. "We've completely switched to Kubernetes for our own development and testing, including our data center infrastructure and Schrodinger, an automated testing platform for TiDB," says Xu. "With Kubernetes, our resource usage is greatly improved. Our developers can allocate and deploy clusters themselves, and the deploying process takes less time, so we can devote fewer people to manage IDC resources.

+ +{{< case-studies/quote author="KEVIN XU, GENERAL MANAGER OF GLOBAL STRATEGY AND OPERATIONS, PINGCAP" >}} +"The entire cloud native community, whether it's Kubernetes, CNCF in general, or cloud native vendors like us, have all gained enough experience—and have the battle scars to prove it—and are ready to help you succeed." +{{< /case-studies/quote >}} + +

The productivity improvement is about 15%, and as we gain more Kubernetes knowledge on the debugging and diagnosis front, the productivity should improve to more than 20%."

+ +

Kubernetes is now a crucial part of PingCAP's product roadmap. For anyone else considering going cloud native, Xu has this advice: "There's no better time to get started," he says. "The entire cloud native community, whether it's Kubernetes, CNCF in general, or cloud native vendors like us, have all gained enough experience—and have the battle scars to prove it—and are ready to help you succeed."

+ +

In fact, the PingCAP team has seen more and more customers moving toward a cloud native approach, and for good reason. "IT infrastructure is quickly evolving from a cost-center and afterthought, to the core competency and competitiveness of any company," says Xu. "A cloud native infrastructure will not only save you money and allow you to be more in control of the infrastructure resources you consume, but also empower new product innovation, new experience for your users, and new business possibilities. It's both a cost reducer and a money maker."

\ No newline at end of file diff --git a/content/bn/case-studies/pingcap/pingcap_featured_logo.png b/content/bn/case-studies/pingcap/pingcap_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/pingcap/pingcap_featured_logo.svg b/content/bn/case-studies/pingcap/pingcap_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/pinterest/index.html b/content/bn/case-studies/pinterest/index.html index e69de29bb2..b64ed26485 100644 --- a/content/bn/case-studies/pinterest/index.html +++ b/content/bn/case-studies/pinterest/index.html @@ -0,0 +1,84 @@ +--- +title: Pinterest Case Study +linkTitle: Pinterest +case_study_styles: true +cid: caseStudies +featured: false +weight: 30 +quote: > + We are in the position to run things at scale, in a public cloud environment, and test things out in way that a lot of people might not be able to do. + +new_case_study_styles: true +heading_background: /images/case-studies/pinterest/banner1.jpg +heading_title_logo: /images/pinterest_logo.png +subheading: > + Pinning Its Past, Present, and Future on Cloud Native +case_study_details: + - Company: Pinterest + - Location: San Francisco, California + - Industry: Web and Mobile App +--- + +

Challenge

+ +

After eight years in existence, Pinterest had grown into 1,000 microservices and multiple layers of infrastructure and diverse set-up tools and platforms. In 2016 the company launched a roadmap towards a new compute platform, led by the vision of creating the fastest path from an idea to production, without making engineers worry about the underlying infrastructure.

+ +

Solution

+ +

The first phase involved moving services to Docker containers. Once these services went into production in early 2017, the team began looking at orchestration to help create efficiencies and manage them in a decentralized way. After an evaluation of various solutions, Pinterest went with Kubernetes.

+ +

Impact

+ +

"By moving to Kubernetes the team was able to build on-demand scaling and new failover policies, in addition to simplifying the overall deployment and management of a complicated piece of infrastructure such as Jenkins," says Micheal Benedict, Product Manager for the Cloud and the Data Infrastructure Group at Pinterest. "We not only saw reduced build times but also huge efficiency wins. For instance, the team reclaimed over 80 percent of capacity during non-peak hours. As a result, the Jenkins Kubernetes cluster now uses 30 percent less instance-hours per-day when compared to the previous static cluster."

+ +{{< case-studies/quote author="Micheal Benedict, Product Manager for the Cloud and the Data Infrastructure Group at Pinterest" >}} + +
+"So far it's been good, especially the elasticity around how we can configure our Jenkins workloads on that Kubernetes shared cluster. That is the win we were pushing for." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Pinterest was born on the cloud—running on AWS since day one in 2010—but even cloud native companies can experience some growing pains. +{{< /case-studies/lead >}} + +

Since its launch, Pinterest has become a household name, with more than 200 million active monthly users and 100 billion objects saved. Underneath the hood, there are 1,000 microservices running and hundreds of thousands of data jobs.

+ +

With such growth came layers of infrastructure and diverse set-up tools and platforms for the different workloads, resulting in an inconsistent and complex end-to-end developer experience, and ultimately less velocity to get to production. So in 2016, the company launched a roadmap toward a new compute platform, led by the vision of having the fastest path from an idea to production, without making engineers worry about the underlying infrastructure.

+ +

The first phase involved moving to Docker. "Pinterest has been heavily running on virtual machines, on EC2 instances directly, for the longest time," says Micheal Benedict, Product Manager for the Cloud and the Data Infrastructure Group. "To solve the problem around packaging software and not make engineers own portions of the fleet and those kinds of challenges, we standardized the packaging mechanism and then moved that to the container on top of the VM. Not many drastic changes. We didn't want to boil the ocean at that point."

+ +{{< case-studies/quote + image="/images/case-studies/pinterest/banner3.jpg" + author="MICHEAL BENEDICT, PRODUCT MANAGER FOR THE CLOUD AND THE DATA INFRASTRUCTURE GROUP AT PINTEREST" +>}} +"Though Kubernetes lacked certain things we wanted, we realized that by the time we get to productionizing many of those things, we'll be able to leverage what the community is doing." +{{< /case-studies/quote >}} + +

The first service that was migrated was the monolith API fleet that powers most of Pinterest. At the same time, Benedict's infrastructure governance team built chargeback and capacity planning systems to analyze how the company uses its virtual machines on AWS. "It became clear that running on VMs is just not sustainable with what we're doing," says Benedict. "A lot of resources were underutilized. There were efficiency efforts, which worked fine at a certain scale, but now you have to move to a more decentralized way of managing that. So orchestration was something we thought could help solve that piece."

+ +

That led to the second phase of the roadmap. In July 2017, after an eight-week evaluation period, the team chose Kubernetes over other orchestration platforms. "Kubernetes lacked certain things at the time—for example, we wanted Spark on Kubernetes," says Benedict. "But we realized that the dev cycles we would put in to even try building that is well worth the outcome, both for Pinterest as well as the community. We've been in those conversations in the Big Data SIG. We realized that by the time we get to productionizing many of those things, we'll be able to leverage what the community is doing."

+ +

At the beginning of 2018, the team began onboarding its first use case into the Kubernetes system: Jenkins workloads. "Although we have builds happening during a certain period of the day, we always need to allocate peak capacity," says Benedict. "They don't have any auto-scaling capabilities, so that capacity stays constant. It is difficult to speed up builds because ramping up takes more time. So given those kind of concerns, we thought that would be a perfect use case for us to work on."

+ +{{< case-studies/quote + image="/images/case-studies/pinterest/banner4.jpg" + author="MICHEAL BENEDICT, PRODUCT MANAGER FOR THE CLOUD AND THE DATA INFRASTRUCTURE GROUP AT PINTEREST" +>}} +"So far it's been good, especially the elasticity around how we can configure our Jenkins workloads on Kubernetes shared cluster. That is the win we were pushing for." +{{< /case-studies/quote >}} + +

They ramped up the cluster, and working with a team of four people, got the Jenkins Kubernetes cluster ready for production. "We still have our static Jenkins cluster," says Benedict, "but on Kubernetes, we are doing similar builds, testing the entire pipeline, getting the artifact ready and just doing the comparison to see, how much time did it take to build over here. Is the SLA okay, is the artifact generated correct, are there issues there?"

+ +

"So far it's been good," he adds, "especially the elasticity around how we can configure our Jenkins workloads on Kubernetes shared cluster. That is the win we were pushing for."

+ +

By the end of Q1 2018, the team successfully migrated Jenkins Master to run natively on Kubernetes and also collaborated on the Jenkins Kubernetes Plugin to manage the lifecycle of workers. "We're currently building the entire Pinterest JVM stack (one of the larger monorepos at Pinterest which was recently bazelized) on this new cluster," says Benedict. "At peak, we run thousands of pods on a few hundred nodes. Overall, by moving to Kubernetes the team was able to build on-demand scaling and new failover policies, in addition to simplifying the overall deployment and management of a complicated piece of infrastructure such as Jenkins. We not only saw reduced build times but also huge efficiency wins. For instance, the team reclaimed over 80 percent of capacity during non-peak hours. As a result, the Jenkins Kubernetes cluster now uses 30 percent less instance-hours per-day when compared to the previous static cluster."

+ +{{< case-studies/quote author="MICHEAL BENEDICT, PRODUCT MANAGER FOR THE CLOUD AND THE DATA INFRASTRUCTURE GROUP AT PINTEREST">}} +"We are in the position to run things at scale, in a public cloud environment, and test things out in way that a lot of people might not be able to do." +{{< /case-studies/quote >}} + +

Benedict points to a "pretty robust roadmap" going forward. In addition to the Pinterest big data team's experiments with Spark on Kubernetes, the company collaborated with Amazon's EKS team on an ENI/CNI plug in.

+ +

Once the Jenkins cluster is up and running out of dark mode, Benedict hopes to establish best practices, including having governance primitives established—including integration with the chargeback system—before moving on to migrating the next service. "We have a healthy pipeline of use-cases to be on-boarded. After Jenkins, we want to enable support for Tensorflow and Apache Spark. At some point, we aim to move the company's monolithic API service. If we move that and understand the complexity around that, it builds our confidence," says Benedict. "It sets us up for migration of all our other services."

+ +

After years of being a cloud native pioneer, Pinterest is eager to share its ongoing journey. "We are in the position to run things at scale, in a public cloud environment, and test things out in way that a lot of people might not be able to do," says Benedict. "We're in a great position to contribute back some of those learnings."

\ No newline at end of file diff --git a/content/bn/case-studies/pinterest/pinterest_feature.png b/content/bn/case-studies/pinterest/pinterest_feature.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/pinterest/pinterest_feature.svg b/content/bn/case-studies/pinterest/pinterest_feature.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/pinterest/pinterest_logo.png b/content/bn/case-studies/pinterest/pinterest_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/prowise/index.html b/content/bn/case-studies/prowise/index.html index e69de29bb2..bd9da21b01 100644 --- a/content/bn/case-studies/prowise/index.html +++ b/content/bn/case-studies/prowise/index.html @@ -0,0 +1,83 @@ +--- +title: Prowise Case Study +linkTitle: prowise +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/prowise/banner1.jpg +heading_title_logo: /images/prowise_logo.png +subheading: > + Prowise: How Kubernetes is Enabling the Edtech Solution's Global Expansion +case_study_details: + - Company: Prowise + - Location: Budel, The Netherlands + - Industry: Edtech +--- + +

Challenge

+ +

A Dutch company that produces educational devices and software used around the world, Prowise had an infrastructure based on Linux services with multiple availability zones in Europe, Australia, and the U.S. "We've grown a lot in the past couple of years, and we started to encounter problems with versioning and flexible scaling," says Senior DevOps Engineer Victor van den Bosch, "not only scaling in demands, but also in being able to deploy multiple products which all have their own versions, their own development teams, and their own problems that they're trying to solve. To be able to put that all on the same platform without much resistance is what we were looking for. We wanted to future proof our infrastructure, and also solve some of the problems that are associated with just running a normal Linux service."

+ +

Solution

+ +

The Prowise team adopted containerization, spent time improving its CI/CD pipelines, and chose Microsoft Azure's managed Kubernetes service, AKS, for orchestration. "Kubernetes solves things like networking really well, in a way that fits our business model," says van den Bosch. "We want to focus on our core products, and that's the software that runs on it and not necessarily the infrastructure itself."

+ +

Impact

+ +

With its first web-based applications now running in beta on Prowise's Kubernetes platform, the team is seeing the benefits of rapid and smooth deployments. "The old way of deploying took half an hour of preparations and half an hour deploying it. With Kubernetes, it's a couple of seconds," says Senior Developer Bart Haalstra. As a result, adds van den Bosch, "We've gone from quarterly releases to a release every month in production. We're pretty much deploying every hour or just when we find that a feature is ready for production; before, our releases were mostly done on off-hours, where it couldn't impact our customers, as our confidence in the process was relatively low. Kubernetes has also enabled us to follow up quickly on bugs and implement tweaks to our users with zero downtime between versions. For some bugs we've pushed code fixes to production minutes after detection." Recently, the team launched a new single sign-on solution for use in an internal application. "Due to the resource based architecture of the Kubernetes platform, we were able to bring that application into an entirely new production environment in less than a day, most of that time used for testing after applying the already well-known resource definitions from staging to the new environment," says van den Bosch. "On a traditional VM this would have likely cost a day or two, and then probably a few weeks to iron out the kinks in our provisioning scripts as we apply updates."

+ +{{< case-studies/quote author="VICTOR VAN DEN BOSCH, SENIOR DEVOPS ENGINEER, PROWISE" >}} +"Because of Kubernetes, things have been much easier, our individual applications are better, and we can spend more time on functional implementation. We do not want to go back." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +If you haven't set foot in a school in awhile, you might be surprised by what you'd see in a digitally connected classroom these days: touchscreen monitors, laptops, tablets, touch tables, and more. +{{< /case-studies/lead >}} + +

One of the leaders in the space, the Dutch company Prowise, offers an integrated solution of hardware and software to help educators create a more engaging learning environment.

+ +

As the company expanded its offerings beyond the Netherlands in recent years—creating multiple availability zones in Europe, Australia, and the U.S., with as many as nine servers per zone—its Linux service-based infrastructure struggled to keep up. "We've grown a lot in the past couple of years, and we started to encounter problems with versioning and flexible scaling," says Senior DevOps Engineer Victor van den Bosch, who was hired by the company in late 2017 to build a new platform.

+ +

Prowise's products support ten languages, so the problem wasn't just scaling in demands, he adds, "but also in being able to deploy multiple products which all have their own versions, their own development teams, and their own problems that they're trying to solve. To be able to put that all on the same platform without much resistance is what we were looking for. We wanted to future proof our infrastructure, and also solve some of the problems that are associated with just running a normal Linux service."

+ +

The company's existing infrastructure on Microsoft Azure Cloud was all on virtual machines, "a pretty traditional setup," van den Bosch says. "We decided that we want some features in our software that requires being able to scale quickly, being able to deploy new applications and versions on different versions of different programming languages quickly. And we didn't really want the hassle of trying to keep those servers in a particular state."

+ +{{< case-studies/quote + image="/images/case-studies/prowise/banner3.jpg" + author="VICTOR VAN DEN BOSCH, SENIOR DEVOPS ENGINEER, PROWISE" +>}} +"You don't have to go all-in immediately. You can just take a few projects, a service, run it alongside your more traditional stack, and build it up from there. Kubernetes scales, so as you add applications and services to it, it will scale with you. You don't have to do it all at once, and that's really a secret to everything, but especially true to Kubernetes." +{{< /case-studies/quote >}} + +

After researching possible solutions, he opted for containerization and Kubernetes orchestration. "Containerization is the future," van den Bosch says. "Kubernetes solves things like networking really well, in a way that fits our business model. We want to focus on our core products, and that's the software that runs on it and not necessarily the infrastructure itself." Plus, the Prowise team liked that there was no vendor lock-in. "We don't want to be limited to one platform," he says. "We try not to touch products that are very proprietary and can't be ported easily to another vendor."

+ +

The time to market with Kubernetes was very short: The first web-based applications on the platform went into beta within a few months. That was largely made possible by van den Bosch's decision to use Azure's managed Kubernetes service, AKS. The team then had to figure out which components to keep and which to replace. Monitoring tools like New Relic were taken out "because they tend to become very expensive when you scale it to different availability zones, and it's just not very maintainable," he says.

+ +

A lot of work also went into improving Prowise's CI/CD pipelines. "We wanted to make sure that the pipelines are automated and easy to use," he says. "We have a lot of settings and configurations figured out for the pipelines, and it's just applying those scripts and those configurations to new projects from here on out."

+ +

With its first web-based applications now running in beta on Prowise's Kubernetes platform, the team is seeing the benefits of rapid and smooth deployments. "The old way of deploying took half an hour of preparations and half an hour deploying it. With Kubernetes, it's a couple of seconds," says Senior Developer Bart Haalstra. As a result, adds van den Bosch, "We've gone from quarterly releases to a release every month in production. We're pretty much deploying every hour or just when we find that a feature is ready for production. Before, our releases were mostly done on off-hours, where it couldn't impact our customers, as our confidence the process itself was relatively low. With Kubernetes, we dare to deploy in the middle of a busy day with high confidence the deployment will succeed."

+ +{{< case-studies/quote + image="/images/case-studies/prowise/banner4.jpg" + author="VICTOR VAN DEN BOSCH, SENIOR DEVOPS ENGINEER, PROWISE" +>}} +"Kubernetes allows us to really consider the best tools for a problem. Want to have a full-fledged analytics application developed by a third party that is just right for your use case? Run it. Dabbling in machine learning and AI algorithms but getting tired of waiting days for training to complete? It takes only seconds to scale it. Got a stubborn developer that wants to use a programming language no one has heard of? Let him, if it runs in a container, of course. And all of that while your operations team/DevOps get to sleep at night." +{{< /case-studies/quote >}} + +

Plus, van den Bosch says, "Kubernetes has enabled us to follow up quickly on bugs and implement tweaks to our users with zero downtime between versions. For some bugs we've pushed code fixes to production minutes after detection."

+ +

Recently, the team launched a new single sign-on solution for use in an internal application. "Due to the resource based architecture of the Kubernetes platform, we were able to bring that application into an entirely new production environment in less than a day, most of that time used for testing after applying the already well-known resource definitions from staging to the new environment," says van den Bosch. "On a traditional VM this would have likely cost a day or two, and then probably a few weeks to iron out the kinks in our provisioning scripts as we apply updates."

+ +

Legacy applications are also being moved to Kubernetes. Not long ago, the team needed to set up a Java-based application for compiling and running a frontend. "On a traditional VM, it would have taken quite a bit of time to set it up and keep it up to date, not to mention maintenance for that setup down the line," says van den Bosch. Instead, it took less than half a day to containerize it and get it running on Kubernetes. "It was much easier, and we were able to save costs too because we didn't have to spin up new VMs specially for it."

+ +{{< case-studies/quote author="VICTOR VAN DEN BOSCH, SENIOR DEVOPS ENGINEER, PROWISE" >}} +"We're really trying to deliver integrated solutions with our hardware and software and making it as easy as possible for users to use and collaborate from different places," says van den Bosch. And, says Haalstra, "We cannot do it without Kubernetes." +{{< /case-studies/quote >}} + +

Perhaps most importantly, van den Bosch says, "Kubernetes allows us to really consider the best tools for a problem and take full advantage of microservices architecture. Got a library in Node.js that excels at solving a certain problem? Use it. Want to have a full-fledged analytics application developed by a third party that is just right for your use case? Run it. Dabbling in machine learning and AI algorithms but getting tired of waiting days for training to complete? It takes only seconds to scale it. Got a stubborn developer that wants to use a programming language no one has heard of? Let him, if it runs in a container, of course. And all of that while your operations team/DevOps get to sleep at night."

+ +

Looking ahead, all new web development, platforms, and APIs at Prowise will be on Kubernetes. One of the big greenfield projects is a platform for teachers and students that is launching for back-to-school season in September. Users will be able to log in and access a wide variety of educational applications. With the recent acquisition of the software company Oefenweb, Prowise plans to provide adaptive software that allows teachers to get an accurate view of their students' progress and weak points, and automatically adjusts the difficulty level of assignments to suit individual students. "We will be leveraging Kubernetes' power to integrate, supplement, and support our combined application portfolio and bring our solutions to more classrooms," says van den Bosch.

+ +

Collaborative software is also a priority. With the single sign-in software, users' settings and credentials are saved in the cloud and can be used on any screen in the world. "We're really trying to deliver integrated solutions with our hardware and software and making it as easy as possible for users to use and collaborate from different places," says van den Bosch. And, says Haalstra, "We cannot do it without Kubernetes."

\ No newline at end of file diff --git a/content/bn/case-studies/prowise/prowise_featured_logo.png b/content/bn/case-studies/prowise/prowise_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/prowise/prowise_featured_logo.svg b/content/bn/case-studies/prowise/prowise_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ricardo-ch/index.html b/content/bn/case-studies/ricardo-ch/index.html index e69de29bb2..205e984e7f 100644 --- a/content/bn/case-studies/ricardo-ch/index.html +++ b/content/bn/case-studies/ricardo-ch/index.html @@ -0,0 +1,79 @@ +--- +title: ricardo.ch Case Study +linkTitle: ricardo-ch +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/ricardoch/banner1.png +heading_title_logo: /images/ricardoch_logo.png +subheading: > + ricardo.ch: How Kubernetes Improved Velocity and DevOps Harmony +case_study_details: + - Company: ricardo.ch + - Location: Zurich, Switzerland + - Industry: E-commerce +--- + +

Challenge

+ +

A Swiss online marketplace, ricardo.ch was experiencing problems with velocity, as well as a "classic gap" between Development and Operations, with the two sides unable to work well together. "They wanted to, but they didn't have common ground," says Cedric Meury, Head of Platform Engineering. "This was one of the root causes that slowed us down." The company began breaking down the legacy monolith into microservices, and needed orchestration to support the new architecture in its own data centers—as well as bring together Dev and Ops.

+ +

Solution

+ +

The company adopted Kubernetes for cluster management, Prometheus for monitoring, and Fluentd for logging. The first cluster was deployed on premise in December 2016, with the first service in production three months later. The migration is about half done, and the company plans to move completely to Google Cloud Platform by the end of 2018.

+ +

Impact

+ +

Splitting up the monolith into microservices "allowed higher velocity, and Kubernetes was crucial to support that," says Meury. The number of deployments to production has gone from fewer than 10 a week to 30-60 per day. Before, "when there was a problem with something in production, tickets or complaints would be thrown over the wall to operations, the classical problem. Now, people have the chance to look into operations and troubleshoot for themselves first because everything is deployed in a standardized way," says Meury. He sees the impact in everyday interactions: "A couple of weeks ago, I saw a product manager doing a pull request for a JSON file that contains some variables, and someone else accepted it. And it was deployed after a couple of minutes or seconds even, which was unthinkable before. There used to be quite a chain of things that needed to happen, the whole monolith was difficult to understand, even for engineers. So, previously requests would go into large, inefficient Kanban boards and hopefully someone will have done the change after weeks and months." Before, infrastructure- and platform-related projects took months or years to complete; now developers and operators can work together to deploy infrastructure parts via Kubernetes in a matter of weeks and sometimes days. In the long run, the company also expects to notch 50% cost savings going from custom data center and virtual machines to containerized infrastructure and cloud services.

+ +{{< case-studies/quote author="CEDRIC MEURY, HEAD OF PLATFORM ENGINEERING, RICARDO.CH" >}} +"Splitting up the monolith allowed higher velocity, and Kubernetes was crucial to support that. Containerization and orchestration by Kubernetes helped us to drastically reduce the conflict between Dev and Ops and also allowed us to speak the same language on both sides of the aisle." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +When Cedric Meury joined ricardo.ch in 2016, he saw a clear divide between Operations and Development. In fact, there was literal distance between them: The engineering team worked in France, while the rest of the org was based in Switzerland. +{{< /case-studies/lead >}} + +

"It was a classic gap between those departments and even some anger and frustration here and there," says Meury. "They wanted to work together, but they didn't have common ground. This was one of the root causes that slowed us down."

+ +

That gap was hurting velocity at ricardo.ch, a Swiss online marketplace. The website processes up to 2.6 million searches on a peak day from both web and mobile apps, serving 3.2 million members with its live auctions. The technology team's main challenge was to make sure that "the bids for items come in the right order, and before the auction is finished, and that this works in a fair way," says Meury. "We have a real-time requirement. We also provide an automated system to bid, and it needs to be accurate and correct. With a distributed system, you have the challenge of making sure that the ordering is right. And that's one of the things we're currently dealing with."

+ +

To address the velocity issue, ricardo.ch CTO Jeremy Seitz established a new software factory called EPD, which consists of 65 engineers, 7 product managers and 2 designers. "We brought these three departments together so that they can kind of streamline this and talk to each other much more closely," says Meury.

+ +{{< case-studies/quote + image="/images/case-studies/ricardoch/banner3.png" + author="CEDRIC MEURY, HEAD OF PLATFORM ENGINEERING, RICARDO.CH" +>}} +"Being in the End User Community demonstrates that we stand behind these technologies. In Switzerland, if all the companies see that ricardo.ch's using it, I think that will help adoption. I also like that we're connected to the other end users, so if there is a really heavy problem, I could go to the Slack channel, and say, 'Hey, you guys…' Like Reddit, Github and New York Times or whoever can give a recommendation on what to use here or how to solve that. So that's kind of a superpower." +{{< /case-studies/quote >}} + +

The company also began breaking down the legacy monolith into more than 100 microservices, and needed orchestration to support the new architecture in its own data centers. "Splitting up the monolith allowed higher velocity, and Kubernetes was crucial to support that," says Meury. "Containerization and orchestration by Kubernetes helped us to drastically reduce the conflict between Dev and Ops and also allowed us to speak the same language on both sides of the aisle."

+ +

Meury put together a platform engineering team to choose the tools—including Fluentd for logging and Prometheus for monitoring, with Grafana visualization—and lay the groundwork for the first Kubernetes cluster, which was installed on premise in December 2016. Within a few weeks, the new platform was available to teams, who were given training sessions and documentation. The platform engineering team then embedded with engineers to help them deploy their applications on the new platform. The first service in production was the ricardo.ch jobs page. "It was an exercise in front-end development, so the developers could experiment with a new stack," says Meury.

+ +

Meury estimates that half of the application has been migrated to Kubernetes. And the plan is to move everything to the Google Cloud Platform by the end of 2018. "We are still running some servers in our own data centers, but all of the containerization efforts and describing our services as Kubernetes manifests will allow us to quite easily make that shift," says Meury.

+ +{{< case-studies/quote + image="/images/case-studies/ricardoch/banner4.png" + author="CEDRIC MEURY, HEAD OF PLATFORM ENGINEERING, RICARDO.CH" +>}} +"One of the core moments was when a front-end developer asked me how to do a port forward from his laptop to a front-end application to debug, and I told him the command. And he was like, 'Wow, that's all I need to do?' He was super excited and happy about it. That showed me that this power in the right hands can just accelerate development." +{{< /case-studies/quote >}} + +

The impact has been great. Moving from custom data center and virtual machines to containerized infrastructure and cloud services is expected to result in 50% cost savings for the company. The number of deployments to production has gone from fewer than 10 a week to 30-60 per day. Before, "when there was a problem with something in production, tickets or complaints would be thrown over the wall to operations, the classical problem," says Meury. "Now, people have the chance to look into operations and troubleshoot for themselves first because everything is deployed in a standardized way. That reduces time and uncertainty."

+ +

Meury also sees the impact in everyday interactions: "A couple of weeks ago, I saw a product manager doing a pull request for a JSON file that contains some variables, and someone else accepted it. And it was deployed after a couple of minutes or seconds even, which was unthinkable before. There used to be quite a chain of things that needed to happen, the whole monolith was difficult to understand, even for engineers. So, previously requests would go into large, inefficient Kanban boards and hopefully someone will have done the change after weeks and months."

+ +

The divide between Dev and Ops has also diminished. "After a couple of months, I got requests by people saying, 'Hey, could you help me install the Kubernetes client? I want to actually look at what's going on,'" says Meury. "People were directly looking at the state of the system, bringing them much, much closer to the operations." Before, infrastructure- and platform-related projects took months or years to complete; now developers and operators can work together to deploy infrastructure parts via Kubernetes in a matter of weeks and sometimes days.

+ +{{< case-studies/quote author="CEDRIC MEURY, HEAD OF PLATFORM ENGINEERING, RICARDO.CH" >}} +"One of my colleagues was listening to all the talks at KubeCon, and he was overwhelmed by all the tools, technologies, frameworks out there that are currently lacking on our platform, but at the same time, he's very happy to know that in the future there is so much that we can still explore and we can improve and we can work on." +{{< /case-studies/quote >}} + +

The ability to have insight into the system has extended to other parts of the company, too. "I found out that one of our customer support representatives looks at Grafana metrics to find out whether the system is running fine, which is fantastic," says Meury. "Prometheus is directly hooked into customer care."

+ +

The ricardo.ch cloud native journey has perhaps had the most impact on the Ops team. "We have an operations team that comes from a hardware-based background, and right now they are relearning how to operate in a more virtualized and cloud native world, with great success so far," says Meury. "So besides still operating on-site data center firewalls, they learn to code in Go or do some Python scripting at the same time. Former network administrators are writing Go code. It's just really cool.

+ +

For Meury, the journey boils down to this. "One of my colleagues was listening to all the talks at KubeCon, and he was overwhelmed by all the tools, technologies, frameworks out there that are currently lacking on our platform," says Meury. "But at the same time, he's very happy to know that in the future there is so much that we can still explore and we can improve and we can work on. We're transitioning from seeing problems everywhere—like, 'This is broken' or 'This is down, and we have to fix it'—more to, 'How can we actually improve and automate more, and make it nicer for developers and ultimately for the end users?'"

\ No newline at end of file diff --git a/content/bn/case-studies/ricardo-ch/ricardo-ch_featured_logo.png b/content/bn/case-studies/ricardo-ch/ricardo-ch_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ricardo-ch/ricardo-ch_featured_logo.svg b/content/bn/case-studies/ricardo-ch/ricardo-ch_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/slamtec/index.html b/content/bn/case-studies/slamtec/index.html index e69de29bb2..c8e45c457d 100644 --- a/content/bn/case-studies/slamtec/index.html +++ b/content/bn/case-studies/slamtec/index.html @@ -0,0 +1,71 @@ +--- +title: Slamtec Case Study +linkTitle: slamtec +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/slamtec/banner1.jpg +heading_title_logo: /images/slamtec_logo.png +case_study_details: + - Company: Slamtec + - Location: Shanghai, China + - Industry: Robotics +--- + +

Challenge

+ +

Founded in 2013, SLAMTEC provides service robot autonomous localization and navigation solutions. The company's strength lies in its R&D team's ability to quickly introduce, and continually iterate on, its core products. In the past few years, the company, which had a legacy infrastructure based on Alibaba Cloud and VMware vSphere, began looking to build its own stable and reliable container cloud platform to host its Internet of Things applications. "Our needs for the cloud platform included high availability, scalability and security; multi-granularity monitoring alarm capability; friendliness to containers and microservices; and perfect CI/CD support," says Benniu Ji, Director of Cloud Computing Business Division.

+ +

Solution

+ +

Ji's team chose Kubernetes for orchestration. "CNCF brings quality assurance and a complete ecosystem for Kubernetes, which is very important for the wide application of Kubernetes," says Ji. Thus Slamtec decided to adopt other CNCF projects as well: Prometheus monitoring, Fluentd logging, Harbor registry, and Helm package manager.

+ +

Impact

+ +

With the new platform, Ji reports that Slamtec has experienced "18+ months of 100% stability!" For users, there is now zero service downtime and seamless upgrades. "Kubernetes with third-party service mesh integration (Istio, along with Jaeger and Envoy) significantly reduced the microservice configuration and maintenance efforts by 50%," he adds. With centralized metrics monitoring and log aggregation provided by Prometheus on Fluentd, teams are saving 50% of time spent on troubleshooting and debugging. Harbor replication has allowed production/staging/testing environments to cross public cloud and the private Kubernetes cluster to share the same container registry, resulting in 30% savings of CI/CD efforts. Plus, Ji says, "Helm has accelerated prototype development and environment setup with its rich sharing charts."

+ +{{< case-studies/quote author="BENNIU JI, DIRECTOR OF CLOUD COMPUTING BUSINESS DIVISION" >}} +"Cloud native technology helps us ensure high availability of our business, while improving development and testing efficiency, shortening the research and development cycle and enabling rapid product delivery." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Founded in 2013, Slamtec provides service robot autonomous localization and navigation solutions. In this fast-moving space, the company built its success on the ability of its R&D team to quickly introduce, and continually iterate on, its core products. +{{< /case-studies/lead >}} + +

To sustain that development velocity, the company over the past few years began looking to build its own stable and reliable container cloud platform to host its Internet of Things applications. With a legacy infrastructure based on Alibaba Cloud and VMware vSphere, Slamtec teams had already adopted microservice architecture and continuous delivery, for "fine granularity on-demand scaling, fault isolation, ease of development, testing, and deployment, and for facilitating high-speed iteration," says Benniu Ji, Director of Cloud Computing Business Division. So "our needs for the cloud platform included high availability, scalability and security; multi-granularity monitoring alarm capability; friendliness to containers and microservices; and perfect CI/CD support."

+ +

After an evaluation of existing technologies, Ji's team chose Kubernetes for orchestration. "CNCF brings quality assurance and a complete ecosystem for Kubernetes, which is very important for the wide application of Kubernetes," says Ji. Plus, "avoiding binding to an infrastructure technology or provider can help us ensure that our business is deployed and migrated in cross-regional environments, and can serve users all over the world."

+ +{{< case-studies/quote + image="/images/case-studies/slamtec/banner3.jpg" + author="BENNIU JI, DIRECTOR OF CLOUD COMPUTING BUSINESS DIVISION" +>}} +"CNCF brings quality assurance and a complete ecosystem for Kubernetes, which is very important for the wide application of Kubernetes." +{{< /case-studies/quote >}} + +

Thus Slamtec decided to adopt other CNCF projects as well. "We built a monitoring and logging system based on Prometheus and Fluentd," says Ji. "The integration between Prometheus/Fluentd and Kubernetes is convenient, with multiple dimensions of data monitoring and log collection capabilities."

+ +

The company uses Harbor as a container image repository. "Harbor's replication function helps us implement CI/CD on both private and public clouds," says Ji. "In addition, multi-project support, certification and policy configuration, and integration with Kubernetes are also excellent functions." Helm is also being used as a package manager, and the team is evaluating the Istio framework. "We're very pleased that Kubernetes and these frameworks can be seamlessly integrated," Ji adds.

+ +{{< case-studies/quote + image="/images/case-studies/slamtec/banner4.jpg" + author="BENNIU JI, DIRECTOR OF CLOUD COMPUTING BUSINESS DIVISION" +>}} +"Cloud native is suitable for microservice architecture, it's suitable for fast iteration and agile development, and it has a relatively perfect ecosystem and active community." +{{< /case-studies/quote >}} + +

With the new platform, Ji reports that Slamtec has experienced "18+ months of 100% stability!" For users, there is now zero service downtime and seamless upgrades. "We benefit from the abstraction of Kubernetes from network and storage," says Ji. "The dependence on external services can be decoupled from the service and placed under unified management in the cluster."

+ +

Using Kubernetes and Istio "significantly reduced the microservice configuration and maintenance efforts by 50%," he adds. With centralized metrics monitoring and log aggregation provided by Prometheus on Fluentd, teams are saving 50% of time spent on troubleshooting and debugging. Harbor replication has allowed production/staging/testing environments to cross public cloud and the private Kubernetes cluster to share the same container registry, resulting in 30% savings of CI/CD efforts. Plus, Ji adds, "Helm has accelerated prototype development and environment setup with its rich sharing charts."

+ +

In short, Ji says, Slamtec's new platform is helping it achieve one of its primary goals: the quick and easy release of products. With multiple release models and a centralized control interface, the platform is changing developers' lives for the better. Slamtec also offers a unified API for the development of automated deployment tools according to users' specific needs.

+ +{{< case-studies/quote author="BENNIU JI, DIRECTOR OF CLOUD COMPUTING BUSINESS DIVISION" >}} +"We benefit from the abstraction of Kubernetes from network and storage, the dependence on external services can be decoupled from the service and placed under unified management in the cluster." +{{< /case-studies/quote >}} + +

Given its own success with cloud native, Slamtec has just one piece of advice for organizations considering making the leap. "For already containerized services, you should migrate them to the cloud native architecture as soon as possible and enjoy the advantages brought by the cloud native ecosystem," Ji says. "To migrate traditional, non-containerized services, in addition to the architecture changes of the service itself, you need to fully consider the operation and maintenance workload required to build the cloud native architecture."

+ +

That said, the cost-benefit analysis has been simple for Slamtec. "Cloud native technology is suitable for microservice architecture, it's suitable for fast iteration and agile development, and it has a relatively perfect ecosystem and active community," says Ji. "It helps us ensure high availability of our business, while improving development and testing efficiency, shortening the research and development cycle and enabling rapid product delivery."

\ No newline at end of file diff --git a/content/bn/case-studies/slamtec/slamtec_featured_logo.png b/content/bn/case-studies/slamtec/slamtec_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/slamtec/slamtec_featured_logo.svg b/content/bn/case-studies/slamtec/slamtec_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/slingtv/index.html b/content/bn/case-studies/slingtv/index.html index e69de29bb2..c48e008d82 100644 --- a/content/bn/case-studies/slingtv/index.html +++ b/content/bn/case-studies/slingtv/index.html @@ -0,0 +1,79 @@ +--- +title: SlingTV Case Study +linkTitle: Sling TV +case_study_styles: true +cid: caseStudies +featured: true +weight: 49 +quote: > + I would almost be so bold as to say that most of these applications that we are building now would not have been possible without the cloud native patterns and the flexibility that Kubernetes enables. + +new_case_study_styles: true +heading_background: /images/case-studies/slingtv/banner1.jpg +heading_title_logo: /images/slingtv_logo.png +subheading: > + Sling TV: Marrying Kubernetes and AI to Enable Proper Web Scale +case_study_details: + - Company: Sling TV + - Location: Englewood, Colorado + - Industry: Streaming television +--- + +

Challenge

+ +

Launched by DISH Network in 2015, Sling TV experienced great customer growth from the beginning. After just a year, "we were going through some growing pains of some of the legacy systems and trying to find the right architecture to enable our future," says Brad Linder, Sling TV's Cloud Native & Big Data Evangelist. The company has particular challenges: "We take live TV and distribute it over the internet out to a user's device that we do not control," says Linder. "In a lot of ways, we are working in the Wild West: The internet is what it is going to be, and if a customer's service does not work for whatever reason, they do not care why. They just want things to work. Those are the variables of the equation that we have to try to solve. We really have to try to enable optionality and good customer experience at web scale."

+ +

Solution

+ +

Led by the belief that "the cloud native architectures and patterns really give us a lot of flexibility in meeting the needs of that sort of customer base," Linder partnered with Rancher Labs to build Sling TV's next-generation platform around Kubernetes. "We are going to need to enable a hybrid cloud strategy including multiple public clouds and an on-premise VMWare multi data center environment to meet the needs of the business at some point, so getting that sort of abstraction was a real goal," he says. "That is one of the biggest reasons why we picked Kubernetes." The team launched its first applications on Kubernetes in Sling TV's two internal data centers. The push to enable AWS as a data center option is underway and should be available by the end of 2018. The team has added Prometheus for monitoring and Jaeger for tracing, to work alongside the company's existing tool sets: Zenoss, New Relic and ELK.

+ +

Impact

+ +

"We are getting to the place where we can one-click deploy an entire data center – the compute, network, Kubernetes, logging, monitoring and all the apps," says Linder. "We have really enabled a platform thinking based approach to allowing applications to consume common tools. A new application can be onboarded in about an hour using common tooling and CI/CD processes. The gains on that side have been huge. Before, it took at least a few days to get things sorted for a new application to deploy. That does not consider the training of our operations staff to manage this new application. It is two or three orders of magnitude of savings in time and cost, and operationally it has given us the opportunity to let a core team of talented operations engineers manage common infrastructure and tooling to make our applications available at web scale."

+ +{{< case-studies/quote author="Brad Linder, Cloud Native & Big Data Evangelist for Sling TV" >}} +"I would almost be so bold as to say that most of these applications that we are building now would not have been possible without the cloud native patterns and the flexibility that Kubernetes enables." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +The beauty of streaming television, like the service offered by Sling TV, is that you can watch it from any device you want, wherever you want. +{{< /case-studies/lead >}} + + +

Of course, from the provider side of things, that creates a particular set of challenges "We take live TV and distribute it over the internet out to a user's device that we do not control," says Brad Linder, Sling TV's Cloud Native & Big Data Evangelist. "In a lot of ways, we are working in the Wild West: The internet is what it is going to be, and if a customer's service does not work for whatever reason, they do not care why. They just want things to work. Those are the variables of the equation that we have to try to solve. We really have to try to enable optionality and we have to do it at web scale."

+ +

Indeed, Sling TV experienced great customer growth from the beginning of its launch by DISH Network in 2015. After just a year, "we were going through some growing pains of some of the legacy systems and trying to find the right architecture to enable our future," says Linder. Tasked with building a next-generation web scale platform for the "personalized customer experience," Linder has spent the past year bringing Kubernetes to Sling TV.

+ +

Led by the belief that "the cloud native architectures and patterns really give us a lot of flexibility in meeting the needs of our customers," Linder partnered with Rancher Labs to build the platform around Kubernetes. "They have really helped us get our head around how to use Kubernetes," he says. "We needed the flexibility to enable our use case versus just a simple orchestrater. Enabling our future in a way that did not give us vendor lock-in was also a key part of our strategy. I think that is part of the Rancher value proposition."

+ +{{< case-studies/quote + image="/images/case-studies/slingtv/banner3.jpg" + author="Brad Linder, Cloud Native & Big Data Evangelist for Sling TV" +>}} +"We needed the flexibility to enable our use case versus just a simple orchestrater. Enabling our future in a way that did not give us vendor lock-in was also a key part of our strategy. I think that is part of the Rancher value proposition." +{{< /case-studies/quote >}} + +

One big reason he chose Kubernetes was getting a level of abstraction that would enable the company to "enable a hybrid cloud strategy including multiple public clouds and an on-premise VMWare multi data center environment to meet the needs of the business," he says. Another factor was how much the Kubernetes ecosystem has matured over the past couple of years. "We have spent a lot of time and energy around making logging, monitoring and alerting production ready to give us insights into applications' well-being," says Linder. The team has added Prometheus for monitoring and Jaeger for tracing, to work alongside the company's existing tool sets: Zenoss, New Relic and ELK.

+ +

With the emphasis on common tooling, "We are getting to the place where we can one-click deploy an entire data center – the compute, network, Kubernetes, logging, monitoring and all the apps," says Linder. "We have really enabled a platform thinking based approach to allowing applications to consume common tools and services. A new application can be onboarded in about an hour using common tooling and CI/CD processes. The gains on that side have been huge. Before, it took at least a few days to get things sorted for a new application to deploy. That does not consider the training of our operations staff to manage this new application. It is two or three orders of magnitude of savings in time and cost, and operationally it has given us the opportunity to let a core team of talented operations engineers manage common infrastructure and tooling to make our applications available at web scale."

+ +{{< case-studies/quote + image="/images/case-studies/slingtv/banner4.jpg" + author="Brad Linder, Cloud Native & Big Data Evangelist for Sling TV" +>}} +"We have to be able to react to changes and hiccups in the matrix. It is the foundation for our ability to deliver a high-quality service for our customers." +{{< /case-studies/quote >}} + +

The team launched its first applications on Kubernetes in Sling TV's two internal data centers in the early part of Q1 2018 and began to enable AWS as a data center option. The company plans to expand into other public clouds in the future.

+ +

The first application that went into production is a web socket-based back-end notification service. "It allows back-end changes to trigger messages to our clients in the field without the polling," says Linder. "We are talking about very high volumes of messages with this application. Without something like Kubernetes to be able to scale up and down, as well as just support that overall workload, that is pretty hard to do. I would almost be so bold as to say that most of these applications that we are building now would not have been possible without the cloud native patterns and the flexibility that Kubernetes enables."

+ +

Linder oversees three teams working together on building the next-generation platform: a platform engineering team; an enterprise middleware services team; and a big data and analytics team. "We have really tried to bring everything together to be able to have a client application interact with a cloud native middleware layer. That middleware layer must run on a platform, consume platform services and then have logs and events monitored by an artificial agent to keep things running smoothly," says Linder.

+ +{{< case-studies/quote author="BRAD LINDER, CLOUD NATIVE & BIG DATA EVANGELIST FOR SLING TV">}} +This undertaking is about "trying to marry Kubernetes with AI to enable web scale that just works". +{{< /case-studies/quote >}} + +

Ultimately, this undertaking is about "trying to marry Kubernetes with AI to enable web scale that just works," he adds. "We want the artificial agents and the big data platform using the actual logs and events coming out of the applications, Kubernetes, the infrastructure, backing services and changes to the environment to make decisions like, 'Hey we need more capacity for this service so please add more nodes.' From a platform perspective, if you are truly doing web scale stuff and you are not using AI and big data, in my opinion, you are going to implode under your own weight. It is not a question of if, it is when. If you are in a 'millions of users' sort of environment, that implosion is going to be catastrophic. We are on our way to this goal and have learned a lot along the way."

+ +

For Sling TV, moving to cloud native has been exactly what they needed. "We have to be able to react to changes and hiccups in the matrix," says Linder. "It is the foundation for our ability to deliver a high-quality service for our customers. Building intelligent platforms, tools and clients in the field consuming those services has got to be part of all of this. In my eyes that is a big part of what cloud native is all about. It is taking these distributed, potentially unreliable entities and enabling a robust customer experience they expect."

\ No newline at end of file diff --git a/content/bn/case-studies/slingtv/slingtv_featured_logo.png b/content/bn/case-studies/slingtv/slingtv_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/slingtv/slingtv_featured_logo.svg b/content/bn/case-studies/slingtv/slingtv_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/sos/index.html b/content/bn/case-studies/sos/index.html index e69de29bb2..da729565c5 100644 --- a/content/bn/case-studies/sos/index.html +++ b/content/bn/case-studies/sos/index.html @@ -0,0 +1,83 @@ +--- +title: SOS International Case Study +linkTitle: SOS International +case_study_styles: true +cid: caseStudies +logo: sos_featured_logo.png + +new_case_study_styles: true +heading_background: /images/case-studies/sos/banner1.jpg +heading_title_logo: /images/sos_logo.png +subheading: > + SOS International: Using Kubernetes to Provide Emergency Assistance in a Connected World +case_study_details: + - Company: SOS International + - Location: Frederiksberg, Denmark + - Industry: Medical and Travel Assistance +--- + +

Challenge

+ +

For the past six decades, SOS International has been providing reliable medical and travel assistance in the Nordic region. In recent years, the company's business strategy has required increasingly intense development in the digital space, but when it came to its IT systems, "SOS has a very fragmented legacy," with three traditional monoliths (Java, .NET, and IBM's AS/400) and a waterfall approach, says Martin Ahrentsen, Head of Enterprise Architecture. "We have been forced to institute both new technology and new ways of working, so we could be more efficient with a shorter time to market. It was a much more agile approach, and we needed to have a platform that can help us deliver that to the business."

+ +

Solution

+ +

After an unsuccessful search for a standard system, the company decided to take a platform approach and look for a solution that rolls up Kubernetes and the container technology. RedHat OpenShift proved to be a perfect fit for SOS's fragmented systems. "We have a lot of different technologies that we use, both code languages and others, and all of them could use the resources on the new platform," says Ahrentsen. Of the company's three monoliths, "we can provide this new bleeding edge technology to two of them (.NET and Java)." The platform went live in the spring of 2018; there are now six greenfield projects based on microservices architecture underway, plus all of the company's Java applications are currently going through a "lift and shift" migration.

+ +

Impact

+ +

Kubernetes has delivered "improved time to market, agility, and the ability to adapt to changes and new technologies," says Ahrentsen. "Just the time between when the software is ready for release and when it can be released has dramatically been improved." The way of thinking at SOS International has also changed for the better: "Since we have Kubernetes and easy access to scripts that can help us automate, creating CI/CD pipelines easily, that has spawned a lot of internal interest in how to do this fully automated, all the way. It creates a very good climate in order to start the journey," he says. Moreover, being part of the cloud native community has helped the company attract talent. "They want to work with the cool, new technologies," says Ahrentsen. "During our onboarding, we could see that we were chosen by IT professionals because we provided the new technologies."

+ +{{< case-studies/quote author="Martin Ahrentsen, Head of Enterprise Architecture, SOS International" >}} +"The speed of the changes that cloud native software and technologies drive right now is amazing, and following and adopting it is very crucial for us. The amazing technology provided by Kubernetes and cloud native has started the change for SOS towards a digital future." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +For six decades, SOS International has provided reliable emergency medical and travel assistance for customers in the Nordic countries. +{{< /case-studies/lead >}} + +

SOS operators handle a million cases and over a million phone calls a year. But in the past four years, the company's business strategy has required increasingly intense development in the digital space.

+ +

When it comes to its IT systems, "SOS has a very fragmented legacy," with three traditional monoliths running in the company's own data centers and a waterfall approach, says Martin Ahrentsen, Head of Enterprise Architecture. "We had to institute both new technology and new ways of working so we could be more efficient, with a shorter time to market. It was a much more agile approach, and we needed to have a platform that can help us deliver that to the business."

+ +

For a long time, Ahrentsen and his team searched for a standard solution that could work at SOS. "There aren't that many assistance companies like us, so you cannot get a standard system that fits for that; there is no perfect match," he says. "We would have to take a standard system and twist it too much so it is not standard anymore. Based on that, we decided to find a technology platform instead, with some common components that we could use to build the new digital systems and core systems."

+ +{{< case-studies/quote + image="/images/case-studies/sos/banner3.jpg" + author="Martin Ahrentsen, Head of Enterprise Architecture, SOS International" +>}} +"We have to deliver new digital services, but we also have to migrate the old stuff, and we have to transform our core systems into new systems built on top of this platform. One of the reasons why we chose this technology is that we could build new digital services while changing the old one." +{{< /case-studies/quote >}} + +

Sold on what Kubernetes could do, Ahrentsen zeroed in on platforms that could meet the business's needs right away. The company opted to use RedHat's OpenShift container platform, which incorporates Docker containers and Kubernetes, as well as a whole stack of technologies, including RedHat Hyperconverged Infrastructure and some midware components, all from the open source community.

+ +

Based on the company's criteria—technology fit, agility fit, legal requirements, and competencies—the OpenShift solution seemed like a perfect fit for SOS's fragmented systems. "We have a lot of different technologies that we use, both code languages and others, and all of them could use the resources on the new platform," says Ahrentsen. Of the company's three monoliths, "we can provide this new bleeding edge technology to two of them (.NET and Java)."

+ +

The platform went live in the spring of 2018; six greenfield projects based on microservices architecture were initially launched, plus all of the company's Java applications are currently going through a "lift and shift" migration. One of the first Kubernetes-based projects to go live is Remote Medical Treatment, a solution in which customers can contact the SOS alarm center via voice, chat, or video. "We managed to develop it in quite a short timeframe with focus on full CI/CD pipelining and a modern microservice architecture all running in a dual OpenShift cluster setup," says Ahrentsen. Onsite, which is used for dispatching rescue trucks around the Nordic countries, and Follow Your Truck, which allows customers to track tow trucks, are also being rolled out.

+ +{{< case-studies/quote + image="/images/case-studies/sos/banner4.jpg" + author="Martin Ahrentsen, Head of Enterprise Architecture, SOS International" +>}} +"During our onboarding, we could see that we were chosen by IT professionals because we provided the new technologies." +{{< /case-studies/quote >}} + +

The platform is still running on premise, because some of SOS's customers in the insurance industry, for whom the company handles data, don't yet have a cloud strategy. Kubernetes is allowing SOS to start in the data center and move to the cloud when the business is ready. "Over the next three to five years, all of them will have a strategy, and we could probably take the data and go to the cloud," says Ahrentsen. There's also the possibility of moving to a hybrid cloud setup for sensitive and non-sensitive data.

+ +

SOS's technology is certainly in a state of transition. "We have to deliver new digital services, but we also have to migrate the old stuff, and we have to transform our core systems into new systems built on top of this platform," says Ahrentsen. "One of the reasons why we chose this technology is that we could build new digital services while changing the old one."

+ +

But already, Kubernetes has delivered improved time to market, as evidenced by how quickly the greenfield projects were developed and released. "Just the time between when the software is ready for release and when it can be released has dramatically been improved," says Ahrentsen.

+ +

Moreover, being part of the cloud native community has helped the company attract talent as it pursues a goal of growing the ranks of engineers, operators, and architects from 60 to 100 this year. "They want to work with the cool, new technologies," says Ahrentsen. "During our onboarding, we could see that we were chosen by IT professionals because we provided the new technologies."

+ +{{< case-studies/quote author="Martin Ahrentsen, Head of Enterprise Architecture, SOS International" >}} +"The future world where everything is connected and sends data will create a big potential for us in terms of new market opportunities. But it will also set a big demand on the IT platform and what we need to deliver." +{{< /case-studies/quote >}} + +

The way of thinking at SOS International has also changed dramatically: "Since we have Kubernetes and easy access to scripts that can help us automate, creating CI/CD pipelines easily, that has spawned a lot of internal interest in how to do this fully automated, all the way. It creates a very good climate in order to start the journey."

+ +

For this journey at SOS, digitalization and optimization are the key words. "For IT to deliver this, we need to improve, and that is not just on the way of using Kubernetes and the platform," says Ahrentsen. "It's also a way of building the systems to be ready for automation, and afterwards, machine learning and other interesting technologies that are on the way."

+ +

Case in point: the introduction of the internet of things into automobiles. The European Commission now mandates all new cars to be equipped with eCall, which transmits location and other data in case of a serious traffic accident. SOS provides this service as smart auto assistance. "We receive the call and find out if an emergency response team needs to be sent, or if it's not heavy impact," says Ahrentsen. "The future world where everything is connected and sends data will create a big potential for us in terms of new market opportunities. But it will also set a big demand on the IT platform and what we need to deliver."

+ +

Ahrentsen feels that SOS is well equipped for the challenge, given the technology choices the company has made. "The speed of the changes that cloud native software and technologies drive right now is amazing, and following it and adopting it is very crucial for us," he says. "The amazing technology provided by Kubernetes and cloud native has started the change for SOS towards a digital future."

\ No newline at end of file diff --git a/content/bn/case-studies/sos/sos_featured_logo.png b/content/bn/case-studies/sos/sos_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/sos/sos_featured_logo.svg b/content/bn/case-studies/sos/sos_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/spotify/index.html b/content/bn/case-studies/spotify/index.html index e69de29bb2..7448b40939 100644 --- a/content/bn/case-studies/spotify/index.html +++ b/content/bn/case-studies/spotify/index.html @@ -0,0 +1,79 @@ +--- +title: Spotify Case Study +linkTitle: Spotify +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/spotify/banner1.jpg +heading_title_text: Spotify +subheading: > + Spotify: An Early Adopter of Containers, Spotify Is Migrating from Homegrown Orchestration to Kubernetes +case_study_details: + - Company: Spotify + - Location: Global + - Industry: Entertainment +--- + +

Challenge

+ +

Launched in 2008, the audio-streaming platform has grown to over 200 million monthly active users across the world. "Our goal is to empower creators and enable a really immersive listening experience for all of the consumers that we have today—and hopefully the consumers we'll have in the future," says Jai Chakrabarti, Director of Engineering, Infrastructure and Operations. An early adopter of microservices and Docker, Spotify had containerized microservices running across its fleet of VMs with a homegrown container orchestration system called Helios. By late 2017, it became clear that "having a small team working on the features was just not as efficient as adopting something that was supported by a much bigger community," he says.

+ +

Solution

+ +

"We saw the amazing community that had grown up around Kubernetes, and we wanted to be part of that," says Chakrabarti. Kubernetes was more feature-rich than Helios. Plus, "we wanted to benefit from added velocity and reduced cost, and also align with the rest of the industry on best practices and tools." At the same time, the team wanted to contribute its expertise and influence in the flourishing Kubernetes community. The migration, which would happen in parallel with Helios running, could go smoothly because "Kubernetes fit very nicely as a complement and now as a replacement to Helios," says Chakrabarti.

+ +

Impact

+ +

The team spent much of 2018 addressing the core technology issues required for a migration, which started late that year and is a big focus for 2019. "A small percentage of our fleet has been migrated to Kubernetes, and some of the things that we've heard from our internal teams are that they have less of a need to focus on manual capacity provisioning and more time to focus on delivering features for Spotify," says Chakrabarti. The biggest service currently running on Kubernetes takes about 10 million requests per second as an aggregate service and benefits greatly from autoscaling, says Site Reliability Engineer James Wen. Plus, he adds, "Before, teams would have to wait for an hour to create a new service and get an operational host to run it in production, but with Kubernetes, they can do that on the order of seconds and minutes." In addition, with Kubernetes's bin-packing and multi-tenancy capabilities, CPU utilization has improved on average two- to threefold.

+ +{{< case-studies/quote author="Jai Chakrabarti, Director of Engineering, Infrastructure and Operations, Spotify" >}} +"We saw the amazing community that's grown up around Kubernetes, and we wanted to be part of that. We wanted to benefit from added velocity and reduced cost, and also align with the rest of the industry on best practices and tools." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +"Our goal is to empower creators and enable a really immersive listening experience for all of the consumers that we have today—and hopefully the consumers we'll have in the future," says Jai Chakrabarti, Director of Engineering, Infrastructure and Operations at Spotify. Since the audio-streaming platform launched in 2008, it has already grown to over 200 million monthly active users around the world, and for Chakrabarti's team, the goal is solidifying Spotify's infrastructure to support all those future consumers too. +{{< /case-studies/lead >}} + +

An early adopter of microservices and Docker, Spotify had containerized microservices running across its fleet of VMs since 2014. The company used an open source, homegrown container orchestration system called Helios, and in 2016-17 completed a migration from on premise data centers to Google Cloud. Underpinning these decisions, "We have a culture around autonomous teams, over 200 autonomous engineering squads who are working on different pieces of the pie, and they need to be able to iterate quickly," Chakrabarti says. "So for us to have developer velocity tools that allow squads to move quickly is really important."

+ +

But by late 2017, it became clear that "having a small team working on the Helios features was just not as efficient as adopting something that was supported by a much bigger community," says Chakrabarti. "We saw the amazing community that had grown up around Kubernetes, and we wanted to be part of that. We wanted to benefit from added velocity and reduced cost, and also align with the rest of the industry on best practices and tools." At the same time, the team wanted to contribute its expertise and influence in the flourishing Kubernetes community.

+ +{{< case-studies/quote + image="/images/case-studies/spotify/banner3.jpg" + author="Dave Zolotusky, Software Engineer, Infrastructure and Operations, Spotify" +>}} +"The community has been extremely helpful in getting us to work through all the technology much faster and much easier. And it's helped us validate all the things we're doing." +{{< /case-studies/quote >}} + +

Another plus: "Kubernetes fit very nicely as a complement and now as a replacement to Helios, so we could have it running alongside Helios to mitigate the risks," says Chakrabarti. "During the migration, the services run on both, so we're not having to put all of our eggs in one basket until we can validate Kubernetes under a variety of load circumstances and stress circumstances."

+ +

The team spent much of 2018 addressing the core technology issues required for the migration. "We were able to use a lot of the Kubernetes APIs and extensibility features of Kubernetes to support and interface with our legacy infrastructure, so the integration was straightforward and easy," says Site Reliability Engineer James Wen.

+ +

Migration started late that year and has accelerated in 2019. "Our focus is really on stateless services, and once we address our last remaining technology blocker, that's where we hope that the uptick will come from," says Chakrabarti. "For stateful services there's more work that we need to do."

+ +

A small percentage of Spotify's fleet, containing over 150 services, has been migrated to Kubernetes so far. "We've heard from our customers that they have less of a need to focus on manual capacity provisioning and more time to focus on delivering features for Spotify," says Chakrabarti. The biggest service currently running on Kubernetes takes over 10 million requests per second as an aggregate service and benefits greatly from autoscaling, says Wen. Plus, Wen adds, "Before, teams would have to wait for an hour to create a new service and get an operational host to run it in production, but with Kubernetes, they can do that on the order of seconds and minutes." In addition, with Kubernetes's bin-packing and multi-tenancy capabilities, CPU utilization has improved on average two- to threefold.

+ +{{< case-studies/quote + image="/images/case-studies/spotify/banner4.jpg" + author="James Wen, Site Reliability Engineer, Spotify" +>}} +"We were able to use a lot of the Kubernetes APIs and extensibility features to support and interface with our legacy infrastructure, so the integration was straightforward and easy." +{{< /case-studies/quote >}} + +

Chakrabarti points out that for all four of the top-level metrics that Spotify looks at—lead time, deployment frequency, time to resolution, and operational load—"there is impact that Kubernetes is having."

+ +

One success story that's come out of the early days of Kubernetes is a tool called Slingshot that a Spotify team built on Kubernetes. "With a pull request, it creates a temporary staging environment that self destructs after 24 hours," says Chakrabarti. "It's all facilitated by Kubernetes, so that's kind of an exciting example of how, once the technology is out there and ready to use, people start to build on top of it and craft their own solutions, even beyond what we might have envisioned as the initial purpose of it."

+ +

Spotify has also started to use gRPC and Envoy, replacing existing homegrown solutions, just as it had with Kubernetes. "We created things because of the scale we were at, and there was no other solution existing," says Dave Zolotusky, Software Engineer, Infrastructure and Operations. "But then the community kind of caught up and surpassed us, even for tools that work at that scale."

+ +{{< case-studies/quote author="James Wen, Site Reliability Engineer, Spotify" >}} +"It's been surprisingly easy to get in touch with anybody we wanted to, to get expertise on any of the things we're working with. And it's helped us validate all the things we're doing." +{{< /case-studies/quote >}} + +

Both of those technologies are in early stages of adoption, but already "we have reason to believe that gRPC will have a more drastic impact during early development by helping with a lot of issues like schema management, API design, weird backward compatibility issues, things like that," says Zolotusky. "So we're leaning heavily on gRPC to help us in that space."

+ +

As the team continues to fill out Spotify's cloud native stack—tracing is up next—it is using the CNCF landscape as a helpful guide. "We look at things we need to solve, and if there are a bunch of projects, we evaluate them equivalently, but there is definitely value to the project being a CNCF project," says Zolotusky.

+ +

Spotify's experiences so far with Kubernetes bears this out. "The community has been extremely helpful in getting us to work through all the technology much faster and much easier," Zolotusky says. "It's been surprisingly easy to get in touch with anybody we wanted to, to get expertise on any of the things we're working with. And it's helped us validate all the things we're doing."

\ No newline at end of file diff --git a/content/bn/case-studies/spotify/spotify_featured.svg b/content/bn/case-studies/spotify/spotify_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/spotify/spotify_featured_logo.png b/content/bn/case-studies/spotify/spotify_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/squarespace/index.html b/content/bn/case-studies/squarespace/index.html index e69de29bb2..649c678003 100644 --- a/content/bn/case-studies/squarespace/index.html +++ b/content/bn/case-studies/squarespace/index.html @@ -0,0 +1,71 @@ +--- +title: Squarespace Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/squarespace/banner1.jpg +heading_title_logo: /images/squarespace_logo.png +subheading: > + Squarespace: Gaining Productivity and Resilience with Kubernetes +case_study_details: + - Company: Squarespace + - Location: New York, N.Y. + - Industry: Software as a Service, Website-Building Platform +--- + +

Challenge

+ +

Moving from a monolith to microservices in 2014 "solved a problem on the development side, but it pushed that problem to the infrastructure team," says Kevin Lynch, Staff Engineer on the Site Reliability team at Squarespace. "The infrastructure deployment process on our 5,000 VM hosts was slowing everyone down."

+ +

Solution

+ +

The team experimented with container orchestration platforms, and found that Kubernetes "answered all the questions that we had," says Lynch. The company began running Kubernetes in its data centers in 2016.

+ +

Impact

+ +

Since Squarespace moved to Kubernetes, in conjunction with modernizing its networking stack, deployment time has been reduced by almost 85%. Before, their VM deployment would take half an hour; now, says Lynch, "someone can generate a templated application, deploy it within five minutes, and have actual instances containerized, running in our staging environment at that point." Because of that, "productivity time is the big cost saver," he adds. "When we started the Kubernetes project, we had probably a dozen microservices. Today there are twice that in the pipeline being actively worked on." Resilience has also been improved with Kubernetes: "If a node goes down, it's rescheduled immediately and there's no performance impact."

+ +{{< case-studies/quote author="Kevin Lynch, Staff Engineer on the Site Reliability team at Squarespace" >}} + +
+"Once you prove that Kubernetes solves one problem, everyone immediately starts solving other problems without you even having to evangelize it." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Since it was started in a dorm room in 2003, Squarespace has made it simple for millions of people to create their own websites. +{{< /case-studies/lead >}} + +

Behind the scenes, though, the company's monolithic Java application was making things not so simple for its developers to keep improving the platform. So in 2014, the company decided to "go down the microservices path," says Kevin Lynch, staff engineer on Squarespace's Site Reliability team. "But we were always deploying our applications in vCenter VMware VMs [in our own data centers]. Microservices solved a problem on the development side, but it pushed that problem to the Infrastructure team. The infrastructure deployment process on our 5,000 VM hosts was slowing everyone down."

+ +

After experimenting with another container orchestration platform and "breaking it in very painful ways," Lynch says, the team began experimenting with Kubernetes in mid-2016 and found that it "answered all the questions that we had." Deploying it in the data center rather than the public cloud was their biggest challenge, and at the time, not a lot of other companies were doing that. "We had to figure out how to deploy this in our infrastructure for ourselves, and we had to integrate it with our other applications," says Lynch.

+ +

At the same time, Squarespace's Network Engineering team was modernizing its networking stack, switching from a traditional layer-two network to a layer-three spine-and-leaf network. "It mapped beautifully with what we wanted to do with Kubernetes," says Lynch. "It gives us the ability to have our servers communicate directly with the top-of-rack switches. We use Calico for CNI networking for Kubernetes, so we can announce all these individual Kubernetes pod IP addresses and have them integrate seamlessly with our other services that are still provisioned in the VMs."

+ +{{< case-studies/quote image="/images/case-studies/squarespace/banner3.jpg" >}} +After experimenting with another container orchestration platform and "breaking it in very painful ways," Lynch says, the team began experimenting with Kubernetes in mid-2016 and found that it "answered all the questions that we had." +{{< /case-studies/quote >}} + +

Within a couple months, they had a stable cluster for their internal use, and began rolling out Kubernetes for production. They also added Zipkin and CNCF projects Prometheus and fluentd to their cloud native stack. "We switched to Kubernetes, a new world, and we revamped all our other tooling as well," says Lynch. "It allowed us to streamline our process, so we can now easily create an entire microservice project from templates, generate the code and deployment pipeline for that, generate the Dockerfile, and then immediately just ship a workable, deployable project to Kubernetes." Deployments across Dev/QA/Stage/Prod were also "simplified drastically," Lynch adds. "Now there is little configuration variation."

+ +

And the whole process takes only five minutes, an almost 85% reduction in time compared to their VM deployment. "From end to end that probably took half an hour, and that's not accounting for the fact that an infrastructure engineer would be responsible for doing that, so there's some business delay in there as well."

+ +

With faster deployments, "productivity time is the big cost saver," says Lynch. "We had a team that was implementing a new file storage service, and they just started integrating that with our storage back end without our involvement"—which wouldn't have been possible before Kubernetes. He adds: "When we started the Kubernetes project, we had probably a dozen microservices. Today there are twice that in the pipeline being actively worked on."

+ +{{< case-studies/quote image="/images/case-studies/squarespace/banner4.jpg" >}} +"We switched to Kubernetes, a new world....It allowed us to streamline our process, so we can now easily create an entire microservice project from templates," Lynch says. And the whole process takes only five minutes, an almost 85% reduction in time compared to their VM deployment. +{{< /case-studies/quote >}} + +

There's also been a positive impact on the application's resilience. "When we're deploying VMs, we have to build tooling to ensure that a service is spread across racks appropriately and can withstand failure," he says. "Kubernetes just does it. If a node goes down, it's rescheduled immediately and there's no performance impact."

+ +

Another big benefit is autoscaling. "It wasn't really possible with the way we've been using VMware," says Lynch, "but now we can just add the appropriate autoscaling features via Kubernetes directly, and boom, it's scaling up as demand increases. And it worked out of the box."

+ +

For others starting out with Kubernetes, Lynch says his best advice is to "fail fast": "Once you've planned things out, just execute. Kubernetes has been really great for trying something out quickly and seeing if it works or not."

+ +{{< case-studies/quote >}} +"When we're deploying VMs, we have to build tooling to ensure that a service is spread across racks appropriately and can withstand failure," he says. "Kubernetes just does it. If a node goes down, it's rescheduled immediately and there's no performance impact." +{{< /case-studies/quote >}} + +

Lynch and his team are planning to open source some of the tools they've developed to extend Kubernetes and use it as an API itself. The first tool injects dependent applications as containers in a pod. "When you ship an application, usually it comes along with a whole bunch of dependent applications that need to be shipped with that, for example, fluentd for logging," he explains. With this tool, the developer doesn't need to worry about the configurations.

+ +

Going forward, all new services at Squarespace are going into Kubernetes, and the end goal is to convert everything it can. About a quarter of existing services have been migrated. "Our monolithic application is going to be the last one, just because it's so big and complex," says Lynch. "But now I'm seeing other services get moved over, like the file storage service. Someone just did it and it worked—painlessly. So I believe if we tackle it, it's probably going to be a lot easier than we fear. Maybe I should just take my own advice and fail fast!"

\ No newline at end of file diff --git a/content/bn/case-studies/squarespace/squarespace_featured_logo.png b/content/bn/case-studies/squarespace/squarespace_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/squarespace/squarespace_featured_logo.svg b/content/bn/case-studies/squarespace/squarespace_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/thredup/index.html b/content/bn/case-studies/thredup/index.html index e69de29bb2..c077184bc7 100644 --- a/content/bn/case-studies/thredup/index.html +++ b/content/bn/case-studies/thredup/index.html @@ -0,0 +1,77 @@ +--- +title: ThredUp Case Study +linkTitle: thredup +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/thredup/banner1.jpg +heading_title_logo: /images/thredup_logo.png +case_study_details: + - Company: ThredUp + - Location: San Francisco, CA + - Industry: eCommerce +--- + +

Challenge

+ +

The largest online consignment store for women's and children's clothes, ThredUP launched in 2009 with a monolithic application running on Amazon Web Services. Though the company began breaking up the monolith into microservices a few years ago, the infrastructure team was still dealing with handcrafted servers, which hampered productivity. "We've configured them just to get them out as fast as we could, but there was no standardization, and as we kept growing, that became a bigger and bigger chore to manage," says Cofounder/CTO Chris Homer. The infrastructure, they realized, needed to be modernized to enable the velocity the company needed. "It's really important to a company like us who's disrupting the retail industry to make sure that as we're building software and getting it out in front of our users, we can do it on a fast cycle and learn a ton as we experiment," adds Homer. "We wanted to make sure that our engineers could embrace the DevOps mindset as they built software. It was really important to us that they could own the life cycle from end to end, from conception at design, through shipping it and running it in production, from marketing to ecommerce, the user experience and our internal distribution center operations."

+ +

Solution

+ +

In early 2017, the company adopted Kubernetes for container orchestration, and in the course of a year, the entire infrastructure was moved to Kubernetes.

+ +

Impact

+ +

Before, "even considering that we already have all the infrastructure in the cloud, databases and services, and all these good things," says Infrastructure Engineer Oleksandr Snagovskyi, setting up a new service meant waiting 2-4 weeks just to get the environment. With Kubernetes, new application roll-out time has decreased from several days or weeks to minutes or hours. Now, says Infrastructure Engineer Oleksii Asiutin, "our developers can experiment with existing applications and create new services, and do it all blazingly fast." In fact, deployment time has decreased about 50% on average for key services. "Lead time" for all applications is under 20 minutes, enabling engineers to deploy multiple times a day. Plus, 3200+ ansible scripts have been deprecated in favor of helm charts. And impressively, hardware cost has decreased 56% while the number of services ThredUP runs has doubled.

+ +{{< case-studies/quote author="CHRIS HOMER, COFOUNDER/CTO, THREDUP" >}} + +
+"Moving towards cloud native technologies like Kubernetes really unlocks our ability to experiment quickly and learn from customers along the way." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +The largest online consignment store for women's and children's clothes, ThredUP is focused on getting consumers to think second-hand first. "We're disrupting the retail industry, and it's really important to us to make sure that as we're building software and getting it out in front of our users, we can do it on a fast cycle and learn a ton as we experiment," says Cofounder/CTO Chris Homer. +{{< /case-studies/lead >}} + +

But over the past few years, ThredUP, which was launched in 2009 with a monolithic application running on Amazon Web Services, was feeling growing pains as its user base passed the 20- million mark. Though the company had begun breaking up the monolith into microservices, the infrastructure team was still dealing with handcrafted servers, which hampered productivity. "We've configured them just to get them out as fast as we could, but there was no standardization, and as we kept growing, that became a bigger and bigger chore to manage," says Homer. The infrastructure, Homer realized, needed to be modernized to enable the velocity—and the culture—the company wanted.

+ +

"We wanted to make sure that our engineers could embrace the DevOps mindset as they built software," Homer says. "It was really important to us that they could own the life cycle from end to end, from conception at design, through shipping it and running it in production, from marketing to ecommerce, the user experience and our internal distribution center operations."

+ +{{< case-studies/quote + image="/images/case-studies/thredup/banner3.jpg" + author="CHRIS HOMER, COFOUNDER/CTO, THREDUP" +>}} +"Kubernetes enabled auto scaling in a seamless and easily manageable way on days like Black Friday. We no longer have to sit there adding instances, monitoring the traffic, doing a lot of manual work." +{{< /case-studies/quote >}} + +

In early 2017, Homer found the solution with Kubernetes container orchestration. In the course of a year, the company migrated its entire infrastructure to Kubernetes, starting with its website applications and concluding with its operations backend. Teams are now also using Fluentd and Helm. "Initially there were skeptics about the value that this move to cloud native technologies would bring, but as we went through the process, people very quickly started to realize the benefit of having seamless upgrades and easy rollbacks without having to worry about what was happening," says Homer. "It unlocks the developers' confidence in being able to deploy quickly, learn, and if you make a mistake, you can roll it back without any issue."

+ +

According to the infrastructure team, the key improvement was the consistent experience Kubernetes enabled for developers. "It lets developers work in the same environment that their application will be running in production," says Infrastructure Engineer Oleksandr Snagovskyi. Plus, "It became easier to test, easier to refine, and easier to deploy, because everything's done automatically," says Infrastructure Engineer Oleksii Asiutin. "One of the main goals of our team is to make developers' lives more comfortable, and we are achieving this with Kubernetes. They can experiment with existing applications and create new services, and do it all blazingly fast."

+ +{{< case-studies/quote + image="/images/case-studies/thredup/banner4.jpg" + author="OLEKSII ASIUTIN, INFRASTRUCTURE ENGINEER, THREDUP" +>}} +"One of the main goals of our team is to make developers' lives more comfortable, and we are achieving this with Kubernetes. They can experiment with existing applications and create new services, and do it all blazingly fast." +{{< /case-studies/quote >}} + +

Before, "even considering that we already have all the infrastructure in the cloud, databases and services, and all these good things," says Snagovskyi, setting up a new service meant waiting 2-4 weeks just to get the environment. With Kubernetes, because of simple configuration and minimal dependency on the infrastructure team, the roll-out time for new applications has decreased from several days or weeks to minutes or hours.

+ +

In fact, deployment time has decreased about 50% on average for key services. "Fast deployment and parallel test execution in Kubernetes keep a 'lead time' for all applications under 20 minutes," allowing engineers to do multiple releases a day, says Director of Infrastructure Roman Chepurnyi. The infrastructure team's jobs, he adds, have become less burdensome, too: "We can execute seamless upgrades frequently and keep cluster performance and security up-to-date because OS-level hardening and upgrades of a Kubernetes cluster is a non-blocking activity for production operations and does not involve coordination with multiple engineering teams."

+ +

More than 3,200 ansible scripts have been deprecated in favor of Helm charts. And impressively, hardware cost has decreased 56% while the number of services ThredUP runs has doubled.

+ +{{< case-studies/quote author="CHRIS HOMER, COFOUNDER/CTO, THREDUP">}} +"Our future's all about automation, and behind that, cloud native technologies are going to unlock our ability to embrace that and go full force towards the future." +{{< /case-studies/quote >}} + +

Perhaps the impact is most evident on the busiest days in retail. "Kubernetes enabled auto scaling in a seamless and easily manageable way on days like Black Friday," says Homer. "We no longer have to sit there adding instances, monitoring the traffic, doing a lot of manual work. That's handled for us, and instead we can actually have some turkey, drink some wine and enjoy our families."

+ +

For ThredUP, Kubernetes fits perfectly with the company's vision for how it's changing retail. Some of what ThredUP does is still very manual: "As our customers send bags of items to our distribution centers, they're photographed, inspected, tagged, and put online today," says Homer.

+ +

But in every other aspect, "we use different forms of technology to drive everything we do," Homer says. "We have machine learning algorithms to help predict the likelihood of sale for items, which drives our pricing algorithm. We have personalization algorithms that look at the images and try to determine style and match users' preferences across our systems."

+ +

Count Kubernetes as one of those drivers. "Our future's all about automation," says Homer, "and behind that, cloud native technologies are going to unlock our ability to embrace that and go full force towards the future."

\ No newline at end of file diff --git a/content/bn/case-studies/thredup/thredup_featured_logo.png b/content/bn/case-studies/thredup/thredup_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/thredup/thredup_featured_logo.svg b/content/bn/case-studies/thredup/thredup_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/vsco/index.html b/content/bn/case-studies/vsco/index.html index e69de29bb2..beedf2b728 100644 --- a/content/bn/case-studies/vsco/index.html +++ b/content/bn/case-studies/vsco/index.html @@ -0,0 +1,79 @@ +--- +title: vsco Case Study +linkTitle: vsco +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/vsco/banner1.jpg +heading_title_logo: /images/vsco_logo.png +subheading: > + VSCO: How a Mobile App Saved 70% on Its EC2 Bill with Cloud Native +case_study_details: + - Company: VSCO + - Location: Oakland, CA + - Industry: Photo Mobile App +--- + +

Challenge

+ +

After moving from Rackspace to AWS in 2015, VSCO began building Node.js and Go microservices in addition to running its PHP monolith. The team containerized the microservices using Docker, but "they were all in separate groups of EC2 instances that were dedicated per service," says Melinda Lu, Engineering Manager for the Machine Learning Team. Adds Naveen Gattu, Senior Software Engineer on the Community Team: "That yielded a lot of wasted resources. We started looking for a way to consolidate and be more efficient in the AWS EC2 instances."

+ +

Solution

+ +

The team began exploring the idea of a scheduling system, and looked at several solutions including Mesos and Swarm before deciding to go with Kubernetes. VSCO also uses gRPC and Envoy in their cloud native stack.

+ +

Impact

+ +

Before, deployments required "a lot of manual tweaking, in-house scripting that we wrote, and because of our disparate EC2 instances, Operations had to babysit the whole thing from start to finish," says Senior Software Engineer Brendan Ryan. "We didn't really have a story around testing in a methodical way, and using reusable containers or builds in a standardized way." There's a faster onboarding process now. Before, the time to first deploy was two days' hands-on setup time; now it's two hours. By moving to continuous integration, containerization, and Kubernetes, velocity was increased dramatically. The time from code-complete to deployment in production on real infrastructure went from one to two weeks to two to four hours for a typical service. Adds Gattu: "In man hours, that's one person versus a developer and a DevOps individual at the same time." With an 80% decrease in time for a single deployment to happen in production, the number of deployments has increased as well, from 1200/year to 3200/year. There have been real dollar savings too: With Kubernetes, VSCO is running at 2x to 20x greater EC2 efficiency, depending on the service, adding up to about 70% overall savings on the company's EC2 bill. Ryan points to the company's ability to go from managing one large monolithic application to 50+ microservices with "the same size developer team, more or less. And we've only been able to do that because we have increased trust in our tooling and a lot more flexibility, so we don't need to employ a DevOps engineer to tune every service." With Kubernetes, gRPC, and Envoy in place, VSCO has seen an 88% reduction in total minutes of outage time, mainly due to the elimination of JSON-schema errors and service-specific infrastructure provisioning errors, and an increased speed in fixing outages.

+ +{{< case-studies/quote author="MELINDA LU, ENGINEERING MANAGER FOR VSCO'S MACHINE LEARNING TEAM" >}} +"I've been really impressed seeing how our engineers have come up with creative solutions to things by just combining a lot of Kubernetes primitives. Exposing Kubernetes constructs as a service to our engineers as opposed to exposing higher order constructs has worked well for us. It lets you get familiar with the technology and do more interesting things with it." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +A photography app for mobile, VSCO was born in the cloud in 2011. In the beginning, "we were using Rackspace and had one PHP monolith application talking to MySQL database, with FTP deployments, no containerization, no orchestration," says Software Engineer Brendan Ryan, "which was sufficient at the time." +{{< /case-studies/lead >}} + +

After VSCO moved to AWS in 2015 and its user base passed the 30 million mark, the team quickly realized that set-up wouldn't work anymore. Developers had started building some Node and Go microservices, which the team tried containerizing with Docker. But "they were all in separate groups of EC2 instances that were dedicated per service," says Melinda Lu, Engineering Manager for the Machine Learning Team. Adds Naveen Gattu, Senior Software Engineer on the Community Team: "That yielded a lot of wasted resources. We started looking for a way to consolidate and be more efficient in the EC2 instances."

+ +

With a checklist that included ease of use and implementation, level of support, and whether it was open source, the team evaluated a few scheduling solutions, including Mesos and Swarm, before deciding to go with Kubernetes. "Kubernetes seemed to have the strongest open source community around it," says Lu. Plus, "We had started to standardize on a lot of the Google stack, with Go as a language, and gRPC for almost all communication between our own services inside the data center. So it seemed pretty natural for us to choose Kubernetes."

+ +{{< case-studies/quote + image="/images/case-studies/vsco/banner2.jpg" + author="MELINDA LU, ENGINEERING MANAGER FOR VSCO'S MACHINE LEARNING TEAM" +>}} +"Kubernetes seemed to have the strongest open source community around it, plus, we had started to standardize on a lot of the Google stack, with Go as a language, and gRPC for almost all communication between our own services inside the data center. So it seemed pretty natural for us to choose Kubernetes." +{{< /case-studies/quote >}} + +

At the time, there were few managed Kubernetes offerings and less tooling available in the ecosystem, so the team stood up its own cluster and built some custom components for its specific deployment needs, such as an automatic ingress controller and policy constructs for canary deploys. "We had already begun breaking up the monolith, so we moved things one by one, starting with pretty small, low-risk services," says Lu. "Every single new service was deployed there." The first service was migrated at the end of 2016, and after one year, 80% of the entire stack was on Kubernetes, including the rest of the monolith.

+ +

The impact has been great. Deployments used to require "a lot of manual tweaking, in-house scripting that we wrote, and because of our disparate EC2 instances, Operations had to babysit the whole thing from start to finish," says Ryan. "We didn't really have a story around testing in a methodical way, and using reusable containers or builds in a standardized way." There's a faster onboarding process now. Before, the time to first deploy was two days' hands-on setup time; now it's two hours.

+ +

By moving to continuous integration, containerization, and Kubernetes, velocity was increased dramatically. The time from code-complete to deployment in production on real infrastructure went from one to two weeks to two to four hours for a typical service. Plus, says Gattu, "In man hours, that's one person versus a developer and a DevOps individual at the same time." With an 80% decrease in time for a single deployment to happen in production, the number of deployments has increased as well, from 1200/year to 3200/year.

+ +{{< case-studies/quote + image="/images/case-studies/vsco/banner4.jpg" + author="MELINDA LU, ENGINEERING MANAGER FOR VSCO'S MACHINE LEARNING TEAM" +>}} +"I've been really impressed seeing how our engineers have come up with really creative solutions to things by just combining a lot of Kubernetes primitives, exposing Kubernetes constructs as a service to our engineers as opposed to exposing higher order constructs has worked well for us. It lets you get familiar with the technology and do more interesting things with it." +{{< /case-studies/quote >}} + +

There have been real dollar savings too: With Kubernetes, VSCO is running at 2x to 20x greater EC2 efficiency, depending on the service, adding up to about 70% overall savings on the company's EC2 bill.

+ +

Ryan points to the company's ability to go from managing one large monolithic application to 50+ microservices with "the same size developer team, more or less. And we've only been able to do that because we have increased trust in our tooling and a lot more flexibility when there are stress points in our system. You can increase CPU memory requirements of a service without having to bring up and tear down instances, and read through AWS pages just to be familiar with a lot of jargon, which isn't really tenable for a company at our scale."

+ +

Envoy and gRPC have also had a positive impact at VSCO. "We get many benefits from gRPC out of the box: type safety across multiple languages, ease of defining services with the gRPC IDL, built-in architecture like interceptors, and performance improvements over HTTP/1.1 and JSON," says Lu.

+ +

VSCO was one of the first users of Envoy, getting it in production five days after it was open sourced. "We wanted to serve gRPC and HTTP/2 directly to mobile clients through our edge load balancers, and Envoy was our only reasonable solution," says Lu. "The ability to send consistent and detailed stats by default across all services has made observability and standardization of dashboards much easier." The metrics that come built in with Envoy have also "greatly helped with debugging," says DevOps Engineer Ryan Nguyen.

+ +{{< case-studies/quote author="NAVEEN GATTU, SENIOR SOFTWARE ENGINEER ON VSCO'S COMMUNITY TEAM" >}} +"Because there's now an organization that supports Kubernetes, does that build confidence? The answer is a resounding yes." +{{< /case-studies/quote >}} + +

With Kubernetes, gRPC, and Envoy in place, VSCO has seen an 88% reduction in total minutes of outage time, mainly due to the elimination of JSON-schema errors and service-specific infrastructure provisioning errors, and an increased speed in fixing outages.

+ +

Given its success using CNCF projects, VSCO is starting to experiment with others, including CNI and Prometheus. "To have a large organization backing these technologies, we have a lot more confidence trying this software and deploying to production," says Nguyen.

+ +

The team has made contributions to gRPC and Envoy, and is hoping to be even more active in the CNCF community. "I've been really impressed seeing how our engineers have come up with really creative solutions to things by just combining a lot of Kubernetes primitives," says Lu. "Exposing Kubernetes constructs as a service to our engineers as opposed to exposing higher order constructs has worked well for us. It lets you get familiar with the technology and do more interesting things with it."

\ No newline at end of file diff --git a/content/bn/case-studies/vsco/vsco_featured_logo.png b/content/bn/case-studies/vsco/vsco_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/vsco/vsco_featured_logo.svg b/content/bn/case-studies/vsco/vsco_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/wikimedia/index.html b/content/bn/case-studies/wikimedia/index.html index e69de29bb2..0879a35162 100644 --- a/content/bn/case-studies/wikimedia/index.html +++ b/content/bn/case-studies/wikimedia/index.html @@ -0,0 +1,66 @@ +--- +title: Wikimedia Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_title_text: Wikimedia +use_gradient_overlay: true +subheading: > + Using Kubernetes to Build Tools to Improve the World's Wikis +case_study_details: + - Company: Wikimedia + - Location: San Francisco, CA +--- + +

The non-profit Wikimedia Foundation operates some of the largest collaboratively edited reference projects in the world, including Wikipedia. To help users maintain and use wikis, it runs Wikimedia Tool Labs, a hosting environment for community developers working on tools and bots to help editors and other volunteers do their work, including reducing vandalism. The community around Wikimedia Tool Labs began forming nearly 10 years ago.

+ +{{< case-studies/quote author="Yuvi Panda, operations engineer at Wikimedia Foundation and Wikimedia Tool Labs">}} +Wikimedia +
+
+"Wikimedia Tool Labs is vital for making sure wikis all around the world work as well as they possibly can. Because it's grown organically for almost 10 years, it has become an extremely challenging environment and difficult to maintain. It's like a big ball of mud — you really can't see through it. With Kubernetes, we're simplifying the environment and making it easier for developers to build the tools that make wikis run better." +{{< /case-studies/quote >}} + +

Challenges

+ +
    +
  • Simplify a complex, difficult-to-manage infrastructure
  • +
  • Allow developers to continue writing tools and bots using existing techniques
  • +
+ +

Why Kubernetes

+ +
    +
  • Wikimedia Tool Labs chose Kubernetes because it can mimic existing workflows, while reducing complexity
  • +
+ +

Approach

+ +
    +
  • Migrate old systems and a complex infrastructure to Kubernetes
  • +
+ +

Results

+ +
    +
  • 20 percent of web tools that account for more than 40 percent of web traffic now run on Kubernetes
  • +
  • A 25-node cluster that keeps up with each new Kubernetes release
  • +
  • Thousands of lines of old code have been deleted, thanks to Kubernetes
  • +
+ +

Using Kubernetes to provide tools for maintaining wikis

+ +

Wikimedia Tool Labs is run by a staff of four-and-a-half paid employees and two volunteers. The infrastructure didn't make it easy or intuitive for developers to build bots and other tools to make wikis work more easily. Yuvi says, "It's incredibly chaotic. We have lots of Perl and Bash duct tape on top of it. Everything is super fragile."

+ +

To solve the problem, Wikimedia Tool Labs migrated parts of its infrastructure to Kubernetes, in preparation for eventually moving its entire system. Yuvi said Kubernetes greatly simplifies maintenance. The goal is to allow developers creating bots and other tools to use whatever development methods they want, but make it easier for the Wikimedia Tool Labs to maintain the required infrastructure for hosting and sharing them.

+ +

"With Kubernetes, I've been able to remove a lot of our custom-made code, which makes everything easier to maintain. Our users' code also runs in a more stable way than previously," says Yuvi.

+ +

Simplifying infrastructure and keeping wikis running better

+ +

Wikimedia Tool Labs has seen great success with the initial Kubernetes deployment. Old code is being simplified and eliminated, contributing developers don't have to change the way they write their tools and bots, and those tools and bots run in a more stable fashion than they have in the past. The paid staff and volunteers are able to better keep up with fixing issues.

+ +

In the future, with a more complete migration to Kubernetes, Wikimedia Tool Labs expects to make it even easier to host and maintain the bots and tools that help run wikis across the world. The tool labs already host approximately 1,300 tools and bots from 800 volunteers, with many more being submitted every day. Twenty percent of the tool labs' web tools that account for more than 60 percent of web traffic now run on Kubernetes. The tool labs has a 25-node cluster that keeps up with each new Kubernetes release. Many existing web tools are migrating to Kubernetes.

+ +

"Our goal is to make sure that people all over the world can share knowledge as easily as possible. Kubernetes helps with that, by making it easier for wikis everywhere to have the tools they need to thrive," says Yuvi.

\ No newline at end of file diff --git a/content/bn/case-studies/wikimedia/wikimedia_featured.png b/content/bn/case-studies/wikimedia/wikimedia_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/wikimedia/wikimedia_featured.svg b/content/bn/case-studies/wikimedia/wikimedia_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/wikimedia/wikimedia_logo.png b/content/bn/case-studies/wikimedia/wikimedia_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/wink/index.html b/content/bn/case-studies/wink/index.html index e69de29bb2..bcb39e1cd8 100644 --- a/content/bn/case-studies/wink/index.html +++ b/content/bn/case-studies/wink/index.html @@ -0,0 +1,87 @@ +--- +title: Wink Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/wink/banner1.jpg +heading_title_logo: /images/wink_logo.png +subheading: > + Cloud-Native Infrastructure Keeps Your Smart Home Connected +case_study_details: + - Company: Wink + - Location: New York, N.Y. + - Industry: Internet of Things Platform +--- + +

Challenge

+ +

Building a low-latency, highly reliable infrastructure to serve communications between millions of connected smart-home devices and the company's consumer hubs and mobile app, with an emphasis on horizontal scalability, the ability to encrypt everything quickly and connections that could be easily brought back up if anything went wrong.

+ +

Solution

+ +

Across-the-board use of a Kubernetes-Docker-CoreOS Container Linux stack.

+ +

Impact

+ +

"Two of the biggest American retailers [Home Depot and Walmart] are carrying and promoting the brand and the hardware," Wink Head of Engineering Kit Klein says proudly – though he adds that "it really comes with a lot of pressure. It's not a retail situation where you have a lot of tech enthusiasts. These are everyday people who want something that works and have no tolerance for technical excuses." And that's further testament to how much faith Klein has in the infrastructure that the Wink team has built. With 80 percent of Wink's workload running on a unified stack of Kubernetes-Docker-CoreOS, the company has put itself in a position to continually innovate and improve its products and services. Committing to this technology, says Klein, "makes building on top of the infrastructure relatively easy."

+ +{{< case-studies/quote author="KIT KLEIN, HEAD OF ENGINEERING, WINK" >}} +"It's not proprietary, it's totally open, it's really portable. You can run all the workloads across different cloud providers. You can easily run a hybrid AWS or even bring in your own data center. That's the benefit of having everything unified on one open source Kubernetes-Docker-CoreOS Container Linux stack. There are massive security benefits if you only have one Linux distro/machine image to validate. The benefits are enormous because you save money, and you save time." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +How many people does it take to turn on a light bulb? +{{< /case-studies/lead >}} + +

Kit Klein whips out his phone to demonstrate. With a few swipes, the head of engineering at Wink pulls up the smart-home app created by the New York City-based company and taps the light button. "Honestly when you're holding the phone and you're hitting the light," he says, "by the time you feel the pressure of your finger on the screen, it's on. It takes as long as the signal to travel to your brain."

+ +

Sure, it takes just one finger and less than 200 milliseconds to turn on the light – or lock a door or change a thermostat. But what allows Wink to help consumers manage their connected smart-home products with such speed and ease is a sophisticated, cloud native infrastructure that Klein and his team built and continue to develop using a unified stack of CoreOS, the open-source operating system designed for clustered deployments, and Kubernetes, an open-source platform for automating deployment, scaling, and operations of application containers across clusters of hosts, providing container-centric infrastructure. "When you have a big, complex network of interdependent microservices that need to be able to discover each other, and need to be horizontally scalable and tolerant to failure, that's what this is really optimized for," says Klein. "A lot of people end up relying on proprietary services [offered by some big cloud providers] to do some of this stuff, but what you get by adopting CoreOS/Kubernetes is portability, to not be locked in to anyone. You can really make your own fate."

+ +

Indeed, Wink did. The company's mission statement is to make the connected home accessible – that is, user-friendly for non-technical owners, affordable and perhaps most importantly, reliable. "If you can't trust that when you hit the switch, you know a light is going to go on, or if you're remote and you're checking on your house and that information isn't accurate, then the convenience of the system is lost," says Klein. "So that's where the infrastructure comes in."

+ +

Wink was incubated within Quirky, a company that developed crowd-sourced inventions. The Wink app was first introduced in 2013, and at the time, it controlled only a few consumer products such as the PivotPower Strip that Quirky produced in collaboration with GE. As smart-home products proliferated, Wink was launched in 2014 in Home Depot stores nationwide. Its first project: a hub that could integrate with smart products from about a dozen brands like Honeywell and Chamberlain. The biggest challenge would be to build the infrastructure to serve all those communications between the hub and the products, with a focus on maximizing reliability and minimizing latency.

+ +

"When we originally started out, we were moving very fast trying to get the first product to market, the minimum viable product," says Klein. "Lots of times you go down a path and end up having to backtrack and try different things. But in this particular case, we did a lot of the work up front, which led to us making a really sound decision to deploy it on CoreOS Container Linux. And that was very early in the life of it."

+ +{{< case-studies/quote image="/images/case-studies/wink/banner3.jpg">}} +"...what you get by adopting CoreOS/Kubernetes is portability, to not be locked in to anyone. You can really make your own fate." +{{< /case-studies/quote >}} + +

Concern number one: Wink's products need to connect to consumer devices in people's homes, behind a firewall. "You don't have an end point like a URL, and you don't even know what ports are open behind that firewall," Klein explains. "So you essentially need to have this thing wake up and talk to your system and then open real-time, bidirectional communication between the cloud and the device. And it's really, really important that it's persistent because you want to decrease as much as possible the overhead of sending a message – you never know when someone is going to turn on the lights."

+ +

With the earliest version of the Wink Hub, when you decided to turn your lights on or off, the request would be sent to the cloud and then executed. Subsequent updates to Wink's software enabled local control, cutting latency down to about 10 milliseconds for many devices. But with the need for cloud-enabled integrations of an ever-growing ecosystem of smart home products, low-latency internet connectivity is still a critical consideration.

+ +{{< case-studies/lead >}} +"You essentially need to have this thing wake up and talk to your system and then open real-time, bidirectional communication between the cloud and the device. And it's really, really important that it's persistent...you never know when someone is going to turn on the lights." +{{< /case-studies/lead >}} + +

In addition, Wink had other requirements: horizontal scalability, the ability to encrypt everything quickly, connections that could be easily brought back up if something went wrong. "Looking at this whole structure we started, we decided to make a secure socket-based service," says Klein. "We've always used, I would say, some sort of clustering technology to deploy our services and so the decision we came to was, this thing is going to be containerized, running on Docker."

+ +

In 2015, Docker wasn't yet widely used, but as Klein points out, "it was certainly understood by the people who were on the frontier of technology. We started looking at potential technologies that existed. One of the limiting factors was that we needed to deploy multi-port non-http/https services. It wasn't really appropriate for some of the early cluster technology. We liked the project a lot and we ended up using it on other stuff for a while, but initially it was too targeted toward http workloads."

+ +

Once Wink's backend engineering team decided on a containerized workload, they had to make decisions about the OS and the container orchestration platform. "Obviously you can't just start the containers and hope everything goes well," Klein says with a laugh. "You need to have a system that is helpful [in order] to manage where the workloads are being distributed out to. And when the container inevitably dies or something like that, to restart it, you have a load balancer. All sorts of housekeeping work is needed to have a robust infrastructure."

+ +{{< case-studies/quote image="/images/case-studies/wink/banner4.jpg" >}} +"Obviously you can't just start the containers and hope everything goes well," Klein says with a laugh. "You need to have a system that is helpful [in order] to manage where the workloads are being distributed out to. And when the container inevitably dies or something like that, to restart it, you have a load balancer. All sorts of housekeeping work is needed to have a robust infrastructure." +{{< /case-studies/quote >}} + +

Wink considered building directly on a general purpose Linux distro like Ubuntu (which would have required installing tools to run a containerized workload) and cluster management systems like Mesos (which was targeted toward enterprises with larger teams/workloads), but ultimately set their sights on CoreOS Container Linux. "A container-optimized Linux distribution system was exactly what we needed," he says. "We didn't have to futz around with trying to take something like a Linux distro and install everything. It's got a built-in container orchestration system, which is Fleet, and an easy-to-use API. It's not as feature-rich as some of the heavier solutions, but we realized that, at that moment, it was exactly what we needed."

+ +

Wink's hub (along with a revamped app) was introduced in July 2014 with a short-term deployment, and within the first month, they had moved the service to the containerized CoreOS deployment. Since then, they've moved almost every other piece of their infrastructure – from third-party cloud-to-cloud integrations to their customer service and payment portals – onto CoreOS Container Linux clusters.

+ +

Using this setup did require some customization. "Fleet is really nice as a basic container orchestration system, but it doesn't take care of routing, sharing configurations, secrets, et cetera, among instances of a service," Klein says. "All of those layers of functionality can be implemented, of course, but if you don't want to spend a lot of time writing unit files manually – which of course nobody does – you need to create a tool to automate some of that, which we did."

+ +

Wink quickly embraced the Kubernetes container cluster manager when it was launched in 2015 and integrated with CoreOS core technology, and as promised, it ended up providing the features Wink wanted and had planned to build. "If not for Kubernetes, we likely would have taken the logic and library we implemented for the automation tool that we created, and would have used it in a higher level abstraction and tool that could be used by non-DevOps engineers from the command line to create and manage clusters," Klein says. "But Kubernetes made that totally unnecessary – and is written and maintained by people with a lot more experience in cluster management than us, so all the better." Now, an estimated 80 percent of Wink's workload is run on Kubernetes on top of CoreOS Container Linux.

+ +{{< case-studies/quote >}} +"Stay close to the development. Understand why decisions are being made. If you understand the intent behind the project, from the technological intent to a certain philosophical intent, then it helps you understand how to build your system in harmony with those systems as opposed to trying to work against it." +{{< /case-studies/quote >}} + +

Wink's reasons for going all in are clear: "It's not proprietary, it's totally open, it's really portable," Klein says. "You can run all the workloads across different cloud providers. You can easily run a hybrid AWS or even bring in your own data center. That's the benefit of having everything unified on one Kubernetes-Docker-CoreOS Container Linux stack. There are massive security benefits if you only have one Linux distro to try to validate. The benefits are enormous because you save money, you save time."

+ +

Klein concedes that there are tradeoffs in every technology decision. "Cutting-edge technology is going to be scary for some people," he says. "In order to take advantage of this, you really have to keep up with the technology. You can't treat it like it's a black box. Stay close to the development. Understand why decisions are being made. If you understand the intent behind the project, from the technological intent to a certain philosophical intent, then it helps you understand how to build your system in harmony with those systems as opposed to trying to work against it."

+ +

Wink, which was acquired by Flex in 2015, now controls 2.3 million connected devices in households all over the country. What's next for the company? A new version of the hub - Wink Hub 2 - hit shelves last November – and is being offered for the first time at Walmart stores in addition to Home Depot. "Two of the biggest American retailers are carrying and promoting the brand and the hardware," Klein says proudly – though he adds that "it really comes with a lot of pressure. It's not a retail situation where you have a lot of tech enthusiasts. These are everyday people who want something that works and have no tolerance for technical excuses." And that's further testament to how much faith Klein has in the infrastructure that the Wink team has have built.

+ +

Wink's engineering team has grown exponentially since its early days, and behind the scenes, Klein is most excited about the machine learning Wink is using. "We built [a system of] containerized small sections of the data pipeline that feed each other and can have multiple outputs," he says. "It's like data pipelines as microservices." Again, Klein points to having a unified stack running on CoreOS Container Linux and Kubernetes as the primary driver for the innovations to come. "You're not reinventing the wheel every time," he says. "You can just get down to work."

\ No newline at end of file diff --git a/content/bn/case-studies/wink/wink_featured.png b/content/bn/case-studies/wink/wink_featured.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/wink/wink_featured.svg b/content/bn/case-studies/wink/wink_featured.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/wink/wink_logo.png b/content/bn/case-studies/wink/wink_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/woorank/index.html b/content/bn/case-studies/woorank/index.html index e69de29bb2..153e73e029 100644 --- a/content/bn/case-studies/woorank/index.html +++ b/content/bn/case-studies/woorank/index.html @@ -0,0 +1,79 @@ +--- +title: Woorank Case Study +linkTitle: woorank +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/woorank/banner1.jpg +heading_title_logo: /images/woorank_logo.png +subheading: > + Woorank: How Kubernetes Helped a Startup Manage 50 Microservices with 12 Engineers—At 30% Less Cost +case_study_details: + - Company: Woorank + - Location: Brussels, Belgium + - Industry: Digital marketing tool +--- + +

Challenge

+ +

Founded in 2011, Woorank embraced microservices and containerization early on, so its core product, a tool that helps digital marketers improve their websites' visibility on the internet, consists of 50 applications developed and maintained by a technical team of 12. For two years, the infrastructure ran smoothly on Mesos, but "there were still lots of our own libraries that we had to roll and applications that we had to bring in, so it was very cumbersome for us as a small team to keep those things alive and to update them," says CTO/Cofounder Nils De Moor. So he began looking for a new solution with more automation and self-healing built in, that would better suit the company's human resources.

+ +

Solution

+ +

De Moor decided to switch to Kubernetes running on AWS, which "allows us to just define applications, how they need to run, how scalable they need to be, and it takes pain away from the developers thinking about that," he says. "When things fail and errors pop up, the system tries to heal itself, and that's really, for us, the key reason to work with Kubernetes." The company now also uses Fluentd, Prometheus, and OpenTracing.

+ +

Impact

+ +

The company's number one concern was immediately erased: Maintaining Kubernetes takes just one person on staff, and it's not a fulltime job. Infrastructure updates used to take two active working days; now it's just a matter of "a few hours of passively following the process," says De Moor. Implementing new tools—which once took weeks of planning, installing, and onboarding—now only takes a few days. "We were already pretty flexible in our costs and taking on traffic peaks and higher load in general," adds De Moor, "but with Kubernetes and the other CNCF tools we use, we have achieved about 30% in cost savings." Plus, the rate of deployments per day has nearly doubled.

+ +{{< case-studies/quote author="NILS DE MOOR, CTO/COFOUNDER, WOORANK" >}} +"It was definitely important for us to have CNCF as an umbrella above everything. We've always been working with open source libraries and tools and technologies. It works very well for us, but sometimes things can drift, maintainers drop out, and projects go haywire. For us, it was indeed important to know that whatever project gets taken under this umbrella, it's taken very seriously. Our way of contributing back is also by joining this community. It's, for us, a way to show our appreciation for what's going on in this framework." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Woorank's core product is a tool that enables digital marketers to improve their websites' visibility on the internet. +{{< /case-studies/lead >}} + +

"We help them acquire lots of data and then present it to them in meaningful ways so they can work with it," says CTO/Cofounder Nils De Moor. In its seven years as a startup, the company followed a familiar technological path to build that product: starting with a monolithic application, breaking it down into microservices, and then embracing containerization. "That's where our modern infrastructure started out," says De Moor.

+ +

As new features have been added to the product, it has grown to consist of 50 applications under the hood. Though Docker had made things easier to deploy, and the team had been using Mesos as an orchestration framework on AWS since 2015, De Moor realized there was still too much overhead to managing the infrastructure, especially with a technical team of just 12.

+ +

"The pain point was that there were still lots of our own libraries that we had to roll and applications that we had to bring in, so it was very cumbersome for us as a small team to keep those things alive and to update them," says De Moor. "When things went wrong during deployment, someone manually had to come in and figure it out. It wasn't necessarily that the technology or anything was wrong with Mesos; it was just not really fitting our model of being a small company, not having the human resources to make sure it all works and can be updated."

+ +{{< case-studies/quote + image="/images/case-studies/woorank/banner3.jpg" + author="NILS DE MOOR, CTO/COFOUNDER, WOORANK" +>}} +"Cloud native technologies have brought to us a transparency on everything going on in our system, from the code to the server. It has brought huge cost savings and a better way of dealing with those costs and keeping them under control. And performance-wise, it has helped our team understand how we can make our code work better on the cloud native infrastructure." +{{< /case-studies/quote >}} + +

Around the time Woorank was grappling with these issues, Kubernetes was emerging as a technology. De Moor knew that he wanted a platform that would be more automated and self-healing, and when he began experimenting with Kubernetes, he found that it checked all those boxes. "Kubernetes allows us to just define applications, how they need to run, how scalable they need to be, and it takes pain away from the developers thinking about that," he says. "When things fail and errors pop up, the system tries to heal itself, and that's really, for us, the key reason to work with Kubernetes. It allowed us to set up certain testing frameworks to just be alerted when things go wrong, instead of having to look at whether everything went right. It's made people's lives much easier. It's quite a big mindset change."

+ +

Once one small Kubernetes cluster was up and running, the team began moving over a few applications at a time, gradually increasing the load over the course of several months. By early 2017, Woorank was 100% deployed on Kubernetes.

+ +

The company's number one concern was immediately erased: Maintaining Kubernetes is the responsibility of just one person on staff, and it's not his fulltime job. Updating the old infrastructure "was always a pain," says De Moor: It used to take two active working days, "and it was always a bit scary when we did that." With Kubernetes, it's just a matter of "a few hours of passively following the process."

+ +{{< case-studies/quote + image="/images/case-studies/woorank/banner4.jpg" + author="NILS DE MOOR, CTO/COFOUNDER, WOORANK" +>}} +"When things fail and errors pop up, the system tries to heal itself, and that's really, for us, the key reason to work with Kubernetes. It allowed us to set up certain testing frameworks to just be alerted when things go wrong, instead of having to look at whether everything went right. It's made people's lives much easier. It's quite a big mindset change." +{{< /case-studies/quote >}} + +

Transparency on all levels, from the code to the servers, has also been a byproduct of the move to Kubernetes. "It's easier for the entire team to get a better understanding of the infrastructure, how it's working, how it looks like, what's going on," says De Moor. "It's not that thing that's running, and no one really knows how it works except this one person. Now it's really a team effort of everyone knowing, 'Okay, when something goes wrong, it's probably in this area or we need to check this.'"

+ +

To that end, Woorank has begun implementing other cloud native tools that help with visibility, such as Fluentd for logging, Prometheus for monitoring, and OpenTracing for distributed tracing. Implementing these new tools—which once took weeks of planning, installing, and onboarding—now only takes a few days. "With all the tools and projects under the CNCF umbrella, it's easier for us to test and play with technology than it used to be," says De Moor. "With Prometheus, we used it fairly early and couldn't get it fairly stable. A couple of months ago, the question reappeared, so we set it up in two days, and now everyone is using it."

+ +

Deployments, too, have been impacted: The rate has more than doubled, which De Moor partly attributes to the transparency of the new process. "With Kubernetes, you see that these three containers didn't start for this reason," he says. Plus, "now we bring deployment messages into Slack. If you see deployments rolling by every day, it does somehow indirectly enforce you, okay, I need to be part of this train, so I also need to deploy."

+ +{{< case-studies/quote author="NILS DE MOOR, CTO/COFOUNDER, WOORANK" >}} +"We can plan those things over a certain timeline, try to fit our resource usage to that, and then bring in spot instances, which will hopefully drive the costs down more." +{{< /case-studies/quote >}} + +

Perhaps the biggest impact, though, has been on the bottom line. "We were already pretty flexible in our costs and taking on traffic peaks and higher load in general, but with Kubernetes and the other CNCF tools we use, we have achieved about 30% in cost savings," says De Moor.

+ +

And there's room for even greater savings. Currently, most of Woorank's infrastructure is running on AWS on demand; the company pays a fixed price and makes some reservations for its planned amount of resources needed. De Moor is planning to experiment more with spot instances with certain resource-heavy workloads such as web crawls: "We can plan those things over a certain timeline, try to fit our resource usage to that, and then bring in spot instances, which will hopefully drive the costs down more."

+ +

Moving to Kubernetes has been so beneficial to Woorank that the company is doubling down on both cloud native technologies and the community. "It was definitely important for us to have CNCF as an umbrella above everything," says De Moor. "We've always been working with open source libraries and tools and technologies. It works very well for us, but sometimes things can drift, maintainers drop out, and projects go haywire. For us, it was indeed important to know that whatever project gets taken under this umbrella, it's taken very seriously. Our way of contributing back is also by joining this community. It's, for us, a way to show our appreciation for what's going on in this framework."

\ No newline at end of file diff --git a/content/bn/case-studies/woorank/woorank_featured_logo.png b/content/bn/case-studies/woorank/woorank_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/woorank/woorank_featured_logo.svg b/content/bn/case-studies/woorank/woorank_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/workiva/index.html b/content/bn/case-studies/workiva/index.html index e69de29bb2..2ca399cdc9 100644 --- a/content/bn/case-studies/workiva/index.html +++ b/content/bn/case-studies/workiva/index.html @@ -0,0 +1,93 @@ +--- +title: Workiva Case Study +linkTitle: Workiva +case_study_styles: true +cid: caseStudies +draft: true +featured: true +weight: 20 +quote: > + With OpenTracing, my team was able to look at a trace and make optimization suggestions to another team without ever looking at their code. + +new_case_study_styles: true +heading_background: /images/case-studies/workiva/banner1.jpg +heading_title_logo: /images/workiva_logo.png +subheading: > + Using OpenTracing to Help Pinpoint the Bottlenecks +case_study_details: + - Company: Workiva + - Location: Ames, Iowa + - Industry: Enterprise Software +--- + +

Challenge

+ +

Workiva offers a cloud-based platform for managing and reporting business data. This SaaS product, Wdesk, is used by more than 70 percent of the Fortune 500 companies. As the company made the shift from a monolith to a more distributed, microservice-based system, "We had a number of people working on this, all on different teams, so we needed to identify what the issues were and where the bottlenecks were," says Senior Software Architect MacLeod Broad. With back-end code running on Google App Engine, Google Compute Engine, as well as Amazon Web Services, Workiva needed a tracing system that was agnostic of platform. While preparing one of the company's first products utilizing AWS, which involved a "sync and link" feature that linked data from spreadsheets built in the new application with documents created in the old application on Workiva's existing system, Broad's team found an ideal use case for tracing: There were circular dependencies, and optimizations often turned out to be micro-optimizations that didn't impact overall speed.

+ +

Solution

+ +

Broad's team introduced the platform-agnostic distributed tracing system OpenTracing to help them pinpoint the bottlenecks.

+ +

Impact

+ +

Now used throughout the company, OpenTracing produced immediate results. Software Engineer Michael Davis reports: "Tracing has given us immediate, actionable insight into how to improve our service. Through a combination of seeing where each call spends its time, as well as which calls are most often used, we were able to reduce our average response time by 95 percent (from 600ms to 30ms) in a single fix."

+ +{{< case-studies/quote author="MacLeod Broad, Senior Software Architect at Workiva" >}} +"With OpenTracing, my team was able to look at a trace and make optimization suggestions to another team without ever looking at their code." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Last fall, MacLeod Broad's platform team at Workiva was prepping one of the company's first products utilizing Amazon Web Services when they ran into a roadblock. +{{< /case-studies/lead >}} + +

Early on, Workiva's backend had run mostly on Google App Engine. But things changed along the way as Workiva's SaaS offering, Wdesk, a cloud-based platform for managing and reporting business data, grew its customer base to more than 70 percent of the Fortune 500 companies. "As customer needs grew and the product offering expanded, we started to leverage a wider offering of services such as Amazon Web Services as well as other Google Cloud Platform services, creating a multi-vendor environment."

+ +

With this new product, there was a "sync and link" feature by which data "went through a whole host of services starting with the new spreadsheet system [Amazon Aurora] into what we called our linking system, and then pushed through http to our existing system, and then a number of calculations would go on, and the results would be transmitted back into the new system," says Broad. "We were trying to optimize that for speed. We thought we had made this great optimization and then it would turn out to be a micro optimization, which didn't really affect the overall speed of things."

+ +

The challenges faced by Broad's team may sound familiar to other companies that have also made the shift from monoliths to more distributed, microservice-based systems. "We had a number of people working on this, all on different teams, so it was difficult to get our head around what the issues were and where the bottlenecks were," says Broad.

+ +

"Each service team was going through different iterations of their architecture and it was very hard to follow what was actually going on in each teams' system," he adds. "We had circular dependencies where we'd have three or four different service teams unsure of where the issues really were, requiring a lot of back and forth communication. So we wasted a lot of time saying, 'What part of this is slow? Which part of this is sometimes slow depending on the use case? Which part is degrading over time? Which part of this process is asynchronous so it doesn't really matter if it's long-running or not? What are we doing that's redundant, and which part of this is buggy?'"

+ +{{< case-studies/quote + image="/images/case-studies/workiva/banner3.jpg" + author="MACLEOD BROAD, SENIOR SOFTWARE ARCHITECT AT WORKIVA" +>}} +"A tracing system can at a glance explain an architecture, narrow down a performance bottleneck and zero in on it, and generally just help direct an investigation at a high level. Being able to do that at a glance is much faster than at a meeting or with three days of debugging, and it's a lot faster than never figuring out the problem and just moving on." +{{< /case-studies/quote >}} + +

Simply put, it was an ideal use case for tracing. "A tracing system can at a glance explain an architecture, narrow down a performance bottleneck and zero in on it, and generally just help direct an investigation at a high level," says Broad. "Being able to do that at a glance is much faster than at a meeting or with three days of debugging, and it's a lot faster than never figuring out the problem and just moving on."

+ +

With Workiva's back-end code running on Google Compute Engine as well as App Engine and AWS, Broad knew that he needed a tracing system that was platform agnostic. "We were looking at different tracing solutions," he says, "and we decided that because it seemed to be a very evolving market, we didn't want to get stuck with one vendor. So OpenTracing seemed like the cleanest way to avoid vendor lock-in on what backend we actually had to use."

+ +

Once they introduced OpenTracing into this first use case, Broad says, "The trace made it super obvious where the bottlenecks were." Even though everyone had assumed it was Workiva's existing code that was slowing things down, that wasn't exactly the case. "It looked like the existing code was slow only because it was reaching out to our next-generation services, and they were taking a very long time to service all those requests," says Broad. "On the waterfall graph you can see the exact same work being done on every request when it was calling back in. So every service request would look the exact same for every response being paged out. And then it was just a no-brainer of, 'Why is it doing all this work again?'"

+ +

Using the insight OpenTracing gave them, "My team was able to look at a trace and make optimization suggestions to another team without ever looking at their code," says Broad. "The way we named our traces gave us insight whether it's doing a SQL call or it's making an RPC. And so it was really easy to say, 'OK, we know that it's going to page through all these requests. Do the work once and stuff it in cache.' And we were done basically. All those calls became sub-second calls immediately."

+ +{{< case-studies/quote + image="/images/case-studies/workiva/banner4.jpg" + author="MACLEOD BROAD, SENIOR SOFTWARE ARCHITECT AT WORKIVA" +>}} +"We were looking at different tracing solutions and we decided that because it seemed to be a very evolving market, we didn't want to get stuck with one vendor. So OpenTracing seemed like the cleanest way to avoid vendor lock-in on what backend we actually had to use." +{{< /case-studies/quote >}} + +

After the success of the first use case, everyone involved in the trial went back and fully instrumented their products. Tracing was added to a few more use cases. "We wanted to get through the initial implementation pains early without bringing the whole department along for the ride," says Broad. "Now, a lot of teams add it when they're starting up a new service. We're really pushing adoption now more than we were before."

+ +

Some teams were won over quickly. "Tracing has given us immediate, actionable insight into how to improve our [Workspaces] service," says Software Engineer Michael Davis. "Through a combination of seeing where each call spends its time, as well as which calls are most often used, we were able to reduce our average response time by 95 percent (from 600ms to 30ms) in a single fix."

+ +

Most of Workiva's major products are now traced using OpenTracing, with data pushed into Google StackDriver. Even the products that aren't fully traced have some components and libraries that are.

+ +

Broad points out that because some of the engineers were working on App Engine and already had experience with the platform's Appstats library for profiling performance, it didn't take much to get them used to using OpenTracing. But others were a little more reluctant. "The biggest hindrance to adoption I think has been the concern about how much latency is introducing tracing [and StackDriver] going to cost," he says. "People are also very concerned about adding middleware to whatever they're working on. Questions about passing the context around and how that's done were common. A lot of our Go developers were fine with it, because they were already doing that in one form or another. Our Java developers were not super keen on doing that because they'd used other systems that didn't require that."But the benefits clearly outweighed the concerns, and today, Workiva's official policy is to use tracing."

+ +

In fact, Broad believes that tracing naturally fits in with Workiva's existing logging and metrics systems. "This was the way we presented it internally, and also the way we designed our use," he says. "Our traces are logged in the exact same mechanism as our app metric and logging data, and they get pushed the exact same way. So we treat all that data exactly the same when it's being created and when it's being recorded. We have one internal library that we use for logging, telemetry, analytics and tracing."

+ +{{< case-studies/quote author="Michael Davis, Software Engineer, Workiva" >}} +"Tracing has given us immediate, actionable insight into how to improve our [Workspaces] service. Through a combination of seeing where each call spends its time, as well as which calls are most often used, we were able to reduce our average response time by 95 percent (from 600ms to 30ms) in a single fix." +{{< /case-studies/quote >}} + +

For Workiva, OpenTracing has become an essential tool for zeroing in on optimizations and determining what's actually a micro-optimization by observing usage patterns. "On some projects we often assume what the customer is doing, and we optimize for these crazy scale cases that we hit 1 percent of the time," says Broad. "It's been really helpful to be able to say, 'OK, we're adding 100 milliseconds on every request that does X, and we only need to add that 100 milliseconds if it's the worst of the worst case, which only happens one out of a thousand requests or one out of a million requests."

+ +

Unlike many other companies, Workiva also traces the client side. "For us, the user experience is important—it doesn't matter if the RPC takes 100 milliseconds if it still takes 5 seconds to do the rendering to show it in the browser," says Broad. "So for us, those client times are important. We trace it to see what parts of loading take a long time. We're in the middle of working on a definition of what is 'loaded.' Is it when you have it, or when it's rendered, or when you can interact with it? Those are things we're planning to use tracing for to keep an eye on and to better understand."

+ +

That also requires adjusting for differences in external and internal clocks. "Before time correcting, it was horrible; our traces were more misleading than anything," says Broad. "So we decided that we would return a timestamp on the response headers, and then have the client reorient its time based on that—not change its internal clock but just calculate the offset on the response time to when the client got it. And if you end up in an impossible situation where a client RPC spans 210 milliseconds but the time on the response time is outside of that window, then we have to reorient that."

+ +

Broad is excited about the impact OpenTracing has already had on the company, and is also looking ahead to what else the technology can enable. One possibility is using tracing to update documentation in real time. "Keeping documentation up to date with reality is a big challenge," he says. "Say, we just ran a trace simulation or we just ran a smoke test on this new deploy, and the architecture doesn't match the documentation. We can find whose responsibility it is and let them know and have them update it. That's one of the places I'd like to get in the future with tracing."

\ No newline at end of file diff --git a/content/bn/case-studies/workiva/workiva_featured_logo.png b/content/bn/case-studies/workiva/workiva_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/workiva/workiva_featured_logo.svg b/content/bn/case-studies/workiva/workiva_featured_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/yahoo-japan/index.html b/content/bn/case-studies/yahoo-japan/index.html index e69de29bb2..724a41ae01 100644 --- a/content/bn/case-studies/yahoo-japan/index.html +++ b/content/bn/case-studies/yahoo-japan/index.html @@ -0,0 +1,4 @@ +--- +title: Yahoo! Japan +content_url: https://kubernetes.io/blog/2016/10/kubernetes-and-openstack-at-yahoo-japan +--- \ No newline at end of file diff --git a/content/bn/case-studies/yahoo-japan/yahooJapan_logo.png b/content/bn/case-studies/yahoo-japan/yahooJapan_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/yahoo-japan/yahooJapan_logo.svg b/content/bn/case-studies/yahoo-japan/yahooJapan_logo.svg new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ygrene/ygrene_featured_logo.png b/content/bn/case-studies/ygrene/ygrene_featured_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/ygrene/ygrene_featured_logo.svg b/content/bn/case-studies/ygrene/ygrene_featured_logo.svg new file mode 100644 index 0000000000..0e16b95004 --- /dev/null +++ b/content/bn/case-studies/ygrene/ygrene_featured_logo.svg @@ -0,0 +1,82 @@ +--- +title: Ygrene Case Study +linkTitle: Ygrene +case_study_styles: true +cid: caseStudies +logo: ygrene_featured_logo.png +featured: true +weight: 48 +quote: > + We had to change some practices and code, and the way things were built, but we were able to get our main systems onto Kubernetes in a month or so, and then into production within two months. That's very fast for a finance company. + +new_case_study_styles: true +heading_background: /images/case-studies/ygrene/banner1.jpg +heading_title_logo: /images/ygrene_logo.png +subheading: > + Ygrene: Using Cloud Native to Bring Security and Scalability to the Finance Industry +case_study_details: + - Company: Ygrene + - Location: Petaluma, Calif. + - Industry: Clean energy financing +--- + +

Challenge

+ +

A PACE (Property Assessed Clean Energy) financing company, Ygrene has funded more than $1 billion in loans since 2010. In order to approve and process those loans, "We have lots of data sources that are being aggregated, and we also have lots of systems that need to churn on that data," says Ygrene Development Manager Austin Adams. The company was utilizing massive servers, and "we just reached the limit of being able to scale them vertically. We had a really unstable system that became overwhelmed with requests just for doing background data processing in real time. The performance the users saw was very poor. We needed a solution that wouldn't require us to make huge refactors to the code base." As a finance company, Ygrene also needed to ensure that they were shipping their applications securely.

+ +

Solution

+ +

Moving from an Engine Yard platform and Amazon Elastic Beanstalk, the Ygrene team embraced cloud native technologies and practices: Kubernetes to help scale out vertically and distribute workloads, Notary to put in build-time controls and get trust on the Docker images being used with third-party dependencies, and Fluentd for "observing every part of our stack," all running on Amazon EC2 Spot.

+ +

Impact

+ +

Before, deployments typically took three to four hours, and two or three months' worth of work would be deployed at low-traffic times every week or two weeks. Now, they take five minutes for Kubernetes, and an hour for the overall deploy with smoke testing. And "we're able to deploy three or four times a week, with just one week's or two days' worth of work," Adams says. "We're deploying during the work week, in the daytime and without any downtime. We had to ask for business approval to take the systems down, even in the middle of the night, because people could be doing loans. Now we can deploy, ship code, and migrate databases, all without taking the system down. The company gets new features without worrying that some business will be lost or delayed." Additionally, by using the kops project, Ygrene can now run its Kubernetes clusters with AWS EC2 Spot, at a tenth of the previous cost. These cloud native technologies have "changed the game for scalability, observability, and security—we're adding new data sources that are very secure," says Adams. "Without Kubernetes, Notary, and Fluentd, we couldn't tell our investors and team members that we knew what was going on."

+ +{{< case-studies/quote author="Austin Adams, Development Manager, Ygrene Energy Fund" >}} +"CNCF projects are helping Ygrene determine the security and observability standards for the entire PACE industry. We're an emerging finance industry, and without these projects, especially Kubernetes, we couldn't be the industry leader that we are today." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +In less than a decade, Ygrene has funded more than $1 billion in loans for renewable energy projects. +{{< /case-studies/lead >}} + +

A PACE (Property Assessed Clean Energy) financing company, "We take the equity in a home or a commercial building, and use it to finance property improvements for anything that saves electricity, produces electricity, saves water, or reduces carbon emissions," says Development Manager Austin Adams.

+ +

In order to approve those loans, the company processes an enormous amount of underwriting data. "We have tons of different points that we have to validate about the property, about the company, or about the person," Adams says. "So we have lots of data sources that are being aggregated, and we also have lots of systems that need to churn on that data in real time."

+ +

By 2017, deployments and scalability had become pain points. The company was utilizing massive servers, and "we just reached the limit of being able to scale them vertically," he says. Migrating to AWS Elastic Beanstalk didn't solve the problem: "The Scala services needed a lot of data from the main Ruby on Rails services and from different vendors, so they were asking for information from our Ruby services at a rate that those services couldn't handle. We had lots of configuration misses with Elastic Beanstalk as well. It just came to a head, and we realized we had a really unstable system."

+ +{{< case-studies/quote + image="/images/case-studies/ygrene/banner3.jpg" + author="Austin Adams, Development Manager, Ygrene Energy Fund" +>}} +"CNCF has been an amazing incubator for so many projects. Now we look at its webpage regularly to find out if there are any new, awesome, high-quality projects we can implement into our stack. It's actually become a hub for us for knowing what software we need to be looking at to make our systems more secure or more scalable." +{{< /case-studies/quote >}} + +

Adams along with the rest of the team set out to find a solution that would be transformational, but "wouldn't require us to make huge refactors to the code base," he says. And as a finance company, Ygrene needed security as much as scalability. They found the answer by embracing cloud native technologies: Kubernetes to help scale out vertically and distribute workloads, Notary to achieve reliable security at every level, and Fluentd for observability. "Kubernetes was where the community was going, and we wanted to be future proof," says Adams.

+ +

With Kubernetes, the team was able to quickly containerize the Ygrene application with Docker. "We had to change some practices and code, and the way things were built," Adams says, "but we were able to get our main systems onto Kubernetes in a month or so, and then into production within two months. That's very fast for a finance company."

+ +

How? Cloud native has "changed the game for scalability, observability, and security—we're adding new data sources that are very secure," says Adams. "Without Kubernetes, Notary, and Fluentd, we couldn't tell our investors and team members that we knew what was going on."

+ +

Notary, in particular, "has been a godsend," says Adams. "We need to know that our attack surface on third-party dependencies is low, or at least managed. We use it as a trust system and we also use it as a separation, so production images are signed by Notary, but some development images we don't sign. That is to ensure that they can't get into the production cluster. We've been using it in the test cluster to feel more secure about our builds."

+ +{{< case-studies/quote image="/images/case-studies/ygrene/banner4.jpg">}} +"We had to change some practices and code, and the way things were built," Adams says, "but we were able to get our main systems onto Kubernetes in a month or so, and then into production within two months. That's very fast for a finance company." +{{< /case-studies/quote >}} + +

By using the kops project, Ygrene was able to move from Elastic Beanstalk to running its Kubernetes clusters on AWS EC2 Spot, at a tenth of the previous cost. "In order to scale before, we would need to up our instance sizes, incurring high cost for low value," says Adams. "Now with Kubernetes and kops, we are able to scale horizontally on Spot with multiple instance groups."

+ +

That also helped them mitigate the risk that comes with running in the public cloud. "We figured out, essentially, that if we're able to select instance classes using EC2 Spot that had an extremely low likelihood of interruption and zero history of interruption, and we're willing to pay a price high enough, that we could virtually get the same guarantee using Kubernetes because we have enough nodes," says Software Engineer Zach Arnold, who led the migration to Kubernetes. "Now that we've re-architected these pieces of the application to not live on the same server, we can push out to many different servers and have a more stable deployment."

+ +

As a result, the team can now ship code any time of day. "That was risky because it could bring down your whole loan management software with it," says Arnold. "But we now can deploy safely and securely during the day."

+ +{{< case-studies/quote >}} +"In order to scale before, we would need to up our instance sizes, incurring high cost for low value," says Adams. "Now with Kubernetes and kops, we are able to scale horizontally on Spot with multiple instance groups." +{{< /case-studies/quote >}} + +

Before, deployments typically took three to four hours, and two or three months' worth of work would be deployed at low-traffic times every week or two weeks. Now, they take five minutes for Kubernetes, and an hour for an overall deploy with smoke testing. And "we're able to deploy three or four times a week, with just one week's or two days' worth of work," Adams says. "We're deploying during the work week, in the daytime and without any downtime. We had to ask for business approval to take the systems down for 30 minutes to an hour, even in the middle of the night, because people could be doing loans. Now we can deploy, ship code, and migrate databases, all without taking the system down. The company gets new features without worrying that some business will be lost or delayed."

+ +

Cloud native also affected how Ygrene's 50+ developers and contractors work. Adams and Arnold spent considerable time "teaching people to think distributed out of the box," says Arnold. "We ended up picking what we call the Four S's of Shipping: safely, securely, stably, and speedily." (For more on the security piece of it, see their article on their "continuous hacking" strategy.) As for the engineers, says Adams, "they have been able to advance as their software has advanced. I think that at the end of the day, the developers feel better about what they're doing, and they also feel more connected to the modern software development community."

+ +

Looking ahead, Adams is excited to explore more CNCF projects, including SPIFFE and SPIRE. "CNCF has been an amazing incubator for so many projects," he says. "Now we look at its webpage regularly to find out if there are any new, awesome, high-quality projects we can implement into our stack. It's actually become a hub for us for knowing what software we need to be looking at to make our systems more secure or more scalable."

\ No newline at end of file From 144dfa305c098f0891aed306125aaa9aae144322 Mon Sep 17 00:00:00 2001 From: Nafisa-Tabassum-Mim Date: Fri, 19 Apr 2024 11:36:46 +0600 Subject: [PATCH 0304/1086] file changes --- content/bn/case-studies/nerdalize/index.html | 81 ++++++++++++++++++ .../northwestern-mutual/index.html | 69 +++++++++++++++ .../northwestern_featured_logo.svg | 69 --------------- content/bn/case-studies/ygrene/index.html | 82 ++++++++++++++++++ content/bn/case-studies/zalando/index.html | 83 +++++++++++++++++++ .../zalando/zalando_feature_logo.png | 0 .../zalando/zalando_feature_logo.svg | 0 7 files changed, 315 insertions(+), 69 deletions(-) create mode 100644 content/bn/case-studies/zalando/zalando_feature_logo.png create mode 100644 content/bn/case-studies/zalando/zalando_feature_logo.svg diff --git a/content/bn/case-studies/nerdalize/index.html b/content/bn/case-studies/nerdalize/index.html index e69de29bb2..ad2fdb5c82 100644 --- a/content/bn/case-studies/nerdalize/index.html +++ b/content/bn/case-studies/nerdalize/index.html @@ -0,0 +1,81 @@ +--- +title: Prowise Case Study +linkTitle: prowise +case_study_styles: true +cid: caseStudies +featured: false + +new_case_study_styles: true +heading_background: /images/case-studies/nerdalize/banner1.jpg +heading_title_logo: /images/nerdalize_logo.png +subheading: > + Nerdalize: Providing Affordable and Sustainable Cloud Hosting with Kubernetes +case_study_details: + - Company: Nerdalize + - Location: Delft, Netherlands + - Industry: Cloud Provider +--- + +

Challenge

+ +

Nerdalize offers affordable cloud hosting for customers—and free heat and hot water for people who sign up to house the heating devices that contain the company's servers. The savings Nerdalize realizes by not running data centers are passed on to its customers. When the team began using Docker to make its software more portable, it realized it also needed a container orchestration solution. "As a cloud provider, we have internal services for hosting our backends and billing our customers, but we also need to offer our compute to our end users," says Digital Product Engineer Ad van der Veer. "Since we have these heating devices spread across the Netherlands, we need some way of tying that all together."

+ +

Solution

+ +

After briefly using a basic scheduling setup with another open source tool, Nerdalize switched to Kubernetes. "On top of our heating devices throughout the Netherlands, we have a virtual machine layer, and on top of that we run Kubernetes clusters for our customers," says van der Veer. "As a small company, we have to provide a rock solid story in terms of the technology. Kubernetes allows us to offer a hybrid solution: 'You can run this on our cloud, but you can run it on other clouds as well. It runs in your internal hardware if you like.' And together with the Docker image standard and our multi-cloud dashboard, that allows them peace of mind."

+ +

Impact

+ +

Nerdalize prides itself on being a Kubernetes-native cloud provider that charges its customers prices 40% below that of other cloud providers. "Every euro that we have to invest for licensing of software that's not open source comes from that 40%," says van der Veer. If they had used a non-open source orchestration platform instead of Kubernetes, "that would reduce this proposition that we have of 40% less cost to like 30%. Kubernetes directly allows us to have this business model and this strategic advantage." Nerdalize customers also benefit from time savings: One went from spending a day to set up VMs, network, and software, to spinning up a Kubernetes cluster in minutes. And for households using the heating devices, they save an average of 200 euro a year on their heating bill. The environmental impact? The annual reduction in CO2 emissions comes out to be 2 tons per Nerdalize household, which is equivalent to a car driving 8,000 km.

+ +{{< case-studies/quote author="AD VAN DER VEER, PRODUCT ENGINEER, NERDALIZE" >}} +"We can walk into a boardroom and put a Kubernetes logo up, and people accept it as an established technology. It becomes this centerpiece where other cloud native projects can tie in, so there's a network effect that each project empowers each other. This is something that has a lot of value when we have to talk to customers and convince them that our cloud fits their needs." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +Nerdalize is a cloud hosting provider that has no data centers. Instead, the four-year-old startup places its servers in homes across the Netherlands, inside heating devices it developed to turn the heat produced by the servers into heating and hot water for the residents. +{{< /case-studies/lead >}} + +

"Households save on their gas bills, and cloud users have a much more sustainable cloud solution," says Maaike Stoops, Customer Experience Queen at Nerdalize. "And we don't have the overhead of building a data center, so our cloud is up to 40% more affordable."

+ +

That business model has been enabled by the company's adoption of containerization and Kubernetes. "When we just got started, Docker was just introduced," says Digital Product Engineer Ad van der Veer. "We began with a very basic bare metal setup, but once we developed the business, we saw that containerization technology was super useful to help our customers. As a cloud provider, we have internal services for hosting our backends and billing our customers, but we also need to offer our compute to our end users. Since we have these heating devices spread across the Netherlands, we need some way of tying that all together."

+ +

After trying to develop its own scheduling system using another open source tool, Nerdalize found Kubernetes. "Kubernetes provided us with more functionality out of the gate," says van der Veer.

+ +{{< case-studies/quote + image="/images/case-studies/nerdalize/banner3.jpg" + author="AD VAN DER VEER, PRODUCT ENGINEER, NERDALIZE" +>}} +"We always try to get a working version online first, like minimal viable products, and then move to stabilize that," says van der Veer. "And I think that these kinds of day-two problems are now immediately solved. The rapid prototyping we saw internally is a very valuable aspect of Kubernetes." +{{< /case-studies/quote >}} + +

The team first experimented with a basic use case to run customers' workloads on Kubernetes. "Getting the data working was kind of difficult, and at the time the installation wasn't that simple," says van der Veer. "Then CNCF started, we saw the community grow, these problems got solved, and from there it became a very easy decision."

+ +

The first Nerdalize product that was launched in 2017 was "100% containerized and Kubernetes native," says van der Veer. "On top of our heating devices throughout the Netherlands, we have a virtual machine layer, and on top of that we run Kubernetes clusters for our customers. As a small company, we have to provide a rock solid story in terms of the technology. Kubernetes allows us to offer a hybrid solution: 'You can run this on our cloud, but you can run it on other clouds as well. It runs in your internal hardware if you like.' And together with the Docker image standard and our multi-cloud dashboard, that gives them peace of mind."

+ +

Not to mention the 40% cost savings. "Every euro that we have to invest for licensing of software that's not open source comes from that 40%," says van der Veer. If Nerdalize had used a non-open source orchestration platform instead of Kubernetes, "that would reduce our cost savings proposition to like 30%. Kubernetes directly allows us to have this business model and this strategic advantage."

+ +{{< case-studies/quote + image="/images/case-studies/nerdalize/banner4.jpg" + author="MAAIKE STOOPS, CUSTOMER EXPERIENCE QUEEN, NERDALIZE" +>}} +"One of our customers used to spend up to a day setting up the virtual machines, network and software every time they wanted to run a project in the cloud. On our platform, with Docker and Kubernetes, customers can have their projects running in a couple of minutes." +{{< /case-studies/quote >}} + +

Nerdalize now has customers, from individual engineers to data-intensive startups and established companies, all around the world. (For the time being, though, the heating devices are exclusive to the Netherlands.) One of the most common use cases is batch workloads used by data scientists and researchers, and the time savings for these end users is profound. "One of our customers used to spend up to a day setting up the virtual machines, network and software every time they wanted to run a project in the cloud," says Stoops. "On our platform, with Docker and Kubernetes, customers can have their projects running in a couple of minutes."

+ +

As for households using the heating devices, they save an average of 200 euro a year on their heating bill. The environmental impact? The annual reduction in CO2 emissions comes out to 2 tons per Nerdalize household, which is equivalent to a car driving 8,000 km.

+ +

For the Nerdalize team, feature development—such as the accessible command line interface called Nerd, which recently went live—has also been sped up by Kubernetes. "We always try to get a working version online first, like minimal viable products, and then move to stabilize that," says van der Veer. "And I think that these kinds of day-two problems are now immediately solved. The rapid prototyping we saw internally is a very valuable aspect of Kubernetes."

+ +

Another unexpected benefit has been the growing influence and reputation of Kubernetes. "We can walk into a boardroom and put a Kubernetes logo up, and people accept it as an established technology," says van der Veer. "It becomes this centerpiece where other cloud native projects can tie in, so there's a network effect that each project empowers each other. This is something that has a lot of value when we have to convince customers that our cloud fits their needs."

+ +{{< case-studies/quote author="MAAIKE STOOPS, CUSTOMER EXPERIENCE QUEEN, NERDALIZE" >}} +"It shouldn't be too big of a hassle and too large of a commitment. It should be fun and easy for end users. So we really love Kubernetes in that way." +{{< /case-studies/quote >}} + +

In fact, Nerdalize is currently looking into implementing other CNCF projects, such as Prometheus for monitoring and Rook, "which should help us with some of the data problems that we want to solve for our customers," says van der Veer.

+ +

In the coming year, Nerdalize will scale up the number of households running its hardware to 50, or the equivalent of a small scale data center. Geographic redundancy and greater server ability for customers are two main goals. Spreading the word about Kubernetes is also in the game plan. "We offer a free namespace on our sandbox, multi-tenant Kubernetes cluster for anyone to try," says van der Veer. "What's more cool than trying your first Kubernetes project on houses, to warm a shower?"

+ +

Ultimately, this ties into Nerdalize's mission of supporting affordable and sustainable cloud hosting. "We want to be the disrupter of the cloud space, showing organizations that running in the cloud is easy and affordable," says Stoops. "It shouldn't be too big of a hassle and too large of a commitment. It should be fun and easy for end users. So we really love Kubernetes in that way."

\ No newline at end of file diff --git a/content/bn/case-studies/northwestern-mutual/index.html b/content/bn/case-studies/northwestern-mutual/index.html index e69de29bb2..b10ca384f5 100644 --- a/content/bn/case-studies/northwestern-mutual/index.html +++ b/content/bn/case-studies/northwestern-mutual/index.html @@ -0,0 +1,69 @@ +--- +title: Northwestern Mutual Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/northwestern/banner1.jpg +heading_title_logo: /images/northwestern_logo.png +subheading: > + Cloud Native at Northwestern Mutual +case_study_details: + - Company: Northwestern Mutual + - Location: Milwaukee, WI + - Industry: Insurance and Financial Services +--- + +

Challenge

+ +

In the spring of 2015, Northwestern Mutual acquired a fintech startup, LearnVest, and decided to take "Northwestern Mutual's leading products and services and meld it with LearnVest's digital experience and innovative financial planning platform," says Brad Williams, Director of Engineering for Client Experience, Northwestern Mutual. The company's existing infrastructure had been optimized for batch workflows hosted on on-prem networks; deployments were very traditional, focused on following a process instead of providing deployment agility. "We had to build a platform that was elastically scalable, but also much more responsive, so we could quickly get data to the client website so our end-customers have the experience they expect," says Williams.

+ +

Solution

+ +

The platform team came up with a plan for using the public cloud (AWS), Docker containers, and Kubernetes for orchestration. "Kubernetes gave us that base framework so teams can be very autonomous in what they're building and deliver very quickly and frequently," says Northwestern Mutual Cloud Native Engineer Frank Greco Jr. The team also built and open-sourced Kanali, a Kubernetes-native API management tool that uses OpenTracing, Jaeger, and gRPC.

+ +

Impact

+ +

Before, infrastructure deployments could take weeks; now, it is done in a matter of minutes. The number of deployments has increased dramatically, from about 24 a year to over 500 in just the first 10 months of 2017. Availability has also increased: There used to be a six-hour control window for commits every Sunday morning, as well as other periods of general maintenance, during which outages could happen. "Now we have eliminated the planned outage windows," says Bryan Pfremmer, App Platform Teams Manager, Northwestern Mutual. Kanali has had an impact on the bottom line. The vendor API management product that the company previously used required 23 servers, "dedicated, to only API management," says Pfremmer. "Now it's all integrated in the existing stack and running as another deployment on Kubernetes. And that's just one environment. Between the three that we had plus the test, that's hard dollar savings."

+ +{{< case-studies/quote author="Frank Greco Jr., Cloud Native Engineer at Northwestern Mutual">}} +"In a large enterprise, you're going to have people using Kubernetes, but then you're also going to have people using WAS and .NET. You may not be at a point where your whole stack can be cloud native. What if you can take your API management tool and make it cloud native, but still proxy to legacy systems? Using different pieces that are cloud native, open source and Kubernetes native, you can do pretty innovative stuff." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +For more than 160 years, Northwestern Mutual has maintained its industry leadership in part by keeping a strong focus on risk management. +{{< /case-studies/lead >}} + +

For many years, the company took a similar approach to managing its technology and has recently undergone a digital transformation to advance the company's digital strategy - including making a lot of noise in the cloud-native world.

+ +

In the spring of 2015, this insurance and financial services company acquired a fintech startup, LearnVest, and decided to take "Northwestern Mutual's leading products and services and meld it with LearnVest's digital experience and innovative financial planning platform," says Brad Williams, Director of Engineering for Client Experience, Northwestern Mutual. The company's existing infrastructure had been optimized for batch workflows hosted on an on-premise datacenter; deployments were very traditional and had to many manual steps that were error prone.

+ +

In order to give the company's 4.5 million clients the digital experience they'd come to expect, says Williams, "We had to build a platform that was elastically scalable, but also much more responsive, so we could quickly get data to the client website. We essentially said, 'You build the system that you think is necessary to support a new, modern-facing one.' That's why we departed from anything legacy."

+ +{{< case-studies/quote image="/images/case-studies/northwestern/banner3.jpg" >}} +"Kubernetes has definitely been the right choice for us. It gave us that base framework so teams can be autonomous in what they're building and deliver very quickly and frequently." +{{< /case-studies/quote >}} + +

Williams and the rest of the platform team decided that the first step would be to start moving from private data centers to AWS. With a new microservice architecture in mind—and the freedom to implement what was best for the organization—they began using Docker containers. After looking into the various container orchestration options, they went with Kubernetes, even though it was still in beta at the time. "There was some debate whether we should build something ourselves, or just leverage that product and evolve with it," says Northwestern Mutual Cloud Native Engineer Frank Greco Jr. "Kubernetes has definitely been the right choice for us. It gave us that base framework so teams can be autonomous in what they're building and deliver very quickly and frequently."

+ +

As early adopters, the team had to do a lot of work with Ansible scripts to stand up the cluster. "We had a lot of hard security requirements given the nature of our business," explains Bryan Pfremmer, App Platform Teams Manager, Northwestern Mutual. "We found ourselves running a configuration that very few other people ever tried." The client experience group was the first to use the new platform; today, a few hundred of the company's 1,500 engineers are using it and more are eager to get on board.

+ +

The results have been dramatic. Before, infrastructure deployments could take two weeks; now, it is done in a matter of minutes. Now with a focus on Infrastructure automation, and self-service, "You can take an app to production in that same day if you want to," says Pfremmer.

+ +{{< case-studies/quote image="/images/case-studies/northwestern/banner4.jpg" >}} +"Now, developers have autonomy, they can use this whenever they want, however they want. It becomes more valuable the more instrumentation downstream that happens, as we mature in it." +{{< /case-studies/quote >}} + +

The process used to be so cumbersome that minor bug releases would be bundled with feature releases. With the new streamlined system enabled by Kubernetes, the number of deployments has increased from about 24 a year to more than 500 in just the first 10 months of 2017. Availability has also been improved: There used to be a six-hour control window for commits every early Sunday morning, as well as other periods of general maintenance, during which outages could happen. "Now there's no planned outage window," notes Pfremmer.

+ +

Northwestern Mutual built that API management tool—called Kanali—and open sourced it in the summer of 2017. The team took on the project because it was a key capability for what they were building and prior the solution worked in an "anti-cloud native way that was different than everything else we were doing," says Greco. Now API management is just another container deployed to Kubernetes along with a separate Jaeger deployment.

+ +

Now the engineers using the Kubernetes deployment platform have the added benefit of visibility in production—and autonomy. Before, a centralized team and would have to run a trace. "Now, developers have autonomy, they can use this whenever they want, however they want. It becomes more valuable the more instrumentation downstream that happens, as we mature in it." says Greco.

+ +{{< case-studies/quote >}} +"We're trying to make what we're doing known so that we can find people who are like, 'Yeah, that's interesting. I want to come do it!'" +{{< /case-studies/quote >}} + +

But the team didn't stop there. "In a large enterprise, you're going to have people using Kubernetes, but then you're also going to have people using WAS and .NET," says Greco. "You may not be at a point where your whole stack can be cloud native. What if you can take your API management tool and make it cloud native, but still proxy to legacy systems? Using different pieces that are cloud native, open source and Kubernetes native, you can do pretty innovative stuff."

+ +

As the team continues to improve its stack and share its Kubernetes best practices, it feels that Northwestern Mutual's reputation as a technology-first company is evolving too. "No one would think a company that's 160-plus years old is foraying this deep into the cloud and infrastructure stack," says Pfremmer. And they're hoping that means they'll be able to attract new talent. "We're trying to make what we're doing known so that we can find people who are like, 'Yeah, that's interesting. I want to come do it!'"

\ No newline at end of file diff --git a/content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.svg b/content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.svg index b10ca384f5..e69de29bb2 100644 --- a/content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.svg +++ b/content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.svg @@ -1,69 +0,0 @@ ---- -title: Northwestern Mutual Case Study -case_study_styles: true -cid: caseStudies - -new_case_study_styles: true -heading_background: /images/case-studies/northwestern/banner1.jpg -heading_title_logo: /images/northwestern_logo.png -subheading: > - Cloud Native at Northwestern Mutual -case_study_details: - - Company: Northwestern Mutual - - Location: Milwaukee, WI - - Industry: Insurance and Financial Services ---- - -

Challenge

- -

In the spring of 2015, Northwestern Mutual acquired a fintech startup, LearnVest, and decided to take "Northwestern Mutual's leading products and services and meld it with LearnVest's digital experience and innovative financial planning platform," says Brad Williams, Director of Engineering for Client Experience, Northwestern Mutual. The company's existing infrastructure had been optimized for batch workflows hosted on on-prem networks; deployments were very traditional, focused on following a process instead of providing deployment agility. "We had to build a platform that was elastically scalable, but also much more responsive, so we could quickly get data to the client website so our end-customers have the experience they expect," says Williams.

- -

Solution

- -

The platform team came up with a plan for using the public cloud (AWS), Docker containers, and Kubernetes for orchestration. "Kubernetes gave us that base framework so teams can be very autonomous in what they're building and deliver very quickly and frequently," says Northwestern Mutual Cloud Native Engineer Frank Greco Jr. The team also built and open-sourced Kanali, a Kubernetes-native API management tool that uses OpenTracing, Jaeger, and gRPC.

- -

Impact

- -

Before, infrastructure deployments could take weeks; now, it is done in a matter of minutes. The number of deployments has increased dramatically, from about 24 a year to over 500 in just the first 10 months of 2017. Availability has also increased: There used to be a six-hour control window for commits every Sunday morning, as well as other periods of general maintenance, during which outages could happen. "Now we have eliminated the planned outage windows," says Bryan Pfremmer, App Platform Teams Manager, Northwestern Mutual. Kanali has had an impact on the bottom line. The vendor API management product that the company previously used required 23 servers, "dedicated, to only API management," says Pfremmer. "Now it's all integrated in the existing stack and running as another deployment on Kubernetes. And that's just one environment. Between the three that we had plus the test, that's hard dollar savings."

- -{{< case-studies/quote author="Frank Greco Jr., Cloud Native Engineer at Northwestern Mutual">}} -"In a large enterprise, you're going to have people using Kubernetes, but then you're also going to have people using WAS and .NET. You may not be at a point where your whole stack can be cloud native. What if you can take your API management tool and make it cloud native, but still proxy to legacy systems? Using different pieces that are cloud native, open source and Kubernetes native, you can do pretty innovative stuff." -{{< /case-studies/quote >}} - -{{< case-studies/lead >}} -For more than 160 years, Northwestern Mutual has maintained its industry leadership in part by keeping a strong focus on risk management. -{{< /case-studies/lead >}} - -

For many years, the company took a similar approach to managing its technology and has recently undergone a digital transformation to advance the company's digital strategy - including making a lot of noise in the cloud-native world.

- -

In the spring of 2015, this insurance and financial services company acquired a fintech startup, LearnVest, and decided to take "Northwestern Mutual's leading products and services and meld it with LearnVest's digital experience and innovative financial planning platform," says Brad Williams, Director of Engineering for Client Experience, Northwestern Mutual. The company's existing infrastructure had been optimized for batch workflows hosted on an on-premise datacenter; deployments were very traditional and had to many manual steps that were error prone.

- -

In order to give the company's 4.5 million clients the digital experience they'd come to expect, says Williams, "We had to build a platform that was elastically scalable, but also much more responsive, so we could quickly get data to the client website. We essentially said, 'You build the system that you think is necessary to support a new, modern-facing one.' That's why we departed from anything legacy."

- -{{< case-studies/quote image="/images/case-studies/northwestern/banner3.jpg" >}} -"Kubernetes has definitely been the right choice for us. It gave us that base framework so teams can be autonomous in what they're building and deliver very quickly and frequently." -{{< /case-studies/quote >}} - -

Williams and the rest of the platform team decided that the first step would be to start moving from private data centers to AWS. With a new microservice architecture in mind—and the freedom to implement what was best for the organization—they began using Docker containers. After looking into the various container orchestration options, they went with Kubernetes, even though it was still in beta at the time. "There was some debate whether we should build something ourselves, or just leverage that product and evolve with it," says Northwestern Mutual Cloud Native Engineer Frank Greco Jr. "Kubernetes has definitely been the right choice for us. It gave us that base framework so teams can be autonomous in what they're building and deliver very quickly and frequently."

- -

As early adopters, the team had to do a lot of work with Ansible scripts to stand up the cluster. "We had a lot of hard security requirements given the nature of our business," explains Bryan Pfremmer, App Platform Teams Manager, Northwestern Mutual. "We found ourselves running a configuration that very few other people ever tried." The client experience group was the first to use the new platform; today, a few hundred of the company's 1,500 engineers are using it and more are eager to get on board.

- -

The results have been dramatic. Before, infrastructure deployments could take two weeks; now, it is done in a matter of minutes. Now with a focus on Infrastructure automation, and self-service, "You can take an app to production in that same day if you want to," says Pfremmer.

- -{{< case-studies/quote image="/images/case-studies/northwestern/banner4.jpg" >}} -"Now, developers have autonomy, they can use this whenever they want, however they want. It becomes more valuable the more instrumentation downstream that happens, as we mature in it." -{{< /case-studies/quote >}} - -

The process used to be so cumbersome that minor bug releases would be bundled with feature releases. With the new streamlined system enabled by Kubernetes, the number of deployments has increased from about 24 a year to more than 500 in just the first 10 months of 2017. Availability has also been improved: There used to be a six-hour control window for commits every early Sunday morning, as well as other periods of general maintenance, during which outages could happen. "Now there's no planned outage window," notes Pfremmer.

- -

Northwestern Mutual built that API management tool—called Kanali—and open sourced it in the summer of 2017. The team took on the project because it was a key capability for what they were building and prior the solution worked in an "anti-cloud native way that was different than everything else we were doing," says Greco. Now API management is just another container deployed to Kubernetes along with a separate Jaeger deployment.

- -

Now the engineers using the Kubernetes deployment platform have the added benefit of visibility in production—and autonomy. Before, a centralized team and would have to run a trace. "Now, developers have autonomy, they can use this whenever they want, however they want. It becomes more valuable the more instrumentation downstream that happens, as we mature in it." says Greco.

- -{{< case-studies/quote >}} -"We're trying to make what we're doing known so that we can find people who are like, 'Yeah, that's interesting. I want to come do it!'" -{{< /case-studies/quote >}} - -

But the team didn't stop there. "In a large enterprise, you're going to have people using Kubernetes, but then you're also going to have people using WAS and .NET," says Greco. "You may not be at a point where your whole stack can be cloud native. What if you can take your API management tool and make it cloud native, but still proxy to legacy systems? Using different pieces that are cloud native, open source and Kubernetes native, you can do pretty innovative stuff."

- -

As the team continues to improve its stack and share its Kubernetes best practices, it feels that Northwestern Mutual's reputation as a technology-first company is evolving too. "No one would think a company that's 160-plus years old is foraying this deep into the cloud and infrastructure stack," says Pfremmer. And they're hoping that means they'll be able to attract new talent. "We're trying to make what we're doing known so that we can find people who are like, 'Yeah, that's interesting. I want to come do it!'"

\ No newline at end of file diff --git a/content/bn/case-studies/ygrene/index.html b/content/bn/case-studies/ygrene/index.html index e69de29bb2..0e16b95004 100644 --- a/content/bn/case-studies/ygrene/index.html +++ b/content/bn/case-studies/ygrene/index.html @@ -0,0 +1,82 @@ +--- +title: Ygrene Case Study +linkTitle: Ygrene +case_study_styles: true +cid: caseStudies +logo: ygrene_featured_logo.png +featured: true +weight: 48 +quote: > + We had to change some practices and code, and the way things were built, but we were able to get our main systems onto Kubernetes in a month or so, and then into production within two months. That's very fast for a finance company. + +new_case_study_styles: true +heading_background: /images/case-studies/ygrene/banner1.jpg +heading_title_logo: /images/ygrene_logo.png +subheading: > + Ygrene: Using Cloud Native to Bring Security and Scalability to the Finance Industry +case_study_details: + - Company: Ygrene + - Location: Petaluma, Calif. + - Industry: Clean energy financing +--- + +

Challenge

+ +

A PACE (Property Assessed Clean Energy) financing company, Ygrene has funded more than $1 billion in loans since 2010. In order to approve and process those loans, "We have lots of data sources that are being aggregated, and we also have lots of systems that need to churn on that data," says Ygrene Development Manager Austin Adams. The company was utilizing massive servers, and "we just reached the limit of being able to scale them vertically. We had a really unstable system that became overwhelmed with requests just for doing background data processing in real time. The performance the users saw was very poor. We needed a solution that wouldn't require us to make huge refactors to the code base." As a finance company, Ygrene also needed to ensure that they were shipping their applications securely.

+ +

Solution

+ +

Moving from an Engine Yard platform and Amazon Elastic Beanstalk, the Ygrene team embraced cloud native technologies and practices: Kubernetes to help scale out vertically and distribute workloads, Notary to put in build-time controls and get trust on the Docker images being used with third-party dependencies, and Fluentd for "observing every part of our stack," all running on Amazon EC2 Spot.

+ +

Impact

+ +

Before, deployments typically took three to four hours, and two or three months' worth of work would be deployed at low-traffic times every week or two weeks. Now, they take five minutes for Kubernetes, and an hour for the overall deploy with smoke testing. And "we're able to deploy three or four times a week, with just one week's or two days' worth of work," Adams says. "We're deploying during the work week, in the daytime and without any downtime. We had to ask for business approval to take the systems down, even in the middle of the night, because people could be doing loans. Now we can deploy, ship code, and migrate databases, all without taking the system down. The company gets new features without worrying that some business will be lost or delayed." Additionally, by using the kops project, Ygrene can now run its Kubernetes clusters with AWS EC2 Spot, at a tenth of the previous cost. These cloud native technologies have "changed the game for scalability, observability, and security—we're adding new data sources that are very secure," says Adams. "Without Kubernetes, Notary, and Fluentd, we couldn't tell our investors and team members that we knew what was going on."

+ +{{< case-studies/quote author="Austin Adams, Development Manager, Ygrene Energy Fund" >}} +"CNCF projects are helping Ygrene determine the security and observability standards for the entire PACE industry. We're an emerging finance industry, and without these projects, especially Kubernetes, we couldn't be the industry leader that we are today." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +In less than a decade, Ygrene has funded more than $1 billion in loans for renewable energy projects. +{{< /case-studies/lead >}} + +

A PACE (Property Assessed Clean Energy) financing company, "We take the equity in a home or a commercial building, and use it to finance property improvements for anything that saves electricity, produces electricity, saves water, or reduces carbon emissions," says Development Manager Austin Adams.

+ +

In order to approve those loans, the company processes an enormous amount of underwriting data. "We have tons of different points that we have to validate about the property, about the company, or about the person," Adams says. "So we have lots of data sources that are being aggregated, and we also have lots of systems that need to churn on that data in real time."

+ +

By 2017, deployments and scalability had become pain points. The company was utilizing massive servers, and "we just reached the limit of being able to scale them vertically," he says. Migrating to AWS Elastic Beanstalk didn't solve the problem: "The Scala services needed a lot of data from the main Ruby on Rails services and from different vendors, so they were asking for information from our Ruby services at a rate that those services couldn't handle. We had lots of configuration misses with Elastic Beanstalk as well. It just came to a head, and we realized we had a really unstable system."

+ +{{< case-studies/quote + image="/images/case-studies/ygrene/banner3.jpg" + author="Austin Adams, Development Manager, Ygrene Energy Fund" +>}} +"CNCF has been an amazing incubator for so many projects. Now we look at its webpage regularly to find out if there are any new, awesome, high-quality projects we can implement into our stack. It's actually become a hub for us for knowing what software we need to be looking at to make our systems more secure or more scalable." +{{< /case-studies/quote >}} + +

Adams along with the rest of the team set out to find a solution that would be transformational, but "wouldn't require us to make huge refactors to the code base," he says. And as a finance company, Ygrene needed security as much as scalability. They found the answer by embracing cloud native technologies: Kubernetes to help scale out vertically and distribute workloads, Notary to achieve reliable security at every level, and Fluentd for observability. "Kubernetes was where the community was going, and we wanted to be future proof," says Adams.

+ +

With Kubernetes, the team was able to quickly containerize the Ygrene application with Docker. "We had to change some practices and code, and the way things were built," Adams says, "but we were able to get our main systems onto Kubernetes in a month or so, and then into production within two months. That's very fast for a finance company."

+ +

How? Cloud native has "changed the game for scalability, observability, and security—we're adding new data sources that are very secure," says Adams. "Without Kubernetes, Notary, and Fluentd, we couldn't tell our investors and team members that we knew what was going on."

+ +

Notary, in particular, "has been a godsend," says Adams. "We need to know that our attack surface on third-party dependencies is low, or at least managed. We use it as a trust system and we also use it as a separation, so production images are signed by Notary, but some development images we don't sign. That is to ensure that they can't get into the production cluster. We've been using it in the test cluster to feel more secure about our builds."

+ +{{< case-studies/quote image="/images/case-studies/ygrene/banner4.jpg">}} +"We had to change some practices and code, and the way things were built," Adams says, "but we were able to get our main systems onto Kubernetes in a month or so, and then into production within two months. That's very fast for a finance company." +{{< /case-studies/quote >}} + +

By using the kops project, Ygrene was able to move from Elastic Beanstalk to running its Kubernetes clusters on AWS EC2 Spot, at a tenth of the previous cost. "In order to scale before, we would need to up our instance sizes, incurring high cost for low value," says Adams. "Now with Kubernetes and kops, we are able to scale horizontally on Spot with multiple instance groups."

+ +

That also helped them mitigate the risk that comes with running in the public cloud. "We figured out, essentially, that if we're able to select instance classes using EC2 Spot that had an extremely low likelihood of interruption and zero history of interruption, and we're willing to pay a price high enough, that we could virtually get the same guarantee using Kubernetes because we have enough nodes," says Software Engineer Zach Arnold, who led the migration to Kubernetes. "Now that we've re-architected these pieces of the application to not live on the same server, we can push out to many different servers and have a more stable deployment."

+ +

As a result, the team can now ship code any time of day. "That was risky because it could bring down your whole loan management software with it," says Arnold. "But we now can deploy safely and securely during the day."

+ +{{< case-studies/quote >}} +"In order to scale before, we would need to up our instance sizes, incurring high cost for low value," says Adams. "Now with Kubernetes and kops, we are able to scale horizontally on Spot with multiple instance groups." +{{< /case-studies/quote >}} + +

Before, deployments typically took three to four hours, and two or three months' worth of work would be deployed at low-traffic times every week or two weeks. Now, they take five minutes for Kubernetes, and an hour for an overall deploy with smoke testing. And "we're able to deploy three or four times a week, with just one week's or two days' worth of work," Adams says. "We're deploying during the work week, in the daytime and without any downtime. We had to ask for business approval to take the systems down for 30 minutes to an hour, even in the middle of the night, because people could be doing loans. Now we can deploy, ship code, and migrate databases, all without taking the system down. The company gets new features without worrying that some business will be lost or delayed."

+ +

Cloud native also affected how Ygrene's 50+ developers and contractors work. Adams and Arnold spent considerable time "teaching people to think distributed out of the box," says Arnold. "We ended up picking what we call the Four S's of Shipping: safely, securely, stably, and speedily." (For more on the security piece of it, see their article on their "continuous hacking" strategy.) As for the engineers, says Adams, "they have been able to advance as their software has advanced. I think that at the end of the day, the developers feel better about what they're doing, and they also feel more connected to the modern software development community."

+ +

Looking ahead, Adams is excited to explore more CNCF projects, including SPIFFE and SPIRE. "CNCF has been an amazing incubator for so many projects," he says. "Now we look at its webpage regularly to find out if there are any new, awesome, high-quality projects we can implement into our stack. It's actually become a hub for us for knowing what software we need to be looking at to make our systems more secure or more scalable."

\ No newline at end of file diff --git a/content/bn/case-studies/zalando/index.html b/content/bn/case-studies/zalando/index.html index e69de29bb2..177c42962a 100644 --- a/content/bn/case-studies/zalando/index.html +++ b/content/bn/case-studies/zalando/index.html @@ -0,0 +1,83 @@ +--- +title: Zalando Case Study +case_study_styles: true +cid: caseStudies + +new_case_study_styles: true +heading_background: /images/case-studies/zalando/banner1.jpg +heading_title_logo: /images/zalando_logo.png +subheading: > + Europe's Leading Online Fashion Platform Gets Radical with Cloud Native +case_study_details: + - Company: Zalando + - Location: Berlin, Germany + - Industry: Online Fashion +--- + +

Challenge

+ +

Zalando, Europe's leading online fashion platform, has experienced exponential growth since it was founded in 2008. In 2015, with plans to further expand its original e-commerce site to include new services and products, Zalando embarked on a radical transformation resulting in autonomous self-organizing teams. This change requires an infrastructure that could scale with the growth of the engineering organization. Zalando's technology department began rewriting its applications to be cloud-ready and started moving its infrastructure from on-premise data centers to the cloud. While orchestration wasn't immediately considered, as teams migrated to Amazon Web Services (AWS): "We saw the pain teams were having with infrastructure and Cloud Formation on AWS," says Henning Jacobs, Head of Developer Productivity. "There's still too much operational overhead for the teams and compliance. " To provide better support, cluster management was brought into play.

+ +

Solution

+ +

The company now runs its Docker containers on AWS using Kubernetes orchestration.

+ +

Impact

+ +

With the old infrastructure "it was difficult to properly embrace new technologies, and DevOps teams were considered to be a bottleneck," says Jacobs. "Now, with this cloud infrastructure, they have this packaging format, which can contain anything that runs on the Linux kernel. This makes a lot of people pretty happy. The engineers love autonomy."

+ +{{< case-studies/quote author="Henning Jacobs, Head of Developer Productivity at Zalando" >}} +"We envision all Zalando delivery teams running their containerized applications on a state-of-the-art, reliable and scalable cluster infrastructure provided by Kubernetes." +{{< /case-studies/quote >}} + +{{< case-studies/lead >}} +When Henning Jacobs arrived at Zalando in 2010, the company was just two years old with 180 employees running an online store for European shoppers to buy fashion items. +{{< /case-studies/lead >}} + +

"It started as a PHP e-commerce site which was easy to get started with, but was not scaling with the business' needs" says Jacobs, Head of Developer Productivity at Zalando.

+ +

At that time, the company began expanding beyond its German origins into other European markets. Fast-forward to today and Zalando now has more than 14,000 employees, 3.6 billion Euro in revenue for 2016 and operates across 15 countries. "With growth in all dimensions, and constant scaling, it has been a once-in-a-lifetime experience," he says.

+ +

Not to mention a unique opportunity for an infrastructure specialist like Jacobs. Just after he joined, the company began rewriting all their applications in-house. "That was generally our strategy," he says. "For example, we started with our own logistics warehouses but at first you don't know how to do logistics software, so you have some vendor software. And then we replaced it with our own because with off-the-shelf software you're not competitive. You need to optimize these processes based on your specific business needs."

+ +

In parallel to rewriting their applications, Zalando had set a goal of expanding beyond basic e-commerce to a platform offering multi-tenancy, a dramatic increase in assortments and styles, same-day delivery and even your own personal online stylist.

+ +

The need to scale ultimately led the company on a cloud-native journey. As did its embrace of a microservices-based software architecture that gives engineering teams more autonomy and ownership of projects. "This move to the cloud was necessary because in the data center you couldn't have autonomous teams. You have the same infrastructure and it was very homogeneous, so you could only run your Java or Python app," Jacobs says.

+ +{{< case-studies/quote image="/images/case-studies/zalando/banner3.jpg" >}} +"This move to the cloud was necessary because in the data center you couldn't have autonomous teams. You have the same infrastructure and it was very homogeneous, so you could only run your Java or Python app." +{{< /case-studies/quote >}} + +

Zalando began moving its infrastructure from two on-premise data centers to the cloud, requiring the migration of older applications for cloud-readiness. "We decided to have a clean break," says Jacobs. "Our Amazon Web Services infrastructure was set up like so: Every team has its own AWS account, which is completely isolated, meaning there's no 'lift and shift.' You basically have to rewrite your application to make it cloud-ready even down to the persistence layer. We bravely went back to the drawing board and redid everything, first choosing Docker as a common containerization, then building the infrastructure from there."

+ +

The company decided to hold off on orchestration at the beginning, but as teams were migrated to AWS, "we saw the pain teams were having with infrastructure and cloud formation on AWS," says Jacobs.

+ +

Zalandos 200+ autonomous engineering teams decide what technologies to use and could operate their own applications using their own AWS accounts. This setup proved to be a compliance challenge. Even with strict rules-of-play and automated compliance checks in place, engineering teams and IT-compliance were overburdened addressing compliance issues. "Violations appear for non-compliant behavior, which we detect when scanning the cloud infrastructure," says Jacobs. "Everything is possible and nothing enforced, so you have to live with violations (and resolve them) instead of preventing the error in the first place. This means overhead for teams—and overhead for compliance and operations. It also takes time to spin up new EC2 instances on AWS, which affects our deployment velocity."

+ +

The team realized they needed to "leverage the value you get from cluster management," says Jacobs. When they first looked at Platform as a Service (PaaS) options in 2015, the market was fragmented; but "now there seems to be a clear winner. It seemed like a good bet to go with Kubernetes."

+ +

The transition to Kubernetes started in 2016 during Zalando's Hack Week where participants deployed their projects to a Kubernetes cluster. From there 60 members of the tech infrastructure department were on-boarded - and then engineering teams were brought on one at a time. "We always start by talking with them and make sure everyone's expectations are clear," says Jacobs. "Then we conduct some Kubernetes training, which is mostly training for our CI/CD setup, because the user interface for our users is primarily through the CI/CD system. But they have to know fundamental Kubernetes concepts and the API. This is followed by a weekly sync with each team to check their progress. Once they have something in production, we want to see if everything is fine on top of what we can improve."

+ +{{< case-studies/quote image="/images/case-studies/zalando/banner4.jpg" >}} +Once Zalando began migrating applications to Kubernetes, the results were immediate. "Kubernetes is a cornerstone for our seamless end-to-end developer experience. We are able to ship ideas to production using a single consistent and declarative API," says Jacobs. +{{< /case-studies/quote >}} + +

At the moment, Zalando is running an initial 40 Kubernetes clusters with plans to scale for the foreseeable future. Once Zalando began migrating applications to Kubernetes, the results were immediate. "Kubernetes is a cornerstone for our seamless end-to-end developer experience. We are able to ship ideas to production using a single consistent and declarative API," says Jacobs. "The self-healing infrastructure provides a frictionless experience with higher-level abstractions built upon low-level best practices. We envision all Zalando delivery teams will run their containerized applications on a state-of-the-art reliable and scalable cluster infrastructure provided by Kubernetes."

+ +

With the old on-premise infrastructure "it was difficult to properly embrace new technologies, and DevOps teams were considered to be a bottleneck," says Jacobs. "Now, with this cloud infrastructure, they have this packaging format, which can contain anything that runs in the Linux kernel. This makes a lot of people pretty happy. The engineers love the autonomy."

+ +

There were a few challenges in Zalando's Kubernetes implementation. "We are a team of seven people providing clusters to different engineering teams, and our goal is to provide a rock-solid experience for all of them," says Jacobs. "We don't want pet clusters. We don't want to have to understand what workload they have; it should just work out of the box. With that in mind, cluster autoscaling is important. There are many different ways of doing cluster management, and this is not part of the core. So we created two components to provision clusters, have a registry for clusters, and to manage the whole cluster life cycle."

+ +

Jacobs's team also worked to improve the Kubernetes-AWS integration. "Thus you're very restricted. You need infrastructure to scale each autonomous team's idea." Plus, "there are still a lot of best practices missing," says Jacobs. The team, for example, recently solved a pod security policy issue. "There was already a concept in Kubernetes but it wasn't documented, so it was kind of tricky," he says. The large Kubernetes community was a big help to resolve the issue. To help other companies start down the same path, Jacobs compiled his team's learnings in a document called Running Kubernetes in Production.

+ +{{< case-studies/quote >}} +"The Kubernetes API allows us to run applications in a cloud provider-agnostic way, which gives us the freedom to revisit IaaS providers in the coming years... We expect the Kubernetes API to be the global standard for PaaS infrastructure and are excited about the continued journey." +{{< /case-studies/quote >}} + +

In the end, Kubernetes made it possible for Zalando to introduce and maintain the new products the company envisioned to grow its platform. "The fashion advice product used Scala, and there were struggles to make this possible with our former infrastructure," says Jacobs. "It was a workaround, and that team needed more and more support from the platform team, just because they used different technologies. Now with Kubernetes, it's autonomous. Whatever the workload is, that team can just go their way, and Kubernetes prevents other bottlenecks."

+ +

Looking ahead, Jacobs sees Zalando's new infrastructure as a great enabler for other things the company has in the works, from its new logistics software, to a platform feature connecting brands, to products dreamed up by data scientists. "One vision is if you watch the next James Bond movie and see the suit he's wearing, you should be able to automatically order it, and have it delivered to you within an hour," says Jacobs. "It's about connecting the full fashion sphere. This is definitely not possible if you have a bottleneck with everyone running in the same data center and thus very restricted. You need infrastructure to scale each autonomous team's idea."

+ +

For other companies considering this technology, Jacobs says he wouldn't necessarily advise doing it exactly the same way Zalando did. "It's okay to do so if you're ready to fail at some things," he says. "You need to set the right expectations. Not everything will work. Rewriting apps and this type of organizational change can be disruptive. The first product we moved was critical. There were a lot of dependencies, and it took longer than expected. Maybe we should have started with something less complicated, less business critical, just to get our toes wet."

+ +

But once they got to the other side "it was clear for everyone that there's no big alternative," Jacobs adds. "The Kubernetes API allows us to run applications in a cloud provider-agnostic way, which gives us the freedom to revisit IaaS providers in the coming years. Zalando Technology benefits from migrating to Kubernetes as we are able to leverage our existing knowledge to create an engineering platform offering flexibility and speed to our engineers while significantly reducing the operational overhead. We expect the Kubernetes API to be the global standard for PaaS infrastructure and are excited about the continued journey."

\ No newline at end of file diff --git a/content/bn/case-studies/zalando/zalando_feature_logo.png b/content/bn/case-studies/zalando/zalando_feature_logo.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/content/bn/case-studies/zalando/zalando_feature_logo.svg b/content/bn/case-studies/zalando/zalando_feature_logo.svg new file mode 100644 index 0000000000..e69de29bb2 From 20d404e2f8f3854b4f2fc485375d111121b9eb21 Mon Sep 17 00:00:00 2001 From: Garrit Franke Date: Tue, 16 Apr 2024 13:08:32 +0200 Subject: [PATCH 0305/1086] Fix documentation feedback button color Add id anchor to feedback section in docs Move :hover selector to button class --- assets/scss/_base.scss | 13 +++++++++---- layouts/partials/feedback.html | 6 +++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/assets/scss/_base.scss b/assets/scss/_base.scss index c432b9d26a..f187535fa5 100644 --- a/assets/scss/_base.scss +++ b/assets/scss/_base.scss @@ -77,10 +77,10 @@ footer { font-size: 1rem; border: 0px; - } - - .button:hover { - background-color: darken($blue, 10%); + &:hover { + background-color: darken($blue, 10%); + color: white; + } } #cellophane { @@ -104,6 +104,11 @@ main { text-decoration: none; font-size: 1rem; border: 0px; + + &:hover { + background-color: darken($blue, 10%); + color: white; + } } } diff --git a/layouts/partials/feedback.html b/layouts/partials/feedback.html index 1be98c1915..bbe840e498 100644 --- a/layouts/partials/feedback.html +++ b/layouts/partials/feedback.html @@ -1,9 +1,9 @@ {{ if not .Params.hide_feedback }} +[commit c79711b51](https://github.com/cncf/foundation/blob/c79711b5127e2d963107bc1be4a41975c8791acc/code-of-conduct.md)._
-{{< include "/static/cncf-code-of-conduct.md" >}} +{{< include "static/cncf-code-of-conduct.md" >}}
+ +--- + +If you notice a violation of the Code of Conduct at an event or meeting, in +Slack, or in another communication mechanism, reach out to +the [Kubernetes Code of Conduct Committee](https://git.k8s.io/community/committee-code-of-conduct) + +You can reach them by email at [conduct@kubernetes.io](mailto:conduct@kubernetes.io). +Your anonymity will be protected. + +If you notice that this page is out of date, please [file an issue](https://github.com/kubernetes/website/issues/new/choose). diff --git a/content/en/community/static/community-values.md b/content/en/community/static/community-values.md deleted file mode 100644 index 6fd1a1a06c..0000000000 --- a/content/en/community/static/community-values.md +++ /dev/null @@ -1,28 +0,0 @@ - - -# Kubernetes Community Values - -Kubernetes Community culture contributes substantially to the project's success. The following values have evolved over time, pushing our project and peers toward constant improvement. - -## Distribution is better than centralization - -The scale of the Kubernetes project is only viable through high-trust and high-visibility distribution of work, which includes delegation of authority, decision making, technical design, code ownership, and documentation. Distributed asynchronous ownership, collaboration, communication and decision making are the cornerstones of our world-wide community. - -## Community over product or company - -We are here as a community first. Our allegiance is to the intentional stewardship of the Kubernetes project for the benefit of all its members and users everywhere. We support working together publicly for the common goal of a vibrant interoperable ecosystem, providing an excellent experience for our users. Individuals gain status through work. Companies gain status through their commitments to support this community and fund the resources necessary for the project to operate. - -## Automation over process - -Large projects have a lot of hard yet less exciting work. We value time spent automating repetitive work more highly than toil. Where work cannot be automated, our culture recognizes and rewards all types of contributions while recognizing that heroism is not sustainable. - -## Inclusive is better than exclusive - -Broadly successful and useful technologies require different perspectives and skill sets, which can only be heard in a welcoming and respectful environment. Community membership is a privilege, not a right. Community members earn leadership through effort, scope, quality, quantity, and duration of contributions. Our community respects the time and effort put into a discussion, regardless of where a contributor is on their growth path. - -## Evolution is better than stagnation - -Openness to new ideas and studied technological evolution make Kubernetes a stronger project. Continual improvement, servant leadership, mentorship, and respect are the foundations of Kubernetes culture. Kubernetes community leaders have a duty to find, sponsor, and promote new community members. Leaders should expect to step aside. Community members should expect to step up. - -**"Culture eats strategy for breakfast." --Peter Drucker** diff --git a/content/en/community/values.md b/content/en/community/values.md deleted file mode 100644 index 2974dc1e43..0000000000 --- a/content/en/community/values.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Kubernetes Community Values -layout: basic -cid: community -community_styles_migrated: true - -# this page is deprecated -# canonical page is https://www.kubernetes.dev/community/values/ -sitemap: - priority: 0.1 ---- - -
-

-This page is a replicated version of -Kubernetes Community Values, as of -commit 5c64274. -If you notice that this is out of date, please -file an issue. -

-{{< include "/static/community-values.md" >}} -
- - - From b78e1cdf4c5a903cfa0aa8bf7fa41078b6207d51 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Tue, 23 Apr 2024 16:10:31 +0100 Subject: [PATCH 0317/1086] Update community resource localizable strings --- data/i18n/en/en.toml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/data/i18n/en/en.toml b/data/i18n/en/en.toml index 51241be943..80f1306f28 100644 --- a/data/i18n/en/en.toml +++ b/data/i18n/en/en.toml @@ -43,6 +43,9 @@ other = "Forum" [community_github_name] other = "GitHub" +[community_server_fault_name] +other = "Server Fault" + [community_slack_name] other = "Slack" @@ -50,7 +53,10 @@ other = "Slack" other = "Stack Overflow" [community_twitter_name] -other = "Twitter" +other = "X (formerly Twitter)" + +[community_x_name] +other = "X (formerly Twitter)" [community_youtube_name] other = "YouTube" From 631e9a23e46d05a4c3b3cd93feb1fdff592b9cb4 Mon Sep 17 00:00:00 2001 From: City Date: Wed, 17 Apr 2024 20:20:06 +0800 Subject: [PATCH 0318/1086] Update define-command-argument-container.md use uppercase letter in not and add args corresponding description fix grammatical --- .../define-command-argument-container.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/inject-data-application/define-command-argument-container.md b/content/en/docs/tasks/inject-data-application/define-command-argument-container.md index 61beaeccb8..d50a050ecd 100644 --- a/content/en/docs/tasks/inject-data-application/define-command-argument-container.md +++ b/content/en/docs/tasks/inject-data-application/define-command-argument-container.md @@ -36,7 +36,7 @@ If you define args, but do not define a command, the default command is used with your new arguments. {{< note >}} -The `command` field corresponds to `entrypoint` in some container runtimes. +The `command` field corresponds to `ENTRYPOINT`, and the `args` field corresponds to `CMD` in some container runtimes. {{< /note >}} In this exercise, you create a Pod that runs one container. The configuration From 582f2ae4facd872f4d4d2d77f95176ea64b25f96 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Wed, 24 Apr 2024 16:29:56 +0600 Subject: [PATCH 0319/1086] 1st commit - Localization of release.md --- content/bn/releases/release.md | 50 ++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 content/bn/releases/release.md diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md new file mode 100644 index 0000000000..3fd84d1a61 --- /dev/null +++ b/content/bn/releases/release.md @@ -0,0 +1,50 @@ +--- +title: কুবারনেটিস রিলিজ সাইকেল +type: docs +auto_generated: true +--- + + + +{{< warning >}} +এই কনটেন্ট স্বয়ংক্রিয়ভাবে তৈরি এবং লিঙ্কগুলি কাজ নাও করতে পারে৷ উকুমেন্টটির সোর্স অবস্থিত [এখানে](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-release/release.md). +{{< /warning >}} + +# টার্গেটিং এনহ্যান্সমেন্টস, ইস্যু এবং PRs মাইলস্টোন রিলিজের জন্য + +এই ডকুমেন্টটি ফোকাস করা কুবারনেটিস ডেভেলপার এবং কন্ট্রিবিউটরদের জন্য যাদের +একটি এনহ্যান্সমেন্ট, ইস্যু, অথবা পুল রিকুয়েস্ট তৈরি করতে হয় যা লক্ষ্য করে একটি নির্দিষ্ট +মাইলফলক। + +- [TL;DR](#tldr) + - [Normal Dev (Weeks 1-11)](#normal-dev-weeks-1-11) + - [Code Freeze (Weeks 12-14)](#code-freeze-weeks-12-14) + - [Post-Release (Weeks 14+)](#post-release-weeks-14+) +- [Definitions](#definitions) +- [The Release Cycle](#the-release-cycle) +- [Removal Of Items From The Milestone](#removal-of-items-from-the-milestone) +- [Adding An Item To The Milestone](#adding-an-item-to-the-milestone) + - [Milestone Maintainers](#milestone-maintainers) + - [Feature additions](#feature-additions) + - [Issue additions](#issue-additions) + - [PR Additions](#pr-additions) +- [Other Required Labels](#other-required-labels) + - [SIG Owner Label](#sig-owner-label) + - [Priority Label](#priority-label) + - [Issue/PR Kind Label](#issuepr-kind-label) + +The process for shepherding enhancements, issues, and pull requests into a +Kubernetes release spans multiple stakeholders: + +- the enhancement, issue, and pull request owner(s) +- SIG leadership +- the [Release Team][release-team] + +ওয়ার্কফ্লো এবং ইন্টারেকশন সম্পর্কিত তথ্য নীচে বর্ণিত হয়েছে। + +As the owner of an enhancement, issue, or pull request (PR), it is your +responsibility to ensure release milestone requirements are met. Automation and +the Release Team will be in contact with you if updates are required, but +inaction can result in your work being removed from the milestone. Additional +requirements exist when the target milestone is a prior release (see +[cherry pick process][cherry-picks] for more information). From 97ccdd2c9cce95c8605dee908f319f648dfd0fd3 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Wed, 24 Apr 2024 21:00:27 +0800 Subject: [PATCH 0320/1086] [zh-cn] sync persistent-volumes Signed-off-by: xin.li --- .../concepts/storage/persistent-volumes.md | 103 ++++++++++-------- 1 file changed, 60 insertions(+), 43 deletions(-) diff --git a/content/zh-cn/docs/concepts/storage/persistent-volumes.md b/content/zh-cn/docs/concepts/storage/persistent-volumes.md index 9cf0132c0b..aec58ab232 100644 --- a/content/zh-cn/docs/concepts/storage/persistent-volumes.md +++ b/content/zh-cn/docs/concepts/storage/persistent-volumes.md @@ -1,5 +1,8 @@ --- title: 持久卷 +api_metadata: +- apiVersion: "v1" + kind: "PersistentVolume" feature: title: 存储编排 description: > @@ -15,6 +18,9 @@ reviewers: - msau42 - xing-yang title: Persistent Volumes +api_metadata: +- apiVersion: "v1" + kind: "PersistentVolume" feature: title: Storage orchestration description: > @@ -862,54 +868,71 @@ PV 持久卷是用插件的形式来实现的。Kubernetes 目前支持以下插 mounted on nodes. * [`nfs`](/docs/concepts/storage/volumes/#nfs) - Network File System (NFS) storage --> -* [`csi`](/zh-cn/docs/concepts/storage/volumes/#csi) - 容器存储接口 (CSI) -* [`fc`](/zh-cn/docs/concepts/storage/volumes/#fc) - Fibre Channel (FC) 存储 +* [`csi`](/zh-cn/docs/concepts/storage/volumes/#csi) - 容器存储接口(CSI) +* [`fc`](/zh-cn/docs/concepts/storage/volumes/#fc) - Fibre Channel(FC)存储 * [`hostPath`](/zh-cn/docs/concepts/storage/volumes/#hostpath) - HostPath 卷 (仅供单节点测试使用;不适用于多节点集群;请尝试使用 `local` 卷作为替代) -* [`iscsi`](/zh-cn/docs/concepts/storage/volumes/#iscsi) - iSCSI (SCSI over IP) 存储 +* [`iscsi`](/zh-cn/docs/concepts/storage/volumes/#iscsi) - iSCSI(IP 上的 SCSI)存储 * [`local`](/zh-cn/docs/concepts/storage/volumes/#local) - 节点上挂载的本地存储设备 -* [`nfs`](/zh-cn/docs/concepts/storage/volumes/#nfs) - 网络文件系统 (NFS) 存储 +* [`nfs`](/zh-cn/docs/concepts/storage/volumes/#nfs) - 网络文件系统(NFS)存储 -以下的持久卷已被弃用。这意味着当前仍是支持的,但是 Kubernetes 将来的发行版会将其移除。 +以下的持久卷已被弃用但仍然可用。 +如果你使用除 `flexVolume`、`cephfs` 和 `rbd` 之外的卷类型,请安装相应的 CSI 驱动程序。 -* [`azureFile`](/zh-cn/docs/concepts/storage/volumes/#azurefile) - Azure File - (于 v1.21 **弃用**) -* [`flexVolume`](/zh-cn/docs/concepts/storage/volumes/#flexVolume) - FlexVolume (于 v1.23 **弃用**) +* [`awsElasticBlockStore`](/docs/concepts/storage/volumes/#awselasticblockstore) - AWS Elastic 块存储(EBS) + (从 v1.23 开始**默认启用迁移**) +* [`azureDisk`](/docs/concepts/storage/volumes/#azuredisk) - Azure 磁盘 + (从 v1.23 开始**默认启用迁移**) +* [`azureFile`](/zh-cn/docs/concepts/storage/volumes/#azurefile) - Azure 文件 + (从 v1.24 开始**默认启用迁移**) +* [`cephfs`](/zh-cn/docs/concepts/storage/volumes/#cephfs) - CephFS 卷 + (从 v1.28 开始**弃用**,没有迁移计划,未来版本将移除支持) +* [`cinder`](/zh-cn/docs/concepts/storage/volumes/#cinder) - Cinder(OpenStack 块存储) + (从 v1.21 开始**默认启用迁移**) +* [`flexVolume`](/zh-cn/docs/concepts/storage/volumes/#flexVolume) - FlexVolume + (从 v1.23 开始**弃用**,没有迁移计划,没有移除支持的计划) +* [`gcePersistentDisk`](/docs/concepts/storage/volumes/#gcePersistentDisk) - GCE 持久磁盘 + (从 v1.23 开始**默认启用迁移**) * [`portworxVolume`](/zh-cn/docs/concepts/storage/volumes/#portworxvolume) - Portworx 卷 - (于 v1.25 **弃用**) + (从 v1.25 开始**弃用**) * [`vsphereVolume`](/zh-cn/docs/concepts/storage/volumes/#vspherevolume) - vSphere VMDK 卷 (于 v1.19 **弃用**) * [`cephfs`](/zh-cn/docs/concepts/storage/volumes/#cephfs) - CephFS 卷 (于 v1.28 **弃用**) -* [`rbd`](/zh-cn/docs/concepts/storage/volumes/#rbd) - Rados Block Device (RBD) 卷 - (于 v1.28 **弃用**) +* [`rbd`](/zh-cn/docs/concepts/storage/volumes/#rbd) - Rados Block Device(RBD)卷 + (从 v1.28 开始**弃用**,没有迁移计划,未来版本将移除支持) +* [`vsphereVolume`](/zh-cn/docs/concepts/storage/volumes/#vspherevolume) - vSphere VMDK 卷 + (从 v1.25 开始**默认启用迁移**) 旧版本的 Kubernetes 仍支持这些“树内(In-Tree)”持久卷类型: -* [`awsElasticBlockStore`](/zh-cn/docs/concepts/storage/volumes/#awselasticblockstore) - AWS Elastic Block Store (EBS) - (v1.27 开始**不可用**) -* [`azureDisk`](/zh-cn/docs/concepts/storage/volumes/#azuredisk) - Azure Disk - (v1.27 开始**不可用**) -* [`cinder`](/zh-cn/docs/concepts/storage/volumes/#cinder) - Cinder (OpenStack block storage) - (v1.27 开始**不可用**) * `photonPersistentDisk` - Photon 控制器持久化盘。(从 v1.15 版本开始将**不可用**) * `scaleIO` - ScaleIO 卷(v1.21 之后**不可用**) -* `flocker` - Flocker 存储 (v1.25 之后**不可用**) -* `quobyte` - Quobyte 卷 (v1.25 之后**不可用**) -* `storageos` - StorageOS 卷 (v1.25 之后**不可用**) +* `flocker` - Flocker 存储(v1.25 之后**不可用**) +* `quobyte` - Quobyte 卷(v1.25 之后**不可用**) +* `storageos` - StorageOS 卷(v1.25 之后**不可用**) 每个 PVC 对象都有 `spec` 和 `status` 部分,分别对应申领的规约和状态。 PersistentVolumeClaim 对象的名称必须是合法的 -[DNS 子域名](/zh-cn/docs/concepts/overview/working-with-objects/names#dns-subdomain-names). +[DNS 子域名](/zh-cn/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。 ```yaml apiVersion: v1 @@ -1574,7 +1591,7 @@ it won't be supported in a future Kubernetes release. -#### 可追溯的默认 StorageClass 赋值 {#retroactive-default-storageclass-assignment} +#### 可追溯的默认 StorageClass 赋值 {#retroactive-default-storageclass-assignment} {{< feature-state for_k8s_version="v1.28" state="stable" >}} @@ -1840,7 +1857,7 @@ Alpha 发行版本中仅支持静态制备的卷。 -## 对卷快照及从卷快照中恢复卷的支持 {#volume-snapshot-and-restore-volume-from-snapshot-support} +## 对卷快照及从卷快照中恢复卷的支持 {#volume-snapshot-and-restore-volume-from-snapshot-support} {{< feature-state for_k8s_version="v1.20" state="stable" >}} From 991862f0120ed2f73a288da00b111b4b1f709cf3 Mon Sep 17 00:00:00 2001 From: Sean McGinnis Date: Wed, 24 Apr 2024 08:17:32 -0500 Subject: [PATCH 0321/1086] Update documented metrics for v1.30 This updates the metrics documentation based on the generated metrics for the v1.30.0 release. Signed-off-by: Sean McGinnis --- .../docs/reference/instrumentation/metrics.md | 465 +++++++++++------- 1 file changed, 292 insertions(+), 173 deletions(-) diff --git a/content/en/docs/reference/instrumentation/metrics.md b/content/en/docs/reference/instrumentation/metrics.md index 0bc4338b60..502f1416dd 100644 --- a/content/en/docs/reference/instrumentation/metrics.md +++ b/content/en/docs/reference/instrumentation/metrics.md @@ -6,10 +6,10 @@ description: >- Details of the metric data that Kubernetes components export. --- -## Metrics (v1.29) +## Metrics (v1.30) - - + + This page details the metrics that different Kubernetes components export. You can query the metrics endpoint for these components using an HTTP scrape, and fetch the current metrics data in Prometheus format. @@ -53,20 +53,6 @@ Stable metrics observe strict API contracts and no labels can be added or remove
  • Gauge
  • componentgroupresourcescopesubresourceverbversion
  • -
    apiserver_request_duration_seconds
    -
    Response latency distribution in seconds for each verb, dry run value, group, version, resource, subresource, scope and component.
    -
      -
    • STABLE
    • -
    • Histogram
    • -
    • componentdry_rungroupresourcescopesubresourceverbversion
    -
    -
    apiserver_request_total
    -
    Counter of apiserver requests broken out for each verb, dry run value, group, version, resource, scope, component, and HTTP response code.
    -
      -
    • STABLE
    • -
    • Counter
    • -
    • codecomponentdry_rungroupresourcescopesubresourceverbversion
    -
    apiserver_requested_deprecated_apis
    Gauge of deprecated APIs that have been requested, broken out by API group, version, resource, subresource, and removed_release.
      @@ -82,12 +68,19 @@ Stable metrics observe strict API contracts and no labels can be added or remove
    • componentgroupresourcescopesubresourceverbversion
    apiserver_storage_objects
    -
    Number of stored objects at the time of last check split by kind.
    +
    Number of stored objects at the time of last check split by kind. In case of a fetching error, the value will be -1.
    • STABLE
    • Gauge
    • resource
    +
    apiserver_storage_size_bytes
    +
    Size of the storage database file physically allocated in bytes.
    +
      +
    • STABLE
    • +
    • Custom
    • +
    • storage_cluster_id
    +
    container_cpu_usage_seconds_total
    Cumulative cpu time consumed by the container in core-seconds
      @@ -158,6 +151,20 @@ Stable metrics observe strict API contracts and no labels can be added or remove
    • Custom
    • namespacepodnodeschedulerpriorityresourceunit
    +
    kubernetes_healthcheck
    +
    This metric records the result of a single healthcheck.
    +
      +
    • STABLE
    • +
    • Gauge
    • +
    • nametype
    +
    +
    kubernetes_healthchecks_total
    +
    This metric records the results of all healthcheck.
    +
      +
    • STABLE
    • +
    • Counter
    • +
    • namestatustype
    +
    node_collector_evictions_total
    Number of Node evictions that happened since current instance of NodeController started.
      @@ -226,7 +233,7 @@ Stable metrics observe strict API contracts and no labels can be added or remove
      • STABLE
      • Histogram
      • -
      • attempts
      • 1.28.0
      +
    • attempts
    • 1.29.0
    scheduler_preemption_attempts_total
    Total preemption attempts in the cluster till now
    @@ -340,20 +347,6 @@ Beta metrics observe a looser API contract than its stable counterparts. No labe
  • Gauge
  • namestage
  • -
    kubernetes_healthcheck
    -
    This metric records the result of a single healthcheck.
    -
      -
    • BETA
    • -
    • Gauge
    • -
    • nametype
    -
    -
    kubernetes_healthchecks_total
    -
    This metric records the results of all healthcheck.
    -
      -
    • BETA
    • -
    • Counter
    • -
    • namestatustype
    -
    registered_metrics_total
    The count of registered metrics broken by stability level and deprecation version.
      @@ -410,6 +403,13 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Counter
    • namereason
    +
    apiextensions_apiserver_validation_ratcheting_seconds
    +
    Time for comparison of old to new for the purposes of CRDValidationRatcheting during an UPDATE in seconds.
    +
      +
    • ALPHA
    • +
    • Histogram
    • +
    +
    apiextensions_openapi_v2_regeneration_count
    Counter of OpenAPI v2 spec regeneration count broken down by causing CRD name and reason.
      @@ -501,6 +501,76 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Counter
    +
    apiserver_authentication_config_controller_automatic_reload_last_timestamp_seconds
    +
    Timestamp of the last automatic reload of authentication configuration split by status and apiserver identity.
    +
      +
    • ALPHA
    • +
    • Gauge
    • +
    • apiserver_id_hashstatus
    +
    +
    apiserver_authentication_config_controller_automatic_reloads_total
    +
    Total number of automatic reloads of authentication configuration split by status and apiserver identity.
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • apiserver_id_hashstatus
    +
    +
    apiserver_authentication_jwt_authenticator_latency_seconds
    +
    Latency of jwt authentication operations in seconds. This is the time spent authenticating a token for cache miss only (i.e. when the token is not found in the cache).
    +
      +
    • ALPHA
    • +
    • Histogram
    • +
    • jwt_issuer_hashresult
    +
    +
    apiserver_authorization_decisions_total
    +
    Total number of terminal decisions made by an authorizer split by authorizer type, name, and decision.
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • decisionnametype
    +
    +
    apiserver_authorization_match_condition_evaluation_errors_total
    +
    Total number of errors when an authorization webhook encounters a match condition error split by authorizer type and name.
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • nametype
    +
    +
    apiserver_authorization_match_condition_evaluation_seconds
    +
    Authorization match condition evaluation time in seconds, split by authorizer type and name.
    +
      +
    • ALPHA
    • +
    • Histogram
    • +
    • nametype
    +
    +
    apiserver_authorization_match_condition_exclusions_total
    +
    Total number of exclusions when an authorization webhook is skipped because match conditions exclude it.
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • nametype
    +
    +
    apiserver_authorization_webhook_duration_seconds
    +
    Request latency in seconds.
    +
      +
    • ALPHA
    • +
    • Histogram
    • +
    • nameresult
    +
    +
    apiserver_authorization_webhook_evaluations_fail_open_total
    +
    NoOpinion results due to webhook timeout or error.
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • nameresult
    +
    +
    apiserver_authorization_webhook_evaluations_total
    +
    Round-trips to authorization webhooks.
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • nameresult
    +
    apiserver_cache_list_fetched_objects_total
    Number of objects read from watch cache in the course of serving a LIST request
      @@ -557,6 +627,20 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Histogram
    +
    apiserver_clusterip_repair_ip_errors_total
    +
    Number of errors detected on clusterips by the repair loop broken down by type of error: leak, repair, full, outOfRange, duplicate, unknown, invalid
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • type
    +
    +
    apiserver_clusterip_repair_reconcile_errors_total
    +
    Number of reconciliation failures on the clusterip repair reconcile loop
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    +
    apiserver_conversion_webhook_duration_seconds
    Conversion webhook request latency
      @@ -639,21 +723,14 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
      • ALPHA
      • Counter
      • -
      • apiserver_id_hash
      -
    -
    apiserver_encryption_config_controller_automatic_reload_last_timestamp_seconds
    -
    Timestamp of the last successful or failed automatic reload of encryption configuration split by apiserver identity.
    -
      -
    • ALPHA
    • -
    • Gauge
    • -
    • apiserver_id_hashstatus
    +
  • apiserver_id_hash
  • 1.30.0
  • apiserver_encryption_config_controller_automatic_reload_success_total
    Total number of successful automatic reloads of encryption configuration split by apiserver identity.
    • ALPHA
    • Counter
    • -
    • apiserver_id_hash
    +
  • apiserver_id_hash
  • 1.30.0
  • apiserver_envelope_encryption_dek_cache_fill_percent
    Percent of the cache slots currently occupied by cached DEKs.
    @@ -921,6 +998,13 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
  • Counter
  • +
    apiserver_nodeport_repair_port_errors_total
    +
    Number of errors detected on ports by the repair loop broken down by type of error: leak, repair, full, outOfRange, duplicate, unknown
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • type
    +
    apiserver_request_aborts_total
    Number of requests which apiserver aborted possibly due to a timeout, for each group, version, verb, resource, subresource and scope
      @@ -928,8 +1012,8 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Counter
    • groupresourcescopesubresourceverbversion
    -
    apiserver_request_body_sizes
    -
    Apiserver request body sizes broken out by size.
    +
    apiserver_request_body_size_bytes
    +
    Apiserver request body size in bytes broken out by resource and verb.
    • ALPHA
    • Histogram
    • @@ -1061,13 +1145,6 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Counter
    • resource
    -
    apiserver_storage_size_bytes
    -
    Size of the storage database file physically allocated in bytes.
    -
      -
    • ALPHA
    • -
    • Custom
    • -
    • cluster
    -
    apiserver_storage_transformation_duration_seconds
    Latencies in seconds of value transformation operations.
      @@ -1082,6 +1159,13 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Counter
    • statustransformation_typetransformer_prefix
    +
    apiserver_stream_translator_requests_total
    +
    Total number of requests that were handled by the StreamTranslatorProxy, which processes streaming RemoteCommand/V5
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • code
    +
    apiserver_terminated_watchers_total
    Counter of watchers closed due to unresponsiveness broken by resource type.
      @@ -1138,6 +1222,13 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Counter
    • resource
    +
    apiserver_watch_cache_read_wait_seconds
    +
    Histogram of time spent waiting for a watch cache to become fresh.
    +
      +
    • ALPHA
    • +
    • Histogram
    • +
    • resource
    +
    apiserver_watch_events_sizes
    Watch event size distribution in bytes
      @@ -1152,6 +1243,13 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Counter
    • groupkindversion
    +
    apiserver_watch_list_duration_seconds
    +
    Response latency distribution in seconds for watch list requests broken by group, version, resource and scope.
    +
      +
    • ALPHA
    • +
    • Histogram
    • +
    • groupresourcescopeversion
    +
    apiserver_webhooks_x509_insecure_sha1_total
    Counts the number of requests to servers with insecure SHA1 signatures in their serving certificate OR the number of connection failures due to the insecure SHA1 signatures (either/or, based on the runtime environment)
      @@ -1257,48 +1355,6 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Counter
    • codewebhook
    -
    cloudprovider_azure_api_request_duration_seconds
    -
    Latency of an Azure API call
    -
      -
    • ALPHA
    • -
    • Histogram
    • -
    • requestresource_groupsourcesubscription_id
    -
    -
    cloudprovider_azure_api_request_errors
    -
    Number of errors for an Azure API call
    -
      -
    • ALPHA
    • -
    • Counter
    • -
    • requestresource_groupsourcesubscription_id
    -
    -
    cloudprovider_azure_api_request_ratelimited_count
    -
    Number of rate limited Azure API calls
    -
      -
    • ALPHA
    • -
    • Counter
    • -
    • requestresource_groupsourcesubscription_id
    -
    -
    cloudprovider_azure_api_request_throttled_count
    -
    Number of throttled Azure API calls
    -
      -
    • ALPHA
    • -
    • Counter
    • -
    • requestresource_groupsourcesubscription_id
    -
    -
    cloudprovider_azure_op_duration_seconds
    -
    Latency of an Azure service operation
    -
      -
    • ALPHA
    • -
    • Histogram
    • -
    • requestresource_groupsourcesubscription_id
    -
    -
    cloudprovider_azure_op_failure_count
    -
    Number of failed Azure service operations
    -
      -
    • ALPHA
    • -
    • Counter
    • -
    • requestresource_groupsourcesubscription_id
    -
    cloudprovider_gce_api_request_duration_seconds
    Latency of a GCE API call
      @@ -1313,41 +1369,6 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Counter
    • regionrequestversionzone
    -
    cloudprovider_vsphere_api_request_duration_seconds
    -
    Latency of vsphere api call
    -
      -
    • ALPHA
    • -
    • Histogram
    • -
    • request
    -
    -
    cloudprovider_vsphere_api_request_errors
    -
    vsphere Api errors
    -
      -
    • ALPHA
    • -
    • Counter
    • -
    • request
    -
    -
    cloudprovider_vsphere_operation_duration_seconds
    -
    Latency of vsphere operation call
    -
      -
    • ALPHA
    • -
    • Histogram
    • -
    • operation
    -
    -
    cloudprovider_vsphere_operation_errors
    -
    vsphere operation errors
    -
      -
    • ALPHA
    • -
    • Counter
    • -
    • operation
    -
    -
    cloudprovider_vsphere_vcenter_versions
    -
    Versions for connected vSphere vCenters
    -
      -
    • ALPHA
    • -
    • Custom
    • -
    • hostnameversionbuild
    -
    container_swap_usage_bytes
    Current amount of the container swap usage in bytes. Reported only on non-windows systems
      @@ -1402,7 +1423,7 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
      • ALPHA
      • Histogram
      • -
      • topology
      +
    • topologytraffic_distribution
    endpoint_slice_controller_num_endpoint_slices
    Number of EndpointSlices
    @@ -1411,6 +1432,13 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
  • Gauge
  • +
    endpoint_slice_controller_services_count_by_traffic_distribution
    +
    Number of Services using some specific trafficDistribution
    +
      +
    • ALPHA
    • +
    • Gauge
    • +
    • traffic_distribution
    +
    endpoint_slice_controller_syncs
    Number of EndpointSlice syncs
      @@ -1607,6 +1635,27 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Counter
    • actionerror
    +
    job_controller_job_finished_indexes_total
    +
    `The number of finished indexes. Possible values for the, status label are: "succeeded", "failed". Possible values for the, backoffLimit label are: "perIndex" and "global"`
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • backoffLimitstatus
    +
    +
    job_controller_job_pods_creation_total
    +
    `The number of Pods created by the Job controller labelled with a reason for the Pod creation., This metric also distinguishes between Pods created using different PodReplacementPolicy settings., Possible values of the "reason" label are:, "new", "recreate_terminating_or_failed", "recreate_failed"., Possible values of the "status" label are:, "succeeded", "failed".`
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • reasonstatus
    +
    +
    job_controller_jobs_by_external_controller_total
    +
    The number of Jobs managed by an external controller
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • controller_name
    +
    job_controller_pod_failures_handled_by_failure_policy_total
    `The number of failed Pods handled by failure policy with, respect to the failure policy action applied based on the matched, rule. Possible values of the action label correspond to the, possible values for the failure policy rule action, which are:, "FailJob", "Ignore" and "Count".`
      @@ -1866,6 +1915,20 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Counter
    • long_runningmethodpathserver_type
    +
    kubelet_image_garbage_collected_total
    +
    Total number of images garbage collected by the kubelet, whether through disk usage or image age.
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • reason
    +
    +
    kubelet_image_pull_duration_seconds
    +
    Duration in seconds to pull an image.
    +
      +
    • ALPHA
    • +
    • Histogram
    • +
    • image_size_in_bytes
    +
    kubelet_lifecycle_handler_http_fallbacks_total
    The number of times lifecycle handlers successfully fell back to http from https.
      @@ -1880,6 +1943,20 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Gauge
    +
    kubelet_memory_manager_pinning_errors_total
    +
    The number of memory pages allocations which required pinning that failed.
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    +
    +
    kubelet_memory_manager_pinning_requests_total
    +
    The number of memory pages allocations which required pinning.
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    +
    kubelet_mirror_pods
    The number of mirror pods the kubelet will try to create (one per admitted static pod)
      @@ -1894,6 +1971,41 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Gauge
    • node
    +
    kubelet_node_startup_duration_seconds
    +
    Duration in seconds of node startup in total.
    +
      +
    • ALPHA
    • +
    • Gauge
    • +
    +
    +
    kubelet_node_startup_post_registration_duration_seconds
    +
    Duration in seconds of node startup after registration.
    +
      +
    • ALPHA
    • +
    • Gauge
    • +
    +
    +
    kubelet_node_startup_pre_kubelet_duration_seconds
    +
    Duration in seconds of node startup before kubelet starts.
    +
      +
    • ALPHA
    • +
    • Gauge
    • +
    +
    +
    kubelet_node_startup_pre_registration_duration_seconds
    +
    Duration in seconds of node startup before registration.
    +
      +
    • ALPHA
    • +
    • Gauge
    • +
    +
    +
    kubelet_node_startup_registration_duration_seconds
    +
    Duration in seconds of node startup during registration.
    +
      +
    • ALPHA
    • +
    • Gauge
    • +
    +
    kubelet_orphan_pod_cleaned_volumes
    The total number of orphaned Pods whose volumes were cleaned in the last periodic sweep.
      @@ -2006,6 +2118,13 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Histogram
    +
    kubelet_pod_start_total_duration_seconds
    +
    Duration in seconds to start a pod since creation, including time to pull images and run init containers, measured from pod creation timestamp to when all its containers are reported as started and observed via watch
    +
      +
    • ALPHA
    • +
    • Histogram
    • +
    +
    kubelet_pod_status_sync_duration_seconds
    Duration in seconds to sync a pod status update. Measures time from detection of a change to pod status until the API is successfully updated for that pod, even if multiple intevening changes to pod status occur.
      @@ -2097,6 +2216,13 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Counter
    +
    kubelet_sleep_action_terminated_early_total
    +
    The number of times lifecycle sleep handler got terminated before it finishes
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    +
    kubelet_started_containers_errors_total
    Cumulative number of errors when starting containers
      @@ -2356,6 +2482,13 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Gauge
    • name
    +
    leader_election_slowpath_total
    +
    Total number of slow path exercised in renewing leader leases. 'name' is the string used to identify the lease. Please make sure to group by name.
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    • name
    +
    node_authorizer_graph_actions_duration_seconds
    Histogram of duration of graph actions in node authorizer.
      @@ -2447,41 +2580,6 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Gauge
    • clusterCIDR
    -
    node_ipam_controller_multicidrset_allocation_tries_per_request
    -
    Histogram measuring CIDR allocation tries per request.
    -
      -
    • ALPHA
    • -
    • Histogram
    • -
    • clusterCIDR
    -
    -
    node_ipam_controller_multicidrset_cidrs_allocations_total
    -
    Counter measuring total number of CIDR allocations.
    -
      -
    • ALPHA
    • -
    • Counter
    • -
    • clusterCIDR
    -
    -
    node_ipam_controller_multicidrset_cidrs_releases_total
    -
    Counter measuring total number of CIDR releases.
    -
      -
    • ALPHA
    • -
    • Counter
    • -
    • clusterCIDR
    -
    -
    node_ipam_controller_multicidrset_usage_cidrs
    -
    Gauge measuring percentage of allocated CIDRs.
    -
      -
    • ALPHA
    • -
    • Gauge
    • -
    • clusterCIDR
    -
    -
    node_ipam_controller_multicirdset_max_cidrs
    -
    Maximum number of CIDRs that can be allocated.
    -
      -
    • ALPHA
    • -
    • Gauge
    • -
    • clusterCIDR
    -
    node_swap_usage_bytes
    Current swap usage of the node in bytes. Reported only on non-windows systems
      @@ -2609,7 +2707,7 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    replicaset_controller_sorting_deletion_age_ratio
    -
    The ratio of chosen deleted pod's ages to the current youngest pod's age (at the time). Should be <2.The intent of this metric is to measure the rough efficacy of the LogarithmicScaleDown feature gate's effect onthe sorting (and deletion) of pods when a replicaset scales down. This only considers Ready pods when calculating and reporting.
    +
    The ratio of chosen deleted pod's ages to the current youngest pod's age (at the time). Should be <2. The intent of this metric is to measure the rough efficacy of the LogarithmicScaleDown feature gate's effect on the sorting (and deletion) of pods when a replicaset scales down. This only considers Ready pods when calculating and reporting.
    • ALPHA
    • Histogram
    • @@ -2763,7 +2861,7 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • result
    scheduler_plugin_evaluation_total
    -
    Number of attempts to schedule pods by each plugin and the extension point (available only in PreFilter and Filter.).
    +
    Number of attempts to schedule pods by each plugin and the extension point (available only in PreFilter, Filter, PreScore, and Score).
    • ALPHA
    • Counter
    • @@ -2846,6 +2944,13 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Histogram
    +
    serviceaccount_invalid_legacy_auto_token_uses_total
    +
    Cumulative invalid auto-generated legacy tokens used
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    +
    serviceaccount_legacy_auto_token_uses_total
    Cumulative auto-generated legacy tokens used
      @@ -2895,6 +3000,20 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
    • Histogram
    • migratedoperation_namestatusvolume_plugin
    +
    taint_eviction_controller_pod_deletion_duration_seconds
    +
    Latency, in seconds, between the time when a taint effect has been activated for the Pod and its deletion via TaintEvictionController.
    +
      +
    • ALPHA
    • +
    • Histogram
    • +
    +
    +
    taint_eviction_controller_pod_deletions_total
    +
    Total number of Pods deleted by TaintEvictionController since its start.
    +
      +
    • ALPHA
    • +
    • Counter
    • +
    +
    ttl_after_finished_controller_job_deletion_duration_seconds
    The time it took to delete the job since it became eligible for deletion
      @@ -2907,49 +3026,49 @@ Alpha metrics do not have any API guarantees. These metrics must be used at your
      • ALPHA
      • Gauge
      • -
      +
    • access_mode
    volume_manager_selinux_container_warnings_total
    Number of errors when kubelet cannot compute SELinux context for a container that are ignored. They will become real errors when SELinuxMountReadWriteOncePod feature is expanded to all volume access modes.
    • ALPHA
    • Gauge
    • -
    +
  • access_mode
  • volume_manager_selinux_pod_context_mismatch_errors_total
    Number of errors when a Pod defines different SELinux contexts for its containers that use the same volume. Kubelet can't start such a Pod then and it will retry, therefore value of this metric may not represent the actual nr. of Pods.
    • ALPHA
    • Gauge
    • -
    +
  • access_mode
  • volume_manager_selinux_pod_context_mismatch_warnings_total
    Number of errors when a Pod defines different SELinux contexts for its containers that use the same volume. They are not errors yet, but they will become real errors when SELinuxMountReadWriteOncePod feature is expanded to all volume access modes.
    • ALPHA
    • Gauge
    • -
    +
  • access_mode
  • volume_manager_selinux_volume_context_mismatch_errors_total
    Number of errors when a Pod uses a volume that is already mounted with a different SELinux context than the Pod needs. Kubelet can't start such a Pod then and it will retry, therefore value of this metric may not represent the actual nr. of Pods.
    • ALPHA
    • Gauge
    • -
    +
  • access_modevolume_plugin
  • volume_manager_selinux_volume_context_mismatch_warnings_total
    Number of errors when a Pod uses a volume that is already mounted with a different SELinux context than the Pod needs. They are not errors yet, but they will become real errors when SELinuxMountReadWriteOncePod feature is expanded to all volume access modes.
    • ALPHA
    • Gauge
    • -
    +
  • access_modevolume_plugin
  • volume_manager_selinux_volumes_admitted_total
    Number of volumes whose SELinux context was fine and will be mounted with mount -o context option.
    • ALPHA
    • Gauge
    • -
    +
  • access_modevolume_plugin
  • volume_manager_total_volumes
    Number of volumes in Volume Manager
    From 7ffa664bd17f954476bb2c189ed91d4ed798887b Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Wed, 24 Apr 2024 14:28:30 +0100 Subject: [PATCH 0322/1086] Add missing check-required-ports anchor Small fix for adding a missing check-required-ports anchor --- .../production-environment/tools/kubeadm/install-kubeadm.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md b/content/en/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md index 59b4c8be17..a6b98847e4 100644 --- a/content/en/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md +++ b/content/en/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md @@ -58,7 +58,7 @@ may [fail](https://github.com/kubernetes/kubeadm/issues/31). If you have more than one network adapter, and your Kubernetes components are not reachable on the default route, we recommend you add IP route(s) so Kubernetes cluster addresses go via the appropriate adapter. -## Check required ports +## Check required ports {#check-required-ports} These [required ports](/docs/reference/networking/ports-and-protocols/) need to be open in order for Kubernetes components to communicate with each other. From 4e973d44ba65e0166e87d9c1c9eff603da2e5ab6 Mon Sep 17 00:00:00 2001 From: steve-hardman <132999137+steve-hardman@users.noreply.github.com> Date: Thu, 25 Apr 2024 01:16:00 +0100 Subject: [PATCH 0323/1086] Update common-labels.md --- .../overview/working-with-objects/common-labels.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/en/docs/concepts/overview/working-with-objects/common-labels.md b/content/en/docs/concepts/overview/working-with-objects/common-labels.md index c6bda86afe..842030de0e 100644 --- a/content/en/docs/concepts/overview/working-with-objects/common-labels.md +++ b/content/en/docs/concepts/overview/working-with-objects/common-labels.md @@ -40,7 +40,7 @@ on every resource object. | `app.kubernetes.io/version` | The current version of the application (e.g., a [SemVer 1.0](https://semver.org/spec/v1.0.0.html), revision hash, etc.) | `5.7.21` | string | | `app.kubernetes.io/component` | The component within the architecture | `database` | string | | `app.kubernetes.io/part-of` | The name of a higher level application this one is part of | `wordpress` | string | -| `app.kubernetes.io/managed-by` | The tool being used to manage the operation of an application | `helm` | string | +| `app.kubernetes.io/managed-by` | The tool being used to manage the operation of an application | `Helm` | string | To illustrate these labels in action, consider the following {{< glossary_tooltip text="StatefulSet" term_id="statefulset" >}} object: @@ -55,7 +55,7 @@ metadata: app.kubernetes.io/version: "5.7.21" app.kubernetes.io/component: database app.kubernetes.io/part-of: wordpress - app.kubernetes.io/managed-by: helm + app.kubernetes.io/managed-by: Helm ``` ## Applications And Instances Of Applications @@ -116,7 +116,7 @@ metadata: app.kubernetes.io/name: wordpress app.kubernetes.io/instance: wordpress-abcxzy app.kubernetes.io/version: "4.9.4" - app.kubernetes.io/managed-by: helm + app.kubernetes.io/managed-by: Helm app.kubernetes.io/component: server app.kubernetes.io/part-of: wordpress ... @@ -132,7 +132,7 @@ metadata: app.kubernetes.io/name: wordpress app.kubernetes.io/instance: wordpress-abcxzy app.kubernetes.io/version: "4.9.4" - app.kubernetes.io/managed-by: helm + app.kubernetes.io/managed-by: Helm app.kubernetes.io/component: server app.kubernetes.io/part-of: wordpress ... @@ -148,7 +148,7 @@ metadata: app.kubernetes.io/name: mysql app.kubernetes.io/instance: mysql-abcxzy app.kubernetes.io/version: "5.7.21" - app.kubernetes.io/managed-by: helm + app.kubernetes.io/managed-by: Helm app.kubernetes.io/component: database app.kubernetes.io/part-of: wordpress ... @@ -164,7 +164,7 @@ metadata: app.kubernetes.io/name: mysql app.kubernetes.io/instance: mysql-abcxzy app.kubernetes.io/version: "5.7.21" - app.kubernetes.io/managed-by: helm + app.kubernetes.io/managed-by: Helm app.kubernetes.io/component: database app.kubernetes.io/part-of: wordpress ... From 130f22cbfb8830ea671522f6be44c4d6de962301 Mon Sep 17 00:00:00 2001 From: niranjandarshann Date: Thu, 25 Apr 2024 14:17:57 +0530 Subject: [PATCH 0324/1086] updated the k8s training partner with valid link --- content/hi/training/_index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/hi/training/_index.html b/content/hi/training/_index.html index 0223d0ce38..2d0416d3df 100644 --- a/content/hi/training/_index.html +++ b/content/hi/training/_index.html @@ -149,6 +149,6 @@ class: training
    - {{< cncf-landscape helpers=false category="kubernetes-training-partner" >}} + {{< cncf-landscape helpers=false category="special--kubernetes-training-partner" >}}
    From 03d85fb8b8982e992dd24a2b3fd0169f6bc534bd Mon Sep 17 00:00:00 2001 From: xin gu <418294249@qq.com> Date: Wed, 24 Apr 2024 20:53:22 +0800 Subject: [PATCH 0325/1086] sync resize-container-resources user-namespaces --- .../resize-container-resources.md | 26 ++++++++++++++++--- .../user-namespaces.md | 9 +++---- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/content/zh-cn/docs/tasks/configure-pod-container/resize-container-resources.md b/content/zh-cn/docs/tasks/configure-pod-container/resize-container-resources.md index 8eaa836506..b8ade17e97 100644 --- a/content/zh-cn/docs/tasks/configure-pod-container/resize-container-resources.md +++ b/content/zh-cn/docs/tasks/configure-pod-container/resize-container-resources.md @@ -13,7 +13,7 @@ min-kubernetes-server-version: 1.27 -{{< feature-state state="alpha" for_k8s_version="v1.27" >}} +{{< feature-state feature_gate_name="InPlacePodVerticalScaling" >}} +要为正在运行的 Pod 更改资源分配量,需要启用 `InPlacePodVerticalScaling` +[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)。 +并让[工作负载控制器](/zh-cn/docs/concepts/workloads/controllers/)创建一个具有不同资源需求的新 Pod。 + +你必须在控制平面和集群中的所有节点上启用 `InPlacePodVerticalScaling` +[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)。 + ## 更新 Pod 的资源 {#updating-pod-resources} -假设要求的 CPU 需求已上升,现在需要 0.8 CPU。这通常由 +假设要求的 CPU 需求已上升,现在需要 0.8 CPU。这可以手动指定,或由如 [VerticalPodAutoscaler](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler#readme) (VPA) 这样的实体确定并可能以编程方式应用。 diff --git a/content/zh-cn/docs/tasks/configure-pod-container/user-namespaces.md b/content/zh-cn/docs/tasks/configure-pod-container/user-namespaces.md index 15ffaf0b6f..1a8ec44f1e 100644 --- a/content/zh-cn/docs/tasks/configure-pod-container/user-namespaces.md +++ b/content/zh-cn/docs/tasks/configure-pod-container/user-namespaces.md @@ -15,14 +15,13 @@ min-kubernetes-server-version: v1.25 --> -{{< feature-state for_k8s_version="v1.25" state="beta" >}} +{{< feature-state feature_gate_name="UserNamespacesSupport" >}} -本页展示如何为无状态 Pod 配置 user 名字空间。可以将容器内的用户与主机上的用户隔离开来。 +本页展示如何为 Pod 配置 user 名字空间。可以将容器内的用户与主机上的用户隔离开来。 -Kubernetes {{< skew currentVersion >}} 支持用于集群联网的[容器网络接口](https://github.com/containernetworking/cni) (CNI) 插件。 +Kubernetes {{< skew currentVersion >}} 支持用于集群联网的[容器网络接口](https://github.com/containernetworking/cni)(CNI)插件。 你必须使用和你的集群相兼容并且满足你的需求的 CNI 插件。 在更广泛的 Kubernetes 生态系统中你可以使用不同的插件(开源和闭源)。 @@ -97,35 +97,6 @@ that plugin or [networking provider](/docs/concepts/cluster-administration/netwo -## 网络插件要求 {#network-plugin-requirements} - -对于插件开发人员以及时常会构建并部署 Kubernetes 的用户而言, -插件可能也需要特定的配置来支持 kube-proxy。 -iptables 代理依赖于 iptables,插件可能需要确保 iptables 能够监控容器的网络通信。 -例如,如果插件将容器连接到 Linux 网桥,插件必须将 `net/bridge/bridge-nf-call-iptables` -sysctl 参数设置为 `1`,以确保 iptables 代理正常工作。 -如果插件不使用 Linux 网桥,而是使用类似于 Open vSwitch 或者其它一些机制, -它应该确保为代理对容器通信执行正确的路由。 - - -默认情况下,如果未指定 kubelet 网络插件,则使用 `noop` 插件, -该插件设置 `net/bridge/bridge-nf-call-iptables=1`,以确保简单的配置 -(如带网桥的 Docker)与 iptables 代理正常工作。 - - +## 网络插件要求 {#network-plugin-requirements} + ### 本地回路 CNI {#loopback-cni} 除了安装到节点上用于实现 Kubernetes 网络模型的 CNI 插件外,Kubernetes @@ -218,7 +191,7 @@ CNI 网络插件还支持 Pod 入站和出站流量整形。 如果你想要启用流量整形支持,你必须将 `bandwidth` 插件添加到 CNI 配置文件 (默认是 `/etc/cni/net.d`)并保证该可执行文件包含在你的 CNI 的 bin -文件夹内 (默认为 `/opt/cni/bin`)。 +文件夹内(默认为 `/opt/cni/bin`)。 ```json { diff --git a/content/zh-cn/docs/concepts/overview/working-with-objects/field-selectors.md b/content/zh-cn/docs/concepts/overview/working-with-objects/field-selectors.md index 2832b74e89..cb61e401c4 100644 --- a/content/zh-cn/docs/concepts/overview/working-with-objects/field-selectors.md +++ b/content/zh-cn/docs/concepts/overview/working-with-objects/field-selectors.md @@ -64,6 +64,25 @@ kubectl get ingress --field-selector foo.bar=baz Error from server (BadRequest): Unable to find "ingresses" that match label selector "", field selector "foo.bar=baz": "foo.bar" is not a known field selector: only "metadata.name", "metadata.namespace" ``` + +### 支持字段列表 + +| 类别 | 字段 | +| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Pod | `spec.nodeName`
    `spec.restartPolicy`
    `spec.schedulerName`
    `spec.serviceAccountName`
    `spec.hostNetwork`
    `status.phase`
    `status.podIP`
    `status.nominatedNodeName` | +| Event | `involvedObject.kind`
    `involvedObject.namespace`
    `involvedObject.name`
    `involvedObject.uid`
    `involvedObject.apiVersion`
    `involvedObject.resourceVersion`
    `involvedObject.fieldPath`
    `reason`
    `reportingComponent`
    `source`
    `type` | +| Secret | `type` | +| Namespace | `status.phase` | +| ReplicaSet | `status.replicas` | +| ReplicationController | `status.replicas` | +| Job | `status.successful` | +| Node | `spec.unschedulable` | +| CertificateSigningRequest | `spec.signerName` | + ## 支持的操作符 {#supported-operators} -你可在字段选择器中使用 `=`、`==` 和 `!=` (`=` 和 `==` 的意义是相同的)操作符。 +你可在字段选择器中使用 `=`、`==` 和 `!=`(`=` 和 `==` 的意义是相同的)操作符。 例如,下面这个 `kubectl` 命令将筛选所有不属于 `default` 命名空间的 Kubernetes 服务: ```shell diff --git a/content/zh-cn/docs/concepts/workloads/controllers/replicaset.md b/content/zh-cn/docs/concepts/workloads/controllers/replicaset.md index 56030c60da..e7c91457e6 100644 --- a/content/zh-cn/docs/concepts/workloads/controllers/replicaset.md +++ b/content/zh-cn/docs/concepts/workloads/controllers/replicaset.md @@ -1,5 +1,8 @@ --- title: ReplicaSet +api_metadata: +- apiVersion: "apps/v1" + kind: "ReplicaSet" feature: title: 自我修复 anchor: ReplicationController 如何工作 @@ -20,6 +23,9 @@ reviewers: - bprashanth - madhusudancs title: ReplicaSet +api_metadata: +- apiVersion: "apps/v1" + kind: "ReplicaSet" feature: title: Self-healing anchor: How a ReplicaSet works @@ -165,15 +171,14 @@ Namespace: default Selector: tier=frontend Labels: app=guestbook tier=frontend -Annotations: kubectl.kubernetes.io/last-applied-configuration: - {"apiVersion":"apps/v1","kind":"ReplicaSet","metadata":{"annotations":{},"labels":{"app":"guestbook","tier":"frontend"},"name":"frontend",... +Annotations: Replicas: 3 current / 3 desired Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed Pod Template: Labels: tier=frontend Containers: php-redis: - Image: gcr.io/google_samples/gb-frontend:v3 + Image: us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5 Port: Host Port: Environment: @@ -182,9 +187,9 @@ Pod Template: Events: Type Reason Age From Message ---- ------ ---- ---- ------- - Normal SuccessfulCreate 117s replicaset-controller Created pod: frontend-wtsmm - Normal SuccessfulCreate 116s replicaset-controller Created pod: frontend-b2zdv - Normal SuccessfulCreate 116s replicaset-controller Created pod: frontend-vcmts + Normal SuccessfulCreate 13s replicaset-controller Created pod: frontend-gbgfx + Normal SuccessfulCreate 13s replicaset-controller Created pod: frontend-rwz57 + Normal SuccessfulCreate 13s replicaset-controller Created pod: frontend-wkl7w ``` * 给定 Pod 的存储必须由 - [PersistentVolume Provisioner](https://github.com/kubernetes/examples/tree/master/staging/persistent-volume-provisioning/README.md) - 基于所请求的 `storage class` 来制备,或者由管理员预先制备。 + [PersistentVolume Provisioner](/zh-cn/docs/concepts/storage/dynamic-provisioning/) + ([例子在这里](https://github.com/kubernetes/examples/tree/master/staging/persistent-volume-provisioning/README.md)) + 基于所请求的 **storage class** 来制备,或者由管理员预先制备。 * 删除或者扩缩 StatefulSet 并**不会**删除它关联的存储卷。 这样做是为了保证数据安全,它通常比自动清除 StatefulSet 所有相关的资源更有价值。 * StatefulSet 当前需要[无头服务](/zh-cn/docs/concepts/services-networking/service/#headless-services)来负责 Pod @@ -222,15 +223,24 @@ validation error during StatefulSet creation. ### 卷申领模板 {#volume-claim-templates} -你可以设置 `.spec.volumeClaimTemplates`, -它可以使用 PersistentVolume 制备程序所准备的 -[PersistentVolumes](/zh-cn/docs/concepts/storage/persistent-volumes/) 来提供稳定的存储。 +你可以设置 `.spec.volumeClaimTemplates` 字段来创建 +[PersistentVolumeClaim](/zh-cn/docs/concepts/storage/persistent-volumes/)。 +这将为 StatefulSet 提供稳定的存储,如果: + + +* 为卷申领指定的 StorageClass 配置使用[动态制备](/zh-cn/docs/concepts/storage/dynamic-provisioning/),或 +* 集群已包含具有正确 StorageClass 和足够可用存储空间的 PersistentVolume。 +In a Kubernetes cluster, a {{< glossary_tooltip text="node" term_id="node" >}} +can be shutdown in a planned graceful way or unexpectedly because of reasons such +as a power outage or something else external. A node shutdown could lead to workload +failure if the node is not drained before the shutdown. A node shutdown can be +either **graceful** or **non-graceful**. + + +## Graceful node shutdown {#graceful-node-shutdown} + +{{< feature-state feature_gate_name="GracefulNodeShutdown" >}} + +The kubelet attempts to detect node system shutdown and terminates pods running on the node. + +Kubelet ensures that pods follow the normal +[pod termination process](/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination) +during the node shutdown. During node shutdown, the kubelet does not accept new +Pods (even if those Pods are already bound to the node). + +The Graceful node shutdown feature depends on systemd since it takes advantage of +[systemd inhibitor locks](https://www.freedesktop.org/wiki/Software/systemd/inhibit/) to +delay the node shutdown with a given duration. + +Graceful node shutdown is controlled with the `GracefulNodeShutdown` +[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) which is +enabled by default in 1.21. + +Note that by default, both configuration options described below, +`shutdownGracePeriod` and `shutdownGracePeriodCriticalPods` are set to zero, +thus not activating the graceful node shutdown functionality. +To activate the feature, the two kubelet config settings should be configured appropriately and +set to non-zero values. + +Once systemd detects or notifies node shutdown, the kubelet sets a `NotReady` condition on +the Node, with the `reason` set to `"node is shutting down"`. The kube-scheduler honors this condition +and does not schedule any Pods onto the affected node; other third-party schedulers are +expected to follow the same logic. This means that new Pods won't be scheduled onto that node +and therefore none will start. + +The kubelet **also** rejects Pods during the `PodAdmission` phase if an ongoing +node shutdown has been detected, so that even Pods with a +{{< glossary_tooltip text="toleration" term_id="toleration" >}} for +`node.kubernetes.io/not-ready:NoSchedule` do not start there. + +At the same time when kubelet is setting that condition on its Node via the API, +the kubelet also begins terminating any Pods that are running locally. + +During a graceful shutdown, kubelet terminates pods in two phases: + +1. Terminate regular pods running on the node. +2. Terminate [critical pods](/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical) + running on the node. + +Graceful node shutdown feature is configured with two +[`KubeletConfiguration`](/docs/tasks/administer-cluster/kubelet-config-file/) options: + +* `shutdownGracePeriod`: + * Specifies the total duration that the node should delay the shutdown by. This is the total + grace period for pod termination for both regular and + [critical pods](/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical). +* `shutdownGracePeriodCriticalPods`: + * Specifies the duration used to terminate + [critical pods](/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical) + during a node shutdown. This value should be less than `shutdownGracePeriod`. + +{{< note >}} + +There are cases when Node termination was cancelled by the system (or perhaps manually +by an administrator). In either of those situations the Node will return to the `Ready` state. +However, Pods which already started the process of termination will not be restored by kubelet +and will need to be re-scheduled. + +{{< /note >}} + +For example, if `shutdownGracePeriod=30s`, and +`shutdownGracePeriodCriticalPods=10s`, kubelet will delay the node shutdown by +30 seconds. During the shutdown, the first 20 (30-10) seconds would be reserved +for gracefully terminating normal pods, and the last 10 seconds would be +reserved for terminating [critical pods](/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical). + +{{< note >}} +When pods were evicted during the graceful node shutdown, they are marked as shutdown. +Running `kubectl get pods` shows the status of the evicted pods as `Terminated`. +And `kubectl describe pod` indicates that the pod was evicted because of node shutdown: + +``` +Reason: Terminated +Message: Pod was terminated in response to imminent node shutdown. +``` + +{{< /note >}} + +### Pod Priority based graceful node shutdown {#pod-priority-graceful-node-shutdown} + +{{< feature-state feature_gate_name="GracefulNodeShutdownBasedOnPodPriority" >}} + +To provide more flexibility during graceful node shutdown around the ordering +of pods during shutdown, graceful node shutdown honors the PriorityClass for +Pods, provided that you enabled this feature in your cluster. The feature +allows cluster administers to explicitly define the ordering of pods +during graceful node shutdown based on +[priority classes](/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass). + +The [Graceful Node Shutdown](#graceful-node-shutdown) feature, as described +above, shuts down pods in two phases, non-critical pods, followed by critical +pods. If additional flexibility is needed to explicitly define the ordering of +pods during shutdown in a more granular way, pod priority based graceful +shutdown can be used. + +When graceful node shutdown honors pod priorities, this makes it possible to do +graceful node shutdown in multiple phases, each phase shutting down a +particular priority class of pods. The kubelet can be configured with the exact +phases and shutdown time per phase. + +Assuming the following custom pod +[priority classes](/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass) +in a cluster, + +|Pod priority class name|Pod priority class value| +|-------------------------|------------------------| +|`custom-class-a` | 100000 | +|`custom-class-b` | 10000 | +|`custom-class-c` | 1000 | +|`regular/unset` | 0 | + +Within the [kubelet configuration](/docs/reference/config-api/kubelet-config.v1beta1/) +the settings for `shutdownGracePeriodByPodPriority` could look like: + +|Pod priority class value|Shutdown period| +|------------------------|---------------| +| 100000 |10 seconds | +| 10000 |180 seconds | +| 1000 |120 seconds | +| 0 |60 seconds | + +The corresponding kubelet config YAML configuration would be: + +```yaml +shutdownGracePeriodByPodPriority: + - priority: 100000 + shutdownGracePeriodSeconds: 10 + - priority: 10000 + shutdownGracePeriodSeconds: 180 + - priority: 1000 + shutdownGracePeriodSeconds: 120 + - priority: 0 + shutdownGracePeriodSeconds: 60 +``` + +The above table implies that any pod with `priority` value >= 100000 will get +just 10 seconds to stop, any pod with value >= 10000 and < 100000 will get 180 +seconds to stop, any pod with value >= 1000 and < 10000 will get 120 seconds to stop. +Finally, all other pods will get 60 seconds to stop. + +One doesn't have to specify values corresponding to all of the classes. For +example, you could instead use these settings: + +|Pod priority class value|Shutdown period| +|------------------------|---------------| +| 100000 |300 seconds | +| 1000 |120 seconds | +| 0 |60 seconds | + +In the above case, the pods with `custom-class-b` will go into the same bucket +as `custom-class-c` for shutdown. + +If there are no pods in a particular range, then the kubelet does not wait +for pods in that priority range. Instead, the kubelet immediately skips to the +next priority class value range. + +If this feature is enabled and no configuration is provided, then no ordering +action will be taken. + +Using this feature requires enabling the `GracefulNodeShutdownBasedOnPodPriority` +[feature gate](/docs/reference/command-line-tools-reference/feature-gates/), +and setting `ShutdownGracePeriodByPodPriority` in the +[kubelet config](/docs/reference/config-api/kubelet-config.v1beta1/) +to the desired configuration containing the pod priority class values and +their respective shutdown periods. + +{{< note >}} +The ability to take Pod priority into account during graceful node shutdown was introduced +as an Alpha feature in Kubernetes v1.23. In Kubernetes {{< skew currentVersion >}} +the feature is Beta and is enabled by default. +{{< /note >}} + +Metrics `graceful_shutdown_start_time_seconds` and `graceful_shutdown_end_time_seconds` +are emitted under the kubelet subsystem to monitor node shutdowns. + +## Non-graceful node shutdown handling {#non-graceful-node-shutdown} + +{{< feature-state feature_gate_name="NodeOutOfServiceVolumeDetach" >}} + +A node shutdown action may not be detected by kubelet's Node Shutdown Manager, +either because the command does not trigger the inhibitor locks mechanism used by +kubelet or because of a user error, i.e., the ShutdownGracePeriod and +ShutdownGracePeriodCriticalPods are not configured properly. Please refer to above +section [Graceful Node Shutdown](#graceful-node-shutdown) for more details. + +When a node is shutdown but not detected by kubelet's Node Shutdown Manager, the pods +that are part of a {{< glossary_tooltip text="StatefulSet" term_id="statefulset" >}} +will be stuck in terminating status on the shutdown node and cannot move to a new running node. +This is because kubelet on the shutdown node is not available to delete the pods so +the StatefulSet cannot create a new pod with the same name. If there are volumes used by the pods, +the VolumeAttachments will not be deleted from the original shutdown node so the volumes +used by these pods cannot be attached to a new running node. As a result, the +application running on the StatefulSet cannot function properly. If the original +shutdown node comes up, the pods will be deleted by kubelet and new pods will be +created on a different running node. If the original shutdown node does not come up, +these pods will be stuck in terminating status on the shutdown node forever. + +To mitigate the above situation, a user can manually add the taint `node.kubernetes.io/out-of-service` +with either `NoExecute` or `NoSchedule` effect to a Node marking it out-of-service. +If the `NodeOutOfServiceVolumeDetach`[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) +is enabled on {{< glossary_tooltip text="kube-controller-manager" term_id="kube-controller-manager" >}}, +and a Node is marked out-of-service with this taint, the pods on the node will be forcefully deleted +if there are no matching tolerations on it and volume detach operations for the pods terminating on +the node will happen immediately. This allows the Pods on the out-of-service node to recover quickly +on a different node. + +During a non-graceful shutdown, Pods are terminated in the two phases: + +1. Force delete the Pods that do not have matching `out-of-service` tolerations. +2. Immediately perform detach volume operation for such pods. + +{{< note >}} +- Before adding the taint `node.kubernetes.io/out-of-service`, it should be verified + that the node is already in shutdown or power off state (not in the middle of restarting). +- The user is required to manually remove the out-of-service taint after the pods are + moved to a new node and the user has checked that the shutdown node has been + recovered since the user was the one who originally added the taint. +{{< /note >}} + +### Forced storage detach on timeout {#storage-force-detach-on-timeout} + +In any situation where a pod deletion has not succeeded for 6 minutes, kubernetes will +force detach volumes being unmounted if the node is unhealthy at that instant. Any +workload still running on the node that uses a force-detached volume will cause a +violation of the +[CSI specification](https://github.com/container-storage-interface/spec/blob/master/spec.md#controllerunpublishvolume), +which states that `ControllerUnpublishVolume` "**must** be called after all +`NodeUnstageVolume` and `NodeUnpublishVolume` on the volume are called and succeed". +In such circumstances, volumes on the node in question might encounter data corruption. + +The forced storage detach behaviour is optional; users might opt to use the "Non-graceful +node shutdown" feature instead. + +Force storage detach on timeout can be disabled by setting the `disable-force-detach-on-timeout` +config field in `kube-controller-manager`. Disabling the force detach on timeout feature means +that a volume that is hosted on a node that is unhealthy for more than 6 minutes will not have +its associated +[VolumeAttachment](/docs/reference/kubernetes-api/config-and-storage-resources/volume-attachment-v1/) +deleted. + +After this setting has been applied, unhealthy pods still attached to a volumes must be recovered +via the [Non-Graceful Node Shutdown](#non-graceful-node-shutdown) procedure mentioned above. + +{{< note >}} +- Caution must be taken while using the [Non-Graceful Node Shutdown](#non-graceful-node-shutdown) procedure. +- Deviation from the steps documented above can result in data corruption. +{{< /note >}} + + +## {{% heading "whatsnext" %}} + +Learn more about the following: +* Blog: [Non-Graceful Node Shutdown](/blog/2023/08/16/kubernetes-1-28-non-graceful-node-shutdown-ga/). +* Cluster Architecture: [Nodes](/docs/concepts/architecture/nodes/). From 98e934f6a764c47acfa76810be77d6a264f4afd5 Mon Sep 17 00:00:00 2001 From: Arhell Date: Fri, 26 Apr 2024 00:35:40 +0300 Subject: [PATCH 0329/1086] [ja] Fix link --- content/ja/docs/concepts/services-networking/ingress.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/ja/docs/concepts/services-networking/ingress.md b/content/ja/docs/concepts/services-networking/ingress.md index e237742df1..b4435c705f 100644 --- a/content/ja/docs/concepts/services-networking/ingress.md +++ b/content/ja/docs/concepts/services-networking/ingress.md @@ -31,7 +31,7 @@ weight: 30 IngressはServiceに対して、外部疎通できるURL、負荷分散トラフィック、SSL/TLS終端の機能や、名前ベースの仮想ホスティングを提供するように設定できます。[Ingressコントローラー](/ja/docs/concepts/services-networking/ingress-controllers/)は通常はロードバランサーを使用してIngressの機能を実現しますが、エッジルーターや、追加のフロントエンドを構成してトラフィックの処理を支援することもできます。 -Ingressは任意のポートやプロトコルを公開しません。HTTPやHTTPS以外のServiceをインターネットに公開する場合、[Service.Type=NodePort](/ja/docs/concepts/services-networking/service/#nodeport)や[Service.Type=LoadBalancer](/ja/docs/concepts/services-networking/service/#loadbalancer)のServiceタイプを一般的には使用します。 +Ingressは任意のポートやプロトコルを公開しません。HTTPやHTTPS以外のServiceをインターネットに公開する場合、[Service.Type=NodePort](/ja/docs/concepts/services-networking/service/#type-nodeport)や[Service.Type=LoadBalancer](/ja/docs/concepts/services-networking/service/#loadbalancer)のServiceタイプを一般的には使用します。 ## Ingressを使用する上での前提条件 @@ -473,7 +473,7 @@ Events: Ingressリソースを直接含まずにサービスを公開する方法は複数あります。 * [Service.Type=LoadBalancer](/ja/docs/concepts/services-networking/service/#loadbalancer) -* [Service.Type=NodePort](/ja/docs/concepts/services-networking/service/#nodeport) +* [Service.Type=NodePort](/ja/docs/concepts/services-networking/service/#type-nodeport) ## {{% heading "whatsnext" %}} From cf28b19f81feec53f378d0b042ef481795c437db Mon Sep 17 00:00:00 2001 From: drewhagen Date: Thu, 25 Apr 2024 19:35:02 -0500 Subject: [PATCH 0330/1086] Remove 1.30 leads from sig-docs-website-owners --- OWNERS_ALIASES | 2 -- 1 file changed, 2 deletions(-) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index 613797246b..c74c490004 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -14,8 +14,6 @@ aliases: - reylejano - sftim - tengqm - - drewhagen # RT 1.30 Docs Lead - - katcosgrove # RT 1.30 Lead sig-docs-localization-owners: # Admins for localization content - a-mccarthy - divya-mohan0209 From 5487579ab1c66ec3f44f93f0856846b95a066f8c Mon Sep 17 00:00:00 2001 From: ydFu Date: Thu, 25 Apr 2024 15:37:37 +0800 Subject: [PATCH 0331/1086] [zh]Update mapping table for crictl and docker CLI commands Signed-off-by: ydFu --- .../reference/tools/map-crictl-dockercli.md | 141 ++---------------- 1 file changed, 12 insertions(+), 129 deletions(-) diff --git a/content/zh-cn/docs/reference/tools/map-crictl-dockercli.md b/content/zh-cn/docs/reference/tools/map-crictl-dockercli.md index dc8cb2d11c..25fa564e4b 100644 --- a/content/zh-cn/docs/reference/tools/map-crictl-dockercli.md +++ b/content/zh-cn/docs/reference/tools/map-crictl-dockercli.md @@ -10,137 +10,20 @@ content_type: reference weight: 10 --> -{{% thirdparty-content %}} - - -`crictl` 是兼容 {{}}的容器运行时的一种命令行接口。 -你可以使用它来在 Kubernetes 节点上检视和调试容器运行时和应用。 -`crictl` 及其源代码都托管在 -[cri-tools](https://github.com/kubernetes-sigs/cri-tools) 仓库中。 - - -本页面提供一份参考资料,用来将 `docker` 命令行工具的常用命令映射到 -`crictl` 的等价命令。 - - -## 从 docker 命令行映射到 crictl {#mapping-from-docker-cli-to-crictl} - - -映射表格中列举的确切版本是 `docker` 命令行的 v1.40 版本和 `crictl` 的 v1.19.0 版本。 -这一列表不是完备的。例如,其中并未包含实验性质的 `docker` 命令。 - {{< note >}} - -`crictl` 的输出格式类似于 `docker` 命令行,只是对于某些命令而言会有部分列缺失。 -如果你的命令输出会被程序解析,请确保你认真查看了对应的命令输出。 -{{< /note >}} -### 获得调试信息 {#retrieve-debugging-information} +此页面被重定向到 +https://v1-24.docs.kubernetes.io/zh-cn/docs/reference/tools/map-crictl-dockercli/ +,原因是 +[dockershim 在 v1.24 中被从 crictl 中移除](https://github.com/kubernetes-sigs/cri-tools/issues/870)。 +根据我们的社区政策,弃用的文档超过三个版本后不再维护。 +弃用的原因在 [Dockershim-FAQ](https://kubernetes.io/blog/2020/12/02/dockershim-faq/) 中进行了说明。 -{{< table caption="docker 命令行与 crictl 的映射 - 获得调试信息" >}} - -docker CLI | crictl | 描述 | 不支持的功能 --- | -- | -- | -- -`attach` | `attach` | 挂接到某运行中的容器 | `--detach-keys`, `--sig-proxy` -`exec` | `exec` | 在运行中的容器内执行命令 | `--privileged`, `--user`, `--detach-keys` -`images` | `images` | 列举镜像 |   -`info` | `info` | 显示系统范围的信息 |   -`inspect` | `inspect`, `inspecti` | 返回容器、镜像或任务的底层信息 |   -`logs` | `logs` | 取回容器的日志数据 | `--details` -`ps` | `ps` | 列举容器 |   -`stats` | `stats` | 显示容器资源用量统计的动态数据流 | 列:NET/BLOCK I/O、PIDs -`version` | `version` | 显示运行时(Docker、ContainerD 或其他)的版本信息 | -{{< /table >}} - - -### 执行变更 {#perform-changes} - -{{< table caption="docker 命令行与 crictl 的映射 - 执行变更" >}} - -docker CLI | crictl | 描述 | 不支持的功能 --- | -- | -- | -- -`create` | `create` | 创建一个新容器 |   -`kill` | `stop` (超时值为 0) | 杀死一个或多个运行中的容器 | `--signal` -`pull` | `pull` | 从某镜像库拉取镜像或仓库 | `--all-tags`, `--disable-content-trust` -`rm` | `rm` | 移除一个或者多个容器 |   -`rmi` | `rmi` | 移除一个或者多个镜像 |   -`run` | `run` | 在一个新的容器中执行命令 |   -`start` | `start` | 启动一个或多个已停止的容器 | `--detach-keys` -`stop` | `stop` | 停止一个或多个运行中的容器 |   -`update` | `update` | 更新一个或多个容器的配置 | `--restart`、`--blkio-weight` 以 CRI 所不支持的资源约束 -{{< /table >}} - - -### 仅被 crictl 支持的命令 {#supported-only-in-crictl} - -{{< table caption="docker 命令行与 crictl 的映射 - 仅被 crictl 支持的命令" >}} - -crictl | 描述 --- | -- -`imagefsinfo` | 返回镜像文件系统信息 -`inspectp` | 显示一个或多个 Pod 的状态 -`port-forward` | 将本地端口转发到 Pod -`pods` | 列举 Pod -`runp` | 运行一个新的 Pod -`rmp` | 删除一个或多个 Pod -`stopp` | 停止一个或多个运行中的 Pod -{{< /table >}} +{{}} From cd3cd288ab58de1ecf62488c9fea4bcaf72cc441 Mon Sep 17 00:00:00 2001 From: tico88612 <17496418+tico88612@users.noreply.github.com> Date: Thu, 25 Apr 2024 08:11:14 +0800 Subject: [PATCH 0332/1086] [zh-cn] sync only update `api_metadata` docs Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com> [zh-ch] Add the LimitRange en metadata Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com> [zh-cn] Add api_reference_title translation Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com> --- content/zh-cn/docs/concepts/architecture/leases.md | 6 ++++++ content/zh-cn/docs/concepts/policy/limit-range.md | 13 +++++++++++++ .../concepts/services-networking/endpoint-slices.md | 6 ++++++ .../workloads/controllers/replicationcontroller.md | 6 ++++++ data/i18n/zh-cn/zh-cn.toml | 3 +++ 5 files changed, 34 insertions(+) diff --git a/content/zh-cn/docs/concepts/architecture/leases.md b/content/zh-cn/docs/concepts/architecture/leases.md index 082832c82d..43a94350a2 100644 --- a/content/zh-cn/docs/concepts/architecture/leases.md +++ b/content/zh-cn/docs/concepts/architecture/leases.md @@ -1,10 +1,16 @@ --- title: 租约(Lease) +api_metadata: +- apiVersion: "coordination.k8s.io/v1" + kind: "Lease" content_type: concept weight: 30 --- diff --git a/content/zh-cn/docs/concepts/policy/limit-range.md b/content/zh-cn/docs/concepts/policy/limit-range.md index f2e19bde68..74b3beace9 100644 --- a/content/zh-cn/docs/concepts/policy/limit-range.md +++ b/content/zh-cn/docs/concepts/policy/limit-range.md @@ -1,8 +1,21 @@ --- title: 限制范围 +api_metadata: +- apiVersion: "v1" + kind: "LimitRange" content_type: concept weight: 10 --- + diff --git a/content/zh-cn/docs/concepts/services-networking/endpoint-slices.md b/content/zh-cn/docs/concepts/services-networking/endpoint-slices.md index 1f1cf1be6b..db020d326c 100644 --- a/content/zh-cn/docs/concepts/services-networking/endpoint-slices.md +++ b/content/zh-cn/docs/concepts/services-networking/endpoint-slices.md @@ -1,5 +1,8 @@ --- title: EndpointSlice +api_metadata: +- apiVersion: "discovery.k8s.io/v1" + kind: "EndpointSlice" content_type: concept weight: 60 description: >- @@ -11,6 +14,9 @@ description: >- reviewers: - freehan title: EndpointSlices +api_metadata: +- apiVersion: "discovery.k8s.io/v1" + kind: "EndpointSlice" content_type: concept weight: 60 description: >- diff --git a/content/zh-cn/docs/concepts/workloads/controllers/replicationcontroller.md b/content/zh-cn/docs/concepts/workloads/controllers/replicationcontroller.md index 0e7870e46b..a0b79b92ae 100644 --- a/content/zh-cn/docs/concepts/workloads/controllers/replicationcontroller.md +++ b/content/zh-cn/docs/concepts/workloads/controllers/replicationcontroller.md @@ -1,5 +1,8 @@ --- title: ReplicationController +api_metadata: +- apiVersion: "v1" + kind: "ReplicationController" content_type: concept weight: 90 description: >- @@ -12,6 +15,9 @@ reviewers: - bprashanth - janetkuo title: ReplicationController +api_metadata: +- apiVersion: "v1" + kind: "ReplicationController" content_type: concept weight: 90 description: >- diff --git a/data/i18n/zh-cn/zh-cn.toml b/data/i18n/zh-cn/zh-cn.toml index efa98fe0af..87cbc39a7c 100644 --- a/data/i18n/zh-cn/zh-cn.toml +++ b/data/i18n/zh-cn/zh-cn.toml @@ -1,6 +1,9 @@ # i18n strings for the Chinese version of the site (https://kubernetes.io/zh-cn/) # 注意:修改此文件时请维持字符串名称的字母顺序并与英文版保持一致 +[api_reference_title] +other = "API 参考" + [auto_generated_edit_notice] other = "(自动生成的页面)" From 9a0bda61b820a648a7dcaff43db09161fa2648bf Mon Sep 17 00:00:00 2001 From: tico88612 <17496418+tico88612@users.noreply.github.com> Date: Wed, 24 Apr 2024 20:19:59 +0800 Subject: [PATCH 0333/1086] Remove redundant closing spaces Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com> --- content/en/docs/concepts/services-networking/ingress.md | 2 +- content/en/docs/concepts/storage/persistent-volumes.md | 4 ++-- content/en/docs/concepts/storage/volumes.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/content/en/docs/concepts/services-networking/ingress.md b/content/en/docs/concepts/services-networking/ingress.md index 2989a22a81..8fef797365 100644 --- a/content/en/docs/concepts/services-networking/ingress.md +++ b/content/en/docs/concepts/services-networking/ingress.md @@ -6,7 +6,7 @@ api_metadata: - apiVersion: "networking.k8s.io/v1" kind: "Ingress" - apiVersion: "networking.k8s.io/v1" - kind: "IngressClass" + kind: "IngressClass" content_type: concept description: >- Make your HTTP (or HTTPS) network service available using a protocol-aware configuration diff --git a/content/en/docs/concepts/storage/persistent-volumes.md b/content/en/docs/concepts/storage/persistent-volumes.md index 65041f5587..c610cb44ea 100644 --- a/content/en/docs/concepts/storage/persistent-volumes.md +++ b/content/en/docs/concepts/storage/persistent-volumes.md @@ -510,11 +510,11 @@ PersistentVolume types are implemented as plugins. Kubernetes currently supports * [`nfs`](/docs/concepts/storage/volumes/#nfs) - Network File System (NFS) storage The following types of PersistentVolume are deprecated but still available. -If you are using these volume types except for `flexVolume`, `cephfs` and `rbd`, +If you are using these volume types except for `flexVolume`, `cephfs` and `rbd`, please install corresponding CSI drivers. * [`awsElasticBlockStore`](/docs/concepts/storage/volumes/#awselasticblockstore) - AWS Elastic Block Store (EBS) - (**migration on by default** starting v1.23) + (**migration on by default** starting v1.23) * [`azureDisk`](/docs/concepts/storage/volumes/#azuredisk) - Azure Disk (**migration on by default** starting v1.23) * [`azureFile`](/docs/concepts/storage/volumes/#azurefile) - Azure File diff --git a/content/en/docs/concepts/storage/volumes.md b/content/en/docs/concepts/storage/volumes.md index a673ecf27b..8609f48465 100644 --- a/content/en/docs/concepts/storage/volumes.md +++ b/content/en/docs/concepts/storage/volumes.md @@ -1129,7 +1129,7 @@ configuration changes to existing Storage Classes, PersistentVolumes or Persiste Existing PVs created by a in-tree volume plugin can still be used in the future without any configuration changes, even after the migration to CSI is completed for that volume type, and even after you upgrade to a version of Kubernetes that doesn't have compiled-in support for that kind of storage. - + As part of that migration, you - or another cluster administrator - **must** have installed and configured the appropriate CSI driver for that storage. The core of Kubernetes does not install that software for you. From e8ac4b823f1a1c96b466ff8c51e58d07a5f060fe Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Fri, 26 Apr 2024 19:29:12 +0600 Subject: [PATCH 0334/1086] Till Defination localized --- content/bn/releases/release.md | 155 +++++++++++++++++++++++++++------ 1 file changed, 129 insertions(+), 26 deletions(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index 3fd84d1a61..c2f242bcae 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -17,34 +17,137 @@ auto_generated: true মাইলফলক। - [TL;DR](#tldr) - - [Normal Dev (Weeks 1-11)](#normal-dev-weeks-1-11) - - [Code Freeze (Weeks 12-14)](#code-freeze-weeks-12-14) - - [Post-Release (Weeks 14+)](#post-release-weeks-14+) -- [Definitions](#definitions) -- [The Release Cycle](#the-release-cycle) -- [Removal Of Items From The Milestone](#removal-of-items-from-the-milestone) -- [Adding An Item To The Milestone](#adding-an-item-to-the-milestone) - - [Milestone Maintainers](#milestone-maintainers) - - [Feature additions](#feature-additions) - - [Issue additions](#issue-additions) - - [PR Additions](#pr-additions) -- [Other Required Labels](#other-required-labels) - - [SIG Owner Label](#sig-owner-label) - - [Priority Label](#priority-label) - - [Issue/PR Kind Label](#issuepr-kind-label) + - [নরমাল ডেভ (সপ্তাহ ১-১১)](#normal-dev-weeks-1-11) + - [কোড ফ্রিজ (সপ্তাহ ১২-১৪)](#code-freeze-weeks-12-14) + - [পোস্ট-রিলিজ (সপ্তাহ ১৪+)](#post-release-weeks-14+) +- [সংজ্ঞা](#definitions) +- [রিলিজ সাইকেল](#the-release-cycle) +- [মাইলস্টোন থেকে আইটেম অপসারণ](#removal-of-items-from-the-milestone) +- [মাইলস্টোনে একটি আইটেম সংযোজন](#adding-an-item-to-the-milestone) + - [মাইলস্টোন রক্ষণাবেক্ষণকারী](#milestone-maintainers) + - [ফিচার সংযোজন](#feature-additions) + - [ইস্যু সংযোজন](#issue-additions) + - [PR সংযোজন](#pr-additions) +- [অন্যান্য প্রয়োজনীয় লেবেল](#other-required-labels) + - [SIG ওনার লেবেল](#sig-owner-label) + - [প্রাইওরিটি লেবেল](#priority-label) + - [ইস্যু/PR এর মতো লেবেল](#issuepr-kind-label) -The process for shepherding enhancements, issues, and pull requests into a -Kubernetes release spans multiple stakeholders: +শেফারডিং এনহ্যান্সমেন্ট, ইস্যু এবং পুল রিকুয়েস্ট করার প্রক্রিয়া +কুবারনেটিস রিলিজে একাধিক স্টেকহোল্ডারদের অংশগ্রহণ বাড়ায়: -- the enhancement, issue, and pull request owner(s) -- SIG leadership -- the [Release Team][release-team] +- এনহ্যান্সমেন্টস, ইস্যু, এবং পুল রিকুয়েস্ট ওনার +- SIG লিডারশিপ +- [রিলিজ টিম][release-team] ওয়ার্কফ্লো এবং ইন্টারেকশন সম্পর্কিত তথ্য নীচে বর্ণিত হয়েছে। -As the owner of an enhancement, issue, or pull request (PR), it is your -responsibility to ensure release milestone requirements are met. Automation and -the Release Team will be in contact with you if updates are required, but -inaction can result in your work being removed from the milestone. Additional -requirements exist when the target milestone is a prior release (see -[cherry pick process][cherry-picks] for more information). +একটি এনহ্যান্সমেন্ট, ইস্যু, অথবা পুল রিকুয়েস্ট (PR) এর ওনার হিসেবে, এটি আপনার +দায়িত্ব রিলিজ মাইলস্টোন রিকোয়ারমেন্ট পূরণ হয়েছে নিশ্চিত করা। অটোমেশন এবং +রিলিজ টিম আপনার সাথে যোগাযোগ করবে যদি আপডেট প্রয়োজন হয়, কিন্তু +নিষ্ক্রিয়তার ফলে আপনার কাজ মাইলস্টোন থেকে সরে যেতে পারে। অতিরিক্ত +রিকোয়ারমেন্ট প্রয়োজন যখন লক্ষ্য মাইলস্টোন একটি পূর্ববর্তী রিলিজ (আরও +তথ্যের জন্য [চেরি পিক প্রোসেস][cherry-picks] দেখ) + +## TL;DR + +আপনি যদি আপনার PR মার্জ করাতে চান তার জন্য নিম্নলিখিত প্রয়োজনীয় লেবেল এবং +মাইলস্টোনগুলো প্রয়োজন, এখানে Prow /commands দ্বারা প্রতিনিধিত্ব করা হয়েছে যেগুলি যোগ করা লাগবে: + +### নরমাল ডেভ (সপ্তাহ ১-১১) + +- /sig {name} +- /kind {type} +- /lgtm +- /approved + +### [কোড ফ্রিজ][code-freeze] (সপ্তাহ ১২-১৪) + +- /milestone {v1.y} +- /sig {name} +- /kind {bug, failing-test} +- /lgtm +- /approved + +### পোস্ট-রিলিজ (সপ্তাহ ১৪+) + +'নরমাল ডেভ' পর্যায়ের ফিরে যাওয়ার রিকোয়ারমেন্ট: + +- /sig {name} +- /kind {type} +- /lgtm +- /approved + +1.y ব্রাঞ্চে মার্জ করা এখন [চেরি পিক্সের মাধ্যমে][cherry-picks], +[রিলিজ ম্যানেজার][release-managers] দ্বারা অনুমোদিত। + +পূর্বে, মাইলস্টোন-লক্ষ্যযুক্ত পুল রিকুয়েস্টের জন্য +একটি সংস্থায়িত GitHub ইস্যু খোলা প্রয়োজন ছিল, কিন্তু এটি আর প্রয়োজন নয় +ফিচার বা এনহ্যান্সমেন্ট হলো ইফেক্টিভ GitHub ইস্যু বা [KEPs][keps] যা পরবর্তী +পুল রিকুয়েস্টের পথে পরিচালিত হয়। + +সাধারণ লেবেলিং প্রক্রিয়াটি আর্টিফ্যাক্ট টাইপ জুড়ে সামঞ্জস্যপূর্ণ হওয়া উচিত। + +## সংজ্ঞা + +- *ইস্যু ওনার*: সৃষ্টিকারক, অ্যাসাইনিজ, এবং ইস্যুটি রিলিজ + মাইলস্টোনে সরবরাহ করা ব্যবহারকারী। + +- *রিলিজ টিম*: প্রতিটি Kubernetes রিলিজে একটি দল আছে যারা বর্ণিত প্রজেক্ট ম্যানেজমেন্টের + কাজ করে [এখানে][release-team]। + + যে কোনো প্রদত্ত রিলিজের সাথে সংশ্লিষ্ট দলের যোগাযোগের তথ্য পাওয়া যাবে + [এখানে](https://git.k8s.io/sig-release/releases/). + +- *Y days*: বিজনেস ডে বুঝায়। + +- *এনহ্যান্সমেন্ট*: দেখ "[আমার কাজটা কী এনহ্যান্সমেন্ট?](https://git.k8s.io/enhancements/README.md#is-my-thing-an-enhancement)" + +- *[এনহ্যান্সমেন্ট ফ্রিজ][enhancements-freeze]*: + সময়সীমা যার মধ্যে [KEPs][keps] সম্পন্ন করতে হবে + এনহ্যান্সমেন্টগুলো বর্তমান রিলিজের অংশ করার জন্য + +- *[এক্সেপশন রিকোয়েস্ট][exceptions]*: + কোন এনহ্যান্সমেন্ট এর জন্য সময়সীমা বাড়ানোর অনুরোধ করার + প্রক্রিয়া + +- *[কোড ফ্রিজ][code-freeze]*: + চূড়ান্ত প্রকাশের তারিখের আগে ~4 সপ্তাহের সময়কাল, যে সময়ে শুধুমাত্র + ক্রিটিকাল বাগ ফিক্স রিলিজে মার্জ করা হয়েছে। + +- *[প্রুনিং](https://git.k8s.io/sig-release/releases/release_phases.md#pruning)*: + একটি রিলিজ মাইলস্টোন থেকে একটি এনহ্যান্সমেন্ট অপসারণের প্রক্রিয়া যদি এটি + সম্পূর্ণরূপে বাস্তবায়িত বা অন্যথায় স্থিতিশীল নয় বলে মনে করা হয়। + +- *রিলিজ মাইলস্টোন*: সিমেনটিক ভার্সন স্ট্রিং বা + [GitHub milestone](https://help.github.com/en/github/managing-your-work-on-github/associating-milestones-with-issues-and-pull-requests) + যা একটি রিলিজ ভার্সন MAJOR.MINOR `vX.Y` নির্দেশ করে। + + আরও দেখ + [রিলিজ ভার্সনিং](https://git.k8s.io/sig-release/release-engineering/versioning.md). + +- *রিলিজ ব্রাঞ্চ*: Git ব্রাঞ্চ `release-X.Y` তৈরি করা হয়েছে `vX.Y` মাইলস্টোনের জন্য। + + `vX.Y-rc.0` রিলিজের সময় তৈরি করা হয়েছে এবং এর পরে রক্ষণাবেক্ষণ করা হয়েছে + প্রায় 12 মাসের জন্য `vX.Y.Z` প্যাচ রিলিজ সহ মুক্তি। + + দ্রষ্টব্য: রিলিজ 1.19 এবং পরবর্তী ভার্সন 1 বছরের প্যাচ রিলিজ সমর্থন পায়, এবং + রিলিজ 1.18 এবং তার আগে 9 মাসের প্যাচ রিলিজ সমর্থন পেয়েছে। + + + + + + + + + + +[cherry-picks]: https://git.k8s.io/community/contributors/devel/sig-release/cherry-picks.md +[code-freeze]: https://git.k8s.io/sig-release/releases/release_phases.md#code-freeze +[enhancements-freeze]: https://git.k8s.io/sig-release/releases/release_phases.md#enhancements-freeze +[exceptions]: https://git.k8s.io/sig-release/releases/release_phases.md#exceptions +[keps]: https://git.k8s.io/enhancements/keps +[release-managers]: /releases/release-managers/ +[release-team]: https://git.k8s.io/sig-release/release-team +[sig-list]: https://k8s.dev/sigs From 2b00840369bc5d2d5a0c4409a546f34c0934774e Mon Sep 17 00:00:00 2001 From: Hiroyuki Hasebe <16788901+levi106@users.noreply.github.com> Date: Tue, 23 Apr 2024 00:30:56 +0900 Subject: [PATCH 0335/1086] Translate content/en/docs/tasks/tools/install-kubectl-linux..md --- .../optional-kubectl-configs-bash-linux.md | 52 +++--- .../docs/tasks/tools/install-kubectl-linux.md | 157 +++++++++--------- 2 files changed, 100 insertions(+), 109 deletions(-) diff --git a/content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md b/content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md index bec8d42277..e84a30d1ac 100644 --- a/content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md +++ b/content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md @@ -1,6 +1,6 @@ --- -title: "bash auto-completion on Linux" -description: "Some optional configuration for bash auto-completion on Linux." +title: "Linux上でのbashの自動補完" +description: "Linux上でのbashの自動補完に対するいくつかの補助的な設定。" headless: true _build: list: never @@ -8,53 +8,48 @@ _build: publishResources: false --- -### Introduction +### はじめに -The kubectl completion script for Bash can be generated with the command `kubectl completion bash`. -Sourcing the completion script in your shell enables kubectl autocompletion. +Bashにおけるkubectlの補完スクリプトは`kubectl completion bash`コマンドで生成できます。 +シェル内で補完スクリプトをsourceすることでkubectlの自動補完が有効になります。 -However, the completion script depends on -[**bash-completion**](https://github.com/scop/bash-completion), -which means that you have to install this software first -(you can test if you have bash-completion already installed by running `type _init_completion`). +ただし、補完スクリプトは[**bash-completion**](https://github.com/scop/bash-completion)に依存しているため、事前にインストールしておく必要があります(`type _init_completion`を実行することで、bash-completionがすでにインストールされていることを確認できます)。 -### Install bash-completion +### bash-completionをインストールする -bash-completion is provided by many package managers -(see [here](https://github.com/scop/bash-completion#installation)). -You can install it with `apt-get install bash-completion` or `yum install bash-completion`, etc. +bash-completionは多くのパッケージマネージャーから提供されています([こちら](https://github.com/scop/bash-completion#installation)を参照してください)。 +`apt-get install bash-completion`または`yum install bash-completion`などでインストールできます。 -The above commands create `/usr/share/bash-completion/bash_completion`, -which is the main script of bash-completion. Depending on your package manager, -you have to manually source this file in your `~/.bashrc` file. +上記のコマンドでbash-completionの主要スクリプトである`/usr/share/bash-completion/bash_completion`が作成されます。 +パッケージマネージャーによっては、このファイルを`~/.bashrc`にて手動でsourceする必要があります。 -To find out, reload your shell and run `type _init_completion`. -If the command succeeds, you're already set, otherwise add the following to your `~/.bashrc` file: +これを調べるには、シェルをリロードしてから`type _init_completion`を実行してください。 +コマンドが成功していればすでに設定済みです。そうでなければ、`~/.bashrc`ファイルに以下を追記してください: ```bash source /usr/share/bash-completion/bash_completion ``` -Reload your shell and verify that bash-completion is correctly installed by typing `type _init_completion`. +シェルをリロードし、`type _init_completion`を実行してbash-completionが正しくインストールされていることを検証してください。 -### Enable kubectl autocompletion +### kubectlの自動補完を有効にする #### Bash -You now need to ensure that the kubectl completion script gets sourced in all -your shell sessions. There are two ways in which you can do this: +すべてのシェルセッションにてkubectlの補完スクリプトをsourceできるようにしなければなりません。 +これを行うには2つの方法があります: {{< tabs name="kubectl_bash_autocompletion" >}} -{{< tab name="User" codelang="bash" >}} +{{< tab name="ユーザー" codelang="bash" >}} echo 'source <(kubectl completion bash)' >>~/.bashrc {{< /tab >}} -{{< tab name="System" codelang="bash" >}} +{{< tab name="システム" codelang="bash" >}} kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null sudo chmod a+r /etc/bash_completion.d/kubectl {{< /tab >}} {{< /tabs >}} -If you have an alias for kubectl, you can extend shell completion to work with that alias: +kubectlにエイリアスを張っている場合は、エイリアスでも動作するようにシェルの補完を拡張することができます: ```bash echo 'alias k=kubectl' >>~/.bashrc @@ -62,11 +57,12 @@ echo 'complete -o default -F __start_kubectl k' >>~/.bashrc ``` {{< note >}} -bash-completion sources all completion scripts in `/etc/bash_completion.d`. +bash-completionは`/etc/bash_completion.d`内のすべての補完スクリプトをsourceします。 {{< /note >}} -Both approaches are equivalent. After reloading your shell, kubectl autocompletion should be working. -To enable bash autocompletion in current session of shell, source the ~/.bashrc file: +どちらも同様の手法です。 +シェルをリロードしたあとに、kubectlの自動補完が機能するはずです。 +シェルの現在のセッションでbashの自動補完を有効にするには、~/.bashrcをsourceします: ```bash source ~/.bashrc diff --git a/content/ja/docs/tasks/tools/install-kubectl-linux.md b/content/ja/docs/tasks/tools/install-kubectl-linux.md index 48a1eaef87..4e14e3606e 100644 --- a/content/ja/docs/tasks/tools/install-kubectl-linux.md +++ b/content/ja/docs/tasks/tools/install-kubectl-linux.md @@ -1,28 +1,26 @@ --- -title: Install and Set Up kubectl on Linux +title: Linux上でのkubectlのインストールおよびセットアップ content_type: task weight: 10 --- ## {{% heading "prerequisites" %}} -You must use a kubectl version that is within one minor version difference of -your cluster. For example, a v{{< skew currentVersion >}} client can communicate -with v{{< skew currentVersionAddMinor -1 >}}, v{{< skew currentVersionAddMinor 0 >}}, -and v{{< skew currentVersionAddMinor 1 >}} control planes. -Using the latest compatible version of kubectl helps avoid unforeseen issues. +kubectlのバージョンは、クラスターのマイナーバージョンとの差分が1つ以内でなければなりません。 +たとえば、クライアントがv{{< skew currentVersion >}}であれば、v{{< skew currentVersionAddMinor -1 >}}、v{{< skew currentVersionAddMinor 0 >}}、v{{< skew currentVersionAddMinor 1 >}}のコントロールプレーンと通信できます。 +最新の互換性のあるバージョンのkubectlを使うことで、不測の事態を避けることができるでしょう。 -## Install kubectl on Linux +## Linuxへkubectlをインストールする -The following methods exist for installing kubectl on Linux: +Linuxへkubectlをインストールするには、次の方法があります: -- [Install kubectl binary with curl on Linux](#install-kubectl-binary-with-curl-on-linux) -- [Install using native package management](#install-using-native-package-management) -- [Install using other package management](#install-using-other-package-management) +- [curlを使用してLinuxへkubectlのバイナリをインストールする](#install-kubectl-binary-with-curl-on-linux) +- [ネイティブなパッケージマネージャーを使用してインストールする](#install-using-native-package-management) +- [他のパッケージマネージャーを使用してインストールする](#install-using-other-package-management) -### Install kubectl binary with curl on Linux +### curlを使用してLinuxへkubectlのバイナリをインストールする{#install-kubectl-binary-with-curl-on-linux} -1. Download the latest release with the command: +1. 次のコマンドにより、最新リリースをダウンロードしてください: {{< tabs name="download_binary_linux" >}} {{< tab name="x86-64" codelang="bash" >}} @@ -34,16 +32,15 @@ The following methods exist for installing kubectl on Linux: {{< /tabs >}} {{< note >}} - To download a specific version, replace the `$(curl -L -s https://dl.k8s.io/release/stable.txt)` - portion of the command with the specific version. + 特定のバージョンをダウンロードする場合、コマンドの`$(curl -L -s https://dl.k8s.io/release/stable.txt)`の部分を特定のバージョンに書き換えてください。 - For example, to download version {{< skew currentPatchVersion >}} on Linux x86-64, type: + たとえば、Linux x86-64へ{{< skew currentPatchVersion >}}のバージョンをダウンロードするには、次のコマンドを入力します: ```bash curl -LO https://dl.k8s.io/release/v{{< skew currentPatchVersion >}}/bin/linux/amd64/kubectl ``` - And for Linux ARM64, type: + そして、Linux ARM64に対しては、次のコマンドを入力します: ```bash curl -LO https://dl.k8s.io/release/v{{< skew currentPatchVersion >}}/bin/linux/arm64/kubectl @@ -51,9 +48,9 @@ The following methods exist for installing kubectl on Linux: {{< /note >}} -1. Validate the binary (optional) +1. バイナリを検証してください(オプション) - Download the kubectl checksum file: + kubectlのチェックサムファイルをダウンロードします: {{< tabs name="download_checksum_linux" >}} {{< tab name="x86-64" codelang="bash" >}} @@ -64,19 +61,19 @@ The following methods exist for installing kubectl on Linux: {{< /tab >}} {{< /tabs >}} - Validate the kubectl binary against the checksum file: + チェックサムファイルに対してkubectlバイナリを検証します: ```bash echo "$(cat kubectl.sha256) kubectl" | sha256sum --check ``` - If valid, the output is: + 正しければ、出力は次のようになります: ```console kubectl: OK ``` - If the check fails, `sha256` exits with nonzero status and prints output similar to: + チェックに失敗すると、`sha256`は0以外のステータスで終了し、次のような出力を表示します: ```console kubectl: FAILED @@ -84,78 +81,81 @@ The following methods exist for installing kubectl on Linux: ``` {{< note >}} - Download the same version of the binary and checksum. + 同じバージョンのバイナリとチェックサムをダウンロードしてください。 {{< /note >}} -1. Install kubectl +1. kubectlをインストールしてください ```bash sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl ``` {{< note >}} - If you do not have root access on the target system, you can still install - kubectl to the `~/.local/bin` directory: + ターゲットシステムにルートアクセスを持っていない場合でも、`~/.local/bin`ディレクトリにkubectlをインストールできます: ```bash chmod +x kubectl mkdir -p ~/.local/bin mv ./kubectl ~/.local/bin/kubectl - # and then append (or prepend) ~/.local/bin to $PATH + # そして ~/.local/bin を $PATH の末尾 (または先頭) に追加します ``` {{< /note >}} -1. Test to ensure the version you installed is up-to-date: +1. インストールしたバージョンが最新であることを確認してください: ```bash kubectl version --client ``` - Or use this for detailed view of version: + または、バージョンの詳細を表示するために次を使用します: ```cmd kubectl version --client --output=yaml ``` -### Install using native package management +### ネイティブなパッケージマネージャーを使用してインストールする{#install-using-native-package-management} {{< tabs name="kubectl_install" >}} -{{% tab name="Debian-based distributions" %}} +{{% tab name="Debianベースのディストリビューション" %}} -1. Update the `apt` package index and install packages needed to use the Kubernetes `apt` repository: +1. `apt`のパッケージ一覧を更新し、Kubernetesの`apt`リポジトリを利用するのに必要なパッケージをインストールしてください: ```shell sudo apt-get update - # apt-transport-https may be a dummy package; if so, you can skip that package + # apt-transport-httpsはダミーパッケージの可能性があります。その場合、そのパッケージはスキップできます sudo apt-get install -y apt-transport-https ca-certificates curl ``` -2. Download the public signing key for the Kubernetes package repositories. The same signing key is used for all repositories so you can disregard the version in the URL: +2. Kubernetesパッケージリポジトリの公開署名キーをダウンロードしてください。 +すべてのリポジトリに同じ署名キーが使用されるため、URL内のバージョンは無視できます: ```shell - # If the folder `/etc/apt/keyrings` does not exist, it should be created before the curl command, read the note below. + # `/etc/apt/keyrings`フォルダーが存在しない場合は、curlコマンドの前に作成する必要があります。下記の備考を参照してください。 # sudo mkdir -p -m 755 /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/{{< param "version" >}}/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg + sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg # 特権のないAPTプログラムがこのkeyringを読めるようにします ``` {{< note >}} -In releases older than Debian 12 and Ubuntu 22.04, folder `/etc/apt/keyrings` does not exist by default, and it should be created before the curl command. +Debian 12とUbuntu 22.04より古いリリースでは、`/etc/apt/keyrings`フォルダーは既定では存在しないため、curlコマンドの前に作成する必要があります。 {{< /note >}} -3. Add the appropriate Kubernetes `apt` repository. If you want to use Kubernetes version different than {{< param "version" >}}, - replace {{< param "version" >}} with the desired minor version in the command below: +3. 適切なKubernetesの`apt`リポジトリを追加してください。 +{{< param "version" >}}とは異なるKubernetesバージョンを利用したい場合は、以下のコマンドの{{< param "version" >}}を目的のマイナーバージョンに置き換えてください: ```shell - # This overwrites any existing configuration in /etc/apt/sources.list.d/kubernetes.list + # これにより、/etc/apt/sources.list.d/kubernetes.listにある既存の設定が上書きされます echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/{{< param "version" >}}/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list + sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list # command-not-foundのようなツールが正しく動作するようにします ``` {{< note >}} -To upgrade kubectl to another minor release, you'll need to bump the version in `/etc/apt/sources.list.d/kubernetes.list` before running `apt-get update` and `apt-get upgrade`. This procedure is described in more detail in [Changing The Kubernetes Package Repository](/docs/tasks/administer-cluster/kubeadm/change-package-repository/). +kubectlを他のマイナーリリースにアップグレードするためには、`apt-get update`と`apt-get upgrade`を実行する前に、`/etc/apt/sources.list.d/kubernetes.list`の中のバージョンを上げる必要があります。 +この手順については[Changing The Kubernetes Package Repository](/docs/tasks/administer-cluster/kubeadm/change-package-repository/)に詳細が記載されています。 {{< /note >}} -4. Update `apt` package index, then install kubectl: +4. `apt`のパッケージインデックスを更新し、kubectlをインストールしてください: ```shell sudo apt-get update @@ -164,14 +164,13 @@ To upgrade kubectl to another minor release, you'll need to bump the version in {{% /tab %}} -{{% tab name="Red Hat-based distributions" %}} +{{% tab name="Red Hatベースのディストリビューション" %}} -1. Add the Kubernetes `yum` repository. If you want to use Kubernetes version - different than {{< param "version" >}}, replace {{< param "version" >}} with - the desired minor version in the command below. +1. Kubernetesの`yum`リポジトリを追加してください。 +{{< param "version" >}}とは異なるKubernetesバージョンを利用したい場合は、以下のコマンドの{{< param "version" >}}を目的のマイナーバージョンに置き換えてください: ```bash - # This overwrites any existing configuration in /etc/yum.repos.d/kubernetes.repo + # これにより、/etc/yum.repos.d/kubernetes.repoにある既存の設定が上書きされます cat <}} -To upgrade kubectl to another minor release, you'll need to bump the version in `/etc/yum.repos.d/kubernetes.repo` before running `yum update`. This procedure is described in more detail in [Changing The Kubernetes Package Repository](/docs/tasks/administer-cluster/kubeadm/change-package-repository/). +kubectlを他のマイナーリリースにアップグレードするためには、`yum update`を実行する前に、`/etc/yum.repos.d/kubernetes.repo`の中のバージョンを上げる必要があります。 +この手順については[Changing The Kubernetes Package Repository](/docs/tasks/administer-cluster/kubeadm/change-package-repository/)に詳細が記載されています。 {{< /note >}} -2. Install kubectl using `yum`: +2. `yum`を使用してkubectlをインストールしてください: ```bash sudo yum install -y kubectl @@ -194,14 +194,13 @@ To upgrade kubectl to another minor release, you'll need to bump the version in {{% /tab %}} -{{% tab name="SUSE-based distributions" %}} +{{% tab name="SUSEベースのディストリビューション" %}} -1. Add the Kubernetes `zypper` repository. If you want to use Kubernetes version - different than {{< param "version" >}}, replace {{< param "version" >}} with - the desired minor version in the command below. +1. Kubernetesの`zypper`リポジトリを追加してください。 +{{< param "version" >}}とは異なるKubernetesバージョンを利用したい場合は、以下のコマンドの{{< param "version" >}}を目的のマイナーバージョンに置き換えてください。 ```bash - # This overwrites any existing configuration in /etc/zypp/repos.d/kubernetes.repo + # これにより、/etc/zypp/repos.d/kubernetes.repoにある既存の設定が上書きされます cat <}} -To upgrade kubectl to another minor release, you'll need to bump the version in `/etc/zypp/repos.d/kubernetes.repo` -before running `zypper update`. This procedure is described in more detail in -[Changing The Kubernetes Package Repository](/docs/tasks/administer-cluster/kubeadm/change-package-repository/). +kubectlを他のマイナーリリースにアップグレードするためには、`zypper update`を実行する前に、`/etc/zypp/repos.d/kubernetes.repo`の中のバージョンを上げる必要があります。 +この手順については[Changing The Kubernetes Package Repository](/docs/tasks/administer-cluster/kubeadm/change-package-repository/)に詳細が記載されています。 {{< /note >}} - 2. Install kubectl using `zypper`: + 2. `zypper`を使用してkubectlをインストールしてください: ```bash sudo zypper install -y kubectl @@ -227,13 +225,11 @@ before running `zypper update`. This procedure is described in more detail in {{% /tab %}} {{< /tabs >}} -### Install using other package management +### 他のパッケージマネージャーを使用してインストールする{#install-using-other-package-management} {{< tabs name="other_kubectl_install" >}} {{% tab name="Snap" %}} -If you are on Ubuntu or another Linux distribution that supports the -[snap](https://snapcraft.io/docs/core/install) package manager, kubectl -is available as a [snap](https://snapcraft.io/) application. +Ubuntuまたは[snap](https://snapcraft.io/docs/core/install)パッケージマネージャーをサポートする別のLinuxディストリビューションを使用している場合、kubectlは[snap](https://snapcraft.io/)アプリケーションとして使用できます。 ```shell snap install kubectl --classic @@ -243,8 +239,7 @@ kubectl version --client {{% /tab %}} {{% tab name="Homebrew" %}} -If you are on Linux and using [Homebrew](https://docs.brew.sh/Homebrew-on-Linux) -package manager, kubectl is available for [installation](https://docs.brew.sh/Homebrew-on-Linux#install). +Linuxで[Homebrew](https://docs.brew.sh/Homebrew-on-Linux)パッケージマネージャーを使用している場合は、kubectlを[インストール](https://docs.brew.sh/Homebrew-on-Linux#install)することが可能です。 ```shell brew install kubectl @@ -255,18 +250,18 @@ kubectl version --client {{< /tabs >}} -## Verify kubectl configuration +## kubectlの設定を検証する {{< include "included/verify-kubectl.md" >}} -## Optional kubectl configurations and plugins +## オプションのkubectlの設定とプラグイン -### Enable shell autocompletion +### シェルの自動補完を有効にする -kubectl provides autocompletion support for Bash, Zsh, Fish, and PowerShell, -which can save you a lot of typing. +kubectlはBash、Zsh、Fish、PowerShellの自動補完を提供しています。 +これにより、入力を大幅に削減することができます。 -Below are the procedures to set up autocompletion for Bash, Fish, and Zsh. +以下にBash、Fish、Zshの自動補完の設定手順を示します。 {{< tabs name="kubectl_autocompletion" >}} {{< tab name="Bash" include="included/optional-kubectl-configs-bash-linux.md" />}} @@ -274,11 +269,11 @@ Below are the procedures to set up autocompletion for Bash, Fish, and Zsh. {{< tab name="Zsh" include="included/optional-kubectl-configs-zsh.md" />}} {{< /tabs >}} -### Install `kubectl convert` plugin +### `kubectl convert`プラグインをインストールする {{< include "included/kubectl-convert-overview.md" >}} -1. Download the latest release with the command: +1. 次のコマンドを使用して最新リリースをダウンロードしてください: {{< tabs name="download_convert_binary_linux" >}} {{< tab name="x86-64" codelang="bash" >}} @@ -289,9 +284,9 @@ Below are the procedures to set up autocompletion for Bash, Fish, and Zsh. {{< /tab >}} {{< /tabs >}} -1. Validate the binary (optional) +1. バイナリを検証してください(オプション) - Download the kubectl-convert checksum file: + kubectl-convertのチェックサムファイルをダウンロードします: {{< tabs name="download_convert_checksum_linux" >}} {{< tab name="x86-64" codelang="bash" >}} @@ -302,19 +297,19 @@ Below are the procedures to set up autocompletion for Bash, Fish, and Zsh. {{< /tab >}} {{< /tabs >}} - Validate the kubectl-convert binary against the checksum file: + チェックサムファイルに対してkubectl-convertバイナリを検証します: ```bash echo "$(cat kubectl-convert.sha256) kubectl-convert" | sha256sum --check ``` - If valid, the output is: + 正しければ、出力は次のようになります: ```console kubectl-convert: OK ``` - If the check fails, `sha256` exits with nonzero status and prints output similar to: + チェックに失敗すると、`sha256`は0以外のステータスで終了し、次のような出力を表示します: ```console kubectl-convert: FAILED @@ -322,24 +317,24 @@ Below are the procedures to set up autocompletion for Bash, Fish, and Zsh. ``` {{< note >}} - Download the same version of the binary and checksum. + 同じバージョンのバイナリとチェックサムをダウンロードしてください。 {{< /note >}} -1. Install kubectl-convert +1. kubectl-convertをインストールしてください ```bash sudo install -o root -g root -m 0755 kubectl-convert /usr/local/bin/kubectl-convert ``` -1. Verify plugin is successfully installed +1. プラグインが正常にインストールできたことを確認してください ```shell kubectl convert --help ``` - If you do not see an error, it means the plugin is successfully installed. + 何もエラーが表示されない場合は、プラグインが正常にインストールされたことを示しています。 -1. After installing the plugin, clean up the installation files: +1. プラグインのインストール後、インストールファイルを削除してください: ```bash rm kubectl-convert kubectl-convert.sha256 From f140892cfce17f0f0738e39be24b4b96c150581f Mon Sep 17 00:00:00 2001 From: Javad Ebadi Date: Fri, 26 Apr 2024 10:05:33 -0600 Subject: [PATCH 0336/1086] Improve Kubernetes tutorial around explaining Services (#43503) * Adds a new lines to documents explaining that this section assumes we have created a kuberentes-bootcamp service with LoadBalancer type * Update content/en/docs/tutorials/kubernetes-basics/scale/scale-intro.html Co-authored-by: Anuj Tiwari * Update content/en/docs/tutorials/kubernetes-basics/scale/scale-intro.html Co-authored-by: Anuj Tiwari * Update content/en/docs/tutorials/kubernetes-basics/scale/scale-intro.html Co-authored-by: Anuj Tiwari * Update content/en/docs/tutorials/kubernetes-basics/scale/scale-intro.html Co-authored-by: Tim Bannister * Update content/en/docs/tutorials/kubernetes-basics/scale/scale-intro.html Co-authored-by: Tim Bannister * Update content/en/docs/tutorials/kubernetes-basics/scale/scale-intro.html Rephrase Co-authored-by: Tim Bannister * Update scale-intro.html Fixed typo: Sservice -> service --------- Co-authored-by: Anuj Tiwari Co-authored-by: Tim Bannister --- .../tutorials/kubernetes-basics/scale/scale-intro.html | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/content/en/docs/tutorials/kubernetes-basics/scale/scale-intro.html b/content/en/docs/tutorials/kubernetes-basics/scale/scale-intro.html index 04dadeed81..e07eb462da 100644 --- a/content/en/docs/tutorials/kubernetes-basics/scale/scale-intro.html +++ b/content/en/docs/tutorials/kubernetes-basics/scale/scale-intro.html @@ -29,7 +29,15 @@ description: |-

    Previously we created a Deployment, and then exposed it publicly via a Service. The Deployment created only one Pod for running our application. When traffic increases, we will need to scale the application to keep up with user demand.

    If you haven't worked through the earlier sections, start from Using minikube to create a cluster.

    -

    Scaling is accomplished by changing the number of replicas in a Deployment.

    +

    Scaling is accomplished by changing the number of replicas in a Deployment

    +

    NOTE If you are trying this after the previous section , then you + may have deleted the service you created, or have created a Service of type: NodePort. + In this section, it is assumed that a service with type: LoadBalancer is created for the kubernetes-bootcamp Deployment.

    +

    If you have not deleted the Service created in the previous section, + first delete that Service and then run the following command to create a new Service with its + type set to LoadBalancer:

    +

    kubectl expose deployment/kubernetes-bootcamp --type="LoadBalancer" --port 8080

    +
    From e117e71e1aa5902c39ae62eddb109e79c54665b0 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Fri, 26 Apr 2024 22:11:59 +0600 Subject: [PATCH 0337/1086] Update release.md --- content/bn/releases/release.md | 48 +++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index c2f242bcae..9b8ceb586e 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -134,20 +134,42 @@ auto_generated: true দ্রষ্টব্য: রিলিজ 1.19 এবং পরবর্তী ভার্সন 1 বছরের প্যাচ রিলিজ সমর্থন পায়, এবং রিলিজ 1.18 এবং তার আগে 9 মাসের প্যাচ রিলিজ সমর্থন পেয়েছে। +## রিলিজ সাইকেল + +![কুবারনেটিস রিলিজ সাইকেলের একটি ছবি](/images/releases/release-cycle.jpg) + + কুবারনেটিস রিলিজ বর্তমানে প্রতি বছর প্রায় তিনবার হয়। + +রিলিজ প্রক্রিয়াটিকে তিনটি প্রধান পর্যায় হিসাবে বিবেচনা করা যেতে পারে: + +- এনহ্যান্সমেন্ট ডেফিনেশন +- ইমপ্লিমেন্টেশন +- স্ট্যাবিলাইজেশন + +But in reality, this is an open source and agile project, with feature planning +and implementation happening at all times. Given the project scale and globally +distributed developer base, it is critical to project velocity to not rely on a +trailing stabilization phase and rather have continuous integration testing +which ensures the project is always stable so that individual commits can be +flagged as having broken something. + +With ongoing feature definition through the year, some set of items will bubble +up as targeting a given release. **[Enhancements Freeze][enhancements-freeze]** +starts ~4 weeks into release cycle. By this point all intended feature work for +the given release has been defined in suitable planning artifacts in +conjunction with the Release Team's [Enhancements Lead](https://git.k8s.io/sig-release/release-team/role-handbooks/enhancements/README.md). + +After Enhancements Freeze, tracking milestones on PRs and issues is important. +Items within the milestone are used as a punchdown list to complete the +release. *On issues*, milestones must be applied correctly, via triage by the +SIG, so that [Release Team][release-team] can track bugs and enhancements (any +enhancement-related issue needs a milestone). + +There is some automation in place to help automatically assign milestones to +PRs. + +This automation currently applies to the following repos: - - - - - -[cherry-picks]: https://git.k8s.io/community/contributors/devel/sig-release/cherry-picks.md -[code-freeze]: https://git.k8s.io/sig-release/releases/release_phases.md#code-freeze -[enhancements-freeze]: https://git.k8s.io/sig-release/releases/release_phases.md#enhancements-freeze -[exceptions]: https://git.k8s.io/sig-release/releases/release_phases.md#exceptions -[keps]: https://git.k8s.io/enhancements/keps -[release-managers]: /releases/release-managers/ -[release-team]: https://git.k8s.io/sig-release/release-team -[sig-list]: https://k8s.dev/sigs From e4800968b6f191e1eeb8e41a8bdc9b581a9cb54f Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Sat, 27 Apr 2024 13:12:29 +0600 Subject: [PATCH 0338/1086] Update release.md --- content/bn/releases/release.md | 53 ++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index 9b8ceb586e..24c46334e7 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -146,30 +146,45 @@ auto_generated: true - ইমপ্লিমেন্টেশন - স্ট্যাবিলাইজেশন -But in reality, this is an open source and agile project, with feature planning -and implementation happening at all times. Given the project scale and globally -distributed developer base, it is critical to project velocity to not rely on a -trailing stabilization phase and rather have continuous integration testing -which ensures the project is always stable so that individual commits can be -flagged as having broken something. +কিন্তু বাস্তবে, এটি একটি ওপেন সোর্স এবং চটপটে প্রকল্প, ফিচার পরিকল্পনা +এবং বাস্তবায়ন সব সময়ে ঘটছে। প্রজেক্ট স্কেল এবং বিশ্বব্যাপী +ডিস্ট্রিবিউটেড ডেভেলপার বেস এর ফলে, এটি গুরুত্বপূর্ণ যে প্রজেক্টের গতি যেনো +ট্রেইলিং স্টেবিলাইজেশন ফেজ এর উপর নির্ভর না করে এবং বরং ক্রমাগত ইন্টিগ্রেশন টেস্টিং চলমান থাকে +যা নিশ্চিত করে যে প্রকল্পটি সর্বদা স্থিতিশীল যাতে একজন ডেভেলপার কোন নির্দিষ্ট কমিটে কোন সমস্যা +তৈরি করেছে তা চিহ্নিত করা যেতে পারে। -With ongoing feature definition through the year, some set of items will bubble -up as targeting a given release. **[Enhancements Freeze][enhancements-freeze]** -starts ~4 weeks into release cycle. By this point all intended feature work for -the given release has been defined in suitable planning artifacts in -conjunction with the Release Team's [Enhancements Lead](https://git.k8s.io/sig-release/release-team/role-handbooks/enhancements/README.md). +বছর ধরে চলমান ফিচার নির্ধারণের সাথে, কিছু আইটেম একটি নির্দিষ্ট রিলিজের +লক্ষ্য হিসেবে উঠে আসবে। **[এনহ্যান্সমেন্ট ফ্রিজ][enhancements-freeze]** +রিলিজ সাইকেলের ~৪ সপ্তাহের মধ্যে শুরু হয়। এই মুহুর্তে সমস্ত উদ্দেশ্যমূলক ফিচার কাজ করে +প্রদত্ত রিলিজ উপযুক্ত পরিকল্পনা নিদর্শন মধ্যে সংজ্ঞায়িত করা হয়েছে +রিলিজ টিমের সাথে একযোগে [এনহ্যান্সমেন্ট লিড](https://git.k8s.io/sig-release/release-team/role-handbooks/enhancements/README.md). -After Enhancements Freeze, tracking milestones on PRs and issues is important. -Items within the milestone are used as a punchdown list to complete the -release. *On issues*, milestones must be applied correctly, via triage by the -SIG, so that [Release Team][release-team] can track bugs and enhancements (any -enhancement-related issue needs a milestone). +এনহ্যান্সমেন্ট ফ্রিজের পরে, PR এবং ইস্যুগুলোর মাইলস্টোন ট্র্যাক করা গুরুত্বপূর্ণ। +মাইলস্টোন থাকা আইটেমগুলি সম্পূর্ণ করার জন্য একটি পাঞ্চডাউন তালিকা হিসাবে ব্যবহৃত হয় +রিলিজের জন্য। *ইস্যুতে*, মাইলস্টোন অবশ্যই সঠিকভাবে প্রয়োগ করতে হবে, triage মাধ্যমে +SIG, যাতে [রিলিজ টিম][release-team] বাগ এবং এনহ্যান্সমন্ট ট্র্যাক করতে পারে (যেকোন +এনহ্যান্সমেন্ট-সম্পর্কিত ইস্যুর একটি মাইলস্টোন প্রয়োজন)। -There is some automation in place to help automatically assign milestones to -PRs. +PR এ স্বয়ংক্রিয়ভাবে মাইলফলক বরাদ্দ করতে সাহায্য করার জন্য কিছু অটোমেশন +রয়েছে৷ -This automation currently applies to the following repos: +এই অটোমেশনটি বর্তমানে নিম্নলিখিত রিপোতে প্রযোজ্য: +- `kubernetes/enhancements` +- `kubernetes/kubernetes` +- `kubernetes/release` +- `kubernetes/sig-release` +- `kubernetes/test-infra` +At creation time, PRs against the `master` branch need humans to hint at which +milestone they might want the PR to target. Once merged, PRs against the +`master` branch have milestones auto-applied so from that time onward human +management of that PR's milestone is less necessary. On PRs against release +branches, milestones are auto-applied when the PR is created so no human +management of the milestone is ever necessary. +Any other effort that should be tracked by the Release Team that doesn't fall +under that automation umbrella should be have a milestone applied. +Implementation and bug fixing is ongoing across the cycle, but culminates in a +code freeze period. From 41fe37148c194639580d12117740b94d5fa87add Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Thu, 25 Apr 2024 20:31:00 +0800 Subject: [PATCH 0339/1086] [zh-cn]sync policy kubernetes-api kubeadm-config.v1beta3 hello-minikube apiserver-audit.v1 Signed-off-by: xin.li --- .../docs/concepts/overview/kubernetes-api.md | 57 ++----------------- content/zh-cn/docs/concepts/policy/_index.md | 2 +- .../config-api/apiserver-audit.v1.md | 18 +++--- .../config-api/kubeadm-config.v1beta3.md | 10 ++-- .../zh-cn/docs/tutorials/hello-minikube.md | 14 +---- 5 files changed, 22 insertions(+), 79 deletions(-) diff --git a/content/zh-cn/docs/concepts/overview/kubernetes-api.md b/content/zh-cn/docs/concepts/overview/kubernetes-api.md index db906039ae..f8003f112c 100644 --- a/content/zh-cn/docs/concepts/overview/kubernetes-api.md +++ b/content/zh-cn/docs/concepts/overview/kubernetes-api.md @@ -132,10 +132,10 @@ API 以聚合和非聚合形式提供。聚合的发现提供两个端点,而 --> ### 聚合的发现 {#aggregated-discovery} -{{< feature-state state="beta" for_k8s_version="v1.27" >}} +{{< feature-state feature_gate_name="AggregatedDiscoveryEndpoint" >}} -Kubernetes 为聚合的发现提供了 Beta 支持,通过两个端点(`/api` 和 `/apis`)发布集群所支持的所有资源。 +Kubernetes 为**聚合的发现**提供了 Beta 支持,通过两个端点(`/api` 和 `/apis`)发布集群所支持的所有资源。 请求这个端点会大大减少从集群获取发现数据时发送的请求数量。你可以通过带有 `Accept` 头(`Accept: application/json;v=v2beta1;g=apidiscovery.k8s.io;as=APIGroupDiscoveryList`) 的请求发送到不同端点,来指明聚合发现的资源。 @@ -157,7 +157,7 @@ document. 如果没有使用 `Accept` 头指示资源类型,对于 `/api` 和 `/apis` 端点的默认响应将是一个非聚合的发现文档。 -## API 发现 {#api-discovery} - -集群支持的所有组版本列表被发布在 `/api` 和 `/apis` 端点。 -每个组版本还会通过 `/apis//` -(例如 `/apis/rbac.authorization.k8s.io/v1alpha1`)广播支持的资源列表。 -这些端点由 kubectl 用于获取集群支持的资源列表。 - - -### 聚合发现 {#aggregated-discovery} - -{{< feature-state state="beta" for_k8s_version="v1.27" >}} - - -Kubernetes 对聚合发现提供 Beta 支持,通过两个端点(`/api` 和 `/apis`) -发布集群支持的所有资源,而不是每个组版本都需要一个端点。 -请求此端点显著减少了获取平均 Kubernetes 集群发现而发送的请求数量。 -通过请求各自的端点并附带表明聚合发现资源 -`Accept: application/json;v=v2beta1;g=apidiscovery.k8s.io;as=APIGroupDiscoveryList` -的 Accept 头部来进行访问。 - -该端点还支持 ETag 和 protobuf 编码。 - -## API 组和版本控制 {#api-groups-and-versioning} +## API 组和版本控制 {#api-groups-and-versioning} 为了更容易消除字段或重组资源的呈现方式,Kubernetes 支持多个 API 版本,每个版本位于不同的 API 路径, 例如 `/api/v1` 或 `/apis/rbac.authorization.k8s.io/v1alpha1`。 @@ -562,7 +517,7 @@ compatibility for a length of time so that other projects have an opportunity to 任何成功的系统都要随着新的使用案例的出现和现有案例的变化来成长和变化。 为此,Kubernetes 已设计了 Kubernetes API 来持续变更和成长。 -Kubernetes 项目的目标是 **不要** 给现有客户端带来兼容性问题,并在一定的时期内维持这种兼容性, +Kubernetes 项目的目标是**不要**给现有客户端带来兼容性问题,并在一定的时期内维持这种兼容性, 以便其他项目有机会作出适应性变更。 ## 使用 Kubelet 配置应用策略 {#apply-policies-using-kubelet-configurations} diff --git a/content/zh-cn/docs/reference/config-api/apiserver-audit.v1.md b/content/zh-cn/docs/reference/config-api/apiserver-audit.v1.md index 41e53a3ad4..4598710cf5 100644 --- a/content/zh-cn/docs/reference/config-api/apiserver-audit.v1.md +++ b/content/zh-cn/docs/reference/config-api/apiserver-audit.v1.md @@ -1,5 +1,5 @@ --- -title: kube-apiserver Audit 配置 (v1) +title: kube-apiserver Audit 配置(v1) content_type: tool-reference package: audit.k8s.io/v1 --- @@ -111,7 +111,7 @@ Event 结构包含可出现在 API 审计日志中的所有信息。 user [必需]
    -authentication/v1.UserInfo +authentication/v1.UserInfo

    @@ -124,7 +124,7 @@ Event 结构包含可出现在 API 审计日志中的所有信息。 impersonatedUser
    -authentication/v1.UserInfo +authentication/v1.UserInfo

    @@ -204,7 +204,7 @@ Note: All but the last IP can be arbitrarily set by the client. responseStatus
    -meta/v1.Status +meta/v1.Status

    @@ -257,7 +257,7 @@ Note: All but the last IP can be arbitrarily set by the client. requestReceivedTimestamp
    -meta/v1.MicroTime +meta/v1.MicroTime 列表结构元数据 @@ -368,7 +368,7 @@ Policy 定义的是审计日志的配置以及不同类型请求的日志记录 kind
    stringPolicy metadata
    -meta/v1.ObjectMeta +meta/v1.ObjectMeta

    @@ -458,7 +458,7 @@ PolicyList 是由审计策略(Policy)组成的列表。 kind
    stringPolicyList metadata
    -meta/v1.ListMeta +meta/v1.ListMeta 列表结构元数据。 diff --git a/content/zh-cn/docs/reference/config-api/kubeadm-config.v1beta3.md b/content/zh-cn/docs/reference/config-api/kubeadm-config.v1beta3.md index a70e41f17e..3d47787b2c 100644 --- a/content/zh-cn/docs/reference/config-api/kubeadm-config.v1beta3.md +++ b/content/zh-cn/docs/reference/config-api/kubeadm-config.v1beta3.md @@ -1,5 +1,5 @@ --- -title: kubeadm 配置 (v1beta3) +title: kubeadm 配置(v1beta3) content_type: tool-reference package: kubeadm.k8s.io/v1beta3 --- @@ -496,7 +496,7 @@ for, so other administrators can know its purpose. expires
    -meta/v1.Time +meta/v1.Time [必需]

    -[]core/v1.Taint +[]core/v1.Taint - `MinDomainsInPodTopologySpread` - [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)为 - Pod 拓扑分布启用 `minDomains`。自 v1.28 起,`MinDomainsInPodTopologySpread` 特性门控默认被启用。 + 在 Kubernetes v1.30 之前,`minDomains` 字段只有在启用 `MinDomainsInPodTopologySpread` + [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)时才可用(自 v1.28 起默认启用) 在早期的 Kubernetes 集群中,此特性门控可能被显式禁用或此字段可能不可用。 {{< /note >}} From 27eb529b673fe09501231db44771c6462d775837 Mon Sep 17 00:00:00 2001 From: Arhell Date: Sun, 28 Apr 2024 09:11:25 +0300 Subject: [PATCH 0342/1086] [zh] Fix link --- .../zh-cn/docs/concepts/services-networking/ingress.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/content/zh-cn/docs/concepts/services-networking/ingress.md b/content/zh-cn/docs/concepts/services-networking/ingress.md index 6ba2088285..1eca45edae 100644 --- a/content/zh-cn/docs/concepts/services-networking/ingress.md +++ b/content/zh-cn/docs/concepts/services-networking/ingress.md @@ -1,5 +1,10 @@ --- title: Ingress +api_metadata: +- apiVersion: "networking.k8s.io/v1" + kind: "Ingress" +- apiVersion: "networking.k8s.io/v1" + kind: "IngressClass" content_type: concept description: >- 使用一种能感知协议配置的机制来解析 URI、主机名称、路径等 Web 概念, @@ -1069,10 +1074,10 @@ You can expose a Service in multiple ways that don't directly involve the Ingres * 使用 [Service.Type=LoadBalancer](/zh-cn/docs/concepts/services-networking/service/#loadbalancer) -* 使用 [Service.Type=NodePort](/zh-cn/docs/concepts/services-networking/service/#nodeport) +* 使用 [Service.Type=NodePort](/zh-cn/docs/concepts/services-networking/service/#type-nodeport) ## {{% heading "whatsnext" %}} From 7fd2def272f21bb7222167a1e41d42dbcde8ca71 Mon Sep 17 00:00:00 2001 From: THAT ONE GUY <97331552+tuesdayinsighter@users.noreply.github.com> Date: Sun, 28 Apr 2024 14:33:37 +0800 Subject: [PATCH 0343/1086] Update cncf-code-of-conduct.md --- content/en/community/static/cncf-code-of-conduct.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/community/static/cncf-code-of-conduct.md b/content/en/community/static/cncf-code-of-conduct.md index b80a0e95d7..c557114000 100644 --- a/content/en/community/static/cncf-code-of-conduct.md +++ b/content/en/community/static/cncf-code-of-conduct.md @@ -66,7 +66,7 @@ For incidents occurring in the Kubernetes community, contact the [Kubernetes Cod For other projects, or for incidents that are project-agnostic or impact multiple CNCF projects, please contact the [CNCF Code of Conduct Committee](https://www.cncf.io/conduct/committee/) via conduct@cncf.io. Alternatively, you can contact any of the individual members of the [CNCF Code of Conduct Committee](https://www.cncf.io/conduct/committee/) to submit your report. For more detailed instructions on how to submit a report, including how to submit a report anonymously, please see our [Incident Resolution Procedures](https://www.cncf.io/conduct/procedures/). You can expect a response within three business days. -For incidents ocurring at CNCF event that is produced by the Linux Foundation, please contact eventconduct@cncf.io. +For incidents occurring at CNCF event that is produced by the Linux Foundation, please contact eventconduct@cncf.io. ## Enforcement From cc4bb6d1415730cdae06b8cba2ccf1a0037613a4 Mon Sep 17 00:00:00 2001 From: tico88612 <17496418+tico88612@users.noreply.github.com> Date: Sun, 28 Apr 2024 02:18:47 +0800 Subject: [PATCH 0344/1086] [zh-cn] minor update task/administer-cluster [zh-cn] translate include/task-tutorial-prereqs-node-upgrade.md Sync include/task-tutorial-prereqs.md with include/task-tutorial-prereqs-node-upgrade.md Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com> [zh-cn] change EncryptionConfiguration link Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com> [zh-cn] replace feature_gate_name with state & for_k8s_version Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com> --- .../zh-cn/docs/tasks/administer-cluster/decrypt-data.md | 4 ++-- .../zh-cn/docs/tasks/administer-cluster/encrypt-data.md | 4 ++-- .../administer-cluster/kubeadm/upgrading-linux-nodes.md | 2 +- .../administer-cluster/kubeadm/upgrading-windows-nodes.md | 2 +- .../zh-cn/docs/tasks/administer-cluster/memory-manager.md | 2 +- .../tasks/administer-cluster/switch-to-evented-pleg.md | 2 +- .../zh-cn/includes/task-tutorial-prereqs-node-upgrade.md | 7 +++++++ content/zh-cn/includes/task-tutorial-prereqs.md | 4 ++-- 8 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 content/zh-cn/includes/task-tutorial-prereqs-node-upgrade.md diff --git a/content/zh-cn/docs/tasks/administer-cluster/decrypt-data.md b/content/zh-cn/docs/tasks/administer-cluster/decrypt-data.md index 25ab46a8c7..8bbfb94e98 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/decrypt-data.md +++ b/content/zh-cn/docs/tasks/administer-cluster/decrypt-data.md @@ -281,6 +281,6 @@ Make sure that you use the same encryption configuration on each control plane h ## {{% heading "whatsnext" %}} -* 更多细节参阅 [EncryptionConfiguration configuration API (v1)](/zh-cn/docs/reference/config-api/apiserver-encryption.v1/)。 +* 更多细节参阅 [EncryptionConfiguration configuration API (v1)](/zh-cn/docs/reference/config-api/apiserver-config.v1/)。 diff --git a/content/zh-cn/docs/tasks/administer-cluster/encrypt-data.md b/content/zh-cn/docs/tasks/administer-cluster/encrypt-data.md index 8ce2b2bff3..bb510c8fa9 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/encrypt-data.md +++ b/content/zh-cn/docs/tasks/administer-cluster/encrypt-data.md @@ -1283,7 +1283,7 @@ To allow automatic reloading, configure the API server to run with: * 进一步学习[解密已静态加密的数据](/zh-cn/docs/tasks/administer-cluster/decrypt-data/)。 -* 进一步学习 [EncryptionConfiguration 配置 API(v1)](/zh-cn/docs/reference/config-api/apiserver-encryption.v1/)。 +* 进一步学习 [EncryptionConfiguration 配置 API(v1)](/zh-cn/docs/reference/config-api/apiserver-config.v1/)。 diff --git a/content/zh-cn/docs/tasks/administer-cluster/kubeadm/upgrading-linux-nodes.md b/content/zh-cn/docs/tasks/administer-cluster/kubeadm/upgrading-linux-nodes.md index a247d57db2..ef862d2808 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/kubeadm/upgrading-linux-nodes.md +++ b/content/zh-cn/docs/tasks/administer-cluster/kubeadm/upgrading-linux-nodes.md @@ -18,7 +18,7 @@ This page explains how to upgrade a Linux Worker Nodes created with kubeadm. ## {{% heading "prerequisites" %}} -{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} +{{< include "task-tutorial-prereqs-node-upgrade.md" >}} {{< version-check >}} -{{< feature-state state="beta" for_k8s_version="v1.22" >}} +{{< feature-state feature_gate_name="MemoryManager" >}} -{{< feature-state for_k8s_version="v1.27" state="beta" >}} +{{< feature-state feature_gate_name="EventedPLEG" >}} diff --git a/content/zh-cn/includes/task-tutorial-prereqs-node-upgrade.md b/content/zh-cn/includes/task-tutorial-prereqs-node-upgrade.md new file mode 100644 index 0000000000..440e07e00a --- /dev/null +++ b/content/zh-cn/includes/task-tutorial-prereqs-node-upgrade.md @@ -0,0 +1,7 @@ + +你必须有 Shell 能访问所有节点,且必须配置 kubectl 命令行工具让其与你的集群通信。 +建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 diff --git a/content/zh-cn/includes/task-tutorial-prereqs.md b/content/zh-cn/includes/task-tutorial-prereqs.md index cf6681ffc1..e1acd8855f 100644 --- a/content/zh-cn/includes/task-tutorial-prereqs.md +++ b/content/zh-cn/includes/task-tutorial-prereqs.md @@ -5,8 +5,8 @@ cluster, you can create one by using [minikube](https://minikube.sigs.k8s.io/docs/tutorials/multi_node/) or you can use one of these Kubernetes playgrounds: --> -你必须拥有一个 Kubernetes 的集群,同时你必须配置 kubectl 命令行工具与你的集群通信。 -建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。 +你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。 +建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 如果你还没有集群,你可以通过 [Minikube](https://minikube.sigs.k8s.io/docs/tutorials/multi_node/) 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一: From 3242db1b89b4d044c2a89c32f291c5e55a3af27e Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 28 Apr 2024 18:00:48 +0600 Subject: [PATCH 0345/1086] Create _index.html --- content/bn/community/_index.html | 187 +++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 content/bn/community/_index.html diff --git a/content/bn/community/_index.html b/content/bn/community/_index.html new file mode 100644 index 0000000000..b9c51592c6 --- /dev/null +++ b/content/bn/community/_index.html @@ -0,0 +1,187 @@ +--- +title: কমিউনিটি +layout: basic +body_class: community +cid: community +community_styles_migrated: true +menu: + main: + weight: 50 +--- + + +

    +

    কুবারনেটিস কমিউনিটি — ব্যবহারকারী, অবদানকারী এবং আমরা যে সংস্কৃতি একসাথে তৈরি করেছি — + এই ওপেন সোর্স প্রকল্পের উল্কাগত উত্থানের সবচেয়ে বড় কারণগুলোর মধ্যে + একটি ৷ আমাদের সংস্কৃতি এবং মূল্যবোধগুলো ক্রমাগত বৃদ্ধি এবং পরিবর্তিত হতে থাকে + কারণ প্রকল্প নিজেই বৃদ্ধি পায় এবং পরিবর্তিত হয়।. আমরা সকলেই প্রকল্পের ক্রমাগত উন্নতি এবং + এটিতে কাজ করার উপায়গুলোর দিকে একসাথে কাজ করি।

    +

    আমরা এমন লোক যারা ইস্যুগুলো এবং পুল রিকোয়েস্টগুলো প্রদান করে, + SIG মিটিংয়ে, কুবারনেটিস মিটআপে এবং KubeCon-এ উপস্থিত থাকে, এটি গ্রহণ এবং + উদ্ভাবনের পক্ষে সমর্থন করে, kubectl get pods চালায় এবং হাজার হাজার + অন্যান্য গুরুত্বপূর্ণ উপায়ে অবদান রাখে। আপনি কীভাবে জড়িত হতে পারেন এবং এই আশ্চর্যজনক + কমিউনিটিয়ের অংশ হতে পারেন তা শিখতে পড়ুন।

    +
    + + + + + +
    +

    কমিউনিটি মূল্যবোধ

    +

    কুবারনেটিস কমিউনিটিয়ের মূল্যবোধ হলো প্রকল্পের চলমান সাফল্যের মূল ভিত্তি।
    + এই নীতিগুলো কুবারনেটিস প্রকল্পের প্রতিটি দিক নির্দেশ করে।

    + + আরও পড়ুন + +
    + +
    +

    কোড অফ কন্ডাক্ট

    +

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

    +

    আপনি যদি Slack, বা অন্য যোগাযোগ ব্যবস্থায় কোনও ইভেন্ট বা মিটিংয়ে আচরণবিধি লঙ্ঘন লক্ষ্য করেন, তাহলে কুবারনেটিস কোড অফ কন্ডাক্ট কমিটির সাথে যোগাযোগ করুন conduct@kubernetes.io তে । সমস্ত রিপোর্ট গোপন রাখা হয় । আপনি GitHub-এ কুবারনেটিস কমিউনিটি রিপোজিটরিতে কমিটি সম্পর্কে পড়তে পারেন।

    + + আরও পড়ুন + +
    + +
    +

    ভিডিও

    + +

    কুবারনেটিস ইউটিউবে আছে, অনেক.  বিস্তৃত বিষয়গুলো জানার জন্য সাবস্ক্রাইব করুন৷

    + + +
    + +
    +

    আলোচনা

    + +

    আমরা অনেক কথা বলি। আমাদের খুঁজুন এবং এইসব প্ল্যাটফর্মের যেকোনো একটিতে কথোপকথনে যোগ দিন।

    + +
    +
    + + Forum + + Community forums ▶ +

    বিষয়-ভিত্তিক প্রযুক্তিগত আলোচনা যা ডক্স সেতু করে, + সমস্যা সমাধান, এবং আরও অনেক কিছু৷

    +
    + +
    + + 𝕏.org + + 𝕏 ▶ +

    #kubernetesio

    +

    ব্লগ পোস্ট, ইভেন্ট, নিউজ, আইডিয়ার রিয়েল-টাইম ঘোষণা।

    +
    + +
    + + GitHub + + GitHub ▶ +

    সমস্ত প্রকল্প এবং ইস্যু ট্র্যাকিং, প্লাস অবশ্যই কোড।

    +
    + +
    + + Server Fault + + Server Fault ▶ +

    কুবারনেটিস-সম্পর্কিত আলোচনা Server Fault এ। প্রশ্ন জিজ্ঞাসা করুন, বা উত্তর দিন।

    +
    + +
    + + Slack + + Slack ▶ +

    170+ চ্যানেলের সাথে, আপনি আপনার প্রয়োজনের সাথে মানানসই একটি খুঁজে পাবেন।

    +
    Need an invitation? + Visit https://slack.k8s.io/ + for an invitation.
    +
    +
    +
    + +
    +
    +

    আসন্ন ইভেন্ট

    + {{< upcoming-events >}} +
    +
    + +
    +

    গ্লোবাল কমিউনিটি

    +

    + বিশ্বে 150 টিরও বেশি মিটআপের সাথে এবং ক্রমবর্ধমান, আপনার লোকাল kube লোকদের খুঁজুন। যদি কেউ কাছাকাছি না থাকে তবে দায়িত্ব নিন এবং নিজের তৈরি করুন। +

    + + একটি মিটআপ খুঁজুন + +
    + +
    +

    সাম্প্রতিক নিউজ

    + +
    From 5cb20bb21041bfa44076c6416c71bc321ddaad94 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 28 Apr 2024 18:36:48 +0600 Subject: [PATCH 0346/1086] Create code-of-conduct.md --- content/bn/community/code-of-conduct.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 content/bn/community/code-of-conduct.md diff --git a/content/bn/community/code-of-conduct.md b/content/bn/community/code-of-conduct.md new file mode 100644 index 0000000000..a317c1dbb4 --- /dev/null +++ b/content/bn/community/code-of-conduct.md @@ -0,0 +1,25 @@ +--- +title: Kubernetes Community Code of Conduct +body_class: code-of-conduct +cid: code-of-conduct +--- + +_কুবারনেটিস অনুসরণ করে +[CNCF কোড অফ কন্ডাক্ট](https://github.com/cncf/foundation/blob/main/code-of-conduct.md)। +CNCF CoC এর পাঠ্যটি নীচে প্রতিলিপি করা হয়েছে, +[commit c79711b51](https://github.com/cncf/foundation/blob/c79711b5127e2d963107bc1be4a41975c8791acc/code-of-conduct.md). হিসাবে_ + +
    +{{< include "static/cncf-code-of-conduct.md" >}} +
    + +--- + +আপনি যদি কোনো ইভেন্টে বা মিটিংয়ে, স্ল্যাকে বা +অন্য যোগাযোগ ব্যবস্থায় আচরণবিধি লঙ্ঘন লক্ষ্য করেন, +তাহলে [কুবারনেটস কোড অফ কন্ডাক্ট কমিটির](https://git.k8s.io/community/committee-code-of-conduct) সাথে যোগাযোগ করুন। + +আপনি [conduct@kubernetes.io](mailto:conduct@kubernetes.io) এ ইমেলের মাধ্যমে তাদের কাছে পৌঁছাতে পারেন। +আপনার পরিচয় গোপন রাখা হবে। + +আপনি যদি লক্ষ্য করেন যে এই পৃষ্ঠাটি পুরানো, অনুগ্রহ করে [একটি ইস্যু তৈরি করুন](https://github.com/kubernetes/website/issues/new/choose)। From 3450b7976009d20e2b8e741c7ce98b7eee9f0f0f Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 28 Apr 2024 18:55:38 +0600 Subject: [PATCH 0347/1086] Update code-of-conduct.md --- content/bn/community/code-of-conduct.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/community/code-of-conduct.md b/content/bn/community/code-of-conduct.md index a317c1dbb4..199a9bf5e9 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 c79711b51](https://github.com/cncf/foundation/blob/c79711b5127e2d963107bc1be4a41975c8791acc/code-of-conduct.md). হিসাবে_ +[commit 71412bb02](https://github.com/cncf/foundation/blob/71412bb029090d42ecbeadb39374a337bfb48a9c/code-of-conduct.md) হিসাবে_
    {{< include "static/cncf-code-of-conduct.md" >}} From 9b2e6bb762e408236a1b0a47ae4b69cdd292a848 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 28 Apr 2024 19:00:09 +0600 Subject: [PATCH 0348/1086] Create static --- content/bn/community/static | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/community/static diff --git a/content/bn/community/static b/content/bn/community/static new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/content/bn/community/static @@ -0,0 +1 @@ + From 3a762a4690973da951cbe334c31d864286138b67 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 28 Apr 2024 19:05:53 +0600 Subject: [PATCH 0349/1086] Delete content/bn/community/static --- content/bn/community/static | 1 - 1 file changed, 1 deletion(-) delete mode 100644 content/bn/community/static diff --git a/content/bn/community/static b/content/bn/community/static deleted file mode 100644 index 8b13789179..0000000000 --- a/content/bn/community/static +++ /dev/null @@ -1 +0,0 @@ - From 114744ad93479081dbb6072c863bbf67fc95d3cb Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 28 Apr 2024 19:06:15 +0600 Subject: [PATCH 0350/1086] Create README.md --- content/bn/community/static /README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 content/bn/community/static /README.md diff --git a/content/bn/community/static /README.md b/content/bn/community/static /README.md new file mode 100644 index 0000000000..b47f30fc87 --- /dev/null +++ b/content/bn/community/static /README.md @@ -0,0 +1,5 @@ +এই ডিরেক্টরির ফাইলগুলো অন্য উৎস থেকে আনা হয়েছে । +এগুলোকে নতুন সংস্করণ দিয়ে প্রতিস্থাপন ব্যতীত সরাসরি এডিট করবেন না ৷ + +স্থানীয়করণ নোট: আপনাকে এই ডিরেক্টরির কোনো +ফাইলের স্থানীয় সংস্করণ তৈরি করতে হবে না। From 7e8026e5e2576774e87cd650d266a2206773ea70 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 28 Apr 2024 19:33:13 +0600 Subject: [PATCH 0351/1086] Update and rename README.md to README.md --- content/bn/community/{static => static}/README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename content/bn/community/{static => static}/README.md (100%) diff --git a/content/bn/community/static /README.md b/content/bn/community/static/README.md similarity index 100% rename from content/bn/community/static /README.md rename to content/bn/community/static/README.md From 9cc8cd6ed0d99aadef7c3f9c0721c6cff231fe4f Mon Sep 17 00:00:00 2001 From: Dipesh Rawat Date: Mon, 22 Apr 2024 19:58:07 +0100 Subject: [PATCH 0352/1086] Update 2022 blog to include author in front-matter --- ...2022-01-07-kubernetes-is-moving-on-from-dockershim.md | 9 +++++++-- .../_posts/2022-01-19-Securing-Admission-Controllers.md | 4 ++-- .../2022-02-07-sig-multicluster-spotlight/index.md | 5 +++-- .../index.md | 5 +++-- .../_posts/2022-03-31-ready-for-dockershim-removal.md | 5 ++--- ...22-04-07-Kubernetes-1-24-removals-and-deprecations.md | 4 ++-- .../index.md | 5 +++-- .../2022-04-29-kubernetes-1.23-release-interview.md | 4 ++-- .../_posts/2022-05-03-dockershim-historical-context.md | 5 ++--- .../en/blog/_posts/2022-05-03-kubernetes-release-1.24.md | 4 ++-- content/en/blog/_posts/2022-05-05-volume-expansion-ga.md | 4 ++-- .../blog/_posts/2022-05-06-storage-capacity-GA/index.md | 4 ++-- content/en/blog/_posts/2022-05-13-grpc-probes-in-beta.md | 4 ++-- .../en/blog/_posts/2022-05-16-volume-populators-beta.md | 5 ++--- ...-05-18-prevent-unauthorised-volume-mode-conversion.md | 4 ++-- .../blog/_posts/2022-05-20-non-graceful-node-shutdown.md | 5 +++-- ...022-05-23-service-ip-dynamic-and-static-allocation.md | 5 ++--- .../blog/_posts/2022-05-25-contextual-logging/index.md | 4 ++-- .../_posts/2022-05-27-maxunavailable-for-statefulset.md | 4 ++-- content/en/blog/_posts/2022-06-01-annual-report-2021.md | 4 ++-- content/en/blog/_posts/2022-07-13-gateway-api-in-beta.md | 7 +++++-- .../blog/_posts/2022-08-02-sig-docs-spotlight/index.md | 4 ++-- content/en/blog/_posts/2022-08-03-kms-v2-alpha.md | 7 +++++-- ...22-08-04-kubernetes-1.25-deprecations-and-removals.md | 6 ++++-- .../index.md | 4 ++-- .../_posts/2022-08-16-PSP-historical-context/index.md | 4 ++-- .../2022-08-18-kubernetes-1.24-release-interview.md | 4 ++-- .../en/blog/_posts/2022-08-22-sig-storage-spotlight.md | 4 ++-- .../en/blog/_posts/2022-08-23-kubernetes-1.25-blog.md | 4 ++-- content/en/blog/_posts/2022-08-25-pod-security/index.md | 5 +++-- .../en/blog/_posts/2022-08-29-csi-inline-volumes-ga.md | 4 ++-- content/en/blog/_posts/2022-08-31-cgroupv2-ga.md | 5 +++-- ...22-09-02-cosi-kubernetes-object-storage-management.md | 4 ++-- content/en/blog/_posts/2022-09-07-iptables-chains.md | 4 ++-- .../index.md | 4 ++-- .../blog/_posts/2022-09-14-pod-has-network-condition.md | 5 ++--- .../en/blog/_posts/2022-09-15-sig-apps-GA-1.25/index.md | 6 ++++-- .../2022-09-19-local-storage-capacity-isolation-ga.md | 4 ++-- .../en/blog/_posts/2022-09-21-csi-nodeexpandsecret.md | 5 +++-- .../2022-09-23-crd-validation-rules-graduate-to-beta.md | 6 ++++-- .../en/blog/_posts/2022-09-26-csi-migration-status.md | 4 ++-- .../en/blog/_posts/2022-09-29-immutability-with-cel.md | 4 ++-- .../en/blog/_posts/2022-10-03-add-userns-alpha/index.md | 5 +++-- content/en/blog/_posts/2022-10-04-introducing-kueue.md | 5 +++-- .../2022-10-05-current-state-2019-third-party-audit.md | 7 +++++-- ...22-10-18-kubernetes-1.26-deprecations-and-removals.md | 4 ++-- .../blog/_posts/2022-10-20-advanced-server-side-apply.md | 4 ++-- .../2022-11-04-live-and-let-live-with-kluctl-and-ssa.md | 4 ++-- .../en/blog/_posts/2022-11-28-registry-k8s-io-change.md | 5 +++-- .../index.md | 4 ++-- content/en/blog/_posts/2022-12-02-seccomp-notifier.md | 4 ++-- .../2022-12-05-forensic-container-checkpointing/index.md | 4 ++-- .../en/blog/_posts/2022-12-09-kubernetes-1.26-blog.md | 4 ++-- .../2022-12-12-kubernetes-release-artifact-signing.md | 4 ++-- .../2022-12-13-host-process-containers-ga/index.md | 5 +++-- .../index.md | 5 +++-- .../2022-12-16-non-graceful-node-shutdown-to-beta.md | 5 +++-- .../blog/_posts/2022-12-19-devicemanager-ga.md/index.md | 4 ++-- .../index.md | 5 +++-- .../2022-12-22-kubelet-credential-providers/index.md | 5 +++-- content/en/blog/_posts/2022-12-23-fsgroup-on-mount.md | 5 +++-- .../blog/_posts/2022-12-26-pod-scheduling-readiness.md | 5 +++-- content/en/blog/_posts/2022-12-27-cpumanager-goes-GA.md | 5 ++--- .../_posts/2022-12-29-scalable-job-tracking-ga/index.md | 4 ++-- .../index.md | 4 ++-- 65 files changed, 167 insertions(+), 136 deletions(-) diff --git a/content/en/blog/_posts/2022-01-07-kubernetes-is-moving-on-from-dockershim.md b/content/en/blog/_posts/2022-01-07-kubernetes-is-moving-on-from-dockershim.md index 9e7672f2b8..1347634064 100644 --- a/content/en/blog/_posts/2022-01-07-kubernetes-is-moving-on-from-dockershim.md +++ b/content/en/blog/_posts/2022-01-07-kubernetes-is-moving-on-from-dockershim.md @@ -3,10 +3,15 @@ layout: blog title: "Kubernetes is Moving on From Dockershim: Commitments and Next Steps" date: 2022-01-07 slug: kubernetes-is-moving-on-from-dockershim +author: > + Sergey Kanzhelev (Google), + Jim Angel (Google), + Davanum Srinivas (VMware), + Shannon Kularathna (Google), + Chris Short (AWS), + Dawn Chen (Google) --- -**Authors:** Sergey Kanzhelev (Google), Jim Angel (Google), Davanum Srinivas (VMware), Shannon Kularathna (Google), Chris Short (AWS), Dawn Chen (Google) - Kubernetes is removing dockershim in the upcoming v1.24 release. We're excited to reaffirm our community values by supporting open source container runtimes, enabling a smaller kubelet, and increasing engineering velocity for teams using diff --git a/content/en/blog/_posts/2022-01-19-Securing-Admission-Controllers.md b/content/en/blog/_posts/2022-01-19-Securing-Admission-Controllers.md index 002b2bd531..43de177f31 100644 --- a/content/en/blog/_posts/2022-01-19-Securing-Admission-Controllers.md +++ b/content/en/blog/_posts/2022-01-19-Securing-Admission-Controllers.md @@ -3,10 +3,10 @@ layout: blog title: "Securing Admission Controllers" date: 2022-01-19 slug: secure-your-admission-controllers-and-webhooks +author: > + Rory McCune (Aqua Security) --- -**Author:** Rory McCune (Aqua Security) - [Admission control](/docs/reference/access-authn-authz/admission-controllers/) is a key part of Kubernetes security, alongside authentication and authorization. Webhook admission controllers are extensively used to help improve the security of Kubernetes clusters in a variety of ways including restricting the privileges of workloads and ensuring that images deployed to the cluster meet organization’s security requirements. However, as with any additional component added to a cluster, security risks can present themselves. A security risk example is if the deployment and management of the admission controller are not handled correctly. To help admission controller users and designers manage these risks appropriately, the [security documentation](https://github.com/kubernetes/community/tree/master/sig-security#security-docs) subgroup of SIG Security has spent some time developing a [threat model for admission controllers](https://github.com/kubernetes/sig-security/tree/main/sig-security-docs/papers/admission-control). This threat model looks at likely risks which may arise from the incorrect use of admission controllers, which could allow security policies to be bypassed, or even allow an attacker to get unauthorised access to the cluster. diff --git a/content/en/blog/_posts/2022-02-07-sig-multicluster-spotlight/index.md b/content/en/blog/_posts/2022-02-07-sig-multicluster-spotlight/index.md index 4f155ed54d..4ead47c366 100644 --- a/content/en/blog/_posts/2022-02-07-sig-multicluster-spotlight/index.md +++ b/content/en/blog/_posts/2022-02-07-sig-multicluster-spotlight/index.md @@ -4,10 +4,11 @@ title: "Spotlight on SIG Multicluster" date: 2022-02-07 slug: sig-multicluster-spotlight-2022 canonicalUrl: https://www.kubernetes.dev/blog/2022/02/04/sig-multicluster-spotlight-2022/ +author: > + Dewan Ahmed (Aiven), + Chris Short (AWS) --- -**Authors:** Dewan Ahmed (Aiven) and Chris Short (AWS) - ## Introduction [SIG Multicluster](https://github.com/kubernetes/community/tree/master/sig-multicluster) is the SIG focused on how Kubernetes concepts are expanded and used beyond the cluster boundary. Historically, Kubernetes resources only interacted within that boundary - KRU or Kubernetes Resource Universe (not an actual Kubernetes concept). Kubernetes clusters, even now, don't really know anything about themselves or, about other clusters. Absence of cluster identifiers is a case in point. With the growing adoption of multicloud and multicluster deployments, the work SIG Multicluster doing is gaining a lot of attention. In this blog, [Jeremy Olmsted-Thompson, Google](https://twitter.com/jeremyot) and [Chris Short, AWS](https://twitter.com/ChrisShort) discuss the interesting problems SIG Multicluster is solving and how you can get involved. Their initials **JOT** and **CS** will be used for brevity. diff --git a/content/en/blog/_posts/2022-02-16-sig-node-ci-subproject-celebrates/index.md b/content/en/blog/_posts/2022-02-16-sig-node-ci-subproject-celebrates/index.md index 86d31f5443..46f38c8f8f 100644 --- a/content/en/blog/_posts/2022-02-16-sig-node-ci-subproject-celebrates/index.md +++ b/content/en/blog/_posts/2022-02-16-sig-node-ci-subproject-celebrates/index.md @@ -4,10 +4,11 @@ title: 'SIG Node CI Subproject Celebrates Two Years of Test Improvements' date: 2022-02-16 slug: sig-node-ci-subproject-celebrates canonicalUrl: https://www.kubernetes.dev/blog/2022/02/16/sig-node-ci-subproject-celebrates-two-years-of-test-improvements/ +author: > + Sergey Kanzhelev (Google), + Elana Hashman (Red Hat) --- -**Authors:** Sergey Kanzhelev (Google), Elana Hashman (Red Hat) - Ensuring the reliability of SIG Node upstream code is a continuous effort that takes a lot of behind-the-scenes effort from many contributors. There are frequent releases of Kubernetes, base operating systems, diff --git a/content/en/blog/_posts/2022-03-31-ready-for-dockershim-removal.md b/content/en/blog/_posts/2022-03-31-ready-for-dockershim-removal.md index 4362a0daa7..227105478b 100644 --- a/content/en/blog/_posts/2022-03-31-ready-for-dockershim-removal.md +++ b/content/en/blog/_posts/2022-03-31-ready-for-dockershim-removal.md @@ -3,11 +3,10 @@ layout: blog title: "Is Your Cluster Ready for v1.24?" date: 2022-03-31 slug: ready-for-dockershim-removal +author: > + Kat Cosgrove --- -**Author:** Kat Cosgrove - - Way back in December of 2020, Kubernetes announced the [deprecation of Dockershim](/blog/2020/12/02/dont-panic-kubernetes-and-docker/). In Kubernetes, dockershim is a software shim that allows you to use the entire Docker engine as your container runtime within Kubernetes. In the upcoming v1.24 release, we are removing Dockershim - the delay between deprecation and removal in line with the [project’s policy](https://kubernetes.io/docs/reference/using-api/deprecation-policy/) of supporting features for at least one year after deprecation. If you are a cluster operator, this guide includes the practical realities of what you need to know going into this release. Also, what do you need to do to ensure your cluster doesn’t fall over! ## First, does this even affect you? diff --git a/content/en/blog/_posts/2022-04-07-Kubernetes-1-24-removals-and-deprecations.md b/content/en/blog/_posts/2022-04-07-Kubernetes-1-24-removals-and-deprecations.md index bf9dc5656f..906fd71e61 100644 --- a/content/en/blog/_posts/2022-04-07-Kubernetes-1-24-removals-and-deprecations.md +++ b/content/en/blog/_posts/2022-04-07-Kubernetes-1-24-removals-and-deprecations.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes Removals and Deprecations In 1.24" date: 2022-04-07 slug: upcoming-changes-in-kubernetes-1-24 +author: > + Mickey Boxell (Oracle) --- -**Author**: Mickey Boxell (Oracle) - As Kubernetes evolves, features and APIs are regularly revisited and removed. New features may offer an alternative or improved approach to solving existing problems, motivating the team to remove the old approach. diff --git a/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/index.md b/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/index.md index 15e9a772dd..03c5ef9d13 100644 --- a/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/index.md +++ b/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/index.md @@ -3,10 +3,11 @@ layout: blog title: 'Increasing the security bar in Ingress-NGINX v1.2.0' date: 2022-04-28 slug: ingress-nginx-1-2-0 +author: > + Ricardo Katz (VMware), + James Strong (Chainguard) --- -**Authors:** Ricardo Katz (VMware), James Strong (Chainguard) - The [Ingress](/docs/concepts/services-networking/ingress/) may be one of the most targeted components of Kubernetes. An Ingress typically defines an HTTP reverse proxy, exposed to the Internet, containing multiple websites, and with some privileged access to Kubernetes API (such as to read Secrets relating to diff --git a/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md b/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md index c2532638d0..4ef1281575 100644 --- a/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md +++ b/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md @@ -2,10 +2,10 @@ layout: blog title: "Frontiers, fsGroups and frogs: the Kubernetes 1.23 release interview" date: 2022-04-29 +author: > + Craig Box (Google) --- -**Author**: Craig Box (Google) - One of the highlights of hosting the weekly [Kubernetes Podcast from Google](https://kubernetespodcast.com/) is talking to the release managers for each new Kubernetes version. The release team is constantly refreshing. Many working their way from small documentation fixes, step up to shadow roles, and then eventually lead a release. As we prepare for the 1.24 release next week, [in accordance with long-standing tradition](https://www.google.com/search?q=%22release+interview%22+site%3Akubernetes.io%2Fblog), I'm pleased to bring you a look back at the story of 1.23. The release was led by [Rey Lejano](https://twitter.com/reylejano), a Field Engineer at SUSE. [I spoke to Rey](https://kubernetespodcast.com/episode/167-kubernetes-1.23/) in December, as he was awaiting the birth of his first child. diff --git a/content/en/blog/_posts/2022-05-03-dockershim-historical-context.md b/content/en/blog/_posts/2022-05-03-dockershim-historical-context.md index 6bdfac570d..fefdf98d91 100644 --- a/content/en/blog/_posts/2022-05-03-dockershim-historical-context.md +++ b/content/en/blog/_posts/2022-05-03-dockershim-historical-context.md @@ -3,11 +3,10 @@ layout: blog title: "Dockershim: The Historical Context" date: 2022-05-03 slug: dockershim-historical-context +author: > + Kat Cosgrove --- -**Author:** Kat Cosgrove - - Dockershim has been removed as of Kubernetes v1.24, and this is a positive move for the project. However, context is important for fully understanding something, be it socially or in software development, and this deserves a more in-depth review. Alongside the dockershim removal in Kubernetes v1.24, we’ve seen some confusion (sometimes at a panic level) and dissatisfaction with this decision in the community, largely due to a lack of context around this removal. The decision to deprecate and eventually remove dockershim from Kubernetes was not made quickly or lightly. Still, it’s been in the works for so long that many of today’s users are newer than that decision, and certainly newer than the choices that led to the dockershim being necessary in the first place. So what is the dockershim, and why is it going away? diff --git a/content/en/blog/_posts/2022-05-03-kubernetes-release-1.24.md b/content/en/blog/_posts/2022-05-03-kubernetes-release-1.24.md index be4c435009..8c3cac2a82 100644 --- a/content/en/blog/_posts/2022-05-03-kubernetes-release-1.24.md +++ b/content/en/blog/_posts/2022-05-03-kubernetes-release-1.24.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes 1.24: Stargazer" date: 2022-05-03 slug: kubernetes-1-24-release-announcement +author: > + [Kubernetes 1.24 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.24/release-team.md) --- -**Authors**: [Kubernetes 1.24 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.24/release-team.md) - We are excited to announce the release of Kubernetes 1.24, the first release of 2022! This release consists of 46 enhancements: fourteen enhancements have graduated to stable, diff --git a/content/en/blog/_posts/2022-05-05-volume-expansion-ga.md b/content/en/blog/_posts/2022-05-05-volume-expansion-ga.md index c823ae8a2c..2c4a14e46c 100644 --- a/content/en/blog/_posts/2022-05-05-volume-expansion-ga.md +++ b/content/en/blog/_posts/2022-05-05-volume-expansion-ga.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes 1.24: Volume Expansion Now A Stable Feature" date: 2022-05-05 slug: volume-expansion-ga +author: > + Hemant Kumar (Red Hat) --- -**Author:** Hemant Kumar (Red Hat) - Volume expansion was introduced as a alpha feature in Kubernetes 1.8 and it went beta in 1.11 and with Kubernetes 1.24 we are excited to announce general availability(GA) of volume expansion. diff --git a/content/en/blog/_posts/2022-05-06-storage-capacity-GA/index.md b/content/en/blog/_posts/2022-05-06-storage-capacity-GA/index.md index 2bb85059e3..14ab8b611e 100644 --- a/content/en/blog/_posts/2022-05-06-storage-capacity-GA/index.md +++ b/content/en/blog/_posts/2022-05-06-storage-capacity-GA/index.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes 1.24: Storage Capacity Tracking Now Generally Available" date: 2022-05-06 slug: storage-capacity-ga +author: > + Patrick Ohly (Intel) --- - **Authors:** Patrick Ohly (Intel) - The v1.24 release of Kubernetes brings [storage capacity](/docs/concepts/storage/storage-capacity/) tracking as a generally available feature. diff --git a/content/en/blog/_posts/2022-05-13-grpc-probes-in-beta.md b/content/en/blog/_posts/2022-05-13-grpc-probes-in-beta.md index 77cf06d104..e219ca62ab 100644 --- a/content/en/blog/_posts/2022-05-13-grpc-probes-in-beta.md +++ b/content/en/blog/_posts/2022-05-13-grpc-probes-in-beta.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes 1.24: gRPC container probes in beta" date: 2022-05-13 slug: grpc-probes-now-in-beta +author: > + Sergey Kanzhelev (Google) --- -**Author**: Sergey Kanzhelev (Google) - _Update: Since this article was posted, the feature was graduated to GA in v1.27 and doesn't require any feature gates to be enabled. With Kubernetes 1.24 the gRPC probes functionality entered beta and is available by default. diff --git a/content/en/blog/_posts/2022-05-16-volume-populators-beta.md b/content/en/blog/_posts/2022-05-16-volume-populators-beta.md index 4558f07eae..8f83216421 100644 --- a/content/en/blog/_posts/2022-05-16-volume-populators-beta.md +++ b/content/en/blog/_posts/2022-05-16-volume-populators-beta.md @@ -3,11 +3,10 @@ layout: blog title: "Kubernetes 1.24: Volume Populators Graduate to Beta" date: 2022-05-16 slug: volume-populators-beta +author: > + Ben Swartzlander (NetApp) --- -**Author:** -Ben Swartzlander (NetApp) - The volume populators feature is now two releases old and entering beta! The `AnyVolumeDataSource` feature gate defaults to enabled in Kubernetes v1.24, which means that users can specify any custom resource as the data source of a PVC. diff --git a/content/en/blog/_posts/2022-05-18-prevent-unauthorised-volume-mode-conversion.md b/content/en/blog/_posts/2022-05-18-prevent-unauthorised-volume-mode-conversion.md index 920d578d01..7d918fe244 100644 --- a/content/en/blog/_posts/2022-05-18-prevent-unauthorised-volume-mode-conversion.md +++ b/content/en/blog/_posts/2022-05-18-prevent-unauthorised-volume-mode-conversion.md @@ -3,10 +3,10 @@ layout: blog title: 'Kubernetes 1.24: Prevent unauthorised volume mode conversion' date: 2022-05-18 slug: prevent-unauthorised-volume-mode-conversion-alpha +author: > + Raunak Pradip Shah (Mirantis) --- -**Author:** Raunak Pradip Shah (Mirantis) - Kubernetes v1.24 introduces a new alpha-level feature that prevents unauthorised users from modifying the volume mode of a [`PersistentVolumeClaim`](/docs/concepts/storage/persistent-volumes/) created from an existing [`VolumeSnapshot`](/docs/concepts/storage/volume-snapshots/) in the Kubernetes cluster. diff --git a/content/en/blog/_posts/2022-05-20-non-graceful-node-shutdown.md b/content/en/blog/_posts/2022-05-20-non-graceful-node-shutdown.md index f8f4876285..a3275a372b 100644 --- a/content/en/blog/_posts/2022-05-20-non-graceful-node-shutdown.md +++ b/content/en/blog/_posts/2022-05-20-non-graceful-node-shutdown.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes 1.24: Introducing Non-Graceful Node Shutdown Alpha" date: 2022-05-20 slug: kubernetes-1-24-non-graceful-node-shutdown-alpha +author: > + Xing Yang (VMware), + Yassine Tijani (VMware) --- -**Authors** Xing Yang and Yassine Tijani (VMware) - Kubernetes v1.24 introduces alpha support for [Non-Graceful Node Shutdown](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/2268-non-graceful-shutdown). This feature allows stateful workloads to failover to a different node after the original node is shutdown or in a non-recoverable state such as hardware failure or broken OS. ## How is this different from Graceful Node Shutdown diff --git a/content/en/blog/_posts/2022-05-23-service-ip-dynamic-and-static-allocation.md b/content/en/blog/_posts/2022-05-23-service-ip-dynamic-and-static-allocation.md index c17453a6de..21535c8ad3 100644 --- a/content/en/blog/_posts/2022-05-23-service-ip-dynamic-and-static-allocation.md +++ b/content/en/blog/_posts/2022-05-23-service-ip-dynamic-and-static-allocation.md @@ -3,11 +3,10 @@ layout: blog title: "Kubernetes 1.24: Avoid Collisions Assigning IP Addresses to Services" date: 2022-05-23 slug: service-ip-dynamic-and-static-allocation +author: > + Antonio Ojea (Red Hat) --- -**Author:** Antonio Ojea (Red Hat) - - In Kubernetes, [Services](/docs/concepts/services-networking/service/) are an abstract way to expose an application running on a set of Pods. Services can have a cluster-scoped virtual IP address (using a Service of `type: ClusterIP`). diff --git a/content/en/blog/_posts/2022-05-25-contextual-logging/index.md b/content/en/blog/_posts/2022-05-25-contextual-logging/index.md index 2d5ef5c4c7..f72bcaed52 100644 --- a/content/en/blog/_posts/2022-05-25-contextual-logging/index.md +++ b/content/en/blog/_posts/2022-05-25-contextual-logging/index.md @@ -4,10 +4,10 @@ title: "Contextual Logging in Kubernetes 1.24" date: 2022-05-25 slug: contextual-logging canonicalUrl: https://kubernetes.dev/blog/2022/05/25/contextual-logging/ +author: > + Patrick Ohly (Intel) --- - **Authors:** Patrick Ohly (Intel) - The [Structured Logging Working Group](https://github.com/kubernetes/community/blob/master/wg-structured-logging/README.md) has added new capabilities to the logging infrastructure in Kubernetes diff --git a/content/en/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md b/content/en/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md index 4093758e1f..9c79ffac3f 100644 --- a/content/en/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md +++ b/content/en/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md @@ -3,10 +3,10 @@ layout: blog title: 'Kubernetes 1.24: Maximum Unavailable Replicas for StatefulSet' date: 2022-05-27 slug: maxunavailable-for-statefulset +author: > + Mayank Kumar (Salesforce) --- -**Author:** Mayank Kumar (Salesforce) - Kubernetes [StatefulSets](/docs/concepts/workloads/controllers/statefulset/), since their introduction in 1.5 and becoming stable in 1.9, have been widely used to run stateful applications. They provide stable pod identity, persistent per pod storage and ordered graceful deployment, scaling and rolling updates. You can think of StatefulSet as the atomic building diff --git a/content/en/blog/_posts/2022-06-01-annual-report-2021.md b/content/en/blog/_posts/2022-06-01-annual-report-2021.md index e0a4130357..090429e242 100644 --- a/content/en/blog/_posts/2022-06-01-annual-report-2021.md +++ b/content/en/blog/_posts/2022-06-01-annual-report-2021.md @@ -3,10 +3,10 @@ layout: blog title: "Annual Report Summary 2021" date: 2022-06-01 slug: annual-report-summary-2021 +author: > + Paris Pittman (Steering Committee) --- -**Author:** Paris Pittman (Steering Committee) - Last year, we published our first [Annual Report Summary](/blog/2021/06/28/announcing-kubernetes-community-group-annual-reports/) for 2020 and it's already time for our second edition! [2021 Annual Report Summary](https://www.cncf.io/reports/kubernetes-annual-report-2021/) diff --git a/content/en/blog/_posts/2022-07-13-gateway-api-in-beta.md b/content/en/blog/_posts/2022-07-13-gateway-api-in-beta.md index 878c0c4fbf..ad083eb217 100644 --- a/content/en/blog/_posts/2022-07-13-gateway-api-in-beta.md +++ b/content/en/blog/_posts/2022-07-13-gateway-api-in-beta.md @@ -4,10 +4,13 @@ title: Kubernetes Gateway API Graduates to Beta date: 2022-07-13 slug: gateway-api-graduates-to-beta canonicalUrl: https://gateway-api.sigs.k8s.io/blog/2022/graduating-to-beta/ +author: > + Shane Utt (Kong), + Rob Scott (Google), + Nick Young (VMware), + Jeff Apple (HashiCorp) --- -**Authors:** Shane Utt (Kong), Rob Scott (Google), Nick Young (VMware), Jeff Apple (HashiCorp) - We are excited to announce the v0.5.0 release of Gateway API. For the first time, several of our most important Gateway API resources are graduating to beta. Additionally, we are starting a new initiative to explore how Gateway API diff --git a/content/en/blog/_posts/2022-08-02-sig-docs-spotlight/index.md b/content/en/blog/_posts/2022-08-02-sig-docs-spotlight/index.md index 63fc79e01c..26559d66a9 100644 --- a/content/en/blog/_posts/2022-08-02-sig-docs-spotlight/index.md +++ b/content/en/blog/_posts/2022-08-02-sig-docs-spotlight/index.md @@ -4,10 +4,10 @@ title: "Spotlight on SIG Docs" date: 2022-08-02 slug: sig-docs-spotlight-2022 canonicalUrl: https://kubernetes.dev/blog/2022/08/02/sig-docs-spotlight-2022/ +author: > + Purneswar Prasad --- -**Author:** Purneswar Prasad - ## Introduction The official documentation is the go-to source for any open source project. For Kubernetes, diff --git a/content/en/blog/_posts/2022-08-03-kms-v2-alpha.md b/content/en/blog/_posts/2022-08-03-kms-v2-alpha.md index 1f6a1f4e47..6279ae8b60 100644 --- a/content/en/blog/_posts/2022-08-03-kms-v2-alpha.md +++ b/content/en/blog/_posts/2022-08-03-kms-v2-alpha.md @@ -3,10 +3,13 @@ layout: blog title: "Kubernetes 1.25: KMS V2 Improvements" date: 2022-09-09 slug: kms-v2-improvements +author: > + Anish Ramasekar, + Rita Zhang, + Mo Khan, + Xander Grzywinski (Microsoft) --- -**Authors:** Anish Ramasekar, Rita Zhang, Mo Khan, and Xander Grzywinski (Microsoft) - With Kubernetes v1.25, SIG Auth is introducing a new `v2alpha1` version of the Key Management Service (KMS) API. There are a lot of improvements in the works, and we're excited to be able to start down the path of a new and improved KMS! ## What is KMS? diff --git a/content/en/blog/_posts/2022-08-04-kubernetes-1.25-deprecations-and-removals.md b/content/en/blog/_posts/2022-08-04-kubernetes-1.25-deprecations-and-removals.md index f94b43a96b..6ad3f64896 100644 --- a/content/en/blog/_posts/2022-08-04-kubernetes-1.25-deprecations-and-removals.md +++ b/content/en/blog/_posts/2022-08-04-kubernetes-1.25-deprecations-and-removals.md @@ -3,10 +3,12 @@ layout: blog title: "Kubernetes Removals and Major Changes In 1.25" date: 2022-08-04 slug: upcoming-changes-in-kubernetes-1-25 +author: > + Kat Cosgrove, + Frederico Muñoz, + Debabrata Panigrahi --- -**Authors**: Kat Cosgrove, Frederico Muñoz, Debabrata Panigrahi - As Kubernetes grows and matures, features may be deprecated, removed, or replaced with improvements for the health of the project. Kubernetes v1.25 includes several major changes and one major removal. ## The Kubernetes API Removal and Deprecation process diff --git a/content/en/blog/_posts/2022-08-11-enhancing-kubernetes-one-kep-at-a-time/index.md b/content/en/blog/_posts/2022-08-11-enhancing-kubernetes-one-kep-at-a-time/index.md index 3242330e31..499c82e3a3 100644 --- a/content/en/blog/_posts/2022-08-11-enhancing-kubernetes-one-kep-at-a-time/index.md +++ b/content/en/blog/_posts/2022-08-11-enhancing-kubernetes-one-kep-at-a-time/index.md @@ -4,10 +4,10 @@ title: "Enhancing Kubernetes one KEP at a Time" date: 2022-08-11 slug: enhancing-kubernetes-one-kep-at-a-time canonicalUrl: https://www.k8s.dev/blog/2022/08/11/enhancing-kubernetes-one-kep-at-a-time/ +author: > + Ryler Hockenbury (Mastercard) --- -**Author:** Ryler Hockenbury (Mastercard) - Did you know that Kubernetes v1.24 has [46 enhancements](https://kubernetes.io/blog/2022/05/03/kubernetes-1-24-release-announcement/)? That's a lot of new functionality packed into a 4-month release cycle. The Kubernetes release team coordinates the logistics of the release, from remediating test flakes to publishing updated docs. It's a ton of work, but they always deliver. The release team comprises around 30 people across six subteams - Bug Triage, CI Signal, Enhancements, Release Notes, Communications, and Docs.  Each of these subteams manages a component of the release. This post will focus on the role of the enhancements subteam and how you can get involved. diff --git a/content/en/blog/_posts/2022-08-16-PSP-historical-context/index.md b/content/en/blog/_posts/2022-08-16-PSP-historical-context/index.md index 6f9ff9ac4e..28f2254591 100644 --- a/content/en/blog/_posts/2022-08-16-PSP-historical-context/index.md +++ b/content/en/blog/_posts/2022-08-16-PSP-historical-context/index.md @@ -4,10 +4,10 @@ title: "PodSecurityPolicy: The Historical Context" date: 2022-08-23T15:00:00-0800 slug: podsecuritypolicy-the-historical-context evergreen: true +author: > + Mahé Tardy (Quarkslab) --- -**Author:** Mahé Tardy (Quarkslab) - The PodSecurityPolicy (PSP) admission controller has been removed, as of Kubernetes v1.25. Its deprecation was announced and detailed in the blog post [PodSecurityPolicy Deprecation: Past, Present, and Future](/blog/2021/04/06/podsecuritypolicy-deprecation-past-present-and-future/), diff --git a/content/en/blog/_posts/2022-08-18-kubernetes-1.24-release-interview.md b/content/en/blog/_posts/2022-08-18-kubernetes-1.24-release-interview.md index f7a2dc84c2..f9fa5872ca 100644 --- a/content/en/blog/_posts/2022-08-18-kubernetes-1.24-release-interview.md +++ b/content/en/blog/_posts/2022-08-18-kubernetes-1.24-release-interview.md @@ -2,10 +2,10 @@ layout: blog title: "Stargazing, solutions and staycations: the Kubernetes 1.24 release interview" date: 2022-08-18 +author: > + Craig Box (Google) --- -**Author**: Craig Box (Google) - The Kubernetes project has participants from all around the globe. Some are friends, some are colleagues, and some are strangers. The one thing that unifies them, no matter their differences, are that they all have an interesting story. It is my pleasure to be the documentarian for the stories of the Kubernetes community in the weekly [Kubernetes Podcast from Google](https://kubernetespodcast.com/). With every new Kubernetes release comes an interview with the release team lead, telling the story of that release, but also their own personal story. With 1.25 around the corner, [the tradition continues](https://www.google.com/search?q=%22release+interview%22+site%3Akubernetes.io%2Fblog) with a look back at the story of 1.24. That release was led by [James Laverack](https://twitter.com/jameslaverack) of Jetstack. [James was on the podcast](https://kubernetespodcast.com/episode/178-kubernetes-1.24/) in May, and while you can read his story below, if you can, please do listen to it in his own voice. diff --git a/content/en/blog/_posts/2022-08-22-sig-storage-spotlight.md b/content/en/blog/_posts/2022-08-22-sig-storage-spotlight.md index 9a02e24375..d13a2e22cf 100644 --- a/content/en/blog/_posts/2022-08-22-sig-storage-spotlight.md +++ b/content/en/blog/_posts/2022-08-22-sig-storage-spotlight.md @@ -4,10 +4,10 @@ title: "Spotlight on SIG Storage" slug: sig-storage-spotlight date: 2022-08-22 canonicalUrl: https://www.kubernetes.dev/blog/2022/08/22/sig-storage-spotlight-2022/ +author: > + Frederico Muñoz (SAS) --- -**Author**: Frederico Muñoz (SAS) - Since the very beginning of Kubernetes, the topic of persistent data and how to address the requirement of stateful applications has been an important topic. Support for stateless deployments was natural, present from the start, and garnered attention, becoming very well-known. Work on better support for stateful applications was also present from early on, with each release increasing the scope of what could be run on Kubernetes. Message queues, databases, clustered filesystems: these are some examples of the solutions that have different storage requirements and that are, today, increasingly deployed in Kubernetes. Dealing with ephemeral and persistent storage, local or remote, file or block, from many different vendors, while considering how to provide the needed resiliency and data consistency that users expect, all of this is under SIG Storage's umbrella. diff --git a/content/en/blog/_posts/2022-08-23-kubernetes-1.25-blog.md b/content/en/blog/_posts/2022-08-23-kubernetes-1.25-blog.md index d52fbfd37f..bd97639377 100644 --- a/content/en/blog/_posts/2022-08-23-kubernetes-1.25-blog.md +++ b/content/en/blog/_posts/2022-08-23-kubernetes-1.25-blog.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes v1.25: Combiner" date: 2022-08-23 slug: kubernetes-v1-25-release +author: > + [Kubernetes 1.25 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.25/release-team.md) --- -**Authors**: [Kubernetes 1.25 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.25/release-team.md) - Announcing the release of Kubernetes v1.25! This release includes a total of 40 enhancements. Fifteen of those enhancements are entering Alpha, ten are graduating to Beta, and thirteen are graduating to Stable. We also have two features being deprecated or removed. diff --git a/content/en/blog/_posts/2022-08-25-pod-security/index.md b/content/en/blog/_posts/2022-08-25-pod-security/index.md index a689f96274..24638b470a 100644 --- a/content/en/blog/_posts/2022-08-25-pod-security/index.md +++ b/content/en/blog/_posts/2022-08-25-pod-security/index.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes v1.25: Pod Security Admission Controller in Stable" date: 2022-08-25 slug: pod-security-admission-stable +author: > + Tim Allclair (Google), + Sam Stoelinga (Google) --- -**Authors:** Tim Allclair (Google), Sam Stoelinga (Google) - The release of Kubernetes v1.25 marks a major milestone for Kubernetes out-of-the-box pod security controls: Pod Security admission (PSA) graduated to stable, and Pod Security Policy (PSP) has been removed. diff --git a/content/en/blog/_posts/2022-08-29-csi-inline-volumes-ga.md b/content/en/blog/_posts/2022-08-29-csi-inline-volumes-ga.md index 4a0dc5efcd..e53da487c1 100644 --- a/content/en/blog/_posts/2022-08-29-csi-inline-volumes-ga.md +++ b/content/en/blog/_posts/2022-08-29-csi-inline-volumes-ga.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes 1.25: CSI Inline Volumes have graduated to GA" date: 2022-08-29 slug: csi-inline-volumes-ga +author: > + Jonathan Dobson (Red Hat) --- -**Author:** Jonathan Dobson (Red Hat) - CSI Inline Volumes were introduced as an alpha feature in Kubernetes 1.15 and have been beta since 1.16. We are happy to announce that this feature has graduated to General Availability (GA) status in Kubernetes 1.25. CSI Inline Volumes are similar to other ephemeral volume types, such as `configMap`, `downwardAPI` and `secret`. The important difference is that the storage is provided by a CSI driver, which allows the use of ephemeral storage provided by third-party vendors. The volume is defined as part of the pod spec and follows the lifecycle of the pod, meaning the volume is created once the pod is scheduled and destroyed when the pod is destroyed. diff --git a/content/en/blog/_posts/2022-08-31-cgroupv2-ga.md b/content/en/blog/_posts/2022-08-31-cgroupv2-ga.md index 4071d44581..aa56146952 100644 --- a/content/en/blog/_posts/2022-08-31-cgroupv2-ga.md +++ b/content/en/blog/_posts/2022-08-31-cgroupv2-ga.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes 1.25: cgroup v2 graduates to GA" date: 2022-08-31 slug: cgroupv2-ga-1-25 +author: > + David Porter (Google), + Mrunal Patel (Red Hat) --- -**Authors:**: David Porter (Google), Mrunal Patel (Red Hat) - Kubernetes 1.25 brings cgroup v2 to GA (general availability), letting the [kubelet](/docs/concepts/overview/components/#kubelet) use the latest container resource management capabilities. diff --git a/content/en/blog/_posts/2022-09-02-cosi-kubernetes-object-storage-management.md b/content/en/blog/_posts/2022-09-02-cosi-kubernetes-object-storage-management.md index 9f20a5acbb..3445eacdaa 100644 --- a/content/en/blog/_posts/2022-09-02-cosi-kubernetes-object-storage-management.md +++ b/content/en/blog/_posts/2022-09-02-cosi-kubernetes-object-storage-management.md @@ -3,10 +3,10 @@ layout: blog title: "Introducing COSI: Object Storage Management using Kubernetes APIs" date: 2022-09-02 slug: cosi-kubernetes-object-storage-management +author: > + Sidhartha Mani ([Minio, Inc](https://min.io)) --- -**Authors:** Sidhartha Mani ([Minio, Inc](https://min.io)) - This article introduces the Container Object Storage Interface (COSI), a standard for provisioning and consuming object storage in Kubernetes. It is an alpha feature in Kubernetes v1.25. File and block storage are treated as first class citizens in the Kubernetes ecosystem via [Container Storage Interface](https://kubernetes.io/blog/2019/01/15/container-storage-interface-ga/) (CSI). Workloads using CSI volumes enjoy the benefits of portability across vendors and across Kubernetes clusters without the need to change application manifests. An equivalent standard does not exist for Object storage. diff --git a/content/en/blog/_posts/2022-09-07-iptables-chains.md b/content/en/blog/_posts/2022-09-07-iptables-chains.md index 3bbb27601e..c3920574f5 100644 --- a/content/en/blog/_posts/2022-09-07-iptables-chains.md +++ b/content/en/blog/_posts/2022-09-07-iptables-chains.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes’s IPTables Chains Are Not API" date: 2022-09-07 slug: iptables-chains-not-api +author: > + Dan Winship (Red Hat) --- -**Author:** Dan Winship (Red Hat) - Some Kubernetes components (such as kubelet and kube-proxy) create iptables chains and rules as part of their operation. These chains were never intended to be part of any Kubernetes API/ABI guarantees, diff --git a/content/en/blog/_posts/2022-09-12-Announcing-the-Auto-Refreshing-Official-CVE-Feed/index.md b/content/en/blog/_posts/2022-09-12-Announcing-the-Auto-Refreshing-Official-CVE-Feed/index.md index 7697ac8e92..ef102c5a5d 100644 --- a/content/en/blog/_posts/2022-09-12-Announcing-the-Auto-Refreshing-Official-CVE-Feed/index.md +++ b/content/en/blog/_posts/2022-09-12-Announcing-the-Auto-Refreshing-Official-CVE-Feed/index.md @@ -3,10 +3,10 @@ layout: blog title: Announcing the Auto-refreshing Official Kubernetes CVE Feed date: 2022-09-12 slug: k8s-cve-feed-alpha +author: > + Pushkar Joglekar (VMware) --- -**Author**: Pushkar Joglekar (VMware) - A long-standing request from the Kubernetes community has been to have a programmatic way for end users to keep track of Kubernetes security issues (also called "CVEs", after the database that tracks public security issues across diff --git a/content/en/blog/_posts/2022-09-14-pod-has-network-condition.md b/content/en/blog/_posts/2022-09-14-pod-has-network-condition.md index beb4b07c47..905ae447bb 100644 --- a/content/en/blog/_posts/2022-09-14-pod-has-network-condition.md +++ b/content/en/blog/_posts/2022-09-14-pod-has-network-condition.md @@ -3,11 +3,10 @@ layout: blog title: 'Kubernetes 1.25: PodHasNetwork Condition for Pods' date: 2022-09-14 slug: pod-has-network-condition +author: > + Deep Debroy (Apple) --- -**Author:** -Deep Debroy (Apple) - Kubernetes 1.25 introduces Alpha support for a new kubelet-managed pod condition in the status field of a pod: `PodHasNetwork`. The kubelet, for a worker node, will use the `PodHasNetwork` condition to accurately surface the initialization diff --git a/content/en/blog/_posts/2022-09-15-sig-apps-GA-1.25/index.md b/content/en/blog/_posts/2022-09-15-sig-apps-GA-1.25/index.md index 0761bb9a5b..23930e473d 100644 --- a/content/en/blog/_posts/2022-09-15-sig-apps-GA-1.25/index.md +++ b/content/en/blog/_posts/2022-09-15-sig-apps-GA-1.25/index.md @@ -3,10 +3,12 @@ layout: blog title: "Kubernetes 1.25: Two Features for Apps Rollouts Graduate to Stable" date: 2022-09-15 slug: "app-rollout-features-reach-stable" +author: > + Ravi Gudimetla (Apple), + Filip Křepinský (Red Hat), + Maciej Szulik (Red Hat) --- -**Authors:** Ravi Gudimetla (Apple), Filip Křepinský (Red Hat), Maciej Szulik (Red Hat) - This blog describes the two features namely `minReadySeconds` for StatefulSets and `maxSurge` for DaemonSets that SIG Apps is happy to graduate to stable in Kubernetes 1.25. Specifying `minReadySeconds` slows down a rollout of a StatefulSet, when using a `RollingUpdate` value in `.spec.updateStrategy` field, by waiting for each pod for a desired time. diff --git a/content/en/blog/_posts/2022-09-19-local-storage-capacity-isolation-ga.md b/content/en/blog/_posts/2022-09-19-local-storage-capacity-isolation-ga.md index 1ede9ddb84..89e76d2060 100644 --- a/content/en/blog/_posts/2022-09-19-local-storage-capacity-isolation-ga.md +++ b/content/en/blog/_posts/2022-09-19-local-storage-capacity-isolation-ga.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes 1.25: Local Storage Capacity Isolation Reaches GA" date: 2022-09-19 slug: local-storage-capacity-isolation-ga +author: > + Jing Xu (Google) --- -**Author:** Jing Xu (Google) - Local ephemeral storage capacity isolation was introduced as a alpha feature in Kubernetes 1.7 and it went beta in 1.9. With Kubernetes 1.25 we are excited to announce general availability(GA) of this feature. Pods use ephemeral local storage for scratch space, caching, and logs. The lifetime of local ephemeral storage does not extend beyond the life of the individual pod. It is exposed to pods using the container’s writable layer, logs directory, and `EmptyDir` volumes. Before this feature was introduced, there were issues related to the lack of local storage accounting and isolation, such as Pods not knowing how much local storage is available and being unable to request guaranteed local storage. Local storage is a best-effort resource and pods can be evicted due to other pods filling the local storage. diff --git a/content/en/blog/_posts/2022-09-21-csi-nodeexpandsecret.md b/content/en/blog/_posts/2022-09-21-csi-nodeexpandsecret.md index f00fa06b6f..fd80739cd1 100644 --- a/content/en/blog/_posts/2022-09-21-csi-nodeexpandsecret.md +++ b/content/en/blog/_posts/2022-09-21-csi-nodeexpandsecret.md @@ -4,10 +4,11 @@ title: >- Kubernetes 1.25: Use Secrets for Node-Driven Expansion of CSI Volumes date: 2022-09-21 slug: kubernetes-1-25-use-secrets-while-expanding-csi-volumes-on-node-alpha +author: > + Humble Chirammal (Red Hat), + Louis Koo (deeproute.ai) --- -**Author:** Humble Chirammal (Red Hat), Louis Koo (deeproute.ai) - Kubernetes v1.25, released earlier this month, introduced a new feature that lets your cluster expand storage volumes, even when access to those volumes requires a secret (for example: a credential for accessing a SAN fabric) diff --git a/content/en/blog/_posts/2022-09-23-crd-validation-rules-graduate-to-beta.md b/content/en/blog/_posts/2022-09-23-crd-validation-rules-graduate-to-beta.md index 72fb650e43..652783be09 100644 --- a/content/en/blog/_posts/2022-09-23-crd-validation-rules-graduate-to-beta.md +++ b/content/en/blog/_posts/2022-09-23-crd-validation-rules-graduate-to-beta.md @@ -3,10 +3,12 @@ layout: blog title: "Kubernetes 1.25: CustomResourceDefinition Validation Rules Graduate to Beta" date: 2022-09-23 slug: crd-validation-rules-beta +author: > + Joe Betz (Google), + Cici Huang (Google), + Kermit Alexander (Google) --- -**Authors:** Joe Betz (Google), Cici Huang (Google), Kermit Alexander (Google) - In Kubernetes 1.25, [Validation rules for CustomResourceDefinitions](/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#validation-rules) (CRDs) have graduated to Beta! Validation rules make it possible to declare how custom resources are validated using the [Common Expression Language](https://github.com/google/cel-spec) (CEL). For example: diff --git a/content/en/blog/_posts/2022-09-26-csi-migration-status.md b/content/en/blog/_posts/2022-09-26-csi-migration-status.md index f8ce6e03c9..96fc6b42b1 100644 --- a/content/en/blog/_posts/2022-09-26-csi-migration-status.md +++ b/content/en/blog/_posts/2022-09-26-csi-migration-status.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes 1.25: Kubernetes In-Tree to CSI Volume Migration Status Update" date: 2022-09-26 slug: storage-in-tree-to-csi-migration-status-update-1.25 +author: > + Jiawei Wang (Google) --- -**Author:** Jiawei Wang (Google) - The Kubernetes in-tree storage plugin to [Container Storage Interface (CSI)](/blog/2019/01/15/container-storage-interface-ga/) migration infrastructure has already been [beta](/blog/2019/12/09/kubernetes-1-17-feature-csi-migration-beta/) since v1.17. CSI migration was introduced as alpha in Kubernetes v1.14. Since then, SIG Storage and other Kubernetes special interest groups are working to ensure feature stability and compatibility in preparation for CSI Migration feature to go GA. diff --git a/content/en/blog/_posts/2022-09-29-immutability-with-cel.md b/content/en/blog/_posts/2022-09-29-immutability-with-cel.md index a49b36716a..d6433e6930 100644 --- a/content/en/blog/_posts/2022-09-29-immutability-with-cel.md +++ b/content/en/blog/_posts/2022-09-29-immutability-with-cel.md @@ -3,10 +3,10 @@ layout: blog title: "Enforce CRD Immutability with CEL Transition Rules" date: 2022-09-29 slug: enforce-immutability-using-cel +author: > + [Alexander Zielenski](https://github.com/alexzielenski) (Google) --- -**Author:** [Alexander Zielenski](https://github.com/alexzielenski) (Google) - Immutable fields can be found in a few places in the built-in Kubernetes types. For example, you can't change the `.metadata.name` of an object. Specific objects have fields where changes to existing objects are constrained; for example, the diff --git a/content/en/blog/_posts/2022-10-03-add-userns-alpha/index.md b/content/en/blog/_posts/2022-10-03-add-userns-alpha/index.md index df51fb4751..35d95b00a2 100644 --- a/content/en/blog/_posts/2022-10-03-add-userns-alpha/index.md +++ b/content/en/blog/_posts/2022-10-03-add-userns-alpha/index.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes 1.25: alpha support for running Pods with user namespaces" date: 2022-10-03 slug: userns-alpha +author: > + Rodrigo Campos (Microsoft), + Giuseppe Scrivano (Red Hat) --- -**Authors:** Rodrigo Campos (Microsoft), Giuseppe Scrivano (Red Hat) - Kubernetes v1.25 introduces the support for user namespaces. This is a major improvement for running secure workloads in diff --git a/content/en/blog/_posts/2022-10-04-introducing-kueue.md b/content/en/blog/_posts/2022-10-04-introducing-kueue.md index 65f9a05b8d..48417a72d2 100644 --- a/content/en/blog/_posts/2022-10-04-introducing-kueue.md +++ b/content/en/blog/_posts/2022-10-04-introducing-kueue.md @@ -3,10 +3,11 @@ layout: blog title: "Introducing Kueue" date: 2022-10-04 slug: introducing-kueue +author: > + Abdullah Gharaibeh (Google), + Aldo Culquicondor (Google) --- -**Authors:** Abdullah Gharaibeh (Google), Aldo Culquicondor (Google) - Whether on-premises or in the cloud, clusters face real constraints for resource usage, quota, and cost management reasons. Regardless of the autoscalling capabilities, clusters have finite capacity. As a result, users want an easy way to fairly and efficiently share resources. diff --git a/content/en/blog/_posts/2022-10-05-current-state-2019-third-party-audit.md b/content/en/blog/_posts/2022-10-05-current-state-2019-third-party-audit.md index d7a7effe87..05f999ba4b 100644 --- a/content/en/blog/_posts/2022-10-05-current-state-2019-third-party-audit.md +++ b/content/en/blog/_posts/2022-10-05-current-state-2019-third-party-audit.md @@ -4,10 +4,13 @@ title: "Current State: 2019 Third Party Security Audit of Kubernetes" date: 2022-10-05 slug: current-state-2019-third-party-audit evergreen: true +author: > + Cailyn Edwards (Shopify), + Pushkar Joglekar (VMware), + Rey Lejano (SUSE), + Rory McCune (DataDog) --- -**Authors** (in alphabetical order): Cailyn Edwards (Shopify), Pushkar Joglekar (VMware), Rey Lejano (SUSE) and Rory McCune (DataDog) - We expect the brand new Third Party Security Audit of Kubernetes will be published later this month (Oct 2022). diff --git a/content/en/blog/_posts/2022-10-18-kubernetes-1.26-deprecations-and-removals.md b/content/en/blog/_posts/2022-10-18-kubernetes-1.26-deprecations-and-removals.md index 3dc8a65ef8..449c8ea010 100644 --- a/content/en/blog/_posts/2022-10-18-kubernetes-1.26-deprecations-and-removals.md +++ b/content/en/blog/_posts/2022-10-18-kubernetes-1.26-deprecations-and-removals.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes Removals, Deprecations, and Major Changes in 1.26" date: 2022-11-18 slug: upcoming-changes-in-kubernetes-1-26 +author: > + Frederico Muñoz (SAS) --- -**Author**: Frederico Muñoz (SAS) - Change is an integral part of the Kubernetes life-cycle: as Kubernetes grows and matures, features may be deprecated, removed, or replaced with improvements for the health of the project. For Kubernetes v1.26 there are several planned: this article identifies and describes some of them, based on the information available at this mid-cycle point in the v1.26 release process, which is still ongoing and can introduce additional changes. ## The Kubernetes API Removal and Deprecation process {#k8s-api-deprecation-process} diff --git a/content/en/blog/_posts/2022-10-20-advanced-server-side-apply.md b/content/en/blog/_posts/2022-10-20-advanced-server-side-apply.md index c301fbe826..17114c1968 100644 --- a/content/en/blog/_posts/2022-10-20-advanced-server-side-apply.md +++ b/content/en/blog/_posts/2022-10-20-advanced-server-side-apply.md @@ -3,10 +3,10 @@ layout: blog title: "Server Side Apply Is Great And You Should Be Using It" date: 2022-10-20 slug: advanced-server-side-apply +author: > + Daniel Smith (Google) --- -**Author:** Daniel Smith (Google) - [Server-side apply](/docs/reference/using-api/server-side-apply/) (SSA) has now been [GA for a few releases](/blog/2021/08/06/server-side-apply-ga/), and I have found myself in a number of conversations, recommending that people / teams diff --git a/content/en/blog/_posts/2022-11-04-live-and-let-live-with-kluctl-and-ssa.md b/content/en/blog/_posts/2022-11-04-live-and-let-live-with-kluctl-and-ssa.md index 28a214dc1d..77e511ebe7 100644 --- a/content/en/blog/_posts/2022-11-04-live-and-let-live-with-kluctl-and-ssa.md +++ b/content/en/blog/_posts/2022-11-04-live-and-let-live-with-kluctl-and-ssa.md @@ -3,10 +3,10 @@ layout: blog title: "Live and let live with Kluctl and Server Side Apply" date: 2022-11-04 slug: live-and-let-live-with-kluctl-and-ssa +author: > + Alexander Block --- -**Author:** Alexander Block - This blog post was inspired by a previous Kubernetes blog post about [Advanced Server Side Apply](https://kubernetes.io/blog/2022/10/20/advanced-server-side-apply/). The author of said blog post listed multiple benefits for applications and diff --git a/content/en/blog/_posts/2022-11-28-registry-k8s-io-change.md b/content/en/blog/_posts/2022-11-28-registry-k8s-io-change.md index beae7327c6..8db8236c5a 100644 --- a/content/en/blog/_posts/2022-11-28-registry-k8s-io-change.md +++ b/content/en/blog/_posts/2022-11-28-registry-k8s-io-change.md @@ -3,10 +3,11 @@ layout: blog title: "registry.k8s.io: faster, cheaper and Generally Available (GA)" date: 2022-11-28 slug: registry-k8s-io-faster-cheaper-ga +author: > + Adolfo García Veytia (Chainguard), + Bob Killen (Google) --- -**Authors**: Adolfo García Veytia (Chainguard), Bob Killen (Google) - Starting with Kubernetes 1.25, our container image registry has changed from k8s.gcr.io to [registry.k8s.io](https://registry.k8s.io). This new registry spreads the load across multiple Cloud Providers & Regions, functioning as a sort of content delivery network (CDN) for Kubernetes container images. This change reduces the project’s reliance on a single entity and provides a faster download experience for a large number of users. ## TL;DR: What you need to know about this change diff --git a/content/en/blog/_posts/2022-12-01-runtime-observability-opentelemetry/index.md b/content/en/blog/_posts/2022-12-01-runtime-observability-opentelemetry/index.md index 389089e9de..d43f4690f2 100644 --- a/content/en/blog/_posts/2022-12-01-runtime-observability-opentelemetry/index.md +++ b/content/en/blog/_posts/2022-12-01-runtime-observability-opentelemetry/index.md @@ -3,10 +3,10 @@ layout: blog title: "Boosting Kubernetes container runtime observability with OpenTelemetry" date: 2022-12-01 slug: runtime-observability-opentelemetry +author: > + Sascha Grunert --- -**Authors:** Sascha Grunert - When speaking about observability in the cloud native space, then probably everyone will mention [OpenTelemetry (OTEL)][otel] at some point in the conversation. That's great, because the community needs standards to rely on diff --git a/content/en/blog/_posts/2022-12-02-seccomp-notifier.md b/content/en/blog/_posts/2022-12-02-seccomp-notifier.md index 55b4e502a9..2373593d72 100644 --- a/content/en/blog/_posts/2022-12-02-seccomp-notifier.md +++ b/content/en/blog/_posts/2022-12-02-seccomp-notifier.md @@ -3,10 +3,10 @@ layout: blog title: "Finding suspicious syscalls with the seccomp notifier" date: 2022-12-02 slug: seccomp-notifier +author: > + Sascha Grunert --- -**Authors:** Sascha Grunert - Debugging software in production is one of the biggest challenges we have to face in our containerized environments. Being able to understand the impact of the available security options, especially when it comes to configuring our diff --git a/content/en/blog/_posts/2022-12-05-forensic-container-checkpointing/index.md b/content/en/blog/_posts/2022-12-05-forensic-container-checkpointing/index.md index 74841bf450..23c3ee0252 100644 --- a/content/en/blog/_posts/2022-12-05-forensic-container-checkpointing/index.md +++ b/content/en/blog/_posts/2022-12-05-forensic-container-checkpointing/index.md @@ -3,10 +3,10 @@ layout: blog title: "Forensic container checkpointing in Kubernetes" date: 2022-12-05 slug: forensic-container-checkpointing-alpha +author: > + Adrian Reber (Red Hat) --- -**Authors:** Adrian Reber (Red Hat) - Forensic container checkpointing is based on [Checkpoint/Restore In Userspace](https://criu.org/) (CRIU) and allows the creation of stateful copies of a running container without the container knowing that it is being diff --git a/content/en/blog/_posts/2022-12-09-kubernetes-1.26-blog.md b/content/en/blog/_posts/2022-12-09-kubernetes-1.26-blog.md index 90c4a03cf5..44e6e38abe 100644 --- a/content/en/blog/_posts/2022-12-09-kubernetes-1.26-blog.md +++ b/content/en/blog/_posts/2022-12-09-kubernetes-1.26-blog.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes v1.26: Electrifying" date: 2022-12-09 slug: kubernetes-v1-26-release +author: > + [Kubernetes 1.26 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.26/release-team.md) --- -**Authors**: [Kubernetes 1.26 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.26/release-team.md) - It's with immense joy that we announce the release of Kubernetes v1.26! This release includes a total of 37 enhancements: eleven of them are graduating to Stable, ten are diff --git a/content/en/blog/_posts/2022-12-12-kubernetes-release-artifact-signing.md b/content/en/blog/_posts/2022-12-12-kubernetes-release-artifact-signing.md index 23dbea4c66..90584529d5 100644 --- a/content/en/blog/_posts/2022-12-12-kubernetes-release-artifact-signing.md +++ b/content/en/blog/_posts/2022-12-12-kubernetes-release-artifact-signing.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes 1.26: We're now signing our binary release artifacts!" date: 2022-12-12 slug: kubernetes-release-artifact-signing +author: > + Sascha Grunert --- -**Author:** Sascha Grunert - The Kubernetes Special Interest Group (SIG) Release is proud to announce that we are digitally signing all release artifacts, and that this aspect of Kubernetes has now reached _beta_. diff --git a/content/en/blog/_posts/2022-12-13-host-process-containers-ga/index.md b/content/en/blog/_posts/2022-12-13-host-process-containers-ga/index.md index f65f0ad9ef..9524bf0692 100644 --- a/content/en/blog/_posts/2022-12-13-host-process-containers-ga/index.md +++ b/content/en/blog/_posts/2022-12-13-host-process-containers-ga/index.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes 1.26: Windows HostProcess Containers Are Generally Available" date: 2022-12-13 slug: windows-host-process-containers-ga +author: > + Brandon Smith (Microsoft), + Mark Rossetti (Microsoft) --- -**Authors**: Brandon Smith (Microsoft) and Mark Rossetti (Microsoft) - The long-awaited day has arrived: HostProcess containers, the Windows equivalent to Linux privileged containers, has finally made it to **GA in Kubernetes 1.26**! diff --git a/content/en/blog/_posts/2022-12-15-dynamic-resource-allocation-alpha/index.md b/content/en/blog/_posts/2022-12-15-dynamic-resource-allocation-alpha/index.md index ac3d34df80..562f48f731 100644 --- a/content/en/blog/_posts/2022-12-15-dynamic-resource-allocation-alpha/index.md +++ b/content/en/blog/_posts/2022-12-15-dynamic-resource-allocation-alpha/index.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes 1.26: Alpha API For Dynamic Resource Allocation" date: 2022-12-15 slug: dynamic-resource-allocation +author: > + Patrick Ohly (Intel), + Kevin Klues (NVIDIA) --- -**Authors:** Patrick Ohly (Intel), Kevin Klues (NVIDIA) - Dynamic resource allocation is a new API for requesting resources. It is a generalization of the persistent volumes API for generic resources, making it possible to: diff --git a/content/en/blog/_posts/2022-12-16-non-graceful-node-shutdown-to-beta.md b/content/en/blog/_posts/2022-12-16-non-graceful-node-shutdown-to-beta.md index dcc61e1398..d1281e3a81 100644 --- a/content/en/blog/_posts/2022-12-16-non-graceful-node-shutdown-to-beta.md +++ b/content/en/blog/_posts/2022-12-16-non-graceful-node-shutdown-to-beta.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes 1.26: Non-Graceful Node Shutdown Moves to Beta" date: 2022-12-16T10:00:00-08:00 slug: kubernetes-1-26-non-graceful-node-shutdown-beta +author: > + Xing Yang (VMware), + Ashutosh Kumar (VMware) --- -**Author:** Xing Yang (VMware), Ashutosh Kumar (VMware) - Kubernetes v1.24 [introduced](https://kubernetes.io/blog/2022/05/20/kubernetes-1-24-non-graceful-node-shutdown-alpha/) an alpha quality implementation of improvements for handling a [non-graceful node shutdown](/docs/concepts/architecture/nodes/#non-graceful-node-shutdown). In Kubernetes v1.26, this feature moves to beta. This feature allows stateful workloads to failover to a different node after the original node is shut down or in a non-recoverable state, such as the hardware failure or broken OS. diff --git a/content/en/blog/_posts/2022-12-19-devicemanager-ga.md/index.md b/content/en/blog/_posts/2022-12-19-devicemanager-ga.md/index.md index d3b7102efb..2c96ef8289 100644 --- a/content/en/blog/_posts/2022-12-19-devicemanager-ga.md/index.md +++ b/content/en/blog/_posts/2022-12-19-devicemanager-ga.md/index.md @@ -3,10 +3,10 @@ layout: blog title: 'Kubernetes 1.26: Device Manager graduates to GA' date: 2022-12-19 slug: devicemanager-ga +author: > + Swati Sehgal (Red Hat) --- -**Author:** Swati Sehgal (Red Hat) - The Device Plugin framework was introduced in the Kubernetes v1.8 release as a vendor independent framework to enable discovery, advertisement and allocation of external devices without modifying core Kubernetes. The feature graduated to Beta in v1.10. diff --git a/content/en/blog/_posts/2022-12-20-validating-admission-policies-alpha/index.md b/content/en/blog/_posts/2022-12-20-validating-admission-policies-alpha/index.md index fbbee4ab6d..28c042c711 100644 --- a/content/en/blog/_posts/2022-12-20-validating-admission-policies-alpha/index.md +++ b/content/en/blog/_posts/2022-12-20-validating-admission-policies-alpha/index.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes 1.26: Introducing Validating Admission Policies" date: 2022-12-20 slug: validating-admission-policies-alpha +author: > + Joe Betz (Google), + Cici Huang (Google) --- -**Authors:** Joe Betz (Google), Cici Huang (Google) - In Kubernetes 1.26, the 1st alpha release of validating admission policies is available! diff --git a/content/en/blog/_posts/2022-12-22-kubelet-credential-providers/index.md b/content/en/blog/_posts/2022-12-22-kubelet-credential-providers/index.md index 628bc8af05..55fd6ef2f8 100644 --- a/content/en/blog/_posts/2022-12-22-kubelet-credential-providers/index.md +++ b/content/en/blog/_posts/2022-12-22-kubelet-credential-providers/index.md @@ -3,10 +3,11 @@ layout: blog title: 'Kubernetes v1.26: GA Support for Kubelet Credential Providers' date: 2022-12-22 slug: kubelet-credential-providers +author: > + Andrew Sy Kim (Google), + Dixita Narang (Google) --- -**Authors:** Andrew Sy Kim (Google), Dixita Narang (Google) - Kubernetes v1.26 introduced generally available (GA) support for [_kubelet credential provider plugins_]( /docs/tasks/kubelet-credential-provider/kubelet-credential-provider/), offering an extensible plugin framework to dynamically fetch credentials diff --git a/content/en/blog/_posts/2022-12-23-fsgroup-on-mount.md b/content/en/blog/_posts/2022-12-23-fsgroup-on-mount.md index 671334c489..5fdfe4c9bd 100644 --- a/content/en/blog/_posts/2022-12-23-fsgroup-on-mount.md +++ b/content/en/blog/_posts/2022-12-23-fsgroup-on-mount.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes 1.26: Support for Passing Pod fsGroup to CSI Drivers At Mount Time" date: 2022-12-23 slug: kubernetes-12-06-fsgroup-on-mount +author: > + Fabio Bertinatto (Red Hat), + Hemant Kumar (Red Hat) --- -**Authors:** Fabio Bertinatto (Red Hat), Hemant Kumar (Red Hat) - Delegation of `fsGroup` to CSI drivers was first introduced as alpha in Kubernetes 1.22, and graduated to beta in Kubernetes 1.25. For Kubernetes 1.26, we are happy to announce that this feature has graduated to diff --git a/content/en/blog/_posts/2022-12-26-pod-scheduling-readiness.md b/content/en/blog/_posts/2022-12-26-pod-scheduling-readiness.md index e04c81bbc2..748f0ffc26 100644 --- a/content/en/blog/_posts/2022-12-26-pod-scheduling-readiness.md +++ b/content/en/blog/_posts/2022-12-26-pod-scheduling-readiness.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes 1.26: Pod Scheduling Readiness" date: 2022-12-26 slug: pod-scheduling-readiness-alpha +author: > + Wei Huang (Apple), + Abdullah Gharaibeh (Google) --- -**Author:** Wei Huang (Apple), Abdullah Gharaibeh (Google) - Kubernetes 1.26 introduced a new Pod feature: _scheduling gates_. In Kubernetes, scheduling gates are keys that tell the scheduler when a Pod is ready to be considered for scheduling. diff --git a/content/en/blog/_posts/2022-12-27-cpumanager-goes-GA.md b/content/en/blog/_posts/2022-12-27-cpumanager-goes-GA.md index d7ced81802..c0dc40b1af 100644 --- a/content/en/blog/_posts/2022-12-27-cpumanager-goes-GA.md +++ b/content/en/blog/_posts/2022-12-27-cpumanager-goes-GA.md @@ -3,11 +3,10 @@ layout: blog title: 'Kubernetes v1.26: CPUManager goes GA' date: 2022-12-27 slug: cpumanager-ga +author: > + Francesco Romani (Red Hat) --- -**Author:** -Francesco Romani (Red Hat) - The CPU Manager is a part of the kubelet, the Kubernetes node agent, which enables the user to allocate exclusive CPUs to containers. Since Kubernetes v1.10, where it [graduated to Beta](/blog/2018/07/24/feature-highlight-cpu-manager/), the CPU Manager proved itself reliable and fulfilled its role of allocating exclusive CPUs to containers, so adoption has steadily grown making it a staple component of performance-critical diff --git a/content/en/blog/_posts/2022-12-29-scalable-job-tracking-ga/index.md b/content/en/blog/_posts/2022-12-29-scalable-job-tracking-ga/index.md index 9f5dfccb14..eb51b1f80b 100644 --- a/content/en/blog/_posts/2022-12-29-scalable-job-tracking-ga/index.md +++ b/content/en/blog/_posts/2022-12-29-scalable-job-tracking-ga/index.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes 1.26: Job Tracking, to Support Massively Parallel Batch Workloads, Is Generally Available" date: 2022-12-29 slug: "scalable-job-tracking-ga" +author: > + Aldo Culquicondor (Google) --- -**Authors:** Aldo Culquicondor (Google) - The Kubernetes 1.26 release includes a stable implementation of the [Job](/docs/concepts/workloads/controllers/job/) controller that can reliably track a large amount of Jobs with high levels of parallelism. [SIG Apps](https://github.com/kubernetes/community/tree/master/sig-apps) diff --git a/content/en/blog/_posts/2022-12-30-advancements-in-traffic-engineering/index.md b/content/en/blog/_posts/2022-12-30-advancements-in-traffic-engineering/index.md index 91ecd167cc..9c4b5df048 100644 --- a/content/en/blog/_posts/2022-12-30-advancements-in-traffic-engineering/index.md +++ b/content/en/blog/_posts/2022-12-30-advancements-in-traffic-engineering/index.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes v1.26: Advancements in Kubernetes Traffic Engineering" date: 2022-12-30 slug: advancements-in-kubernetes-traffic-engineering +author: > + Andrew Sy Kim (Google) --- -**Authors:** Andrew Sy Kim (Google) - Kubernetes v1.26 includes significant advancements in network traffic engineering with the graduation of two features (Service internal traffic policy support, and EndpointSlice terminating conditions) to GA, and a third feature (Proxy terminating endpoints) to beta. The combination of these enhancements aims From 6b8990e225dd6445ebc4709f8fd765ae5be3ab90 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 28 Apr 2024 20:04:11 +0600 Subject: [PATCH 0353/1086] Create pod-disruption.md --- .../docs/reference/glossary/pod-disruption.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 content/bn/docs/reference/glossary/pod-disruption.md diff --git a/content/bn/docs/reference/glossary/pod-disruption.md b/content/bn/docs/reference/glossary/pod-disruption.md new file mode 100644 index 0000000000..af80c0d918 --- /dev/null +++ b/content/bn/docs/reference/glossary/pod-disruption.md @@ -0,0 +1,24 @@ +--- +id: pod-disruption +title: পড ব্যাঘাত +full_link: /bn/docs/concepts/workloads/pods/disruptions/ +date: 2021-05-12 +short_description: > + প্রক্রিয়া যার মাধ্যমে নোডের পডগুলো স্বেচ্ছায় বা অনিচ্ছাকৃতভাবে বন্ধ করা হয়। + +aka: +related: + - pod + - container +tags: + - operation +--- + +[পড-ব্যঘাত](/bn/docs/concepts/workloads/pods/disruptions/) হলো সেই প্রক্রিয়া যার +মাধ্যমে নোডের পডগুলো স্বেচ্ছায় বা অনিচ্ছাকৃতভাবে বন্ধ করা হয়। + + + +অ্যাপ্লিকেশন মালিক বা ক্লাস্টার অ্যাডমিনিস্ট্রেটররা ইচ্ছাকৃতভাবে স্বেচ্ছায় ব্যাঘাত শুরু করে। +অনিচ্ছাকৃত ব্যাঘাতগুলি অনিচ্ছাকৃত এবং নোডের রিসোর্স ফুরিয়ে যাওয়ার মতো অনিবার্য +সমস্যার কারণে বা দুর্ঘটনাবশত মুছে ফেলার কারণে ট্রিগার হতে পারে। From 13c72eef18d92bd5a6d2c0e638a888f0a7753472 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 28 Apr 2024 20:16:16 +0600 Subject: [PATCH 0354/1086] Create pod.md --- content/bn/docs/reference/glossary/pod.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 content/bn/docs/reference/glossary/pod.md diff --git a/content/bn/docs/reference/glossary/pod.md b/content/bn/docs/reference/glossary/pod.md new file mode 100644 index 0000000000..e6b6ebc0d2 --- /dev/null +++ b/content/bn/docs/reference/glossary/pod.md @@ -0,0 +1,18 @@ +--- +title: পড +id: pod +date: 2018-04-12 +full_link: /bn/docs/concepts/workloads/pods/ +short_description: > + একটি পড আপনার ক্লাস্টারে চলমান কন্টেইনারগুলোর একটি সেট উপস্থাপন করে। + +aka: +tags: +- core-object +- fundamental +--- + সবচেয়ে ছোট এবং সরল কুবারনেটিস অবজেক্ট। একটি পড আপনার ক্লাস্টারে চলমান {{< glossary_tooltip text="কন্টেইনারগুলোর" term_id="container" >}} একটি সেট উপস্থাপন করে। + + + + একটি পড সাধারণত একটি একক প্রাথমিক কন্টেইনার চালানোর জন্য সেট আপ করা হয়। এটি অপশনাল সাইডকার কন্টেইনারগুলোও চালাতে পারে যা লগিংয়ের মতো পরিপূরক ফিচার যুক্ত করে। পডগুলি সাধারণত একটি {{< glossary_tooltip term_id="deployment" >}} দ্বারা পরিচালিত হয় ৷ From d799feef6b7a968b5557e8f1892ab10c2dbc1e1a Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 28 Apr 2024 20:37:24 +0600 Subject: [PATCH 0355/1086] Create volume.md --- content/bn/docs/reference/glossary/volume.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 content/bn/docs/reference/glossary/volume.md diff --git a/content/bn/docs/reference/glossary/volume.md b/content/bn/docs/reference/glossary/volume.md new file mode 100644 index 0000000000..b2b9fb395d --- /dev/null +++ b/content/bn/docs/reference/glossary/volume.md @@ -0,0 +1,20 @@ +--- +title: ভলিউম +id: volume +date: 2018-04-12 +full_link: /bn/docs/concepts/storage/volumes/ +short_description: > + ডাটা ধারণকারী একটি ডিরেক্টরি, একটি পডের কন্টেইনারে অ্যাক্সেসযোগ্য। + +aka: +tags: +- core-object +- fundamental +--- +ডাটা ধারণকারী একটি ডিরেক্টরি, একটি {{< glossary_tooltip term_id="pod" >}} এর {{< glossary_tooltip text="কন্টেইনারে" term_id="container" >}} অ্যাক্সেসযোগ্য। + + + +একটি কুবারনেটিস ভলিউম যতক্ষণ পড এটিকে ঘিরে থাকে ততক্ষণ বেঁচে থাকে। ফলস্বরূপ, একটি ভলিউম পডের মধ্যে চলা যেকোন কন্টেইনারের মধ্যে দিয়ে যায়, এবং ভলিউমের ডেটা কন্টেইনার রিস্টার্ট জুড়ে সংরক্ষণ করা হয়। + +আরও তথ্যের জন্য [স্টোরেজ](/bn/docs/concepts/storage/) দেখুন। From bd04c5114fa9c52f2bc0d7f0ee41ce1c190072ae Mon Sep 17 00:00:00 2001 From: THAT ONE GUY <97331552+tuesdayinsighter@users.noreply.github.com> Date: Sun, 28 Apr 2024 22:48:16 +0800 Subject: [PATCH 0356/1086] Update cncf-code-of-conduct.md --- content/zh-cn/community/static/cncf-code-of-conduct.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/zh-cn/community/static/cncf-code-of-conduct.md b/content/zh-cn/community/static/cncf-code-of-conduct.md index 316dbb0552..c796ec5b6a 100644 --- a/content/zh-cn/community/static/cncf-code-of-conduct.md +++ b/content/zh-cn/community/static/cncf-code-of-conduct.md @@ -143,7 +143,7 @@ For incidents occurring in the Kubernetes community, contact the [Kubernetes Cod 对于其他项目、或与项目无关或影响到多个 CNCF 项目的事件,请通过 联系 [CNCF 行为准则委员会](https://www.cncf.io/conduct/committee/)。 From fe36a7ffad672ef6d7b7cce12bc5c2a9fcfc98dc Mon Sep 17 00:00:00 2001 From: Junya Okabe Date: Mon, 29 Apr 2024 01:15:28 +0900 Subject: [PATCH 0357/1086] update: OWNER_ALIASES --- OWNERS_ALIASES | 1 + 1 file changed, 1 insertion(+) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index c74c490004..59adee7f59 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -119,6 +119,7 @@ aliases: - atoato88 - bells17 - kakts + - Okabe-Junya - t-inu sig-docs-ko-owners: # Admins for Korean content - gochist From b32d79756f48b144e956e911573a4652c99973ac Mon Sep 17 00:00:00 2001 From: Arhell Date: Mon, 29 Apr 2024 00:27:37 +0300 Subject: [PATCH 0358/1086] [pt] Fix link --- content/pt-br/docs/concepts/services-networking/ingress.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/pt-br/docs/concepts/services-networking/ingress.md b/content/pt-br/docs/concepts/services-networking/ingress.md index ba6bfb976f..a9ef57c5c0 100644 --- a/content/pt-br/docs/concepts/services-networking/ingress.md +++ b/content/pt-br/docs/concepts/services-networking/ingress.md @@ -517,7 +517,7 @@ Verifique a documentação do [controlador Ingress](/docs/concepts/services-netw Você pode expor um serviço de várias maneiras que não envolve diretamente o recurso Ingress: * Use [Service.Type=LoadBalancer](/docs/concepts/services-networking/service/#loadbalancer) -* Use [Service.Type=NodePort](/docs/concepts/services-networking/service/#nodeport) +* Use [Service.Type=NodePort](/docs/concepts/services-networking/service/#type-nodeport) ## {{% heading "whatsnext" %}} From 4ae645f68770909bd481a21ad26a63625c13f112 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 28 Apr 2024 20:20:33 +0800 Subject: [PATCH 0359/1086] [zh] Sync command-line-tools-reference/feature-gates docs --- .../allow-service-lb-status-on-non-lb.md | 17 +++++++++++++ .../feature-gates/job-managed-by.md | 18 ++++++++++++++ .../feature-gates/job-success-policy.md | 18 ++++++++++++++ ...ubelet-pod-resources-dynamice-resources.md | 23 ++++++++++++++++++ .../feature-gates/name-generation-retries.md | 24 +++++++++++++++++++ 5 files changed, 100 insertions(+) create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/allow-service-lb-status-on-non-lb.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/job-managed-by.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/job-success-policy.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/kubelet-pod-resources-dynamice-resources.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/name-generation-retries.md diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/allow-service-lb-status-on-non-lb.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/allow-service-lb-status-on-non-lb.md new file mode 100644 index 0000000000..85b8be717d --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/allow-service-lb-status-on-non-lb.md @@ -0,0 +1,17 @@ +--- +title: AllowServiceLBStatusOnNonLB +content_type: feature_gate +_build: + list: never + render: false + +stages: + - stage: deprecated + defaultValue: false + fromVersion: "1.29" +--- + + +允许对类型为 `LoadBalancer` 以外的 Service 设置 `.status.ingress.loadBalancer`。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/job-managed-by.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/job-managed-by.md new file mode 100644 index 0000000000..d08d52a01c --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/job-managed-by.md @@ -0,0 +1,18 @@ +--- +title: JobManagedBy +content_type: feature_gate + +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.30" +--- + + +允许将 Job 对象的调和委托给外部控制器。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/job-success-policy.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/job-success-policy.md new file mode 100644 index 0000000000..21c5285b7c --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/job-success-policy.md @@ -0,0 +1,18 @@ +--- +title: JobSuccessPolicy +content_type: feature_gate + +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.30" +--- + + +允许用户基于一组成功的 Pod 来声明这组 Pod 所属的 Job 为成功。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/kubelet-pod-resources-dynamice-resources.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/kubelet-pod-resources-dynamice-resources.md new file mode 100644 index 0000000000..5d20f979ac --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/kubelet-pod-resources-dynamice-resources.md @@ -0,0 +1,23 @@ +--- +title: KubeletPodResourcesDynamicResources +content_type: feature_gate +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.27" +--- + + +扩展 kubelet 的 Pod 资源 gRPC 端点,通过 `DynamicResourceAllocation` API 把已分配的资源算入 `ResourceClaims` 中。 +有关更多细节,参见[资源分配报告](/zh-cn/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/#monitoring-device-plugin-resources)。 +使用可分配资源的信息,使客户端能够正确跟踪节点上的空闲计算资源。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/name-generation-retries.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/name-generation-retries.md new file mode 100644 index 0000000000..5e2a05ba20 --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/name-generation-retries.md @@ -0,0 +1,24 @@ +--- +title: NameGenerationRetries +content_type: feature_gate + +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.30" +--- + + +当 {{< glossary_tooltip text="API 服务器" term_id="kube-apiserver" >}}要生成[名称](/zh-cn/docs/concepts/overview/working-with-objects/names/#names)时, +允许重试对象创建。当此特性被启用时,如果控制平面检测到与某个现有对象存在名称冲突, +则使用 `generateName` 的请求将被自动重试,最多重试 8 次。 From 194c3a3cb4f9383de1e2059f644a9183898f4ec3 Mon Sep 17 00:00:00 2001 From: windsonsea Date: Mon, 29 Apr 2024 09:33:57 +0800 Subject: [PATCH 0360/1086] [zh] Sync access-authn-authz/admission-controllers.md --- .../admission-controllers.md | 82 +------------------ .../extensible-admission-controllers.md | 18 ++-- 2 files changed, 13 insertions(+), 87 deletions(-) diff --git a/content/zh-cn/docs/reference/access-authn-authz/admission-controllers.md b/content/zh-cn/docs/reference/access-authn-authz/admission-controllers.md index 269183eed8..d08801ecce 100644 --- a/content/zh-cn/docs/reference/access-authn-authz/admission-controllers.md +++ b/content/zh-cn/docs/reference/access-authn-authz/admission-controllers.md @@ -2,7 +2,7 @@ title: 准入控制器参考 linkTitle: 准入控制器 content_type: concept -weight: 30 +weight: 40 --- -此页面提供准入控制器(Admission Controllers)的概述。 +此页面提供准入控制器(Admission Controller)的概述。 @@ -69,7 +69,7 @@ Kubernetes {{< skew currentVersion >}} 并编译进 `kube-apiserver` 可执行文件,并且只能由集群管理员配置。 在该列表中,有两个特殊的控制器:MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook。 它们根据 API 中的配置, -分别执行变更和验证[准入控制 webhook](/zh-cn/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks)。 +分别执行变更和验证[准入控制 Webhook](/zh-cn/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks)。 -**类别**:验证。 - -{{< feature-state for_k8s_version="v1.27" state="deprecated" >}} - -{{< caution >}} - -Kubernetes 项目建议你**不要使用** `SecurityContextDeny` 准入控制器。 - -`SecurityContextDeny` 准入控制器插件已被弃用,并且默认处于禁用状态。 -此插件将在后续的版本中被移除。如果你选择启用 `SecurityContextDeny` 准入控制器插件, -也必须同时启用 `SecurityContextDeny` 特性门控。 - - -`SecurityContextDeny` 准入插件已被弃用,因为它已经过时且不完整; -它可能无法使用或无法达到你的预期。该插件实现之时,就无法限制 Pod API 的所有与安全相关的属性。 -例如,`privileged` 和 `ephemeralContainers` 字段就从未受过此插件的限制。 - - -采用 [Pod 安全性标准](/zh-cn/docs/concepts/security/pod-security-standards/)中的 `Restricted` -方案的 [Pod 安全性准入](/zh-cn/docs/concepts/security/pod-security-admission/)插件, -能以更好和最新的方式来表述此插件所要实现的目标。 -{{< /caution >}} - - -此准入控制器将拒绝任何尝试设置以下 -[SecurityContext](/zh-cn/docs/tasks/configure-pod-container/security-context/) -字段的 Pod: - -- `.spec.securityContext.supplementalGroups` -- `.spec.securityContext.seLinuxOptions` -- `.spec.securityContext.runAsUser` -- `.spec.securityContext.fsGroup` -- `.spec.(init)Containers[*].securityContext.seLinuxOptions` -- `.spec.(init)Containers[*].securityContext.runAsUser` - - -有关此插件的更多历史背景,请参阅 Kubernetes 博客中这篇有关 PodSecurityPolicy 及其移除的文章: -[The birth of PodSecurityPolicy](/blog/2022/08/23/podsecuritypolicy-the-historical-context/#the-birth-of-podsecuritypolicy)。 -这篇文章详细地介绍了 PodSecurityPolicy 的历史背景以及 Pod 的 `securityContext` 字段的诞生。 - ### ServiceAccount {#serviceaccount} @@ -93,8 +93,8 @@ In the following, we describe how to quickly experiment with admission webhooks. ### 先决条件 {#prerequisites} * 确保启用 MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook 控制器。 - [这里](/zh-cn/docs/reference/access-authn-authz/admission-controllers/#is-there-a-recommended-set-of-admission-controllers-to-use) - 是一组推荐的 admission 控制器,通常可以启用。 + [这里](/zh-cn/docs/reference/access-authn-authz/admission-controllers/#is-there-a-recommended-set-of-admission-controllers-to-use)是一组推荐的准入控制器, + 通常可以启用。 * 确保启用了 `admissionregistration.k8s.io/v1` API。 @@ -110,8 +110,8 @@ that is validated in a Kubernetes e2e test. The webhook handles the as an `AdmissionReview` object in the same version it received. --> 请参阅 Kubernetes e2e 测试中的 -[Admission Webhook 服务器](https://github.com/kubernetes/kubernetes/blob/release-1.21/test/images/agnhost/webhook/main.go) -的实现。Webhook 处理由 API 服务器发送的 `AdmissionReview` 请求,并且将其决定作为 +[Admission Webhook 服务器](https://github.com/kubernetes/kubernetes/blob/release-1.21/test/images/agnhost/webhook/main.go)的实现。 +Webhook 处理由 API 服务器发送的 `AdmissionReview` 请求,并且将其决定作为 `AdmissionReview` 对象以相同版本发送回去。 ### 匹配请求:`matchConditions` {#matching-requests-matchConditions} -{{< feature-state state="beta" for_k8s_version="v1.28" >}} +{{< feature-state feature_gate_name="AdmissionWebhookMatchConditions" >}} +{{< feature-state for_k8s_version="v1.29" state="beta" >}} + +সাইডকার কন্টেইনার হল সেকেন্ডারি কন্টেইনার যা একই {{< glossary_tooltip text="পড" term_id="pod" >}} +এর মধ্যে প্রধান অ্যাপ্লিকেশন কন্টেইনারের সাথে চলে। +এই কন্টেইনারগুলি প্রাথমিক অ্যাপ্লিকেশন কোডটি সরাসরি পরিবর্তন না করেই অতিরিক্ত পরিষেবা, বা +লগিং, মনিটরিং, নিরাপত্তা বা ডেটা সিঙ্ক্রোনাইজেশনের মতো কার্যকারিতা প্রদান করে +প্রধান অ্যাপ্লিকেশন কন্টেইনারের কার্যকারিতা বাড়াতে বা প্রসারিত করতে ব্যবহৃত হয়। + +সাধারণত, আপনার একটি পডে শুধুমাত্র একটি অ্যাপ কন্টেইনার থাকে। উদাহরণস্বরূপ, যদি আপনার কাছে একটি ওয়েব +অ্যাপ্লিকেশন থাকে যার জন্য একটি লোকাল ওয়েবসার্ভার প্রয়োজন, লোকাল ওয়েব সার্ভারটি একটি সাইডকার এবং +ওয়েব অ্যাপ্লিকেশনটি নিজেই অ্যাপ কন্টেইনার৷ + + + +## কুবারনেটিসের মধ্যে সাইডকার কন্টেইনার {#pod-sidecar-containers} + +কুবারনেটিস একটি বিশেষ ক্ষেত্রে +[init কন্টেইনারে](/bn/docs/concepts/workloads/pods/init-containers/); পড স্টার্টআপের পরে +সাইডকারের কন্টেইনারগুলি চলমান থাকে। এই নথিটি _regular init containers_ শব্দটি ব্যবহার করে স্পষ্টভাবে +সেই কন্টেইনারগুলিকে বোঝাতে যা শুধুমাত্র পড স্টার্টআপের সময় চলে। + +আপনার ক্লাস্টারে `SidecarContainers` +[ফিচার গেট](/bn/docs/reference/command-line-tools-reference/feature-gates/) এনেবলড করা +থাকলে (কুবারনেটস v1.29 থেকে ফিচারটি ডিফল্টরূপে সক্রিয় থাকে), আপনি একটি `restartPolicy` নির্দিষ্ট করতে পারেন +পডের `initContainers` ক্ষেত্রে তালিকাভুক্ত কন্টেইনারগুলির জন্য। +এই রিস্টার্টেবল _sidecar_ কন্টেইনারগুলি অন্যান্য init কন্টেইনার থেকে এবং +একই পডের মধ্যে প্রধান অ্যাপ্লিকেশন কন্টেইনার(গুলি) থেকে স্বাধীন। +এগুলি মূল অ্যাপ্লিকেশন কন্টেইনার এবং অন্যান্য init কন্টেইনারগুলিকে প্রভাবিত না করেই শুরু, বন্ধ +এবং পুনরায় চালু করা যেতে পারে। + +আপনি একাধিক কন্টেইনারে একটি পড চালাতে পারেন যেগুলি init বা সাইডকার কন্টেইনার হিসাবে +চিহ্নিত নয়৷ এটি উপযুক্ত যদি পডের মধ্যে থাকা কন্টেইনারগুলি পডের সামগ্রিকভাবে +কাজ করার জন্য প্রয়োজন হয়, তবে আপনার কোন কন্টেইনারগুলি প্রথমে শুরু হবে বা থামবে তা নিয়ন্ত্রণ করার দরকার নেই৷ +আপনি যদি কুবারনেটিসের পুরানো ভার্শনসগুলিকে সমর্থন করতে চান যা একটি কন্টেইনার-স্তরের `restartPolicy` +ষেত্র সমর্থন করে না তবে আপনি এটিও করতে পারেন। + +### উদাহরণ অ্যাপ্লিকেশন {#sidecar-example} + +এখানে দুটি কন্টেইনার সহ একটি ডেপ্লয়মেন্টের একটি উদাহরণ রয়েছে, যার মধ্যে একটি সাইডকার: + +{{% code_sample language="yaml" file="application/deployment-sidecar.yaml" %}} + +## সাইডকার কন্টেইনার এবং পড জীবনচক্র (Pod lifecycle) + +যদি একটি init কন্টেইনার তৈরি করা হয় তার `restartPolicy` `Always` সেট করে, +তাহলে এটি শুরু হবে এবং পডের পুরো জীবনকালে চলতে থাকবে। এটি প্রধান অ্যাপ্লিকেশন +কন্টেইনারগুলি থেকে আলাদা করে সহায়ক সেবা চালানোর জন্য সহায়ক হতে পারে৷ + +যদি এই init কন্টেইনারের জন্য একটি `readinessProbe` নির্দিষ্ট করা হয়, তাহলে এর ফলাফল +পডের `রেডি` অবস্থা নির্ধারণ করতে ব্যবহার করা হবে। + +যেহেতু এই কন্টেইনারগুলিকে init কন্টেইনার হিসাবে সংজ্ঞায়িত করা হয়, তাই তারা অন্যান্য +init কন্টেইনারগুলির মতো একই ক্রম এবং অনুক্রমিক গ্যারান্টি থেকে উপকৃত হয়, +যাতে সেগুলিকে জটিল পড ইনিশিয়ালাইজেশন প্রবাহে অন্যান্য init কন্টেইনার মিশ্রিত করা যায়। + +রেগুলার init কন্টেইনারগুলির তুলনায়, `initContainers`-এর মধ্যে সংজ্ঞায়িত সাইডকারগুলি +শুরু হওয়ার পরে চলতে থাকে। এটি গুরুত্বপূর্ণ যখন একটি পডের জন্য `.spec.initContainers` +এর ভিতরে একাধিক এন্ট্রি থাকে। একটি সাইডকার-স্টাইলের init কন্টেইনার চালু হওয়ার পরে (কুবেলেট (kubelet) +সেই init কন্টেইনারের জন্য `start` স্ট্যাটাসটিকে সত্যে সেট করেছে), কুবেলেট (kubelet) তারপর অর্ডারকৃত +`.spec.initContainers` তালিকা থেকে পরবর্তী init কন্টেইনার শুরু করে। +সেই স্ট্যাটাসটি হয় সত্য হয়ে যায় কারণ কন্টেইনারে একটি প্রক্রিয়া চলছে এবং কোনো স্টার্টআপ +প্রোব (probe) সংজ্ঞায়িত করা হয়নি, অথবা এর `startupProbe` সফল হওয়ার ফলে। + +### সাইডকার কন্টেইনারে জবস (Jobs with sidecar containers) + +আপনি যদি কুবারনেটস-স্টাইলের init কন্টেইনার ব্যবহার করে সাইডকার ব্যবহার করে এমন একটি জব (job) ডিফাইন করেন, +তবে প্রতিটি পডের সাইডকার কন্টেইনার মূল কন্টেইনার শেষ হওয়ার পরে কাজটি +সম্পূর্ণ হতে বাধা দেয় না। + +এখানে দুটি কন্টেইনার সহ একটি কাজের উদাহরণ রয়েছে, যার মধ্যে একটি সাইডকার: + +{{% code_sample language="yaml" file="application/job/job-sidecar.yaml" %}} + +## অ্যাপ্লিকেশন কন্টেইনার থেকে পার্থক্য + +সাইডকার কন্টেইনারগুলি একই পডে _app containers_ পাশাপাশি চলে৷ যাইহোক, তারা প্রাইমারি +প্রয়োগ যুক্তি এক্সিকিউট না করে; পরিবর্তে, তারা প্রধান অ্যাপ্লিকেশনে সহায়ক +কার্যকারিতা প্রদান করে। + +সাইডকার কন্টেইনারদের নিজস্ব স্বাধীন জীবনচক্র আছে। এগুলি রেগুলার কন্টেইনারে স্বাধীনভাবে শুরু, বন্ধ +এবং পুনরায় চালু করা যেতে পারে। এর মানে আপনি প্রাইমারি অ্যাপ্লিকেশনকে +প্রভাবিত না করেই আপডেট, স্কেল বা মেইনটেইন করতে পারবেন। + +সাইডকার কন্টেইনার প্রাইমারি কন্টেইনারের সাথে একই নেটওয়ার্ক এবং স্টোরেজ নেমস্পেস +শেয়ার করে। এই সহ-অবস্থান তাদের ঘনিষ্ঠভাবে ইন্টারঅ্যাক্ট করতে এবং সম্পদ শেয়ার করতে দেয়। + +## init কন্টেইনার থেকে পার্থক্য + +সাইডকার কন্টেইনার প্রধান কন্টেইনারের পাশাপাশি কাজ করে, এর কার্যকারিতা প্রসারিত করে এবং +অতিরিক্ত পরিষেবা প্রদান করে। + +সাইডকার কন্টেইনার প্রধান অ্যাপ্লিকেশন কন্টেইনারের সাথে একযোগে চালান। তারা পডের +জীবনচক্র জুড়ে সক্রিয় থাকে এবং মূল কন্টেইনার থেকে স্বাধীনভাবে শুরু এবং +বন্ধ করা যেতে পারে। [init কন্টেইনার](/bn/docs/concepts/workloads/pods/init-containers/) থেকে ভিন্ন, +সাইডকার কন্টেইনার সমর্থন [probe](/bn/docs/concepts/workloads/pods/pod-lifecycle/#types-of-probe) নিয়ন্ত্রণ করতে তাদের জীবনচক্র। + +সাইডকার কন্টেইনারগুলি প্রধান অ্যাপ্লিকেশন কন্টেইনারগুলির সাথে সরাসরি ইন্টারঅ্যাক্ট করতে পারে, কারণ +init কন্টেইনারগুলির মতো তারা সবসময় একই নেটওয়ার্ক ভাগ করে এবং ঐচ্ছিকভাবে ভলিউম (ফাইলসিস্টেম) +ভাগ করতে পারে। + +Init কন্টেইনারগুলি মূল পাত্রে শুরু হওয়ার আগে বন্ধ হয়ে যায়, তাই init কন্টেইনারগুলি একটি Pod-এ +অ্যাপ কন্টেইনারের সাথে মেসেজেস বিনিময় করতে পারে না। যে কোনো ডেটা পাসিং একমুখী হয় +(উদাহরণস্বরূপ, একটি init কন্টেইনার একটি `emptyDir` ভলিউমের মধ্যে তথ্য রাখতে পারে)। + +## কন্টেইনারে সম্পদ ভাগাভাগি + +{{< comment >}} +এই বিভাগটি [init কন্টেইনার](/bn/docs/concepts/workloads/pods/init-containers/) পৃষ্ঠাতেও রয়েছে। +আপনি যদি এই বিভাগটি সম্পাদনা করেন তবে উভয় স্থানে পরিবর্তন করুন৷ +{{< /comment >}} + +init, sidecar এবং অ্যাপ কন্টেইনারগুলির জন্য কার্যকর করার আদেশ দেওয়া হলে, সম্পদ ব্যবহারের জন্য +নিম্নলিখিত নিয়মগুলি প্রযোজ্য: + +* সমস্ত init কন্টেইনার সংজ্ঞায়িত কোনো নির্দিষ্ট রিসোর্স অনুরোধ বা সীমার মধ্যে + সর্বোচ্চ হল *এফেক্টিভ রিকোয়েস্ট/লিমিট*। যদি কোন সম্পদের কোন সম্পদ সীমা + নির্দিষ্ট না থাকে তবে এটি সর্বোচ্চ সীমা হিসাবে বিবেচিত হয়। +* একটি সম্পদের জন্য Pod এর *এফেক্টিভ রিকোয়েস্ট/লিমিট* হল + [pod overhead](/bn/docs/concepts/scheduling-eviction/pod-overhead/) এর সমষ্টি এবং এর উচ্চতর: + * সমস্ত non-init কন্টেইনারের সমষ্টি (অ্যাপ এবং সাইডকার কন্টেইনার) রিসোর্সের জন্য + অনুরোধ/সীমা + * একটি সম্পদের জন্য এফেক্টিভ রিকোয়েস্ট/লিমিট +* সময়সূচী কার্যকরী অনুরোধ/সীমার উপর ভিত্তি করে করা হয়, যার অর্থ init কন্টেইনারগুলি + প্রারম্ভিকতার জন্য সংস্থান সংরক্ষণ করতে পারে যা পডের জীবদ্দশায় + ব্যবহৃত হয় না। +* পডের *কার্যকর QoS টিয়ার* এর QoS (পরিষেবার গুণমান) স্তর হল সমস্ত init, + সাইডকার এবং অ্যাপ কন্টেইনারগুলির জন্য QoS স্তর। + +কার্যকর পড অনুরোধ এবং সীমার উপর ভিত্তি করে কোটা এবং সীমা প্রয়োগ +করা হয়। + +### সাইডকার কন্টেইনার এবং লিনাক্স cgroups {#cgroups} + +লিনাক্সে, পড লেভেল কন্ট্রোল গ্রুপের (cgroups) জন্য রিসোর্স বরাদ্দ করা হয় কার্যকর পড রিকোয়েস্ট এবং লিমিট উপর ভিত্তি করে, +যেমন শিডিউলারের মতো। + +## {{% heading "whatsnext" %}} + +* [নেটিভ সাইডকার কন্টেইনারে](/bn/blog/2023/08/25/native-sidecar-containers/) এ একটি ব্লগ পোস্ট পড়ুন। +* [একটি পড তৈরি করা যাতে একটি init কন্টেইনার রয়েছে](/bn/docs/tasks/configure-pod-container/configure-pod-initialization/#create-a-pod-that-has-an-init-container) সম্পর্কে পড়ুন। +* [প্রোবের প্রকার](/bn/docs/concepts/workloads/pods/pod-lifecycle/#types-of-probe) সম্পর্কে জানুন: সজীবতা, প্রস্তুতি, স্টার্টআপ প্রোব। +* [pod overhead](/bn/docs/concepts/scheduling-eviction/pod-overhead/) সম্পর্কে জানুন। diff --git a/content/bn/docs/reference/glossary/sidecar-containers.md b/content/bn/docs/reference/glossary/sidecar-containers.md new file mode 100644 index 0000000000..c0f1a78863 --- /dev/null +++ b/content/bn/docs/reference/glossary/sidecar-containers.md @@ -0,0 +1,20 @@ +--- +title: সাইডকার কন্টেইনার (Sidecar Container) +id: sidecar-container +date: 2018-04-12 +full_link: +short_description: > + একটি সহায়ক কন্টেইনার যা একটি পডের জীবনচক্র জুড়ে চলতে থাকে। +full_link: /bn/docs/concepts/workloads/pods/sidecar-containers/ +tags: +- fundamental +--- + এক বা একাধিক {{< glossary_tooltip text="কন্টেইনার" term_id="container">}} যেটি সাধারণত কোনো অ্যাপ কন্টেইনার চলার আগে শুরু হয়। + + + +সাইডকার কন্টেইনারগুলি রেগুলার অ্যাপ কন্টেইনারগুলির মতো, কিন্তু একটি ভিন্ন উদ্দেশ্য সহ: সাইডকার প্রধান অ্যাপ কন্টেইনারে একটি পড-লোকাল সার্ভিস প্রদান করে। +{{< glossary_tooltip text="init কন্টেইনার" term_id="init-container" >}} এর বিপরীতে, +পড স্টার্টআপের পরে সাইডকার কন্টেইনার চলতে থাকে। + +আরও তথ্যের জন্য [সাইডকার কন্টেইনার](/bn/docs/concepts/workloads/pods/sidecar-containers/) পড়ুন। From f9ceed7fba290640d663ac9ac58f9939a5e67508 Mon Sep 17 00:00:00 2001 From: Sascha Grunert Date: Tue, 9 Apr 2024 09:20:36 +0200 Subject: [PATCH 0364/1086] Add blog post about: CRI streaming explained Signed-off-by: Sascha Grunert --- .../2024-05-01-cri-streaming-explained.md | 338 ++++++++++++++++++ 1 file changed, 338 insertions(+) create mode 100644 content/en/blog/_posts/2024-05-01-cri-streaming-explained.md diff --git a/content/en/blog/_posts/2024-05-01-cri-streaming-explained.md b/content/en/blog/_posts/2024-05-01-cri-streaming-explained.md new file mode 100644 index 0000000000..4e5459c50e --- /dev/null +++ b/content/en/blog/_posts/2024-05-01-cri-streaming-explained.md @@ -0,0 +1,338 @@ +--- +layout: blog +title: "Container Runtime Interface streaming explained" +date: 2024-05-01 +slug: cri-streaming-explained +author: Sascha Grunert +--- + +The Kubernetes [Container Runtime Interface (CRI)](/docs/concepts/architecture/cri) +acts as the main connection between the [kubelet](/docs/reference/command-line-tools-reference/kubelet) +and the [Container Runtime](/docs/setup/production-environment/container-runtimes). +Those runtimes have to provide a [gRPC](https://grpc.io) server which has to +fulfill a Kubernetes defined [Protocol Buffer](https://protobuf.dev) interface. +[This API definition](https://github.com/kubernetes/cri-api/blob/63929b3/pkg/apis/runtime/v1/api.proto) +evolves over time, for example when contributors add new features or fields are +going to become deprecated. + +In this blog post, I'd like to dive into the functionality and history of three +extraordinary Remote Procedure Calls (RPCs), which are truly outstanding in +terms of how they work: **Exec**, **Attach** and **PortForward**. + +**Exec** can be used to run dedicated commands within the container and stream +the output to a client like [kubectl](/docs/reference/kubectl) or +[crictl](/docs/tasks/debug/debug-cluster/crictl). It also allows interaction with +that process using standard input (stdin), for example if users want to run a +new shell instance within an existing workload. + +**Attach** streams the output of the currently running process via [standard I/O](https://en.wikipedia.org/wiki/Standard_streams) +from the container to the client and also allows interaction with them. This is +particularly useful if users want to see what is going on in the container and +be able to interact with the process. + +**PortForward** can be utilized to forward a port from the host to the container +to be able to interact with it using third party network tools. This allows it +to bypass [Kubernetes services](/docs/concepts/services-networking/service) +for a certain workload and interact with its network interface. + +## What is so special about them? + +All RPCs of the CRI either use the [gRPC unary calls](https://grpc.io/docs/what-is-grpc/core-concepts/#unary-rpc) +for communication or the [server side streaming](https://grpc.io/docs/what-is-grpc/core-concepts/#server-streaming-rpc) +feature (only `GetContainerEvents` right now). This means that mainly all RPCs +retrieve a single client request and have to return a single server response. +The same applies to **Exec**, **Attach**, and **PortForward**, where [their protocol definition](https://github.com/kubernetes/cri-api/blob/63929b3/pkg/apis/runtime/v1/api.proto#L94-L99) +looks like this: + +```protobuf +// Exec prepares a streaming endpoint to execute a command in the container. +rpc Exec(ExecRequest) returns (ExecResponse) {} +``` + +```protobuf +// Attach prepares a streaming endpoint to attach to a running container. +rpc Attach(AttachRequest) returns (AttachResponse) {} +``` + +```protobuf +// PortForward prepares a streaming endpoint to forward ports from a PodSandbox. +rpc PortForward(PortForwardRequest) returns (PortForwardResponse) {} +``` + +The requests carry everything required to allow the server to do the work, +for example, the `ContainerId` or command (`Cmd`) to be run in case of `Exec`. +More interestingly, all of their responses only contain a `url`: + +```protobuf +message ExecResponse { + // Fully qualified URL of the exec streaming server. + string url = 1; +} +``` + +```protobuf +message AttachResponse { + // Fully qualified URL of the attach streaming server. + string url = 1; +} +``` + +```protobuf +message PortForwardResponse { + // Fully qualified URL of the port-forward streaming server. + string url = 1; +} +``` + +Why is it implemented like that? Well, [the original design document](https://docs.google.com/document/d/1MreuHzNvkBW6q7o_zehm1CBOBof3shbtMTGtUpjpRmY) +for those RPCs even predates [Kubernetes Enhancements Proposals (KEPs)](https://github.com/kubernetes/enhancements) +and was originally outlined back in 2016. The kubelet had a native +implementation for **Exec**, **Attach**, and **PortForward** before the +initiative to bring the functionality to the CRI started. Before that, +everything was bound to [Docker](https://www.docker.com) or the later abandoned +container runtime [rkt](https://github.com/rkt/rkt). + +The CRI related design document also elaborates on the option to use native RPC +streaming for exec, attach, and port forward. The downsides outweighed this +approach: the kubelet would still create a network bottleneck and future +runtimes would not be free in choosing the server implementation details. Also, +another option that the Kubelet implements a portable, runtime-agnostic solution +has been abandoned over the final one, because this would mean another project +to maintain which nevertheless would be runtime dependent. + +This means, that the basic flow for **Exec**, **Attach** and **PortForward** +was proposed to look like this: + +{{< mermaid >}} +sequenceDiagram + participant crictl + participant kubectl + participant API as API Server + participant kubelet + participant runtime as Container Runtime + participant streaming as Streaming Server + alt Client alternatives + Note over kubelet,runtime: Container Runtime Interface (CRI) + kubectl->>API: exec, attach, port-forward + API->>kubelet: + kubelet->>runtime: Exec, Attach, PortForward + else + Note over crictl,runtime: Container Runtime Interface (CRI) + crictl->>runtime: Exec, Attach, PortForward + end + runtime->>streaming: New Session + streaming->>runtime: HTTP endpoint (URL) + alt Client alternatives + runtime->>kubelet: Response URL + kubelet->>API: + API-->>streaming: Connection upgrade (SPDY or WebSocket) + streaming-)API: Stream data + API-)kubectl: Stream data + else + runtime->>crictl: Response URL + crictl-->>streaming: Connection upgrade (SPDY or WebSocket) + streaming-)crictl: Stream data + end +{{< /mermaid >}} + +Clients like crictl or the kubelet (via kubectl) request a new exec, attach or +port forward session from the runtime using the gRPC interface. The runtime +implements a streaming server that also manages the active sessions. This +streaming server provides an HTTP endpoint for the client to connect to. The +client upgrades the connection to use the [SPDY](https://en.wikipedia.org/wiki/SPDY) +streaming protocol or (in the future) to a [WebSocket](https://en.wikipedia.org/wiki/WebSocket) +connection and starts to stream the data back and forth. + +This implementation allows runtimes to have the flexibility to implement +**Exec**, **Attach** and **PortForward** the way they want, and also allows a +simple test path. Runtimes can change the underlying implementation to support +any kind of feature without having a need to modify the CRI at all. + +Many smaller enhancements to this overall approach have been merged into +Kubernetes in the past years, but the general pattern has always stayed the +same. The kubelet source code transformed into [a reusable library](https://github.com/kubernetes/kubernetes/blob/db9fcfe/staging/src/k8s.io/kubelet/pkg/cri/streaming), +which is nowadays usable from container runtimes to implement the basic +streaming capability. + +## How does the streaming actually work? + +At a first glance, it looks like all three RPCs work the same way, but that's +not the case. It's possible to group the functionality of **Exec** and +**Attach**, while **PortForward** follows a distinct internal protocol +definition. + +### Exec and Attach + +Kubernetes defines **Exec** and **Attach** as _remote commands_, where its +protocol definition exists in [five different versions](https://github.com/kubernetes/kubernetes/blob/9791f0d/staging/src/k8s.io/apimachinery/pkg/util/remotecommand/constants.go#L28-L52): + +| # | Version | Note | +| --- | ------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| 1 | `channel.k8s.io` | Initial (unversioned) SPDY sub protocol ([#13394](https://issues.k8s.io/13394), [#13395](https://issues.k8s.io/13395)) | +| 2 | `v2.channel.k8s.io` | Resolves the issues present in the first version ([#15961](https://github.com/kubernetes/kubernetes/pull/15961)) | +| 3 | `v3.channel.k8s.io` | Adds support for resizing container terminals ([#25273](https://github.com/kubernetes/kubernetes/pull/25273)) | +| 4 | `v4.channel.k8s.io` | Adds support for exit codes using JSON errors ([#26541](https://github.com/kubernetes/kubernetes/pull/26541)) | +| 5 | `v5.channel.k8s.io` | Adds support for a CLOSE signal ([#119157](https://github.com/kubernetes/kubernetes/pull/119157)) | + +On top of that, there is an overall effort to replace the SPDY transport +protocol using WebSockets as part [KEP #4006](https://github.com/kubernetes/enhancements/issues/4006). +Runtimes have to satisfy those protocols over their life cycle to stay up to +date with the Kubernetes implementation. + +Let's assume that a client uses the latest (`v5`) version of the protocol as +well as communicating over WebSockets. In that case, the general flow would be: + +1. The client requests an URL endpoint for **Exec** or **Attach** using the CRI. + + - The server (runtime) validates the request, inserts it into a connection + tracking cache, and provides the HTTP endpoint URL for that request. + +1. The client connects to that URL, upgrades the connection to establish + a WebSocket, and starts to stream data. + + - In the case of **Attach**, the server has to stream the main container process + data to the client. + - In the case of **Exec**, the server has to create the subprocess command within + the container and then streams the output to the client. + + If stdin is required, then the server needs to listen for that as well and + redirect it to the corresponding process. + +Interpreting data for the defined protocol is fairly simple: The first +byte of every input and output packet [defines](https://github.com/kubernetes/kubernetes/blob/9791f0d/staging/src/k8s.io/apimachinery/pkg/util/remotecommand/constants.go#L57-L64) +the actual stream: + +| First Byte | Type | Description | +| ---------- | --------------- | ---------------------------------------- | +| `0` | standard input | Data streamed from stdin | +| `1` | standard output | Data streamed to stdout | +| `2` | standard error | Data streamed to stderr | +| `3` | stream error | A streaming error occurred | +| `4` | stream resize | A terminal resize event | +| `255` | stream close | Stream should be closed (for WebSockets) | + +How should runtimes now implement the streaming server methods for **Exec** and +**Attach** by using the provided kubelet library? The key is that the streaming +server implementation in the kubelet [outlines an interface](https://github.com/kubernetes/kubernetes/blob/db9fcfe/staging/src/k8s.io/kubelet/pkg/cri/streaming/server.go#L63-L68) +called `Runtime` which has to be fulfilled by the actual container runtime if it +wants to use that library: + +```go +// Runtime is the interface to execute the commands and provide the streams. +type Runtime interface { + Exec(ctx context.Context, containerID string, cmd []string, in io.Reader, out, err io.WriteCloser, tty bool, resize <-chan remotecommand.TerminalSize) error + Attach(ctx context.Context, containerID string, in io.Reader, out, err io.WriteCloser, tty bool, resize <-chan remotecommand.TerminalSize) error + PortForward(ctx context.Context, podSandboxID string, port int32, stream io.ReadWriteCloser) error +} +``` + +Everything related to the protocol interpretation is +already in place and runtimes only have to implement the actual `Exec` and +`Attach` logic. For example, the container runtime [CRI-O](https://github.com/cri-o/cri-o) +does it [like this pseudo code](https://github.com/cri-o/cri-o/blob/2a0867/server/container_exec.go#L27-L46): + +```go +func (s StreamService) Exec( + ctx context.Context, + containerID string, + cmd []string, + stdin io.Reader, stdout, stderr io.WriteCloser, + tty bool, + resizeChan <-chan remotecommand.TerminalSize, +) error { + // Retrieve the container by the provided containerID + // … + + // Update the container status and verify that the workload is running + // … + + // Execute the command and stream the data + return s.runtimeServer.Runtime().ExecContainer( + s.ctx, c, cmd, stdin, stdout, stderr, tty, resizeChan, + ) +} +``` + +### **PortForward** + +Forwarding ports to a container works a bit differently when comparing it to +streaming IO data from a workload. The server still has to provide a URL +endpoint for the client to connect to, but then the container runtime has to +enter the network namespace of the container, allocate the port as well as +stream the data back and forth. There is no simple protocol definition available +like for **Exec** or **Attach**. This means that the client will stream the +plain SPDY frames (with or without an additional WebSocket connection) which can +be interpreted using libraries like [moby/spdystream](https://github.com/moby/spdystream). + +Luckily, the kubelet library already provides the `PortForward` interface method +which has to be implemented by the runtime. [CRI-O does that]() by (simplified): + +```go +func (s StreamService) PortForward( + ctx context.Context, + podSandboxID string, + port int32, + stream io.ReadWriteCloser, +) error { + // Retrieve the pod sandbox by the provided podSandboxID + sandboxID, err := s.runtimeServer.PodIDIndex().Get(podSandboxID) + sb := s.runtimeServer.GetSandbox(sandboxID) + // … + + // Get the network namespace path on disk for that sandbox + netNsPath := sb.NetNsPath() + // … + + // Enter the network namespace and stream the data + return s.runtimeServer.Runtime().PortForwardContainer( + ctx, sb.InfraContainer(), netNsPath, port, stream, + ) +} +``` + +## Future work + +The flexibility Kubernetes provides for the RPCs **Exec**, **Attach** and +**PortForward** is truly outstanding compared to other methods. Nevertheless, +container runtimes have to keep up with the latest and greatest implementations +to support those features in a meaningful way. The general effort to support +WebSockets is not only a plain Kubernetes thing, it also has to be supported by +container runtimes as well as clients like `crictl`. + +For example, `crictl` v1.30 features a new `--transport` flag for the +subcommands `exec`, `attach` and `port-forward` +([#1383](https://github.com/kubernetes-sigs/cri-tools/pull/1383), +[#1385](https://github.com/kubernetes-sigs/cri-tools/pull/1385)) +to allow choosing between `websocket` and `spdy`. + +CRI-O is going an experimental path by moving the streaming server +implementation into [conmon-rs](https://github.com/containers/conmon-rs) +(a substitute for the container monitor [conmon](https://github.com/containers/conmon)). conmon-rs is +a [Rust](https://www.rust-lang.org) implementation of the original container +monitor and allows streaming WebSockets directly using supported libraries +([#2070](https://github.com/containers/conmon-rs/pull/2070)). The major benefit +of this approach is that CRI-O does not even have to be running while conmon-rs +can keep active **Exec**, **Attach** and **PortForward** sessions open. The +simplified flow when using crictl directly will then look like this: + +{{< mermaid >}} +sequenceDiagram + autonumber + participant crictl + participant runtime as Container Runtime + participant conmon-rs + Note over crictl,runtime: Container Runtime Interface (CRI) + crictl->>runtime: Exec, Attach, PortForward + Note over runtime,conmon-rs: Cap’n Proto + runtime->>conmon-rs: Serve Exec, Attach, PortForward + conmon-rs->>runtime: HTTP endpoint (URL) + runtime->>crictl: Response URL + crictl-->>conmon-rs: Connection upgrade to WebSocket + conmon-rs-)crictl: Stream data +{{< /mermaid >}} + +All of those enhancements require iterative design decisions, while the original +well-conceived implementation acts as the foundation for those. I really hope +you've enjoyed this compact journey through the history of CRI RPCs. Feel free +to reach out to me anytime for suggestions or feedback using the +[official Kubernetes Slack](https://kubernetes.slack.com/team/U53SUDBD4). From d71788058aab67d26ed554e24b66d2e58cb85e4b Mon Sep 17 00:00:00 2001 From: xin gu <418294249@qq.com> Date: Mon, 29 Apr 2024 14:45:23 +0800 Subject: [PATCH 0365/1086] sync localization install-kubeadm pod-failure-policy Update localization.md --- content/zh-cn/docs/contribute/localization.md | 6 +++--- .../production-environment/tools/kubeadm/install-kubeadm.md | 2 +- content/zh-cn/docs/tasks/job/pod-failure-policy.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/content/zh-cn/docs/contribute/localization.md b/content/zh-cn/docs/contribute/localization.md index e630d6cfcb..ebdebb92ca 100644 --- a/content/zh-cn/docs/contribute/localization.md +++ b/content/zh-cn/docs/contribute/localization.md @@ -621,15 +621,15 @@ Releases | [All heading and subheading URLs](/releases) Translated documents must reside in their own `content/**/` subdirectory, but otherwise, follow the same URL path as the English source. For example, to prepare the [Kubernetes Basics](/docs/tutorials/kubernetes-basics/) tutorial for translation into German, -create a subfolder under the `content/de/` folder and copy the English source: +create a subdirectory under the `content/de/` directory and copy the English source or directory: --> 翻译后的文档必须保存在自己的 `content/**/` 子目录中,否则将遵循与英文源相同的 URL 路径。 例如,要准备将 [Kubernetes 基础](/zh-cn/docs/tutorials/kubernetes-basics/)教程翻译为德语, -请在 `content/de/` 文件夹下创建一个子文件夹并复制英文源: +请在 `content/de/` 目录下创建一个子目录,并复制英文源文件或目录: ```shell mkdir -p content/de/docs/tutorials -cp content/en/docs/tutorials/kubernetes-basics.md content/de/docs/tutorials/kubernetes-basics.md +cp -ra content/en/docs/tutorials/kubernetes-basics/ content/de/docs/tutorials/ ``` -{{< feature-state for_k8s_version="v1.26" state="beta" >}} +{{< feature-state feature_gate_name="JobPodFailurePolicy" >}} From a23a91ab1fdb0137caa8b4c6efeac137327e0ee2 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Mon, 29 Apr 2024 06:58:17 +0000 Subject: [PATCH 0366/1086] [bn] renamed reference glossary sidecar-container.md Signed-off-by: Sajib Adhikary --- .../glossary/{sidecar-containers.md => sidecar-container.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename content/bn/docs/reference/glossary/{sidecar-containers.md => sidecar-container.md} (100%) 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 From 4b5e7847e428bed94544105ba07194159ec68610 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:22:11 +0600 Subject: [PATCH 0367/1086] Update README-bn.md --- README-bn.md | 165 ++++++++++++++++++++++++++++----------------------- 1 file changed, 91 insertions(+), 74 deletions(-) diff --git a/README-bn.md b/README-bn.md index 5c0041dfb1..765d05e2af 100644 --- a/README-bn.md +++ b/README-bn.md @@ -1,83 +1,84 @@ -# Kubernetes ডকুমেন্টেশন +# কুবারনেটিস ডকুমেন্টেশন -[![Build Status](https://api.travis-ci.org/kubernetes/website.svg?branch=master)](https://travis-ci.org/kubernetes/website) -[![GitHub release](https://img.shields.io/github/release/kubernetes/website.svg)](https://github.com/kubernetes/website/releases/latest) - -স্বাগত! এই সংগ্রহস্থলে [Kubernetes ওয়েবসাইট এবং ডকুমেন্টেশন](https://kubernetes.io/) তৈরি করার জন্য প্রয়োজনীয় সমস্ত উপাদান রয়েছে। আমরা খুবই আনন্দিত যে আপনি অবদান রাখতে চান! +[![Netlify Status](https://api.netlify.com/api/v1/badges/be93b718-a6df-402a-b4a4-855ba186c97d/deploy-status)](https://app.netlify.com/sites/kubernetes-io-main-staging/deploys) [![GitHub release](https://img.shields.io/github/release/kubernetes/website.svg)](https://github.com/kubernetes/website/releases/latest) +এই রিপোজিটোরিতে [কুবারনেটিস ওয়েবসাইট এবং ডকুমেন্টেশন](https://kubernetes.io/) তৈরি করার জন্য প্রয়োজনীয় সমস্ত উপাদান রয়েছে। আমরা খুবই আনন্দিত যে আপনি অবদান রাখতে চান! - [ডকুমেন্টেশন এ অবদান](#contributing-to-the-docs) -- [স্থানীয়করণ ReadMeগুলি](#localization-readmemds) +- [স্থানীয়করণ ReadMeগুলো](#localization-readmemds) -## `README.md` এর স্থানীয়করণ কুবারনেটস ডকুমেন্টেশন -আপনি বাংলা স্থানীয়করণের রক্ষণাবেক্ষণকারীদের (maintainers) কাছে পৌঁছাতে পারেন: -* MD Shahriyar Al Mustakim Mitul ([LinkedIn](https://www.linkedin.com/in/md-shahriyar-al-mustakim-mitul-9084b31a0/), [Twitter](https://twitter.com/ShahriyarMitul), [GitHub](https://github.com/mitul3737)) -* [Slack চ্যানেল](https://kubernetes.slack.com/messages/kubernetes-docs-bn) +## এই রিপোজিটোরি ব্যবহার - - -## এই সংগ্রহস্থল ব্যবহার করে - - -আপনি Hugo (বর্ধিত সংস্করণ) ব্যবহার করে স্থানীয়ভাবে ওয়েবসাইটটি চালাতে পারেন, অথবা আপনি এটি একটি কন্টেইনার রানটাইমে চালাতে পারেন। আমরা দৃঢ়ভাবে কন্টেইনার রানটাইম ব্যবহার করার পরামর্শ দিই, কারণ এটি লাইভ ওয়েবসাইটের সাথে স্থাপনার ধারাবাহিকতা দেয়। +আপনি [Hugo (বর্ধিত সংস্করণ)](https://gohugo.io/) ব্যবহার করে স্থানীয়ভাবে ওয়েবসাইটটি চালাতে পারেন, অথবা আপনি এটি একটি কন্টেইনার রানটাইমে চালাতে পারেন। আমরা দৃঢ়ভাবে কন্টেইনার রানটাইম ব্যবহার করার পরামর্শ দিই, কারণ এটি লাইভ ওয়েবসাইটের সাথে ডিপ্লয়মেন্টের ধারাবাহিকতা দেয়। ## পূর্বশর্ত -এই সংগ্রহস্থলটি(repository) ব্যবহার করার জন্য, আপনাকে লোকাল সিস্টেম বা, ডিভাইস এ নিম্নলিখিত জিনিস ইনস্টল করতে হবে: +এই রিপোজিটোরিটি ব্যবহার করার জন্য, আপনাকে লোকাল সিস্টেম বা, ডিভাইস এ নিম্নলিখিত জিনিস ইনস্টল করতে হবে: - [npm](https://www.npmjs.com/) -- [Go](https://golang.org/) +- [Go](https://go.dev/) - [Hugo (বর্ধিত সংস্করণ)](https://gohugo.io/) -- একটি ধারক রানটাইম, উদাহরন হিসেবে [Docker](https://www.docker.com/). +- একটি কন্টেইনার রানটাইম, যেমন [Docker](https://www.docker.com/). + +> [!NOTE] +[`netlify.toml`](netlify.toml#L11) ফাইলে `HUGO_VERSION` এনভায়রনমেন্ট ভেরিয়েবল দ্বারা নির্দিষ্ট করা Hugo বর্ধিত সংস্করণ ইনস্টল করা নিশ্চিত করুন৷ + +আপনি কাজ শুরু করার আগে, দরকারি জিনিসগুলো ইনস্টল করুন। রিপোজিটোরি ক্লোন(clone) করুন এবং ডিরেক্টরিতে(directory) প্রবেশ করুন: -আপনি কাজ শুরু করার আগে, দরকারি জিনিসগুলো ইনস্টল করুন। সংগ্রহস্থল ক্লোন(clone) করুন এবং ডিরেক্টরিতে(directory) প্রবেশ করুন: ```bash git clone https://github.com/kubernetes/website.git cd website ``` -কুবারনেটিস ওয়েবসাইটটি [Docsy Hugo থিম](https://github.com/google/docsy#readme) ব্যবহার করে। এমনকি যদি আপনি একটি কনটেইনার ওয়েবসাইট চালানোর পরিকল্পনা করেন, আমরা দৃঢ়ভাবে নিম্নলিখিতগুলি চালিয়ে সাবমডিউল এবং অন্যান্য প্রয়োজনীয় জিনিসগুলিশগুলি পুল(pull) করার পরামর্শ দিই: +কুবারনেটিস ওয়েবসাইটটি [Docsy Hugo থিম](https://github.com/google/docsy#readme) ব্যবহার করে। এমনকি যদি আপনি একটি কন্টেইনারে ওয়েবসাইট চালানোর পরিকল্পনা করেন, আমরা দৃঢ়ভাবে নিম্নলিখিতগুলি চালিয়ে সাবমডিউল এবং অন্যান্য প্রয়োজনীয় জিনিসগুলো পুল(pull) করার পরামর্শ দিই: - -```bash -# ডকসি সাবমডিউল পুল করুন +### Windows +```powershell +# fetch submodule dependencies git submodule update --init --recursive --depth 1 ``` -## একটি কনটেইনার ব্যবহার করে ওয়েবসাইট চালানো +### Linux / other Unix +```bash +# fetch submodule dependencies +make module-init +``` -একটি কনটেইনারে সাইটটি তৈরি করতে, কনটেইনার চিত্র(container image) তৈরি করতে এবং এটি চালাতে নিম্নলিখিতটি চালান: +## একটি কন্টেইনার ব্যবহার করে ওয়েবসাইট চালানো + +একটি কন্টেইনারে সাইটটি তৈরি করতে, নিম্নলিখিতটি চালান: ```bash -make container-image +# You can set $CONTAINER_ENGINE to the name of any Docker-like container tool make container-serve ``` -আপনি যদি ত্রুটি দেখতে পান, তাহলে সম্ভবত এর অর্থ হল Hugo কন্টেইনারে যথেষ্ট কম্পিউটিং স্থান উপস্থিত ছিল না। এটি সমাধান করতে, আপনার মেশিনে ডকারের (Docker) জন্য অনুমোদিত CPU এবং মেমরি ব্যবহারের পরিমাণ বাড়ান [MacOSX](https://docs.docker.com/docker-for-mac/#resources) এবং [Windows](https://docs.docker.com/docker-for-windows/#resources) +আপনি যদি ত্রুটি দেখতে পান, তাহলে সম্ভবত এর অর্থ হলো Hugo কন্টেইনারে যথেষ্ট কম্পিউটিং রিসোর্স নেই। এটি সমাধান করতে, আপনার মেশিনে Docker এর জন্য অনুমোদিত CPU এবং মেমরি ব্যবহারের পরিমাণ বাড়ান ([MacOS](https://docs.docker.com/desktop/settings/mac/) এবং [Windows](https://docs.docker.com/desktop/settings/windows/))। -ওয়েবসাইটটি দেখতে -এ আপনার ব্রাউজার খুলুন। আপনি সোর্স ফাইলগুলিতে পরিবর্তন করার সাথে সাথে, Hugo ওয়েবসাইট আপডেট করে এবং একটি ব্রাউজার রিফ্রেশ করতে বাধ্য করে। +ওয়েবসাইটটি দেখতে -এ আপনার ব্রাউজার খুলুন। আপনি সোর্স ফাইলগুলোতে পরিবর্তন করার সাথে সাথে, Hugo ওয়েবসাইট আপডেট করে এবং একটি ব্রাউজার রিফ্রেশ করতে বাধ্য করে। ## Hugo ব্যবহার করে লোকাল ডিভাইস এ ওয়েবসাইট চালানো -নিশ্চিত করুন যে Hugo বর্ধিত সংস্করণ ইনস্টল করা হয়েছে `HUGO_VERSION`নামক এনভায়রনমেন্ট ভেরিয়েবল দ্বারা[`netlify.toml`](netlify.toml#L10) - -স্থানীয়ভাবে সাইট তৈরি এবং পরীক্ষা করতে, চালান: - -```bash -# নির্ভরতা গুলি ইনস্টল করুন -npm ci -make serve -``` - -এটি পোর্ট 1313-এ স্থানীয় হুগো সার্ভার শুরু করবে। ওয়েবসাইট দেখতে -এ আপনার ব্রাউজার খুলুন। আপনি সোর্স ফাইলগুলিতে পরিবর্তন করার সাথে সাথে, Hugo ওয়েবসাইট আপডেট হবে এবং একটি ব্রাউজার রিফ্রেশ করতে বাধ্য করে। +দরকারি জিনিসগুলো ইনস্টল করতে, স্থানীয়ভাবে সাইট তৈরি এবং পরীক্ষা করতে, চালান: +- For macOS and Linux + ```bash + npm ci + make serve + ``` +- For Windows (PowerShell) + ```powershell + npm ci + hugo.exe server --buildFuture --environment development + ``` + +এটি পোর্ট 1313-এ স্থানীয় Hugo সার্ভার শুরু করবে। ওয়েবসাইট দেখতে -এ আপনার ব্রাউজার খুলুন। আপনি সোর্স ফাইলগুলোতে পরিবর্তন করার সাথে সাথে, Hugo ওয়েবসাইট আপডেট হবে এবং একটি ব্রাউজার রিফ্রেশ করতে বাধ্য করে। ## API রেফারেন্স পৃষ্ঠা তৈরি করা +`content/en/docs/reference/kubernetes-api` এ অবস্থিত API রেফারেন্স পৃষ্ঠাগুলো ব্যবহার করে Swagger স্পেসিফিকেশন থেকে তৈরি করা হয়েছে, যা OpenAPI স্পেসিফিকেশন নামেও পরিচিত। -`content/en/docs/reference/kubernetes-api` এ অবস্থিত API রেফারেন্স পৃষ্ঠাগুলি ব্যবহার করে Swagger স্পেসিফিকেশন থেকে তৈরি করা হয়েছে - -একটি নতুন কুবারনেটিস(Kubernetes) রিলিজের জন্য রেফারেন্স পৃষ্ঠাগুলি আপডেট করতে এই পদক্ষেপগুলি অনুসরণ করুন: +একটি নতুন কুবারনেটিস রিলিজের জন্য রেফারেন্স পৃষ্ঠাগুলো আপডেট করতে এই পদক্ষেপগুলো অনুসরণ করুন: 1. `api-ref-generator` সাবমডিউল পুল (Pull) করুন: @@ -91,36 +92,31 @@ make serve curl 'https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json' > api-ref-assets/api/swagger.json ``` -3. `api-ref-assets/config/`-এ, নতুন রিলিজের পরিবর্তনগুলি প্রতিফলিত করতে `toc.yaml` এবং `fields.yaml` ফাইলগুলিকে হালনাগাদ করে নিন। +3. `api-ref-assets/config/`-এ, নতুন রিলিজের পরিবর্তনগুলো প্রতিফলিত করতে `toc.yaml` এবং `fields.yaml` ফাইলগুলোকে হালনাগাদ করে নিন। - -4. পরবর্তী, পৃষ্ঠাগুলি তৈরি করুন: +4. পরবর্তী, পৃষ্ঠাগুলো তৈরি করুন: ```bash make api-reference ``` - আপনি একটি কনটেইনার চিত্র (Container image) থেকে সাইট তৈরি এবং পরিবেশন করে স্থানীয়ভাবে ফলাফল পরীক্ষা করতে পারেন: - + আপনি একটি কন্টেইনার থেকে সাইট তৈরি এবং পরিবেশন করে স্থানীয়ভাবে ফলাফল পরীক্ষা করতে পারেন: + ```bash - make container-image make container-serve ``` একটি ওয়েব ব্রাউজারে, API রেফারেন্স দেখতে এ যান। -5.যখন নতুন চুক্তির সমস্ত পরিবর্তন কনফিগারেশন ফাইল `toc.yaml` এবং `fields.yaml`-এ প্রতিফলিত হয়, তখন নতুন জেনারেট করা API রেফারেন্স পৃষ্ঠাগুলির সাথে একটি পুল অনুরোধ (Pull request) তৈরি করুন। +5. যখন নতুন চুক্তির সমস্ত পরিবর্তন কনফিগারেশন ফাইল `toc.yaml` এবং `fields.yaml`-এ প্রতিফলিত হয়, তখন নতুন তৈরি করা API রেফারেন্স পৃষ্ঠাগুলোর সাথে একটি পুল রিকোয়েস্ট তৈরি করুন। - -## সমস্যা সমাধান +## সমস্যা সমাধান (Troubleshooting) ### error: failed to transform resource: TOCSS: failed to transform "scss/main.scss" (text/x-scss): this feature is not available in your current Hugo version +প্রযুক্তিগত কারণে Hugo কে দুই সেট বাইনারিতে পাঠানো হয়। বর্তমান ওয়েবসাইটটি শুধুমাত্র **Hugo Extended** সংস্করণের উপর ভিত্তি করে চলে। [রিলিজ পৃষ্ঠা](https://github.com/gohugoio/hugo/releases) নামের মধ্যে `বর্ধিত(extended)` সহ সংরক্ষণাগারগুলো খুঁজুন। নিশ্চিত করতে, `hugo version` চালান এবং `extended` শব্দটি সন্ধান করুন। -প্রযুক্তিগত কারণে হুগোকে দুই সেট বাইনারিতে পাঠানো হয়েছে। বর্তমান ওয়েবসাইটটি শুধুমাত্র **Hugo Extended** সংস্করণের উপর ভিত্তি করে চলে। [রিলিজ পৃষ্ঠা](https://github.com/gohugoio/hugo/releases) নামের মধ্যে `বর্ধিত(extended)` সহ সংরক্ষণাগারগুলি খুঁজুন। নিশ্চিত করতে, `হুগো সংস্করণ (hugo version)` চালান এবং `বর্ধিত (extended)` শব্দটি সন্ধান করুন। - - -### অনেকগুলি খোলা ফাইলের জন্য macOS সমস্যা সমাধান করা হচ্ছে +### অনেকগুলো খোলা ফাইলের জন্য macOS সমস্যা সমাধান করা আপনি যদি macOS-এ `make serve` চালান এবং নিম্নলিখিত ত্রুটি পান: @@ -137,57 +133,78 @@ make: *** [serve] Error 1 ```shell #!/bin/sh -# নিচের গুলি মূল সারাংশ(gist) লিঙ্ক, এবং আমার সারাংশ(gist) লিঙ্ক এর সাথে সম্পর্ক স্থাপন করি. + +# These are the original gist links, linking to my gists now. # curl -O https://gist.githubusercontent.com/a2ikm/761c2ab02b7b3935679e55af5d81786a/raw/ab644cb92f216c019a2f032bbf25e258b01d87f9/limit.maxfiles.plist # curl -O https://gist.githubusercontent.com/a2ikm/761c2ab02b7b3935679e55af5d81786a/raw/ab644cb92f216c019a2f032bbf25e258b01d87f9/limit.maxproc.plist + curl -O https://gist.githubusercontent.com/tombigel/d503800a282fcadbee14b537735d202c/raw/ed73cacf82906fdde59976a0c8248cce8b44f906/limit.maxfiles.plist curl -O https://gist.githubusercontent.com/tombigel/d503800a282fcadbee14b537735d202c/raw/ed73cacf82906fdde59976a0c8248cce8b44f906/limit.maxproc.plist + sudo mv limit.maxfiles.plist /Library/LaunchDaemons sudo mv limit.maxproc.plist /Library/LaunchDaemons + sudo chown root:wheel /Library/LaunchDaemons/limit.maxfiles.plist sudo chown root:wheel /Library/LaunchDaemons/limit.maxproc.plist + sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist ``` +এটি Catalina পাশাপাশি Mojave macOS এর জন্য কাজ করে। -এটি ক্যাটালিনার(Catalina) পাশাপাশি Mojave macOS এর জন্য কাজ করে। +## SIG Docs এর সাথে জড়িত হন -## SIG ডক্সের সাথে জড়িত হন - -[কমিউনিটি পৃষ্ঠা](https://github.com/kubernetes/community/tree/master/sig-docs#meetings) এ SIG ডক্স কুবারনেটিস সম্প্রদায় এবং মিটিং সম্পর্কে আরও জানুন। +[কমিউনিটি পৃষ্ঠা](https://github.com/kubernetes/community/tree/master/sig-docs#meetings) থেকে SIG Docs কুবারনেটিস কমিউনিটি এবং মিটিং সম্পর্কে আরও জানুন। এছাড়াও আপনি এই প্রকল্পের রক্ষণাবেক্ষণকারীদের কাছে পৌঁছাতে পারেন: + - [Slack](https://kubernetes.slack.com/messages/sig-docs) - [এই Slack এর জন্য একটি আমন্ত্রণ পান](https://slack.k8s.io/) - [মেইলিং তালিকা](https://groups.google.com/forum/#!forum/kubernetes-sig-docs) -## ডক্স এ অবদান রাখুন +## Docs এ অবদান রাখুন -আপনি আপনার GitHub অ্যাকাউন্টে এই সংগ্রহস্থলের (repository) একটি অনুলিপি তৈরি করতে স্ক্রিনের উপরের ডানদিকে **Fork** বোতামে ক্লিক করতে পারেন। এই অনুলিপিটিকে _ফর্ক(fork)_ বলা হয়। আপনার ফর্কটতিতে আপনি যে কোনো পরিবর্তন করতে চান এবং আপনি যখন সেই পরিবর্তনগুলি আমাদের কাছে পাঠাতে প্রস্তুত হন, তখন আপনার ফর্কে যান এবং এটি সম্পর্কে আমাদের জানাতে একটি নতুন পুল অনুরোধ (Pull request) তৈরি করুন৷ +আপনি আপনার GitHub অ্যাকাউন্টে এই রিপোজিটোরি এর একটি অনুলিপি তৈরি করতে স্ক্রিনের উপরের ডানদিকে **Fork** বোতামে ক্লিক করতে পারেন। এই অনুলিপিটিকে _ফর্ক(fork)_ বলা হয়। আপনার ফর্কটিতে আপনি যে কোনো পরিবর্তন করতে চান এবং আপনি যখন সেই পরিবর্তনগুলো আমাদের কাছে পাঠাতে প্রস্তুত হন, তখন আপনার ফর্কে যান এবং এটি সম্পর্কে আমাদের জানাতে একটি নতুন পুল রিকোয়েস্ট (Pull request) তৈরি করুন৷ -একবার আপনার পুল অনুরোধ(Pull request) তৈরি হয়ে গেলে, একজন Kubernetes পর্যালোচক স্পষ্ট, কার্যকর প্রতিক্রিয়া প্রদানের দায়িত্ব নেবেন। পুল অনুরোধের মালিক হিসাবে, **কুবারনেটস (Kubernetes) পর্যালোচক আপনাকে যে প্রতিক্রিয়া প্রদান করেছেন তা সমাধান করার জন্য আপনার পুল অনুরোধ (Pull request) সংশোধন করার দায়িত্ব আপনার।** +একবার আপনার পুল রিকোয়েস্ট তৈরি হয়ে গেলে, একজন কুবারনেটিস পর্যালোচক স্পষ্ট, কার্যকর প্রতিক্রিয়া প্রদানের দায়িত্ব নেবেন। পুল রিকোয়েস্টের মালিক হিসাবে, **কুবারনেটিস পর্যালোচক আপনাকে যে প্রতিক্রিয়া প্রদান করেছেন তা সমাধান করার জন্য আপনার পুল রিকোয়েস্ট সংশোধন করার দায়িত্ব আপনার।** +এছাড়াও, মনে রাখবেন যে আপনার কাছে একাধিক কুবারনেটিস পর্যালোচক আপনাকে প্রতিক্রিয়া প্রদান করতে পারেন বা আপনি একজন কুবারনেটিস পর্যালোচকের কাছ থেকে প্রতিক্রিয়া পেতে পারেন যা আপনাকে প্রতিক্রিয়া প্রদানের জন্য প্রাথমিকভাবে নির্ধারিত একটি থেকে আলাদা। -এছাড়াও, মনে রাখবেন যে আপনার কাছে একাধিক Kubernetes পর্যালোচক আপনাকে প্রতিক্রিয়া প্রদান করতে পারেন বা আপনি একজন Kubernetes পর্যালোচকের কাছ থেকে প্রতিক্রিয়া পেতে পারেন যা আপনাকে প্রতিক্রিয়া প্রদানের জন্য প্রাথমিকভাবে নির্ধারিত একটি থেকে আলাদা। +তদুপরি, কিছু ক্ষেত্রে, আপনার একজন পর্যালোচক প্রয়োজনের সময় একজন কুবারনেটিস টেকনিকাল পর্যালোচনাকারীর কাছ থেকে প্রযুক্তিগত পর্যালোচনা চাইতে পারেন। পর্যালোচকরা যথাসময়ে প্রতিক্রিয়া প্রদানের জন্য তাদের যথাসাধ্য চেষ্টা করবেন কিন্তু প্রতিক্রিয়ার সময় পরিস্থিতির উপর ভিত্তি করে পরিবর্তিত হতে পারে। +কুবারনেটিস ডকুমেন্টেশনে অবদান সম্পর্কে আরও তথ্যের জন্য, দেখুন: -তদুপরি, কিছু ক্ষেত্রে, আপনার একজন পর্যালোচক প্রয়োজনের সময় একজন কুবারনেটস কারিগরি পর্যালোচনাকারীর কাছ থেকে প্রযুক্তিগত পর্যালোচনা চাইতে পারেন। পর্যালোচকরা যথাসময়ে প্রতিক্রিয়া প্রদানের জন্য তাদের যথাসাধ্য চেষ্টা করবেন কিন্তু প্রতিক্রিয়ার সময় পরিস্থিতির উপর ভিত্তি করে পরিবর্তিত হতে পারে। - -Kubernetes ডকুমেন্টেশনে অবদান সম্পর্কে আরও তথ্যের জন্য, দেখুন: - [কুবারনেটিস ডক্সে অবদান রাখুন](https://kubernetes.io/docs/contribute/) - [পৃষ্ঠা বিষয়বস্তুর প্রকার](https://kubernetes.io/docs/contribute/style/page-content-types/) - [ডকুমেন্টেশন শৈলী গাইড](https://kubernetes.io/docs/contribute/style/style-guide/) - [কুবারনেটিস ডকুমেন্টেশন স্থানীয়করণ](https://kubernetes.io/docs/contribute/localization/) +- [কুবারনেটিস ডক্সের পরিচিতি](https://www.youtube.com/watch?v=pprMgmNzDcw) +### নতুন অবদানকারী অ্যাম্বাসেডর +অবদান রাখার সময় আপনার যদি যেকোনো সময়ে সাহায্যের প্রয়োজন হয়, [নতুন কন্ট্রিবিউটর অ্যাম্বাসেডর](https://kubernetes.io/docs/contribute/advanced/#serve-as-a-new-contributor-ambassador) যোগাযোগের একটি ভালো জায়গা। . এগুলো হলো SIG ডক্স অনুমোদনকারীযাদের দায়িত্ব গুলোর মধ্যে নতুন অবদানকারীদের পরামর্শ দেওয়া এবং তাদের প্রথম কয়েকটি পুল রিকোয়েস্টের মাধ্যমে তাদের সাহায্য করা অন্তর্ভুক্ত৷ নতুন কন্ট্রিবিউটর অ্যাম্বাসেডরদের সাথে যোগাযোগ করার সবচেয়ে ভালো জায়গা হবে [Kubernetes Slack](https://slack.k8s.io/)। SIG ডক্সের জন্য বর্তমান নতুন অবদানকারী অ্যাম্বাসেডর: -## আচরণ বিধি +| Name | Slack | GitHub | +| -------------------------- | -------------------------- | -------------------------- | +| Arsh Sharma | @arsh | @RinkiyaKeDad | -Kubernetes সম্প্রদায়ে অংশগ্রহণ [CNCF কোড অফ কন্ডাক্ট](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) দ্বারা পরিচালিত হয়। +## Localization READMEs + +| Language | Language | +| -------------------------- | -------------------------- | +| [Bengali](README-bn.md) | [Korean](README-ko.md) | +| [Chinese](README-zh.md) | [Polish](README-pl.md) | +| [French](README-fr.md) | [Portuguese](README-pt.md) | +| [German](README-de.md) | [Russian](README-ru.md) | +| [Hindi](README-hi.md) | [Spanish](README-es.md) | +| [Indonesian](README-id.md) | [Ukrainian](README-uk.md) | +| [Italian](README-it.md) | [Vietnamese](README-vi.md) | +| [Japanese](README-ja.md) | | + +## কোড অফ কন্ডাক্ট + +কুবারনেটিস কমিউনিটিয়ের অংশগ্রহণ [CNCF কোড অফ কন্ডাক্ট](https://github.com/cncf/foundation/blob/main/code-of-conduct.md) দ্বারা পরিচালিত হয়। ## ধন্যবাদ -Kubernetes সম্প্রদায়ের অংশগ্রহণে উন্নতি লাভ করে, এবং আমরা আমাদের ওয়েবসাইট এবং আমাদের ডকুমেন্টেশনে আপনার অবদানের প্রশংসা করি! - - - +কুবারনেটিস কমিউনিটিয়ের অংশগ্রহণে উন্নতি লাভ করে, এবং আমরা আমাদের ওয়েবসাইট এবং আমাদের ডকুমেন্টেশনে আপনার অবদানের প্রশংসা করি! From f34b6b11c5d640691854fb70986b699105a37740 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:26:14 +0600 Subject: [PATCH 0368/1086] Update README.md --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a47bdd6b44..82851d59ad 100644 --- a/README.md +++ b/README.md @@ -192,13 +192,14 @@ If you need help at any point when contributing, the [New Contributor Ambassador | Language | Language | | -------------------------- | -------------------------- | -| [Chinese](README-zh.md) | [Korean](README-ko.md) | -| [French](README-fr.md) | [Polish](README-pl.md) | -| [German](README-de.md) | [Portuguese](README-pt.md) | -| [Hindi](README-hi.md) | [Russian](README-ru.md) | -| [Indonesian](README-id.md) | [Spanish](README-es.md) | -| [Italian](README-it.md) | [Ukrainian](README-uk.md) | -| [Japanese](README-ja.md) | [Vietnamese](README-vi.md) | +| [Bengali](README-bn.md) | [Korean](README-ko.md) | +| [Chinese](README-zh.md) | [Polish](README-pl.md) | +| [French](README-fr.md) | [Portuguese](README-pt.md) | +| [German](README-de.md) | [Russian](README-ru.md) | +| [Hindi](README-hi.md) | [Spanish](README-es.md) | +| [Indonesian](README-id.md) | [Ukrainian](README-uk.md) | +| [Italian](README-it.md) | [Vietnamese](README-vi.md) | +| [Japanese](README-ja.md) | | ## Code of conduct From f1aa9553dc0fb451f1972459086f60a7de28c50f Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:53:46 +0600 Subject: [PATCH 0369/1086] Create job-sidecar.yaml --- .../examples/application/job/job-sidecar.yaml | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 content/bn/examples/application/job/job-sidecar.yaml 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 0000000000..ce483b872e --- /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: {} From 06647ca934881540b06b44a4de845290a89996f4 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:54:12 +0600 Subject: [PATCH 0370/1086] Create cronjob.yaml --- .../bn/examples/application/job/cronjob.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/application/job/cronjob.yaml diff --git a/content/bn/examples/application/job/cronjob.yaml b/content/bn/examples/application/job/cronjob.yaml new file mode 100644 index 0000000000..78d0e2d314 --- /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 From df73b95960eb49a89007fe191c4b4e7956d3da04 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:54:36 +0600 Subject: [PATCH 0371/1086] Create indexed-job-vol.yaml --- .../application/job/indexed-job-vol.yaml | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 content/bn/examples/application/job/indexed-job-vol.yaml 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 0000000000..cecc2b7e65 --- /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'] From 803b49c821782a94b890a7f01b78bad8875e725c Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:54:59 +0600 Subject: [PATCH 0372/1086] Create indexed-job.yaml --- .../examples/application/job/indexed-job.yaml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 content/bn/examples/application/job/indexed-job.yaml 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 0000000000..5b80d35264 --- /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: {} From 464891968b690b9a512a72587dd9555fc6454d52 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:55:24 +0600 Subject: [PATCH 0373/1086] Create job-tmpl.yaml --- .../bn/examples/application/job/job-tmpl.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 content/bn/examples/application/job/job-tmpl.yaml 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 0000000000..d7dbbafd62 --- /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 From 152e68c34b0f2fc87523c11e894f5e990dc5ac91 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sun, 21 Apr 2024 22:45:15 +0800 Subject: [PATCH 0374/1086] [zh-cn] sync kubelet-config-file.md Signed-off-by: xin.li --- .../administer-cluster/kubelet-config-file.md | 284 +++++++++++++++--- 1 file changed, 238 insertions(+), 46 deletions(-) diff --git a/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md b/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md index 0de708b0dc..0f46bba612 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md +++ b/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md @@ -12,6 +12,21 @@ content_type: task weight: 330 ---> +## {{% heading "prerequisites" %}} + + +此页面中的某些步骤使用 `jq` 工具。如果你没有 `jq`,你可以通过操作系统的软件源安装它,或者从 +[https://jqlang.github.io/jq/](https://jqlang.github.io/jq/) 中获取它。 + +某些步骤还涉及安装 `curl`,它可以通过操作系统的软件源安装。 + ## kubelet 配置文件的插件目录 {#kubelet-conf-d} -自 Kubernetes v1.28.0 起,kubelet 被扩展以支持一个插件配置目录。 -该目录的位置可以使用 `--config-dir` 标志来指定,默认为 `""`,也就是被禁用状态。 +{{}} -只有在为 kubelet 进程设置环境变量 `KUBELET_CONFIG_DROPIN_DIR_ALPHA` -(该变量的值无关紧要)时才可以设置 `--config-dir`。对于 Kubernetes v{{< skew currentVersion >}}, -如果你未设置该变量而指定了 `--config-dir`,kubelet 将返回错误并且启动失败。 -你不能使用 kubelet 配置文件指定插件配置目录;只能使用 CLI 参数 `--config-dir` 进行设置。 +你可以为 kubelet 指定一个插件配置目录。默认情况下,kubelet +不会在任何地方查找插件配置文件 - 你必须指定路径。 +例如:`--config-dir=/etc/kubernetes/kubelet.conf.d` -你可以以类似于 kubelet 配置文件的方式使用 kubelet 配置目录。 +对于 Kubernetes v1.28 到 v1.29,如果你还为 kubelet +进程设置了环境变量 `KUBELET_CONFIG_DROPIN_DIR_ALPHA`(该变量的值无关紧要), +则只能指定 `--config-dir`。 {{< note >}} -合法的 kubelet 插件配置文件的后缀必须为 `.conf`。例如 `99-kubelet-address.conf`。 +合法的 kubelet 插件配置文件的后缀**必须**为 `.conf`。例如 `99-kubelet-address.conf`。 {{< /note >}} -例如,你可能想要为所有节点设置一个基准的 kubelet 配置,但你可能想要自定义 `address` 字段。 -可以按如下方式操作: - -kubelet 配置文件的主要内容如下: - -```yaml -apiVersion: kubelet.config.k8s.io/v1beta1 -kind: KubeletConfiguration -port: 20250 -serializeImagePulls: false -evictionHard: - memory.available: "200Mi" -``` +kubelet 通过按字母数字顺序对**整个文件名**进行排序来处理其配置插件目录中的文件。 +例如,首先处理 `00-kubelet.conf`,然后用名为 `01-kubelet.conf` 的文件覆盖。 -`--config-dir` 目录中某个文件的内容如下: +这些文件可能包含部分配置,并且它们本身可能不是有效的配置文件。 +仅对 kubelet 内部存储的、最终生成的配置结构执行验证。 +这让你能够灵活管理和组合不同来源的 kubelet 配置。 +但是,请务必注意,产生的行为会根据配置字段的数据类型而有所不同。 -```yaml -apiVersion: kubelet.config.k8s.io/v1beta1 -kind: KubeletConfiguration -address: "192.168.0.8" -``` + +kubelet 配置结构中不同数据类型的合并方式不同。 +有关详细信息,请参阅[参考文档](/zh-cn/docs/reference/node/kubelet-config-directory-merging.md)。 + + +### kubelet 配置合并顺序 {#kubelet-configuration-merging-order} 在启动时,kubelet 会合并来自以下几部分的配置: -* 命令行参数(优先级最低)。 +* 在命令行中指定的特性门控(优先级最低)。 * kubelet 配置文件。 * 排序的插件配置文件。 -* 在命令行中指定的特性门控(优先级最高)。 +* 不包括特性门控的命令行参数(优先级最高)。 + +{{< note >}} + +kubelet 的配置插件目录机制类似,但与 `kubeadm` 工具允许 patch 配置的方式不同。 +`kubeadm` 工具使用特定的[补丁策略](/zh-cn/docs/setup/production-environment/tools/kubeadm/control-plane-flags/#patches), +而 kubelet 配置插件文件的唯一补丁策略是 `replace`。kubelet 根据字母数字对**后缀**进行排序来确定合并顺序, +并替换更高优先级文件中存在的每个字段。 +{{< /note >}} -这将产生与之前示例中使用的[单个配置文件](#create-the-config-file)相同的结果。 +## 查看 kubelet 配置 + + +由于现在可以使用此特性将配置分布在多个文件中,因此如果有人想要检查最终启动的配置, +他们可以按照以下步骤检查 kubelet 配置: + + +1. 在终端中使用 [`kubectl proxy`](/docs/reference/kubectl/generated/kubectl-commands#proxy) 启动代理服务器。 + +```bash +kubectl proxy +``` + + +其输出如下: + +```bash +Starting to serve on 127.0.0.1:8001 + +``` + + +2. 打开另一个终端窗口并使用 `curl` 来获取 kubelet 配置。 + 将 `` 替换为节点的实际名称: + +```bash +curl -X GET http://127.0.0.1:8001/api/v1/nodes//proxy/configz | jq . +``` + +```bash +{ + "kubeletconfig": { + "enableServer": true, + "staticPodPath": "/var/run/kubernetes/static-pods", + "syncFrequency": "1m0s", + "fileCheckFrequency": "20s", + "httpCheckFrequency": "20s", + "address": "192.168.1.16", + "port": 10250, + "readOnlyPort": 10255, + "tlsCertFile": "/var/lib/kubelet/pki/kubelet.crt", + "tlsPrivateKeyFile": "/var/lib/kubelet/pki/kubelet.key", + "rotateCertificates": true, + "authentication": { + "x509": { + "clientCAFile": "/var/run/kubernetes/client-ca.crt" + }, + "webhook": { + "enabled": true, + "cacheTTL": "2m0s" + }, + "anonymous": { + "enabled": true + } + }, + "authorization": { + "mode": "AlwaysAllow", + "webhook": { + "cacheAuthorizedTTL": "5m0s", + "cacheUnauthorizedTTL": "30s" + } + }, + "registryPullQPS": 5, + "registryBurst": 10, + "eventRecordQPS": 50, + "eventBurst": 100, + "enableDebuggingHandlers": true, + "healthzPort": 10248, + "healthzBindAddress": "127.0.0.1", + "oomScoreAdj": -999, + "clusterDomain": "cluster.local", + "clusterDNS": [ + "10.0.0.10" + ], + "streamingConnectionIdleTimeout": "4h0m0s", + "nodeStatusUpdateFrequency": "10s", + "nodeStatusReportFrequency": "5m0s", + "nodeLeaseDurationSeconds": 40, + "imageMinimumGCAge": "2m0s", + "imageMaximumGCAge": "0s", + "imageGCHighThresholdPercent": 85, + "imageGCLowThresholdPercent": 80, + "volumeStatsAggPeriod": "1m0s", + "cgroupsPerQOS": true, + "cgroupDriver": "systemd", + "cpuManagerPolicy": "none", + "cpuManagerReconcilePeriod": "10s", + "memoryManagerPolicy": "None", + "topologyManagerPolicy": "none", + "topologyManagerScope": "container", + "runtimeRequestTimeout": "2m0s", + "hairpinMode": "promiscuous-bridge", + "maxPods": 110, + "podPidsLimit": -1, + "resolvConf": "/run/systemd/resolve/resolv.conf", + "cpuCFSQuota": true, + "cpuCFSQuotaPeriod": "100ms", + "nodeStatusMaxImages": 50, + "maxOpenFiles": 1000000, + "contentType": "application/vnd.kubernetes.protobuf", + "kubeAPIQPS": 50, + "kubeAPIBurst": 100, + "serializeImagePulls": true, + "evictionHard": { + "imagefs.available": "15%", + "memory.available": "100Mi", + "nodefs.available": "10%", + "nodefs.inodesFree": "5%" + }, + "evictionPressureTransitionPeriod": "1m0s", + "enableControllerAttachDetach": true, + "makeIPTablesUtilChains": true, + "iptablesMasqueradeBit": 14, + "iptablesDropBit": 15, + "featureGates": { + "AllAlpha": false + }, + "failSwapOn": false, + "memorySwap": {}, + "containerLogMaxSize": "10Mi", + "containerLogMaxFiles": 5, + "configMapAndSecretChangeDetectionStrategy": "Watch", + "enforceNodeAllocatable": [ + "pods" + ], + "volumePluginDir": "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/", + "logging": { + "format": "text", + "flushFrequency": "5s", + "verbosity": 3, + "options": { + "json": { + "infoBufferSize": "0" + } + } + }, + "enableSystemLogHandler": true, + "enableSystemLogQuery": false, + "shutdownGracePeriod": "0s", + "shutdownGracePeriodCriticalPods": "0s", + "enableProfilingHandler": true, + "enableDebugFlagsHandler": true, + "seccompDefault": false, + "memoryThrottlingFactor": 0.9, + "registerNode": true, + "localStorageCapacityIsolation": true, + "containerRuntimeEndpoint": "unix:///var/run/crio/crio.sock" + } +} +``` @@ -242,6 +431,9 @@ This produces the same outcome as if you used the [single configuration file](#c - Learn more about kubelet configuration by checking the [`KubeletConfiguration`](/docs/reference/config-api/kubelet-config.v1beta1/) reference. +- Learn more about kubelet configuration merging in the + [reference document](/docs/reference/node/kubelet-config-directory-merging.md). ---> - 参阅 [`KubeletConfiguration`](/zh-cn/docs/reference/config-api/kubelet-config.v1beta1/) 进一步学习 kubelet 的配置。 +- 在[参考文档](/zh-cn/docs/reference/node/kubelet-config-directory-merging.md)中了解有关 kubelet 配置合并的更多信息。 From 2f5c21a5d7091e64c7d1b3a31a67442f8496a3f3 Mon Sep 17 00:00:00 2001 From: windsonsea Date: Mon, 29 Apr 2024 10:19:18 +0800 Subject: [PATCH 0375/1086] [zh] Add kubelet-config-directory-merging.md --- .../node/kubelet-config-directory-merging.md | 223 ++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 content/zh-cn/docs/reference/node/kubelet-config-directory-merging.md diff --git a/content/zh-cn/docs/reference/node/kubelet-config-directory-merging.md b/content/zh-cn/docs/reference/node/kubelet-config-directory-merging.md new file mode 100644 index 0000000000..07d3b60b2b --- /dev/null +++ b/content/zh-cn/docs/reference/node/kubelet-config-directory-merging.md @@ -0,0 +1,223 @@ +--- +content_type: "reference" +title: kubelet 配置目录合并 +weight: 50 +--- + + + +当使用 kubelet 的 `--config-dir` 标志来指定存放配置的目录时,不同类型的配置会有一些特定的行为。 + +以下是在配置合并过程中不同数据类型的一些行为示例: + + +### 结构字段 {#structure-fields} + +在 YAML 结构中有两种结构字段:独立(标量类型)和嵌入式(此结构包含标量类型)。 +配置合并过程将处理独立构造字段和嵌入式构造字段的重载,以创建最终的 kubelet 配置。 + + +例如,你可能想要为所有节点设置一个基准 kubelet 配置,但希望自定义 `address` 和 `authorization` 字段。 +这种情况下,你可以按以下方式完成: + +kubelet 主配置文件内容: + +```yaml +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +port: 20250 +authorization: + mode: Webhook + webhook: + cacheAuthorizedTTL: "5m" + cacheUnauthorizedTTL: "30s" +serializeImagePulls: false +address: "192.168.0.1" +``` + + +`--config-dir` 目录中文件的内容: + +```yaml +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +authorization: + mode: AlwaysAllow + webhook: + cacheAuthorizedTTL: "8m" + cacheUnauthorizedTTL: "45s" +address: "192.168.0.8" +``` + + +生成的配置如下所示: + +```yaml +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +port: 20250 +serializeImagePulls: false +authorization: + mode: AlwaysAllow + webhook: + cacheAuthorizedTTL: "8m" + cacheUnauthorizedTTL: "45s" +address: "192.168.0.8" +``` + + +### 列表 {#lists} + +你可以重载 kubelet 配置的切片/列表值。 +但在合并过程中整个列表将被重载。 +例如,你可以按以下方式重载 `clusterDNS` 列表: + +kubelet 主配置文件的内容: + +```yaml +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +port: 20250 +serializeImagePulls: false +clusterDNS: + - "192.168.0.9" + - "192.168.0.8" +``` + + +`--config-dir` 目录中文件的内容: + +```yaml +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +clusterDNS: + - "192.168.0.2" + - "192.168.0.3" + - "192.168.0.5" +``` + + +生成的配置如下所示: + +```yaml +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +port: 20250 +serializeImagePulls: false +clusterDNS: + - "192.168.0.2" + - "192.168.0.3" + - "192.168.0.5" +``` + + +### 含嵌套结构的映射 {#maps-including-nested-structures} + +映射中的各个字段(无论其值类型是布尔值、字符串等)都可以被选择性地重载。 +但对于 `map[string][]string` 类型来说,与特定字段关联的整个列表都将被重载。 +让我们通过一个例子更好地理解这一点,特别是 `featureGates` 和 `staticPodURLHeader` 这类字段: + +kubelet 主配置文件的内容: + +```yaml +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +port: 20250 +serializeImagePulls: false +featureGates: + AllAlpha: false + MemoryQoS: true +staticPodURLHeader: + kubelet-api-support: + - "Authorization: 234APSDFA" + - "X-Custom-Header: 123" + custom-static-pod: + - "Authorization: 223EWRWER" + - "X-Custom-Header: 456" +``` + + +`--config-dir` 目录中文件的内容: + +```yaml +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +featureGates: + MemoryQoS: false + KubeletTracing: true + DynamicResourceAllocation: true +staticPodURLHeader: + custom-static-pod: + - "Authorization: 223EWRWER" + - "X-Custom-Header: 345" +``` + + +生成的配置如下所示: + +```yaml +apiVersion: kubelet.config.k8s.io/v1beta1 +kind: KubeletConfiguration +port: 20250 +serializeImagePulls: false +featureGates: + AllAlpha: false + MemoryQoS: false + KubeletTracing: true + DynamicResourceAllocation: true +staticPodURLHeader: + kubelet-api-support: + - "Authorization: 234APSDFA" + - "X-Custom-Header: 123" + custom-static-pod: + - "Authorization: 223EWRWER" + - "X-Custom-Header: 345" +``` From 015e9a4374568a63a5ac7f64029c1a775fc1ce50 Mon Sep 17 00:00:00 2001 From: her-cat Date: Mon, 29 Apr 2024 14:31:19 +0800 Subject: [PATCH 0376/1086] [zh] Sync controllers/cron-jobs.md --- .../workloads/controllers/cron-jobs.md | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/content/zh-cn/docs/concepts/workloads/controllers/cron-jobs.md b/content/zh-cn/docs/concepts/workloads/controllers/cron-jobs.md index 778f356668..2fdec0257d 100644 --- a/content/zh-cn/docs/concepts/workloads/controllers/cron-jobs.md +++ b/content/zh-cn/docs/concepts/workloads/controllers/cron-jobs.md @@ -1,5 +1,8 @@ --- title: CronJob +api_metadata: +- apiVersion: "batch/v1" + kind: "CronJob" content_type: concept description: >- CronJob 通过重复调度启动一次性的 Job。 @@ -12,6 +15,9 @@ reviewers: - soltysh - janetkuo title: CronJob +api_metadata: +- apiVersion: "batch/v1" + kind: "CronJob" content_type: concept description: >- A CronJob starts one-time Jobs on a repeating schedule. @@ -310,18 +316,28 @@ When `.spec.suspend` changes from `true` to `false` on an existing CronJob witho ### 任务历史限制 {#jobs-history-limits} -`.spec.successfulJobsHistoryLimit` 和 `.spec.failedJobsHistoryLimit` 字段是可选的。 -这两个字段指定应保留多少已完成和失败的 Job。 -默认设置分别为 3 和 1。将限制设置为 `0` 代表相应类型的 Job 完成后不会保留。 +`.spec.successfulJobsHistoryLimit` 和 `.spec.failedJobsHistoryLimit` +字段指定应保留多少已完成和失败的 Job。这两个字段都是可选的。 + +* `.spec.successfulJobsHistoryLimit`:此字段指定要保留多少成功完成的 Job。默认值为 `3`。 + 将此字段设置为 `0` 意味着不会保留任何成功的 Job。 + +* `.spec.failedJobsHistoryLimit`:此字段指定要保留多少失败完成的 Job。默认值为 `1`。 + 将此字段设置为 `0` 意味着不会保留任何失败的 Job。 有关自动清理 Job 的其他方式, 请参见[自动清理完成的 Job](/zh-cn/docs/concepts/workloads/controllers/job/#clean-up-finished-jobs-automatically)。 @@ -362,7 +378,7 @@ Go 标准库中的时区数据库包含在二进制文件中,并用作备用 ### Unsupported TimeZone specification --> -## CronJob 的限制 {#cronjob-limitations} +## CronJob 的限制 {#cron-job-limitations} ### 不支持的时区规范 {#unsupported-timezone-spec} From 648a40d28f75553ea79c8b923d5aa9448440e70f Mon Sep 17 00:00:00 2001 From: ydFu Date: Mon, 29 Apr 2024 17:42:36 +0800 Subject: [PATCH 0377/1086] Update link to Dockershim-FAQ in map-crictl-dockercli.md --- content/en/docs/reference/tools/map-crictl-dockercli.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/content/en/docs/reference/tools/map-crictl-dockercli.md b/content/en/docs/reference/tools/map-crictl-dockercli.md index 03dd3f865b..e7e101ea78 100644 --- a/content/en/docs/reference/tools/map-crictl-dockercli.md +++ b/content/en/docs/reference/tools/map-crictl-dockercli.md @@ -4,13 +4,12 @@ content_type: reference weight: 10 --- - {{< note >}} This page is being directed to https://v1-24.docs.kubernetes.io/docs/reference/tools/map-crictl-dockercli/ because of the [removal of dockershim from crictl in v1.24](https://github.com/kubernetes-sigs/cri-tools/issues/870). As per our community policy, deprecated documents are not maintained beyond next three versions. -The reason for deprecation is explained in [Dockershim-FAQ](https://kubernetes.io/blog/2020/12/02/dockershim-faq/). +The reason for deprecation is explained in [Dockershim-FAQ](/blog/2020/12/02/dockershim-faq/). {{}} From 2d43092deae9f4771e2b4132db9ecba9b85ca68a Mon Sep 17 00:00:00 2001 From: ydFu Date: Mon, 29 Apr 2024 18:06:02 +0800 Subject: [PATCH 0378/1086] [zh]Update link to Dockershim-FAQ in map-crictl-dockercli.md Signed-off-by: ydFu --- content/zh-cn/docs/reference/tools/map-crictl-dockercli.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/zh-cn/docs/reference/tools/map-crictl-dockercli.md b/content/zh-cn/docs/reference/tools/map-crictl-dockercli.md index 25fa564e4b..7801599fb9 100644 --- a/content/zh-cn/docs/reference/tools/map-crictl-dockercli.md +++ b/content/zh-cn/docs/reference/tools/map-crictl-dockercli.md @@ -17,13 +17,13 @@ This page is being directed to https://v1-24.docs.kubernetes.io/docs/reference/tools/map-crictl-dockercli/ because of the [removal of dockershim from crictl in v1.24](https://github.com/kubernetes-sigs/cri-tools/issues/870). As per our community policy, deprecated documents are not maintained beyond next three versions. -The reason for deprecation is explained in [Dockershim-FAQ](https://kubernetes.io/blog/2020/12/02/dockershim-faq/). +The reason for deprecation is explained in [Dockershim-FAQ](/blog/2020/12/02/dockershim-faq/). --> 此页面被重定向到 https://v1-24.docs.kubernetes.io/zh-cn/docs/reference/tools/map-crictl-dockercli/ ,原因是 [dockershim 在 v1.24 中被从 crictl 中移除](https://github.com/kubernetes-sigs/cri-tools/issues/870)。 根据我们的社区政策,弃用的文档超过三个版本后不再维护。 -弃用的原因在 [Dockershim-FAQ](https://kubernetes.io/blog/2020/12/02/dockershim-faq/) 中进行了说明。 +弃用的原因在 [Dockershim-FAQ](/zh-cn/docs/blog/2020/12/02/dockershim-faq/) 中进行了说明。 {{}} From 96477018539505db917c9df3c03f97a00cb7c3a7 Mon Sep 17 00:00:00 2001 From: windsonsea Date: Mon, 29 Apr 2024 15:42:08 +0800 Subject: [PATCH 0379/1086] Clean up a task: kubelet-config-file --- .../administer-cluster/kubelet-config-file.md | 288 +++++++++--------- 1 file changed, 145 insertions(+), 143 deletions(-) diff --git a/content/en/docs/tasks/administer-cluster/kubelet-config-file.md b/content/en/docs/tasks/administer-cluster/kubelet-config-file.md index 4b7da01209..455b1a672c 100644 --- a/content/en/docs/tasks/administer-cluster/kubelet-config-file.md +++ b/content/en/docs/tasks/administer-cluster/kubelet-config-file.md @@ -38,6 +38,7 @@ The configuration file must be a JSON or YAML representation of the parameters in this struct. Make sure the kubelet has read permissions on the file. Here is an example of what this file might look like: + ```yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration @@ -54,9 +55,10 @@ evictionHard: In this example, the kubelet is configured with the following settings: 1. `address`: The kubelet will serve on IP address `192.168.0.8`. -2. `port`: The kubelet will serve on port `20250`. -3. `serializeImagePulls`: Image pulls will be done in parallel. -4. `evictionHard`: The kubelet will evict Pods under one of the following conditions: +1. `port`: The kubelet will serve on port `20250`. +1. `serializeImagePulls`: Image pulls will be done in parallel. +1. `evictionHard`: The kubelet will evict Pods under one of the following conditions: + - When the node's available memory drops below 100MiB. - When the node's main filesystem's available space is less than 10%. - When the image filesystem's available space is less than 15%. @@ -119,10 +121,9 @@ stored internally in the kubelet. This offers you flexibility in how you manage and combine kubelet configuration that comes from different sources. However, it's important to note that the behavior varies based on the data type of the configuration fields. -Different data types in the kubelet configuration structure merge differently. -See the [reference -document](/docs/reference/node/kubelet-config-directory-merging.md) for more -information. +Different data types in the kubelet configuration structure merge differently. See the +[reference document](/docs/reference/node/kubelet-config-directory-merging.md) +for more information. ### Kubelet configuration merging order @@ -135,8 +136,9 @@ On startup, the kubelet merges configuration from: {{< note >}} The config drop-in dir mechanism for the kubelet is similar but different from how the `kubeadm` tool allows you to patch configuration. -The `kubeadm` tool uses a specific [patching strategy](/docs/setup/production-environment/tools/kubeadm/control-plane-flags/#patches) for its configuration, -whereas the only patch strategy for kubelet configuration drop-in files is `replace`. The kubelet determines the order of merges based on sorting the **suffixes** alphanumerically, +The `kubeadm` tool uses a specific [patching strategy](/docs/setup/production-environment/tools/kubeadm/control-plane-flags/#patches) +for its configuration, whereas the only patch strategy for kubelet configuration drop-in files is `replace`. +The kubelet determines the order of merges based on sorting the **suffixes** alphanumerically, and replaces every field present in a higher priority file. {{< /note >}} @@ -147,144 +149,144 @@ they can follow these steps to inspect the kubelet configuration: 1. Start a proxy server using [`kubectl proxy`](/docs/reference/kubectl/generated/kubectl-commands#proxy) in your terminal. -```bash -kubectl proxy -``` + ```bash + kubectl proxy + ``` -Which gives output like: + Which gives output like: -```bash -Starting to serve on 127.0.0.1:8001 + ```none + Starting to serve on 127.0.0.1:8001 + ``` -``` -2. Open another terminal window and use `curl` to fetch the kubelet configuration. -Replace `` with the actual name of your node: +1. Open another terminal window and use `curl` to fetch the kubelet configuration. + Replace `` with the actual name of your node: -```bash -curl -X GET http://127.0.0.1:8001/api/v1/nodes//proxy/configz | jq . -``` + ```bash + curl -X GET http://127.0.0.1:8001/api/v1/nodes//proxy/configz | jq . + ``` -```bash -{ - "kubeletconfig": { - "enableServer": true, - "staticPodPath": "/var/run/kubernetes/static-pods", - "syncFrequency": "1m0s", - "fileCheckFrequency": "20s", - "httpCheckFrequency": "20s", - "address": "192.168.1.16", - "port": 10250, - "readOnlyPort": 10255, - "tlsCertFile": "/var/lib/kubelet/pki/kubelet.crt", - "tlsPrivateKeyFile": "/var/lib/kubelet/pki/kubelet.key", - "rotateCertificates": true, - "authentication": { - "x509": { - "clientCAFile": "/var/run/kubernetes/client-ca.crt" - }, - "webhook": { - "enabled": true, - "cacheTTL": "2m0s" - }, - "anonymous": { - "enabled": true - } - }, - "authorization": { - "mode": "AlwaysAllow", - "webhook": { - "cacheAuthorizedTTL": "5m0s", - "cacheUnauthorizedTTL": "30s" - } - }, - "registryPullQPS": 5, - "registryBurst": 10, - "eventRecordQPS": 50, - "eventBurst": 100, - "enableDebuggingHandlers": true, - "healthzPort": 10248, - "healthzBindAddress": "127.0.0.1", - "oomScoreAdj": -999, - "clusterDomain": "cluster.local", - "clusterDNS": [ - "10.0.0.10" - ], - "streamingConnectionIdleTimeout": "4h0m0s", - "nodeStatusUpdateFrequency": "10s", - "nodeStatusReportFrequency": "5m0s", - "nodeLeaseDurationSeconds": 40, - "imageMinimumGCAge": "2m0s", - "imageMaximumGCAge": "0s", - "imageGCHighThresholdPercent": 85, - "imageGCLowThresholdPercent": 80, - "volumeStatsAggPeriod": "1m0s", - "cgroupsPerQOS": true, - "cgroupDriver": "systemd", - "cpuManagerPolicy": "none", - "cpuManagerReconcilePeriod": "10s", - "memoryManagerPolicy": "None", - "topologyManagerPolicy": "none", - "topologyManagerScope": "container", - "runtimeRequestTimeout": "2m0s", - "hairpinMode": "promiscuous-bridge", - "maxPods": 110, - "podPidsLimit": -1, - "resolvConf": "/run/systemd/resolve/resolv.conf", - "cpuCFSQuota": true, - "cpuCFSQuotaPeriod": "100ms", - "nodeStatusMaxImages": 50, - "maxOpenFiles": 1000000, - "contentType": "application/vnd.kubernetes.protobuf", - "kubeAPIQPS": 50, - "kubeAPIBurst": 100, - "serializeImagePulls": true, - "evictionHard": { - "imagefs.available": "15%", - "memory.available": "100Mi", - "nodefs.available": "10%", - "nodefs.inodesFree": "5%" - }, - "evictionPressureTransitionPeriod": "1m0s", - "enableControllerAttachDetach": true, - "makeIPTablesUtilChains": true, - "iptablesMasqueradeBit": 14, - "iptablesDropBit": 15, - "featureGates": { - "AllAlpha": false - }, - "failSwapOn": false, - "memorySwap": {}, - "containerLogMaxSize": "10Mi", - "containerLogMaxFiles": 5, - "configMapAndSecretChangeDetectionStrategy": "Watch", - "enforceNodeAllocatable": [ - "pods" - ], - "volumePluginDir": "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/", - "logging": { - "format": "text", - "flushFrequency": "5s", - "verbosity": 3, - "options": { - "json": { - "infoBufferSize": "0" - } - } - }, - "enableSystemLogHandler": true, - "enableSystemLogQuery": false, - "shutdownGracePeriod": "0s", - "shutdownGracePeriodCriticalPods": "0s", - "enableProfilingHandler": true, - "enableDebugFlagsHandler": true, - "seccompDefault": false, - "memoryThrottlingFactor": 0.9, - "registerNode": true, - "localStorageCapacityIsolation": true, - "containerRuntimeEndpoint": "unix:///var/run/crio/crio.sock" - } -} -``` + ```json + { + "kubeletconfig": { + "enableServer": true, + "staticPodPath": "/var/run/kubernetes/static-pods", + "syncFrequency": "1m0s", + "fileCheckFrequency": "20s", + "httpCheckFrequency": "20s", + "address": "192.168.1.16", + "port": 10250, + "readOnlyPort": 10255, + "tlsCertFile": "/var/lib/kubelet/pki/kubelet.crt", + "tlsPrivateKeyFile": "/var/lib/kubelet/pki/kubelet.key", + "rotateCertificates": true, + "authentication": { + "x509": { + "clientCAFile": "/var/run/kubernetes/client-ca.crt" + }, + "webhook": { + "enabled": true, + "cacheTTL": "2m0s" + }, + "anonymous": { + "enabled": true + } + }, + "authorization": { + "mode": "AlwaysAllow", + "webhook": { + "cacheAuthorizedTTL": "5m0s", + "cacheUnauthorizedTTL": "30s" + } + }, + "registryPullQPS": 5, + "registryBurst": 10, + "eventRecordQPS": 50, + "eventBurst": 100, + "enableDebuggingHandlers": true, + "healthzPort": 10248, + "healthzBindAddress": "127.0.0.1", + "oomScoreAdj": -999, + "clusterDomain": "cluster.local", + "clusterDNS": [ + "10.0.0.10" + ], + "streamingConnectionIdleTimeout": "4h0m0s", + "nodeStatusUpdateFrequency": "10s", + "nodeStatusReportFrequency": "5m0s", + "nodeLeaseDurationSeconds": 40, + "imageMinimumGCAge": "2m0s", + "imageMaximumGCAge": "0s", + "imageGCHighThresholdPercent": 85, + "imageGCLowThresholdPercent": 80, + "volumeStatsAggPeriod": "1m0s", + "cgroupsPerQOS": true, + "cgroupDriver": "systemd", + "cpuManagerPolicy": "none", + "cpuManagerReconcilePeriod": "10s", + "memoryManagerPolicy": "None", + "topologyManagerPolicy": "none", + "topologyManagerScope": "container", + "runtimeRequestTimeout": "2m0s", + "hairpinMode": "promiscuous-bridge", + "maxPods": 110, + "podPidsLimit": -1, + "resolvConf": "/run/systemd/resolve/resolv.conf", + "cpuCFSQuota": true, + "cpuCFSQuotaPeriod": "100ms", + "nodeStatusMaxImages": 50, + "maxOpenFiles": 1000000, + "contentType": "application/vnd.kubernetes.protobuf", + "kubeAPIQPS": 50, + "kubeAPIBurst": 100, + "serializeImagePulls": true, + "evictionHard": { + "imagefs.available": "15%", + "memory.available": "100Mi", + "nodefs.available": "10%", + "nodefs.inodesFree": "5%" + }, + "evictionPressureTransitionPeriod": "1m0s", + "enableControllerAttachDetach": true, + "makeIPTablesUtilChains": true, + "iptablesMasqueradeBit": 14, + "iptablesDropBit": 15, + "featureGates": { + "AllAlpha": false + }, + "failSwapOn": false, + "memorySwap": {}, + "containerLogMaxSize": "10Mi", + "containerLogMaxFiles": 5, + "configMapAndSecretChangeDetectionStrategy": "Watch", + "enforceNodeAllocatable": [ + "pods" + ], + "volumePluginDir": "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/", + "logging": { + "format": "text", + "flushFrequency": "5s", + "verbosity": 3, + "options": { + "json": { + "infoBufferSize": "0" + } + } + }, + "enableSystemLogHandler": true, + "enableSystemLogQuery": false, + "shutdownGracePeriod": "0s", + "shutdownGracePeriodCriticalPods": "0s", + "enableProfilingHandler": true, + "enableDebugFlagsHandler": true, + "seccompDefault": false, + "memoryThrottlingFactor": 0.9, + "registerNode": true, + "localStorageCapacityIsolation": true, + "containerRuntimeEndpoint": "unix:///var/run/crio/crio.sock" + } + } + ``` @@ -294,4 +296,4 @@ curl -X GET http://127.0.0.1:8001/api/v1/nodes//proxy/configz | jq . [`KubeletConfiguration`](/docs/reference/config-api/kubelet-config.v1beta1/) reference. - Learn more about kubelet configuration merging in the - [reference document](/docs/reference/node/kubelet-config-directory-merging.md). \ No newline at end of file + [reference document](/docs/reference/node/kubelet-config-directory-merging.md). From 8c9c60cfe0ca385084c54bd75d2c066741bcf4bf Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Mon, 29 Apr 2024 17:30:13 +0100 Subject: [PATCH 0380/1086] Tweak text formatting --- .../_posts/2024-05-01-cri-streaming-explained.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/content/en/blog/_posts/2024-05-01-cri-streaming-explained.md b/content/en/blog/_posts/2024-05-01-cri-streaming-explained.md index 4e5459c50e..c1e177a045 100644 --- a/content/en/blog/_posts/2024-05-01-cri-streaming-explained.md +++ b/content/en/blog/_posts/2024-05-01-cri-streaming-explained.md @@ -17,7 +17,7 @@ going to become deprecated. In this blog post, I'd like to dive into the functionality and history of three extraordinary Remote Procedure Calls (RPCs), which are truly outstanding in -terms of how they work: **Exec**, **Attach** and **PortForward**. +terms of how they work: `Exec`, `Attach` and `PortForward`. **Exec** can be used to run dedicated commands within the container and stream the output to a client like [kubectl](/docs/reference/kubectl) or @@ -41,7 +41,7 @@ All RPCs of the CRI either use the [gRPC unary calls](https://grpc.io/docs/what- for communication or the [server side streaming](https://grpc.io/docs/what-is-grpc/core-concepts/#server-streaming-rpc) feature (only `GetContainerEvents` right now). This means that mainly all RPCs retrieve a single client request and have to return a single server response. -The same applies to **Exec**, **Attach**, and **PortForward**, where [their protocol definition](https://github.com/kubernetes/cri-api/blob/63929b3/pkg/apis/runtime/v1/api.proto#L94-L99) +The same applies to `Exec`, `Attach`, and `PortForward`, where their [protocol definition](https://github.com/kubernetes/cri-api/blob/63929b3/pkg/apis/runtime/v1/api.proto#L94-L99) looks like this: ```protobuf @@ -87,7 +87,7 @@ message PortForwardResponse { Why is it implemented like that? Well, [the original design document](https://docs.google.com/document/d/1MreuHzNvkBW6q7o_zehm1CBOBof3shbtMTGtUpjpRmY) for those RPCs even predates [Kubernetes Enhancements Proposals (KEPs)](https://github.com/kubernetes/enhancements) and was originally outlined back in 2016. The kubelet had a native -implementation for **Exec**, **Attach**, and **PortForward** before the +implementation for `Exec`, `Attach`, and `PortForward` before the initiative to bring the functionality to the CRI started. Before that, everything was bound to [Docker](https://www.docker.com) or the later abandoned container runtime [rkt](https://github.com/rkt/rkt). @@ -100,7 +100,7 @@ another option that the Kubelet implements a portable, runtime-agnostic solution has been abandoned over the final one, because this would mean another project to maintain which nevertheless would be runtime dependent. -This means, that the basic flow for **Exec**, **Attach** and **PortForward** +This means, that the basic flow for `Exec`, `Attach` and `PortForward` was proposed to look like this: {{< mermaid >}} @@ -144,7 +144,7 @@ streaming protocol or (in the future) to a [WebSocket](https://en.wikipedia.org/ connection and starts to stream the data back and forth. This implementation allows runtimes to have the flexibility to implement -**Exec**, **Attach** and **PortForward** the way they want, and also allows a +`Exec`, `Attach` and `PortForward` the way they want, and also allows a simple test path. Runtimes can change the underlying implementation to support any kind of feature without having a need to modify the CRI at all. @@ -253,7 +253,7 @@ func (s StreamService) Exec( } ``` -### **PortForward** +### PortForward Forwarding ports to a container works a bit differently when comparing it to streaming IO data from a workload. The server still has to provide a URL @@ -292,8 +292,8 @@ func (s StreamService) PortForward( ## Future work -The flexibility Kubernetes provides for the RPCs **Exec**, **Attach** and -**PortForward** is truly outstanding compared to other methods. Nevertheless, +The flexibility Kubernetes provides for the RPCs `Exec`, `Attach` and +`PortForward` is truly outstanding compared to other methods. Nevertheless, container runtimes have to keep up with the latest and greatest implementations to support those features in a meaningful way. The general effort to support WebSockets is not only a plain Kubernetes thing, it also has to be supported by From 15e22a3d0b2d8e4906b34edeb24ce4c447796198 Mon Sep 17 00:00:00 2001 From: Obidur Rahman <112419917+Ashfinn@users.noreply.github.com> Date: Tue, 30 Apr 2024 01:54:20 +0600 Subject: [PATCH 0381/1086] Create workload.md --- .../bn/docs/reference/glossary/workload.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/docs/reference/glossary/workload.md diff --git a/content/bn/docs/reference/glossary/workload.md b/content/bn/docs/reference/glossary/workload.md new file mode 100644 index 0000000000..b02ac60db2 --- /dev/null +++ b/content/bn/docs/reference/glossary/workload.md @@ -0,0 +1,19 @@ +--- +title: ওয়ার্কলোড +id: workload +date: 2019-02-13 +full_link: /docs/concepts/workloads/ +short_description: > + ওয়ার্কলোড হলো কুবারনেটিস-এ চলমান একটি অ্যাপ্লিকেশন। + +aka: +tags: +- fundamental +--- + ওয়ার্কলোড(workload) হলো কুবারনেটিস-এ চলমান একটি অ্যাপ্লিকেশন। + + + +বিভিন্ন অবজেক্ট যা ওয়ার্কলোডের বিভিন্ন ধরণ বা অংশগুলির প্রতিনিধিত্ব করে তাদের মধ্যে ডেমনসেট(DaemonSet), ডিপ্লয়মেন্ট, জব, রেপ্লিকাসেট(ReplicaSet), এবং স্টেটফুলসেট অবজেক্ট(StatefulSet objects) অন্তর্ভুক্ত। + +উদাহরণস্বরূপ, একটি ওয়ার্কলোড যেখানে একটি ওয়েব সার্ভার এবং একটি ডেটাবেস রয়েছে তারা ডেটাবেসটি একটি {{< glossary_tooltip term_id="StatefulSet" >}} এ এবং ওয়েব সার্ভারটি একটি {{< glossary_tooltip term_id="Deployment" >}} এ চালাতে পারে। From ffb2ef4e0e671476b7addf5d88471c9143350a4b Mon Sep 17 00:00:00 2001 From: Arhell Date: Tue, 30 Apr 2024 00:35:11 +0300 Subject: [PATCH 0382/1086] [de] Ready training section for vanilla Docsy --- content/de/training/_index.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/de/training/_index.html b/content/de/training/_index.html index 68e77e7b54..4831489968 100644 --- a/content/de/training/_index.html +++ b/content/de/training/_index.html @@ -5,6 +5,10 @@ abstract: Schulungsprogramme, Zertifizierungen und Partner. layout: basic cid: training class: training +body_class: training +menu: + main: + weight: 30 ---
    From 0d30e483f6962d47d11e4f806b2cf3d3dc2d2681 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 30 Apr 2024 06:46:32 +0800 Subject: [PATCH 0383/1086] [zh] Remove node shutdown section from nodes.md --- .../zh-cn/docs/concepts/architecture/nodes.md | 458 ------------------ 1 file changed, 458 deletions(-) diff --git a/content/zh-cn/docs/concepts/architecture/nodes.md b/content/zh-cn/docs/concepts/architecture/nodes.md index 039ca181ad..db4ac045f4 100644 --- a/content/zh-cn/docs/concepts/architecture/nodes.md +++ b/content/zh-cn/docs/concepts/architecture/nodes.md @@ -553,464 +553,6 @@ for more information. `kubelet` 可以在作出资源分配决策时使用拓扑提示。 参考[控制节点上拓扑管理策略](/zh-cn/docs/tasks/administer-cluster/topology-manager/)了解详细信息。 - -## 节点体面关闭 {#graceful-node-shutdown} - -{{< feature-state feature_gate_name="GracefulNodeShutdown" >}} - - -kubelet 会尝试检测节点系统关闭事件并终止在节点上运行的所有 Pod。 - -在节点终止期间,kubelet 保证 Pod 遵从常规的 -[Pod 终止流程](/zh-cn/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination), -且不接受新的 Pod(即使这些 Pod 已经绑定到该节点)。 - - -节点体面关闭特性依赖于 systemd,因为它要利用 -[systemd 抑制器锁](https://www.freedesktop.org/wiki/Software/systemd/inhibit/)机制, -在给定的期限内延迟节点关闭。 - - -节点体面关闭特性受 `GracefulNodeShutdown` -[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)控制, -在 1.21 版本中是默认启用的。 - - -注意,默认情况下,下面描述的两个配置选项,`shutdownGracePeriod` 和 -`shutdownGracePeriodCriticalPods` 都是被设置为 0 的,因此不会激活节点体面关闭功能。 -要激活此功能特性,这两个 kubelet 配置选项要适当配置,并设置为非零值。 - - -一旦 systemd 检测到或通知节点关闭,kubelet 就会在节点上设置一个 -`NotReady` 状况,并将 `reason` 设置为 `"node is shutting down"`。 -kube-scheduler 会重视此状况,不将 Pod 调度到受影响的节点上; -其他第三方调度程序也应当遵循相同的逻辑。这意味着新的 Pod 不会被调度到该节点上, -因此不会有新 Pod 启动。 - - -如果检测到节点关闭过程正在进行中,kubelet **也会**在 `PodAdmission` -阶段拒绝 Pod,即使是该 Pod 带有 `node.kubernetes.io/not-ready:NoSchedule` -的{{< glossary_tooltip text="容忍度" term_id="toleration" >}}。 - - -同时,当 kubelet 通过 API 在其 Node 上设置该状况时,kubelet -也开始终止在本地运行的所有 Pod。 - - -在体面关闭节点过程中,kubelet 分两个阶段来终止 Pod: - -1. 终止在节点上运行的常规 Pod。 -2. 终止在节点上运行的[关键 Pod](/zh-cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)。 - - -节点体面关闭的特性对应两个 -[`KubeletConfiguration`](/zh-cn/docs/tasks/administer-cluster/kubelet-config-file/) 选项: - -* `shutdownGracePeriod`: - * 指定节点应延迟关闭的总持续时间。此时间是 Pod 体面终止的时间总和,不区分常规 Pod - 还是[关键 Pod](/zh-cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)。 -* `shutdownGracePeriodCriticalPods`: - * 在节点关闭期间指定用于终止[关键 Pod](/zh-cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical) - 的持续时间。该值应小于 `shutdownGracePeriod`。 - -{{< note >}} - -在某些情况下,节点终止过程会被系统取消(或者可能由管理员手动取消)。 -无论哪种情况下,节点都将返回到 `Ready` 状态。然而,已经开始终止进程的 -Pod 将不会被 kubelet 恢复,需要被重新调度。 -{{< /note >}} - - -例如,如果设置了 `shutdownGracePeriod=30s` 和 `shutdownGracePeriodCriticalPods=10s`, -则 kubelet 将延迟 30 秒关闭节点。 -在关闭期间,将保留前 20(30 - 10)秒用于体面终止常规 Pod, -而保留最后 10 秒用于终止[关键 Pod](/zh-cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)。 - -{{< note >}} - -当 Pod 在正常节点关闭期间被驱逐时,它们会被标记为关闭。 -运行 `kubectl get pods` 时,被驱逐的 Pod 的状态显示为 `Terminated`。 -并且 `kubectl describe pod` 表示 Pod 因节点关闭而被驱逐: - -``` -Reason: Terminated -Message: Pod was terminated in response to imminent node shutdown. -``` -{{< /note >}} - - -### 基于 Pod 优先级的节点体面关闭 {#pod-priority-graceful-node-shutdown} - -{{< feature-state feature_gate_name="GracefulNodeShutdownBasedOnPodPriority" >}} - - -为了在节点体面关闭期间提供更多的灵活性,尤其是处理关闭期间的 Pod 排序问题, -节点体面关闭机制能够关注 Pod 的 PriorityClass 设置,前提是你已经在集群中启用了此功能特性。 -此功能特性允许集群管理员基于 Pod -的[优先级类(Priority Class)](/zh-cn/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass) -显式地定义节点体面关闭期间 Pod 的处理顺序。 - - -前文所述的[节点体面关闭](#graceful-node-shutdown)特性能够分两个阶段关闭 Pod, -首先关闭的是非关键的 Pod,之后再处理关键 Pod。 -如果需要显式地以更细粒度定义关闭期间 Pod 的处理顺序,需要一定的灵活度, -这时可以使用基于 Pod 优先级的体面关闭机制。 - - -当节点体面关闭能够处理 Pod 优先级时,节点体面关闭的处理可以分为多个阶段, -每个阶段关闭特定优先级类的 Pod。kubelet 可以被配置为按确切的阶段处理 Pod, -且每个阶段可以独立设置关闭时间。 - - -假设集群中存在以下自定义的 Pod -[优先级类](/zh-cn/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass)。 - -| Pod 优先级类名称 | Pod 优先级类数值 | -|-------------------------|------------------------| -|`custom-class-a` | 100000 | -|`custom-class-b` | 10000 | -|`custom-class-c` | 1000 | -|`regular/unset` | 0 | - - -在 [kubelet 配置](/zh-cn/docs/reference/config-api/kubelet-config.v1beta1/)中, -`shutdownGracePeriodByPodPriority` 可能看起来是这样: - -| Pod 优先级类数值 | 关闭期限 | -|------------------------|-----------| -| 100000 | 10 秒 | -| 10000 | 180 秒 | -| 1000 | 120 秒 | -| 0 | 60 秒 | - - -对应的 kubelet 配置 YAML 将会是: - -```yaml -shutdownGracePeriodByPodPriority: - - priority: 100000 - shutdownGracePeriodSeconds: 10 - - priority: 10000 - shutdownGracePeriodSeconds: 180 - - priority: 1000 - shutdownGracePeriodSeconds: 120 - - priority: 0 - shutdownGracePeriodSeconds: 60 -``` - - -上面的表格表明,所有 `priority` 值大于等于 100000 的 Pod 会得到 10 秒钟期限停止, -所有 `priority` 值介于 10000 和 100000 之间的 Pod 会得到 180 秒钟期限停止, -所有 `priority` 值介于 1000 和 10000 之间的 Pod 会得到 120 秒钟期限停止, -所有其他 Pod 将获得 60 秒的时间停止。 - -用户不需要为所有的优先级类都设置数值。例如,你也可以使用下面这种配置: - -| Pod 优先级类数值 | 关闭期限 | -|------------------------|-----------| -| 100000 | 300 秒 | -| 1000 | 120 秒 | -| 0 | 60 秒 | - - -在上面这个场景中,优先级类为 `custom-class-b` 的 Pod 会与优先级类为 `custom-class-c` -的 Pod 在关闭时按相同期限处理。 - -如果在特定的范围内不存在 Pod,则 kubelet 不会等待对应优先级范围的 Pod。 -kubelet 会直接跳到下一个优先级数值范围进行处理。 - - -如果此功能特性被启用,但没有提供配置数据,则不会出现排序操作。 - -使用此功能特性需要启用 `GracefulNodeShutdownBasedOnPodPriority` -[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/), -并将 [kubelet 配置](/zh-cn/docs/reference/config-api/kubelet-config.v1beta1/) -中的 `shutdownGracePeriodByPodPriority` 设置为期望的配置, -其中包含 Pod 的优先级类数值以及对应的关闭期限。 - -{{< note >}} - -在节点体面关闭期间考虑 Pod 优先级的能力是作为 Kubernetes v1.23 中的 Alpha 功能引入的。 -在 Kubernetes {{< skew currentVersion >}} 中该功能是 Beta 版,默认启用。 -{{< /note >}} - - -kubelet 子系统中会生成 `graceful_shutdown_start_time_seconds` 和 -`graceful_shutdown_end_time_seconds` 度量指标以便监视节点关闭行为。 - - -## 处理节点非体面关闭 {#non-graceful-node-shutdown} - -{{< feature-state feature_gate_name="NodeOutOfServiceVolumeDetach" >}} - - -节点关闭的操作可能无法被 kubelet 的节点关闭管理器检测到, -是因为该命令不会触发 kubelet 所使用的抑制锁定机制,或者是因为用户错误的原因, -即 ShutdownGracePeriod 和 ShutdownGracePeriodCriticalPod 配置不正确。 -请参考以上[节点体面关闭](#graceful-node-shutdown)部分了解更多详细信息。 - - -当某节点关闭但 kubelet 的节点关闭管理器未检测到这一事件时, -在那个已关闭节点上、属于 {{< glossary_tooltip text="StatefulSet" term_id="statefulset" >}} -的 Pod 将停滞于终止状态,并且不能移动到新的运行节点上。 -这是因为已关闭节点上的 kubelet 已不存在,亦无法删除 Pod, -因此 StatefulSet 无法创建同名的新 Pod。 -如果 Pod 使用了卷,则 VolumeAttachments 不会从原来的已关闭节点上删除, -因此这些 Pod 所使用的卷也无法挂接到新的运行节点上。 -所以,那些以 StatefulSet 形式运行的应用无法正常工作。 -如果原来的已关闭节点被恢复,kubelet 将删除 Pod,新的 Pod 将被在不同的运行节点上创建。 -如果原来的已关闭节点没有被恢复,那些在已关闭节点上的 Pod 将永远滞留在终止状态。 - - -为了缓解上述情况,用户可以手动将具有 `NoExecute` 或 `NoSchedule` 效果的 -`node.kubernetes.io/out-of-service` 污点添加到节点上,标记其无法提供服务。 -如果在 {{< glossary_tooltip text="kube-controller-manager" term_id="kube-controller-manager" >}} -上启用了 `NodeOutOfServiceVolumeDetach` -[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/), -并且节点被通过污点标记为无法提供服务,如果节点 Pod 上没有设置对应的容忍度, -那么这样的 Pod 将被强制删除,并且该在节点上被终止的 Pod 将立即进行卷分离操作。 -这样就允许那些在无法提供服务节点上的 Pod 能在其他节点上快速恢复。 - - -在非体面关闭期间,Pod 分两个阶段终止: - -1. 强制删除没有匹配的 `out-of-service` 容忍度的 Pod。 -2. 立即对此类 Pod 执行分离卷操作。 - -{{< note >}} - -- 在添加 `node.kubernetes.io/out-of-service` 污点之前, - 应该验证节点已经处于关闭或断电状态(而不是在重新启动中)。 -- 将 Pod 移动到新节点后,用户需要手动移除停止服务的污点, - 并且用户要检查关闭节点是否已恢复,因为该用户是最初添加污点的用户。 -{{< /note >}} - - -### 存储超时强制解除挂接 {#storage-force-detach-on-timeout} - -当任何 Pod 未能在 6 分钟内被成功删除时,如果节点当时不健康, -Kubernetes 将强制解除挂接正在被卸载的卷。 -在启用了强制解除挂接卷的节点上仍在运行的所有工作负载都将导致违反 -[CSI 规范](https://github.com/container-storage-interface/spec/blob/master/spec.md#controllerunpublishvolume), -该规范指出 `ControllerUnpublishVolume` "**必须**在调用卷上的所有 `NodeUnstageVolume` -和 `NodeUnpublishVolume` 执行且成功后被调用"。在这种情况下,相关节点上的卷可能会遇到数据损坏。 - - -强制存储解除挂接行为是可选的;用户可以选择使用"非体面节点关闭"特性。 - - -可以通过在 `kube-controller-manager` 中设置 `disable-force-detach-on-timeout` -配置字段来禁用超时时存储强制解除挂接。 -禁用超时强制解除挂接特性意味着托管在不正常运行时间超过 6 分钟的节点上的卷将不会删除其关联的 -[VolumeAttachment](/zh-cn/docs/reference/kubernetes-api/config-and-storage-resources/volume-attachment-v1/)。 - - -应用此设置后,仍关联到某卷的不健康 Pod 必须通过上述[非体面节点关闭](#non-graceful-node-shutdown)过程进行恢复。 - -{{< note >}} - -- 使用[非体面节点关闭](#non-graceful-node-shutdown)过程时必须小心。 -- 偏离上述步骤可能会导致数据损坏。 -{{< /note >}} - From 572f4441bf9eceea3041133295919e74f550e053 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 30 Apr 2024 06:52:34 +0800 Subject: [PATCH 0384/1086] [zh] Sync administer-cluster/kubelet-config-file.md --- .../administer-cluster/kubelet-config-file.md | 296 +++++++++--------- 1 file changed, 148 insertions(+), 148 deletions(-) diff --git a/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md b/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md index 0f46bba612..c5c3d2b995 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md +++ b/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md @@ -87,9 +87,10 @@ In this example, the kubelet is configured with the following settings: kubelet 配置结构中不同数据类型的合并方式不同。 有关详细信息,请参阅[参考文档](/zh-cn/docs/reference/node/kubelet-config-directory-merging.md)。 @@ -249,8 +249,9 @@ On startup, the kubelet merges configuration from: {{< note >}} kubelet 的配置插件目录机制类似,但与 `kubeadm` 工具允许 patch 配置的方式不同。 @@ -276,152 +277,151 @@ they can follow these steps to inspect the kubelet configuration: --> 1. 在终端中使用 [`kubectl proxy`](/docs/reference/kubectl/generated/kubectl-commands#proxy) 启动代理服务器。 -```bash -kubectl proxy -``` + ```bash + kubectl proxy + ``` + + + 其输出如下: + + ```none + Starting to serve on 127.0.0.1:8001 + ``` -其输出如下: - -```bash -Starting to serve on 127.0.0.1:8001 - -``` - - 2. 打开另一个终端窗口并使用 `curl` 来获取 kubelet 配置。 将 `` 替换为节点的实际名称: -```bash -curl -X GET http://127.0.0.1:8001/api/v1/nodes//proxy/configz | jq . -``` + ```bash + curl -X GET http://127.0.0.1:8001/api/v1/nodes//proxy/configz | jq . + ``` -```bash -{ - "kubeletconfig": { - "enableServer": true, - "staticPodPath": "/var/run/kubernetes/static-pods", - "syncFrequency": "1m0s", - "fileCheckFrequency": "20s", - "httpCheckFrequency": "20s", - "address": "192.168.1.16", - "port": 10250, - "readOnlyPort": 10255, - "tlsCertFile": "/var/lib/kubelet/pki/kubelet.crt", - "tlsPrivateKeyFile": "/var/lib/kubelet/pki/kubelet.key", - "rotateCertificates": true, - "authentication": { - "x509": { - "clientCAFile": "/var/run/kubernetes/client-ca.crt" - }, - "webhook": { - "enabled": true, - "cacheTTL": "2m0s" - }, - "anonymous": { - "enabled": true - } - }, - "authorization": { - "mode": "AlwaysAllow", - "webhook": { - "cacheAuthorizedTTL": "5m0s", - "cacheUnauthorizedTTL": "30s" - } - }, - "registryPullQPS": 5, - "registryBurst": 10, - "eventRecordQPS": 50, - "eventBurst": 100, - "enableDebuggingHandlers": true, - "healthzPort": 10248, - "healthzBindAddress": "127.0.0.1", - "oomScoreAdj": -999, - "clusterDomain": "cluster.local", - "clusterDNS": [ - "10.0.0.10" - ], - "streamingConnectionIdleTimeout": "4h0m0s", - "nodeStatusUpdateFrequency": "10s", - "nodeStatusReportFrequency": "5m0s", - "nodeLeaseDurationSeconds": 40, - "imageMinimumGCAge": "2m0s", - "imageMaximumGCAge": "0s", - "imageGCHighThresholdPercent": 85, - "imageGCLowThresholdPercent": 80, - "volumeStatsAggPeriod": "1m0s", - "cgroupsPerQOS": true, - "cgroupDriver": "systemd", - "cpuManagerPolicy": "none", - "cpuManagerReconcilePeriod": "10s", - "memoryManagerPolicy": "None", - "topologyManagerPolicy": "none", - "topologyManagerScope": "container", - "runtimeRequestTimeout": "2m0s", - "hairpinMode": "promiscuous-bridge", - "maxPods": 110, - "podPidsLimit": -1, - "resolvConf": "/run/systemd/resolve/resolv.conf", - "cpuCFSQuota": true, - "cpuCFSQuotaPeriod": "100ms", - "nodeStatusMaxImages": 50, - "maxOpenFiles": 1000000, - "contentType": "application/vnd.kubernetes.protobuf", - "kubeAPIQPS": 50, - "kubeAPIBurst": 100, - "serializeImagePulls": true, - "evictionHard": { - "imagefs.available": "15%", - "memory.available": "100Mi", - "nodefs.available": "10%", - "nodefs.inodesFree": "5%" - }, - "evictionPressureTransitionPeriod": "1m0s", - "enableControllerAttachDetach": true, - "makeIPTablesUtilChains": true, - "iptablesMasqueradeBit": 14, - "iptablesDropBit": 15, - "featureGates": { - "AllAlpha": false - }, - "failSwapOn": false, - "memorySwap": {}, - "containerLogMaxSize": "10Mi", - "containerLogMaxFiles": 5, - "configMapAndSecretChangeDetectionStrategy": "Watch", - "enforceNodeAllocatable": [ - "pods" - ], - "volumePluginDir": "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/", - "logging": { - "format": "text", - "flushFrequency": "5s", - "verbosity": 3, - "options": { - "json": { - "infoBufferSize": "0" - } - } - }, - "enableSystemLogHandler": true, - "enableSystemLogQuery": false, - "shutdownGracePeriod": "0s", - "shutdownGracePeriodCriticalPods": "0s", - "enableProfilingHandler": true, - "enableDebugFlagsHandler": true, - "seccompDefault": false, - "memoryThrottlingFactor": 0.9, - "registerNode": true, - "localStorageCapacityIsolation": true, - "containerRuntimeEndpoint": "unix:///var/run/crio/crio.sock" - } -} -``` + ```json + { + "kubeletconfig": { + "enableServer": true, + "staticPodPath": "/var/run/kubernetes/static-pods", + "syncFrequency": "1m0s", + "fileCheckFrequency": "20s", + "httpCheckFrequency": "20s", + "address": "192.168.1.16", + "port": 10250, + "readOnlyPort": 10255, + "tlsCertFile": "/var/lib/kubelet/pki/kubelet.crt", + "tlsPrivateKeyFile": "/var/lib/kubelet/pki/kubelet.key", + "rotateCertificates": true, + "authentication": { + "x509": { + "clientCAFile": "/var/run/kubernetes/client-ca.crt" + }, + "webhook": { + "enabled": true, + "cacheTTL": "2m0s" + }, + "anonymous": { + "enabled": true + } + }, + "authorization": { + "mode": "AlwaysAllow", + "webhook": { + "cacheAuthorizedTTL": "5m0s", + "cacheUnauthorizedTTL": "30s" + } + }, + "registryPullQPS": 5, + "registryBurst": 10, + "eventRecordQPS": 50, + "eventBurst": 100, + "enableDebuggingHandlers": true, + "healthzPort": 10248, + "healthzBindAddress": "127.0.0.1", + "oomScoreAdj": -999, + "clusterDomain": "cluster.local", + "clusterDNS": [ + "10.0.0.10" + ], + "streamingConnectionIdleTimeout": "4h0m0s", + "nodeStatusUpdateFrequency": "10s", + "nodeStatusReportFrequency": "5m0s", + "nodeLeaseDurationSeconds": 40, + "imageMinimumGCAge": "2m0s", + "imageMaximumGCAge": "0s", + "imageGCHighThresholdPercent": 85, + "imageGCLowThresholdPercent": 80, + "volumeStatsAggPeriod": "1m0s", + "cgroupsPerQOS": true, + "cgroupDriver": "systemd", + "cpuManagerPolicy": "none", + "cpuManagerReconcilePeriod": "10s", + "memoryManagerPolicy": "None", + "topologyManagerPolicy": "none", + "topologyManagerScope": "container", + "runtimeRequestTimeout": "2m0s", + "hairpinMode": "promiscuous-bridge", + "maxPods": 110, + "podPidsLimit": -1, + "resolvConf": "/run/systemd/resolve/resolv.conf", + "cpuCFSQuota": true, + "cpuCFSQuotaPeriod": "100ms", + "nodeStatusMaxImages": 50, + "maxOpenFiles": 1000000, + "contentType": "application/vnd.kubernetes.protobuf", + "kubeAPIQPS": 50, + "kubeAPIBurst": 100, + "serializeImagePulls": true, + "evictionHard": { + "imagefs.available": "15%", + "memory.available": "100Mi", + "nodefs.available": "10%", + "nodefs.inodesFree": "5%" + }, + "evictionPressureTransitionPeriod": "1m0s", + "enableControllerAttachDetach": true, + "makeIPTablesUtilChains": true, + "iptablesMasqueradeBit": 14, + "iptablesDropBit": 15, + "featureGates": { + "AllAlpha": false + }, + "failSwapOn": false, + "memorySwap": {}, + "containerLogMaxSize": "10Mi", + "containerLogMaxFiles": 5, + "configMapAndSecretChangeDetectionStrategy": "Watch", + "enforceNodeAllocatable": [ + "pods" + ], + "volumePluginDir": "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/", + "logging": { + "format": "text", + "flushFrequency": "5s", + "verbosity": 3, + "options": { + "json": { + "infoBufferSize": "0" + } + } + }, + "enableSystemLogHandler": true, + "enableSystemLogQuery": false, + "shutdownGracePeriod": "0s", + "shutdownGracePeriodCriticalPods": "0s", + "enableProfilingHandler": true, + "enableDebugFlagsHandler": true, + "seccompDefault": false, + "memoryThrottlingFactor": 0.9, + "registerNode": true, + "localStorageCapacityIsolation": true, + "containerRuntimeEndpoint": "unix:///var/run/crio/crio.sock" + } + } + ``` From b4190a6cb2af8fb1ea4fe048b5dbac3a9f65a3eb Mon Sep 17 00:00:00 2001 From: steve-hardman <132999137+steve-hardman@users.noreply.github.com> Date: Tue, 30 Apr 2024 00:23:07 +0100 Subject: [PATCH 0385/1086] Fix typo --- content/en/docs/concepts/services-networking/service.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/services-networking/service.md b/content/en/docs/concepts/services-networking/service.md index bd09e179f2..a8d4d82c1b 100644 --- a/content/en/docs/concepts/services-networking/service.md +++ b/content/en/docs/concepts/services-networking/service.md @@ -990,7 +990,7 @@ to control how Kubernetes routes traffic to healthy (“ready”) backends. See [Traffic Policies](/docs/reference/networking/virtual-ips/#traffic-policies) for more details. -### Trafic distribution +### Traffic distribution {{< feature-state feature_gate_name="ServiceTrafficDistribution" >}} From 669794b911f119c823dd57886488acaaf552efd1 Mon Sep 17 00:00:00 2001 From: tico88612 <17496418+tico88612@users.noreply.github.com> Date: Tue, 30 Apr 2024 00:30:14 +0800 Subject: [PATCH 0386/1086] [zh-cn] Sync docs/reference/using-api Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com> --- .../docs/reference/using-api/api-concepts.md | 12 ++++---- content/zh-cn/docs/reference/using-api/cel.md | 4 +++ .../reference/using-api/deprecation-guide.md | 29 ++++++++++++------- .../docs/reference/using-api/health-checks.md | 5 ++-- .../reference/using-api/server-side-apply.md | 10 +++++-- 5 files changed, 39 insertions(+), 21 deletions(-) diff --git a/content/zh-cn/docs/reference/using-api/api-concepts.md b/content/zh-cn/docs/reference/using-api/api-concepts.md index e1d1e02dfb..196e35094b 100644 --- a/content/zh-cn/docs/reference/using-api/api-concepts.md +++ b/content/zh-cn/docs/reference/using-api/api-concepts.md @@ -381,7 +381,7 @@ the API server will send any `BOOKMARK` event even when requested. --> ## 流式列表 {#streaming-lists} -{{< feature-state for_k8s_version="v1.27" state="alpha" >}} +{{< feature-state feature_gate_name="WatchList" >}} ## 响应压缩 {#response-compression} -{{< feature-state for_k8s_version="v1.16" state="beta" >}} +{{< feature-state feature_gate_name="APIResponseCompression" >}} ## 分块检视大体量结果 {#retrieving-large-results-sets-in-chunks} -{{< feature-state for_k8s_version="v1.29" state="stable" >}} +{{< feature-state feature_gate_name="APIListChunking" >}} 与 **watch** 操作类似,`continue` 令牌也会在很短的时间(默认为 5 分钟)内过期, @@ -1252,7 +1252,7 @@ These situations are: --> ### 检查无法识别或重复的字段 {#setting-the-field-validation-level} -{{< feature-state for_k8s_version="v1.27" state="stable" >}} +{{< feature-state feature_gate_name="ServerSideFieldValidation" >}} ## 试运行 {#dry-run} -{{< feature-state for_k8s_version="v1.18" state="stable" >}} +{{< feature-state feature_gate_name="DryRun" >}} {{< table caption="CEL 表达式例子和每个表达式的用途" >}} @@ -109,6 +111,8 @@ CEL 表达式示例: | `self.metadata.name == 'singleton'` | 验证某对象的名称与特定的值匹配(使其成为一个特例) | | `self.set1.all(e, !(e in self.set2))` | 验证两个 listSet 不相交 | | `self.names.size() == self.details.size() && self.names.all(n, n in self.details)` | 验证 'details' 映射是由 'names' listSet 中的各项键入的 | +| `self.details.all(key, key.matches('^[a-zA-Z]*$')` | 验证 'details' 映射的主键 | +| `self.details.all(key, self.details[key].matches('^[a-zA-Z]*$')` | 验证 'details' 映射的值 | {{< /table >}} -**v1.29** 发行版本将停止提供以下已弃用的 API 版本: +**v1.29** 发行版本停止支持以下已弃用的 API 版本: -**flowcontrol.apiserver.k8s.io/v1beta2** API 版本的 FlowSchema -和 PriorityLevelConfiguration 将不会在 v1.29 中提供。 +从 v1.29 版本开始不再提供 **flowcontrol.apiserver.k8s.io/v1beta2** API 版本的 +FlowSchema 和 PriorityLevelConfiguration。 * 迁移清单和 API 客户端使用 **flowcontrol.apiserver.k8s.io/v1** API 版本(自 v1.29 版本开始可用), 或 **flowcontrol.apiserver.k8s.io/v1beta3** API 版本(自 v1.26 起可用); @@ -111,13 +111,13 @@ The **v1.27** release stopped serving the following deprecated API versions: #### CSIStorageCapacity {#csistoragecapacity-v127} -**storage.k8s.io/v1beta1** API 版本的 CSIStorageCapacity 将不会在 v1.27 提供。 +从 v1.27 版本开始不再提供 **storage.k8s.io/v1beta1** API 版本的 CSIStorageCapacity。 * 自 v1.24 版本起,迁移清单和 API 客户端使用 **storage.k8s.io/v1** API 版本 * 所有现有的持久化对象都可以通过新的 API 访问 @@ -138,15 +138,14 @@ The **v1.26** release stopped serving the following deprecated API versions: 从 v1.26 版本开始不再提供 **flowcontrol.apiserver.k8s.io/v1beta1** API 版本的 FlowSchema 和 PriorityLevelConfiguration。 -* 迁移清单和 API 客户端使用 **flowcontrol.apiserver.k8s.io/v1beta3** API 版本, - 此 API 从 v1.26 版本开始可用; +* 迁移清单和 API 客户端使用 **flowcontrol.apiserver.k8s.io/v1beta2** API 版本; * 所有的已保存的对象都可以通过新的 API 来访问; * 没有需要额外注意的变更。 @@ -157,6 +156,8 @@ The **autoscaling/v2beta2** API version of HorizontalPodAutoscaler is no longer * Migrate manifests and API clients to use the **autoscaling/v2** API version, available since v1.23. * All existing persisted objects are accessible via the new API +* Notable changes: + * `targetAverageUtilization` is replaced with `target.averageUtilization` and `target.type: Utilization`. See [Autoscaling on multiple metrics and custom metrics](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics). --> 从 v1.26 版本开始不再提供 **autoscaling/v2beta2** API 版本的 HorizontalPodAutoscaler。 @@ -164,6 +165,9 @@ HorizontalPodAutoscaler。 * 迁移清单和 API 客户端使用 **autoscaling/v2** API 版本, 此 API 从 v1.23 版本开始可用; * 所有的已保存的对象都可以通过新的 API 来访问。 +* 值得注意的变更: + * `targetAverageUtilization` 被替换为 `target.averageUtilization` 和 `target.type: Utilization`。 + 请参阅[基于多项度量指标和自定义度量指标自动扩缩](/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics)。 ### v1.25 @@ -263,12 +267,17 @@ The **autoscaling/v2beta1** API version of HorizontalPodAutoscaler is no longer * Migrate manifests and API clients to use the **autoscaling/v2** API version, available since v1.23. * All existing persisted objects are accessible via the new API +* Notable changes: + * `targetAverageUtilization` is replaced with `target.averageUtilization` and `target.type: Utilization`. See [Autoscaling on multiple metrics and custom metrics](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics). --> 从 v1.25 版本开始不再提供 **autoscaling/v2beta1** API 版本的 HorizontalPodAutoscaler。 * 迁移清单和 API 客户端使用 **autoscaling/v2** API 版本,此 API 从 v1.23 版本开始可用; * 所有的已保存的对象都可以通过新的 API 来访问。 +* 值得注意的变更: + * `targetAverageUtilization` 被替换为 `target.averageUtilization` 和 `target.type: Utilization`。 + 请参阅[基于多项度量指标和自定义度量指标自动扩缩](/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics)。 #### PodDisruptionBudget {#poddisruptionbudget-v125} diff --git a/content/zh-cn/docs/reference/using-api/health-checks.md b/content/zh-cn/docs/reference/using-api/health-checks.md index a62840b2ef..241b04de2d 100644 --- a/content/zh-cn/docs/reference/using-api/health-checks.md +++ b/content/zh-cn/docs/reference/using-api/health-checks.md @@ -131,12 +131,13 @@ healthz check passed 每个单独的健康检查都会公开一个 HTTP 端点,并且可以单独检查。 -单个运行状况检查的模式为 `/livez/`,其中 `livez` 和 `readyz` 表明你要检查的是 API 服务器是否存活或就绪。 +单个运行状况检查的模式为 `/livez/` 或 `/readyz/`, +其中 `livez` 和 `readyz` 分别表明你要检查的是 API 服务器是否存活或就绪。 `` 的路径可以通过上面的 `verbose` 参数发现 ,并采用 `[+]` 和 `ok` 之间的路径。 这些单独的健康检查不应由机器使用,但对于操作人员调试系统而言,是有帮助的: diff --git a/content/zh-cn/docs/reference/using-api/server-side-apply.md b/content/zh-cn/docs/reference/using-api/server-side-apply.md index 8eedbe818b..8ae947541d 100644 --- a/content/zh-cn/docs/reference/using-api/server-side-apply.md +++ b/content/zh-cn/docs/reference/using-api/server-side-apply.md @@ -16,7 +16,7 @@ weight: 25 -{{< feature-state for_k8s_version="v1.22" state="stable" >}} +{{< feature-state feature_gate_name="ServerSideApply" >}} 不管你提交的是 JSON 数据还是 YAML 数据, 都要使用 `application/apply-patch+yaml` 作为 `Content-Type` 的值。 -所有的 JSON 文档 都是合法的 YAML。 +所有的 JSON 文档都是合法的 YAML。不过,Kubernetes 存在一个缺陷, +即它使用的 YAML 解析器没有完全实现 YAML 规范。 +某些 JSON 转义可能无法被识别。 {{< /note >}} + +একটি ওয়ার্কার নোড একটি ভার্চুয়াল মেশিন বা ফিজিক্যাল মেশিন হতে পারে, একটি ক্লাস্টারের উপর নির্ভর করে । এটির {{< glossary_tooltip text="Pods" 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) হিসেবে পরিচিত ছিল। From 47953b2c0eb0b1391b64c66b02c09156e5341ce9 Mon Sep 17 00:00:00 2001 From: Obidur Rahman <112419917+Ashfinn@users.noreply.github.com> Date: Tue, 30 Apr 2024 21:06:55 +0600 Subject: [PATCH 0390/1086] Create annotation.md --- content/bn/docs/reference/glossary/annotation.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 content/bn/docs/reference/glossary/annotation.md diff --git a/content/bn/docs/reference/glossary/annotation.md b/content/bn/docs/reference/glossary/annotation.md new file mode 100644 index 0000000000..ccbf6a0578 --- /dev/null +++ b/content/bn/docs/reference/glossary/annotation.md @@ -0,0 +1,16 @@ +--- +title: এনোটেশন +id: annotation +date: 2018-04-12 +full_link: /docs/concepts/overview/working-with-objects/annotations +short_description: > + অবজেক্টগুলির উপর অনিয়মিতভাবে অপরিচিত মেটাডেটা সংযুক্ত করার জন্য ব্যবহৃত একটি কী-মান জোড়। +aka: +tags: +- fundamental +--- +অবজেক্টগুলির উপর অনিয়মিতভাবে অপরিচিত মেটাডেটা সংযুক্ত করার জন্য ব্যবহৃত একটি কী-মান জোড়। + + + +এনোটেশনের মেটাডেটা ছোট অথবা বড়, বিন্যাসিত বা অবিন্যাসিত হতে পারে, এবং এটিতে {{< glossary_tooltip text="labels" term_id="label" >}} দ্বারা অনুমোদিত নয় এমন ক্যারেক্টার থাকতে পারে। টুল এবং লাইব্রেরির মতো ক্লায়েন্ট এই মেটাডেটা পুনরায় নিতে পারে। From 73c6174675ce747e2de23b4bd9ba43882a675e19 Mon Sep 17 00:00:00 2001 From: Redwan Hossain Romit Date: Wed, 1 May 2024 01:30:17 +0600 Subject: [PATCH 0391/1086] Create kube-apiserver.md --- .../docs/reference/glossary/kube-apiserver.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 content/bn/docs/reference/glossary/kube-apiserver.md 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 0000000000..ac2034aae5 --- /dev/null +++ b/content/bn/docs/reference/glossary/kube-apiserver.md @@ -0,0 +1,22 @@ +--- +title: এপিএই সার্ভার +id: kube-apiserver +date: ২০১৮-০৪-১২ +full_link: /docs/concepts/overview/components/#kube-apiserver +short_description: > + কন্ট্রোল প্লেন উপাদান যা কুবারনেটেস API পরিবেশন করে। + +aka: +- kube-apiserver +tags: +- আর্কিটেকচার +- মৌলিক +--- + কুবারনেটেস {{< glossary_tooltip text="কন্ট্রোল প্লেন" term_id="control-plane" >}} এর একটি উপাদান হলো API সার্ভার যা কুবারনেটেস API প্রকাশ করে। +API সার্ভার কুবারনেটেস কন্ট্রোল প্লেনের ফ্রন্ট এন্ড হিসেবে কাজ করে। + + + +কুবারনেটেস API সার্ভারের প্রধান বাস্তবায়ন হলো [kube-apiserver](/docs/reference/generated/kube-apiserver/)। +kube-apiserver হরিজন্টালি স্কেল করার জন্য নকশা করা হয়েছে—অর্থাৎ, এটি আরও বেশি উদাহরণ ডেপ্লয় করে স্কেল করে। +আপনি একাধিক kube-apiserver উদাহরণ চালাতে পারেন এবং সেই উদাহরণগুলির মধ্যে ট্রাফিক ব্যালেন্স করতে পারেন। From f423b4f116f31af664d4bb0edddc5907a624123f Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Tue, 30 Apr 2024 20:58:37 +0100 Subject: [PATCH 0392/1086] Contribute as sig-docs reviewer blog post --- ...4-04-28-contribute-as-sig-docs-reviewer.md | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md diff --git a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md new file mode 100644 index 0000000000..38c275f7d9 --- /dev/null +++ b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md @@ -0,0 +1,109 @@ +--- +layout: blog +title: "From Code to Quill: Embark on a Legendary Kubernetes Quest with SIG-Docs" +date: 2024-04-28 +slug: contribute-as-sig-docs-reviewer +author: > + Ricardo Amaro (Acquia) +--- + +You've probably come across the saying, "Contributing doesn't always mean writing lines of code" +whispered to the wind or glimpsed in the margins of a sacred open-source tome. +What is the truth behind this tale as old as time (or at least as old as Kubernetes itself)? + +Imagine Sarah: an enthusiast of open-source whose keyboard had seen more action crafting +technical masterpieces for her projects than a knight's sword in battle. Sarah's had such +a smooth relationship with Git, that she could `git commit` and `git push` in her sleep, +and her etiquette in pull-requests was so polished, it could make a silver spoon look tarnished. + +But here's the twist: when it came to the mysterious _art-of-coding_, Sarah felt more +like a fish out of water — or more accurately, like trying to navigate a Kubernetes cluster +with a compass and a star map. The very thought of diving into the codebase made her feel like +she was trying to read ancient hieroglyphs without a Rosetta Stone. + +Did Sarah let this stop her? Not at all. She discovered a path as impactful as a well-placed +line of code: joining the Special Interest Group (SIG) Docs team. It was there that Sarah found her true calling, +helping transform the dense field of Kubernetes documentation into a well-tended garden of knowledge. + +Sarah's odyssey from a mere mortal Kubernetes user to a demigod of documentation didn't +just prove that contributions of knowledge and expertise are as valuable as code +contributions—it also showed that you don't need to be a coding wizard to make a significant +impact. Her journey is a beacon of hope for all who fear the merge conflict, a testament +to the power of the written word in the realm of open-source. + +So, let Sarah's story inspire you. No matter if you're a code ninja or a prose maestro, +there's a place for you in the open-source pantheon. And who knows? Maybe one day, +your documentation will be the guiding light for a lost soul in the Kubernetes sea, +making you the unsung hero of their open-source odyssey. + +## Why Become a SIG Docs Reviewer? + +The Kubernetes project depends substantially on the SIG Docs team to ensure that documentation +is accurate, up to date, and easily accessible. By becoming a reviewer, you can help users +and contributors navigate and understand Kubernetes more effectively. In addition, reviewing +documentation provides unique opportunities for: + +- **Expand your Kubernetes knowledge**: Engage deeply with new features and functionalities + by reviewing their documentation. +- **Improve your technical writing skills**: Develop an eye for detail and clarity in technical + writing. +- **Strengthen the Kubernetes community**: Help maintain the high quality of Kubernetes + documentation, supporting both new and experienced users. +- **Build your network**: Expanding your professional network, and getting together with + contributors from around the globe. + +## Who Are We Looking For? + +We're seeking open-source enthusiasts with: + +- Experience with Git and GitHub, comfortable with the process of reviewing pull requests + and providing constructive feedback. +- Familiarity with Markdown and documentation frameworks (Hugo experience is a plus but + not required). +- A passion for making complex technical concepts understandable and accessible. + +Prior experience in technical writing or documentation review in any open-source project +will be beneficial but not mandatory. + +## How to Get Started + +Becoming a SIG Docs reviewer is a journey that starts with familiarizing yourself with the +Kubernetes documentation contribution process. Here are the steps to get you started: + +1. **Familiarize Yourself with SIG Docs**: Start by reading the + [SIG Docs contributor guide](/docs/contribute/) to understand + how documentation contributions are made. + +1. **Join the Kubernetes Slack**: Connect with the SIG Docs community on the + [#sig-docs channel](https://kubernetes.slack.com/messages/sig-docs). It's a great place + to ask questions, find mentorship, and get to know the community. + +1. **Start Reviewing Pull Requests**: Look for open pull requests labeled with + `good first issue` or `help wanted`. These are great for beginners. Leave constructive + feedback and suggestions. Familiarize yourself with the + [content guide](/docs/contribute/style/content-guide/) and the + [style guide](/docs/contribute/style/style-guide/) to provide more effectively + [reviewing Pull Requests](/docs/contribute/review/reviewing-prs/). + +1. **Attend SIG Docs Meetings**: Participate in the + [SIG Docs meetings](https://github.com/kubernetes/community/tree/master/sig-docs). These + meetings are an excellent opportunity to meet fellow contributors, discuss documentation + improvements, and volunteer for reviewing tasks. + +1. **Shadow an Experienced Reviewer**: If possible, shadow an + [experienced reviewer](/docs/contribute/participate/roles-and-responsibilities/) + to learn best practices and tips for reviewing efficiently and effectively. + +## What's Next? + +After consistently contributing to documentation reviews and demonstrating your understanding +of Kubernetes documentation standards, you can express your interest in becoming an official +SIG Docs reviewer. Engage with the SIG Docs chairs or leads on Slack or during SIG Docs +meetings to discuss the next steps. + +## See YOU in the Docs! + +Becoming a SIG Docs reviewer is more than contributing; it's embracing the heart of the +Kubernetes community 🚀. Enhance your knowledge and writing skills while contributing +to our valuable documentation. This is your opportunity to guide others with your expertise +and make a lasting impact. Welcome aboard—see you there! 🌟 From 243155c7e1df8053b6c05280b4f679f6cb55c31a Mon Sep 17 00:00:00 2001 From: EigoOda Date: Wed, 1 May 2024 10:57:45 +0900 Subject: [PATCH 0393/1086] Add feature parameter to content/ja/docs/concepts/extend-kubernetes/_index.md --- content/ja/docs/concepts/extend-kubernetes/_index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/ja/docs/concepts/extend-kubernetes/_index.md b/content/ja/docs/concepts/extend-kubernetes/_index.md index 67ccb50adf..2267f160de 100644 --- a/content/ja/docs/concepts/extend-kubernetes/_index.md +++ b/content/ja/docs/concepts/extend-kubernetes/_index.md @@ -2,6 +2,10 @@ title: Kubernetesを拡張する weight: 110 description: Kubernetesクラスターの挙動を変えるいろいろな方法 +feature: + title: 拡張性を考慮した設計 + description: > + アップストリームのソースコードを変更することなく、Kubernetesクラスターに機能を追加できます。 content_type: concept no_list: true --- From 10878da2e3c7a1b28f74b5660d2ef17c9139e653 Mon Sep 17 00:00:00 2001 From: Kat Cosgrove Date: Wed, 1 May 2024 09:32:49 +0100 Subject: [PATCH 0394/1086] updates style guide for open source and cloud native --- content/en/docs/contribute/style/style-guide.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/en/docs/contribute/style/style-guide.md b/content/en/docs/contribute/style/style-guide.md index 318edf61b3..07d48aebcf 100644 --- a/content/en/docs/contribute/style/style-guide.md +++ b/content/en/docs/contribute/style/style-guide.md @@ -328,6 +328,8 @@ Kubernetes | Kubernetes should always be capitalized. Docker | Docker should always be capitalized. SIG Docs | SIG Docs rather than SIG-DOCS or other variations. On-premises | On-premises or On-prem rather than On-premise or other variations. +cloud native | Cloud native or cloud native as appropriate for sentence structure rather than cloud-native or Cloud Native. +open source | Open source or open source as appropriate for sentence structure rather than open-source or Open Source. {{< /table >}} ## Shortcodes From 56b5dc720ba87782ac2ecc080a340d0dc7db7fa5 Mon Sep 17 00:00:00 2001 From: Kat Cosgrove Date: Wed, 1 May 2024 09:34:03 +0100 Subject: [PATCH 0395/1086] standardize on open source over open-source --- content/en/_index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/_index.html b/content/en/_index.html index e615cae35b..f01dcfd079 100644 --- a/content/en/_index.html +++ b/content/en/_index.html @@ -10,7 +10,7 @@ sitemap: {{< blocks/section id="oceanNodes" >}} {{% blocks/feature image="flower" %}} -[Kubernetes]({{< relref "/docs/concepts/overview/" >}}), also known as K8s, is an open-source system for automating deployment, scaling, and management of containerized applications. +[Kubernetes]({{< relref "/docs/concepts/overview/" >}}), also known as K8s, is an open source system for automating deployment, scaling, and management of containerized applications. It groups containers that make up an application into logical units for easy management and discovery. Kubernetes builds upon [15 years of experience of running production workloads at Google](http://queue.acm.org/detail.cfm?id=2898444), combined with best-of-breed ideas and practices from the community. {{% /blocks/feature %}} From 9a21ccb8979df41f12026c23686c0c919d3d965c Mon Sep 17 00:00:00 2001 From: DenizY98 <126558788+DenizY98@users.noreply.github.com> Date: Wed, 1 May 2024 11:45:43 +0200 Subject: [PATCH 0396/1086] Update controller definition for clarity and conciseness MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit updates the definition of controllers in Kubernetes to enhance clarity and conciseness. The changes include: - Simplified the description by removing redundant phrases and improving the flow. - Corrected grammatical structure for better readability. Changes made: - From: "In Kubernetes sind Controller Kontrollschleifen, die den Zustand des Clusters beobachten, und dann Änderungen ausführen oder anfragen, wenn benötigt." - To: "In Kubernetes sind Controller Kontrollschleifen, die den Zustand des Clusters überwachen und bei Bedarf Änderungen ausführen oder anfordern." - From: "Jeder Controller versucht den aktuellen Clusterzustand in Richtung des Wunschzustands zu bewegen." - To: "Jeder Controller versucht, den aktuellen Clusterzustand in Richtung des Wunschzustands zu bewegen." This revision aims to make the text more accessible and easier to understand for both new and existing Kubernetes community members. --- content/de/docs/reference/glossary/controller.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/de/docs/reference/glossary/controller.md b/content/de/docs/reference/glossary/controller.md index 0af7692f23..290a088851 100644 --- a/content/de/docs/reference/glossary/controller.md +++ b/content/de/docs/reference/glossary/controller.md @@ -11,8 +11,8 @@ tags: - architecture - fundamental --- -In Kubernetes sind Controller Kontrollschleifen, die den Zustand des {{< glossary_tooltip term_id="cluster" text="Clusters">}} beobachten, und dann Änderungen ausführen oder anfragen, wenn benötigt. -Jeder Controller versucht den aktuellen Clusterzustand in Richtung des Wunschzustands zu bewegen. +In Kubernetes sind Controller Kontrollschleifen, die den Zustand des {{< glossary_tooltip term_id="cluster" text="Clusters">}} überwachen und bei Bedarf Änderungen ausführen oder anfordern. +Jeder Controller versucht, den aktuellen Clusterzustand in Richtung des Wunschzustands zu bewegen. From 47f15991d93c2f122a8e9c05b07dfa37c32ff44c Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Wed, 3 Jan 2024 23:16:37 +0000 Subject: [PATCH 0397/1086] Revise callouts in encryption-at-rest task page --- .../tasks/administer-cluster/encrypt-data.md | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/content/en/docs/tasks/administer-cluster/encrypt-data.md b/content/en/docs/tasks/administer-cluster/encrypt-data.md index 78d92d7fbc..8275addbc4 100644 --- a/content/en/docs/tasks/administer-cluster/encrypt-data.md +++ b/content/en/docs/tasks/administer-cluster/encrypt-data.md @@ -73,9 +73,12 @@ a previous migration to encrypted storage has succeeded. If you are not sure, se [ensure all relevant data are encrypted](#ensure-all-secrets-are-encrypted). {{< caution >}} -**IMPORTANT:** For high-availability configurations (with two or more control plane nodes), the -encryption configuration file must be the same! Otherwise, the `kube-apiserver` component cannot -decrypt data stored in the etcd. +For cluster configurations with two or more control plane nodes, the encryption configuration +**must** be identical across each control plane node. + +If there is a difference in the encryption provider configuration, this may well mean +that the kube-apiserver can't decrypt data stored inside the key-value store (potentially +leading to further problems, such as inconsistent resource reads, or even data loss). {{< /caution >}} ## Understanding the encryption at rest configuration @@ -198,9 +201,12 @@ For more detailed information about the `EncryptionConfiguration` struct, please [encryption configuration API](/docs/reference/config-api/apiserver-encryption.v1/). {{< caution >}} -If any resource is not readable via the encryption config (because keys were changed), -the only recourse is to delete that key from the underlying etcd directly. Calls that attempt to -read that resource will fail until it is deleted or a valid decryption key is provided. +If any resource is not readable via the encryption configuration (because keys were changed), +and you cannot restore a working configuration, your only recourse is to delete that entry from +the underlying etcd directly. + +Any calls to the Kubernetes API that attempt to read that resource will fail until it is deleted +or a valid decryption key is provided. {{< /caution >}} ### Available providers {#providers} @@ -402,7 +408,7 @@ Generate a 32-byte random key and base64 encode it. You can use this command: {{< note >}} -Keep the encryption key confidential, including whilst you generate it and +Keep the encryption key confidential, including while you generate it and ideally even after you are no longer actively using it. {{< /note >}} From 085c4cd168d7999502a0c1b133628415736fae72 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Mon, 1 Apr 2024 15:34:44 +0100 Subject: [PATCH 0398/1086] Reword advice about replicated encryption configuration --- .../tasks/administer-cluster/encrypt-data.md | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/content/en/docs/tasks/administer-cluster/encrypt-data.md b/content/en/docs/tasks/administer-cluster/encrypt-data.md index 8275addbc4..7c91ac839d 100644 --- a/content/en/docs/tasks/administer-cluster/encrypt-data.md +++ b/content/en/docs/tasks/administer-cluster/encrypt-data.md @@ -72,15 +72,6 @@ you already have at-rest encryption enabled. However, that check does not tell y a previous migration to encrypted storage has succeeded. If you are not sure, see [ensure all relevant data are encrypted](#ensure-all-secrets-are-encrypted). -{{< caution >}} -For cluster configurations with two or more control plane nodes, the encryption configuration -**must** be identical across each control plane node. - -If there is a difference in the encryption provider configuration, this may well mean -that the kube-apiserver can't decrypt data stored inside the key-value store (potentially -leading to further problems, such as inconsistent resource reads, or even data loss). -{{< /caution >}} - ## Understanding the encryption at rest configuration @@ -514,6 +505,18 @@ Kubernetes cluster has multiple control plane hosts, so there is more to do. If you have multiple API servers in your cluster, you should deploy the changes in turn to each API server. +{{< caution >}} +For cluster configurations with two or more control plane nodes, the encryption configuration +should be identical across each control plane node. + +If there is a difference in the encryption provider configuration between control plane +nodes, this difference may mean that the kube-apiserver can't decrypt data. +{{< /caution >}} + +When you are planning to update the encryption configuration of your cluster, plan this +so that the API servers in your control plane can always decrypt the stored data +(even part way through rolling out the change). + Make sure that you use the **same** encryption configuration on each control plane host. From 6afeb000ffb5a8f4f79e529053bb5d4334157ff3 Mon Sep 17 00:00:00 2001 From: ydFu Date: Wed, 1 May 2024 19:44:52 +0800 Subject: [PATCH 0399/1086] [zh]Update common-labels.md with corrected instance names Signed-off-by: ydFu --- .../working-with-objects/common-labels.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/content/zh-cn/docs/concepts/overview/working-with-objects/common-labels.md b/content/zh-cn/docs/concepts/overview/working-with-objects/common-labels.md index eb56faae44..f81d3907b8 100644 --- a/content/zh-cn/docs/concepts/overview/working-with-objects/common-labels.md +++ b/content/zh-cn/docs/concepts/overview/working-with-objects/common-labels.md @@ -69,20 +69,20 @@ on every resource object. | Key | Description | Example | Type | | ----------------------------------- | --------------------- | -------- | ---- | | `app.kubernetes.io/name` | The name of the application | `mysql` | string | -| `app.kubernetes.io/instance` | A unique name identifying the instance of an application | `mysql-abcxzy` | string | +| `app.kubernetes.io/instance` | A unique name identifying the instance of an application | `mysql-abcxyz` | string | | `app.kubernetes.io/version` | The current version of the application (e.g., a [SemVer 1.0](https://semver.org/spec/v1.0.0.html), revision hash, etc.) | `5.7.21` | string | | `app.kubernetes.io/component` | The component within the architecture | `database` | string | | `app.kubernetes.io/part-of` | The name of a higher level application this one is part of | `wordpress` | string | -| `app.kubernetes.io/managed-by` | The tool being used to manage the operation of an application | `helm` | string | +| `app.kubernetes.io/managed-by` | The tool being used to manage the operation of an application | `Helm` | string | --> | 键 | 描述 | 示例 | 类型 | | ----------------------------------- | --------------------- | -------- | ---- | | `app.kubernetes.io/name` | 应用程序的名称 | `mysql` | 字符串 | -| `app.kubernetes.io/instance` | 用于唯一确定应用实例的名称 | `mysql-abcxzy` | 字符串 | +| `app.kubernetes.io/instance` | 用于唯一确定应用实例的名称 | `mysql-abcxyz` | 字符串 | | `app.kubernetes.io/version` | 应用程序的当前版本(例如[语义版本 1.0](https://semver.org/spec/v1.0.0.html)、修订版哈希等) | `5.7.21` | 字符串 | | `app.kubernetes.io/component` | 架构中的组件 | `database` | 字符串 | | `app.kubernetes.io/part-of` | 此级别的更高级别应用程序的名称 | `wordpress` | 字符串 | -| `app.kubernetes.io/managed-by` | 用于管理应用程序的工具 | `helm` | 字符串 | +| `app.kubernetes.io/managed-by` | 用于管理应用程序的工具 | `Helm` | 字符串 | ## 应用和应用实例 {#application-and-instances-of-applications} @@ -123,7 +123,7 @@ to be identifiable. Every instance of an application must have a unique name. 应用的名称和实例的名称是分别记录的。例如,WordPress 应用的 `app.kubernetes.io/name` 为 `wordpress`,而其实例名称 -`app.kubernetes.io/instance` 为 `wordpress-abcxzy`。 +`app.kubernetes.io/instance` 为 `wordpress-abcxyz`。 这使得应用和应用的实例均可被识别,应用的每个实例都必须具有唯一的名称。 diff --git a/content/zh-cn/docs/reference/access-authn-authz/certificate-signing-requests.md b/content/zh-cn/docs/reference/access-authn-authz/certificate-signing-requests.md index 469a7c449d..e4ed99c975 100644 --- a/content/zh-cn/docs/reference/access-authn-authz/certificate-signing-requests.md +++ b/content/zh-cn/docs/reference/access-authn-authz/certificate-signing-requests.md @@ -1,7 +1,13 @@ --- title: 证书和证书签名请求 +api_metadata: +- apiVersion: "certificates.k8s.io/v1" + kind: "CertificateSigningRequest" + override_link_text: "CSR v1" +- apiVersion: "certificates.k8s.io/v1alpha1" + kind: "ClusterTrustBundle" content_type: concept -weight: 25 +weight: 60 --- @@ -676,14 +688,14 @@ you like. If you want to add a note for human consumption, use the {{< note >}} 在 Kubernetes {{< skew currentVersion >}} 中,如果想要使用此 API, -必须同时启用 `ClusterTrustBundles` [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/) +必须同时启用 `ClusterTrustBundle` [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/) **以及** `certificates.k8s.io/v1alpha1` {{< glossary_tooltip text="API 组" term_id="api-group" >}}。 {{< /note >}} @@ -783,7 +795,7 @@ controller in the cluster, so they have several security features: `/*`. * Signer-linked ClusterTrustBundles **must** be named with a prefix derived from their `spec.signerName` field. Slashes (`/`) are replaced with colons (`:`), - and a final colon is appended. This is followed by an arbitary name. For + and a final colon is appended. This is followed by an arbitrary name. For example, the signer `example.com/mysigner` can be linked to a ClusterTrustBundle `example.com:mysigner:`. --> @@ -847,6 +859,19 @@ signer-unlinked ClusterTrustBundles **must not** contain a colon (`:`). 为了将它们与与签名者关联的 ClusterTrustBundle 区分开来,与签名者未关联的 ClusterTrustBundle 的名称**必须不**包含英文冒号 (`:`)。 + +### 从 pod 访问 ClusterTrustBundles {#ctb-projection} + +{{}} + + +ClusterTrustBundle 的内容可以注入到容器文件系统,这与 ConfigMap 和 Secret 类似。 +更多细节参阅 [clusterTrustBundle 投射卷源](/zh-cn/docs/concepts/storage/projected-volumes#clustertrustbundle)。 + * 参阅 [管理集群中的 TLS 认证](/zh-cn/docs/tasks/tls/managing-tls-in-a-cluster/) * 查看 kube-controller-manager 中[签名者](https://github.com/kubernetes/kubernetes/blob/32ec6c212ec9415f604ffc1f4c1f29b782968ff1/pkg/controller/certificates/signer/cfssl_signer.go)部分的源代码 * 查看 kube-controller-manager 中[批准者](https://github.com/kubernetes/kubernetes/blob/32ec6c212ec9415f604ffc1f4c1f29b782968ff1/pkg/controller/certificates/approver/sarapprove.go)部分的源代码 * 有关 X.509 本身的详细信息,请参阅 [RFC 5280](https://tools.ietf.org/html/rfc5280#section-3.1) 第 3.1 节 * 有关 PKCS#10 证书签名请求语法的信息,请参阅 [RFC 2986](https://tools.ietf.org/html/rfc2986) +* 阅读 ClusterTrustBundle 相关内容: + * {{< page-api-reference kind="ClusterTrustBundle" >}} diff --git a/content/zh-cn/docs/reference/access-authn-authz/kubelet-authn-authz.md b/content/zh-cn/docs/reference/access-authn-authz/kubelet-authn-authz.md index 990694be2e..7dd8155d5a 100644 --- a/content/zh-cn/docs/reference/access-authn-authz/kubelet-authn-authz.md +++ b/content/zh-cn/docs/reference/access-authn-authz/kubelet-authn-authz.md @@ -58,12 +58,12 @@ To enable X509 client certificate authentication to the kubelet's HTTPS endpoint * 带 `--client-ca-file` 标志启动 kubelet,提供一个 CA 证书包以供验证客户端证书 * 带 `--kubelet-client-certificate` 和 `--kubelet-client-key` 标志启动 API 服务器 * 有关更多详细信息,请参见 - [API 服务器身份验证文档](/zh-cn/docs/reference/access-authn-authz/authentication/#x509-client-certs) + [API 服务器身份验证文档](/zh-cn/docs/reference/access-authn-authz/authentication/#x509-client-certificates) diff --git a/content/zh-cn/docs/reference/access-authn-authz/rbac.md b/content/zh-cn/docs/reference/access-authn-authz/rbac.md index cf2e59896c..1843840fcd 100644 --- a/content/zh-cn/docs/reference/access-authn-authz/rbac.md +++ b/content/zh-cn/docs/reference/access-authn-authz/rbac.md @@ -2,7 +2,7 @@ title: 使用 RBAC 鉴权 content_type: concept aliases: [/zh-cn/rbac/] -weight: 70 +weight: 33 --- diff --git a/content/zh-cn/docs/reference/access-authn-authz/validating-admission-policy.md b/content/zh-cn/docs/reference/access-authn-authz/validating-admission-policy.md index f636cb53ae..0abada4ce0 100644 --- a/content/zh-cn/docs/reference/access-authn-authz/validating-admission-policy.md +++ b/content/zh-cn/docs/reference/access-authn-authz/validating-admission-policy.md @@ -13,7 +13,7 @@ content_type: concept -{{< feature-state state="beta" for_k8s_version="v1.28" >}} +{{< feature-state state="stable" for_k8s_version="v1.30" >}} From 538fb618abe1b8c81ee69f917791a35b7748cbd4 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Thu, 2 May 2024 00:47:45 +0600 Subject: [PATCH 0404/1086] Create configmap.md --- content/bn/docs/reference/glossary/configmap.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 content/bn/docs/reference/glossary/configmap.md diff --git a/content/bn/docs/reference/glossary/configmap.md b/content/bn/docs/reference/glossary/configmap.md new file mode 100644 index 0000000000..6fba8ce574 --- /dev/null +++ b/content/bn/docs/reference/glossary/configmap.md @@ -0,0 +1,16 @@ +--- +title: কনফিগম্যাপ (ConfigMap) +id: কনফিগম্যাপ (configmap) +date: ২০১৮/০৪/১২ +full_link: /docs/concepts/configuration/configmap/ +short_description: > + একটি API অবজেক্ট কী-মান (key-value) জোড়ায় অ-গোপনীয় ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। এটি এনভায়রনমেন্ট ভেরিয়েবলস , কমান্ড-লাইন আর্গুমেন্টস বা একটি ভলিউমে কনফিগারেশন ফাইলস হিসাবে ব্যবহার করা যেতে পারে। +aka: +tags: +- কোর-অবজেক্ট (core-object) +--- +একটি API অবজেক্ট কী-মান (key-value) জোড়ায় অ-গোপনীয় ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। {{< glossary_tooltip text="Pods" term_id="pod" >}} কনফিগম্যাপকে এনভায়রনমেন্ট ভেরিয়েবল, কমান্ড-লাইন আর্গুমেন্টস বা {{< glossary_tooltip text="volume" term_id="volume" >}} -তে কনফিগারেশন ফাইলস হিসেবে ব্যবহার করতে পারে। + + + +একটি কনফিগম্যাপ (ConfigMap) আপনাকে আপনার {{< glossary_tooltip text="container images" term_id="image" >}} থেকে এনভায়রনমেন্ট-নির্দিষ্ট কনফিগারেশন ডিকপল (decouple) করার অনুমতি দেয়, যাতে আপনার অ্যাপ্লিকেশনগুলি সহজেই বহনযোগ্য (portable) হয়৷ From 47c8a17e000563c39e6302229e355608b6ccda44 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Thu, 2 May 2024 01:02:02 +0600 Subject: [PATCH 0405/1086] Create secret.md --- content/bn/docs/reference/glossary/secret.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 content/bn/docs/reference/glossary/secret.md diff --git a/content/bn/docs/reference/glossary/secret.md b/content/bn/docs/reference/glossary/secret.md new file mode 100644 index 0000000000..b247cad160 --- /dev/null +++ b/content/bn/docs/reference/glossary/secret.md @@ -0,0 +1,20 @@ +--- +title: সিক্রেট +id: সিক্রেট +date: ২০১৮/০৪/১২ +full_link: /docs/concepts/configuration/secret/ +short_description: > + সংবেদনশীল তথ্য, যেমন পাসওয়ার্ড, OAuth টোকেন এবং ssh কী(keys) গুলো সংরক্ষণ করে। + +aka: +tags: +- কোর-অবজেক্ট (core-object) +- নিরাপত্তা (security) +--- +সংবেদনশীল তথ্য, যেমন পাসওয়ার্ড, OAuth টোকেন এবং ssh কী(keys) গুলো সংরক্ষণ করে। + + + +সিক্রেট গুলো আপনাকে কীভাবে সংবেদনশীল তথ্য ব্যবহার করা হয় তার উপর আরও নিয়ন্ত্রণ দেয় এবং দুর্ঘটনাজনিত এক্সপোজারের ঝুঁকি হ্রাস করে। গোপন মানগুলি base64 স্ট্রিং হিসাবে এনকোড করা হয় এবং ডিফল্টরূপে এনক্রিপ্ট না করে সংরক্ষণ করা হয় তবে [বাকি সময়ে এনক্রিপ্ট](/docs/tasks/administer-cluster/encrypt-data/#ensure-all-secrets-are-encrypted) করার জন্য কনফিগার করা যেতে পারে। + +একটি {{< glossary_tooltip text="Pod" term_id="pod" >}} বিভিন্ন উপায়ে সিক্রেটকে উল্লেখ করতে পারে, যেমন একটি ভলিউম মাউন্ট বা পরিবেশ পরিবর্তনশীল হিসাবে। সিক্রেটগুলি গোপনীয় ডেটার জন্য ডিজাইন করা হয়েছে এবং [কনফিগম্যাপগুলি](/docs/tasks/configure-pod-container/configure-pod-configmap/) অ-গোপনীয় ডেটার জন্য ডিজাইন করা হয়েছে৷ From 61e34935ec3d080b1f2714e333f94c1de3dd4ca4 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Thu, 2 May 2024 01:31:29 +0600 Subject: [PATCH 0406/1086] Update configmap.md --- content/bn/docs/reference/glossary/configmap.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/reference/glossary/configmap.md b/content/bn/docs/reference/glossary/configmap.md index 6fba8ce574..997deb4c09 100644 --- a/content/bn/docs/reference/glossary/configmap.md +++ b/content/bn/docs/reference/glossary/configmap.md @@ -1,13 +1,13 @@ --- title: কনফিগম্যাপ (ConfigMap) -id: কনফিগম্যাপ (configmap) +id: configmap date: ২০১৮/০৪/১২ full_link: /docs/concepts/configuration/configmap/ short_description: > একটি API অবজেক্ট কী-মান (key-value) জোড়ায় অ-গোপনীয় ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। এটি এনভায়রনমেন্ট ভেরিয়েবলস , কমান্ড-লাইন আর্গুমেন্টস বা একটি ভলিউমে কনফিগারেশন ফাইলস হিসাবে ব্যবহার করা যেতে পারে। aka: tags: -- কোর-অবজেক্ট (core-object) +- core-object --- একটি API অবজেক্ট কী-মান (key-value) জোড়ায় অ-গোপনীয় ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। {{< glossary_tooltip text="Pods" term_id="pod" >}} কনফিগম্যাপকে এনভায়রনমেন্ট ভেরিয়েবল, কমান্ড-লাইন আর্গুমেন্টস বা {{< glossary_tooltip text="volume" term_id="volume" >}} -তে কনফিগারেশন ফাইলস হিসেবে ব্যবহার করতে পারে। From a5f1776cd9b9e28aea1a097f288768bd18ee3bde Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Thu, 2 May 2024 01:32:52 +0600 Subject: [PATCH 0407/1086] Update secret.md --- content/bn/docs/reference/glossary/secret.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/reference/glossary/secret.md b/content/bn/docs/reference/glossary/secret.md index b247cad160..7becd3c964 100644 --- a/content/bn/docs/reference/glossary/secret.md +++ b/content/bn/docs/reference/glossary/secret.md @@ -1,6 +1,6 @@ --- title: সিক্রেট -id: সিক্রেট +id: secret date: ২০১৮/০৪/১২ full_link: /docs/concepts/configuration/secret/ short_description: > From 329513fd52fbaf6de990febf6af6ac43858dbfd5 Mon Sep 17 00:00:00 2001 From: Redwan Hossain Romit Date: Thu, 2 May 2024 01:44:41 +0600 Subject: [PATCH 0408/1086] Create mirror-pod.md --- .../bn/docs/reference/glossary/mirror-pod.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/docs/reference/glossary/mirror-pod.md 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 0000000000..9217e5f3ad --- /dev/null +++ b/content/bn/docs/reference/glossary/mirror-pod.md @@ -0,0 +1,19 @@ +--- +title: মিরর পদ +id: mirror-pod +date: ২০১৯-০৮-০৬ +short_description: > + একটি অবজেক্ট এর এপিআই সার্ভার যা অনুসরণ করে একটি kubelet এর উপর একটি স্ট্যাটিক পদ । +aka: +tags: +- মৌলিক +--- +একটি {{< glossary_tooltip text="pod" term_id="pod" >}} object that a {{< glossary_tooltip text="kubelet" term_id="kubelet" >}} +প্রতিনিধিত্ব করতে ব্যবহার করে {{< glossary_tooltip text="static pod" term_id="static-pod" >}} + + +যখন kubelet এর কনফিগারেশনে একটি স্ট্যাটিক পদ পায়, তখন স্বয়ংক্রিয়ভাবে এটি +একটি পদ অবজেক্ট তৈরি করার জন্য কোনো প্রয়াস করে । এটা মানে করে যে পড়টি +API সার্ভারে দেখা যাবে, কিন্তু এটি সেখান থেকে নিয়ন্ত্রণ করা যাবে না। + +(যেমন, একটি মিরর পদ সরানোর মাধ্যমে kubelet daemon চালু করা থেকে বাধা পাওয়া যাবে না)। From 8cf5f3afe2a720e849635ececbbb532f28a418d1 Mon Sep 17 00:00:00 2001 From: Zain Rizvi Date: Wed, 1 May 2024 17:33:29 -0500 Subject: [PATCH 0409/1086] Update dynamic-resource-allocation.md The list has grown beyond four, and may keep growing in the future --- .../concepts/scheduling-eviction/dynamic-resource-allocation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/scheduling-eviction/dynamic-resource-allocation.md b/content/en/docs/concepts/scheduling-eviction/dynamic-resource-allocation.md index f68f078f42..b32dbc334f 100644 --- a/content/en/docs/concepts/scheduling-eviction/dynamic-resource-allocation.md +++ b/content/en/docs/concepts/scheduling-eviction/dynamic-resource-allocation.md @@ -35,7 +35,7 @@ check the documentation for that version of Kubernetes. ## API The `resource.k8s.io/v1alpha2` {{< glossary_tooltip text="API group" -term_id="api-group" >}} provides four types: +term_id="api-group" >}} provides these types: ResourceClass : Defines which resource driver handles a certain kind of From d0e29892e8116cfc0a04c6075ed0f0660dac2e5e Mon Sep 17 00:00:00 2001 From: EigoOda Date: Thu, 2 May 2024 09:32:43 +0900 Subject: [PATCH 0410/1086] Add botton for About the documentation --- content/ja/docs/home/_index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/ja/docs/home/_index.md b/content/ja/docs/home/_index.md index a8e47d0fbb..4f917cff1a 100644 --- a/content/ja/docs/home/_index.md +++ b/content/ja/docs/home/_index.md @@ -63,4 +63,6 @@ cards: - name: about title: ドキュメントについて description: このWebサイトには、Kubernetesの最新バージョンと過去4世代のドキュメントが含まれています。 + button: "利用可能なバージョンを見る" + button_path: "/docs/home/supported-doc-versions" --- From fc44498c09337f81dd19bab068837d47a40ad837 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 30 Apr 2024 06:42:33 +0800 Subject: [PATCH 0411/1086] [zh] Add cluster-administration/node-shutdown.md --- .../cluster-administration/node-shutdown.md | 518 ++++++++++++++++++ 1 file changed, 518 insertions(+) create mode 100644 content/zh-cn/docs/concepts/cluster-administration/node-shutdown.md diff --git a/content/zh-cn/docs/concepts/cluster-administration/node-shutdown.md b/content/zh-cn/docs/concepts/cluster-administration/node-shutdown.md new file mode 100644 index 0000000000..fc6c769999 --- /dev/null +++ b/content/zh-cn/docs/concepts/cluster-administration/node-shutdown.md @@ -0,0 +1,518 @@ +--- +title: 节点关闭 +content_type: concept +weight: 10 +--- + + + + +在 Kubernetes 集群中,{{< glossary_tooltip text="节点" term_id="node" >}}可以按计划的体面方式关闭, +也可能因断电或其他某些外部原因被意外关闭。如果节点在关闭之前未被排空,则节点关闭可能会导致工作负载失败。 +节点可以**体面关闭**或**非体面关闭**。 + + + + +## 节点体面关闭 {#graceful-node-shutdown} + +{{< feature-state feature_gate_name="GracefulNodeShutdown" >}} + + +kubelet 会尝试检测节点系统关闭事件并终止在节点上运行的所有 Pod。 + +在节点终止期间,kubelet 保证 Pod 遵从常规的 +[Pod 终止流程](/zh-cn/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination), +且不接受新的 Pod(即使这些 Pod 已经绑定到该节点)。 + + +节点体面关闭特性依赖于 systemd,因为它要利用 +[systemd 抑制器锁](https://www.freedesktop.org/wiki/Software/systemd/inhibit/)机制, +在给定的期限内延迟节点关闭。 + + +节点体面关闭特性受 `GracefulNodeShutdown` +[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)控制, +在 1.21 版本中是默认启用的。 + + +注意,默认情况下,下面描述的两个配置选项,`shutdownGracePeriod` 和 +`shutdownGracePeriodCriticalPods` 都是被设置为 0 的,因此不会激活节点体面关闭功能。 +要激活此功能特性,这两个 kubelet 配置选项要适当配置,并设置为非零值。 + + +一旦 systemd 检测到或通知节点关闭,kubelet 就会在节点上设置一个 +`NotReady` 状况,并将 `reason` 设置为 `"node is shutting down"`。 +kube-scheduler 会重视此状况,不将 Pod 调度到受影响的节点上; +其他第三方调度程序也应当遵循相同的逻辑。这意味着新的 Pod 不会被调度到该节点上, +因此不会有新 Pod 启动。 + + +如果检测到节点关闭正在进行中,kubelet **也会**在 `PodAdmission` +阶段拒绝 Pod,即使是该 Pod 带有 `node.kubernetes.io/not-ready:NoSchedule` +的{{< glossary_tooltip text="容忍度" term_id="toleration" >}},也不会在此节点上启动。 + + +同时,当 kubelet 通过 API 在其 Node 上设置该状况时,kubelet +也开始终止在本地运行的所有 Pod。 + + +在体面关闭节点过程中,kubelet 分两个阶段来终止 Pod: + +1. 终止在节点上运行的常规 Pod。 +2. 终止在节点上运行的[关键 Pod](/zh-cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)。 + + +节点体面关闭的特性对应两个 +[`KubeletConfiguration`](/zh-cn/docs/tasks/administer-cluster/kubelet-config-file/) 选项: + +* `shutdownGracePeriod`: + * 指定节点应延迟关闭的总持续时间。这是 Pod 体面终止的时间总和,不区分常规 Pod + 还是[关键 Pod](/zh-cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)。 +* `shutdownGracePeriodCriticalPods`: + * 在节点关闭期间指定用于终止[关键 Pod](/zh-cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical) + 的持续时间。该值应小于 `shutdownGracePeriod`。 + +{{< note >}} + +在某些情况下,节点终止过程会被系统取消(或者可能由管理员手动取消)。 +无论哪种情况下,节点都将返回到 `Ready` 状态。然而,已经开始终止进程的 +Pod 将不会被 kubelet 恢复,需要被重新调度。 +{{< /note >}} + + +例如,如果设置了 `shutdownGracePeriod=30s` 和 `shutdownGracePeriodCriticalPods=10s`, +则 kubelet 将延迟 30 秒关闭节点。 +在关闭期间,将保留前 20(30 - 10)秒用于体面终止常规 Pod, +而保留最后 10 秒用于终止[关键 Pod](/zh-cn/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)。 + +{{< note >}} + +当 Pod 在正常节点关闭期间被驱逐时,它们会被标记为关闭。 +运行 `kubectl get pods` 时,被驱逐的 Pod 的状态显示为 `Terminated`。 +并且 `kubectl describe pod` 表示 Pod 因节点关闭而被驱逐: + +``` +Reason: Terminated +Message: Pod was terminated in response to imminent node shutdown. +``` +{{< /note >}} + + +### 基于 Pod 优先级的节点体面关闭 {#pod-priority-graceful-node-shutdown} + +{{< feature-state feature_gate_name="GracefulNodeShutdownBasedOnPodPriority" >}} + + +为了在节点体面关闭期间提供更多的灵活性,尤其是处理关闭期间的 Pod 排序问题, +节点体面关闭机制能够关注 Pod 的 PriorityClass 设置,前提是你已经在集群中启用了此功能特性。 +此特性允许集群管理员基于 Pod +的[优先级类(Priority Class)](/zh-cn/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass) +显式地定义节点体面关闭期间 Pod 的处理顺序。 + + +前文所述的[节点体面关闭](#graceful-node-shutdown)特性能够分两个阶段关闭 Pod, +首先关闭的是非关键的 Pod,之后再处理关键 Pod。 +如果需要显式地以更细粒度定义关闭期间 Pod 的处理顺序,需要一定的灵活度, +这时可以使用基于 Pod 优先级的体面关闭机制。 + + +当节点体面关闭能够处理 Pod 优先级时,节点体面关闭的处理可以分为多个阶段, +每个阶段关闭特定优先级类的 Pod。可以配置 kubelet 按确切的阶段处理 Pod, +且每个阶段可以独立设置关闭时间。 + + +假设集群中存在以下自定义的 Pod +[优先级类](/zh-cn/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass)。 + + +| Pod 优先级类名称 | Pod 优先级类数值 | +|-------------------------|------------------------| +|`custom-class-a` | 100000 | +|`custom-class-b` | 10000 | +|`custom-class-c` | 1000 | +|`regular/unset` | 0 | + + +在 [kubelet 配置](/zh-cn/docs/reference/config-api/kubelet-config.v1beta1/)中, +`shutdownGracePeriodByPodPriority` 看起来可能是这样: + + +| Pod 优先级类数值 | 关闭期限 | +|------------------------|-----------| +| 100000 | 10 秒 | +| 10000 | 180 秒 | +| 1000 | 120 秒 | +| 0 | 60 秒 | + + +对应的 kubelet 配置 YAML 将会是: + +```yaml +shutdownGracePeriodByPodPriority: + - priority: 100000 + shutdownGracePeriodSeconds: 10 + - priority: 10000 + shutdownGracePeriodSeconds: 180 + - priority: 1000 + shutdownGracePeriodSeconds: 120 + - priority: 0 + shutdownGracePeriodSeconds: 60 +``` + + +上面的表格表明,所有 `priority` 值大于等于 100000 的 Pod 停止期限只有 10 秒, +所有 `priority` 值介于 10000 和 100000 之间的 Pod 停止期限是 180 秒, +所有 `priority` 值介于 1000 和 10000 之间的 Pod 停止期限是 120 秒, +其他所有 Pod 停止期限是 60 秒。 + +用户不需要为所有的优先级类都设置数值。例如,你也可以使用下面这种配置: + + +| Pod 优先级类数值 | 关闭期限 | +|------------------------|-----------| +| 100000 | 300 秒 | +| 1000 | 120 秒 | +| 0 | 60 秒 | + + +在上面这个场景中,优先级类为 `custom-class-b` 的 Pod 会与优先级类为 `custom-class-c` +的 Pod 在关闭时按相同期限处理。 + +如果在特定的范围内不存在 Pod,则 kubelet 不会等待对应优先级范围的 Pod。 +kubelet 会直接跳到下一个优先级数值范围进行处理。 + + +如果此功能特性被启用,但没有提供配置数据,则不会出现排序操作。 + +使用此功能特性需要启用 `GracefulNodeShutdownBasedOnPodPriority` +[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/), +并将 [kubelet 配置](/zh-cn/docs/reference/config-api/kubelet-config.v1beta1/) +中的 `shutdownGracePeriodByPodPriority` 设置为期望的配置, +其中包含 Pod 的优先级类数值以及对应的关闭期限。 + +{{< note >}} + +在节点体面关闭期间考虑 Pod 优先级的能力是作为 Kubernetes v1.23 中的 Alpha 功能引入的。 +在 Kubernetes {{< skew currentVersion >}} 中该功能是 Beta 版,默认启用。 +{{< /note >}} + + +kubelet 子系统中会生成 `graceful_shutdown_start_time_seconds` 和 +`graceful_shutdown_end_time_seconds` 度量指标以便监视节点关闭行为。 + + +## 处理节点非体面关闭 {#non-graceful-node-shutdown} + +{{< feature-state feature_gate_name="NodeOutOfServiceVolumeDetach" >}} + + +节点关闭的操作可能无法被 kubelet 的节点关闭管理器检测到, +或是因为该命令没有触发 kubelet 所使用的抑制器锁机制,或是因为用户错误, +即 ShutdownGracePeriod 和 ShutdownGracePeriodCriticalPod 配置不正确。 +请参考以上[节点体面关闭](#graceful-node-shutdown)部分了解更多详细信息。 + + +当某节点关闭但 kubelet 的节点关闭管理器未检测到这一事件时, +在那个已关闭节点上、属于 {{< glossary_tooltip text="StatefulSet" term_id="statefulset" >}} +的 Pod 将停滞于终止状态,并且不能移动到新的运行节点上。 +这是因为已关闭节点上的 kubelet 已不存在,亦无法删除 Pod, +因此 StatefulSet 无法创建同名的新 Pod。 +如果 Pod 使用了卷,则 VolumeAttachments 无法从原来的已关闭节点上删除, +因此这些 Pod 所使用的卷也无法挂接到新的运行节点上。 +最终,那些以 StatefulSet 形式运行的应用无法正常工作。 +如果原来的已关闭节点被恢复,kubelet 将删除 Pod,新的 Pod 将被在不同的运行节点上创建。 +如果原来的已关闭节点没有被恢复,那些在已关闭节点上的 Pod 将永远滞留在终止状态。 + + +为了缓解上述情况,用户可以手动将具有 `NoExecute` 或 `NoSchedule` 效果的 +`node.kubernetes.io/out-of-service` 污点添加到节点上,标记其无法提供服务。 +如果在 {{< glossary_tooltip text="kube-controller-manager" term_id="kube-controller-manager" >}} +上启用了 `NodeOutOfServiceVolumeDetach` +[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/), +并且节点被污点标记为无法提供服务,如果节点 Pod 上没有设置对应的容忍度, +那么这样的 Pod 将被强制删除,并且该在节点上被终止的 Pod 将立即进行卷分离操作。 +这样就允许那些在无法提供服务节点上的 Pod 能在其他节点上快速恢复。 + + +在非体面关闭期间,Pod 分两个阶段终止: + +1. 强制删除没有匹配的 `out-of-service` 容忍度的 Pod。 +2. 立即对此类 Pod 执行分离卷操作。 + +{{< note >}} + +- 在添加 `node.kubernetes.io/out-of-service` 污点之前, + 应该验证节点已经处于关闭或断电状态(而不是在重新启动中)。 +- 将 Pod 移动到新节点后,用户需要手动移除停止服务的污点, + 并且用户要检查关闭节点是否已恢复,因为该用户是最初添加污点的用户。 +{{< /note >}} + + +### 存储超时强制解除挂接 {#storage-force-detach-on-timeout} + +在任何情况下,当 Pod 未能在 6 分钟内删除成功,如果节点当时不健康, +Kubernetes 将强制解除挂接正在被卸载的卷。 +任何运行在使用了强制解除挂接卷的节点之上的工作负载, +都将违反 [CSI 规范](https://github.com/container-storage-interface/spec/blob/master/spec.md#controllerunpublishvolume), +该规范指出 `ControllerUnpublishVolume` +"**必须**在调用卷上的所有 `NodeUnstageVolume` 和 `NodeUnpublishVolume` 执行且成功后被调用"。 +在这种情况下,相关节点上的卷可能会遇到数据损坏。 + + +强制存储解除挂接行为是可选的;用户可以选择使用"非体面节点关闭"特性。 + + +可以通过在 `kube-controller-manager` 中设置 `disable-force-detach-on-timeout` +配置字段来禁用超时时存储强制解除挂接。 +禁用超时强制解除挂接特性意味着,托管在异常超过 6 分钟的节点上的卷将不会保留其关联的 +[VolumeAttachment](/zh-cn/docs/reference/kubernetes-api/config-and-storage-resources/volume-attachment-v1/)。 + + +应用此设置后,仍然关联卷到不健康 Pod 必须通过上述[非体面节点关闭](#non-graceful-node-shutdown)过程进行恢复。 + +{{< note >}} + +- 使用[非体面节点关闭](#non-graceful-node-shutdown)过程时必须小心。 +- 偏离上述步骤可能会导致数据损坏。 +{{< /note >}} + +## {{% heading "whatsnext" %}} + + +了解更多以下信息: + +- 博客:[非体面节点关闭](/zh-cn/blog/2023/08/16/kubernetes-1-28-non-graceful-node-shutdown-ga/)。 +- 集群架构:[节点](/zh-cn/docs/concepts/architecture/nodes/)。 From 3dc8aa5ee0a458b297fc6412184f697ac2ad2bb9 Mon Sep 17 00:00:00 2001 From: Sajib Adhikary <60180521+sajibAdhi@users.noreply.github.com> Date: Mon, 29 Apr 2024 08:18:21 +0000 Subject: [PATCH 0412/1086] [bn] Localize cncf-code-of-conduct Signed-off-by: Sajib Adhikary --- .../community/static/cncf-code-of-conduct.md | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 content/bn/community/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 0000000000..87ccc3f7b4 --- /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/ From c0515e9a6de351280f9f13374f9f725cfe01f076 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Thu, 2 May 2024 11:41:29 +0600 Subject: [PATCH 0413/1086] Create control-plane.md --- .../docs/reference/glossary/control-plane.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 content/bn/docs/reference/glossary/control-plane.md 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 0000000000..19799f77d1 --- /dev/null +++ b/content/bn/docs/reference/glossary/control-plane.md @@ -0,0 +1,24 @@ +--- +title: কন্ট্রোল প্লেন +id: control-plane +date: ২০১৯/০৫/১২ +full_link: +short_description: > + কন্টেইনার অর্কেস্ট্রেশন স্তর যেটা, কন্টেইনারের জীবনচক্রটি সংজ্ঞায়িত, স্থাপন এবং পরিচালনা করতে এপিআই(API) এবং ইন্টারফেসগুলি প্রকাশ করে। +aka: +tags: +- fundamental +--- +কন্টেইনার অর্কেস্ট্রেশন স্তর যেটা, কন্টেইনারের জীবনচক্রটি সংজ্ঞায়িত, স্থাপন এবং পরিচালনা করতে এপিআই(API) এবং ইন্টারফেসগুলি প্রকাশ করে। + + + +এই স্তরটি অনেকগুলি ভিন্ন উপাদান দ্বারা রচিত, যেমন (তবে সীমাবদ্ধ নয়): + +* {{< glossary_tooltip text="etcd" term_id="etcd" >}} +* {{< glossary_tooltip text="API Server" term_id="kube-apiserver" >}} +* {{< glossary_tooltip text="Scheduler" term_id="kube-scheduler" >}} +* {{< glossary_tooltip text="Controller Manager" term_id="kube-controller-manager" >}} +* {{< glossary_tooltip text="Cloud Controller Manager" term_id="cloud-controller-manager" >}} + +এই উপাদানগুলি ঐতিহ্যবাহী অপারেটিং সিস্টেম পরিষেবাদি(daemons) বা কন্টেইনার্স(containers) হিসাবে চালানো যেতে পারে। এই উপাদানগুলি চালানো হোস্টগুলিকে ঐতিহাসিকভাবে {{< glossary_tooltip text="masters" term_id="master" >}} বলা হত। From e4adb94618ae64fda1bb639ad6bd01324a6fa2fa Mon Sep 17 00:00:00 2001 From: Arhell Date: Thu, 2 May 2024 09:37:05 +0300 Subject: [PATCH 0414/1086] [es] Correct link --- content/es/docs/concepts/services-networking/ingress.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/es/docs/concepts/services-networking/ingress.md b/content/es/docs/concepts/services-networking/ingress.md index 4bf5a06446..0e3a5b9904 100644 --- a/content/es/docs/concepts/services-networking/ingress.md +++ b/content/es/docs/concepts/services-networking/ingress.md @@ -737,7 +737,7 @@ recurso Ingress: * Usa un [Service.Type=LoadBalancer](es/docs/concepts/services-networking/service/#loadbalancer) * Usa - un [Service.Type=NodePort](es/docs/concepts/services-networking/service/#type-nodeport) + un [Service.Type=NodePort](es/docs/concepts/services-networking/service/#tipo-nodeport) ## {{% heading "whatsnext" %}} From 936e9cd0f25bdbffc7f4d77daa4ca4db8f3b58a9 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Thu, 2 May 2024 15:50:55 +0800 Subject: [PATCH 0415/1086] [zh-cn]sync extend-service-ip-ranges configure-pdb Signed-off-by: xin.li --- content/zh-cn/docs/tasks/network/extend-service-ip-ranges.md | 2 +- content/zh-cn/docs/tasks/run-application/configure-pdb.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/zh-cn/docs/tasks/network/extend-service-ip-ranges.md b/content/zh-cn/docs/tasks/network/extend-service-ip-ranges.md index ccdf2efd07..f0d13af775 100644 --- a/content/zh-cn/docs/tasks/network/extend-service-ip-ranges.md +++ b/content/zh-cn/docs/tasks/network/extend-service-ip-ranges.md @@ -17,7 +17,7 @@ content_type: task -{{< feature-state state="alpha" for_k8s_version="v1.29" >}} +{{< feature-state feature_gate_name="MultiCIDRServiceAllocator" >}} ## 不健康的 Pod 驱逐策略 {#unhealthy-pod-eviction-policy} -{{< feature-state for_k8s_version="v1.27" state="beta" >}} +{{< feature-state feature_gate_name="PDBUnhealthyPodEvictionPolicy" >}} {{< note >}} >streaming: Connection upgrade (SPDY or WebSocket) + streaming-)API: Stream data + API-)kubectl: Stream data + else + runtime->>crictl: Response URL + crictl-->>streaming: Connection upgrade (SPDY or WebSocket) + streaming-)crictl: Stream data + end diff --git a/content/en/blog/_posts/2024-05-01-cri-streaming-explained/flow.svg b/content/en/blog/_posts/2024-05-01-cri-streaming-explained/flow.svg new file mode 100644 index 0000000000..24e93fa50d --- /dev/null +++ b/content/en/blog/_posts/2024-05-01-cri-streaming-explained/flow.svg @@ -0,0 +1 @@ +Streaming ServerContainer RuntimekubeletAPI ServerkubectlcrictlStreaming ServerContainer RuntimekubeletAPI ServerkubectlcrictlContainer Runtime Interface (CRI)Container Runtime Interface (CRI)alt[Client alternatives]alt[Client alternatives]exec, attach, port-forwardExec, Attach, PortForwardExec, Attach, PortForwardNew SessionHTTP endpoint (URL)Response URLConnection upgrade (SPDY or WebSocket)Stream dataStream dataResponse URLConnection upgrade (SPDY or WebSocket)Stream data diff --git a/content/en/blog/_posts/2024-05-01-cri-streaming-explained.md b/content/en/blog/_posts/2024-05-01-cri-streaming-explained/index.md similarity index 93% rename from content/en/blog/_posts/2024-05-01-cri-streaming-explained.md rename to content/en/blog/_posts/2024-05-01-cri-streaming-explained/index.md index 045ce5d039..43f11be834 100644 --- a/content/en/blog/_posts/2024-05-01-cri-streaming-explained.md +++ b/content/en/blog/_posts/2024-05-01-cri-streaming-explained/index.md @@ -103,37 +103,7 @@ to maintain which nevertheless would be runtime dependent. This means, that the basic flow for `Exec`, `Attach` and `PortForward` was proposed to look like this: -{{< mermaid >}} -sequenceDiagram - participant crictl - participant kubectl - participant API as API Server - participant kubelet - participant runtime as Container Runtime - participant streaming as Streaming Server - alt Client alternatives - Note over kubelet,runtime: Container Runtime Interface (CRI) - kubectl->>API: exec, attach, port-forward - API->>kubelet: exec, attach, port-forward - kubelet->>runtime: Exec, Attach, PortForward - else - Note over crictl,runtime: Container Runtime Interface (CRI) - crictl->>runtime: Exec, Attach, PortForward - end - runtime->>streaming: New Session - streaming->>runtime: HTTP endpoint (URL) - alt Client alternatives - runtime->>kubelet: Response URL - kubelet->>API: - API-->>streaming: Connection upgrade (SPDY or WebSocket) - streaming-)API: Stream data - API-)kubectl: Stream data - else - runtime->>crictl: Response URL - crictl-->>streaming: Connection upgrade (SPDY or WebSocket) - streaming-)crictl: Stream data - end -{{< /mermaid >}} +{{< figure src="flow.svg" alt="CRI Streaming flow" class="diagram-large" >}} Clients like crictl or the kubelet (via kubectl) request a new exec, attach or port forward session from the runtime using the gRPC interface. The runtime From de34c5fe2daf2631387c1fbcd5bf2b6adb11d2e5 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Wed, 1 May 2024 11:08:17 +0800 Subject: [PATCH 0418/1086] [zh-cn] sync pods/_index.md Signed-off-by: xin.li --- .../docs/concepts/workloads/pods/_index.md | 126 ++++++++++-------- 1 file changed, 72 insertions(+), 54 deletions(-) diff --git a/content/zh-cn/docs/concepts/workloads/pods/_index.md b/content/zh-cn/docs/concepts/workloads/pods/_index.md index 00f6b05e1b..193de6b373 100644 --- a/content/zh-cn/docs/concepts/workloads/pods/_index.md +++ b/content/zh-cn/docs/concepts/workloads/pods/_index.md @@ -1,5 +1,8 @@ --- title: Pod +api_metadata: +- apiVersion: "v1" + kind: "Pod" content_type: concept weight: 10 no_list: true @@ -8,6 +11,9 @@ no_list: true reviewers: - erictune title: Pods +api_metadata: +- apiVersion: "v1" + kind: "Pod" content_type: concept weight: 10 no_list: true @@ -235,26 +241,30 @@ Pod 的名称必须是一个合法的 你应该将 `.spec.os.name` 字段设置为 `windows` 或 `linux` 以表示你希望 Pod 运行在哪个操作系统之上。 这两个是 Kubernetes 目前支持的操作系统。将来,这个列表可能会被扩充。 -在 Kubernetes v{{< skew currentVersion >}} 中,为此字段设置的值对 Pod -的{{}}没有影响。 -设置 `.spec.os.name` 有助于确定性地标识 Pod 的操作系统并用于验证。 -如果你指定的 Pod 操作系统与运行 kubelet 所在节点的操作系统不同, -那么 kubelet 将会拒绝运行该 Pod。 +在 Kubernetes v{{< skew currentVersion >}} 中,`.spec.os.name` 的值对 +{{< glossary_tooltip text="kube-scheduler" term_id="kube-scheduler" >}} 如何调度 Pod 到节点上没有影响。 +在任何有多种操作系统运行节点的集群中,你应该在每个节点上正确设置 +[kubernetes.io/os](/zh-cn/docs/reference/labels-annotations-taints/#kubernetes-io-os) +标签,并根据操作系统标签为 Pod 设置 `nodeSelector` 字段。 +kube-scheduler 将根据其他标准将你的 Pod 分配到节点, +并且可能会也可能不会成功选择合适的节点位置,其中节点操作系统适合该 Pod 中的容器。 [Pod 安全标准](/zh-cn/docs/concepts/security/pod-security-standards/)也使用这个字段来避免强制执行与该操作系统无关的策略。 工作负载的控制器会使用负载对象中的 `PodTemplate` 来生成实际的 Pod。 `PodTemplate` 是你用来运行应用时指定的负载资源的目标状态的一部分。 +创建 Pod 时,你可以在 Pod 模板中包含 Pod +中运行的容器的[环境变量](/zh-cn/docs/tasks/inject-data-application/define-environment-variable-container/)。 + 下面的示例是一个简单的 Job 的清单,其中的 `template` 指示启动一个容器。 该 Pod 中的容器会打印一条消息之后暂停。 @@ -499,57 +516,58 @@ Pod 中的容器所看到的系统主机名与为 Pod 配置的 `name` 属性值 [网络](/zh-cn/docs/concepts/cluster-administration/networking/)部分提供了更多有关此内容的信息。 -## 容器的特权模式 {#privileged-mode-for-containers} - -{{< note >}} - -你的{{< glossary_tooltip text="容器运行时" term_id="container-runtime" >}}必须支持特权容器的概念才能使用这一配置。 -{{< /note >}} +## Pod 安全设置 {#pod-security} -Pod 中的所有容器都可以在特权模式下运行,以使用原本无法访问的操作系统管理权能。 -此模式同时适用于 Windows 和 Linux。 +要对 Pod 和容器设置安全约束,请使用 Pod 规约中的 `securityContext` 字段。 +该字段使你可以精细控制 Pod 或单个容器可以执行的操作。例如: -### Linux 特权容器 {#linux-privileged-containers} +* 放弃特定的 Linux 权能(Capability)以避免受到某 CVE 的影响。 +* 强制 Pod 中的所有进程以非 root 用户或特定用户或组 ID 的身份运行。 +* 设置特定的 seccomp 配置文件。 +* 设置 Windows 安全选项,例如容器是否作为 HostProcess 运行。 -在 Linux 中,Pod 中的所有容器都可以使用容器规约中的 -[安全性上下文](/zh-cn/docs/tasks/configure-pod-container/security-context/)中的 -`privileged`(Linux)参数启用特权模式。 -这对于想要使用操作系统管理权能(Capabilities,如操纵网络堆栈和访问硬件设备)的容器很有用。 +{{< caution >}} + +你还可以使用 Pod securityContext 在 Linux 容器中启用[**特权模式**](/zh-cn/docs/concepts/security/linux-kernel-security-constraints/#privileged-containers)。 +特权模式会覆盖 securityContext 中的许多其他安全设置。 +请避免使用此设置,除非你无法通过使用 securityContext 中的其他字段授予等效权限。 +在 Kubernetes 1.26 及更高版本中,你可以通过在 Pod 规约的安全上下文中设置 +`windowsOptions.hostProcess` 标志,以类似的特权模式运行 Windows 容器。 +有关详细信息和说明,请参阅[创建 Windows HostProcess Pod](/zh-cn/docs/tasks/configure-pod-container/create-hostprocess-pod/)。 +{{< /caution >}} -### Windows 特权容器 {#windows-privileged-containers} - -{{< feature-state for_k8s_version="v1.26" state="stable" >}} - - -在 Windows 中,你可以使用 Pod 规约中安全上下文的 `windowsOptions.hostProcess` 参数来创建 -[Windows HostProcess Pod](/zh-cn/docs/tasks/configure-pod-container/create-hostprocess-pod/)。 -这些 Pod 中的所有容器都必须以 Windows HostProcess 容器方式运行。 -HostProcess Pod 可以直接运行在主机上,它也能像 Linux 特权容器一样,用于执行管理任务。 +* 要了解可以使用的内核级安全约束,请参阅 [Pod 和容器的 Linux 内核安全约束](/zh-cn/docs/concepts/security/linux-kernel-security-constraints)。 +* 要了解有关 Pod 安全上下文的更多信息,请参阅[为 Pod 或容器配置安全上下文](/zh-cn/docs/tasks/configure-pod-container/security-context/)。 -{{< feature-state for_k8s_version="v1.27" state="alpha" >}} +{{< feature-state feature_gate_name="DynamicResourceAllocation" >}} 动态资源分配是一个用于在 Pod 之间和 Pod 内部容器之间请求和共享资源的 API。 -它是对为通用资源所提供的持久卷 API 的泛化。第三方资源驱动程序负责跟踪和分配资源。 -不同类型的资源支持用任意参数进行定义和初始化。 +它是持久卷 API 的通用资源化。第三方资源驱动程序负责跟踪和分配资源, +Kubernetes 通过**结构化参数**(在 Kubernetes 1.30 中引入)提供了额外的支持。 +当驱动程序使用结构化参数时,Kubernetes 可以处理调度和资源分配,而无需与驱动程序通信。 +而不同类型的资源,可支持用于“定义需求”和“初始化”的任意参数。 ## {{% heading "prerequisites" %}} @@ -50,10 +55,11 @@ Kubernetes v{{< skew currentVersion >}} 包含用于动态资源分配的集群 `resource.k8s.io/v1alpha2` -{{< glossary_tooltip text="API 组" term_id="api-group" >}}提供四种类型: +{{< glossary_tooltip text="API 组" term_id="api-group" >}} +提供了以下类型: +ResourceSlice +: 与结构化参数一起使用,发布集群中可用资源的信息。 + +ResourceClaimParameters +: 包含影响调度的 ResourceClaim 参数, + 以 Kubernetes 理解的格式(“结构化参数模型”)呈现。 + 提供了供应商驱动程序,在设置底层资源时,使用的不透明扩展中可能嵌入其他参数。 + +ResourceClassParameters +: 类似于 ResourceClaimParameters,ResourceClassParameters 为 Kubernetes 理解的 ResourceClass 参数提供了一种类型。 + +资源驱动程序的开发者决定他们是要在自己的外部控制器中处理这些参数, +还是依赖 Kubernetes 通过使用结构化参数来处理它们。 +自定义控制器提供更多的灵活性,但对于节点本地资源,集群自动缩放可能无法可靠工作。 +结构化参数使集群自动缩放成为可能,但可能无法满足所有用例。 + + +当驱动程序使用结构化参数时,仍然可以让最终用户使用供应商特定的 CRD 指定参数。 +在这种情况下,驱动程序需要将这些自定义参数转换为内部类型。 +或者,驱动程序也可以直接使用内部类型的文档。 + ## 调度 {#scheduling} + +### 不使用结构化参数 {#without-structured-parameters} + 与原生资源(CPU、RAM)和扩展资源(由设备插件管理,并由 kubelet 公布)不同, -调度器不知道集群中有哪些动态资源, +如果没有结构化参数,调度器无法知道集群中有哪些动态资源, 也不知道如何将它们拆分以满足特定 ResourceClaim 的要求。 资源驱动程序负责这些任务。 资源驱动程序在为 ResourceClaim 保留资源后将其标记为“已分配(Allocated)”。 @@ -267,6 +330,46 @@ Pod,在使用 ResourceClaim 处理 Pod 时会进行阻塞 API 调用, 从而推迟调度下一个 Pod。 {{< /note >}} + +### 使用结构化参数 {#with-structured-parameters} + + +当驱动程序使用结构化参数时,调度器负责在 Pod 需要资源时为 ResourceClaim 分配资源。 +通过从 ResourceSlice 对象中检索可用资源的完整列表, +跟踪已分配给现有 ResourceClaim 的资源,然后从剩余的资源中进行选择。 +所选资源受与 ResourceClaim 关联的 ResourceClaimParameters 或 ResourceClassParameters 提供的约束的影响。 + + +所选资源与供应商特定参数一起被记录在 ResourceClaim 状态中, +因此当 Pod 即将在节点上启动时,节点上的资源驱动程序具有准备资源所需的所有信息。 + + +通过使用结构化参数,调度器能够在不与 DRA 资源驱动程序通信的情况下做出决策。 +它还能够通过将 ResourceClaim 分配信息保存在内存中,并在同时将 Pod 绑定到节点的同时将此信息写入 ResourceClaim 对象中, +快速调度多个 Pod。 + @@ -305,14 +408,21 @@ reserving the required ResourceClaims. 这种情况也可能发生在 Pod 被调度时调度器中未启用动态资源分配支持的时候(原因可能是版本偏差、配置、特性门控等)。 kube-controller-manager 能够检测到这一点,并尝试通过触发分配和/或预留所需的 ResourceClaim 来使 Pod 可运行。 +{{< note >}} +这仅适用于不使用结构化参数的资源驱动程序。 +{{< /note >}} + + -然而,最好避免这种情况,因为分配给节点的 Pod 会锁住一些正常的资源(RAM、CPU), +绕过调度器并不是一个好的选择,因为分配给节点的 Pod 会锁住一些正常的资源(RAM、CPU), 而这些资源在 Pod 被卡住时无法用于其他 Pod。为了让一个 Pod 在特定节点上运行, 同时仍然通过正常的调度流程进行,请在创建 Pod 时使用与期望的节点精确匹配的节点选择算符: @@ -405,7 +515,10 @@ be installed. Please refer to the driver's documentation for details. - 了解更多该设计的信息, - 参阅[动态资源分配 KEP](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/3063-dynamic-resource-allocation/README.md)。 + 参阅[动态资源分配 KEP](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/3063-dynamic-resource-allocation/README.md) + 和[结构化参数 KEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/4381-dra-structured-parameters)。 From 0b328249cf29caaa8827807ce4002b11bc9db224 Mon Sep 17 00:00:00 2001 From: Md Sadique Hossain Date: Thu, 2 May 2024 15:36:13 +0600 Subject: [PATCH 0420/1086] Create gateway.md --- content/bn/docs/reference/glossary/gateway.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 content/bn/docs/reference/glossary/gateway.md diff --git a/content/bn/docs/reference/glossary/gateway.md b/content/bn/docs/reference/glossary/gateway.md new file mode 100644 index 0000000000..bcda650b3e --- /dev/null +++ b/content/bn/docs/reference/glossary/gateway.md @@ -0,0 +1,18 @@ +--- +title: প্রবেশপথ এ পি আই (API) +id: gateway-api +date: ২০২৩/১০/১৯ +full_link: /docs/concepts/services-networking/gateway/ +short_description: > + Kubernetes-এ মডেলিং পরিষেবা নেটওয়ার্কিংয়ের জন্য একটি এ পি আই (API)। + +aka: +tags: +- networking +- architecture +- extension +--- +Kubernetes-এ মডেলিং পরিষেবা নেটওয়ার্কিংয়ের জন্য এ পি আই (API) ধরণের একটি পরিবার। + +গেটওয়ে বা প্রবেশপথ এ পি আই (API) এক্সটেনসিবল বা প্রসারনীয়, ভূমিকা-ভিত্তিক, প্রোটোকল-সচেতন একটি পরিবার প্রদান করে +Kubernetes-এ মডেলিং পরিষেবা নেটওয়ার্কিংয়ের জন্য API এক প্রকার। From 2852c0608bb442cc02a1f25de3909a4eaa4b51f4 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Thu, 2 May 2024 18:00:35 +0800 Subject: [PATCH 0421/1086] [zh-cn] sync style-guide debug-cluster/_index Signed-off-by: xin.li --- content/zh-cn/docs/contribute/style/style-guide.md | 4 ++++ content/zh-cn/docs/tasks/debug/debug-cluster/_index.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/content/zh-cn/docs/contribute/style/style-guide.md b/content/zh-cn/docs/contribute/style/style-guide.md index 08f886eb73..0e9b1e515b 100644 --- a/content/zh-cn/docs/contribute/style/style-guide.md +++ b/content/zh-cn/docs/contribute/style/style-guide.md @@ -670,6 +670,8 @@ Kubernetes | Kubernetes should always be capitalized. Docker | Docker should always be capitalized. SIG Docs | SIG Docs rather than SIG-DOCS or other variations. On-premises | On-premises or On-prem rather than On-premise or other variations. +cloud native | Cloud native or cloud native as appropriate for sentence structure rather than cloud-native or Cloud Native. +open source | Open source or open source as appropriate for sentence structure rather than open-source or Open Source. {{< /table >}} --> ## Kubernetes.io 术语列表 {#kubernetes-io-word-list} @@ -683,6 +685,8 @@ Kubernetes | Kubernetes 的首字母要保持大写。 Docker | Docker 的首字母要保持大写。 SIG Docs | SIG Docs 是正确拼写形式,不要用 SIG-DOCS 或其他变体。 On-premises | On-premises 或 On-prem 而不是 On-premise 或其他变体。 +cloud native | Cloud native 或 cloud native 适合句子结构,而不是 cloud-native 或 Cloud Native。 +open source | Open source 或 open source 适合句子结构,而不是 open-source 或 Open Source。 {{< /table >}} + +একটি ইনিট কন্টেইনার আপনাকে ইনিশিয়ালাইজেশনের বিবরণ পৃথক করতে দেয় যা সার্বিকভাবে {{< glossary_tooltip text="ওয়ার্কলোড" term_id="workload" >}} এর জন্য গুরুত্বপূর্ণ, এবং যা অ্যাপ্লিকেশন কন্টেইনার চালু হওয়ার পরে চালানোর প্রয়োজন নেই। +যদি একটি পডে কোনো ইনিট কন্টেইনার কনফিগার করা না হয়, তবে সেই পডের সব কন্টেইনারই অ্যাপ কন্টেইনার হয়। From f8ac261b210b0475d82f996e7144dab1b2843ed1 Mon Sep 17 00:00:00 2001 From: Obidur Rahman <112419917+Ashfinn@users.noreply.github.com> Date: Thu, 2 May 2024 19:46:46 +0600 Subject: [PATCH 0425/1086] fixed the translation errors from review on annotation.md --- content/bn/docs/reference/glossary/annotation.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/content/bn/docs/reference/glossary/annotation.md b/content/bn/docs/reference/glossary/annotation.md index ccbf6a0578..b1e073e6bb 100644 --- a/content/bn/docs/reference/glossary/annotation.md +++ b/content/bn/docs/reference/glossary/annotation.md @@ -4,13 +4,14 @@ 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="labels" term_id="label" >}} দ্বারা অনুমোদিত নয় এমন ক্যারেক্টার থাকতে পারে। টুল এবং লাইব্রেরির মতো ক্লায়েন্ট এই মেটাডেটা পুনরায় নিতে পারে। +এনোটেশনের মেটাডেটা ছোট অথবা বড়, বিন্যাসিত বা অবিন্যাসিত হতে পারে, এবং এটিতে {{< glossary_tooltip text="লেবেল" term_id="label" >}} দ্বারা অনুমোদিত নয় এমন ক্যারেক্টার থাকতে পারে। টুল এবং লাইব্রেরির মতো ক্লায়েন্ট এই মেটাডেটা পুনরুদ্ধার করতে পারে। From a7f02b7bb234ebd6f5c6302faf50d656a6e6922d Mon Sep 17 00:00:00 2001 From: Obidur Rahman <112419917+Ashfinn@users.noreply.github.com> Date: Thu, 2 May 2024 19:54:51 +0600 Subject: [PATCH 0426/1086] fixed translation errors from review on workload.md --- content/bn/docs/reference/glossary/workload.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/bn/docs/reference/glossary/workload.md b/content/bn/docs/reference/glossary/workload.md index b02ac60db2..d174d92f88 100644 --- a/content/bn/docs/reference/glossary/workload.md +++ b/content/bn/docs/reference/glossary/workload.md @@ -2,7 +2,7 @@ title: ওয়ার্কলোড id: workload date: 2019-02-13 -full_link: /docs/concepts/workloads/ +full_link: /bn/docs/concepts/workloads/ short_description: > ওয়ার্কলোড হলো কুবারনেটিস-এ চলমান একটি অ্যাপ্লিকেশন। @@ -10,10 +10,10 @@ aka: tags: - fundamental --- - ওয়ার্কলোড(workload) হলো কুবারনেটিস-এ চলমান একটি অ্যাপ্লিকেশন। + ওয়ার্কলোড হলো কুবারনেটিস-এ চলমান একটি অ্যাপ্লিকেশন। -বিভিন্ন অবজেক্ট যা ওয়ার্কলোডের বিভিন্ন ধরণ বা অংশগুলির প্রতিনিধিত্ব করে তাদের মধ্যে ডেমনসেট(DaemonSet), ডিপ্লয়মেন্ট, জব, রেপ্লিকাসেট(ReplicaSet), এবং স্টেটফুলসেট অবজেক্ট(StatefulSet objects) অন্তর্ভুক্ত। +বিভিন্ন কোর অবজেক্ট যা ওয়ার্কলোডের বিভিন্ন ধরণ বা অংশগুলির প্রতিনিধিত্ব করে তাদের মধ্যে ডেমনসেট(DaemonSet), ডিপ্লয়মেন্ট, জব, রেপ্লিকাসেট(ReplicaSet), এবং স্টেটফুলসেট অবজেক্ট(StatefulSet objects) অন্তর্ভুক্ত। উদাহরণস্বরূপ, একটি ওয়ার্কলোড যেখানে একটি ওয়েব সার্ভার এবং একটি ডেটাবেস রয়েছে তারা ডেটাবেসটি একটি {{< glossary_tooltip term_id="StatefulSet" >}} এ এবং ওয়েব সার্ভারটি একটি {{< glossary_tooltip term_id="Deployment" >}} এ চালাতে পারে। From 7234daacca30fcf1e8d71d8dad23c70e6d1ec302 Mon Sep 17 00:00:00 2001 From: Obidur Rahman <112419917+Ashfinn@users.noreply.github.com> Date: Thu, 2 May 2024 20:02:04 +0600 Subject: [PATCH 0427/1086] fixed errors from review on node.md --- content/bn/docs/reference/glossary/node.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/reference/glossary/node.md b/content/bn/docs/reference/glossary/node.md index af2eb5c896..6d7b9f87d1 100644 --- a/content/bn/docs/reference/glossary/node.md +++ b/content/bn/docs/reference/glossary/node.md @@ -11,8 +11,9 @@ tags: - fundamental --- নোড হলো কুবারনেটিসে একটি ওয়ার্কার মেশিন। + -একটি ওয়ার্কার নোড একটি ভার্চুয়াল মেশিন বা ফিজিক্যাল মেশিন হতে পারে, একটি ক্লাস্টারের উপর নির্ভর করে । এটির {{< glossary_tooltip text="Pods" 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" >}} +একটি ওয়ার্কার নোড একটি ভার্চুয়াল মেশিন বা ফিজিক্যাল মেশিন হতে পারে, একটি ক্লাস্টারের উপর নির্ভর করে । এটির {{< 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) হিসেবে পরিচিত ছিল। +প্রাথমিক কুবারনেটিস সংস্করণে, নোডগুলি "Minions" হিসেবে পরিচিত ছিল। From a4a87ebe3206ed83989cd6982d8491fe452504f2 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Thu, 2 May 2024 20:32:03 +0600 Subject: [PATCH 0428/1086] Update control-plane.md --- .../docs/reference/glossary/control-plane.md | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/content/bn/docs/reference/glossary/control-plane.md b/content/bn/docs/reference/glossary/control-plane.md index 19799f77d1..8d6d0cc85e 100644 --- a/content/bn/docs/reference/glossary/control-plane.md +++ b/content/bn/docs/reference/glossary/control-plane.md @@ -1,24 +1,25 @@ --- title: কন্ট্রোল প্লেন id: control-plane -date: ২০১৯/০৫/১২ +date: 2019-05-12 full_link: short_description: > - কন্টেইনার অর্কেস্ট্রেশন স্তর যেটা, কন্টেইনারের জীবনচক্রটি সংজ্ঞায়িত, স্থাপন এবং পরিচালনা করতে এপিআই(API) এবং ইন্টারফেসগুলি প্রকাশ করে। + কন্টেইনার অর্কেস্ট্রেশন লেয়ার যা কন্টেইনারের জীবনচক্র সংজ্ঞায়িত, ডেপ্লয় এবং পরিচালনা করতে API এবং ইন্টারফেসগুলিকে প্রকাশ করে। + aka: tags: - fundamental --- -কন্টেইনার অর্কেস্ট্রেশন স্তর যেটা, কন্টেইনারের জীবনচক্রটি সংজ্ঞায়িত, স্থাপন এবং পরিচালনা করতে এপিআই(API) এবং ইন্টারফেসগুলি প্রকাশ করে। +কন্টেইনার অর্কেস্ট্রেশন লেয়ার যা কন্টেইনারের জীবনচক্র সংজ্ঞায়িত, ডেপ্লয় এবং পরিচালনা করতে API এবং ইন্টারফেসগুলিকে প্রকাশ করে। -এই স্তরটি অনেকগুলি ভিন্ন উপাদান দ্বারা রচিত, যেমন (তবে সীমাবদ্ধ নয়): + এই লেয়ারটি বিভিন্ন উপাদান দ্বারা গঠিত, যেমন (কিন্তু এতে সীমাবদ্ধ নয়): -* {{< glossary_tooltip text="etcd" term_id="etcd" >}} -* {{< glossary_tooltip text="API Server" term_id="kube-apiserver" >}} -* {{< glossary_tooltip text="Scheduler" term_id="kube-scheduler" >}} -* {{< glossary_tooltip text="Controller Manager" term_id="kube-controller-manager" >}} -* {{< glossary_tooltip text="Cloud Controller Manager" term_id="cloud-controller-manager" >}} + * {{< 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) বা কন্টেইনার্স(containers) হিসাবে চালানো যেতে পারে। এই উপাদানগুলি চালানো হোস্টগুলিকে ঐতিহাসিকভাবে {{< glossary_tooltip text="masters" term_id="master" >}} বলা হত। + এই উপাদানগুলি ট্রাডিশনাল অপারেটিং সিস্টেম সার্ভিস (daemons) বা কন্টেইনার হিসাবে চালানো যেতে পারে। এই উপাদানগুলি চালানো হোস্টগুলিকে ঐতিহাসিকভাবে {{< glossary_tooltip text="masters" term_id="master" >}} বলা হত। From 015822369e0b233dad5720d391d1971a158b551e Mon Sep 17 00:00:00 2001 From: Obidur Rahman <112419917+Ashfinn@users.noreply.github.com> Date: Thu, 2 May 2024 20:32:25 +0600 Subject: [PATCH 0429/1086] Create service-account.md --- .../reference/glossary/service-account.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/docs/reference/glossary/service-account.md 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 0000000000..e65b6b52aa --- /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" >}} এ ডিফল্ট সার্ভিস অ্যাকাউন্টটি নির্ধারন করে দেওয়া হয়। From 4d32a93a63d2d549ad02ea11bae5889272306d9f Mon Sep 17 00:00:00 2001 From: Obidur Rahman <112419917+Ashfinn@users.noreply.github.com> Date: Thu, 2 May 2024 21:22:54 +0600 Subject: [PATCH 0430/1086] pod spelling fix on service-account.md --- content/bn/docs/reference/glossary/service-account.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/bn/docs/reference/glossary/service-account.md b/content/bn/docs/reference/glossary/service-account.md index e65b6b52aa..b85c8d2b9b 100644 --- a/content/bn/docs/reference/glossary/service-account.md +++ b/content/bn/docs/reference/glossary/service-account.md @@ -4,7 +4,7 @@ id: service-account date: 2018-04-12 full_link: /docs/tasks/configure-pod-container/configure-service-account/ short_description: > - পডগুলিতে চলমান কার্যক্রমের জন্য একটি পরিচিতি সরবরাহ করে। + পডে চলমান কার্যক্রমের জন্য একটি পরিচিতি সরবরাহ করে। aka: tags: @@ -12,8 +12,8 @@ tags: - core-object --- -{{< glossary_tooltip text="পডগুলিতে" term_id="pod" >}} চলমান কার্যক্রমের জন্য একটি পরিচিতি সরবরাহ করে। +{{< glossary_tooltip text="পডে" term_id="pod" >}} চলমান কার্যক্রমের জন্য একটি পরিচিতি সরবরাহ করে। -যখন পডগুলির ভেতরের প্রক্রিয়াগুলি ক্লাস্টার অ্যাক্সেস করে, তাদেরকে প্রাসঙ্গিক সার্ভিস অ্যাকাউন্ট হিসেবে API সার্ভার দ্বারা অথেনটিকেট(authenticate) করা হয়, উদাহরণস্বরূপ, `default`। যদি আপনি সার্ভিস অ্যাকাউন্ট নির্দিষ্ট না করে একটি পড তৈরি করেন, তাহলে স্বয়ংক্রিয়ভাবে একই {{< glossary_tooltip text="নেমস্পেস" term_id="namespace" >}} এ ডিফল্ট সার্ভিস অ্যাকাউন্টটি নির্ধারন করে দেওয়া হয়। +যখন পডে ভেতরের প্রক্রিয়াগুলি ক্লাস্টার অ্যাক্সেস করে, তাদেরকে প্রাসঙ্গিক সার্ভিস অ্যাকাউন্ট হিসেবে API সার্ভার দ্বারা অথেনটিকেট(authenticate) করা হয়, উদাহরণস্বরূপ, `default`। যদি আপনি সার্ভিস অ্যাকাউন্ট নির্দিষ্ট না করে একটি পড তৈরি করেন, তাহলে স্বয়ংক্রিয়ভাবে একই {{< glossary_tooltip text="নেমস্পেস" term_id="namespace" >}} এ ডিফল্ট সার্ভিস অ্যাকাউন্টটি নির্ধারন করে দেওয়া হয়। From c4497ea2307d8573f4c669094e7f9c25ee901434 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Thu, 2 May 2024 22:23:50 +0600 Subject: [PATCH 0431/1086] Update configmap.md --- content/bn/docs/reference/glossary/configmap.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/content/bn/docs/reference/glossary/configmap.md b/content/bn/docs/reference/glossary/configmap.md index 997deb4c09..e518904ab0 100644 --- a/content/bn/docs/reference/glossary/configmap.md +++ b/content/bn/docs/reference/glossary/configmap.md @@ -1,16 +1,18 @@ --- title: কনফিগম্যাপ (ConfigMap) id: configmap -date: ২০১৮/০৪/১২ -full_link: /docs/concepts/configuration/configmap/ +date: 2018-04-12 +full_link: /bn/docs/concepts/configuration/configmap/ short_description: > - একটি API অবজেক্ট কী-মান (key-value) জোড়ায় অ-গোপনীয় ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। এটি এনভায়রনমেন্ট ভেরিয়েবলস , কমান্ড-লাইন আর্গুমেন্টস বা একটি ভলিউমে কনফিগারেশন ফাইলস হিসাবে ব্যবহার করা যেতে পারে। + একটি API অবজেক্ট কী-ভ্যালু (key-value) জোড়ায় অ-গোপনীয় ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। এটি এনভায়রনমেন্ট ভেরিয়েবল , কমান্ড-লাইন আর্গুমেন্ট বা একটি ভলিউমে কনফিগারেশন ফাইল হিসাবে ব্যবহার করা যেতে পারে। + aka: tags: - core-object --- -একটি API অবজেক্ট কী-মান (key-value) জোড়ায় অ-গোপনীয় ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। {{< glossary_tooltip text="Pods" term_id="pod" >}} কনফিগম্যাপকে এনভায়রনমেন্ট ভেরিয়েবল, কমান্ড-লাইন আর্গুমেন্টস বা {{< glossary_tooltip text="volume" term_id="volume" >}} -তে কনফিগারেশন ফাইলস হিসেবে ব্যবহার করতে পারে। + একটি API অবজেক্ট কী-ভ্যালু (key-value) জোড়ায় অ-গোপনীয় ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। {{< glossary_tooltip text="পডগুলো" term_id="pod" >}} কনফিগম্যাপকে এনভায়রনমেন্ট ভেরিয়েবল, +কমান্ড-লাইন আর্গুমেন্ট বা {{< glossary_tooltip text="ভলিউমে" term_id="volume" >}} কনফিগারেশন ফাইল হিসেবে ব্যবহার করতে পারে। -একটি কনফিগম্যাপ (ConfigMap) আপনাকে আপনার {{< glossary_tooltip text="container images" term_id="image" >}} থেকে এনভায়রনমেন্ট-নির্দিষ্ট কনফিগারেশন ডিকপল (decouple) করার অনুমতি দেয়, যাতে আপনার অ্যাপ্লিকেশনগুলি সহজেই বহনযোগ্য (portable) হয়৷ +একটি কনফিগম্যাপ (ConfigMap) আপনাকে আপনার {{< glossary_tooltip text="কন্টেইনার ইমেজ" term_id="image" >}} থেকে এনভায়রনমেন্ট-নির্দিষ্ট কনফিগারেশন দ্বিগুণ করার অনুমতি দেয়, যাতে আপনার অ্যাপ্লিকেশনগুলি সহজেই পোর্টেবল হয়৷ From 0bea29e7b02af3bf746f41ad71cca57e35f83c0a Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Thu, 2 May 2024 22:38:34 +0600 Subject: [PATCH 0432/1086] Update secret.md --- content/bn/docs/reference/glossary/secret.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/content/bn/docs/reference/glossary/secret.md b/content/bn/docs/reference/glossary/secret.md index 7becd3c964..f3a94ee75b 100644 --- a/content/bn/docs/reference/glossary/secret.md +++ b/content/bn/docs/reference/glossary/secret.md @@ -1,20 +1,27 @@ --- title: সিক্রেট id: secret -date: ২০১৮/০৪/১২ -full_link: /docs/concepts/configuration/secret/ +date: 2018-04-12 +full_link: /bn/docs/concepts/configuration/secret/ short_description: > সংবেদনশীল তথ্য, যেমন পাসওয়ার্ড, OAuth টোকেন এবং ssh কী(keys) গুলো সংরক্ষণ করে। aka: tags: -- কোর-অবজেক্ট (core-object) -- নিরাপত্তা (security) +- core-object +- security --- সংবেদনশীল তথ্য, যেমন পাসওয়ার্ড, OAuth টোকেন এবং ssh কী(keys) গুলো সংরক্ষণ করে। -সিক্রেট গুলো আপনাকে কীভাবে সংবেদনশীল তথ্য ব্যবহার করা হয় তার উপর আরও নিয়ন্ত্রণ দেয় এবং দুর্ঘটনাজনিত এক্সপোজারের ঝুঁকি হ্রাস করে। গোপন মানগুলি base64 স্ট্রিং হিসাবে এনকোড করা হয় এবং ডিফল্টরূপে এনক্রিপ্ট না করে সংরক্ষণ করা হয় তবে [বাকি সময়ে এনক্রিপ্ট](/docs/tasks/administer-cluster/encrypt-data/#ensure-all-secrets-are-encrypted) করার জন্য কনফিগার করা যেতে পারে। +সিক্রেট গুলো আপনাকে কীভাবে সংবেদনশীল তথ্য ব্যবহার করা হয় তার উপর আরও নিয়ন্ত্রণ দেয় +এবং দুর্ঘটনাজনিত এক্সপোজারের ঝুঁকি হ্রাস করে। সিক্রেট ভ্যালুগুলি base64 স্ট্রিং হিসাবে এনকোড +করা হয় এবং ডিফল্টরূপে এনক্রিপ্ট না করে সংরক্ষণ করা হয় তবে +[বাকি সময়ে এনক্রিপ্ট](/bn/docs/tasks/administer-cluster/encrypt-data/#ensure-all-secrets-are-encrypted) করার জন্য কনফিগার করা যেতে পারে। -একটি {{< glossary_tooltip text="Pod" term_id="pod" >}} বিভিন্ন উপায়ে সিক্রেটকে উল্লেখ করতে পারে, যেমন একটি ভলিউম মাউন্ট বা পরিবেশ পরিবর্তনশীল হিসাবে। সিক্রেটগুলি গোপনীয় ডেটার জন্য ডিজাইন করা হয়েছে এবং [কনফিগম্যাপগুলি](/docs/tasks/configure-pod-container/configure-pod-configmap/) অ-গোপনীয় ডেটার জন্য ডিজাইন করা হয়েছে৷ +একটি {{< glossary_tooltip text="পড" term_id="pod" >}} বিভিন্ন উপায়ে সিক্রেটকে উল্লেখ করতে পারে, +যেমন একটি ভলিউম মাউন্ট বা এনভায়রনমেন্ট ভেরিয়েবল হিসাবে। +সিক্রেটগুলি গোপনীয় ডেটার জন্য ডিজাইন করা হয়েছে এবং +[কনফিগম্যাপগুলি](/bn/docs/tasks/configure-pod-container/configure-pod-configmap/) +অ-গোপনীয় ডেটার জন্য ডিজাইন করা হয়েছে ৷ From 182502e5e454946f06a9ea0de6ec03dc3bede03d Mon Sep 17 00:00:00 2001 From: Redwan Hossain Romit Date: Thu, 2 May 2024 23:10:45 +0600 Subject: [PATCH 0433/1086] [bn] Update kube-apiserver.md --- .../docs/reference/glossary/kube-apiserver.md | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/content/bn/docs/reference/glossary/kube-apiserver.md b/content/bn/docs/reference/glossary/kube-apiserver.md index ac2034aae5..f97fef074d 100644 --- a/content/bn/docs/reference/glossary/kube-apiserver.md +++ b/content/bn/docs/reference/glossary/kube-apiserver.md @@ -1,22 +1,23 @@ --- -title: এপিএই সার্ভার +title: API সার্ভার id: kube-apiserver -date: ২০১৮-০৪-১২ -full_link: /docs/concepts/overview/components/#kube-apiserver +date: 2018-04-12 +full_link: /bn/docs/concepts/overview/components/#kube-apiserver short_description: > - কন্ট্রোল প্লেন উপাদান যা কুবারনেটেস API পরিবেশন করে। + কন্ট্রোল প্লেন উপাদান যা কুবারনেটিস API পরিবেশন করে। aka: - kube-apiserver tags: -- আর্কিটেকচার -- মৌলিক +- architecture +- fundamental --- - কুবারনেটেস {{< glossary_tooltip text="কন্ট্রোল প্লেন" term_id="control-plane" >}} এর একটি উপাদান হলো API সার্ভার যা কুবারনেটেস API প্রকাশ করে। -API সার্ভার কুবারনেটেস কন্ট্রোল প্লেনের ফ্রন্ট এন্ড হিসেবে কাজ করে। + API সার্ভার হলো কুবারনেটিস {{< glossary_tooltip text="কন্ট্রোল প্লেন" term_id="control-plane" >}} +এর একটি উপাদান যা কুবারনেটিস API কে প্রকাশ করে ৷ +API সার্ভার কুবারনেটিস কন্ট্রোল প্লেনের ফ্রন্ট এন্ড হিসেবে কাজ করে। - + -কুবারনেটেস API সার্ভারের প্রধান বাস্তবায়ন হলো [kube-apiserver](/docs/reference/generated/kube-apiserver/)। -kube-apiserver হরিজন্টালি স্কেল করার জন্য নকশা করা হয়েছে—অর্থাৎ, এটি আরও বেশি উদাহরণ ডেপ্লয় করে স্কেল করে। +কুবারনেটিস API সার্ভারের প্রধান বাস্তবায়ন হলো [kube-apiserver](/bn/docs/reference/generated/kube-apiserver/)। +kube-apiserver অনুভূমিকভাবে স্কেল করার জন্য ডিজাইন করা হয়েছে—অর্থাৎ, এটি আরও বেশি উদাহরণ ডেপ্লয় করে স্কেল করে। আপনি একাধিক kube-apiserver উদাহরণ চালাতে পারেন এবং সেই উদাহরণগুলির মধ্যে ট্রাফিক ব্যালেন্স করতে পারেন। From 258f1903f09163f784f02070b740a279c03c11da Mon Sep 17 00:00:00 2001 From: Redwan Hossain Romit Date: Thu, 2 May 2024 23:28:51 +0600 Subject: [PATCH 0434/1086] [bn] Update mirror-pod.md --- .../bn/docs/reference/glossary/mirror-pod.md | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/content/bn/docs/reference/glossary/mirror-pod.md b/content/bn/docs/reference/glossary/mirror-pod.md index 9217e5f3ad..56ba89ba38 100644 --- a/content/bn/docs/reference/glossary/mirror-pod.md +++ b/content/bn/docs/reference/glossary/mirror-pod.md @@ -1,19 +1,22 @@ --- -title: মিরর পদ +title: মিরর-পড id: mirror-pod -date: ২০১৯-০৮-০৬ +date: 2019-08-06 short_description: > - একটি অবজেক্ট এর এপিআই সার্ভার যা অনুসরণ করে একটি kubelet এর উপর একটি স্ট্যাটিক পদ । + API সার্ভারের একটি অবজেক্ট যা একটি kubelet এ একটি স্ট্যাটিক পড ট্র্যাক করে। + aka: tags: -- মৌলিক +- fundamental --- -একটি {{< glossary_tooltip text="pod" term_id="pod" >}} object that a {{< glossary_tooltip text="kubelet" term_id="kubelet" >}} -প্রতিনিধিত্ব করতে ব্যবহার করে {{< glossary_tooltip text="static pod" term_id="static-pod" >}} +একটি {{< glossary_tooltip text="পড" term_id="pod" >}} অবজেক্ট যা একটি {{< glossary_tooltip text="kubelet" term_id="kubelet" >}} +ব্যবহার করে {{< glossary_tooltip text="স্ট্যাটিক পড" term_id="static-pod" >}} উপস্থাপন করতে । -যখন kubelet এর কনফিগারেশনে একটি স্ট্যাটিক পদ পায়, তখন স্বয়ংক্রিয়ভাবে এটি -একটি পদ অবজেক্ট তৈরি করার জন্য কোনো প্রয়াস করে । এটা মানে করে যে পড়টি -API সার্ভারে দেখা যাবে, কিন্তু এটি সেখান থেকে নিয়ন্ত্রণ করা যাবে না। + -(যেমন, একটি মিরর পদ সরানোর মাধ্যমে kubelet daemon চালু করা থেকে বাধা পাওয়া যাবে না)। +যখন kubelet তার কনফিগারেশনে একটি স্ট্যাটিক পড খুঁজে পায়, তখন এটি স্বয়ংক্রিয়ভাবে +এটির জন্য কুবারনেটিস API সার্ভারে একটি পড অবজেক্ট তৈরি করার চেষ্টা করে। +এর মানে হল যে পডটি API সার্ভারে দৃশ্যমান হবে, কিন্তু সেখান থেকে কন্ট্রোল করা যাবে না। + +(উদাহরণস্বরূপ, একটি মিরর পড অপসারণ করা kubelet ডেমন(daemon) এটি চালানো বন্ধ করবে না)। From 4f75f81be1754b6b99de3a5eec9903507862ca99 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Thu, 2 May 2024 23:33:54 +0600 Subject: [PATCH 0435/1086] Create daemonset.md --- .../bn/docs/reference/glossary/daemonset.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/docs/reference/glossary/daemonset.md diff --git a/content/bn/docs/reference/glossary/daemonset.md b/content/bn/docs/reference/glossary/daemonset.md new file mode 100644 index 0000000000..592b08d3d9 --- /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" >}}-এ চলতে হবে। From bb6ccfea6edfbe21719b3ae52ab1e77f6aecbb69 Mon Sep 17 00:00:00 2001 From: Redwan Hossain Romit Date: Thu, 2 May 2024 23:36:30 +0600 Subject: [PATCH 0436/1086] Update kube-apiserver.md --- content/bn/docs/reference/glossary/kube-apiserver.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/reference/glossary/kube-apiserver.md b/content/bn/docs/reference/glossary/kube-apiserver.md index f97fef074d..5d0a74c8df 100644 --- a/content/bn/docs/reference/glossary/kube-apiserver.md +++ b/content/bn/docs/reference/glossary/kube-apiserver.md @@ -18,6 +18,6 @@ API সার্ভার কুবারনেটিস কন্ট্রো -কুবারনেটিস API সার্ভারের প্রধান বাস্তবায়ন হলো [kube-apiserver](/bn/docs/reference/generated/kube-apiserver/)। +কুবারনেটিস API সার্ভারের প্রধান বাস্তবায়ন হলো [kube-apiserver](/docs/reference/generated/kube-apiserver/)। kube-apiserver অনুভূমিকভাবে স্কেল করার জন্য ডিজাইন করা হয়েছে—অর্থাৎ, এটি আরও বেশি উদাহরণ ডেপ্লয় করে স্কেল করে। আপনি একাধিক kube-apiserver উদাহরণ চালাতে পারেন এবং সেই উদাহরণগুলির মধ্যে ট্রাফিক ব্যালেন্স করতে পারেন। From 1f42b0b0e24ffedfdc8f72df740e5ffbd489eae7 Mon Sep 17 00:00:00 2001 From: Obidur Rahman <112419917+Ashfinn@users.noreply.github.com> Date: Fri, 3 May 2024 00:14:57 +0600 Subject: [PATCH 0437/1086] Update workload.md --- content/bn/docs/reference/glossary/workload.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/reference/glossary/workload.md b/content/bn/docs/reference/glossary/workload.md index d174d92f88..7dd37c9a33 100644 --- a/content/bn/docs/reference/glossary/workload.md +++ b/content/bn/docs/reference/glossary/workload.md @@ -14,6 +14,9 @@ tags: -বিভিন্ন কোর অবজেক্ট যা ওয়ার্কলোডের বিভিন্ন ধরণ বা অংশগুলির প্রতিনিধিত্ব করে তাদের মধ্যে ডেমনসেট(DaemonSet), ডিপ্লয়মেন্ট, জব, রেপ্লিকাসেট(ReplicaSet), এবং স্টেটফুলসেট অবজেক্ট(StatefulSet objects) অন্তর্ভুক্ত। +বিভিন্ন কোর অবজেক্ট যা ওয়ার্কলোডের বিভিন্ন ধরণ বা অংশগুলির প্রতিনিধিত্ব করে তাদের মধ্যে ডেমনসেট(DaemonSet), +ডিপ্লয়মেন্ট, জব, রেপ্লিকাসেট(ReplicaSet), এবং স্টেটফুলসেট অবজেক্ট(StatefulSet objects) অন্তর্ভুক্ত। -উদাহরণস্বরূপ, একটি ওয়ার্কলোড যেখানে একটি ওয়েব সার্ভার এবং একটি ডেটাবেস রয়েছে তারা ডেটাবেসটি একটি {{< glossary_tooltip term_id="StatefulSet" >}} এ এবং ওয়েব সার্ভারটি একটি {{< glossary_tooltip term_id="Deployment" >}} এ চালাতে পারে। +উদাহরণস্বরূপ, একটি ওয়ার্কলোড যেখানে একটি ওয়েব সার্ভার এবং একটি ডেটাবেস রয়েছে +তারা ডেটাবেসটি একটি {{< glossary_tooltip term_id="StatefulSet" >}} এ +এবং ওয়েব সার্ভারটি একটি {{< glossary_tooltip term_id="Deployment" >}} এ চালাতে পারে। From 12b588543e59efaaba17aa380a121413c172561b Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Thu, 2 May 2024 22:16:48 +0100 Subject: [PATCH 0438/1086] Update content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md Co-authored-by: Natali Vlatko --- .../blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md index 38c275f7d9..a4919b8ba0 100644 --- a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md +++ b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md @@ -1,6 +1,6 @@ --- layout: blog -title: "From Code to Quill: Embark on a Legendary Kubernetes Quest with SIG-Docs" +title: "From Code to Quill: Embark on a Legendary Kubernetes Quest with SIG Docs" date: 2024-04-28 slug: contribute-as-sig-docs-reviewer author: > From 1d1474a316b5a86236172ef828fef1588d45195d Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Thu, 2 May 2024 22:17:27 +0100 Subject: [PATCH 0439/1086] Update content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md Co-authored-by: Natali Vlatko --- .../blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md index a4919b8ba0..b6df955e94 100644 --- a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md +++ b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md @@ -38,7 +38,7 @@ making you the unsung hero of their open-source odyssey. ## Why Become a SIG Docs Reviewer? -The Kubernetes project depends substantially on the SIG Docs team to ensure that documentation +The Kubernetes project depends substantially on SIG Docs to ensure that documentation is accurate, up to date, and easily accessible. By becoming a reviewer, you can help users and contributors navigate and understand Kubernetes more effectively. In addition, reviewing documentation provides unique opportunities for: From 5344f68bde66ed5a1a8ac2889fd7e98bcb4b6afd Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Thu, 2 May 2024 22:17:47 +0100 Subject: [PATCH 0440/1086] Update content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md Co-authored-by: Natali Vlatko --- .../blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md index b6df955e94..f61da353c2 100644 --- a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md +++ b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md @@ -41,7 +41,7 @@ making you the unsung hero of their open-source odyssey. The Kubernetes project depends substantially on SIG Docs to ensure that documentation is accurate, up to date, and easily accessible. By becoming a reviewer, you can help users and contributors navigate and understand Kubernetes more effectively. In addition, reviewing -documentation provides unique opportunities for: +documentation provides unique opportunities to: - **Expand your Kubernetes knowledge**: Engage deeply with new features and functionalities by reviewing their documentation. From 13b82ab849270559ed59820ef8ebb12bef157ecf Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Thu, 2 May 2024 22:18:01 +0100 Subject: [PATCH 0441/1086] Update content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md Co-authored-by: Natali Vlatko --- .../blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md index f61da353c2..94e0ee541c 100644 --- a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md +++ b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md @@ -98,7 +98,7 @@ Kubernetes documentation contribution process. Here are the steps to get you sta After consistently contributing to documentation reviews and demonstrating your understanding of Kubernetes documentation standards, you can express your interest in becoming an official -SIG Docs reviewer. Engage with the SIG Docs chairs or leads on Slack or during SIG Docs +SIG Docs reviewer. As you build up this skill set, reviews are still welcome! You don't need to be a formal reviewer in the SIG to leave reviews on PRs or blog posts. Engage with the SIG Docs chairs or leads on Slack or during SIG Docs meetings to discuss the next steps. ## See YOU in the Docs! From 6c18f3e285c9148b34a6476a90f8faeed77763e4 Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Thu, 2 May 2024 22:20:26 +0100 Subject: [PATCH 0442/1086] Update content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md Co-authored-by: Gulcan Topcu <96833570+colossus06@users.noreply.github.com> --- .../blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md index 94e0ee541c..f7193f46a2 100644 --- a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md +++ b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md @@ -82,7 +82,7 @@ Kubernetes documentation contribution process. Here are the steps to get you sta `good first issue` or `help wanted`. These are great for beginners. Leave constructive feedback and suggestions. Familiarize yourself with the [content guide](/docs/contribute/style/content-guide/) and the - [style guide](/docs/contribute/style/style-guide/) to provide more effectively + [style guide](/docs/contribute/style/style-guide/) to provide more effective [reviewing Pull Requests](/docs/contribute/review/reviewing-prs/). 1. **Attend SIG Docs Meetings**: Participate in the From 09aa7d541a624f2a415546871a834269128ad336 Mon Sep 17 00:00:00 2001 From: Arhell Date: Fri, 3 May 2024 00:31:32 +0300 Subject: [PATCH 0443/1086] [hi] Ready training section for vanilla Docsy --- content/hi/training/_index.html | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/content/hi/training/_index.html b/content/hi/training/_index.html index 2d0416d3df..0f8fa0f513 100644 --- a/content/hi/training/_index.html +++ b/content/hi/training/_index.html @@ -5,6 +5,10 @@ abstract: प्रशिक्षण कार्यक्रम, प्रम layout: basic cid: training class: training +body_class: training +menu: + main: + weight: 30 ---
    @@ -121,7 +125,7 @@ class: training
    प्रमाणित कुबेरनेट्स प्रशासक (CKA)
    - +

    प्रमाणित कुबेरनेट्स प्रशासक (CKA) कार्यक्रम आश्वासन प्रदान करता है कि CKA के पास कुबेरनेट्स प्रशासकों की जिम्मेदारियों को निभाने के लिए कौशल, ज्ञान और योग्यता है।

    CKA प्रमाणित व्यक्ति ने बुनियादी स्थापना के साथ-साथ उत्पादन-ग्रेड कुबेरनेट्स क्लस्टर को कॉन्फ़िगर और प्रबंधित करने की क्षमता का प्रदर्शन करते हैं।


    @@ -131,7 +135,7 @@ class: training
    प्रमाणित कुबेरनेट्स सुरक्षा विशेषज्ञ (CKS)
    - +

    प्रमाणित कुबेरनेट्स सुरक्षा विशेषज्ञ (CKS) कार्यक्रम आश्वासन प्रदान करता है कि धारक सर्वोत्तम प्रथाओं की एक विस्तृत श्रृंखला के साथ सहज और सक्षम है। CKS प्रमाणन निर्माण, तैनाती और रनटाइम के दौरान कंटेनर-आधारित अनुप्रयोगों और कुबेरनेट्स प्लेटफार्मों को सुरक्षित करने के कौशल को शामिल करता है।

    CKS के लिए उम्मीदवारों के पास वर्तमान प्रमाणित कुबेरनेट्स प्रशासक (CKA) प्रमाणन होना चाहिए ताकि यह प्रदर्शित हो सके कि CKS में बैठने से पहले उनके पास पर्याप्त कुबेरनेट्स विशेषज्ञता है।


    From a47bc8bb97a65a4ac4611f8ff463769769ec4b74 Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Thu, 2 May 2024 22:41:23 +0100 Subject: [PATCH 0444/1086] Update content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md Co-authored-by: Natali Vlatko --- .../blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md index f7193f46a2..e65c32f18d 100644 --- a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md +++ b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md @@ -14,7 +14,7 @@ What is the truth behind this tale as old as time (or at least as old as Kuberne Imagine Sarah: an enthusiast of open-source whose keyboard had seen more action crafting technical masterpieces for her projects than a knight's sword in battle. Sarah's had such a smooth relationship with Git, that she could `git commit` and `git push` in her sleep, -and her etiquette in pull-requests was so polished, it could make a silver spoon look tarnished. +and her etiquette in pull requests was so polished, it could make a silver spoon look tarnished. But here's the twist: when it came to the mysterious _art-of-coding_, Sarah felt more like a fish out of water — or more accurately, like trying to navigate a Kubernetes cluster From 3ac23f3f50a271fcdcb6932c9d13043be9447857 Mon Sep 17 00:00:00 2001 From: oddy <56793934+EigoOda@users.noreply.github.com> Date: Fri, 3 May 2024 07:08:49 +0900 Subject: [PATCH 0445/1086] [ja] Translate content/en/docs/reference/glossary/container-env-variables.md into Japanese (#45997) * Translate content/en/docs/reference/glossary/container-env-variables.md into Japanese * Fix pod to Pod * Update content/ja/docs/reference/glossary/container-env-variables.md Co-authored-by: Junya Okabe <86868255+Okabe-Junya@users.noreply.github.com> * Correct mistranslation * Fix for textlint-ja --------- Co-authored-by: Junya Okabe <86868255+Okabe-Junya@users.noreply.github.com> --- .../glossary/container-env-variables.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/ja/docs/reference/glossary/container-env-variables.md diff --git a/content/ja/docs/reference/glossary/container-env-variables.md b/content/ja/docs/reference/glossary/container-env-variables.md new file mode 100644 index 0000000000..3f2ead26a6 --- /dev/null +++ b/content/ja/docs/reference/glossary/container-env-variables.md @@ -0,0 +1,17 @@ +--- +title: コンテナ環境変数 +id: container-env-variables +date: 2018-04-12 +full_link: /ja/docs/concepts/containers/container-environment/ +short_description: > + コンテナ環境変数は、Pod内で実行されているコンテナに関する有用な情報を提供する`name=value`のペアです。 + +aka: +tags: +- fundamental +--- + コンテナ環境変数は、{{< glossary_tooltip text="Pod" term_id="pod" >}}内で実行されているコンテナに関する有用な情報を提供する`name=value`のペアです。 + + + +コンテナ環境変数は、{{< glossary_tooltip text="コンテナ" term_id="container" >}}にとって重要なリソースに関する情報とともに、実行中のコンテナ化されたアプリケーションが必要とする情報を提供します。たとえば、ファイルシステムの詳細、コンテナ自体の情報、あるいはサービスエンドポイントのような他のクラスターリソースです。 From c4f1b6ce7bb605d68f91cfcd4e6b04f9c8e41dd0 Mon Sep 17 00:00:00 2001 From: Dipesh Rawat Date: Fri, 3 May 2024 00:36:05 +0100 Subject: [PATCH 0446/1086] Remove feature-state css reference --- layouts/partials/css.html | 2 -- 1 file changed, 2 deletions(-) diff --git a/layouts/partials/css.html b/layouts/partials/css.html index 1644f8cfef..9522306c03 100644 --- a/layouts/partials/css.html +++ b/layouts/partials/css.html @@ -45,8 +45,6 @@ {{ end }} {{- end }} - - {{- if or (eq .Params.class "gridPage") (eq .Params.class "gridPage gridPageHome") }} {{- end }} From eb2ff88167dd7664460d67c8c0c08285927b89b6 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 29 Apr 2024 07:58:27 +0800 Subject: [PATCH 0447/1086] [zh] Add kubectl/introduction.md --- .../docs/reference/kubectl/introduction.md | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 content/zh-cn/docs/reference/kubectl/introduction.md diff --git a/content/zh-cn/docs/reference/kubectl/introduction.md b/content/zh-cn/docs/reference/kubectl/introduction.md new file mode 100644 index 0000000000..59e254a409 --- /dev/null +++ b/content/zh-cn/docs/reference/kubectl/introduction.md @@ -0,0 +1,146 @@ +--- +title: "kubectl 介绍" +content_type: concept +weight: 1 +--- + + + +kubectl 是 Kubernetes CLI 版本的瑞士军刀,可以胜任多种多样的任务。 + +本文主要介绍如何使用 kubectl 在 Kubernetes 中声明式管理应用,本文还涵盖了一些其他的 kubectl 功能。 + + +## 命令分类 {#command-families} + +大多数 kubectl 命令通常可以分为以下几类: + + +| 类型 | 用途 | 描述 | +|-----|------|------| +| 声明式资源管理 | 部署和运维(如 GitOps)| 使用资源管理声明式管理 Kubernetes 工作负载 | +| 命令式资源管理 | 仅限开发环境 | 使用命令行参数和标志来管理 Kubernetes 工作负载 | +| 打印工作负载状态 | 调试 | 打印有关工作负载的信息 | +| 与容器交互 | 调试 | 执行、挂接、复制、日志 | +| 集群管理 | 集群运维 | 排空和封锁节点 | + + +## 声明式应用管理 {#declarative-application-management} + +管理资源的首选方法是配合 kubectl **Apply** 命令一起使用名为资源的声明式文件。 +此命令读取本地(或远程)文件结构,并修改集群状态以反映声明的意图。 + +{{< alert color="success" title="Apply" >}} + +Apply 是在 Kubernetes 集群中管理资源的首选机制。 +{{< /alert >}} + + +## 打印工作负载状态 {#printing-state-about-workloads} + +用户需要查看工作负载状态。 + +- 打印关于资源的摘要状态和信息 +- 打印关于资源的完整状态和信息 +- 打印资源的特定字段 +- 查询与标签匹配的资源 + + +## 调试工作负载 {#debugging-workloads} + +kubectl 支持通过提供以下命令进行调试: + +- 打印 Container 日志 +- 打印集群事件 +- 执行或挂接到 Container +- 将集群中 Container 中的文件复制到用户的文件系统 + + +## 集群管理 {#cluster-management} + +有时用户可能需要对集群的节点执行操作。 +kubectl 支持使用命令将工作负载从节点中排空,以便节点可以被停用或调试。 + + +## Porcelain + +用户可能会发现使用资源管理进行 **开发** 过于繁琐, +他们更喜欢使用类似于 Shell 的工作流以 **命令式** 与集群交互。 +kubectl 提供了用于生成和修改资源的 Porcelain 命令。 + +- 生成和创建 Deployment、StatefulSet、Service、ConfigMap 等这类资源 +- 设置资源的字段 +- 在文本编辑器中(实时)编辑资源 + + +{{< alert color="warning" title="Porcelain 仅限开发使用" >}} +Porcelain 命令在开发集群中进行工作负载实验时可以节省时间,但不应用于生产。 +{{< /alert >}} From 0a1ff13c60111737966253894711f35ed623bc40 Mon Sep 17 00:00:00 2001 From: windsonsea Date: Fri, 3 May 2024 08:50:11 +0800 Subject: [PATCH 0448/1086] [zh] Add 5 r*.md feature-gates --- .../rotate-kubelet-client-certificate.md | 29 +++++++++++++++++ .../rotate-kubelet-server-certificate.md | 24 ++++++++++++++ .../feature-gates/run-as-group.md | 26 +++++++++++++++ .../feature-gates/runtime-class.md | 32 +++++++++++++++++++ 4 files changed, 111 insertions(+) create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/rotate-kubelet-client-certificate.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/rotate-kubelet-server-certificate.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/run-as-group.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/runtime-class.md diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/rotate-kubelet-client-certificate.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/rotate-kubelet-client-certificate.md new file mode 100644 index 0000000000..1914be490e --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/rotate-kubelet-client-certificate.md @@ -0,0 +1,29 @@ +--- +# Removed from Kubernetes +title: RotateKubeletClientCertificate +content_type: feature_gate + +_build: + list: never + render: false + +stages: + - stage: beta + defaultValue: true + fromVersion: "1.8" + toVersion: "1.18" + - stage: stable + defaultValue: true + fromVersion: "1.19" + toVersion: "1.21" + +removed: true +--- + + +启用 kubelet 上客户端 TLS 证书的轮换。 +更多细节参阅 [kubelet 配置](/zh-cn/docs/reference/access-authn-authz/kubelet-tls-bootstrapping/#kubelet-configuration)。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/rotate-kubelet-server-certificate.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/rotate-kubelet-server-certificate.md new file mode 100644 index 0000000000..a3a95fe554 --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/rotate-kubelet-server-certificate.md @@ -0,0 +1,24 @@ +--- +title: RotateKubeletServerCertificate +content_type: feature_gate +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.7" + toVersion: "1.11" + - stage: beta + defaultValue: true + fromVersion: "1.12" +--- + + +启用 kubelet 上服务器 TLS 证书的轮换。 +更多细节参阅 [kubelet 配置](/zh-cn/docs/reference/access-authn-authz/kubelet-tls-bootstrapping/#kubelet-configuration)。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/run-as-group.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/run-as-group.md new file mode 100644 index 0000000000..50d5de6753 --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/run-as-group.md @@ -0,0 +1,26 @@ +--- +# Removed from Kubernetes +title: RunAsGroup +content_type: feature_gate + +_build: + list: never + render: false + +stages: + - stage: beta + defaultValue: true + fromVersion: "1.14" + toVersion: "1.20" + - stage: stable + defaultValue: true + fromVersion: "1.21" + toVersion: "1.22" + +removed: true +--- + + +允许控制在容器初始化进程上设置的主组 ID。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/runtime-class.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/runtime-class.md new file mode 100644 index 0000000000..383cf896d4 --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/runtime-class.md @@ -0,0 +1,32 @@ +--- +# Removed from Kubernetes +title: RuntimeClass +content_type: feature_gate + +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.12" + toVersion: "1.13" + - stage: beta + defaultValue: true + fromVersion: "1.14" + toVersion: "1.19" + - stage: stable + defaultValue: true + fromVersion: "1.20" + toVersion: "1.24" + +removed: true +--- + + +启用 [RuntimeClass](/zh-cn/docs/concepts/containers/runtime-class/)特性, +用于选择容器运行时配置。 From 822e1f5b103efa97e0c0e51c0bee5ed8dc037b8a Mon Sep 17 00:00:00 2001 From: windsonsea Date: Fri, 3 May 2024 09:08:25 +0800 Subject: [PATCH 0449/1086] [zh] Sync feature gates --- .../admission-webhook-match-conditions.md | 6 +++- .../feature-gates/api-self-subject-review.md | 3 +- .../crd-validation-ratcheting.md | 5 ++++ .../feature-gates/hpa-container-metrics.md | 11 ++++++-- .../feature-gates/identify-pod-os.md | 6 +--- .../feature-gates/image-maximum-gc-age.md | 6 +++- .../legacy-service-account-token-clean-up.md | 4 +++ .../new-volume-manager-reconstruction.md | 28 ++++++++----------- .../feature-gates/node-log-query.md | 4 +++ .../feature-gates/pod-host-ips.md | 4 +++ .../service-account-token-jti.md | 5 ++++ .../stable-load-balancer-node-set.md | 5 ++++ ...structured-authentication-configuration.md | 5 ++++ .../structured-authorization-configuration.md | 5 ++++ ...anslate-stream-close-websocket-requests.md | 6 ++-- 15 files changed, 73 insertions(+), 30 deletions(-) diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/admission-webhook-match-conditions.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/admission-webhook-match-conditions.md index 95badf3d30..f499a0a328 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/admission-webhook-match-conditions.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/admission-webhook-match-conditions.md @@ -12,7 +12,11 @@ stages: toVersion: "1.27" - stage: beta defaultValue: true - fromVersion: "1.28" + fromVersion: "1.28" + toVersion: "1.29" + - stage: stable + defaultValue: true + fromVersion: "1.30" --- -启用 `HorizontalPodAutoscaler` 基于目标 Pod 中单个容器的指标进行扩缩。 +允许 {{< glossary_tooltip text="HorizontalPodAutoscalers" term_id="horizontal-pod-autoscaler" >}} +基于目标 Pod 中单个容器的指标进行扩缩。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/identify-pod-os.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/identify-pod-os.md index 9ada58bf4e..cec5aca1a6 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/identify-pod-os.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/identify-pod-os.md @@ -21,15 +21,11 @@ stages: fromVersion: "1.25" toVersion: "1.26" -removed: true +removed: true --- 允许设置 Pod 的 `os` 字段。这有助于在 API 服务器准入时确定性地辨识 Pod 的 OS。 -在 Kubernetes {{< skew currentVersion >}} 中,`pod.spec.os.name` 的允许值为 -`windows` 和 `linux`。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/image-maximum-gc-age.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/image-maximum-gc-age.md index 619923a606..39acdcf41f 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/image-maximum-gc-age.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/image-maximum-gc-age.md @@ -8,7 +8,11 @@ _build: stages: - stage: alpha defaultValue: false - fromVersion: "1.29" + fromVersion: "1.29" + toVersion: "1.29" + - stage: beta + defaultValue: true + fromVersion: "1.30" --- -在 kubelet 启动期间启用改进的挂载卷的发现。由于这段代码已经进行了重大重构, -我们允许用户不采用这一逻辑,以免 kubelet 在启动时被卡住,或者未能为已终止的 Pod 卸载卷。 +在 kubelet 启动期间启用改进的挂载卷的发现。由于关联的代码已经进行了重大重构, +Kubernetes v1.25 到 v1.29 允许你不采用这一逻辑,以免 kubelet 在启动时被卡住,或者未能为已终止的 Pod 卸载卷。 请注意,此重构是作为 Kubernetes 1.25 中的 `SELinuxMountReadWriteOncePod` Alpha 特性门控的一部分完成的。 - -在 Kubernetes v1.25 之前,kubelet 在启动期间使用不同的默认行为来发现已挂载的卷。 -如果你禁用此特性门控(默认启用),则选择传统的发现方式。 - -在 Kubernetes v1.25 和 v1.26 中,此行为切换是 `SELinuxMountReadWriteOncePod` 特性门控的一部分。 +在 Kubernetes v1.25 和 v1.26 中,此重构行为是 `SELinuxMountReadWriteOncePod` 特性门控的一部分。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/node-log-query.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/node-log-query.md index 8f079a4607..ac30ff3a39 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/node-log-query.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/node-log-query.md @@ -9,6 +9,10 @@ stages: - stage: alpha defaultValue: false fromVersion: "1.27" + toVersion: "1.29" + - stage: beta + defaultValue: false + fromVersion: "1.30" --- ReconcilerSyncLoopPeriod 是调和器在连续执行同步状态的循环间,所等待的时间量。 - 默认为 5 秒。 + 默认为 60 秒。 +

    + + +disableForceDetachOnTimeout [必需]
    +bool + + +

    + + 当超过最大卸载时间时,DisableForceDetachOnTimeout 将禁用强制分离。 + 默认情况下为 false,因此启用卸载时强制分离。

    diff --git a/content/zh-cn/docs/reference/config-api/kube-scheduler-config.v1.md b/content/zh-cn/docs/reference/config-api/kube-scheduler-config.v1.md index 8ec219a90e..8646f10ab7 100644 --- a/content/zh-cn/docs/reference/config-api/kube-scheduler-config.v1.md +++ b/content/zh-cn/docs/reference/config-api/kube-scheduler-config.v1.md @@ -542,7 +542,7 @@ NodeAffinityArgs holds arguments to configure the NodeAffinity plugin. kind
    stringNodeAffinityArgs addedAffinity
    -core/v1.NodeAffinity +core/v1.NodeAffinity 一组键值对(key=value),描述了各种特征。选项包括:
    -EtcdLearnerMode=true|false (ALPHA - 默认值=false)
    -PublicKeysECDSA=true|false (ALPHA - 默认值=false)
    +EtcdLearnerMode=true|false (BETA - 默认值=true)
    +PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
    RootlessControlPlane=true|false (ALPHA - 默认值=false)
    -UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false) +UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
    +WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-kubelet-client.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-kubelet-client.md index c171db75a9..b8dd346946 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-kubelet-client.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-kubelet-client.md @@ -18,11 +18,6 @@ If both files already exist, kubeadm skips the generation step and existing file --> 如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。 - -Alpha 免责声明:此命令目前处于 Alpha 阶段。 - ``` kubeadm init phase certs apiserver-kubelet-client [flags] ``` From 123f01c38b617ab6f17342b252b31361ad956b3a Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Fri, 3 May 2024 13:16:07 +0800 Subject: [PATCH 0452/1086] [zh-cn] sync kubeadm_init_phase_certs_ca kubeadm_init_phase_control-plane_all Signed-off-by: xin.li --- .../kubeadm/generated/kubeadm_init_phase_certs_ca.md | 5 ----- .../kubeadm_init_phase_control-plane_all.md | 12 +++++++----- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_ca.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_ca.md index 14b4dbdd54..f6c0a0ff8d 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_ca.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_ca.md @@ -18,11 +18,6 @@ If both files already exist, kubeadm skips the generation step and existing file --> 如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。 - -Alpha 免责声明:此命令目前处于 Alpha 阶段。 - ``` kubeadm init phase certs ca [flags] ``` diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md index c45c3077f4..b218157843 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md @@ -176,17 +176,19 @@ Don't apply any changes; just output what would be done.

    一组用来描述各种特性门控的键值(key=value)对。选项是:
    -EtcdLearnerMode=true|false (ALPHA - 默认值=false)
    -PublicKeysECDSA=true|false (ALPHA - 默认值=false)
    +EtcdLearnerMode=true|false (BETA - 默认值=true)
    +PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
    RootlessControlPlane=true|false (ALPHA - 默认值=false)
    UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false) +WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)

    From 0fe51a89a2af8e48e18501e4729c4764be2af17e Mon Sep 17 00:00:00 2001 From: windsonsea Date: Wed, 24 Apr 2024 09:38:08 +0800 Subject: [PATCH 0453/1086] [zh] Add trans to api-extension/custom-resources.md --- .../api-extension/custom-resources.md | 73 +++++++++++++++++++ .../shirt-resource-definition.yaml | 36 +++++++++ 2 files changed, 109 insertions(+) create mode 100644 content/zh-cn/examples/customresourcedefinition/shirt-resource-definition.yaml diff --git a/content/zh-cn/docs/concepts/extend-kubernetes/api-extension/custom-resources.md b/content/zh-cn/docs/concepts/extend-kubernetes/api-extension/custom-resources.md index 1cfb815c48..dad59ea99d 100644 --- a/content/zh-cn/docs/concepts/extend-kubernetes/api-extension/custom-resources.md +++ b/content/zh-cn/docs/concepts/extend-kubernetes/api-extension/custom-resources.md @@ -592,6 +592,79 @@ Kubernetes [客户端库](/zh-cn/docs/reference/using-api/client-libraries/)可 - 使用 [Kubernetes 客户端生成工具](https://github.com/kubernetes/code-generator)所生成的客户端。 生成客户端的工作有些难度,不过某些项目可能会随着 CRD 或聚合 API 一起提供一个客户端。 + +## 定制资源字段选择算符 {#custom-resource-field-selectors} + +[字段选择算符](/zh-cn/docs/concepts/overview/working-with-objects/field-selectors/)允许客户端根据一个或多个资源字段的值选择定制资源。 + + +所有定制资源都支持 `metadata.name` 和 `metadata.namespace` 字段选择算符。 + +当 {{< glossary_tooltip term_id="CustomResourceDefinition" text="CustomResourceDefinition" >}} +中声明的字段包含在 {{< glossary_tooltip term_id="CustomResourceDefinition" text="CustomResourceDefinition" >}} +的 `spec.versions[*].selectableFields` 字段中时,也可以与字段选择算符一起使用。 + + +### 定制资源的可选择字段 {#crd-selectable-fields} + +{{< feature-state feature_gate_name="CustomResourceFieldSelectors" >}} + + +你需要启用 `CustomResourceFieldSelectors` +[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/) +来使用此行为,然后将其应用到集群中的所有 CustomResourceDefinitions。 + +{{< glossary_tooltip term_id="CustomResourceDefinition" text="CustomResourceDefinition" >}} +的 `spec.versions[*].selectableFields` 字段可以用来声明可以在字段选择算符中使用定制资源中的其他哪些字段。 +以下示例将 `.spec.color` 和 `.spec.size` 字段添加为可选择字段。 + +{{% code_sample file="customresourcedefinition/shirt-resource-definition.yaml" %}} + + +字段选择算符随后可用于仅获取 `color` 为 `blue` 的资源: + +```shell +kubectl get shirts.stable.example.com --field-selector spec.color=blue +``` + + +输出应该是: + +``` +NAME COLOR SIZE +example1 blue S +example2 blue M +``` + ## {{% heading "whatsnext" %}} From 91b5e51447f18045ba8f78f638c5048d348a22d3 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Fri, 3 May 2024 15:01:34 +0600 Subject: [PATCH 0455/1086] Create version-skew-policy.md --- content/bn/releases/version-skew-policy.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/releases/version-skew-policy.md diff --git a/content/bn/releases/version-skew-policy.md b/content/bn/releases/version-skew-policy.md new file mode 100644 index 0000000000..895b2584c6 --- /dev/null +++ b/content/bn/releases/version-skew-policy.md @@ -0,0 +1,19 @@ +--- +reviewers: +- sig-api-machinery +- sig-architecture +- sig-cli +- sig-cluster-lifecycle +- sig-node +- sig-release +title: সংস্করণ স্কেও(Skew) নীতি +type: docs +description: > + বিভিন্ন কুবারনেটিস উপাদানের মধ্যে সর্বাধিক সংস্করণ স্ক্যু (skew) সমর্থিত। +--- + + +এই ডকুমেন্টটি কুবারনেটিসের বিভিন্ন উপাদানের মধ্যে সমর্থিত সর্বাধিক সংস্করণের স্ক্যু বর্ণনা করে। + + + From 2c7a63e09d6cb2b56b9d8700c64945312a9cf1ac Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Thu, 2 May 2024 19:37:30 +0800 Subject: [PATCH 0456/1086] [zh-cn] sync pod-security-standards security-checklist service-accounts system-traces Signed-off-by: xin.li --- .../cluster-administration/system-traces.md | 32 ++++++++++++ .../security/pod-security-standards.md | 52 +++++++++++++++---- .../concepts/security/security-checklist.md | 25 +++++---- .../concepts/security/service-accounts.md | 10 +++- 4 files changed, 99 insertions(+), 20 deletions(-) diff --git a/content/zh-cn/docs/concepts/cluster-administration/system-traces.md b/content/zh-cn/docs/concepts/cluster-administration/system-traces.md index 1e4f131f29..fd03e3b8ad 100644 --- a/content/zh-cn/docs/concepts/cluster-administration/system-traces.md +++ b/content/zh-cn/docs/concepts/cluster-administration/system-traces.md @@ -37,9 +37,15 @@ Kubernetes 组件基于 gRPC 导出器的 ## 追踪信息的收集 {#trace-collection} +Kubernetes 组件具有内置的 gRPC 导出器,供 OTLP 导出追踪信息,可以使用 OpenTelemetry Collector, +也可以不使用 OpenTelemetry Collector。 + +要在不使用收集器的情况下直接将追踪信息发送到后端,请在 Kubernetes +追踪配置文件中指定端点字段以及所需的追踪后端地址。 +该方法不需要收集器并简化了整体结构。 + + +对于追踪后端标头配置,包括身份验证详细信息,环境变量可以与 `OTEL_EXPORTER_OTLP_HEADERS` +一起使用,请参阅 [OTLP 导出器配置](https://opentelemetry.io/docs/languages/sdk-configuration/otlp-exporter/)。 + + +另外,对于 Kubernetes 集群名称、命名空间、Pod 名称等追踪资源属性配置, +环境变量也可以与 `OTEL_RESOURCE_ATTRIBUTES` 配合使用,请参见 +[OTLP Kubernetes 资源](https://opentelemetry.io/docs/specs/semconv/resource/k8s/)。 + * 阅读 [Getting Started with the OpenTelemetry Collector](https://opentelemetry.io/docs/collector/getting-started/) +* 了解 [OTLP 导出器配置](https://opentelemetry.io/docs/languages/sdk-configuration/otlp-exporter/) diff --git a/content/zh-cn/docs/concepts/security/pod-security-standards.md b/content/zh-cn/docs/concepts/security/pod-security-standards.md index 2b46cd07c7..dcf28ae0d5 100644 --- a/content/zh-cn/docs/concepts/security/pod-security-standards.md +++ b/content/zh-cn/docs/concepts/security/pod-security-standards.md @@ -3,7 +3,7 @@ title: Pod 安全性标准 description: > 详细了解 Pod 安全性标准(Pod Security Standards)中所定义的不同策略级别。 content_type: concept -weight: 10 +weight: 15 --- @@ -214,8 +214,27 @@ fail validation. AppArmor -

    在受支持的主机上,默认使用 runtime/default AppArmor 配置。Baseline 策略应避免覆盖或者禁用默认策略,以及限制覆盖一些配置集合的权限。

    -

    限制的字段

    +

    + + 在受支持的主机上,默认使用 RuntimeDefault AppArmor 配置。Baseline + 策略应避免覆盖或者禁用默认策略,以及限制覆盖一些配置集合的权限。 +

    +

    限制的字段

    +
      +
    • spec.securityContext.appArmorProfile.type
    • +
    • spec.containers[*].securityContext.appArmorProfile.type
    • +
    • spec.initContainers[*].securityContext.appArmorProfile.type
    • +
    • spec.ephemeralContainers[*].securityContext.appArmorProfile.type
    • +
    +

    准许的取值<

    +
      +
    • Undefined/nil
    • +
    • RuntimeDefault
    • +
    • Localhost
    • +
    +
    • metadata.annotations["container.apparmor.security.beta.kubernetes.io/*"]
    @@ -230,7 +249,12 @@ fail validation. SELinux -

    设置 SELinux 类型的操作是被限制的,设置自定义的 SELinux 用户或角色选项是被禁止的。

    +

    + + 设置 SELinux 类型的操作是被限制的,设置自定义的 SELinux 用户或角色选项是被禁止的。 +

    限制的字段

    • spec.securityContext.seLinuxOptions.type
    • @@ -302,7 +326,13 @@ fail validation. Sysctls -

      Sysctls 可以禁用安全机制或影响宿主上所有容器,因此除了若干“安全”的子集之外,应该被禁止。如果某 sysctl 是受容器或 Pod 的名字空间限制,且与节点上其他 Pod 或进程相隔离,可认为是安全的。

      +

      + + sysctl 可以禁用安全机制或影响宿主上所有容器,因此除了若干“安全”的允许子集之外,其他都应该被禁止。 + 如果某 sysctl 是受容器或 Pod 的名字空间限制,且与节点上其他 Pod 或进程相隔离,可认为是安全的。 +

      限制的字段

      • spec.securityContext.sysctls[*].name
      • @@ -346,7 +376,7 @@ containers_. If any of the listed containers fails to meet the requirements, the fail validation. --> 在下述表格中,通配符(`*`)意味着一个列表中的所有元素。 -例如 `spec.containers[*].securityContext` 表示 **所定义的所有容器** 的安全性上下文对象。 +例如 `spec.containers[*].securityContext` 表示**所定义的所有容器**的安全性上下文对象。 如果所列出的任一容器不能满足要求,整个 Pod 将无法通过校验。 {{< /note >}} @@ -363,7 +393,12 @@ fail validation. 卷类型 -

        除了限制 HostPath 卷之外,此类策略还限制可以通过 PersistentVolumes 定义的非核心卷类型。

        +

        + + 除了限制 HostPath 卷之外,此类策略还限制可以通过 PersistentVolumes 定义的非核心卷类型。 +

        限制的字段

        • spec.volumes[*]
        • @@ -689,4 +724,3 @@ sandboxing. As such, no single recommended profile is recommended for all sandbo 此外,沙箱化负载的保护高度依赖于沙箱化的实现方法。 因此,现在还没有针对所有沙箱化负载的建议配置。 - diff --git a/content/zh-cn/docs/concepts/security/security-checklist.md b/content/zh-cn/docs/concepts/security/security-checklist.md index 3881b06253..07b2c30428 100644 --- a/content/zh-cn/docs/concepts/security/security-checklist.md +++ b/content/zh-cn/docs/concepts/security/security-checklist.md @@ -63,7 +63,7 @@ evaluated on its merits. - [ ] A process exists for periodic access review, and reviews occur no more than 24 months apart. - [ ] The [Role Based Access Control Good Practices](/docs/concepts/security/rbac-good-practices/) - is followed for guidance related to authentication and authorization. + are followed for guidance related to authentication and authorization. --> ## 认证和鉴权 {#authentication-authorization} @@ -326,18 +326,18 @@ Seccomp 仅适用于 Linux 节点。 #### AppArmor -[AppArmor](https://apparmor.net/) 是一个 Linux 内核安全模块, +[AppArmor](/zh-cn/docs/tutorials/security/apparmor/) 是一个 Linux 内核安全模块, 可以提供一种简单的方法来实现强制访问控制(Mandatory Access Control, MAC)并通过系统日志进行更好地审计。 -要在 Kubernetes 中[启用 AppArmor](/zh-cn/docs/tutorials/security/apparmor/),至少需要 1.4 版本。 +默认 AppArmor 配置文件在支持它的节点上强制执行,或者可以配置自定义配置文件。 与 Seccomp 一样,AppArmor 也通过配置文件进行配置, 其中每个配置文件要么在强制(Enforcing)模式下运行,即阻止访问不允许的资源,要么在投诉(Complaining)模式下运行,只报告违规行为。 AppArmor 配置文件是通过注解的方式,以容器为粒度强制执行的,允许进程获得刚好合适的权限。 @@ -730,8 +730,12 @@ has permissions to use the image. ## 接下来 {#what-is-next} -- [RBAC 良好实践](/zh-cn/docs/concepts/security/rbac-good-practices/)提供有关授权的更多信息。 +- [通过 Pod 创建进行权限升级](/zh-cn/docs/reference/access-authn-authz/authorization/#privilege-escalation-via-pod-creation)会警告你特定的访问控制风险; + 请检查你如何管理该风险。 + - 如果你使用 Kubernetes RBAC,请阅读 + [RBAC 良好实践](/zh-cn/docs/concepts/security/rbac-good-practices/)获取有关鉴权的更多信息。 - [保护集群](/zh-cn/docs/tasks/administer-cluster/securing-a-cluster/)提供如何保护集群免受意外或恶意访问的信息。 - [集群多租户指南](/zh-cn/docs/concepts/security/multi-tenancy/)提供有关多租户的配置选项建议和最佳实践。 - [博文“深入了解 NSA/CISA Kubernetes 强化指南”](/blog/2021/10/05/nsa-cisa-kubernetes-hardening-guidance/#building-secure-container-images)为强化 diff --git a/content/zh-cn/docs/concepts/security/service-accounts.md b/content/zh-cn/docs/concepts/security/service-accounts.md index d25f461492..830eaeb991 100644 --- a/content/zh-cn/docs/concepts/security/service-accounts.md +++ b/content/zh-cn/docs/concepts/security/service-accounts.md @@ -2,15 +2,21 @@ title: 服务账号 description: > 了解 Kubernetes 中的 ServiceAccount 对象。 +api_metadata: +- apiVersion: "v1" + kind: "ServiceAccount" content_type: concept -weight: 10 +weight: 25 --- From 5fd25c7f540a93892ec4f72b61a24d66e50d42f6 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Thu, 2 May 2024 20:31:38 +0800 Subject: [PATCH 0457/1086] [zh-cn] sync security/apparmor.md Signed-off-by: xin.li --- .../zh-cn/docs/tutorials/security/apparmor.md | 174 ++++++++---------- 1 file changed, 77 insertions(+), 97 deletions(-) diff --git a/content/zh-cn/docs/tutorials/security/apparmor.md b/content/zh-cn/docs/tutorials/security/apparmor.md index da286ba83b..f13cdb16bc 100644 --- a/content/zh-cn/docs/tutorials/security/apparmor.md +++ b/content/zh-cn/docs/tutorials/security/apparmor.md @@ -13,37 +13,17 @@ weight: 30 -{{< feature-state for_k8s_version="v1.4" state="beta" >}} +{{< feature-state feature_gate_name="AppArmor" >}} -[AppArmor](https://apparmor.net/) 是一个 Linux 内核安全模块, -它补充了基于标准 Linux 用户和组的权限,将程序限制在一组有限的资源中。 -AppArmor 可以配置为任何应用程序减少潜在的攻击面,并且提供更加深入的防御。 -它通过调整配置文件进行配置,以允许特定程序或容器所需的访问, -如 Linux 权能字、网络访问、文件权限等。 -每个配置文件都可以在 **强制(enforcing)** -模式(阻止访问不允许的资源)或 **投诉(complain)** 模式(仅报告冲突)下运行。 - - -在 Kubernetes 中,AppArmor 可以通过限制允许容器执行的操作, -和/或通过系统日志提供更好的审计来帮助你运行更安全的部署。 -但是,重要的是要记住 AppArmor 不是灵丹妙药, -只能做部分事情来防止应用程序代码中的漏洞。 -提供良好的限制性配置文件,并从其他角度强化你的应用程序和集群非常重要。 +本页面向你展示如何在节点上加载 AppArmor 配置文件并在 Pod 中强制应用这些配置文件。 +要了解有关 Kubernetes 如何使用 AppArmor 限制 Pod 的更多信息,请参阅 +[Pod 和容器的 Linux 内核安全约束](/zh-cn/docs/concepts/security/linux-kernel-security-constraints/#apparmor)。 ## {{% heading "objectives" %}} @@ -85,7 +65,7 @@ AppArmor 是一个可选的内核模块和 Kubernetes 特性,因此请在继 ``` kubelet 会先验证主机上是否已启用 AppArmor,然后再接纳显式配置了 AppArmor 的 Pod。 @@ -103,7 +83,7 @@ AppArmor 是一个可选的内核模块和 Kubernetes 特性,因此请在继 3. 配置文件已加载 —— 通过指定每个容器应使用的 AppArmor 配置文件, @@ -139,44 +119,44 @@ AppArmor 是一个可选的内核模块和 Kubernetes 特性,因此请在继 {{< note >}} -AppArmor 目前处于 Beta 阶段,因此选项以注解形式设定。 -一旦 AppArmor 支持进入正式发布阶段,注解将被替换为一阶的资源字段。 +在 Kubernetes v1.30 之前,AppArmor 是通过注解指定的。 +使用文档版本选择器查看包含此已弃用 API 的文档。 {{< /note >}} -AppArmor 配置文件是按**逐个容器**的形式来设置的。 -要指定用来运行 Pod 容器的 AppArmor 配置文件,请向 Pod 的 metadata 添加注解: +AppArmor 配置文件可以在 Pod 级别或容器级别指定。容器 +AppArmor 配置文件优先于 Pod 配置文件。 ```yaml -container.apparmor.security.beta.kubernetes.io/: +securityContext: + appArmorProfile: + type: ``` -`` 的名称是配置文件所针对的容器的名称,`` 则设置要应用的配置文件。 -`` 可以是以下取值之一: +其中 `` 是以下之一: -* `runtime/default` 应用运行时的默认配置 -* `localhost/` 应用在主机上加载的名为 `` 的配置文件 -* `unconfined` 表示不加载配置文件 +* `RuntimeDefault` 使用运行时的默认配置文件 +* `Localhost` 使用主机上加载的配置文件(见下文) +* `Unconfined` 无需 AppArmor 即可运行 -有关注解和配置文件名称格式的详细信息,请参阅 [API 参考](#api-reference)。 +有关 AppArmor 配置文件 API 的完整详细信息,请参阅 [API 参考](#api-reference)。 -首先,将要使用的配置文件加载到节点上,此配置文件拒绝所有文件写入: +首先,将要使用的配置文件加载到节点上,该配置文件阻止所有文件写入操作: ``` #include @@ -323,9 +303,11 @@ apiVersion: v1 kind: Pod metadata: name: hello-apparmor-2 - annotations: - container.apparmor.security.beta.kubernetes.io/hello: localhost/k8s-apparmor-example-allow-write spec: + securityContext: + appArmorProfile: + type: Localhost + localhostProfile: k8s-apparmor-example-allow-write containers: - name: hello image: busybox:1.28 @@ -384,11 +366,11 @@ An Event provides the error message with the reason, the specific wording is run ### 使用配置文件设置节点 {#setting-up-nodes-with-profiles} -Kubernetes 目前不提供任何本地机制来将 AppArmor 配置文件加载到节点上。 +Kubernetes {{< skew currentVersion >}} 目前不提供任何本地机制来将 AppArmor 配置文件加载到节点上。 可以通过自定义基础设施或工具(例如 [Kubernetes Security Profiles Operator](https://github.com/kubernetes-sigs/security-profiles-operator)) 加载配置文件。 @@ -440,58 +422,56 @@ AppArmor 将详细消息记录到 `dmesg`, 更多详细信息参见 [AppArmor 失败](https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Failures)。 -## API 参考 {#api-reference} +## 指定 AppArmor 限制 {#specifying-apparmor-confinement} + +{{< caution >}} + +在 Kubernetes v1.30 之前,AppArmor 是通过注解指定的。使用文档版本选择器查看包含此已弃用 API 的文档。 +{{< /caution >}} -### Pod 注解 {#pod-annotation} +### 安全上下文中的 AppArmor 配置文件 {#appArmorProfile} -指定容器将使用的配置文件: +你可以在容器的 `securityContext` 或 Pod 的 `securityContext` 中设置 `appArmorProfile`。 +如果在 Pod 级别设置配置文件,该配置将被用作 Pod 中所有容器(包括 Init、Sidecar 和临时容器)的默认配置文件。 +如果同时设置了 Pod 和容器 AppArmor 配置文件,则将使用容器的配置文件。 + +AppArmor 配置文件有 2 个字段: -- **键名**:`container.apparmor.security.beta.kubernetes.io/`, - 其中 `` 与 Pod 中某容器的名称匹配。 - 可以为 Pod 中的每个容器指定单独的配置文件。 -- **键值**:对配置文件的引用,如下所述 +`type` **(必需)** - 指示将应用哪种 AppArmor 配置文件。有效选项是: + - `Localhost` - 节点上预加载的配置文件(由 `localhostProfile` 指定)。 + - `RuntimeDefault` - 容器运行时的默认配置文件。 + - `Unconfined` - 没有 AppArmor 强制执行。 -### 配置文件引用 {#profile-reference} - - -- `runtime/default`:指默认运行时配置文件。 - - 等同于不指定配置文件,只是它仍然需要启用 AppArmor。 - - 实际上,许多容器运行时使用相同的 OCI 默认配置文件,在此处定义: - https://github.com/containers/common/blob/main/pkg/apparmor/apparmor_linux_template.go -- `localhost/`:按名称引用加载到节点(localhost)上的配置文件。 - - 可能的配置文件名在[核心策略参考](https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#profile-names-and-attachment-specifications)。 -- `unconfined`:这相当于为容器禁用 AppArmor。 - - -任何其他配置文件引用格式无效。 +`localhostProfile` - 在节点上加载的、应被使用的配置文件的名称。 +该配置文件必须在节点上预先配置才能工作。 +当且仅当 `type` 是 `Localhost` 时,必须提供此选项。 ## {{% heading "whatsnext" %}} From 4a2224c6c3cef2523fed4ebd04dd6996c610d5e2 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Fri, 3 May 2024 15:06:02 +0800 Subject: [PATCH 0458/1086] [zh-cn]sync kube-apiserver.md Signed-off-by: xin.li --- .../kube-apiserver.md | 271 ++++++++++++------ 1 file changed, 179 insertions(+), 92 deletions(-) diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver.md b/content/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver.md index db3a17558e..24fd7ffa88 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver.md @@ -710,18 +710,6 @@ The API version of the authorization.k8s.io SubjectAccessReview to send to and e - ---azure-container-registry-config string - - - - -包含 Azure 容器仓库配置信息的文件的路径。 - - - --bind-address string     默认值:"0.0.0.0" @@ -871,11 +859,37 @@ Number of workers spawned for DeleteCollection call. These are used to speed up

          -尽管位于默认启用的插件列表中,仍须被禁用的准入插件(NamespaceLifecycle、LimitRanger、ServiceAccount、TaintNodesByCondition、PodSecurity、Priority、DefaultTolerationSeconds、DefaultStorageClass、StorageObjectInUseProtection、PersistentVolumeClaimResize、RuntimeClass、CertificateApproval、CertificateSigning、ClusterTrustBundleAttest、CertificateSubjectRestriction、DefaultIngressClass、MutatingAdmissionWebhook、ValidatingAdmissionPolicy、ValidatingAdmissionWebhook、ResourceQuota)。 -取值为逗号分隔的准入插件列表:AlwaysAdmit、AlwaysDeny、AlwaysPullImages、CertificateApproval、CertificateSigning、CertificateSubjectRestriction、ClusterTrustBundleAttest、DefaultIngressClass、DefaultStorageClass、DefaultTolerationSeconds、DenyServiceExternalIPs、EventRateLimit、ExtendedResourceToleration、ImagePolicyWebhook、LimitPodHardAntiAffinityTopology、LimitRanger、MutatingAdmissionWebhook、NamespaceAutoProvision、NamespaceExists、NamespaceLifecycle、NodeRestriction、OwnerReferencesPermissionEnforcement、PersistentVolumeClaimResize、PersistentVolumeLabel、PodNodeSelector、PodSecurity、PodTolerationRestriction、Priority、ResourceQuota、RuntimeClass、SecurityContextDeny、ServiceAccount、StorageObjectInUseProtection、TaintNodesByCondition、ValidatingAdmissionPolicy、ValidatingAdmissionWebhook。 +尽管位于默认启用的插件列表中,仍须被禁用的准入插件(NamespaceLifecycle、LimitRanger、 +ServiceAccount、TaintNodesByCondition、PodSecurity、Priority、DefaultTolerationSeconds、 +DefaultStorageClass、StorageObjectInUseProtection、PersistentVolumeClaimResize、 +RuntimeClass、CertificateApproval、CertificateSigning、ClusterTrustBundleAttest、 +CertificateSubjectRestriction、DefaultIngressClass、MutatingAdmissionWebhook、 +ValidatingAdmissionPolicy、ValidatingAdmissionWebhook、ResourceQuota)。 +取值为逗号分隔的准入插件列表:AlwaysAdmit、AlwaysDeny、AlwaysPullImages、CertificateApproval、 +CertificateSigning、CertificateSubjectRestriction、ClusterTrustBundleAttest、 +DefaultIngressClass、DefaultStorageClass、DefaultTolerationSeconds、DenyServiceExternalIPs、 +EventRateLimit、ExtendedResourceToleration、ImagePolicyWebhook、LimitPodHardAntiAffinityTopology、 +LimitRanger、MutatingAdmissionWebhook、NamespaceAutoProvision、NamespaceExists、NamespaceLifecycle、 +NodeRestriction、OwnerReferencesPermissionEnforcement、PersistentVolumeClaimResize、PersistentVolumeLabel、 +PodNodeSelector、PodSecurity、PodTolerationRestriction、Priority、ResourceQuota、RuntimeClass、 +ServiceAccount、StorageObjectInUseProtection、TaintNodesByCondition、ValidatingAdmissionPolicy、ValidatingAdmissionWebhook。 该标志中插件的顺序无关紧要。

          @@ -916,11 +930,38 @@ File with apiserver egress selector configuration.

          -除了默认启用的插件(NamespaceLifecycle、LimitRanger、ServiceAccount、TaintNodesByCondition、PodSecurity、Priority、DefaultTolerationSeconds、DefaultStorageClass、StorageObjectInUseProtection、PersistentVolumeClaimResize、RuntimeClass、CertificateApproval、CertificateSigning、ClusterTrustBundleAttest、CertificateSubjectRestriction、DefaultIngressClass、MutatingAdmissionWebhook、ValidatingAdmissionPolicy、ValidatingAdmissionWebhook、ResourceQuota)之外要启用的准入插件。 -取值为逗号分隔的准入插件列表:AlwaysAdmit、AlwaysDeny、AlwaysPullImages、CertificateApproval、CertificateSigning、CertificateSubjectRestriction、ClusterTrustBundleAttest、DefaultIngressClass、DefaultStorageClass、DefaultTolerationSeconds、DenyServiceExternalIPs、EventRateLimit、ExtendedResourceToleration、ImagePolicyWebhook、LimitPodHardAntiAffinityTopology、LimitRanger、MutatingAdmissionWebhook、NamespaceAutoProvision、NamespaceExists、NamespaceLifecycle、NodeRestriction、OwnerReferencesPermissionEnforcement、PersistentVolumeClaimResize、PersistentVolumeLabel、PodNodeSelector、PodSecurity、PodTolerationRestriction、Priority、ResourceQuota、RuntimeClass、SecurityContextDeny、ServiceAccount、StorageObjectInUseProtection、TaintNodesByCondition、ValidatingAdmissionPolicy、ValidatingAdmissionWebhook。该标志中插件的顺序无关紧要。 +除了默认启用的插件(NamespaceLifecycle、LimitRanger、ServiceAccount、TaintNodesByCondition、 +PodSecurity、Priority、DefaultTolerationSeconds、DefaultStorageClass、StorageObjectInUseProtection、 +PersistentVolumeClaimResize、RuntimeClass、CertificateApproval、CertificateSigning、ClusterTrustBundleAttest、 +CertificateSubjectRestriction、DefaultIngressClass、MutatingAdmissionWebhook、ValidatingAdmissionPolicy、 +ValidatingAdmissionWebhook、ResourceQuota)之外要启用的准入插件。 +取值为逗号分隔的准入插件列表:AlwaysAdmit、AlwaysDeny、AlwaysPullImages、CertificateApproval、 +CertificateSigning、CertificateSubjectRestriction、ClusterTrustBundleAttest、DefaultIngressClass、 +DefaultStorageClass、DefaultTolerationSeconds、DenyServiceExternalIPs、EventRateLimit、 +ExtendedResourceToleration、ImagePolicyWebhook、LimitPodHardAntiAffinityTopology、LimitRanger、 +MutatingAdmissionWebhook、NamespaceAutoProvision、NamespaceExists、NamespaceLifecycle、 +NodeRestriction、OwnerReferencesPermissionEnforcement、PersistentVolumeClaimResize、 +PersistentVolumeLabel、PodNodeSelector、PodSecurity、PodTolerationRestriction、Priority、 +ResourceQuota、RuntimeClass、ServiceAccount、StorageObjectInUseProtection、TaintNodesByCondition、 +ValidatingAdmissionPolicy、ValidatingAdmissionWebhook。该标志中插件的顺序无关紧要。

          @@ -1204,42 +1245,41 @@ A set of key=value pairs that describe feature gates for alpha/experimental feat APIResponseCompression=true|false (BETA - default=true)
          APIServerIdentity=true|false (BETA - default=true)
          APIServerTracing=true|false (BETA - default=true)
          -AdmissionWebhookMatchConditions=true|false (BETA - default=true)
          -AggregatedDiscoveryEndpoint=true|false (BETA - default=true)
          +APIServingWithRoutine=true|false (BETA - default=true)
          AllAlpha=true|false (ALPHA - default=false)
          AllBeta=true|false (BETA - default=false)
          AnyVolumeDataSource=true|false (BETA - default=true)
          AppArmor=true|false (BETA - default=true)
          +AppArmorFields=true|false (BETA - default=true)
          CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false)
          CPUManagerPolicyBetaOptions=true|false (BETA - default=true)
          CPUManagerPolicyOptions=true|false (BETA - default=true)
          -CRDValidationRatcheting=true|false (ALPHA - default=false)
          +CRDValidationRatcheting=true|false (BETA - default=true)
          CSIMigrationPortworx=true|false (BETA - default=false)
          CSIVolumeHealth=true|false (ALPHA - default=false)
          CloudControllerManagerWebhook=true|false (ALPHA - default=false)
          -CloudDualStackNodeIPs=true|false (BETA - default=true)
          ClusterTrustBundle=true|false (ALPHA - default=false)
          ClusterTrustBundleProjection=true|false (ALPHA - default=false)
          ComponentSLIs=true|false (BETA - default=true)
          ConsistentListFromCache=true|false (ALPHA - default=false)
          -ContainerCheckpoint=true|false (ALPHA - default=false)
          -ContextualLogging=true|false (ALPHA - default=false)
          +ContainerCheckpoint=true|false (BETA - default=true)
          +ContextualLogging=true|false (BETA - default=true)
          CronJobsScheduledAnnotation=true|false (BETA - default=true)
          CrossNamespaceVolumeDataSource=true|false (ALPHA - default=false)
          CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false)
          +CustomResourceFieldSelectors=true|false (ALPHA - default=false)
          DevicePluginCDIDevices=true|false (BETA - default=true)
          DisableCloudProviders=true|false (BETA - default=true)
          DisableKubeletCloudCredentialProviders=true|false (BETA - default=true)
          DisableNodeKubeProxyVersion=true|false (ALPHA - default=false)
          DynamicResourceAllocation=true|false (ALPHA - default=false)
          ElasticIndexedJob=true|false (BETA - default=true)
          -EventedPLEG=true|false (BETA - default=false)
          +EventedPLEG=true|false (ALPHA - default=false)
          GracefulNodeShutdown=true|false (BETA - default=true)
          GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - default=true)
          -HPAContainerMetrics=true|false (BETA - default=true)
          HPAScaleToZero=true|false (ALPHA - default=false)
          HonorPVReclaimPolicy=true|false (ALPHA - default=false)
          -ImageMaximumGCAge=true|false (ALPHA - default=false)
          +ImageMaximumGCAge=true|false (BETA - default=true)
          InPlacePodVerticalScaling=true|false (ALPHA - default=false)
          InTreePluginAWSUnregister=true|false (ALPHA - default=false)
          InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false)
          @@ -1248,18 +1288,20 @@ InTreePluginGCEUnregister=true|false (ALPHA - default=false)
          InTreePluginOpenStackUnregister=true|false (ALPHA - default=false)
          InTreePluginPortworxUnregister=true|false (ALPHA - default=false)
          InTreePluginvSphereUnregister=true|false (ALPHA - default=false)
          +InformerResourceVersion=true|false (ALPHA - default=false)
          JobBackoffLimitPerIndex=true|false (BETA - default=true)
          +JobManagedBy=true|false (ALPHA - default=false)
          JobPodFailurePolicy=true|false (BETA - default=true)
          JobPodReplacementPolicy=true|false (BETA - default=true)
          -KubeProxyDrainingTerminatingNodes=true|false (ALPHA - default=false)
          +JobSuccessPolicy=true|false (ALPHA - default=false)
          +KubeProxyDrainingTerminatingNodes=true|false (BETA - default=true)
          KubeletCgroupDriverFromCRI=true|false (ALPHA - default=false)
          KubeletInUserNamespace=true|false (ALPHA - default=false)
          KubeletPodResourcesDynamicResources=true|false (ALPHA - default=false)
          KubeletPodResourcesGet=true|false (ALPHA - default=false)
          KubeletSeparateDiskGC=true|false (ALPHA - default=false)
          KubeletTracing=true|false (BETA - default=true)
          -LegacyServiceAccountTokenCleanUp=true|false (BETA - default=true)
          -LoadBalancerIPMode=true|false (ALPHA - default=false)
          +LoadBalancerIPMode=true|false (BETA - default=true)
          LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false)
          LogarithmicScaleDown=true|false (BETA - default=true)
          LoggingAlphaOptions=true|false (ALPHA - default=false)
          @@ -1269,104 +1311,107 @@ MatchLabelKeysInPodTopologySpread=true|false (BETA - default=true)
          MaxUnavailableStatefulSet=true|false (ALPHA - default=false)
          MemoryManager=true|false (BETA - default=true)
          MemoryQoS=true|false (ALPHA - default=false)
          -MinDomainsInPodTopologySpread=true|false (BETA - default=true)
          MultiCIDRServiceAllocator=true|false (ALPHA - default=false)
          +MutatingAdmissionPolicy=true|false (ALPHA - default=false)
          NFTablesProxyMode=true|false (ALPHA - default=false)
          -NewVolumeManagerReconstruction=true|false (BETA - default=true)
          NodeInclusionPolicyInPodTopologySpread=true|false (BETA - default=true)
          -NodeLogQuery=true|false (ALPHA - default=false)
          -NodeSwap=true|false (BETA - default=false)
          +NodeLogQuery=true|false (BETA - default=false)
          +NodeSwap=true|false (BETA - default=true)
          OpenAPIEnums=true|false (BETA - default=true)
          PDBUnhealthyPodEvictionPolicy=true|false (BETA - default=true)
          PersistentVolumeLastPhaseTransitionTime=true|false (BETA - default=true)
          PodAndContainerStatsFromCRI=true|false (ALPHA - default=false)
          PodDeletionCost=true|false (BETA - default=true)
          PodDisruptionConditions=true|false (BETA - default=true)
          -PodHostIPs=true|false (BETA - default=true)
          PodIndexLabel=true|false (BETA - default=true)
          -PodLifecycleSleepAction=true|false (ALPHA - default=false)
          +PodLifecycleSleepAction=true|false (BETA - default=true)
          PodReadyToStartContainersCondition=true|false (BETA - default=true)
          -PodSchedulingReadiness=true|false (BETA - default=true)
          +PortForwardWebsockets=true|false (ALPHA - default=false)
          ProcMountType=true|false (ALPHA - default=false)
          QOSReserved=true|false (ALPHA - default=false)
          RecoverVolumeExpansionFailure=true|false (ALPHA - default=false)
          +RecursiveReadOnlyMounts=true|false (ALPHA - default=false)
          +RelaxedEnvironmentVariableValidation=true|false (ALPHA - default=false)
          +RetryGenerateName=true|false (ALPHA - default=false)
          RotateKubeletServerCertificate=true|false (BETA - default=true)
          RuntimeClassInImageCriApi=true|false (ALPHA - default=false)
          +SELinuxMount=true|false (ALPHA - default=false)
          SELinuxMountReadWriteOncePod=true|false (BETA - default=true)
          SchedulerQueueingHints=true|false (BETA - default=false)
          -SecurityContextDeny=true|false (ALPHA - default=false)
          +SeparateCacheWatchRPC=true|false (BETA - default=true)
          SeparateTaintEvictionController=true|false (BETA - default=true)
          -ServiceAccountTokenJTI=true|false (ALPHA - default=false)
          +ServiceAccountTokenJTI=true|false (BETA - default=true)
          ServiceAccountTokenNodeBinding=true|false (ALPHA - default=false)
          -ServiceAccountTokenNodeBindingValidation=true|false (ALPHA - default=false)
          -ServiceAccountTokenPodNodeInfo=true|false (ALPHA - default=false)
          +ServiceAccountTokenNodeBindingValidation=true|false (BETA - default=true)
          +ServiceAccountTokenPodNodeInfo=true|false (BETA - default=true)
          +ServiceTrafficDistribution=true|false (ALPHA - default=false)
          SidecarContainers=true|false (BETA - default=true)
          SizeMemoryBackedVolumes=true|false (BETA - default=true)
          -StableLoadBalancerNodeSet=true|false (BETA - default=true)
          StatefulSetAutoDeletePVC=true|false (BETA - default=true)
          StatefulSetStartOrdinal=true|false (BETA - default=true)
          +StorageNamespaceIndex=true|false (BETA - default=true)
          StorageVersionAPI=true|false (ALPHA - default=false)
          StorageVersionHash=true|false (BETA - default=true)
          -StructuredAuthenticationConfiguration=true|false (ALPHA - default=false)
          -StructuredAuthorizationConfiguration=true|false (ALPHA - default=false)
          +StorageVersionMigrator=true|false (ALPHA - default=false)
          +StructuredAuthenticationConfiguration=true|false (BETA - default=true)
          +StructuredAuthorizationConfiguration=true|false (BETA - default=true)
          TopologyAwareHints=true|false (BETA - default=true)
          TopologyManagerPolicyAlphaOptions=true|false (ALPHA - default=false)
          TopologyManagerPolicyBetaOptions=true|false (BETA - default=true)
          TopologyManagerPolicyOptions=true|false (BETA - default=true)
          -TranslateStreamCloseWebsocketRequests=true|false (ALPHA - default=false)
          +TranslateStreamCloseWebsocketRequests=true|false (BETA - default=true)
          UnauthenticatedHTTP2DOSMitigation=true|false (BETA - default=true)
          UnknownVersionInteroperabilityProxy=true|false (ALPHA - default=false)
          UserNamespacesPodSecurityStandards=true|false (ALPHA - default=false)
          -UserNamespacesSupport=true|false (ALPHA - default=false)
          -ValidatingAdmissionPolicy=true|false (BETA - default=false)
          +UserNamespacesSupport=true|false (BETA - default=false)
          VolumeAttributesClass=true|false (ALPHA - default=false)
          VolumeCapacityPriority=true|false (ALPHA - default=false)
          +WatchFromStorageWithoutResourceVersion=true|false (BETA - default=false)
          WatchList=true|false (ALPHA - default=false)
          +WatchListClient=true|false (BETA - default=false)
          WinDSR=true|false (ALPHA - default=false)
          WinOverlay=true|false (BETA - default=true)
          -WindowsHostNetwork=true|false (ALPHA - default=true)
          -ZeroLimitedNominalConcurrencyShares=true|false (BETA - default=false) +WindowsHostNetwork=true|false (ALPHA - default=true) --> 一组 key=value 对,用来描述测试性/试验性功能的特性门控。可选项有:
          APIResponseCompression=true|false (BETA - 默认值=true)
          APIServerIdentity=true|false (BETA - 默认值=true)
          APIServerTracing=true|false (BETA - 默认值=true)
          -AdmissionWebhookMatchConditions=true|false (BETA - 默认值=true)
          -AggregatedDiscoveryEndpoint=true|false (BETA - 默认值=true)
          +APIServingWithRoutine=true|false (BETA - 默认值=true)
          AllAlpha=true|false (ALPHA - 默认值=false)
          AllBeta=true|false (BETA - 默认值=false)
          AnyVolumeDataSource=true|false (BETA - 默认值=true)
          AppArmor=true|false (BETA - 默认值=true)
          +AppArmorFields=true|false (BETA - 默认值=true)
          CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
          CPUManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
          CPUManagerPolicyOptions=true|false (BETA - 默认值=true)
          -CRDValidationRatcheting=true|false (ALPHA - 默认值=false)
          +CRDValidationRatcheting=true|false (BETA - 默认值=true)
          CSIMigrationPortworx=true|false (BETA - 默认值=false)
          CSIVolumeHealth=true|false (ALPHA - 默认值=false)
          CloudControllerManagerWebhook=true|false (ALPHA - 默认值=false)
          -CloudDualStackNodeIPs=true|false (BETA - 默认值=true)
          ClusterTrustBundle=true|false (ALPHA - 默认值=false)
          ClusterTrustBundleProjection=true|false (ALPHA - 默认值=false)
          ComponentSLIs=true|false (BETA - 默认值=true)
          ConsistentListFromCache=true|false (ALPHA - 默认值=false)
          -ContainerCheckpoint=true|false (ALPHA - 默认值=false)
          -ContextualLogging=true|false (ALPHA - 默认值=false)
          +ContainerCheckpoint=true|false (BETA - 默认值=true)
          +ContextualLogging=true|false (BETA - 默认值=true)
          CronJobsScheduledAnnotation=true|false (BETA - 默认值=true)
          CrossNamespaceVolumeDataSource=true|false (ALPHA - 默认值=false)
          CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
          +CustomResourceFieldSelectors=true|false (ALPHA - 默认值=false)
          DevicePluginCDIDevices=true|false (BETA - 默认值=true)
          DisableCloudProviders=true|false (BETA - 默认值=true)
          DisableKubeletCloudCredentialProviders=true|false (BETA - 默认值=true)
          DisableNodeKubeProxyVersion=true|false (ALPHA - 默认值=false)
          DynamicResourceAllocation=true|false (ALPHA - 默认值=false)
          ElasticIndexedJob=true|false (BETA - 默认值=true)
          -EventedPLEG=true|false (BETA - 默认值=false)
          +EventedPLEG=true|false (ALPHA - 默认值=false)
          GracefulNodeShutdown=true|false (BETA - 默认值=true)
          GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值=true)
          -HPAContainerMetrics=true|false (BETA - 默认值=true)
          HPAScaleToZero=true|false (ALPHA - 默认值=false)
          HonorPVReclaimPolicy=true|false (ALPHA - 默认值=false)
          -ImageMaximumGCAge=true|false (ALPHA - 默认值=false)
          +ImageMaximumGCAge=true|false (BETA - 默认值=true)
          InPlacePodVerticalScaling=true|false (ALPHA - 默认值=false)
          InTreePluginAWSUnregister=true|false (ALPHA - 默认值=false)
          InTreePluginAzureDiskUnregister=true|false (ALPHA - 默认值=false)
          @@ -1375,18 +1420,20 @@ InTreePluginGCEUnregister=true|false (ALPHA - 默认值=false)
          InTreePluginOpenStackUnregister=true|false (ALPHA - 默认值=false)
          InTreePluginPortworxUnregister=true|false (ALPHA - 默认值=false)
          InTreePluginvSphereUnregister=true|false (ALPHA - 默认值=false)
          +InformerResourceVersion=true|false (ALPHA - 默认值=false)
          JobBackoffLimitPerIndex=true|false (BETA - 默认值=true)
          JobPodFailurePolicy=true|false (BETA - 默认值=true)
          +JobManagedBy=true|false (ALPHA - 默认值=false)
          JobPodReplacementPolicy=true|false (BETA - 默认值=true)
          -KubeProxyDrainingTerminatingNodes=true|false (ALPHA - 默认值=false)
          +JobSuccessPolicy=true|false (ALPHA - 默认值=false)
          +KubeProxyDrainingTerminatingNodes=true|false (BETA - 默认值=true)
          KubeletCgroupDriverFromCRI=true|false (ALPHA - 默认值=false)
          KubeletInUserNamespace=true|false (ALPHA - 默认值=false)
          KubeletPodResourcesDynamicResources=true|false (ALPHA - 默认值=false)
          KubeletPodResourcesGet=true|false (ALPHA - 默认值=false)
          KubeletSeparateDiskGC=true|false (ALPHA - 默认值=false)
          KubeletTracing=true|false (BETA - 默认值=true)
          -LegacyServiceAccountTokenCleanUp=true|false (BETA - 默认值=true)
          -LoadBalancerIPMode=true|false (ALPHA - 默认值=false)
          +LoadBalancerIPMode=true|false (BETA - 默认值=true)
          LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值=false)
          LogarithmicScaleDown=true|false (BETA - 默认值=true)
          LoggingAlphaOptions=true|false (ALPHA - 默认值=false)
          @@ -1396,63 +1443,66 @@ MatchLabelKeysInPodTopologySpread=true|false (BETA - 默认值=true)
          MaxUnavailableStatefulSet=true|false (ALPHA - 默认值=false)
          MemoryManager=true|false (BETA - 默认值=true)
          MemoryQoS=true|false (ALPHA - 默认值=false)
          -MinDomainsInPodTopologySpread=true|false (BETA - 默认值=true)
          MultiCIDRServiceAllocator=true|false (ALPHA - 默认值=false)
          +MutatingAdmissionPolicy=true|false (ALPHA - 默认值=false)
          NFTablesProxyMode=true|false (ALPHA - 默认值=false)
          -NewVolumeManagerReconstruction=true|false (BETA - 默认值=true)
          NodeInclusionPolicyInPodTopologySpread=true|false (BETA - 默认值=true)
          -NodeLogQuery=true|false (ALPHA - 默认值=false)
          -NodeSwap=true|false (BETA - 默认值=false)
          +NodeLogQuery=true|false (BETA - 默认值=false)
          +NodeSwap=true|false (BETA - 默认值=true)
          OpenAPIEnums=true|false (BETA - 默认值=true)
          PDBUnhealthyPodEvictionPolicy=true|false (BETA - 默认值=true)
          PersistentVolumeLastPhaseTransitionTime=true|false (BETA - 默认值=true)
          PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值=false)
          PodDeletionCost=true|false (BETA - 默认值=true)
          PodDisruptionConditions=true|false (BETA - 默认值=true)
          -PodHostIPs=true|false (BETA - 默认值=true)
          PodIndexLabel=true|false (BETA - 默认值=true)
          -PodLifecycleSleepAction=true|false (ALPHA - 默认值=false)
          +PodLifecycleSleepAction=true|false (BETA - 默认值=true)
          PodReadyToStartContainersCondition=true|false (BETA - 默认值=true)
          -PodSchedulingReadiness=true|false (BETA - 默认值=true)
          +PortForwardWebsockets=true|false (ALPHA - 默认值=false)
          ProcMountType=true|false (ALPHA - 默认值=false)
          QOSReserved=true|false (ALPHA - 默认值=false)
          RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值=false)
          +RecursiveReadOnlyMounts=true|false (ALPHA - 默认值=false)
          +RelaxedEnvironmentVariableValidation=true|false (ALPHA - 默认值=false)
          +RetryGenerateName=true|false (ALPHA - 默认值=false)
          RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
          RuntimeClassInImageCriApi=true|false (ALPHA - 默认值=false)
          +SELinuxMount=true|false (ALPHA - 默认值=false)
          SELinuxMountReadWriteOncePod=true|false (BETA - 默认值=true)
          SchedulerQueueingHints=true|false (BETA - 默认值=false)
          -SecurityContextDeny=true|false (ALPHA - 默认值=false)
          +SeparateCacheWatchRPC=true|false (BETA - 默认值=true)
          SeparateTaintEvictionController=true|false (BETA - 默认值=true)
          -ServiceAccountTokenJTI=true|false (ALPHA - 默认值=false)
          +ServiceAccountTokenJTI=true|false (BETA - 默认值=true)
          ServiceAccountTokenNodeBinding=true|false (ALPHA - 默认值=false)
          -ServiceAccountTokenNodeBindingValidation=true|false (ALPHA - 默认值=false)
          -ServiceAccountTokenPodNodeInfo=true|false (ALPHA - 默认值=false)
          -SidecarContainers=true|false (BETA - 默认值=true)
          +ServiceAccountTokenNodeBindingValidation=true|false (BETA - 默认值=true)
          +ServiceAccountTokenPodNodeInfo=true|false (BETA - 默认值=true)
          +ServiceTrafficDistribution=true|false (ALPHA - 默认值=false)
          SizeMemoryBackedVolumes=true|false (BETA - 默认值=true)
          -StableLoadBalancerNodeSet=true|false (BETA - 默认值=true)
          StatefulSetAutoDeletePVC=true|false (BETA - 默认值=true)
          StatefulSetStartOrdinal=true|false (BETA - 默认值=true)
          +StorageNamespaceIndex=true|false (BETA - 默认值=true)
          StorageVersionAPI=true|false (ALPHA - 默认值=false)
          -StorageVersionHash=true|false (BETA - 默认值=true)
          -StructuredAuthenticationConfiguration=true|false (ALPHA - 默认值=false)
          -StructuredAuthorizationConfiguration=true|false (ALPHA - 默认值=false)
          +StorageVersionMigrator=true|false (ALPHA - 默认值=false)
          +StructuredAuthenticationConfiguration=true|false (BETA - 默认值=true)
          +StructuredAuthorizationConfiguration=true|false (BETA - 默认值=true)
          TopologyAwareHints=true|false (BETA - 默认值=true)
          TopologyManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
          TopologyManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
          TopologyManagerPolicyOptions=true|false (BETA - 默认值=true)
          -TranslateStreamCloseWebsocketRequests=true|false (ALPHA - 默认值=false)
          +TranslateStreamCloseWebsocketRequests=true|false (BETA - 默认值=true)
          UnauthenticatedHTTP2DOSMitigation=true|false (BETA - 默认值=true)
          UnknownVersionInteroperabilityProxy=true|false (ALPHA - 默认值=false)
          -UserNamespacesPodSecurityStandards=true|false (ALPHA - 默认值=false)
          +UserNamespacesSupport=true|false (BETA - 默认值=false)
          UserNamespacesSupport=true|false (ALPHA - 默认值=false)
          ValidatingAdmissionPolicy=true|false (BETA - 默认值=false)
          VolumeAttributesClass=true|false (ALPHA - 默认值=false)
          VolumeCapacityPriority=true|false (ALPHA - 默认值=false)
          +WatchFromStorageWithoutResourceVersion=true|false (BETA - 默认值=false)
          WatchList=true|false (ALPHA - 默认值=false)
          +WatchListClient=true|false (BETA - 默认值=false)
          WinDSR=true|false (ALPHA - 默认值=false)
          WinOverlay=true|false (BETA - 默认值=true)
          -WindowsHostNetwork=true|false (ALPHA - 默认值=true)
          -ZeroLimitedNominalConcurrencyShares=true|false (BETA - 默认值=false) +WindowsHostNetwork=true|false (ALPHA - 默认值=true)

          @@ -1626,6 +1676,44 @@ Maximum number of seconds between log flushes + +--log-text-info-buffer-size quantity + + + +

          + +[Alpha] 在具有分割输出流的文本格式中,信息消息可以被缓冲一段时间以提高性能。 +默认值零字节表示禁用缓冲区机制。 +大小可以指定为字节数(512)、1000 的倍数(1K)、1024 的倍数(2Ki)或它们的幂(3M、4G、5Mi、6Gi)。 +启用 LoggingAlphaOptions 特性门控以使用此功能。 +

          + + + + +--log-text-split-stream + + + +

          + +[Alpha] 以文本格式,将错误消息写入 stderr,将信息消息写入 stdout。 +默认是将单个流写入标准输出。 +启用 LoggingAlphaOptions 特性门控以使用它。 +

          + + + --logging-format string     默认值:"text" @@ -2393,16 +2481,15 @@ Comma-separated list of cipher suites for the server. If omitted, the default Go cipher suites will be used.
          Preferred values: TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, -TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384.
          -Insecure values: -TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_RC4_128_SHA. +TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256.
          +Insecure values: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_RC4_128_SHA. --> 服务器的密码套件的列表,以逗号分隔。如果省略,将使用默认的 Go 密码套件。
          首选值: -TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、 -TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384。 +TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、 +TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256。
          不安全的值有: -TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_RC4_128_SHA。 +TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384、TLS_RSA_WITH_RC4_128_SHA。 @@ -2535,10 +2622,11 @@ Enable watch caching in the apiserver +

          -

          某些资源(Pod、Node 等)的监视缓存大小设置,以逗号分隔。 +某些资源(Pod、Node 等)的监视缓存大小设置,以逗号分隔。 每个资源对应的设置格式:resource[.group]#size,其中 resource 为小写复数(无版本), 对于 apiVersion v1(旧版核心 API)的资源要省略 group, @@ -2546,9 +2634,8 @@ Enable watch caching in the apiserver 此选项仅对 API 服务器中的内置资源生效,对 CRD 定义的资源或从外部服务器接入的资源无效。 启用 watch-cache 时仅查询此选项。 这里能生效的 size 设置只有 0,意味着禁用关联资源的 watch-cache。 -所有的非零值都等效,意味着不禁用该资源的watch-cache

          - - +所有的非零值都等效,意味着不禁用该资源的watch-cache。 +

          From 34eb5c6592fbfff5a98057e87212f71695c0c1f8 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Fri, 3 May 2024 18:27:39 +0600 Subject: [PATCH 0459/1086] Update version-skew-policy.md --- content/bn/releases/version-skew-policy.md | 31 +++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/content/bn/releases/version-skew-policy.md b/content/bn/releases/version-skew-policy.md index 895b2584c6..8a9a65289d 100644 --- a/content/bn/releases/version-skew-policy.md +++ b/content/bn/releases/version-skew-policy.md @@ -9,11 +9,36 @@ reviewers: title: সংস্করণ স্কেও(Skew) নীতি type: docs description: > - বিভিন্ন কুবারনেটিস উপাদানের মধ্যে সর্বাধিক সংস্করণ স্ক্যু (skew) সমর্থিত। + বিভিন্ন কুবারনেটিসের উপাদানগুলির মধ্যে সমর্থিত সর্বাধিক সংস্করণ স্ক্যু(skew)। --- -এই ডকুমেন্টটি কুবারনেটিসের বিভিন্ন উপাদানের মধ্যে সমর্থিত সর্বাধিক সংস্করণের স্ক্যু বর্ণনা করে। - +এই ডকুমেন্টটি বিভিন্ন কুবারনেটিসের উপাদানগুলির মধ্যে সমর্থিত সর্বাধিক সংস্করণ স্ক্যু(skew) বর্ণনা করে। +নির্দিষ্ট ক্লাস্টার সরঞ্জামগুলি সংস্করণ স্ক্যুতে(skew) অতিরিক্ত সীমাবদ্ধতা স্থাপন করতে পারে৷ + +## সমর্থিত সংস্করণগুলি + +কুবারনেটিস সংস্করণ **x.y.z** হিসাবে প্রকাশ করা হয়, +যেখানে **x** হল মুখ্য সংস্করণ, **y** হল গৌণ সংস্করণ এবং **z** হল প্যাচ ভার্সন (patch version), +যা [শব্দার্থিক সংস্করণ](https://semver.org/) পরিভাষা অনুসরণ করে হয়। অতিরিক্ত তথ্যসমূহের জন্য, দেখুন +[কুবারনেটিস রিলিজ সংস্করণ](https://git.k8s.io/sig-release/release-engineering/versioning.md#kubernetes-release-versioning). + +কুবারনেটিস প্রজেক্ট সাম্প্রতিক তিনটি পর্যন্ত ছোট রিলিজের জন্য রিলিজ শাখা বজায় রাখে +({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}})। +কুবারনেটিস 1.19 এবং নতুন ভার্সন [আনুমানিক 1 বছরের প্যাচ সাপোর্ট পায়(patch support)](/bn/releases/patch-releases/#support-period) +কুবারনেটিস 1.18 এবং তার বেশি বয়সীরা প্রায় 9 মাস প্যাচ সাপোর্ট (patch support) পেয়েছে। + +প্রযোজ্য সংশোধন, নিরাপত্তা সংশোধন সহ, তীব্রতা এবং সম্ভাব্যতার উপর নির্ভর করে, +সেই তিনটি রিলিজ শাখায় ব্যাকপোর্ট করা যেতে পারে। প্যাচ রিলিজগুলি এই শাখাগুলি থেকে একটি +[নিয়মিত ক্যাডেন্স](/bn/releases/patch-releases/#cadence) এ কাটা হয়, এবং প্রয়োজনে অতিরিক্ত জরুরী রিলিজগুলি। + +এ [রিলিজ ম্যানেজার](/bn/releases/release-managers/) গ্রুপ এই সিদ্ধান্তের মালিক। + +আরও তথ্যের জন্য, কুবারনেটিস [প্যাচ রিলিজ](/bn/releases/patch-releases/) পৃষ্ঠাটি দেখুন। + +## সমর্থিত সংস্করণ স্ক্যু(skew) + +### কুবে-এপিসার্ভার (kube-apiserver) + From 141eac2ac8dfd32ab2b84bbb260d0f38d423157a Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Thu, 2 May 2024 17:09:23 +0800 Subject: [PATCH 0460/1086] sync kubeadm-certs.md Signed-off-by: xin.li --- .../kubeadm/kubeadm-certs.md | 552 ++++++++++++++++-- 1 file changed, 500 insertions(+), 52 deletions(-) diff --git a/content/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md b/content/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md index 0ced108885..f9e2e3fb11 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md +++ b/content/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md @@ -82,16 +82,92 @@ CA key on disk. 否则,kubeadm 将独立运行 controller-manager,附加一个 `--controllers=csrsigner` 的参数,并且指明 CA 证书和密钥。 +使用外部 CA 模式时,有多种方法可以准备组件证书。 + -[PKI 证书和要求](/zh-cn/docs/setup/best-practices/certificates/)包括集群使用外部 -CA 的设置指南。 +### 手动准备组件证书 + +[PKI 证书和要求](/zh-cn/docs/setup/best-practices/certificates/)包含有关如何手动准备 +kubeadm 组件证书所需的所有信息。 + + +### 通过签署 kubeadm 生成的 CSR 来准备证书 + +kubeadm 可以[生成 CSR 文件](#signing-csr),你可以使用 `openssl` 和外部 CA 等工具手动签署这些文件。 +这些 CSR 文件将包含 kubeadm 部署的组件所需的所有证书规范。 + + +### 使用 kubeadm 阶段自动准备组件证书 + +或者,可以使用 kubeadm 阶段命令来自动化此过程。 + + +- 登录到将作为具有外部 CA 的 kubeadm 控制平面节点的主机。 +- 将外部 CA 文件 `ca.crt` 和 `ca.key` 复制到节点上的 `/etc/kubernetes/pki` 目录中。 +- 准备一个名为 `config.yaml` 的临时 [kubeadm 配置文件](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file), + 该文件可以用在 `kubeadm init` 命令中。确保此文件包含可包含在证书中的集群范围或特定于主机的所有重要信息, + 例如 `ClusterConfiguration.controlPlaneEndpoint`、`ClusterConfiguration.certSANs` 和 `InitConfiguration.APIEndpoint`。 +- 在同一主机上执行命令 `kubeadm init stage kubeconfig all --config config.yaml` 和 + `kubeadm init stage certs all --config config.yaml`。 + 这些操作将在 `/etc/kubernetes/` 及其 `pki` 子目录下生成所有必需的 kubeconfig 文件和证书。 + +- 检查所生成的文件。删除 `/etc/kubernetes/pki/ca.key`,删除或移动 `/etc/kubernetes/super-admin.conf` 文件到安全的位置。 +- 在将执行 `kubeadm join` 的节点上还需要删除 `/etc/kubernetes/kubelet.conf`, + 仅在将执行 `kubeadm init` 的第一个节点上需要此文件。 +- 请注意,一些文件如 `pki/sa.*`、`pki/front-proxy-ca.*` 和 `pki/etc/ca.*` + 在控制平面各节点上是相同的,你可以一次性生成它们并[手动将其分发](/zh-cn/docs/setup/production-environment/tools/kubeadm/high-availability/#manual-certs)到将执行 + `kubeadm join` 的节点,或者你可以使用 `kubeadm init` 的 [`--upload-certs`](/zh-cn/docs/setup/product-environment/tools/kubeadm/high-availability/#stacked-control-plane-and-etcd-nodes) + 和 `kubeadm join` 的 `--certificate-key` 特性来执行自动分发。 + + +在所有节点上准备好证书后,调用 `kubeadm init` 和 `kubeadm join` 命令将这些节点加入集群。 +kubeadm 将使用 `/etc/kubernetes/` 及其 `pki` 子目录下现有的 kubeconfig 和证书文件。 有关使用 Kubernetes API 创建 CSR 的信息, -请参见[创建 CertificateSigningRequest](/zh-cn/docs/reference/access-authn-authz/certificate-signing-requests/#create-certificatesigningrequest)。 +请参见[创建 CertificateSigningRequest](/zh-cn/docs/reference/access-authn-authz/certificate-signing-requests/#create-certificatessigningrequest)。 -### 创建证书签名请求 (CSR) {#create-certificate-signing-requests-csr-1} +### 使用证书签名请求(CSR)续订 -你可以通过 `kubeadm certs renew --csr-only` 命令创建证书签名请求。 - -CSR 和随附的私钥都在输出中给出。 -你可以传入一个带有 `--csr-dir` 的目录,将 CSR 输出到指定位置。 -如果未指定 `--csr-dir`,则使用默认证书目录(`/etc/kubernetes/pki`)。 - - -证书可以通过 `kubeadm certs renew --csr-only` 来续订。 -和 `kubeadm init` 一样,可以使用 `--csr-dir` 标志指定一个输出目录。 - - -CSR 中包含一个证书的名字,域和 IP,但是未指定用法。 -颁发证书时,CA 有责任指定[正确的证书用法](/zh-cn/docs/setup/best-practices/certificates/#all-certificates) - - -* 在 `openssl` 中,这是通过 - [`openssl ca` 命令](https://superuser.com/questions/738612/openssl-ca-keyusage-extension) - 来完成的。 -* 在 `cfssl` 中,这是通过 - [在配置文件中指定用法](https://github.com/cloudflare/cfssl/blob/master/doc/cmd/cfssl.txt#L170) - 来完成的。 - - -使用首选方法对证书签名后,必须将证书和私钥复制到 PKI 目录(默认为 `/etc/kubernetes/pki`)。 +可以通过生成新的 CSR 并使用外部 CA 对其进行签名来对证书进行续约。 +有关使用 kubeadm 生成的 CSR 的更多详细信息,请参阅[对 kubeadm 生成的证书签名请求(CSR)进行签名](#signing-csr)部分。 +## 签署由 kubeadm 生成的证书签名请求(CSR) {#signing-csr} + +`kubeadm certs generate-csr` 命令为 kubeadm 所了解并管理的所有证书生成 CSR。 +调用此命令将为常规证书生成 `.csr` / `.key` 文件对。 +对于嵌入在 kubeconfig 文件中的证书,该命令将生成一个 `.csr` / `.conf` 对, +其中密钥已嵌入在 `.conf` 文件中。 + + +CSR 文件包含 CA 签署证书的所有相关信息。 +kubeadm 对其所有证书和 CSR 使用[明确定义的规约](/zh-cn/docs/setup/best-practices/certificates/#all-certificates)。 + + +默认证书目录是 `/etc/kubernetes/pki`,而 kubeconfig 文件的默认目录是 `/etc/kubernetes`。 +这些默认值可以分别使用标志 `--cert-dir` 和 `--kubeconfig-dir` 覆盖。 + + +`kubeadm certs generate-csr` 命令为 kubeadm 所了解并管理的所有证书生成 CSR。 +该标志接受 [kubeadm 配置](/zh-cn/docs/reference/config-api/kubeadm-config.v1beta3/)文件, +与诸如 `kubeadm init` 这类命令相似。 +所有规约(例如额外的 SAN 和自定义 IP 地址)都必须存储在同一配置文件中, +并通过将其作为 `--config` 传递来用于所有相关的 kubeadm 命令。 + +{{< note >}} + +本指南将介绍如何使用 `openssl` 命令来执行 CSR,但你可以使用你喜欢的工具。 +{{< /note >}} + +{{< note >}} + +本指南将使用默认的 Kubernetes 目录 `/etc/kubernetes`,需要超级用户权限。 +如果你按照本指南使用访问权限较低的目录(通过指定 `--cert-dir` 和 `--kubeconfig-dir`),可以省略 `sudo` 命令。 +但请注意,生成的文件必须被复制到 `/etc/kubernetes` 目录下,以便 `kubeadm init` +或 `kubeadm join` 能够找到它们。 +{{< /note >}} + + +### 准备 CA 和服务帐户文件 + +在将执行` kubeadm init` 的主控制平面节点上,执行以下命令: + +```shell +sudo kubeadm init phase certs ca +sudo kubeadm init phase certs etcd-ca +sudo kubeadm init phase certs front-proxy-ca +sudo kubeadm init phase certs sa +``` + + +这些操作将使用 kubeadm 所需的所有自签名 CA 文件(证书和密钥) +以及服务帐户(公钥和私钥)填充控制平面节点的 `/etc/kubernetes/pki` +和 `/etc/kubernetes/pki/etcd` 目录。 + +{{< note >}} + +如果你使用外部 CA,则必须在带外生成相同的文件,并手动将它们复制到 +主控制平面节点上的 `/etc/kubernetes`。 +所有 CSR 被签名后,你可以删除根 CA 密钥(`ca.key`),如[外部 CA 模式](#external-ca-mode)部分中所述。 +{{< /note >}} + + +对于辅助控制平面节点(`kubeadm join --control-plane`),无需执行前述命令。 +根据你部署[高可用](/zh-cn/docs/setup/production-environment/tools/kubeadm/high-availability)集群的方式, +你要么从主控制平面节点手动复制相同的文件,要么使用 `kubeadm init` 的 `--upload-certs` 特性实现自动化分发。 + + +### 生成 CSR {#generate-csrs} + +`kubeadm certs generate-csr` 命令为 kubeadm 所了解并管理的所有证书生成 CSR。 +命令完成后,你必须手动删除不需要的 `.csr`、`.conf` 或 `.key` 文件。 + + +#### kubelet.conf 的注意事项 {#considerations-kubelet-conf} + +本节适用于控制平面和工作节点。 + +如果你从控制平面节点([外部 CA 模式](#external-ca-mode))上删除了 `ca.key` 文件, +则该集群中的运行的 kube-controller-manager 将无法签署 kubelet 客户端证书。 +如果你的设置中不存在用于签署这些证书的外部方法 +(例如[外部签名者](#set-up-a-signer)),你可以按照本指南中的说明手动签署 `kubelet.conf.csr`。 + + +请注意,这也意味着自动 [kubelet 客户端证书轮换](/zh-cn/docs/tasks/tls/certificate-rotation/#enabling-client-certificate-rotation)将被禁用。 +如果是这样,在证书即将到期时,你必须生成新的 `kubelet.conf.csr`,签署证书, +将其嵌入到 `kubelet.conf` 中并重新启动 kubelet。 + +如果这不适用于你的配置,你可以跳过在辅助控制平面和工作节点 +(调用 `kubeadm join ...` 的所有节点)上处理 `kubelet.conf.csr`。 +这是因为所运行的 kube-controller-manager 将负责签署新的 kubelet 客户端证书。 + +{{< note >}} + +你仍需要在主控制平面节点(`kubeadm init`)上处理 `kubelet.conf.csr`, +因为该节点被视为引导集群的节点,并且需要预先填充的 `kubelet.conf`。 +{{< /note >}} + + +#### 控制平面节点 + +在主(`kubeadm init`)和辅助(`kubeadm join --control-plane`) +控制平面节点上执行以下命令以生成所有 CSR 文件: + +```shell +sudo kubeadm certs generate-csr +``` + + +如果要使用外部 etcd,请阅读 [kubeadm 使用外部 etcd](/zh-cn/docs/setup/production-environment/tools/kubeadm/high-availability/#external-etcd-nodes)指南了解 +kubeadm 和 etcd 节点上需要哪些 CSR 文件。 +你可以删除 `/etc/kubernetes/pki/etcd` 下的其他 `.csr` 和 `.key` 文件。 + +根据 [kubelet.conf 的注意事项](#considerations-kubelet-conf)中的说明, +你可以决定保留或删除 `kubelet.conf` 和 `kubelet.conf.csr` 文件。 + + +#### 工作节点 + +根据 [kubelet.conf 的注意事项](#considerations-kubelet-conf)中的解释,可以选择执行: + +```shell +sudo kubeadm certs generate-csr +``` + + +并仅保留 `kubelet.conf` 和 `kubelet.conf.csr` 文件, +或者完全跳过工作节点的步骤。 + + +### 签署所有证书的 CSR + +{{< note >}} + +如果你使用外部 CA 并且已经拥有 `openssl` 的 CA 序列号文件(`.srl`), +你可以将此类文件复制到将处理 CSR 的 kubeadm 节点。 +要复制的 `.srl` 文件有 `/etc/kubernetes/pki/ca.srl`、`/etc/kubernetes/pki/front-proxy-ca.srl` +和 `/etc/kubernetes/pki/etcd/ca.srl`。 +然后可以将文件移动到将处理 CSR 文件的新节点。 + +如果节点上的 CA 缺少 `.srl` 文件,下面的脚本将生成一个具有随机起始序列号的新 SRL 文件。 + +要了解有关 `.srl` 文件的更多信息,请参阅 `--CAserial` 标志的 +[`openssl`](https://www.openssl.org/docs/man3.0/man1/openssl-x509.html) 文档。 +{{< /note >}} + + +对具有 CSR 文件的所有节点重复此步骤。 + +在 `/etc/kubernetes` 目录中编写以下脚本,进入该目录并执行该脚本。 +该脚本将为 `/etc/kubernetes` 目录下存在的所有 CSR 文件生成证书。 + + +```bash +#!/bin/bash + +# 设置证书过期时间(以天为单位) +DAYS=365 + +# 处理除 front-proxy 和 etcd 之外的所有 CSR 文件 +find ./ -name "*.csr" | grep -v "pki/etcd" | grep -v "front-proxy" | while read -r FILE; +do + echo "* Processing ${FILE} ..." + FILE=${FILE%.*} # 修剪扩展名 + if [ -f "./pki/ca.srl" ]; then + SERIAL_FLAG="-CAserial ./pki/ca.srl" + else + SERIAL_FLAG="-CAcreateserial" + fi + openssl x509 -req -days "${DAYS}" -CA ./pki/ca.crt -CAkey ./pki/ca.key ${SERIAL_FLAG} \ + -in "${FILE}.csr" -out "${FILE}.crt" + sleep 2 +done + +# 处理所有 etcd CSR +find ./pki/etcd -name "*.csr" | while read -r FILE; +do + echo "* Processing ${FILE} ..." + FILE=${FILE%.*} # 修剪扩展名 + if [ -f "./pki/etcd/ca.srl" ]; then + SERIAL_FLAG=-CAserial ./pki/etcd/ca.srl + else + SERIAL_FLAG=-CAcreateserial + fi + openssl x509 -req -days "${DAYS}" -CA ./pki/etcd/ca.crt -CAkey ./pki/etcd/ca.key ${SERIAL_FLAG} \ + -in "${FILE}.csr" -out "${FILE}.crt" +done + +# 处理前端代理 CSR +echo "* Processing ./pki/front-proxy-client.csr ..." +openssl x509 -req -days "${DAYS}" -CA ./pki/front-proxy-ca.crt -CAkey ./pki/front-proxy-ca.key -CAcreateserial \ + -in ./pki/front-proxy-client.csr -out ./pki/front-proxy-client.crt +``` + + +### 在 kubeconfig 文件中嵌入证书 + +对具有 CSR 文件的所有节点重复此步骤。 + +在 `/etc/kubernetes` 目录中编写以下脚本,进入该目录并执行脚本。 +此脚本将基于上一步从 CSR 中得到为 kubeconfig 文件签名的 `.crt` 文件, +并将它们嵌入到 kubeconfig 文件中。 + +```bash +#!/bin/bash + +CLUSTER=kubernetes +find ./ -name "*.conf" | while read -r FILE; +do + echo "* Processing ${FILE} ..." + KUBECONFIG="${FILE}" kubectl config set-cluster "${CLUSTER}" --certificate-authority ./pki/ca.crt --embed-certs + USER=$(KUBECONFIG="${FILE}" kubectl config view -o jsonpath='{.users[0].name}') + KUBECONFIG="${FILE}" kubectl config set-credentials "${USER}" --client-certificate "${FILE}.crt" --embed-certs +done +``` + + +### 执行清理 {#post-csr-cleanup} + +在具有 CSR 文件的所有节点上执行此步骤。 + +在 `/etc/kubernetes` 目录中编写以下脚本,进入该目录并执行脚本。 + + +```bash +#!/bin/bash + +# 清理 CSR 文件 +rm -f ./*.csr ./pki/*.csr ./pki/etcd/*.csr # 清理所有 CSR 文件 + +# 清理已嵌入 kubeconfig 文件中的 CRT 文件 +rm -f ./*.crt +``` + + +(可选)将 `.srl` 文件移动到下一个要处理的节点。 + +或者,如果使用外部 CA,请删除 `/etc/kubernetes/pki/ca.key` 文件, +如[外部 CA 节点](#external-ca-mode)部分中所述。 + + +### kubeadm 节点初始化 + +一旦 CSR 文件被签名并且所需的证书在要用作节点的主机上就位,你就可以使用命令 +`kubeadm init` 和 `kubeadm join` 使用这些节点创建 Kubernetes 集群。 +在 `init` 和 `join` 期间,kubeadm 使用在主机本地文件系统的 +`/etc/kubernetes` 目录中找到的现有证书、加密密钥和 kubeconfig 文件。 From 5ccd4301acd2ba47b1eaa6ff09c585e46486b234 Mon Sep 17 00:00:00 2001 From: windsonsea Date: Fri, 3 May 2024 21:20:38 +0800 Subject: [PATCH 0461/1086] [zh] Remove manage-deployment.md after relocation --- .../manage-deployment.md | 664 ------------------ 1 file changed, 664 deletions(-) delete mode 100644 content/zh-cn/docs/concepts/cluster-administration/manage-deployment.md diff --git a/content/zh-cn/docs/concepts/cluster-administration/manage-deployment.md b/content/zh-cn/docs/concepts/cluster-administration/manage-deployment.md deleted file mode 100644 index d443a36f00..0000000000 --- a/content/zh-cn/docs/concepts/cluster-administration/manage-deployment.md +++ /dev/null @@ -1,664 +0,0 @@ ---- -title: 管理资源 -content_type: concept -weight: 40 ---- - - - - - -你已经部署了应用并通过服务暴露它。然后呢? -Kubernetes 提供了一些工具来帮助管理你的应用部署,包括扩缩容和更新。 - - - - -## 组织资源配置 {#organizing-resource-config} - -许多应用需要创建多个资源,例如 Deployment 和 Service。 -可以通过将多个资源组合在同一个文件中(在 YAML 中以 `---` 分隔) -来简化对它们的管理。例如: - -{{% code file="application/nginx-app.yaml" %}} - - -可以用创建单个资源相同的方式来创建多个资源: - -```shell -kubectl apply -f https://k8s.io/examples/application/nginx-app.yaml -``` - -```none -service/my-nginx-svc created -deployment.apps/my-nginx created -``` - - -资源将按照它们在文件中的顺序创建。 -因此,最好先指定服务,这样在控制器(例如 Deployment)创建 Pod 时能够 -确保调度器可以将与服务关联的多个 Pod 分散到不同节点。 - - -`kubectl apply` 也接受多个 `-f` 参数: - -```shell -kubectl apply -f https://k8s.io/examples/application/nginx/nginx-svc.yaml \ - -f https://k8s.io/examples/application/nginx/nginx-deployment.yaml -``` - - -建议的做法是,将同一个微服务或同一应用层相关的资源放到同一个文件中, -将同一个应用相关的所有文件按组存放到同一个目录中。 -如果应用的各层使用 DNS 相互绑定,你可以将堆栈的所有组件一起部署。 - -还可以使用 URL 作为配置源,便于直接使用已经提交到 GitHub 上的配置文件进行部署: - -```shell -kubectl apply -f https://k8s.io/examples/application/nginx/nginx-deployment.yaml -``` - -```none -deployment.apps/my-nginx created -``` - - -## kubectl 中的批量操作 {#bulk-operations-in-kubectl} - -资源创建并不是 `kubectl` 可以批量执行的唯一操作。 -`kubectl` 还可以从配置文件中提取资源名,以便执行其他操作, -特别是删除你之前创建的资源: - -```shell -kubectl delete -f https://k8s.io/examples/application/nginx-app.yaml -``` - -```none -deployment.apps "my-nginx" deleted -service "my-nginx-svc" deleted -``` - - -在仅有两种资源的情况下,你可以使用"资源类型/资源名"的语法在命令行中 -同时指定这两个资源: - -```shell -kubectl delete deployments/my-nginx services/my-nginx-svc -``` - - -对于资源数目较大的情况,你会发现使用 `-l` 或 `--selector` -指定筛选器(标签查询)能很容易根据标签筛选资源: - -```shell -kubectl delete deployment,services -l app=nginx -``` - -```none -deployment.apps "my-nginx" deleted -service "my-nginx-svc" deleted -``` - - -由于 `kubectl` 用来输出资源名称的语法与其所接受的资源名称语法相同, -你可以使用 `$()` 或 `xargs` 进行链式操作: - -```shell -kubectl get $(kubectl create -f docs/concepts/cluster-administration/nginx/ -o name | grep service) -kubectl create -f docs/concepts/cluster-administration/nginx/ -o name | grep service | xargs -i kubectl get {} -``` - -```none -NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE -my-nginx-svc LoadBalancer 10.0.0.208 80/TCP 0s -``` - - -上面的命令中,我们首先使用 `examples/application/nginx/` 下的配置文件创建资源, -并使用 `-o name` 的输出格式(以"资源/名称"的形式打印每个资源)打印所创建的资源。 -然后,我们通过 `grep` 来过滤 "service",最后再打印 `kubectl get` 的内容。 - - -如果你碰巧在某个路径下的多个子路径中组织资源,那么也可以递归地在所有子路径上 -执行操作,方法是在 `--filename,-f` 后面指定 `--recursive` 或者 `-R`。 - - -例如,假设有一个目录路径为 `project/k8s/development`,它保存开发环境所需的 -所有{{< glossary_tooltip text="清单" term_id="manifest" >}},并按资源类型组织: - -```none -project/k8s/development -├── configmap -│   └── my-configmap.yaml -├── deployment -│   └── my-deployment.yaml -└── pvc - └── my-pvc.yaml -``` - - -默认情况下,对 `project/k8s/development` 执行的批量操作将停止在目录的第一级, -而不是处理所有子目录。 -如果我们试图使用以下命令在此目录中创建资源,则会遇到一个错误: - -```shell -kubectl apply -f project/k8s/development -``` - -```none -error: you must provide one or more resources by argument or filename (.json|.yaml|.yml|stdin) -``` - - -正确的做法是,在 `--filename,-f` 后面标明 `--recursive` 或者 `-R` 之后: - -```shell -kubectl apply -f project/k8s/development --recursive -``` - -```none -configmap/my-config created -deployment.apps/my-deployment created -persistentvolumeclaim/my-pvc created -``` - - -`--recursive` 可以用于接受 `--filename,-f` 参数的任何操作,例如: -`kubectl {create,get,delete,describe,rollout}` 等。 - -有多个 `-f` 参数出现的时候,`--recursive` 参数也能正常工作: - -```shell -kubectl apply -f project/k8s/namespaces -f project/k8s/development --recursive -``` - -```none -namespace/development created -namespace/staging created -configmap/my-config created -deployment.apps/my-deployment created -persistentvolumeclaim/my-pvc created -``` - - -如果你有兴趣进一步学习关于 `kubectl` 的内容,请阅读[命令行工具(kubectl)](/zh-cn/docs/reference/kubectl/)。 - - -## 金丝雀部署(Canary Deployments) {#canary-deployments} - - - - -另一个需要多标签的场景是用来区分同一组件的不同版本或者不同配置的多个部署。 -常见的做法是部署一个使用*金丝雀发布*来部署新应用版本 -(在 Pod 模板中通过镜像标签指定),保持新旧版本应用同时运行。 -这样,新版本在完全发布之前也可以接收实时的生产流量。 - - -例如,你可以使用 `track` 标签来区分不同的版本。 - -主要稳定的发行版将有一个 `track` 标签,其值为 `stable`: - -```none -name: frontend -replicas: 3 -... -labels: - app: guestbook - tier: frontend - track: stable -... -image: gb-frontend:v3 -``` - - -然后,你可以创建 guestbook 前端的新版本,让这些版本的 `track` 标签带有不同的值 -(即 `canary`),以便两组 Pod 不会重叠: - -```none -name: frontend-canary -replicas: 1 -... -labels: - app: guestbook - tier: frontend - track: canary -... -image: gb-frontend:v4 -``` - - -前端服务通过选择标签的公共子集(即忽略 `track` 标签)来覆盖两组副本, -以便流量可以转发到两个应用: - -```yaml -selector: - app: guestbook - tier: frontend -``` - - -你可以调整 `stable` 和 `canary` 版本的副本数量,以确定每个版本将接收 -实时生产流量的比例(在本例中为 3:1)。 -一旦有信心,你就可以将新版本应用的 `track` 标签的值从 -`canary` 替换为 `stable`,并且将老版本应用删除。 - - -想要了解更具体的示例,请查看 -[Ghost 部署教程](https://github.com/kelseyhightower/talks/tree/master/kubecon-eu-2016/demo#deploy-a-canary)。 - - -## 更新注解 {#updating-annotations} - -有时,你可能希望将注解附加到资源中。注解是 API 客户端(如工具、库等) -用于检索的任意非标识元数据。这可以通过 `kubectl annotate` 来完成。例如: - -```shell -kubectl annotate pods my-nginx-v4-9gw19 description='my frontend running nginx' -kubectl get pods my-nginx-v4-9gw19 -o yaml -``` - -```shell -apiVersion: v1 -kind: pod -metadata: - annotations: - description: my frontend running nginx -... -``` - - -想要了解更多信息,请参考[注解](/zh-cn/docs/concepts/overview/working-with-objects/annotations/)和 -[`kubectl annotate`](/docs/reference/generated/kubectl/kubectl-commands/#annotate) -命令文档。 - - -## 扩缩你的应用 {#scaling-your-app} - -当应用上的负载增长或收缩时,使用 `kubectl` 能够实现应用规模的扩缩。 -例如,要将 nginx 副本的数量从 3 减少到 1,请执行以下操作: - -```shell -kubectl scale deployment/my-nginx --replicas=1 -``` - -```none -deployment.apps/my-nginx scaled -``` - - -现在,你的 Deployment 管理的 Pod 只有一个了。 - -```shell -kubectl get pods -l app=nginx -``` - -```none -NAME READY STATUS RESTARTS AGE -my-nginx-2035384211-j5fhi 1/1 Running 0 30m -``` - - -想要让系统自动选择需要 nginx 副本的数量,范围从 1 到 3,请执行以下操作: - -```shell -kubectl autoscale deployment/my-nginx --min=1 --max=3 -``` - -```none -horizontalpodautoscaler.autoscaling/my-nginx autoscaled -``` - - -现在,你的 nginx 副本将根据需要自动地增加或者减少。 - -想要了解更多信息,请参考 -[kubectl scale](/docs/reference/generated/kubectl/kubectl-commands/#scale)命令文档、 -[kubectl autoscale](/docs/reference/generated/kubectl/kubectl-commands/#autoscale) -命令文档和[水平 Pod 自动伸缩](/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/)文档。 - - -## 就地更新资源 {#in-place-updates-of-resources} - -有时,有必要对你所创建的资源进行小范围、无干扰地更新。 - -### kubectl apply - - -建议在源代码管理中维护一组配置文件 -(参见[配置即代码](https://martinfowler.com/bliki/InfrastructureAsCode.html)), -这样,它们就可以和应用代码一样进行维护和版本管理。 -然后,你可以用 [`kubectl apply`](/docs/reference/generated/kubectl/kubectl-commands/#apply) -将配置变更应用到集群中。 - - -这个命令将会把推送的版本与以前的版本进行比较,并应用你所做的更改, -但是不会自动覆盖任何你没有指定更改的属性。 - -```shell -kubectl apply -f https://k8s.io/examples/application/nginx/nginx-deployment.yaml -``` - -```none -deployment.apps/my-nginx configured -``` - - -注意,`kubectl apply` 将为资源增加一个额外的注解,以确定自上次调用以来对配置的更改。 -执行时,`kubectl apply` 会在以前的配置、提供的输入和资源的当前配置之间 -找出三方差异,以确定如何修改资源。 - - -目前,新创建的资源是没有这个注解的,所以,第一次调用 `kubectl apply` 时 -将使用提供的输入和资源的当前配置双方之间差异进行比较。 -在第一次调用期间,它无法检测资源创建时属性集的删除情况。 -因此,kubectl 不会删除它们。 - - -所有后续的 `kubectl apply` 操作以及其他修改配置的命令,如 `kubectl replace` -和 `kubectl edit`,都将更新注解,并允许随后调用的 `kubectl apply` -使用三方差异进行检查和执行删除。 - -### kubectl edit - - -或者,你也可以使用 `kubectl edit` 更新资源: - -```shell -kubectl edit deployment/my-nginx -``` - - -这相当于首先 `get` 资源,在文本编辑器中编辑它,然后用更新的版本 `apply` 资源: - -```shell -kubectl get deployment my-nginx -o yaml > /tmp/nginx.yaml -vi /tmp/nginx.yaml -# 做一些编辑,然后保存文件 - -kubectl apply -f /tmp/nginx.yaml -deployment.apps/my-nginx configured - -rm /tmp/nginx.yaml -``` - - -这使你可以更加容易地进行更重大的更改。 -请注意,可以使用 `EDITOR` 或 `KUBE_EDITOR` 环境变量来指定编辑器。 - -想要了解更多信息,请参考 -[kubectl edit](/docs/reference/generated/kubectl/kubectl-commands/#edit) 文档。 - -### kubectl patch - - -你可以使用 `kubectl patch` 来更新 API 对象。此命令支持 JSON patch、 -JSON merge patch、以及 strategic merge patch。 -请参考[使用 kubectl patch 更新 API 对象](/zh-cn/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch/)和 -[kubectl patch](/docs/reference/generated/kubectl/kubectl-commands/#patch)。 - - -## 破坏性的更新 {#disruptive-updates} - -在某些情况下,你可能需要更新某些初始化后无法更新的资源字段,或者你可能只想立即进行递归更改, -例如修复 Deployment 创建的不正常的 Pod。若要更改这些字段,请使用 `replace --force`, -它将删除并重新创建资源。在这种情况下,你可以修改原始配置文件: - -```shell -kubectl replace -f https://k8s.io/examples/application/nginx/nginx-deployment.yaml --force -``` - -```none -deployment.apps/my-nginx deleted -deployment.apps/my-nginx replaced -``` - - -## 在不中断服务的情况下更新应用 {#updating-your-app-without-a-service-outage} - - -在某些时候,你最终需要更新已部署的应用,通常都是通过指定新的镜像或镜像标签, -如上面的金丝雀发布的场景中所示。`kubectl` 支持几种更新操作, -每种更新操作都适用于不同的场景。 - - -我们将指导你通过 Deployment 如何创建和更新应用。 - - -假设你正运行的是 1.14.2 版本的 nginx: - -```shell -kubectl create deployment my-nginx --image=nginx:1.14.2 -``` - -```none -deployment.apps/my-nginx created -``` - - -运行 3 个副本(这样新旧版本可以同时存在) - -```shell -kubectl scale deployment my-nginx --current-replicas=1 --replicas=3 -``` - -```none -deployment.apps/my-nginx scaled -``` - - -要更新到 1.16.1 版本,只需使用我们前面学到的 kubectl 命令将 -`.spec.template.spec.containers[0].image` 从 `nginx:1.14.2` 修改为 `nginx:1.16.1`。 - -```shell -kubectl edit deployment/my-nginx -``` - - -没错,就是这样!Deployment 将在后台逐步更新已经部署的 nginx 应用。 -它确保在更新过程中,只有一定数量的旧副本被开闭,并且只有一定基于所需 Pod 数量的新副本被创建。 -想要了解更多细节,请参考 [Deployment](/zh-cn/docs/concepts/workloads/controllers/deployment/)。 - -## {{% heading "whatsnext" %}} - - -- 学习[如何使用 `kubectl` 观察和调试应用](/zh-cn/docs/tasks/debug/debug-application/debug-running-pod/) -- 阅读[配置最佳实践和技巧](/zh-cn/docs/concepts/configuration/overview/) From 6468e4f9f33d566b167a31a4f9c6eba9ed3e19b6 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Thu, 2 May 2024 18:26:51 +0800 Subject: [PATCH 0462/1086] [zh-cn] Localization blog: 2024-04-23-recursive-read-only-mounts.md Signed-off-by: xin.li --- .../2024-04-23-recursive-read-only-mounts.md | 197 ++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 content/zh-cn/blog/_posts/2024-04-23-recursive-read-only-mounts.md diff --git a/content/zh-cn/blog/_posts/2024-04-23-recursive-read-only-mounts.md b/content/zh-cn/blog/_posts/2024-04-23-recursive-read-only-mounts.md new file mode 100644 index 0000000000..6c1cf7c018 --- /dev/null +++ b/content/zh-cn/blog/_posts/2024-04-23-recursive-read-only-mounts.md @@ -0,0 +1,197 @@ +--- +layout: blog +title: 'Kubernetes 1.30:只读卷挂载终于可以真正实现只读了' +date: 2024-04-23 +slug: recursive-read-only-mounts +--- + +**作者:** Akihiro Suda (NTT) + +**译者:** Xin Li (DaoCloud) + + + + +只读卷挂载从一开始就是 Kubernetes 的一个特性。 +令人惊讶的是,在 Linux 上的某些条件下,只读挂载并不是完全只读的。 +从 v1.30 版本开始,这类卷挂载可以被处理为完全只读;v1.30 为**递归只读挂载**提供 Alpha 支持。 + + +## 默认情况下,只读卷装载并不是真正的只读 + +卷挂载可能看似复杂。 + +你可能期望以下清单使容器中 `/mnt` 下的所有内容变为只读: + +```yaml +--- +apiVersion: v1 +kind: Pod +spec: + volumes: + - name: mnt + hostPath: + path: /mnt + containers: + - volumeMounts: + - name: mnt + mountPath: /mnt + readOnly: true +``` + + +但是,`/mnt` 下的任何子挂载可能仍然是可写的! +例如,假设 `/mnt/my-nfs-server` 在主机上是可写的。 +在容器内部,写入 `/mnt/*` 将被拒绝,但 `/mnt/my-nfs-server/*` 仍然可写。 + + +## 新的挂载选项:递归只读 + +Kubernetes 1.30 添加了一个新的挂载选项 `recursiveReadOnly`,以使子挂载递归只读。 + +可以按如下方式启用该选项: + + +{{< highlight yaml "linenos=false,hl_lines=14-17" >}} +--- +apiVersion: v1 +kind: Pod +spec: + volumes: + - name: mnt + hostPath: + path: /mnt + containers: + - volumeMounts: + - name: mnt + mountPath: /mnt + readOnly: true + # NEW + # 可能的值为 `Enabled`、`IfPossible` 和 `Disabled`。 + # 需要与 `readOnly: true` 一起指定。 + recursiveReadOnly: Enabled +{{< /highlight >}} + + +这是通过使用 Linux 内核 v5.12 中添加的 +[`mount_setattr(2)`](https://man7.org/linux/man-pages/man2/mount_setattr.2.html) +应用带有 `AT_RECURSIVE` 标志的 `MOUNT_ATTR_RDONLY` 属性来实现的。 + +为了向后兼容,`recursiveReadOnly` 字段不是 `readOnly` 的替代品,而是与其结合使用。 +要获得正确的递归只读挂载,你必须设置这两个字段。 + + +## 特性可用性 {#availability} + +要启用 `recursiveReadOnly` 挂载,必须使用以下组件: + + +* Kubernetes:v1.30 或更新版本,并启用 `RecursiveReadOnlyMounts` [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)。 + 从 v1.30 开始,此特性被标记为 Alpha。 + +* CRI 运行时: + * containerd:v2.0 或更新版本 + +* OCI 运行时: + * runc:v1.1 或更新版本 + * crun: v1.8.6 或更新版本 + + + +## 接下来 + +Kubernetes SIG Node 希望并期望该特性将在 Kubernetes +的未来版本中升级为 Beta 版本并最终稳定可用(GA),以便用户不再需要手动启用此特性门控。 + +为了向后兼容,`recursive ReadOnly` 的默认值仍将保持 `Disabled`。 + + +## 怎样才能了解更多? + + + + +请查看[文档](/zh-cn/docs/concepts/storage/volumes/#read-only-mounts)以获取 +`recursiveReadOnly` 挂载的更多详细信息。 + + +## 如何参与? + +此特性由 SIG Node 社区推动。 +请加入我们,与社区建立联系,并分享你对上述特性及其他特性的想法和反馈。 +我们期待你的回音! From 4310d9eee38363f2074bda3553dad9c3dc7d99e6 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Thu, 2 May 2024 17:46:04 +0800 Subject: [PATCH 0463/1086] [zh-cn]sync custom-resource-definitions.md Signed-off-by: xin.li --- .../custom-resource-definitions.md | 179 ++++++++++++++++-- .../shirt-resource-definition.yaml | 36 ++++ .../shirt-resources.yaml | 24 +++ 3 files changed, 226 insertions(+), 13 deletions(-) create mode 100644 content/zh-cn/examples/customresourcedefinition/shirt-resource-definition.yaml create mode 100644 content/zh-cn/examples/customresourcedefinition/shirt-resources.yaml diff --git a/content/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions.md b/content/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions.md index c81975a68d..977dfcc1ab 100644 --- a/content/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions.md +++ b/content/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions.md @@ -1130,15 +1130,16 @@ crontab "my-new-cron-object" created --> ### 验证逐步升级 {#validation-ratcheting} -{{< feature-state state="alpha" for_k8s_version="v1.28" >}} +{{< feature-state feature_gate_name="CRDValidationRatcheting" >}} -你需要启用 `CRDValidationRatcheting` +如果你使用的 Kubernetes 版本早于 v1.30,则需要显式启用 `CRDValidationRatcheting` [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/), 才能使用这种行为,并将其应用到集群中的所有 CustomResourceDefinition。 @@ -1193,19 +1194,23 @@ Kubernetes {{< skew currentVersion >}} 下实现的验证逐步升级不支持 - `x-kubernetes-validations` For Kubernetes 1.28, CRD validation rules](#validation-rules) are ignored by ratcheting. Starting with Alpha 2 in Kubernetes 1.29, `x-kubernetes-validations` - are ratcheted. + are ratcheted only if they do not refer to `oldSelf`. Transition Rules are never ratcheted: only errors raised by rules that do not - use `oldSelf` will be automatically ratcheted if their values are unchanged. + use `oldSelf` will be automatically ratcheted if their values are unchanged. + + To write custom ratcheting logic for CEL expressions, check out [optionalOldSelf](#field-optional-oldself). --> - `x-kubernetes-validations` 在 Kubernetes 1.28 中,CRD [验证规则](#validation-rules)被逐步升级所忽略。 - 从 Kubernetes 1.29 的 Alpha 2 开始,`x-kubernetes-validations` 的检查也用逐步升级机制处理。 + 从 Kubernetes 1.29 中 Alpha 2 开始,`x-kubernetes-validations` 仅在不引用 `oldSelf` 时才会进行调整。 转换规则(Transition Rules)永远不会被逐步升级机制处理:只有那些不使用 `oldSelf` 的规则引发的错误会在其值未更改时自动按逐步升级机制处理。 + 要为 CEL 表达式编写自定义棘轮逻辑,请查看 [optionalOldSelf](#field-optional-oldself)。 + - `additionalProperties` @@ -1255,7 +1262,8 @@ Kubernetes {{< skew currentVersion >}} 下实现的验证逐步升级不支持 - `metadata` - 因更改对象的 `metadata` 中的字段而引起的错误不会被逐步升级机制处理。 + 来自 Kubernetes 对对象 `metadata` 的内置验证的错误不会被逐步调整(例如对象名称或标签值中的字符)。 + 如果你为自定义资源的元数据指定自己的附加规则,则附加验证将逐步加强。 -要使用此字段,必须启用特性 [CRDValidationRatcheting](#validation-ratcheting)。 +如果你的集群未启用 [CRDValidationRatcheting](#validation-ratcheting),则 +CustomResourceDefinition API 不包含此字段,尝试设置它可能会导致错误。 `optionalOldSelf` 字段是一个布尔字段,它会改变下文所述的[转换规则](#transition-rules)的行为。 通常,在对象创建期间或在更新中引入新值时,如果无法确定 `oldSelf`,则不会处理转换规则。 @@ -2620,6 +2630,149 @@ The `NAME` column is implicit and does not need to be defined in the CustomResou `NAME` 列是隐含的,不需要在 CustomResourceDefinition 中定义。 {{< /note >}} + +### 字段选择算符 {#field-selectors} + +[字段选择算符](/zh-cn/docs/concepts/overview/working-with-objects/field-selectors/)允许客户端根据一个或多个资源字段的值选择自定义资源。 + +所有自定义资源都支持 `metadata.name` 和 `metadata.namespace` 字段选择器。 + + +当 {{< glossary_tooltip term_id="CustomResourceDefinition" text="CustomResourceDefinition" >}} +中声明的字段包含在 {{< glossary_tooltip term_id="CustomResourceDefinition" text="CustomResourceDefinition" >}} +的 `spec.versions[*].selectableFields` 字段中时,也可以与字段选择器一起使用。 + + +#### 自定义资源的可选字段 {#crd-selectable-fields} + +{{< feature-state state="alpha" for_k8s_version="v1.30" >}} +{{< feature-state feature_gate_name="CustomResourceFieldSelectors" >}} + + +你需要启用 `CustomResourceFieldSelectors` +[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/) +才能使用此行为,然后该行为将应用于集群中的所有 CustomResourceDefinition。 + +CustomResourceDefinition 的 `spec.versions[*].selectableFields` +字段可用于声明自定义资源中的哪些其他字段可在字段选择器中使用。 +以下示例将 `.spec.color` 和 `.spec.size` 字段添加为可选字段。 + +将 CustomResourceDefinition 保存到 `shirt-resource-definition.yaml`: + +{{% code_sample file="customresourcedefinition/shirt-resource-definition.yaml" %}} + + +创建 CustomResourceDefinition: + +```shell +kubectl apply -f https://k8s.io/examples/customresourcedefinition/shirt-resource-definition.yaml +``` + + +通过编辑 `shirt-resources.yaml` 定义一些 Shirt,例如: + +{{% code_sample file="customresourcedefinition/shirt-resources.yaml" %}} + + +创建自定义资源: + +```shell +kubectl apply -f https://k8s.io/examples/customresourcedefinition/shirt-resources.yaml +``` + + +获取所有资源: + +```shell +kubectl get shirts.stable.example.com +``` + + +输出为: + +``` +NAME COLOR SIZE +example1 blue S +example2 blue M +example3 green M +``` + + +获取蓝色 shirt(检索 `color` 为 `blue` shirt): + +```shell +kubectl get shirts.stable.example.com --field-selector spec.color=blue +``` + + +应当输出: + +``` +NAME COLOR SIZE +example1 blue S +example2 blue M +``` + + +仅获取 `color` 为 `green`、`size` 为 `M` 的资源: + +```shell +kubectl get shirts.stable.example.com --field-selector spec.color=green,spec.size=M +``` + + +应当输出: + +``` +NAME COLOR SIZE +example2 blue M +``` + 用于 alpha 实验性特性的特性开关组,每个开关以 key=value 形式表示。当前可用开关包括:
          @@ -875,42 +880,41 @@ APIResponseCompression=true|false (BETA - 默认值为 true)
          APISelfSubjectReview=true|false (BETA - 默认值为 true)
          APIServerIdentity=true|false (BETA - 默认值为 true)
          APIServerTracing=true|false (BETA - 默认值为 true)
          -AdmissionWebhookMatchConditions=true|false (BETA - 默认值为 true)
          -AggregatedDiscoveryEndpoint=true|false (BETA - 默认值为 true)
          +APIServingWithRoutine=true|false (BETA - 默认值为 true)
          AllAlpha=true|false (ALPHA - 默认值为 false)
          AllBeta=true|false (BETA - 默认值为 false)
          AnyVolumeDataSource=true|false (BETA - 默认值为 true)
          AppArmor=true|false (BETA - 默认值为 true)
          +AppArmorFields=true|false (BETA - 默认值为 true)
          CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值为 false)
          CPUManagerPolicyBetaOptions=true|false (BETA - 默认值为 true)
          CPUManagerPolicyOptions=true|false (BETA - 默认值为 true)
          -CRDValidationRatcheting=true|false (ALPHA - 默认值为 false)
          +CRDValidationRatcheting=true|false (BETA - 默认值为 true)
          CSIMigrationPortworx=true|false (BETA - 默认值为 false)
          CSIVolumeHealth=true|false (ALPHA - 默认值为 false)
          CloudControllerManagerWebhook=true|false (ALPHA - 默认值为 false)
          -CloudDualStackNodeIPs=true|false (BETA - 默认值为 true)
          ClusterTrustBundle=true|false (ALPHA - 默认值为 false)
          ClusterTrustBundleProjection=true|false (ALPHA - 默认值为 false)
          ComponentSLIs=true|false (BETA - 默认值为 true)
          ConsistentListFromCache=true|false (ALPHA - 默认值为 false)
          -ContainerCheckpoint=true|false (ALPHA - 默认值为 false)
          -ContextualLogging=true|false (ALPHA - 默认值为 false)
          +ContainerCheckpoint=true|false (BETA - 默认值为 true)
          +ContextualLogging=true|false (BETA - 默认值为 true)
          CronJobsScheduledAnnotation=true|false (BETA - 默认值为 true)
          CrossNamespaceVolumeDataSource=true|false (ALPHA - 默认值为 false)
          CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值为 false)
          +CustomResourceFieldSelectors=true|false (ALPHA - 默认值为 false)
          DevicePluginCDIDevices=true|false (BETA - 默认值为 true)
          DisableCloudProviders=true|false (BETA - 默认值为 true)
          DisableKubeletCloudCredentialProviders=true|false (BETA - 默认值为 true)
          DisableNodeKubeProxyVersion=true|false (ALPHA - 默认值为 false)
          DynamicResourceAllocation=true|false (ALPHA - 默认值为 false)
          ElasticIndexedJob=true|false (BETA - 默认值为 true)
          -EventedPLEG=true|false (BETA - 默认值为 false)
          +EventedPLEG=true|false (ALPHA - 默认值为 false)
          GracefulNodeShutdown=true|false (BETA - 默认值为 true)
          GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值为 true)
          -HPAContainerMetrics=true|false (BETA - 默认值为 true)
          HPAScaleToZero=true|false (ALPHA - 默认值为 false)
          HonorPVReclaimPolicy=true|false (ALPHA - 默认值为 false)
          -ImageMaximumGCAge=true|false (ALPHA - 默认值为 false)
          +ImageMaximumGCAge=true|false (BETA - 默认值为 true)
          InPlacePodVerticalScaling=true|false (ALPHA - 默认值为 false)
          InTreePluginAWSUnregister=true|false (ALPHA - 默认值为 false)
          InTreePluginAzureDiskUnregister=true|false (ALPHA - 默认值为 false)
          @@ -919,10 +923,13 @@ InTreePluginGCEUnregister=true|false (ALPHA - 默认值为 false)
          InTreePluginOpenStackUnregister=true|false (ALPHA - 默认值为 false)
          InTreePluginPortworxUnregister=true|false (ALPHA - 默认值为 false)
          InTreePluginvSphereUnregister=true|false (ALPHA - 默认值为 false)
          +InformerResourceVersion=true|false (ALPHA - 默认值为 false)
          JobBackoffLimitPerIndex=true|false (BETA - 默认值为 true)
          +JobManagedBy=true|false (ALPHA - 默认值为 false)
          JobPodFailurePolicy=true|false (BETA - 默认值为 true)
          JobPodReplacementPolicy=true|false (BETA - 默认值为 true)
          -KubeProxyDrainingTerminatingNodes=true|false (ALPHA - 默认值为 false)
          +JobSuccessPolicy=true|false (ALPHA - 默认值为 false)
          +KubeProxyDrainingTerminatingNodes=true|false (BETA - 默认值为 true)
          KubeletCgroupDriverFromCRI=true|false (ALPHA - 默认值为 false)
          KubeletInUserNamespace=true|false (ALPHA - 默认值为 false)
          KubeletPodResourcesDynamicResources=true|false (ALPHA - 默认值为 false)
          @@ -930,8 +937,7 @@ KubeletPodResourcesGet=true|false (ALPHA - 默认值为 false)
          KubeletSeparateDiskGC=true|false (ALPHA - 默认值为 false)
          KubeletPodResourcesGetAllocatable=true|false (BETA - 默认值为 true)
          KubeletTracing=true|false (BETA - 默认值为 true)
          -LegacyServiceAccountTokenCleanUp=true|false (BETA - 默认值为 true)
          -LoadBalancerIPMode=true|false (ALPHA - 默认值为 false)
          +LoadBalancerIPMode=true|false (BETA - 默认值为 true)
          LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值为 false)
          LogarithmicScaleDown=true|false (BETA - 默认值为 true)
          LoggingAlphaOptions=true|false (ALPHA - 默认值为 false)
          @@ -941,63 +947,67 @@ MatchLabelKeysInPodTopologySpread=true|false (BETA - 默认值为 true)
          MaxUnavailableStatefulSet=true|false (ALPHA - 默认值为 false)
          MemoryManager=true|false (BETA - 默认值为 true)
          MemoryQoS=true|false (ALPHA - 默认值为 false)
          -MinDomainsInPodTopologySpread=true|false (BETA - 默认值为 true)
          MultiCIDRServiceAllocator=true|false (ALPHA - 默认值为 false)
          +MutatingAdmissionPolicy=true|false (ALPHA - 默认值为 false)
          NFTablesProxyMode=true|false (ALPHA - 默认值为 false)
          -NewVolumeManagerReconstruction=true|false (BETA - 默认值为 true)
          NodeInclusionPolicyInPodTopologySpread=true|false (BETA - 默认值为 true)
          -NodeLogQuery=true|false (ALPHA - 默认值为 false)
          -NodeSwap=true|false (BETA - 默认值为 false)
          +NodeLogQuery=true|false (BETA - 默认值为 false)
          +NodeSwap=true|false (BETA - 默认值为 true)
          OpenAPIEnums=true|false (BETA - 默认值为 true)
          PDBUnhealthyPodEvictionPolicy=true|false (BETA - 默认值为 true)
          PersistentVolumeLastPhaseTransitionTime=true|false (BETA - 默认值为 true)
          PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值为 false)
          PodDeletionCost=true|false (BETA - 默认值为 true)
          PodDisruptionConditions=true|false (BETA - 默认值为 true)
          -PodHostIPs=true|false (BETA - 默认值为 true)
          PodIndexLabel=true|false (BETA - 默认值为 true)
          -PodLifecycleSleepAction=true|false (ALPHA - 默认值为 false)
          +PodLifecycleSleepAction=true|false (BETA - 默认值为 true)
          PodReadyToStartContainersCondition=true|false (BETA - 默认值为 true)
          -PodSchedulingReadiness=true|false (BETA - 默认值为 true)
          +PortForwardWebsockets=true|false (ALPHA - 默认值为 false)
          ProcMountType=true|false (ALPHA - 默认值为 false)
          QOSReserved=true|false (ALPHA - 默认值为 false)
          RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值为 false)
          +RecursiveReadOnlyMounts=true|false (ALPHA - 默认值为 false)
          +RelaxedEnvironmentVariableValidation=true|false (ALPHA - 默认值为 false)
          +RetryGenerateName=true|false (ALPHA - 默认值为 false)
          RotateKubeletServerCertificate=true|false (BETA - 默认值为 true)
          RuntimeClassInImageCriApi=true|false (ALPHA - 默认值为 false)
          +SELinuxMount=true|false (ALPHA - 默认值为 false)
          SELinuxMountReadWriteOncePod=true|false (BETA - 默认值为 true)
          SchedulerQueueingHints=true|false (BETA - 默认值为 false)
          -SecurityContextDeny=true|false (ALPHA - 默认值为 false)
          +SeparateCacheWatchRPC=true|false (BETA - 默认值为 true)
          SeparateTaintEvictionController=true|false (BETA - 默认值为 true)
          -ServiceAccountTokenJTI=true|false (ALPHA - 默认值为 false)
          +ServiceAccountTokenJTI=true|false (BETA - 默认值为 true)
          ServiceAccountTokenNodeBinding=true|false (ALPHA - 默认值为 false)
          -ServiceAccountTokenNodeBindingValidation=true|false (ALPHA - 默认值为 false)
          -ServiceAccountTokenPodNodeInfo=true|false (ALPHA - 默认值为 false)
          +ServiceAccountTokenNodeBindingValidation=true|false (BETA - 默认值为 true)
          +ServiceAccountTokenPodNodeInfo=true|false (BETA - 默认值为 true)
          +ServiceTrafficDistribution=true|false (ALPHA - 默认值为 false)
          SidecarContainers=true|false (BETA - default=true)
          SizeMemoryBackedVolumes=true|false (BETA - 默认值为 true)
          -StableLoadBalancerNodeSet=true|false (BETA - 默认值为 true)
          StatefulSetAutoDeletePVC=true|false (BETA - 默认值为 true)
          StatefulSetStartOrdinal=true|false (BETA - 默认值为 true)
          +StorageNamespaceIndex=true|false (BETA - 默认值为 true)
          StorageVersionAPI=true|false (ALPHA - 默认值为 false)
          StorageVersionHash=true|false (BETA - 默认值为 true)
          -StructuredAuthenticationConfiguration=true|false (ALPHA - 默认值为 false)
          -StructuredAuthorizationConfiguration=true|false (ALPHA - 默认值为 false)
          +StorageVersionMigrator=true|false (ALPHA - 默认值为 false)
          +StructuredAuthenticationConfiguration=true|false (BETA - 默认值为 true)
          +StructuredAuthorizationConfiguration=true|false (BETA - 默认值为 true)
          TopologyAwareHints=true|false (BETA - 默认值为 true)
          TopologyManagerPolicyAlphaOptions=true|false (ALPHA - 默认值为 false)
          TopologyManagerPolicyBetaOptions=true|false (BETA - 默认值为 true)
          TopologyManagerPolicyOptions=true|false (BETA - 默认值为 true)
          -TranslateStreamCloseWebsocketRequests=true|false (ALPHA - 默认值为 false)
          +TranslateStreamCloseWebsocketRequests=true|false (BETA - 默认值为 true)
          UnauthenticatedHTTP2DOSMitigation=true|false (BETA - 默认值为 true)
          UnknownVersionInteroperabilityProxy=true|false (ALPHA - 默认值为 false)
          UserNamespacesPodSecurityStandards=true|false (ALPHA - 默认值为 false)
          -UserNamespacesSupport=true|false (ALPHA - 默认值为 false)
          -ValidatingAdmissionPolicy=true|false (BETA - 默认值为 false)
          +UserNamespacesSupport=true|false (BETA - 默认值为 false)
          VolumeAttributesClass=true|false (ALPHA - 默认值为 false)
          VolumeCapacityPriority=true|false (ALPHA - 默认值为 false)
          +WatchFromStorageWithoutResourceVersion=true|false (BETA - 默认值为 false)
          WatchList=true|false (ALPHA - 默认值为 false)
          +WatchListClient=true|false (BETA - 默认值为 false)
          WinDSR=true|false (ALPHA - 默认值为 false)
          WinOverlay=true|false (BETA - 默认值为 true)
          WindowsHostNetwork=true|false (ALPHA - 默认值为 true)
          -ZeroLimitedNominalConcurrencyShares=true|false (BETA - 默认值为 false)
          已弃用: 应在 --config 所给的配置文件中进行设置。 (进一步了解) @@ -1291,6 +1301,50 @@ Absolute name of the top level cgroup that is used to manage kubernetes componen + +--log-text-info-buffer-size string     Default: '0' + + + + +[Alpha] 在具有分割输出流的文本格式中,信息消息可以被缓冲一段时间以提高性能。 +默认值零字节表示禁用缓冲机制。 +大小可以指定为字节数(512)、1000 的倍数(1K)、1024 的倍数(2Ki)或它们的幂(3M、4G、5Mi、6Gi)。 +启用 LoggingAlphaOptions 特性门控来使用它。 +(已弃用:应通过 kubelet 的 --config 标志指定的配置文件来设置此参数。 +请参阅 https://kubernetes.io/docs/zh-cn/tasks/administer-cluster/kubelet-config-file/ 了解更多信息。) + + + + + +--log-text-split-stream + + + + +[Alpha] 以文本格式,将错误消息写入 stderr,将信息消息写入 stdout。 +默认是将单个流写入标准输出。 +启用 LoggingAlphaOptions 特性门控以使用它。 +(已弃用:应通过 kubelet 的 --config 标志指定的配置文件来设置此参数。 +请参阅 https://kubernetes.io/docs/zh-cn/tasks/administer-cluster/kubelet-config-file/ 了解更多信息。 +) + + + --kubeconfig string From 9506cd82a9c9dc0d589f617a92705d918cbf3021 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Fri, 3 May 2024 15:42:07 +0800 Subject: [PATCH 0465/1086] [zh-cn] sync kube-proxy.md Signed-off-by: xin.li --- .../kube-proxy.md | 205 ++++++++++-------- 1 file changed, 109 insertions(+), 96 deletions(-) diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/kube-proxy.md b/content/zh-cn/docs/reference/command-line-tools-reference/kube-proxy.md index d04a9470f0..f368906fb5 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/kube-proxy.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/kube-proxy.md @@ -81,30 +81,6 @@ Overrides kube-proxy's idea of what its node's primary IP is. Note that the name

          - ---bind-address-hard-fail - - -

          - -如果为 true,kube-proxy 会将无法绑定端口的失败操作视为致命错误并退出。 -

          - - - ---boot_id_file string     默认值:"/proc/sys/kernel/random/boot_id" - - -

          - -逗号分隔的文件列表,用于检查 boot-id。使用第一个存在的文件。 -

          - - --cleanup @@ -275,42 +251,41 @@ A set of key=value pairs that describe feature gates for alpha/experimental feat APIResponseCompression=true|false (BETA - default=true)
          APIServerIdentity=true|false (BETA - default=true)
          APIServerTracing=true|false (BETA - default=true)
          -AdmissionWebhookMatchConditions=true|false (BETA - default=true)
          -AggregatedDiscoveryEndpoint=true|false (BETA - default=true)
          +APIServingWithRoutine=true|false (BETA - default=true)
          AllAlpha=true|false (ALPHA - default=false)
          AllBeta=true|false (BETA - default=false)
          AnyVolumeDataSource=true|false (BETA - default=true)
          AppArmor=true|false (BETA - default=true)
          +AppArmorFields=true|false (BETA - default=true)
          CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false)
          CPUManagerPolicyBetaOptions=true|false (BETA - default=true)
          CPUManagerPolicyOptions=true|false (BETA - default=true)
          -CRDValidationRatcheting=true|false (ALPHA - default=false)
          +CRDValidationRatcheting=true|false (BETA - default=true)
          CSIMigrationPortworx=true|false (BETA - default=false)
          CSIVolumeHealth=true|false (ALPHA - default=false)
          CloudControllerManagerWebhook=true|false (ALPHA - default=false)
          -CloudDualStackNodeIPs=true|false (BETA - default=true)
          ClusterTrustBundle=true|false (ALPHA - default=false)
          ClusterTrustBundleProjection=true|false (ALPHA - default=false)
          ComponentSLIs=true|false (BETA - default=true)
          ConsistentListFromCache=true|false (ALPHA - default=false)
          -ContainerCheckpoint=true|false (ALPHA - default=false)
          -ContextualLogging=true|false (ALPHA - default=false)
          +ContainerCheckpoint=true|false (BETA - default=true)
          +ContextualLogging=true|false (BETA - default=true)
          CronJobsScheduledAnnotation=true|false (BETA - default=true)
          CrossNamespaceVolumeDataSource=true|false (ALPHA - default=false)
          CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false)
          +CustomResourceFieldSelectors=true|false (ALPHA - default=false)
          DevicePluginCDIDevices=true|false (BETA - default=true)
          DisableCloudProviders=true|false (BETA - default=true)
          DisableKubeletCloudCredentialProviders=true|false (BETA - default=true)
          DisableNodeKubeProxyVersion=true|false (ALPHA - default=false)
          DynamicResourceAllocation=true|false (ALPHA - default=false)
          ElasticIndexedJob=true|false (BETA - default=true)
          -EventedPLEG=true|false (BETA - default=false)
          +EventedPLEG=true|false (ALPHA - default=false)
          GracefulNodeShutdown=true|false (BETA - default=true)
          GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - default=true)
          -HPAContainerMetrics=true|false (BETA - default=true)
          HPAScaleToZero=true|false (ALPHA - default=false)
          HonorPVReclaimPolicy=true|false (ALPHA - default=false)
          -ImageMaximumGCAge=true|false (ALPHA - default=false)
          +ImageMaximumGCAge=true|false (BETA - default=true)
          InPlacePodVerticalScaling=true|false (ALPHA - default=false)
          InTreePluginAWSUnregister=true|false (ALPHA - default=false)
          InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false)
          @@ -319,18 +294,20 @@ InTreePluginGCEUnregister=true|false (ALPHA - default=false)
          InTreePluginOpenStackUnregister=true|false (ALPHA - default=false)
          InTreePluginPortworxUnregister=true|false (ALPHA - default=false)
          InTreePluginvSphereUnregister=true|false (ALPHA - default=false)
          +InformerResourceVersion=true|false (ALPHA - default=false)
          JobBackoffLimitPerIndex=true|false (BETA - default=true)
          +JobManagedBy=true|false (ALPHA - default=false)
          JobPodFailurePolicy=true|false (BETA - default=true)
          JobPodReplacementPolicy=true|false (BETA - default=true)
          -KubeProxyDrainingTerminatingNodes=true|false (ALPHA - default=false)
          +JobSuccessPolicy=true|false (ALPHA - default=false)
          +KubeProxyDrainingTerminatingNodes=true|false (BETA - default=true)
          KubeletCgroupDriverFromCRI=true|false (ALPHA - default=false)
          KubeletInUserNamespace=true|false (ALPHA - default=false)
          KubeletPodResourcesDynamicResources=true|false (ALPHA - default=false)
          KubeletPodResourcesGet=true|false (ALPHA - default=false)
          KubeletSeparateDiskGC=true|false (ALPHA - default=false)
          KubeletTracing=true|false (BETA - default=true)
          -LegacyServiceAccountTokenCleanUp=true|false (BETA - default=true)
          -LoadBalancerIPMode=true|false (ALPHA - default=false)
          +LoadBalancerIPMode=true|false (BETA - default=true)
          LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false)
          LogarithmicScaleDown=true|false (BETA - default=true)
          LoggingAlphaOptions=true|false (ALPHA - default=false)
          @@ -340,105 +317,108 @@ MatchLabelKeysInPodTopologySpread=true|false (BETA - default=true)
          MaxUnavailableStatefulSet=true|false (ALPHA - default=false)
          MemoryManager=true|false (BETA - default=true)
          MemoryQoS=true|false (ALPHA - default=false)
          -MinDomainsInPodTopologySpread=true|false (BETA - default=true)
          MultiCIDRServiceAllocator=true|false (ALPHA - default=false)
          +MutatingAdmissionPolicy=true|false (ALPHA - default=false)
          NFTablesProxyMode=true|false (ALPHA - default=false)
          -NewVolumeManagerReconstruction=true|false (BETA - default=true)
          NodeInclusionPolicyInPodTopologySpread=true|false (BETA - default=true)
          -NodeLogQuery=true|false (ALPHA - default=false)
          -NodeSwap=true|false (BETA - default=false)
          +NodeLogQuery=true|false (BETA - default=false)
          +NodeSwap=true|false (BETA - default=true)
          OpenAPIEnums=true|false (BETA - default=true)
          PDBUnhealthyPodEvictionPolicy=true|false (BETA - default=true)
          PersistentVolumeLastPhaseTransitionTime=true|false (BETA - default=true)
          PodAndContainerStatsFromCRI=true|false (ALPHA - default=false)
          PodDeletionCost=true|false (BETA - default=true)
          PodDisruptionConditions=true|false (BETA - default=true)
          -PodHostIPs=true|false (BETA - default=true)
          PodIndexLabel=true|false (BETA - default=true)
          -PodLifecycleSleepAction=true|false (ALPHA - default=false)
          +PodLifecycleSleepAction=true|false (BETA - default=true)
          PodReadyToStartContainersCondition=true|false (BETA - default=true)
          -PodSchedulingReadiness=true|false (BETA - default=true)
          +PortForwardWebsockets=true|false (ALPHA - default=false)
          ProcMountType=true|false (ALPHA - default=false)
          QOSReserved=true|false (ALPHA - default=false)
          RecoverVolumeExpansionFailure=true|false (ALPHA - default=false)
          +RecursiveReadOnlyMounts=true|false (ALPHA - default=false)
          +RelaxedEnvironmentVariableValidation=true|false (ALPHA - default=false)
          +RetryGenerateName=true|false (ALPHA - default=false)
          RotateKubeletServerCertificate=true|false (BETA - default=true)
          RuntimeClassInImageCriApi=true|false (ALPHA - default=false)
          +SELinuxMount=true|false (ALPHA - default=false)
          SELinuxMountReadWriteOncePod=true|false (BETA - default=true)
          SchedulerQueueingHints=true|false (BETA - default=false)
          -SecurityContextDeny=true|false (ALPHA - default=false)
          +SeparateCacheWatchRPC=true|false (BETA - default=true)
          SeparateTaintEvictionController=true|false (BETA - default=true)
          -ServiceAccountTokenJTI=true|false (ALPHA - default=false)
          +ServiceAccountTokenJTI=true|false (BETA - default=true)
          ServiceAccountTokenNodeBinding=true|false (ALPHA - default=false)
          -ServiceAccountTokenNodeBindingValidation=true|false (ALPHA - default=false)
          -ServiceAccountTokenPodNodeInfo=true|false (ALPHA - default=false)
          +ServiceAccountTokenNodeBindingValidation=true|false (BETA - default=true)
          +ServiceAccountTokenPodNodeInfo=true|false (BETA - default=true)
          +ServiceTrafficDistribution=true|false (ALPHA - default=false)
          SidecarContainers=true|false (BETA - default=true)
          SizeMemoryBackedVolumes=true|false (BETA - default=true)
          -StableLoadBalancerNodeSet=true|false (BETA - default=true)
          StatefulSetAutoDeletePVC=true|false (BETA - default=true)
          StatefulSetStartOrdinal=true|false (BETA - default=true)
          +StorageNamespaceIndex=true|false (BETA - default=true)
          StorageVersionAPI=true|false (ALPHA - default=false)
          StorageVersionHash=true|false (BETA - default=true)
          -StructuredAuthenticationConfiguration=true|false (ALPHA - default=false)
          -StructuredAuthorizationConfiguration=true|false (ALPHA - default=false)
          +StorageVersionMigrator=true|false (ALPHA - default=false)
          +StructuredAuthenticationConfiguration=true|false (BETA - default=true)
          +StructuredAuthorizationConfiguration=true|false (BETA - default=true)
          TopologyAwareHints=true|false (BETA - default=true)
          TopologyManagerPolicyAlphaOptions=true|false (ALPHA - default=false)
          TopologyManagerPolicyBetaOptions=true|false (BETA - default=true)
          TopologyManagerPolicyOptions=true|false (BETA - default=true)
          -TranslateStreamCloseWebsocketRequests=true|false (ALPHA - default=false)
          +TranslateStreamCloseWebsocketRequests=true|false (BETA - default=true)
          UnauthenticatedHTTP2DOSMitigation=true|false (BETA - default=true)
          UnknownVersionInteroperabilityProxy=true|false (ALPHA - default=false)
          UserNamespacesPodSecurityStandards=true|false (ALPHA - default=false)
          -UserNamespacesSupport=true|false (ALPHA - default=false)
          -ValidatingAdmissionPolicy=true|false (BETA - default=false)
          +UserNamespacesSupport=true|false (BETA - default=false)
          VolumeAttributesClass=true|false (ALPHA - default=false)
          VolumeCapacityPriority=true|false (ALPHA - default=false)
          +WatchFromStorageWithoutResourceVersion=true|false (BETA - default=false)
          WatchList=true|false (ALPHA - default=false)
          +WatchListClient=true|false (BETA - default=false)
          WinDSR=true|false (ALPHA - default=false)
          WinOverlay=true|false (BETA - default=true)
          WindowsHostNetwork=true|false (ALPHA - default=true)
          -ZeroLimitedNominalConcurrencyShares=true|false (BETA - default=false)
          This parameter is ignored if a config file is specified by --config. --> 一组 key=value 对,用来描述测试性/试验性功能的特性门控。可选项有:
          APIResponseCompression=true|false (BETA - 默认值=true)
          APIServerIdentity=true|false (BETA - 默认值=true)
          APIServerTracing=true|false (BETA - 默认值=true)
          -AdmissionWebhookMatchConditions=true|false (BETA - 默认值=true)
          -AggregatedDiscoveryEndpoint=true|false (BETA - 默认值=true)
          +APIServingWithRoutine=true|false (BETA - 默认值=true)
          AllAlpha=true|false (ALPHA - 默认值=false)
          AllBeta=true|false (BETA - 默认值=false)
          AnyVolumeDataSource=true|false (BETA - 默认值=true)
          AppArmor=true|false (BETA - 默认值=true)
          +AppArmorFields=true|false (BETA - 默认值=true)
          CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
          CPUManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
          CPUManagerPolicyOptions=true|false (BETA - 默认值=true)
          -CRDValidationRatcheting=true|false (ALPHA - 默认值=false)
          +CRDValidationRatcheting=true|false (BETA - 默认值=true)
          CSIMigrationPortworx=true|false (BETA - 默认值=false)
          CSIVolumeHealth=true|false (ALPHA - 默认值=false)
          CloudControllerManagerWebhook=true|false (ALPHA - 默认值=false)
          -CloudDualStackNodeIPs=true|false (BETA - 默认值=true)
          ClusterTrustBundle=true|false (ALPHA - 默认值=false)
          ClusterTrustBundleProjection=true|false (ALPHA - 默认值=false)
          ComponentSLIs=true|false (BETA - 默认值=true)
          ConsistentListFromCache=true|false (ALPHA - 默认值=false)
          -ContainerCheckpoint=true|false (ALPHA - 默认值=false)
          -ContextualLogging=true|false (ALPHA - 默认值=false)
          +ContainerCheckpoint=true|false (BETA - 默认值=true)
          +ContextualLogging=true|false (BETA - 默认值=true)
          CronJobsScheduledAnnotation=true|false (BETA - 默认值=true)
          CrossNamespaceVolumeDataSource=true|false (ALPHA - 默认值=false)
          CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
          +CustomResourceFieldSelectors=true|false (ALPHA - 默认值=false)
          DevicePluginCDIDevices=true|false (BETA - 默认值=true)
          DisableCloudProviders=true|false (BETA - 默认值=true)
          DisableKubeletCloudCredentialProviders=true|false (BETA - 默认值=true)
          DisableNodeKubeProxyVersion=true|false (ALPHA - 默认值=false)
          DynamicResourceAllocation=true|false (ALPHA - 默认值=false)
          ElasticIndexedJob=true|false (BETA - 默认值=true)
          -EventedPLEG=true|false (BETA - 默认值=false)
          +EventedPLEG=true|false (ALPHA - 默认值=false)
          GracefulNodeShutdown=true|false (BETA - 默认值=true)
          GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值=true)
          -HPAContainerMetrics=true|false (BETA - 默认值=true)
          HPAScaleToZero=true|false (ALPHA - 默认值=false)
          HonorPVReclaimPolicy=true|false (ALPHA - 默认值=false)
          -ImageMaximumGCAge=true|false (ALPHA - 默认值=false)
          +ImageMaximumGCAge=true|false (BETA - 默认值=true)
          InPlacePodVerticalScaling=true|false (ALPHA - 默认值=false)
          InTreePluginAWSUnregister=true|false (ALPHA - 默认值=false)
          InTreePluginAzureDiskUnregister=true|false (ALPHA - 默认值=false)
          @@ -447,9 +427,13 @@ InTreePluginGCEUnregister=true|false (ALPHA - 默认值=false)
          InTreePluginOpenStackUnregister=true|false (ALPHA - 默认值=false)
          InTreePluginPortworxUnregister=true|false (ALPHA - 默认值=false)
          InTreePluginvSphereUnregister=true|false (ALPHA - 默认值=false)
          +InformerResourceVersion=true|false (ALPHA - 默认值=false)
          JobBackoffLimitPerIndex=true|false (BETA - 默认值=true)
          +JobManagedBy=true|false (ALPHA - 默认值=false)
          JobPodFailurePolicy=true|false (BETA - 默认值=true)
          JobPodReplacementPolicy=true|false (BETA - 默认值=true)
          +JobSuccessPolicy=true|false (ALPHA - 默认值=false)
          +KubeProxyDrainingTerminatingNodes=true|false (BETA - 默认值=true)
          KubeProxyDrainingTerminatingNodes=true|false (ALPHA - 默认值=false)
          KubeletCgroupDriverFromCRI=true|false (ALPHA - 默认值=false)
          KubeletInUserNamespace=true|false (ALPHA - 默认值=false)
          @@ -457,8 +441,7 @@ KubeletPodResourcesDynamicResources=true|false (ALPHA - 默认值=false)
          KubeletPodResourcesGet=true|false (ALPHA - 默认值=false)
          KubeletSeparateDiskGC=true|false (ALPHA - 默认值=false)
          KubeletTracing=true|false (BETA - 默认值=true)
          -LegacyServiceAccountTokenCleanUp=true|false (BETA - 默认值=true)
          -LoadBalancerIPMode=true|false (ALPHA - 默认值=false)
          +LoadBalancerIPMode=true|false (BETA - 默认值=true)
          LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值=false)
          LogarithmicScaleDown=true|false (BETA - 默认值=true)
          LoggingAlphaOptions=true|false (ALPHA - 默认值=false)
          @@ -468,63 +451,68 @@ MatchLabelKeysInPodTopologySpread=true|false (BETA - 默认值=true)
          MaxUnavailableStatefulSet=true|false (ALPHA - 默认值=false)
          MemoryManager=true|false (BETA - 默认值=true)
          MemoryQoS=true|false (ALPHA - 默认值=false)
          -MinDomainsInPodTopologySpread=true|false (BETA - 默认值=true)
          +MutatingAdmissionPolicy=true|false (ALPHA - 默认值=false)
          MultiCIDRServiceAllocator=true|false (ALPHA - 默认值=false)
          NFTablesProxyMode=true|false (ALPHA - 默认值=false)
          -NewVolumeManagerReconstruction=true|false (BETA - 默认值=true)
          NodeInclusionPolicyInPodTopologySpread=true|false (BETA - 默认值=true)
          -NodeLogQuery=true|false (ALPHA - 默认值=false)
          -NodeSwap=true|false (BETA - 默认值=false)
          +NodeLogQuery=true|false (BETA - 默认值=false)
          +NodeSwap=true|false (BETA - 默认值=true)
          OpenAPIEnums=true|false (BETA - 默认值=true)
          PDBUnhealthyPodEvictionPolicy=true|false (BETA - 默认值=true)
          PersistentVolumeLastPhaseTransitionTime=true|false (BETA - 默认值=true)
          PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值=false)
          PodDeletionCost=true|false (BETA - 默认值=true)
          PodDisruptionConditions=true|false (BETA - 默认值=true)
          -PodHostIPs=true|false (BETA - 默认值=true)
          PodIndexLabel=true|false (BETA - 默认值=true)
          -PodLifecycleSleepAction=true|false (ALPHA - 默认值=false)
          +PodLifecycleSleepAction=true|false (BETA - 默认值=true)
          PodReadyToStartContainersCondition=true|false (BETA - 默认值=true)
          -PodSchedulingReadiness=true|false (BETA - 默认值=true)
          +PortForwardWebsockets=true|false (ALPHA - 默认值=false)
          ProcMountType=true|false (ALPHA - 默认值=false)
          QOSReserved=true|false (ALPHA - 默认值=false)
          RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值=false)
          +RecursiveReadOnlyMounts=true|false (ALPHA - 默认值=false)
          +RelaxedEnvironmentVariableValidation=true|false (ALPHA - 默认值=false)
          +RetryGenerateName=true|false (ALPHA - 默认值=false)
          RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
          RuntimeClassInImageCriApi=true|false (ALPHA - 默认值=false)
          +SELinuxMount=true|false (ALPHA - 默认值=false)
          SELinuxMountReadWriteOncePod=true|false (BETA - 默认值=true)
          SchedulerQueueingHints=true|false (BETA - 默认值=false)
          -SecurityContextDeny=true|false (ALPHA - 默认值=false)
          +SeparateCacheWatchRPC=true|false (BETA - 默认值=true)
          SeparateTaintEvictionController=true|false (BETA - 默认值=true)
          -ServiceAccountTokenJTI=true|false (ALPHA - 默认值=false)
          +ServiceAccountTokenJTI=true|false (BETA - 默认值=true)
          ServiceAccountTokenNodeBinding=true|false (ALPHA - 默认值=false)
          -ServiceAccountTokenNodeBindingValidation=true|false (ALPHA - 默认值=false)
          -ServiceAccountTokenPodNodeInfo=true|false (ALPHA - 默认值=false)
          +ServiceAccountTokenNodeBindingValidation=true|false (BETA - 默认值=true)
          +ServiceAccountTokenPodNodeInfo=true|false (BETA - 默认值=true)
          +ServiceTrafficDistribution=true|false (ALPHA - 默认值=false)
          SidecarContainers=true|false (BETA - 默认值=true)
          SizeMemoryBackedVolumes=true|false (BETA - 默认值=true)
          -StableLoadBalancerNodeSet=true|false (BETA - 默认值=true)
          StatefulSetAutoDeletePVC=true|false (BETA - 默认值=true)
          StatefulSetStartOrdinal=true|false (BETA - 默认值=true)
          +StorageNamespaceIndex=true|false (BETA - 默认值=true)
          StorageVersionAPI=true|false (ALPHA - 默认值=false)
          StorageVersionHash=true|false (BETA - 默认值=true)
          -StructuredAuthenticationConfiguration=true|false (ALPHA - 默认值=false)
          -StructuredAuthorizationConfiguration=true|false (ALPHA - 默认值=false)
          +StorageVersionMigrator=true|false (ALPHA - 默认值=false)
          +StructuredAuthenticationConfiguration=true|false (BETA - 默认值=true)
          +StructuredAuthorizationConfiguration=true|false (BETA - 默认值=true)
          TopologyAwareHints=true|false (BETA - 默认值=true)
          TopologyManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
          TopologyManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
          TopologyManagerPolicyOptions=true|false (BETA - 默认值=true)
          -TranslateStreamCloseWebsocketRequests=true|false (ALPHA - 默认值=false)
          +TranslateStreamCloseWebsocketRequests=true|false (BETA - 默认值=true)
          UnauthenticatedHTTP2DOSMitigation=true|false (BETA - 默认值=true)
          UnknownVersionInteroperabilityProxy=true|false (ALPHA - 默认值=false)
          UserNamespacesPodSecurityStandards=true|false (ALPHA - 默认值=false)
          -UserNamespacesSupport=true|false (ALPHA - 默认值=false)
          +UserNamespacesSupport=true|false (BETA - 默认值=false)
          ValidatingAdmissionPolicy=true|false (BETA - 默认值=false)
          VolumeAttributesClass=true|false (ALPHA - 默认值=false)
          VolumeCapacityPriority=true|false (ALPHA - 默认值=false)
          +WatchFromStorageWithoutResourceVersion=true|false (BETA - 默认值=false)
          WatchList=true|false (ALPHA - 默认值=false)
          +WatchListClient=true|false (BETA - 默认值=false)
          WinDSR=true|false (ALPHA - 默认值=false)
          WinOverlay=true|false (BETA - 默认值=true)
          WindowsHostNetwork=true|false (ALPHA - 默认值=true)
          -ZeroLimitedNominalConcurrencyShares=true|false (BETA - 默认值=false)
          如果配置文件由 --config 指定,则忽略此参数。

          @@ -817,6 +805,43 @@ Maximum number of seconds between log flushes + +--log-text-info-buffer-size quantity + + + +

          + +[Alpha] 在具有分割输出流的文本格式中,信息消息可以被缓冲一段时间以提高性能。 +默认值零字节表示禁用缓冲机制。 +大小可以指定为字节数(512)、1000 的倍数(1K)、1024 的倍数(2Ki)或它们的幂(3M、4G、5Mi、6Gi)。 +启用 LoggingAlphaOptions 特性门控以使用此功能。 +

          + + + +--log-text-split-stream + + + +

          + +[Alpha] 以文本格式,将错误消息写入 stderr,将信息消息写入 stdout。 +默认是将单个流写入标准输出。 +启用 LoggingAlphaOptions 特性门控以使用它。 +

          + + + --log_backtrace_at <“file:N” 格式的字符串>     默认值:0 @@ -883,25 +908,13 @@ Sets the log format. Permitted formats: "text". --logtostderr     默认值:true - - -

          - -日志输出到 stderr 而不是文件。 -

          - - - ---machine_id_file string     默认值:"/etc/machine-id,/var/lib/dbus/machine-id" -

          -用来检查 Machine-ID 的文件列表,用逗号分隔。 -使用找到的第一个文件。 +日志输出到 stderr 而不是文件。

          From e626cbfa1785247663c440c4985639db052d270e Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Fri, 3 May 2024 14:16:09 +0800 Subject: [PATCH 0466/1086] [zh-cn] sync implementation-details.md Signed-off-by: xin.li --- .../kubeadm/implementation-details.md | 102 +++++++++++------- 1 file changed, 61 insertions(+), 41 deletions(-) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/implementation-details.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/implementation-details.md index 78c80b0554..c7059200ef 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/implementation-details.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/implementation-details.md @@ -23,7 +23,7 @@ However, it might not be obvious _how_ kubeadm does that. --> `kubeadm init` 和 `kubeadm join` 结合在一起提供了良好的用户体验, 因为从头开始创建实践最佳而配置最基本的 Kubernetes 集群。 -但是,kubeadm **如何** 做到这一点可能并不明显。 +但是,kubeadm **如何**做到这一点可能并不明显。 - `/etc/kubernetes/` 作为带有控制平面组件身份标识的 kubeconfig 文件的路径。kubeconfig 文件的名称为: - - `kubelet.conf` (在 TLS 引导时名称为 `bootstrap-kubelet.conf`) + - `kubelet.conf`(在 TLS 引导时名称为 `bootstrap-kubelet.conf`) - `controller-manager.conf` - `scheduler.conf` - `admin.conf` 用于集群管理员和 kubeadm 本身 + - `super-admin.conf` 用于可以绕过 RBAC 的集群超级管理员 -Kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并避免常见的集群启动问题。 +kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并避免常见的集群启动问题。 用户可以使用 `--ignore-preflight-errors` 选项跳过特定的预检或全部检查。 -- [错误] 如果 API ​​服务器绑定的端口或 10250/10251/10252 端口已被占用 +- [错误] 如果 API 服务器绑定的端口或 10250/10251/10252 端口已被占用 - [错误] 如果 `/etc/kubernetes/manifest` 文件夹已经存在并且不为空 -- [错误] 如果 `/proc/sys/net/bridge/bridge-nf-call-iptables` 文件不存在或不包含 1 -- [错误] 如果建议地址是 ipv6,并且 `/proc/sys/net/bridge/bridge-nf-call-ip6tables` 不存在或不包含 1 - [错误] 如果启用了交换分区 - [错误] 如果命令路径中没有 `conntrack`、`ip`、`iptables`、`mount`、`nsenter` 命令 -Kubeadm 生成用于不同目的的证书和私钥对: +kubeadm 生成用于不同目的的证书和私钥对: - Kubernetes 集群的自签名证书颁发机构会保存到 `ca.crt` 文件和 `ca.key` 私钥文件中 @@ -325,6 +323,7 @@ Kubeadm 生成用于不同目的的证书和私钥对: - 用于 API 服务器安全连接到 kubelet 的客户端证书,使用 `ca.crt` 作为 CA 生成, 并保存到 `apiserver-kubelet-client.crt`,私钥保存到 `apiserver-kubelet-client.key` 文件中。该证书应该在 `system:masters` 组织中。 + - 用于签名 ServiceAccount 令牌的私钥保存到 `sa.key` 文件中,公钥保存到 `sa.pub` 文件中。 - 用于前端代理的证书颁发机构保存到 `front-proxy-ca.crt` 文件中,私钥保存到 `front-proxy-ca.key` 文件中 + - 前端代理客户端的客户端证书,使用 `front-proxy-ca.crt` 作为 CA 生成,并保存到 `front-proxy-client.crt` 文件中,私钥保存到 `front-proxy-client.key` 文件中 @@ -390,7 +390,7 @@ Please note that: -Kubeadm 生成具有用于控制平面组件身份标识的 kubeconfig 文件: +kubeadm 生成具有用于控制平面组件身份标识的 kubeconfig 文件: -- 供 kubelet 在 TLS 引导期间使用的 kubeconfig 文件——`/etc/kubernetes/bootstrap-kubelet.conf`。 +- 供 kubelet 在 TLS 引导期间使用的 kubeconfig 文件 —— `/etc/kubernetes/bootstrap-kubelet.conf`。 在此文件中,有一个引导令牌或内嵌的客户端证书,向集群表明此节点身份。 此客户端证书应: @@ -435,19 +435,39 @@ Kubeadm 生成具有用于控制平面组件身份标识的 kubeconfig 文件: 默认定义的。 -另外,用于 kubeadm 本身和 admin 的 kubeconfig 文件也被生成并保存到 -`/etc/kubernetes/admin.conf` 文件中。 -此处的 admin 定义为正在管理集群并希望完全控制集群(**root**)的实际人员。 -内嵌的 admin 客户端证书应是 `system:masters` 组织的成员, -这一组织名由默认的 [RBAC 面向用户的角色绑定](/zh-cn/docs/reference/access-authn-authz/rbac/#user-facing-roles) -定义。它还应包括一个 CN。kubeadm 使用 `kubernetes-admin` CN。 +此外,还会生成将 kubeadm 作为管理实体的 kubeconfig 文件并将其保存到 `/etc/kubernetes/admin.conf` 中。 +该文件包含一个带有 `Subject: O = kubeadm:cluster-admins, CN = kubernetes-admin` +的证书。`kubeadm:cluster-admins` 是一个由 kubeadm 管理的组, +它在 `kubeadm init` 期间通过使用 `super-admin.conf` 文件绑定到 +`cluster-admin` ClusterRole,不需要 RBAC。 +此 `admin.conf` 文件必须保留在控制平面节点上,并且不得与其他用户共享。 + + +在 `kubeadm init` 期间,会生成另一个 kubeconfig 文件并将其存储在 `/etc/kubernetes/super-admin.conf` 中。 +该文件包含一个带有 `Subject: O = system:masters, CN = kubernetes-super-admin` 的证书。 +`system:masters` 是一个绕过 RBAC 的超级用户组,使 `super-admin.conf` +在紧急情况下非常有用,因为 RBAC 配置错误导致集群被锁定。 +`super-admin.conf` 文件可以存储在安全位置,并且不会与其他用户共享。 + + +有关 RBAC 和内置 ClusterRoles 和组的其他信息, +请参阅[面向用户的 RBAC 角色绑定](/zh-cn/docs/reference/access-authn-authz/rbac/#user-facing-roles)。 请注意: @@ -482,8 +502,8 @@ It should also include a CN. Kubeadm uses the `kubernetes-admin` CN. Kubeadm writes static Pod manifest files for control plane components to `/etc/kubernetes/manifests`. The kubelet watches this directory for Pods to create on startup. --> -Kubeadm 将用于控制平面组件的静态 Pod 清单文件写入 `/etc/kubernetes/manifests` 目录。 -Kubelet 启动后会监视这个目录以便创建 Pod。 +kubeadm 将用于控制平面组件的静态 Pod 清单文件写入 `/etc/kubernetes/manifests` 目录。 +kubelet 启动后会监视这个目录以便创建 Pod。 静态 Pod 清单有一些共同的属性: @@ -546,7 +566,7 @@ The static Pod manifest for the API server is affected by following parameters p --> #### API 服务器 {#api-server} -API 服务器的静态 Pod 清单会受到用户提供的以下参数的影响: +API 服务器的静态 Pod 清单会受到用户提供的以下参数的影响: - 要绑定的 `apiserver-advertise-address` 和 `apiserver-bind-port`; 如果未提供,则这些值默认为机器上默认网络接口的 IP 地址和 6443 端口。 -- `service-cluster-ip-range` 给 service 使用 +- `service-cluster-ip-range` 给 Service 使用 - `--enable-admission-plugins` 设为: + - [`NamespaceLifecycle`](/zh-cn/docs/reference/access-authn-authz/admission-controllers/#namespacelifecycle) 例如,避免删除系统保留的名字空间 - [`LimitRanger`](/zh-cn/docs/reference/access-authn-authz/admission-controllers/#limitranger) 和 @@ -679,7 +700,7 @@ Other API server flags that are set unconditionally are: --> - 其他用于保护前端代理( [API 聚合层](/zh-cn/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/)) - 通信的标志: + 通信的标志: - `--requestheader-username-headers=X-Remote-User` - `--requestheader-group-headers=X-Remote-Group` @@ -695,7 +716,7 @@ Other API server flags that are set unconditionally are: The static Pod manifest for the controller manager is affected by following parameters provided by the users: --> -控制器管理器的静态 Pod 清单受用户提供的以下参数的影响: +控制器管理器的静态 Pod 清单受用户提供的以下参数的影响: -Kubeadm 使用[引导令牌认证](/zh-cn/docs/reference/access-authn-authz/bootstrap-tokens/) +kubeadm 使用[引导令牌认证](/zh-cn/docs/reference/access-authn-authz/bootstrap-tokens/) 将新节点连接到现有集群;更多的详细信息, 请参见[设计提案](https://git.k8s.io/design-proposals-archive/cluster-lifecycle/bootstrap-discovery.md)。 @@ -982,7 +1003,7 @@ Please note that: Kubeadm ensures that users in `system:bootstrappers:kubeadm:default-node-token` group are able to access the certificate signing API. --> -Kubeadm 确保 `system:bootstrappers:kubeadm:default-node-token` 组中的用户能够访问证书签名 API。 +kubeadm 确保 `system:bootstrappers:kubeadm:default-node-token` 组中的用户能够访问证书签名 API。 -Kubeadm 确保 csrapprover 控制器自动批准引导令牌的 CSR 请求。 +kubeadm 确保 csrapprover 控制器自动批准引导令牌的 CSR 请求。 -Kubeadm 确保节点启用了证书轮换,csrapprover 控制器将自动批准节点的新证书的 CSR 请求。 +kubeadm 确保节点启用了证书轮换,csrapprover 控制器将自动批准节点的新证书的 CSR 请求。 -1. 对 `cluster-info` ConfigMap 的访问 **不受** 速率限制。 +1. 对 `cluster-info` ConfigMap 的访问**不受**速率限制。 如果你把 API 服务器暴露到外网,这可能是一个问题,也可能不是; 这里最坏的情况是 DoS 攻击,攻击者使用 kube-apiserver 能够处理的所有动态请求来为 `cluster-info` ConfigMap 提供服务。 @@ -1082,7 +1103,7 @@ Please note that: -Kubeadm 通过 API 服务器安装内部 DNS 服务器和 kube-proxy 插件。 +kubeadm 通过 API 服务器安装内部 DNS 服务器和 kube-proxy 插件。 -- CoreDNS 服务的名称为 `kube-dns`。这样做是为了防止当用户将集群 DNS 从 kube-dns +- CoreDNS Service 的名称为 `kube-dns`。这样做是为了防止当用户将集群 DNS 从 kube-dns 切换到 CoreDNS 时出现服务中断。`--config` 方法在 [这里](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon) 有描述。 @@ -1341,4 +1362,3 @@ Please note that: - 临时身份验证解析到 `system:bootstrappers:kubeadm:default-node-token` 组的一个用户成员, 该成员在 `kubeadm init` 过程中被授予对 CSR API 的访问权 - 根据 `kubeadm init` 过程的配置,自动 CSR 审批由 csrapprover 控制器管理 - From 93949aab86a321858c5bfd9f9c0083eb331c63a5 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Fri, 3 May 2024 13:57:09 +0800 Subject: [PATCH 0467/1086] [zh-cn]sync kubeadm_upgrade_plan kubeadm-init kubeadm-join Signed-off-by: xin.li --- .../kubeadm/generated/kubeadm_upgrade_plan.md | 65 ++++++++++++++----- .../setup-tools/kubeadm/kubeadm-init.md | 26 +++++++- .../setup-tools/kubeadm/kubeadm-join.md | 12 ++-- 3 files changed, 81 insertions(+), 22 deletions(-) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md index 97f302362f..cab5e60288 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md @@ -1,11 +1,20 @@ + +检查可升级到哪些版本,并验证你当前的集群是否可升级。 + ### 概述 -检查可升级到哪些版本,并验证你当前的集群是否可升级。 要跳过互联网检查,请传递可选的 [version] 参数 +检查可升级到哪些版本,并验证你当前的集群是否可升级。 +该命令只能在存在 kubeconfig 文件 `admin.conf` 的控制平面节点上运行。 +要跳过互联网检查,请传入可选参数 [version]。 ``` kubeadm upgrade plan [version] [flags] @@ -37,6 +46,21 @@ Show unstable versions of Kubernetes as an upgrade alternative and allow upgradi + +--allow-missing-template-keys     Default: true + + + +

          + +如果为 true,则当模板中缺少字段或映射键时,忽略模板中的错误。仅适用于 golang 和 +jsonpath 输出格式。 +

          + + + --allow-release-candidate-upgrades @@ -65,6 +89,23 @@ Path to a kubeadm configuration file. + +-o, --experimental-output string     Default: "text" + + + +

          + +输出格式为 +text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file +其中一种。 +

          + + + + --feature-gates string @@ -72,17 +113,19 @@ Path to a kubeadm configuration file.

          一组描述各种特征特性门控的键值对。选项有:
          -EtcdLearnerMode=true|false (ALPHA - 默认值=false)
          -PublicKeysECDSA=true|false (ALPHA - 默认值=false)
          +EtcdLearnerMode=true|false (BETA - 默认值=true)
          +PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
          RootlessControlPlane=true|false (ALPHA - 默认值=false)
          UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false) +WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)

          @@ -142,14 +185,6 @@ Default: "text" 默认值:"text" - -

          - -实验性功能;输出格式为 text|json|yaml 其中的一种。 -

          - --print-config diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init.md index 5444fb7260..4e08f293c3 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init.md @@ -3,10 +3,8 @@ title: kubeadm init content_type: concept weight: 20 --- + {{< table caption="kubeadm 特性门控" >}} @@ -314,6 +313,7 @@ Feature | Default | Alpha | Beta | GA `EtcdLearnerMode` | `true` | 1.27 | 1.29 | - `PublicKeysECDSA` | `false` | 1.19 | - | - `RootlessControlPlane` | `false` | 1.22 | - | - +`WaitForAllControlPlaneComponents` | `false` | 1.30 | - | - {{< /table >}} {{< note >}} @@ -361,6 +361,26 @@ you upgrade to a newer version of Kubernetes. 以非 root 用户身份运行。如果未设置该标志,则这些组件以 root 身份运行。 你可以在升级到更新版本的 Kubernetes 之前更改此特性门控的值。 + +`WaitForAllControlPlaneComponents` +: 启用此特性门控后,kubeadm 将等待控制平面节点上的所有控制平面组件 + (kube-apiserver、kube-controller-manager、kube-scheduler)在其 `/healthz` + 端点上报告 200 状态码。这些检测在 `https://127.0.0.1:PORT/healthz` 上执行,其中 + `PORT` 取自组件的 `--secure-port` 标志。 + 如果没有启用此特性门控,kubeadm 将仅等待控制平面节点上的 kube-apiserver 准备就绪。 + 等待过程在 kubeadm 启动主机上的 kubelet 后立即开始。如果你希望在 `kubeadm init` + 或 `kubeadm join` 命令执行期间观察所有控制平面组件的就绪状态,建议你启用此特性门控。 + diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-join.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-join.md index a6ba7de662..545c95c8ac 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-join.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-join.md @@ -89,7 +89,7 @@ For control-plane nodes additional steps are performed: -Kubeadm 允许你使用 `kubeadm join phase` 分阶段将节点加入集群。 +kubeadm 允许你使用 `kubeadm join phase` 分阶段将节点加入集群。 -Kubeadm 的发现有几个选项,每个选项都有安全性上的优缺点。 +kubeadm 的发现有几个选项,每个选项都有安全性上的优缺点。 适合你的环境的正确方法取决于节点是如何准备的以及你对网络的安全性期望 和节点的生命周期特点。 @@ -385,9 +385,13 @@ and CSR approval for a new node: 如果集群没有 `ca.key` 文件,你必须在外部对 `kubelet.conf` 中嵌入的证书进行签名。 +有关更多信息,请参阅 [PKI 证书和要求](/zh-cn/docs/setup/best-practices/certificates/)和 +[使用 kubeadm 进行证书管理](/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#external-ca-mode)。 -Kubeadm 的默认值可能不适用于所有人。 +kubeadm 的默认值可能不适用于所有人。 本节说明如何以牺牲可用性为代价来加强 kubeadm 安装。 From e9808436fe9b3b4e47df9e21d3d7329054d53617 Mon Sep 17 00:00:00 2001 From: Hiroyuki Hasebe <16788901+levi106@users.noreply.github.com> Date: Fri, 3 May 2024 23:45:34 +0900 Subject: [PATCH 0469/1086] Reflecting feedback --- .../included/optional-kubectl-configs-bash-linux.md | 10 +++++----- .../tools/included/optional-kubectl-configs-fish.md | 2 +- .../tools/included/optional-kubectl-configs-zsh.md | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md b/content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md index e84a30d1ac..04a406f512 100644 --- a/content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md +++ b/content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-linux.md @@ -11,7 +11,7 @@ _build: ### はじめに Bashにおけるkubectlの補完スクリプトは`kubectl completion bash`コマンドで生成できます。 -シェル内で補完スクリプトをsourceすることでkubectlの自動補完が有効になります。 +補完スクリプトをシェル内に読み込ませることでkubectlの自動補完が有効になります。 ただし、補完スクリプトは[**bash-completion**](https://github.com/scop/bash-completion)に依存しているため、事前にインストールしておく必要があります(`type _init_completion`を実行することで、bash-completionがすでにインストールされていることを確認できます)。 @@ -21,7 +21,7 @@ bash-completionは多くのパッケージマネージャーから提供され `apt-get install bash-completion`または`yum install bash-completion`などでインストールできます。 上記のコマンドでbash-completionの主要スクリプトである`/usr/share/bash-completion/bash_completion`が作成されます。 -パッケージマネージャーによっては、このファイルを`~/.bashrc`にて手動でsourceする必要があります。 +パッケージマネージャーによっては、このファイルを`~/.bashrc`にて手動で読み込ませる必要があります。 これを調べるには、シェルをリロードしてから`type _init_completion`を実行してください。 コマンドが成功していればすでに設定済みです。そうでなければ、`~/.bashrc`ファイルに以下を追記してください: @@ -36,7 +36,7 @@ source /usr/share/bash-completion/bash_completion #### Bash -すべてのシェルセッションにてkubectlの補完スクリプトをsourceできるようにしなければなりません。 +次に、kubectl補完スクリプトがすべてのシェルセッションで読み込まれるように設定する必要があります。 これを行うには2つの方法があります: {{< tabs name="kubectl_bash_autocompletion" >}} @@ -57,12 +57,12 @@ echo 'complete -o default -F __start_kubectl k' >>~/.bashrc ``` {{< note >}} -bash-completionは`/etc/bash_completion.d`内のすべての補完スクリプトをsourceします。 +bash-completionは`/etc/bash_completion.d`内のすべての補完スクリプトを読み込みます。 {{< /note >}} どちらも同様の手法です。 シェルをリロードしたあとに、kubectlの自動補完が機能するはずです。 -シェルの現在のセッションでbashの自動補完を有効にするには、~/.bashrcをsourceします: +シェルの現在のセッションでbashの自動補完を有効にするには、~/.bashrcを読み込みます: ```bash source ~/.bashrc diff --git a/content/ja/docs/tasks/tools/included/optional-kubectl-configs-fish.md b/content/ja/docs/tasks/tools/included/optional-kubectl-configs-fish.md index d6dacaa67b..c5eb993188 100644 --- a/content/ja/docs/tasks/tools/included/optional-kubectl-configs-fish.md +++ b/content/ja/docs/tasks/tools/included/optional-kubectl-configs-fish.md @@ -13,7 +13,7 @@ Fishに対する自動補完はkubectl 1.23以降が必要です。 {{< /note >}} Fishにおけるkubectlの補完スクリプトは`kubectl completion fish`コマンドで生成できます。 -シェル内で補完スクリプトをsourceすることでkubectlの自動補完が有効になります。 +補完スクリプトをシェル内に読み込ませることでkubectlの自動補完が有効になります。 すべてのシェルセッションで使用するには、`~/.config/fish/config.fish`に以下を追記してください: diff --git a/content/ja/docs/tasks/tools/included/optional-kubectl-configs-zsh.md b/content/ja/docs/tasks/tools/included/optional-kubectl-configs-zsh.md index 98597649ae..bba0dcd42a 100644 --- a/content/ja/docs/tasks/tools/included/optional-kubectl-configs-zsh.md +++ b/content/ja/docs/tasks/tools/included/optional-kubectl-configs-zsh.md @@ -9,7 +9,7 @@ _build: --- Zshにおけるkubectlの補完スクリプトは`kubectl completion zsh`コマンドで生成できます。 -シェル内で補完スクリプトをsourceすることでkubectlの自動補完が有効になります。 +補完スクリプトをシェル内に読み込ませることでkubectlの自動補完が有効になります。 すべてのシェルセッションで使用するには、`~/.zshrc`に以下を追記してください: From 571aa04ca455f74c7e13be202c1e1f851ce3ede4 Mon Sep 17 00:00:00 2001 From: tico88612 <17496418+tico88612@users.noreply.github.com> Date: Sat, 4 May 2024 02:43:33 +0800 Subject: [PATCH 0470/1086] [zh-cn] sync releases/_index.md Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com> --- content/zh-cn/releases/_index.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/content/zh-cn/releases/_index.md b/content/zh-cn/releases/_index.md index fa7cc83d95..e2ca6ebbbd 100644 --- a/content/zh-cn/releases/_index.md +++ b/content/zh-cn/releases/_index.md @@ -64,3 +64,10 @@ for the upcoming **{{< skew nextMinorVersion >}}** Kubernetes release! ## Helpful Resources --> ## 有用的资源 {#helpful-resources} + + +有关角色和发布流程的重要信息, +请参阅 [Kubernetes 发布团队](https://github.com/kubernetes/sig-release/tree/master/release-team) 资源。 From 1438da5d8213914f80cfa177f75a3749b828e8fb Mon Sep 17 00:00:00 2001 From: Arhell Date: Sat, 4 May 2024 00:20:00 +0300 Subject: [PATCH 0471/1086] [it] Ready training section for vanilla Docsy --- content/it/training/_index.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/it/training/_index.html b/content/it/training/_index.html index 0a90e5c351..f304193063 100644 --- a/content/it/training/_index.html +++ b/content/it/training/_index.html @@ -5,6 +5,10 @@ abstract: Programmi di formazioni, certificazioni e partner. layout: basic cid: training class: training +body_class: training +menu: + main: + weight: 30 ---
          From dc4f946d6507a1cb202b96245a29d65dd6103ddf Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 4 May 2024 07:59:07 +0800 Subject: [PATCH 0472/1086] [zh] Add 4 new feature gates: r*.md (#46159) * [zh] Add 4 new feature gates: r*.md * Update retroactive-default-storage-class.md --------- Co-authored-by: Qiming Teng --- .../recursive-read-only-mounts.md | 19 ++++++++++ ...relaxed-environment-variable-validation.md | 17 +++++++++ .../retroactive-default-storage-class.md | 28 ++++++++++++++ .../feature-gates/root-ca-config-map.md | 38 +++++++++++++++++++ 4 files changed, 102 insertions(+) create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/recursive-read-only-mounts.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/relaxed-environment-variable-validation.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/retroactive-default-storage-class.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/root-ca-config-map.md diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/recursive-read-only-mounts.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/recursive-read-only-mounts.md new file mode 100644 index 0000000000..411f9a0cee --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/recursive-read-only-mounts.md @@ -0,0 +1,19 @@ +--- +title: RecursiveReadOnlyMounts +content_type: feature_gate +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.30" +--- + + +启用对递归只读挂载的支持。 +更多细节参阅[只读挂载](/zh-cn/docs/concepts/storage/volumes/#read-only-mounts)。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/relaxed-environment-variable-validation.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/relaxed-environment-variable-validation.md new file mode 100644 index 0000000000..ec6356648d --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/relaxed-environment-variable-validation.md @@ -0,0 +1,17 @@ +--- +title: RelaxedEnvironmentVariableValidation +content_type: feature_gate +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.30" +--- + + +允许在环境变量中使用几乎所有可打印的 ASCII 字符。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/retroactive-default-storage-class.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/retroactive-default-storage-class.md new file mode 100644 index 0000000000..4680666a4d --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/retroactive-default-storage-class.md @@ -0,0 +1,28 @@ +--- +title: RetroactiveDefaultStorageClass +content_type: feature_gate +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.25" + toVersion: "1.25" + - stage: beta + defaultValue: true + fromVersion: "1.26" + toVersion: "1.27" + - stage: stable + defaultValue: true + fromVersion: "1.28" + toVersion: "1.28" + +removed: true +--- + + +允许通过反射机制为未绑定的 PVC 设置 StorageClass。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/root-ca-config-map.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/root-ca-config-map.md new file mode 100644 index 0000000000..b88493ba4c --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/root-ca-config-map.md @@ -0,0 +1,38 @@ +--- +# Removed from Kubernetes +title: RootCAConfigMap +content_type: feature_gate + +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.13" + toVersion: "1.19" + - stage: beta + defaultValue: true + fromVersion: "1.20" + toVersion: "1.20" + - stage: stable + defaultValue: true + fromVersion: "1.21" + toVersion: "1.22" + +removed: true +--- + + +配置 `kube-controller-manager` 以向每个命名空间发布名为 `kube-root-ca.crt` 的 +{{< glossary_tooltip text="ConfigMap" term_id="configmap" >}}。 +这个 ConfigMap 包含一个 CA 证书包,用于验证与 kube-apiserver 的连接。 +更多细节参阅[绑定的服务账户令牌](https://github.com/kubernetes/enhancements/blob/master/keps/sig-auth/1205-bound-service-account-tokens/README.md)。 From 7f302c3cad85aa92a424a416c9a757115cbaf2a3 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Sat, 4 May 2024 10:48:12 +0600 Subject: [PATCH 0473/1086] Typo fixed --- content/bn/docs/reference/glossary/ephemeral-container.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/reference/glossary/ephemeral-container.md b/content/bn/docs/reference/glossary/ephemeral-container.md index be9d65c4de..8b15c76c76 100644 --- a/content/bn/docs/reference/glossary/ephemeral-container.md +++ b/content/bn/docs/reference/glossary/ephemeral-container.md @@ -16,4 +16,4 @@ tags: আপনি যদি সমস্যা নিয়ে চলমান একটি পড তদন্ত করতে চান তবে আপনি সেই পডে একটি অস্থায়ী কন্টেইনার যোগ করতে পারেন এবং ডায়াগনস্টিকস চালাতে পারেন। ইফেমেরাল কন্টেইনারগুলির কোনও রিসোর্স বা শিডিউলিং গ্যারান্টি নেই এবং ওয়ার্কলোড এর কোনও অংশ চালানোর জন্য সেগুলি আপনার ব্যবহার করা উচিত নয়। -ইফেমেরাল কনটেইনার {{< glossary_tooltip text="স্টেটিক পড" term_id="static-pod" >}} দ্বারা সমর্থিত নয়৷ +ইফেমেরাল কনটেইনার {{< glossary_tooltip text="স্ট্যাটিক পড" term_id="static-pod" >}} দ্বারা সাপোর্টেড নয়৷ From a9df89814ab18a5ef1658ff4076151e4df0f78da Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Sat, 4 May 2024 11:38:13 +0600 Subject: [PATCH 0474/1086] Update release.md --- content/bn/releases/release.md | 80 +++++++++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 10 deletions(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index 24c46334e7..f06e289eae 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -176,15 +176,75 @@ PR এ স্বয়ংক্রিয়ভাবে মাইলফলক - `kubernetes/sig-release` - `kubernetes/test-infra` -At creation time, PRs against the `master` branch need humans to hint at which -milestone they might want the PR to target. Once merged, PRs against the -`master` branch have milestones auto-applied so from that time onward human -management of that PR's milestone is less necessary. On PRs against release -branches, milestones are auto-applied when the PR is created so no human -management of the milestone is ever necessary. +তৈরি করার সময়, `master` ব্রাঞ্চের বিপরীতে PR গুলোর মানুষের দেওয়া নির্দেশনা প্রয়োজন কোন +মাইলস্টোন টার্গেট করতে হবে তার জন্য। একবার মার্জ হলে, +`master` ব্রাঞ্চের বিপরীতে তৈরি করা PR গুলোয় মাইলস্টোন় স্বয়ংক্রিয়ভাবে প্রয়োগ করা হয় তাই সেই সময় থেকে +ওই PR এর মাইলস্টোনে মানুষের ব্যবস্থাপনা কম প্রয়োজনীয়। রিলিজ ব্রাঞ্চ এর বিপরীতে তৈরি PR এ, +মাইলস্টোন সংক্রিয়ভাবে প্রয়োগ হয় তাই মানুষবিহীন +ব্যবস্থাপনা মাইলস্টোনের জন্য সবসময় প্রয়োজন। -Any other effort that should be tracked by the Release Team that doesn't fall -under that automation umbrella should be have a milestone applied. +অন্য কোনো প্রচেষ্টা যা রিলিজ টিমের দ্বারা ট্র্যাক করা উচিত যা কোনো +অটোমেশন আম্ব্রেলার অধীনে নেই তাতে একটি মাইলফলক প্রয়োগ করা উচিত। -Implementation and bug fixing is ongoing across the cycle, but culminates in a -code freeze period. +ইমপ্লিমেন্টেশন এবং বাগ ফিক্সিং পুরো সাইকেল জুড়ে চলেছে, কিন্তু শেষ হয় +কোড-ফ্রিজ সময়কালে। + +**[কোড ফ্রিজ][code-freeze]** শুরু হয় ~১২ সপ্তাহে এবং পরবর্তী ~২ সপ্তাহ পর্যন্ত চলে। +এই সময়ে রিলিজ কোডবেসে শুধুমাত্র গুরুত্বপূর্ণ বাগ ফিক্স গ্রহণ করা +হয়। + +Code Freeze এর পরে এবং রিলিজের পূর্বে প্রায় দুই সপ্তাহের সময় রয়েছে, যা রিলিজ পূর্বে +সমস্ত অবশিষ্ট গুরুত্বপূর্ণ সমস্যাগুলি সমাধান করা আবশ্যক। +এটি ডকুমেন্টেশন চূড়ান্ত করার জন্য সময় দেয়। + +যখন কোড বেস স্টেবল হয়, তখন মাস্টার ব্রাঞ্চটি সাধারণ উন্নতির জন্য পুনরায় খোলা হয় +এবং পরবর্তী রিলিজের মাইলস্টোনে কাজ সেখানে শুরু করা হয়। +বর্তমান রিলিজের জন্য অবশিষ্ট যেকোনো সংশোধন মাস্টার থেকে রিলিজ ব্রাঞ্চে চেরি-পিক করা হয়। +রিলিজ ব্রাঞ্চ থেকে রিলিজ তৈরি করা হয়। + +প্রত্যেকটি রিলিজ একটি বৃহৎ কুবারনেটিস লাইফসাইকের অংশ: + +![কুবারনেটস রিলিজ লাইফসাইকেলের ছবি তিনটি রিলিজ বিস্তৃত](/images/releases/release-lifecycle.jpg) + +## মাইলস্টোন থেকে আইটেম অপসারণ + +মাইলস্টোন আইটেম যোগ করার প্রক্রিযার অধিক দূরে যাওয়ার আগে, +দয়া করে লক্ষ্য করুন: + +Members of the [Release Team][release-team] may remove issues from the +milestone if they or the responsible SIG determine that the issue is not +actually blocking the release and is unlikely to be resolved in a timely +fashion. + +Members of the Release Team may remove PRs from the milestone for any of the +following, or similar, reasons: + +- PR is potentially de-stabilizing and is not needed to resolve a blocking + issue +- PR is a new, late feature PR and has not gone through the enhancements + process or the [exception process][exceptions] +- There is no responsible SIG willing to take ownership of the PR and resolve + any follow-up issues with it +- PR is not correctly labelled +- Work has visibly halted on the PR and delivery dates are uncertain or late + +While members of the Release Team will help with labelling and contacting +SIG(s), it is the responsibility of the submitter to categorize PRs, and to +secure support from the relevant SIG to guarantee that any breakage caused by +the PR will be rapidly resolved. + +Where additional action is required, an attempt at human to human escalation +will be made by the Release Team through the following channels: + +- Comment in GitHub mentioning the SIG team and SIG members as appropriate for + the issue type +- Emailing the SIG mailing list + - bootstrapped with group email addresses from the + [community sig list][sig-list] + - optionally also directly addressing SIG leadership or other SIG members +- Messaging the SIG's Slack channel + - bootstrapped with the slackchannel and SIG leadership from the + [community sig list][sig-list] + - optionally directly "@" mentioning SIG leadership or others by handle + +## Adding An Item To The Milestone From 15f68d0ebbf56cb1c67ce525729494aa48765b6c Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Thu, 2 May 2024 19:17:44 +0800 Subject: [PATCH 0475/1086] [zh-cn]Locatlization blog:2024-02-21-prevent-unauthorized-volume-mode-conversion-ga.md Signed-off-by: xin.li --- ...-unauthorized-volume-mode-conversion-ga.md | 196 ++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 content/zh-cn/blog/_posts/2024-02-21-prevent-unauthorized-volume-mode-conversion-ga.md diff --git a/content/zh-cn/blog/_posts/2024-02-21-prevent-unauthorized-volume-mode-conversion-ga.md b/content/zh-cn/blog/_posts/2024-02-21-prevent-unauthorized-volume-mode-conversion-ga.md new file mode 100644 index 0000000000..25e643d413 --- /dev/null +++ b/content/zh-cn/blog/_posts/2024-02-21-prevent-unauthorized-volume-mode-conversion-ga.md @@ -0,0 +1,196 @@ +--- +layout: blog +title: "Kubernetes 1.30:防止未经授权的卷模式转换进阶到 GA" +date: 2024-04-30 +slug: prevent-unauthorized-volume-mode-conversion-ga +--- + + +**作者:** Raunak Pradip Shah (Mirantis) + +**译者:** Xin Li (DaoCloud) + + +随着 Kubernetes 1.30 的发布,防止修改从 Kubernetes 集群中现有 +VolumeSnapshot 创建的 [PersistentVolumeClaim](/zh-cn/docs/concepts/storage/persistent-volumes/) +的卷模式的特性已被升级至 GA! + + +## 问题 + +PersistentVolumeClaim 的[卷模式](/zh-cn/docs/concepts/storage/persistent-volumes/#volume-mode) +是指存储设备上的底层卷是被格式化为某文件系统还是作为原始块设备呈现给使用它的 Pod。 + +用户可以利用自 Kubernetes v1.20 以来一直稳定的 VolumeSnapshot 特性,基于 +Kubernetes 集群中现有的 VolumeSnapshot 创建 PersistentVolumeClaim(简称 PVC)。 +PVC 规约中包括一个 `dataSource` 字段,它可以指向现有的 VolumeSnapshot 实例。 +有关如何基于 Kubernetes 集群中现有 VolumeSnapshot 创建 PVC 的更多详细信息, +请访问[使用卷快照创建 PersistentVolumeClaim](/zh-cn/docs/concepts/storage/persistent-volumes/#create-persistent-volume-claim-from-volume-snapshot)。 + + +当利用上述特性时,没有逻辑来验证制作快照的原始卷的模式是否与新创建的卷的模式匹配。 + +这带来了一个安全漏洞,允许恶意用户潜在地利用主机操作系统中未知的漏洞。 + +有一个合法的场景允许某些用户执行此类转换。 +通常,存储备份供应商会在备份操作过程中转换卷模式,通过检索已被更改的块来提高操作效率。 +这使得 Kubernetes 无法完全阻止此类操作,但给区分可信用户和恶意用户带来了挑战。 + + +## 防止未经授权的用户转换卷模式 + +在此上下文中,授权用户是有权对 VolumeSnapshotContents(集群级资源)执行 +**update** 或 **patch** 操作的用户。 +集群管理员应仅向受信任的用户或应用程序(例如备份供应商)赋予这些权限。 +当从 VolumeSnapshot 创建 PVC 时,除了此类授权用户之外的用户将永远不会被允许修改 PVC 的卷模式。 + + +要转换卷模式,授权用户必须执行以下操作: + +1. 标识要用作给定命名空间中新创建的 PVC 的数据源的 VolumeSnapshot。 +2. 识别与上述 VolumeSnapshot 绑定的 VolumeSnapshotContent。 + + ```shell + kubectl describe volumesnapshot -n + ``` + + +3. 在 VolumeSnapshotContent 上添加 [`snapshot.storage.kubernetes.io/allow-volume-mode-change: "true"`](/zh-cn/docs/reference/labels-annotations-taints/#snapshot-storage-kubernetes-io-allowvolumemodechange) + 注解,VolumeSnapshotContent 注解必须包含类似于以下清单片段: + + ```yaml + kind: VolumeSnapshotContent + metadata: + annotations: + - snapshot.storage.kubernetes.io/allow-volume-mode-change: "true" + ... + ``` + + +**注意**:对于预配置的 VolumeSnapshotContents,你必须执行额外的步骤,将 +`spec.sourceVolumeMode` 字段设置为 `Filesystem` 或 `Block`, +具体取决于用来制作此快照的卷的模式。 + +一个例子如下所示: + + ```yaml + apiVersion: snapshot.storage.k8s.io/v1 + kind: VolumeSnapshotContent + metadata: + annotations: + - snapshot.storage.kubernetes.io/allow-volume-mode-change: "true" + name: + spec: + deletionPolicy: Delete + driver: hostpath.csi.k8s.io + source: + snapshotHandle: + sourceVolumeMode: Filesystem + volumeSnapshotRef: + name: + namespace: + ``` + + +对备份或恢复操作期间需要转换卷模式的所有 VolumeSnapshotContent 重复步骤 1 至 3。 +这可以通过具有授权用户凭据的软件来完成,也可以由授权用户手动完成。 + +如果 VolumeSnapshotContent 对象上存在上面显示的注解,Kubernetes 将不会阻止卷模式转换。 +用户在尝试将注解添加到任何 VolumeSnapshotContent 之前应记住这一点。 + + +## 需要采取的行动 + +默认情况下,在 external-provisioner `v4.0.0` 和 external-snapshotter `v7.0.0` +中启用 `prevent-volume-mode-conversion` 特性标志。 +基于 VolumeSnapshot 来创建 PVC 时,卷模式更改将被拒绝,除非已执行上述步骤。 + + +## 接下来 + +要确定哪些 CSI 外部 sidecar 版本支持此功能,请前往 [CSI 文档页面](https://kubernetes-csi.github.io/docs/)。 +对于任何疑问或问题,请加入 [Slack 上的 Kubernetes](https://slack.k8s.io/) 并在 #csi 或 #sig-storage 频道中发起讨论。 +或者,在 CSI 外部快照[仓库](https://github.com/kubernetes-csi/external-snapshotter)中登记问题。 From 663267f1c9db52e90055c1a738e12b2053d8bff8 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sat, 4 May 2024 16:33:46 +0800 Subject: [PATCH 0476/1086] [zh-cn]sync ingress dynamic-provisioning Signed-off-by: xin.li --- content/zh-cn/docs/concepts/services-networking/ingress.md | 5 +++++ content/zh-cn/docs/concepts/storage/dynamic-provisioning.md | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/content/zh-cn/docs/concepts/services-networking/ingress.md b/content/zh-cn/docs/concepts/services-networking/ingress.md index 1eca45edae..5cf8abbf1c 100644 --- a/content/zh-cn/docs/concepts/services-networking/ingress.md +++ b/content/zh-cn/docs/concepts/services-networking/ingress.md @@ -16,6 +16,11 @@ weight: 30 reviewers: - bprashanthluster: A set of Nodes that run containerized app title: Ingress +api_metadata: +- apiVersion: "networking.k8s.io/v1" + kind: "Ingress" +- apiVersion: "networking.k8s.io/v1" + kind: "IngressClass" content_type: concept description: >- Make your HTTP (or HTTPS) network service available using a protocol-aware configuration diff --git a/content/zh-cn/docs/concepts/storage/dynamic-provisioning.md b/content/zh-cn/docs/concepts/storage/dynamic-provisioning.md index c976b1ac28..4a819ae62f 100644 --- a/content/zh-cn/docs/concepts/storage/dynamic-provisioning.md +++ b/content/zh-cn/docs/concepts/storage/dynamic-provisioning.md @@ -23,13 +23,15 @@ calls to their cloud or storage provider to create new storage volumes, and then create [`PersistentVolume` objects](/docs/concepts/storage/persistent-volumes/) to represent them in Kubernetes. The dynamic provisioning feature eliminates the need for cluster administrators to pre-provision storage. Instead, it -automatically provisions storage when it is requested by users. +automatically provisions storage when users create +[`PersistentVolumeClaim` objects](/docs/concepts/storage/persistent-volumes/). --> 动态卷制备允许按需创建存储卷。 如果没有动态制备,集群管理员必须手动地联系他们的云或存储提供商来创建新的存储卷, 然后在 Kubernetes 集群创建 [`PersistentVolume` 对象](/zh-cn/docs/concepts/storage/persistent-volumes/)来表示这些卷。 -动态制备功能消除了集群管理员预先配置存储的需要。相反,它在用户请求时自动制备存储。 +动态制备功能消除了集群管理员预先配置存储的需要。相反,它在用户创建 +[`PersistentVolumeClaim` 对象](/zh-cn/docs/concepts/storage/persistent-volumes/)时自动制备存储。 From 8662b30cd1cd0ade42b1d8b89b1205ddc0cebce7 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sat, 4 May 2024 16:27:34 +0800 Subject: [PATCH 0477/1086] [zh-cn]sync assign-pod-node persistent-volumes Signed-off-by: xin.li --- .../scheduling-eviction/assign-pod-node.md | 2 +- .../concepts/storage/persistent-volumes.md | 4 +-- .../pod-with-affinity-preferred-weight.yaml | 32 +++++++++++++++++++ 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 content/zh-cn/examples/pods/pod-with-affinity-preferred-weight.yaml diff --git a/content/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node.md b/content/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node.md index ecce2ff2ee..cab73de054 100644 --- a/content/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node.md +++ b/content/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node.md @@ -333,7 +333,7 @@ For example, consider the following Pod spec: 例如,考虑下面的 Pod 规约: -{{% code_sample file="pods/pod-with-affinity-anti-affinity.yaml" %}} +{{% code_sample file="pods/pod-with-affinity-preferred-weight.yaml" %}} 你应该将 `.spec.os.name` 字段设置为 `windows` 或 `linux` 以表示你希望 Pod 运行在哪个操作系统之上。 这两个是 Kubernetes 目前支持的操作系统。将来,这个列表可能会被扩充。 diff --git a/content/zh-cn/docs/concepts/workloads/pods/ephemeral-containers.md b/content/zh-cn/docs/concepts/workloads/pods/ephemeral-containers.md index 3e2beb7bc0..ea99eb7107 100644 --- a/content/zh-cn/docs/concepts/workloads/pods/ephemeral-containers.md +++ b/content/zh-cn/docs/concepts/workloads/pods/ephemeral-containers.md @@ -1,7 +1,7 @@ --- title: 临时容器 content_type: concept -weight: 80 +weight: 60 --- From 382e00d5569be327811b857b8d2765f15f00a4a3 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 4 May 2024 23:03:47 +0600 Subject: [PATCH 0481/1086] Update _index.md --- content/bn/blog/_index.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/content/bn/blog/_index.md b/content/bn/blog/_index.md index afb22d0c8c..feaefbf8a3 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 >}} From ad5d24cc9060046a55ad0280012754501b53243c Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 4 May 2024 23:15:26 +0600 Subject: [PATCH 0482/1086] Update _index.html --- content/bn/case-studies/_index.html | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/content/bn/case-studies/_index.html b/content/bn/case-studies/_index.html index a552c723d1..48b93d73c7 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 --- From 42c1899d5506d04827adfdba7f2023eac961d459 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 4 May 2024 23:38:11 +0600 Subject: [PATCH 0483/1086] Update patch-releases.md --- content/bn/releases/patch-releases.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/content/bn/releases/patch-releases.md b/content/bn/releases/patch-releases.md index 43a9b95d21..f688797a44 100644 --- a/content/bn/releases/patch-releases.md +++ b/content/bn/releases/patch-releases.md @@ -76,11 +76,7 @@ type: docs নিম্নলিখিত মাসিক রিলিজ পয়েন্টগুলির লক্ষ্য করব। অপরিকল্পিত, গুরুত্বপূর্ণ রিলিজগুলি এদের মধ্যেও ঘটতে পারে। -| মাসিক প্যাচ রিলিজ | চেরি পিক শেষ সময় | লক্ষ্য তারিখ | -| --------------------- | -------------------- | ----------- | -| মার্চ 2024 | 2024-03-08 | 2024-03-13 | -| এপ্রিল 2024 | 2024-04-12 | 2024-04-17 | -| মে 2024 | 2024-05-10 | 2024-05-15 | +{{< upcoming-releases >}} ## সক্রিয় শাখাগুলির জন্য বিস্তারিত রিলিজ ইতিহাস From 60f3c2c37968db48597b1087d09665dd805cc866 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sat, 4 May 2024 23:50:50 +0600 Subject: [PATCH 0484/1086] Update _index.html --- content/bn/partners/_index.html | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/content/bn/partners/_index.html b/content/bn/partners/_index.html index 2dc386f010..382c76f76d 100644 --- a/content/bn/partners/_index.html +++ b/content/bn/partners/_index.html @@ -4,14 +4,17 @@ bigheader: কুবারনেটিস পার্টনার abstract: কুবারনেটিস ইকোসিস্টেম বৃদ্ধি করা। class: gridPage cid: partners +body_class: partners +menu: + main: + weight: 40 ---
          কুবারনেটিস পার্টনাররা একটি শক্তিশালী, জীবন্ত কোডবেস তৈরি করতে সহায়তা করে যা সমতুল্য প্ল্যাটফর্মের একটি স্পেক্ট্রাম সমর্থন করে।
          -
          -
          +
          কুবারনেটিস সার্টিফাইড সার্ভিস প্রভাইডার

          একটি গভীর অভিজ্ঞতা সহ সনাক্ত সেবা প্রদানকারী যারা উদ্যোগপূর্ণভাবে কুবারনেটিস গ্রহণ সাফল্যের জন্য প্রয়োগ করে। @@ -19,10 +22,8 @@ cid: partners

          আপনি যদি হতে চান KCSP? -
          -
          সার্টিফাইড কুবারনেটিস ডিস্ট্রিবিউশন, হোস্টেড প্ল্যাটফর্ম, এবং ইনস্টলার
          সফটওয়্যার সামঞ্জস্যতা নিশ্চিত করে যে প্রতিটি ভেন্ডরের সংস্করণের কুবারনেটিস প্রয়োজনীয় API সমর্থন করে। @@ -30,10 +31,8 @@ cid: partners

          আপনি কি হতে চান কুবারনেটিস সার্টিফাইড? -
          -
          কুবারনেটিস প্রশিক্ষণ পার্টনার
          @@ -42,12 +41,7 @@ cid: partners

          আপনি কি হতে চান KTP? -
          {{< cncf-landscape helpers=true >}}
          - - From 7a2c2a32a5c129b85235cc26d4c28cd63e442711 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 00:11:12 +0600 Subject: [PATCH 0485/1086] Delete content/bn/includes/partner-style.css --- content/bn/includes/partner-style.css | 201 -------------------------- 1 file changed, 201 deletions(-) delete mode 100644 content/bn/includes/partner-style.css diff --git a/content/bn/includes/partner-style.css b/content/bn/includes/partner-style.css deleted file mode 100644 index dc120872e0..0000000000 --- a/content/bn/includes/partner-style.css +++ /dev/null @@ -1,201 +0,0 @@ -/* SECTIONS */ -.section { - clear: both; - padding: 0px; - margin-bottom: 2em; -} - -.kcsp_section { - clear: both; - padding: 0px; - margin-bottom: 2em; -} - -/* COLUMN SETUP */ -.col { - display: block; - float:left; - margin: 1% 0 1% 1.6%; - background-color: #f9f9f9; -} -.col:first-child { margin-left: 0; } - - -/* GROUPING */ -.group:before, -.group:after { - content:""; - display:table; -} -.group:after { - clear:both; -} -.group { - zoom:1; /* For IE 6/7 */ -} - -/* GRID OF THREE */ -.span_3_of_3 { - width: 35%; - background-color: #f9f9f9; - padding: 20px; -} -.span_2_of_3 { - width: 35%; - background-color: #f9f9f9; - padding: 20px; -} -.span_1_of_3 { - width: 35%; - background-color: #f9f9f9; - padding: 20px; -} - -.col-container { - display: table; /* Make the container element behave like a table */ - width: 100%; /* Set full-width to expand the whole page */ - padding-bottom: 30px; -} - -.col-nav { - display: table-cell; /* Make elements inside the container behave like table cells */ - width: 18%; - background-color: #f9f9f9; - padding: 20px; - border: 5px solid white; -} - -/* GO FULL WIDTH AT LESS THAN 480 PIXELS */ - -@media only screen and (max-width: 480px) { - .col { margin: 1% 0 1% 0%;} - .span_3_of_3, .span_2_of_3, .span_1_of_3 { width: 100%; } -} - -@media only screen and (max-width: 650px) { - .col-nav { - display: block; - width: 100%; - } -} - -.button{ - max-width: 100%; - box-sizing: border-box; - margin: 0; - display: inline-block; - border-radius: 6px; - padding: 0 20px; - line-height: 40px; - color: #ffffff; - font-size: 16px; - background-color: #3371e3; - text-decoration: none; - } - -h5 { - font-size: 16px; - line-height: 1.5em; - margin-bottom: 2em; -} - -#usersGrid a { - display: inline-block; - background-color: #f9f9f9; -} - -#ktpContainer, #distContainer, #kcspContainer, #isvContainer, #servContainer { - position: relative; - width: 100%; - display: flex; - justify-content: space-between; - flex-wrap: wrap; -} - -#isvContainer { - margin-bottom: 80px; -} - -#kcspContainer { - margin-bottom: 80px; -} - -#distContainer { - margin-bottom: 80px; -} - -#ktpContainer { - margin-bottom: 80px; -} - -.partner-box { - position: relative; - width: 47%; - max-width: 48%; - min-width: 48%; - margin-bottom: 20px; - padding: 20px; - flex: 1; - display: flex; - justify-content: left; - align-items: flex-start; -} - -.partner-box img { - background-color: #f9f9f9; -} - -.partner-box > div { - margin-left: 30px; -} - -.partner-box a { - color: #3576E3; -} - -@media screen and (max-width: 1024px) { - .partner-box { - flex-direction: column; - justify-content: flex-start; - } - - .partner-box > div { - margin: 20px 0 0; - } -} - -@media screen and (max-width: 568px) { - #ktpContainer, #distContainter, #kcspContainer, #isvContainer, #servContainer { - justify-content: center; - } - - .partner-box { - flex-direction: column; - justify-content: flex-start; - width: 100%; - max-width: 100%; - min-width: 100%; - } - - .partner-box > div { - margin: 20px 0 0; - } -} - -@media screen and (max-width: 568px) { - #ktpContainer, #distContainer, #kcspContainer, #isvContainer, #servContainer { - justify-content: center; - } - - .partner-box { - flex-direction: column; - justify-content: flex-start; - width: 100%; - max-width: 100%; - min-width: 100%; - } - - .partner-box > div { - margin: 20px 0 0; - } -} From e7656c63ee505e6aa6aa14ffa6ae2611481200c6 Mon Sep 17 00:00:00 2001 From: Hiroyuki Hasebe <16788901+levi106@users.noreply.github.com> Date: Sun, 5 May 2024 08:53:29 +0900 Subject: [PATCH 0486/1086] [ja] Translate content/ja/docs/tasks/tools/_index.md (#46030) * Translate content/ja/docs/tasks/tools/_index.md * Reflecting feedback --- content/ja/docs/tasks/tools/_index.md | 48 +++++++++++++++++++-------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/content/ja/docs/tasks/tools/_index.md b/content/ja/docs/tasks/tools/_index.md index 21bc70b140..bbc60cff25 100644 --- a/content/ja/docs/tasks/tools/_index.md +++ b/content/ja/docs/tasks/tools/_index.md @@ -7,22 +7,44 @@ no_list: true ## kubectl -Kubernetesのコマンドラインツール`kubectl`を使用すると、Kubernetesクラスターに対してコマンドを実行できるようになります。kubectlは、アプリケーションのデプロイ、クラスターリソースの調査と管理、ログの表示などに使用できます。 +Kubernetesのコマンドラインツール[`kubectl`](/docs/reference/kubectl/kubectl/)を使用すると、Kubernetesクラスターに対してコマンドを実行できるようになります。 +kubectlは、アプリケーションのデプロイ、クラスターリソースの調査と管理、ログの表示などに使用できます。 +kubectlの操作の完全なリストを含む詳細については、[`kubectl`のリファレンスドキュメント](/ja/docs/reference/kubectl/)を参照してください。 -`kubectl`のダウンロードとインストールを行い、クラスターへのアクセスをセットアップする方法については、[kubectlのインストールおよびセットアップ](/ja/docs/tasks/tools/install-kubectl/)を参照してください。 +kubectlはさまざまなLinuxプラットフォーム、macOS、Windows上にインストールできます。 +下記の中から好きなオペレーティングシステムを選んでください。 -また、[`kubectl`リファレンスドキュメント](/ja/docs/reference/kubectl/)も参照できます。 - -## minikube - -[minikube](https://minikube.sigs.k8s.io/)は、Kubernetesをローカルで実行するツールです。minikubeはシングルノードのKubernetesクラスターをパーソナルコンピューター上(Windows、macOS、Linux PCを含む)で実行することで、Kubernetesを試したり、日常的な開発作業のために利用できます。 - -ツールのインストールについて知りたい場合は、公式の[Get Started!](https://minikube.sigs.k8s.io/docs/start/)のガイドに従ってください。 - -minikubeが起動したら、[サンプルアプリケーションの実行](/ja/docs/tutorials/hello-minikube/)を試すことができます。 +- [Linux上でのkubectlのインストール](/ja/docs/tasks/tools/install-kubectl-linux) +- [macOS上でのkubectlのインストール](/ja/docs/tasks/tools/install-kubectl-macos) +- [Windows上でのkubectlのインストール](/ja/docs/tasks/tools/install-kubectl-windows) ## kind -minikubeと同じように、[kind](https://kind.sigs.k8s.io/docs/)もローカルコンピューター上でKubernetesを実行するツールです。minikubeとは違い、kindは1種類のコンテナランタイム上でしか動作しません。実行には[Docker](https://docs.docker.com/get-docker/)のインストールと設定が必要です。 +[`kind`](https://kind.sigs.k8s.io/)を使うと、ローカルのコンピューター上でKubernetesを実行することができます。 +このツールは[Docker](https://www.docker.com/)と[Podman](https://podman.io/)のどちらかのインストールが必要です。 -[Quick Start](https://kind.sigs.k8s.io/docs/user/quick-start/)に、kindの起動に必要な手順が説明されています。 +[Quick Start](https://kind.sigs.k8s.io/docs/user/quick-start/)に、kindの起動と実行に必要なことが書かれています。 + +kindのQuick Startのガイドを見る + +## minikube + +`kind`と同じように、[minikube](https://minikube.sigs.k8s.io/)は、Kubernetesをローカルで実行するツールです。 +`minikube`はオールインワンまたはマルチノードのローカルKubernetesクラスターをパーソナルコンピューター上(Windows、macOS、Linux PCを含む)で実行することで、Kubernetesを試したり、日常的な開発作業のために利用できます。 + +ツールのインストールについて知りたい場合は、公式の[Get Started!](https://minikube.sigs.k8s.io/docs/start/)のガイドに従ってください。 + +minikubeのGet Started!のガイドを見る + +minikubeが起動したら、[サンプルアプリケーションの実行](/ja/docs/tutorials/hello-minikube/)を試すことができます。 + +## kubeadm + +Kubernetesクラスターの作成、管理をするために{{< glossary_tooltip term_id="kubeadm" text="kubeadm" >}}ツールを使用することができます。 + +最低限実行可能でセキュアなクラスタを、ユーザーフレンドリーな方法で稼働させるために必要なアクションを実行します。 + +[kubeadmのインストール](/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)では、kubeadmをインストールする方法を示しています。 +一度インストールすれば、[クラスターを作成](/ja/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)するために使用できます。 + +kubeadmのインストールガイドを見る From 415da577dcb7548e5f4fad4fa827c88065691212 Mon Sep 17 00:00:00 2001 From: hihumikan Date: Sun, 5 May 2024 08:55:44 +0900 Subject: [PATCH 0487/1086] [ja] Localization of StatefulSet concept uses wrong term (#46170) * Fixed the description of StatefulSet(ja) * feat: Changed to be direct meaning --- content/ja/docs/reference/glossary/statefulset.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/ja/docs/reference/glossary/statefulset.md b/content/ja/docs/reference/glossary/statefulset.md index eb78c21fe3..53bb07098e 100644 --- a/content/ja/docs/reference/glossary/statefulset.md +++ b/content/ja/docs/reference/glossary/statefulset.md @@ -4,7 +4,7 @@ id: statefulset date: 2018-04-12 full_link: /ja/docs/concepts/workloads/controllers/statefulset/ short_description: > - StatefulSetはDeploymentとPodのセットのスケーリングを管理し、永続化ストレージと各Podの永続的な識別子を備えています。 + StatefulSetはPodのデプロイとスケーリングを管理し、永続化ストレージと各Podの永続的な識別子を備えています。 aka: tags: @@ -14,9 +14,9 @@ tags: - storage --- -StatefulSetはDeploymentと{{< glossary_tooltip text="Pod" term_id="pod" >}}のセットのスケーリングを管理し、それらのPodの*順序と一意性を保証* します。 +StatefulSetは{{< glossary_tooltip text="Pod" term_id="pod" >}}のデプロイとスケーリングを管理し、それらのPodの*順序と一意性を保証*します。 - + {{< glossary_tooltip term_id="deployment" >}}のように、StatefulSetは指定したコンテナのspecに基づいてPodを管理します。Deploymentとは異なり、StatefulSetは各Podにおいて管理が大変な同一性を維持します。これらのPodは同一のspecから作成されますが、それらは交換可能ではなく、リスケジュール処理をまたいで維持される永続的な識別子を持ちます。 From 3bf0fffa8bce5dea8ae0d8c095afc5a44cc63766 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 11:06:43 +0600 Subject: [PATCH 0488/1086] Create default-storage-class-prereqs.md --- content/bn/includes/default-storage-class-prereqs.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 content/bn/includes/default-storage-class-prereqs.md 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 0000000000..c0b74c8a22 --- /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) +করতে হবে। From 997a8d9e3132a95f74150de53aae71bd3a304326 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 11:12:55 +0600 Subject: [PATCH 0489/1086] Create task-tutorial-prereqs-node-upgrade.md --- content/bn/includes/task-tutorial-prereqs-node-upgrade.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 content/bn/includes/task-tutorial-prereqs-node-upgrade.md 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 0000000000..e2f6319658 --- /dev/null +++ b/content/bn/includes/task-tutorial-prereqs-node-upgrade.md @@ -0,0 +1,3 @@ +আপনার সমস্ত নোডগুলিতে শেল অ্যাক্সেস থাকতে হবে এবং আপনার ক্লাস্টারের সাথে যোগাযোগ করার জন্য +kubectl কমান্ড-লাইন টুলটি কনফিগার করা আবশ্যক। কমপক্ষে দুটি নোড সহ একটি ক্লাস্টারে এই টিউটোরিয়ালটি +চালানোর পরামর্শ দেওয়া হচ্ছে যা কন্ট্রোল প্লেন হোস্ট হিসাবে কাজ করছে না। From d250c3e99deab249f69e7a88d20e32d82bb22858 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 11:16:41 +0600 Subject: [PATCH 0490/1086] Update task-tutorial-prereqs.md --- content/bn/includes/task-tutorial-prereqs.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/content/bn/includes/task-tutorial-prereqs.md b/content/bn/includes/task-tutorial-prereqs.md index f545a02269..7b16860b08 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/) From 2e9cbdf6203c2131e27a5159309d3c035b168c0d Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 11:25:25 +0600 Subject: [PATCH 0491/1086] Create user-guide-content-moved.md --- content/bn/includes/user-guide-content-moved.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 content/bn/includes/user-guide-content-moved.md 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 0000000000..bcbbe54bd8 --- /dev/null +++ b/content/bn/includes/user-guide-content-moved.md @@ -0,0 +1,3 @@ +কুবারনেটিস ডক্সের ইউজার গাইড বিভাগের বিষয়গুলো +[টাস্ক](/bn/docs/tasks/), [টিউটোরিয়াল](/bn/docs/tutorials/) এবং +[ধারণা](/bn/docs/concepts) বিভাগে সরানো হচ্ছে। এই বিষয়ের কনটেন্ট স্থানান্তরিত হয়েছে: From 3d83280e96926bc5297ed3fd24f5026db9729190 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 11:30:44 +0600 Subject: [PATCH 0492/1086] Update _index.md --- content/bn/docs/tasks/_index.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/content/bn/docs/tasks/_index.md b/content/bn/docs/tasks/_index.md index 1b4379b881..8ab034e3ae 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/) যায়। From d673ac8b9142fe3f26fdbcdb810107c80a52929b Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 11:44:40 +0600 Subject: [PATCH 0493/1086] add control-plane.png --- .../extend-kubernetes/control-plane.png | Bin 0 -> 67498 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 content/bn/docs/concepts/extend-kubernetes/control-plane.png 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 0000000000000000000000000000000000000000..fa61599e94118e87046cd0bb2211d859c8b93751 GIT binary patch literal 67498 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 a1L})9XY_LQ-Zd2DBP*%&tybJ9`2PX$*VYIC literal 0 HcmV?d00001 From 48349c67d2613fec0c6dd9b7d637983c141abab3 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 11:49:14 +0600 Subject: [PATCH 0494/1086] Update _index.md --- content/bn/docs/concepts/_index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/bn/docs/concepts/_index.md b/content/bn/docs/concepts/_index.md index ac101b6a41..29cff2cc8e 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" >}} প্রতিনিধিত্ব করার জন্য যে অ্যাবস্ট্রাকশনগুলো ব্যবহার করে সেগুলো সম্পর্কে শিখতে সাহায্য করে এবং কুবারনেটিস কীভাবে কাজ করে সে সম্পর্কে আপনাকে গভীরভাবে বুঝতে সাহায্য করে । + From 27167e3291d9e29f6fcf5b06fd9ad73e92f296b3 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 11:52:23 +0600 Subject: [PATCH 0495/1086] Added update-user-guide-links.py from en --- content/bn/docs/update-user-guide-links.py | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 content/bn/docs/update-user-guide-links.py 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 0000000000..7c449d73ef --- /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() From 99a7cf74eb33c532e64170ce4de65baf7d8a3a75 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 11:54:19 +0600 Subject: [PATCH 0496/1086] Create _index.md --- .../configuration/configure-java-microservice/_index.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/tutorials/configuration/configure-java-microservice/_index.md 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 0000000000..6614577d2d --- /dev/null +++ b/content/bn/docs/tutorials/configuration/configure-java-microservice/_index.md @@ -0,0 +1,4 @@ +--- +title: "উদাহরণ: একটি জাভা মাইক্রোসার্ভিস কনফিগার করা" +weight: 10 +--- From c47c7f5fd96e257c505d1cab666a5bc544ed129c Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 12:22:42 +0600 Subject: [PATCH 0497/1086] Create diagram-guide-example-3.svg --- content/bn/docs/images/diagram-guide-example-3.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/docs/images/diagram-guide-example-3.svg 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 0000000000..f72b797fe3 --- /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 From 80a19b4140d719d19ac7179c6f339158e2116563 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 12:23:30 +0600 Subject: [PATCH 0498/1086] Create gateway-kind-relationships.svg --- content/bn/docs/images/gateway-kind-relationships.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/docs/images/gateway-kind-relationships.svg 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 0000000000..f5ed657cf7 --- /dev/null +++ b/content/bn/docs/images/gateway-kind-relationships.svg @@ -0,0 +1 @@ +
          cluster
          GatewayClass
          Gateway
          HTTPRoute
          From 4bd672b06f8bc2576ab73d37ea9c18ff4c07a953 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 12:24:09 +0600 Subject: [PATCH 0499/1086] Create gateway-request-flow.svg --- content/bn/docs/images/gateway-request-flow.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/docs/images/gateway-request-flow.svg 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 0000000000..e6b4c666b4 --- /dev/null +++ b/content/bn/docs/images/gateway-request-flow.svg @@ -0,0 +1 @@ + From ca9d3cc3039ce7509682122e037d2a368a0bb45f Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 12:26:15 +0600 Subject: [PATCH 0500/1086] Create ha-control-plane.svg --- content/bn/docs/images/ha-control-plane.svg | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/bn/docs/images/ha-control-plane.svg diff --git a/content/bn/docs/images/ha-control-plane.svg b/content/bn/docs/images/ha-control-plane.svg new file mode 100644 index 0000000000..eb5bbdba81 --- /dev/null +++ b/content/bn/docs/images/ha-control-plane.svg @@ -0,0 +1,4 @@ + + + + From 988a371500ba3f8e08215457a7a2382798592b29 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 12:27:03 +0600 Subject: [PATCH 0501/1086] Create ingress.svg --- content/bn/docs/images/ingress.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/docs/images/ingress.svg diff --git a/content/bn/docs/images/ingress.svg b/content/bn/docs/images/ingress.svg new file mode 100644 index 0000000000..ffd1b4c72e --- /dev/null +++ b/content/bn/docs/images/ingress.svg @@ -0,0 +1 @@ +
          cluster
          Ingress-managed
          load balancer
          routing rule
          Ingress
          Pod
          Service
          Pod
          client
          From d84625c5ce24a5f119df47a0cc7c22545292e35a Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 12:27:48 +0600 Subject: [PATCH 0502/1086] Create ingressFanOut.svg --- content/bn/docs/images/ingressFanOut.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/docs/images/ingressFanOut.svg diff --git a/content/bn/docs/images/ingressFanOut.svg b/content/bn/docs/images/ingressFanOut.svg new file mode 100644 index 0000000000..d65422c663 --- /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
          From 2ca3bd2d1e9e6733e660b13afeb65abc1928e95c Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 12:28:37 +0600 Subject: [PATCH 0503/1086] Create ingressNameBased.svg --- content/bn/docs/images/ingressNameBased.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/docs/images/ingressNameBased.svg diff --git a/content/bn/docs/images/ingressNameBased.svg b/content/bn/docs/images/ingressNameBased.svg new file mode 100644 index 0000000000..51a355d459 --- /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
          From 139ce9c5622c80219dcb1d896709675d9d04e0a8 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 12:29:13 +0600 Subject: [PATCH 0504/1086] Create kubernetes-cluster-network.svg --- content/bn/docs/images/kubernetes-cluster-network.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/docs/images/kubernetes-cluster-network.svg 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 0000000000..03add4e256 --- /dev/null +++ b/content/bn/docs/images/kubernetes-cluster-network.svg @@ -0,0 +1 @@ + From e691e89693e93a91386f8038ffb853b6bcae504f Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 12:29:45 +0600 Subject: [PATCH 0505/1086] Create podSchedulingGates.svg --- content/bn/docs/images/podSchedulingGates.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/docs/images/podSchedulingGates.svg diff --git a/content/bn/docs/images/podSchedulingGates.svg b/content/bn/docs/images/podSchedulingGates.svg new file mode 100644 index 0000000000..2d08f823dd --- /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?
          From 3462456a05873ee9bfa50c9a9034cc684775096e Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 12:30:17 +0600 Subject: [PATCH 0506/1086] Create tutor-service-nodePort-fig01.svg --- content/bn/docs/images/tutor-service-nodePort-fig01.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/docs/images/tutor-service-nodePort-fig01.svg 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 0000000000..b84ebb6f99 --- /dev/null +++ b/content/bn/docs/images/tutor-service-nodePort-fig01.svg @@ -0,0 +1 @@ +
          SNAT
          SNAT
          client
          Node 2
          Node 1
          Endpoint
          From 4a0666018b388d5091cfa0e2aa2c3fb82c808ddd Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 12:30:49 +0600 Subject: [PATCH 0507/1086] Create tutor-service-nodePort-fig02.svg --- content/bn/docs/images/tutor-service-nodePort-fig02.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/docs/images/tutor-service-nodePort-fig02.svg 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 0000000000..7d084b8597 --- /dev/null +++ b/content/bn/docs/images/tutor-service-nodePort-fig02.svg @@ -0,0 +1 @@ +
          client
          Node 1
          Node 2
          endpoint
          From 872e4834e2cae723edc057274ecbc05822b33a3f Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 13:09:37 +0600 Subject: [PATCH 0508/1086] Create ha --- content/bn/docs/images/ha | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/docs/images/ha diff --git a/content/bn/docs/images/ha b/content/bn/docs/images/ha new file mode 100644 index 0000000000..600b2c25c3 --- /dev/null +++ b/content/bn/docs/images/ha @@ -0,0 +1 @@ + From 44910c068a11f4b0b4a739099f7581b43fcf74d0 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 13:10:11 +0600 Subject: [PATCH 0509/1086] Delete content/bn/docs/images/ha --- content/bn/docs/images/ha | 1 - 1 file changed, 1 deletion(-) delete mode 100644 content/bn/docs/images/ha diff --git a/content/bn/docs/images/ha b/content/bn/docs/images/ha deleted file mode 100644 index 600b2c25c3..0000000000 --- a/content/bn/docs/images/ha +++ /dev/null @@ -1 +0,0 @@ - From c3476dc62c2dbe866ee381f86776683865b79e47 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 13:10:47 +0600 Subject: [PATCH 0510/1086] Add files via upload --- content/bn/docs/images/ha-control-plane-(bn-version).svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 content/bn/docs/images/ha-control-plane-(bn-version).svg 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 0000000000..7ff47bdd20 --- /dev/null +++ b/content/bn/docs/images/ha-control-plane-(bn-version).svg @@ -0,0 +1 @@ + \ No newline at end of file From a837dc23854ac8465e63f3644f28177d1e19df34 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 13:14:11 +0600 Subject: [PATCH 0511/1086] Delete content/bn/docs/images/ha-control-plane-(bn-version).svg --- content/bn/docs/images/ha-control-plane-(bn-version).svg | 1 - 1 file changed, 1 deletion(-) delete mode 100644 content/bn/docs/images/ha-control-plane-(bn-version).svg diff --git a/content/bn/docs/images/ha-control-plane-(bn-version).svg b/content/bn/docs/images/ha-control-plane-(bn-version).svg deleted file mode 100644 index 7ff47bdd20..0000000000 --- a/content/bn/docs/images/ha-control-plane-(bn-version).svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From 112647b530134fcb0b03a27697be4acb1975f0b6 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 13:14:38 +0600 Subject: [PATCH 0512/1086] Delete content/bn/docs/images/ha-control-plane.svg --- content/bn/docs/images/ha-control-plane.svg | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 content/bn/docs/images/ha-control-plane.svg diff --git a/content/bn/docs/images/ha-control-plane.svg b/content/bn/docs/images/ha-control-plane.svg deleted file mode 100644 index eb5bbdba81..0000000000 --- a/content/bn/docs/images/ha-control-plane.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - From 4ddc09ccb544f1ebc9333e6a9bf346d684be61da Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 13:20:42 +0600 Subject: [PATCH 0513/1086] Create ha-control-plane-(bn-version).svg --- content/bn/docs/images/ha-control-plane-(bn-version).svg | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 content/bn/docs/images/ha-control-plane-(bn-version).svg 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 0000000000..e680077825 --- /dev/null +++ b/content/bn/docs/images/ha-control-plane-(bn-version).svg @@ -0,0 +1,5 @@ + + + + + From 5a538320814ee8dd87ef6a1fb570e3dfe34ca961 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 13:39:28 +0600 Subject: [PATCH 0514/1086] Update _index.md --- content/bn/docs/contribute/_index.md | 189 +++------------------------ 1 file changed, 16 insertions(+), 173 deletions(-) diff --git a/content/bn/docs/contribute/_index.md b/content/bn/docs/contribute/_index.md index 1b3b2909fc..db7d22f881 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) +কুবারনেটিস অবদান সম্পর্কে। From f5ac3f80818477735eaf8de3bfd5f512cdebeed2 Mon Sep 17 00:00:00 2001 From: Arhell Date: Sun, 5 May 2024 10:39:54 +0300 Subject: [PATCH 0515/1086] [ja] Ready training section for vanilla Docsy --- content/ja/training/_index.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/ja/training/_index.html b/content/ja/training/_index.html index 39f843b81c..19e0f31d04 100644 --- a/content/ja/training/_index.html +++ b/content/ja/training/_index.html @@ -5,6 +5,10 @@ abstract: トレーニングプログラム、資格、およびパートナー layout: basic cid: training class: training +body_class: training +menu: + main: + weight: 30 ---
          From 3c38c53b1071170ea0796b87961814626929ee50 Mon Sep 17 00:00:00 2001 From: ydFu Date: Sun, 5 May 2024 15:57:39 +0800 Subject: [PATCH 0516/1086] [zh]Fix translation and formatting issues in define-command-argument-container.md Signed-off-by: ydFu --- .../define-command-argument-container.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/content/zh-cn/docs/tasks/inject-data-application/define-command-argument-container.md b/content/zh-cn/docs/tasks/inject-data-application/define-command-argument-container.md index 6b0548356b..f8f14e8590 100644 --- a/content/zh-cn/docs/tasks/inject-data-application/define-command-argument-container.md +++ b/content/zh-cn/docs/tasks/inject-data-application/define-command-argument-container.md @@ -50,9 +50,9 @@ with your new arguments. {{< note >}} -在有些容器运行时中,`command` 字段对应 `entrypoint`。 +`command` 字段对应于 `ENTRYPOINT`,而 `args` 字段对应于某些容器运行时的 `CMD`。 {{< /note >}} 查询结果显示在 command-demo 这个 Pod 下运行的容器已经启动完成。 @@ -97,7 +98,8 @@ from the Pod: ``` 日志中显示了 HOSTNAME 与 KUBERNETES_PORT 这两个环境变量的值: From a53b8c2e8d0dcb8c940416f0df47b59faf0531c9 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 14:09:07 +0600 Subject: [PATCH 0517/1086] Update docs/home/_index.md --- content/bn/docs/home/_index.md | 63 +++++++++++++++++----------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/content/bn/docs/home/_index.md b/content/bn/docs/home/_index.md index 84aafd236b..35ba8b18e9 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" --- From 23e046ed56addd7ccc53470675340966f602274d Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 14:21:43 +0600 Subject: [PATCH 0518/1086] Update supported-doc-versions.md --- content/bn/docs/home/supported-doc-versions.md | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/content/bn/docs/home/supported-doc-versions.md b/content/bn/docs/home/supported-doc-versions.md index 902de5f864..1b9831ad46 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) পড়ুন। From 955d0329de2a2edd26829b9aabad62ffb863f5d4 Mon Sep 17 00:00:00 2001 From: Ravikanth C Date: Sun, 5 May 2024 14:00:03 +0530 Subject: [PATCH 0519/1086] Update config.md The note that said, "Pod's scheduling events have .spec.schedulerName as the ReportingController", is no longer true. I do not find the `spec.schedulerName` set to `ReportingController`. --- content/en/docs/reference/scheduling/config.md | 1 - 1 file changed, 1 deletion(-) diff --git a/content/en/docs/reference/scheduling/config.md b/content/en/docs/reference/scheduling/config.md index a0a34cb83a..e4cfc981aa 100644 --- a/content/en/docs/reference/scheduling/config.md +++ b/content/en/docs/reference/scheduling/config.md @@ -217,7 +217,6 @@ If a Pod doesn't specify a scheduler name, kube-apiserver will set it to to get those pods scheduled. {{< note >}} -Pod's scheduling events have `.spec.schedulerName` as the ReportingController. Events for leader election use the scheduler name of the first profile in the list. {{< /note >}} From e70977a1a4d6ccd9df93054fdcab5ff499809d59 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 15:13:33 +0600 Subject: [PATCH 0520/1086] Create _index.html --- content/bn/training/_index.html | 158 ++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 content/bn/training/_index.html diff --git a/content/bn/training/_index.html b/content/bn/training/_index.html new file mode 100644 index 0000000000..4d255bc879 --- /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" >}} +
          +
          From a1d0b6113c5cdad5edfa716bc44105c6964ee08d Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 16:11:58 +0600 Subject: [PATCH 0521/1086] Create _index.md --- .../concepts/workloads/controllers/_index.md | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 content/bn/docs/concepts/workloads/controllers/_index.md 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 0000000000..f3b827c051 --- /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="পডের" text="Pods" >}} +মধ্যে রান হয় কন্টেইনার হিসেবে; যাইহোক, একক পড ম্যানেজ করা কষ্টসাধ্য। +উদাহরণস্বরূপ, যদি একটি পড ব্যর্থ হয়, আপনি তাহলে নতুন পড চালিয়ে এটিকে +রিপ্লেস করতে চাইবেন। কুবারনেটিস আপনার জন্য এটি করে দিবে। + +আপনি ওয়ার্ক লোড তৈরি করার জন্য কুবারনেটিস 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 একটি শিডিউল অনুযায়ী পুনরাবৃত্তি করে। + +এই বিভাগে অন্যান্য বিষয়: + From b6cfa97a8e526ed6351a415e83993ad6c2b7d2d8 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 16:12:44 +0600 Subject: [PATCH 0522/1086] Update _index.md --- content/bn/docs/concepts/workloads/controllers/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/concepts/workloads/controllers/_index.md b/content/bn/docs/concepts/workloads/controllers/_index.md index f3b827c051..4cf3a91673 100644 --- a/content/bn/docs/concepts/workloads/controllers/_index.md +++ b/content/bn/docs/concepts/workloads/controllers/_index.md @@ -54,8 +54,8 @@ simple_list: true আপনি একটি [Job](/bn/docs/concepts/workloads/controllers/job/) এবং / বা একটি [CronJob](/bn/docs/concepts/workloads/controllers/cron-jobs/) ব্যবহার করতে পারেন -যা কাজগুলোকে চিহ্নিত করবে যা সমাপ্তির জন্য চলবে পরে থামবে। একটি Job একটি একক -টাস্কের প্রতিনিধিত্ব করে, যেখানে প্রতিটি CronJob একটি শিডিউল অনুযায়ী পুনরাবৃত্তি করে। +যা কাজগুলোকে চিহ্নিত করবে যা সমাপ্তির জন্য চলবে পরে থামবে। একটি Job একটি +একক টাস্কের প্রতিনিধিত্ব করে, যেখানে প্রতিটি CronJob একটি শিডিউল অনুযায়ী পুনরাবৃত্তি করে। এই বিভাগে অন্যান্য বিষয়: From 06113101af75181a4c8a91422e39b11a3da95e42 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 5 May 2024 18:41:59 +0800 Subject: [PATCH 0523/1086] Make the markdown prettier: storage-version-migration.md --- .../storage-version-migration.md | 120 ++++++++++++------ 1 file changed, 83 insertions(+), 37 deletions(-) diff --git a/content/en/docs/tasks/manage-kubernetes-objects/storage-version-migration.md b/content/en/docs/tasks/manage-kubernetes-objects/storage-version-migration.md index b60ef782ee..8dc4117bfd 100644 --- a/content/en/docs/tasks/manage-kubernetes-objects/storage-version-migration.md +++ b/content/en/docs/tasks/manage-kubernetes-objects/storage-version-migration.md @@ -1,23 +1,22 @@ --- title: Migrate Kubernetes Objects Using Storage Version Migration - reviewers: - - deads2k - - jpbetz - - enj - - nilekhc - +- deads2k +- jpbetz +- enj +- nilekhc content_type: task min-kubernetes-server-version: v1.30 weight: 60 --- + {{< feature-state feature_gate_name="StorageVersionMigrator" >}} -Kubernetes relies on API data being actively re-written, to support some -maintenance activities related to at rest storage. Two prominent examples are -the versioned schema of stored resources (that is, the preferred storage schema +Kubernetes relies on API data being actively re-written, to support some +maintenance activities related to at rest storage. Two prominent examples are +the versioned schema of stored resources (that is, the preferred storage schema changing from v1 to v2 for a given resource) and encryption at rest (that is, rewriting stale data based on a change in how the data should be encrypted). @@ -27,12 +26,13 @@ Install [`kubectl`](/docs/tasks/tools/#kubectl). {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} - ## Re-encrypt Kubernetes secrets using storage version migration -- To begin with, [configure KMS provider](/docs/tasks/administer-cluster/kms-provider/) + +- To begin with, [configure KMS provider](/docs/tasks/administer-cluster/kms-provider/) to encrypt data at rest in etcd using following encryption configuration. + ```yaml kind: EncryptionConfiguration apiVersion: apiserver.config.k8s.io/v1 @@ -45,15 +45,21 @@ Install [`kubectl`](/docs/tasks/tools/#kubectl). - name: key1 secret: c2VjcmV0IGlzIHNlY3VyZQ== ``` + Make sure to enable automatic reload of encryption -configuration file by setting `--encryption-provider-config-automatic-reload` to true. + configuration file by setting `--encryption-provider-config-automatic-reload` to true. + - Create a Secret using kubectl. + ```shell kubectl create secret generic my-secret --from-literal=key1=supersecret ``` + - [Verify](/docs/tasks/administer-cluster/kms-provider/#verifying-that-the-data-is-encrypted) the serialized data for that Secret object is prefixed with `k8s:enc:aescbc:v1:key1`. + - Update the encryption configuration file as follows to rotate the encryption key. + ```yaml kind: EncryptionConfiguration apiVersion: apiserver.config.k8s.io/v1 @@ -70,9 +76,12 @@ configuration file by setting `--encryption-provider-config-automatic-reload` to - name: key1 secret: c2VjcmV0IGlzIHNlY3VyZQ== ``` + - To ensure that previously created secret `my-secert` is re-encrypted -with new key `key2`, you will use _Storage Version Migration_. + with new key `key2`, you will use _Storage Version Migration_. + - Create a StorageVersionMigration manifest named `migrate-secret.yaml` as follows: + ```yaml kind: StorageVersionMigration apiVersion: storagemigration.k8s.io/v1alpha1 @@ -84,27 +93,31 @@ with new key `key2`, you will use _Storage Version Migration_. version: v1 resource: secrets ``` + Create the object using _kubectl_ as follows: + ```shell kubectl apply -f migrate-secret.yaml ``` + - Monitor migration of Secrets by checking the `.status` of the StorageVersionMigration. A successful migration should have its -`Succeeded` condition set to true. Get the StorageVersionMigration object -as follows: + `Succeeded` condition set to true. Get the StorageVersionMigration object as follows: + ```shell kubectl get storageversionmigration.storagemigration.k8s.io/secrets-migration -o yaml ``` The output is similar to: + ```yaml kind: StorageVersionMigration apiVersion: storagemigration.k8s.io/v1alpha1 metadata: name: secrets-migration uid: 628f6922-a9cb-4514-b076-12d3c178967c - resourceVersion: '90' - creationTimestamp: '2024-03-12T20:29:45Z' + resourceVersion: "90" + creationTimestamp: "2024-03-12T20:29:45Z" spec: resource: group: "" @@ -113,19 +126,21 @@ as follows: status: conditions: - type: Running - status: 'False' - lastUpdateTime: '2024-03-12T20:29:46Z' + status: "False" + lastUpdateTime: "2024-03-12T20:29:46Z" reason: StorageVersionMigrationInProgress - type: Succeeded - status: 'True' - lastUpdateTime: '2024-03-12T20:29:46Z' + status: "True" + lastUpdateTime: "2024-03-12T20:29:46Z" reason: StorageVersionMigrationSucceeded - resourceVersion: '84' + resourceVersion: "84" ``` + - [Verify](/docs/tasks/administer-cluster/kms-provider/#verifying-that-the-data-is-encrypted) the stored secret is now prefixed with `k8s:enc:aescbc:v1:key2`. ## Update the preferred storage schema of a CRD + Consider a scenario where a {{< glossary_tooltip term_id="CustomResourceDefinition" text="CustomResourceDefinition" >}} (CRD) is created to serve custom resources (CRs) and is set as the preferred storage schema. When it's time to introduce v2 of the CRD, it can be added for serving only with a conversion @@ -136,6 +151,7 @@ version, it's important to ensure that all existing CRs stored as v1 are migrate This migration can be achieved through _Storage Version Migration_ to migrate all CRs from v1 to v2. - Create a manifest for the CRD, named `test-crd.yaml`, as follows: + ```yaml apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -163,17 +179,21 @@ This migration can be achieved through _Storage Version Migration_ to migrate al strategy: Webhook webhook: clientConfig: - url: https://127.0.0.1:9443/crdconvert + url: "https://127.0.0.1:9443/crdconvert" caBundle: conversionReviewVersions: - v1 - v2 ``` - Create CRD using kubectl + + Create CRD using kubectl: + ```shell kubectl apply -f test-crd.yaml ``` + - Create a manifest for an example testcrd. Name the manifest `cr1.yaml` and use these contents: + ```yaml apiVersion: stable.example.com/v1 kind: SelfieRequest @@ -181,17 +201,24 @@ This migration can be achieved through _Storage Version Migration_ to migrate al name: cr1 namespace: default ``` - Create CR using kubectl + + Create CR using kubectl: + ```shell kubectl apply -f cr1.yaml ``` + - Verify that CR is written and stored as v1 by getting the object from etcd. + ```shell ETCDCTL_API=3 etcdctl get /kubernetes.io/stable.example.com/testcrds/default/cr1 [...] | hexdump -C ``` + where `[...]` contains the additional arguments for connecting to the etcd server. + - Update the CRD `test-crd.yaml` to include v2 version for serving and storage - and v1 as serving only, as follows: + and v1 as serving only, as follows: + ```yaml apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -230,17 +257,21 @@ This migration can be achieved through _Storage Version Migration_ to migrate al strategy: Webhook webhook: clientConfig: - url: 'https://127.0.0.1:9443/crdconvert' + url: "https://127.0.0.1:9443/crdconvert" caBundle: conversionReviewVersions: - v1 - v2 ``` - Update CRD using kubectl + + Update CRD using kubectl: + ```shell kubectl apply -f test-crd.yaml ``` + - Create CR resource file with name `cr2.yaml` as follows: + ```yaml apiVersion: stable.example.com/v2 kind: SelfieRequest @@ -248,16 +279,23 @@ This migration can be achieved through _Storage Version Migration_ to migrate al name: cr2 namespace: default ``` -- Create CR using kubectl + +- Create CR using kubectl: + ```shell kubectl apply -f cr2.yaml ``` + - Verify that CR is written and stored as v2 by getting the object from etcd. + ```shell ETCDCTL_API=3 etcdctl get /kubernetes.io/stable.example.com/testcrds/default/cr2 [...] | hexdump -C ``` + where `[...]` contains the additional arguments for connecting to the etcd server. + - Create a StorageVersionMigration manifest named `migrate-crd.yaml`, with the contents as follows: + ```yaml kind: StorageVersionMigration apiVersion: storagemigration.k8s.io/v1alpha1 @@ -269,26 +307,31 @@ This migration can be achieved through _Storage Version Migration_ to migrate al version: v1 resource: SelfieRequest ``` + Create the object using _kubectl_ as follows: + ```shell kubectl apply -f migrate-crd.yaml ``` + - Monitor migration of secrets using status. Successful migration should have `Succeeded` condition set to "True" in the status field. Get the migration resource as follows: + ```shell kubectl get storageversionmigration.storagemigration.k8s.io/crdsvm -o yaml ``` - + The output is similar to: + ```yaml kind: StorageVersionMigration apiVersion: storagemigration.k8s.io/v1alpha1 metadata: name: crdsvm uid: 13062fe4-32d7-47cc-9528-5067fa0c6ac8 - resourceVersion: '111' - creationTimestamp: '2024-03-12T22:40:01Z' + resourceVersion: "111" + creationTimestamp: "2024-03-12T22:40:01Z" spec: resource: group: stable.example.com @@ -297,17 +340,20 @@ This migration can be achieved through _Storage Version Migration_ to migrate al status: conditions: - type: Running - status: 'False' - lastUpdateTime: '2024-03-12T22:40:03Z' + status: "False" + lastUpdateTime: "2024-03-12T22:40:03Z" reason: StorageVersionMigrationInProgress - type: Succeeded - status: 'True' - lastUpdateTime: '2024-03-12T22:40:03Z' + status: "True" + lastUpdateTime: "2024-03-12T22:40:03Z" reason: StorageVersionMigrationSucceeded - resourceVersion: '106' + resourceVersion: "106" ``` + - Verify that previously created cr1 is now written and stored as v2 by getting the object from etcd. + ```shell ETCDCTL_API=3 etcdctl get /kubernetes.io/stable.example.com/testcrds/default/cr1 [...] | hexdump -C ``` + where `[...]` contains the additional arguments for connecting to the etcd server. From 00310991d1e8d686d9acb6d39ed2f0b4fd0a2118 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Sun, 5 May 2024 17:26:53 +0600 Subject: [PATCH 0524/1086] Create _index.md --- content/bn/docs/concepts/workloads/_index.md | 91 ++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 content/bn/docs/concepts/workloads/_index.md diff --git a/content/bn/docs/concepts/workloads/_index.md b/content/bn/docs/concepts/workloads/_index.md new file mode 100644 index 0000000000..6232f6c605 --- /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="ওয়ার্কলোড" 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="কন্ট্রোলার" text="controllers" >}} কনফিগার করে +যা নিশ্চিত করে যে সঠিক সংখ্যক পড চলছে, আপনার নির্দিষ্ট +স্টেটের সাথে মেলে৷ + +কুবারনেটিস বেশ কয়েকটি বিল্ট ইন ওয়ার্কলোড রিসোর্স সরবরাহ করে: + +* [ডিপ্লয়মেন্ট](/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) ব্যবহার করে । From 9a06eaeaaf8ed9d33ce4e60d8e40b7f3bb862330 Mon Sep 17 00:00:00 2001 From: ydFu Date: Sun, 5 May 2024 20:23:33 +0800 Subject: [PATCH 0525/1086] [zh] Update networking.md Signed-off-by: ydFu --- .../concepts/cluster-administration/networking.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/content/zh-cn/docs/concepts/cluster-administration/networking.md b/content/zh-cn/docs/concepts/cluster-administration/networking.md index 8fcb45cd83..1d53896eb6 100644 --- a/content/zh-cn/docs/concepts/cluster-administration/networking.md +++ b/content/zh-cn/docs/concepts/cluster-administration/networking.md @@ -12,6 +12,7 @@ weight: 50 --> + +Kubernetes 的宗旨就是在应用之间共享机器。 +通常来说,共享机器需要两个应用之间不能使用相同的端口,但是在多个应用开发者之间 +去大规模地协调端口是件很困难的事情,尤其是还要让用户暴露在他们控制范围之外的集群级别的问题上。 + -Kubernetes 的宗旨就是在应用之间共享机器。 -通常来说,共享机器需要两个应用之间不能使用相同的端口,但是在多个应用开发者之间 -去大规模地协调端口是件很困难的事情,尤其是还要让用户暴露在他们控制范围之外的集群级别的问题上。 - 动态分配端口也会给系统带来很多复杂度 - 每个应用都需要设置一个端口的参数, 而 API 服务器还需要知道如何将动态端口数值插入到配置模块中,服务也需要知道如何找到对方等等。 与其去解决这些问题,Kubernetes 选择了其他不同的方法。 From 6c8f9470d480912a42a0b3afac3a61de645abf8e Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Sun, 5 May 2024 19:42:55 +0600 Subject: [PATCH 0526/1086] Update release.md --- content/bn/releases/release.md | 38 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index c9de48133a..98e03c1029 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -31,7 +31,7 @@ auto_generated: true - [অন্যান্য প্রয়োজনীয় লেবেল](#other-required-labels) - [SIG ওনার লেবেল](#sig-owner-label) - [প্রাইওরিটি লেবেল](#priority-label) - - [ইস্যু/PR এর মতো লেবেল](#issuepr-kind-label) + - [ইস্যু/PR লেবেল](#issuepr-kind-label) শেফারডিং এনহ্যান্সমেন্ট, ইস্যু এবং পুল রিকুয়েস্ট করার প্রক্রিয়া কুবারনেটিস রিলিজে একাধিক স্টেকহোল্ডারদের অংশগ্রহণ বাড়ায়: @@ -249,7 +249,7 @@ PR-গুলি সরাতে পারেন: ## মাইলস্টোনে একটি আইটেম সংযোজন -### Milestone Maintainers +### মাইলস্টোন রক্ষণাবেক্ষণকারী The members of the [`milestone-maintainers`](https://github.com/orgs/kubernetes/teams/milestone-maintainers/members) GitHub team are entrusted with the responsibility of specifying the release @@ -258,7 +258,7 @@ milestone on GitHub artifacts. This group is [maintained](https://git.k8s.io/sig-release/release-team/README.md#milestone-maintainers) by SIG Release and has representation from the various SIGs' leadership. -### Feature additions +### ফিচার সংযোজন Feature planning and definition takes many forms today, but a typical example might be a large piece of work described in a [KEP][keps], with associated task @@ -274,7 +274,7 @@ If you have an enhancement to target for an upcoming release milestone, begin a conversation with your SIG leadership and with that release's Enhancements Lead. -### Issue additions +### ইস্যু সংযোজন Issues are marked as targeting a milestone via the Prow "/milestone" command. @@ -293,17 +293,17 @@ PRs should have synchronized labels. For example a high priority bug issue might not have its associated PR merged if the PR is only marked as lower priority. -### PR Additions +### PR সংযোজন -PRs are marked as targeting a milestone via the Prow "/milestone" command. +PR গুলোকে Prow "/milestone" কমান্ডের মাধ্যমে একটি মাইলফলককে লক্ষ্য করে চিহ্নিত করা হয়েছে। -This is a blocking requirement during Code Freeze as described above. +উপরে বর্ণিত কোড ফ্রিজের সময় এটি একটি ব্লকিং প্রয়োজনীয়তা। -## Other Required Labels +## অন্যান্য প্রয়োজনীয় লেবেল -[Here is the list of labels and their use and purpose.](https://git.k8s.io/test-infra/label_sync/labels.md#labels-that-apply-to-all-repos-for-both-issues-and-prs) +[এখানে লেবেল এবং তাদের ব্যবহার এবং উদ্দেশ্য তালিকা আছে।](https://git.k8s.io/test-infra/label_sync/labels.md#labels-that-apply-to-all-repos-for-both-issues-and-prs) -### SIG Owner Label +### SIG ওনার লেবেল The SIG owner label defines the SIG to which we escalate if a milestone issue is languishing or needs additional attention. If there are no updates after @@ -312,11 +312,11 @@ escalation, the issue may be automatically removed from the milestone. These are added with the Prow "/sig" command. For example to add the label indicating SIG Storage is responsible, comment with `/sig storage`. -### Priority Label +### প্রাইওরিটি লেবেল -Priority labels are used to determine an escalation path before moving issues -out of the release milestone. They are also used to determine whether or not a -release should be blocked on the resolution of the issue. +অগ্রাধিকার লেবেলগুলি ইস্যুগুলির রিলিস মাইলস্টোন থেকে বের হতে প্রারম্ভিক +এস্ক্যালেশন পথ নির্ধারণে ব্যবহৃত হয়। তারা এটা নির্ধারণ করতে ব্যবহৃত হয় +যে ইস্যুর সমাধানের উপরে রিলিস ব্লক করা উচিত কি না। - `priority/critical-urgent`: Never automatically move out of a release milestone; continually escalate to contributor and SIG through all available @@ -336,12 +336,12 @@ release should be blocked on the resolution of the issue. - even less urgent / critical than `priority/important-soon` - moved out of milestone more aggressively than `priority/important-soon` -### ইস্যু/PR Kind Label +### ইস্যু/PR লেবেল -The issue kind is used to help identify the types of changes going into the -release over time. This may allow the Release Team to develop a better -understanding of what sorts of issues we would miss with a faster release -cadence. +ইস্যুর ধরন ব্যবহার করা হয় সময়ের সাথে রিলিজের বিভিন্ন পরিবর্তন সনাক্ত +করার জন্য। যা রিলিজ টিমকে ভালো ধারণা দেয় +একটি দ্রুত রিলিজ কেডেন্সে কোন ইস্যু গুলো হারিয়ে যাচ্ছে +তা সম্পর্কে। রিলিজ টার্গেট করা সমস্যাগুলির জন্য, পুল অনুরোধ সহ, নিম্নলিখিত একটি সমস্যা ধরনের লেবেল সেট করা আবশ্যক: From b144e37af8fb48b0df3635d2402f92c86df9d8a7 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:20:44 +0600 Subject: [PATCH 0527/1086] Create deployment-replicas-policy.yaml --- .../access/deployment-replicas-policy.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 content/bn/examples/access/deployment-replicas-policy.yaml diff --git a/content/bn/examples/access/deployment-replicas-policy.yaml b/content/bn/examples/access/deployment-replicas-policy.yaml new file mode 100644 index 0000000000..466a6ccbd6 --- /dev/null +++ b/content/bn/examples/access/deployment-replicas-policy.yaml @@ -0,0 +1,18 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicy +metadata: + name: "deploy-replica-policy.example.com" +spec: + paramKind: + apiVersion: rules.example.com/v1 + kind: ReplicaLimit + matchConstraints: + resourceRules: + - apiGroups: ["apps"] + apiVersions: ["v1"] + operations: ["CREATE", "UPDATE"] + resources: ["deployments"] + validations: + - expression: "object.spec.replicas <= params.maxReplicas" + messageExpression: "'object.spec.replicas must be no greater than ' + string(params.maxReplicas)" + reason: Invalid From 89b97886f97b2434ee7729ac8f556be70ecad47f Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:21:55 +0600 Subject: [PATCH 0528/1086] Create endpoints-aggregated.yaml --- .../examples/access/endpoints-aggregated.yaml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 content/bn/examples/access/endpoints-aggregated.yaml diff --git a/content/bn/examples/access/endpoints-aggregated.yaml b/content/bn/examples/access/endpoints-aggregated.yaml new file mode 100644 index 0000000000..d238820056 --- /dev/null +++ b/content/bn/examples/access/endpoints-aggregated.yaml @@ -0,0 +1,20 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + annotations: + kubernetes.io/description: |- + Add endpoints write permissions to the edit and admin roles. This was + removed by default in 1.22 because of CVE-2021-25740. See + https://issue.k8s.io/103675. This can allow writers to direct LoadBalancer + or Ingress implementations to expose backend IPs that would not otherwise + be accessible, and can circumvent network policies or security controls + intended to prevent/isolate access to those backends. + EndpointSlices were never included in the edit or admin roles, so there + is nothing to restore for the EndpointSlice API. + labels: + rbac.authorization.k8s.io/aggregate-to-edit: "true" + name: custom:aggregate-to-edit:endpoints # you can change this if you wish +rules: + - apiGroups: [""] + resources: ["endpoints"] + verbs: ["create", "delete", "deletecollection", "patch", "update"] From f1542fd4714d3d894f1d068dd77c68a30e251d25 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:22:36 +0600 Subject: [PATCH 0529/1086] Create image-matches-namespace-environment.policy.yaml --- ...-matches-namespace-environment.policy.yaml | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 content/bn/examples/access/image-matches-namespace-environment.policy.yaml diff --git a/content/bn/examples/access/image-matches-namespace-environment.policy.yaml b/content/bn/examples/access/image-matches-namespace-environment.policy.yaml new file mode 100644 index 0000000000..6482991316 --- /dev/null +++ b/content/bn/examples/access/image-matches-namespace-environment.policy.yaml @@ -0,0 +1,28 @@ +# This policy enforces that all containers of a deployment has the image repo match the environment label of its namespace. +# Except for "exempt" deployments, or any containers that do not belong to the "example.com" organization (e.g. common sidecars). +# For example, if the namespace has a label of {"environment": "staging"}, all container images must be either staging.example.com/* +# or do not contain "example.com" at all, unless the deployment has {"exempt": "true"} label. +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicy +metadata: + name: "image-matches-namespace-environment.policy.example.com" +spec: + failurePolicy: Fail + matchConstraints: + resourceRules: + - apiGroups: ["apps"] + apiVersions: ["v1"] + operations: ["CREATE", "UPDATE"] + resources: ["deployments"] + variables: + - name: environment + expression: "'environment' in namespaceObject.metadata.labels ? namespaceObject.metadata.labels['environment'] : 'prod'" + - name: exempt + expression: "'exempt' in object.metadata.labels && object.metadata.labels['exempt'] == 'true'" + - name: containers + expression: "object.spec.template.spec.containers" + - name: containersToCheck + expression: "variables.containers.filter(c, c.image.contains('example.com/'))" + validations: + - expression: "variables.exempt || variables.containersToCheck.all(c, c.image.startsWith(variables.environment + '.'))" + messageExpression: "'only ' + variables.environment + ' images are allowed in namespace ' + namespaceObject.metadata.name" From 8972815838b8f00cff04c463a3a2b45726a99705 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:23:30 +0600 Subject: [PATCH 0530/1086] Create validating-admission-policy-audit-annotation.yaml --- ...ting-admission-policy-audit-annotation.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 content/bn/examples/access/validating-admission-policy-audit-annotation.yaml diff --git a/content/bn/examples/access/validating-admission-policy-audit-annotation.yaml b/content/bn/examples/access/validating-admission-policy-audit-annotation.yaml new file mode 100644 index 0000000000..1c422a8254 --- /dev/null +++ b/content/bn/examples/access/validating-admission-policy-audit-annotation.yaml @@ -0,0 +1,18 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicy +metadata: + name: "demo-policy.example.com" +spec: + failurePolicy: Fail + matchConstraints: + resourceRules: + - apiGroups: ["apps"] + apiVersions: ["v1"] + operations: ["CREATE", "UPDATE"] + resources: ["deployments"] + validations: + - expression: "object.spec.replicas > 50" + messageExpression: "'Deployment spec.replicas set to ' + string(object.spec.replicas)" + auditAnnotations: + - key: "high-replica-count" + valueExpression: "'Deployment spec.replicas set to ' + string(object.spec.replicas)" From 50ccd86071ffc5bee5a89477f78a4ca7b16e0a20 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:26:26 +0600 Subject: [PATCH 0531/1086] Create validating-admission-policy-match-conditions.yaml --- ...ing-admission-policy-match-conditions.yaml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 content/bn/examples/access/validating-admission-policy-match-conditions.yaml diff --git a/content/bn/examples/access/validating-admission-policy-match-conditions.yaml b/content/bn/examples/access/validating-admission-policy-match-conditions.yaml new file mode 100644 index 0000000000..e0a1522667 --- /dev/null +++ b/content/bn/examples/access/validating-admission-policy-match-conditions.yaml @@ -0,0 +1,21 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicy +metadata: + name: "demo-policy.example.com" +spec: + failurePolicy: Fail + matchConstraints: + resourceRules: + - apiGroups: ["*"] + apiVersions: ["*"] + operations: ["CREATE", "UPDATE"] + resources: ["*"] + matchConditions: + - name: 'exclude-leases' # Each match condition must have a unique name + expression: '!(request.resource.group == "coordination.k8s.io" && request.resource.resource == "leases")' # Match non-lease resources. + - name: 'exclude-kubelet-requests' + expression: '!("system:nodes" in request.userInfo.groups)' # Match requests made by non-node users. + - name: 'rbac' # Skip RBAC requests. + expression: 'request.resource.group != "rbac.authorization.k8s.io"' + validations: + - expression: "!object.metadata.name.contains('demo') || object.metadata.namespace == 'demo'" From 1ed4ec12512bf8f2c408dd44769f05db0aa64dbe Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:27:46 +0600 Subject: [PATCH 0532/1086] Create clusterrole-approve.yaml --- .../clusterrole-approve.yaml | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 content/bn/examples/access/certificate-signing-request/clusterrole-approve.yaml diff --git a/content/bn/examples/access/certificate-signing-request/clusterrole-approve.yaml b/content/bn/examples/access/certificate-signing-request/clusterrole-approve.yaml new file mode 100644 index 0000000000..2c854c95c6 --- /dev/null +++ b/content/bn/examples/access/certificate-signing-request/clusterrole-approve.yaml @@ -0,0 +1,27 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: csr-approver +rules: +- apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + verbs: + - get + - list + - watch +- apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests/approval + verbs: + - update +- apiGroups: + - certificates.k8s.io + resources: + - signers + resourceNames: + - example.com/my-signer-name # example.com/* can be used to authorize for all signers in the 'example.com' domain + verbs: + - approve From 2ee5d32dd6f7a15ab1ced89bdbd1967e7c6a33bc Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:28:50 +0600 Subject: [PATCH 0533/1086] Create clusterrole-create.yaml --- .../clusterrole-create.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/access/certificate-signing-request/clusterrole-create.yaml diff --git a/content/bn/examples/access/certificate-signing-request/clusterrole-create.yaml b/content/bn/examples/access/certificate-signing-request/clusterrole-create.yaml new file mode 100644 index 0000000000..def1b879d8 --- /dev/null +++ b/content/bn/examples/access/certificate-signing-request/clusterrole-create.yaml @@ -0,0 +1,14 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: csr-creator +rules: +- apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + verbs: + - create + - get + - list + - watch From 20cd32fe3447d2e63a3ab73ecd56a78ab8751e9d Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:29:27 +0600 Subject: [PATCH 0534/1086] Create clusterrole-sign.yaml --- .../clusterrole-sign.yaml | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 content/bn/examples/access/certificate-signing-request/clusterrole-sign.yaml diff --git a/content/bn/examples/access/certificate-signing-request/clusterrole-sign.yaml b/content/bn/examples/access/certificate-signing-request/clusterrole-sign.yaml new file mode 100644 index 0000000000..6d1a2f7882 --- /dev/null +++ b/content/bn/examples/access/certificate-signing-request/clusterrole-sign.yaml @@ -0,0 +1,27 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: csr-signer +rules: +- apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + verbs: + - get + - list + - watch +- apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests/status + verbs: + - update +- apiGroups: + - certificates.k8s.io + resources: + - signers + resourceNames: + - example.com/my-signer-name # example.com/* can be used to authorize for all signers in the 'example.com' domain + verbs: + - sign From d2e6f7426c0514098343eeedaad819230e4165e6 Mon Sep 17 00:00:00 2001 From: Hiroyuki Hasebe <16788901+levi106@users.noreply.github.com> Date: Sun, 5 May 2024 14:36:02 +0900 Subject: [PATCH 0535/1086] Update content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md --- .../tools/included/optional-kubectl-configs-bash-mac.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md b/content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md index 5aabe61978..600ffef513 100644 --- a/content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md +++ b/content/ja/docs/tasks/tools/included/optional-kubectl-configs-bash-mac.md @@ -11,7 +11,7 @@ _build: ### はじめに Bashにおけるkubectlの補完スクリプトは`kubectl completion bash`コマンドで生成できます。 -シェル内で補完スクリプトをsourceすることでkubectlの自動補完が有効になります。 +補完スクリプトをシェル内に読み込ませることでkubectlの自動補完が有効になります。 ただし、補完スクリプトは[**bash-completion**](https://github.com/scop/bash-completion)に依存しているため、事前にインストールしておく必要があります。 @@ -71,10 +71,10 @@ brew_etc="$(brew --prefix)/etc" && [[ -r "${brew_etc}/profile.d/bash_completion. ### kubectlの自動補完を有効にする -すべてのシェルセッションにてkubectlの補完スクリプトをsourceできるようにしなければなりません。 +次に、kubectl補完スクリプトがすべてのシェルセッションで読み込まれるように設定する必要があります。 これを行うには複数の方法があります: -- 補完スクリプトを`~/.bash_profile`内でsourceする: +- 補完スクリプトを`~/.bash_profile`内で読み込ませる: ```bash echo 'source <(kubectl completion bash)' >>~/.bash_profile @@ -97,7 +97,7 @@ brew_etc="$(brew --prefix)/etc" && [[ -r "${brew_etc}/profile.d/bash_completion. この場合、なにも操作する必要はありません。 {{< note >}} - Homebrewでインストールしたbash-completion v2は`BASH_COMPLETION_COMPAT_DIR`ディレクトリ内のすべてのファイルをsourceするため、後者の2つの方法が機能します。 + Homebrewでインストールしたbash-completion v2は`BASH_COMPLETION_COMPAT_DIR`ディレクトリ内のすべてのファイルを読み込むため、後者の2つの方法が機能します。 {{< /note >}} どの場合でも、シェルをリロードしたあとに、kubectlの自動補完が機能するはずです。 From 910bb33ff914ac9c240a27b61289b0cdcc94e95b Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:48:01 +0600 Subject: [PATCH 0536/1086] Create ccm-example.yaml --- .../bn/examples/admin/cloud/ccm-example.yaml | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 content/bn/examples/admin/cloud/ccm-example.yaml diff --git a/content/bn/examples/admin/cloud/ccm-example.yaml b/content/bn/examples/admin/cloud/ccm-example.yaml new file mode 100644 index 0000000000..91b7ef2b89 --- /dev/null +++ b/content/bn/examples/admin/cloud/ccm-example.yaml @@ -0,0 +1,73 @@ +# This is an example of how to set up cloud-controller-manager as a Daemonset in your cluster. +# It assumes that your masters can run pods and has the role node-role.kubernetes.io/master +# Note that this Daemonset will not work straight out of the box for your cloud, this is +# meant to be a guideline. + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: cloud-controller-manager + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: system:cloud-controller-manager +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: +- kind: ServiceAccount + name: cloud-controller-manager + namespace: kube-system +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + labels: + k8s-app: cloud-controller-manager + name: cloud-controller-manager + namespace: kube-system +spec: + selector: + matchLabels: + k8s-app: cloud-controller-manager + template: + metadata: + labels: + k8s-app: cloud-controller-manager + spec: + serviceAccountName: cloud-controller-manager + containers: + - name: cloud-controller-manager + # for in-tree providers we use registry.k8s.io/cloud-controller-manager + # this can be replaced with any other image for out-of-tree providers + image: registry.k8s.io/cloud-controller-manager:v1.8.0 + command: + - /usr/local/bin/cloud-controller-manager + - --cloud-provider=[YOUR_CLOUD_PROVIDER] # Add your own cloud provider here! + - --leader-elect=true + - --use-service-account-credentials + # these flags will vary for every cloud provider + - --allocate-node-cidrs=true + - --configure-cloud-routes=true + - --cluster-cidr=172.17.0.0/16 + tolerations: + # this is required so CCM can bootstrap itself + - key: node.cloudprovider.kubernetes.io/uninitialized + value: "true" + effect: NoSchedule + # these tolerations are to have the daemonset runnable on control plane nodes + # remove them if your control plane nodes should not run pods + - key: node-role.kubernetes.io/control-plane + operator: Exists + effect: NoSchedule + - key: node-role.kubernetes.io/master + operator: Exists + effect: NoSchedule + # this is to restrict CCM to only run on master nodes + # the node selector may vary depending on your cluster setup + nodeSelector: + node-role.kubernetes.io/master: "" From 5f70375a348fd937816873953d2c4d1f9db4682b Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:49:17 +0600 Subject: [PATCH 0537/1086] Create busybox.yaml --- content/bn/examples/admin/dns/busybox.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/admin/dns/busybox.yaml diff --git a/content/bn/examples/admin/dns/busybox.yaml b/content/bn/examples/admin/dns/busybox.yaml new file mode 100644 index 0000000000..31f009d307 --- /dev/null +++ b/content/bn/examples/admin/dns/busybox.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Pod +metadata: + name: busybox + namespace: default +spec: + containers: + - name: busybox + image: busybox:1.28 + command: + - sleep + - "3600" + imagePullPolicy: IfNotPresent + restartPolicy: Always From cc27525690f6335b48cad5d815cedf2a23e37e56 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:49:58 +0600 Subject: [PATCH 0538/1086] Create dns-horizontal-autoscaler.yaml --- .../admin/dns/dns-horizontal-autoscaler.yaml | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 content/bn/examples/admin/dns/dns-horizontal-autoscaler.yaml diff --git a/content/bn/examples/admin/dns/dns-horizontal-autoscaler.yaml b/content/bn/examples/admin/dns/dns-horizontal-autoscaler.yaml new file mode 100644 index 0000000000..3182fed3c8 --- /dev/null +++ b/content/bn/examples/admin/dns/dns-horizontal-autoscaler.yaml @@ -0,0 +1,87 @@ +kind: ServiceAccount +apiVersion: v1 +metadata: + name: kube-dns-autoscaler + namespace: kube-system +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: system:kube-dns-autoscaler +rules: + - apiGroups: [""] + resources: ["nodes"] + verbs: ["list", "watch"] + - apiGroups: [""] + resources: ["replicationcontrollers/scale"] + verbs: ["get", "update"] + - apiGroups: ["apps"] + resources: ["deployments/scale", "replicasets/scale"] + verbs: ["get", "update"] +# Remove the configmaps rule once below issue is fixed: +# kubernetes-incubator/cluster-proportional-autoscaler#16 + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "create"] +--- +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: system:kube-dns-autoscaler +subjects: + - kind: ServiceAccount + name: kube-dns-autoscaler + namespace: kube-system +roleRef: + kind: ClusterRole + name: system:kube-dns-autoscaler + apiGroup: rbac.authorization.k8s.io + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kube-dns-autoscaler + namespace: kube-system + labels: + k8s-app: kube-dns-autoscaler + kubernetes.io/cluster-service: "true" +spec: + selector: + matchLabels: + k8s-app: kube-dns-autoscaler + template: + metadata: + labels: + k8s-app: kube-dns-autoscaler + spec: + priorityClassName: system-cluster-critical + securityContext: + seccompProfile: + type: RuntimeDefault + supplementalGroups: [ 65534 ] + fsGroup: 65534 + nodeSelector: + kubernetes.io/os: linux + containers: + - name: autoscaler + image: registry.k8s.io/cpa/cluster-proportional-autoscaler:1.8.4 + resources: + requests: + cpu: "20m" + memory: "10Mi" + command: + - /cluster-proportional-autoscaler + - --namespace=kube-system + - --configmap=kube-dns-autoscaler + # Should keep target in sync with cluster/addons/dns/kube-dns.yaml.base + - --target= + # When cluster is using large nodes(with more cores), "coresPerReplica" should dominate. + # If using small nodes, "nodesPerReplica" should dominate. + - --default-params={"linear":{"coresPerReplica":256,"nodesPerReplica":16,"preventSinglePointFailure":true,"includeUnschedulableNodes":true}} + - --logtostderr=true + - --v=2 + tolerations: + - key: "CriticalAddonsOnly" + operator: "Exists" + serviceAccountName: kube-dns-autoscaler From 14864cb4432e8973228783c6e4f91b8c9941d5f0 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:50:32 +0600 Subject: [PATCH 0539/1086] Create dnsutils.yaml --- content/bn/examples/admin/dns/dnsutils.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/admin/dns/dnsutils.yaml diff --git a/content/bn/examples/admin/dns/dnsutils.yaml b/content/bn/examples/admin/dns/dnsutils.yaml new file mode 100644 index 0000000000..e1b3ace336 --- /dev/null +++ b/content/bn/examples/admin/dns/dnsutils.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Pod +metadata: + name: dnsutils + namespace: default +spec: + containers: + - name: dnsutils + image: registry.k8s.io/e2e-test-images/jessie-dnsutils:1.3 + command: + - sleep + - "infinity" + imagePullPolicy: IfNotPresent + restartPolicy: Always From 0431fe651ebdfcc093327018ab82cc2634e16acd Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:51:50 +0600 Subject: [PATCH 0540/1086] Create egress-selector-configuration.yaml --- .../egress-selector-configuration.yaml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 content/bn/examples/admin/konnectivity/egress-selector-configuration.yaml diff --git a/content/bn/examples/admin/konnectivity/egress-selector-configuration.yaml b/content/bn/examples/admin/konnectivity/egress-selector-configuration.yaml new file mode 100644 index 0000000000..631e6cc268 --- /dev/null +++ b/content/bn/examples/admin/konnectivity/egress-selector-configuration.yaml @@ -0,0 +1,21 @@ +apiVersion: apiserver.k8s.io/v1beta1 +kind: EgressSelectorConfiguration +egressSelections: +# Since we want to control the egress traffic to the cluster, we use the +# "cluster" as the name. Other supported values are "etcd", and "controlplane". +- name: cluster + connection: + # This controls the protocol between the API Server and the Konnectivity + # server. Supported values are "GRPC" and "HTTPConnect". There is no + # end user visible difference between the two modes. You need to set the + # Konnectivity server to work in the same mode. + proxyProtocol: GRPC + transport: + # This controls what transport the API Server uses to communicate with the + # Konnectivity server. UDS is recommended if the Konnectivity server + # locates on the same machine as the API Server. You need to configure the + # Konnectivity server to listen on the same UDS socket. + # The other supported transport is "tcp". You will need to set up TLS + # config to secure the TCP transport. + uds: + udsName: /etc/kubernetes/konnectivity-server/konnectivity-server.socket From ea8b53734201b3d44887e91f758093286e74cf06 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:53:31 +0600 Subject: [PATCH 0541/1086] Create konnectivity-agent.yaml --- .../konnectivity/konnectivity-agent.yaml | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 content/bn/examples/admin/konnectivity/konnectivity-agent.yaml diff --git a/content/bn/examples/admin/konnectivity/konnectivity-agent.yaml b/content/bn/examples/admin/konnectivity/konnectivity-agent.yaml new file mode 100644 index 0000000000..cbcbf89114 --- /dev/null +++ b/content/bn/examples/admin/konnectivity/konnectivity-agent.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +# Alternatively, you can deploy the agents as Deployments. It is not necessary +# to have an agent on each node. +kind: DaemonSet +metadata: + labels: + addonmanager.kubernetes.io/mode: Reconcile + k8s-app: konnectivity-agent + namespace: kube-system + name: konnectivity-agent +spec: + selector: + matchLabels: + k8s-app: konnectivity-agent + template: + metadata: + labels: + k8s-app: konnectivity-agent + spec: + priorityClassName: system-cluster-critical + tolerations: + - key: "CriticalAddonsOnly" + operator: "Exists" + containers: + - image: us.gcr.io/k8s-artifacts-prod/kas-network-proxy/proxy-agent:v0.0.37 + name: konnectivity-agent + command: ["/proxy-agent"] + args: [ + "--logtostderr=true", + "--ca-cert=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt", + # Since the konnectivity server runs with hostNetwork=true, + # this is the IP address of the master machine. + "--proxy-server-host=35.225.206.7", + "--proxy-server-port=8132", + "--admin-server-port=8133", + "--health-server-port=8134", + "--service-account-token-path=/var/run/secrets/tokens/konnectivity-agent-token" + ] + volumeMounts: + - mountPath: /var/run/secrets/tokens + name: konnectivity-agent-token + livenessProbe: + httpGet: + port: 8134 + path: /healthz + initialDelaySeconds: 15 + timeoutSeconds: 15 + serviceAccountName: konnectivity-agent + volumes: + - name: konnectivity-agent-token + projected: + sources: + - serviceAccountToken: + path: konnectivity-agent-token + audience: system:konnectivity-server From 6a247cfdc5b831ee591a2862e88d3588e86a11b4 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:54:14 +0600 Subject: [PATCH 0542/1086] Create konnectivity-rbac.yaml --- .../admin/konnectivity/konnectivity-rbac.yaml | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 content/bn/examples/admin/konnectivity/konnectivity-rbac.yaml diff --git a/content/bn/examples/admin/konnectivity/konnectivity-rbac.yaml b/content/bn/examples/admin/konnectivity/konnectivity-rbac.yaml new file mode 100644 index 0000000000..7687f49b77 --- /dev/null +++ b/content/bn/examples/admin/konnectivity/konnectivity-rbac.yaml @@ -0,0 +1,24 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: system:konnectivity-server + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:auth-delegator +subjects: + - apiGroup: rbac.authorization.k8s.io + kind: User + name: system:konnectivity-server +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: konnectivity-agent + namespace: kube-system + labels: + kubernetes.io/cluster-service: "true" + addonmanager.kubernetes.io/mode: Reconcile From dbc75688099983a772caf9d3a5bab90c3b0885bb Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:54:53 +0600 Subject: [PATCH 0543/1086] Create konnectivity-server.yaml --- .../konnectivity/konnectivity-server.yaml | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 content/bn/examples/admin/konnectivity/konnectivity-server.yaml diff --git a/content/bn/examples/admin/konnectivity/konnectivity-server.yaml b/content/bn/examples/admin/konnectivity/konnectivity-server.yaml new file mode 100644 index 0000000000..4dfbf5db9d --- /dev/null +++ b/content/bn/examples/admin/konnectivity/konnectivity-server.yaml @@ -0,0 +1,73 @@ +apiVersion: v1 +kind: Pod +metadata: + name: konnectivity-server + namespace: kube-system +spec: + priorityClassName: system-cluster-critical + hostNetwork: true + containers: + - name: konnectivity-server-container + image: registry.k8s.io/kas-network-proxy/proxy-server:v0.0.37 + command: ["/proxy-server"] + args: [ + "--logtostderr=true", + # This needs to be consistent with the value set in egressSelectorConfiguration. + "--uds-name=/etc/kubernetes/konnectivity-server/konnectivity-server.socket", + "--delete-existing-uds-file", + # The following two lines assume the Konnectivity server is + # deployed on the same machine as the apiserver, and the certs and + # key of the API Server are at the specified location. + "--cluster-cert=/etc/kubernetes/pki/apiserver.crt", + "--cluster-key=/etc/kubernetes/pki/apiserver.key", + # This needs to be consistent with the value set in egressSelectorConfiguration. + "--mode=grpc", + "--server-port=0", + "--agent-port=8132", + "--admin-port=8133", + "--health-port=8134", + "--agent-namespace=kube-system", + "--agent-service-account=konnectivity-agent", + "--kubeconfig=/etc/kubernetes/konnectivity-server.conf", + "--authentication-audience=system:konnectivity-server" + ] + livenessProbe: + httpGet: + scheme: HTTP + host: 127.0.0.1 + port: 8134 + path: /healthz + initialDelaySeconds: 30 + timeoutSeconds: 60 + ports: + - name: agentport + containerPort: 8132 + hostPort: 8132 + - name: adminport + containerPort: 8133 + hostPort: 8133 + - name: healthport + containerPort: 8134 + hostPort: 8134 + volumeMounts: + - name: k8s-certs + mountPath: /etc/kubernetes/pki + readOnly: true + - name: kubeconfig + mountPath: /etc/kubernetes/konnectivity-server.conf + readOnly: true + - name: konnectivity-uds + mountPath: /etc/kubernetes/konnectivity-server + readOnly: false + volumes: + - name: k8s-certs + hostPath: + path: /etc/kubernetes/pki + - name: kubeconfig + hostPath: + path: /etc/kubernetes/konnectivity-server.conf + type: FileOrCreate + - name: konnectivity-uds + hostPath: + path: /etc/kubernetes/konnectivity-server + type: DirectoryOrCreate From db9cd324910b14cc170533b7de144c1bd9602068 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:56:06 +0600 Subject: [PATCH 0544/1086] Create fluentd-sidecar-config.yaml --- .../admin/logging/fluentd-sidecar-config.yaml | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 content/bn/examples/admin/logging/fluentd-sidecar-config.yaml diff --git a/content/bn/examples/admin/logging/fluentd-sidecar-config.yaml b/content/bn/examples/admin/logging/fluentd-sidecar-config.yaml new file mode 100644 index 0000000000..eea1849b03 --- /dev/null +++ b/content/bn/examples/admin/logging/fluentd-sidecar-config.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: fluentd-config +data: + fluentd.conf: | + + type tail + format none + path /var/log/1.log + pos_file /var/log/1.log.pos + tag count.format1 + + + + type tail + format none + path /var/log/2.log + pos_file /var/log/2.log.pos + tag count.format2 + + + + type google_cloud + From e6b91493da171875748d9943cb391bba8a7cfeca Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:57:30 +0600 Subject: [PATCH 0545/1086] Create two-files-counter-pod-agent-sidecar.yaml --- .../two-files-counter-pod-agent-sidecar.yaml | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 content/bn/examples/admin/logging/two-files-counter-pod-agent-sidecar.yaml diff --git a/content/bn/examples/admin/logging/two-files-counter-pod-agent-sidecar.yaml b/content/bn/examples/admin/logging/two-files-counter-pod-agent-sidecar.yaml new file mode 100644 index 0000000000..a621a9fb2a --- /dev/null +++ b/content/bn/examples/admin/logging/two-files-counter-pod-agent-sidecar.yaml @@ -0,0 +1,39 @@ +apiVersion: v1 +kind: Pod +metadata: + name: counter +spec: + containers: + - name: count + image: busybox:1.28 + args: + - /bin/sh + - -c + - > + i=0; + while true; + do + echo "$i: $(date)" >> /var/log/1.log; + echo "$(date) INFO $i" >> /var/log/2.log; + i=$((i+1)); + sleep 1; + done + volumeMounts: + - name: varlog + mountPath: /var/log + - name: count-agent + image: registry.k8s.io/fluentd-gcp:1.30 + env: + - name: FLUENTD_ARGS + value: -c /etc/fluentd-config/fluentd.conf + volumeMounts: + - name: varlog + mountPath: /var/log + - name: config-volume + mountPath: /etc/fluentd-config + volumes: + - name: varlog + emptyDir: {} + - name: config-volume + configMap: + name: fluentd-config From fa068604d07e17d8844d7d7254b6c39b013b2bff Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:59:19 +0600 Subject: [PATCH 0546/1086] Create two-files-counter-pod-streaming-sidecar.yaml --- ...o-files-counter-pod-streaming-sidecar.yaml | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 content/bn/examples/admin/logging/two-files-counter-pod-streaming-sidecar.yaml diff --git a/content/bn/examples/admin/logging/two-files-counter-pod-streaming-sidecar.yaml b/content/bn/examples/admin/logging/two-files-counter-pod-streaming-sidecar.yaml new file mode 100644 index 0000000000..ac19efe4a2 --- /dev/null +++ b/content/bn/examples/admin/logging/two-files-counter-pod-streaming-sidecar.yaml @@ -0,0 +1,38 @@ +apiVersion: v1 +kind: Pod +metadata: + name: counter +spec: + containers: + - name: count + image: busybox:1.28 + args: + - /bin/sh + - -c + - > + i=0; + while true; + do + echo "$i: $(date)" >> /var/log/1.log; + echo "$(date) INFO $i" >> /var/log/2.log; + i=$((i+1)); + sleep 1; + done + volumeMounts: + - name: varlog + mountPath: /var/log + - name: count-log-1 + image: busybox:1.28 + args: [/bin/sh, -c, 'tail -n+1 -F /var/log/1.log'] + volumeMounts: + - name: varlog + mountPath: /var/log + - name: count-log-2 + image: busybox:1.28 + args: [/bin/sh, -c, 'tail -n+1 -F /var/log/2.log'] + volumeMounts: + - name: varlog + mountPath: /var/log + volumes: + - name: varlog + emptyDir: {} From 320feb4e27254919b575f18d24b6f4be4b1e6941 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 21:59:57 +0600 Subject: [PATCH 0547/1086] Create two-files-counter-pod.yaml --- .../admin/logging/two-files-counter-pod.yaml | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 content/bn/examples/admin/logging/two-files-counter-pod.yaml diff --git a/content/bn/examples/admin/logging/two-files-counter-pod.yaml b/content/bn/examples/admin/logging/two-files-counter-pod.yaml new file mode 100644 index 0000000000..31bbed3cf8 --- /dev/null +++ b/content/bn/examples/admin/logging/two-files-counter-pod.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Pod +metadata: + name: counter +spec: + containers: + - name: count + image: busybox:1.28 + args: + - /bin/sh + - -c + - > + i=0; + while true; + do + echo "$i: $(date)" >> /var/log/1.log; + echo "$(date) INFO $i" >> /var/log/2.log; + i=$((i+1)); + sleep 1; + done + volumeMounts: + - name: varlog + mountPath: /var/log + volumes: + - name: varlog + emptyDir: {} From fa927228b442825fb9b135336bdf180e12815889 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:01:30 +0600 Subject: [PATCH 0548/1086] Create cpu-constraints-pod-2.yaml --- .../admin/resource/cpu-constraints-pod-2.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 content/bn/examples/admin/resource/cpu-constraints-pod-2.yaml diff --git a/content/bn/examples/admin/resource/cpu-constraints-pod-2.yaml b/content/bn/examples/admin/resource/cpu-constraints-pod-2.yaml new file mode 100644 index 0000000000..b5c7348f26 --- /dev/null +++ b/content/bn/examples/admin/resource/cpu-constraints-pod-2.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: constraints-cpu-demo-2 +spec: + containers: + - name: constraints-cpu-demo-2-ctr + image: nginx + resources: + limits: + cpu: "1.5" + requests: + cpu: "500m" From 28c75d2d484360e3cc48b3af27915546d9279828 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:02:09 +0600 Subject: [PATCH 0549/1086] Create cpu-constraints-pod-3.yaml --- .../admin/resource/cpu-constraints-pod-3.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 content/bn/examples/admin/resource/cpu-constraints-pod-3.yaml diff --git a/content/bn/examples/admin/resource/cpu-constraints-pod-3.yaml b/content/bn/examples/admin/resource/cpu-constraints-pod-3.yaml new file mode 100644 index 0000000000..0a2083acd8 --- /dev/null +++ b/content/bn/examples/admin/resource/cpu-constraints-pod-3.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: constraints-cpu-demo-3 +spec: + containers: + - name: constraints-cpu-demo-3-ctr + image: nginx + resources: + limits: + cpu: "800m" + requests: + cpu: "100m" From 04105130d364d87d09e0e6645b047425a664444e Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:03:12 +0600 Subject: [PATCH 0550/1086] Create cpu-constraints-pod-4.yaml --- .../bn/examples/admin/resource/cpu-constraints-pod-4.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 content/bn/examples/admin/resource/cpu-constraints-pod-4.yaml diff --git a/content/bn/examples/admin/resource/cpu-constraints-pod-4.yaml b/content/bn/examples/admin/resource/cpu-constraints-pod-4.yaml new file mode 100644 index 0000000000..3c102158db --- /dev/null +++ b/content/bn/examples/admin/resource/cpu-constraints-pod-4.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Pod +metadata: + name: constraints-cpu-demo-4 +spec: + containers: + - name: constraints-cpu-demo-4-ctr + image: vish/stress From d559a22c2474b58811d55fbe8b835e8e6e5c723e Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:03:50 +0600 Subject: [PATCH 0551/1086] Create cpu-constraints-pod.yaml --- .../admin/resource/cpu-constraints-pod.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 content/bn/examples/admin/resource/cpu-constraints-pod.yaml diff --git a/content/bn/examples/admin/resource/cpu-constraints-pod.yaml b/content/bn/examples/admin/resource/cpu-constraints-pod.yaml new file mode 100644 index 0000000000..7db23f26c8 --- /dev/null +++ b/content/bn/examples/admin/resource/cpu-constraints-pod.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: constraints-cpu-demo +spec: + containers: + - name: constraints-cpu-demo-ctr + image: nginx + resources: + limits: + cpu: "800m" + requests: + cpu: "500m" From c3fd9223b21fa2012025e3f197a64ee2448484b5 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:04:36 +0600 Subject: [PATCH 0552/1086] Create cpu-constraints.yaml --- .../bn/examples/admin/resource/cpu-constraints.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/resource/cpu-constraints.yaml diff --git a/content/bn/examples/admin/resource/cpu-constraints.yaml b/content/bn/examples/admin/resource/cpu-constraints.yaml new file mode 100644 index 0000000000..6fc4239027 --- /dev/null +++ b/content/bn/examples/admin/resource/cpu-constraints.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: LimitRange +metadata: + name: cpu-min-max-demo-lr +spec: + limits: + - max: + cpu: "800m" + min: + cpu: "200m" + type: Container From f845626bc234ec71c101ba8310280ae2dcbc3b90 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:05:13 +0600 Subject: [PATCH 0553/1086] Create cpu-defaults-pod-2.yaml --- .../examples/admin/resource/cpu-defaults-pod-2.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/resource/cpu-defaults-pod-2.yaml diff --git a/content/bn/examples/admin/resource/cpu-defaults-pod-2.yaml b/content/bn/examples/admin/resource/cpu-defaults-pod-2.yaml new file mode 100644 index 0000000000..9ca216dee1 --- /dev/null +++ b/content/bn/examples/admin/resource/cpu-defaults-pod-2.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Pod +metadata: + name: default-cpu-demo-2 +spec: + containers: + - name: default-cpu-demo-2-ctr + image: nginx + resources: + limits: + cpu: "1" From 50e2a156c7ed624fa8ce28239525e182e84cc6e2 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:07:00 +0600 Subject: [PATCH 0554/1086] Create cpu-defaults-pod-3.yaml --- .../examples/admin/resource/cpu-defaults-pod-3.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/resource/cpu-defaults-pod-3.yaml diff --git a/content/bn/examples/admin/resource/cpu-defaults-pod-3.yaml b/content/bn/examples/admin/resource/cpu-defaults-pod-3.yaml new file mode 100644 index 0000000000..214cdee34b --- /dev/null +++ b/content/bn/examples/admin/resource/cpu-defaults-pod-3.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Pod +metadata: + name: default-cpu-demo-3 +spec: + containers: + - name: default-cpu-demo-3-ctr + image: nginx + resources: + requests: + cpu: "0.75" From c0e76fe67a20b032195e3d2e78beaf6f988eee09 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:07:49 +0600 Subject: [PATCH 0555/1086] Create cpu-defaults-pod.yaml --- content/bn/examples/admin/resource/cpu-defaults-pod.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 content/bn/examples/admin/resource/cpu-defaults-pod.yaml diff --git a/content/bn/examples/admin/resource/cpu-defaults-pod.yaml b/content/bn/examples/admin/resource/cpu-defaults-pod.yaml new file mode 100644 index 0000000000..56b06d9a69 --- /dev/null +++ b/content/bn/examples/admin/resource/cpu-defaults-pod.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Pod +metadata: + name: default-cpu-demo +spec: + containers: + - name: default-cpu-demo-ctr + image: nginx From 9d61fd080b49a64270a24d62c54ad59434a584a1 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:08:35 +0600 Subject: [PATCH 0556/1086] Create cpu-defaults.yaml --- content/bn/examples/admin/resource/cpu-defaults.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/resource/cpu-defaults.yaml diff --git a/content/bn/examples/admin/resource/cpu-defaults.yaml b/content/bn/examples/admin/resource/cpu-defaults.yaml new file mode 100644 index 0000000000..b53d297181 --- /dev/null +++ b/content/bn/examples/admin/resource/cpu-defaults.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: LimitRange +metadata: + name: cpu-limit-range +spec: + limits: + - default: + cpu: 1 + defaultRequest: + cpu: 0.5 + type: Container From 23d92038ff0b323fbb782f0eaaa4e54b46a79d8d Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:09:26 +0600 Subject: [PATCH 0557/1086] Create limit-mem-cpu-container.yaml --- .../resource/limit-mem-cpu-container.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/admin/resource/limit-mem-cpu-container.yaml diff --git a/content/bn/examples/admin/resource/limit-mem-cpu-container.yaml b/content/bn/examples/admin/resource/limit-mem-cpu-container.yaml new file mode 100644 index 0000000000..3c2b30f29c --- /dev/null +++ b/content/bn/examples/admin/resource/limit-mem-cpu-container.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: LimitRange +metadata: + name: limit-mem-cpu-per-container +spec: + limits: + - max: + cpu: "800m" + memory: "1Gi" + min: + cpu: "100m" + memory: "99Mi" + default: + cpu: "700m" + memory: "900Mi" + defaultRequest: + cpu: "110m" + memory: "111Mi" + type: Container From 454ed9255d424fc4333af0c8ca28ad8d057c4c1e Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:10:07 +0600 Subject: [PATCH 0558/1086] Create limit-mem-cpu-pod.yaml --- .../bn/examples/admin/resource/limit-mem-cpu-pod.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 content/bn/examples/admin/resource/limit-mem-cpu-pod.yaml diff --git a/content/bn/examples/admin/resource/limit-mem-cpu-pod.yaml b/content/bn/examples/admin/resource/limit-mem-cpu-pod.yaml new file mode 100644 index 0000000000..0ce0f69ac8 --- /dev/null +++ b/content/bn/examples/admin/resource/limit-mem-cpu-pod.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: LimitRange +metadata: + name: limit-mem-cpu-per-pod +spec: + limits: + - max: + cpu: "2" + memory: "2Gi" + type: Pod From f4ea0b8759220f406378ffec179c8a27661696ce Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:10:57 +0600 Subject: [PATCH 0559/1086] Create limit-memory-ratio-pod.yaml --- .../examples/admin/resource/limit-memory-ratio-pod.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 content/bn/examples/admin/resource/limit-memory-ratio-pod.yaml diff --git a/content/bn/examples/admin/resource/limit-memory-ratio-pod.yaml b/content/bn/examples/admin/resource/limit-memory-ratio-pod.yaml new file mode 100644 index 0000000000..859fc20ece --- /dev/null +++ b/content/bn/examples/admin/resource/limit-memory-ratio-pod.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: LimitRange +metadata: + name: limit-memory-ratio-pod +spec: + limits: + - maxLimitRequestRatio: + memory: 2 + type: Pod From b3360c69f563b6d7fd9e44cdfbecdf2f8ce18a07 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:11:44 +0600 Subject: [PATCH 0560/1086] Create limit-range-pod-1.yaml --- .../admin/resource/limit-range-pod-1.yaml | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 content/bn/examples/admin/resource/limit-range-pod-1.yaml diff --git a/content/bn/examples/admin/resource/limit-range-pod-1.yaml b/content/bn/examples/admin/resource/limit-range-pod-1.yaml new file mode 100644 index 0000000000..b9bd20d06a --- /dev/null +++ b/content/bn/examples/admin/resource/limit-range-pod-1.yaml @@ -0,0 +1,37 @@ +apiVersion: v1 +kind: Pod +metadata: + name: busybox1 +spec: + containers: + - name: busybox-cnt01 + image: busybox:1.28 + command: ["/bin/sh"] + args: ["-c", "while true; do echo hello from cnt01; sleep 10;done"] + resources: + requests: + memory: "100Mi" + cpu: "100m" + limits: + memory: "200Mi" + cpu: "500m" + - name: busybox-cnt02 + image: busybox:1.28 + command: ["/bin/sh"] + args: ["-c", "while true; do echo hello from cnt02; sleep 10;done"] + resources: + requests: + memory: "100Mi" + cpu: "100m" + - name: busybox-cnt03 + image: busybox:1.28 + command: ["/bin/sh"] + args: ["-c", "while true; do echo hello from cnt03; sleep 10;done"] + resources: + limits: + memory: "200Mi" + cpu: "500m" + - name: busybox-cnt04 + image: busybox:1.28 + command: ["/bin/sh"] + args: ["-c", "while true; do echo hello from cnt04; sleep 10;done"] From add1dd788221f895da057f8beba60d01a0949e0b Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:12:26 +0600 Subject: [PATCH 0561/1086] Create limit-range-pod-2.yaml --- .../admin/resource/limit-range-pod-2.yaml | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 content/bn/examples/admin/resource/limit-range-pod-2.yaml diff --git a/content/bn/examples/admin/resource/limit-range-pod-2.yaml b/content/bn/examples/admin/resource/limit-range-pod-2.yaml new file mode 100644 index 0000000000..40da19c1ae --- /dev/null +++ b/content/bn/examples/admin/resource/limit-range-pod-2.yaml @@ -0,0 +1,37 @@ +apiVersion: v1 +kind: Pod +metadata: + name: busybox2 +spec: + containers: + - name: busybox-cnt01 + image: busybox:1.28 + command: ["/bin/sh"] + args: ["-c", "while true; do echo hello from cnt01; sleep 10;done"] + resources: + requests: + memory: "100Mi" + cpu: "100m" + limits: + memory: "200Mi" + cpu: "500m" + - name: busybox-cnt02 + image: busybox:1.28 + command: ["/bin/sh"] + args: ["-c", "while true; do echo hello from cnt02; sleep 10;done"] + resources: + requests: + memory: "100Mi" + cpu: "100m" + - name: busybox-cnt03 + image: busybox:1.28 + command: ["/bin/sh"] + args: ["-c", "while true; do echo hello from cnt03; sleep 10;done"] + resources: + limits: + memory: "200Mi" + cpu: "500m" + - name: busybox-cnt04 + image: busybox:1.28 + command: ["/bin/sh"] + args: ["-c", "while true; do echo hello from cnt04; sleep 10;done"] From 9347144e64b5f90ea514409825470e17e62b8129 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:13:13 +0600 Subject: [PATCH 0562/1086] Create limit-range-pod-3.yaml --- .../examples/admin/resource/limit-range-pod-3.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/admin/resource/limit-range-pod-3.yaml diff --git a/content/bn/examples/admin/resource/limit-range-pod-3.yaml b/content/bn/examples/admin/resource/limit-range-pod-3.yaml new file mode 100644 index 0000000000..5b6b835e38 --- /dev/null +++ b/content/bn/examples/admin/resource/limit-range-pod-3.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Pod +metadata: + name: busybox3 +spec: + containers: + - name: busybox-cnt01 + image: busybox:1.28 + command: ["sleep", "3600"] + resources: + limits: + memory: "300Mi" + requests: + memory: "100Mi" From 3b5727135e3c73273844cdc4d73cd423e50eb3e5 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:13:57 +0600 Subject: [PATCH 0563/1086] Create memory-available-cgroupv2.sh --- .../resource/memory-available-cgroupv2.sh | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 content/bn/examples/admin/resource/memory-available-cgroupv2.sh diff --git a/content/bn/examples/admin/resource/memory-available-cgroupv2.sh b/content/bn/examples/admin/resource/memory-available-cgroupv2.sh new file mode 100644 index 0000000000..47b9f6802b --- /dev/null +++ b/content/bn/examples/admin/resource/memory-available-cgroupv2.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# This script reproduces what the kubelet does +# to calculate memory.available relative to kubepods cgroup. + +# current memory usage +memory_capacity_in_kb=$(cat /proc/meminfo | grep MemTotal | awk '{print $2}') +memory_capacity_in_bytes=$((memory_capacity_in_kb * 1024)) +memory_usage_in_bytes=$(cat /sys/fs/cgroup/kubepods.slice/memory.current) +memory_total_inactive_file=$(cat /sys/fs/cgroup/kubepods.slice/memory.stat | grep inactive_file | awk '{print $2}') + +memory_working_set=${memory_usage_in_bytes} +if [ "$memory_working_set" -lt "$memory_total_inactive_file" ]; +then + memory_working_set=0 +else + memory_working_set=$((memory_usage_in_bytes - memory_total_inactive_file)) +fi + +memory_available_in_bytes=$((memory_capacity_in_bytes - memory_working_set)) +memory_available_in_kb=$((memory_available_in_bytes / 1024)) +memory_available_in_mb=$((memory_available_in_kb / 1024)) + +echo "memory.capacity_in_bytes $memory_capacity_in_bytes" +echo "memory.usage_in_bytes $memory_usage_in_bytes" +echo "memory.total_inactive_file $memory_total_inactive_file" +echo "memory.working_set $memory_working_set" +echo "memory.available_in_bytes $memory_available_in_bytes" +echo "memory.available_in_kb $memory_available_in_kb" +echo "memory.available_in_mb $memory_available_in_mb" From 4ad951805d8ed1a28faaee1e68f1b326c814a9c0 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:15:02 +0600 Subject: [PATCH 0564/1086] Create memory-available.sh --- .../admin/resource/memory-available.sh | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 content/bn/examples/admin/resource/memory-available.sh diff --git a/content/bn/examples/admin/resource/memory-available.sh b/content/bn/examples/admin/resource/memory-available.sh new file mode 100644 index 0000000000..a699b1d2e2 --- /dev/null +++ b/content/bn/examples/admin/resource/memory-available.sh @@ -0,0 +1,31 @@ +#!/bin/bash +#!/usr/bin/env bash + +# This script reproduces what the kubelet does +# to calculate memory.available relative to root cgroup. + +# current memory usage +memory_capacity_in_kb=$(cat /proc/meminfo | grep MemTotal | awk '{print $2}') +memory_capacity_in_bytes=$((memory_capacity_in_kb * 1024)) +memory_usage_in_bytes=$(cat /sys/fs/cgroup/memory/memory.usage_in_bytes) +memory_total_inactive_file=$(cat /sys/fs/cgroup/memory/memory.stat | grep total_inactive_file | awk '{print $2}') + +memory_working_set=${memory_usage_in_bytes} +if [ "$memory_working_set" -lt "$memory_total_inactive_file" ]; +then + memory_working_set=0 +else + memory_working_set=$((memory_usage_in_bytes - memory_total_inactive_file)) +fi + +memory_available_in_bytes=$((memory_capacity_in_bytes - memory_working_set)) +memory_available_in_kb=$((memory_available_in_bytes / 1024)) +memory_available_in_mb=$((memory_available_in_kb / 1024)) + +echo "memory.capacity_in_bytes $memory_capacity_in_bytes" +echo "memory.usage_in_bytes $memory_usage_in_bytes" +echo "memory.total_inactive_file $memory_total_inactive_file" +echo "memory.working_set $memory_working_set" +echo "memory.available_in_bytes $memory_available_in_bytes" +echo "memory.available_in_kb $memory_available_in_kb" +echo "memory.available_in_mb $memory_available_in_mb" From 27a83546f215cee90b988aac5b3b9c31a41a4881 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:15:56 +0600 Subject: [PATCH 0565/1086] Create memory-constraints-pod-2.yaml --- .../admin/resource/memory-constraints-pod-2.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 content/bn/examples/admin/resource/memory-constraints-pod-2.yaml diff --git a/content/bn/examples/admin/resource/memory-constraints-pod-2.yaml b/content/bn/examples/admin/resource/memory-constraints-pod-2.yaml new file mode 100644 index 0000000000..0b1ae569c4 --- /dev/null +++ b/content/bn/examples/admin/resource/memory-constraints-pod-2.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: constraints-mem-demo-2 +spec: + containers: + - name: constraints-mem-demo-2-ctr + image: nginx + resources: + limits: + memory: "1.5Gi" + requests: + memory: "800Mi" From 1ff5e6b92fe0c4926261ab192e2fc34914cb0bf4 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:16:33 +0600 Subject: [PATCH 0566/1086] Create memory-constraints-pod-3.yaml --- .../admin/resource/memory-constraints-pod-3.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 content/bn/examples/admin/resource/memory-constraints-pod-3.yaml diff --git a/content/bn/examples/admin/resource/memory-constraints-pod-3.yaml b/content/bn/examples/admin/resource/memory-constraints-pod-3.yaml new file mode 100644 index 0000000000..f97cd4a8ac --- /dev/null +++ b/content/bn/examples/admin/resource/memory-constraints-pod-3.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: constraints-mem-demo-3 +spec: + containers: + - name: constraints-mem-demo-3-ctr + image: nginx + resources: + limits: + memory: "800Mi" + requests: + memory: "100Mi" From 13f20c85ee31f108e4cee9aab8233430f6b9d813 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:17:11 +0600 Subject: [PATCH 0567/1086] Create memory-constraints-pod-4.yaml --- .../examples/admin/resource/memory-constraints-pod-4.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 content/bn/examples/admin/resource/memory-constraints-pod-4.yaml diff --git a/content/bn/examples/admin/resource/memory-constraints-pod-4.yaml b/content/bn/examples/admin/resource/memory-constraints-pod-4.yaml new file mode 100644 index 0000000000..03e2b6d75e --- /dev/null +++ b/content/bn/examples/admin/resource/memory-constraints-pod-4.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Pod +metadata: + name: constraints-mem-demo-4 +spec: + containers: + - name: constraints-mem-demo-4-ctr + image: nginx From e7cd6a978e6b52b9f27fc80447154d65b5a3d7c2 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:17:49 +0600 Subject: [PATCH 0568/1086] Create memory-constraints-pod.yaml --- .../admin/resource/memory-constraints-pod.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 content/bn/examples/admin/resource/memory-constraints-pod.yaml diff --git a/content/bn/examples/admin/resource/memory-constraints-pod.yaml b/content/bn/examples/admin/resource/memory-constraints-pod.yaml new file mode 100644 index 0000000000..06954d10d6 --- /dev/null +++ b/content/bn/examples/admin/resource/memory-constraints-pod.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: constraints-mem-demo +spec: + containers: + - name: constraints-mem-demo-ctr + image: nginx + resources: + limits: + memory: "800Mi" + requests: + memory: "600Mi" From 3c615744526ba1b3ffc6141f99a398c49420dbd6 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:18:36 +0600 Subject: [PATCH 0569/1086] Create memory-constraints.yaml --- .../examples/admin/resource/memory-constraints.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/resource/memory-constraints.yaml diff --git a/content/bn/examples/admin/resource/memory-constraints.yaml b/content/bn/examples/admin/resource/memory-constraints.yaml new file mode 100644 index 0000000000..3a2924c032 --- /dev/null +++ b/content/bn/examples/admin/resource/memory-constraints.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: LimitRange +metadata: + name: mem-min-max-demo-lr +spec: + limits: + - max: + memory: 1Gi + min: + memory: 500Mi + type: Container From fe6d2a90e5b2dfd02a0ecac55533525be6f0ff5d Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:19:18 +0600 Subject: [PATCH 0570/1086] Create memory-defaults-pod-2.yaml --- .../admin/resource/memory-defaults-pod-2.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/resource/memory-defaults-pod-2.yaml diff --git a/content/bn/examples/admin/resource/memory-defaults-pod-2.yaml b/content/bn/examples/admin/resource/memory-defaults-pod-2.yaml new file mode 100644 index 0000000000..aa80610d84 --- /dev/null +++ b/content/bn/examples/admin/resource/memory-defaults-pod-2.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Pod +metadata: + name: default-mem-demo-2 +spec: + containers: + - name: default-mem-demo-2-ctr + image: nginx + resources: + limits: + memory: "1Gi" From ca018ece18182ef0a138f92e1474b7cdad54b94e Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:19:57 +0600 Subject: [PATCH 0571/1086] Create memory-defaults-pod-3.yaml --- .../admin/resource/memory-defaults-pod-3.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/resource/memory-defaults-pod-3.yaml diff --git a/content/bn/examples/admin/resource/memory-defaults-pod-3.yaml b/content/bn/examples/admin/resource/memory-defaults-pod-3.yaml new file mode 100644 index 0000000000..09ee8b39a9 --- /dev/null +++ b/content/bn/examples/admin/resource/memory-defaults-pod-3.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Pod +metadata: + name: default-mem-demo-3 +spec: + containers: + - name: default-mem-demo-3-ctr + image: nginx + resources: + requests: + memory: "128Mi" From 8580a69df13281d411b3b8b0914ebf7dcadbc731 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:20:42 +0600 Subject: [PATCH 0572/1086] Create memory-defaults-pod.yaml --- .../bn/examples/admin/resource/memory-defaults-pod.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 content/bn/examples/admin/resource/memory-defaults-pod.yaml diff --git a/content/bn/examples/admin/resource/memory-defaults-pod.yaml b/content/bn/examples/admin/resource/memory-defaults-pod.yaml new file mode 100644 index 0000000000..ce7a50fb55 --- /dev/null +++ b/content/bn/examples/admin/resource/memory-defaults-pod.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: Pod +metadata: + name: default-mem-demo +spec: + containers: + - name: default-mem-demo-ctr + image: nginx From ffe8140f91962da14d8dbcf0d600b5da8759e002 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:21:18 +0600 Subject: [PATCH 0573/1086] Create memory-defaults.yaml --- .../bn/examples/admin/resource/memory-defaults.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/resource/memory-defaults.yaml diff --git a/content/bn/examples/admin/resource/memory-defaults.yaml b/content/bn/examples/admin/resource/memory-defaults.yaml new file mode 100644 index 0000000000..b98a5ae262 --- /dev/null +++ b/content/bn/examples/admin/resource/memory-defaults.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: LimitRange +metadata: + name: mem-limit-range +spec: + limits: + - default: + memory: 512Mi + defaultRequest: + memory: 256Mi + type: Container From c9c539bc83d5f3dd2fcf07f1572bb52e58c868da Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:21:58 +0600 Subject: [PATCH 0574/1086] Create pvc-limit-greater.yaml --- .../bn/examples/admin/resource/pvc-limit-greater.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 content/bn/examples/admin/resource/pvc-limit-greater.yaml diff --git a/content/bn/examples/admin/resource/pvc-limit-greater.yaml b/content/bn/examples/admin/resource/pvc-limit-greater.yaml new file mode 100644 index 0000000000..2d92bf92b3 --- /dev/null +++ b/content/bn/examples/admin/resource/pvc-limit-greater.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc-limit-greater +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 5Gi From 602899c468c4dc1ebbef5d4a1d3d1e77bdcb98fe Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:23:01 +0600 Subject: [PATCH 0575/1086] Create pvc-limit-lower.yaml --- .../bn/examples/admin/resource/pvc-limit-lower.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 content/bn/examples/admin/resource/pvc-limit-lower.yaml diff --git a/content/bn/examples/admin/resource/pvc-limit-lower.yaml b/content/bn/examples/admin/resource/pvc-limit-lower.yaml new file mode 100644 index 0000000000..ef819b6292 --- /dev/null +++ b/content/bn/examples/admin/resource/pvc-limit-lower.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc-limit-lower +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 500Mi From c7503a802fd474a987d1231914cabdaf19539199 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:23:52 +0600 Subject: [PATCH 0576/1086] Create quota-mem-cpu-pod-2.yaml --- .../admin/resource/quota-mem-cpu-pod-2.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 content/bn/examples/admin/resource/quota-mem-cpu-pod-2.yaml diff --git a/content/bn/examples/admin/resource/quota-mem-cpu-pod-2.yaml b/content/bn/examples/admin/resource/quota-mem-cpu-pod-2.yaml new file mode 100644 index 0000000000..380e900fda --- /dev/null +++ b/content/bn/examples/admin/resource/quota-mem-cpu-pod-2.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: quota-mem-cpu-demo-2 +spec: + containers: + - name: quota-mem-cpu-demo-2-ctr + image: redis + resources: + limits: + memory: "1Gi" + cpu: "800m" + requests: + memory: "700Mi" + cpu: "400m" From 7fc140b8d040463143f5b6cef35187ea1f11e5e4 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:24:31 +0600 Subject: [PATCH 0577/1086] Create quota-mem-cpu-pod.yaml --- .../admin/resource/quota-mem-cpu-pod.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 content/bn/examples/admin/resource/quota-mem-cpu-pod.yaml diff --git a/content/bn/examples/admin/resource/quota-mem-cpu-pod.yaml b/content/bn/examples/admin/resource/quota-mem-cpu-pod.yaml new file mode 100644 index 0000000000..b0fd0a9451 --- /dev/null +++ b/content/bn/examples/admin/resource/quota-mem-cpu-pod.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: quota-mem-cpu-demo +spec: + containers: + - name: quota-mem-cpu-demo-ctr + image: nginx + resources: + limits: + memory: "800Mi" + cpu: "800m" + requests: + memory: "600Mi" + cpu: "400m" From ca123d393c319a6f1f90d022e4174312f2fe2648 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:25:14 +0600 Subject: [PATCH 0578/1086] Create quota-mem-cpu.yaml --- content/bn/examples/admin/resource/quota-mem-cpu.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 content/bn/examples/admin/resource/quota-mem-cpu.yaml diff --git a/content/bn/examples/admin/resource/quota-mem-cpu.yaml b/content/bn/examples/admin/resource/quota-mem-cpu.yaml new file mode 100644 index 0000000000..5c4bcd81b8 --- /dev/null +++ b/content/bn/examples/admin/resource/quota-mem-cpu.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ResourceQuota +metadata: + name: mem-cpu-demo +spec: + hard: + requests.cpu: "1" + requests.memory: 1Gi + limits.cpu: "2" + limits.memory: 2Gi From 0f5e1add4f00f2a745c212619ea5ce81b4145294 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:26:10 +0600 Subject: [PATCH 0579/1086] Create quota-objects-pvc-2.yaml --- .../examples/admin/resource/quota-objects-pvc-2.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/resource/quota-objects-pvc-2.yaml diff --git a/content/bn/examples/admin/resource/quota-objects-pvc-2.yaml b/content/bn/examples/admin/resource/quota-objects-pvc-2.yaml new file mode 100644 index 0000000000..2539c2d309 --- /dev/null +++ b/content/bn/examples/admin/resource/quota-objects-pvc-2.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc-quota-demo-2 +spec: + storageClassName: manual + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 4Gi From d831c97cba783c630f7276c727ec55acccbf3df6 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:26:42 +0600 Subject: [PATCH 0580/1086] Create quota-objects-pvc.yaml --- .../bn/examples/admin/resource/quota-objects-pvc.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/resource/quota-objects-pvc.yaml diff --git a/content/bn/examples/admin/resource/quota-objects-pvc.yaml b/content/bn/examples/admin/resource/quota-objects-pvc.yaml new file mode 100644 index 0000000000..728bb4d708 --- /dev/null +++ b/content/bn/examples/admin/resource/quota-objects-pvc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: pvc-quota-demo +spec: + storageClassName: manual + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 3Gi From 6a868e7003498bf88d178167d5f75eecc5bc1db0 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:27:16 +0600 Subject: [PATCH 0581/1086] Create quota-objects.yaml --- content/bn/examples/admin/resource/quota-objects.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 content/bn/examples/admin/resource/quota-objects.yaml diff --git a/content/bn/examples/admin/resource/quota-objects.yaml b/content/bn/examples/admin/resource/quota-objects.yaml new file mode 100644 index 0000000000..e97748decd --- /dev/null +++ b/content/bn/examples/admin/resource/quota-objects.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: ResourceQuota +metadata: + name: object-quota-demo +spec: + hard: + persistentvolumeclaims: "1" + services.loadbalancers: "2" + services.nodeports: "0" From 10fab7b1a9a05000c4832788395d634c637fa222 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:27:54 +0600 Subject: [PATCH 0582/1086] Create quota-pod-deployment.yaml --- .../admin/resource/quota-pod-deployment.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/bn/examples/admin/resource/quota-pod-deployment.yaml diff --git a/content/bn/examples/admin/resource/quota-pod-deployment.yaml b/content/bn/examples/admin/resource/quota-pod-deployment.yaml new file mode 100644 index 0000000000..86e85aa468 --- /dev/null +++ b/content/bn/examples/admin/resource/quota-pod-deployment.yaml @@ -0,0 +1,17 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: pod-quota-demo +spec: + selector: + matchLabels: + purpose: quota-demo + replicas: 3 + template: + metadata: + labels: + purpose: quota-demo + spec: + containers: + - name: pod-quota-demo + image: nginx From f930754c3f8d986a81bb70c7054d11cd5b4aa3fa Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:28:32 +0600 Subject: [PATCH 0583/1086] Create quota-pod.yaml --- content/bn/examples/admin/resource/quota-pod.yaml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 content/bn/examples/admin/resource/quota-pod.yaml diff --git a/content/bn/examples/admin/resource/quota-pod.yaml b/content/bn/examples/admin/resource/quota-pod.yaml new file mode 100644 index 0000000000..0a07f055ca --- /dev/null +++ b/content/bn/examples/admin/resource/quota-pod.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: ResourceQuota +metadata: + name: pod-demo +spec: + hard: + pods: "2" From 9545c225aa4545575e9ce7221343c72512c471db Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:29:08 +0600 Subject: [PATCH 0584/1086] Create storagelimits.yaml --- content/bn/examples/admin/resource/storagelimits.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/resource/storagelimits.yaml diff --git a/content/bn/examples/admin/resource/storagelimits.yaml b/content/bn/examples/admin/resource/storagelimits.yaml new file mode 100644 index 0000000000..7f597e4dfe --- /dev/null +++ b/content/bn/examples/admin/resource/storagelimits.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: LimitRange +metadata: + name: storagelimits +spec: + limits: + - type: PersistentVolumeClaim + max: + storage: 2Gi + min: + storage: 1Gi From 2dc796f3e123f52966e6f006c62566181ef63121 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:30:32 +0600 Subject: [PATCH 0585/1086] Create clusterrole.yaml --- .../bn/examples/admin/sched/clusterrole.yaml | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 content/bn/examples/admin/sched/clusterrole.yaml diff --git a/content/bn/examples/admin/sched/clusterrole.yaml b/content/bn/examples/admin/sched/clusterrole.yaml new file mode 100644 index 0000000000..554b8659db --- /dev/null +++ b/content/bn/examples/admin/sched/clusterrole.yaml @@ -0,0 +1,37 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + annotations: + rbac.authorization.kubernetes.io/autoupdate: "true" + labels: + kubernetes.io/bootstrapping: rbac-defaults + name: system:kube-scheduler +rules: + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - apiGroups: + - coordination.k8s.io + resourceNames: + - kube-scheduler + - my-scheduler + resources: + - leases + verbs: + - get + - update + - apiGroups: + - "" + resourceNames: + - kube-scheduler + - my-scheduler + resources: + - endpoints + verbs: + - delete + - get + - patch + - update From 1653dbe6e381a6820b8edf94dd34c90abee5495d Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:31:38 +0600 Subject: [PATCH 0586/1086] Create my-scheduler.yaml --- .../bn/examples/admin/sched/my-scheduler.yaml | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 content/bn/examples/admin/sched/my-scheduler.yaml diff --git a/content/bn/examples/admin/sched/my-scheduler.yaml b/content/bn/examples/admin/sched/my-scheduler.yaml new file mode 100644 index 0000000000..fa1c65bf9a --- /dev/null +++ b/content/bn/examples/admin/sched/my-scheduler.yaml @@ -0,0 +1,113 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: my-scheduler + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: my-scheduler-as-kube-scheduler +subjects: +- kind: ServiceAccount + name: my-scheduler + namespace: kube-system +roleRef: + kind: ClusterRole + name: system:kube-scheduler + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: my-scheduler-as-volume-scheduler +subjects: +- kind: ServiceAccount + name: my-scheduler + namespace: kube-system +roleRef: + kind: ClusterRole + name: system:volume-scheduler + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: my-scheduler-extension-apiserver-authentication-reader + namespace: kube-system +roleRef: + kind: Role + name: extension-apiserver-authentication-reader + apiGroup: rbac.authorization.k8s.io +subjects: +- kind: ServiceAccount + name: my-scheduler + namespace: kube-system +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: my-scheduler-config + namespace: kube-system +data: + my-scheduler-config.yaml: | + apiVersion: kubescheduler.config.k8s.io/v1beta2 + kind: KubeSchedulerConfiguration + profiles: + - schedulerName: my-scheduler + leaderElection: + leaderElect: false +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: scheduler + tier: control-plane + name: my-scheduler + namespace: kube-system +spec: + selector: + matchLabels: + component: scheduler + tier: control-plane + replicas: 1 + template: + metadata: + labels: + component: scheduler + tier: control-plane + version: second + spec: + serviceAccountName: my-scheduler + containers: + - command: + - /usr/local/bin/kube-scheduler + - --config=/etc/kubernetes/my-scheduler/my-scheduler-config.yaml + image: gcr.io/my-gcp-project/my-kube-scheduler:1.0 + livenessProbe: + httpGet: + path: /healthz + port: 10259 + scheme: HTTPS + initialDelaySeconds: 15 + name: kube-second-scheduler + readinessProbe: + httpGet: + path: /healthz + port: 10259 + scheme: HTTPS + resources: + requests: + cpu: '0.1' + securityContext: + privileged: false + volumeMounts: + - name: config-volume + mountPath: /etc/kubernetes/my-scheduler + hostNetwork: false + hostPID: false + volumes: + - name: config-volume + configMap: + name: my-scheduler-config From 3565cb65e4e4d829dcc5512010d102bc461b9860 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:32:13 +0600 Subject: [PATCH 0587/1086] Create pod1.yaml --- content/bn/examples/admin/sched/pod1.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 content/bn/examples/admin/sched/pod1.yaml diff --git a/content/bn/examples/admin/sched/pod1.yaml b/content/bn/examples/admin/sched/pod1.yaml new file mode 100644 index 0000000000..4755e445a5 --- /dev/null +++ b/content/bn/examples/admin/sched/pod1.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Pod +metadata: + name: no-annotation + labels: + name: multischeduler-example +spec: + containers: + - name: pod-with-no-annotation-container + image: registry.k8s.io/pause:2.0 From 695fe3f514ccbfda6d656800d89ed43b531855e1 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:32:44 +0600 Subject: [PATCH 0588/1086] Create pod2.yaml --- content/bn/examples/admin/sched/pod2.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/sched/pod2.yaml diff --git a/content/bn/examples/admin/sched/pod2.yaml b/content/bn/examples/admin/sched/pod2.yaml new file mode 100644 index 0000000000..b78ab64a4b --- /dev/null +++ b/content/bn/examples/admin/sched/pod2.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Pod +metadata: + name: annotation-default-scheduler + labels: + name: multischeduler-example +spec: + schedulerName: default-scheduler + containers: + - name: pod-with-default-annotation-container + image: registry.k8s.io/pause:2.0 From f84d1c6a231540df933932b4e528b6e64005b879 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:33:14 +0600 Subject: [PATCH 0589/1086] Create pod3.yaml --- content/bn/examples/admin/sched/pod3.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/admin/sched/pod3.yaml diff --git a/content/bn/examples/admin/sched/pod3.yaml b/content/bn/examples/admin/sched/pod3.yaml new file mode 100644 index 0000000000..6614143829 --- /dev/null +++ b/content/bn/examples/admin/sched/pod3.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Pod +metadata: + name: annotation-second-scheduler + labels: + name: multischeduler-example +spec: + schedulerName: my-scheduler + containers: + - name: pod-with-second-annotation-container + image: registry.k8s.io/pause:2.0 From 927521458597d8524993da777b1943f8cbccb626 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:34:04 +0600 Subject: [PATCH 0590/1086] Create namespace-dev.json --- content/bn/examples/admin/namespace-dev.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 content/bn/examples/admin/namespace-dev.json diff --git a/content/bn/examples/admin/namespace-dev.json b/content/bn/examples/admin/namespace-dev.json new file mode 100644 index 0000000000..cb3ed7cdc1 --- /dev/null +++ b/content/bn/examples/admin/namespace-dev.json @@ -0,0 +1,10 @@ +{ + "apiVersion": "v1", + "kind": "Namespace", + "metadata": { + "name": "development", + "labels": { + "name": "development" + } + } +} From 45b013fb0b6c8d6872b1474c395bf3dcdbaba2cf Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:34:51 +0600 Subject: [PATCH 0591/1086] Create namespace-dev.yaml --- content/bn/examples/admin/namespace-dev.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 content/bn/examples/admin/namespace-dev.yaml diff --git a/content/bn/examples/admin/namespace-dev.yaml b/content/bn/examples/admin/namespace-dev.yaml new file mode 100644 index 0000000000..5e753b693f --- /dev/null +++ b/content/bn/examples/admin/namespace-dev.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: development + labels: + name: development From a7c33fadb1a93fc1e0aa5436ef11e6b7090cb144 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:35:26 +0600 Subject: [PATCH 0592/1086] Create namespace-prod.yaml --- content/bn/examples/admin/namespace-prod.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 content/bn/examples/admin/namespace-prod.yaml diff --git a/content/bn/examples/admin/namespace-prod.yaml b/content/bn/examples/admin/namespace-prod.yaml new file mode 100644 index 0000000000..761d6325cb --- /dev/null +++ b/content/bn/examples/admin/namespace-prod.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: production + labels: + name: production From 6758ab80d532944bf36c9c01cf311caf309a796d Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Sun, 5 May 2024 22:35:58 +0600 Subject: [PATCH 0593/1086] Create snowflake-deployment.yaml --- .../examples/admin/snowflake-deployment.yaml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 content/bn/examples/admin/snowflake-deployment.yaml diff --git a/content/bn/examples/admin/snowflake-deployment.yaml b/content/bn/examples/admin/snowflake-deployment.yaml new file mode 100644 index 0000000000..21b6738ba4 --- /dev/null +++ b/content/bn/examples/admin/snowflake-deployment.yaml @@ -0,0 +1,20 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: snowflake + name: snowflake +spec: + replicas: 2 + selector: + matchLabels: + app: snowflake + template: + metadata: + labels: + app: snowflake + spec: + containers: + - image: registry.k8s.io/serve_hostname + imagePullPolicy: Always + name: snowflake From d6fcd1ebe5debeccbbfbe705761f90645b37b8f0 Mon Sep 17 00:00:00 2001 From: Arhell Date: Mon, 6 May 2024 01:56:22 +0300 Subject: [PATCH 0594/1086] [pl] Ready training section for vanilla Docsy --- content/pl/training/_index.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/pl/training/_index.html b/content/pl/training/_index.html index 005595c349..a3f4d2bb08 100644 --- a/content/pl/training/_index.html +++ b/content/pl/training/_index.html @@ -5,6 +5,10 @@ abstract: Programy szkoleniowe, certyfikacja i partnerzy. layout: basic cid: training class: training +body_class: training +menu: + main: + weight: 30 ---
          From eea60cf37039e1576f8d66e6011bdaffc6f17e16 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 5 May 2024 19:49:58 +0800 Subject: [PATCH 0595/1086] [zh] Sync kubeadm_join_phase_wait-control-plane.md and kubeadm_init_phase_show-join-command.md --- .../kubeadm_init_phase_show-join-command.md | 16 +--- .../kubeadm_join_phase_wait-control-plane.md | 75 +++++++++++++++++++ .../kubeadm/generated/kubeadm_upgrade_node.md | 14 ++++ 3 files changed, 90 insertions(+), 15 deletions(-) create mode 100644 content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_wait-control-plane.md diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_show-join-command.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_show-join-command.md index 8c545b08ec..d20f98b28a 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_show-join-command.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_show-join-command.md @@ -1,14 +1,3 @@ - - @@ -51,7 +40,7 @@ kubeadm init phase show-join-command [flags] help for show-join-command -->

          -show-join-command 操作的帮助命令 +show-join-command 操作的帮助命令。

          @@ -89,6 +78,3 @@ show-join-command 操作的帮助命令 - - - diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_wait-control-plane.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_wait-control-plane.md new file mode 100644 index 0000000000..3f437cde60 --- /dev/null +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_wait-control-plane.md @@ -0,0 +1,75 @@ + +**实验特性**:等待控制平面启动 + + +### 概要 + +**实验特性**:等待控制平面启动 + +``` +kubeadm join phase wait-control-plane [flags] +``` + + +### 选项 + + ++++ + + + + + + + + + + +
          -h, --help
          +

          + +wait-control-plane 操作的帮助命令。 +

          +
          + + +### 从父命令继承的选项 + + ++++ + + + + + + + + + + +
          --rootfs string
          +

          + +[实验] 到 '真实' 主机根文件系统的路径。 +

          +
          diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node.md index 98fce303fc..75af549404 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node.md @@ -61,6 +61,20 @@ Perform the renewal of certificates used by component changed during upgrades. + +--config string + + + +

          + +到 kubeadm 配置文件的路径。 +

          + + + --dry-run From 753141b2e5dde806ccb4f2604ad57849599a6d29 Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 5 May 2024 17:32:56 +0800 Subject: [PATCH 0596/1086] [zh] Add 5 new feature gates --- .../custom-resource-field-selectors.md | 20 ++++++++++++++ .../runtime-class-in-image-cri-api.md | 18 +++++++++++++ .../feature-gates/selinux-mount.md | 27 +++++++++++++++++++ .../service-traffic-distribution.md | 21 +++++++++++++++ .../feature-gates/storage-version-migrator.md | 19 +++++++++++++ 5 files changed, 105 insertions(+) create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/custom-resource-field-selectors.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/runtime-class-in-image-cri-api.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/selinux-mount.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/service-traffic-distribution.md create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/storage-version-migrator.md diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/custom-resource-field-selectors.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/custom-resource-field-selectors.md new file mode 100644 index 0000000000..5081eff83d --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/custom-resource-field-selectors.md @@ -0,0 +1,20 @@ +--- +title: CustomResourceFieldSelectors +content_type: feature_gate +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.30" +--- + + +在 {{< glossary_tooltip term_id="CustomResourceDefinition" text="CustomResourceDefinition" >}} API 中启用 +`selectableFields`,以针对 **list**、**watch** 和 **deletecollection** 请求过滤自定义资源。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/runtime-class-in-image-cri-api.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/runtime-class-in-image-cri-api.md new file mode 100644 index 0000000000..13dc5786f3 --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/runtime-class-in-image-cri-api.md @@ -0,0 +1,18 @@ +--- +title: RuntimeClassInImageCriApi +content_type: feature_gate +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.29" +--- + + +允许基于 Pod 所引用的[运行时类](/zh-cn/docs/concepts/containers/runtime-class/)来拉取镜像。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/selinux-mount.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/selinux-mount.md new file mode 100644 index 0000000000..8bc9a10a9a --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/selinux-mount.md @@ -0,0 +1,27 @@ +--- +title: SELinuxMount +content_type: feature_gate +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.30" +--- + + +允许 kubelet 直接使用正确的 SELinux 标签为 Pod 挂载卷,而不是以递归方式更改卷上的每个文件,进而加快容器的启动速度。 +这一变更拓宽了针对 `SELinuxMountReadWriteOncePod` 特性门控所作的性能改进,将其对应的实现扩展到覆盖所有卷。 + +想要启用 `SELinuxMount` 特性门控,需先启用 `SELinuxMountReadWriteOncePod` 特性门控。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/service-traffic-distribution.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/service-traffic-distribution.md new file mode 100644 index 0000000000..bd4f03b1a1 --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/service-traffic-distribution.md @@ -0,0 +1,21 @@ +--- +title: ServiceTrafficDistribution +content_type: feature_gate + +_build: + list: never + render: false + +stages: +- stage: alpha + defaultValue: false + fromVersion: "1.30" +--- + + +允许在 Service 中使用可选的 `spec.trafficDistribution` 字段。 +此字段提供了一种对 Service 端点进行流量分发的偏好的表达方式。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/storage-version-migrator.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/storage-version-migrator.md new file mode 100644 index 0000000000..de8bfc22fd --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/storage-version-migrator.md @@ -0,0 +1,19 @@ +--- +title: StorageVersionMigrator +content_type: feature_gate +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.30" + toVersion: "1.32" +--- + + +启用存储版本迁移机制。 +有关细节参阅[使用存储版本迁移功能来迁移 Kubernetes 对象](/zh-cn/docs/tasks/manage-kubernetes-objects/storage-version-migration)。 From 6ce6b4a05d9fadd6afa803cecc8c7ab3efe9bd1f Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 5 May 2024 10:22:08 +0800 Subject: [PATCH 0597/1086] [zh] Add a blog: 2024-04-24-validating-admission-policy-ga/ --- .../index.md | 406 ++++++++++++++++++ .../webhook.go | 90 ++++ 2 files changed, 496 insertions(+) create mode 100644 content/zh-cn/blog/_posts/2024-04-24-validating-admission-policy-ga/index.md create mode 100644 content/zh-cn/blog/_posts/2024-04-24-validating-admission-policy-ga/webhook.go diff --git a/content/zh-cn/blog/_posts/2024-04-24-validating-admission-policy-ga/index.md b/content/zh-cn/blog/_posts/2024-04-24-validating-admission-policy-ga/index.md new file mode 100644 index 0000000000..15cb508866 --- /dev/null +++ b/content/zh-cn/blog/_posts/2024-04-24-validating-admission-policy-ga/index.md @@ -0,0 +1,406 @@ +--- +layout: blog +title: "Kubernetes 1.30:验证准入策略 ValidatingAdmissionPolicy 正式发布" +slug: validating-admission-policy-ga +date: 2024-04-24 +author: > + Jiahui Feng (Google) +translator: Michael Yao (DaoCloud) +--- + + + +我代表 Kubernetes 项目组成员,很高兴地宣布 ValidatingAdmissionPolicy 已经作为 Kubernetes 1.30 发布的一部分**正式发布**。 +如果你还不了解这个全新的声明式验证准入 Webhook 的替代方案, +请参阅有关这个新特性的[上一篇博文](/blog/2022/12/20/validating-admission-policies-alpha/)。 +如果你已经对 ValidatingAdmissionPolicy 有所了解并且想要尝试一下,那么现在是最好的时机。 + +让我们替换一个简单的 Webhook,体验一下 ValidatingAdmissionPolicy。 + + +## 准入 Webhook 示例 + +首先,让我们看一个简单 Webhook 的示例。以下是一个强制将 +`runAsNonRoot`、`readOnlyRootFilesystem`、`allowPrivilegeEscalation` 和 `privileged` 设置为最低权限值的 Webhook 代码片段。 + +```go +func verifyDeployment(deploy *appsv1.Deployment) error { + var errs []error + for i, c := range deploy.Spec.Template.Spec.Containers { + if c.Name == "" { + return fmt.Errorf("container %d has no name", i) + } + if c.SecurityContext == nil { + errs = append(errs, fmt.Errorf("container %q does not have SecurityContext", c.Name)) + } + if c.SecurityContext.RunAsNonRoot == nil || !*c.SecurityContext.RunAsNonRoot { + errs = append(errs, fmt.Errorf("container %q must set RunAsNonRoot to true in its SecurityContext", c.Name)) + } + if c.SecurityContext.ReadOnlyRootFilesystem == nil || !*c.SecurityContext.ReadOnlyRootFilesystem { + errs = append(errs, fmt.Errorf("container %q must set ReadOnlyRootFilesystem to true in its SecurityContext", c.Name)) + } + if c.SecurityContext.AllowPrivilegeEscalation != nil && *c.SecurityContext.AllowPrivilegeEscalation { + errs = append(errs, fmt.Errorf("container %q must NOT set AllowPrivilegeEscalation to true in its SecurityContext", c.Name)) + } + if c.SecurityContext.Privileged != nil && *c.SecurityContext.Privileged { + errs = append(errs, fmt.Errorf("container %q must NOT set Privileged to true in its SecurityContext", c.Name)) + } + } + return errors.NewAggregate(errs) +} +``` + + +查阅[什么是准入 Webhook?](/zh-cn/docs/reference/access-authn-authz/extensible-admission-controllers/#what-are-admission-webhooks), +或者查看这个 Webhook 的[完整代码](webhook.go)以便更好地理解下述演示。 + +## 策略 + +现在,让我们尝试使用 ValidatingAdmissionPolicy 来忠实地重新创建验证。 + +```yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicy +metadata: + name: "pod-security.policy.example.com" +spec: + failurePolicy: Fail + matchConstraints: + resourceRules: + - apiGroups: ["apps"] + apiVersions: ["v1"] + operations: ["CREATE", "UPDATE"] + resources: ["deployments"] + validations: + - expression: object.spec.template.spec.containers.all(c, has(c.securityContext) && has(c.securityContext.runAsNonRoot) && c.securityContext.runAsNonRoot) + message: 'all containers must set runAsNonRoot to true' + - expression: object.spec.template.spec.containers.all(c, has(c.securityContext) && has(c.securityContext.readOnlyRootFilesystem) && c.securityContext.readOnlyRootFilesystem) + message: 'all containers must set readOnlyRootFilesystem to true' + - expression: object.spec.template.spec.containers.all(c, !has(c.securityContext) || !has(c.securityContext.allowPrivilegeEscalation) || !c.securityContext.allowPrivilegeEscalation) + message: 'all containers must NOT set allowPrivilegeEscalation to true' + - expression: object.spec.template.spec.containers.all(c, !has(c.securityContext) || !has(c.securityContext.Privileged) || !c.securityContext.Privileged) + message: 'all containers must NOT set privileged to true' +``` + + +使用 `kubectl` 创建策略。很好,到目前为止没有任何问题。那我们获取此策略对象并查看其状态。 + +```shell +kubectl get -oyaml validatingadmissionpolicies/pod-security.policy.example.com +``` + +```yaml + status: + typeChecking: + expressionWarnings: + - fieldRef: spec.validations[3].expression + warning: | + apps/v1, Kind=Deployment: ERROR: :1:76: undefined field 'Privileged' + | object.spec.template.spec.containers.all(c, !has(c.securityContext) || !has(c.securityContext.Privileged) || !c.securityContext.Privileged) + | ...........................................................................^ + ERROR: :1:128: undefined field 'Privileged' + | object.spec.template.spec.containers.all(c, !has(c.securityContext) || !has(c.securityContext.Privileged) || !c.securityContext.Privileged) + | ...............................................................................................................................^ + +``` + + +系统根据所匹配的类别 `apps/v1.Deployment` 对策略执行了检查。 +查看 `fieldRef` 后,发现问题出现在第 3 个表达式上(索引从 0 开始)。 +有问题的表达式访问了一个未定义的 `Privileged` 字段。 +噢,看起来是一个复制粘贴错误。字段名应该是小写的。 + +```yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicy +metadata: + name: "pod-security.policy.example.com" +spec: + failurePolicy: Fail + matchConstraints: + resourceRules: + - apiGroups: ["apps"] + apiVersions: ["v1"] + operations: ["CREATE", "UPDATE"] + resources: ["deployments"] + validations: + - expression: object.spec.template.spec.containers.all(c, has(c.securityContext) && has(c.securityContext.runAsNonRoot) && c.securityContext.runAsNonRoot) + message: 'all containers must set runAsNonRoot to true' + - expression: object.spec.template.spec.containers.all(c, has(c.securityContext) && has(c.securityContext.readOnlyRootFilesystem) && c.securityContext.readOnlyRootFilesystem) + message: 'all containers must set readOnlyRootFilesystem to true' + - expression: object.spec.template.spec.containers.all(c, !has(c.securityContext) || !has(c.securityContext.allowPrivilegeEscalation) || !c.securityContext.allowPrivilegeEscalation) + message: 'all containers must NOT set allowPrivilegeEscalation to true' + - expression: object.spec.template.spec.containers.all(c, !has(c.securityContext) || !has(c.securityContext.privileged) || !c.securityContext.privileged) + message: 'all containers must NOT set privileged to true' +``` + + +再次检查状态,你应该看到所有警告都已被清除。 + +接下来,我们创建一个命名空间进行测试。 + +```shell +kubectl create namespace policy-test +``` + + +接下来,我将策略绑定到命名空间。但此时我将动作设置为 `Warn`, +这样此策略将打印出[警告](/zh-cn/blog/2020/09/03/warnings/)而不是拒绝请求。 +这对于在开发和自动化测试期间收集所有表达式的结果非常有用。 + +```yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicyBinding +metadata: + name: "pod-security.policy-binding.example.com" +spec: + policyName: "pod-security.policy.example.com" + validationActions: ["Warn"] + matchResources: + namespaceSelector: + matchLabels: + "kubernetes.io/metadata.name": "policy-test" +``` + + +测试策略的执行过程。 + +```shell +kubectl create -n policy-test -f- < +看起来很不错!策略和 Webhook 给出了等效的结果。 +又测试了其他几种情形后,当我们对策略有信心时,也许是时候进行一些清理工作了。 + +- 对于每个表达式,我们重复访问 `object.spec.template.spec.containers` 和每个 `securityContext`; +- 有一个检查某字段是否存在然后访问该字段的模式,这种模式看起来有点繁琐。 + + +幸运的是,自 Kubernetes 1.28 以来,我们对这两个问题都有了新的解决方案。 +变量组合(Variable Composition)允许我们将重复的子表达式提取到单独的变量中。 +Kubernetes 允许为 CEL 使用[可选库](https://github.com/google/cel-spec/wiki/proposal-246), +这些库非常适合处理可选的字段,你猜对了。 + +在了解了这两个特性后,让我们稍微重构一下此策略。 + +```yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicy +metadata: + name: "pod-security.policy.example.com" +spec: + failurePolicy: Fail + matchConstraints: + resourceRules: + - apiGroups: ["apps"] + apiVersions: ["v1"] + operations: ["CREATE", "UPDATE"] + resources: ["deployments"] + variables: + - name: containers + expression: object.spec.template.spec.containers + - name: securityContexts + expression: 'variables.containers.map(c, c.?securityContext)' + validations: + - expression: variables.securityContexts.all(c, c.?runAsNonRoot == optional.of(true)) + message: 'all containers must set runAsNonRoot to true' + - expression: variables.securityContexts.all(c, c.?readOnlyRootFilesystem == optional.of(true)) + message: 'all containers must set readOnlyRootFilesystem to true' + - expression: variables.securityContexts.all(c, c.?allowPrivilegeEscalation != optional.of(true)) + message: 'all containers must NOT set allowPrivilegeEscalation to true' + - expression: variables.securityContexts.all(c, c.?privileged != optional.of(true)) + message: 'all containers must NOT set privileged to true' +``` + + +策略现在更简洁、更易读。更新策略后,你应该看到它的功用与之前无异。 + +现在让我们将策略绑定从警告更改为实际拒绝验证失败的请求。 + +```yaml +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicyBinding +metadata: + name: "pod-security.policy-binding.example.com" +spec: + policyName: "pod-security.policy.example.com" + validationActions: ["Deny"] + matchResources: + namespaceSelector: + matchLabels: + "kubernetes.io/metadata.name": "policy-test" +``` + + +最后,移除 Webhook。现在结果应该只包含来自策略的消息。 + +```shell +kubectl create -n policy-test -f- < +请注意,根据设计,此策略在第一个导致请求被拒绝的表达式之后停止处理。 +这与表达式只生成警告时的情况不同。 + + +## 设置监控 + +与 Webhook 不同,策略不是一个可以公开其自身指标的专用进程。 +相反,你可以使用源自 API 服务器的指标来代替。 + +以下是使用 Prometheus 查询语言执行一些常见监控任务的示例。 + +找到上述策略执行期间的 95 分位值: + +```text +histogram_quantile(0.95, sum(rate(apiserver_validating_admission_policy_check_duration_seconds_bucket{policy="pod-security.policy.example.com"}[5m])) by (le)) +``` + + +找到策略评估的速率: + +```text +rate(apiserver_validating_admission_policy_check_total{policy="pod-security.policy.example.com"}[5m]) +``` + + +你可以阅读[指标参考](/docs/reference/instrumentation/metrics/)了解有关上述指标的更多信息。 +ValidatingAdmissionPolicy 的指标目前处于 Alpha 阶段,随着稳定性在未来版本中的提升,将会有更多和更好的指标。 diff --git a/content/zh-cn/blog/_posts/2024-04-24-validating-admission-policy-ga/webhook.go b/content/zh-cn/blog/_posts/2024-04-24-validating-admission-policy-ga/webhook.go new file mode 100644 index 0000000000..3f0d1a8fae --- /dev/null +++ b/content/zh-cn/blog/_posts/2024-04-24-validating-admission-policy-ga/webhook.go @@ -0,0 +1,90 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "log" + "net/http" + + admissionv1 "k8s.io/api/admission/v1" + appsv1 "k8s.io/api/apps/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/errors" +) + +func verifyDeployment(deploy *appsv1.Deployment) error { + var errs []error + for i, c := range deploy.Spec.Template.Spec.Containers { + if c.Name == "" { + return fmt.Errorf("container %d has no name", i) + } + if c.SecurityContext == nil { + errs = append(errs, fmt.Errorf("container %q does not have SecurityContext", c.Name)) + } + if c.SecurityContext.RunAsNonRoot == nil || !*c.SecurityContext.RunAsNonRoot { + errs = append(errs, fmt.Errorf("container %q must set RunAsNonRoot to true in its SecurityContext", c.Name)) + } + if c.SecurityContext.ReadOnlyRootFilesystem == nil || !*c.SecurityContext.ReadOnlyRootFilesystem { + errs = append(errs, fmt.Errorf("container %q must set ReadOnlyRootFilesystem to true in its SecurityContext", c.Name)) + } + if c.SecurityContext.AllowPrivilegeEscalation != nil && *c.SecurityContext.AllowPrivilegeEscalation { + errs = append(errs, fmt.Errorf("container %q must NOT set AllowPrivilegeEscalation to true in its SecurityContext", c.Name)) + } + if c.SecurityContext.Privileged != nil && *c.SecurityContext.Privileged { + errs = append(errs, fmt.Errorf("container %q must NOT set Privileged to true in its SecurityContext", c.Name)) + } + } + return errors.NewAggregate(errs) +} + +func WebhookEnforceSecurePodConfiguration(rw http.ResponseWriter, req *http.Request) { + result := &admissionv1.AdmissionReview{Response: &admissionv1.AdmissionResponse{}} + err := func() error { + ar := new(admissionv1.AdmissionReview) + err := json.NewDecoder(req.Body).Decode(ar) + if err != nil { + return err + } + if ar.Request == nil { + return nil + } + result.TypeMeta = ar.TypeMeta + result.Response.UID = ar.Request.UID + if len(ar.Request.Object.Raw) == 0 { + return nil + } + deploy := new(appsv1.Deployment) + err = json.Unmarshal(ar.Request.Object.Raw, deploy) + if err != nil { + return err + } + return verifyDeployment(deploy) + }() + if err == nil { + result.Response.Allowed = true + } else { + result.Response.Allowed = false + result.Response.Result = &metav1.Status{ + Code: http.StatusForbidden, + Message: err.Error(), + } + } + err = json.NewEncoder(rw).Encode(result) + if err != nil { + log.Println(err) + } +} + +var _ http.HandlerFunc = WebhookEnforceSecurePodConfiguration + +func main() { + http.HandleFunc("/", WebhookEnforceSecurePodConfiguration) + + addr := flag.String("addr", ":8443", "address to listen on") + certFile := flag.String("cert", "cert.pem", "path to TLS certificate") + keyFile := flag.String("key", "key.pem", "path to TLS key") + flag.Parse() + + log.Fatalln(http.ListenAndServeTLS(*addr, *certFile, *keyFile, nil)) +} From d33006c9dda96c26e24d7832baab04045454732c Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sat, 4 May 2024 23:27:45 +0800 Subject: [PATCH 0598/1086] [zh-cn] sync user-namespaces.md Signed-off-by: xin.li --- .../workloads/pods/user-namespaces.md | 171 +++++++++++++++--- 1 file changed, 147 insertions(+), 24 deletions(-) diff --git a/content/zh-cn/docs/concepts/workloads/pods/user-namespaces.md b/content/zh-cn/docs/concepts/workloads/pods/user-namespaces.md index 8953e30373..b49d8a1c19 100644 --- a/content/zh-cn/docs/concepts/workloads/pods/user-namespaces.md +++ b/content/zh-cn/docs/concepts/workloads/pods/user-namespaces.md @@ -13,7 +13,7 @@ min-kubernetes-server-version: v1.25 --> -{{< feature-state for_k8s_version="v1.25" state="alpha" >}} +{{< feature-state for_k8s_version="v1.30" state="beta" >}} + +此外,容器运行时及其底层 OCI 运行时必须支持用户命名空间。以下 OCI 运行时提供支持: + +* [crun](https://github.com/containers/crun) 1.9 或更高版本(推荐 1.13+ 版本)。 + + + +{{< note >}} + +许多 OCI 运行时不包含在 Linux Pod 中使用用户命名空间所需的支持。 +如果你使用托管 Kubernetes,或者使用软件包下载并安装 Kubernetes 集群, +则集群中的节点可能使用不包含支持此特性的运行时。 +例如,最广泛使用的 OCI 运行时是 `runc`,而 runc 的 `1.1.z` +版本不支持 Kubernetes 实现用户命名空间所需的所有特性。 + + +如果有比 1.1 更新的 runc 版本可供使用,请检查其文档和发行说明以了解兼容性 +(特别寻找 idmap 挂载支持,因为这一特性是缺失的)。 +{{< /note >}} + + - 此外,需要在{{< glossary_tooltip text="容器运行时" term_id="container-runtime" >}}提供支持, 才能在 Kubernetes Pod 中使用这一功能: @@ -254,30 +290,117 @@ use, see `man 7 user_namespaces`. ## 设置一个节点以支持用户命名空间 {#set-up-a-node-to-support-user-namespaces} -建议主机的文件和主机的进程使用 0-65535 范围内的 UID/GID。 +默认情况下,kubelet 会分配 0-65535 范围以上的 Pod UID/GID, +这是基于主机的文件和进程使用此范围内的 UID/GID 的假设,也是大多数 Linux 发行版的标准。 +此方法可防止主机的 UID/GID 与 Pod 的 UID/GID 之间出现重叠。 -kubelet 会把高于这个范围的 UID/GID 分配给 Pod。 -因此,为了保证尽可能多的隔离,主机的文件和主机的进程所使用的 UID/GID 应该在 0-65535 范围内。 + +避免重叠对于减轻 [CVE-2021-25741][CVE-2021-25741] 等漏洞的影响非常重要, +其中 Pod 可能会读取主机中的任意文件。 +如果 Pod 和主机的 UID/GID 不重叠,则 Pod 的功能将受到限制: +Pod UID/GID 将与主机的文件所有者/组不匹配。 -请注意,这个建议对减轻 [CVE-2021-25741][CVE-2021-25741] 等 CVE 的影响很重要; -在这些 CVE 中,Pod 有可能读取主机中的任意文件。 -如果 Pod 和主机的 UID/GID 不重叠,Pod 能够做的事情就会受到限制: -Pod 的 UID/GID 不会与主机的文件所有者/组相匹配。 + +kubelet 可以对 Pod 的用户 ID 和组 ID 使用自定义范围。要配置自定义范围,节点需要具有: +* 系统中的用户 `kubelet`(此处不能使用任何其他用户名)。 +* 已安装二进制文件 `getsubids`([shadow-utils][shadow-utils] 的一部分)并位于 kubelet 二进制文件的 `PATH` 中。 +* `kubelet` 用户的从属 UID/GID 配置 + (请参阅 [`man 5 subuid`](https://man7.org/linux/man-pages/man5/subuid.5.html) 和 + [`man 5 subgid`](https://man7.org/linux/man-pages/man5/subgid.5.html)) + + +此设置仅收集 UID/GID 范围配置,不会更改执行 `kubelet` 的用户。 + +对于分配给 `kubelet` 用户的从属 ID 范围, 你必须遵循一些限制: + + +* 启动 Pod 的 UID 范围的从属用户 ID **必须**是 65536 的倍数,并且还必须大于或等于 65536。 + 换句话说,Pod 不能使用 0-65535 范围内的任何 ID;kubelet 施加此限制是为了使创建意外不安全的配置变得困难。 + + +* 从属 ID 计数必须是 65536 的倍数 + +* 从属 ID 计数必须至少为 `65536 x `,其中 `` 是节点上可以运行的最大 Pod 数量。 + +* 你必须为用户 ID 和组 ID 分配相同的范围。如果其他用户的用户 ID 范围与组 ID 范围不一致也没关系。 + + +* 所分配的范围不得与任何其他分配重叠。 + +* 从属配置必须只有一行。换句话说,你不能有多个范围。 + +例如,你可以定义 `/etc/subuid` 和 `/etc/subgid` 来为 `kubelet` 用户定义以下条目: + + +``` +# 格式为: +# name:firstID:count of IDs +# 在哪里: +# - firstID 是 65536 (可能的最小值) +# - IDs 的数量是 110(默认数量限制)* 65536 +kubelet:65536:7208960 +``` [CVE-2021-25741]: https://github.com/kubernetes/kubernetes/issues/104980 +[shadow-utils]: https://github.com/shadow-maint/shadow diff --git a/content/zh-cn/docs/concepts/workloads/pods/init-containers.md b/content/zh-cn/docs/concepts/workloads/pods/init-containers.md index 6102518d6d..3aed0b8ca7 100644 --- a/content/zh-cn/docs/concepts/workloads/pods/init-containers.md +++ b/content/zh-cn/docs/concepts/workloads/pods/init-containers.md @@ -575,13 +575,18 @@ for resource usage apply: 配额和限制适用于有效 Pod 的请求和限制值。 -Pod 级别的控制组(Cgroup)是基于 Pod 的有效 request 和 limit,与调度器相同。 + +### Init 容器和 Linux cgroup {#cgroups} + +在 Linux 上,Pod 级别的 CGroup 资源分配基于 Pod 的有效请求和限制值,与调度程序相同。 ## 使用 cgroup v2 的内存 QoS {#memory-qos-with-cgroup-v2} -{{< feature-state feature-gate-name="MemoryQoS" >}} +{{< feature-state feature_gate_name="MemoryQoS" >}} + + + +{{< feature-state feature_gate_name="StorageVersionMigrator" >}} + + +Kubernetes 依赖主动重写的 API 数据来支持与静态存储相关的一些维护活动。 +两个著名的例子是已存储资源的版本化模式(即针对给定资源的首选存储模式从 v1 更改为 v2) +和静态加密(即基于数据加密方式的变化来重写过时的数据)。 + +## {{% heading "prerequisites" %}} + + +安装 [`kubectl`](/zh-cn/docs/tasks/tools/#kubectl)。 + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + + + + +## 使用存储版本迁移来重新加密 Kubernetes Secret {#reencrypt-kubernetes-secrets-using-storage-version-migration} + +- 首先[配置 KMS 驱动](/zh-cn/docs/tasks/administer-cluster/kms-provider/), + 以便使用如下加密配置来加密 etcd 中的静态数据。 + + ```yaml + kind: EncryptionConfiguration + apiVersion: apiserver.config.k8s.io/v1 + resources: + - resources: + - secrets + providers: + - aescbc: + keys: + - name: key1 + secret: c2VjcmV0IGlzIHNlY3VyZQ== + ``` + + + 确保通过将 `--encryption-provider-config-automatic-reload` 设置为 true,允许自动重新加载加密配置文件。 + + +- 使用 kubectl 创建 Secret。 + + ```shell + kubectl create secret generic my-secret --from-literal=key1=supersecret + ``` + + +- [验证](/zh-cn/docs/tasks/administer-cluster/kms-provider/#verifying-that-the-data-is-encrypted)该 + Secret 对象的序列化数据带有前缀 `k8s:enc:aescbc:v1:key1`。 + +- 按照以下方式更新加密配置文件,以轮换加密密钥。 + + ```yaml + kind: EncryptionConfiguration + apiVersion: apiserver.config.k8s.io/v1 + resources: + - resources: + - secrets + providers: + - aescbc: + keys: + - name: key2 + secret: c2VjcmV0IGlzIHNlY3VyZSwgaXMgaXQ/ + - aescbc: + keys: + - name: key1 + secret: c2VjcmV0IGlzIHNlY3VyZQ== + ``` + + +- 要确保之前创建的 Secret `my-secert` 使用新密钥 `key2` 进行重新加密,你将使用**存储版本迁移**。 + +- 创建以下名为 `migrate-secret.yaml` 的 StorageVersionMigration 清单: + + ```yaml + kind: StorageVersionMigration + apiVersion: storagemigration.k8s.io/v1alpha1 + metadata: + name: secrets-migration + spec: + resource: + group: "" + version: v1 + resource: secrets + ``` + + + 使用以下 _kubectl_ 命令创建对象: + + ```shell + kubectl apply -f migrate-secret.yaml + ``` + + +- 通过检查 StorageVersionMigration 的 `.status` 来监控 Secret 的迁移。 + 成功的迁移应将其 `Succeeded` 状况设置为 true。 + 获取 StorageVersionMigration 对象的方式如下: + + ```shell + kubectl get storageversionmigration.storagemigration.k8s.io/secrets-migration -o yaml + ``` + + + 输出类似于: + + ```yaml + kind: StorageVersionMigration + apiVersion: storagemigration.k8s.io/v1alpha1 + metadata: + name: secrets-migration + uid: 628f6922-a9cb-4514-b076-12d3c178967c + resourceVersion: "90" + creationTimestamp: "2024-03-12T20:29:45Z" + spec: + resource: + group: "" + version: v1 + resource: secrets + status: + conditions: + - type: Running + status: "False" + lastUpdateTime: "2024-03-12T20:29:46Z" + reason: StorageVersionMigrationInProgress + - type: Succeeded + status: "True" + lastUpdateTime: "2024-03-12T20:29:46Z" + reason: StorageVersionMigrationSucceeded + resourceVersion: "84" + ``` + + +- [验证](/zh-cn/docs/tasks/administer-cluster/kms-provider/#verifying-that-the-data-is-encrypted)存储的 + Secret 现在带有前缀 `k8s:enc:aescbc:v1:key2`。 + +## 更新 CRD 的首选存储模式 {#update-the-preferred-storage-schema-of-a-crd} + + +考虑这样一种情况: +用户创建了 {{< glossary_tooltip term_id="CustomResourceDefinition" text="CustomResourceDefinition" >}} (CRD) +来提供自定义资源 (CR),并将其设置为首选的存储模式。 +当需要引入 CRD 的 v2 版本时,只需提供转换 Webhook 就可以为 v2 版本提供服务。 +基于转换 Webhook 的方式能够实现更平滑的过渡,用户可以使用 v1 或 v2 模式创建 CR,并通过合适的 Webhook 执行必要的模式转换。 +在将 v2 设置为首选的存储模式版本之前,重要的是要确保将当前已存储为 v1 的所有 CR 已被迁移到 v2。 +这种迁移可以通过使用**存储版本迁移**将所有 CR 从 v1 迁移到 v2 来达成。 + + +- 如下针对名为 `test-crd.yaml` 的 CRD 创建一个清单: + + ```yaml + apiVersion: apiextensions.k8s.io/v1 + kind: CustomResourceDefinition + metadata: + name: selfierequests.stable.example.com + spec: + group: stable.example.com + names: + plural: SelfieRequests + singular: SelfieRequest + kind: SelfieRequest + listKind: SelfieRequestList + scope: Namespaced + versions: + - name: v1 + served: true + storage: true + schema: + openAPIV3Schema: + type: object + properties: + hostPort: + type: string + conversion: + strategy: Webhook + webhook: + clientConfig: + url: https://127.0.0.1:9443/crdconvert + caBundle: + conversionReviewVersions: + - v1 + - v2 + ``` + + + 使用 kubectl 创建 CRD: + + ```shell + kubectl apply -f test-crd.yaml + ``` + + +- 为 testcrd 示例创建一个清单。命名为 `cr1.yaml` 并使用以下内容: + + ```yaml + apiVersion: stable.example.com/v1 + kind: SelfieRequest + metadata: + name: cr1 + namespace: default + ``` + + + 使用 kubectl 创建 CR: + + ```shell + kubectl apply -f cr1.yaml + ``` + + +- 通过从 etcd 获取对象来验证 CR 是否以 v1 格式被写入和存储。 + + ```shell + ETCDCTL_API=3 etcdctl get /kubernetes.io/stable.example.com/testcrds/default/cr1 [...] | hexdump -C + ``` + + + 其中 `[...]` 包含连接到 etcd 服务器的额外参数。 + + +- 如下更新 CRD `test-crd.yaml`,将 v2 版本设置为 served 和 storage,并将 v1 设置为仅 served: + + ```yaml + apiVersion: apiextensions.k8s.io/v1 + kind: CustomResourceDefinition + metadata: + name: selfierequests.stable.example.com + spec: + group: stable.example.com + names: + plural: SelfieRequests + singular: SelfieRequest + kind: SelfieRequest + listKind: SelfieRequestList + scope: Namespaced + versions: + - name: v2 + served: true + storage: true + schema: + openAPIV3Schema: + type: object + properties: + host: + type: string + port: + type: string + - name: v1 + served: true + storage: false + schema: + openAPIV3Schema: + type: object + properties: + hostPort: + type: string + conversion: + strategy: Webhook + webhook: + clientConfig: + url: "https://127.0.0.1:9443/crdconvert" + caBundle: + conversionReviewVersions: + - v1 + - v2 + ``` + + + 使用 kubectl 更新 CRD: + + ```shell + kubectl apply -f test-crd.yaml + ``` + + +- 如下创建名为 `cr2.yaml` 的 CR 资源文件: + + ```yaml + apiVersion: stable.example.com/v2 + kind: SelfieRequest + metadata: + name: cr2 + namespace: default + ``` + + +- 使用 kubectl 创建 CR: + + ```shell + kubectl apply -f cr2.yaml + ``` + + +- 通过从 etcd 获取对象来验证 CR 是否以 v2 格式被写入和存储。 + + ```shell + ETCDCTL_API=3 etcdctl get /kubernetes.io/stable.example.com/testcrds/default/cr2 [...] | hexdump -C + ``` + + + 其中 `[...]` 包含连接到 etcd 服务器的额外参数。 + + +- 如下创建名为 `migrate-crd.yaml` 的 StorageVersionMigration 清单: + + ```yaml + kind: StorageVersionMigration + apiVersion: storagemigration.k8s.io/v1alpha1 + metadata: + name: crdsvm + spec: + resource: + group: stable.example.com + version: v1 + resource: SelfieRequest + ``` + + + 使用如下 _kubectl_ 命令创建此对象: + + ```shell + kubectl apply -f migrate-crd.yaml + ``` + + +- 使用 status 监控 Secret 的迁移。 + 若迁移成功,应在 status 字段中将 `Succeeded` 状况设置为 "True"。 + 获取迁移资源的方式如下: + + ```shell + kubectl get storageversionmigration.storagemigration.k8s.io/crdsvm -o yaml + ``` + + + 输出类似于: + + ```yaml + kind: StorageVersionMigration + apiVersion: storagemigration.k8s.io/v1alpha1 + metadata: + name: crdsvm + uid: 13062fe4-32d7-47cc-9528-5067fa0c6ac8 + resourceVersion: "111" + creationTimestamp: "2024-03-12T22:40:01Z" + spec: + resource: + group: stable.example.com + version: v1 + resource: testcrds + status: + conditions: + - type: Running + status: "False" + lastUpdateTime: "2024-03-12T22:40:03Z" + reason: StorageVersionMigrationInProgress + - type: Succeeded + status: "True" + lastUpdateTime: "2024-03-12T22:40:03Z" + reason: StorageVersionMigrationSucceeded + resourceVersion: "106" + ``` + + +- 通过从 etcd 获取对象来验证之前创建的 cr1 是否现在以 v2 格式被写入和存储。 + + ```shell + ETCDCTL_API=3 etcdctl get /kubernetes.io/stable.example.com/testcrds/default/cr1 [...] | hexdump -C + ``` + + + 其中 `[...]` 包含连接到 etcd 服务器的额外参数。 From 96150eb449a36ba1f519c9acfb2c1e9dd62ca147 Mon Sep 17 00:00:00 2001 From: lbzs <627062293@qq.com> Date: Fri, 26 Apr 2024 11:04:03 +0800 Subject: [PATCH 0601/1086] [zh-cn] Localize docs/concepts/workloads/management.md --- .../docs/concepts/workloads/management.md | 795 ++++++++++++++++++ 1 file changed, 795 insertions(+) create mode 100644 content/zh-cn/docs/concepts/workloads/management.md diff --git a/content/zh-cn/docs/concepts/workloads/management.md b/content/zh-cn/docs/concepts/workloads/management.md new file mode 100644 index 0000000000..feabe6c39d --- /dev/null +++ b/content/zh-cn/docs/concepts/workloads/management.md @@ -0,0 +1,795 @@ +--- +title: 管理工作负载 +content_type: concept +weight: 40 +--- + + + + + +你已经部署了你的应用并且通过 Service 将其暴露出来。现在要做什么? +Kubernetes 提供了一系列的工具帮助你管理应用的部署,包括扩缩和更新。 + + + +## 组织资源配置 + +一些应用需要创建多个资源,例如 Deployment 和 Service。 +将多个资源归入同一个文件(在 YAML 中使用 `---` 分隔)可以简化对多个资源的管理。例如: + +{{% code_sample file="application/nginx-app.yaml" %}} + + +创建多个资源的方法与创建单个资源的方法相同: + +```shell +kubectl apply -f https://k8s.io/examples/application/nginx-app.yaml +``` + +```none +service/my-nginx-svc created +deployment.apps/my-nginx created +``` + + +资源会按照在清单中出现的顺序创建。 +因此,最好先指定 Service,这样可以确保调度器能在控制器(如 Deployment)创建 Pod 时对 +Service 相关的 Pod 作分布。 + + +`kubectl apply` 还可以接收多个 `-f` 参数: + +```shell +kubectl apply -f https://k8s.io/examples/application/nginx/nginx-svc.yaml \ + -f https://k8s.io/examples/application/nginx/nginx-deployment.yaml +``` + + + +建议将同一个微服务或应用相关的资源放到同一个文件中, +并将与应用相关的所有文件归类到同一目录中。 +如果应用各层使用 DNS 相互绑定,你可以同时部署工作栈中的所有组件。 + + + +URL 链接也可以被指定为配置源,这对于直接基于源码控制系统的清单进行部署来说非常方便: + +```shell +kubectl apply -f https://k8s.io/examples/application/nginx/nginx-deployment.yaml +``` + +```none +deployment.apps/my-nginx created +``` + + +如果你需要定义更多清单,例如添加一个 ConfigMap,你也可以这样做。 + + +### 外部工具 {#external-tools} + + +这一节列出了在 Kubernetes 中管理工作负载最常用的一些工具。 +如果想要查看完整的清单,参阅 {{< glossary_tooltip text="CNCF" term_id="cncf" >}} +文章 [Application definition and image build](https://landscape.cncf.io/guide#app-definition-and-development--application-definition-image-build)。 + +#### Helm {#external-tool-helm} + +{{% thirdparty-content single="true" %}} + + +[Helm](https://helm.sh/) 是一种管理预配置 Kubernetes 资源包的工具。这些资源包被称为 _Helm charts_。 + +#### Kustomize {#external-tool-kustomize} + + +[Kustomize](https://kustomize.io/) 遍历 Kubernetes 清单以添加、删除或更新配置选项。 +它既可以作为独立的二级制文件使用,也可以作为 kubectl 的[原生功能](/zh-cn/docs/tasks/manage-kubernetes-objects/kustomization/) 使用。 + + +## kubectl 中的批量操作 {#bulk-operations-in-kubectl} + + +资源创建并不是 `kubectl` 可以批量执行的唯一操作。 +它还能提取配置文件中的资源名称来执行其他操作,尤其是删除已经创建的相同资源: + +```shell +kubectl delete -f https://k8s.io/examples/application/nginx-app.yaml +``` + +```none +deployment.apps "my-nginx" deleted +service "my-nginx-svc" deleted +``` + + +如果有两个资源,你可以使用 resource/name 语法在命令行中指定这两个资源: + +```shell +kubectl delete deployments/my-nginx services/my-nginx-svc +``` + + +对于数量众多的资源,使用 `-l` 或 `--selector` 指定选择算符(标签查询)会更方便, +可以根据标签来过滤资源: + +```shell +kubectl delete deployment,services -l app=nginx +``` + +```none +deployment.apps "my-nginx" deleted +service "my-nginx-svc" deleted +``` + + +### 链式操作和过滤 {#chaining-and-filtering} + + +因为 `kubectl` 输出的资源名称与接收的语法相同,你可以使用 `$()` 或 `xargs` 进行链式操作: + +```shell +kubectl get $(kubectl create -f docs/concepts/cluster-administration/nginx/ -o name | grep service/ ) +kubectl create -f docs/concepts/cluster-administration/nginx/ -o name | grep service/ | xargs -i kubectl get '{}' +``` + + +输出类似这样: + +```none +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +my-nginx-svc LoadBalancer 10.0.0.208 80/TCP 0s +``` + + +使用上面的命令,首先会创建 `examples/application/nginx/` 目录下的资源, +然后使用 `-o name` 输出格式打印创建的资源(以 resource/name 格式打印)。 +然后 `grep` 筛选出 Service,再用 [`kubectl get`](/docs/reference/kubectl/generated/kubectl_get/) 打印。 + + +### 对本地文件的递归操作 {#recursive-operations-on-local-files} + + +如果你碰巧在一个特定目录下跨多个子目录中组织资源, +你也可以通过在指定 `--filename`/`-f` 的同时指定 `--recursive` 或 `-R` 参数对子目录执行递归操作。 + + +例如,假设有一个目录 `project/k8s/development` 包含了开发环境所需的所有{{< glossary_tooltip text="清单文件" term_id="manifest" >}}, +并按资源类型进行了分类: + +```none +project/k8s/development +├── configmap +│   └── my-configmap.yaml +├── deployment +│   └── my-deployment.yaml +└── pvc + └── my-pvc.yaml +``` + + +默认情况下,在 `project/k8s/development` 下执行批量操作会在目录的第一层终止,不会处理任何子目录。 +如果你在这个目录下使用如下命令尝试创建资源,会得到如下错误: + +```shell +kubectl apply -f project/k8s/development +``` + +```none +error: you must provide one or more resources by argument or filename (.json|.yaml|.yml|stdin) +``` + + +在命令行参数中与 `--filename`/`-f` 一起指定 `--recursive` 或 `-R`: + +```shell +kubectl apply -f project/k8s/development --recursive +``` + +```none +configmap/my-config created +deployment.apps/my-deployment created +persistentvolumeclaim/my-pvc created +``` + + +参数 `--recursive` 可以处理任何可以接收 `--filename`/`-f` 参数的操作, +例如: `kubectl create`、`kubectl get`、`kubectl delete`、`kubectl describe`,甚至是 `kubectl rollout`。 + +当指定了多个 `-f` 参数时,`--recursive` 仍然可以生效。 + +```shell +kubectl apply -f project/k8s/namespaces -f project/k8s/development --recursive +``` + +```none +namespace/development created +namespace/staging created +configmap/my-config created +deployment.apps/my-deployment created +persistentvolumeclaim/my-pvc created +``` + + +如果你对了解更多 `kubectl` 有兴趣,请阅读[命令行工具 (kubectl)](/zh-cn/docs/reference/kubectl/)。 + + +## 无中断更新应用 {#updating-your-application-without-an-outage} + + +有时候,你需要更新你所部署的应用,通常是指定新的镜像或镜像标签。 +`kubectl` 支持多种更新操作,每一种都适用于不同的场景。 + + +你可以运行应用的多个副本,并使用 **上线(rollout)** 操作将流量逐渐转移到新的健康 Pod 上。 +最终,所有正在运行的 Pod 都将拥有新的应用。 + + +本节将指导你如何使用 Deployment 创建和更新应用。 + + +假设你运行了 Nginx 1.14.2 版本。 + +```shell +kubectl create deployment my-nginx --image=nginx:1.14.2 +``` + +```none +deployment.apps/my-nginx created +``` + + +确保只有一个副本: + +```shell +kubectl scale --replicas 1 deployments/my-nginx --subresource='scale' --type='merge' -p '{"spec":{"replicas": 1}}' +``` + +```none +deployment.apps/my-nginx scaled +``` + + +允许 Kubernetes 在上线过程中添加更多的临时副本,方法是设置最大涨幅为 100%。 + +```shell +kubectl patch --type='merge' -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge": "100%" }}}}' +``` + +```none +deployment.apps/my-nginx patched +``` + + +要更新到版本 1.61.1,使用 `kubectl edit` 将 `.spec.template.spec.containers[0].image` +值从 `nginx:1.14.2` 修改为 `nginx:1.16.1`。 + +```shell +kubectl edit deployment/my-nginx +# 修改清单文件以使用新的容器镜像,然后保存你所作的更改 +``` + + +就是这样!Deployment 会逐步声明式地更新已部署的 Nginx 应用。 +它确保只有一定数量的旧副本会在更新时处于宕机状态, +并且超过所需的 Pod 数量的新副本个数在创建期间可控。 +要了解更多关于如何实现的详细信息,参照 [Deployment](/zh-cn/docs/concepts/workloads/controllers/deployment/)。 + + +你可以使用 DaemonSet、Deployment 或 StatefulSet 来完成上线。 + + +### 管理上线 {#managing-rollouts} + + +你可以使用 [`kubectl rollout`](/docs/reference/kubectl/generated/kubectl_rollout/) 管理现有应用的逐步更新。 + + +例如: + + +```shell +kubectl apply -f my-deployment.yaml + +# 等待上线完成 +kubectl rollout status deployment/my-deployment --timeout 10m # 超时时长为 10 分钟 +``` + + +或者 + + +```shell +kubectl apply -f backing-stateful-component.yaml + +# 不用等待上线完成,只需要检查状态 +kubectl rollout status statefulsets/backing-stateful-component --watch=false +``` + + +你也可以暂停、恢复或取消上线。 +参阅 [`kubectl rollout`](/docs/reference/kubectl/generated/kubectl_rollout/) 以深入了解。 + + +## 金丝雀部署 {#canary-deployments} + + + + +另一种需要使用多个标签的情况是区分部署的是同一组件的不同版本或不同配置。 +通常的做法是将新应用版本的 **金丝雀**(在 Pod 模板中的镜像标签中指定)与之前发布的版本并排部署, +这样新发布的版本可以在完全上线前接收实时生产流量。 + + + +例如,你可以使用 `track` 标签来区分不同的版本。 + +主版本、稳定版本会存在 `track` 标签,值为 `stable`。 + +```none +name: frontend +replicas: 3 +... +labels: + app: guestbook + tier: frontend + track: stable +... +image: gb-frontend:v3 +``` + + +然后你可以创建一个 guestbook 前端项目的新版本,该版本使用不同值的 `track` 标签(例如:`canary`), +这样两组 Pod 就不会重叠。 + +```none +name: frontend-canary +replicas: 1 +... +labels: + app: guestbook + tier: frontend + track: canary +... +image: gb-frontend:v4 +``` + + +这个前端服务将通过选择标签的相同子集(例如:忽略 `track` 标签)来覆盖两套副本, +这样,流量会被转发到两个应用: + +```yaml +selector: + app: guestbook + tier: frontend +``` + + +你可以调整稳定版本和金丝雀版本的副本数量, +以确定每个版本接收实时生产流量的比例(本例中为 3:1)。 +一旦有把握,你可以更新所有 track 标签为 stable 的应用为新版本并且移除金丝雀标签。 + + +## 更新注解 {#updating-annotations} + + +有时候你想要为资源附加注解。 +注解是任意的非标识性元数据,供 API 客户端例如工具或库检索。 +这可以通过 `kubectl annotate` 来完成。例如: + +```shell +kubectl annotate pods my-nginx-v4-9gw19 description='my frontend running nginx' +kubectl get pods my-nginx-v4-9gw19 -o yaml +``` + +```yaml +apiVersion: v1 +kind: pod +metadata: + annotations: + description: my frontend running nginx +... +``` + + +更多信息,参阅[注解](/zh-cn/docs/concepts/overview/working-with-objects/annotations/) +和 [kubectl annotate](/zh-cn/docs/reference/kubectl/generated/kubectl_annotate/)。 + + +## 扩缩应用 {#scaling-your-application} + + +当应用的负载增长或收缩时,使用 `kubectl` 扩缩你的应用。 +例如,将 Nginx 的副本数量从 3 减少到 1,这样做: + +```shell +kubectl scale deployment/my-nginx --replicas=1 +``` + +```none +deployment.apps/my-nginx scaled +``` + + +现在,你的 Deployment 只管理一个 Pod。 + +```shell +kubectl get pods -l app=nginx +``` + +```none +NAME READY STATUS RESTARTS AGE +my-nginx-2035384211-j5fhi 1/1 Running 0 30m +``` + + +为了让系统按需从 1 到 3 自动选择 Nginx 副本数量,这样做: + + +```shell +# 需要存在容器和 Pod 指标数据源 +kubectl autoscale deployment/my-nginx --min=1 --max=3 +``` + +```none +horizontalpodautoscaler.autoscaling/my-nginx autoscaled +``` + + +现在你的 Nginx 副本数量将会按需自动扩缩。 + + +更多信息请参阅文档 [kubectl scale](/docs/reference/kubectl/generated/kubectl_scale/), +[kubectl autoscale](/docs/reference/kubectl/generated/kubectl_autoscale/) 和 +[Pod 水平自动扩缩](/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/) 。 + + +## 就地更新资源 {#in-place-updates-of-resources} + + +有时需要对创建的资源进行小范围、非破坏性的更新。 + +### kubectl apply + + +建议参照 ([configuration as code](https://martinfowler.com/bliki/InfrastructureAsCode.html)), +在源码控制系统中维护配置文件集合, +这样它们就能与所配置资源的代码一起得到维护和版本控制。 +然后,你可以使用 [`kubectl apply`](/docs/reference/kubectl/generated/kubectl_apply/) +将配置集更新推送到集群中。 + + +这个命令会将你推送的配置的版本和之前的版本进行比较,并应用你所作的更改, +而不会覆盖任何你没有指定的属性。 + +```shell +kubectl apply -f https://k8s.io/examples/application/nginx/nginx-deployment.yaml +``` + +```none +deployment.apps/my-nginx configured +``` + + +要进一步了解底层原理,参阅[服务器端应用](/zh-cn/docs/reference/using-api/server-side-apply/)。 + +### kubectl edit + + +或者,你也可以使用 [`kubectl edit`](/docs/reference/kubectl/generated/kubectl_edit/) 来更新资源: + +```shell +kubectl edit deployment/my-nginx +``` + + +等价于先对资源进行 `get` 操作,在文本编辑器中进行编辑, +然后对更新后的版本进行 `apply` 操作: + + +```shell +kubectl get deployment my-nginx -o yaml > /tmp/nginx.yaml +vi /tmp/nginx.yaml +# 编辑,然后保存 + +kubectl apply -f /tmp/nginx.yaml +deployment.apps/my-nginx configured + +rm /tmp/nginx.yaml +``` + + +这样,你就可以轻松的进行更重要的修改。 +注意,你可以使用 `EDITOR` 或 `KUBE_EDITOR` 环境变量来指定编辑器。 + + +更多信息参阅 [kubectl edit](/docs/reference/kubectl/generated/kubectl_edit/)。 + +### kubectl patch + + +你可以使用 [`kubectl patch`](/docs/reference/kubectl/generated/kubectl_patch/) 来就地更新 API 对象。 +该子命令支持 JSON 补丁、JSON 合并补丁和策略合并补丁。 + + +参阅[使用 kubectl patch 更新 API 对象](/zh-cn/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch/) +获取更多细节。 + + +## 破坏性更新 {#disruptive-updates} + + +某些场景下,你可能需要更新那些一旦被初始化就无法被更新的资源字段, +或者希望立刻进行递归修改,例如修复被 Deployment 创建的异常 Pod。 +要更改此类字段,使用 `replace --force` 来删除并且重新创建资源。 +这种情况下,你可以修改原始配置文件。 + +```shell +kubectl replace -f https://k8s.io/examples/application/nginx/nginx-deployment.yaml --force +``` + +```none +deployment.apps/my-nginx deleted +deployment.apps/my-nginx replaced +``` + + +## {{% heading "whatsnext" %}} + + +进一步学习[如何调试运行中的 Pod](/zh-cn/docs/tasks/debug/debug-application/debug-running-pod/)。 From a6eacb62682c8c85ca7ea611a2df4453c5b703bf Mon Sep 17 00:00:00 2001 From: Junya Okabe <86868255+Okabe-Junya@users.noreply.github.com> Date: Mon, 6 May 2024 13:38:20 +0900 Subject: [PATCH 0602/1086] [ja] Translate `content/en/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md` into Japanese (#44839) * feat: translate network-plugin.md into Japanese * update: L11 Co-authored-by: inukai <82919057+t-inu@users.noreply.github.com> * update: L16 Co-authored-by: inukai <82919057+t-inu@users.noreply.github.com> * update: L14 Co-authored-by: inukai <82919057+t-inu@users.noreply.github.com> * update: L24 Co-authored-by: inukai <82919057+t-inu@users.noreply.github.com> * update: L102 Co-authored-by: inukai <82919057+t-inu@users.noreply.github.com> * update: L49 Co-authored-by: inukai <82919057+t-inu@users.noreply.github.com> * update: 60 Co-authored-by: inukai <82919057+t-inu@users.noreply.github.com> * update: network-plugins.md --------- Co-authored-by: inukai <82919057+t-inu@users.noreply.github.com> --- .../compute-storage-net/network-plugins.md | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 content/ja/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md diff --git a/content/ja/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md b/content/ja/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md new file mode 100644 index 0000000000..e222b871d7 --- /dev/null +++ b/content/ja/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md @@ -0,0 +1,143 @@ +--- +title: ネットワークプラグイン +content_type: concept +weight: 10 +--- + + + + +Kubernetes {{< skew currentVersion >}}は、クラスターネットワーキングのために[Container Network Interface](https://github.com/containernetworking/cni) (CNI)プラグインをサポートしています。 +クラスターと互換性があり、需要に合ったCNIプラグインを使用する必要があります。 +様々なプラグイン(オープンソースあるいはクローズドソース)が幅広いKubernetesエコシステムで利用可能です。 + +[Kubernetesネットワークモデル](/ja/docs/concepts/services-networking/#the-kubernetes-network-model)を実装するには、CNIプラグインが必要です。 + +[v0.4.0](https://github.com/containernetworking/cni/blob/spec-v0.4.0/SPEC.md)以降のCNI仕様のリリースと互換性のあるCNIプラグインを使用する必要があります。 +Kubernetesプロジェクトは、[v1.0.0](https://github.com/containernetworking/cni/blob/spec-v1.0.0/SPEC.md)のCNI仕様と互換性のあるプラグインの使用を推奨しています(プラグインは複数の仕様のバージョンに対応できます)。 + + + +## インストール + +ネットワーキングの文脈におけるコンテナランタイムは、ノード上のデーモンであり、kubelet向けのCRIサービスを提供するように設定されています。 +特に、コンテナランタイムは、Kubernetesネットワークモデルを実装するために必要なCNIプラグインを読み込むように設定する必要があります。 + +{{< note >}} +Kubernetes 1.24以前は、CNIプラグインは`cni-bin-dir`や`network-plugin`といったコマンドラインパラメーターを使用してkubeletによって管理することもできました。 +これらのコマンドラインパラメーターはKubernetes 1.24で削除され、CNIの管理はkubeletの範囲外となりました。 + +dockershimの削除に伴う問題に直面している場合は、[CNIプラグイン関連のエラーのトラブルシューティング](/docs/tasks/administer-cluster/migrating-from-dockershim/troubleshooting-cni-plugin-related-errors/)を参照してください。 +{{< /note >}} + +コンテナランタイムがCNIプラグインをどのように管理しているかについての具体的な情報については、そのコンテナランタイムのドキュメントを参照してください。 +例えば: + +- [containerd](https://github.com/containerd/containerd/blob/main/script/setup/install-cni) +- [CRI-O](https://github.com/cri-o/cri-o/blob/main/contrib/cni/README.md) + +CNIプラグインのインストールや管理方法についての具体的な情報については、そのプラグインまたは[ネットワーキングプロバイダー](/ja/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-network-model)のドキュメントを参照してください。 + +## ネットワークプラグインの要件 + + +### ループバックCNI + +Kubernetesネットワークモデルを実装するためにノードにインストールされたCNIプラグインに加えて、Kubernetesはコンテナランタイムにループバックインターフェース`lo`を提供することも要求します。 +これは各サンドボックス(Podサンドボックス、VMサンドボックスなど)に使用されます。 +ループバックインターフェースの実装は、[CNIループバックプラグイン](https://github.com/containernetworking/plugins/blob/master/plugins/main/loopback/loopback.go)を再利用するか、自分で実装することで達成できます(例: [CRI-Oを用いた例](https://github.com/cri-o/ocicni/blob/release-1.24/pkg/ocicni/util_linux.go#L91))。 + +### hostPortのサポート + +CNIネットワーキングプラグインは`hostPort`をサポートしています。 +CNIプラグインチームが提供する公式の[portmap](https://github.com/containernetworking/plugins/tree/master/plugins/meta/portmap)プラグインを使用するか、ポートマッピング(portMapping)機能を持つ独自のプラグインを使用できます。 + +`hostPort`サポートを有効にする場合、`cni-conf-dir`で`portMappings capability`を指定する必要があります。 +例: + +```json +{ + "name": "k8s-pod-network", + "cniVersion": "0.4.0", + "plugins": [ + { + "type": "calico", + "log_level": "info", + "datastore_type": "kubernetes", + "nodename": "127.0.0.1", + "ipam": { + "type": "host-local", + "subnet": "usePodCidr" + }, + "policy": { + "type": "k8s" + }, + "kubernetes": { + "kubeconfig": "/etc/cni/net.d/calico-kubeconfig" + } + }, + { + "type": "portmap", + "capabilities": {"portMappings": true}, + "externalSetMarkChain": "KUBE-MARK-MASQ" + } + ] +} +``` + +### トラフィックシェーピングのサポート + +**これは実験的な機能です** + +CNIネットワーキングプラグインは、Podの入出力トラフィックシェーピングにも対応しています。 +CNIプラグインチームが提供する公式の[bandwidth](https://github.com/containernetworking/plugins/tree/master/plugins/meta/bandwidth)プラグインを使用するか、帯域制御機能を持つ独自のプラグインを使用できます。 + +トラフィックシェーピングのサポートを有効にする場合、`bandwidth`プラグインをCNIの設定ファイル(デフォルトは`/etc/cni/net.d`)に追加し、バイナリがCNIのbinディレクトリ(デフォルトは`/opt/cni/bin`)に含まれていることを確認する必要があります。 + +```json +{ + "name": "k8s-pod-network", + "cniVersion": "0.4.0", + "plugins": [ + { + "type": "calico", + "log_level": "info", + "datastore_type": "kubernetes", + "nodename": "127.0.0.1", + "ipam": { + "type": "host-local", + "subnet": "usePodCidr" + }, + "policy": { + "type": "k8s" + }, + "kubernetes": { + "kubeconfig": "/etc/cni/net.d/calico-kubeconfig" + } + }, + { + "type": "bandwidth", + "capabilities": {"bandwidth": true} + } + ] +} +``` + +これでPodに`kubernetes.io/ingress-bandwidth`と`kubernetes.io/egress-bandwidth`のアノテーションを追加できます。 +例: + +```yaml +apiVersion: v1 +kind: Pod +metadata: + annotations: + kubernetes.io/ingress-bandwidth: 1M + kubernetes.io/egress-bandwidth: 1M +... +``` + +## {{% heading "whatsnext" %}} + +- [クラスターのネットワーク](/ja/docs/concepts/cluster-administration/networking/)についてさらに学ぶ +- [ネットワークポリシー](/ja/docs/concepts/services-networking/network-policies/)についてさらに学ぶ +- [CNIプラグインに関連するエラーのトラブルシューティング](/docs/tasks/administer-cluster/migrating-from-dockershim/troubleshooting-cni-plugin-related-errors/)について学ぶ From 198b0fe27760ea3d2d9bd0111ef85c1a3f977abb Mon Sep 17 00:00:00 2001 From: windsonsea Date: Mon, 6 May 2024 12:49:15 +0800 Subject: [PATCH 0603/1086] [zh] Sync command-line-tools-reference/kube-scheduler.md --- .../kube-scheduler.md | 276 +++++++++++------- 1 file changed, 172 insertions(+), 104 deletions(-) diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/kube-scheduler.md b/content/zh-cn/docs/reference/command-line-tools-reference/kube-scheduler.md index 518d5e9fa9..cdf3e43751 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/kube-scheduler.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/kube-scheduler.md @@ -59,6 +59,21 @@ The map from metric-label to value allow-list of this label. The key's format is + +--allow-metric-labels-manifest string + + + +

          + +包含允许列表映射的清单文件的路径。此文件的格式与 --allow-metric-labels 标志相同。 +请注意,--allow-metric-labels 标志将覆盖此清单文件。 +

          + + + --authentication-kubeconfig string @@ -160,18 +175,6 @@ The duration to cache 'unauthorized' responses from the webhook authorizer. - ---azure-container-registry-config string - - - - -包含 Azure 容器仓库配置信息的文件的路径。 - - - --bind-address string     默认值:0.0.0.0 @@ -257,48 +260,47 @@ This flag provides an escape hatch for misbehaving metrics. You must provide the +

          一组 key=value 对,描述了 alpha/experimental 特性门控开关。选项包括:
          -APIListChunking=true|false (BETA - 默认值为 true)
          -APIPriorityAndFairness=true|false (BETA - 默认值为 true)
          APIResponseCompression=true|false (BETA - 默认值为 true)
          APIServerIdentity=true|false (BETA - 默认值为 true)
          APIServerTracing=true|false (BETA - 默认值为 true)
          -AdmissionWebhookMatchConditions=true|false (BETA - 默认值为 true)
          -AggregatedDiscoveryEndpoint=true|false (BETA - 默认值为 true)
          +APIServingWithRoutine=true|false (BETA - 默认值为 true)
          AllAlpha=true|false (ALPHA - 默认值为 false)
          AllBeta=true|false (BETA - 默认值为 false)
          AnyVolumeDataSource=true|false (BETA - 默认值为 true)
          AppArmor=true|false (BETA - 默认值为 true)
          +AppArmorFields=true|false (BETA - 默认值为 true)
          CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值为 false)
          CPUManagerPolicyBetaOptions=true|false (BETA - 默认值为 true)
          CPUManagerPolicyOptions=true|false (BETA - 默认值为 true)
          -CRDValidationRatcheting=true|false (ALPHA - 默认值为 false)
          +CRDValidationRatcheting=true|false (BETA - 默认值为 true)
          CSIMigrationPortworx=true|false (BETA - 默认值为 false)
          -CSINodeExpandSecret=true|false (BETA - 默认值为 true)
          CSIVolumeHealth=true|false (ALPHA - 默认值为 false)
          CloudControllerManagerWebhook=true|false (ALPHA - 默认值为 false)
          -CloudDualStackNodeIPs=true|false (ALPHA - 默认值为 false)
          ClusterTrustBundle=true|false (ALPHA - 默认值为 false)
          +ClusterTrustBundleProjection=true|false (ALPHA - 默认值为 false)
          ComponentSLIs=true|false (BETA - 默认值为 true)
          ConsistentListFromCache=true|false (ALPHA - 默认值为 false)
          -ContainerCheckpoint=true|false (ALPHA - 默认值为 false)
          -ContextualLogging=true|false (ALPHA - 默认值为 false)
          +ContainerCheckpoint=true|false (BETA - 默认值为 true)
          +ContextualLogging=true|false (BETA - 默认值为 true)
          CronJobsScheduledAnnotation=true|false (BETA - 默认值为 true)
          CrossNamespaceVolumeDataSource=true|false (ALPHA - 默认值为 false)
          CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值为 false)
          -CustomResourceValidationExpressions=true|false (BETA - 默认值为 true)
          -DevicePluginCDIDevices=true|false (ALPHA - 默认值为 false)
          -DisableCloudProviders=true|false (ALPHA - 默认值为 false)
          -DisableKubeletCloudCredentialProviders=true|false (ALPHA - 默认值为 false)
          +CustomResourceFieldSelectors=true|false (ALPHA - 默认值为 false)
          +DevicePluginCDIDevices=true|false (BETA - 默认值为 true)
          +DisableCloudProviders=true|false (BETA - 默认值为 true)
          +DisableKubeletCloudCredentialProviders=true|false (BETA - 默认值为 true)
          +DisableNodeKubeProxyVersion=true|false (ALPHA - 默认值为 false)
          DynamicResourceAllocation=true|false (ALPHA - 默认值为 false)
          ElasticIndexedJob=true|false (BETA - 默认值为 true)
          -EventedPLEG=true|false (BETA - 默认值为 false)
          +EventedPLEG=true|false (ALPHA - 默认值为 false)
          GracefulNodeShutdown=true|false (BETA - 默认值为 true)
          GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值为 true)
          -HPAContainerMetrics=true|false (BETA - 默认值为 true)
          HPAScaleToZero=true|false (ALPHA - 默认值为 false)
          HonorPVReclaimPolicy=true|false (ALPHA - 默认值为 false)
          +ImageMaximumGCAge=true|false (BETA - 默认值为 true)
          InPlacePodVerticalScaling=true|false (ALPHA - 默认值为 false)
          InTreePluginAWSUnregister=true|false (ALPHA - 默认值为 false)
          InTreePluginAzureDiskUnregister=true|false (ALPHA - 默认值为 false)
          @@ -425,74 +441,91 @@ InTreePluginGCEUnregister=true|false (ALPHA - 默认值为 false)
          InTreePluginOpenStackUnregister=true|false (ALPHA - 默认值为 false)
          InTreePluginPortworxUnregister=true|false (ALPHA - 默认值为 false)
          InTreePluginvSphereUnregister=true|false (ALPHA - 默认值为 false)
          -JobBackoffLimitPerIndex=true|false (ALPHA - 默认值为 false)
          +InformerResourceVersion=true|false (ALPHA - 默认值为 false)
          +JobBackoffLimitPerIndex=true|false (BETA - 默认值为 true)
          +JobManagedBy=true|false (ALPHA - 默认值为 false)
          JobPodFailurePolicy=true|false (BETA - 默认值为 true)
          -JobPodReplacementPolicy=true|false (ALPHA - 默认值为 false)
          -JobReadyPods=true|false (BETA - 默认值为 true)
          -KMSv2=true|false (BETA - 默认值为 true)
          -KMSv2KDF=true|false (BETA - 默认值为 false)
          -KubeProxyDrainingTerminatingNodes=true|false (ALPHA - 默认值为 false)
          +JobPodReplacementPolicy=true|false (BETA - 默认值为 true)
          +JobSuccessPolicy=true|false (ALPHA - 默认值为 false)
          +KubeProxyDrainingTerminatingNodes=true|false (BETA - 默认值为 true)
          KubeletCgroupDriverFromCRI=true|false (ALPHA - 默认值为 false)
          KubeletInUserNamespace=true|false (ALPHA - 默认值为 false)
          KubeletPodResourcesDynamicResources=true|false (ALPHA - 默认值为 false)
          KubeletPodResourcesGet=true|false (ALPHA - 默认值为 false)
          +KubeletSeparateDiskGC=true|false (ALPHA - 默认值为 false)
          KubeletTracing=true|false (BETA - 默认值为 true)
          -LegacyServiceAccountTokenCleanUp=true|false (ALPHA - 默认值为 false)
          +LoadBalancerIPMode=true|false (BETA - 默认值为 true)
          LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值为 false)
          LogarithmicScaleDown=true|false (BETA - 默认值为 true)
          LoggingAlphaOptions=true|false (ALPHA - 默认值为 false)
          LoggingBetaOptions=true|false (BETA - 默认值为 true)
          +MatchLabelKeysInPodAffinity=true|false (ALPHA - 默认值为 false)
          MatchLabelKeysInPodTopologySpread=true|false (BETA - 默认值为 true)
          MaxUnavailableStatefulSet=true|false (ALPHA - 默认值为 false)
          MemoryManager=true|false (BETA - 默认值为 true)
          MemoryQoS=true|false (ALPHA - 默认值为 false)
          -MinDomainsInPodTopologySpread=true|false (BETA - 默认值为 true)
          -MultiCIDRRangeAllocator=true|false (ALPHA - 默认值为 false)
          MultiCIDRServiceAllocator=true|false (ALPHA - 默认值为 false)
          -NewVolumeManagerReconstruction=true|false (BETA - 默认值为 true)
          +MutatingAdmissionPolicy=true|false (ALPHA - 默认值为 false)
          +NFTablesProxyMode=true|false (ALPHA - 默认值为 false)
          NodeInclusionPolicyInPodTopologySpread=true|false (BETA - 默认值为 true)
          -NodeLogQuery=true|false (ALPHA - 默认值为 false)
          -NodeSwap=true|false (BETA - 默认值为 false)
          +NodeLogQuery=true|false (BETA - 默认值为 false)
          +NodeSwap=true|false (BETA - 默认值为 true)
          OpenAPIEnums=true|false (BETA - 默认值为 true)
          PDBUnhealthyPodEvictionPolicy=true|false (BETA - 默认值为 true)
          -PersistentVolumeLastPhaseTransitionTime=true|false (ALPHA - 默认值为 false)
          +PersistentVolumeLastPhaseTransitionTime=true|false (BETA - 默认值为 true)
          PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值为 false)
          PodDeletionCost=true|false (BETA - 默认值为 true)
          PodDisruptionConditions=true|false (BETA - 默认值为 true)
          -PodHostIPs=true|false (ALPHA - 默认值为 false)
          PodIndexLabel=true|false (BETA - 默认值为 true)
          -PodReadyToStartContainersCondition=true|false (ALPHA - 默认值为 false)
          -PodSchedulingReadiness=true|false (BETA - 默认值为 true)
          +PodLifecycleSleepAction=true|false (BETA - 默认值为 true)
          +PodReadyToStartContainersCondition=true|false (BETA - 默认值为 true)
          +PortForwardWebsockets=true|false (ALPHA - 默认值为 false)
          ProcMountType=true|false (ALPHA - 默认值为 false)
          QOSReserved=true|false (ALPHA - 默认值为 false)
          -ReadWriteOncePod=true|false (BETA - 默认值为 true)
          RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值为 false)
          -RemainingItemCount=true|false (BETA - 默认值为 true)
          +RecursiveReadOnlyMounts=true|false (ALPHA - 默认值为 false)
          +RelaxedEnvironmentVariableValidation=true|false (ALPHA - 默认值为 false)
          +RetryGenerateName=true|false (ALPHA - 默认值为 false)
          RotateKubeletServerCertificate=true|false (BETA - 默认值为 true)
          +RuntimeClassInImageCriApi=true|false (ALPHA - 默认值为 false)
          +SELinuxMount=true|false (ALPHA - 默认值为 false)
          SELinuxMountReadWriteOncePod=true|false (BETA - 默认值为 true)
          -SchedulerQueueingHints=true|false (BETA - 默认值为 true)
          -SecurityContextDeny=true|false (ALPHA - 默认值为 false)
          -ServiceNodePortStaticSubrange=true|false (BETA - 默认值为 true)
          -SidecarContainers=true|false (ALPHA - 默认值为 false)
          +SchedulerQueueingHints=true|false (BETA - 默认值为 false)
          +SeparateCacheWatchRPC=true|false (BETA - 默认值为 true)
          +SeparateTaintEvictionController=true|false (BETA - 默认值为 true)
          +ServiceAccountTokenJTI=true|false (BETA - 默认值为 true)
          +ServiceAccountTokenNodeBinding=true|false (ALPHA - 默认值为 false)
          +ServiceAccountTokenNodeBindingValidation=true|false (BETA - 默认值为 true)
          +ServiceAccountTokenPodNodeInfo=true|false (BETA - 默认值为 true)
          +ServiceTrafficDistribution=true|false (ALPHA - 默认值为 false)
          +SidecarContainers=true|false (BETA - 默认值为 true)
          SizeMemoryBackedVolumes=true|false (BETA - 默认值为 true)
          -SkipReadOnlyValidationGCE=true|false (ALPHA - 默认值为 false)
          -StableLoadBalancerNodeSet=true|false (BETA - 默认值为 true)
          StatefulSetAutoDeletePVC=true|false (BETA - 默认值为 true)
          StatefulSetStartOrdinal=true|false (BETA - 默认值为 true)
          +StorageNamespaceIndex=true|false (BETA - 默认值为 true)
          StorageVersionAPI=true|false (ALPHA - 默认值为 false)
          StorageVersionHash=true|false (BETA - 默认值为 true)
          +StorageVersionMigrator=true|false (ALPHA - 默认值为 false)
          +StructuredAuthenticationConfiguration=true|false (BETA - 默认值为 true)
          +StructuredAuthorizationConfiguration=true|false (BETA - 默认值为 true)
          TopologyAwareHints=true|false (BETA - 默认值为 true)
          TopologyManagerPolicyAlphaOptions=true|false (ALPHA - 默认值为 false)
          TopologyManagerPolicyBetaOptions=true|false (BETA - 默认值为 true)
          TopologyManagerPolicyOptions=true|false (BETA - 默认值为 true)
          +TranslateStreamCloseWebsocketRequests=true|false (BETA - 默认值为 true)
          +UnauthenticatedHTTP2DOSMitigation=true|false (BETA - 默认值为 true)
          UnknownVersionInteroperabilityProxy=true|false (ALPHA - 默认值为 false)
          -UserNamespacesSupport=true|false (ALPHA - 默认值为 false)
          -ValidatingAdmissionPolicy=true|false (BETA - 默认值为 false)
          +UserNamespacesPodSecurityStandards=true|false (ALPHA - 默认值为 false)
          +UserNamespacesSupport=true|false (BETA - 默认值为 false)
          +VolumeAttributesClass=true|false (ALPHA - 默认值为 false)
          VolumeCapacityPriority=true|false (ALPHA - 默认值为 false)
          +WatchFromStorageWithoutResourceVersion=true|false (BETA - 默认值为 false)
          WatchList=true|false (ALPHA - 默认值为 false)
          +WatchListClient=true|false (BETA - 默认值为 false)
          WinDSR=true|false (ALPHA - 默认值为 false)
          WinOverlay=true|false (BETA - 默认值为 true)
          WindowsHostNetwork=true|false (ALPHA - 默认值为 true) +

          @@ -673,6 +706,39 @@ Maximum number of seconds between log flushes + +--log-text-info-buffer-size quantity + + + +

          + +[Alpha] 在具有分割输出流的文本格式中,信息消息可以被缓冲一段时间以提高性能。 +默认值零字节表示禁用缓冲区机制。 +大小可以指定为字节数(512)、1000 的倍数(1K)、1024 的倍数(2Ki)或它们的幂(3M、4G、5Mi、6Gi)。 +启用 LoggingAlphaOptions 特性门控以使用此功能。 +

          + + + + +--log-text-split-stream + + + +

          + +[Alpha] 以文本格式,将错误消息写入 stderr,将信息消息写入 stdout。 +默认是将单个流写入标准输出。 +启用 LoggingAlphaOptions 特性门控以使用此功能。 +

          + + + --logging-format string     默认值:“text” @@ -745,12 +811,12 @@ If true, SO_REUSEPORT will be used when binding the port, which allows more than 已弃用:Pod 可以在 unschedulablePods 中停留的最长时间。 如果 Pod 在 unschedulablePods 中停留的时间超过此值,则该 pod 将被从 unschedulablePods 移动到 backoffQ 或 activeQ。 -此标志已弃用,将在 1.2 中删除。 +此标志已弃用,将在后续版本中移除。 @@ -885,17 +951,19 @@ File containing the default x509 Certificate for HTTPS. (CA cert, if any, concat -服务器的密码套件列表,以逗号分隔。如果省略,将使用默认的 Go 密码套件。 +服务器的密码套件列表,以逗号分隔。如果省略,将使用默认的 Go 密码套件。
          优先考虑的值: -TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384.
          +TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、 +TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、 +TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、 +TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256。
          不安全的值: -TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_RC4_128_SHA. +TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、 +TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、 +TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_128_GCM_SHA256、 +TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384、TLS_RSA_WITH_RC4_128_SHA。 From 6b2ebfb5e1032f983d082febed662f524ff57fb5 Mon Sep 17 00:00:00 2001 From: windsonsea Date: Mon, 6 May 2024 09:51:55 +0800 Subject: [PATCH 0604/1086] [zh] Sync command-line-tools-reference/kube-controller-manager.md --- .../kube-controller-manager.md | 317 ++++++++++++------ 1 file changed, 207 insertions(+), 110 deletions(-) diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/kube-controller-manager.md b/content/zh-cn/docs/reference/command-line-tools-reference/kube-controller-manager.md index 0bfba41b83..8f26e36a50 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/kube-controller-manager.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/kube-controller-manager.md @@ -64,6 +64,21 @@ metric2,label='v1,v2,v3'。 + +--allow-metric-labels-manifest string + + + +

          + +包含允许列表映射的清单文件的路径。此文件的格式与 --allow-metric-labels 标志相同。 +请注意,--allow-metric-labels 标志将覆盖此清单文件。 +

          + + + --attach-detach-reconcile-sync-period duration     默认值:1m0s @@ -182,18 +197,6 @@ The duration to cache 'unauthorized' responses from the webhook authorizer. - ---azure-container-registry-config string - - - - -指向包含 Azure 容器仓库配置信息的文件的路径名。 - - - --bind-address string     默认值:0.0.0.0 @@ -709,25 +712,32 @@ Interval between starting controller managers. +

          要启用的控制器列表。* 表示启用所有默认启用的控制器; foo 启用名为 foo 的控制器; -foo 表示禁用名为 foo 的控制器。
          控制器的全集:bootstrap-signer-controller、certificatesigningrequest-approving-controller、 certificatesigningrequest-cleaner-controller、certificatesigningrequest-signing-controller、 -cloud-node-lifecycle-controller、clusterrole-aggregation-controller、cronjob-controller、daemonset-controller、 -deployment-controller、disruption-controller、endpoints-controller、endpointslice-controller、 -endpointslice-mirroring-controller、ephemeral-volume-controller、garbage-collector-controller、 -horizontal-pod-autoscaler-controller、job-controller、namespace-controller、node-ipam-controller、 +cloud-node-lifecycle-controller、clusterrole-aggregation-controller、cronjob-controller、 +daemonset-controller、deployment-controller、disruption-controller、endpoints-controller、 +endpointslice-controller、endpointslice-mirroring-controller、ephemeral-volume-controller、 +garbage-collector-controller、horizontal-pod-autoscaler-controller、job-controller、 +legacy-serviceaccount-token-cleaner-controller、namespace-controller、node-ipam-controller、 node-lifecycle-controller、node-route-controller、persistentvolume-attach-detach-controller、 -persistentvolume-binder-controller、persistentvolume-expander-controller、persistentvolume-protection-controller、 -persistentvolumeclaim-protection-controller、pod-garbage-collector-controller、replicaset-controller、 -replicationcontroller-controller、resourcequota-controller、root-ca-certificate-publisher-controller、 -service-lb-controller、serviceaccount-controller、serviceaccount-token-controller、statefulset-controller、 -token-cleaner-controller、ttl-after-finished-controller、ttl-controller
          -默认禁用的控制器有:bootstrap-signer-controller、token-cleaner-controller。 +persistentvolume-binder-controller、persistentvolume-expander-controller、 +persistentvolume-protection-controller、persistentvolumeclaim-protection-controller、 +pod-garbage-collector-controller、replicaset-controller、replicationcontroller-controller、 +resourceclaim-controller、resourcequota-controller、root-ca-certificate-publisher-controller、 +service-cidr-controller、service-lb-controller、serviceaccount-controller、serviceaccount-token-controller、 +statefulset-controller、storage-version-migrator-controller、storageversion-garbage-collector-controller、 +taint-eviction-controller、token-cleaner-controller、ttl-after-finished-controller、ttl-controller、 +validatingadmissionpolicy-status-controller
          +默认禁用的控制器有: bootstrap-signer-controller、token-cleaner-controller。 +

          + @@ -743,6 +753,22 @@ Disable volume attach detach reconciler sync. Disabling this may cause volumes t + +--disable-force-detach-on-timeout + + + +

          + +基于最长卸载时间和节点状态防止强制解除挂接卷。 +如果将此标志设置为 true,则必须使用非体面节点关闭特性来从节点故障中恢复。 +参阅 https://k8s.io/zh-cn/docs/storage-disable-force-detach-on-timeout/ +

          + + + --disabled-metrics strings @@ -856,48 +882,47 @@ The plugin to use when cloud provider is set to external. Can be empty, should o +

          -

          一组 key=value 对,用来描述测试性/试验性功能的特性门控。可选项有:
          -APIListChunking=true|false (BETA - 默认值为 true)
          -APIPriorityAndFairness=true|false (BETA - 默认值为 true)
          APIResponseCompression=true|false (BETA - 默认值为 true)
          APIServerIdentity=true|false (BETA - 默认值为 true)
          APIServerTracing=true|false (BETA - 默认值为 true)
          -AdmissionWebhookMatchConditions=true|false (BETA - 默认值为 true)
          -AggregatedDiscoveryEndpoint=true|false (BETA - 默认值为 true)
          +APIServingWithRoutine=true|false (BETA - 默认值为 true)
          AllAlpha=true|false (ALPHA - 默认值为 false)
          AllBeta=true|false (BETA - 默认值为 false)
          AnyVolumeDataSource=true|false (BETA - 默认值为 true)
          AppArmor=true|false (BETA - 默认值为 true)
          +AppArmorFields=true|false (BETA - 默认值为 true)
          CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值为 false)
          CPUManagerPolicyBetaOptions=true|false (BETA - 默认值为 true)
          CPUManagerPolicyOptions=true|false (BETA - 默认值为 true)
          -CRDValidationRatcheting=true|false (ALPHA - 默认值为 false)
          +CRDValidationRatcheting=true|false (BETA - 默认值为 true)
          CSIMigrationPortworx=true|false (BETA - 默认值为 false)
          -CSINodeExpandSecret=true|false (BETA - 默认值为 true)
          CSIVolumeHealth=true|false (ALPHA - 默认值为 false)
          CloudControllerManagerWebhook=true|false (ALPHA - 默认值为 false)
          -CloudDualStackNodeIPs=true|false (ALPHA - 默认值为 false)
          ClusterTrustBundle=true|false (ALPHA - 默认值为 false)
          +ClusterTrustBundleProjection=true|false (ALPHA - 默认值为 false)
          ComponentSLIs=true|false (BETA - 默认值为 true)
          ConsistentListFromCache=true|false (ALPHA - 默认值为 false)
          -ContainerCheckpoint=true|false (ALPHA - 默认值为 false)
          -ContextualLogging=true|false (ALPHA - 默认值为 false)
          +ContainerCheckpoint=true|false (BETA - 默认值为 true)
          +ContextualLogging=true|false (BETA - 默认值为 true)
          CronJobsScheduledAnnotation=true|false (BETA - 默认值为 true)
          CrossNamespaceVolumeDataSource=true|false (ALPHA - 默认值为 false)
          CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值为 false)
          -CustomResourceValidationExpressions=true|false (BETA - 默认值为 true)
          -DevicePluginCDIDevices=true|false (ALPHA - 默认值为 false)
          -DisableCloudProviders=true|false (ALPHA - 默认值为 false)
          -DisableKubeletCloudCredentialProviders=true|false (ALPHA - 默认值为 false)
          +CustomResourceFieldSelectors=true|false (ALPHA - 默认值为 false)
          +DevicePluginCDIDevices=true|false (BETA - 默认值为 true)
          +DisableCloudProviders=true|false (BETA - 默认值为 true)
          +DisableKubeletCloudCredentialProviders=true|false (BETA - 默认值为 true)
          +DisableNodeKubeProxyVersion=true|false (ALPHA - 默认值为 false)
          DynamicResourceAllocation=true|false (ALPHA - 默认值为 false)
          ElasticIndexedJob=true|false (BETA - 默认值为 true)
          -EventedPLEG=true|false (BETA - 默认值为 false)
          +EventedPLEG=true|false (ALPHA - 默认值为 false)
          GracefulNodeShutdown=true|false (BETA - 默认值为 true)
          GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值为 true)
          -HPAContainerMetrics=true|false (BETA - 默认值为 true)
          HPAScaleToZero=true|false (ALPHA - 默认值为 false)
          HonorPVReclaimPolicy=true|false (ALPHA - 默认值为 false)
          +ImageMaximumGCAge=true|false (BETA - 默认值为 true)
          InPlacePodVerticalScaling=true|false (ALPHA - 默认值为 false)
          InTreePluginAWSUnregister=true|false (ALPHA - 默认值为 false)
          InTreePluginAzureDiskUnregister=true|false (ALPHA - 默认值为 false)
          @@ -1025,71 +1063,87 @@ InTreePluginGCEUnregister=true|false (ALPHA - 默认值为 false)
          InTreePluginOpenStackUnregister=true|false (ALPHA - 默认值为 false)
          InTreePluginPortworxUnregister=true|false (ALPHA - 默认值为 false)
          InTreePluginvSphereUnregister=true|false (ALPHA - 默认值为 false)
          -JobBackoffLimitPerIndex=true|false (ALPHA - 默认值为 false)
          +InformerResourceVersion=true|false (ALPHA - 默认值为 false)
          +JobBackoffLimitPerIndex=true|false (BETA - 默认值为 true)
          +JobManagedBy=true|false (ALPHA - 默认值为 false)
          JobPodFailurePolicy=true|false (BETA - 默认值为 true)
          -JobPodReplacementPolicy=true|false (ALPHA - 默认值为 false)
          -JobReadyPods=true|false (BETA - 默认值为 true)
          -KMSv2=true|false (BETA - 默认值为 true)
          -KMSv2KDF=true|false (BETA - 默认值为 false)
          -KubeProxyDrainingTerminatingNodes=true|false (ALPHA - 默认值为 false)
          +JobPodReplacementPolicy=true|false (BETA - 默认值为 true)
          +JobSuccessPolicy=true|false (ALPHA - 默认值为 false)
          +KubeProxyDrainingTerminatingNodes=true|false (BETA - 默认值为 true)
          KubeletCgroupDriverFromCRI=true|false (ALPHA - 默认值为 false)
          KubeletInUserNamespace=true|false (ALPHA - 默认值为 false)
          KubeletPodResourcesDynamicResources=true|false (ALPHA - 默认值为 false)
          KubeletPodResourcesGet=true|false (ALPHA - 默认值为 false)
          +KubeletSeparateDiskGC=true|false (ALPHA - 默认值为 false)
          KubeletTracing=true|false (BETA - 默认值为 true)
          -LegacyServiceAccountTokenCleanUp=true|false (ALPHA - 默认值为 false)
          +LoadBalancerIPMode=true|false (BETA - 默认值为 true)
          LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值为 false)
          LogarithmicScaleDown=true|false (BETA - 默认值为 true)
          LoggingAlphaOptions=true|false (ALPHA - 默认值为 false)
          LoggingBetaOptions=true|false (BETA - 默认值为 true)
          +MatchLabelKeysInPodAffinity=true|false (ALPHA - 默认值为 false)
          MatchLabelKeysInPodTopologySpread=true|false (BETA - 默认值为 true)
          MaxUnavailableStatefulSet=true|false (ALPHA - 默认值为 false)
          MemoryManager=true|false (BETA - 默认值为 true)
          MemoryQoS=true|false (ALPHA - 默认值为 false)
          -MinDomainsInPodTopologySpread=true|false (BETA - 默认值为 true)
          -MultiCIDRRangeAllocator=true|false (ALPHA - 默认值为 false)
          MultiCIDRServiceAllocator=true|false (ALPHA - 默认值为 false)
          -NewVolumeManagerReconstruction=true|false (BETA - 默认值为 true)
          +MutatingAdmissionPolicy=true|false (ALPHA - 默认值为 false)
          +NFTablesProxyMode=true|false (ALPHA - 默认值为 false)
          NodeInclusionPolicyInPodTopologySpread=true|false (BETA - 默认值为 true)
          -NodeLogQuery=true|false (ALPHA - 默认值为 false)
          -NodeSwap=true|false (BETA - 默认值为 false)
          +NodeLogQuery=true|false (BETA - 默认值为 false)
          +NodeSwap=true|false (BETA - 默认值为 true)
          OpenAPIEnums=true|false (BETA - 默认值为 true)
          PDBUnhealthyPodEvictionPolicy=true|false (BETA - 默认值为 true)
          -PersistentVolumeLastPhaseTransitionTime=true|false (ALPHA - 默认值为 false)
          +PersistentVolumeLastPhaseTransitionTime=true|false (BETA - 默认值为 true)
          PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值为 false)
          PodDeletionCost=true|false (BETA - 默认值为 true)
          PodDisruptionConditions=true|false (BETA - 默认值为 true)
          -PodHostIPs=true|false (ALPHA - 默认值为 false)
          PodIndexLabel=true|false (BETA - 默认值为 true)
          -PodReadyToStartContainersCondition=true|false (ALPHA - 默认值为 false)
          -PodSchedulingReadiness=true|false (BETA - 默认值为 true)
          +PodLifecycleSleepAction=true|false (BETA - 默认值为 true)
          +PodReadyToStartContainersCondition=true|false (BETA - 默认值为 true)
          +PortForwardWebsockets=true|false (ALPHA - 默认值为 false)
          ProcMountType=true|false (ALPHA - 默认值为 false)
          QOSReserved=true|false (ALPHA - 默认值为 false)
          -ReadWriteOncePod=true|false (BETA - 默认值为 true)
          RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值为 false)
          -RemainingItemCount=true|false (BETA - 默认值为 true)
          +RecursiveReadOnlyMounts=true|false (ALPHA - 默认值为 false)
          +RelaxedEnvironmentVariableValidation=true|false (ALPHA - 默认值为 false)
          +RetryGenerateName=true|false (ALPHA - 默认值为 false)
          RotateKubeletServerCertificate=true|false (BETA - 默认值为 true)
          +RuntimeClassInImageCriApi=true|false (ALPHA - 默认值为 false)
          +SELinuxMount=true|false (ALPHA - 默认值为 false)
          SELinuxMountReadWriteOncePod=true|false (BETA - 默认值为 true)
          -SchedulerQueueingHints=true|false (BETA - 默认值为 true)
          -SecurityContextDeny=true|false (ALPHA - 默认值为 false)
          -ServiceNodePortStaticSubrange=true|false (BETA - 默认值为 true)
          -SidecarContainers=true|false (ALPHA - 默认值为 false)
          +SchedulerQueueingHints=true|false (BETA - 默认值为 false)
          +SeparateCacheWatchRPC=true|false (BETA - 默认值为 true)
          +SeparateTaintEvictionController=true|false (BETA - 默认值为 true)
          +ServiceAccountTokenJTI=true|false (BETA - 默认值为 true)
          +ServiceAccountTokenNodeBinding=true|false (ALPHA - 默认值为 false)
          +ServiceAccountTokenNodeBindingValidation=true|false (BETA - 默认值为 true)
          +ServiceAccountTokenPodNodeInfo=true|false (BETA - 默认值为 true)
          +ServiceTrafficDistribution=true|false (ALPHA - 默认值为 false)
          +SidecarContainers=true|false (BETA - 默认值为 true)
          SizeMemoryBackedVolumes=true|false (BETA - 默认值为 true)
          -SkipReadOnlyValidationGCE=true|false (ALPHA - 默认值为 false)
          -StableLoadBalancerNodeSet=true|false (BETA - 默认值为 true)
          StatefulSetAutoDeletePVC=true|false (BETA - 默认值为 true)
          StatefulSetStartOrdinal=true|false (BETA - 默认值为 true)
          +StorageNamespaceIndex=true|false (BETA - 默认值为 true)
          StorageVersionAPI=true|false (ALPHA - 默认值为 false)
          StorageVersionHash=true|false (BETA - 默认值为 true)
          +StorageVersionMigrator=true|false (ALPHA - 默认值为 false)
          +StructuredAuthenticationConfiguration=true|false (BETA - 默认值为 true)
          +StructuredAuthorizationConfiguration=true|false (BETA - 默认值为 true)
          TopologyAwareHints=true|false (BETA - 默认值为 true)
          TopologyManagerPolicyAlphaOptions=true|false (ALPHA - 默认值为 false)
          TopologyManagerPolicyBetaOptions=true|false (BETA - 默认值为 true)
          TopologyManagerPolicyOptions=true|false (BETA - 默认值为 true)
          +TranslateStreamCloseWebsocketRequests=true|false (BETA - 默认值为 true)
          +UnauthenticatedHTTP2DOSMitigation=true|false (BETA - 默认值为 true)
          UnknownVersionInteroperabilityProxy=true|false (ALPHA - 默认值为 false)
          -UserNamespacesSupport=true|false (ALPHA - 默认值为 false)
          -ValidatingAdmissionPolicy=true|false (BETA - 默认值为 false)
          +UserNamespacesPodSecurityStandards=true|false (ALPHA - 默认值为 false)
          +UserNamespacesSupport=true|false (BETA - 默认值为 false)
          +VolumeAttributesClass=true|false (ALPHA - 默认值为 false)
          VolumeCapacityPriority=true|false (ALPHA - 默认值为 false)
          +WatchFromStorageWithoutResourceVersion=true|false (BETA - 默认值为 false)
          WatchList=true|false (ALPHA - 默认值为 false)
          +WatchListClient=true|false (BETA - 默认值为 false)
          WinDSR=true|false (ALPHA - 默认值为 false)
          WinOverlay=true|false (BETA - 默认值为 true)
          WindowsHostNetwork=true|false (ALPHA - 默认值为 true) @@ -1250,12 +1304,13 @@ Path to kubeconfig file with authorization and master location information. node-lifecycle-controller 在执行 Pod 驱逐操作逻辑时, 基于此标志所设置的节点个数阈值来判断所在集群是否为大规模集群。 当集群规模小于等于此规模时, --secondary-node-eviction-rate 会被隐式重设为 0。 +注意:如果节点位于多个区域中,则此阈值将被每个区域视为区域节点大小阈值,以独立确定节点驱逐率。 @@ -1392,6 +1447,39 @@ Maximum number of seconds between log flushes + +--log-text-info-buffer-size quantity + + + +

          + +[Alpha] 在具有分割输出流的文本格式中,信息消息可以被缓冲一段时间以提高性能。 +默认值零字节表示禁用缓冲区机制。 +大小可以指定为字节数(512)、1000 的倍数(1K)、1024 的倍数(2Ki)或它们的幂(3M、4G、5Mi、6Gi)。 +启用 LoggingAlphaOptions 特性门控以使用此功能。 +

          + + + + +--log-text-split-stream + + + +

          + +[Alpha] 以文本格式,将错误消息写入 stderr,将信息消息写入 stdout。 +默认是将单个流写入标准输出。 +启用 LoggingAlphaOptions 特性门控以使用此功能。 +

          + + + --logging-format string     默认值:"text" @@ -1922,12 +2010,21 @@ File containing the default x509 Certificate for HTTPS. (CA cert, if any, concat +

          供服务器使用的加密包的逗号分隔列表。若忽略此标志,则使用 Go 语言默认的加密包。
          -可选值包括:TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384。 -
          不安全的值: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_RC4_128_SHA。 +可选值包括:TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、 +TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、 +TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、 +TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、 +TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256。 +
          不安全的值:TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、 +TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、 +TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384、 +TLS_RSA_WITH_RC4_128_SHA。 +

          From 4b27ea7e8eab18ca4f7a95b9699751ddf5289f69 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sat, 4 May 2024 22:59:36 +0800 Subject: [PATCH 0605/1086] [zh-cn]sync services-networking/service Signed-off-by: xin.li --- .../concepts/services-networking/service.md | 119 ++++++++++++++++-- 1 file changed, 109 insertions(+), 10 deletions(-) diff --git a/content/zh-cn/docs/concepts/services-networking/service.md b/content/zh-cn/docs/concepts/services-networking/service.md index 1f21ca3536..1893b38848 100644 --- a/content/zh-cn/docs/concepts/services-networking/service.md +++ b/content/zh-cn/docs/concepts/services-networking/service.md @@ -1,5 +1,8 @@ --- title: 服务(Service) +api_metadata: +- apiVersion: "v1" + kind: "Service" feature: title: 服务发现与负载均衡 description: > @@ -14,6 +17,9 @@ weight: 10 reviewers: - bprashanth title: Service +api_metadata: +- apiVersion: "v1" + kind: "Service" feature: title: Service discovery and load balancing description: > @@ -199,7 +205,8 @@ spec: selector: app.kubernetes.io/name: MyApp ports: - - protocol: TCP + - name: http + protocol: TCP port: 80 targetPort: 9376 ``` @@ -386,8 +393,7 @@ metadata: kubernetes.io/service-name: my-service addressType: IPv4 ports: - - name: '' # empty because port 9376 is not assigned as a well-known - # port (by IANA) + - name: http # should match with the name of the service port defined above appProtocol: http protocol: TCP port: 9376 @@ -409,7 +415,7 @@ metadata: kubernetes.io/service-name: my-service addressType: IPv4 ports: - - name: '' # 留空,因为 port 9376 未被 IANA 分配为已注册端口 + - name: '' # 应与上面定义的服务端口的名称匹配 appProtocol: http protocol: TCP port: 9376 @@ -1095,6 +1101,25 @@ can define your own (provider specific) annotations on the Service that specify 或者你可以在 Service 上定义自己的(特定于提供商的)注解,以指定等效的细节。 {{< /note >}} + +#### 节点存活态对负载均衡器流量的影响 + +负载均衡器运行状态检查对于现代应用程序至关重要, +它们用于确定负载均衡器应将流量分派到哪个服务器(虚拟机或 IP 地址)。 +Kubernetes API 没有定义如何为 Kubernetes 托管负载均衡器实施运行状况检查, +而是由云提供商(以及集成代码的实现人员)决定其行为。 +负载均衡器运行状态检查广泛用于支持 Service 的 `externalTrafficPolicy` 字段。 + @@ -1200,14 +1225,14 @@ Unprefixed names are reserved for end-users. {{< feature-state feature_gate_name="LoadBalancerIPMode" >}} -这是从 Kubernetes 1.29 开始的一个 Alpha 级别特性,通过名为 `LoadBalancerIPMode` +作为 Kubernetes 1.30 中的 Beta 级别特性,通过名为 `LoadBalancerIPMode` 的[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)允许你为 `type` 为 `LoadBalancer` 的服务设置 `.status.loadBalancer.ingress.ipMode`。 `.status.loadBalancer.ingress.ipMode` 指定负载均衡器 IP 的行为方式。 @@ -1452,9 +1477,7 @@ You can use a headless Service to interface with other service discovery mechani without being tied to Kubernetes' implementation. For headless Services, a cluster IP is not allocated, kube-proxy does not handle -these Services, and there is no load balancing or proxying done by the platform -for them. How DNS is automatically configured depends on whether the Service has -selectors defined: +these Services, and there is no load balancing or proxying done by the platform for them. --> ## 无头服务(Headless Services) {#headless-services} @@ -1465,7 +1488,33 @@ selectors defined: 无头 Service 不会获得集群 IP,kube-proxy 不会处理这类 Service, 而且平台也不会为它们提供负载均衡或路由支持。 -取决于 Service 是否定义了选择算符,DNS 会以不同的方式被自动配置。 + + +无头 Service 允许客户端直接连接到它所偏好的任一 Pod。 +无头 Service 不使用[虚拟 IP 地址和代理](/zh-cn/docs/reference/networking/virtual-ips/) +配置路由和数据包转发;相反,无头 Service 通过内部 DNS 记录报告各个 +Pod 的端点 IP 地址,这些 DNS 记录是由集群的 +[DNS 服务](/zh-cn/docs/concepts/services-networking/dns-pod-service/)所提供的。 +这些 DNS 记录是由集群内部 DNS 服务所提供的 +要定义无头 Service,你需要将 `.spec.type` 设置为 ClusterIP(这也是 `type` +的默认值),并进一步将 `.spec.clusterIP` 设置为 `None`。 + + +字符串值 None 是一种特殊情况,与未设置 `.spec.clusterIP` 字段不同。 + +DNS 如何自动配置取决于 Service 是否定义了选择器: +### 流量分发 + + +`.spec.trafficDistribution` 字段提供了另一种影响 Kubernetes Service 内流量路由的方法。 +虽然流量策略侧重于严格的语义保证,但流量分发允许你表达一定的**偏好**(例如路由到拓扑上更接近的端点)。 +这一机制有助于优化性能、成本或可靠性。 +如果你为集群及其所有节点启用了 `ServiceTrafficDistribution` +[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/), +则可以使用此可选字段。 +Kubernetes {{< skew currentVersion >}} 支持以下字段值: + + +`PreferClose` +: 表示优先将流量路由到拓扑上最接近客户端的端点。 + “拓扑上邻近”的解释可能因实现而异,并且可能涵盖同一节点、机架、区域甚至区域内的端点。 + 设置此值允许实现进行不同的权衡,例如按距离优化而不是平均分配负载。 + 如果这种权衡不可接受,用户不应设置此值。 + + +如果未设置该字段,实现将应用其默认路由策略, +详见[流量分发](/zh-cn/docs/reference/networking/virtual-ips/#traffic-distribution)。 +
          From 724698d7931f373df0ffcb16b848fc82c37c957c Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Tue, 7 May 2024 00:36:28 +0100 Subject: [PATCH 0727/1086] Use right shade of blue Use the shade of blue specified in k/kubenetes. Per https://github.com/kubernetes/kubernetes/blob/1dc30bf/logo/colors.md the RGB blue color is #326CE5. Use that. --- assets/scss/_base.scss | 2 +- assets/scss/_custom.scss | 2 +- assets/scss/_skin.scss | 2 +- assets/scss/_variables_project.scss | 2 +- static/css/glossary.css | 2 +- static/css/style_apiref.css | 14 +++++++------- static/css/training.css | 6 +++--- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/assets/scss/_base.scss b/assets/scss/_base.scss index f187535fa5..64e84295ff 100644 --- a/assets/scss/_base.scss +++ b/assets/scss/_base.scss @@ -559,7 +559,7 @@ section#cncf { #desktopKCButton:hover{ background-color: #ffffff; - color: #3371e3; + color: #326ce5; transition: 150ms; } diff --git a/assets/scss/_custom.scss b/assets/scss/_custom.scss index 06f511a9f9..f58fa37831 100644 --- a/assets/scss/_custom.scss +++ b/assets/scss/_custom.scss @@ -728,7 +728,7 @@ body.cid-partners { line-height: 40px; color: #ffffff; font-size: 16px; - background-color: #3371e3; + background-color: #326ce5; text-decoration: none; } diff --git a/assets/scss/_skin.scss b/assets/scss/_skin.scss index 32c94b9dc5..d8b69d1218 100644 --- a/assets/scss/_skin.scss +++ b/assets/scss/_skin.scss @@ -1,4 +1,4 @@ -$blue: #3371e3; +$blue: #326ce5; $light-grey: #f7f7f7; $dark-grey: #303030; $medium-grey: #4c4c4c; diff --git a/assets/scss/_variables_project.scss b/assets/scss/_variables_project.scss index fd1dddd607..386881e9ff 100644 --- a/assets/scss/_variables_project.scss +++ b/assets/scss/_variables_project.scss @@ -12,7 +12,7 @@ Add styles or override variables from the theme here. */ @import "tablet"; @import "desktop"; -$primary: #3371e3; +$primary: #326ce5; // tooltip $tooltip-bg: #555; diff --git a/static/css/glossary.css b/static/css/glossary.css index fbe429b81b..0588575cc8 100644 --- a/static/css/glossary.css +++ b/static/css/glossary.css @@ -38,7 +38,7 @@ } .active-tag { - background-color: #3371e3; + background-color: #326ce5; } .invisible { diff --git a/static/css/style_apiref.css b/static/css/style_apiref.css index 635b625d91..60794a58d0 100644 --- a/static/css/style_apiref.css +++ b/static/css/style_apiref.css @@ -1,7 +1,7 @@ /* Kubernetes colors (assets/scss/_skin.scss) -$blue: #3371e3; +$blue: #326ce5; $light-grey: #f7f7f7; $dark-grey: #303030; $medium-grey: #4c4c4c; @@ -18,7 +18,7 @@ body > #wrapper { } a { - color: #3371e3; + color: #326ce5; } a:hover { @@ -122,7 +122,7 @@ code { } #navigation a:hover { - color: #3371e3; + color: #326ce5; text-decoration: none; } @@ -247,7 +247,7 @@ pre { } body.theme-auto #navigation a:hover { - color: #3371e3; + color: #326ce5; } body.theme-auto pre { @@ -256,7 +256,7 @@ pre { } body.theme-auto .alert a { - color: #3371e3; + color: #326ce5; } } @@ -309,7 +309,7 @@ body.theme-dark #navigation a.selected { } body.theme-dark #navigation a:hover { - color: #3371e3; + color: #326ce5; } body.theme-dark pre { @@ -318,5 +318,5 @@ body.theme-dark pre { } body.theme-dark .alert a { - color: #3371e3; + color: #326ce5; } diff --git a/static/css/training.css b/static/css/training.css index ddc2d1e29e..a15bcf4d52 100644 --- a/static/css/training.css +++ b/static/css/training.css @@ -12,7 +12,7 @@ body.cid-training body.cid-training .section { body.cid-training section.call-to-action { color: #ffffff; - background-color: #3371e3; + background-color: #326ce5; } body.cid-training section.call-to-action .main-section { @@ -226,7 +226,7 @@ body.cid-training .button { line-height: 40px; color: #ffffff; font-size: 16px; - background-color: #3371e3; + background-color: #326ce5; text-decoration: none; text-align: center; } @@ -254,7 +254,7 @@ body.cid-training .padded { } body.cid-training .blue-bg { - background-color: #3371e3; + background-color: #326ce5; } body.cid-training .lighter-gray-bg { From 14e613de427e849e5f02dc207897ddb67784519a Mon Sep 17 00:00:00 2001 From: windsonsea Date: Tue, 7 May 2024 11:49:10 +0800 Subject: [PATCH 0728/1086] Clean up kubeadm/implementation-details.md --- .../kubeadm/implementation-details.md | 131 +++++++++--------- 1 file changed, 65 insertions(+), 66 deletions(-) diff --git a/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md b/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md index 97494f69a5..aa60560afe 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md +++ b/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md @@ -66,7 +66,7 @@ in a majority of cases, and the most intuitive location; other constants paths a - `admin.conf` for the cluster admin and kubeadm itself - `super-admin.conf` for the cluster super-admin that can bypass RBAC -- Names of certificates and key files : +- Names of certificates and key files: - `ca.crt`, `ca.key` for the Kubernetes certificate authority - `apiserver.crt`, `apiserver.key` for the API server certificate @@ -93,29 +93,29 @@ Kubeadm executes a set of preflight checks before starting the init, with the ai preconditions and avoid common cluster startup problems. The user can skip specific preflight checks or all of them with the `--ignore-preflight-errors` option. -- [warning] If the Kubernetes version to use (specified with the `--kubernetes-version` flag) is +- [Warning] if the Kubernetes version to use (specified with the `--kubernetes-version` flag) is at least one minor version higher than the kubeadm CLI version. - Kubernetes system requirements: - if running on linux: - - [error] if Kernel is older than the minimum required version - - [error] if required cgroups subsystem aren't set up -- [error] if the CRI endpoint does not answer -- [error] if user is not root -- [error] if the machine hostname is not a valid DNS subdomain -- [warning] if the host name cannot be reached via network lookup -- [error] if kubelet version is lower that the minimum kubelet version supported by kubeadm (current minor -1) -- [error] if kubelet version is at least one minor higher than the required controlplane version (unsupported version skew) -- [warning] if kubelet service does not exist or if it is disabled -- [warning] if firewalld is active -- [error] if API server bindPort or ports 10250/10251/10252 are used + - [Error] if Kernel is older than the minimum required version + - [Error] if required cgroups subsystem aren't set up +- [Error] if the CRI endpoint does not answer +- [Error] if user is not root +- [Error] if the machine hostname is not a valid DNS subdomain +- [Warning] if the host name cannot be reached via network lookup +- [Error] if kubelet version is lower that the minimum kubelet version supported by kubeadm (current minor -1) +- [Error] if kubelet version is at least one minor higher than the required controlplane version (unsupported version skew) +- [Warning] if kubelet service does not exist or if it is disabled +- [Warning] if firewalld is active +- [Error] if API server bindPort or ports 10250/10251/10252 are used - [Error] if `/etc/kubernetes/manifest` folder already exists and it is not empty - [Error] if swap is on - [Error] if `conntrack`, `ip`, `iptables`, `mount`, `nsenter` commands are not present in the command path -- [warning] if `ebtables`, `ethtool`, `socat`, `tc`, `touch`, `crictl` commands are not present in the command path -- [warning] if extra arg flags for API server, controller manager, scheduler contains some invalid options -- [warning] if connection to https://API.AdvertiseAddress:API.BindPort goes through proxy -- [warning] if connection to services subnet goes through proxy (only first address checked) -- [warning] if connection to Pods subnet goes through proxy (only first address checked) +- [Warning] if `ebtables`, `ethtool`, `socat`, `tc`, `touch`, `crictl` commands are not present in the command path +- [Warning] if extra arg flags for API server, controller manager, scheduler contains some invalid options +- [Warning] if connection to https://API.AdvertiseAddress:API.BindPort goes through proxy +- [Warning] if connection to services subnet goes through proxy (only first address checked) +- [Warning] if connection to Pods subnet goes through proxy (only first address checked) - If external etcd is provided: - [Error] if etcd version is older than the minimum required version - [Error] if etcd certificates or keys are specified, but not provided @@ -127,11 +127,11 @@ The user can skip specific preflight checks or all of them with the `--ignore-pr - If authorization mode is WebHook - [Error] if webhook_authz.conf does not exist -Please note that: - -1. Preflight checks can be invoked individually with the - [`kubeadm init phase preflight`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-preflight) - command +{{< note >}} +Preflight checks can be invoked individually with the +[`kubeadm init phase preflight`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-preflight) +command. +{{< /note >}} ### Generate the necessary certificates @@ -146,7 +146,7 @@ Kubeadm generates certificate and private key pairs for different purposes: - The Kubernetes service's internal clusterIP (the first address in the services CIDR, e.g. `10.96.0.1` if service subnet is `10.96.0.0/12`) - - Kubernetes DNS names, e.g. `kubernetes.default.svc.cluster.local` if `--service-dns-domain` + - Kubernetes DNS names, e.g. `kubernetes.default.svc.cluster.local` if `--service-dns-domain` flag value is `cluster.local`, plus default DNS names `kubernetes.default.svc`, `kubernetes.default`, `kubernetes` - The node-name @@ -176,7 +176,7 @@ Please note that: `/etc/kubernetes/pki/ca.{crt,key}`, and then kubeadm will use those files for signing the rest of the certs. See also [using custom certificates](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs#custom-certificates) 1. Only for the CA, it is possible to provide the `ca.crt` file but not the `ca.key` file, if all other certificates and kubeconfig files - already are in place kubeadm recognize this condition and activates the ExternalCA , which also implies the `csrsigner`controller in + already are in place kubeadm recognize this condition and activates the ExternalCA, which also implies the `csrsigner`controller in controller-manager won't be started 1. If kubeadm is running in [external CA mode](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs#external-ca-mode); all the certificates must be provided by the user, because kubeadm cannot generate them by itself @@ -227,13 +227,13 @@ for additional information RBAC and built-in ClusterRoles and groups. Please note that: 1. `ca.crt` certificate is embedded in all the kubeconfig files. -2. If a given kubeconfig file exists, and its content is evaluated compliant with the above specs, +1. If a given kubeconfig file exists, and its content is evaluated compliant with the above specs, the existing file will be used and the generation phase for the given kubeconfig skipped -3. If kubeadm is running in [ExternalCA mode](/docs/reference/setup-tools/kubeadm/kubeadm-init/#external-ca-mode), +1. If kubeadm is running in [ExternalCA mode](/docs/reference/setup-tools/kubeadm/kubeadm-init/#external-ca-mode), all the required kubeconfig must be provided by the user as well, because kubeadm cannot generate any of them by itself -4. In case of kubeadm is executed in the `--dry-run` mode, kubeconfig files are written in a temporary folder -5. Kubeconfig files generation can be invoked individually with the +1. In case of kubeadm is executed in the `--dry-run` mode, kubeconfig files are written in a temporary folder +1. Kubeconfig files generation can be invoked individually with the [`kubeadm init phase kubeconfig all`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-kubeconfig) command ### Generate static Pod manifests for control plane components @@ -279,7 +279,7 @@ The static Pod manifest for the API server is affected by following parameters p (`etcd-cafile`, `etcd-certfile`, `etcd-keyfile`); if an external etcd server is not be provided, a local etcd will be used (via host network) - If a cloud provider is specified, the corresponding `--cloud-provider` is configured, together - with the `--cloud-config` path if such file exists (this is experimental, alpha and will be + with the `--cloud-config` path if such file exists (this is experimental, alpha and will be removed in a future version) Other API server flags that are set unconditionally are: @@ -321,7 +321,7 @@ Other API server flags that are set unconditionally are: - `--kubelet-client-certificate` to `apiserver-kubelet-client.crt` - `--kubelet-client-key` to `apiserver-kubelet-client.key` - `--service-account-key-file` to `sa.pub` - - `--requestheader-client-ca-file` to`front-proxy-ca.crt` + - `--requestheader-client-ca-file` to `front-proxy-ca.crt` - `--proxy-client-cert-file` to `front-proxy-client.crt` - `--proxy-client-key-file` to `front-proxy-client.key` @@ -346,14 +346,14 @@ the users: - `--cluster-cidr` and `--node-cidr-mask-size` flags according to the given CIDR - If a cloud provider is specified, the corresponding `--cloud-provider` is specified, together - with the `--cloud-config` path if such configuration file exists (this is experimental, alpha + with the `--cloud-config` path if such configuration file exists (this is experimental, alpha and will be removed in a future version) Other flags that are set unconditionally are: - `--controllers` enabling all the default controllers plus `BootstrapSigner` and `TokenCleaner` - controllers for TLS bootstrap. See [TLS Bootstrapping](/docs/reference/access-authn-authz/kubelet-tls-bootstrapping/) - for more details + controllers for TLS bootstrap. See [TLS Bootstrapping](/docs/reference/access-authn-authz/kubelet-tls-bootstrapping/) + for more details. - `--use-service-account-credentials` to `true` @@ -382,9 +382,9 @@ Please note that: 1. The etcd container image will be pulled from `registry.gcr.io` by default. See [using custom images](/docs/reference/setup-tools/kubeadm/kubeadm-init/#custom-images) for customizing the image repository. -2. If you run kubeadm in `--dry-run` mode, the etcd static Pod manifest is written +1. If you run kubeadm in `--dry-run` mode, the etcd static Pod manifest is written into a temporary folder. -3. You can directly invoke static Pod manifest generation for local etcd, using the +1. You can directly invoke static Pod manifest generation for local etcd, using the [`kubeadm init phase etcd local`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-etcd) command. @@ -431,7 +431,6 @@ Please note that: 1. Mark control-plane phase can be invoked individually with the command [`kubeadm init phase mark-control-plane`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-mark-control-plane) - ### Configure TLS-Bootstrapping for node joining Kubeadm uses [Authenticating with Bootstrap Tokens](/docs/reference/access-authn-authz/bootstrap-tokens/) @@ -442,12 +441,12 @@ for joining new nodes to an existing cluster; for more details see also following steps as well as setting API server and controller flags as already described in previous paragraphs. -Please note that: - -1. TLS bootstrapping for nodes can be configured with the command - [`kubeadm init phase bootstrap-token`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-bootstrap-token), - executing all the configuration steps described in following paragraphs; - alternatively, each step can be invoked individually +{{< note >}} +TLS bootstrapping for nodes can be configured with the command +[`kubeadm init phase bootstrap-token`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-bootstrap-token), +executing all the configuration steps described in following paragraphs; +alternatively, each step can be invoked individually. +{{< /note >}} #### Create a bootstrap token @@ -460,13 +459,13 @@ Please note that: 1. The default token created by `kubeadm init` will be used to validate temporary user during TLS bootstrap process; those users will be member of `system:bootstrappers:kubeadm:default-node-token` group -2. The token has a limited validity, default 24 hours (the interval may be changed with the `—token-ttl` flag) -3. Additional tokens can be created with the [`kubeadm token`](/docs/reference/setup-tools/kubeadm/kubeadm-token/) +1. The token has a limited validity, default 24 hours (the interval may be changed with the `—token-ttl` flag) +1. Additional tokens can be created with the [`kubeadm token`](/docs/reference/setup-tools/kubeadm/kubeadm-token/) command, that provide as well other useful functions for token management. #### Allow joining nodes to call CSR API -Kubeadm ensures that users in `system:bootstrappers:kubeadm:default-node-token` group are able to +Kubeadm ensures that users in `system:bootstrappers:kubeadm:default-node-token` group are able to access the certificate signing API. This is implemented by creating a ClusterRoleBinding named `kubeadm:kubelet-bootstrap` between the @@ -478,7 +477,7 @@ Kubeadm ensures that the Bootstrap Token will get its CSR request automatically csrapprover controller. This is implemented by creating ClusterRoleBinding named `kubeadm:node-autoapprove-bootstrap` -between the `system:bootstrappers:kubeadm:default-node-token` group and the default role +between the `system:bootstrappers:kubeadm:default-node-token` group and the default role `system:certificates.k8s.io:certificatesigningrequests:nodeclient`. The role `system:certificates.k8s.io:certificatesigningrequests:nodeclient` should be created as @@ -491,7 +490,7 @@ Kubeadm ensures that certificate rotation is enabled for nodes, and that new cer for nodes will get its CSR request automatically approved by the csrapprover controller. This is implemented by creating ClusterRoleBinding named -`kubeadm:node-autoapprove-certificate-rotation` between the `system:nodes` group and the default +`kubeadm:node-autoapprove-certificate-rotation` between the `system:nodes` group and the default role `system:certificates.k8s.io:certificatesigningrequests:selfnodeclient`. #### Create the public cluster-info ConfigMap @@ -501,21 +500,21 @@ This phase creates the `cluster-info` ConfigMap in the `kube-public` namespace. Additionally it creates a Role and a RoleBinding granting access to the ConfigMap for unauthenticated users (i.e. users in RBAC group `system:unauthenticated`). -Please note that: - -1. The access to the `cluster-info` ConfigMap _is not_ rate-limited. This may or may not be a - problem if you expose your cluster's API server to the internet; worst-case scenario here is a - DoS attack where an attacker uses all the in-flight requests the kube-apiserver can handle to - serving the `cluster-info` ConfigMap. +{{< note >}} +The access to the `cluster-info` ConfigMap _is not_ rate-limited. This may or may not be a +problem if you expose your cluster's API server to the internet; worst-case scenario here is a +DoS attack where an attacker uses all the in-flight requests the kube-apiserver can handle to +serving the `cluster-info` ConfigMap. +{{< /note >}} ### Install addons Kubeadm installs the internal DNS server and the kube-proxy addon components via the API server. -Please note that: - -1. This phase can be invoked individually with the command - [`kubeadm init phase addon all`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon). +{{< note >}} +This phase can be invoked individually with the command +[`kubeadm init phase addon all`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon). +{{< /note >}} #### proxy @@ -573,13 +572,13 @@ The second is to provide a file (that is a subset of the standard kubeconfig fil #### Shared token discovery If `kubeadm join` is invoked with `--discovery-token`, token discovery is used; in this case the -node basically retrieves the cluster CA certificates from the `cluster-info` ConfigMap in the +node basically retrieves the cluster CA certificates from the `cluster-info` ConfigMap in the `kube-public` namespace. In order to prevent "man in the middle" attacks, several steps are taken: - First, the CA certificate is retrieved via insecure connection (this is possible because - `kubeadm init` granted access to `cluster-info` users for `system:unauthenticated` ) + `kubeadm init` granted access to `cluster-info` users for `system:unauthenticated`) - Then the CA certificate goes trough following validation steps: @@ -591,10 +590,11 @@ In order to prevent "man in the middle" attacks, several steps are taken: - As a additional validation, the CA certificate is retrieved via secure connection and then compared with the CA retrieved initially -Please note that: +{{< note >}} -1. Pub key validation can be skipped passing `--discovery-token-unsafe-skip-ca-verification` flag; - This weakens the kubeadm security model since others can potentially impersonate the Kubernetes Master. +Pub key validation can be skipped passing `--discovery-token-unsafe-skip-ca-verification` flag; +This weakens the kubeadm security model since others can potentially impersonate the Kubernetes Master. +{{< /note >}} #### File/https discovery @@ -620,8 +620,7 @@ The request is then automatically approved and the operation completes saving `c `kubelet.conf` file to be used by kubelet for joining the cluster, while`bootstrap-kubelet.conf` is deleted. -Please note that: - +{{< note >}} - The temporary authentication is validated against the token saved during the `kubeadm init` process (or with additional tokens created with `kubeadm token`) - The temporary authentication resolve to a user member of @@ -629,4 +628,4 @@ Please note that: during the `kubeadm init` process - The automatic CSR approval is managed by the csrapprover controller, according with configuration done the `kubeadm init` process - +{{< /note >}} From 22ae25ada7aa6d6e52a33e94d662fa4a5cb0ae75 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 10:26:44 +0600 Subject: [PATCH 0729/1086] Create basic-example-binding.yaml --- .../basic-example-binding.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/validatingadmissionpolicy/basic-example-binding.yaml diff --git a/content/bn/examples/validatingadmissionpolicy/basic-example-binding.yaml b/content/bn/examples/validatingadmissionpolicy/basic-example-binding.yaml new file mode 100644 index 0000000000..9ad4c6a319 --- /dev/null +++ b/content/bn/examples/validatingadmissionpolicy/basic-example-binding.yaml @@ -0,0 +1,11 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicyBinding +metadata: + name: "demo-binding-test.example.com" +spec: + policyName: "demo-policy.example.com" + validationActions: [Deny] + matchResources: + namespaceSelector: + matchLabels: + environment: test From df6e08002b4dc5de1edc9b0591df022ce2c3afad Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 10:29:50 +0600 Subject: [PATCH 0730/1086] Create basic-example-policy.yaml --- .../basic-example-policy.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/validatingadmissionpolicy/basic-example-policy.yaml diff --git a/content/bn/examples/validatingadmissionpolicy/basic-example-policy.yaml b/content/bn/examples/validatingadmissionpolicy/basic-example-policy.yaml new file mode 100644 index 0000000000..7a5ee337f7 --- /dev/null +++ b/content/bn/examples/validatingadmissionpolicy/basic-example-policy.yaml @@ -0,0 +1,14 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicy +metadata: + name: "demo-policy.example.com" +spec: + failurePolicy: Fail + matchConstraints: + resourceRules: + - apiGroups: ["apps"] + apiVersions: ["v1"] + operations: ["CREATE", "UPDATE"] + resources: ["deployments"] + validations: + - expression: "object.spec.replicas <= 5" From cc8009436e8b143de24c28970ee7d2830c8ab0ec Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Mon, 6 May 2024 23:17:24 +0800 Subject: [PATCH 0731/1086] [zh-cn]sync container-lifecycle-hooks configure-redis-using-configmap Signed-off-by: xin.li --- .../docs/concepts/containers/container-lifecycle-hooks.md | 7 +++---- .../configuration/configure-redis-using-configmap.md | 4 ++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/content/zh-cn/docs/concepts/containers/container-lifecycle-hooks.md b/content/zh-cn/docs/concepts/containers/container-lifecycle-hooks.md index 0fa1872770..d356c736bc 100644 --- a/content/zh-cn/docs/concepts/containers/container-lifecycle-hooks.md +++ b/content/zh-cn/docs/concepts/containers/container-lifecycle-hooks.md @@ -98,16 +98,15 @@ There are three types of hook handlers that can be implemented for Containers: Resources consumed by the command are counted against the Container. * HTTP - Executes an HTTP request against a specific endpoint on the Container. * Sleep - Pauses the container for a specified duration. - The "Sleep" action is available when the [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) - `PodLifecycleSleepAction` is enabled. + This is a beta-level feature default enabled by the `PodLifecycleSleepAction` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/). --> * Exec - 在容器的 cgroups 和名字空间中执行特定的命令(例如 `pre-stop.sh`)。 命令所消耗的资源计入容器的资源消耗。 * HTTP - 对容器上的特定端点执行 HTTP 请求。 * Sleep - 将容器暂停一段指定的时间。 - 当[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/) `PodLifecycleSleepAction` 被启用时, - “Sleep” 操作才可用。 + 这是由 `PodLifecycleSleepAction` + [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)默认启用的 Beta 级特性。 @@ -357,5 +359,7 @@ kubectl delete pod/redis configmap/example-redis-config * 了解有关 [ConfigMap](/zh-cn/docs/tasks/configure-pod-container/configure-pod-configmap/) 的更多信息。 +* 学习[通过 ConfigMap 更新配置](/zh-cn/docs/tutorials/configuration/updating-configuration-via-a-configmap/)的示例。 From dd225e174dbdcf5af4d4821eb8daadc687ac32bb Mon Sep 17 00:00:00 2001 From: Aditya Samant Date: Tue, 7 May 2024 11:22:15 +0530 Subject: [PATCH 0732/1086] Improved the grammar and wording for the whole page. --- .../kubeadm/implementation-details.md | 131 ++++++++---------- 1 file changed, 61 insertions(+), 70 deletions(-) diff --git a/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md b/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md index aa60560afe..9fa9abd5c3 100644 --- a/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md +++ b/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md @@ -11,12 +11,12 @@ weight: 100 {{< feature-state for_k8s_version="v1.10" state="stable" >}} -`kubeadm init` and `kubeadm join` together provides a nice user experience for creating a -best-practice but bare Kubernetes cluster from scratch. +`kubeadm init` and `kubeadm join` together provide a nice user experience for creating a +bare Kubernetes cluster from scratch, that aligns with the best-practices. However, it might not be obvious _how_ kubeadm does that. -This document provides additional details on what happen under the hood, with the aim of sharing -knowledge on Kubernetes cluster best practices. +This document provides additional details on what happens under the hood, with the aim of sharing +knowledge on the best practices for a Kubernetes cluster. @@ -47,9 +47,9 @@ In order to reduce complexity and to simplify development of higher level tools limited set of constant values for well-known paths and file names. The Kubernetes directory `/etc/kubernetes` is a constant in the application, since it is clearly the given path -in a majority of cases, and the most intuitive location; other constants paths and file names are: +in a majority of cases, and the most intuitive location; other constant paths and file names are: -- `/etc/kubernetes/manifests` as the path where kubelet should look for static Pod manifests. +- `/etc/kubernetes/manifests` as the path where the kubelet should look for static Pod manifests. Names of static Pod manifests are: - `etcd.yaml` @@ -78,9 +78,8 @@ in a majority of cases, and the most intuitive location; other constants paths a ## kubeadm init workflow internal design -The `kubeadm init` [internal workflow](/docs/reference/setup-tools/kubeadm/kubeadm-init/#init-workflow) -consists of a sequence of atomic work tasks to perform, -as described in `kubeadm init`. +The `kubeadm init` consists of a sequence of atomic work tasks to perform, +as described in the `kubeadm init` [internal workflow](/docs/reference/setup-tools/kubeadm/kubeadm-init/#init-workflow). The [`kubeadm init phase`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/) command allows users to invoke each task individually, and ultimately offers a reusable and composable @@ -142,7 +141,7 @@ Kubeadm generates certificate and private key pairs for different purposes: - A serving certificate for the API server, generated using `ca.crt` as the CA, and saved into `apiserver.crt` file with its private key `apiserver.key`. This certificate should contain - following alternative names: + the following alternative names: - The Kubernetes service's internal clusterIP (the first address in the services CIDR, e.g. `10.96.0.1` if service subnet is `10.96.0.0/12`) @@ -163,7 +162,7 @@ Kubeadm generates certificate and private key pairs for different purposes: - A certificate authority for the front proxy saved into `front-proxy-ca.crt` file with its key `front-proxy-ca.key` -- A client cert for the front proxy client, generate using `front-proxy-ca.crt` as the CA and +- A client certificate for the front proxy client, generated using `front-proxy-ca.crt` as the CA and saved into `front-proxy-client.crt` file with its private key`front-proxy-client.key` Certificates are stored by default in `/etc/kubernetes/pki`, but this directory is configurable @@ -171,16 +170,16 @@ using the `--cert-dir` flag. Please note that: -1. If a given certificate and private key pair both exist, and its content is evaluated compliant with the above specs, the existing files will - be used and the generation phase for the given certificate skipped. This means the user can, for example, copy an existing CA to +1. If a given certificate and private key pair both exist, and their content is evaluated to be compliant with the above specs, the existing files will + be used and the generation phase for the given certificate will be skipped. This means the user can, for example, copy an existing CA to `/etc/kubernetes/pki/ca.{crt,key}`, and then kubeadm will use those files for signing the rest of the certs. See also [using custom certificates](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs#custom-certificates) -1. Only for the CA, it is possible to provide the `ca.crt` file but not the `ca.key` file, if all other certificates and kubeconfig files - already are in place kubeadm recognize this condition and activates the ExternalCA, which also implies the `csrsigner`controller in +1. For the CA, it is possible to provide the `ca.crt` file but not the `ca.key` file. If all other certificates and kubeconfig files + are already in place, kubeadm recognizes this condition and activates the ExternalCA, which also implies the `csrsigner` controller in controller-manager won't be started 1. If kubeadm is running in [external CA mode](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs#external-ca-mode); all the certificates must be provided by the user, because kubeadm cannot generate them by itself -1. In case of kubeadm is executed in the `--dry-run` mode, certificates files are written in a temporary folder +1. In case kubeadm is executed in the `--dry-run` mode, certificate files are written in a temporary folder 1. Certificate generation can be invoked individually with the [`kubeadm init phase certs all`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-certs) command @@ -189,23 +188,23 @@ Please note that: Kubeadm generates kubeconfig files with identities for control plane components: - A kubeconfig file for the kubelet to use during TLS bootstrap - - /etc/kubernetes/bootstrap-kubelet.conf. Inside this file there is a bootstrap-token or embedded + /etc/kubernetes/bootstrap-kubelet.conf. Inside this file, there is a bootstrap-token or embedded client certificates for authenticating this node with the cluster. - This client cert should: + This client certificate should: - Be in the `system:nodes` organization, as required by the [Node Authorization](/docs/reference/access-authn-authz/node/) module - Have the Common Name (CN) `system:node:` - A kubeconfig file for controller-manager, `/etc/kubernetes/controller-manager.conf`; inside this - file is embedded a client certificate with controller-manager identity. This client cert should + file is embedded a client certificate with controller-manager identity. This client certificate should have the CN `system:kube-controller-manager`, as defined by default [RBAC core components roles](/docs/reference/access-authn-authz/rbac/#core-component-roles) - A kubeconfig file for scheduler, `/etc/kubernetes/scheduler.conf`; inside this file is embedded a client certificate with scheduler identity. - This client cert should have the CN `system:kube-scheduler`, as defined by default + This client certificate should have the CN `system:kube-scheduler`, as defined by default [RBAC core components roles](/docs/reference/access-authn-authz/rbac/#core-component-roles) Additionally, a kubeconfig file for kubeadm as an administrative entity is generated and stored @@ -213,35 +212,35 @@ in `/etc/kubernetes/admin.conf`. This file includes a certificate with `Subject: O = kubeadm:cluster-admins, CN = kubernetes-admin`. `kubeadm:cluster-admins` is a group managed by kubeadm. It is bound to the `cluster-admin` ClusterRole during `kubeadm init`, by using the `super-admin.conf` file, which does not require RBAC. -This `admin.conf` file must remain on control plane nodes and not be shared with additional users. +This `admin.conf` file must remain on control plane nodes and should not be shared with additional users. During `kubeadm init` another kubeconfig file is generated and stored in `/etc/kubernetes/super-admin.conf`. This file includes a certificate with `Subject: O = system:masters, CN = kubernetes-super-admin`. -`system:masters` is a super user group that bypasses RBAC and makes `super-admin.conf` useful in case +`system:masters` is a superuser group that bypasses RBAC and makes `super-admin.conf` useful in case of an emergency where a cluster is locked due to RBAC misconfiguration. -The `super-admin.conf` file can be stored in a safe location and not shared with additional users. +The `super-admin.conf` file must be stored in a safe location and should not be shared with additional users. See [RBAC user facing role bindings](/docs/reference/access-authn-authz/rbac/#user-facing-roles) -for additional information RBAC and built-in ClusterRoles and groups. +for additional information on RBAC and built-in ClusterRoles and groups. Please note that: 1. `ca.crt` certificate is embedded in all the kubeconfig files. -1. If a given kubeconfig file exists, and its content is evaluated compliant with the above specs, - the existing file will be used and the generation phase for the given kubeconfig skipped +1. If a given kubeconfig file exists, and its content is evaluated as compliant with the above specs, + the existing file will be used and the generation phase for the given kubeconfig will be skipped 1. If kubeadm is running in [ExternalCA mode](/docs/reference/setup-tools/kubeadm/kubeadm-init/#external-ca-mode), all the required kubeconfig must be provided by the user as well, because kubeadm cannot generate any of them by itself -1. In case of kubeadm is executed in the `--dry-run` mode, kubeconfig files are written in a temporary folder -1. Kubeconfig files generation can be invoked individually with the +1. In case kubeadm is executed in the `--dry-run` mode, kubeconfig files are written in a temporary folder +1. Generation of kubeconfig files can be invoked individually with the [`kubeadm init phase kubeconfig all`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-kubeconfig) command ### Generate static Pod manifests for control plane components Kubeadm writes static Pod manifest files for control plane components to -`/etc/kubernetes/manifests`. The kubelet watches this directory for Pods to create on startup. +`/etc/kubernetes/manifests`. The kubelet watches this directory for Pods to be created on startup. -Static Pod manifest share a set of common properties: +Static Pod manifests share a set of common properties: - All static Pods are deployed on `kube-system` namespace - All static Pods get `tier:control-plane` and `component:{component-name}` labels @@ -249,8 +248,8 @@ Static Pod manifest share a set of common properties: - `hostNetwork: true` is set on all static Pods to allow control plane startup before a network is configured; as a consequence: - * The `address` that the controller-manager and the scheduler use to refer the API server is `127.0.0.1` - * If using a local etcd server, `etcd-servers` address will be set to `127.0.0.1:2379` + * The `address` that the controller-manager and the scheduler use to refer to the API server is `127.0.0.1` + * If the etcd server is set up locally, the `etcd-server` address will be set to `127.0.0.1:2379` - Leader election is enabled for both the controller-manager and the scheduler - Controller-manager and the scheduler will reference kubeconfig files with their respective, unique identities @@ -263,22 +262,22 @@ Please note that: 1. All images will be pulled from registry.k8s.io by default. See [using custom images](/docs/reference/setup-tools/kubeadm/kubeadm-init/#custom-images) for customizing the image repository -1. In case of kubeadm is executed in the `--dry-run` mode, static Pods files are written in a +1. In case kubeadm is executed in the `--dry-run` mode, static Pod files are written in a temporary folder 1. Static Pod manifest generation for control plane components can be invoked individually with the [`kubeadm init phase control-plane all`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-control-plane) command #### API server -The static Pod manifest for the API server is affected by following parameters provided by the users: +The static Pod manifest for the API server is affected by the following parameters provided by the users: - The `apiserver-advertise-address` and `apiserver-bind-port` to bind to; if not provided, those - value defaults to the IP address of the default network interface on the machine and port 6443 + values default to the IP address of the default network interface on the machine and port 6443 - The `service-cluster-ip-range` to use for services - If an external etcd server is specified, the `etcd-servers` address and related TLS settings (`etcd-cafile`, `etcd-certfile`, `etcd-keyfile`); - if an external etcd server is not be provided, a local etcd will be used (via host network) -- If a cloud provider is specified, the corresponding `--cloud-provider` is configured, together + if an external etcd server is not provided, a local etcd will be used (via host network) +- If a cloud provider is specified, the corresponding `--cloud-provider` parameter is configured together with the `--cloud-config` path if such file exists (this is experimental, alpha and will be removed in a future version) @@ -345,7 +344,7 @@ the users: - `--allocate-node-cidrs=true` - `--cluster-cidr` and `--node-cidr-mask-size` flags according to the given CIDR -- If a cloud provider is specified, the corresponding `--cloud-provider` is specified, together +- If a cloud provider is specified, the corresponding `--cloud-provider` is specified together with the `--cloud-config` path if such configuration file exists (this is experimental, alpha and will be removed in a future version) @@ -370,7 +369,7 @@ The static Pod manifest for the scheduler is not affected by parameters provided ### Generate static Pod manifest for local etcd -If you specified an external etcd this step will be skipped, otherwise kubeadm generates a +If you specified an external etcd, this step will be skipped, otherwise kubeadm generates a static Pod manifest file for creating a local etcd instance running in a Pod with following attributes: - listen on `localhost:2379` and use `HostNetwork=true` @@ -391,7 +390,7 @@ Please note that: ### Wait for the control plane to come up kubeadm waits (upto 4m0s) until `localhost:6443/healthz` (kube-apiserver liveness) returns `ok`. -However in order to detect deadlock conditions, kubeadm fails fast if `localhost:10255/healthz` +However, in order to detect deadlock conditions, kubeadm fails fast if `localhost:10255/healthz` (kubelet liveness) or `localhost:10255/healthz/syncloop` (kubelet readiness) don't return `ok` within 40s and 60s respectively. @@ -414,7 +413,7 @@ Please note that: ### Mark the node as control-plane -As soon as the control plane is available, kubeadm executes following actions: +As soon as the control plane is available, kubeadm executes the following actions: - Labels the node as control-plane with `node-role.kubernetes.io/control-plane=""` - Taints the node with `node-role.kubernetes.io/control-plane:NoSchedule` @@ -422,14 +421,6 @@ As soon as the control plane is available, kubeadm executes following actions: Please note that the phase to mark the control-plane phase can be invoked individually with the [`kubeadm init phase mark-control-plane`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-mark-control-plane) command. -- Taints the node with `node-role.kubernetes.io/master:NoSchedule` and - `node-role.kubernetes.io/control-plane:NoSchedule` - -Please note that: - -1. The `node-role.kubernetes.io/master` taint is deprecated and will be removed in kubeadm version 1.25 -1. Mark control-plane phase can be invoked individually with the command - [`kubeadm init phase mark-control-plane`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-mark-control-plane) ### Configure TLS-Bootstrapping for node joining @@ -450,9 +441,9 @@ alternatively, each step can be invoked individually. #### Create a bootstrap token -`kubeadm init` create a first bootstrap token, either generated automatically or provided by the +`kubeadm init` creates a first bootstrap token, either generated automatically or provided by the user with the `--token` flag; as documented in bootstrap token specification, token should be -saved as secrets with name `bootstrap-token-` under `kube-system` namespace. +saved as a secret with name `bootstrap-token-` under `kube-system` namespace. Please note that: @@ -461,7 +452,7 @@ Please note that: `system:bootstrappers:kubeadm:default-node-token` group 1. The token has a limited validity, default 24 hours (the interval may be changed with the `—token-ttl` flag) 1. Additional tokens can be created with the [`kubeadm token`](/docs/reference/setup-tools/kubeadm/kubeadm-token/) - command, that provide as well other useful functions for token management. + command, that provide other useful functions for token management as well. #### Allow joining nodes to call CSR API @@ -486,7 +477,7 @@ well, granting POST permission to #### Set up nodes certificate rotation with auto approval -Kubeadm ensures that certificate rotation is enabled for nodes, and that new certificate request +Kubeadm ensures that certificate rotation is enabled for nodes, and that a new certificate request for nodes will get its CSR request automatically approved by the csrapprover controller. This is implemented by creating ClusterRoleBinding named @@ -497,14 +488,14 @@ role `system:certificates.k8s.io:certificatesigningrequests:selfnodeclient`. This phase creates the `cluster-info` ConfigMap in the `kube-public` namespace. -Additionally it creates a Role and a RoleBinding granting access to the ConfigMap for +Additionally, it creates a Role and a RoleBinding granting access to the ConfigMap for unauthenticated users (i.e. users in RBAC group `system:unauthenticated`). {{< note >}} The access to the `cluster-info` ConfigMap _is not_ rate-limited. This may or may not be a problem if you expose your cluster's API server to the internet; worst-case scenario here is a DoS attack where an attacker uses all the in-flight requests the kube-apiserver can handle to -serving the `cluster-info` ConfigMap. +serve the `cluster-info` ConfigMap. {{< /note >}} ### Install addons @@ -529,7 +520,7 @@ deployed as a DaemonSet: - The CoreDNS service is named `kube-dns`. This is done to prevent any interruption in service when the user is switching the cluster DNS from kube-dns to CoreDNS - the `--config` method described [here](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon). + through the `--config` method described [here](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon). - A ServiceAccount for CoreDNS is created in the `kube-system` namespace. @@ -556,7 +547,7 @@ preconditions and avoid common cluster startup problems. Please note that: -1. `kubeadm join` preflight checks are basically a subset `kubeadm init` preflight checks +1. `kubeadm join` preflight checks are basically a subset of `kubeadm init` preflight checks 1. Starting from 1.24, kubeadm uses crictl to communicate to all known CRI endpoints. 1. Starting from 1.9, kubeadm provides support for joining nodes running on Windows; in that case, linux specific controls are skipped. @@ -578,16 +569,16 @@ node basically retrieves the cluster CA certificates from the `cluster-info` Con In order to prevent "man in the middle" attacks, several steps are taken: - First, the CA certificate is retrieved via insecure connection (this is possible because - `kubeadm init` granted access to `cluster-info` users for `system:unauthenticated`) + `kubeadm init` is granted access to `cluster-info` users for `system:unauthenticated`) -- Then the CA certificate goes trough following validation steps: +- Then the CA certificate goes through following validation steps: - Basic validation: using the token ID against a JWT signature - Pub key validation: using provided `--discovery-token-ca-cert-hash`. This value is available in the output of `kubeadm init` or can be calculated using standard tools (the hash is calculated over the bytes of the Subject Public Key Info (SPKI) object as in RFC7469). The `--discovery-token-ca-cert-hash flag` may be repeated multiple times to allow more than one public key. - - As a additional validation, the CA certificate is retrieved via secure connection and then + - As an additional validation, the CA certificate is retrieved via secure connection and then compared with the CA retrieved initially {{< note >}} @@ -602,30 +593,30 @@ If `kubeadm join` is invoked with `--discovery-file`, file discovery is used; th local file or downloaded via an HTTPS URL; in case of HTTPS, the host installed CA bundle is used to verify the connection. -With file discovery, the cluster CA certificates is provided into the file itself; in fact, the +With file discovery, the cluster CA certificate is provided into the file itself; in fact, the discovery file is a kubeconfig file with only `server` and `certificate-authority-data` attributes -set, as described in [`kubeadm join`](/docs/reference/setup-tools/kubeadm/kubeadm-join/#file-or-https-based-discovery) -reference doc; when the connection with the cluster is established, kubeadm try to access the +set, as described in the [`kubeadm join`](/docs/reference/setup-tools/kubeadm/kubeadm-join/#file-or-https-based-discovery) +reference doc; when the connection with the cluster is established, kubeadm tries to access the `cluster-info` ConfigMap, and if available, uses it. ## TLS Bootstrap -Once the cluster info are known, the file `bootstrap-kubelet.conf` is written, thus allowing +Once the cluster info is known, the file `bootstrap-kubelet.conf` is written, thus allowing kubelet to do TLS Bootstrapping. The TLS bootstrap mechanism uses the shared token to temporarily authenticate with the Kubernetes API server to submit a certificate signing request (CSR) for a locally created key pair. The request is then automatically approved and the operation completes saving `ca.crt` file and -`kubelet.conf` file to be used by kubelet for joining the cluster, while`bootstrap-kubelet.conf` +`kubelet.conf` file to be used by the kubelet for joining the cluster, while `bootstrap-kubelet.conf` is deleted. {{< note >}} - The temporary authentication is validated against the token saved during the `kubeadm init` - process (or with additional tokens created with `kubeadm token`) -- The temporary authentication resolve to a user member of - `system:bootstrappers:kubeadm:default-node-token` group which was granted access to CSR api + process (or with additional tokens created with `kubeadm token` command) +- The temporary authentication resolves to a user member of + `system:bootstrappers:kubeadm:default-node-token` group which was granted access to the CSR api during the `kubeadm init` process -- The automatic CSR approval is managed by the csrapprover controller, according with - configuration done the `kubeadm init` process +- The automatic CSR approval is managed by the csrapprover controller, according to + the configuration present in the `kubeadm init` process {{< /note >}} From 9638aa09f455ba594070477a5343cee5d37ee64a Mon Sep 17 00:00:00 2001 From: windsonsea Date: Tue, 7 May 2024 14:32:51 +0800 Subject: [PATCH 0733/1086] [zh] Sync setup-tools/kubeadm files --- .../kubeadm_certs_check-expiration.md | 53 +++++++++++++++ ..._init_phase_certs_apiserver-etcd-client.md | 5 -- .../kubeadm_init_phase_certs_apiserver.md | 5 -- .../kubeadm_init_phase_certs_etcd-peer.md | 5 -- .../kubeadm_init_phase_certs_etcd-server.md | 5 -- ...kubeadm_init_phase_certs_front-proxy-ca.md | 5 -- ...adm_init_phase_certs_front-proxy-client.md | 4 -- .../generated/kubeadm_init_phase_preflight.md | 19 ++++++ .../setup-tools/kubeadm/kubeadm-reset.md | 64 ++++++++++++++----- 9 files changed, 120 insertions(+), 45 deletions(-) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_check-expiration.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_check-expiration.md index 60c289a30c..8c0cfc3df9 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_check-expiration.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_check-expiration.md @@ -29,6 +29,25 @@ kubeadm certs check-expiration [flags] + + + +--allow-missing-template-keys     默认值:true + + + + +

          + +如果为 true,忽略模板中缺少某字段或映射键的错误。仅适用于 golang 和 jsonpath 输出格式。 +

          + + + +-o, --experimental-output string     默认值:"text" + + + + +

          + +输出格式。可选值为: +text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file。 +

          + + + -h, --help @@ -86,6 +125,20 @@ kubeadm certs check-expiration [flags] + +--show-managed-fields + + + +

          + +如果为 true,在以 JSON 或 YAML 格式打印对象时保留 managedFields。 +

          + + + diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-etcd-client.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-etcd-client.md index 98598d7e80..ee440d2e6d 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-etcd-client.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-etcd-client.md @@ -18,11 +18,6 @@ If both files already exist, kubeadm skips the generation step and existing file --> 如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。 - -Alpha 免责声明:此命令目前处于 Alpha 阶段。 - ``` kubeadm init phase certs apiserver-etcd-client [flags] ``` diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver.md index 03e3909656..35aa5f5897 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver.md @@ -18,11 +18,6 @@ If both files already exist, kubeadm skips the generation step and existing file --> 如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。 - -Alpha 免责声明:此命令目前处于 Alpha 阶段。 - ``` kubeadm init phase certs apiserver [flags] ``` diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-peer.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-peer.md index 4840c952be..d44aaf0f3f 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-peer.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-peer.md @@ -23,11 +23,6 @@ If both files already exist, kubeadm skips the generation step and existing file --> 如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。 - -Alpha 免责声明:此命令当前为 Alpha 功能。 - ``` kubeadm init phase certs etcd-peer [flags] ``` diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-server.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-server.md index 92ee010303..4e81bba018 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-server.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-server.md @@ -23,11 +23,6 @@ If both files already exist, kubeadm skips the generation step and existing file --> 如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。 - -Alpha 免责声明:此命令当前为 Alpha 功能。 - ``` kubeadm init phase certs etcd-server [flags] ``` diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-ca.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-ca.md index 916bf001f2..1246416eaf 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-ca.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-ca.md @@ -18,11 +18,6 @@ If both files already exist, kubeadm skips the generation step and existing file --> 如果两个文件都已存在,kubeadm 将跳过生成步骤并将使用现有文件。 - -Alpha 免责声明:此命令目前是 Alpha 阶段。 - ``` kubeadm init phase certs front-proxy-ca [flags] ``` diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-client.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-client.md index 7b313f46bf..169114222b 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-client.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-client.md @@ -12,15 +12,11 @@ Generate the certificate for the front proxy client Generate the certificate for the front proxy client, and save them into front-proxy-client.crt and front-proxy-client.key files. If both files already exist, kubeadm skips the generation step and existing files will be used. - -Alpha Disclaimer: this command is currently alpha. --> 为前端代理客户端生成证书,并将其保存到 front-proxy-client.crt 和 front-proxy-client.key 文件中。 如果两个文件都已存在,kubeadm 将跳过生成步骤并将使用现有文件。 -Alpha 免责声明:此命令目前是 Alpha 阶段。 - ``` kubeadm init phase certs front-proxy-client [flags] ``` diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_preflight.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_preflight.md index 4782f82b9c..f053439bf4 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_preflight.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_preflight.md @@ -116,6 +116,25 @@ A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedU + + + +--image-repository string     默认值:"registry.k8s.io" + + + + +

          + +选择拉取控制平面镜像的容器仓库。 +

          + + + diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-reset.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-reset.md index 5143c8f111..fb4657abaa 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-reset.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-reset.md @@ -3,61 +3,93 @@ title: kubeadm reset content_type: concept weight: 60 --- - +--> - + 该命令尽力还原由 `kubeadm init` 或 `kubeadm join` 所做的更改。 {{< include "generated/kubeadm_reset.md" >}} - + ### Reset 工作流程 {#reset-workflow} - `kubeadm reset` 负责从使用 `kubeadm init` 或 `kubeadm join` 命令创建的文件中清除节点本地文件系统。 对于控制平面节点,`reset` 还从 etcd 集群中删除该节点的本地 etcd Stacked 部署的成员。 - +the `kubeadm join` and `kubeadm init` phase runners. +--> `kubeadm reset phase` 可用于执行上述工作流程的各个阶段。 要跳过阶段列表,你可以使用 `--skip-phases` 参数,该参数的工作方式类似于 `kubeadm join` 和 `kubeadm init` 阶段运行器。 - + ### 外部 etcd 清理 - -如果使用了外部 etcd,`kubeadm reset` 将不会删除任何 etcd 中的数据。这意味着,如果再次使用相同的 etcd 端点运行 `kubeadm init`,你将看到先前集群的状态。 + +如果使用了外部 etcd,`kubeadm reset` 将不会删除任何 etcd 中的数据。 +这意味着,如果再次使用相同的 etcd 端点运行 `kubeadm init`,你将看到先前集群的状态。 - + 要清理 etcd 中的数据,建议你使用 etcdctl 这样的客户端,例如: ```bash etcdctl del "" --prefix ``` - + 更多详情请参考 [etcd 文档](https://github.com/coreos/etcd/tree/master/etcdctl)。 + +### 体面关闭 kube-apiserver + +如果你为 `kube-apiserver` 配置了 `--shutdown-delay-duration` 标志, +你可以在运行 `kubeadm reset` 之前,运行以下命令尝试体面关闭正在运行的 API 服务器 Pod: + +```bash +yq eval -i '.spec.containers[0].command = []' /etc/kubernetes/manifests/kube-apiserver.yaml +timeout 60 sh -c 'while pgrep kube-apiserver >/dev/null; do sleep 1; done' || true +``` ## {{% heading "whatsnext" %}} - + * 参考 [kubeadm init](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init/) 来初始化 Kubernetes 主节点。 * 参考 [kubeadm join](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-join/) 来初始化 Kubernetes 工作节点并加入集群。 - From cd6148bc97bb066bc4aa72ddfeb7ae06aeef722a Mon Sep 17 00:00:00 2001 From: Aditya Samant Date: Tue, 7 May 2024 13:50:32 +0530 Subject: [PATCH 0734/1086] Change the host for the ingress tutorial, to mitigate a security risk. --- .../ingress-minikube.md | 30 +++++++++---------- .../service/networking/example-ingress.yaml | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/content/en/docs/tasks/access-application-cluster/ingress-minikube.md b/content/en/docs/tasks/access-application-cluster/ingress-minikube.md index 4dd9882d18..ec1c231fa1 100644 --- a/content/en/docs/tasks/access-application-cluster/ingress-minikube.md +++ b/content/en/docs/tasks/access-application-cluster/ingress-minikube.md @@ -166,7 +166,7 @@ If you haven't already set up a cluster locally, run `minikube start` to create ## Create an Ingress The following manifest defines an Ingress that sends traffic to your Service via -`hello-world.info`. +`hello-world.example`. 1. Create `example-ingress.yaml` from the following file: @@ -197,8 +197,8 @@ The following manifest defines an Ingress that sends traffic to your Service via You should see an IPv4 address in the `ADDRESS` column; for example: ```none - NAME CLASS HOSTS ADDRESS PORTS AGE - example-ingress hello-world.info 172.17.0.15 80 38s + NAME CLASS HOSTS ADDRESS PORTS AGE + example-ingress nginx hello-world.example 172.17.0.15 80 38s ``` @@ -214,7 +214,7 @@ The following manifest defines an Ingress that sends traffic to your Service via {{% tab name="Linux" %}} ```shell - curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info + curl --resolve "hello-world.example:80:$( minikube ip )" -i http://hello-world.example ``` {{% /tab %}} {{% tab name="MacOS" %}} @@ -236,7 +236,7 @@ The following manifest defines an Ingress that sends traffic to your Service via From within a new terminal, invoke the following command: ```shell - curl --resolve "hello-world.info:80:127.0.0.1" -i http://hello-world.info + curl --resolve "hello-world.example:80:127.0.0.1" -i http://hello-world.example ``` {{% /tab %}} @@ -250,7 +250,7 @@ The following manifest defines an Ingress that sends traffic to your Service via Hostname: web-55b8c6998d-8k564 ``` -1. Optionally, you can also visit `hello-world.info` from your browser. +1. Optionally, you can also visit `hello-world.example` from your browser. Add a line to the bottom of the `/etc/hosts` file on your computer (you will need administrator access): @@ -264,7 +264,7 @@ The following manifest defines an Ingress that sends traffic to your Service via
          ```none - 172.17.0.15 hello-world.info + 172.17.0.15 hello-world.example ``` {{< note >}} @@ -273,7 +273,7 @@ The following manifest defines an Ingress that sends traffic to your Service via {{% /tab %}} {{% tab name="MacOS" %}} ```none - 127.0.0.1 hello-world.info + 127.0.0.1 hello-world.example ``` {{% /tab %}} {{< /tabs >}} @@ -281,7 +281,7 @@ The following manifest defines an Ingress that sends traffic to your Service via
          After you make this change, your web browser sends requests for - `hello-world.info` URLs to Minikube. + `hello-world.example` URLs to Minikube. ## Create a second Deployment @@ -356,7 +356,7 @@ The following manifest defines an Ingress that sends traffic to your Service via {{% tab name="Linux" %}} ```shell - curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info + curl --resolve "hello-world.example:80:$( minikube ip )" -i http://hello-world.example ``` {{% /tab %}} {{% tab name="MacOS" %}} @@ -378,7 +378,7 @@ The following manifest defines an Ingress that sends traffic to your Service via From within a new terminal, invoke the following command: ```shell - curl --resolve "hello-world.info:80:127.0.0.1" -i http://hello-world.info + curl --resolve "hello-world.example:80:127.0.0.1" -i http://hello-world.example ``` {{% /tab %}} @@ -399,7 +399,7 @@ The following manifest defines an Ingress that sends traffic to your Service via {{% tab name="Linux" %}} ```shell - curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info/v2 + curl --resolve "hello-world.example:80:$( minikube ip )" -i http://hello-world.example/v2 ``` {{% /tab %}} {{% tab name="MacOS" %}} @@ -421,7 +421,7 @@ The following manifest defines an Ingress that sends traffic to your Service via From within a new terminal, invoke the following command: ```shell - curl --resolve "hello-world.info:80:127.0.0.1" -i http://hello-world.info/v2 + curl --resolve "hello-world.example:80:127.0.0.1" -i http://hello-world.example/v2 ``` {{% /tab %}} @@ -436,8 +436,8 @@ The following manifest defines an Ingress that sends traffic to your Service via ``` {{< note >}} - If you did the optional step to update `/etc/hosts`, you can also visit `hello-world.info` and - `hello-world.info/v2` from your browser. + If you did the optional step to update `/etc/hosts`, you can also visit `hello-world.example` and + `hello-world.example/v2` from your browser. {{< /note >}} ## {{% heading "whatsnext" %}} diff --git a/content/en/examples/service/networking/example-ingress.yaml b/content/en/examples/service/networking/example-ingress.yaml index b309d13275..d4c41b7c80 100644 --- a/content/en/examples/service/networking/example-ingress.yaml +++ b/content/en/examples/service/networking/example-ingress.yaml @@ -6,7 +6,7 @@ metadata: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: rules: - - host: hello-world.info + - host: hello-world.example http: paths: - path: / From 29e769a104bf9c9042f39e46bc48a1bb2f390f5e Mon Sep 17 00:00:00 2001 From: divya-mohan0209 Date: Tue, 7 May 2024 16:58:23 +0530 Subject: [PATCH 0735/1086] Updating OWNERS_ALIASES with final changes --- OWNERS_ALIASES | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index 59adee7f59..241eb6948f 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -62,27 +62,19 @@ aliases: - tengqm - windsonsea sig-docs-es-owners: # Admins for Spanish content - - 92nqb - electrocucaracha - krol3 - - raelga - ramrodo sig-docs-es-reviews: # PR reviews for Spanish content - - 92nqb - electrocucaracha - jossemarGT - krol3 - - raelga - ramrodo sig-docs-fr-owners: # Admins for French content - - awkif - - feloy - perriea - rekcah78 - remyleone sig-docs-fr-reviews: # PR reviews for French content - - awkif - - feloy - perriea - rekcah78 - remyleone @@ -172,18 +164,14 @@ aliases: sig-docs-pt-owners: # Admins for Portuguese content - devlware - edsoncelio - - femrtnz - jcjesus - stormqueen1990 - - yagonobre sig-docs-pt-reviews: # PR reviews for Portugese content - devlware - edsoncelio - - femrtnz - jcjesus - mrerlison - stormqueen1990 - - yagonobre sig-docs-vi-owners: # Admins for Vietnamese content - huynguyennovem - truongnh1992 From cbca64baddefc05cf4121fb9702609c2e472776a Mon Sep 17 00:00:00 2001 From: Junya Okabe Date: Tue, 7 May 2024 21:51:06 +0900 Subject: [PATCH 0736/1086] update: l10n document --- content/ja/docs/contribute/localization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/ja/docs/contribute/localization.md b/content/ja/docs/contribute/localization.md index 649ae5065f..8148e0fe1a 100644 --- a/content/ja/docs/contribute/localization.md +++ b/content/ja/docs/contribute/localization.md @@ -76,7 +76,7 @@ card: Kubernetesのリソース名や技術用語などは、原則としてそのままの表記を使用します。 例えば、PodやService、Deploymentなどは翻訳せずにそのまま表記してください。 -ただし、ノード(Node)に関しては明確にKubernetesとしてのNodeリソース(例: `kind: Node`や`kubectl get nodes`)を指していないのであれば、「ノード」と表記してください。 +ただし、ノード(Node)に関してはKubernetesとしてのNodeリソース(例: `kind: Node`や`kubectl get nodes`、Nodeコントローラーなど)を指していないのであれば、「ノード」と表記してください。 またこれらの単語は、複数形ではなく単数形を用います。 例えば、原文に"pods"と表記されている場合でも、日本語訳では"Pod"と表記してください。 From 11de3781e63aa0f7f03f5ebc77ba4ed43f039a5f Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:08:02 +0600 Subject: [PATCH 0737/1086] Create binding-with-param-prod.yaml --- .../binding-with-param-prod.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/bn/examples/validatingadmissionpolicy/binding-with-param-prod.yaml diff --git a/content/bn/examples/validatingadmissionpolicy/binding-with-param-prod.yaml b/content/bn/examples/validatingadmissionpolicy/binding-with-param-prod.yaml new file mode 100644 index 0000000000..8fe48599dc --- /dev/null +++ b/content/bn/examples/validatingadmissionpolicy/binding-with-param-prod.yaml @@ -0,0 +1,17 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicyBinding +metadata: + name: "replicalimit-binding-nontest" +spec: + policyName: "replicalimit-policy.example.com" + validationActions: [Deny] + paramRef: + name: "replica-limit-prod.example.com" + namespace: "default" + matchResources: + namespaceSelector: + matchExpressions: + - key: environment + operator: NotIn + values: + - test From 3a6ac5dae1af3b1b1b78b61a273100b2cb97ecf2 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:08:42 +0600 Subject: [PATCH 0738/1086] Create binding-with-param.yaml --- .../binding-with-param.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/validatingadmissionpolicy/binding-with-param.yaml diff --git a/content/bn/examples/validatingadmissionpolicy/binding-with-param.yaml b/content/bn/examples/validatingadmissionpolicy/binding-with-param.yaml new file mode 100644 index 0000000000..0ff2a23aa9 --- /dev/null +++ b/content/bn/examples/validatingadmissionpolicy/binding-with-param.yaml @@ -0,0 +1,14 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicyBinding +metadata: + name: "replicalimit-binding-test.example.com" +spec: + policyName: "replicalimit-policy.example.com" + validationActions: [Deny] + paramRef: + name: "replica-limit-test.example.com" + namespace: "default" + matchResources: + namespaceSelector: + matchLabels: + environment: test From 66af2b9ac872d66f85a61d8439d8896768139162 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:09:16 +0600 Subject: [PATCH 0739/1086] Create failure-policy-ignore.yaml --- .../validatingadmissionpolicy/failure-policy-ignore.yaml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 content/bn/examples/validatingadmissionpolicy/failure-policy-ignore.yaml diff --git a/content/bn/examples/validatingadmissionpolicy/failure-policy-ignore.yaml b/content/bn/examples/validatingadmissionpolicy/failure-policy-ignore.yaml new file mode 100644 index 0000000000..9ea9cedc9f --- /dev/null +++ b/content/bn/examples/validatingadmissionpolicy/failure-policy-ignore.yaml @@ -0,0 +1,7 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicy +spec: +... +failurePolicy: Ignore # The default is "Fail" +validations: +- expression: "object.spec.xyz == params.x" From c26f87e309459210200f16fe47a05db267d41aad Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:09:55 +0600 Subject: [PATCH 0740/1086] Create policy-with-param.yaml --- .../policy-with-param.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 content/bn/examples/validatingadmissionpolicy/policy-with-param.yaml diff --git a/content/bn/examples/validatingadmissionpolicy/policy-with-param.yaml b/content/bn/examples/validatingadmissionpolicy/policy-with-param.yaml new file mode 100644 index 0000000000..30761efde9 --- /dev/null +++ b/content/bn/examples/validatingadmissionpolicy/policy-with-param.yaml @@ -0,0 +1,18 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicy +metadata: + name: "replicalimit-policy.example.com" +spec: + failurePolicy: Fail + paramKind: + apiVersion: rules.example.com/v1 + kind: ReplicaLimit + matchConstraints: + resourceRules: + - apiGroups: ["apps"] + apiVersions: ["v1"] + operations: ["CREATE", "UPDATE"] + resources: ["deployments"] + validations: + - expression: "object.spec.replicas <= params.maxReplicas" + reason: Invalid From cccd1ab661611434adcc970e34ab1d3c7c9c3204 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:10:36 +0600 Subject: [PATCH 0741/1086] Create replicalimit-param-prod.yaml --- .../validatingadmissionpolicy/replicalimit-param-prod.yaml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 content/bn/examples/validatingadmissionpolicy/replicalimit-param-prod.yaml diff --git a/content/bn/examples/validatingadmissionpolicy/replicalimit-param-prod.yaml b/content/bn/examples/validatingadmissionpolicy/replicalimit-param-prod.yaml new file mode 100644 index 0000000000..f829d2ed3d --- /dev/null +++ b/content/bn/examples/validatingadmissionpolicy/replicalimit-param-prod.yaml @@ -0,0 +1,5 @@ +apiVersion: rules.example.com/v1 +kind: ReplicaLimit +metadata: + name: "replica-limit-prod.example.com" +maxReplicas: 100 From 08ee833fb67d253a01cf6233dcb0aa041f76460e Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:11:12 +0600 Subject: [PATCH 0742/1086] Create replicalimit-param.yaml --- .../validatingadmissionpolicy/replicalimit-param.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 content/bn/examples/validatingadmissionpolicy/replicalimit-param.yaml diff --git a/content/bn/examples/validatingadmissionpolicy/replicalimit-param.yaml b/content/bn/examples/validatingadmissionpolicy/replicalimit-param.yaml new file mode 100644 index 0000000000..9d8ceee220 --- /dev/null +++ b/content/bn/examples/validatingadmissionpolicy/replicalimit-param.yaml @@ -0,0 +1,6 @@ +apiVersion: rules.example.com/v1 +kind: ReplicaLimit +metadata: + name: "replica-limit-test.example.com" + namespace: "default" +maxReplicas: 3 From a697a60d5a39a0b7825d3c3c0c5b9224f09d164e Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:11:48 +0600 Subject: [PATCH 0743/1086] Create typechecking-multiple-match.yaml --- .../typechecking-multiple-match.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 content/bn/examples/validatingadmissionpolicy/typechecking-multiple-match.yaml diff --git a/content/bn/examples/validatingadmissionpolicy/typechecking-multiple-match.yaml b/content/bn/examples/validatingadmissionpolicy/typechecking-multiple-match.yaml new file mode 100644 index 0000000000..4d5c693856 --- /dev/null +++ b/content/bn/examples/validatingadmissionpolicy/typechecking-multiple-match.yaml @@ -0,0 +1,15 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicy +metadata: + name: "replica-policy.example.com" +spec: + matchConstraints: + resourceRules: + - apiGroups: ["apps"] + apiVersions: ["v1"] + operations: ["CREATE", "UPDATE"] + resources: ["deployments","replicasets"] + validations: + - expression: "object.replicas > 1" # should be "object.spec.replicas > 1" + message: "must be replicated" + reason: Invalid From d4f68d3cb263fc93db9a9d11be42e730482c66bf Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:12:27 +0600 Subject: [PATCH 0744/1086] Create typechecking.yaml --- .../validatingadmissionpolicy/typechecking.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 content/bn/examples/validatingadmissionpolicy/typechecking.yaml diff --git a/content/bn/examples/validatingadmissionpolicy/typechecking.yaml b/content/bn/examples/validatingadmissionpolicy/typechecking.yaml new file mode 100644 index 0000000000..a44fdc3089 --- /dev/null +++ b/content/bn/examples/validatingadmissionpolicy/typechecking.yaml @@ -0,0 +1,15 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingAdmissionPolicy +metadata: + name: "deploy-replica-policy.example.com" +spec: + matchConstraints: + resourceRules: + - apiGroups: ["apps"] + apiVersions: ["v1"] + operations: ["CREATE", "UPDATE"] + resources: ["deployments"] + validations: + - expression: "object.replicas > 1" # should be "object.spec.replicas > 1" + message: "must be replicated" + reason: Invalid From 5c6fbc4d0512bb0291685e88e534b14534b3f91e Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:13:31 +0600 Subject: [PATCH 0745/1086] Create configmap-pod.yaml --- .../bn/examples/windows/configmap-pod.yaml | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 content/bn/examples/windows/configmap-pod.yaml diff --git a/content/bn/examples/windows/configmap-pod.yaml b/content/bn/examples/windows/configmap-pod.yaml new file mode 100644 index 0000000000..d472afa05c --- /dev/null +++ b/content/bn/examples/windows/configmap-pod.yaml @@ -0,0 +1,31 @@ +kind: ConfigMap +apiVersion: v1 +metadata: + name: example-config +data: + example.property.1: hello + example.property.2: world + +--- + +apiVersion: v1 +kind: Pod +metadata: + name: configmap-pod +spec: + containers: + - name: configmap-redis + image: redis:3.0-nanoserver + env: + - name: EXAMPLE_PROPERTY_1 + valueFrom: + configMapKeyRef: + name: example-config + key: example.property.1 + - name: EXAMPLE_PROPERTY_2 + valueFrom: + configMapKeyRef: + name: example-config + key: example.property.2 + nodeSelector: + kubernetes.io/os: windows From 793ce40e3df7df787ade7f7919e9df8ff2c8399d Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:13:52 +0600 Subject: [PATCH 0746/1086] Create daemonset.yaml --- content/bn/examples/windows/daemonset.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 content/bn/examples/windows/daemonset.yaml diff --git a/content/bn/examples/windows/daemonset.yaml b/content/bn/examples/windows/daemonset.yaml new file mode 100644 index 0000000000..b4549be2b0 --- /dev/null +++ b/content/bn/examples/windows/daemonset.yaml @@ -0,0 +1,20 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: my-daemonset + labels: + app: foo +spec: + selector: + matchLabels: + app: foo + template: + metadata: + labels: + app: foo + spec: + containers: + - name: foo + image: microsoft/windowsservercore:1709 + nodeSelector: + kubernetes.io/os: windows From c8efff56392bddfb8b37bd97aefe352c17b3a1c4 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:14:15 +0600 Subject: [PATCH 0747/1086] Create deploy-hyperv.yaml --- .../bn/examples/windows/deploy-hyperv.yaml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 content/bn/examples/windows/deploy-hyperv.yaml diff --git a/content/bn/examples/windows/deploy-hyperv.yaml b/content/bn/examples/windows/deploy-hyperv.yaml new file mode 100644 index 0000000000..bb86f3a708 --- /dev/null +++ b/content/bn/examples/windows/deploy-hyperv.yaml @@ -0,0 +1,21 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: iis +spec: + selector: + matchLabels: + app: iis + replicas: 3 + template: + metadata: + labels: + app: iis + annotations: + experimental.windows.kubernetes.io/isolation-type: hyperv + spec: + containers: + - name: iis + image: microsoft/iis + ports: + - containerPort: 80 From 09574182fd2090a33e530403e2eea7a28996f170 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:14:38 +0600 Subject: [PATCH 0748/1086] Create deploy-resource.yaml --- .../bn/examples/windows/deploy-resource.yaml | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 content/bn/examples/windows/deploy-resource.yaml diff --git a/content/bn/examples/windows/deploy-resource.yaml b/content/bn/examples/windows/deploy-resource.yaml new file mode 100644 index 0000000000..55a83b5126 --- /dev/null +++ b/content/bn/examples/windows/deploy-resource.yaml @@ -0,0 +1,23 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: iis +spec: + replicas: 3 + selector: + matchLabels: + app: iis + template: + metadata: + labels: + app: iis + spec: + containers: + - name: iis + image: microsoft/iis + resources: + limits: + memory: "128Mi" + cpu: 2 + ports: + - containerPort: 80 From eeb0ab54d87103b76b9dce92732e6bf658cb4ce0 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:15:04 +0600 Subject: [PATCH 0749/1086] Create emptydir-pod.yaml --- content/bn/examples/windows/emptydir-pod.yaml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 content/bn/examples/windows/emptydir-pod.yaml diff --git a/content/bn/examples/windows/emptydir-pod.yaml b/content/bn/examples/windows/emptydir-pod.yaml new file mode 100644 index 0000000000..08d8091391 --- /dev/null +++ b/content/bn/examples/windows/emptydir-pod.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Pod +metadata: + name: my-empty-dir-pod +spec: + containers: + - image: microsoft/windowsservercore:1709 + name: my-empty-dir-pod + volumeMounts: + - mountPath: /cache + name: cache-volume + - mountPath: C:/scratch + name: scratch-volume + volumes: + - name: cache-volume + emptyDir: {} + - name: scratch-volume + emptyDir: {} + nodeSelector: + kubernetes.io/os: windows From 9e1aa324c9dc582356689078e1ad0755d7c4191c Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:15:29 +0600 Subject: [PATCH 0750/1086] Create hostpath-volume-pod.yaml --- .../examples/windows/hostpath-volume-pod.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 content/bn/examples/windows/hostpath-volume-pod.yaml diff --git a/content/bn/examples/windows/hostpath-volume-pod.yaml b/content/bn/examples/windows/hostpath-volume-pod.yaml new file mode 100644 index 0000000000..d95e345b6c --- /dev/null +++ b/content/bn/examples/windows/hostpath-volume-pod.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Pod +metadata: + name: hostpath-volume-pod +spec: + containers: + - name: my-hostpath-volume-pod + image: microsoft/windowsservercore:1709 + volumeMounts: + - name: foo + mountPath: "C:\\etc\\foo" + readOnly: true + nodeSelector: + kubernetes.io/os: windows + volumes: + - name: foo + hostPath: + path: "C:\\etc\\foo" From b8b673990cd412f86aceedb608ebd6bacc8d964c Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:15:59 +0600 Subject: [PATCH 0751/1086] Create run-as-username-container.yaml --- .../windows/run-as-username-container.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/bn/examples/windows/run-as-username-container.yaml diff --git a/content/bn/examples/windows/run-as-username-container.yaml b/content/bn/examples/windows/run-as-username-container.yaml new file mode 100644 index 0000000000..77b7b2d188 --- /dev/null +++ b/content/bn/examples/windows/run-as-username-container.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Pod +metadata: + name: run-as-username-container-demo +spec: + securityContext: + windowsOptions: + runAsUserName: "ContainerUser" + containers: + - name: run-as-username-demo + image: mcr.microsoft.com/windows/servercore:ltsc2019 + command: ["ping", "-t", "localhost"] + securityContext: + windowsOptions: + runAsUserName: "ContainerAdministrator" + nodeSelector: + kubernetes.io/os: windows From 4a5de55459e43f335bf86672b9541f8288012c71 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:16:32 +0600 Subject: [PATCH 0752/1086] Create run-as-username-pod.yaml --- .../bn/examples/windows/run-as-username-pod.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/windows/run-as-username-pod.yaml diff --git a/content/bn/examples/windows/run-as-username-pod.yaml b/content/bn/examples/windows/run-as-username-pod.yaml new file mode 100644 index 0000000000..281bbda597 --- /dev/null +++ b/content/bn/examples/windows/run-as-username-pod.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Pod +metadata: + name: run-as-username-pod-demo +spec: + securityContext: + windowsOptions: + runAsUserName: "ContainerUser" + containers: + - name: run-as-username-demo + image: mcr.microsoft.com/windows/servercore:ltsc2019 + command: ["ping", "-t", "localhost"] + nodeSelector: + kubernetes.io/os: windows From e75e1b3f65403aac736c9e7074bf251cef9f2e28 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:17:04 +0600 Subject: [PATCH 0753/1086] Create secret-pod.yaml --- content/bn/examples/windows/secret-pod.yaml | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 content/bn/examples/windows/secret-pod.yaml diff --git a/content/bn/examples/windows/secret-pod.yaml b/content/bn/examples/windows/secret-pod.yaml new file mode 100644 index 0000000000..69ee9b1f1e --- /dev/null +++ b/content/bn/examples/windows/secret-pod.yaml @@ -0,0 +1,32 @@ +apiVersion: v1 +kind: Secret +metadata: + name: mysecret +type: Opaque +data: + username: YWRtaW4= + password: MWYyZDFlMmU2N2Rm + +--- + +apiVersion: v1 +kind: Pod +metadata: + name: my-secret-pod +spec: + containers: + - name: my-secret-pod + image: microsoft/windowsservercore:1709 + env: + - name: USERNAME + valueFrom: + secretKeyRef: + name: mysecret + key: username + - name: PASSWORD + valueFrom: + secretKeyRef: + name: mysecret + key: password + nodeSelector: + kubernetes.io/os: windows From 41f8c53319d33b2074490345932a93904f34dce8 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:17:28 +0600 Subject: [PATCH 0754/1086] Create simple-pod.yaml --- content/bn/examples/windows/simple-pod.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/windows/simple-pod.yaml diff --git a/content/bn/examples/windows/simple-pod.yaml b/content/bn/examples/windows/simple-pod.yaml new file mode 100644 index 0000000000..0b1f0ed5c5 --- /dev/null +++ b/content/bn/examples/windows/simple-pod.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Pod +metadata: + name: iis + labels: + name: iis +spec: + containers: + - name: iis + image: microsoft/iis:windowsservercore-1709 + ports: + - containerPort: 80 + nodeSelector: + "kubernetes.io/os": windows From 88fa29fa9af20ef1d52bef0b346951ba5fd40b0c Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:19:14 +0600 Subject: [PATCH 0755/1086] Create example-redis-config.yaml --- content/bn/examples/pods/config/example-redis-config.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 content/bn/examples/pods/config/example-redis-config.yaml diff --git a/content/bn/examples/pods/config/example-redis-config.yaml b/content/bn/examples/pods/config/example-redis-config.yaml new file mode 100644 index 0000000000..5b093b1213 --- /dev/null +++ b/content/bn/examples/pods/config/example-redis-config.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: example-redis-config +data: + redis-config: | + maxmemory 2mb + maxmemory-policy allkeys-lru From 14fb0cd25e1bd92b24d2b5bd286fb040695e634b Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:19:37 +0600 Subject: [PATCH 0756/1086] Create redis-config --- content/bn/examples/pods/config/redis-config | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 content/bn/examples/pods/config/redis-config diff --git a/content/bn/examples/pods/config/redis-config b/content/bn/examples/pods/config/redis-config new file mode 100644 index 0000000000..ead340713c --- /dev/null +++ b/content/bn/examples/pods/config/redis-config @@ -0,0 +1,2 @@ +maxmemory 2mb +maxmemory-policy allkeys-lru From 5416ccfd62182bbb7ffa85854c55732bdc1b88da Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:19:58 +0600 Subject: [PATCH 0757/1086] Create redis-pod.yaml --- .../bn/examples/pods/config/redis-pod.yaml | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 content/bn/examples/pods/config/redis-pod.yaml diff --git a/content/bn/examples/pods/config/redis-pod.yaml b/content/bn/examples/pods/config/redis-pod.yaml new file mode 100644 index 0000000000..b1714c26e5 --- /dev/null +++ b/content/bn/examples/pods/config/redis-pod.yaml @@ -0,0 +1,33 @@ +apiVersion: v1 +kind: Pod +metadata: + name: redis +spec: + containers: + - name: redis + image: redis:5.0.4 + command: + - redis-server + - "/redis-master/redis.conf" + env: + - name: MASTER + value: "true" + ports: + - containerPort: 6379 + resources: + limits: + cpu: "0.1" + volumeMounts: + - mountPath: /redis-master-data + name: data + - mountPath: /redis-master + name: config + volumes: + - name: data + emptyDir: {} + - name: config + configMap: + name: example-redis-config + items: + - key: redis-config + path: redis.conf From 528d3b27f9a9c9ad89c85891dbd6709c93235b48 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:20:47 +0600 Subject: [PATCH 0758/1086] Create dapi-envars-container.yaml --- .../pods/inject/dapi-envars-container.yaml | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 content/bn/examples/pods/inject/dapi-envars-container.yaml diff --git a/content/bn/examples/pods/inject/dapi-envars-container.yaml b/content/bn/examples/pods/inject/dapi-envars-container.yaml new file mode 100644 index 0000000000..baf1bc6d7c --- /dev/null +++ b/content/bn/examples/pods/inject/dapi-envars-container.yaml @@ -0,0 +1,46 @@ + +apiVersion: v1 +kind: Pod +metadata: + name: dapi-envars-resourcefieldref +spec: + containers: + - name: test-container + image: registry.k8s.io/busybox:1.24 + command: [ "sh", "-c"] + args: + - while true; do + echo -en '\n'; + printenv MY_CPU_REQUEST MY_CPU_LIMIT; + printenv MY_MEM_REQUEST MY_MEM_LIMIT; + sleep 10; + done; + resources: + requests: + memory: "32Mi" + cpu: "125m" + limits: + memory: "64Mi" + cpu: "250m" + env: + - name: MY_CPU_REQUEST + valueFrom: + resourceFieldRef: + containerName: test-container + resource: requests.cpu + - name: MY_CPU_LIMIT + valueFrom: + resourceFieldRef: + containerName: test-container + resource: limits.cpu + - name: MY_MEM_REQUEST + valueFrom: + resourceFieldRef: + containerName: test-container + resource: requests.memory + - name: MY_MEM_LIMIT + valueFrom: + resourceFieldRef: + containerName: test-container + resource: limits.memory + restartPolicy: Never From 41b57bd455316e2e1e61dde7203ad0a66aedb5f8 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:21:09 +0600 Subject: [PATCH 0759/1086] Create dapi-envars-pod.yaml --- .../examples/pods/inject/dapi-envars-pod.yaml | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 content/bn/examples/pods/inject/dapi-envars-pod.yaml diff --git a/content/bn/examples/pods/inject/dapi-envars-pod.yaml b/content/bn/examples/pods/inject/dapi-envars-pod.yaml new file mode 100644 index 0000000000..e07a73aa6a --- /dev/null +++ b/content/bn/examples/pods/inject/dapi-envars-pod.yaml @@ -0,0 +1,39 @@ + +apiVersion: v1 +kind: Pod +metadata: + name: dapi-envars-fieldref +spec: + containers: + - name: test-container + image: registry.k8s.io/busybox + command: [ "sh", "-c"] + args: + - while true; do + echo -en '\n'; + printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE; + printenv MY_POD_IP MY_POD_SERVICE_ACCOUNT; + sleep 10; + done; + env: + - name: MY_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: MY_POD_SERVICE_ACCOUNT + valueFrom: + fieldRef: + fieldPath: spec.serviceAccountName + restartPolicy: Never From 9b179af7b99afa54a9a28cff49d4804efaf3c023 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:21:43 +0600 Subject: [PATCH 0760/1086] Create dapi-volume-resources.yaml --- .../pods/inject/dapi-volume-resources.yaml | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 content/bn/examples/pods/inject/dapi-volume-resources.yaml diff --git a/content/bn/examples/pods/inject/dapi-volume-resources.yaml b/content/bn/examples/pods/inject/dapi-volume-resources.yaml new file mode 100644 index 0000000000..3a78937727 --- /dev/null +++ b/content/bn/examples/pods/inject/dapi-volume-resources.yaml @@ -0,0 +1,57 @@ + +apiVersion: v1 +kind: Pod +metadata: + name: kubernetes-downwardapi-volume-example-2 +spec: + containers: + - name: client-container + image: registry.k8s.io/busybox:1.24 + command: ["sh", "-c"] + args: + - while true; do + echo -en '\n'; + if [[ -e /etc/podinfo/cpu_limit ]]; then + echo -en '\n'; cat /etc/podinfo/cpu_limit; fi; + if [[ -e /etc/podinfo/cpu_request ]]; then + echo -en '\n'; cat /etc/podinfo/cpu_request; fi; + if [[ -e /etc/podinfo/mem_limit ]]; then + echo -en '\n'; cat /etc/podinfo/mem_limit; fi; + if [[ -e /etc/podinfo/mem_request ]]; then + echo -en '\n'; cat /etc/podinfo/mem_request; fi; + sleep 5; + done; + resources: + requests: + memory: "32Mi" + cpu: "125m" + limits: + memory: "64Mi" + cpu: "250m" + volumeMounts: + - name: podinfo + mountPath: /etc/podinfo + volumes: + - name: podinfo + downwardAPI: + items: + - path: "cpu_limit" + resourceFieldRef: + containerName: client-container + resource: limits.cpu + divisor: 1m + - path: "cpu_request" + resourceFieldRef: + containerName: client-container + resource: requests.cpu + divisor: 1m + - path: "mem_limit" + resourceFieldRef: + containerName: client-container + resource: limits.memory + divisor: 1Mi + - path: "mem_request" + resourceFieldRef: + containerName: client-container + resource: requests.memory + divisor: 1Mi From 18928284e2504cff01ca996a1ed1ea3b0d23545b Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:22:08 +0600 Subject: [PATCH 0761/1086] Create dapi-volume.yaml --- .../bn/examples/pods/inject/dapi-volume.yaml | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 content/bn/examples/pods/inject/dapi-volume.yaml diff --git a/content/bn/examples/pods/inject/dapi-volume.yaml b/content/bn/examples/pods/inject/dapi-volume.yaml new file mode 100644 index 0000000000..574d890a1d --- /dev/null +++ b/content/bn/examples/pods/inject/dapi-volume.yaml @@ -0,0 +1,38 @@ + +apiVersion: v1 +kind: Pod +metadata: + name: kubernetes-downwardapi-volume-example + labels: + zone: us-est-coast + cluster: test-cluster1 + rack: rack-22 + annotations: + build: two + builder: john-doe +spec: + containers: + - name: client-container + image: registry.k8s.io/busybox + command: ["sh", "-c"] + args: + - while true; do + if [[ -e /etc/podinfo/labels ]]; then + echo -en '\n\n'; cat /etc/podinfo/labels; fi; + if [[ -e /etc/podinfo/annotations ]]; then + echo -en '\n\n'; cat /etc/podinfo/annotations; fi; + sleep 5; + done; + volumeMounts: + - name: podinfo + mountPath: /etc/podinfo + volumes: + - name: podinfo + downwardAPI: + items: + - path: "labels" + fieldRef: + fieldPath: metadata.labels + - path: "annotations" + fieldRef: + fieldPath: metadata.annotations From 3e7bffb457ffc284b592f08bf3cef861c9189c8d Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:22:29 +0600 Subject: [PATCH 0762/1086] Create dependent-envars.yaml --- .../pods/inject/dependent-envars.yaml | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 content/bn/examples/pods/inject/dependent-envars.yaml diff --git a/content/bn/examples/pods/inject/dependent-envars.yaml b/content/bn/examples/pods/inject/dependent-envars.yaml new file mode 100644 index 0000000000..67d07098ba --- /dev/null +++ b/content/bn/examples/pods/inject/dependent-envars.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: Pod +metadata: + name: dependent-envars-demo +spec: + containers: + - name: dependent-envars-demo + args: + - while true; do echo -en '\n'; printf UNCHANGED_REFERENCE=$UNCHANGED_REFERENCE'\n'; printf SERVICE_ADDRESS=$SERVICE_ADDRESS'\n';printf ESCAPED_REFERENCE=$ESCAPED_REFERENCE'\n'; sleep 30; done; + command: + - sh + - -c + image: busybox:1.28 + env: + - name: SERVICE_PORT + value: "80" + - name: SERVICE_IP + value: "172.17.0.1" + - name: UNCHANGED_REFERENCE + value: "$(PROTOCOL)://$(SERVICE_IP):$(SERVICE_PORT)" + - name: PROTOCOL + value: "https" + - name: SERVICE_ADDRESS + value: "$(PROTOCOL)://$(SERVICE_IP):$(SERVICE_PORT)" + - name: ESCAPED_REFERENCE + value: "$$(PROTOCOL)://$(SERVICE_IP):$(SERVICE_PORT)" From ded41ad6f8b02529081184c54efed9fca94be883 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:22:51 +0600 Subject: [PATCH 0763/1086] Create envars.yaml --- content/bn/examples/pods/inject/envars.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 content/bn/examples/pods/inject/envars.yaml diff --git a/content/bn/examples/pods/inject/envars.yaml b/content/bn/examples/pods/inject/envars.yaml new file mode 100644 index 0000000000..ebf5214376 --- /dev/null +++ b/content/bn/examples/pods/inject/envars.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: envar-demo + labels: + purpose: demonstrate-envars +spec: + containers: + - name: envar-demo-container + image: gcr.io/google-samples/node-hello:1.0 + env: + - name: DEMO_GREETING + value: "Hello from the environment" + - name: DEMO_FAREWELL + value: "Such a sweet sorrow" From 371a79f49f83a192dbb6962eb76ae621390c23f2 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:23:13 +0600 Subject: [PATCH 0764/1086] Create pod-multiple-secret-env-variable.yaml --- .../pod-multiple-secret-env-variable.yaml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 content/bn/examples/pods/inject/pod-multiple-secret-env-variable.yaml diff --git a/content/bn/examples/pods/inject/pod-multiple-secret-env-variable.yaml b/content/bn/examples/pods/inject/pod-multiple-secret-env-variable.yaml new file mode 100644 index 0000000000..2d9afe9c1a --- /dev/null +++ b/content/bn/examples/pods/inject/pod-multiple-secret-env-variable.yaml @@ -0,0 +1,20 @@ + +apiVersion: v1 +kind: Pod +metadata: + name: envvars-multiple-secrets +spec: + containers: + - name: envars-test-container + image: nginx + env: + - name: BACKEND_USERNAME + valueFrom: + secretKeyRef: + name: backend-user + key: backend-username + - name: DB_USERNAME + valueFrom: + secretKeyRef: + name: db-user + key: db-username From beff1bb3ef9d709e63895f2e1d0ef1b818d138c4 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:23:49 +0600 Subject: [PATCH 0765/1086] Create pod-secret-envFrom.yaml --- .../bn/examples/pods/inject/pod-secret-envFrom.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/pods/inject/pod-secret-envFrom.yaml diff --git a/content/bn/examples/pods/inject/pod-secret-envFrom.yaml b/content/bn/examples/pods/inject/pod-secret-envFrom.yaml new file mode 100644 index 0000000000..eb1d3213ef --- /dev/null +++ b/content/bn/examples/pods/inject/pod-secret-envFrom.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Pod +metadata: + name: envfrom-secret +spec: + containers: + - name: envars-test-container + image: nginx + envFrom: + - secretRef: + name: test-secret From 94c85741f57814ca173915edf6b2794175167a68 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:24:21 +0600 Subject: [PATCH 0766/1086] Create pod-single-secret-env-variable.yaml --- .../inject/pod-single-secret-env-variable.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/pods/inject/pod-single-secret-env-variable.yaml diff --git a/content/bn/examples/pods/inject/pod-single-secret-env-variable.yaml b/content/bn/examples/pods/inject/pod-single-secret-env-variable.yaml new file mode 100644 index 0000000000..af4cf8732f --- /dev/null +++ b/content/bn/examples/pods/inject/pod-single-secret-env-variable.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Pod +metadata: + name: env-single-secret +spec: + containers: + - name: envars-test-container + image: nginx + env: + - name: SECRET_USERNAME + valueFrom: + secretKeyRef: + name: backend-user + key: backend-username From eb377a43358e7b791211d86a1a40f50b96e7b9c7 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:25:15 +0600 Subject: [PATCH 0767/1086] Create secret-envars-pod.yaml --- .../pods/inject/secret-envars-pod.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/pods/inject/secret-envars-pod.yaml diff --git a/content/bn/examples/pods/inject/secret-envars-pod.yaml b/content/bn/examples/pods/inject/secret-envars-pod.yaml new file mode 100644 index 0000000000..1637c0eac3 --- /dev/null +++ b/content/bn/examples/pods/inject/secret-envars-pod.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Pod +metadata: + name: secret-envars-test-pod +spec: + containers: + - name: envars-test-container + image: nginx + env: + - name: SECRET_USERNAME + valueFrom: + secretKeyRef: + name: test-secret + key: username + - name: SECRET_PASSWORD + valueFrom: + secretKeyRef: + name: test-secret + key: password From 07f408278d0768a89b1016a52dcd60cd84683029 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:25:43 +0600 Subject: [PATCH 0768/1086] Create secret-pod.yaml --- .../bn/examples/pods/inject/secret-pod.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 content/bn/examples/pods/inject/secret-pod.yaml diff --git a/content/bn/examples/pods/inject/secret-pod.yaml b/content/bn/examples/pods/inject/secret-pod.yaml new file mode 100644 index 0000000000..8487da8d1c --- /dev/null +++ b/content/bn/examples/pods/inject/secret-pod.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Pod +metadata: + name: secret-test-pod +spec: + containers: + - name: test-container + image: nginx + volumeMounts: + # name must match the volume name below + - name: secret-volume + mountPath: /etc/secret-volume + readOnly: true + # The secret data is exposed to Containers in the Pod through a Volume. + volumes: + - name: secret-volume + secret: + secretName: test-secret From c266b268d282bcd35d6733358c4adef6f900903b Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:26:14 +0600 Subject: [PATCH 0769/1086] Create secret.yaml --- content/bn/examples/pods/inject/secret.yaml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 content/bn/examples/pods/inject/secret.yaml diff --git a/content/bn/examples/pods/inject/secret.yaml b/content/bn/examples/pods/inject/secret.yaml new file mode 100644 index 0000000000..706ca8670f --- /dev/null +++ b/content/bn/examples/pods/inject/secret.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Secret +metadata: + name: test-secret +data: + username: bXktYXBw + password: Mzk1MjgkdmRnN0pi From a665b7f2d5f1a76123520c233900f3072392179d Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Tue, 7 May 2024 19:26:59 +0600 Subject: [PATCH 0770/1086] Update release.md --- content/bn/releases/release.md | 122 ++++++++++++++++----------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index 98e03c1029..2bdb19a51b 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -236,62 +236,62 @@ PR-গুলি সরাতে পারেন: যেখানে অতিরিক্ত পদক্ষেপ প্রয়োজন, রিলিজ দল নিম্নলিখিত চ্যানেলের মাধ্যমে মানুষ থেকে মানুষে এস্ক্যালেশনের চেষ্টা করবে: -- Comment in GitHub mentioning the SIG team and SIG members as appropriate for - the issue type -- Emailing the SIG mailing list - - bootstrapped with group email addresses from the - [community sig list][sig-list] - - optionally also directly addressing SIG leadership or other SIG members -- Messaging the SIG's Slack channel - - bootstrapped with the slackchannel and SIG leadership from the - [community sig list][sig-list] - - optionally directly "@" mentioning SIG leadership or others by handle +- ইস্যু প্রকারের উপযুক্ত SIG দল এবং SIG সদস্যদের উল্লিখিত করে + GitHub-এ মন্তব্য করুন। +- SIG মেইলিং লিস্টে ইমেইল পাঠানো + - [কমিউনিটি সিগ লিস্ট][sig-list] থেকে গ্রুপ ইমেল ঠিকানা + দিয়ে বুটস্ট্র্যাপ করা হয়েছে + - ঐচ্ছিকভাবে সরাসরি SIG নেতৃত্ব বা অন্যান্য SIG সদস্যদের সম্বোধন করে +- SIG এর স্ল্যাক চ্যানেলে বার্তা পাঠানো। + - [কমিউনিটি সিগ লিস্ট][sig-list] থেকে স্ল্যাকচ্যানেল এবং SIG নেতৃত্বের সাথে + বুটস্ট্র্যাপ করা হয়েছে + - ঐচ্ছিকভাবে সরাসরি "@" হ্যান্ডেল দ্বারা SIG নেতৃত্ব বা অন্যদের উল্লেখ করে ## মাইলস্টোনে একটি আইটেম সংযোজন ### মাইলস্টোন রক্ষণাবেক্ষণকারী -The members of the [`milestone-maintainers`](https://github.com/orgs/kubernetes/teams/milestone-maintainers/members) -GitHub team are entrusted with the responsibility of specifying the release -milestone on GitHub artifacts. +[`milestone-maintainers`](https://github.com/orgs/kubernetes/teams/milestone-maintainers/members) এর সদস্যদের +GitHub টিম দ্বারা GitHub আর্টিফ্যাক্টগুলিতে রিলিজ মাইলস্টোন নির্দিষ্ট করার +দায়িত্ব দেওয়া হয়েছে। -This group is [maintained](https://git.k8s.io/sig-release/release-team/README.md#milestone-maintainers) -by SIG Release and has representation from the various SIGs' leadership. +এই গ্রুপটি SIG রিলিজের দ্বারা [রক্ষণাবেক্ষণ করা হয়েছে](https://git.k8s.io/sig-release/release-team/README.md#milestone-maintainers) +এবং বিভিন্ন SIG-এর নেতৃত্বের প্রতিনিধিত্ব রয়েছে। ### ফিচার সংযোজন -Feature planning and definition takes many forms today, but a typical example -might be a large piece of work described in a [KEP][keps], with associated task -issues in GitHub. When the plan has reached an implementable state and work is -underway, the enhancement or parts thereof are targeted for an upcoming milestone -by creating GitHub issues and marking them with the Prow "/milestone" command. +বৈশিষ্ট্য পরিকল্পনা এবং সংজ্ঞা আজ অনেক রূপ নেয়, কিন্তু একটি সাধারণ উদাহরণ +হতে পারে একটি [KEP][keps]-এ বর্ণিত কাজের একটি বড় অংশ, GitHub-এ সংশ্লিষ্ট +টাস্ক সমস্যা সহ। যখন পরিকল্পনাটি একটি বাস্তবায়নযোগ্য অবস্থায় পৌঁছেছে এবং কাজ চলছে, +তখন বর্ধন বা এর অংশগুলিকে GitHub সমস্যা তৈরি করে এবং Prow +"/milestone" কমান্ড দিয়ে চিহ্নিত করে একটি আসন্ন মাইলফলকের জন্য লক্ষ্য করা হয়। -For the first ~4 weeks into the release cycle, the Release Team's Enhancements -Lead will interact with SIGs and feature owners via GitHub, Slack, and SIG -meetings to capture all required planning artifacts. +রিলিজ চক্রের প্রথম ~4 সপ্তাহের জন্য, রিলিজ টিমের এনহ্যান্সমেন্ট +লিড সমস্ত প্রয়োজনীয় পরিকল্পনা নিদর্শনগুলি ক্যাপচার করতে GitHub, Slack এবং SIG +মিটিংয়ের মাধ্যমে SIG এবং বৈশিষ্ট্য মালিকদের সাথে যোগাযোগ করবে। -If you have an enhancement to target for an upcoming release milestone, begin a -conversation with your SIG leadership and with that release's Enhancements -Lead. +আপনার যদি আসন্ন রিলিজের মাইলস্টোন লক্ষ্য করার জন্য একটি এনহ্যান্সমেন্ট থাকে, তাহলে +আপনার SIG নেতৃত্বের সাথে এবং সেই রিলিজের এনহ্যান্সমেন্ট লিডের সাথে কথা +বলুন। ### ইস্যু সংযোজন -Issues are marked as targeting a milestone via the Prow "/milestone" command. +ইস্যুগুলোকে Prow "/milestone" কমান্ডের মাধ্যমে একটি মাইলস্টোন লক্ষ্য করে চিহ্নিত করা হয়েছে৷ -The Release Team's [Bug Triage Lead](https://git.k8s.io/sig-release/release-team/role-handbooks/bug-triage/README.md) -and overall community watch incoming issues and triage them, as described in -the contributor guide section on -[issue triage](https://k8s.dev/docs/guide/issue-triage/). +রিলিজ টিমের [বাগ ট্রাইজ লিড](https://git.k8s.io/sig-release/release-team/role-handbooks/bug-triage/README.md) +এবং সামগ্রিক সম্প্রদায় আগত সমস্যাগুলি দেখে এবং সেগুলিকে ট্রাইজ করে +[ইস্যু ট্রাইজ](https://k8s.dev/docs/guide/issue-triage/). +এর অবদানকারী নির্দেশিকা বিভাগে বর্ণিত হয়েছে। -Marking issues with the milestone provides the community better visibility -regarding when an issue was observed and by when the community feels it must be -resolved. During [Code Freeze][code-freeze], a milestone must be set to merge -a PR. +মাইলস্টোনের সাথে সমস্যাগুলি চিহ্নিত করা কমিউনিটি একটি সমস্যা কখন পর্যবেক্ষণ করা হয়েছিল +এবং কখন কমিউনিটি মনে করে এটির সমাধান করা উচিত সে সম্পর্কে আরও ভাল দৃশ্যমানতা +প্রদান করে। [কোড ফ্রিজ][code-freeze] চলাকালীন, একটি PR মার্জ করার জন্য একটি +মাইলফলক সেট করতে হবে৷ -An open issue is no longer required for a PR, but open issues and associated -PRs should have synchronized labels. For example a high priority bug issue -might not have its associated PR merged if the PR is only marked as lower -priority. +PR-এর জন্য ওপেন ইস্যুর আর প্রয়োজন নেই, কিন্তু ওপেন ইস্যু +এবং সংশ্লিষ্ট PR-এর সিঙ্ক্রোনাইজড লেবেল থাকা উচিত। উদাহরণস্বরূপ, একটি উচ্চ অগ্রাধিকারের বাগ ইস্যু +এর সাথে যুক্ত PR মার্জ নাও হতে পারে যদি PR শুধুমাত্র নিম্ন অগ্রাধিকার হিসাবে +চিহ্নিত করা হয়। ### PR সংযোজন @@ -305,12 +305,12 @@ PR গুলোকে Prow "/milestone" কমান্ডের মাধ্য ### SIG ওনার লেবেল -The SIG owner label defines the SIG to which we escalate if a milestone issue -is languishing or needs additional attention. If there are no updates after -escalation, the issue may be automatically removed from the milestone. +SIG মালিকের লেবেল SIG কে সংজ্ঞায়িত করে যার দিকে আমরা অগ্রসর হই যদি একটি মাইলস্টোন সমস্যা স্থবির হয় +বা অতিরিক্ত মনোযোগের প্রয়োজন হয়। যদি বৃদ্ধির পরে কোন আপডেট না থাকে, তাহলে সমস্যাটি মাইলফলক থেকে +স্বয়ংক্রিয়ভাবে সরানো হতে পারে। -These are added with the Prow "/sig" command. For example to add the label -indicating SIG Storage is responsible, comment with `/sig storage`. +এগুলি Prow "/sig" কমান্ডের সাথে যোগ করা হয়। যেমন SIG স্টোরেজ দায়ী লেবেল +যোগ করতে, `/sig storage` দিয়ে মন্তব্য করুন। ### প্রাইওরিটি লেবেল @@ -318,23 +318,23 @@ indicating SIG Storage is responsible, comment with `/sig storage`. এস্ক্যালেশন পথ নির্ধারণে ব্যবহৃত হয়। তারা এটা নির্ধারণ করতে ব্যবহৃত হয় যে ইস্যুর সমাধানের উপরে রিলিস ব্লক করা উচিত কি না। -- `priority/critical-urgent`: Never automatically move out of a release - milestone; continually escalate to contributor and SIG through all available - channels. - - considered a release blocking issue - - requires daily updates from issue owners during [Code Freeze][code-freeze] - - would require a patch release if left undiscovered until after the minor - release -- `priority/important-soon`: Escalate to the issue owners and SIG owner; move - out of milestone after several unsuccessful escalation attempts. - - not considered a release blocking issue - - would not require a patch release - - will automatically be moved out of the release milestone at Code Freeze - after a 4 day grace period -- `priority/important-longterm`: Escalate to the issue owners; move out of the - milestone after 1 attempt. - - even less urgent / critical than `priority/important-soon` - - moved out of milestone more aggressively than `priority/important-soon` +- `priority/critical-urgent`: কখনই স্বয়ংক্রিয়ভাবে রিলিজ মাইলস্টোন থেকে + সরে যাবেন না; সব উপলভ্য চ্যানেলের মাধ্যমে ক্রমাগত অবদানকারী এবং SIG-এর কাছে + এগিয়ে যান। + - একটি রিলিজ ব্লকিং সমস্যা হিসাবে বিবেচিত। + - [কোড ফ্রিজ][code-freeze] চলাকালীন ইস্যু মালিকদের কাছ থেকে দৈনিক আপডেটের প্রয়োজন। + - একটি প্যাচ রিলিজ প্রয়োজন হবে যদি অনাবিষ্কৃত কিছু মাইনর রিলিজের পর + থেকে যায়। +- `priority/important-soon`: ইস্যু মালিক এবং SIG মালিকের কাছে এগিয়ে যান; বেশ + কয়েকটি অসফল বৃদ্ধি প্রচেষ্টার পরে মাইলফলক থেকে সরে যান। + - একটি রিলিজ ব্লকিং সমস্যা হিসাবে বিবেচনা করা হয় না + - একটি প্যাচ রিলিজ প্রয়োজন হবে না + - 4 দিনের গ্রেস পিরিয়ডের পরে কোড ফ্রিজে স্বয়ংক্রিয়ভাবে রিলিজের + মাইলফলক থেকে সরে যাবে +- `priority/important-longterm`: ইস্যু মালিকদের কাছে এগিয়ে যান; 1 বার প্রচেষ্টার পরে মাইলফলক + থেকে সরে যান। + - এমনকি `priority/important-soon` এর চেয়ে কম জরুরি/সমালোচনা + - `priority/important-soon` এর চেয়ে বেশি আক্রমনাত্মকভাবে মাইলফলক থেকে সরে গেছে ### ইস্যু/PR লেবেল From 011daa939860d7d4fdb148bd15ca9ff3aabf8725 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:27:29 +0600 Subject: [PATCH 0771/1086] Create exec-liveness.yaml --- .../bn/examples/pods/probe/exec-liveness.yaml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 content/bn/examples/pods/probe/exec-liveness.yaml diff --git a/content/bn/examples/pods/probe/exec-liveness.yaml b/content/bn/examples/pods/probe/exec-liveness.yaml new file mode 100644 index 0000000000..7d6ca96b3d --- /dev/null +++ b/content/bn/examples/pods/probe/exec-liveness.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Pod +metadata: + labels: + test: liveness + name: liveness-exec +spec: + containers: + - name: liveness + image: registry.k8s.io/busybox + args: + - /bin/sh + - -c + - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600 + livenessProbe: + exec: + command: + - cat + - /tmp/healthy + initialDelaySeconds: 5 + periodSeconds: 5 From c952d1d4bb285697e1971648329d86f08970ee7b Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:27:54 +0600 Subject: [PATCH 0772/1086] Create grpc-liveness.yaml --- content/bn/examples/pods/probe/grpc-liveness.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 content/bn/examples/pods/probe/grpc-liveness.yaml diff --git a/content/bn/examples/pods/probe/grpc-liveness.yaml b/content/bn/examples/pods/probe/grpc-liveness.yaml new file mode 100644 index 0000000000..901e47dacc --- /dev/null +++ b/content/bn/examples/pods/probe/grpc-liveness.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: etcd-with-grpc +spec: + containers: + - name: etcd + image: registry.k8s.io/etcd:3.5.1-0 + command: [ "/usr/local/bin/etcd", "--data-dir", "/var/lib/etcd", "--listen-client-urls", "http://0.0.0.0:2379", "--advertise-client-urls", "http://127.0.0.1:2379", "--log-level", "debug"] + ports: + - containerPort: 2379 + livenessProbe: + grpc: + port: 2379 + initialDelaySeconds: 10 From 7ec5115e722fb17cebb3e85f3ab8d11845c74f8f Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:28:22 +0600 Subject: [PATCH 0773/1086] Create http-liveness.yaml --- .../bn/examples/pods/probe/http-liveness.yaml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 content/bn/examples/pods/probe/http-liveness.yaml diff --git a/content/bn/examples/pods/probe/http-liveness.yaml b/content/bn/examples/pods/probe/http-liveness.yaml new file mode 100644 index 0000000000..ecc1a6ff2e --- /dev/null +++ b/content/bn/examples/pods/probe/http-liveness.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Pod +metadata: + labels: + test: liveness + name: liveness-http +spec: + containers: + - name: liveness + image: registry.k8s.io/e2e-test-images/agnhost:2.40 + args: + - liveness + livenessProbe: + httpGet: + path: /healthz + port: 8080 + httpHeaders: + - name: Custom-Header + value: Awesome + initialDelaySeconds: 3 + periodSeconds: 3 From 38964af6f14e32ebf3caf486b21365d70f98297c Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:28:55 +0600 Subject: [PATCH 0774/1086] Create pod-with-http-healthcheck.yaml --- .../pods/probe/pod-with-http-healthcheck.yaml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 content/bn/examples/pods/probe/pod-with-http-healthcheck.yaml diff --git a/content/bn/examples/pods/probe/pod-with-http-healthcheck.yaml b/content/bn/examples/pods/probe/pod-with-http-healthcheck.yaml new file mode 100644 index 0000000000..3f40854e92 --- /dev/null +++ b/content/bn/examples/pods/probe/pod-with-http-healthcheck.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Pod +metadata: + name: pod-with-http-healthcheck +spec: + containers: + - name: nginx + image: nginx + # defines the health checking + livenessProbe: + # an http probe + httpGet: + path: /_status/healthz + port: 80 + # length of time to wait for a pod to initialize + # after pod startup, before applying health checking + initialDelaySeconds: 30 + timeoutSeconds: 1 + ports: + - containerPort: 80 From d71ce6e8f076622d2465ec9a80320c1c2f826078 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:29:18 +0600 Subject: [PATCH 0775/1086] Create pod-with-tcp-socket-healthcheck.yaml --- .../pod-with-tcp-socket-healthcheck.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/pods/probe/pod-with-tcp-socket-healthcheck.yaml diff --git a/content/bn/examples/pods/probe/pod-with-tcp-socket-healthcheck.yaml b/content/bn/examples/pods/probe/pod-with-tcp-socket-healthcheck.yaml new file mode 100644 index 0000000000..5f0bca283c --- /dev/null +++ b/content/bn/examples/pods/probe/pod-with-tcp-socket-healthcheck.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Pod +metadata: + name: pod-with-tcp-socket-healthcheck +spec: + containers: + - name: redis + image: redis + # defines the health checking + livenessProbe: + # a TCP socket probe + tcpSocket: + port: 6379 + # length of time to wait for a pod to initialize + # after pod startup, before applying health checking + initialDelaySeconds: 30 + timeoutSeconds: 1 + ports: + - containerPort: 6379 From 7332fec74f4e271c3710ea46a9d82c6701ca9bdf Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:29:48 +0600 Subject: [PATCH 0776/1086] Create tcp-liveness-readiness.yaml --- .../pods/probe/tcp-liveness-readiness.yaml | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 content/bn/examples/pods/probe/tcp-liveness-readiness.yaml diff --git a/content/bn/examples/pods/probe/tcp-liveness-readiness.yaml b/content/bn/examples/pods/probe/tcp-liveness-readiness.yaml new file mode 100644 index 0000000000..d10aae980e --- /dev/null +++ b/content/bn/examples/pods/probe/tcp-liveness-readiness.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Pod +metadata: + name: goproxy + labels: + app: goproxy +spec: + containers: + - name: goproxy + image: registry.k8s.io/goproxy:0.1 + ports: + - containerPort: 8080 + readinessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 10 + livenessProbe: + tcpSocket: + port: 8080 + initialDelaySeconds: 15 + periodSeconds: 10 From 94199ba0bc8b250e44c474197c3637758bcf289e Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:30:56 +0600 Subject: [PATCH 0777/1086] Create qos-pod-2.yaml --- content/bn/examples/pods/qos/qos-pod-2.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/pods/qos/qos-pod-2.yaml diff --git a/content/bn/examples/pods/qos/qos-pod-2.yaml b/content/bn/examples/pods/qos/qos-pod-2.yaml new file mode 100644 index 0000000000..115d4de21e --- /dev/null +++ b/content/bn/examples/pods/qos/qos-pod-2.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Pod +metadata: + name: qos-demo-2 + namespace: qos-example +spec: + containers: + - name: qos-demo-2-ctr + image: nginx + resources: + limits: + memory: "200Mi" + requests: + memory: "100Mi" From 11eedd79a62d5896be7eb1ee06ae12336b635f6a Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:31:24 +0600 Subject: [PATCH 0778/1086] Create qos-pod-3.yaml --- content/bn/examples/pods/qos/qos-pod-3.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 content/bn/examples/pods/qos/qos-pod-3.yaml diff --git a/content/bn/examples/pods/qos/qos-pod-3.yaml b/content/bn/examples/pods/qos/qos-pod-3.yaml new file mode 100644 index 0000000000..dac3629942 --- /dev/null +++ b/content/bn/examples/pods/qos/qos-pod-3.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Pod +metadata: + name: qos-demo-3 + namespace: qos-example +spec: + containers: + - name: qos-demo-3-ctr + image: nginx From a68914de565651b711a9f40226bc096a2939377c Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:32:00 +0600 Subject: [PATCH 0779/1086] Create qos-pod-4.yaml --- content/bn/examples/pods/qos/qos-pod-4.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 content/bn/examples/pods/qos/qos-pod-4.yaml diff --git a/content/bn/examples/pods/qos/qos-pod-4.yaml b/content/bn/examples/pods/qos/qos-pod-4.yaml new file mode 100644 index 0000000000..d4818b277e --- /dev/null +++ b/content/bn/examples/pods/qos/qos-pod-4.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Pod +metadata: + name: qos-demo-4 + namespace: qos-example +spec: + containers: + + - name: qos-demo-4-ctr-1 + image: nginx + resources: + requests: + memory: "200Mi" + + - name: qos-demo-4-ctr-2 + image: redis From 5f34726ce4a6587e70e71464e937620d41203eb2 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Tue, 7 May 2024 19:32:20 +0600 Subject: [PATCH 0780/1086] Update release.md --- content/bn/releases/release.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index 2bdb19a51b..b0a9cc9745 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -10,7 +10,7 @@ auto_generated: true এই কনটেন্ট স্বয়ংক্রিয়ভাবে তৈরি এবং লিঙ্কগুলি কাজ নাও করতে পারে৷ উকুমেন্টটির সোর্স অবস্থিত [এখানে](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-release/release.md). {{< /warning >}} -# টার্গেটিং এনহ্যান্সমেন্টস, ইস্যু এবং PRs মাইলস্টোন রিলিজের জন্য +# মাইলস্টোন রিলিজের জন্য টার্গেটিং এনহ্যান্সমেন্টস, ইস্যু এবং PR এই ডকুমেন্টটি ফোকাস করা কুবারনেটিস ডেভেলপার এবং কন্ট্রিবিউটরদের জন্য যাদের একটি এনহ্যান্সমেন্ট, ইস্যু, অথবা পুল রিকুয়েস্ট তৈরি করতে হয় যা লক্ষ্য করে একটি নির্দিষ্ট From c40e6234803a2eb1283bdbf8303e256d201a8e71 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:32:33 +0600 Subject: [PATCH 0781/1086] Create qos-pod-5.yaml --- content/bn/examples/pods/qos/qos-pod-5.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 content/bn/examples/pods/qos/qos-pod-5.yaml diff --git a/content/bn/examples/pods/qos/qos-pod-5.yaml b/content/bn/examples/pods/qos/qos-pod-5.yaml new file mode 100644 index 0000000000..c9b0c00c7e --- /dev/null +++ b/content/bn/examples/pods/qos/qos-pod-5.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Pod +metadata: + name: qos-demo-5 + namespace: qos-example +spec: + containers: + - name: qos-demo-ctr-5 + image: nginx + resources: + limits: + memory: "200Mi" + cpu: "700m" + requests: + memory: "200Mi" + cpu: "700m" From f4683e1ad502b209958d1f286d18e30692995111 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:33:03 +0600 Subject: [PATCH 0782/1086] Create qos-pod.yaml --- content/bn/examples/pods/qos/qos-pod.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 content/bn/examples/pods/qos/qos-pod.yaml diff --git a/content/bn/examples/pods/qos/qos-pod.yaml b/content/bn/examples/pods/qos/qos-pod.yaml new file mode 100644 index 0000000000..b4a6b1ea82 --- /dev/null +++ b/content/bn/examples/pods/qos/qos-pod.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Pod +metadata: + name: qos-demo + namespace: qos-example +spec: + containers: + - name: qos-demo-ctr + image: nginx + resources: + limits: + memory: "200Mi" + cpu: "700m" + requests: + memory: "200Mi" + cpu: "700m" From 5029b535448eef14571a55db7756a60e68f3fe57 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:34:13 +0600 Subject: [PATCH 0783/1086] Create cpu-request-limit-2.yaml --- .../pods/resource/cpu-request-limit-2.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/bn/examples/pods/resource/cpu-request-limit-2.yaml diff --git a/content/bn/examples/pods/resource/cpu-request-limit-2.yaml b/content/bn/examples/pods/resource/cpu-request-limit-2.yaml new file mode 100644 index 0000000000..f505c77fbb --- /dev/null +++ b/content/bn/examples/pods/resource/cpu-request-limit-2.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Pod +metadata: + name: cpu-demo-2 + namespace: cpu-example +spec: + containers: + - name: cpu-demo-ctr-2 + image: vish/stress + resources: + limits: + cpu: "100" + requests: + cpu: "100" + args: + - -cpus + - "2" From 3bae78beeb3917174c532a7f4a2bc2d156438547 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:34:46 +0600 Subject: [PATCH 0784/1086] Create cpu-request-limit.yaml --- .../pods/resource/cpu-request-limit.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/bn/examples/pods/resource/cpu-request-limit.yaml diff --git a/content/bn/examples/pods/resource/cpu-request-limit.yaml b/content/bn/examples/pods/resource/cpu-request-limit.yaml new file mode 100644 index 0000000000..2cc0b2cf4f --- /dev/null +++ b/content/bn/examples/pods/resource/cpu-request-limit.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Pod +metadata: + name: cpu-demo + namespace: cpu-example +spec: + containers: + - name: cpu-demo-ctr + image: vish/stress + resources: + limits: + cpu: "1" + requests: + cpu: "0.5" + args: + - -cpus + - "2" From 9215379ea044ff9c5d9405bb79b51b151ed230d7 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:35:25 +0600 Subject: [PATCH 0785/1086] Create extended-resource-pod-2.yaml --- .../pods/resource/extended-resource-pod-2.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 content/bn/examples/pods/resource/extended-resource-pod-2.yaml diff --git a/content/bn/examples/pods/resource/extended-resource-pod-2.yaml b/content/bn/examples/pods/resource/extended-resource-pod-2.yaml new file mode 100644 index 0000000000..9c15d9ec86 --- /dev/null +++ b/content/bn/examples/pods/resource/extended-resource-pod-2.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: extended-resource-demo-2 +spec: + containers: + - name: extended-resource-demo-2-ctr + image: nginx + resources: + requests: + example.com/dongle: 2 + limits: + example.com/dongle: 2 From 68fd50f0e713df67110c58d7d733f67e2d6d41cf Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:36:03 +0600 Subject: [PATCH 0786/1086] Create extended-resource-pod.yaml --- .../pods/resource/extended-resource-pod.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 content/bn/examples/pods/resource/extended-resource-pod.yaml diff --git a/content/bn/examples/pods/resource/extended-resource-pod.yaml b/content/bn/examples/pods/resource/extended-resource-pod.yaml new file mode 100644 index 0000000000..4fb3de740e --- /dev/null +++ b/content/bn/examples/pods/resource/extended-resource-pod.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: extended-resource-demo +spec: + containers: + - name: extended-resource-demo-ctr + image: nginx + resources: + requests: + example.com/dongle: 3 + limits: + example.com/dongle: 3 From 1033fe3735d3e3fccc155dafc0ee31116cc10201 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:36:51 +0600 Subject: [PATCH 0787/1086] Create memory-request-limit-2.yaml --- .../pods/resource/memory-request-limit-2.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 content/bn/examples/pods/resource/memory-request-limit-2.yaml diff --git a/content/bn/examples/pods/resource/memory-request-limit-2.yaml b/content/bn/examples/pods/resource/memory-request-limit-2.yaml new file mode 100644 index 0000000000..99032c4fc2 --- /dev/null +++ b/content/bn/examples/pods/resource/memory-request-limit-2.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Pod +metadata: + name: memory-demo-2 + namespace: mem-example +spec: + containers: + - name: memory-demo-2-ctr + image: polinux/stress + resources: + requests: + memory: "50Mi" + limits: + memory: "100Mi" + command: ["stress"] + args: ["--vm", "1", "--vm-bytes", "250M", "--vm-hang", "1"] From 4aaee743667ee50c0e5712713fa40f0472e06860 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 19:37:23 +0600 Subject: [PATCH 0788/1086] Create memory-request-limit-3.yaml --- .../pods/resource/memory-request-limit-3.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 content/bn/examples/pods/resource/memory-request-limit-3.yaml diff --git a/content/bn/examples/pods/resource/memory-request-limit-3.yaml b/content/bn/examples/pods/resource/memory-request-limit-3.yaml new file mode 100644 index 0000000000..d816393986 --- /dev/null +++ b/content/bn/examples/pods/resource/memory-request-limit-3.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Pod +metadata: + name: memory-demo-3 + namespace: mem-example +spec: + containers: + - name: memory-demo-3-ctr + image: polinux/stress + resources: + requests: + memory: "1000Gi" + limits: + memory: "1000Gi" + command: ["stress"] + args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"] From 31c962cec86463b7eabb7609a6d975ab88e60d33 Mon Sep 17 00:00:00 2001 From: xin gu <418294249@qq.com> Date: Tue, 7 May 2024 17:16:31 +0800 Subject: [PATCH 0789/1086] sync control-plane-flags encrypt-data Update encrypt-data.md --- .../tools/kubeadm/control-plane-flags.md | 6 ++-- .../tasks/administer-cluster/encrypt-data.md | 28 ++++++++++++++++--- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/content/zh-cn/docs/setup/production-environment/tools/kubeadm/control-plane-flags.md b/content/zh-cn/docs/setup/production-environment/tools/kubeadm/control-plane-flags.md index 638c13405f..bbfcf2101f 100644 --- a/content/zh-cn/docs/setup/production-environment/tools/kubeadm/control-plane-flags.md +++ b/content/zh-cn/docs/setup/production-environment/tools/kubeadm/control-plane-flags.md @@ -275,19 +275,19 @@ For example, `kube-apiserver0+merge.yaml` or just `etcd.json`. - `target` 可以是 `kube-apiserver`、`kube-controller-manager`、`kube-scheduler`、`etcd` 和 `kubeletconfiguration` 之一。 +- `suffix` 是一个可选字符串,可用于确定首先按字母数字应用哪些补丁。 - `patchtype` 可以是 `strategy`、`merge` 或 `json` 之一,并且这些必须匹配 [kubectl 支持](/zh-cn/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch) 的补丁格式。 默认补丁类型是 `strategic` 的。 - `extension` 必须是 `json` 或 `yaml`。 -- `suffix` 是一个可选字符串,可用于确定首先按字母数字应用哪些补丁。 {{< note >}} 保持加密密钥的机密性,包括在生成密钥时,甚至理想的情况下在你不再主动使用密钥后也要保密。 @@ -913,14 +913,34 @@ Kubernetes cluster has multiple control plane hosts, so there is more to do. If you have multiple API servers in your cluster, you should deploy the changes in turn to each API server. - -Make sure that you use the **same** encryption configuration on each -control plane host. --> ### 重新配置其他控制平面主机 {#api-server-config-update-more} 如果你的集群中有多个 API 服务器,应轮流将更改部署到每个 API 服务器。 +{{< caution >}} + +对于具有两个或更多控制平面节点的集群配置,每个控制平面节点的加密配置应该是相同的。 + +如果控制平面节点间的加密驱动配置不一致,这种差异可能导致 kube-apiserver 无法解密数据。 +{{< /caution >}} + + +你在计划更新集群的加密配置时,请确保控制平面中的 API 服务器在任何时候都能解密存储的数据(即使是在更改逐步实施的过程中也是如此)。 + 确保在每个控制平面主机上使用**相同的**加密配置。 [必需]

          -authentication/v1.UserInfo +authentication/v1.UserInfo + +একটি কুবারনেটিস অবজেক্ট সাধারণত একটি "record of intent" - একবার আপনি অবজেক্টটি তৈরি করলে, +কুবারনেটিস {{< glossary_tooltip text="কন্ট্রোল প্লেনটি " term_id="control-plane" >}} +এটির প্রতিনিধিত্ব করে এমন আইটেমটি আসলে বিদ্যমান আছে কিনা তা নিশ্চিত করতে ক্রমাগত কাজ করে। +একটি অবজেক্ট তৈরি করে, আপনি কুবারনেটিস সিস্টেমকে কার্যকরভাবে বলছেন যে আপনি আপনার ক্লাস্টারের +ওয়ার্কলোডের সেই অংশটি কেমন দেখতে চান; এটি আপনার ক্লাস্টারের কাঙ্ক্ষিত অবস্থা। From ce4c6f234d73706038cdb4fac542b6587ae0c56d Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Tue, 7 May 2024 21:18:26 +0600 Subject: [PATCH 0848/1086] Update object.md --- content/bn/docs/reference/glossary/object.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/content/bn/docs/reference/glossary/object.md b/content/bn/docs/reference/glossary/object.md index c12aba24b4..2ba25d021b 100644 --- a/content/bn/docs/reference/glossary/object.md +++ b/content/bn/docs/reference/glossary/object.md @@ -9,8 +9,7 @@ aka: tags: - fundamental --- - -কুবারনেটিস সিস্টেমের একটি সত্তা। কুবারনেটিস API আপনার ক্লাস্টারের অবস্থা উপস্থাপন করতে + কুবারনেটিস সিস্টেমের একটি সত্তা। কুবারনেটিস API আপনার ক্লাস্টারের অবস্থা উপস্থাপন করতে এই সত্তাগুলি ব্যবহার করে। From 4f66c40d3e24b400e060ccf8fea7738d0f3d4af3 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Tue, 7 May 2024 21:24:46 +0600 Subject: [PATCH 0849/1086] Create replication-controller.md --- .../glossary/replication-controller.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 content/bn/docs/reference/glossary/replication-controller.md 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 0000000000..0e542650a2 --- /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 >}} From 51b0523e1ef6887e3345d3b7604433a204052260 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 21:50:31 +0600 Subject: [PATCH 0850/1086] Create cassandra-service.yaml --- .../application/cassandra/cassandra-service.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 content/bn/examples/application/cassandra/cassandra-service.yaml diff --git a/content/bn/examples/application/cassandra/cassandra-service.yaml b/content/bn/examples/application/cassandra/cassandra-service.yaml new file mode 100644 index 0000000000..31bee74b58 --- /dev/null +++ b/content/bn/examples/application/cassandra/cassandra-service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + app: cassandra + name: cassandra +spec: + clusterIP: None + ports: + - port: 9042 + selector: + app: cassandra From 99650adcedba8c962f98b021cb45437e978720c6 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 21:51:01 +0600 Subject: [PATCH 0851/1086] Create cassandra-statefulset.yaml --- .../cassandra/cassandra-statefulset.yaml | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 content/bn/examples/application/cassandra/cassandra-statefulset.yaml diff --git a/content/bn/examples/application/cassandra/cassandra-statefulset.yaml b/content/bn/examples/application/cassandra/cassandra-statefulset.yaml new file mode 100644 index 0000000000..a7bdbedc9c --- /dev/null +++ b/content/bn/examples/application/cassandra/cassandra-statefulset.yaml @@ -0,0 +1,100 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: cassandra + labels: + app: cassandra +spec: + serviceName: cassandra + replicas: 3 + selector: + matchLabels: + app: cassandra + template: + metadata: + labels: + app: cassandra + spec: + terminationGracePeriodSeconds: 1800 + containers: + - name: cassandra + image: gcr.io/google-samples/cassandra:v13 + imagePullPolicy: Always + ports: + - containerPort: 7000 + name: intra-node + - containerPort: 7001 + name: tls-intra-node + - containerPort: 7199 + name: jmx + - containerPort: 9042 + name: cql + resources: + limits: + cpu: "500m" + memory: 1Gi + requests: + cpu: "500m" + memory: 1Gi + securityContext: + capabilities: + add: + - IPC_LOCK + lifecycle: + preStop: + exec: + command: + - /bin/sh + - -c + - nodetool drain + env: + - name: MAX_HEAP_SIZE + value: 512M + - name: HEAP_NEWSIZE + value: 100M + - name: CASSANDRA_SEEDS + value: "cassandra-0.cassandra.default.svc.cluster.local" + - name: CASSANDRA_CLUSTER_NAME + value: "K8Demo" + - name: CASSANDRA_DC + value: "DC1-K8Demo" + - name: CASSANDRA_RACK + value: "Rack1-K8Demo" + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + readinessProbe: + exec: + command: + - /bin/bash + - -c + - /ready-probe.sh + initialDelaySeconds: 15 + timeoutSeconds: 5 + # These volume mounts are persistent. They are like inline claims, + # but not exactly because the names need to match exactly one of + # the stateful pod volumes. + volumeMounts: + - name: cassandra-data + mountPath: /cassandra_data + # These are converted to volume claims by the controller + # and mounted at the paths mentioned above. + # do not use these in production until ssd GCEPersistentDisk or other ssd pd + volumeClaimTemplates: + - metadata: + name: cassandra-data + spec: + accessModes: [ "ReadWriteOnce" ] + storageClassName: fast + resources: + requests: + storage: 1Gi +--- +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: fast +provisioner: k8s.io/minikube-hostpath +parameters: + type: pd-ssd From 5bab350dc3007316ceb140e8eb0b406fe6dc4704 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 21:56:34 +0600 Subject: [PATCH 0852/1086] Create frontend-deployment.yaml --- .../guestbook/frontend-deployment.yaml | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 content/bn/examples/application/guestbook/frontend-deployment.yaml diff --git a/content/bn/examples/application/guestbook/frontend-deployment.yaml b/content/bn/examples/application/guestbook/frontend-deployment.yaml new file mode 100644 index 0000000000..b4639929ad --- /dev/null +++ b/content/bn/examples/application/guestbook/frontend-deployment.yaml @@ -0,0 +1,29 @@ +# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook +apiVersion: apps/v1 +kind: Deployment +metadata: + name: frontend +spec: + replicas: 3 + selector: + matchLabels: + app: guestbook + tier: frontend + template: + metadata: + labels: + app: guestbook + tier: frontend + spec: + containers: + - name: php-redis + image: us-docker.pkg.dev/google-samples/containers/gke/gb-frontend:v5 + env: + - name: GET_HOSTS_FROM + value: "dns" + resources: + requests: + cpu: 100m + memory: 100Mi + ports: + - containerPort: 80 From 5e5bbd5996ffe178ea9aca1cb66b74f990c986a2 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 21:57:07 +0600 Subject: [PATCH 0853/1086] Create frontend-service.yaml --- .../guestbook/frontend-service.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/application/guestbook/frontend-service.yaml diff --git a/content/bn/examples/application/guestbook/frontend-service.yaml b/content/bn/examples/application/guestbook/frontend-service.yaml new file mode 100644 index 0000000000..14a8ded8ab --- /dev/null +++ b/content/bn/examples/application/guestbook/frontend-service.yaml @@ -0,0 +1,19 @@ +# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook +apiVersion: v1 +kind: Service +metadata: + name: frontend + labels: + app: guestbook + tier: frontend +spec: + # if your cluster supports it, uncomment the following to automatically create + # an external load-balanced IP for the frontend service. + # type: LoadBalancer + #type: LoadBalancer + ports: + # the port that this service should serve on + - port: 80 + selector: + app: guestbook + tier: frontend From 8390b45dd95609f940ee99af6986245434d75828 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 21:57:37 +0600 Subject: [PATCH 0854/1086] Create redis-follower-deployment.yaml --- .../guestbook/redis-follower-deployment.yaml | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 content/bn/examples/application/guestbook/redis-follower-deployment.yaml diff --git a/content/bn/examples/application/guestbook/redis-follower-deployment.yaml b/content/bn/examples/application/guestbook/redis-follower-deployment.yaml new file mode 100644 index 0000000000..a221e47e6f --- /dev/null +++ b/content/bn/examples/application/guestbook/redis-follower-deployment.yaml @@ -0,0 +1,30 @@ +# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis-follower + labels: + app: redis + role: follower + tier: backend +spec: + replicas: 2 + selector: + matchLabels: + app: redis + template: + metadata: + labels: + app: redis + role: follower + tier: backend + spec: + containers: + - name: follower + image: us-docker.pkg.dev/google-samples/containers/gke/gb-redis-follower:v2 + resources: + requests: + cpu: 100m + memory: 100Mi + ports: + - containerPort: 6379 From e8b1ef91452c11c0ee541f31f5b4fcdc5480fa89 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 21:58:07 +0600 Subject: [PATCH 0855/1086] Create redis-follower-service.yaml --- .../guestbook/redis-follower-service.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/bn/examples/application/guestbook/redis-follower-service.yaml diff --git a/content/bn/examples/application/guestbook/redis-follower-service.yaml b/content/bn/examples/application/guestbook/redis-follower-service.yaml new file mode 100644 index 0000000000..e40607e719 --- /dev/null +++ b/content/bn/examples/application/guestbook/redis-follower-service.yaml @@ -0,0 +1,17 @@ +# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook +apiVersion: v1 +kind: Service +metadata: + name: redis-follower + labels: + app: redis + role: follower + tier: backend +spec: + ports: + # the port that this service should serve on + - port: 6379 + selector: + app: redis + role: follower + tier: backend From 06407756728dbccf26842829f660a7a0d8f2b423 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 21:58:40 +0600 Subject: [PATCH 0856/1086] Create redis-leader-deployment.yaml --- .../guestbook/redis-leader-deployment.yaml | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 content/bn/examples/application/guestbook/redis-leader-deployment.yaml diff --git a/content/bn/examples/application/guestbook/redis-leader-deployment.yaml b/content/bn/examples/application/guestbook/redis-leader-deployment.yaml new file mode 100644 index 0000000000..70122fba81 --- /dev/null +++ b/content/bn/examples/application/guestbook/redis-leader-deployment.yaml @@ -0,0 +1,30 @@ +# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis-leader + labels: + app: redis + role: leader + tier: backend +spec: + replicas: 1 + selector: + matchLabels: + app: redis + template: + metadata: + labels: + app: redis + role: leader + tier: backend + spec: + containers: + - name: leader + image: "docker.io/redis:6.0.5" + resources: + requests: + cpu: 100m + memory: 100Mi + ports: + - containerPort: 6379 From 9ca9a7fcc5c07d18c8cb8ae3e26b0ed479ef2776 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 21:59:10 +0600 Subject: [PATCH 0857/1086] Create redis-leader-service.yaml --- .../guestbook/redis-leader-service.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/bn/examples/application/guestbook/redis-leader-service.yaml diff --git a/content/bn/examples/application/guestbook/redis-leader-service.yaml b/content/bn/examples/application/guestbook/redis-leader-service.yaml new file mode 100644 index 0000000000..439334f99b --- /dev/null +++ b/content/bn/examples/application/guestbook/redis-leader-service.yaml @@ -0,0 +1,17 @@ +# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook +apiVersion: v1 +kind: Service +metadata: + name: redis-leader + labels: + app: redis + role: leader + tier: backend +spec: + ports: + - port: 6379 + targetPort: 6379 + selector: + app: redis + role: leader + tier: backend From 435efe3c92736152f414ef8ef17554a9a7d9b94e Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Tue, 7 May 2024 21:59:15 +0600 Subject: [PATCH 0858/1086] Typo fixed release.md --- content/bn/releases/release.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index b0a9cc9745..7b4235516e 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -7,7 +7,7 @@ auto_generated: true {{< warning >}} -এই কনটেন্ট স্বয়ংক্রিয়ভাবে তৈরি এবং লিঙ্কগুলি কাজ নাও করতে পারে৷ উকুমেন্টটির সোর্স অবস্থিত [এখানে](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-release/release.md). +এই কনটেন্ট স্বয়ংক্রিয়ভাবে তৈরি এবং লিঙ্কগুলি কাজ নাও করতে পারে৷ ডকুমেন্টটির সোর্স অবস্থিত [এখানে](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-release/release.md). {{< /warning >}} # মাইলস্টোন রিলিজের জন্য টার্গেটিং এনহ্যান্সমেন্টস, ইস্যু এবং PR @@ -33,8 +33,8 @@ auto_generated: true - [প্রাইওরিটি লেবেল](#priority-label) - [ইস্যু/PR লেবেল](#issuepr-kind-label) -শেফারডিং এনহ্যান্সমেন্ট, ইস্যু এবং পুল রিকুয়েস্ট করার প্রক্রিয়া -কুবারনেটিস রিলিজে একাধিক স্টেকহোল্ডারদের অংশগ্রহণ বাড়ায়: +একটি Kubernetes রিলিজে বর্ধিতকরণ, সমস্যা, এবং পুল অনুরোধের শেফারডিং(shepherding) +প্রক্রিয়া একাধিক স্টেকহোল্ডারকে বিস্তৃত করে: - এনহ্যান্সমেন্টস, ইস্যু, এবং পুল রিকুয়েস্ট ওনার - SIG লিডারশিপ @@ -82,8 +82,8 @@ auto_generated: true [রিলিজ ম্যানেজার][release-managers] দ্বারা অনুমোদিত। পূর্বে, মাইলস্টোন-লক্ষ্যযুক্ত পুল রিকুয়েস্টের জন্য -একটি সংস্থায়িত GitHub ইস্যু খোলা প্রয়োজন ছিল, কিন্তু এটি আর প্রয়োজন নয় -ফিচার বা এনহ্যান্সমেন্ট হলো ইফেক্টিভ GitHub ইস্যু বা [KEPs][keps] যা পরবর্তী +একটি সংস্থায়িত গিটহাব ইস্যু খোলা প্রয়োজন ছিল, কিন্তু এটি আর প্রয়োজন নয় +ফিচার বা এনহ্যান্সমেন্ট হলো ইফেক্টিভ গিটহাব ইস্যু বা [KEPs][keps] যা পরবর্তী পুল রিকুয়েস্টের পথে পরিচালিত হয়। সাধারণ লেবেলিং প্রক্রিয়াটি আর্টিফ্যাক্ট টাইপ জুড়ে সামঞ্জস্যপূর্ণ হওয়া উচিত। @@ -115,7 +115,7 @@ auto_generated: true চূড়ান্ত প্রকাশের তারিখের আগে ~4 সপ্তাহের সময়কাল, যে সময়ে শুধুমাত্র ক্রিটিকাল বাগ ফিক্স রিলিজে মার্জ করা হয়েছে। -- *[প্রুনিং](https://git.k8s.io/sig-release/releases/release_phases.md#pruning)*: +- *[Pruning](https://git.k8s.io/sig-release/releases/release_phases.md#pruning)*: একটি রিলিজ মাইলস্টোন থেকে একটি এনহ্যান্সমেন্ট অপসারণের প্রক্রিয়া যদি এটি সম্পূর্ণরূপে বাস্তবায়িত বা অন্যথায় স্থিতিশীল নয় বলে মনে করা হয়। @@ -128,11 +128,11 @@ auto_generated: true - *রিলিজ ব্রাঞ্চ*: Git ব্রাঞ্চ `release-X.Y` তৈরি করা হয়েছে `vX.Y` মাইলস্টোনের জন্য। - `vX.Y-rc.0` রিলিজের সময় তৈরি করা হয়েছে এবং এর পরে রক্ষণাবেক্ষণ করা হয়েছে - প্রায় 12 মাসের জন্য `vX.Y.Z` প্যাচ রিলিজ সহ মুক্তি। + `vX.Y-rc.0` রিলিজের সময় তৈরি করা হয়েছে এবং রিলিজের পর + প্রায় ১২ মাস ধরে `vX.Y.Z` প্যাচ রিলিজের সাথে রক্ষণাবেক্ষণ করা হয়েছে। - দ্রষ্টব্য: রিলিজ 1.19 এবং পরবর্তী ভার্সন 1 বছরের প্যাচ রিলিজ সমর্থন পায়, এবং - রিলিজ 1.18 এবং তার আগে 9 মাসের প্যাচ রিলিজ সমর্থন পেয়েছে। + দ্রষ্টব্য: রিলিজ 1.19 এবং পরবর্তী ভার্সন 1 বছরের প্যাচ রিলিজ সাপোর্ট পায়, এবং + রিলিজ 1.18 এবং তার আগে 9 মাসের প্যাচ রিলিজ সাপোর্ট পেয়েছে। ## রিলিজ সাইকেল From 439c3bea9c21a9d9e3303aaa17fc4aa04497169a Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:00:05 +0600 Subject: [PATCH 0859/1086] Create php-apache.yaml --- .../examples/application/hpa/php-apache.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 content/bn/examples/application/hpa/php-apache.yaml diff --git a/content/bn/examples/application/hpa/php-apache.yaml b/content/bn/examples/application/hpa/php-apache.yaml new file mode 100644 index 0000000000..1c49aca6a1 --- /dev/null +++ b/content/bn/examples/application/hpa/php-apache.yaml @@ -0,0 +1,18 @@ +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: php-apache +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: php-apache + minReplicas: 1 + maxReplicas: 10 + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 50 From 590d005587968249f3639206cc791f5790fad8ab Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:01:17 +0600 Subject: [PATCH 0860/1086] Create Dockerfile --- .../bn/examples/application/job/rabbitmq/Dockerfile | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 content/bn/examples/application/job/rabbitmq/Dockerfile diff --git a/content/bn/examples/application/job/rabbitmq/Dockerfile b/content/bn/examples/application/job/rabbitmq/Dockerfile new file mode 100644 index 0000000000..50faab23f4 --- /dev/null +++ b/content/bn/examples/application/job/rabbitmq/Dockerfile @@ -0,0 +1,10 @@ +# Specify BROKER_URL and QUEUE when running +FROM ubuntu:18.04 + +RUN apt-get update && \ + apt-get install -y curl ca-certificates amqp-tools python \ + --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* +COPY ./worker.py /worker.py + +CMD /usr/bin/amqp-consume --url=$BROKER_URL -q $QUEUE -c 1 /worker.py From 375159e37b06a4ec9b8a0a91329fa9607d2e0d1c Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:01:48 +0600 Subject: [PATCH 0861/1086] Create job.yaml --- .../application/job/rabbitmq/job.yaml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 content/bn/examples/application/job/rabbitmq/job.yaml diff --git a/content/bn/examples/application/job/rabbitmq/job.yaml b/content/bn/examples/application/job/rabbitmq/job.yaml new file mode 100644 index 0000000000..4e1a61892b --- /dev/null +++ b/content/bn/examples/application/job/rabbitmq/job.yaml @@ -0,0 +1,20 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: job-wq-1 +spec: + completions: 8 + parallelism: 2 + template: + metadata: + name: job-wq-1 + spec: + containers: + - name: c + image: gcr.io//job-wq-1 + env: + - name: BROKER_URL + value: amqp://guest:guest@rabbitmq-service:5672 + - name: QUEUE + value: job1 + restartPolicy: OnFailure From b5d25ece5294b3adaff7d47eec4813b2deb6bebf Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:02:24 +0600 Subject: [PATCH 0862/1086] Create rabbitmq-service.yaml --- .../application/job/rabbitmq/rabbitmq-service.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 content/bn/examples/application/job/rabbitmq/rabbitmq-service.yaml diff --git a/content/bn/examples/application/job/rabbitmq/rabbitmq-service.yaml b/content/bn/examples/application/job/rabbitmq/rabbitmq-service.yaml new file mode 100644 index 0000000000..2f7fb06dcf --- /dev/null +++ b/content/bn/examples/application/job/rabbitmq/rabbitmq-service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + component: rabbitmq + name: rabbitmq-service +spec: + ports: + - port: 5672 + selector: + app.kubernetes.io/name: task-queue + app.kubernetes.io/component: rabbitmq From 916440f247cf2d70713dc35c2bbd69957ccdc852 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:02:57 +0600 Subject: [PATCH 0863/1086] Create rabbitmq-statefulset.yaml --- .../job/rabbitmq/rabbitmq-statefulset.yaml | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 content/bn/examples/application/job/rabbitmq/rabbitmq-statefulset.yaml diff --git a/content/bn/examples/application/job/rabbitmq/rabbitmq-statefulset.yaml b/content/bn/examples/application/job/rabbitmq/rabbitmq-statefulset.yaml new file mode 100644 index 0000000000..502598ddf9 --- /dev/null +++ b/content/bn/examples/application/job/rabbitmq/rabbitmq-statefulset.yaml @@ -0,0 +1,36 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + labels: + component: rabbitmq + name: rabbitmq +spec: + replicas: 1 + serviceName: rabbitmq-service + selector: + matchLabels: + app.kubernetes.io/name: task-queue + app.kubernetes.io/component: rabbitmq + template: + metadata: + labels: + app.kubernetes.io/name: task-queue + app.kubernetes.io/component: rabbitmq + spec: + containers: + - image: rabbitmq + name: rabbitmq + ports: + - containerPort: 5672 + resources: + requests: + memory: 16M + limits: + cpu: 250m + memory: 512M + volumeMounts: + - mountPath: /var/lib/rabbitmq + name: rabbitmq-data + volumes: + - name: rabbitmq-data + emptyDir: {} From 38d9c268a50a3aae950f463c84ab0f818256e9a0 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:03:49 +0600 Subject: [PATCH 0864/1086] Create worker.py --- content/bn/examples/application/job/rabbitmq/worker.py | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 content/bn/examples/application/job/rabbitmq/worker.py diff --git a/content/bn/examples/application/job/rabbitmq/worker.py b/content/bn/examples/application/job/rabbitmq/worker.py new file mode 100644 index 0000000000..88a7fcf96d --- /dev/null +++ b/content/bn/examples/application/job/rabbitmq/worker.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +# Just prints standard out and sleeps for 10 seconds. +import sys +import time +print("Processing " + sys.stdin.readlines()[0]) +time.sleep(10) From 862936d488bc440679c54b31f842164da190f4a2 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:04:43 +0600 Subject: [PATCH 0865/1086] Create Dockerfile --- content/bn/examples/application/job/Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 content/bn/examples/application/job/Dockerfile diff --git a/content/bn/examples/application/job/Dockerfile b/content/bn/examples/application/job/Dockerfile new file mode 100644 index 0000000000..2de23b3c98 --- /dev/null +++ b/content/bn/examples/application/job/Dockerfile @@ -0,0 +1,6 @@ +FROM python +RUN pip install redis +COPY ./worker.py /worker.py +COPY ./rediswq.py /rediswq.py + +CMD python worker.py From 5560d40421944701bb30e2f98298b5d3066ccea6 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:05:29 +0600 Subject: [PATCH 0866/1086] Create job.yaml --- content/bn/examples/application/job/job.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/application/job/job.yaml diff --git a/content/bn/examples/application/job/job.yaml b/content/bn/examples/application/job/job.yaml new file mode 100644 index 0000000000..ee7a06c732 --- /dev/null +++ b/content/bn/examples/application/job/job.yaml @@ -0,0 +1,14 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: job-wq-2 +spec: + parallelism: 2 + template: + metadata: + name: job-wq-2 + spec: + containers: + - name: c + image: gcr.io/myproject/job-wq-2 + restartPolicy: OnFailure From 77dc5cd9cd76c7c91dd07124fd70497d0d279164 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:06:33 +0600 Subject: [PATCH 0867/1086] Delete content/bn/examples/application/job/Dockerfile --- content/bn/examples/application/job/Dockerfile | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 content/bn/examples/application/job/Dockerfile diff --git a/content/bn/examples/application/job/Dockerfile b/content/bn/examples/application/job/Dockerfile deleted file mode 100644 index 2de23b3c98..0000000000 --- a/content/bn/examples/application/job/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM python -RUN pip install redis -COPY ./worker.py /worker.py -COPY ./rediswq.py /rediswq.py - -CMD python worker.py From 87f8d20e718131149800281548202498524fd53d Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:06:46 +0600 Subject: [PATCH 0868/1086] Delete content/bn/examples/application/job/job.yaml --- content/bn/examples/application/job/job.yaml | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 content/bn/examples/application/job/job.yaml diff --git a/content/bn/examples/application/job/job.yaml b/content/bn/examples/application/job/job.yaml deleted file mode 100644 index ee7a06c732..0000000000 --- a/content/bn/examples/application/job/job.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: batch/v1 -kind: Job -metadata: - name: job-wq-2 -spec: - parallelism: 2 - template: - metadata: - name: job-wq-2 - spec: - containers: - - name: c - image: gcr.io/myproject/job-wq-2 - restartPolicy: OnFailure From 89655619ad782b815aa8d9f5f5f3df834e0db38f Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:07:34 +0600 Subject: [PATCH 0869/1086] Create Dockerfile --- content/bn/examples/application/job/redis/Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 content/bn/examples/application/job/redis/Dockerfile diff --git a/content/bn/examples/application/job/redis/Dockerfile b/content/bn/examples/application/job/redis/Dockerfile new file mode 100644 index 0000000000..2de23b3c98 --- /dev/null +++ b/content/bn/examples/application/job/redis/Dockerfile @@ -0,0 +1,6 @@ +FROM python +RUN pip install redis +COPY ./worker.py /worker.py +COPY ./rediswq.py /rediswq.py + +CMD python worker.py From 59e12424d877d949a9bb49df02f6a7661621e669 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:08:05 +0600 Subject: [PATCH 0870/1086] Create job.yaml --- content/bn/examples/application/job/redis/job.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/application/job/redis/job.yaml diff --git a/content/bn/examples/application/job/redis/job.yaml b/content/bn/examples/application/job/redis/job.yaml new file mode 100644 index 0000000000..ee7a06c732 --- /dev/null +++ b/content/bn/examples/application/job/redis/job.yaml @@ -0,0 +1,14 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: job-wq-2 +spec: + parallelism: 2 + template: + metadata: + name: job-wq-2 + spec: + containers: + - name: c + image: gcr.io/myproject/job-wq-2 + restartPolicy: OnFailure From c9db20a7ad8c8a229bb888c993df22aa52c0a51e Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:08:35 +0600 Subject: [PATCH 0871/1086] Create redis-pod.yaml --- .../examples/application/job/redis/redis-pod.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 content/bn/examples/application/job/redis/redis-pod.yaml diff --git a/content/bn/examples/application/job/redis/redis-pod.yaml b/content/bn/examples/application/job/redis/redis-pod.yaml new file mode 100644 index 0000000000..ae0c43a793 --- /dev/null +++ b/content/bn/examples/application/job/redis/redis-pod.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: redis-master + labels: + app: redis +spec: + containers: + - name: master + image: redis + env: + - name: MASTER + value: "true" + ports: + - containerPort: 6379 From 0c27402a8c108ff464816cd959fc3a1df8d8aa2e Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:09:04 +0600 Subject: [PATCH 0872/1086] Create redis-service.yaml --- .../examples/application/job/redis/redis-service.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 content/bn/examples/application/job/redis/redis-service.yaml diff --git a/content/bn/examples/application/job/redis/redis-service.yaml b/content/bn/examples/application/job/redis/redis-service.yaml new file mode 100644 index 0000000000..85f2ca2271 --- /dev/null +++ b/content/bn/examples/application/job/redis/redis-service.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Service +metadata: + name: redis +spec: + ports: + - port: 6379 + targetPort: 6379 + selector: + app: redis From 864df0fcc525edfd560d0c13e155acbeab2cbd46 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:09:51 +0600 Subject: [PATCH 0873/1086] Create rediswq.py --- .../examples/application/job/redis/rediswq.py | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 content/bn/examples/application/job/redis/rediswq.py diff --git a/content/bn/examples/application/job/redis/rediswq.py b/content/bn/examples/application/job/redis/rediswq.py new file mode 100644 index 0000000000..c868682e90 --- /dev/null +++ b/content/bn/examples/application/job/redis/rediswq.py @@ -0,0 +1,129 @@ +#!/usr/bin/env python + +# Based on http://peter-hoffmann.com/2012/python-simple-queue-redis-queue.html +# and the suggestion in the redis documentation for RPOPLPUSH, at +# http://redis.io/commands/rpoplpush, which suggests how to implement a work-queue. + + +import redis +import uuid +import hashlib + +class RedisWQ(object): + """Simple Finite Work Queue with Redis Backend + + This work queue is finite: as long as no more work is added + after workers start, the workers can detect when the queue + is completely empty. + + The items in the work queue are assumed to have unique values. + + This object is not intended to be used by multiple threads + concurrently. + """ + def __init__(self, name, **redis_kwargs): + """The default connection parameters are: host='localhost', port=6379, db=0 + + The work queue is identified by "name". The library may create other + keys with "name" as a prefix. + """ + self._db = redis.StrictRedis(**redis_kwargs) + # The session ID will uniquely identify this "worker". + self._session = str(uuid.uuid4()) + # Work queue is implemented as two queues: main, and processing. + # Work is initially in main, and moved to processing when a client picks it up. + self._main_q_key = name + self._processing_q_key = name + ":processing" + self._lease_key_prefix = name + ":leased_by_session:" + + def sessionID(self): + """Return the ID for this session.""" + return self._session + + def _main_qsize(self): + """Return the size of the main queue.""" + return self._db.llen(self._main_q_key) + + def _processing_qsize(self): + """Return the size of the main queue.""" + return self._db.llen(self._processing_q_key) + + def empty(self): + """Return True if the queue is empty, including work being done, False otherwise. + + False does not necessarily mean that there is work available to work on right now, + """ + return self._main_qsize() == 0 and self._processing_qsize() == 0 + +# TODO: implement this +# def check_expired_leases(self): +# """Return to the work queueReturn True if the queue is empty, False otherwise.""" +# # Processing list should not be _too_ long since it is approximately as long +# # as the number of active and recently active workers. +# processing = self._db.lrange(self._processing_q_key, 0, -1) +# for item in processing: +# # If the lease key is not present for an item (it expired or was +# # never created because the client crashed before creating it) +# # then move the item back to the main queue so others can work on it. +# if not self._lease_exists(item): +# TODO: transactionally move the key from processing queue to +# to main queue, while detecting if a new lease is created +# or if either queue is modified. + + def _itemkey(self, item): + """Returns a string that uniquely identifies an item (bytes).""" + return hashlib.sha224(item).hexdigest() + + def _lease_exists(self, item): + """True if a lease on 'item' exists.""" + return self._db.exists(self._lease_key_prefix + self._itemkey(item)) + + def lease(self, lease_secs=60, block=True, timeout=None): + """Begin working on an item the work queue. + + Lease the item for lease_secs. After that time, other + workers may consider this client to have crashed or stalled + and pick up the item instead. + + If optional args block is true and timeout is None (the default), block + if necessary until an item is available.""" + if block: + item = self._db.brpoplpush(self._main_q_key, self._processing_q_key, timeout=timeout) + else: + item = self._db.rpoplpush(self._main_q_key, self._processing_q_key) + if item: + # Record that we (this session id) are working on a key. Expire that + # note after the lease timeout. + # Note: if we crash at this line of the program, then GC will see no lease + # for this item a later return it to the main queue. + itemkey = self._itemkey(item) + self._db.setex(self._lease_key_prefix + itemkey, lease_secs, self._session) + return item + + def complete(self, value): + """Complete working on the item with 'value'. + + If the lease expired, the item may not have completed, and some + other worker may have picked it up. There is no indication + of what happened. + """ + self._db.lrem(self._processing_q_key, 0, value) + # If we crash here, then the GC code will try to move the value, but it will + # not be here, which is fine. So this does not need to be a transaction. + itemkey = self._itemkey(value) + self._db.delete(self._lease_key_prefix + itemkey) + +# TODO: add functions to clean up all keys associated with "name" when +# processing is complete. + +# TODO: add a function to add an item to the queue. Atomically +# check if the queue is empty and if so fail to add the item +# since other workers might think work is done and be in the process +# of exiting. + +# TODO(etune): move to my own github for hosting, e.g. github.com/erictune/rediswq-py and +# make it so it can be pip installed by anyone (see +# http://stackoverflow.com/questions/8247605/configuring-so-that-pip-install-can-work-from-github) + +# TODO(etune): finish code to GC expired leases, and call periodically +# e.g. each time lease times out. From 4581331d7aa76a77c63101cbaf2bc633cd126116 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:10:18 +0600 Subject: [PATCH 0874/1086] Create worker.py --- .../examples/application/job/redis/worker.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 content/bn/examples/application/job/redis/worker.py diff --git a/content/bn/examples/application/job/redis/worker.py b/content/bn/examples/application/job/redis/worker.py new file mode 100644 index 0000000000..c3523a4e21 --- /dev/null +++ b/content/bn/examples/application/job/redis/worker.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +import time +import rediswq + +host="redis" +# Uncomment next two lines if you do not have Kube-DNS working. +# import os +# host = os.getenv("REDIS_SERVICE_HOST") + +q = rediswq.RedisWQ(name="job2", host=host) +print("Worker with sessionID: " + q.sessionID()) +print("Initial queue state: empty=" + str(q.empty())) +while not q.empty(): + item = q.lease(lease_secs=10, block=True, timeout=2) + if item is not None: + itemstr = item.decode("utf-8") + print("Working on " + itemstr) + time.sleep(10) # Put your actual work here instead of sleep. + q.complete(item) + else: + print("Waiting for work") +print("Queue empty, exiting") From c2dac0eab5227afc5f15d577d0913c79bb962d23 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:11:09 +0600 Subject: [PATCH 0875/1086] Create cronjob.yaml --- .../bn/examples/application/job/cronjob.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/application/job/cronjob.yaml diff --git a/content/bn/examples/application/job/cronjob.yaml b/content/bn/examples/application/job/cronjob.yaml new file mode 100644 index 0000000000..78d0e2d314 --- /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 From 516ace499f4ad848b08188722a478915a8299705 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:11:46 +0600 Subject: [PATCH 0876/1086] Create indexed-job-vol.yaml --- .../application/job/indexed-job-vol.yaml | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 content/bn/examples/application/job/indexed-job-vol.yaml 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 0000000000..cecc2b7e65 --- /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'] From 6d1cf7dfc8800aa7eea6b7f98c1b1508353b24e1 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:12:26 +0600 Subject: [PATCH 0877/1086] Create job-sidecar.yaml --- .../examples/application/job/job-sidecar.yaml | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 content/bn/examples/application/job/job-sidecar.yaml 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 0000000000..ce483b872e --- /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: {} From adc4facfe60366272f2b5ed5aec5ff5b497bbf8a Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:13:00 +0600 Subject: [PATCH 0878/1086] Create job-tmpl.yaml --- .../bn/examples/application/job/job-tmpl.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 content/bn/examples/application/job/job-tmpl.yaml 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 0000000000..d7dbbafd62 --- /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 From 0687a194f45f3f9fa999f3f13585378c6541c34b Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:13:51 +0600 Subject: [PATCH 0879/1086] Create indexed-job.yaml --- .../examples/application/job/indexed-job.yaml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 content/bn/examples/application/job/indexed-job.yaml 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 0000000000..5b80d35264 --- /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: {} From 68408fa45648a74a3727c2c4c252b00618c062df Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:15:12 +0600 Subject: [PATCH 0880/1086] Create mongo-deployment.yaml --- .../application/mongodb/mongo-deployment.yaml | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 content/bn/examples/application/mongodb/mongo-deployment.yaml diff --git a/content/bn/examples/application/mongodb/mongo-deployment.yaml b/content/bn/examples/application/mongodb/mongo-deployment.yaml new file mode 100644 index 0000000000..04908ce25b --- /dev/null +++ b/content/bn/examples/application/mongodb/mongo-deployment.yaml @@ -0,0 +1,31 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mongo + labels: + app.kubernetes.io/name: mongo + app.kubernetes.io/component: backend +spec: + selector: + matchLabels: + app.kubernetes.io/name: mongo + app.kubernetes.io/component: backend + replicas: 1 + template: + metadata: + labels: + app.kubernetes.io/name: mongo + app.kubernetes.io/component: backend + spec: + containers: + - name: mongo + image: mongo:4.2 + args: + - --bind_ip + - 0.0.0.0 + resources: + requests: + cpu: 100m + memory: 100Mi + ports: + - containerPort: 27017 From 602bc60b0fd579120b565e8f4ff28f1e9192b51c Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:15:41 +0600 Subject: [PATCH 0881/1086] Create mongo-service.yaml --- .../application/mongodb/mongo-service.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 content/bn/examples/application/mongodb/mongo-service.yaml diff --git a/content/bn/examples/application/mongodb/mongo-service.yaml b/content/bn/examples/application/mongodb/mongo-service.yaml new file mode 100644 index 0000000000..b9cef607bc --- /dev/null +++ b/content/bn/examples/application/mongodb/mongo-service.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Service +metadata: + name: mongo + labels: + app.kubernetes.io/name: mongo + app.kubernetes.io/component: backend +spec: + ports: + - port: 27017 + targetPort: 27017 + selector: + app.kubernetes.io/name: mongo + app.kubernetes.io/component: backend From 14218d0ac1355554d6ce83fa86e44baf9e3b7f1b Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:26:24 +0600 Subject: [PATCH 0882/1086] Create mysql-configmap.yaml --- .../application/mysql/mysql-configmap.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 content/bn/examples/application/mysql/mysql-configmap.yaml diff --git a/content/bn/examples/application/mysql/mysql-configmap.yaml b/content/bn/examples/application/mysql/mysql-configmap.yaml new file mode 100644 index 0000000000..715d2f5724 --- /dev/null +++ b/content/bn/examples/application/mysql/mysql-configmap.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: mysql + labels: + app: mysql + app.kubernetes.io/name: mysql +data: + primary.cnf: | + # Apply this config only on the primary. + [mysqld] + log-bin + replica.cnf: | + # Apply this config only on replicas. + [mysqld] + super-read-only From 2fb85d77c57dda1703334a674fc5be7a9039f17b Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:26:57 +0600 Subject: [PATCH 0883/1086] Create mysql-deployment.yaml --- .../application/mysql/mysql-deployment.yaml | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 content/bn/examples/application/mysql/mysql-deployment.yaml diff --git a/content/bn/examples/application/mysql/mysql-deployment.yaml b/content/bn/examples/application/mysql/mysql-deployment.yaml new file mode 100644 index 0000000000..419fbe03d3 --- /dev/null +++ b/content/bn/examples/application/mysql/mysql-deployment.yaml @@ -0,0 +1,43 @@ +apiVersion: v1 +kind: Service +metadata: + name: mysql +spec: + ports: + - port: 3306 + selector: + app: mysql + clusterIP: None +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mysql +spec: + selector: + matchLabels: + app: mysql + strategy: + type: Recreate + template: + metadata: + labels: + app: mysql + spec: + containers: + - image: mysql:5.6 + name: mysql + env: + # Use secret in real usage + - name: MYSQL_ROOT_PASSWORD + value: password + ports: + - containerPort: 3306 + name: mysql + volumeMounts: + - name: mysql-persistent-storage + mountPath: /var/lib/mysql + volumes: + - name: mysql-persistent-storage + persistentVolumeClaim: + claimName: mysql-pv-claim From d97e4ffbe7abbb2f63ed80a98c3f608ff1d5595e Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:27:36 +0600 Subject: [PATCH 0884/1086] Create mysql-pv.yaml --- .../examples/application/mysql/mysql-pv.yaml | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 content/bn/examples/application/mysql/mysql-pv.yaml diff --git a/content/bn/examples/application/mysql/mysql-pv.yaml b/content/bn/examples/application/mysql/mysql-pv.yaml new file mode 100644 index 0000000000..c89779a83f --- /dev/null +++ b/content/bn/examples/application/mysql/mysql-pv.yaml @@ -0,0 +1,26 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: mysql-pv-volume + labels: + type: local +spec: + storageClassName: manual + capacity: + storage: 20Gi + accessModes: + - ReadWriteOnce + hostPath: + path: "/mnt/data" +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: mysql-pv-claim +spec: + storageClassName: manual + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi From be1476e5c449b89f3b4d591f3ac3ff209cd54071 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:28:09 +0600 Subject: [PATCH 0885/1086] Create mysql-services.yaml --- .../application/mysql/mysql-services.yaml | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 content/bn/examples/application/mysql/mysql-services.yaml diff --git a/content/bn/examples/application/mysql/mysql-services.yaml b/content/bn/examples/application/mysql/mysql-services.yaml new file mode 100644 index 0000000000..bc01506678 --- /dev/null +++ b/content/bn/examples/application/mysql/mysql-services.yaml @@ -0,0 +1,32 @@ +# Headless service for stable DNS entries of StatefulSet members. +apiVersion: v1 +kind: Service +metadata: + name: mysql + labels: + app: mysql + app.kubernetes.io/name: mysql +spec: + ports: + - name: mysql + port: 3306 + clusterIP: None + selector: + app: mysql +--- +# Client service for connecting to any MySQL instance for reads. +# For writes, you must instead connect to the primary: mysql-0.mysql. +apiVersion: v1 +kind: Service +metadata: + name: mysql-read + labels: + app: mysql + app.kubernetes.io/name: mysql + readonly: "true" +spec: + ports: + - name: mysql + port: 3306 + selector: + app: mysql From 0f2d563d8668db0344c75c1848a0887dbe2a9c6b Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:28:36 +0600 Subject: [PATCH 0886/1086] Create mysql-statefulset.yaml --- .../application/mysql/mysql-statefulset.yaml | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 content/bn/examples/application/mysql/mysql-statefulset.yaml diff --git a/content/bn/examples/application/mysql/mysql-statefulset.yaml b/content/bn/examples/application/mysql/mysql-statefulset.yaml new file mode 100644 index 0000000000..67755dbb9e --- /dev/null +++ b/content/bn/examples/application/mysql/mysql-statefulset.yaml @@ -0,0 +1,168 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: mysql +spec: + selector: + matchLabels: + app: mysql + app.kubernetes.io/name: mysql + serviceName: mysql + replicas: 3 + template: + metadata: + labels: + app: mysql + app.kubernetes.io/name: mysql + spec: + initContainers: + - name: init-mysql + image: mysql:5.7 + command: + - bash + - "-c" + - | + set -ex + # Generate mysql server-id from pod ordinal index. + [[ $HOSTNAME =~ -([0-9]+)$ ]] || exit 1 + ordinal=${BASH_REMATCH[1]} + echo [mysqld] > /mnt/conf.d/server-id.cnf + # Add an offset to avoid reserved server-id=0 value. + echo server-id=$((100 + $ordinal)) >> /mnt/conf.d/server-id.cnf + # Copy appropriate conf.d files from config-map to emptyDir. + if [[ $ordinal -eq 0 ]]; then + cp /mnt/config-map/primary.cnf /mnt/conf.d/ + else + cp /mnt/config-map/replica.cnf /mnt/conf.d/ + fi + volumeMounts: + - name: conf + mountPath: /mnt/conf.d + - name: config-map + mountPath: /mnt/config-map + - name: clone-mysql + image: gcr.io/google-samples/xtrabackup:1.0 + command: + - bash + - "-c" + - | + set -ex + # Skip the clone if data already exists. + [[ -d /var/lib/mysql/mysql ]] && exit 0 + # Skip the clone on primary (ordinal index 0). + [[ `hostname` =~ -([0-9]+)$ ]] || exit 1 + ordinal=${BASH_REMATCH[1]} + [[ $ordinal -eq 0 ]] && exit 0 + # Clone data from previous peer. + ncat --recv-only mysql-$(($ordinal-1)).mysql 3307 | xbstream -x -C /var/lib/mysql + # Prepare the backup. + xtrabackup --prepare --target-dir=/var/lib/mysql + volumeMounts: + - name: data + mountPath: /var/lib/mysql + subPath: mysql + - name: conf + mountPath: /etc/mysql/conf.d + containers: + - name: mysql + image: mysql:5.7 + env: + - name: MYSQL_ALLOW_EMPTY_PASSWORD + value: "1" + ports: + - name: mysql + containerPort: 3306 + volumeMounts: + - name: data + mountPath: /var/lib/mysql + subPath: mysql + - name: conf + mountPath: /etc/mysql/conf.d + resources: + requests: + cpu: 500m + memory: 1Gi + livenessProbe: + exec: + command: ["mysqladmin", "ping"] + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + readinessProbe: + exec: + # Check we can execute queries over TCP (skip-networking is off). + command: ["mysql", "-h", "127.0.0.1", "-e", "SELECT 1"] + initialDelaySeconds: 5 + periodSeconds: 2 + timeoutSeconds: 1 + - name: xtrabackup + image: gcr.io/google-samples/xtrabackup:1.0 + ports: + - name: xtrabackup + containerPort: 3307 + command: + - bash + - "-c" + - | + set -ex + cd /var/lib/mysql + + # Determine binlog position of cloned data, if any. + if [[ -f xtrabackup_slave_info && "x$( change_master_to.sql.in + # Ignore xtrabackup_binlog_info in this case (it's useless). + rm -f xtrabackup_slave_info xtrabackup_binlog_info + elif [[ -f xtrabackup_binlog_info ]]; then + # We're cloning directly from primary. Parse binlog position. + [[ `cat xtrabackup_binlog_info` =~ ^(.*?)[[:space:]]+(.*?)$ ]] || exit 1 + rm -f xtrabackup_binlog_info xtrabackup_slave_info + echo "CHANGE MASTER TO MASTER_LOG_FILE='${BASH_REMATCH[1]}',\ + MASTER_LOG_POS=${BASH_REMATCH[2]}" > change_master_to.sql.in + fi + + # Check if we need to complete a clone by starting replication. + if [[ -f change_master_to.sql.in ]]; then + echo "Waiting for mysqld to be ready (accepting connections)" + until mysql -h 127.0.0.1 -e "SELECT 1"; do sleep 1; done + + echo "Initializing replication from clone position" + mysql -h 127.0.0.1 \ + -e "$( Date: Tue, 7 May 2024 22:29:35 +0600 Subject: [PATCH 0887/1086] Create nginx-deployment.yaml --- .../application/nginx/nginx-deployment.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/application/nginx/nginx-deployment.yaml diff --git a/content/bn/examples/application/nginx/nginx-deployment.yaml b/content/bn/examples/application/nginx/nginx-deployment.yaml new file mode 100644 index 0000000000..7f608bc47f --- /dev/null +++ b/content/bn/examples/application/nginx/nginx-deployment.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-nginx +spec: + selector: + matchLabels: + app: nginx + replicas: 3 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.14.2 + ports: + - containerPort: 80 From 615fb724c646f7c995961d53f1ccc8ded879c786 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:30:03 +0600 Subject: [PATCH 0888/1086] Create nginx-svc.yaml --- content/bn/examples/application/nginx/nginx-svc.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 content/bn/examples/application/nginx/nginx-svc.yaml diff --git a/content/bn/examples/application/nginx/nginx-svc.yaml b/content/bn/examples/application/nginx/nginx-svc.yaml new file mode 100644 index 0000000000..79963bc5ae --- /dev/null +++ b/content/bn/examples/application/nginx/nginx-svc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: my-nginx-svc + labels: + app: nginx +spec: + type: LoadBalancer + ports: + - port: 80 + selector: + app: nginx From 0024d91b2bd4bd82711f5a3056d42ed8345a1d34 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:40:49 +0600 Subject: [PATCH 0889/1086] Create nginx-deployment-no-replicas.yaml --- .../ssa/nginx-deployment-no-replicas.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 content/bn/examples/application/ssa/nginx-deployment-no-replicas.yaml diff --git a/content/bn/examples/application/ssa/nginx-deployment-no-replicas.yaml b/content/bn/examples/application/ssa/nginx-deployment-no-replicas.yaml new file mode 100644 index 0000000000..c18bdd35c0 --- /dev/null +++ b/content/bn/examples/application/ssa/nginx-deployment-no-replicas.yaml @@ -0,0 +1,18 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment + labels: + app: nginx +spec: + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.14.2 From 369809088151c3699fc1450325ffcbfd0901d2d1 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:41:43 +0600 Subject: [PATCH 0890/1086] Create nginx-deployment.yaml --- .../application/ssa/nginx-deployment.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/application/ssa/nginx-deployment.yaml diff --git a/content/bn/examples/application/ssa/nginx-deployment.yaml b/content/bn/examples/application/ssa/nginx-deployment.yaml new file mode 100644 index 0000000000..7797b13d9a --- /dev/null +++ b/content/bn/examples/application/ssa/nginx-deployment.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment + labels: + app: nginx +spec: + replicas: 3 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.14.2 From b01341b7b5e8b7d4c7c976ee34e2af17586635a0 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:44:53 +0600 Subject: [PATCH 0891/1086] Create web-parallel.yaml --- .../application/web/web-parallel.yaml | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 content/bn/examples/application/web/web-parallel.yaml diff --git a/content/bn/examples/application/web/web-parallel.yaml b/content/bn/examples/application/web/web-parallel.yaml new file mode 100644 index 0000000000..a6633f476c --- /dev/null +++ b/content/bn/examples/application/web/web-parallel.yaml @@ -0,0 +1,47 @@ +apiVersion: v1 +kind: Service +metadata: + name: nginx + labels: + app: nginx +spec: + ports: + - port: 80 + name: web + clusterIP: None + selector: + app: nginx +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: web +spec: + serviceName: "nginx" + podManagementPolicy: "Parallel" + replicas: 2 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: registry.k8s.io/nginx-slim:0.8 + ports: + - containerPort: 80 + name: web + volumeMounts: + - name: www + mountPath: /usr/share/nginx/html + volumeClaimTemplates: + - metadata: + name: www + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 1Gi From bf9703627a4bedd9c7b00ae35289d5a4725aae5a Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:45:31 +0600 Subject: [PATCH 0892/1086] Create web.yaml --- content/bn/examples/application/web/web.yaml | 46 ++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 content/bn/examples/application/web/web.yaml diff --git a/content/bn/examples/application/web/web.yaml b/content/bn/examples/application/web/web.yaml new file mode 100644 index 0000000000..7b12d521a5 --- /dev/null +++ b/content/bn/examples/application/web/web.yaml @@ -0,0 +1,46 @@ +apiVersion: v1 +kind: Service +metadata: + name: nginx + labels: + app: nginx +spec: + ports: + - port: 80 + name: web + clusterIP: None + selector: + app: nginx +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: web +spec: + serviceName: "nginx" + replicas: 2 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: registry.k8s.io/nginx-slim:0.8 + ports: + - containerPort: 80 + name: web + volumeMounts: + - name: www + mountPath: /usr/share/nginx/html + volumeClaimTemplates: + - metadata: + name: www + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 1Gi From eacbfdcf03e97ce1a874bfe4184f3f564a6cb7d9 Mon Sep 17 00:00:00 2001 From: Dipesh Rawat Date: Mon, 22 Apr 2024 19:58:49 +0100 Subject: [PATCH 0893/1086] Update 2019 blog to include author in front-matter Co-authored-by: Tim Bannister --- .../2019-01-14-apiserver-dry-run-and-kubectl-diff.md | 4 ++-- .../2019-01-15-container-storage-interface-ga.md | 4 ++-- .../_posts/2019-01-17-update-volume-snapshot-alpha.md | 6 ++++-- ...-02-06-poseidon-firmament-scheduler-announcement.md | 5 +++-- .../en/blog/_posts/2019-02-11-runc-CVE-2019-5736.md | 4 ++-- ...ing-a-kubernetes-edge-control-plane-for-envoy-v2.md | 10 ++++------ ...mate-operations-on-your-cluster-with-operatorhub.md | 5 ++--- .../2019-03-07-raw-block-volume-support-to-beta.md | 6 +++--- ...03-15-Kubernetes-setup-using-Ansible-and-Vagrant.md | 4 ++-- .../_posts/2019-03-19-kubeedge-k8s-based-edge-intro.md | 5 +++-- ...hats-In-Store-For-Kubernetes-Contributor-Summits.md | 6 +++--- ...3-21-a-guide-to-kubernetes-admission-controllers.md | 4 ++-- .../blog/_posts/2019-03-22-e2e-testing-for-everyone.md | 4 ++-- .../_posts/2019-03-25-1-14-release-announcement.md | 4 ++-- content/en/blog/_posts/2019-03-28-PID-Limiting.md | 4 ++-- ...unning-kubernetes-locally-on-linux-with-minikube.md | 5 +++-- ...ties-debugging-an-intermittent-connection-resets.md | 4 ++-- ...n-level-support-for-nodes-and-windows-containers.md | 5 +++-- .../_posts/2019-04-04-local-persistent-volumes-ga.md | 6 ++++-- ...-04-16-pod-priority-and-preemption-in-kubernetes.md | 4 ++-- .../_posts/2019-04-17-future-of-cloud-providers.md | 6 ++++-- ...ter-Networking-Visibility-in-Kubernetes-Clusters.md | 4 ++-- ...using-Kubernetes-Device-Plugins-and-RuntimeClass.md | 4 ++-- .../blog/_posts/2019-04-26-latest-on-localization.md | 4 ++-- .../2019-05-02-kubecon-diversity-lunch-and-hack.md | 4 ++-- .../2019-05-13-kubernetes-1-14-release-interview.md | 4 ++-- .../2019-05-14-expanding-our-contributor-workshops.md | 5 +++-- ...bernetes-Cloud-Native-and-the-Future-of-Software.md | 5 +++-- ...23-Kyma-extend-and-build-on-kubernetes-with-ease.md | 4 ++-- .../_posts/2019-06-12-contributor-summit-shanghai.md | 4 ++-- .../2019-06-19-kubernetes-1-15-release-announcement.md | 3 ++- .../2019-06-20-Future-of-CRDs-Structural-Schemas.md | 4 ++-- .../en/blog/_posts/2019-06-21-volume-cloning-alpha.md | 4 ++-- content/en/blog/_posts/2019-06-24-kubeadm-ha-v115.md | 10 ++++++---- .../2019-06-25-recap-of-contributor-summit-bcn-2019.md | 4 ++-- .../2019-07-18-some-apis-are-being-deprecated.md | 4 ++-- ...9-07-23-get-started-with-kubernetes-using-python.md | 4 ++-- ...-Gatekeeper-Policy-and-Governance-for-Kubernetes.md | 9 +++++++-- .../en/blog/_posts/2019-08-30-announcing-etcd-3.4.md | 5 +++-- .../2019-09-18-kubernetes-1-16-release-announcement.md | 4 ++-- .../_posts/2019-09-24-san-diego-contributor-summit.md | 6 ++++-- ...9-10-03-2019-Steering-Committee-Election-Results.md | 8 +++++--- ...2019-10-10-contributor-summit-san-diego-schedule.md | 6 ++++-- .../en/blog/_posts/2019-10-29-2019-sig-docs-survey.md | 5 +++-- content/en/blog/_posts/2019-11-05-grokkin-the-docs.md | 4 ++-- .../blog/_posts/2019-11-05-kubernetes-with-microk8s.md | 4 +++- .../2019-11-26-cloud-native-java-controller-sdk.md | 6 +++--- .../blog/_posts/2019-12-02-gardener-project-update.md | 6 +++--- .../2019-12-06-kubernetes-1-16-release-interview.md | 4 ++-- .../_posts/2019-12-09-csi-volume-migration-beta.md | 4 ++-- .../2019-12-09-kubernetes-1.17-release-announcement.md | 4 ++-- .../en/blog/_posts/2019-12-09-volume-snapshot-beta.md | 5 +++-- 52 files changed, 142 insertions(+), 114 deletions(-) diff --git a/content/en/blog/_posts/2019-01-14-apiserver-dry-run-and-kubectl-diff.md b/content/en/blog/_posts/2019-01-14-apiserver-dry-run-and-kubectl-diff.md index 1356b91e47..e1828d4fe1 100644 --- a/content/en/blog/_posts/2019-01-14-apiserver-dry-run-and-kubectl-diff.md +++ b/content/en/blog/_posts/2019-01-14-apiserver-dry-run-and-kubectl-diff.md @@ -2,10 +2,10 @@ layout: blog title: 'APIServer dry-run and kubectl diff' date: 2019-01-14 +author: > + Antoine Pelisse (Google Cloud) --- -**Author**: Antoine Pelisse (Google Cloud, @apelisse) - Declarative configuration management, also known as configuration-as-code, is one of the key strengths of Kubernetes. It allows users to commit the desired state of the cluster, and to keep track of the different versions, improve auditing and diff --git a/content/en/blog/_posts/2019-01-15-container-storage-interface-ga.md b/content/en/blog/_posts/2019-01-15-container-storage-interface-ga.md index b71f37b36c..442817faa3 100644 --- a/content/en/blog/_posts/2019-01-15-container-storage-interface-ga.md +++ b/content/en/blog/_posts/2019-01-15-container-storage-interface-ga.md @@ -2,13 +2,13 @@ title: Container Storage Interface (CSI) for Kubernetes GA date: 2019-01-15 slug: container-storage-interface-ga +author: > + Saad Ali (Google) --- ![Kubernetes Logo](/images/blog-logging/2018-04-10-container-storage-interface-beta/csi-kubernetes.png) ![CSI Logo](/images/blog-logging/2018-04-10-container-storage-interface-beta/csi-logo.png) -**Author:** Saad Ali, Senior Software Engineer, Google - The Kubernetes implementation of the [Container Storage Interface](https://github.com/container-storage-interface/spec/blob/master/spec.md) (CSI) has been promoted to GA in the Kubernetes v1.13 release. Support for CSI was [introduced as alpha](http://blog.kubernetes.io/2018/01/introducing-container-storage-interface.html) in Kubernetes v1.9 release, and [promoted to beta](https://kubernetes.io/blog/2018/04/10/container-storage-interface-beta/) in the Kubernetes v1.10 release. The GA milestone indicates that Kubernetes users may depend on the feature and its API without fear of backwards incompatible changes in future causing regressions. GA features are protected by the [Kubernetes deprecation policy](/docs/reference/using-api/deprecation-policy/). diff --git a/content/en/blog/_posts/2019-01-17-update-volume-snapshot-alpha.md b/content/en/blog/_posts/2019-01-17-update-volume-snapshot-alpha.md index 89872c3a7e..a4a6e374b1 100644 --- a/content/en/blog/_posts/2019-01-17-update-volume-snapshot-alpha.md +++ b/content/en/blog/_posts/2019-01-17-update-volume-snapshot-alpha.md @@ -1,10 +1,12 @@ --- title: Update on Volume Snapshot Alpha for Kubernetes date: 2019-01-17 +author: > + DJing Xu (Google), + Xing Yang (Huawei), + Saad Ali (Google) --- -**Authors:** Jing Xu (Google), Xing Yang (Huawei), Saad Ali (Google) - Volume snapshotting support was introduced in Kubernetes v1.12 as an alpha feature. In Kubernetes v1.13, it remains an alpha feature, but a few enhancements were added and some breaking changes were made. This post summarizes the changes. ## Breaking Changes diff --git a/content/en/blog/_posts/2019-02-06-poseidon-firmament-scheduler-announcement.md b/content/en/blog/_posts/2019-02-06-poseidon-firmament-scheduler-announcement.md index 54d63b675d..a59e715d59 100644 --- a/content/en/blog/_posts/2019-02-06-poseidon-firmament-scheduler-announcement.md +++ b/content/en/blog/_posts/2019-02-06-poseidon-firmament-scheduler-announcement.md @@ -1,10 +1,11 @@ --- title: Poseidon-Firmament Scheduler – Flow Network Graph Based Scheduler date: 2019-02-06 +author: > + Deepak Vij (Huawei), + Shivram Shrivastava (Huawei) --- -**Authors:** Deepak Vij (Huawei), Shivram Shrivastava (Huawei) - ## Introduction Cluster Management systems such as Mesos, Google Borg, Kubernetes etc. in a cloud scale datacenter environment (also termed as ***Datacenter-as-a-Computer*** or ***Warehouse-Scale Computing - WSC***) typically manage application workloads by performing tasks such as tracking machine live-ness, starting, monitoring, terminating workloads and more importantly using a **Cluster Scheduler** to decide on workload placements. diff --git a/content/en/blog/_posts/2019-02-11-runc-CVE-2019-5736.md b/content/en/blog/_posts/2019-02-11-runc-CVE-2019-5736.md index 027cc2e9bf..da81f580e4 100644 --- a/content/en/blog/_posts/2019-02-11-runc-CVE-2019-5736.md +++ b/content/en/blog/_posts/2019-02-11-runc-CVE-2019-5736.md @@ -2,10 +2,10 @@ title: Runc and CVE-2019-5736 date: 2019-02-11 evergreen: false # mentions PodSecurityPolicy +author: > + Kubernetes Product Security Committee --- -Authors: Kubernetes Product Security Committee - This morning [a container escape vulnerability in runc was announced](https://www.openwall.com/lists/oss-security/2019/02/11/2). We wanted to provide some guidance to Kubernetes users to ensure everyone is safe and secure. ## What is runc? diff --git a/content/en/blog/_posts/2019-02-12-building-a-kubernetes-edge-control-plane-for-envoy-v2.md b/content/en/blog/_posts/2019-02-12-building-a-kubernetes-edge-control-plane-for-envoy-v2.md index feea751e85..3bd40e458e 100644 --- a/content/en/blog/_posts/2019-02-12-building-a-kubernetes-edge-control-plane-for-envoy-v2.md +++ b/content/en/blog/_posts/2019-02-12-building-a-kubernetes-edge-control-plane-for-envoy-v2.md @@ -2,15 +2,13 @@ title: Building a Kubernetes Edge (Ingress) Control Plane for Envoy v2 date: 2019-02-12 slug: building-a-kubernetes-edge-control-plane-for-envoy-v2 +author: > + Daniel Bryant (Datawire), + Flynn (Datawire), + Richard Li (Datawire) --- -**Author:** -Daniel Bryant, Product Architect, Datawire; -Flynn, Ambassador Lead Developer, Datawire; -Richard Li, CEO and Co-founder, Datawire - - Kubernetes has become the de facto runtime for container-based microservice applications, but this orchestration framework alone does not provide all of the infrastructure necessary for running a distributed system. Microservices typically communicate through Layer 7 protocols such as HTTP, gRPC, or WebSockets, and therefore having the ability to make routing decisions, manipulate protocol metadata, and observe at this layer is vital. However, traditional load balancers and edge proxies have predominantly focused on L3/4 traffic. This is where the [Envoy Proxy](https://www.envoyproxy.io/) comes into play. Envoy proxy was designed as a [universal data plane](https://blog.envoyproxy.io/the-universal-data-plane-api-d15cec7a) from the ground-up by the Lyft Engineering team for today's distributed, L7-centric world, with broad support for L7 protocols, a real-time API for managing its configuration, first-class observability, and high performance within a small memory footprint. However, Envoy's vast feature set and flexibility of operation also makes its configuration highly complicated -- this is evident from looking at its rich but verbose [control plane](https://blog.envoyproxy.io/service-mesh-data-plane-vs-control-plane-2774e720f7fc) syntax. diff --git a/content/en/blog/_posts/2019-02-28-automate-operations-on-your-cluster-with-operatorhub.md b/content/en/blog/_posts/2019-02-28-automate-operations-on-your-cluster-with-operatorhub.md index 6f58d9c826..2b869b789b 100644 --- a/content/en/blog/_posts/2019-02-28-automate-operations-on-your-cluster-with-operatorhub.md +++ b/content/en/blog/_posts/2019-02-28-automate-operations-on-your-cluster-with-operatorhub.md @@ -1,11 +1,10 @@ --- title: Automate Operations on your Cluster with OperatorHub.io date: 2019-02-28 +author: > + Diane Mueller (Red Hat) --- -**Author:** -Diane Mueller, Director of Community Development, Cloud Platforms, Red Hat - One of the important challenges facing developers and Kubernetes administrators has been a lack of ability to quickly find common services that are operationally ready for Kubernetes. Typically, the presence of an Operator for a specific service - a pattern that was introduced in 2016 and has gained momentum - is a good signal for the operational readiness of the service on Kubernetes. However, there has to date not existed a registry of Operators to simplify the discovery of such services. To help address this challenge, today Red Hat is launching OperatorHub.io in collaboration with AWS, Google Cloud and Microsoft. OperatorHub.io enables developers and Kubernetes administrators to find and install curated Operator-backed services with a base level of documentation, active maintainership by communities or vendors, basic testing, and packaging for optimized life-cycle management on Kubernetes. diff --git a/content/en/blog/_posts/2019-03-07-raw-block-volume-support-to-beta.md b/content/en/blog/_posts/2019-03-07-raw-block-volume-support-to-beta.md index 56593a972a..e4eb4b306f 100644 --- a/content/en/blog/_posts/2019-03-07-raw-block-volume-support-to-beta.md +++ b/content/en/blog/_posts/2019-03-07-raw-block-volume-support-to-beta.md @@ -1,11 +1,11 @@ --- title: Raw Block Volume support to Beta date: 2019-03-07 +author: > + Ben Swartzlander (NetApp), + Saad Ali (Google) --- -**Authors:** -Ben Swartzlander (NetApp), Saad Ali (Google) - Kubernetes v1.13 moves raw block volume support to beta. This feature allows persistent volumes to be exposed inside containers as a block device instead of as a mounted file system. ## What are block devices? diff --git a/content/en/blog/_posts/2019-03-15-Kubernetes-setup-using-Ansible-and-Vagrant.md b/content/en/blog/_posts/2019-03-15-Kubernetes-setup-using-Ansible-and-Vagrant.md index 247748b6f0..19d8d1c5bd 100644 --- a/content/en/blog/_posts/2019-03-15-Kubernetes-setup-using-Ansible-and-Vagrant.md +++ b/content/en/blog/_posts/2019-03-15-Kubernetes-setup-using-Ansible-and-Vagrant.md @@ -2,10 +2,10 @@ layout: blog title: Kubernetes Setup Using Ansible and Vagrant date: 2019-03-15 +author: > + Naresh L J (Infosys) --- -**Author:** Naresh L J (Infosys) - ## Objective This blog post describes the steps required to setup a multi node Kubernetes cluster for development purposes. This setup provides a production-like cluster that can be setup on your local machine. diff --git a/content/en/blog/_posts/2019-03-19-kubeedge-k8s-based-edge-intro.md b/content/en/blog/_posts/2019-03-19-kubeedge-k8s-based-edge-intro.md index 2d0d0e738d..3a9cd799df 100644 --- a/content/en/blog/_posts/2019-03-19-kubeedge-k8s-based-edge-intro.md +++ b/content/en/blog/_posts/2019-03-19-kubeedge-k8s-based-edge-intro.md @@ -2,10 +2,11 @@ title: KubeEdge, a Kubernetes Native Edge Computing Framework date: 2019-03-19 slug: kubeedge-k8s-based-edge-intro +author: > + Sanil Kumar D (Huawei), + Jun Du(Huawei) --- -**Author:** Sanil Kumar D (Huawei), Jun Du(Huawei) - ## KubeEdge becomes the first Kubernetes Native Edge Computing Platform with both Edge and Cloud components open sourced! Open source edge computing is going through its most dynamic phase of development in the industry. So many open source platforms, so many consolidations and so many initiatives for standardization! This shows the strong drive to build better platforms to bring cloud computing to the edges to meet ever increasing demand. [KubeEdge](https://github.com/kubeedge/kubeedge), which was announced last year, now brings great news for cloud native computing! It provides a complete edge computing solution based on Kubernetes with separate cloud and edge core modules. Currently, both the cloud and edge modules are open sourced. diff --git a/content/en/blog/_posts/2019-03-20-A-Look-Back-And-Whats-In-Store-For-Kubernetes-Contributor-Summits.md b/content/en/blog/_posts/2019-03-20-A-Look-Back-And-Whats-In-Store-For-Kubernetes-Contributor-Summits.md index 99a8dcd886..ca9a324868 100644 --- a/content/en/blog/_posts/2019-03-20-A-Look-Back-And-Whats-In-Store-For-Kubernetes-Contributor-Summits.md +++ b/content/en/blog/_posts/2019-03-20-A-Look-Back-And-Whats-In-Store-For-Kubernetes-Contributor-Summits.md @@ -3,11 +3,11 @@ title: A Look Back and What's in Store for Kubernetes Contributor Summits date: 2019-03-20 layout: blog evergreen: true +author: > + Paris Pittman (Google), + Jonas Rosland (VMware) --- -**Authors:** -Paris Pittman (Google), Jonas Rosland (VMware) - {{
          }} As our contributing community grows in great numbers, with more than 16,000 contributors this year across 150+ GitHub repositories, it’s important to provide face to face connections for our large distributed teams to have opportunities for collaboration and learning. In [Contributor Experience], our methodology with planning events is a lot like our documentation; we build from personas -- interests, skills, and motivators to name a few. This way we ensure there is valuable content and learning for everyone. diff --git a/content/en/blog/_posts/2019-03-21-a-guide-to-kubernetes-admission-controllers.md b/content/en/blog/_posts/2019-03-21-a-guide-to-kubernetes-admission-controllers.md index e5e5dfcc28..95b5b647bf 100644 --- a/content/en/blog/_posts/2019-03-21-a-guide-to-kubernetes-admission-controllers.md +++ b/content/en/blog/_posts/2019-03-21-a-guide-to-kubernetes-admission-controllers.md @@ -1,10 +1,10 @@ --- title: A Guide to Kubernetes Admission Controllers date: 2019-03-21 +author: > + Malte Isberner (StackRox) --- -**Author:** Malte Isberner (StackRox) - Kubernetes has greatly improved the speed and manageability of backend clusters in production today. Kubernetes has emerged as the de facto standard in container orchestrators thanks to its flexibility, scalability, and ease of use. Kubernetes also provides a range of features that secure production workloads. A more recent introduction in security features is a set of plugins called “[admission controllers](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/).” Admission controllers must be enabled to use some of the more advanced security features of Kubernetes, such as [pod security policies](https://kubernetes.io/docs/concepts/policy/pod-security-policy/) that enforce a security configuration baseline across an entire namespace. The following must-know tips and tricks will help you leverage admission controllers to make the most of these security capabilities in Kubernetes. ## What are Kubernetes admission controllers? diff --git a/content/en/blog/_posts/2019-03-22-e2e-testing-for-everyone.md b/content/en/blog/_posts/2019-03-22-e2e-testing-for-everyone.md index 462d2bcba4..92a3cce6fc 100644 --- a/content/en/blog/_posts/2019-03-22-e2e-testing-for-everyone.md +++ b/content/en/blog/_posts/2019-03-22-e2e-testing-for-everyone.md @@ -1,10 +1,10 @@ --- title: Kubernetes End-to-end Testing for Everyone date: 2019-03-22 +author: > + Patrick Ohly (Intel) --- -**Author:** Patrick Ohly (Intel) - More and more components that used to be part of Kubernetes are now being developed outside of Kubernetes. For example, storage drivers used to be compiled into Kubernetes binaries, then were moved into diff --git a/content/en/blog/_posts/2019-03-25-1-14-release-announcement.md b/content/en/blog/_posts/2019-03-25-1-14-release-announcement.md index e021bbf1db..64cdcf8ee4 100644 --- a/content/en/blog/_posts/2019-03-25-1-14-release-announcement.md +++ b/content/en/blog/_posts/2019-03-25-1-14-release-announcement.md @@ -3,10 +3,10 @@ title: 'Kubernetes 1.14: Production-level support for Windows Nodes, Kubectl Upd date: 2019-03-25 slug: kubernetes-1-14-release-announcement evergreen: true +author: > + [Kubernetes v1.14 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.14/release_team.md) --- -**Authors:** The 1.14 [Release Team](https://bit.ly/k8s114-team) - We’re pleased to announce the delivery of Kubernetes 1.14, our first release of 2019! Kubernetes 1.14 consists of 31 enhancements: 10 moving to stable, 12 in beta, and 7 net new. The main themes of this release are extensibility and supporting more workloads on Kubernetes with three major features moving to general availability, and an important security feature moving to beta. diff --git a/content/en/blog/_posts/2019-03-28-PID-Limiting.md b/content/en/blog/_posts/2019-03-28-PID-Limiting.md index a2701b2a65..2324de944d 100644 --- a/content/en/blog/_posts/2019-03-28-PID-Limiting.md +++ b/content/en/blog/_posts/2019-03-28-PID-Limiting.md @@ -1,10 +1,10 @@ --- title: 'Process ID Limiting for Stability Improvements in Kubernetes 1.14' date: 2019-04-15 +author: > + Derek Carr --- -**Author: Derek Carr** - Have you ever seen someone take more than their fair share of the cookies? The one person who reaches in and grabs a half dozen fresh baked chocolate chip chunk morsels and skitters off like Cookie Monster exclaiming “Om nom nom nom.” In some rare workloads, a similar occurrence was taking place inside Kubernetes clusters. With each Pod and Node, there comes a finite number of possible process IDs (PIDs) for all applications to share. While it is rare for any one process or pod to reach in and grab all the PIDs, some users were experiencing resource starvation due to this type of behavior. So in Kubernetes 1.14, we introduced an enhancement to mitigate the risk of a single pod monopolizing all of the PIDs available. diff --git a/content/en/blog/_posts/2019-03-28-running-kubernetes-locally-on-linux-with-minikube.md b/content/en/blog/_posts/2019-03-28-running-kubernetes-locally-on-linux-with-minikube.md index 097da0e1d2..b71132acf7 100644 --- a/content/en/blog/_posts/2019-03-28-running-kubernetes-locally-on-linux-with-minikube.md +++ b/content/en/blog/_posts/2019-03-28-running-kubernetes-locally-on-linux-with-minikube.md @@ -1,8 +1,9 @@ --- title: 'Running Kubernetes locally on Linux with Minikube - now with Kubernetes 1.14 support' -date: 2019-03-28 +date: 2019-03-28 +author: > + [Ihor Dvoretskyi](https://twitter.com/idvoretskyi) (Cloud Native Computing Foundation) --- -**Author**: [Ihor Dvoretskyi](https://twitter.com/idvoretskyi), Developer Advocate, Cloud Native Computing Foundation
          {{
          }}
          diff --git a/content/en/blog/_posts/2019-03-29-kube-proxy-subtleties-debugging-an-intermittent-connection-resets.md b/content/en/blog/_posts/2019-03-29-kube-proxy-subtleties-debugging-an-intermittent-connection-resets.md index bed35dabb5..bbded60d56 100644 --- a/content/en/blog/_posts/2019-03-29-kube-proxy-subtleties-debugging-an-intermittent-connection-resets.md +++ b/content/en/blog/_posts/2019-03-29-kube-proxy-subtleties-debugging-an-intermittent-connection-resets.md @@ -1,10 +1,10 @@ --- title: 'kube-proxy Subtleties: Debugging an Intermittent Connection Reset' date: 2019-03-29 +author: > + [Yongkun Gui](mailto:ygui@google.com) (Google) --- -**Author:** [Yongkun Gui](mailto:ygui@google.com), Google - I recently came across a bug that causes intermittent connection resets. After some digging, I found it was caused by a subtle combination of several different network subsystems. It helped me understand Kubernetes networking better, and I diff --git a/content/en/blog/_posts/2019-04-01-kubernetes-v1-14-delivers-production-level-support-for-nodes-and-windows-containers.md b/content/en/blog/_posts/2019-04-01-kubernetes-v1-14-delivers-production-level-support-for-nodes-and-windows-containers.md index 6dc1938276..cf399c601e 100644 --- a/content/en/blog/_posts/2019-04-01-kubernetes-v1-14-delivers-production-level-support-for-nodes-and-windows-containers.md +++ b/content/en/blog/_posts/2019-04-01-kubernetes-v1-14-delivers-production-level-support-for-nodes-and-windows-containers.md @@ -1,10 +1,11 @@ --- title: 'Kubernetes v1.14 delivers production-level support for Windows nodes and Windows containers' date: 2019-04-01 +author: > + Michael Michael (VMware), + Patrick Lang (Microsoft) --- -**Authors:** Michael Michael (VMware), Patrick Lang (Microsoft) - The first release of Kubernetes in 2019 brings a highly anticipated feature - production-level support for Windows workloads. Up until now Windows node support in Kubernetes has been in beta, allowing many users to experiment and see the value of Kubernetes for Windows containers. While in beta, developers in the Kubernetes community and Windows Server team worked together to improve the container runtime, build a continuous testing process, and complete features needed for a good user experience. Kubernetes now officially supports adding Windows nodes as worker nodes and scheduling Windows containers, enabling a vast ecosystem of Windows applications to leverage the power of our platform. As Windows developers and devops engineers have been adopting containers over the last few years, they've been looking for a way to manage all their workloads with a common interface. Kubernetes has taken the lead for container orchestration, and this gives users a consistent way to manage their container workloads whether they need to run on Linux or Windows. diff --git a/content/en/blog/_posts/2019-04-04-local-persistent-volumes-ga.md b/content/en/blog/_posts/2019-04-04-local-persistent-volumes-ga.md index 61a37e3f12..3da6711f01 100644 --- a/content/en/blog/_posts/2019-04-04-local-persistent-volumes-ga.md +++ b/content/en/blog/_posts/2019-04-04-local-persistent-volumes-ga.md @@ -2,10 +2,12 @@ layout: blog title: 'Kubernetes 1.14: Local Persistent Volumes GA' date: 2019-04-04 +author: > + Michelle Au (Google), + Matt Schallert (Uber), + Celina Ward (Uber) --- -**Authors**: Michelle Au (Google), Matt Schallert (Uber), Celina Ward (Uber) - The [Local Persistent Volumes](https://kubernetes.io/docs/concepts/storage/volumes/#local) feature has been promoted to GA in Kubernetes 1.14. It was first introduced as alpha in Kubernetes 1.7, and then diff --git a/content/en/blog/_posts/2019-04-16-pod-priority-and-preemption-in-kubernetes.md b/content/en/blog/_posts/2019-04-16-pod-priority-and-preemption-in-kubernetes.md index 88907e3e4d..0c5eda67b9 100644 --- a/content/en/blog/_posts/2019-04-16-pod-priority-and-preemption-in-kubernetes.md +++ b/content/en/blog/_posts/2019-04-16-pod-priority-and-preemption-in-kubernetes.md @@ -2,10 +2,10 @@ layout: blog title: 'Pod Priority and Preemption in Kubernetes' date: 2019-04-16 +author: > + Bobby Salamat --- -**Author**: Bobby Salamat - Kubernetes is well-known for running scalable workloads. It scales your workloads based on their resource usage. When a workload is scaled up, more instances of the application get created. When the application is critical for your product, you want to make sure that these new instances are scheduled even when your cluster is under resource pressure. One obvious solution to this problem is to over-provision your cluster resources to have some amount of slack resources available for scale-up situations. This approach often works, but costs more as you would have to pay for the resources that are idle most of the time. [Pod priority and preemption](/docs/concepts/scheduling-eviction/pod-priority-preemption/) is a scheduler feature made generally available in Kubernetes 1.14 that allows you to achieve high levels of scheduling confidence for your critical workloads without overprovisioning your clusters. It also provides a way to improve resource utilization in your clusters without sacrificing the reliability of your essential workloads. diff --git a/content/en/blog/_posts/2019-04-17-future-of-cloud-providers.md b/content/en/blog/_posts/2019-04-17-future-of-cloud-providers.md index e480ca22c7..60f01d9915 100644 --- a/content/en/blog/_posts/2019-04-17-future-of-cloud-providers.md +++ b/content/en/blog/_posts/2019-04-17-future-of-cloud-providers.md @@ -2,10 +2,12 @@ layout: blog title: 'The Future of Cloud Providers in Kubernetes' date: 2019-04-17 +author: > + Andrew Sy Kim (VMware), + Mike Crute (AWS), + Walter Fender (Google) --- -**Authors:** Andrew Sy Kim (VMware), Mike Crute (AWS), Walter Fender (Google) - Approximately 9 months ago, the Kubernetes community agreed to form the Cloud Provider Special Interest Group (SIG). The justification was to have a single governing SIG to own and shape the integration points between Kubernetes and the many cloud providers it supported. A lot has been in motion since then and we’re here to share with you what has been accomplished so far and what we hope to see in the future. ## The Mission diff --git a/content/en/blog/_posts/2019-04-19-Introducing-kube-iptables-tailer-Better-Networking-Visibility-in-Kubernetes-Clusters.md b/content/en/blog/_posts/2019-04-19-Introducing-kube-iptables-tailer-Better-Networking-Visibility-in-Kubernetes-Clusters.md index 8601d0b7c7..ae7d0ec5fa 100644 --- a/content/en/blog/_posts/2019-04-19-Introducing-kube-iptables-tailer-Better-Networking-Visibility-in-Kubernetes-Clusters.md +++ b/content/en/blog/_posts/2019-04-19-Introducing-kube-iptables-tailer-Better-Networking-Visibility-in-Kubernetes-Clusters.md @@ -3,10 +3,10 @@ layout: blog title: "Introducing kube-iptables-tailer: Better Networking Visibility in Kubernetes Clusters" date: 2019-04-19 slug: introducing-kube-iptables-tailer +author: > + Saifuding Diliyaer (Box) --- -**Authors:** Saifuding Diliyaer, Software Engineer, Box - At Box, we use Kubernetes to empower our engineers to own the whole lifecycle of their microservices. When it comes to networking, our engineers use Tigera’s [Project Calico](https://www.tigera.io/tigera-calico/) to declaratively manage network policies for their apps running in our Kubernetes clusters. App owners define a Calico policy in order to enable their Pods to send/receive network traffic, which is instantiated as iptables rules. There may be times, however, when such network policy is missing or declared incorrectly by app owners. In this situation, the iptables rules will cause network packet drops between the affected Pods, which get logged in a file that is inaccessible to app owners. We needed a mechanism to seamlessly deliver alerts about those iptables packet drops based on their network policies to help app owners quickly diagnose the corresponding issues. To solve this, we developed a service called [kube-iptables-tailer](https://github.com/box/kube-iptables-tailer) to detect packet drops from iptables logs and report them as Kubernetes events. We are proud to open-source kube-iptables-tailer for you to utilize in your own cluster, regardless of whether you use Calico or other network policy tools. diff --git a/content/en/blog/_posts/2019-04-24-Hardware-Accelerated-SSLTLS-Termination-in-Ingress-Controllers-using-Kubernetes-Device-Plugins-and-RuntimeClass.md b/content/en/blog/_posts/2019-04-24-Hardware-Accelerated-SSLTLS-Termination-in-Ingress-Controllers-using-Kubernetes-Device-Plugins-and-RuntimeClass.md index 1db938ef6a..9e762e9bb9 100644 --- a/content/en/blog/_posts/2019-04-24-Hardware-Accelerated-SSLTLS-Termination-in-Ingress-Controllers-using-Kubernetes-Device-Plugins-and-RuntimeClass.md +++ b/content/en/blog/_posts/2019-04-24-Hardware-Accelerated-SSLTLS-Termination-in-Ingress-Controllers-using-Kubernetes-Device-Plugins-and-RuntimeClass.md @@ -2,10 +2,10 @@ layout: blog title: 'Hardware Accelerated SSL/TLS Termination in Ingress Controllers using Kubernetes Device Plugins and RuntimeClass' date: 2019-04-24 +author: > + Mikko Ylinen (Intel) --- -**Authors:** Mikko Ylinen (Intel) - ## Abstract A Kubernetes Ingress is a way to connect cluster services to the world outside the cluster. In order diff --git a/content/en/blog/_posts/2019-04-26-latest-on-localization.md b/content/en/blog/_posts/2019-04-26-latest-on-localization.md index 98f1d74706..50f1645910 100644 --- a/content/en/blog/_posts/2019-04-26-latest-on-localization.md +++ b/content/en/blog/_posts/2019-04-26-latest-on-localization.md @@ -2,10 +2,10 @@ layout: blog title: 'How You Can Help Localize Kubernetes Docs' date: 2019-04-26 +author: > + Zach Corleissen (Linux Foundation) --- -**Author: Zach Corleissen (Linux Foundation)** - Last year we optimized the Kubernetes website for [hosting multilingual content](/blog/2018/11/08/kubernetes-docs-updates-international-edition/). Contributors responded by adding multiple new localizations: as of April 2019, Kubernetes docs are partially available in nine different languages, with six added in 2019 alone. You can see a list of available languages in the language selector at the top of each page. By _partially available_, I mean that localizations are ongoing projects. They range from mostly complete ([Chinese docs for 1.12](https://v1-12.docs.kubernetes.io/zh-cn/)) to brand new (1.14 docs in [Portuguese](https://kubernetes.io/pt/)). If you're interested in helping an existing localization, read on! diff --git a/content/en/blog/_posts/2019-05-02-kubecon-diversity-lunch-and-hack.md b/content/en/blog/_posts/2019-05-02-kubecon-diversity-lunch-and-hack.md index bf8417673b..0eebd54cfa 100644 --- a/content/en/blog/_posts/2019-05-02-kubecon-diversity-lunch-and-hack.md +++ b/content/en/blog/_posts/2019-05-02-kubecon-diversity-lunch-and-hack.md @@ -3,10 +3,10 @@ title: "Join us for the 2019 KubeCon Diversity Lunch & Hack" date: 2019-05-02 slug: kubecon-diversity-lunch-and-hack evergreen: false +author: > + Kiran Oliver (The New Stack) --- -**Authors:** Kiran Oliver, Podcast Producer, The New Stack - Join us for the 2019 KubeCon Diversity Lunch & Hack: Building Tech Skills & An Inclusive Community - Sponsored by Google Cloud and VMware Registration for the Diversity Lunch opens today, May 2nd, 2019. To register, go to the main KubeCon + CloudNativeCon EU schedule, then log in to your Sched account, and confirm your attendance to the Diversity Lunch. Please sign up ASAP once the link is live, as spaces will fill quickly. We filled the event in just a few days last year, and anticipate doing so again this year. diff --git a/content/en/blog/_posts/2019-05-13-kubernetes-1-14-release-interview.md b/content/en/blog/_posts/2019-05-13-kubernetes-1-14-release-interview.md index 7b2614580d..a1434863a3 100644 --- a/content/en/blog/_posts/2019-05-13-kubernetes-1-14-release-interview.md +++ b/content/en/blog/_posts/2019-05-13-kubernetes-1-14-release-interview.md @@ -2,10 +2,10 @@ layout: blog title: "Cat shirts and Groundhog Day: the Kubernetes 1.14 release interview" date: 2019-05-13 +author: > + Craig Box (Google) --- -Author: Craig Box (Google) - Last week we celebrated one year of the [Kubernetes Podcast from Google](https://kubernetespodcast.com/). In this weekly show, my co-host Adam Glick and I focus on all the great things that are happening in the world of Kubernetes and Cloud Native. From the news of the week, to interviews with people in the community, we help you stay up to date on everything Kubernetes. Every few cycles we check in on the release process for Kubernetes itself. Last year we [interviewed the release managers for Kubernetes 1.11](https://kubernetespodcast.com/episode/010-kubernetes-1.11/), and shared that transcript on the Kubernetes blog. We got such great feedback that we wanted to share the transcript of our recent conversation with Aaron Crickenberger, the release manager for Kubernetes 1.14. diff --git a/content/en/blog/_posts/2019-05-14-expanding-our-contributor-workshops.md b/content/en/blog/_posts/2019-05-14-expanding-our-contributor-workshops.md index 85a98ccb26..717bfc1b93 100644 --- a/content/en/blog/_posts/2019-05-14-expanding-our-contributor-workshops.md +++ b/content/en/blog/_posts/2019-05-14-expanding-our-contributor-workshops.md @@ -3,10 +3,11 @@ layout: blog title: "Expanding our Contributor Workshops" date: 2019-05-14 slug: expanding-our-contributor-workshops +author: > + Guinevere Saenger (GitHub), + Paris Pittman (Google) --- -**Authors:** Guinevere Saenger (GitHub) and Paris Pittman (Google) - **tl;dr** - learn about the contributor community with us and land your first PR! We have spots available in [Barcelona][eu] (registration **closes** on Wednesday May 15, so grab your spot!) and the upcoming [Shanghai][cn] Summit. diff --git a/content/en/blog/_posts/2019-05-17-Kubernetes-Cloud-Native-and-the-Future-of-Software.md b/content/en/blog/_posts/2019-05-17-Kubernetes-Cloud-Native-and-the-Future-of-Software.md index ed1fd796c3..744679d84a 100644 --- a/content/en/blog/_posts/2019-05-17-Kubernetes-Cloud-Native-and-the-Future-of-Software.md +++ b/content/en/blog/_posts/2019-05-17-Kubernetes-Cloud-Native-and-the-Future-of-Software.md @@ -2,10 +2,11 @@ layout: blog title: 'Kubernetes, Cloud Native, and the Future of Software' date: 2019-05-17 +author: > + Brian Grant (Google), + Jaice Singer DuMars (Google) --- -**Authors:** Brian Grant (Google), Jaice Singer DuMars (Google) - # Kubernetes, Cloud Native, and the Future of Software Five years ago this June, Google Cloud announced a new application management technology called Kubernetes. It began with a [simple open source commit](https://github.com/kubernetes/kubernetes/commit/2c4b3a562ce34cddc3f8218a2c4d11c7310e6d56), followed the next day by a [one-paragraph blog mention](https://cloudplatform.googleblog.com/2014/06/an-update-on-container-support-on-google-cloud-platform.html) around container support. Later in the week, Eric Brewer [talked about Kubernetes for the first time](https://www.youtube.com/watch?v=YrxnVKZeqK8) at DockerCon. And soon the world was watching. diff --git a/content/en/blog/_posts/2019-05-23-Kyma-extend-and-build-on-kubernetes-with-ease.md b/content/en/blog/_posts/2019-05-23-Kyma-extend-and-build-on-kubernetes-with-ease.md index 73c22f4d79..5f1abf9659 100644 --- a/content/en/blog/_posts/2019-05-23-Kyma-extend-and-build-on-kubernetes-with-ease.md +++ b/content/en/blog/_posts/2019-05-23-Kyma-extend-and-build-on-kubernetes-with-ease.md @@ -2,10 +2,10 @@ layout: blog title: 'Kyma - extend and build on Kubernetes with ease' date: 2019-05-23 +author: > + Lukasz Gornicki (SAP) --- -**Authors:** Lukasz Gornicki (SAP) - According to this recently completed [CNCF Survey](https://www.cncf.io/blog/2018/08/29/cncf-survey-use-of-cloud-native-technologies-in-production-has-grown-over-200-percent/), the adoption rate of Cloud Native technologies in production is growing rapidly. Kubernetes is at the heart of this technological revolution. Naturally, the growth of cloud native technologies has been accompanied by the growth of the ecosystem that surrounds it. Of course, the complexity of cloud native technologies have increased as well. Just google for the phrase “Kubernetes is hard”, and you’ll get plenty of articles that explain this complexity problem. The best thing about the CNCF community is that problems like this can be solved by smart people building new tools to enable Kubernetes users: Projects like Knative and its [Build resource](https://github.com/knative/build) extension, for example, serve to reduce complexity across a range of scenarios. Even though increasing complexity might seem like the most important issue to tackle, it is not the only challenge you face when transitioning to Cloud Native. ## Problems to solve diff --git a/content/en/blog/_posts/2019-06-12-contributor-summit-shanghai.md b/content/en/blog/_posts/2019-06-12-contributor-summit-shanghai.md index 9e14586962..85c1d5a0ba 100644 --- a/content/en/blog/_posts/2019-06-12-contributor-summit-shanghai.md +++ b/content/en/blog/_posts/2019-06-12-contributor-summit-shanghai.md @@ -2,10 +2,10 @@ layout: blog title: 'Join us at the Contributor Summit in Shanghai' date: 2019-06-12 +author: > + Josh Berkus (Red Hat) --- -**Author**: Josh Berkus (Red Hat) - ![Picture of contributor panel at 2018 Shanghai contributor summit. Photo by Josh Berkus, licensed CC-BY 4.0](/images/blog/2019- 06-11-contributor-summit-shanghai/panel.png) diff --git a/content/en/blog/_posts/2019-06-19-kubernetes-1-15-release-announcement.md b/content/en/blog/_posts/2019-06-19-kubernetes-1-15-release-announcement.md index 83dfb6dd50..25685a505f 100644 --- a/content/en/blog/_posts/2019-06-19-kubernetes-1-15-release-announcement.md +++ b/content/en/blog/_posts/2019-06-19-kubernetes-1-15-release-announcement.md @@ -4,8 +4,9 @@ title: "Kubernetes 1.15: Extensibility and Continuous Improvement" date: 2019-06-19 slug: kubernetes-1-15-release-announcement evergreen: true +author: > + [Kubernetes 1.15 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.15/release_team.md) --- -**Authors:** The 1.15 [Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.15/release_team.md) We’re pleased to announce the delivery of Kubernetes 1.15, our second release of 2019! Kubernetes 1.15 consists of 25 enhancements: 2 moving to stable, 13 in beta, and 10 in alpha. The main themes of this release are: diff --git a/content/en/blog/_posts/2019-06-20-Future-of-CRDs-Structural-Schemas.md b/content/en/blog/_posts/2019-06-20-Future-of-CRDs-Structural-Schemas.md index b8eaecaf27..e6659170f6 100644 --- a/content/en/blog/_posts/2019-06-20-Future-of-CRDs-Structural-Schemas.md +++ b/content/en/blog/_posts/2019-06-20-Future-of-CRDs-Structural-Schemas.md @@ -3,10 +3,10 @@ layout: blog title: "Future of CRDs: Structural Schemas" date: 2019-06-20 slug: crd-structural-schema +author: > + Stefan Schimanski (Red Hat) --- -**Authors:** Stefan Schimanski (Red Hat) - CustomResourceDefinitions were introduced roughly two years ago as the primary way to extend the Kubernetes API with custom resources. From the beginning they stored arbitrary JSON data, with the exception that `kind`, `apiVersion` and `metadata` had to follow the Kubernetes API conventions. In Kubernetes 1.8 CRDs gained the ability to define an optional OpenAPI v3 based validation schema. By the nature of OpenAPI specifications though—only describing what must be there, not what shouldn’t, and by being potentially incomplete specifications—the Kubernetes API server never knew the complete structure of CustomResource instances. As a consequence, kube-apiserver—until today—stores all JSON data received in an API request (if it validates against the OpenAPI spec). This especially includes anything that is not specified in the OpenAPI schema. diff --git a/content/en/blog/_posts/2019-06-21-volume-cloning-alpha.md b/content/en/blog/_posts/2019-06-21-volume-cloning-alpha.md index 8faf96a7e6..1b59c3b6a8 100644 --- a/content/en/blog/_posts/2019-06-21-volume-cloning-alpha.md +++ b/content/en/blog/_posts/2019-06-21-volume-cloning-alpha.md @@ -2,10 +2,10 @@ layout: blog title: 'Introducing Volume Cloning Alpha for Kubernetes' date: 2019-06-21 +author: > + John Griffith (Red Hat) --- -**Author**: John Griffith (Red Hat) - Kubernetes v1.15 introduces alpha support for volume cloning. This feature allows you to create new volumes using the contents of existing volumes in the user's namespace using the Kubernetes API. ## What is a Clone? diff --git a/content/en/blog/_posts/2019-06-24-kubeadm-ha-v115.md b/content/en/blog/_posts/2019-06-24-kubeadm-ha-v115.md index b2d377d0eb..2683697f6c 100644 --- a/content/en/blog/_posts/2019-06-24-kubeadm-ha-v115.md +++ b/content/en/blog/_posts/2019-06-24-kubeadm-ha-v115.md @@ -2,12 +2,14 @@ layout: blog title: 'Automated High Availability in kubeadm v1.15: Batteries Included But Swappable' date: 2019-06-24 +author: > + [Lucas Käldström](https://github.com/luxas) (Weaveworks), + [Fabrizio Pandini](https://github.com/fabriziopandini) (independent) --- -**Authors**: - - - Lucas Käldström, [@luxas](https://github.com/luxas), SIG Cluster Lifecycle co-chair & kubeadm subproject owner, Weaveworks - - Fabrizio Pandini, [@fabriziopandini](https://github.com/fabriziopandini), kubeadm subproject owner, Independent +_At the time of publication, Lucas Käldström was writing as SIG Cluster Lifecycle co-chair +and as a subproject owner for `kubeadm`; Fabrizio Pandini was writing as a subproject +owner for `kubeadm`._ [kubeadm](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/) is a tool that enables Kubernetes administrators to quickly and easily bootstrap minimum viable clusters that are fully compliant with diff --git a/content/en/blog/_posts/2019-06-25-recap-of-contributor-summit-bcn-2019.md b/content/en/blog/_posts/2019-06-25-recap-of-contributor-summit-bcn-2019.md index b4372f5ace..05d0c5a996 100644 --- a/content/en/blog/_posts/2019-06-25-recap-of-contributor-summit-bcn-2019.md +++ b/content/en/blog/_posts/2019-06-25-recap-of-contributor-summit-bcn-2019.md @@ -2,10 +2,10 @@ layout: blog title: 'Recap of Kubernetes Contributor Summit Barcelona 2019' date: 2019-06-25 +author: > + Jonas Rosland (VMware) --- -**Author**: Jonas Rosland (VMware) - First of all, **THANK YOU** to everyone who made the Kubernetes Contributor Summit in Barcelona possible. We had an amazing team of volunteers tasked with planning and executing the event, and it was so much fun meeting and talking to all new and current contributors during the main event and the pre-event celebration. Contributor Summit in Barcelona kicked off KubeCon + CloudNativeCon in a big way as it was the **largest contributor summit** to date with 331 people signed up, and only 9 didn't pick up their badges! diff --git a/content/en/blog/_posts/2019-07-18-some-apis-are-being-deprecated.md b/content/en/blog/_posts/2019-07-18-some-apis-are-being-deprecated.md index 587080617c..3e02e16a19 100644 --- a/content/en/blog/_posts/2019-07-18-some-apis-are-being-deprecated.md +++ b/content/en/blog/_posts/2019-07-18-some-apis-are-being-deprecated.md @@ -3,10 +3,10 @@ layout: blog title: "Deprecated APIs Removed In 1.16: Here’s What You Need To Know" date: 2019-07-18 slug: api-deprecations-in-1-16 +author: > + Vallery Lancey (Lyft) --- -**Author**: Vallery Lancey (Lyft) - As the Kubernetes API evolves, APIs are periodically reorganized or upgraded. When APIs evolve, the old API is deprecated and eventually removed. diff --git a/content/en/blog/_posts/2019-07-23-get-started-with-kubernetes-using-python.md b/content/en/blog/_posts/2019-07-23-get-started-with-kubernetes-using-python.md index 7d2e3d6ec2..dc2611ccb8 100644 --- a/content/en/blog/_posts/2019-07-23-get-started-with-kubernetes-using-python.md +++ b/content/en/blog/_posts/2019-07-23-get-started-with-kubernetes-using-python.md @@ -2,10 +2,10 @@ layout: blog title: "Get started with Kubernetes (using Python)" date: 2019-07-23 +author: > + Jason Haley (independent consultant) --- -**Author**: Jason Haley (Independent Consultant) - So, you know you want to run your application in Kubernetes but don’t know where to start. Or maybe you’re getting started but still don’t know what you don’t know. In this blog you’ll walk through how to containerize an application and get it running in Kubernetes. This walk-through assumes you are a developer or at least comfortable with the command line (preferably bash shell). diff --git a/content/en/blog/_posts/2019-08-06-OPA-Gatekeeper-Policy-and-Governance-for-Kubernetes.md b/content/en/blog/_posts/2019-08-06-OPA-Gatekeeper-Policy-and-Governance-for-Kubernetes.md index b4aa017d59..5849f196ea 100644 --- a/content/en/blog/_posts/2019-08-06-OPA-Gatekeeper-Policy-and-Governance-for-Kubernetes.md +++ b/content/en/blog/_posts/2019-08-06-OPA-Gatekeeper-Policy-and-Governance-for-Kubernetes.md @@ -4,10 +4,15 @@ layout: blog title: "OPA Gatekeeper: Policy and Governance for Kubernetes" date: 2019-08-06 slug: OPA-Gatekeeper-Policy-and-Governance-for-Kubernetes +author: > + Rita Zhang (Microsoft), + Max Smythe (Google), + Craig Hooper (Commonwealth Bank AU), + Tim Hinrichs (Styra), + Lachie Evenson (Microsoft), + Torin Sandall (Styra) --- -**Authors:** Rita Zhang (Microsoft), Max Smythe (Google), Craig Hooper (Commonwealth Bank AU), Tim Hinrichs (Styra), Lachie Evenson (Microsoft), Torin Sandall (Styra) - The [Open Policy Agent Gatekeeper](https://github.com/open-policy-agent/gatekeeper) project can be leveraged to help enforce policies and strengthen governance in your Kubernetes environment. In this post, we will walk through the goals, history, and current state of the project. The following recordings from the Kubecon EU 2019 sessions are a great starting place in working with Gatekeeper: diff --git a/content/en/blog/_posts/2019-08-30-announcing-etcd-3.4.md b/content/en/blog/_posts/2019-08-30-announcing-etcd-3.4.md index 1358bdd6d0..bc16e88206 100644 --- a/content/en/blog/_posts/2019-08-30-announcing-etcd-3.4.md +++ b/content/en/blog/_posts/2019-08-30-announcing-etcd-3.4.md @@ -4,10 +4,11 @@ layout: blog title: "Announcing etcd 3.4" date: 2019-08-30 slug: announcing-etcd-3-4 +author: > + [Gyuho Lee](https://github.com/gyuho) (Amazon Web Services), + [Jingyi Hu](https://github.com/jingyih) (Google) --- -**Authors:** Gyuho Lee (Amazon Web Services, @[gyuho](https://github.com/gyuho)), Jingyi Hu (Google, @[jingyih](https://github.com/jingyih)) - etcd 3.4 focuses on stability, performance and ease of operation, with features like pre-vote and non-voting member and improvements to storage backend and client balancer. Please see [CHANGELOG](https://github.com/etcd-io/etcd/blob/master/CHANGELOG-3.4.md) for full lists of changes. diff --git a/content/en/blog/_posts/2019-09-18-kubernetes-1-16-release-announcement.md b/content/en/blog/_posts/2019-09-18-kubernetes-1-16-release-announcement.md index 53c3d377e9..8f7c167658 100644 --- a/content/en/blog/_posts/2019-09-18-kubernetes-1-16-release-announcement.md +++ b/content/en/blog/_posts/2019-09-18-kubernetes-1-16-release-announcement.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes 1.16: Custom Resources, Overhauled Metrics, and Volume Extensions" date: 2019-09-18 slug: kubernetes-1-16-release-announcement +author: > + [Kubernetes 1.16 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.16/release_team.md) --- -**Authors:** [Kubernetes 1.16 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.16/release_team.md) - We’re pleased to announce the delivery of Kubernetes 1.16, our third release of 2019! Kubernetes 1.16 consists of 31 enhancements: 8 enhancements moving to stable, 8 enhancements in beta, and 15 enhancements in alpha. # Major Themes diff --git a/content/en/blog/_posts/2019-09-24-san-diego-contributor-summit.md b/content/en/blog/_posts/2019-09-24-san-diego-contributor-summit.md index 62ea9c8337..e3b0da5ac3 100644 --- a/content/en/blog/_posts/2019-09-24-san-diego-contributor-summit.md +++ b/content/en/blog/_posts/2019-09-24-san-diego-contributor-summit.md @@ -4,10 +4,12 @@ title: "Contributor Summit San Diego Registration Open!" date: 2019-09-24 slug: san-diego-contributor-summit evergreen: true +author: > + Paris Pittman (Google), + Jeffrey Sica (Red Hat), + Jonas Rosland (VMware) --- -**Authors:** Paris Pittman (Google), Jeffrey Sica (Red Hat), Jonas Rosland (VMware) - [Contributor Summit San Diego 2019 Event Page] In record time, we’ve hit capacity for the *new contributor workshop* session of the event! diff --git a/content/en/blog/_posts/2019-10-03-2019-Steering-Committee-Election-Results.md b/content/en/blog/_posts/2019-10-03-2019-Steering-Committee-Election-Results.md index 61ecc3d71c..f297e4869a 100644 --- a/content/en/blog/_posts/2019-10-03-2019-Steering-Committee-Election-Results.md +++ b/content/en/blog/_posts/2019-10-03-2019-Steering-Committee-Election-Results.md @@ -3,11 +3,13 @@ layout: blog title: "2019 Steering Committee Election Results" date: 2019-10-03 slug: 2019-steering-committee-election-results +author: > + Bob Killen (University of Michigan), + Jorge Castro (VMware), + Brian Grant (Google), + Ihor Dvoretskyi (CNCF) --- -**Authors**: Bob Killen (University of Michigan), Jorge Castro (VMware), -Brian Grant (Google), and Ihor Dvoretskyi (CNCF) - The [2019 Steering Committee Election] is a landmark milestone for the Kubernetes project. The initial bootstrap committee is graduating to emeritus and the committee has now shrunk to its final allocation of seven seats. All diff --git a/content/en/blog/_posts/2019-10-10-contributor-summit-san-diego-schedule.md b/content/en/blog/_posts/2019-10-10-contributor-summit-san-diego-schedule.md index f0f2835513..de9bb73cd9 100644 --- a/content/en/blog/_posts/2019-10-10-contributor-summit-san-diego-schedule.md +++ b/content/en/blog/_posts/2019-10-10-contributor-summit-san-diego-schedule.md @@ -3,10 +3,12 @@ layout: blog title: "Contributor Summit San Diego Schedule Announced!" date: 2019-10-10 slug: contributor-summit-san-diego-schedule +author: > + Josh Berkus (Red Hat), + Paris Pittman (Google), + Jonas Rosland (VMware) --- -**Authors:** Josh Berkus (Red Hat), Paris Pittman (Google), Jonas Rosland (VMware) - There are many great sessions planned for the Contributor Summit, spread across five rooms of current contributor content in addition to the new contributor workshops. Since this is an upstream contributor summit and we don't often meet, diff --git a/content/en/blog/_posts/2019-10-29-2019-sig-docs-survey.md b/content/en/blog/_posts/2019-10-29-2019-sig-docs-survey.md index 6079040a51..00d5aedd35 100644 --- a/content/en/blog/_posts/2019-10-29-2019-sig-docs-survey.md +++ b/content/en/blog/_posts/2019-10-29-2019-sig-docs-survey.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes Documentation Survey" date: 2019-10-29 slug: kubernetes-documentation-end-user-survey +author: > + [Aimee Ukasick](https://www.linkedin.com/in/aimee-ukasick/), + and Kubernetes SIG Docs --- -**Author:** [Aimee Ukasick](https://www.linkedin.com/in/aimee-ukasick/) and SIG Docs - In September, SIG Docs conducted its first survey about the [Kubernetes documentation](https://kubernetes.io/docs/). We'd like to thank the CNCF's Kim McMahon for helping us create the survey and access the results. diff --git a/content/en/blog/_posts/2019-11-05-grokkin-the-docs.md b/content/en/blog/_posts/2019-11-05-grokkin-the-docs.md index 87de8d4442..7f43d8208d 100644 --- a/content/en/blog/_posts/2019-11-05-grokkin-the-docs.md +++ b/content/en/blog/_posts/2019-11-05-grokkin-the-docs.md @@ -3,10 +3,10 @@ layout: blog title: "Grokkin' the Docs" date: 2019-11-05 slug: Grokkin-the-Docs +author: > + [Aimee Ukasick](https://www.linkedin.com/in/aimee-ukasick/) (independent contributor) --- -**Author:** [Aimee Ukasick](https://www.linkedin.com/in/aimee-ukasick/), Independent Contributor - {{< figure src="/images/blog/grokkin-the-docs/grok-definition.png" alt="grok: to understand profoundly and intuitively" diff --git a/content/en/blog/_posts/2019-11-05-kubernetes-with-microk8s.md b/content/en/blog/_posts/2019-11-05-kubernetes-with-microk8s.md index 10f3038982..2d57394cee 100644 --- a/content/en/blog/_posts/2019-11-05-kubernetes-with-microk8s.md +++ b/content/en/blog/_posts/2019-11-05-kubernetes-with-microk8s.md @@ -1,8 +1,10 @@ --- title: 'Running Kubernetes locally on Linux with Microk8s' date: 2019-11-26 +author: > + [Ihor Dvoretskyi](https://twitter.com/idvoretskyi) (Cloud Native Computing Foundation), + [Carmine Rimi](https://twitter.com/carminerimi) --- -**Authors**: [Ihor Dvoretskyi](https://twitter.com/idvoretskyi), Developer Advocate, Cloud Native Computing Foundation; [Carmine Rimi](https://twitter.com/carminerimi) This article, the second in a [series](/blog/2019/03/28/running-kubernetes-locally-on-linux-with-minikube-now-with-kubernetes-1.14-support/) about local deployment options on Linux, and covers [MicroK8s](https://microk8s.io/). Microk8s is the click-and-run solution for deploying a Kubernetes cluster locally, originally developed by Canonical, the publisher of Ubuntu. diff --git a/content/en/blog/_posts/2019-11-26-cloud-native-java-controller-sdk.md b/content/en/blog/_posts/2019-11-26-cloud-native-java-controller-sdk.md index 80926b6bc4..ba20251422 100644 --- a/content/en/blog/_posts/2019-11-26-cloud-native-java-controller-sdk.md +++ b/content/en/blog/_posts/2019-11-26-cloud-native-java-controller-sdk.md @@ -1,13 +1,13 @@ - --- layout: blog title: "Develop a Kubernetes controller in Java" date: 2019-11-26 slug: Develop-A-Kubernetes-Controller-in-Java +author: > + Min Kim (Ant Financial), + Tony Ado (Ant Financial) --- -**Authors:** Min Kim (Ant Financial), Tony Ado (Ant Financial) - The official [Kubernetes Java SDK](https://github.com/kubernetes-client/java) project recently released their latest work on providing the Java Kubernetes developers a handy Kubernetes controller-builder SDK which is helpful for easily developing diff --git a/content/en/blog/_posts/2019-12-02-gardener-project-update.md b/content/en/blog/_posts/2019-12-02-gardener-project-update.md index 83efbfa477..9f654edc42 100644 --- a/content/en/blog/_posts/2019-12-02-gardener-project-update.md +++ b/content/en/blog/_posts/2019-12-02-gardener-project-update.md @@ -3,11 +3,11 @@ layout: blog title: "Gardener Project Update" date: 2019-12-02 slug: gardener-project-update +author: > + [Rafael Franzke](mailto:rafael.franzke@sap.com) (SAP), + [Vasu Chandrasekhara](mailto:vasu.chandrasekhara@sap.com) (SAP) --- -**Authors:** [Rafael Franzke](mailto:rafael.franzke@sap.com) (SAP), [Vasu -Chandrasekhara](mailto:vasu.chandrasekhara@sap.com) (SAP) - Last year, we introduced [Gardener](https://gardener.cloud) in the [Kubernetes Community Meeting](https://www.youtube.com/watch?v=DpFTcTnBxbM&feature=youtu.be&t=1642) diff --git a/content/en/blog/_posts/2019-12-06-kubernetes-1-16-release-interview.md b/content/en/blog/_posts/2019-12-06-kubernetes-1-16-release-interview.md index 084cdcf2c6..3059671e83 100644 --- a/content/en/blog/_posts/2019-12-06-kubernetes-1-16-release-interview.md +++ b/content/en/blog/_posts/2019-12-06-kubernetes-1-16-release-interview.md @@ -2,10 +2,10 @@ layout: blog title: "When you're in the release team, you're family: the Kubernetes 1.16 release interview" date: 2019-12-06 +author: > + Craig Box (Google) --- -Author: Craig Box (Google) - It is a pleasure to co-host the weekly [Kubernetes Podcast from Google](https://kubernetespodcast.com/) with Adam Glick. We get to talk to friends old and new from the community, as well as give people a download on the Cloud Native news every week. It was also a pleasure to see Lachlan Evenson, the release team lead for Kubernetes 1.16, [win the CNCF "Top Ambassador" award](https://www.cncf.io/announcement/2019/11/19/cloud-native-computing-foundation-announces-2019-community-awards-winners/) at KubeCon. We [talked with Lachie](https://kubernetespodcast.com/episode/072-kubernetes-1.16/) when 1.16 was released, and as is [becoming](https://kubernetes.io/blog/2018/07/16/how-the-sausage-is-made-the-kubernetes-1.11-release-interview-from-the-kubernetes-podcast/) a [tradition](https://kubernetes.io/blog/2019/05/13/cat-shirts-and-groundhog-day-the-kubernetes-1.14-release-interview/), we are delighted to share an abridged version of that interview with the readers of the Kubernetes Blog. diff --git a/content/en/blog/_posts/2019-12-09-csi-volume-migration-beta.md b/content/en/blog/_posts/2019-12-09-csi-volume-migration-beta.md index a1b00df443..bfb07cc65c 100644 --- a/content/en/blog/_posts/2019-12-09-csi-volume-migration-beta.md +++ b/content/en/blog/_posts/2019-12-09-csi-volume-migration-beta.md @@ -3,10 +3,10 @@ layout: blog title: "Kubernetes 1.17 Feature: Kubernetes In-Tree to CSI Volume Migration Moves to Beta" date: 2019-12-09T09:00:00+08:00 slug: kubernetes-1-17-feature-csi-migration-beta +author: > + David Zhu (Software Engineer, Google) --- -**Authors:** David Zhu, Software Engineer, Google - The Kubernetes in-tree storage plugin to [Container Storage Interface (CSI)](https://kubernetes.io/blog/2019/01/15/container-storage-interface-ga/) migration infrastructure is now beta in Kubernetes v1.17. CSI migration was introduced as alpha in Kubernetes v1.14. Kubernetes features are generally introduced as alpha and moved to beta (and eventually to stable/GA) over subsequent Kubernetes releases. This process allows Kubernetes developers to get feedback, discover and fix issues, iterate on the designs, and deliver high quality, production grade features. diff --git a/content/en/blog/_posts/2019-12-09-kubernetes-1.17-release-announcement.md b/content/en/blog/_posts/2019-12-09-kubernetes-1.17-release-announcement.md index 6fb460acfb..2d4a2a4e2d 100644 --- a/content/en/blog/_posts/2019-12-09-kubernetes-1.17-release-announcement.md +++ b/content/en/blog/_posts/2019-12-09-kubernetes-1.17-release-announcement.md @@ -4,10 +4,10 @@ title: "Kubernetes 1.17: Stability" date: 2019-12-09T13:00:00-08:00 slug: kubernetes-1-17-release-announcement evergreen: true +author: > + [Kubernetes 1.17 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.17/release_team.md) --- -**Authors:** [Kubernetes 1.17 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.17/release_team.md) - We’re pleased to announce the delivery of Kubernetes 1.17, our fourth and final release of 2019! Kubernetes v1.17 consists of 22 enhancements: 14 enhancements have graduated to stable, 4 enhancements are moving to beta, and 4 enhancements are entering alpha. ## Major Themes diff --git a/content/en/blog/_posts/2019-12-09-volume-snapshot-beta.md b/content/en/blog/_posts/2019-12-09-volume-snapshot-beta.md index b18b54aeb4..af4aa4e354 100644 --- a/content/en/blog/_posts/2019-12-09-volume-snapshot-beta.md +++ b/content/en/blog/_posts/2019-12-09-volume-snapshot-beta.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes 1.17 Feature: Kubernetes Volume Snapshot Moves to Beta" date: 2019-12-09T10:00:00-08:00 slug: kubernetes-1-17-feature-cis-volume-snapshot-beta +author: > + Xing Yang (VMware), + Xiangqian Yu (Google) --- -**Authors:** Xing Yang, VMware & Xiangqian Yu, Google - The Kubernetes Volume Snapshot feature is now beta in Kubernetes v1.17. It was introduced [as alpha](https://kubernetes.io/blog/2018/10/09/introducing-volume-snapshot-alpha-for-kubernetes/) in Kubernetes v1.12, with a [second alpha](https://kubernetes.io/blog/2019/01/17/update-on-volume-snapshot-alpha-for-kubernetes/) with breaking changes in Kubernetes v1.13. This post summarizes the changes in the beta release. ## What is a Volume Snapshot? From 532b7e4053e77e4b481e55891fc03f6087fc83b5 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:51:35 +0600 Subject: [PATCH 0894/1086] Create mysql-deployment.yaml --- .../wordpress/mysql-deployment.yaml | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 content/bn/examples/application/wordpress/mysql-deployment.yaml diff --git a/content/bn/examples/application/wordpress/mysql-deployment.yaml b/content/bn/examples/application/wordpress/mysql-deployment.yaml new file mode 100644 index 0000000000..a3b007ea5c --- /dev/null +++ b/content/bn/examples/application/wordpress/mysql-deployment.yaml @@ -0,0 +1,74 @@ +apiVersion: v1 +kind: Service +metadata: + name: wordpress-mysql + labels: + app: wordpress +spec: + ports: + - port: 3306 + selector: + app: wordpress + tier: mysql + clusterIP: None +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: mysql-pv-claim + labels: + app: wordpress +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wordpress-mysql + labels: + app: wordpress +spec: + selector: + matchLabels: + app: wordpress + tier: mysql + strategy: + type: Recreate + template: + metadata: + labels: + app: wordpress + tier: mysql + spec: + containers: + - image: mysql:8.0 + name: mysql + env: + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: mysql-pass + key: password + - name: MYSQL_DATABASE + value: wordpress + - name: MYSQL_USER + value: wordpress + - name: MYSQL_PASSWORD + valueFrom: + secretKeyRef: + name: mysql-pass + key: password + ports: + - containerPort: 3306 + name: mysql + volumeMounts: + - name: mysql-persistent-storage + mountPath: /var/lib/mysql + volumes: + - name: mysql-persistent-storage + persistentVolumeClaim: + claimName: mysql-pv-claim From ad8c509596063c8390ee7ef4c883b2290e25e2ff Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:52:14 +0600 Subject: [PATCH 0895/1086] Create wordpress-deployment.yaml --- .../wordpress/wordpress-deployment.yaml | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 content/bn/examples/application/wordpress/wordpress-deployment.yaml diff --git a/content/bn/examples/application/wordpress/wordpress-deployment.yaml b/content/bn/examples/application/wordpress/wordpress-deployment.yaml new file mode 100644 index 0000000000..43d95258c9 --- /dev/null +++ b/content/bn/examples/application/wordpress/wordpress-deployment.yaml @@ -0,0 +1,69 @@ +apiVersion: v1 +kind: Service +metadata: + name: wordpress + labels: + app: wordpress +spec: + ports: + - port: 80 + selector: + app: wordpress + tier: frontend + type: LoadBalancer +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: wp-pv-claim + labels: + app: wordpress +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 20Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: wordpress + labels: + app: wordpress +spec: + selector: + matchLabels: + app: wordpress + tier: frontend + strategy: + type: Recreate + template: + metadata: + labels: + app: wordpress + tier: frontend + spec: + containers: + - image: wordpress:6.2.1-apache + name: wordpress + env: + - name: WORDPRESS_DB_HOST + value: wordpress-mysql + - name: WORDPRESS_DB_PASSWORD + valueFrom: + secretKeyRef: + name: mysql-pass + key: password + - name: WORDPRESS_DB_USER + value: wordpress + ports: + - containerPort: 80 + name: wordpress + volumeMounts: + - name: wordpress-persistent-storage + mountPath: /var/www/html + volumes: + - name: wordpress-persistent-storage + persistentVolumeClaim: + claimName: wp-pv-claim From be07c45c81e6f2fa758938bd04c68a9b7fc6142a Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:53:12 +0600 Subject: [PATCH 0896/1086] Create zookeeper.yaml --- .../application/zookeeper/zookeeper.yaml | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 content/bn/examples/application/zookeeper/zookeeper.yaml diff --git a/content/bn/examples/application/zookeeper/zookeeper.yaml b/content/bn/examples/application/zookeeper/zookeeper.yaml new file mode 100644 index 0000000000..0f3f6cf9d1 --- /dev/null +++ b/content/bn/examples/application/zookeeper/zookeeper.yaml @@ -0,0 +1,133 @@ +apiVersion: v1 +kind: Service +metadata: + name: zk-hs + labels: + app: zk +spec: + ports: + - port: 2888 + name: server + - port: 3888 + name: leader-election + clusterIP: None + selector: + app: zk +--- +apiVersion: v1 +kind: Service +metadata: + name: zk-cs + labels: + app: zk +spec: + ports: + - port: 2181 + name: client + selector: + app: zk +--- +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: zk-pdb +spec: + selector: + matchLabels: + app: zk + maxUnavailable: 1 +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: zk +spec: + selector: + matchLabels: + app: zk + serviceName: zk-hs + replicas: 3 + updateStrategy: + type: RollingUpdate + podManagementPolicy: OrderedReady + template: + metadata: + labels: + app: zk + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: "app" + operator: In + values: + - zk + topologyKey: "kubernetes.io/hostname" + containers: + - name: kubernetes-zookeeper + imagePullPolicy: Always + image: "registry.k8s.io/kubernetes-zookeeper:1.0-3.4.10" + resources: + requests: + memory: "1Gi" + cpu: "0.5" + ports: + - containerPort: 2181 + name: client + - containerPort: 2888 + name: server + - containerPort: 3888 + name: leader-election + command: + - sh + - -c + - "start-zookeeper \ + --servers=3 \ + --data_dir=/var/lib/zookeeper/data \ + --data_log_dir=/var/lib/zookeeper/data/log \ + --conf_dir=/opt/zookeeper/conf \ + --client_port=2181 \ + --election_port=3888 \ + --server_port=2888 \ + --tick_time=2000 \ + --init_limit=10 \ + --sync_limit=5 \ + --heap=512M \ + --max_client_cnxns=60 \ + --snap_retain_count=3 \ + --purge_interval=12 \ + --max_session_timeout=40000 \ + --min_session_timeout=4000 \ + --log_level=INFO" + readinessProbe: + exec: + command: + - sh + - -c + - "zookeeper-ready 2181" + initialDelaySeconds: 10 + timeoutSeconds: 5 + livenessProbe: + exec: + command: + - sh + - -c + - "zookeeper-ready 2181" + initialDelaySeconds: 10 + timeoutSeconds: 5 + volumeMounts: + - name: datadir + mountPath: /var/lib/zookeeper + securityContext: + runAsUser: 1000 + fsGroup: 1000 + volumeClaimTemplates: + - metadata: + name: datadir + spec: + accessModes: [ "ReadWriteOnce" ] + resources: + requests: + storage: 10Gi From db649bab90b544ff433416929ac3cf735d2f3c7f Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:54:05 +0600 Subject: [PATCH 0897/1086] Create deployment-patch.yaml --- .../application/deployment-patch.yaml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 content/bn/examples/application/deployment-patch.yaml diff --git a/content/bn/examples/application/deployment-patch.yaml b/content/bn/examples/application/deployment-patch.yaml new file mode 100644 index 0000000000..af12f4cb0c --- /dev/null +++ b/content/bn/examples/application/deployment-patch.yaml @@ -0,0 +1,21 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: patch-demo +spec: + replicas: 2 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: patch-demo-ctr + image: nginx + tolerations: + - effect: NoSchedule + key: dedicated + value: test-team From 9354ee95a3ca96d93807a253946471c91022a107 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:54:44 +0600 Subject: [PATCH 0898/1086] Create deployment-retainkeys.yaml --- .../application/deployment-retainkeys.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/application/deployment-retainkeys.yaml diff --git a/content/bn/examples/application/deployment-retainkeys.yaml b/content/bn/examples/application/deployment-retainkeys.yaml new file mode 100644 index 0000000000..af63f46d37 --- /dev/null +++ b/content/bn/examples/application/deployment-retainkeys.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: retainkeys-demo +spec: + selector: + matchLabels: + app: nginx + strategy: + rollingUpdate: + maxSurge: 30% + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: retainkeys-demo-ctr + image: nginx From c1043557f86e8d6e7791fd178a1338f1594bacda Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:55:41 +0600 Subject: [PATCH 0899/1086] Create deployment-scale.yaml --- .../application/deployment-scale.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/application/deployment-scale.yaml diff --git a/content/bn/examples/application/deployment-scale.yaml b/content/bn/examples/application/deployment-scale.yaml new file mode 100644 index 0000000000..838576375e --- /dev/null +++ b/content/bn/examples/application/deployment-scale.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + selector: + matchLabels: + app: nginx + replicas: 4 # Update the replicas from 2 to 4 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.16.1 + ports: + - containerPort: 80 From f45785e922f4ed7b523f8c5e46758fe390c16b8e Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:56:24 +0600 Subject: [PATCH 0900/1086] Create deployment-update.yaml --- .../application/deployment-update.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/application/deployment-update.yaml diff --git a/content/bn/examples/application/deployment-update.yaml b/content/bn/examples/application/deployment-update.yaml new file mode 100644 index 0000000000..1c0b9d1ab8 --- /dev/null +++ b/content/bn/examples/application/deployment-update.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + selector: + matchLabels: + app: nginx + replicas: 2 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.16.1 # Update the version of nginx from 1.14.2 to 1.16.1 + ports: + - containerPort: 80 From 7a85ca8aade61cc04318b49fd2752f210e7072aa Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:57:05 +0600 Subject: [PATCH 0901/1086] Create nginx-app.yaml --- .../bn/examples/application/nginx-app.yaml | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 content/bn/examples/application/nginx-app.yaml diff --git a/content/bn/examples/application/nginx-app.yaml b/content/bn/examples/application/nginx-app.yaml new file mode 100644 index 0000000000..d00682e1fc --- /dev/null +++ b/content/bn/examples/application/nginx-app.yaml @@ -0,0 +1,34 @@ +apiVersion: v1 +kind: Service +metadata: + name: my-nginx-svc + labels: + app: nginx +spec: + type: LoadBalancer + ports: + - port: 80 + selector: + app: nginx +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-nginx + labels: + app: nginx +spec: + replicas: 3 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.14.2 + ports: + - containerPort: 80 From 4aa1936dd7abdaec2b2b0a7b98e14d683b4ce5a4 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:57:53 +0600 Subject: [PATCH 0902/1086] Create nginx-with-request.yaml --- .../application/nginx-with-request.yaml | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 content/bn/examples/application/nginx-with-request.yaml diff --git a/content/bn/examples/application/nginx-with-request.yaml b/content/bn/examples/application/nginx-with-request.yaml new file mode 100644 index 0000000000..dd9d002a60 --- /dev/null +++ b/content/bn/examples/application/nginx-with-request.yaml @@ -0,0 +1,23 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + selector: + matchLabels: + app: nginx + replicas: 2 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx + resources: + limits: + memory: "128Mi" + cpu: "500m" + ports: + - containerPort: 80 From 866a98599ac42ddaaf1f093bb854c92476fe60e8 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:58:26 +0600 Subject: [PATCH 0903/1086] Create php-apache.yaml --- .../bn/examples/application/php-apache.yaml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 content/bn/examples/application/php-apache.yaml diff --git a/content/bn/examples/application/php-apache.yaml b/content/bn/examples/application/php-apache.yaml new file mode 100644 index 0000000000..a194dce6f9 --- /dev/null +++ b/content/bn/examples/application/php-apache.yaml @@ -0,0 +1,35 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: php-apache +spec: + selector: + matchLabels: + run: php-apache + template: + metadata: + labels: + run: php-apache + spec: + containers: + - name: php-apache + image: registry.k8s.io/hpa-example + ports: + - containerPort: 80 + resources: + limits: + cpu: 500m + requests: + cpu: 200m +--- +apiVersion: v1 +kind: Service +metadata: + name: php-apache + labels: + run: php-apache +spec: + ports: + - port: 80 + selector: + run: php-apache From 50c016d7bcb51b561e21e7a2b05791de0bd8716d Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:58:57 +0600 Subject: [PATCH 0904/1086] Create shell-demo.yaml --- content/bn/examples/application/shell-demo.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 content/bn/examples/application/shell-demo.yaml diff --git a/content/bn/examples/application/shell-demo.yaml b/content/bn/examples/application/shell-demo.yaml new file mode 100644 index 0000000000..9eb140d80f --- /dev/null +++ b/content/bn/examples/application/shell-demo.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Pod +metadata: + name: shell-demo +spec: + volumes: + - name: shared-data + emptyDir: {} + containers: + - name: nginx + image: nginx + volumeMounts: + - name: shared-data + mountPath: /usr/share/nginx/html + hostNetwork: true + dnsPolicy: Default From 724d16570edcf08e88b82b9c223c1ecdcf84ff55 Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 22:59:51 +0600 Subject: [PATCH 0905/1086] Create simple_deployment.yaml --- .../application/simple_deployment.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 content/bn/examples/application/simple_deployment.yaml diff --git a/content/bn/examples/application/simple_deployment.yaml b/content/bn/examples/application/simple_deployment.yaml new file mode 100644 index 0000000000..d9c74af8c5 --- /dev/null +++ b/content/bn/examples/application/simple_deployment.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + selector: + matchLabels: + app: nginx + minReadySeconds: 5 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.14.2 + ports: + - containerPort: 80 From fafa4a3c86f601a01fdd9a89dcda9787852ab58d Mon Sep 17 00:00:00 2001 From: Sabbir Ahmed Shameem <145862004+SAShameem@users.noreply.github.com> Date: Tue, 7 May 2024 23:00:28 +0600 Subject: [PATCH 0906/1086] Create update_deployment.yaml --- .../application/update_deployment.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 content/bn/examples/application/update_deployment.yaml diff --git a/content/bn/examples/application/update_deployment.yaml b/content/bn/examples/application/update_deployment.yaml new file mode 100644 index 0000000000..2d7603acb9 --- /dev/null +++ b/content/bn/examples/application/update_deployment.yaml @@ -0,0 +1,18 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.16.1 # update the image + ports: + - containerPort: 80 From 2e9f106fcd0300d7e90afeacd291868eadff7c10 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 00:02:55 +0600 Subject: [PATCH 0907/1086] Create README.md --- content/bn/examples/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 content/bn/examples/README.md diff --git a/content/bn/examples/README.md b/content/bn/examples/README.md new file mode 100644 index 0000000000..0ac9922b5c --- /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 +``` From 2c13071546d08e79f3a07e8e4d79b87a5ee3427a Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 00:03:40 +0600 Subject: [PATCH 0908/1086] Create examples.go --- content/bn/examples/examples.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/bn/examples/examples.go diff --git a/content/bn/examples/examples.go b/content/bn/examples/examples.go new file mode 100644 index 0000000000..9a2cc2ecdc --- /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 From d41300d7a4c02bf2e7e36b3acc6baa5c2c3b4d4b Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 00:04:57 +0600 Subject: [PATCH 0909/1086] Create examples_test.go --- content/bn/examples/examples_test.go | 850 +++++++++++++++++++++++++++ 1 file changed, 850 insertions(+) create mode 100644 content/bn/examples/examples_test.go diff --git a/content/bn/examples/examples_test.go b/content/bn/examples/examples_test.go new file mode 100644 index 0000000000..ee17a3fdee --- /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) + } + } +} From ff81a892bd70554b63682974511f906340358c4c Mon Sep 17 00:00:00 2001 From: Junya Okabe Date: Wed, 8 May 2024 04:17:07 +0900 Subject: [PATCH 0910/1086] sync-up README to en --- README-ja.md | 106 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 66 insertions(+), 40 deletions(-) diff --git a/README-ja.md b/README-ja.md index 047d1c9ceb..42d2291130 100644 --- a/README-ja.md +++ b/README-ja.md @@ -2,14 +2,14 @@ [![Netlify Status](https://api.netlify.com/api/v1/badges/be93b718-a6df-402a-b4a4-855ba186c97d/deploy-status)](https://app.netlify.com/sites/kubernetes-io-main-staging/deploys) [![GitHub release](https://img.shields.io/github/release/kubernetes/website.svg)](https://github.com/kubernetes/website/releases/latest) -このリポジトリには、[KubernetesのWebサイトとドキュメント](https://kubernetes.io/)をビルドするために必要な全アセットが格納されています。貢献に興味を持っていただきありがとうございます! +このリポジトリには、[KubernetesのWebサイトとドキュメント](https://kubernetes.io/)をビルドするために必要な全アセットが格納されています。あなたの貢献をお待ちしています! - [ドキュメントに貢献する](#contributing-to-the-docs) - [翻訳された`README.md`一覧](#localization-readmemds) -# リポジトリの使い方 +## リポジトリの使い方 -Hugo(Extended version)を使用してWebサイトをローカルで実行することも、コンテナランタイムで実行することもできます。コンテナランタイムを使用することを強くお勧めします。これにより、本番Webサイトとのデプロイメントの一貫性が得られます。 +Hugo(Extended version)を使用してWebサイトをローカルで実行することも、コンテナランタイムで実行することもできます。コンテナランタイムを使用することを強くお勧めします。これにより、本番Webサイトとのデプロイの一貫性が得られます。 ## 前提条件 @@ -17,67 +17,84 @@ Hugo(Extended version)を使用してWebサイトをローカルで実行する - [npm](https://www.npmjs.com/) - [Go](https://go.dev/) -- [Hugo(Extended version)](https://gohugo.io/) +- [Hugo (Extended version)](https://gohugo.io/) - [Docker](https://www.docker.com/)などのコンテナランタイム -開始する前に、依存関係をインストールしてください。リポジトリのクローンを作成し、ディレクトリに移動します。 +> [!NOTE] +[`netlify.toml`](netlify.toml#L11)の`HUGO_VERSION`環境変数で指定されたHugo extended versionをインストールしてください。 -``` +始める前に、依存関係をインストールしてください。リポジトリをクローンし、ディレクトリに移動します。 + +```bash git clone https://github.com/kubernetes/website.git cd website ``` -KubernetesのWebサイトではDocsyというHugoテーマを使用しています。コンテナでWebサイトを実行する場合でも、以下を実行して、サブモジュールおよびその他の開発依存関係をプルすることを強くお勧めします。 +KubernetesのWebサイトでは[DocsyというHugoテーマ](https://github.com/google/docsy#readme)を使用しています。コンテナでWebサイトを実行する場合でも、以下を実行して、サブモジュールおよびその他の依存関係を取得することを強くお勧めします。 -``` -# pull in the Docsy submodule +### Windows + +```powershell +# サブモジュールの依存関係を取得 git submodule update --init --recursive --depth 1 ``` +### Linux / other Unix + +```bash +# サブモジュールの依存関係を取得 +make module-init +``` + ## コンテナを使ってウェブサイトを動かす コンテナ内でサイトを構築するには、以下を実行してコンテナイメージを構築し、実行します。 -``` -make container-image +```bash +# 環境変数$CONTAINER_ENGINEを設定することで、Docker以外のコンテナランタイムを使用することもできます make container-serve ``` -お使いのブラウザにて http://localhost:1313 にアクセスしてください。リポジトリ内のソースファイルに変更を加えると、HugoがWebサイトの内容を更新してブラウザに反映します。 +エラーが発生した場合はhugoコンテナの計算リソースが不足しています。これを解決するには、使用しているマシン([MacOS](https://docs.docker.com/desktop/settings/mac/)と[Windows](https://docs.docker.com/desktop/settings/windows/))でDockerが使用できるCPUとメモリを増やしてください。 + +ブラウザでにアクセスしてください。リポジトリ内のソースファイルに変更を加えると、HugoがWebサイトの内容を更新してブラウザに反映します。 ## Hugoを使ってローカル環境でWebサイトを動かす -[`netlify.toml`](netlify.toml#L10)ファイルに記述されている`HUGO_VERSION`と同じExtended versionのHugoをインストールするようにしてください。 +ローカルで依存関係をインストールし、サイトを構築してテストするには、次のコマンドを実行します。 -ローカルでサイトを構築してテストするには、次のコマンドを実行します。 +- For macOS and Linux + ```bash + npm ci + make serve + ``` +- For Windows (PowerShell) + ```powershell + npm ci + hugo.exe server --buildFuture --environment development + ``` -```bash -# install dependencies -npm ci -make serve -``` - -これで、Hugoのサーバーが1313番ポートを使って開始します。お使いのブラウザにて http://localhost:1313 にアクセスしてください。リポジトリ内のソースファイルに変更を加えると、HugoがWebサイトの内容を更新してブラウザに反映します。 +これで、Hugoのサーバーが1313番ポートを使って起動します。使用しているブラウザでにアクセスしてください。リポジトリ内のソースファイルに変更を加えると、HugoがWebサイトの内容を更新してブラウザに反映します。 ## API reference pagesをビルドする -`content/en/docs/reference/kubernetes-api`に配置されているAPIリファレンスページはを使ってSwagger仕様書からビルドされています。 +`content/ja/docs/reference/kubernetes-api`に配置されているAPIリファレンスページはを使ってSwagger Specification (OpenAPI Specification)からビルドされています。 新しいKubernetesリリースのためにリファレンスページをアップデートするには、次の手順を実行します: -1. `api-ref-generator`サブモジュールをプルする: +1. `api-ref-generator`サブモジュールを取得する: ```bash git submodule update --init --recursive --depth 1 ``` -2. Swagger仕様書を更新する: +2. Swagger Specificationを更新する: ```bash curl 'https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json' > api-ref-assets/api/swagger.json ``` -3. 新しいリリースの変更を反映するため、`api-ref-assets/config/`で`toc.yaml`と`fields.yaml`を適用する。 +3. `api-ref-assets/config/`内の`toc.yaml`と`fields.yaml`を新しいリリースの変更に合わせます。 4. 次に、ページをビルドする: @@ -85,7 +102,7 @@ make serve make api-reference ``` - コンテナイメージからサイトを作成・サーブする事でローカルで結果をテストすることができます: + コンテナイメージからサイトを作成、サーブする事でローカルで結果をテストすることができます: ```bash make container-image @@ -94,19 +111,19 @@ make serve APIリファレンスを見るために、ブラウザでを開いてください。 -5. 新しいコントラクトのすべての変更が設定ファイル`toc.yaml`と`fields.yaml`に反映されたら、新しく生成されたAPIリファレンスページとともにPull Requestを作成します。 +5. 新しいコントラクトのすべての変更が設定ファイル`toc.yaml`と`fields.yaml`に反映されたら、新しく生成されたAPIリファレンスのページとともにPull Requestを作成します。 ## トラブルシューティング ### error: failed to transform resource: TOCSS: failed to transform "scss/main.scss" (text/x-scss): this feature is not available in your current Hugo version -Hugoは、技術的な理由から2種類のバイナリがリリースされています。現在のウェブサイトは**Hugo Extended**バージョンのみに基づいて運営されています。[リリースページ](https://github.com/gohugoio/hugo/releases)で名前に「extended」が含まれるアーカイブを探します。確認するには、`hugo version`を実行し、「extended」という単語を探します。 +Hugoは、技術的な理由から2種類のバイナリがリリースされています。現在のウェブサイトは**Hugo Extended**バージョンのみに基づいて運営されています。[リリースページ](https://github.com/gohugoio/hugo/releases)で名前に`extended`が含まれるアーカイブを探します。確認するには、`hugo version`を実行し、`extended`という単語を探します。 ### macOSにてtoo many open filesというエラーが表示される macOS上で`make serve`を実行した際に以下のエラーが表示される場合 -``` +```bash ERROR 2020/08/01 19:09:18 Error: listen tcp 127.0.0.1:1313: socket: too many open files make: *** [serve] Error 1 ``` @@ -115,9 +132,9 @@ OS上で同時に開けるファイルの上限を確認してください。 `launchctl limit maxfiles` -続いて、以下のコマンドを実行します(https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c より引用)。 +続いて、以下のコマンドを実行します(より引用)。 -``` +```shell #!/bin/sh # These are the original gist links, linking to my gists now. @@ -140,31 +157,40 @@ sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist ## SIG Docsに参加する -[コミュニティのページ](https://github.com/kubernetes/community/tree/master/sig-docs#meetings)をご覧になることで、SIG Docs Kubernetesコミュニティとの関わり方を学ぶことができます。 +[コミュニティのページ](https://github.com/kubernetes/community/tree/master/sig-docs#meetings)を確認することで、SIG Docs Kubernetesコミュニティとの関わり方を学ぶことができます。 本プロジェクトのメンテナーには以下の方法で連絡することができます: -- [Slack](https://kubernetes.slack.com/messages/kubernetes-docs-ja) +- [Slack #kubernetes-docs-ja チャンネル](https://kubernetes.slack.com/messages/kubernetes-docs-ja) - [メーリングリスト](https://groups.google.com/forum/#!forum/kubernetes-sig-docs) ## ドキュメントに貢献する {#contributing-to-the-docs} -GitHubの画面右上にある**Fork**ボタンをクリックすると、お使いのGitHubアカウントに紐付いた本リポジトリのコピーが作成され、このコピーのことを*フォーク*と呼びます。フォークリポジトリの中ではお好きなように変更を加えていただいて構いません。加えた変更をこのリポジトリに追加したい任意のタイミングにて、フォークリポジトリからPull Reqeustを作成してください。 +GitHubの画面右上にある**Fork**ボタンをクリックすると、GitHubアカウントに紐付いた本リポジトリのコピーが作成されます。このコピーのことを*フォーク*と呼びます。フォークリポジトリの中では好きなように変更を加えることができます。加えた変更をこのリポジトリに反映したい好きなタイミングで、フォークリポジトリからPull Reqeustを作成してください。 -Pull Requestが作成されると、レビュー担当者が責任を持って明確かつ実用的なフィードバックを返します。Pull Requestの所有者は作成者であるため、**ご自身で作成したPull Requestを編集し、フィードバックに対応するのはご自身の役目です。** +Pull Requestが作成されると、レビュー担当者が責任を持って明確かつ実用的なフィードバックを返します。Pull Requestの所有者は作成者であるため、**自分自身で作成したPull Requestを編集し、フィードバックに対応するのはあなたの責任です。** -また、状況によっては2人以上のレビュアーからフィードバックが返されたり、アサインされていないレビュー担当者からのフィードバックが来ることがある点もご注意ください。 +また、状況によっては2人以上のレビュアーからフィードバックが返されたり、アサインされていないレビュアーからのフィードバックが来ることがある点も留意してください。 -さらに、特定のケースにおいては、レビュー担当者がKubernetesの技術的なレビュアーに対してレビューを依頼することもあります。レビュー担当者はタイムリーにフィードバックを提供するために最善を尽くしますが、応答時間は状況に応じて異なる場合があります。 +さらに、特定のケースにおいては、レビュアーがKubernetesの技術的なレビュアーに対してレビューを依頼することもあります。レビュー担当者はタイムリーにフィードバックを提供するために最善を尽くしますが、応答時間は状況に応じて異なる場合があります。 -Kubernetesのドキュメントへの貢献に関する詳細については以下のページをご覧ください: +> [!NOTE] +ローカライゼーションにおいては、技術的なレビューを行うことはありません。技術的なレビューは英語版のドキュメントに対してのみ行われます。 + +Kubernetesのドキュメントへの貢献に関する詳細については以下のページを確認してください: + +> [!NOTE] +日本語のローカライゼーションを行う際は、[Kubernetesのドキュメントを翻訳する](https://kubernetes.io/ja/docs/contribute/localization/)が参照すべきガイドとなります。 * [Kubernetesのドキュメントへの貢献](https://kubernetes.io/ja/docs/contribute/) * [ページコンテントタイプ](https://kubernetes.io/docs/contribute/style/page-content-types/) * [ドキュメントのスタイルガイド](https://kubernetes.io/docs/contribute/style/style-guide/) * [Kubernetesドキュメントの翻訳方法](https://kubernetes.io/docs/contribute/localization/) -### New Contributor Ambassadors +### 新たなコントリビューターのためのアンバサダー + +> [!NOTE] +日本語のローカライゼーションに関する質問は、[Slack #kubernetes-docs-ja チャンネル](https://kubernetes.slack.com/messages/kubernetes-docs-ja)にてお気軽にお尋ねください。 コントリビュートする時に何か助けが必要なら、[New Contributor Ambassadors](https://kubernetes.io/docs/contribute/advanced/#serve-as-a-new-contributor-ambassador)に聞いてみると良いでしょう。彼らはSIG Docsのapproverで、最初の数回のPull Requestを通して新しいコントリビューターを指導し助けることを責務としています。New Contributors Ambassadorsにコンタクトするには、[Kubernetes Slack](https://slack.k8s.io)が最適な場所です。現在のSIG DocsのNew Contributor Ambassadorは次の通りです: @@ -186,7 +212,7 @@ Kubernetesのドキュメントへの貢献に関する詳細については以 ### 行動規範 -Kubernetesコミュニティへの参加については、[CNCFの行動規範](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)によって管理されています。 +Kubernetesコミュニティへの参加については、[CNCFの行動規範](https://github.com/cncf/foundation/blob/main/code-of-conduct-languages/ja.md)によって管理されています。 ## ありがとうございます! From b3f8df12138d7bc9052d64eba509f4d454d46796 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Wed, 8 May 2024 02:23:59 +0600 Subject: [PATCH 0911/1086] Update version-skew-policy.md --- content/bn/releases/version-skew-policy.md | 190 ++++++++++++++++++++- 1 file changed, 187 insertions(+), 3 deletions(-) diff --git a/content/bn/releases/version-skew-policy.md b/content/bn/releases/version-skew-policy.md index f0f97a574f..7794503745 100644 --- a/content/bn/releases/version-skew-policy.md +++ b/content/bn/releases/version-skew-policy.md @@ -9,11 +9,11 @@ reviewers: title: সংস্করণ স্কেও(Skew) নীতি type: docs description: > - বিভিন্ন কুবারনেটিসের উপাদানগুলির মধ্যে সমর্থিত সর্বাধিক সংস্করণ স্ক্যু(skew)। + কুবারনেটিসের বিভিন্ন উপাদানগুলির মধ্যে সমর্থিত সর্বাধিক সংস্করণ স্ক্যু(skew)। --- -এই ডকুমেন্টটি বিভিন্ন কুবারনেটিসের উপাদানগুলির মধ্যে সমর্থিত সর্বাধিক সংস্করণ স্ক্যু(skew) বর্ণনা করে। +এই ডকুমেন্টটি কুবারনেটিসের বিভিন্ন উপাদানগুলির মধ্যে সমর্থিত সর্বাধিক সংস্করণ স্ক্যু(skew) বর্ণনা করে। নির্দিষ্ট ক্লাস্টার সরঞ্জামগুলি সংস্করণ স্ক্যুতে(skew) অতিরিক্ত সীমাবদ্ধতা স্থাপন করতে পারে৷ @@ -38,7 +38,7 @@ description: > আরও তথ্যের জন্য, কুবারনেটিস [প্যাচ রিলিজ](/bn/releases/patch-releases/) পৃষ্ঠাটি দেখুন। -## সমর্থিত সংস্করণ স্ক্যু(skew) +## সংস্করণ সমর্থিত স্ক্যু(skew) ### কুবে-এপিসার্ভার (kube-apiserver) @@ -47,11 +47,195 @@ description: > উদাহরণ: +* নতুন `kube-apiserver` **{{< skew currentVersion >}}** এ আছে +* অন্যান্য `kube-apiserver` ইন্সট্যান্সগুলি **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** এ সমর্থিত +### kubelet +* `kubelet` নতুন হওয়া উচিত নয় `kube-apiserver` এর চেয়ে। +* `kubelet` তিনটি ছোট সংস্করণ পর্যন্ত পুরানো হতে পারে `kube-apiserver` এর চেয়ে (`kubelet` < 1.25 শুধুমাত্র দুটি ছোট সংস্করণ পর্যন্ত পুরানো হতে পারে `kube-apiserver` এর চেয়ে). +উদাহরণ: +* `kube-apiserver` **{{< skew currentVersion >}}** এ আছে +* `kubelet` **{{< skew currentVersion >}}**, **{{< skew currentVersionAddMinor -1 >}}**, + **{{< skew currentVersionAddMinor -2 >}}**, এবং **{{< skew currentVersionAddMinor -3 >}}** সমর্থিত +{{< note >}} +If version skew exists between `kube-apiserver` instances in an HA cluster, this narrows the allowed `kubelet` versions. +{{}} +উদাহরণ: +* `kube-apiserver` ইন্সট্যান্সগুলিতে **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** আছে +* `kubelet` **{{< skew currentVersionAddMinor -1 >}}**, **{{< skew currentVersionAddMinor -2 >}}**, + এবং **{{< skew currentVersionAddMinor -3 >}}** এ সমর্থিত (**{{< skew currentVersion >}}** সমর্থিত নয় কারণ + এটি সংস্করণ **{{< skew currentVersionAddMinor -1 >}}** -এ `kube-apiserver` ইন্সট্যান্সের চেয়ে নতুন হবে) +### kube-proxy + +* `kube-proxy` নতুন হওয়া উচিত নয় `kube-apiserver` এর চেয়ে। +* `kube-proxy` তিনটি ছোট সংস্করণ পর্যন্ত পুরানো হতে পারে `kube-apiserver` এর চেয়ে + (`kube-proxy` < 1.25 শুধুমাত্র দুটি ছোট সংস্করণ পর্যন্ত পুরানো হতে পারে `kube-apiserver`) এর চেয়ে। +* `kube-proxy` তিনটি ছোট সংস্করণ পর্যন্ত পুরানো বা নতুন হতে পারে `kubelet` ইন্সট্যান্সের(instance) থেকে + পাশাপাশি এটি চলে (`kube-proxy` < 1.25 শুধুমাত্র দুটি ছোট সংস্করণ পর্যন্ত পুরানো বা নতুন হতে পারে + `kubelet` ইন্সট্যান্সের থেকে পাশাপাশি এটি চলে )। + +উদাহরণ: + +* `kube-apiserver` **{{< skew currentVersion >}}** এ আছে +* `kube-proxy` তে **{{< skew currentVersion >}}**, **{{< skew currentVersionAddMinor -1 >}}**, + **{{< skew currentVersionAddMinor -2 >}}**, এবং **{{< skew currentVersionAddMinor -3 >}}** এ সমর্থিত + +{{< note >}} +If version skew exists between `kube-apiserver` instances in an HA cluster, this narrows the allowed `kube-proxy` versions. +{{}} + +উদাহরণ: + +* `kube-apiserver` ইন্সট্যান্সে **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** আছে +* `kube-proxy` **{{< skew currentVersionAddMinor -1 >}}**, **{{< skew currentVersionAddMinor -2 >}}**, + এবং **{{< skew currentVersionAddMinor -3 >}}** এ সমর্থিত (**{{< skew currentVersion >}}** সমর্থিত নয় কারণ + এটি সংস্করণ **{{< skew currentVersionAddMinor -1 >}}** -এ `kube-apiserver` ইন্সট্যান্সের চেয়ে নতুন হবে) + +### কুবে-কন্ট্রোলার-ম্যানেজার, কুবে-শিডিউলার, এবং ক্লাউড-কন্ট্রোলার-ম্যানেজার (kube-controller-manager, kube-scheduler, and cloud-controller-manager) + +`kube-controller-manager`, `kube-scheduler`, এবং `cloud-controller-manager` নতুন হওয়া উচিত নয় +`kube-apiserver` থেকে ইন্সট্যান্সগুলির সাথে তারা যোগাযোগ করে। তারা `kube-apiserver` ক্ষুদ্র সংস্করণের সাথে মিলবে বলে আশা করা হচ্ছে, +কিন্তু একটি ছোট সংস্করণ পর্যন্ত পুরানো হতে পারে (লাইভ আপগ্রেডের অনুমতি দেওয়ার জন্য)। + +উদাহরণ: + +* `kube-apiserver` **{{< skew currentVersion >}}** এ আছে +* `kube-controller-manager`, `kube-scheduler`, এবং `cloud-controller-manager` সমর্থিত আছে + **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** + +{{< note >}} +If version skew exists between `kube-apiserver` instances in an HA cluster, and these components +can communicate with any `kube-apiserver` instance in the cluster (for example, via a load balancer), +this narrows the allowed versions of these components. +{{< /note >}} + +উদাহরণ: + +* `kube-apiserver` ইন্সট্যান্সে **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** আছে +* `kube-controller-manager`, `kube-scheduler`, এবং `cloud-controller-manager` একটি লোড ব্যালেন্সারের সাথে যোগাযোগ করে + যে কোনো `kube-apiserver` ইন্সট্যান্সে রুট করতে পারে +* `kube-controller-manager`, `kube-scheduler`, এবং `cloud-controller-manager` সমর্থিত আছে + **{{< skew currentVersionAddMinor -1 >}}** (**{{< skew currentVersion >}}** সমর্থিত নয় + কারণ এটি **{{< skew currentVersionAddMinor -1 >}}** সংস্করণে নতুন হবে `kube-apiserver` ইন্সট্যান্সের চেয়ে নতুন হবে) + +### kubectl + +`kubectl` একটি ছোট সংস্করণ (পুরানো বা নতুন) `kube-apiserver` এর মধ্যে সমর্থিত। + +উদাহরণ: + +* `kube-apiserver` আছে **{{< skew currentVersion >}}** +* `kubectl` সমর্থিত আছে **{{< skew currentVersionAddMinor 1 >}}**, **{{< skew currentVersion >}}**, + এবং **{{< skew currentVersionAddMinor -1 >}}** + +{{< note >}} +If version skew exists between `kube-apiserver` instances in an HA cluster, this narrows the supported `kubectl` versions. +{{< /note >}} + +উদাহরণ: + +* `kube-apiserver` ইন্সট্যান্সে আছে **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** +* `kubectl` সমর্থিত আছে **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** + (অন্যান্য সংস্করণগুলি `kube-apiserver` উপাদানগুলির একটি থেকে একের বেশি ছোটখাট সংস্করণ হবে ) + +## উপাদান সমর্থিত আপগ্রেড অর্ডার + +উপাদানগুলির মধ্যে সমর্থিত সংস্করণের স্কুটির প্রভাব রয়েছে যে ক্রম +অনুসারে উপাদানগুলিকে আপগ্রেড করতে হবে৷ এই বিভাগটি +**{{< skew currentVersionAddMinor -1 >}}** সংস্করণ থেকে **{{< skew currentVersion >}}** সংস্করণে একটি বিদ্যমান +ক্লাস্টার রূপান্তর করতে উপাদানগুলিকে আপগ্রেড করতে হবে তা বর্ণনা করে৷ + +ঐচ্ছিকভাবে, আপগ্রেড করার প্রস্তুতির সময়, কুবারনেটস প্রজেক্ট সুপারিশ করে যে +আপনি আপগ্রেড করার সময় যতটা সম্ভব রিগ্রেশন এবং বাগ ফিক্স থেকে উপকৃত হতে +নিম্নলিখিতগুলি করুন: + +* নিশ্চিত করুন যে উপাদানগুলি আপনার বর্তমান ছোট সংস্করণের সবচেয়ে সাম্প্রতিক প্যাচ + সংস্করণে রয়েছে৷ +* ক্ষুদ্র লক্ষ্য সংস্করণের সবচেয়ে সাম্প্রতিক প্যাচ সংস্করণে উপাদান আপগ্রেড + করুন। + +উদাহরণস্বরূপ, আপনি যদি {{}} সংস্করণ চালাচ্ছেন, +তাহলে নিশ্চিত করুন যে আপনি সাম্প্রতিক প্যাচ সংস্করণে আছেন৷ তারপর, {{}}-এর সবচেয়ে +সাম্প্রতিক প্যাচ সংস্করণে আপগ্রেড করুন৷ + +### kube-apiserver + +পূর্বশর্তসমূহ: + +* একটি একক-ইন্সট্যান্স ক্লাস্টারে, বিদ্যমান `kube-apiserver` ইন্সট্যান্স হল **{{< skew currentVersionAddMinor -1 >}}** +* একটি HA ক্লাস্টারে, সমস্ত `kube-apiserver` ইন্সট্যান্সগুলি **{{< skew currentVersionAddMinor -1 >}}** বা + **{{< skew currentVersion >}}** এ থাকে (এটি প্রাচীনতম এবং নতুন `kube-apiserver` ইন্সট্যান্সের মধ্যে সর্বাধিক 1 টি ছোট সংস্করণ নিশ্চিত করে ) +* এই সার্ভারের সাথে যোগাযোগকারী `কুব-কন্ট্রোলার-ম্যানেজার`, `কুব-শিডিউলার` এবং `ক্লাউড-কন্ট্রোলার-ম্যানেজার` + ইনস্ট্যান্সগুলি **{{< skew currentVersionAddMinor -1 >}}** সংস্করণে রয়েছে + (এটি নিশ্চিত করে যে তারা বিদ্যমান API সার্ভার সংস্করণের চেয়ে নতুন নয় ,এবং এর মধ্যে রয়েছে নতুন API সার্ভার সংস্করণের 1টি ছোট সংস্করণ) +* সমস্ত নোডের `kubelet` ইনস্ট্যান্সগুলি **{{< skew currentVersionAddMinor -1 >}}** or **{{< skew currentVersionAddMinor -2 >}}** সংস্করণে রয়েছে + (এটি নিশ্চিত করে যে তারা বিদ্যমান API সার্ভার সংস্করণের চেয়ে নতুন নয় ,এবং নতুন API সার্ভার সংস্করণের 2টি ছোট সংস্করণের মধ্যে রয়েছে) +* নিবন্ধিত ভর্তির ওয়েবহুকগুলি নতুন `কুবে-এপিসার্ভার` ইনস্ট্যান্স যে ডেটা পাঠাবে তা পরিচালনা করতে সক্ষম: + * `ValidatingWebhookConfiguration` এবং `MutatingWebhookConfiguration` অবজেক্ট অন্তর্ভুক্ত করার জন্য আপডেট করা হয়েছে + REST রিসোর্সের যেকোন নতুন সংস্করণ **{{< skew currentVersion >}}** এ যোগ করা হয়েছে + (বা ব্যবহার করুন [`matchPolicy: Equivalent` option](/bn/docs/reference/access-authn-authz/extensible-admission-controllers/#matching-requests-matchpolicy) v1.15+ এ সহজলভ্য) + * ওয়েবহুকগুলি REST সংস্থানগুলির যে কোনও নতুন সংস্করণ পরিচালনা করতে সক্ষম যা তাদের কাছে পাঠানো হবে, + এবং **{{< skew currentVersion >}}**-এ বিদ্যমান সংস্করণগুলিতে যে কোনও নতুন ক্ষেত্র যুক্ত করা হবে। + +`kube-apiserver` আপগ্রেড করুন **{{< skew currentVersion >}}** + +{{< note >}} +Project policies for [API deprecation](/docs/reference/using-api/deprecation-policy/) and +[API change guidelines](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api_changes.md) +require `kube-apiserver` to not skip minor versions when upgrading, even in single-instance clusters. +{{< /note >}} + +### কুবে-কন্ট্রোলার-ম্যানেজার, কুবে-শিডিউলার, এবং ক্লাউড-কন্ট্রোলার-ম্যানেজার(kube-controller-manager, kube-scheduler, and cloud-controller-manager) + +পূর্বশর্তসমূহ: + +* `kube-apiserver` ইনস্ট্যান্সগুলির সাথে এই উপাদানগুলি **{{< skew currentVersion >}}** -এ যোগাযোগ করে + (HA ক্লাস্টারে যেখানে এই কন্ট্রোল প্লেন উপাদানগুলি ক্লাস্টারের যেকোনো `kube-apiserver` ইনস্ট্যান্সের সাথে যোগাযোগ + করতে পারে, এই উপাদানগুলি আপগ্রেড করার আগে সমস্ত `kube-apiserver` ইনস্ট্যান্সগুলি আপগ্রেড করা আবশ্যক) + +**{{< skew currentVersion >}}** থেকে আপগ্রেড করুন `kube-controller-manager`, `kube-scheduler`, এবং +`cloud-controller-manager` । `kube-controller-manager`, `kube-scheduler`, +`cloud-controller-manager` এর মধ্যে কোনো প্রয়োজনীয় আপগ্রেড অর্ডার নেই। +আপনি যে কোনো ক্রমে এই উপাদান আপগ্রেড করতে পারেন, বা +এমনকি একই সাথে। + +### kubelet + +পূর্বশর্তসমূহ: + +* যে `kube-apiserver` দৃইনস্ট্যান্স `kubelet` এর সাথে যোগাযোগ করে তা **{{< skew currentVersion >}}**-এ। + +ঐচ্ছিকভাবে `kubelet` ইনস্ট্যান্সগুলিকে **{{< skew currentVersion >}}** তে আপগ্রেড করুন (অথবা সেগুলি +**{{< skew currentVersionAddMinor -1 >}}**, **{{< skew currentVersionAddMinor -2 >}}**, বা **{{< skew currentVersionAddMinor -3 >}}** এ ছেড়ে দেওয়া যেতে পারে) + +{{< note >}} +Before performing a minor version `kubelet` upgrade, [drain](/docs/tasks/administer-cluster/safely-drain-node/) pods from that node. +In-place minor version `kubelet` upgrades are not supported. +{{}} + +{{< warning >}} +Running a cluster with `kubelet` instances that are persistently three minor versions behind +`kube-apiserver` means they must be upgraded before the control plane can be upgraded. +{{}} + +### kube-proxy + +পূর্বশর্তসমূহ: + +* যে `kube-apiserver` ইনস্ট্যান্স `kube-proxy` এর সাথে যোগাযোগ করে তা **{{< skew currentVersion >}}**-এ। + +ঐচ্ছিকভাবে `kube-proxy` ইনস্ট্যান্সগুলিকে **{{< skew currentVersion >}}** তে আপগ্রেড করুন +(অথবা সেগুলি **{{< skew currentVersionAddMinor -1 >}}**, **{{< skew currentVersionAddMinor -2 >}}**, +বা **{{< skew currentVersionAddMinor -3 >}}** এ ছেড়ে দেওয়া যেতে পারে) + +{{< warning >}} +Running a cluster with `kube-proxy` instances that are persistently three minor versions behind +`kube-apiserver` means they must be upgraded before the control plane can be upgraded. +{{}} From 047be8fc319a978c0b17c2a7b08aeb914081e172 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Wed, 8 May 2024 02:45:13 +0600 Subject: [PATCH 0912/1086] Update content/bn/releases/release.md Co-authored-by: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> --- content/bn/releases/release.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index 7b4235516e..14d1da5b22 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -155,9 +155,9 @@ auto_generated: true বছর ধরে চলমান ফিচার নির্ধারণের সাথে, কিছু আইটেম একটি নির্দিষ্ট রিলিজের লক্ষ্য হিসেবে উঠে আসবে। **[এনহ্যান্সমেন্ট ফ্রিজ][enhancements-freeze]** -রিলিজ সাইকেলের ~৪ সপ্তাহের মধ্যে শুরু হয়। এই মুহুর্তে সমস্ত উদ্দেশ্যমূলক ফিচার কাজ করে -প্রদত্ত রিলিজ উপযুক্ত পরিকল্পনা নিদর্শন মধ্যে সংজ্ঞায়িত করা হয়েছে -রিলিজ টিমের সাথে একযোগে [এনহ্যান্সমেন্ট লিড](https://git.k8s.io/sig-release/release-team/role-handbooks/enhancements/README.md). +রিলিজ সাইকেলের ~৪ সপ্তাহের মধ্যে শুরু হয়। এই মুহুর্তে সমস্ত উদ্দেশ্যমূলক ফিচার কাজকে +রিলিজ টিমের সাথে একযোগে [এনহ্যান্সমেন্ট লিড](https://git.k8s.io/sig-release/release-team/role-handbooks/enhancements/README.md) +প্রদত্ত রিলিজ উপযুক্ত পরিকল্পনা নিদর্শনে সংজ্ঞায়িত করা হয়েছে । এনহ্যান্সমেন্ট ফ্রিজের পরে, PR এবং ইস্যুগুলোর মাইলস্টোন ট্র্যাক করা গুরুত্বপূর্ণ। মাইলস্টোন থাকা আইটেমগুলি সম্পূর্ণ করার জন্য একটি পাঞ্চডাউন তালিকা হিসাবে ব্যবহৃত হয় From b161f0bdec6cd5b4ae4f03843131ae7755f67523 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Wed, 8 May 2024 02:45:24 +0600 Subject: [PATCH 0913/1086] Update content/bn/releases/release.md Co-authored-by: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> --- content/bn/releases/release.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index 14d1da5b22..59aa3217b2 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -278,9 +278,9 @@ GitHub টিম দ্বারা GitHub আর্টিফ্যাক্ট ইস্যুগুলোকে Prow "/milestone" কমান্ডের মাধ্যমে একটি মাইলস্টোন লক্ষ্য করে চিহ্নিত করা হয়েছে৷ -রিলিজ টিমের [বাগ ট্রাইজ লিড](https://git.k8s.io/sig-release/release-team/role-handbooks/bug-triage/README.md) -এবং সামগ্রিক সম্প্রদায় আগত সমস্যাগুলি দেখে এবং সেগুলিকে ট্রাইজ করে -[ইস্যু ট্রাইজ](https://k8s.dev/docs/guide/issue-triage/). +রিলিজ টিমের [বাগ Triage লিড](https://git.k8s.io/sig-release/release-team/role-handbooks/bug-triage/README.md) +এবং সামগ্রিক কমিউনিটি আগত সমস্যাগুলি দেখে এবং সেগুলিকে Triage করে +[ইস্যু Triage](https://k8s.dev/docs/guide/issue-triage/). এর অবদানকারী নির্দেশিকা বিভাগে বর্ণিত হয়েছে। মাইলস্টোনের সাথে সমস্যাগুলি চিহ্নিত করা কমিউনিটি একটি সমস্যা কখন পর্যবেক্ষণ করা হয়েছিল From 6d4a7c95931ab722a26ffd431de690f20a841ba9 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Wed, 8 May 2024 02:45:36 +0600 Subject: [PATCH 0914/1086] Update content/bn/releases/release.md Co-authored-by: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> --- content/bn/releases/release.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index 59aa3217b2..bdc8b58f2f 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -260,7 +260,7 @@ GitHub টিম দ্বারা GitHub আর্টিফ্যাক্ট ### ফিচার সংযোজন -বৈশিষ্ট্য পরিকল্পনা এবং সংজ্ঞা আজ অনেক রূপ নেয়, কিন্তু একটি সাধারণ উদাহরণ +ফিচার পরিকল্পনা এবং সংজ্ঞা আজ অনেক রূপ নেয়, কিন্তু একটি সাধারণ উদাহরণ হতে পারে একটি [KEP][keps]-এ বর্ণিত কাজের একটি বড় অংশ, GitHub-এ সংশ্লিষ্ট টাস্ক সমস্যা সহ। যখন পরিকল্পনাটি একটি বাস্তবায়নযোগ্য অবস্থায় পৌঁছেছে এবং কাজ চলছে, তখন বর্ধন বা এর অংশগুলিকে GitHub সমস্যা তৈরি করে এবং Prow From 42d96931cf6d4a77e1de56df68ae9653eb1742fd Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Wed, 8 May 2024 02:45:50 +0600 Subject: [PATCH 0915/1086] Update content/bn/releases/release.md Co-authored-by: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> --- content/bn/releases/release.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index bdc8b58f2f..50a7eecd65 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -146,7 +146,7 @@ auto_generated: true - ইমপ্লিমেন্টেশন - স্ট্যাবিলাইজেশন -কিন্তু বাস্তবে, এটি একটি ওপেন সোর্স এবং চটপটে প্রকল্প, ফিচার পরিকল্পনা +কিন্তু বাস্তবে, এটি একটি ওপেন সোর্স এবং অ্যাজাইল(agile) প্রকল্প, ফিচার পরিকল্পনা এবং বাস্তবায়ন সব সময়ে ঘটছে। প্রজেক্ট স্কেল এবং বিশ্বব্যাপী ডিস্ট্রিবিউটেড ডেভেলপার বেস এর ফলে, এটি গুরুত্বপূর্ণ যে প্রজেক্টের গতি যেনো ট্রেইলিং স্টেবিলাইজেশন ফেজ এর উপর নির্ভর না করে এবং বরং ক্রমাগত ইন্টিগ্রেশন টেস্টিং চলমান থাকে From 12659049e456233547648e1a782003a0e0717046 Mon Sep 17 00:00:00 2001 From: "Md. Sojibul Islam Rana" Date: Wed, 8 May 2024 02:46:02 +0600 Subject: [PATCH 0916/1086] Update content/bn/releases/release.md Co-authored-by: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> --- content/bn/releases/release.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/releases/release.md b/content/bn/releases/release.md index 50a7eecd65..be461387e9 100644 --- a/content/bn/releases/release.md +++ b/content/bn/releases/release.md @@ -268,7 +268,7 @@ GitHub টিম দ্বারা GitHub আর্টিফ্যাক্ট রিলিজ চক্রের প্রথম ~4 সপ্তাহের জন্য, রিলিজ টিমের এনহ্যান্সমেন্ট লিড সমস্ত প্রয়োজনীয় পরিকল্পনা নিদর্শনগুলি ক্যাপচার করতে GitHub, Slack এবং SIG -মিটিংয়ের মাধ্যমে SIG এবং বৈশিষ্ট্য মালিকদের সাথে যোগাযোগ করবে। +মিটিংয়ের মাধ্যমে SIG এবং ফিচার মালিকদের সাথে যোগাযোগ করবে। আপনার যদি আসন্ন রিলিজের মাইলস্টোন লক্ষ্য করার জন্য একটি এনহ্যান্সমেন্ট থাকে, তাহলে আপনার SIG নেতৃত্বের সাথে এবং সেই রিলিজের এনহ্যান্সমেন্ট লিডের সাথে কথা From 683567bd73b51711c1cc064cafc6b9734832635b Mon Sep 17 00:00:00 2001 From: Arhell Date: Wed, 8 May 2024 00:23:00 +0300 Subject: [PATCH 0917/1086] [ko] Ready training section for vanilla Docsy --- content/ko/training/_index.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/ko/training/_index.html b/content/ko/training/_index.html index 8eb9f5d9e6..6aea6fcbbc 100644 --- a/content/ko/training/_index.html +++ b/content/ko/training/_index.html @@ -5,6 +5,10 @@ abstract: 교육 프로그램, 인증 그리고 파트너 layout: basic cid: training class: training +body_class: training +menu: + main: + weight: 30 ---
          From 040c03124e035335b83b2102c875872120655e36 Mon Sep 17 00:00:00 2001 From: windsonsea Date: Tue, 7 May 2024 18:19:01 +0800 Subject: [PATCH 0918/1086] [zh] Sync kubeadm/implementation-details.md --- .../kubeadm/implementation-details.md | 337 ++++++++---------- 1 file changed, 150 insertions(+), 187 deletions(-) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/implementation-details.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/implementation-details.md index c7059200ef..c5b0ad0c6b 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/implementation-details.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/implementation-details.md @@ -17,17 +17,17 @@ weight: 100 {{< feature-state for_k8s_version="v1.10" state="stable" >}} -`kubeadm init` 和 `kubeadm join` 结合在一起提供了良好的用户体验, -因为从头开始创建实践最佳而配置最基本的 Kubernetes 集群。 +`kubeadm init` 和 `kubeadm join` 结合在一起为从头开始创建最基本的 Kubernetes +集群提供了良好的用户体验,这与最佳实践一致。 但是,kubeadm **如何**做到这一点可能并不明显。 本文档提供了更多幕后的详细信息,旨在分享有关 Kubernetes 集群最佳实践的知识。 @@ -38,7 +38,9 @@ knowledge on Kubernetes cluster best practices. --> ## 核心设计原则 {#core-design-principles} - + `kubeadm init` 和 `kubeadm join` 设置的集群该是: Kubernetes 目录 `/etc/kubernetes` 在应用程序中是一个常量, 因为在大多数情况下它显然是给定的路径,并且是最直观的位置;其他路径常量和文件名有: - `/etc/kubernetes/manifests` 作为 kubelet 查找静态 Pod 清单的路径。静态 Pod 清单的名称为: @@ -151,9 +153,8 @@ Kubernetes 目录 `/etc/kubernetes` 在应用程序中是一个常量, ## kubeadm init 工作流程内部设计 {#kubeadm-init-workflow-internal-design} `kubeadm init` [内部工作流程](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init/#init-workflow) 包含一系列要执行的原子性工作任务,如 `kubeadm init` 中所述。 @@ -182,13 +183,13 @@ kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并 用户可以使用 `--ignore-preflight-errors` 选项跳过特定的预检或全部检查。 - [警告] 如果要使用的 Kubernetes 版本(由 `--kubernetes-version` 标志指定)比 kubeadm CLI 版本至少高一个小版本。 @@ -198,13 +199,13 @@ kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并 - [错误] 如果未设置所需的 Cgroups 子系统 - [错误] 如果 CRI 端点未应答 - [错误] 如果用户不是 root 用户 - [错误] 如果机器主机名不是有效的 DNS 子域 @@ -214,7 +215,7 @@ kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并 - [警告] 如果 kubelet 服务不存在或已被禁用 - [警告] 如果 firewalld 处于活动状态 - [警告] 如果命令路径中没有 `ebtables`、`ethtool`、`socat`、`tc`、`touch`、`crictl` 命令 - [警告] 如果 API 服务器、控制器管理器、调度程序的其他参数标志包含一些无效选项 @@ -258,18 +259,15 @@ kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并 - 如果授权方式为 Webhook - [错误] 如果 webhook_authz.conf 不存在 +{{< note >}} -请注意: - - -1. 可以使用 [`kubeadm init phase preflight`](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-preflight) - 命令单独触发预检。 +可以使用 [`kubeadm init phase preflight`](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-preflight) +命令单独触发预检。 +{{< /note >}} - 用于前端代理的证书颁发机构保存到 `front-proxy-ca.crt` 文件中,私钥保存到 @@ -351,12 +349,12 @@ Please note that: 请注意: 1. 如果证书和私钥对都存在,并且其内容经过评估符合上述规范,将使用现有文件, @@ -368,11 +366,10 @@ Please note that: 而不提供 `ca.key` 文件。 kubeadm 能够识别出这种情况并启用 ExternalCA,这也意味着了控制器管理器中的 `csrsigner` 控制器将不会启动。 ---> @@ -394,10 +391,10 @@ kubeadm 生成具有用于控制平面组件身份标识的 kubeconfig 文件: @@ -426,7 +423,7 @@ kubeadm 生成具有用于控制平面组件身份标识的 kubeconfig 文件: - 调度器的 kubeconfig 文件 —— `/etc/kubernetes/scheduler.conf`; @@ -440,7 +437,7 @@ in `/etc/kubernetes/admin.conf`. This file includes a certificate with `Subject: O = kubeadm:cluster-admins, CN = kubernetes-admin`. `kubeadm:cluster-admins` is a group managed by kubeadm. It is bound to the `cluster-admin` ClusterRole during `kubeadm init`, by using the `super-admin.conf` file, which does not require RBAC. -This `admin.conf` file must remain on control plane nodes and not be shared with additional users. +This `admin.conf` file must remain on control plane nodes and should not be shared with additional users. --> 此外,还会生成将 kubeadm 作为管理实体的 kubeconfig 文件并将其保存到 `/etc/kubernetes/admin.conf` 中。 该文件包含一个带有 `Subject: O = kubeadm:cluster-admins, CN = kubernetes-admin` @@ -452,9 +449,9 @@ This `admin.conf` file must remain on control plane nodes and not be shared with 在 `kubeadm init` 期间,会生成另一个 kubeconfig 文件并将其存储在 `/etc/kubernetes/super-admin.conf` 中。 该文件包含一个带有 `Subject: O = system:masters, CN = kubernetes-super-admin` 的证书。 @@ -464,23 +461,25 @@ The `super-admin.conf` file can be stored in a safe location and not shared with 有关 RBAC 和内置 ClusterRoles 和组的其他信息, 请参阅[面向用户的 RBAC 角色绑定](/zh-cn/docs/reference/access-authn-authz/rbac/#user-facing-roles)。 - + 请注意: 1. `ca.crt` 证书内嵌在所有 kubeconfig 文件中。 @@ -500,12 +499,14 @@ for additional information RBAC and built-in ClusterRoles and groups. kubeadm 将用于控制平面组件的静态 Pod 清单文件写入 `/etc/kubernetes/manifests` 目录。 kubelet 启动后会监视这个目录以便创建 Pod。 - + 静态 Pod 清单有一些共同的属性: - 所有静态 Pod 都部署在 `kube-system` 名字空间 - 所有静态 Pod 都打上 `tier:control-plane` 和 `component:{组件名称}` 标签 @@ -524,7 +525,7 @@ kubelet 启动后会监视这个目录以便创建 Pod。 - 所有静态 Pod 都设置了 `hostNetwork:true`,使得控制平面在配置网络之前启动;结果导致: * 控制器管理器和调度器用来调用 API 服务器的地址为 `127.0.0.1` - * 如果使用本地 etcd 服务器,则 `etcd-servers` 地址将设置为 `127.0.0.1:2379` + * 如果在本地设置 etcd 服务器,`etcd-servers` 地址将被设置为 `127.0.0.1:2379` #### API 服务器 {#api-server} @@ -570,7 +571,7 @@ API 服务器的静态 Pod 清单会受到用户提供的以下参数的影响 - 要绑定的 `apiserver-advertise-address` 和 `apiserver-bind-port`; @@ -579,15 +580,15 @@ API 服务器的静态 Pod 清单会受到用户提供的以下参数的影响 - 如果指定了外部 etcd 服务器,则应指定 `etcd-servers` 地址和相关的 TLS 设置 (`etcd-cafile`、`etcd-certfile`、`etcd-keyfile`); 如果未提供外部 etcd 服务器,则将使用本地 etcd(通过主机网络) -- 如果指定了云提供商,则配置相应的 `--cloud-provider`,如果该路径存在,则配置 `--cloud-config` +- 如果指定了云提供商,则配置相应的 `--cloud-provider` 参数,如果该路径存在,则配置 `--cloud-config` (这是实验性的,是 Alpha 版本,将在以后的版本中删除) @@ -732,8 +733,8 @@ the users: - 根据给定 CIDR 设置 `--cluster-cidr` 和 `--node-cidr-mask-size` 标志 - 如果指定了云提供商,则指定相应的 `--cloud-provider`,如果存在这样的配置文件, @@ -746,8 +747,8 @@ Other flags that are set unconditionally are: @@ -757,7 +758,6 @@ Other flags that are set unconditionally are: - `--use-service-account-credentials` 设为 `true` - #### 调度器 {#scheduler} @@ -788,7 +788,7 @@ The static Pod manifest for the scheduler is not affected by parameters provided ### 为本地 etcd 生成静态 Pod 清单 {#generate-static-pod-manifest-for-local-etcd} 如果你指定的是外部 etcd,则应跳过此步骤,否则 kubeadm 会生成静态 Pod 清单文件, @@ -812,9 +812,9 @@ Please note that: 1. The etcd container image will be pulled from `registry.gcr.io` by default. See [using custom images](/docs/reference/setup-tools/kubeadm/kubeadm-init/#custom-images) for customizing the image repository. -2. If you run kubeadm in `--dry-run` mode, the etcd static Pod manifest is written +1. If you run kubeadm in `--dry-run` mode, the etcd static Pod manifest is written into a temporary folder. -3. You can directly invoke static Pod manifest generation for local etcd, using the +1. You can directly invoke static Pod manifest generation for local etcd, using the [`kubeadm init phase etcd local`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-etcd) command. --> @@ -831,7 +831,7 @@ Please note that: @@ -886,7 +886,7 @@ Please note that: ### 将节点标记为控制平面 {#mark-the-node-as-control-plane} 一旦控制平面可用,kubeadm 将执行以下操作: @@ -896,9 +896,6 @@ As soon as the control plane is available, kubeadm executes following actions: Please note that the phase to mark the control-plane phase can be invoked individually with the [`kubeadm init phase mark-control-plane`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-mark-control-plane) command. - -- Taints the node with `node-role.kubernetes.io/master:NoSchedule` and - `node-role.kubernetes.io/control-plane:NoSchedule` --> - 给节点打上 `node-role.kubernetes.io/control-plane=""` 标签,标记其为控制平面 - 给节点打上 `node-role.kubernetes.io/control-plane:NoSchedule` 污点 @@ -907,23 +904,6 @@ individually with the [`kubeadm init phase mark-control-plane`](/docs/reference/ [`kubeadm init phase mark-control-plane`](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-mark-control-plane) 命令来实现。 -- 给节点打上 `node-role.kubernetes.io/master:NoSchedule` 和 - `node-role.kubernetes.io/control-plane:NoSchedule` 污点 - - -请注意: - - -1. `node-role.kubernetes.io/master` 污点是已废弃的,将会在 kubeadm 1.25 版本中移除 -2. 可以使用 [`kubeadm init phase mark-control-plane`](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-mark-control-plane) - 命令单独触发控制平面标记 - @@ -946,20 +926,17 @@ previous paragraphs. `kubeadm init` 确保为该过程正确配置了所有内容,这包括以下步骤以及设置 API 服务器和控制器标志,如前几段所述。 +{{< note >}} -请注意: - - -1. 可以使用 [`kubeadm init phase bootstrap-token`](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-bootstrap-token) - 命令配置节点的 TLS 引导,执行以下段落中描述的所有配置步骤; - 或者每个步骤都单独触发。 +可以使用 [`kubeadm init phase bootstrap-token`](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-bootstrap-token) +命令配置节点的 TLS 引导,执行以下段落中描述的所有配置步骤; +或者也可以单独执行各个步骤。 +{{< /note >}} `kubeadm init` 创建第一个引导令牌,该令牌是自动生成的或由用户提供的 `--token` 标志的值;如引导令牌规范文档中所述,令牌应保存在 `kube-system` 名字空间下名为 @@ -984,9 +961,9 @@ Please note that: 1. The default token created by `kubeadm init` will be used to validate temporary user during TLS bootstrap process; those users will be member of `system:bootstrappers:kubeadm:default-node-token` group -2. The token has a limited validity, default 24 hours (the interval may be changed with the `—token-ttl` flag) -3. Additional tokens can be created with the [`kubeadm token`](/docs/reference/setup-tools/kubeadm/kubeadm-token/) - command, that provide as well other useful functions for token management. +1. The token has a limited validity, default 24 hours (the interval may be changed with the `—token-ttl` flag) +1. Additional tokens can be created with the [`kubeadm token`](/docs/reference/setup-tools/kubeadm/kubeadm-token/) + command, that provide other useful functions for token management as well. --> 1. 由 `kubeadm init` 创建的默认令牌将用于在 TLS 引导过程中验证临时用户; 这些用户会成为 `system:bootstrappers:kubeadm:default-node-token` 组的成员。 @@ -1000,7 +977,7 @@ Please note that: #### 允许加入的节点调用 CSR API {#allow-joining-nodes-to-call-csr-api} kubeadm 确保 `system:bootstrappers:kubeadm:default-node-token` 组中的用户能够访问证书签名 API。 @@ -1025,7 +1002,7 @@ kubeadm 确保 csrapprover 控制器自动批准引导令牌的 CSR 请求。 这是通过在 `system:bootstrappers:kubeadm:default-node-token` 用户组和 @@ -1044,10 +1021,10 @@ well, granting POST permission to -#### 通过自动批准设置节点证书轮换 {#setup-nodes-certificate-rotation-with-auto-approval} +#### 通过自动批准设置节点证书轮换 {#setup-nodes-certificate-rotation-with-auto-approval} kubeadm 确保节点启用了证书轮换,csrapprover 控制器将自动批准节点的新证书的 CSR 请求。 @@ -1073,27 +1050,24 @@ This phase creates the `cluster-info` ConfigMap in the `kube-public` namespace. 本步骤在 `kube-public` 名字空间中创建名为 `cluster-info` 的 ConfigMap。 另外,它创建一个 Role 和一个 RoleBinding,为未经身份验证的用户授予对 ConfigMap 的访问权限(即 RBAC 组 `system:unauthenticated` 中的用户)。 +{{< note >}} -请注意: - - -1. 对 `cluster-info` ConfigMap 的访问**不受**速率限制。 - 如果你把 API 服务器暴露到外网,这可能是一个问题,也可能不是; - 这里最坏的情况是 DoS 攻击,攻击者使用 kube-apiserver 能够处理的所有动态请求来为 - `cluster-info` ConfigMap 提供服务。 +对 `cluster-info` ConfigMap 的访问**不受**速率限制。 +如果你把 API 服务器暴露到外网,这可能是一个问题,也可能不是; +这里最坏的情况是 DoS 攻击,攻击者使用 kube-apiserver 可处理的所有当前请求来为 +`cluster-info` ConfigMap 提供服务。 +{{< /note >}} kubeadm 通过 API 服务器安装内部 DNS 服务器和 kube-proxy 插件。 +{{< note >}} -请注意: - - -1. 此步骤可以调用 ['kubeadm init phase addon all'](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon) - 命令单独执行。 +此步骤可以通过 ['kubeadm init phase addon all'](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon) +命令单独执行。 +{{< /note >}} -- CoreDNS Service 的名称为 `kube-dns`。这样做是为了防止当用户将集群 DNS 从 kube-dns - 切换到 CoreDNS 时出现服务中断。`--config` 方法在 - [这里](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon) - 有描述。 +- CoreDNS Service 的名称为 `kube-dns`。 + 这样做是为了防止当用户通过[此处](/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon)描述的 + `--config` 方法将集群 DNS 从 kube-dns 切换到 CoreDNS 时出现服务中断。 - 在 `kube-system` 名字空间中创建 CoreDNS 的 ServiceAccount @@ -1206,7 +1176,7 @@ Please note that: 请注意: 如果带 `--discovery-token` 参数调用 `kubeadm join`,则使用了令牌发现功能; @@ -1254,9 +1224,9 @@ In order to prevent "man in the middle" attacks, several steps are taken: - 首先,通过不安全连接检索 CA 证书(这是可能的,因为 `kubeadm init` 授予 `system:unauthenticated` 的用户对 `cluster-info` 访问权限)。 @@ -1269,7 +1239,7 @@ In order to prevent "man in the middle" attacks, several steps are taken: in the output of `kubeadm init` or can be calculated using standard tools (the hash is calculated over the bytes of the Subject Public Key Info (SPKI) object as in RFC7469). The `--discovery-token-ca-cert-hash flag` may be repeated multiple times to allow more than one public key. - - As a additional validation, the CA certificate is retrieved via secure connection and then + - As an additional validation, the CA certificate is retrieved via secure connection and then compared with the CA retrieved initially --> - 基本验证:使用令牌 ID 而不是 JWT 签名 @@ -1278,17 +1248,14 @@ In order to prevent "man in the middle" attacks, several steps are taken: `--discovery-token-ca-cert-hash` 标志可以重复多次,以允许多个公钥。 - 作为附加验证,通过安全连接检索 CA 证书,然后与初始检索的 CA 进行比较。 +{{< note >}} -请注意: - - -1. 通过 `--discovery-token-unsafe-skip-ca-verification` 标志可以跳过公钥验证; - 这削弱了 kubeadm 安全模型,因为其他人可能冒充 Kubernetes 主控节点。 +通过设置 `--discovery-token-unsafe-skip-ca-verification` 标志可以跳过公钥验证; +这样做会削弱 kubeadm 安全模型,因为其他人可能冒充 Kubernetes 主控节点。 +{{< /note >}} 通过文件发现,集群 CA 证书是文件本身提供;事实上,这个发现文件是一个 kubeconfig 文件, @@ -1322,7 +1289,7 @@ reference doc; when the connection with the cluster is established, kubeadm try ## TLS 引导 {#tls-boostrap} 知道集群信息后,kubeadm 将写入文件 `bootstrap-kubelet.conf`,从而允许 kubelet 执行 @@ -1337,28 +1304,24 @@ TLS 引导机制使用共享令牌对 Kubernetes API 服务器进行临时身份 该请求会被自动批准,并且该操作保存 `ca.crt` 文件和 `kubelet.conf` 文件,用于 kubelet 加入集群,同时删除 `bootstrap-kubelet.conf`。 +{{< note >}} -请注意: - - -- 临时身份验证根据 `kubeadm init` 过程中保存的令牌进行验证(或者使用 `kubeadm token` - 创建的其他令牌) +- 临时身份验证根据 `kubeadm init` 过程中保存的令牌进行验证(或者使用 `kubeadm token` 命令创建的其他令牌) - 临时身份验证解析到 `system:bootstrappers:kubeadm:default-node-token` 组的一个用户成员, 该成员在 `kubeadm init` 过程中被授予对 CSR API 的访问权 -- 根据 `kubeadm init` 过程的配置,自动 CSR 审批由 csrapprover 控制器管理 +- 自动的 CSR 审批由 csrapprover 控制器基于 `kubeadm init` 过程中给出的配置来管理 +{{< /note >}} From ad3d36e0c017123a8df991544e6bb77f882c5803 Mon Sep 17 00:00:00 2001 From: sajjad rahman <67529599+sajjadrahman56@users.noreply.github.com> Date: Wed, 8 May 2024 11:27:36 +0600 Subject: [PATCH 0919/1086] Update version-skew-policy.md --- content/bn/releases/version-skew-policy.md | 126 ++++++++++----------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/content/bn/releases/version-skew-policy.md b/content/bn/releases/version-skew-policy.md index 7794503745..4b25179a77 100644 --- a/content/bn/releases/version-skew-policy.md +++ b/content/bn/releases/version-skew-policy.md @@ -1,29 +1,29 @@ --- -reviewers: -- sig-api-machinery -- sig-architecture -- sig-cli -- sig-cluster-lifecycle -- sig-node -- sig-release -title: সংস্করণ স্কেও(Skew) নীতি +#reviewers: +#- sig-api-machinery +#- sig-architecture +#- sig-cli +#- sig-cluster-lifecycle +#- sig-node +#- sig-release +title: ভার্সন Skew পলিসি type: docs description: > - কুবারনেটিসের বিভিন্ন উপাদানগুলির মধ্যে সমর্থিত সর্বাধিক সংস্করণ স্ক্যু(skew)। + কুবারনেটিসের বিভিন্ন উপাদানগুলির মধ্যে সর্বাধিক ভার্সন skew সাপোর্টেড। --- -এই ডকুমেন্টটি কুবারনেটিসের বিভিন্ন উপাদানগুলির মধ্যে সমর্থিত সর্বাধিক সংস্করণ স্ক্যু(skew) বর্ণনা করে। -নির্দিষ্ট ক্লাস্টার সরঞ্জামগুলি সংস্করণ স্ক্যুতে(skew) অতিরিক্ত সীমাবদ্ধতা স্থাপন করতে পারে৷ +এই ডকুমেন্টটি কুবারনেটিসের বিভিন্ন উপাদানগুলির মধ্যে সর্বাধিক ভার্সন skew সাপোর্টেড বর্ণনা করে। +নির্দিষ্ট ক্লাস্টার সরঞ্জামগুলি ভার্সন skew অতিরিক্ত সীমাবদ্ধতা স্থাপন করতে পারে৷ -## সমর্থিত সংস্করণগুলি +## সাপোর্টেড ভার্সনগুলি -কুবারনেটিস সংস্করণ **x.y.z** হিসাবে প্রকাশ করা হয়, -যেখানে **x** হল মুখ্য সংস্করণ, **y** হল গৌণ সংস্করণ এবং **z** হল প্যাচ ভার্সন (patch version), -যা [শব্দার্থিক সংস্করণ](https://semver.org/) পরিভাষা অনুসরণ করে হয়। অতিরিক্ত তথ্যসমূহের জন্য, দেখুন -[কুবারনেটিস রিলিজ সংস্করণ](https://git.k8s.io/sig-release/release-engineering/versioning.md#kubernetes-release-versioning)। +কুবারনেটিস ভার্সন x.y.z হিসাবে প্রকাশ করা হয়, +যেখানে x হল মুখ্য ভার্সন, y হল গৌণ ভার্সন এবং z হল প্যাচ ভার্সন (patch version), +যা [শব্দার্থিক ভার্সন](https://semver.org/) পরিভাষা অনুসরণ করে হয়। অতিরিক্ত তথ্যসমূহের জন্য, দেখুন +[কুবারনেটিস রিলিজ ভার্সন](https://git.k8s.io/sig-release/release-engineering/versioning.md#kubernetes-release-versioning)। কুবারনেটিস প্রজেক্ট সাম্প্রতিক তিনটি পর্যন্ত ছোট রিলিজের জন্য রিলিজ শাখা বজায় রাখে ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}})। @@ -38,28 +38,28 @@ description: > আরও তথ্যের জন্য, কুবারনেটিস [প্যাচ রিলিজ](/bn/releases/patch-releases/) পৃষ্ঠাটি দেখুন। -## সংস্করণ সমর্থিত স্ক্যু(skew) +## ভার্সন সাপোর্টেড skew -### কুবে-এপিসার্ভার (kube-apiserver) +### kube-apiserver [অত্যন্ত-উপলব্ধ (HA) ক্লাস্টারে](/bn/docs/setup/production-environment/tools/kubeadm/high-availability/),, -নতুন এবং প্রাচীনতম `kube-apiserver` উদাহরণগুলি অবশ্যই একটি ছোট সংস্করণের মধ্যে থাকতে হবে৷ +নতুন এবং প্রাচীনতম `kube-apiserver` উদাহরণগুলি অবশ্যই একটি ছোট ভার্সনের মধ্যে থাকতে হবে৷ উদাহরণ: * নতুন `kube-apiserver` **{{< skew currentVersion >}}** এ আছে -* অন্যান্য `kube-apiserver` ইন্সট্যান্সগুলি **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** এ সমর্থিত +* অন্যান্য `kube-apiserver` ইন্সট্যান্সগুলি **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** এ সাপোর্টেড ### kubelet * `kubelet` নতুন হওয়া উচিত নয় `kube-apiserver` এর চেয়ে। -* `kubelet` তিনটি ছোট সংস্করণ পর্যন্ত পুরানো হতে পারে `kube-apiserver` এর চেয়ে (`kubelet` < 1.25 শুধুমাত্র দুটি ছোট সংস্করণ পর্যন্ত পুরানো হতে পারে `kube-apiserver` এর চেয়ে). +* `kubelet` তিনটি ছোট ভার্সন পর্যন্ত পুরানো হতে পারে `kube-apiserver` এর চেয়ে (`kubelet` < 1.25 শুধুমাত্র দুটি ছোট ভার্সন পর্যন্ত পুরানো হতে পারে `kube-apiserver` এর চেয়ে). উদাহরণ: * `kube-apiserver` **{{< skew currentVersion >}}** এ আছে * `kubelet` **{{< skew currentVersion >}}**, **{{< skew currentVersionAddMinor -1 >}}**, - **{{< skew currentVersionAddMinor -2 >}}**, এবং **{{< skew currentVersionAddMinor -3 >}}** সমর্থিত + **{{< skew currentVersionAddMinor -2 >}}**, এবং **{{< skew currentVersionAddMinor -3 >}}** সাপোর্টেড {{< note >}} If version skew exists between `kube-apiserver` instances in an HA cluster, this narrows the allowed `kubelet` versions. @@ -69,23 +69,23 @@ If version skew exists between `kube-apiserver` instances in an HA cluster, this * `kube-apiserver` ইন্সট্যান্সগুলিতে **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** আছে * `kubelet` **{{< skew currentVersionAddMinor -1 >}}**, **{{< skew currentVersionAddMinor -2 >}}**, - এবং **{{< skew currentVersionAddMinor -3 >}}** এ সমর্থিত (**{{< skew currentVersion >}}** সমর্থিত নয় কারণ - এটি সংস্করণ **{{< skew currentVersionAddMinor -1 >}}** -এ `kube-apiserver` ইন্সট্যান্সের চেয়ে নতুন হবে) + এবং **{{< skew currentVersionAddMinor -3 >}}** এ সাপোর্টেড (**{{< skew currentVersion >}}** সাপোর্টেড নয় কারণ + এটি ভার্সন **{{< skew currentVersionAddMinor -1 >}}** -এ `kube-apiserver` ইন্সট্যান্সের চেয়ে নতুন হবে) ### kube-proxy * `kube-proxy` নতুন হওয়া উচিত নয় `kube-apiserver` এর চেয়ে। -* `kube-proxy` তিনটি ছোট সংস্করণ পর্যন্ত পুরানো হতে পারে `kube-apiserver` এর চেয়ে - (`kube-proxy` < 1.25 শুধুমাত্র দুটি ছোট সংস্করণ পর্যন্ত পুরানো হতে পারে `kube-apiserver`) এর চেয়ে। -* `kube-proxy` তিনটি ছোট সংস্করণ পর্যন্ত পুরানো বা নতুন হতে পারে `kubelet` ইন্সট্যান্সের(instance) থেকে - পাশাপাশি এটি চলে (`kube-proxy` < 1.25 শুধুমাত্র দুটি ছোট সংস্করণ পর্যন্ত পুরানো বা নতুন হতে পারে +* `kube-proxy` তিনটি ছোট ভার্সন পর্যন্ত পুরানো হতে পারে `kube-apiserver` এর চেয়ে + (`kube-proxy` < 1.25 শুধুমাত্র দুটি ছোট ভার্সন পর্যন্ত পুরানো হতে পারে `kube-apiserver`) এর চেয়ে। +* `kube-proxy` তিনটি ছোট ভার্সন পর্যন্ত পুরানো বা নতুন হতে পারে `kubelet` ইন্সট্যান্সের(instance) থেকে + পাশাপাশি এটি চলে (`kube-proxy` < 1.25 শুধুমাত্র দুটি ছোট ভার্সন পর্যন্ত পুরানো বা নতুন হতে পারে `kubelet` ইন্সট্যান্সের থেকে পাশাপাশি এটি চলে )। উদাহরণ: * `kube-apiserver` **{{< skew currentVersion >}}** এ আছে * `kube-proxy` তে **{{< skew currentVersion >}}**, **{{< skew currentVersionAddMinor -1 >}}**, - **{{< skew currentVersionAddMinor -2 >}}**, এবং **{{< skew currentVersionAddMinor -3 >}}** এ সমর্থিত + **{{< skew currentVersionAddMinor -2 >}}**, এবং **{{< skew currentVersionAddMinor -3 >}}** এ সাপোর্টেড {{< note >}} If version skew exists between `kube-apiserver` instances in an HA cluster, this narrows the allowed `kube-proxy` versions. @@ -95,19 +95,19 @@ If version skew exists between `kube-apiserver` instances in an HA cluster, this * `kube-apiserver` ইন্সট্যান্সে **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** আছে * `kube-proxy` **{{< skew currentVersionAddMinor -1 >}}**, **{{< skew currentVersionAddMinor -2 >}}**, - এবং **{{< skew currentVersionAddMinor -3 >}}** এ সমর্থিত (**{{< skew currentVersion >}}** সমর্থিত নয় কারণ - এটি সংস্করণ **{{< skew currentVersionAddMinor -1 >}}** -এ `kube-apiserver` ইন্সট্যান্সের চেয়ে নতুন হবে) + এবং **{{< skew currentVersionAddMinor -3 >}}** এ সাপোর্টেড (**{{< skew currentVersion >}}** সাপোর্টেড নয় কারণ + এটি ভার্সন **{{< skew currentVersionAddMinor -1 >}}** -এ `kube-apiserver` ইন্সট্যান্সের চেয়ে নতুন হবে) -### কুবে-কন্ট্রোলার-ম্যানেজার, কুবে-শিডিউলার, এবং ক্লাউড-কন্ট্রোলার-ম্যানেজার (kube-controller-manager, kube-scheduler, and cloud-controller-manager) +### kube-controller-manager, kube-scheduler, and cloud-controller-manager `kube-controller-manager`, `kube-scheduler`, এবং `cloud-controller-manager` নতুন হওয়া উচিত নয় -`kube-apiserver` থেকে ইন্সট্যান্সগুলির সাথে তারা যোগাযোগ করে। তারা `kube-apiserver` ক্ষুদ্র সংস্করণের সাথে মিলবে বলে আশা করা হচ্ছে, -কিন্তু একটি ছোট সংস্করণ পর্যন্ত পুরানো হতে পারে (লাইভ আপগ্রেডের অনুমতি দেওয়ার জন্য)। +`kube-apiserver` থেকে ইন্সট্যান্সগুলির সাথে তারা যোগাযোগ করে। তারা `kube-apiserver` ক্ষুদ্র ভার্সনের সাথে মিলবে বলে আশা করা হচ্ছে, +কিন্তু একটি ছোট ভার্সন পর্যন্ত পুরানো হতে পারে (লাইভ আপগ্রেডের অনুমতি দেওয়ার জন্য)। উদাহরণ: * `kube-apiserver` **{{< skew currentVersion >}}** এ আছে -* `kube-controller-manager`, `kube-scheduler`, এবং `cloud-controller-manager` সমর্থিত আছে +* `kube-controller-manager`, `kube-scheduler`, এবং `cloud-controller-manager` সাপোর্টেড আছে **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** {{< note >}} @@ -121,18 +121,18 @@ this narrows the allowed versions of these components. * `kube-apiserver` ইন্সট্যান্সে **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** আছে * `kube-controller-manager`, `kube-scheduler`, এবং `cloud-controller-manager` একটি লোড ব্যালেন্সারের সাথে যোগাযোগ করে যে কোনো `kube-apiserver` ইন্সট্যান্সে রুট করতে পারে -* `kube-controller-manager`, `kube-scheduler`, এবং `cloud-controller-manager` সমর্থিত আছে - **{{< skew currentVersionAddMinor -1 >}}** (**{{< skew currentVersion >}}** সমর্থিত নয় - কারণ এটি **{{< skew currentVersionAddMinor -1 >}}** সংস্করণে নতুন হবে `kube-apiserver` ইন্সট্যান্সের চেয়ে নতুন হবে) +* `kube-controller-manager`, `kube-scheduler`, এবং `cloud-controller-manager` সাপোর্টেড আছে + **{{< skew currentVersionAddMinor -1 >}}** (**{{< skew currentVersion >}}** সাপোর্টেড নয় + কারণ এটি **{{< skew currentVersionAddMinor -1 >}}** ভার্সনে নতুন হবে `kube-apiserver` ইন্সট্যান্সের চেয়ে নতুন হবে) ### kubectl -`kubectl` একটি ছোট সংস্করণ (পুরানো বা নতুন) `kube-apiserver` এর মধ্যে সমর্থিত। +`kubectl` একটি ছোট ভার্সন (পুরানো বা নতুন) `kube-apiserver` এর মধ্যে সাপোর্টেড। উদাহরণ: * `kube-apiserver` আছে **{{< skew currentVersion >}}** -* `kubectl` সমর্থিত আছে **{{< skew currentVersionAddMinor 1 >}}**, **{{< skew currentVersion >}}**, +* `kubectl` সাপোর্টেড আছে **{{< skew currentVersionAddMinor 1 >}}**, **{{< skew currentVersion >}}**, এবং **{{< skew currentVersionAddMinor -1 >}}** {{< note >}} @@ -142,28 +142,28 @@ If version skew exists between `kube-apiserver` instances in an HA cluster, this উদাহরণ: * `kube-apiserver` ইন্সট্যান্সে আছে **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** -* `kubectl` সমর্থিত আছে **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** - (অন্যান্য সংস্করণগুলি `kube-apiserver` উপাদানগুলির একটি থেকে একের বেশি ছোটখাট সংস্করণ হবে ) +* `kubectl` সাপোর্টেড আছে **{{< skew currentVersion >}}** এবং **{{< skew currentVersionAddMinor -1 >}}** + (অন্যান্য ভার্সনগুলি `kube-apiserver` উপাদানগুলির একটি থেকে একের বেশি ছোটখাট ভার্সন হবে ) -## উপাদান সমর্থিত আপগ্রেড অর্ডার +## সাপোর্টেড উপাদান আপগ্রেড অর্ডার -উপাদানগুলির মধ্যে সমর্থিত সংস্করণের স্কুটির প্রভাব রয়েছে যে ক্রম +উপাদানগুলির মধ্যে সাপোর্টেড ভার্সনের স্কুটির প্রভাব রয়েছে যে ক্রম অনুসারে উপাদানগুলিকে আপগ্রেড করতে হবে৷ এই বিভাগটি -**{{< skew currentVersionAddMinor -1 >}}** সংস্করণ থেকে **{{< skew currentVersion >}}** সংস্করণে একটি বিদ্যমান +**{{< skew currentVersionAddMinor -1 >}}** ভার্সন থেকে **{{< skew currentVersion >}}** ভার্সনে একটি বিদ্যমান ক্লাস্টার রূপান্তর করতে উপাদানগুলিকে আপগ্রেড করতে হবে তা বর্ণনা করে৷ -ঐচ্ছিকভাবে, আপগ্রেড করার প্রস্তুতির সময়, কুবারনেটস প্রজেক্ট সুপারিশ করে যে +ঐচ্ছিকভাবে, আপগ্রেড করার প্রস্তুতির সময়, কুবারনেটিস প্রজেক্ট সুপারিশ করে যে আপনি আপগ্রেড করার সময় যতটা সম্ভব রিগ্রেশন এবং বাগ ফিক্স থেকে উপকৃত হতে নিম্নলিখিতগুলি করুন: -* নিশ্চিত করুন যে উপাদানগুলি আপনার বর্তমান ছোট সংস্করণের সবচেয়ে সাম্প্রতিক প্যাচ - সংস্করণে রয়েছে৷ -* ক্ষুদ্র লক্ষ্য সংস্করণের সবচেয়ে সাম্প্রতিক প্যাচ সংস্করণে উপাদান আপগ্রেড +* নিশ্চিত করুন যে উপাদানগুলি আপনার বর্তমান ছোট ভার্সনের সবচেয়ে সাম্প্রতিক প্যাচ + ভার্সনে রয়েছে৷ +* ক্ষুদ্র লক্ষ্য ভার্সনের সবচেয়ে সাম্প্রতিক প্যাচ ভার্সনে উপাদান আপগ্রেড করুন। -উদাহরণস্বরূপ, আপনি যদি {{}} সংস্করণ চালাচ্ছেন, -তাহলে নিশ্চিত করুন যে আপনি সাম্প্রতিক প্যাচ সংস্করণে আছেন৷ তারপর, {{}}-এর সবচেয়ে -সাম্প্রতিক প্যাচ সংস্করণে আপগ্রেড করুন৷ +উদাহরণস্বরূপ, আপনি যদি {{}} ভার্সন চালাচ্ছেন, +তাহলে নিশ্চিত করুন যে আপনি সাম্প্রতিক প্যাচ ভার্সনে আছেন৷ তারপর, {{}}-এর সবচেয়ে +সাম্প্রতিক প্যাচ ভার্সনে আপগ্রেড করুন৷ ### kube-apiserver @@ -171,18 +171,18 @@ If version skew exists between `kube-apiserver` instances in an HA cluster, this * একটি একক-ইন্সট্যান্স ক্লাস্টারে, বিদ্যমান `kube-apiserver` ইন্সট্যান্স হল **{{< skew currentVersionAddMinor -1 >}}** * একটি HA ক্লাস্টারে, সমস্ত `kube-apiserver` ইন্সট্যান্সগুলি **{{< skew currentVersionAddMinor -1 >}}** বা - **{{< skew currentVersion >}}** এ থাকে (এটি প্রাচীনতম এবং নতুন `kube-apiserver` ইন্সট্যান্সের মধ্যে সর্বাধিক 1 টি ছোট সংস্করণ নিশ্চিত করে ) + **{{< skew currentVersion >}}** এ থাকে (এটি প্রাচীনতম এবং নতুন `kube-apiserver` ইন্সট্যান্সের মধ্যে সর্বাধিক 1 টি ছোট ভার্সন নিশ্চিত করে ) * এই সার্ভারের সাথে যোগাযোগকারী `কুব-কন্ট্রোলার-ম্যানেজার`, `কুব-শিডিউলার` এবং `ক্লাউড-কন্ট্রোলার-ম্যানেজার` - ইনস্ট্যান্সগুলি **{{< skew currentVersionAddMinor -1 >}}** সংস্করণে রয়েছে - (এটি নিশ্চিত করে যে তারা বিদ্যমান API সার্ভার সংস্করণের চেয়ে নতুন নয় ,এবং এর মধ্যে রয়েছে নতুন API সার্ভার সংস্করণের 1টি ছোট সংস্করণ) -* সমস্ত নোডের `kubelet` ইনস্ট্যান্সগুলি **{{< skew currentVersionAddMinor -1 >}}** or **{{< skew currentVersionAddMinor -2 >}}** সংস্করণে রয়েছে - (এটি নিশ্চিত করে যে তারা বিদ্যমান API সার্ভার সংস্করণের চেয়ে নতুন নয় ,এবং নতুন API সার্ভার সংস্করণের 2টি ছোট সংস্করণের মধ্যে রয়েছে) + ইনস্ট্যান্সগুলি **{{< skew currentVersionAddMinor -1 >}}** ভার্সনে রয়েছে + (এটি নিশ্চিত করে যে তারা বিদ্যমান API সার্ভার ভার্সনের চেয়ে নতুন নয় ,এবং এর মধ্যে রয়েছে নতুন API সার্ভার ভার্সনের 1টি ছোট ভার্সন) +* সমস্ত নোডের `kubelet` ইনস্ট্যান্সগুলি **{{< skew currentVersionAddMinor -1 >}}** or **{{< skew currentVersionAddMinor -2 >}}** ভার্সনে রয়েছে + (এটি নিশ্চিত করে যে তারা বিদ্যমান API সার্ভার ভার্সনের চেয়ে নতুন নয় ,এবং নতুন API সার্ভার ভার্সনের 2টি ছোট ভার্সনের মধ্যে রয়েছে) * নিবন্ধিত ভর্তির ওয়েবহুকগুলি নতুন `কুবে-এপিসার্ভার` ইনস্ট্যান্স যে ডেটা পাঠাবে তা পরিচালনা করতে সক্ষম: * `ValidatingWebhookConfiguration` এবং `MutatingWebhookConfiguration` অবজেক্ট অন্তর্ভুক্ত করার জন্য আপডেট করা হয়েছে - REST রিসোর্সের যেকোন নতুন সংস্করণ **{{< skew currentVersion >}}** এ যোগ করা হয়েছে + REST রিসোর্সের যেকোন নতুন ভার্সন **{{< skew currentVersion >}}** এ যোগ করা হয়েছে (বা ব্যবহার করুন [`matchPolicy: Equivalent` option](/bn/docs/reference/access-authn-authz/extensible-admission-controllers/#matching-requests-matchpolicy) v1.15+ এ সহজলভ্য) - * ওয়েবহুকগুলি REST সংস্থানগুলির যে কোনও নতুন সংস্করণ পরিচালনা করতে সক্ষম যা তাদের কাছে পাঠানো হবে, - এবং **{{< skew currentVersion >}}**-এ বিদ্যমান সংস্করণগুলিতে যে কোনও নতুন ক্ষেত্র যুক্ত করা হবে। + * ওয়েবহুকগুলি REST সংস্থানগুলির যে কোনও নতুন ভার্সন পরিচালনা করতে সক্ষম যা তাদের কাছে পাঠানো হবে, + এবং **{{< skew currentVersion >}}**-এ বিদ্যমান ভার্সনগুলিতে যে কোনও নতুন ক্ষেত্র যুক্ত করা হবে। `kube-apiserver` আপগ্রেড করুন **{{< skew currentVersion >}}** @@ -192,7 +192,7 @@ Project policies for [API deprecation](/docs/reference/using-api/deprecation-pol require `kube-apiserver` to not skip minor versions when upgrading, even in single-instance clusters. {{< /note >}} -### কুবে-কন্ট্রোলার-ম্যানেজার, কুবে-শিডিউলার, এবং ক্লাউড-কন্ট্রোলার-ম্যানেজার(kube-controller-manager, kube-scheduler, and cloud-controller-manager) +### kube-controller-manager, kube-scheduler, and cloud-controller-manager পূর্বশর্তসমূহ: @@ -210,7 +210,7 @@ require `kube-apiserver` to not skip minor versions when upgrading, even in sing পূর্বশর্তসমূহ: -* যে `kube-apiserver` দৃইনস্ট্যান্স `kubelet` এর সাথে যোগাযোগ করে তা **{{< skew currentVersion >}}**-এ। +* যে `kube-apiserver` ইনস্ট্যান্স `kubelet` এর সাথে যোগাযোগ করে তা **{{< skew currentVersion >}}**-এ। ঐচ্ছিকভাবে `kubelet` ইনস্ট্যান্সগুলিকে **{{< skew currentVersion >}}** তে আপগ্রেড করুন (অথবা সেগুলি **{{< skew currentVersionAddMinor -1 >}}**, **{{< skew currentVersionAddMinor -2 >}}**, বা **{{< skew currentVersionAddMinor -3 >}}** এ ছেড়ে দেওয়া যেতে পারে) @@ -229,7 +229,7 @@ Running a cluster with `kubelet` instances that are persistently three minor ver পূর্বশর্তসমূহ: -* যে `kube-apiserver` ইনস্ট্যান্স `kube-proxy` এর সাথে যোগাযোগ করে তা **{{< skew currentVersion >}}**-এ। +* যে `kube-apiserver` ইনস্ট্যান্স `kube-proxy` এর সাথে যোগাযোগ করে তা **{{< skew currentVersion >}}**-এ। ঐচ্ছিকভাবে `kube-proxy` ইনস্ট্যান্সগুলিকে **{{< skew currentVersion >}}** তে আপগ্রেড করুন (অথবা সেগুলি **{{< skew currentVersionAddMinor -1 >}}**, **{{< skew currentVersionAddMinor -2 >}}**, From 7e9c5d5f570e8f13230ccdd028e59cd4e7915c1f Mon Sep 17 00:00:00 2001 From: Junya Okabe Date: Wed, 8 May 2024 14:31:44 +0900 Subject: [PATCH 0920/1086] update: `## Building the API reference pages` --- README-ja.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README-ja.md b/README-ja.md index 42d2291130..a796164244 100644 --- a/README-ja.md +++ b/README-ja.md @@ -82,13 +82,13 @@ make container-serve 新しいKubernetesリリースのためにリファレンスページをアップデートするには、次の手順を実行します: -1. `api-ref-generator`サブモジュールを取得する: +1. `api-ref-generator`サブモジュールを取得します: ```bash git submodule update --init --recursive --depth 1 ``` -2. Swagger Specificationを更新する: +2. Swagger Specificationを更新します: ```bash curl 'https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json' > api-ref-assets/api/swagger.json @@ -96,7 +96,7 @@ make container-serve 3. `api-ref-assets/config/`内の`toc.yaml`と`fields.yaml`を新しいリリースの変更に合わせます。 -4. 次に、ページをビルドする: +4. 次に、ページをビルドします: ```bash make api-reference From d471b890184514100261c2765b5fb3506d0e12d4 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 11:35:44 +0600 Subject: [PATCH 0921/1086] Update patch-releases.md --- content/bn/releases/patch-releases.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/content/bn/releases/patch-releases.md b/content/bn/releases/patch-releases.md index f688797a44..20505bb0ab 100644 --- a/content/bn/releases/patch-releases.md +++ b/content/bn/releases/patch-releases.md @@ -76,7 +76,11 @@ type: docs নিম্নলিখিত মাসিক রিলিজ পয়েন্টগুলির লক্ষ্য করব। অপরিকল্পিত, গুরুত্বপূর্ণ রিলিজগুলি এদের মধ্যেও ঘটতে পারে। -{{< upcoming-releases >}} +| Monthly Patch Release | Cherry Pick Deadline | Target date | +| --------------------- | -------------------- | ----------- | +| April 2024 | 2024-04-12 | 2024-04-16 | +| May 2024 | 2024-05-10 | 2024-05-14 | +| June 2024 | 2024-06-07 | 2024-06-11 | ## সক্রিয় শাখাগুলির জন্য বিস্তারিত রিলিজ ইতিহাস From 47dfa7fbb13bf4fec57cac165de7f5e5b8f06c78 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 11:40:45 +0600 Subject: [PATCH 0922/1086] Update _index.md --- content/bn/docs/concepts/workloads/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/workloads/_index.md b/content/bn/docs/concepts/workloads/_index.md index 6232f6c605..e14ee34f30 100644 --- a/content/bn/docs/concepts/workloads/_index.md +++ b/content/bn/docs/concepts/workloads/_index.md @@ -10,7 +10,7 @@ card: weight: 60 --- -{{< glossary_definition term_id="ওয়ার্কলোড" length="short" >}} +{{< glossary_definition term_id="workload" length="short" >}} আপনার ওয়ার্কলোড একটি একক উপাদান বা একাধিক যা একসাথে কাজ করে, কুবারনেটিসে আপনি এটিকে [_pods_](/bn/docs/concepts/workloads/pods) এর একটি সেটের মধ্যে চালান। কুবারনেটিসে, একটি পড আপনার ক্লাস্টারে From 700c60047371b0fda67fae27bbdc370265d10eae Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 11:44:51 +0600 Subject: [PATCH 0923/1086] Update _index.md --- content/bn/docs/concepts/workloads/controllers/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/workloads/controllers/_index.md b/content/bn/docs/concepts/workloads/controllers/_index.md index 4cf3a91673..fa6a96f683 100644 --- a/content/bn/docs/concepts/workloads/controllers/_index.md +++ b/content/bn/docs/concepts/workloads/controllers/_index.md @@ -8,7 +8,7 @@ simple_list: true {{< glossary_tooltip text="ওয়ার্কলোড" term_id="workload" >}} এবং ওয়ার্কলোডের উপাদানের জন্য। -অবশেষে, আপনার অ্যাপ্লিকেশন {{< glossary_tooltip term_id="পডের" text="Pods" >}} +অবশেষে, আপনার অ্যাপ্লিকেশন {{< glossary_tooltip term_id="Pod" text="পডের" >}} মধ্যে রান হয় কন্টেইনার হিসেবে; যাইহোক, একক পড ম্যানেজ করা কষ্টসাধ্য। উদাহরণস্বরূপ, যদি একটি পড ব্যর্থ হয়, আপনি তাহলে নতুন পড চালিয়ে এটিকে রিপ্লেস করতে চাইবেন। কুবারনেটিস আপনার জন্য এটি করে দিবে। From fd8ab602212604a271e49c5eafec38fa8af461a8 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 11:48:39 +0600 Subject: [PATCH 0924/1086] Update _index.md --- content/bn/docs/concepts/workloads/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/workloads/_index.md b/content/bn/docs/concepts/workloads/_index.md index e14ee34f30..ec2432c66a 100644 --- a/content/bn/docs/concepts/workloads/_index.md +++ b/content/bn/docs/concepts/workloads/_index.md @@ -24,7 +24,7 @@ card: যাইহোক, জীবনকে যথেষ্ট সহজ করতে, আপনাকে প্রতিটি পড সরাসরি পরিচালনা করতে হবে না। পরিবর্তে, আপনি _ওয়ার্কলোড রিসোর্স_ ব্যবহার করতে পারেন যা আপনার পক্ষ থেকে পডের একটি সেট পরিচালনা করে। -এই রিসোর্সগুলো {{< glossary_tooltip term_id="কন্ট্রোলার" text="controllers" >}} কনফিগার করে +এই রিসোর্সগুলো {{< glossary_tooltip term_id="controller" text="কন্ট্রোলার" >}} কনফিগার করে যা নিশ্চিত করে যে সঠিক সংখ্যক পড চলছে, আপনার নির্দিষ্ট স্টেটের সাথে মেলে৷ From b934ffe15c0b15a30be0da70044910d58010721d Mon Sep 17 00:00:00 2001 From: hihumikan Date: Wed, 8 May 2024 17:06:35 +0900 Subject: [PATCH 0925/1086] feat: Translate content/en/docs/reference/glossary/cidr.md into Japanese --- content/ja/docs/reference/glossary/cidr.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 content/ja/docs/reference/glossary/cidr.md diff --git a/content/ja/docs/reference/glossary/cidr.md b/content/ja/docs/reference/glossary/cidr.md new file mode 100644 index 0000000000..683b6be24a --- /dev/null +++ b/content/ja/docs/reference/glossary/cidr.md @@ -0,0 +1,17 @@ +--- +title: CIDR +id: cidr +date: 2024-05-08 +full_link: +short_description: > + CIDRは、IPアドレスの範囲を記述するための表記法であり、さまざまなネットワークを構成するために使用されています。 + +aka: +tags: +- networking +--- +CIDR(Classless Inter-Domain Routing)はIPアドレスの範囲を記述するための表記法であり、さまざまなネットワークを構成するために使用されています。 + + + +Kubernetesでは、各{{< glossary_tooltip text="Node" term_id="node" >}}に対して、CIDRで記述されている開始アドレスとサブネットマスクを通してIPアドレスの範囲が割り当てられます。これにより、Nodeは各{{< glossary_tooltip text="Pod" term_id="pod" >}}に一意のIPアドレスを割り当てることができます。CIDRはもともとIPv4の概念でしたが、IPv6もサポートされるように拡張されています。 From 1ac453c99144437a7f217f818ae50d9eee65abaf Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 14:37:58 +0600 Subject: [PATCH 0926/1086] Update bn.toml --- data/i18n/bn/bn.toml | 284 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 231 insertions(+), 53 deletions(-) diff --git a/data/i18n/bn/bn.toml b/data/i18n/bn/bn.toml index 17bbff36dd..acf07d7971 100644 --- a/data/i18n/bn/bn.toml +++ b/data/i18n/bn/bn.toml @@ -1,11 +1,25 @@ # i18n strings for the Bengali (main) site. -# NOTE: Please keep the entries in alphabetical order when editing +# NOTE: Please keep the entries in alphabetical order (english alphabetical order) when editing + +# For "and", see [conjunction_1] + +[api_reference_title] +other = "API রেফারেন্স" [auto_generated_edit_notice] other = "(auto-generated page)" [auto_generated_pageinfo] -other = """

          এই পৃষ্ঠাটি স্বয়ংক্রিয়ভাবে তৈরি হয়।

          আপনি যদি এই পৃষ্ঠার সাথে একটি সমস্যা রিপোর্ট করার পরিকল্পনা করেন, তাহলে উল্লেখ করুন যে পৃষ্ঠাটি আপনার সমস্যার বিবরণে স্বয়ংক্রিয়ভাবে তৈরি হয়েছে। Kubernetes প্রজেক্টের অন্য কোথাও ঠিক করার প্রয়োজন হতে পারে।

          """ +other = """

          এই পৃষ্ঠাটি স্বয়ংক্রিয়ভাবে তৈরি হয়।

          আপনি যদি এই পৃষ্ঠার সাথে একটি সমস্যা রিপোর্ট করার পরিকল্পনা করেন, তাহলে উল্লেখ করুন যে পৃষ্ঠাটি আপনার সমস্যার বিবরণে স্বয়ংক্রিয়ভাবে তৈরি হয়েছে। কুবারনেটিস প্রজেক্টের অন্য কোথাও ঠিক করার প্রয়োজন হতে পারে।

          """ + +[blog_post_show_more] +other = "আরো পোস্ট দেখান..." + +[banner_acknowledgement] +other = "এই নোটিস লুকান" + +[case_study_prefix] +other = "কেস স্টাডিজ:" [caution] other = "সতর্কতা:" @@ -13,14 +27,24 @@ other = "সতর্কতা:" [cleanup_heading] other = "ক্লিনিং" +# Localization note (no need to translate this note) +# This is always followed by Chinese text, as required by the Kubernetes +# project's ICP license, issued by the government of the People's Republic +# of China. +[china_icp_license] +other = "ICP license:" + [community_events_calendar] -other = "ঘটনার দিনপঞ্জিকা" +other = "ইভেন্ট ক্যালেন্ডার" [community_forum_name] other = "ফোরাম" [community_github_name] -other = "GitHub" +other = "গিটহাব" + +[community_server_fault_name] +other = "সার্ভারের ত্রুটি" [community_slack_name] other = "Slack" @@ -29,29 +53,32 @@ other = "Slack" other = "Stack Overflow" [community_twitter_name] -other = "Twitter" +other = "X (আগে টুইটার)" + +[community_x_name] +other = "X (আগে টুইটার)" [community_youtube_name] -other = "YouTube" +other = "ইউটিউব" ## Avoid using conjunction_1. ## Must match the context in layouts/shortcodes/release-data.html ## Appears on https://kubernetes.io/releases/ ## For example the "and" in "Complete 1.25 Schedule and Changelog" [conjunction_1] -other = "and" +other = "এবং" [cve_id] other = "CVE ID" [cve_issue_url] -other = "CVE GitHub Issue URL" +other = "CVE গিটহাব ইস্যু URL" [cve_summary] -other = "Issue Summary" +other = "ইস্যু সারাংশ" [cve_table] -other = "Official Kubernetes CVE List" +other = "অফিসিয়াল কুবারনেটিস CVE তালিকা" [cve_table_date_format] other = "02 Jan 2006 15:04:05 MST" @@ -60,7 +87,7 @@ other = "02 Jan 2006 15:04:05 MST" other = "(last updated: %s)" [deprecation_title] -other = "আপনি Kubernetes সংস্করণের জন্য ডকুমেন্টেশন দেখছেন:" +other = "আপনি যে কুবারনেটিস সংস্করণের জন্য ডকুমেন্টেশন দেখছেন :" [deprecation_warning] other = " ডকুমেন্টেশন আর সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয় না। আপনি বর্তমানে যে সংস্করণটি দেখছেন সেটি একটি স্ট্যাটিক স্ন্যাপশট। আপ-টু-ডেট ডকুমেন্টেশনের জন্য, দেখুন " @@ -68,8 +95,14 @@ other = " ডকুমেন্টেশন আর সক্রিয়ভা [deprecation_file_warning] other = "ডেপ্রিক্যাটেড" +[outdated_content_title] +other = "এই ডকুমেন্টে তথ্য পুরানো হতে পারে" + +[outdated_content_message] +other = "এই ডকুমেন্টটির আসলটির চেয়ে পুরানো আপডেটের তারিখ রয়েছে, তাই এতে থাকা তথ্য পুরানো হতে পারে৷ আপনি ইংরেজি পড়তে সক্ষম হলে, সবচেয়ে আপ-টু-ডেট তথ্যের জন্য ইংরেজি সংস্করণটি দেখুন:" + [dockershim_message] -other = """1.24 রিলিজ হিসাবে Dockershim কুবারনেটিস প্রকল্প থেকে সরানো হয়েছে। বিস্তারি তথ্যের জন্য Dockershim Removal FAQ পড়ুন। """ +other = """1.24 রিলিজ হিসাবে Dockershim কুবারনেটিস প্রকল্প থেকে সরানো হয়েছে। আরও বিস্তারিত জানার জন্য ডকারশিম রিমুভাল FAQ পড়ুন।""" [docs_label_browse] other = "ডক্স ব্রাউজ করুন" @@ -81,7 +114,10 @@ other = "অবদানকারীরা" other = "আমি..." [docs_label_users] -other = "অবদানকারীরা" +other = "ব্যবহারকারীরা" + +[docs_page_versions] +other = "এই %s কুবারনেটিস %s-এর জন্য। আপনি যদি একটি ভিন্ন কুবারনেটিস সংস্করণ ব্যবহার করতে চান, দয়া করে পরিবর্তে নিম্নলিখিত পৃষ্ঠাগুলি পড়ুন:" [docs_version_current] other = "(এই ডকুমেন্টেশন)" @@ -96,7 +132,7 @@ other = "পুরানো সংস্করণ" other = "জীবনের শেষ:" [envvars_heading] -other = "ইন্বাইরন্মন্ট বেরীঅবল" +other = "এনভায়রনমেন্ট ভেরিয়েবল" [error_404_were_you_looking_for] other = "আপনি এই খুঁজছেন:" @@ -104,11 +140,50 @@ other = "আপনি এই খুঁজছেন:" [examples_heading] other = "উদাহরণ" +[feature_gate_stage_alpha] +other = "Alpha" + +[feature_gate_stage_beta] +other = "Beta" + +[feature_gate_stage_stable] +other = "GA" + +[feature_gate_stage_deprecated] +other = "ডেপ্রিক্যাটেড" + +[feature_gate_table_header_default] +other = "ডিফল্ট" + +[feature_gate_table_header_feature] +other = "ফিচার" + +[feature_gate_table_header_from] +other = "From" + +[feature_gate_table_header_since] +other = "Since" + +[feature_gate_table_header_stage] +other = "Stage" + +[feature_gate_table_header_to] +other = "To" + +[feature_gate_table_header_until] +other = "Until" + [feature_state] -other = "ফীচর স্থিতি:" +other = "ফিচার স্টেট:" + +[feature_state_kubernetes_label] +other = "কুবারনেটিস" + +[feature_state_feature_gate_tooltip] +other = "ফিচার গেট:" [feedback_heading] -other = "প্রতিক্রিয়া" +other = "ফিডব্যাক" [feedback_no] other = "না" @@ -126,11 +201,25 @@ other = "চূড়ান্ত প্যাচ রিলিজ" other = "," [input_placeholder_email_address] -other = "ইমেল ঠিকানা" +other = "ইমেইল ঠিকানা" [javascript_required] other = "এই বিষয়বস্তু দেখতে JavaScript [চালু](https://www.enable-javascript.com/) থাকতে হবে" +[katacoda_message] +other = """

          ইন্টারেক্টিভ টিউটোরিয়াল বন্ধ করুন

          +

          এই ওয়েবসাইটের ইন্টারেক্টিভ টিউটোরিয়াল বন্ধ করা হচ্ছে। +কুবারনেটিস প্রজেক্ট দীর্ঘমেয়াদে একই ধরনের ইন্টারেক্টিভ লার্নিং +অপশন পুনঃস্থাপন করার আশা করছে।

          +

          O'Reilly Media's 2019 Katacoda এরঅধিগ্রহণ +অনুসরণ করে শাটডাউন করা হলো ।

          +

          Kubernetes o'Reilly এবং Katacoda-এর কাছে অনেক বছর ধরে কুবারনেটইস শেখার জন্য +তাদের প্রথম পদক্ষেপ নিতে সাহায্য করার জন্য কৃতজ্ঞ।

          +

          টিউটোরিয়ালগুলি মার্চ, 2023 এর 31st পরে কাজ করা বন্ধ হয়ে +যাবে। আরও তথ্যের জন্য, দেখুন "Free Katacoda Kubernetes Tutorials Are Shutting +Down."

          """ + [latest_release] other = "সর্বশেষ রিলিজ:" @@ -150,7 +239,7 @@ other = "আপনার স্টোরী বলুন" other = "এই নামেও পরিচিত" [layout_docs_glossary_architecture_description] -other = "কুবারনেটসের অভ্যন্তরীণ উপাদান" +other = "কুবারনেটিসের অভ্যন্তরীণ উপাদান" [layout_docs_glossary_architecture_name] other = "আর্কিটেকচার" @@ -162,52 +251,52 @@ other = "কোনো নির্দিষ্ট শব্দের জন্ other = "ক্লিক করুন" [layout_docs_glossary_community_description] -other = "Kubernetes ওপেন সোর্স ডেভেলপমেন্ট সম্পর্কিত" +other = "কুবারনেটিস ওপেন সোর্স ডেভেলপমেন্ট সম্পর্কিত" [layout_docs_glossary_community_name] -other = "কম্যূনটী" +other = "কমিউনিটি" [layout_docs_glossary_core-object_description] -other = "একটি রিসোর্স টাইপ যা কুবারনেটস ডিফল্টরূপে সমর্থন করে" +other = "একটি রিসোর্স টাইপ যা কুবারনেটিস ডিফল্টরূপে সাপোর্ট করে" [layout_docs_glossary_core-object_name] -other = "মূল বস্তু" +other = "কোর অবজেক্ট" [layouts_docs_glossary_description] -other = "এই শব্দকোষটি Kubernetes পরিভাষার একটি বিস্তৃত, প্রমিত তালিকা হওয়ার উদ্দেশ্যে করা হয়েছে। এতে প্রযুক্তিগত শব্দ রয়েছে যা কুবারনেটসের জন্য নির্দিষ্ট, সেইসাথে আরও সাধারণ শব্দ যা দরকারী প্রসঙ্গ প্রদান করে।" +other = "এই শব্দকোষটি কুবারনেটিস পরিভাষার একটি বিস্তৃত, প্রমিত তালিকা হওয়ার উদ্দেশ্যে করা হয়েছে। এতে প্রযুক্তিগত শব্দ রয়েছে যা কুবারনেটিসের জন্য নির্দিষ্ট, সেইসাথে আরও সাধারণ শব্দ যা দরকারী প্রসঙ্গ প্রদান করে।" [layouts_docs_glossary_deselect_all] other = "সব গুলো অনির্বাচিত কর" [layout_docs_glossary_extension_description] -other = "Kubernetes এর সমর্থিত কাস্টমাইজেশন।" +other = "কুবারনেটিস এর সাপোর্টেড কাস্টমাইজেশন।" [layout_docs_glossary_extension_name] -other = "ইক্স্টেন্শন" +other = "এক্সটেনশন" [layouts_docs_glossary_filter] other = "তাদের ট্যাগ অনুযায়ী শর্তাবলী ফিল্টার" [layout_docs_glossary_fundamental_description] -other = "Kubernetes-এর প্রথমবারের ব্যবহারকারীর জন্য প্রাসঙ্গিক" +other = "কুবারনেটিসের প্রথমবারের ব্যবহারকারীর জন্য প্রাসঙ্গিক" [layout_docs_glossary_fundamental_name] other = "মৌলিক" [layout_docs_glossary_networking_description] -other = "কিভাবে Kubernetes উপাদান একে অপরের সাথে কথা বলে (এবং ক্লাস্টারের বাইরের প্রোগ্রামগুলিতে)।" +other = "কিভাবে কুবারনেটিস উপাদান একে অপরের সাথে কথা বলে (এবং ক্লাস্টারের বাইরের প্রোগ্রামগুলিতে)।" [layout_docs_glossary_networking_name] other = "নেটওয়ার্কিং" [layout_docs_glossary_operation_description] -other = "Kubernetes শুরু করা এবং মেন্টনন্স রাখা" +other = "কুবারনেটিস শুরু করা এবং মেন্টনন্স রাখা" [layout_docs_glossary_operation_name] other = "অপারেশন" [layout_docs_glossary_security_description] -other = "Kubernetes অ্যাপ্লিকেশন নিরাপদ এবং সুরক্ষিত রাখা" +other = "কুবারনেটিস অ্যাপ্লিকেশন নিরাপদ এবং সুরক্ষিত রাখা" [layout_docs_glossary_security_name] other = "নিরাপত্তা" @@ -222,28 +311,28 @@ other = "কুবারনেটস অ্যাপ্লিকেশনগু other = "স্টোরেজ" [layout_docs_glossary_tool_description] -other = "সফ্টওয়্যার যা Kubernetes ব্যবহার করা সহজ বা ভাল করে তোলে" +other = "সফ্টওয়্যার যা কুবারনেটিস ব্যবহার করা সহজ বা ভাল করে তোলে" [layout_docs_glossary_tool_name] other = "টুল" [layout_docs_glossary_user-type_description] -other = "একটি সাধারণ Kubernetes ব্যবহারকারীর প্রতিনিধিত্ব করে" +other = "একটি সাধারণ কুবারনেটিস ব্যবহারকারীর প্রতিনিধিত্ব করে" [layout_docs_glossary_user-type_name] other = "ব্যবহারকারীর ধরন" [layout_docs_glossary_workload_description] -other = "Kubernetes এ চলমান অ্যাপ্লিকেশন" +other = "কুবারনেটিস এ চলমান অ্যাপ্লিকেশন" [layout_docs_glossary_workload_name] -other = "বর্ক্লোড" +other = "ওয়ার্কলোড" [layouts_docs_partials_feedback_improvement] other = "উন্নতির পরামর্শ দিন" [layouts_docs_partials_feedback_issue] -other = "আপনি চাইলে GitHub রেপোতে একটি ইশূ খুলুন " +other = "আপনি যদি চান তবে [গিটহাব রিপোতে](https://www.github.com/kubernetes/website/) এ একটি ইস্যু খুলুন " [layouts_docs_partials_feedback_or] other = "অথবা" @@ -252,22 +341,30 @@ other = "অথবা" other = "একটি সমস্যা রিপোর্ট করুন" [layouts_docs_partials_feedback_thanks] -other = "সাহায্য করার জন্য ধন্যবাদ. কুবারনেটস কীভাবে ব্যবহার করবেন সে সম্পর্কে আপনার যদি একটি নির্দিষ্ট, উত্তরযোগ্য প্রশ্ন থাকে তবে এটি জিজ্ঞাসা করুন" +other = "সাহায্য করার জন্য ধন্যবাদ. কুবারনেটিস কীভাবে ব্যবহার করবেন সে সম্পর্কে আপনার যদি একটি নির্দিষ্ট, উত্তরযোগ্য প্রশ্ন থাকে তবে এটি জিজ্ঞাসা করুন" [layouts_docs_search_fetching] other = "ফলাফল আনা হচ্ছে..." +[legacy_repos_message] +other = """The legacy package repositories (`apt.kubernetes.io` and `yum.kubernetes.io`) have been +[deprecated and frozen starting from September 13, 2023](/blog/2023/08/31/legacy-package-repository-deprecation/). +**Using the [new package repositories hosted at `pkgs.k8s.io`](/blog/2023/08/15/pkgs-k8s-io-introduction/) +is strongly recommended and required in order to install Kubernetes versions released after September 13, 2023.** +The deprecated legacy repositories, and their contents, might be removed at any time in the future and without +a further notice period. The new package repositories provide downloads for Kubernetes versions starting with v1.24.0.""" + [main_by] other = "দ্বারা" [main_cncf_project] -other = """Āmarā ēkaṭi CNCF গ্রৈজূএটিড প্রকল্প

          """ +other = """আমরা একটি CNCF গ্রাডুয়েটেড প্রকল্প

          """ [main_community_explore] -other = "কম্যূনটী অন্বেষণ করুন" +other = "কমিউনিটি এক্সপ্লোর করুন" [main_contribute] -other = "কন্ট্রিব্যূট করুন" +other = "কান্ট্রিবিউট করুন" [main_copyright_notice] other = """The Linux Foundation ®. সমস্ত অধিকার সংরক্ষিত। The Linux Foundation নিবন্ধিত ট্রেডমার্ক এবং ট্রেডমার্ক ব্যবহার করে। The Linux Foundation এর ট্রেডমার্কের তালিকার জন্য, অনুগ্রহ করে আমাদের Trademark Usage page দেখুন """ @@ -276,16 +373,16 @@ other = """The Linux Foundation ®. সমস্ত অধিকার সং other = """The Kubernetes Authors | ডকুমেন্টেশন CC BY 4.0 লাইসেন্সের অধীনে বিতরণ করা হয়েছে""" [main_github_invite] -other = "মূল Kubernetes কোড বেস হ্যাকিং করতে আগ্রহী?" +other = "মূল কুবারনেটিস কোড বেস হ্যাকিং করতে আগ্রহী?" [main_github_view_on] -other = "GitHub-এ দেখুন" +other = "গিটহাবে দেখুন" [main_kubernetes_features] -other = "Kubernetes ফীচর্জ়" +other = "কুবারনেটিস ফিচার" [main_kubeweekly_baseline] -other = "সর্বশেষ Kubernetes খবর পেতে আগ্রহী? KubeWeekly এর জন্য সাইন আপ করুন" +other = "সর্বশেষ কুবারনেটিস খবর পেতে আগ্রহী? KubeWeekly এর জন্য সাইন আপ করুন" [main_kubernetes_past_link] other = "অতীতের নিউজলেটার দেখুন" @@ -305,6 +402,9 @@ other = "সম্পর্কে পড়ুন" [main_read_more] other = "আরও পড়ুন" +[monthly_patch_release] +other = "মাসিক প্যাচ রিলিজ" + [not_applicable] ## Localization teams: it's OK to use a longer text here other = "প্রযোজ্য নয়" @@ -316,7 +416,7 @@ other = "বিঃদ্রঃ:" other = "উদ্দেশ্য" [options_heading] -other = "বিকল্প" +other = "অপশন" [outdated_blog__message] other = "এই নিবন্ধটি এক বছরেরও বেশি পুরনো। পুরানো নিবন্ধে পুরানো বিষয়বস্তু থাকতে পারে। পৃষ্ঠায় তথ্য প্রকাশের পর থেকে ভুল হয়ে গেছে তা পরীক্ষা করুন।" @@ -325,7 +425,7 @@ other = "এই নিবন্ধটি এক বছরেরও বেশি other = "প্যাচ রিলিজ" [post_create_issue] -other = "একটি ইশূ তৈরি করুন" +other = "একটি ইস্যু তৈরি করুন" [prerequisites_heading] other = "শুরু করার আগে" @@ -333,17 +433,92 @@ other = "শুরু করার আগে" [previous_patches] other = "প্যাচ রিলিজ:" +# The following text is displayed when JavaScript isn't available. +[release_binary_alternate_links] +other = """You can find links to download Kubernetes components (and their checksums) in the [CHANGELOG](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG) files. +Alternately, use [downloadkubernetes.com](https://www.downloadkubernetes.com/) to filter by version and architecture.""" + +[release_binary_arch] +other = "আর্কিটেকচার" + +[release_binary_arch_option] +other = "আর্কিটেকচারগুলো" + +[release_binary_copy_link] +other = "কপি লিংক" + +[release_binary_copy_link_certifcate] +other = "cert" + +[release_binary_copy_link_checksum] +other = "checksum" + +[release_binary_copy_link_signature] +other = "signature" + +[release_binary_copy_link_tooltip] +other = "ক্লিপবোর্ডে কপি করুন" + +[release_binary_download] +other = "বাইনারি ডাউনলোড করুন" + +[release_binary_download_tooltip] +other = "বাইনারি ফাইল ডাউনলোড করুন" + +[release_binary_options] +other = "ডাউনলোড অপশন" + +[release_binary_os] +other = "অপারেটিং সিস্টেম" + +[release_binary_os_option] +other = "অপারেটিং সিস্টেমগুলো" + +[release_binary_os_darwin] +other = "darwin" + +[release_binary_os_linux] +other = "linux" + +[release_binary_os_windows] +other = "windows" + +[release_binary_table_caption] +other = "কুবারনেটিস কম্পোনেন্ট বাইনারি ডাউনলোড করুন" + +# NOTE: is a placeholder for the actual version number set by 'release-binaries' shortcode. +# Please do not localize or modify placeholder. +[release_binary_section] +other = """You can find the links to download Kubernetes components (along with their checksums) below. +To access downloads for older supported versions, visit the respective documentation +link for [older versions](https://kubernetes.io/docs/home/supported-doc-versions/#versions-older) or use [downloadkubernetes.com](https://www.downloadkubernetes.com/).""" + +# NOTE: and are placeholders set by 'release-binaries' shortcode. +# Please do not localize or modify and placeholders. +[release_binary_section_note] +other = """To download older patch versions of Kubernetes components (and their checksums), +please refer to the [CHANGELOG](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG/CHANGELOG-.md) file.""" + +[release_binary_version] +other = "সংস্করণ" + +[release_binary_version_option] +other = "সর্বশেষ সংস্করণ" + [release_date_after] other = ")" [release_date_before] -other = "(রিলীস হয়েছিল: " +other = "(রিলিজ হয়েছিল: " # See https://gohugo.io/functions/format/gos-layout-string # Use a suitable format for your locale [release_date_format] other = "2006-01-02" +[release_date_format_month] +other = "January 2006" + [release_cherry_pick_deadline] other = "Cherry Pick সময়সীমা" @@ -377,10 +552,10 @@ other = "**%s** enters maintenance mode on **%s** and End of Life is on **%s**." other = "বিঃদ্রঃ" [release_schedule] -other = "সময়সূচী" +other = "শিডিউল" [release_target_date] -other = "লক্ষ্য তারিখ" +other = "টার্গেট তারিখ" [release_changelog] other = "চেঞ্জলগ" @@ -395,26 +570,29 @@ other = "সাবস্ক্রাইব" other = "সারমর্ম" [thirdparty_message] -other = """এই বিভাগটি তৃতীয় পক্ষের (third party) প্রকল্পগুলির সাথে লিঙ্ক করে যা Kubernetes দ্বারা প্রয়োজনীয় কার্যকারিতা প্রদান করে। Kubernetes প্রকল্প লেখক এই প্রকল্পগুলির জন্য দায়ী নয়, যা বর্ণানুক্রমিকভাবে তালিকাভুক্ত করা হয়েছে। এই তালিকায় একটি প্রকল্প যোগ করতে, একটি পরিবর্তন জমা দেওয়ার আগে content guide পড়ুন। অধিক তথ্য""" +other = """এই বিভাগটি তৃতীয় পক্ষের (third party) প্রকল্পগুলির সাথে লিঙ্ক করে যা কুবারনেটিস দ্বারা প্রয়োজনীয় কার্যকারিতা প্রদান করে। কুবারনেটিস প্রকল্প লেখক এই প্রকল্পগুলির জন্য দায়ী নয়, যা বর্ণানুক্রমিকভাবে তালিকাভুক্ত করা হয়েছে। এই তালিকায় একটি প্রকল্প যোগ করতে, একটি পরিবর্তন জমা দেওয়ার আগে content guide পড়ুন। অধিক তথ্য""" [thirdparty_message_edit_disclaimer] other="""তৃতীয় পক্ষের বিষয়বস্তু পরামর্শ""" [thirdparty_message_single_item] -other = """🛇 এই আইটেমটি একটি তৃতীয় পক্ষের প্রকল্প বা পণ্যের সাথে লিঙ্ক করে যা নিজে Kubernetes এর অংশ নয়। অধিক তথ্য""" - +other = """🛇 এই আইটেমটি একটি তৃতীয় পক্ষের প্রকল্প বা পণ্যের সাথে লিঙ্ক করে যা নিজে কুবারনেটিস এর অংশ নয়। অধিক তথ্য""" [thirdparty_message_disclaimer] -other = """

          এই পৃষ্ঠার আইটেমগুলি তৃতীয় পক্ষের পণ্য বা প্রকল্পগুলিকে নির্দেশ করে যা কুবারনেটসের প্রয়োজনীয় কার্যকারিতা প্রদান করে। Kubernetes প্রকল্পের লেখকরা সেই তৃতীয় পক্ষের পণ্য বা প্রকল্পগুলির জন্য দায়ী নয়৷ আরো বিস্তারিত জানার জন্য CNCF website guidelines দেখুন।

          একটি অতিরিক্ত তৃতীয় পক্ষের লিঙ্ক যোগ করে এমন একটি পরিবর্তন প্রস্তাব করার আগে আপনার content guide পড়া উচিত।

          """ +other = """

          এই পৃষ্ঠার আইটেমগুলি তৃতীয় পক্ষের পণ্য বা প্রকল্পগুলিকে নির্দেশ করে যা কুবারনেটসের প্রয়োজনীয় কার্যকারিতা প্রদান করে। কুবারনেটিস প্রকল্পের লেখকরা সেই তৃতীয় পক্ষের পণ্য বা প্রকল্পগুলির জন্য দায়ী নয়৷ আরো বিস্তারিত জানার জন্য CNCF website guidelines দেখুন।

          একটি অতিরিক্ত তৃতীয় পক্ষের লিঙ্ক যোগ করে এমন একটি পরিবর্তন প্রস্তাব করার আগে আপনার content guide পড়া উচিত।

          """ + +[thirdparty_message_vendor] +other = """এই পৃষ্ঠার আইটেমগুলি কুবারনেটিসের বাইরের বিক্রেতাদের উল্লেখ করে। কুবারনেটিস প্রকল্পের লেখকরা সেই তৃতীয় পক্ষের পণ্য বা প্রকল্পগুলির জন্য দায়ী নয়৷ এই তালিকায় একটি বিক্রেতা, পণ্য বা প্রকল্প যোগ করতে, একটি পরিবর্তন জমা দেওয়ার আগে কন্টেন্ট গাইড পড়ুন। আরো তথ্য।""" + [ui_search_placeholder] other = "অনুসন্ধান করুন" [version_check_mustbe] -other = "আপনার Kubernetes সার্ভার সংস্করণ হতে হবে " +other = "আপনার কুবারনেটিস সার্ভার সংস্করণ হতে হবে " [version_check_mustbeorlater] -other = "আপনার Kubernetes সার্ভার সংস্করণের চেয়ে বা তার পরে হতে হবে " +other = "আপনার কুবারনেটিস সার্ভার সংস্করণের চেয়ে বা তার পরে হতে হবে " [version_check_tocheck] other = "সংস্করণ পরীক্ষা করতে, এন্টার করুন " From e5c9b5dcb960be992b9f44ea2953dd266829f35b Mon Sep 17 00:00:00 2001 From: Sajib Adhikary Date: Wed, 8 May 2024 14:51:14 +0600 Subject: [PATCH 0927/1086] [bn] fix case-studies *.png, *.svg --- .../adform/adform_featured_logo.png | Bin 0 -> 7110 bytes .../adform/adform_featured_logo.svg | 1 + .../case-studies/adidas/adidas-featured.svg | 1 + .../case-studies/amadeus/amadeus_featured.png | Bin 0 -> 6970 bytes .../case-studies/amadeus/amadeus_featured.svg | 1 + .../bn/case-studies/amadeus/amadeus_logo.png | Bin 0 -> 19562 bytes .../ancestry/ancestry_featured.png | Bin 0 -> 21016 bytes .../ancestry/ancestry_featured.svg | 1 + .../case-studies/ancestry/ancestry_logo.png | Bin 0 -> 21141 bytes .../ant-financial_featured_logo.png | Bin 0 -> 10263 bytes .../ant-financial_featured_logo.svg | 1 + .../appdirect/appdirect_featured_logo.png | Bin 0 -> 5645 bytes .../appdirect/appdirect_featured_logo.svg | 1 + .../babylon/babylon_featured_logo.png | Bin 0 -> 8671 bytes .../babylon/babylon_featured_logo.svg | 1 + .../blablacar/blablacar_featured.png | Bin 0 -> 7867 bytes .../blablacar/blablacar_featured.svg | 1 + .../case-studies/blablacar/blablacar_logo.png | Bin 0 -> 7841 bytes .../blackrock/blackrock_featured.png | Bin 0 -> 6391 bytes .../blackrock/blackrock_featured.svg | 1 + .../case-studies/blackrock/blackrock_logo.png | Bin 0 -> 6430 bytes .../booking-com/booking.com_featured_logo.png | Bin 0 -> 4153 bytes .../booking-com/booking.com_featured_logo.svg | 1 + .../booz-allen/booz-allen-featured-logo.svg | 1 + .../booz-allen/booz-allen_featured_logo.png | Bin 0 -> 1989 bytes .../case-studies/bose/bose_featured_logo.png | Bin 0 -> 3564 bytes .../case-studies/bose/bose_featured_logo.svg | 1 + content/bn/case-studies/box/box_featured.png | Bin 0 -> 6348 bytes content/bn/case-studies/box/box_featured.svg | 1 + content/bn/case-studies/box/box_logo.png | Bin 0 -> 5988 bytes content/bn/case-studies/box/box_small.png | Bin 0 -> 8519 bytes content/bn/case-studies/box/box_small.svg | 1 + content/bn/case-studies/box/video.png | Bin 0 -> 134595 bytes .../case-studies/buffer/buffer_featured.png | Bin 0 -> 5263 bytes .../case-studies/buffer/buffer_featured.svg | 1 + .../bn/case-studies/buffer/buffer_logo.png | Bin 0 -> 4791 bytes .../capital-one/capitalone_featured_logo.png | Bin 0 -> 11306 bytes .../capital-one/capitalone_featured_logo.svg | 1 + .../case-studies/cern/cern_featured_logo.png | Bin 0 -> 2849 bytes content/bn/case-studies/cern/cern_logo.svg | 1 + .../chinaunicom/chinaunicom_featured_logo.png | Bin 0 -> 11459 bytes .../chinaunicom/chinaunicom_featured_logo.svg | 1 + .../city-of-montreal_featured_logo.png | Bin 0 -> 9647 bytes .../city-of-montreal_featured_logo.svg | 1 + .../crowdfire/crowdfire_featured_logo.png | Bin 0 -> 7827 bytes .../crowdfire/crowdfire_featured_logo.svg | 1 + .../daocloud/daocloud_featured_logo.png | Bin 0 -> 13734 bytes .../daocloud/daocloud_featured_logo.svg | 1 + .../denso/denso_featured_logo.svg | 1 + .../case-studies/golfnow/golfnow_featured.png | Bin 0 -> 22915 bytes .../case-studies/golfnow/golfnow_featured.svg | 1 + .../bn/case-studies/golfnow/golfnow_logo.png | Bin 0 -> 8858 bytes .../haufegroup/haufegroup_featured.png | Bin 0 -> 5841 bytes .../haufegroup/haufegroup_featured.svg | 1 + .../haufegroup/haufegroup_logo.png | Bin 0 -> 5794 bytes .../case-studies/huawei/huawei_featured.png | Bin 0 -> 14310 bytes .../case-studies/huawei/huawei_featured.svg | 1 + .../bn/case-studies/huawei/huawei_logo.png | Bin 0 -> 14274 bytes .../bn/case-studies/ibm/ibm_featured_logo.png | Bin 0 -> 11298 bytes .../bn/case-studies/ibm/ibm_featured_logo.svg | 1 + .../bn/case-studies/ing/ing_featured_logo.png | Bin 0 -> 10305 bytes .../bn/case-studies/ing/ing_featured_logo.svg | 1 + .../jd-com/jd-com_featured_logo.png | Bin 0 -> 6581 bytes .../jd-com/jd.com_featured_logo.svg | 1 + .../case-studies/naic/naic_featured_logo.png | Bin 0 -> 9433 bytes .../case-studies/naic/naic_featured_logo.svg | 1 + .../bn/case-studies/nav/nav_featured_logo.png | Bin 0 -> 4218 bytes .../bn/case-studies/nav/nav_featured_logo.svg | 1 + .../nerdalize/nerdalize_featured_logo.png | Bin 0 -> 10647 bytes .../nerdalize/nerdalize_featured_logo.svg | 1 + .../netease/netease_featured_logo.png | Bin 0 -> 5601 bytes .../netease/netease_featured_logo.svg | 1 + .../newyorktimes/newyorktimes_featured.png | Bin 0 -> 20189 bytes .../newyorktimes/newyorktimes_featured.svg | 1 + .../newyorktimes/newyorktimes_logo.png | Bin 0 -> 10251 bytes .../nokia/nokia_featured_logo.png | Bin 0 -> 4261 bytes .../nokia/nokia_featured_logo.svg | 1 + .../nordstrom/nordstrom_featured_logo.png | Bin 0 -> 7352 bytes .../nordstrom/nordstrom_featured_logo.svg | 1 + .../northwestern_featured_logo.png | Bin 0 -> 10083 bytes .../northwestern_featured_logo.svg | 2 +- .../ocado/ocado_featured_logo.png | Bin 0 -> 8089 bytes .../ocado/ocado_featured_logo.svg | 1 + .../case-studies/openAI/openai_featured.png | Bin 0 -> 12132 bytes .../case-studies/openAI/openai_featured.svg | 1 + .../bn/case-studies/openAI/openai_logo.png | Bin 0 -> 19818 bytes .../peardeck/peardeck_featured.png | Bin 0 -> 11786 bytes .../peardeck/peardeck_featured.svg | 1 + .../case-studies/peardeck/peardeck_logo.png | Bin 0 -> 9260 bytes .../case-studies/pearson/pearson_featured.png | Bin 0 -> 7784 bytes .../case-studies/pearson/pearson_featured.svg | 52 +++++++++++ .../bn/case-studies/pearson/pearson_logo.png | Bin 0 -> 5123 bytes .../pingcap/pingcap_featured_logo.png | Bin 0 -> 7082 bytes .../pingcap/pingcap_featured_logo.svg | 1 + .../pinterest/pinterest_feature.png | Bin 0 -> 9118 bytes .../pinterest/pinterest_feature.svg | 1 + .../case-studies/pinterest/pinterest_logo.png | Bin 0 -> 9003 bytes .../prowise/prowise_featured_logo.png | Bin 0 -> 7621 bytes .../prowise/prowise_featured_logo.svg | 1 + .../ricardo-ch/ricardo-ch_featured_logo.png | Bin 0 -> 5248 bytes .../ricardo-ch/ricardo.ch_featured_logo.svg | 1 + .../slamtec/slamtec_featured_logo.png | Bin 0 -> 16423 bytes .../slamtec/slamtec_featured_logo.svg | 1 + .../slingtv/slingtv_featured_logo.png | Bin 0 -> 8513 bytes .../slingtv/slingtv_featured_logo.svg | 1 + .../bn/case-studies/sos/sos_featured_logo.png | Bin 0 -> 6662 bytes .../bn/case-studies/sos/sos_featured_logo.svg | 1 + .../case-studies/spotify/spotify-featured.svg | 1 + .../spotify/spotify_featured_logo.png | Bin 0 -> 6383 bytes .../squarespace/squarespace_featured_logo.png | Bin 0 -> 4539 bytes .../squarespace/squarespace_featured_logo.svg | 1 + .../thredup/thredup_featured_logo.png | Bin 0 -> 4738 bytes .../thredup/thredup_featured_logo.svg | 1 + .../case-studies/vsco/vsco_featured_logo.png | Bin 0 -> 11065 bytes .../case-studies/vsco/vsco_featured_logo.svg | 1 + .../wikimedia/wikimedia_featured.png | Bin 0 -> 21322 bytes .../wikimedia/wikimedia_featured.svg | 1 + .../case-studies/wikimedia/wikimedia_logo.png | Bin 0 -> 7875 bytes .../bn/case-studies/wink/wink_featured.png | Bin 0 -> 21292 bytes .../bn/case-studies/wink/wink_featured.svg | 1 + content/bn/case-studies/wink/wink_logo.png | Bin 0 -> 5623 bytes .../woorank/woorank_featured_logo.png | Bin 0 -> 6438 bytes .../woorank/woorank_featured_logo.svg | 1 + .../workiva/workiva_featured_logo.png | Bin 0 -> 5980 bytes .../workiva/workiva_featured_logo.svg | 1 + .../yahoo-japan/yahooJapan_logo.png | Bin 0 -> 7266 bytes .../yahoo-japan/yahoojapan_featured.svg | 1 + .../ygrene/ygrene_featured_logo.png | Bin 0 -> 11569 bytes .../ygrene/ygrene_featured_logo.svg | 83 +----------------- .../zalando/zalando_feature_logo.png | Bin 0 -> 7643 bytes .../zalando/zalando_feature_logo.svg | 1 + 131 files changed, 109 insertions(+), 83 deletions(-) create mode 100644 content/bn/case-studies/booz-allen/booz-allen_featured_logo.png create mode 100644 content/bn/case-studies/jd-com/jd.com_featured_logo.svg create mode 100644 content/bn/case-studies/ricardo-ch/ricardo.ch_featured_logo.svg create mode 100644 content/bn/case-studies/spotify/spotify-featured.svg create mode 100644 content/bn/case-studies/yahoo-japan/yahoojapan_featured.svg diff --git a/content/bn/case-studies/adform/adform_featured_logo.png b/content/bn/case-studies/adform/adform_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cd0fa7b6c9c4e1e2bcb4702de2e2ccd3fd5693c2 100644 GIT binary patch literal 7110 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 WLghSRo#cPMtjS3$1Ir~%0{;toIy|2M literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/adform/adform_featured_logo.svg b/content/bn/case-studies/adform/adform_featured_logo.svg index e69de29bb2..b31ef3235a 100644 --- a/content/bn/case-studies/adform/adform_featured_logo.svg +++ b/content/bn/case-studies/adform/adform_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/adidas/adidas-featured.svg b/content/bn/case-studies/adidas/adidas-featured.svg index e69de29bb2..a53d467552 100644 --- a/content/bn/case-studies/adidas/adidas-featured.svg +++ b/content/bn/case-studies/adidas/adidas-featured.svg @@ -0,0 +1 @@ +kubernetes.io-54664 \ No newline at end of file diff --git a/content/bn/case-studies/amadeus/amadeus_featured.png b/content/bn/case-studies/amadeus/amadeus_featured.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d23d7b0163854a5da1da707c3c4aee2f43a594a5 100644 GIT binary patch literal 6970 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 E2e!!Rvj6}9 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/amadeus/amadeus_featured.svg b/content/bn/case-studies/amadeus/amadeus_featured.svg index e69de29bb2..9d0c40b8e1 100644 --- a/content/bn/case-studies/amadeus/amadeus_featured.svg +++ b/content/bn/case-studies/amadeus/amadeus_featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/amadeus/amadeus_logo.png b/content/bn/case-studies/amadeus/amadeus_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6191c7f6819f2c325bf843e85d63a35a2f4ff6ac 100644 GIT binary patch literal 19562 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/ancestry/ancestry_featured.svg b/content/bn/case-studies/ancestry/ancestry_featured.svg index e69de29bb2..9a3e80186b 100644 --- a/content/bn/case-studies/ancestry/ancestry_featured.svg +++ b/content/bn/case-studies/ancestry/ancestry_featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos-ancestry \ No newline at end of file diff --git a/content/bn/case-studies/ancestry/ancestry_logo.png b/content/bn/case-studies/ancestry/ancestry_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5fbade8decbc19b9e913fb9a7f0cd70d9f152ab3 100644 GIT binary patch literal 21141 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/ant-financial/ant-financial_featured_logo.png b/content/bn/case-studies/ant-financial/ant-financial_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cb4034502734d828b5f11f0385d663c549fbce73 100644 GIT binary patch literal 10263 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 ZV8VHekLa9RM*m*blb2SJs+BMa{V&C6E&Tuh literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/ant-financial/ant-financial_featured_logo.svg b/content/bn/case-studies/ant-financial/ant-financial_featured_logo.svg index e69de29bb2..4eb8a51127 100644 --- a/content/bn/case-studies/ant-financial/ant-financial_featured_logo.svg +++ b/content/bn/case-studies/ant-financial/ant-financial_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/appdirect/appdirect_featured_logo.png b/content/bn/case-studies/appdirect/appdirect_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..724a8a75684f03e1c3b02ac0c85d924c6c7805ee 100644 GIT binary patch literal 5645 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 KRSJ}!JpTtL)KVA# literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/appdirect/appdirect_featured_logo.svg b/content/bn/case-studies/appdirect/appdirect_featured_logo.svg index e69de29bb2..36fcba1abb 100644 --- a/content/bn/case-studies/appdirect/appdirect_featured_logo.svg +++ b/content/bn/case-studies/appdirect/appdirect_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/babylon/babylon_featured_logo.png b/content/bn/case-studies/babylon/babylon_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8b158b5ed3c43aba1d29de4ee828c6c2bc6b4059 100644 GIT binary patch literal 8671 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/babylon/babylon_featured_logo.svg b/content/bn/case-studies/babylon/babylon_featured_logo.svg index e69de29bb2..e84da19268 100644 --- a/content/bn/case-studies/babylon/babylon_featured_logo.svg +++ b/content/bn/case-studies/babylon/babylon_featured_logo.svg @@ -0,0 +1 @@ +babylon_featured_logo \ No newline at end of file diff --git a/content/bn/case-studies/blablacar/blablacar_featured.png b/content/bn/case-studies/blablacar/blablacar_featured.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cfe37257b99e73fefe25b5f6fd582feafd6dff07 100644 GIT binary patch literal 7867 zcmcI}WmH_-)+NCM0TLiUuoMqnedOJD-`8Vw-yYwO?lZ_OD?FB6*sT2urN0dA2%N#=RJZG?&g3n zb>(z`GyJU}1BRPBL0||7)B*5E(bNp;j1Z^4cly^B>|y_rb%6i-nC=gZ+tn1t&CA8} zXG?zrRaE}(P<#9Tpy3D&@PGULKMKRO++bjC4KN()>|}m_ah42!O2I^=oxr9DsFM~H zYWMdks#!x3P`EV|29TEib83PB78O%-h{K;G>%UkkDk6#waD=IYIapCfoc>;i3j(na zc?sl~2Yw_P)zJKKY zX$X7RePtQ26XZSELe2?l5BS%{MIis^MM~};_5RJZ_-8LX|H$ROH^cqsdjFT}{yTNw zLw}b4Y2N$bKkW~8xbJzV`{r(xaB4(DqheK*k<@aX+D?9mFxGY3815oNW+Zd& z#m*&xcvMeL*O^D>X@|;L3S~juz?0U4#BFkpH>4MNr*FfGSvwC|PjKDDfiVNQTUwq_ zhYas)ihWGI?7kw7AiPMVAXklp!?;J|T2@>&ibL4TfFJ6tJvLb+yxDv9i*7ADo*}=$<^d1aYGRXb3+!c zL2{gyWbl3kTY)-#5E0blU0YXVkD$7bV!9Ak+1&of$5@aOIm(Kq9)9-tBUW|Y`sFJ= z?tL3&EVYHPFItL2;Dtv`uM;tOyZL9Q@9aC(2DnrS7LjA}Id14=oZ}$DLXGoX)t&mL zj_e3WnKcDQH2fUpcc8#R?1-{X^BI|lvjvx#)Ry_>8YZcaAxu8ZashghjQAjd6Jz?W zS9<3Zm;&@HzLZzD$j*}56Lxx5xm>XmEZ{(SS*Il)&rbgvL~4|X`0J~qeDVCnroN!| zA%+dfUcQBcMC;io*O8^EF`&v3)8Px3_LHM6FS_FgE&KXX0r|cM?kJoDnv6KWArDfm zf{T2(L(pXVX56qxKWD-1m8m1Pg(JZJ4aIJEe)O_a`20)A_Oot+?9d`5qR=(v-T*;R zDcvxoZi!)xkx6NqB*DQM(MZ24%)=hG{%JXr+8Kas+3DuP4w(ERgx-b=VMw;WqpfWB zQ`E?4vWGROc?1~)pRQONdm1+;QuGm8wYaiIE-d-bva!_JT3jARrwmz~hcG!8H^c1d zaa&U4XQb-V{mt`eHWtJDW@nchH@Zo_v-c*2Gj)k9>IZyD5gOYQ=EfbqtaF>MIYiYO zZ1ZE#mK$-Fe4+1>U7&?*epc%9z~|vIphM!0&BcQ`GmIsaGxeIbvPuZ) z-)HKoFJbZdvLSD-X{kerik$HmZc&3uBeS~;sN%-zqZ9;4r(0mC**0S5ENkP7%dAWy zx)~pvc6c+}OfB9-^mPU689EcAnu*o~X=RtZ>oX0EUczW|dC=W9NF276;v6M1{c(NV zdZGM!Kf6q*WPF&k{?5<1s(`eW7g9Gr1G8w`lCCfbRbH5UP8AVPae{#abgyE9xX72yP%(L1eMHry#$}8_=S!#Z@Wx zX&XFmU2WQ544AT=I`@8;{f}zkWPqLzl`JOw_j5 zFJH4AI#=_%eYUOaGz&40K~bS*l1m8)*1?2Ef@1i%M?&Ie$TTT!s~)uZ#1o<(ncz3| z!#z$NVid>p)cl__R9%LrFsJJOa)MjUZrF_xr3Lm{jO$%%5z$8<7DJWR`_oKU$p(Vw zysb=cuBJ;~#D<)uZ$N?GBOD?za^? zwB2jhon)>Qb`cVPQoHwAjb3e};ufBCwcR@-1M+U`zs!Z+&{Seo2eK6Ua}$w^%KVW#q++HFoKtHhX>QTV5zu0rLEAA7VtCSwK`_=l++hfO%wA871>aqmaD>_dv| zf<7+J3rAf|mZa~_ky1&c73blqZqrH-7>-tKC=J3GO$ZIV3~F|`tuPBc9#$J$0Xy0U z+(sgVs9c<`-ZF-=Ip%<46ug2QBrNT{5^qn&R|Hp3O^;HA+rGLy`BSVp1_eP`5ql{ z*8FaTop6`c5w)Pvx+DB$9id&nU zd+g^WRMSgopO&)-HfNq5=~llTQP+gzl8qJE)^Fae3^n3}D+k81z8Vu$FB2>18+LK5 zyAp2xUeK(ev+Q3}_r5==jw!BI=7o!)u)@z*gZP$ zo~{GQ-ckg^v$Wu9!6P>KAdg}1wMeuP>n~r$xoCyi?VLBOrp0sl#HUNN!}C(l_T*72 zp{GIa=sCnS>c>Akb-lK;1S4ByV_lb+8U;lk)mqejX=q$-1tnCQg-iG;o(UJQM}7?; z%i>|d3T4gbGuLLP!^e-hJdI2yE_=Gdx(h4d;nq3Ufb?EXle^pXV&M~Epq$25$x(A& zlG=&Z!;{R)of7jtTE-`=TMovDJ zOdu%ogd6~z4|9{;Rfx}D3%;(EcOh_zSOZF-h*nX~5h6@w3uZcL42=w{&YaA8rhrk?!)Y5zNq);0$^%c>8=B399Noso9;S4aDM;tc z|0ExHd;VSoxx;x27G$$6B^O;!w(ID;6S})7jc&Clua`748YBck_n#DRul5?Fr8Y6HV@$1B{_w4*g+OB(Cy%5DR2y(TC8y0!lPhY&o zdceLV8cyx?)XY#JcRjv<2jjV+CUdI9rNP<3Y}1y1KL*R%qGm|(_&Z`5;N|dn`LAxb zN`eV1ZOe;(Iz;1pYcs<$J+;YTJ83#hc9yMSl*?f6jV@}u2%;J@8~Q`=*M@k4mUY)V zz~uF#6vpXX)#s_MHhW#WnbD!rJ(PV#rPwf>Dl5k>eq*O*pX$1q$S_fLZly@w-@yBS4l+o71gel_cw-OZHY1 zJh=w??0}~3w&r|1B{M%C?MNvL&7SLyZiR2WseD>eZd~S> zR`BFm6WEeO+a;JyJ~(K zy&TU3->w#kfBkC|GHxWaeqDRu|KhfknNY}77kz=3h6Ue}yZxaqrq>3NU60wRyH8(+(+cm?936deOJ6Oq(3v3}MR^<$j&-!MaW4MK=X9nR~(>H9KtvMkV@Y z?T3v!;)b%Ecv|Iz0SWbaw*6K}BNJ_m0MAh~(n!sO;3ACd?|n^KI&nm zj&062rS|}uy&t$t9|lH9d=pIqCS>Dt;kQn3pN9F{84C;E{*cS1xcV+0(m@{A@IGLbrC{E7}OIh45T0u7*{9E1=izl~nQOzY);kzuP%E zj_sVp#(p@1KZ?UY=tatpcY)c8G<1{rs1}i$O_2FgXoQ2<#E&gvJ-3>I&I*i|pqX~j zepLGDYnytrMTT3Mu;>UwddgBuTEGX=vXIxuf()LrC^3|e(5(C^%~nVV(lf6&Nu=>` z=;5Y;enOwf%c8Iicdzb3DLD*g!e=`xluY#Vj?SMn9e0U}hQIrpVsRU3Wum8yK=4D5 zEglCngeqj1>hW`>{(GV}1uVLHojF|@@~30 zVnkJ+=JBqnX7uvYMe{WE-COsS#l0W2`net(FR4>Rn8=$)?67EGCGGS7SKW)r#VPw=*c$y}ounIoRXs}(<)6P4aQSrk$@7b}J;!Ay5 zD0!^s+^u@X_K+7o7D_Uinpa~*!Q?RjlgBS&q~Or3UEcTl;D^(|Ery=(EiSj7` zQ}s=HVmxzIgfO>}T(4Gz~Ys1f#fcG32)l*jkM)UE~MkkC%sbiU*ePL+|76y;Uh-6n4yz0dg zV`f{L1%dWwhGI5`d|0<`i!q*Gx11`E5&v*v<%z1wu`EB5vK3e1AiPw}&Zc{^TzKYm zyFnP{mYILe+-xb{T>M)j@RRQk%J3clxpBw1_S2-f;PUUiy3?n_=WGs7TTi!*_Nd+5 zeiq0ak&QpD=|WUcB_)bwe_x;#t@BHHo-C1tR`O+;TX}#}yHSkwM2ilO@aYTcP3gQ5 zOh-xE@fPV)g~t;UWTgxB10>V5A1X$*67bZhMv`lQNhPd<}J!$V%q#g1kIZMe(>J^5;4 zjZ*J6m#@&UgG|x#%!MjmIAvcFY1p?Qu0}cz_1%pQbH_!_Zuj2#F>$!?n>||Ftubsq zQ}XZ#jOw4O8@xRQ`C2inIJd{_d`dOu;&NbfcCsEOMd@~J?A6r(*Yq+Bnut8=fBv}C ze%EH)=IkD}J&02Wsygr?KWjw0^_C?e7AyQJ6YXMj;z&^*opfv;^m&_VM0B>iCW}k6xxsj6DwXC-q{~Fw zE_FN)?c7VJUX0SP2y*|Bmo1N9K~2W=LULq$50F#F9~Y1sZ(^{V28)#@53D2J2$n0v zPqG4Yi;_z1t`7T+_roHA#=QZbj-s&~PIAHI6RW~;%(-#qcMV%60W>OJK<)sksR>qNG4%IEvot`0dm zKbpW%`>I4DUF8j_KM(8)ACmPd)^>_S(B#+c)($gZ9;<_E+q`!FuG(bw_Dm3w!@1{^ z(^X|0MoWrG?|m_IzBH058Rl^Y#jEy4_cedqcnxshNCqx~F27#H%dJu{7yO7{xMm&8 zq#w#CWqYRW)Gm9RZ!8(`8^`a-cKu#?(jWs(@o|@h7^vNn2VS z@dk=6YgD9!J3{6Qka7aO$!_NX{wAfq-k^8G343rzSi7uyE4=S}9sa&flkLu+ijl!I zcEoBX^Mi;xBN^GEaU^rrMSJIX9hrs4VrupNO-^cl% zoc9bH93dlhaUUYW)=Y^rc)_a`9aM3Q(ju9Bch_mf$hpH>HHjzc&G6<6UGM$^;rB1- z74rI`UQ;^<0Xy^;b-wE032%pz$8j%}cyC``kAN&ya83`z9jS?vDo<6XR7Y zmwk<1r zLb(eGToboWgb9|U9%UC!B{FCi`}?!WkxUh|pS1LLY2&L(_&KY{FC~V@k_56>M3;O+ zEn&thbR}>l2sP__FMJ4SzOiz6_qJ><8%eM=fSavAlKQoJ0$N`Zsl&xKoL;!uc$WC~ z*6fR3)w>U$h;$~wosXK`xS2!7bZ;{#_9r&5lct#368kato)L~eAa}atTk5aJLpo#k z&r33#1rXdVO=67&J1#aa>*0qP>kM|ii<&^t@z&1xE(T>|> zoKA!TuAq^Z2ZA8c?>JUYt<9}y(gb%!$ykDZl8dPYBN zbA-U=)@FL#-6D==UX)w`2L$!LnlW2ZhcoICuZShavm3e9B4(L}TgRg7jr^9^nk70K z%b!1DHCGCb?B&u0If=()%qjF3-H}H69ww~&Xzwfw28jM#Se#KQ{nVL~zx7yq{B9}Y z!5I7pQt1YCvs%}>@-d6~yViz*QM5%68vfQadES9zVOdsFvC2@i4Zr%0JlS3hieO#h z=qFd%bjSMu2C%egG|o0~PhW^||aj$Rkkn*{6=}9h~5tsG!}5 zM@RPXc3JojVFK#Gw9^3L^G;<;Pv1Mv$HMY<AnB} literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/blablacar/blablacar_featured.svg b/content/bn/case-studies/blablacar/blablacar_featured.svg index e69de29bb2..5b887f24a8 100644 --- a/content/bn/case-studies/blablacar/blablacar_featured.svg +++ b/content/bn/case-studies/blablacar/blablacar_featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/blablacar/blablacar_logo.png b/content/bn/case-studies/blablacar/blablacar_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..14606e036002ed9ad34469a06a8ed39f86e41d71 100644 GIT binary patch literal 7841 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/blackrock/blackrock_featured.png b/content/bn/case-studies/blackrock/blackrock_featured.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3898b88c9fa43c09caea23dd985c1bab1802d986 100644 GIT binary patch literal 6391 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/blackrock/blackrock_featured.svg b/content/bn/case-studies/blackrock/blackrock_featured.svg index e69de29bb2..f98ea323d7 100644 --- a/content/bn/case-studies/blackrock/blackrock_featured.svg +++ b/content/bn/case-studies/blackrock/blackrock_featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/blackrock/blackrock_logo.png b/content/bn/case-studies/blackrock/blackrock_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..51e914a63b259a76b0239d93c2ce872f7722e941 100644 GIT binary patch literal 6430 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 ImCSJe1$hptGynhq literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/booking-com/booking.com_featured_logo.png b/content/bn/case-studies/booking-com/booking.com_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..623ca67345be528cc28812d3f894c783f94c0d50 100644 GIT binary patch literal 4153 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/booking-com/booking.com_featured_logo.svg b/content/bn/case-studies/booking-com/booking.com_featured_logo.svg index e69de29bb2..0b245c2700 100644 --- a/content/bn/case-studies/booking-com/booking.com_featured_logo.svg +++ b/content/bn/case-studies/booking-com/booking.com_featured_logo.svg @@ -0,0 +1 @@ +booking.com_featured_logo \ No newline at end of file diff --git a/content/bn/case-studies/booz-allen/booz-allen-featured-logo.svg b/content/bn/case-studies/booz-allen/booz-allen-featured-logo.svg index e69de29bb2..3ce58c68f7 100644 --- a/content/bn/case-studies/booz-allen/booz-allen-featured-logo.svg +++ b/content/bn/case-studies/booz-allen/booz-allen-featured-logo.svg @@ -0,0 +1 @@ +booz-allen-featured \ No newline at end of file diff --git a/content/bn/case-studies/booz-allen/booz-allen_featured_logo.png b/content/bn/case-studies/booz-allen/booz-allen_featured_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f9bc64ba3bd2bb30fec26ad2c1d3f5d216a32bb9 GIT binary patch literal 1989 zcmciD=RX^Y9tLpLT2VE^anL%gEe8>Mwzx)P#;QG%N>WG7C}M;*O;N=at-X5GC@NG@ zdqim@r9~-@O&rvUAVs;(%lil1`{MU|KA-31^X8ijv$fy@hy&Qz*!ZBgO&!j2;{4*d z+0XwTtQ&qFV&P`4;f}$m@JM(VlFisJ7=gSF4TPhS4oJ8kHk5)iU}NJ#LrsmHqNcv* zDTfO~h0Wpo)jcKnZoCm!#yx>#&W9EWa_k!1f8JdbEPqghaGnOgtw4ZOVs(Kq-)&+=BSOovdUTYKhLsh+st9RSoPnzOhpb5Gn z^JqVS>C!nus@(Zn?P6Dav!f0adv+SvQGwdg+1319@!Kt2`-6?~6LGH!fP|!BG?TGn zMdZ_MuLPE+r=|V9otm1;#V`5S`_R%u5Qjh?osLp8GMwv*4+a3m*WE(UgFgK{y7_Rj z(a{?j``DhIDIr|1ujl+ln;kKtf4zJ@;aUz)MV`)1yO_y4S6rD7c7#Q(D^Qi=JcQJET*b8D z(j5IeDBLy+(T{p}gXcO0PkKIT?+-lF(Ju!sPF~iv2B{@gTxRL%jQIebg=QJ5O>$5i zW5oZ(s42;~Wj+tJh7a0mS-LO&{u{Ri0G8vTHkGvGZ3cI?`pkLQMX->e_0-(ltwhh;)fwDdNClWa zSqg~=DpW;;Q;eVm57d&TDkD?_Kljnb)B+>IIQ>gI`JB^mik;e|x z2xHi;(poWz^$2zH*tk}%KF|cX$~0SRtM}B&c{%F&Q>I7pWm-jJ2GIZ1M=@Sf~&P2Ds8}_Yn#}QY8 zxYF&9;^2jr{SkebBJe>Ped+gd?!g~js z{36a9!^&$3>X}(?WhvnvWYD11^aX|c^C!3JN?mm@}mCw8wt@cMu3U= z!-5w(jVk}9Ws9ndI-+)4qO2hh=~bFK|1zoIbkEf=|9erG;0WBXakoWR%56RRy8Nt- z#c1dX?EYGdfU|6d-yc?Xqog%;A^xlzO1Kpslv$~)Lcg+?dx5F)j;wK1(vGAA9% zR2#p>4No-aX8p=nw1r^HWP~?<5Pia08c5$&kgmGwSG(J!oGnF@V429M6Rot|&FQ7- zVQjh8N>eKst@2Ax>-;i|LVoemDBgUt`O%f2JWc95ItFUnfZT zP8nIIOPNh6GF2a?8mBJU3TcR$&bvNgb4Z8@80GyyET5Tu7Dn|syuJ2TP6t8?#i+LP zsXIko$i1^b(2Q~?oMBFU0{#IfgkzcRzwZLhPNFue2xI;q`uvx7rXo*4!uEu70#E7S b3!H4hpZ3Gs$thgtF0(<+Y)xxTd>{P>_Mg9c literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/bose/bose_featured_logo.png b/content/bn/case-studies/bose/bose_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d4af69ed7275bed5ed2ee6657e8d563a0ad0befc 100644 GIT binary patch literal 3564 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/bose/bose_featured_logo.svg b/content/bn/case-studies/bose/bose_featured_logo.svg index e69de29bb2..58b2add614 100644 --- a/content/bn/case-studies/bose/bose_featured_logo.svg +++ b/content/bn/case-studies/bose/bose_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/box/box_featured.png b/content/bn/case-studies/box/box_featured.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fc6dec602af171e0cc744837848cafec610ce686 100644 GIT binary patch literal 6348 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 R_xwwNrX;5>i;y-C`hRemAC>?B literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/box/box_featured.svg b/content/bn/case-studies/box/box_featured.svg index e69de29bb2..2b4fb6552b 100644 --- a/content/bn/case-studies/box/box_featured.svg +++ b/content/bn/case-studies/box/box_featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/box/box_logo.png b/content/bn/case-studies/box/box_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b401dec6248c6b4c83e131158e57c7965fcda99f 100644 GIT binary patch literal 5988 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 ZgcBus$zz-|_rJe3D9ETvS4*0P{2$eNyT1Sc literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/box/box_small.svg b/content/bn/case-studies/box/box_small.svg index e69de29bb2..7030785935 100644 --- a/content/bn/case-studies/box/box_small.svg +++ b/content/bn/case-studies/box/box_small.svg @@ -0,0 +1 @@ +box \ No newline at end of file diff --git a/content/bn/case-studies/box/video.png b/content/bn/case-studies/box/video.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4c61e7440fc48cdc122d5a014d67f106be58f28c 100644 GIT binary patch literal 134595 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%0AHg6S8HC9LvfQPI0Q{_^I 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/buffer/buffer_featured.png b/content/bn/case-studies/buffer/buffer_featured.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..cd6aaba4ca6a0327e3fdc9f43385b4199ff3fccb 100644 GIT binary patch literal 5263 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/buffer/buffer_featured.svg b/content/bn/case-studies/buffer/buffer_featured.svg index e69de29bb2..b8e321f31d 100644 --- a/content/bn/case-studies/buffer/buffer_featured.svg +++ b/content/bn/case-studies/buffer/buffer_featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/buffer/buffer_logo.png b/content/bn/case-studies/buffer/buffer_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1b4b3b7e525d0a796046cdacfaec27aab25cc3e0 100644 GIT binary patch literal 4791 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/capital-one/capitalone_featured_logo.svg b/content/bn/case-studies/capital-one/capitalone_featured_logo.svg index e69de29bb2..124adae9af 100644 --- a/content/bn/case-studies/capital-one/capitalone_featured_logo.svg +++ b/content/bn/case-studies/capital-one/capitalone_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/cern/cern_featured_logo.png b/content/bn/case-studies/cern/cern_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b873b828b1d4124a302dc1bb3985a4734f92699d 100644 GIT binary patch literal 2849 zcmcImdpwls9-mSwp*y=>$FzG~GB-1W8HUUyBe{fXBCEN)7@CWjVa9bjNs}De)-72H zg+*d>7Tc`*_O z{h%TaCBpt7MR)UrlKDaaibGh#S!gT{YJ*3htua_U-V$nsLfaxywn#JvjVu zHiu0h+hT06R1D6>mSl}aQ}IqDES5?pEtWtQ z0t_)<=)>n9`cys7V7{0y3g!!-Wb%BqY@lXt3>JqsFEpP|@JGIYkP`v0cL@1h=!Xmu zIA364O~F{>Fn9`%Ox`gc0Uou(W{0gc$q9!>Tj4QO*heh;3(Xny*+dBMf!_6K-i&kMok&aOSu3V|$1aiKW*NHxPbPPDb$jdC|a)^FdQSV}s| zPJDK6r{|HS{uGUCJ@YJywW3eswMs9Pwk*=TqnP|A9DB;pX(h?n-19h&um~P~d^}D4 zYw@`UuV*9PP%2_2lBtK?-C2Xx-7TtNmBYmQ_q~$9BBJcwTMneyJbB~7nd3pI_2NOJ^_j*{tt!wTN zswJb}6~kjD29oto8y@v9m&@h%AJu)|iQ{e9u%XnG!ae^Ax*5Ct!sEt9TDrErr{@6e zShDb0Q>y7Y9y=tY1flY~V^qS~>*8dpOgVY-SkOCCdYMqJg+VnNx0c5LDF1!CuPkzIF`_HoXadgX=sp0)? zeFFQ(%NX2yG*~BIjnpjWHqlMMZ;CFCJ{((wT3!Cw69L@;O*1 z?3mSSpwd{fCB}Js$Eg)@&Ka@+of78MSYMrw1z=m~=H@2cz4%~*iEB~2zrVkeh0sE4 zA&ifYpO~1?>L0^7#=WIakE~sp-WAW!i?khh)xJ7A=|EapYHF$~cc!Gre_8QzvAe~M zp*L%NO;Vfa-ECl-#Ms>j8c4DB6CLN$EULQ0|x$egc+|!Q=5XXBel? zo}C)}UAbv_fHICtFNxERtp2fn(m{RyXnT>z2Ctm*nqcqdk$+Z>J-w5eVAQ09y!K8) zw`FfKSInZIzE?c^SJweQBpD-NS(nEc+ba(C4YuYQxGEHi=_g6d)AWc{fols5`gvP) zDa(xpg!sC?;#TU_BG($<}I3M^{(S>7>Np!)h|6_PkmY#=&7ke)zhv zNz6K(2*LFDQ@yHlhow)O(@E*1pd+^qSF<~v;YTg<4*Ev&L<{p72?+^{w<*zMmlGoR zRfg;IF#9flSNYS$`~_i5X8ykyTy1MM_X}=o&2@a)lyfA4U+A+P8{>vsaoouA5Qk%4 z(bzc$%_H?Ec6WE{jhgq|y_;=g5KlFQcD{UezNY5kO7&!4s9l(Us^Wlu=1mH0_k}wn zGe-X~HC>{stH0pt$xw!$Up8Y%tzP}KyuNVy$*)Nzz0<1_De9q$6^_vb>8*iglc4X0 zD_-}8w7;~bv8(Z*>96ocNnbB?{&vlR@EMwJZ2KKq-B^E0a&mG*%9iM{-WJd>e0X>m z>#^v1G_6si@s-JxxiZvl#EDp4owWtT(>Fv5nGm>-w{=&fai-U)ejuI9&R&TpFER?+yH@kZjZ@vBvH_cC*;`cj?8yJJoihMZ;|FyHqg!ah6C zL{=Ap$ZWT5i;=5ZT6X0P^=OIIc2qw-xQJ?MzAnwcTf&Tst9@2q`Miej(Hk2Zd!cN< zjYpf9l+veahVLCuQ^XdPx2jaSkMSlJq>DZwlBP$@s3=W*LljNCm}0O+M}4Y_+LxDo^1Q4<6A0PC`IwZnI(J)hKdYMV&Tl;m&94p^!^ckCt}^l;VOit(-uitS!@ z-09ktzW0OC#mA~IO_dZ9uzEwCe9`#2u1o$CxU|FpVL-6@wy2ao&* Dp~2S} literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/cern/cern_logo.svg b/content/bn/case-studies/cern/cern_logo.svg index e69de29bb2..c242aafc13 100644 --- a/content/bn/case-studies/cern/cern_logo.svg +++ b/content/bn/case-studies/cern/cern_logo.svg @@ -0,0 +1 @@ +cern \ No newline at end of file diff --git a/content/bn/case-studies/chinaunicom/chinaunicom_featured_logo.png b/content/bn/case-studies/chinaunicom/chinaunicom_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f90ff1e509c85399714cdc171e247dd166ce7f7b 100644 GIT binary patch literal 11459 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 bC=>_?ld3|vFTCY{uNBKlDM{9dn}q%!-XMLi literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/chinaunicom/chinaunicom_featured_logo.svg b/content/bn/case-studies/chinaunicom/chinaunicom_featured_logo.svg index e69de29bb2..aae1978cf2 100644 --- a/content/bn/case-studies/chinaunicom/chinaunicom_featured_logo.svg +++ b/content/bn/case-studies/chinaunicom/chinaunicom_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/city-of-montreal/city-of-montreal_featured_logo.png b/content/bn/case-studies/city-of-montreal/city-of-montreal_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..be2af029f0bdc7045c598d84b99c07272ca5c3f1 100644 GIT binary patch literal 9647 zcmch7WmFv7vM|A20|X5W?(WXu9zxK-V1vU9F2Nbks#Sh%>GIDz4$%ps;=Dn)w}ORy%`#N5+y5G)D@hrnp9rR$=rsv>L#v1d2=3y0mq z9txv|gAV#HmC*gkcQq!7e6L9`<$)&cYsIfWP?)!=C?|<^WLrjpAY}2KaBGbX7H|fDk7z z6(2i4n;91`AC-U*I~P9>uaFQc6*niBAP1))2Nw?;7r!tsr!Y4+)jt;iwwjZ+t)4|2WgU!L2=3g9S zz|Lk))=(E~hy&GM98F9it}bE#n56%`1$(Hf>c1H~IRB$4n94XjOrRWG?3^6-_J8f` zZ)|55P4NGS@gK3BwLGC<4o$E##MQ|RW)BORe-XoU_rEXn7a~j=VHt>-t3BAkMNvi! z0GnYqw>B3R;NunKmgAOzK_C~GtdNv6FRv^R$R{N$D9Z`t52prRrI z{5}3J!DDV6^iLSxxlYv-g%}Yzw`B^7_d=^<{`}*etgP%1Fnf6^Sep7Oopvz$chi83 z{Cul;iyQK2ju4A+A9^zZ<hK0*bY+rw7dvEzg}E6r8E4DI24=RKI3fbOPNF6>0G+J_r-x z;}d^cKUo&xGx?%H6%`TTb+^&?f`y^?aoJbvs^k**1O?W3oV8qDi5wY(|hMqSz$jx?k?5z#Q){s_y9ivbo-qvGmm~d+{6% zEh9Fn{_HfMEhs3wWN@-4ln>{Q1GLfvlE4l{$Q>OWttc;tJ{pLYCnio;ulL*>tyFk2 zQd57?tFxe3{usjdV2I>_YinyuLqpTs?T5HvcOCXFztL{7{MyIbdOu%2*6ZrTkYH!f zyf!O~oUv3%hlGp_hmw11Tt1eU<4?w^(DA@qv~PDfz)le&`g&$JU=k1qCuU3F_n$;?yEJa*y24iS> zJf_u%HM@xU9tnB}>E0esoV1+!hs3^>(0<}(+9#^6R-C4vk#Mf9|l&`%XF%ORMGhFMxkd(Fq%s#R=Q(-2h`L#7ap6gR{kK!S?pHX8CT<_YH@wM69}7 zEw|q0GP=EUEw%^jLz}@tijgjAK(h`9pB8Pom!pm8np2l;; zTkLmZ79t%#;T(bX_DS4M$W7OqfaRDuRtjN3>|6@q) zy2P`*c*h=%>AHYyW}|(8@Xg7Jv#WE6-^p?vG5oAeXq?9DT+l_`uD1p~a}nb_C4Xk^ zX*vl>D!Y;9_N&A}a&DI}y$bzYK9)#6`}_KB<15@8Y6USD2N^I3e3klo%gydOX4G2NGihA78l+j+NlRJU%@oMd)tJihHjZD(`1k&u;z zsWR)e*ec{q)7>+kjpOd*wgVN!Rk}HzRb~rAj?X`r*yiNn35hGN&Rbg@?tV#}#av6s zoUf#yAS5Iv`<*8hbdN=<)xucqVE?;ux!v9Xs|-=D^;0aR0KNmcxW~lgWX;^Jsh)$% zW%qct!PPJa?*8Haen4QLTgsWT6-g1+s_Pz{@9yR}0Wd7Y4?z<7$j<)eXc0@zpowz1 zgtO2Kj{m!QF7hj-rI7C#BiHaLte{5QftX{1rUr-Ka-hr{DM3v3ypoa4Z?&q0EWcH-OH(xe0?mE|H-NjxOK+EW_2 zk7422!k!mDC-dcFNYUoeL%J!&KG}d1m%Il5+Y*;=6J=oDAW zu#)hapLG;Iq_OO!Qa`mApRO5OSj_o#`m1HnW=qH9Qf!U-KQU3Lb}@5x$cC#IEAR8?2y8Cly2} zM6=W#xY^(@R4oxi8VVf?5j>weHkU)@j7?J5T5&-jYaGDb$qR@o9bcv)0u;lM`}==L z;IZr?=p^IsB@-|;7EI4zMrbs7Q>LTdc6Inh<>SSJup<bW*!xC&M7x5P zLCtiBXz9Z%k5o0Vwk{)WWj{u%PcMV|Mhx~yd`~NmEY9vu z3ijJRMy7x?Y#POkTO9%);&vB~o0U=SD8e0{epWka$eR#M7)J#a}jlQ*6}cdCT}2%wWS zo$Gb1r(C%KDw0qO5o;G3*xq1FORS9^Hj|DVsxsExIO^r!(|q~D{d-XQoM|d zu@UV)T@fc^CMXrU9?m`lKHw@Ocqb=FgO9-6dI)4>F&17S;_Lx}#GB_-?BB9WxcKPM zNPx^HR+%Wwi9iDb!GNDnXGppWMV1^5kOF+```;tX_IS)}Y{v^HBD3KEQwa$YIpQVn zi^lv?LJoajp4OfbCZZlqpD*A#eq8SObaf-aOUUM@oxrb6ekdlxrxBICN5CxdFG!NcbDbeE7;Ym@PihG}pf4qOErR%Xb(FM|} z8XOsefBO`fio>?QG-U)xmNpX>7Rna&Ify((Lv(7gTa3!EKqUGsFUJd+46Njz$}`;X zK~eBU>o?`WyiyF1Tp954lB5dy36;y2(|-!bPraUqM6NQjO6`dnnLUEGcjK*c>6?0+|W z@_2cc_(hE9D-#_0QtNdUdhtt=^>7jkJQA@v1zs1Pq7PWtU zPc=8<<~TZlJqbN*KwTyv02dzPn~IsbD?=oDx>%{r_@)F-B_OC+D;Hs%!19%eF6ptID6NqhEPw0o& zv%&IVkB?GYdDC3RipyS0aXnEN#&7~WJ=xi5J`YJTBn*q>VNDLvEOR|NZ0~z^Q&qD0 zKl}*g{;&wE1taYAo0dWO^=QWW_ctbj2cP6KX3QBU?SotOG-{s5^9fp z!+dV_YZIa4=CltJtM5=iivh&=8olCh&VKnDR>Su_X%$v*HcNlOT}lSJaKOz$Np|7e$eDheAoZ5mOjagpEq71gYpFU%GH17L zGClx0I?NE{J^p^fPmjeqSW>pg#|!WF6Yn`dueK0mk5)TCe676SaUJw~2)}`^rRmGG zTA3_?o)1;8``(WuC71L&zr)XK9IEz;qg(DTzA_fgxqiiCL#sD}k}@`q${z z)($wRIBt`5orQ3tnxo@+o#pr#EOZ?jQ&Lym+}qdF)8n&Sm}p2ekk`>^j@#2*l4Z^z z4418}tVG^ku|(^jr56@Hm+Ssr&U%J&M7pT@ay~%BW>Cs~^g&5U%`L_|-sfB%?3Oyb zX&4d7!_BYl;JCSe+4;Kj3<2J-!!0_ThmbwAAUZOVn^0d%%VlR~pCy(3so9}oboaf1 z>_sZCXuJ3R#^u(o(63)|a&rCj{i+%Khl>@5?#I6~C)69!k-Fzes?5HAOO8AX! zp0BZwW(q*2>aA~JA&e?BNS0Mq1@r4TM(P6|qz=l!&}MJIyn|vnt2E_T$jTJ{>nqoQ zP}PDIj&&R0Lo2BJki?L?WPp5sGkrD>)N@jb=yNm0Lx*fxf;Hv`72awIwy zC8#>`;AY^PiJC(Pdm#+V?M~b1f>-nw7AqKS1L|4DdW*r1o5i$j9+f&(AZMsc@VH|Q zvG)A~LJu@A%Cuh8`)q9~y{>L|?8>NK!}Ivr=OHMT{EPm;LT_*aqepY@x0m7rnm`a4 zA(@$-9cGZt5Kdw-P-C2+NLs`-r6U=mcz?6)tS1x)8hFrRE%})P)ZRK{$t9YqLFLZ{ zXO=)4_PYrJitQkB`coVd(suxw*D#Qsjmyaqx13|8ssvoIIJ&sh!%>^WO~%Ko5ZMki z+N-Il4XB4`H(whlZ~SVY(fb&+e`p54Q%sGsnTsOxmN~%=G_o0rCQVg|y5ffzqat1) zx*~aMTdgkPtoiGNhG->dwqJYvG>!<#LpQM;ciUf-W$Ed($r5*s7$VlJswIBOz@+(8e?f8{V03<~~V2N|yaFJRrb|2HKx3P(XR0*~Q z=}DnE_0=s$jzli631A7HHa!ln)E`Lf(ax}_C7ZAXc$nIWo$m6m%f#(%A zG`y;&gpZ1-k78;e*S{$r`v(gX8HdEK6pzK)R7YcCJt$Oi+`rw;%`FdW2za)g^~3q? z%iS*QR5t$EJ(lI_0(HsdPmUQS=ifcf6mYiiSgOktdh=*sXGX+JEL4C5q{{}y4-ye zDSP3u)f1XF)B<4E$rw;atg`?z_84p!7!ontpe=HKI>~}18d9-4TU!O~UPzVUJ3qu% zR=gsJ$i>|33U}UgAA__j;cKPE`T J)yjiHk;9m#<7Y#5h;Zf4n1z)4a5opvd-`X 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/city-of-montreal/city-of-montreal_featured_logo.svg b/content/bn/case-studies/city-of-montreal/city-of-montreal_featured_logo.svg index e69de29bb2..44ac9b0b1d 100644 --- a/content/bn/case-studies/city-of-montreal/city-of-montreal_featured_logo.svg +++ b/content/bn/case-studies/city-of-montreal/city-of-montreal_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/crowdfire/crowdfire_featured_logo.png b/content/bn/case-studies/crowdfire/crowdfire_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ef84b16ea06c7de72fa288068f309fa91eaa36a5 100644 GIT binary patch literal 7827 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 M91QwN=6Udc0K2Me2><{9 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/crowdfire/crowdfire_featured_logo.svg b/content/bn/case-studies/crowdfire/crowdfire_featured_logo.svg index e69de29bb2..a4f020161a 100644 --- a/content/bn/case-studies/crowdfire/crowdfire_featured_logo.svg +++ b/content/bn/case-studies/crowdfire/crowdfire_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/daocloud/daocloud_featured_logo.png b/content/bn/case-studies/daocloud/daocloud_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ca6fbcdc44174aa99edbf282f2c7d9c5b91ba449 100644 GIT binary patch literal 13734 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 izmR literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/daocloud/daocloud_featured_logo.svg b/content/bn/case-studies/daocloud/daocloud_featured_logo.svg index e69de29bb2..2d05acd730 100644 --- a/content/bn/case-studies/daocloud/daocloud_featured_logo.svg +++ b/content/bn/case-studies/daocloud/daocloud_featured_logo.svg @@ -0,0 +1 @@ +DaoCloud_logo \ No newline at end of file diff --git a/content/bn/case-studies/denso/denso_featured_logo.svg b/content/bn/case-studies/denso/denso_featured_logo.svg index e69de29bb2..e2b26b2c8c 100644 --- a/content/bn/case-studies/denso/denso_featured_logo.svg +++ b/content/bn/case-studies/denso/denso_featured_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/bn/case-studies/golfnow/golfnow_featured.png b/content/bn/case-studies/golfnow/golfnow_featured.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0b99ac3b8f8f81dd990436b54c08f335dbf40996 100644 GIT binary patch literal 22915 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/golfnow/golfnow_featured.svg b/content/bn/case-studies/golfnow/golfnow_featured.svg index e69de29bb2..b5b42d6fcd 100644 --- a/content/bn/case-studies/golfnow/golfnow_featured.svg +++ b/content/bn/case-studies/golfnow/golfnow_featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/golfnow/golfnow_logo.png b/content/bn/case-studies/golfnow/golfnow_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..dbeb127b02a270963c61bb29f21dd9f2d9b576c9 100644 GIT binary patch literal 8858 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

          Co!VWdh$tGc8PQuMiXrEdE;5v=4p?3 zeU_fOtxdmk=upu%6TT9Mnx+&;ZB+PX<5X&0E?m2^tpENr7kGv~VQ$SJbvE5mxd>K7 z{5JJNnx03|+%vC?qMh$qZznnI&YCe`HEJUTbOz2EY%d%g7*hy|=AO0ppO+(l< z&?AQxhKh`>+BthU6W~>RgX78ZcppS`lY&ves*}$V6Eg#Lu$_RM42~(7qF4^G+0YJa zr8MPN&pKbIoaxms(NkT{&j~Y=tr3Lvtj9?{I)JS|oHHytx$x4V%E7?xV50*vkk+4FYfdndT;L+j{7)Xm()yqi4l%n;ak1$xVx zy+5txfLbhdD-29vkj4DU`P(dPGG?@&E?6zDUJ8U^RLA2Ic>YA$8Mm1NMW**C9%&k- zteHOG3;ud@=^4HtEo&d_8YP@_PQ*MK=SYU)$b*7ckYhkjw5H>h^%~A=;weWbhG5QYklHdGHQho~8CT}kcTb0dJg(nq8rC{fUm>(QY{&4QXc2bbC? zKNOoEi=)5M(rE1m=56IoC1XVKp2tDiUh!U4<3bxujT-JuD4TvU*lPK(c#y9=lz^_O zLQq-m+0%IS@v3XD0b6ic^5Ak3bE8JCykAY5xX>n5eW2Y<2|Xgt(W~ixc;!lP#&gcw zTw4uEQi&`y?%*CVr8DSD5lPY<`pi=z)Jkn6Ja3HtG562gBdohSqE9DjNJfe7o`&W# zFHKH(vI&-2<|(&ZGkmcO#~-w2oT9H+jaQ>3@<bA|N50A{82n^kg>w{aZv)R_%R-v>D|8 E0r1&*@&Et; literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/haufegroup/haufegroup_featured.png b/content/bn/case-studies/haufegroup/haufegroup_featured.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..08b09ec9db8b7792d07a9a4d385cbd546d2446ed 100644 GIT binary patch literal 5841 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/haufegroup/haufegroup_featured.svg b/content/bn/case-studies/haufegroup/haufegroup_featured.svg index e69de29bb2..a61b577ab8 100644 --- a/content/bn/case-studies/haufegroup/haufegroup_featured.svg +++ b/content/bn/case-studies/haufegroup/haufegroup_featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/haufegroup/haufegroup_logo.png b/content/bn/case-studies/haufegroup/haufegroup_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5d8245b0f6d18fcf18d871f7c657716b37f2ef96 100644 GIT binary patch literal 5794 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/huawei/huawei_featured.png b/content/bn/case-studies/huawei/huawei_featured.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..22071b4691e3830c0ee3636f04e6aabf02d5fe83 100644 GIT binary patch literal 14310 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 Wkvu)p=jJ~*@1(`$#cD(h0{=gHoFJJ1 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/huawei/huawei_featured.svg b/content/bn/case-studies/huawei/huawei_featured.svg index e69de29bb2..a8a8f22c8f 100644 --- a/content/bn/case-studies/huawei/huawei_featured.svg +++ b/content/bn/case-studies/huawei/huawei_featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/huawei/huawei_logo.png b/content/bn/case-studies/huawei/huawei_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..94361a27eb5af3a06992dda4aa1b411ab702ee2e 100644 GIT binary patch literal 14274 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 W@eBhBOaJ+*PEu4>q*h2j@P7e3cUl|( literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/ibm/ibm_featured_logo.png b/content/bn/case-studies/ibm/ibm_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..adb07a8cdf58888b9884161d64112179b2987112 100644 GIT binary patch literal 11298 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 \ No newline at end of file diff --git a/content/bn/case-studies/ing/ing_featured_logo.png b/content/bn/case-studies/ing/ing_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f6d4489715aa4bc1ecbed9ec6b21531e07a02ffe 100644 GIT binary patch literal 10305 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 E0oEjKyZ`_I literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/ing/ing_featured_logo.svg b/content/bn/case-studies/ing/ing_featured_logo.svg index e69de29bb2..5a2df497c7 100644 --- a/content/bn/case-studies/ing/ing_featured_logo.svg +++ b/content/bn/case-studies/ing/ing_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/jd-com/jd-com_featured_logo.png b/content/bn/case-studies/jd-com/jd-com_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e89799842938622272852d418ac0ce065b2736f1 100644 GIT binary patch literal 6581 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.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/naic/naic_featured_logo.png b/content/bn/case-studies/naic/naic_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f2497114bf40a1a0fad1eaf65fb52b2c03918f08 100644 GIT binary patch literal 9433 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.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/nav/nav_featured_logo.png b/content/bn/case-studies/nav/nav_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..22d96017c432a4434bdb3a7e6d4123533957f041 100644 GIT binary patch literal 4218 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.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/nerdalize/nerdalize_featured_logo.png b/content/bn/case-studies/nerdalize/nerdalize_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..eb959b8ecfa1f00fa378bb02d4673ae77d445605 100644 GIT binary patch literal 10647 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/nerdalize/nerdalize_featured_logo.svg b/content/bn/case-studies/nerdalize/nerdalize_featured_logo.svg index e69de29bb2..aa2661e503 100644 --- a/content/bn/case-studies/nerdalize/nerdalize_featured_logo.svg +++ b/content/bn/case-studies/nerdalize/nerdalize_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/netease/netease_featured_logo.png b/content/bn/case-studies/netease/netease_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5700b940f34af36f4685436c03b54ddb77935086 100644 GIT binary patch literal 5601 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 Kqf(Br4*4%k>=jP{ literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/netease/netease_featured_logo.svg b/content/bn/case-studies/netease/netease_featured_logo.svg index e69de29bb2..0ea176812d 100644 --- a/content/bn/case-studies/netease/netease_featured_logo.svg +++ b/content/bn/case-studies/netease/netease_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/newyorktimes/newyorktimes_featured.png b/content/bn/case-studies/newyorktimes/newyorktimes_featured.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fad0927883a9310b252dc3ea75172b7bba5a9e0f 100644 GIT binary patch literal 20189 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.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/newyorktimes/newyorktimes_logo.png b/content/bn/case-studies/newyorktimes/newyorktimes_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..693a742c3ebcb0fb00b120c9150e369447115082 100644 GIT binary patch literal 10251 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 \ No newline at end of file diff --git a/content/bn/case-studies/nordstrom/nordstrom_featured_logo.png b/content/bn/case-studies/nordstrom/nordstrom_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a557ffa82f12e9172639a30014f60c19cee74e22 100644 GIT binary patch literal 7352 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%0DTu4DD-z2Zi$SC(#VDWNxd`Y@D(?mqm+rbw00h z(BY=OF1U!1D*yhII}>^&$(Kv1Lp|BPd-$O!9!3B8-b8lTH(zAI+EgR6jVyq4%C^qg zcgHZ2_-@qiQO{fgECcz2Qnx5*|NC-<&aTm=^8}St<3`N1`DYh516$*pTa4y_Q+GWQ zy?(1AUF;_&nvQ#M`bBy=OWILbv31kl=KGlX4J0hd5t9(ilKNvIx zV@zU~ZNi>WwJe%aD6~#vTWBfNRQ3ag&^WWr869AT>t1h65#fPGKSTh)e)_CXx`->`tJ{TVEb4MXl-?TK|q`Ab7=9&)PdrFhm_=M8Q?rwH7doK2;9Df?9G8YyVU3picX52CgZBqbMn(tKYfc*r zjthCbzC|?)@#Db>mZ#xv6CvTy&UnJhS`#agpRkr}OS)l_m4`PeHiw-LROQ*xQZ9 z4Bb<$XQ5Y%`b1O0sm_<_8XwcE4=YK6Lms7SsOe<{^l)%?P5>Cb#PP#QeIwe4oEn2VFHo!}GZq4Th>MHjqQ zNl;&Na9+hXk+(n3)_VZ%NU|6G2{ar*bVY_0QXIAwX4mvOl{ZTIJ;C09Gf(9+UK0gYvsQnF;dnaGKRD0O*x`Fv<`O_-oo@9_Z0 z*WbT+SK)HnQ+G!_CZYY;InIs!o}UAe&79&08O35P6I0XS=e%7G`pF^hMzf&;a&nfb z$qe1^>?CQUF6j@k?e1H!Bp>>VC`>N;lMVEu;dry4sKkUD<9=5Y2d?>5Z4FO1$o8(5jdd8LX~{3#q7XY+t13aX+|}@~6?l(Gu=5Q86J} z+e+T&iXk<7x!EHHi29y*GEE^K zTx;8Q2=>Ib?>V`}Ay@F#qsndd<`YxrO{brEX{h0*o?nxZnRKg9lb}&fU@YK%1N5kX zcH;*CA8$BL38lULOd}`QQpvnkn>N1#AYu0c!k>)=pbp>Uf<5FDce1jY0(#DAsi~(? zI6J#Pg_A$i()^o^beVge-`--HVKTMFfdM63Ad>Po6aq==&84MX#yPKJVGrzE%CfH} z7RFq;ZYD97hH-wS0`!dEXjmj9!$OS!FPp5kmht*Ao{(@k57CWyH%6?)aPm4pex@#J z+t!v8xbzpT=$o?5@ymszkKan{)1MlWP67?0jTQ_F5DQtOMasdqDNi`nSRiyK z2;%Zhidt9IUZ7~KccCb%GDejYrCm3mUS2By-|O=KKQ9LUeyecf4==^VGwg=O3>|al RIZodtYO5O{YgF%s{TI$2raJ%t literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/nordstrom/nordstrom_featured_logo.svg b/content/bn/case-studies/nordstrom/nordstrom_featured_logo.svg index e69de29bb2..a162e93f03 100644 --- a/content/bn/case-studies/nordstrom/nordstrom_featured_logo.svg +++ b/content/bn/case-studies/nordstrom/nordstrom_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.png b/content/bn/case-studies/northwestern-mutual/northwestern_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7c1422f32b86d6f3eb930b33467899db662b14e6 100644 GIT binary patch literal 10083 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

          Gda%H|g|!l%DjX=<#=S4tsgEo8jCG$HK^ zMn!b>E?jUYKoW20BAWL#CoWgdIm;iNO(8xtfQU|Q)BRj2KufCbL ztj4i&uoa%p+~SH8unNq6F|+#fE`1^U7azJHcUy5a^as`{H@m8CHI(0bxS!2t(E)F~ zX5z=0Qd`UcbIfOhRhoqjD<6FC+IgGPR#jQ1M!lq@>axu#%B{z*gW#%nmEW>hS@}IL zZkRoqRFza+ltxmVd<7CyTOGD(O&gX#J}zgQf~gVE_ZJzVwmKU95vFM)20tdrH-gEc&v-D6W+Y+E4^klq(rBv z+ZQ|eIqU1OE0R?tXX71M`y6CseN=cU1}BR(QV8N=4o zVPR#<{P;9|1$*oB?+Wzks_(ScBJXo;4CG@3zw|VJwMk!5IcaM1Fv}5S_IAXu!fSYR z?Ze`Z49xlRYjkV#V_#8V?*!wZu08!$>2`_v>xqrV7n1X}8wEq<9AQ()bQCVHf+oMU z8rB#88g&b9;$Q{g65`Q!HhDd>OFQ9itQBye9;^L9K>Smc1jKH7Clp)pFdL_gHA5JN zEAxWbtCRaNOc4DztoL|AH>+MBtz4<^Hdtc6by;TzPZ<|KrfS(XI0MGY+EE5nUnWt- zj==iHp(%2H62!gDuHyzJ7@I?wsljf4n?%IgNel$Z0(@qKO;Y(Lc`@4JQyp#$69IT` z?<_;*i{cgKUiy*@UTtI;jHC;UpB92WL&-=S-vE@Ua=Lbq$*mW1!{kEOID$54C)O8T zpQX-MTN`LqJg(ip)+t*+HSk%wYnrl(4##~D8y_JpL!&^U5YKu%jd><28sfGwOxM>t z@Mrz?kfFfc0Xeu=Njx+E+nlGgOEJ;NA9{tkL)-5Ag=vO{Sdqc~-Zd7V^qlW2=o|z+GB-j+ zW~z+_>iNPxt@t{rnHeg%$XCv<4$>0C=f3CsVCz?3>&WHfeql&(f;WhD0>^SA0!M-t z*roj=S&PBchwc04iz({-l9<)O@j0_`5YR_Rz|Hz^PI_M)mgVr=hYqw$Vn^Q}TSd}E z;MgwmHeCL*7=u&!3-8?0(0kz~h;F!on`8`QB-YOSO8+DG)Ed&spUs{L&o&-0VPUts z?{o;rqzZezsb2 zg~~rt4}7jmQH(roH89Z7Sbp4rtBPehE1njMQz$2DR<_4C^PTB2 z?H9cDDk7=@F~2nz(^T*{ILMsfF(?)>ShWyk|3mO?yvu&*1VD8DYI>wMB(QVNfypL& zm5bI3pYVkKU7%fdaBcqR2cXa`sMZ+&Y^CZr>!=knn;zv(p^NpjKCO(g^I~-DRzCP) zd@iXG#BC1gHtp_%?7&}u7GR9Z@9~QMysWMEn3&~_C=eHP?mR?SjY_*wPWnQ^mA}Z1 zx4&*EuPLV~T;dc>5q58L6g;%%x7b$OfX20?Ssw+>6Lx#h(a~x_eY1`5Z)r=t2kXmT z#E-N+kA)|U;_W+Ks(jPlBr4UfyOo~5ex@qAyJH!!EeC{VFXc!+h&FyNs%D^C;9Iy{ zXzs8Z?rVsD-b5qh$|ypQ1d>`BB9yD)DE{sW&%zL1Za6Si*!3J8%@X_KQ+JObhf$yvEgm*k(!o_#{7yA~Rl z1+{3@ucI`~!-4QBE%x@M297V&TIQ+$DG#c~bjXSw^{;C?=$>d&Z}R0VQocL!_)P2f zP|@Y=~Qsv#8k=t^t-w7QK9U){|%NHX$fy z<+2+{OLk;N19q6J%C~N!=e-mdO1g2m#Jmvp`PEr9wP51f3mXflw#iGzK#calVqO@) z`EiiA{8w7j#;R3cBMz?_LXIa$-02nSx88IH+)Ku-DZL#B2^lSBEEsNMW6>^h*A)Of zn53oGMM8cJ$k)C7a*j3rPH@*=0)t`~1#5@&Snl>%E^|{g3QyrOJkT?eh@VoG2s*3Y zPFmLEAC2Dz!hk@oB?lW2jIo$|+m>~vEk6rX*Q3w2US8sl%buoQeDV4^>cDT=8bogk zh&G~M>xz;77>a_=13viHY-wIzW=rysZ+OdD3Jt9;+^v_HrpD?j`?Wme`nq&+odB$S z{WLQS08~#joPFrW2qUy+q=~q%ek}|mEMIriMO(ITg8dE=y4@|LiyV-e5J`^sNdnWI zMsr~TX+O4IN`nw!nU;Jf18JNbYtl?`T0_4>=agVjobEEkuVhj^i0_X}z< zSaE4UsoT!}OJj6i?e{>h5&je;FNQP8hig?CY}-p#QaL@4~U>)PK< zEx&|JNlEL*G!*}wFw$R=FWO8MGG4hd4f`#|hIt%CM|&UU`w~dp^t^(BDuZH#$gX<} zUA?1R>L;G@BO4QC2|Q9Nlf=vT#J4M)15%O?$du}bXJcO2Mla>L25`#AlLvu(gK;WIi8O9i6W1e*%asshsOJ@$)h)fK%)ite}<1G%+UJfLm+;JmDwsZ=LZ zEep!SEF266d)9Ln77abq@MNUJ#v)22Yv()PTPk|r_J^4CJnywn%4ZXAwvlSPMTfrA zX)9H!PA8FK#cNH4;Gtc=qxViiq6Yh`U$QFzvs9pvh9vhPl}wTA){Q1Ve^~}E%w&^# zA8%r`EbH0ONrxAB>clEo(@;4~tb>8VUAp(o4QJ$u#rA^&^60_E11KkbRUdP?)p#Xx zMx>Z}JqFY#_kh=a9ak#R;Y)w+;5}cHLR1FXxI3xz1$<>faoM`0kgXj_-8F>2TUxo< z-(F;qo$ew*!Bo;3`z&gq;`TM}m_#`2zhOKGDKW8ko9C_1TQ zyWN#TQBA%X3ONX+-9zDT^ttt4*Dw#Q9TK@g|Ni+W>{vP1pg}ndJr*jN=1OyKzt160 zZe3zi%{cZcjnD9SA&N%FX7T&&Z0gW$t8Rq?ZIak>15Q^}nk%L8-NX-3bk%PQjlRbt z6bs+sjb|kgwdaPR0AC|dm52Vog3GVz3k`=sOKb9x(f${1AL8Lr9*!{ay1a4_Q!Fb ziLUivwzdrbW6C<=8dhZ-YKxV|C1p{;x}}jxePg_=G8ZAZkLAxiIQ&irg0!x=i^vExWRiAPTTqHaiM zZ)1*>fKD-Ch{~9J#E>gYT4RCF^DJ-i!}K;uFdCRhtLr7@l37iI+-$|H`8G98b=ZA5 z^5k=tAJ`(^1`CNoi%ae`f}!0WpGb}l>u!+TH6=cd$ zqXXs%s~YvH(j8Tq;+XV^QG)4%s2sF>sUH=Qvsqii;8kbSJb~4Iu9q2zDQNJyGbq4h zjeSHWCCl6k)2adS=>|RPmRsohCBglxG>%Xr+t+egQtEWGzp&-EP^kl|I6sM0MP0d- zC%nd}VRRSQMKp*=UXmz_@XPLNenfD$ik!|k7)5D`5La3km5~pw>%|Efc!pv<=DlB8 z6dH^;(5XDpURk5oJ)37A0;%)O|L_17!=56RY##K@yf-rBY3&{8L-?FPGli3 zgR}Cw)u_Zk3Z*-xvYKdDy4#~1cOO3dm|9ZbyF`8$bC^{)QU52flh4g-myf2-dWVYT zZY1NQ)2X06W4sW8c`l4BkpoN28EL|TYlE20Rg>2}gY1HC1G6JDx(71jfLF5wT~r|x z%!8w-0{JLqv3zN-APyn51yXOZRA^XTDLZFQ@Wy>8)O)fYjU8mf_K z32fyYU?4X0>dJf9gL@{RWP>M=Z054EvMNkBMp_C#92(g5?pNakzmNSG1E zE@L;$q1Vt~zBz^^TtGnrAEN7<8&&=eI;Y}YL0G#RR*Q4&`=Xl5`s*H-dA!dYh0Y+7kD)?_?0STl78q-W&I*Y=0Pz zpp7&O8?{6qtL+MU{cA$$S1-L=%j)Moz6U&H9>Nopej^o@VXmC}7&mi`W{OCRPA>XW znQ#t`gfN?6rrPp)nSG?6rYdbx&E`RjS-?j)N;5av0qf}+)8@qw@+)WFw#~@~r6Y2@ z1Vd06cp=E3fL5{+>+{y+oKl0-@Ns&>_&iXo*7!raiO>0-T#&cuX-4$Bk8Y+DnX;Vt zM=>18pG`F1@uXsh5A3_j*}eydxi>9KlgLD!l`_&E8BFMZcz9lW$#4_wZBO%~j_Sge z9hZFJRNCOch(@ucr?ZrRHL%CuGW1!0VA%YUlcb@5FKRpxLJ`JtGjDIk5q`hwTB2oD z`h(%)a=@XFs4L@ywv7beZNq7rdEQ!{Qn;MW0@_r|>St{UDD$QfGM7$yz%LYn4MaUQlp13Tv zpZ7YZ9X=aEGqk%u;zeR{tf2+c8cU3hri*WV9^MXV+%FS+t$PZCf;)cxIB27rRn5nt z^e}TYT07#C32O0=nN3?X1Vkv%(?5CReH;z4_rH#O+PsBp6mNgIx#T8jO>Y!!k3Glu zee_0aZr^l&(=nw$M}$dYhNaTM{ln^t75-{gb83itPn_&w?z(Ls<1noAs33V0Kl_b( zNEj-;K0Qu5oRL6=$zXg+3RCw8sVY%uHC9XEu{UaFTveTj7cu z{Wp`tC|=RVcE6X84FdEcC{gg5`QrBs^ZVqa<(k@aJXQis@M-#2Tmy@D1Rvo!3i(JA zcm{2mS;OcGBt!`x+dK!(QdWL2@XdYXAa1tJZUc>)cwKncDzS9ExX@+>kRxrU#d_pt z&t^{)8d1)aIyftPzUMMzlxsV&sPY=1yv*1%V#m#LD>)6S>nhv|6h~AiHM_>-5VGHud4+ zPdOt|kqiU1DxbZF=oR0sf=wz)cK09lMk-|$^)@~8RC{r5v{3_MZ4Jiq68f^!al{mt zRHEin+up5DXIJ>^RVW-dr-}4l*Et=$QRifT*lyi2O#?V_q`tvUEE{5Di8Xt-P?jgSlO!8S&f_(ooF@C0 ziP{f{%z4*jKFky)Iq)1snY(XG0wY$Khns+RjE59e179h|fEz$vwENk5z~m1OsEHfI z$5m;$&+xHT?0!6laNARKewq+c@UfC7$8sNg#M$I*1I-PI^tG5J@3QLo{%kF5F)^bz z-8EFK08nLY-zH`xBpNrn5$sTat>7%S9z&HJRv)6?m3eqSwZ1ufvu53vM(f0GadA3T zYQt-Lvk#-m5FjO_g4WE(mZM!LBcdB(GQ6r5zo;>Z>}p#U?Jm$kD5E|PpuOBb@9c|i zHEFDUU*|eu{A|Ju>ko{3i5ylT8kFo$>S8ySF z$V9MHH@uW6L{)zE;C=Z1)>)QitBGdh)VY&5A+h`hwzp7@`{HCmsCavMZQfW8l+@{a zf~BZ;NydrdjLE8!5+|=aB26tn4d}!A0~u4tr_JejXz$#$?nQvft=RL&H1!Tjjnb8X z+PY4Wh>Gm)dNkv8UABp4OPd)Lwl(#>>Fu|_M2Ubbod`GZSZ?2Qy>eakQ?f8G^6W5y z0Yr7WJ<0JB-JivDB-8};OAm>piTsJ;e2xCX4%Md#-=YBa^^1|;fyoC@;KEkf6<4tT~jOyFcJ%q)B^h7Gh zWg3Tn@?1~Kn?i`q=I7{|$D9un@p>!KUK_!7zPguVS8G=6T16eY?`Kwx9M)aS8r})N zP1-{*qfs2HPc?Y~+Px}@=u?z5i8zfxFfCJbbill&BIPQ0XYOn9l)4wX!#``ezXsx( ziA0@8;9dNvG!MQhe_Q}{`C=E5DfM`0gV8VMD^5puB1@rmLoYB!aVTbQzak9x!Wv** zOKyMsaLUQ`>FXvj?rx7vB2+V4CK-xk(nyq}zJ4YBCB%F{{R%%!AWU{C=GZ#ILQ=Q* zM`T=uVRKI_r_uGHOYvVC;b zZ@~e_27N#QaG_8(1i!q{K-ld93SE8awh6389@=skfy34>u#3ckk`$O59f7UhgA=}I za{&n@I<^!iCvUTq$#Jf`UY79ZS--uvngaj1=FFD9#R}n zJ9eNQ1N6)}RtxIEaZ;u#b))6AecSKEnKxDFqE9ojVC?q{5We6>6%lTIw7kbIK#AL6 z_@`vTl%IQYcdrB&P+-CEqS!f+qJ&f<-(-?PIi}6bjy-=;^c~LK>E#4K5~))%=G?I@ z{&{JgCJ?%KS_axCnT~`9S~GJeo6rYWu^c3tLpuTkUJIiGIHXEpR)G zzHO`L(FG{vuV zvxsj(E;5&?4mj-L^Y<5UxVaN=d$8QN=xWcIbV^ZQ%X#LLT6h!#W91u8=P53_Jtr-1 z;kTYEX0zOxiz(kCNtmO;4VI!N*wlem88*f{9b0&6>jghpb^NRm_SLOEh!cx0uYxux z(I$nUTn|``XCp1$mFwtJ;>v?N&ITXF=6VfKLy;6)9Y$h*c2;rOOTAe3VmhBF*J)Qr zNi!n-jV;^c<8J?SoU}u@Gl$x#(ju+b!c)F;pFDgRdetRfTdm#F&u(G-_Ar)sCEpV~^|0dpGuq$d$L_nt11 ztq!^34D0u=!@bW9!uO7_HuY6DnY)%xJCRm%1-yQKB=X0@G!T_*V7%~XG!-G-vew{| zHQb7{He|coG3Ee(ya;DL;B~yM-kd+dy&62mi^@NeWPF#Xq&&ozmOkubernetes.io-logos2kubernetes.io-logos2 \ No newline at end of file +kubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/ocado/ocado_featured_logo.png b/content/bn/case-studies/ocado/ocado_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0c2ef19ec3b0359285ba05db312d2d8b10cbd5aa 100644 GIT binary patch literal 8089 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.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/openAI/openai_featured.png b/content/bn/case-studies/openAI/openai_featured.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b2b667c0bb13d09866a2bcdcf39c77f24a55c29d 100644 GIT binary patch literal 12132 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 oBbQYHlkUGZ2Ffi_@% literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/openAI/openai_featured.svg b/content/bn/case-studies/openAI/openai_featured.svg index e69de29bb2..cf9b79721e 100644 --- a/content/bn/case-studies/openAI/openai_featured.svg +++ b/content/bn/case-studies/openAI/openai_featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/openAI/openai_logo.png b/content/bn/case-studies/openAI/openai_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a85a81ea063d0cd80218f48c376547313a47fd73 100644 GIT binary patch literal 19818 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.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/peardeck/peardeck_logo.png b/content/bn/case-studies/peardeck/peardeck_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c1b9772ec45a09baec0c11ff9bdb61f91915d680 100644 GIT binary patch literal 9260 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/pearson/pearson_featured.png b/content/bn/case-studies/pearson/pearson_featured.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6f8ffec49e6efbba25af84b21319bcdac403a2d0 100644 GIT binary patch literal 7784 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 + + diff --git a/content/bn/case-studies/pearson/pearson_logo.png b/content/bn/case-studies/pearson/pearson_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..57e586f3ebd32c43937f611854e30e8f54c1f2fc 100644 GIT binary patch literal 5123 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/pingcap/pingcap_featured_logo.svg b/content/bn/case-studies/pingcap/pingcap_featured_logo.svg index e69de29bb2..46d2d2543d 100644 --- a/content/bn/case-studies/pingcap/pingcap_featured_logo.svg +++ b/content/bn/case-studies/pingcap/pingcap_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/pinterest/pinterest_feature.png b/content/bn/case-studies/pinterest/pinterest_feature.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ea5d6257894681f6afb0f969c3d0cb5b4bd371ac 100644 GIT binary patch literal 9118 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 bDj9+}Co@&exntg+KV}p_DzatL@BRM^K`Oyg literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/pinterest/pinterest_feature.svg b/content/bn/case-studies/pinterest/pinterest_feature.svg index e69de29bb2..96cd6ded97 100644 --- a/content/bn/case-studies/pinterest/pinterest_feature.svg +++ b/content/bn/case-studies/pinterest/pinterest_feature.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/pinterest/pinterest_logo.png b/content/bn/case-studies/pinterest/pinterest_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0f744e7828cc2c0643135267fa2a7f1d5fb0813a 100644 GIT binary patch literal 9003 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/prowise/prowise_featured_logo.svg b/content/bn/case-studies/prowise/prowise_featured_logo.svg index e69de29bb2..1f2d5ce41a 100644 --- a/content/bn/case-studies/prowise/prowise_featured_logo.svg +++ b/content/bn/case-studies/prowise/prowise_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/ricardo-ch/ricardo-ch_featured_logo.png b/content/bn/case-studies/ricardo-ch/ricardo-ch_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c462c7ba565c222419869dcb5f187965c54d760f 100644 GIT binary patch literal 5248 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.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/slamtec/slamtec_featured_logo.png b/content/bn/case-studies/slamtec/slamtec_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..598db9fe43a94cb76ceb9e9273112e633fda1bdd 100644 GIT binary patch literal 16423 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 zP<@Bekubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/slingtv/slingtv_featured_logo.png b/content/bn/case-studies/slingtv/slingtv_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b52143ee8b6c650b4fe6c9d0b166b0f7163378ba 100644 GIT binary patch literal 8513 zcmbt)cQjnl+PCPviy9e3H)eE3i%t+VdN3HB8Acm5xeR^!EHUfq3$pYIUBeY44~!$wS(!xpf)JCUYHaH1{RltzLAHKrUt|s z?!piK%fs*Eg1ARxU`WaOAfVPxFb{wg%+A48n)RTul@;J%Bh6|kq6yYSD8TF;RDIoH zdcM!~t$m%WC2Uw_WdKq>kb40xFb^oe$Hmzd3GtC;{fAu0{rE2##0vNai-(gm>wg<% zq^S*1fV;y0BK)F2YXM;}Kum&PKol%2BESa_1Ph3Pz#<^9C=e_F0gFQf1pxoNSnsvD z+t@;M6_x*~>;6re)!xGc0Re%$y}kLph4|s_b|3)>2?-Eb5F{uFyypNSQLY|PAD}Ce z?OzfUVMuFt2ZVFYj5|>i~%ZZE0DS{;wL=+Si1pkFqb47YUU9DmN z!aDp9R`GwuLKNI#P!G7fJ{<1+uk2~t!#&_gdpH81pzx1u0k|}w)()D+&m+{u68S zAH4r3R`LIe1>GA1`kUVWBi;WZ-Ph3H;lGRb{^j504|Bb*dH4I`-ku(2#K3q|rlu&T z?=!O-K;Um?h&qti;74u@%FOVAj$7cz%3hHi!P@vz#|ykU?+h7!V5<4F+F_CcS*nG} zN6FJ_bA%ljHLa-^=2R;YFUUXNzU zO7^Hm!;N-Y^EOJ`0vf~ZhorKGLf-`Sz3phy$Ri2|NLAwN;^}Mzu~d=KbFUW5El)f5 z`QB#b2zRE|=@cewHoO1u4i1tvj&n53J0q(aZfbL+yxGXgO)6s@j($AV`RiNu4F21p zP(Pn9J^r<02s&QF-S2~1LnE}2JaZg*7eA;jhLiYE7&=r?`USZ}c?OUj?_HwO2jX?c z+Ab*TllpBf(#w6@Mwj@9rT~%>a;I-b-@`0_F zRvd{3uAcZVYrS4jO_%X~6O|a@I0*oDKW}-n==%;hJFI0A;+RHZP|xfd^zhu(+LIQ) zHghNtYQzBz$A-llDzXIj&H`3enbF5URow)pr=hW;@841?Pv>1E4_SW#uS(VwBb*=j zZB>aQeYE*1$$MGyv8NXB+;Wg_C+XTu9$gS+TOG9>Ac4Gq+@zeA{MTes?O3F_zA#fd zMdlJGp>0&a=QVr)cq}fMR9fZ`sMfQbx+KQ>>6Ml%y?7XC@VX{r@##)Wvv`nMxn?=y zGi$Yb$qBn_6tA)ffRR4b!7GNPtqjvqOJy&;Jas!r&pNR+U(t9dF1YNE8k=|exFIJ z!NRj4ubFjiU=+?J+lu|GPJzY2=jiK?5}S7doEfXuLNek;kx-%6F;7ygn=WjBl@SSW zd|qV}WL6||mmW)zowJtWC7_Neqjsj^V^S7sXDItVRwi#S8XZNPO5m{^5cA0dw@pLt zI(S8WI);p-$-z!%pN>nO+O+@o0M@}qTzw0hayG@MQoD}W##fdsL-Hz9>~}H0f1)JX zx3=l_PmG`PHMz58qV^CW=%(P$z4z7G`v)US4-b{SLVZ+JCf_7=2*ocw$(%FR$8^3u z3vpyaZ3X=h8@kpzd?Bk6nWgwuR>3w6Nf8o1%v8OpY!cK<9#1}n3jqaS2OLT~Op%Ck zRQh!T;VB$WD;w_q8R;)mA3u#6Z1+3|2c%`ESuW!<2)ube7qK2hxHcm}arOnjJ#Osi zU`fl0{_8g^?zSBL*`c^=I^YeHY2cM*SFdzC`VOO&3e*@ocoVjiYPrmn9X9-S2It@v zE{S?A7|)KhiiUBzoiT!z*Q2!$BDPXcS3Yh*CBe|vzU`=s?>2SF0M-se{i>n=+7iv* zK#%zYYgo||22ucd`S2K(-YYfA{uers5e0m+TK#bj_aSN?*E70+d;<#MgePHb4ctaY7@3%N@C@~ZRg z+{4=kCr=4IWhwzrK+#3Ktj8u7&3~N3^d9pLzf@B{$!+P-M(RgU9AE!N=aV1_{QRTa zYRckx)*|N?>|FM$%(nzgPM&*@Jb=6>T}v7k)^r_R3x}dy%$lnWV!5bLCw^mSQgL|M z$a^G&kd&MP+XC|7utho9c60T&i3?2MnCj%)?)wZRz}hbkuL))RRZzkR9}E4H3diTs zK>H1HouckSubpn6K2Xb)+Wf1;sbd*;Qaka>hNeO90ezA{gBL=&5rJ+^h%0o3%WCKdqw%2>b5bjDefAWAOX6PkP?mrzLO7ynN1#wKaeoQx#)1 zp=wI*=gf!Nk2{Jw$tAD9WM$HtS$yiV3phY5sF=D-CQY`GJ#o7;{qNEXckHz0km-1$r#?F5p6SA}KsuW=3}O!qqNEZd%VJ{0eOcAu(Oc z=r|ruhwdjC!iLko$DlKAj3)jV`z^BxT{F@~6kZkE^DX@__>;?V0!Njf>%y3-YeKaF0LwGTjE^!~b>JjXG%NxIqW=_4|v1 zqKw*@&&7TCECIeG8zXf>Lrgyxg+Uk7^}*VAPY|&*ZRUyiJXE5><5oFJBZlWT%mI=_ z3co)nJ6Wpd2+(YqE=P;XvxL9XkV=_@Kl*Xo z(I%{lVOBme7reWzhQPhO)W*$tUj`x)bF^mOQZU{?nqJkO2SeNPsyWzS0@yMtrkk%u zm!$j~B?QN%&xBjC3C-J?CuM^NZC(hIXk;JMtv{B@cwts0NlN$t%aSjicI&L{OeTOh zH?5b#|NE<86rLW=^F=JYs`GvIV2ZarTo2wFX?M#y|Ge32(de_Xro5`nKTDwX^FpTr znk!~JCN<^3P|?gEi)dTHHORi(W4AdGq9l-BRejH&nf)gh^B=ddvjolOZgoW~U7uR& zlm-EhW|P+QEprrfzV?aS6_T!$&i9sw^nC5ICcLa;n+|g7jSs}#SDl$`nwoclY#WRJ zIvjYV7&vBpJrRgsLQ$|^NiQ{RWaKg2%G_(~vLE+ukwv@RXDNl-63!;2vHE`vO)?BkXg=`=lW>a89CruQ({ z2~o-2i-r^^EkojnH<_)dCp8<-h>iYUEhUv~!~GPi%IrFBVfuca(eXX+PbXhfgbj~}Jj{72VV6ssBD}osS)3a@ zS*NZw)q_XX4i}4tbfrC0^~;^r6XxM^KQf#5O8VNd(__<_YHjl06qfV`3p+Z4=ii+r zMjd}I+HA^ZqR-_NIShs;RWoCu;*JjcuRq9ediy1H7+SaU) z?@~({JUNB0{M9nyZ{km>GgIQ90BZ|+Aa6z67I19(c|P-s52{NmiLV!ZmI~>A4F7qz z?ZcukVINM!t7`*sc2x}w3We(!5pdJB;CDPFmvI>W&=B3aCuq48;(BNXIZLRXPpnYC z%5%Y7&eOf$7lQ;*r^9ISe^bei0u1p4elG z92iJ=rh(Dyw|GlTXQexR5ppudq<3IOX-=1zOGxlT!5;@d_;y2h&!_G3h00M|DE+!^ zetpZ6(gX8=98EA0bm83C*+{jkr$f$A^Js`rm8~aY>}EB1{ReecHPAt(NmO({Y+ACI zRK1&sV>Mi)rPYEa^NZgp$=DNWgM9ji)A-`tV(ab6^ZX}a(xHTa&S*}O;YKaw|N#){MJb^oqe%Sqc*1pNZ%TuNR4IW_WQV)OB&_qFrX0MG6i^elBNk>?3 z7H03oKv?~kDtqmSL8n(8pD54+Gzm*aiC)9qSg+5HQL zWleQr^rsay9gFt+mpB_LUoW$mff_`rL?Oq=Q4Op-Wl=n_X-~9{SqykmLBjX-PJMPuUL{5DW9ck5^6n@!<657`k8hY^t#<`;Y4iZqwrv%OJF zeL2Xq`^G6n88fsI1mjMuduBjjOldGEI5e7_;3=}r_`2vIO6Z6$jIp(}w{=T#x%D}N zFKo@Lp*pVK+)I5TP|_MMV|=}^yjvM{oGKB_yAu%HTgbRP|XvrxV zO&UbFu}oe0O}_A|pz3ko7Y1%=>ym9%eRj(D9~b*H3G5W?2N~0!HbGMB))=nh;Nx-T zm9a8TnQQlhlb5z$x?KYOUzs1>`GyNDI3-j*^D`fJqEw&)K!(}!ievrHE6B_F`0jqr zOs$HW!XKuxKWfc{zsqwtelbAbuZUMl(irfcT! z{1Ol!6r~tw?{ZqK&ISgJi2{?0;>?AYe!VI_wO8M7F!XICu7JhTj?>xFYy%Lj9mw|x zysz7G?w-gM5}8V9;9*Wp#Vl>aM&xSKfV(K~UWPaWK`>p1;KH2CT$2d5kCCge4+#l6 zE+LvU{jJLPhoQ6|ZA3&q>Y+zXJYSk!{^AQT%{ucpJgSeAAN{SNZ>I7#qxTVJ(A^~G zv8?^LYsyzDzD+T}R8$`kwj1hI$Wd>uwKx^xeVE)OTNF=Y#Kz|c`s*g+2Om`%bLDQ1 ze`}jApjxUf8cToYlwk3TTKIi~EkXf~I%iAe$=x}@1^hD_@T$`9xZG$+!k z((~*@THfWX;N12X&LHp13`bRHC|?X~yfmTJ6XnAX>8LB{x$b)1j+Uvi6e57iOGRyd zK-9@uXr%~wwrWRy`W$gYoT;yyBx)U5DXIvzOWJ)l?d-HzZ*+7LM|1d~;x~^mQ({@x z*Sm}M3*?8%`3iBfyd%d8!ZyM`o{G4LV(wC^6@4+{VBQ2Rxxx|AI(Uz@Sk5|wuVhiIwwi?S9T>t-(=X zUz4bhGBjLjR>!9jC>zH#S%GLA#S#D9+O zT-2oyV97pPwnkm_r^U@HO%;|R%I?8=k2EmTfMiyX5b6qTV>m+kO})gE{_Y#ld!G08 zK=XvXLFOyr))Rx$A&-bNm3Dqf+A!+YC&$7a^J`>cjyt~{2W`J$QruA1+gbc+0KN{A zH5X_S;=&?A*EFZb!?yxzX7RZ;ge_Cb{g>~zefNt}1Mzmpg-0akZv%^iXC{vq=a9zD z2P>L?ltdh#u1h!``l=h_f@=!wd>i%9b!0Z?n>-QC4@KIYTZ`mqiprVBu2+9XcT6^q zVo9B579zyFM=PbVTZZIZ>l_>;0fR2J)bXbM%*JvP%tbMOThV#%fVM z3}J8@kkAPyc0vWu&$xkmTle@{h8=!g5ky%&*M7hs(o)UMtNY7EyfJBlv_&=klKtQX zwdJFUNhg_vDs+1?NsDYcjZYEqap~K+4%a{m+(IC{uG&ZzLDTugD=p@nI05C|8_X;= z6%fMo7PXO|ug0mFm3AlcQnE?-I5yx5`2po>!ZRSvEt-0(>XA|;&DB*tg5A(@hPCmA zQyN)LA8jr)-pa>{#xEl0qdJ{b?})5Kqr)UB$J%?vJUEI=*BA=LpQ=1`M#s{Ote`d; zBP#_{pS&nVWP|vKud|GU$8f@vujx_{4V~(8>d9ZT@0JY<I+!@6(50b5*PiI{1pf!Kstyhv69mtUQ7CFRyD+!9r-FFCMt) z$nz8Eo|dz&b|i z2?QGPqM!Qp(`>wkDv839vXhrac@v*)-i^MRLKu#s&6F^X!}Bypn#6`A5YRyi%U1tg=HGs9ke^JEAXip!g($~f(EttwWPt|hfBF;C(zel*0v)k8G6 zL$K53`jHenXe9fc->&PVUwByur=I85w({N^-$jkgcbx4lm6A7y2_<&BMmubhWv(g0 zd`vMh1HL4LwhhIb-+>DFxOW7--zGTQhEjZQ;qvI`54fga;+%wW9T#KoniO{Y^A|WD zq$&f>yEDJ^n7F$q8~c z;Y%3vmSY9`l$d|HnZQ4e-G~bua;4ZvVvwUFP<%wuCLdgsCw)-80n|#yn{yt1@|VD7 zmp4)3O(u|@Bk{nvTswPvDy#NYlx{ehjHu)Ofcu3v;q;iwNfTonEe=69Z|)n*oTr{g zCLssT2Op%K(QCZ1#akoTO=2o>(dCfpg>T6HCUyynobo-bU&oiEhl`yaVP1!LLZUxx z%(Y8T=`Wo6tZHtCSf2rzJFG!buhMS<>bA-&l4-0KOb9Z$4psW`MkiXTGb`-NLvpLQ zPSjRUh~%jn6_z`z!0@V##y5{}2u~au__a=wWL-}!$R7uew@T^wobFwZMvcDkxV1(3 z$W5PU`rO^tRi2lYe4{t+%U_(!a_F6oO~dYN@I&P{VXkkX+xtGdJA5_Cow>oQvM{6L zvs=z=)C+2q(mi0Gv5TX%*cY`4ks00$f@hkPO0}FAphNX)qMh_XzBxgVj2!{zkPD7y zb%P{6uJR-Aymer?E z2MZE#+6c@EC64%FidJzAL$Xlw3+3Q%;;YhM6CXCZnIBq@)jaD7CV;rZpIq>2OoM>L zFU^V#{`Aw3%#7__QWDJ`Q}3!OqO(o9tv(K|OGck^_8e=Ok@wKNX9ssK2}&8>bZoSG zKf%MQg$81r4%|meM zK}KraJT*0LJn_mZlZLDaz+1GpMizF86NOJ(Ir-o86qW1P(pax1oPSIJ2Nuj;%Q@ZN ze@mX`xiLMy<~lqH3@kY`QomJkK@9~kFH^o(dN+ zoF_z7NRDTB>>D%Vez;p^3m0%GWt=0JI1lP}`LkSvv%Oov zJldcB;LEbV!!;E&nr|__#Hh@cDj7HN!Mi|`2z~sSkOw(cIJs2)XkglVPk?2;oNM;J zdbzp5;ht&LBG7qAnboh}^Uuc(zs!?l#tra!eYE;aEH+FHY8Rayu7rnP3N8O(VQxKm zYAdHos*1gNkviS5L71X@*OoD$epvQd?=hr*ribR^u-;C7cZZ~RmNY+hAbH9HVN0dl zRcHVA?G!>`|87VUqg>A|*JV*uc9DpLJG@3guv}?EI-zd}ubURLgnfy(4|PS| z)xN@woN*fvrdcR1C-o*~x`1q*;%YHJ!vwUkhtB8U?`B7xO5gCTT}p}XmcF~O&8mPD zmB#R_6;V&Min%CE=@`oSJ&3p17G1Xf@avL6EG$j;5_oJ=+4-=7-Pl%6Y=%3Fr~7t)XGDgXcg literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/slingtv/slingtv_featured_logo.svg b/content/bn/case-studies/slingtv/slingtv_featured_logo.svg index e69de29bb2..764f8ddd88 100644 --- a/content/bn/case-studies/slingtv/slingtv_featured_logo.svg +++ b/content/bn/case-studies/slingtv/slingtv_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/sos/sos_featured_logo.png b/content/bn/case-studies/sos/sos_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a97671af6d8f57c10a2cb52838477c26f7fab706 100644 GIT binary patch literal 6662 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 JR;pqb_Fv7ME!zM9 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/sos/sos_featured_logo.svg b/content/bn/case-studies/sos/sos_featured_logo.svg index e69de29bb2..4e611798ac 100644 --- a/content/bn/case-studies/sos/sos_featured_logo.svg +++ b/content/bn/case-studies/sos/sos_featured_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/bn/case-studies/spotify/spotify-featured.svg b/content/bn/case-studies/spotify/spotify-featured.svg new file mode 100644 index 0000000000..d1cc3418de --- /dev/null +++ b/content/bn/case-studies/spotify/spotify-featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos \ No newline at end of file diff --git a/content/bn/case-studies/spotify/spotify_featured_logo.png b/content/bn/case-studies/spotify/spotify_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..def15c51bfc14be96be75f9064f8d6d7822aa601 100644 GIT binary patch literal 6383 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 MqM$BcBxmmbUj@3=i~s-t literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/squarespace/squarespace_featured_logo.png b/content/bn/case-studies/squarespace/squarespace_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..551b6da32119dd8701405202ab8c861d63966a97 100644 GIT binary patch literal 4539 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.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/thredup/thredup_featured_logo.png b/content/bn/case-studies/thredup/thredup_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3961f761b1f4c58a451a77bf93ec4dcc01c2c584 100644 GIT binary patch literal 4738 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.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/vsco/vsco_featured_logo.png b/content/bn/case-studies/vsco/vsco_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e01e2e4e8f0ed73be867f5579bfaf0d94276646e 100644 GIT binary patch literal 11065 zcma)iby!uwx;Nb+NO!ZPySuxko4uu^LFsOg?oR2H?(Pyvm5@**1SD0!JDhvYx!)h> zyWhw2z=p-lTC--}d4KUvjFyHXHU=3692^|BvXYz*_*@0wL1+lz=Y`gQ75E_alsEL$ zb$Q|W+R7aUCk=J6hS4ZHS=qvLU{+8cw@H{792_FVUeD0eP+d*L#>I)l>ah)nx05UA z4F@MC>FsJ|;|TMlv4+{&JB!nucK6fK*h9tX4EWW#)Lms^cJ@lX?l4_n4LuuQM;l=% zoumYfn70VHffLNripJaNrL%{Kw>aHD?kfU*f4s~|NAr&+o{r*l|2-%}buAiM7k3y9 zKZgLj4L2V@ji4|Gw*W7nurM194;Qx(CzlW>H!nN4fCwL#2oDdCn3C+F+euQ^`xa=5tLa&ij`3v+VuaPsi5gBI)_KF*$2-t5jE^#8hp z9L&SU-QLyH-o=^b@s3v3E?%DEbYP_a{R&R5>gxZ#v9rfNCkjj%r?-_WCpQNdr<2p; zd;O!eho=tge}?fNTYKpFxWYJfU>+`B?lxdOUeN!mGnl*o{Xvfn!DvL}Tx`6YV9uV( za^iI03J264D#9l#$gjX7BqYesC&SGxFDxy?$0si<%P%c2B+n(w#rvR$Z0wyMFFt#m z;D3%6=5GHA232r(aiaOh42jtPhfxT~%5w>D$;$I_%kVwEfv_CEjI6K_ubiy3Ag_?D zAl*OvLjS|t|Ff^c|FthC7!2p*^8O#o{jWXAtx5Ah^S`q?zI1 zm@Aa!r1iW%9_PRI$Nu#&me{s-&>Kmkf>zRgu&Q99k6vR!WZ;<*=Vfr(`+A6_spM&G zGy{G(jg@RPe(yAkfywpF=7rD3ui2wKUS{-XvR0C;^F+hf~5cL*|)-=zM#JaCj`%Q%J@*o zeen(S3O*Hp4W$%;O}!MxYkYkw-;tozmd@1usn!9k`%1R+t; zZqEL@pV{2*dlT?P7X5+ug@5l9*R*4Ld@i~=JC_?Q`d^)V>~!B>#Iyf%K1yuCz>8tg z=kK#Ok(|zI@RL|+QbSQuv7^pi4Ey5S{LR^! z_vOL+)Be9yPoH|+|Gsiut(VUG^5qLLr#aGFcS@}ZE2mFw`*b1{PNWf&smaQP_4 z&&5|#9%!X;>*4wCco0uyZ|{Ajc4;vEpDUeJ@n(1@)Cp5l)9U9nZO$8AY(~vkBwUZ# ziH9d8$Z@51l3Ov6sx=VLvv@_ZxVZQZIU0^kz0>uJjDf+b=<6Ss-#=7X4u%d#Vt2dk zMw%b~?S{w=oUApKLMKyZbNCUdl>{|4HS@;7)Hy6yM||DQVtHPDMywTh*?zp)o7+z* z`fAUm&;QrN#KXhGx4C?B9;njq%kRW&hFbNe!VrDD`$9H5z{D!YkQwNJ#vF$ zr%8p~p&#C=m-C>RkKEHB*6zI)m+&Ld=}L2p!Dj?P@Vr{DYB&nl&(H5&&}0hZe4%8! zH^vGHL8!s!ABz6;C`MXY^olrfs8UgJMC?QB;7QhJ+k>CSZnlCF6Mb&aig6=(B>_b$YbI=Mqm(bQ+Yjz2R(@8 zV3BO}2Ne?72mZ+BwH2D4oJ3a*iRtvcVyP!e^}G48@%nVriob(RxEBQPfu!C1=4Qc2 z>;c#`%;@(YTOE7gh#aAF1>(~&FF$v`)>K}nmhjKwwi&xU-yQuhlP_w(5_YN7tdwT# z7|*39`+`Eqb-PSC_4xRBsZi(e{?Cm?k2klxMxQ{HTBH!CMPK|ISWpN8awCr$fzzIw zqT=|63e5`D%!KfSQEq$d$Y3)wGg%p#j`rmmgWS9XWW6WpL~+$f-+5{R=@PdY0BcXkXXYU zx;Q%9DUe*`;0vQrYxiX|MM)EeeF(5Sl7w_jqNkKsw?oK>G`l1kJ|B7W<27&VD;e ztaF<0Yr%&Qzp$oR;-VIpEvh>s<>&+XN`m^(wc4dsDSL8(mjnI-%?Dy3qL~4|ewJsv zllBa}S~kdwHb#yv^WIEthD{$rlo1G+;uTTErMMImC<4cn3MKAW>P-Bu4$HmnlIazb zoMj~MMtN-HGT2S@8_at(SE0}|klcncO`l32MoVdVUrwen8>g%EAbu8pCQ3(V4RRud zQH4f+Vhz_KJ*k7kSUhQ1*>H`uB|M!DCjL?la;CK8K~~ z{EjE73Ta5*jcL!6e+W6YxiR#R>>VwZtIp@}PnTIm22C#gxjv!C`*V9cFtr;W(z1PB zAQ4bq%J6=7wqkT|GIg}10OTjl=MV`3N+!PrheorvYT0Y(hE0>VF}${ON!)j7T_Yo!scC;8gr45g;#& zJHT;5jMgXHvMkivEuDAA-nggc3OMofDOK2j4J@=A$Z+m|_GnXQ=hEP%!C7#fvgBnNSV$^pJtOeE>&O4?*E?a#YV8csO z(a55^MsanG#+{|4u^J@M|G7DB7#=0kMw8VNgGe6P4S1_0+Yl(l5hW($n01iG6_&6~ z#@srS=q>bsTz+t1$5$v8HY!!2LfAEmnLx&`!aWW0bc_3A(530ycjzjr(G{Q3J32r{ z8C5eT8gW_kzlVi|ZES257e-=}|M=XgD}tAU>Wor1Hui>GaNB^pt|A@}AOGhkmwq>7 zF5AU~&@bDT6mHAa&y|n%EWZ1yvzc{W0+404&wSeY1A8CiN9SJh1aUJ6(0&69L@tlRB45wAl%KmY`8?S{h9B_D1}(^1!Z z{RFRn0h}!R3b5R`c2F3Q09?sC8nX_!8+{h(DQ>LwZ0kZieI|d(L9j&6NTz7PJwK=Y87;A0QUVMDv)?7rXMkTv3(AHBVIX`z42@8szCSXN|()^U+-+^t-bKUYcsN|{0##Wl%hFVcHY~R z$!UR5rC(>Pyg8r3I1Ok)h<)u=;N^ifj)K8s;vU<4+GBavo8`MHxR!Gh8`LS3Ay4cv z`CY@j$6J~kByok`6w!-OQDqI+!GgYz6qpk&R#dXDN?!Y_GV z#l;~Tg+s_DQx2e3zY)fr6uIZ-!`W%|kT2p@-Gjf-*x%pp?pr7ku%?``TAZ2(L4sPp zu#)zYmI+LvtI8fqog!#rgRT*>>e~@YqSpgjLJhoA4_Siuv?p`?ijsu{S>N(&1AMQG_Y=0frG`OlB^dMsrp$QsP zYK2@@f3B;js1Racbuk9(Sl*?Ls-?4PJfFplxOw=w^PMLi7p_Vdpe!IMt+hFQ65R4H zeTcSpeqVyj0dFoBp8QA4rpya3LiuT9+I=p|RtoMo`Q~MndvDUQ4DB z54`iH>3~gVl!X_GvD|ELZ#O!wa?nH%)11uZi>@Mtjq)P3?_I#77lRCEn$}55QV8AwFJ@I=GF#mn=U2fjz;Z~+JojkB9%h*!pD_wlk0*)&)JA?@o!a5D+;u?y2_E+{w%~HEE-#{Y0xVl;v85Uy(orha10_wPxxzJgf;I8$BFu8}w*LyKAzt`(k=#t6sgDkp}Fj67KYfYm1C zL%FJL(|1xYzUsfa>ZX2 zjMqH2a}+v@KvOJ<77x(MMh+lJNJs$INjIF*%r293c5x9G9qq~=`9|#5Pz2^LOnQge zEZq`0bhvSk)|cxknNgSGAQK~phBrP;XL6RGMo`5ZX$UxdOp^%kwaYt) zvp0xtuI%LTpzJ<*a)5;1!0$=izjJzOQKp0!$4keM`%E?28puP4o^}h7tV6}*$CBV# zM2|6x<`A6H5qT>$HLMp47#I<%O5?@`SzK13gKLYHj+*8*`s^e?sC*D~*=+Ha0*cP3 z`$@EMY1SlSbdupW$(3DQ?dWp(n*pftr03~o?;Vhs>^k`~5yw$iH)`&V~sY zq0B8TVAiD4n&6$nXDbYpG-xoFZ->t2w0fWK7}CYbT4|N6Ne61iiiwDPgz7Wn6aOZE z7W8e7ay=Ey3IJEI3qSsDc?>)<-WOPml}SqJEYBAhfR1~&xr)9tS11{@(dDI+4dc2F z21s&05Q3Qgg|sQ^D&qymICnI2V9|IYb*?9?nE!2Kv?p6*MTISx%KW^%B@H7gxT&Vu zSDu?CK$Uo;I$Y4|*8-ucn!$$Gt6giz9Y^_e5T0n`CYFCxC0#5=a<~Ya zX$KcilT-*oC7mJC8_AbzjikIUAZc?ZXr&aAfq9x%#42&!$!^&KB#**?2ZoXOb!TVj zlSQ!%vYHzpL=ipDUicIP=YWcobg~BR=v}}#$<66j<~f$=t7E&*9d4nYarv0k zr6AP{dwktX1A#WF(TBIl&-`K{u~0Rk>D@bevw={c-J2udNEK46lakn%_boihG)TQv zA-X-XQ*CnJSBVoZ+IIL!V9>blEWb!^1qMV!9fDZfBPo`XC6Hn%vw=I2v6UT{oBE_O z1^)}DVzne0mu2wh=Ro+Y3*j2?^8;!g_e+o2RF0JV*R0@{7IaEc2_b^Uq{YrkVrqPF zP}&N%sk~3W`5g8Jxml(5Uh%K-@M$t7i4(DIQgd%N*5NW;6{Kw_fOOhN5@lMt2Sx+3K2y|L7}zWRBhh$= znm)E=ay-z9f#kzPs4Ee--}TFt$vVt)GiuAKW8Av;AHuaTlO zf>#-0%swrEpAW6$SSvy;QAKG8Sz4jpfdD6ax;Jl4io(+|8Wg-_c@UWkVW6GH=^(3x6+1GJ^57sV^`^; zwz2PwBYWD4HX7E#Ks20^f{|T7a@UD=_Qa^1`!*Y(>fHHEjggcvn}s52B2EeD#FO>l zXOdNYTGfLsOeh)tiQP*M5=4M8)Ez zb%$QH<`=JO(Kmi`3*hUc$x1YD!oH}>G^8#xSV*pC3Az+C>+)Fxy#@rXO&|v8ci?5+ z23#FFqU@SpAEyzns!hrGK+M~`uTu2>k{M@fO;3-JN4VP>r)TgmhNXYl)wa*B9dvXm zx7IIs?_1{=+MpJ)IE3{q#*kf{l9ICZrD(e}71FDYCBW*E*9ql*#*_HmE|wvs3#yYa z*Q-;qOgNO|)s5YFmudx?vMV4%_pHq^*_o0G;c{R8VT16_7~kmyskF1K1NIwByrIDDn@x~5hQfEvjzcL^QK^H^0w$De2IVaJ?fO~SN>pGo? zB>xl#+YlT?|f9mK~)}EvW7hnE`6FDnkivwNl%78ausSqG2CX^cncMWX~${{XNG_D>ia*9yaB zs0^8ClZtnXW=obEl`=F7CBy@M^9i+`*H7?dB{jn*e2qzuXZvwm$-TsuGEb7yppGRi zgRG*#wDML9mZ%-&lbam}`b&@kfzWeQ4g^(vnHBc-FTR-=w$IHV4*iI&(bnhb=wvNXjI%Q}B zwvs=EX=p4T?tXz*`yB8P*S#ANkFRQ4T3X)T9Xjaay(+yq*pV&tsL^`HmNtv;Wp|yM)&vk$frOWeQgj4D{XkD%Iyn$ zk!n?o-5}+S}2Dm>B8Xi)M68Cd)#y)TGYCwBJ@o*b9L8 zwxq=QJa3t6U95=Q3W-`4IR{;gtx?|YuN$qhzxJev2BP)@r?3E0YDAaZBak8nICFkEApNLS+Lc zfAiXLS$RYhEG_!5+GP-(h811Ac)oz7JIB=+G!$fJ8q@~hC7DD0&5 z`pt7>b*iMZ=rcKmXh?qo)+9|j*nqiN>U(HDNP%t5aArJ_@z=~g&t~yUknw1H_VMuW zbSpIEU)v@%=oWFu2n2hV~@YtuO@_Z_)_3ER5tM zHC+b!`*5n?cAQt6~dHYS86=FT=O~zBt06;*ZK@uN`*yNCBbuhCzwwjH!juCfxX zOSZUm%#vN1SlHF2BO=)OH-pzjz-W@~Gk5R;IguX$pLsm=sstSk$} zOmYTs)|pGAplsPp7Vzo9Qnf@Rh2jO0@^Ze3tTe`L#0V%yc}=2EJh@;(xC9_Ti6r^y zN`p=SbwMd)3S`n&Z@AB#%TEE_TQu$h4up6aEvSP~Dil_WSfAh`3@s?%tvJx=goD}& zCbWo)Vh%02UYneVtrthM23gI-0CwE_Z()RobIwiv0>#sB&tZfe!k+l z-eiO7z+g~sYJA^v72Pcw^C8bHYYSk`A_wzJz*sW{%pT?rwmvVUOv*Ncd8Gi`>)O3sWI$aSubm#-WzDd${-Gs-CyVl7q;R z@6Q)nv^g$S!jrbxy_X>kg>kiYeERfh*HWq5__Hgpf~-dAeVn-gxb!eVU0n&vr0!JfiIR?!vju?yoZ^iP1q>%w$^=tMFp ziux>Kw?M;>6hYSg`qY_gPQ|9FzbrG8_!t4{*)2$2Q$2Lb6lkBp7E(SEH~^k!$7lhO zYe7Q;CxIOgH6no$(Izm8BQS}p_3L80wDjW_>EDYt4;o^!^v+CL6Qw>A9Z#Ul1#VRS zm{w4@C=;Gd3p~8L`P;hUyISuQnb zetxo%Zxg;M?&~Z%8k&}~;Y!79CTC&#m4@%l4=1i`p`}a~{4s zv7x4ep|GSH`;rDu54H(ou5XFat0u`}j|uatGo8x(1SyefFiMKeqOYff>3tBu%;lYQ zu&64T9iUt@pC`;~wTjg1z8{;Ln>)C+g@tYx(eDF+UFrfgQXa(WN5p1m`7;aHGiM@W z^5X1qRLVKYump+&F0aES0Hn`}h$C&FYW!8RA3mh!mmr@UA49dDuu7W`uSD<6q_bwK z-CTaZ{qv*ybT8-038-3Fn^l^W6$}b3hN{)o7DWamODrE=C2KQ@c&0p!2-ho~Obb*J zIiJ(A1iM03R<^ul!jY~M=yrn4)}5d~CxSX{9jAH19&@>ZoFXD3eS+6JqnK%s9Ze(F zKrmt^=nL)zlrzSeUQl|3N&f%>P9N$M⋙hHPq-#4ku_Y_n_<1aR~W<`YE*oy zR-Y#U7y80-)&x{IFj7=+cwIeCH^sBAfOTPv_$D0<2M73YOysv^_8;C>Ny@0p1Om6C zhYD@IsHo^@wc(=2m|w`3!TD2+vK9#_*d<#{)YsQ*CHT^DGJ>)+BjyxvYXFrpGoFPZ zH7~w@pNyH3+)04r3oJOWcXU@3Ggu99Ml;0yUcpm0zz1tZW+=;KMq~%O0FMoL#lTUo zm{Ept0~x6C<13DK*BbN!5g5*j5Bu;i5*H9(z&R<~9b?k6yW9#>u83 z7%*Ski-9!DSmi-DVl-nTVr+@9s4oC!Cx}n>)#Es`;#vGAAde z$I8gogc`m6$D$BX{}|utLP<$$Pq6e^j&q@8t?mK9#&Ox`YPFrGx}Xa05iV7Dlf!Kj zITO?moy5P=5=<2edhiFi5|qd+MW-w76Wi!bu*yhcvDsk~&zq434wq{(`}-vw8kCah zKn#N^EuBz5cq+3q0YWOtqqPr{ijLBDIzxSl_ET{Dv~hASPtqqSA$pjb*E)btwR{mm zGz2XUA@4KGI>MrfTfnJML&5VFX|rZdCWsJU3_U5+$S13OcJVrwfhU_BX)hnt@PX6U z;^Xa2LzG@nY>B{!h`a{jFe^hEbo>4eduV$DQ25EAS$rW2{F{gSKVOy*QE>*+dJvNw zfxpcDN`K$^{FJLD#_c`5uw&h__82}CPNs~UPXH)Z4dUo+ zk-zaK(Y~Ud2U?~$846ZxTtdTBkbK-T4zM`dIH@suWveZ|wCJQMp+81)4z8ZHJ-4u< zdMslM3hfu@NK!m`0>@z`lr1dxCLS=R9fLB5Bm%b5DNupjjgVn5rbx^zPP)adl1FgJ zV!3EVWB4@W^Jq!rH@lLZVtqG6jm2)IcSJ^cJVmkg2~-=VyxlRbfF1^~C6|$XiR9tx zx&|(TLC$!UTSAk88hbG|n<>Sr=c72$G`p58%FWVqMsDUwK5*r_n zlx8~ec7^+%e0+R$DGSvItChL;Z*q)r*ra?7GAinD(XHdsCxB{YSDMBWPh0_&iqL|O znpCreu7RqFO#5MH#b#dsD@D9AT_@N*Y9iXQ?vEC$m@qh1Fu2-a(av+A!P4Y5V)|wk zuApuGs`~Qx(Av8TkT3>Qd2R}P;DiiOy(6Ncrd^4oWa}@luQxkAn8g@e8Pe%@V?mXp z(Q**9wXuVPydX+b%i%*Gy#~%ADE!dyP4>{J8D*uihW!M)8XWDA%YHyj9l1~AFeCFe zI!+rc-*%BQ1y-sd*NWG>%SJN-6>)1I11#lmaT9@)m@^ZEygkv6)(R5D^d2fxaVdCoC6t7V{C;W{vhIkvd~4AJsF6~~wemLSfP4C>%$+Y2a?B5m*O0V zwWnU2q~a+E5h%MDH2}CH3zZ^(jL@Iolj(XaU3KC!@n&!6!^?ra430&FYJnpfi=bUe zX=zhE99kO))NZpM0RN*b#wA8JK`oTqm9c@vgnkKCdFfIXjlRG_> zOeKwWk{t~u%>uT+!10^x*ahw>rI4#s1K+QBM+Y{Pm@Id*c4x}HaHB{Z;G)j-cM!#z z)@)pZN?o%vslWX>-1mhdeuK6dtig7>jdV5qC~wA->(ec2L?prC+6g%F>@K;6D&92}g*wzdufNnx|5PSm^@OBt&rG{ixCm16b<3BPYuQcMSl6O zR{$uluF{E!zgtjdE{C>+Vgll+k}*1jIiJltzPwDR$}ruzn+iQF^=1#LQnXeqSy~z) zD!(}$}-YFRB)erjN2NQzq&l`v$u1Arijq86nc*r?bB zen%_p4*`E4#M7>SY>58I%_|UeG3T;%aRKL8&O!AG5S3;{1)?MQno_Q&vN9g>@ObR# zQx+QEH8u>%+;vyNneQh(zUptNd=DT?vWmt3|DO!bcZG0>aASEUGbrrUB9DhzmE|?$ J>SZiL{|oPC!?yqc literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/vsco/vsco_featured_logo.svg b/content/bn/case-studies/vsco/vsco_featured_logo.svg index e69de29bb2..e65dad8c52 100644 --- a/content/bn/case-studies/vsco/vsco_featured_logo.svg +++ b/content/bn/case-studies/vsco/vsco_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/wikimedia/wikimedia_featured.png b/content/bn/case-studies/wikimedia/wikimedia_featured.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7b1f89ac98490d8c64ec722375bbcae0d8ec9880 100644 GIT binary patch literal 21322 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/wikimedia/wikimedia_featured.svg b/content/bn/case-studies/wikimedia/wikimedia_featured.svg index e69de29bb2..5fa786aaa5 100644 --- a/content/bn/case-studies/wikimedia/wikimedia_featured.svg +++ b/content/bn/case-studies/wikimedia/wikimedia_featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/wikimedia/wikimedia_logo.png b/content/bn/case-studies/wikimedia/wikimedia_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3ad5b630342048494a4ce20f52ea46c310c431a5 100644 GIT binary patch literal 7875 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%0AwOxR>&A$MvnP6#U}J3!Na*I1 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 v{C>Il_bcB&Ts!|ukubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/wink/wink_logo.png b/content/bn/case-studies/wink/wink_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ef2ee30bf3a4662f2e673b2ef1d28c78fea3497e 100644 GIT binary patch literal 5623 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 E07V|h3jhEB literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/woorank/woorank_featured_logo.svg b/content/bn/case-studies/woorank/woorank_featured_logo.svg index e69de29bb2..50b64e9a9c 100644 --- a/content/bn/case-studies/woorank/woorank_featured_logo.svg +++ b/content/bn/case-studies/woorank/woorank_featured_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/workiva/workiva_featured_logo.png b/content/bn/case-studies/workiva/workiva_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9998b471049e5e561af77feca573b2eb4c77e95d 100644 GIT binary patch literal 5980 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.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/yahoo-japan/yahooJapan_logo.png b/content/bn/case-studies/yahoo-japan/yahooJapan_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3cbea3959895495270e0b389fb1a793e2f137352 100644 GIT binary patch literal 7266 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/yahoo-japan/yahoojapan_featured.svg b/content/bn/case-studies/yahoo-japan/yahoojapan_featured.svg new file mode 100644 index 0000000000..b0baa4a49e --- /dev/null +++ b/content/bn/case-studies/yahoo-japan/yahoojapan_featured.svg @@ -0,0 +1 @@ +kubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/ygrene/ygrene_featured_logo.png b/content/bn/case-studies/ygrene/ygrene_featured_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d0d69114784c8d418e8c0958229d301b3fe00505 100644 GIT binary patch literal 11569 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 literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/ygrene/ygrene_featured_logo.svg b/content/bn/case-studies/ygrene/ygrene_featured_logo.svg index 0e16b95004..0b0ab458fa 100644 --- a/content/bn/case-studies/ygrene/ygrene_featured_logo.svg +++ b/content/bn/case-studies/ygrene/ygrene_featured_logo.svg @@ -1,82 +1 @@ ---- -title: Ygrene Case Study -linkTitle: Ygrene -case_study_styles: true -cid: caseStudies -logo: ygrene_featured_logo.png -featured: true -weight: 48 -quote: > - We had to change some practices and code, and the way things were built, but we were able to get our main systems onto Kubernetes in a month or so, and then into production within two months. That's very fast for a finance company. - -new_case_study_styles: true -heading_background: /images/case-studies/ygrene/banner1.jpg -heading_title_logo: /images/ygrene_logo.png -subheading: > - Ygrene: Using Cloud Native to Bring Security and Scalability to the Finance Industry -case_study_details: - - Company: Ygrene - - Location: Petaluma, Calif. - - Industry: Clean energy financing ---- - -

          Challenge

          - -

          A PACE (Property Assessed Clean Energy) financing company, Ygrene has funded more than $1 billion in loans since 2010. In order to approve and process those loans, "We have lots of data sources that are being aggregated, and we also have lots of systems that need to churn on that data," says Ygrene Development Manager Austin Adams. The company was utilizing massive servers, and "we just reached the limit of being able to scale them vertically. We had a really unstable system that became overwhelmed with requests just for doing background data processing in real time. The performance the users saw was very poor. We needed a solution that wouldn't require us to make huge refactors to the code base." As a finance company, Ygrene also needed to ensure that they were shipping their applications securely.

          - -

          Solution

          - -

          Moving from an Engine Yard platform and Amazon Elastic Beanstalk, the Ygrene team embraced cloud native technologies and practices: Kubernetes to help scale out vertically and distribute workloads, Notary to put in build-time controls and get trust on the Docker images being used with third-party dependencies, and Fluentd for "observing every part of our stack," all running on Amazon EC2 Spot.

          - -

          Impact

          - -

          Before, deployments typically took three to four hours, and two or three months' worth of work would be deployed at low-traffic times every week or two weeks. Now, they take five minutes for Kubernetes, and an hour for the overall deploy with smoke testing. And "we're able to deploy three or four times a week, with just one week's or two days' worth of work," Adams says. "We're deploying during the work week, in the daytime and without any downtime. We had to ask for business approval to take the systems down, even in the middle of the night, because people could be doing loans. Now we can deploy, ship code, and migrate databases, all without taking the system down. The company gets new features without worrying that some business will be lost or delayed." Additionally, by using the kops project, Ygrene can now run its Kubernetes clusters with AWS EC2 Spot, at a tenth of the previous cost. These cloud native technologies have "changed the game for scalability, observability, and security—we're adding new data sources that are very secure," says Adams. "Without Kubernetes, Notary, and Fluentd, we couldn't tell our investors and team members that we knew what was going on."

          - -{{< case-studies/quote author="Austin Adams, Development Manager, Ygrene Energy Fund" >}} -"CNCF projects are helping Ygrene determine the security and observability standards for the entire PACE industry. We're an emerging finance industry, and without these projects, especially Kubernetes, we couldn't be the industry leader that we are today." -{{< /case-studies/quote >}} - -{{< case-studies/lead >}} -In less than a decade, Ygrene has funded more than $1 billion in loans for renewable energy projects. -{{< /case-studies/lead >}} - -

          A PACE (Property Assessed Clean Energy) financing company, "We take the equity in a home or a commercial building, and use it to finance property improvements for anything that saves electricity, produces electricity, saves water, or reduces carbon emissions," says Development Manager Austin Adams.

          - -

          In order to approve those loans, the company processes an enormous amount of underwriting data. "We have tons of different points that we have to validate about the property, about the company, or about the person," Adams says. "So we have lots of data sources that are being aggregated, and we also have lots of systems that need to churn on that data in real time."

          - -

          By 2017, deployments and scalability had become pain points. The company was utilizing massive servers, and "we just reached the limit of being able to scale them vertically," he says. Migrating to AWS Elastic Beanstalk didn't solve the problem: "The Scala services needed a lot of data from the main Ruby on Rails services and from different vendors, so they were asking for information from our Ruby services at a rate that those services couldn't handle. We had lots of configuration misses with Elastic Beanstalk as well. It just came to a head, and we realized we had a really unstable system."

          - -{{< case-studies/quote - image="/images/case-studies/ygrene/banner3.jpg" - author="Austin Adams, Development Manager, Ygrene Energy Fund" ->}} -"CNCF has been an amazing incubator for so many projects. Now we look at its webpage regularly to find out if there are any new, awesome, high-quality projects we can implement into our stack. It's actually become a hub for us for knowing what software we need to be looking at to make our systems more secure or more scalable." -{{< /case-studies/quote >}} - -

          Adams along with the rest of the team set out to find a solution that would be transformational, but "wouldn't require us to make huge refactors to the code base," he says. And as a finance company, Ygrene needed security as much as scalability. They found the answer by embracing cloud native technologies: Kubernetes to help scale out vertically and distribute workloads, Notary to achieve reliable security at every level, and Fluentd for observability. "Kubernetes was where the community was going, and we wanted to be future proof," says Adams.

          - -

          With Kubernetes, the team was able to quickly containerize the Ygrene application with Docker. "We had to change some practices and code, and the way things were built," Adams says, "but we were able to get our main systems onto Kubernetes in a month or so, and then into production within two months. That's very fast for a finance company."

          - -

          How? Cloud native has "changed the game for scalability, observability, and security—we're adding new data sources that are very secure," says Adams. "Without Kubernetes, Notary, and Fluentd, we couldn't tell our investors and team members that we knew what was going on."

          - -

          Notary, in particular, "has been a godsend," says Adams. "We need to know that our attack surface on third-party dependencies is low, or at least managed. We use it as a trust system and we also use it as a separation, so production images are signed by Notary, but some development images we don't sign. That is to ensure that they can't get into the production cluster. We've been using it in the test cluster to feel more secure about our builds."

          - -{{< case-studies/quote image="/images/case-studies/ygrene/banner4.jpg">}} -"We had to change some practices and code, and the way things were built," Adams says, "but we were able to get our main systems onto Kubernetes in a month or so, and then into production within two months. That's very fast for a finance company." -{{< /case-studies/quote >}} - -

          By using the kops project, Ygrene was able to move from Elastic Beanstalk to running its Kubernetes clusters on AWS EC2 Spot, at a tenth of the previous cost. "In order to scale before, we would need to up our instance sizes, incurring high cost for low value," says Adams. "Now with Kubernetes and kops, we are able to scale horizontally on Spot with multiple instance groups."

          - -

          That also helped them mitigate the risk that comes with running in the public cloud. "We figured out, essentially, that if we're able to select instance classes using EC2 Spot that had an extremely low likelihood of interruption and zero history of interruption, and we're willing to pay a price high enough, that we could virtually get the same guarantee using Kubernetes because we have enough nodes," says Software Engineer Zach Arnold, who led the migration to Kubernetes. "Now that we've re-architected these pieces of the application to not live on the same server, we can push out to many different servers and have a more stable deployment."

          - -

          As a result, the team can now ship code any time of day. "That was risky because it could bring down your whole loan management software with it," says Arnold. "But we now can deploy safely and securely during the day."

          - -{{< case-studies/quote >}} -"In order to scale before, we would need to up our instance sizes, incurring high cost for low value," says Adams. "Now with Kubernetes and kops, we are able to scale horizontally on Spot with multiple instance groups." -{{< /case-studies/quote >}} - -

          Before, deployments typically took three to four hours, and two or three months' worth of work would be deployed at low-traffic times every week or two weeks. Now, they take five minutes for Kubernetes, and an hour for an overall deploy with smoke testing. And "we're able to deploy three or four times a week, with just one week's or two days' worth of work," Adams says. "We're deploying during the work week, in the daytime and without any downtime. We had to ask for business approval to take the systems down for 30 minutes to an hour, even in the middle of the night, because people could be doing loans. Now we can deploy, ship code, and migrate databases, all without taking the system down. The company gets new features without worrying that some business will be lost or delayed."

          - -

          Cloud native also affected how Ygrene's 50+ developers and contractors work. Adams and Arnold spent considerable time "teaching people to think distributed out of the box," says Arnold. "We ended up picking what we call the Four S's of Shipping: safely, securely, stably, and speedily." (For more on the security piece of it, see their article on their "continuous hacking" strategy.) As for the engineers, says Adams, "they have been able to advance as their software has advanced. I think that at the end of the day, the developers feel better about what they're doing, and they also feel more connected to the modern software development community."

          - -

          Looking ahead, Adams is excited to explore more CNCF projects, including SPIFFE and SPIRE. "CNCF has been an amazing incubator for so many projects," he says. "Now we look at its webpage regularly to find out if there are any new, awesome, high-quality projects we can implement into our stack. It's actually become a hub for us for knowing what software we need to be looking at to make our systems more secure or more scalable."

          \ No newline at end of file +kubernetes.io-logos2 \ No newline at end of file diff --git a/content/bn/case-studies/zalando/zalando_feature_logo.png b/content/bn/case-studies/zalando/zalando_feature_logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ba6251050d15abb523d009ad79df06cc1fa0779e 100644 GIT binary patch literal 7643 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 R?Uet&{~zE#M<{wb`#*xsh{XT^ literal 0 HcmV?d00001 diff --git a/content/bn/case-studies/zalando/zalando_feature_logo.svg b/content/bn/case-studies/zalando/zalando_feature_logo.svg index e69de29bb2..875d10c030 100644 --- a/content/bn/case-studies/zalando/zalando_feature_logo.svg +++ b/content/bn/case-studies/zalando/zalando_feature_logo.svg @@ -0,0 +1 @@ +kubernetes.io-logos2 \ No newline at end of file From 633b8c47504a41e337d39389c0e8d535cd5868df Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 14:51:36 +0600 Subject: [PATCH 0928/1086] Update bn.toml --- data/i18n/bn/bn.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/i18n/bn/bn.toml b/data/i18n/bn/bn.toml index acf07d7971..ace959c2d9 100644 --- a/data/i18n/bn/bn.toml +++ b/data/i18n/bn/bn.toml @@ -358,7 +358,7 @@ a further notice period. The new package repositories provide downloads for Kube other = "দ্বারা" [main_cncf_project] -other = """আমরা একটি CNCF গ্রাডুয়েটেড প্রকল্প

          """ +other = """আমরা একটি CNCF গ্রাজুয়েটেড প্রকল্প

          """ [main_community_explore] other = "কমিউনিটি এক্সপ্লোর করুন" From 8850ea5aef331ad9336e6546b5396b44679fe341 Mon Sep 17 00:00:00 2001 From: tamilselvan1102 Date: Wed, 8 May 2024 16:31:35 +0530 Subject: [PATCH 0929/1086] Node Lease objects link url is updated. --- content/en/docs/concepts/architecture/leases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/architecture/leases.md b/content/en/docs/concepts/architecture/leases.md index 065a4f944f..2b4e94db91 100644 --- a/content/en/docs/concepts/architecture/leases.md +++ b/content/en/docs/concepts/architecture/leases.md @@ -25,7 +25,7 @@ namespace. Under the hood, every kubelet heartbeat is an **update** request to t the `spec.renewTime` field for the Lease. The Kubernetes control plane uses the time stamp of this field to determine the availability of this `Node`. -See [Node Lease objects](/docs/concepts/architecture/nodes/#heartbeats) for more details. +See [Node Lease objects](/docs/concepts/architecture/nodes/#node-heartbeats) for more details. ## Leader election From 4ff5b2742715077f6309856c4c2ea0a8802cf957 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Tue, 7 May 2024 22:03:28 +0800 Subject: [PATCH 0930/1086] [zh-cn] sync ingress-minikube.md Signed-off-by: xin.li --- .../ingress-minikube.md | 248 ++++++++++++++++-- 1 file changed, 233 insertions(+), 15 deletions(-) diff --git a/content/zh-cn/docs/tasks/access-application-cluster/ingress-minikube.md b/content/zh-cn/docs/tasks/access-application-cluster/ingress-minikube.md index 1fc73f4217..5cdbf67760 100644 --- a/content/zh-cn/docs/tasks/access-application-cluster/ingress-minikube.md +++ b/content/zh-cn/docs/tasks/access-application-cluster/ingress-minikube.md @@ -38,6 +38,18 @@ Visit [Install tools](/docs/tasks/tools/#minikube) to learn how to install `mini 本教程假设你正在使用 `minikube` 运行一个本地 Kubernetes 集群。 参阅[安装工具](/zh-cn/docs/tasks/tools/#minikube)了解如何安装 `minikube`。 +{{< note >}} + +本教程使用需要 AMD64 架构的容器。 +如果你在其他 CPU 架构的计算机上使用 minikube,可以尝试使用带有可以模拟 AMD64 的驱动程序的 minikube。 +例如,Docker Desktop 驱动程序可以执行此操作。 +{{< /note >}} + {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + 验证 Deployment 是否处于 Ready 状态: + + ```shell + kubectl get deployment web + ``` + + 输出应类似于: + + ```none + NAME READY UP-TO-DATE AVAILABLE AGE + web 1/1 1 1 53s + ``` + @@ -157,9 +187,14 @@ If you haven't already set up a cluster locally, run `minikube start` to create ``` -4. 使用节点端口信息访问服务: +4. 使用节点端口信息访问服务,使用 + [`minikube service`](https://minikube.sigs.k8s.io/docs/handbook/accessing/#using-minikube-service-with-tunnel) 命令。 + 请按照适合你平台的说明进行操作: + + {{< tabs name="minikube_service" >}} + {{% tab name="Linux" %}} ```shell minikube service web --url @@ -174,10 +209,49 @@ If you haven't already set up a cluster locally, run `minikube start` to create http://172.17.0.15:31637 ``` + + 调用上一步输出中获取的 URL: + ```shell curl http://172.17.0.15:31637 ``` + {{% /tab %}} + {{% tab name="MacOS" %}} + + + ```shell + # 该命令必须在单独的终端中运行。 + minikube service web --url + ``` + + + 输出类似于: + + ```none + http://127.0.0.1:62445 + ! Because you are using a Docker driver on darwin, the terminal needs to be open to run it. + ``` + + + 从不同的终端调用在上一步的输出中获取的 URL: + + ```shell + curl http://127.0.0.1:62445 + ``` + + {{% /tab %}} + {{< /tabs >}} +
          + @@ -200,13 +274,13 @@ If you haven't already set up a cluster locally, run `minikube start` to create ## Create an Ingress The following manifest defines an Ingress that sends traffic to your Service via -`hello-world.info`. +`hello-world.example`. 1. Create `example-ingress.yaml` from the following file: --> ## 创建一个 Ingress {#create-ingress} -下面是一个定义 Ingress 的配置文件,负责通过 `hello-world.info` +下面是一个定义 Ingress 的配置文件,负责通过 `hello-world.example` 将请求转发到你的服务。 1. 根据下面的 YAML 创建文件 `example-ingress.yaml`: @@ -253,19 +327,67 @@ The following manifest defines an Ingress that sends traffic to your Service via 接下来你将会在 `ADDRESS` 列中看到 IPv4 地址,例如: ```none - NAME CLASS HOSTS ADDRESS PORTS AGE - example-ingress hello-world.info 172.17.0.15 80 38s + NAME CLASS HOSTS ADDRESS PORTS AGE + example-ingress nginx hello-world.example 172.17.0.15 80 38s ``` -4. 验证 Ingress 控制器能够转发请求流量: +4. 验证 Ingress 控制器能够转发请求流量,按照适用于所属平台的说明进行操作: + + {{< note >}} + + 如果在 MacOS(Darwin)上使用 Docker 驱动程序,网络会受到限制,并且无法直接访问节点 IP。 + 要让 Ingress 正常工作,你需要打开一个新终端并运行 `minikube tunnel`。 + 此操作需要 `sudo` 权限,因此请在出现提示时提供密码。 + {{< /note >}} + + {{< tabs name="ingress" >}} + {{% tab name="Linux" %}} ```shell - curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info + curl --resolve "hello-world.example:80:$( minikube ip )" -i http://hello-world.example ``` + {{% /tab %}} + {{% tab name="MacOS" %}} + + ```shell + minikube tunnel + ``` + + + 输出类似于: + + ```none + Tunnel successfully started + + NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ... + + The service/ingress example-ingress requires privileged ports to be exposed: [80 443] + sudo permission will be asked for it. + Starting tunnel for service example-ingress. + ``` + + + 从新终端中调用以下命令: + + ```shell + curl --resolve "hello-world.example:80:127.0.0.1" -i http://hello-world.example + ``` + + {{% /tab %}} + {{< /tabs >}} +
          + @@ -307,10 +429,12 @@ The following manifest defines an Ingress that sends traffic to your Service via ``` {{< note >}} + - 更改 IP 地址以匹配 `minikube ip` 的输出。 + +更改 IP 地址以匹配 `minikube ip` 的输出。 {{< /note >}} + 验证 Deployment 是否处于 Ready 状态: + + ```shell + kubectl get deployment web2 + ``` + + + 输出应类似于: + + ```none + NAME READY UP-TO-DATE AVAILABLE AGE + web2 1/1 1 1 16s + ``` + @@ -407,10 +550,48 @@ The following manifest defines an Ingress that sends traffic to your Service via 1. 访问 Hello World 应用的第一个版本: + {{< tabs name="ingress2-v1" >}} + {{% tab name="Linux" %}} + ```shell - curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info + curl --resolve "hello-world.example:80:$( minikube ip )" -i http://hello-world.example ``` + {{% /tab %}} + {{% tab name="MacOS" %}} + + ```shell + minikube tunnel + ``` + + + 输出类似于: + + ```none + Tunnel successfully started + + NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ... + + The service/ingress example-ingress requires privileged ports to be exposed: [80 443] + sudo permission will be asked for it. + Starting tunnel for service example-ingress. + ``` + + + 从新终端中调用以下命令: + + ```shell + curl --resolve "hello-world.example:80:127.0.0.1" -i http://hello-world.example + ``` + + {{% /tab %}} + {{< /tabs >}} +
          + @@ -427,10 +608,47 @@ The following manifest defines an Ingress that sends traffic to your Service via --> 2. 访问 Hello World 应用的第二个版本: + {{< tabs name="ingress2-v2" >}} + {{% tab name="Linux" %}} + ```shell - curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info/v2 + curl --resolve "hello-world.example:80:$( minikube ip )" -i http://hello-world.example/v2 ``` + {{% /tab %}} + {{% tab name="MacOS" %}} + + ```shell + minikube tunnel + ``` + + + 输出类似于: + + ```none + Tunnel successfully started + + NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ... + + The service/ingress example-ingress requires privileged ports to be exposed: [80 443] + sudo permission will be asked for it. + Starting tunnel for service example-ingress. + ``` + + + 从新终端中调用以下命令: + + ```shell + curl --resolve "hello-world.example:80:127.0.0.1" -i http://hello-world.example/v2 + ``` + + {{% /tab %}} + {{< /tabs >}} + @@ -444,11 +662,11 @@ The following manifest defines an Ingress that sends traffic to your Service via {{< note >}} 如果你执行了更新 `/etc/hosts` 的可选步骤,你也可以从你的浏览器中访问 - `hello-world.info` 和 `hello-world.info/v2`。 + `hello-world.example` 和 `hello-world.example/v2`。 {{< /note >}} ## {{% heading "whatsnext" %}} From 7de5333ac5304d3b06c6c172f59fff4f35d87bf6 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 20:21:08 +0600 Subject: [PATCH 0931/1086] Update _index.html --- content/bn/_index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/_index.html b/content/bn/_index.html index 27ce14aab8..91d86e6472 100644 --- a/content/bn/_index.html +++ b/content/bn/_index.html @@ -12,7 +12,7 @@ sitemap: {{% blocks/feature image="flower" %}} [কুবারনেটিস]({{< relref "/docs/concepts/overview/" >}}), K8s নামেও পরিচিত, কনটেইনারাইজড অ্যাপ্লিকেশনের স্বয়ংক্রিয় স্থাপনা, স্কেলিং এবং পরিচালনার জন্য একটি ওপেন-সোর্স সিস্টেম। -এটি সহজ ব্যবস্থাপনা এবং আবিষ্কারের জন্য লজিক্যাল ইউনিটে একটি অ্যাপ্লিকেশন তৈরি করে এমন কন্টেইনারগুলিকে গোষ্ঠীভুক্ত করে। কুবারনেটিস Google-এ প্রোডাকশন ওয়ার্কলোড চালানোর 15 বছরের অভিজ্ঞতার ভিত্তিতে তৈরি করে, কমিউনিটির সেরা ধারণা এবং অনুশীলনের সাথে মিলিত ভাবে। +এটি সহজ ব্যবস্থাপনা এবং আবিষ্কারের জন্য লজিক্যাল ইউনিটে একটি অ্যাপ্লিকেশন তৈরি করে এমন কন্টেইনারগুলিকে গোষ্ঠীভুক্ত করে। কুবারনেটিস [Google-এ প্রোডাকশন ওয়ার্কলোড চালানোর 15 বছরের অভিজ্ঞতার ভিত্তিতে](http://queue.acm.org/detail.cfm?id=2898444) তৈরি করে, কমিউনিটির সেরা ধারণা এবং অনুশীলনের সাথে মিলিত ভাবে। {{% /blocks/feature %}} {{% blocks/feature image="scalable" %}} @@ -62,4 +62,4 @@ Google সপ্তাহে বিলিয়ন কন্টেইনার {{< blocks/kubernetes-features >}} -{{< blocks/case-studies >}} \ No newline at end of file +{{< blocks/case-studies >}} From ce4f36a27a58ec1e8f4bde9e6df8101dcf1c0e60 Mon Sep 17 00:00:00 2001 From: Lorenz Barnkow <13865903+lbarnkow@users.noreply.github.com> Date: Wed, 8 May 2024 16:23:30 +0200 Subject: [PATCH 0932/1086] fix superfluous white space --- content/en/docs/concepts/workloads/pods/disruptions.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/content/en/docs/concepts/workloads/pods/disruptions.md b/content/en/docs/concepts/workloads/pods/disruptions.md index 83befbe71d..e2dd6e973d 100644 --- a/content/en/docs/concepts/workloads/pods/disruptions.md +++ b/content/en/docs/concepts/workloads/pods/disruptions.md @@ -49,8 +49,7 @@ Cluster administrator actions include: - [Draining a node](/docs/tasks/administer-cluster/safely-drain-node/) for repair or upgrade. - Draining a node from a cluster to scale the cluster down (learn about -[Cluster Autoscaling](https://github.com/kubernetes/autoscaler/#readme) -). +[Cluster Autoscaling](https://github.com/kubernetes/autoscaler/#readme)). - Removing a pod from a node to permit something else to fit on that node. These actions might be taken directly by the cluster administrator, or by automation From 26b913b85773b482d61a186c530f57655b6d6ae0 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 20:26:40 +0600 Subject: [PATCH 0933/1086] Update _index.md --- content/bn/docs/setup/learning-environment/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/setup/learning-environment/_index.md b/content/bn/docs/setup/learning-environment/_index.md index 806bf7ed74..6e5a8a25b6 100644 --- a/content/bn/docs/setup/learning-environment/_index.md +++ b/content/bn/docs/setup/learning-environment/_index.md @@ -1,5 +1,5 @@ --- -title: শিক্ষার পরিবেশ +title: লার্নিং এনভায়রনমেন্ট weight: 20 --- From 816ece05064d8f10336bc77eecc362492e9ac12d Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 20:27:05 +0600 Subject: [PATCH 0934/1086] Update _index.md --- content/bn/docs/setup/production-environment/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/setup/production-environment/_index.md b/content/bn/docs/setup/production-environment/_index.md index e072e1c2b7..3453b38a73 100644 --- a/content/bn/docs/setup/production-environment/_index.md +++ b/content/bn/docs/setup/production-environment/_index.md @@ -1,5 +1,5 @@ --- -title: "প্রোডাকশন এনভায়রনমেন্ট (Production Environment)" +title: "প্রোডাকশন এনভায়রনমেন্ট " description: একটি প্রোডাকশন-কোয়ালিটির কুবারনেটিস ক্লাস্টার তৈরি করুন weight: 30 no_list: true From d3a9f22e1aed1b471575057ce82c111a9dd78658 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 20:29:07 +0600 Subject: [PATCH 0935/1086] Update _index.md --- content/bn/docs/setup/production-environment/tools/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/setup/production-environment/tools/_index.md b/content/bn/docs/setup/production-environment/tools/_index.md index c5a1a4dc8e..d274fb6da7 100644 --- a/content/bn/docs/setup/production-environment/tools/_index.md +++ b/content/bn/docs/setup/production-environment/tools/_index.md @@ -1,5 +1,5 @@ --- -title: স্থাপনার সরঞ্জাম সহ কুবারনেটিস ইনস্টল করা +title: ডিপ্লয়মেন্টের টুল সহ কুবারনেটিস ইনস্টল করা weight: 30 no_list: true --- @@ -19,4 +19,4 @@ no_list: true [ইনভেন্টরি](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/ansible.md#inventory), প্রভিশনিং টুলস, এবং জেনেরিক ওস/কুবারনেটিস ক্লাস্টার কনফিগারেশন ব্যবস্থাপনা কাজের জন্য ডোমেন জ্ঞান । আপনি স্ল্যাক চ্যানেলে সম্প্রদায়ের সাথে যোগাযোগ করতে পারেন - [#kubespray](https://kubernetes.slack.com/messages/kubespray/)। \ No newline at end of file + [#kubespray](https://kubernetes.slack.com/messages/kubespray/)। From f680ffbdc1db475967d9365f6632ff72ab3296cc Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 20:39:48 +0600 Subject: [PATCH 0936/1086] Update turnkey-solutions.md --- .../bn/docs/setup/production-environment/turnkey-solutions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/setup/production-environment/turnkey-solutions.md b/content/bn/docs/setup/production-environment/turnkey-solutions.md index 7e8ff407f2..310c1abe57 100644 --- a/content/bn/docs/setup/production-environment/turnkey-solutions.md +++ b/content/bn/docs/setup/production-environment/turnkey-solutions.md @@ -1,5 +1,5 @@ --- -title: টার্নকি ক্লাউড সলিউশন(Turnkey Cloud Solutions) +title: Turnkey ক্লাউড সলিউশন content_type: concept weight: 40 --- @@ -11,4 +11,4 @@ weight: 40 -{{< cncf-landscape helpers=true category="certified-kubernetes-hosted" >}} +{{< cncf-landscape helpers=true category="platform--certified-kubernetes-hosted" >}} From ca9f7b07e59b5957992a868dafe28e33b190a60a Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 20:53:46 +0600 Subject: [PATCH 0937/1086] Update _index.md --- content/bn/docs/concepts/architecture/_index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/bn/docs/concepts/architecture/_index.md b/content/bn/docs/concepts/architecture/_index.md index 5fcba1b640..221d7aeacf 100644 --- a/content/bn/docs/concepts/architecture/_index.md +++ b/content/bn/docs/concepts/architecture/_index.md @@ -1,8 +1,8 @@ --- -title: "ক্লাস্টার স্থাপত্য(Cluster Architecture)" +title: "ক্লাস্টার আর্কিটেকচার" weight: 30 description: > - কুবারনেটিসের পিছনে স্থাপত্যের ধারণা । + কুবারনেটিসের পিছনে আর্কিটেকচারের ধারণা । --- -{{< figure src="/images/docs/kubernetes-cluster-architecture.svg" alt="কুবারনেটিসের উপাদান" caption="কুবারনেটিস ক্লাস্টার স্থাপত্য" class="diagram-large" >}} +{{< figure src="/images/docs/kubernetes-cluster-architecture.svg" alt="কুবারনেটিসের উপাদান" caption="কুবারনেটিস ক্লাস্টার আর্কিটেকচার" class="diagram-large" >}} From afb7a21b80e8283f6c06bed3f501f9aeae1addc8 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 20:56:14 +0600 Subject: [PATCH 0938/1086] Update _index.md --- content/bn/docs/concepts/workloads/pods/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/concepts/workloads/pods/_index.md b/content/bn/docs/concepts/workloads/pods/_index.md index 748f9fbc68..a64e891ba7 100644 --- a/content/bn/docs/concepts/workloads/pods/_index.md +++ b/content/bn/docs/concepts/workloads/pods/_index.md @@ -1,5 +1,5 @@ --- -title: Pods +title: পড content_type: concept weight: 10 no_list: true @@ -7,7 +7,7 @@ no_list: true -_পড_ হলো কম্পিউটিংয়ের ক্ষুদ্রতম স্থাপনযোগ্য একক যা আপনি কুবারনেটিসে তৈরি এবং পরিচালনা করতে পারেন। +_পড_ হলো কম্পিউটিংয়ের ক্ষুদ্রতম স্থাপনযোগ্য একক যা আপনি কুবারনেটিসে তৈরি এবং পরিচালনা করতে পারেন। একটি পড (তিমি বা মটর শুঁটির একটি পডের মতো) এক বা একাধিক {{< glossary_tooltip text="কন্টেইনার" term_id="container" >}} এর একটি গ্রুপ , শেয়ার্ড স্টোরেজ এবং নেটওয়ার্ক রিসোর্স গুলির সাথে, এবং কন্টেইনার কীভাবে চালানো যায় তার জন্য একটি স্পেসিফিকেশন। একটি পডের সামগ্রী সর্বদা সহ-অবস্থিত এবং From 9e9ab9064bf5f209aacc3eb3ececd1d19cc35d68 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 20:58:57 +0600 Subject: [PATCH 0939/1086] Update sidecar-containers.md --- content/bn/docs/concepts/workloads/pods/sidecar-containers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/workloads/pods/sidecar-containers.md b/content/bn/docs/concepts/workloads/pods/sidecar-containers.md index b0c94b750d..17a94f0d48 100644 --- a/content/bn/docs/concepts/workloads/pods/sidecar-containers.md +++ b/content/bn/docs/concepts/workloads/pods/sidecar-containers.md @@ -1,5 +1,5 @@ --- -title: সাইডকার কন্টেইনার (Sidecar Containers) +title: সাইডকার কন্টেইনার content_type: concept weight: 50 --- From eac03122d3d5f00c289ad31ab58b97949da0514d Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Wed, 8 May 2024 21:09:05 +0600 Subject: [PATCH 0940/1086] Update _index.md --- .../bn/docs/concepts/services-networking/_index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/content/bn/docs/concepts/services-networking/_index.md b/content/bn/docs/concepts/services-networking/_index.md index 503f22b729..ebb1e3e374 100644 --- a/content/bn/docs/concepts/services-networking/_index.md +++ b/content/bn/docs/concepts/services-networking/_index.md @@ -1,5 +1,5 @@ --- -title: "পরিষেবা, লোড ব্যালেন্সিং এবং নেটওয়ার্কিং" +title: "সার্ভিস, লোড ব্যালেন্সিং এবং নেটওয়ার্কিং" weight: 60 description: > কুবারনেটিসে নেটওয়ার্কিংয়ের পিছনে থাকা ধারণা এবং রিসোর্স। @@ -11,7 +11,7 @@ description: > এর অর্থ হলো আপনাকে `পডের` মধ্যে স্পষ্টভাবে লিঙ্ক তৈরি করার দরকার নেই এবং পোর্টগুলো হোস্ট করার জন্য আপনাকে ম্যাপিং কন্টেইনার পোর্টগুলোর সাথে মোকাবিলা করতে হবে না। এটি একটি পরিষ্কার, পিছনের-সামঞ্জস্যপূর্ণ মডেল (backwards-compatible model) তৈরি করে -যেখানে পোর্ট বরাদ্দকরণ, নামকরণ, পরিষেবা আবিষ্কার (service discovery), [লোড ব্যালেন্সিং](/bn/docs/concepts/services-networking/ingress/#load-balancing), অ্যাপ্লিকেশন কনফিগারেশন এবং মাইগ্রেশনের +যেখানে পোর্ট বরাদ্দকরণ, নামকরণ, সার্ভিস আবিষ্কার (service discovery), [লোড ব্যালেন্সিং](/bn/docs/concepts/services-networking/ingress/#load-balancing), অ্যাপ্লিকেশন কনফিগারেশন এবং মাইগ্রেশনের দৃষ্টিকোণ থেকে `পডগুলোকে` অনেকটা ভিএম (Virtual Machine) বা ফিজিক্যাল হোস্টের মতোই বিবেচনা করা যেতে পারে। @@ -49,17 +49,17 @@ description: > কুবারনেটিস নেটওয়ার্কিং চারটি উদ্বেগের সমাধান করে: - লুপব্যাকের মাধ্যমে একটি পডের মধ্যে কন্টেইনার [যোগাযোগের জন্য নেটওয়ার্কিং ব্যবহার করে](/bn/docs/concepts/services-networking/dns-pod-service/) । - ক্লাস্টার নেটওয়ার্কিং বিভিন্ন পডের মধ্যে যোগাযোগ প্রদান করে। -- [পরিষেবা](/bn/docs/concepts/services-networking/service/) API আপনাকে আপনার ক্লাস্টারের +- [সার্ভিস](/bn/docs/concepts/services-networking/service/) API আপনাকে আপনার ক্লাস্টারের বাইরে থেকে পৌঁছানোর জন্য [পডসে চলমান একটি অ্যাপ্লিকেশন প্রকাশ](/bn/docs/tutorials/services/connect-applications-service/) করতে দেয় । - [ইনগ্রেস](/bn/docs/concepts/services-networking/ingress/) বিশেষত HTTP অ্যাপ্লিকেশন, ওয়েবসাইট এবং এপিআই প্রকাশ করার জন্য অতিরিক্ত কার্যকারিতা প্রদান করে। - [গেটওয়ে API](/bn/docs/concepts/services-networking/gateway/) হলো একটি {{}} - যেটি মডেলিং পরিষেবা নেটওয়ার্কিংয়ের জন্য API ধরণের একটি অভিব্যক্তিপূর্ণ (expressive), এক্সটেনসিবল, এবং ভূমিকা-ভিত্তিক পরিবার প্রদান করে। -- এছাড়া আপনি [শুধুমাত্র আপনার ক্লাস্টারের মধ্যে ব্যবহারের জন্য পরিষেবাগুলো প্রকাশ করতে](/bn/docs/concepts/services-networking/service-traffic-policy/) - পরিষেবাগুলো ব্যবহার করতে পারেন । + যেটি মডেলিং সার্ভিস নেটওয়ার্কিংয়ের জন্য API ধরণের একটি অভিব্যক্তিপূর্ণ (expressive), এক্সটেনসিবল, এবং ভূমিকা-ভিত্তিক পরিবার প্রদান করে। +- এছাড়া আপনি [শুধুমাত্র আপনার ক্লাস্টারের মধ্যে ব্যবহারের জন্য সার্ভিসগুলো প্রকাশ করতে](/bn/docs/concepts/services-networking/service-traffic-policy/) + সার্ভিসগুলো ব্যবহার করতে পারেন । [কানেক্টিং অ্যাপ্লিকেশানস উইথ সার্ভিস](/bn/docs/tutorials/services/connect-applications-service/) টিউটোরিয়াল আপনাকে একটি হ্যান্ডস-অন উদাহরণ সহ পরিষেবা এবং কুবারনেটিস নেটওয়ার্কিং সম্পর্কে শিখতে দেয়। [ক্লাস্টার নেটওয়ার্কিং](/bn/docs/concepts/cluster-administration/networking/) ব্যাখ্যা করে -কিভাবে আপনার ক্লাস্টারের জন্য নেটওয়ার্কিং সেট আপ করতে হয় এবং এর সাথে জড়িত প্রযুক্তিগুলোর একটি ওভারভিউ প্রদান করে। \ No newline at end of file +কিভাবে আপনার ক্লাস্টারের জন্য নেটওয়ার্কিং সেট আপ করতে হয় এবং এর সাথে জড়িত প্রযুক্তিগুলোর একটি ওভারভিউ প্রদান করে। From 87a912068c166ae34cffb2bb7153cc93171c86be Mon Sep 17 00:00:00 2001 From: Nilekh Chaudhari <1626598+nilekhc@users.noreply.github.com> Date: Wed, 1 May 2024 21:19:03 +0000 Subject: [PATCH 0941/1086] docs: updates automatics reloading behaviour. Signed-off-by: Nilekh Chaudhari <1626598+nilekhc@users.noreply.github.com> --- content/en/docs/tasks/administer-cluster/encrypt-data.md | 7 ++++++- content/en/docs/tasks/administer-cluster/kms-provider.md | 5 ++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/content/en/docs/tasks/administer-cluster/encrypt-data.md b/content/en/docs/tasks/administer-cluster/encrypt-data.md index 78d92d7fbc..8542554ce1 100644 --- a/content/en/docs/tasks/administer-cluster/encrypt-data.md +++ b/content/en/docs/tasks/administer-cluster/encrypt-data.md @@ -710,7 +710,12 @@ allows you to change the keys for encryption at rest without restarting the API server. To allow automatic reloading, configure the API server to run with: -`--encryption-provider-config-automatic-reload=true` +`--encryption-provider-config-automatic-reload=true`. +When enabled, file changes are polled every minute to observe the modifications. +The `apiserver_encryption_config_controller_automatic_reload_last_timestamp_seconds` +metric identifies when the new config becomes effective. This allows +encryption keys to be rotated without restarting the API server. + ## {{% heading "whatsnext" %}} diff --git a/content/en/docs/tasks/administer-cluster/kms-provider.md b/content/en/docs/tasks/administer-cluster/kms-provider.md index 1ea101c161..7111aacd66 100644 --- a/content/en/docs/tasks/administer-cluster/kms-provider.md +++ b/content/en/docs/tasks/administer-cluster/kms-provider.md @@ -264,7 +264,10 @@ defined in a CustomResourceDefinition, your cluster must be running Kubernetes v 1. Set the `--encryption-provider-config` flag on the kube-apiserver to point to the location of the configuration file. -1. `--encryption-provider-config-automatic-reload` boolean argument determines if the file set by `--encryption-provider-config` should be automatically reloaded if the disk contents change. This enables key rotation without API server restarts. +1. `--encryption-provider-config-automatic-reload` boolean argument + determines if the file set by `--encryption-provider-config` should be + [automatically reloaded](/docs/tasks/administer-cluster/encrypt-data/#configure-automatic-reloading) + if the disk contents change. 1. Restart your API server. From 101bd4b01f584b837d91fb7e92726723c942a645 Mon Sep 17 00:00:00 2001 From: Mo Khan Date: Wed, 8 May 2024 14:33:18 -0400 Subject: [PATCH 0942/1086] Fix incorrect /security alias --- content/ru/docs/reference/issues-security/security.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/ru/docs/reference/issues-security/security.md b/content/ru/docs/reference/issues-security/security.md index b114f04918..63242e0e76 100644 --- a/content/ru/docs/reference/issues-security/security.md +++ b/content/ru/docs/reference/issues-security/security.md @@ -1,6 +1,6 @@ --- title: Общие сведения о безопасности Kubernetes и раскрытии информации -aliases: [/security/] +aliases: [/ru/security/] reviewers: - eparis - erictune From a8a796e68d8532a11d139b14bc61942a146624dc Mon Sep 17 00:00:00 2001 From: hihumikan Date: Thu, 9 May 2024 06:49:36 +0900 Subject: [PATCH 0943/1086] Update: changed the date back to the original notation and put a space in it. --- content/ja/docs/reference/glossary/cidr.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/ja/docs/reference/glossary/cidr.md b/content/ja/docs/reference/glossary/cidr.md index 683b6be24a..3b8e1c940f 100644 --- a/content/ja/docs/reference/glossary/cidr.md +++ b/content/ja/docs/reference/glossary/cidr.md @@ -1,7 +1,7 @@ --- title: CIDR id: cidr -date: 2024-05-08 +date: 2019-11-12 full_link: short_description: > CIDRは、IPアドレスの範囲を記述するための表記法であり、さまざまなネットワークを構成するために使用されています。 @@ -10,7 +10,7 @@ aka: tags: - networking --- -CIDR(Classless Inter-Domain Routing)はIPアドレスの範囲を記述するための表記法であり、さまざまなネットワークを構成するために使用されています。 +CIDR (Classless Inter-Domain Routing)はIPアドレスの範囲を記述するための表記法であり、さまざまなネットワークを構成するために使用されています。 From 040f5440970f5369a414376b23a9d46e839dcc4e Mon Sep 17 00:00:00 2001 From: Candace Holman Date: Wed, 8 May 2024 20:05:47 -0400 Subject: [PATCH 0944/1086] Add Gateway API v1.1 Blog Post (#45971) * Add Gateway API v1.1 Blog Post for 05-13-2024 * Update content/en/blog/_posts/2024-05-13-Gateway-API-v1.1/index.md Co-authored-by: Mike Morris * Update content/en/blog/_posts/2024-05-13-Gateway-API-v1.1/index.md Co-authored-by: Mike Morris * Update content/en/blog/_posts/2024-05-13-Gateway-API-v1.1/index.md Co-authored-by: Mike Morris * Update content/en/blog/_posts/2024-05-13-Gateway-API-v1.1/index.md Co-authored-by: Mike Morris * Update content/en/blog/_posts/2024-05-13-Gateway-API-v1.1/index.md Co-authored-by: Mike Morris * Update content/en/blog/_posts/2024-05-13-Gateway-API-v1.1/index.md * Update content/en/blog/_posts/2024-05-13-Gateway-API-v1.1/index.md * Apply suggestions from code review Co-authored-by: Mike Morris * Update content/en/blog/_posts/2024-05-13-Gateway-API-v1.1/index.md Co-authored-by: Flynn * Update content/en/blog/_posts/2024-05-13-Gateway-API-v1.1/index.md Co-authored-by: Flynn * Update content/en/blog/_posts/2024-05-13-Gateway-API-v1.1/index.md Co-authored-by: Flynn * Announce Gateway API v1.1 via Kubernetes blog post Co-authored-by: Flynn --------- Co-authored-by: Mike Morris Co-authored-by: Flynn --- .../gateway-api-logo.svg | 26 ++ .../2024-05-09-gateway-api-v1.1/index.md | 258 ++++++++++++++++++ 2 files changed, 284 insertions(+) create mode 100644 content/en/blog/_posts/2024-05-09-gateway-api-v1.1/gateway-api-logo.svg create mode 100644 content/en/blog/_posts/2024-05-09-gateway-api-v1.1/index.md diff --git a/content/en/blog/_posts/2024-05-09-gateway-api-v1.1/gateway-api-logo.svg b/content/en/blog/_posts/2024-05-09-gateway-api-v1.1/gateway-api-logo.svg new file mode 100644 index 0000000000..fed9ff7239 --- /dev/null +++ b/content/en/blog/_posts/2024-05-09-gateway-api-v1.1/gateway-api-logo.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/en/blog/_posts/2024-05-09-gateway-api-v1.1/index.md b/content/en/blog/_posts/2024-05-09-gateway-api-v1.1/index.md new file mode 100644 index 0000000000..bd018313b7 --- /dev/null +++ b/content/en/blog/_posts/2024-05-09-gateway-api-v1.1/index.md @@ -0,0 +1,258 @@ +--- +layout: blog +title: "Gateway API v1.1: Service mesh, GRPCRoute, and a whole lot more" +date: 2024-05-09T09:00:00-08:00 +slug: gateway-api-v1-1 +author: > + [Richard Belleville](https://github.com/gnossen) (Google), + [Frank Budinsky](https://github.com/frankbu) (IBM), + [Arko Dasgupta](https://github.com/arkodg) (Tetrate), + [Flynn](https://github.com/kflynn) (Buoyant), + [Candace Holman](https://github.com/candita) (Red Hat), + [John Howard](https://github.com/howardjohn) (Solo.io), + [Christine Kim](https://github.com/xtineskim) (Isovalent), + [Mattia Lavacca](https://github.com/mlavacca) (Kong), + [Keith Mattix](https://github.com/keithmattix) (Microsoft), + [Mike Morris](https://github.com/mikemorris) (Microsoft), + [Rob Scott](https://github.com/robscott) (Google), + [Grant Spence](https://github.com/gcs278) (Red Hat), + [Shane Utt](https://github.com/shaneutt) (Kong), + [Gina Yeh](https://github.com/ginayeh) (Google), + and other review and release note contributors +--- + +![Gateway API logo](gateway-api-logo.svg) + +Following the GA release of Gateway API last October, Kubernetes +SIG Network is pleased to announce the v1.1 release of +[Gateway API](https://gateway-api.sigs.k8s.io/). In this release, several features are graduating to +_Standard Channel_ (GA), notably including support for service mesh and +GRPCRoute. We're also introducing some new experimental features, including +session persistence and client certificate verification. + +## What's new + +### Graduation to Standard +This release includes the graduation to Standard of four eagerly awaited features. +This means they are no longer experimental concepts; inclusion in the Standard +release channel denotes a high level of confidence in the API surface and +provides guarantees of backward compatibility. Of course, as with any other +Kubernetes API, Standard Channel features can continue to evolve with +backward-compatible additions over time, and we certainly expect further +refinements and improvements to these new features in the future. +For more information on how all of this works, refer to the +[Gateway API Versioning Policy](https://gateway-api.sigs.k8s.io/concepts/versioning/). + + +#### [Service Mesh Support](https://gateway-api.sigs.k8s.io/mesh/) +Service mesh support in Gateway API allows service mesh users to use the same +API to manage ingress traffic and mesh traffic, reusing the same policy and +routing interfaces. In Gateway API v1.1, routes (such as HTTPRoute) can now have +a Service as a `parentRef`, to control how traffic to specific services behave. +For more information, read the +[Gateway API service mesh documentation](https://gateway-api.sigs.k8s.io/mesh/) +or see the +[list of Gateway API implementations +](https://gateway-api.sigs.k8s.io/implementations/#service-mesh-implementation-status). + +As an example, one could do a canary deployment of a workload deep in an +application's call graph with an HTTPRoute as follows: + +``` +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: color-canary + namespace: faces +spec: + parentRefs: + - name: color + kind: Service + group: "" + port: 80 + rules: + - backendRefs: + - name: color + port: 80 + weight: 50 + - name: color2 + port: 80 + weight: 50 +``` + +This would split traffic sent to the `color` Service in the `faces` namespace +50/50 between the original `color` Service and the `color2` Service, using a +portable configuration that's easy to move from one mesh to another. + + +#### [GRPCRoute](https://gateway-api.sigs.k8s.io/guides/grpc-routing/) +If you are already using the experimental version of GRPCRoute, we recommend holding +off on upgrading to the standard channel version of GRPCRoute until the +controllers you're using have been updated to support GRPCRoute v1. Until then, +it is safe to upgrade to the experimental channel version of GRPCRoute in v1.1 +that includes both v1alpha2 and v1 API versions. + + +#### [ParentReference Port](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io%2fv1.ParentReference) +The `port` field was added to ParentReference, allowing you to attach resources +to Gateway Listeners, Services, or other parent resources +(depending on the implementation). Binding to a port also allows you to attach +to multiple Listeners at once. + +For example, you can attach an HTTPRoute to one or more specific Listeners of a +Gateway as specified by the Listener `port`, instead of the Listener `name` field. + +For more information, see [Attaching to Gateways. +](https://gateway-api.sigs.k8s.io/api-types/httproute/#attaching-to-gateways) + + +#### [Conformance Profiles and Reports](https://gateway-api.sigs.k8s.io/concepts/conformance/#conformance-profiles) + +The conformance report API has been expanded with the `mode` field (intended to +specify the working mode of the implementation), and the `gatewayAPIChannel` +(standard or experimental). The `gatewayAPIVersion` and `gatewayAPIChannel` are +now filled in automatically by the suite machinery, along with a brief +description of the testing outcome. The Reports have been reorganized in a more +structured way, and the implementations can now add information on how the tests +have been run and provide reproduction steps. + + +### New additions to Experimental channel + +#### [Gateway Client Certificate Verification](https://gateway-api.sigs.k8s.io/geps/gep-91/) + +Gateways can now configure client cert verification for each Gateway Listener by +introducing a new `frontendValidation` field within `tls`. This field +supports configuring a list of CA Certificates that can be used as a trust +anchor to validate the certificates presented by the client. + +The following example shows how the CACertificate stored in +the `foo-example-com-ca-cert` ConfigMap can be used to validate the certificates +presented by clients connecting to the `foo-https` Gateway Listener. + +``` +apiVersion: gateway.networking.k8s.io/v1 +kind: Gateway +metadata: + name: client-validation-basic +spec: + gatewayClassName: acme-lb + listeners: + name: foo-https + protocol: HTTPS + port: 443 + hostname: foo.example.com + tls: + certificateRefs: + kind: Secret + group: "" + name: foo-example-com-cert + frontendValidation: + caCertificateRefs: + kind: ConfigMap + group: "" + name: foo-example-com-ca-cert +``` + +#### [Session Persistence and BackendLBPolicy](https://gateway-api.sigs.k8s.io/geps/gep-1619/) + +[Session Persistence](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io%2fv1.SessionPersistence) is being introduced to Gateway API via a new policy +([BackendLBPolicy](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1alpha2.BackendLBPolicy)) +for Service-level configuration and as fields within HTTPRoute +and GRPCRoute for route-level configuration. The BackendLBPolicy and route-level +APIs provide the same session persistence configuration, including session +timeouts, session name, session type, and cookie lifetime type. + +Below is an example configuration of `BackendLBPolicy` that enables cookie-based +session persistence for the `foo` service. It sets the session name to +`foo-session`, defines absolute and idle timeouts, and configures the cookie to +be a session cookie: + +``` +apiVersion: gateway.networking.k8s.io/v1alpha2 +kind: BackendLBPolicy +metadata: + name: lb-policy + namespace: foo-ns +spec: + targetRefs: + - group: core + kind: service + name: foo + sessionPersistence: + sessionName: foo-session + absoluteTimeout: 1h + idleTimeout: 30m + type: Cookie + cookieConfig: + lifetimeType: Session +``` + +### Everything else + +#### [TLS Terminology Clarifications](https://gateway-api.sigs.k8s.io/geps/gep-2907/) + +As part of a broader goal of making our TLS terminology more consistent +throughout the API, we've introduced some breaking changes to BackendTLSPolicy. +This has resulted in a new API version (v1alpha3) and will require any existing +implementations of this policy to properly handle the version upgrade, e.g. +by backing up data and uninstalling the v1alpha2 version before installing this +newer version. + +Any references to v1alpha2 BackendTLSPolicy fields will need to be updated to +v1alpha3. Specific changes to fields include: +- `targetRef` becomes `targetRefs` to allow a BackendTLSPolicy to attach to +multiple targets +- `tls` becomes `validation` +- `tls.caCertRefs` becomes `validation.caCertificateRefs` +- `tls.wellKnownCACerts` becomes `validation.wellKnownCACertificates` + + +For a full list of the changes included in this release, please refer to the +[v1.1.0 release notes. +](https://github.com/kubernetes-sigs/gateway-api/releases/tag/v1.1.0) + +## Gateway API background + +The idea of Gateway API was initially [proposed](https://youtu.be/Ne9UJL6irXY?si=wgtC9w8PMB5ZHil2) +at the 2019 KubeCon San Diego as the next generation +of Ingress API. Since then, an incredible community has formed to develop what +has likely become the +[most collaborative API in Kubernetes history](https://www.youtube.com/watch?v=V3Vu_FWb4l4). +Over 200 people have contributed to this API so far, and that number continues +to grow. + +The maintainers +would like to thank _everyone_ who's contributed to Gateway API, whether in the +form of commits to the repo, discussion, ideas, or general support. We literally +couldn't have gotten this far without the support of this dedicated and active +community. + +## Try it out + +Unlike other Kubernetes APIs, you don't need to upgrade to the latest version of +Kubernetes to get the latest version of Gateway API. As long as you're running +Kubernetes 1.26 or later, you'll be able to get up and running with this +version of Gateway API. + +To try out the API, follow our [Getting Started Guide](https://gateway-api.sigs.k8s.io/guides/). + +## Get involved + +There are lots of opportunities to get involved and help define the future of +Kubernetes routing APIs for both ingress and service mesh. + +* Check out the [user guides](https://gateway-api.sigs.k8s.io/guides) to see what use-cases can be addressed. +* Try out one of the [existing Gateway controllers](https://gateway-api.sigs.k8s.io/implementations/) +* Or [join us in the community](https://gateway-api.sigs.k8s.io/contributing/) +and help us build the future of Gateway API together! + +## Related Kubernetes blog articles +* [New Experimental Features in Gateway API v1.0](/blog/2023/11/28/gateway-api-ga/) +11/2023 +* [Gateway API v1.0: GA Release](/blog/2023/10/31/gateway-api-ga/) +10/2023 +* [Introducing ingress2gateway; Simplifying Upgrades to Gateway API](/blog/2023/10/25/introducing-ingress2gateway/) +10/2023 +* [Gateway API v0.8.0: Introducing Service Mesh Support](/blog/2023/08/29/gateway-api-v0-8/) +08/2023 From 0d715bd5fef99f2a3782078d81ad8cb6ef6a32fe Mon Sep 17 00:00:00 2001 From: Qiming Teng Date: Thu, 9 May 2024 11:01:54 +0800 Subject: [PATCH 0945/1086] Update go mod dependency for working with 1.30 release --- go.mod | 96 ++++++++++++++++++++++++------------------------- go.sum | 112 ++++++++++++++++++++++++++++----------------------------- 2 files changed, 102 insertions(+), 106 deletions(-) diff --git a/go.mod b/go.mod index a08b347a76..9f90e8ae5a 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,9 @@ module k8s.io/website -go 1.21 +go 1.22.0 require ( - k8s.io/apimachinery v0.29.0 + k8s.io/apimachinery v0.30.0 k8s.io/kubernetes v0.0.0 ) @@ -23,15 +23,15 @@ require ( github.com/evanphx/json-patch v5.6.0+incompatible // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/go-logr/logr v1.3.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/google/cel-go v0.17.7 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/cel-go v0.17.8 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect @@ -71,13 +71,13 @@ require ( go.opentelemetry.io/proto/otlp v1.0.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect - golang.org/x/crypto v0.16.0 // indirect + golang.org/x/crypto v0.21.0 // indirect golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect - golang.org/x/net v0.19.0 // indirect + golang.org/x/net v0.23.0 // indirect golang.org/x/oauth2 v0.10.0 // indirect - golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/term v0.15.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/term v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.3.0 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -85,57 +85,57 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/grpc v1.58.3 // indirect - google.golang.org/protobuf v1.31.0 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/api v0.29.0 // indirect + k8s.io/api v0.30.0 // indirect k8s.io/apiextensions-apiserver v0.0.0 // indirect - k8s.io/apiserver v0.29.0 // indirect - k8s.io/client-go v0.29.0 // indirect + k8s.io/apiserver v0.30.0 // indirect + k8s.io/client-go v0.30.0 // indirect k8s.io/cloud-provider v0.0.0 // indirect - k8s.io/component-base v0.29.0 // indirect - k8s.io/component-helpers v0.29.0 // indirect - k8s.io/controller-manager v0.29.0 // indirect - k8s.io/klog/v2 v2.110.1 // indirect - k8s.io/kms v0.29.0 // indirect - k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e // indirect + k8s.io/component-base v0.30.0 // indirect + k8s.io/component-helpers v0.30.0 // indirect + k8s.io/controller-manager v0.30.0 // indirect + k8s.io/klog/v2 v2.120.1 // indirect + k8s.io/kms v0.30.0 // indirect + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect k8s.io/kubelet v0.0.0 // indirect k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect - sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 // indirect + sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) replace ( - k8s.io/api => k8s.io/api v0.29.0 - k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.29.0 - k8s.io/apimachinery => k8s.io/apimachinery v0.29.0 - k8s.io/apiserver => k8s.io/apiserver v0.29.0 - k8s.io/cli-runtime => k8s.io/cli-runtime v0.29.0 - k8s.io/client-go => k8s.io/client-go v0.29.0 - k8s.io/cloud-provider => k8s.io/cloud-provider v0.29.0 - k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.29.0 - k8s.io/code-generator => k8s.io/code-generator v0.29.0 - k8s.io/component-base => k8s.io/component-base v0.29.0 - k8s.io/component-helpers => k8s.io/component-helpers v0.29.0 - k8s.io/controller-manager => k8s.io/controller-manager v0.29.0 - k8s.io/cri-api => k8s.io/cri-api v0.29.0 - k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.29.0 - k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.29.0 - k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.29.0 - k8s.io/kube-proxy => k8s.io/kube-proxy v0.29.0 - k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.29.0 - k8s.io/kubectl => k8s.io/kubectl v0.29.0 - k8s.io/kubelet => k8s.io/kubelet v0.29.0 + k8s.io/api => k8s.io/api v0.30.0 + k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.30.0 + k8s.io/apimachinery => k8s.io/apimachinery v0.30.0 + k8s.io/apiserver => k8s.io/apiserver v0.30.0 + k8s.io/cli-runtime => k8s.io/cli-runtime v0.30.0 + k8s.io/client-go => k8s.io/client-go v0.30.0 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.30.0 + k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.30.0 + k8s.io/code-generator => k8s.io/code-generator v0.30.0 + k8s.io/component-base => k8s.io/component-base v0.30.0 + k8s.io/component-helpers => k8s.io/component-helpers v0.30.0 + k8s.io/controller-manager => k8s.io/controller-manager v0.30.0 + k8s.io/cri-api => k8s.io/cri-api v0.30.0 + k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.30.0 + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.30.0 + k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.30.0 + k8s.io/kube-proxy => k8s.io/kube-proxy v0.30.0 + k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.30.0 + k8s.io/kubectl => k8s.io/kubectl v0.30.0 + k8s.io/kubelet => k8s.io/kubelet v0.30.0 k8s.io/kubernetes => ../kubernetes - k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.29.0 - k8s.io/metrics => k8s.io/metrics v0.29.0 - k8s.io/mount-utils => k8s.io/mount-utils v0.29.0 - k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.29.0 - k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.29.0 - k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.29.0 - k8s.io/sample-controller => k8s.io/sample-controller v0.29.0 + k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.0 + k8s.io/metrics => k8s.io/metrics v0.30.0 + k8s.io/mount-utils => k8s.io/mount-utils v0.30.0 + k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.30.0 + k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.30.0 + k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.30.0 + k8s.io/sample-controller => k8s.io/sample-controller v0.30.0 ) diff --git a/go.sum b/go.sum index e147e0cd35..6f4de3e1eb 100644 --- a/go.sum +++ b/go.sum @@ -43,8 +43,8 @@ github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= @@ -68,16 +68,14 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cel-go v0.17.7 h1:6ebJFzu1xO2n7TLtN+UBqShGBhlD85bhvglh5DpcfqQ= -github.com/google/cel-go v0.17.7/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= +github.com/google/cel-go v0.17.8 h1:j9m730pMZt1Fc4oKhCLUHfjj6527LuhYcYw0Rl8gqto= +github.com/google/cel-go v0.17.8/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -128,10 +126,10 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/onsi/ginkgo/v2 v2.13.2 h1:Bi2gGVkfn6gQcjNjZJVO8Gf0FHzMPf2phUei9tejVMs= -github.com/onsi/ginkgo/v2 v2.13.2/go.mod h1:XStQ8QcGwLyF4HdfcZB8SFOS/MWCgDuXMSBe6zrvLgM= -github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= -github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY= +github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM= +github.com/onsi/gomega v1.31.0 h1:54UJxxj6cPInHS3a35wm6BK/F9nHYueZ1NVujHDrnXE= +github.com/onsi/gomega v1.31.0/go.mod h1:DW9aCi7U6Yi40wNVAvT6kzFnEVEI5n3DloYBiKiT6zk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -211,8 +209,8 @@ go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1 go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= -go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= -go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= @@ -220,8 +218,8 @@ go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -231,23 +229,23 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -259,8 +257,8 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= -golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= +golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -275,10 +273,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1: google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ= google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -293,36 +289,36 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.29.0 h1:NiCdQMY1QOp1H8lfRyeEf8eOwV6+0xA6XEE44ohDX2A= -k8s.io/api v0.29.0/go.mod h1:sdVmXoz2Bo/cb77Pxi71IPTSErEW32xa4aXwKH7gfBA= -k8s.io/apiextensions-apiserver v0.29.0 h1:0VuspFG7Hj+SxyF/Z/2T0uFbI5gb5LRgEyUVE3Q4lV0= -k8s.io/apiextensions-apiserver v0.29.0/go.mod h1:TKmpy3bTS0mr9pylH0nOt/QzQRrW7/h7yLdRForMZwc= -k8s.io/apimachinery v0.29.0 h1:+ACVktwyicPz0oc6MTMLwa2Pw3ouLAfAon1wPLtG48o= -k8s.io/apimachinery v0.29.0/go.mod h1:eVBxQ/cwiJxH58eK/jd/vAk4mrxmVlnpBH5J2GbMeis= -k8s.io/apiserver v0.29.0 h1:Y1xEMjJkP+BIi0GSEv1BBrf1jLU9UPfAnnGGbbDdp7o= -k8s.io/apiserver v0.29.0/go.mod h1:31n78PsRKPmfpee7/l9NYEv67u6hOL6AfcE761HapDM= -k8s.io/client-go v0.29.0 h1:KmlDtFcrdUzOYrBhXHgKw5ycWzc3ryPX5mQe0SkG3y8= -k8s.io/client-go v0.29.0/go.mod h1:yLkXH4HKMAywcrD82KMSmfYg2DlE8mepPR4JGSo5n38= -k8s.io/cloud-provider v0.29.0 h1:Qgk/jHsSKGRk/ltTlN6e7eaNuuamLROOzVBd0RPp94M= -k8s.io/cloud-provider v0.29.0/go.mod h1:gBCt7YYKFV4oUcJ/0xF9lS/9il4MxKunJ+ZKvh39WGo= -k8s.io/component-base v0.29.0 h1:T7rjd5wvLnPBV1vC4zWd/iWRbV8Mdxs+nGaoaFzGw3s= -k8s.io/component-base v0.29.0/go.mod h1:sADonFTQ9Zc9yFLghpDpmNXEdHyQmFIGbiuZbqAXQ1M= -k8s.io/component-helpers v0.29.0 h1:Y8W70NGeitKxWwhsPo/vEQbQx5VqJV+3xfLpP3V1VxU= -k8s.io/component-helpers v0.29.0/go.mod h1:j2coxVfmzTOXWSE6sta0MTgNSr572Dcx68F6DD+8fWc= -k8s.io/controller-manager v0.29.0 h1:kEv9sKLnjDkoSqeouWp2lZ8P33an5wrDJpOMqoyD7pc= -k8s.io/controller-manager v0.29.0/go.mod h1:UKtadWkULF5bfX7vu3hHppzY/hz88C03t70GItg/x08= -k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= -k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= -k8s.io/kms v0.29.0 h1:KJ1zaZt74CgvgV3NR7tnURJ/mJOKC5X3nwon/WdwgxI= -k8s.io/kms v0.29.0/go.mod h1:mB0f9HLxRXeXUfHfn1A7rpwOlzXI1gIWu86z6buNoYA= -k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q= -k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= -k8s.io/kubelet v0.29.0 h1:SX5hlznTBcGIrS1scaf8r8p6m3e475KMifwt9i12iOk= -k8s.io/kubelet v0.29.0/go.mod h1:kvKS2+Bz2tgDOG1S1q0TH2z1DasNuVF+8p6Aw7xvKkI= +k8s.io/api v0.30.0 h1:siWhRq7cNjy2iHssOB9SCGNCl2spiF1dO3dABqZ8niA= +k8s.io/api v0.30.0/go.mod h1:OPlaYhoHs8EQ1ql0R/TsUgaRPhpKNxIMrKQfWUp8QSE= +k8s.io/apiextensions-apiserver v0.30.0 h1:jcZFKMqnICJfRxTgnC4E+Hpcq8UEhT8B2lhBcQ+6uAs= +k8s.io/apiextensions-apiserver v0.30.0/go.mod h1:N9ogQFGcrbWqAY9p2mUAL5mGxsLqwgtUce127VtRX5Y= +k8s.io/apimachinery v0.30.0 h1:qxVPsyDM5XS96NIh9Oj6LavoVFYff/Pon9cZeDIkHHA= +k8s.io/apimachinery v0.30.0/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= +k8s.io/apiserver v0.30.0 h1:QCec+U72tMQ+9tR6A0sMBB5Vh6ImCEkoKkTDRABWq6M= +k8s.io/apiserver v0.30.0/go.mod h1:smOIBq8t0MbKZi7O7SyIpjPsiKJ8qa+llcFCluKyqiY= +k8s.io/client-go v0.30.0 h1:sB1AGGlhY/o7KCyCEQ0bPWzYDL0pwOZO4vAtTSh/gJQ= +k8s.io/client-go v0.30.0/go.mod h1:g7li5O5256qe6TYdAMyX/otJqMhIiGgTapdLchhmOaY= +k8s.io/cloud-provider v0.30.0 h1:hz1MXkFjsyO167sRZVchXEi2YYMQ6kolBi79nuICjzw= +k8s.io/cloud-provider v0.30.0/go.mod h1:iyVcGvDfmZ7m5cliI9TTHj0VTjYDNpc/K71Gp6hukjU= +k8s.io/component-base v0.30.0 h1:cj6bp38g0ainlfYtaOQuRELh5KSYjhKxM+io7AUIk4o= +k8s.io/component-base v0.30.0/go.mod h1:V9x/0ePFNaKeKYA3bOvIbrNoluTSG+fSJKjLdjOoeXQ= +k8s.io/component-helpers v0.30.0 h1:xbJtNCfSM4SB/Tz5JqCKDZv4eT5LVi/AWQ1VOxhmStU= +k8s.io/component-helpers v0.30.0/go.mod h1:68HlSwXIumMKmCx8cZe1PoafQEYh581/sEpxMrkhmX4= +k8s.io/controller-manager v0.30.0 h1:jqqT8cK0Awdy0IfT0yuqYIRmwskbdzH5AEZqkuhEVMs= +k8s.io/controller-manager v0.30.0/go.mod h1:suM1r/pxUuk2ij5Bbm7W9kBLrFujXuzIboNuWK5AfRA= +k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= +k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kms v0.30.0 h1:ZlnD/ei5lpvUlPw6eLfVvH7d8i9qZ6HwUQgydNVks8g= +k8s.io/kms v0.30.0/go.mod h1:GrMurD0qk3G4yNgGcsCEmepqf9KyyIrTXYR2lyUOJC4= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= +k8s.io/kubelet v0.30.0 h1:/pqHVR2Rn8ExCpn211wL3pMtqRFpcBcJPl4+1INbIMk= +k8s.io/kubelet v0.30.0/go.mod h1:WukdKqbQxnj+csn3K8XOKeX7Sh60J/da25IILjvvB5s= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2SGwkQasmbeqDo8th5wOBA5h/AjTKA4I= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0 h1:/U5vjBbQn3RChhv7P11uhYvCSm5G2GaIi5AIGBS6r4c= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.29.0/go.mod h1:z7+wmGM2dfIiLRfrC6jb5kV2Mq/sK1ZP303cxzkV5Y4= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= From fb29fd89978605efb869e94e7fcb903a5068dc06 Mon Sep 17 00:00:00 2001 From: Qiming Teng Date: Thu, 9 May 2024 11:02:17 +0800 Subject: [PATCH 0946/1086] Update test case to cover newly added files --- content/en/examples/examples_test.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/content/en/examples/examples_test.go b/content/en/examples/examples_test.go index ee17a3fdee..1ace5ff24b 100644 --- a/content/en/examples/examples_test.go +++ b/content/en/examples/examples_test.go @@ -565,9 +565,11 @@ func TestExampleObjectSchemas(t *testing.T) { "example-no-conflict-with-limitrange-cpu": {&api.Pod{}}, }, "configmap": { - "configmaps": {&api.ConfigMap{}, &api.ConfigMap{}}, - "configmap-multikeys": {&api.ConfigMap{}}, - "configure-pod": {&api.Pod{}}, + "configmaps": {&api.ConfigMap{}, &api.ConfigMap{}}, + "configmap-multikeys": {&api.ConfigMap{}}, + "configure-pod": {&api.Pod{}}, + "immutable-configmap": {&api.ConfigMap{}}, + "new-immutable-configmap": {&api.ConfigMap{}}, }, "controllers": { "daemonset": {&apps.DaemonSet{}}, @@ -582,6 +584,7 @@ func TestExampleObjectSchemas(t *testing.T) { "job-pod-failure-policy-example": {&batch.Job{}}, "job-pod-failure-policy-failjob": {&batch.Job{}}, "job-pod-failure-policy-ignore": {&batch.Job{}}, + "job-success-policy": {&batch.Job{}}, "replicaset": {&apps.ReplicaSet{}}, "replication": {&api.ReplicationController{}}, "replication-nginx-1.14.2": {&api.ReplicationController{}}, From 5228bdb02d26fe660feb634b11a1266cfb295431 Mon Sep 17 00:00:00 2001 From: Qiming Teng Date: Thu, 9 May 2024 11:02:37 +0800 Subject: [PATCH 0947/1086] Fix a Job example which fails the manifest validation --- content/en/examples/controllers/job-success-policy.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/content/en/examples/controllers/job-success-policy.yaml b/content/en/examples/controllers/job-success-policy.yaml index 1f7927b2f3..3cd8fd7454 100644 --- a/content/en/examples/controllers/job-success-policy.yaml +++ b/content/en/examples/controllers/job-success-policy.yaml @@ -1,5 +1,7 @@ apiVersion: batch/v1 kind: Job +metadata: + name: job-success spec: parallelism: 10 completions: 10 @@ -23,3 +25,4 @@ spec: sys.exit(0) else: sys.exit(1) + restartPolicy: Never From c232b40807210c43d374c889dd434ddc06f54662 Mon Sep 17 00:00:00 2001 From: xin gu <418294249@qq.com> Date: Thu, 9 May 2024 14:07:06 +0800 Subject: [PATCH 0948/1086] sync leases topology-aware-routing downward-api Update topology-aware-routing.md --- content/zh-cn/docs/concepts/architecture/leases.md | 4 ++-- .../services-networking/topology-aware-routing.md | 9 ++++++++- .../zh-cn/docs/concepts/workloads/pods/downward-api.md | 2 -- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/content/zh-cn/docs/concepts/architecture/leases.md b/content/zh-cn/docs/concepts/architecture/leases.md index 43a94350a2..b8fa0ab1b4 100644 --- a/content/zh-cn/docs/concepts/architecture/leases.md +++ b/content/zh-cn/docs/concepts/architecture/leases.md @@ -41,7 +41,7 @@ namespace. Under the hood, every kubelet heartbeat is an **update** request to t the `spec.renewTime` field for the Lease. The Kubernetes control plane uses the time stamp of this field to determine the availability of this `Node`. -See [Node Lease objects](/docs/concepts/architecture/nodes/#heartbeats) for more details. +See [Node Lease objects](/docs/concepts/architecture/nodes/#node-heartbeats) for more details. --> ## 节点心跳 {#node-heart-beats} @@ -50,7 +50,7 @@ Kubernetes 使用 Lease API 将 kubelet 节点心跳传递到 Kubernetes API 服 在此基础上,每个 kubelet 心跳都是对该 `Lease` 对象的 **update** 请求,更新该 Lease 的 `spec.renewTime` 字段。 Kubernetes 控制平面使用此字段的时间戳来确定此 `Node` 的可用性。 -更多细节请参阅 [Node Lease 对象](/zh-cn/docs/concepts/architecture/nodes/#heartbeats)。 +更多细节请参阅 [Node Lease 对象](/zh-cn/docs/concepts/architecture/nodes/#node-heartbeats)。 -* 参阅[使用 Service 连接到应用](/zh-cn/docs/tutorials/services/connect-applications-service/)教程 +* 参阅[使用 Service 连接到应用](/zh-cn/docs/tutorials/services/connect-applications-service/)教程。 +* 进一步了解 [trafficDistribution](/zh-cn/docs/concepts/services-networking/service/#trafic-distribution)字段, + 该字段与 `service.kubernetes.io/topology-mode` 注解密切相关,并为 Kubernetes 中的流量路由提供灵活的配置选项。 diff --git a/content/zh-cn/docs/concepts/workloads/pods/downward-api.md b/content/zh-cn/docs/concepts/workloads/pods/downward-api.md index 2d8e34f9c6..01d5ef87dc 100644 --- a/content/zh-cn/docs/concepts/workloads/pods/downward-api.md +++ b/content/zh-cn/docs/concepts/workloads/pods/downward-api.md @@ -155,11 +155,9 @@ The following information is available through environment variables `status.hostIPs` : 这组 IP 地址是 `status.hostIP` 的双协议栈版本,第一个 IP 始终与 `status.hostIP` 相同。 - 该字段在启用了 `PodHostIPs` [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)后可用。 + +## Pod 如何处理容器问题 {#container-restarts} + +Kubernetes 通过在 Pod `spec` 中定义的 [`restartPolicy`](#restart-policy) 管理 Pod 内容器出现的失效。 +该策略决定了 Kubernetes 如何对由于错误或其他原因而退出的容器做出反应,其顺序如下: + + + +1. **最初的崩溃**:Kubernetes 尝试根据 Pod 的 `restartPolicy` 立即重新启动。 +1. **反复的崩溃**:在最初的崩溃之后,Kubernetes 对于后续重新启动的容器采用指数级回退延迟机制, + 如 [`restartPolicy`](#restart-policy) 中所述。 + 这一机制可以防止快速、重复的重新启动尝试导致系统过载。 +1. **CrashLoopBackOff 状态**:这一状态表明,对于一个给定的、处于崩溃循环、反复失效并重启的容器, + 回退延迟机制目前正在生效。 +1. **回退重置**:如果容器成功运行了一定时间(如 10 分钟), + Kubernetes 会重置回退延迟机制,将新的崩溃视为第一次崩溃。 + +在实际部署中,`CrashLoopBackOff` 是在描述或列出 Pod 时从 `kubectl` 命令输出的一种状况或事件。 +当 Pod 中的容器无法正常启动,并反复进入尝试与失败的循环时就会出现。 + + +换句话说,当容器进入崩溃循环时,Kubernetes 会应用[容器重启策略](#restart-policy) +中提到的指数级回退延迟机制。这种机制可以防止有问题的容器因不断进行启动失败尝试而导致系统不堪重负。 + + +下列问题可以导致 `CrashLoopBackOff`: + +* 应用程序错误导致的容器退出。 +* 配置错误,如环境变量不正确或配置文件丢失。 +* 资源限制,容器可能没有足够的内存或 CPU 正常启动。 +* 如果应用程序没有在预期时间内启动服务,健康检查就会失败。 +* 容器的存活探针或者启动探针返回 `失败` 结果,如[探针部分](#container-probes)所述。 + + +要调查 `CrashLoopBackOff` 问题的根本原因,用户可以: + +1. **检查日志**:使用 `kubectl logs ` 检查容器的日志。 + 这通常是诊断导致崩溃的问题的最直接方法。 +1. **检查事件**:使用 `kubectl describe pod ` 查看 Pod 的事件, + 这可以提供有关配置或资源问题的提示。 +1. **审查配置**:确保 Pod 配置正确无误,包括环境变量和挂载卷,并且所有必需的外部资源都可用。 +1. **检查资源限制**: 确保容器被分配了足够的 CPU 和内存。有时,增加 Pod 定义中的资源可以解决问题。 +1. **调试应用程序**:应用程序代码中可能存在错误或配置不当。 + 在本地或开发环境中运行此容器镜像有助于诊断应用程序的特定问题。 + ## 容器重启策略 {#restart-policy} @@ -316,20 +417,25 @@ Pod 级别的 `restartPolicy` 字段:在 Kubernetes 中,Sidecar 被定义为 对于因错误而退出的 Init 容器,如果 Pod 级别 `restartPolicy` 为 `OnFailure` 或 `Always`, 则 kubelet 会重新启动 Init 容器。 +* `Always`:只要容器终止就自动重启容器。 +* `OnFailure`:只有在容器错误退出(退出状态非零)时才重新启动容器。 +* `Never`:不会自动重启已终止的容器。 + 当 kubelet 根据配置的重启策略处理容器重启时,仅适用于同一 Pod 内替换容器并在同一节点上运行的重启。当 Pod 中的容器退出时,`kubelet` -会按指数回退方式计算重启的延迟(10s、20s、40s、...),其最长延迟为 5 分钟。 -一旦某容器执行了 10 分钟并且没有出现问题,`kubelet` 对该容器的重启回退计时器执行重置操作。 +会以指数级回退延迟机制(10 秒、20 秒、40 秒......)重启容器, +上限为 300 秒(5 分钟)。一旦容器顺利执行了 10 分钟, +kubelet 就会重置该容器的重启延迟计时器。 [Sidecar 容器和 Pod 生命周期](/zh-cn/docs/concepts/workloads/pods/sidecar-containers/#sidecar-containers-and-pod-lifecycle)中解释了 `init containers` 在指定 `restartpolicy` 字段时的行为。 From 9fab70025b57723161b9b93dd2070076203baaf3 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 16:53:24 +0600 Subject: [PATCH 0955/1086] Update bn.toml --- data/i18n/bn/bn.toml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/data/i18n/bn/bn.toml b/data/i18n/bn/bn.toml index 7a63d26a57..48f03ab5ed 100644 --- a/data/i18n/bn/bn.toml +++ b/data/i18n/bn/bn.toml @@ -87,7 +87,7 @@ other = "02 Jan 2006 15:04:05 MST" other = "(সর্বশেষ ভার্সন: %s)" [deprecation_title] -other = "আপনি যে কুবারনেটিস সংস্করণের জন্য ডকুমেন্টেশন দেখছেন :" +other = "আপনি যে কুবারনেটিস ভার্সনের জন্য ডকুমেন্টেশন দেখছেন :" [deprecation_warning] other = " ডকুমেন্টেশন আর সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয় না। আপনি বর্তমানে যে ভার্সনটি দেখছেন সেটি একটি স্ট্যাটিক স্ন্যাপশট। আপ-টু-ডেট ডকুমেন্টেশনের জন্য, দেখুন " @@ -99,7 +99,7 @@ other = "ডেপ্রিক্যাটেড" other = "এই ডকুমেন্টে তথ্য পুরানো হতে পারে" [outdated_content_message] -other = "এই ডকুমেন্টটির আসলটির চেয়ে পুরানো আপডেটের তারিখ রয়েছে, তাই এতে থাকা তথ্য পুরানো হতে পারে৷ আপনি ইংরেজি পড়তে সক্ষম হলে, সবচেয়ে আপ-টু-ডেট তথ্যের জন্য ইংরেজি সংস্করণটি দেখুন:" +other = "এই ডকুমেন্টটির আসলটির চেয়ে পুরানো আপডেটের তারিখ রয়েছে, তাই এতে থাকা তথ্য পুরানো হতে পারে৷ আপনি ইংরেজি পড়তে সক্ষম হলে, সবচেয়ে আপ-টু-ডেট তথ্যের জন্য ইংরেজি ভার্সনটি দেখুন:" [dockershim_message] other = """1.24 রিলিজ হিসাবে Dockershim কুবারনেটিস প্রকল্প থেকে সরানো হয়েছে। আরও বিস্তারিত জানার জন্য ডকারশিম রিমুভাল FAQ পড়ুন।""" @@ -224,7 +224,7 @@ Down" দেখুন।

          """ other = "সর্বশেষ রিলিজ:" [latest_version] -other = "সর্বশেষ সংস্করণ" +other = "সর্বশেষ ভার্সন" [layouts_blog_pager_next] other = "পরবর্তী >>" @@ -435,8 +435,8 @@ other = "প্যাচ রিলিজ:" # The following text is displayed when JavaScript isn't available. [release_binary_alternate_links] -other = """You can find links to download Kubernetes components (and their checksums) in the [CHANGELOG](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG) files. -Alternately, use [downloadkubernetes.com](https://www.downloadkubernetes.com/) to filter by version and architecture.""" +other = """আপনি [চেঞ্জলগ](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG) ফাইলগুলিতে কুবারনেটিস উপাদান (এবং তাদের চেকসাম) ডাউনলোড করার লিঙ্কগুলি খুঁজে পেতে পারেন। +বিকল্পভাবে, ভার্সন এবং আর্কিটেকচার দ্বারা ফিল্টার করতে [downloadkubernetes.com](https://www.downloadkubernetes.com/) ব্যবহার করুন।""" [release_binary_arch] other = "আর্কিটেকচার" @@ -451,7 +451,7 @@ other = "কপি লিংক" other = "cert" [release_binary_copy_link_checksum] -other = "checksum" +other = "চেকসাম" [release_binary_copy_link_signature] other = "signature" @@ -489,21 +489,21 @@ other = "কুবারনেটিস কম্পোনেন্ট বাই # NOTE: is a placeholder for the actual version number set by 'release-binaries' shortcode. # Please do not localize or modify placeholder. [release_binary_section] -other = """You can find the links to download Kubernetes components (along with their checksums) below. -To access downloads for older supported versions, visit the respective documentation -link for [older versions](https://kubernetes.io/docs/home/supported-doc-versions/#versions-older) or use [downloadkubernetes.com](https://www.downloadkubernetes.com/).""" +other = """আপনি নীচে কুবারনেটিস উপাদান (তাদের চেকসাম সহ) ডাউনলোড করার লিঙ্কগুলি খুঁজে পেতে পারেন। +পুরানো সাপোর্টেড ভার্সনগুলির জন্য ডাউনলোডগুলি অ্যাক্সেস করতে, সংশ্লিষ্ট ডকুমেন্টেশন দেখুন৷ +[পুরানো ভার্সন](https://kubernetes.io/docs/home/supported-doc-versions/#versions-older) এর জন্য লিঙ্ক বা [downloadkubernetes.com](https://www.downloadkubernetes.com/) ব্যবহার করুন।""" # NOTE: and are placeholders set by 'release-binaries' shortcode. # Please do not localize or modify and placeholders. [release_binary_section_note] -other = """To download older patch versions of Kubernetes components (and their checksums), -please refer to the [CHANGELOG](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG/CHANGELOG-.md) file.""" +other = """ কুবারনেটিস উপাদানগুলির (এবং তাদের চেকসাম) এর পুরানো প্যাচ ভার্সনগুলি ডাউনলোড করতে, +অনুগ্রহ করে [চেঞ্জলগ](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG/CHANGELOG-.md) ফাইলটি দেখুন।""" [release_binary_version] -other = "সংস্করণ" +other = "ভার্সন" [release_binary_version_option] -other = "সর্বশেষ সংস্করণ" +other = "সর্বশেষ ভার্সন" [release_date_after] other = ")" @@ -532,7 +532,7 @@ other = "সম্পূর্ণ" other = "রিলিজ তথ্য" [release_minor_version] -other = "ক্ষুদ্র সংস্করণ" +other = "ক্ষুদ্র ভার্সন" [release_info_next_patch] other = "পরবর্তী প্যাচ রিলিজ হয় **%s**." @@ -589,16 +589,16 @@ other = """এই পৃষ্ঠার আইটেমগুলি কুবা other = "অনুসন্ধান করুন" [version_check_mustbe] -other = "আপনার কুবারনেটিস সার্ভার সংস্করণ হতে হবে " +other = "আপনার কুবারনেটিস সার্ভার ভার্সন হতে হবে " [version_check_mustbeorlater] -other = "আপনার কুবারনেটিস সার্ভার সংস্করণের চেয়ে বা তার পরে হতে হবে " +other = "আপনার কুবারনেটিস সার্ভার ভার্সনের চেয়ে বা তার পরে হতে হবে " [version_check_tocheck] -other = "সংস্করণ পরীক্ষা করতে, এন্টার করুন " +other = "ভার্সন পরীক্ষা করতে, এন্টার করুন " [version_menu] -other = "সংস্করণ" +other = "ভার্সন" [warning] other = "সতর্কতা:" From 39525fd1561f7231efabdd50b4d12880977a17ca Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 16:53:38 +0600 Subject: [PATCH 0956/1086] Update data/i18n/bn/bn.toml Co-authored-by: Tim Bannister --- data/i18n/bn/bn.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/i18n/bn/bn.toml b/data/i18n/bn/bn.toml index 48f03ab5ed..be30a5285c 100644 --- a/data/i18n/bn/bn.toml +++ b/data/i18n/bn/bn.toml @@ -81,7 +81,7 @@ other = "ইস্যু সারাংশ" other = "অফিসিয়াল কুবারনেটিস CVE তালিকা" [cve_table_date_format] -other = "02 Jan 2006 15:04:05 MST" +other = "2006-01-02 15:04:05 MST" [cve_table_date_format_string] other = "(সর্বশেষ ভার্সন: %s)" From 827b9af1d78b08965814dca64fecc348354580b7 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 16:56:32 +0600 Subject: [PATCH 0957/1086] Update bn.toml --- data/i18n/bn/bn.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/i18n/bn/bn.toml b/data/i18n/bn/bn.toml index be30a5285c..fb87fe79c7 100644 --- a/data/i18n/bn/bn.toml +++ b/data/i18n/bn/bn.toml @@ -517,7 +517,7 @@ other = "(রিলিজ হয়েছিল: " other = "2006-01-02" [release_date_format_month] -other = "January 2006" +other = "জানুয়ারি 2006" [release_cherry_pick_deadline] other = "Cherry Pick সময়সীমা" From c7f180f628fdb04a765e6b42c3229facb5168d4e Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 16:59:14 +0600 Subject: [PATCH 0958/1086] Update bn.toml --- data/i18n/bn/bn.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/i18n/bn/bn.toml b/data/i18n/bn/bn.toml index fb87fe79c7..be58f334bb 100644 --- a/data/i18n/bn/bn.toml +++ b/data/i18n/bn/bn.toml @@ -454,7 +454,7 @@ other = "cert" other = "চেকসাম" [release_binary_copy_link_signature] -other = "signature" +other = "স্বাক্ষর" [release_binary_copy_link_tooltip] other = "ক্লিপবোর্ডে কপি করুন" From 540364f95b877efa3bfaf8504e2f0abbaeebaf41 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 17:49:24 +0600 Subject: [PATCH 0959/1086] Update _index.html --- content/bn/_index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/_index.html b/content/bn/_index.html index 91d86e6472..999713808f 100644 --- a/content/bn/_index.html +++ b/content/bn/_index.html @@ -1,6 +1,6 @@ --- title: "প্রোডাকশন-গ্রেড কন্টেইনার অর্কেস্ট্রেশন" -abstract: "স্বয়ংক্রিয় কন্টেইনার স্থাপনা, স্কেলিং এবং ব্যবস্থাপনা" +abstract: "স্বয়ংক্রিয় কন্টেইনার ডিপ্লয়মেন্ট, স্কেলিং এবং ব্যবস্থাপনা" cid: home sitemap: priority: 1.0 @@ -10,7 +10,7 @@ sitemap: {{< blocks/section id="oceanNodes" >}} {{% blocks/feature image="flower" %}} -[কুবারনেটিস]({{< relref "/docs/concepts/overview/" >}}), K8s নামেও পরিচিত, কনটেইনারাইজড অ্যাপ্লিকেশনের স্বয়ংক্রিয় স্থাপনা, স্কেলিং এবং পরিচালনার জন্য একটি ওপেন-সোর্স সিস্টেম। +[কুবারনেটিস]({{< relref "/docs/concepts/overview/" >}}), K8s নামেও পরিচিত, কনটেইনারাইজড অ্যাপ্লিকেশনের স্বয়ংক্রিয় ডিপ্লয়মেন্ট, স্কেলিং এবং পরিচালনার জন্য একটি ওপেন-সোর্স সিস্টেম। এটি সহজ ব্যবস্থাপনা এবং আবিষ্কারের জন্য লজিক্যাল ইউনিটে একটি অ্যাপ্লিকেশন তৈরি করে এমন কন্টেইনারগুলিকে গোষ্ঠীভুক্ত করে। কুবারনেটিস [Google-এ প্রোডাকশন ওয়ার্কলোড চালানোর 15 বছরের অভিজ্ঞতার ভিত্তিতে](http://queue.acm.org/detail.cfm?id=2898444) তৈরি করে, কমিউনিটির সেরা ধারণা এবং অনুশীলনের সাথে মিলিত ভাবে। {{% /blocks/feature %}} From 4d891b0728a8b24faeff53630300678bc80fb514 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 17:56:17 +0600 Subject: [PATCH 0960/1086] Update _index.md --- content/bn/docs/concepts/containers/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/concepts/containers/_index.md b/content/bn/docs/concepts/containers/_index.md index 66cbdc07dc..7646cf5a40 100644 --- a/content/bn/docs/concepts/containers/_index.md +++ b/content/bn/docs/concepts/containers/_index.md @@ -15,7 +15,7 @@ card: সেখানই আপনি একই আচরণ পাবেন। কন্টেইনার অন্তর্নিহিত হোস্ট পরিকাঠামো থেকে অ্যাপ্লিকেশনগুলোকে দ্বিগুণ করে৷ -এটি বিভিন্ন ক্লাউড বা ওএস পরিবেশে স্থাপনাকে সহজ করে তোলে। +এটি বিভিন্ন ক্লাউড বা ওএস পরিবেশে ডিপ্লয়মেন্টকে সহজ করে তোলে। একটি কুবারনেটিস ক্লাস্টারের প্রতিটি {{< glossary_tooltip text="নোড" term_id="node" >}} , সেই নোডের জন্য নির্ধারিত [পড](/bn/docs/concepts/workloads/pods/) From 0144870f60016c63e43b6e63f10346d74547b224 Mon Sep 17 00:00:00 2001 From: Vishal Bidwe Date: Thu, 9 May 2024 17:27:46 +0530 Subject: [PATCH 0961/1086] - Removed .md typo formatting to render the webpage. --- content/en/docs/tasks/administer-cluster/kubelet-config-file.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/tasks/administer-cluster/kubelet-config-file.md b/content/en/docs/tasks/administer-cluster/kubelet-config-file.md index 455b1a672c..dcf0828c42 100644 --- a/content/en/docs/tasks/administer-cluster/kubelet-config-file.md +++ b/content/en/docs/tasks/administer-cluster/kubelet-config-file.md @@ -296,4 +296,4 @@ they can follow these steps to inspect the kubelet configuration: [`KubeletConfiguration`](/docs/reference/config-api/kubelet-config.v1beta1/) reference. - Learn more about kubelet configuration merging in the - [reference document](/docs/reference/node/kubelet-config-directory-merging.md). + [reference document](/docs/reference/node/kubelet-config-directory-merging). From e6f8cc3930b6b0af3c13374000492eda1a9e6a3d Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 17:58:30 +0600 Subject: [PATCH 0962/1086] Update hello-minikube.md --- content/bn/docs/tutorials/hello-minikube.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/tutorials/hello-minikube.md b/content/bn/docs/tutorials/hello-minikube.md index 8a09bcfe2a..8efd6bd0ef 100644 --- a/content/bn/docs/tutorials/hello-minikube.md +++ b/content/bn/docs/tutorials/hello-minikube.md @@ -52,7 +52,7 @@ card: {{< note >}} আপনি যখন `minikube dashboard` কমান্ড ইস্যু করেন, তখন ড্যাশবোর্ড অ্যাড-অন এবং প্রক্সি সক্রিয় হয় এবং প্রক্সিতে সংযোগ করার জন্য একটি ডিফল্ট ওয়েব ব্রাউজার উইন্ডো খোলে। -আপনি ড্যাশবোর্ড থেকে কুবারনেটিস সংস্থান তৈরি করতে পারেন যেমন স্থাপনা বা পরিষেবা। +আপনি ড্যাশবোর্ড থেকে কুবারনেটিস সংস্থান তৈরি করতে পারেন যেমন ডিপ্লয়মেন্ট বা সার্ভিস। আপনি যদি `root` এনভায়রনমেন্টে কমান্ড নির্বাহ করছেন, তাহলে [URL ব্যবহার করে ড্যাশবোর্ড অ্যাক্সেস করা] (#open-dashboard-with-url) পড়ুন। @@ -80,7 +80,7 @@ minikube dashboard --url [Deployment](/bn/docs/concepts/workloads/controllers/deployment/) হলো পডের একটি স্বাস্থ্য পরীক্ষা করে এবং পডের ধারকটি বন্ধ হয়ে গেলে পুনরায় চালু করে। পড তৈরি এবং স্কেলিং পরিচালনা করার উপায় হিসাবে স্থাপনের সুপারিশ করা হয়। -1. পড পরিচালনা ও স্থাপনা তৈরি করতে `kubectl create` কমান্ডটি চালান। এই পডগুলি প্রদত্ত Docker ইমেজ এর উপর ভিত্তি করে কন্টেইনার চালায়। +1. পড পরিচালনা ও ডিপ্লয়মেন্ট তৈরি করতে `kubectl create` কমান্ডটি চালান। এই পডগুলি প্রদত্ত Docker ইমেজ এর উপর ভিত্তি করে কন্টেইনার চালায়। ```shell kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4 From 7e1c4efe914f5bed73681a4f0c111a061665c50a Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 18:00:17 +0600 Subject: [PATCH 0963/1086] Update _index.html --- content/bn/docs/tutorials/kubernetes-basics/_index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/tutorials/kubernetes-basics/_index.html b/content/bn/docs/tutorials/kubernetes-basics/_index.html index 1a6a2753b7..a4c63bb368 100644 --- a/content/bn/docs/tutorials/kubernetes-basics/_index.html +++ b/content/bn/docs/tutorials/kubernetes-basics/_index.html @@ -32,7 +32,7 @@ card:
        • একটি নতুন সফ্টওয়্যার সংস্করণ দিয়ে কন্টেইনারাইজড অ্যাপ্লিকেশন আপডেট করুন।
        • কন্টেইনারাইজড অ্যাপ্লিকেশন ডিবাগ করুন।
        -

        টিউটোরিয়ালগুলি আপনার ওয়েব ব্রাউজারে একটি ভার্চুয়াল টার্মিনাল চালানোর জন্য Katacoda ব্যবহার করে যা Minikube চালায়, কুবারনেটের একটি ছোট আকারের স্থানীয় স্থাপনা যা যেকোনো জায়গায় চলতে পারে। কোন সফ্টওয়্যার ইনস্টল বা কিছু কনফিগার করার কোন প্রয়োজন নেই; প্রতিটি ইন্টারেক্টিভ টিউটোরিয়াল সরাসরি আপনার ওয়েব ব্রাউজার থেকে চলে।

        +

        টিউটোরিয়ালগুলি আপনার ওয়েব ব্রাউজারে একটি ভার্চুয়াল টার্মিনাল চালানোর জন্য Katacoda ব্যবহার করে যা Minikube চালায়, কুবারনেটের একটি ছোট আকারের স্থানীয় ডিপ্লয়মেন্ট যা যেকোনো জায়গায় চলতে পারে। কোন সফ্টওয়্যার ইনস্টল বা কিছু কনফিগার করার কোন প্রয়োজন নেই; প্রতিটি ইন্টারেক্টিভ টিউটোরিয়াল সরাসরি আপনার ওয়েব ব্রাউজার থেকে চলে।

    From 2a4fdfda147f284f337721d2871ec6657805e29a Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 18:00:59 +0600 Subject: [PATCH 0964/1086] Update _index.html --- content/bn/training/_index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/training/_index.html b/content/bn/training/_index.html index 4d255bc879..7ab87896e8 100644 --- a/content/bn/training/_index.html +++ b/content/bn/training/_index.html @@ -136,7 +136,7 @@ menu: Certified Kubernetes Security Specialist (CKS) -

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

    +

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

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


    সার্টিফিকেশনে যান From 08672a0bc7f21ba450b3d28eab9f0f0edeadba72 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 18:12:13 +0600 Subject: [PATCH 0965/1086] Update _index.md --- content/bn/docs/concepts/overview/_index.md | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/content/bn/docs/concepts/overview/_index.md b/content/bn/docs/concepts/overview/_index.md index a6311e04a0..2aab2102d5 100644 --- a/content/bn/docs/concepts/overview/_index.md +++ b/content/bn/docs/concepts/overview/_index.md @@ -1,7 +1,7 @@ --- title: "ওভারভিউ" description: > - কুবারনেটিস হল একটি পোর্টেবল, বর্ধনশীল, ওপেন সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড ওয়ার্কলোড এবং পরিষেবাগুলি পরিচালনা করার জন্য, ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস পরিষেবাগুলি, সমর্থন, এবং সরঞ্জাম ব্যাপকভাবে সহজলভ্য। + কুবারনেটিস হল একটি পোর্টেবল, এক্সটেনসিবল, ওপেন সোর্স প্ল্যাটফর্ম যা কন্টেইনারাইজড ওয়ার্কলোড এবং সার্ভিসগুলি পরিচালনা করার জন্য, ঘোষণামূলক কনফিগারেশন এবং অটোমেশন উভয়কেই সহজতর করে। এটির একটি বড়, দ্রুত বর্ধনশীল ইকোসিস্টেম রয়েছে। কুবারনেটিস সার্ভিসগুলি, সাপোর্ট, এবং টুলস ব্যাপকভাবে সহজলভ্য। content_type: concept weight: 20 card: @@ -33,9 +33,9 @@ no_list: true চলুন অতিতে যেয়ে এক নজরে দেখে নেওয়া যাক কেন কুবারনেটিস এতটা কাজে লাগে। -![স্থাপনার বিবর্তন](/images/docs/Container_Evolution.svg) +![ডিপ্লয়মেন্টের বিবর্তন](/images/docs/Container_Evolution.svg) -**ঐতিহ্যবাহী স্থাপনার যুগ:** +**ঐতিহ্যবাহী ডিপ্লয়মেন্টের যুগ:** প্রথম দিকে, সংস্থাগুলি ফিজিক্যাল সার্ভারগুলিতে অ্যাপ্লিকেশন চালাত। একটি ফিজিক্যাল সার্ভারে অ্যাপ্লিকেশনের জন্য রিসোর্স সীমানা নির্ধারণ করার কোন উপায় ছিল না, এবং এর ফলে রিসোর্স বরাদ্দ সমস্যা হয়েছে। উদাহরণস্বরূপ, যদি একটি ফিজিক্যাল সার্ভারে একাধিক অ্যাপ্লিকেশান চালিত হয়, @@ -44,7 +44,7 @@ no_list: true কিন্তু সম্পদের অব্যবহৃত হওয়ার কারণে এটির মাপকাঠিি ঠিক করা যায়নি এবং অনেকগুলি ফিজিক্যাল সার্ভার বজায় রাখা সংস্থাগুলির জন্য ব্যয়বহুল ছিল। -**ভার্চুয়ালাইজড স্থাপনার যুগ:** একটি সমাধান হিসাবে, ভার্চুয়ালাইজেশন চালু করা হয়েছিল। এটি আপনাকে +**ভার্চুয়ালাইজড ডিপ্লয়মেন্টর যুগ:** একটি সমাধান হিসাবে, ভার্চুয়ালাইজেশন চালু করা হয়েছিল। এটি আপনাকে একটি একক ফিজিক্যাল সার্ভারের CPU-তে একাধিক ভার্চুয়াল মেশিন (VMs) চালানো যায়। ভার্চুয়ালাইজেশন অ্যাপ্লিকেশনগুলিকে VM-এর মধ্যে বিচ্ছিন্ন করার অনুমতি দেয় এবং একটি স্তরের নিরাপত্তা প্রদান করে কারণ একটি অ্যাপ্লিকেশনের তথ্য অন্য অ্যাপ্লিকেশন দ্বারা অবাধে অ্যাক্সেস করা যায় না। @@ -66,10 +66,10 @@ OS ডিস্ট্রিবিউশন জুড়ে বহনযোগ্ কন্টেইনারগুলো জনপ্রিয় হয়ে উঠেছে কারণ তারা অতিরিক্ত সুবিধা প্রদান করে, যেমন: -* এজাইল (Agile) অ্যাপ্লিকেশন তৈরি এবং স্থাপনায়: ভিএম ইমেজ (VM Image) ব্যবহারের তুলনায় কন্টেইনার ইমেজ (Container Image) +* এজাইল (Agile) অ্যাপ্লিকেশন তৈরি এবং ডিপ্লয়মেন্টয়: ভিএম ইমেজ (VM Image) ব্যবহারের তুলনায় কন্টেইনার ইমেজ (Container Image) তৈরির সহজতা এবং দক্ষতা বেশি। -* ক্রমাগত বিকাশ, একীকরণ এবং স্থাপনা: নির্ভরযোগ্য এবং ঘন ঘন - কন্টেইনার ইমেজ তৈরি এবং স্থাপনার জন্য প্রদান করে দ্রুত এবং +* ক্রমাগত বিকাশ, একীকরণ এবং ডিপ্লয়মেন্ট: নির্ভরযোগ্য এবং ঘন ঘন + কন্টেইনার ইমেজ তৈরি এবং ডিপ্লয়মেন্টের জন্য প্রদান করে দ্রুত এবং দক্ষ রোলব্যাকের (ইমেজ অপরিবর্তনীয়তার কারণে) সাথে । * ডেভ (Dev) এবং অপস (Ops) উদ্বেগের বিচ্ছেদ: বিল্ড/রিলিজের সময়ে অ্যাপ্লিকেশন কন্টেইনার ইমেজ তৈরি করে ডিপ্লয়মেন্টের সময়ের তুলনায়, @@ -97,22 +97,22 @@ OS ডিস্ট্রিবিউশন জুড়ে বহনযোগ্ এভাবেই কুবারনেটস উদ্ধারে আসে!। কুবারনেটিস একটি কাঠামো প্রদান করে আপনাকে সিস্টেমগুলিকে স্থিতিস্থাপকভাবে চালানোর জন্য । এটি আপনার অ্যাপ্লিকেশনের জন্য স্কেলিং এবং ফেইলওভারের যত্ন নেয়, -স্থাপনার নিদর্শন প্রদান করে এবং আরও অনেক কিছু করে। উদাহরণস্বরূপ, কুবারনেটিস -সহজেই আপনার সিস্টেমের জন্য একটি ক্যানারি স্থাপনা পরিচালনা করতে পারে। +ডিপ্লয়মেন্টের নিদর্শন প্রদান করে এবং আরও অনেক কিছু করে। উদাহরণস্বরূপ, কুবারনেটিস +সহজেই আপনার সিস্টেমের জন্য একটি ক্যানারি ডিপ্লয়মেন্ট পরিচালনা করতে পারে। কুবারনেটিস আপনাকে সরবরাহ করে: * **পরিষেবা আবিষ্কার এবং লোড ব্যালেন্সিং** কুবারনেটিস ডিএনএস নাম ব্যবহার করে বা তাদের নিজস্ব আইপি ঠিকানা ব্যবহার করে একটি ধারক প্রকাশ করতে পারে। একটি কন্টেইনারে ট্রাফিক বেশি হলে, কুবারনেটিস লোড ব্যালেন্স এবং নেটওয়ার্ক ট্র্যাফিক - বিতরণ করতে সক্ষম হয় যাতে স্থাপনা স্থিতিশীল থাকে। + বিতরণ করতে সক্ষম হয় যাতে ডিপ্লয়মেন্ট স্থিতিশীল থাকে। * **স্টোরেজ অর্কেস্ট্রেশন** কুবারনেটিস আপনাকে স্বয়ংক্রিয়ভাবে আপনার পছন্দের একটি স্টোরেজ সিস্টেম মাউন্ট করার অনুমতি দেয়, যেমন স্থানীয় স্টোরেজ, পাবলিক ক্লাউড প্রদানকারী এবং আরও অনেক কিছু। * **স্বয়ংক্রিয় রোলআউট এবং রোলব্যাক** আপনি কুবারনেটিস ব্যবহার করে আপনার স্থাপন করা কন্টেইনার জন্য পছন্দসই অবস্থা বর্ণনা করতে পারেন এবং এটি একটি নিয়ন্ত্রিত হারে প্রকৃত অবস্থাকে পছন্দসই অবস্থায় পরিবর্তন করতে পারে। - উদাহরণস্বরূপ, আপনি কুবারনেটিস দিয়ে স্বয়ংক্রিয়ভাবে আপনার স্থাপনার জন্য নতুন কন্টেইনার তৈরি, + উদাহরণস্বরূপ, আপনি কুবারনেটিস দিয়ে স্বয়ংক্রিয়ভাবে আপনার ডিপ্লয়মেন্টের জন্য নতুন কন্টেইনার তৈরি, বিদ্যমান কন্টেইনারগুলি সরাতে এবং নতুন কন্টেইনারে তাদের সমস্ত রিসোর্স গ্রহণ করতে পারেন। * **স্বয়ংক্রিয় বিন প্যাকিং** আপনি কুবারনেটিসকে নোডের একটি ক্লাস্টার প্রদান করেন যা এটি কন্টেইনারাইজড কাজ চালাতে ব্যবহার করতে পারে। @@ -140,7 +140,7 @@ OS ডিস্ট্রিবিউশন জুড়ে বহনযোগ্ কুবারনেটিস একটি ঐতিহ্যগত, সর্ব-অন্তর্ভুক্ত PaaS (পরিষেবা হিসাবে প্ল্যাটফর্ম) সিস্টেম নয়। যেহেতু Kubernetes হার্ডওয়্যার স্তরের পরিবর্তে কন্টেইনার স্তরে কাজ করে, তাই এটি PaaS অফারগুলির জন্য সাধারণভাবে কিছু প্রযোজ্য বৈশিষ্ট্য প্রদান করে, যেমন -স্থাপনা, স্কেলিং, লোড ব্যালেন্সিং, এবং ব্যবহারকারীদের তাদের লগিং, পর্যবেক্ষণ +ডিপ্লয়মেন্ট, স্কেলিং, লোড ব্যালেন্সিং, এবং ব্যবহারকারীদের তাদের লগিং, পর্যবেক্ষণ এবং সতর্কতা সমাধানগুলিকে একীভূত করতে দেয়৷ যাইহোক, কুবারনেটিস একচেটিয়া নয়, এবং এই ডিফল্ট সমাধান ঐচ্ছিক এবং প্লাগযোগ্য। কুবারনেটিস বিকাশকারী প্ল্যাটফর্ম তৈরির জন্য বিল্ডিং ব্লক সরবরাহ করে, কিন্তু যেখানে এটি গুরুত্বপূর্ণ সেখানে ব্যবহারকারীর পছন্দ এবং নমনীয়তা সংরক্ষণ করে। From b262c308c8b10759e127967c0f110944513d2087 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 18:13:47 +0600 Subject: [PATCH 0966/1086] Update cluster-intro.html --- .../kubernetes-basics/create-cluster/cluster-intro.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html b/content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html index 62ae23574f..4ec583db41 100644 --- a/content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html +++ b/content/bn/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro.html @@ -29,7 +29,7 @@ weight: 10

    Kubernetes Clusters

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

    >একটি কুবারনেটিস ক্লাস্টার দুটি ধরণের সংস্থান নিয়ে গঠিত: From 995fcc12809fe50b5ada613c9456b8e83b459b3f Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 18:15:33 +0600 Subject: [PATCH 0967/1086] Update deploy-intro.html --- .../kubernetes-basics/deploy-app/deploy-intro.html | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html b/content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html index 9f7806e526..dead5cc789 100644 --- a/content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html +++ b/content/bn/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html @@ -1,5 +1,5 @@ --- -title: kubectl ব্যবহার করে একটি ডিপ্লোয়মেন্ট তৈরি করা +title: kubectl ব্যবহার করে একটি ডিপ্লয়মেন্ট তৈরি করা weight: 10 --- @@ -20,15 +20,15 @@ weight: 10

    উদ্দেশ্য

      -
    • অ্যাপ্লিকেশন ডিপ্লোয়মেন্ট সম্পর্কে জানুন ।
    • +
    • অ্যাপ্লিকেশন ডিপ্লয়মেন্ট সম্পর্কে জানুন ।
    • kubectl দিয়ে কুবারনেটিসে আপনার প্রথম অ্যাপ স্থাপন করুন।
    -

    কুবারনেটিস ডিপ্লোয়মেন্ট

    +

    কুবারনেটিস ডিপ্লয়মেন্ট

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

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

    একবার অ্যাপ্লিকেশন দৃষ্টান্ত তৈরি হয়ে গেলে, একটি কুবারনেটস ডিপ্লয়মেন্ট কন্ট্রোলার ক্রমাগত সেই দৃষ্টান্তগুলি পর্যবেক্ষণ করে। যদি কোনো দৃষ্টান্ত (instance) হোস্টিং নোড নিচে চলে যায় বা মুছে ফেলা হয়, তাহলে ডিপ্লয়মেন্ট কন্ট্রোলার ক্লাস্টারের অন্য নোডের দৃষ্টান্তের (instance) সাথে প্রতিস্থাপন করে। এটি মেশিনের ব্যর্থতা বা রক্ষণাবেক্ষণের জন্য একটি স্ব-নিরাময় প্রক্রিয়া সরবরাহ করে।

    @@ -70,9 +70,9 @@ weight: 10
    -

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

    +

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

    -

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

    +

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

    @@ -88,7 +88,7 @@ weight: 10

    - আপনার প্রথম স্থাপনার জন্য, আপনি একটি ডকার কন্টেনারে প্যাকেজ করা একটি হ্যালো-নোড অ্যাপ্লিকেশন ব্যবহার করবেন যা সমস্ত অনুরোধগুলিকে প্রতিধ্বনিত করতে NGINX ব্যবহার করে। (যদি আপনি ইতিমধ্যে একটি হ্যালো-নোড অ্যাপ্লিকেশন তৈরি করার এবং একটি কন্টেইনার ব্যবহার করে এটি স্থাপন করার চেষ্টা না করে থাকেন তবে আপনি হ্যালো মিনিকুব টিউটোরিয়াল (Hello Minikube tutorial) থেকে নির্দেশাবলী অনুসরণ করে প্রথমে এটি করতে পারেন)। + আপনার প্রথম ডিপ্লয়মেন্টর জন্য, আপনি একটি ডকার কন্টেনারে প্যাকেজ করা একটি হ্যালো-নোড অ্যাপ্লিকেশন ব্যবহার করবেন যা সমস্ত অনুরোধগুলিকে প্রতিধ্বনিত করতে NGINX ব্যবহার করে। (যদি আপনি ইতিমধ্যে একটি হ্যালো-নোড অ্যাপ্লিকেশন তৈরি করার এবং একটি কন্টেইনার ব্যবহার করে এটি স্থাপন করার চেষ্টা না করে থাকেন তবে আপনি হ্যালো মিনিকুব টিউটোরিয়াল (Hello Minikube tutorial) থেকে নির্দেশাবলী অনুসরণ করে প্রথমে এটি করতে পারেন)।

    এখন যেহেতু আপনি জানেন যে ডিপ্লয়মেন্টগুলি কী, আসুন অনলাইন টিউটোরিয়ালটিতে যাই এবং আমাদের প্রথম অ্যাপটি স্থাপন করি!

    From 434ddeb886a16104347a911d10983ecd358c1c14 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 18:20:45 +0600 Subject: [PATCH 0968/1086] Update scale-intro.html --- .../kubernetes-basics/scale/scale-intro.html | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/content/bn/docs/tutorials/kubernetes-basics/scale/scale-intro.html b/content/bn/docs/tutorials/kubernetes-basics/scale/scale-intro.html index c6cec53079..d4613e224b 100644 --- a/content/bn/docs/tutorials/kubernetes-basics/scale/scale-intro.html +++ b/content/bn/docs/tutorials/kubernetes-basics/scale/scale-intro.html @@ -25,21 +25,21 @@ weight: 10

    একটি অ্যাপ্লিকেশন স্কেলিং

    -

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

    +

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

    -

    স্কেলিং একটি স্থাপনার প্রতিলিপি সংখ্যা পরিবর্তন করে সম্পন্ন করা হয়

    +

    স্কেলিং একটি ডিপ্লয়মেন্টের প্রতিলিপি সংখ্যা পরিবর্তন করে সম্পন্ন করা হয়

    সারসংক্ষেপ:

      -
    • একটি স্থাপনার স্কেলিং
    • +
    • একটি ডিপ্লয়মেন্টের স্কেলিং

    - আপনি শুরু থেকে kubectl create deployment কমান্ডের --replicas প্যারামিটার ব্যবহার করে একাধিক উদাহরণ সহ একটি স্থাপনা তৈরি করতে পারেন

    + আপনি শুরু থেকে kubectl create deployment কমান্ডের --replicas প্যারামিটার ব্যবহার করে একাধিক উদাহরণ সহ একটি ডিপ্লয়মেন্ট তৈরি করতে পারেন

    @@ -85,14 +85,14 @@ weight: 10
    -

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

    +

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

    -

    একটি অ্যাপ্লিকেশনের একাধিক দৃষ্টান্ত চালানোর জন্য তাদের সকলে ট্রাফিক বিতরণ করার একটি উপায় প্রয়োজন। পরিষেবাগুলিতে একটি সমন্বিত লোড-ব্যালেন্সার রয়েছে যা একটি উন্মুক্ত স্থাপনার সমস্ত পডগুলিতে নেটওয়ার্ক ট্র্যাফিক বিতরণ করবে। পরিষেবাগুলি কেবলমাত্র উপলভ্য পডগুলিতে ট্র্যাফিক পাঠানো হয়েছে তা নিশ্চিত করার জন্য এন্ডপয়েন্টগুলি ব্যবহার করে ক্রমাগত চলমান পডগুলি পর্যবেক্ষণ করবে।

    +

    একটি অ্যাপ্লিকেশনের একাধিক দৃষ্টান্ত চালানোর জন্য তাদের সকলে ট্রাফিক বিতরণ করার একটি উপায় প্রয়োজন। পরিষেবাগুলিতে একটি সমন্বিত লোড-ব্যালেন্সার রয়েছে যা একটি উন্মুক্ত ডিপ্লয়মেন্টের সমস্ত পডগুলিতে নেটওয়ার্ক ট্র্যাফিক বিতরণ করবে। পরিষেবাগুলি কেবলমাত্র উপলভ্য পডগুলিতে ট্র্যাফিক পাঠানো হয়েছে তা নিশ্চিত করার জন্য এন্ডপয়েন্টগুলি ব্যবহার করে ক্রমাগত চলমান পডগুলি পর্যবেক্ষণ করবে।

    -

    একটি স্থাপনায় প্রতিলিপির সংখ্যা পরিবর্তন করে স্কেলিং সম্পন্ন করা হয়।

    +

    একটি ডিপ্লয়মেন্টেয় প্রতিলিপির সংখ্যা পরিবর্তন করে স্কেলিং সম্পন্ন করা হয়।

    From 4751a9e76067604f6a21e0868d6246760454646f Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 18:21:45 +0600 Subject: [PATCH 0969/1086] Update update-intro.html --- .../tutorials/kubernetes-basics/update/update-intro.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/bn/docs/tutorials/kubernetes-basics/update/update-intro.html b/content/bn/docs/tutorials/kubernetes-basics/update/update-intro.html index 5773282dd0..c0a079002f 100644 --- a/content/bn/docs/tutorials/kubernetes-basics/update/update-intro.html +++ b/content/bn/docs/tutorials/kubernetes-basics/update/update-intro.html @@ -25,7 +25,7 @@ weight: 10

    একটি অ্যাপ্লিকেশন আপডেট করা হচ্ছে

    -

    ব্যবহারকারীরা আশা করে যে অ্যাপ্লিকেশনগুলি সর্বদা উপলব্ধ থাকবে এবং ডেভেলপাররা দিনে কয়েকবার তাদের নতুন সংস্করণ স্থাপন করবে বলে আশা করা হচ্ছে। কুবারনেটিসে এটি রোলিং আপডেটের সাথে করা হয়। ঘূর্ণায়মান আপডেটগুলি নতুনগুলির সাথে পড দৃষ্টান্তগুলিকে ক্রমবর্ধমানভাবে আপডেট করে শূন্য ডাউনটাইম সহ স্থাপনার আপডেটগুলি ঘটতে দেয়৷ নতুন পডগুলি উপলব্ধ সংস্থান সহ নোডগুলিতে নির্ধারিত হবে৷

    +

    ব্যবহারকারীরা আশা করে যে অ্যাপ্লিকেশনগুলি সর্বদা উপলব্ধ থাকবে এবং ডেভেলপাররা দিনে কয়েকবার তাদের নতুন সংস্করণ স্থাপন করবে বলে আশা করা হচ্ছে। কুবারনেটিসে এটি রোলিং আপডেটের সাথে করা হয়। ঘূর্ণায়মান আপডেটগুলি নতুনগুলির সাথে পড দৃষ্টান্তগুলিকে ক্রমবর্ধমানভাবে আপডেট করে শূন্য ডাউনটাইম সহ ডিপ্লয়মেন্টের আপডেটগুলি ঘটতে দেয়৷ নতুন পডগুলি উপলব্ধ সংস্থান সহ নোডগুলিতে নির্ধারিত হবে৷

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

    @@ -39,7 +39,7 @@ weight: 10
    -

    রোলিং আপডেটগুলি নতুনগুলির সাথে পডস দৃষ্টান্তগুলিকে ক্রমবর্ধমানভাবে আপডেট করার মাধ্যমে শূন্য ডাউনটাইম সহ স্থাপনার আপডেটগুলি ঘটতে দেয়৷

    +

    রোলিং আপডেটগুলি নতুনগুলির সাথে পডস দৃষ্টান্তগুলিকে ক্রমবর্ধমানভাবে আপডেট করার মাধ্যমে শূন্য ডাউনটাইম সহ ডিপ্লয়মেন্টের আপডেটগুলি ঘটতে দেয়৷

    @@ -93,7 +93,7 @@ weight: 10
    -

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

    +

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

    রোলিং আপডেটগুলি নিম্নলিখিত ক্রিয়াগুলিকে অনুমতি দেয়ঃ

    • একটি পরিবেশ থেকে অন্য পরিবেশে একটি অ্যাপ্লিকেশন প্রচার করুন (কন্টেইনার ইমেজ আপডেটের মাধ্যমে)
    • @@ -105,7 +105,7 @@ weight: 10
    -

    যদি একটি স্থাপনা পাবলিকলি প্রকাশ করা হয়, পরিষেবাটি আপডেটের সময় শুধুমাত্র উপলব্ধ পডগুলিতে ট্র্যাফিক লোড-ব্যালেন্স করবে।

    +

    যদি একটি ডিপ্লয়মেন্ট পাবলিকলি প্রকাশ করা হয়, পরিষেবাটি আপডেটের সময় শুধুমাত্র উপলব্ধ পডগুলিতে ট্র্যাফিক লোড-ব্যালেন্স করবে।

    From ddbc2c23e9c9cf9e400a386a20d60adc88c22658 Mon Sep 17 00:00:00 2001 From: Dipesh Rawat Date: Thu, 2 May 2024 23:48:32 +0100 Subject: [PATCH 0970/1086] Add full-screen image display feature --- assets/scss/_custom.scss | 37 ++++++++++++++++++ layouts/partials/head.html | 5 +++ layouts/shortcodes/figure.html | 30 +++++++++++++++ static/js/zoom.js | 69 ++++++++++++++++++++++++++++++++++ 4 files changed, 141 insertions(+) create mode 100644 layouts/shortcodes/figure.html create mode 100644 static/js/zoom.js diff --git a/assets/scss/_custom.scss b/assets/scss/_custom.scss index f58fa37831..b72e1b08f9 100644 --- a/assets/scss/_custom.scss +++ b/assets/scss/_custom.scss @@ -1352,3 +1352,40 @@ div.alert > em.javascript-required { outline: none; padding: .5em 0 .5em 0; } + +/* CSS for 'figure' full-screen display */ + +/* Define styles for full-screen overlay */ +.figure-fullscreen-overlay { + position: fixed; + inset: 0; + z-index: 9999; + background-color: rgba(255, 255, 255, 0.95); /* White background with some transparency */ + display: flex; + justify-content: center; + align-items: center; + padding: calc(5% + 20px); + box-sizing: border-box; +} + +/* CSS class to scale the image when zoomed */ +.figure-zoomed { + transform: scale(1.2); +} + +/* Define styles for full-screen image */ +.figure-fullscreen-img { + max-width: 100%; + max-height: 100%; + object-fit: contain; /* Maintain aspect ratio and fit within the container */ +} + +/* Define styles for close button */ +.figure-close-button { + position: absolute; + top: 1%; + right: 2%; + cursor: pointer; + font-size: calc(5vw + 10px); + color: #333; +} \ No newline at end of file diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 236ffac759..5bea1abf07 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -99,6 +99,11 @@ {{- end -}} + +{{- if .HasShortcode "figure" -}} + +{{- end -}} + {{- if eq (lower .Params.cid) "community" -}} {{- if eq .Params.community_styles_migrated true -}} diff --git a/layouts/shortcodes/figure.html b/layouts/shortcodes/figure.html new file mode 100644 index 0000000000..722eef6217 --- /dev/null +++ b/layouts/shortcodes/figure.html @@ -0,0 +1,30 @@ +{{ $src := (.Page.Resources.GetMatch (printf "**%s*" (.Get "src"))) }} +{{ $clickToZoom := .Get "clicktozoom" }} + + {{- if .Get "link" -}} + + {{- end }} + {{ with .Get + {{- if .Get "link" }}{{ end -}} + {{- if or (or (.Get "title") (.Get "caption")) (.Get "attr") -}} +
    + {{ with (.Get "title") -}} +

    {{ . }}

    + {{- end -}} + {{- if or (.Get "caption") (.Get "attr") -}}

    + {{- .Get "caption" | markdownify -}} + {{- with .Get "attrlink" }} + + {{- end -}} + {{- .Get "attr" | markdownify -}} + {{- if .Get "attrlink" }}{{ end }}

    + {{- end }} +
    + {{- end }} + \ No newline at end of file diff --git a/static/js/zoom.js b/static/js/zoom.js new file mode 100644 index 0000000000..9db0e26513 --- /dev/null +++ b/static/js/zoom.js @@ -0,0 +1,69 @@ +// The page and script is loaded successfully +$(document).ready(function() { + // Function to handle hover over
    elements + function handleFigureHover() { + // Only change cursor to zoom-in if figure has 'clickable-zoom' class + if ($(this).hasClass('clickable-zoom') && !$(this).hasClass('figure-fullscreen-content')) { + $(this).css('cursor', 'zoom-in'); + } + } + + // Attach hover event to
    elements with 'clickable-zoom' class + $('figure.clickable-zoom').hover(handleFigureHover, function() { + // Mouse out - revert cursor back to default + $(this).css('cursor', 'default'); + }); + + // Attach click event to
    elements with 'clickable-zoom' class + $('figure.clickable-zoom').click(function() { + var $figure = $(this); + + // Check if the figure has 'clickable-zoom' class + if ($figure.hasClass('clickable-zoom')) { + var $img = $figure.find('img'); // Get the element within the clicked
    + + // Toggle 'figure-zoomed' class to scale the image + $img.toggleClass('figure-zoomed'); + + // Create a full-screen overlay + var $fullscreenOverlay = $('
    '); + + // Clone the element to display in full-screen + var $fullscreenImg = $img.clone(); + $fullscreenImg.addClass('figure-fullscreen-img'); + + // Append the full-screen image to the overlay + $fullscreenOverlay.append($fullscreenImg); + + // Create a close button for the full-screen overlay + var $closeButton = $('×'); + $closeButton.click(function() { + // Remove the full-screen overlay when close button is clicked + $fullscreenOverlay.remove(); + $('body').css('overflow', 'auto'); // Restore scrolling to the underlying page + + // Remove 'figure-zoomed' class to reset image scale + $img.removeClass('figure-zoomed'); + }); + $fullscreenOverlay.append($closeButton); + + // Append the overlay to the body + $('body').append($fullscreenOverlay); + + // Disable scrolling on the underlying page + $('body').css('overflow', 'hidden'); + + // Close full-screen figure when clicking outside of it (on the overlay) + $fullscreenOverlay.click(function(event) { + if (event.target === this) { + // Clicked on the overlay area (outside the full-screen image) + $fullscreenOverlay.remove(); + $('body').css('overflow', 'auto'); // Restore scrolling to the underlying page + + // Remove 'figure-zoomed' class to reset image scale + $img.removeClass('figure-zoomed'); + } + }); + } + }); +}); From a449f41af474f6bb23b5b99a8fc780a3b71e754a Mon Sep 17 00:00:00 2001 From: Dipesh Rawat Date: Wed, 8 May 2024 01:06:41 +0100 Subject: [PATCH 0971/1086] Use option to zoom on image click --- content/en/docs/concepts/overview/components.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/concepts/overview/components.md b/content/en/docs/concepts/overview/components.md index 177354fa47..47b8643c9c 100644 --- a/content/en/docs/concepts/overview/components.md +++ b/content/en/docs/concepts/overview/components.md @@ -20,7 +20,7 @@ When you deploy Kubernetes, you get a cluster. This document outlines the various components you need to have for a complete and working Kubernetes cluster. -{{< figure src="/images/docs/components-of-kubernetes.svg" alt="Components of Kubernetes" caption="The components of a Kubernetes cluster" class="diagram-large" >}} +{{< figure src="/images/docs/components-of-kubernetes.svg" alt="Components of Kubernetes" caption="The components of a Kubernetes cluster" class="diagram-large" clicktozoom="true" >}} ## Control Plane Components From fae1ddac4a71c155b1370409c0c7136d259afd58 Mon Sep 17 00:00:00 2001 From: Dmitry Shurupov Date: Thu, 9 May 2024 20:47:34 +0700 Subject: [PATCH 0972/1086] Fix incorrect /cve alias Signed-off-by: Dmitry Shurupov --- content/ru/docs/reference/issues-security/issues.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/ru/docs/reference/issues-security/issues.md b/content/ru/docs/reference/issues-security/issues.md index 2724d349f8..8fe7adaae4 100644 --- a/content/ru/docs/reference/issues-security/issues.md +++ b/content/ru/docs/reference/issues-security/issues.md @@ -1,7 +1,7 @@ --- title: Трекер задач (Issues) Kubernetes weight: 10 -aliases: [/cve/,/cves/] +aliases: [/ru/cve/,/ru/cves/] --- Чтобы сообщить о проблеме в области безопасности, воспользуйтесь процедурой [раскрытия информации о безопасности Kubernetes](/ru/docs/reference/issues-security/security/#report-a-vulnerability). From 0f0638ff45990e349f4e8319d07109be6a28a2b1 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Thu, 9 May 2024 23:02:47 +0600 Subject: [PATCH 0973/1086] [bn] Localize Blog - 2023-12-18-read-write-once-pod-access-mode-ga.md (#46296) * Update bn.toml * Create 2023-12-18-read-write-once-pod-access-mode-ga.md --- ...2-18-read-write-once-pod-access-mode-ga.md | 99 +++++++++++++++++++ data/i18n/bn/bn.toml | 2 +- 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 content/bn/blog/_posts/2023-12-18-read-write-once-pod-access-mode-ga.md diff --git a/content/bn/blog/_posts/2023-12-18-read-write-once-pod-access-mode-ga.md b/content/bn/blog/_posts/2023-12-18-read-write-once-pod-access-mode-ga.md new file mode 100644 index 0000000000..03366c8c9f --- /dev/null +++ b/content/bn/blog/_posts/2023-12-18-read-write-once-pod-access-mode-ga.md @@ -0,0 +1,99 @@ +--- +layout: blog +title: "কুবারনেটিস 1.29: পারসিস্টেন্টভলিউম গ্র্যাজুয়েটদের জন্য একক পড অ্যাক্সেস মোড" +date: 2023-12-18 +slug: read-write-once-pod-access-mode-ga +author: > + Chris Henzie (Google) +--- + +Kubernetes v1.29 প্রকাশের সাথে, ReadWriteOncePod ভলিউম অ্যাক্সেস মোড +সবার জন্য গ্র্যাজুয়েট হয়েছে: এটি কুবারনেটিস এর স্থিতিশীল API এর অংশ। +এই ব্লগ পোস্টে, আমি এই অ্যাক্সেস মোড এবং এটি কী করে তা আরও ঘনিষ্ঠভাবে দেখব। + +## `ReadWriteOncePod` কি? + +`ReadWriteOncePod` হলো +[পারসিস্টেন্টভলিউম(PersistentVolumes (PVs))](/docs/concepts/storage/persistent-volumes/#persistent-volumes) এবং +[পারসিস্টেন্টভলিউমক্লেমস(PersistentVolumeClaims (PVCs))](/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) +এর জন্য একটি অ্যাক্সেস মোড যা কুবারনেটিস v1.22-এ চালু করা হয়েছে। এই অ্যাক্সেস মোড +আপনাকে ক্লাস্টারে একটি একক পডে ভলিউম অ্যাক্সেস সীমাবদ্ধ করতে সক্ষম করে, এটি নিশ্চিত +করে যে একটি সময়ে শুধুমাত্র একটি পড ভলিউমে লিখতে পারে। এটি স্টেটফুল ওয়ার্কলোডগুলির +জন্য বিশেষভাবে উপযোগী হতে পারে যার জন্য স্টোরেজে একক-লেখকের অ্যাক্সেস প্রয়োজন। + +অ্যাক্সেস মোড এবং `ReadWriteOncePod` কীভাবে কাজ করে সে সম্পর্কে আরও প্রসঙ্গের জন্য পড়ুন +[অ্যাক্সেস মোডগুলি কী এবং কেন সেগুলি গুরুত্বপূর্ণ?](/blog/2021/09/13/read-write-once-pod-access-mode-alpha/#what-are-access-modes-and-why-are-they-important) +2021 থেকে পারসিস্টেন্টভলিউম নিবন্ধের জন্য একক পড অ্যাক্সেস মোড প্রবর্তন করা হয়েছে । + +## কিভাবে আমি `ReadWriteOncePod` ব্যবহার শুরু করতে পারি? + +ReadWriteOncePod ভলিউম অ্যাক্সেস মোড ডিফল্টরূপে কুবারনেটিস ভার্সন v1.27 +এবং তার পরে উপলব্ধ। কুবারনেটিস v1.29 এবং পরবর্তীতে, কুবারনেটিস API +সর্বদা এই অ্যাক্সেস মোডকে স্বীকৃতি দেয়। + +মনে রাখবেন যে `ReadWriteOncePod` +[শুধুমাত্র CSI ভলিউমগুলির জন্য সাপোর্টেড](/docs/concepts/storage/persistent-volumes/#access-modes), +এবং এই বৈশিষ্ট্যটি ব্যবহার করার আগে, আপনাকে নিম্নলিখিত +[CSI সাইডকারগুলিকে](https://kubernetes-csi.github.io/docs/sidecar-containers.html) +এই ভার্সনগুলিতে বা তার বেশি আপডেট করতে হবে: + +- [csi-provisioner:v3.0.0+](https://github.com/kubernetes-csi/external-provisioner/releases/tag/v3.0.0) +- [csi-attacher:v3.3.0+](https://github.com/kubernetes-csi/external-attacher/releases/tag/v3.3.0) +- [csi-resizer:v1.3.0+](https://github.com/kubernetes-csi/external-resizer/releases/tag/v1.3.0) + +`ReadWriteOncePod` ব্যবহার শুরু করতে, আপনাকে `ReadWriteOncePod` +অ্যাক্সেস মোড সহ একটি PVC তৈরি করতে হবে: + +```yaml +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: single-writer-only +spec: + accessModes: + - ReadWriteOncePod # Allows only a single pod to access single-writer-only. + resources: + requests: + storage: 1Gi +``` + +যদি আপনার স্টোরেজ প্লাগইন +[ডায়নামিক প্রভিশনিং সাপোর্টে করে](/docs/concepts/storage/dynamic-provisioning/), +তাহলে `ReadWriteOncePod` অ্যাক্সেস মোড প্রয়োগ করে নতুন +পারসিস্টেন্টভলিউম তৈরি করা হবে। + +`ReadWriteOncePod` ব্যবহার করার জন্য বিদ্যমান ভলিউম স্থানান্তরিত করার বিশদ বিবরণের জন্য +[বিদ্যমান পারসিস্টেন্টভলিউম স্থানান্তর করা](/blog/2021/09/13/read-write-once-pod-access-mode-alpha/#migrating-existing-persistentvolumes) পড়ুন । + +## আমি কীভাবে আরও শিখতে পারি? + +`ReadWriteOncePod` অ্যাক্সেস মোড এবং CSI স্পেক পরিবর্তনের প্রেরণা সম্পর্কে +আরও বিশদ বিবরণের জন্য অনুগ্রহ করে ব্লগ পোস্টগুলি +[alpha](/blog/2021/09/13/read-write-once-pod-access-mode-alpha), +[beta](/blog/2023/04/20/read-write-once-pod-access-mode-beta), এবং +[KEP-2485](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/2485-read-write-once-pod-pv-access-mode/README.md) দেখুন৷ + +## আমি কিভাবে জড়িত হতে পারি? + +[কুবারনেটিস #csi স্ল্যাক চ্যানেল](https://kubernetes.slack.com/messages/csi) এবং +যে কোনো স্ট্যান্ডার্ড +[SIG স্টোরেজ কমিউনিকেশন চ্যানেল](https://github.com/kubernetes/community/blob/master/sig-storage/README.md#contact) +হলো SIG স্টোরেজ এবং CSI টিমের কাছে পৌঁছানোর দুর্দান্ত পদ্ধতি। + +নিম্নলিখিত ব্যক্তিদের বিশেষ ধন্যবাদ যাদের চিন্তাশীল পর্যালোচনা এবং প্রতিক্রিয়া এই বৈশিষ্ট্যটি গঠনে সহায়তা করেছে: + +* Abdullah Gharaibeh (ahg-g) +* Aldo Culquicondor (alculquicondor) +* Antonio Ojea (aojea) +* David Eads (deads2k) +* Jan Šafránek (jsafrane) +* Joe Betz (jpbetz) +* Kante Yin (kerthcet) +* Michelle Au (msau42) +* Tim Bannister (sftim) +* Xing Yang (xing-yang) + +আপনি যদি CSI বা কুবারনেটিস স্টোরেজ সিস্টেমের যেকোন অংশের ডিজাইন +এবং বিকাশের সাথে জড়িত হতে আগ্রহী হন, তাহলে +[কুবারনেটিস স্টোরেজ স্পেশাল ইন্টারেস্ট গ্রুপে](https://github.com/kubernetes/community/tree/master/sig-storage) (Special Interest Group(SIG)) যোগ দিন। +আমরা দ্রুত বৃদ্ধি করছি এবং সবসময় নতুন অবদানকারীদের স্বাগত জানাই। diff --git a/data/i18n/bn/bn.toml b/data/i18n/bn/bn.toml index be58f334bb..c16a9b60ee 100644 --- a/data/i18n/bn/bn.toml +++ b/data/i18n/bn/bn.toml @@ -358,7 +358,7 @@ other = """লিগেসি প্যাকেজ রিপোজিটরি other = "দ্বারা" [main_cncf_project] -other = """আমরা একটি CNCF গ্রাজুয়েটেড প্রকল্প

    """ +other = """আমরা একটি CNCF গ্র্যাজুয়েটেড প্রকল্প

    """ [main_community_explore] other = "কমিউনিটি এক্সপ্লোর করুন" From 690b8df6251490b7210fa04970abe4cfd19a1f1c Mon Sep 17 00:00:00 2001 From: tico88612 <17496418+tico88612@users.noreply.github.com> Date: Thu, 9 May 2024 18:40:01 +0800 Subject: [PATCH 0974/1086] [zh-cn] Sync reference/setup-tools/kubeadm Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com> --- .../docs/reference/setup-tools/kubeadm/kubeadm-certs.md | 8 ++++++-- .../reference/setup-tools/kubeadm/kubeadm-init-phase.md | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-certs.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-certs.md index 627bff0ddc..2c2d776802 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-certs.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-certs.md @@ -46,6 +46,7 @@ For more details see [Manual certificate renewal](/docs/tasks/administer-cluster {{< tab name="etcd-server" include="generated/kubeadm_certs_renew_etcd-server.md" />}} {{< tab name="front-proxy-client" include="generated/kubeadm_certs_renew_front-proxy-client.md" />}} {{< tab name="scheduler.conf" include="generated/kubeadm_certs_renew_scheduler.conf.md" />}} +{{< tab name="super-admin.conf" include="generated/kubeadm_certs_renew_super-admin.conf.md" />}} {{< /tabs >}} ## kubeadm certs certificate-key {#cmd-certs-certificate-key} @@ -85,10 +86,13 @@ For more details see 此命令可用来为所有控制面证书和 kubeconfig 文件生成密钥和 CSR(签名请求)。 -用户可以根据自身需要选择 CA 为 CSR 签名。 +用户可以根据自身需要选择 CA 为 CSR 签名。要了解如何使用该命令的更多信息,请参阅 +[签署由 kubeadm 生成的证书签名请求(CSR)](/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs#signing-csr)。 {{< tabs name="tab-certs-generate-csr" >}} {{< tab name="generate-csr" include="generated/kubeadm_certs_generate-csr.md" />}} diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase.md index 86884dd852..02cc0e3cb2 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init-phase.md @@ -95,6 +95,7 @@ You can create all required kubeconfig files by calling the `all` subcommand or {{< tab name="kubelet" include="generated/kubeadm_init_phase_kubeconfig_kubelet.md" />}} {{< tab name="controller-manager" include="generated/kubeadm_init_phase_kubeconfig_controller-manager.md" />}} {{< tab name="scheduler" include="generated/kubeadm_init_phase_kubeconfig_scheduler.md" />}} +{{< tab name="super-admin" include="generated/kubeadm_init_phase_kubeconfig_super-admin.md" />}} {{< /tabs >}}

    用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。 +证书密钥是十六进制编码的字符串,是大小为 32 字节的 AES 密钥。

    diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md index 90b81e68bc..ad8b2d932f 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md @@ -69,9 +69,11 @@ If the node should host a new control plane instance, the port for the API Serve

    使用此密钥解密由 init 上传的证书 Secret。 +证书密钥是十六进制编码的字符串,是大小为 32 字节的 AES 密钥。

    From 983eab4732613ffdc951474706aefc294cb4132f Mon Sep 17 00:00:00 2001 From: windsonsea Date: Fri, 10 May 2024 09:35:38 +0800 Subject: [PATCH 0977/1086] Fix lists in apparmor.md --- content/en/docs/tutorials/security/apparmor.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/content/en/docs/tutorials/security/apparmor.md b/content/en/docs/tutorials/security/apparmor.md index 482c41cdd8..8f6ede29c1 100644 --- a/content/en/docs/tutorials/security/apparmor.md +++ b/content/en/docs/tutorials/security/apparmor.md @@ -45,12 +45,12 @@ Nodes before proceeding: The kubelet verifies that AppArmor is enabled on the host before admitting a pod with AppArmor explicitly configured. -3. Container runtime supports AppArmor -- All common Kubernetes-supported container +1. Container runtime supports AppArmor -- All common Kubernetes-supported container runtimes should support AppArmor, including {{< glossary_tooltip term_id="containerd" >}} and {{< glossary_tooltip term_id="cri-o" >}}. Please refer to the corresponding runtime documentation and verify that the cluster fulfills the requirements to use AppArmor. -4. Profile is loaded -- AppArmor is applied to a Pod by specifying an AppArmor profile that each +1. Profile is loaded -- AppArmor is applied to a Pod by specifying an AppArmor profile that each container should be run with. If any of the specified profiles are not loaded in the kernel, the kubelet will reject the Pod. You can view which profiles are loaded on a node by checking the `/sys/kernel/security/apparmor/profiles` file. For example: @@ -278,9 +278,15 @@ AppArmor profile are set, the container's profile will be used. An AppArmor profile has 2 fields: `type` _(required)_ - indicates which kind of AppArmor profile will be applied. Valid options are: - - `Localhost` - a profile pre-loaded on the node (specified by `localhostProfile`). - - `RuntimeDefault` - the container runtime's default profile. - - `Unconfined` - no AppArmor enforcement. + +`Localhost` +: a profile pre-loaded on the node (specified by `localhostProfile`). + +`RuntimeDefault` +: the container runtime's default profile. + +`Unconfined` +: no AppArmor enforcement. `localhostProfile` - The name of a profile loaded on the node that should be used. The profile must be preconfigured on the node to work. From 9915ccebc356a6f89600620ac17b75a16af0c7d1 Mon Sep 17 00:00:00 2001 From: Xander Grzywinski Date: Fri, 10 May 2024 09:54:22 -0700 Subject: [PATCH 0978/1086] docs: add salaxander as SIG docs tech lead Signed-off-by: Xander Grzywinski --- OWNERS_ALIASES | 6 ++++++ SECURITY_CONTACTS | 1 + 2 files changed, 7 insertions(+) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index a9e94aca1d..b815e2fd3c 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -12,6 +12,7 @@ aliases: - divya-mohan0209 - natalisucks - reylejano + - salaxander - sftim - tengqm sig-docs-localization-owners: # Admins for localization content @@ -20,6 +21,7 @@ aliases: - natalisucks - nate-double-u - reylejano + - salaxander - sftim - seokho-son - tengqm @@ -29,6 +31,7 @@ aliases: - natalisucks - nate-double-u - reylejano + - salaxander - sftim - seokho-son - tengqm @@ -55,6 +58,7 @@ aliases: - natalisucks - nate-double-u - reylejano + - salaxander - sftim - tengqm sig-docs-en-reviews: # PR reviews for English content @@ -67,6 +71,7 @@ aliases: - natalisucks - nate-double-u - reylejano + - salaxander - sftim - shannonxtreme - tengqm @@ -141,6 +146,7 @@ aliases: - divya-mohan0209 - natalisucks - reylejano + - salaxander - sftim - tengqm sig-docs-zh-owners: # Admins for Chinese content diff --git a/SECURITY_CONTACTS b/SECURITY_CONTACTS index 45a06ee063..d5b8f39535 100644 --- a/SECURITY_CONTACTS +++ b/SECURITY_CONTACTS @@ -17,3 +17,4 @@ tengqm onlydole kbhawkey natalisucks +salaxander From 6c94400f8e875325228ab0ef5f8d07517dd2a87c Mon Sep 17 00:00:00 2001 From: windsonsea Date: Fri, 10 May 2024 09:18:53 +0800 Subject: [PATCH 0979/1086] [zh] Add two glossary for reference --- .../glossary/immutable-infrastructure.md | 55 +++++++++++++++++++ .../reference/glossary/sidecar-container.md | 45 +++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 content/zh-cn/docs/reference/glossary/immutable-infrastructure.md create mode 100644 content/zh-cn/docs/reference/glossary/sidecar-container.md diff --git a/content/zh-cn/docs/reference/glossary/immutable-infrastructure.md b/content/zh-cn/docs/reference/glossary/immutable-infrastructure.md new file mode 100644 index 0000000000..b9062d794e --- /dev/null +++ b/content/zh-cn/docs/reference/glossary/immutable-infrastructure.md @@ -0,0 +1,55 @@ +--- +title: 不可变基础设施 +id: immutable-infrastructure +date: 2024-03-25 +full_link: +short_description: > + 不可变基础设施指的是一旦部署就不能变更的计算机基础设施(虚拟机、容器和网络设施) + +aka: +tags: +- architecture +--- + + + + +不可变基础设施指的是一旦部署就不能变更的计算机基础设施(虚拟机、容器和网络设施)。 + + + + +不可变性可以通过某个自动化进程或某种系统来强制执行,前者会覆盖未经授权的变更,而后者从源头上就不允许进行变更。 +{{< glossary_tooltip text="容器" term_id="container" >}}是不可变基础设施的一个很好的例子, +这是因为对容器的持久变更只能通过创建新版本的容器或从其镜像重新创建现有容器来进行。 + + +通过防止或识别未经授权的变更,不可变基础设施可以更容易地识别和缓解安全风险。 +操作此类系统变得更加简单明了,因为管理员可以对其作一些假设。 +毕竟,他们可以确认没有人犯错,也没人做了变更而又忘记沟通。 +不可变基础设施与基础设施即代码关系紧密,后者将所有创建基础设施所需的自动化都存储在版本控制中(如 Git)。 +不可变性和版本控制的结合意味着对系统的每个经过授权的变更都会对应一个持久的审计日志记录。 diff --git a/content/zh-cn/docs/reference/glossary/sidecar-container.md b/content/zh-cn/docs/reference/glossary/sidecar-container.md new file mode 100644 index 0000000000..cb57a15793 --- /dev/null +++ b/content/zh-cn/docs/reference/glossary/sidecar-container.md @@ -0,0 +1,45 @@ +--- +title: 边车容器 +id: sidecar-container +date: 2018-04-12 +full_link: +short_description: > + 在 Pod 的整个生命期内保持运行的辅助容器。 + +full_link: /zh-cn/docs/concepts/workloads/pods/sidecar-containers/ +tags: +- fundamental +--- + + + + +通常在任意应用容器运行之前启动的一个或多个{{< glossary_tooltip text="容器" term_id="container" >}}。 + + + + +边车容器与常规应用容器类似,但目的不同:边车为主应用容器提供了一个 Pod 内的本地服务。 +与{{< glossary_tooltip text="Init 容器" term_id="init-container" >}}不同,边车容器在 Pod 启动后继续运行。 + +更多细节参阅[边车容器](/zh-cn/docs/concepts/workloads/pods/sidecar-containers/)。 From 1bd0de1919a1032f48f1624bd4a3806835f1a5df Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Sat, 11 May 2024 19:04:35 +0100 Subject: [PATCH 0980/1086] Turn interactive tutorials into custom 404 pages Katacoda has shut down for good, and we have not added a local / in-project alternative playground in the time since. Serving a 404 helps cement that these pages are no longer part of the site. --- ...ter-interactive.html => cluster-interactive-gone.html} | 8 +++++++- ...ploy-interactive.html => deploy-interactive-gone.html} | 8 +++++++- ...ore-interactive.html => explore-interactive-gone.html} | 8 +++++++- ...pose-interactive.html => expose-interactive-gone.html} | 8 +++++++- ...scale-interactive.html => scale-interactive-gone.html} | 8 +++++++- ...date-interactive.html => update-interactive-gone.html} | 8 +++++++- static/_redirects | 8 ++++++++ 7 files changed, 50 insertions(+), 6 deletions(-) rename content/en/docs/tutorials/kubernetes-basics/create-cluster/{cluster-interactive.html => cluster-interactive-gone.html} (64%) rename content/en/docs/tutorials/kubernetes-basics/deploy-app/{deploy-interactive.html => deploy-interactive-gone.html} (65%) rename content/en/docs/tutorials/kubernetes-basics/explore/{explore-interactive.html => explore-interactive-gone.html} (64%) rename content/en/docs/tutorials/kubernetes-basics/expose/{expose-interactive.html => expose-interactive-gone.html} (64%) rename content/en/docs/tutorials/kubernetes-basics/scale/{scale-interactive.html => scale-interactive-gone.html} (65%) rename content/en/docs/tutorials/kubernetes-basics/update/{update-interactive.html => update-interactive-gone.html} (65%) diff --git a/content/en/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html b/content/en/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive-gone.html similarity index 64% rename from content/en/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html rename to content/en/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive-gone.html index 2bd7e9df35..25fb89f6b2 100644 --- a/content/en/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html +++ b/content/en/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive-gone.html @@ -1,5 +1,11 @@ --- -title: Interactive Tutorial - Creating a Cluster +title: Not found +# This page was previously titled "Interactive Tutorial - Creating a Cluster" +# before Katacoda shut down. +# +# There is no need to localize this Not Found page; the website automatically +# serves a 404 response when a page is missing. If you have an existing localized +# version of this page, it is OK to remove that localized version. weight: 20 headless: true toc_hide: true diff --git a/content/en/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html b/content/en/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive-gone.html similarity index 65% rename from content/en/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html rename to content/en/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive-gone.html index b35bd352d6..c6372275b1 100644 --- a/content/en/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html +++ b/content/en/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive-gone.html @@ -1,5 +1,11 @@ --- -title: Interactive Tutorial - Deploying an App +title: Not found +# This page was previously titled "Interactive Tutorial - Deploying an App" +# before Katacoda shut down. +# +# There is no need to localize this Not Found page; the website automatically +# serves a 404 response when a page is missing. If you have an existing localized +# version of this page, it is OK to remove that localized version. weight: 20 headless: true toc_hide: true diff --git a/content/en/docs/tutorials/kubernetes-basics/explore/explore-interactive.html b/content/en/docs/tutorials/kubernetes-basics/explore/explore-interactive-gone.html similarity index 64% rename from content/en/docs/tutorials/kubernetes-basics/explore/explore-interactive.html rename to content/en/docs/tutorials/kubernetes-basics/explore/explore-interactive-gone.html index 9565185aad..1afde09a5c 100644 --- a/content/en/docs/tutorials/kubernetes-basics/explore/explore-interactive.html +++ b/content/en/docs/tutorials/kubernetes-basics/explore/explore-interactive-gone.html @@ -1,5 +1,11 @@ --- -title: Interactive Tutorial - Exploring Your App +title: Not found +# This page was previously titled "Interactive Tutorial - Exploring Your App" +# before Katacoda shut down. +# +# There is no need to localize this Not Found page; the website automatically +# serves a 404 response when a page is missing. If you have an existing localized +# version of this page, it is OK to remove that localized version. weight: 20 headless: true toc_hide: true diff --git a/content/en/docs/tutorials/kubernetes-basics/expose/expose-interactive.html b/content/en/docs/tutorials/kubernetes-basics/expose/expose-interactive-gone.html similarity index 64% rename from content/en/docs/tutorials/kubernetes-basics/expose/expose-interactive.html rename to content/en/docs/tutorials/kubernetes-basics/expose/expose-interactive-gone.html index 2c3b4df0f9..f568976aa7 100644 --- a/content/en/docs/tutorials/kubernetes-basics/expose/expose-interactive.html +++ b/content/en/docs/tutorials/kubernetes-basics/expose/expose-interactive-gone.html @@ -1,5 +1,11 @@ --- -title: Interactive Tutorial - Exposing Your App +title: Not found +# This page was previously titled "Interactive Tutorial - Exposing Your App" +# before Katacoda shut down. +# +# There is no need to localize this Not Found page; the website automatically +# serves a 404 response when a page is missing. If you have an existing localized +# version of this page, it is OK to remove that localized version. weight: 20 headless: true toc_hide: true diff --git a/content/en/docs/tutorials/kubernetes-basics/scale/scale-interactive.html b/content/en/docs/tutorials/kubernetes-basics/scale/scale-interactive-gone.html similarity index 65% rename from content/en/docs/tutorials/kubernetes-basics/scale/scale-interactive.html rename to content/en/docs/tutorials/kubernetes-basics/scale/scale-interactive-gone.html index f2ab8a9301..dc58ff2104 100644 --- a/content/en/docs/tutorials/kubernetes-basics/scale/scale-interactive.html +++ b/content/en/docs/tutorials/kubernetes-basics/scale/scale-interactive-gone.html @@ -1,5 +1,11 @@ --- -title: Interactive Tutorial - Scaling Your App +title: Not found +# This page was previously titled "Interactive Tutorial - Scaling Your App" +# before Katacoda shut down. +# +# There is no need to localize this Not Found page; the website automatically +# serves a 404 response when a page is missing. If you have an existing localized +# version of this page, it is OK to remove that localized version. weight: 20 headless: true toc_hide: true diff --git a/content/en/docs/tutorials/kubernetes-basics/update/update-interactive.html b/content/en/docs/tutorials/kubernetes-basics/update/update-interactive-gone.html similarity index 65% rename from content/en/docs/tutorials/kubernetes-basics/update/update-interactive.html rename to content/en/docs/tutorials/kubernetes-basics/update/update-interactive-gone.html index 759cc7d19b..ee8fb48a4e 100644 --- a/content/en/docs/tutorials/kubernetes-basics/update/update-interactive.html +++ b/content/en/docs/tutorials/kubernetes-basics/update/update-interactive-gone.html @@ -1,5 +1,11 @@ --- -title: Interactive Tutorial - Updating Your App +title: Not found +# This page was previously titled "Interactive Tutorial - Updating Your App" +# before Katacoda shut down. +# +# There is no need to localize this Not Found page; the website automatically +# serves a 404 response when a page is missing. If you have an existing localized +# version of this page, it is OK to remove that localized version. weight: 20 headless: true toc_hide: true diff --git a/static/_redirects b/static/_redirects index ef73f7b469..7133d75353 100644 --- a/static/_redirects +++ b/static/_redirects @@ -34,6 +34,14 @@ /docs/reference/kubectl/cheatsheet/ /docs/reference/kubectl/quick-reference/ 301 /kubectlguide /docs/reference/kubectl/quick-reference/ 302 +# Serve custom "not found" pages +/docs/tutorials/kubernetes-basics/expose/expose-interactive/ /docs/tutorials/kubernetes-basics/expose/expose-interactive-gone/ 404 +/docs/tutorials/kubernetes-basics/scale/scale-interactive/ /docs/tutorials/kubernetes-basics/scale/scale-interactive-gone/ 404 +/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive/ /docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive-gone/ 404 +/docs/tutorials/kubernetes-basics/explore/explore-interactive/ /docs/tutorials/kubernetes-basics/explore/explore-interactive-gone/ 404 +/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive/ /docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive-gone/ 404 +/docs/tutorials/kubernetes-basics/update/update-interactive/ /docs/tutorials/kubernetes-basics/update/update-interactive-gone/ 404 + /docs/concepts/abstractions/controllers/garbage-collection/ /docs/concepts/workloads/controllers/garbage-collection/ 301 /docs/concepts/abstractions/controllers/statefulsets/ /docs/concepts/workloads/controllers/statefulset/ 301 /docs/concepts/abstractions/init-containers/ /docs/concepts/workloads/pods/init-containers/ 301 From d4c3aa474cdef5c766c78a9161b1ca933847d4c0 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Tue, 7 May 2024 00:10:53 +0100 Subject: [PATCH 0981/1086] Use Docsy-style callouts Adopt callout (notices) that match the Docsy theme we use. Co-authored-by: Dipesh Rawat --- assets/scss/_custom.scss | 25 ++++++++++++++++++++++--- layouts/shortcodes/caution.html | 12 ++++++++++-- layouts/shortcodes/note.html | 14 +++++++++++--- layouts/shortcodes/warning.html | 13 ++++++++++--- 4 files changed, 53 insertions(+), 11 deletions(-) diff --git a/assets/scss/_custom.scss b/assets/scss/_custom.scss index 06f511a9f9..66d2f15241 100644 --- a/assets/scss/_custom.scss +++ b/assets/scss/_custom.scss @@ -497,14 +497,33 @@ body { border-left-width: calc(max(0.5em, 4px)); border-top-left-radius: calc(max(0.5em, 4px)); border-bottom-left-radius: calc(max(0.5em, 4px)); + padding-top: 0.75rem; } - .alert.callout.caution { + .alert.alert-caution { border-left-color: #f0ad4e; } - .alert.callout.note { + .alert.alert-info { border-left-color: #428bca; + h4, h4.alert-heading { + color: #000; + display: block; + float: left; + font-size: 1rem; + padding: 0; + padding-right: 0.5rem; + margin: 0; + line-height: 1.5; + font-weight: bolder; + } } - .alert.callout.warning { + .alert.alert-caution { + border-left-color: #f0ad4e; + h4, h4.alert-heading { + font-size: 1em; + font-weight: bold; + } + } + .alert.alert-warning { border-left-color: #d9534f; } .alert.third-party-content { diff --git a/layouts/shortcodes/caution.html b/layouts/shortcodes/caution.html index 6df243b7c0..06d1ed70c1 100644 --- a/layouts/shortcodes/caution.html +++ b/layouts/shortcodes/caution.html @@ -1,3 +1,11 @@ - From bd6541b8feff612acf72ce970d4b8abe4ee65cf2 Mon Sep 17 00:00:00 2001 From: Leon Welchert Date: Fri, 10 May 2024 17:24:47 +0200 Subject: [PATCH 0984/1086] Rewrite Security information about LegacyServiceAccountTokenNoAutoGeneration feature gate --- .../en/docs/concepts/security/service-accounts.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/content/en/docs/concepts/security/service-accounts.md b/content/en/docs/concepts/security/service-accounts.md index 088591bbb2..95fde2f28a 100644 --- a/content/en/docs/concepts/security/service-accounts.md +++ b/content/en/docs/concepts/security/service-accounts.md @@ -180,13 +180,11 @@ following methods: rotates the token before it expires. * [Service Account Token Secrets](/docs/tasks/configure-pod-container/configure-service-account/#manually-create-an-api-token-for-a-serviceaccount) (not recommended): You can mount service account tokens as Kubernetes - Secrets in Pods. These tokens don't expire and don't rotate. - This method is not recommended, especially at scale, because of the risks associated - with static, long-lived credentials. In Kubernetes v1.24 and later, the - [LegacyServiceAccountTokenNoAutoGeneration feature gate](/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-graduated-or-deprecated-features) - prevents Kubernetes from automatically creating these tokens for - ServiceAccounts. `LegacyServiceAccountTokenNoAutoGeneration` is enabled - by default; in other words, Kubernetes does not create these tokens. + Secrets in Pods. These tokens don't expire and don't rotate. In versions prior to v1.24, a permanent token was automatically created for each service account. + This method is not recommended anymore, especially at scale, because of the risks associated + with static, long-lived credentials. The [LegacyServiceAccountTokenNoAutoGeneration feature gate](/docs/reference/command-line-tools-reference/feature-gates-removed) + (which was enabled by default from Kubernetes v1.24 to v1.26), prevented Kubernetes from automatically creating these tokens for + ServiceAccounts. The feature gate is removed in v1.27, because it was elevated to GA status; you can still create indefinite service account tokens manually, but should take into account the security implications. {{< note >}} For applications running outside your Kubernetes cluster, you might be considering From e06dcefabf11bde9747e3c6d481fe7e53f30fbdf Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sun, 12 May 2024 14:53:14 +0800 Subject: [PATCH 0985/1086] [zh-cn]sync kubeadm_init kubeadm_init_phase_control-plane_apiserver Signed-off-by: xin.li --- .../kubeadm/generated/kubeadm_init.md | 18 +++++++++++------- ...beadm_init_phase_control-plane_apiserver.md | 14 ++++++++------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md index bb5c6728f3..561bfe774e 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md @@ -34,6 +34,7 @@ certs Certificate generation /sa Generate a private key for signing service account tokens along with its public key kubeconfig Generate all kubeconfig files necessary to establish the control plane and the admin kubeconfig file /admin Generate a kubeconfig file for the admin to use and for kubeadm itself + /super-admin Generate a kubeconfig file for the super-admin /kubelet Generate a kubeconfig file for the kubelet to use *only* for cluster bootstrapping purposes /controller-manager Generate a kubeconfig file for the controller manager to use /scheduler Generate a kubeconfig file for the scheduler to use @@ -146,10 +147,11 @@ The path where to save and store the certificates.

    用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。 +证书密钥为十六进制编码的字符串,是大小为 32 字节的 AES 密钥。

    @@ -218,16 +220,18 @@ Don't apply any changes; just output what would be done. 一组用来描述各种功能特性的键值(key=value)对。选项是:
    -EtcdLearnerMode=true|false (ALPHA - 默认值=false)
    -PublicKeysECDSA=true|false (ALPHA - 默认值=false)
    +EtcdLearnerMode=true|false (BETA - 默认值=true)
    +PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
    RootlessControlPlane=true|false (ALPHA - 默认值=false)
    -UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false) +UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
    +WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md index f902fe7400..ca95b06cd6 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md @@ -144,17 +144,19 @@ Don't apply any changes; just output what would be done.

    一组键值对,用于描述各种功能特性的特性门控。选项是:
    -EtcdLearnerMode=true|false (ALPHA - 默认值=false)
    -PublicKeysECDSA=true|false (ALPHA - 默认值=false)
    +EtcdLearnerMode=true|false (BETA - 默认值=true)
    +PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
    RootlessControlPlane=true|false (ALPHA - 默认值=false)
    -UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false) +UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
    +WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)

    From e4121c64fc71dd63ff27e50c462c606ff677a9fd Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sun, 12 May 2024 14:44:49 +0800 Subject: [PATCH 0986/1086] [zh-cn]sync kubeadm_config_images_list kubeadm_config_images_pull Signed-off-by: xin.li --- .../generated/kubeadm_config_images_list.md | 14 ++++++++++---- .../generated/kubeadm_config_images_pull.md | 14 ++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md index ec1ac4b47a..2177022878 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md @@ -83,14 +83,20 @@ Output format. One of: text|json|yaml|go-template|go-template-file|template|temp

    一组键值对(key=value),用于描述各种特性。这些选项是:
    -EtcdLearnerMode=true|false (ALPHA - 默认值=false)
    -PublicKeysECDSA=true|false (ALPHA - 默认值=false)
    +EtcdLearnerMode=true|false (BETA - 默认值=true)
    +PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
    RootlessControlPlane=true|false (ALPHA - 默认值=false)
    -UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false) +UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
    +WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)

    diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md index 8742903d47..4d3de981c2 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md @@ -63,13 +63,19 @@ Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this 一系列键值对(key=value),用于描述各种特性。可选项是:
    -EtcdLearnerMode=true|false (ALPHA - 默认值=false)
    -PublicKeysECDSA=true|false (ALPHA - 默认值=false)
    +EtcdLearnerMode=true|false (BETA - 默认值=true)
    +PublicKeysECDSA=true|false (DEPRECATED - 默认值=false)
    RootlessControlPlane=true|false (ALPHA - 默认值=false)
    -UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false) +UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false)
    +WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false) From ac4ba678d488ace0091c2b7d0575ad0c3d1299c1 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sun, 12 May 2024 15:10:22 +0800 Subject: [PATCH 0987/1086] [zh-cn]sync feature-gates/p* Signed-off-by: xin.li --- .../feature-gates/pod-lifecycle-sleep-action.md | 4 ++++ .../feature-gates/pod-scheduling-readiness.md | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/pod-lifecycle-sleep-action.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/pod-lifecycle-sleep-action.md index b095cf5aec..a09659b237 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/pod-lifecycle-sleep-action.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/pod-lifecycle-sleep-action.md @@ -9,6 +9,10 @@ stages: - stage: alpha defaultValue: false fromVersion: "1.29" + toVersion: "1.29" + - stage: beta + defaultValue: true + fromVersion: "1.30" --- @@ -9,6 +13,7 @@ weight: 10 Essa página mostra o processo de instalação do conjunto de ferramentas `kubeadm`. Para mais informações sobre como criar um cluster com o kubeadm após efetuar a instalação, veja a página [Utilizando kubeadm para criar um cluster](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/). +{{< doc-versions-list "installation guide" >}} ## {{% heading "prerequisites" %}} @@ -16,15 +21,29 @@ Para mais informações sobre como criar um cluster com o kubeadm após efetuar * 2 GB ou mais de RAM por máquina (menos que isso deixará pouca memória para as suas aplicações). * 2 CPUs ou mais. * Conexão de rede entre todas as máquinas no cluster. Seja essa pública ou privada. -* Nome da máquina na rede, endereço MAC e producy_uuid únicos para cada nó. Mais detalhes podem ser lidos [aqui](#veficiar-endereco-mac). -* Portas específicas abertas nas suas máquinas. Você poderá ler quais são [aqui](#verificar-portas-necessarias). -* Swap desabilitado. Você *precisa* desabilitar a funcionalidade de swap para que o kubelet funcione de forma correta. +* Nome de host único, endereço MAC e product_uuid para cada nó. Veja [aqui](#verify-mac-address) para mais detalhes. +* Certas portas estão abertas em suas máquinas. Veja [aqui](#check-required-ports) para mais detalhes. +* Configuração de swap. O comportamento padrão do kubelet era falhar ao iniciar se a memória swap fosse detectada em um nó. + O suporte a swap foi introduzido a partir da v1.22. E desde a v1.28, o swap é suportado apenas para cgroup v2; o recurso NodeSwap + do kubelet está em beta, mas desativado por padrão. + * Você **DEVE** desabilitar o swap se o kubelet não estiver configurado corretamente para usar swap. Por exemplo, `sudo swapoff -a` + desabilitará a troca temporariamente. Para tornar essa mudança persistente entre reinicializações, certifique-se de que o swap esteja desabilitado em + arquivos de configuração como `/etc/fstab`, `systemd.swap`, dependendo de como foi configurado em seu sistema. + +{{< note >}} +A instalação do `kubeadm` é feita via binários que usam linkagem dinâmica e assume que seu sistema alvo fornece `glibc`. +Essa é uma suposição razoável em muitas distribuições Linux (incluindo Debian, Ubuntu, Fedora, CentOS, etc.) +mas nem sempre é o caso com distribuições personalizadas e leves que não incluem `glibc` por padrão, como o Alpine Linux. +A expectativa é que a distribuição inclua `glibc` ou uma [camada de compatibilidade](https://wiki.alpinelinux.org/wiki/Running_glibc_programs) +que forneça os símbolos esperados. +{{< /note >}} -## Verificando se o endereço MAC e o product_uiid são únicos para cada nó {#veficiar-endereco-mac} -* Você pode verificar o endereço MAC da interface de rede utilizando o comando `ip link` ou o comando `ipconfig -a`. +## Verifique se o endereço MAC e o product_uuid são únicos para cada nó {#verify-mac-address} + +* Você pode obter o endereço MAC das interfaces de rede usando o comando `ip link` ou `ifconfig -a`. * O product_uuid pode ser verificado utilizando o comando `sudo cat /sys/class/dmi/id/product_uuid`. É provável que dispositivos físicos possuam endereços únicos. No entanto, é possível que algumas máquinas virtuais possuam endereços iguais. O Kubernetes utiliza esses valores para identificar unicamente os nós em um cluster. Se esses valores não forem únicos para cada nó, o processo de instalação pode [falhar](https://github.com/kubernetes/kubeadm/issues/31). @@ -33,66 +52,70 @@ Para mais informações sobre como criar um cluster com o kubeadm após efetuar Se você possuir mais de um adaptador de rede, e seus componentes Kubernetes não forem acessíveis através da rota padrão, recomendamos adicionar o IP das rotas para que os endereços do cluster Kubernetes passem pelo adaptador correto. -## Fazendo com que o iptables enxergue o tráfego agregado +## Verifique as portas necessárias {#check-required-ports} -Assegure-se de que o módulo `br_netfilter` está carregado. Isso pode ser feito executando o comando `lsmod | grep br_netfilter`. Para carrega-lo explicitamente execute `sudo modprobe br_netfilter`. +Essas [portas necessárias](/docs/reference/networking/ports-and-protocols/) +precisam estar abertas para que os componentes do Kubernetes se comuniquem entre si. +Você pode usar ferramentas como [netcat](https://netcat.sourceforge.net) para verificar se uma porta está aberta. Por exemplo: -Como um requisito para que seus nós Linux enxerguem corretamente o tráfego agregado de rede, você deve garantir que a configuração `net.bridge.bridge-nf-call-iptables` do seu `sysctl` está configurada com valor 1. Como no exemplo abaixo: - -```bash -cat <}}. -O plugin de rede dos pods que você utiliza também pode requer que algumas portas estejam abertas. Dito que essas portas podem diferir dependendo do plugin, por favor leia a documentação dos plugins sobre quais portas serão necessárias abrir. +Por padrão, o Kubernetes usa a +{{< glossary_tooltip term_id="cri" text="Interface de Runtime de Container">}} (CRI) +para se comunicar com o runtime de contêiner escolhido. -## Instalando o agente de execução de contêineres {#instalando-agente-de-execucao} +Se você não especificar um runtime, o kubeadm tentará detectar automaticamente um runtime de contêiner instalado +varrendo uma lista de endpoints conhecidos. -Para executar os contêineres nos Pods, o Kubernetes utiliza um -{{< glossary_tooltip term_id="container-runtime" text="agente de execução" >}}. +Se múltiplos ou nenhum runtime de contêiner forem detectados, o kubeadm lançará um erro +e solicitará que você especifique qual deles deseja usar. + +Veja [runtimes de container](/docs/setup/production-environment/container-runtimes/) +para mais informações. + +{{< note >}} +O Docker Engine não implementa a [CRI](/docs/concepts/architecture/cri/) +que é um requisito para um runtime de contêiner trabalhar com o Kubernetes. +Por essa razão, um serviço adicional [cri-dockerd](https://mirantis.github.io/cri-dockerd/) +deve ser instalado. cri-dockerd é um projeto baseado no suporte integrado legado +do Docker Engine que foi [removido](/dockershim) do kubelet na versão 1.24. +{{< /note >}} + +As tabelas abaixo incluem os endpoints conhecidos para sistemas operacionais suportados: {{< tabs name="container_runtime" >}} -{{% tab name="Nós Linux" %}} +{{% tab name="Linux" %}} -Por padrão, o Kubernetes utiliza a {{< glossary_tooltip term_id="cri" text="interface do agente de execução">}} (CRI) para interagir com o seu agente de execução de contêiner escolhido. - -Se você não especificar nenhum agente de execução, o kubeadm irá tentar identifica-lo automaticamente através de uma lista dos sockets Unix mais utilizados. A tabela a seguir lista os agentes de execução e os caminhos dos sockets a eles associados. - -{{< table caption = "Agentes de execução e seus caminhos de socket" >}} -| Agente de execução | Caminho do socket Unix | -|------------|-----------------------------------| -| Docker | `/var/run/dockershim.sock` | -| containerd | `/run/containerd/containerd.sock` | -| CRI-O | `/var/run/crio/crio.sock` | +{{< table caption="Runtimes de contêiner para Linux" >}} +| Agente de execução | Caminho para o socket de domínio Unix | +|------------------------------------|---------------------------------------------------------| +| containerd | `unix:///var/run/containerd/containerd.sock` | +| CRI-O | `unix:///var/run/crio/crio.sock` | +| Docker Engine (usando cri-dockerd) | `unix:///var/run/cri-dockerd.sock` | {{< /table >}} -
    -Se tanto o Docker quanto o containerd forem detectados no sistema, o Docker terá precedência. Isso acontece porque o Docker, desde a versão 18.09, já incluí o containerd e ambos são detectaveis mesmo que você só tenha instalado o Docker. Se outros dois ou mais agentes de execução forem detectados, o kubeadm é encerrado com um erro. - -O kubelet se integra com o Docker através da implementação CRI `dockershim` já inclusa. - -Veja a página dos [agentes de execução](/docs/setup/production-environment/container-runtimes/) -para mais detalhes. {{% /tab %}} -{{% tab name="Outros sistemas operacionais" %}} -Por padrão, o kubeadm utiliza o {{< glossary_tooltip term_id="docker" >}} como agente de execução. -O kubelet se integra com o Docker através da implementação CRI `dockershim` já inclusa. -Veja a página dos [agentes de execução](/docs/setup/production-environment/container-runtimes/) -para mais detalhes. +{{% tab name="Windows" %}} + +{{< table caption="Runtimes de contêiner para Windows" >}} +| Runtime | Caminho para o pipe nomeado do Windows | +|------------------------------------|---------------------------------------------------------| +| containerd | `npipe:////./pipe/containerd-containerd` | +| Docker Engine (usando cri-dockerd) | `npipe:////./pipe/cri-dockerd` | +{{< /table >}} + {{% /tab %}} {{< /tabs >}} @@ -101,18 +124,20 @@ para mais detalhes. Você instalará esses pacotes em todas as suas máquinas: -* `kubeadm`: o comando para criar o cluster. +* `kubeadm`: o comando para iniciar o cluster. -* `kubelet`: o componente que executa em todas as máquinas no seu cluster e cuida de tarefas como a inicialização de pods e contêineres. +* `kubelet`: o componente que executa em todas as máquinas do seu cluster + e faz coisas como iniciar Pods e contêiners. -* `kubectl`: a ferramenta de linha de comando para interação com o cluster. +* `kubectl`: o utilitário de linha de comando para interagir com o cluster. O kubeadm **não irá** instalar ou gerenciar o `kubelet` ou o `kubectl` para você, então você -precisará garantir que as versões deles são as mesmas da versão da camada de gerenciamento do Kubernetes -que você quer que o kubeadm instale. Caso isso não seja feito, surge o risco de que uma diferença nas versões +precisará garantir que eles correspondam à versão da camada de gerenciamento do Kubernetes +que você deseja que o `kubeadm` instale para você. Caso isso não seja feito, surge o risco de que uma diferença nas versões leve a bugs e comportamentos inesperados. Dito isso, _uma_ diferença de menor grandeza nas versões entre o kubelet e a camada de gerenciamento é suportada, mas a versão do kubelet nunca poderá ser superior à versão do servidor da API. -Por exemplo, um kubelet com a versão 1.7.0 será totalmente compatível com a versão 1.8.0 do servidor da API, mas o contrário não será verdadeiro. +Por exemplo, o kubelet executando 1.7.0 deve ser totalmente compatível com um servidor da API 1.8.0, +mas não o contrário. Para mais informações acerca da instalação do `kubectl`, veja [Instale e configure o kubectl](/docs/tasks/tools/). @@ -123,29 +148,52 @@ Isso ocorre porque o kubeadm e o Kubernetes requerem alguns [cuidados especiais Para mais detalhes sobre compatibilidade entre as versões, veja: -* [Políticas de versão e compatibilidade entre versões](/docs/setup/release/version-skew-policy/) do Kubernetes. -* [Compatibilidade entre versões](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#version-skew-policy) do Kubeadm. +* [Políticas de versão e compatibilidade entre versões](/docs/setup/release/version-skew-policy/) do Kubernetes +* [Política de descompasso de versão específica do Kubeadm](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#version-skew-policy) + +{{% legacy-repos-deprecation %}} + +{{< note >}} +Existe um repositório de pacotes dedicado para cada versão menor do Kubernetes. Se você deseja instalar +uma versão menor diferente da v{{< skew currentVersion >}}, por favor, veja o guia de instalação para +a sua versão menor desejada. +{{< /note >}} {{< tabs name="k8s_install" >}} -{{% tab name="Distribuições Debian" %}} +{{% tab name="Distribuições baseadas em Debian" %}} -1. Atualize o índice de pacotes `apt` e instale os pacotes necessários para utilizar o repositório `apt` do Kubernetes: +Essas instruções são para o Kubernetes v{{< skew currentVersion >}}. + +1. Atualize o índice de pacotes `apt` e instale os pacotes necessários para usar o repositório `apt` do Kubernetes: ```shell sudo apt-get update + # apt-transport-https pode ser um pacote fictício; se for, você pode pular esse pacote sudo apt-get install -y apt-transport-https ca-certificates curl gpg ``` -2. Faça o download da chave de assinatura pública da Google Cloud: +2. Baixe a chave pública de assinatura para os repositórios de pacotes do Kubernetes. + A mesma chave de assinatura é usada para todos os repositórios, então você pode ignorar a versão na URL: ```shell - sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg + # Se o diretório `/etc/apt/keyrings` não existir, ele deve ser criado antes do comando curl, leia a nota abaixo. + # sudo mkdir -p -m 755 /etc/apt/keyrings + curl -fsSL https://pkgs.k8s.io/core:/stable:/{{< param "version" >}}/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg ``` -3. Adicione o repositório `apt` do Kubernetes: +{{< note >}} +Em lançamentos anteriores ao Debian 12 e Ubuntu 22.04, o diretório `/etc/apt/keyrings` não existe por padrão, e deve ser criado antes do comando curl. +{{< /note >}} + +3. Adicione o repositório `apt` apropriado do Kubernetes. Por favor, note que este repositório tem pacotes + apenas para o Kubernetes {{< skew currentVersion >}}; para outras versões menores do Kubernetes, você precisa + mudar a versão menor do Kubernetes na URL para corresponder à sua versão menor desejada + (você também deve verificar se está lendo a documentação para a versão do Kubernetes + que você planeja instalar). ```shell - echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list + # Isso sobrescreve qualquer configuração existente em /etc/apt/sources.list.d/kubernetes.list + echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/{{< param "version" >}}/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list ``` 4. Atualize o índice de pacotes `apt`, instale o kubelet, o kubeadm e o kubectl, e fixe suas versões: @@ -156,98 +204,136 @@ Para mais detalhes sobre compatibilidade entre as versões, veja: sudo apt-mark hold kubelet kubeadm kubectl ``` +5. (Opcional) Habilite o serviço kubelet antes de executar o kubeadm: + + ```shell + sudo systemctl enable --now kubelet + ``` + {{% /tab %}} -{{% tab name="Distribuições Red Hat" %}} -```bash -cat <}}. -sudo systemctl enable --now kubelet -``` + ```shell + # Configure o SELinux em modo permissivo (efetivamente desabilitando-o) + sudo setenforce 0 + sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config + ``` - **Avisos:** +{{< caution >}} +- Configurar o SELinux em modo permissivo ao executar `setenforce 0` e `sed ...` +efetivamente o desabilita. Isso é necessário para permitir que os contêineres acessem o sistema de arquivos do hospedeiro; por exemplo, alguns plugins de rede de cluster requerem isso. Você deve +fazer isso até que o suporte ao SELinux seja melhorado no kubelet. +- Você pode manter o SELinux habilitado se souber como configurá-lo, mas pode ser necessário +configurações que não são suportadas pelo kubeadm. +{{< /caution >}} - - Colocar o SELinux em modo permissivo ao executar `setenforce 0` e `sed ...` efetivamente o desabilita. - Isso é necessário para permitir que os contêineres acessem o sistema de arquivos do hospedeiro, que é utilizado pelas redes dos pods por exemplo. - Você precisará disso até que o suporte ao SELinux seja melhorado no kubelet. +2. Adicione o repositório `yum` do Kubernetes. O parâmetro `exclude` na + definição do repositório garante que os pacotes relacionados ao Kubernetes não + sejam atualizados ao executar `yum update`, já que existe um procedimento especial que + deve ser seguido para atualizar o Kubernetes. Por favor, note que este repositório + tem pacotes apenas para o Kubernetes {{< skew currentVersion >}}; para outras + versões menores do Kubernetes, você precisa mudar a versão menor do Kubernetes + na URL para corresponder à sua versão menor desejada (você também deve verificar se + está lendo a documentação para a versão do Kubernetes que você planeja instalar). - - Você pode deixar o SELinux habilitado se você souber como configura-lo, mas isso pode exegir configurações que não são suportadas pelo kubeadm. + ```shell + # Isso sobrescreve qualquer configuração existente em /etc/yum.repos.d/kubernetes.repo + cat <}}/rpm/ + enabled=1 + gpgcheck=1 + gpgkey=https://pkgs.k8s.io/core:/stable:/{{< param "version" >}}/rpm/repodata/repomd.xml.key + exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni + EOF + ``` + +3. Instale o kubelet, kubeadm e kubectl: + + ```shell + sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes + ``` + +4. (Opcional) Habilite o serviço kubelet antes de executar kubeadm: + + ```shell + sudo systemctl enable --now kubelet + ``` {{% /tab %}} {{% tab name="Sem um gerenciador de pacotes" %}} -Instale os plugins CNI (utilizados por grande parte das redes de pods): +Instale os plugins CNI (utilizados por grande parte das redes de Pods): ```bash -CNI_VERSION="v0.8.2" +CNI_PLUGINS_VERSION="v1.3.0" ARCH="amd64" -sudo mkdir -p /opt/cni/bin -curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-${ARCH}-${CNI_VERSION}.tgz" | sudo tar -C /opt/cni/bin -xz +DEST="/opt/cni/bin" +sudo mkdir -p "$DEST" +curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGINS_VERSION}/cni-plugins-linux-${ARCH}-${CNI_PLUGINS_VERSION}.tgz" | sudo tar -C "$DEST" -xz ``` Escolha o diretório para baixar os arquivos de comandos. {{< note >}} -A variável `DOWNLOAD_DIR` precisa estar configurada para um diretório que permita escrita. -Se você estiver utilizando o Flatcar Container Linux, configure a váriavel de ambiente `DOWNLOAD_DIR=/opt/bin`. +A variável `DOWNLOAD_DIR` deve ser definida para um diretório que permita escrita. +Se você está executando o Flatcar Container Linux, defina `DOWNLOAD_DIR="/opt/bin"`. {{< /note >}} ```bash -DOWNLOAD_DIR=/usr/local/bin -sudo mkdir -p $DOWNLOAD_DIR +DOWNLOAD_DIR="/usr/local/bin" +sudo mkdir -p "$DOWNLOAD_DIR" ``` Instale o crictl (utilizado pelo kubeadm e pela Interface do Agente de execução do Kubelet (CRI)) ```bash -CRICTL_VERSION="v1.22.0" +CRICTL_VERSION="v1.28.0" ARCH="amd64" curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz ``` -Instale o `kubeadm`, o `kubelet`, e o `kubectl` e adicione o serviço systemd `kubelet`: +Instale o `kubeadm`, o `kubelet`, e o `kubectl` e adicione um serviço systemd `kubelet`: ```bash RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)" ARCH="amd64" cd $DOWNLOAD_DIR -sudo curl -L --remote-name-all https://dl.k8s.io/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet,kubectl} -sudo chmod +x {kubeadm,kubelet,kubectl} +sudo curl -L --remote-name-all https://dl.k8s.io/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet} +sudo chmod +x {kubeadm,kubelet} -RELEASE_VERSION="v0.4.0" -curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service -sudo mkdir -p /etc/systemd/system/kubelet.service.d -curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf -``` - -Habilite e inicie o `kubelet`: - -```bash -systemctl enable --now kubelet +RELEASE_VERSION="v0.16.2" +curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/krel/templates/latest/kubelet/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /usr/lib/systemd/system/kubelet.service +sudo mkdir -p /usr/lib/systemd/system/kubelet.service.d +curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/krel/templates/latest/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf ``` {{< note >}} -A distribuição Flatcar Container Linux instala o diretório `/usr` como um sistema de arquivos apenas para leitura. -Antes de inicializar o seu cluster, você precisa de alguns passos adicionais para configurar um diretório com escrita. -Veja o [Guia de solução de problemas do Kubeadm](/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/#usr-mounted-read-only/) para aprender como configurar um diretório com escrita. +Por favor, consulte a nota na seção [Antes de começar](#before-you-begin) para distribuições Linux que não incluem `glibc` por padrão. +{{< /note >}} + +Instale `kubectl` seguindo as instruções na [página de Instalação de Ferramentas](/docs/tasks/tools/#kubectl). + +Opcionalmente, habilite o serviço kubelet antes de executar o kubeadm: + +```bash +sudo systemctl enable --now kubelet +``` + +{{< note >}} +A distribuição Flatcar Container Linux monta o diretório `/usr` como um sistema de arquivos somente leitura. +Antes de iniciar seu cluster, você precisa tomar passos adicionais para configurar um diretório gravável. +Veja o [Guia de Solução de Problemas do Kubeadm](/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/#usr-mounted-read-only) +para aprender como configurar um diretório gravável. {{< /note >}} {{% /tab %}} {{< /tabs >}} -O kubelet agora ficará reiniciando de alguns em alguns segundos, enquanto espera por instruções vindas do kubeadm. +O kubelet agora ficará reiniciando de alguns em alguns segundos, enquanto espera por instruções vindas do kubeadm. ## Configurando um driver cgroup From bd86f849b2ce87185e06b8642b78aed7df9a19d2 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sun, 12 May 2024 15:55:19 +0800 Subject: [PATCH 0994/1086] [zh-cn] sync kubectl/_index kubectl quick-reference reference/_index Signed-off-by: xin.li --- content/zh-cn/docs/reference/_index.md | 52 ++++++++----------- .../zh-cn/docs/reference/kubectl/_index.md | 22 ++++---- .../zh-cn/docs/reference/kubectl/kubectl.md | 26 ++++++++++ .../docs/reference/kubectl/quick-reference.md | 27 +++++----- 4 files changed, 74 insertions(+), 53 deletions(-) diff --git a/content/zh-cn/docs/reference/_index.md b/content/zh-cn/docs/reference/_index.md index b6d4aa3dd0..4013137eb2 100644 --- a/content/zh-cn/docs/reference/_index.md +++ b/content/zh-cn/docs/reference/_index.md @@ -140,15 +140,12 @@ operator to use or manage a cluster. * [kube-apiserver configuration (v1alpha1)](/docs/reference/config-api/apiserver-config.v1alpha1/) and [kube-apiserver configuration (v1beta1)](/docs/reference/config-api/apiserver-config.v1beta1/) and [kube-apiserver configuration (v1)](/docs/reference/config-api/apiserver-config.v1/) -* [kube-apiserver encryption (v1)](/docs/reference/config-api/apiserver-encryption.v1/) * [kube-apiserver event rate limit (v1alpha1)](/docs/reference/config-api/apiserver-eventratelimit.v1alpha1/) * [kubelet configuration (v1alpha1)](/docs/reference/config-api/kubelet-config.v1alpha1/) and [kubelet configuration (v1beta1)](/docs/reference/config-api/kubelet-config.v1beta1/) [kubelet configuration (v1)](/docs/reference/config-api/kubelet-config.v1/) -* [kubelet credential providers (v1alpha1)](/docs/reference/config-api/kubelet-credentialprovider.v1alpha1/), - [kubelet credential providers (v1beta1)](/docs/reference/config-api/kubelet-credentialprovider.v1beta1/) and - [kubelet credential providers (v1)](/docs/reference/config-api/kubelet-credentialprovider.v1/) - [kube-scheduler configuration (v1beta3)](/docs/reference/config-api/kube-scheduler-config.v1beta3/) and +* [kubelet credential providers (v1)](/docs/reference/config-api/kubelet-credentialprovider.v1/) +* [kube-scheduler configuration (v1beta3)](/docs/reference/config-api/kube-scheduler-config.v1beta3/) and [kube-scheduler configuration (v1)](/docs/reference/config-api/kube-scheduler-config.v1/) * [kube-controller-manager configuration (v1alpha1)](/docs/reference/config-api/kube-controller-manager-config.v1alpha1/) * [kube-proxy configuration (v1alpha1)](/docs/reference/config-api/kube-proxy-config.v1alpha1/) @@ -164,28 +161,25 @@ operator to use or manage a cluster. 尽管这些 API 对于用户或操作者使用或管理集群来说是必不可少的, 它们大都没有以 RESTful 的方式在 API 服务器上公开。 -* [kubeconfig (v1)](/zh-cn/docs/reference/config-api/kubeconfig.v1/) -* [kube-apiserver 准入 (v1)](/zh-cn/docs/reference/config-api/apiserver-admission.v1/) -* [kube-apiserver 配置 (v1alpha1)](/zh-cn/docs/reference/config-api/apiserver-config.v1alpha1/) 和 - [kube-apiserver 配置 (v1beta1)](/zh-cn/docs/reference/config-api/apiserver-config.v1beta1/) 和 - [kube-apiserver 配置 (v1)](/zh-cn/docs/reference/config-api/apiserver-config.v1/) -* [kube-apiserver 加密 (v1)](/zh-cn/docs/reference/config-api/apiserver-encryption.v1/) -* [kube-apiserver 事件速率限制 (v1alpha1)](/zh-cn/docs/reference/config-api/apiserver-eventratelimit.v1alpha1/) -* [kubelet 配置 (v1alpha1)](/zh-cn/docs/reference/config-api/kubelet-config.v1alpha1/)、 - [kubelet 配置 (v1beta1)](/zh-cn/docs/reference/config-api/kubelet-config.v1beta1/) 和 - [kubelet 配置 (v1)](/zh-cn/docs/reference/config-api/kubelet-config.v1/) -* [kubelet 凭据驱动 (v1alpha1)](/zh-cn/docs/reference/config-api/kubelet-credentialprovider.v1alpha1/)、 - [kubelet 凭据驱动 (v1beta1)](/zh-cn/docs/reference/config-api/kubelet-credentialprovider.v1beta1/) 和 - [kubelet 凭据驱动 (v1)](/zh-cn/docs/reference/config-api/kubelet-credentialprovider.v1/) - [kube-scheduler 配置 (v1beta3)](/zh-cn/docs/reference/config-api/kube-scheduler-config.v1beta3/) 和 - [kube-scheduler 配置 (v1)](/zh-cn/docs/reference/config-api/kube-scheduler-config.v1/) -* [kube-controller-manager 配置 (v1alpha1)](/docs/reference/config-api/kube-controller-manager-config.v1alpha1/) -* [kube-proxy 配置 (v1alpha1)](/zh-cn/docs/reference/config-api/kube-proxy-config.v1alpha1/) +* [kubeconfig(v1)](/zh-cn/docs/reference/config-api/kubeconfig.v1/) +* [kube-apiserver 准入(v1)](/zh-cn/docs/reference/config-api/apiserver-admission.v1/) +* [kube-apiserver 配置(v1alpha1)](/zh-cn/docs/reference/config-api/apiserver-config.v1alpha1/) 和 + [kube-apiserver 配置(v1beta1)](/zh-cn/docs/reference/config-api/apiserver-config.v1beta1/) 和 + [kube-apiserver 配置(v1)](/zh-cn/docs/reference/config-api/apiserver-config.v1/) +* [kube-apiserver 事件速率限制(v1alpha1)](/zh-cn/docs/reference/config-api/apiserver-eventratelimit.v1alpha1/) +* [kubelet 配置(v1alpha1)](/zh-cn/docs/reference/config-api/kubelet-config.v1alpha1/)、 + [kubelet 配置(v1beta1)](/zh-cn/docs/reference/config-api/kubelet-config.v1beta1/) 和 + [kubelet 配置(v1)](/zh-cn/docs/reference/config-api/kubelet-config.v1/) +* [kubelet 凭据驱动(v1)](/zh-cn/docs/reference/config-api/kubelet-credentialprovider.v1/) +* [kube-scheduler 配置(v1)](/zh-cn/docs/reference/config-api/kube-scheduler-config.v1/) 和 + [kube-scheduler 配置(v1beta3)](/zh-cn/docs/reference/config-api/kube-scheduler-config.v1beta3/) +* [kube-controller-manager 配置(v1alpha1)](/docs/reference/config-api/kube-controller-manager-config.v1alpha1/) +* [kube-proxy 配置(v1alpha1)](/zh-cn/docs/reference/config-api/kube-proxy-config.v1alpha1/) * [`audit.k8s.io/v1` API](/zh-cn/docs/reference/config-api/apiserver-audit.v1/) -* [客户端身份认证 API (v1beta1)](/zh-cn/docs/reference/config-api/client-authentication.v1beta1/) 和 - [客户端身份认证 API (v1)](/zh-cn/docs/reference/config-api/client-authentication.v1/) -* [WebhookAdmission 配置 (v1)](/zh-cn/docs/reference/config-api/apiserver-webhookadmission.v1/) -* [ImagePolicy API (v1alpha1)](/zh-cn/docs/reference/config-api/imagepolicy.v1alpha1/) +* [客户端身份认证 API(v1beta1)](/zh-cn/docs/reference/config-api/client-authentication.v1beta1/) 和 + [客户端身份认证 API(v1)](/zh-cn/docs/reference/config-api/client-authentication.v1/) +* [WebhookAdmission 配置(v1)](/zh-cn/docs/reference/config-api/apiserver-webhookadmission.v1/) +* [ImagePolicy API(v1alpha1)](/zh-cn/docs/reference/config-api/imagepolicy.v1alpha1/) 本文概述了 `kubectl` 语法和命令操作描述,并提供了常见的示例。 有关每个命令的详细信息,包括所有受支持的参数和子命令, -请参阅 [kubectl](/docs/reference/generated/kubectl/kubectl-commands/) 参考文档。 +请参阅 [kubectl](/zh-cn/docs/reference/kubectl/generated/kubectl/) 参考文档。 有关安装说明,请参见[安装 kubectl](/zh-cn/docs/tasks/tools/#kubectl); -如需快速指南,请参见[备忘单](/zh-cn/docs/reference/kubectl/cheatsheet/)。 +如需快速指南,请参见[备忘单](/zh-cn/docs/reference/kubectl/quick-reference/)。 如果你更习惯使用 `docker` 命令行工具, [Docker 用户的 `kubectl`](/zh-cn/docs/reference/kubectl/docker-cli-to-kubectl/) 介绍了一些 Kubernetes 的等价命令。 @@ -300,14 +300,14 @@ Operation | Syntax | Description `scale` | kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] | Update the size of the specified replication controller. `set` | `kubectl set SUBCOMMAND [options]` | Configure application resources. `taint` | `kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]` | Update the taints on one or more nodes. -`top` | `kubectl top (POD | NODE) [flags] [options]` | Display Resource (CPU/Memory/Storage) usage. +`top` | kubectl top (POD | NODE) [flags] [options] | Display Resource (CPU/Memory/Storage) usage of pod or node. `uncordon` | `kubectl uncordon NODE [options]` | Mark node as schedulable. `version` | `kubectl version [--client] [flags]` | Display the Kubernetes version running on the client and server. `wait` | kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options] | Experimental: Wait for a specific condition on one or many resources. --> 操作 | 语法 | 描述 -------------------- | -------------------- | -------------------- -`alpha` | `kubectl alpha SUBCOMMAND [flags]` | 列出与 alpha 特性对应的可用命令,这些特性在 Kubernetes 集群中默认情况下是不启用的。 +`alpha` | `kubectl alpha SUBCOMMAND [flags]` | 列出与 Alpha 级别特性对应的可用命令,这些特性在 Kubernetes 集群中默认情况下是不启用的。 `annotate` | kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | 添加或更新一个或多个资源的注解。 `api-resources` | `kubectl api-resources [flags]` | 列出可用的 API 资源。 `api-versions` | `kubectl api-versions [flags]` | 列出可用的 API 版本。 @@ -325,7 +325,7 @@ Operation | Syntax | Description `create` | `kubectl create -f FILENAME [flags]` | 从文件或 stdin 创建一个或多个资源。 `delete` | kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] | 基于文件、标准输入或通过指定标签选择器、名称、资源选择器或资源本身,删除资源。 `describe` | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] | 显示一个或多个资源的详细状态。 -`diff` | `kubectl diff -f FILENAME [flags]`| 在当前起作用的配置和文件或标准输之间作对比 (**BETA**) +`diff` | `kubectl diff -f FILENAME [flags]`| 在当前起作用的配置和文件或标准输之间作对比(**BETA**) `drain` | `kubectl drain NODE [options]` | 腾空节点以准备维护。 `edit` | kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] | 使用默认编辑器编辑和更新服务器上一个或多个资源的定义。 `events` | `kubectl events` | 列举事件。 @@ -347,7 +347,7 @@ Operation | Syntax | Description `scale` | kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] | 更新指定副本控制器的大小。 `set` | `kubectl set SUBCOMMAND [options]` | 配置应用资源。 `taint` | `kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]` | 更新一个或多个节点上的污点。 -`top` | `kubectl top (POD | NODE) [flags] [options]` | 显示资源(CPU、内存、存储)的使用情况。 +`top` | kubectl top (POD | NODE) [flags] [options] | 显示 Pod 或节点的资源(CPU/内存/存储)使用情况。 `uncordon` | `kubectl uncordon NODE [options]` | 将节点标记为可调度。 `version` | `kubectl version [--client] [flags]` | 显示运行在客户端和服务器上的 Kubernetes 版本。 `wait` | kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options] | 实验特性:等待一种或多种资源的特定状况。 @@ -839,7 +839,6 @@ kubectl exec -c -- date # Get an interactive TTY and run /bin/bash from pod . By default, output is from the first container. kubectl exec -ti -- /bin/bash --> - ```shell # 从 Pod 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。 kubectl exec -- date @@ -963,6 +962,7 @@ kubectl hello ``` hello world ``` + * 阅读 `kubectl` 参考文档: * kubectl [命令参考](/zh-cn/docs/reference/kubectl/kubectl/) - * 参考[命令行参数](/docs/reference/generated/kubectl/kubectl-commands/) + * 参考[命令行参数](/docs/reference/kubectl/generated/kubectl/) * 学习关于 [`kubectl` 使用约定](/zh-cn/docs/reference/kubectl/conventions/) * 阅读 kubectl 中的 [JSONPath 支持](/zh-cn/docs/reference/kubectl/jsonpath/) * 了解如何[使用插件扩展 kubectl](/zh-cn/docs/tasks/extend-kubectl/kubectl-plugins) diff --git a/content/zh-cn/docs/reference/kubectl/kubectl.md b/content/zh-cn/docs/reference/kubectl/kubectl.md index 09d6bdfe5e..ee9c620195 100644 --- a/content/zh-cn/docs/reference/kubectl/kubectl.md +++ b/content/zh-cn/docs/reference/kubectl/kubectl.md @@ -518,6 +518,18 @@ When set to false, turns off extra HTTP headers detailing invoked kubectl comman + +KUBECTL_DEBUG_CUSTOM_PROFILE + + + + +设置为 true 时,将在 kubectl 调试中启用自定义标志,该标志用于自定义预定义的配置文件。 + + + KUBECTL_EXPLAIN_OPENAPIV3 @@ -543,6 +555,20 @@ When set to true, external plugins can be used as subcommands for builtin comman + +KUBECTL_PORT_FORWARD_WEBSOCKETS + + + + +当设置为 true 时,`kubectl port-forward` 命令将尝试使用 WebSocket 协议进行流式传输。 +如果升级到 WebSocket 失败,命令将回退到使用当前的 SPDY 协议。 + + + KUBECTL_REMOTE_COMMAND_WEBSOCKETS diff --git a/content/zh-cn/docs/reference/kubectl/quick-reference.md b/content/zh-cn/docs/reference/kubectl/quick-reference.md index 94685d1271..16b0194e1a 100644 --- a/content/zh-cn/docs/reference/kubectl/quick-reference.md +++ b/content/zh-cn/docs/reference/kubectl/quick-reference.md @@ -40,7 +40,7 @@ These instructions are for Kubernetes v{{< skew currentVersion >}}. To check the ### BASH --> -## Kubectl 自动补全 {#kubectl-autocomplete} +## kubectl 自动补全 {#kubectl-autocomplete} ### BASH @@ -79,18 +79,15 @@ echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc ### FISH +{{< note >}} - 需要 kubectl 版本 1.23 或更高版本。 +{{< /note >}} ```bash -echo 'kubectl completion fish | source' >> ~/.config/fish/config.fish # 将 kubectl 自动补全永久添加到你的 Fish shell 中 +echo 'kubectl completion fish | source' > ~/.config/fish/completions/kubectl.fish && source ~/.config/fish/completions/kubectl.fish ``` -## Kubectl 上下文和配置 {#kubectl-context-and-configuration} +## kubectl 上下文和配置 {#kubectl-context-and-configuration} 设置 `kubectl` 与哪个 Kubernetes 集群进行通信并修改配置信息。 查看[使用 kubeconfig 跨集群授权访问](/zh-cn/docs/tasks/access-application-cluster/configure-access-multiple-clusters/) @@ -217,12 +214,12 @@ alias kn='f() { [ "$1" ] && kubectl config set-context --current --namespace $1 `apply` manages applications through files defining Kubernetes resources. It creates and updates resources in a cluster through running `kubectl apply`. This is the recommended way of managing Kubernetes applications on production. See [Kubectl Book](https://kubectl.docs.kubernetes.io). --> -## Kubectl apply +## kubectl apply `apply` 通过定义 Kubernetes 资源的文件来管理应用。 它通过运行 `kubectl apply` 在集群中创建和更新资源。 这是在生产中管理 Kubernetes 应用的推荐方法。 -参见 [Kubectl 文档](https://kubectl.docs.kubernetes.io/zh/)。 +参见 [kubectl 文档](https://kubectl.docs.kubernetes.io/zh/)。 -### Kubectl 日志输出详细程度和调试 {#kubectl-output-verbosity-and-debugging} +### kubectl 日志输出详细程度和调试 {#kubectl-output-verbosity-and-debugging} -Kubectl 日志输出详细程度是通过 `-v` 或者 `--v` 来控制的,参数后跟一个数字表示日志的级别。 +kubectl 日志输出详细程度是通过 `-v` 或者 `--v` 来控制的,参数后跟一个数字表示日志的级别。 Kubernetes 通用的日志习惯和相关的日志级别在 [这里](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md)有相应的描述。 From ee3761b94c47b9a73d2b9284a02988355ab38b49 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sun, 12 May 2024 17:25:14 +0800 Subject: [PATCH 0995/1086] [zh-cn] Locaization blog: 2024-04-11-SIG-Architecture-Code-Organization-Spotlight.md Signed-off-by: xin.li --- ...rchitecture-Code-Organization-Spotlight.md | 270 ++++++++++++++++++ 1 file changed, 270 insertions(+) create mode 100644 content/zh-cn/blog/_posts/2024-04-11-SIG-Architecture-Code-Organization-Spotlight.md diff --git a/content/zh-cn/blog/_posts/2024-04-11-SIG-Architecture-Code-Organization-Spotlight.md b/content/zh-cn/blog/_posts/2024-04-11-SIG-Architecture-Code-Organization-Spotlight.md new file mode 100644 index 0000000000..0a8fc3f579 --- /dev/null +++ b/content/zh-cn/blog/_posts/2024-04-11-SIG-Architecture-Code-Organization-Spotlight.md @@ -0,0 +1,270 @@ +--- +layout: blog +title: "SIG Architecture 特别报道:代码组织" +slug: sig-architecture-code-spotlight-2024 +canonicalUrl: https://www.kubernetes.dev/blog/2024/04/11/sig-architecture-code-spotlight-2024 +date: 2024-04-11 +--- + + + +**作者:** Frederico Muñoz (SAS Institute) + +**译者:** Xin Li (DaoCloud) + + +**这是 SIG Architecture Spotlight 系列的第三次采访,该系列将涵盖不同的子项目。 +我们将介绍 [SIG Architecture:代码组织](https://github.com/kubernetes/community/blob/e44c2c9d0d3023e7111d8b01ac93d54c8624ee91/sig-architecture/README.md#code-organization)。** + +在本次 SIG Architecture 聚焦中,我与代码组织子项目的成员 +[Madhav Jivrajani](https://github.com/MadhavJivrajani)(VMware)进行了交谈。 + + +## 介绍代码组织子项目 + +**Frederico (FSM)**:你好,Madhav,感谢你百忙之中接受我们的采访。你能否首先向我们介绍一下你自己、你的角色以及你是如何参与 Kubernetes 的? + + +**Madhav Jivrajani (MJ)**:你好!我叫 Madhav Jivrajani,担任 SIG 贡献者体验的技术主管和 Kubernetes 项目的 GitHub 管理员。 +除此之外,我还为 SIG API Machinery 和 SIG Etcd 做出贡献,但最近,我一直在帮助完成 Kubernetes +[保留受支持的 Go 版本](https://github.com/kubernetes/enhancements/tree/cf6ee34e37f00d838872d368ec66d7a0b40ee4e6/keps/sig-release/3744-stay-on-supported-go-versions) 所需的工作, +正是通过这一点,参与到了 SIG Architecture 的代码组织子项目中。 + + +**FSM**:像 Kubernetes 这样规模的项目在代码组织方面肯定会遇到独特的挑战 -- 这是一个合理的假设吗? +如果是这样,你认为 Kubernetes 特有的一些主要挑战是什么? + + +**MJ**:这是一个合理的假设!第一个有趣的挑战来自 Kubernetes 代码库的庞大规模。 +我们有大约 220 万行 Go 代码(由于 [dims](https://github.com/dims) 和这个子项目中的其他人的努力,该代码正在稳步减少!), +而且我们的依赖项(无论是直接还是间接)超过 240 个,这就是为什么拥有一个致力于帮助进行依赖项管理的子项目至关重要: +我们需要知道我们正在引入哪些依赖项,这些依赖项处于什么版本, +以及帮助确保我们能够以一致的方式管理代码库不同部分的依赖关系的工具。 +以一致的方式管理代码库不同部分的这些依赖关系。 + + +Kubernetes 的另一个有趣的挑战是,我们在 Kubernetes 发布周期中发布了许多 Go 模块,其中一个例子是 +[`client-go`](https://github.com/kubernetes/client-go)。 +然而,作为一个项目,我们也希望将所有内容都放在一个仓库中,便获得使用单一仓库的优势,例如原子性的提交…… +因此,代码组织与其他 SIG(例如 SIG Release)合作,以实现将代码从单一仓库发布到下游仓库的自动化过程, +下游仓库更容易使用,因为你就不必导入整个 Kubernetes 代码库! + + +## 代码组织和 Kubernetes + +**FSM**:对于刚刚开始为 Kubernetes 代码做出贡献的人来说,在代码组织方面他们应该考虑的主要事项是什么? +你认为有哪些关键概念? + +**MJ**:我认为至少在开始时要记住的关键事情之一是 staging 目录的概念。 +在 [`kubernetes/kubernetes`](https://github.com/kubernetes/kubernetes) 中,你会遇到一个名为 +[`staging/`](https://github.com/kubernetes/kubernetes/tree/master/staging) 的目录。 +该目录中的子文件夹充当一堆伪仓库。 +例如,发布 `client-go` 版本的 [`kubernetes/client-go`](https://github.com/kubernetes/client-go) +仓库实际上是一个 [staging 仓库](https://github.com/kubernetes/kubernetes/tree/master/staging/src/k8s.io/client-go)。 + + + +**FSM**:那么 staging 目录的概念会从根本上影响贡献? + +**MJ**:准确地说,因为如果你想为任何 staging 仓库做出贡献,你需要将 PR 发送到 `kubernetes/kubernetes` 中相应的 staging 目录。 +一旦代码合并到那里,我们就会让一个名为 [`publishing-bot`](https://github.com/kubernetes/publishing-bot) +的机器人将合并的提交同步到必要的 staging 仓库(例如 `kubernetes/client-go`)中。 +通过这种方式,我们可以获得单一仓库的好处,但我们也可以以模块化的形式发布代码以供下游使用。 +PS:`publishing-bot` 需要更多人的帮助! + + +**FSM**:说到贡献,贡献者数量非常多,包括个人和公司,也一定是一个挑战:这个子项目是如何运作的以确保大家都遵循标准呢? + + +**MJ**:当涉及到项目中的依赖关系管理时, +有一个[专门团队](https://github.com/kubernetes/org/blob/a106af09b8c345c301d072bfb7106b309c0ad8e9/config/kubernetes/org.yaml#L1329)帮助审查和批准依赖关系更改。 +这些人为目前 Kubernetes 用于管理依赖的许多[工具](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/vendor.md)做了开拓性的工作。 +这些工具帮助我们确保贡献者可以以一致的方式更改依赖项。 +这个子项目还开发了其他工具来基于被添加或删除的依赖项的统计信息发出通知: +[`depstat`](https://github.com/kubernetes-sigs/depstat) + + +除了依赖管理之外,这个项目执行的另一项重要任务是管理 staging 仓库。 +用于实现此目的的工具(`publishing-bot`)对贡献者完全透明, +有助于确保就提交给 `kubernetes/kubernetes` 的贡献而言,各个 staging 仓库获得的视图是一致的。 + +代码组织还致力于确保 Kubernetes +[一直在使用受支持的 Go 版本](https://github.com/kubernetes/enhancements/tree/cf6ee34e37f00d838872d368ec66d7a0b40ee4e6/keps/sig-release/3744-stay-on-supported-go-versions)。 +链接所指向的 KEP 中包含更详细的背景信息,用来说明为什么我们需要这样做。 +我们与 SIG Release 合作,确保我们在 Go 版本上尽可能严格、尽早地测试 Kubernetes; +作为这些工作的一部分,我们要处理会破坏我们的 CI 的那些变更。 +我们如何跟踪此过程的示例可以在[此处](https://github.com/kubernetes/release/issues/3076)找到。 + + +## 发布周期和当前优先级 + +**FSM**:在发布周期中有什么变化吗? + +**MJ**:在发布周期内,特别是在代码冻结之前,通常会发生添加、更新、删除依赖项的变更,以及修复需要修复的代码等更改, +这些都是我们继续使用受支持的 Go 版本的努力的一部分。 + +此外,其中一些更改也可以[向后移植](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-release/cherry-picks.md) +到我们支持的发布分支。 + + +**FSM**:就子项目中目前正在进行的主要项目或主题而言你有什么要特别强调的吗? + +**MJ**:我认为最近添加的一个非常有趣且非常有用的变更(我借这个机会特别强调 +[Tim Hockin](https://github.com/thockin) 在这方面的工作)是引入 +[Go 工作空间的概念到Kubernetes 仓库中](https://www.kubernetes.dev/blog/2024/03/19/go-workspaces-in-kubernetes/)。 +我们当前的许多依赖管理和代码发布工具,以及在 Kubernetes 仓库中编辑代码的体验, +都可以通过此更改得到显着改善。 + + +## 收尾 + +**FSM**:对这个主题感兴趣的人要怎样开始帮助这个子项目? + +**MJ**:与 Kubernetes 中任何项目的第一步一样,第一步是加入我们的 +Slack:[slack.k8s.io](https://slack.k8s.io),然后加入 `#k8s-code-organization` 频道, +你还可以选择参加[代码组织办公时间](https://github.com/kubernetes/community/tree/master/sig-architecture#meetings)。 +时区是个困难点,所以请随时查看录音或会议记录并跟进 Slack! + + +**FSM**:非常好,谢谢!最后你还有什么想分享的吗? + +**MJ**:代码组织子项目总是需要帮助!特别是像发布机器人这样的领域,所以请不要犹豫,参与到 `#k8s-code-organization` Slack 频道中。 From dcaafc73350ed45bbad2a2f09615da25239b0e59 Mon Sep 17 00:00:00 2001 From: windsonsea Date: Mon, 13 May 2024 09:52:38 +0800 Subject: [PATCH 0996/1086] [zh] Sync 4 files in reference/glossary --- .../zh-cn/docs/reference/glossary/cri-o.md | 7 +-- .../zh-cn/docs/reference/glossary/index.md | 2 + .../docs/reference/glossary/priority-class.md | 42 ++++++++++++++++ content/zh-cn/docs/reference/glossary/spec.md | 49 +++++++++++++++++++ 4 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 content/zh-cn/docs/reference/glossary/priority-class.md create mode 100644 content/zh-cn/docs/reference/glossary/spec.md diff --git a/content/zh-cn/docs/reference/glossary/cri-o.md b/content/zh-cn/docs/reference/glossary/cri-o.md index c334e7f4ff..2e369e57d1 100644 --- a/content/zh-cn/docs/reference/glossary/cri-o.md +++ b/content/zh-cn/docs/reference/glossary/cri-o.md @@ -22,6 +22,7 @@ aka: tags: - tool --> + @@ -38,13 +39,13 @@ runtimes that are compatible with the Open Container Initiative (OCI) CRI-O 是 {{< glossary_tooltip text="CRI" term_id="cri" >}} 的一种实现, 使得你可以使用与开放容器倡议(Open Container Initiative;OCI) [运行时规范](https://www.github.com/opencontainers/runtime-spec) -兼容的{{< glossary_tooltip text="容器" term_id="container" >}}。 +兼容的{{< glossary_tooltip text="容器" term_id="container" >}}运行时。 -部署 CRI-O 允许 Kubernetes 使用任何符合 OCI 要求的运行时作为容器运行时 -去运行 {{< glossary_tooltip text="Pod" term_id="pod" >}}, +部署 CRI-O 允许 Kubernetes 使用任何符合 OCI 要求的运行时作为容器运行时去运行 +{{< glossary_tooltip text="Pod" term_id="pod" >}}, 并从远程容器仓库获取 OCI 容器镜像。 diff --git a/content/zh-cn/docs/reference/glossary/index.md b/content/zh-cn/docs/reference/glossary/index.md index c672c26acc..130c61722d 100644 --- a/content/zh-cn/docs/reference/glossary/index.md +++ b/content/zh-cn/docs/reference/glossary/index.md @@ -2,6 +2,7 @@ title: 词汇表 layout: glossary noedit: true +body_class: glossary default_active_tag: fundamental weight: 5 card: @@ -16,6 +17,7 @@ approvers: title: Glossary layout: glossary noedit: true +body_class: glossary default_active_tag: fundamental weight: 5 card: diff --git a/content/zh-cn/docs/reference/glossary/priority-class.md b/content/zh-cn/docs/reference/glossary/priority-class.md new file mode 100644 index 0000000000..17f0b54612 --- /dev/null +++ b/content/zh-cn/docs/reference/glossary/priority-class.md @@ -0,0 +1,42 @@ +--- +title: PriorityClass +id: priority-class +date: 2024-03-19 +full_link: /zh-cn/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass +short_description: > + 从类别名称到 Pod 本身调度优先级的映射。 +aka: +tags: +- core-object +--- + + + +PriorityClass 是针对应分配给此类别 Pod 的调度优先级而命名的一种类别。 + + + + +[PriorityClass](/zh-cn/docs/concepts/scheduling-eviction/pod-priority-preemption/#how-to-use-priority-and-preemption) +是用于 Pod 的一个非命名空间对象,负责将某个名称映射到一个整数优先级。 +此名称在 `metadata.name` 字段中指定,优先级值在 `value` 字段中指定。 +优先级范围从 -2147483648 到 1000000000(包含边界值)。 +值越大,优先级越高。 diff --git a/content/zh-cn/docs/reference/glossary/spec.md b/content/zh-cn/docs/reference/glossary/spec.md new file mode 100644 index 0000000000..4574325875 --- /dev/null +++ b/content/zh-cn/docs/reference/glossary/spec.md @@ -0,0 +1,49 @@ +--- +title: Spec +id: spec +date: 2023-12-17 +full_link: /zh-cn/docs/concepts/overview/working-with-objects/#object-spec-and-status +short_description: > + 在 Kubernetes 清单中的此字段用来定义特定 Kubernetes 对象的预期状态或预期配置。 + +aka: +tags: +- fundamental +- architecture +--- + + + +定义 Pod 或 Service 这类每种对象应被如何配置及其预期状态。 + + + + +几乎每个 Kubernetes 对象都包含两个嵌套的对象字段,用于治理对象本身的配置: +对象规约(spec)和对象状态(status)。 +对于具有规约的对象,你必须在创建对象时设置规约,并提供资源所需特征的描述:即其预期状态。 + + +此字段对于 Pod、StatefulSet 和 Service 等不同对象会有所差异, +字段详细说明如容器、卷、副本、端口等设置以及每种对象特有的其他规约。 +此字段封装了 Kubernetes 针对所定义的对象应保持何种状态。 From 4ea20de197f9a9b9ceb5a1f4cd0be1a013be3668 Mon Sep 17 00:00:00 2001 From: Kat Cosgrove Date: Mon, 13 May 2024 09:32:48 +0100 Subject: [PATCH 0997/1086] Adds Kat Cosgrove as SIG Docs tech lead --- OWNERS_ALIASES | 3 +++ SECURITY_CONTACTS | 1 + 2 files changed, 4 insertions(+) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index b815e2fd3c..c64d4bcd36 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -10,6 +10,7 @@ aliases: - sftim sig-docs-website-owners: # Admins for overall website - divya-mohan0209 + - katcosgrove - natalisucks - reylejano - salaxander @@ -55,6 +56,7 @@ aliases: - celestehorgan - dipesh-rawat - divya-mohan0209 + - katcosgrove - natalisucks - nate-double-u - reylejano @@ -65,6 +67,7 @@ aliases: - celestehorgan - dipesh-rawat - divya-mohan0209 + - katcosgrove - kbhawkey - mengjiao-liu - mickeyboxell diff --git a/SECURITY_CONTACTS b/SECURITY_CONTACTS index d5b8f39535..8641869b25 100644 --- a/SECURITY_CONTACTS +++ b/SECURITY_CONTACTS @@ -18,3 +18,4 @@ onlydole kbhawkey natalisucks salaxander +katcosgrove From 343cea90cb68405ab7484297629392671f1bb978 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Mon, 13 May 2024 09:12:56 +0100 Subject: [PATCH 0998/1086] Update list of versions to match English --- .../fr/docs/home/supported-doc-versions.md | 23 +++---------------- data/i18n/fr/fr.toml | 6 +++++ 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/content/fr/docs/home/supported-doc-versions.md b/content/fr/docs/home/supported-doc-versions.md index afd204d041..b99a85a559 100644 --- a/content/fr/docs/home/supported-doc-versions.md +++ b/content/fr/docs/home/supported-doc-versions.md @@ -1,27 +1,10 @@ --- title: Versions supportées de la documentation Kubernetes -description: Documentation de Kubernetes -content_type: concept -card: - name: about - weight: 10 - title: Versions supportées de la documentation +content_type: custom +layout: supported-versions +weight: 10 --- Ce site contient la documentation de la version actuelle de Kubernetes et les quatre versions précédentes de Kubernetes. - - - - - -## Version courante - -La version actuelle est [{{< param "version" >}}](/). - -## Versions précédentes - -{{< versions-other >}} - - diff --git a/data/i18n/fr/fr.toml b/data/i18n/fr/fr.toml index cc902370c0..9d33d2102a 100644 --- a/data/i18n/fr/fr.toml +++ b/data/i18n/fr/fr.toml @@ -1,5 +1,11 @@ # i18n strings for the French (main) site. +[docs_version_latest_heading] +other = "Version courante" + +[docs_version_other_heading] +other = "Versions précédentes" + [deprecation_warning] other = " documentation non maintenue. Vous consultez une version statique. Pour une documentation à jour, veuillez consulter: " From e12802ecf9b5a5e32859dbfa5104b422a990ae0f Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Sat, 11 May 2024 20:51:21 +0100 Subject: [PATCH 0999/1086] Use skew shortcode instead of deprecated param shortcode Co-authored-by: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> --- content/bn/docs/tasks/tools/install-kubectl-linux.md | 4 ++-- content/bn/docs/tasks/tools/install-kubectl-macos.md | 6 +++--- content/bn/docs/tasks/tools/install-kubectl-windows.md | 10 +++++----- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/content/bn/docs/tasks/tools/install-kubectl-linux.md b/content/bn/docs/tasks/tools/install-kubectl-linux.md index 4ced6bda94..054c997f04 100644 --- a/content/bn/docs/tasks/tools/install-kubectl-linux.md +++ b/content/bn/docs/tasks/tools/install-kubectl-linux.md @@ -34,10 +34,10 @@ kubectl এর সর্বশেষ সামঞ্জস্যপূর্ণ {{< note >}} একটি নির্দিষ্ট সংস্করণ ডাউনলোড করতে, নির্দিষ্ট সংস্করণের সাথে কমান্ডের `$(curl -L -s https://dl.k8s.io/release/stable.txt)` অংশটি প্রতিস্থাপন করুন। -উদাহরণস্বরূপ, লিনাক্সে সংস্করণ {{< param "fullversion" >}} ডাউনলোড করতে, টাইপ করুন: +উদাহরণস্বরূপ, লিনাক্সে সংস্করণ {{% skew currentPatchVersion %}} ডাউনলোড করতে, টাইপ করুন: ```bash - curl -LO https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/linux/amd64/kubectl + curl -LO https://dl.k8s.io/release/v{{% skew currentPatchVersion %}}/bin/linux/amd64/kubectl ``` {{< /note >}} diff --git a/content/bn/docs/tasks/tools/install-kubectl-macos.md b/content/bn/docs/tasks/tools/install-kubectl-macos.md index fe2b318a46..ad2f21b7c0 100644 --- a/content/bn/docs/tasks/tools/install-kubectl-macos.md +++ b/content/bn/docs/tasks/tools/install-kubectl-macos.md @@ -44,16 +44,16 @@ macOS এ kubectl ইনস্টল করার জন্য নিম্ন {{< note >}} একটি নির্দিষ্ট সংস্করণ ডাউনলোড করতে, নির্দিষ্ট সংস্করণের সাথে কমান্ডের `$(curl -L -s https://dl.k8s.io/release/stable.txt)` অংশটি প্রতিস্থাপন করুন। - উদাহরণস্বরূপ, Intel macOS-এ সংস্করণ {{< param "fullversion" >}} ডাউনলোড করতে, টাইপ করুন: + উদাহরণস্বরূপ, Intel macOS-এ সংস্করণ {{% skew currentPatchVersion %}} ডাউনলোড করতে, টাইপ করুন: ```bash - curl -LO "https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/darwin/amd64/kubectl" + curl -LO "https://dl.k8s.io/release/v{{% skew currentPatchVersion %}}/bin/darwin/amd64/kubectl" ``` এবং অ্যাপল সিলিকনে macOS এর জন্য, টাইপ করুন: ```bash - curl -LO "https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/darwin/arm64/kubectl" + curl -LO "https://dl.k8s.io/release/v{{% skew currentPatchVersion %}}/bin/darwin/arm64/kubectl" ``` {{< /note >}} diff --git a/content/bn/docs/tasks/tools/install-kubectl-windows.md b/content/bn/docs/tasks/tools/install-kubectl-windows.md index 7615a9d9d7..78de0ec3d6 100644 --- a/content/bn/docs/tasks/tools/install-kubectl-windows.md +++ b/content/bn/docs/tasks/tools/install-kubectl-windows.md @@ -24,12 +24,12 @@ kubectl এর সর্বশেষ সামঞ্জস্যপূর্ণ ### উইন্ডোজে কার্ল ব্যাবহার kubectl বাইনারি ইনস্টল করুন -1. [latest release {{< param "fullversion" >}}](https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe) ডাউনলোড করুন। +1. সর্বশেষ {{< skew currentVersion >}} প্যাচ রিলিজ ডাউনলোড করুন: [kubectl {{% skew currentPatchVersion %}}](https://dl.k8s.io/release/v{{% skew currentPatchVersion %}}/bin/windows/amd64/kubectl.exe)। অথবা যদি আপনার `curl` ইনস্টল থাকে, এই কমান্ডটি ব্যবহার করুন: ```powershell - curl.exe -LO "https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe" + curl.exe -LO "https://dl.k8s.io/release/v{{% skew currentPatchVersion %}}/bin/windows/amd64/kubectl.exe" ``` {{< note >}} @@ -41,7 +41,7 @@ kubectl এর সর্বশেষ সামঞ্জস্যপূর্ণ `kubectl` চেকসাম ফাইলটি ডাউনলোড করুন: ```powershell - curl.exe -LO "https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe.sha256" + curl.exe -LO "https://dl.k8s.io/v{{% skew currentPatchVersion %}}/bin/windows/amd64/kubectl.exe.sha256" ``` চেকসাম ফাইলের বিপরীতে `kubectl` বাইনারি যাচাই করুন: @@ -170,7 +170,7 @@ kubectl Bash, Zsh, Fish এবং PowerShell-এর জন্য ওটোকম 1. কমান্ড সহ সর্বশেষ রিলিজ ডাউনলোড করুন: ```powershell - curl.exe -LO "https://dl.k8s.io/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl-convert.exe" + curl.exe -LO "https://dl.k8s.io/release/v{{% skew currentPatchVersion %}}/bin/windows/amd64/kubectl-convert.exe" ``` 1. বাইনারি যাচাই করুন (অপশনাল)। @@ -178,7 +178,7 @@ kubectl Bash, Zsh, Fish এবং PowerShell-এর জন্য ওটোকম `kubectl-convert` চেকসাম ফাইলটি ডাউনলোড কর্সনা ```powershell - curl.exe -LO "https://dl.k8s.io/{{< param "fullversion" >}}/bin/windows/amd64/kubectl-convert.exe.sha256" + curl.exe -LO "https://dl.k8s.io/v{{% skew currentPatchVersion %}}/bin/windows/amd64/kubectl-convert.exe.sha256" ``` চেকসাম ফাইলের বিপরীতে `kubectl-convert` বাইনারি যাচাই করুন: From 7cfe20778d7782b0d05659e9a9098fce2ccd2edb Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sun, 12 May 2024 15:29:38 +0800 Subject: [PATCH 1000/1086] [zh-cn] sync feature-gates/d* m* v* l* s* t* r* u* k* Signed-off-by: xin.li --- .../feature-gates/daemon-set-update-surge.md | 2 +- ...ult-host-network-ports-in-pod-templates.md | 23 +++++++++++-------- .../default-pod-topology-spread.md | 2 +- .../delegate-fs-group-to-csi-driver.md | 2 +- .../feature-gates/device-plugins.md | 2 +- .../disable-accelerator-usage-metrics.md | 2 +- .../feature-gates/downward-api-huge-pages.md | 2 +- .../feature-gates/dry-run.md | 2 +- .../feature-gates/dynamic-auditing.md | 2 +- .../feature-gates/dynamic-kubelet-config.md | 2 +- .../dynamic-provisioning-scheduling.md | 2 +- .../dynamic-volume-provisioning.md | 2 +- .../kube-proxy-draining-terminating-nodes.md | 4 ++++ .../feature-gates/load-balancer-ip-mode.md | 4 ++++ .../min-domains-in-pod-topology-spread.md | 6 ++++- .../feature-gates/remove-self-link.md | 8 ++++--- ...e-account-token-node-binding-validation.md | 6 ++++- .../service-account-token-pod-node-info.md | 6 ++++- .../feature-gates/topology-aware-hints.md | 2 +- .../topology-manager-policy-alpha-options.md | 6 +++-- .../feature-gates/user-namespaces-support.md | 6 ++++- .../validating-admission-policy.md | 9 ++++++-- 22 files changed, 70 insertions(+), 32 deletions(-) diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/daemon-set-update-surge.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/daemon-set-update-surge.md index b29df3a0d8..8f7950b652 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/daemon-set-update-surge.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/daemon-set-update-surge.md @@ -7,7 +7,7 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: false fromVersion: "1.21" toVersion: "1.21" diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/default-host-network-ports-in-pod-templates.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/default-host-network-ports-in-pod-templates.md index 5ddc2deed9..183256399f 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/default-host-network-ports-in-pod-templates.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/default-host-network-ports-in-pod-templates.md @@ -11,15 +11,20 @@ stages: fromVersion: "1.28" --- -更改何时设置 `PodSpec.containers[*].ports[*].hostPort` 的默认值。 -默认仅在 Pod 中设置默认值。 +此特性门控将控制何时为使用 `hostNetwork: true` 的 Pod 设置 +`.spec.containers[*].ports[*].hostPort` 默认值。 -启用此特性意味着即使在嵌套的 PodSpec(例如 Deployment 中)中也会设置默认值, -这是以前的默认行为。 +启用此特性意味着默认值甚至会分配给嵌入式 +[PodTemplate](/zh-cn/docs/concepts/workloads/pods/#pod-templates)(例如,Deployment) +的 `.spec`,这是 Kubernetes 旧版本的工作方式。 +你应该迁移你的代码,使其不再依赖于原先的行为。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/default-pod-topology-spread.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/default-pod-topology-spread.md index 4d1b242bdf..9e54aae957 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/default-pod-topology-spread.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/default-pod-topology-spread.md @@ -8,7 +8,7 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: false fromVersion: "1.19" toVersion: "1.19" diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/delegate-fs-group-to-csi-driver.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/delegate-fs-group-to-csi-driver.md index 6c649f1de0..65d6afe248 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/delegate-fs-group-to-csi-driver.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/delegate-fs-group-to-csi-driver.md @@ -6,7 +6,7 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: false fromVersion: "1.22" toVersion: "1.22" diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/device-plugins.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/device-plugins.md index a7f96d47d9..a3ce5b775b 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/device-plugins.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/device-plugins.md @@ -6,7 +6,7 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: false fromVersion: "1.8" toVersion: "1.9" diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/disable-accelerator-usage-metrics.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/disable-accelerator-usage-metrics.md index ccbd2585ac..3f40a4a5d8 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/disable-accelerator-usage-metrics.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/disable-accelerator-usage-metrics.md @@ -6,7 +6,7 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: false fromVersion: "1.19" toVersion: "1.19" diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/downward-api-huge-pages.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/downward-api-huge-pages.md index 6ca94950f7..d50e107733 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/downward-api-huge-pages.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/downward-api-huge-pages.md @@ -6,7 +6,7 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: false fromVersion: "1.20" toVersion: "1.20" diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dry-run.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dry-run.md index 7477969430..fff6d0a07b 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dry-run.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dry-run.md @@ -6,7 +6,7 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: false fromVersion: "1.12" toVersion: "1.12" diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-auditing.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-auditing.md index 1d00cc3dc8..a187b21814 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-auditing.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-auditing.md @@ -8,7 +8,7 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: false fromVersion: "1.13" toVersion: "1.18" diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-kubelet-config.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-kubelet-config.md index fe994c2fb3..edc2f7cbc3 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-kubelet-config.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-kubelet-config.md @@ -8,7 +8,7 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: false fromVersion: "1.4" toVersion: "1.10" diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-provisioning-scheduling.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-provisioning-scheduling.md index 5512b84e70..904199c81f 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-provisioning-scheduling.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-provisioning-scheduling.md @@ -8,7 +8,7 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: false fromVersion: "1.11" toVersion: "1.11" diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-volume-provisioning.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-volume-provisioning.md index 0f644f3ab2..9712f3027c 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-volume-provisioning.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/dynamic-volume-provisioning.md @@ -8,7 +8,7 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: true fromVersion: "1.3" toVersion: "1.7" diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/kube-proxy-draining-terminating-nodes.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/kube-proxy-draining-terminating-nodes.md index 16d15df761..8f42e77083 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/kube-proxy-draining-terminating-nodes.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/kube-proxy-draining-terminating-nodes.md @@ -9,6 +9,10 @@ stages: - stage: alpha defaultValue: false fromVersion: "1.28" + toVersion: "1.30" + - stage: beta + defaultValue: true + fromVersion: "1.30" --- 在 EndpointSlice 中启用基于拓扑提示的拓扑感知路由。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/topology-manager-policy-alpha-options.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/topology-manager-policy-alpha-options.md index 9e6f96f5a7..cab2c91eb3 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/topology-manager-policy-alpha-options.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/topology-manager-policy-alpha-options.md @@ -6,17 +6,19 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: false fromVersion: "1.26" --- +启用拓扑管理器策略的[微调](zh-cn/docs/tasks/administer-cluster/topology-manager/#topology-manager-policy-options)。 允许微调拓扑管理器策略的实验性的、Alpha 质量的选项。 此特性门控守护**一组**质量级别为 Alpha 的拓扑管理器选项。 此特性门控绝对不会进阶至 Beta 或稳定版。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/user-namespaces-support.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/user-namespaces-support.md index 68a5a809db..330d8d5c72 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/user-namespaces-support.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/user-namespaces-support.md @@ -6,9 +6,13 @@ _build: render: false stages: - - stage: alpha + - stage: alpha defaultValue: false fromVersion: "1.28" + toVersion: "1.29" + - stage: beta + defaultValue: false + fromVersion: "1.30" --- 在准入控制中启用 -[ValidatingAdmissionPolicy](/zh-cn/docs/reference/access-authn-authz/validating-admission-policy/) 以支持 CEL 合法性检查。 +[ValidatingAdmissionPolicy](/zh-cn/docs/reference/access-authn-authz/validating-admission-policy/) +以支持 CEL 合法性检查。 From 0dcd235efb9d96520522c7df51a324bc846e6b0c Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sun, 12 May 2024 14:38:41 +0800 Subject: [PATCH 1001/1086] [zh-cn] sync kubeadm_init_phase_kubelet-start Signed-off-by: xin.li --- .../generated/kubeadm_init_phase_kubelet-start.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-start.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-start.md index c1ae6cc31f..fd13e5499b 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-start.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-start.md @@ -104,6 +104,20 @@ kubelet-start 操作的帮助命令 + +--image-repository string      默认值:"registry.k8s.io" + + + +

    + +选择一个容器镜像仓库来从中拉取控制平面组件的镜像 +

    + + + --node-name string From 694d62f16e8797c575857026034341ac9ab6223f Mon Sep 17 00:00:00 2001 From: AbdelatifAitBara Date: Mon, 13 May 2024 14:18:05 +0200 Subject: [PATCH 1002/1086] Update list of versions to match English --- content/ko/docs/home/supported-doc-versions.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/content/ko/docs/home/supported-doc-versions.md b/content/ko/docs/home/supported-doc-versions.md index fe524e0f1a..1ea8281ef2 100644 --- a/content/ko/docs/home/supported-doc-versions.md +++ b/content/ko/docs/home/supported-doc-versions.md @@ -2,10 +2,7 @@ title: 가용 문서 버전 content_type: custom layout: supported-versions -card: - name: about - weight: 10 - title: 가용 문서 버전 +weight: 10 --- 이 웹사이트에서는 쿠버네티스 현재 버전 및 From a6d52c990cfdabf769709e7df18a6fdf485896b7 Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Mon, 13 May 2024 18:51:17 +0600 Subject: [PATCH 1003/1086] adding shortcode for upcoming-releases in patch-releases.md (#46349) --- content/bn/releases/patch-releases.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/content/bn/releases/patch-releases.md b/content/bn/releases/patch-releases.md index 20505bb0ab..f688797a44 100644 --- a/content/bn/releases/patch-releases.md +++ b/content/bn/releases/patch-releases.md @@ -76,11 +76,7 @@ type: docs নিম্নলিখিত মাসিক রিলিজ পয়েন্টগুলির লক্ষ্য করব। অপরিকল্পিত, গুরুত্বপূর্ণ রিলিজগুলি এদের মধ্যেও ঘটতে পারে। -| Monthly Patch Release | Cherry Pick Deadline | Target date | -| --------------------- | -------------------- | ----------- | -| April 2024 | 2024-04-12 | 2024-04-16 | -| May 2024 | 2024-05-10 | 2024-05-14 | -| June 2024 | 2024-06-07 | 2024-06-11 | +{{< upcoming-releases >}} ## সক্রিয় শাখাগুলির জন্য বিস্তারিত রিলিজ ইতিহাস From d1ae494a0b4e153faa89c0539ca371cb81613162 Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Mon, 13 May 2024 14:10:42 +0100 Subject: [PATCH 1004/1086] [fr] Update list of versions to match English --- data/i18n/fr/fr.toml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/data/i18n/fr/fr.toml b/data/i18n/fr/fr.toml index cc902370c0..dc28a63246 100644 --- a/data/i18n/fr/fr.toml +++ b/data/i18n/fr/fr.toml @@ -3,6 +3,15 @@ [deprecation_warning] other = " documentation non maintenue. Vous consultez une version statique. Pour une documentation à jour, veuillez consulter: " +[docs_version_current] +other = "(cette documentation)" + +[docs_version_latest_heading] +other = "Dernière version" + +[docs_version_other_heading] +other = "Anciennes versions" + [objectives_heading] other = "Objectifs" From 2223e5ae8d06a05f360c57e964a2b033ad6b2e2b Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Mon, 13 May 2024 14:13:09 +0100 Subject: [PATCH 1005/1086] update supported-doc-versions.md --- content/fr/docs/home/supported-doc-versions.md | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/content/fr/docs/home/supported-doc-versions.md b/content/fr/docs/home/supported-doc-versions.md index afd204d041..d9de869d50 100644 --- a/content/fr/docs/home/supported-doc-versions.md +++ b/content/fr/docs/home/supported-doc-versions.md @@ -2,26 +2,8 @@ title: Versions supportées de la documentation Kubernetes description: Documentation de Kubernetes content_type: concept -card: - name: about - weight: 10 - title: Versions supportées de la documentation --- Ce site contient la documentation de la version actuelle de Kubernetes et les quatre versions précédentes de Kubernetes. - - - - - -## Version courante - -La version actuelle est [{{< param "version" >}}](/). - -## Versions précédentes - -{{< versions-other >}} - - From 33d2b99f1ed319dd78c18a06f831278d391a24f3 Mon Sep 17 00:00:00 2001 From: Dmitry Shurupov Date: Mon, 13 May 2024 20:16:09 +0700 Subject: [PATCH 1006/1086] [id] Fix incorrect relative URLs (#46308) * Fix incorrect relative URLs Signed-off-by: Dmitry Shurupov * Update content/id/docs/concepts/architecture/controller.md Co-authored-by: Dipesh Rawat --------- Signed-off-by: Dmitry Shurupov Co-authored-by: Dipesh Rawat --- content/id/docs/concepts/architecture/controller.md | 2 +- content/id/docs/reference/access-authn-authz/rbac.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/content/id/docs/concepts/architecture/controller.md b/content/id/docs/concepts/architecture/controller.md index 096dd75085..f863dd924d 100644 --- a/content/id/docs/concepts/architecture/controller.md +++ b/content/id/docs/concepts/architecture/controller.md @@ -60,7 +60,7 @@ Job adalah sumber daya dalam Kubernetes yang menjalankan a {{< glossary_tooltip term_id="pod" >}}, atau mungkin beberapa Pod sekaligus, untuk melakukan sebuah pekerjaan dan kemudian berhenti. -(Setelah [dijadwalkan](../../../../en/docs/concepts/scheduling-eviction/), objek Pod +(Setelah [dijadwalkan](/id/docs/concepts/scheduling-eviction/), objek Pod akan menjadi bagian dari keadaan yang diinginkan oleh kubelet). Ketika _controller job_ melihat tugas baru, maka _controller_ itu memastikan bahwa, diff --git a/content/id/docs/reference/access-authn-authz/rbac.md b/content/id/docs/reference/access-authn-authz/rbac.md index decb08d42b..31dd2e0a3f 100644 --- a/content/id/docs/reference/access-authn-authz/rbac.md +++ b/content/id/docs/reference/access-authn-authz/rbac.md @@ -1,7 +1,7 @@ --- title: Menggunakan Otorisasi RBAC content_type: concept -aliases: [../../../rbac/] +aliases: [/id/rbac/] weight: 70 --- From f54a351688677a2e15009be621da75b18adb8b0a Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Mon, 13 May 2024 14:18:42 +0100 Subject: [PATCH 1007/1086] Update supported-doc-versions.md --- content/fr/docs/home/supported-doc-versions.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/content/fr/docs/home/supported-doc-versions.md b/content/fr/docs/home/supported-doc-versions.md index d9de869d50..b99a85a559 100644 --- a/content/fr/docs/home/supported-doc-versions.md +++ b/content/fr/docs/home/supported-doc-versions.md @@ -1,7 +1,8 @@ --- title: Versions supportées de la documentation Kubernetes -description: Documentation de Kubernetes -content_type: concept +content_type: custom +layout: supported-versions +weight: 10 --- From 22e1dd5459fb11288734392bcedaf76090531a37 Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Mon, 13 May 2024 14:24:05 +0100 Subject: [PATCH 1008/1086] Update fr.toml --- data/i18n/fr/fr.toml | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/data/i18n/fr/fr.toml b/data/i18n/fr/fr.toml index f2d4d497cb..065f7b549a 100644 --- a/data/i18n/fr/fr.toml +++ b/data/i18n/fr/fr.toml @@ -1,14 +1,5 @@ # i18n strings for the French (main) site. -[docs_version_latest_heading] -other = "Version courante" - -[docs_version_other_heading] -other = "Versions précédentes" - -[deprecation_warning] -other = " documentation non maintenue. Vous consultez une version statique. Pour une documentation à jour, veuillez consulter: " - [docs_version_current] other = "(cette documentation)" @@ -16,7 +7,10 @@ other = "(cette documentation)" other = "Dernière version" [docs_version_other_heading] -other = "Anciennes versions" +other = "Versions précédentes" + +[deprecation_warning] +other = " documentation non maintenue. Vous consultez une version statique. Pour une documentation à jour, veuillez consulter: " [objectives_heading] other = "Objectifs" From 9d51471fb0f2b33c8ae2a786902b40cdfffc7bc8 Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Mon, 13 May 2024 14:25:13 +0100 Subject: [PATCH 1009/1086] Update fr.toml --- data/i18n/fr/fr.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/i18n/fr/fr.toml b/data/i18n/fr/fr.toml index 065f7b549a..84694abc78 100644 --- a/data/i18n/fr/fr.toml +++ b/data/i18n/fr/fr.toml @@ -4,7 +4,7 @@ other = "(cette documentation)" [docs_version_latest_heading] -other = "Dernière version" +other = "Version courante" [docs_version_other_heading] other = "Versions précédentes" From 08d253d3b841a1f1f7373a91ea110e2360443728 Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Mon, 13 May 2024 14:30:07 +0100 Subject: [PATCH 1010/1086] [it] Update list of versions to match English --- content/it/docs/home/supported-doc-versions.md | 10 ++++++++++ data/i18n/it/it.toml | 9 +++++++++ 2 files changed, 19 insertions(+) create mode 100644 content/it/docs/home/supported-doc-versions.md diff --git a/content/it/docs/home/supported-doc-versions.md b/content/it/docs/home/supported-doc-versions.md new file mode 100644 index 0000000000..26e384f05e --- /dev/null +++ b/content/it/docs/home/supported-doc-versions.md @@ -0,0 +1,10 @@ +--- +title: Versioni supportate della documentazione di Kubernetes +content_type: custom +layout: supported-versions +weight: 10 +--- + + + +Questo sito contiene la documentazione della versione attuale di Kubernetes e delle quattro versioni precedenti di Kubernetes. diff --git a/data/i18n/it/it.toml b/data/i18n/it/it.toml index 7c0970dfaa..8f4747ebce 100644 --- a/data/i18n/it/it.toml +++ b/data/i18n/it/it.toml @@ -46,6 +46,15 @@ other = "Io Sono..." [docs_label_users] other = "Utenti" +[docs_version_current] +other = "(questa documentazione)" + +[docs_version_latest_heading] +other = "Ultima versione" + +[docs_version_other_heading] +other = "Versioni precedenti" + [feedback_heading] other = "Feedback" From 53ed08ba642f5d054357002e87e4639cf83873ca Mon Sep 17 00:00:00 2001 From: AbdelatifAitBara Date: Mon, 13 May 2024 13:02:40 +0200 Subject: [PATCH 1011/1086] Update list of versions to match English --- .../es/docs/home/supported-doc-versions.md | 19 ++----------------- data/i18n/es/es.toml | 9 +++++++++ 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/content/es/docs/home/supported-doc-versions.md b/content/es/docs/home/supported-doc-versions.md index 8562e01077..a2bf80640d 100644 --- a/content/es/docs/home/supported-doc-versions.md +++ b/content/es/docs/home/supported-doc-versions.md @@ -1,10 +1,8 @@ --- title: Versiones Soportadas de la Documentación content_type: custom -card: - name: about - weight: 10 - title: Versiones Soportadas de la Documentación +layout: supported-versions +weight: 10 --- @@ -18,16 +16,3 @@ esa versión es compatible actualmente. Lea [Período de soporte](/releases/patch-releases/#support-period) para obtener información sobre qué versiones de Kubernetes son oficialmente compatibles y durante cuánto tiempo. - - -## Versión Actual - -La versión actual es -[{{< param "version" >}}](/). - -## Versiones anteriores - -{{< versions-other >}} - - - diff --git a/data/i18n/es/es.toml b/data/i18n/es/es.toml index c232ce7c27..e4430ce8ce 100644 --- a/data/i18n/es/es.toml +++ b/data/i18n/es/es.toml @@ -1,5 +1,14 @@ # i18n strings for the Spanish (main) site. +[docs_version_current] +other = "(esta documentación)" + +[docs_version_latest_heading] +other = "Versión actual" + +[docs_version_other_heading] +other = "Versiones anteriores" + [deprecation_warning] other = " ya no mantiene activamente la documentación. La versión que está viendo actualmente es una instantánea estática. Para la documentación actualizada, visita la " From 04a417d74d5fc7494f992af5e02c378a8251015a Mon Sep 17 00:00:00 2001 From: AbdelatifAitBara Date: Mon, 13 May 2024 14:11:12 +0200 Subject: [PATCH 1012/1086] Update list of versions to match English --- content/ja/docs/home/supported-doc-versions.md | 5 +---- data/i18n/ja/ja.toml | 9 +++++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/content/ja/docs/home/supported-doc-versions.md b/content/ja/docs/home/supported-doc-versions.md index 2ed4821b3a..ad6581a825 100644 --- a/content/ja/docs/home/supported-doc-versions.md +++ b/content/ja/docs/home/supported-doc-versions.md @@ -2,10 +2,7 @@ title: 利用可能なドキュメントバージョン content_type: custom layout: supported-versions -card: - name: about - weight: 10 - title: 利用可能なドキュメントバージョン +weight: 10 --- 本ウェブサイトには、現行版とその直前4バージョンのKubernetesドキュメントがあります。 diff --git a/data/i18n/ja/ja.toml b/data/i18n/ja/ja.toml index 9b5392d6b4..7d1e125225 100644 --- a/data/i18n/ja/ja.toml +++ b/data/i18n/ja/ja.toml @@ -1,6 +1,15 @@ # i18n strings for the English (main) site. # NOTE: Please keep the entries in alphabetical order when editing +[docs_version_current] +other = "(この文書)" + +[docs_version_latest_heading] +other = "最新のバージョン" + +[docs_version_other_heading] +other = "以前のバージョン" + [caution] other = "注意:" From d4cddab31dd636fa64f3c669aa221d0a9aedcc4b Mon Sep 17 00:00:00 2001 From: Md Sadique Hossain Date: Mon, 13 May 2024 23:07:45 +0600 Subject: [PATCH 1013/1086] Update gateway.md --- content/bn/docs/reference/glossary/gateway.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/bn/docs/reference/glossary/gateway.md b/content/bn/docs/reference/glossary/gateway.md index bcda650b3e..da01c824b4 100644 --- a/content/bn/docs/reference/glossary/gateway.md +++ b/content/bn/docs/reference/glossary/gateway.md @@ -1,10 +1,10 @@ --- -title: প্রবেশপথ এ পি আই (API) +title: গেটওয়ে API id: gateway-api -date: ২০২৩/১০/১৯ +date: 2023-10-19 full_link: /docs/concepts/services-networking/gateway/ short_description: > - Kubernetes-এ মডেলিং পরিষেবা নেটওয়ার্কিংয়ের জন্য একটি এ পি আই (API)। + কুবারনেটিস-এ মডেলিং সার্ভিস নেটওয়ার্কিংয়ের জন্য একটি API। aka: tags: @@ -12,7 +12,7 @@ tags: - architecture - extension --- -Kubernetes-এ মডেলিং পরিষেবা নেটওয়ার্কিংয়ের জন্য এ পি আই (API) ধরণের একটি পরিবার। +কুবারনেটিস-এ মডেলিং সার্ভিস নেটওয়ার্কিংয়ের জন্য API ধরণের একটি ফ্যামিলি। গেটওয়ে বা প্রবেশপথ এ পি আই (API) এক্সটেনসিবল বা প্রসারনীয়, ভূমিকা-ভিত্তিক, প্রোটোকল-সচেতন একটি পরিবার প্রদান করে Kubernetes-এ মডেলিং পরিষেবা নেটওয়ার্কিংয়ের জন্য API এক প্রকার। From 35220033d7342929f357adcaf03861b2b754e1a5 Mon Sep 17 00:00:00 2001 From: Md Sadique Hossain Date: Mon, 13 May 2024 23:09:14 +0600 Subject: [PATCH 1014/1086] Update gateway.md --- content/bn/docs/reference/glossary/gateway.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/bn/docs/reference/glossary/gateway.md b/content/bn/docs/reference/glossary/gateway.md index da01c824b4..a803065d25 100644 --- a/content/bn/docs/reference/glossary/gateway.md +++ b/content/bn/docs/reference/glossary/gateway.md @@ -14,5 +14,5 @@ tags: --- কুবারনেটিস-এ মডেলিং সার্ভিস নেটওয়ার্কিংয়ের জন্য API ধরণের একটি ফ্যামিলি। -গেটওয়ে বা প্রবেশপথ এ পি আই (API) এক্সটেনসিবল বা প্রসারনীয়, ভূমিকা-ভিত্তিক, প্রোটোকল-সচেতন একটি পরিবার প্রদান করে -Kubernetes-এ মডেলিং পরিষেবা নেটওয়ার্কিংয়ের জন্য API এক প্রকার। +গেটওয়ে API কুবারনেটিস-এ মডেলিং সার্ভিস নেটওয়ার্কিংয়ের জন্য এক্সটেনসিবল, রোল-ভিত্তিক, প্রোটোকল-সচেতন +API ধরণের একটি পরিবার সরবরাহ করে। From 377f05018b227c38324e92b02b75dd05b8d8325d Mon Sep 17 00:00:00 2001 From: Dipesh Rawat Date: Mon, 22 Apr 2024 19:59:01 +0100 Subject: [PATCH 1015/1086] Update 2018 blog to include author in front-matter --- .../blog/_posts/2018-01-00-Core-Workloads-Api-Ga.md | 4 ++-- ...2018-01-00-Kubernetes-V19-Beta-Windows-Support.md | 12 ++++-------- ...01-00-Reporting-Errors-Using-Kubernetes-Events.md | 4 +++- ...8-03-00-Apache-Spark-23-With-Native-Kubernetes.md | 6 +++--- ...03-00-Expanding-User-Support-With-Office-Hours.md | 5 ++++- ...18-03-00-First-Beta-Version-Of-Kubernetes-1-10.md | 3 ++- ...-03-00-How-To-Integrate-Rollingupdate-Strategy.md | 3 ++- .../2018-03-00-Principles-Of-Container-App-Design.md | 4 ++-- ...s-1-10-stabilizing-storage-security-networking.md | 5 ++--- ...2018-04-04-fixing-subpath-volume-vulnerability.md | 4 +++- ...30-zero-downtime-deployment-kubernetes-jenkins.md | 3 ++- .../_posts/2018-05-01-developing-on-kubernetes.md | 6 +++--- .../blog/_posts/2018-05-02-policy-in-kubernetes.md | 9 +++++++-- .../_posts/2018-05-04-Announcing-Kubeflow-0-1.md | 5 +++-- content/en/blog/_posts/2018-05-05-hugo-migration.md | 3 ++- .../2018-05-17-gardener-the-kubernetes-botanist.md | 4 +++- .../_posts/2018-05-22-getting-to-know-kubevirt.md | 5 +++-- ...5-24-kubernetes-containerd-integration-goes-ga.md | 4 +++- .../blog/_posts/2018-05-29-announcing-kustomize.md | 5 +++-- .../2018-05-30-say-hello-to-discuss-kubernetes.md | 4 ++-- ...meet-our-contributors-youtube-mentoring-series.md | 4 ++-- content/en/blog/_posts/2018-06-06-4-years-of-k8s.md | 4 ++-- .../_posts/2018-06-07-dynamic-ingress-kubernetes.md | 4 ++-- ...018-06-26-kubernetes-1-11-release-announcement.md | 4 ++-- .../_posts/2018-06-28-Airflow-Kubernetes-Operator.md | 4 ++-- .../2018-07-09-IPVS-In-Cluster-Load-Balancing.md | 6 ++++-- content/en/blog/_posts/2018-07-10-coredns-ga.md | 4 ++-- .../2018-07-11-dynamic-kubelet-configuration.md | 4 ++-- ...2-resizing-persistent-volumes-using-kubernetes.md | 4 ++-- .../2018-07-16-kubernetes-1-11-release-interview.md | 4 ++-- .../_posts/2018-07-18-11-ways-not-to-get-hacked.md | 4 ++-- ...19-kubernetes-win-2018-oscon-most-impact-award.md | 5 +++-- .../2018-07-20-history-kubernetes-community.md | 4 ++-- content/en/blog/_posts/2018-07-24-cpu-manager.md | 5 +++-- .../2018-07-27-kubevirt-crds-for-virtualization.md | 4 ++-- .../2018-08-02-dynamically-expand-volume-csi.md | 4 ++-- ...8-03-make-kubernetes-production-grade-anywhere.md | 5 +++-- .../_posts/2018-08-10-introducing-kubebuilder.md | 5 +++-- ...s-testing-ci-automating-contributor-experience.md | 5 +++-- ...18-steering-committee-election-cycle-kicks-off.md | 6 ++++-- .../en/blog/_posts/2018-09-18-2018-linkerd-2-0.md | 4 ++-- ...018-09-27-kubernetes-1-12-release-announcement.md | 4 ++-- .../blog/_posts/2018-10-01-health-checking-grpc.md | 4 ++-- .../2018-10-02-network-bootable-farm-with-ltsp.md | 4 ++-- content/en/blog/_posts/2018-10-03-kubedirector.md | 4 ++-- .../_posts/2018-10-04-non-code-contributors-guide.md | 6 ++++-- .../blog/_posts/2018-10-08-support-for-azure-vmss.md | 5 +++-- .../blog/_posts/2018-10-09-volume-snapshot-alpha.md | 6 ++++-- content/en/blog/_posts/2018-10-10-runtimeclass.md | 4 ++-- .../2018-10-11-topology-aware-volume-provisioning.md | 4 ++-- .../_posts/2018-10-15-steering-election-results.md | 6 ++++-- ...ernetes-2018-north-american-contributor-summit.md | 8 ++++---- ...-18-tips-for-first-kubecon-presentation-part-1.md | 4 ++-- ...-26-tips-for-first-kubecon-presentation-part-2.md | 4 ++-- .../2018-11-07-grpc-load-balancing-with-linkerd.md | 4 ++-- .../_posts/2018-11-08-kubernetes-docs-update-i18n.md | 4 ++-- ...018-12-03-kubernetes-1-13-release-announcement.md | 4 ++-- .../en/blog/_posts/2018-12-04-kubeadm-ga-release.md | 5 +++-- .../_posts/2018-12-05-new-contributor-shanghai.md | 7 +++++-- .../2018-12-11-Kubernetes-Federation-Evolution.md | 6 ++++-- .../2018-12-11-current-status-and-future-roadmap.md | 5 +++-- 61 files changed, 165 insertions(+), 124 deletions(-) diff --git a/content/en/blog/_posts/2018-01-00-Core-Workloads-Api-Ga.md b/content/en/blog/_posts/2018-01-00-Core-Workloads-Api-Ga.md index cf7cc12c92..dcc121bf43 100644 --- a/content/en/blog/_posts/2018-01-00-Core-Workloads-Api-Ga.md +++ b/content/en/blog/_posts/2018-01-00-Core-Workloads-Api-Ga.md @@ -3,6 +3,8 @@ title: "Core Workloads API GA" date: 2018-01-15 slug: core-workloads-api-ga url: /blog/2018/01/Core-Workloads-Api-Ga +author: > + Kenneth Owens (Google) --- ## DaemonSet, Deployment, ReplicaSet, and StatefulSet are GA @@ -92,8 +94,6 @@ In future releases, before completely removing any of the group versions, we wil ## What’s Next? The core workloads API surface is stable, but it’s still software, and software is never complete. We often add features to stable APIs to support new use cases, and we will likely do so for the core workloads API as well. GA stability means that any new features that we do add will be strictly backward compatible with the existing API surface. From this point forward, nothing we do will break our backwards compatibility guarantees. If you’re looking to participate in the evolution of this portion of the API, please feel free to get involved in [GitHub](https://github.com/kubernetes/kubernetes) or to participate in [SIG Apps](https://github.com/kubernetes/community/tree/master/sig-apps). ---Kenneth Owens, Software Engineer, Google - - [Download](https://get.k8s.io/) Kubernetes - Get involved with the Kubernetes project on [GitHub](https://github.com/kubernetes/kubernetes) diff --git a/content/en/blog/_posts/2018-01-00-Kubernetes-V19-Beta-Windows-Support.md b/content/en/blog/_posts/2018-01-00-Kubernetes-V19-Beta-Windows-Support.md index 9d059827d9..d9ba87de51 100644 --- a/content/en/blog/_posts/2018-01-00-Kubernetes-V19-Beta-Windows-Support.md +++ b/content/en/blog/_posts/2018-01-00-Kubernetes-V19-Beta-Windows-Support.md @@ -3,8 +3,12 @@ title: Kubernetes v1.9 releases beta support for Windows Server Containers date: 2018-01-09 slug: kubernetes-v19-beta-windows-support url: /blog/2018/01/Kubernetes-V19-Beta-Windows-Support +author: > + Michael Michael (Apprenda) --- +_At the time of publication, Michael Michael was writing as SIG-Windows Lead._ + With the release of Kubernetes v1.9, our mission of ensuring Kubernetes works well everywhere and for everyone takes a great step forward. We’ve advanced support for Windows Server to beta along with continued feature and functional advancements on both the Kubernetes and Windows platforms. SIG-Windows has been working since March of 2016 to open the door for many Windows-specific applications and workloads to run on Kubernetes, significantly expanding the implementation scenarios and the enterprise reach of Kubernetes. Enterprises of all sizes have made significant investments in .NET and Windows based applications. Many enterprise portfolios today contain .NET and Windows, with Gartner claiming that [80%](http://www.gartner.com/document/3446217) of enterprise apps run on Windows. According to StackOverflow Insights, 40% of professional developers use the .NET programming languages (including .NET Core). @@ -57,11 +61,3 @@ As we continue to make progress towards General Availability of this feature in - We meet every other Tuesday at 12:30 Eastern Standard Time (EST) at [https://zoom.us/my/sigwindows](https://zoom.us/my/sigwindows). All our meetings are recorded on youtube and referenced at [https://www.youtube.com/playlist?list=PL69nYSiGNLP2OH9InCcNkWNu2bl-gmIU4](https://www.youtube.com/playlist?list=PL69nYSiGNLP2OH9InCcNkWNu2bl-gmIU4) - Chat with us on Slack at [https://kubernetes.slack.com/messages/sig-windows](https://kubernetes.slack.com/messages/sig-windows) - Find us on GitHub at [https://github.com/kubernetes/community/tree/master/sig-windows](https://github.com/kubernetes/community/tree/master/sig-windows) - - - -Thank you, - -Michael Michael (@michmike77) -SIG-Windows Lead -Senior Director of Product Management, Apprenda diff --git a/content/en/blog/_posts/2018-01-00-Reporting-Errors-Using-Kubernetes-Events.md b/content/en/blog/_posts/2018-01-00-Reporting-Errors-Using-Kubernetes-Events.md index 488a862236..1f0d7fa4c8 100644 --- a/content/en/blog/_posts/2018-01-00-Reporting-Errors-Using-Kubernetes-Events.md +++ b/content/en/blog/_posts/2018-01-00-Reporting-Errors-Using-Kubernetes-Events.md @@ -4,6 +4,8 @@ date: 2018-01-25 published: true slug: reporting-errors-using-kubernetes-events url: /blog/2018/01/Reporting-Errors-Using-Kubernetes-Events +author: > + Hakan Baba (Box) --- At [Box](https://www.box.com/), we manage several large scale Kubernetes clusters that serve as an internal platform as a service (PaaS) for hundreds of deployed microservices. The majority of those microservices are applications that power box.com for over 80,000 customers. The PaaS team also deploys several services affiliated with the platform infrastructure as the _control plane_. @@ -86,4 +88,4 @@ We have demonstrated a practical use case with Kubernetes Events. The automated _If you have a Kubernetes experience you’d like to share, [submit your story](https://docs.google.com/a/google.com/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform). If you use Kubernetes in your organization and want to voice your experience more directly, consider joining the [CNCF End User Community](https://www.cncf.io/people/end-user-community/) that Box and dozens of like-minded companies are part of._ Special thanks for Greg Lyons and Mohit Soni for their contributions. -Hakan Baba, Sr. Software Engineer, Box + diff --git a/content/en/blog/_posts/2018-03-00-Apache-Spark-23-With-Native-Kubernetes.md b/content/en/blog/_posts/2018-03-00-Apache-Spark-23-With-Native-Kubernetes.md index 593747705f..cc0cbdf552 100644 --- a/content/en/blog/_posts/2018-03-00-Apache-Spark-23-With-Native-Kubernetes.md +++ b/content/en/blog/_posts/2018-03-00-Apache-Spark-23-With-Native-Kubernetes.md @@ -3,6 +3,9 @@ title: "Apache Spark 2.3 with Native Kubernetes Support" date: 2018-03-06 slug: apache-spark-23-with-native-kubernetes url: /blog/2018/03/Apache-Spark-23-With-Native-Kubernetes +author: > + Anirudh Ramanathan (Google), + Palak Bhatia (Google) --- ### Kubernetes and Big Data @@ -91,9 +94,6 @@ And we're just getting started! We would love for you to get involved and help u Huge thanks to the Apache Spark and Kubernetes contributors spread across multiple organizations who spent many hundreds of hours working on this effort. We look forward to seeing more of you contribute to the project and help it evolve further. -Anirudh Ramanathan and Palak Bhatia -Google - [1]: https://kubernetes.io/docs/concepts/api-extension/custom-resources/ [2]: https://kubernetes.io/docs/concepts/api-extension/custom-resources/#custom-controllers [3]: http://spark.apache.org/releases/spark-release-2-3-0.html diff --git a/content/en/blog/_posts/2018-03-00-Expanding-User-Support-With-Office-Hours.md b/content/en/blog/_posts/2018-03-00-Expanding-User-Support-With-Office-Hours.md index 2373eaa237..a4ae6bffd2 100644 --- a/content/en/blog/_posts/2018-03-00-Expanding-User-Support-With-Office-Hours.md +++ b/content/en/blog/_posts/2018-03-00-Expanding-User-Support-With-Office-Hours.md @@ -3,9 +3,12 @@ title: "Expanding User Support with Office Hours" date: 2018-03-14 slug: expanding-user-support-with-office-hours url: /blog/2018/03/Expanding-User-Support-With-Office-Hours +author: > + [Jorge Castro](https://twitter.com/castrojo) + [Ilya Dmitichenko](https://twitter.com/errordeveloper) --- -**Today's post is by [Jorge Castro](https://twitter.com/castrojo) and [Ilya Dmitichenko](https://twitter.com/errordeveloper) on Kubernetes office hours.** +**Today's post is on Kubernetes office hours.** Today's developer has an almost overwhelming amount of resources available for learning. Kubernetes development teams use [StackOverflow][1], [user documentation][2], [Slack][3], and the [mailing lists][4]. Additionally, the community itself continues to amass an [awesome list][5] of resources. diff --git a/content/en/blog/_posts/2018-03-00-First-Beta-Version-Of-Kubernetes-1-10.md b/content/en/blog/_posts/2018-03-00-First-Beta-Version-Of-Kubernetes-1-10.md index a2df08a6ba..e5c1d72a95 100644 --- a/content/en/blog/_posts/2018-03-00-First-Beta-Version-Of-Kubernetes-1-10.md +++ b/content/en/blog/_posts/2018-03-00-First-Beta-Version-Of-Kubernetes-1-10.md @@ -3,9 +3,10 @@ title: "Kubernetes: First Beta Version of Kubernetes 1.10 is Here" date: 2018-03-02 slug: first-beta-version-of-kubernetes-1-10 url: /blog/2018/03/First-Beta-Version-Of-Kubernetes-1-10 +author: > + Nick Chase (Mirantis) --- -**Editor's note: Today's post is by Nick Chase. Nick is Head of Content at [Mirantis][1].** The Kubernetes community has released the first beta version of Kubernetes 1.10, which means you can now try out some of the new features and give your feedback to the release team ahead of the official release. The release, currently scheduled for March 21, 2018, is targeting the inclusion of more than a dozen brand new alpha features and more mature versions of more than two dozen more. Specifically, Kubernetes 1.10 will include production-ready versions of Kubelet TLS Bootstrapping, API aggregation, and more detailed storage metrics. diff --git a/content/en/blog/_posts/2018-03-00-How-To-Integrate-Rollingupdate-Strategy.md b/content/en/blog/_posts/2018-03-00-How-To-Integrate-Rollingupdate-Strategy.md index 5cd4742df5..17208ec459 100644 --- a/content/en/blog/_posts/2018-03-00-How-To-Integrate-Rollingupdate-Strategy.md +++ b/content/en/blog/_posts/2018-03-00-How-To-Integrate-Rollingupdate-Strategy.md @@ -3,6 +3,8 @@ title: "How to Integrate RollingUpdate Strategy for TPR in Kubernetes" date: 2018-03-13 slug: how-to-integrate-rollingupdate-strategy url: /blog/2018/03/How-To-Integrate-Rollingupdate-Strategy +author: > + Orain Xiong (Woqutech) --- With Kubernetes, it's easy to manage and scale stateless applications like web apps and API services right out of the box. To date, almost all of the talks about Kubernetes has been about microservices and stateless applications. @@ -230,7 +232,6 @@ The upgrade is in monotonically decreasing manner: RollingUpgrade is meaningful to database administrators. It provides a more effective way to operator database. -\--Orain Xiong, co-founder, Woqutech [1]: https://lh5.googleusercontent.com/4WiSkxX-XBqARVqQ0No-1tZ31op90LAUkTco3FdIO1mFScNOTVtMCgnjaO8SRUmms-6MAb46CzxlXDhLBqAAAmbx26atJnu4t1FTTALZx_CbUPqrCxjL746DW4TD42-03Ac9VB2c [2]: https://lh3.googleusercontent.com/sXqVqfTu6rMWn0mlHLgHHqATe_qsx1tNmMfX60HoTwyhd5HCL4A_ViFBQAZfOoVGioeXcI_XXbzVFUdq2hbKGwS0OXH6PFGqgpZshfBwrT088bz4KqeyTbHpQR2olyzE6eRo1fan diff --git a/content/en/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md b/content/en/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md index ef5ea7b9b3..a6e33b3808 100644 --- a/content/en/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md +++ b/content/en/blog/_posts/2018-03-00-Principles-Of-Container-App-Design.md @@ -3,6 +3,8 @@ title: "Principles of Container-based Application Design" date: 2018-03-15 slug: principles-of-container-app-design url: /blog/2018/03/Principles-Of-Container-App-Design +author: > + [Bilgin Ibryam](http://twitter.com/bibryam) (Red Hat) --- It's possible nowadays to put almost any application in a container and run it. Creating cloud-native applications, however—containerized applications that are automated and orchestrated effectively by a cloud-native platform such as Kubernetes—requires additional effort. Cloud-native applications anticipate failure; they run and scale reliably even when their infrastructure experiences outages. To offer such capabilities, cloud-native platforms like Kubernetes impose a set of contracts and constraints on applications. These contracts ensure that applications they run conform to certain constraints and allow the platform to automate application management. @@ -35,8 +37,6 @@ The white paper is freely available for download: To read more about designing cloud-native applications for Kubernetes, check out my [Kubernetes Patterns][3] book. -— [Bilgin Ibryam][4], Principal Architect, Red Hat - Twitter: 
 Blog: [http://www.ofbizian.com][5] Linkedin: diff --git a/content/en/blog/_posts/2018-03-26-kubernetes-1-10-stabilizing-storage-security-networking.md b/content/en/blog/_posts/2018-03-26-kubernetes-1-10-stabilizing-storage-security-networking.md index 904b2d34e9..11b9ed1f86 100644 --- a/content/en/blog/_posts/2018-03-26-kubernetes-1-10-stabilizing-storage-security-networking.md +++ b/content/en/blog/_posts/2018-03-26-kubernetes-1-10-stabilizing-storage-security-networking.md @@ -4,11 +4,10 @@ date: 2018-03-26 modified_time: '2018-03-27T11:01:39.569-07:00' slug: kubernetes-1.10-stabilizing-storage-security-networking evergreen: true +author: > + [Kubernetes v1.10 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.10/release_team.md) --- -***Editor's note: today's post is by the [1.10 Release -Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.10/release_team.md)*** - We’re pleased to announce the delivery of Kubernetes 1.10, our first release of 2018! diff --git a/content/en/blog/_posts/2018-04-04-fixing-subpath-volume-vulnerability.md b/content/en/blog/_posts/2018-04-04-fixing-subpath-volume-vulnerability.md index 88b0113dd1..ee0c865511 100644 --- a/content/en/blog/_posts/2018-04-04-fixing-subpath-volume-vulnerability.md +++ b/content/en/blog/_posts/2018-04-04-fixing-subpath-volume-vulnerability.md @@ -2,6 +2,9 @@ title: Fixing the Subpath Volume Vulnerability in Kubernetes date: 2018-04-04 slug: fixing-subpath-volume-vulnerability +author: > + Michelle Au (Google), + Jan Šafránek (Red Hat) --- On March 12, 2018, the Kubernetes Product Security team disclosed [CVE-2017-1002101](https://issue.k8s.io/60813), which allowed containers using [subpath](/docs/concepts/storage/volumes/#using-subpath) volume mounts to access files outside of the volume. This means that a container could access any file available on the host, including volumes for other containers that it should not have access to. @@ -190,4 +193,3 @@ Special thanks to many folks involved with handling this vulnerability: If you find a vulnerability in Kubernetes, please follow our responsible disclosure process and [let us know](https://kubernetes.io/security/#report-a-vulnerability); we want to do our best to make Kubernetes secure for all users. --- Michelle Au, Software Engineer, Google; and Jan Šafránek, Software Engineer, Red Hat diff --git a/content/en/blog/_posts/2018-04-30-zero-downtime-deployment-kubernetes-jenkins.md b/content/en/blog/_posts/2018-04-30-zero-downtime-deployment-kubernetes-jenkins.md index e7a70c7cad..df35b3db2e 100644 --- a/content/en/blog/_posts/2018-04-30-zero-downtime-deployment-kubernetes-jenkins.md +++ b/content/en/blog/_posts/2018-04-30-zero-downtime-deployment-kubernetes-jenkins.md @@ -1,8 +1,9 @@ --- title: 'Zero-downtime Deployment in Kubernetes with Jenkins' date: 2018-04-30 -author: kbarnard slug: zero-downtime-deployment-kubernetes-jenkins +author: > + [Kaitlyn Barnard](https://github.com/kbarnard10) --- Ever since we added the [Kubernetes Continuous Deploy](https://aka.ms/azjenkinsk8s) and [Azure Container Service](https://aka.ms/azjenkinsacs) plugins to the Jenkins update center, "How do I create zero-downtime deployments" is one of our most frequently-asked questions. We created a quickstart template on Azure to demonstrate what zero-downtime deployments can look like. Although our example uses Azure, the concept easily applies to all Kubernetes installations. diff --git a/content/en/blog/_posts/2018-05-01-developing-on-kubernetes.md b/content/en/blog/_posts/2018-05-01-developing-on-kubernetes.md index dd1ab516c7..f479ee06a8 100644 --- a/content/en/blog/_posts/2018-05-01-developing-on-kubernetes.md +++ b/content/en/blog/_posts/2018-05-01-developing-on-kubernetes.md @@ -2,11 +2,11 @@ title: Developing on Kubernetes date: 2018-05-01 slug: developing-on-kubernetes +author: > + [Michael Hausenblas](https://twitter.com/mhausenblas) (Red Hat), + [Ilya Dmitrichenko](https://twitter.com/errordeveloper) (Weaveworks) --- -**Authors**: [Michael Hausenblas](https://twitter.com/mhausenblas) (Red Hat), [Ilya Dmitrichenko](https://twitter.com/errordeveloper) (Weaveworks) - - How do you develop a Kubernetes app? That is, how do you write and test an app that is supposed to run on Kubernetes? This article focuses on the challenges, tools and methods you might want to be aware of to successfully write Kubernetes apps alone or in a team setting. We’re assuming you are a developer, you have a favorite programming language, editor/IDE, and a testing framework available. The overarching goal is to introduce minimal changes to your current workflow when developing the app for Kubernetes. For example, if you’re a Node.js developer and are used to a hot-reload setup—that is, on save in your editor the running app gets automagically updated—then dealing with containers and container images, with container registries, Kubernetes deployments, triggers, and more can not only be overwhelming but really take all the fun out if it. diff --git a/content/en/blog/_posts/2018-05-02-policy-in-kubernetes.md b/content/en/blog/_posts/2018-05-02-policy-in-kubernetes.md index 8ce6c2e261..994f81e217 100644 --- a/content/en/blog/_posts/2018-05-02-policy-in-kubernetes.md +++ b/content/en/blog/_posts/2018-05-02-policy-in-kubernetes.md @@ -2,6 +2,13 @@ title: Current State of Policy in Kubernetes date: 2018-05-02 slug: policy-in-kubernetes +author: > + Zhipeng Huang, + Torin Sandall, + Michael Elder, + Erica Von Buelow, + Khalid Ahmed, + Yisui Hu --- Kubernetes has grown dramatically in its impact to the industry; and with rapid growth, we are beginning to see variations across components in how they define and apply policies. @@ -45,5 +52,3 @@ When these concrete proposals got clearer the WG will be able to provide a high ## Towards Cloud Native Policy Driven Architecture Policy is definitely something goes beyond Kubernetes and applied to a broader cloud native context. Our work in the Kubernetes Policy WG will provide the foundation of building a CNCF wide policy architecture, with the integration of Kubernetes and various other cloud native components such as open policy agent, Istio, Envoy, SPIFEE/SPIRE and so forth. The Policy WG has already collaboration with the CNCF SAFE WG (in-forming) team, and will work on more alignments to make sure a community driven cloud native policy architecture design. - -**Authors**: Zhipeng Huang, Torin Sandall, Michael Elder, Erica Von Buelow, Khalid Ahmed, Yisui Hu diff --git a/content/en/blog/_posts/2018-05-04-Announcing-Kubeflow-0-1.md b/content/en/blog/_posts/2018-05-04-Announcing-Kubeflow-0-1.md index 1be435c931..532e272707 100644 --- a/content/en/blog/_posts/2018-05-04-Announcing-Kubeflow-0-1.md +++ b/content/en/blog/_posts/2018-05-04-Announcing-Kubeflow-0-1.md @@ -3,6 +3,9 @@ title: 'Announcing Kubeflow 0.1' date: 2018-05-04 author: aronchick slug: announcing-kubeflow-0.1 +author: > + Jeremy Lewi (Google), + David Aronchick (Google) --- # Since Last We Met @@ -130,5 +133,3 @@ But the most important feature is the one we haven’t heard yet. Please tell us * Our [weekly community meeting](https://github.com/kubeflow/community) * Please download and run [kubeflow](https://github.com/kubeflow/kubeflow/pull/330/files), and submit bugs! -Thank you for all your support so far! -*Jeremy Lewi & David Aronchick* Google diff --git a/content/en/blog/_posts/2018-05-05-hugo-migration.md b/content/en/blog/_posts/2018-05-05-hugo-migration.md index 194cf7b519..960955c5f2 100644 --- a/content/en/blog/_posts/2018-05-05-hugo-migration.md +++ b/content/en/blog/_posts/2018-05-05-hugo-migration.md @@ -3,8 +3,9 @@ title: 'Docs are Migrating from Jekyll to Hugo' date: 2018-05-05 author: zcorleissen slug: hugo-migration +author: > + [Zach Corleissen](https://www.cncf.io/people/staff/) (CNCF) --- -**Author**: [Zach Corleissen](https://www.cncf.io/people/staff/) (CNCF) ## Changing the site framework diff --git a/content/en/blog/_posts/2018-05-17-gardener-the-kubernetes-botanist.md b/content/en/blog/_posts/2018-05-17-gardener-the-kubernetes-botanist.md index b22ad9aecb..d2f3441da3 100644 --- a/content/en/blog/_posts/2018-05-17-gardener-the-kubernetes-botanist.md +++ b/content/en/blog/_posts/2018-05-17-gardener-the-kubernetes-botanist.md @@ -3,8 +3,10 @@ title: 'Gardener - The Kubernetes Botanist' date: 2018-05-17 author: rfranzke slug: gardener +author: > + [Rafael Franzke](mailto:rafael.franzke@sap.com) (SAP), + [Vasu Chandrasekhara](mailto:vasu.chandrasekhara@sap.com) (SAP) --- -**Authors**: [Rafael Franzke](mailto:rafael.franzke@sap.com) (SAP), [Vasu Chandrasekhara](mailto:vasu.chandrasekhara@sap.com) (SAP) Today, Kubernetes is the natural choice for running software in the Cloud. More and more developers and corporations are in the process of containerizing their applications, and many of them are adopting Kubernetes for automated deployments of their Cloud Native workloads. diff --git a/content/en/blog/_posts/2018-05-22-getting-to-know-kubevirt.md b/content/en/blog/_posts/2018-05-22-getting-to-know-kubevirt.md index 556701f2e6..3125a7d1f7 100644 --- a/content/en/blog/_posts/2018-05-22-getting-to-know-kubevirt.md +++ b/content/en/blog/_posts/2018-05-22-getting-to-know-kubevirt.md @@ -1,9 +1,10 @@ --- title: 'Getting to Know Kubevirt' date: 2018-05-22 -author: kbarnard +author: > + [Jason Brooks](mailto:jbrooks@redhat.com) (Red Hat), + [Kaitlyn Barnard](https://github.com/kbarnard10) --- -**Author**: [Jason Brooks](mailto:jbrooks@redhat.com ) (Red Hat) Once you've become accustomed to running Linux container workloads on Kubernetes, you may find yourself wishing that you could run other sorts of workloads on your Kubernetes cluster. Maybe you need to run an application that isn't architected for containers, or that requires a different version of the Linux kernel -- or an all together different operating system -- than what's available on your container host. diff --git a/content/en/blog/_posts/2018-05-24-kubernetes-containerd-integration-goes-ga.md b/content/en/blog/_posts/2018-05-24-kubernetes-containerd-integration-goes-ga.md index f4d79584e9..86cc7eda0c 100644 --- a/content/en/blog/_posts/2018-05-24-kubernetes-containerd-integration-goes-ga.md +++ b/content/en/blog/_posts/2018-05-24-kubernetes-containerd-integration-goes-ga.md @@ -2,9 +2,11 @@ layout: blog title: Kubernetes Containerd Integration Goes GA date: 2018-05-24 +author: > + Lantao Liu (Google), + Mike Brown (IBM) --- # Kubernetes Containerd Integration Goes GA -**Authors**: Lantao Liu, Software Engineer, Google and Mike Brown, Open Source Developer Advocate, IBM In a previous blog - [Containerd Brings More Container Runtime Options for Kubernetes](https://kubernetes.io/blog/2017/11/containerd-container-runtime-options-kubernetes), we introduced the alpha version of the Kubernetes containerd integration. With another 6 months of development, the integration with containerd is now generally available! You can now use [containerd 1.1](https://github.com/containerd/containerd/releases/tag/v1.1.0) as the container runtime for production Kubernetes clusters! diff --git a/content/en/blog/_posts/2018-05-29-announcing-kustomize.md b/content/en/blog/_posts/2018-05-29-announcing-kustomize.md index 0591d9e3f4..22c7b0e247 100644 --- a/content/en/blog/_posts/2018-05-29-announcing-kustomize.md +++ b/content/en/blog/_posts/2018-05-29-announcing-kustomize.md @@ -2,10 +2,11 @@ layout: blog title: Introducing kustomize; Template-free Configuration Customization for Kubernetes date: 2018-05-29 +author: > + Jeff Regan (Google), + Phil Wittrock (Google) --- -**Authors:** Jeff Regan (Google), Phil Wittrock (Google) - [**kustomize**]: https://github.com/kubernetes-sigs/kustomize [hello world]: https://github.com/kubernetes-sigs/kustomize/blob/master/examples/helloWorld [mailing list]: https://groups.google.com/forum/#!forum/kustomize diff --git a/content/en/blog/_posts/2018-05-30-say-hello-to-discuss-kubernetes.md b/content/en/blog/_posts/2018-05-30-say-hello-to-discuss-kubernetes.md index aad569033c..ad90a31747 100644 --- a/content/en/blog/_posts/2018-05-30-say-hello-to-discuss-kubernetes.md +++ b/content/en/blog/_posts/2018-05-30-say-hello-to-discuss-kubernetes.md @@ -2,10 +2,10 @@ layout: blog title: Say Hello to Discuss Kubernetes date: 2018-05-30 +author: > + Jorge Castro (Heptio) --- -**Author**: Jorge Castro (Heptio) - Communication is key when it comes to engaging a community of over 35,000 people in a global and remote environment. Keeping track of everything in the Kubernetes community can be an overwhelming task. On one hand we have our official resources, like Stack Overflow, GitHub, and the mailing lists, and on the other we have more ephemeral resources like Slack, where you can hop in, chat with someone, and then go on your merry way. Slack is great for casual and timely conversations and keeping up with other community members, but communication can't be easily referenced in the future. Plus it can be hard to raise your hand in a room filled with 35,000 participants and find a voice. Mailing lists are useful when trying to reach a specific group of people with a particular ask and want to keep track of responses on the thread, but can be daunting with a large amount of people. Stack Overflow and GitHub are ideal for collaborating on projects or questions that involve code and need to be searchable in the future, but certain topics like "What's your favorite CI/CD tool" or "[Kubectl tips and tricks](https://discuss.kubernetes.io/t/kubectl-tips-and-tricks/192)" are offtopic there. diff --git a/content/en/blog/_posts/2018-06-05-meet-our-contributors-youtube-mentoring-series.md b/content/en/blog/_posts/2018-06-05-meet-our-contributors-youtube-mentoring-series.md index 537bd4d445..7954b00dcf 100644 --- a/content/en/blog/_posts/2018-06-05-meet-our-contributors-youtube-mentoring-series.md +++ b/content/en/blog/_posts/2018-06-05-meet-our-contributors-youtube-mentoring-series.md @@ -2,10 +2,10 @@ layout: blog title: Meet Our Contributors - Monthly Streaming YouTube Mentoring Series date: 2018-07-10 +author: > + Paris Pittman (Google) --- -**Author**: Paris Pittman (Google) - ![meet_our_contributors](/images/blog/2018-06-05-meet-our-contributors-youtube-mentoring-series/meet-our-contributors.png) July 11th at 2:30pm and 8pm UTC kicks off our next installment of Meet Our Contributors YouTube series. This month is special: members of the steering committee will be on to answer any and all questions from the community on the first 30 minutes of the 8pm UTC session. More on submitting questions below. diff --git a/content/en/blog/_posts/2018-06-06-4-years-of-k8s.md b/content/en/blog/_posts/2018-06-06-4-years-of-k8s.md index 6f6966cb14..459b831318 100644 --- a/content/en/blog/_posts/2018-06-06-4-years-of-k8s.md +++ b/content/en/blog/_posts/2018-06-06-4-years-of-k8s.md @@ -2,10 +2,10 @@ layout: blog title: 4 Years of K8s date: 2018-06-06 +author: > + Joe Beda (Heptio) --- -**Author**: Joe Beda (CTO and Founder, Heptio) - On June 6, 2014 I checked in the [first commit](https://github.com/kubernetes/kubernetes/commit/2c4b3a562ce34cddc3f8218a2c4d11c7310e6d56) of what would become the public repository for Kubernetes. Many would assume that is where the story starts. It is the beginning of history, right? But that really doesn’t tell the whole story. ![k8s_first_commit](/images/blog/2018-06-06-4-years-of-k8s/k8s-first-commit.png) diff --git a/content/en/blog/_posts/2018-06-07-dynamic-ingress-kubernetes.md b/content/en/blog/_posts/2018-06-07-dynamic-ingress-kubernetes.md index ccddbdfb77..67f8a58627 100644 --- a/content/en/blog/_posts/2018-06-07-dynamic-ingress-kubernetes.md +++ b/content/en/blog/_posts/2018-06-07-dynamic-ingress-kubernetes.md @@ -2,10 +2,10 @@ layout: blog title: Dynamic Ingress in Kubernetes date: 2018-06-07 +author: > + Richard Li (Datawire) --- -**Author**: Richard Li (Datawire) - Kubernetes makes it easy to deploy applications that consist of many microservices, but one of the key challenges with this type of architecture is dynamically routing ingress traffic to each of these services. One approach is [Ambassador](https://www.getambassador.io), a Kubernetes-native open source API Gateway built on the [Envoy Proxy](https://www.envoyproxy.io). Ambassador is designed for dynamic environment where services may come and go frequently. Ambassador is configured using Kubernetes annotations. Annotations are used to configure specific mappings from a given Kubernetes service to a particular URL. A mapping can include a number of annotations for configuring a route. Examples include rate limiting, protocol, cross-origin request sharing, traffic shadowing, and routing rules. diff --git a/content/en/blog/_posts/2018-06-26-kubernetes-1-11-release-announcement.md b/content/en/blog/_posts/2018-06-26-kubernetes-1-11-release-announcement.md index c66e94ffa5..a2543bb51c 100644 --- a/content/en/blog/_posts/2018-06-26-kubernetes-1-11-release-announcement.md +++ b/content/en/blog/_posts/2018-06-26-kubernetes-1-11-release-announcement.md @@ -4,10 +4,10 @@ title: 'Kubernetes 1.11: In-Cluster Load Balancing and CoreDNS Plugin Graduate t date: 2018-06-27 slug: kubernetes-1.11-release-announcement evergreen: true +author: > + [Kubernetes v1.11 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.11/release_team.md) --- -**Author**: Kubernetes 1.11 [Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.11/release_team.md) - We’re pleased to announce the delivery of Kubernetes 1.11, our second release of 2018! Today’s release continues to advance maturity, scalability, and flexibility of Kubernetes, marking significant progress on features that the team has been hard at work on over the last year. This newest version graduates key features in networking, opens up two major features from SIG-API Machinery and SIG-Node for beta testing, and continues to enhance storage features that have been a focal point of the past two releases. The features in this release make it increasingly possible to plug any infrastructure, cloud or on-premise, into the Kubernetes system. diff --git a/content/en/blog/_posts/2018-06-28-Airflow-Kubernetes-Operator.md b/content/en/blog/_posts/2018-06-28-Airflow-Kubernetes-Operator.md index 5a18fa4c9a..bbb6f1a5d9 100644 --- a/content/en/blog/_posts/2018-06-28-Airflow-Kubernetes-Operator.md +++ b/content/en/blog/_posts/2018-06-28-Airflow-Kubernetes-Operator.md @@ -2,10 +2,10 @@ layout: blog title: 'Airflow on Kubernetes (Part 1): A Different Kind of Operator' date: 2018-06-28 +author: > + Daniel Imberman (Bloomberg LP) --- -**Author**: Daniel Imberman (Bloomberg LP) - ## Introduction As part of Bloomberg's [continued commitment to developing the Kubernetes ecosystem](https://www.techatbloomberg.com/blog/bloomberg-awarded-first-cncf-end-user-award-contributions-kubernetes/), we are excited to announce the Kubernetes Airflow Operator; a mechanism for [Apache Airflow](https://airflow.apache.org/), a popular workflow orchestration framework to natively launch arbitrary Kubernetes Pods using the Kubernetes API. diff --git a/content/en/blog/_posts/2018-07-09-IPVS-In-Cluster-Load-Balancing.md b/content/en/blog/_posts/2018-07-09-IPVS-In-Cluster-Load-Balancing.md index 881cbce11c..607cd7a3c9 100644 --- a/content/en/blog/_posts/2018-07-09-IPVS-In-Cluster-Load-Balancing.md +++ b/content/en/blog/_posts/2018-07-09-IPVS-In-Cluster-Load-Balancing.md @@ -2,10 +2,12 @@ layout: blog title: 'IPVS-Based In-Cluster Load Balancing Deep Dive' date: 2018-07-09 +author: > + Jun Du (Huawei), + Haibin Xie (Huawei), + Wei Liang (Huawei) --- -**Author**: Jun Du(Huawei), Haibin Xie(Huawei), Wei Liang(Huawei) - **Editor’s note: this post is part of a [series of in-depth articles](https://kubernetes.io/blog/2018/06/27/kubernetes-1.11-release-announcement/) on what’s new in Kubernetes 1.11** ## Introduction diff --git a/content/en/blog/_posts/2018-07-10-coredns-ga.md b/content/en/blog/_posts/2018-07-10-coredns-ga.md index 412e21ea45..e6f171a018 100644 --- a/content/en/blog/_posts/2018-07-10-coredns-ga.md +++ b/content/en/blog/_posts/2018-07-10-coredns-ga.md @@ -2,10 +2,10 @@ layout: blog title: "CoreDNS GA for Kubernetes Cluster DNS" date: 2018-07-10 +author: > + John Belamaric (Infoblox) --- -**Author**: John Belamaric (Infoblox) - **Editor’s note: this post is part of a [series of in-depth articles](https://kubernetes.io/blog/2018/06/27/kubernetes-1.11-release-announcement/) on what’s new in Kubernetes 1.11** ## Introduction diff --git a/content/en/blog/_posts/2018-07-11-dynamic-kubelet-configuration.md b/content/en/blog/_posts/2018-07-11-dynamic-kubelet-configuration.md index 4f5f548cee..54b7a423a0 100644 --- a/content/en/blog/_posts/2018-07-11-dynamic-kubelet-configuration.md +++ b/content/en/blog/_posts/2018-07-11-dynamic-kubelet-configuration.md @@ -2,10 +2,10 @@ layout: blog title: 'Dynamic Kubelet Configuration' date: 2018-07-11 +author: > + Michael Taufen (Google) --- -**Author**: Michael Taufen (Google) - **Editor’s note: The feature has been removed in the version 1.24 after deprecation in 1.22.** **Editor’s note: this post is part of a [series of in-depth articles](https://kubernetes.io/blog/2018/06/27/kubernetes-1.11-release-announcement/) on what’s new in Kubernetes 1.11** diff --git a/content/en/blog/_posts/2018-07-12-resizing-persistent-volumes-using-kubernetes.md b/content/en/blog/_posts/2018-07-12-resizing-persistent-volumes-using-kubernetes.md index 8b2234d376..ccacc69a05 100644 --- a/content/en/blog/_posts/2018-07-12-resizing-persistent-volumes-using-kubernetes.md +++ b/content/en/blog/_posts/2018-07-12-resizing-persistent-volumes-using-kubernetes.md @@ -2,10 +2,10 @@ layout: blog title: 'Resizing Persistent Volumes using Kubernetes' date: 2018-07-12 +author: > + Hemant Kumar (Red Hat) --- -**Author**: Hemant Kumar (Red Hat) - **Editor’s note: this post is part of a [series of in-depth articles](https://kubernetes.io/blog/2018/06/27/kubernetes-1.11-release-announcement/) on what’s new in Kubernetes 1.11** In Kubernetes v1.11 the persistent volume expansion feature is being promoted to beta. This feature allows users to easily resize an existing volume by editing the `PersistentVolumeClaim` (PVC) object. Users no longer have to manually interact with the storage backend or delete and recreate PV and PVC objects to increase the size of a volume. Shrinking persistent volumes is not supported. diff --git a/content/en/blog/_posts/2018-07-16-kubernetes-1-11-release-interview.md b/content/en/blog/_posts/2018-07-16-kubernetes-1-11-release-interview.md index 25758bc213..770d7e9ee6 100644 --- a/content/en/blog/_posts/2018-07-16-kubernetes-1-11-release-interview.md +++ b/content/en/blog/_posts/2018-07-16-kubernetes-1-11-release-interview.md @@ -2,10 +2,10 @@ layout: blog title: "How the sausage is made: the Kubernetes 1.11 release interview, from the Kubernetes Podcast" date: 2018-07-16 +author: > + Craig Box (Google) --- -Author: Craig Box (Google) - At KubeCon EU, my colleague Adam Glick and I were pleased to announce the [Kubernetes Podcast from Google](https://kubernetespodcast.com/). In this weekly conversation, we focus on all the great things that are happening in the world of Kubernetes and Cloud Native. From the news of the week, to interviews with people in the community, we help you stay up to date on everything Kubernetes. We [recently had the pleasure of speaking](https://kubernetespodcast.com/episode/010-kubernetes-1.11/) to the release manager for Kubernetes 1.11, Josh Berkus from Red Hat, and the release manager for the upcoming 1.12, Tim Pepper from VMware. diff --git a/content/en/blog/_posts/2018-07-18-11-ways-not-to-get-hacked.md b/content/en/blog/_posts/2018-07-18-11-ways-not-to-get-hacked.md index cf72ba30f3..c72fca80fd 100644 --- a/content/en/blog/_posts/2018-07-18-11-ways-not-to-get-hacked.md +++ b/content/en/blog/_posts/2018-07-18-11-ways-not-to-get-hacked.md @@ -2,10 +2,10 @@ layout: blog title: "11 Ways (Not) to Get Hacked" date: 2018-07-18 +author: > + Andrew Martin (ControlPlane) --- -**Author**: Andrew Martin (ControlPlane) - Kubernetes security has come a long way since the project's inception, but still contains some gotchas. Starting with the control plane, building up through workload and network security, and finishing with a projection into the future of security, here is a list of handy tips to help harden your clusters and increase their resilience if compromised. - [Part One: The Control Plane](#part-one-the-control-plane) diff --git a/content/en/blog/_posts/2018-07-19-kubernetes-win-2018-oscon-most-impact-award.md b/content/en/blog/_posts/2018-07-19-kubernetes-win-2018-oscon-most-impact-award.md index 4103106e65..648a6684aa 100644 --- a/content/en/blog/_posts/2018-07-19-kubernetes-win-2018-oscon-most-impact-award.md +++ b/content/en/blog/_posts/2018-07-19-kubernetes-win-2018-oscon-most-impact-award.md @@ -3,10 +3,11 @@ layout: blog title: "Kubernetes Wins the 2018 OSCON Most Impact Award" date: 2018-07-19 slug: kubernetes-wins-2018-oscon-most-impact-award +author: > + Brian Grant (Google), + Tim Hockin (Google) --- -**Authors**: Brian Grant (Principal Engineer, Google) and Tim Hockin (Principal Engineer, Google) - We are humbled to be recognized by the community with this award. We had high hopes when we created Kubernetes. We wanted to change the way cloud applications were deployed and managed. Whether we’d succeed or not was very uncertain. And look how far we’ve come in such a short time. diff --git a/content/en/blog/_posts/2018-07-20-history-kubernetes-community.md b/content/en/blog/_posts/2018-07-20-history-kubernetes-community.md index f67a59243d..c3f10063c1 100644 --- a/content/en/blog/_posts/2018-07-20-history-kubernetes-community.md +++ b/content/en/blog/_posts/2018-07-20-history-kubernetes-community.md @@ -2,10 +2,10 @@ layout: blog title: "The History of Kubernetes & the Community Behind It" date: 2018-07-20 +author: > + Brendan Burns (Microsoft) --- -**Authors**: Brendan Burns (Distinguished Engineer, Microsoft) - ![oscon award](/images/blog/2018-07-20-history-kubernetes-community.png) It is remarkable to me to return to Portland and OSCON to stand on stage with members of the Kubernetes community and accept this award for Most Impactful Open Source Project. It was scarcely three years ago, that on this very same stage we declared Kubernetes 1.0 and the project was added to the newly formed Cloud Native Computing Foundation. diff --git a/content/en/blog/_posts/2018-07-24-cpu-manager.md b/content/en/blog/_posts/2018-07-24-cpu-manager.md index 97fd149f9e..0f2f47e084 100644 --- a/content/en/blog/_posts/2018-07-24-cpu-manager.md +++ b/content/en/blog/_posts/2018-07-24-cpu-manager.md @@ -2,10 +2,11 @@ layout: blog title: "Feature Highlight: CPU Manager" date: 2018-07-24 +author: > + [Balaji Subramaniam]((mailto:balaji.subramaniam@intel.com)) (Intel), + [Connor Doyle](mailto:connor.p.doyle@intel.com) (Intel]) --- -**Authors**: Balaji Subramaniam ([Intel](mailto:balaji.subramaniam@intel.com)), Connor Doyle ([Intel](mailto:connor.p.doyle@intel.com)) - This blog post describes the [CPU Manager](/docs/tasks/administer-cluster/cpu-management-policies/), a beta feature in [Kubernetes](https://kubernetes.io/). The CPU manager feature enables better placement of workloads in the [Kubelet](/docs/reference/command-line-tools-reference/kubelet/), the Kubernetes node agent, by allocating exclusive CPUs to certain pod containers. ![cpu manager](/images/blog/2018-07-24-cpu-manager/cpu-manager.png) diff --git a/content/en/blog/_posts/2018-07-27-kubevirt-crds-for-virtualization.md b/content/en/blog/_posts/2018-07-27-kubevirt-crds-for-virtualization.md index 5f953e4a1e..bcf10895d4 100644 --- a/content/en/blog/_posts/2018-07-27-kubevirt-crds-for-virtualization.md +++ b/content/en/blog/_posts/2018-07-27-kubevirt-crds-for-virtualization.md @@ -2,10 +2,10 @@ layout: blog title: 'KubeVirt: Extending Kubernetes with CRDs for Virtualized Workloads' date: 2018-07-27 +author: > + David Vossel (Red Hat) --- -**Author**: David Vossel (Red Hat) - ## What is KubeVirt? [KubeVirt](https://github.com/kubevirt/kubevirt) is a Kubernetes addon that provides users the ability to schedule traditional virtual machine workloads side by side with container workloads. Through the use of [Custom Resource Definitions](/docs/concepts/extend-Kubernetes/api-extension/custom-resources/) (CRDs) and other Kubernetes features, KubeVirt seamlessly extends existing Kubernetes clusters to provide a set of virtualization APIs that can be used to manage virtual machines. diff --git a/content/en/blog/_posts/2018-08-02-dynamically-expand-volume-csi.md b/content/en/blog/_posts/2018-08-02-dynamically-expand-volume-csi.md index 5a071d9743..083161b7bb 100644 --- a/content/en/blog/_posts/2018-08-02-dynamically-expand-volume-csi.md +++ b/content/en/blog/_posts/2018-08-02-dynamically-expand-volume-csi.md @@ -2,10 +2,10 @@ layout: blog title: 'Dynamically Expand Volume with CSI and Kubernetes' date: 2018-08-02 +author: > + Orain Xiong (WoquTech) --- -**Author**: Orain Xiong (Co-Founder, WoquTech) - _There is a very powerful storage subsystem within Kubernetes itself, covering a fairly broad spectrum of use cases. Whereas, when planning to build a product-grade relational database platform with Kubernetes, we face a big challenge: coming up with storage. This article describes how to extend latest Container Storage Interface 0.2.0 and integrate with Kubernetes, and demonstrates the essential facet of dynamically expanding volume capacity._ ## Introduction diff --git a/content/en/blog/_posts/2018-08-03-make-kubernetes-production-grade-anywhere.md b/content/en/blog/_posts/2018-08-03-make-kubernetes-production-grade-anywhere.md index 00416256e0..09571ca9b1 100644 --- a/content/en/blog/_posts/2018-08-03-make-kubernetes-production-grade-anywhere.md +++ b/content/en/blog/_posts/2018-08-03-make-kubernetes-production-grade-anywhere.md @@ -2,10 +2,11 @@ layout: blog title: 'Out of the Clouds onto the Ground: How to Make Kubernetes Production Grade Anywhere' date: 2018-08-03 +author: > + Steven Wong (VMware), + Michael Gasch (VMware) --- -**Authors**: Steven Wong (VMware), Michael Gasch (VMware) - This blog offers some guidelines for running a production grade Kubernetes cluster in an environment like an on-premise data center or edge location. What does it mean to be “production grade”? diff --git a/content/en/blog/_posts/2018-08-10-introducing-kubebuilder.md b/content/en/blog/_posts/2018-08-10-introducing-kubebuilder.md index 6e02611f6d..71d29cb4a5 100644 --- a/content/en/blog/_posts/2018-08-10-introducing-kubebuilder.md +++ b/content/en/blog/_posts/2018-08-10-introducing-kubebuilder.md @@ -2,10 +2,11 @@ layout: blog title: 'Introducing Kubebuilder: an SDK for building Kubernetes APIs using CRDs' date: 2018-08-10 +author: > + Phillip Wittrock (Google), + Sunil Arora (Google) --- -**Author**: Phillip Wittrock (Google), Sunil Arora (Google) - [kubebuilder-repo]: https://github.com/kubernetes-sigs/kubebuilder [controller-runtime]: https://github.com/kubernetes-sigs/controller-runtime [SIG-APIMachinery]: https://github.com/kubernetes/community/tree/master/sig-api-machinery diff --git a/content/en/blog/_posts/2018-08-29-kubernetes-testing-ci-automating-contributor-experience.md b/content/en/blog/_posts/2018-08-29-kubernetes-testing-ci-automating-contributor-experience.md index 63a2bcc1aa..4da588dded 100644 --- a/content/en/blog/_posts/2018-08-29-kubernetes-testing-ci-automating-contributor-experience.md +++ b/content/en/blog/_posts/2018-08-29-kubernetes-testing-ci-automating-contributor-experience.md @@ -2,10 +2,11 @@ layout: blog title: 'The Machines Can Do the Work, a Story of Kubernetes Testing, CI, and Automating the Contributor Experience' date: 2018-08-29 +author: > + Aaron Crickenberger (Google), + Benjamin Elder (Google) --- -**Author**: Aaron Crickenberger (Google) and Benjamin Elder (Google) - _“Large projects have a lot of less exciting, yet, hard work. We value time spent automating repetitive work more highly than toil. Where that work cannot be automated, it is our culture to recognize and reward all types of contributions. However, heroism is not sustainable.”_ - [Kubernetes Community Values](https://git.k8s.io/community/values.md#automation-over-process) Like many open source projects, Kubernetes is hosted on GitHub. We felt the barrier to participation would be lowest if the project lived where developers already worked, using tools and processes developers already knew. Thus the project embraced the service fully: it was the basis of our workflow, our issue tracker, our documentation, our blog platform, our team structure, and more. diff --git a/content/en/blog/_posts/2018-09-06-2018-steering-committee-election-cycle-kicks-off.md b/content/en/blog/_posts/2018-09-06-2018-steering-committee-election-cycle-kicks-off.md index bdec06e6a4..6eb70adf93 100644 --- a/content/en/blog/_posts/2018-09-06-2018-steering-committee-election-cycle-kicks-off.md +++ b/content/en/blog/_posts/2018-09-06-2018-steering-committee-election-cycle-kicks-off.md @@ -2,10 +2,12 @@ layout: blog title: '2018 Steering Committee Election Cycle Kicks Off' date: 2018-09-06 +author: > + Paris Pittman (Google), + Jorge Castro (Heptio), + Ihor Dvoretskyi (CNCF) --- -**Author**: Paris Pittman (Google), Jorge Castro (Heptio), Ihor Dvoretskyi (CNCF) - Having a clear, definable governance model is crucial for the health of open source projects. For one of the highest velocity projects in the open source world, governance is critical especially for one as large and active as Kubernetes, which is one of the most high-velocity projects in the open source world. A clear structure helps users trust that the project will be nurtured and progress forward. Initially, this structure was laid by the former 7 member bootstrap committee composed of founders and senior contributors with a goal to create the foundational governance building blocks. The [initial charter](https://git.k8s.io/steering/charter.md) and establishment of an election process to seat a full Steering Committee was a part of those first building blocks. Last year, the bootstrap committee [kicked off](https://groups.google.com/d/msg/kubernetes-dev/piPuoqFkJwA/mCjwLH81BgAJ) the first Kubernetes Steering Committee election which brought forth 6 new members from the community as voted on by contributors. These new members plus the bootstrap committee formed the [Steering Committee that we know today](https://github.com/kubernetes/steering). This yearly election cycle will continue to ensure that new representatives get cycled through to add different voices and thoughts on the Kubernetes project strategy. diff --git a/content/en/blog/_posts/2018-09-18-2018-linkerd-2-0.md b/content/en/blog/_posts/2018-09-18-2018-linkerd-2-0.md index d985cec573..92041e93f8 100644 --- a/content/en/blog/_posts/2018-09-18-2018-linkerd-2-0.md +++ b/content/en/blog/_posts/2018-09-18-2018-linkerd-2-0.md @@ -2,10 +2,10 @@ layout: blog title: 'Hands On With Linkerd 2.0' date: 2018-09-18 +author: > + Thomas Rampelberg (Buoyant) --- -**Author**: Thomas Rampelberg (Buoyant) - Linkerd 2.0 was recently announced as generally available (GA), signaling its readiness for production use. In this tutorial, we’ll walk you through how to get Linkerd 2.0 up and running on your Kubernetes cluster in a matter seconds. But first, what is Linkerd and why should you care? Linkerd is a service sidecar that augments a Kubernetes service, providing zero-config dashboards and UNIX-style CLI tools for runtime debugging, diagnostics, and reliability. Linkerd is also a service mesh, applied to multiple (or all) services in a cluster to provide a uniform layer of telemetry, security, and control across them. diff --git a/content/en/blog/_posts/2018-09-27-kubernetes-1-12-release-announcement.md b/content/en/blog/_posts/2018-09-27-kubernetes-1-12-release-announcement.md index 1f847a38ca..cb1234b366 100644 --- a/content/en/blog/_posts/2018-09-27-kubernetes-1-12-release-announcement.md +++ b/content/en/blog/_posts/2018-09-27-kubernetes-1-12-release-announcement.md @@ -3,10 +3,10 @@ layout: blog title: 'Kubernetes 1.12: Kubelet TLS Bootstrap and Azure Virtual Machine Scale Sets (VMSS) Move to General Availability' date: 2018-09-27 evergreen: true +author: > + [Kubernetes v1.12 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.12/release_team.md) --- -**Author**: The 1.12 [Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.12/release_team.md) - We’re pleased to announce the delivery of Kubernetes 1.12, our third release of 2018! Today’s release continues to focus on internal improvements and graduating features to stable in Kubernetes. This newest version graduates key features such as security and Azure. Notable additions in this release include two highly-anticipated features graduating to general availability: Kubelet TLS Bootstrap and Support for Azure Virtual Machine Scale Sets (VMSS). diff --git a/content/en/blog/_posts/2018-10-01-health-checking-grpc.md b/content/en/blog/_posts/2018-10-01-health-checking-grpc.md index 7fbde70524..57d749300b 100644 --- a/content/en/blog/_posts/2018-10-01-health-checking-grpc.md +++ b/content/en/blog/_posts/2018-10-01-health-checking-grpc.md @@ -2,10 +2,10 @@ layout: blog title: 'Health checking gRPC servers on Kubernetes' date: 2018-10-01 +author: > + [Ahmet Alp Balkan](https://twitter.com/ahmetb) (Google) --- -**Author**: [Ahmet Alp Balkan](https://twitter.com/ahmetb) (Google) - **Update (December 2021):** _Kubernetes now has built-in gRPC health probes starting in v1.23. To learn more, see [Configure Liveness, Readiness and Startup Probes](/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-grpc-liveness-probe). This article was originally written about an external tool to achieve the same task._ diff --git a/content/en/blog/_posts/2018-10-02-network-bootable-farm-with-ltsp.md b/content/en/blog/_posts/2018-10-02-network-bootable-farm-with-ltsp.md index 6026e06855..3aa618c354 100644 --- a/content/en/blog/_posts/2018-10-02-network-bootable-farm-with-ltsp.md +++ b/content/en/blog/_posts/2018-10-02-network-bootable-farm-with-ltsp.md @@ -2,10 +2,10 @@ layout: blog title: 'Building a Network Bootable Server Farm for Kubernetes with LTSP' date: 2018-10-02 +author: > + Andrei Kvapil (WEDOS) --- -**Author**: Andrei Kvapil (WEDOS) - ![k8s+ltsp](/images/blog/2018-10-01-network-bootable-farm-with-ltsp/k8s+ltsp.svg) diff --git a/content/en/blog/_posts/2018-10-03-kubedirector.md b/content/en/blog/_posts/2018-10-03-kubedirector.md index 105440ae04..5ffe5582a0 100644 --- a/content/en/blog/_posts/2018-10-03-kubedirector.md +++ b/content/en/blog/_posts/2018-10-03-kubedirector.md @@ -2,10 +2,10 @@ layout: blog title: 'KubeDirector: The easy way to run complex stateful applications on Kubernetes' date: 2018-10-03 +author: > + Thomas Phelan (BlueData) --- -**Author**: Thomas Phelan (BlueData) - KubeDirector is an open source project designed to make it easy to run complex stateful scale-out application clusters on Kubernetes. KubeDirector is built using the custom resource definition (CRD) framework and leverages the native Kubernetes API extensions and design philosophy. This enables transparent integration with Kubernetes user/resource management as well as existing clients and tools. We recently [introduced the KubeDirector project](https://medium.com/@thomas_phelan/operation-stateful-introducing-bluek8s-and-kubernetes-director-aa204952f619/), as part of a broader open source Kubernetes initiative we call BlueK8s. I’m happy to announce that the pre-alpha diff --git a/content/en/blog/_posts/2018-10-04-non-code-contributors-guide.md b/content/en/blog/_posts/2018-10-04-non-code-contributors-guide.md index b8fb7b2c29..8f30e89381 100644 --- a/content/en/blog/_posts/2018-10-04-non-code-contributors-guide.md +++ b/content/en/blog/_posts/2018-10-04-non-code-contributors-guide.md @@ -2,10 +2,12 @@ layout: blog title: 'Introducing the Non-Code Contributor’s Guide' date: 2018-10-04 +author: > + [Noah Abrahams](https://twitter.com/noah_abrahams) (InfoSiftr), + [Jonas Rosland](https://twitter.com/jonasrosland) (VMware), + [Ihor Dvoretskyi](https://twitter.com/idvoretskyi) (CNCF) --- -**Author**: [Noah Abrahams](https://twitter.com/noah_abrahams) (InfoSiftr), [Jonas Rosland](https://twitter.com/jonasrosland) (VMware), [Ihor Dvoretskyi](https://twitter.com/idvoretskyi) (CNCF) - It was May 2018 in Copenhagen, and the Kubernetes community was enjoying the contributor summit at KubeCon/CloudNativeCon, complete with the first run of the New Contributor Workshop. As a time of tremendous collaboration between contributors, the topics covered ranged from signing the CLA to deep technical conversations. Along with the vast exchange of information and ideas, however, came continued scrutiny of the topics at hand to ensure that the community was being as inclusive and accommodating as possible. Over that spring week, some of the pieces under the microscope included the many themes being covered, and how they were being presented, but also the overarching characteristics of the people contributing and the skill sets involved. From the discussions and analysis that followed grew the idea that the community was not benefiting as much as it could from the many people who wanted to contribute, but whose strengths were in areas other than writing code. **This all led to an effort called the [Non-Code Contributor’s Guide](https://github.com/kubernetes/community/blob/master/contributors/guide/non-code-contributions.md).** diff --git a/content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md b/content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md index ca942ac013..6e3a5587a9 100644 --- a/content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md +++ b/content/en/blog/_posts/2018-10-08-support-for-azure-vmss.md @@ -2,10 +2,11 @@ layout: blog title: 'Support for Azure VMSS, Cluster-Autoscaler and User Assigned Identity' date: 2018-10-08 +author: > + [Krishnakumar R (KK)](https://twitter.com/kkwriting) (Microsoft), + [Pengfei Ni](https://twitter.com/feisky) (Microsoft) --- -**Author**: [Krishnakumar R (KK)](https://twitter.com/kkwriting) (Microsoft), [Pengfei Ni](https://twitter.com/feisky) (Microsoft) - ## Introduction With Kubernetes v1.12, Azure virtual machine scale sets (VMSS) and cluster-autoscaler have reached their General Availability (GA) and User Assigned Identity is available as a preview feature. diff --git a/content/en/blog/_posts/2018-10-09-volume-snapshot-alpha.md b/content/en/blog/_posts/2018-10-09-volume-snapshot-alpha.md index 8706c6b6f2..13350f59ed 100644 --- a/content/en/blog/_posts/2018-10-09-volume-snapshot-alpha.md +++ b/content/en/blog/_posts/2018-10-09-volume-snapshot-alpha.md @@ -2,10 +2,12 @@ layout: blog title: 'Introducing Volume Snapshot Alpha for Kubernetes' date: 2018-10-09 +author: > + Jing Xu (Google), + Xing Yang (Huawei), + Saad Ali (Google) --- -**Author**: Jing Xu (Google) Xing Yang (Huawei), Saad Ali (Google) - Kubernetes v1.12 introduces alpha support for volume snapshotting. This feature allows creating/deleting volume snapshots, and the ability to create new volumes from a snapshot natively using the Kubernetes API. ## What is a Snapshot? diff --git a/content/en/blog/_posts/2018-10-10-runtimeclass.md b/content/en/blog/_posts/2018-10-10-runtimeclass.md index 5c2ba7208b..3f4c425fbe 100644 --- a/content/en/blog/_posts/2018-10-10-runtimeclass.md +++ b/content/en/blog/_posts/2018-10-10-runtimeclass.md @@ -2,10 +2,10 @@ layout: blog title: 'Kubernetes v1.12: Introducing RuntimeClass' date: 2018-10-10 +author: > + Tim Allclair (Google) --- -**Author**: Tim Allclair (Google) - Kubernetes originally launched with support for Docker containers running native applications on a Linux host. Starting with [rkt](https://kubernetes.io/blog/2016/07/rktnetes-brings-rkt-container-engine-to-kubernetes/) in Kubernetes 1.3 more runtimes were coming, which lead to the development of the [Container Runtime Interface](https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/) (CRI). Since then, the set of alternative runtimes has only expanded: projects like [Kata Containers](https://katacontainers.io/) and [gVisor](https://github.com/google/gvisor) were announced for stronger workload isolation, and Kubernetes' Windows support has been [steadily progressing](https://kubernetes.io/blog/2018/01/kubernetes-v19-beta-windows-support/). With runtimes targeting so many different use cases, a clear need for mixed runtimes in a cluster arose. But all these different ways of running containers have brought a new set of problems to deal with: diff --git a/content/en/blog/_posts/2018-10-11-topology-aware-volume-provisioning.md b/content/en/blog/_posts/2018-10-11-topology-aware-volume-provisioning.md index d8b4db1e7e..6c3635bb77 100644 --- a/content/en/blog/_posts/2018-10-11-topology-aware-volume-provisioning.md +++ b/content/en/blog/_posts/2018-10-11-topology-aware-volume-provisioning.md @@ -2,10 +2,10 @@ layout: blog title: 'Topology-Aware Volume Provisioning in Kubernetes' date: 2018-10-11 +author: > + Michelle Au (Google) --- -**Author**: Michelle Au (Google) - The multi-zone cluster experience with persistent volumes is improving in Kubernetes 1.12 with the topology-aware dynamic provisioning beta feature. This feature allows Kubernetes to make intelligent decisions when dynamically provisioning volumes by getting scheduler input on the best place to provision a volume for a pod. In multi-zone clusters, this means that volumes will get provisioned in an appropriate zone that can run your pod, allowing you to easily deploy and scale your stateful workloads across failure domains to provide high availability and fault tolerance. ## Previous challenges diff --git a/content/en/blog/_posts/2018-10-15-steering-election-results.md b/content/en/blog/_posts/2018-10-15-steering-election-results.md index e6b7677981..0589751d05 100644 --- a/content/en/blog/_posts/2018-10-15-steering-election-results.md +++ b/content/en/blog/_posts/2018-10-15-steering-election-results.md @@ -2,10 +2,12 @@ layout: blog title: '2018 Steering Committee Election Results' date: 2018-10-15 +author: > + Jorge Castro (Heptio), + Ihor Dvoretskyi (CNCF), + Paris Pittman (Google) --- -**Authors**: Jorge Castro (Heptio), Ihor Dvoretskyi (CNCF), Paris Pittman (Google) - ## Results The [Kubernetes Steering Committee Election](https://kubernetes.io/blog/2018/09/06/2018-steering-committee-election-cycle-kicks-off/) is now complete and the following candidates came ahead to secure two year terms that start immediately: diff --git a/content/en/blog/_posts/2018-10-16-kubernetes-2018-north-american-contributor-summit.md b/content/en/blog/_posts/2018-10-16-kubernetes-2018-north-american-contributor-summit.md index 13158529a2..c745aca10c 100644 --- a/content/en/blog/_posts/2018-10-16-kubernetes-2018-north-american-contributor-summit.md +++ b/content/en/blog/_posts/2018-10-16-kubernetes-2018-north-american-contributor-summit.md @@ -3,12 +3,12 @@ layout: blog title: "Kubernetes 2018 North American Contributor Summit" date: 2018-10-16 evergreen: true +author: > + Bob Killen (University of Michigan), + Sahdev Zala (IBM), + Ihor Dvoretskyi (CNCF) --- -**Authors:** -[Bob Killen][bob] (University of Michigan), [Sahdev Zala][sahdev] (IBM), [Ihor Dvoretskyi][ihor] (CNCF) - - The 2018 North American Kubernetes Contributor Summit to be hosted right before [KubeCon + CloudNativeCon][kubecon] Seattle is shaping up to be the largest yet. It is an event that brings together new and current contributors alike to diff --git a/content/en/blog/_posts/2018-10-18-tips-for-first-kubecon-presentation-part-1.md b/content/en/blog/_posts/2018-10-18-tips-for-first-kubecon-presentation-part-1.md index 41bf1e4a96..474b1d3054 100644 --- a/content/en/blog/_posts/2018-10-18-tips-for-first-kubecon-presentation-part-1.md +++ b/content/en/blog/_posts/2018-10-18-tips-for-first-kubecon-presentation-part-1.md @@ -2,10 +2,10 @@ layout: blog title: 'Tips for Your First Kubecon Presentation - Part 1' date: 2018-10-18 +author: > + Michael Gasch (VMware) --- -**Author**: Michael Gasch (VMware) - First of all, let me congratulate you to this outstanding achievement. Speaking at KubeCon, especially if it's your first time, is a tremendous honor and experience. Well done!
    diff --git a/content/en/blog/_posts/2018-10-26-tips-for-first-kubecon-presentation-part-2.md b/content/en/blog/_posts/2018-10-26-tips-for-first-kubecon-presentation-part-2.md index 8f78842899..e8ec13a866 100644 --- a/content/en/blog/_posts/2018-10-26-tips-for-first-kubecon-presentation-part-2.md +++ b/content/en/blog/_posts/2018-10-26-tips-for-first-kubecon-presentation-part-2.md @@ -2,10 +2,10 @@ layout: blog title: 'Tips for Your First Kubecon Presentation - Part 2' date: 2018-10-26 +author: > + Michael Gasch (VMware) --- -**Author**: Michael Gasch (VMware) - Hello and welcome back to the second and final part about tips for KubeCon first-time speakers. If you missed the last post, please give it a read [here](https://kubernetes.io/blog/2018/10/18/tips-for-your-first-kubecon-presentation-part-1/). ## The Day before the Show diff --git a/content/en/blog/_posts/2018-11-07-grpc-load-balancing-with-linkerd.md b/content/en/blog/_posts/2018-11-07-grpc-load-balancing-with-linkerd.md index 38515642c1..9e72492d2e 100644 --- a/content/en/blog/_posts/2018-11-07-grpc-load-balancing-with-linkerd.md +++ b/content/en/blog/_posts/2018-11-07-grpc-load-balancing-with-linkerd.md @@ -2,10 +2,10 @@ layout: blog title: 'gRPC Load Balancing on Kubernetes without Tears' date: 2018-11-07 +author: > + William Morgan (Buoyant) --- -**Author**: William Morgan (Buoyant) - Many new gRPC users are surprised to find that Kubernetes's default load balancing often doesn't work out of the box with gRPC. For example, here's what happens when you take a [simple gRPC Node.js microservices diff --git a/content/en/blog/_posts/2018-11-08-kubernetes-docs-update-i18n.md b/content/en/blog/_posts/2018-11-08-kubernetes-docs-update-i18n.md index d9ac11759e..003529f60d 100644 --- a/content/en/blog/_posts/2018-11-08-kubernetes-docs-update-i18n.md +++ b/content/en/blog/_posts/2018-11-08-kubernetes-docs-update-i18n.md @@ -2,10 +2,10 @@ layout: blog title: 'Kubernetes Docs Updates, International Edition' date: 2018-11-08 +author: > + Zach Corleissen (Linux Foundation) --- -**Author**: Zach Corleissen (Linux Foundation) - As a co-chair of SIG Docs, I'm excited to share that Kubernetes docs have a fully mature workflow for localization (l10n). ## Abbreviations galore diff --git a/content/en/blog/_posts/2018-12-03-kubernetes-1-13-release-announcement.md b/content/en/blog/_posts/2018-12-03-kubernetes-1-13-release-announcement.md index 3e76486764..9aac85e2eb 100644 --- a/content/en/blog/_posts/2018-12-03-kubernetes-1-13-release-announcement.md +++ b/content/en/blog/_posts/2018-12-03-kubernetes-1-13-release-announcement.md @@ -4,10 +4,10 @@ title: 'Kubernetes 1.13: Simplified Cluster Management with Kubeadm, Container S date: 2018-12-03 slug: kubernetes-1-13-release-announcement evergreen: true +author: > + [Kubernetes v1.13 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.13/release_team.md) --- -**Author**: The 1.13 [Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.13/release_team.md) - We’re pleased to announce the delivery of Kubernetes 1.13, our fourth and final release of 2018! Kubernetes 1.13 has been one of the shortest releases to date at 10 weeks. This release continues to focus on stability and extensibility of Kubernetes with three major features graduating to general availability this cycle in the areas of Storage and Cluster Lifecycle. Notable features graduating in this release include: simplified cluster management with kubeadm, Container Storage Interface (CSI), and CoreDNS as the default DNS. diff --git a/content/en/blog/_posts/2018-12-04-kubeadm-ga-release.md b/content/en/blog/_posts/2018-12-04-kubeadm-ga-release.md index 9fc3f4702d..96a106c226 100644 --- a/content/en/blog/_posts/2018-12-04-kubeadm-ga-release.md +++ b/content/en/blog/_posts/2018-12-04-kubeadm-ga-release.md @@ -3,10 +3,11 @@ layout: blog title: Production-Ready Kubernetes Cluster Creation with kubeadm date: 2018-12-04 evergreen: true +author: > + Lucas Käldström (CNCF), + Luc Perkins (CNCF) --- -**Authors**: Lucas Käldström (CNCF Ambassador) and Luc Perkins (CNCF Developer Advocate) - [kubeadm](/docs/setup/independent/create-cluster-kubeadm/) is a tool that enables Kubernetes administrators to quickly and easily bootstrap minimum viable clusters that are fully compliant with [Certified Kubernetes](https://github.com/cncf/k8s-conformance/blob/master/terms-conditions/Certified_Kubernetes_Terms.md) guidelines. It's been under active development by [SIG Cluster Lifecycle](https://github.com/kubernetes/community/tree/master/sig-cluster-lifecycle) since 2016 and we're excited to announce that it has now graduated from beta to stable and generally available (GA)! This GA release of kubeadm is an important event in the progression of the Kubernetes ecosystem, bringing stability to an area where stability is paramount. diff --git a/content/en/blog/_posts/2018-12-05-new-contributor-shanghai.md b/content/en/blog/_posts/2018-12-05-new-contributor-shanghai.md index 23d955d064..7f5b5f2af7 100644 --- a/content/en/blog/_posts/2018-12-05-new-contributor-shanghai.md +++ b/content/en/blog/_posts/2018-12-05-new-contributor-shanghai.md @@ -2,10 +2,13 @@ layout: blog title: 'New Contributor Workshop Shanghai' date: 2018-12-05 +author: > + Josh Berkus (Red Hat), + Yang Li (The Plant), + Puja Abbassi (Giant Swarm), + XiangPeng Zhao (ZTE) --- -**Authors**: Josh Berkus (Red Hat), Yang Li (The Plant), Puja Abbassi (Giant Swarm), XiangPeng Zhao (ZTE) - {{< figure src="/images/blog/2018-12-05-new-contributor-shanghai/attendees.png" caption="Kubecon Shanghai New Contributor Summit attendees. Photo by Jerry Zhang" >}} We recently completed our first New Contributor Summit in China, at the first KubeCon in China. It was very exciting to see all of the Chinese and Asian developers (plus a few folks from around the world) interested in becoming contributors. Over the course of a long day, they learned how, why, and where to contribute to Kubernetes, created pull requests, attended a panel of current contributors, and got their CLAs signed. diff --git a/content/en/blog/_posts/2018-12-11-Kubernetes-Federation-Evolution.md b/content/en/blog/_posts/2018-12-11-Kubernetes-Federation-Evolution.md index e01239564d..f732a32930 100644 --- a/content/en/blog/_posts/2018-12-11-Kubernetes-Federation-Evolution.md +++ b/content/en/blog/_posts/2018-12-11-Kubernetes-Federation-Evolution.md @@ -2,10 +2,12 @@ layout: blog title: Kubernetes Federation Evolution date: 2018-12-12 +author: > + Irfan Ur Rehman (Huawei), + Paul Morie (RedHat), + Shashidhara T D (Huawei) --- -**Authors**: Irfan Ur Rehman (Huawei), Paul Morie (RedHat) and Shashidhara T D (Huawei) - Kubernetes provides great primitives for deploying applications to a cluster: it can be as simple as `kubectl create -f app.yaml`. Deploy apps across multiple clusters has never been that simple. How should app workloads be distributed? Should the app resources be replicated into all clusters, replicated into selected clusters, or partitioned into clusters? How is access to the clusters managed? What happens if some of the resources that a user wants to distribute pre-exist, in some or all of the clusters, in some form? In SIG Multicluster, our journey has revealed that there are multiple possible models to solve these problems and there probably is no single best-fit, all-scenario solution. [Kubernetes Cluster Federation (KubeFed for short)](https://github.com/kubernetes-sigs/kubefed), however, is the single biggest Kubernetes open source sub-project, and has seen the maximum interest and contribution from the community in this problem space. The project initially reused the Kubernetes API to do away with any added usage complexity for an existing Kubernetes user. This approach was not viable, because of the problems summarised below: diff --git a/content/en/blog/_posts/2018-12-11-current-status-and-future-roadmap.md b/content/en/blog/_posts/2018-12-11-current-status-and-future-roadmap.md index de7149ebe7..db05faa453 100644 --- a/content/en/blog/_posts/2018-12-11-current-status-and-future-roadmap.md +++ b/content/en/blog/_posts/2018-12-11-current-status-and-future-roadmap.md @@ -2,10 +2,11 @@ layout: blog title: 'etcd: Current status and future roadmap' date: 2018-12-11 +author: > + Gyuho Lee (Amazon), + Joe Betz (Google Cloud) --- -**Author**: Gyuho Lee (Amazon Container OSS Team, @gyuho), Joe Betz (Google Cloud, @jpbetz) - etcd is a distributed key value store that provides a reliable way to manage the coordination state of distributed systems. etcd was first announced in June 2013 by CoreOS (part of Red Hat as of 2018). Since its adoption in Kubernetes in 2014, etcd has become a fundamental part of the Kubernetes cluster management software design, and the etcd community has grown exponentially. etcd is now being used in production environments of multiple companies, including large cloud provider environments such as AWS, Google Cloud Platform, Azure, and other on-premises Kubernetes implementations. CNCF currently has [32 conformant Kubernetes platforms and distributions](https://www.cncf.io/announcement/2017/11/13/cloud-native-computing-foundation-launches-certified-kubernetes-program-32-conformant-distributions-platforms/), all of which use etcd as the datastore. In this blog post, we’ll review some of the milestones achieved in latest etcd releases, and go over the future roadmap for etcd. Share your thoughts and feedback on features you consider important on the mailing list: etcd-dev@googlegroups.com. From 9e128e3fc7906e3c7eb6486bfc9c03b4508999b0 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Tue, 14 May 2024 00:52:02 +0100 Subject: [PATCH 1016/1086] Reimplement code_sample shortcode Use Hugo Pipes for the icon asset pipeline, and avoid inline styling. --- {static => assets}/images/copycode.svg | 0 assets/scss/_custom.scss | 5 +++++ layouts/shortcodes/code.html | 13 +++++++------ layouts/shortcodes/code_sample.html | 13 +++++++------ layouts/shortcodes/codenew.html | 13 +++++++------ 5 files changed, 26 insertions(+), 18 deletions(-) rename {static => assets}/images/copycode.svg (100%) diff --git a/static/images/copycode.svg b/assets/images/copycode.svg similarity index 100% rename from static/images/copycode.svg rename to assets/images/copycode.svg diff --git a/assets/scss/_custom.scss b/assets/scss/_custom.scss index e5e376438b..223900bf09 100644 --- a/assets/scss/_custom.scss +++ b/assets/scss/_custom.scss @@ -1407,4 +1407,9 @@ div.alert > em.javascript-required { cursor: pointer; font-size: calc(5vw + 10px); color: #333; +} + +.code-sample > .copy-code-icon { + cursor: pointer; + text-align: right; } \ No newline at end of file diff --git a/layouts/shortcodes/code.html b/layouts/shortcodes/code.html index 08064fa3f3..11f7eb8112 100644 --- a/layouts/shortcodes/code.html +++ b/layouts/shortcodes/code.html @@ -1,6 +1,6 @@ {{ $p := .Page }} {{ $file := .Get "file" }} -{{ $codelang := .Get "language" | default (path.Ext $file | strings.TrimPrefix ".") }} +{{ $codelang := .Get "language" | default (path.Ext $file | strings.TrimPrefix ".") }} {{ $fileDir := path.Split $file }} {{ $bundlePath := path.Join .Page.File.Dir $fileDir.Dir }} {{ $filename := printf "/content/%s/examples/%s" .Page.Lang $file | safeURL }} @@ -18,15 +18,16 @@ {{ errorf "[%s] %q not found in %q" site.Language.Lang $fileDir.File $bundlePath }} {{ end }} {{ with $.Scratch.Get "content" }} -
    -
    +
    +
    {{ with $ghlink }}{{ end }}{{ $file }} {{ if $ghlink }}{{ end }} - - + {{- with resources.Get "images/copycode.svg" -}} + + {{- end -}}
    {{- highlight . $codelang "" -}}
    -{{ end }} +{{- end -}} diff --git a/layouts/shortcodes/code_sample.html b/layouts/shortcodes/code_sample.html index 08064fa3f3..11f7eb8112 100644 --- a/layouts/shortcodes/code_sample.html +++ b/layouts/shortcodes/code_sample.html @@ -1,6 +1,6 @@ {{ $p := .Page }} {{ $file := .Get "file" }} -{{ $codelang := .Get "language" | default (path.Ext $file | strings.TrimPrefix ".") }} +{{ $codelang := .Get "language" | default (path.Ext $file | strings.TrimPrefix ".") }} {{ $fileDir := path.Split $file }} {{ $bundlePath := path.Join .Page.File.Dir $fileDir.Dir }} {{ $filename := printf "/content/%s/examples/%s" .Page.Lang $file | safeURL }} @@ -18,15 +18,16 @@ {{ errorf "[%s] %q not found in %q" site.Language.Lang $fileDir.File $bundlePath }} {{ end }} {{ with $.Scratch.Get "content" }} -
    -
    +
    +
    {{ with $ghlink }}{{ end }}{{ $file }} {{ if $ghlink }}{{ end }} - - + {{- with resources.Get "images/copycode.svg" -}} + + {{- end -}}
    {{- highlight . $codelang "" -}}
    -{{ end }} +{{- end -}} diff --git a/layouts/shortcodes/codenew.html b/layouts/shortcodes/codenew.html index 08064fa3f3..11f7eb8112 100644 --- a/layouts/shortcodes/codenew.html +++ b/layouts/shortcodes/codenew.html @@ -1,6 +1,6 @@ {{ $p := .Page }} {{ $file := .Get "file" }} -{{ $codelang := .Get "language" | default (path.Ext $file | strings.TrimPrefix ".") }} +{{ $codelang := .Get "language" | default (path.Ext $file | strings.TrimPrefix ".") }} {{ $fileDir := path.Split $file }} {{ $bundlePath := path.Join .Page.File.Dir $fileDir.Dir }} {{ $filename := printf "/content/%s/examples/%s" .Page.Lang $file | safeURL }} @@ -18,15 +18,16 @@ {{ errorf "[%s] %q not found in %q" site.Language.Lang $fileDir.File $bundlePath }} {{ end }} {{ with $.Scratch.Get "content" }} -
    -
    +
    +
    {{ with $ghlink }}{{ end }}{{ $file }} {{ if $ghlink }}{{ end }} - - + {{- with resources.Get "images/copycode.svg" -}} + + {{- end -}}
    {{- highlight . $codelang "" -}}
    -{{ end }} +{{- end -}} From 2b498d9bfb9a0276cd4b6a45f42172302c7e1a6e Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Tue, 14 May 2024 01:06:55 +0100 Subject: [PATCH 1017/1086] Make tooltip localizable Allow localizations to customize the tooltip for copying code samples to the clipboard. --- data/i18n/en/en.toml | 3 +++ layouts/shortcodes/code.html | 3 ++- layouts/shortcodes/code_sample.html | 3 ++- layouts/shortcodes/codenew.html | 3 ++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/data/i18n/en/en.toml b/data/i18n/en/en.toml index 80f1306f28..b16e8b6e04 100644 --- a/data/i18n/en/en.toml +++ b/data/i18n/en/en.toml @@ -68,6 +68,9 @@ other = "YouTube" [conjunction_1] other = "and" +[copy_sample_to_clipboard] +other = "Copy {{ .filename }} to clipboard" + [cve_id] other = "CVE ID" diff --git a/layouts/shortcodes/code.html b/layouts/shortcodes/code.html index 11f7eb8112..fda3a27f13 100644 --- a/layouts/shortcodes/code.html +++ b/layouts/shortcodes/code.html @@ -22,8 +22,9 @@
    {{ with $ghlink }}{{ end }}{{ $file }} {{ if $ghlink }}{{ end }} + {{- $copyTitle := T "copy_sample_to_clipboard" (dict "filename" $file) -}} {{- with resources.Get "images/copycode.svg" -}} - + {{- end -}}
    diff --git a/layouts/shortcodes/code_sample.html b/layouts/shortcodes/code_sample.html index 11f7eb8112..fda3a27f13 100644 --- a/layouts/shortcodes/code_sample.html +++ b/layouts/shortcodes/code_sample.html @@ -22,8 +22,9 @@
    {{ with $ghlink }}{{ end }}{{ $file }} {{ if $ghlink }}{{ end }} + {{- $copyTitle := T "copy_sample_to_clipboard" (dict "filename" $file) -}} {{- with resources.Get "images/copycode.svg" -}} - + {{- end -}}
    diff --git a/layouts/shortcodes/codenew.html b/layouts/shortcodes/codenew.html index 11f7eb8112..fda3a27f13 100644 --- a/layouts/shortcodes/codenew.html +++ b/layouts/shortcodes/codenew.html @@ -22,8 +22,9 @@
    {{ with $ghlink }}{{ end }}{{ $file }} {{ if $ghlink }}{{ end }} + {{- $copyTitle := T "copy_sample_to_clipboard" (dict "filename" $file) -}} {{- with resources.Get "images/copycode.svg" -}} - + {{- end -}}
    From e2d9c4f1c5615adeabda97291839514afd997e2a Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Tue, 14 May 2024 00:53:00 +0100 Subject: [PATCH 1018/1086] Add space around code snippet copy icon --- assets/scss/_custom.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/scss/_custom.scss b/assets/scss/_custom.scss index 223900bf09..5f8e91f6f2 100644 --- a/assets/scss/_custom.scss +++ b/assets/scss/_custom.scss @@ -1412,4 +1412,5 @@ div.alert > em.javascript-required { .code-sample > .copy-code-icon { cursor: pointer; text-align: right; + padding: 0.2rem; } \ No newline at end of file From 71cc94da999a21c99556b8ca865ec9b4b982e84b Mon Sep 17 00:00:00 2001 From: Asem Hamid <155321064+asem-hamid@users.noreply.github.com> Date: Tue, 14 May 2024 14:07:16 +0600 Subject: [PATCH 1019/1086] Nominate sajibAdhi as a Reviewer for Kubernetes Bangla Localization --- OWNERS_ALIASES | 1 + 1 file changed, 1 insertion(+) diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index c64d4bcd36..8c6c002694 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -46,6 +46,7 @@ aliases: - Imtiaz1234 - mitul3737 - rajibmitra + - sajibAdhi sig-docs-de-owners: # Admins for German content - bene2k1 - rlenferink From 252398678bba6140225aa2e01fc371d190f17d6e Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Wed, 15 May 2024 01:34:38 +0800 Subject: [PATCH 1020/1086] [zh-cn] sync client-authentication.v1beta1 ports-and-protocols Signed-off-by: xin.li --- .../client-authentication.v1beta1.md | 111 ++++++++---------- .../networking/ports-and-protocols.md | 12 +- 2 files changed, 53 insertions(+), 70 deletions(-) diff --git a/content/zh-cn/docs/reference/config-api/client-authentication.v1beta1.md b/content/zh-cn/docs/reference/config-api/client-authentication.v1beta1.md index aa8dcff48d..14c58466b7 100644 --- a/content/zh-cn/docs/reference/config-api/client-authentication.v1beta1.md +++ b/content/zh-cn/docs/reference/config-api/client-authentication.v1beta1.md @@ -32,8 +32,8 @@ ExecCredential 由基于 exec 的插件使用,与 HTTP 传输组件沟通凭 apiVersion
    stringclient.authentication.k8s.io/v1beta1 kind
    stringExecCredential - -spec [必需]
    + +spec [必需]
    ExecCredentialSpec @@ -41,9 +41,9 @@ ExecCredential 由基于 exec 的插件使用,与 HTTP 传输组件沟通凭 字段 spec 包含由 HTTP 传输组件传递给插件的信息。 - -status
    + +status
    ExecCredentialStatus @@ -52,24 +52,17 @@ ExecCredential 由基于 exec 的插件使用,与 HTTP 传输组件沟通凭 字段 status 由插件填充,包含传输组件与 API 服务器连接时需要提供的凭据。 - - + - - ## `Cluster` {#client-authentication-k8s-io-v1beta1-Cluster} - - - **出现在:** - [ExecCredentialSpec](#client-authentication-k8s-io-v1beta1-ExecCredentialSpec) - 字段描述 - - -server [必需]
    + +server [必需]
    string @@ -100,9 +92,9 @@ Cluster 中包含允许 exec 插件与 Kubernetes 集群进行通信身份认证 字段 server 是 Kubernetes 集群的地址(https://hostname:port)。 - - -tls-server-name
    + + +tls-server-name
    string @@ -115,9 +107,9 @@ used to contact the server is used. 如此字段为空,则使用链接服务器时使用的主机名。 - - -insecure-skip-tls-verify
    + + +insecure-skip-tls-verify
    bool @@ -129,9 +121,9 @@ This will make your HTTPS connections insecure. 这会使得你的 HTTPS 链接不再安全。 - - -certificate-authority-data
    + + +certificate-authority-data
    []byte @@ -143,9 +135,9 @@ If empty, system roots should be used. 如果为空,则使用系统的根证书。 - - -proxy-url
    + + +proxy-url
    string @@ -154,7 +146,8 @@ If empty, system roots should be used. -disable-compression
    + +disable-compression
    bool @@ -169,7 +162,8 @@ If empty, system roots should be used. -config
    + +config
    k8s.io/apimachinery/pkg/runtime.RawExtension @@ -208,24 +202,17 @@ to be stored directly in the kubeconfig. kubeconfig 中保存 Secret 数据。

    - - - ## `ExecCredentialSpec` {#client-authentication-k8s-io-v1beta1-ExecCredentialSpec} - - - **出现在:** - [ExecCredential](#client-authentication-k8s-io-v1beta1-ExecCredential) - 字段描述 - - cluster
    Cluster @@ -253,44 +238,41 @@ ExecConfig.ProvideClusterInfo). (即:ExecConfig.ProvideClusterInfo)被设置为 true 时才不能为空。 - - + - - ## `ExecCredentialStatus` {#client-authentication-k8s-io-v1beta1-ExecCredentialStatus} - - - **出现在:** - [ExecCredential](#client-authentication-k8s-io-v1beta1-ExecCredential) - - +ExecCredentialStatus 中包含传输组件要使用的凭据。 +

    +

    + -

    ExecCredentialStatus 中包含传输组件要使用的凭据。

    - -

    字段 token 和 clientKeyData 都是敏感字段。 +字段 token 和 clientKeyData 都是敏感字段。 此数据只能在客户端与 exec 插件进程之间使用内存来传递。 -exec 插件本身至少应通过文件访问许可来实施保护。

    +exec 插件本身至少应通过文件访问许可来实施保护。 +

    - - - + - - + - - - + - - - + - - +
    字段描述
    expirationTimestamp
    -meta/v1.Time +
    expirationTimestamp
    +meta/v1.Time
    @@ -298,8 +280,8 @@ exec 插件本身至少应通过文件访问许可来实施保护。

    token [必需]
    +
    token [必需]
    string
    @@ -307,9 +289,9 @@ exec 插件本身至少应通过文件访问许可来实施保护。

    客户端用做请求身份认证的持有者令牌。
    clientCertificateData [必需]
    + +
    clientCertificateData [必需]
    string
    @@ -317,9 +299,9 @@ exec 插件本身至少应通过文件访问许可来实施保护。

    PEM 编码的客户端 TLS 证书(如果有临时证书,也会包含)。
    clientKeyData [必需]
    + +
    clientKeyData [必需]
    string
    @@ -327,7 +309,6 @@ exec 插件本身至少应通过文件访问许可来实施保护。

    与上述证书对应的、PEM 编码的私钥。
    diff --git a/content/zh-cn/docs/reference/networking/ports-and-protocols.md b/content/zh-cn/docs/reference/networking/ports-and-protocols.md index 90a97f38b2..ed84ef6192 100644 --- a/content/zh-cn/docs/reference/networking/ports-and-protocols.md +++ b/content/zh-cn/docs/reference/networking/ports-and-protocols.md @@ -37,9 +37,9 @@ etcd cluster externally or on custom ports. | 协议 | 方向 | 端口范围 | 目的 | 使用者 | |----------|-----------|------------|-------------------------|---------------------------| -| TCP | 入站 | 6443 | Kubernetes API server | 所有 | -| TCP | 入站 | 2379-2380 | etcd server client API | kube-apiserver, etcd | -| TCP | 入站 | 10250 | Kubelet API | 自身, 控制面 | +| TCP | 入站 | 6443 | Kubernetes API 服务器 | 所有 | +| TCP | 入站 | 2379-2380 | etcd 服务器客户端 API | kube-apiserver、etcd | +| TCP | 入站 | 10250 | kubelet API | 自身、控制面 | | TCP | 入站 | 10259 | kube-scheduler | 自身 | | TCP | 入站 | 10257 | kube-controller-manager | 自身 | @@ -51,6 +51,7 @@ etcd cluster externally or on custom ports. | Protocol | Direction | Port Range | Purpose | Used By | |----------|-----------|-------------|-----------------------|-------------------------| | TCP | Inbound | 10250 | Kubelet API | Self, Control plane | +| TCP | Inbound | 10256 | kube-proxy | Self, Load balancers | | TCP | Inbound | 30000-32767 | NodePort Services† | All | † Default port range for [NodePort Services](/docs/concepts/services-networking/service/). @@ -67,10 +68,11 @@ on the default port. | 协议 | 方向 | 端口范围 | 目的 | 使用者 | |----------|-----------|-------------|-----------------------|-------------------------| -| TCP | 入站 | 10250 | Kubelet API | 自身, 控制面 | +| TCP | 入站 | 10250 | kubelet API | 自身、控制面 | +| TCP | 入站 | 10256 | kube-proxy | 自身、负载均衡器 | | TCP | 入站 | 30000-32767 | NodePort Services† | 所有 | -† [NodePort Services](/zh-cn/docs/concepts/services-networking/service/)的默认端口范围。 +† [NodePort Service](/zh-cn/docs/concepts/services-networking/service/) 的默认端口范围。 所有默认端口都可以重新配置。当使用自定义的端口时,你需要打开这些端口来代替这里提到的默认端口。 From d8d0f22596327d43d4da71b7b66b69152257ed58 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Wed, 15 May 2024 01:43:20 +0800 Subject: [PATCH 1021/1086] [zh-cn]sync kubeadm_join_phase_preflight kubeadm_upgrade_apply Signed-off-by: xin.li --- .../generated/kubeadm_join_phase_preflight.md | 7 +++++-- .../kubeadm/generated/kubeadm_upgrade_apply.md | 12 +++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_preflight.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_preflight.md index 6dc7608c84..b1cb90d5d7 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_preflight.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_preflight.md @@ -74,10 +74,13 @@ kubeadm join phase preflight --config kubeadm-config.yaml +

    -

    使用此密钥可以解密由 `init` 操作上传的证书 Secret。

    +使用此密钥可以解密由 `init` 操作上传的证书 Secret。 +证书密钥为十六进制编码的字符串,是大小为 32 字节的 AES 密钥。 +

    diff --git a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md index 010e5232ea..29d3de27ae 100644 --- a/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md +++ b/content/zh-cn/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md @@ -125,17 +125,19 @@ Perform the upgrade of etcd.

    一组键值对,用于描述各种功能。选项包括:
    EtcdLearnerMode=true|false (ALPHA - 默认值=false)
    -PublicKeysECDSA=true|false (ALPHA - 默认值=false)
    -RootlessControlPlane=true|false (ALPHA - 默认值=false)
    +PublicKeysECDSA=true|false (BETA - 默认值=true)
    +RootlessControlPlane=true|false (DEPRECATED - 默认值=false)
    UpgradeAddonsBeforeControlPlane=true|false (DEPRECATED - 默认值=false) +WaitForAllControlPlaneComponents=true|false (ALPHA - 默认值=false)

    From e7ff2c809e93def79ba247665c70731a2ff8c1fd Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Wed, 15 May 2024 01:50:25 +0800 Subject: [PATCH 1022/1086] [zh-cn] sync feature-gates/* Signed-off-by: xin.li --- .../feature-gates/aggregated-discovery-endpoint.md | 4 ++++ .../feature-gates/cloud-dual-stack-node-ips.md | 4 ++++ .../feature-gates/contextual-logging.md | 10 ++++++---- .../feature-gates/topology-manager-policy-options.md | 5 +++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/aggregated-discovery-endpoint.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/aggregated-discovery-endpoint.md index f84f5c77d1..f059d91796 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/aggregated-discovery-endpoint.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/aggregated-discovery-endpoint.md @@ -13,6 +13,10 @@ stages: - stage: beta defaultValue: true fromVersion: "1.27" + toVersion: "1.29" + - stage: stable + defaultValue: true + fromVersion: "1.30" --- -当你启用这个特性门控,支持日志上下文记录的 Kubernetes -组件会为日志输出添加额外的详细内容。 +在支持上下文日志记录的 Kubernetes 组件的日志输出中启用额外的详细信息。 diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/topology-manager-policy-options.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/topology-manager-policy-options.md index 8a7e03885c..df788891d0 100644 --- a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/topology-manager-policy-options.md +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/topology-manager-policy-options.md @@ -16,6 +16,7 @@ stages: --- -允许对拓扑管理器策略进行微调。 +启用拓扑管理器策略的[微调](/zh-cn/docs/tasks/administer-cluster/topology-manager/#topology-manager-policy-options)。 From 690a4ae1881c15ec562d6f6cae2895b5e4596d76 Mon Sep 17 00:00:00 2001 From: AbdelatifAitBara Date: Tue, 14 May 2024 20:12:36 +0200 Subject: [PATCH 1023/1086] Update list of versions to match English --- .../ru/docs/home/supported-doc-versions.md | 27 +++---------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/content/ru/docs/home/supported-doc-versions.md b/content/ru/docs/home/supported-doc-versions.md index 66bde1b9fc..d206862246 100644 --- a/content/ru/docs/home/supported-doc-versions.md +++ b/content/ru/docs/home/supported-doc-versions.md @@ -1,29 +1,10 @@ --- title: Версии Kubernetes с поддержкой документации -content_type: concept -card: - name: about - weight: 10 - title: Версии с поддержкой документации +content_type: custom +layout: supported-versions +weight: 10 --- -На сайте можно найти документацию для текущей и четырёх прошлых версий Kubernetes. - - - - - -## Текущая версия - -Текущая версия: -[{{< param "version" >}}](/). - -## Предыдущие версии - -{{< versions-other >}} - - - - +На сайте можно найти документацию для текущей и четырёх прошлых версий Kubernetes. \ No newline at end of file From a2daa62f508454e06a44f3e1916ce317bb6a06d4 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Wed, 15 May 2024 02:16:49 +0800 Subject: [PATCH 1024/1086] [zh-cn] sync kms-provider kubelet-config-file Signed-off-by: xin.li --- .../zh-cn/docs/tasks/administer-cluster/kms-provider.md | 8 ++++++-- .../docs/tasks/administer-cluster/kubelet-config-file.md | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/content/zh-cn/docs/tasks/administer-cluster/kms-provider.md b/content/zh-cn/docs/tasks/administer-cluster/kms-provider.md index c409eba5d9..c80d571e45 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/kms-provider.md +++ b/content/zh-cn/docs/tasks/administer-cluster/kms-provider.md @@ -514,11 +514,15 @@ defined in a CustomResourceDefinition, your cluster must be running Kubernetes v 2. 设置 kube-apiserver 的 `--encryption-provider-config` 参数指向配置文件的位置。 -3. `--encryption-provider-config-automatic-reload` 布尔参数决定了磁盘内容发生变化时是否应自动重新加载 +3. `--encryption-provider-config-automatic-reload` 布尔参数决定了磁盘内容发生变化时是否应自动 + [重新加载](/zh-cn/docs/tasks/administer-cluster/encrypt-data/#configure-automatic-reloading) 通过 `--encryption-provider-config` 设置的文件。这样可以在不重启 API 服务器的情况下进行密钥轮换。 4. 重启你的 API 服务器。 diff --git a/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md b/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md index c5c3d2b995..7548df0006 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md +++ b/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md @@ -220,11 +220,11 @@ However, it's important to note that the behavior varies based on the data type kubelet 配置结构中不同数据类型的合并方式不同。 -有关详细信息,请参阅[参考文档](/zh-cn/docs/reference/node/kubelet-config-directory-merging.md)。 +有关详细信息,请参阅[参考文档](/zh-cn/docs/reference/node/kubelet-config-directory-merging)。 -Trang web này lưu tài liệu của phiên bản hiện tại và bốn phiên bản trước của Kubernetes. - - - - - -## Phiên bản hiện tại - -Phiên bản hiện tại là -[{{< param "version" >}}](/). - -## Các phiên bản trước - -{{< versions-other >}} - - +Trang web này lưu tài liệu của phiên bản hiện tại và bốn phiên bản trước của Kubernetes. \ No newline at end of file From 53eb5ee754343eb4fcaf9237b118ab9eed5e670d Mon Sep 17 00:00:00 2001 From: Arvind Date: Wed, 15 May 2024 05:00:25 +0530 Subject: [PATCH 1026/1086] [hi] Localize /docs/setup/prodution-environment/tools/ (#45324) * localize(hi): /docs/setup/prodution-environment/tools/ * fix: update filename to _index.md * Update content/hi/docs/setup/production-environment/tools/_index.md Co-authored-by: Kundan Kumar * Update content/hi/docs/setup/production-environment/tools/_index.md Co-authored-by: divya-mohan0209 --------- Co-authored-by: Kundan Kumar Co-authored-by: divya-mohan0209 --- .../setup/production-environment/tools/_index.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 content/hi/docs/setup/production-environment/tools/_index.md diff --git a/content/hi/docs/setup/production-environment/tools/_index.md b/content/hi/docs/setup/production-environment/tools/_index.md new file mode 100644 index 0000000000..6df8752324 --- /dev/null +++ b/content/hi/docs/setup/production-environment/tools/_index.md @@ -0,0 +1,13 @@ +--- +title: "परिनियोजन टूल के साथ कुबेरनेट्स स्थापित करे" +weight: 30 +no_list: true +--- + +अपना स्वयं का प्रोडक्शन कुबेरनेट्स क्लस्टर स्थापित करने के लिए कई विधियाँ और उपकरण है। उदाहरण के लिए: + +- [kubeadm](/docs/setup/production-environment/tools/kubeadm/) + +- [kops](https://kops.sigs.k8s.io/): एक स्वचालित क्लस्टर प्रावधान उपकरण। ट्यूटोरियल, सर्वोत्तम प्रथाओं, कॉन्फ़िगरेशन विकल्पों और समुदाय तक पहुंचने की जानकारी के लिए, कृपया [`kOps` वेबसाइट](https://kops.sigs.k8s.io/) देखें। + +- [kubespray](https://kubespray.io/): सामान्य OS/कुबेरनेट्स क्लस्टर कॉन्फ़िगरेशन प्रबंधन कार्यों के लिए [अन्सिबल](https://docs.ansible.com/) प्लेबुकस, [इन्वेंट्री](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/ansible.md#inventory), प्रोविजनिंग टूल और डोमेन ज्ञान की एक संरचना। आप स्लैक चैनल [#kubespray](https://kubernetes.slack.com/messages/kubespray/) पर समुदाय को संपर्क कर सकते है। \ No newline at end of file From 9336671ceea6f430b40b0c9fe80f4af94e2a7599 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Wed, 15 May 2024 00:22:47 +0800 Subject: [PATCH 1027/1086] [zh-cn] sync sidecar-containers Signed-off-by: xin.li --- .../workloads/pods/sidecar-containers.md | 143 ++++++++++++------ 1 file changed, 99 insertions(+), 44 deletions(-) diff --git a/content/zh-cn/docs/concepts/workloads/pods/sidecar-containers.md b/content/zh-cn/docs/concepts/workloads/pods/sidecar-containers.md index 0108f26417..97f576b4fa 100644 --- a/content/zh-cn/docs/concepts/workloads/pods/sidecar-containers.md +++ b/content/zh-cn/docs/concepts/workloads/pods/sidecar-containers.md @@ -15,34 +15,78 @@ weight: 50 -边车容器是与主应用容器在同一个 {{< glossary_tooltip text="Pod" term_id="pod" >}} 中运行的辅助容器。 +边车容器是与**主应用容器**在同一个 {{< glossary_tooltip text="Pod" term_id="pod" >}} 中运行的辅助容器。 这些容器通过提供额外的服务或功能(如日志记录、监控、安全性或数据同步)来增强或扩展主应用容器的功能, 而无需直接修改主应用代码。 + +通常,一个 Pod 中只有一个应用程序容器。 +例如,如果你有一个需要本地 Web 服务器的 Web 应用程序, +则本地 Web 服务器以边车容器形式运行,而 Web 应用本身以应用容器形式运行。 + -## 启用边车容器 {#enabling-sidecar-containers} +## Kubernetes 中的边车容器 {#pod-sidecar-containers} -Kubernetes 1.29 默认启用,一个名为 `SidecarContainers` -的[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)允许你为 -Pod 的 `initContainers` 字段中列出的容器指定 `restartPolicy`。这些可重启的**边车**容器与同一 -Pod 内的其他 [Init 容器](/zh-cn/docs/concepts/workloads/pods/init-containers/)及主应用容器相互独立。 -边车容器可以在不影响主应用容器和其他 Init 容器的情况下启动、停止或重启。 +Kubernetes 将边车容器作为 +[Init 容器](/zh-cn/docs/concepts/workloads/pods/init-containers/)的一个特例来实现, +Pod 启动后,边车容器仍保持运行状态。 +本文档使用术语"常规 Init 容器"来明确指代仅在 Pod 启动期间运行的容器。 + + +如果你的集群启用了 `SidecarContainers` +[特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/) +(该特性自 Kubernetes v1.29 起默认启用),你可以为 Pod 的 `initContainers` +字段中列出的容器指定 `restartPolicy`。 +这些可重新启动的**边车(Sidecar)** 容器独立于其他 Init 容器以及同一 Pod 内的主应用程序容器, +这些容器可以启动、停止和重新启动,而不会影响主应用程序容器和其他 Init 容器。 + + +你还可以运行包含多个未标记为 Init 或边车容器的 Pod。 +如果作为一个整体而言,某个 Pod 中的所有容器都要运行,但你不需要控制哪些容器先启动或停止,那么这种设置是合适的。 +如果你使用的是不支持容器级 `restartPolicy` 字段的旧版本 Kubernetes,你也可以这样做。 + + +### 应用示例 {#sidecar-example} + +下面是一个包含两个容器的 Deployment 示例,其中一个容器是边车形式: + +{{% code_sample language="yaml" file="application/deployment-sidecar.yaml" %}} 如果为此 Init 容器指定了 `readinessProbe`,其结果将用于确定 Pod 的 `ready` 状态。 由于这些容器被定义为 Init 容器,所以它们享有与其他 Init 容器相同的顺序和按序执行保证, -可以将它们与其他 Init 容器混合在一起,形成复杂的 Pod 初始化流程。 +从而允许将边车容器与常规 Init 容器混合使用,支持复杂的 Pod 初始化流程。 -以下是一个具有两个容器的 Deployment 示例,其中一个是边车: - -{{% code_sample language="yaml" file="application/deployment-sidecar.yaml" %}} +### 带边车容器的 Job {#jobs-with-sidecar-containers} -此特性也适用于带有边车的 Job,因为边车容器在主容器完成后不会阻止 Job 的完成。 +如果你定义 Job 时使用基于 Kubernetes 风格 Init 容器的边车容器, +各个 Pod 中的边车容器不会阻止 Job 在主容器结束后进入完成状态。 以下是一个具有两个容器的 Job 示例,其中一个是边车: {{% code_sample language="yaml" file="application/job/job-sidecar.yaml" %}} -## 与常规容器的区别 {#differences-from-regular-containers} +## 与应用容器的区别 {#differences-from-application-containers} -边车容器与同一 Pod 中的常规容器并行运行。不过边车容器不执行主应用逻辑,而是为主应用提供支持功能。 +边车容器与同一 Pod 中的**应用容器**并行运行。不过边车容器不执行主应用逻辑,而是为主应用提供支持功能。 -边车容器具有独立的生命周期。它们可以独立于常规容器启动、停止和重启。 +边车容器具有独立的生命周期。它们可以独立于应用容器启动、停止和重启。 这意味着你可以更新、扩展或维护边车容器,而不影响主应用。 边车容器与主容器共享相同的网络和存储命名空间。这种共存使它们能够紧密交互并共享资源。 @@ -150,14 +193,21 @@ sidecar containers support [probes](/docs/concepts/workloads/pods/pod-lifecycle/ 边车容器支持[探针](/zh-cn/docs/concepts/workloads/pods/pod-lifecycle/#types-of-probe)来控制其生命周期。 -这些边车容器可以直接与主应用容器进行交互,共享相同的网络命名空间、文件系统和环境变量。 -所有这些容器紧密合作,提供额外的功能。 +边车容器可以直接与主应用容器交互,因为与 Init 容器一样, +它们总是与应用容器共享相同的网络,并且还可以选择共享卷(文件系统)。 + +Init 容器在主容器启动之前停止,因此 Init 容器无法与 Pod 中的应用程序容器交换消息。 +所有数据传递都是单向的(例如,Init 容器可以将信息放入 `emptyDir` 卷中)。 ## 容器内的资源共享 {#resource-sharing-within-containers} @@ -204,13 +254,18 @@ for resource usage apply: 配额和限制适用于 Pod 的有效请求和限制值。 -Pod 级别的 cgroup 是基于 Pod 的有效请求和限制值,与调度器相同。 + +### Sidecar 容器和 Linux Cgroup {#cgroups} + +在 Linux 上,Pod Cgroup 的资源分配基于 Pod 级别的有效资源请求和限制,这一点与调度器相同。 ## {{% heading "whatsnext" %}} From b881dd8689a9c5fabb0ca687ba37c699f70241fc Mon Sep 17 00:00:00 2001 From: domain <32405309+szu17dmy@users.noreply.github.com> Date: Wed, 15 May 2024 11:17:10 +0800 Subject: [PATCH 1028/1086] [zh] Fix incorrect ingress migration guide url. --- content/zh-cn/docs/concepts/services-networking/gateway.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/zh-cn/docs/concepts/services-networking/gateway.md b/content/zh-cn/docs/concepts/services-networking/gateway.md index 915f740d63..395a279833 100644 --- a/content/zh-cn/docs/concepts/services-networking/gateway.md +++ b/content/zh-cn/docs/concepts/services-networking/gateway.md @@ -329,7 +329,7 @@ Gateway API 是 [Ingress](/zh-cn/docs/concepts/services-networking/ingress/) API 但是其中不包括 Ingress 类型。因此,需要将现有 Ingress 资源一次性转换为 Gateway API 资源。 有关将 Ingress 资源迁移到 Gateway API 资源的详细信息,请参阅 -[Ingress 迁移](https://gateway-api.sigs.k8s.io/guides/migration-from-ingress/#migration-from-ingress)指南。 +[Ingress 迁移](https://gateway-api.sigs.k8s.io/guides/migrating-from-ingress/#migrating-from-ingress)指南。 ## {{% heading "whatsnext" %}} From e7d5a67eaef268677f65cfe47db7edf896c1e7c1 Mon Sep 17 00:00:00 2001 From: windsonsea Date: Wed, 15 May 2024 09:45:26 +0800 Subject: [PATCH 1029/1086] [ja] Sync the includes folder with en --- .../federated-task-tutorial-prereqs.md | 5 - content/ja/includes/partner-script.js | 1609 ----------------- content/ja/includes/partner-style.css | 201 -- .../task-tutorial-prereqs-node-upgrade.md | 3 + content/ja/partners/_index.html | 4 - content/ko/partners/_index.html | 8 - 6 files changed, 3 insertions(+), 1827 deletions(-) delete mode 100644 content/ja/includes/federated-task-tutorial-prereqs.md delete mode 100644 content/ja/includes/partner-script.js delete mode 100644 content/ja/includes/partner-style.css create mode 100644 content/ja/includes/task-tutorial-prereqs-node-upgrade.md diff --git a/content/ja/includes/federated-task-tutorial-prereqs.md b/content/ja/includes/federated-task-tutorial-prereqs.md deleted file mode 100644 index b254407a67..0000000000 --- a/content/ja/includes/federated-task-tutorial-prereqs.md +++ /dev/null @@ -1,5 +0,0 @@ -This guide assumes that you have a running Kubernetes Cluster Federation installation. -If not, then head over to the [federation admin guide](/docs/tutorials/federation/set-up-cluster-federation-kubefed/) to learn how to -bring up a cluster federation (or have your cluster administrator do this for you). -Other tutorials, such as Kelsey Hightower's [Federated Kubernetes Tutorial](https://github.com/kelseyhightower/kubernetes-cluster-federation), -might also help you create a Federated Kubernetes cluster. diff --git a/content/ja/includes/partner-script.js b/content/ja/includes/partner-script.js deleted file mode 100644 index cdf69bcb29..0000000000 --- a/content/ja/includes/partner-script.js +++ /dev/null @@ -1,1609 +0,0 @@ -;(function () { - var partners = [ - { - type: 0, - name: 'Sysdig', - logo: 'sys_dig', - link: 'https://sysdig.com/blog/monitoring-kubernetes-with-sysdig-cloud/', - blurb: 'Sysdig is the container intelligence company. Sysdig has created the only unified platform to deliver monitoring, security, and troubleshooting in a microservices-friendly architecture.' - }, - { - type: 0, - name: 'Puppet', - logo: 'puppet', - link: 'https://puppet.com/blog/announcing-kream-and-new-kubernetes-helm-and-docker-modules', - blurb: 'We\'ve developed tools and products to make your adoption of Kubernetes as efficient as possible, covering your full workflow cycle from development to production. And now Puppet Pipelines for Containers is your complete DevOps dashboard for Kubernetes.' - }, - { - type: 0, - name: 'Citrix', - logo: 'citrix', - link: 'https://www.citrix.com/networking/microservices.html', - blurb: 'Netscaler CPX gives app developers all the features they need to load balance their microservices and containerized apps with Kubernetes.' - }, - { - type: 0, - name: 'Cockroach Labs', - logo: 'cockroach_labs', - link: 'https://www.cockroachlabs.com/blog/running-cockroachdb-on-kubernetes/', - blurb: 'CockroachDB is a distributed SQL database whose built-in replication and survivability model pair with Kubernetes to truly make data easy.' - }, - { - type: 2, - name: 'Weaveworks', - logo: 'weave_works', - link: ' https://weave.works/kubernetes', - blurb: 'Weaveworks enables Developers and Dev/Ops teams to easily connect, deploy, secure, manage, and troubleshoot microservices in Kubernetes.' - }, - { - type: 0, - name: 'Intel', - logo: 'intel', - link: 'https://tectonic.com/press/intel-coreos-collaborate-on-openstack-with-kubernetes.html', - blurb: 'Powering the GIFEE (Google’s Infrastructure for Everyone Else), to run OpenStack deployments on Kubernetes.' - }, - { - type: 3, - name: 'Platform9', - logo: 'platform9', - link: 'https://platform9.com/products/kubernetes/', - blurb: 'Platform9 is the open source-as-a-service company that takes all of the goodness of Kubernetes and delivers it as a managed service.' - }, - { - type: 0, - name: 'Datadog', - logo: 'datadog', - link: 'http://docs.datadoghq.com/integrations/kubernetes/', - blurb: 'Full-stack observability for dynamic infrastructure & applications. Includes precision alerting, analytics and deep Kubernetes integrations. ' - }, - { - type: 0, - name: 'AppFormix', - logo: 'appformix', - link: 'http://www.appformix.com/solutions/appformix-for-kubernetes/', - blurb: 'AppFormix is a cloud infrastructure performance optimization service helping enterprise operators streamline their cloud operations on any Kubernetes cloud. ' - }, - { - type: 0, - name: 'Crunchy', - logo: 'crunchy', - link: 'http://info.crunchydata.com/blog/advanced-crunchy-containers-for-postgresql', - blurb: 'Crunchy PostgreSQL Container Suite is a set of containers for managing PostgreSQL with DBA microservices leveraging Kubernetes and Helm.' - }, - { - type: 0, - name: 'Aqua', - logo: 'aqua', - link: 'http://blog.aquasec.com/security-best-practices-for-kubernetes-deployment', - blurb: 'Deep, automated security for your containers running on Kubernetes.' - }, - { - type: 0, - name: 'Distelli', - logo: 'distelli', - link: 'https://www.distelli.com/', - blurb: 'Pipelines from your source repositories to your Kubernetes Clusters on any cloud.' - }, - { - type: 0, - name: 'Nuage networks', - logo: 'nuagenetworks', - link: 'https://github.com/nuagenetworks/nuage-kubernetes', - blurb: 'The Nuage SDN platform provides policy-based networking between Kubernetes Pods and non-Kubernetes environments with visibility and security monitoring.' - }, - { - type: 0, - name: 'Sematext', - logo: 'sematext', - link: 'https://sematext.com/kubernetes/', - blurb: 'Logging & Monitoring: Automatic collection and processing of Metrics, Events and Logs for auto-discovered pods and Kubernetes nodes.' - }, - { - type: 0, - name: 'Diamanti', - logo: 'diamanti', - link: 'https://www.diamanti.com/products/', - blurb: 'Diamanti deploys containers with guaranteed performance using Kubernetes in the first hyperconverged appliance purpose built for containerized applications.' - }, - { - type: 0, - name: 'Aporeto', - logo: 'aporeto', - link: 'https://aporeto.com/trireme', - blurb: 'Aporeto makes cloud-native applications secure by default without impacting developer velocity and works at any scale, on any cloud.' - }, - { - type: 2, - name: 'Giant Swarm', - logo: 'giantswarm', - link: 'https://giantswarm.io', - blurb: 'Giant Swarm enables you to simply and rapidly create and use Kubernetes clusters on-demand either on-premises or in the cloud. Contact Giant Swarm to learn about the best way to run cloud native applications anywhere.' - }, - { - type: 3, - name: 'Giant Swarm', - logo: 'giantswarm', - link: 'https://giantswarm.io/product/', - blurb: 'Giant Swarm enables you to simply and rapidly create and use Kubernetes clusters on-demand either on-premises or in the cloud. Contact Giant Swarm to learn about the best way to run cloud native applications anywhere.' - }, - { - type: 3, - name: 'Hasura', - logo: 'hasura', - link: 'https://hasura.io', - blurb: 'Hasura is a Kubernetes-based PaaS and a Postgres-based BaaS that accelerates app development with ready-to-use components.' - }, - { - type: 3, - name: 'Mirantis', - logo: 'mirantis', - link: 'https://www.mirantis.com/software/kubernetes/', - blurb: 'Mirantis - Mirantis Cloud Platform' - }, - { - type: 2, - name: 'Mirantis', - logo: 'mirantis', - link: 'https://content.mirantis.com/Containerizing-OpenStack-on-Kubernetes-Video-Landing-Page.html', - blurb: 'Mirantis builds and manages private clouds with open source software such as OpenStack, deployed as containers orchestrated by Kubernetes.' - }, - { - type: 0, - name: 'Kubernetic', - logo: 'kubernetic', - link: 'https://kubernetic.com/', - blurb: 'Kubernetic is a Kubernetes Desktop client that simplifies and democratizes cluster management for DevOps.' - }, - { - type: 1, - name: 'Reactive Ops', - logo: 'reactive_ops', - link: 'https://www.reactiveops.com/the-kubernetes-experts/', - blurb: 'ReactiveOps has written automation on best practices for infrastructure as code on GCP & AWS using Kubernetes, helping you build and maintain a world-class infrastructure at a fraction of the price of an internal hire.' - }, - { - type: 2, - name: 'Livewyer', - logo: 'livewyer', - link: 'https://livewyer.io/services/kubernetes-experts/', - blurb: 'Kubernetes experts that on-board applications and empower IT teams to get the most out of containerised technology.' - }, - { - type: 2, - name: 'Samsung SDS', - logo: 'samsung_sds', - link: 'http://www.samsungsdsa.com/cloud-infrastructure_kubernetes', - blurb: 'Samsung SDS’s Cloud Native Computing Team offers expert consulting across the range of technical aspects involved in building services targeted at a Kubernetes cluster.' - }, - { - type: 2, - name: 'Container Solutions', - logo: 'container_solutions', - link: 'http://container-solutions.com/resources/kubernetes/', - blurb: 'Container Solutions is a premium software consultancy that focuses on programmable infrastructure, offering our expertise in software development, strategy and operations to help you innovate at speed and scale.' - }, - { - type: 4, - name: 'Container Solutions', - logo: 'container_solutions', - link: 'http://container-solutions.com/resources/kubernetes/', - blurb: 'Container Solutions is a premium software consultancy that focuses on programmable infrastructure, offering our expertise in software development, strategy and operations to help you innovate at speed and scale.' - }, - { - type: 2, - name: 'Jetstack', - logo: 'jetstack', - link: 'https://www.jetstack.io/', - blurb: 'Jetstack is an organisation focused entirely on Kubernetes. They will help you to get the most out of Kubernetes through expert professional services and open source tooling. Get in touch, and accelerate your project.' - }, - { - type: 0, - name: 'Tigera', - logo: 'tigera', - link: 'http://docs.projectcalico.org/latest/getting-started/kubernetes/', - blurb: 'Tigera builds high performance, policy driven, cloud native networking solutions for Kubernetes.' - }, - { - type: 1, - name: 'Harbur', - logo: 'harbur', - link: 'https://harbur.io/', - blurb: 'Based in Barcelona, Harbur is a consulting firm that helps companies deploy self-healing solutions empowered by Container technologies' - }, - { - type: 0, - name: 'Spotinst', - logo: 'spotinst', - link: 'http://blog.spotinst.com/2016/08/04/elastigroup-kubernetes-minions-steroids/', - blurb: 'Your Kubernetes For 80% Less. Run K8s workloads on Spot Instances with 100% availability to save 80% + autoscale your Kubernetes with maximum efficiency in heterogenous environments.' - }, - { - type: 2, - name: 'InwinSTACK', - logo: 'inwinstack', - link: 'http://www.inwinstack.com/index.php/en/solutions-en/', - blurb: 'Our container service leverages OpenStack-based infrastructure and its container orchestration engine Magnum to manage Kubernetes clusters.' - }, - { - type: 4, - name: 'InwinSTACK', - logo: 'inwinstack', - link: 'http://www.inwinstack.com/index.php/en/solutions-en/', - blurb: 'Our container service leverages OpenStack-based infrastructure and its container orchestration engine Magnum to manage Kubernetes clusters.' - }, - { - type: 3, - name: 'InwinSTACK', - logo: 'inwinstack', - link: 'https://github.com/inwinstack/kube-ansible', - blurb: 'inwinSTACK - kube-ansible' - }, - { - type: 1, - name: 'Semantix', - logo: 'semantix', - link: 'http://www.semantix.com.br/', - blurb: 'Semantix is a company that works with data analytics and distributed systems. Kubernetes is used to orchestrate services for our customers.' - }, - { - type: 0, - name: 'ASM Technologies Limited', - logo: 'asm', - link: 'http://www.asmtech.com/', - blurb: 'Our technology supply chain portfolio enables your software products to be accessible, viable and available more effectively.' - }, - { - type: 1, - name: 'InfraCloud Technologies', - logo: 'infracloud', - link: 'http://blog.infracloud.io/state-of-kubernetes/', - blurb: 'InfraCloud Technologies is software consultancy which provides services in Containers, Cloud and DevOps.' - }, - { - type: 0, - name: 'SignalFx', - logo: 'signalfx', - link: 'https://github.com/signalfx/integrations/tree/master/kubernetes', - blurb: 'Gain real-time visibility across metrics & the most intelligent alerts for todays architectures, including deep integration with Kubernetes' - }, - { - type: 0, - name: 'NATS', - logo: 'nats', - link: 'https://github.com/pires/kubernetes-nats-cluster', - blurb: 'NATS is a simple, secure, and scalable cloud native messaging system.' - }, - { - type: 2, - name: 'RX-M', - logo: 'rxm', - link: 'http://rx-m.com/training/kubernetes-training/', - blurb: 'Market neutral Kubernetes Dev, DevOps and Production training and consulting services.' - }, - { - type: 4, - name: 'RX-M', - logo: 'rxm', - link: 'http://rx-m.com/training/kubernetes-training/', - blurb: 'Market neutral Kubernetes Dev, DevOps and Production training and consulting services.' - }, - { - type: 1, - name: 'Emerging Technology Advisors', - logo: 'eta', - link: 'https://www.emergingtechnologyadvisors.com/services/kubernetes.html', - blurb: 'ETA helps companies architect, implement, and manage scalable applications using Kubernetes on public or private cloud.' - }, - { - type: 0, - name: 'CloudPlex.io', - logo: 'cloudplex', - link: 'http://www.cloudplex.io', - blurb: 'CloudPlex enables operations teams to visually deploy, orchestrate, manage, and monitor infrastructure, applications, and services in public or private cloud.' - }, - { - type: 2, - name: 'Kumina', - logo: 'kumina', - link: 'https://www.kumina.nl/managed_kubernetes', - blurb: 'Kumina combines the power of Kubernetes with 10+ years of experience in IT operations. We create, build and support fully managed Kubernetes solutions on your choice of infrastructure. We also provide consulting and training.' - }, - { - type: 0, - name: 'CA Technologies', - logo: 'ca', - link: 'https://docops.ca.com/ca-continuous-delivery-director/integrations/en/plug-ins/kubernetes-plug-in', - blurb: 'The CA Continuous Delivery Director Kubernetes plugin orchestrates deployment of containerized applications within an end-to-end release pipeline.' - }, - { - type: 0, - name: 'CoScale', - logo: 'coscale', - link: 'http://www.coscale.com/blog/how-to-monitor-your-kubernetes-cluster', - blurb: 'Full stack monitoring of containers and microservices orchestrated by Kubernetes. Powered by anomaly detection to find problems faster.' - }, - { - type: 2, - name: 'Supergiant.io', - logo: 'supergiant', - link: 'https://supergiant.io/blog/supergiant-packing-algorithm-unique-save-money', - blurb: 'Supergiant autoscales hardware for Kubernetes. Open-source, it makes HA, distributed, stateful apps easy to deploy, manage, and scale.' - }, - { - type: 0, - name: 'Avi Networks', - logo: 'avinetworks', - link: 'https://kb.avinetworks.com/avi-vantage-openshift-installation-guide/', - blurb: 'Avis elastic application services fabric provides scalable, feature rich & integrated L4-7 networking for K8S environments.' - }, - { - type: 1, - name: 'Codecrux web technologies pvt ltd', - logo: 'codecrux', - link: 'http://codecrux.com/kubernetes/', - blurb: 'At CodeCrux we help your organization get the most out of Containers and Kubernetes, regardless of where you are in your journey' - }, - { - type: 0, - name: 'Greenqloud', - logo: 'qstack', - link: 'https://www.qstack.com/application-orchestration/', - blurb: 'Qstack provides self-serviceable on-site Kubernetes clusters with an intuitive User Interface for Infrastructure and Kubernetes management.' - }, - { - type: 1, - name: 'StackOverdrive.io', - logo: 'stackoverdrive', - link: 'http://www.stackoverdrive.net/kubernetes-consulting/', - blurb: 'StackOverdrive helps organizations of all sizes leverage Kubernetes for container based orchestration and management.' - }, - { - type: 0, - name: 'StackIQ, Inc.', - logo: 'stackiq', - link: 'https://www.stackiq.com/kubernetes/', - blurb: 'With Stacki and the Stacki Pallet for Kubernetes, you can go from bare metal to containers in one step very quickly and easily.' - }, - { - type: 0, - name: 'Cobe', - logo: 'cobe', - link: 'https://cobe.io/product-page/', - blurb: 'Manage Kubernetes clusters with a live, searchable model that captures all relationships and performance data in full visualised context.' - }, - { - type: 0, - name: 'Datawire', - logo: 'datawire', - link: 'http://www.datawire.io', - blurb: 'Datawires open source tools let your microservices developers be awesomely productive on Kubernetes, while letting ops sleep at night.' - }, - { - type: 0, - name: 'Mashape, Inc.', - logo: 'kong', - link: 'https://getkong.org/install/kubernetes/', - blurb: 'Kong is a scalable open source API layer that runs in front of any RESTful API and can be provisioned to a Kubernetes cluster.' - }, - { - type: 0, - name: 'F5 Networks', - logo: 'f5networks', - link: 'http://github.com/f5networks', - blurb: 'We have a LB integration into Kubernetes.' - }, - { - type: 1, - name: 'Lovable Tech', - logo: 'lovable', - link: 'http://lovable.tech/', - blurb: 'World class engineers, designers, and strategic consultants helping you ship Lovable web & mobile technology.' - }, - { - type: 0, - name: 'StackState', - logo: 'stackstate', - link: 'http://stackstate.com/platform/container-monitoring', - blurb: 'Operational Analytics across teams and tools. Includes topology visualization, root cause analysis and anomaly detection for Kubernetes.' - }, - { - type: 1, - name: 'INEXCCO INC', - logo: 'inexcco', - link: 'https://www.inexcco.com/', - blurb: 'Strong DevOps and Cloud talent working with couple clients on kubernetes and helm implementations. ' - }, - { - type: 2, - name: 'Bitnami', - logo: 'bitnami', - link: 'http://bitnami.com/kubernetes', - blurb: 'Bitnami brings a catalog of trusted, up to date, and easy to use applications and application building blocks to Kubernetes.' - }, - { - type: 1, - name: 'Nebulaworks', - logo: 'nebulaworks', - link: 'http://www.nebulaworks.com/container-platforms', - blurb: 'Nebulaworks provides services to help the enterprise adopt modern container platforms and optimized processes to enable innovation at scale.' - }, - { - type: 1, - name: 'EASYNUBE', - logo: 'easynube', - link: 'http://easynube.co.uk/devopsnube/', - blurb: 'EasyNube provide architecture, implementation, and manage scalable applications using Kubernetes and Openshift.' - }, - { - type: 1, - name: 'Opcito Technologies', - logo: 'opcito', - link: 'http://www.opcito.com/kubernetes/', - blurb: 'Opcito is a software consultancy that uses Kubernetes to help organisations build, architect & deploy highly scalable applications.' - }, - { - type: 0, - name: 'code by Dell EMC', - logo: 'codedellemc', - link: 'https://blog.codedellemc.com', - blurb: 'Respected as a thought leader in storage persistence for containerized applications. Contributed significant work to K8 and Ecosystem' - }, - { - type: 0, - name: 'Instana', - logo: 'instana', - link: 'https://www.instana.com/supported-technologies/', - blurb: 'Instana monitors performance of the applications, infrastructure, containers and services deployed on a Kubernetes cluster.' - }, - { - type: 0, - name: 'Netsil', - logo: 'netsil', - link: 'https://netsil.com/kubernetes/', - blurb: 'Generate a real-time, auto-discovered application topology map! Monitor Kubernetes pods and namespaces without any code instrumentation.' - }, - { - type: 2, - name: 'Treasure Data', - logo: 'treasuredata', - link: 'https://fluentd.treasuredata.com/kubernetes-logging/', - blurb: 'Fluentd Enterprise brings smart, secure logging to Kubernetes, and brings integrations with backends such as Splunk, Kafka, or AWS S3.' - }, - { - type: 2, - name: 'Kenzan', - logo: 'Kenzan', - link: 'http://kenzan.com/?ref=kubernetes', - blurb: 'We provide custom consulting services leveraging Kubernetes as our foundation. This involves the platform development, delivery pipelines, and the application development within Kubernetes.' - }, - { - type: 2, - name: 'New Context', - logo: 'newcontext', - link: 'https://www.newcontext.com/devsecops-infrastructure-automation-orchestration/', - blurb: 'New Context builds and uplifts secure Kubernetes implementations and migrations, from initial design to infrastructure automation and management.' - }, - { - type: 2, - name: 'Banzai', - logo: 'banzai', - link: 'https://banzaicloud.com/platform/', - blurb: 'Banzai Cloud brings cloud native to the enterprise and simplifies the transition to microservices on Kubernetes.' - }, - { - type: 3, - name: 'Kublr', - logo: 'kublr', - link: 'http://kublr.com', - blurb: 'Kublr - Accelerate and control the deployment, scaling, monitoring and management of your containerized applications.' - }, - { - type: 1, - name: 'ControlPlane', - logo: 'controlplane', - link: 'https://control-plane.io', - blurb: 'We are a London-based Kubernetes consultancy with a focus on security and continuous delivery. We offer consulting & training.' - }, - { - type: 3, - name: 'Nirmata', - logo: 'nirmata', - link: 'https://www.nirmata.com/', - blurb: 'Nirmata - Nirmata Managed Kubernetes' - }, - { - type: 2, - name: 'Nirmata', - logo: 'nirmata', - link: 'https://www.nirmata.com/', - blurb: 'Nirmata is a software platform that helps DevOps teams deliver enterprise-grade and cloud-provider agnostic Kubernetes based container management solutions.' - }, - { - type: 3, - name: 'TenxCloud', - logo: 'tenxcloud', - link: 'https://tenxcloud.com', - blurb: 'TenxCloud - TenxCloud Container Engine (TCE)' - }, - { - type: 2, - name: 'TenxCloud', - logo: 'tenxcloud', - link: 'https://www.tenxcloud.com/', - blurb: 'Founded in October 2014, TenxCloud is a leading enterprise container cloud computing service provider in China, covering the areas such as container PaaS cloud platform, micro-service management, DevOps, development test, AIOps and so on. Provide private cloud PaaS products and solutions for financial, energy, operator, manufacturing, education and other industry customers.' - }, - { - type: 0, - name: 'Twistlock', - logo: 'twistlock', - link: 'https://www.twistlock.com/', - blurb: 'Security at Kubernetes Scale: Twistlock allows you to deploy fearlessly with assurance that your images and containers are free of vulnerabilities and protected at runtime.' - }, - { - type: 0, - name: 'Endocode AG', - logo: 'endocode', - link: 'https://endocode.com/kubernetes/', - blurb: 'Endocode practices and teaches the open source way. Kernel to cluster - Dev to Ops. We offer Kubernetes trainings, services and support.' - }, - { - type: 2, - name: 'Accenture', - logo: 'accenture', - link: 'https://www.accenture.com/us-en/service-application-containers', - blurb: 'Architecture, implementation and operation of world-class Kubernetes solutions for cloud-native clients.' - }, - { - type: 1, - name: 'Biarca', - logo: 'biarca', - link: 'http://biarca.io/', - blurb: 'Biarca is a cloud services provider and key focus areas Key areas of focus for Biarca include Cloud Adoption Services, Infrastructure Services, DevOps Services and Application Services. Biarca leverages Kubernetes to deliver containerized solutions.' - }, - { - type: 2, - name: 'Claranet', - logo: 'claranet', - link: 'http://www.claranet.co.uk/hosting/google-cloud-platform-consulting-managed-services', - blurb: 'Claranet helps people migrate to the cloud and take full advantage of the new world it offers. We consult, design, build and proactively manage the right infrastructure and automation tooling for clients to achieve this.' - }, - { - type: 1, - name: 'CloudKite', - logo: 'cloudkite', - link: 'https://cloudkite.io/', - blurb: 'CloudKite.io helps companies build and maintain highly automated, resilient, and impressively performing software on Kubernetes.' - }, - { - type: 2, - name: 'CloudOps', - logo: 'CloudOps', - link: 'https://www.cloudops.com/services/docker-and-kubernetes-workshops/', - blurb: 'CloudOps gets you hands-on with the K8s ecosystem via workshop/lab. Get prod ready K8s in cloud(s) of your choice with our managed services.' - }, - { - type: 2, - name: 'Ghostcloud', - logo: 'ghostcloud', - link: 'https://www.ghostcloud.cn/ecos-kubernetes', - blurb: 'EcOS is an enterprise-grade PaaS / CaaS based on Docker and Kubernetes, which makes it easier to configure, deploy and manage containerized applications.' - }, - { - type: 3, - name: 'Ghostcloud', - logo: 'ghostcloud', - link: 'https://www.ghostcloud.cn/ecos-kubernetes', - blurb: 'EcOS is an enterprise-grade PaaS / CaaS based on Docker and Kubernetes, which makes it easier to configure, deploy and manage containerized applications.' - }, - { - type: 2, - name: 'Contino', - logo: 'contino', - link: 'https://www.contino.io/', - blurb: 'We help enterprise organizations adopt DevOps, containers and cloud computing. Contino is a global consultancy that enables regulated organizations to accelerate innovation through the adoption of modern approaches to software delivery.' - }, - { - type: 2, - name: 'Booz Allen Hamilton', - logo: 'boozallenhamilton', - link: 'https://www.boozallen.com/', - blurb: 'Booz Allen partners with public and private sector clients to solve their most difficult challenges through a combination of consulting, analytics, mission operations, technology, systems delivery, cybersecurity, engineering, and innovation expertise.' - }, - { - type: 1, - name: 'BigBinary', - logo: 'bigbinary', - link: 'http://blog.bigbinary.com/categories/Kubernetes', - blurb: 'Provider of Digital Solutions for federal and commercial clients, to include DevSecOps, cloud platforms, transformation strategy, cognitive solutions, and UX.' - }, - { - type: 0, - name: 'CloudPerceptions', - logo: 'cloudperceptions', - link: 'https://www.meetup.com/Triangle-Kubernetes-Meetup/files/', - blurb: 'Container security solution for small-to-medium size enterprises who plan to run Kubernetes on shared infrastructure.' - }, - { - type: 2, - name: 'Creationline, Inc.', - logo: 'creationline', - link: 'https://www.creationline.com/ci', - blurb: 'Total solution for container based IT resource management.' - }, - { - type: 0, - name: 'DataCore Software', - logo: 'datacore', - link: 'https://www.datacore.com/solutions/virtualization/containerization', - blurb: 'DataCore provides highly-available, high-performance universal block storage for Kubernetes, radically improving the speed of deployment.' - }, - { - type: 0, - name: 'Elastifile', - logo: 'elastifile', - link: 'https://www.elastifile.com/stateful-containers', - blurb: 'Elastifile’s cross-cloud data fabric delivers elastically scalable, high performance, software-defined persistent storage for Kubernetes.' - }, - { - type: 0, - name: 'GitLab', - logo: 'gitlab', - link: 'https://about.gitlab.com/2016/11/14/idea-to-production/', - blurb: 'With GitLab and Kubernetes, you can deploy a complete CI/CD pipeline with multiple environments, automatic deployments, and automatic monitoring.' - }, - { - type: 0, - name: 'Gravitational, Inc.', - logo: 'gravitational', - link: 'https://gravitational.com/telekube/', - blurb: 'Telekube combines Kubernetes with Teleport, our modern SSH server, so operators can remotely manage a multitude of K8s application deployments.' - }, - { - type: 0, - name: 'Hitachi Data Systems', - logo: 'hitachi', - link: 'https://www.hds.com/en-us/products-solutions/application-solutions/unified-compute-platform-with-kubernetes-orchestration.html', - blurb: 'Build the Applications You Need to Drive Your Business - DEVELOP AND DEPLOY APPLICATIONS FASTER AND MORE RELIABLY.' - }, - { - type: 1, - name: 'Infosys Technologies', - logo: 'infosys', - link: 'https://www.infosys.com', - blurb: 'Monolithic to microservices on openshift is a offering that we are building as part of open source practice.' - }, - { - type: 0, - name: 'JFrog', - logo: 'jfrog', - link: 'https://www.jfrog.com/use-cases/12584/', - blurb: 'You can use Artifactory to store and manage all of your application’s container images and deploy to Kubernetes and setup a build, test, deploy pipeline using Jenkins and Artifactory. Once an image is ready to be rolled out, Artifactory can trigger a rolling-update deployment into a Kubernetes cluster without downtime – automatically!' - }, - { - type: 0, - name: 'Navops by Univa', - logo: 'navops', - link: 'https://www.navops.io', - blurb: 'Navops is a suite of products that enables enterprises to take full advantage of Kubernetes and provides the ability to quickly and efficiently run containers at scale.' - }, - { - type: 0, - name: 'NeuVector', - logo: 'neuvector', - link: 'http://neuvector.com/solutions-for-kubernetes-security/', - blurb: 'NeuVector delivers an application and network intelligent container network security solution integrated with and optimized for Kubernetes.' - }, - { - type: 1, - name: 'OpsZero', - logo: 'opszero', - link: 'https://www.opszero.com/kubernetes.html', - blurb: 'opsZero provides DevOps for Startups. We build and service your Kubernetes and Cloud Infrastructure to accelerate your release cycle.' - }, - { - type: 1, - name: 'Shiwaforce.com Ltd.', - logo: 'shiwaforce', - link: 'https://www.shiwaforce.com/en/', - blurb: 'Shiwaforce.com is the Agile Partner in Digital Transformation. Our solutions follow business changes quickly, easily and cost-effectively.' - }, - { - type: 1, - name: 'SoftServe', - logo: 'softserve', - link: 'https://www.softserveinc.com/en-us/blogs/kubernetes-travis-ci/', - blurb: 'SoftServe allows its clients to adopt modern application design patterns and benefit from fully integrated, highly available, cost effective Kubernetes clusters at any scale.' - }, - { - type: 1, - name: 'Solinea', - logo: 'solinea', - link: 'https://www.solinea.com/cloud-consulting-services/container-microservices-offerings', - blurb: 'Solinea is a digital transformation consultancy that enables businesses to build innovative solutions by adopting cloud native computing.' - }, - { - type: 1, - name: 'Sphere Software, LLC', - logo: 'spheresoftware', - link: 'https://sphereinc.com/kubernetes/', - blurb: 'The Sphere Software team of experts allows customers to architect and implement scalable applications using Kubernetes in Google Cloud, AWS, and Azure.' - }, - { - type: 1, - name: 'Altoros', - logo: 'altoros', - link: 'https://www.altoros.com/container-orchestration-tools-enablement.html', - blurb: 'Deployment and configuration of Kubernetes, Optimization of existing solutions, training for developers on using Kubernetes, support.' - }, - { - type: 0, - name: 'Cloudbase Solutions', - logo: 'cloudbase', - link: 'https://cloudbase.it/kubernetes', - blurb: 'Cloudbase Solutions provides Kubernetes cross-cloud interoperability for Windows and Linux deployments based on open source technologies.' - }, - { - type: 0, - name: 'Codefresh', - logo: 'codefresh', - link: 'https://codefresh.io/kubernetes-deploy/', - blurb: 'Codefresh is a complete DevOps platform built for containers and Kubernetes. With CI/CD pipelines, image management, and deep integrations into Kubernetes and Helm.' - }, - { - type: 0, - name: 'NetApp', - logo: 'netapp', - link: 'http://netapp.io/2016/12/23/introducing-trident-dynamic-persistent-volume-provisioner-kubernetes/', - blurb: 'Dynamic provisioning and persistent storage support.' - }, - { - type: 0, - name: 'OpenEBS', - logo: 'OpenEBS', - link: 'https://openebs.io/', - blurb: 'OpenEBS is containerized storage for containers integrated tightly into Kubernetes and based on distributed block storage and containerization of storage control. OpenEBS derives intent from K8s and other YAML or JSON such as per container QoS SLAs, tiering and replica policies, and more. OpenEBS is EBS API compliant.' - }, - { - type: 3, - name: 'Google Kubernetes Engine', - logo: 'google', - link: 'https://cloud.google.com/kubernetes-engine/', - blurb: 'Google - Google Kubernetes Engine' - }, - { - type: 1, - name: 'Superorbital', - logo: 'superorbital', - link: 'https://superorbit.al/workshops/kubernetes/', - blurb: 'Helping companies navigate the Cloud Native waters through Kubernetes consulting and training.' - }, - { - type: 3, - name: 'Apprenda', - logo: 'apprenda', - link: 'https://apprenda.com/kismatic/', - blurb: 'Apprenda - Kismatic Enterprise Toolkit (KET)' - }, - { - type: 3, - name: 'Red Hat', - logo: 'redhat', - link: 'https://www.openshift.com', - blurb: 'Red Hat - OpenShift Online and OpenShift Container Platform' - }, - { - type: 3, - name: 'Rancher', - logo: 'rancher', - link: 'http://rancher.com/kubernetes/', - blurb: 'Rancher Inc. - Rancher Kubernetes' - }, - { - type: 3, - name: 'Canonical', - logo: 'canonical', - link: 'https://www.ubuntu.com/kubernetes', - blurb: 'The Canonical Distribution of Kubernetes enables you to operate Kubernetes clusters on demand on any major public cloud and private infrastructure.' - }, - { - type: 2, - name: 'Canonical', - logo: 'canonical', - link: 'https://www.ubuntu.com/kubernetes', - blurb: 'Canonical Ltd. - Canonical Distribution of Kubernetes' - }, - { - type: 3, - name: 'Cisco', - logo: 'cisco', - link: 'https://www.cisco.com', - blurb: 'Cisco Systems - Cisco Container Platform' - }, - { - type: 3, - name: 'Cloud Foundry', - logo: 'cff', - link: 'https://www.cloudfoundry.org/container-runtime/', - blurb: 'Cloud Foundry - Cloud Foundry Container Runtime' - }, - { - type: 3, - name: 'IBM', - logo: 'ibm', - link: 'https://www.ibm.com/cloud/container-service', - blurb: 'IBM - IBM Cloud Kubernetes Service' - }, - { - type: 2, - name: 'IBM', - logo: 'ibm', - link: 'https://www.ibm.com/cloud/container-service/', - blurb: 'The IBM Cloud Kubernetes Service combines Docker and Kubernetes to deliver powerful tools, an intuitive user experience, and built-in security and isolation to enable rapid delivery of applications all while leveraging Cloud Services including cognitive capabilities from Watson.' - }, - { - type: 3, - name: 'Samsung', - logo: 'samsung_sds', - link: 'https://github.com/samsung-cnct/kraken', - blurb: 'Samsung SDS - Kraken' - }, - { - type: 3, - name: 'IBM', - logo: 'ibm', - link: 'https://www.ibm.com/cloud-computing/products/ibm-cloud-private/', - blurb: 'IBM - IBM Cloud Private' - }, - { - type: 3, - name: 'Kinvolk', - logo: 'kinvolk', - link: 'https://github.com/kinvolk/kube-spawn', - blurb: 'Kinvolk - kube-spawn' - }, - { - type: 3, - name: 'Heptio', - logo: 'heptio', - link: 'https://aws.amazon.com/quickstart/architecture/heptio-kubernetes', - blurb: 'Heptio - AWS-Quickstart' - }, - { - type: 2, - name: 'Heptio', - logo: 'heptio', - link: 'http://heptio.com', - blurb: 'Heptio helps businesses of all sizes get closer to the vibrant Kubernetes community.' - }, - { - type: 3, - name: 'StackPointCloud', - logo: 'stackpoint', - link: 'https://stackpoint.io', - blurb: 'StackPointCloud - StackPointCloud' - }, - { - type: 2, - name: 'StackPointCloud', - logo: 'stackpoint', - link: 'https://stackpoint.io', - blurb: 'StackPointCloud offers a wide range of support plans for managed Kubernetes clusters built through its universal control plane for Kubernetes Anywhere.' - }, - { - type: 3, - name: 'Caicloud', - logo: 'caicloud', - link: 'https://caicloud.io/products/compass', - blurb: 'Caicloud - Compass' - }, - { - type: 2, - name: 'Caicloud', - logo: 'caicloud', - link: 'https://caicloud.io/', - blurb: 'Founded by ex-Googlers,and early Kubernetes contributors, Caicloud leverages Kubernetes to provide container products which have successfully served Fortune 500 enterprises, and further utilizes Kubernetes as a vehicle to deliver ultra-speed deep learning experience.' - }, - { - type: 3, - name: 'Alibaba', - logo: 'alibaba', - link: 'https://www.aliyun.com/product/containerservice?spm=5176.8142029.388261.219.3836dbccRpJ5e9', - blurb: 'Alibaba Cloud - Alibaba Cloud Container Service' - }, - { - type: 3, - name: 'Tencent', - logo: 'tencent', - link: 'https://cloud.tencent.com/product/ccs?lang=en', - blurb: 'Tencent Cloud - Tencent Cloud Container Service' - }, - { - type: 3, - name: 'Huawei', - logo: 'huawei', - link: 'http://www.huaweicloud.com/product/cce.html', - blurb: 'Huawei - Huawei Cloud Container Engine' - }, - { - type: 2, - name: 'Huawei', - logo: 'huawei', - link: 'http://developer.huawei.com/ict/en/site-paas', - blurb: 'FusionStage is an enterprise-grade Platform as a Service product, the core of which is based on mainstream open source container technology including Kubernetes and Docker.' - }, - { - type: 3, - name: 'Google', - logo: 'google', - link: 'https://github.com/kubernetes/kubernetes/tree/master/cluster', - blurb: 'Google - kube-up.sh on Google Compute Engine' - }, - { - type: 3, - name: 'Poseidon', - logo: 'poseidon', - link: 'https://typhoon.psdn.io/', - blurb: 'Poseidon - Typhoon' - }, - { - type: 3, - name: 'Netease', - logo: 'netease', - link: 'https://www.163yun.com/product/container-service-dedicated', - blurb: 'Netease - Netease Container Service Dedicated' - }, - { - type: 2, - name: 'Loodse', - logo: 'loodse', - link: 'https://loodse.com', - blurb: 'Loodse provides Kubernetes training & consulting, and host related events regularly across Europe.' - }, - { - type: 4, - name: 'Loodse', - logo: 'loodse', - link: 'https://loodse.com', - blurb: 'Loodse provides Kubernetes training & consulting, and host related events regularly across Europe.' - }, - { - type: 4, - name: 'LF Training', - logo: 'lf-training', - link: 'https://training.linuxfoundation.org/', - blurb: 'The Linux Foundation’s training program combines the broad, foundational knowledge with the networking opportunities that attendees need to thrive in their careers today.' - }, - { - type: 3, - name: 'Loodse', - logo: 'loodse', - link: 'https://loodse.com', - blurb: 'Loodse - Kubermatic Container Engine' - }, - { - type: 1, - name: 'LTI', - logo: 'lti', - link: 'https://www.lntinfotech.com/', - blurb: 'LTI helps enterprises architect, develop and support scalable cloud native apps using Docker and Kubernetes for private or public cloud.' - }, - { - type: 3, - name: 'Microsoft', - logo: 'microsoft', - link: 'https://github.com/Azure/acs-engine', - blurb: 'Microsoft - Azure acs-engine' - }, - { - type: 3, - name: 'Microsoft', - logo: 'microsoft', - link: 'https://docs.microsoft.com/en-us/azure/aks/', - blurb: 'Microsoft - Azure Container Service AKS' - }, - { - type: 3, - name: 'Oracle', - logo: 'oracle', - link: 'http://www.wercker.com/product', - blurb: 'Oracle - Oracle Container Engine' - }, - { - type: 3, - name: 'Oracle', - logo: 'oracle', - link: 'https://github.com/oracle/terraform-kubernetes-installer', - blurb: 'Oracle - Oracle Terraform Kubernetes Installer' - }, - { - type: 3, - name: 'Mesosphere', - logo: 'mesosphere', - link: 'https://mesosphere.com/kubernetes/', - blurb: 'Mesosphere - Kubernetes on DC/OS' - }, - { - type: 3, - name: 'Appscode', - logo: 'appscode', - link: 'https://appscode.com/products/cloud-deployment/', - blurb: 'Appscode - Pharmer' - }, - { - type: 3, - name: 'SAP', - logo: 'sap', - link: 'https://cloudplatform.sap.com/index.html', - blurb: 'SAP - Cloud Platform - Gardener (not yet released)' - }, - { - type: 3, - name: 'Oracle', - logo: 'oracle', - link: 'https://www.oracle.com/linux/index.html', - blurb: 'Oracle - Oracle Linux Container Services for use with Kubernetes' - }, - { - type: 3, - name: 'CoreOS', - logo: 'coreos', - link: 'https://github.com/kubernetes-incubator/bootkube', - blurb: 'CoreOS - bootkube' - }, - { - type: 2, - name: 'CoreOS', - logo: 'coreos', - link: 'https://coreos.com/', - blurb: 'Tectonic is the enterprise-ready Kubernetes product, by CoreOS. It adds key features to allow you to manage, update, and control clusters in production.' - }, - { - type: 3, - name: 'Weaveworks', - logo: 'weave_works', - link: '/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/', - blurb: 'Weaveworks - kubeadm' - }, - { - type: 3, - name: 'Joyent', - logo: 'joyent', - link: 'https://github.com/joyent/triton-kubernetes', - blurb: 'Joyent - Triton Kubernetes' - }, - { - type: 3, - name: 'Wise2c', - logo: 'wise2c', - link: 'http://www.wise2c.com/solution', - blurb: 'Wise2C Technology - WiseCloud' - }, - { - type: 2, - name: 'Wise2c', - logo: 'wise2c', - link: 'http://www.wise2c.com', - blurb: 'Using Kubernetes to providing IT continuous delivery and Enterprise grade container management solution to Financial Industry.' - }, - { - type: 3, - name: 'Docker', - logo: 'docker', - link: 'https://www.docker.com/enterprise-edition', - blurb: 'Docker - Docker Enterprise Edition' - }, - { - type: 3, - name: 'Daocloud', - logo: 'daocloud', - link: 'http://www.daocloud.io/dce', - blurb: 'DaoCloud - DaoCloud Enterprise' - }, - { - type: 2, - name: 'Daocloud', - logo: 'daocloud', - link: 'http://www.daocloud.io/dce', - blurb: 'We provide enterprise-level cloud native application platform that supports both Kubernetes and Docker Swarm.' - }, - { - type: 4, - name: 'Daocloud', - logo: 'daocloud', - link: 'http://www.daocloud.io/dce', - blurb: 'We provide enterprise-level cloud native application platform that supports both Kubernetes and Docker Swarm.' - }, - { - type: 3, - name: 'SUSE', - logo: 'suse', - link: 'https://www.suse.com/products/caas-platform/', - blurb: 'SUSE - SUSE CaaS (Container as a Service) Platform' - }, - { - type: 3, - name: 'Pivotal', - logo: 'pivotal', - link: 'https://cloud.vmware.com/pivotal-container-service', - blurb: 'Pivotal/VMware - Pivotal Container Service (PKS)' - }, - { - type: 3, - name: 'VMware', - logo: 'vmware', - link: 'https://cloud.vmware.com/pivotal-container-service', - blurb: 'Pivotal/VMware - Pivotal Container Service (PKS)' - }, - { - type: 3, - name: 'Alauda', - logo: 'alauda', - link: 'http://www.alauda.cn/product/detail/id/68.html', - blurb: 'Alauda - Alauda EE' - }, - { - type: 4, - name: 'Alauda', - logo: 'alauda', - link: 'http://www.alauda.cn/product/detail/id/68.html', - blurb: 'Alauda provides Kubernetes-Centric Enterprise Platform-as-a-Service offerings with a razor focus on delivering Cloud Native capabilities and DevOps best practices to enterprise customers across industries in China.' - }, - { - type: 2, - name: 'Alauda', - logo: 'alauda', - link: 'www.alauda.io', - blurb: 'Alauda provides Kubernetes-Centric Enterprise Platform-as-a-Service offerings with a razor focus on delivering Cloud Native capabilities and DevOps best practices to enterprise customers across industries in China.' - }, - { - type: 3, - name: 'EasyStack', - logo: 'easystack', - link: 'https://easystack.cn/eks/', - blurb: 'EasyStack - EasyStack Kubernetes Service (EKS)' - }, - { - type: 3, - name: 'CoreOS', - logo: 'coreos', - link: 'https://coreos.com/tectonic/', - blurb: 'CoreOS - Tectonic' - }, - { - type: 0, - name: 'GoPaddle', - logo: 'gopaddle', - link: 'https://gopaddle.io', - blurb: 'goPaddle is a DevOps platform for Kubernetes developers. It simplifies the Kubernetes Service creation and maintenance through source to image conversion, build & version management, team management, access controls and audit logs, single click provision of Kubernetes Clusters across multiple clouds from a single console.' - }, - { - type: 0, - name: 'Vexxhost', - logo: 'vexxhost', - link: 'https://vexxhost.com/public-cloud/container-services/kubernetes/', - blurb: 'VEXXHOST offers a high-performance container management service powered by Kubernetes and OpenStack Magnum.' - }, - { - type: 1, - name: 'Component Soft', - logo: 'componentsoft', - link: 'https://www.componentsoft.eu/?p=3925', - blurb: 'Component Soft offers training, consultation and support around open cloud technologies like Kubernetes, Docker, Openstack and Ceph.' - }, - { - type: 0, - name: 'Datera', - logo: 'datera', - link: 'http://www.datera.io/kubernetes/', - blurb: 'Datera delivers high performance, self-managing elastic block storage with self-service provisioning for deploying Kubernetes at scale.' - }, - { - type: 0, - name: 'Containership', - logo: 'containership', - link: 'https://containership.io/', - blurb: 'Containership is a cloud agnostic managed kubernetes offering that supports automatic provisioning on over 14 cloud providers.' - }, - { - type: 0, - name: 'Pure Storage', - logo: 'pure_storage', - link: 'https://hub.docker.com/r/purestorage/k8s/', - blurb: 'Our flexvol driver and dynamic provisioner allow FlashArray/Flashblade storage devices to be consumed as first class persistent storage from within Kubernetes.' - }, - { - type: 0, - name: 'Elastisys', - logo: 'elastisys', - link: 'https://elastisys.com/kubernetes/', - blurb: 'Predictive autoscaling - detects recurring workload variations, irregular traffic spikes, and everything in between. Runs K8s in any public or private cloud.' - }, - { - type: 0, - name: 'Portworx', - logo: 'portworx', - link: 'https://portworx.com/use-case/kubernetes-storage/', - blurb: 'With Portworx, you can manage any database or stateful service on any infrastructure using Kubernetes. You get a single data management layer for all of your stateful services, no matter where they run.' - }, - { - type: 1, - name: 'Object Computing, Inc.', - logo: 'objectcomputing', - link: 'https://objectcomputing.com/services/software-engineering/devops/kubernetes-services', - blurb: 'Our portfolio of DevOps consulting services includes Kubernetes support, development, and training.' - }, - { - type: 1, - name: 'Isotoma', - logo: 'isotoma', - link: 'https://www.isotoma.com/blog/2017/10/24/containerisation-tips-for-using-kubernetes-with-aws/', - blurb: 'Based in the North of England, Amazon partners who are delivering Kubernetes solutions on AWS for replatforming and native development.' - }, - { - type: 1, - name: 'Servian', - logo: 'servian', - link: 'https://www.servian.com/cloud-and-technology/', - blurb: 'Based in Australia, Servian provides advisory, consulting and managed services to support both application and data centric kubernetes use cases.' - }, - { - type: 1, - name: 'Redzara', - logo: 'redzara', - link: 'http://redzara.com/cloud-service', - blurb: 'Redzara has wide and in-depth experience in Cloud automation, now taking one giant step by providing container service offering and services to our customers.' - }, - { - type: 0, - name: 'Dataspine', - logo: 'dataspine', - link: 'http://dataspine.xyz/', - blurb: 'Dataspine is building a secure, elastic and serverless deployment platform for production ML/AI workloads on top of k8s.' - }, - { - type: 1, - name: 'CloudBourne', - logo: 'cloudbourne', - link: 'https://cloudbourne.com/kubernetes-enterprise-hybrid-cloud/', - blurb: 'Want to achieve maximum build, deploy and monitoring automation using Kubernetes? We can help.' - }, - { - type: 0, - name: 'CloudBourne', - logo: 'cloudbourne', - link: 'https://cloudbourne.com/', - blurb: 'Our AppZ Hybrid Cloud Platform can help you achieve your digital transformation goals using the powerful Kubernetes.' - }, - { - type: 3, - name: 'BoCloud', - logo: 'bocloud', - link: 'http://www.bocloud.com.cn/en/index.html', - blurb: 'BoCloud - BeyondcentContainer' - }, - { - type: 2, - name: 'Naitways', - logo: 'naitways', - link: 'https://www.naitways.com/', - blurb: 'Naitways is an Operator (AS57119), Integrator and Cloud Services Provider (our own !). We aim to provide value-added services through our mastering of the whole value chain (Infrastructure, Network, Human skills). Private and Public Cloud is available through Kubernetes managed or unmanaged.' - }, - { - type: 2, - name: 'Kinvolk', - logo: 'kinvolk', - link: 'https://kinvolk.io/kubernetes/', - blurb: 'Kinvolk offers Kubernetes engineering & operations support from cluster to kernel. Leading cloud-native organizations turn to Kinvolk for deep-stack Linux expertise.' - }, - { - type: 1, - name: 'Cascadeo Corporation', - logo: 'cascadeo', - link: 'http://www.cascadeo.com/', - blurb: 'Cascadeo designs, implements, and manages containerized workloads with Kubernetes, for both existing applications and greenfield development projects.' - }, - { - type: 1, - name: 'Elastisys AB', - logo: 'elastisys', - link: 'https://elastisys.com/services/#kubernetes', - blurb: 'We design, build, and operate Kubernetes clusters. We are experts in highly available and self-optimizing Kubernetes infrastructures' - }, - { - type: 1, - name: 'Greenfield Guild', - logo: 'greenfield', - link: 'http://greenfieldguild.com/', - blurb: 'The Greenfield Guild builds quality open source solutions on, and offers training and support for, Kubernetes in any environment.' - }, - { - type: 1, - name: 'PolarSeven', - logo: 'polarseven', - link: 'https://polarseven.com/what-we-do/kubernetes/', - blurb: 'To get started up and running with Kubernetes (K8s) our PolarSeven consultants can help you with creating a fully functional dockerized environment to run and deploy your applications.' - }, - { - type: 1, - name: 'Kloia', - logo: 'kloia', - link: 'https://kloia.com/kubernetes/', - blurb: 'Kloia is DevOps and Microservices Consultancy company that helps its customers to migrate their environment to cloud platforms for enabling more scalable and secure environments. We use Kubernetes to provide our customers all-in-one solutions in an cloud-agnostic way.' - }, - { - type: 0, - name: 'Bluefyre', - logo: 'bluefyre', - link: 'https://www.bluefyre.io', - blurb: 'Bluefyre offers a developer-first security platform that is native to Kubernetes. Bluefyre helps your development team ship secure code on Kubernetes faster!' - }, - { - type: 0, - name: 'Harness', - logo: 'harness', - link: 'https://harness.io/harness-continuous-delivery/secret-sauce/smart-automation/', - blurb: 'Harness offers Continuous Delivery As-A-Service will full support for containerized apps and Kubernetes clusters.' - }, - { - type: 0, - name: 'VMware - Wavefront', - logo: 'wavefront', - link: 'https://www.wavefront.com/solutions/container-monitoring/', - blurb: 'The Wavefront platform provides metrics-driven analytics and monitoring for Kubernetes and container dashboards for DevOps and developer teams delivering visibility into high-level services as well as granular container metrics.' - }, - { - type: 0, - name: 'Bloombase, Inc.', - logo: 'bloombase', - link: 'https://www.bloombase.com/go/kubernetes', - blurb: 'Bloombase provides high bandwidth, defense-in-depth data-at-rest encryption to lock down Kubernetes crown-jewels at scale.' - }, - { - type: 0, - name: 'Kasten', - logo: 'kasten', - link: 'https://kasten.io/product/', - blurb: 'Kasten provides enterprise solutions specifically built to address the operational complexity of data management in cloud-native environments.' - }, - { - type: 0, - name: 'Humio', - logo: 'humio', - link: 'https://humio.com', - blurb: 'Humio is a log aggregation database. We offer a Kubernetes integration that will give you insights to your logs across apps and instances.' - }, - { - type: 0, - name: 'Outcold Solutions LLC', - logo: 'outcold', - link: 'https://www.outcoldsolutions.com/#monitoring-kubernetes', - blurb: 'Powerful Certified Splunk applications for Monitoring OpenShift, Kubernetes and Docker.' - }, - { - type: 0, - name: 'SysEleven GmbH', - logo: 'syseleven', - link: 'http://www.syseleven.de/', - blurb: 'Enterprise Customers who are in need of bulletproof operations (High Performance E-Commerce and Enterprise Portals)' - }, - { - type: 0, - name: 'Landoop', - logo: 'landoop', - link: 'http://lenses.stream', - blurb: 'Lenses for Apache Kafka, to deploy, manage and operate with confidence data streaming pipelines and topologies at scale with confidence and native Kubernetes integration.' - }, - { - type: 0, - name: 'Redis Labs', - logo: 'redis', - link: 'https://redislabs.com/blog/getting-started-with-kubernetes-and-redis-using-redis-enterprise/', - blurb: 'Redis Enterprise extends open source Redis and delivers stable high performance and linear scaling required for building microservices on the Kubernetes platform.' - }, - { - type: 3, - name: 'Diamanti', - logo: 'diamanti', - link: 'https://diamanti.com/', - blurb: 'Diamanti - Diamanti-D10' - }, - { - type: 3, - name: 'Eking', - logo: 'eking', - link: 'http://www.eking-tech.com/', - blurb: 'Hainan eKing Technology Co. - eKing Cloud Container Platform' - }, - { - type: 3, - name: 'Harmony Cloud', - logo: 'harmony', - link: 'http://harmonycloud.cn/products/rongqiyun/', - blurb: 'Harmonycloud - Harmonycloud Container Platform' - }, - { - type: 3, - name: 'Woqutech', - logo: 'woqutech', - link: 'http://woqutech.com/product_qfusion.html', - blurb: 'Woqutech - QFusion' - }, - { - type: 3, - name: 'Baidu', - logo: 'baidu', - link: 'https://cloud.baidu.com/product/cce.html', - blurb: 'Baidu Cloud - Baidu Cloud Container Engine' - }, - { - type: 3, - name: 'ZTE', - logo: 'zte', - link: 'https://sdnfv.zte.com.cn/en/home', - blurb: 'ZTE - TECS OpenPalette' - }, - { - type: 1, - name: 'Automatic Server AG', - logo: 'asag', - link: 'http://www.automatic-server.com/paas.html', - blurb: 'We install and operate Kubernetes in big enterprises, create deployment workflows and help to migrate.' - }, - { - type: 1, - name: 'Circulo Siete', - logo: 'circulo', - link: 'https://circulosiete.com/consultoria/kubernetes/', - blurb: 'We are a Mexico based company offering training, consulting and support to migrate your workloads to Kubernetes, Cloud Native Microservices & Devops.' - }, - { - type: 1, - name: 'DevOpsGuru', - logo: 'devopsguru', - link: 'http://devopsguru.ca/workshop', - blurb: 'DevOpsGuru work with small business to transform from physical to virtual to containerization.' - }, - { - type: 1, - name: 'EIN Intelligence Co., Ltd', - logo: 'ein', - link: 'https://ein.io', - blurb: 'Startups and agile enterprises in South Korea.' - }, - { - type: 0, - name: 'GuardiCore', - logo: 'guardicore', - link: 'https://www.guardicore.com/', - blurb: 'GuardiCore provided process level visibility and network policy enforcement on containerized assets on the Kubernetes platform.' - }, - { - type: 0, - name: 'Hedvig', - logo: 'hedvig', - link: 'https://www.hedviginc.com/blog/provisioning-hedvig-storage-with-kubernetes', - blurb: 'Hedvig is software-defined storage that uses NFS or iSCSI for persistent volumes for provisioning shared storage for pods and containers.' - }, - { - type: 0, - name: 'Hewlett Packard Enterprise', - logo: 'hpe', - link: ' https://www.hpe.com/us/en/storage/containers.html', - blurb: 'Persistent Storage that makes data as easy to manage as containers: dynamic provisioning, policy-based performance & protection, QoS, & more.' - }, - { - type: 0, - name: 'JetBrains', - logo: 'jetbrains', - link: 'https://blog.jetbrains.com/teamcity/2017/10/teamcity-kubernetes-support-plugin/', - blurb: 'Run TeamCity cloud build agents in a Kubernetes cluster. Provides Helm support as a build step.' - }, - { - type: 2, - name: 'Opensense', - logo: 'opensense', - link: 'http://www.opensense.fr/en/kubernetes-en/', - blurb: 'We provide Kubernetes services (integration, operation, training) as well as development of banking microservices based on our extended experience with cloud of containers, microservices, data management and financial sector.' - }, - { - type: 2, - name: 'SAP SE', - logo: 'sap', - link: 'https://cloudplatform.sap.com', - blurb: 'The SAP Cloud Platform provides in-memory capabilities and unique business services for building and extending applications. With open sourced Project Gardener, SAP utilizes the power of Kubernetes to enable an open, robust, multi-cloud experience for our customers. You can use simple, modern cloud native design principles and leverage skills your organization already has to deliver agile and transformative applications, while integrating with the latest SAP Leonardo business features.' - }, - { - type: 1, - name: 'Mobilise Cloud Services Limited', - logo: 'mobilise', - link: 'https://www.mobilise.cloud/en/services/serverless-application-delivery/', - blurb: 'Mobilise helps organisations adopt Kubernetes and integrate with their CI/CD tooling.' - }, - { - type: 3, - name: 'AWS', - logo: 'aws', - link: 'https://aws.amazon.com/eks/', - blurb: 'Amazon Elastic Container Service for Kubernetes (Amazon EKS) is a managed service that makes it easy for you to run Kubernetes on AWS without needing to install and operate your own Kubernetes clusters.' - }, - { - type: 3, - name: 'Kontena', - logo: 'kontena', - link: 'https://pharos.sh', - blurb: 'Kontena Pharos - The simple, solid, certified Kubernetes distribution that just works.' - }, - { - type: 2, - name: 'NTTData', - logo: 'nttdata', - link: 'http://de.nttdata.com/altemista-cloud', - blurb: 'NTT DATA, a member of the NTT Group, brings the power of the worlds leading infrastructure provider in the global K8s community.' - }, - { - type: 2, - name: 'OCTO', - logo: 'octo', - link: 'https://www.octo.academy/fr/formation/275-kubernetes-utiliser-architecturer-et-administrer-une-plateforme-de-conteneurs', - blurb: 'OCTO technology provides training, architecture, technical consulting and delivery services including containers and Kubernetes.' - }, - { - type: 0, - name: 'Logdna', - logo: 'logdna', - link: 'https://logdna.com/kubernetes', - blurb: 'Pinpoint production issues instantly with LogDNA, the best logging platform you will ever use. Get started with only 2 kubectl commands.' - } - ] - - var kcspContainer = document.getElementById('kcspContainer') - var distContainer = document.getElementById('distContainer') - var ktpContainer = document.getElementById('ktpContainer') - var isvContainer = document.getElementById('isvContainer') - var servContainer = document.getElementById('servContainer') - - var sorted = partners.sort(function (a, b) { - if (a.name > b.name) return 1 - if (a.name < b.name) return -1 - return 0 - }) - - sorted.forEach(function (obj) { - var box = document.createElement('div') - box.className = 'partner-box' - - var img = document.createElement('img') - img.src = '/images/square-logos/' + obj.logo + '.png' - - var div = document.createElement('div') - - var p = document.createElement('p') - p.textContent = obj.blurb - - var link = document.createElement('a') - link.href = obj.link - link.target = '_blank' - link.textContent = 'Learn more' - - div.appendChild(p) - div.appendChild(link) - - box.appendChild(img) - box.appendChild(div) - - var container; - if (obj.type === 0) { - container = isvContainer; - } else if (obj.type === 1) { - container = servContainer; - } else if (obj.type === 2) { - container = kcspContainer; - } else if (obj.type === 3) { - container = distContainer; - } else if (obj.type === 4) { - container = ktpContainer; - } - - container.appendChild(box) - }) -})(); diff --git a/content/ja/includes/partner-style.css b/content/ja/includes/partner-style.css deleted file mode 100644 index dc120872e0..0000000000 --- a/content/ja/includes/partner-style.css +++ /dev/null @@ -1,201 +0,0 @@ -/* SECTIONS */ -.section { - clear: both; - padding: 0px; - margin-bottom: 2em; -} - -.kcsp_section { - clear: both; - padding: 0px; - margin-bottom: 2em; -} - -/* COLUMN SETUP */ -.col { - display: block; - float:left; - margin: 1% 0 1% 1.6%; - background-color: #f9f9f9; -} -.col:first-child { margin-left: 0; } - - -/* GROUPING */ -.group:before, -.group:after { - content:""; - display:table; -} -.group:after { - clear:both; -} -.group { - zoom:1; /* For IE 6/7 */ -} - -/* GRID OF THREE */ -.span_3_of_3 { - width: 35%; - background-color: #f9f9f9; - padding: 20px; -} -.span_2_of_3 { - width: 35%; - background-color: #f9f9f9; - padding: 20px; -} -.span_1_of_3 { - width: 35%; - background-color: #f9f9f9; - padding: 20px; -} - -.col-container { - display: table; /* Make the container element behave like a table */ - width: 100%; /* Set full-width to expand the whole page */ - padding-bottom: 30px; -} - -.col-nav { - display: table-cell; /* Make elements inside the container behave like table cells */ - width: 18%; - background-color: #f9f9f9; - padding: 20px; - border: 5px solid white; -} - -/* GO FULL WIDTH AT LESS THAN 480 PIXELS */ - -@media only screen and (max-width: 480px) { - .col { margin: 1% 0 1% 0%;} - .span_3_of_3, .span_2_of_3, .span_1_of_3 { width: 100%; } -} - -@media only screen and (max-width: 650px) { - .col-nav { - display: block; - width: 100%; - } -} - -.button{ - max-width: 100%; - box-sizing: border-box; - margin: 0; - display: inline-block; - border-radius: 6px; - padding: 0 20px; - line-height: 40px; - color: #ffffff; - font-size: 16px; - background-color: #3371e3; - text-decoration: none; - } - -h5 { - font-size: 16px; - line-height: 1.5em; - margin-bottom: 2em; -} - -#usersGrid a { - display: inline-block; - background-color: #f9f9f9; -} - -#ktpContainer, #distContainer, #kcspContainer, #isvContainer, #servContainer { - position: relative; - width: 100%; - display: flex; - justify-content: space-between; - flex-wrap: wrap; -} - -#isvContainer { - margin-bottom: 80px; -} - -#kcspContainer { - margin-bottom: 80px; -} - -#distContainer { - margin-bottom: 80px; -} - -#ktpContainer { - margin-bottom: 80px; -} - -.partner-box { - position: relative; - width: 47%; - max-width: 48%; - min-width: 48%; - margin-bottom: 20px; - padding: 20px; - flex: 1; - display: flex; - justify-content: left; - align-items: flex-start; -} - -.partner-box img { - background-color: #f9f9f9; -} - -.partner-box > div { - margin-left: 30px; -} - -.partner-box a { - color: #3576E3; -} - -@media screen and (max-width: 1024px) { - .partner-box { - flex-direction: column; - justify-content: flex-start; - } - - .partner-box > div { - margin: 20px 0 0; - } -} - -@media screen and (max-width: 568px) { - #ktpContainer, #distContainter, #kcspContainer, #isvContainer, #servContainer { - justify-content: center; - } - - .partner-box { - flex-direction: column; - justify-content: flex-start; - width: 100%; - max-width: 100%; - min-width: 100%; - } - - .partner-box > div { - margin: 20px 0 0; - } -} - -@media screen and (max-width: 568px) { - #ktpContainer, #distContainer, #kcspContainer, #isvContainer, #servContainer { - justify-content: center; - } - - .partner-box { - flex-direction: column; - justify-content: flex-start; - width: 100%; - max-width: 100%; - min-width: 100%; - } - - .partner-box > div { - margin: 20px 0 0; - } -} diff --git a/content/ja/includes/task-tutorial-prereqs-node-upgrade.md b/content/ja/includes/task-tutorial-prereqs-node-upgrade.md new file mode 100644 index 0000000000..2ed717dd15 --- /dev/null +++ b/content/ja/includes/task-tutorial-prereqs-node-upgrade.md @@ -0,0 +1,3 @@ +You need to have shell access to all the nodes, and the kubectl command-line tool must +be configured to communicate with your cluster. It is recommended to run this tutorial +on a cluster with at least two nodes that are not acting as control plane hosts. diff --git a/content/ja/partners/_index.html b/content/ja/partners/_index.html index 7e9ceb1bd3..6e20ea3c30 100644 --- a/content/ja/partners/_index.html +++ b/content/ja/partners/_index.html @@ -45,7 +45,3 @@ cid: partners {{< cncf-landscape helpers=true >}} - - diff --git a/content/ko/partners/_index.html b/content/ko/partners/_index.html index 9ed94d7a7f..b393fbb722 100644 --- a/content/ko/partners/_index.html +++ b/content/ko/partners/_index.html @@ -47,11 +47,3 @@ cid: partners
    {{< cncf-landscape helpers=true >}} - - - - From 70fdf4e426eb52be977cd63c6126b3a5fb3f4af5 Mon Sep 17 00:00:00 2001 From: Dmitry Shurupov Date: Wed, 15 May 2024 14:33:07 +0700 Subject: [PATCH 1030/1086] Sync ru.toml with the actual English file Signed-off-by: Dmitry Shurupov --- data/i18n/ru/ru.toml | 327 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 321 insertions(+), 6 deletions(-) diff --git a/data/i18n/ru/ru.toml b/data/i18n/ru/ru.toml index 1e56497542..780e6cfa03 100644 --- a/data/i18n/ru/ru.toml +++ b/data/i18n/ru/ru.toml @@ -1,11 +1,39 @@ # i18n strings for the Russian (main) site. # NOTE: Please keep the entries in alphabetical order when editing + +# For "and", see [conjunction_1] + +[api_reference_title] +other = "Справка API" + +[auto_generated_edit_notice] +other = "(автоматически сгенерированная страница)" + +[auto_generated_pageinfo] +other = """

    Эта страница сгенерирована автоматически.

    Если вы планируете сообщить о проблеме на этой странице, в описании своего issue укажите, что она автоматически сгенерирована. Возможно, исправление потребуется сделать в других репозиториях проекта Kubernetes.

    """ + +[blog_post_show_more] +other = "Показать больше публикаций..." + +[banner_acknowledgement] +other = "Скрыть это уведомление" + +[case_study_prefix] +other = "Кейс:" + [caution] other = "Внимание:" [cleanup_heading] other = "Очистка" +# Localization note (no need to translate this note) +# This is always followed by Chinese text, as required by the Kubernetes +# project's ICP license, issued by the government of the People's Republic +# of China. +[china_icp_license] +other = "ICP license:" + [community_events_calendar] other = "Календарь событий" @@ -15,6 +43,9 @@ other = "Форум" [community_github_name] other = "GitHub" +[community_server_fault_name] +other = "Server Fault" + [community_slack_name] other = "Slack" @@ -22,11 +53,39 @@ other = "Slack" other = "Stack Overflow" [community_twitter_name] -other = "Twitter" +other = "X (ранее Twitter)" + +[community_x_name] +other = "X (ранее Twitter)" [community_youtube_name] other = "YouTube" +# Avoid using conjunction_1. +# Must match the context in layouts/shortcodes/release-data.html +# Appears on https://kubernetes.io/releases/ +# For example the "and" in "Complete 1.25 Schedule and Changelog" +[conjunction_1] +other = "и" + +[cve_id] +other = "CVE ID" + +[cve_issue_url] +other = "CVE GitHub Issue URL" + +[cve_summary] +other = "Описание проблемы" + +[cve_table] +other = "Официальный список Kubernetes CVE" + +[cve_table_date_format] +other = "02 Jan 2006 15:04:05 MST" + +[cve_table_date_format_string] +other = "(последнее обновление: %s)" + [deprecation_title] other = "Вы просматриваете документацию для Kubernetes версии:" @@ -36,6 +95,12 @@ other = " документация больше не поддерживаетс [deprecation_file_warning] other = "Устаревшая" +[outdated_content_title] +other = "Информация этой страницы может быть устаревшей" + +[outdated_content_message] +other = "Оригинальная (английская) версия этого документа обновлялась с момента последнего перевода, поэтому информация может быть устаревшей. Если вы читаете на английском, посмотрите на оригинальную версию с наиболее актуальной информацией: " + [dockershim_message] other = """Dockershim удалён из проекта Kubernetes в релизе 1.24. См. подробности в Dockershim Removal FAQ.""" @@ -51,6 +116,9 @@ other = "Я ..." [docs_label_users] other = "Пользователи" +[docs_page_versions] +other = "Это %s для Kubernetes %s. Если вам нужна другая версия Kubernetes, используйте следующие страницы:" + [docs_version_current] other = "(эта документация)" @@ -58,7 +126,7 @@ other = "(эта документация)" other = "Последняя версия" [docs_version_other_heading] -other = "Старые версии" +other = "Предыдущие версии" [end_of_life] other = "Конец жизни:" @@ -72,9 +140,48 @@ other = "Возможно, вы искали:" [examples_heading] other = "Примеры" +[feature_gate_stage_alpha] +other = "Alpha" + +[feature_gate_stage_beta] +other = "Beta" + +[feature_gate_stage_stable] +other = "GA" + +[feature_gate_stage_deprecated] +other = "Deprecated" + +[feature_gate_table_header_default] +other = "По умолчанию" + +[feature_gate_table_header_feature] +other = "Фича" + +[feature_gate_table_header_from] +other = "С" + +[feature_gate_table_header_since] +other = "Начиная с" + +[feature_gate_table_header_stage] +other = "Статус" + +[feature_gate_table_header_to] +other = "До" + +[feature_gate_table_header_until] +other = "До" + [feature_state] other = "СТАТУС ФИЧИ:" +[feature_state_kubernetes_label] +other = "Kubernetes" + +[feature_state_feature_gate_tooltip] +other = "Feature Gate:" + [feedback_heading] other = "Обратная связь" @@ -87,6 +194,9 @@ other = "Эта страница была полезна?" [feedback_yes] other = "Да" +[final_patch_release] +other = "Последний патч-релиз" + [inline_list_separator] other = "," @@ -128,24 +238,96 @@ other = "Расскажите свою историю" [layouts_docs_glossary_aka] other = "Также известный как" +[layout_docs_glossary_architecture_description] +other = "Внутренние компоненты Kubernetes." + +[layout_docs_glossary_architecture_name] +other = "Архитектура" + +[layouts_docs_glossary_click_details_after] +other = "ниже, чтобы получить более подробное описание нужного термина." + +[layouts_docs_glossary_click_details_before] +other = "Нажмите на значок" + +[layout_docs_glossary_community_description] +other = "Относится к Open Source-разработке Kubernetes." + +[layout_docs_glossary_community_name] +other = "Сообщество" + +[layout_docs_glossary_core-object_description] +other = "Тип ресурса, поддерживаемый Kubernetes по умолчанию." + +[layout_docs_glossary_core-object_name] +other = "Базовый объект" + [layouts_docs_glossary_description] other = "Данный глоссарий должен стать исчерпывающим стандартизированным списком терминологии в Kubernetes. Он включает технические термины, специфичные для Kubernetes, а также более общие термины, которые полезно знать." [layouts_docs_glossary_deselect_all] other = "Отменить выбор всех тегов" -[layouts_docs_glossary_click_details_after] -other = "для получения более подробного объяснения по интересующему термину." +[layout_docs_glossary_extension_description] +other = "Поддерживаемые кастомизации для Kubernetes." -[layouts_docs_glossary_click_details_before] -other = "Нажмите на значок" +[layout_docs_glossary_extension_name] +other = "Расширение" [layouts_docs_glossary_filter] other = "Фильтрация терминов по тегам" +[layout_docs_glossary_fundamental_description] +other = "Актуальное для совсем нового пользователя Kubernetes." + +[layout_docs_glossary_fundamental_name] +other = "Фундаментальное" + +[layout_docs_glossary_networking_description] +other = "Как компоненты Kubernetes взаимодействуют между собой (и с программами вне кластера)." + +[layout_docs_glossary_networking_name] +other = "Сеть" + +[layout_docs_glossary_operation_description] +other = "Запуск и поддержка Kubernetes." + +[layout_docs_glossary_operation_name] +other = "Эксплуатация" + +[layout_docs_glossary_security_description] +other = "Обеспечение безопасности для приложений в Kubernetes." + +[layout_docs_glossary_security_name] +other = "Безопасность" + [layouts_docs_glossary_select_all] other = "Выбрать всё" +[layout_docs_glossary_storage_description] +other = "Как приложения в Kubernetes хранят постоянные данные." + +[layout_docs_glossary_storage_name] +other = "Хранилище" + +[layout_docs_glossary_tool_description] +other = "Приложения, которые упрощают или улучшают работу с Kubernetes." + +[layout_docs_glossary_tool_name] +other = "Инструменты" + +[layout_docs_glossary_user-type_description] +other = "Примеры типичных пользователей Kubernetes." + +[layout_docs_glossary_user-type_name] +other = "Тип пользователей" + +[layout_docs_glossary_workload_description] +other = "Приложения, которые запускаются в Kubernetes." + +[layout_docs_glossary_workload_name] +other = "Рабочие нагрузки" + [layouts_docs_partials_feedback_improvement] other = "предложить улучшение" @@ -164,6 +346,14 @@ other = "Спасибо за обратную связь! Если у вас е [layouts_docs_search_fetching] other = "Получение результатов..." +[legacy_repos_message] +other = """Репозитории `apt.kubernetes.io` и `yum.kubernetes.io` с пакетами Kubernetes объявлены +[устаревшими и необновляемыми с 13 сентября 2023](/blog/2023/08/31/legacy-package-repository-deprecation/). +**Чтобы устанавливать релизы Kubernetes, выпущенные после 13 сентября 2023, строго необходимо +использовать [новые репозитории с пакетами `pkgs.k8s.io`](/blog/2023/08/15/pkgs-k8s-io-introduction/).** +Устаревшие legacy-репозитории и их содержимое могут быть удалены в любой момент и без предварительного +уведомления. В новых репозиториях можно найти версии Kubernetes начиная с v1.24.0.""" + [main_by] other = "от" @@ -212,6 +402,9 @@ other = "Прочитать о" [main_read_more] other = "Узнать больше" +[monthly_patch_release] +other = "Ежемесячный патч-релиз" + [not_applicable] # Localization teams: it's OK to use a longer text here other = "н/д" @@ -228,6 +421,9 @@ other = "Опции" [outdated_blog__message] other = "Это статье больше одного года. Такие статьи могут содержать устаревшую информацию. Перепроверяйте информацию на странице, поскольку она могла стать некорректной с момента её публикации." +[patch_release] +other = "Патч-релиз" + [post_create_issue] other = "Создать issue" @@ -237,6 +433,78 @@ other = "Подготовка к работе" [previous_patches] other = "Патч-релизы:" +# The following text is displayed when JavaScript isn't available. +[release_binary_alternate_links] +other = """Ссылки для загрузки компонентов Kubernetes (и их контрольные суммы) можно найти в файлах [CHANGELOG](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG). +Кроме того, можно воспользоваться [downloadkubernetes.com](https://www.downloadkubernetes.com/) для фильтрации по версии и архитектуре.""" + +[release_binary_arch] +other = "Архитектура" + +[release_binary_arch_option] +other = "Архитектуры" + +[release_binary_copy_link] +other = "Ссылка для копирования" + +[release_binary_copy_link_certifcate] +other = "сертификат" + +[release_binary_copy_link_checksum] +other = "checksum" + +[release_binary_copy_link_signature] +other = "подпись" + +[release_binary_copy_link_tooltip] +other = "скопировать в буфер обмена" + +[release_binary_download] +other = "Скачать бинарник" + +[release_binary_download_tooltip] +other = "скачать бинарный файл" + +[release_binary_options] +other = "Опции для загрузки" + +[release_binary_os] +other = "Операционная система" + +[release_binary_os_option] +other = "Операционные системы" + +[release_binary_os_darwin] +other = "darwin" + +[release_binary_os_linux] +other = "linux" + +[release_binary_os_windows] +other = "windows" + +[release_binary_table_caption] +other = "Скачать бинарники компонентов Kubernetes" + +# NOTE: is a placeholder for the actual version number set by 'release-binaries' shortcode. +# Please do not localize or modify placeholder. +[release_binary_section] +other = """Ниже представлены ссылки для загрузки компонентов Kubernetes (и их контрольные суммы). +Чтобы скачать более старые поддерживаемые версии, перейдите на соответствующую страницу документации +для [предыдущих версий](https://kubernetes.io/ru/docs/home/supported-doc-versions/#versions-older) или используйте [downloadkubernetes.com](https://www.downloadkubernetes.com/).""" + +# NOTE: and are placeholders set by 'release-binaries' shortcode. +# Please do not localize or modify and placeholders. +[release_binary_section_note] +other = """Чтобы скачать более ранние патч-версии компонентов Kubernetes (и их контрольные суммы), +смотрите файл [CHANGELOG](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG/CHANGELOG-.md).""" + +[release_binary_version] +other = "Версия" + +[release_binary_version_option] +other = "Последняя версия" + [release_date_after] other = ")" @@ -248,6 +516,50 @@ other = "(дата релиза: " [release_date_format] other = "2006-01-02" +[release_date_format_month] +other = "January 2006" + +[release_cherry_pick_deadline] +other = "Дедлайн для Cherry Pick" + +[release_end_of_life_date] +other = "Дата конца жизни (EOL)" + +[release_full_details_initial_text] +other = "Полностью" + +[release_information_navbar] +other = "Информация о релизе" + +[release_minor_version] +other = "Минорная версия" + +[release_info_next_patch] +other = "Следующий патч-релиз — **%s**." + +# Localization note: You can use Markdown here. +# The three placeholders (in order) are: +# Kubernetes minor version +# maintenance mode date +# end of life date +# +# Keep this order. It is OK to use more than one sentence, and it's also OK to change the +# tense of the text so long as the meaning is clear. +[release_info_eol] +other = "**%s** переходит в режим поддержки (maintenance) **%s**, а конец жизни (EOL) — **%s**." + +[release_note] +other = "Примечание" + +[release_schedule] +other = "График" + +[release_target_date] +other = "Планируемая дата" + +[release_changelog] +other = "Changelog" + [seealso_heading] other = "См. также" @@ -269,6 +581,9 @@ other = """🛇 Здесь дана ссылка на сторонний п [thirdparty_message_disclaimer] other = """

    Объекты этой страницы ссылаются на сторонние продукты или проекты, реализующие функциональность, которая требуется Kubernetes. Авторы Kubernetes не несут ответственность за эти сторонние продукты или проекты. Подробнее читайте в инструкциях по сайту CNCF.

    Перед тем, как предлагать изменения, которые добавят новую стороннюю ссылку, необходимо прочитать руководство по контенту.

    """ +[thirdparty_message_vendor] +other = """Объекты этой страницы ссылаются на внешних (по отношению к Kubernetes) поставщиков. Авторы проекта Kubernetes не несут ответственность за эти сторонние продукты и проекты. Чтобы добавить вендора, продукт или проект в этот список, ознакомьтесь с руководством по контенту перед тем, как предлагать изменение. Больше информации.""" + [ui_search_placeholder] other = "Поиск" From 834e94ffa2685ba8a069f804fe3644cedcc1fa8d Mon Sep 17 00:00:00 2001 From: Sascha Grunert Date: Wed, 15 May 2024 10:44:03 +0200 Subject: [PATCH 1031/1086] Update schedule.yaml Signed-off-by: Sascha Grunert --- data/releases/schedule.yaml | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/data/releases/schedule.yaml b/data/releases/schedule.yaml index b01343426a..258c77af69 100644 --- a/data/releases/schedule.yaml +++ b/data/releases/schedule.yaml @@ -7,10 +7,13 @@ schedules: - endOfLifeDate: "2025-06-28" maintenanceModeStartDate: "2025-04-28" next: - cherryPickDeadline: "2024-05-10" + cherryPickDeadline: "2024-06-07" + release: 1.30.2 + targetDate: "2024-06-11" + previousPatches: + - cherryPickDeadline: "2024-05-10" release: 1.30.1 targetDate: "2024-05-15" - previousPatches: - release: 1.30.0 targetDate: "2024-04-17" release: "1.30" @@ -18,10 +21,13 @@ schedules: - endOfLifeDate: "2025-02-28" maintenanceModeStartDate: "2024-12-28" next: - cherryPickDeadline: "2024-05-10" + cherryPickDeadline: "2024-06-07" + release: 1.29.6 + targetDate: "2024-06-11" + previousPatches: + - cherryPickDeadline: "2024-05-10" release: 1.29.5 targetDate: "2024-05-14" - previousPatches: - cherryPickDeadline: "2024-04-12" release: 1.29.4 targetDate: "2024-04-16" @@ -41,10 +47,13 @@ schedules: - endOfLifeDate: "2024-10-28" maintenanceModeStartDate: "2024-08-28" next: - cherryPickDeadline: "2024-05-10" + cherryPickDeadline: "2024-06-07" + release: 1.28.11 + targetDate: "2024-06-11" + previousPatches: + - cherryPickDeadline: "2024-05-10" release: 1.28.10 targetDate: "2024-05-14" - previousPatches: - cherryPickDeadline: "2024-04-12" release: 1.28.9 targetDate: "2024-04-16" @@ -80,10 +89,13 @@ schedules: - endOfLifeDate: "2024-06-28" maintenanceModeStartDate: "2024-04-28" next: - cherryPickDeadline: "2024-05-10" + cherryPickDeadline: "2024-06-07" + release: 1.27.15 + targetDate: "2024-06-11" + previousPatches: + - cherryPickDeadline: "2024-05-10" release: 1.27.14 targetDate: "2024-05-14" - previousPatches: - cherryPickDeadline: "2024-04-12" release: 1.27.13 targetDate: "2024-04-16" @@ -128,9 +140,9 @@ schedules: release: "1.27" releaseDate: "2023-04-11" upcoming_releases: -- cherryPickDeadline: "2024-05-10" - targetDate: "2024-05-14" - cherryPickDeadline: "2024-06-07" targetDate: "2024-06-11" - cherryPickDeadline: "2024-07-05" targetDate: "2024-07-09" +- cherryPickDeadline: "2024-08-09" + targetDate: "2024-08-13" From ee1acbb7936163a41451aa31680e6c99e17b1b75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=BCttler?= Date: Wed, 15 May 2024 12:54:44 +0200 Subject: [PATCH 1032/1086] Update operator.md: Removed KUDO KUDO was not updated for three years. The docs should not mention it. --- content/en/docs/concepts/extend-kubernetes/operator.md | 1 - 1 file changed, 1 deletion(-) diff --git a/content/en/docs/concepts/extend-kubernetes/operator.md b/content/en/docs/concepts/extend-kubernetes/operator.md index 16cbf37ecf..817469ffa1 100644 --- a/content/en/docs/concepts/extend-kubernetes/operator.md +++ b/content/en/docs/concepts/extend-kubernetes/operator.md @@ -118,7 +118,6 @@ operator. * [kube-rs](https://kube.rs/) (Rust) * [kubebuilder](https://book.kubebuilder.io/) * [KubeOps](https://buehler.github.io/dotnet-operator-sdk/) (.NET operator SDK) -* [KUDO](https://kudo.dev/) (Kubernetes Universal Declarative Operator) * [Mast](https://docs.ansi.services/mast/user_guide/operator/) * [Metacontroller](https://metacontroller.github.io/metacontroller/intro.html) along with WebHooks that you implement yourself From c35f01554626d19b125cdd9170a7338a536ac5f2 Mon Sep 17 00:00:00 2001 From: "Kohei Ota (inductor)" Date: Wed, 15 May 2024 20:38:35 +0900 Subject: [PATCH 1033/1086] Update content/ja/docs/reference/glossary/cidr.md --- content/ja/docs/reference/glossary/cidr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/ja/docs/reference/glossary/cidr.md b/content/ja/docs/reference/glossary/cidr.md index 3b8e1c940f..9bc1753e5c 100644 --- a/content/ja/docs/reference/glossary/cidr.md +++ b/content/ja/docs/reference/glossary/cidr.md @@ -10,7 +10,7 @@ aka: tags: - networking --- -CIDR (Classless Inter-Domain Routing)はIPアドレスの範囲を記述するための表記法であり、さまざまなネットワークを構成するために使用されています。 +CIDR(Classless Inter-Domain Routing)はIPアドレスの範囲を記述するための表記法であり、さまざまなネットワークを構成するために使用されています。 From 366f513fe3adb09e20d22027fc22e87742e59c94 Mon Sep 17 00:00:00 2001 From: xin gu <418294249@qq.com> Date: Tue, 14 May 2024 21:29:12 +0800 Subject: [PATCH 1034/1086] sync service-accounts disruptions kubelet-config-file Update service-accounts.md --- .../concepts/security/service-accounts.md | 22 +++++++++---------- .../concepts/workloads/pods/disruptions.md | 3 +-- .../administer-cluster/kubelet-config-file.md | 4 ++-- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/content/zh-cn/docs/concepts/security/service-accounts.md b/content/zh-cn/docs/concepts/security/service-accounts.md index 830eaeb991..791c440642 100644 --- a/content/zh-cn/docs/concepts/security/service-accounts.md +++ b/content/zh-cn/docs/concepts/security/service-accounts.md @@ -343,20 +343,20 @@ following methods: * [服务账号令牌 Secret](/zh-cn/docs/tasks/configure-pod-container/configure-service-account/#manually-create-an-api-token-for-a-serviceaccount)(不推荐): 你可以将服务账号令牌以 Kubernetes Secret 的形式挂载到 Pod 中。这些令牌不会过期且不会轮换。 - 不推荐使用此方法,特别是在大规模场景下,这是因为静态、长期有效的凭据存在一定的风险。在 Kubernetes v1.24 及更高版本中, - [LegacyServiceAccountTokenNoAutoGeneration 特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-graduated-or-deprecated-features)阻止 - Kubernetes 自动为 ServiceAccount 创建这些令牌。`LegacyServiceAccountTokenNoAutoGeneration` 默认被启用, - 也就是说,Kubernetes 不会创建这些令牌。 + 在 v1.24 版本之前,系统会为每个服务账户自动创建一个永久令牌。此方法已不再被推荐, + 尤其是在大规模应用时,因为使用静态、长期有效的凭证存在风险。 + [LegacyServiceAccountTokenNoAutoGeneration 特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates-removed) + (从 Kubernetes v1.24 至 v1.26 默认启用),阻止 Kubernetes 自动为 ServiceAccount 创建这些令牌。 + 此特性门控在 v1.27 版本中被移除,因为此特性已升级为正式发布(GA)状态; + 你仍然可以手动为 ServiceAccount 创建无限期的服务账户令牌,但应考虑到安全影响。 {{< note >}} 集群管理员操作包括: diff --git a/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md b/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md index c5c3d2b995..7548df0006 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md +++ b/content/zh-cn/docs/tasks/administer-cluster/kubelet-config-file.md @@ -220,11 +220,11 @@ However, it's important to note that the behavior varies based on the data type kubelet 配置结构中不同数据类型的合并方式不同。 -有关详细信息,请参阅[参考文档](/zh-cn/docs/reference/node/kubelet-config-directory-merging.md)。 +有关详细信息,请参阅[参考文档](/zh-cn/docs/reference/node/kubelet-config-directory-merging)。 -作为开始,使用如下示例创建一个 StatefulSet。它和 +作为开始,使用如下示例创建一个 StatefulSet(以及它所依赖的 Service)。它和 [StatefulSet](/zh-cn/docs/concepts/workloads/controllers/statefulset/) 概念中的示例相似。 它创建了一个 [Headless Service](/zh-cn/docs/concepts/services-networking/service/#headless-services) `nginx` 用来发布 StatefulSet `web` 中的 Pod 的 IP 地址。 @@ -204,6 +204,11 @@ web 2 1 20s --> ### 顺序创建 Pod {#ordered-pod-creation} + +StatefulSet 默认以严格的顺序创建其 Pod。 + 请注意,直到 `web-0` Pod 处于 **Running**(请参阅 [Pod 阶段](/zh-cn/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase)) 并 **Ready**(请参阅 [Pod 状况](/zh-cn/docs/concepts/workloads/pods/pod-lifecycle/#pod-conditions)中的 `type`)状态后,`web-1` Pod 才会被启动。 +在本教程的后面部分,你将练习[并行启动](#parallel-pod-management)。 + {{< note >}} Pod 的序号、主机名、SRV 条目和记录名称没有改变,但和 Pod 相关联的 IP 地址可能发生了改变。 在本教程中使用的集群中它们就改变了。这就是为什么不要在其他应用中使用 -StatefulSet 中 Pod 的 IP 地址进行连接,这点很重要。 +StatefulSet 中特定 Pod 的 IP 地址进行连接,这点很重要 +(可以通过解析 Pod 的主机名来连接到 Pod)。 +如果你的应用程序想要在 StatefulSet 中找到任一健康的 Pod, +且不需要跟踪每个特定的 Pod,你还可以连接到由该 StatefulSet 中的 Pod 关联的 +`type: ClusterIP` Service 的 IP 地址。 +你可以使用跟踪 StatefulSet 的同一 Service +(StatefulSet 中 `serviceName` 所指定的)或选择正确的 Pod 集的单独 Service。 + @@ -701,12 +726,13 @@ PersistentVolumeClaim 相关联的 PersistentVolume 卷被重新挂载到了各 ## 扩容/缩容 StatefulSet {#scaling-a-statefulset} -扩容/缩容 StatefulSet 指增加或减少它的副本数。这通过更新 `replicas` 字段完成。 +扩容/缩容 StatefulSet 指增加或减少它的副本数。这通过更新 `replicas` 字段完成(水平缩放)。 你可以使用 [`kubectl scale`](/docs/reference/generated/kubectl/kubectl-commands/#scale) 或者 [`kubectl patch`](/docs/reference/generated/kubectl/kubectl-commands/#patch) 来扩容/缩容一个 StatefulSet。 @@ -715,6 +741,14 @@ This is accomplished by updating the `replicas` field. You can use either --> ### 扩容 {#scaling-up} + +扩容意味着添加更多副本。 +如果你的应用程序能够在整个 StatefulSet 范围内分派工作,则新的更大的 Pod 集可以执行更多的工作。 + @@ -793,6 +827,14 @@ Pod,并且会等待前一个 Pod 变为 Running 和 Ready 才会启动下一 --> ### 缩容 {#scaling-down} + +缩容意味着减少副本数量。 +例如,你可能因为服务的流量水平已降低并且在当前规模下存在空闲资源的原因执行缩容操作。 + @@ -854,9 +896,9 @@ web-3 1/1 Terminating 0 42s ### 顺序终止 Pod {#ordered-pod-termination} 控制器会按照与 Pod 序号索引相反的顺序每次删除一个 Pod。在删除下一个 Pod 前会等待上一个被完全关闭。 @@ -879,12 +921,13 @@ www-web-4 Bound pvc-e11bb5f8-b508-11e6-932f-42010a800002 1Gi RWO 五个 PersistentVolumeClaims 和五个 PersistentVolume 卷仍然存在。 -查看 Pod 的[稳定存储](#stable-storage),我们发现当删除 StatefulSet 的 +查看 Pod 的[稳定存储](#stable-storage),你会发现当删除 StatefulSet 的 Pod 时,挂载到 StatefulSet 的 Pod 的 PersistentVolume 卷不会被删除。 当这种删除行为是由 StatefulSet 缩容引起时也是一样的。 @@ -1802,13 +1845,12 @@ identity. 这些系统仅仅要求唯一性和身份标志。 -你可以指定 Pod 管理策略以避免这个严格的顺序; -你可以选择 [`OrderedReady`](/zh-cn/docs/concepts/workloads/controllers/statefulset/#orderedready-pod-management)(默认)或 -[`Parallel`](/zh-cn/docs/concepts/workloads/controllers/statefulset/#parallel-pod-management)。 +你可以指定 [Pod 管理策略](/zh-cn/docs/concepts/workloads/controllers/statefulset/#pod-management-policies) +以避免这个严格的顺序; +你可以选择 `OrderedReady`(默认)或 `Parallel`。 +当你的应用程序需要或期望变更(例如推出应用程序的新版本)按照 StatefulSet +提供的序号(Pod 编号)的严格顺序发生时,请使用此选项。 +换句话说,如果你已经有了 Pod `app-0`、`app-1` 和 `app-2`,Kubernetes 将首先更新 `app-0` 并检查它。 +一旦检查良好,Kubernetes 就会更新 `app-1`,最后更新 `app-2`。 + + +如果你再添加两个 Pod,Kubernetes 将设置 `app-3` 并等待其正常运行,然后再部署 `app-4`。 + +因为这是默认设置,所以你已经在练习使用它,本教程不会让你再次执行类似的步骤。 + ### Parallel Pod 管理策略 {#parallel-pod-management} -`Parallel` Pod 管理策略告诉 StatefulSet 控制器并行的终止所有 Pod, +另一种选择,`Parallel` Pod 管理策略告诉 StatefulSet 控制器并行的终止所有 Pod, 在启动或终止另一个 Pod 前,不必等待这些 Pod 变成 Running 和 Ready 或者完全终止状态。 + +`Parallel` Pod 管理选项仅影响扩缩容操作的行为。 +变更操作不受其影响;Kubernetes 仍然按顺序推出变更。 +对于本教程,应用本身非常简单:它是一个告诉你其主机名的网络服务器(因为这是一个 +StatefulSet,每个 Pod 的主机名都是不同的且可预测的)。 + {{% code_sample file="application/web/web-parallel.yaml" %}} -在另一个终端窗口创建清单中的 StatefulSet 和 Service: +在另一个终端中,重新配置 StatefulSet 以进行 `Parallel` Pod 管理: ```shell kubectl apply -f https://k8s.io/examples/application/web/web-parallel.yaml ``` ``` -service/nginx created -statefulset.apps/web created +service/nginx updated +statefulset.apps/web updated ``` -查看你在第一个终端中运行的 `kubectl get` 命令的输出。 - - -```shell -# 这应该已经处于 Running 状态 -kubectl get pod -l app=nginx --watch -``` -``` -NAME READY STATUS RESTARTS AGE -web-0 0/1 Pending 0 0s -web-0 0/1 Pending 0 0s -web-1 0/1 Pending 0 0s -web-1 0/1 Pending 0 0s -web-0 0/1 ContainerCreating 0 0s -web-1 0/1 ContainerCreating 0 0s -web-0 1/1 Running 0 10s -web-1 1/1 Running 0 10s -``` - - -StatefulSet 控制器几乎同时启动了 `web-0` 和 `web-1`。 - - -保持第二个终端打开,并在另一个终端窗口中扩容 StatefulSet: +保持你运行监视进程的终端为打开状态,并在另一个终端窗口中扩容 StatefulSet: ```shell -kubectl scale statefulset/web --replicas=4 +kubectl scale statefulset/web --replicas=5 ``` ``` statefulset.apps/web scaled ``` -在 `kubectl get` 命令运行的终端里检查它的输出。 +在 `kubectl get` 命令运行的终端里检查它的输出。它可能看起来像: ``` web-3 0/1 Pending 0 0s web-3 0/1 Pending 0 0s web-3 0/1 Pending 0 7s web-3 0/1 ContainerCreating 0 7s -web-2 1/1 Running 0 10s +web-2 0/1 Pending 0 0s +web-4 0/1 Pending 0 0s +web-2 1/1 Running 0 8s +web-4 0/1 ContainerCreating 0 4s web-3 1/1 Running 0 26s +web-4 1/1 Running 0 2s ``` -StatefulSet 启动了两个新的 Pod,而且在启动第二个之前并没有等待第一个变成 Running 和 Ready 状态。 +StatefulSet 启动了三个新的 Pod,而且在启动第二和第三个之前并没有等待第一个变成 Running 和 Ready 状态。 + + +如果你的工作负载具有有状态元素,或者需要 Pod 能够通过可预测的命名来相互识别, +特别是当你有时需要快速提供更多容量时,此方法非常有用。 +如果本教程的这个简单 Web 服务突然每分钟收到额外 1,000,000 个请求, +那么你可能会想要运行更多 Pod,但你也不想等待每个新 Pod 启动。 +并行启动额外的 Pod 可以缩短请求额外容量和使其可供使用之间的时间。 ## {{% heading "cleanup" %}} From 4888aeab4d9753ec0fcb613dd16bc8aa2fa9857c Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Wed, 15 May 2024 02:12:19 +0800 Subject: [PATCH 1037/1086] [zh-cn] sync service-accounts-admin.md Signed-off-by: xin.li --- .../service-accounts-admin.md | 158 +++++++++++++++++- 1 file changed, 155 insertions(+), 3 deletions(-) diff --git a/content/zh-cn/docs/reference/access-authn-authz/service-accounts-admin.md b/content/zh-cn/docs/reference/access-authn-authz/service-accounts-admin.md index 3d196833cd..2c5b8d53ba 100644 --- a/content/zh-cn/docs/reference/access-authn-authz/service-accounts-admin.md +++ b/content/zh-cn/docs/reference/access-authn-authz/service-accounts-admin.md @@ -106,12 +106,164 @@ Kubernetes 区分用户账号和服务账号的概念,主要基于以下原因 - 针对复杂系统的配置包可能包含系统组件相关的各种服务账号的定义。 因为服务账号的创建约束不多并且有名字空间域的名称,所以这种配置通常是轻量的。 + +## 绑定的服务账户令牌 {#bound-service-account-tokens} + + +ServiceAccount 令牌可以被绑定到 kube-apiserver 中存在的 API 对象。 +这可用于将令牌的有效性与另一个 API 对象的存在与否关联起来。 +支持的对象类型如下: + +* Pod(用于投射卷的挂载,见下文) +* Secret(可用于允许通过删除 Secret 来撤销令牌) +* 节点(在 v1.30 中,创建新的节点绑定令牌是 Alpha 特性,使用现有的节点绑定特性是 Beta 特性) + + +当将令牌绑定到某对象时,该对象的 `metadata.name` 和 `metadata.uid` +将作为额外的“私有声明”存储在所发布的 JWT 中。 + +当将被绑定的令牌提供给 kube-apiserver 时,服务帐户身份认证组件将提取并验证这些声明。 +如果所引用的对象不再存在(或其 `metadata.uid` 不匹配),则请求将无法通过认证。 + + +### Pod 绑定令牌中的附加元数据 {#additional-metadata-in-pod-bound-tokens} + +{{< feature-state feature_gate_name="ServiceAccountTokenPodNodeInfo" >}} + + +当服务帐户令牌被绑定到某 Pod 对象时,一些额外的元数据也会被嵌入到令牌中, +包括所绑定 Pod 的 `spec.nodeName` 字段的值以及该节点的 uid(如果可用)。 + +当使用令牌进行身份认证时,kube-apiserver **不会**检查此节点信息的合法性。 +由于节点信息被包含在令牌内,所以集成商在检查 JWT 时不必获取 Pod 或 Node API 对象来检查所关联的 Node 名称和 uid。 + + +### 查验和检视私有声明 {#verifying-and-inspecting-private-claims} + +`TokenReview` API 可用于校验并从令牌中提取私有声明: + + +1. 首先,假设你有一个名为 `test-pod` 的 Pod 和一个名为 `my-sa` 的服务帐户。 +2. 创建绑定到此 Pod 的令牌: + +```shell +kubectl create token my-sa --bound-object-kind="Pod" --bound-object-name="test-pod" +``` + + +3. 将此令牌复制到名为 `tokenreview.yaml` 的新文件中: + +```yaml +apiVersion: authentication.k8s.io/v1 +kind: TokenReview +spec: + token: <来自第二步的令牌内容> +``` + + +4. 将此资源提交给 API 服务器进行审核: + + +```shell +kubectl create -o yaml -f tokenreview.yaml # 我们使用 '-o yaml' 以便检视命令输出 +``` + + +你应该看到如下所示的输出: + +```yaml +apiVersion: authentication.k8s.io/v1 +kind: TokenReview +metadata: + creationTimestamp: null +spec: + token: +status: + audiences: + - https://kubernetes.default.svc.cluster.local + authenticated: true + user: + extra: + authentication.kubernetes.io/credential-id: + - JTI=7ee52be0-9045-4653-aa5e-0da57b8dccdc + authentication.kubernetes.io/node-name: + - kind-control-plane + authentication.kubernetes.io/node-uid: + - 497e9d9a-47aa-4930-b0f6-9f2fb574c8c6 + authentication.kubernetes.io/pod-name: + - test-pod + authentication.kubernetes.io/pod-uid: + - e87dbbd6-3d7e-45db-aafb-72b24627dff5 + groups: + - system:serviceaccounts + - system:serviceaccounts:default + - system:authenticated + uid: f8b4161b-2e2b-11e9-86b7-2afc33b31a7e + username: system:serviceaccount:default:my-sa +``` + +{{< note >}} + +尽管你使用了 `kubectl create -f` 来创建此资源,并与 Kubernetes +中的其他资源类型类似的方式定义它,但 TokenReview 是一种特殊类别, +kube-apiserver 实际上并不将 TokenReview 对象持久保存到 etcd 中。 +因此 `kubectl get tokenreview` 不是一个有效的命令。 +{{< /note >}} + ## 绑定的服务账号令牌卷机制 {#bound-service-account-token-volume} -{{< feature-state for_k8s_version="v1.22" state="stable" >}} +{{< feature-state feature_gate_name="BoundServiceAccountTokenVolume" >}} ### 传统 ServiceAccount 令牌追踪控制器 -{{< feature-state for_k8s_version="v1.28" state="stable" >}} +{{< feature-state feature_gate_name="LegacyServiceAccountTokenTracking" >}} ### 传统 ServiceAccount 令牌清理器 -{{< feature-state for_k8s_version="v1.29" state="beta" >}} +{{< feature-state feature_gate_name="LegacyServiceAccountTokenCleanUp" >}} 下面是一些设备插件实现的示例: +* [Akri](https://github.com/project-akri/akri),它可以让你轻松公开异构叶子设备(例如 IP 摄像机和 USB 设备)。 * [AMD GPU 设备插件](https://github.com/ROCm/k8s-device-plugin) * 适用于通用 Linux 设备和 USB 设备的[通用设备插件](https://github.com/squat/generic-device-plugin) * [Intel 设备插件](https://github.com/intel/intel-device-plugins-for-kubernetes)支持 diff --git a/content/zh-cn/docs/concepts/workloads/pods/disruptions.md b/content/zh-cn/docs/concepts/workloads/pods/disruptions.md index b11b27e449..4859a98adf 100644 --- a/content/zh-cn/docs/concepts/workloads/pods/disruptions.md +++ b/content/zh-cn/docs/concepts/workloads/pods/disruptions.md @@ -92,8 +92,7 @@ Cluster administrator actions include: - [Draining a node](/docs/tasks/administer-cluster/safely-drain-node/) for repair or upgrade. - Draining a node from a cluster to scale the cluster down (learn about -[Cluster Autoscaling](https://github.com/kubernetes/autoscaler/#readme) -). +[Cluster Autoscaling](https://github.com/kubernetes/autoscaler/#readme)). - Removing a pod from a node to permit something else to fit on that node. --> 集群管理员操作包括: From e823cf9e5cc181e7167d9231e3a68d08b117de0f Mon Sep 17 00:00:00 2001 From: Sohan Kunkerkar Date: Mon, 13 May 2024 12:17:14 -0400 Subject: [PATCH 1039/1086] Fix drop-in dir logic explaination Signed-off-by: Sohan Kunkerkar --- .../docs/tasks/administer-cluster/kubelet-config-file.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/content/en/docs/tasks/administer-cluster/kubelet-config-file.md b/content/en/docs/tasks/administer-cluster/kubelet-config-file.md index dcf0828c42..2353a2d966 100644 --- a/content/en/docs/tasks/administer-cluster/kubelet-config-file.md +++ b/content/en/docs/tasks/administer-cluster/kubelet-config-file.md @@ -115,11 +115,10 @@ The suffix of a valid kubelet drop-in configuration file **must** be `.conf`. Fo The kubelet processes files in its config drop-in directory by sorting the **entire file name** alphanumerically. For instance, `00-kubelet.conf` is processed first, and then overridden with a file named `01-kubelet.conf`. -These files may contain partial configurations and might not be valid config files by themselves. -Validation is only performed on the final resulting configuration structure -stored internally in the kubelet. -This offers you flexibility in how you manage and combine kubelet configuration that comes from different sources. -However, it's important to note that the behavior varies based on the data type of the configuration fields. +These files may contain partial configurations but should not be invalid and must include type metadata, specifically `apiVersion` and `kind`. +Validation is only performed on the final resulting configuration structure stored internally in the kubelet. +This offers flexibility in managing and merging kubelet configurations from different sources while preventing undesirable configurations. +However, it is important to note that behavior varies based on the data type of the configuration fields. Different data types in the kubelet configuration structure merge differently. See the [reference document](/docs/reference/node/kubelet-config-directory-merging.md) From add8b37790d228625b675b4de73ba07daa408f45 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Sat, 11 May 2024 20:51:37 +0100 Subject: [PATCH 1040/1086] Warn on use of (deprecated) param shortcode --- layouts/shortcodes/param.html | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/layouts/shortcodes/param.html b/layouts/shortcodes/param.html index 499251b981..f7691c78be 100644 --- a/layouts/shortcodes/param.html +++ b/layouts/shortcodes/param.html @@ -1 +1,13 @@ -{{- .Page.Param (.Get 0) -}} \ No newline at end of file +{{- $name := (.Get 0) -}} +{{- with $name -}} +{{- with ($.Page.Param .) }}{{ . }}{{ else }}{{ errorf "Param %q not found: %s" $name $.Position }}{{ end -}} +{{- else }}{{ errorf "Missing param key: %s" $.Position }}{{ end -}} +{{- with $.Page.File.Filename -}} +{{- $warningText := slice + "Deprecated param shortcode detected." + "The Kubernetes website does not / should not use param shortcodes." + ( printf "Check %q" ( replaceRE "^/src/" "" . ) ) -}} + {{- if and (eq $.Site.LanguagePrefix "") (ne $name "version" ) -}} + {{- warnf (delimit $warningText " " ) -}} + {{- end -}} +{{- end -}} From 2dcd4a4c610cb1b3522a9b5027e37f8a6b8e6d3e Mon Sep 17 00:00:00 2001 From: Ricardo Amaro Date: Wed, 15 May 2024 21:42:19 +0100 Subject: [PATCH 1041/1086] article mirrored --- ...4-04-28-contribute-as-sig-docs-reviewer.md | 101 +++++++++--------- 1 file changed, 53 insertions(+), 48 deletions(-) diff --git a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md index e65c32f18d..ee29f012f8 100644 --- a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md +++ b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md @@ -1,71 +1,70 @@ --- layout: blog title: "From Code to Quill: Embark on a Legendary Kubernetes Quest with SIG Docs" -date: 2024-04-28 +date: 2024-05-16 slug: contribute-as-sig-docs-reviewer -author: > - Ricardo Amaro (Acquia) +author: "Ricardo Amaro (Acquia)" --- -You've probably come across the saying, "Contributing doesn't always mean writing lines of code" -whispered to the wind or glimpsed in the margins of a sacred open-source tome. -What is the truth behind this tale as old as time (or at least as old as Kubernetes itself)? +You've likely heard the adage, "Contributing isn't just about writing code", +whispered in forums or seen etched into the digital walls of open source communities. +But what depth of truth lies within this ancient wisdom, especially in the vast, +evolving world of Kubernetes? -Imagine Sarah: an enthusiast of open-source whose keyboard had seen more action crafting -technical masterpieces for her projects than a knight's sword in battle. Sarah's had such -a smooth relationship with Git, that she could `git commit` and `git push` in her sleep, -and her etiquette in pull requests was so polished, it could make a silver spoon look tarnished. +Today, contributing to open source extends far beyond the realm of coding. +It's an inclusive journey that welcomes the diverse skills of all who wish +to be a part of it. Whether you're a seasoned developer or someone whose strengths +lie outside traditional programming, your contributions hold immense value. -But here's the twist: when it came to the mysterious _art-of-coding_, Sarah felt more -like a fish out of water — or more accurately, like trying to navigate a Kubernetes cluster -with a compass and a star map. The very thought of diving into the codebase made her feel like -she was trying to read ancient hieroglyphs without a Rosetta Stone. +Imagine yourself embarking on a journey that leverages your expertise and love +for free software to enhance your capabilities and strengthen the very foundation +of the Kubernetes ecosystem. This is a real opportunity for you to shine, to make +an indelible mark on a project that powers some of the most critical infrastructure +in the world today. -Did Sarah let this stop her? Not at all. She discovered a path as impactful as a well-placed -line of code: joining the Special Interest Group (SIG) Docs team. It was there that Sarah found her true calling, -helping transform the dense field of Kubernetes documentation into a well-tended garden of knowledge. +Your journey begins with a single step: joining the Special Interest Group (SIG) Docs. +Here, your talent for articulating complex concepts, your keen eye for detail, +and your unwavering commitment to clarity become your most powerful tools. As a contributor, +you can transform dense technical landscapes into navigable pathways, making Kubernetes +accessible to all. -Sarah's odyssey from a mere mortal Kubernetes user to a demigod of documentation didn't -just prove that contributions of knowledge and expertise are as valuable as code -contributions—it also showed that you don't need to be a coding wizard to make a significant -impact. Her journey is a beacon of hope for all who fear the merge conflict, a testament -to the power of the written word in the realm of open-source. +This is your call to adventure, an invitation to expand beyond the familiar territories +of code and into the rich, uncharted domains of documentation and collaboration, +empowering a global community of users and contributors. -So, let Sarah's story inspire you. No matter if you're a code ninja or a prose maestro, -there's a place for you in the open-source pantheon. And who knows? Maybe one day, -your documentation will be the guiding light for a lost soul in the Kubernetes sea, -making you the unsung hero of their open-source odyssey. +## Why become a SIG Docs reviewer? -## Why Become a SIG Docs Reviewer? - -The Kubernetes project depends substantially on SIG Docs to ensure that documentation +The Kubernetes project depends substantially on the SIG Docs to ensure that documentation is accurate, up to date, and easily accessible. By becoming a reviewer, you can help users and contributors navigate and understand Kubernetes more effectively. In addition, reviewing -documentation provides unique opportunities to: +documentation provides unique opportunities for: -- **Expand your Kubernetes knowledge**: Engage deeply with new features and functionalities +- **Expanding your Kubernetes knowledge**: Engage deeply with new features and functionalities by reviewing their documentation. -- **Improve your technical writing skills**: Develop an eye for detail and clarity in technical +- **Improving your technical writing skills**: Develop an eye for detail and clarity in technical writing. -- **Strengthen the Kubernetes community**: Help maintain the high quality of Kubernetes +- **Strengthening the Kubernetes community**: Help maintain the high quality of Kubernetes documentation, supporting both new and experienced users. -- **Build your network**: Expanding your professional network, and getting together with +- **Building your network**: Expanding your professional network, and getting together with contributors from around the globe. -## Who Are We Looking For? +## Who are we looking for? -We're seeking open-source enthusiasts with: +We're seeking open source enthusiasts with: -- Experience with Git and GitHub, comfortable with the process of reviewing pull requests +- Experience of Git and GitHub, comfortable with the process of reviewing pull requests and providing constructive feedback. - Familiarity with Markdown and documentation frameworks (Hugo experience is a plus but not required). - A passion for making complex technical concepts understandable and accessible. -Prior experience in technical writing or documentation review in any open-source project -will be beneficial but not mandatory. +Experience in technical writing or documentation review in open source projects is beneficial, +but not mandatory. Kubernetes experience is welcome at all levels. Those less familiar +with Kubernetes or containers can provide valuable fresh perspectives for beginners accessibility. +We value diversity of experiences and the fresh eyes you can provide to make sure our content +is clear and understandable for everyone. -## How to Get Started +## How to get started Becoming a SIG Docs reviewer is a journey that starts with familiarizing yourself with the Kubernetes documentation contribution process. Here are the steps to get you started: @@ -82,7 +81,7 @@ Kubernetes documentation contribution process. Here are the steps to get you sta `good first issue` or `help wanted`. These are great for beginners. Leave constructive feedback and suggestions. Familiarize yourself with the [content guide](/docs/contribute/style/content-guide/) and the - [style guide](/docs/contribute/style/style-guide/) to provide more effective + [style guide](/docs/contribute/style/style-guide/) to provide more effectively [reviewing Pull Requests](/docs/contribute/review/reviewing-prs/). 1. **Attend SIG Docs Meetings**: Participate in the @@ -90,18 +89,24 @@ Kubernetes documentation contribution process. Here are the steps to get you sta meetings are an excellent opportunity to meet fellow contributors, discuss documentation improvements, and volunteer for reviewing tasks. -1. **Shadow an Experienced Reviewer**: If possible, shadow an - [experienced reviewer](/docs/contribute/participate/roles-and-responsibilities/) - to learn best practices and tips for reviewing efficiently and effectively. +1. **Shadow an Experienced Reviewer**: To better understand the review process, sign up for our official + [PR Wrangling shadow program](/docs/contribute/participate/pr-wranglers/#pr-wrangler-shadow-program) + where you will be able to shadow an [experienced reviewer](/docs/contribute/participate/roles-and-responsibilities/) + and learn best practices and tips for reviewing efficiently and effectively. -## What's Next? +1. **Contributor Ladder**: Familiarize yourself with the + [CNCF contributor ladder](https://github.com/cncf/project-template/blob/main/CONTRIBUTOR_LADDER.md), + which guides your progression from newcomer to advanced contributor roles in the Kubernetes community. + +## What's next? After consistently contributing to documentation reviews and demonstrating your understanding of Kubernetes documentation standards, you can express your interest in becoming an official -SIG Docs reviewer. As you build up this skill set, reviews are still welcome! You don't need to be a formal reviewer in the SIG to leave reviews on PRs or blog posts. Engage with the SIG Docs chairs or leads on Slack or during SIG Docs -meetings to discuss the next steps. +SIG Docs reviewer. Engage with the SIG Docs chairs or leads on the +[public Slack channel](https://kubernetes.slack.com/channels/C1J0BPD2M) +or during SIG Docs meetings to discuss the next steps. -## See YOU in the Docs! +## See _you_ in the docs! Becoming a SIG Docs reviewer is more than contributing; it's embracing the heart of the Kubernetes community 🚀. Enhance your knowledge and writing skills while contributing From 52ebe0472501fcd51ab84e071ac46f2ebca4a585 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Thu, 16 May 2024 00:58:12 +0100 Subject: [PATCH 1042/1086] Add canonicalUrl field Co-authored-by: Dipesh Rawat --- .../en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md index ee29f012f8..09d19993df 100644 --- a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md +++ b/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md @@ -3,6 +3,7 @@ layout: blog title: "From Code to Quill: Embark on a Legendary Kubernetes Quest with SIG Docs" date: 2024-05-16 slug: contribute-as-sig-docs-reviewer +canonicalUrl: https://www.kubernetes.dev/blog/2024/05/16/contribute-as-sig-docs-reviewer/ author: "Ricardo Amaro (Acquia)" --- From 31151ea780d7e88e5cd06bcbd8252fc6cc51b4ef Mon Sep 17 00:00:00 2001 From: windsonsea Date: Thu, 16 May 2024 10:23:44 +0800 Subject: [PATCH 1043/1086] [zh] Localize 2024-04-28-contribute-as-sig-docs-reviewer.md --- ...4-04-28-contribute-as-sig-docs-reviewer.md | 220 ++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 content/zh-cn/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md diff --git a/content/zh-cn/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md b/content/zh-cn/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md new file mode 100644 index 0000000000..39d4dcf34c --- /dev/null +++ b/content/zh-cn/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md @@ -0,0 +1,220 @@ +--- +layout: blog +title: "从敲代码到抒发文笔:与 SIG Docs 一起踏上传奇的 Kubernetes 探险之旅" +date: 2024-05-16 +slug: contribute-as-sig-docs-reviewer +canonicalUrl: https://www.kubernetes.dev/blog/2024/05/16/contribute-as-sig-docs-reviewer/ +author: "Ricardo Amaro (Acquia)" +translator: "Michael Yao (DaoCloud)" +--- + + + +你可能在论坛中听过或在开源社区的数字墙上见过这么一句格言:“做贡献不仅仅是写代码”。 +特别是在这个广阔、不断发展的 Kubernetes 社区中,这句古老的智慧格言真正意味着什么呢? + +如今,为开源做贡献远远超出了敲代码的范畴。 +做贡献是一段内涵丰富的旅程,我们欢迎所有有志之士展露自己的各类技能。 +不论你是经验丰富的开发者,还是在传统编程之外拥有特长的人,你的贡献都有很大价值。 + + +想象一下,踏上一段这样的旅程,既能充分发挥你的专业知识,又能尽情抒展你对自由软件的热爱, +在这个贡献过程中既增强了你的能力,又巩固了 Kubernetes 生态体系的基础。 +这是一个让你闪耀光芒的真正机遇,能够让你在支撑当今世界某些最关键基础设施的项目上留下不可磨灭的印记。 + + +你的旅程始于简单的一步:加入特别兴趣小组 (SIG) Docs。 +在这个小组,你对复杂概念的表达能力、对细节的敏锐眼光以及对清晰易懂的不懈追求将成为你最强大的工具。 +作为一名贡献者,你将从密集复杂的技术内容中找出一条易于上手的路径,让大众都能使用 Kubernetes。 + + +这是一次有关冒险的召唤,一份超越代码领域的邀请,指引你踏入文档创作与社区协作的未知境地。 +在这里,你将为全球用户和贡献者组成的社区赋能,点亮他们前行的道路。 + + +## 为什么要成为 SIG Docs Reviewer? {#why-become-a-sig-docs-reviewer} + +Kubernetes 项目在很大程度上依赖于 SIG Docs 小组成员们确保文档准确无误、与时俱进、好用易懂。 +你成为 Reviewer 后,就可以帮助用户和贡献者们更有效地探索和学习 Kubernetes。 +此外,你在评审文档时还将收获一些独特的机会: + + +- **拓展你的 Kubernetes 知识**:通过评审文档深入了解新的功能特性。 +- **提高你的技术写作技巧**:培养技术写作中注重细节和清晰阐述的能力。 +- **巩固 Kubernetes 社区**:帮助维护优质的 Kubernetes 文档,方便新老用户查阅。 +- **建立你的人脉**:拓展你的专业人际网络,认识来自全球的贡献者。 + + +## 我们在寻找什么样的人? {#who-are-we-looking-for} + +我们正在寻找对开源充满热情且具备以下能力的人士: + + +- 拥有 Git 和 GitHub 的经验,熟悉评审 PR 的流程,并能提供建设性的反馈。 +- 熟悉 Markdown 和文档框架(有 Hugo 经验是加分项,但不是必需的)。 +- 热衷于让复杂的技术概念变得易懂好用。 + + +在开源项目中有技术写作或文档评审经验是加分项,但并非必需。我们欢迎对 Kubernetes 有各种经验的贡献者。 +那些对 Kubernetes 或容器不太熟悉的新人,可以为初学者提供宝贵的全新视角。 +我们重视多样化的经验和新视角,以确保我们的文档内容对每个人都清晰易懂。 + + +## 如何开始 {#how-to-get-started} + +成为 SIG Docs Reviewer 是一段从熟悉 Kubernetes 文档贡献流程开始的旅程。以下是入门步骤: + + +1. **熟悉 SIG Docs**:首先阅读 [SIG Docs 贡献者指南](/zh-cn/docs/contribute/),了解如何做文档贡献。 + +2. **加入 Kubernetes Slack**:在 [#sig-docs 频道](https://kubernetes.slack.com/messages/sig-docs)与 + SIG Docs 社区建立联系。Slack 是一个提问、寻求指教和了解社区的好地方。 + + +3. **开始评审 PR**:查找打了 `good first issue` 或 `help wanted` 标签的开放 PR。 + 这些 PR 对 Reviewer 新手来说是很好的选择。你可以在其中留下建设性的反馈和建议。 + 你还要熟悉[内容指南](/zh-cn/docs/contribute/style/content-guide/)和[样式指南](/zh-cn/docs/contribute/style/style-guide/), + 以便更有效地[评审 PR](/zh-cn/docs/contribute/review/reviewing-prs/)。 + + +4. **参加 SIG Docs 会议**:参与 [SIG Docs 会议](https://github.com/kubernetes/community/tree/master/sig-docs)。 + 这些会议是结识其他贡献者、讨论文档改进和志愿评审任务的绝佳机会。 + + +5. **成为资深 Reviewer 的影子**:若想更好地理解评审过程,请报名参加我们的 + [PR 管理影子计划](/zh-cn/docs/contribute/participate/pr-wranglers/#pr-wrangler-shadow-program), + 你将能够成为[资深 Reviewer](/zh-cn/docs/contribute/participate/roles-and-responsibilities/)的影子, + 学习高效和有效评审的良好实践和技巧。 + + +6. **贡献者阶梯**:熟悉 [CNCF 贡献者阶梯](https://github.com/cncf/project-template/blob/main/CONTRIBUTOR_LADDER.md), + 这能帮助你从新手进阶为 Kubernetes 社区中高级贡献者角色。 + + +## 接下来 {#whats-next} + +在文档评审方面持续贡献并展示你对 Kubernetes 文档标准的理解后,你可以表达成为正式 SIG Docs Reviewer 的兴趣。 +你可以在[公共 Slack 频道](https://kubernetes.slack.com/channels/C1J0BPD2M)或 SIG Docs 会议期间与 +SIG Docs Chair 或 Lead 讨论后续步骤。 + + +## 希望在文档中看到**你的名字**! {#see-you-in-the-docs} + +成为 SIG Docs Reviewer 不仅仅是做贡献;这说明你已进入 Kubernetes 社区的核心 🚀。 +你在为宝贵文档做贡献的同时也能提升自己的理论知识和写作技巧。 +这是你用自己的专业知识指导他人并产生持久影响的机会。 +欢迎你加入团队,我们在 SIG Docs 不见不散!🌟 From e0980951248a5561a499b5b586cb3e8c4ae4ad7a Mon Sep 17 00:00:00 2001 From: lbzs <627062293@qq.com> Date: Wed, 15 May 2024 10:59:57 +0800 Subject: [PATCH 1044/1086] [zh-cn] Localize docs/concepts/security/hardening-guide/authentication-mechanisms.md --- .../authentication-mechanisms.md | 332 ++++++++++++++++++ 1 file changed, 332 insertions(+) create mode 100644 content/zh-cn/docs/concepts/security/hardening-guide/authentication-mechanisms.md diff --git a/content/zh-cn/docs/concepts/security/hardening-guide/authentication-mechanisms.md b/content/zh-cn/docs/concepts/security/hardening-guide/authentication-mechanisms.md new file mode 100644 index 0000000000..98b24c95d6 --- /dev/null +++ b/content/zh-cn/docs/concepts/security/hardening-guide/authentication-mechanisms.md @@ -0,0 +1,332 @@ +--- +title: 加固指南 - 身份认证机制 +description: > + 有关 Kubernetes 中的认证选项及其安全属性的信息。 +content_type: concept +weight: 90 +--- + + + + + +选择合适的身份认证机制是确保集群安全的一个重要方面。 +Kubernetes 提供了多种内置机制, +当为你的集群选择最好的身份认证机制时需要谨慎考虑每种机制的优缺点。 + + +通常情况下,建议启用尽可能少的身份认证机制, +以简化用户管理,避免用户仍保有对其不再需要的集群的访问权限的情况。 + + +值得注意的是 Kubernetes 集群中并没有内置的用户数据库。 +相反,它从已配置的身份认证系统中获取用户信息并依之做出鉴权决策。 +因此,要审计用户访问,你需要检视来自每个已配置身份认证数据源的凭据。 + + +对于有多个用户直接访问 Kubernetes API 的生产集群来说, +建议使用外部身份认证数据源,例如:OIDC。 +下文提到的客户端证书和服务账号令牌等内部身份认证机制则不适用这种情况。 + + + + +## X.509 客户端证书身份认证 {#x509-client-certificate-authentication} + + +Kubernetes 采用 [X.509 客户端证书](/zh-cn/docs/reference/access-authn-authz/authentication/#x509-client-certificates) +对系统组件进行身份认证, +例如 Kubelet 对 API 服务器进行身份认证时。 +虽然这种机制也可以用于用户身份认证,但由于一些限制它可能不太适合在生产中使用: + + + +- 客户端证书无法独立撤销。 + 证书一旦被泄露,攻击者就可以使用它,直到证书过期。 + 为了降低这种风险,建议为使用客户端证书创建的用户身份认证凭据配置较短的有效期。 + +- 如果证书需要被作废,必须重新为证书机构设置密钥,但这样做可能给集群带来可用性风险。 + +- 在集群中创建的客户端证书不会被永久记录。 + 因此,如果你要跟踪所有已签发的证书,就必须将它们记录下来。 + +- 用于对客户端证书进行身份认证的私钥不可以启用密码保护。 + 任何可以读取包含密钥文件的人都可以利用该密钥。 + +- 使用客户端证书身份认证需要客户端直连 API 服务器而不允许中间存在 TLS 终止节点, + 这一约束可能会使网络架构变得复杂。 + +- 组数据包含在客户端证书的 `O` 值中, + 这意味着在证书有效期内无法更改用户的组成员身份。 + + +## 静态令牌文件 {#static-token-file} + + +尽管 Kubernetes 允许你从控制平面节点的磁盘中加载 +[静态令牌文件](/zh-cn/docs/reference/access-authn-authz/authentication/#static-token-file) +以获取凭据,但由于多种原因,在生产服务器上不建议采用这种方法: + + +- 凭据以明文的方式存储在控制平面节点的磁盘中,这可能是一种安全风险。 + +- 修改任何凭据都需要重启 API 服务进程使其生效,这会影响可用性。 + +- 没有现成的机制让用户轮换其凭据数据。 + 要轮换凭据数据,集群管理员必须修改磁盘上的令牌并将其分发给用户。 + +- 没有合适的锁机制用以防止暴力破解攻击。 + + +## 启动引导令牌 {#bootstrap-tokens} + + +[启动引导令牌](/zh-cn/docs/reference/access-authn-authz/bootstrap-tokens/)用于节点加入集群, +因为下列的一些原因,不建议用于用户身份认证: + + +- 启动引导令牌中包含有硬编码的组成员身份,不适合一般使用, + 因此不适用于身份认证目的。 + +- 手动生成启动引导令牌有可能使较弱的令牌容易被攻击者猜到, + 有可能成为安全隐患。 + +- 没有现成的加锁定机制用来防止暴力破解, + 这使得攻击者更容易猜测或破解令牌。 + + +## 服务账号令牌 {#serviceaccount-secret-tokens} + + +[服务账号令牌](/zh-cn/docs/reference/access-authn-authz/service-accounts-admin/#manual-secret-management-for-serviceaccounts) +在运行于集群中的工作负载向 API 服务器进行身份认证时是个可选项。 +在 Kubernetes < 1.23 的版本中,服务账号令牌是默认选项,但现在已经被 TokenRequest API 取代。 +尽管这些密钥可以用于用户身份认证,但由于多种原因,它们通常并不合适: + + +- 服务账号令牌无法设置有效期,在相关的服务账号被删除前一直有效。 + +- 任何集群用户,只要能读取服务账号令牌定义所在的命名空间中的 Secret,就能看到身份认证令牌。 + +- 服务账号无法被添加到任意组中,这一限制使得使用服务账号的 RBAC 管理变得复杂。 + + +## TokenRequest API 令牌 {#tokenrequest-api-tokens} + + +TokenRequest API 是一种可生成短期凭据的有用工具,所生成的凭据可 +用于对 API 服务器或第三方系统执行服务身份认证。 +然而,通常不建议将此机制用于用户身份认证,因为没有办法撤销这些令牌, +而且,如何以安全的方式向用户分发凭据信息也是挑战。 + + +当使用 TokenRequest 令牌进行服务身份认证时, +建议使用较短的有效期以减少被泄露令牌可能带来的影响。 + + +## OpenID Connect 令牌身份认证 {#openid-connect-token-authentication} + + +Kubernetes 支持使用 [OpenID Connect (OIDC)](/zh-cn/docs/reference/access-authn-authz/authentication/#openid-connect-tokens) +将外部身份认证服务与 Kubernetes API 集成。 +有多种软件可用于将 Kubernetes 与认证服务组件集成。 +不过,当为 Kubernetes 使用 OIDC 身份认证时, +必须考虑以下加固措施: + + +- 安装在集群中用于支持 OIDC 身份认证的软件应该与普通的工作负载隔离, + 因为它要以较高的特权来运行。 + +- 有些 Kubernetes 托管服务对可使用的 OIDC 服务组件有限制。 + +- 与 TokenRequest 令牌一样,OIDC 令牌的有效期也应较短,以减少被泄露的令牌所带来的影响。 + + +## Webhook 令牌身份认证 {#webhook-token-authentication} + + +[Webhook 令牌身份认证](/zh-cn/docs/reference/access-authn-authz/authentication/#webhook-token-authentication) +是另一种集成外部身份认证服务组件到 Kubernetes 中的可选项。 +这种机制允许通过 Webhook 的方式连接集群内部或外部运行的身份认证服务, +以做出身份认证决策。值得注意的是, +这种机制的适用性可能更取决于身份认证服务所使用的软件, +而且还需要考虑一些特定于 Kubernetes 的因素。 + + +要配置 Webhook 身份认证的前提是需要提供控制平面服务器文件系统的访问权限。 +这意味着托管的 Kubernetes 无法实现这一点,除非供应商特别提供。 +此外,集群中安装的任何支持该访问的软件都应当与普通工作负载隔离, +因为它需要以较高的特权来运行。 + + +## 身份认证代理 {#authenticating-proxy} + + +将外部身份认证系统集成到 Kubernetes 的另一种方式是使用 +[身份认证代理](/zh-cn/docs/reference/access-authn-authz/authentication/#authenticating-proxy)。 +在这种机制下,Kubernetes 接收到来自代理的请求,这些请求会携带特定的标头, +标明为鉴权目的所赋予的用户名和组成员身份。 +值得注意的是,在使用这种机制时有一些特定的注意事项。 + + +首先,在代理和 Kubernetes API 服务器间必须以安全的方式配置 TLS 连接, +从而降低流量劫持或嗅探攻击的风险。 +TLS 连接可以确保代理和 Kubernetes API 服务器间的通信是安全的。 + + +其次,需要注意的是,能够修改表头的攻击者可能会在未经授权的情况下访问 Kubernetes 资源。 +因此,确保标头得到妥善保护并且不会被篡改非常重要。 \ No newline at end of file From 185bb4ab5266d315d7cb59c04b7006735afd13da Mon Sep 17 00:00:00 2001 From: pranav-pandey0804 Date: Thu, 16 May 2024 13:12:52 +0530 Subject: [PATCH 1045/1086] Changed term-id from cri to container-runtime-interface --- .../docs/reference/instrumentation/cri-pod-container-metrics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/reference/instrumentation/cri-pod-container-metrics.md b/content/en/docs/reference/instrumentation/cri-pod-container-metrics.md index c526d4b20e..80488452bf 100644 --- a/content/en/docs/reference/instrumentation/cri-pod-container-metrics.md +++ b/content/en/docs/reference/instrumentation/cri-pod-container-metrics.md @@ -14,7 +14,7 @@ description: >- The [kubelet](/docs/reference/command-line-tools-reference/kubelet/) collects pod and container metrics via [cAdvisor](https://github.com/google/cadvisor). As an alpha feature, Kubernetes lets you configure the collection of pod and container -metrics via the {{< glossary_tooltip term_id="cri" text="Container Runtime Interface">}} (CRI). You +metrics via the {{< glossary_tooltip term_id="container-runtime-interface" text="Container Runtime Interface">}} (CRI). You must enable the `PodAndContainerStatsFromCRI` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) and use a compatible CRI implementation (containerd >= 1.6.0, CRI-O >= 1.23.0) to use the CRI based collection mechanism. From 9e6ae2ba530f7e814ecd0bc08c27d8bd9860ff14 Mon Sep 17 00:00:00 2001 From: Mo Khan Date: Thu, 16 May 2024 06:34:07 -0400 Subject: [PATCH 1046/1086] Fix CA in authentication example --- .../2024-04-25-structured-authentication-configuration-beta.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2024-04-25-structured-authentication-configuration-beta.md b/content/en/blog/_posts/2024-04-25-structured-authentication-configuration-beta.md index 47f5337577..46ae03b05d 100644 --- a/content/en/blog/_posts/2024-04-25-structured-authentication-configuration-beta.md +++ b/content/en/blog/_posts/2024-04-25-structured-authentication-configuration-beta.md @@ -172,7 +172,7 @@ jwt: url: https://issuer.example.com audiences: - example-client-id - certificateAuthority: + certificateAuthority: claimMappings: username: claim: username From f689d64de6bb32415e44ef0ce12cb8189a00ec65 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Wed, 15 May 2024 21:47:10 +0800 Subject: [PATCH 1047/1086] [zh-cn] sync apparmor.md Signed-off-by: xin.li --- .../zh-cn/docs/tutorials/security/apparmor.md | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/content/zh-cn/docs/tutorials/security/apparmor.md b/content/zh-cn/docs/tutorials/security/apparmor.md index f13cdb16bc..b5f6ee43ff 100644 --- a/content/zh-cn/docs/tutorials/security/apparmor.md +++ b/content/zh-cn/docs/tutorials/security/apparmor.md @@ -71,7 +71,7 @@ AppArmor 是一个可选的内核模块和 Kubernetes 特性,因此请在继 kubelet 会先验证主机上是否已启用 AppArmor,然后再接纳显式配置了 AppArmor 的 Pod。 `type` **(必需)** - 指示将应用哪种 AppArmor 配置文件。有效选项是: - - `Localhost` - 节点上预加载的配置文件(由 `localhostProfile` 指定)。 - - `RuntimeDefault` - 容器运行时的默认配置文件。 - - `Unconfined` - 没有 AppArmor 强制执行。 + +`Localhost` +: 节点上预加载的配置文件(由 `localhostProfile` 指定)。 + +`RuntimeDefault` +: 容器运行时的默认配置文件。 + +`Unconfined` +: 不强制执行 AppArmor。 API 优先级与公平性(APF)特性由命令行标志控制,默认情况下启用。 有关可用 kube-apiserver 命令行参数以及如何启用和禁用的说明, @@ -101,6 +102,13 @@ APF 的命令行参数是 "--enable-priority-and-fairness"。 (b) `v1beta3` 版本,默认被启用,在 1.29 中被弃用。 你可以通过添加以下内容来禁用 Beta 版的 `v1beta3` API 组: + ```shell kube-apiserver \ --runtime-config=flowcontrol.apiserver.k8s.io/v1beta3=false \ @@ -164,7 +172,7 @@ from succeeding. @@ -206,19 +214,19 @@ that is proportional to that estimated number. ### Execution time tweaks for watch requests API Priority and Fairness manages **watch** requests, but this involves a -couple more excursions from the baseline behavior. The first concerns -how long a **watch** request is considered to occupy its seat. Depending -on request parameters, the response to a **watch** request may or may not -begin with **create** notifications for all the relevant pre-existing -objects. API Priority and Fairness considers a **watch** request to be +couple more excursions from the baseline behavior. The first concerns +how long a **watch** request is considered to occupy its seat. Depending +on request parameters, the response to a **watch** request may or may not +begin with **create** notifications for all the relevant pre-existing +objects. API Priority and Fairness considers a **watch** request to be done with its seat once that initial burst of notifications, if any, is over. The normal notifications are sent in a concurrent burst to all -relevant **watch** response streams whenever the server is notified of an -object create/update/delete. To account for this work, API Priority +relevant **watch** response streams whenever the server is notified of an +object create/update/delete. To account for this work, API Priority and Fairness considers every write request to spend some additional -time occupying seats after the actual writing is done. The server +time occupying seats after the actual writing is done. The server estimates the number of notifications to be sent and adjusts the write request's number of seats and seat occupancy time to include this extra work. @@ -266,7 +274,7 @@ many instances should authenticate with distinct usernames @@ -365,12 +373,12 @@ nominal/assured limits were always applied without adjustment. -随机分片 | 队列数 | 1 个大象 | 4 个大象 | 16 个大象 +随机分片 | 队列数 | 1 头大象 | 4 头大象 | 16 头大象 |----------|-----------|------------|----------------|--------------------| | 12 | 32 | 4.428838398950118e-09 | 0.11431348830099144 | 0.9935089607656024 | | 10 | 32 | 1.550093439632541e-08 | 0.0626479840223545 | 0.9753101519027554 | @@ -512,7 +520,7 @@ with the highest `matchingPrecedence`. If multiple FlowSchemas with equal smaller `name` will win, but it's better not to rely on this, and instead to ensure that no two FlowSchemas have the same `matchingPrecedence`. --> -对一个请求来说,只有首个匹配的 FlowSchema 才有意义。 +对一个请求来说,只有首个匹配的 FlowSchema 才有意义。 如果一个入站请求与多个 FlowSchema 匹配,则将基于逻辑上最高优先级 `matchingPrecedence` 的请求进行筛选。 如果一个请求匹配多个 FlowSchema 且 `matchingPrecedence` 的值相同,则按 `name` 的字典序选择最小, 但是最好不要依赖它,而是确保不存在两个 FlowSchema 具有相同的 `matchingPrecedence` 值。 @@ -570,9 +578,9 @@ mandatory and suggested. ### Mandatory Configuration Objects The four mandatory configuration objects reflect fixed built-in -guardrail behavior. This is behavior that the servers have before +guardrail behavior. This is behavior that the servers have before those objects exist, and when those objects exist their specs reflect -this behavior. The four mandatory objects are as follows. +this behavior. The four mandatory objects are as follows. --> ### 强制的配置对象 {#mandatory-configuration-objects} @@ -613,8 +621,8 @@ this behavior. The four mandatory objects are as follows. ### Suggested Configuration Objects The suggested FlowSchemas and PriorityLevelConfigurations constitute a -reasonable default configuration. You can modify these and/or create -additional configuration objects if you want. If your cluster is +reasonable default configuration. You can modify these and/or create +additional configuration objects if you want. If your cluster is likely to experience heavy load then you should consider what configuration will work best. @@ -660,9 +668,11 @@ The suggested configuration groups requests into six priority levels: @@ -712,10 +722,10 @@ inconsistent with the server's guardrail behavior. @@ -743,16 +753,16 @@ alone. @@ -786,7 +796,7 @@ nor suggested but are annotated The suggested configuration gives no special treatment to the health check requests on kube-apiservers from their local kubelets --- which -tend to use the secured port but supply no credentials. With the +tend to use the secured port but supply no credentials. With the suggested config, these requests get assigned to the `global-default` FlowSchema and the corresponding `global-default` priority level, where other traffic can crowd them out. @@ -808,7 +818,7 @@ requests from rate limiting. * `apiserver_flowcontrol_rejected_requests_total` 是一个计数器向量, @@ -939,6 +949,16 @@ poorly-behaved workloads that may be harming system health. 因此你可以将一个优先级的所有 FlowSchema 的直方图相加,以得到分配给该优先级的请求的有效直方图。 {{< /note >}} + +* `apiserver_flowcontrol_nominal_limit_seats` 是一个测量向量, + 记录了每个优先级的额定并发限制。 + 此值是根据 API 服务器的总并发限制和优先级的配置额定并发份额计算得出的。 + @@ -949,7 +969,7 @@ poorly-behaved workloads that may be harming system health. high water marks of the number of queued requests, grouped by a label named `request_kind` whose value is `mutating` or `readOnly`. These high water marks describe the largest number seen in the one - second window most recently completed. These complement the older + second window most recently completed. These complement the older `apiserver_current_inflight_requests` gauge vector that holds the last window's high water mark of number of requests actively being served. @@ -976,7 +996,7 @@ poorly-behaved workloads that may be harming system health. nanosecond, of the number of requests broken down by the labels `phase` (which takes on the values `waiting` and `executing`) and `request_kind` (which takes on the values `mutating` and - `readOnly`). Each observed value is a ratio, between 0 and 1, of + `readOnly`). Each observed value is a ratio, between 0 and 1, of the number of requests divided by the corresponding limit on the number of requests (queue volume limit for waiting and concurrency limit for executing). @@ -1000,7 +1020,7 @@ poorly-behaved workloads that may be harming system health. histogram vector of observations, made at the end of each nanosecond, of the number of requests broken down by the labels `phase` (which takes on the values `waiting` and `executing`) and - `priority_level`. Each observed value is a ratio, between 0 and 1, + `priority_level`. Each observed value is a ratio, between 0 and 1, of a number of requests divided by the corresponding limit on the number of requests (queue volume limit for waiting and concurrency limit for executing). @@ -1015,13 +1035,13 @@ poorly-behaved workloads that may be harming system health. * `apiserver_flowcontrol_priority_level_seat_utilization` is a histogram vector of observations, made at the end of each nanosecond, of the utilization of a priority level's concurrency - limit, broken down by `priority_level`. This utilization is the - fraction (number of seats occupied) / (concurrency limit). This + limit, broken down by `priority_level`. This utilization is the + fraction (number of seats occupied) / (concurrency limit). This metric considers all stages of execution (both normal and the extra delay at the end of a write to cover for the corresponding notification work) of all requests except WATCHes; for those it considers only the initial stage that delivers notifications of - pre-existing objects. Each histogram in the vector is also labeled + pre-existing objects. Each histogram in the vector is also labeled with `phase: executing` (there is no seat limit for the waiting phase). --> @@ -1062,9 +1082,9 @@ poorly-behaved workloads that may be harming system health. * `apiserver_flowcontrol_request_concurrency_limit` 与 @@ -1087,8 +1107,8 @@ poorly-behaved workloads that may be harming system health. - 你可以查阅流控[参考文档](/zh-cn/docs/reference/debug-cluster/flow-control/)了解有关故障排查的更多信息。 - 有关 API 优先级和公平性的设计细节的背景信息, From 0e6929190944d73c941b5b119a3fad6d2f2cfd52 Mon Sep 17 00:00:00 2001 From: Daniel Suh <63919918+23danielsuh@users.noreply.github.com> Date: Thu, 16 May 2024 21:24:18 -0400 Subject: [PATCH 1053/1086] Rename 2024-04-28-contribute-as-sig-docs-reviewer.md to 2024-05-16-contribute-as-sig-docs-reviewer.md --- ...-reviewer.md => 2024-05-16-contribute-as-sig-docs-reviewer.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename content/en/blog/_posts/{2024-04-28-contribute-as-sig-docs-reviewer.md => 2024-05-16-contribute-as-sig-docs-reviewer.md} (100%) diff --git a/content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md b/content/en/blog/_posts/2024-05-16-contribute-as-sig-docs-reviewer.md similarity index 100% rename from content/en/blog/_posts/2024-04-28-contribute-as-sig-docs-reviewer.md rename to content/en/blog/_posts/2024-05-16-contribute-as-sig-docs-reviewer.md From 27a9a6bc4d3f14f15a9490e9431ea665f494af77 Mon Sep 17 00:00:00 2001 From: windsonsea Date: Tue, 14 May 2024 18:52:05 +0800 Subject: [PATCH 1054/1086] [zh] Add a blog: 2024-04-25-structured-authentication-configuration-beta.md --- ...tured-authentication-configuration-beta.md | 370 ++++++++++++++++++ 1 file changed, 370 insertions(+) create mode 100644 content/zh-cn/blog/_posts/2024-04-25-structured-authentication-configuration-beta.md diff --git a/content/zh-cn/blog/_posts/2024-04-25-structured-authentication-configuration-beta.md b/content/zh-cn/blog/_posts/2024-04-25-structured-authentication-configuration-beta.md new file mode 100644 index 0000000000..5259fd17d8 --- /dev/null +++ b/content/zh-cn/blog/_posts/2024-04-25-structured-authentication-configuration-beta.md @@ -0,0 +1,370 @@ +--- +layout: blog +title: "Kubernetes 1.30:结构化身份认证配置进阶至 Beta" +date: 2024-04-25 +slug: structured-authentication-moves-to-beta +author: > + [Anish Ramasekar](https://github.com/aramase) (Microsoft) +translator: > + [Michael Yao](https://github.com/windsonsea) (DaoCloud) +--- + + + +在 Kubernetes 1.30 中,我们(SIG Auth)将结构化身份认证配置(Structured Authentication Configuration)进阶至 Beta。 + +今天的文章是关于**身份认证**:找出谁在执行任务,核查他们是否是自己所说的那个人。 +本文还述及 Kubernetes v1.30 中关于 **鉴权**(决定某些人能访问什么,不能访问什么)的新内容。 + + +## 动机 {#motivation} + +Kubernetes 长期以来都需要一个更灵活、更好扩展的身份认证系统。 +当前的系统虽然强大,但有一些限制,使其难以用在某些场景下。 +例如,不可能同时使用多个相同类型的认证组件(例如,多个 JWT 认证组件), +也不可能在不重启 API 服务器的情况下更改身份认证配置。 +结构化身份认证配置特性是解决这些限制并提供一种更灵活、更好扩展的方式来配置 Kubernetes 中身份认证的第一步。 + + +## 什么是结构化身份认证配置? {#what-is-structured-authentication-configuration} + +Kubernetes v1.30 针对基于文件来配置身份认证提供实验性支持,这是在 Kubernetes v1.30 中新增的 Alpha 特性。 +在此 Beta 阶段,Kubernetes 仅支持配置 JWT 认证组件,这是现有 OIDC 认证组件的下一次迭代。 +JWT 认证组件使用符合 JWT 标准的令牌对 Kubernetes 用户进行身份认证。 +此认证组件将尝试解析原始 ID 令牌,验证其是否由配置的签发方签名。 + + +Kubernetes 项目新增了基于文件的配置,以便提供比使用命令行选项(命令行依然有效,仍受支持)更灵活的方式。 +对配置文件的支持还使得在即将发布的版本中更容易提供更多改进措施。 + + +### 结构化身份认证配置的好处 {#benefits-of-structured-authentication-configuration} + +以下是使用配置文件来配置集群身份认证的好处: + + +1. **多个 JWT 认证组件**:你可以同时配置多个 JWT 认证组件。 + 这允许你使用多个身份提供程序(例如 Okta、Keycloak、GitLab)而无需使用像 + Dex 这样的中间程序来处理多个身份提供程序之间的多路复用。 +2. **动态配置**:你可以在不重启 API 服务器的情况下更改配置。 + 这允许你添加、移除或修改认证组件而不会中断 API 服务器。 + + +3. **任何符合 JWT 标准的令牌**:你可以使用任何符合 JWT 标准的令牌进行身份认证。 + 这允许你使用任何支持 JWT 的身份提供程序的令牌。最小有效的 JWT 载荷必须包含 Kubernetes + 文档中[结构化身份认证配置](/zh-cn/docs/reference/access-authn-authz/authentication/#using-authentication-configuration)页面中记录的申领。 +4. **CEL(通用表达式语言)支持**:你可以使用 [CEL](/zh-cn/docs/reference/using-api/cel/) + 来确定令牌的申领是否与 Kubernetes 中用户的属性(例如用户名、组)匹配。 + 这允许你使用复杂逻辑来确定令牌是否有效。 + + +5. **多个受众群体**:你可以为单个认证组件配置多个受众群体。 + 这允许你为多个受众群体使用相同的认证组件,例如为 `kubectl` 和仪表板使用不同的 OAuth 客户端。 +6. **使用不支持 OpenID 连接发现的身份提供程序**:你可以使用不支持 + [OpenID 连接发现](https://openid.net/specs/openid-connect-discovery-1_0.html) 的身份提供程序。 + 唯一的要求是将发现文档托管到与签发方不同的位置(例如在集群中本地),并在配置文件中指定 `issuer.discoveryURL`。 + + +## 如何使用结构化身份认证配置 {#how-to-use-structured-authentication-configuration} + +要使用结构化身份认证配置,你可以使用 `--authentication-config` 命令行参数在 +API 服务器中指定身份认证配置的路径。此配置文件是一个 YAML 文件,指定认证组件及其配置。 +以下是一个配置两个 JWT 认证组件的示例配置文件: + + + +```yaml +apiVersion: apiserver.config.k8s.io/v1beta1 +kind: AuthenticationConfiguration +# 如果某人具有这些 issuer 之一签发的有效令牌,则此人可以在集群上进行身份认证 +jwt: +- issuer: + url: https://issuer1.example.com + audiences: + - audience1 + - audience2 + audienceMatchPolicy: MatchAny + claimValidationRules: + expression: 'claims.hd == "example.com"' + message: "the hosted domain name must be example.com" + claimMappings: + username: + expression: 'claims.username' + groups: + expression: 'claims.groups' + uid: + expression: 'claims.uid' + extra: + - key: 'example.com/tenant' + expression: 'claims.tenant' + userValidationRules: + - expression: "!user.username.startsWith('system:')" + message: "username cannot use reserved system: prefix" +# 第二个认证组件将发现文档公布于与签发方不同的位置 +- issuer: + url: https://issuer2.example.com + discoveryURL: https://discovery.example.com/.well-known/openid-configuration + audiences: + - audience3 + - audience4 + audienceMatchPolicy: MatchAny + claimValidationRules: + expression: 'claims.hd == "example.com"' + message: "the hosted domain name must be example.com" + claimMappings: + username: + expression: 'claims.username' + groups: + expression: 'claims.groups' + uid: + expression: 'claims.uid' + extra: + - key: 'example.com/tenant' + expression: 'claims.tenant' + userValidationRules: + - expression: "!user.username.startsWith('system:')" + message: "username cannot use reserved system: prefix" +``` + + +## 从命令行参数迁移到配置文件 {#migration-from-command-line-arguments-to-configuration-file} + +结构化身份认证配置特性旨在与基于命令行选项配置 JWT 认证组件的现有方法向后兼容。 +这意味着你可以继续使用现有的命令行选项来配置 JWT 认证组件。 +但是,我们(Kubernetes SIG Auth)建议迁移到新的基于配置文件的方法,因为这种方法更灵活,更好扩展。 + +{{% alert title="Note" color="primary" %}} + +如果你同时指定 `--authentication-config` 和任何 `--oidc-*` 命令行参数,这是一种错误的配置。 +在这种情况下,API 服务器会报告错误,然后立即退出。 + +如果你想切换到使用结构化身份认证配置,你必须移除 `--oidc-*` 命令行参数,并改为使用配置文件。 +{{% /alert %}} + + +以下是如何从命令行标志迁移到配置文件的示例: + +### 命令行参数 {#command-line-arguments} + +```bash +--oidc-issuer-url=https://issuer.example.com +--oidc-client-id=example-client-id +--oidc-username-claim=username +--oidc-groups-claim=groups +--oidc-username-prefix=oidc: +--oidc-groups-prefix=oidc: +--oidc-required-claim="hd=example.com" +--oidc-required-claim="admin=true" +--oidc-ca-file=/path/to/ca.pem +``` + + +在配置文件中没有与 `--oidc-signing-algs` 相对应的配置项。 +对于 Kubernetes v1.30,认证组件支持在 +[`oidc.go`](https://github.com/kubernetes/kubernetes/blob/b4935d910dcf256288694391ef675acfbdb8e7a3/staging/src/k8s.io/apiserver/plugin/pkg/authenticator/token/oidc/oidc.go#L222-L233) +中列出的所有非对称算法。 + +### 配置文件 {#configuration-file} + + + +```yaml +apiVersion: apiserver.config.k8s.io/v1beta1 +kind: AuthenticationConfiguration +jwt: +- issuer: + url: https://issuer.example.com + audiences: + - example-client-id + certificateAuthority: <取值是 /path/to/ca.pem 文件的内容> + claimMappings: + username: + claim: username + prefix: "oidc:" + groups: + claim: groups + prefix: "oidc:" + claimValidationRules: + - claim: hd + requiredValue: "example.com" + - claim: admin + requiredValue: "true" +``` + + +## 下一步是什么? {#whats-next} + +对于 Kubernetes v1.31,我们预计该特性将保持在 Beta,我们要收集更多反馈意见。 +在即将发布的版本中,我们希望调查以下内容: + +- 通过 CEL 表达式使分布式申领生效。 +- 对 `issuer.url` 和 `issuer.discoveryURL` 的调用提供 Egress 选择算符配置支持。 + + +你可以在 Kubernetes +文档的[结构化身份认证配置](/zh-cn/docs/reference/access-authn-authz/authentication/#using-authentication-configuration)页面上了解关于此特性的更多信息。 +你还可以通过 [KEP-3331](https://kep.k8s.io/3331) 跟踪未来 Kubernetes 版本中的进展。 + + +## 试用一下 {#try-it-out} + +在本文中,我介绍了结构化身份认证配置特性在 Kubernetes v1.30 中带来的好处。 +要使用此特性,你必须使用 `--authentication-config` 命令行参数指定身份认证配置的路径。 +从 Kubernetes v1.30 开始,此特性处于 Beta 并默认启用。 +如果你希望继续使用命令行参数而不想用配置文件,原来的命令行参数也将继续按原样起作用。 + + +我们很高兴听取你对此特性的反馈意见。请在 Kubernetes Slack 上的 +[#sig-auth-authenticators-dev](https://kubernetes.slack.com/archives/C04UMAUC4UA) +频道与我们联系(若要获取邀请,请访问 [https://slack.k8s.io/](https://slack.k8s.io/))。 + + +## 如何参与 {#how-to-get-involved} + +如果你有兴趣参与此特性的开发、分享反馈意见或参与任何其他 SIG Auth 项目, +请在 Kubernetes Slack 上的 [#sig-auth](https://kubernetes.slack.com/archives/C0EN96KUY) 频道联系我们。 + + +我们也欢迎你参加 [SIG Auth 双周会议](https://github.com/kubernetes/community/blob/master/sig-auth/README.md#meetings)。 From 7d9eee664944bb38ca11c5b80a74c2e446d36736 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Wed, 15 May 2024 00:39:12 +0800 Subject: [PATCH 1055/1086] [zh-cn]sync api-extension/_index.md resource-quotas.md Signed-off-by: xin.li --- .../extend-kubernetes/api-extension/_index.md | 31 +++++++++ .../docs/concepts/policy/resource-quotas.md | 69 +++++++++++-------- 2 files changed, 72 insertions(+), 28 deletions(-) diff --git a/content/zh-cn/docs/concepts/extend-kubernetes/api-extension/_index.md b/content/zh-cn/docs/concepts/extend-kubernetes/api-extension/_index.md index ccdad410f0..9b9a3eb8bc 100644 --- a/content/zh-cn/docs/concepts/extend-kubernetes/api-extension/_index.md +++ b/content/zh-cn/docs/concepts/extend-kubernetes/api-extension/_index.md @@ -2,3 +2,34 @@ title: 扩展 Kubernetes API weight: 30 --- + + +自定义资源是 Kubernetes API 的扩展。 +Kubernetes 提供了两种将自定义资源添加到集群的方法: + + +- [CustomResourceDefinition](/zh-cn/docs/concepts/extend-kubernetes/api-extension/custom-resources/)(CRD) + 机制允许你通过指定自己的 API 组、种类和模式以声明方式定义新的自定义 API。 + Kubernetes 控制平面为自定义资源提供服务并为其提供存储。 + CRD 允许你为集群创建新的资源类别,而无需编写和运行自定义 API 服务器。 + +- [聚合层(Aggregation Layer)](/zh-cn/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/)位于主 + API 服务器后面,将 API 服务器用作代理。 + 这种安排称为 API 聚合(API Aggregation,AA),允许你通过编写和部署自己的 API 服务器来为自定义资源提供专门的实现。 + 主 API 服务器将你指定的自定义 API 的请求委托给你的 API 服务器,使其可供所有客户端使用。 diff --git a/content/zh-cn/docs/concepts/policy/resource-quotas.md b/content/zh-cn/docs/concepts/policy/resource-quotas.md index 561f72c596..f3d13793b2 100644 --- a/content/zh-cn/docs/concepts/policy/resource-quotas.md +++ b/content/zh-cn/docs/concepts/policy/resource-quotas.md @@ -60,14 +60,14 @@ Resource quotas work like this: See the [walkthrough](/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/) for an example of how to avoid this problem. --> -- 不同的团队可以在不同的命名空间下工作。这可以通过 +- 不同的团队可以在不同的命名空间下工作,这可以通过 [RBAC](/zh-cn/docs/reference/access-authn-authz/rbac/) 强制执行。 - 集群管理员可以为每个命名空间创建一个或多个 ResourceQuota 对象。 - 当用户在命名空间下创建资源(如 Pod、Service 等)时,Kubernetes 的配额系统会跟踪集群的资源使用情况, 以确保使用的资源用量不超过 ResourceQuota 中定义的硬性资源限额。 - 如果资源创建或者更新请求违反了配额约束,那么该请求会报错(HTTP 403 FORBIDDEN), 并在消息中给出有可能违反的约束。 -- 如果命名空间下的计算资源 (如 `cpu` 和 `memory`)的配额被启用, +- 如果命名空间下的计算资源(如 `cpu` 和 `memory`)的配额被启用, 则用户必须为这些资源设定请求值(request)和约束值(limit),否则配额系统将拒绝 Pod 的创建。 提示: 可使用 `LimitRanger` 准入控制器来为没有设置计算资源需求的 Pod 设置默认值。 @@ -195,8 +195,8 @@ In addition to the resources mentioned above, in release 1.10, quota support for --> ### 扩展资源的资源配额 {#resource-quota-for-extended-resources} -除上述资源外,在 Kubernetes 1.10 版本中,还添加了对 -[扩展资源](/zh-cn/docs/concepts/configuration/manage-resources-containers/#extended-resources) +除上述资源外,在 Kubernetes 1.10 版本中, +还添加了对[扩展资源](/zh-cn/docs/concepts/configuration/manage-resources-containers/#extended-resources) 的支持。 -如果所使用的是 CRI 容器运行时,容器日志会被计入临时存储配额。 -这可能会导致存储配额耗尽的 Pods 被意外地驱逐出节点。 -参考[日志架构](/zh-cn/docs/concepts/cluster-administration/logging/) -了解详细信息。 +如果所使用的是 CRI 容器运行时,容器日志会被计入临时存储配额, +这可能会导致存储配额耗尽的 Pod 被意外地驱逐出节点。 +参考[日志架构](/zh-cn/docs/concepts/cluster-administration/logging/)了解详细信息。 {{< /note >}} ## 对象数量配额 {#object-count-quota} -你可以使用以下语法对所有标准的、命名空间域的资源类型进行配额设置: +你可以使用以下语法为 Kubernetes API 中“一种特定资源类型的总数”设置配额: * `count/.`:用于非核心(core)组的资源 * `count/`:用于核心组的资源 @@ -309,7 +308,7 @@ namespaced resource types using the following syntax: -这是用户可能希望利用对象计数配额来管理的一组资源示例。 +这是用户可能希望利用对象计数配额来管理的一组资源示例: * `count/persistentvolumeclaims` * `count/services` @@ -323,21 +322,31 @@ Here is an example set of resources users may want to put under object count quo * `count/cronjobs.batch` -相同语法也可用于自定义资源。 +如果你以这种方式定义配额,它将应用于属于 API 服务器一部分的 Kubernetes API,以及 CustomResourceDefinition +支持的任何自定义资源。 +如果你使用[聚合 API](/zh-cn/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/) +添加未定义为 CustomResourceDefinitions 的其他自定义 API,则核心 Kubernetes 控制平面不会对聚合 API 实施配额管理。 +如果合适,扩展 API 服务器需要为自定义 API 提供配额管理。 例如,要对 `example.com` API 组中的自定义资源 `widgets` 设置配额,请使用 `count/widgets.example.com`。 -当使用 `count/*` 资源配额时,如果对象存在于服务器存储中,则会根据配额管理资源。 +当使用这样的资源配额(几乎涵盖所有对象类别)时,如果对象类别在控制平面中已存在(已定义), +则该对象管理会参考配额设置。 这些类型的配额有助于防止存储资源耗尽。例如,用户可能想根据服务器的存储能力来对服务器中 Secret 的数量进行配额限制。 集群中存在过多的 Secret 实际上会导致服务器和控制器无法启动。 @@ -345,10 +354,10 @@ Secret 的数量进行配额限制。 Job 而导致集群拒绝服务。 -对有限的一组资源上实施一般性的对象数量配额也是可能的。 +还有另一种语法仅用于为某些资源设置相同类型的配额。 支持以下类型: @@ -383,10 +392,15 @@ created in a single namespace that are not terminal. You might want to set a `po quota on a namespace to avoid the case where a user creates many small pods and exhausts the cluster's supply of Pod IPs. --> -例如,`pods` 配额统计某个命名空间中所创建的、非终止状态的 `Pod` 个数并确保其不超过某上限值。 +例如,`pods` 配额统计某个命名空间中所创建的、非终止状态的 `pods` 个数并确保其不超过某上限值。 用户可能希望在某命名空间中设置 `pods` 配额,以避免有用户创建很多小的 Pod, 从而耗尽集群所能提供的 Pod IP 地址。 + +你可以在[查看和设置配额](#viewing-and-setting-quotas)节查看更多示例。 + -本示例创建一个配额对象,并将其与具有特定优先级的 Pod 进行匹配。 -该示例的工作方式如下: +本示例创建一个配额对象,并将其与具有特定优先级的 Pod 进行匹配,其工作方式如下: 如果集群运维人员希望默认禁止使用 `namespaces` 和 `namespaceSelector`, -而仅仅允许在特定名字空间中这样做,他们可以将 `CrossNamespacePodAffinity` +而仅仅允许在特定命名空间中这样做,他们可以将 `CrossNamespacePodAffinity` 作为一个被约束的资源。方法是为 `kube-apiserver` 设置标志 `--admission-control-config-file`,使之指向如下的配置文件: @@ -839,9 +852,9 @@ then it requires that every incoming container specifies an explicit limit for t Kubectl supports creating, updating, and viewing quotas: --> -## 查看和设置配额 {#viewing-and-setting-quotas} +## 查看和设置配额 {#viewing-and-setting-quotas} -Kubectl 支持创建、更新和查看配额: +kubectl 支持创建、更新和查看配额: ```shell kubectl create namespace myspace @@ -976,7 +989,7 @@ automatically give each namespace the ability to consume more resources. ## 配额和集群容量 {#quota-and-cluster-capacity} ResourceQuota 与集群资源总量是完全独立的。它们通过绝对的单位来配置。 -所以,为集群添加节点时,资源配额*不会*自动赋予每个命名空间消耗更多资源的能力。 +所以,为集群添加节点时,资源配额**不会**自动赋予每个命名空间消耗更多资源的能力。 [kubelet](/zh-cn/docs/reference/command-line-tools-reference/kubelet/) 通过 [cAdvisor](https://github.com/google/cadvisor) 收集 Pod 和容器指标。作为一个 Alpha 特性, -Kubernetes 允许你通过{{< glossary_tooltip term_id="cri" text="容器运行时接口">}}(CRI) +Kubernetes 允许你通过{{< glossary_tooltip term_id="container-runtime-interface" text="容器运行时接口">}}(CRI) 配置收集 Pod 和容器指标。要使用基于 CRI 的收集机制,你必须启用 `PodAndContainerStatsFromCRI` [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/) 并使用兼容的 CRI 实现(containerd >= 1.6.0, CRI-O >= 1.23.0)。 From 5a85483ed5d23919368d025553ed7e74b60a2506 Mon Sep 17 00:00:00 2001 From: axlrosen Date: Sat, 18 May 2024 16:17:38 +0100 Subject: [PATCH 1067/1086] Update hello-minikube.md When I ran `kubectl get deployments`, it showed no available nodes. So I thought I did something wrong. Eventually I ran it again and it matched the expected output. So, I would like to add a helpful hint to the documentation. --- content/en/docs/tutorials/hello-minikube.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/en/docs/tutorials/hello-minikube.md b/content/en/docs/tutorials/hello-minikube.md index 0afa96251e..3e20defe9b 100644 --- a/content/en/docs/tutorials/hello-minikube.md +++ b/content/en/docs/tutorials/hello-minikube.md @@ -114,6 +114,8 @@ recommended way to manage the creation and scaling of Pods. hello-node 1/1 1 1 1m ``` + (It may take some time for the pod to become available. If you see "0/1", try again in a few seconds.) + 1. View the Pod: ```shell From 59eacb348538561c2e830f482011420bc146e2d0 Mon Sep 17 00:00:00 2001 From: andrewsykim Date: Sun, 19 May 2024 01:44:19 -0400 Subject: [PATCH 1068/1086] updates to cloud provider migration blog Signed-off-by: andrewsykim --- ...=> 2024-05-20-cloud-provider-migration.md} | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) rename content/en/blog/_posts/{2024-05-13-cloud-provider-migration.md => 2024-05-20-cloud-provider-migration.md} (66%) diff --git a/content/en/blog/_posts/2024-05-13-cloud-provider-migration.md b/content/en/blog/_posts/2024-05-20-cloud-provider-migration.md similarity index 66% rename from content/en/blog/_posts/2024-05-13-cloud-provider-migration.md rename to content/en/blog/_posts/2024-05-20-cloud-provider-migration.md index 5107cd6e37..54ce978e8d 100644 --- a/content/en/blog/_posts/2024-05-13-cloud-provider-migration.md +++ b/content/en/blog/_posts/2024-05-20-cloud-provider-migration.md @@ -6,27 +6,30 @@ slug: completing-cloud-provider-migration author: > Andrew Sy Kim (Google), Michelle Au (Google), + Walter Fender (Google), Michael McCune (Red Hat) --- -Since as early as Kubernetes v1.7, the Kubernetes project has pursued the ambitious goal of removing built-in cloud provider integrations. +Since as early as Kubernetes v1.7, the Kubernetes project has pursued the ambitious goal of removing built-in cloud provider integrations ([KEP-2395](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2395-removing-in-tree-cloud-providers/README.md)). While these integrations were instrumental in Kubernetes' early development and growth, their removal was driven by two key factors: the growing complexity of maintaining native support for every cloud provider across millions of lines of Go code, and the desire to establish Kubernetes as a truly vendor-neutral platform. After many releases, we're thrilled to announce that all cloud provider integrations have been successfully migrated from the core Kubernetes repository to external plugins. +In addition to achieving our initial objectives, we've also significantly streamlined Kubernetes by removing roughly 1.5 million lines of code and reducing the binary sizes of core components by approximately 40%. + This migration was a complex and long-running effort due to the numerous impacted components and the critical code paths that relied on the built-in integrations for the five initial cloud providers: Google Cloud, AWS, Azure, OpenStack, and vSphere. To successfully complete this migration, we had to build four new subsystems from the ground up: -1. [Cloud Controller Manager](https://kubernetes.io/docs/concepts/architecture/cloud-controller/) -2. [API Server Network Proxy](https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/1281-network-proxy) -3. [Kubelet Credential Provider Plugins](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2133-kubelet-credential-providers) -4. [CSI In-tree Storage migration plugins](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/625-csi-migration/README.md) +1. **Cloud controller manager** ([KEP-2392](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2392-cloud-controller-manager/README.md)) +1. **API server network proxy** ([KEP-1281](https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/1281-network-proxy)) +1. **kubelet credential provider plugins** ([KEP-2133](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2133-kubelet-credential-providers)) +1. Storage migration to use [CSI](https://github.com/container-storage-interface/spec?tab=readme-ov-file#container-storage-interface-csi-specification-) ([KEP-625](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/625-csi-migration/README.md)) Each subsystem was critical to achieve full feature parity with built-in capabilities and required several releases to bring each subsystem to GA-level maturity with a safe and reliable migration path. More on each subsystem below. -### Cloud Controller Manager +### Cloud controller manager The cloud controller manager was the first external component introduced in this effort, replacing functionality within the kube-controller-manager and kubelet that directly interacted with cloud APIs. This essential component is responsible for initializing nodes by applying metadata labels that indicate the cloud region and zone a Node is running on, as well as IP addresses that are only known to the cloud provider. @@ -34,9 +37,9 @@ Additionally, it runs the service controller, which is responsible for provision ![Kubernetes components](/images/docs/components-of-kubernetes.svg) -Learn more about Cloud Controller Manager [here](/docs/concepts/architecture/cloud-controller). +To learn more, read [Cloud Controller Manager](/docs/concepts/architecture/cloud-controller/) in the Kubernetes documentation. -### API Server Network Proxy +### API server network proxy The API Server Network Proxy project, initiated in 2018 in collaboration with SIG API Machinery, aimed to replace the SSH tunneler functionality within the kube-apiserver. This tunneler had been used to securely proxy traffic between the Kubernetes control plane and nodes, but it heavily relied on provider-specific implementation details embedded in the kube-apiserver to establish these SSH tunnels. @@ -44,20 +47,20 @@ This tunneler had been used to securely proxy traffic between the Kubernetes con Now, the API Server Network Proxy is a GA-level extension point within the kube-apiserver. It offers a generic proxying mechanism that can route traffic from the API server to nodes through a secure proxy, eliminating the need for the API server to have any knowledge of the specific cloud provider it is running on. This project also introduced the Konnectivity project, which has seen growing adoption in production environments. -Learn more about the API Server Network Proxy [here](https://github.com/kubernetes-sigs/apiserver-network-proxy). +You can learn more about the API Server Network Proxy from its [README](https://github.com/kubernetes-sigs/apiserver-network-proxy#readme). -### Kubelet Credential Provider +### Credential provider plugins for the kubelet The Kubelet credential provider plugin was developed to replace the kubelet's built-in functionality for dynamically fetching credentials for image registries hosted on Google Cloud, AWS, or Azure. -This capability was convenient as it allowed the kubelet to seamlessly retrieve short-lived tokens for pulling images from GCR, ECR, or ACR. However, like other areas of the project, +The legacy capability was convenient as it allowed the kubelet to seamlessly retrieve short-lived tokens for pulling images from GCR, ECR, or ACR. However, like other areas of Kubernetes, supporting this required the kubelet to have specific knowledge of different cloud environments and APIs. -Introduced in 2019, the credential provider plugin offers a generic extension point for the kubelet to execute plugin binaries that dynamically provide credentials for images hosted on various clouds. +Introduced in 2019, the credential provider plugin mechanism offers a generic extension point for the kubelet to execute plugin binaries that dynamically provide credentials for images hosted on various clouds. This extensibility expands the kubelet's capabilities to fetch short-lived tokens beyond the initial three cloud providers. -Learn more about Kubelet Credential Provider [here](https://kubernetes.io/docs/tasks/administer-cluster/kubelet-credential-provider/). +To learn more, read [kubelet credential provider for authenticated image pulls](/docs/concepts/containers/images/#kubelet-credential-provider). -### CSI In-tree Storage Migration Plugins +### Storage plugin migration from in-tree to CSI The Container Storage Interface (CSI) is a control plane standard for managing block and file storage systems in Kubernetes and other container orchestrators that went GA in 1.13. It was designed to replace the in-tree volume plugins built directly into Kubernetes with drivers that can run as Pods within the Kubernetes cluster. @@ -68,9 +71,9 @@ However, a major challenge remained on how to handle all the existing users of i we built an API translation layer into our controllers that will convert the in-tree volume API into the equivalent CSI API. This allowed us to redirect all storage operations to the CSI driver, paving the way for us to remove the code for the built-in volume plugins without removing the API. -Learn more about In-tree Storage migration in [this blog post](https://kubernetes.io/blog/2019/12/09/kubernetes-1-17-feature-csi-migration-beta/). +You can learn more about In-tree Storage migration in [Kubernetes In-Tree to CSI Volume Migration Moves to Beta](https://kubernetes.io/blog/2019/12/09/kubernetes-1-17-feature-csi-migration-beta/). -## What’s Next? +## What's next? This migration has been the primary focus for SIG Cloud Provider over the past few years. With this significant milestone achieved, we will be shifting our efforts towards exploring new and innovative ways for Kubernetes to better integrate with cloud providers, leveraging the external subsystems we've built over the years. This includes making Kubernetes smarter in @@ -80,7 +83,6 @@ With all the new features, tools, and frameworks being planned, SIG Cloud Provid cloud controller testing to include more providers. The ultimate goal of this effort being to create a testing framework that will include as many providers as possible so that we give the Kubernetes community the highest levels of confidence about their Kubernetes environments. -If you're using a version older than v1.29 and haven't migrated to an external cloud provider yet, we recommend checking out our previous blog post [Kubernetes 1.29: Cloud Provider Integrations Are Now Separate Components](https://kubernetes.io/blog/2023/12/14/cloud-provider-integration-changes/). -It provides detailed information on the changes we've made and offers guidance on how to migrate to an external provider. Starting in v1.31, in-tree cloud providers will be permanently disabled and removed from core Kubernetes components. +If you're using a version of Kubernetes older than v1.29 and haven't migrated to an external cloud provider yet, we recommend checking out our previous blog post [Kubernetes 1.29: Cloud Provider Integrations Are Now Separate Components](/blog/2023/12/14/cloud-provider-integration-changes/).It provides detailed information on the changes we've made and offers guidance on how to migrate to an external provider. Starting in v1.31, in-tree cloud providers will be permanently disabled and removed from core Kubernetes components. If you’re interested in contributing, come join our [bi-weekly SIG meetings](https://github.com/kubernetes/community/tree/master/sig-cloud-provider#meetings)! \ No newline at end of file From 73b9cbee743d240d73705ef10434e79b5863798a Mon Sep 17 00:00:00 2001 From: Arhell Date: Sun, 19 May 2024 10:54:11 +0300 Subject: [PATCH 1069/1086] [uk] Ready Hello, Minikube page for vanilla Docsy --- content/uk/docs/tutorials/hello-minikube.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/content/uk/docs/tutorials/hello-minikube.md b/content/uk/docs/tutorials/hello-minikube.md index 7d27b34bde..67e464a465 100644 --- a/content/uk/docs/tutorials/hello-minikube.md +++ b/content/uk/docs/tutorials/hello-minikube.md @@ -3,15 +3,6 @@ title: Привіт Minikube content_type: tutorial weight: 5 -menu: - main: - #title: "Get Started" - title: "Початок роботи" - weight: 10 - #post: > - #

    Ready to get your hands dirty? Build a simple Kubernetes cluster that runs "Hello World" for Node.js.

    - post: > -

    Готові попрацювати? Створимо простий Kubernetes кластер для запуску Node.js застосунку "Hello World".

    card: #name: tutorials name: навчальні матеріали From 4a8ae1a926c162883207e6a0b8cb2f0f3b808f15 Mon Sep 17 00:00:00 2001 From: Tim Bannister Date: Sun, 19 May 2024 13:48:32 +0100 Subject: [PATCH 1070/1086] Fix formatting --- content/en/blog/_posts/2024-05-20-cloud-provider-migration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2024-05-20-cloud-provider-migration.md b/content/en/blog/_posts/2024-05-20-cloud-provider-migration.md index 54ce978e8d..4ad77e2109 100644 --- a/content/en/blog/_posts/2024-05-20-cloud-provider-migration.md +++ b/content/en/blog/_posts/2024-05-20-cloud-provider-migration.md @@ -24,7 +24,7 @@ five initial cloud providers: Google Cloud, AWS, Azure, OpenStack, and vSphere. 1. **Cloud controller manager** ([KEP-2392](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2392-cloud-controller-manager/README.md)) 1. **API server network proxy** ([KEP-1281](https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/1281-network-proxy)) 1. **kubelet credential provider plugins** ([KEP-2133](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2133-kubelet-credential-providers)) -1. Storage migration to use [CSI](https://github.com/container-storage-interface/spec?tab=readme-ov-file#container-storage-interface-csi-specification-) ([KEP-625](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/625-csi-migration/README.md)) +1. **Storage migration to use [CSI](https://github.com/container-storage-interface/spec?tab=readme-ov-file#container-storage-interface-csi-specification-)** ([KEP-625](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/625-csi-migration/README.md)) Each subsystem was critical to achieve full feature parity with built-in capabilities and required several releases to bring each subsystem to GA-level maturity with a safe and reliable migration path. More on each subsystem below. From e1fbe95403dcba9a3e3882cf91710c2cc35edb1f Mon Sep 17 00:00:00 2001 From: Arhell Date: Mon, 20 May 2024 00:15:36 +0300 Subject: [PATCH 1071/1086] [ja] Ready Hello, Minikube page for vanilla Docsy --- content/ja/docs/tutorials/hello-minikube.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/content/ja/docs/tutorials/hello-minikube.md b/content/ja/docs/tutorials/hello-minikube.md index 33d0d4ab01..f2acd0c6db 100644 --- a/content/ja/docs/tutorials/hello-minikube.md +++ b/content/ja/docs/tutorials/hello-minikube.md @@ -2,12 +2,6 @@ title: Hello Minikube content_type: tutorial weight: 5 -menu: - main: - title: "Get Started" - weight: 10 - post: > -

    手を動かす準備はできていますか?本チュートリアルでは、サンプルアプリケーションを実行するKubernetesクラスターをビルドします。

    card: name: tutorials weight: 10 From 686cd52d9d4dbe5084402d10d6660cddf5822c35 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Sat, 18 May 2024 09:17:00 +0800 Subject: [PATCH 1072/1086] [zh-cn] sync kubelet-config.v1beta1.md Signed-off-by: xin.li --- .../config-api/kubelet-config.v1beta1.md | 211 +++++++++++++++--- 1 file changed, 174 insertions(+), 37 deletions(-) diff --git a/content/zh-cn/docs/reference/config-api/kubelet-config.v1beta1.md b/content/zh-cn/docs/reference/config-api/kubelet-config.v1beta1.md index c49526fa3b..d9a6fae47e 100644 --- a/content/zh-cn/docs/reference/config-api/kubelet-config.v1beta1.md +++ b/content/zh-cn/docs/reference/config-api/kubelet-config.v1beta1.md @@ -39,6 +39,21 @@ FormatOptions 包含为不同日志格式提供的选项。 字段描述 + + +text [必需]
    +TextOptions + + + +

    [Alpha] 文本包含用于记录 "text" 格式的选项。 +仅当 LoggingAlphaOptions 特性门控被启用时可用。

    + + + json [必需]
    JSONOptions @@ -73,38 +88,19 @@ JSONOptions 包含为 "json" 日志格式提供的选项。 - - - - + + @@ -262,6 +258,96 @@ certain global defaults.
    字段描述
    splitStream [必需]
    -bool -
    -

    - - [Alpha] splitStream 将错误信息重定向到标准错误输出(stderr), -而将提示信息重定向到标准输出(stdout),并为二者提供缓存。 -默认设置是将二者都写出到标准输出,并且不提供缓存。 -只有 LoggingAlphaOptions 特性门控被启用时才可用。 -

    -
    infoBufferSize [必需]
    -k8s.io/apimachinery/pkg/api/resource.QuantityValue -
    -

    - - [Alpha] infoBufferSize 在分离数据流时用来设置 info 数据流的大小。 -默认值为 0,相当于禁止缓存。只有 LoggingAlphaOptions 特性门控被启用时才可用。 -

    +OutputRoutingOptions [必需]
    +OutputRoutingOptions +
    + +(OutputRoutingOptions 的成员嵌入到此类型中。) + 没有提供描述。
    + +## `OutputRoutingOptions` {#OutputRoutingOptions} + +- [JSONOptions](#JSONOptions) + +- [TextOptions](#TextOptions) + +

    + +

    +OutputRoutingOptions 包含 "text" 和 "json" 支持的选项。 + + + + + + + + + + + + + +
    Field描述<
    splitStream [必需]
    +bool +
    + +

    [Alpha] SplitStream 将错误消息重定向到 stderr,而信息消息则转到 stdout,并进行缓冲。 +默认是将两者都写入 stdout,而不进行缓冲。仅在 LoggingAlphaOptions 特性门控启用时可用。

    +
    infoBufferSize [必需]
    +k8s.io/apimachinery/pkg/api/resource.QuantityValue +
    + +

    [Alpha] InfoBufferSize 设置使用分割流时信息流的大小。默认值为零,表示禁用缓冲。 +仅在 LoggingAlphaOptions 特性门控启用时可用。

    +
    + +## `TextOptions` {#TextOptions} + + +**出现在:** + +- [FormatOptions](#FormatOptions) + +

    + +TextOptions 包含用于记录 "text" 格式的选项。 +

    + + + + + + + + + + + +
    Field描述
    OutputRoutingOptions [必需]
    +OutputRoutingOptions +
    + +(OutputRoutingOptions 的成员嵌入到此类型中。) + 未提供描述。 +
    + ## `TimeOrMetaDuration` {#TimeOrMetaDuration} +

    podLogsDir 是 kubelet 用于放置 Pod 日志文件的自定义根目录路径。 +默认值:"/var/log/pods/" +注意:不建议使用临时文件夹作为日志目录,因为它可能会在许多地方引起意外行为。

    + + + + syncFrequency
    meta/v1.Duration @@ -637,12 +740,12 @@ Default: ""

    tlsCipherSuites 是一个字符串列表,其中包含服务器所接受的加密包名称。 请注意,TLS 1.3 密码套件是不可配置的。 - 列表中的每个值来自于 tls 包中定义的常数(https://pkg.go.dev/crypto/tls#pkg-constants)。

    + 列表中的每个值来自于 tls 包中定义的常数(https://golang.org/pkg/crypto/tls/#pkg-constants)。

    默认值:nil

    @@ -653,11 +756,11 @@ Default: ""

    tlsMinVersion 给出所支持的最小 TLS 版本。 -字段取值来自于 tls 包中的常数定义(https://pkg.go.dev/crypto/tls#pkg-constants)。

    +字段取值来自于 tls 包中的常数定义(https://golang.org/pkg/crypto/tls/#pkg-constants)。

    默认值:""

    @@ -1855,6 +1958,40 @@ Default: 5 +containerLogMaxWorkers
    +int32 + + + +

    containerLogMaxWorkers 指定执行日志轮换操作所需的并发工作程序的最大数量。 +将此计数设置为 1,以禁用并发日志轮换工作流程。 +默认值:1

    + + + +containerLogMonitorInterval
    +meta/v1.Duration + + + +

    ContainerLogMonitorInterval 指定监视容器日志以执行日志轮转操作的持续时间。 +默认为 10s,但可以根据日志生成率和需要轮换的大小定制为较小的值。 +默认值:10s +

    + + + configMapAndSecretChangeDetectionStrategy
    ResourceChangeDetectionStrategy @@ -2333,7 +2470,7 @@ Default: 0.8 registerWithTaints
    -[]core/v1.Taint +[]core/v1.Taint [必需]
    -core/v1.ResourceList +core/v1.ResourceList From c1d0def3fe2720f32933a4c705eea298d05f4dea Mon Sep 17 00:00:00 2001 From: windsonsea Date: Mon, 20 May 2024 09:59:50 +0800 Subject: [PATCH 1073/1086] [zh] Localize a blog: 2024-04-22-userns-beta/ --- .../_posts/2024-04-22-userns-beta/index.md | 298 ++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 content/zh-cn/blog/_posts/2024-04-22-userns-beta/index.md diff --git a/content/zh-cn/blog/_posts/2024-04-22-userns-beta/index.md b/content/zh-cn/blog/_posts/2024-04-22-userns-beta/index.md new file mode 100644 index 0000000000..d62cdf7687 --- /dev/null +++ b/content/zh-cn/blog/_posts/2024-04-22-userns-beta/index.md @@ -0,0 +1,298 @@ +--- +layout: blog +title: "Kubernetes 1.30:对 Pod 使用用户命名空间的支持进阶至 Beta" +date: 2024-04-22 +slug: userns-beta +author: > + Rodrigo Campos Catelin (Microsoft), + Giuseppe Scrivano (Red Hat), + Sascha Grunert (Red Hat) +translator: > + Michael Yao (DaoCloud) +--- + + + +Linux 提供了不同的命名空间来将进程彼此隔离。 +例如,一个典型的 Kubernetes Pod 运行在一个网络命名空间中可以隔离网络身份,运行在一个 PID 命名空间中可以隔离进程。 + +Linux 有一个以前一直未被容器化应用所支持的命名空间是[用户命名空间](https://man7.org/linux/man-pages/man7/user_namespaces.7.html)。 +这个命名空间允许我们将容器内使用的用户标识符和组标识符(UID 和 GID)与主机上的标识符隔离开来。 + + +这是一个强大的抽象,允许我们以 “root” 身份运行容器: +我们在容器内部有 root 权限,可以在 Pod 内执行所有 root 能做的操作, +但我们与主机的交互仅限于非特权用户可以执行的操作。这对于限制容器逃逸的影响非常有用。 + + +容器逃逸是指容器内的进程利用容器运行时或内核中的某些未打补丁的漏洞逃逸到主机上, +并可以访问/修改主机或其他容器上的文件。如果我们以用户命名空间运行我们的 Pod, +容器对主机其余部分的特权将减少,并且此容器可以访问的容器外的文件也将受到限制。 + + +在 Kubernetes v1.25 中,我们仅为无状态 Pod 引入了对用户命名空间的支持。 +Kubernetes 1.28 取消了这一限制,目前在 Kubernetes 1.30 中,这个特性进阶到了 Beta! + + +## 什么是用户命名空间? {#what-is-a-user-namespace} + +注意:Linux 用户命名空间与 +[Kubernetes 命名空间](/zh-cn/docs/concepts/overview/working-with-objects/namespaces/)是不同的概念。 +前者是一个 Linux 内核特性;后者是一个 Kubernetes 特性。 + + +用户命名空间是一个 Linux 特性,它将容器的 UID 和 GID 与主机上的隔离开来。 +容器中的标识符可以被映射为主机上的标识符,并且保证不同容器所使用的主机 UID/GID 不会重叠。 +此外,这些标识符可以被映射到主机上没有特权的、非重叠的 UID 和 GID。这带来了两个关键好处: + + +* __防止横向移动__:由于不同容器的 UID 和 GID 被映射到主机上的不同 UID 和 GID, + 即使这些标识符逃出了容器的边界,容器之间也很难互相攻击。 + 例如,假设容器 A 在主机上使用的 UID 和 GID 与容器 B 不同。 + 在这种情况下,它对容器 B 的文件和进程的操作是有限的:只能读取/写入某文件所允许的操作, + 因为它永远不会拥有文件所有者或组权限(主机上的 UID/GID 保证对不同容器是不同的)。 + + +* __增加主机隔离__:由于 UID 和 GID 被映射到主机上的非特权用户,如果某容器逃出了它的边界, + 即使它在容器内部以 root 身份运行,它在主机上也没有特权。 + 这大大保护了它可以读取/写入的主机文件,它可以向哪个进程发送信号等。 + 此外,所授予的权能仅在用户命名空间内有效,而在主机上无效,这就限制了容器逃逸的影响。 + + +{{< figure src="/images/blog/2024-04-22-userns-beta/userns-ids.png" alt="此图显示了 ID 0-65535 为主机预留,Pod 使用更大的 ID" title="用户命名空间 ID 分配" >}} + + +如果不使用用户命名空间,容器逃逸时以 root 运行的容器在节点上将具有 root 特权。 +如果某些权能授权给了此容器,这些权能在主机上也会有效。 +如果使用用户命名空间,就不会是这种情况(当然,除非有漏洞 🙂)。 + + +## 1.30 的变化 {#changes-in-1.30} + +在 Kubernetes 1.30 中,除了将用户命名空间进阶至 Beta,参与此特性的贡献者们还: + + +* 为 kubelet 引入了一种使用自定义范围进行 UID/GID 映射的方式 +* 为 Kubernetes 添加了一种强制执行的方式让运行时支持用户命名空间所需的所有特性。 + 如果不支持这些特性,Kubernetes 在尝试创建具有用户命名空间的 Pod 时,会显示一个明确的错误。 + 在 1.30 之前,如果容器运行时不支持用户命名空间,Pod 可能会在没有用户命名空间的情况下被创建。 +* 新增了更多的测试,包括在 [cri-tools](https://github.com/kubernetes-sigs/cri-tools/pull/1354) 仓库中的测试。 + + +你可以查阅有关用户命名空间的[文档](/zh-cn/docs/concepts/workloads/pods/user-namespaces/#set-up-a-node-to-support-user-namespaces), +了解如何配置映射的自定义范围。 + + +## 演示 {#demo} + +几个月前,[CVE-2024-21626][runc-cve] 被披露。 +这个 **漏洞评分为 8.6(高)**。它允许攻击者让容器逃逸,并**读取/写入节点上的任何路径以及同一节点上托管的其他 Pod**。 + +Rodrigo 创建了一个滥用 [CVE 2024-21626][runc-cve] 的演示, +演示了此漏洞在没有用户命名空间时的工作方式,而在使用用户命名空间后 **得到了缓解**。 + + +{{< youtube id="07y5bl5UDdA" title="通过启用用户命名空间支持来在 Kubernetes 上缓解 CVE-2024-21626" class="youtube-quote-sm" >}} + + +请注意,使用用户命名空间时,攻击者可以在主机文件系统上执行“其他”权限位所允许的操作。 +因此,此 CVE 并没有完全被修复,但影响大大降低。 + +[runc-cve]: https://github.com/opencontainers/runc/security/advisories/GHSA-xr7r-f8xq-vfvv + + +## 节点系统要求 {#node-system-requirements} + +使用此特性对 Linux 内核版本和容器运行时有一些要求。 + +在 Linux 上,你需要 Linux 6.3 或更高版本。 +这是因为此特性依赖于一个名为 idmap 挂载的内核特性,而支持 idmap 挂载与 tmpfs 一起使用的特性是在 Linux 6.3 中合并的。 + + +假设你使用 [CRI-O][crio] 和 crun;就像往常一样,你可以期待 CRI-O 1.30 支持 Kubernetes 1.30。 +请注意,你还需要 [crun][crun] 1.9 或更高版本。如果你使用的是 CRI-O 和 [runc][runc],则仍然不支持用户命名空间。 + +containerd 对此特性的支持目前锁定为 [containerd][containerd] 2.0,同样 crun 也有适用的版本要求。 +如果你使用的是 containerd 和 runc,则仍然不支持用户命名空间。 + + +请注意,正如在 Kubernetes 1.25 和 1.26 中实现的那样,containerd 1.7 增加了对用户命名空间的**实验性**支持。 +我们曾在 Kubernetes 1.27 中进行了重新设计,所以容器运行时需要做一些变更。 +而 containerd 1.7 并未包含这些变更,所以它仅在 Kubernetes 1.25 和 1.26 中支持使用用户命名空间。 + + +containerd 1.7 的另一个限制是,它需要在 Pod 启动期间变更容器镜像内的每个文件和目录的所有权。 +这会增加存储开销,并可能显著影响容器启动延迟。containerd 2.0 可能会包含一个实现,以消除增加的启动延迟和存储开销。 +如果你计划在生产环境中使用 containerd 1.7 和用户命名空间,请考虑这一点。 + +containerd 1.7 的这些限制均不适用于 CRI-O。 + +[crio]: https://cri-o.io/ +[crun]: https://github.com/containers/crun +[runc]: https://github.com/opencontainers/runc/ +[containerd]: https://containerd.io/ + + +## 如何参与? {#how-do-i-get-involved} + +你可以通过以下方式联系 SIG Node: + +- Slack:[#sig-node](https://kubernetes.slack.com/messages/sig-node) +- [邮件列表](https://groups.google.com/forum/#!forum/kubernetes-sig-node) +- [提交社区 Issue/PR](https://github.com/kubernetes/community/labels/sig%2Fnode) + + +你也可以通过以下方式直接联系我们: + +- GitHub:@rata @giuseppe @saschagrunert +- Slack:@rata @giuseppe @sascha From 1ca07c3df4161978b34513ad0a9abd1b947d5b7d Mon Sep 17 00:00:00 2001 From: Mengjiao Liu Date: Mon, 20 May 2024 16:19:46 +0800 Subject: [PATCH 1074/1086] [zh-cn] Sync the blog page and partners page for vanilla Docsy --- content/zh-cn/blog/_index.md | 4 +- content/zh-cn/includes/partner-style.css | 201 ----------------------- content/zh-cn/partners/_index.html | 12 +- 3 files changed, 5 insertions(+), 212 deletions(-) delete mode 100644 content/zh-cn/includes/partner-style.css diff --git a/content/zh-cn/blog/_index.md b/content/zh-cn/blog/_index.md index ddd878254a..06fd61efe2 100644 --- a/content/zh-cn/blog/_index.md +++ b/content/zh-cn/blog/_index.md @@ -4,9 +4,7 @@ linkTitle: 博客 menu: main: title: "博客" - weight: 40 - post: > -

    阅读关于 kubernetes 和容器规范的最新信息,以及获取最新的技术。

    + weight: 20 --- {{< comment >}} diff --git a/content/zh-cn/includes/partner-style.css b/content/zh-cn/includes/partner-style.css deleted file mode 100644 index dc120872e0..0000000000 --- a/content/zh-cn/includes/partner-style.css +++ /dev/null @@ -1,201 +0,0 @@ -/* SECTIONS */ -.section { - clear: both; - padding: 0px; - margin-bottom: 2em; -} - -.kcsp_section { - clear: both; - padding: 0px; - margin-bottom: 2em; -} - -/* COLUMN SETUP */ -.col { - display: block; - float:left; - margin: 1% 0 1% 1.6%; - background-color: #f9f9f9; -} -.col:first-child { margin-left: 0; } - - -/* GROUPING */ -.group:before, -.group:after { - content:""; - display:table; -} -.group:after { - clear:both; -} -.group { - zoom:1; /* For IE 6/7 */ -} - -/* GRID OF THREE */ -.span_3_of_3 { - width: 35%; - background-color: #f9f9f9; - padding: 20px; -} -.span_2_of_3 { - width: 35%; - background-color: #f9f9f9; - padding: 20px; -} -.span_1_of_3 { - width: 35%; - background-color: #f9f9f9; - padding: 20px; -} - -.col-container { - display: table; /* Make the container element behave like a table */ - width: 100%; /* Set full-width to expand the whole page */ - padding-bottom: 30px; -} - -.col-nav { - display: table-cell; /* Make elements inside the container behave like table cells */ - width: 18%; - background-color: #f9f9f9; - padding: 20px; - border: 5px solid white; -} - -/* GO FULL WIDTH AT LESS THAN 480 PIXELS */ - -@media only screen and (max-width: 480px) { - .col { margin: 1% 0 1% 0%;} - .span_3_of_3, .span_2_of_3, .span_1_of_3 { width: 100%; } -} - -@media only screen and (max-width: 650px) { - .col-nav { - display: block; - width: 100%; - } -} - -.button{ - max-width: 100%; - box-sizing: border-box; - margin: 0; - display: inline-block; - border-radius: 6px; - padding: 0 20px; - line-height: 40px; - color: #ffffff; - font-size: 16px; - background-color: #3371e3; - text-decoration: none; - } - -h5 { - font-size: 16px; - line-height: 1.5em; - margin-bottom: 2em; -} - -#usersGrid a { - display: inline-block; - background-color: #f9f9f9; -} - -#ktpContainer, #distContainer, #kcspContainer, #isvContainer, #servContainer { - position: relative; - width: 100%; - display: flex; - justify-content: space-between; - flex-wrap: wrap; -} - -#isvContainer { - margin-bottom: 80px; -} - -#kcspContainer { - margin-bottom: 80px; -} - -#distContainer { - margin-bottom: 80px; -} - -#ktpContainer { - margin-bottom: 80px; -} - -.partner-box { - position: relative; - width: 47%; - max-width: 48%; - min-width: 48%; - margin-bottom: 20px; - padding: 20px; - flex: 1; - display: flex; - justify-content: left; - align-items: flex-start; -} - -.partner-box img { - background-color: #f9f9f9; -} - -.partner-box > div { - margin-left: 30px; -} - -.partner-box a { - color: #3576E3; -} - -@media screen and (max-width: 1024px) { - .partner-box { - flex-direction: column; - justify-content: flex-start; - } - - .partner-box > div { - margin: 20px 0 0; - } -} - -@media screen and (max-width: 568px) { - #ktpContainer, #distContainter, #kcspContainer, #isvContainer, #servContainer { - justify-content: center; - } - - .partner-box { - flex-direction: column; - justify-content: flex-start; - width: 100%; - max-width: 100%; - min-width: 100%; - } - - .partner-box > div { - margin: 20px 0 0; - } -} - -@media screen and (max-width: 568px) { - #ktpContainer, #distContainer, #kcspContainer, #isvContainer, #servContainer { - justify-content: center; - } - - .partner-box { - flex-direction: column; - justify-content: flex-start; - width: 100%; - max-width: 100%; - min-width: 100%; - } - - .partner-box > div { - margin: 20px 0 0; - } -} diff --git a/content/zh-cn/partners/_index.html b/content/zh-cn/partners/_index.html index 5be8838317..0f06ea6702 100644 --- a/content/zh-cn/partners/_index.html +++ b/content/zh-cn/partners/_index.html @@ -4,6 +4,10 @@ bigheader: Kubernetes 合作伙伴 abstract: 发展 Kubernetes 生态圈 class: gridPage cid: partners +body_class: partners +menu: + main: + weight: 40 --- Kubernetes 认证服务提供商 @@ -36,7 +39,6 @@ cid: partners
    -
    Kubernetes 认证的发行版本、托管平台以及安装工具 @@ -49,10 +51,8 @@ cid: partners Kubernetes Certified? -->

    想要成为 Kubernetes 认证的厂商吗? -
    -
    Kubernetes 培训合作伙伴 @@ -66,12 +66,8 @@ cid: partners KTP? -->

    想要成为 KTP 吗? -
    {{< cncf-landscape helpers=true >}} - From 4f96f2e40a7f736e106a1a2dcf2dc046f120af78 Mon Sep 17 00:00:00 2001 From: Mengjiao Liu Date: Mon, 20 May 2024 16:45:58 +0800 Subject: [PATCH 1075/1086] [zh-cn] Sync hello-minikube.md --- content/zh-cn/docs/tutorials/hello-minikube.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/content/zh-cn/docs/tutorials/hello-minikube.md b/content/zh-cn/docs/tutorials/hello-minikube.md index 1ea5bffd14..fc90177365 100644 --- a/content/zh-cn/docs/tutorials/hello-minikube.md +++ b/content/zh-cn/docs/tutorials/hello-minikube.md @@ -200,6 +200,11 @@ Deployment 是管理 Pod 创建和扩展的推荐方法。 hello-node 1/1 1 1 1m ``` + + (该 Pod 可能需要一些时间才能变得可用。如果你在输出结果中看到 “0/1”,请在几秒钟后重试。) + From 59b9257dc0d04a358f39c22558ad8c253dd36b0d Mon Sep 17 00:00:00 2001 From: xin gu <418294249@qq.com> Date: Sun, 19 May 2024 20:17:39 +0800 Subject: [PATCH 1076/1086] sync encrypt-data kms-provider connect-applications-service Update encrypt-data.md Update encrypt-data.md --- .../zh-cn/docs/tasks/administer-cluster/encrypt-data.md | 9 ++++++++- .../zh-cn/docs/tasks/administer-cluster/kms-provider.md | 8 ++++---- .../tutorials/services/connect-applications-service.md | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/content/zh-cn/docs/tasks/administer-cluster/encrypt-data.md b/content/zh-cn/docs/tasks/administer-cluster/encrypt-data.md index 748456b680..ff01227373 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/encrypt-data.md +++ b/content/zh-cn/docs/tasks/administer-cluster/encrypt-data.md @@ -1294,10 +1294,17 @@ API server. 要允许自动重新加载, 可使用 `--encryption-provider-config-automatic-reload=true` 运行 API 服务器。 +该功能启用后,每分钟会轮询文件变化以监测修改情况。 +`apiserver_encryption_config_controller_automatic_reload_last_timestamp_seconds` 指标用于标识新配置生效的时间。 +这种设置可以在不重启 API 服务器的情况下轮换加密密钥。 ## {{% heading "whatsnext" %}} diff --git a/content/zh-cn/docs/tasks/administer-cluster/kms-provider.md b/content/zh-cn/docs/tasks/administer-cluster/kms-provider.md index c80d571e45..213f18d201 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/kms-provider.md +++ b/content/zh-cn/docs/tasks/administer-cluster/kms-provider.md @@ -540,12 +540,12 @@ defined in a CustomResourceDefinition, your cluster must be running Kubernetes v providers: - kms: name: myKmsPluginFoo - endpoint: unix:///tmp/socketfile.sock + endpoint: unix:///tmp/socketfile-foo.sock cachesize: 100 timeout: 3s - kms: name: myKmsPluginBar - endpoint: unix:///tmp/socketfile.sock + endpoint: unix:///tmp/socketfile-bar.sock cachesize: 100 timeout: 3s ``` @@ -564,12 +564,12 @@ defined in a CustomResourceDefinition, your cluster must be running Kubernetes v - kms: apiVersion: v2 name: myKmsPluginFoo - endpoint: unix:///tmp/socketfile.sock + endpoint: unix:///tmp/socketfile-foo.sock timeout: 3s - kms: apiVersion: v2 name: myKmsPluginBar - endpoint: unix:///tmp/socketfile.sock + endpoint: unix:///tmp/socketfile-bar.sock timeout: 3s ``` diff --git a/content/zh-cn/docs/tutorials/services/connect-applications-service.md b/content/zh-cn/docs/tutorials/services/connect-applications-service.md index faf1af0651..c093f4a090 100644 --- a/content/zh-cn/docs/tutorials/services/connect-applications-service.md +++ b/content/zh-cn/docs/tutorials/services/connect-applications-service.md @@ -185,7 +185,7 @@ As mentioned previously, a Service is backed by a group of Pods. These Pods are exposed through {{}}. The Service's selector will be evaluated continuously and the results will be POSTed -to an EndpointSlice that is connected to the Service using a +to an EndpointSlice that is connected to the Service using {{< glossary_tooltip text="labels" term_id="label" >}}. When a Pod dies, it is automatically removed from the EndpointSlices that contain it as an endpoint. New Pods that match the Service's selector will automatically get added From f800d8f857e5ef4b279e4b960f1eec3bce1e5d87 Mon Sep 17 00:00:00 2001 From: steve-hardman <132999137+steve-hardman@users.noreply.github.com> Date: Sat, 11 May 2024 19:17:26 +0100 Subject: [PATCH 1077/1086] Add banner for KubeCon China 2024 --- data/announcements/scheduled.yaml | 15 +++++++++++++++ .../announcements/kubecon-china-2024-white.svg | 1 + 2 files changed, 16 insertions(+) create mode 100644 static/images/announcements/kubecon-china-2024-white.svg diff --git a/data/announcements/scheduled.yaml b/data/announcements/scheduled.yaml index 1ebf187440..56d0b4288d 100644 --- a/data/announcements/scheduled.yaml +++ b/data/announcements/scheduled.yaml @@ -232,3 +232,18 @@ announcements: Buy your ticket now! 19 - 22 March | Paris, France + +- name: KubeCon 2024 China + startTime: 2024-07-26T00:00:00 #Added in https://github.com/kubernetes/website/pull/46431 + endTime: 2024-08-23T18:00:00 + style: >- + background: linear-gradient(90deg, rgba(229,64,216,1) 60%, rgba(0,212,255,1) 100%); + color: #fffff; + title: | + + KubeCon + CloudNativeCon + Open Source Summit China 2024 + message: | + Join us for three days of incredible opportunities to collaborate, learn and share with the cloud native community.
    + + Buy your ticket now! 21 - 23 August | Hong Kong + diff --git a/static/images/announcements/kubecon-china-2024-white.svg b/static/images/announcements/kubecon-china-2024-white.svg new file mode 100644 index 0000000000..e0f6051974 --- /dev/null +++ b/static/images/announcements/kubecon-china-2024-white.svg @@ -0,0 +1 @@ + \ No newline at end of file From 54318fb23e4f02cfe1795d4a2ce867c97a68a6ea Mon Sep 17 00:00:00 2001 From: tico88612 <17496418+tico88612@users.noreply.github.com> Date: Tue, 21 May 2024 08:37:22 +0800 Subject: [PATCH 1078/1086] [zh-cn] sync reference/node content Signed-off-by: tico88612 <17496418+tico88612@users.noreply.github.com> --- content/zh-cn/docs/reference/node/kubelet-checkpoint-api.md | 2 +- .../node/topics-on-dockershim-and-cri-compatible-runtimes.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/zh-cn/docs/reference/node/kubelet-checkpoint-api.md b/content/zh-cn/docs/reference/node/kubelet-checkpoint-api.md index f3c602d11c..ebdb6866f6 100644 --- a/content/zh-cn/docs/reference/node/kubelet-checkpoint-api.md +++ b/content/zh-cn/docs/reference/node/kubelet-checkpoint-api.md @@ -118,7 +118,7 @@ POST /checkpoint/{namespace}/{pod}/{container} @@ -103,6 +103,6 @@ You can provide feedback via the GitHub issue [**Dockershim removal feedback & i * Mirantis 博客:[Dockershim 的未来是 cri-dockerd](https://www.mirantis.com/blog/the-future-of-dockershim-is-cri-dockerd/)(发表于 2021/04/21) -* Mirantis: [Mirantis/cri-dockerd](https://github.com/Mirantis/cri-dockerd) Git 仓库(在 GitHub 上) +* Mirantis: [Mirantis/cri-dockerd](https://mirantis.github.io/cri-dockerd/) 官方文档 * Tripwire:[Dockershim 即将弃用如何影响你的 Kubernetes](https://www.tripwire.com/state-of-security/security-data-protection/cloud/how-dockershim-forthcoming-deprecation-affects-your-kubernetes/) (发表于 2021/07/01) From 328133994b145aa9e219fb5c1d0a6f7a36afdfba Mon Sep 17 00:00:00 2001 From: windsonsea Date: Tue, 21 May 2024 10:59:20 +0800 Subject: [PATCH 1079/1086] Fix dashes in front matter to 2024-02-22-k8s-book-club --- .../_posts/2024-02-22-k8s-book-club/index.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/content/en/blog/_posts/2024-02-22-k8s-book-club/index.md b/content/en/blog/_posts/2024-02-22-k8s-book-club/index.md index 74e2c4f70a..11091f1b94 100644 --- a/content/en/blog/_posts/2024-02-22-k8s-book-club/index.md +++ b/content/en/blog/_posts/2024-02-22-k8s-book-club/index.md @@ -1,4 +1,4 @@ ------- +--- layout: blog title: "A look into the Kubernetes Book Club" slug: k8s-book-club @@ -106,8 +106,7 @@ Book Club's reach and impact in the community. **CS**: There are three steps to join: -- First, join the [Kubernetes Book Club - Community](https://community.cncf.io/kubernetes-virtual-book-club/) +- First, join the [Kubernetes Book Club Community](https://community.cncf.io/kubernetes-virtual-book-club/) - Then RSVP to the [events](https://community.cncf.io/kubernetes-virtual-book-club/) on the community page @@ -117,10 +116,10 @@ Book Club's reach and impact in the community. **FSM**: Excellent, thank you! Any final comments you would like to share? **CS**: The Kubernetes Book Club is more than just a group of professionals discussing books; it's a -vibrant community and amazing volunteers that help organize and host [Neependra -Khare](https://www.linkedin.com/in/neependra/), [Eric -Smalling](https://www.linkedin.com/in/ericsmalling/), [Sevi -Karakulak](https://www.linkedin.com/in/sevikarakulak/), [Chad -M. Crowell](https://www.linkedin.com/in/chadmcrowell/), and [Walid (CNJ) -Shaari](https://www.linkedin.com/in/walidshaari/). Look us up at KubeCon and get your Kubernetes -Book Club sticker! +vibrant community and amazing volunteers that help organize and host +[Neependra Khare](https://www.linkedin.com/in/neependra/), +[Eric Smalling](https://www.linkedin.com/in/ericsmalling/), +[Sevi Karakulak](https://www.linkedin.com/in/sevikarakulak/), +[Chad M. Crowell](https://www.linkedin.com/in/chadmcrowell/), +and [Walid (CNJ) Shaari](https://www.linkedin.com/in/walidshaari/). +Look us up at KubeCon and get your Kubernetes Book Club sticker! From f6794570678f2e732f5e9f5de7737924f369d80a Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 21 May 2024 20:47:33 +0800 Subject: [PATCH 1080/1086] [zh] Sync reference/scheduling/config.md --- .../zh-cn/docs/reference/scheduling/config.md | 61 ++++++++++++++++--- 1 file changed, 52 insertions(+), 9 deletions(-) diff --git a/content/zh-cn/docs/reference/scheduling/config.md b/content/zh-cn/docs/reference/scheduling/config.md index 352e5b77ad..f8786ace6b 100644 --- a/content/zh-cn/docs/reference/scheduling/config.md +++ b/content/zh-cn/docs/reference/scheduling/config.md @@ -8,6 +8,7 @@ title: Scheduler Configuration content_type: concept weight: 20 --> + {{< feature-state for_k8s_version="v1.25" state="stable" >}} KubeSchedulerConfiguration v1beta3 在 v1.26 中已被弃用, -并将在 v1.29 中被移除。请将 KubeSchedulerConfiguration 迁移到 [v1](/zh-cn/docs/reference/config-api/kube-scheduler-config.v1/)。 +并将在 v1.29 中被移除。请将 KubeSchedulerConfiguration 迁移到 +[v1](/zh-cn/docs/reference/config-api/kube-scheduler-config.v1/)。 {{< /note >}} -10. `bind`:这个插件将 Pod 与节点绑定。`bind` 插件是按顺序调用的,只要有一个插件完成了绑定,其余插件都会跳过。`bind` 插件至少需要一个。 +10. `bind`:这个插件将 Pod 与节点绑定。`bind` 插件是按顺序调用的,只要有一个插件完成了绑定, + 其余插件都会跳过。`bind` 插件至少需要一个。 -Pod 的调度事件把 `.spec.schedulerName` 字段值作为 ReportingController。 +Pod 的调度事件把 `.spec.schedulerName` 字段值作为它们的 `ReportingController`。 领导者选举事件使用列表中第一个配置文件的调度器名称。 + +有关更多信息,请参阅 +[Event API 参考文档](/zh-cn/docs/reference/kubernetes-api/cluster-resources/event-v1/)中的 +`reportingController` 一节。 {{< /note >}} {{< note >}} @@ -495,7 +504,8 @@ profile config, `multiPoint`, which allows for easily enabling or disabling a pl across several extension points. The intent of `multiPoint` config is to simplify the configuration needed for users and administrators when using custom profiles. --> -从 `kubescheduler.config.k8s.io/v1beta3` 开始,配置文件配置中有一个附加字段 `multiPoint`,它允许跨多个扩展点轻松启用或禁用插件。 +从 `kubescheduler.config.k8s.io/v1beta3` 开始,配置文件配置中有一个附加字段 +`multiPoint`,它允许跨多个扩展点轻松启用或禁用插件。 `multiPoint` 配置的目的是简化用户和管理员在使用自定义配置文件时所需的配置。 在 `v1beta3` 之前的配置版本中,没有 `multiPoint`,上面的代码片段等同于: + ```yaml apiVersion: kubescheduler.config.k8s.io/v1beta2 kind: KubeSchedulerConfiguration @@ -781,7 +824,7 @@ as well as its seamless integration with the existing methods for configuring ex * The scheduler plugin `NodeLabel` is deprecated; instead, use the [`NodeAffinity`](/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity) plugin (enabled by default) to achieve similar behavior. --> * 调度器插件 `NodeLabel` 已弃用; - 相反,要使用 [`NodeAffinity`](/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity) + 相反,要使用 [`NodeAffinity`](/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity) 插件(默认启用)来实现类似的行为。 * 调度器插件 `NodePreferAvoidPods` 已弃用; - 相反,使用 [节点污点](/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/) 来实现类似的行为。 + 相反,使用[节点污点](/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/)来实现类似的行为。 即使你没有目标系统的 root 权限,仍然可以将 kubectl 安装到目录 `~/.local/bin` 中: + ```bash chmod +x kubectl mkdir -p ~/.local/bin @@ -202,13 +205,13 @@ Or use this for detailed view of version: ```shell sudo apt-get update # apt-transport-https may be a dummy package; if so, you can skip that package - sudo apt-get install -y apt-transport-https ca-certificates curl + sudo apt-get install -y apt-transport-https ca-certificates curl gnupg ``` --> ```shell sudo apt-get update # apt-transport-https 可以是一个虚拟包;如果是这样,你可以跳过这个包 - sudo apt-get install -y apt-transport-https ca-certificates curl + sudo apt-get install -y apt-transport-https ca-certificates curl gnupg ``` +--> 要将 kubectl 升级到别的次要版本,你需要先升级 `/etc/apt/sources.list.d/kubernetes.list` 中的版本, 再运行 `apt-get update` 和 `apt-get upgrade` 命令。 更详细的步骤可以在[更改 Kubernetes 软件包存储库](/zh-cn/docs/tasks/administer-cluster/kubeadm/change-package-repository/)中找到。 @@ -268,7 +271,6 @@ To upgrade kubectl to another minor release, you'll need to bump the version in - 4. 更新 `apt` 包索引,然后安装 kubectl: ```shell @@ -377,14 +379,14 @@ To upgrade kubectl to another minor release, you'll need to bump the version in 此过程在[更改 Kubernetes 软件包仓库](/zh-cn/docs/tasks/administer-cluster/kubeadm/change-package-repository/)中有更详细的描述。 {{< /note >}} - - 2. 使用 `zypper` 安装 kubectl: + +2. 使用 `zypper` 安装 kubectl: - ```bash - sudo zypper install -y kubectl - ``` + ```bash + sudo zypper install -y kubectl + ``` {{% /tab %}} From 6e1da05ec7a0a9e5b7bc50c2fe0a3c387e685b34 Mon Sep 17 00:00:00 2001 From: Arhell Date: Wed, 22 May 2024 00:34:14 +0300 Subject: [PATCH 1082/1086] [pl] Ready glossary page for vanilla Docsy --- content/pl/docs/reference/glossary/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/pl/docs/reference/glossary/index.md b/content/pl/docs/reference/glossary/index.md index 642bdbdfb2..8dcd185c2c 100644 --- a/content/pl/docs/reference/glossary/index.md +++ b/content/pl/docs/reference/glossary/index.md @@ -2,6 +2,7 @@ title: Słownik layout: glossary noedit: true +body_class: glossary default_active_tag: fundamental weight: 5 card: From bb16b85bd4881d236e1e8e5a61f3520163e18fdf Mon Sep 17 00:00:00 2001 From: Mauren Berti Date: Tue, 21 May 2024 19:37:05 -0400 Subject: [PATCH 1083/1086] [pt-br] Update navbar items for vanilla Docsy Update navbar items in the Brazilian Portuguese localization so layout renders correctly using vanilla Docsy. --- content/pt-br/blog/_index.md | 4 +--- content/pt-br/case-studies/_index.md | 3 +++ content/pt-br/community/_index.html | 3 +++ content/pt-br/docs/home/_index.md | 2 -- content/pt-br/docs/tutorials/hello-minikube.md | 6 ------ content/pt-br/partners/_index.html | 4 ++++ 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/content/pt-br/blog/_index.md b/content/pt-br/blog/_index.md index 0dc046378f..715377917f 100644 --- a/content/pt-br/blog/_index.md +++ b/content/pt-br/blog/_index.md @@ -4,7 +4,5 @@ linkTitle: Blog menu: main: title: "Blog" - weight: 40 - post: > -

    Leia as últimas novidades sobre Kubernetes e contêineres em geral, e obtenha detalhes técnicos atualizados

    + weight: 20 --- diff --git a/content/pt-br/case-studies/_index.md b/content/pt-br/case-studies/_index.md index 427d5bf143..386dea7e0e 100644 --- a/content/pt-br/case-studies/_index.md +++ b/content/pt-br/case-studies/_index.md @@ -6,4 +6,7 @@ abstract: Alguns usuários que estão executando o Kubernetes em produção. layout: basic class: gridPage cid: caseStudies +menu: + main: + weight: 60 --- \ No newline at end of file diff --git a/content/pt-br/community/_index.html b/content/pt-br/community/_index.html index fa7726379f..11cf8b1160 100644 --- a/content/pt-br/community/_index.html +++ b/content/pt-br/community/_index.html @@ -3,6 +3,9 @@ title: Comunidade layout: basic cid: community community_styles_migrated: true +menu: + main: + weight: 50 --- -

    Aprenda a usar o Kubernetes com documentação conceitual, tutorial e de referência. Você também pode ajudar a contribuir para a documentação!

    overview: > O Kubernetes é uma engine de orquestração de contêineres Open Source utilizado para automatizar a implantação, dimensionamento e gerenciamento de aplicativos em contêiner. O projeto é hospedado por the Cloud Native Computing Foundation (CNCF). cards: diff --git a/content/pt-br/docs/tutorials/hello-minikube.md b/content/pt-br/docs/tutorials/hello-minikube.md index 3101c62416..9ad8304cb2 100644 --- a/content/pt-br/docs/tutorials/hello-minikube.md +++ b/content/pt-br/docs/tutorials/hello-minikube.md @@ -2,12 +2,6 @@ title: Olá, Minikube! content_type: tutorial weight: 5 -menu: - main: - title: "Iniciar" - weight: 10 - post: > -

    Pronto para meter a mão na massa? Vamos criar um cluster Kubernetes simples e executar uma aplicação exemplo.

    card: name: tutorials weight: 10 diff --git a/content/pt-br/partners/_index.html b/content/pt-br/partners/_index.html index d656e1a06a..822bf7314e 100644 --- a/content/pt-br/partners/_index.html +++ b/content/pt-br/partners/_index.html @@ -4,6 +4,10 @@ bigheader: Parceiro Kubernetes abstract: Crescendo o ecossistema do Kubernetes. class: gridPage cid: parceiros +body_class: partners +menu: + main: + weight: 40 ---
    From e01500f5e1a267ea71e6a19b50fc5efeb7a21c82 Mon Sep 17 00:00:00 2001 From: Qiming Teng Date: Tue, 21 May 2024 13:58:12 +0800 Subject: [PATCH 1084/1086] Fix feature gates that have been been removed in 1.30 --- .../feature-gates/api-self-subject-review.md | 2 ++ .../feature-gates/csi-migration-azure-file.md | 2 ++ .../feature-gates/expanded-dns-config.md | 2 ++ .../experimental-host-user-namespace-defaulting.md | 2 ++ .../feature-gates/ip-tables-ownership-cleanup.md | 2 ++ .../feature-gates/kubelet-pod-resources-get-allocatable.md | 2 ++ .../feature-gates/kubelet-pod-resources.md | 2 ++ .../feature-gates/legacy-service-account-token-tracking.md | 3 ++- .../feature-gates/minimize-ip-tables-restore.md | 2 ++ .../feature-gates/proxy-terminating-endpoints.md | 2 ++ .../feature-gates/security-context-deny.md | 2 ++ 11 files changed, 22 insertions(+), 1 deletion(-) diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/api-self-subject-review.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/api-self-subject-review.md index dc706fb51a..a0d46d6d87 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates/api-self-subject-review.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/api-self-subject-review.md @@ -18,6 +18,8 @@ stages: - stage: stable defaultValue: true fromVersion: "1.28" + toVersion: "1.29" +removed: true --- Activate the `SelfSubjectReview` API which allows users to see the requesting subject's authentication information. diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/csi-migration-azure-file.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/csi-migration-azure-file.md index 0b7b455060..456c99e192 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates/csi-migration-azure-file.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/csi-migration-azure-file.md @@ -21,6 +21,8 @@ stages: - stage: stable defaultValue: true fromVersion: "1.26" + toVersion: "1.29" +removed: true --- Enables shims and translation logic to route volume operations from the Azure-File in-tree plugin to AzureFile CSI plugin. diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/expanded-dns-config.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/expanded-dns-config.md index eb2adb3b4d..1c1d37e975 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates/expanded-dns-config.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/expanded-dns-config.md @@ -17,6 +17,8 @@ stages: - stage: stable defaultValue: true fromVersion: "1.28" + toVersion: "1.29" +removed: true --- Enable kubelet and kube-apiserver to allow more DNS search paths and longer list of DNS search paths. This feature requires container diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/experimental-host-user-namespace-defaulting.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/experimental-host-user-namespace-defaulting.md index ceab94cb9e..4eeec95c82 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates/experimental-host-user-namespace-defaulting.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/experimental-host-user-namespace-defaulting.md @@ -13,6 +13,8 @@ stages: - stage: deprecated defaultValue: false fromVersion: "1.28" + toVersion: "1.29" +removed: true --- Enabling the defaulting user namespace to host. This is for containers that are using other host namespaces, diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/ip-tables-ownership-cleanup.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/ip-tables-ownership-cleanup.md index 9144f61e40..93d36b1052 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates/ip-tables-ownership-cleanup.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/ip-tables-ownership-cleanup.md @@ -17,5 +17,7 @@ stages: - stage: stable defaultValue: true fromVersion: "1.28" + toVersion: "1.29" +removed: true --- This causes kubelet to no longer create legacy iptables rules. diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/kubelet-pod-resources-get-allocatable.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/kubelet-pod-resources-get-allocatable.md index 4ab61fbec8..b23a7c626c 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates/kubelet-pod-resources-get-allocatable.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/kubelet-pod-resources-get-allocatable.md @@ -17,6 +17,8 @@ stages: - stage: stable defaultValue: true fromVersion: "1.28" + toVersion: "1.29" +removed: true --- Enable the kubelet's pod resources `GetAllocatableResources` functionality. This API augments the diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/kubelet-pod-resources.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/kubelet-pod-resources.md index 80c3f1a35c..4a7a4ac13b 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates/kubelet-pod-resources.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/kubelet-pod-resources.md @@ -17,6 +17,8 @@ stages: - stage: stable defaultValue: true fromVersion: "1.28" + toVersion: "1.29" +removed: true --- Enable the kubelet's pod resources gRPC endpoint. See [Support Device Monitoring](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/606-compute-device-assignment/README.md) diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/legacy-service-account-token-tracking.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/legacy-service-account-token-tracking.md index 26a4af5930..6b28152589 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates/legacy-service-account-token-tracking.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/legacy-service-account-token-tracking.md @@ -17,7 +17,8 @@ stages: - stage: stable defaultValue: true fromVersion: "1.28" - + toVersion: "1.29" +removed: true --- Track usage of Secret-based [service account tokens](/docs/concepts/security/service-accounts/#get-a-token). diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/minimize-ip-tables-restore.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/minimize-ip-tables-restore.md index 0e8f0c7d1f..5e8dc0feaa 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates/minimize-ip-tables-restore.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/minimize-ip-tables-restore.md @@ -17,6 +17,8 @@ stages: - stage: stable defaultValue: true fromVersion: "1.28" + toVersion: "1.29" +removed: true --- Enables new performance improvement logics in the kube-proxy iptables mode. diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/proxy-terminating-endpoints.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/proxy-terminating-endpoints.md index debb78efaf..1076ed5340 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates/proxy-terminating-endpoints.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/proxy-terminating-endpoints.md @@ -17,6 +17,8 @@ stages: - stage: stable defaultValue: true fromVersion: "1.28" + toVersion: "1.29" +removed: true --- Enable the kube-proxy to handle terminating endpoints when `ExternalTrafficPolicy=Local`. diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates/security-context-deny.md b/content/en/docs/reference/command-line-tools-reference/feature-gates/security-context-deny.md index d4947c6d41..29bf02d194 100644 --- a/content/en/docs/reference/command-line-tools-reference/feature-gates/security-context-deny.md +++ b/content/en/docs/reference/command-line-tools-reference/feature-gates/security-context-deny.md @@ -9,5 +9,7 @@ stages: - stage: alpha defaultValue: false fromVersion: "1.27" + toVersion: "1.29" +removed: true --- This gate signals that the `SecurityContextDeny` admission controller is deprecated. From 8c2a3c6d0f4597b1d9492d0fa7bfa64515e2a3e4 Mon Sep 17 00:00:00 2001 From: "xin.li" Date: Tue, 21 May 2024 19:32:37 +0800 Subject: [PATCH 1085/1086] [zh-cn] Localize blog: 2024-05-20-cloud-provider-migration.md Signed-off-by: xin.li --- .../2024-05-20-cloud-provider-migration.md | 214 ++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 content/zh-cn/blog/_posts/2024-05-20-cloud-provider-migration.md diff --git a/content/zh-cn/blog/_posts/2024-05-20-cloud-provider-migration.md b/content/zh-cn/blog/_posts/2024-05-20-cloud-provider-migration.md new file mode 100644 index 0000000000..ce6c1ba0fa --- /dev/null +++ b/content/zh-cn/blog/_posts/2024-05-20-cloud-provider-migration.md @@ -0,0 +1,214 @@ +--- +layout: blog +title: '完成 Kubernetes 史上最大规模迁移' +date: 2024-05-20 +slug: completing-cloud-provider-migration +author: > + Andrew Sy Kim (Google), + Michelle Au (Google), + Walter Fender (Google), + Michael McCune (Red Hat) +translator: > + Xin Li (DaoCloud) +--- + + + + +早自 Kubernetes v1.7 起,Kubernetes 项目就开始追求取消集成内置云驱动 +([KEP-2395](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2395-removing-in-tree-cloud-providers/README.md))。 +虽然这些集成对于 Kubernetes 的早期发展和增长发挥了重要作用,但它们的移除是由两个关键因素驱动的: +为各云启动维护数百万行 Go 代码的原生支持所带来的日趋增长的复杂度,以及将 Kubernetes 打造为真正的供应商中立平台的愿景。 + + +历经很多发布版本之后,我们很高兴地宣布所有云驱动集成组件已被成功地从核心 Kubernetes 仓库迁移到外部插件中。 +除了实现我们最初的目标之外,我们还通过删除大约 150 万行代码,将核心组件的可执行文件大小减少了大约 40%, +极大简化了 Kubernetes。 + + +由于受影响的组件众多,而且关键代码路径依赖于五个初始云驱动(Google Cloud、AWS、Azure、OpenStack 和 vSphere) +的内置集成,因此此次迁移是一项复杂且耗时的工作。 +为了成功完成此迁移,我们必须从头开始构建四个新的子系统: + + +1. **云控制器管理器(Cloud controller manager)**([KEP-2392](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cloud-provider/2392-cloud-controller-manager/README.md)) +1. **API 服务器网络代理**([KEP-1281](https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/1281-network-proxy)) +1. **kubelet 凭证提供程序插件**([KEP-2133](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2133-kubelet-credential-providers)) +1. **存储迁移以使用 [CSI](https://github.com/container-storage-interface/spec?tab=readme-ov-file#container-storage-interface-csi-specification-)**([KEP-625](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/625-csi-migration/README.md)) + + +就与内置功能实现完全的特性等价而言,每个子系统都至关重要, +并且需要迭代多个版本才能使每个子系统达到 GA 级别并具有安全可靠的迁移路径。 +下面详细介绍每个子系统。 + + +### 云控制器管理器 + +云控制器管理器是这项工作中引入的第一个外部组件,取代了 kube-controller-manager 和 kubelet 中直接与云 API 交互的功能。 +这个基本组件负责通过施加元数据标签来初始化节点。所施加的元数据标签标示节点运行所在的云区域和可用区, +以及只有云驱动知道的 IP 地址。 +此外,它还运行服务控制器,该控制器负责为 LoadBalancer 类型的 Service 配置云负载均衡器。 + +![Kubernetes 组件](/images/docs/components-of-kubernetes.svg) + + +要进一步了解相关信息,请阅读 Kubernetes 文档中的[云控制器管理器](/zh-cn/docs/concepts/architecture/cloud-controller/)。 + + +### API 服务器网络代理 + +API 服务器网络代理项目于 2018 年与 SIG API Machinery 合作启动,旨在取代 kube-apiserver 中的 SSH 隧道功能。 +该隧道器原用于安全地代理 Kubernetes 控制平面和节点之间的流量,但它重度依赖于 +kube-apiserver 中所嵌入的、特定于提供商的实现细节来建立这些 SSH 隧道。 + + +现在,API 服务器网络代理成为 kube-apiserver 中 GA 级别的扩展点。 +提供了一种通用代理机制,可以通过一个安全的代理将流量从 API 服务器路由到节点, +从而使 API 服务器无需了解其运行所在的特定云驱动。 +此项目还引入了 Konnectivity 项目,该项目在生产环境中的采用越来越多。 + + +你可以在其 [README](https://github.com/kubernetes-sigs/apiserver-network-proxy#readme) +中了解有关 API 服务器网络代理的更多信息。 + + +### kubelet 的凭据提供程序插件 + +kubelet 凭据提供程序插件的开发是为了取代 kubelet 的内置功能,用于动态获取用于托管在 +Google Cloud、AWS 或 Azure 上的镜像仓库的凭据。 +原来所实现的功能很方便,因为它允许 kubelet 无缝地获取短期令牌以从 GCR、ECR 或 ACR 拉取镜像 +然而,与 Kubernetes 的其他领域一样,支持这一点需要 kubelet 具有不同云环境和 API 的特定知识。 + + +凭据驱动插件机制于 2019 年推出,为 kubelet 提供了一个通用扩展点用于执行插件的可执行文件, +进而为访问各种云上托管的镜像动态提供凭据。 +可扩展性扩展了 kubelet 获取短期令牌的能力,且不受限于最初的三个云驱动。 + + +要了解更多信息,请阅读[用于认证镜像拉取的 kubelet 凭据提供程序](/zh-cn/docs/concepts/containers/images/#kubelet-credential-provider)。 + + +### 存储插件从树内迁移到 CSI + +容器存储接口(Container Storage Interface,CSI)是一种控制平面标准,用于管理 Kubernetes +和其他容器编排系统中的块和文件存储系统,已在 1.13 中进入正式发布状态。 +它的设计目标是用可在 Kubernetes 集群中 Pod 内运行的驱动程序替换直接内置于 Kubernetes 中的树内卷插件。 +这些驱动程序通过 Kubernetes API 与 kube-controller-manager 存储控制器通信,并通过本地 gRPC 端点与 kubelet 进行通信。 +现在,所有主要云和存储供应商一起提供了 100 多个 CSI 驱动,使 Kubernetes 中运行有状态工作负载成为现实。 + + +然而,如何处理树内卷 API 的所有现有用户仍然是一个重大挑战。 +为了保持 API 向后兼容性,我们在控制器中构建了一个 API 转换层,把树内卷 API 转换为等效的 CSI API。 +这使我们能够将所有存储操作重定向到 CSI 驱动程序,为我们在不删除 API 的情况下删除内置卷插件的代码铺平了道路。 + + +你可以在 [Kubernetes 树内卷到 CSI 卷的迁移进入 Beta 阶段](https://kubernetes.io/blog/2019/12/09/kubernetes-1-17-feature-csi-migration-beta/)。 + + +## 下一步是什么? + +过去几年,这一迁移工程一直是 SIG Cloud Provider 的主要关注点。 +随着这一重要里程碑的实现,我们将把努力转向探索新的创新方法,让 Kubernetes 更好地与云驱动集成,利用我们多年来构建的外部子系统。 +这包括使 Kubernetes 在混合环境中变得更加智能,其集群中的节点可以运行在公共云和私有云上, +以及为外部驱动的开发人员提供更好的工具和框架,以简化他们的集成工作,提高效率。 + + +在规划所有这些新特性、工具和框架的同时,SIG Cloud Provider 并没有忘记另一项同样重要的工作:测试。 +SIG 未来活动的另一个重点领域是改进云控制器测试以涵盖更多的驱动。 +这项工作的最终目标是创建一个包含尽可能多驱动的测试框架,以便我们让 Kubernetes 社区对其 Kubernetes 环境充满信心。 + + +如果你使用的 Kubernetes 版本早于 v1.29 并且尚未迁移到外部云驱动,我们建议你查阅我们之前的博客文章 +[Kubernetes 1.29:云驱动集成现在是单独的组件](/zh-cn/blog/2023/12/14/cloud-provider-integration-changes/)。 +该博客包含与我们所作的变更相关的详细信息,并提供了有关如何迁移到外部驱动的指导。 +从 v1.31 开始,树内云驱动将被永久禁用并从核心 Kubernetes 组件中删除。 + + +如果你有兴趣做出贡献,请参加我们的[每两周一次的 SIG 会议](https://github.com/kubernetes/community/tree/master/sig-cloud-provider#meetings)! From 609f1aadbb72e12203d45892e1e3d20681777761 Mon Sep 17 00:00:00 2001 From: xin gu <418294249@qq.com> Date: Wed, 22 May 2024 19:24:24 +0800 Subject: [PATCH 1086/1086] sync operator components assign-pod-node --- content/zh-cn/docs/concepts/extend-kubernetes/operator.md | 2 -- content/zh-cn/docs/concepts/overview/components.md | 4 ++-- .../docs/concepts/scheduling-eviction/assign-pod-node.md | 8 ++++---- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/content/zh-cn/docs/concepts/extend-kubernetes/operator.md b/content/zh-cn/docs/concepts/extend-kubernetes/operator.md index 3b9839aab9..85606eccfe 100644 --- a/content/zh-cn/docs/concepts/extend-kubernetes/operator.md +++ b/content/zh-cn/docs/concepts/extend-kubernetes/operator.md @@ -218,7 +218,6 @@ operator. * [kube-rs](https://kube.rs/) (Rust) * [kubebuilder](https://book.kubebuilder.io/) * [KubeOps](https://buehler.github.io/dotnet-operator-sdk/) (.NET operator SDK) -* [KUDO](https://kudo.dev/) (Kubernetes Universal Declarative Operator) * [Mast](https://docs.ansi.services/mast/user_guide/operator/) * [Metacontroller](https://metacontroller.github.io/metacontroller/intro.html) along with WebHooks that you implement yourself @@ -232,7 +231,6 @@ operator. * [kube-rs](https://kube.rs/) (Rust) * [kubebuilder](https://book.kubebuilder.io/) * [KubeOps](https://buehler.github.io/dotnet-operator-sdk/) (.NET operator SDK) -* [KUDO](https://kudo.dev/)(Kubernetes 通用声明式 Operator) * [Mast](https://docs.ansi.services/mast/user_guide/operator/) * [Metacontroller](https://metacontroller.github.io/metacontroller/intro.html),可与 Webhook 结合使用,以实现自己的功能。 * [Operator Framework](https://operatorframework.io) diff --git a/content/zh-cn/docs/concepts/overview/components.md b/content/zh-cn/docs/concepts/overview/components.md index da682a83c2..9f19c518e4 100644 --- a/content/zh-cn/docs/concepts/overview/components.md +++ b/content/zh-cn/docs/concepts/overview/components.md @@ -33,7 +33,7 @@ When you deploy Kubernetes, you get a cluster. This document outlines the various components you need to have for a complete and working Kubernetes cluster. -{{ < figure src="/images/docs/components-of-kubernetes.svg" alt="Components of Kubernetes" caption="The components of a Kubernetes cluster" class="diagram-large" >}} +{{ < figure src="/images/docs/components-of-kubernetes.svg" alt="Components of Kubernetes" caption="The components of a Kubernetes cluster" class="diagram-large" clicktozoom="true" >}} --> 当你部署完 Kubernetes,便拥有了一个完整的集群。 @@ -41,7 +41,7 @@ a complete and working Kubernetes cluster. 本文档概述了一个正常运行的 Kubernetes 集群所需的各种组件。 -{{< figure src="/images/docs/components-of-kubernetes.svg" alt="Kubernetes 的组件" caption="Kubernetes 集群的组件" class="diagram-large" >}} +{{< figure src="/images/docs/components-of-kubernetes.svg" alt="Kubernetes 的组件" caption="Kubernetes 集群的组件" class="diagram-large" clicktozoom="true" >}} diff --git a/content/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node.md b/content/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node.md index cab73de054..7f551ecca4 100644 --- a/content/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node.md +++ b/content/zh-cn/docs/concepts/scheduling-eviction/assign-pod-node.md @@ -1113,13 +1113,13 @@ The following operators can only be used with `nodeAffinity`. | 操作符 | 行为 | | :------------: | :-------------: | -| `Gt` | 提供的值将被解析为整数,并且该整数小于通过解析此选择算符命名的标签的值所得到的整数 | -| `Lt` | 提供的值将被解析为整数,并且该整数大于通过解析此选择算符命名的标签的值所得到的整数 | +| `Gt` | 字段值将被解析为整数,并且该整数小于或等于通过解析此选择算符命名的标签的值所得到的整数 | +| `Lt` | 字段值将被解析为整数,并且该整数大于或等于通过解析此选择算符命名的标签的值所得到的整数 | {{}}