diff --git a/Makefile b/Makefile
index 6543bdc417..8e27d08956 100644
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,7 @@ check-headers-file:
production-build: check-hugo-versions build check-headers-file ## Build the production site and ensure that noindex headers aren't added
-non-production-build: test-examples check-hugo-versions ## Build the non-production site, which adds noindex headers to prevent indexing
+non-production-build: check-hugo-versions ## Build the non-production site, which adds noindex headers to prevent indexing
hugo --enableGitInfo
serve: ## Boot the development server.
diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES
index 491cd455b2..51732cb349 100644
--- a/OWNERS_ALIASES
+++ b/OWNERS_ALIASES
@@ -18,6 +18,16 @@ aliases:
- chuckha
- detiber
- dixudx
+ sig-docs-blog-owners: # Approvers for blog content
+ - castrojo
+ - kbarnard10
+ - zacharysarah
+ sig-docs-blog-reviewers: # Reviewers for blog content
+ - cody-clark
+ - mrbobbytables
+ - onlydole
+ - parispittman
+ - vonguard
sig-docs-de-owners: # Admins for German content
- bene2k1
- mkorbi
@@ -34,10 +44,12 @@ aliases:
- jaredbhatti
- jimangel
- kbarnard10
+ - kbhawkey
- makoscafee
- mistyhacks
- rajakavitha1
- ryanmcginnis
+ - shavidissa
- steveperry-53
- stewart-yu
- tengqm
@@ -48,6 +60,7 @@ aliases:
sig-docs-en-reviews: # PR reviews for English content
- jimangel
- rajakavitha1
+ - sftim
- stewart-yu
- xiangpengzhao
- zhangxiaoyu-zidif
@@ -105,21 +118,21 @@ aliases:
sig-docs-it-reviews: # PR reviews for Italian content
- rlenferink
- micheleberardi
- sig-docs-ja-owners: # Admins for Japanese content
+ sig-docs-ja-owners: # Admins for Japanese content
- cstoku
- nasa9084
- - tnir
- zacharysarah
- sig-docs-ja-reviews: # PR reviews for Japanese content
+ sig-docs-ja-reviews: # PR reviews for Japanese content
- cstoku
+ - inductor
- makocchi-git
- MasayaAoyama
- nasa9084
- - tnir
sig-docs-ko-owners: # Admins for Korean content
- ClaudiaJKang
- gochist
- ianychoi
+ - seokho-son
- zacharysarah
sig-docs-ko-reviews: # PR reviews for Korean content
- ClaudiaJKang
diff --git a/README-ja.md b/README-ja.md
new file mode 100644
index 0000000000..2c69491e2f
--- /dev/null
+++ b/README-ja.md
@@ -0,0 +1,75 @@
+# Kubernetesのドキュメント
+
+[](https://travis-ci.org/kubernetes/website)
+[](https://github.com/kubernetes/website/releases/latest)
+
+ようこそ!このリポジトリには、[KubernetesのWebサイトとドキュメント](https://kubernetes.io/)をビルドするために必要な全アセットが格納されています。貢献に興味を持っていただきありがとうございます!
+
+## ドキュメントに貢献する
+
+GitHubの画面右上にある**Fork**ボタンをクリックすると、お使いのGitHubアカウントに紐付いた本リポジトリのコピーが作成され、このコピーのことを*フォーク*と呼びます。フォークリポジトリの中ではお好きなように変更を加えていただいて構いません。加えた変更をこのリポジトリに追加したい任意のタイミングにて、フォークリポジトリからPull Reqeustを作成してください。
+
+Pull Requestが作成されると、レビュー担当者が責任を持って明確かつ実用的なフィードバックを返します。
+Pull Requestの所有者は作成者であるため、**ご自身で作成したPull Requestを編集し、フィードバックに対応するのはご自身の役目です。**
+また、状況によっては2人以上のレビュアーからフィードバックが返されたり、アサインされていないレビュー担当者からのフィードバックが来ることがある点もご注意ください。
+さらに、特定のケースにおいては、レビュー担当者が[Kubernetes tech reviewer](https://github.com/kubernetes/website/wiki/Tech-reviewers)に対してレビューを依頼することもあります。
+レビュー担当者はタイムリーにフィードバックを提供するために最善を尽くしますが、応答時間は状況に応じて異なる場合があります。
+
+Kubernetesのドキュメントへの貢献に関する詳細については以下のページをご覧ください:
+
+* [貢献のはじめ方](https://kubernetes.io/docs/contribute/start/)
+* [ドキュメントの変更をステージする](http://kubernetes.io/docs/contribute/intermediate#view-your-changes-locally)
+* [ページテンプレートの使い方](http://kubernetes.io/docs/contribute/style/page-templates/)
+* [ドキュメントのスタイルガイド](http://kubernetes.io/docs/contribute/style/style-guide/)
+* [Kubernetesドキュメントの翻訳方法](https://kubernetes.io/docs/contribute/localization/)
+
+## Dockerを使ってローカル環境でWebサイトを動かす
+
+ローカル環境で本ページを動かすのに推奨される方法は、静的サイトジェネレータの[Hugo](https://gohugo.io)を動かすのに特化した[Docker](https://docker.com)イメージを使うことです。
+
+> Windows上で環境を作る場合は[Chocolatey](https://chocolatey.org)を使ってインストール可能な追加のツールが必要になります。 `choco install make`
+
+> Dockerを使わずに環境を構築したい場合は、[Hugoをローカル環境で動かす](#hugoをローカル環境で動かす)をご覧ください。
+
+既に[Dockerが動いている環境](https://www.docker.com/get-started)であれば、以下のコマンドを使って`kubernetes-hugo`イメージをローカルでビルドします:
+
+```bash
+make docker-image
+```
+
+イメージが作成されたら、以下のコマンドを使ってWebサイトをローカル上で動かすことができます:
+
+```bash
+make docker-serve
+```
+
+お使いのブラウザにて http://localhost:1313 にアクセスすることでWebサイトが開きます。リポジトリ内のソースファイルに変更を加えると、HugoがWebサイトの内容を更新してブラウザに反映します。
+
+## Hugoをローカル環境で動かす
+
+Hugoのインストール方法については[Hugoの公式ドキュメント](https://gohugo.io/getting-started/installing/)をご覧ください。このとき、[`netlify.toml`](netlify.toml#L9)ファイルに記述されている`HUGO_VERSION`と同じバージョンをインストールするようにしてください。
+
+Hugoがインストールできたら、以下のコマンドを使ってWebサイトをローカル上で動かすことができます:
+
+```bash
+make serve
+```
+
+これで、Hugoのサーバーが1313番ポートを使って開始します。 お使いのブラウザにて http://localhost:1313 にアクセスしてください。リポジトリ内のソースファイルに変更を加えると、HugoがWebサイトの内容を更新してブラウザに反映します。
+
+## コミュニティ内での議論、貢献、サポートなどについて
+
+[コミュニティのページ](http://kubernetes.io/community/)をご覧になることで、Kubernetesコミュニティとの関わり方を学ぶことができます。
+
+本プロジェクトのメンテナーには以下の方法で連絡することができます:
+
+- [Slack](https://kubernetes.slack.com/messages/kubernetes-docs-ja)
+- [メーリングリスト](https://groups.google.com/forum/#!forum/kubernetes-sig-docs)
+
+### 行動規範
+
+Kubernetesコミュニティへの参加については、[Kubernetesの行動規範](code-of-conduct.md)によって管理されています。
+
+## ありがとうございます!
+
+Kubernetesはコミュニティの参加によって成長しています。Webサイトおよびドキュメンテーションへの皆さんの貢献に感謝します!
diff --git a/README-ko.md b/README-ko.md
index 4846b08c97..21cbe8b762 100644
--- a/README-ko.md
+++ b/README-ko.md
@@ -3,13 +3,13 @@
[](https://travis-ci.org/kubernetes/website)
[](https://github.com/kubernetes/website/releases/latest)
-환영합니다! 이 저장소는 쿠버네티스 웹사이트 및 문서화를 만드는 데 필요로 하는 모든 asset에 대한 공간을 제공합니다. 여러 분이 기여를 원한다는 사실에 매우 기쁩니다!
+환영합니다! 이 저장소는 쿠버네티스 웹사이트 및 문서화를 만드는 데 필요로 하는 모든 asset에 대한 공간을 제공합니다. 여러분이 기여를 원한다는 사실에 매우 기쁩니다!
## 문서에 기여하기
-이 저장소에 대한 복제본을 여러분의 GitHub 계정에 생성하기 위해 화면 오른쪽 위 영역에 있는 **Fork** 버튼을 클릭 가능합니 다. 이 복제본은 *fork* 라고 부릅니다. 여러분의 fork에서 원하는 임의의 변경 사항을 만들고, 해당 변경 사항을 보낼 준비가 되었다면, 여러분의 fork로 이동하여 새로운 풀 리퀘스트를 만들어 우리에게 알려주시기 바랍니다.
+이 저장소에 대한 복제본을 여러분의 GitHub 계정에 생성하기 위해 화면 오른쪽 위 영역에 있는 **Fork** 버튼을 클릭 가능합니다. 이 복제본은 *fork* 라고 부릅니다. 여러분의 fork에서 원하는 임의의 변경 사항을 만들고, 해당 변경 사항을 보낼 준비가 되었다면, 여러분의 fork로 이동하여 새로운 풀 리퀘스트를 만들어 우리에게 알려주시기 바랍니다.
-여러분의 풀 리퀘스트가 생생된 이후에는, 쿠버네티스 리뷰어가 명료하고 실행 가능한 피드백을 제공하는 책임을 담당할 것입니 다. 풀 리퀘스트의 오너로서, **쿠버네티스 리뷰어로부터 제공받은 피드백을 수용하기 위해 풀 리퀘스트를 수정하는 것은 여러분의 책임입니다.** 또한, 참고로 한 명 이상의 쿠버네티스 리뷰어가 여러분에게 피드백을 제공하는 상황에 처하거나, 또는 여러분에게 피드백을 제공하기로 원래 할당된 사람이 아닌 다른 쿠버네티스 리뷰어로부터 피드백을 받는 상황에 처할 수도 있습니다. 뿐만 아니라, 몇몇 상황에서는, 필요에 따라 리뷰어 중 한 명이 [쿠버네티스 기술 리뷰어](https://github.com/kubernetes/website/wiki/Tech-reviewers)로부터의 기술 리뷰를 요청할지도 모릅니다. 리뷰어는 제시간에 피드백을 제공하기 위해 최선을 다할 것이지만, 응답 시간은 상황에 따라 달라질 수도 있습니다.
+여러분의 풀 리퀘스트가 생생된 이후에는, 쿠버네티스 리뷰어가 명료하고 실행 가능한 피드백을 제공하는 책임을 담당할 것입니다. 풀 리퀘스트의 오너로서, **쿠버네티스 리뷰어로부터 제공받은 피드백을 수용하기 위해 풀 리퀘스트를 수정하는 것은 여러분의 책임입니다.** 또한, 참고로 한 명 이상의 쿠버네티스 리뷰어가 여러분에게 피드백을 제공하는 상황에 처하거나, 또는 여러분에게 피드백을 제공하기로 원래 할당된 사람이 아닌 다른 쿠버네티스 리뷰어로부터 피드백을 받는 상황에 처할 수도 있습니다. 뿐만 아니라, 몇몇 상황에서는, 필요에 따라 리뷰어 중 한 명이 [쿠버네티스 기술 리뷰어](https://github.com/kubernetes/website/wiki/Tech-reviewers)로부터의 기술 리뷰를 요청할지도 모릅니다. 리뷰어는 제시간에 피드백을 제공하기 위해 최선을 다할 것이지만, 응답 시간은 상황에 따라 달라질 수도 있습니다.
쿠버네티스 문서화에 기여하기와 관련된 보다 자세한 정보는, 다음을 살펴봅니다:
@@ -32,7 +32,7 @@
## 도커를 사용하여 사이트를 로컬에서 실행하기
-쿠버네티스 웹사이트를 로컬에서 실행하기 위한 추천하는 방식은 [Hugo](https://gohugo.io) 정적 사이트 생성기를 포함하는 특 별한 [도커](https://docker.com) 이미지를 실행하는 것입니다.
+쿠버네티스 웹사이트를 로컬에서 실행하기 위한 추천하는 방식은 [Hugo](https://gohugo.io) 정적 사이트 생성기를 포함하는 특별한 [도커](https://docker.com) 이미지를 실행하는 것입니다.
> Windows에서 실행하는 경우, [Chocolatey](https://chocolatey.org)로 설치할 수 있는 명명 추가 도구를 필요로 할 것입니다. `choco install make`
@@ -50,7 +50,7 @@ make docker-image
make docker-serve
```
-브라우저에서 http://localhost:1313 를 열어 사이트를 살펴봅니다. 소스 파일에 변경 사항이 있을 때, Hugo는 사이트를 업데이 트하고 브라우저를 강제로 새로고침합니다.
+브라우저에서 http://localhost:1313 를 열어 사이트를 살펴봅니다. 소스 파일에 변경 사항이 있을 때, Hugo는 사이트를 업데이트하고 브라우저를 강제로 새로고침합니다.
## Hugo를 사용한 로컬 사이트 실행하기
@@ -62,7 +62,7 @@ Hugo가 설치되었을 때 로컬에서 사이트를 실행하기 위해 (다
make serve
```
-이를 통해 로컬 Hugo 서버를 1313번 포트에 시작합니다. 브라우저에서 http://localhost:1313 를 열어 사이트를 살펴봅니다. 소 스 파일에 변경 사항이 있을 때, Hugo는 사이트를 업데이트하고 브라우저를 강제로 새로고침합니다.
+이를 통해 로컬 Hugo 서버를 1313번 포트에 시작합니다. 브라우저에서 http://localhost:1313 를 열어 사이트를 살펴봅니다. 소스 파일에 변경 사항이 있을 때, Hugo는 사이트를 업데이트하고 브라우저를 강제로 새로고침합니다.
## 감사합니다!
diff --git a/README-pt.md b/README-pt.md
index 5f726d39b4..4d5b6ad7e9 100644
--- a/README-pt.md
+++ b/README-pt.md
@@ -19,16 +19,10 @@ Para mais informações sobre como contribuir com a documentação do Kubernetes
* [Guia de Estilo da Documentação](http://kubernetes.io/docs/contribute/style/style-guide/)
* [Localizando documentação do Kubernetes](https://kubernetes.io/docs/contribute/localization/)
-## Documentação do Kubernetes Localizando o `README.md`
+Você pode contactar os mantenedores da localização em Português em:
-### coreano
-
-Veja a tradução de `README.md` e mais orientações sobre detalhes para contribuidores coreanos na página [README coreano](README-ko.md).
-
-Você pode alcançar os mantenedores da localização coreana em:
-
-* June Yi ([GitHub - @gochist](https://github.com/gochist))
-* [Slack channel](https://kubernetes.slack.com/messages/kubernetes-docs-ko)
+* Felipe ([GitHub - @femrtnz](https://github.com/femrtnz))
+* [Slack channel](https://kubernetes.slack.com/messages/kubernetes-docs-pt)
## Executando o site localmente usando o Docker
@@ -68,7 +62,7 @@ Isso iniciará o servidor Hugo local na porta 1313. Abra o navegador para http:/
Aprenda a se envolver com a comunidade do Kubernetes na [página da comunidade](http://kubernetes.io/community/).
-Você pode alcançar os mantenedores deste projeto em:
+Você pode falar com os mantenedores deste projeto:
- [Slack](https://kubernetes.slack.com/messages/sig-docs)
- [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-docs)
@@ -79,4 +73,4 @@ A participação na comunidade Kubernetes é regida pelo [Código de Conduta da
## Obrigado!
-A Kubernetes prospera com a participação da comunidade e nós realmente apreciamos suas contribuições para o nosso site e nossa documentação!
+O Kubernetes conta com a participação da comunidade e nós realmente agradecemos suas contribuições para o nosso site e nossa documentação!
diff --git a/README.md b/README.md
index 59f1eedd2d..4bb7cc7411 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,7 @@ For more information about contributing to the Kubernetes documentation, see:
|[German README](README-de.md)|[Portuguese README](README-pt.md)|
|[Hindi README](README-hi.md)|[Spanish README](README-es.md)|
|[Indonesian README](README-id.md)|[Chinese README](README-zh.md)|
+|[Japanese README](README-ja.md)||
|||
## Running the website locally using Docker
@@ -52,7 +53,7 @@ Open up your browser to http://localhost:1313 to view the website. As you make c
## Running the website locally using Hugo
-See the [official Hugo documentation](https://gohugo.io/getting-started/installing/) for Hugo installation instructions. Make sure to install the Hugo version specified by the `HUGO_VERSION` environment variable in the [`netlify.toml`](netlify.toml#L9) file.
+See the [official Hugo documentation](https://gohugo.io/getting-started/installing/) for Hugo installation instructions. Make sure to install the Hugo extended version specified by the `HUGO_VERSION` environment variable in the [`netlify.toml`](netlify.toml#L9) file.
To run the website locally when you have Hugo installed:
diff --git a/assets/sass/_base.sass b/assets/sass/_base.sass
index e631a0049c..a4571f0914 100644
--- a/assets/sass/_base.sass
+++ b/assets/sass/_base.sass
@@ -1125,6 +1125,16 @@ $feature-box-div-margin-bottom: 40px
#vendorStrip
display: none
+ // Add logo to CNCF section
+ section#cncf
+ padding-top: 60px
+ padding-bottom: 140px
+ background-image: url(/images/cncf-color.png)
+ background-position: center 100px
+ background-repeat: no-repeat
+ background-size: 300px
+
+
// OCEAN NODES
#oceanNodes
@@ -1174,7 +1184,7 @@ $feature-box-div-margin-bottom: 40px
position: absolute
top: 50%
left: 75%
- width: 525px
+ width: 575px
padding-right: 80px
transform: translate(-50%, -50%)
color: white
@@ -1269,15 +1279,6 @@ $feature-box-div-margin-bottom: 40px
&:hover
border-color: white
-// CNCF
-#cncf
- padding-top: 60px
- padding-bottom: 140px
- background-image: url(/images/cncf-color.png)
- background-position: center 100px
- background-repeat: no-repeat
- background-size: 300px
-
// KubeWeekly
#kubeweekly
background-color: $light-grey
diff --git a/config.toml b/config.toml
index 9be2d3ffa7..1daf9e4274 100644
--- a/config.toml
+++ b/config.toml
@@ -24,7 +24,9 @@ pygmentsStyle = "emacs"
enableGitInfo = true
# Norwegian ("no") is sometimes but not currently used for testing.
-disableLanguages = ["no"]
+# Hindi is disabled because it's currently in development.
+# Italian is disabled until it meets minimum standards for quality.
+disableLanguages = ["hi", "it", "no"]
[blackfriday]
hrefTargetBlank = true
@@ -252,6 +254,10 @@ language_alternatives = ["en"]
[languages.hi]
title = "Kubernetes"
description = "Production-Grade Container Orchestration"
-languageName ="Hindi"
+languageName = "Hindi"
weight = 11
-contentDir = "content/hi"
\ No newline at end of file
+contentDir = "content/hi"
+
+[languages.hi.params]
+time_format_blog = "01.02.2006"
+language_alternatives = ["en"]
diff --git a/content/de/_index.html b/content/de/_index.html
index 90c04a2185..be67e2a7de 100644
--- a/content/de/_index.html
+++ b/content/de/_index.html
@@ -44,12 +44,12 @@ Kubernetes ist Open Source und bietet Ihnen die Freiheit, die Infrastruktur vor
diff --git a/content/de/docs/concepts/overview/what-is-kubernetes.md b/content/de/docs/concepts/overview/what-is-kubernetes.md
index e6a8422f9d..30090a24a1 100644
--- a/content/de/docs/concepts/overview/what-is-kubernetes.md
+++ b/content/de/docs/concepts/overview/what-is-kubernetes.md
@@ -51,7 +51,7 @@ für Managementtools zu bieten, den Status von Kontrollpunkten zu ermitteln.
Darüber hinaus basiert die [Kubernetes-Steuerungsebene](/docs/concepts/overview/components/) auf den gleichen APIs,
die Entwicklern und Anwendern zur Verfügung stehen. Benutzer können ihre eigenen Controller, wie z.B.
[Scheduler](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/devel/scheduler.md), mit
-ihren [eigenen APIs](](/docs/concepts/api-extension/custom-resources/) schreiben, die von einem
+ihren [eigenen APIs](/docs/concepts/api-extension/custom-resources/) schreiben, die von einem
universellen [Kommandozeilen-Tool](/docs/user-guide/kubectl-overview/) angesprochen werden können.
Dieses [Design](https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md) hat es einer Reihe anderer Systeme ermöglicht, auf Kubernetes aufzubauen.
@@ -155,7 +155,7 @@ Zusammenfassung der Container-Vorteile:
## Was bedeutet Kubernetes? K8s?
-Der Name **Kubernetes** stammt aus dem Griechischen, beteutet *Steuermann* oder
+Der Name **Kubernetes** stammt aus dem Griechischen, bedeutet *Steuermann* oder
*Pilot*, und ist der Ursprung von *Gouverneur* und
[cybernetic](http://www.etymonline.com/index.php?term=cybernetics). *K8s*
ist eine Abkürzung, die durch Ersetzen der 8 Buchstaben "ubernete" mit "8" abgeleitet wird.
diff --git a/content/de/docs/reference/kubectl/cheatsheet.md b/content/de/docs/reference/kubectl/cheatsheet.md
index a3968a213b..d30084c90f 100644
--- a/content/de/docs/reference/kubectl/cheatsheet.md
+++ b/content/de/docs/reference/kubectl/cheatsheet.md
@@ -145,7 +145,7 @@ kubectl get services --sort-by=.metadata.name # Listen Sie Dienste nach Namen so
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# Erhalten Sie die Versionsbezeichnung aller Pods mit der Bezeichnung app=cassandra
-kubectl get pods --selector=app=cassandra rc -o \
+kubectl get pods --selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'
# Alle Worker-Knoten abrufen (verwenden Sie einen Selektor, um Ergebnisse auszuschließen,
diff --git a/content/de/docs/tutorials/kubernetes-basics/scale/scale-intro.html b/content/de/docs/tutorials/kubernetes-basics/scale/scale-intro.html
index e4e4e9e418..b52b30812b 100644
--- a/content/de/docs/tutorials/kubernetes-basics/scale/scale-intro.html
+++ b/content/de/docs/tutorials/kubernetes-basics/scale/scale-intro.html
@@ -61,11 +61,11 @@ weight: 10
-
+
-
+
diff --git a/content/en/_index.html b/content/en/_index.html
index 2d7e2ab402..7813606b80 100644
--- a/content/en/_index.html
+++ b/content/en/_index.html
@@ -44,12 +44,12 @@ Kubernetes is open source giving you the freedom to take advantage of on-premise
diff --git a/content/en/blog/OWNERS b/content/en/blog/OWNERS
index 288b4c1f0b..dd05474d19 100644
--- a/content/en/blog/OWNERS
+++ b/content/en/blog/OWNERS
@@ -6,15 +6,10 @@ options:
no_parent_owners: false
approvers:
- - kbarnard10
- - zacharysarah
+ - sig-docs-blog-owners # Defined in OWNERS_ALIASES
reviewers:
- - vonguard
- - castrojo
- - mrbobbytables
- - cody-clark
- - parispittman
+ - sig-docs-blog-reviewers # Defined in OWNERS_ALIASES
labels:
- area/blog
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 888511ddd4..d01ac1abc7 100644
--- a/content/en/blog/_posts/2018-07-10-coredns-ga.md
+++ b/content/en/blog/_posts/2018-07-10-coredns-ga.md
@@ -148,7 +148,7 @@ You can also filter by namespaces or a label selector. This can allow you to run
In addition to the features described above, CoreDNS is easily extended. It is possible to build custom versions
of CoreDNS that include your own features. For example, this ability has been used to extend CoreDNS to do recursive resolution
-with the [unbound plugin](https://https://coredns.io/explugins/unbound), to server records directly from a database with the [pdsql plugin](https://coredns.io/explugins/pdsql), and to allow multiple CoreDNS instances to share a common level 2 cache with the [redisc plugin](https://coredns.io/explugins/redisc).
+with the [unbound plugin](https://coredns.io/explugins/unbound), to server records directly from a database with the [pdsql plugin](https://coredns.io/explugins/pdsql), and to allow multiple CoreDNS instances to share a common level 2 cache with the [redisc plugin](https://coredns.io/explugins/redisc).
Many other interesting extensions have been added, which you will find on the [External Plugins](https://coredns.io/explugins/) page of the CoreDNS site. One that is really interesting for Kubernetes and Istio users is the [kubernetai plugin](https://coredns.io/explugins/kubernetai), which allows a single CoreDNS instance to connect to multiple Kubernetes clusters and provide service discovery across all of them.
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 3c612e384e..41bf1e4a96 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
@@ -8,7 +8,7 @@ date: 2018-10-18
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!
-
{{< tweet 1044345018490662912 >}}
+
Congrats to everyone who got Kubecon talks accepted! 👏👏👏
To everyone who got a rejection don't feel bad. Only 13% could be accepted. Keep trying. There will be other opportunities.
When I was informed that my [KubeCon talk about Kubernetes Resource Management](https://www.youtube.com/watch?v=8-apJyr2gi0) was accepted for KubeCon EU in Denmark (2018), I really could not believe it. By then, the chances to get your talk accepted were around 10% (or less, don't really remember the exact number). There were over a 1,000 submissions just for that KubeCon (recall that we now have **three KubeCon events during the year** - US, EU and Asia region). The popularity of Kubernetes is ever increasing and so is the number of people trying to get a talk accepted. Once again, **outstanding achievement to get your talk in**!
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 fc61f60c84..774d160c14 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
@@ -52,4 +52,4 @@ I hope some of these tips are useful for you as well. And I wish you all the bes
Besides my fantastic reviewers and the speaker support team already mentioned above, I also would like to thank the people who supported me along this KubeCon journey: Bjoern, Timo, Emad and Steve!
-{{< tweet 992409364467200000 >}}
+
diff --git a/content/en/blog/_posts/Kubernetes-setup-using-Ansible-and-Vagrant.md b/content/en/blog/_posts/2019-03-15-Kubernetes-setup-using-Ansible-and-Vagrant.md
similarity index 100%
rename from content/en/blog/_posts/Kubernetes-setup-using-Ansible-and-Vagrant.md
rename to content/en/blog/_posts/2019-03-15-Kubernetes-setup-using-Ansible-and-Vagrant.md
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 99ec3bdac8..fe7b4e79d1 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
@@ -12,7 +12,7 @@ Kubernetes is a real winner (and a de facto standard) in the world of distribute
A few weeks ago I ran a poll on Twitter asking the community to specify their preferred option for running Kubernetes locally on Linux:
-
{{< tweet 1093154369040773120 >}}
+
Ok, Twitter ✋
Your local Kubernetes cluster on Linux is deployed by:
This is post #1 in a series about the local deployment options on Linux, and it will cover Minikube, the most popular community-built solution for running Kubernetes on a local machine.
diff --git a/content/en/blog/_posts/future-of-cloud-providers.md b/content/en/blog/_posts/2019-04-17-future-of-cloud-providers.md
similarity index 99%
rename from content/en/blog/_posts/future-of-cloud-providers.md
rename to content/en/blog/_posts/2019-04-17-future-of-cloud-providers.md
index e5cd1b79ce..e480ca22c7 100644
--- a/content/en/blog/_posts/future-of-cloud-providers.md
+++ b/content/en/blog/_posts/2019-04-17-future-of-cloud-providers.md
@@ -1,4 +1,5 @@
---
+layout: blog
title: 'The Future of Cloud Providers in Kubernetes'
date: 2019-04-17
---
diff --git a/content/en/blog/_posts/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
similarity index 99%
rename from content/en/blog/_posts/Introducing-kube-iptables-tailer-Better-Networking-Visibility-in-Kubernetes-Clusters.md
rename to content/en/blog/_posts/2019-04-19-Introducing-kube-iptables-tailer-Better-Networking-Visibility-in-Kubernetes-Clusters.md
index 3c611adac4..8601d0b7c7 100644
--- a/content/en/blog/_posts/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
@@ -1,4 +1,5 @@
---
+layout: blog
title: "Introducing kube-iptables-tailer: Better Networking Visibility in Kubernetes Clusters"
date: 2019-04-19
slug: introducing-kube-iptables-tailer
diff --git a/content/en/blog/_posts/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
similarity index 99%
rename from content/en/blog/_posts/Kubernetes-Cloud-Native-and-the-Future-of-Software.md
rename to content/en/blog/_posts/2019-05-17-Kubernetes-Cloud-Native-and-the-Future-of-Software.md
index f8638cba5e..ed1fd796c3 100644
--- a/content/en/blog/_posts/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
@@ -1,4 +1,5 @@
---
+layout: blog
title: 'Kubernetes, Cloud Native, and the Future of Software'
date: 2019-05-17
---
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 0217e36157..49519cef15 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
@@ -21,7 +21,7 @@ The theme of the new developments around CustomResourceDefinitions is data consi
In this direction, we have rethought our OpenAPI based validation schemas in CRDs and from 1.15 on we check each schema against a restriction called “structural schema”. This basically enforces non-polymorphic and complete typing of each field in a CustomResource. We are going to require structural schemas in the future, especially for all new features including those listed below, and list violations in a `NonStructural` condition. Non-structural schemas keep working for the time being in the v1beta1 API group. But any serious CRD application is urged to migrate to structural schemas in the foreseeable future.
-Details about what makes a schema structural will be published in a blog post on kubernetes.io later this week, and it is of course [documented in the Kubernetes documentation](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#specifying-a-structural-schema).
+Details about what makes a schema structural will be published in a blog post on kubernetes.io later this week, and it is of course [documented in the Kubernetes documentation](/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#specifying-a-structural-schema).
**beta: CustomResourceDefinition Webhook Conversion**
@@ -63,7 +63,7 @@ There are more smaller changes to admission webhook, notably `objectSelector` to
Work on making Kubernetes installation, upgrade and configuration even more robust has been a major focus for this cycle for SIG Cluster Lifecycle (see our last [Community Update](https://docs.google.com/presentation/d/1QUOsQxfEfHlMq4lPjlK2ewQHsr9peEKymDw5_XwZm8Q/edit?usp=sharing)). Bug fixes across bare metal tooling and production-ready user stories, such as the high availability use cases have been given priority for 1.15.
-**kubeadm**, the cluster lifecycle building block, continues to receive features and stability work required for bootstrapping production clusters efficiently. kubeadm has promoted high availability (HA) capability to beta, allowing users to use the familiar `kubeadm init` and `kubeadm join` commands to [configure and deploy an HA control plane](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/). An entire new test suite has been created specifically for ensuring these features will stay stable over time.
+**kubeadm**, the cluster lifecycle building block, continues to receive features and stability work required for bootstrapping production clusters efficiently. kubeadm has promoted high availability (HA) capability to beta, allowing users to use the familiar `kubeadm init` and `kubeadm join` commands to [configure and deploy an HA control plane](/docs/setup/production-environment/tools/kubeadm/high-availability/). An entire new test suite has been created specifically for ensuring these features will stay stable over time.
Certificate management has become more robust in 1.15, with kubeadm now seamlessly rotating all your certificates (on upgrades) before they expire. Check the [kubeadm documentation](/docs/reference/setup-tools/kubeadm/kubeadm-alpha/) for information on how to manage your certificates.
@@ -147,5 +147,3 @@ The simplest way to get involved with Kubernetes is by joining one of the many [
- Join the community on [Slack](http://slack.k8s.io/)
- Post questions (or answer questions) on [Stack Overflow](http://stackoverflow.com/questions/tagged/kubernetes)
- Share your Kubernetes [story](https://docs.google.com/a/linuxfoundation.org/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform)
-
-
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 0d965479a8..38f0e39a9e 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
@@ -58,7 +58,7 @@ The **core of a structural schema** is an OpenAPI v3 schema made out of
In addition, all types must be non-empty, and in each sub-schema only one of `properties`, `additionalProperties` or `items` may be used.
-Here is an example of our `MaintenanceJob`:
+Here is an example of our `MaintenanceNightlyJob`:
```yaml
type: object
@@ -110,12 +110,12 @@ Some notable restrictions for these additional value validations:
As you can see also logical constraints using `oneOf`, `allOf`, `anyOf`, `not` are allowed.
-To sum up, an OpenAPI schema is structural if
-1. it has the core as defined above out of `properties`, `items`, `additionalProperties`, `type`, `nullable`, `title`, `description`,
-2. all types are defined,
-3. the core is extended with value validation following the constraints:
- 1. inside of value validations no `additionalProperties`, `type`, `nullable`, `title`, `description`,
- 2. all fields mentioned in value validation are specified in the core.
+To sum up, an OpenAPI schema is structural if
+1. it has the core as defined above out of `properties`, `items`, `additionalProperties`, `type`, `nullable`, `title`, `description`,
+2. all types are defined,
+3. the core is extended with value validation following the constraints:
+ (i) inside of value validations no `additionalProperties`, `type`, `nullable`, `title`, `description`
+ (ii) all fields mentioned in value validation are specified in the core.
Let us modify our example spec slightly, to make it non-structural:
@@ -169,11 +169,12 @@ spec:
Pruning can only be enabled if the global schema or the schemas of all versions are structural.
If pruning is enabled, the pruning algorithm
+
* assumes that the schema is complete, i.e. every field is mentioned and not-mentioned fields can be dropped
-* is run on
- * data received via an API request
- * after conversion and admission requests
- * when reading from etcd (using the schema version of the data in etcd).
+* is run on
+ (i) data received via an API request
+ (ii) after conversion and admission requests
+ (iii) when reading from etcd (using the schema version of the data in etcd).
As we don’t specify `privileged` in our structural example schema, the malicious field is pruned from before persisting to etcd:
@@ -181,7 +182,9 @@ As we don’t specify `privileged` in our structural example schema, the malicio
apiVersion: operations/v1
kind: MaintenanceNightlyJob
spec:
- command: grep backdoor /etc/passwd || echo “backdoor:76asdfh76:/bin/bash” >> /etc/passwd || true
+ shell: >
+ grep backdoor /etc/passwd ||
+ echo “backdoor:76asdfh76:/bin/bash” >> /etc/passwd || true
machines: [“az1-master1”,”az1-master2”,”az2-master3”]
# pruned: privileged: true
```
@@ -192,7 +195,8 @@ While most Kubernetes-like APIs can be expressed with a structural schema, there
Because we want CRDs to make use of these types as well, we introduce the following OpenAPI vendor extensions to the permitted core constructs:
-* `x-kubernetes-embedded-resource: true` — specifies that this is an `runtime.RawExtensions-like field, with a Kubernetes resource with apiVersion, kind and metadata. The consequence is that those 3 fields are not pruned and are automatically validated.
+* `x-kubernetes-embedded-resource: true` — specifies that this is an `runtime.RawExtension`-like field, with a Kubernetes resource with apiVersion, kind and metadata. The consequence is that those 3 fields are not pruned and are automatically validated.
+
* `x-kubernetes-int-or-string: true` — specifies that this is either an integer or a string. No types must be specified, but
```yaml
@@ -202,9 +206,10 @@ Because we want CRDs to make use of these types as well, we introduce the follow
```
is permitted, though optional.
+
* `x-kubernetes-preserve-unknown-fields: true` — specifies that the pruning algorithm should not prune any field. This can be combined with `x-kubernetes-embedded-resource`. Note that within a nested `properties` or `additionalProperties` OpenAPI schema the pruning starts again.
- One can use `x-kubernetes-preserve-unknown-fields: true` at the root of the schema (and inside any `properties`, `additionalProperties`) to get the traditional CRD behaviour that nothing is prune, despite being `spec.preserveUnknownProperties: false` is set.
+ One can use `x-kubernetes-preserve-unknown-fields: true` at the root of the schema (and inside any `properties`, `additionalProperties`) to get the traditional CRD behaviour that nothing is pruned, despite setting `spec.preserveUnknownProperties: false`.
## Conclusion
@@ -227,8 +232,8 @@ Any new feature for CRDs starting from Kubernetes 1.15 will require to have a st
* publishing of OpenAPI validation schemas and therefore support for kubectl client-side validation, and `kubectl explain` support (beta in Kubernetes 1.15)
* CRD conversion (beta in Kubernetes 1.15)
-* CRD defaulting (beta in Kubernetes 1.15)
+* CRD defaulting (alpha in Kubernetes 1.15)
* Server-side apply (alpha in Kubernetes 1.15, CRD support pending).
-Of course [structural schemas](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#specifying-a-structural-schema) are also described in the Kubernetes documentation for the 1.15 release.
+Of course [structural schemas](https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#specifying-a-structural-schema) are also described in the Kubernetes documentation for the 1.15 release.
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
new file mode 100644
index 0000000000..8faf96a7e6
--- /dev/null
+++ b/content/en/blog/_posts/2019-06-21-volume-cloning-alpha.md
@@ -0,0 +1,112 @@
+---
+layout: blog
+title: 'Introducing Volume Cloning Alpha for Kubernetes'
+date: 2019-06-21
+---
+
+**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?
+
+Many storage systems provide the ability to create a "clone" of a volume. A clone is a duplicate of an existing volume that is its own unique volume on the system, but the data on the source is duplicated to the destination (clone). A clone is similar to a snapshot in that it's a point in time copy of a volume, however rather than creating a new snapshot object from a volume, we're instead creating a new independent volume, sometimes thought of as pre-populating the newly created volume.
+
+## Why add cloning to Kubernetes
+
+The Kubernetes volume plugin system already provides a powerful abstraction that automates the provisioning, attaching, and mounting of block and file storage.
+
+Underpinning all these features is the Kubernetes goal of workload portability: Kubernetes aims to create an abstraction layer between distributed systems applications and underlying clusters so that applications can be agnostic to the specifics of the cluster they run on and application deployment requires no specific storage device knowledge.
+
+The [Kubernetes Storage SIG](https://github.com/kubernetes/community/tree/master/sig-storage) identified clone operations as critical functionality for many stateful workloads. For example, a database administrator may want to duplicate a database volume and create another instance of an existing database.
+
+By providing a standard way to trigger clone operations in the Kubernetes API, Kubernetes users can now handle use cases like this without having to go around the Kubernetes API (and manually executing storage system specific operations). While cloning is similar in behavior to creating a snapshot of a volume, then creating a volume from the snapshot, a clone operation is more streamlined and is more efficient for many backend devices.
+
+Kubernetes users are now empowered to incorporate clone operations in a cluster agnostic way into their tooling and policy with the comfort of knowing that it will work against arbitrary Kubernetes clusters regardless of the underlying storage.
+
+## Kubernetes API and Cloning
+
+The cloning feature in Kubernetes is enabled via the `PersistentVolumeClaim.DataSource` field. Prior to v1.15 the only valid object type permitted for use as a dataSource was a `VolumeSnapshot`. The cloning feature extends the allowed `PersistentVolumeclaim.DataSource.Kind` field to not only allow `VolumeSnapshot` but also `PersistentVolumeClaim`. The existing behavior is not changed.
+
+There are no new objects introduced to enable cloning. Instead, the existing dataSource field in the PersistentVolumeClaim object is expanded to be able to accept the name of an existing PersistentVolumeClaim in the same namespace. It is important to note that from a users perspective a clone is just another PersistentVolume and PersistentVolumeClaim, the only difference being that that PersistentVolume is being populated with the contents of another PersistentVolume at creation time. After creation it behaves exactly like any other Kubernetes PersistentVolume and adheres to the same behaviors and rules.
+
+
+## Which volume plugins support Kubernetes Cloning?
+
+Kubernetes supports three types of volume plugins: in-tree, Flex, and [Container Storage Interface](https://github.com/container-storage-interface/spec/blob/master/spec.md) (CSI). See [Kubernetes Volume Plugin FAQ](https://github.com/kubernetes/community/blob/master/sig-storage/volume-plugin-faq.md) for details.
+
+Cloning is only supported for CSI drivers (not for in-tree or Flex). To use the Kubernetes cloning feature, ensure that a CSI Driver that implements cloning is deployed on your cluster.
+For a list of CSI drivers that currently support cloning see the [CSI Drivers doc](https://kubernetes-csi.github.io/docs/drivers.html).
+
+## Kubernetes Cloning Requirements
+
+Before using Kubernetes Volume Cloning, you must:
+
+* Ensure a CSI driver implementing Cloning is deployed and running on your Kubernetes cluster.
+* Enable the Kubernetes Volume Cloning feature via new Kubernetes feature gate (disabled by default for alpha):
+ * Set the following flag on the API server binary: `--feature-gates=VolumePVCDataSource=true`
+* The source and destination claims must be in the same namespace.
+
+
+## Creating a clone with Kubernetes
+
+To provision a new volume pre-populated with data from an existing Kubernetes Volume, use the dataSource field in the `PersistentVolumeClaim`. There are three parameters:
+
+* name - name of the `PersistentVolumeClaim` object to use as source
+* kind - must be `PersistentVolumeClaim`
+* apiGroup - must be `""`
+
+```
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: pvc-clone
+ Namespace: demo-namespace
+spec:
+ storageClassName: csi-storageclass
+ dataSource:
+ name: src-pvc
+ kind: PersistentVolumeClaim
+ apiGroup: ""
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 1Gi # NOTE this capacity must be specified and must be >= the capacity of the source volume
+```
+
+When the `PersistentVolumeClaim` object is created, it will trigger provisioning of a new volume that is pre-populated with data from the specified `dataSource` volume. It is the sole responsbility of the CSI Plugin to implement the cloning of volumes.
+
+## As a storage vendor, how do I add support for cloning to my CSI driver?
+
+For more information on how to implement cloning in your CSI Plugin, reference the [developing a CSI driver for Kubernetes](https://kubernetes-csi.github.io/docs/developing.html) section of the CSI docs.
+
+## What are the limitations of alpha?
+
+The alpha implementation of cloning for Kubernetes has the following limitations:
+
+* Does not support cloning volumes across different namespaces
+* Does not support cloning volumes across different storage classes (backends)
+
+## Future
+Depending on feedback and adoption, the Kubernetes team plans to push the CSI cloning implementation to beta in 1.16.
+
+A common question that users have regarding cloning is "what about cross namespace clones". As we've mentioned, the current release requires that source and destination be in the same namespace. There are however efforts underway to propose a namespace transfer API, future versions of Kubernetes may provide the ability to transfer volume resources from one namespace to another. This feature is still under discussion and design, and may or may not be available in a future release.
+
+## How can I learn more?
+
+You can find additional documentation on the cloning feature in the [storage concept docs](https://k8s.io/docs/concepts/storage/volume-pvc-datasource.md) and also the [CSI docs](https://kubernetes-csi.github.io/docs/volume-cloning.html).
+
+## How do I get involved?
+
+This project, like all of Kubernetes, is the result of hard work by many contributors from diverse backgrounds working together.
+
+We offer a huge thank you to all the contributors in Kubernetes Storage SIG and CSI community who helped review the design and implementation of the project, including but not limited to the following:
+
+* Saad Ali ([saadali](https://github.com/saadali))
+* Tim Hockin ([thockin](https://github.com/thockin))
+* Jan Šafránek ([jsafrane](https://github.com/jsafrane))
+* Michelle Au ([msau42](https://github.com/msau42))
+* Xing Yang ([xing-yang](https://github.com/xing-yang))
+
+If you’re interested in getting involved with the design and development of CSI or any part of the Kubernetes Storage system, join the [Kubernetes Storage Special Interest Group](https://github.com/kubernetes/community/tree/master/sig-storage) (SIG). We’re rapidly growing and always welcome new contributors.
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
new file mode 100644
index 0000000000..f0ff1f75cc
--- /dev/null
+++ b/content/en/blog/_posts/2019-06-24-kubeadm-ha-v115.md
@@ -0,0 +1,212 @@
+---
+layout: blog
+title: 'Automated High Availability in kubeadm v1.15: Batteries Included But Swappable'
+date: 2019-06-24
+---
+
+**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
+
+[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
+[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 graduated it from beta to
+[generally available (GA) at the end of 2018](https://kubernetes.io/blog/2018/12/04/production-ready-kubernetes-cluster-creation-with-kubeadm/).
+
+After this important milestone, the kubeadm team is now focused on the stability of the core feature set and working on
+maturing existing features.
+
+With this post, we are introducing the improvements made in the v1.15 release of kubeadm.
+
+## The scope of kubeadm
+
+kubeadm is focused on performing the actions necessary to get a minimum viable, secure cluster up and running in a
+user-friendly way. kubeadm's scope is limited to the local machine’s filesystem and the Kubernetes API, and it is
+intended to be a _composable building block for higher-level tools_.
+
+The core of the kubeadm interface is quite simple: new control plane nodes are created by you running
+kubeadm init, worker nodes are joined to the control plane by you running
+kubeadm join. Also included are common utilities for managing already bootstrapped
+clusters, such as control plane upgrades, token and certificate renewal.
+
+To keep kubeadm lean, focused, and vendor/infrastructure agnostic, the following tasks are out of scope:
+
+* Infrastructure provisioning
+* Third-party networking
+* Non-critical add-ons, e.g. monitoring, logging, and visualization
+* Specific cloud provider integrations
+
+Those tasks are addressed by other SIG Cluster Lifecycle projects, such as the
+[Cluster API](https://github.com/kubernetes-sigs/cluster-api) for infrastructure provisioning and management.
+
+Instead, kubeadm covers only the common denominator in every Kubernetes cluster: the
+[control plane](https://kubernetes.io/docs/concepts/#kubernetes-control-plane).
+
+
+
+## What’s new in kubeadm v1.15?
+
+### High Availability to Beta
+
+We are delighted to announce that automated support for High Availability clusters is graduating to **Beta** in kubeadm v1.15. Let’s give a great shout out to all the contributors that helped in this effort and to the early adopter users for the great feedback received so far!
+
+But how does automated High Availability work in kubeadm?
+
+The great news is that you can use the familiar `kubeadm init` or `kubeadm join` workflow for creating high availability cluster as well, with the only difference that you have to pass the `--control-plane` flag to `kubeadm join` when adding more control plane nodes.
+
+A 3-minute screencast of this feature is here:
+
+[](https://asciinema.org/a/252343)
+
+In a nutshell:
+
+
+1. **Set up a Load Balancer.** You need an _external load balancer_; providing this however, is out of scope of kubeadm.
+ * The community will provide a set of reference implementations for this task though
+ * HAproxy, Envoy, or a similar Load Balancer from a cloud provider work well
+2. **Run kubeadm init** on the first control plane node, with small modifications:
+ * Create a [kubeadm Config File](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file)
+ * In the config file, set the `controlPlaneEndpoint` field to where your Load Balancer can be reached at.
+ * Run init, with the `--upload-certs` flag like this: `sudo kubeadm init --config=kubeadm-config.yaml --upload-certs`
+3. **Run kubeadm join --control-plane** at any time when you want to expand the set of control plane nodes
+ * Both control-plane- and normal nodes can be joined in any order, at any time
+ * The command to run will be given by `kubeadm init` above, and is of the form:
+
+ ```
+ kubeadm join [LB endpoint] \
+ --token ... \
+ --discovery-token-ca-cert-hash sha256:... \
+ --control-plane --certificate-key ...
+ ```
+
+For those interested in the details, there are many things that make this functionality possible. Most notably:
+
+* **Automated certificate transfer**. kubeadm implements an automatic certificate copy feature to automate the distribution of all the certificate authorities/keys that must be shared across all the control-planes nodes in order to get your cluster to work. This feature can be activated by passing `--upload-certs` to `kubeadm init`; see [configure and deploy an HA control plane](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/) for more details. This is an explicit opt-in feature, you can also distribute the certificates manually in your preferred way. \
+
+* **Dynamically-growing etcd cluster**. When you're not providing an external etcd cluster, kubeadm automatically adds a new etcd member, running as a static pod. All the etcd members are joined in a “stacked” etcd cluster that grows together with your high availability control-plane \
+
+* **Concurrent joining**. Similarly to what already implemented for worker nodes, you join control-plane nodes whenever, in any order, or even in parallel. \
+
+* **Upgradable**. The kubeadm upgrade workflow was improved in order to properly handle the HA scenario, and, after starting the upgrade with `kubeadm upgrade apply` as usual, users can now complete the upgrade process by using `kubeadm upgrade node` both on the remaining control-plane nodes and worker nodes
+
+Finally, it is also worthy to notice that an entirely new test suite has been created specifically for ensuring High Availability in kubeadm will stay stable over time.
+
+
+### Certificate Management
+
+Certificate management has become more simple and robust in kubeadm v1.15.
+
+If you perform Kubernetes version upgrades regularly, kubeadm will now take care of keeping your cluster up to date and reasonably secure by [automatically rotating all your certificates](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#automatic-certificate-renewal) at `kubeadm upgrade` time.
+
+If instead, you prefer to renew your certificates manually, you can opt out from the automatic certificate renewal by passing `--certificate-renewal=false` to `kubeadm upgrade` commands. Then you can perform [manual certificate renewal](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#manual-certificate-renewal) with the `kubeadm alpha certs renew` command.
+
+
+But there is more.
+
+A new command `kubeadm alpha certs check-expiration` was introduced to allow users to
+[check certificate expiration](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#check-certificate-expiration). The output is similar to this:
+
+```console
+CERTIFICATE EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
+admin.conf May 15, 2020 13:03 UTC 364d false
+apiserver May 15, 2020 13:00 UTC 364d false
+apiserver-etcd-client May 15, 2020 13:00 UTC 364d false
+apiserver-kubelet-client May 15, 2020 13:00 UTC 364d false
+controller-manager.conf May 15, 2020 13:03 UTC 364d false
+etcd-healthcheck-client May 15, 2020 13:00 UTC 364d false
+etcd-peer May 15, 2020 13:00 UTC 364d false
+etcd-server May 15, 2020 13:00 UTC 364d false
+front-proxy-client May 15, 2020 13:00 UTC 364d false
+scheduler.conf May 15, 2020 13:03 UTC 364d false
+```
+
+You should expect also more work around certificate management in kubeadm in the next releases, with the introduction of ECDSA keys and with improved support for CA key rotation. Additionally, the commands staged under `kubeadm alpha` are expected to move top-level soon.
+
+
+### Improved Configuration File Format
+
+You can argue that there are hardly two Kubernetes clusters that are configured equally, and hence there is a need to customize how the cluster is set up depending on the environment. One way of configuring a component is via flags. However, this has some scalability limitations:
+
+
+* **Hard to maintain.** When a component’s flag set grows over 30+ flags, configuring it becomes really painful.
+* **Complex upgrades**. When flags are removed, deprecated or changed, you need to upgrade of the binary at the same time as the arguments.
+* **Key-value limited**. There are simply many types of configuration you can’t express with the `--key=value` syntax.
+* **Imperative**. In contrast to Kubernetes API objects themselves that are declaratively specified, flag arguments are imperative by design.
+
+This is a key problem for Kubernetes components in general, as some components have 150+ flags. With kubeadm we’re pioneering the ComponentConfig effort, and providing users with a small set of flags, but most importantly, a **declarative and versioned configuration file** for advance use-cases. We call this _ComponentConfig_. It has the following characteristics:
+
+
+* **Upgradable**: You can upgrade the binary, and still use the existing, older schema. Automatic migrations.
+* **Programmable**. Configuration expressed in JSON/YAML allows for consistent, and programmable manipulation
+* **Expressible**. Advanced patterns of configuration can be used and applied.
+* **Declarative**. OpenAPI information can easily be exposed / used for doc generation
+
+In kubeadm v1.15, we have improved the structure and are releasing the new **v1beta2** format. Important to note that the existing **v1beta1** format released in v1.13 will still continue to work for several releases. This means you can upgrade kubeadm to v1.15, and still use your existing v1beta1 configuration files. When you’re ready to take advantage of the improvements made in v1beta2, you can perform an automatic schema migration using the `kubeadm config migrate` command.
+
+During the course of the year, we’re looking forward to graduate the schema to General Availability `v1`.` If you’re interested in this effort, you can also join [WG Component Standard](https://github.com/kubernetes/community/tree/master/wg-component-standard).
+
+## What’s next?
+
+### 2019 plans
+
+We are focusing our efforts around graduating the configuration file format to GA (`kubeadm.k8s.io/v1`)`, graduating this super-easy High Availability flow to stable, and providing better tools around rotating certificates needed for running the cluster automatically.
+
+In addition to these three key milestones of our charter, we want to improve the following areas:
+
+* Support joining Windows nodes to a kubeadm cluster (with end-to-end tests)
+* Improve the upstream CI signal, mainly for HA and upgrades
+* Consolidate how Kubernetes artifacts are built and installed
+* Utilize Kustomize to allow for advanced, layered and declarative configuration
+
+We make no guarantees that these deliverables will ship this year though, as this is a community effort. If you want to see these things happen, please join our SIG and start contributing! The ComponentConfig issues in particular need more attention.
+
+
+### kubeadm now has a logo!
+
+[Dan Kohn](https://github.com/dankohn) offered CNCF’s help with creating a logo for kubeadm in this cycle.
+[Alex Contini](https://github.com/alexcontini) created 19 (!) different logo options for the community to vote on. The public poll
+was active for around a week, and we got 386 answers. The winning option got 17.4% of the votes. In other words, now we have an
+official logo!
+
+
+
+## Contributing
+
+If this all sounds exciting, **join us**!
+
+[SIG Cluster Lifecycle](https://github.com/kubernetes/community/tree/master/sig-cluster-lifecycle) has many different
+subprojects, where kubeadm is one of them. In the following picture you can see that there are many pieces in the
+puzzle, and we have a lot still to do.
+
+
+
+Some handy links if you want to start contribute:
+
+* You can watch the SIG Cluster Lifecycle [New Contributor Onboarding](https://www.youtube.com/watch?v=Bof9aveB3rA) session on YouTube.
+* Look out for “good first issue”, “help wanted” and “sig/cluster-lifecycle” labeled issues in our repositories
+ (e.g. [kubernetes/kubeadm](https://github.com/kubernetes/kubeadm))
+* Join [#sig-cluster-lifecycle](https://kubernetes.slack.com/messages/sig-cluster-lifecycle), [#kubeadm](https://kubernetes.slack.com/messages/kubeadm), [#cluster-api](https://kubernetes.slack.com/messages/cluster-api), [#minikube](https://kubernetes.slack.com/messages/minikube), [#kind](https://kubernetes.slack.com/messages/kind), etc. in Slack
+* Join our public, bi-weekly SIG Cluster Lifecycle Zoom meeting at Tuesdays 9am PT
+ * Check out the [Meeting Notes](https://docs.google.com/document/d/1Gmc7LyCIL_148a9Tft7pdhdee0NBHdOfHS1SAF0duI4/edit) to join
+* Join our public, weekly kubeadm Office Hours Zoom meeting at Wednesdays 9am PT
+ * Check out the [Meeting Notes](https://docs.google.com/document/d/130_kiXjG7graFNSnIAgtMS1G8zPDwpkshgfRYS0nggo/edit) to join
+* Check out the [SIG Cluster Lifecycle Intro](https://youtu.be/bA2M41J4wvg) or the
+ [kubeadm Deep Dive](https://youtu.be/spXSSIbZTqM) sessions from KubeCon Barcelona
+
+
+### Thank You
+
+This release wouldn’t have been possible without the help of the great people that have been contributing to SIG Cluster Lifecycle
+and kubeadm. We would like to thank all the kubeadm contributors and companies making it possible for their developers to work
+on Kubernetes!
+
+In particular, we would like to thank the [kubeadm subproject owners](https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/OWNERS) that made this possible:
+
+ - Tim St. Clair , [@timothysc](https://github.com/timothysc), SIG Cluster Lifecycle co-chair, VMware
+ - Lucas Käldström, [@luxas](https://github.com/luxas), SIG Cluster Lifecycle co-chair, Weaveworks
+ - Fabrizio Pandini, [@fabriziopandini](https://github.com/fabriziopandini), Independent
+ - Lubomir I. Ivanov, [@neolit123](https://github.com/neolit123), VMware
+ - Rostislav M. Georgiev, [@rosti](https://github.com/rosti), VMware
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
new file mode 100644
index 0000000000..b4372f5ace
--- /dev/null
+++ b/content/en/blog/_posts/2019-06-25-recap-of-contributor-summit-bcn-2019.md
@@ -0,0 +1,58 @@
+---
+layout: blog
+title: 'Recap of Kubernetes Contributor Summit Barcelona 2019'
+date: 2019-06-25
+---
+
+**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!
+
+## Contributor Celebration
+
+Sunday evening before the main event we held a **Contributor Celebration**, which was very well attended. We hope that all new and current contributors felt welcome and enjoyed the food, the music, and the company.
+
+
+
+
+## New Contributor Workshops
+
+We had over **130 people registered** for the New Contributor Workshops. This year the workshops were divided into _101-level content_ for people who were not familiar with contributing to an open source project, and _201-level content_ for those who were.
+
+The workshops contained overviews of what SIGs are, deep-dives into the codebase, test builds of the Kubernetes project, and real contributions.
+
+Did you miss something during the workshops? We now have them [published on YouTube](https://www.youtube.com/playlist?list=PL69nYSiGNLP2WTJ6P8sQenhf0RY-JqF5L), with added closed captioning!
+
+
+
+
+## SIG Face-to-Face
+
+We also tried a new thing for Barcelona, the SIG Face-to-Face meetings. We had **over 170 people** registered to attend the 11 SIG and one subproject meetings throughout the day, going over what they're working on and what they want to do in the near future.
+
+
+
+
+## SIG Meet and Greet
+
+At the end of the summit, both new and current contributors had a chance to sit down with SIG chairs and members. The goal of this was to make sure that contributors got to know even more individuals in the project, hear what some of the SIGs actually do, and sign up to be a part of them and learn more.
+
+
+
+
+
+## Join us!
+
+Interested in attending the Contributor Summit in San Diego? [You can get more information on our event page](https://events.linuxfoundation.org/events/contributor-summit-north-america-2019/), sign up and we will notify you when registration opens.
+
+## Thanks!
+
+Again, thank you to everyone for making this an amazing event, and we're looking forward to seeing you next time!
+
+To our Barcelona crew, you ROCK! 🥁
+
+Paris Pittman, Bob Killen, Guinevere Saenger, Tim Pepper, Deb Giles, Ihor Dvoretskyi, Jorge Castro, Noah Kantrowitz, Dawn Foster, Ruben Orduz, Josh Berkus, Kiran Mova, Bart Smykla, Rostislav Georgiev, Jeffrey Sica, Rael Garcia, Silvia Moura Pina, Arnaud Meukam, Jason DeTiberius, Andy Goldstein, Suzanne Ambiel, Jonas Rosland
+
+You can see many more pictures from the event [over on CNCF's Flickr](https://www.flickr.com/photos/143247548@N03/sets/72157680323974628).
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
new file mode 100644
index 0000000000..549dfdb72f
--- /dev/null
+++ b/content/en/blog/_posts/2019-07-18-some-apis-are-being-deprecated.md
@@ -0,0 +1,94 @@
+---
+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)
+
+As the Kubernetes API evolves, APIs are periodically reorganized or upgraded.
+When APIs evolve, the old API is deprecated and eventually removed.
+
+The 1.16 release will deprecate APIs for four services:
+
+* NetworkPolicy
+* PodSecurityPolicy
+* DaemonSet, Deployment, StatefulSet, and ReplicaSet
+* Ingress
+
+None of these resources will be removed from Kubernetes or deprecated in any way.
+However, to continue using these resources, you must use a current version of
+the Kubernetes API.
+
+# Migration Details
+
+* NetworkPolicy: will no longer be served from **extensions/v1beta1** in **v1.16**.
+ * Migrate to the networking.k8s.io/v1 API, available since v1.8. Existing persisted
+ data can be retrieved/updated via the networking.k8s.io/v1 API.
+* PodSecurityPolicy: will no longer be served from **extensions/v1beta1** in **v1.16**.
+ * Migrate to the policy/v1beta1 API, available since v1.10. Existing persisted
+ data can be retrieved/updated via the policy/v1beta1 API.
+* DaemonSet, Deployment, StatefulSet, and ReplicaSet: will no longer be served
+from **extensions/v1beta1**, **apps/v1beta1**, or **apps/v1beta2** in **v1.16**.
+ * Migrate to the apps/v1 API, available since v1.9. Existing persisted data
+ can be retrieved/updated via the apps/v1 API.
+* Ingress: will no longer be served from **extensions/v1beta1** in **v1.18**.
+ * Migrate to the networking.k8s.io/v1beta1 API. Existing persisted data can be
+ retrieved/updated via the networking.k8s.io/v1beta1 API.
+
+# What To Do
+
+Kubernetes 1.16 is due to be released in September 2019, so be sure to audit
+your configuration and integrations now!
+
+* Change YAML files to reference the newer APIs
+* Update custom integrations and controllers to call the newer APIs
+* Update third party tools (ingress controllers, continuous delivery systems)
+to call the newer APIs
+
+Migrating to the new Ingress API will only require changing the API path - the
+API fields remain the same. However, migrating other resources (EG Deployments)
+will require some updates based on changed fields. You can use the
+`kubectl convert` command to automatically convert an existing object:
+`kubectl convert -f --output-version /`.
+
+For example, to convert
+an older Deployment to apps/v1, you can run:
+`kubectl convert -f ./my-deployment.yaml --output-version apps/v1`
+Note that this may use non-ideal default values. To learn more about a specific
+resource, check the Kubernetes [api reference](https://kubernetes.io/docs/reference/#api-reference).
+
+You can test your clusters by starting an apiserver with the above resources
+disabled, to simulate the upcoming removal. Add the following flag to the
+apiserver startup arguments:
+
+`--runtime-config=apps/v1beta1=false,apps/v1beta2=false,extensions/v1beta1/daemonsets=false,extensions/v1beta1/deployments=false,extensions/v1beta1/replicasets=false,extensions/v1beta1/networkpolicies=false,extensions/v1beta1/podsecuritypolicies=false`
+
+# Want To Know More?
+
+Deprecations are announced in the Kubernetes release notes. You can see these
+announcements in
+[1.14](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md#deprecations)
+and [1.15](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.15.md#deprecations-and-removals).
+
+You can read more [in our deprecation policy document](https://kubernetes.io/docs/reference/using-api/deprecation-policy/#deprecating-parts-of-the-api)
+about the deprecation policies for Kubernetes APIs, and other Kubernetes components.
+Deprecation policies vary by component (for example, the primary APIs vs.
+admin CLIs) and by maturity (alpha, beta, or GA).
+
+These details were also [previously announced](https://groups.google.com/forum/#!topic/kubernetes-dev/je0rjyfTVyc)
+on the kubernetes-dev mailing list, along with the releases of Kubernetes 1.14
+and 1.15. From Jordan Liggitt:
+
+```
+In case you missed it in the 1.15.0 release notes, the timelines for deprecated resources in the extensions/v1beta1, apps/v1beta1, and apps/v1beta2 API groups to no longer be served by default have been updated:
+
+* NetworkPolicy resources will no longer be served from extensions/v1beta1 by default in v1.16. Migrate to the networking.k8s.io/v1 API, available since v1.8. Existing persisted data can be retrieved/updated via the networking.k8s.io/v1 API.
+* PodSecurityPolicy resources will no longer be served from extensions/v1beta1 by default in v1.16. Migrate to the policy/v1beta1 API, available since v1.10. Existing persisted data can be retrieved/updated via the policy/v1beta1 API.
+* DaemonSet, Deployment, StatefulSet, and ReplicaSet resources will no longer be served from extensions/v1beta1, apps/v1beta1, or apps/v1beta2 by default in v1.16. Migrate to the apps/v1 API, available since v1.9. Existing persisted data can be retrieved/updated via the apps/v1 API.
+
+To start a v1.15.0 API server with these resources disabled to flush out dependencies on these deprecated APIs, and ensure your application/manifests will work properly against the v1.16 release, use the following --runtime-config argument:
+
+--runtime-config=apps/v1beta1=false,apps/v1beta2=false,extensions/v1beta1/daemonsets=false,extensions/v1beta1/deployments=false,extensions/v1beta1/replicasets=false,extensions/v1beta1/networkpolicies=false,extensions/v1beta1/podsecuritypolicies=false
+```
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
new file mode 100644
index 0000000000..b11db1c8e0
--- /dev/null
+++ b/content/en/blog/_posts/2019-07-23-get-started-with-kubernetes-using-python.md
@@ -0,0 +1,230 @@
+---
+layout: blog
+title: "Get started with Kubernetes (using Python)"
+date: 2019-07-23
+---
+
+**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).
+
+## What we’ll do
+1. Get the code and run the application locally
+2. Create an image and run the application in Docker
+3. Create a deployment and run the application in Kubernetes
+
+## Prerequisites
+* A Kubernetes service - I'm using [Docker Desktop with Kubernetes](https://www.docker.com/products/kubernetes) in this walkthrough, but you can use one of the others. See [Getting Started](https://kubernetes.io/docs/setup/) for a full listing.
+* [Python 3.7](https://www.python.org/) installed
+* [Git](https://git-scm.com/downloads) installed
+
+## Containerizing an application
+In this section you’ll take some source code, verify it runs locally, and then create a Docker image of the application. The sample application used is a very simple Flask web application; if you want to test it locally, you’ll need Python installed. Otherwise, you can skip to the "Create a Dockerfile" section.
+
+### Get the application code
+
+Use git to clone the repository to your local machine:
+```
+git clone https://github.com/JasonHaley/hello-python.git
+```
+
+Change to the app directory:
+```
+cd hello-python/app
+```
+
+There are only two files in this directory. If you look at the main.py file, you’ll see the application prints out a hello message. You can learn more about Flask on the [Flask website](http://flask.pocoo.org/).
+
+```
+from flask import Flask
+app = Flask(__name__)
+
+@app.route("/")
+def hello():
+ return "Hello from Python!"
+
+if __name__ == "__main__":
+ app.run(host='0.0.0.0')
+```
+
+The requirements.txt file contains the list of packages needed by the main.py and will be used by [pip](https://pip.pypa.io/en/stable/) to install the Flask library.
+
+{{< note >}}
+
+When you start writing more advanced Python, you'll find it's not always recommended to use `pip install` and may want to use `virtualenv` (or `pyenv`) to install your dependencies in a virtual environment.
+
+{{< /note >}}
+
+### Run locally
+Manually run the installer and application using the following commands:
+```
+pip install -r requirements.txt
+python main.py
+```
+
+This will start a development web server hosting your application, which you will be able to see by navigating to http://localhost:5000. Because port 5000 is the default port for the development server, we didn’t need to specify it.
+
+### Create a Dockerfile
+Now that you have verified the source code works, the first step in containerizing the application is to create a Dockerfile.
+
+In the hello-python/app directory, create a file named Dockerfile with the following contents and save it:
+```
+FROM python:3.7
+
+RUN mkdir /app
+WORKDIR /app
+ADD . /app/
+RUN pip install -r requirements.txt
+
+EXPOSE 5000
+CMD ["python", "/app/main.py"]
+```
+
+This file is a set of instructions Docker will use to build the image. For this simple application, Docker is going to:
+
+1. Get the official [Python Base Image](https://hub.docker.com/_/python/) for version 3.7 from Docker Hub.
+2. In the image, create a directory named app.
+3. Set the working directory to that new app directory.
+4. Copy the local directory’s contents to that new folder into the image.
+5. Run the pip installer (just like we did earlier) to pull the requirements into the image.
+6. Inform Docker the container listens on port 5000.
+7. Configure the starting command to use when the container starts.
+
+### Create an image
+At your command line or shell, in the hello-python/app directory, build the image with the following command:
+```
+docker build -f Dockerfile -t hello-python:latest .
+```
+
+{{< note >}}
+
+I'm using the :latest tag in this example, if you are not familiar with what it is you may want to read [Docker: The latest Confusion](https://container-solutions.com/docker-latest-confusion/).
+
+{{< /note >}}
+
+
+This will perform those seven steps listed above and create the image. To verify the image was created, run the following command:
+
+```
+docker image ls
+```
+
+
+The application is now containerized, which means it can now run in Docker and Kubernetes!
+
+## Running in Docker
+Before jumping into Kubernetes, let’s verify it works in Docker.
+Run the following command to have Docker run the application in a container and map it to port 5001:
+```
+docker run -p 5001:5000 hello-python
+```
+Now navigate to http://localhost:5001, and you should see the “Hello form Python!” message.
+
+### More info
+* [Get started with Docker](https://docs.docker.com/get-started/)
+* [Best practices for writing Dockerfiles](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)
+* [Docker Cheat Sheet](https://www.docker.com/sites/default/files/Docker_CheatSheet_08.09.2016_0.pdf) (pdf)
+
+## Running in Kubernetes
+You are finally ready to get the application running in Kubernetes. Because you have a web application, you will create a service and a deployment.
+
+First verify your kubectl is configured. At the command line, type the following:
+```
+kubectl version
+```
+
+If you don’t see a reply with a Client and Server version, you’ll need to [install](https://kubernetes.io/docs/tasks/tools/install-kubectl/) and configure it.
+
+If you are running on Windows or Mac, make sure it is using the Docker for Desktop context by running the following:
+```
+kubectl config use-context docker-for-desktop
+```
+
+Now you are working with Kubernetes! You can see the node by typing:
+```
+kubectl get nodes
+```
+
+Now let’s have it run the application. Create a file named deployment.yaml and add the following contents to it and then save it:
+
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: hello-python-service
+spec:
+ selector:
+ app: hello-python
+ ports:
+ - protocol: "TCP"
+ port: 6000
+ targetPort: 5000
+ type: LoadBalancer
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: hello-python
+spec:
+ replicas: 4
+ template:
+ metadata:
+ labels:
+ app: hello-python
+ spec:
+ containers:
+ - name: hello-python
+ image: hello-python:latest
+ imagePullPolicy: Never
+ ports:
+ - containerPort: 5000
+```
+
+This YAML file is the instructions to Kubernetes for what you want running. It is telling Kubernetes the following:
+* You want a load-balanced service exposing port 6000
+* You want four instances of the hello-python container running
+
+Use kubectl to send the YAML file to Kubernetes by running the following command:
+```
+kubectl apply -f deployment.yaml
+```
+
+You can see the pods are running if you execute the following command:
+```
+kubectl get pods
+```
+
+
+Now navigate to http://localhost:6000, and you should see the “Hello form Python!” message.
+
+That’s it! The application is now running in Kubernetes!
+
+### More Info
+* [Learn Kubernetes Basics](https://azure.microsoft.com/en-us/topic/kubernetes/)
+* [kubectl Cheat Sheet](https://kubernetes.io/docs/reference/kubectl/cheatsheet/)
+* [kubectl for Docker Users](https://kubernetes.io/docs/reference/kubectl/docker-cli-to-kubectl/)
+
+## Summary
+In this walk-through, we containerized an application, and got it running in Docker and in Kubernetes. This simple application only scratches the surface of what’s possible (and what you’ll need to learn).
+
+### Next steps
+If you are just getting started and this walk-through was useful to you, then the following resources should be good next steps for you to further expand your Kubernetes knowledge:
+
+* [Introduction to Microservices, Docker, and Kubernetes](https://www.youtube.com/watch?v=1xo-0gCVhTU) - 55-minute video by James Quigley
+ * This is a great place to start because it provides more information than I could here.
+* [Containerize your Apps with Docker and Kubernetes](https://github.com/PacktPublishing/Containerize-your-Apps-with-Docker-and-Kubernetes) - free e-book by Dr Gabriel N Schenker
+ * This is my favorite book on Docker and Kubernetes.
+* [Kubernetes Learning Path: 50 days from zero to hero with Kubernetes](https://aka.ms/LearnKubernetes) - on Microsoft’s site
+ * This is a 10-page pdf that has tons of links to videos (with Brendan Burns), documentation sites, and a really good workshop for Azure Kubernetes Service.
+
+## How to enable Kubernetes in Docker Desktop
+Once you have Docker Desktop installed, open the Settings:
+
+
+
+Select the **Kubernetes** menu item on the left and verify that the **Enable Kubernetes** is checked. If it isn’t, **check it** and click the **Apply** button at the bottom right:
+
+
diff --git a/content/en/case-studies/chinaunicom/index.html b/content/en/case-studies/chinaunicom/index.html
index b6827ff922..675273c47f 100644
--- a/content/en/case-studies/chinaunicom/index.html
+++ b/content/en/case-studies/chinaunicom/index.html
@@ -89,7 +89,7 @@ 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."
+ 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."
diff --git a/content/en/case-studies/spotify/index.html b/content/en/case-studies/spotify/index.html
index 34b3cc6a71..f408d217b6 100644
--- a/content/en/case-studies/spotify/index.html
+++ b/content/en/case-studies/spotify/index.html
@@ -1,6 +1,6 @@
---
title: Spotify study Case Study
-linkTitle: cern
+linkTitle: Spotify
case_study_styles: true
cid: caseStudies
css: /css/style_case_studies.css
@@ -33,6 +33,7 @@ quote: >
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.
@@ -48,7 +49,7 @@ quote: >
"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.
- "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.
+
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.
diff --git a/content/en/docs/concepts/_index.md b/content/en/docs/concepts/_index.md
index 68ac58bb66..8608c9600c 100644
--- a/content/en/docs/concepts/_index.md
+++ b/content/en/docs/concepts/_index.md
@@ -7,7 +7,7 @@ weight: 40
{{% capture overview %}}
-The Concepts section helps you learn about the parts of the Kubernetes system and the abstractions Kubernetes uses to represent your cluster, and helps you obtain a deeper understanding of how Kubernetes works.
+The Concepts section helps you learn about the parts of the Kubernetes system and the abstractions Kubernetes uses to represent your {{< glossary_tooltip text="cluster" term_id="cluster" length="all" >}}, and helps you obtain a deeper understanding of how Kubernetes works.
{{% /capture %}}
diff --git a/content/en/docs/concepts/architecture/nodes.md b/content/en/docs/concepts/architecture/nodes.md
index 921e380872..d53ca69c91 100644
--- a/content/en/docs/concepts/architecture/nodes.md
+++ b/content/en/docs/concepts/architecture/nodes.md
@@ -30,6 +30,10 @@ A node's status contains the following information:
* [Capacity and Allocatable](#capacity)
* [Info](#info)
+Node status and other details about a node can be displayed using below command:
+```shell
+kubectl describe node
+```
Each section is described in detail below.
### Addresses
diff --git a/content/en/docs/concepts/cluster-administration/certificates.md b/content/en/docs/concepts/cluster-administration/certificates.md
index 1a3ddf8263..19b0c67b47 100644
--- a/content/en/docs/concepts/cluster-administration/certificates.md
+++ b/content/en/docs/concepts/cluster-administration/certificates.md
@@ -162,7 +162,7 @@ Finally, add the same parameters into the API server start parameters.
}
}
1. Create a JSON config file for CA certificate signing request (CSR), for example,
- `ca-csr.json`. Be sure the replace the values marked with angle brackets with
+ `ca-csr.json`. Be sure to replace the values marked with angle brackets with
real values you want to use.
{
diff --git a/content/en/docs/concepts/cluster-administration/cloud-providers.md b/content/en/docs/concepts/cluster-administration/cloud-providers.md
index 6ea9d9ed21..f823c4e2a4 100644
--- a/content/en/docs/concepts/cluster-administration/cloud-providers.md
+++ b/content/en/docs/concepts/cluster-administration/cloud-providers.md
@@ -336,10 +336,10 @@ should appear in the `[Metadata]` section of the `cloud.conf` file:
both configuration drive and metadata service though and only one or the other
may be available which is why the default is to check both.
-##### Router
+##### Route
These configuration options for the OpenStack provider pertain to the [kubenet]
-Kubernetes network plugin and should appear in the `[Router]` section of the
+Kubernetes network plugin and should appear in the `[Route]` section of the
`cloud.conf` file:
* `router-id` (Optional): If the underlying cloud's Neutron deployment supports
diff --git a/content/en/docs/concepts/cluster-administration/logging.md b/content/en/docs/concepts/cluster-administration/logging.md
index 440cb842d1..2c1ab5f3fe 100644
--- a/content/en/docs/concepts/cluster-administration/logging.md
+++ b/content/en/docs/concepts/cluster-administration/logging.md
@@ -36,6 +36,9 @@ To run this pod, use the following command:
```shell
kubectl apply -f https://k8s.io/examples/debug/counter-pod.yaml
+```
+The output is:
+```
pod/counter created
```
@@ -43,6 +46,9 @@ To fetch the logs, use the `kubectl logs` command, as follows:
```shell
kubectl logs counter
+```
+The output is:
+```
0: Mon Jan 1 00:00:00 UTC 2001
1: Mon Jan 1 00:00:01 UTC 2001
2: Mon Jan 1 00:00:02 UTC 2001
@@ -105,7 +111,7 @@ systemd is not present, they write to `.log` files in the `/var/log` directory.
System components inside containers always write to the `/var/log` directory,
bypassing the default logging mechanism. They use the [klog][klog]
logging library. You can find the conventions for logging severity for those
-components in the [development docs on logging](https://git.k8s.io/community/contributors/devel/logging.md).
+components in the [development docs on logging](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md).
Similarly to the container logs, system component logs in the `/var/log`
directory should be rotated. In Kubernetes clusters brought up by
diff --git a/content/en/docs/concepts/cluster-administration/manage-deployment.md b/content/en/docs/concepts/cluster-administration/manage-deployment.md
index 751c269442..23fa2204b6 100644
--- a/content/en/docs/concepts/cluster-administration/manage-deployment.md
+++ b/content/en/docs/concepts/cluster-administration/manage-deployment.md
@@ -1,6 +1,5 @@
---
reviewers:
-- bgrant0607
- janetkuo
- mikedanese
title: Managing Resources
diff --git a/content/en/docs/concepts/cluster-administration/networking.md b/content/en/docs/concepts/cluster-administration/networking.md
index 9610cf5035..9277c30d5d 100644
--- a/content/en/docs/concepts/cluster-administration/networking.md
+++ b/content/en/docs/concepts/cluster-administration/networking.md
@@ -98,6 +98,14 @@ AOS supports the use of common vendor equipment from manufacturers including Cis
Details on how the AOS system works can be accessed here: http://www.apstra.com/products/how-it-works/
+### AWS VPC CNI for Kubernetes
+
+The [AWS VPC CNI](https://github.com/aws/amazon-vpc-cni-k8s) offers integrated AWS Virtual Private Cloud (VPC) networking for Kubernetes clusters. This CNI plugin offers high throughput and availability, low latency, and minimal network jitter. Additionally, users can apply existing AWS VPC networking and security best practices for building Kubernetes clusters. This includes the ability to use VPC flow logs, VPC routing policies, and security groups for network traffic isolation.
+
+Using this CNI plugin allows Kubernetes pods to have the same IP address inside the pod as they do on the VPC network. The CNI allocates AWS Elastic Networking Interfaces (ENIs) to each Kubernetes node and using the secondary IP range from each ENI for pods on the node. The CNI includes controls for pre-allocation of ENIs and IP addresses for fast pod startup times and enables large clusters of up to 2,000 nodes.
+
+Additionally, the CNI can be run alongside [Calico for network policy enforcement](https://docs.aws.amazon.com/eks/latest/userguide/calico.html). The AWS VPC CNI project is open source with [documentation on GitHub](https://github.com/aws/amazon-vpc-cni-k8s).
+
### Big Cloud Fabric from Big Switch Networks
[Big Cloud Fabric](https://www.bigswitch.com/container-network-automation) is a cloud native networking architecture, designed to run Kubernetes in private cloud/on-premises environments. Using unified physical & virtual SDN, Big Cloud Fabric tackles inherent container networking problems such as load balancing, visibility, troubleshooting, security policies & container traffic monitoring.
@@ -213,6 +221,10 @@ traffic to the internet.
[Knitter](https://github.com/ZTE/Knitter/) is a network solution which supports multiple networking in Kubernetes. It provides the ability of tenant management and network management. Knitter includes a set of end-to-end NFV container networking solutions besides multiple network planes, such as keeping IP address for applications, IP address migration, etc.
+### Kube-OVN
+
+[Kube-OVN](https://github.com/alauda/kube-ovn) is an OVN-based kubernetes network fabric for enterprises. With the help of OVN/OVS, it provides some advanced overlay network features like subnet, QoS, static IP allocation, traffic mirroring, gateway, openflow-based network policy and service proxy.
+
### Kube-router
[Kube-router](https://github.com/cloudnativelabs/kube-router) is a purpose-built networking solution for Kubernetes that aims to provide high performance and operational simplicity. Kube-router provides a Linux [LVS/IPVS](http://www.linuxvirtualserver.org/software/ipvs.html)-based service proxy, a Linux kernel forwarding-based pod-to-pod networking solution with no overlays, and iptables/ipset-based network policy enforcer.
diff --git a/content/en/docs/concepts/configuration/assign-pod-node.md b/content/en/docs/concepts/configuration/assign-pod-node.md
index aee30401b8..f5ddccc080 100644
--- a/content/en/docs/concepts/configuration/assign-pod-node.md
+++ b/content/en/docs/concepts/configuration/assign-pod-node.md
@@ -11,8 +11,9 @@ weight: 30
{{% capture overview %}}
-You can constrain a [pod](/docs/concepts/workloads/pods/pod/) to only be able to run on particular [nodes](/docs/concepts/architecture/nodes/) or to prefer to
-run on particular nodes. There are several ways to do this, and the recommended approaches all use
+You can constrain a {{< glossary_tooltip text="Pod" term_id="pod" >}} to only be able to run on particular
+{{< glossary_tooltip text="Node(s)" term_id="node" >}}, or to prefer to run on particular nodes.
+There are several ways to do this, and the recommended approaches all use
[label selectors](/docs/concepts/overview/working-with-objects/labels/) to make the selection.
Generally such constraints are unnecessary, as the scheduler will automatically do a reasonable placement
(e.g. spread your pods across nodes, not place the pod on a node with insufficient free resources, etc.)
@@ -20,9 +21,6 @@ but there are some circumstances where you may want more control on a node where
that a pod ends up on a machine with an SSD attached to it, or to co-locate pods from two different
services that communicate a lot into the same availability zone.
-You can find all the files for these examples [in our docs
-repo here](https://github.com/kubernetes/website/tree/{{< param "docsbranch" >}}/content/en/docs/concepts/configuration/).
-
{{% /capture %}}
{{% capture body %}}
@@ -38,14 +36,12 @@ Let's walk through an example of how to use `nodeSelector`.
### Step Zero: Prerequisites
-This example assumes that you have a basic understanding of Kubernetes pods and that you have [turned up a Kubernetes cluster](https://github.com/kubernetes/kubernetes#documentation).
+This example assumes that you have a basic understanding of Kubernetes pods and that you have [set up a Kubernetes cluster](/docs/setup/).
### Step One: Attach label to the node
Run `kubectl get nodes` to get the names of your cluster's nodes. Pick out the one that you want to add a label to, and then run `kubectl label nodes =` to add a label to the node you've chosen. For example, if my node name is 'kubernetes-foo-node-1.c.a-robinson.internal' and my desired label is 'disktype=ssd', then I can run `kubectl label nodes kubernetes-foo-node-1.c.a-robinson.internal disktype=ssd`.
-If this fails with an "invalid command" error, you're likely using an older version of kubectl that doesn't have the `label` command. In that case, see the [previous version](https://github.com/kubernetes/kubernetes/blob/a053dbc313572ed60d89dae9821ecab8bfd676dc/examples/node-selection/README.md) of this guide for instructions on how to manually set labels on a node.
-
You can verify that it worked by re-running `kubectl get nodes --show-labels` and checking that the node now has a label. You can also use `kubectl describe node "nodename"` to see the full list of labels of the given node.
### Step Two: Add a nodeSelector field to your pod configuration
@@ -74,17 +70,17 @@ the Pod will get scheduled on the node that you attached the label to. You can
verify that it worked by running `kubectl get pods -o wide` and looking at the
"NODE" that the Pod was assigned to.
-## Interlude: built-in node labels
+## Interlude: built-in node labels {#built-in-node-labels}
In addition to labels you [attach](#step-one-attach-label-to-the-node), nodes come pre-populated
-with a standard set of labels. As of Kubernetes v1.4 these labels are
+with a standard set of labels. These labels are
-* `kubernetes.io/hostname`
-* `failure-domain.beta.kubernetes.io/zone`
-* `failure-domain.beta.kubernetes.io/region`
-* `beta.kubernetes.io/instance-type`
-* `kubernetes.io/os`
-* `kubernetes.io/arch`
+* [`kubernetes.io/hostname`](/docs/reference/kubernetes-api/labels-annotations-taints/#kubernetes-io-hostname)
+* [`failure-domain.beta.kubernetes.io/zone`](/docs/reference/kubernetes-api/labels-annotations-taints/#failure-domain-beta-kubernetes-io-zone)
+* [`failure-domain.beta.kubernetes.io/region`](/docs/reference/kubernetes-api/labels-annotations-taints/#failure-domain-beta-kubernetes-io-region)
+* [`beta.kubernetes.io/instance-type`](/docs/reference/kubernetes-api/labels-annotations-taints/#beta-kubernetes-io-instance-type)
+* [`kubernetes.io/os`](/docs/reference/kubernetes-api/labels-annotations-taints/#kubernetes-io-os)
+* [`kubernetes.io/arch`](/docs/reference/kubernetes-api/labels-annotations-taints/#kubernetes-io-arch)
{{< note >}}
The value of these labels is cloud provider specific and is not guaranteed to be reliable.
@@ -103,14 +99,15 @@ and influencing the scheduler to schedule workloads to the compromised node.
The `NodeRestriction` admission plugin prevents kubelets from setting or modifying labels with a `node-restriction.kubernetes.io/` prefix.
To make use of that label prefix for node isolation:
-1. Ensure you are using the [Node authorizer](/docs/reference/access-authn-authz/node/) and have enabled the [NodeRestriction admission plugin](/docs/reference/access-authn-authz/admission-controllers/#noderestriction).
-2. Add labels under the `node-restriction.kubernetes.io/` prefix to your Node objects, and use those labels in your node selectors.
+1. Check that you're using Kubernetes v1.11+ so that NodeRestriction is available.
+2. Ensure you are using the [Node authorizer](/docs/reference/access-authn-authz/node/) and have _enabled_ the [NodeRestriction admission plugin](/docs/reference/access-authn-authz/admission-controllers/#noderestriction).
+3. Add labels under the `node-restriction.kubernetes.io/` prefix to your Node objects, and use those labels in your node selectors.
For example, `example.com.node-restriction.kubernetes.io/fips=true` or `example.com.node-restriction.kubernetes.io/pci-dss=true`.
## Affinity and anti-affinity
`nodeSelector` provides a very simple way to constrain pods to nodes with particular labels. The affinity/anti-affinity
-feature, currently in beta, greatly expands the types of constraints you can express. The key enhancements are
+feature, greatly expands the types of constraints you can express. The key enhancements are
1. the language is more expressive (not just "AND of exact match")
2. you can indicate that the rule is "soft"/"preference" rather than a hard requirement, so if the scheduler
@@ -126,9 +123,8 @@ described in the third item listed above, in addition to having the first and se
`nodeSelector` continues to work as usual, but will eventually be deprecated, as node affinity can express
everything that `nodeSelector` can express.
-### Node affinity (beta feature)
+### Node affinity
-Node affinity was introduced as alpha in Kubernetes 1.2.
Node affinity is conceptually similar to `nodeSelector` -- it allows you to constrain which nodes your
pod is eligible to be scheduled on, based on labels on the node.
@@ -143,7 +139,7 @@ met, the pod will still continue to run on the node. In the future we plan to of
except that it will evict pods from nodes that cease to satisfy the pods' node affinity requirements.
Thus an example of `requiredDuringSchedulingIgnoredDuringExecution` would be "only run the pod on nodes with Intel CPUs"
-and an example `preferredDuringSchedulingIgnoredDuringExecution` would be "try to run this set of pods in availability
+and an example `preferredDuringSchedulingIgnoredDuringExecution` would be "try to run this set of pods in failure
zone XYZ, but if it's not possible, then allow some to run elsewhere".
Node affinity is specified as field `nodeAffinity` of field `affinity` in the PodSpec.
@@ -172,21 +168,17 @@ If you remove or change the label of the node where the pod is scheduled, the po
The `weight` field in `preferredDuringSchedulingIgnoredDuringExecution` is in the range 1-100. For each node that meets all of the scheduling requirements (resource request, RequiredDuringScheduling affinity expressions, etc.), the scheduler will compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding MatchExpressions. This score is then combined with the scores of other priority functions for the node. The node(s) with the highest total score are the most preferred.
-For more information on node affinity, see the
-[design doc](https://git.k8s.io/community/contributors/design-proposals/scheduling/nodeaffinity.md).
+### Inter-pod affinity and anti-affinity
-### Inter-pod affinity and anti-affinity (beta feature)
-
-Inter-pod affinity and anti-affinity were introduced in Kubernetes 1.4.
Inter-pod affinity and anti-affinity allow you to constrain which nodes your pod is eligible to be scheduled *based on
-labels on pods that are already running on the node* rather than based on labels on nodes. The rules are of the form "this pod should (or, in the case of
-anti-affinity, should not) run in an X if that X is already running one or more pods that meet rule Y". Y is expressed
-as a LabelSelector with an associated list of namespaces; unlike nodes, because pods are namespaced
+labels on pods that are already running on the node* rather than based on labels on nodes. The rules are of the form
+"this pod should (or, in the case of anti-affinity, should not) run in an X if that X is already running one or more pods that meet rule Y".
+Y is expressed as a LabelSelector with an optional associated list of namespaces; unlike nodes, because pods are namespaced
(and therefore the labels on pods are implicitly namespaced),
a label selector over pod labels must specify which namespaces the selector should apply to. Conceptually X is a topology domain
like node, rack, cloud provider zone, cloud provider region, etc. You express it using a `topologyKey` which is the
key for the node label that the system uses to denote such a topology domain, e.g. see the label keys listed above
-in the section [Interlude: built-in node labels](#interlude-built-in-node-labels).
+in the section [Interlude: built-in node labels](#built-in-node-labels).
{{< note >}}
Inter-pod affinity and anti-affinity require substantial amount of
@@ -360,12 +352,6 @@ no two instances are located on the same host.
See [ZooKeeper tutorial](/docs/tutorials/stateful-application/zookeeper/#tolerating-node-failure)
for an example of a StatefulSet configured with anti-affinity for high availability, using the same technique.
-For more information on inter-pod affinity/anti-affinity, see the
-[design doc](https://git.k8s.io/community/contributors/design-proposals/scheduling/podaffinity.md).
-
-You may want to check [Taints](/docs/concepts/configuration/taint-and-toleration/)
-as well, which allow a *node* to *repel* a set of pods.
-
## nodeName
`nodeName` is the simplest form of node selection constraint, but due
@@ -405,4 +391,10 @@ The above pod will run on the node kube-01.
{{% capture whatsnext %}}
+[Taints](/docs/concepts/configuration/taint-and-toleration/) allow a Node to *repel* a set of Pods.
+
+The design documents for
+[node affinity](https://git.k8s.io/community/contributors/design-proposals/scheduling/nodeaffinity.md)
+and for [inter-pod affinity/anti-affinity](https://git.k8s.io/community/contributors/design-proposals/scheduling/podaffinity.md) contain extra background information about these features.
+
{{% /capture %}}
diff --git a/content/en/docs/concepts/configuration/pod-priority-preemption.md b/content/en/docs/concepts/configuration/pod-priority-preemption.md
index 13427915ef..bf10acfb1b 100644
--- a/content/en/docs/concepts/configuration/pod-priority-preemption.md
+++ b/content/en/docs/concepts/configuration/pod-priority-preemption.md
@@ -94,7 +94,7 @@ old-style command line options. Below is a sample component config to disable
preemption:
```yaml
-apiVersion: componentconfig/v1alpha1
+apiVersion: kubescheduler.config.k8s.io/v1alpha1
kind: KubeSchedulerConfiguration
algorithmSource:
provider: DefaultProvider
diff --git a/content/en/docs/concepts/configuration/scheduling-framework.md b/content/en/docs/concepts/configuration/scheduling-framework.md
index c83a026b4e..ca179c6cdf 100644
--- a/content/en/docs/concepts/configuration/scheduling-framework.md
+++ b/content/en/docs/concepts/configuration/scheduling-framework.md
@@ -18,7 +18,7 @@ scheduling "core" simple and maintainable. Refer to the [design proposal of the
scheduling framework][kep] for more technical information on the design of the
framework.
-[kep]: (https://github.com/kubernetes/enhancements/blob/master/keps/sig-scheduling/20180409-scheduling-framework.md)
+[kep]: https://github.com/kubernetes/enhancements/blob/master/keps/sig-scheduling/20180409-scheduling-framework.md
{{% /capture %}}
@@ -54,7 +54,7 @@ equivalent to "Predicate" and "Scoring" is equivalent to "Priority function".
One plugin may register at multiple extension points to perform more complex or
stateful tasks.
-{{< figure src="/images/docs/scheduling-framework.png" title="scheduling framework extension points" >}}
+{{< figure src="/images/docs/scheduling-framework-extensions.png" title="scheduling framework extension points" >}}
### Queue sort
@@ -238,7 +238,7 @@ decode and process the configuration.
The following example shows a scheduler configuration that enables some
plugins at `reserve` and `preBind` extension points and disables a plugin. It
-also provides a configuration to plugin `foo`.
+also provides a configuration to plugin `foo`.
```yaml
apiVersion: kubescheduler.config.k8s.io/v1alpha1
@@ -274,7 +274,7 @@ calling default plugins is desired, default plugins must be `disabled` and
`enabled` in the desired order.
Assuming there is a default plugin called `foo` at `reserve` and we are adding
-pluing `bar` that we want to be invoked before `foo`, we should disable `foo`
+plugin `bar` that we want to be invoked before `foo`, we should disable `foo`
and enable `bar` and `foo` in order. The following example shows the
configuration that achieves this:
diff --git a/content/en/docs/concepts/configuration/secret.md b/content/en/docs/concepts/configuration/secret.md
index d4774a9d6e..6c15dc8bed 100644
--- a/content/en/docs/concepts/configuration/secret.md
+++ b/content/en/docs/concepts/configuration/secret.md
@@ -359,6 +359,38 @@ echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
1f2d1e2e67df
```
+#### Editing a Secret
+
+An existing secret may be edited with the following command:
+
+```shell
+kubectl edit secrets mysecret
+```
+
+This will open the default configured editor and allow for updating the base64 encoded secret values in the `data` field:
+
+```
+# Please edit the object below. Lines beginning with a '#' will be ignored,
+# and an empty file will abort the edit. If an error occurs while saving this file will be
+# reopened with the relevant failures.
+#
+apiVersion: v1
+data:
+ username: YWRtaW4=
+ password: MWYyZDFlMmU2N2Rm
+kind: Secret
+metadata:
+ annotations:
+ kubectl.kubernetes.io/last-applied-configuration: { ... }
+ creationTimestamp: 2016-01-22T18:41:56Z
+ name: mysecret
+ namespace: default
+ resourceVersion: "164619"
+ selfLink: /api/v1/namespaces/default/secrets/mysecret
+ uid: cfee02d6-c137-11e5-8d73-42010af00002
+type: Opaque
+```
+
## Using Secrets
Secrets can be mounted as data volumes or be exposed as
@@ -833,7 +865,7 @@ EOF
Apply all those objects on the Apiserver by
```shell
-kubectl apply --k .
+kubectl apply -k .
```
Both containers will have the following files present on their filesystems with the values for each container's environment:
diff --git a/content/en/docs/concepts/containers/images.md b/content/en/docs/concepts/containers/images.md
index 9657bfd807..b2f374ea06 100644
--- a/content/en/docs/concepts/containers/images.md
+++ b/content/en/docs/concepts/containers/images.md
@@ -60,7 +60,7 @@ Credentials can be provided in several ways:
- Per-cluster
- automatically configured on Google Compute Engine or Google Kubernetes Engine
- all pods can read the project's private registry
- - Using AWS EC2 Container Registry (ECR)
+ - Using Amazon Elastic Container Registry (ECR)
- use IAM roles and policies to control access to ECR repositories
- automatically refreshes ECR login credentials
- Using Oracle Cloud Infrastructure Registry (OCIR)
@@ -93,10 +93,9 @@ Google service account. The service account on the instance
will have a `https://www.googleapis.com/auth/devstorage.read_only`,
so it can pull from the project's GCR, but not push.
-### Using AWS EC2 Container Registry
+### Using Amazon Elastic Container Registry
-Kubernetes has native support for the [AWS EC2 Container
-Registry](https://aws.amazon.com/ecr/), when nodes are AWS EC2 instances.
+Kubernetes has native support for the [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/), when nodes are AWS EC2 instances.
Simply use the full image name (e.g. `ACCOUNT.dkr.ecr.REGION.amazonaws.com/imagename:tag`)
in the Pod definition.
diff --git a/content/en/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md b/content/en/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md
index 749d1adfce..26f48b79e0 100644
--- a/content/en/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md
+++ b/content/en/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md
@@ -142,7 +142,7 @@ In order to monitor resources provided by device plugins, monitoring agents need
discover the set of devices that are in-use on the node and obtain metadata to describe which
container the metric should be associated with. Prometheus metrics exposed by device monitoring
agents should follow the
-[Kubernetes Instrumentation Guidelines](https://github.com/kubernetes/community/blob/master/contributors/devel/instrumentation.md),
+[Kubernetes Instrumentation Guidelines](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/instrumentation.md),
which requires identifying containers using `pod`, `namespace`, and `container` prometheus labels.
The kubelet provides a gRPC service to enable discovery of in-use devices, and to provide metadata
for these devices:
diff --git a/content/en/docs/concepts/extend-kubernetes/extend-cluster.md b/content/en/docs/concepts/extend-kubernetes/extend-cluster.md
index 61d0aacb9c..d5ab77a28b 100644
--- a/content/en/docs/concepts/extend-kubernetes/extend-cluster.md
+++ b/content/en/docs/concepts/extend-kubernetes/extend-cluster.md
@@ -16,7 +16,7 @@ there is rarely a need to fork or submit patches to the Kubernetes
project code.
This guide describes the options for customizing a Kubernetes
-cluster. It is aimed at {{< glossary_tooltip text="Cluster Operators" term_id="cluster-operator" >}} who want to
+cluster. It is aimed at {{< glossary_tooltip text="cluster operators" term_id="cluster-operator" >}} who want to
understand how to adapt their Kubernetes cluster to the needs of
their work environment. Developers who are prospective {{< glossary_tooltip text="Platform Developers" term_id="platform-developer" >}} or Kubernetes Project {{< glossary_tooltip text="Contributors" term_id="contributor" >}} will also find it
useful as an introduction to what extension points and patterns
@@ -122,7 +122,7 @@ For more about Custom Resources, see the [Custom Resources concept guide](/docs/
### Combining New APIs with Automation
-Often, when you add a new API, you also add a control loop that reads and/or writes the new APIs. When the combination of a Custom API and a control loop is used to manage a specific, usually stateful, application, this is called the *Operator* pattern. Custom APIs and control loops can also be used to control other resources, such as storage, policies, and so on.
+The combination of a custom resource API and a control loop is called the [Operator pattern](/docs/concepts/extend-kubernetes/operator/). The Operator pattern is used to manage specific, usually stateful, applications. These custom APIs and control loops can also be used to control other resources, such as storage or policies.
### Changing Built-in Resources
@@ -205,7 +205,6 @@ the nodes chosen for a pod.
* [Network Plugins](/docs/concepts/cluster-administration/network-plugins/)
* [Device Plugins](/docs/concepts/cluster-administration/device-plugins/)
* Learn about [kubectl plugins](/docs/tasks/extend-kubectl/kubectl-plugins/)
-* See examples of Automation
- * [List of Operators](https://github.com/operator-framework/awesome-operators)
+* Learn about the [Operator pattern](/docs/concepts/extend-kubernetes/operator/)
{{% /capture %}}
diff --git a/content/en/docs/concepts/extend-kubernetes/operator.md b/content/en/docs/concepts/extend-kubernetes/operator.md
new file mode 100644
index 0000000000..e585444ffa
--- /dev/null
+++ b/content/en/docs/concepts/extend-kubernetes/operator.md
@@ -0,0 +1,132 @@
+---
+title: Operator pattern
+content_template: templates/concept
+weight: 30
+---
+
+{{% capture overview %}}
+
+Operators are software extensions to Kubernetes that make use of [custom
+resources](/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
+to manage applications and their components. Operators follow
+Kubernetes principles, notably the [control loop](/docs/concepts/#kubernetes-control-plane).
+
+{{% /capture %}}
+
+
+{{% capture body %}}
+
+## Motivation
+
+The Operator pattern aims to capture the key aim of a human operator who
+is managing a service or set of services. Human operators who look after
+specific applications and services have deep knowledge of how the system
+ought to behave, how to deploy it, and how to react if there are problems.
+
+People who run workloads on Kubernetes often like to use automation to take
+care of repeatable tasks. The Operator pattern captures how you can write
+code to automate a task beyond what Kubernetes itself provides.
+
+## Operators in Kubernetes
+
+Kubernetes is designed for automation. Out of the box, you get lots of
+built-in automation from the core of Kubernetes. You can use Kubernetes
+to automate deploying and running workloads, *and* you can automate how
+Kubernetes does that.
+
+Kubernetes' {{< glossary_tooltip text="controllers" term_id="controller" >}}
+concept lets you extend the cluster's behaviour without modifying the code
+of Kubernetes itself.
+Operators are clients of the Kubernetes API that act as controllers for
+a [Custom Resource](/docs/concepts/api-extension/custom-resources/).
+
+## An example Operator {#example}
+
+Some of the things that you can use an operator to automate include:
+
+* deploying an application on demand
+* taking and restoring backups of that application's state
+* handling upgrades of the application code alongside related changes such
+ as database schemas or extra configuration settings
+* publishing a Service to applications that don't support Kubernetes APIs to
+ discover them
+* simulating failure in all or part of your cluster to test its resilience
+* choosing a leader for a distributed application without an internal
+ member election process
+
+What might an Operator look like in more detail? Here's an example in more
+detail:
+
+1. A custom resource named SampleDB, that you can configure into the cluster.
+2. A Deployment that makes sure a Pod is running that contains the
+ controller part of the operator.
+3. A container image of the operator code.
+4. Controller code that queries the control plane to find out what SampleDB
+ resources are configured.
+5. The core of the Operator is code to tell the API server how to make
+ reality match the configured resources.
+ * If you add a new SampleDB, the operator sets up PersistentVolumeClaims
+ to provide durable database storage, a StatefulSet to run SampleDB and
+ a Job to handle initial configuration.
+ * If you delete it, the Operator takes a snapshot, then makes sure that
+ the the StatefulSet and Volumes are also removed.
+6. The operator also manages regular database backups. For each SampleDB
+ resource, the operator determines when to create a Pod that can connect
+ to the database and take backups. These Pods would rely on a ConfigMap
+ and / or a Secret that has database connection details and credentials.
+7. Because the Operator aims to provide robust automation for the resource
+ it manages, there would be additional supporting code. For this example,
+ code checks to see if the database is running an old version and, if so,
+ creates Job objects that upgrade it for you.
+
+## Deploying Operators
+
+The most common way to deploy an Operator is to add the
+Custom Resource Definition and its associated Controller to your cluster.
+The Controller will normally run outside of the
+{{< glossary_tooltip text="control plane" term_id="control-plane" >}},
+much as you would run any containerized application.
+For example, you can run the controller in your cluster as a Deployment.
+
+## Using an Operator {#using-operators}
+
+Once you have an Operator deployed, you'd use it by adding, modifying or
+deleting the kind of resource that the Operator uses. Following the above
+example, you would set up a Deployment for the Operator itself, and then:
+
+```shell
+kubectl get SampleDB # find configured databases
+
+kubectl edit SampleDB/example-database # manually change some settings
+```
+
+…and that's it! The Operator will take care of applying the changes
+as well as keeping the existing service in good shape.
+
+## Writing your own Operator {#writing-operator}
+
+If there isn't an Operator in the ecosystem that implements the behavior you
+want, you can code your own. In [What's next](#what-s-next) you'll find a few
+links to libraries and tools you can use to write your own cloud native
+Operator.
+
+You also implement an Operator (that is, a Controller) using any language / runtime
+that can act as a [client for the Kubernetes API](/docs/reference/using-api/client-libraries/).
+
+{{% /capture %}}
+
+{{% capture whatsnext %}}
+
+* Learn more about [Custom Resources](/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
+* Find ready-made operators on [OperatorHub.io](https://operatorhub.io/) to suit your use case
+* Use existing tools to write your own operator, eg:
+ * using [KUDO](https://kudo.dev/) (Kubernetes Universal Declarative Operator)
+ * using [kubebuilder](https://book.kubebuilder.io/)
+ * using [Metacontroller](https://metacontroller.app/) along with WebHooks that
+ you implement yourself
+ * using the [Operator Framework](https://github.com/operator-framework/getting-started)
+* [Publish](https://operatorhub.io/) your operator for other people to use
+* Read [CoreOS' original article](https://coreos.com/blog/introducing-operators.html) that introduced the Operator pattern
+* Read an [article](https://cloud.google.com/blog/products/containers-kubernetes/best-practices-for-building-kubernetes-operators-and-stateful-apps) from Google Cloud about best practices for building Operators
+
+{{% /capture %}}
diff --git a/content/en/docs/concepts/overview/components.md b/content/en/docs/concepts/overview/components.md
index 4d31a2e190..cf8812fab6 100644
--- a/content/en/docs/concepts/overview/components.md
+++ b/content/en/docs/concepts/overview/components.md
@@ -18,7 +18,7 @@ deliver a functioning Kubernetes cluster.
## Master Components
Master components provide the cluster's control plane. Master components make global decisions about the
-cluster (for example, scheduling), and they detect and respond to cluster events (for example, starting up a new pod when a replication controller's `replicas` field is unsatisfied).
+cluster (for example, scheduling), and they detect and respond to cluster events (for example, starting up a new {{< glossary_tooltip text="pod" term_id="pod">}} when a deployment's `replicas` field is unsatisfied).
Master components can be run on any machine in the cluster. However,
for simplicity, set up scripts typically start all master components on
@@ -82,11 +82,13 @@ Node components run on every node, maintaining running pods and providing the Ku
## Addons
-Addons are pods and services that implement cluster features. The pods may be managed
-by Deployments, ReplicationControllers, and so on. Namespaced addon objects are created in
-the `kube-system` namespace.
+Addons use Kubernetes resources ({{< glossary_tooltip term_id="daemonset" >}},
+{{< glossary_tooltip term_id="deployment" >}}, etc)
+to implement cluster features. Because these are providing cluster-level features, namespaced resources
+for addons belong within the `kube-system` namespace.
-Selected addons are described below, for an extended list of available addons please see [Addons](/docs/concepts/cluster-administration/addons/).
+Selected addons are described below; for an extended list of available addons, please
+see [Addons](/docs/concepts/cluster-administration/addons/).
### DNS
@@ -111,5 +113,8 @@ A [Cluster-level logging](/docs/concepts/cluster-administration/logging/) mechan
saving container logs to a central log store with search/browsing interface.
{{% /capture %}}
-
-
+{{% capture whatsnext %}}
+* Learn about [Nodes](/docs/concepts/architecture/nodes/)
+* Learn about [kube-scheduler](/docs/concepts/scheduling/kube-scheduler/)
+* Read etcd's official [documentation](https://etcd.io/docs/)
+{{% /capture %}}
diff --git a/content/en/docs/concepts/overview/what-is-kubernetes.md b/content/en/docs/concepts/overview/what-is-kubernetes.md
index 4eb3576a70..075235521e 100644
--- a/content/en/docs/concepts/overview/what-is-kubernetes.md
+++ b/content/en/docs/concepts/overview/what-is-kubernetes.md
@@ -48,9 +48,9 @@ Containers are becoming popular because they have many benefits. Some of the con
* Resource isolation: predictable application performance.
* Resource utilization: high efficiency and density.
-## Why do I need Kubernetes and what can it do
+## Why you need Kubernetes and what can it do
-Containers are a good way to bundle and run your applications. In a production environment, you need to manage the containers that run the applications and ensure that there is no downtime. For example, if a container goes down, another container needs to restart. Wouldn't it be easier if this behavior was handled by a system?
+Containers are a good way to bundle and run your applications. In a production environment, you need to manage the containers that run the applications and ensure that there is no downtime. For example, if a container goes down, another container needs to start. Wouldn't it be easier if this behavior was handled by a system?
That's how Kubernetes comes to the rescue! Kubernetes provides you with a framework to run distributed systems resiliently. It takes care of your scaling requirements, failover, deployment patterns, and more. For example, Kubernetes can easily manage a canary deployment for your system.
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 08953cdc71..d360d7d284 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
@@ -145,10 +145,10 @@ metadata:
labels:
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/component: database
app.kubernetes.io/part-of: wordpress
- app.kubernetes.io/version: "5.7.21"
...
```
@@ -161,10 +161,10 @@ metadata:
labels:
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/component: database
app.kubernetes.io/part-of: wordpress
- app.kubernetes.io/version: "5.7.21"
...
```
diff --git a/content/en/docs/concepts/overview/working-with-objects/field-selectors.md b/content/en/docs/concepts/overview/working-with-objects/field-selectors.md
index d4e02418e5..1b0b4791f5 100644
--- a/content/en/docs/concepts/overview/working-with-objects/field-selectors.md
+++ b/content/en/docs/concepts/overview/working-with-objects/field-selectors.md
@@ -56,5 +56,5 @@ kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Alway
You use field selectors across multiple resource types. This `kubectl` command selects all Statefulsets and Services that are not in the `default` namespace:
```shell
-kubectl get statefulsets,services --field-selector metadata.namespace!=default
+kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default
```
diff --git a/content/en/docs/concepts/overview/working-with-objects/namespaces.md b/content/en/docs/concepts/overview/working-with-objects/namespaces.md
index a6accb8696..4a3e2761f7 100644
--- a/content/en/docs/concepts/overview/working-with-objects/namespaces.md
+++ b/content/en/docs/concepts/overview/working-with-objects/namespaces.md
@@ -65,13 +65,13 @@ Kubernetes starts with three initial namespaces:
### Setting the namespace for a request
-To temporarily set the namespace for a request, use the `--namespace` flag.
+To set the namespace for a current request, use the `--namespace` flag.
For example:
```shell
-kubectl --namespace= run nginx --image=nginx
-kubectl --namespace= get pods
+kubectl run nginx --image=nginx --namespace=
+kubectl get pods --namespace=
```
### Setting the namespace preference
@@ -80,7 +80,7 @@ You can permanently save the namespace for all subsequent kubectl commands in th
context.
```shell
-kubectl config set-context $(kubectl config current-context) --namespace=
+kubectl config set-context --current --namespace=
# Validate it
kubectl config view | grep namespace:
```
diff --git a/content/en/docs/concepts/policy/limit-range.md b/content/en/docs/concepts/policy/limit-range.md
index 1ab6073fe3..455f51b1aa 100644
--- a/content/en/docs/concepts/policy/limit-range.md
+++ b/content/en/docs/concepts/policy/limit-range.md
@@ -69,7 +69,7 @@ kubectl create namespace limitrange-demo
To avoid passing the target limitrange-demo in your kubectl commands, change your context with the following command
```shell
-kubectl config set-context $(kubectl config current-context) --namespace=limitrange-demo
+kubectl config set-context --current --namespace=limitrange-demo
```
Here is the configuration file for a LimitRange object:
diff --git a/content/en/docs/concepts/policy/pod-security-policy.md b/content/en/docs/concepts/policy/pod-security-policy.md
index 8890f4d7a5..086d5c9d5d 100644
--- a/content/en/docs/concepts/policy/pod-security-policy.md
+++ b/content/en/docs/concepts/policy/pod-security-policy.md
@@ -158,12 +158,16 @@ also be used to provide default values for many of the fields that it
controls. When multiple policies are available, the pod security policy
controller selects policies according to the following criteria:
-1. If any policies successfully validate the pod without altering it, they are
- used.
-2. If it is a pod creation request, then the first valid policy in alphabetical
- order is used.
-3. Otherwise, if it is a pod update request, an error is returned, because pod mutations
- are disallowed during update operations.
+1. PodSecurityPolicies which allow the pod as-is, without changing defaults or
+ mutating the pod, are preferred. The order of these non-mutating
+ PodSecurityPolicies doesn't matter.
+2. If the pod must be defaulted or mutated, the first PodSecurityPolicy
+ (ordered by name) to allow the pod is selected.
+
+{{< note >}}
+During update operations (during which mutations to pod specs are disallowed)
+only non-mutating PodSecurityPolicies are used to validate the pod.
+{{< /note >}}
## Example
diff --git a/content/en/docs/concepts/scheduling/_index.md b/content/en/docs/concepts/scheduling/_index.md
new file mode 100644
index 0000000000..b21e8d0c33
--- /dev/null
+++ b/content/en/docs/concepts/scheduling/_index.md
@@ -0,0 +1,5 @@
+---
+title: "Scheduling"
+weight: 90
+---
+
diff --git a/content/en/docs/concepts/scheduling/kube-scheduler.md b/content/en/docs/concepts/scheduling/kube-scheduler.md
new file mode 100644
index 0000000000..5b8b55ed7b
--- /dev/null
+++ b/content/en/docs/concepts/scheduling/kube-scheduler.md
@@ -0,0 +1,186 @@
+---
+title: Kubernetes Scheduler
+content_template: templates/concept
+weight: 60
+---
+
+{{% capture overview %}}
+
+In Kubernetes, _scheduling_ refers to making sure that {{< glossary_tooltip text="Pods" term_id="pod" >}}
+are matched to {{< glossary_tooltip text="Nodes" term_id="node" >}} so that
+{{< glossary_tooltip term_id="kubelet" >}} can run them.
+
+{{% /capture %}}
+
+{{% capture body %}}
+
+## Scheduling overview {#scheduling}
+
+A scheduler watches for newly created Pods that have no Node assigned. For
+every Pod that the scheduler discovers, the scheduler becomes responsible
+for finding the best Node for that Pod to run on. The scheduler reaches
+this placement decision taking into account the scheduling principles
+described below.
+
+If you want to understand why Pods are placed onto a particular Node,
+or if you're planning to implement a custom scheduler yourself, this
+page will help you learn about scheduling.
+
+## kube-scheduler
+
+[kube-scheduler](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/)
+is the default scheduler for Kubernetes and runs as part of the
+{{< glossary_tooltip text="control plane" term_id="control-plane" >}}.
+kube-scheduler is designed so that, if you want and need to, you can
+write your own scheduling component and use that instead.
+
+For every newly created pods or other unscheduled pods, kube-scheduler
+selects a optimal node for them to run on. However, every container in
+pods has different requirements for resources and every pod also has
+different requirements. Therefore, existing nodes need to be filtered
+according to the specific scheduling requirements.
+
+In a cluster, Nodes that meet the scheduling requirements for a Pod
+are called _feasible_ nodes. If none of the nodes are suitable, the pod
+remains unscheduled until the scheduler is able to place it.
+
+The scheduler finds feasible Nodes for a Pod and then runs a set of
+functions to score the feasible Nodes and picks a Node with the highest
+score among the feasible ones to run the Pod. The scheduler then notifies
+the API server about this decision in a process called _binding_.
+
+Factors that need taken into account for scheduling decisions include
+individual and collective resource requirements, hardware / software /
+policy constraints, affinity and anti-affinity specifications, data
+locality, inter-workload interference, and so on.
+
+## Scheduling with kube-scheduler {#kube-scheduler-implementation}
+
+kube-scheduler selects a node for the pod in a 2-step operation:
+
+1. Filtering
+
+2. Scoring
+
+
+The _filtering_ step finds the set of Nodes where it's feasible to
+schedule the Pod. For example, the PodFitsResources filter checks whether a
+candidate Node has enough available resource to meet a Pod's specific
+resource requests. After this step, the node list contains any suitable
+Nodes; often, there will be more than one. If the list is empty, that
+Pod isn't (yet) schedulable.
+
+In the _scoring_ step, the scheduler ranks the remaining nodes to choose
+the most suitable Pod placement. The scheduler assigns a score to each Node
+that survived filtering, basing this score on the active scoring rules.
+
+Finally, kube-scheduler assigns the Pod to the Node with the highest ranking.
+If there is more than one node with equal scores, kube-scheduler selects
+one of these at random.
+
+
+### Default policies
+
+kube-scheduler has a default set of scheduling policies.
+
+### Filtering
+
+- `PodFitsHostPorts`: Checks if a Node has free ports (the network protocol kind)
+ for the Pod ports the the Pod is requesting.
+
+- `PodFitsHost`: Checks if a Pod specifies a specific Node by it hostname.
+
+- `PodFitsResources`: Checks if the Node has free resources (eg, CPU and Memory)
+ to meet the requirement of the Pod.
+
+- `PodMatchNodeSelector`: Checks if a Pod's Node {{< glossary_tooltip term_id="selector" >}}
+ matches the Node's {{< glossary_tooltip text="label(s)" term_id="label" >}}.
+
+- `NoVolumeZoneConflict`: Evaluate if the {{< glossary_tooltip text="Volumes" term_id="volume" >}}
+ that a Pod requests are available on the Node, given the failure zone restrictions for
+ that storage.
+
+- `NoDiskConflict`: Evaluates if a Pod can fit on a Node due to the volumes it requests,
+ and those that are already mounted.
+
+- `MaxCSIVolumeCount`: Decides how many {{< glossary_tooltip text="CSI" term_id="csi" >}}
+ volumes should be attached, and whether that's over a configured limit.
+
+- `CheckNodeMemoryPressure`: If a Node is reporting memory pressure, and there's no
+ configured exception, the Pod won't be scheduled there.
+
+- `CheckNodePIDPressure`: If a Node is reporting that process IDs are scarce, and
+ there's no configured exception, the Pod won't be scheduled there.
+
+- `CheckNodeDiskPressure`: If a Node is reporting storage pressure (a filesystem that
+ is full or nearly full), and there's no configured exception, the Pod won't be
+ scheduled there.
+
+- `CheckNodeCondition`: Nodes can report that they have a completely full filesystem,
+ that networking isn't available or that kubelet is otherwise not ready to run Pods.
+ If such a condition is set for a Node, and there's no configured exception, the Pod
+ won't be scheduled there.
+
+- `PodToleratesNodeTaints`: checks if a Pod's {{< glossary_tooltip text="tolerations" term_id="toleration" >}}
+ can tolerate the Node's {{< glossary_tooltip text="taints" term_id="taint" >}}.
+
+- `CheckVolumeBinding`: Evaluates if a Pod can fit due to the volumes it requests.
+ This applies for both bound and unbound
+ {{< glossary_tooltip text="PVCs" term_id="persistent-volume-claim" >}}
+
+### Scoring
+
+- `SelectorSpreadPriority`: Spreads Pods across hosts, considering Pods that
+ belonging to the same {{< glossary_tooltip text="Service" term_id="service" >}},
+ {{< glossary_tooltip term_id="statefulset" >}} or
+ {{< glossary_tooltip term_id="replica-set" >}}.
+
+- `InterPodAffinityPriority`: Computes a sum by iterating through the elements
+ of weightedPodAffinityTerm and adding “weight” to the sum if the corresponding
+ PodAffinityTerm is satisfied for that node; the node(s) with the highest sum
+ are the most preferred.
+
+- `LeastRequestedPriority`: Favors nodes with fewer requested resources. In other
+ words, the more Pods that are placed on a Node, and the more resources those
+ Pods use, the lower the ranking this policy will give.
+
+- `MostRequestedPriority`: Favors nodes with most requested resources. This policy
+ will fit the scheduled Pods onto the smallest number of Nodes needed to run your
+ overall set of workloads.
+
+- `RequestedToCapacityRatioPriority`: Creates a requestedToCapacity based ResourceAllocationPriority using default resource scoring function shape.
+
+- `BalancedResourceAllocation`: Favors nodes with balanced resource usage.
+
+- `NodePreferAvoidPodsPriority`: Priorities nodes according to the node annotation
+ `scheduler.alpha.kubernetes.io/preferAvoidPods`. You can use this to hint that
+ two different Pods shouldn't run on the same Node.
+
+- `NodeAffinityPriority`: Prioritizes nodes according to node affinity scheduling
+ preferences indicated in PreferredDuringSchedulingIgnoredDuringExecution.
+ You can read more about this in [Assigning Pods to Nodes](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/)
+
+- `TaintTolerationPriority`: Prepares the priority list for all the nodes, based on
+ the number of intolerable taints on the node. This policy adjusts a node's rank
+ taking that list into account.
+
+- `ImageLocalityPriority`: Favors nodes that already have the
+ {{< glossary_tooltip text="container images" term_id="image" >}} for that
+ Pod cached locally.
+
+- `ServiceSpreadingPriority`: For a given Service, this policy aims to make sure that
+ the Pods for the Service run on different nodes. It favouring scheduling onto nodes
+ that don't have Pods for the service already assigned there. The overall outcome is
+ that the Service becomes more resilient to a single Node failure.
+
+- `CalculateAntiAffinityPriorityMap`: This policy helps implement
+ [pod anti-affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity).
+
+- `EqualPriorityMap`: Gives an equal weight of one to all nodes.
+
+{{% /capture %}}
+{{% capture whatsnext %}}
+* Read about [scheduler performance tuning](/docs/concepts/scheduling/scheduler-perf-tuning/)
+* Read the [reference documentation](/docs/reference/command-line-tools-reference/kube-scheduler/) for kube-scheduler
+* Learn about [configuring multiple schedulers](https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/)
+{{% /capture %}}
diff --git a/content/en/docs/concepts/configuration/scheduler-perf-tuning.md b/content/en/docs/concepts/scheduling/scheduler-perf-tuning.md
similarity index 87%
rename from content/en/docs/concepts/configuration/scheduler-perf-tuning.md
rename to content/en/docs/concepts/scheduling/scheduler-perf-tuning.md
index ff8ef0282c..24ebe059e6 100644
--- a/content/en/docs/concepts/configuration/scheduler-perf-tuning.md
+++ b/content/en/docs/concepts/scheduling/scheduler-perf-tuning.md
@@ -10,13 +10,19 @@ weight: 70
{{< feature-state for_k8s_version="1.14" state="beta" >}}
-Kube-scheduler is the Kubernetes default scheduler. It is responsible for
-placement of Pods on Nodes in a cluster. Nodes in a cluster that meet the
-scheduling requirements of a Pod are called "feasible" Nodes for the Pod. The
-scheduler finds feasible Nodes for a Pod and then runs a set of functions to
-score the feasible Nodes and picks a Node with the highest score among the
-feasible ones to run the Pod. The scheduler then notifies the API server about
-this decision in a process called "Binding".
+[kube-scheduler](/docs/concepts/scheduling/kube-scheduler/#kube-scheduler)
+is the Kubernetes default scheduler. It is responsible for placement of Pods
+on Nodes in a cluster.
+
+Nodes in a cluster that meet the scheduling requirements of a Pod are
+called _feasible_ Nodes for the Pod. The scheduler finds feasible Nodes
+for a Pod and then runs a set of functions to score the feasible Nodes,
+picking a Node with the highest score among the feasible ones to run
+the Pod. The scheduler then notifies the API server about this decision
+in a process called _Binding_.
+
+This page explains performance tuning optimizations that are relevant for
+large Kubernetes clusters.
{{% /capture %}}
@@ -37,7 +43,7 @@ size of the cluster if it is not specified in the configuration. It uses a
linear formula which yields 50% for a 100-node cluster. The formula yields 10%
for a 5000-node cluster. The lower bound for the automatic value is 5%. In other
words, the scheduler always scores at least 5% of the cluster no matter how
-large the cluster is, unless the user provides the config option with a value
+large the cluster is, unless the user provides the config option with a value
smaller than 5.
Below is an example configuration that sets `percentageOfNodesToScore` to 50%.
diff --git a/content/en/docs/concepts/security/overview.md b/content/en/docs/concepts/security/overview.md
index e0e196c276..fea67957d1 100644
--- a/content/en/docs/concepts/security/overview.md
+++ b/content/en/docs/concepts/security/overview.md
@@ -13,7 +13,7 @@ Kubernetes Security (and security in general) is an immense topic that has many
highly interrelated parts. In today's era where open source software is
integrated into many of the systems that help web applications run,
there are some overarching concepts that can help guide your intuition about how you can
-think about security holistically. This guide will define a mental model for
+think about security holistically. This guide will define a mental model
for some general concepts surrounding Cloud Native Security. The mental model is completely arbitrary
and you should only use it if it helps you think about where to secure your software
stack.
diff --git a/content/en/docs/concepts/services-networking/ingress-controllers.md b/content/en/docs/concepts/services-networking/ingress-controllers.md
index 98e5bd7445..2ed420bc47 100644
--- a/content/en/docs/concepts/services-networking/ingress-controllers.md
+++ b/content/en/docs/concepts/services-networking/ingress-controllers.md
@@ -32,11 +32,7 @@ Kubernetes as a project currently supports and maintains [GCE](https://git.k8s.i
* F5 Networks provides [support and maintenance](https://support.f5.com/csp/article/K86859508)
for the [F5 BIG-IP Controller for Kubernetes](http://clouddocs.f5.com/products/connectors/k8s-bigip-ctlr/latest).
* [Gloo](https://gloo.solo.io) is an open-source ingress controller based on [Envoy](https://www.envoyproxy.io) which offers API Gateway functionality with enterprise support from [solo.io](https://www.solo.io).
-* [HAProxy](http://www.haproxy.org/) based ingress controller
- [jcmoraisjr/haproxy-ingress](https://github.com/jcmoraisjr/haproxy-ingress) which is mentioned on the blog post
- [HAProxy Ingress Controller for Kubernetes](https://www.haproxy.com/blog/haproxy_ingress_controller_for_kubernetes/).
- [HAProxy Technologies](https://www.haproxy.com/) offers support and maintenance for HAProxy Enterprise and
- the ingress controller [jcmoraisjr/haproxy-ingress](https://github.com/jcmoraisjr/haproxy-ingress).
+* [HAProxy Technologies](https://www.haproxy.com/) offers support and maintenance for the [HAProxy Ingress Controller for Kubernetes](https://github.com/haproxytech/kubernetes-ingress). See the [official documentation](https://www.haproxy.com/documentation/hapee/1-9r1/traffic-management/kubernetes-ingress-controller/).
* [Istio](https://istio.io/) based ingress controller
[Control Ingress Traffic](https://istio.io/docs/tasks/traffic-management/ingress/).
* [Kong](https://konghq.com/) offers [community](https://discuss.konghq.com/c/kubernetes) or
@@ -44,6 +40,7 @@ Kubernetes as a project currently supports and maintains [GCE](https://git.k8s.i
[Kong Ingress Controller for Kubernetes](https://github.com/Kong/kubernetes-ingress-controller).
* [NGINX, Inc.](https://www.nginx.com/) offers support and maintenance for the
[NGINX Ingress Controller for Kubernetes](https://www.nginx.com/products/nginx/kubernetes-ingress-controller).
+* [Skipper](https://opensource.zalando.com/skipper/kubernetes/ingress-controller/) HTTP router and reverse proxy for service composition, including use cases like Kubernetes Ingress, designed as a library to build your custom proxy
* [Traefik](https://github.com/containous/traefik) is a fully featured ingress controller
([Let's Encrypt](https://letsencrypt.org), secrets, http2, websocket), and it also comes with commercial
support by [Containous](https://containo.us/services).
diff --git a/content/en/docs/concepts/services-networking/ingress.md b/content/en/docs/concepts/services-networking/ingress.md
index 190c7e4b60..b049ce4d37 100644
--- a/content/en/docs/concepts/services-networking/ingress.md
+++ b/content/en/docs/concepts/services-networking/ingress.md
@@ -46,7 +46,7 @@ Traffic routing is controlled by rules defined on the Ingress resource.
[ Services ]
```
-An Ingress can be configured to give services externally-reachable URLs, load balance traffic, terminate SSL / TLS, and offer name based virtual hosting. An [Ingress controller](/docs/concepts/services-networking/ingress-controllers) is responsible for fulfilling the Ingress, usually with a load balancer, though it may also configure your edge router or additional frontends to help handle the traffic.
+An Ingress can be configured to give Services externally-reachable URLs, load balance traffic, terminate SSL / TLS, and offer name based virtual hosting. An [Ingress controller](/docs/concepts/services-networking/ingress-controllers) is responsible for fulfilling the Ingress, usually with a load balancer, though it may also configure your edge router or additional frontends to help handle the traffic.
An Ingress does not expose arbitrary ports or protocols. Exposing services other than HTTP and HTTPS to the internet typically
uses a service of type [Service.Type=NodePort](/docs/concepts/services-networking/service/#nodeport) or
@@ -56,14 +56,14 @@ uses a service of type [Service.Type=NodePort](/docs/concepts/services-networkin
You must have an [ingress controller](/docs/concepts/services-networking/ingress-controllers) to satisfy an Ingress. Only creating an Ingress resource has no effect.
-You may need to deploy an ingress controller such as [ingress-nginx](https://kubernetes.github.io/ingress-nginx/deploy/). There are a number of
-[ingress controllers](/docs/concepts/services-networking/ingress-controllers) you may choose from.
+You may need to deploy an Ingress controller such as [ingress-nginx](https://kubernetes.github.io/ingress-nginx/deploy/). You can choose from a number of
+[Ingress controllers](/docs/concepts/services-networking/ingress-controllers).
-Ideally, all ingress controllers should fit the reference specification. In reality, the various ingress
+Ideally, all Ingress controllers should fit the reference specification. In reality, the various Ingress
controllers operate slightly differently.
{{< note >}}
-Make sure you review your ingress controller's documentation to understand the caveats of choosing it.
+Make sure you review your Ingress controller's documentation to understand the caveats of choosing it.
{{< /note >}}
## The Ingress Resource
@@ -101,19 +101,19 @@ for directing HTTP traffic.
### Ingress rules
-Each http rule contains the following information:
+Each HTTP rule contains the following information:
* An optional host. In this example, no host is specified, so the rule applies to all inbound
HTTP traffic through the IP address specified. If a host is provided (for example,
foo.bar.com), the rules apply to that host.
-* a list of paths (for example, `/testpath`), each of which has an associated backend defined with a `serviceName`
+* A list of paths (for example, `/testpath`), each of which has an associated backend defined with a `serviceName`
and `servicePort`. Both the host and path must match the content of an incoming request before the
- load balancer will direct traffic to the referenced service.
-* A backend is a combination of service and port names as described in the
- [services doc](/docs/concepts/services-networking/service/). HTTP (and HTTPS) requests to the
- Ingress matching the host and path of the rule will be sent to the listed backend.
+ load balancer directs traffic to the referenced Service.
+* A backend is a combination of Service and port names as described in the
+ [Service doc](/docs/concepts/services-networking/service/). HTTP (and HTTPS) requests to the
+ Ingress that matches the host and path of the rule are sent to the listed backend.
-A default backend is often configured in an Ingress controller that will service any requests that do not
+A default backend is often configured in an Ingress controller to service any requests that do not
match a path in the spec.
### Default Backend
@@ -151,12 +151,12 @@ this Ingress.
{{< note >}}
Ingress controllers and load balancers may take a minute or two to allocate an IP address.
-Until that time you will often see the address listed as ``.
+Until that time, you often see the address listed as ``.
{{< /note >}}
### Simple fanout
-A fanout configuration routes traffic from a single IP address to more than one service,
+A fanout configuration routes traffic from a single IP address to more than one Service,
based on the HTTP URI being requested. An Ingress allows you to keep the number of load balancers
down to a minimum. For example, a setup like:
@@ -189,7 +189,7 @@ spec:
servicePort: 8080
```
-When you create the ingress with `kubectl apply -f`:
+When you create the Ingress with `kubectl apply -f`:
```shell
kubectl describe ingress simple-fanout-example
@@ -215,7 +215,7 @@ Events:
```
The Ingress controller provisions an implementation-specific load balancer
-that satisfies the Ingress, as long as the services (`s1`, `s2`) exist.
+that satisfies the Ingress, as long as the Services (`s1`, `s2`) exist.
When it has done so, you can see the address of the load balancer at the
Address field.
@@ -299,11 +299,11 @@ spec:
You can secure an Ingress by specifying a {{< glossary_tooltip term_id="secret" >}}
that contains a TLS private key and certificate. Currently the Ingress only
supports a single TLS port, 443, and assumes TLS termination. If the TLS
-configuration section in an Ingress specifies different hosts, they will be
+configuration section in an Ingress specifies different hosts, they are
multiplexed on the same port according to the hostname specified through the
SNI TLS extension (provided the Ingress controller supports SNI). The TLS secret
must contain keys named `tls.crt` and `tls.key` that contain the certificate
-and private key to use for TLS, e.g.:
+and private key to use for TLS. For example:
```yaml
apiVersion: v1
@@ -317,7 +317,7 @@ data:
type: kubernetes.io/tls
```
-Referencing this secret in an Ingress will tell the Ingress controller to
+Referencing this secret in an Ingress tells the Ingress controller to
secure the channel from the client to the load balancer using TLS. You need to make
sure the TLS secret you created came from a certificate that contains a CN
for `sslexample.foo.com`.
@@ -397,7 +397,7 @@ Events:
kubectl edit ingress test
```
-This should pop up an editor with the existing configuration in yaml format.
+This pops up an editor with the existing configuration in YAML format.
Modify it to include the new Host:
```yaml
@@ -420,7 +420,7 @@ spec:
..
```
-After you save your changes, kubectl will update the resource in the API server, which should tell the
+After you save your changes, kubectl updates the resource in the API server, which tells the
Ingress controller to reconfigure the load balancer.
Verify this:
@@ -449,7 +449,7 @@ Events:
Normal ADD 45s loadbalancer-controller default/test
```
-You can achieve the same outcome by invoking `kubectl replace -f` on a modified Ingress yaml file.
+You can achieve the same outcome by invoking `kubectl replace -f` on a modified Ingress YAML file.
## Failing across availability zones
diff --git a/content/en/docs/concepts/services-networking/service.md b/content/en/docs/concepts/services-networking/service.md
index c46d4478a7..4800af5628 100644
--- a/content/en/docs/concepts/services-networking/service.md
+++ b/content/en/docs/concepts/services-networking/service.md
@@ -5,7 +5,7 @@ title: Service
feature:
title: Service discovery and load balancing
description: >
- No need to modify your application to use an unfamiliar service discovery mechanism. Kubernetes gives pods their own IP addresses and a single DNS name for a set of pods, and can load-balance across them.
+ No need to modify your application to use an unfamiliar service discovery mechanism. Kubernetes gives Pods their own IP addresses and a single DNS name for a set of Pods, and can load-balance across them.
content_template: templates/concept
weight: 10
@@ -16,8 +16,8 @@ weight: 10
{{< glossary_definition term_id="service" length="short" >}}
-No need to modify your application to use an unfamiliar service discovery mechanism.
-Kubernetes gives pods their own IP addresses and a single DNS name for a set of pods,
+With Kubernetes you don't need to modify your application to use an unfamiliar service discovery mechanism.
+Kubernetes gives Pods their own IP addresses and a single DNS name for a set of Pods,
and can load-balance across them.
{{% /capture %}}
@@ -26,18 +26,18 @@ and can load-balance across them.
## Motivation
-Kubernetes {{< glossary_tooltip term_id="pod" text="Pods" >}} are mortal.
+Kubernetes {{< glossary_tooltip term_id="pod" text="Pods" >}} are mortal.
They are born and when they die, they are not resurrected.
If you use a {{< glossary_tooltip term_id="deployment" >}} to run your app,
-it can create and destroy Pods dynamically (e.g. when scaling out or in).
+it can create and destroy Pods dynamically.
-Each Pod gets its own IP address, however the set of Pods
-for a Deployment running in one moment in time could be different from
+Each Pod gets its own IP address, however in a Deployment, the set of Pods
+running in one moment in time could be different from
the set of Pods running that application a moment later.
This leads to a problem: if some set of Pods (call them “backends”) provides
functionality to other Pods (call them “frontends”) inside your cluster,
-how do those frontends find out and keep track of which IP address to connect
+how do the frontends find out and keep track of which IP address to connect
to, so that the frontend can use the backend part of the workload?
Enter _Services_.
@@ -45,13 +45,13 @@ Enter _Services_.
## Service resources {#service-resource}
In Kubernetes, a Service is an abstraction which defines a logical set of Pods
-and a policy by which to access them (you'll sometimes see this pattern called
+and a policy by which to access them (sometimes this pattern is called
a micro-service). The set of Pods targeted by a Service is usually determined
by a {{< glossary_tooltip text="selector" term_id="selector" >}}
(see [below](#services-without-selectors) for why you might want a Service
_without_ a selector).
-For example: consider a stateless image-processing backend which is running with
+For example, consider a stateless image-processing backend which is running with
3 replicas. Those replicas are fungible—frontends do not care which backend
they use. While the actual Pods that compose the backend set may change, the
frontend clients should not need to be aware of that, nor should they need to keep
@@ -63,19 +63,19 @@ The Service abstraction enables this decoupling.
If you're able to use Kubernetes APIs for service discovery in your application,
you can query the {{< glossary_tooltip text="API server" term_id="kube-apiserver" >}}
-for Endpoints, that will be updated whenever the set of Pods in a Service changes.
+for Endpoints, that get updated whenever the set of Pods in a Service changes.
For non-native applications, Kubernetes offers ways to place a network port or load
balancer in between your application and the backend Pods.
-## Defining a service
+## Defining a Service
A Service in Kubernetes is a REST object, similar to a Pod. Like all of the
REST objects, you can `POST` a Service definition to the API server to create
a new instance.
For example, suppose you have a set of Pods that each listen on TCP port 9376
-and carry a label `"app=MyApp"`:
+and carry a label `app=MyApp`:
```yaml
apiVersion: v1
@@ -86,37 +86,37 @@ spec:
selector:
app: MyApp
ports:
- - protocol: TCP
- port: 80
- targetPort: 9376
+ - protocol: TCP
+ port: 80
+ targetPort: 9376
```
-This specification will create a new Service object named “my-service” which
-targets TCP port 9376 on any Pod with the `"app=MyApp"` label.
+This specification creates a new Service object named “my-service”, which
+targets TCP port 9376 on any Pod with the `app=MyApp` label.
-This Service will also be assigned an IP address (sometimes called the "cluster IP"),
-which is used by the service proxies
+Kubernetes assigns this Service an IP address (sometimes called the "cluster IP"),
+which is used by the Service proxies
(see [Virtual IPs and service proxies](#virtual-ips-and-service-proxies) below).
-The controller for the Service selector will continuously scan for Pods that
-match its selector, and will then POST any updates to an Endpoint object
+The controller for the Service selector continuously scans for Pods that
+match its selector, and then POSTs any updates to an Endpoint object
also named “my-service”.
{{< note >}}
-A Service can map _any_ incoming `port` to a `targetPort`. By default, and
-for convenience, the `targetPort` will be set to the same value as the `port`
+A Service can map _any_ incoming `port` to a `targetPort`. By default and
+for convenience, the `targetPort` is set to the same value as the `port`
field.
{{< /note >}}
Port definitions in Pods have names, and you can reference these names in the
-targetPort attribute of a Service. This will work even if there are a mixture
-of Pods in the Service, with the same network protocol available via different
-port numbers but a single configured name.
+`targetPort` attribute of a Service. This works even if there is a mixture
+of Pods in the Service using a single configured name, with the same network
+protocol available via different port numbers.
This offers a lot of flexibility for deploying and evolving your Services.
-For example, you can change the port number that pods expose in the next
+For example, you can change the port numbers that Pods expose in the next
version of your backend software, without breaking clients.
-The default protocol for services is TCP; you can also use any other
+The default protocol for Services is TCP; you can also use any other
[supported protocol](#protocol-support).
As many Services need to expose more than one port, Kubernetes supports multiple
@@ -126,16 +126,17 @@ Each port definition can have the same `protocol`, or a different one.
### Services without selectors
Services most commonly abstract access to Kubernetes Pods, but they can also
-abstract other kinds of backends. For example:
+abstract other kinds of backends.
+For example:
* You want to have an external database cluster in production, but in your
test environment you use your own databases.
- * You want to point your service to a service in a different
+ * You want to point your Service to a Service in a different
{{< glossary_tooltip term_id="namespace" >}} or on another cluster.
* You are migrating a workload to Kubernetes. Whilst evaluating the approach,
you run only a proportion of your backends in Kubernetes.
-In any of these scenarios you can define a service _without_ a Pod selector.
+In any of these scenarios you can define a Service _without_ a Pod selector.
For example:
```yaml
@@ -145,13 +146,13 @@ metadata:
name: my-service
spec:
ports:
- - protocol: TCP
- port: 80
- targetPort: 9376
+ - protocol: TCP
+ port: 80
+ targetPort: 9376
```
-Because this service has no selector, the corresponding Endpoint object will *not* be
-created automatically. You can manually map the service to the network address and port
+Because this Service has no selector, the corresponding Endpoint object is *not*
+created automatically. You can manually map the Service to the network address and port
where it's running, by adding an Endpoint object manually:
```yaml
@@ -170,16 +171,16 @@ subsets:
The endpoint IPs _must not_ be: loopback (127.0.0.0/8 for IPv4, ::1/128 for IPv6), or
link-local (169.254.0.0/16 and 224.0.0.0/24 for IPv4, fe80::/64 for IPv6).
-Endpoint IP addresses also cannot be the cluster IPs of other Kubernetes services,
+Endpoint IP addresses cannot be the cluster IPs of other Kubernetes Services,
because {{< glossary_tooltip term_id="kube-proxy" >}} doesn't support virtual IPs
as a destination.
{{< /note >}}
Accessing a Service without a selector works the same as if it had a selector.
-In the example above, traffic will be routed to the single endpoint defined in
+In the example above, traffic is routed to the single endpoint defined in
the YAML: `192.0.2.42:9376` (TCP).
-An ExternalName Service is a special case of service that does not have
+An ExternalName Service is a special case of Service that does not have
selectors and uses DNS names instead. For more information, see the
[ExternalName](#externalname) section later in this document.
@@ -219,7 +220,7 @@ Kubernetes v1.8 added ipvs proxy mode.
In this mode, kube-proxy watches the Kubernetes master for the addition and
removal of Service and Endpoint objects. For each Service it opens a
port (randomly chosen) on the local node. Any connections to this "proxy port"
-will be proxied to one of the Service's backend Pods (as reported via
+is proxied to one of the Service's backend Pods (as reported via
Endpoints). kube-proxy takes the `SessionAffinity` setting of the Service into
account when deciding which backend Pod to use.
@@ -235,19 +236,19 @@ By default, kube-proxy in userspace mode chooses a backend via a round-robin alg
In this mode, kube-proxy watches the Kubernetes control plane for the addition and
removal of Service and Endpoint objects. For each Service, it installs
-iptables rules which capture traffic to the Service's `clusterIP` (which is
-virtual) and `port` and redirects that traffic to one of the Service's
+iptables rules, which capture traffic to the Service's `clusterIP` and `port`,
+and redirect that traffic to one of the Service's
backend sets. For each Endpoint object, it installs iptables rules which
select a backend Pod.
By default, kube-proxy in iptables mode chooses a backend at random.
Using iptables to handle traffic has a lower system overhead, because traffic
-is handled by Linux netfilter without the need switch between userspace and the
+is handled by Linux netfilter without the need to switch between userspace and the
kernel space. This approach is also likely to be more reliable.
If kube-proxy is running in iptables mode and the first Pod that's selected
-does not respond, the connection will fail. This is different from userspace
+does not respond, the connection fails. This is different from userspace
mode: in that scenario, kube-proxy would detect that the connection to the first
Pod had failed and would automatically retry with a different backend Pod.
@@ -267,7 +268,7 @@ calls `netlink` interface to create IPVS rules accordingly and synchronizes
IPVS rules with Kubernetes Services and Endpoints periodically.
This control loop ensures that IPVS status matches the desired
state.
-When accessing a Service, IPVS will direct traffic to one of the backend Pods.
+When accessing a Service, IPVS directs traffic to one of the backend Pods.
The IPVS proxy mode is based on netfilter hook function that is similar to
iptables mode, but uses hash table as the underlying data structure and works
@@ -291,22 +292,22 @@ these are:
To run kube-proxy in IPVS mode, you must make the IPVS Linux available on
the node before you starting kube-proxy.
-When kube-proxy starts in IPVS proxy mode, it will verify whether IPVS
-kernel modules are available, and if those are not detected then kube-proxy
-fall back to running in iptables proxy mode.
+When kube-proxy starts in IPVS proxy mode, it verifies whether IPVS
+kernel modules are available. If the IPVS kernel modules are not detected, then kube-proxy
+falls back to running in iptables proxy mode.
{{< /note >}}

-In any of these proxy models, any traffic bound for the Service’s IP:Port is
+In these proxy models, the traffic bound for the Service’s IP:Port is
proxied to an appropriate backend without the clients knowing anything
about Kubernetes or Services or Pods.
If you want to make sure that connections from a particular client
-are passed to the same Pod each time, you can select session affinity based
+are passed to the same Pod each time, you can select the session affinity based
the on client's IP addresses by setting `service.spec.sessionAffinity` to "ClientIP"
(the default is "None").
-You can then also set the maximum session sticky time by setting
+You can also set the maximum session sticky time by setting
`service.spec.sessionAffinityConfig.clientIP.timeoutSeconds` appropriately.
(the default value is 10800, which works out to be 3 hours).
@@ -315,7 +316,8 @@ You can then also set the maximum session sticky time by setting
For some Services, you need to expose more than one port.
Kubernetes lets you configure multiple port definitions on a Service object.
When using multiple ports for a Service, you must give all of your ports names
-so that these are unambiguous. For example:
+so that these are unambiguous.
+For example:
```yaml
apiVersion: v1
@@ -326,14 +328,14 @@ spec:
selector:
app: MyApp
ports:
- - name: http
- protocol: TCP
- port: 80
- targetPort: 9376
- - name: https
- protocol: TCP
- port: 443
- targetPort: 9377
+ - name: http
+ protocol: TCP
+ port: 80
+ targetPort: 9376
+ - name: https
+ protocol: TCP
+ port: 443
+ targetPort: 9377
```
{{< note >}}
@@ -371,7 +373,7 @@ and simpler `{SVCNAME}_SERVICE_HOST` and `{SVCNAME}_SERVICE_PORT` variables,
where the Service name is upper-cased and dashes are converted to underscores.
For example, the Service `"redis-master"` which exposes TCP port 6379 and has been
-allocated cluster IP address 10.0.0.11 produces the following environment
+allocated cluster IP address 10.0.0.11, produces the following environment
variables:
```shell
@@ -385,7 +387,7 @@ REDIS_MASTER_PORT_6379_TCP_ADDR=10.0.0.11
```
{{< note >}}
-When you have a Pod that might need to acccess a Service, and you are using
+When you have a Pod that needs to access a Service, and you are using
the environment variable method to publish the port and cluster IP to the client
Pods, you must create the Service *before* the client Pods come into existence.
Otherwise, those client Pods won't have their environment variables populated.
@@ -405,7 +407,7 @@ throughout your cluster then all Pods should automatically be able to resolve
Services by their DNS name.
For example, if you have a Service called `"my-service"` in a Kubernetes
-Namespace `"my-ns"`, the control plane and the DNS service acting together will
+Namespace `"my-ns"`, the control plane and the DNS Service acting together
create a DNS record for `"my-service.my-ns"`. Pods in the `"my-ns"` Namespace
should be able to find it by simply doing a name lookup for `my-service`
(`"my-service.my-ns"` would also work).
@@ -413,7 +415,7 @@ should be able to find it by simply doing a name lookup for `my-service`
Pods in other Namespaces must qualify the name as `my-service.my-ns`. These names
will resolve to the cluster IP assigned for the Service.
-Kubernetes also supports DNS SRV (service) records for named ports. If the
+Kubernetes also supports DNS SRV (Service) records for named ports. If the
`"my-service.my-ns"` Service has a port named `"http"` with protocol set to
`TCP`, you can do a DNS SRV query for `_http._tcp.my-service.my-ns` to discover
the port number for `"http"`, as well as the IP address.
@@ -422,86 +424,84 @@ The Kubernetes DNS server is the only way to access `ExternalName` Services.
You can find more information about `ExternalName` resolution in
[DNS Pods and Services](/docs/concepts/services-networking/dns-pod-service/).
-## Headless services
+## Headless Services
-Sometimes you don't need or want load-balancing and a single service IP. In
+Sometimes you don't need load-balancing and a single Service IP. In
this case, you can create what are termed “headless” Services, by explicitly
specifying `"None"` for the cluster IP (`.spec.clusterIP`).
You can use a headless Service to interface with other service discovery mechanisms,
-without being tied to Kubernetes' implementation. For example, you could implement
-a custom [Operator](
-be built upon this API.
+without being tied to Kubernetes' implementation.
-For such `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.
+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:
### With selectors
-For headless services that define selectors, the endpoints controller creates
-`Endpoints` records in the API, and modifies the DNS configuration to return A
+For headless Services that define selectors, the endpoints controller creates
+`Endpoints` records in the API, and modifies the DNS configuration to return
records (addresses) that point directly to the `Pods` backing the `Service`.
### Without selectors
-For headless services that do not define selectors, the endpoints controller does
+For headless Services that do not define selectors, the endpoints controller does
not create `Endpoints` records. However, the DNS system looks for and configures
either:
- * CNAME records for [`ExternalName`](#externalname)-type services.
- * A records for any `Endpoints` that share a name with the service, for all
+ * CNAME records for [`ExternalName`](#externalname)-type Services.
+ * A records for any `Endpoints` that share a name with the Service, for all
other types.
-## Publishing services (ServiceTypes) {#publishing-services-service-types}
+## Publishing Services (ServiceTypes) {#publishing-services-service-types}
-For some parts of your application (e.g. frontends) you may want to expose a
-Service onto an external IP address, one that's outside of your cluster.
+For some parts of your application (for example, frontends) you may want to expose a
+Service onto an external IP address, that's outside of your cluster.
-Kubernetes `ServiceTypes` allow you to specify what kind of service you want.
+Kubernetes `ServiceTypes` allow you to specify what kind of Service you want.
The default is `ClusterIP`.
`Type` values and their behaviors are:
- * `ClusterIP`: Exposes the service on a cluster-internal IP. Choosing this value
- makes the service only reachable from within the cluster. This is the
+ * `ClusterIP`: Exposes the Service on a cluster-internal IP. Choosing this value
+ makes the Service only reachable from within the cluster. This is the
default `ServiceType`.
- * [`NodePort`](#nodeport): Exposes the service on each Node's IP at a static port
- (the `NodePort`). A `ClusterIP` service, to which the `NodePort` service will
- route, is automatically created. You'll be able to contact the `NodePort` service,
+ * [`NodePort`](#nodeport): Exposes the Service on each Node's IP at a static port
+ (the `NodePort`). A `ClusterIP` Service, to which the `NodePort` Service
+ routes, is automatically created. You'll be able to contact the `NodePort` Service,
from outside the cluster,
by requesting `:`.
- * [`LoadBalancer`](#loadbalancer): Exposes the service externally using a cloud
- provider's load balancer. `NodePort` and `ClusterIP` services, to which the external
- load balancer will route, are automatically created.
- * [`ExternalName`](#externalname): Maps the service to the contents of the
+ * [`LoadBalancer`](#loadbalancer): Exposes the Service externally using a cloud
+ provider's load balancer. `NodePort` and `ClusterIP` Services, to which the external
+ load balancer routes, are automatically created.
+ * [`ExternalName`](#externalname): Maps the Service to the contents of the
`externalName` field (e.g. `foo.bar.example.com`), by returning a `CNAME` record
+
with its value. No proxying of any kind is set up.
+ {{< note >}}
+ You need CoreDNS version 1.7 or higher to use the `ExternalName` type.
+ {{< /note >}}
-{{< note >}}
-
-You need CoreDNS version 1.7 or higher to use the `ExternalName` type.
-
-{{< /note >}}
+You can also use [Ingress](/docs/concepts/services-networking/ingress/) to expose your Service. Ingress is not a Service type, but it acts as the entry point for your cluster. It lets you consolidate your routing rules into a single resource as it can expose multiple services under the same IP address.
### Type NodePort {#nodeport}
-If you set the `type` field to `NodePort`, the Kubernetes control plane will
-allocate a port from a range specified by `--service-node-port-range` flag (default: 30000-32767).
-Each node will proxy that port each (the same port number on every Node) into your Service.
-Your service will report that allocated port in its `.spec.ports[*].nodePort` field.
+If you set the `type` field to `NodePort`, the Kubernetes control plane
+allocates a port from a range specified by `--service-node-port-range` flag (default: 30000-32767).
+Each node proxies that port (the same port number on every Node) into your Service.
+Your Service reports the allocated port in its `.spec.ports[*].nodePort` field.
If you want to specify particular IP(s) to proxy the port, you can set the `--nodeport-addresses` flag in kube-proxy to particular IP block(s); this is supported since Kubernetes v1.10.
This flag takes a comma-delimited list of IP blocks (e.g. 10.0.0.0/8, 192.0.2.0/25) to specify IP address ranges that kube-proxy should consider as local to this node.
-For example, if you start kube-proxy with flag `--nodeport-addresses=127.0.0.0/8`, kube-proxy will select only the loopback interface for NodePort Services. The default for `--nodeport-addresses` is an empty list, and means that kube-proxy should consider all available network interfaces for NodePort. (That's also compatible with earlier Kubernetes releases).
+For example, if you start kube-proxy with the `--nodeport-addresses=127.0.0.0/8` flag, kube-proxy only selects the loopback interface for NodePort Services. The default for `--nodeport-addresses` is an empty list. This means that kube-proxy should consider all available network interfaces for NodePort. (That's also compatible with earlier Kubernetes releases).
If you want a specific port number, you can specify a value in the `nodePort`
field. The control plane will either allocate you that port or report that
the API transaction failed.
-This means that you need to take care about possible port collisions yourself).
+This means that you need to take care about possible port collisions yourself.
You also have to use a valid port number, one that's inside the range configured
for NodePort use.
@@ -509,16 +509,17 @@ Using a NodePort gives you the freedom to set up your own load balancing solutio
to configure environments that are not fully supported by Kubernetes, or even
to just expose one or more nodes' IPs directly.
-Note that this Service will be visible as both `:spec.ports[*].nodePort`
+Note that this Service is visible as `:spec.ports[*].nodePort`
and `.spec.clusterIP:spec.ports[*].port`. (If the `--nodeport-addresses` flag in kube-proxy is set, would be filtered NodeIP(s).)
### Type LoadBalancer {#loadbalancer}
On cloud providers which support external load balancers, setting the `type`
-field to `LoadBalancer` will provision a load balancer for your Service.
+field to `LoadBalancer` provisions a load balancer for your Service.
The actual creation of the load balancer happens asynchronously, and
-information about the provisioned balancer will be published in the Service's
-`.status.loadBalancer` field. For example:
+information about the provisioned balancer is published in the Service's
+`.status.loadBalancer` field.
+For example:
```yaml
apiVersion: v1
@@ -529,26 +530,26 @@ spec:
selector:
app: MyApp
ports:
- - protocol: TCP
- port: 80
- targetPort: 9376
+ - protocol: TCP
+ port: 80
+ targetPort: 9376
clusterIP: 10.0.171.239
loadBalancerIP: 78.11.24.19
type: LoadBalancer
status:
loadBalancer:
ingress:
- - ip: 146.148.47.155
+ - ip: 146.148.47.155
```
-Traffic from the external load balancer will be directed at the backend Pods,
-though exactly how that works depends on the cloud provider.
+Traffic from the external load balancer is directed at the backend Pods. The cloud provider decides how it is load balanced.
-Some cloud providers allow you to specify the `loadBalancerIP`. In those cases, the load-balancer will be created
+
+Some cloud providers allow you to specify the `loadBalancerIP`. In those cases, the load-balancer is created
with the user-specified `loadBalancerIP`. If the `loadBalancerIP` field is not specified,
-the loadBalancer will be set up with an ephemeral IP address. If you specify a `loadBalancerIP`
+the loadBalancer is set up with an ephemeral IP address. If you specify a `loadBalancerIP`
but your cloud provider does not support the feature, the `loadbalancerIP` field that you
-set will be ignored.
+set is ignored.
{{< note >}}
If you're using SCTP, see the [caveat](#caveat-sctp-loadbalancer-service-type) below about the
@@ -567,13 +568,13 @@ Specify the assigned IP address as loadBalancerIP. Ensure that you have updated
{{< /note >}}
#### Internal load balancer
-In a mixed environment it is sometimes necessary to route traffic from services inside the same
+In a mixed environment it is sometimes necessary to route traffic from Services inside the same
(virtual) network address block.
-In a split-horizon DNS environment you would need two services to be able to route both external and internal traffic to your endpoints.
+In a split-horizon DNS environment you would need two Services to be able to route both external and internal traffic to your endpoints.
You can achieve this by adding one the following annotations to a Service.
-The annotation to add depends on the cloud service provider you're using.
+The annotation to add depends on the cloud Service provider you're using.
{{< tabs name="service_tabs" >}}
{{% tab name="Default" %}}
@@ -658,15 +659,15 @@ metadata:
```
The second annotation specifies which protocol a Pod speaks. For HTTPS and
-SSL, the ELB will expect the Pod to authenticate itself over the encrypted
+SSL, the ELB expects the Pod to authenticate itself over the encrypted
connection, using a certificate.
-HTTP and HTTPS will select layer 7 proxying: the ELB will terminate
+HTTP and HTTPS selects layer 7 proxying: the ELB terminates
the connection with the user, parse headers and inject the `X-Forwarded-For`
-header with the user's IP address (Pods will only see the IP address of the
+header with the user's IP address (Pods only see the IP address of the
ELB at the other end of its connection) when forwarding requests.
-TCP and SSL will select layer 4 proxying: the ELB will forward traffic without
+TCP and SSL selects layer 4 proxying: the ELB forwards traffic without
modifying the headers.
In a mixed-use environment where some ports are secured and others are left unencrypted,
@@ -680,12 +681,12 @@ you can use the following annotations:
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443,8443"
```
-In the above example, if the service contained three ports, `80`, `443`, and
+In the above example, if the Service contained three ports, `80`, `443`, and
`8443`, then `443` and `8443` would use the SSL certificate, but `80` would just
be proxied HTTP.
From Kubernetes v1.9 onwrds you can use [predefined AWS SSL policies](http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-security-policy-table.html) with HTTPS or SSL listeners for your Services.
-To see which policies are available for use, you can the `aws` command line tool:
+To see which policies are available for use, you can use the `aws` command line tool:
```bash
aws elb describe-load-balancer-policies --query 'PolicyDescriptions[].PolicyName'
@@ -720,7 +721,7 @@ and cannot be configured otherwise.
#### ELB Access Logs on AWS
-There are several annotations to manage access logs for ELB services on AWS.
+There are several annotations to manage access logs for ELB Services on AWS.
The annotation `service.beta.kubernetes.io/aws-load-balancer-access-log-enabled`
controls whether access logs are enabled.
@@ -805,11 +806,15 @@ There are other annotations to manage Classic Elastic Load Balancers that are de
# A list of additional security groups to be added to the ELB
```
-#### Network Load Balancer support on AWS
+#### Network Load Balancer support on AWS [alpha] {#aws-nlb-support}
-{{< feature-state for_k8s_version="v1.15" state="beta" >}}
+{{< warning >}}
+This is an alpha feature and is not yet recommended for production clusters.
+{{< /warning >}}
-To use a Network Load Balancer on AWS, use the annotation `service.beta.kubernetes.io/aws-load-balancer-type` with the value set to `nlb`.
+Starting from Kubernetes v1.9.0, you can use AWS Network Load Balancer (NLB) with Services. To
+use a Network Load Balancer on AWS, use the annotation `service.beta.kubernetes.io/aws-load-balancer-type`
+with the value set to `nlb`.
```yaml
metadata:
@@ -824,13 +829,13 @@ on Elastic Load Balancing for a list of supported instance types.
{{< /note >}}
Unlike Classic Elastic Load Balancers, Network Load Balancers (NLBs) forward the
-client's IP address through to the node. If a service's `.spec.externalTrafficPolicy`
-is set to `Cluster`, the client's IP address will not be propagated to the end
-pods.
+client's IP address through to the node. If a Service's `.spec.externalTrafficPolicy`
+is set to `Cluster`, the client's IP address is not propagated to the end
+Pods.
-By setting `.spec.externalTrafficPolicy` to `Local`, client IP addresses will be
-propagated to the end pods, but this could result in uneven distribution of
-traffic. Nodes without any pods for a particular LoadBalancer service will fail
+By setting `.spec.externalTrafficPolicy` to `Local`, the client IP addresses is
+propagated to the end Pods, but this could result in uneven distribution of
+traffic. Nodes without any Pods for a particular LoadBalancer Service will fail
the NLB Target Group's health check on the auto-assigned
`.spec.healthCheckNodePort` and not receive any traffic.
@@ -856,12 +861,12 @@ specify `loadBalancerSourceRanges`.
```yaml
spec:
loadBalancerSourceRanges:
- - "143.231.0.0/16"
+ - "143.231.0.0/16"
```
{{< note >}}
-If `.spec.loadBalancerSourceRanges` is not set, Kubernetes will
-allow traffic from `0.0.0.0/0` to the Node Security Group(s). If nodes have
+If `.spec.loadBalancerSourceRanges` is not set, Kubernetes
+allows traffic from `0.0.0.0/0` to the Node Security Group(s). If nodes have
public IP addresses, be aware that non-NLB traffic can also reach all instances
in those modified security groups.
@@ -869,8 +874,8 @@ in those modified security groups.
### Type ExternalName {#externalname}
-Services of type ExternalName map a service to a DNS name, not to a typical selector such as
-`my-service` or `cassandra`. You specify these services with the `spec.externalName` parameter.
+Services of type ExternalName map a Service to a DNS name, not to a typical selector such as
+`my-service` or `cassandra`. You specify these Services with the `spec.externalName` parameter.
This Service definition, for example, maps
the `my-service` Service in the `prod` namespace to `my.database.example.com`:
@@ -888,15 +893,15 @@ spec:
{{< note >}}
ExternalName accepts an IPv4 address string, but as a DNS names comprised of digits, not as an IP address. ExternalNames that resemble IPv4 addresses are not resolved by CoreDNS or ingress-nginx because ExternalName
is intended to specify a canonical DNS name. To hardcode an IP address, consider using
-[headless services](#headless-services).
+[headless Services](#headless-services).
{{< /note >}}
-When looking up the host `my-service.prod.svc.cluster.local`, the cluster DNS service
-will return a `CNAME` record with the value `my.database.example.com`. Accessing
+When looking up the host `my-service.prod.svc.cluster.local`, the cluster DNS Service
+returns a `CNAME` record with the value `my.database.example.com`. Accessing
`my-service` works in the same way as other Services but with the crucial
difference that redirection happens at the DNS level rather than via proxying or
forwarding. Should you later decide to move your database into your cluster, you
-can start its pods, add appropriate selectors or endpoints, and change the
+can start its Pods, add appropriate selectors or endpoints, and change the
Service's `type`.
@@ -907,9 +912,9 @@ This section is indebted to the [Kubernetes Tips - Part
### External IPs
-If there are external IPs that route to one or more cluster nodes, Kubernetes services can be exposed on those
-`externalIPs`. Traffic that ingresses into the cluster with the external IP (as destination IP), on the service port,
-will be routed to one of the service endpoints. `externalIPs` are not managed by Kubernetes and are the responsibility
+If there are external IPs that route to one or more cluster nodes, Kubernetes Services can be exposed on those
+`externalIPs`. Traffic that ingresses into the cluster with the external IP (as destination IP), on the Service port,
+will be routed to one of the Service endpoints. `externalIPs` are not managed by Kubernetes and are the responsibility
of the cluster administrator.
In the Service spec, `externalIPs` can be specified along with any of the `ServiceTypes`.
@@ -924,17 +929,17 @@ spec:
selector:
app: MyApp
ports:
- - name: http
- protocol: TCP
- port: 80
- targetPort: 9376
+ - name: http
+ protocol: TCP
+ port: 80
+ targetPort: 9376
externalIPs:
- - 80.11.12.10
+ - 80.11.12.10
```
## Shortcomings
-Using the userspace proxy for VIPs will work at small to medium scale, but will
+Using the userspace proxy for VIPs, work at small to medium scale, but will
not scale to very large clusters with thousands of Services. The [original
design proposal for portals](http://issue.k8s.io/1107) has more details on
this.
@@ -969,7 +974,7 @@ In order to allow you to choose a port number for your Services, we must
ensure that no two Services can collide. Kubernetes does that by allocating each
Service its own IP address.
-To ensure each service receives a unique IP, an internal allocator atomically
+To ensure each Service receives a unique IP, an internal allocator atomically
updates a global allocation map in {{< glossary_tooltip term_id="etcd" >}}
prior to creating each Service. The map object must exist in the registry for
Services to get IP address assignments, otherwise creations will
@@ -1036,7 +1041,7 @@ through a load-balancer, though in those cases the client IP does get altered.
#### IPVS
iptables operations slow down dramatically in large scale cluster e.g 10,000 Services.
-IPVS is designed for load balancing and based on in-kernel hash tables. So you can achieve performance consistency in large number of services from IPVS-based kube-proxy. Meanwhile, IPVS-based kube-proxy has more sophisticated load balancing algorithms (least conns, locality, weighted, persistence).
+IPVS is designed for load balancing and based on in-kernel hash tables. So you can achieve performance consistency in large number of Services from IPVS-based kube-proxy. Meanwhile, IPVS-based kube-proxy has more sophisticated load balancing algorithms (least conns, locality, weighted, persistence).
## API Object
@@ -1049,13 +1054,13 @@ about the API object at: [Service API object](/docs/reference/generated/kubernet
{{< feature-state for_k8s_version="v1.0" state="stable" >}}
-You can use TCP for any kind of service, and it's the default network protocol.
+You can use TCP for any kind of Service, and it's the default network protocol.
### UDP
{{< feature-state for_k8s_version="v1.0" state="stable" >}}
-You can use UDP for most services. For type=LoadBalancer services, UDP support
+You can use UDP for most Services. For type=LoadBalancer Services, UDP support
depends on the cloud provider offering this facility.
### HTTP
@@ -1068,7 +1073,7 @@ of the Service.
{{< note >}}
You can also use {{< glossary_tooltip term_id="ingress" >}} in place of Service
-to expose HTTP / HTTPS services.
+to expose HTTP / HTTPS Services.
{{< /note >}}
### PROXY protocol
diff --git a/content/en/docs/concepts/storage/persistent-volumes.md b/content/en/docs/concepts/storage/persistent-volumes.md
index dded59d9dd..314a307848 100644
--- a/content/en/docs/concepts/storage/persistent-volumes.md
+++ b/content/en/docs/concepts/storage/persistent-volumes.md
@@ -233,11 +233,14 @@ or is done when Pod is running and underlying file system supports online expans
FlexVolumes allow resize if the driver is set with the `RequiresFSResize` capability to true.
The FlexVolume can be resized on pod restart.
-{{< feature-state for_k8s_version="v1.11" state="alpha" >}}
-
#### Resizing an in-use PersistentVolumeClaim
-Expanding in-use PVCs is a beta feature and is enabled by default via `ExpandInUsePersistentVolumes` feature gate.
+{{< feature-state for_k8s_version="v1.15" state="beta" >}}
+
+{{< note >}}
+Expanding in-use PVCs is available as beta since 1.15, and as alpha since Kubernetes 1.11. The `ExpandInUsePersistentVolumes` feature must be enabled, which is the case automatically for many clusters for beta features. Please refer to the [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) documentation for more information.
+{{< /note >}}
+
In this case, you don't need to delete and recreate a Pod or deployment that is using an existing PVC.
Any in-use PVC automatically becomes available to its Pod as soon as its file system has been expanded.
This feature has no effect on PVCs that are not in use by a Pod or deployment. You must create a Pod which
@@ -346,7 +349,7 @@ In the CLI, the access modes are abbreviated to:
| AzureDisk | ✓ | - | - |
| CephFS | ✓ | ✓ | ✓ |
| Cinder | ✓ | - | - |
-| CSI | &depends on the driver | depends on the driver | depends on the driver |
+| CSI | depends on the driver | depends on the driver | depends on the driver |
| FC | ✓ | ✓ | - |
| Flexvolume | ✓ | ✓ | depends on the driver |
| Flocker | ✓ | - | - |
diff --git a/content/en/docs/concepts/storage/volume-pvc-datasource.md b/content/en/docs/concepts/storage/volume-pvc-datasource.md
index 7819b83a2b..edd6d91160 100644
--- a/content/en/docs/concepts/storage/volume-pvc-datasource.md
+++ b/content/en/docs/concepts/storage/volume-pvc-datasource.md
@@ -52,8 +52,11 @@ metadata:
name: clone-of-pvc-1
namespace: myns
spec:
- capacity:
- storage: 10Gi
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 5Gi
dataSource:
kind: PersistentVolumeClaim
name: pvc-1
diff --git a/content/en/docs/concepts/storage/volumes.md b/content/en/docs/concepts/storage/volumes.md
index 851f48515b..4ee3e00355 100644
--- a/content/en/docs/concepts/storage/volumes.md
+++ b/content/en/docs/concepts/storage/volumes.md
@@ -208,7 +208,7 @@ writers simultaneously.
You must have your own Ceph server running with the share exported before you can use it.
{{< /caution >}}
-See the [CephFS example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/cephfs/) for more details.
+See the [CephFS example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/volumes/cephfs/) for more details.
### cinder {#cinder}
@@ -534,7 +534,7 @@ simultaneously.
You must have your own GlusterFS installation running before you can use it.
{{< /caution >}}
-See the [GlusterFS example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/glusterfs) for more details.
+See the [GlusterFS example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/volumes/glusterfs) for more details.
### hostPath {#hostpath}
@@ -618,7 +618,7 @@ and then serve it in parallel from as many Pods as you need. Unfortunately,
iSCSI volumes can only be mounted by a single consumer in read-write mode - no
simultaneous writers allowed.
-See the [iSCSI example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/iscsi) for more details.
+See the [iSCSI example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/volumes/iscsi) for more details.
### local {#local}
@@ -938,7 +938,7 @@ and then serve it in parallel from as many Pods as you need. Unfortunately,
RBD volumes can only be mounted by a single consumer in read-write mode - no
simultaneous writers allowed.
-See the [RBD example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/volumes/rbd) for more details.
+See the [RBD example](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/volumes/rbd) for more details.
### scaleIO {#scaleio}
@@ -1052,7 +1052,7 @@ spec:
```
For more information including Dynamic Provisioning and Persistent Volume Claims, please see the
-[StorageOS examples](https://github.com/kubernetes/examples/blob/master/staging/volumes/storageos).
+[StorageOS examples](https://github.com/kubernetes/examples/blob/master/volumes/storageos).
### vsphereVolume {#vspherevolume}
@@ -1313,6 +1313,43 @@ feature gates which must be enabled for this feature are `BlockVolume` and
Learn how to
[setup your PV/PVC with raw block volume support](/docs/concepts/storage/persistent-volumes/#raw-block-volume-support).
+#### CSI ephemeral volumes
+
+{{< feature-state for_k8s_version="v1.15" state="alpha" >}}
+
+This feature allows CSI volumes to be directly embedded in the Pod specification instead of a PersistentVolume. Volumes specified in this way are ephemeral and do not persist across Pod restarts.
+
+Example:
+
+```yaml
+kind: Pod
+apiVersion: v1
+metadata:
+ name: my-csi-app
+spec:
+ containers:
+ - name: my-frontend
+ image: busybox
+ volumeMounts:
+ - mountPath: "/data"
+ name: my-csi-inline-vol
+ command: [ "sleep", "1000000" ]
+ volumes:
+ - name: my-csi-inline-vol
+ csi:
+ driver: inline.storage.kubernetes.io
+ volumeAttributes:
+ foo: bar
+```
+
+This feature requires CSIInlineVolume feature gate to be enabled:
+
+```
+--feature-gates=CSIInlineVolume=true
+```
+
+CSI ephemeral volumes are only supported by a subset of CSI drivers. Please see the list of CSI drivers [here](https://kubernetes-csi.github.io/docs/drivers.html).
+
# Developer resources
For more information on how to develop a CSI driver, refer to the [kubernetes-csi
documentation](https://kubernetes-csi.github.io/docs/)
@@ -1342,7 +1379,7 @@ drivers. Flexvolume driver binaries must be installed in a pre-defined volume
plugin path on each node (and in some cases master).
Pods interact with Flexvolume drivers through the `flexvolume` in-tree plugin.
-More details can be found [here](https://github.com/kubernetes/community/blob/master/contributors/devel/flexvolume.md).
+More details can be found [here](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-storage/flexvolume.md).
## Mount propagation
diff --git a/content/en/docs/concepts/workloads/controllers/deployment.md b/content/en/docs/concepts/workloads/controllers/deployment.md
index 82dcb7ff52..587e9658e0 100644
--- a/content/en/docs/concepts/workloads/controllers/deployment.md
+++ b/content/en/docs/concepts/workloads/controllers/deployment.md
@@ -1,6 +1,5 @@
---
reviewers:
-- bgrant0607
- janetkuo
title: Deployments
feature:
@@ -17,10 +16,10 @@ weight: 30
A _Deployment_ controller provides declarative updates for [Pods](/docs/concepts/workloads/pods/pod/) and
[ReplicaSets](/docs/concepts/workloads/controllers/replicaset/).
-You describe a _desired state_ in a Deployment object, and the Deployment controller changes the actual state to the desired state at a controlled rate. You can define Deployments to create new ReplicaSets, or to remove existing Deployments and adopt all their resources with new Deployments.
+You describe a _desired state_ in a Deployment, and the Deployment controller changes the actual state to the desired state at a controlled rate. You can define Deployments to create new ReplicaSets, or to remove existing Deployments and adopt all their resources with new Deployments.
{{< note >}}
-You should not manage ReplicaSets owned by a Deployment. All the use cases should be covered by manipulating the Deployment object. Consider opening an issue in the main Kubernetes repository if your use case is not covered below.
+Do not manage ReplicaSets owned by a Deployment. Consider opening an issue in the main Kubernetes repository if your use case is not covered below.
{{< /note >}}
{{% /capture %}}
@@ -54,12 +53,12 @@ In this example:
In this case, you simply select a label that is defined in the Pod template (`app: nginx`).
However, more sophisticated selection rules are possible,
as long as the Pod template itself satisfies the rule.
-
- {{< note >}}
- `matchLabels` is a map of {key,value} pairs. A single {key,value} in the `matchLabels` map
- is equivalent to an element of `matchExpressions`, whose key field is "key", the operator is "In",
- and the values array contains only "value". The requirements are ANDed.
- {{< /note >}}
+ {{< note >}}
+ The `matchLabels` field is a map of {key,value} pairs. A single {key,value} in the `matchLabels` map
+ is equivalent to an element of `matchExpressions`, whose key field is "key" the operator is "In",
+ and the values array contains only "value".
+ All of the requirements, from both `matchLabels` and `matchExpressions`, must be satisfied in order to match.
+ {{< /note >}}
* The `template` field contains the following sub-fields:
* The Pods are labeled `app: nginx`using the `labels` field.
@@ -67,86 +66,72 @@ In this example:
the Pods run one container, `nginx`, which runs the `nginx`
[Docker Hub](https://hub.docker.com/) image at version 1.7.9.
* Create one container and name it `nginx` using the `name` field.
- * Open port `80` so that the container can send and accept traffic.
-To create this Deployment, run the following command:
+ Follow the steps given below to create the above Deployment:
-```shell
-kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml
-```
+ Before you begin, make sure your Kubernetes cluster is up and running.
-{{< note >}}
-You may specify the `--record` flag to write the command executed in the resource annotation `kubernetes.io/change-cause`. It is useful for future introspection, for example to see the commands executed in each Deployment revision.
-{{< /note >}}
+ 1. Create the Deployment by running the following command:
-Next, run `kubectl get deployments`. The output is similar to the following:
+ {{< note >}}
+ You may specify the `--record` flag to write the command executed in the resource annotation `kubernetes.io/change-cause`. It is useful for future introspection.
+ For example, to see the commands executed in each Deployment revision.
+ {{< /note >}}
-```shell
-NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
-nginx-deployment 3 0 0 0 1s
-```
+ ```shell
+ kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml
+ ```
-When you inspect the Deployments in your cluster, the following fields are displayed:
+ 2. Run `kubectl get deployments` to check if the Deployment was created. If the Deployment is still being created, the output is similar to the following:
+ ```shell
+ NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
+ nginx-deployment 3 0 0 0 1s
+ ```
+ When you inspect the Deployments in your cluster, the following fields are displayed:
-* `NAME` lists the names of the Deployments in the cluster.
-* `DESIRED` displays the desired number of _replicas_ of the application, which
- you define when you create the Deployment. This is the _desired state_.
-* `CURRENT` displays how many replicas are currently running.
-* `UP-TO-DATE` displays the number of replicas that have been updated to achieve
- the desired state.
-* `AVAILABLE` displays how many replicas of the application are available to
- your users.
-* `AGE` displays the amount of time that the application has been running.
+ * `NAME` lists the names of the Deployments in the cluster.
+ * `DESIRED` displays the desired number of _replicas_ of the application, which you define when you create the Deployment. This is the _desired state_.
+ * `CURRENT` displays how many replicas are currently running.
+ * `UP-TO-DATE` displays the number of replicas that have been updated to achieve the desired state.
+ * `AVAILABLE` displays how many replicas of the application are available to your users.
+ * `AGE` displays the amount of time that the application has been running.
-Notice how the values in each field correspond to the values in the Deployment specification:
+ Notice how the number of desired replicas is 3 according to `.spec.replicas` field.
-* The number of desired replicas is 3 according to `.spec.replicas` field.
-* The number of current replicas is 0 according to the `.status.replicas` field.
-* The number of up-to-date replicas is 0 according to the `.status.updatedReplicas` field.
-* The number of available replicas is 0 according to the `.status.availableReplicas` field.
+ 3. To see the Deployment rollout status, run `kubectl rollout status deployment.v1.apps/nginx-deployment`. The output is similar to this:
+ ```shell
+ Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
+ deployment.apps/nginx-deployment successfully rolled out
+ ```
-To see the Deployment rollout status, run `kubectl rollout status deployment.v1.apps/nginx-deployment`. This command returns the following output:
+ 4. Run the `kubectl get deployments` again a few seconds later. The output is similar to this:
+ ```shell
+ NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
+ nginx-deployment 3 3 3 3 18s
+ ```
+ Notice that the Deployment has created all three replicas, and all replicas are up-to-date (they contain the latest Pod template) and available.
-```shell
-Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
-deployment.apps/nginx-deployment successfully rolled out
-```
+ 5. To see the ReplicaSet (`rs`) created by the Deployment, run `kubectl get rs`. The output is similar to this:
+ ```shell
+ NAME DESIRED CURRENT READY AGE
+ nginx-deployment-75675f5897 3 3 3 18s
+ ```
+ Notice that the name of the ReplicaSet is always formatted as `[DEPLOYMENT-NAME]-[RANDOM-STRING]`. The random string is
+ randomly generated and uses the pod-template-hash as a seed.
-Run the `kubectl get deployments` again a few seconds later:
+ 6. To see the labels automatically generated for each Pod, run `kubectl get pods --show-labels`. The following output is returned:
+ ```shell
+ NAME READY STATUS RESTARTS AGE LABELS
+ nginx-deployment-75675f5897-7ci7o 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453
+ nginx-deployment-75675f5897-kzszj 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453
+ nginx-deployment-75675f5897-qqcnn 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453
+ ```
+ The created ReplicaSet ensures that there are three `nginx` Pods.
-```shell
-NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
-nginx-deployment 3 3 3 3 18s
-```
-
-Notice that the Deployment has created all three replicas, and all replicas are up-to-date (they contain the
-latest Pod template) and available (the Pod status is Ready for at least the value of the Deployment's `.spec.minReadySeconds` field).
-
-To see the ReplicaSet (`rs`) created by the deployment, run `kubectl get rs`:
-
-```shell
-NAME DESIRED CURRENT READY AGE
-nginx-deployment-75675f5897 3 3 3 18s
-```
-
-Notice that the name of the ReplicaSet is always formatted as `[DEPLOYMENT-NAME]-[RANDOM-STRING]`. The random string is
-randomly generated and uses the pod-template-hash as a seed.
-
-To see the labels automatically generated for each pod, run `kubectl get pods --show-labels`. The following output is returned:
-
-```shell
-NAME READY STATUS RESTARTS AGE LABELS
-nginx-deployment-75675f5897-7ci7o 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453
-nginx-deployment-75675f5897-kzszj 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453
-nginx-deployment-75675f5897-qqcnn 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453
-```
-
-The created ReplicaSet ensures that there are three `nginx` Pods running at all times.
-
-{{< note >}}
-You must specify an appropriate selector and Pod template labels in a Deployment (in this case,
-`app: nginx`). Do not overlap labels or selectors with other controllers (including other Deployments and StatefulSets). Kubernetes doesn't stop you from overlapping, and if multiple controllers have overlapping selectors those controllers might conflict and behave unexpectedly.
-{{< /note >}}
+ {{< note >}}
+ You must specify an appropriate selector and Pod template labels in a Deployment (in this case,
+ `app: nginx`). Do not overlap labels or selectors with other controllers (including other Deployments and StatefulSets). Kubernetes doesn't stop you from overlapping, and if multiple controllers have overlapping selectors those controllers might conflict and behave unexpectedly.
+ {{< /note >}}
### Pod-template-hash label
@@ -162,155 +147,164 @@ and in any existing Pods that the ReplicaSet might have.
## Updating a Deployment
{{< note >}}
-A Deployment's rollout is triggered if and only if the Deployment's pod template (that is, `.spec.template`)
+A Deployment's rollout is triggered if and only if the Deployment's Pod template (that is, `.spec.template`)
is changed, for example if the labels or container images of the template are updated. Other updates, such as scaling the Deployment, do not trigger a rollout.
{{< /note >}}
-Suppose that you now want to update the nginx Pods to use the `nginx:1.9.1` image
-instead of the `nginx:1.7.9` image.
+Follow the steps given below to update your Deployment:
-```shell
-kubectl --record deployment.apps/nginx-deployment set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1
-```
-```
-image updated
-```
+1. Let's update the nginx Pods to use the `nginx:1.9.1` image instead of the `nginx:1.7.9` image.
-Alternatively, you can `edit` the Deployment and change `.spec.template.spec.containers[0].image` from `nginx:1.7.9` to `nginx:1.9.1`:
+ ```shell
+ kubectl --record deployment.apps/nginx-deployment set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1
+ ```
+ The output is similar to this:
+ ```
+ deployment.apps/nginx-deployment image updated
+ ```
-```shell
-kubectl edit deployment.v1.apps/nginx-deployment
-```
-```
-deployment.apps/nginx-deployment edited
-```
+ Alternatively, you can `edit` the Deployment and change `.spec.template.spec.containers[0].image` from `nginx:1.7.9` to `nginx:1.9.1`:
-To see the rollout status, run:
+ ```shell
+ kubectl edit deployment.v1.apps/nginx-deployment
+ ```
-```shell
-kubectl rollout status deployment.v1.apps/nginx-deployment
-```
-```
-Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
-deployment.apps/nginx-deployment successfully rolled out
-```
+ The output is similar to this:
+ ```
+ deployment.apps/nginx-deployment edited
+ ```
-After the rollout succeeds, you may want to `get` the Deployment:
+2. To see the rollout status, run:
-```shell
-kubectl get deployments
-```
-```
-NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
-nginx-deployment 3 3 3 3 36s
-```
+ ```shell
+ kubectl rollout status deployment.v1.apps/nginx-deployment
+ ```
-The number of up-to-date replicas indicates that the Deployment has updated the replicas to the latest configuration.
-The current replicas indicates the total replicas this Deployment manages, and the available replicas indicates the
-number of current replicas that are available.
+ The output is similar to this:
+ ```
+ Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
+ ```
+ or
+ ```
+ deployment.apps/nginx-deployment successfully rolled out
+ ```
-You can run `kubectl get rs` to see that the Deployment updated the Pods by creating a new ReplicaSet and scaling it
+Get more details on your updated Deployment:
+
+* After the rollout succeeds, you can view the Deployment by running `kubectl get deployments`.
+ The output is similar to this:
+ ```
+ NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
+ nginx-deployment 3 3 3 3 36s
+ ```
+
+* Run `kubectl get rs` to see that the Deployment updated the Pods by creating a new ReplicaSet and scaling it
up to 3 replicas, as well as scaling down the old ReplicaSet to 0 replicas.
-```shell
-kubectl get rs
-```
-```
-NAME DESIRED CURRENT READY AGE
-nginx-deployment-1564180365 3 3 3 6s
-nginx-deployment-2035384211 0 0 0 36s
-```
+ ```shell
+ kubectl get rs
+ ```
-Running `get pods` should now show only the new Pods:
+ The output is similar to this:
+ ```
+ NAME DESIRED CURRENT READY AGE
+ nginx-deployment-1564180365 3 3 3 6s
+ nginx-deployment-2035384211 0 0 0 36s
+ ```
-```shell
-kubectl get pods
-```
-```
-NAME READY STATUS RESTARTS AGE
-nginx-deployment-1564180365-khku8 1/1 Running 0 14s
-nginx-deployment-1564180365-nacti 1/1 Running 0 14s
-nginx-deployment-1564180365-z9gth 1/1 Running 0 14s
-```
+* Running `get pods` should now show only the new Pods:
-Next time you want to update these Pods, you only need to update the Deployment's pod template again.
+ ```shell
+ kubectl get pods
+ ```
-Deployment can ensure that only a certain number of Pods may be down while they are being updated. By
-default, it ensures that at least 25% less than the desired number of Pods are up (25% max unavailable).
+ The output is similar to this:
+ ```
+ NAME READY STATUS RESTARTS AGE
+ nginx-deployment-1564180365-khku8 1/1 Running 0 14s
+ nginx-deployment-1564180365-nacti 1/1 Running 0 14s
+ nginx-deployment-1564180365-z9gth 1/1 Running 0 14s
+ ```
-Deployment can also ensure that only a certain number of Pods may be created above the desired number of
-Pods. By default, it ensures that at most 25% more than the desired number of Pods are up (25% max surge).
+ Next time you want to update these Pods, you only need to update the Deployment's Pod template again.
-For example, if you look at the above Deployment closely, you will see that it first created a new Pod,
-then deleted some old Pods and created new ones. It does not kill old Pods until a sufficient number of
-new Pods have come up, and does not create new Pods until a sufficient number of old Pods have been killed.
-It makes sure that number of available Pods is at least 2 and the number of total Pods is at most 4.
+ Deployment ensures that only a certain number of Pods are down while they are being updated. By default,
+ it ensures that at least 25% of the desired number of Pods are up (25% max unavailable).
-```shell
-kubectl describe deployments
-```
-```
-Name: nginx-deployment
-Namespace: default
-CreationTimestamp: Thu, 30 Nov 2017 10:56:25 +0000
-Labels: app=nginx
-Annotations: deployment.kubernetes.io/revision=2
-Selector: app=nginx
-Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
-StrategyType: RollingUpdate
-MinReadySeconds: 0
-RollingUpdateStrategy: 25% max unavailable, 25% max surge
-Pod Template:
- Labels: app=nginx
- Containers:
- nginx:
- Image: nginx:1.9.1
- Port: 80/TCP
- Environment:
- Mounts:
- Volumes:
-Conditions:
- Type Status Reason
- ---- ------ ------
- Available True MinimumReplicasAvailable
- Progressing True NewReplicaSetAvailable
-OldReplicaSets:
-NewReplicaSet: nginx-deployment-1564180365 (3/3 replicas created)
-Events:
- Type Reason Age From Message
- ---- ------ ---- ---- -------
- Normal ScalingReplicaSet 2m deployment-controller Scaled up replica set nginx-deployment-2035384211 to 3
- Normal ScalingReplicaSet 24s deployment-controller Scaled up replica set nginx-deployment-1564180365 to 1
- Normal ScalingReplicaSet 22s deployment-controller Scaled down replica set nginx-deployment-2035384211 to 2
- Normal ScalingReplicaSet 22s deployment-controller Scaled up replica set nginx-deployment-1564180365 to 2
- Normal ScalingReplicaSet 19s deployment-controller Scaled down replica set nginx-deployment-2035384211 to 1
- Normal ScalingReplicaSet 19s deployment-controller Scaled up replica set nginx-deployment-1564180365 to 3
- Normal ScalingReplicaSet 14s deployment-controller Scaled down replica set nginx-deployment-2035384211 to 0
-```
+ Deployment also ensures that only a certain number of Pods are created above the desired number of Pods.
+ By default, it ensures that at most 25% of the desired number of Pods are up (25% max surge).
-Here you see that when you first created the Deployment, it created a ReplicaSet (nginx-deployment-2035384211)
-and scaled it up to 3 replicas directly. When you updated the Deployment, it created a new ReplicaSet
-(nginx-deployment-1564180365) and scaled it up to 1 and then scaled down the old ReplicaSet to 2, so that at
-least 2 Pods were available and at most 4 Pods were created at all times. It then continued scaling up and down
-the new and the old ReplicaSet, with the same rolling update strategy. Finally, you'll have 3 available replicas
-in the new ReplicaSet, and the old ReplicaSet is scaled down to 0.
+ For example, if you look at the above Deployment closely, you will see that it first created a new Pod,
+ then deleted some old Pods, and created new ones. It does not kill old Pods until a sufficient number of
+ new Pods have come up, and does not create new Pods until a sufficient number of old Pods have been killed.
+ It makes sure that at least 2 Pods are available and that at max 4 Pods in total are available.
+
+* Get details of your Deployment:
+ ```shell
+ kubectl describe deployments
+ ```
+ The output is similar to this:
+ ```
+ Name: nginx-deployment
+ Namespace: default
+ CreationTimestamp: Thu, 30 Nov 2017 10:56:25 +0000
+ Labels: app=nginx
+ Annotations: deployment.kubernetes.io/revision=2
+ Selector: app=nginx
+ Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
+ StrategyType: RollingUpdate
+ MinReadySeconds: 0
+ RollingUpdateStrategy: 25% max unavailable, 25% max surge
+ Pod Template:
+ Labels: app=nginx
+ Containers:
+ nginx:
+ Image: nginx:1.9.1
+ Port: 80/TCP
+ Environment:
+ Mounts:
+ Volumes:
+ Conditions:
+ Type Status Reason
+ ---- ------ ------
+ Available True MinimumReplicasAvailable
+ Progressing True NewReplicaSetAvailable
+ OldReplicaSets:
+ NewReplicaSet: nginx-deployment-1564180365 (3/3 replicas created)
+ Events:
+ Type Reason Age From Message
+ ---- ------ ---- ---- -------
+ Normal ScalingReplicaSet 2m deployment-controller Scaled up replica set nginx-deployment-2035384211 to 3
+ Normal ScalingReplicaSet 24s deployment-controller Scaled up replica set nginx-deployment-1564180365 to 1
+ Normal ScalingReplicaSet 22s deployment-controller Scaled down replica set nginx-deployment-2035384211 to 2
+ Normal ScalingReplicaSet 22s deployment-controller Scaled up replica set nginx-deployment-1564180365 to 2
+ Normal ScalingReplicaSet 19s deployment-controller Scaled down replica set nginx-deployment-2035384211 to 1
+ Normal ScalingReplicaSet 19s deployment-controller Scaled up replica set nginx-deployment-1564180365 to 3
+ Normal ScalingReplicaSet 14s deployment-controller Scaled down replica set nginx-deployment-2035384211 to 0
+ ```
+ Here you see that when you first created the Deployment, it created a ReplicaSet (nginx-deployment-2035384211)
+ and scaled it up to 3 replicas directly. When you updated the Deployment, it created a new ReplicaSet
+ (nginx-deployment-1564180365) and scaled it up to 1 and then scaled down the old ReplicaSet to 2, so that at
+ least 2 Pods were available and at most 4 Pods were created at all times. It then continued scaling up and down
+ the new and the old ReplicaSet, with the same rolling update strategy. Finally, you'll have 3 available replicas
+ in the new ReplicaSet, and the old ReplicaSet is scaled down to 0.
### Rollover (aka multiple updates in-flight)
-Each time a new deployment object is observed by the Deployment controller, a ReplicaSet is created to bring up
-the desired Pods if there is no existing ReplicaSet doing so. Existing ReplicaSet controlling Pods whose labels
+Each time a new Deployment is observed by the Deployment controller, a ReplicaSet is created to bring up
+the desired Pods. If the Deployment is updated, the existing ReplicaSet that controls Pods whose labels
match `.spec.selector` but whose template does not match `.spec.template` are scaled down. Eventually, the new
-ReplicaSet will be scaled to `.spec.replicas` and all old ReplicaSets will be scaled to 0.
+ReplicaSet is scaled to `.spec.replicas` and all old ReplicaSets is scaled to 0.
-If you update a Deployment while an existing rollout is in progress, the Deployment will create a new ReplicaSet
-as per the update and start scaling that up, and will roll over the ReplicaSet that it was scaling up previously
- -- it will add it to its list of old ReplicaSets and will start scaling it down.
+If you update a Deployment while an existing rollout is in progress, the Deployment creates a new ReplicaSet
+as per the update and start scaling that up, and rolls over the ReplicaSet that it was scaling up previously
+ -- it will add it to its list of old ReplicaSets and start scaling it down.
For example, suppose you create a Deployment to create 5 replicas of `nginx:1.7.9`,
-but then updates the Deployment to create 5 replicas of `nginx:1.9.1`, when only 3
-replicas of `nginx:1.7.9` had been created. In that case, Deployment will immediately start
-killing the 3 `nginx:1.7.9` Pods that it had created, and will start creating
-`nginx:1.9.1` Pods. It will not wait for 5 replicas of `nginx:1.7.9` to be created
+but then update the Deployment to create 5 replicas of `nginx:1.9.1`, when only 3
+replicas of `nginx:1.7.9` had been created. In that case, the Deployment immediately starts
+killing the 3 `nginx:1.7.9` Pods that it had created, and starts creating
+`nginx:1.9.1` Pods. It does not wait for the 5 replicas of `nginx:1.7.9` to be created
before changing course.
### Label selector updates
@@ -323,247 +317,269 @@ all of the implications.
In API version `apps/v1`, a Deployment's label selector is immutable after it gets created.
{{< /note >}}
-* Selector additions require the pod template labels in the Deployment spec to be updated with the new label too,
+* Selector additions require the Pod template labels in the Deployment spec to be updated with the new label too,
otherwise a validation error is returned. This change is a non-overlapping one, meaning that the new selector does
not select ReplicaSets and Pods created with the old selector, resulting in orphaning all old ReplicaSets and
creating a new ReplicaSet.
-* Selector updates -- that is, changing the existing value in a selector key -- result in the same behavior as additions.
-* Selector removals -- that is, removing an existing key from the Deployment selector -- do not require any changes in the
-pod template labels. No existing ReplicaSet is orphaned, and a new ReplicaSet is not created, but note that the
+* Selector updates changes the existing value in a selector key -- result in the same behavior as additions.
+* Selector removals removes an existing key from the Deployment selector -- do not require any changes in the
+Pod template labels. Existing ReplicaSets are not orphaned, and a new ReplicaSet is not created, but note that the
removed label still exists in any existing Pods and ReplicaSets.
## Rolling Back a Deployment
-Sometimes you may want to rollback a Deployment; for example, when the Deployment is not stable, such as crash looping.
+Sometimes, you may want to rollback a Deployment; for example, when the Deployment is not stable, such as crash looping.
By default, all of the Deployment's rollout history is kept in the system so that you can rollback anytime you want
(you can change that by modifying revision history limit).
{{< note >}}
A Deployment's revision is created when a Deployment's rollout is triggered. This means that the
-new revision is created if and only if the Deployment's pod template (`.spec.template`) is changed,
+new revision is created if and only if the Deployment's Pod template (`.spec.template`) is changed,
for example if you update the labels or container images of the template. Other updates, such as scaling the Deployment,
do not create a Deployment revision, so that you can facilitate simultaneous manual- or auto-scaling.
-This means that when you roll back to an earlier revision, only the Deployment's pod template part is
+This means that when you roll back to an earlier revision, only the Deployment's Pod template part is
rolled back.
{{< /note >}}
-Suppose that you made a typo while updating the Deployment, by putting the image name as `nginx:1.91` instead of `nginx:1.9.1`:
+* Suppose that you made a typo while updating the Deployment, by putting the image name as `nginx:1.91` instead of `nginx:1.9.1`:
-```shell
-kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true
-```
-```
-deployment.apps/nginx-deployment image updated
-```
+ ```shell
+ kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true
+ ```
-The rollout will be stuck.
+ The output is similar to this:
+ ```
+ deployment.apps/nginx-deployment image updated
+ ```
-```shell
-kubectl rollout status deployment.v1.apps/nginx-deployment
-```
-```
-Waiting for rollout to finish: 1 out of 3 new replicas have been updated...
-```
+* The rollout gets stuck. You can verify it by checking the rollout status:
-Press Ctrl-C to stop the above rollout status watch. For more information on stuck rollouts,
+ ```shell
+ kubectl rollout status deployment.v1.apps/nginx-deployment
+ ```
+
+ The output is similar to this:
+ ```
+ Waiting for rollout to finish: 1 out of 3 new replicas have been updated...
+ ```
+
+* Press Ctrl-C to stop the above rollout status watch. For more information on stuck rollouts,
[read more here](#deployment-status).
-You will see that the number of old replicas (nginx-deployment-1564180365 and nginx-deployment-2035384211) is 2, and new replicas (nginx-deployment-3066724191) is 1.
+* You see that the number of old replicas (`nginx-deployment-1564180365` and `nginx-deployment-2035384211`) is 2, and new replicas (nginx-deployment-3066724191) is 1.
-```shell
-kubectl get rs
-```
-```
-NAME DESIRED CURRENT READY AGE
-nginx-deployment-1564180365 3 3 3 25s
-nginx-deployment-2035384211 0 0 0 36s
-nginx-deployment-3066724191 1 1 0 6s
-```
+ ```shell
+ kubectl get rs
+ ```
-Looking at the Pods created, you will see that 1 Pod created by new ReplicaSet is stuck in an image pull loop.
+ The output is similar to this:
+ ```
+ NAME DESIRED CURRENT READY AGE
+ nginx-deployment-1564180365 3 3 3 25s
+ nginx-deployment-2035384211 0 0 0 36s
+ nginx-deployment-3066724191 1 1 0 6s
+ ```
-```shell
-kubectl get pods
-```
-```
-NAME READY STATUS RESTARTS AGE
-nginx-deployment-1564180365-70iae 1/1 Running 0 25s
-nginx-deployment-1564180365-jbqqo 1/1 Running 0 25s
-nginx-deployment-1564180365-hysrc 1/1 Running 0 25s
-nginx-deployment-3066724191-08mng 0/1 ImagePullBackOff 0 6s
-```
+* Looking at the Pods created, you see that 1 Pod created by new ReplicaSet is stuck in an image pull loop.
-{{< note >}}
-The Deployment controller will stop the bad rollout automatically, and will stop scaling up the new
-ReplicaSet. This depends on the rollingUpdate parameters (`maxUnavailable` specifically) that you have specified.
-Kubernetes by default sets the value to 25%.
-{{< /note >}}
+ ```shell
+ kubectl get pods
+ ```
-```shell
-kubectl describe deployment
-```
-```
-Name: nginx-deployment
-Namespace: default
-CreationTimestamp: Tue, 15 Mar 2016 14:48:04 -0700
-Labels: app=nginx
-Selector: app=nginx
-Replicas: 3 desired | 1 updated | 4 total | 3 available | 1 unavailable
-StrategyType: RollingUpdate
-MinReadySeconds: 0
-RollingUpdateStrategy: 25% max unavailable, 25% max surge
-Pod Template:
- Labels: app=nginx
- Containers:
- nginx:
- Image: nginx:1.91
- Port: 80/TCP
- Host Port: 0/TCP
- Environment:
- Mounts:
- Volumes:
-Conditions:
- Type Status Reason
- ---- ------ ------
- Available True MinimumReplicasAvailable
- Progressing True ReplicaSetUpdated
-OldReplicaSets: nginx-deployment-1564180365 (3/3 replicas created)
-NewReplicaSet: nginx-deployment-3066724191 (1/1 replicas created)
-Events:
- FirstSeen LastSeen Count From SubobjectPath Type Reason Message
- --------- -------- ----- ---- ------------- -------- ------ -------
- 1m 1m 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-2035384211 to 3
- 22s 22s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 1
- 22s 22s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 2
- 22s 22s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 2
- 21s 21s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 1
- 21s 21s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 3
- 13s 13s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 0
- 13s 13s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-3066724191 to 1
-```
+ The output is similar to this:
+ ```
+ NAME READY STATUS RESTARTS AGE
+ nginx-deployment-1564180365-70iae 1/1 Running 0 25s
+ nginx-deployment-1564180365-jbqqo 1/1 Running 0 25s
+ nginx-deployment-1564180365-hysrc 1/1 Running 0 25s
+ nginx-deployment-3066724191-08mng 0/1 ImagePullBackOff 0 6s
+ ```
-To fix this, you need to rollback to a previous revision of Deployment that is stable.
+ {{< note >}}
+ The Deployment controller stops the bad rollout automatically, and stops scaling up the new
+ ReplicaSet. This depends on the rollingUpdate parameters (`maxUnavailable` specifically) that you have specified.
+ Kubernetes by default sets the value to 25%.
+ {{< /note >}}
+
+* Get the description of the Deployment:
+ ```shell
+ kubectl describe deployment
+ ```
+
+ The output is similar to this:
+ ```
+ Name: nginx-deployment
+ Namespace: default
+ CreationTimestamp: Tue, 15 Mar 2016 14:48:04 -0700
+ Labels: app=nginx
+ Selector: app=nginx
+ Replicas: 3 desired | 1 updated | 4 total | 3 available | 1 unavailable
+ StrategyType: RollingUpdate
+ MinReadySeconds: 0
+ RollingUpdateStrategy: 25% max unavailable, 25% max surge
+ Pod Template:
+ Labels: app=nginx
+ Containers:
+ nginx:
+ Image: nginx:1.91
+ Port: 80/TCP
+ Host Port: 0/TCP
+ Environment:
+ Mounts:
+ Volumes:
+ Conditions:
+ Type Status Reason
+ ---- ------ ------
+ Available True MinimumReplicasAvailable
+ Progressing True ReplicaSetUpdated
+ OldReplicaSets: nginx-deployment-1564180365 (3/3 replicas created)
+ NewReplicaSet: nginx-deployment-3066724191 (1/1 replicas created)
+ Events:
+ FirstSeen LastSeen Count From SubobjectPath Type Reason Message
+ --------- -------- ----- ---- ------------- -------- ------ -------
+ 1m 1m 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-2035384211 to 3
+ 22s 22s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 1
+ 22s 22s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 2
+ 22s 22s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 2
+ 21s 21s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 1
+ 21s 21s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 3
+ 13s 13s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 0
+ 13s 13s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-3066724191 to 1
+ ```
+
+ To fix this, you need to rollback to a previous revision of Deployment that is stable.
### Checking Rollout History of a Deployment
-First, check the revisions of this deployment:
+Follow the steps given below to check the rollout history:
-```shell
-kubectl rollout history deployment.v1.apps/nginx-deployment
-```
-```
-deployments "nginx-deployment"
-REVISION CHANGE-CAUSE
-1 kubectl apply --filename=https://k8s.io/examples/controllers/nginx-deployment.yaml --record=true
-2 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
-3 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true
-```
-`CHANGE-CAUSE` is copied from the Deployment annotation `kubernetes.io/change-cause` to its revisions upon creation. You could specify the`CHANGE-CAUSE` message by:
+1. First, check the revisions of this Deployment:
+ ```shell
+ kubectl rollout history deployment.v1.apps/nginx-deployment
+ ```
+ The output is similar to this:
+ ```
+ deployments "nginx-deployment"
+ REVISION CHANGE-CAUSE
+ 1 kubectl apply --filename=https://k8s.io/examples/controllers/nginx-deployment.yaml --record=true
+ 2 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
+ 3 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true
+ ```
-* Annotating the Deployment with `kubectl annotate deployment.v1.apps/nginx-deployment kubernetes.io/change-cause="image updated to 1.9.1"`
-* Append the `--record` flag to save the `kubectl` command that is making changes to the resource.
-* Manually editing the manifest of the resource.
+ `CHANGE-CAUSE` is copied from the Deployment annotation `kubernetes.io/change-cause` to its revisions upon creation. You can specify the`CHANGE-CAUSE` message by:
-To further see the details of each revision, run:
+ * Annotating the Deployment with `kubectl annotate deployment.v1.apps/nginx-deployment kubernetes.io/change-cause="image updated to 1.9.1"`
+ * Append the `--record` flag to save the `kubectl` command that is making changes to the resource.
+ * Manually editing the manifest of the resource.
-```shell
-kubectl rollout history deployment.v1.apps/nginx-deployment --revision=2
-```
-```
-deployments "nginx-deployment" revision 2
- Labels: app=nginx
- pod-template-hash=1159050644
- Annotations: kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
- Containers:
- nginx:
- Image: nginx:1.9.1
- Port: 80/TCP
- QoS Tier:
- cpu: BestEffort
- memory: BestEffort
- Environment Variables:
- No volumes.
-```
+2. To see the details of each revision, run:
+ ```shell
+ kubectl rollout history deployment.v1.apps/nginx-deployment --revision=2
+ ```
+
+ The output is similar to this:
+ ```
+ deployments "nginx-deployment" revision 2
+ Labels: app=nginx
+ pod-template-hash=1159050644
+ Annotations: kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
+ Containers:
+ nginx:
+ Image: nginx:1.9.1
+ Port: 80/TCP
+ QoS Tier:
+ cpu: BestEffort
+ memory: BestEffort
+ Environment Variables:
+ No volumes.
+ ```
### Rolling Back to a Previous Revision
+Follow the steps given below to rollback the Deployment from the current version to the previous version, which is version 2.
-Now you've decided to undo the current rollout and rollback to the previous revision:
+1. Now you've decided to undo the current rollout and rollback to the previous revision:
+ ```shell
+ kubectl rollout undo deployment.v1.apps/nginx-deployment
+ ```
-```shell
-kubectl rollout undo deployment.v1.apps/nginx-deployment
-```
-```
-deployment.apps/nginx-deployment
-```
+ The output is similar to this:
+ ```
+ deployment.apps/nginx-deployment
+ ```
+ Alternatively, you can rollback to a specific revision by specifying it with `--to-revision`:
-Alternatively, you can rollback to a specific revision by specifying it with `--to-revision`:
+ ```shell
+ kubectl rollout undo deployment.v1.apps/nginx-deployment --to-revision=2
+ ```
-```shell
-kubectl rollout undo deployment.v1.apps/nginx-deployment --to-revision=2
-```
-```
-deployment.apps/nginx-deployment
-```
+ The output is similar to this:
+ ```
+ deployment.apps/nginx-deployment
+ ```
-For more details about rollout related commands, read [`kubectl rollout`](/docs/reference/generated/kubectl/kubectl-commands#rollout).
+ For more details about rollout related commands, read [`kubectl rollout`](/docs/reference/generated/kubectl/kubectl-commands#rollout).
-The Deployment is now rolled back to a previous stable revision. As you can see, a `DeploymentRollback` event
-for rolling back to revision 2 is generated from Deployment controller.
+ The Deployment is now rolled back to a previous stable revision. As you can see, a `DeploymentRollback` event
+ for rolling back to revision 2 is generated from Deployment controller.
-```shell
-kubectl get deployment nginx-deployment
-```
-```
-NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
-nginx-deployment 3 3 3 3 30m
-```
+2. Check if the rollback was successful and the Deployment is running as expected, run:
+ ```shell
+ kubectl get deployment nginx-deployment
+ ```
-```shell
-kubectl describe deployment nginx-deployment
-```
-```
-Name: nginx-deployment
-Namespace: default
-CreationTimestamp: Sun, 02 Sep 2018 18:17:55 -0500
-Labels: app=nginx
-Annotations: deployment.kubernetes.io/revision=4
- kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
-Selector: app=nginx
-Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
-StrategyType: RollingUpdate
-MinReadySeconds: 0
-RollingUpdateStrategy: 25% max unavailable, 25% max surge
-Pod Template:
- Labels: app=nginx
- Containers:
- nginx:
- Image: nginx:1.9.1
- Port: 80/TCP
- Host Port: 0/TCP
- Environment:
- Mounts:
- Volumes:
-Conditions:
- Type Status Reason
- ---- ------ ------
- Available True MinimumReplicasAvailable
- Progressing True NewReplicaSetAvailable
-OldReplicaSets:
-NewReplicaSet: nginx-deployment-c4747d96c (3/3 replicas created)
-Events:
- Type Reason Age From Message
- ---- ------ ---- ---- -------
- Normal ScalingReplicaSet 12m deployment-controller Scaled up replica set nginx-deployment-75675f5897 to 3
- Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-c4747d96c to 1
- Normal ScalingReplicaSet 11m deployment-controller Scaled down replica set nginx-deployment-75675f5897 to 2
- Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-c4747d96c to 2
- Normal ScalingReplicaSet 11m deployment-controller Scaled down replica set nginx-deployment-75675f5897 to 1
- Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-c4747d96c to 3
- Normal ScalingReplicaSet 11m deployment-controller Scaled down replica set nginx-deployment-75675f5897 to 0
- Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-595696685f to 1
- Normal DeploymentRollback 15s deployment-controller Rolled back deployment "nginx-deployment" to revision 2
- Normal ScalingReplicaSet 15s deployment-controller Scaled down replica set nginx-deployment-595696685f to 0
-```
+ The output is similar to this:
+ ```
+ NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
+ nginx-deployment 3 3 3 3 30m
+ ```
+3. Get the description of the Deployment:
+ ```shell
+ kubectl describe deployment nginx-deployment
+ ```
+ The output is similar to this:
+ ```
+ Name: nginx-deployment
+ Namespace: default
+ CreationTimestamp: Sun, 02 Sep 2018 18:17:55 -0500
+ Labels: app=nginx
+ Annotations: deployment.kubernetes.io/revision=4
+ kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1 --record=true
+ Selector: app=nginx
+ Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
+ StrategyType: RollingUpdate
+ MinReadySeconds: 0
+ RollingUpdateStrategy: 25% max unavailable, 25% max surge
+ Pod Template:
+ Labels: app=nginx
+ Containers:
+ nginx:
+ Image: nginx:1.9.1
+ Port: 80/TCP
+ Host Port: 0/TCP
+ Environment:
+ Mounts:
+ Volumes:
+ Conditions:
+ Type Status Reason
+ ---- ------ ------
+ Available True MinimumReplicasAvailable
+ Progressing True NewReplicaSetAvailable
+ OldReplicaSets:
+ NewReplicaSet: nginx-deployment-c4747d96c (3/3 replicas created)
+ Events:
+ Type Reason Age From Message
+ ---- ------ ---- ---- -------
+ Normal ScalingReplicaSet 12m deployment-controller Scaled up replica set nginx-deployment-75675f5897 to 3
+ Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-c4747d96c to 1
+ Normal ScalingReplicaSet 11m deployment-controller Scaled down replica set nginx-deployment-75675f5897 to 2
+ Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-c4747d96c to 2
+ Normal ScalingReplicaSet 11m deployment-controller Scaled down replica set nginx-deployment-75675f5897 to 1
+ Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-c4747d96c to 3
+ Normal ScalingReplicaSet 11m deployment-controller Scaled down replica set nginx-deployment-75675f5897 to 0
+ Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-595696685f to 1
+ Normal DeploymentRollback 15s deployment-controller Rolled back deployment "nginx-deployment" to revision 2
+ Normal ScalingReplicaSet 15s deployment-controller Scaled down replica set nginx-deployment-595696685f to 0
+ ```
## Scaling a Deployment
@@ -572,17 +588,19 @@ You can scale a Deployment by using the following command:
```shell
kubectl scale deployment.v1.apps/nginx-deployment --replicas=10
```
+The output is similar to this:
```
deployment.apps/nginx-deployment scaled
```
-Assuming [horizontal pod autoscaling](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/) is enabled
+Assuming [horizontal Pod autoscaling](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/) is enabled
in your cluster, you can setup an autoscaler for your Deployment and choose the minimum and maximum number of
Pods you want to run based on the CPU utilization of your existing Pods.
```shell
kubectl autoscale deployment.v1.apps/nginx-deployment --min=10 --max=15 --cpu-percent=80
```
+The output is similar to this:
```
deployment.apps/nginx-deployment scaled
```
@@ -591,62 +609,70 @@ deployment.apps/nginx-deployment scaled
RollingUpdate Deployments support running multiple versions of an application at the same time. When you
or an autoscaler scales a RollingUpdate Deployment that is in the middle of a rollout (either in progress
-or paused), then the Deployment controller will balance the additional replicas in the existing active
+or paused), the Deployment controller balances the additional replicas in the existing active
ReplicaSets (ReplicaSets with Pods) in order to mitigate risk. This is called *proportional scaling*.
For example, you are running a Deployment with 10 replicas, [maxSurge](#max-surge)=3, and [maxUnavailable](#max-unavailable)=2.
-```shell
-kubectl get deploy
-```
-```
-NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
-nginx-deployment 10 10 10 10 50s
-```
+* Ensure that the 10 replicas in your Deployment are running.
+ ```shell
+ kubectl get deploy
+ ```
+ The output is similar to this:
-You update to a new image which happens to be unresolvable from inside the cluster.
+ ```
+ NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
+ nginx-deployment 10 10 10 10 50s
+ ```
-```shell
-kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:sometag
-```
-```
-deployment.apps/nginx-deployment image updated
-```
+* You update to a new image which happens to be unresolvable from inside the cluster.
+ ```shell
+ kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:sometag
+ ```
-The image update starts a new rollout with ReplicaSet nginx-deployment-1989198191, but it's blocked due to the
-`maxUnavailable` requirement that you mentioned above.
+ The output is similar to this:
+ ```
+ deployment.apps/nginx-deployment image updated
+ ```
-```shell
-kubectl get rs
-```
-```
-NAME DESIRED CURRENT READY AGE
-nginx-deployment-1989198191 5 5 0 9s
-nginx-deployment-618515232 8 8 8 1m
-```
+* The image update starts a new rollout with ReplicaSet nginx-deployment-1989198191, but it's blocked due to the
+`maxUnavailable` requirement that you mentioned above. Check out the rollout status:
+ ```shell
+ kubectl get rs
+ ```
+ The output is similar to this:
+ ```
+ NAME DESIRED CURRENT READY AGE
+ nginx-deployment-1989198191 5 5 0 9s
+ nginx-deployment-618515232 8 8 8 1m
+ ```
-Then a new scaling request for the Deployment comes along. The autoscaler increments the Deployment replicas
+* Then a new scaling request for the Deployment comes along. The autoscaler increments the Deployment replicas
to 15. The Deployment controller needs to decide where to add these new 5 replicas. If you weren't using
proportional scaling, all 5 of them would be added in the new ReplicaSet. With proportional scaling, you
spread the additional replicas across all ReplicaSets. Bigger proportions go to the ReplicaSets with the
most replicas and lower proportions go to ReplicaSets with less replicas. Any leftovers are added to the
ReplicaSet with the most replicas. ReplicaSets with zero replicas are not scaled up.
-In our example above, 3 replicas will be added to the old ReplicaSet and 2 replicas will be added to the
+In our example above, 3 replicas are added to the old ReplicaSet and 2 replicas are added to the
new ReplicaSet. The rollout process should eventually move all replicas to the new ReplicaSet, assuming
-the new replicas become healthy.
+the new replicas become healthy. To confirm this, run:
```shell
kubectl get deploy
```
+
+The output is similar to this:
```
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 15 18 7 8 7m
```
-
+The rollout status confirms how the replicas were added to each ReplicaSet.
```shell
kubectl get rs
```
+
+The output is similar to this:
```
NAME DESIRED CURRENT READY AGE
nginx-deployment-1989198191 7 7 0 7m
@@ -655,116 +681,127 @@ nginx-deployment-618515232 11 11 11 7m
## Pausing and Resuming a Deployment
-You can pause a Deployment before triggering one or more updates and then resume it. This will allow you to
+You can pause a Deployment before triggering one or more updates and then resume it. This allows you to
apply multiple fixes in between pausing and resuming without triggering unnecessary rollouts.
-For example, with a Deployment that was just created:
+* For example, with a Deployment that was just created:
+ Get the Deployment details:
+ ```shell
+ kubectl get deploy
+ ```
+ The output is similar to this:
+ ```
+ NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
+ nginx 3 3 3 3 1m
+ ```
+ Get the rollout status:
+ ```shell
+ kubectl get rs
+ ```
+ The output is similar to this:
+ ```
+ NAME DESIRED CURRENT READY AGE
+ nginx-2142116321 3 3 3 1m
+ ```
-```shell
-kubectl get deploy
-```
-```
-NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
-nginx 3 3 3 3 1m
-```
-```shell
-kubectl get rs
-```
-```
-NAME DESIRED CURRENT READY AGE
-nginx-2142116321 3 3 3 1m
-```
+* Pause by running the following command:
+ ```shell
+ kubectl rollout pause deployment.v1.apps/nginx-deployment
+ ```
-Pause by running the following command:
+ The output is similar to this:
+ ```
+ deployment.apps/nginx-deployment paused
+ ```
-```shell
-kubectl rollout pause deployment.v1.apps/nginx-deployment
-```
-```
-deployment.apps/nginx-deployment paused
-```
+* Then update the image of the Deployment:
+ ```shell
+ kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1
+ ```
-Then update the image of the Deployment:
+ The output is similar to this:
+ ```
+ deployment.apps/nginx-deployment image updated
+ ```
-```shell
-kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1
-```
-```
-deployment.apps/nginx-deployment image updated
-```
+* Notice that no new rollout started:
+ ```shell
+ kubectl rollout history deployment.v1.apps/nginx-deployment
+ ```
-Notice that no new rollout started:
+ The output is similar to this:
+ ```
+ deployments "nginx"
+ REVISION CHANGE-CAUSE
+ 1
+ ```
+* Get the rollout status to ensure that the Deployment is updates successfully:
+ ```shell
+ kubectl get rs
+ ```
-```shell
-kubectl rollout history deployment.v1.apps/nginx-deployment
-```
-```
-deployments "nginx"
-REVISION CHANGE-CAUSE
-1
-```
+ The output is similar to this:
+ ```
+ NAME DESIRED CURRENT READY AGE
+ nginx-2142116321 3 3 3 2m
+ ```
-```shell
-kubectl get rs
-```
-```
-NAME DESIRED CURRENT READY AGE
-nginx-2142116321 3 3 3 2m
-```
+* You can make as many updates as you wish, for example, update the resources that will be used:
+ ```shell
+ kubectl set resources deployment.v1.apps/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi
+ ```
-You can make as many updates as you wish, for example, update the resources that will be used:
+ The output is similar to this:
+ ```
+ deployment.apps/nginx-deployment resource requirements updated
+ ```
-```shell
-kubectl set resources deployment.v1.apps/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi
-```
-```
-deployment.apps/nginx-deployment resource requirements updated
-```
+ The initial state of the Deployment prior to pausing it will continue its function, but new updates to
+ the Deployment will not have any effect as long as the Deployment is paused.
-The initial state of the Deployment prior to pausing it will continue its function, but new updates to
-the Deployment will not have any effect as long as the Deployment is paused.
+* Eventually, resume the Deployment and observe a new ReplicaSet coming up with all the new updates:
+ ```shell
+ kubectl rollout resume deployment.v1.apps/nginx-deployment
+ ```
-Eventually, resume the Deployment and observe a new ReplicaSet coming up with all the new updates:
+ The output is similar to this:
+ ```
+ deployment.apps/nginx-deployment resumed
+ ```
+* Watch the status of the rollout until it's done.
+ ```shell
+ kubectl get rs -w
+ ```
-```shell
-kubectl rollout resume deployment.v1.apps/nginx-deployment
-```
-
-```
-deployment.apps/nginx-deployment resumed
-```
-
-```shell
-kubectl get rs -w
-```
-
-```
-NAME DESIRED CURRENT READY AGE
-nginx-2142116321 2 2 2 2m
-nginx-3926361531 2 2 0 6s
-nginx-3926361531 2 2 1 18s
-nginx-2142116321 1 2 2 2m
-nginx-2142116321 1 2 2 2m
-nginx-3926361531 3 2 1 18s
-nginx-3926361531 3 2 1 18s
-nginx-2142116321 1 1 1 2m
-nginx-3926361531 3 3 1 18s
-nginx-3926361531 3 3 2 19s
-nginx-2142116321 0 1 1 2m
-nginx-2142116321 0 1 1 2m
-nginx-2142116321 0 0 0 2m
-nginx-3926361531 3 3 3 20s
-
-```
-```shell
-kubectl get rs
-```
-```
-NAME DESIRED CURRENT READY AGE
-nginx-2142116321 0 0 0 2m
-nginx-3926361531 3 3 3 28s
-```
+ The output is similar to this:
+ ```
+ NAME DESIRED CURRENT READY AGE
+ nginx-2142116321 2 2 2 2m
+ nginx-3926361531 2 2 0 6s
+ nginx-3926361531 2 2 1 18s
+ nginx-2142116321 1 2 2 2m
+ nginx-2142116321 1 2 2 2m
+ nginx-3926361531 3 2 1 18s
+ nginx-3926361531 3 2 1 18s
+ nginx-2142116321 1 1 1 2m
+ nginx-3926361531 3 3 1 18s
+ nginx-3926361531 3 3 2 19s
+ nginx-2142116321 0 1 1 2m
+ nginx-2142116321 0 1 1 2m
+ nginx-2142116321 0 0 0 2m
+ nginx-3926361531 3 3 3 20s
+ ```
+* Get the status of the latest rollout:
+ ```shell
+ kubectl get rs
+ ```
+ The output is similar to this:
+ ```
+ NAME DESIRED CURRENT READY AGE
+ nginx-2142116321 0 0 0 2m
+ nginx-3926361531 3 3 3 28s
+ ```
{{< note >}}
You cannot rollback a paused Deployment until you resume it.
{{< /note >}}
@@ -800,6 +837,7 @@ successfully, `kubectl rollout status` returns a zero exit code.
```shell
kubectl rollout status deployment.v1.apps/nginx-deployment
```
+The output is similar to this:
```
Waiting for rollout to finish: 2 of 3 updated replicas are available...
deployment.apps/nginx-deployment successfully rolled out
@@ -830,6 +868,7 @@ lack of progress for a Deployment after 10 minutes:
```shell
kubectl patch deployment.v1.apps/nginx-deployment -p '{"spec":{"progressDeadlineSeconds":600}}'
```
+The output is similar to this:
```
deployment.apps/nginx-deployment patched
```
@@ -843,7 +882,7 @@ attributes to the Deployment's `.status.conditions`:
See the [Kubernetes API conventions](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties) for more information on status conditions.
{{< note >}}
-Kubernetes will take no action on a stalled Deployment other than to report a status condition with
+Kubernetes takes no action on a stalled Deployment other than to report a status condition with
`Reason=ProgressDeadlineExceeded`. Higher level orchestrators can take advantage of it and act accordingly, for
example, rollback the Deployment to its previous version.
{{< /note >}}
@@ -861,6 +900,7 @@ insufficient quota. If you describe the Deployment you will notice the following
```shell
kubectl describe deployment nginx-deployment
```
+The output is similar to this:
```
<...>
Conditions:
@@ -872,7 +912,7 @@ Conditions:
<...>
```
-If you run `kubectl get deployment nginx-deployment -o yaml`, the Deployment status might look like this:
+If you run `kubectl get deployment nginx-deployment -o yaml`, the Deployment status is similar to this:
```
status:
@@ -939,6 +979,7 @@ returns a non-zero exit code if the Deployment has exceeded the progression dead
```shell
kubectl rollout status deployment.v1.apps/nginx-deployment
```
+The output is similar to this:
```
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
error: deployment "nginx" exceeded its progress deadline
@@ -949,7 +990,7 @@ $ echo $?
### Operating on a failed deployment
All actions that apply to a complete Deployment also apply to a failed Deployment. You can scale it up/down, roll back
-to a previous revision, or even pause it if you need to apply multiple tweaks in the Deployment pod template.
+to a previous revision, or even pause it if you need to apply multiple tweaks in the Deployment Pod template.
## Clean up Policy
@@ -962,9 +1003,7 @@ Explicitly setting this field to 0, will result in cleaning up all the history o
thus that Deployment will not be able to roll back.
{{< /note >}}
-## Use Cases
-
-### Canary Deployment
+## Canary Deployment
If you want to roll out releases to a subset of users or servers using the Deployment, you
can create multiple Deployments, one for each release, following the canary pattern described in
@@ -982,10 +1021,10 @@ A Deployment also needs a [`.spec` section](https://git.k8s.io/community/contrib
The `.spec.template` and `.spec.selector` are the only required field of the `.spec`.
-The `.spec.template` is a [pod template](/docs/concepts/workloads/pods/pod-overview/#pod-templates). It has exactly the same schema as a [Pod](/docs/concepts/workloads/pods/pod/), except it is nested and does not have an
+The `.spec.template` is a [Pod template](/docs/concepts/workloads/pods/pod-overview/#pod-templates). It has exactly the same schema as a [Pod](/docs/concepts/workloads/pods/pod/), except it is nested and does not have an
`apiVersion` or `kind`.
-In addition to required fields for a Pod, a pod template in a Deployment must specify appropriate
+In addition to required fields for a Pod, a Pod template in a Deployment must specify appropriate
labels and an appropriate restart policy. For labels, make sure not to overlap with other controllers. See [selector](#selector)).
Only a [`.spec.template.spec.restartPolicy`](/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy) equal to `Always` is
@@ -998,7 +1037,7 @@ allowed, which is the default if not specified.
### Selector
`.spec.selector` is an required field that specifies a [label selector](/docs/concepts/overview/working-with-objects/labels/)
-for the Pods targeted by this deployment.
+for the Pods targeted by this Deployment.
`.spec.selector` must match `.spec.template.metadata.labels`, or it will be rejected by the API.
@@ -1009,9 +1048,9 @@ from `.spec.template` or if the total number of such Pods exceeds `.spec.replica
Pods with `.spec.template` if the number of Pods is less than the desired number.
{{< note >}}
-You should not create other pods whose labels match this selector, either directly, by creating
+You should not create other Pods whose labels match this selector, either directly, by creating
another Deployment, or by creating another controller such as a ReplicaSet or a ReplicationController. If you
-do so, the first Deployment thinks that it created these other pods. Kubernetes does not stop you from doing this.
+do so, the first Deployment thinks that it created these other Pods. Kubernetes does not stop you from doing this.
{{< /note >}}
If you have multiple controllers that have overlapping selectors, the controllers will fight with each
@@ -1062,8 +1101,8 @@ total number of Pods running at any time during the update is at most 130% of de
`.spec.progressDeadlineSeconds` is an optional field that specifies the number of seconds you want
to wait for your Deployment to progress before the system reports back that the Deployment has
[failed progressing](#failed-deployment) - surfaced as a condition with `Type=Progressing`, `Status=False`.
-and `Reason=ProgressDeadlineExceeded` in the status of the resource. The deployment controller will keep
-retrying the Deployment. In the future, once automatic rollback will be implemented, the deployment
+and `Reason=ProgressDeadlineExceeded` in the status of the resource. The Deployment controller will keep
+retrying the Deployment. In the future, once automatic rollback will be implemented, the Deployment
controller will roll back a Deployment as soon as it observes such a condition.
If specified, this field needs to be greater than `.spec.minReadySeconds`.
diff --git a/content/en/docs/concepts/workloads/controllers/garbage-collection.md b/content/en/docs/concepts/workloads/controllers/garbage-collection.md
index 5c23a92910..45303b66e8 100644
--- a/content/en/docs/concepts/workloads/controllers/garbage-collection.md
+++ b/content/en/docs/concepts/workloads/controllers/garbage-collection.md
@@ -93,7 +93,7 @@ collector deletes the object's dependents. Once the garbage collector has delete
the owner object.
Note that in the "foregroundDeletion", only dependents with
-`ownerReference.blockOwnerDeletion` block the deletion of the owner object.
+`ownerReference.blockOwnerDeletion=true` block the deletion of the owner object.
Kubernetes version 1.7 added an [admission controller](/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement) that controls user access to set
`blockOwnerDeletion` to true based on delete permissions on the owner object, so that
unauthorized dependents cannot delay deletion of an owner object.
diff --git a/content/en/docs/concepts/workloads/controllers/replicationcontroller.md b/content/en/docs/concepts/workloads/controllers/replicationcontroller.md
index 11940aa901..61f9cfc82f 100644
--- a/content/en/docs/concepts/workloads/controllers/replicationcontroller.md
+++ b/content/en/docs/concepts/workloads/controllers/replicationcontroller.md
@@ -109,7 +109,7 @@ nginx-3ntk0 nginx-4ok8v nginx-qrm3m
```
Here, the selector is the same as the selector for the ReplicationController (seen in the
-`kubectl describe` output, and in a different form in `replication.yaml`. The `--output=jsonpath` option
+`kubectl describe` output), and in a different form in `replication.yaml`. The `--output=jsonpath` option
specifies an expression that just gets the name from each pod in the returned list.
diff --git a/content/en/docs/concepts/workloads/controllers/ttlafterfinished.md b/content/en/docs/concepts/workloads/controllers/ttlafterfinished.md
index 3ee76015f6..622ab79db5 100644
--- a/content/en/docs/concepts/workloads/controllers/ttlafterfinished.md
+++ b/content/en/docs/concepts/workloads/controllers/ttlafterfinished.md
@@ -84,6 +84,6 @@ very small. Please be aware of this risk when setting a non-zero TTL.
[Clean up Jobs automatically](/docs/concepts/workloads/controllers/jobs-run-to-completion/#clean-up-finished-jobs-automatically)
-[Design doc](https://github.com/kubernetes/community/blob/master/keps/sig-apps/0026-ttl-after-finish.md)
+[Design doc](https://github.com/kubernetes/enhancements/blob/master/keps/sig-apps/0026-ttl-after-finish.md)
{{% /capture %}}
diff --git a/content/en/docs/concepts/workloads/pods/init-containers.md b/content/en/docs/concepts/workloads/pods/init-containers.md
index ecbf476be9..309a8bfad5 100644
--- a/content/en/docs/concepts/workloads/pods/init-containers.md
+++ b/content/en/docs/concepts/workloads/pods/init-containers.md
@@ -7,128 +7,103 @@ weight: 40
---
{{% capture overview %}}
-This page provides an overview of Init Containers, which are specialized
-Containers that run before app Containers and can contain utilities or setup
-scripts not present in an app image.
+This page provides an overview of init containers: specialized containers that run
+before app containers in a {{< glossary_tooltip text="Pod" term_id="pod" >}}.
+Init containers can contain utilities or setup scripts not present in an app image.
+
+You can specify init containers in the Pod specification alongside the `containers`
+array (which describes app containers).
{{% /capture %}}
-
-This feature has exited beta in 1.6. Init Containers can be specified in the PodSpec
-alongside the app `containers` array. The beta annotation value will still be respected
-and overrides the PodSpec field value, however, they are deprecated in 1.6 and 1.7.
-In 1.8, the annotations are no longer supported and must be converted to the PodSpec field.
-
{{% capture body %}}
-## Understanding Init Containers
-A [Pod](/docs/concepts/workloads/pods/pod-overview/) can have multiple Containers running
-apps within it, but it can also have one or more Init Containers, which are run
-before the app Containers are started.
+## Understanding init containers
-Init Containers are exactly like regular Containers, except:
+A {{< glossary_tooltip text="Pod" term_id="pod" >}} can have multiple containers
+running apps within it, but it can also have one or more init containers, which are run
+before the app containers are started.
-* They always run to completion.
-* Each one must complete successfully before the next one is started.
+Init containers are exactly like regular containers, except:
-If an Init Container fails for a Pod, Kubernetes restarts the Pod repeatedly until the Init
-Container succeeds. However, if the Pod has a `restartPolicy` of Never, it is not restarted.
+* Init containers always run to completion.
+* Each init container must complete successfully before the next one starts.
-To specify a Container as an Init Container, add the `initContainers` field on the PodSpec as
-a JSON array of objects of type
-[Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core)
+If a Pod's init container fails, Kubernetes repeatedly restarts the Pod until the init container
+succeeds. However, if the Pod has a `restartPolicy` of Never, Kubernetes does not restart the Pod.
+
+To specify an init container for a Pod, add the `initContainers` field into
+the Pod specification, as an array of objects of type
+[Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core),
alongside the app `containers` array.
The status of the init containers is returned in `.status.initContainerStatuses`
field as an array of the container statuses (similar to the `.status.containerStatuses`
field).
-### Differences from regular Containers
+### Differences from regular containers
-Init Containers support all the fields and features of app Containers,
+Init containers support all the fields and features of app containers,
including resource limits, volumes, and security settings. However, the
-resource requests and limits for an Init Container are handled slightly
-differently, which are documented in [Resources](#resources) below. Also, Init Containers do not
-support readiness probes because they must run to completion before the Pod can
-be ready.
+resource requests and limits for an init container are handled differently,
+as documented in [Resources](#resources).
-If multiple Init Containers are specified for a Pod, those Containers are run
-one at a time in sequential order. Each must succeed before the next can run.
-When all of the Init Containers have run to completion, Kubernetes initializes
-the Pod and runs the application Containers as usual.
+Also, init containers do not support readiness probes because they must run to
+completion before the Pod can be ready.
-## What can Init Containers be used for?
+If you specify multiple init containers for a Pod, Kubelet runs each init
+container sequentially. Each init container must succeed before the next can run.
+When all of the init containers have run to completion, Kubelet initializes
+the application containers for the Pod and runs them as usual.
-Because Init Containers have separate images from app Containers, they
+## Using init containers
+
+Because init containers have separate images from app containers, they
have some advantages for start-up related code:
-* They can contain and run utilities that are not desirable to include in the
- app Container image for security reasons.
-* They can contain utilities or custom code for setup that is not present in an app
+* Init containers can contain utilities or custom code for setup that are not present in an app
image. For example, there is no need to make an image `FROM` another image just to use a tool like
`sed`, `awk`, `python`, or `dig` during setup.
+* Init containers can securely run utilities that would make an app container image less secure.
* The application image builder and deployer roles can work independently without
the need to jointly build a single app image.
-* They use Linux namespaces so that they have different filesystem views from app Containers.
- Consequently, they can be given access to Secrets that app Containers are not able to
- access.
-* They run to completion before any app Containers start, whereas app
- Containers run in parallel, so Init Containers provide an easy way to block or
- delay the startup of app Containers until some set of preconditions are met.
+* Init containers can run with a different view of the filesystem than app containers in the
+ same Pod. Consequently, they can be given access to
+ {{< glossary_tooltip text="Secrets" term_id="secret" >}} that app containers cannot access.
+* Because init containers run to completion before any app containers start, init containers offer
+ a mechanism to block or delay app container startup until a set of preconditions are met. Once
+ preconditions are met, all of the app containers in a Pod can start in parallel.
+
### Examples
-Here are some ideas for how to use Init Containers:
+Here are some ideas for how to use init containers:
-* Wait for a service to be created with a shell command like:
-
- for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
+* Wait for a {{< glossary_tooltip text="Service" term_id="service">}} to
+ be created, using a shell one-line command like:
+ ```shell
+ for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
+ ```
* Register this Pod with a remote server from the downward API with a command like:
+ ```shell
+ curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d 'instance=$()&ip=$()'
+ ```
- `curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d 'instance=$()&ip=$()'`
+* Wait for some time before starting the app container with a command like
+ ```shell
+ sleep 60
+ ```
+
+* Clone a Git repository into a {{< glossary_tooltip text="Volume" term_id="volume" >}}
-* Wait for some time before starting the app Container with a command like `sleep 60`.
-* Clone a git repository into a volume.
* Place values into a configuration file and run a template tool to dynamically
- generate a configuration file for the main app Container. For example,
- place the POD_IP value in a configuration and generate the main app
+ generate a configuration file for the main app container. For example,
+ place the `POD_IP` value in a configuration and generate the main app
configuration file using Jinja.
-More detailed usage examples can be found in the [StatefulSets documentation](/docs/concepts/workloads/controllers/statefulset/)
-and the [Production Pods guide](/docs/tasks/configure-pod-container/configure-pod-initialization/).
+#### Init containers in use
-### Init Containers in use
-
-The following yaml file for Kubernetes 1.5 outlines a simple Pod which has two Init Containers.
-The first waits for `myservice` and the second waits for `mydb`. Once both
-containers complete, the Pod will begin.
-
-```yaml
-apiVersion: v1
-kind: Pod
-metadata:
- name: myapp-pod
- labels:
- app: myapp
- annotations:
- pod.beta.kubernetes.io/init-containers: '[
- {
- "name": "init-myservice",
- "image": "busybox:1.28",
- "command": ["sh", "-c", "until nslookup myservice; do echo waiting for myservice; sleep 2; done;"]
- },
- {
- "name": "init-mydb",
- "image": "busybox:1.28",
- "command": ["sh", "-c", "until nslookup mydb; do echo waiting for mydb; sleep 2; done;"]
- }
- ]'
-spec:
- containers:
- - name: myapp-container
- image: busybox:1.28
- command: ['sh', '-c', 'echo The app is running! && sleep 3600']
-```
-
-There is a new syntax in Kubernetes 1.6, although the old annotation syntax still works for 1.6 and 1.7. The new syntax must be used for 1.8 or greater. We have moved the declaration of Init Containers to `spec`:
+This example defines a simple Pod that has two init containers.
+The first waits for `myservice`, and the second waits for `mydb`. Once both
+init containers complete, the Pod runs the app container from its `spec` section.
```yaml
apiVersion: v1
@@ -151,9 +126,8 @@ spec:
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
```
-1.5 syntax still works on 1.6, but we recommend using 1.6 syntax. In Kubernetes 1.6, Init Containers were made a field in the API. The beta annotation is still respected in 1.6 and 1.7, but is not supported in 1.8 or greater.
-Yaml file below outlines the `mydb` and `myservice` services:
+The following YAML file outlines the `mydb` and `myservice` services:
```yaml
apiVersion: v1
@@ -177,7 +151,7 @@ spec:
targetPort: 9377
```
-This Pod can be started and debugged with the following commands:
+You can start this Pod by running:
```shell
kubectl apply -f myapp.yaml
@@ -186,6 +160,7 @@ kubectl apply -f myapp.yaml
pod/myapp-pod created
```
+And check on its status with:
```shell
kubectl get -f myapp.yaml
```
@@ -194,6 +169,7 @@ NAME READY STATUS RESTARTS AGE
myapp-pod 0/1 Init:0/2 0 6m
```
+or for more details:
```shell
kubectl describe -f myapp.yaml
```
@@ -231,13 +207,42 @@ Events:
13s 13s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Created Created container with docker id 5ced34a04634; Security:[seccomp=unconfined]
13s 13s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Started Started container with docker id 5ced34a04634
```
+
+To see logs for the init containers in this Pod, run:
```shell
kubectl logs myapp-pod -c init-myservice # Inspect the first init container
kubectl logs myapp-pod -c init-mydb # Inspect the second init container
```
-Once we start the `mydb` and `myservice` services, we can see the Init Containers
-complete and the `myapp-pod` is created:
+At this point, those init containers will be waiting to discover Services named
+`mydb` and `myservice`.
+
+Here's a configuration you can use to make those Services appear:
+
+```yaml
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: myservice
+spec:
+ ports:
+ - protocol: TCP
+ port: 80
+ targetPort: 9376
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: mydb
+spec:
+ ports:
+ - protocol: TCP
+ port: 80
+ targetPort: 9377
+```
+
+To create the `mydb` and `myservice` services:
```shell
kubectl apply -f services.yaml
@@ -247,104 +252,97 @@ service/myservice created
service/mydb created
```
+You'll then see that those init containers complete, and that the `myapp-pod`
+Pod moves into the Running state:
+
```shell
kubectl get -f myapp.yaml
+```
+```
NAME READY STATUS RESTARTS AGE
myapp-pod 1/1 Running 0 9m
```
-This example is very simple but should provide some inspiration for you to
-create your own Init Containers.
+This simple example should provide some inspiration for you to create your own
+init containers. [What's next](#what-s-next) contains a link to a more detailed example.
## Detailed behavior
-During the startup of a Pod, the Init Containers are started in order, after the
-network and volumes are initialized. Each Container must exit successfully before
-the next is started. If a Container fails to start due to the runtime or
+During the startup of a Pod, each init container starts in order, after the
+network and volumes are initialized. Each container must exit successfully before
+the next container starts. If a container fails to start due to the runtime or
exits with failure, it is retried according to the Pod `restartPolicy`. However,
-if the Pod `restartPolicy` is set to Always, the Init Containers use
-`RestartPolicy` OnFailure.
+if the Pod `restartPolicy` is set to Always, the init containers use
+`restartPolicy` OnFailure.
-A Pod cannot be `Ready` until all Init Containers have succeeded. The ports on an
-Init Container are not aggregated under a service. A Pod that is initializing
+A Pod cannot be `Ready` until all init containers have succeeded. The ports on an
+init container are not aggregated under a Service. A Pod that is initializing
is in the `Pending` state but should have a condition `Initializing` set to true.
-If the Pod is [restarted](#pod-restart-reasons), all Init Containers must
-execute again.
+If the Pod [restarts](#pod-restart-reasons), or is restarted, all init containers
+must execute again.
-Changes to the Init Container spec are limited to the container image field.
-Altering an Init Container image field is equivalent to restarting the Pod.
+Changes to the init container spec are limited to the container image field.
+Altering an init container image field is equivalent to restarting the Pod.
-Because Init Containers can be restarted, retried, or re-executed, Init Container
+Because init containers can be restarted, retried, or re-executed, init container
code should be idempotent. In particular, code that writes to files on `EmptyDirs`
should be prepared for the possibility that an output file already exists.
-Init Containers have all of the fields of an app Container. However, Kubernetes
-prohibits `readinessProbe` from being used because Init Containers cannot
+Init containers have all of the fields of an app container. However, Kubernetes
+prohibits `readinessProbe` from being used because init containers cannot
define readiness distinct from completion. This is enforced during validation.
-Use `activeDeadlineSeconds` on the Pod and `livenessProbe` on the Container to
-prevent Init Containers from failing forever. The active deadline includes Init
-Containers.
+Use `activeDeadlineSeconds` on the Pod and `livenessProbe` on the container to
+prevent init containers from failing forever. The active deadline includes init
+containers.
-The name of each app and Init Container in a Pod must be unique; a
-validation error is thrown for any Container sharing a name with another.
+The name of each app and init container in a Pod must be unique; a
+validation error is thrown for any container sharing a name with another.
### Resources
-Given the ordering and execution for Init Containers, the following rules
+Given the ordering and execution for init containers, the following rules
for resource usage apply:
-* The highest of any particular resource request or limit defined on all Init
- Containers is the *effective init request/limit*
+* The highest of any particular resource request or limit defined on all init
+ containers is the *effective init request/limit*
* The Pod's *effective request/limit* for a resource is the higher of:
- * the sum of all app Containers request/limit for a resource
+ * the sum of all app containers request/limit for a resource
* the effective init request/limit for a resource
* Scheduling is done based on effective requests/limits, which means
- Init Containers can reserve resources for initialization that are not used
+ init containers can reserve resources for initialization that are not used
during the life of the Pod.
-* QoS tier of the Pod's *effective QoS tier* is the QoS tier for Init Containers
- and app containers alike.
+* The QoS (quality of service) tier of the Pod's *effective QoS tier* is the
+ QoS tier for init containers and app containers alike.
Quota and limits are applied based on the effective Pod request and
limit.
-Pod level cgroups are based on the effective Pod request and limit, the
-same as the scheduler.
+Pod level control groups (cgroups) are based on the effective Pod request and
+limit, the same as the scheduler.
### Pod restart reasons
-A Pod can restart, causing re-execution of Init Containers, for the following
+A Pod can restart, causing re-execution of init containers, for the following
reasons:
-* A user updates the PodSpec causing the Init Container image to change. Any
- changes to the Init Container image restarts the Pod. App Container image
- changes only restart the app Container.
+* A user updates the Pod specification, causing the init container image to change.
+ Any changes to the init container image restarts the Pod. App container image
+ changes only restart the app container.
* The Pod infrastructure container is restarted. This is uncommon and would
have to be done by someone with root access to nodes.
* All containers in a Pod are terminated while `restartPolicy` is set to Always,
- forcing a restart, and the Init Container completion record has been lost due
+ forcing a restart, and the init container completion record has been lost due
to garbage collection.
-## Support and compatibility
-
-A cluster with Apiserver version 1.6.0 or greater supports Init Containers
-using the `.spec.initContainers` field. Previous versions support Init Containers
-using the alpha or beta annotations. The `.spec.initContainers` field is also mirrored
-into alpha and beta annotations so that Kubelets version 1.3.0 or greater can execute
-Init Containers, and so that a version 1.6 apiserver can safely be rolled back to version
-1.5.x without losing Init Container functionality for existing created pods.
-
-In Apiserver and Kubelet versions 1.8.0 or greater, support for the alpha and beta annotations
-is removed, requiring a conversion from the deprecated annotations to the
-`.spec.initContainers` field.
-
{{% /capture %}}
{{% capture whatsnext %}}
-* [Creating a Pod that has an Init Container](/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod-that-has-an-init-container)
+* Read about [creating a Pod that has an init container](/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod-that-has-an-init-container)
+* Learn how to [debug init containers](/docs/tasks/debug-application-cluster/debug-init-containers/)
{{% /capture %}}
diff --git a/content/en/docs/concepts/workloads/pods/pod-overview.md b/content/en/docs/concepts/workloads/pods/pod-overview.md
index 81a2b397b5..b14a2aa443 100644
--- a/content/en/docs/concepts/workloads/pods/pod-overview.md
+++ b/content/en/docs/concepts/workloads/pods/pod-overview.md
@@ -21,7 +21,7 @@ A *Pod* is the basic execution unit of a Kubernetes application--the smallest an
A Pod encapsulates an application's container (or, in some cases, multiple containers), storage resources, a unique network IP, and options that govern how the container(s) should run. A Pod represents a unit of deployment: *a single instance of an application in Kubernetes*, which might consist of either a single {{< glossary_tooltip text="container" term_id="container" >}} or a small number of containers that are tightly coupled and that share resources.
-[Docker](https://www.docker.com) is the most common container runtime used in a Kubernetes Pod, but Pods support other container runtimes as well.
+[Docker](https://www.docker.com) is the most common container runtime used in a Kubernetes Pod, but Pods support other [container runtimes](https://kubernetes.io/docs/setup/production-environment/container-runtimes/) as well.
Pods in a Kubernetes cluster can be used in two main ways:
diff --git a/content/en/docs/concepts/workloads/pods/pod.md b/content/en/docs/concepts/workloads/pods/pod.md
index e53b28a9e7..4fed2c5e5a 100644
--- a/content/en/docs/concepts/workloads/pods/pod.md
+++ b/content/en/docs/concepts/workloads/pods/pod.md
@@ -186,7 +186,7 @@ You must specify an additional flag `--force` along with `--grace-period=0` in o
### Force deletion of pods
-Force deletion of a Pod is defined as deletion of a Pod from the cluster state and etcd immediately. When a force deletion is performed, the apiserver does not wait for confirmation from the kubelet that the Pod has been terminated on the node it was running on. It removes the Pod in the API immediately so a new Pod can be created with the same name. On the node, Pods that are set to terminate immediately will still be given a small grace period before being force killed.
+Force deletion of a Pod is defined as deletion of a Pod from the cluster state and etcd immediately. When a force deletion is performed, the API server does not wait for confirmation from the kubelet that the Pod has been terminated on the node it was running on. It removes the Pod in the API immediately so a new Pod can be created with the same name. On the node, Pods that are set to terminate immediately will still be given a small grace period before being force killed.
Force deletions can be potentially dangerous for some Pods and should be performed with caution. In case of StatefulSet Pods, please refer to the task documentation for [deleting Pods from a StatefulSet](/docs/tasks/run-application/force-delete-stateful-set-pod/).
diff --git a/content/en/docs/concepts/workloads/pods/podpreset.md b/content/en/docs/concepts/workloads/pods/podpreset.md
index 09fa309f28..876ba995c9 100644
--- a/content/en/docs/concepts/workloads/pods/podpreset.md
+++ b/content/en/docs/concepts/workloads/pods/podpreset.md
@@ -74,7 +74,11 @@ In order to use Pod Presets in your cluster you must ensure the following:
1. You have enabled the admission controller `PodPreset`. One way to doing this
is to include `PodPreset` in the `--enable-admission-plugins` option value specified
for the API server. In minikube add this flag
- `--extra-config=apiserver.enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset`
+
+ ```shell
+ --extra-config=apiserver.enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset
+ ```
+
while starting the cluster.
1. You have defined your Pod Presets by creating `PodPreset` objects in the
namespace you will use.
diff --git a/content/en/docs/contribute/advanced.md b/content/en/docs/contribute/advanced.md
index f77dea8dee..799dff3082 100644
--- a/content/en/docs/contribute/advanced.md
+++ b/content/en/docs/contribute/advanced.md
@@ -29,8 +29,6 @@ The PR wrangler’s duties include:
- Ensure that the CLA is signed by each contributor.
- Help new contributors sign the [CLA](https://github.com/kubernetes/community/blob/master/CLA.md).
- Use [this](https://github.com/zparnold/k8s-docs-pr-botherer) script to automatically remind contributors that haven’t signed the CLA to sign the CLA.
- - Close any PR where the CLA hasn’t been signed for two weeks.
- PR authors can reopen the PR after signing the CLA, so this is a low-risk way to make sure nothing gets merged without a signed CLA.
- Provide feedback on proposed changes and help facilitate technical reviews from members of other SIGs.
- Provide inline suggestions on the PR for the proposed content changes.
- If you need to verify content, comment on the PR and request more details.
@@ -59,6 +57,25 @@ reviewed is usually small. These queries specifically exclude localization PRs,
Determine whether any additional changes or updates need to be made for the PR to be merged. If you think the PR is ready to be merged, comment `/approve`.
- [Not against master](https://github.com/kubernetes/website/pulls?utf8=%E2%9C%93&q=is%3Aopen+is%3Apr+-label%3Ado-not-merge+label%3Alanguage%2Fen+-base%3Amaster): If it's against a `dev-` branch, it's for an upcoming release. Make sure the [release meister](https://github.com/kubernetes/sig-release/tree/master/release-team) knows about it by adding a comment with `/assign @`. If it's against an old branch, help the PR author figure out whether it's targeted against the best branch.
+### When to close Pull Requests
+
+Reviews and approvals are one tool to keep our PR queue short and current. Another tool is closure.
+
+- Close any PR where the CLA hasn’t been signed for two weeks.
+PR authors can reopen the PR after signing the CLA, so this is a low-risk way to make sure nothing gets merged without a signed CLA.
+
+- Close any PR where the author has not responded to comments or feedback in 2 or more weeks.
+
+Don't be afraid to close pull requests. Contributors can easily reopen and resume works in progress. Oftentimes a closure notice is what spurs an author to resume and finish their contribution.
+
+To close a pull request, leave a `/close` comment on the PR.
+
+{{< note >}}
+
+An automated service, [`fejta-bot`](https://github.com/fejta-bot) automatically marks issues as stale after 90 days of inactivity, then closes them after an additional 30 days of inactivity when they become rotten. PR wranglers should close issues after 14-30 days of inactivity.
+
+{{< /note >}}
+
## Propose improvements
SIG Docs
@@ -176,7 +193,7 @@ Responsibilities include:
- Learn and set best practices for the SIG by updating contribution guidelines
- Schedule and run SIG meetings: weekly status updates, quarterly retro/planning sessions, and others as needed
- Schedule and run doc sprints at KubeCon events and other conferences
-- - Recruit for and advocate on behalf of SIG Docs with the CNCF and its platinum partners, including Google, Oracle, Azure, IBM, and Huawei
+- Recruit for and advocate on behalf of SIG Docs with the {{< glossary_tooltip text="CNCF" term_id="cncf" >}} and its platinum partners, including Google, Oracle, Azure, IBM, and Huawei
- Keep the SIG running smoothly
### Running effective meetings
@@ -190,7 +207,7 @@ To schedule and run effective meetings, these guidelines show what to do, how to
**Set a clear agenda**:
- Set a clear agenda of topics
-- Publish the agenda in advance
+- Publish the agenda in advance
For weekly meetings, copypaste the previous week's notes into the "Past meetings" section of the notes
diff --git a/content/en/docs/contribute/generate-ref-docs/kubectl.md b/content/en/docs/contribute/generate-ref-docs/kubectl.md
index 04bbb2dc21..2194e99308 100644
--- a/content/en/docs/contribute/generate-ref-docs/kubectl.md
+++ b/content/en/docs/contribute/generate-ref-docs/kubectl.md
@@ -48,64 +48,80 @@ information, see
{{% capture steps %}}
-## Getting three repositories
+## Setting up the local repositories
-If you don't already have the kubernetes/kubernetes repository, get it now:
+Create a local workspace and set your `GOPATH`.
```shell
-mkdir $GOPATH/src
-cd $GOPATH/src
-go get github.com/kubernetes/kubernetes
+mkdir -p $HOME/
+
+export GOPATH=$HOME/
```
-Determine the base directory of your clone of the
-[kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) repository.
-For example, if you followed the preceding step to get the repository, your
-base directory is `$GOPATH/src/github.com/kubernetes/kubernetes.`
-The remaining steps refer to your base directory as ``.
+Get a local clone of the following repositories:
+
+```shell
+go get -u github.com/spf13/pflag
+go get -u github.com/spf13/cobra
+go get -u gopkg.in/yaml.v2
+go get -u kubernetes-incubator/reference-docs
+```
If you don't already have the kubernetes/website repository, get it now:
```shell
-mkdir $GOPATH/src
-cd $GOPATH/src
-go get github.com/kubernetes/website
+git clone https://github.com//website $GOPATH/src/github.com//website
```
-Determine the base directory of your clone of the
-[kubernetes/website](https://github.com/kubernetes/website) repository.
-For example, if you followed the preceding step to get the repository, your
-base directory is `$GOPATH/src/github.com/kubernetes/website.`
-The remaining steps refer to your base directory as ``.
-
-If you don't already have the kubernetes-incubator/reference-docs repository, get it now:
+Get a clone of the kubernetes/kubernetes repository as k8s.io/kubernetes:
```shell
-mkdir $GOPATH/src
-cd $GOPATH/src
-go get github.com/kubernetes-incubator/reference-docs
+git clone https://github.com/kubernetes/kubernetes $GOPATH/src/k8s.io/kubernetes
```
-Determine the base directory of your clone of the
+Remove the spf13 package from `$GOPATH/src/k8s.io/kubernetes/vendor/github.com`.
+
+```shell
+rm -rf $GOPATH/src/k8s.io/kubernetes/vendor/github.com/spf13
+```
+
+The kubernetes/kubernetes repository provides access to the kubectl and kustomize source code.
+
+
+* Determine the base directory of your clone of the
+[kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) repository.
+For example, if you followed the preceding step to get the repository, your
+base directory is `$GOPATH/src/k8s.io/kubernetes.`
+The remaining steps refer to your base directory as ``.
+
+* Determine the base directory of your clone of the
+[kubernetes/website](https://github.com/kubernetes/website) repository.
+For example, if you followed the preceding step to get the repository, your
+base directory is `$GOPATH/src/github.com//website.`
+The remaining steps refer to your base directory as ``.
+
+* Determine the base directory of your clone of the
[kubernetes-incubator/reference-docs](https://github.com/kubernetes-incubator/reference-docs) repository.
For example, if you followed the preceding step to get the repository, your
base directory is `$GOPATH/src/github.com/kubernetes-incubator/reference-docs.`
The remaining steps refer to your base directory as ``.
-In your local kubernetes/kubernetes repository, check out the branch of interest,
+In your local k8s.io/kubernetes repository, check out the branch of interest,
and make sure it is up to date. For example, if you want to generate docs for
-Kubernetes 1.9, you could use these commands:
+Kubernetes 1.15, you could use these commands:
```shell
cd
-git checkout release-1.9
-git pull https://github.com/kubernetes/kubernetes release-1.9
+git checkout release-1.15
+git pull https://github.com/kubernetes/kubernetes release-1.15
```
+If you do not need to edit the kubectl source code, follow the instructions to [Edit the Makefile](#editing-makefile).
+
## Editing the kubectl source code
-The reference documentation for the kubectl commands is automatically generated from
-kubectl source code. If you want to change the reference documentation, the first step
+The kubectl command reference documentation is automatically generated from
+the kubectl source code. If you want to change the reference documentation, the first step
is to change one or more comments in the kubectl source code. Make the change in your
local kubernetes/kubernetes repository, and then submit a pull request to the master branch of
[github.com/kubernetes/kubernetes](https://github.com/kubernetes/kubernetes).
@@ -124,7 +140,7 @@ version that has already been released, you need to propose that your change be
cherry picked into the release branch.
For example, suppose the master branch is being used to develop Kubernetes 1.10,
-and you want to backport your change to the release-1.9 branch. For instructions
+and you want to backport your change to the release-1.15 branch. For instructions
on how to do this, see
[Propose a Cherry Pick](https://git.k8s.io/community/contributors/devel/sig-release/cherry-picks.md).
@@ -138,104 +154,115 @@ need to work with someone who can set the label and milestone for you.
## Editing Makefile
-Go to ``, and open `Makefile` for editing:
+Go to ``, and open the `Makefile` for editing:
-Set `K8SROOT` to the base directory of your local kubernetes/kubernetes
-repository. Set `WEBROOT` to the base directory of your local kubernetes/website repository.
-Set `MINOR_VERSION` to the minor version of the docs you want to build. For example,
-if you want to build docs for Kubernetes 1.9, set `MINOR_VERSION` to 9. Save and close `Makefile`.
+* Set `K8SROOT` to ``.
+* Set `WEBROOT` to ``.
+* Set `MINOR_VERSION` to the minor version of the docs you want to build. For example,
+if you want to build docs for Kubernetes 1.15, set `MINOR_VERSION` to 15. Save and close the `Makefile`.
-## Building the brodocs image
+For example, update the following variables:
-The doc generation code requires the `pwittrock/brodocs` Docker image.
-
-This command creates the `pwittrock/brodocs` Docker image. It also tries to push the image to
-DockerHub, but it's OK if that step fails. As long as you have the image locally, the code generation
-can succeed.
-
-
-```shell
-make brodocs
```
-
-Verify that you have the brodocs image:
-
-```shell
-docker images
-```
-
-The output shows `pwittrock/brodocs` as one of the available images:
-
-```shell
-REPOSITORY TAG IMAGE ID CREATED SIZE
-pwittrock/brodocs latest 999d34a50d56 5 weeks ago 714MB
+WEBROOT=$(GOPATH)/src/github.com//website
+K8SROOT=$(GOPATH)/src/k8s.io/kubernetes
+MINOR_VERSION=15
```
## Creating a version directory
-In the `gen-kubectldocs/generators` directory, if you do not already
-have a directory named `v1_MINOR_VERSION`, create one now by copying the directory
+The version directory is a staging area for the kubectl command reference build.
+The YAML files in this directory are used to create the structure and navigation
+of the kubectl command reference.
+
+In the `/gen-kubectldocs/generators` directory, if you do not already
+have a directory named `v1_`, create one now by copying the directory
for the previous version. For example, suppose you want to generate docs for
-Kubernetes 1.9, but you don't already have a `v1_9` directory. Then you could
-create and populate a `v1_9` directory by running these commands:
+Kubernetes 1.15, but you don't already have a `v1_15` directory. Then you could
+create and populate a `v1_15` directory by running these commands:
```shell
-mkdir gen-kubectldocs/generators/v1_9
-cp -r gen-kubectldocs/generators/v1_8/* gen-kubectldocs/generators/v1_9
+mkdir gen-kubectldocs/generators/v1_15
+cp -r gen-kubectldocs/generators/v1_14/* gen-kubectldocs/generators/v1_15
```
-## Checking out a branch in kubernetes/kubernetes
+## Checking out a branch in k8s.io/kubernetes
-In you local kubernetes/kubernetes repository, checkout the branch that has
+In your local repository, checkout the branch that has
the version of Kubernetes that you want to document. For example, if you want
-to generate docs for Kubernetes 1.9, checkout the release-1.9 branch. Make sure
+to generate docs for Kubernetes 1.15, checkout the release-1.15 branch. Make sure
you local branch is up to date.
+```shell
+cd
+git checkout release-1.15
+git pull https://github.com/kubernetes/kubernetes release-1.15
+```
+
## Running the doc generation code
-In you local kubernetes-incubator/reference-docs repository, build and run the
-doc generation code. You might need to run the command as root:
-
-```shell
-cd
-make cli
-```
-
-## Locate the generated files
-
-These two files are the primary output of a successful build. Verify that they exist:
-
-* `/gen-kubectldocs/generators/build/index.html`
-* `/gen-kubectldocs/generators/build/navData.js`
-
-## Copying files to the kubernetes/website repository
-
-Copy the generated files from your local kubernetes-incubator/reference-docs
-repository to your local kubernetes/website repository.
+In your local kubernetes-incubator/reference-docs repository, build and run the
+kubectl command reference generation code. You might need to run the command as root:
```shell
cd
make copycli
```
-## Adding and committing changes in kubernetes/website
+The `copycli` command will clean the staging directories, generate the kubectl command files,
+and copy the collated kubectl reference HTML page and assets to ``.
-List the files that were generated and copied to the `kubernetes/website`
-repository:
+## Locate the generated files
+Verify that these two files have been generated:
+
+```shell
+[ -e "/gen-kubectldocs/generators/build/index.html" ] && echo "index.html built" || echo "no index.html"
+[ -e "/gen-kubectldocs/generators/build/navData.js" ] && echo "navData.js built" || echo "no navData.js"
```
+
+## Locate the copied files
+
+Verify that all generated files have been copied to your ``:
+
+```shell
cd
git status
```
-The output shows the new and modified files. For example, the output
-might look like this:
+The output should include the modified files:
+
+```
+static/docs/reference/generated/kubectl/kubectl-commands.html
+static/docs/reference/generated/kubectl/navData.js
+```
+
+Additionally, the output might show the modified files:
+
+```
+static/docs/reference/generated/kubectl/scroll.js
+static/docs/reference/generated/kubectl/stylesheet.css
+static/docs/reference/generated/kubectl/tabvisibility.js
+static/docs/reference/generated/kubectl/node_modules/bootstrap/dist/css/bootstrap.min.css
+static/docs/reference/generated/kubectl/node_modules/highlight.js/styles/default.css
+static/docs/reference/generated/kubectl/node_modules/jquery.scrollto/jquery.scrollTo.min.js
+static/docs/reference/generated/kubectl/node_modules/jquery/dist/jquery.min.js
+static/docs/reference/generated/kubectl/node_modules/font-awesome/css/font-awesome.min.css
+```
+
+## Locally test the documentation
+
+Build the Kubernetes documentation in your local ``.
```shell
-modified: docs/reference/generated/kubectl/kubectl-commands.html
-modified: docs/reference/generated/kubectl/navData.js
+cd
+make docker-serve
```
+View the [local preview](https://localhost:1313/docs/reference/generated/kubectl/kubectl-commands/).
+
+## Adding and committing changes in kubernetes/website
+
Run `git add` and `git commit` to commit the files.
## Creating a pull request
@@ -257,7 +284,4 @@ topics will be visible in the
* [Generating Reference Documentation for the Kubernetes API](/docs/home/contribute/generated-reference/kubernetes-api/)
* [Generating Reference Documentation for the Kubernetes Federation API](/docs/home/contribute/generated-reference/federation-api/)
-{{% /capture %}}
-
-
-
+{{% /capture %}}
\ No newline at end of file
diff --git a/content/en/docs/contribute/generate-ref-docs/kubernetes-api.md b/content/en/docs/contribute/generate-ref-docs/kubernetes-api.md
index b594ea9dd4..4eff9594af 100644
--- a/content/en/docs/contribute/generate-ref-docs/kubernetes-api.md
+++ b/content/en/docs/contribute/generate-ref-docs/kubernetes-api.md
@@ -5,8 +5,16 @@ content_template: templates/task
{{% capture overview %}}
-This page shows how to update the generated reference docs for the
-Kubernetes API.
+This page shows how to update the generated reference docs for the Kubernetes API.
+The Kubernetes API reference documentation is built from the
+[Kubernetes OpenAPI spec](https://github.com/kubernetes/kubernetes/blob/master/api/openapi-spec/swagger.json)
+and tools from [kubernetes-incubator/reference-docs](https://github.com/kubernetes-incubator/reference-docs).
+
+If you find bugs in the generated documentation, you need to
+[fix them upstream](/docs/contribute/generate-ref-docs/contribute-upstream/).
+
+If you need only to regenerate the reference documentation from the [OpenAPI](https://github.com/OAI/OpenAPI-Specification)
+spec, continue reading this page.
{{% /capture %}}
@@ -18,8 +26,6 @@ You need to have these tools installed:
* [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
* [Golang](https://golang.org/doc/install) version 1.9.1 or later
-Your $GOPATH environment variable must be set.
-
You need to know how to create a pull request (PR) to a GitHub repository.
Typically, this involves creating a fork of the repository. For more
information, see
@@ -31,96 +37,78 @@ information, see
{{% capture steps %}}
-## The big picture
+## Setting up the local repositories
-The reference documentation for the Kubernetes API is generated in two separate stages:
-
-1. Generate an OpenAPI spec from the Kubernetes source code. The tools for
-this stage are at [kubernetes/kubernetes/hack](https://github.com/kubernetes/kubernetes/tree/master/hack).
-
-1. Generate an HTML file from the OpenAPI spec. The tools for this stage are at
-[kubernetes-incubator/reference-docs](https://github.com/kubernetes-incubator/reference-docs).
-
-If you find bugs in the generated documentation generated, you need to
-[fix them upstream](/docs/contribute/generate-ref-docs/contribute-upstream/).
-
-If you need only to regenerate the reference documentation from the OpenAPI
-spec, continue reading this page.
-
-## Getting three repositories
-
-If you don't already have the kubernetes/kubernetes repository, get it now:
+Create a local workspace and set your `GOPATH`.
```shell
-mkdir $GOPATH/src
-cd $GOPATH/src
-go get github.com/kubernetes/kubernetes
+mkdir -p $HOME/
+
+export GOPATH=$HOME/
```
-Determine the base directory of your clone of the
-[kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) repository.
-For example, if you followed the preceding step to get the repository, your
-base directory is `$GOPATH/src/github.com/kubernetes/kubernetes.`
-The remaining steps refer to your base directory as ``.
+Get a local clone of the following repositories:
+
+```shell
+go get -u github.com/kubernetes-incubator/reference-docs
+
+go get -u github.com/go-openapi/loads
+go get -u github.com/go-openapi/spec
+```
If you don't already have the kubernetes/website repository, get it now:
```shell
-mkdir $GOPATH/src
-cd $GOPATH/src
-go get github.com/kubernetes/website
+git clone https://github.com//website $GOPATH/src/github.com//website
```
-Determine the base directory of your clone of the
-[kubernetes/website](https://github.com/kubernetes/website) repository.
-For example, if you followed the preceding step to get the repository, your
-base directory is `$GOPATH/src/github.com/kubernetes/website.`
-The remaining steps refer to your base directory as ``.
-
-If you don't already have the kubernetes-incubator/reference-docs repository, get it now:
+Get a clone of the kubernetes/kubernetes repository as k8s.io/kubernetes:
```shell
-mkdir $GOPATH/src
-cd $GOPATH/src
-go get github.com/kubernetes-incubator/reference-docs
+git clone https://github.com/kubernetes/kubernetes $GOPATH/src/k8s.io/kubernetes
```
-Determine the base directory of your clone of the
-[kubernetes-incubator/reference-docs](https://github.com/kubernetes-incubator/reference-docs) repository.
-For example, if you followed the preceding step to get the repository, your
-base directory is `$GOPATH/src/github.com/kubernetes-incubator/reference-docs.`
+* The base directory of your clone of the
+[kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) repository is
+`$GOPATH/src/k8s.io/kubernetes.`
+The remaining steps refer to your base directory as ``.
+
+* The base directory of your clone of the
+[kubernetes/website](https://github.com/kubernetes/website) repository is
+`$GOPATH/src/github.com//website.`
+The remaining steps refer to your base directory as ``.
+
+* The base directory of your clone of the
+[kubernetes-incubator/reference-docs](https://github.com/kubernetes-incubator/reference-docs)
+repository is `$GOPATH/src/github.com/kubernetes-incubator/reference-docs.`
The remaining steps refer to your base directory as ``.
-## Generating the API reference docs for publishing
-The preceding section showed how to edit a source file and then generate
-several files, including `api/openapi-spec/swagger.json` in the
-`kubernetes/kubernetes` repository.
+## Generating the API reference docs
This section shows how to generate the
-[published Kubernetes API reference documentation](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/),
-which is generated by the tools at
-[kubernetes-incubator/reference-docs](https://github.com/kubernetes-incubator/reference-docs).
-Those tools take the `api/openapi-spec/swagger.json` file as input.
+[published Kubernetes API reference documentation](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/).
-### Editing Makefile in kubernetes-incubator/reference-docs
+### Modifying the Makefile
-Go to ``, and open `Makefile` for editing:
+Go to ``, and open the `Makefile` for editing:
-Set `K8SROOT` to the base directory of your local kubernetes/kubernetes
-repository. Set `WEBROOT` to the base directory of your local kubernetes/website repository.
-Set `MINOR_VERSION` to the minor version of the docs you want to build. For example,
-if you want to build docs for Kubernetes 1.9, set `MINOR_VERSION` to 9. Save and close `Makefile`.
+* Set `K8SROOT` to ``.
+* Set `WEBROOT` to ``.
+* Set `MINOR_VERSION` to the minor version of the docs you want to build. For example,
+if you want to build docs for Kubernetes 1.15, set `MINOR_VERSION` to 15. Save and close the `Makefile`.
+
+For example, update the following variables:
+
+```
+WEBROOT=$(GOPATH)/src/github.com//website
+K8SROOT=$(GOPATH)/src/k8s.io/kubernetes
+MINOR_VERSION=15
+```
### Copying the OpenAPI spec
-The doc generation code needs a local copy of the OpenAPI spec for the Kubernetes API.
-Go to `` and check out the branch that has the OpenAPI spec you want to use.
-For example, if you want to generate docs for Kubernetes 1.9, checkout the release-1.9
-branch.
-
-Go back to ``. Enter the following command to copy the OpenAPI spec from the
-`kubernetes/kubernetes` repository to a local directory:
+Run the following command in ``:
```shell
make updateapispec
@@ -129,43 +117,44 @@ make updateapispec
The output shows that the file was copied:
```shell
-cp ~/src/github.com/kubernetes/kubernetes/api/openapi-spec/swagger.json gen-apidocs/generators/openapi-spec/swagger.json
+cp ~/src/k8s.io/kubernetes/api/openapi-spec/swagger.json gen-apidocs/generators/openapi-spec/swagger.json
```
### Building the API reference docs
-Run the following command to generate the API reference docs:
+Run the following command in ``:
```shell
-cd
make api
```
-### Locate the generated files
+Verify that these two files have been generated:
-These two files are the output of a successful build. Verify that they exist:
+```shell
+[ -e "/gen-apidocs/generators/build/index.html" ] && echo "index.html built" || echo "no index.html"
+[ -e "/gen-apidocs/generators/build/navData.js" ] && echo "navData.js built" || echo "no navData.js"
+```
-* `/gen-apidocs/generators/build/index.html`
-* `/gen-apidocs/generators/build/navData.js`
+### Creating directories for published docs
+
+Create the directories in `` for the generated API reference files:
+
+```shell
+mkdir -p /static/docs/reference/generated/kubernetes-api/v1.
+mkdir -p /static/docs/reference/generated/kubernetes-api/v1./css
+mkdir -p /static/docs/reference/generated/kubernetes-api/v1./fonts
+```
## Copying the generated docs to the kubernetes/website repository
-The preceding sections showed how to generate reference documentation for publication.
-
-This section shows how to copy the generated reference to the
-[kubernetes/website](https://github.com/kubernetes/website) repository. The files
-in the `kubernetes/website` repository are published in the
-[kubernetes.io](https://kubernetes.io) website. In particular, the generated
-`index.html` file is published [here](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/).
-
-Enter the following command to copy the generated files to
+Run the following command in `` to copy the generated files to
your local kubernetes/website repository:
```shell
make copyapi
```
-Go to the base of your local kubernetes/website repository, and
+Go to the base of your local kubernetes/website repository, and
see which files have been modified:
```shell
@@ -175,15 +164,52 @@ git status
The output shows the modified files:
-```shell
-On branch master
-...
- modified: docs/reference/generated/kubernetes-api/v1.9/index.html
+```
+static/docs/reference/generated/kubernetes-api/v1.15/css/bootstrap.min.css
+static/docs/reference/generated/kubernetes-api/v1.15/css/font-awesome.min.css
+static/docs/reference/generated/kubernetes-api/v1.15/css/stylesheet.css
+static/docs/reference/generated/kubernetes-api/v1.15/fonts/FontAwesome.otf
+static/docs/reference/generated/kubernetes-api/v1.15/fonts/fontawesome-webfont.eot
+static/docs/reference/generated/kubernetes-api/v1.15/fonts/fontawesome-webfont.svg
+static/docs/reference/generated/kubernetes-api/v1.15/fonts/fontawesome-webfont.ttf
+static/docs/reference/generated/kubernetes-api/v1.15/fonts/fontawesome-webfont.woff
+static/docs/reference/generated/kubernetes-api/v1.15/fonts/fontawesome-webfont.woff2
+static/docs/reference/generated/kubernetes-api/v1.15/index.html
+static/docs/reference/generated/kubernetes-api/v1.15/jquery.scrollTo.min.js
+static/docs/reference/generated/kubernetes-api/v1.15/navData.js
+static/docs/reference/generated/kubernetes-api/v1.15/scroll.js
```
-In this example, only one file has been modified. Recall that you generated both
-`index.html` and `navData.js`. But apparently the generated `navata.js` is not different
-from the `navData.js` that was already in the kubernetes/website` repository.
+## Updating the API reference index pages
+
+
+* Open `/content/en/docs/reference/kubernetes-api/index.md` for editing, and update the API reference
+ version number. For example:
+
+ ```
+ ---
+ title: v1.15
+ ---
+
+ [Kubernetes API v1.15](/docs/reference/generated/kubernetes-api/v1.15/)
+ ```
+
+* Open `/content/en/docs/reference/_index.md` for editing, and add a
+ new link for the latest API reference. Remove the oldest API reference version.
+ There should be five links to the most recent API references.
+
+
+## Locally test the API reference
+
+Publish a local version of the API reference.
+Verify the [local preview](http://localhost:1313/docs/reference/generated/kubernetes-api/v1.15/).
+
+```shell
+cd
+make docker-serve
+```
+
+## Commit the changes
In `` run `git add` and `git commit` to commit the change.
@@ -193,9 +219,6 @@ Submit your changes as a
Monitor your pull request, and respond to reviewer comments as needed. Continue
to monitor your pull request until it has been merged.
-A few minutes after your pull request is merged, your changes will be visible
-in the [published reference documentation](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/).
-
{{% /capture %}}
{{% capture whatsnext %}}
@@ -204,5 +227,4 @@ in the [published reference documentation](/docs/reference/generated/kubernetes-
* [Generating Reference Documentation for kubectl Commands](/docs/home/contribute/generated-reference/kubectl/)
* [Generating Reference Documentation for the Kubernetes Federation API](/docs/home/contribute/generated-reference/federation-api/)
-{{% /capture %}}
-
+{{% /capture %}}
\ No newline at end of file
diff --git a/content/en/docs/contribute/intermediate.md b/content/en/docs/contribute/intermediate.md
index 5aa2218605..a7e36af944 100644
--- a/content/en/docs/contribute/intermediate.md
+++ b/content/en/docs/contribute/intermediate.md
@@ -63,7 +63,7 @@ active participants.
Before you start reviewing PRs, make sure you are familiar with the
[Documentation Style Guide](/docs/contribute/style/style-guide/)
-and the [code of conduct](/community/code-of-conduct/)
+and the [code of conduct](/community/code-of-conduct/).
### Find a PR to review
@@ -101,7 +101,7 @@ more information about the responsibilities of reviewers and approvers, see
indicates that a PR is technically accurate by leaving a `/lgtm` comment on
the PR.
- {{< note >}}Don't add an `/lgtm` unless you are confident in the technical
+ {{< note >}}Don't add a `/lgtm` unless you are confident in the technical
accuracy of the documentation modified or introduced in the PR.{{< /note >}}
- An approver reviews pull request content for docs quality and adherence to
@@ -109,13 +109,19 @@ more information about the responsibilities of reviewers and approvers, see
[style guide](/docs/contribute/style/style-guide). Only people listed as
approvers in the
[`OWNERS`](https://github.com/kubernetes/website/blob/master/OWNERS) file can
- approve a PR. To approve a PR, leave an `/approved` comment on the PR.
+ approve a PR. To approve a PR, leave an `/approve` comment on the PR.
A PR is merged when it has both a `/lgtm` comment from anyone in the Kubernetes
-organization and an `/approved` comment from an approver in the
+organization and an `/approve` comment from an approver in the
`sig-docs-maintainers` group, as long as it is not on hold and the PR author
has signed the CLA.
+{{< note >}}
+
+The ["Participating"](/docs/contribute/participating/#approvers) section contains more information for reviewers and approvers, including specific responsibilities for approvers.
+
+{{< /note >}}
+
### Review a PR
1. Read the PR description and read any attached issues or links, if
@@ -172,9 +178,9 @@ has signed the CLA.
provide technical review.
- To prevent the PR from being merged, add `/hold`. This sets the
label `do-not-merge/hold`.
- - If a PR has no conflicts and has the `lgtm` and `approved` label but
+ - If a PR has no conflicts and has the `lgtm` and `approve` labels but
no `hold` label, it is merged automatically.
- - If a PR has the `lgtm` and/or `approved` labels and new changes are
+ - If a PR has the `lgtm` and/or `approve` labels and new changes are
detected, these labels are removed automatically.
See
@@ -575,45 +581,15 @@ These guidelines are not set in stone and are subject to change.
not be assigned automatically. A bug is a problem with existing content or
functionality, and a feature is a request for new content or functionality.
The `kind/documentation` label is not currently in use.
- - Priority labels: define the relative severity of the issue. These do not
- conform to those outlined in the
- [Kubernetes contributor guide](https://github.com/kubernetes/community/blob/master/contributors/guide/issue-triage.md#define-priority), and can be one of `P1`, `P2`, or `P3`, if set.
-- To add a label, you can use GitHub's **Labels** widget if you are a Sig Docs
- approver. Anyone who is a member of the Kubernetes organization can add a
- label by leaving a comment like `/label `. The label must
+ - Priority labels: define the relative severity of the issue, as outlined in the
+ [Kubernetes contributor guide](https://github.com/kubernetes/community/blob/master/contributors/guide/issue-triage.md#define-priority).
+- To add a label, leave a comment like `/label `. The label must
already exist. If you try to add a label that does not exist, the command is
silently ignored.
-### Priorities
-
-An issue's priority influences how quickly it is addressed. For documentation,
-here are the guidelines for setting a priority on an issue:
-
-#### P1
-
-- Major content errors affecting more than 1 page
-- Broken code sample on a heavily trafficked page
-- Errors on a “getting started” page
-- Well known or highly publicized customer pain points
-- Automation issues
-
-#### P2
-
-This is the default for new issues and pull requests.
-
-- Broken code for sample that is not heavily used
-- Minor content issues in a heavily trafficked page
-- Major content issues on a lower-trafficked page
-
-#### P3
-
-- Typos and broken anchor links
-- Documentation feature requests
-- "Nice to have" items
-
### Handling special issue types
-We've encountered the following types of issues often enough to document how
+We encounter the following types of issues often enough to document how
to handle them.
#### Duplicate issues
@@ -629,8 +605,8 @@ same problem.
Depending on where the dead link is reported, different actions are required to
resolve the issue. Dead links in the API and Kubectl docs are automation issues
-and should be assigned a P1 until the problem can be fully understood. All other
-dead links are issues that need to be manually fixed and can be assigned a P3.
+and should be assigned `/priority critical-urgent` until the problem can be fully understood. All other
+dead links are issues that need to be manually fixed and can be assigned `/priority important-longterm`.
#### Blog issues
diff --git a/content/en/docs/contribute/localization.md b/content/en/docs/contribute/localization.md
index 859b342827..7c0f251089 100644
--- a/content/en/docs/contribute/localization.md
+++ b/content/en/docs/contribute/localization.md
@@ -195,9 +195,11 @@ cp content/en/docs/tutorials/kubernetes-basics.md content/de/docs/tutorials/kube
Translation tools can speed up the translation process. For example, some editors offers plugins to quickly translate text.
{{< caution >}}
-Use translation tools with care. Their output is not always accurate.
+Machine-generated translation alone does not meet the minimum standard of quality and requires extensive human review to meet that standard.
{{< /caution >}}
+To ensure accuracy in grammar and meaning, members of your localization team should carefully review all machine-generated translations before publishing.
+
### Source files
Localizations must be based on the English files from the most recent release, {{< latest-version >}}.
@@ -283,6 +285,6 @@ You can also help add or improve content to an existing localization. Join the [
Once a localization meets requirements for workflow and minimum output, SIG docs will:
- Enable language selection on the website
-- Publicize the localization's availability through [Cloud Native Computing Foundation](https://www.cncf.io/) (CNCF) channels, including the [Kubernetes blog](https://kubernetes.io/blog/).
+- Publicize the localization's availability through [Cloud Native Computing Foundation](https://www.cncf.io/about/) (CNCF) channels, including the [Kubernetes blog](https://kubernetes.io/blog/).
{{% /capture %}}
diff --git a/content/en/docs/contribute/participating.md b/content/en/docs/contribute/participating.md
index a1abeb4811..2ccf4baa8c 100644
--- a/content/en/docs/contribute/participating.md
+++ b/content/en/docs/contribute/participating.md
@@ -201,21 +201,29 @@ If you are approved, request that a current SIG Docs approver add you to the
GitHub group. Only members of the `kubernetes-website-admins` GitHub group can
add new members to a GitHub group.
-#### Becoming a website admin
+#### Approver responsibilities
-Members of the `kubernetes-website-admins` GitHub group can manage GitHub group
-membership and have full administrative rights to the settings of the repository,
-including the ability to add, remove, and troubleshoot webhooks. Not all SIG
-Docs approvers need this level of access.
+Approvers improve the documentation by reviewing and merging pull requests into the website repository. Because this role carries additional privileges, approvers have additional responsibilities:
-If you think you need this level of access, talk to an existing website admin or
-ask in the #sig-docs channel on [Kubernetes Slack](https://kubernetes.slack.com).
+- Approvers can use the `/approve` command, which merges PRs into the repo.
+
+ A careless merge can break the site, so be sure that when you merge something, you mean it.
+
+- Make sure that proposed changes meet the contribution guidelines.
+
+ If you ever have a question, or you're not sure about something, feel free to call for additional review.
+
+- Verify that netlify tests pass before you `/approve` a PR.
+
+
+
+- Visit the netlify page preview for a PR to make sure things look good before approving.
#### PR Wrangler
-SIG Docs approvers are added to the
+SIG Docs approvers participate in the
[PR Wrangler rotation scheduler](https://github.com/kubernetes/website/wiki/PR-Wranglers)
-for weekly rotations. All SIG Docs approvers are expected to take part in this
+for weekly rotations. SIG Docs expects all approvers to participate in this
rotation. See
[Be the PR Wrangler for a week](/docs/contribute/advanced#be-the-pr-wrangler-for-a-week)
for more details.
diff --git a/content/en/docs/contribute/start.md b/content/en/docs/contribute/start.md
index f1ee122d0a..4a60234318 100644
--- a/content/en/docs/contribute/start.md
+++ b/content/en/docs/contribute/start.md
@@ -32,13 +32,14 @@ The Kubernetes documentation is written in Markdown and processed and deployed u
You can file issues, edit content, and review changes from others, all from the
GitHub website. You can also use GitHub's embedded history and search tools.
-Not all tasks can be done in the GitHub UI, but these are discussed in the
+Not all tasks can be done in the GitHub UI, but these are discussed in the
[intermediate](/docs/contribute/intermediate/) and
[advanced](/docs/contribute/advanced/) docs contribution guides.
### Participating in SIG Docs
-The Kubernetes documentation is maintained by a Special Interest Group (SIG)
+The Kubernetes documentation is maintained by a
+{{< glossary_tooltip text="Special Interest Group" term_id="sig" >}} (SIG)
called SIG Docs. We communicate using a Slack channel, a mailing list, and
weekly video meetings. New participants are welcome. For more information, see
[Participating in SIG Docs](/docs/contribute/participating/).
@@ -68,9 +69,9 @@ We make use of the standard Hugo shortcodes, as well as a few that are custom to
the Kubernetes documentation. See [Custom Hugo shortcodes](/docs/contribute/style/hugo-shortcodes/) for
information about how to use them.
-### Multiple languages
+### Multiple languages
-Documentation source is available in multiple languages in `/content/`. Each language has its own folder with a two-letter code determined by the [ISO 639-1 standard](https://www.loc.gov/standards/iso639-2/php/code_list.php). For example, English documentation source is stored in `/content/en/docs/`.
+Documentation source is available in multiple languages in `/content/`. Each language has its own folder with a two-letter code determined by the [ISO 639-1 standard](https://www.loc.gov/standards/iso639-2/php/code_list.php). For example, English documentation source is stored in `/content/en/docs/`.
For more information about contributing to documentation in multiple languages, see ["Localize content"](/docs/contribute/intermediate#localize-content) in the intermediate contributing guide.
@@ -158,7 +159,7 @@ upcoming Kubernetes release, your process is a bit different. See
process guidelines and information about deadlines.
{{< /note >}}
-### Sign the CLA
+### Sign the CNCF CLA {#sign-the-cla}
Before you can contribute code or documentation to Kubernetes, you **must** read
the [Contributor guide](https://github.com/kubernetes/community/blob/master/contributors/guide/README.md) and
@@ -299,7 +300,7 @@ conventions and etiquette and get used to the workflow.
PR, and if applicable, also look at any linked issues. If you see a problem
or room for improvement, hover over the line and click the `+` symbol that
appears.
-
+
You can type a comment, and either choose **Add single comment** or **Start
a review**. Typically, starting a review is better because it allows you to
leave multiple comments and notifies the PR owner only when you have
@@ -342,7 +343,7 @@ or follow the steps below.
Case studies highlight how organizations are using Kubernetes to solve
real-world problems. They are written in collaboration with the Kubernetes
-marketing team, which is handled by the CNCF.
+marketing team, which is handled by the {{< glossary_tooltip text="CNCF" term_id="cncf" >}}.
Have a look at the source for the
[existing case studies](https://github.com/kubernetes/website/tree/master/content/en/case-studies).
diff --git a/content/en/docs/contribute/style/style-guide.md b/content/en/docs/contribute/style/style-guide.md
index d5b061a7ef..771684b1e5 100644
--- a/content/en/docs/contribute/style/style-guide.md
+++ b/content/en/docs/contribute/style/style-guide.md
@@ -29,7 +29,14 @@ and representing feature state.
## Language
-Kubernetes documentation uses US English.
+Kubernetes documentation has been translated into multiple languages
+(see [Localization READMEs](https://github.com/kubernetes/website/blob/master/README.md#localization-readmemds)).
+
+The way of localizing the docs for a different language is described in [Localizing Kubernetes Documentation](https://kubernetes.io/docs/contribute/localization/).
+
+The English-language documentation uses U.S. English spelling and grammar.
+
+{{< comment >}}[If you're localizing this page, you can omit the point about US English.]{{< /comment >}}
## Documentation formatting standards
@@ -209,7 +216,7 @@ Hugo [Shortcodes](https://gohugo.io/content-management/shortcodes) help create d
```
{{* note */>}}
- No need to include a prefix; the shortcode automatically provides on (Note:, Caution:, etc.).
+ No need to include a prefix; the shortcode automatically provides one. (Note:, Caution:, etc.)
{{* /note */>}}
```
diff --git a/content/en/docs/reference/_index.md b/content/en/docs/reference/_index.md
index 4503675af8..2b569012cf 100644
--- a/content/en/docs/reference/_index.md
+++ b/content/en/docs/reference/_index.md
@@ -20,11 +20,11 @@ This section of the Kubernetes documentation contains references.
* [Kubernetes API Overview](/docs/reference/using-api/api-overview/) - Overview of the API for Kubernetes.
* Kubernetes API Versions
+ * [1.15](/docs/reference/generated/kubernetes-api/v1.15/)
* [1.14](/docs/reference/generated/kubernetes-api/v1.14/)
* [1.13](/docs/reference/generated/kubernetes-api/v1.13/)
* [1.12](/docs/reference/generated/kubernetes-api/v1.12/)
* [1.11](/docs/reference/generated/kubernetes-api/v1.11/)
- * [1.10](/docs/reference/generated/kubernetes-api/v1.10/)
## API Client Libraries
diff --git a/content/en/docs/reference/access-authn-authz/admission-controllers.md b/content/en/docs/reference/access-authn-authz/admission-controllers.md
index b3cf387d39..41e8a0acbc 100644
--- a/content/en/docs/reference/access-authn-authz/admission-controllers.md
+++ b/content/en/docs/reference/access-authn-authz/admission-controllers.md
@@ -249,6 +249,22 @@ plugins:
...
```
+Alternatively, you can embed the configuration directly in the file:
+
+```yaml
+apiVersion: apiserver.k8s.io/v1alpha1
+kind: AdmissionConfiguration
+plugins:
+- name: ImagePolicyWebhook
+ configuration:
+ imagePolicy:
+ kubeConfigFile: /path/to/file
+ allowTTL: 50
+ denyTTL: 50
+ retryBackoff: 500
+ defaultAllow: true
+```
+
The ImagePolicyWebhook config file must reference a [kubeconfig](/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/) formatted file which sets up the connection to the backend. It is required that the backend communicate over TLS.
The kubeconfig file's cluster field must point to the remote service, and the user field must contain the returned authorizer.
@@ -292,15 +308,15 @@ An example request body:
"image":"myrepo/myimage@sha256:beb6bd6a68f114c1dc2ea4b28db81bdf91de202a9014972bec5e4d9171d90ed"
}
],
- "annotations":[
+ "annotations":{
"mycluster.image-policy.k8s.io/ticket-1234": "break-glass"
- ],
+ },
"namespace":"mynamespace"
}
}
```
-The remote service is expected to fill the ImageReviewStatus field of the request and respond to either allow or disallow access. The response body's "spec" field is ignored and may be omitted. A permissive response would return:
+The remote service is expected to fill the `ImageReviewStatus` field of the request and respond to either allow or disallow access. The response body's "spec" field is ignored and may be omitted. A permissive response would return:
```json
{
@@ -337,7 +353,7 @@ Examples of information you might put here are:
* a ticket number from a ticket system that documents the break-glass request
* provide a hint to the policy server as to the imageID of the image being provided, to save it a lookup
-In any case, the annotations are provided by the user and are not validated by Kubernetes in any way. In the future, if an annotation is determined to be widely useful, it may be promoted to a named field of ImageReviewSpec.
+In any case, the annotations are provided by the user and are not validated by Kubernetes in any way. In the future, if an annotation is determined to be widely useful, it may be promoted to a named field of `ImageReviewSpec`.
### LimitPodHardAntiAffinityTopology {#limitpodhardantiaffinitytopology}
diff --git a/content/en/docs/reference/access-authn-authz/authorization.md b/content/en/docs/reference/access-authn-authz/authorization.md
index 6e9baec83b..9417713a83 100644
--- a/content/en/docs/reference/access-authn-authz/authorization.md
+++ b/content/en/docs/reference/access-authn-authz/authorization.md
@@ -47,14 +47,21 @@ Kubernetes reviews only the following API request attributes:
* **extra** - A map of arbitrary string keys to string values, provided by the authentication layer.
* **API** - Indicates whether the request is for an API resource.
* **Request path** - Path to miscellaneous non-resource endpoints like `/api` or `/healthz`.
- * **API request verb** - API verbs `get`, `list`, `create`, `update`, `patch`, `watch`, `proxy`, `redirect`, `delete`, and `deletecollection` are used for resource requests. To determine the request verb for a resource API endpoint, see [Determine the request verb](/docs/reference/access-authn-authz/authorization/#determine-the-request-verb).
- * **HTTP request verb** - HTTP verbs `get`, `post`, `put`, and `delete` are used for non-resource requests.
+ * **API request verb** - API verbs like `get`, `list`, `create`, `update`, `patch`, `watch`, `delete`, and `deletecollection` are used for resource requests. To determine the request verb for a resource API endpoint, see [Determine the request verb](/docs/reference/access-authn-authz/authorization/#determine-the-request-verb).
+ * **HTTP request verb** - Lowercased HTTP methods like `get`, `post`, `put`, and `delete` are used for non-resource requests.
* **Resource** - The ID or name of the resource that is being accessed (for resource requests only) -- For resource requests using `get`, `update`, `patch`, and `delete` verbs, you must provide the resource name.
* **Subresource** - The subresource that is being accessed (for resource requests only).
* **Namespace** - The namespace of the object that is being accessed (for namespaced resource requests only).
* **API group** - The API group being accessed (for resource requests only). An empty string designates the [core API group](/docs/concepts/overview/kubernetes-api/).
## Determine the Request Verb
+
+**Non-resource requests**
+Requests to endpoints other than `/api/v1/...` or `/apis///...`
+are considered "non-resource requests", and use the lower-cased HTTP method of the request as the verb.
+For example, a `GET` request to endpoints like `/api` or `/healthz` would use `get` as the verb.
+
+**Resource requests**
To determine the request verb for a resource API endpoint, review the HTTP verb
used and whether or not the request acts on an individual resource or a
collection of resources:
@@ -62,20 +69,25 @@ collection of resources:
HTTP verb | request verb
----------|---------------
POST | create
-GET, HEAD | get (for individual resources), list (for collections)
+GET, HEAD | get (for individual resources), list (for collections, including full object content), watch (for watching an individual resource or collection of resources)
PUT | update
PATCH | patch
DELETE | delete (for individual resources), deletecollection (for collections)
Kubernetes sometimes checks authorization for additional permissions using specialized verbs. For example:
-* [PodSecurityPolicy](/docs/concepts/policy/pod-security-policy/) checks for authorization of the `use` verb on `podsecuritypolicies` resources in the `policy` API group.
-* [RBAC](/docs/reference/access-authn-authz/rbac/#privilege-escalation-prevention-and-bootstrapping) checks for authorization
-of the `bind` verb on `roles` and `clusterroles` resources in the `rbac.authorization.k8s.io` API group.
-* [Authentication](/docs/reference/access-authn-authz/authentication/) layer checks for authorization of the `impersonate` verb on `users`, `groups`, and `serviceaccounts` in the core API group, and the `userextras` in the `authentication.k8s.io` API group.
+* [PodSecurityPolicy](/docs/concepts/policy/pod-security-policy/)
+ * `use` verb on `podsecuritypolicies` resources in the `policy` API group.
+* [RBAC](/docs/reference/access-authn-authz/rbac/#privilege-escalation-prevention-and-bootstrapping)
+ * `bind` and `escalate` verbs on `roles` and `clusterroles` resources in the `rbac.authorization.k8s.io` API group.
+* [Authentication](/docs/reference/access-authn-authz/authentication/)
+ * `impersonate` verb on `users`, `groups`, and `serviceaccounts` in the core API group, and the `userextras` in the `authentication.k8s.io` API group.
-## Authorization Modules
- * **Node** - A special-purpose authorizer that grants permissions to kubelets based on the pods they are scheduled to run. To learn more about using the Node authorization mode, see [Node Authorization](/docs/reference/access-authn-authz/node/).
+## Authorization Modes {#authorization-modules}
+
+The Kubernetes API server may authorize a request using one of several authorization modes:
+
+ * **Node** - A special-purpose authorization mode that grants permissions to kubelets based on the pods they are scheduled to run. To learn more about using the Node authorization mode, see [Node Authorization](/docs/reference/access-authn-authz/node/).
* **ABAC** - Attribute-based access control (ABAC) defines an access control paradigm whereby access rights are granted to users through the use of policies which combine attributes together. The policies can use any type of attributes (user attributes, resource attributes, object, environment attributes, etc). To learn more about using the ABAC mode, see [ABAC Mode](/docs/reference/access-authn-authz/abac/).
* **RBAC** - Role-based access control (RBAC) is a method of regulating access to computer or network resources based on the roles of individual users within an enterprise. In this context, access is the ability of an individual user to perform a specific task, such as view, create, or modify a file. To learn more about using the RBAC mode, see [RBAC Mode](/docs/reference/access-authn-authz/rbac/)
* When specified RBAC (Role-Based Access Control) uses the `rbac.authorization.k8s.io` API group to drive authorization decisions, allowing admins to dynamically configure permission policies through the Kubernetes API.
diff --git a/content/en/docs/reference/access-authn-authz/controlling-access.md b/content/en/docs/reference/access-authn-authz/controlling-access.md
index 0873e6c853..e945fa596b 100644
--- a/content/en/docs/reference/access-authn-authz/controlling-access.md
+++ b/content/en/docs/reference/access-authn-authz/controlling-access.md
@@ -1,6 +1,5 @@
---
reviewers:
-- bgrant0607
- erictune
- lavalamp
title: Controlling Access to the Kubernetes API
diff --git a/content/en/docs/reference/access-authn-authz/extensible-admission-controllers.md b/content/en/docs/reference/access-authn-authz/extensible-admission-controllers.md
index f9555caa51..23fd50340f 100644
--- a/content/en/docs/reference/access-authn-authz/extensible-admission-controllers.md
+++ b/content/en/docs/reference/access-authn-authz/extensible-admission-controllers.md
@@ -690,7 +690,7 @@ or the server could power off before persisting the object.
Additionally, webhooks with side effects should skip those side-effects when `dryRun: true` admission requests are handled.
A webhook must explicitly indicate that it will not have side-effects when run with `dryRun`,
-or the dry-run request will not be sent to the webhook and the API request fill fail instead.
+or the dry-run request will not be sent to the webhook and the API request will fail instead.
Webhooks indicate whether they have side effects using the `sideEffects` field in the webhook configuration.
`sideEffects` may be set to `Unknown`, `None`, `Some`, `NoneOnDryRun`. The default is `Unknown`.
@@ -752,12 +752,13 @@ and mutating webhooks can specify a `reinvocationPolicy` to control whether they
* `Never`: the webhook must not be called more than once in a single admission evaluation
* `IfNeeded`: the webhook may be called again as part of the admission evaluation if the object
being admitted is modified by other admission plugins after the initial webhook call.
- {{< note >}}
- * the number of additional invocations is not guaranteed to be exactly one.
- * if additional invocations result in further modifications to the object, webhooks are not guaranteed to be invoked again.
- * webhooks that use this option may be reordered to minimize the number of additional invocations.
- * to validate an object after all mutations are guaranteed complete, use a validating admission webhook instead (recommended for webhooks with side-effects).
- {{< /note >}}
+
+The important elements to note are:
+
+* The number of additional invocations is not guaranteed to be exactly one.
+* If additional invocations result in further modifications to the object, webhooks are not guaranteed to be invoked again.
+* Webhooks that use this option may be reordered to minimize the number of additional invocations.
+* To validate an object after all mutations are guaranteed complete, use a validating admission webhook instead (recommended for webhooks with side-effects).
Here is an example of a mutating webhook opting into being re-invoked if later admission plugins modify the object:
@@ -778,7 +779,7 @@ in an object could already exist in the user-provided object, but it is essentia
### Failure policy
`failurePolicy` defines how unrecognized errors and timeout errors from the admission webhook
-are handled. Allowed values are `Ignore` or `Fail`. Defaults to `Ignore` in v1beta1.
+are handled. Allowed values are `Ignore` or `Fail`. Defaults to `Ignore` in v1beta1, and v1 has changed the default to `Fail`.
* `Ignore` means that an error calling the webhook is ignored and the API request is allowed to continue.
* `Fail` means that an error calling the webhook causes the admission to fail and the API request to be rejected.
diff --git a/content/en/docs/reference/command-line-tools-reference/feature-gates.md b/content/en/docs/reference/command-line-tools-reference/feature-gates.md
index b9feb726c8..b68056c516 100644
--- a/content/en/docs/reference/command-line-tools-reference/feature-gates.md
+++ b/content/en/docs/reference/command-line-tools-reference/feature-gates.md
@@ -72,12 +72,16 @@ different Kubernetes components.
| `CSIPersistentVolume` | `true` | GA | 1.13 | - |
| `CustomCPUCFSQuotaPeriod` | `false` | Alpha | 1.12 | |
| `CustomPodDNS` | `false` | Alpha | 1.9 | 1.9 |
-| `CustomPodDNS` | `true` | Beta| 1.10 | |
+| `CustomPodDNS` | `true` | Beta| 1.10 | 1.13 |
+| `CustomPodDNS` | `true` | GA | 1.14 | - |
+| `CustomResourcePublishOpenAPI` | `false` | Alpha| 1.14 | 1.14 |
+| `CustomResourcePublishOpenAPI` | `true` | Beta| 1.15 | |
| `CustomResourceSubresources` | `false` | Alpha | 1.10 | 1.11 |
| `CustomResourceSubresources` | `true` | Beta | 1.11 | - |
| `CustomResourceValidation` | `false` | Alpha | 1.8 | 1.8 |
| `CustomResourceValidation` | `true` | Beta | 1.9 | |
-| `CustomResourceWebhookConversion` | `false` | Alpha | 1.13 | |
+| `CustomResourceWebhookConversion` | `false` | Alpha | 1.13 | 1.14 |
+| `CustomResourceWebhookConversion` | `true` | Beta | 1.15 | |
| `DebugContainers` | `false` | Alpha | 1.10 | |
| `DevicePlugins` | `false` | Alpha | 1.8 | 1.9 |
| `DevicePlugins` | `true` | Beta | 1.10 | |
@@ -89,8 +93,9 @@ different Kubernetes components.
| `DynamicVolumeProvisioning` | `true` | Alpha | 1.3 | 1.7 |
| `DynamicVolumeProvisioning` | `true` | GA | 1.8 | |
| `EnableEquivalenceClassCache` | `false` | Alpha | 1.8 | |
-| `ExpandCSIVolumes` | `false` | Alpha | 1.14 | | |
-| `ExpandInUsePersistentVolumes` | `false` | Alpha | 1.11 | 1.13 | |
+| `ExpandCSIVolumes` | `false` | Alpha | 1.14 | |
+| `ExpandInUsePersistentVolumes` | `false` | Alpha | 1.11 | 1.14 |
+| `ExpandInUsePersistentVolumes` | `true` | Beta | 1.15 | |
| `ExpandPersistentVolumes` | `false` | Alpha | 1.8 | 1.10 |
| `ExpandPersistentVolumes` | `true` | Beta | 1.11 | |
| `ExperimentalCriticalPodAnnotation` | `false` | Alpha | 1.5 | |
@@ -107,7 +112,8 @@ different Kubernetes components.
| `KubeletPluginsWatcher` | `false` | Alpha | 1.11 | 1.11 |
| `KubeletPluginsWatcher` | `true` | Beta | 1.12 | 1.12 |
| `KubeletPluginsWatcher` | `true` | GA | 1.13 | - |
-| `KubeletPodResources` | `false` | Alpha | 1.13 | |
+| `KubeletPodResources` | `false` | Alpha | 1.13 | 1.14 |
+| `KubeletPodResources` | `true` | Beta | 1.15 | |
| `LocalStorageCapacityIsolation` | `false` | Alpha | 1.7 | 1.9 |
| `LocalStorageCapacityIsolation` | `true` | Beta| 1.10 | |
| `LocalStorageCapacityIsolationFSQuotaMonitoring` | `false` | Alpha| 1.15 | |
@@ -117,19 +123,23 @@ different Kubernetes components.
| `MountPropagation` | `true` | GA | 1.12 | |
| `NodeLease` | `false` | Alpha | 1.12 | 1.13 |
| `NodeLease` | `true` | Beta | 1.14 | |
+| `NonPreemptingPriority` | `false` | Alpha | 1.15 | |
| `PersistentLocalVolumes` | `false` | Alpha | 1.7 | 1.9 |
| `PersistentLocalVolumes` | `true` | Beta | 1.10 | 1.13 |
| `PersistentLocalVolumes` | `true` | GA | 1.14 | |
| `PodPriority` | `false` | Alpha | 1.8 | 1.10 |
| `PodPriority` | `true` | Beta | 1.11 | 1.13 |
| `PodPriority` | `true` | GA | 1.14 | |
-| `PodReadinessGates` | `false` | Alpha | 1.11 | |
-| `PodReadinessGates` | `true` | Beta | 1.12 | |
+| `PodReadinessGates` | `false` | Alpha | 1.11 | 1.11 |
+| `PodReadinessGates` | `true` | Beta | 1.12 | 1.13 |
+| `PodReadinessGates` | `true` | GA | 1.14 | - |
| `PodShareProcessNamespace` | `false` | Alpha | 1.10 | |
| `PodShareProcessNamespace` | `true` | Beta | 1.12 | |
| `ProcMountType` | `false` | Alpha | 1.12 | |
| `PVCProtection` | `false` | Alpha | 1.9 | 1.9 |
+| `RemainingItemCount` | `false` | Alpha | 1.15 | |
| `ResourceLimitsPriorityFunction` | `false` | Alpha | 1.9 | |
+| `RequestManagement` | `false` | Alpha | 1.15 | |
| `ResourceQuotaScopeSelectors` | `false` | Alpha | 1.11 | 1.11 |
| `ResourceQuotaScopeSelectors` | `true` | Beta | 1.12 | |
| `RotateKubeletClientCertificate` | `true` | Beta | 1.8 | |
@@ -139,14 +149,19 @@ different Kubernetes components.
| `RuntimeClass` | `true` | Beta | 1.14 | |
| `SCTPSupport` | `false` | Alpha | 1.12 | |
| `ServerSideApply` | `false` | Alpha | 1.14 | |
+| `ServiceLoadBalancerFinalizer` | `false` | Alpha | 1.15 | |
| `ServiceNodeExclusion` | `false` | Alpha | 1.8 | |
| `StorageObjectInUseProtection` | `true` | Beta | 1.10 | 1.10 |
| `StorageObjectInUseProtection` | `true` | GA | 1.11 | |
+| `StorageVersionHash` | `false` | Alpha | 1.14 | 1.14 |
+| `StorageVersionHash` | `true` | Beta | 1.15 | |
| `StreamingProxyRedirects` | `true` | Beta | 1.5 | |
| `SupportIPVSProxyMode` | `false` | Alpha | 1.8 | 1.8 |
| `SupportIPVSProxyMode` | `false` | Beta | 1.9 | 1.9 |
| `SupportIPVSProxyMode` | `true` | Beta | 1.10 | 1.10 |
| `SupportIPVSProxyMode` | `true` | GA | 1.11 | |
+| `SupportNodePidsLimit` | `false` | Alpha | 1.14 | 1.14 |
+| `SupportNodePidsLimit` | `true` | Beta | 1.15 | |
| `SupportPodPidsLimit` | `false` | Alpha | 1.10 | 1.13 |
| `SupportPodPidsLimit` | `true` | Beta | 1.14 | |
| `Sysctls` | `true` | Beta | 1.11 | |
@@ -159,6 +174,7 @@ different Kubernetes components.
| `TokenRequestProjection` | `false` | Alpha | 1.11 | 1.11 |
| `TokenRequestProjection` | `true` | Beta | 1.12 | |
| `TTLAfterFinished` | `false` | Alpha | 1.12 | |
+| `VolumePVCDataSource` | `false` | Alpha | 1.15 | |
| `VolumeScheduling` | `false` | Alpha | 1.9 | 1.9 |
| `VolumeScheduling` | `true` | Beta | 1.10 | 1.12 |
| `VolumeScheduling` | `true` | GA | 1.13 | |
@@ -167,6 +183,7 @@ different Kubernetes components.
| `VolumeSnapshotDataSource` | `false` | Alpha | 1.12 | - |
| `ScheduleDaemonSetPods` | `false` | Alpha | 1.11 | 1.11 |
| `ScheduleDaemonSetPods` | `true` | Beta | 1.12 | |
+| `WatchBookmark` | `false` | Alpha | 1.15 | |
| `WindowsGMSA` | `false` | Alpha | 1.14 | |
## Using a Feature
@@ -233,6 +250,7 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `CRIContainerLogRotation`: Enable container log rotation for cri container runtime.
- `CSIBlockVolume`: Enable external CSI volume drivers to support block storage. See the [`csi` raw block volume support](/docs/concepts/storage/volumes/#csi-raw-block-volume-support) documentation for more details.
- `CSIDriverRegistry`: Enable all logic related to the CSIDriver API object in csi.storage.k8s.io.
+- `CSIInlineVolume`: Enable CSI Inline volumes support for pods.
- `CSIMigration`: Enables shims and translation logic to route volume operations from in-tree plugins to corresponding pre-installed CSI plugins
- `CSIMigrationAWS`: Enables shims and translation logic to route volume operations from the AWS-EBS in-tree plugin to EBS CSI plugin
- `CSIMigrationAzureDisk`: Enables shims and translation logic to route volume operations from the Azure-Disk in-tree plugin to Azure Disk CSI plugin
@@ -248,6 +266,7 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `CustomPodDNS`: Enable customizing the DNS settings for a Pod using its `dnsConfig` property.
Check [Pod's DNS Config](/docs/concepts/services-networking/dns-pod-service/#pods-dns-config)
for more details.
+- `CustomResourcePublishOpenAPI`: Enables publishing of CRD OpenAPI specs.
- `CustomResourceSubresources`: Enable `/status` and `/scale` subresources
on resources created from [CustomResourceDefinition](/docs/concepts/api-extension/custom-resources/).
- `CustomResourceValidation`: Enable schema based validation on resources created from
@@ -288,6 +307,7 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `MountPropagation`: Enable sharing volume mounted by one container to other containers or pods.
For more details, please see [mount propagation](/docs/concepts/storage/volumes/#mount-propagation).
- `NodeLease`: Enable the new Lease API to report node heartbeats, which could be used as a node health signal.
+- `NonPreemptingPriority`: Enable NonPreempting option for PriorityClass and Pod.
- `PersistentLocalVolumes`: Enable the usage of `local` volume type in Pods.
Pod affinity has to be specified if requesting a `local` volume.
- `PodPriority`: Enable the descheduling and preemption of Pods based on their [priorities](/docs/concepts/configuration/pod-priority-preemption/).
@@ -302,6 +322,7 @@ Each feature gate is designed for enabling/disabling a specific feature:
assigns a lowest possible score of 1 to a node that satisfies at least one of
the input Pod's cpu and memory limits. The intent is to break ties between
nodes with same scores.
+- `RequestManagement`: Enable managing request concurrency with prioritization and fairness at each server.
- `ResourceQuotaScopeSelectors`: Enable resource quota scope selectors.
- `RotateKubeletClientCertificate`: Enable the rotation of the client TLS certificate on the kubelet.
See [kubelet configuration](/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/#kubelet-configuration) for more details.
@@ -312,10 +333,12 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `ScheduleDaemonSetPods`: Enable DaemonSet Pods to be scheduled by the default scheduler instead of the DaemonSet controller.
- `SCTPSupport`: Enables the usage of SCTP as `protocol` value in `Service`, `Endpoint`, `NetworkPolicy` and `Pod` definitions
- `ServerSideApply`: Enables the [Sever Side Apply (SSA)](/docs/reference/using-api/api-concepts/#server-side-apply) path at the API Server.
+- `ServiceLoadBalancerFinalizer`: Enable finalizer protection for Service load balancers.
- `ServiceNodeExclusion`: Enable the exclusion of nodes from load balancers created by a cloud provider.
A node is eligible for exclusion if annotated with "`alpha.service-controller.kubernetes.io/exclude-balancer`" key.
- `StorageObjectInUseProtection`: Postpone the deletion of PersistentVolume or
PersistentVolumeClaim objects if they are still being used.
+- `StorageVersionHash`: Allow apiservers to expose the storage version hash in the discovery.
- `StreamingProxyRedirects`: Instructs the API server to intercept (and follow)
redirects from the backend (kubelet) for streaming requests.
Examples of streaming requests include the `exec`, `attach` and `port-forward` requests.
@@ -331,12 +354,14 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `TokenRequestProjection`: Enable the injection of service account tokens into
a Pod through the [`projected` volume](/docs/concepts/storage/volumes/#projected).
- `TTLAfterFinished`: Allow a [TTL controller](/docs/concepts/workloads/controllers/ttlafterfinished/) to clean up resources after they finish execution.
+- `VolumePVCDataSource`: Enable support for specifying an existing PVC as a DataSource.
- `VolumeScheduling`: Enable volume topology aware scheduling and make the
PersistentVolumeClaim (PVC) binding aware of scheduling decisions. It also
enables the usage of [`local`](/docs/concepts/storage/volumes/#local) volume
type when used together with the `PersistentLocalVolumes` feature gate.
- `VolumeSnapshotDataSource`: Enable volume snapshot data source support.
- `VolumeSubpathEnvExpansion`: Enable `subPathExpr` field for expanding environment variables into a `subPath`.
+- `WatchBookmark`: Enable support for watch bookmark events.
- `WindowsGMSA`: Enables passing of GMSA credential specs from pods to container runtimes.
{{% /capture %}}
diff --git a/content/en/docs/reference/command-line-tools-reference/kube-apiserver.md b/content/en/docs/reference/command-line-tools-reference/kube-apiserver.md
index 7629481ed5..91567190ee 100644
--- a/content/en/docs/reference/command-line-tools-reference/kube-apiserver.md
+++ b/content/en/docs/reference/command-line-tools-reference/kube-apiserver.md
@@ -948,7 +948,7 @@ kube-apiserver [flags]
--tls-cipher-suites stringSlice
-
Comma-separated list of cipher suites for the server. If omitted, the default Go cipher suites will be use. Possible values: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,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_RC4_128_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,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_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
+
Comma-separated list of cipher suites for the server. If omitted, the default Go cipher suites will be used. Possible values: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,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_RC4_128_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,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_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
The IP address for the Kubelet to serve on (set to 0.0.0.0 for all IPv4 interfaces and `::` for all IPv6 interfaces) (default 0.0.0.0)
-
-
--allow-privileged
-
-
-
If true, allow containers to request privileged mode.
-
-
--alsologtostderr
diff --git a/content/en/docs/reference/glossary/cgroup.md b/content/en/docs/reference/glossary/cgroup.md
new file mode 100644
index 0000000000..564cb92e15
--- /dev/null
+++ b/content/en/docs/reference/glossary/cgroup.md
@@ -0,0 +1,17 @@
+---
+title: cgroup (control group)
+id: cgroup
+date: 2019-06-25
+full_link:
+short_description: >
+ A group of Linux processes with optional resource isolation, accounting and limits.
+
+aka:
+tags:
+- fundamental
+---
+A group of Linux processes with optional resource isolation, accounting and limits.
+
+
+
+cgroup is a Linux kernel feature that limits, accounts for, and isolates the resource usage (CPU, memory, disk I/O, network) for a collection of processes.
diff --git a/content/en/docs/reference/glossary/cluster.md b/content/en/docs/reference/glossary/cluster.md
index cca5e5ecc6..1442d4b9dc 100755
--- a/content/en/docs/reference/glossary/cluster.md
+++ b/content/en/docs/reference/glossary/cluster.md
@@ -1,19 +1,17 @@
---
title: Cluster
id: cluster
-date: 2018-04-12
+date: 2019-06-15
full_link:
short_description: >
- A set of machines, called nodes, that run containerized applications managed by Kubernetes.
+ A set of machines, called nodes, that run containerized applications managed by Kubernetes. A cluster has at least one worker node and at least one master node.
aka:
tags:
- fundamental
- operation
---
- A set of machines, called nodes, that run containerized applications managed by Kubernetes.
-
-
-
-A cluster has several worker nodes and at least one master node.
+A set of machines, called nodes, that run containerized applications managed by Kubernetes. A cluster has at least one worker node and at least one master node.
+
+The worker node(s) host the pods that are the components of the application. The master node(s) manages the worker nodes and the pods in the cluster. Multiple master nodes are used to provide a cluster with failover and high availability.
diff --git a/content/en/docs/reference/glossary/cncf.md b/content/en/docs/reference/glossary/cncf.md
new file mode 100755
index 0000000000..7b56de0df8
--- /dev/null
+++ b/content/en/docs/reference/glossary/cncf.md
@@ -0,0 +1,23 @@
+---
+title: Cloud Native Computing Foundation (CNCF)
+id: cncf
+date: 2019-05-26
+full_link: https://cncf.io/
+short_description: >
+ Cloud Native Computing Foundation
+
+aka:
+tags:
+- community
+---
+ The Cloud Native Computing Foundation (CNCF) builds sustainable ecosystems and
+ fosters a community around [projects](https://www.cncf.io/projects/) that
+ orchestrate containers as part of a microservices architecture.
+
+Kubernetes is a CNCF project.
+
+
+
+The CNCF is a sub-foundation of [the Linux Foundation](https://www.linuxfoundation.org/).
+Its mission is to make cloud native computing ubiquitous.
+
diff --git a/content/en/docs/reference/glossary/cri-o.md b/content/en/docs/reference/glossary/cri-o.md
index e6a0c13f2c..a5b0ca4a15 100644
--- a/content/en/docs/reference/glossary/cri-o.md
+++ b/content/en/docs/reference/glossary/cri-o.md
@@ -10,7 +10,7 @@ aka:
tags:
- tool
---
-A tool that lets you use OCI container runtimes witk Kubernetes CRI.
+A tool that lets you use OCI container runtimes with Kubernetes CRI.
diff --git a/content/en/docs/reference/glossary/kube-proxy.md b/content/en/docs/reference/glossary/kube-proxy.md
index 7c3a18b6fb..87be7e68ac 100755
--- a/content/en/docs/reference/glossary/kube-proxy.md
+++ b/content/en/docs/reference/glossary/kube-proxy.md
@@ -2,21 +2,24 @@
title: kube-proxy
id: kube-proxy
date: 2018-04-12
-full_link: /docs/reference/generated/kube-proxy
+full_link: /docs/reference/command-line-tools-reference/kube-proxy/
short_description: >
`kube-proxy` is a network proxy that runs on each node in the cluster.
-aka:
+aka:
tags:
- fundamental
-- core-object
+- networking
---
- `kube-proxy` is a network proxy that runs on each node in the cluster.
+ [kube-proxy](/docs/reference/command-line-tools-reference/kube-proxy/) is a
+network proxy that runs on each node in your cluster, implementing part of
+the Kubernetes {{< glossary_tooltip term_id="service">}} concept.
-It enables the Kubernetes service abstraction by maintaining network rules on
-the host and performing connection forwarding.
+
-
-
-`kube-proxy` is responsible for request forwarding. `kube-proxy` allows TCP and UDP stream forwarding or round robin TCP and UDP forwarding across a set of backend functions.
+kube-proxy maintains network rules on nodes. These network rules allow
+network communication to your Pods from network sessions inside or outside
+of your cluster.
+kube-proxy uses the operating system packet filtering layer if there is one
+and it's available. Otherwise, kube-proxy forwards the traffic itself.
diff --git a/content/en/docs/reference/glossary/operator-pattern.md b/content/en/docs/reference/glossary/operator-pattern.md
new file mode 100755
index 0000000000..2b244093d2
--- /dev/null
+++ b/content/en/docs/reference/glossary/operator-pattern.md
@@ -0,0 +1,24 @@
+---
+title: Operator pattern
+id: operator-pattern
+date: 2019-05-21
+full_link: /docs/concepts/extend-kubernetes/operator/
+short_description: >
+ A specialized controller used to manage a custom resource
+
+aka:
+tags:
+- architecture
+---
+ The [operator pattern](/docs/concepts/extend-kubernetes/operator/) is a system
+design that links a {{< glossary_tooltip term_id="controller" >}} to one or more custom
+resources.
+
+
+
+You can extend Kubernetes by adding controllers to your cluster, beyond the built-in
+controllers that come as part of Kubernetes itself.
+
+If a running application acts as a controller and has API access to carry out tasks
+against a custom resource that's defined in the control plane, that's an example of
+the Operator pattern.
diff --git a/content/en/docs/reference/kubectl/cheatsheet.md b/content/en/docs/reference/kubectl/cheatsheet.md
index 7a52021515..19a0b78f4f 100644
--- a/content/en/docs/reference/kubectl/cheatsheet.md
+++ b/content/en/docs/reference/kubectl/cheatsheet.md
@@ -1,7 +1,6 @@
---
title: kubectl Cheat Sheet
reviewers:
-- bgrant0607
- erictune
- krousey
- clove
@@ -160,7 +159,7 @@ kubectl get services --sort-by=.metadata.name # List Services Sorted by Name
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# Get the version label of all pods with label app=cassandra
-kubectl get pods --selector=app=cassandra rc -o \
+kubectl get pods --selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'
# Get all worker nodes (use a selector to exclude results that have a label
@@ -349,7 +348,7 @@ Kubectl verbosity is controlled with the `-v` or `--v` flags followed by an inte
Verbosity | Description
--------------| -----------
-`--v=0` | Generally useful for this to ALWAYS be visible to an operator.
+`--v=0` | Generally useful for this to *always* be visible to a cluster operator.
`--v=1` | A reasonable default log level if you don't want verbosity.
`--v=2` | Useful steady state information about the service and important log messages that may correlate to significant changes in the system. This is the recommended default log level for most systems.
`--v=3` | Extended information about changes.
diff --git a/content/en/docs/reference/kubectl/conventions.md b/content/en/docs/reference/kubectl/conventions.md
index 558e4aa4e0..372c73bba7 100644
--- a/content/en/docs/reference/kubectl/conventions.md
+++ b/content/en/docs/reference/kubectl/conventions.md
@@ -1,7 +1,6 @@
---
title: kubectl Usage Conventions
reviewers:
-- bgrant0607
- janetkuo
content_template: templates/concept
---
@@ -37,15 +36,19 @@ For `kubectl run` to satisfy infrastructure as code:
You can create the following resources using `kubectl run` with the `--generator` flag:
-| Resource | api group | kubectl command |
-|---------------------------------|--------------------|---------------------------------------------------|
-| Pod | v1 | `kubectl run --generator=run-pod/v1` |
-| Replication controller | v1 | `kubectl run --generator=run/v1` |
-| Deployment (deprecated) | extensions/v1beta1 | `kubectl run --generator=deployment/v1beta1` |
-| Deployment (deprecated) | apps/v1beta1 | `kubectl run --generator=deployment/apps.v1beta1` |
-| Job (deprecated) | batch/v1 | `kubectl run --generator=job/v1` |
-| CronJob (default) | batch/v1beta1 | `kubectl run --generator=cronjob/v1beta1` |
-| CronJob (deprecated) | batch/v2alpha1 | `kubectl run --generator=cronjob/v2alpha1` |
+| Resource | api group | kubectl command |
+|-------------------------------------|--------------------|---------------------------------------------------|
+| Pod | v1 | `kubectl run --generator=run-pod/v1` |
+| Replication controller (deprecated) | v1 | `kubectl run --generator=run/v1` |
+| Deployment (deprecated) | extensions/v1beta1 | `kubectl run --generator=deployment/v1beta1` |
+| Deployment (deprecated) | apps/v1beta1 | `kubectl run --generator=deployment/apps.v1beta1` |
+| Job (deprecated) | batch/v1 | `kubectl run --generator=job/v1` |
+| CronJob (deprecated) | batch/v1beta1 | `kubectl run --generator=cronjob/v1beta1` |
+| CronJob (deprecated) | batch/v2alpha1 | `kubectl run --generator=cronjob/v2alpha1` |
+
+{{< note >}}
+`kubectl run --generator` except for `run-pod/v1` is deprecated in v1.12.
+{{< /note >}}
If you do not specify a generator flag, other flags prompt you to use a specific generator. The following table lists the flags that force you to use specific generators, depending on the version of the cluster:
@@ -75,4 +78,4 @@ flag, which provides the object to be submitted to the cluster.
* You can use `kubectl apply` to create or update resources. For more information about using kubectl apply to update resources, see [Kubectl Book](https://kubectl.docs.kubernetes.io).
-{{% /capture %}}
\ No newline at end of file
+{{% /capture %}}
diff --git a/content/en/docs/reference/kubectl/docker-cli-to-kubectl.md b/content/en/docs/reference/kubectl/docker-cli-to-kubectl.md
index 99d951a90f..d84db8e670 100644
--- a/content/en/docs/reference/kubectl/docker-cli-to-kubectl.md
+++ b/content/en/docs/reference/kubectl/docker-cli-to-kubectl.md
@@ -2,7 +2,6 @@
title: kubectl for Docker Users
content_template: templates/concept
reviewers:
-- bgrant0607
- brendandburns
- thockin
---
diff --git a/content/en/docs/reference/kubectl/overview.md b/content/en/docs/reference/kubectl/overview.md
index 25d39a4e02..fb1bc238e4 100644
--- a/content/en/docs/reference/kubectl/overview.md
+++ b/content/en/docs/reference/kubectl/overview.md
@@ -1,6 +1,5 @@
---
reviewers:
-- bgrant0607
- hw-qiaolei
title: Overview of kubectl
content_template: templates/concept
diff --git a/content/en/docs/reference/kubernetes-api/index.md b/content/en/docs/reference/kubernetes-api/index.md
index 8f7d769af7..072047a0bb 100644
--- a/content/en/docs/reference/kubernetes-api/index.md
+++ b/content/en/docs/reference/kubernetes-api/index.md
@@ -1,5 +1,5 @@
---
-title: v1.14
+title: v1.15
---
-[Kubernetes API v1.14](/docs/reference/generated/kubernetes-api/v1.14/)
+[Kubernetes API v1.15](/docs/reference/generated/kubernetes-api/v1.15/)
diff --git a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md
index e84c50c66e..6ff70db9dc 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md
@@ -206,55 +206,9 @@ point to the CA certificate and key.
### Managing the kubeadm drop-in file for the kubelet {#kubelet-drop-in}
-The kubeadm package ships with configuration for how the kubelet should
-be run. Note that the `kubeadm` CLI command never touches this drop-in file.
-This drop-in file belongs to the kubeadm deb/rpm package.
+The `kubeadm` package ships with a configuration file for running the `kubelet` by `systemd`. Note that the kubeadm CLI never touches this drop-in file. This drop-in file is part of the kubeadm DEB/RPM package.
-This is what it looks like:
-
-
-```
-[Service]
-Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf
---kubeconfig=/etc/kubernetes/kubelet.conf"
-Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
-# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating
-the KUBELET_KUBEADM_ARGS variable dynamically
-EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
-# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably,
-#the user should use the .NodeRegistration.KubeletExtraArgs object in the configuration files instead.
-# KUBELET_EXTRA_ARGS should be sourced from this file.
-EnvironmentFile=-/etc/default/kubelet
-ExecStart=
-ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
-```
-
-Here's a breakdown of what/why:
-
-* `--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf` path to a kubeconfig
- file that is used to get client certificates for kubelet during node join.
- On success, a kubeconfig file is written to the path specified by `--kubeconfig`.
-* `--kubeconfig=/etc/kubernetes/kubelet.conf` points to the kubeconfig file that
- tells the kubelet where the API server is. This file also has the kubelet's
- credentials.
-* `--pod-manifest-path=/etc/kubernetes/manifests` specifies from where to read
- static Pod manifests used for starting the control plane.
-* `--allow-privileged=true` allows this kubelet to run privileged Pods.
-* `--network-plugin=cni` uses CNI networking.
-* `--cni-conf-dir=/etc/cni/net.d` specifies where to look for the
- [CNI spec file(s)](https://github.com/containernetworking/cni/blob/master/SPEC.md).
-* `--cni-bin-dir=/opt/cni/bin` specifies where to look for the actual CNI binaries.
-* `--cluster-dns=10.96.0.10` use this cluster-internal DNS server for `nameserver`
- entries in Pods' `/etc/resolv.conf`.
-* `--cluster-domain=cluster.local` uses this cluster-internal DNS domain for
- `search` entries in Pods' `/etc/resolv.conf`.
-* `--client-ca-file=/etc/kubernetes/pki/ca.crt` authenticates requests to the Kubelet
- API using this CA certificate.
-* `--authorization-mode=Webhook` authorizes requests to the Kubelet API by `POST`-ing
- a `SubjectAccessReview` to the API server.
-* `--rotate-certificates` auto rotate the kubelet client certificates by requesting new
- certificates from the `kube-apiserver` when the certificate expiration approaches.
-* `--cert-dir`the directory where the TLS certs are located.
+For further information, see [Managing the kubeadm drop-in file for systemd](/docs/setup/production-environment/tools/kubeadm/kubelet-integration/#the-kubelet-drop-in-file-for-systemd).
### Use kubeadm with CRI runtimes
diff --git a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-join.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-join.md
index 8434a07206..817c279d84 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-join.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-join.md
@@ -131,7 +131,7 @@ using one of the other modes if possible.
**Example `kubeadm join` command:**
```shell
-kubeadm join --token abcdef.1234567890abcdef --discovery-token-unsafe-skip-ca-verification 1.2.3.4:6443`
+kubeadm join --token abcdef.1234567890abcdef --discovery-token-unsafe-skip-ca-verification 1.2.3.4:6443
```
**Advantages:**
diff --git a/content/en/docs/reference/setup-tools/kubeadm/kubeadm.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm.md
index a3f4d80d8e..77e4542633 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/kubeadm.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm.md
@@ -9,12 +9,16 @@ card:
name: reference
weight: 40
---
-Kubeadm is a tool built to provide `kubeadm init` and `kubeadm join` as best-practice “fast paths” for creating Kubernetes clusters.
+Kubeadm is a tool built to provide `kubeadm init` and `kubeadm join` as best-practice “fast paths” for creating Kubernetes clusters.
kubeadm performs the actions necessary to get a minimum viable cluster up and running. By design, it cares only about bootstrapping, not about provisioning machines. Likewise, installing various nice-to-have addons, like the Kubernetes Dashboard, monitoring solutions, and cloud-specific addons, is not in scope.
Instead, we expect higher-level and more tailored tooling to be built on top of kubeadm, and ideally, using kubeadm as the basis of all deployments will make it easier to create conformant clusters.
+## How to install
+
+To install kubeadm, see the [installation guide](/docs/setup/production-environment/tools/kubeadm/install-kubeadm).
+
## What's next
* [kubeadm init](/docs/reference/setup-tools/kubeadm/kubeadm-init) to bootstrap a Kubernetes control-plane node
diff --git a/content/en/docs/reference/using-api/api-concepts.md b/content/en/docs/reference/using-api/api-concepts.md
index 6d2c4b694e..0b042071b8 100644
--- a/content/en/docs/reference/using-api/api-concepts.md
+++ b/content/en/docs/reference/using-api/api-concepts.md
@@ -1,7 +1,6 @@
---
title: Kubernetes API Concepts
reviewers:
-- bgrant0607
- smarterclayton
- lavalamp
- liggitt
diff --git a/content/en/docs/reference/using-api/api-overview.md b/content/en/docs/reference/using-api/api-overview.md
index f74a204f38..a004c86353 100644
--- a/content/en/docs/reference/using-api/api-overview.md
+++ b/content/en/docs/reference/using-api/api-overview.md
@@ -1,7 +1,6 @@
---
title: Kubernetes API Overview
reviewers:
-- bgrant0607
- erictune
- lavalamp
- jbeda
@@ -48,7 +47,7 @@ The API versioning and software versioning are indirectly related. The [API and
versioning proposal](https://git.k8s.io/community/contributors/design-proposals/release/versioning.md) describes the relationship between API versioning and software versioning.
{{< /note >}}
-Different API versions indicate different levels of stability and support. You can find more information about the criteria for each level in the [API Changes documentation](https://git.k8s.io/community/contributors/devel/api_changes.md#alpha-beta-and-stable-versions).
+Different API versions indicate different levels of stability and support. You can find more information about the criteria for each level in the [API Changes documentation](https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions).
Here's a summary of each level:
diff --git a/content/en/docs/reference/using-api/client-libraries.md b/content/en/docs/reference/using-api/client-libraries.md
index 4022adf13a..b80fcae4ef 100644
--- a/content/en/docs/reference/using-api/client-libraries.md
+++ b/content/en/docs/reference/using-api/client-libraries.md
@@ -35,6 +35,7 @@ Machinery](https://github.com/kubernetes/community/tree/master/sig-api-machinery
| Java | [github.com/kubernetes-client/java](https://github.com/kubernetes-client/java/) | [browse](https://github.com/kubernetes-client/java#installation)
| dotnet | [github.com/kubernetes-client/csharp](https://github.com/kubernetes-client/csharp) | [browse](https://github.com/kubernetes-client/csharp/tree/master/examples/simple)
| JavaScript | [github.com/kubernetes-client/javascript](https://github.com/kubernetes-client/javascript) | [browse](https://github.com/kubernetes-client/javascript/tree/master/examples)
+| Haskell | [github.com/kubernetes-client/haskell](https://github.com/kubernetes-client/haskell) | [browse](https://github.com/kubernetes-client/haskell/tree/master/kubernetes-client/example)
## Community-maintained client libraries
diff --git a/content/en/docs/setup/_index.md b/content/en/docs/setup/_index.md
index 4684922bba..1fe527caac 100644
--- a/content/en/docs/setup/_index.md
+++ b/content/en/docs/setup/_index.md
@@ -41,8 +41,8 @@ If you're learning Kubernetes, use the Docker-based solutions: tools supported b
|Community |Ecosystem |
| ------------ | -------- |
| [Minikube](/docs/setup/learning-environment/minikube/) | [CDK on LXD](https://www.ubuntu.com/kubernetes/docs/install-local) |
-| [Kubeadm-dind](https://github.com/kubernetes-sigs/kubeadm-dind-cluster) | [Docker Desktop](https://www.docker.com/products/docker-desktop)|
-| [Kubernetes IN Docker](https://github.com/kubernetes-sigs/kind) | [Minishift](https://docs.okd.io/latest/minishift/)|
+| [kind (Kubernetes IN Docker)](https://github.com/kubernetes-sigs/kind) | [Docker Desktop](https://www.docker.com/products/docker-desktop)|
+| | [Minishift](https://docs.okd.io/latest/minishift/)|
| | [MicroK8s](https://microk8s.io/)|
| | [IBM Cloud Private-CE (Community Edition)](https://github.com/IBM/deploy-ibm-cloud-private) |
| | [IBM Cloud Private-CE (Community Edition) on Linux Containers](https://github.com/HSBawa/icp-ce-on-linux-containers)|
@@ -70,6 +70,7 @@ The following production environment solutions table lists the providers and the
| [Amazon](https://aws.amazon.com) | [Amazon EKS](https://aws.amazon.com/eks/) |[Amazon EC2](https://aws.amazon.com/ec2/) | | | |
| [AppsCode](https://appscode.com/products/pharmer/) | ✔ | | | | |
| [APPUiO](https://appuio.ch/) | ✔ | ✔ | ✔ | | | |
+| [Banzai Cloud Pipeline Kubernetes Engine (PKE)](https://banzaicloud.com/products/pke/) | | ✔ | | ✔ | ✔ | ✔ |
| [CenturyLink Cloud](https://www.ctl.io/) | | ✔ | | | |
| [Cisco Container Platform](https://cisco.com/go/containers) | | | ✔ | | |
| [Cloud Foundry Container Runtime (CFCR)](https://docs-cfcr.cfapps.io/) | | | | ✔ |✔ |
@@ -81,10 +82,11 @@ The following production environment solutions table lists the providers and the
| [Docker Enterprise](https://www.docker.com/products/docker-enterprise) | |✔ | ✔ | | | ✔
| [Fedora (Multi Node)](https://kubernetes.io/docs/getting-started-guides/fedora/flannel_multi_node_cluster/) | | | | | ✔ | ✔
| [Fedora (Single Node)](https://kubernetes.io/docs/getting-started-guides/fedora/fedora_manual_config/) | | | | | | ✔
-| [Gardner](https://gardener.cloud/) | |✔ | | ✔ | |
+| [Gardener](https://gardener.cloud/) | |✔ | | ✔ | |
| [Giant Swarm](https://giantswarm.io/) | ✔ | ✔ | ✔ | |
| [Google](https://cloud.google.com/) | [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine/) | [Google Compute Engine (GCE)](https://cloud.google.com/compute/)|[GKE On-Prem](https://cloud.google.com/gke-on-prem/) | | | | | | | |
| [IBM](https://www.ibm.com/in-en/cloud) | [IBM Cloud Kubernetes Service](https://cloud.ibm.com/kubernetes/catalog/cluster)| |[IBM Cloud Private](https://www.ibm.com/in-en/cloud/private) | |
+| [Ionos](https://www.ionos.com/enterprise-cloud) | [Ionos Managed Kubernetes](https://www.ionos.com/enterprise-cloud/managed-kubernetes) | [Ionos Enterprise Cloud](https://www.ionos.com/enterprise-cloud) | |
| [Kontena Pharos](https://www.kontena.io/pharos/) | |✔| ✔ | | |
| [Kubermatic](https://www.loodse.com/) | ✔ | ✔ | ✔ | | |
| [KubeSail](https://kubesail.com/) | ✔ | | | | |
@@ -104,6 +106,7 @@ The following production environment solutions table lists the providers and the
| [Supergiant](https://supergiant.io/) | |✔ | | | |
| [SUSE](https://www.suse.com/) | | ✔ | | | |
| [SysEleven](https://www.syseleven.io/) | ✔ | | | | |
+| [Tencent Cloud](https://intl.cloud.tencent.com/) | [Tencent Kubernetes Engine](https://intl.cloud.tencent.com/product/tke) | ✔ | ✔ | | | ✔ |
| [VEXXHOST](https://vexxhost.com/) | ✔ | ✔ | | | |
| [VMware](https://cloud.vmware.com/) | [VMware Cloud PKS](https://cloud.vmware.com/vmware-cloud-pks) |[VMware Enterprise PKS](https://cloud.vmware.com/vmware-enterprise-pks) | [VMware Enterprise PKS](https://cloud.vmware.com/vmware-enterprise-pks) | [VMware Essential PKS](https://cloud.vmware.com/vmware-essential-pks) | |[VMware Essential PKS](https://cloud.vmware.com/vmware-essential-pks)
diff --git a/content/en/docs/setup/learning-environment/minikube.md b/content/en/docs/setup/learning-environment/minikube.md
index 11e8790968..0d3325b99d 100644
--- a/content/en/docs/setup/learning-environment/minikube.md
+++ b/content/en/docs/setup/learning-environment/minikube.md
@@ -455,10 +455,8 @@ export no_proxy=$no_proxy,$(minikube ip)
```
## Known Issues
-* Features that require a Cloud Provider will not work in Minikube. These include:
- * LoadBalancers
-* Features that require multiple nodes. These include:
- * Advanced scheduling policies
+
+Features that require multiple nodes will not work in Minikube.
## Design
diff --git a/content/en/docs/setup/production-environment/tools/krib.md b/content/en/docs/setup/production-environment/tools/krib.md
index 30da27fb38..98b7cb16df 100644
--- a/content/en/docs/setup/production-environment/tools/krib.md
+++ b/content/en/docs/setup/production-environment/tools/krib.md
@@ -29,7 +29,7 @@ KRIB features:
## Creating a cluster
-Review [Digital Rebar documentation](https://https://provision.readthedocs.io/en/tip/README.html) for details about installing the platform.
+Review [Digital Rebar documentation](https://provision.readthedocs.io/en/tip/README.html) for details about installing the platform.
The Digital Rebar Provision Golang binary should be installed on a Linux-like system with 16 GB of RAM or larger (Packet.net Tiny and Rasberry Pi are also acceptable).
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 7a03137669..960f183078 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
@@ -21,10 +21,15 @@ The `extraArgs` field consist of `key: value` pairs. To override a flag for a co
1. Add the appropriate fields to your configuration.
2. Add the flags to override to the field.
+3. Run `kubeadm init` with `--config `.
For more details on each field in the configuration you can navigate to our
[API reference pages](https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2#ClusterConfiguration).
+{{< note >}}
+You can generate a `ClusterConfiguration` object with default values by running `kubeadm config print init-defaults` and saving the output to a file of your choice.
+{{< /note >}}
+
{{% /capture %}}
{{% capture body %}}
@@ -38,12 +43,10 @@ Example usage:
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.13.0
-metadata:
- name: 1.13-sample
apiServer:
extraArgs:
advertise-address: 192.168.0.103
- anonymous-auth: false
+ anonymous-auth: "false"
enable-admission-plugins: AlwaysPullImages,DefaultStorageClass
audit-log-path: /home/johndoe/audit.log
```
@@ -57,13 +60,11 @@ Example usage:
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.13.0
-metadata:
- name: 1.13-sample
controllerManager:
extraArgs:
cluster-signing-key-file: /home/johndoe/keys/ca.key
bind-address: 0.0.0.0
- deployment-controller-sync-period: 50
+ deployment-controller-sync-period: "50"
```
## Scheduler flags
@@ -75,8 +76,6 @@ Example usage:
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.13.0
-metadata:
- name: 1.13-sample
scheduler:
extraArgs:
address: 0.0.0.0
diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm.md b/content/en/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm.md
index e4373ab3be..de917f4a92 100644
--- a/content/en/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm.md
+++ b/content/en/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm.md
@@ -8,7 +8,7 @@ weight: 30
{{% capture overview %}}
-**kubeadm** helps you bootstrap a minimum viable Kubernetes cluster that conforms to best practices. With kubeadm, your cluster should pass [Kubernetes Conformance tests](https://kubernetes.io/blog/2017/10/software-conformance-certification). Kubeadm also supports other cluster
+**kubeadm** helps you bootstrap a minimum viable Kubernetes cluster that conforms to best practices. With kubeadm, your cluster should pass [Kubernetes Conformance tests](https://kubernetes.io/blog/2017/10/software-conformance-certification). Kubeadm also supports other cluster
lifecycle functions, such as upgrades, downgrade, and managing [bootstrap tokens](/docs/reference/access-authn-authz/bootstrap-tokens/).
Because you can install kubeadm on various types of machine (e.g. laptop, server,
@@ -295,7 +295,7 @@ Make sure that your network manifest supports RBAC.
Also, beware, that your Pod network must not overlap with any of the host networks as this can cause issues.
If you find a collision between your network plugin’s preferred Pod network and some of your host networks, you should think of a suitable CIDR replacement and use that during `kubeadm init` with `--pod-network-cidr` and as a replacement in your network plugin’s YAML.
-You can install a pod network add-on with the following command:
+You can install a pod network add-on with the following command on the control-plane node or a node that has the kubeconfig credentials:
```bash
kubectl apply -f
@@ -308,13 +308,19 @@ You can install only one pod network per cluster.
Please select one of the tabs to see installation instructions for the respective third-party Pod Network Provider.
{{% /tab %}}
+{{% tab name="AWS VPC" %}}
+AWS VPC CNI provides native AWS VPC networking to Kubernetes clusters.
+
+For installation, please refer to the [AWS VPC CNI setup guide](https://github.com/aws/amazon-vpc-cni-k8s#setup).
+{{% /tab %}}
+
{{% tab name="Calico" %}}
For more information about using Calico, see [Quickstart for Calico on Kubernetes](https://docs.projectcalico.org/latest/getting-started/kubernetes/), [Installing Calico for policy and networking](https://docs.projectcalico.org/latest/getting-started/kubernetes/installation/calico), and other related resources.
For Calico to work correctly, you need to pass `--pod-network-cidr=192.168.0.0/16` to `kubeadm init` or update the `calico.yml` file to match your Pod network. Note that Calico works on `amd64`, `arm64`, and `ppc64le` only.
```shell
-kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml
+kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
```
{{% /tab %}}
@@ -324,7 +330,7 @@ Canal uses Calico for policy and Flannel for networking. Refer to the Calico doc
For Canal to work correctly, `--pod-network-cidr=10.244.0.0/16` has to be passed to `kubeadm init`. Note that Canal works on `amd64` only.
```shell
-kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/canal.yaml
+kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/canal.yaml
```
{{% /tab %}}
@@ -361,6 +367,16 @@ cilium-drxkl 1/1 Running 0 18m
```
{{% /tab %}}
+
+{{% tab name="Contiv-VPP" %}}
+[Contiv-VPP](https://contivpp.io/) employs a programmable CNF vSwitch based on [FD.io VPP](https://fd.io/),
+offering feature-rich & high-performance cloud-native networking and services.
+
+It implements k8s services and network policies in the user space (on VPP).
+
+Please refer to this installation guide: [Contiv-VPP Manual Installation](https://github.com/contiv/vpp/blob/master/docs/setup/MANUAL_INSTALL.md)
+{{% /tab %}}
+
{{% tab name="Flannel" %}}
For `flannel` to work correctly, you must pass `--pod-network-cidr=10.244.0.0/16` to `kubeadm init`.
@@ -384,6 +400,16 @@ For more information about `flannel`, see [the CoreOS flannel repository on GitH
](https://github.com/coreos/flannel).
{{% /tab %}}
+{{% tab name="JuniperContrail/TungstenFabric" %}}
+Provides overlay SDN solution, delivering multicloud networking, hybrid cloud networking,
+simultaneous overlay-underlay support, network policy enforcement, network isolation,
+service chaining and flexible load balancing.
+
+There are multiple, flexible ways to install JuniperContrail/TungstenFabric CNI.
+
+Kindly refer to this quickstart: [TungstenFabric](https://tungstenfabric.github.io/website/)
+{{% /tab %}}
+
{{% tab name="Kube-router" %}}
Set `/proc/sys/net/bridge/bridge-nf-call-iptables` to `1` by running `sysctl net.bridge.bridge-nf-call-iptables=1`
to pass bridged IPv4 traffic to iptables' chains. This is a requirement for some CNI plugins to work, for more information
@@ -426,25 +452,6 @@ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl versio
```
{{% /tab %}}
-{{% tab name="JuniperContrail/TungstenFabric" %}}
-Provides overlay SDN solution, delivering multicloud networking, hybrid cloud networking,
-simultaneous overlay-underlay support, network policy enforcement, network isolation,
-service chaining and flexible load balancing.
-
-There are multiple, flexible ways to install JuniperContrail/TungstenFabric CNI.
-
-Kindly refer to this quickstart: [TungstenFabric](https://tungstenfabric.github.io/website/)
-{{% /tab %}}
-
-{{% tab name="Contiv-VPP" %}}
-[Contiv-VPP](https://contivpp.io/) employs a programmable CNF vSwitch based on [FD.io VPP](https://fd.io/),
-offering feature-rich & high-performance cloud-native networking and services.
-
-It implements k8s services and network policies in the user space (on VPP).
-
-Please refer to this installation guide: [Contiv-VPP Manual Installation](https://github.com/contiv/vpp/blob/master/docs/setup/MANUAL_INSTALL.md)
-{{% /tab %}}
-
{{< /tabs >}}
diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/ha-topology.md b/content/en/docs/setup/production-environment/tools/kubeadm/ha-topology.md
index 23806e3d20..9679858c35 100644
--- a/content/en/docs/setup/production-environment/tools/kubeadm/ha-topology.md
+++ b/content/en/docs/setup/production-environment/tools/kubeadm/ha-topology.md
@@ -30,7 +30,7 @@ kubeadm that run control plane components.
Each control plane node runs an instance of the `kube-apiserver`, `kube-scheduler`, and `kube-controller-manager`.
The `kube-apiserver` is exposed to worker nodes using a load balancer.
-Each control plane node creates a local etcd member and this etcd member communicate only with
+Each control plane node creates a local etcd member and this etcd member communicates only with
the `kube-apiserver` of this node. The same applies to the local `kube-controller-manager`
and `kube-scheduler` instances.
diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/high-availability.md b/content/en/docs/setup/production-environment/tools/kubeadm/high-availability.md
index aa43e00b82..53f9efa8ce 100644
--- a/content/en/docs/setup/production-environment/tools/kubeadm/high-availability.md
+++ b/content/en/docs/setup/production-environment/tools/kubeadm/high-availability.md
@@ -105,10 +105,13 @@ option. Your cluster requirements may need a different configuration.
```sh
sudo kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" --upload-certs
```
+<<<<<<< HEAD
- You can use the `--kubernetes-version` flag to set the Kubernetes version to use.
It is recommended that the versions of kubeadm, kubelet, kubectl and Kubernetes match.
- The `--control-plane-endpoint` flag should be set to the address or DNS and port of the load balancer.
+=======
+>>>>>>> upstream/master
- The `--upload-certs` flag is used to upload the certificates that should be shared
across all the control-plane instances to the cluster. If instead, you prefer to copy certs across
control-plane nodes manually or using automation tools, please remove this flag and refer to [Manual
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 b7315a74d7..1f9354d405 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
@@ -10,7 +10,7 @@ card:
{{% capture overview %}}
-This page shows how to install the `kubeadm` toolbox.
+This page shows how to install the `kubeadm` toolbox.
For information how to create a cluster with kubeadm once you have performed this installation process, see the [Using kubeadm to Create a Cluster](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/) page.
{{% /capture %}}
@@ -169,7 +169,6 @@ enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
-exclude=kube*
EOF
# Set SELinux in permissive mode (effectively disabling it)
diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md b/content/en/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md
index 01f63556f4..f3ca59d898 100644
--- a/content/en/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md
+++ b/content/en/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md
@@ -138,7 +138,7 @@ If the reload and restart are successful, the normal `kubeadm init` workflow con
### Workflow when using `kubeadm join`
-When you run `kubeadm join`, kubeadm uses the Bootstrap Token credential perform
+When you run `kubeadm join`, kubeadm uses the Bootstrap Token credential to perform
a TLS bootstrap, which fetches the credential needed to download the
`kubelet-config-1.X` ConfigMap and writes it to `/var/lib/kubelet/config.yaml`. The dynamic
environment file is generated in exactly the same way as `kubeadm init`.
diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/self-hosting.md b/content/en/docs/setup/production-environment/tools/kubeadm/self-hosting.md
index 090b5efd5b..a0e89f706f 100644
--- a/content/en/docs/setup/production-environment/tools/kubeadm/self-hosting.md
+++ b/content/en/docs/setup/production-environment/tools/kubeadm/self-hosting.md
@@ -16,13 +16,18 @@ manager, and scheduler run as [DaemonSet pods](/docs/concepts/workloads/controll
configured via the Kubernetes API instead of [static pods](/docs/tasks/administer-cluster/static-pod/)
configured in the kubelet via static files.
-To create a self-hosted cluster see the `kubeadm alpha selfhosting pivot` command.
+To create a self-hosted cluster see the
+[kubeadm alpha selfhosting pivot](/docs/reference/setup-tools/kubeadm/kubeadm-alpha/#cmd-selfhosting) command.
+
+{{% /capture %}}
+
+{{% capture body %}}
#### Caveats
{{< caution >}}
This feature pivots your cluster into an unsupported state, rendering kubeadm unable
-to manage you cluster any longer. This includes `kubeadm upagrade`.
+to manage you cluster any longer. This includes `kubeadm upgrade`.
{{< /caution >}}
1. Self-hosting in 1.8 and later has some important limitations. In particular, a
@@ -30,7 +35,7 @@ to manage you cluster any longer. This includes `kubeadm upagrade`.
without manual intervention.
1. By default, self-hosted control plane Pods rely on credentials loaded from
- [`hostPath`](https://kubernetes.io/docs/concepts/storage/volumes/#hostpath)
+ [`hostPath`](/docs/concepts/storage/volumes/#hostpath)
volumes. Except for initial creation, these credentials are not managed by
kubeadm.
@@ -61,3 +66,5 @@ In summary, `kubeadm alpha selfhosting` works as follows:
1. When the original static control plane stops, the new self-hosted control
plane is able to bind to listening ports and become active.
+
+{{% /capture %}}
diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md b/content/en/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md
index abe560e87f..24adbbea62 100644
--- a/content/en/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md
+++ b/content/en/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md
@@ -53,7 +53,8 @@ this example.
cat << EOF > /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf
[Service]
ExecStart=
- ExecStart=/usr/bin/kubelet --address=127.0.0.1 --pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true
+ # Replace "systemd" with the cgroup driver of your container runtime. The default value in the kubelet is "cgroupfs".
+ ExecStart=/usr/bin/kubelet --address=127.0.0.1 --pod-manifest-path=/etc/kubernetes/manifests --cgroup-driver=systemd
Restart=always
EOF
diff --git a/content/en/docs/setup/production-environment/turnkey/tencent.md b/content/en/docs/setup/production-environment/turnkey/tencent.md
new file mode 100644
index 0000000000..fadef5d3dd
--- /dev/null
+++ b/content/en/docs/setup/production-environment/turnkey/tencent.md
@@ -0,0 +1,19 @@
+---
+title: Running Kubernetes on Tencent Kubernetes Engine
+---
+
+## Tencent Kubernetes Engine
+
+ [Tencent Cloud Tencent Kubernetes Engine (TKE)](https://intl.cloud.tencent.com/product/tke) provides native Kubernetes container management services. You can deploy and manage a Kubernetes cluster with TKE in just a few steps. For detailed directions, see [Deploy Tencent Kubernetes Engine](https://intl.cloud.tencent.com/document/product/457/11741).
+
+ TKE is a [Certified Kubernetes product](https://www.cncf.io/certification/software-conformance/).It is fully compatible with the native Kubernetes API.
+
+## Custom Deployment
+
+ The core of Tencent Kubernetes Engine is open source and available [on GitHub](https://github.com/TencentCloud/tencentcloud-cloud-controller-manager/).
+
+ When using TKE to create a Kubernetes cluster, you can choose managed mode or independent deployment mode. In addition, you can customize the deployment as needed; for example, you can choose an existing Cloud Virtual Machine instance for cluster creation or enable Kube-proxy in IPVS mode.
+
+## What's Next
+
+ To learn more, see the [TKE documentation](https://intl.cloud.tencent.com/document/product/457).
\ No newline at end of file
diff --git a/content/en/docs/setup/production-environment/windows/intro-windows-in-kubernetes.md b/content/en/docs/setup/production-environment/windows/intro-windows-in-kubernetes.md
index 0c554824f7..d34aaca1c4 100644
--- a/content/en/docs/setup/production-environment/windows/intro-windows-in-kubernetes.md
+++ b/content/en/docs/setup/production-environment/windows/intro-windows-in-kubernetes.md
@@ -235,7 +235,6 @@ The following networking functionality is not supported on Windows nodes
* Local NodePort access from the node itself fails (works for other nodes or external clients)
* Accessing service VIPs from nodes will be available with a future release of Windows Server
* Overlay networking support in kube-proxy is an alpha release. In addition, it requires [KB4482887](https://support.microsoft.com/en-us/help/4482887/windows-10-update-kb4482887) to be installed on Windows Server 2019
-* `kubectl port-forward`
* Local Traffic Policy and DSR mode
* Windows containers connected to l2bridge, l2tunnel, or overlay networks do not support communicating over the IPv6 stack. There is outstanding Windows platform work required to enable these network drivers to consume IPv6 addresses and subsequent Kubernetes work in kubelet, kube-proxy, and CNI plugins.
* Outbound communication using the ICMP protocol via the win-overlay, win-bridge, and Azure-CNI plugin. Specifically, the Windows data plane ([VFP](https://www.microsoft.com/en-us/research/project/azure-virtual-filtering-platform/)) doesn't support ICMP packet transpositions. This means:
@@ -244,6 +243,10 @@ The following networking functionality is not supported on Windows nodes
* ICMP packets directed to pass through a remote network (e.g. pod to external internet communication via ping) cannot be transposed and thus will not be routed back to their source
* Since TCP/UDP packets can still be transposed, one can substitute `ping ` with `curl ` to be able to debug connectivity to the outside world.
+These features were added in Kubernetes v1.15:
+
+* `kubectl port-forward`
+
##### CNI Plugins
* Windows reference network plugins win-bridge and win-overlay do not currently implement [CNI spec](https://github.com/containernetworking/cni/blob/master/SPEC.md) v0.4.0 due to missing "CHECK" implementation.
@@ -386,10 +389,10 @@ Your main source of help for troubleshooting your Kubernetes cluster should star
nssm start flanneld
# Register kubelet.exe
- # Microsoft releases the pause infrastructure container at mcr.microsoft.com/k8s/core/pause:1.0.0
+ # Microsoft releases the pause infrastructure container at mcr.microsoft.com/k8s/core/pause:1.2.0
# For more info search for "pause" in the "Guide for adding Windows Nodes in Kubernetes"
nssm install kubelet C:\k\kubelet.exe
- nssm set kubelet AppParameters --hostname-override= --v=6 --pod-infra-container-image=mcr.microsoft.com/k8s/core/pause:1.0.0 --resolv-conf="" --allow-privileged=true --enable-debugging-handlers --cluster-dns= --cluster-domain=cluster.local --kubeconfig=c:\k\config --hairpin-mode=promiscuous-bridge --image-pull-progress-deadline=20m --cgroups-per-qos=false --log-dir= --logtostderr=false --enforce-node-allocatable="" --network-plugin=cni --cni-bin-dir=c:\k\cni --cni-conf-dir=c:\k\cni\config
+ nssm set kubelet AppParameters --hostname-override= --v=6 --pod-infra-container-image=mcr.microsoft.com/k8s/core/pause:1.2.0 --resolv-conf="" --allow-privileged=true --enable-debugging-handlers --cluster-dns= --cluster-domain=cluster.local --kubeconfig=c:\k\config --hairpin-mode=promiscuous-bridge --image-pull-progress-deadline=20m --cgroups-per-qos=false --log-dir= --logtostderr=false --enforce-node-allocatable="" --network-plugin=cni --cni-bin-dir=c:\k\cni --cni-conf-dir=c:\k\cni\config
nssm set kubelet AppDirectory C:\k
nssm start kubelet
@@ -499,12 +502,17 @@ Your main source of help for troubleshooting your Kubernetes cluster should star
Check that your pause image is compatible with your OS version. The [instructions](https://docs.microsoft.com/en-us/virtualization/windowscontainers/kubernetes/deploying-resources) assume that both the OS and the containers are version 1803. If you have a later version of Windows, such as an Insider build, you need to adjust the images accordingly. Please refer to the Microsoft's [Docker repository](https://hub.docker.com/u/microsoft/) for images. Regardless, both the pause image Dockerfile and the sample service expect the image to be tagged as :latest.
- Starting with Kubernetes v1.14, Microsoft releases the pause infrastructure container at `mcr.microsoft.com/k8s/core/pause:1.0.0`. For more information search for "pause" in the [Guide for adding Windows Nodes in Kubernetes](../user-guide-windows-nodes).
+ Starting with Kubernetes v1.14, Microsoft releases the pause infrastructure container at `mcr.microsoft.com/k8s/core/pause:1.2.0`. For more information search for "pause" in the [Guide for adding Windows Nodes in Kubernetes](../user-guide-windows-nodes).
1. DNS resolution is not properly working
Check the DNS limitations for Windows in this [section](#dns-limitations).
+1. `kubectl port-forward` fails with "unable to do port forwarding: wincat not found"
+
+ This was implemented in Kubernetes 1.15, and the pause infrastructure container `mcr.microsoft.com/k8s/core/pause:1.2.0`. Be sure to use these versions or newer ones.
+ If you would like to build your own pause infrastructure container, be sure to include [wincat](https://github.com/kubernetes-sigs/sig-windows-tools/tree/master/cmd/wincat)
+
### Further investigation
If these steps don't resolve your problem, you can get help running Windows containers on Windows nodes in Kubernetes through:
@@ -533,7 +541,7 @@ We have a lot of features in our roadmap. An abbreviated high level list is incl
### CRI-ContainerD
-ContainerD is another OCI-compliant runtime that recently graduated as a CNCF project. It's currently tested on Linux, but 1.3 will bring support for Windows and Hyper-V. [[reference](https://blog.docker.com/2019/02/containerd-graduates-within-the-cncf/)]
+{{< glossary_tooltip term_id="containerd" >}} is another OCI-compliant runtime that recently graduated as a {{< glossary_tooltip text="CNCF" term_id="cncf" >}} project. It's currently tested on Linux, but 1.3 will bring support for Windows and Hyper-V. [[reference](https://blog.docker.com/2019/02/containerd-graduates-within-the-cncf/)]
The CRI-ContainerD interface will be able to manage sandboxes based on Hyper-V. This provides a foundation where RuntimeClass could be implemented for new use cases including:
diff --git a/content/en/docs/setup/production-environment/windows/user-guide-windows-nodes.md b/content/en/docs/setup/production-environment/windows/user-guide-windows-nodes.md
index 36bb5d6ed0..4f3425c3bc 100644
--- a/content/en/docs/setup/production-environment/windows/user-guide-windows-nodes.md
+++ b/content/en/docs/setup/production-environment/windows/user-guide-windows-nodes.md
@@ -22,7 +22,7 @@ The Kubernetes platform can now be used to run both Linux and Windows containers
* Obtain a [Windows Server license](https://www.microsoft.com/en-us/cloud-platform/windows-server-pricing) in order to configure the Windows node that hosts Windows containers. You can use your organization's licenses for the cluster, or acquire one from Microsoft, a reseller, or via the major cloud providers such as GCP, AWS, and Azure by provisioning a virtual machine running Windows Server through their marketplaces. A [time-limited trial](https://www.microsoft.com/en-us/cloud-platform/windows-server-trial) is also available.
-* Build a Linux-based Kubernetes cluster in which you have access to the control plane (some examples include [Getting Started from Scratch](https://github.com/kubernetes/kubernetes/tree/master/build/), [kubeadm/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/), [AKS Engine](/docs/setup/production-environment/turnkey/azure/), [GCE](/docs/setup/production-environment/turnkey/gce/), [AWS](/docs/setup/production-environment/turnkey/aws/).
+* Build a Linux-based Kubernetes cluster in which you have access to the control plane (some examples include [Creating a single control-plane cluster with kubeadm](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/), [AKS Engine](/docs/setup/production-environment/turnkey/azure/), [GCE](/docs/setup/production-environment/turnkey/gce/), [AWS](/docs/setup/production-environment/turnkey/aws/).
## Getting Started: Adding a Windows Node to Your Cluster
@@ -189,7 +189,7 @@ All code snippets in Windows sections are to be run in a PowerShell environment
```
{{< note >}}
- The "pause" (infrastructure) image is hosted on Microsoft Container Registry (MCR). You can access it using "docker pull mcr.microsoft.com/k8s/core/pause:1.0.0". The DOCKERFILE is available at https://github.com/Microsoft/SDN/blob/master/Kubernetes/windows/Dockerfile.
+ The "pause" (infrastructure) image is hosted on Microsoft Container Registry (MCR). You can access it using "docker pull mcr.microsoft.com/k8s/core/pause:1.2.0". The DOCKERFILE is available at https://github.com/kubernetes-sigs/sig-windows-tools/tree/master/cmd/wincat.
{{< /note >}}
1. Prepare a Windows directory for Kubernetes
diff --git a/content/en/docs/setup/release/notes.md b/content/en/docs/setup/release/notes.md
index 55535c65d9..5bd3b00edc 100644
--- a/content/en/docs/setup/release/notes.md
+++ b/content/en/docs/setup/release/notes.md
@@ -1,5 +1,5 @@
---
-title: v1.14 Release Notes
+title: v1.15 Release Notes
weight: 10
card:
name: download
@@ -12,1392 +12,1323 @@ card:
---
-# v1.14.0
+# v1.15.0
[Documentation](https://docs.k8s.io)
-## Downloads for v1.14.0
+## Downloads for v1.15.0
filename | sha512 hash
-------- | -----------
-[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes.tar.gz) | `0ad264a46f185a9ff4db0393508a9598dab146f438b2cfdc7527592eb422870b8f26ade7ed089359c06741d998fcd730f897eae261f922c1a26d9fdc034d270d`
-[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-src.tar.gz) | `c5175439decc1c5f54254572bfec3c9f61f39d6bd1cbc28d1f771f8f931b98f0c305f1871618ce7e9de9cf3bf8227e19dcf985a7e017c74d0d7ab4005b3dbd59`
+[kubernetes.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes.tar.gz) | `cb03adc8bee094b93652a19cb77ca4b7b0b2ec201cf9c09958128eb93b4c717514fb423ef60c8fdd2af98ea532ef8d9f3155a684a3a7dc2a20cba0f8d7821a79`
+[kubernetes-src.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-src.tar.gz) | `a682c88539b46741f6f3b2fa27017d52e88149e0cf0fe49c5a84ff30018cfa18922772a49828091364910570cf5f6b4089a128b400f48a278d6ac7b18ef84635`
### Client Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-darwin-386.tar.gz) | `68bdba50a2b0be755e73e34ffc758fd419940adace096b1ddebd44a0eae2c7cdaed984965ea8f2145c1cab0be47bd6c72c2aeb73e51d449bfeb9ce1854b6c562`
-[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-darwin-amd64.tar.gz) | `255bd93082b3ac5d69bd4e45c75c9f19efee50ad6add50837ff2987ce16cbcc485fad334c980b17f69e5a344ee50548e206f747441ad4a045aa65746c79d10ca`
-[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-linux-386.tar.gz) | `2bd115ad2503fdfe5482e4592fcc0c8a2aee36be5205220a13c8050cd1e55dd3c08377425dbe5a03e4ffd21cf603c739ec4eaf3e5b2514a725d095df46f25d98`
-[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-linux-amd64.tar.gz) | `a551adf8019b17fce5aff2b379fab3627588978a2d628b64ba1af6f3be1b435322368b00dd04fa739d01c341420016b93239cc0d4601cee86706d81d78cb4d7f`
-[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-linux-arm.tar.gz) | `24e771cd4074786330e07f5537259a28d0932102639326230d9161f12a8dc545638a55bc252771eb4e21e95e2c7f0918dc1238ac4dc70d3b8b33f093da7123ab`
-[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-linux-arm64.tar.gz) | `16204f2345ab3523bbe3c868f04806a97c111d940b2594aaff67cf73b4259040c7770d5b0e7bdb7ffd7389f87e5f090ae875bd0f192b07582f59a01a1df32f5b`
-[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-linux-ppc64le.tar.gz) | `cd9ce829d585dd3331c53d35015d4017026d5efd24b9bc2f342995245628598c98bd8b1f1d706b196a7b3046a44049d4aba6efb4b1000722bfd055bd8a662f1f`
-[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-linux-s390x.tar.gz) | `482c0a8e53b27f8922f58d89fb81842ddd9c3ffd120e635838992dc97d535e46b42e7d8c439cb739b7c1d63c8eed27d7e3bcac7126a6a96e56cc13d52f396328`
-[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-windows-386.tar.gz) | `4446d666f999e979a7245e1b7ebf4817f7bd23aa247a38853a63b9cda473c7d4c2d376a2fd0df13ba15b740bf6b458cac14bd03dbf5a8151fc230e40c08294cf`
-[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-client-windows-amd64.tar.gz) | `97f4789f21d10fd3df446e55bc489472dcd534c623bb40dc3cb20fe1edd74c1a89a50ce7caa4e5e0536f3b22d8698060bfe8c46f4adbd0e507349412e52664e8`
+[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-client-darwin-386.tar.gz) | `bb14d564f5c2e4da964f6dcaf4026ac7371b35ecf5d651d226fb7cc0c3f194c1540860b7cf5ba35c1ebbdf683cefd8011bd35d345cf6707a1584f6a20230db96`
+[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-client-darwin-amd64.tar.gz) | `8c218437588d960f6782576038bc63af5623e66291d37029653d4bdbba5e19b3e8a8a0225d250d76270ab243aa97fa15ccaf7cae84fefc05a129c05687854c0e`
+[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-client-linux-386.tar.gz) | `6a17e7215d0eb9ca18d4b55ee179a13f1f111ac995aad12bf2613b9dbee1a6a3a25e8856fdb902955c47d076131c03fc074fad5ad490bc09d6dc53638a358582`
+[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-client-linux-amd64.tar.gz) | `0906a8f7de1e5c5efd124385fdee376893733f343d3e8113e4f0f02dfae6a1f5b12dca3e2384700ea75ec39985b7c91832a3aeb8fa4f13ffd736c56a86f23594`
+[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-client-linux-arm.tar.gz) | `1d3418665b4998d6fff1c137424eb60302129098321052d7c5cee5a0e2a5624c9eb2fd19c94b50a598ddf039664e5795e97ba99ae66aabc0ee79f48d23c30a65`
+[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-client-linux-arm64.tar.gz) | `986d6bec386b3bb427e49cd7e41390c7dc5361da4f2f7fc2a823507f83579ea1402de566651519bf83267bf2a92dc4bc40b72bb587cdc78aa8b9027f629e8436`
+[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-client-linux-ppc64le.tar.gz) | `81315af33bc21f9f8808b125e1f4c7a1f797c70f01098fe1fe8dba73d05d89074209c70e39b0fd8b42a5e43f2392ece3a070b9e83be5c4978e82ddad3ce09452`
+[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-client-linux-s390x.tar.gz) | `485978a24ba97a2a2cac162a6984d4b5c32dbe95882cf18d2fd2bf74477f689abc6e9d6b10ec016cd5957b0b71237cd9c01d850ff1c7bd07a561d0c2d6598ee7`
+[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-client-windows-386.tar.gz) | `9a1b5d0f6fbfc85269e9bd7e08be95eeb9a11f43ea38325b8a736e768f3e855e681eef17508ca0c9da6ab9cbed2875dba5beffc91d1418316b7ca3efa192c768`
+[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-client-windows-amd64.tar.gz) | `f2f0221c7d364e3e71b2d9747628298422441c43b731d58c14d7a0ed292e5f12011780c482bdb8f613ddc966868fd422e4ca01e4b522601d74cdee49c59a1766`
### Server Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-server-linux-amd64.tar.gz) | `25739802a641517a8bbb933b69000a943e8dd38e616b8778149dd0138737abacf377683da2ff35fdd0bbb305b88bc8fc711df20a2585720a43bb674ef36b034f`
-[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-server-linux-arm.tar.gz) | `c1dbba77a4ff5661eb36c55182a753b88ccc9b89ca31e162b06672126743cfea115b2f8ea8658b12344c36df17958e310c1b8efbdd7800f44f013e1e6f10477d`
-[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-server-linux-arm64.tar.gz) | `ad346bbe2a053c1106b51e5125698737dc7b76fa3bf439e14d4b4ba1c262678fede9c507c1098aac6e14d2c742c526c8d257fefa95dd3bbb1dff959e1dc7b9aa`
-[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-server-linux-ppc64le.tar.gz) | `49f9bd1c751620ecf4b5c152f287d72b36abca21fd1dfe99443d984473c6efa051a910de585c42f5447ef7c18d7dbd905a66c4f09ca6025f45e63f5e96e3ca2f`
-[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-server-linux-s390x.tar.gz) | `d6be847f2a0358755a69dea26181e5fc1a80ac4939b8b04a3875e1f6693553cad562452bfad21b2e380ddda1839ab846122bc3339d8bec0971f218f6e8f6dce9`
+[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-server-linux-amd64.tar.gz) | `fee0200887c7616e3706394b0540b471ad24d57bb587a3a7154adfcd212c7a2521605839b0e95c23d61c86f6c21ef85c63f0d0a0504ba378b4c28cd110771c31`
+[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-server-linux-arm.tar.gz) | `2d329ec0e231dbd4ec750317fc45fb8a966b9a81b45f1af0dde3ca0d1ae66a5ade39c6b64f6a1a492b55f6fca04057113ec05de61cb0f11caeee2fb7639e7775`
+[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-server-linux-arm64.tar.gz) | `0fb64d934d82c17eee15e1f97fc5eeeb4af6e042c30abe41a4d245cde1d9d81ee4dad7e0b0b3f707a509c84fce42289edd2b18c4e364e99a1c396f666f114dcf`
+[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-server-linux-ppc64le.tar.gz) | `5cac4b5951692921389db280ec587037eb3bb7ec4ccf08599ecee2fa39c2a5980df9aba80fc276c78b203222ad297671c45a9fed690ad7bcd774854bd918012b`
+[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-server-linux-s390x.tar.gz) | `39a33f0bb0e06b34779d741e6758b6f7d385e0b933ab799b233e3d4e317f76b5d1e1a6d196f3c7a30a24916ddb7c3c95c8b1c5f6683bce709b2054e1fc018b77`
### Node Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-node-linux-amd64.tar.gz) | `75dc99919d1084d7d471a53ab60c743dc399145c99e83f37c6ba3c241b2c0b2ecc2c0d1b94690ff912e2a15b7c5595aa1d2d24c2fc439e06d85ff0246fb43b89`
-[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-node-linux-arm.tar.gz) | `49013a4f01be8086fff332099d94903082688b9b295d2f34468462656da4709360025e9d84b069410c608977ef803079af09af1f1e2678af7cb64e0fc02e9c9d`
-[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-node-linux-arm64.tar.gz) | `f8c0cb0c089cd1d1977c049002620b8cf748d193c1b76dd1d3aac01ff9273549c06a1e3dfe983dc40a95ee8b0719908e0cdf86ce17359b5f1b2426f2c55799a1`
-[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-node-linux-ppc64le.tar.gz) | `48fc02c856a192388877189a43eb1cda531e548bb035f9dfe6a1e3c8d3bcbd0f8e14f29382da45702cb28a91126d13ede42bd6e9159e12ecbd387ca9a58f9a92`
-[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-node-linux-s390x.tar.gz) | `d7c5f52cf602fd0c0d0f72d4cfe1ceaa4bad70a42f37f21c103f17c3448ceb2396c1bfa521eeeb9eef5f3173d84e4268704a247edd826d765f65e9a29a4f7f72`
-[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0/kubernetes-node-windows-amd64.tar.gz) | `120afdebe844b06a7437bb9788c3e7ea4fc6352aa18cc6a00e70f44f54664f844429f138870bc15862579da632632dff2e7323be7f627d9c33585a11ad2bed6b`
+[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-node-linux-amd64.tar.gz) | `73abf50e44319763be3124891a1db36d7f7b38124854a1f223ebd91dce8e848a825716c48c9915596447b16388e5b752ca90d4b9977348221adb8a7e3d2242fd`
+[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-node-linux-arm.tar.gz) | `b7ddb82efa39ba5fce5b4124d83279357397a1eb60be24aa19ccbd8263e5e6146bfaff52d7f5167b14d6d9b919c4dcd34319009701e9461d820dc40b015890a0`
+[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-node-linux-arm64.tar.gz) | `458f20f7e9ca2ebddef8738de6a2baa8b8d958b22a935e4d7ac099b07bed91fe44126342faa8942cf23214855b20d2a52fcb95b1fbb8ae6fe33b601ecdbf0c39`
+[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-node-linux-ppc64le.tar.gz) | `d4d5bfe9b9d56495b00322f62aed0f76029d774bff5004d68e85a0db4fb3b4ceb3cef79a4f56e322b8bb47b4adbf3966cff0b5a24f9678da02122f2024ecc6cd`
+[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-node-linux-s390x.tar.gz) | `b967034c8db871a7f503407d5a096fcd6811771c9a294747b0a028659af582fbc47061c388adfabf1c84cd73b33f7bbf5377eb5b31ab51832ea0b5625a82e799`
+[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0/kubernetes-node-windows-amd64.tar.gz) | `dd021d8f2a3d9ddff6e88bce678c28cc0f38165a5d7a388df952d900dcfd1dcaf45c7e75c6387d061014cba15aaf7453905a46e84ddd8b3f8eff2539d50fce9b`
-# Kubernetes v1.14 Release Notes
+# Kubernetes v1.15 Release Notes
-## 1.14 What’s New
+## 1.15 What’s New
-Support for Windows Nodes is Graduating to Stable ([#116](https://github.com/kubernetes/enhancements/issues/116) )
+A complete changelog for the release notes is now hosted in a customizable format at [https://relnotes.k8s.io/](https://relnotes.k8s.io/?releaseVersions=1.15.0). Check it out and please give us your feedback!
-- Support for Windows Server 2019 for worker nodes and containers
-- Support for out of tree networking with Azure-CNI, OVN-Kubernetes and Flannel
-- Improved support for pods, service types, workload controllers and metrics/quotas to closely match the capabilities offered for Linux containers
-kubernetes/enhancements: [#116](https://github.com/kubernetes/enhancements/issues/116) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-windows/20190103-windows-node-support.md)]
+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:
-Updated Plugin Mechanism for kubectl is Graduating to Stable ([#579](https://github.com/kubernetes/enhancements/issues/579))
+#### Continuous Improvement
+- Project sustainability is not just about features. Many SIGs have been working on improving test coverage, ensuring the basics stay reliable, and stability of the core feature set and working on maturing existing features and cleaning up the backlog.
-- Extends functionality to kubectl to support extensions adding new commands as well as overriding specific subcommands (at any depth).
-- Documentation fixes
-kubernetes/enhancements: [#579](https://github.com/kubernetes/enhancements/issues/579) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cli/0024-kubectl-plugins.md#summary)]
+#### Extensibility
-Durable Local Storage Management is Now GA ([#121](https://github.com/kubernetes/enhancements/issues/121#issuecomment-457396290))
+- The community has been asking for continuing support of extensibility, so this cycle features more work around CRDs and API Machinery. Most of the enhancements in this cycle were from SIG API Machinery and related areas.
-- Makes locally attached (non-network attached) storage available as a persistent volume source.
-- Allows users to take advantage of the typically cheaper and improved performance of persistent local storage
-kubernetes/kubernetes: [#73525](https://github.com/kubernetes/kubernetes/pull/73525), [#74391](https://github.com/kubernetes/kubernetes/pull/74391), [#74769](http://github.com/kubernetes/kubernetes/pull/74769)
-kubernetes/enhancements: [#121](https://github.com/kubernetes/enhancements/issues/121#issuecomment-457396290) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/20190124-local-persistent-volumes.md)]
+### Extensibility around core Kubernetes APIs
-Pid Limiting is Graduating to Beta ([#757](https://github.com/kubernetes/enhancements/issues/757))
+#### CustomResourceDefinitions Pruning
+To enforce both data consistency and security, Kubernetes performs pruning, or the automatic removal of unknown fields in objects sent to a Kubernetes API. An "unknown" field is one that is not specified in the OpenAPI validation schema. This behavior is already in place for native resources and ensures only data structures specified by the CRD developer are persisted to etcd. It will be available as a beta feature in Kubernetes 1.15.
-- Prevents a pod from starving pid resource
-- Ability to isolate pid resources pod-to-pod and node-to-pod
-kubernetes/kubernetes: [#73651](http://github.com/kubernetes/kubernetes/pull/73651)
-kubernetes/enhancements: [#757](https://github.com/kubernetes/enhancements/issues/757) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/20190129-pid-limiting.md)]
+Pruning is activated by setting `spec.preserveUnknownFields: false` in the CustomResourceDefinition. A future apiextensions.k8s.io/v1 variant of CRDs will enforce pruning.
-Pod Priority and Preemption in Kubernetes ([#564](https://github.com/kubernetes/enhancements/issues/564))
+Pruning requires that CRD developer provides complete, structural validation schemas, either at the top-level or for all versions of the CRD.
-- Pod priority and preemption enables Kubernetes scheduler to schedule more important Pods first and when cluster is out of resources, it removes less important pods to create room for more important ones. The importance is specified by priority.
-kubernetes/kubernetes: [#73498](https://github.com/kubernetes/kubernetes/pull/73498), [#73555](https://github.com/kubernetes/kubernetes/pull/73555), [#74465](https://github.com/kubernetes/kubernetes/pull/74465)
-kubernetes/enhancements: [#564](https://github.com/kubernetes/enhancements/issues/564) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-scheduling/20190131-pod-priority-preemption.md)]
+#### CustomResourceDefinition Defaulting
-Pod Ready++ ([#580](https://github.com/kubernetes/enhancements/issues/580))
+CustomResourceDefinitions also have new support for defaulting, with defaults specified using the `default` keyword in the OpenAPI validation schema. Defaults are set for unspecified fields in an object sent to the API, and when reading from etcd.
-- Introduces extension point for external feedback on pod readiness.
-kubernetes/kubernetes: [#74434](http://github.com/kubernetes/kubernetes/pull/74434),
-kubernetes/enhancements: [#580](https://github.com/kubernetes/enhancements/issues/580) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-network/0007-pod-ready%2B%2B.md)]
+Defaulting will be available as alpha in Kubernetes 1.15 and requires structural schemas.
-Kubeadm: Automate certificate copy between control planes in HA setups
+#### CustomResourceDefinition OpenAPI Publishing
+
+OpenAPI specs for native types have long been served at /openapi/v2, and they are consumed by a number of components, notably kubectl client-side validation, kubectl explain and OpenAPI based client generators.
+
+With Kubernetes 1.15 as beta, OpenAPI schemas are also published for CRDs, as long as their schemas are structural.
+
+These changes are reflected in the following Kubernetes enhancements:
+([#383](https://github.com/kubernetes/enhancements/issues/383)), ([#575](https://github.com/kubernetes/enhancements/issues/575) ), ([#492](https://github.com/kubernetes/enhancements/issues/492) ), ([#598](https://github.com/kubernetes/enhancements/issues/598) ), ([#692](https://github.com/kubernetes/enhancements/issues/692) ), ([#95](https://github.com/kubernetes/enhancements/issues/95) ), ([#995](https://github.com/kubernetes/enhancements/issues/995) ), ([#956](https://github.com/kubernetes/enhancements/issues/956) )
+
+### Cluster Lifecycle Stability and Usability Improvements
+Work on making Kubernetes installation, upgrade and configuration even more robust has been a major focus for this cycle for SIG Cluster Lifecycle (see the May 6, 2019 [Community Update](https://docs.google.com/presentation/d/1QUOsQxfEfHlMq4lPjlK2ewQHsr9peEKymDw5_XwZm8Q/edit?usp=sharing)). Bug fixes across bare metal tooling and production-ready user stories, such as the high availability use cases have been given priority for 1.15.
+
+kubeadm, the cluster lifecycle building block, continues to receive features and stability work required for bootstrapping production clusters efficiently. kubeadm has promoted high availability (HA) capability to beta, allowing users to use the familiar `kubeadm init` and `kubeadm join` commands to [configure and deploy an HA control plane](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/). An entire new test suite has been created specifically for ensuring these features will stay stable over time.
+
+Certificate management has become more robust in 1.15, with kubeadm now seamlessly rotating all your certificates (on upgrades) before they expire. Check the [kubeadm documentation](https://github.com/kubernetes/website/blob/dev-1.15/content/en/docs/reference/setup-tools/kubeadm/kubeadm-alpha.md) for information on how to manage your certificates.
+
+The kubeadm configuration file API is moving from v1beta1 to v1beta2 in 1.15.
+
+These changes are reflected in the following Kubernetes enhancements:
+([#357](https://github.com/kubernetes/enhancements/issues/357) ), ([#970](https://github.com/kubernetes/enhancements/issues/970) )
+
+### Continued improvement of CSI
+In Kubernetes v1.15, SIG Storage continued work to [enable migration of in-tree volume plugins](https://github.com/kubernetes/enhancements/issues/625) to the Container Storage Interface (CSI). SIG Storage worked on bringing CSI to feature parity with in-tree functionality, including functionality like resizing, inline volumes, and more. SIG Storage introduces new alpha functionality in CSI that doesn't exist in the Kubernetes Storage subsystem yet, like volume cloning.
+
+Volume cloning enables users to specify another PVC as a "DataSource" when provisioning a new volume. If the underlying storage system supports this functionality and implements the "CLONE_VOLUME" capability in its CSI driver, then the new volume becomes a clone of the source volume.
+
+These changes are reflected in the following Kubernetes enhancements:
+([#625](https://github.com/kubernetes/enhancements/issues/625))
+
+#### Additional Notable Feature Updates
+- Support for go modules in Kubernetes Core.
+- Continued preparation for cloud provider extraction and code organization. The cloud provider code has been moved to kubernetes/legacy-cloud-providers for easier removal later and external consumption.
+- Kubectl [get and describe](https://github.com/kubernetes/enhancements/issues/515) now works with extensions
+- Nodes now support [third party monitoring plugins](https://github.com/kubernetes/enhancements/issues/606).
+- A new [Scheduling Framework](https://github.com/kubernetes/enhancements/issues/624) for schedule plugins is now Alpha.
+- ExecutionHook API [designed to trigger hook commands](https://github.com/kubernetes/enhancements/issues/962) in containers is now Alpha.
+- Continued deprecation of extensions/v1beta1, apps/v1beta1, and apps/v1beta2 APIs; these extensions will be retired in 1.16!
+
+Check the [release notes website](https://relnotes.k8s.io/?releaseVersions=1.15.0) for the complete changelog of notable features and fixes.
-- Joining control plane nodes to a HA cluster can now be simplified by enabling the optional automatic copy of certificates from an existing control plane node.
-- You can now use `kubeadm init --experimental-upload-certs` and `kubeadm join --experimental-control-plane --certificate-key`.
-kubernetes/kubeadm: [#1373](https://github.com/kubernetes/kubeadm/issues/1373)
-kubernetes/enhancements: [#357](https://github.com/kubernetes/enhancements/issues/357) [[kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/20190122-Certificates-copy-for-kubeadm-join--control-plane.md)]
-Kubeadm: Expose the `kubeadm join` workflow as phases
-- The `kubeadm join` command can now be used in phases. Similar to the work that was done for `kubeadm init` in 1.13, in 1.14 the `join` phases can be now executed step-by-step/selectively using the `kubeadm join phase` sub-command. This makes it possible to further customize the workflow of joining nodes to the cluster.
-kubernetes/kubeadm: [#1204](https://github.com/kubernetes/kubeadm/issues/1204)
-kubernetes/enhancements: [kep](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/0029-20180918-kubeadm-phases-beta.md)
## Known Issues
-- There is a known issue [coredns/coredns#2629](https://github.com/coredns/coredns/issues/2629) in CoreDNS 1.3.1, wherein if the Kubernetes API shuts down while CoreDNS is connected, CoreDNS will crash. The issue is fixed in CoreDNS 1.4.0 in [coredns/coredns#2529](https://github.com/coredns/coredns/pull/2529).
-- Kubelet might fail to restart if an existing flexvolume mounted pvc contains a large number of directories, or is full. [#75019](https://github.com/kubernetes/kubernetes/pull/75019)
+- Concurrently joining control-plane nodes does not work as expected in kubeadm 1.15.0. The feature was planned for release in 1.15.0, but a fix may come in a follow up patch release.
+
+- Using `--log-file` is known to be problematic in 1.15. This presents as things being logged multiple times to the same file. The behaviour and details of this issue, as well as some preliminary attempts at fixing it are documented [here](https://github.com/kubernetes/kubernetes/issues/78734#issuecomment-501372131)
## Urgent Upgrade Notes
### (No, really, you MUST read this before you upgrade)
-- kube-apiserver:
- - Default RBAC policy no longer grants access to discovery and permission-checking APIs (used by `kubectl auth can-i`) to *unauthenticated* users. Upgraded clusters preserve prior behavior, but cluster administrators wishing to grant unauthenticated users access in new clusters will need to explicitly opt-in to expose the discovery and/or permission-checking APIs:
- - `kubectl create clusterrolebinding anonymous-discovery --clusterrole=system:discovery --group=system:unauthenticated`
- - `kubectl create clusterrolebinding anonymous-access-review --clusterrole=system:basic-user --group=system:unauthenticated`
- - The deprecated --storage-versions flag has been removed. The storage versions will always be the default value built-in the kube-apiserver binary. ([#67678](https://github.com/kubernetes/kubernetes/pull/67678), [@caesarxuchao](https://github.com/caesarxuchao))
- - The deprecated `--repair-malformed-updates` flag has been removed ([#73663](https://github.com/kubernetes/kubernetes/pull/73663), [@danielqsj](https://github.com/danielqsj))
- - The `/swaggerapi/*` schema docs, deprecated since 1.7, have been removed in favor of the /openapi/v2 schema docs. ([#72924](https://github.com/kubernetes/kubernetes/pull/72924), [@liggitt](https://github.com/liggitt))
- - The /swagger.json and /swagger-2.0.0.pb-v1 schema documents, deprecated since v1.10, have been removed in favor of `/openapi/v2` ([#73148](https://github.com/kubernetes/kubernetes/pull/73148), [@liggitt](https://github.com/liggitt))
- - `kube-apiserver` now only aggregates openapi schemas from `/openapi/v2` endpoints of aggregated API servers. The fallback to aggregate from `/swagger.json` has been removed. Ensure aggregated API servers provide schema information via `/openapi/v2` (available since v1.10). ([#73441](https://github.com/kubernetes/kubernetes/pull/73441), [@roycaihw](https://github.com/roycaihw))
- - The OpenAPI definitions with the prefix "io.k8s.kubernetes.pkg" (deprecated since 1.9) have been removed. ([#74596](https://github.com/kubernetes/kubernetes/pull/74596), [@sttts](https://github.com/sttts))
- - The `ValidateProxyRedirects` feature was promoted to Beta and enabled by default. This feature restricts redirect-following from the apiserver to same-host redirects. If nodes are configured to respond to CRI streaming requests on a different host interface than what the apiserver makes requests on (only the case if not using the built-in dockershim & setting the kubelet flag `--redirect-container-streaming=true`), then these requests will be broken. In that case, the feature can be temporarily disabled until the node configuration is corrected. We suggest setting `--redirect-container-streaming=false` on the kubelet to avoid issues.([#72552](https://github.com/kubernetes/kubernetes/pull/72552), [@tallclair](https://github.com/tallclair))
+#### API Machinery
+
+- `k8s.io/kubernetes` and published components (such as `k8s.io/client-go` and `k8s.io/api`) now contain go module files including dependency version information. See [go-modules](http://git.k8s.io/client-go/INSTALL.md#go-modules) for details on consuming `k8s.io/client-go` using go modules. ([#74877](https://github.com/kubernetes/kubernetes/pull/74877), [@liggitt](https://github.com/liggitt))
+
+#### Apps
+
+- Hyperkube short aliases have been removed from source code, because hyperkube docker image currently creates these aliases. ([#76953](https://github.com/kubernetes/kubernetes/pull/76953), [@Rand01ph](https://github.com/Rand01ph))
+
+#### Auth
+
+- The Rancher credential provider has now been removed. This only affects you if you are using the downstream Rancher distro. ([#77099](https://github.com/kubernetes/kubernetes/pull/77099), [@dims](https://github.com/dims))
+
+
+#### AWS
+
+- The `system:aws-cloud-provider` cluster role, deprecated in v1.13, is no longer auto-created. Deployments using the AWS cloud provider should grant required permissions to the `aws-cloud-provider` service account in the `kube-system` namespace as part of deployment. ([#66635](https://github.com/kubernetes/kubernetes/pull/66635), [@wgliang](https://github.com/wgliang))
+
+#### Azure
+
+- Kubelet can now run without identity on Azure. A sample cloud provider configuration is: `{"vmType": "vmss", "useInstanceMetadata": true, "subscriptionId": ""}` ([#77906](https://github.com/kubernetes/kubernetes/pull/77906), [@feiskyer](https://github.com/feiskyer))
+- Multiple Kubernetes clusters can now share the same resource group
+ - When upgrading from previous releases, issues will arise with public IPs if multiple clusters share the same resource group. To solve these problems, make the following changes to the cluster:
+Recreate the relevant LoadBalancer services, or add a new tag 'kubernetes-cluster-name: ' manually for existing public IPs.
+Configure each cluster with a different cluster name using `kube-controller-manager --cluster-name=` ([#77630](https://github.com/kubernetes/kubernetes/pull/77630), [@feiskyer](https://github.com/feiskyer))
+- The cloud config for Azure cloud provider can now be initialized from Kubernetes secret azure-cloud-provider in kube-system namespace
+ - the secret is a serialized version of `azure.json` file with key cloud-config. And the secret name is azure-cloud-provider.
+ - A new option cloudConfigType has been added to the cloud-config file. Supported values are: `file`, `secret` and `merge` (`merge` is the default value).
+ - To allow Azure cloud provider to read secrets, the [RBAC rules](https://github.com/kubernetes/kubernetes/pull/78242) should be configured.
+
+#### CLI
+
+- `kubectl scale job`, deprecated since 1.10, has been removed. ([#78445](https://github.com/kubernetes/kubernetes/pull/78445), [@soltysh](https://github.com/soltysh))
+- The deprecated `--pod`/`-p` flag for `kubectl exec` has been removed. The flag has been marked as deprecated since k8s version v1.12. ([#76713](https://github.com/kubernetes/kubernetes/pull/76713), [@prksu](https://github.com/prksu))
+
+
+#### Lifecycle
+
+- Support for deprecated old kubeadm v1alpha3 config has been totally removed. ([#75179](https://github.com/kubernetes/kubernetes/pull/75179), [@rosti](https://github.com/rosti))
+- kube-up.sh no longer supports "centos" and "local" providers. ([#76711](https://github.com/kubernetes/kubernetes/pull/76711), [@dims](https://github.com/dims))
+
+#### Network
+
+- The deprecated flag `--conntrack-max` has been removed from kube-proxy. Users of this flag should switch to `--conntrack-min` and `--conntrack-max-per-core` instead. ([#78399](https://github.com/kubernetes/kubernetes/pull/78399), [@rikatz](https://github.com/rikatz))
+- The deprecated kube-proxy flag `--cleanup-iptables` has been removed. ([#78344](https://github.com/kubernetes/kubernetes/pull/78344), [@aramase](https://github.com/aramase))
+
+#### Node
+
+- The deprecated kubelet security controls `AllowPrivileged`, `HostNetworkSources`, `HostPIDSources`, and `HostIPCSources` have been removed. Enforcement of these restrictions should be done through admission control (such as `PodSecurityPolicy`) instead. ([#77820](https://github.com/kubernetes/kubernetes/pull/77820), [@dims](https://github.com/dims))
+- The deprecated Kubelet flag `--allow-privileged` has been removed. Remove any use of the flag from your kubelet scripts or manifests. ([#77820](https://github.com/kubernetes/kubernetes/pull/77820), [@dims](https://github.com/dims))
+- The kubelet now only collects cgroups metrics for the node, container runtime, kubelet, pods, and containers. ([#72787](https://github.com/kubernetes/kubernetes/pull/72787), [@dashpole](https://github.com/dashpole))
+
+#### Storage
+
+- The `Node.Status.Volumes.Attached.DevicePath` field is now unset for CSI volumes. You must update any external controllers that depend on this field. ([#75799](https://github.com/kubernetes/kubernetes/pull/75799), [@msau42](https://github.com/msau42))
+- CSI alpha CRDs have been removed ([#75747](https://github.com/kubernetes/kubernetes/pull/75747), [@msau42](https://github.com/msau42))
+- The `StorageObjectInUseProtection` admission plugin is enabled by default, so the default enabled admission plugins are now `NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,StorageObjectInUseProtection`. Please note that if you previously had not set the `--admission-control` flag, your cluster behavior may change (to be more standard). ([#74610](https://github.com/kubernetes/kubernetes/pull/74610), [@oomichi](https://github.com/oomichi))
+
+
+
+## Deprecations and Removals
- kubectl
- - The deprecated `--show-all` flag to `kubectl get` has been removed ([#69255](https://github.com/kubernetes/kubernetes/pull/69255), [@Pingan2017](https://github.com/Pingan2017))
+ - `kubectl convert`, deprecated since v1.14, will be removed in v1.17.
+ - The `--export` flag for the `kubectl get` command, deprecated since v1.14, will be removed in v1.18.
+ - The `--pod`/`-p` flag for `kubectl exec`, deprecated since 1.12, has been removed.
+ - `kubectl scale job`, deprecated since 1.10, has been removed. ([#78445](https://github.com/kubernetes/kubernetes/pull/78445), [@soltysh](https://github.com/soltysh))
+
- kubelet
- - The deprecated `--experimental-fail-swap-on` flag has been removed ([#69552](https://github.com/kubernetes/kubernetes/pull/69552), [@Pingan2017](https://github.com/Pingan2017))
- - Health check (liveness & readiness) probes using an HTTPGetAction will no longer follow redirects to different hostnames from the original probe request. Instead, these non-local redirects will be treated as a Success (the documented behavior). In this case an event with reason "ProbeWarning" will be generated, indicating that the redirect was ignored. If you were previously relying on the redirect to run health checks against different endpoints, you will need to perform the healthcheck logic outside the Kubelet, for instance by proxying the external endpoint rather than redirecting to it. ([#75416](https://github.com/kubernetes/kubernetes/pull/75416), [@tallclair](https://github.com/tallclair))
+ - The `beta.kubernetes.io/os` and `beta.kubernetes.io/arch` labels, deprecated since v1.14, are targeted for removal in v1.18.
+ - The `--containerized` flag, deprecated since v1.14, will be removed in a future release.
+ - cAdvisor json endpoints have been deprecated. ([#78504](https://github.com/kubernetes/kubernetes/pull/78504), [@dashpole](https://github.com/dashpole))
-- client-go
- - The deprecated versionless API group accessors (like `clientset.Apps()`) have been removed. Use an explicit version instead (like `clientset.AppsV1()`) ([#74422](https://github.com/kubernetes/kubernetes/pull/74422), [@liggitt](https://github.com/liggitt))
- - The disk-cached discovery client is moved from k8s.io/client-go/discovery to k8s.io/client-go/discovery/cached/disk.
-The memory-cached discovery client is moved from k8s.io/client-go/discovery/cached to k8s.io/client-go/discovery/cached/memory.
-([#72214](https://github.com/kubernetes/kubernetes/pull/72214), [@caesarxuchao](https://github.com/caesarxuchao))
+- kube-apiserver
+ - The `--enable-logs-handler` flag and log-serving functionality is deprecated, and scheduled to be removed in v1.19. ([#77611](https://github.com/kubernetes/kubernetes/pull/77611), [@rohitsardesai83](https://github.com/rohitsardesai83))
-- kubeadm
- - `kubeadm alpha preflight` and `kubeadm alpha preflight node` are removed; you can now use `kubeadm join phase preflight` ([#73718](https://github.com/kubernetes/kubernetes/pull/73718), [@fabriziopandini](https://github.com/fabriziopandini))
+- kube-proxy
+ - The deprecated `--cleanup-iptables` has been removed,. ([#78344](https://github.com/kubernetes/kubernetes/pull/78344), [@aramase](https://github.com/aramase))
-- The deprecated taints `node.alpha.kubernetes.io/notReady` and `node.alpha.kubernetes.io/unreachable` are no longer supported or adjusted. These uses should be replaced with `node.kubernetes.io/not-ready` and `node.kubernetes.io/unreachable`
- ([#73001](https://github.com/kubernetes/kubernetes/pull/73001), [@shivnagarajan](https://github.com/shivnagarajan))
-- Any Prometheus queries that match `pod_name` and `container_name` labels (e.g. cadvisor or kubelet probe metrics) should be updated to use `pod` and `container` instead. `pod_name` and `container_name` labels will be present alongside `pod` and `container` labels for one transitional release and removed in the future.
-([#69099](https://github.com/kubernetes/kubernetes/pull/69099), [@ehashman](https://github.com/ehashman))
-
-## Deprecations
-
-- kubectl
- - `kubectl convert` is deprecated and will be removed in v1.17.
- - The `--export` flag for the `kubectl get` command is deprecated and will be removed in v1.18. ([#73787](https://github.com/kubernetes/kubernetes/pull/73787), [@soltysh](https://github.com/soltysh))
-
-- kubelet
- - OS and Arch information is now recorded in `kubernetes.io/os` and `kubernetes.io/arch` labels on Node objects. The previous labels (`beta.kubernetes.io/os` and `beta.kubernetes.io/arch`) are still recorded, but are deprecated and targeted for removal in v1.18. ([#73333](https://github.com/kubernetes/kubernetes/pull/73333), [@yujuhong](https://github.com/yujuhong))
- - The `--containerized` flag is deprecated and will be removed in a future release ([#74267](https://github.com/kubernetes/kubernetes/pull/74267), [@dims](https://github.com/dims))
-
-- hyperkube
- - The `--make-symlinks` flag is deprecated and will be removed in a future release. ([#74975](https://github.com/kubernetes/kubernetes/pull/74975), [@dims](https://github.com/dims))
- API
- - Ingress resources are now available via `networking.k8s.io/v1beta1`. Ingress resources in `extensions/v1beta1` are deprecated and will no longer be served in v1.18. Existing persisted data is available via the new API group/version ([#74057](https://github.com/kubernetes/kubernetes/pull/74057), [@liggitt](https://github.com/liggitt))
+ - Ingress resources will no longer be served from `extensions/v1beta1` in v1.19. Migrate use to the `networking.k8s.io/v1beta1` API, available since v1.14. Existing persisted data can be retrieved via the `networking.k8s.io/v1beta1` API.
- NetworkPolicy resources will no longer be served from `extensions/v1beta1` in v1.16. Migrate use to the `networking.k8s.io/v1` API, available since v1.8. Existing persisted data can be retrieved via the `networking.k8s.io/v1` API.
- PodSecurityPolicy resources will no longer be served from `extensions/v1beta1` in v1.16. Migrate to the `policy/v1beta1` API, available since v1.10. Existing persisted data can be retrieved via the `policy/v1beta1` API.
- DaemonSet, Deployment, and ReplicaSet resources will no longer be served from `extensions/v1beta1`, `apps/v1beta1`, or `apps/v1beta2` in v1.16. Migrate to the `apps/v1` API, available since v1.9. Existing persisted data can be retrieved via the `apps/v1` API.
- - PriorityClass resources have been promoted to `scheduling.k8s.io/v1` with no changes. The `scheduling.k8s.io/v1beta1` and `scheduling.k8s.io/v1alpha1` versions are now deprecated and will stop being served by default in v1.17. ([#73555](https://github.com/kubernetes/kubernetes/pull/73555), [#74465](https://github.com/kubernetes/kubernetes/pull/74465), [@bsalamat](https://github.com/bsalamat))
- - The `export` query parameter for list API calls is deprecated and will be removed in v1.18 ([#73783](https://github.com/kubernetes/kubernetes/pull/73783), [@deads2k](https://github.com/deads2k))
-- The following features are now GA, and the associated feature gates are deprecated and will be removed in v1.15:
- - `CustomPodDNS`
- - `HugePages`
- - `MountPropagation`
- - `PersistentLocalVolumes`
-- CoreDNS: The following directives or keywords are deprecated and will be removed in v1.15:
- - `upstream` option of `kubernetes` plugin, becoming default behavior in v1.15.
- - `proxy` plugin replaced by `forward` plugin
+ - PriorityClass resources will no longer be served from `scheduling.k8s.io/v1beta1` and `scheduling.k8s.io/v1alpha1` in v1.17. Migrate use to the `scheduling.k8s.io/v1` API, available since v1.14. Existing persisted data can be retrieved via the `scheduling.k8s.io/v1` API.
+ - The `export` query parameter for list API calls, deprecated since v1.14, will be removed in v1.18.
+ - The `series.state` field in the events.k8s.io/v1beta1 Event API is deprecated and will be removed in v1.18 ([#75987](https://github.com/kubernetes/kubernetes/pull/75987), [@yastij](https://github.com/yastij))
-## Removed and deprecated metrics
+- kubeadm
+ - The `kubeadm upgrade node config` and `kubeadm upgrade node experimental-control-plane` commands are deprecated in favor of `kubeadm upgrade node`, and will be removed in a future release. ([#78408](https://github.com/kubernetes/kubernetes/pull/78408), [@fabriziopandini](https://github.com/fabriziopandini))
+ - The flag `--experimental-control-plane` is now deprecated in favor of `--control-plane`. The flag `--experimental-upload-certs` is now deprecated in favor of `--upload-certs` ([#78452](https://github.com/kubernetes/kubernetes/pull/78452), [@fabriziopandini](https://github.com/fabriziopandini))
+ - `kubeadm config upload` has been deprecated, as its replacement is now graduated. Please use `kubeadm init phase upload-config` instead. ([#77946](https://github.com/kubernetes/kubernetes/pull/77946), [@Klaven](https://github.com/Klaven))
-### Removed metrics
+- The following features are now GA, and the associated feature gates are deprecated and will be removed in v1.17:
+ - `GCERegionalPersistentDisk`
-- `reflector_items_per_list`
-- `reflector_items_per_watch`
-- `reflector_last_resource_version`
-- `reflector_list_duration_seconds`
-- `reflector_lists_total`
-- `reflector_short_watches_total`
-- `reflector_watch_duration_seconds`
-- `reflector_watches_total`
+## Metrics Changes
+
+### Added metrics
+
+- The metric `kube_proxy_sync_proxy_rules_last_timestamp_seconds` is now available, indicating the last time that kube-proxy successfully applied proxying rules. ([#74027](https://github.com/kubernetes/kubernetes/pull/74027), [@squeed](https://github.com/squeed))
+- `process_start_time_seconds` has been added to kubelet’s '/metrics/probes' endpoint ([#77975](https://github.com/kubernetes/kubernetes/pull/77975), [@logicalhan](https://github.com/logicalhan))
+- Scheduler: added metrics to record the number of pending pods in different queues ([#75501](https://github.com/kubernetes/kubernetes/pull/75501), [@Huang-Wei](https://github.com/Huang-Wei))
+- Exposed CSI volume stats via kubelet volume metrics ([#76188](https://github.com/kubernetes/kubernetes/pull/76188), [@humblec](https://github.com/humblec))
+- Added a new `storage_operation_status_count` metric for kube-controller-manager and kubelet to count success and error statues. ([#75750](https://github.com/kubernetes/kubernetes/pull/75750), [@msau42](https://github.com/msau42))
+
+### Deprecated/changed metrics
+
+- kubelet probe metrics are now of the counter type rather than the gauge type, and the `prober_probe_result` has been replaced by `prober_probe_total`. ([#76074](https://github.com/kubernetes/kubernetes/pull/76074), [@danielqsj](https://github.com/danielqsj))
+- The `transformer_failures_total` metric is deprecated in favor of `transformation_operation_total`. The old metric will continue to be populated but will be removed in a future release. ([#70715](https://github.com/kubernetes/kubernetes/pull/70715), [@immutableT](https://github.com/immutableT))
+- Introducing new semantic for metric `volume_operation_total_seconds` to be the end to end latency of volume provisioning/deletion. Existing metric "storage_operation_duration_seconds" will remain untouched, however it is exposed to the following potential issues:
+ 1. For volumes provisioned/deleted via external provisioner/deleter, `storage_operation_duration_seconds` will NOT wait for the external operation to be done before reporting latency metric (effectively close to 0). This will be fixed by using `volume_operation_total_seconds` instead
+ 2. if there's a transient error happened during "provisioning/deletion", i.e., a volume is still in-use while a deleteVolume has been called, original `storage_operation_duration_seconds` will NOT wait until a volume has been finally deleted before reporting an inaccurate latency metric. The newly implemented metric `volume_operation_total_seconds`, however, waits until a provisioning/deletion operation has been fully executed.
+
+ Potential impacts:
+ If an SLO/alert has been defined based on `volume_operation_total_seconds`, it might get violated because of the more accurate metric might be significantly larger than previously reported. The metric is defined to be a histogram and the new semantic could change the distribution. ([#78061](https://github.com/kubernetes/kubernetes/pull/78061), [@yuxiangqian](https://github.com/yuxiangqian))
+
+- Implement the scheduling framework with `Reserve`, `Prebind`, `Permit`, `Post-bind`, `Queue sort` and `Unreserve` extension points.
+([#77567](https://github.com/kubernetes/kubernetes/pull/77567), [@wgliang](https://github.com/wgliang))
+([#77559](https://github.com/kubernetes/kubernetes/pull/77559), [@ahg-g](https://github.com/ahg-g))
+([#77529](https://github.com/kubernetes/kubernetes/pull/77529), [@draveness](https://github.com/draveness))
+([#77598](https://github.com/kubernetes/kubernetes/pull/77598), [@danielqsj](https://github.com/danielqsj))
+([#77501](https://github.com/kubernetes/kubernetes/pull/77501), [@JieJhih](https://github.com/JieJhih))
+([#77457](https://github.com/kubernetes/kubernetes/pull/77457), [@danielqsj](https://github.com/danielqsj))
+- Replaced *_admission_latencies_milliseconds_summary and *_admission_latencies_milliseconds metrics because they were reporting seconds rather than milliseconds. They were also subject to multiple naming guideline violations (units should be in base units and "duration" is the best practice labelling to measure the time a request takes). Please convert to use *_admission_duration_seconds and *_admission_duration_seconds_summary, as these now report the unit as described, and follow the instrumentation best practices. ([#75279](https://github.com/kubernetes/kubernetes/pull/75279), [@danielqsj](https://github.com/danielqsj))
+- Fixed admission metrics histogram bucket sizes to cover 25ms to ~2.5 seconds. ([#78608](https://github.com/kubernetes/kubernetes/pull/78608), [@jpbetz](https://github.com/jpbetz))
+- Fixed incorrect prometheus azure metrics. ([#77722](https://github.com/kubernetes/kubernetes/pull/77722), [@andyzhangx](https://github.com/andyzhangx))
+- `kubectl scale job`, deprecated since 1.10, has been removed. ([#78445](https://github.com/kubernetes/kubernetes/pull/78445), [@soltysh](https://github.com/soltysh))
-### Deprecated metrics
-- `rest_client_request_latency_seconds` -> `rest_client_request_duration_seconds`
-- `apiserver_proxy_tunnel_sync_latency_secs` -> `apiserver_proxy_tunnel_sync_duration_seconds`
-- `scheduler_scheduling_latency_seconds` -> `scheduler_scheduling_duration_seconds`
-- `kubelet_pod_worker_latency_microseconds` -> `kubelet_pod_worker_duration_seconds`
-- `kubelet_pod_start_latency_microseconds` -> `kubelet_pod_start_duration_seconds`
-- `kubelet_cgroup_manager_latency_microseconds` -> `kubelet_cgroup_manager_duration_seconds`
-- `kubelet_pod_worker_start_latency_microseconds` -> `kubelet_pod_worker_start_duration_seconds`
-- `kubelet_pleg_relist_latency_microseconds` -> `kubelet_pleg_relist_duration_seconds`
-- `kubelet_pleg_relist_interval_microseconds` -> `kubelet_pleg_relist_interval_seconds`
-- `kubelet_eviction_stats_age_microseconds` -> `kubelet_eviction_stats_age_seconds`
-- `kubelet_runtime_operations` -> `kubelet_runtime_operations_total`
-- `kubelet_runtime_operations_latency_microseconds` -> `kubelet_runtime_operations_duration_seconds`
-- `kubelet_runtime_operations_errors` -> `kubelet_runtime_operations_errors_total`
-- `kubelet_device_plugin_registration_count` -> `kubelet_device_plugin_registration_total`
-- `kubelet_device_plugin_alloc_latency_microseconds` -> `kubelet_device_plugin_alloc_duration_seconds`
-- `docker_operations` -> `docker_operations_total`
-- `docker_operations_latency_microseconds` -> `docker_operations_latency_seconds`
-- `docker_operations_errors` -> `docker_operations_errors_total`
-- `docker_operations_timeout` -> `docker_operations_timeout_total`
-- `network_plugin_operations_latency_microseconds` -> `network_plugin_operations_latency_seconds`
-- `sync_proxy_rules_latency_microseconds` -> `sync_proxy_rules_latency_seconds`
-- `apiserver_request_count` -> `apiserver_request_total`
-- `apiserver_request_latencies` -> `apiserver_request_latency_seconds`
-- `apiserver_request_latencies_summary` -> `apiserver_request_latency_seconds`
-- `apiserver_dropped_requests` -> `apiserver_dropped_requests_total`
-- `etcd_helper_cache_hit_count` -> `etcd_helper_cache_hit_total`
-- `etcd_helper_cache_miss_count` -> `etcd_helper_cache_miss_total`
-- `etcd_helper_cache_entry_count` -> `etcd_helper_cache_entry_total`
-- `etcd_request_cache_get_latencies_summary` -> `etcd_request_cache_get_latency_seconds`
-- `etcd_request_cache_add_latencies_summary` -> `etcd_request_cache_add_latency_seconds`
-- `etcd_request_latencies_summary` -> `etcd_request_latency_seconds`
-- `transformation_latencies_microseconds` -> `transformation_latencies_seconds`
-- `data_key_generation_latencies_microseconds` -> `data_key_generation_latencies_seconds`
## Notable Features
-- Increased the histogram resolution of the API server client certificate to accommodate short-lived (< 6h) client certificates. ([#74806](https://github.com/kubernetes/kubernetes/pull/74806), [@mxinden](https://github.com/mxinden))
-- Updated to use golang 1.12 ([#74632](https://github.com/kubernetes/kubernetes/pull/74632), [@cblecker](https://github.com/cblecker))
-- The `RunAsGroup` feature has been promoted to beta and enabled by default. `PodSpec` and `PodSecurityPolicy` objects can be used to control the primary GID of containers on supported container runtimes. ([#73007](https://github.com/kubernetes/kubernetes/pull/73007), [@krmayankk](https://github.com/krmayankk))
-- Added the same information to an init container as a standard container in a pod when using `PodPresets`. ([#71479](https://github.com/kubernetes/kubernetes/pull/71479), [@soggiest](https://github.com/soggiest))
-- kube-conformance image will now run ginkgo with the `--dryRun` flag if the container is run with the environment variable E2E_DRYRUN set. ([#74731](https://github.com/kubernetes/kubernetes/pull/74731), [@johnSchnake](https://github.com/johnSchnake))
-- Introduced dynamic volume provisioning shim for CSI migration ([#73653](https://github.com/kubernetes/kubernetes/pull/73653), [@ddebroy](https://github.com/ddebroy))
-- Applied resources from a directory containing kustomization.yaml ([#74140](https://github.com/kubernetes/kubernetes/pull/74140), [@Liujingfang1](https://github.com/Liujingfang1))
-- kubeadm: Allowed to download certificate secrets uploaded by `init` or `upload-certs` phase, allowing to transfer certificate secrets (certificates and keys) from the cluster to other master machines when creating HA deployments. ([#74168](https://github.com/kubernetes/kubernetes/pull/74168), [@ereslibre](https://github.com/ereslibre))
-- The `--quiet` option to `kubectl run` now suppresses resource deletion messages emitted when the `--rm` option is specified. ([#73266](https://github.com/kubernetes/kubernetes/pull/73266), [@awh](https://github.com/awh))
-- Added Custom Resource support to `kubectl autoscale` ([#72678](https://github.com/kubernetes/kubernetes/pull/72678), [@rmohr](https://github.com/rmohr))
-- Cinder volume limit can now be configured from node too ([#74542](https://github.com/kubernetes/kubernetes/pull/74542), [@gnufied](https://github.com/gnufied))
-- It is now possible to combine the `-f` and `-l` flags in `kubectl logs` ([#67573](https://github.com/kubernetes/kubernetes/pull/67573), [@m1kola](https://github.com/m1kola))
-- New conformance tests added for API Aggregation. ([#63947](https://github.com/kubernetes/kubernetes/pull/63947), [@jennybuckley](https://github.com/jennybuckley))
-- Moved fluentd-elasticsearch addon images to community controlled location ([#73819](https://github.com/kubernetes/kubernetes/pull/73819), [@coffeepac](https://github.com/coffeepac))
-- Removed local etcd members from the etcd cluster when `kubeadm reset` ([#74112](https://github.com/kubernetes/kubernetes/pull/74112), [@pytimer](https://github.com/pytimer))
-- kubeadm will now not fail preflight checks when running on >= 5.0 Linux kernel ([#74355](https://github.com/kubernetes/kubernetes/pull/74355), [@brb](https://github.com/brb))
-- Scheduler cache snapshot algorithm has been optimized to improve scheduling throughput. ([#74041](https://github.com/kubernetes/kubernetes/pull/74041), [@bsalamat](https://github.com/bsalamat))
-- It is now possible to upload certificates required to join a new control-plane to kubeadm-certs secret using the flag `--experimental-upload-certs` on `init` or upload-certs phase. ([#73907](https://github.com/kubernetes/kubernetes/pull/73907), [@yagonobre](https://github.com/yagonobre))
-[@RobertKrawitz](https://github.com/RobertKrawitz))
-- `kubectl auth reconcile` now outputs details about what changes are being made ([#71564](https://github.com/kubernetes/kubernetes/pull/71564), [@liggitt](https://github.com/liggitt))
-- Added Kustomize as a subcommand in kubectl ([#73033](https://github.com/kubernetes/kubernetes/pull/73033), [@Liujingfang1](https://github.com/Liujingfang1))
-- Added `kubelet_node_name` metrics. ([#72910](https://github.com/kubernetes/kubernetes/pull/72910), [@danielqsj](https://github.com/danielqsj))
-- Updated AWS SDK to v1.16.26 for ECR PrivateLink support ([#73435](https://github.com/kubernetes/kubernetes/pull/73435), [@micahhausler](https://github.com/micahhausler))
-- Expanded `kubectl wait` to work with more types of selectors. ([#71746](https://github.com/kubernetes/kubernetes/pull/71746), [@rctl](https://github.com/rctl))
-([#72832](https://github.com/kubernetes/kubernetes/pull/72832), [@MrHohn](https://github.com/MrHohn))
-- Added configuration for AWS endpoint fine control: ([#72245](https://github.com/kubernetes/kubernetes/pull/72245), [@ampsingram](https://github.com/ampsingram))
-- The CoreDNS configuration now has the forward plugin for proxy in the default configuration instead of the proxy plugin. ([#73267](https://github.com/kubernetes/kubernetes/pull/73267), [@rajansandeep](https://github.com/rajansandeep))
-- Added alpha field storageVersionHash to the discovery document for each resource. Its value must be treated as opaque by clients. Only equality comparison on the value is valid. ([#73191](https://github.com/kubernetes/kubernetes/pull/73191), [@caesarxuchao](https://github.com/caesarxuchao))
-- If you are running the cloud-controller-manager and you have the `pvlabel.kubernetes.io` alpha Initializer enabled, you must now enable PersistentVolume labeling using the `PersistentVolumeLabel` admission controller instead. You can do this by adding `PersistentVolumeLabel` in the `--enable-admission-plugins` kube-apiserver flag. ([#73102](https://github.com/kubernetes/kubernetes/pull/73102), [@andrewsykim](https://github.com/andrewsykim))
-- kubectl supports copying files with wild card ([#72641](https://github.com/kubernetes/kubernetes/pull/72641), [@dixudx](https://github.com/dixudx))
-- kubeadm now attempts to detect an installed CRI by its usual domain socket, so that `--cri-socket` can be omitted from the command line if Docker is not used and there is a single CRI installed. ([#69366](https://github.com/kubernetes/kubernetes/pull/69366), [@rosti](https://github.com/rosti))
-- `CSINodeInfo` and `CSIDriver` CRDs have been installed in the local cluster. ([#72584](https://github.com/kubernetes/kubernetes/pull/72584), [@xing-yang](https://github.com/xing-yang))
-- Node OS/arch labels have been promoted to GA ([#73048](https://github.com/kubernetes/kubernetes/pull/73048), [@yujuhong](https://github.com/yujuhong))
-- Added support for max attach limit for Cinder ([#72980](https://github.com/kubernetes/kubernetes/pull/72980), [@gnufied](https://github.com/gnufied))
-- Enabled mTLS encryption between etcd and kube-apiserver in GCE ([#70144](https://github.com/kubernetes/kubernetes/pull/70144), [@wenjiaswe](https://github.com/wenjiaswe))
-- Added `ResourceVersion` as a precondition for delete in order to ensure a delete fails if an unobserved change happens to an object. ([#74040](https://github.com/kubernetes/kubernetes/pull/74040), [@ajatprabha](https://github.com/ajatprabha))
-- There is now support for collecting pod logs under `/var/log/pods/NAMESPACE_NAME_UID` to stackdriver with `k8s_pod` resource type. ([#74502](https://github.com/kubernetes/kubernetes/pull/74502), [@Random-Liu](https://github.com/Random-Liu))
-- Changed CRI pod log directory from `/var/log/pods/UID` to `/var/log/pods/NAMESPACE_NAME_UID`. ([#74441](https://github.com/kubernetes/kubernetes/pull/74441), [@Random-Liu](https://github.com/Random-Liu))
-- `RuntimeClass` has been promoted to beta, and is enabled by default. ([#75003](https://github.com/kubernetes/kubernetes/pull/75003), [@tallclair](https://github.com/tallclair))
-- New "dry_run" metric label (indicating the value of the dryRun query parameter) has been added into the metrics:
-* apiserver_request_total
-* apiserver_request_duration_seconds
-New "APPLY" value for the "verb" metric label which indicates a PATCH with "Content-Type: apply-patch+yaml". This value is experimental and will only be present if the ServerSideApply alpha feature is enabled. ([#74997](https://github.com/kubernetes/kubernetes/pull/74997), [@jennybuckley](https://github.com/jennybuckley))
-- GCE: bumped COS image version to `cos-beta-73-11647-64-0` ([#75149](https://github.com/kubernetes/kubernetes/pull/75149), [@yguo0905](https://github.com/yguo0905))
-- Added alpha support for ephemeral CSI inline volumes that are embedded in pod specs. ([#74086](https://github.com/kubernetes/kubernetes/pull/74086), [@vladimirvivien](https://github.com/vladimirvivien))
+### Stable
+
+- You can now create a non-preempting Pod priority. If set on a class, the pod will continue to be prioritized above queued pods of a lesser class, but will not preempt running pods. ([#74614](https://github.com/kubernetes/kubernetes/pull/74614), [@denkensk](https://github.com/denkensk))
+
+- Third party device monitoring is now enabled by default (KubeletPodResources). ([#77274](https://github.com/kubernetes/kubernetes/pull/77274), [@RenaudWasTaken](https://github.com/RenaudWasTaken))
+- The kube-apiserver’s `watch` can now be enabled for events using the `--watch-cache-sizes` flag. ([#74321](https://github.com/kubernetes/kubernetes/pull/74321), [@yastij](https://github.com/yastij))
+
+### Beta
+
+- Admission webhooks can now register for a single version of a resource (for example, `apps/v1 deployments`) and be called when any other version of that resource is modified (for example `extensions/v1beta1 deployments`). This allows new versions of a resource to be handled by admission webhooks without needing to update every webhook to understand the new version. See the API documentation for the `matchPolicy: Equivalent` option in MutatingWebhookConfiguration and ValidatingWebhookConfiguration types. ([#78135](https://github.com/kubernetes/kubernetes/pull/78135), [@liggitt](https://github.com/liggitt))
+- The CustomResourcePublishOpenAPI feature is now beta and enabled by default. CustomResourceDefinitions with [structural schemas](https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/20190425-structural-openapi.md) now publish schemas in the OpenAPI document served at `/openapi/v2`. CustomResourceDefinitions with non-structural schemas have a `NonStructuralSchema` condition added with details about what needs to be corrected in the validation schema. ([#77825](https://github.com/kubernetes/kubernetes/pull/77825), [@roycaihw](https://github.com/roycaihw))
+- Online volume expansion (ExpandInUsePersistentVolumes) is now a beta feature. As such, it is enabled by default. ([#77755](https://github.com/kubernetes/kubernetes/pull/77755), [@gnufied](https://github.com/gnufied))
+- The `SupportNodePidsLimit` feature is now beta, and enabled by default. It is no longer necessary to set the feature gate `SupportNodePidsLimit=true`. ([#76221](https://github.com/kubernetes/kubernetes/pull/76221), [@RobertKrawitz](https://github.com/RobertKrawitz))
+- kubeadm now includes the ability to specify certificate encryption and decryption keys for the upload and download certificate phases as part of the new v1beta2 kubeadm config format. ([#77012](https://github.com/kubernetes/kubernetes/pull/77012), [@rosti](https://github.com/rosti))
+- You can now use kubeadm's `InitConfiguration` and `JoinConfiguration` to define which preflight errors will be ignored. ([#75499](https://github.com/kubernetes/kubernetes/pull/75499), [@marccarre](https://github.com/marccarre))
+- CustomResourcesDefinition conversion via Web Hooks is promoted to beta. Note that you must set `spec.preserveUnknownFields` to `false`. ([#78426](https://github.com/kubernetes/kubernetes/pull/78426), [@sttts](https://github.com/sttts))
+- Group Managed Service Account support has moved to a new API for beta. Special annotations for Windows GMSA support have been deprecated.
+([#75459](https://github.com/kubernetes/kubernetes/pull/75459), [@wk8](https://github.com/wk8))
+- The `storageVersionHash` feature is now beta. `StorageVersionHash` is a field in the discovery document of each resource. It enables clients to detect whether the storage version of that resource has changed. Its value must be treated as opaque by clients. Only equality comparison on the value is valid. ([#78325](https://github.com/kubernetes/kubernetes/pull/78325), [@caesarxuchao](https://github.com/caesarxuchao))
+- Ingress objects are now persisted in etcd using the `networking.k8s.io/v1beta1` version ([#77139](https://github.com/kubernetes/kubernetes/pull/77139), [@cmluciano](https://github.com/cmluciano))
+- NodeLocal DNSCache graduating to beta. ([#77887](https://github.com/kubernetes/kubernetes/pull/77887), [@prameshj](https://github.com/prameshj))
+
+### Alpha
+
+- kubelet now allows the use of XFS quotas (on XFS and suitably configured ext4fs filesystems) to monitor storage consumption for ephemeral storage. This method of monitoring consumption, which is currently available only for `emptyDir` volumes, is faster and more accurate than the old method of walking the filesystem tree. Note that it does not enforce limits, it only monitors consumption. To utilize this functionality, set the feature gate `LocalStorageCapacityIsolationFSQuotaMonitoring=true`. For ext4fs filesystems, create the filesystem with `mkfs.ext4 -O project ` and run `tune2fs -Q prjquota `block device`; XFS filesystems need no additional preparation. The filesystem must be mounted with option `project` in `/etc/fstab`. If the primary partition is the root filesystem, add `rootflags=pquota` to the GRUB config file. ([#66928](https://github.com/kubernetes/kubernetes/pull/66928), [@RobertKrawitz](https://github.com/RobertKrawitz))
+- Finalizer Protection for Service LoadBalancers (ServiceLoadBalancerFinalizer) has been added as an Alpha feature, which is disabled by default. This feature ensures the Service resource is not fully deleted until the correlating load balancer resources are deleted. ([#78262](https://github.com/kubernetes/kubernetes/pull/78262), [@MrHohn](https://github.com/MrHohn))
+- Inline CSI ephemeral volumes can now be controlled with PodSecurityPolicy when the CSIInlineVolume alpha feature is enabled. ([#76915](https://github.com/kubernetes/kubernetes/pull/76915), [@vladimirvivien](https://github.com/vladimirvivien))
+- Kubernetes now includes an alpha field, `AllowWatchBookmarks`, in ListOptions for requesting the watching of bookmarks from apiserver. The implementation in apiserver is hidden behind the feature gate `WatchBookmark`. ([#74074](https://github.com/kubernetes/kubernetes/pull/74074), [@wojtek-t](https://github.com/wojtek-t))
+
+### Staging Repositories
+
+- The CRI API is now available in the `k8s.io/cri-api` staging repository. ([#75531](https://github.com/kubernetes/kubernetes/pull/75531), [@dims](https://github.com/dims))
+- Support for the Azure File plugin has been added to `csi-translation-lib` (CSIMigrationAzureFile). ([#78356](https://github.com/kubernetes/kubernetes/pull/78356), [@andyzhangx](https://github.com/andyzhangx))
+- Added support for Azure Disk plugin to csi-translation-lib (CSIMigrationAzureDisk) ([#78330](https://github.com/kubernetes/kubernetes/pull/78330), [@andyzhangx](https://github.com/andyzhangx))
+
+### CLI Improvements
+
+- Added `kubeadm upgrade node`. This command can be used to upgrade both secondary control-plane nodes and worker nodes. The `kubeadm upgrade node config` and `kubeadm upgrade node experimental-control-plane` commands are now deprecated. ([#78408](https://github.com/kubernetes/kubernetes/pull/78408), [@fabriziopandini](https://github.com/fabriziopandini))
+- The `kubectl top` command now includes a `--sort-by` option to sort by `memory` or `cpu`. ([#75920](https://github.com/kubernetes/kubernetes/pull/75920), [@artmello](https://github.com/artmello))
+- `kubectl rollout restart` now works for DaemonSets and StatefulSets. ([#77423](https://github.com/kubernetes/kubernetes/pull/77423), [@apelisse](https://github.com/apelisse))
+- `kubectl get --watch=true` now prints custom resource definitions with custom print columns. ([#76161](https://github.com/kubernetes/kubernetes/pull/76161), [@liggitt](https://github.com/liggitt))
+- Added `kubeadm alpha certs certificate-key` command to generate secure random key to use on `kubeadm init --experimental-upload-certs` ([#77848](https://github.com/kubernetes/kubernetes/pull/77848), [@yagonobre](https://github.com/yagonobre))
+- Kubernetes now supports printing the `volumeMode` using `kubectl get pv/pvc -o wide` ([#76646](https://github.com/kubernetes/kubernetes/pull/76646), [@cwdsuzhou](https://github.com/cwdsuzhou))
+- Created a new `kubectl rollout restart` command that does a rolling restart of a deployment. ([#76062](https://github.com/kubernetes/kubernetes/pull/76062), [@apelisse](https://github.com/apelisse))
+- `kubectl exec` now allows using the resource name to select a matching pod and `--pod-running-timeout` flag to wait till at least one pod is running. ([#73664](https://github.com/kubernetes/kubernetes/pull/73664), [@prksu](https://github.com/prksu))
+- `kubeadm alpha certs renew` and `kubeadm upgrade` now supports renewal of certificates embedded in KubeConfig files managed by kubeadm; this does not apply to certificates signed by external CAs. ([#77180](https://github.com/kubernetes/kubernetes/pull/77180), [@fabriziopandini](https://github.com/fabriziopandini))
+- Kubeadm: a new command `kubeadm alpha certs check-expiration` was created in order to help users in managing expiration for local PKI certificates ([#77863](https://github.com/kubernetes/kubernetes/pull/77863), [@fabriziopandini](https://github.com/fabriziopandini))
+
+### Misc
+
+- Service account controller clients to now use the TokenRequest API, and tokens are periodically rotated. ([#72179](https://github.com/kubernetes/kubernetes/pull/72179), [@WanLinghao](https://github.com/WanLinghao))
+- Added `ListPager.EachListItem` utility function to client-go to enable incremental processing of chunked list responses ([#75849](https://github.com/kubernetes/kubernetes/pull/75849), [@jpbetz](https://github.com/jpbetz))
+- Object count quota is now supported for namespaced custom resources using the `count/.` syntax. ([#72384](https://github.com/kubernetes/kubernetes/pull/72384), [@zhouhaibing089](https://github.com/zhouhaibing089))
+- Added completed job status in Cron Job event. ([#75712](https://github.com/kubernetes/kubernetes/pull/75712), [@danielqsj](https://github.com/danielqsj))
+- Pod disruption budgets can now be updated and patched. ([#69867](https://github.com/kubernetes/kubernetes/pull/69867), [@davidmccormick](https://github.com/davidmccormick))
+- Add CRD spec.preserveUnknownFields boolean, defaulting to true in v1beta1 and to false in v1 CRDs. If false, fields not specified in the validation schema will be removed when sent to the API server or when read from etcd. ([#77333](https://github.com/kubernetes/kubernetes/pull/77333), [@sttts](https://github.com/sttts))
+- Added RuntimeClass restrictions and defaulting to PodSecurityPolicy. ([#73795](https://github.com/kubernetes/kubernetes/pull/73795), [@tallclair](https://github.com/tallclair))
+- Kubelet plugin registration now has retry and exponential backoff logic for when registration of plugins (such as CSI or device plugin) fail. ([#73891](https://github.com/kubernetes/kubernetes/pull/73891), [@taragu](https://github.com/taragu))
+- proxy/transport now supports Content-Encoding: deflate ([#76551](https://github.com/kubernetes/kubernetes/pull/76551), [@JieJhih](https://github.com/JieJhih))
+- Admission webhooks are now properly called for `scale` and `deployments/rollback` subresources. ([#76849](https://github.com/kubernetes/kubernetes/pull/76849), [@liggitt](https://github.com/liggitt))
## API Changes
-- [CRI] Added a new field called `runtime_handler` into `PodSandbox` and `PodSandboxStatus` to track the `RuntimeClass` information of a pod. ([#73833](https://github.com/kubernetes/kubernetes/pull/73833), [@haiyanmeng](https://github.com/haiyanmeng))
+- CRDs get support for x-kubernetes-int-or-string to allow faithful representation of IntOrString types in CustomResources.([#78815](https://github.com/kubernetes/kubernetes/pull/78815), [@sttts](https://github.com/sttts))
+- Introduced the [`v1beta2`](https://docs.google.com/document/d/1XnP67oO1i9VcDIpw42IzptnJsc5OQM-HTf8cVcjCR2w/edit) config format to kubeadm. ([#76710](https://github.com/kubernetes/kubernetes/pull/76710), [@rosti](https://github.com/rosti))
+- Resource list requests for `PartialObjectMetadata` now correctly return list metadata like the resourceVersion and the continue token. ([#75971](https://github.com/kubernetes/kubernetes/pull/75971), [@smarterclayton](https://github.com/smarterclayton))
+- Added a condition `NonStructuralSchema` to `CustomResourceDefinition` listing Structural Schema violations as defined in the [KEP](https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/20190425-structural-openapi.md). CRD authors should update their validation schemas to be structural in order to participate in future CRD features. ([#77207](https://github.com/kubernetes/kubernetes/pull/77207), [@sttts](https://github.com/sttts))
+- Promoted meta.k8s.io/v1beta1 Table and PartialObjectMetadata to v1. ([#77136](https://github.com/kubernetes/kubernetes/pull/77136), [@smarterclayton](https://github.com/smarterclayton))
+- Introduced the flag `--ipvs-strict-arp` to configure stricter ARP sysctls, defaulting to false to preserve existing behaviors. This was enabled by default in 1.13.0, which impacted a few CNI plugins. ([#75295](https://github.com/kubernetes/kubernetes/pull/75295), [@lbernail](https://github.com/lbernail))
+- CRD validation schemas should not specify `metadata` fields other than `name` and `generateName`. A schema will not be considered structural (and therefore ready for future features) if `metadata` is specified in any other way. ([#77653](https://github.com/kubernetes/kubernetes/pull/77653), [@sttts](https://github.com/sttts))
-## Detailed Bug Fixes And Changes
+## Other notable changes
### API Machinery
-- client-go: `PortForwarder.GetPorts()` now contain correct local port if no local port was initially specified when setting up the port forwarder ([#73676](https://github.com/kubernetes/kubernetes/pull/73676), [@martin-helmich](https://github.com/martin-helmich))
-- Fixed an issue with missing `apiVersion/kind` in object data sent to admission webhooks ([#74448](https://github.com/kubernetes/kubernetes/pull/74448), [@liggitt](https://github.com/liggitt))
-- Prometheus metrics for `crd_autoregister`, `crd_finalizer` and `crd_naming_condition_controller` are exported. ([#71767](https://github.com/kubernetes/kubernetes/pull/71767), [@roycaihw](https://github.com/roycaihw))
-- Fixed admission metrics in seconds. ([#72343](https://github.com/kubernetes/kubernetes/pull/72343), [@danielqsj](https://github.com/danielqsj))
-- When a watch is closed by an HTTP2 load balancer and we are told to go away, skip printing the message to stderr by default.
-- Spedup kubectl by >10 when calling out to kube-apiserver for discovery information. ([#73345](https://github.com/kubernetes/kubernetes/pull/73345), [@sttts](https://github.com/sttts))
-- Fixed watch to not send the same set of events multiple times causing watcher to go back in time ([#73845](https://github.com/kubernetes/kubernetes/pull/73845), [@wojtek-t](https://github.com/wojtek-t))
-([#73277](https://github.com/kubernetes/kubernetes/pull/73277), [@smarterclayton](https://github.com/smarterclayton))
-- Fix kube-apiserver not to create default/kubernetes service endpoints before it reports readiness via the /healthz and therefore is ready to serve requests. Also early during startup old endpoints are remove which might be left over from a previously crashed kube-apiserver. ([#74668](https://github.com/kubernetes/kubernetes/pull/74668), [@sttts](https://github.com/sttts))
-- Add a configuration field to shorten the timeout of validating/mutating admission webhook call. The timeout value must be between 1 and 30 seconds. Default to 30 seconds when unspecified. ([#74562](https://github.com/kubernetes/kubernetes/pull/74562), [@roycaihw](https://github.com/roycaihw))
-- The apiserver, including both the kube-apiserver and apiservers built with the generic apiserver library, will now return 413 RequestEntityTooLarge error if a json patch contains more than 10,000 operations. ([#74000](https://github.com/kubernetes/kubernetes/pull/74000), [@caesarxuchao](https://github.com/caesarxuchao))
-- Fixed an error processing watch events when running skewed apiservers ([#73482](https://github.com/kubernetes/kubernetes/pull/73482), [@liggitt](https://github.com/liggitt))
-- jsonpath expressions containing `[start:end:step]` slice are now evaluated correctly ([#73149](https://github.com/kubernetes/kubernetes/pull/73149), [@liggitt](https://github.com/liggitt))
-- `metadata.deletionTimestamp` is no longer moved into the future when issuing repeated DELETE requests against a resource containing a finalizer. ([#73138](https://github.com/kubernetes/kubernetes/pull/73138), [@liggitt](https://github.com/liggitt))
-- Fixed kube-apiserver not to create default/kubernetes service endpoints before it reports readiness via the /healthz and therefore is ready to serve requests. Also early during startup old endpoints are remove which might be left over from a previously crashed kube-apiserver. ([#74668](https://github.com/kubernetes/kubernetes/pull/74668), [@sttts](https://github.com/sttts))
-- `watch.Until` now works for long durations. ([#67350](https://github.com/kubernetes/kubernetes/pull/67350), [@tnozicka](https://github.com/tnozicka))
-- Added duration metric for CRD webhook converters. ([#74376](https://github.com/kubernetes/kubernetes/pull/74376), [@mbohlool](https://github.com/mbohlool))
-- Fixed keymutex issues which may crash in some platforms. ([#74348](https://github.com/kubernetes/kubernetes/pull/74348), [@danielqsj](https://github.com/danielqsj))
-- Considerably reduced the CPU load in kube-apiserver while aggregating OpenAPI specifications from aggregated API servers. ([#71223](https://github.com/kubernetes/kubernetes/pull/71223), [@sttts](https://github.com/sttts))
-- Fixed graceful apiserver shutdown to not drop outgoing bytes before the process terminates. ([#72970](https://github.com/kubernetes/kubernetes/pull/72970), [@sttts](https://github.com/sttts))
+- Added port configuration to Admission webhook configuration service reference.
+- Added port configuration to AuditSink webhook configuration service reference.
+- Added port configuration to CRD Conversion webhook configuration service reference.
+- Added port configuration to kube-aggregator service reference. ([#74855](https://github.com/kubernetes/kubernetes/pull/74855), [@mbohlool](https://github.com/mbohlool))
+- Implemented deduplication logic for v1beta1.Event API ([#65782](https://github.com/kubernetes/kubernetes/pull/65782), [@yastij](https://github.com/yastij))
+- Added `objectSelector` to admission webhook configurations. `objectSelector` is evaluated the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. ([#78505](https://github.com/kubernetes/kubernetes/pull/78505), [@caesarxuchao](https://github.com/caesarxuchao))
+- Watch will now support converting response objects into Table or PartialObjectMetadata forms. ([#71548](https://github.com/kubernetes/kubernetes/pull/71548), [@smarterclayton](https://github.com/smarterclayton))
+- In CRD webhook conversion, Kubernetes will now ignore changes to metadata other than for labels and annotations. ([#77743](https://github.com/kubernetes/kubernetes/pull/77743), [@sttts](https://github.com/sttts))
+- Added ListMeta.RemainingItemCount. When responding to a LIST request, if the server has more data available, and if the request does not contain label selectors or field selectors, the server sets the ListOptions.RemainingItemCount to the number of remaining objects. ([#75993](https://github.com/kubernetes/kubernetes/pull/75993), [@caesarxuchao](https://github.com/caesarxuchao))
+- Clients may now request that API objects are converted to the `v1.Table` and `v1.PartialObjectMetadata` forms for generic access to objects. ([#77448](https://github.com/kubernetes/kubernetes/pull/77448), [@smarterclayton](https://github.com/smarterclayton))
+
+- Fixed a spurious error where update requests to the status subresource of multi-version custom resources would complain about an incorrect API version. ([#78713](https://github.com/kubernetes/kubernetes/pull/78713), [@liggitt](https://github.com/liggitt))
+- Fixed a bug in apiserver storage that could cause just-added finalizers to be ignored immediately following a delete request, leading to premature deletion. ([#77619](https://github.com/kubernetes/kubernetes/pull/77619), [@caesarxuchao](https://github.com/caesarxuchao))
+- API requests rejected by admission webhooks which specify an http status code < 400 are now assigned a 400 status code. ([#77022](https://github.com/kubernetes/kubernetes/pull/77022), [@liggitt](https://github.com/liggitt))
+- Fixed a transient error API requests for custom resources could encounter while changes to the CustomResourceDefinition were being applied. ([#77816](https://github.com/kubernetes/kubernetes/pull/77816), [@liggitt](https://github.com/liggitt))
+[@smarterclayton](https://github.com/smarterclayton))
+- Added name validation for dynamic client methods in client-go ([#75072](https://github.com/kubernetes/kubernetes/pull/75072), [@lblackstone](https://github.com/lblackstone))
+- CustomResourceDefinition with invalid regular expression in the pattern field of OpenAPI v3 validation schemas are no longer considered structural. ([#78453](https://github.com/kubernetes/kubernetes/pull/78453), [@sttts](https://github.com/sttts))
+- API paging is now enabled by default in k8s.io/apiserver recommended options, and in k8s.io/sample-apiserver ([#77278](https://github.com/kubernetes/kubernetes/pull/77278), [@liggitt](https://github.com/liggitt))
+
+- Increased verbose level for local openapi aggregation logs to avoid flooding the log during normal operation ([#75781](https://github.com/kubernetes/kubernetes/pull/75781), [@roycaihw](https://github.com/roycaihw))
+- k8s.io/client-go/dynamic/dynamicinformer.NewFilteredDynamicSharedInformerFactory now honours the `namespace` argument. ([#77945](https://github.com/kubernetes/kubernetes/pull/77945), [@michaelfig](https://github.com/michaelfig))
+- client-go and kubectl no longer write cached discovery files with world-accessible file permissions. ([#77874](https://github.com/kubernetes/kubernetes/pull/77874), [@yuchengwu](https://github.com/yuchengwu))
+- Fixed an error with stuck informers when an etcd watch receives update or delete events with missing data. ([#76675](https://github.com/kubernetes/kubernetes/pull/76675), [@ryanmcnamara](https://github.com/ryanmcnamara))
+- `DelayingQueue.ShutDown()` can now be invoked multiple times without causing a closed channel panic. ([#77170](https://github.com/kubernetes/kubernetes/pull/77170), [@smarterclayton](https://github.com/smarterclayton))
+- When specifying an invalid value for a label, it was not always clear which label the value was specified for. Starting with this release, the label's key is included in such error messages, which makes debugging easier. ([#77144](https://github.com/kubernetes/kubernetes/pull/77144), [@kenegozi](https://github.com/kenegozi))
+- Fixed a regression error when proxying responses from aggregated API servers, which could cause watch requests to hang until the first event was received. ([#75887](https://github.com/kubernetes/kubernetes/pull/75887), [@liggitt](https://github.com/liggitt))
+- Fixed a bug where dry-run is not honored for pod/eviction sub-resource. ([#76969](https://github.com/kubernetes/kubernetes/pull/76969), [@apelisse](https://github.com/apelisse))
+
+- DeleteOptions parameters for deletecollection endpoints are now published in the OpenAPI spec. ([#77843](https://github.com/kubernetes/kubernetes/pull/77843), [@roycaihw](https://github.com/roycaihw))
+- Active watches of custom resources now terminate properly if the CRD is modified. ([#78029](https://github.com/kubernetes/kubernetes/pull/78029), [@liggitt](https://github.com/liggitt))
+- Fixed a potential deadlock in the resource quota controller. Enabled recording partial usage info for quota objects specifying multiple resources, when only some of the resources' usage can be determined. ([#74747](https://github.com/kubernetes/kubernetes/pull/74747), [@liggitt](https://github.com/liggitt))
+- Updates that remove remaining `metadata.finalizers` from an object that is pending deletion (non-nil metadata.deletionTimestamp) and has no graceful deletion pending (nil or 0 metadata.deletionGracePeriodSeconds) now results in immediate deletion of the object. ([#77952](https://github.com/kubernetes/kubernetes/pull/77952), [@liggitt](https://github.com/liggitt))
+- client-go: The `rest.AnonymousClientConfig(*rest.Config) *rest.Config` helper method no longer copies custom `Transport` and `WrapTransport` fields, because those can be used to inject user credentials. ([#75771](https://github.com/kubernetes/kubernetes/pull/75771), [@liggitt](https://github.com/liggitt))
+- Validating admission webhooks are now properly called for CREATE operations on the following resources: pods/binding, pods/eviction, bindings ([#76910](https://github.com/kubernetes/kubernetes/pull/76910), [@liggitt](https://github.com/liggitt))
+- Removed the function Parallelize, please convert to use the function ParallelizeUntil. ([#76595](https://github.com/kubernetes/kubernetes/pull/76595), [@danielqsj](https://github.com/danielqsj))
### Apps
-- Added deleting pods created by `DaemonSet` assigned to not existing nodes. ([#73401](https://github.com/kubernetes/kubernetes/pull/73401), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski))
-- Pod eviction now honors graceful deletion by default if no delete options are provided in the eviction request. ([#72730](https://github.com/kubernetes/kubernetes/pull/72730), [@liggitt](https://github.com/liggitt))
+- Users can now specify a DataSource/Kind of type `PersistentVolumeClaim` in their PVC spec. This can then be detected by the external csi-provisioner and plugins if capable. ([#76913](https://github.com/kubernetes/kubernetes/pull/76913), [@j-griffith](https://github.com/j-griffith))
+- Fixed bug in DaemonSetController causing it to stop processing some DaemonSets for 5 minutes after node removal. ([#76060](https://github.com/kubernetes/kubernetes/pull/76060), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski))
+- StatefulSet controllers no longer force a resync every 30 seconds when nothing has changed. ([#75622](https://github.com/kubernetes/kubernetes/pull/75622), [@anyasabo](https://github.com/anyasabo))
+- Enhanced the daemonset sync logic to avoid a problem where pods are thought to be unavailable when the controller's clock is slower than the node's clock. ([#77208](https://github.com/kubernetes/kubernetes/pull/77208), [@DaiHao](https://github.com/DaiHao))
+- Fixed a bug that caused a DaemonSet rolling update to hang when its pod gets stuck at terminating. ([#77773](https://github.com/kubernetes/kubernetes/pull/77773), [@DaiHao](https://github.com/DaiHao))
+- Route controller now respects rate limiting to the cloud provider on deletion; previously it was only for create. ([#78581](https://github.com/kubernetes/kubernetes/pull/78581), [@andrewsykim](https://github.com/andrewsykim))
+- Removed extra pod creation expectations when daemonset fails to create pods in batches. ([#74856](https://github.com/kubernetes/kubernetes/pull/74856), [@draveness](https://github.com/draveness))
+- Resolved spurious rollouts of workload controllers when upgrading the API server, due to incorrect defaulting of an alpha procMount field in pods. ([#78885](https://github.com/kubernetes/kubernetes/pull/78885), [@liggitt](https://github.com/liggitt))
### Auth
-- Added `kubectl auth can-i --list` option, which allows users to know what actions they can do in specific namespaces. ([#64820](https://github.com/kubernetes/kubernetes/pull/64820), [@WanLinghao](https://github.com/WanLinghao))
-- The `rules` field in RBAC `Role` and `ClusterRole` objects is now correctly reported as optional in the openapi schema. ([#73250](https://github.com/kubernetes/kubernetes/pull/73250), [@liggitt](https://github.com/liggitt))
-- `system:kube-controller-manager` and `system:kube-scheduler` users are now permitted to perform delegated authentication/authorization checks by default RBAC policy ([#72491](https://github.com/kubernetes/kubernetes/pull/72491), [@liggitt](https://github.com/liggitt))
-- Error messages returned in authentication webhook status responses are now correctly included in the apiserver log ([#73595](https://github.com/kubernetes/kubernetes/pull/73595), [@liggitt](https://github.com/liggitt))
-- Fixed use of webhook admission plugins with multi-version custom resources ([#74154](https://github.com/kubernetes/kubernetes/pull/74154), [@mbohlool](https://github.com/mbohlool))
+- Fixed OpenID Connect (OIDC) token refresh when the client secret contains a special character. ([#76914](https://github.com/kubernetes/kubernetes/pull/76914), [@tsuna](https://github.com/tsuna))
+- Improved `kubectl auth can-i` command by warning users when they try to access a resource out of scope. ([#76014](https://github.com/kubernetes/kubernetes/pull/76014), [@WanLinghao](https://github.com/WanLinghao))
+- Validating admission webhooks are now properly called for CREATE operations on the following resources: tokenreviews, subjectaccessreviews, localsubjectaccessreviews, selfsubjectaccessreviews, selfsubjectrulesreviews ([#76959](https://github.com/kubernetes/kubernetes/pull/76959), [@sbezverk](https://github.com/sbezverk))
+
+### Autoscaling
+
+- Horizontal Pod Autoscaling can now scale targets up even when one or more metrics are invalid/unavailable, as long as one metric indicates a scale up should occur. ([#78503](https://github.com/kubernetes/kubernetes/pull/78503), [@gjtempleton](https://github.com/gjtempleton))
+
### AWS
-- Prevented AWS Network Load Balancer security groups ingress rules to be deleted by ensuring target groups are tagged. ([#73594](https://github.com/kubernetes/kubernetes/pull/73594), [@masterzen](https://github.com/masterzen))
-- AWS ELB health checks will now use HTTPS/SSL protocol for HTTPS/SSL backends. ([#70309](https://github.com/kubernetes/kubernetes/pull/70309), [@2rs2ts](https://github.com/2rs2ts))
+- Kubernetes will now use the zone from the node for topology aware aws-ebs volume creation to reduce unnecessary cloud provider calls. ([#78276](https://github.com/kubernetes/kubernetes/pull/78276), [@zhan849](https://github.com/zhan849))
+- Kubernetes now supports configure accessLogs for AWS NLB. ([#78497](https://github.com/kubernetes/kubernetes/pull/78497), [@M00nF1sh](https://github.com/M00nF1sh))
+- Kubernetes now supports update LoadBalancerSourceRanges for AWS NLB([#74692](https://github.com/kubernetes/kubernetes/pull/74692), [@M00nF1sh](https://github.com/M00nF1sh))
+- Kubernetes now supports configure TLS termination for AWS NLB([#74910](https://github.com/kubernetes/kubernetes/pull/74910), [@M00nF1sh](https://github.com/M00nF1sh))
+- Kubernetes will now consume the AWS region list from the AWS SDK instead of a hard-coded list in the cloud provider. ([#75990](https://github.com/kubernetes/kubernetes/pull/75990), [@mcrute](https://github.com/mcrute))
+- Limit use of tags when calling EC2 API to prevent API throttling for very large clusters. ([#76749](https://github.com/kubernetes/kubernetes/pull/76749), [@mcrute](https://github.com/mcrute))
+- The AWS credential provider can now obtain ECR credentials even without the AWS cloud provider or being on an EC2 instance. Additionally, AWS credential provider caching has been improved to honor the ECR credential timeout. ([#75587](https://github.com/kubernetes/kubernetes/pull/75587), [@tiffanyfay](https://github.com/tiffanyfay))
+
### Azure
-- Fixed failure to detach Azure disk when there is server side error ([#74398](https://github.com/kubernetes/kubernetes/pull/74398), [@andyzhangx](https://github.com/andyzhangx))
-- Fixed subnet annotation checking for Azure internal loadbalancer ([#74498](https://github.com/kubernetes/kubernetes/pull/74498), [@feiskyer](https://github.com/feiskyer))
-- Fixed mixed protocol issue for Azure load balancer ([#74200](https://github.com/kubernetes/kubernetes/pull/74200), [@andyzhangx](https://github.com/andyzhangx))
-- Fixed Azure accounts timeout issue when there is no out-bound IP ([#74191](https://github.com/kubernetes/kubernetes/pull/74191), [@andyzhangx](https://github.com/andyzhangx))
-- Fixed Azure Container Registry anonymous repo image pull error ([#74715](https://github.com/kubernetes/kubernetes/pull/74715), [@andyzhangx](https://github.com/andyzhangx))
-- Fixed parse devicePath issue on Azure Disk ([#74499](https://github.com/kubernetes/kubernetes/pull/74499), [@andyzhangx](https://github.com/andyzhangx))
+- Kubernetes now supports specifying the Resource Group of the Route Table when updating the Pod network route on Azure. ([#75580](https://github.com/kubernetes/kubernetes/pull/75580), [@suker200](https://github.com/suker200))
+- Kubernetes now uses instance-level update APIs for Azure VMSS loadbalancer operations. ([#76656](https://github.com/kubernetes/kubernetes/pull/76656), [@feiskyer](https://github.com/feiskyer))
+- Users can now specify azure file share name in the azure file plugin, making it possible to use existing shares or specify a new share name. ([#76988](https://github.com/kubernetes/kubernetes/pull/76988), [@andyzhangx](https://github.com/andyzhangx))
+- You can now run kubelet with no Azure identity. A sample cloud provider configuration is: `{"vmType": "vmss", "useInstanceMetadata": true, "subscriptionId": ""}` ([#77906](https://github.com/kubernetes/kubernetes/pull/77906), [@feiskyer](https://github.com/feiskyer))
+- Fixed some service tags not supported issues for Azure LoadBalancer service. ([#77719](https://github.com/kubernetes/kubernetes/pull/77719), [@feiskyer](https://github.com/feiskyer))
+- Fixed an issue where `pull image` fails from a cross-subscription Azure Container Registry when using MSI to authenticate. ([#77245](https://github.com/kubernetes/kubernetes/pull/77245), [@norshtein](https://github.com/norshtein))
+- Azure cloud provider can now be configured by Kubernetes secrets and a new option `cloudConfigType` has been introduced. Candidate values are `file`, `secret` or `merge` (default is `merge`). Note that the secret is a serialized version of `azure.json` file with key cloud-config. And the secret name is azure-cloud-provider in kube-system namespace. ([#78242](https://github.com/kubernetes/kubernetes/pull/78242), [@feiskyer](https://github.com/feiskyer))
### CLI
-- Fixed `--help` flag parsing ([#74682](https://github.com/kubernetes/kubernetes/pull/74682), [@soltysh](https://github.com/soltysh))
-- Fixed a bug where `kubectl describe` cannot obtain the event messages for a static pod ([#74156](https://github.com/kubernetes/kubernetes/pull/74156), [@gaorong](https://github.com/gaorong))
-- Fixed panic when performing a `set env` operation on a `--local` resource ([#65636](https://github.com/kubernetes/kubernetes/pull/65636), [@juanvallejo](https://github.com/juanvallejo))
-- Missing directories listed in a user's PATH are no longer considered errors and are instead logged by the `kubectl plugin list` command when listing available plugins. ([#73542](https://github.com/kubernetes/kubernetes/pull/73542), [@juanvallejo](https://github.com/juanvallejo))
-- Now users can get object info like:
-
- ```bash
- a. kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[0:3].name
- b. kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[-2:].name
- ```
-
-([#73063](https://github.com/kubernetes/kubernetes/pull/73063), [@WanLinghao](https://github.com/WanLinghao))
-
-- The `kubectl api-resources` command will no longer fail to display any resources on a single failure ([#73035](https://github.com/kubernetes/kubernetes/pull/73035), [@juanvallejo](https://github.com/juanvallejo))
-- kubectl now loads config file once and uses persistent client config ([#71117](https://github.com/kubernetes/kubernetes/pull/71117), [@dixudx](https://github.com/dixudx))
-- Printed `SizeLimit` of `EmptyDir` in `kubectl describe pod` outputs. ([#69279](https://github.com/kubernetes/kubernetes/pull/69279), [@dtaniwaki](https://github.com/dtaniwaki))
-- `kubectl delete --all-namespaces` is now a recognized flag. ([#73716](https://github.com/kubernetes/kubernetes/pull/73716), [@deads2k](https://github.com/deads2k))
+- Fixed `kubectl exec` usage string to correctly reflect flag placement. ([#77589](https://github.com/kubernetes/kubernetes/pull/77589), [@soltysh](https://github.com/soltysh))
+- Fixed `kubectl describe cronjobs` error of `Successful Job History Limit`. ([#77347](https://github.com/kubernetes/kubernetes/pull/77347), [@danielqsj](https://github.com/danielqsj))
+- In the `kubectl describe` output, the fields with names containing special characters are now displayed as-is without any pretty formatting, avoiding awkward outputs. ([#75483](https://github.com/kubernetes/kubernetes/pull/75483), [@gsadhani](https://github.com/gsadhani))
+- Fixed incorrect handling by kubectl of custom resources whose Kind is "Status". ([#77368](https://github.com/kubernetes/kubernetes/pull/77368), [@liggitt](https://github.com/liggitt))
+- Report cp errors consistently, providing full message whether copying to or from a pod. ([#77010](https://github.com/kubernetes/kubernetes/pull/77010), [@soltysh](https://github.com/soltysh))
+- Preserved existing namespace information in manifests when running `
+set ... --local` commands. ([#77267](https://github.com/kubernetes/kubernetes/pull/77267), [@liggitt](https://github.com/liggitt))
+- Support for parsing more v1.Taint forms has been added. For example, `key:effect`, `key=:effect-` are now accepted. ([#74159](https://github.com/kubernetes/kubernetes/pull/74159), [@dlipovetsky](https://github.com/dlipovetsky))
### Cloud Provider
-- Fixed a bug that caused PV allocation on non-English vSphere installations to fail ([#73115](https://github.com/kubernetes/kubernetes/pull/73115), [@alvaroaleman](https://github.com/alvaroaleman))
+- The GCE-only flag `cloud-provider-gce-lb-src-cidrs` is now optional for external cloud providers. ([#76627](https://github.com/kubernetes/kubernetes/pull/76627), [@timoreimann](https://github.com/timoreimann))
+- Fixed a bug where cloud-controller-manager initializes nodes multiple times. ([#75405](https://github.com/kubernetes/kubernetes/pull/75405), [@tghartland](https://github.com/tghartland))
### Cluster Lifecycle
-- kubeadm: fixed nil pointer dereference caused by a bug in url parsing ([#74454](https://github.com/kubernetes/kubernetes/pull/74454), [@bart0sh](https://github.com/bart0sh))
-- CoreDNS adds readinessProbe which prevents loadbalancing to unready pods, and also allows rolling updates to work as expected. ([#74137](https://github.com/kubernetes/kubernetes/pull/74137), [@rajansandeep](https://github.com/rajansandeep))
-- kubeadm no longer allows using v1alpha3 configs for anything else than converting them to `v1beta1`. ([#74025](https://github.com/kubernetes/kubernetes/pull/74025), [@rosti](https://github.com/rosti))
-- kubeadm: now allows the usage of `--kubeconfig-dir` and `--config` flags on kubeadm init ([#73998](https://github.com/kubernetes/kubernetes/pull/73998), [@yagonobre](https://github.com/yagonobre))
-- kubeadm: all master components are now exclusively relying on the `PriorityClassName` pod spec for annotating them as cluster critical components. Since `scheduler.alpha.kubernetes.io/critical-pod` annotation is no longer supported by Kubernetes 1.14 this annotation is no longer added to master components. ([#73857](https://github.com/kubernetes/kubernetes/pull/73857), [@ereslibre](https://github.com/ereslibre))
-- kubeadm no longer dumps backtrace if it fails to remove the running containers on reset. ([#73951](https://github.com/kubernetes/kubernetes/pull/73951), [@rosti](https://github.com/rosti))
-- kubeadm: fixed a bug in the underlying library for diff related to characters like '%' ([#73941](https://github.com/kubernetes/kubernetes/pull/73941), [@neolit123](https://github.com/neolit123))
-- Scale max-inflight now limits together with master VM sizes. ([#73268](https://github.com/kubernetes/kubernetes/pull/73268), [@wojtek-t](https://github.com/wojtek-t))
-- kubeadm reset: fixed a crash caused by the absence of a configuration file ([#73636](https://github.com/kubernetes/kubernetes/pull/73636), [@bart0sh](https://github.com/bart0sh))
-- CoreDNS is now version 1.3.1 ([#73610](https://github.com/kubernetes/kubernetes/pull/73610), [@rajansandeep](https://github.com/rajansandeep))
-- kubeadm: When certificates are present in joining a new control plane now ensures that they match at least the required SANs ([#73093](https://github.com/kubernetes/kubernetes/pull/73093), [@ereslibre](https://github.com/ereslibre))
-- kubeadm: added back `--cert-dir` option for `kubeadm init phase certs sa` ([#73239](https://github.com/kubernetes/kubernetes/pull/73239), [@mattkelly](https://github.com/mattkelly))
-- kubeadm: now explicitly waits for `etcd` to have grown when joining a new control plane ([#72984](https://github.com/kubernetes/kubernetes/pull/72984), [@ereslibre](https://github.com/ereslibre))
-- kubeadm: now pulls images when joining a new control plane instance ([#72870](https://github.com/kubernetes/kubernetes/pull/72870), [@MalloZup](https://github.com/MalloZup))
-- Exited kube-proxy when configuration file changes ([#59176](https://github.com/kubernetes/kubernetes/pull/59176), [@dixudx](https://github.com/dixudx))
-- kube-addon-manager was updated to v9.0, and now uses kubectl v1.13.2 and prunes workload resources via the apps/v1 API ([#72978](https://github.com/kubernetes/kubernetes/pull/72978), [@liggitt](https://github.com/liggitt))
-- kubeadm: Now allows certain certs/keys to be missing on the secret when transferring secrets using `--experimental-upload-certs` feature ([#75415](https://github.com/kubernetes/kubernetes/pull/75415), [@ereslibre](https://github.com/ereslibre))
+- `kubeadm upgrade` now renews all the certificates used by a component before upgrading the component itself, with the exception of certificates signed by external CAs. User can eventually opt-out of certificate renewal during upgrades by setting the new flag `--certificate-renewal` to false. ([#76862](https://github.com/kubernetes/kubernetes/pull/76862), [@fabriziopandini](https://github.com/fabriziopandini))
+- kubeadm still generates RSA keys when deploying a node, but also accepts ECDSA
+keys if they already exist in the directory specified in the `--cert-dir` option. ([#76390](https://github.com/kubernetes/kubernetes/pull/76390), [@rojkov](https://github.com/rojkov))
+- kubeadm now implements CRI detection for Windows worker nodes ([#78053](https://github.com/kubernetes/kubernetes/pull/78053), [@ksubrmnn](https://github.com/ksubrmnn))
+- Added `--image-repository` flag to `kubeadm config images`. ([#75866](https://github.com/kubernetes/kubernetes/pull/75866), [@jmkeyes](https://github.com/jmkeyes))
+
+- kubeadm: The kubeadm reset command has now been exposed as phases. ([#77847](https://github.com/kubernetes/kubernetes/pull/77847), [@yagonobre](https://github.com/yagonobre))
+- kubeadm: Improved resiliency when it comes to updating the `kubeadm-config` configmap upon new control plane joins or resets. This allows for safe multiple control plane joins and/or resets. ([#76821](https://github.com/kubernetes/kubernetes/pull/76821), [@ereslibre](https://github.com/ereslibre))
+- kubeadm: Bumped the minimum supported Docker version to 1.13.1 ([#77051](https://github.com/kubernetes/kubernetes/pull/77051), [@chenzhiwei](https://github.com/chenzhiwei))
+- Reverted the CoreDNS version to 1.3.1 for kubeadm ([#78545](https://github.com/kubernetes/kubernetes/pull/78545), [@neolit123](https://github.com/neolit123))
+- kubeadm: Fixed the machine readability of `kubeadm token create --print-join-command` ([#75487](https://github.com/kubernetes/kubernetes/pull/75487), [@displague](https://github.com/displague))
+- `kubeadm alpha certs renew --csr-only` now reads the current certificates as the authoritative source for certificates attributes (same as kubeadm alpha certs renew). ([#77780](https://github.com/kubernetes/kubernetes/pull/77780), [@fabriziopandini](https://github.com/fabriziopandini))
+- kubeadm: You can now delete multiple bootstrap tokens at once. ([#75646](https://github.com/kubernetes/kubernetes/pull/75646), [@bart0sh](https://github.com/bart0sh))
+- util/initsystem: Added support for the OpenRC init system ([#73101](https://github.com/kubernetes/kubernetes/pull/73101), [@oz123](https://github.com/oz123))
+- Default TTL for DNS records in kubernetes zone has been changed from 5s to 30s to keep consistent with old dnsmasq based kube-dns. The TTL can be customized with command `kubectl edit -n kube-system configmap/coredns`. ([#76238](https://github.com/kubernetes/kubernetes/pull/76238), [@Dieken](https://github.com/Dieken))
+- Communication between the etcd server and kube-apiserver on master is now overridden to use HTTPS instead of HTTP when mTLS is enabled in GCE. ([#74690](https://github.com/kubernetes/kubernetes/pull/74690), [@wenjiaswe](https://github.com/wenjiaswe))
### GCP
-- Fixed liveness probe in fluentd-gcp cluster addon ([#74522](https://github.com/kubernetes/kubernetes/pull/74522), [@Pluies](https://github.com/Pluies))
-- Reduced GCE log rotation check from 1 hour to every 5 minutes. Rotation policy is unchanged (new day starts, log file size > 100MB). ([#72062](https://github.com/kubernetes/kubernetes/pull/72062), [@jpbetz](https://github.com/jpbetz))
+- [stackdriver addon] Bumped prometheus-to-sd to v0.5.0 to pick up security fixes.
+[fluentd-gcp addon] Bumped fluentd-gcp-scaler to v0.5.1 to pick up security fixes.
+[fluentd-gcp addon] Bumped event-exporter to v0.2.4 to pick up security fixes.
+[fluentd-gcp addon] Bumped prometheus-to-sd to v0.5.0 to pick up security fixes.
+[metatada-proxy addon] Bumped prometheus-to-sd v0.5.0 to pick up security fixes. ([#75362](https://github.com/kubernetes/kubernetes/pull/75362), [@serathius](https://github.com/serathius))
+- [fluentd-gcp addon] Bump fluentd-gcp-scaler to v0.5.2 to pick up security fixes. ([#76762](https://github.com/kubernetes/kubernetes/pull/76762), [@serathius](https://github.com/serathius))
+- The GCERegionalPersistentDisk feature gate (GA in 1.13) can no longer be disabled. The feature gate will be removed in v1.17. ([#77412](https://github.com/kubernetes/kubernetes/pull/77412), [@liggitt](https://github.com/liggitt))
+- GCE/Windows: When the service cannot be stopped Stackdriver logging processes are now force killed ([#77378](https://github.com/kubernetes/kubernetes/pull/77378), [@yujuhong](https://github.com/yujuhong))
+- Reduced GCE log rotation check from 1 hour to every 5 minutes. Rotation policy is unchanged (new day starts, log file size > 100MB). ([#76352](https://github.com/kubernetes/kubernetes/pull/76352), [@jpbetz](https://github.com/jpbetz))
+- GCE/Windows: disabled stackdriver logging agent to prevent node startup failures ([#76099](https://github.com/kubernetes/kubernetes/pull/76099), [@yujuhong](https://github.com/yujuhong))
+- API servers using the default Google Compute Engine bootstrapping scripts will have their insecure port (`:8080`) disabled by default. To enable the insecure port, set `ENABLE_APISERVER_INSECURE_PORT=true` in kube-env or as an environment variable. ([#77447](https://github.com/kubernetes/kubernetes/pull/77447), [@dekkagaijin](https://github.com/dekkagaijin))
+- Fixed a NPD bug on GCI, so that it disables glog writing to files for log-counter. ([#76211](https://github.com/kubernetes/kubernetes/pull/76211), [@wangzhen127](https://github.com/wangzhen127))
+- Windows nodes on GCE now have the Windows firewall enabled by default. ([#78507](https://github.com/kubernetes/kubernetes/pull/78507), [@pjh](https://github.com/pjh))
+- Added `CNI_VERSION` and `CNI_SHA1` environment variables in `kube-up.sh` to configure CNI versions on GCE. ([#76353](https://github.com/kubernetes/kubernetes/pull/76353), [@Random-Liu](https://github.com/Random-Liu))
+- GCE clusters will include some IP ranges that are not used on the public Internet in the list of non-masq IPs. Bumped ip-masq-agent version to v2.3.0 with flag `nomasq-all-reserved-ranges` turned on. ([#77458](https://github.com/kubernetes/kubernetes/pull/77458), [@grayluck](https://github.com/grayluck))
+- GCE/Windows: added support for the stackdriver logging agent ([#76850](https://github.com/kubernetes/kubernetes/pull/76850), [@yujuhong](https://github.com/yujuhong))
+- GCE Windows nodes will rely solely on kubernetes and kube-proxy (and not the GCE agent) for network address management. ([#75855](https://github.com/kubernetes/kubernetes/pull/75855), [@pjh](https://github.com/pjh))
+- Ensured that the `node-role.kubernetes.io/master` taint is applied to the master with NoSchedule on GCE. ([#78183](https://github.com/kubernetes/kubernetes/pull/78183), [@cheftako](https://github.com/cheftako))
+- Windows nodes on GCE now use a known-working 1809 image rather than the latest 1809 image. ([#76722](https://github.com/kubernetes/kubernetes/pull/76722), [@pjh](https://github.com/pjh))
+- kube-up.sh scripts now disable the KubeletPodResources feature for Windows nodes, due to issue #[78628](https://github.com/kubernetes/kubernetes/pull/78668). ([#78668](https://github.com/kubernetes/kubernetes/pull/78668), [@mtaufen](https://github.com/mtaufen))
+
+
+### Instrumentation
+
+- [metrics-server addon] Restored the ability to connect to nodes via IP addresses. ([#76819](https://github.com/kubernetes/kubernetes/pull/76819), [@serathius](https://github.com/serathius))
+- If a pod has a running instance, the stats of its previously terminated instances will not show up in the kubelet summary stats any more for CRI runtimes such as containerd and cri-o. This keeps the behavior consistent with Docker integration, and fixes an issue that some container Prometheus metrics don't work when there are summary stats for multiple instances of the same pod. ([#77426](https://github.com/kubernetes/kubernetes/pull/77426), [@Random-Liu](https://github.com/Random-Liu))
+
### Network
-- Reduces the cache TTL for negative responses to 5s minimum. ([#74093](https://github.com/kubernetes/kubernetes/pull/74093), [@blakebarnett](https://github.com/blakebarnett))
+- Ingress objects are now persisted in etcd using the networking.k8s.io/v1beta1 version ([#77139](https://github.com/kubernetes/kubernetes/pull/77139), [@cmluciano](https://github.com/cmluciano))
+- Transparent kube-proxy restarts when using IPVS are now allowed. ([#75283](https://github.com/kubernetes/kubernetes/pull/75283), [@lbernail](https://github.com/lbernail))
+- Packets considered INVALID by conntrack are now dropped. In particular, this fixes
+a problem where spurious retransmits in a long-running TCP connection to a service
+IP could result in the connection being closed with the error "Connection reset by
+peer" ([#74840](https://github.com/kubernetes/kubernetes/pull/74840), [@anfernee](https://github.com/anfernee))
+- kube-proxy no longer automatically cleans up network rules created by running kube-proxy in other modes. If you are switching the kube-proxy mode (EG: iptables to IPVS), you will need to run `kube-proxy --cleanup`, or restart the worker node (recommended) before restarting kube-proxy. If you are not switching kube-proxy between different modes, this change should not require any action. ([#76109](https://github.com/kubernetes/kubernetes/pull/76109), [@vllry](https://github.com/vllry))
+- kube-proxy: HealthzBindAddress and MetricsBindAddress now support ipv6 addresses. ([#76320](https://github.com/kubernetes/kubernetes/pull/76320), [@JieJhih](https://github.com/JieJhih))
+- The userspace proxy now respects the IPTables proxy's minSyncInterval parameter. ([#71735](https://github.com/kubernetes/kubernetes/pull/71735), [@dcbw](https://github.com/dcbw))
+
+- iptables proxier: now routes local traffic to LB IPs to service chain ([#77523](https://github.com/kubernetes/kubernetes/pull/77523), [@andrewsykim](https://github.com/andrewsykim))
+- IPVS: Disabled graceful termination for UDP traffic to solve issues with high number of UDP connections (DNS / syslog in particular) ([#77802](https://github.com/kubernetes/kubernetes/pull/77802), [@lbernail](https://github.com/lbernail))
+- Fixed a bug where kube-proxy returns error due to existing ipset rules using a different hash type. ([#77371](https://github.com/kubernetes/kubernetes/pull/77371), [@andrewsykim](https://github.com/andrewsykim))
+- Fixed spurious error messages about failing to clean up iptables rules when using iptables 1.8. ([#77303](https://github.com/kubernetes/kubernetes/pull/77303), [@danwinship](https://github.com/danwinship))
+- Increased log level to 2 for IPVS graceful termination ([#78395](https://github.com/kubernetes/kubernetes/pull/78395), [@andrewsykim](https://github.com/andrewsykim))
+- kube-proxy: os exit when CleanupAndExit is set to true ([#76732](https://github.com/kubernetes/kubernetes/pull/76732), [@JieJhih](https://github.com/JieJhih))
+- Kubernetes will now allow trailing dots in the externalName of Services of type ExternalName. ([#78385](https://github.com/kubernetes/kubernetes/pull/78385), [@thz](https://github.com/thz))
### Node
-- Fixed help message for `--container-runtime-endpoint`: only unix socket is support on Linux. ([#74712](https://github.com/kubernetes/kubernetes/pull/74712), [@feiskyer](https://github.com/feiskyer))
-- Image garbage collection no longer fails for images with only one tag but more than one repository associated. ([#70647](https://github.com/kubernetes/kubernetes/pull/70647), [@corvus-ch](https://github.com/corvus-ch))
-- Re-issued Allocate grpc calls before starting a container that requests device-plugin resources if the cached state is missing. ([#73824](https://github.com/kubernetes/kubernetes/pull/73824), [@jiayingz](https://github.com/jiayingz))
-- [CRI] Added a new field called `runtime_handler` into `PodSandbox` and `PodSandboxStatus` to track the `RuntimeClass` information of a pod. ([#73833](https://github.com/kubernetes/kubernetes/pull/73833), [@haiyanmeng](https://github.com/haiyanmeng))
-- Kubelet now tries to stop containers in unknown state once before restart or remove. ([#73802](https://github.com/kubernetes/kubernetes/pull/73802), [@Random-Liu](https://github.com/Random-Liu))
-- When pleg channel is full, events are now discarded and count is recorded ([#72709](https://github.com/kubernetes/kubernetes/pull/72709), [@changyaowei](https://github.com/changyaowei))
-- Fixed the unexpected `NotReady` status when Node's iops is full if the runtime is dockershim. ([#74389](https://github.com/kubernetes/kubernetes/pull/74389), [@answer1991](https://github.com/answer1991))
-- Fixed #73264 `cpuPeriod` was not reset, but used as set via flag, although it was disabled via alpha gate ([#73342](https://github.com/kubernetes/kubernetes/pull/73342), [@szuecs](https://github.com/szuecs))
-- Updated kubelet CLI summary documentation and generated webpage ([#73256](https://github.com/kubernetes/kubernetes/pull/73256), [@deitch](https://github.com/deitch))
-- Set a low `oom_score_adj` for containers in pods with system-critical priorities ([#73758](https://github.com/kubernetes/kubernetes/pull/73758), [@sjenning](https://github.com/sjenning))
-- kubelet: Resolved hang/timeout issues when running large numbers of pods with unique `ConfigMap/Secret` references ([#74755](https://github.com/kubernetes/kubernetes/pull/74755), [@liggitt](https://github.com/liggitt))
-- Events reported for container creation, start, and stop now report the container name in the message and are more consistently formatted. ([#73892](https://github.com/kubernetes/kubernetes/pull/73892), [@smarterclayton](https://github.com/smarterclayton))
-- Removed stale `OutOfDisk` condition from kubelet side ([#72507](https://github.com/kubernetes/kubernetes/pull/72507), [@dixudx](https://github.com/dixudx))
-- Fixed the setting of `NodeAddresses` when using the vSphere CloudProvider and nodes that have multiple IP addresses. ([#70805](https://github.com/kubernetes/kubernetes/pull/70805), [@danwinship](https://github.com/danwinship))
-- Fixed dockershim panic issues when deleting docker images. ([#75367](https://github.com/kubernetes/kubernetes/pull/75367), [@feiskyer](https://github.com/feiskyer))
-- Kubelet no longer watches `ConfigMaps` and `Secrets` for terminated pods, in worst scenario causing it to not be able to send other requests to kube-apiserver ([#74809](https://github.com/kubernetes/kubernetes/pull/74809), [@oxddr](https://github.com/oxddr))
-- A new `TaintNodesByCondition` admission plugin taints newly created Node objects as "not ready", to fix a race condition that could cause pods to be scheduled on new nodes before their taints were updated to accurately reflect their reported conditions. This admission plugin is enabled by default if the `TaintNodesByCondition` feature is enabled. ([#73097](https://github.com/kubernetes/kubernetes/pull/73097), [@bsalamat](https://github.com/bsalamat))
-- Node-level support for pid limiting via `pid=` in the `--system-reserved` and `--kube-reserved` has been graduated to beta and no longer requires setting the feature gate `SupportNodePidsLimit=true` explicitly. Please reference `Kube Reserved` and `System Reserved` in `Reserve Compute Resources for System Daemons` in the Kubernetes documentation for general discussion of resource reservation. ([#73651](https://github.com/kubernetes/kubernetes/pull/73651)
+- The dockershim container runtime now accepts the `docker` runtime handler from a RuntimeClass. ([#78323](https://github.com/kubernetes/kubernetes/pull/78323), [@tallclair](https://github.com/tallclair))
+- The init container can now get its own field value as environment variable values using downwardAPI support. ([#75109](https://github.com/kubernetes/kubernetes/pull/75109), [@yuchengwu](https://github.com/yuchengwu))
+- UpdateContainerResources is no longer recorded as a `container_status` operation. It now uses the label `update_container`. ([#75278](https://github.com/kubernetes/kubernetes/pull/75278), [@Nessex](https://github.com/Nessex))
+- kubelet: fix fail to close kubelet->API connections on heartbeat failure when bootstrapping or client certificate rotation is disabled ([#78016](https://github.com/kubernetes/kubernetes/pull/78016), [@gaorong](https://github.com/gaorong))
+- Set selinux label at plugin socket directory ([#73241](https://github.com/kubernetes/kubernetes/pull/73241), [@vikaschoudhary16](https://github.com/vikaschoudhary16))
+- Fixed detection of non-root image user ID.([#78261](https://github.com/kubernetes/kubernetes/pull/78261), [@tallclair](https://github.com/tallclair))
+- Signal handling is now initialized within hyperkube commands that require it, such as apiserver and kubelet. ([#76659](https://github.com/kubernetes/kubernetes/pull/76659), [@S-Chan](https://github.com/S-Chan))
+- The Kubelet now properly requests protobuf objects where they are supported from the apiserver, reducing load in large clusters. ([#75602](https://github.com/kubernetes/kubernetes/pull/75602), [@smarterclayton](https://github.com/smarterclayton))
+
+### OpenStack
+
+- You can now define a kubeconfig file for the OpenStack cloud provider. ([#77415](https://github.com/kubernetes/kubernetes/pull/77415), [@Fedosin](https://github.com/Fedosin))
+- OpenStack user credentials can now be read from a secret instead of a local config file. ([#75062](https://github.com/kubernetes/kubernetes/pull/75062), [@Fedosin](https://github.com/Fedosin))
+
+### Release
+
+- Removed hyperkube short aliases from source code because hyperkube docker image currently create these aliases. ([#76953](https://github.com/kubernetes/kubernetes/pull/76953), [@Rand01ph](https://github.com/Rand01ph))
### Scheduling
-- Improved fairness of the scheduling queue by placing pods which are attempted recently behind other pods with the same priority. ([#73700](https://github.com/kubernetes/kubernetes/pull/73700), [@denkensk](https://github.com/denkensk))
-- Improved scheduler robustness to ensure that unschedulable pods are reconsidered for scheduling when appropriate. ([#73700](https://github.com/kubernetes/kubernetes/pull/73700), [#72558](https://github.com/kubernetes/kubernetes/pull/72558), [@denkensk](https://github.com/denkensk), [#73078](https://github.com/kubernetes/kubernetes/pull/73078), [@Huang-Wei](https://github.com/Huang-Wei))
+- Tolerations with the same key and effect will be merged into one that has the value of the latest toleration for best effort pods. ([#75985](https://github.com/kubernetes/kubernetes/pull/75985), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla))
+- Achieved 2X performance improvement on both required and preferred PodAffinity. ([#76243](https://github.com/kubernetes/kubernetes/pull/76243), [@Huang-Wei](https://github.com/Huang-Wei))
+- Fixed a scheduler racing issue to ensure low priority pods are unschedulable on the node(s) where high priority pods have `NominatedNodeName` set to the node(s). ([#77990](https://github.com/kubernetes/kubernetes/pull/77990), [@Huang-Wei](https://github.com/Huang-Wei))
### Storage
-- Fixed scanning of failed iSCSI targets. ([#74306](https://github.com/kubernetes/kubernetes/pull/74306), [@jsafrane](https://github.com/jsafrane))
-- StorageOS volume plugin updated to fix an issue where volume mount succeeds even if request to mount via StorageOS API fails. ([#69782](https://github.com/kubernetes/kubernetes/pull/69782), [@darkowlzz](https://github.com/darkowlzz))
-- Ensured directories on volumes are group-executable when using `fsGroup` ([#73533](https://github.com/kubernetes/kubernetes/pull/73533), [@mxey](https://github.com/mxey))
-- Updated CSI version to 1.1 ([#75391](https://github.com/kubernetes/kubernetes/pull/75391), [@gnufied](https://github.com/gnufied))
-- Ensured that volumes get provisioned based on the zone information provided in `allowedTopologies`. ([#72731](https://github.com/kubernetes/kubernetes/pull/72731), [@skarthiksrinivas](https://github.com/skarthiksrinivas))
-- Extended the `VolumeSubpathEnvExpansion` alpha feature to support environment variable expansion ([#71351](https://github.com/kubernetes/kubernetes/pull/71351), [@kevtaylor](https://github.com/kevtaylor))
-- Fixed a bug that prevented deletion of dynamically provisioned volumes in Quobyte backends. ([#68925](https://github.com/kubernetes/kubernetes/pull/68925), [@casusbelli](https://github.com/casusbelli))
-
-### Testing
-
-- e2e storage tests now run faster and are easier to read ([#72434](https://github.com/kubernetes/kubernetes/pull/72434), [@pohly](https://github.com/pohly))
-- `e2e.test` now rejects unknown `--provider` values instead of merely warning about them. An empty provider name is not accepted anymore and was replaced by `skeleton` (a provider with no special behavior). ([#73402](https://github.com/kubernetes/kubernetes/pull/73402), [@pohly](https://github.com/pohly))
-- Updated to go1.11.5 ([#73326](https://github.com/kubernetes/kubernetes/pull/73326), [@ixdy](https://github.com/ixdy))
-- Updated to use go1.12.1 ([#75413](https://github.com/kubernetes/kubernetes/pull/75413), [@BenTheElder](https://github.com/BenTheElder))
-- e2e tests that require SSH may now be used against clusters that have nodes without external IP addresses by setting the environment variable `KUBE_SSH_BASTION` to the `host:port` of a machine that is allowed to SSH to those nodes. The same private key that the test would use is used for the bastion host. The test connects to the bastion and then tunnels another SSH connection to the node. ([#72286](https://github.com/kubernetes/kubernetes/pull/72286), [@smarterclayton](https://github.com/smarterclayton))
-- `PidPressure` now evicts pods from lowest priority to highest priority ([#72844](https://github.com/kubernetes/kubernetes/pull/72844), [@dashpole](https://github.com/dashpole))
-- Split up the mondo `kubernetes-test` tarball into `kubernetes-test-portable` and `kubernetes-test-{OS}-{ARCH}` tarballs. ([#74065](https://github.com/kubernetes/kubernetes/pull/74065), [@ixdy](https://github.com/ixdy))
+- Fixed issue with kubelet waiting on invalid devicepath on AWS ([#78595](https://github.com/kubernetes/kubernetes/pull/78595), [@gnufied](https://github.com/gnufied))
+- StorageOS volumes now show correct mount information (node and mount time) in the StorageOS administration CLI and UI. ([#78522](https://github.com/kubernetes/kubernetes/pull/78522), [@croomes](https://github.com/croomes))
+- Fixed issue in Portworx volume driver causing controller manager to crash. ([#76341](https://github.com/kubernetes/kubernetes/pull/76341), [@harsh-px](https://github.com/harsh-px))
+- For an empty regular file, `stat --printf %F` will now display `regular empty file` instead of `regular file`. ([#62159](https://github.com/kubernetes/kubernetes/pull/62159), [@dixudx](https://github.com/dixudx))
+- You can now have different operation names for different storage operations. This still prevents two operations on same volume from happening concurrently but if the operation changes, it resets the exponential backoff.
+([#75213](https://github.com/kubernetes/kubernetes/pull/75213), [@gnufied](https://github.com/gnufied))
+- Reduced event spam for `AttachVolume` storage operation. ([#75986](https://github.com/kubernetes/kubernetes/pull/75986), [@mucahitkurt](https://github.com/mucahitkurt))
+- Until this release, the iscsi plugin was waiting 10 seconds for a path to appear in the device list. However this timeout is not enough, or is less than the default device discovery timeout in most systems, which prevents certain devices from being discovered. This timeout has been raised to 30 seconds, which should help to avoid mount issues due to device discovery. ([#78475](https://github.com/kubernetes/kubernetes/pull/78475), [@humblec](https://github.com/humblec))
+- Added a field to store CSI volume expansion secrets ([#77516](https://github.com/kubernetes/kubernetes/pull/77516), [@gnufied](https://github.com/gnufied))
+- Fixed a bug in block volume expansion. ([#77317](https://github.com/kubernetes/kubernetes/pull/77317), [@gnufied](https://github.com/gnufied))
+- Count PVCs that are unbound towards attach limit. ([#73863](https://github.com/kubernetes/kubernetes/pull/73863), [@gnufied](https://github.com/gnufied))
### VMware
-- Applied zone labels to vSphere Volumes automatically. The zone labels are visible on the PV: ([#72687](https://github.com/kubernetes/kubernetes/pull/72687), [@subramanian-neelakantan](https://github.com/subramanian-neelakantan))
+- SAML token delegation (required for Zones support in vSphere) is now supported ([#78876](https://github.com/kubernetes/kubernetes/pull/78876), [@dougm](https://github.com/dougm))
+- vSphere SAML token auth is now supported when using Zones ([#75515](https://github.com/kubernetes/kubernetes/pull/75515), [@dougm](https://github.com/dougm))
### Windows
-Support for Windows nodes and Windows containers graduated to stable.
+- Kubectl port-forward for Windows containers was added in v1.15. To use it, you’ll need to build a new pause image including WinCAT. ([#75479](https://github.com/kubernetes/kubernetes/pull/75479), [@benmoss](https://github.com/benmoss))
+- We’re working to simplify the Windows node join experience with better scripts and kubeadm. Scripts and doc updates are still in the works, but some of the needed improvements are included in 1.15. These include:
+ - Windows kube-proxy will wait for HNS network creation on start ([#78612](https://github.com/kubernetes/kubernetes/pull/78612), [@ksubrmnn](https://github.com/ksubrmnn))
+ - kubeadm: implemented CRI detection for Windows worker nodes ([#78053](https://github.com/kubernetes/kubernetes/pull/78053), [@ksubrmnn](https://github.com/ksubrmnn))
+- Worked toward support for Windows Server version 1903, including adding Windows support for preserving the destination IP as the VIP when loadbalancing with DSR. ([#74825](https://github.com/kubernetes/kubernetes/pull/74825), [@ksubrmnn](https://github.com/ksubrmnn))
+- Bug fix: Windows Kubelet nodes will now correctly search the default location for Docker credentials (`%USERPROFILE%\.docker\config.json`) when pulling images from a private registry. (https://kubernetes.io/docs/concepts/containers/images/#configuring-nodes-to-authenticate-to-a-private-registry) ([#78528](https://github.com/kubernetes/kubernetes/pull/78528), [@bclau](https://github.com/bclau))
-Support for Group Managed Service Accounts (GMSA) for Windows containers in Kubernetes is alpha. GMSA are a specific type of Active Directory account that provides automatic password management, simplified service principal name (SPN) management, and the ability to delegate the management to other administrators across multiple servers.
-- Fixed smb remount and unmount issues on Windows ([#73661](https://github.com/kubernetes/kubernetes/pull/73661), [@andyzhangx](https://github.com/andyzhangx), [#75087](https://github.com/kubernetes/kubernetes/pull/75087), [@andyzhangx](https://github.com/andyzhangx))
-- Added network stats for Windows nodes and containers ([#74788](https://github.com/kubernetes/kubernetes/pull/74788), [@feiskyer](https://github.com/feiskyer))
-- The new test `[sig-network] DNS should now provide /etc/hosts entries for the cluster [LinuxOnly] [Conformance]` will validate the host entries set in the ``/etc/hosts`` file (pod's FQDN and hostname), which should be managed by Kubelet. ([#72729](https://github.com/kubernetes/kubernetes/pull/72729), [@bclau](https://github.com/bclau))
-- Allowed the kubelet to pass Windows GMSA credentials down to Docker ([#73726](https://github.com/kubernetes/kubernetes/pull/73726), [@wk8](https://github.com/wk8))
-- Added kube-proxy support for overlay networking and DSR in Windows and new flags for `network-name`, `source-vip`, and `enable-dsr`. ([#70896](https://github.com/kubernetes/kubernetes/pull/70896), [@ksubrmnn](https://github.com/ksubrmnn))
-- windows: Ensured graceful termination when being run as windows service ([#73292](https://github.com/kubernetes/kubernetes/pull/73292), [@steffengy](https://github.com/steffengy))
-- vSphere cloud provider now correctly retrieves the VM's UUID when running on Windows ([#71147](https://github.com/kubernetes/kubernetes/pull/71147), [@benmoss](https://github.com/benmoss))
-- Kubelet: added `usageNanoCores` from CRI stats provider ([#73659](https://github.com/kubernetes/kubernetes/pull/73659), [@feiskyer](https://github.com/feiskyer))
-- Introduced support for Windows nodes into the cluster bringup scripts for GCE. ([#73442](https://github.com/kubernetes/kubernetes/pull/73442), [@pjh](https://github.com/pjh))
-- Added network stats for Windows nodes and pods. ([#70121](https://github.com/kubernetes/kubernetes/pull/70121), [@feiskyer](https://github.com/feiskyer))
-- CoreDNS is only officially supported on Linux at this time. As such, when kubeadm is used to deploy this component into your kubernetes cluster, it will be restricted (using `nodeSelectors`) to run only on nodes with that operating system. This ensures that in clusters which include Windows nodes, the scheduler will not ever attempt to place CoreDNS pods on these machines, reducing setup latency and enhancing initial cluster stability. ([#69940](https://github.com/kubernetes/kubernetes/pull/69940), [@MarcPow](https://github.com/MarcPow))
+## Dependencies
-## External Dependencies
+### Changed
-- Default etcd server and client have been updated to v3.3.10. ([#71615](https://github.com/kubernetes/kubernetes/pull/71615), [#70168](https://github.com/kubernetes/kubernetes/pull/70168))
-- The list of validated docker versions has changed. 1.11.1 and 1.12.1 have been removed. The current list is 1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09. ([#72823](https://github.com/kubernetes/kubernetes/pull/72823), [#72831](https://github.com/kubernetes/kubernetes/pull/72831))
-- The default Go version was updated to 1.12.1. ([#75422](https://github.com/kubernetes/kubernetes/pull/75422))
-- CNI has been updated to v0.7.5 ([#75455](https://github.com/kubernetes/kubernetes/pull/75455))
-- CSI has been updated to v1.1.0. ([#75391](https://github.com/kubernetes/kubernetes/pull/75391))
-- The dashboard add-on has been updated to v1.10.1. ([#72495](https://github.com/kubernetes/kubernetes/pull/72495))
-- Cluster Autoscaler has been updated to v1.14.0 ([#75480](https://github.com/kubernetes/kubernetes/pull/75480))
-- kube-dns is unchanged at v1.14.13 since Kubernetes 1.12 ([#68900](https://github.com/kubernetes/kubernetes/pull/68900))
-- Influxdb is unchanged at v1.3.3 since Kubernetes 1.10 ([#53319](https://github.com/kubernetes/kubernetes/pull/53319))
-- Grafana is unchanged at v4.4.3 since Kubernetes 1.10 ([#53319](https://github.com/kubernetes/kubernetes/pull/53319))
+- The default Go version was updated to 1.12.5. ([#78528](https://github.com/kubernetes/kubernetes/pull/78528))
+- cri-tools has been updated to v1.14.0. ([#75658](https://github.com/kubernetes/kubernetes/pull/75658))
+- Cluster Autoscaler has been updated to v1.15.0. ([#78866](https://github.com/kubernetes/kubernetes/pull/78866))
- Kibana has been upgraded to v6.6.1. ([#71251](https://github.com/kubernetes/kubernetes/pull/71251))
-- CAdvisor has been updated to v0.33.1 ([#75140](https://github.com/kubernetes/kubernetes/pull/75140))
-- fluentd-gcp-scaler is unchanged at v0.5.0 since Kubernetes 1.13 ([#68837](https://github.com/kubernetes/kubernetes/pull/68837))
-- Fluentd in fluentd-elasticsearch has been upgraded to v1.3.3 ([#71180](https://github.com/kubernetes/kubernetes/pull/71180))
-- fluentd-elasticsearch has been updated to v2.4.0 ([#71180](https://github.com/kubernetes/kubernetes/pull/71180))
-- The fluent-plugin-kubernetes_metadata_filter plugin in fluentd-elasticsearch has been updated to v2.1.6 ([#71180](https://github.com/kubernetes/kubernetes/pull/71180))
-- fluentd-gcp is unchanged at v3.2.0 since Kubernetes 1.13 ([#70954](https://github.com/kubernetes/kubernetes/pull/70954))
-- OIDC authentication is unchanged at coreos/go-oidc v2 since Kubernetes 1.10 ([#58544](https://github.com/kubernetes/kubernetes/pull/58544))
-- Calico is unchanged at v3.3.1 since Kubernetes 1.13 ([#70932](https://github.com/kubernetes/kubernetes/pull/70932))
-- crictl on GCE is unchanged at v1.12.0 since Kubernetes 1.13 ([#69033](https://github.com/kubernetes/kubernetes/pull/69033))
-- CoreDNS has been updated to v1.3.1 ([#73610](https://github.com/kubernetes/kubernetes/pull/73610))
-- event-exporter has been updated to v0.2.3 ([#67691](https://github.com/kubernetes/kubernetes/pull/67691))
-- Es-image has been updated to Elasticsearch 6.6.1 ([#71252](https://github.com/kubernetes/kubernetes/pull/71252))
-- metrics-server remains unchanged at v0.3.1 since Kubernetes 1.12 ([#68746](https://github.com/kubernetes/kubernetes/pull/68746))
-- GLBC remains unchanged at v1.2.3 since Kubernetes 1.12 ([#66793](https://github.com/kubernetes/kubernetes/pull/66793))
-- Ingress-gce remains unchanged at v1.2.3 since Kubernetes 1.12 ([#66793](https://github.com/kubernetes/kubernetes/pull/66793))
-- ip-masq-agen remains unchanged at v2.1.1 since Kubernetes 1.12 ([#67916](https://github.com/kubernetes/kubernetes/pull/67916))
+- CAdvisor has been updated to v0.33.2. ([#76291](https://github.com/kubernetes/kubernetes/pull/76291))
+- Fluentd-gcp-scaler has been upgraded to v0.5.2. ([#76762](https://github.com/kubernetes/kubernetes/pull/76762))
+- Fluentd in fluentd-elasticsearch has been upgraded to v1.4.2. ([#76854](https://github.com/kubernetes/kubernetes/pull/76854))
+- fluentd-elasticsearch has been updated to v2.5.2. ([#76854](https://github.com/kubernetes/kubernetes/pull/76854))
+- event-exporter has been updated to v0.2.5. ([#77815](https://github.com/kubernetes/kubernetes/pull/77815))
+- es-image has been updated to Elasticsearch 6.7.2. ([#77765](https://github.com/kubernetes/kubernetes/pull/77765))
+- metrics-server has been updated to v0.3.3. ([#77950](https://github.com/kubernetes/kubernetes/pull/77950))
+- ip-masq-agent has been updated to v2.4.1. ([#77844](https://github.com/kubernetes/kubernetes/pull/77844))
+- addon-manager has been updated to v9.0.1 ([#77282](https://github.com/kubernetes/kubernetes/pull/77282))
+- go-autorest has been updated to v11.1.2 ([#77070](https://github.com/kubernetes/kubernetes/pull/77070))
+- klog has been updated to 0.3.0 ([#76474](https://github.com/kubernetes/kubernetes/pull/76474))
+- k8s-dns-node-cache image has been updated to v1.15.1 ([#76640](https://github.com/kubernetes/kubernetes/pull/76640), [@george-angel](https://github.com/george-angel))
-- [v1.14.0-rc.1](#v1140-rc1)
-- [v1.14.0-beta.2](#v1140-beta2)
-- [v1.14.0-beta.1](#v1140-beta1)
-- [v1.14.0-alpha.3](#v1140-alpha3)
-- [v1.14.0-alpha.2](#v1140-alpha2)
-- [v1.14.0-alpha.1](#v1140-alpha1)
+### Unchanged
+
+- Default etcd server version remains unchanged at v3.3.10. The etcd client version was updated to v3.3.10. ([#71615](https://github.com/kubernetes/kubernetes/pull/71615), [#70168](https://github.com/kubernetes/kubernetes/pull/70168), [#76917](https://github.com/kubernetes/kubernetes/pull/76917))
+- The list of validated docker versions remains unchanged.
+ - The current list is 1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09. ([#72823](https://github.com/kubernetes/kubernetes/pull/72823), [#72831](https://github.com/kubernetes/kubernetes/pull/72831))
+- CNI remains unchanged at v0.7.5. ([#75455](https://github.com/kubernetes/kubernetes/pull/75455))
+- CSI remains unchanged at to v1.1.0. ([#75391](https://github.com/kubernetes/kubernetes/pull/75391))
+- The dashboard add-on remains unchanged at v1.10.1. ([#72495](https://github.com/kubernetes/kubernetes/pull/72495))
+- kube-dns is unchanged at v1.14.13 as of Kubernetes 1.12. ([#68900](https://github.com/kubernetes/kubernetes/pull/68900))
+- Influxdb is unchanged at v1.3.3 as of Kubernetes 1.10. ([#53319](https://github.com/kubernetes/kubernetes/pull/53319))
+- Grafana is unchanged at v4.4.3 as of Kubernetes 1.10. ([#53319](https://github.com/kubernetes/kubernetes/pull/53319))
+- The fluent-plugin-kubernetes_metadata_filter plugin in fluentd-elasticsearch is unchanged at v2.1.6. ([#71180](https://github.com/kubernetes/kubernetes/pull/71180))
+- fluentd-gcp is unchanged at v3.2.0 as of Kubernetes 1.13. ([#70954](https://github.com/kubernetes/kubernetes/pull/70954))
+- OIDC authentication is unchanged at coreos/go-oidc v2 as of Kubernetes 1.10. ([#58544](https://github.com/kubernetes/kubernetes/pull/58544))
+- Calico is unchanged at v3.3.1 as of Kubernetes 1.13. ([#70932](https://github.com/kubernetes/kubernetes/pull/70932))
+- crictl on GCE was updated to v1.14.0. ([#75658](https://github.com/kubernetes/kubernetes/pull/75658))
+- CoreDNS is unchanged at v1.3.1 as of Kubernetes 1.14. ([#78691](https://github.com/kubernetes/kubernetes/pull/78691))
+- GLBC remains unchanged at v1.2.3 as of Kubernetes 1.12. ([#66793](https://github.com/kubernetes/kubernetes/pull/66793))
+- Ingress-gce remains unchanged at v1.2.3 as of Kubernetes 1.12. ([#66793](https://github.com/kubernetes/kubernetes/pull/66793))
+- [v1.15.0-rc.1](#v1150-rc1)
+- [v1.15.0-beta.2](#v1150-beta2)
+- [v1.15.0-beta.1](#v1150-beta1)
+- [v1.15.0-alpha.3](#v1150-alpha3)
+- [v1.15.0-alpha.2](#v1150-alpha2)
+- [v1.15.0-alpha.1](#v1150-alpha1)
-# v1.14.0-rc.1
+# v1.15.0-rc.1
[Documentation](https://docs.k8s.io)
-## Downloads for v1.14.0-rc.1
+## Downloads for v1.15.0-rc.1
filename | sha512 hash
-------- | -----------
-[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes.tar.gz) | `5cb5e8b14b301864063fd7531ab3b755fea054f540c55ecce70ac49fb59193488575eb42ba89c8b4a44f6f2d005602ffc50ac286354a16df27637dd2e05f90f0`
-[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-src.tar.gz) | `395424c2bcdb5e242995b18e8d6e5c00002ce2cb5a3964c28da0a4a181fada73ffceaccedb1fa9799be9b3c4fb5b451010cba65af4d7385c25c8c8f0298218fc`
+[kubernetes.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes.tar.gz) | `45733de20d0e46a0937577912d945434fa12604bd507f7a6df9a28b9c60b7699f2f13f2a6b99b6cc2a8cf012391346c961deae76f5902274ea09ba17e1796c4d`
+[kubernetes-src.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-src.tar.gz) | `63394dee48a5c69cecd26c2a8e54e6ed5c422a239b78a267c47b640f7c6774a68109179ebedd6bdb99bd9526b718831f754f75efed986dd01f8dea20988c498d`
### Client Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-darwin-386.tar.gz) | `ea304f3f8188db30cddd5423b25dc434b8f05315103f773619a65f83bee872581d83d5498a5f36a3064815e68998746cf661802eab36bfe96217253bac7e751c`
-[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-darwin-amd64.tar.gz) | `17e106b63067429b9228a4879a7350c01ae98650ef2e6fcc23d00415c2e3a7c340abd5bcfc4b976f3d737d9268159ef5e5e7b08757371daad637e721a2ffb4a9`
-[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-linux-386.tar.gz) | `406323ea4cbd524807e73b9a2f4eb0a813730b262402c224e5076080b84452137521e5782056e39bf6017bda8ef9e797ed497d51a653ed6822357f43d86bb0ae`
-[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-linux-amd64.tar.gz) | `293747816e5da30c53ca29f27479fae880404edd5fca413af165e52cc7ea7ff26312bb3916896eceea75af6b232647268324da76d2d30fa2a4a688557427f7c7`
-[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-linux-arm.tar.gz) | `98b6749c367282048ecd0c5b70ae8b7dafad82c599e359cbbe782a530bbd7bdb84a198577251d6aedbc39fb4e0297bd929d7e988eb557556f523073227375b09`
-[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-linux-arm64.tar.gz) | `0a650c53946ebd9c38705df36efabbf1fbe3da1acdf418cc4ab881530e6a9089b45ef36bd4a89467106561e2165a00cc2c47f791d9ba422f36544bfa4b1e3b68`
-[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-linux-ppc64le.tar.gz) | `807263f316f46c9334ec4dad84895cfe2b942ac4ed9aacf3ec8a63193e0d0a6ecaf573d00dfea278d1e552fe91e9474f534ea6798700dbdc84f1d9556ecfda3e`
-[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-linux-s390x.tar.gz) | `5589562ce0da49f4987388e3e2b6fcf29e92859fae65fb57cdd61bba20ff574c7f3e07f4fa26bb63789f927690ce19710803e0d2e3324bd2c80ddc4925ea973d`
-[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-windows-386.tar.gz) | `101245cd70221b443150be046e5b5a2c6c83334085bb17f603f59bb68c5960f353d57b6761acf052449f4fb057a5525978cdd7995d06134ab98f8628c23aac0d`
-[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-client-windows-amd64.tar.gz) | `b1c3802f60cc70ebc1258cb8fc4ffa1154ecee8fda473b033be4f9d1b187354cfd75d085a1ad45a35fcc42ad640c4fecaa2496cb48fad649a774f40a5150825f`
+[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-client-darwin-386.tar.gz) | `6af05492d75b4e2b510381dd7947afd104bf412cfcfff86ccf5ec1f1071928c6b100ea5baa4ce75641b50ca7f77e5130fb336674879faf69ee1bb036bbe5b2e9`
+[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-client-darwin-amd64.tar.gz) | `72e4ac298a6fc0b64673243fd0e02fe8d51d534dca6361690f204d43ae87caaf09293ff2074c25422e69312debb16c7f0bc2b285578bd585468fe09d77c829c8`
+[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-client-linux-386.tar.gz) | `06f96a3b48a92ec45125fbcff64ed13466be9c0aa418dfe64e158b7a122de4e50cf75fbee76830cfb6a9d46612f579c76edb84ab7d242b44ed9bee4b0286defb`
+[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-client-linux-amd64.tar.gz) | `ba97ccad5c572e264bccf97c69d93d49f4da02512a7e3fbfa01d5569e15cca0f23bf4dd2fb3f3e89c1f6b3aa92654a51dc3e09334ef66cc2354c91cc1904ddd9`
+[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-client-linux-arm.tar.gz) | `6155c5775ebe937dabcfeb53983358e269fb43396b15a170214be0b3f682f78b682845ca1d1abbf94139752f812d887914dfff85dcb41626886d85460b8ba1a3`
+[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-client-linux-arm64.tar.gz) | `ff6ef9f14be3c01f700546d949cfb2da91400f93bc4c8d0dc82cea442bf20593403956ffbe7934daad42d706949167b28b5bcc89e08488bbc5fa0fdd7369b753`
+[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-client-linux-ppc64le.tar.gz) | `09dbec3378130acd52aee71ba0ac7ad3942ac1b05f17886868bb499c32abd89ff277d2ac28da71962ba741a5ea2cae07b3dd5ace1fc8c4fa9ffc7f7e79dd62e4`
+[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-client-linux-s390x.tar.gz) | `8f1c211ef5764c57965d3ca197c93f8dcd768f7eb0ee9d5524f0867a8650ef8da9c21dced739697e879ba131e71311cc7df323ee7664fb35b9ea7f0149a686e3`
+[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-client-windows-386.tar.gz) | `4bea6bd88eb41c7c1f0d495da6d0c7f39b55f2ccbbc0939ccd97a470aeff637bf2b2a42f94553df5073cb762787622f2467fca8c17fcc7d92619cbc26f4c3c95`
+[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-client-windows-amd64.tar.gz) | `235e83e4bcf9535fb41a5d18dae145545ca4a7703ec6f7d6b3d0c3887c6981bb8fd12c367db2ba0cae0297724c16330978d569b2bad131aea7e1efcebef6b6a4`
### Server Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-server-linux-amd64.tar.gz) | `8e09465aab0a1d1ec39afc98af17de9b5de99b763c0c5feb2dc824f2bbae25edb690e9d162fd44f5155bea392bd229f544850fe19e767a8b342050f4bfafc2cc`
-[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-server-linux-arm.tar.gz) | `9409c368e1f9f26e633b7df5d6c90435394931d48a21f4ad1548d172b18ac462a859019cc66dba4df69d3b10702820c9a3e1bd5c469646b1db581e52e79e035d`
-[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-server-linux-arm64.tar.gz) | `3893290dc11ca71746fee77a44a607ad9e02036bab56b7fc3be247b71b2cf5b3f639fa41317a713abbe9a997abf80c7113ff1155482d0cc04a318ec8beccf869`
-[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-server-linux-ppc64le.tar.gz) | `8ac1e70cb39aeb5b1fe92c3ebba428db2036be739f462cc2f876f17dc71a01ba263b5611a15d95e5934e2fc7aa92042bc9b2fe65cf459263be90f5fbb5d83a15`
-[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-server-linux-s390x.tar.gz) | `80576cb6cc3a69c4fc0a0358dee5772ecb38437c534a3454c9613426417d4af3c527a0809cce4d46653a7b001c58033b06326c80c498d17387569d22d3ca9b22`
+[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-server-linux-amd64.tar.gz) | `7de5aa86903ae91e97ce3017d815ab944b2ce36b2a64b0d8222e49887013596d953c5e68fa30a3f6e8bc5973c4c247de490e6b3dd38ecdea17aa0d2dc7846841`
+[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-server-linux-arm.tar.gz) | `05d42c2a72c7ec54adc4e61bccae842fbab3e6f4f06ac3123eb6449fe7828698eeff2f2a1bfb883f443bae1b8a97ec0703f1e6243e1a1a74d57bf383fcc007e2`
+[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-server-linux-arm64.tar.gz) | `143152305c6b9a99d95da4e6ed479ab33b1c4a58f5386496f9b680bf7d601d87f5a0c4f9dce6aceb4d231bb7054ff5018666851192bd1db86b84bef9dedb1e01`
+[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-server-linux-ppc64le.tar.gz) | `7cf9084939319cf9ab67989151dd3384ffb4eb2c2575c8654c3afac65cabe27f499349c4f48633dc15e0cdadb2bf540ef054b57eb8fbd375b63e4592cf57c5e9`
+[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-server-linux-s390x.tar.gz) | `aaca5140e6bfeb67259d47e28da75da9a8f335ed4b61580d9f13061c4010a7739631cbb2aabbe3a9ec47023837ac2f06f7e005789f411d61c8248991a23c0982`
### Node Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-node-linux-amd64.tar.gz) | `71cd5dd6075a2eea851231a5a855e58b3f479d83358defafd068dd1d09e5b2c426a8a046ee621de91e17d7ecd67465911b93549088bf27a41c6e6b77d692a8c7`
-[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-node-linux-arm.tar.gz) | `48babf4a52013c2bc69049167579ba1bc70c769b782a2704c9dfcf44a6a8a72f07e0789af347135ee4797f2bf1a216c348a9a4a26be71855e95e8387bf4e2aac`
-[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-node-linux-arm64.tar.gz) | `cc19a52beaa7440ca7581e85d1e10137e93c2decdb7d7d7919e7fdcded63e4d94b3434513ca881dae844dd1eb1e2fe98ea5332fad5ffced846f729894ecf0ed1`
-[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-node-linux-ppc64le.tar.gz) | `241bf20ae366384efa0fb3798e07e1cdd3d4ea7ba91c146ef7761fb0b93a8514a0dd91f9eb47999ae263d6793e0577c2bbecf88548bcae06cedb437331d6d3bc`
-[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-node-linux-s390x.tar.gz) | `37ce3e021073c6c10cf240fb2c3f9a7ab35ece3c0b4a9fecbbdf790eb348b168d179824f3a8eb57d56f962b64f8a6a71925152c087f5bfe43b004cbfae65674d`
-[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-rc.1/kubernetes-node-windows-amd64.tar.gz) | `3248db12c274171f094ef41d6a59523aec35655ba35d151576ff2d2089c269f345e2c0646d585d7c04c440c6b4e7379c499bc8f51fcc8b91388e3dc4d1b6a899`
+[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-node-linux-amd64.tar.gz) | `ec53dc1eb78be6e80470c5606b515e6859a245136e6b19a6bbb1f18dbc0aa192858dcf77e913138ef09426fc064dd2be8f4252a9914a0a1b358d683888a316ff`
+[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-node-linux-arm.tar.gz) | `369e6a6f1f989af3863bc645019448964f0f1f28ace15680a888bc6e8b9192374ad823602709cb22969574876a700a3ef4c1889a8443b1526d3ccb6c6257da25`
+[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-node-linux-arm64.tar.gz) | `c3ffd6c293feec6739881bf932c4fb5d49c01698b16bf950d63185883fcadacc2b7875e9c390423927a3a07d52971923f6f0c4c084fd073585874804e9984ead`
+[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-node-linux-ppc64le.tar.gz) | `edeafe6bf1deeee4dd0174bdd3a09ece5a9a895667fcf60691a8b81ba5f99ec905cf231f9ea08ed25d58ddf692e9d1152484a085f0cfa1226ebf4476e12ccd9e`
+[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-node-linux-s390x.tar.gz) | `3d10142101327ee9a6d754488c3e9e4fd0b5f3a43f3ef4a19c5d9da993fbab6306443c8877160de76dfecf32076606861ea4eb44e66e666036196d5f3e0e44ad`
+[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0-rc.1/kubernetes-node-windows-amd64.tar.gz) | `514d09f3936af68746fc11e3b83f82c744ddab1c8160b59cb1b42ea8417dc0987d71040f37f6591d4df92da24e438d301932d7ccd93918692672b6176dc4f77b`
-## Changelog since v1.14.0-beta.2
-
-### Action Required
-
-* ACTION REQUIRED: Health check (liveness & readiness) probes using an HTTPGetAction will no longer follow redirects to different hostnames from the original probe request. Instead, these non-local redirects will be treated as a Success (the documented behavior). In this case an event with reason "ProbeWarning" will be generated, indicating that the redirect was ignored. If you were previously relying on the redirect to run health checks against different endpoints, you will need to perform the healthcheck logic outside the Kubelet, for instance by proxying the external endpoint rather than redirecting to it. ([#75416](https://github.com/kubernetes/kubernetes/pull/75416), [@tallclair](https://github.com/tallclair))
+## Changelog since v1.15.0-beta.2
### Other notable changes
-* Restores --username and --password flags to kubectl ([#75451](https://github.com/kubernetes/kubernetes/pull/75451), [@liggitt](https://github.com/liggitt))
-* fix race condition issue for smb mount on windows ([#75371](https://github.com/kubernetes/kubernetes/pull/75371), [@andyzhangx](https://github.com/andyzhangx))
-* UDP Service conntrack entries for ExternalIPs are now correctly cleared when endpoints are added ([#75265](https://github.com/kubernetes/kubernetes/pull/75265), [@JacobTanenbaum](https://github.com/JacobTanenbaum))
-* kubeadm: the kubeadm init output now provides join control-plane example only when the preconditions for joining a control plane are satisfied ([#75420](https://github.com/kubernetes/kubernetes/pull/75420), [@fabriziopandini](https://github.com/fabriziopandini))
-* Fix dockershim panic issues when deleting docker images. ([#75367](https://github.com/kubernetes/kubernetes/pull/75367), [@feiskyer](https://github.com/feiskyer))
-* kubeadm: Allow certain certs/keys to be missing on the secret when transferring secrets using `--experimental-upload-certs` feature ([#75415](https://github.com/kubernetes/kubernetes/pull/75415), [@ereslibre](https://github.com/ereslibre))
-* Update to use go1.12.1 ([#75413](https://github.com/kubernetes/kubernetes/pull/75413), [@BenTheElder](https://github.com/BenTheElder))
-* Update CSI version to 1.1 ([#75391](https://github.com/kubernetes/kubernetes/pull/75391), [@gnufied](https://github.com/gnufied))
-* Ensure ownership when deleting a load balancer security group ([#74311](https://github.com/kubernetes/kubernetes/pull/74311), [@hpedrorodrigues](https://github.com/hpedrorodrigues))
-* kubelet: updated logic of verifying a static critical pod. ([#75144](https://github.com/kubernetes/kubernetes/pull/75144), [@Huang-Wei](https://github.com/Huang-Wei))
-* Allow disable outbound SNAT when Azure standard load balancer is used together with outbound rules. ([#75282](https://github.com/kubernetes/kubernetes/pull/75282), [@feiskyer](https://github.com/feiskyer))
-* Add ResourceVersion as a precondition for delete in order to ensure a delete fails if an unobserved change happens to an object. ([#74040](https://github.com/kubernetes/kubernetes/pull/74040), [@ajatprabha](https://github.com/ajatprabha))
-* Services of type=LoadBalancer which have no endpoints will now immediately ICMP reject connections, rather than time out. ([#74394](https://github.com/kubernetes/kubernetes/pull/74394), [@thockin](https://github.com/thockin))
-* Ensure Azure load balancer cleaned up on 404 or 403 when deleting LoadBalancer services. ([#75256](https://github.com/kubernetes/kubernetes/pull/75256), [@feiskyer](https://github.com/feiskyer))
+* Resolves spurious rollouts of workload controllers when upgrading the API server, due to incorrect defaulting of an alpha procMount field in pods ([#78885](https://github.com/kubernetes/kubernetes/pull/78885), [@liggitt](https://github.com/liggitt))
+* vSphere: allow SAML token delegation (required for Zones support) ([#78876](https://github.com/kubernetes/kubernetes/pull/78876), [@dougm](https://github.com/dougm))
+* Update Cluster Autoscaler to 1.15.0; changelog: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.15.0 ([#78866](https://github.com/kubernetes/kubernetes/pull/78866), [@losipiuk](https://github.com/losipiuk))
+* Revert the CoreDNS version to 1.3.1 ([#78691](https://github.com/kubernetes/kubernetes/pull/78691), [@rajansandeep](https://github.com/rajansandeep))
+* CRDs get support for x-kuberntes-int-or-string to allow faithful representation of IntOrString types in CustomResources. ([#78815](https://github.com/kubernetes/kubernetes/pull/78815), [@sttts](https://github.com/sttts))
+* fix: retry detach azure disk issue ([#78700](https://github.com/kubernetes/kubernetes/pull/78700), [@andyzhangx](https://github.com/andyzhangx))
+ * try to only update vm if detach a non-existing disk when got <200, error> after detach disk operation
+* Fix issue with kubelet waiting on invalid devicepath on AWS ([#78595](https://github.com/kubernetes/kubernetes/pull/78595), [@gnufied](https://github.com/gnufied))
+* Fixed a spurious error where update requests to the status subresource of multi-version custom resources would complain about an incorrect API version. ([#78713](https://github.com/kubernetes/kubernetes/pull/78713), [@liggitt](https://github.com/liggitt))
+* Fix admission metrics histogram bucket sizes to cover 25ms to ~2.5 seconds. ([#78608](https://github.com/kubernetes/kubernetes/pull/78608), [@jpbetz](https://github.com/jpbetz))
+* Revert Promotion of resource quota scope selector to GA ([#78696](https://github.com/kubernetes/kubernetes/pull/78696), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla))
-# v1.14.0-beta.2
+# v1.15.0-beta.2
[Documentation](https://docs.k8s.io)
-## Downloads for v1.14.0-beta.2
+## Downloads for v1.15.0-beta.2
filename | sha512 hash
-------- | -----------
-[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes.tar.gz) | `c1d5f2615c3319fc167c577f40f385abe6652bf4fd3bdb04617b36029dc3000b190c18b4b3a29827da75c680979697d61fffb45b86ba6226f880b98b2f308f4f`
-[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-src.tar.gz) | `0a8d8ed208bc0bf424060126c76fcd8dbbd53a9b9695647314a4097f7013f548b76850438933760ff76835867676cddddf65134ad79f977ecdb98632fc2edda3`
+[kubernetes.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes.tar.gz) | `e6c98ae93c710bb655e9b55d5ae60c56001fefb0fce74c624c18a032b94798cdfdc88ecbb1065dc36144147a9e9a77b69fba48a26097d132e708ddedde2f90b5`
+[kubernetes-src.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-src.tar.gz) | `c9666ddb858631721f15e988bb5c30e222f0db1c38a6d67721b9ddcfac870d5f2dd8fc399736c55117ba94502ffe7ab0bb5a9e390e18a05196b463184c42da56`
### Client Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-darwin-386.tar.gz) | `c919d030255c5d3879926d8aaa53939cd5aa37084799748452166ca6668bd1d10edf063d633682cddafaaed43dd1b991f4ad09139c5e4f519bd69f581b3fe0aa`
-[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-darwin-amd64.tar.gz) | `ec14d4a1d720890065211544b099be17315265534cfd20435194dc842cc807c20b5fae78f5b95ba7d05f3d921d522017f50861760d195ce1bf5b1acfdb2dbb29`
-[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-linux-386.tar.gz) | `6cee12be5b855600ee80f15d1e0511099941b099bd5b252549abdc2a65c077f10ca4d53ab9804a0ce8d51f3b9cbab829cb551733cd4aed37c0d91238b82a8fe4`
-[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-linux-amd64.tar.gz) | `27d8cd48c1f3259055965b85a6b973ecb5b8a36894f94c232d773f89539e28e6c270bfe35427c70b4ad4800e42c869851981cf88f586b7d488efa538e6c88126`
-[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-linux-arm.tar.gz) | `7f98230569c61fdf2b141e519f042b2e27ff37aeda746dc30bb7ce226b5d6b0c0bb85c6070b9ffc8d38c2441feb5bd8736c67708a59552e86a2c30cc02ecdece`
-[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-linux-arm64.tar.gz) | `159da67010af38d87c5318b7ad594120afd6a9b780d11d6e607e7214862cd6514b00da673cce72574771dbc780ab435dbba0a3267f051a20155c05ee0729ded0`
-[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-linux-ppc64le.tar.gz) | `d8ca7871d3d40947db69061284cb31c4d072d4da56fbb11a4485f6853f041835d9605cfc5dcea88d58c7f484cce13dbca485e80891c845291b9b28c574df310b`
-[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-linux-s390x.tar.gz) | `1c58db90b6e09b8d8f956a00263cb20271b8403f7fb6c5b20d76cca9ed973c35d2f5c910a6d42980ec9159480682d3786a59e9e05ce356a7e3b4181c848ad122`
-[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-windows-386.tar.gz) | `00fb87dd4899208dd6607c22828f3985ebfd5e1f97cb24e3b2c69c249a4887d5c26c603b3bb4c21f9e2b737c917ddf95a1818d9de5c9ec97d3f5faa0c3dada52`
-[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-client-windows-amd64.tar.gz) | `7afdf637d62dde480162ad1521360b2bc78e0d4d20f6e6201e2f19b55b8e9bbd69c1ce8d03101c750ef389c65a1bc0a94dfc9a2d501d6840fd31eacbd3582028`
+[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-client-darwin-386.tar.gz) | `084e37b2d5d06aab37b34aba012eb6c2bb4d33bef433bef0340e306def8fddcbffb487cd150379283d11c3fa35387596780a12e306c39359f9a59106de20e8eb`
+[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-client-darwin-amd64.tar.gz) | `7319108bb6e7b28575d64dadc3f397de30eb6f4f3ae1bef2001a2e84f98cb64577ff1794c41e2a700600045272b4648cd201e434f27f0ec1fb23638b86a7cac1`
+[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-client-linux-386.tar.gz) | `5c4c8993c3a57f08cf08232ce5f3ecd5a2acffe9f5bc779fd00a4042a2d2099cc5fcf07c40d3524439e2fd79ebaa52c64fa06866ff3146e27b4aafd8233a6c72`
+[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-client-linux-amd64.tar.gz) | `607cd737c944d186c096d38bc256656b6226534c36ffcaab981df0a755e62fe7967649ff6d2e198348d1640302e799ab4de788bbeb297c1577e0b20f603f93c1`
+[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-client-linux-arm.tar.gz) | `9a0aac4210c453311d432fab0925cb9b275efa2d01335443795c35e4d7dde22cbf3a2cee5f74e50c90d80b8f252ad818c4199f6019b87b57c18fa4ea50ff0408`
+[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-client-linux-arm64.tar.gz) | `6f416001e9fb42e1720302a6a46cee94952a2a825281ac7c5d6cce549f81b36b78585228ecee0fe2de56afbf44605c36a0abf100d59f25c40352c8c2e44d1168`
+[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-client-linux-ppc64le.tar.gz) | `4c0e4451b6bfd08cdb851ef8e68d5206cbd55c60a65bb95e2951ab22f2f2d4a15c653ad8638a64e96b5975102db0aa338c16cea470c5f57bdf43e56db9848351`
+[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-client-linux-s390x.tar.gz) | `d5c47fe6e79e73b426881e9ee00291952d70c65bfbdb69216e84b86ddaf2ffe5dc9447ea94d07a91a479ed85850125103d4bd0aa2ecd98c503b57d9c2018a68d`
+[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-client-windows-386.tar.gz) | `d906d737a90ca0287156e42569479c9918f89f9a02e6fb800ea250a8c2a7a4792372401ecb25a342eebc2a8270ec2ebb714764af99afae83e6fe4b6a71d23f5b`
+[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-client-windows-amd64.tar.gz) | `7b0c9f14600bdfb77dc2935ba0c3407f7d5720a3a0b7ca9a18fe3fabb87a2279216cc56fa136116b28b4b3ade7f3d2cf6f3c8e31cf1809c0fe575c3b0635bca6`
### Server Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-server-linux-amd64.tar.gz) | `2ac3c4910cd36f02a62304d78fe144b821edf445c522028e6b57d2dc3bcc7355159a58815d5a6991b3f2c33bb0ef23e07134c8bbf93b34be7452f80c9a9e6edf`
-[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-server-linux-arm.tar.gz) | `db06b5f1a83ca4ec82428ab771eae2858b188dc23780fb9b146494c06aa6175421090b200c58b670e2d4253a7e0d4b07172a632e0754c35ccdee7e264c636f17`
-[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-server-linux-arm64.tar.gz) | `b40e1745d1ecfcc95f3a750990244fa128381d6d74246798a62aecb8cec9c77cdcd470e79334eb5c670e1e3a288080b4e26a080c64481ba608e3156c72df474b`
-[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-server-linux-ppc64le.tar.gz) | `c84297fd2b18b6bdade5a135a3da929e286bbba5c8dd66778091bad4eea1ac4b97a32ab3b146a88f0716bebcce9a4a85a7cd421cb185a3df864dcfa77312b3a9`
-[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-server-linux-s390x.tar.gz) | `39c8f6e7f52bec155b11652b4e80c2c52acf8754dbdf80a9d5bab5370d1debf4f4783c1a6968d41822b00ff744c72947df6cbc4623578e7679b9ce9a98f64ff3`
+[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-server-linux-amd64.tar.gz) | `636ebe9044f0033e3eff310e781d395f31a871a53e322932f331d2496975148a415053d5f67ba4ecd562bf3c9f6e066518e6dc805e756f552a23ad370f1fb992`
+[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-server-linux-arm.tar.gz) | `ff656458f1d19345538a4145b97821403f418a06503ef94f6c0d0662f671b54b37aedbce064dc14f2d293bb997b3c1dc77decdaf979d333bc8ba5beae01592e6`
+[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-server-linux-arm64.tar.gz) | `a95199a2b2f81c38c6c14791668598986595bedd41c9e9b2e94add0e93c5d0132f975e7a9042ae7abd4aeefd70d6a63f06030f632ecabffa358f73a575c7733f`
+[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-server-linux-ppc64le.tar.gz) | `856d949df9494576e2dbd3b99d8097e97e8c4d2d195404f8307285303ff94ab7de282b55cd01d00bdafce20fa060585c97a065828269e6386abca245e15b2730`
+[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-server-linux-s390x.tar.gz) | `7215091725f742977120f2ee4f4bc504dcff75d7258b7e90fcb4e41a2527d6cfd914d621258bd9735c08c86f53100300878eb0bbc89e13990145b77fe55dcbe1`
### Node Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-node-linux-amd64.tar.gz) | `bf19ae7140836aea1b6f414532eff886e3b91e0746b9224ce46e60e0b83fa90a8c3df1ff8e01ff340a1e1874ce15da28e98224024ed3139589474e89befa19f2`
-[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-node-linux-arm.tar.gz) | `4b8194340a8675107da3969845173fb34ed2b0a38745ec0ac395ebf2116ee84d55be6e22ff84fafbaf4ca60a05f6debf6e95957a2261ac8a587eea32e5803fd5`
-[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-node-linux-arm64.tar.gz) | `8494dae5225f3b543afd575003fe0f30eb0f3cf9bc9dfbae72d6bda8f17c5446165433c28842a114af66ac3ae8fca9f92d780d1eb93e9bcb6b5dcc4fe8cd2a7f`
-[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-node-linux-ppc64le.tar.gz) | `0bd41d95f0a76c1b057a8913a8b2cffbf6d48c47aef1d9beed0de205b8010e8071e8f527eeaa003730ef97a017083278cb2036cf22a1abfb2f4669b935823cdc`
-[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-node-linux-s390x.tar.gz) | `169b16512df42a6cb5b000a3d6d6da5ae48a733c5d11b034eaec6b3816b86ec97b92e4075872900188bc296427037299841224e552ccf079097d5cf333627cbc`
-[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.2/kubernetes-node-windows-amd64.tar.gz) | `ccfebde5176cb28529552889250bf706add04df3c3f9aee5b8bdd9ebdb5bce334add8351cdbeebb9bd4b17b31d994b7739d2c494aa4c64bcb3ceba1a6ef53447`
+[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-node-linux-amd64.tar.gz) | `47b8c18afaa5f81b82a42309e95cf6b3f849db18bc2e8aeaaaa54ee219b5c412ba5c92276d3efe9c8fa4d10b7da1667fd7c8bede8f7a4bef9fe429ccadf910c3`
+[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-node-linux-arm.tar.gz) | `64d5ad334f9448c3444cd90b0a6a7f07d83f4fb307e850686eb14b13f8926f832ef994c93341488dbc67750af9d5b922e0f6b9cc98316813fd1960c38c0a9f77`
+[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-node-linux-arm64.tar.gz) | `62d1e7fb2f1f271ca349d29bc43f683e7025107d893e974131063403746bb58ce203166656985c1ff22a4eef4d6d5a3373a9f49bdf9a55ad883308aedbc33cfb`
+[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-node-linux-ppc64le.tar.gz) | `215a2e3a40c88922427d73af3d38b6a2827c2a699a76fa7acf1a171814d36c0abec406820045ae3f33f88d087dc9ceee3b8d5e6b9c70e77fb8095d1b8aa0cf7d`
+[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-node-linux-s390x.tar.gz) | `d75f2a2fb430e7e7368f456590698fe04930c623269ffba88dd546a45ac9dd1f08f007bef28b53d232da3636c44c8f5e8e4135d8fe32ffc1bcdd45a8db883e45`
+[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0-beta.2/kubernetes-node-windows-amd64.tar.gz) | `c8eeb1d9ada781a97dc368d308fb040124f644225579f18bb41bff0f354d65ea9e90fa2d4a161826c93c05f689abd4f7971fa80ea533c88b5a828cfc6f5a0801`
-## Changelog since v1.14.0-beta.1
+## Changelog since v1.15.0-beta.1
### Action Required
-* ACTION REQUIRED: The node.k8s.io API group and runtimeclasses.node.k8s.io resource have been migrated to a built-in API. If you were using RuntimeClasses (an default-disabled alpha feature, as of Kubernetes v1.12), then you must recreate all RuntimeClasses after upgrading, and the runtimeclasses.node.k8s.io CRD should be manually deleted. RuntimeClasses can no longer be created without a defined handler. ([#74433](https://github.com/kubernetes/kubernetes/pull/74433), [@tallclair](https://github.com/tallclair))
- * Introduce a RuntimeClass v1beta1 API. This new beta API renames `runtimeHandler` to `handler`, makes it a required field, and cuts out the spec (handler is a top-level field).
-* Transition CSINodeInfo and CSIDriver alpha CRDs to in-tree CSINode and CSIDriver core storage v1beta1 APIs. ([#74283](https://github.com/kubernetes/kubernetes/pull/74283), [@xing-yang](https://github.com/xing-yang))
- * ACTION REQUIRED: the alpha CRDs are no longer used and drivers will need to be updated to use the beta APIs.
- * The support for `_` in the CSI driver name will be dropped as the CSI Spec does not allow that.
+* ACTION REQUIRED The deprecated flag --conntrack-max has been removed from kube-proxy. Users of this flag should switch to --conntrack-min and --conntrack-max-per-core instead. ([#78399](https://github.com/kubernetes/kubernetes/pull/78399), [@rikatz](https://github.com/rikatz))
+* ACTION REQUIRED: kubeadm: the mixture of "--config" and "--certificate-key" is no longer allowed. The InitConfiguration and JoinConfiguration objects now support the "certificateKey" field and this field should be used instead of the command line argument in case a configuration file is already passed. ([#78542](https://github.com/kubernetes/kubernetes/pull/78542), [@neolit123](https://github.com/neolit123))
+* Azure cloud provider could now be configured by Kubernetes secrets and a new option `cloudConfigType` is introduced, whose candicate values are `file`, `secret` and `merge` (default is `merge`). ([#78242](https://github.com/kubernetes/kubernetes/pull/78242), [@feiskyer](https://github.com/feiskyer))
+ * action required:
+ * Since Azure cloud provider would read Kubernetes secrets, the following RBAC should be configured:
+ * ---
+ * apiVersion: rbac.authorization.k8s.io/v1beta1
+ * kind: ClusterRole
+ * metadata:
+ * labels:
+ * kubernetes.io/cluster-service: "true"
+ * name: system:azure-cloud-provider-secret-getter
+ * rules:
+ * - apiGroups: [""]
+ * resources: ["secrets"]
+ * verbs:
+ * - get
+ * ---
+ * apiVersion: rbac.authorization.k8s.io/v1beta1
+ * kind: ClusterRoleBinding
+ * metadata:
+ * labels:
+ * kubernetes.io/cluster-service: "true"
+ * name: system:azure-cloud-provider-secret-getter
+ * roleRef:
+ * apiGroup: rbac.authorization.k8s.io
+ * kind: ClusterRole
+ * name: system:azure-cloud-provider-secret-getter
+ * subjects:
+ * - kind: ServiceAccount
+ * name: azure-cloud-provider
+ * namespace: kube-system
### Other notable changes
-* Support collecting pod logs under /var/log/pods/NAMESPACE_NAME_UID to stackdriver with `k8s_pod` resource type. ([#74502](https://github.com/kubernetes/kubernetes/pull/74502), [@Random-Liu](https://github.com/Random-Liu))
-* --make-symlinks for hyperkube was marked hidden for a while, This flag is now deprecated and will be removed in a future release. ([#74975](https://github.com/kubernetes/kubernetes/pull/74975), [@dims](https://github.com/dims))
-* fix smb unmount issue on Windows ([#75087](https://github.com/kubernetes/kubernetes/pull/75087), [@andyzhangx](https://github.com/andyzhangx))
-* Kubelet no longer watches configmaps and secrets for terminated pods, in worst scenario causing it to not be able to send other requests to kube-apiserver ([#74809](https://github.com/kubernetes/kubernetes/pull/74809), [@oxddr](https://github.com/oxddr))
-* - Fixes a bug concerning Quobyte volumes where user mappings only worked if the hosts Kubernetes plugin mount was provided via an external configuration using the _allow-usermapping-in-volumename_ option. ([#74520](https://github.com/kubernetes/kubernetes/pull/74520), [@casusbelli](https://github.com/casusbelli))
-* Change CRI pod log directory from `/var/log/pods/UID` to `/var/log/pods/NAMESPACE_NAME_UID`. ([#74441](https://github.com/kubernetes/kubernetes/pull/74441), [@Random-Liu](https://github.com/Random-Liu))
- * It is recommended to drain the node before upgrade, or reboot the node after upgrade.
-* Promote RuntimeClass to beta, and enable by default. ([#75003](https://github.com/kubernetes/kubernetes/pull/75003), [@tallclair](https://github.com/tallclair))
-* New "dry_run" metric label (indicating the value of the dryRun query parameter) into the metrics: ([#74997](https://github.com/kubernetes/kubernetes/pull/74997), [@jennybuckley](https://github.com/jennybuckley))
- * apiserver_request_total
- * apiserver_request_duration_seconds
- * New "APPLY" value for the "verb" metric label which indicates a PATCH with "Content-Type: apply-patch+yaml". This value is experimental and will only be present if the ServerSideApply alpha feature is enabled.
-* GCE: bump COS image version to cos-beta-73-11647-64-0 ([#75149](https://github.com/kubernetes/kubernetes/pull/75149), [@yguo0905](https://github.com/yguo0905))
-* - Add duration metric for CRD webhook converters ([#74376](https://github.com/kubernetes/kubernetes/pull/74376), [@mbohlool](https://github.com/mbohlool))
-* Alpha support for ephemeral CSI inline volumes that are embedded in pod specs. ([#74086](https://github.com/kubernetes/kubernetes/pull/74086), [@vladimirvivien](https://github.com/vladimirvivien))
-* Add support for node side CSI volume expansion ([#74863](https://github.com/kubernetes/kubernetes/pull/74863), [@gnufied](https://github.com/gnufied))
-* - Add mechanism for Admission Webhooks to specify which version of AdmissionReview they support ([#74998](https://github.com/kubernetes/kubernetes/pull/74998), [@mbohlool](https://github.com/mbohlool))
- * - Add mechanism for CRD Conversion Webhooks to specify which version of ConversionReview they support
-* Add a new kubelet endpoint for serving first-class resource metrics ([#73946](https://github.com/kubernetes/kubernetes/pull/73946), [@dashpole](https://github.com/dashpole))
-* Deprecate AWS, Azure, GCE and Cinder specific volume limit predicates. ([#74544](https://github.com/kubernetes/kubernetes/pull/74544), [@gnufied](https://github.com/gnufied))
-* PodReadinessGate feature is now GA. The feature gate will not allow disabling it. ([#74434](https://github.com/kubernetes/kubernetes/pull/74434), [@freehan](https://github.com/freehan))
-* If CSINodeInfo and CSIMigration feature flags are active in the cluster, Kubelet will post NotReady until CSINode is initialized with basic volume plugin mechanism information for well-known drivers ([#74835](https://github.com/kubernetes/kubernetes/pull/74835), [@davidz627](https://github.com/davidz627))
-* Add network stats for Windows nodes and containers ([#74788](https://github.com/kubernetes/kubernetes/pull/74788), [@feiskyer](https://github.com/feiskyer))
-* kubeadm: when calling "reset" on a control-plane node, remove the APIEndpoint information for this node from the ClusterStatus in the kubeadm ConfigMap. ([#75082](https://github.com/kubernetes/kubernetes/pull/75082), [@neolit123](https://github.com/neolit123))
-* kube-apiserver now serves OpenAPI specs for registered CRDs with defined ([#71192](https://github.com/kubernetes/kubernetes/pull/71192), [@roycaihw](https://github.com/roycaihw))
- * validation schemata as an alpha feature, to be enabled via the "CustomResourcePublishOpenAPI" feature gate. Kubectl will validate client-side using those. Note that in
- * future, client-side validation in 1.14 kubectl against a 1.15 cluster will reject
- * unknown fields for CRDs with validation schema defined.
-* Fix kubelet start failure issue on Azure Stack due to InstanceMetadata setting ([#74936](https://github.com/kubernetes/kubernetes/pull/74936), [@rjaini](https://github.com/rjaini))
-* add subcommand `kubectl create cronjob` ([#71651](https://github.com/kubernetes/kubernetes/pull/71651), [@Pingan2017](https://github.com/Pingan2017))
-* The CSIBlockVolume feature gate is now beta, and defaults to enabled. ([#74909](https://github.com/kubernetes/kubernetes/pull/74909), [@bswartz](https://github.com/bswartz))
-* Pre-existing log files are now opened with O_APPEND, instead of O_TRUNC. This helps prevent losing logs when components crash-loop, and also enables external log rotation utilities to truncate log files in-place without components extending log files to their pre-truncation sizes on subsequent writes. ([#74837](https://github.com/kubernetes/kubernetes/pull/74837), [@mtaufen](https://github.com/mtaufen))
-* the test/e2e/e2e.test binary can test arbitrary storage drivers, see the `-storage.testdriver` parameter ([#72836](https://github.com/kubernetes/kubernetes/pull/72836), [@pohly](https://github.com/pohly))
-* Fix panic in kubectl cp command ([#75037](https://github.com/kubernetes/kubernetes/pull/75037), [@soltysh](https://github.com/soltysh))
-* iscsi modules haven't even been loaded /sys/class/iscsi_host directory won't exist ([#74787](https://github.com/kubernetes/kubernetes/pull/74787), [@jianglingxia](https://github.com/jianglingxia))
-* the fluentd addon daemonset will now target all nodes. ([#74424](https://github.com/kubernetes/kubernetes/pull/74424), [@liggitt](https://github.com/liggitt))
- * setting `ENABLE_METADATA_CONCEALMENT=true` in kube-up will now set a `cloud.google.com/metadata-proxy-ready=true` label on new nodes. In v1.16, the metadata proxy add-on will switch to using that label as a node selector.
- * setting `KUBE_PROXY_DAEMONSET=true` in kube-up will now set a `node.kubernetes.io/kube-proxy-ds-ready=true` label on new nodes. In v1.16, the kube-proxy daemonset add-on will switch to using that label as a node selector.
- * In 1.16, the masq-agent daemonset add-on will switch to using `node.kubernetes.io/masq-agent-ds-ready` as a node selector.
-* - Kubelet: replace `du` and `find` with a golang implementation ([#74675](https://github.com/kubernetes/kubernetes/pull/74675), [@dashpole](https://github.com/dashpole))
- * - Kubelet: periodically update machine info to support hot-add/remove
-* kubeadm: add certificate-key and skip-certificate-key-print flags to kubeadm init ([#74671](https://github.com/kubernetes/kubernetes/pull/74671), [@yagonobre](https://github.com/yagonobre))
-* Admission webhooks rules can now limit scope to only match namespaced, or only cluster-scoped resources with a `scope: "Cluster" | "Namespaced" | "*"` field. ([#74477](https://github.com/kubernetes/kubernetes/pull/74477), [@liggitt](https://github.com/liggitt))
-* The CSIPersistentVolume and KubeletPluginWatcher feature gates cannot be disabled, and will be removed in Kubernetes v1.16 ([#74830](https://github.com/kubernetes/kubernetes/pull/74830), [@msau42](https://github.com/msau42))
-* Kubelet won't evict a static pod with priority `system-node-critical` upon resource pressure. ([#74222](https://github.com/kubernetes/kubernetes/pull/74222), [@Huang-Wei](https://github.com/Huang-Wei))
-* Fixes panic if a kubelet is run against an older kube-apiserver ([#74529](https://github.com/kubernetes/kubernetes/pull/74529), [@liggitt](https://github.com/liggitt))
-* The resource group name in Azure providerID is not converted to lower cases. ([#74882](https://github.com/kubernetes/kubernetes/pull/74882), [@feiskyer](https://github.com/feiskyer))
-* Remove the out-of-tree PersistentVolumeLabel controller because it cannot run without Initializers (removed in v1.14). If you are using AWS EBS, GCE PD, Azure Disk, Cinder Disk or vSphere volumes and rely on zone labels, then enable the `PersistentVolumeLabel` admission controller in the `kube-apiserver` in the `--enable-admission-plugins` flag. ([#74615](https://github.com/kubernetes/kubernetes/pull/74615), [@andrewsykim](https://github.com/andrewsykim))
-* kubeadm: improved RequiredIPVSKernelModulesAvailable warning message ([#74033](https://github.com/kubernetes/kubernetes/pull/74033), [@bart0sh](https://github.com/bart0sh))
-* Add `nullable` support to CustomResourceDefinition OpenAPI validation schemata. ([#74804](https://github.com/kubernetes/kubernetes/pull/74804), [@sttts](https://github.com/sttts))
-* Fix kube-apiserver not to create default/kubernetes service endpoints before it reports readiness via the /healthz and therefore is ready to serve requests. Also early during startup old endpoints are remove which might be left over from a previously crashed kube-apiserver. ([#74668](https://github.com/kubernetes/kubernetes/pull/74668), [@sttts](https://github.com/sttts))
-* kubeadm: fix a bug where standard kubeconfig paths were searched even if the user provided /etc/kubernetes/admin.conf explicitly for commands that accept --kubeconfig, like kubeadm token. ([#71874](https://github.com/kubernetes/kubernetes/pull/71874), [@neolit123](https://github.com/neolit123))
- * kubeadm: use the default kubeconfig (/etc/kubernetes/admin.conf) for "kubeadm reset" and "kubeadm upgrade" commands.
-* Increase api server client certificate expiration histogram resolution to accommodate short-lived (< 6h) client certificates. ([#74806](https://github.com/kubernetes/kubernetes/pull/74806), [@mxinden](https://github.com/mxinden))
-* Default RBAC policy no longer grants access to discovery and permission-checking APIs (used by `kubectl auth can-i`) to *unauthenticated* users. Upgraded clusters preserve prior behavior, but cluster administrators wishing to grant unauthenticated users access in new clusters will need to explicitly opt-in to expose the discovery and/or permission-checking APIs: ([#73807](https://github.com/kubernetes/kubernetes/pull/73807), [@dekkagaijin](https://github.com/dekkagaijin))
- * `kubectl create clusterrolebinding anonymous-discovery --clusterrole=system:discovery --group=system:unauthenticated`
- * `kubectl create clusterrolebinding anonymous-access-review --clusterrole=system:basic-user --group=system:unauthenticated`
-* The PersistentLocalVolumes feature is GA. The feature gate cannot be disabled and will be removed in Kubernetes 1.17 ([#74769](https://github.com/kubernetes/kubernetes/pull/74769), [@msau42](https://github.com/msau42))
-* kubelet: resolved hang/timeout issues when running large numbers of pods with unique configmap/secret references by reverting to 1.11 configmap/secret lookup behavior ([#74755](https://github.com/kubernetes/kubernetes/pull/74755), [@liggitt](https://github.com/liggitt))
-* Convert `latency`/`latencies` in metrics name to `duration`. ([#74418](https://github.com/kubernetes/kubernetes/pull/74418), [@danielqsj](https://github.com/danielqsj))
- * The following metrics are changed and mark previous metrics as deprecated:
- * `rest_client_request_latency_seconds` -> `rest_client_request_duration_seconds`
- * `apiserver_proxy_tunnel_sync_latency_secs` -> `apiserver_proxy_tunnel_sync_duration_seconds`
- * `scheduler_scheduling_latency_seconds` -> `scheduler_scheduling_duration_seconds `
-* Fix help message for --container-runtime-endpoint: only unix socket is support on Linux. ([#74712](https://github.com/kubernetes/kubernetes/pull/74712), [@feiskyer](https://github.com/feiskyer))
-* Update to use golang 1.12 ([#74632](https://github.com/kubernetes/kubernetes/pull/74632), [@cblecker](https://github.com/cblecker))
-* The `RunAsGroup` feature has been promoted to beta and enabled by default. PodSpec and PodSecurityPolicy objects can be used to control the primary GID of containers on supported container runtimes. ([#73007](https://github.com/kubernetes/kubernetes/pull/73007), [@krmayankk](https://github.com/krmayankk))
-* fix Azure Container Registry anonymous repo image pull error ([#74715](https://github.com/kubernetes/kubernetes/pull/74715), [@andyzhangx](https://github.com/andyzhangx))
-* Adds the same information to an init container as a standard container in a pod when using PodPresets. ([#71479](https://github.com/kubernetes/kubernetes/pull/71479), [@soggiest](https://github.com/soggiest))
-* fix the flake in scheduling_queue_test.go ([#74611](https://github.com/kubernetes/kubernetes/pull/74611), [@denkensk](https://github.com/denkensk))
-* The kube-apiserver OpenAPI definitions with the prefix "io.k8s.kubernetes.pkg" (deprecated since 1.9) have been removed. ([#74596](https://github.com/kubernetes/kubernetes/pull/74596), [@sttts](https://github.com/sttts))
-* kube-conformance image will now run ginkgo with the --dryRun flag if the container is run with the environment variable E2E_DRYRUN set. ([#74731](https://github.com/kubernetes/kubernetes/pull/74731), [@johnSchnake](https://github.com/johnSchnake))
-* The deprecated `MountPropagation` feature gate has been removed, and the feature is now unconditionally enabled. ([#74720](https://github.com/kubernetes/kubernetes/pull/74720), [@bertinatto](https://github.com/bertinatto))
-* Introduce dynamic volume provisioning shim for CSI migration ([#73653](https://github.com/kubernetes/kubernetes/pull/73653), [@ddebroy](https://github.com/ddebroy))
-* Fix --help flag parsing ([#74682](https://github.com/kubernetes/kubernetes/pull/74682), [@soltysh](https://github.com/soltysh))
-* This PR removes the following metrics: ([#74636](https://github.com/kubernetes/kubernetes/pull/74636), [@logicalhan](https://github.com/logicalhan))
- * reflector_items_per_list
- * reflector_items_per_watch
- * reflector_last_resource_version
- * reflector_list_duration_seconds
- * reflector_lists_total
- * reflector_short_watches_total
- * reflector_watch_duration_seconds
- * reflector_watches_total
- * While this is a backwards-incompatible change, it would have been impossible to setup reliable monitoring around these metrics since the labels were not stable.
-* Add a configuration field to shorten the timeout of validating/mutating admission webhook call. The timeout value must be between 1 and 30 seconds. Default to 30 seconds when unspecified. ([#74562](https://github.com/kubernetes/kubernetes/pull/74562), [@roycaihw](https://github.com/roycaihw))
-* client-go: PortForwarder.GetPorts() now contain correct local port if no local port was initially specified when setting up the port forwarder ([#73676](https://github.com/kubernetes/kubernetes/pull/73676), [@martin-helmich](https://github.com/martin-helmich))
-* # Apply resources from a directory containing kustomization.yaml ([#74140](https://github.com/kubernetes/kubernetes/pull/74140), [@Liujingfang1](https://github.com/Liujingfang1))
- * kubectl apply -k dir
- * # Delete resources from a directory containing kustomization.yaml.
- * kubectl delete -k dir
- * # List resources from a directory containing kustomization.yaml
- * kubectl get -k dir
-* kubeadm: Allow to download certificate secrets uploaded by `init` or `upload-certs` phase, allowing to transfer certificate secrets (certificates and keys) from the cluster to other master machines when creating HA deployments. ([#74168](https://github.com/kubernetes/kubernetes/pull/74168), [@ereslibre](https://github.com/ereslibre))
-* Fixes an issue with missing apiVersion/kind in object data sent to admission webhooks ([#74448](https://github.com/kubernetes/kubernetes/pull/74448), [@liggitt](https://github.com/liggitt))
-* client-go: the deprecated versionless API group accessors (like `clientset.Apps()` have been removed). Use an explicit version instead (like `clientset.AppsV1()`) ([#74422](https://github.com/kubernetes/kubernetes/pull/74422), [@liggitt](https://github.com/liggitt))
-* The `--quiet` option to `kubectl run` now suppresses resource deletion messages emitted when the `--rm` option is specified. ([#73266](https://github.com/kubernetes/kubernetes/pull/73266), [@awh](https://github.com/awh))
-* Add Custom Resource support to "kubectl autoscale" ([#72678](https://github.com/kubernetes/kubernetes/pull/72678), [@rmohr](https://github.com/rmohr))
-* Image garbage collection no longer fails for images with only one tag but more than one repository associated. ([#70647](https://github.com/kubernetes/kubernetes/pull/70647), [@corvus-ch](https://github.com/corvus-ch))
-* - Fix liveness probe in fluentd-gcp cluster addon ([#74522](https://github.com/kubernetes/kubernetes/pull/74522), [@Pluies](https://github.com/Pluies))
-* The new test ``[sig-network] DNS should provide /etc/hosts entries for the cluster [LinuxOnly] [Conformance]`` will validate the host entries set in the ``/etc/hosts`` file (pod's FQDN and hostname), which should be managed by Kubelet. ([#72729](https://github.com/kubernetes/kubernetes/pull/72729), [@bclau](https://github.com/bclau))
- * The test has the tag ``[LinuxOnly]`` because individual files cannot be mounted in Windows Containers, which means that it cannot pass using Windows nodes.
+* kube-up.sh scripts now disable the KubeletPodResources feature for Windows nodes, due to issue [#78628](https://github.com/kubernetes/kubernetes/pull/78628). ([#78668](https://github.com/kubernetes/kubernetes/pull/78668), [@mtaufen](https://github.com/mtaufen))
+* StorageOS volumes now show correct mount information (node and mount time) in the StorageOS administration CLI and UI. ([#78522](https://github.com/kubernetes/kubernetes/pull/78522), [@croomes](https://github.com/croomes))
+* Horizontal Pod Autoscaling can now scale targets up even when one or more metrics are invalid/unavailable as long as one metric indicates a scale up should occur. ([#78503](https://github.com/kubernetes/kubernetes/pull/78503), [@gjtempleton](https://github.com/gjtempleton))
+* kubeadm: revert the CoreDNS version to 1.3.1 ([#78545](https://github.com/kubernetes/kubernetes/pull/78545), [@neolit123](https://github.com/neolit123))
+* Move online volume expansion to beta ([#77755](https://github.com/kubernetes/kubernetes/pull/77755), [@gnufied](https://github.com/gnufied))
+* Fixes a memory leak in Kubelet on Windows caused by not not closing containers when fetching container metrics ([#78594](https://github.com/kubernetes/kubernetes/pull/78594), [@benmoss](https://github.com/benmoss))
+* Windows kube-proxy will wait for HNS network creation on start ([#78612](https://github.com/kubernetes/kubernetes/pull/78612), [@ksubrmnn](https://github.com/ksubrmnn))
+* Fix error handling for loading initCfg in kubeadm upgrade and apply ([#78611](https://github.com/kubernetes/kubernetes/pull/78611), [@odinuge](https://github.com/odinuge))
+* Route controller now respects rate limiting to the cloud provider on deletion, previously it was only for create. ([#78581](https://github.com/kubernetes/kubernetes/pull/78581), [@andrewsykim](https://github.com/andrewsykim))
+* Windows Kubelet nodes will now correctly search the default location for Docker credentials (`%USERPROFILE%\.docker* Windows nodes on GCE now have the Windows firewall enabled by default. ([#78507](https://github.com/kubernetes/kubernetes/pull/78507), [@pjh](https://github.com/pjh))
+* Added objectSelector to admission webhook configurations. objectSelector is evaluated the oldObject and newObject that would be sent to the webhook, and is considered to match if either object matches the selector. A null object (oldObject in the case of create, or newObject in the case of delete) or an object that cannot have labels (like a DeploymentRollback or a PodProxyOptions object) is not considered to match. Use the object selector only if the webhook is opt-in, because end users may skip the admission webhook by setting the labels. ([#78505](https://github.com/kubernetes/kubernetes/pull/78505), [@caesarxuchao](https://github.com/caesarxuchao))
+* Deprecate kubelet cAdvisor json endpoints ([#78504](https://github.com/kubernetes/kubernetes/pull/78504), [@dashpole](https://github.com/dashpole))
+* Supports configure accessLogs for AWS NLB ([#78497](https://github.com/kubernetes/kubernetes/pull/78497), [@M00nF1sh](https://github.com/M00nF1sh))
+* Till this release, iscsi plugin was waiting 10 seconds for a path to appear in the device list. However this timeout is not enough or less than default device discovery timeout in most of the systems which cause certain device to be not accounted for the volume. This timeout has been lifted to 30seconds from this release and it should help to avoid mount issues due to device discovery. ([#78475](https://github.com/kubernetes/kubernetes/pull/78475), [@humblec](https://github.com/humblec))
+* Remove deprecated --pod/-p flag from kubectl exec. The flag has been marked as deprecated since k8s version v1.12 ([#76713](https://github.com/kubernetes/kubernetes/pull/76713), [@prksu](https://github.com/prksu))
+* CustomResourceDefinition with invalid regular expression in the pattern field of OpenAPI v3 validation schemas are not considere structural. ([#78453](https://github.com/kubernetes/kubernetes/pull/78453), [@sttts](https://github.com/sttts))
+* Fixed panic in kube-proxy when parsing iptables-save output ([#78428](https://github.com/kubernetes/kubernetes/pull/78428), [@luksa](https://github.com/luksa))
+* Remove deprecated flag --cleanup-iptables from kube-proxy ([#78344](https://github.com/kubernetes/kubernetes/pull/78344), [@aramase](https://github.com/aramase))
+* The storageVersionHash feature is beta now. "StorageVersionHash" is a field in the discovery document of each resource. It allows clients to detect if the storage version of that resource has changed. Its value must be treated as opaque by clients. Only equality comparison on the value is valid. ([#78325](https://github.com/kubernetes/kubernetes/pull/78325), [@caesarxuchao](https://github.com/caesarxuchao))
+* Use zone from node for topology aware aws-ebs volume creation to reduce unnecessary cloud provider calls ([#78276](https://github.com/kubernetes/kubernetes/pull/78276), [@zhan849](https://github.com/zhan849))
+* Finalizer Protection for Service LoadBalancers is now added as Alpha (disabled by default). This feature ensures the Service resource is not fully deleted until the correlating load balancer resources are deleted. ([#78262](https://github.com/kubernetes/kubernetes/pull/78262), [@MrHohn](https://github.com/MrHohn))
+* Introducing new semantic for metric "volume_operation_total_seconds" to be the end to end latency of volume provisioning/deletion. Existing metric "storage_operation_duration_seconds" will remain untouched however exposed to the following potential issues: ([#78061](https://github.com/kubernetes/kubernetes/pull/78061), [@yuxiangqian](https://github.com/yuxiangqian))
+ * 1. for volume's provisioned/deleted via external provisioner/deleter, "storage_operation_duration_seconds" will NOT wait for the external operation to be done before reporting latency metric (effectively close to 0). This will be fixed by using "volume_operation_total_seconds" instead
+ * 2. if there's a transient error happened during "provisioning/deletion", i.e., a volume is still in-use while a deleteVolume has been called, original "storage_operation_duration_seconds" will NOT wait until a volume has been finally deleted before reporting a not accurate latency metric. The newly implemented metric "volume_operation_total_seconds", however, wait util a provisioning/deletion operation has been fully executed.
+ * Potential impacts:
+ * If an SLO/alert has been defined based on "volume_operation_total_seconds", it might get violated because of the more accurate metric might be significantly larger than previously reported. The metric is defined to be a histogram and the new semantic could change the distribution.
+* metrics added to kubelet endpoint 'metrics/probes': ([#77975](https://github.com/kubernetes/kubernetes/pull/77975), [@logicalhan](https://github.com/logicalhan))
+ * process_start_time_seconds
+* NodeLocal DNSCache graduating to beta. ([#77887](https://github.com/kubernetes/kubernetes/pull/77887), [@prameshj](https://github.com/prameshj))
+* Kubelet will attempt to use wincat.exe in the pause container for port forwarding when running on Windows ([#75479](https://github.com/kubernetes/kubernetes/pull/75479), [@benmoss](https://github.com/benmoss))
+* iptables proxier: route local traffic to LB IPs to service chain ([#77523](https://github.com/kubernetes/kubernetes/pull/77523), [@andrewsykim](https://github.com/andrewsykim))
+* When the number of jobs exceeds 500, cronjob should schedule without error. ([#77475](https://github.com/kubernetes/kubernetes/pull/77475), [@liucimin](https://github.com/liucimin))
+* Enable 3rd party device monitoring by default ([#77274](https://github.com/kubernetes/kubernetes/pull/77274), [@RenaudWasTaken](https://github.com/RenaudWasTaken))
+* This change enables a user to specify a DataSource/Kind of type "PersistentVolumeClaim" in their PVC spec. This can then be detected by the external csi-provisioner and plugins if capable. ([#76913](https://github.com/kubernetes/kubernetes/pull/76913), [@j-griffith](https://github.com/j-griffith))
+* proxy/transport: Support Content-Encoding: deflate ([#76551](https://github.com/kubernetes/kubernetes/pull/76551), [@JieJhih](https://github.com/JieJhih))
+* Add --sort-by option to kubectl top command ([#75920](https://github.com/kubernetes/kubernetes/pull/75920), [@artmello](https://github.com/artmello))
+* Introduce Topolgy into the runtimeClass API ([#75744](https://github.com/kubernetes/kubernetes/pull/75744), [@yastij](https://github.com/yastij))
+* Kubelet plugin registration now has retry and exponential backoff logic for when registration of plugins (like CSI or device plugin) fail. ([#73891](https://github.com/kubernetes/kubernetes/pull/73891), [@taragu](https://github.com/taragu))
+* Windows support for preserving the destination IP as the VIP when loadbalancing with DSR. ([#74825](https://github.com/kubernetes/kubernetes/pull/74825), [@ksubrmnn](https://github.com/ksubrmnn))
+* Add NonPrempting field to the PriorityClass. ([#74614](https://github.com/kubernetes/kubernetes/pull/74614), [@denkensk](https://github.com/denkensk))
+* The kubelet only collects metrics for the node, container runtime, kubelet, pods, and containers. ([#72787](https://github.com/kubernetes/kubernetes/pull/72787), [@dashpole](https://github.com/dashpole))
+* Improved README for k8s.io/sample-apiserver ([#73447](https://github.com/kubernetes/kubernetes/pull/73447), [@MikeSpreitzer](https://github.com/MikeSpreitzer))
+* kubeadm: flag “--experimental-control-plane” is now deprecated. use “--control-plane” instead ([#78452](https://github.com/kubernetes/kubernetes/pull/78452), [@fabriziopandini](https://github.com/fabriziopandini))
+ * kubeadm: flag “--experimental-upload-certs” is now deprecated. use “--upload-certs” instead
+* Promote resource quota scope selector to GA ([#78448](https://github.com/kubernetes/kubernetes/pull/78448), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla))
+* `kubectl scale job`, deprecated since 1.10, has been removed ([#78445](https://github.com/kubernetes/kubernetes/pull/78445), [@soltysh](https://github.com/soltysh))
+* CustomResourcesDefinition conversion via webhooks is promoted to beta. It requires that spec.preserveUnknownFields is set to false. ([#78426](https://github.com/kubernetes/kubernetes/pull/78426), [@sttts](https://github.com/sttts))
+* kubeadm: a new command `kubeadm upgrade node` is introduced for upgrading nodes (both secondary control-plane nodes and worker nodes) ([#78408](https://github.com/kubernetes/kubernetes/pull/78408), [@fabriziopandini](https://github.com/fabriziopandini))
+ * The command `kubeadm upgrade node config` is now deprecated; use `kubeadm upgrade node` instead.
+ * The command `kubeadm upgrade node experimental-control-plane` is now deprecated; use `kubeadm upgrade node` instead.
+* Increase log level to 2 for IPVS graceful termination ([#78395](https://github.com/kubernetes/kubernetes/pull/78395), [@andrewsykim](https://github.com/andrewsykim))
+* Add support for Azure File plugin to csi-translation-lib ([#78356](https://github.com/kubernetes/kubernetes/pull/78356), [@andyzhangx](https://github.com/andyzhangx))
+* refactor AWS NLB securityGroup handling ([#74692](https://github.com/kubernetes/kubernetes/pull/74692), [@M00nF1sh](https://github.com/M00nF1sh))
+* Handle resize operation for volume plugins migrated to CSI ([#77994](https://github.com/kubernetes/kubernetes/pull/77994), [@gnufied](https://github.com/gnufied))
+* Inline CSI ephemeral volumes can now be controlled with PodSecurityPolicy when the CSIInlineVolume alpha feature is enabled ([#76915](https://github.com/kubernetes/kubernetes/pull/76915), [@vladimirvivien](https://github.com/vladimirvivien))
+* Add support for Azure Disk plugin to csi-translation-lib ([#78330](https://github.com/kubernetes/kubernetes/pull/78330), [@andyzhangx](https://github.com/andyzhangx))
+* Ensures that the node-role.kubernetes.io/master taint is applied to the master with NoSchedule on GCE. ([#78183](https://github.com/kubernetes/kubernetes/pull/78183), [@cheftako](https://github.com/cheftako))
+* Add Post-bind extension point to the scheduling framework ([#77567](https://github.com/kubernetes/kubernetes/pull/77567), [@wgliang](https://github.com/wgliang))
+* Add CRD support for default values in OpenAPI v3 validation schemas. `default` values are set for object fields which are undefined in request payload and in data read from etcd. Defaulting is alpha and disabled by default, if the feature gate CustomResourceDefaulting is not enabled. ([#77558](https://github.com/kubernetes/kubernetes/pull/77558), [@sttts](https://github.com/sttts))
+* kubeadm: v1beta2 InitConfiguration no longer embeds ClusterConfiguration it it. ([#77739](https://github.com/kubernetes/kubernetes/pull/77739), [@rosti](https://github.com/rosti))
+* kube-apiserver: the `--enable-logs-handler` flag and log-serving functionality is deprecated, and scheduled to be removed in v1.19. ([#77611](https://github.com/kubernetes/kubernetes/pull/77611), [@rohitsardesai83](https://github.com/rohitsardesai83))
+* Fix vSphere SAML token auth when using Zones ([#78137](https://github.com/kubernetes/kubernetes/pull/78137), [@dougm](https://github.com/dougm))
+* Admission webhooks can now register for a single version of a resource (for example, `apps/v1 deployments`) and be called when any other version of that resource is modified (for example `extensions/v1beta1 deployments`). This allows new versions of a resource to be handled by admission webhooks without needing to update every webhook to understand the new version. See the API documentation for the `matchPolicy: Equivalent` option in MutatingWebhookConfiguration and ValidatingWebhookConfiguration types. ([#78135](https://github.com/kubernetes/kubernetes/pull/78135), [@liggitt](https://github.com/liggitt))
+* Add `kubeadm alpha certs certificate-key` command to generate secure random key to use on `kubeadm init --experimental-upload-certs` ([#77848](https://github.com/kubernetes/kubernetes/pull/77848), [@yagonobre](https://github.com/yagonobre))
+* IPVS: Disable graceful termination for UDP traffic to solve issues with high number of UDP connections (DNS / syslog in particular) ([#77802](https://github.com/kubernetes/kubernetes/pull/77802), [@lbernail](https://github.com/lbernail))
+* In CRD webhook conversion ignore changes to metadata other than for labels and annotations. ([#77743](https://github.com/kubernetes/kubernetes/pull/77743), [@sttts](https://github.com/sttts))
+* Allow trailing dots in the externalName of Services of type ExternalName. ([#78385](https://github.com/kubernetes/kubernetes/pull/78385), [@thz](https://github.com/thz))
+* Fix a bug where kube-proxy returns error due to existing ipset rules using a different hash type. ([#77371](https://github.com/kubernetes/kubernetes/pull/77371), [@andrewsykim](https://github.com/andrewsykim))
+* kubeadm: implement CRI detection for Windows worker nodes ([#78053](https://github.com/kubernetes/kubernetes/pull/78053), [@ksubrmnn](https://github.com/ksubrmnn))
-# v1.14.0-beta.1
+# v1.15.0-beta.1
[Documentation](https://docs.k8s.io)
-## Downloads for v1.14.0-beta.1
+## Downloads for v1.15.0-beta.1
filename | sha512 hash
-------- | -----------
-[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes.tar.gz) | `065014c751635f8c077fbcc105df578594baf8afd8b8339004909198e1bd68d0a7ce3644ed5d54e5964d1306aa650f22a5ce83063415240f4dffd6706c1cc33b`
-[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-src.tar.gz) | `244c19d9fad21ae154ee78fc94888dc60bcfcf3ec72bdc28a82e77c572cbc969d2abbf20397ef9564a35585c08dfe179b105fc25efac973e0a13d78ee2ff8f42`
+[kubernetes.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes.tar.gz) | `c0dcbe90feaa665613a6a1ca99c1ab68d9174c5bcd3965ff9b8d9bad345dfa9e5eaa04a544262e3648438c852c5ce2c7ae34caecebefdb06091747a23098571c`
+[kubernetes-src.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-src.tar.gz) | `b79bc690792e0fbc380e47d6708250211a4e742d306fb433a1b6b50d5cea79227d4e836127f33791fb29c9a228171cd48e11bead624c8401818db03c6dc8b310`
### Client Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-darwin-386.tar.gz) | `78a61a1e922daa39a9f7dd61b8bad87d202b537bda59f90ae8aae941c0ff412e3d328530af9dd9f22462cbd67254e7ce1556defe48bb10bd6a94d4302464fe8e`
-[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-darwin-amd64.tar.gz) | `5a1d66fd90a5dc07b95b7617b5583595e0a4a664e7005f6281f846c85b21e28692b2e2d55b7c40c7b8cbb96b6b8cd6c832f340c7cc67579641beabac033014ad`
-[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-linux-386.tar.gz) | `30991ce0776bae7551b98a811e3ccb5104b0859805c41a216db7d5779cddfb36ef3c5e658ea2adeaf67f8e6f181768850b09a0e8320c2983d34664156ea638ac`
-[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-linux-amd64.tar.gz) | `5501a9c3a95e43f0c691b05043546f2c497d50a6ad88b88219842d61be83d7dcb8871ff9fd2447c02bc842c4c962f298a3ce2e0618fae70e8aa391c9407626e5`
-[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-linux-arm.tar.gz) | `4bf341a2f943719d006f4cacc26fdf4d021560d37d49c8d9c4620d294142041155a88dc721d9373a8617e1baa904c02b4545f379ffe87c6ab20e5459a5d3c2de`
-[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-linux-arm64.tar.gz) | `1c0c660618947b053404ab8ef40bdec0a06d54a1f9edc585a7259806f878327d9ae54100bba98e5b7f44f5db4303276d189792e68517603520a49868c07e684c`
-[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-linux-ppc64le.tar.gz) | `9d2c3f4bfbad03b41859670f9cfda6596f51a89077fd4da2f74490f71b5de10e459954e897d2a1ba3a217c62caaf1be74424e5bf6a5609868dc4f069ac06c94f`
-[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-linux-s390x.tar.gz) | `9be5259caf39ff3c4d0f024d616bff50ac417d42a87c56b6877fbdf5aaadecee05631ac8ddd6dca20d52ae4ca7e1227a1fd5e882be9821f3711e144b84d41099`
-[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-windows-386.tar.gz) | `5b1e75f532d9a4d656cd1c5ec48a19d01c4ca731c6c3d986ebbc48a9f1e1d61d6c5603145808fb929117cf2202bc75f31ec7661a50edf24c5af6b3419ebcc0ab`
-[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-client-windows-amd64.tar.gz) | `a501d3c0be55d5a73214a83d1f48b39a49d4a84f5f9988fa34cf66ef6bc78d3f3e06c40dc3d59538c3bff07aa2128ee814d9825c31f8b9abbf045e1ebb581bed`
+[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-client-darwin-386.tar.gz) | `b79ca71cf048515084cffd9459153e6ad4898f123fda1b6aa158e5b59033e97f3b4eb1a5563c0bfe4775d56a5dc58d651d5275710b9b250db18d60cc945ea992`
+[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-client-darwin-amd64.tar.gz) | `699a76b03ad3d1a38bd7e1ffb7765526cc33fb40b0e7dc0a782de3e9473e0e0d8b61a876c0d4e724450c3f2a6c2e91287eefae1c34982c84b5c76a598fbbca2c`
+[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-client-linux-386.tar.gz) | `5fa8bc2cbd6c9f6a8c9fe3fa96cad85f98e2d21132333ab7068b73d2c7cd27a7ebe1384fef22fdfdb755f635554efca850fe154f9f272e505a5f594f86ffadff`
+[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-client-linux-amd64.tar.gz) | `3dfbd496cd8bf9348fd2532f4c0360fe58ddfaab9d751f81cfbf9d9ddb8a347e004a9af84578aaa69bb8ee1f8cfc7adc5fd1864a32261dff94dd5a59e5f94c00`
+[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-client-linux-arm.tar.gz) | `4abcac1fa5c1ca5e9d245e87ca6f601f7013b6a7e9a9d8dae7b322e62c8332e94f0ab63db71c0c2a535eb45bf2da51055ca5311768b8e927a0766ad99f727a72`
+[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-client-linux-arm64.tar.gz) | `22e2d6fc8eb1f64528215901c7cc8a016dda824557667199b9c9d5478f163962240426ef2a518e3981126be82a1da01cf585b1bf08d9fd2933a370beaef8d766`
+[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-client-linux-ppc64le.tar.gz) | `8d6f283020d76382e00b9e96f1c880654196aead67f17285ad1faf7ca7d1d2c2776e30deb9b67cee516f0efa8c260026925924ea7655881f9d75e9e5a4b8a9b7`
+[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-client-linux-s390x.tar.gz) | `3320edd26be88e9ba60b5fbb326a0e42934255bb8f1c2774eb2d309318e6dbd45d8f7162d741b7b8c056c1c0f2b943dd9939bcdde2ada80c6d9de3843e35aefe`
+[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-client-windows-386.tar.gz) | `951d1c9b2e68615b6f26b85e27895a6dfea948b7e4c566e27b11fde8f32592f28de569bb9723136d830548f65018b9e9df8bf29823828778796568bff7f38c36`
+[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-client-windows-amd64.tar.gz) | `2f049941d3902b2915bea5430a29254ac0936e4890c742162993ad13a6e6e3e5b6a40cd3fc4cfd406c55eba5112b55942e6c85e5f6a5aa83d0e85853ccccb130`
### Server Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-server-linux-amd64.tar.gz) | `aed44ec5bc6bdaf41c20824a9841ee541bfd23362966f9326eca2cafbd03eca69325877784b8c9b058963dc5b8ba656b9da446513fd5eeed8133a783769acd16`
-[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-server-linux-arm.tar.gz) | `e751cb675013183a70a8817dca0b5c456a1ccf075244b411317e813b5164ae710460a53e81191ded9d2ccaf284ae00304bfbe1b3d219b2a8d57761d733293409`
-[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-server-linux-arm64.tar.gz) | `3aabb1a9bd07413d0740adfb638b0e5ca4cd4a58eda244c5ebc1ea01780e0b2863806c35792a0590069ef0cccc2665198afed1984d1c49f0726b75d4216609a4`
-[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-server-linux-ppc64le.tar.gz) | `3c57e2b47b3b9ddc1039684840886877947141b1e4d31f909793678544fe92e10aa82a207936f0bcb3c657044c7b875f34f41f086ccb7f97a154499d01266f73`
-[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-server-linux-s390x.tar.gz) | `fe418cfafc63cbccc1898086296e52026df27ff498753089792175ce0d41d889ca50a4eb5104a84b78a0a25d524dcdf5ec5eec8aa213d58178ae38411cfb58af`
+[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-server-linux-amd64.tar.gz) | `9049dc0680cb96245473422bb2c5c6ca8b1930d7e0256d993001f5de95f4c9980ded018d189b69d90c66a09af93152aa2823182ae0f3cbed72fb66a1e13a9d8c`
+[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-server-linux-arm.tar.gz) | `38f08b9e78ea3cbe72b473cda1cd48352ee879ce0cd414c0decf2abce63bab6bdf8dc05639990c84c63faf215c581f580aadd1d73be4be233ff5c87b636184b9`
+[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-server-linux-arm64.tar.gz) | `6cd0166162fc13c9d47cb441e8dd3ff21fae6d2417d3eb780b24ebcd615ac0841ec0602e746371dc62b8bddebf94989a7e075d96718c3989dc1c12adbe366cf9`
+[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-server-linux-ppc64le.tar.gz) | `79570f97383f102be77478a4bc19d0d2c2551717c5f37e8aa159a0889590fc2ac0726d4899a0d9bc33e8c9e701290114222c468a76b755dc2604b113ab992ef3`
+[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-server-linux-s390x.tar.gz) | `7e1371631373407c3a1b231d09610d1029d1981026f02206a11fd58471287400809523b91de578eb26ca77a7fe4a86dcc32e225c797642733188ad043600f82e`
### Node Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-node-linux-amd64.tar.gz) | `83b63d7e9d18fe35564105fd70629af9ba8f20112933b3ace92a48887702862e013ac3b3e144cfd44c8ead7c766df584766749af9d33a9aaa3808e370d3ea359`
-[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-node-linux-arm.tar.gz) | `e4ac000be25ced9b308ec698da9702bd10a0a7183bfea9648500ab9d0879989c54328cb4fb51be545831d18676067d6b53e55cc49b14f55f35032a66dfa28806`
-[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-node-linux-arm64.tar.gz) | `35fa5ec8a7fc001fe33abd89f8a446ce0ea2a011db27dc8ff544c2b199b065b19372afe95e3616f538347243d7599f29fb5cea1a46a3fcfdfe4a0f2a346683b2`
-[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-node-linux-ppc64le.tar.gz) | `a5b938e9cdc39fc292269af4c3961a17b9bcdaf85b3c58db680f2d1a4fb088eb648efc268dfe3325aed96f6a7cdcff070dc7a3200cc169010ff2b402fae1a26a`
-[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-node-linux-s390x.tar.gz) | `d8e2b5a945f881ddb0a25576a614d564ccef0ad4e93c84b30cdc57888e81e04932d798415a1a50cdfc6d2f857e1d027e2034ba9c40b5d8ed0009cfbdc8915e0f`
-[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-beta.1/kubernetes-node-windows-amd64.tar.gz) | `426774466800ca11cae16821c7d92917b2ce138fcb3f6dca813ec0f060649d6a50187982aaac31fbb081604f5bd2c317616b6f211beb139f53192269194f012e`
+[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-node-linux-amd64.tar.gz) | `819bc76079474791d468a2945c9d0858f066a54b54fcc8a84e3f9827707d6f52f9c2abcf9ea7a2dd3f68852f9bd483b8773b979c46c60e5506dc93baab3bb067`
+[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-node-linux-arm.tar.gz) | `1054e793d5a38ac0616cc3e56c85053beda3f39bc3dad965d73397756e3d78ea07d1208b0fdd5f8e9e6a10f75da017100ef6b04fdb650983262eaad682d84c38`
+[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-node-linux-arm64.tar.gz) | `8357b8ee1ff5b2705fea1f70fdb3a10cb09ed1e48ee0507032dbadfb68b44b3c11c0c796541e6e0bbf010b20040871ca91f8edb4756d6596999092ca4931a540`
+[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-node-linux-ppc64le.tar.gz) | `cf62d7a660dd16ee56717a786c04b457478bf51f262fefa2d1500035ccf5bb7cc605f16ef331852f5023671d61b7c3ef348c148288c5c41fb4e309679fa51265`
+[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-node-linux-s390x.tar.gz) | `60f3eb8bfe3694f5def28661c62b67a56fb5d9efad7cfeb5dc7e76f8a15be625ac123e8ee0ac543a4464a400fca3851731d41418409d385ef8ff99156b816b0c`
+[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0-beta.1/kubernetes-node-windows-amd64.tar.gz) | `66fb625fd68a9b754e63a3e1369a21e6d2116120b5dc5aae837896f21072ce4c03d96507b66e6a239f720abcf742adef6d06d85e19bebf935d4927cccdc6817d`
-## Changelog since v1.14.0-alpha.3
+## Changelog since v1.15.0-alpha.3
### Action Required
-* Added cadvisor metric labels `pod` and `container` where `pod_name` and `container_name` are present to match instrumentation guidelines. ([#69099](https://github.com/kubernetes/kubernetes/pull/69099), [@ehashman](https://github.com/ehashman))
- * Action required: any Prometheus queries that match `pod_name` and `container_name` labels (e.g. cadvisor or kubelet probe metrics) should be updated to use `pod` and `container` instead. `pod_name` and `container_name` labels will be present alongside `pod` and `container` labels for one transitional release and removed in the future.
+* ACTION REQUIRED: Deprecated Kubelet security controls AllowPrivileged, HostNetworkSources, HostPIDSources, HostIPCSources have been removed. Enforcement of these restrictions should be done through admission control instead (e.g. PodSecurityPolicy). ([#77820](https://github.com/kubernetes/kubernetes/pull/77820), [@dims](https://github.com/dims))
+ * ACTION REQUIRED: The deprecated Kubelet flag `--allow-privileged` has been removed. Remove any use of `--allow-privileged` from your kubelet scripts or manifests.
+* Fix public IPs issues when multiple clusters are sharing the same resource group. ([#77630](https://github.com/kubernetes/kubernetes/pull/77630), [@feiskyer](https://github.com/feiskyer))
+ * action required:
+ * If the cluster is upgraded from old releases and the same resource group would be shared by multiple clusters, please recreate those LoadBalancer services or add a new tag 'kubernetes-cluster-name: ' manually for existing public IPs.
+ * For multiple clusters sharing the same resource group, they should be configured with different cluster name by `kube-controller-manager --cluster-name=`
### Other notable changes
-* fix parse devicePath issue on Azure Disk ([#74499](https://github.com/kubernetes/kubernetes/pull/74499), [@andyzhangx](https://github.com/andyzhangx))
-* fix issue: fail to detach azure disk when there is server side error ([#74398](https://github.com/kubernetes/kubernetes/pull/74398), [@andyzhangx](https://github.com/andyzhangx))
-* Allow Cinder volume limit to be configured from node too ([#74542](https://github.com/kubernetes/kubernetes/pull/74542), [@gnufied](https://github.com/gnufied))
-* Fix subnet annotation checking for Azure internal loadbalancer ([#74498](https://github.com/kubernetes/kubernetes/pull/74498), [@feiskyer](https://github.com/feiskyer))
-* Allow the kubelet to pass Windows GMSA credentials down to Docker ([#73726](https://github.com/kubernetes/kubernetes/pull/73726), [@wk8](https://github.com/wk8))
-* PriorityClass in scheduling.k8s.io/v1beta1 and scheduling.k8s.io/v1alpha1 are deprecated by PriorityClass scheduling.k8s.io/v1 and will not be served starting in v1.17. ([#74465](https://github.com/kubernetes/kubernetes/pull/74465), [@bsalamat](https://github.com/bsalamat))
-* kubeadm: fixed nil pointer dereference caused by a bug in url parsing ([#74454](https://github.com/kubernetes/kubernetes/pull/74454), [@bart0sh](https://github.com/bart0sh))
-* Fix the unexpected NotReady status when Node's iops is full if the runtime is dockershim. ([#74389](https://github.com/kubernetes/kubernetes/pull/74389), [@answer1991](https://github.com/answer1991))
-* Split up the mondo `kubernetes-test` tarball into `kubernetes-test-portable` and `kubernetes-test-{OS}-{ARCH}` tarballs. ([#74065](https://github.com/kubernetes/kubernetes/pull/74065), [@ixdy](https://github.com/ixdy))
-* Move fluentd-elasticsearch addon images to community controlled location ([#73819](https://github.com/kubernetes/kubernetes/pull/73819), [@coffeepac](https://github.com/coffeepac))
-* The PriorityClass API has been promoted to `scheduling.k8s.io/v1` with no changes. The `scheduling.k8s.io/v1beta1` version is now deprecated and will stop being served by default in v1.17. ([#73555](https://github.com/kubernetes/kubernetes/pull/73555), [@bsalamat](https://github.com/bsalamat))
-* fix get azure accounts timeout issue when there is no out-bound IP ([#74191](https://github.com/kubernetes/kubernetes/pull/74191), [@andyzhangx](https://github.com/andyzhangx))
-* fix mixed protocol issue for azure load balancer ([#74200](https://github.com/kubernetes/kubernetes/pull/74200), [@andyzhangx](https://github.com/andyzhangx))
-* Don't update the Pod object after each scheduling attempt by adding a timestamp to the scheduling queue. ([#73700](https://github.com/kubernetes/kubernetes/pull/73700), [@denkensk](https://github.com/denkensk))
-* kubeadm: remove local etcd members from the etcd cluster when kubeadm reset ([#74112](https://github.com/kubernetes/kubernetes/pull/74112), [@pytimer](https://github.com/pytimer))
-* Fix keymutex issues which may crash in some platforms. ([#74348](https://github.com/kubernetes/kubernetes/pull/74348), [@danielqsj](https://github.com/danielqsj))
-* Fixed scanning of failed iSCSI targets. ([#74306](https://github.com/kubernetes/kubernetes/pull/74306), [@jsafrane](https://github.com/jsafrane))
-* kubeadm: Do not fail preflight checks when running on >= 5.0 Linux kernel ([#74355](https://github.com/kubernetes/kubernetes/pull/74355), [@brb](https://github.com/brb))
-* Reduces the cache TTL for negative responses to 5s minimum. ([#74093](https://github.com/kubernetes/kubernetes/pull/74093), [@blakebarnett](https://github.com/blakebarnett))
-* The Ingress API is now available via `networking.k8s.io/v1beta1`. `extensions/v1beta1` Ingress objects are deprecated and will no longer be served in v1.18. ([#74057](https://github.com/kubernetes/kubernetes/pull/74057), [@liggitt](https://github.com/liggitt))
-* kubelet's --containerized flag will no longer be supported and will be removed in a future release ([#74267](https://github.com/kubernetes/kubernetes/pull/74267), [@dims](https://github.com/dims))
-* Optimize scheduler cache snapshot algorithm to improve scheduling throughput. ([#74041](https://github.com/kubernetes/kubernetes/pull/74041), [@bsalamat](https://github.com/bsalamat))
-* Extends the VolumeSubpathEnvExpansion alpha feature to support environment variable expansion ([#71351](https://github.com/kubernetes/kubernetes/pull/71351), [@kevtaylor](https://github.com/kevtaylor))
- * Implements subPathExpr field for expanding environment variables into a subPath
- * The fields subPathExpr and subPath are mutually exclusive
- * Note: This is a breaking change from the previous version of this alpha feature
-* Added kube-proxy support for overlay networking and DSR in Windows and new flags for network-name, source-vip, and enable-dsr. ([#70896](https://github.com/kubernetes/kubernetes/pull/70896), [@ksubrmnn](https://github.com/ksubrmnn))
-* StorageOS volume plugin updated to fix an issue where volume mount succeeds even if request to mount via StorageOS API fails. ([#69782](https://github.com/kubernetes/kubernetes/pull/69782), [@darkowlzz](https://github.com/darkowlzz))
-* kubeadm: Allow to upload certificates required to join a new control-plane to kubeadm-certs secret using the flag `--experimental-upload-certs` on `init` or upload-certs phase. ([#73907](https://github.com/kubernetes/kubernetes/pull/73907), [@yagonobre](https://github.com/yagonobre))
-* export query parameter is deprecated and will be removed in a future release ([#73783](https://github.com/kubernetes/kubernetes/pull/73783), [@deads2k](https://github.com/deads2k))
-* e2e storage tests run faster and are easier to read ([#72434](https://github.com/kubernetes/kubernetes/pull/72434), [@pohly](https://github.com/pohly))
-* kubectl: fix a bug where "describe" cannot obtain the event messages for a static pod ([#74156](https://github.com/kubernetes/kubernetes/pull/74156), [@gaorong](https://github.com/gaorong))
-* windows: Ensure graceful termination when being run as windows service ([#73292](https://github.com/kubernetes/kubernetes/pull/73292), [@steffengy](https://github.com/steffengy))
-* CoreDNS adds readinessProbe which prevents loadbalancing to unready pods, and also allows rolling updates to work as expected. ([#74137](https://github.com/kubernetes/kubernetes/pull/74137), [@rajansandeep](https://github.com/rajansandeep))
-* Fixes use of webhook admission plugins with multi-version custom resources ([#74154](https://github.com/kubernetes/kubernetes/pull/74154), [@mbohlool](https://github.com/mbohlool))
-* kubeadm no longer allows using v1alpha3 configs for anything else than converting them to v1beta1. ([#74025](https://github.com/kubernetes/kubernetes/pull/74025), [@rosti](https://github.com/rosti))
-* Change kubelet metrics to conform metrics guidelines. ([#72470](https://github.com/kubernetes/kubernetes/pull/72470), [@danielqsj](https://github.com/danielqsj))
- * The following metrics are deprecated, and will be removed in a future release:
- * `kubelet_pod_worker_latency_microseconds`
- * `kubelet_pod_start_latency_microseconds`
- * `kubelet_cgroup_manager_latency_microseconds`
- * `kubelet_pod_worker_start_latency_microseconds`
- * `kubelet_pleg_relist_latency_microseconds`
- * `kubelet_pleg_relist_interval_microseconds`
- * `kubelet_eviction_stats_age_microseconds`
- * `kubelet_runtime_operations`
- * `kubelet_runtime_operations_latency_microseconds`
- * `kubelet_runtime_operations_errors`
- * `kubelet_device_plugin_registration_count`
- * `kubelet_device_plugin_alloc_latency_microseconds`
- * Please convert to the following metrics:
- * `kubelet_pod_worker_duration_seconds`
- * `kubelet_pod_start_duration_seconds`
- * `kubelet_cgroup_manager_duration_seconds`
- * `kubelet_pod_worker_start_duration_seconds`
- * `kubelet_pleg_relist_duration_seconds`
- * `kubelet_pleg_relist_interval_seconds`
- * `kubelet_eviction_stats_age_seconds`
- * `kubelet_runtime_operations_total`
- * `kubelet_runtime_operations_duration_seconds`
- * `kubelet_runtime_operations_errors_total`
- * `kubelet_device_plugin_registration_total`
- * `kubelet_device_plugin_alloc_duration_seconds`
-* This change ensures that volumes get provisioned based on the zone information provided in allowedTopologies. ([#72731](https://github.com/kubernetes/kubernetes/pull/72731), [@skarthiksrinivas](https://github.com/skarthiksrinivas))
- * Storage class spec:
- * kind: StorageClass
- * apiVersion: storage.k8s.io/v1
- * metadata:
- * name: fastpolicy1
- * provisioner: kubernetes.io/vsphere-volume
- * parameters:
- * diskformat: zeroedthick
- * storagePolicyName: vSAN Default Storage Policy
- * allowedTopologies:
- * - matchLabelExpressions:
- * - key: failure-domain.beta.kubernetes.io/zone
- * values:
- * - zone1
- * PV creation Logs:
- * I0109 11:17:52.321372 1 vsphere.go:1147] Starting to create a vSphere volume with volumeOptions: &{CapacityKB:1048576 Tags:map[kubernetes.io/created-for/pvc/namespace:default kubernetes.io/created-for/pvc/name:pvcsc-1-policy kubernetes.io/created-for/pv/name:pvc-34650c12-1400-11e9-aef4-005056804cc9] Name:kubernetes-dynamic-pvc-34650c12-1400-11e9-aef4-005056804cc9 DiskFormat:zeroedthick Datastore: VSANStorageProfileData: StoragePolicyName:vSAN Default Storage Policy StoragePolicyID: SCSIControllerType: Zone:[zone1]}
- * ...
- * I0109 11:17:59.430113 1 vsphere.go:1334] The canonical volume path for the newly created vSphere volume is "[vsanDatastore] 98db185c-6683-d8c7-bc55-0200435ec5da/kubernetes-dynamic-pvc-34650c12-1400-11e9-aef4-005056804cc9.vmdk"
- * Ran regression tests (no zone) and they passed.
-* vSphere cloud provider correctly retrieves the VM's UUID when running on Windows ([#71147](https://github.com/kubernetes/kubernetes/pull/71147), [@benmoss](https://github.com/benmoss))
-* Re-issue Allocate grpc calls before starting a container that requests device-plugin resources if the cached state is missing. ([#73824](https://github.com/kubernetes/kubernetes/pull/73824), [@jiayingz](https://github.com/jiayingz))
-* [CRI] Add a new field called `runtime_handler` into PodSandbox and PodSandboxStatus to track the RuntimeClass information of a pod. ([#73833](https://github.com/kubernetes/kubernetes/pull/73833), [@haiyanmeng](https://github.com/haiyanmeng))
-* kubelet: OS and Arch information is now recorded in `kubernetes.io/os` and `kubernetes.io/arch` labels on Node objects. The previous labels (`beta.kubernetes.io/os` and `beta.kubernetes.io/arch`) are still recorded, but are deprecated and targeted for removal in 1.18. ([#73333](https://github.com/kubernetes/kubernetes/pull/73333), [@yujuhong](https://github.com/yujuhong))
-* This change applies zone labels to vSphere Volumes automatically. The zone labels are visible on the PV: ([#72687](https://github.com/kubernetes/kubernetes/pull/72687), [@subramanian-neelakantan](https://github.com/subramanian-neelakantan))
- * $ kubectl get pv --show-labels
- * NAME CAPACITY ACCESSMODES STATUS CLAIM REASON AGE LABELS
- * pv-abc 5Gi RWO Bound default/claim1 46s failure-domain.beta.kubernetes.io/region=VC1,failure-domain.beta.kubernetes.io/zone=cluster-1
-* fix smb remount issue on Windows ([#73661](https://github.com/kubernetes/kubernetes/pull/73661), [@andyzhangx](https://github.com/andyzhangx))
-* Kubelet now tries to stop containers in unknown state once before restart or remove. ([#73802](https://github.com/kubernetes/kubernetes/pull/73802), [@Random-Liu](https://github.com/Random-Liu))
-* Deprecate --export flag from kubectl get command. ([#73787](https://github.com/kubernetes/kubernetes/pull/73787), [@soltysh](https://github.com/soltysh))
-* Breaking changes in client-go: ([#72214](https://github.com/kubernetes/kubernetes/pull/72214), [@caesarxuchao](https://github.com/caesarxuchao))
- * The disk-cached discovery client is moved from k8s.io/client-go/discovery to k8s.io/client-go/discovery/cached/disk.
- * The memory-cached discovery client is moved from k8s.io/client-go/discovery/cached to k8s.io/client-go/discovery/cached/memory.
-* Node-level support for pid limiting via `pid=` in the `--system-reserved` and `--kube-reserved` has been graduated to beta and no longer requires setting the feature gate `SupportNodePidsLimit=true` explicitly. Please reference `Kube Reserved` and `System Reserved` in `Reserve Compute Resources for System Daemons` in the Kubernetes documentation for general discussion of resource reservation ([#73651](https://github.com/kubernetes/kubernetes/pull/73651), [@RobertKrawitz](https://github.com/RobertKrawitz))
-* The apiserver, including both the kube-apiserver and apiservers built with the generic apiserver library, will now return 413 RequestEntityTooLarge error if a json patch contains more than 10,000 operations. ([#74000](https://github.com/kubernetes/kubernetes/pull/74000), [@caesarxuchao](https://github.com/caesarxuchao))
-* kubeadm: allow the usage of --kubeconfig-dir and --config flags on kubeadm init ([#73998](https://github.com/kubernetes/kubernetes/pull/73998), [@yagonobre](https://github.com/yagonobre))
-* when pleg channel is full, discard events and record its count ([#72709](https://github.com/kubernetes/kubernetes/pull/72709), [@changyaowei](https://github.com/changyaowei))
-* Is ->It in line 6 ([#73898](https://github.com/kubernetes/kubernetes/pull/73898), [@xiezongzhe](https://github.com/xiezongzhe))
-* Events reported for container creation, start, and stop now report the container name in the message and are more consistently formatted. ([#73892](https://github.com/kubernetes/kubernetes/pull/73892), [@smarterclayton](https://github.com/smarterclayton))
-* `kubectl auth reconcile` now outputs details about what changes are being made ([#71564](https://github.com/kubernetes/kubernetes/pull/71564), [@liggitt](https://github.com/liggitt))
-* kubeadm: fix a bug in the underlying library for diff related to characters like '%' ([#73941](https://github.com/kubernetes/kubernetes/pull/73941), [@neolit123](https://github.com/neolit123))
-* kube-apiserver: a request body of a CREATE/UPDATE/PATCH/DELETE resource operation larger than 100 MB will return a 413 "request entity too large" error. ([#73805](https://github.com/kubernetes/kubernetes/pull/73805), [@caesarxuchao](https://github.com/caesarxuchao))
- * Custom apiservers built with the latest apiserver library will have the 100MB limit on the body of resource requests as well. The limit can be altered via ServerRunOptions.MaxRequestBodyBytes.
- * The body size limit does not apply to subresources like pods/proxy that proxy request content to another server.
-* Kustomize is developed in its own repo https://github.com/kubernetes-sigs/kustomize ([#73033](https://github.com/kubernetes/kubernetes/pull/73033), [@Liujingfang1](https://github.com/Liujingfang1))
- * This PR added a new subcommand `kustomize` in kubectl.
- * kubectl kustomize has the same effect as kustomize build
- * To build API resources from somedir with a kustomization.yaml file
- * kubectl kustomize
- * This command can be piped to apply or delete
- * kubectl kustomize | kubectl apply -f -
- * kubectl kustomize | kubectl delete -f -
-* kubeadm: all master components are now exclusively relying on the `PriorityClassName` pod spec for annotating them as cluster critical components. Since `scheduler.alpha.kubernetes.io/critical-pod` annotation is no longer supported by Kubernetes 1.14 this annotation is no longer added to master components. ([#73857](https://github.com/kubernetes/kubernetes/pull/73857), [@ereslibre](https://github.com/ereslibre))
-* Speedup kubectl by >10 when calling out to kube-apiserver for discovery information. ([#73345](https://github.com/kubernetes/kubernetes/pull/73345), [@sttts](https://github.com/sttts))
-* kubeadm no longer dumps backtrace if it fails to remove the running containers on reset. ([#73951](https://github.com/kubernetes/kubernetes/pull/73951), [@rosti](https://github.com/rosti))
+* fix azure retry issue when return 2XX with error ([#78298](https://github.com/kubernetes/kubernetes/pull/78298), [@andyzhangx](https://github.com/andyzhangx))
+* The dockershim container runtime now accepts the `docker` runtime handler from a RuntimeClass. ([#78323](https://github.com/kubernetes/kubernetes/pull/78323), [@tallclair](https://github.com/tallclair))
+* GCE: Disable the Windows defender to work around a bug that could cause nodes to crash and reboot ([#78272](https://github.com/kubernetes/kubernetes/pull/78272), [@yujuhong](https://github.com/yujuhong))
+* The CustomResourcePublishOpenAPI feature is now beta and enabled by default. CustomResourceDefinitions with [structural schemas](https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/20190425-structural-openapi.md) now publish schemas in the OpenAPI document served at `/openapi/v2`. CustomResourceDefinitions with non-structural schemas have a `NonStructuralSchema` condition added with details about what needs to be corrected in the validation schema. ([#77825](https://github.com/kubernetes/kubernetes/pull/77825), [@roycaihw](https://github.com/roycaihw))
+* kubeadm's ignored pre-flight errors can now be configured via InitConfiguration and JoinConfiguration. ([#75499](https://github.com/kubernetes/kubernetes/pull/75499), [@marccarre](https://github.com/marccarre))
+* Fix broken detection of non-root image user ID ([#78261](https://github.com/kubernetes/kubernetes/pull/78261), [@tallclair](https://github.com/tallclair))
+* kubelet: fix fail to close kubelet->API connections on heartbeat failure when bootstrapping or client certificate rotation is disabled ([#78016](https://github.com/kubernetes/kubernetes/pull/78016), [@gaorong](https://github.com/gaorong))
+* remove vmsizelist call in azure disk GetVolumeLimits which happens in kubelet finally ([#77851](https://github.com/kubernetes/kubernetes/pull/77851), [@andyzhangx](https://github.com/andyzhangx))
+* reverts an aws-ebs volume provisioner optimization as we need to further discuss a viable optimization ([#78200](https://github.com/kubernetes/kubernetes/pull/78200), [@zhan849](https://github.com/zhan849))
+* API changes and deprecating the use of special annotations for Windows GMSA support (version beta) ([#75459](https://github.com/kubernetes/kubernetes/pull/75459), [@wk8](https://github.com/wk8))
+* apiextensions: publish (only) structural OpenAPI schemas ([#77554](https://github.com/kubernetes/kubernetes/pull/77554), [@sttts](https://github.com/sttts))
+* Set selinux label at plugin socket directory ([#73241](https://github.com/kubernetes/kubernetes/pull/73241), [@vikaschoudhary16](https://github.com/vikaschoudhary16))
+* Fix a bug that causes DaemonSet rolling update to hang when its pod gets stuck at terminating. ([#77773](https://github.com/kubernetes/kubernetes/pull/77773), [@DaiHao](https://github.com/DaiHao))
+* Kubeadm: a new command `kubeadm alpha certs check-expiration` was created in order to help users in managing expiration for local PKI certificates ([#77863](https://github.com/kubernetes/kubernetes/pull/77863), [@fabriziopandini](https://github.com/fabriziopandini))
+* kubeadm: fix a bug related to volume unmount if the kubelet run directory is a symbolic link ([#77507](https://github.com/kubernetes/kubernetes/pull/77507), [@cuericlee](https://github.com/cuericlee))
+* n/a ([#78059](https://github.com/kubernetes/kubernetes/pull/78059), [@figo](https://github.com/figo))
+* Add configuration options for the scheduling framework and its plugins. ([#77501](https://github.com/kubernetes/kubernetes/pull/77501), [@JieJhih](https://github.com/JieJhih))
+* Publish DeleteOptions parameters for deletecollection endpoints in OpenAPI spec ([#77843](https://github.com/kubernetes/kubernetes/pull/77843), [@roycaihw](https://github.com/roycaihw))
+* CoreDNS is now version 1.5.0 ([#78030](https://github.com/kubernetes/kubernetes/pull/78030), [@rajansandeep](https://github.com/rajansandeep))
+ * - A `ready` plugin has been included to report pod readiness
+ * - The `proxy` plugin has been deprecated. The `forward` plugin is to be used instead.
+ * - CoreDNS fixes the logging now that kubernetes’ client lib switched to klog from glog.
+* Upgrade Azure network API version to 2018-07-01, so that EnableTcpReset could be enabled on Azure standard loadbalancer (SLB). ([#78012](https://github.com/kubernetes/kubernetes/pull/78012), [@feiskyer](https://github.com/feiskyer))
+* Fixed a scheduler racing issue to ensure low priority pods to be unschedulable on the node(s) where high priority pods have `NominatedNodeName` set to the node(s). ([#77990](https://github.com/kubernetes/kubernetes/pull/77990), [@Huang-Wei](https://github.com/Huang-Wei))
+* Support starting Kubernetes on GCE using containerd in COS and Ubuntu with `KUBE_CONTAINER_RUNTIME=containerd`. ([#77889](https://github.com/kubernetes/kubernetes/pull/77889), [@Random-Liu](https://github.com/Random-Liu))
+* DelayingQueue.ShutDown() is now able to be invoked multiple times without causing a closed channel panic. ([#77170](https://github.com/kubernetes/kubernetes/pull/77170), [@smarterclayton](https://github.com/smarterclayton))
+* For admission webhooks registered for DELETE operations on k8s built APIs or CRDs, the apiserver now sends the existing object as admissionRequest.Request.OldObject to the webhook. ([#76346](https://github.com/kubernetes/kubernetes/pull/76346), [@caesarxuchao](https://github.com/caesarxuchao))
+ * For custom apiservers they uses the generic registry in the apiserver library, they get this behavior automatically.
+* Expose CSI volume stats via kubelet volume metrics ([#76188](https://github.com/kubernetes/kubernetes/pull/76188), [@humblec](https://github.com/humblec))
+* Active watches of custom resources now terminate properly if the CRD is modified. ([#78029](https://github.com/kubernetes/kubernetes/pull/78029), [@liggitt](https://github.com/liggitt))
+* Add CRD spec.preserveUnknownFields boolean, defaulting to true in v1beta1 and to false in v1 CRDs. If false, fields not specified in the validation schema will be removed when sent to the API server or when read from etcd. ([#77333](https://github.com/kubernetes/kubernetes/pull/77333), [@sttts](https://github.com/sttts))
+* Updates that remove remaining `metadata.finalizers` from an object that is pending deletion (non-nil metadata.deletionTimestamp) and has no graceful deletion pending (nil or 0 metadata.deletionGracePeriodSeconds) now results in immediate deletion of the object. ([#77952](https://github.com/kubernetes/kubernetes/pull/77952), [@liggitt](https://github.com/liggitt))
+* Deprecates the kubeadm config upload command as it's replacement is now graduated. Please see `kubeadm init phase upload-config` ([#77946](https://github.com/kubernetes/kubernetes/pull/77946), [@Klaven](https://github.com/Klaven))
+* k8s.io/client-go/dynamic/dynamicinformer.NewFilteredDynamicSharedInformerFactory now honours namespace argument ([#77945](https://github.com/kubernetes/kubernetes/pull/77945), [@michaelfig](https://github.com/michaelfig))
+* `kubectl rollout restart` now works for daemonsets and statefulsets. ([#77423](https://github.com/kubernetes/kubernetes/pull/77423), [@apelisse](https://github.com/apelisse))
+* Fix incorrect azuredisk lun error ([#77912](https://github.com/kubernetes/kubernetes/pull/77912), [@andyzhangx](https://github.com/andyzhangx))
+* Kubelet could be run with no Azure identity now. A sample cloud provider configure is: `{"vmType": "vmss", "useInstanceMetadata": true}` ([#77906](https://github.com/kubernetes/kubernetes/pull/77906), [@feiskyer](https://github.com/feiskyer))
+* client-go and kubectl no longer write cached discovery files with world-accessible file permissions ([#77874](https://github.com/kubernetes/kubernetes/pull/77874), [@yuchengwu](https://github.com/yuchengwu))
+* kubeadm: expose the kubeadm reset command as phases ([#77847](https://github.com/kubernetes/kubernetes/pull/77847), [@yagonobre](https://github.com/yagonobre))
+* kubeadm: kubeadm alpha certs renew --csr-only now reads the current certificates as the authoritative source for certificates attributes (same as kubeadm alpha certs renew) ([#77780](https://github.com/kubernetes/kubernetes/pull/77780), [@fabriziopandini](https://github.com/fabriziopandini))
+* Support "queue-sort" extension point for scheduling framework ([#77529](https://github.com/kubernetes/kubernetes/pull/77529), [@draveness](https://github.com/draveness))
+* Allow init container to get its own field value as environment variable values(downwardAPI spport) ([#75109](https://github.com/kubernetes/kubernetes/pull/75109), [@yuchengwu](https://github.com/yuchengwu))
+* The metric `kube_proxy_sync_proxy_rules_last_timestamp_seconds` is now available, indicating the last time that kube-proxy successfully applied proxying rules. ([#74027](https://github.com/kubernetes/kubernetes/pull/74027), [@squeed](https://github.com/squeed))
+* Fix panic logspam when running kubelet in standalone mode. ([#77888](https://github.com/kubernetes/kubernetes/pull/77888), [@tallclair](https://github.com/tallclair))
+* consume the AWS region list from the AWS SDK instead of a hard-coded list in the cloud provider ([#75990](https://github.com/kubernetes/kubernetes/pull/75990), [@mcrute](https://github.com/mcrute))
+* Add `Option` field to the admission webhook `AdmissionReview` API that provides the operation options (e.g. `DeleteOption` or `CreateOption`) for the operation being performed. ([#77563](https://github.com/kubernetes/kubernetes/pull/77563), [@jpbetz](https://github.com/jpbetz))
+* Fix bug where cloud-controller-manager initializes nodes multiple times ([#75405](https://github.com/kubernetes/kubernetes/pull/75405), [@tghartland](https://github.com/tghartland))
+* Fixed a transient error API requests for custom resources could encounter while changes to the CustomResourceDefinition were being applied. ([#77816](https://github.com/kubernetes/kubernetes/pull/77816), [@liggitt](https://github.com/liggitt))
+* Fix kubectl exec usage string ([#77589](https://github.com/kubernetes/kubernetes/pull/77589), [@soltysh](https://github.com/soltysh))
+* CRD validation schemas should not specify `metadata` fields other than `name` and `generateName`. A schema will not be considered structural (and therefore ready for future features) if `metadata` is specified in any other way. ([#77653](https://github.com/kubernetes/kubernetes/pull/77653), [@sttts](https://github.com/sttts))
+* Implement Permit extension point of the scheduling framework. ([#77559](https://github.com/kubernetes/kubernetes/pull/77559), [@ahg-g](https://github.com/ahg-g))
+* Fixed a bug in the apiserver storage that could cause just-added finalizers to be ignored on an immediately following delete request, leading to premature deletion. ([#77619](https://github.com/kubernetes/kubernetes/pull/77619), [@caesarxuchao](https://github.com/caesarxuchao))
+* add operation name for vm/vmss update operations in prometheus metrics ([#77491](https://github.com/kubernetes/kubernetes/pull/77491), [@andyzhangx](https://github.com/andyzhangx))
+* fix incorrect prometheus azure metrics ([#77722](https://github.com/kubernetes/kubernetes/pull/77722), [@andyzhangx](https://github.com/andyzhangx))
+* Clients may now request that API objects are converted to the `v1.Table` and `v1.PartialObjectMetadata` forms for generic access to objects. ([#77448](https://github.com/kubernetes/kubernetes/pull/77448), [@smarterclayton](https://github.com/smarterclayton))
+* ingress: Update in-tree Ingress controllers, examples, and clients to target networking.k8s.io/v1beta1 ([#77617](https://github.com/kubernetes/kubernetes/pull/77617), [@cmluciano](https://github.com/cmluciano))
+* util/initsystem: add support for the OpenRC init system ([#73101](https://github.com/kubernetes/kubernetes/pull/73101), [@oz123](https://github.com/oz123))
+* Signal handling is initialized within hyperkube commands that require it (apiserver, kubelet) ([#76659](https://github.com/kubernetes/kubernetes/pull/76659), [@S-Chan](https://github.com/S-Chan))
+* Fix some service tags not supported issues for Azure LoadBalancer service ([#77719](https://github.com/kubernetes/kubernetes/pull/77719), [@feiskyer](https://github.com/feiskyer))
+* Add Un-reserve extension point for the scheduling framework. ([#77598](https://github.com/kubernetes/kubernetes/pull/77598), [@danielqsj](https://github.com/danielqsj))
+* Once merged, `legacy cloud providers` unit tests will run as part of ci, just as they were before they move from `./pkg/cloudproviders/providers` ([#77704](https://github.com/kubernetes/kubernetes/pull/77704), [@khenidak](https://github.com/khenidak))
+* Check if container memory stats are available before accessing it ([#77656](https://github.com/kubernetes/kubernetes/pull/77656), [@yastij](https://github.com/yastij))
+* Add a field to store CSI volume expansion secrets ([#77516](https://github.com/kubernetes/kubernetes/pull/77516), [@gnufied](https://github.com/gnufied))
+* Add a condition NonStructuralSchema to CustomResourceDefinition listing Structural Schema violations as defined in KEP https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/20190425-structural-openapi.md. CRD authors should update their validation schemas to be structural in order to participate in future CRD features. ([#77207](https://github.com/kubernetes/kubernetes/pull/77207), [@sttts](https://github.com/sttts))
+* NONE ([#74314](https://github.com/kubernetes/kubernetes/pull/74314), [@oomichi](https://github.com/oomichi))
+* Update to use go 1.12.5 ([#77528](https://github.com/kubernetes/kubernetes/pull/77528), [@cblecker](https://github.com/cblecker))
+* Fix race conditions for Azure loadbalancer and route updates. ([#77490](https://github.com/kubernetes/kubernetes/pull/77490), [@feiskyer](https://github.com/feiskyer))
+* remove VM API call dep in azure disk WaitForAttach ([#77483](https://github.com/kubernetes/kubernetes/pull/77483), [@andyzhangx](https://github.com/andyzhangx))
+* N/A ([#77425](https://github.com/kubernetes/kubernetes/pull/77425), [@figo](https://github.com/figo))
+* Fix TestEventChannelFull random fail ([#76603](https://github.com/kubernetes/kubernetes/pull/76603), [@changyaowei](https://github.com/changyaowei))
+* `aws-cloud-provider` service account in the `kube-system` namespace need to be granted with list node permission with this optimization ([#76976](https://github.com/kubernetes/kubernetes/pull/76976), [@zhan849](https://github.com/zhan849))
+* Remove hyperkube short aliases from source code, Because hyperkube docker image currently create these aliases. ([#76953](https://github.com/kubernetes/kubernetes/pull/76953), [@Rand01ph](https://github.com/Rand01ph))
+* Allow to define kubeconfig file for OpenStack cloud provider. ([#77415](https://github.com/kubernetes/kubernetes/pull/77415), [@Fedosin](https://github.com/Fedosin))
+* API servers using the default Google Compute Engine bootstrapping scripts will have their insecure port (`:8080`) disabled by default. To enable the insecure port, set `ENABLE_APISERVER_INSECURE_PORT=true` in kube-env or as an environment variable. ([#77447](https://github.com/kubernetes/kubernetes/pull/77447), [@dekkagaijin](https://github.com/dekkagaijin))
+* GCE clusters will include some IP ranges that are not in used on the public Internet to the list of non-masq IPs. ([#77458](https://github.com/kubernetes/kubernetes/pull/77458), [@grayluck](https://github.com/grayluck))
+ * Bump ip-masq-agent version to v2.3.0 with flag `nomasq-all-reserved-ranges` turned on.
+* Implement un-reserve extension point for the scheduling framework. ([#77457](https://github.com/kubernetes/kubernetes/pull/77457), [@danielqsj](https://github.com/danielqsj))
+* If a pod has a running instance, the stats of its previously terminated instances will not show up in the kubelet summary stats any more for CRI runtimes like containerd and cri-o. ([#77426](https://github.com/kubernetes/kubernetes/pull/77426), [@Random-Liu](https://github.com/Random-Liu))
+ * This keeps the behavior consistent with Docker integration, and fixes an issue that some container Prometheus metrics don't work when there are summary stats for multiple instances of the same pod.
+* Limit use of tags when calling EC2 API to prevent API throttling for very large clusters ([#76749](https://github.com/kubernetes/kubernetes/pull/76749), [@mcrute](https://github.com/mcrute))
+* When specifying an invalid value for a label, it was not always ([#77144](https://github.com/kubernetes/kubernetes/pull/77144), [@kenegozi](https://github.com/kenegozi))
+ * clear which label the value was specified for. Starting with this release, the
+ * label's key is included in such error messages, which makes debugging easier.
-# v1.14.0-alpha.3
+# v1.15.0-alpha.3
[Documentation](https://docs.k8s.io)
-## Downloads for v1.14.0-alpha.3
+## Downloads for v1.15.0-alpha.3
filename | sha512 hash
-------- | -----------
-[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes.tar.gz) | `5060dcf689dad4e19da5029eb8fc3060a4b2bad988fddff438d0703a45c02481bcfbc15f45d2855f4fd5e9eb43847400ebb25dce19e24f0e0e194a7f57176ce5`
-[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-src.tar.gz) | `754c948b5d25b01f211866d473257be5fb576b4b97703eb6fc08679d6525e1f53195a450f3f47b77fabb92bf058583b66230959197b5bcf72528e54ccb349c07`
+[kubernetes.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes.tar.gz) | `88d9ced283324136e9230a0c92ad9ade10d1f52d095d5a3f9827a1ebe0cf87b5edf713cff9093cc5c61311282fe861b7c02d1da62a6ba74e2c19584e5d6084a6`
+[kubernetes-src.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-src.tar.gz) | `c6cfe656825da66e863cd08887b3ce4374e3dae0448e33c77f960aec168c1cbad46e2485ddb9dc00f0733b4464f1e8c6e20f333097f43848decc07576ffb8d69`
### Client Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-darwin-386.tar.gz) | `5bd74dfc86bacf89d6b05d541e13bf390216039a42cc90fef2b248820acd84f56a445ec66d52497ff77e1af47455f285c993cd1d44cc3050996189bd328ea2be`
-[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-darwin-amd64.tar.gz) | `34e16661d66d337083583dfb478756ec8cc664d7cfc2dd1817bf1da03cdc380668be9df9f178b5fd5ccab5014e6686f83b9fee6192fbf77d2298d397e872a893`
-[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-linux-386.tar.gz) | `15f99e85bcc95f7b8e1b4c6ecc23de36e89a54108003db926e97ec2e7253f363f6ed85e39a47305dbccf596f72e88edd7bcda6d528919da9c0b81541f58506d4`
-[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-linux-amd64.tar.gz) | `2e61cf9b776150c4f1830d068ffee9701cb04979152ed6b62fc1bf53163e6194029a4f75536e7fda71c3dfce1de285f425bde342a4efdd1f7bf973f105750ac4`
-[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-linux-arm.tar.gz) | `67fb3805bb1b4a77f6603fbde9bd1d26e179de1a594c85618aa7b17be6abc510a9a0cd499ef4fe974574cf73b364da641121f21864c8472d713eec76e4c52bca`
-[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-linux-arm64.tar.gz) | `28930dc384b51051081a52874bc4d6dafa3c992dfa214b977ef711de2c2bc3f90bdaa6243bded1e750997fec04b8ffb910db21c266e47e09426c4dbaf916a64d`
-[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-linux-ppc64le.tar.gz) | `f59eda797a57961d52fe67ba8b25a3a10267f9ce46029ed2140ef4b02615ba9944bd83d7a6e7874c7268a09a3422858b9b0c31f861941ef8be126c594fc3a7cc`
-[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-linux-s390x.tar.gz) | `c56bfb64e55cf95251157a8229a3e94310b2c46bb1c1250050893873e3112578978c1f8e29fa56fac63e2aa8a6382523ac34baf6dd523fe0919f8d702521a564`
-[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-windows-386.tar.gz) | `e49a00fbe600892dc5eed0bc21bac64806da65280c818ca79b5e8adbed7fd5ecebb6b647cb9b89ac862257995145b2397996122eefb3c8d127d857c89c29c9ae`
-[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-client-windows-amd64.tar.gz) | `797e20969ed4935adcbc80ccbcd72ec5aa697e70b0d071eceefc6dbacea69aff9f6660e7eefad6661ace0afb66067c4ffaa4f6bc82e8b081b57811ab0abde218`
+[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-client-darwin-386.tar.gz) | `9df574b99dd03b15c784afa0bf91e826d687c5a2c7279878ddc9489e5542b2b24da5dc876eb01da0182dd4dabfda3b427875dcde16a99478923e9f74233640c1`
+[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-client-darwin-amd64.tar.gz) | `bd8ac74d57e2c5dbfb36a8a3f79802a85393d914c0f513f83395f4b951a41d58ef23081d67edd1dacc039ef29bc761dcd17787b3315954f7460e15a15150dd5e`
+[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-client-linux-386.tar.gz) | `8ffecc41f973564b18ee6ee0cf3d2c553e9f4649b13e99dc92f427a3861b04c599e94b14ecab8b3f6018cc1248dec72cd0318c41a5d51364961cf14c8667b89c`
+[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-client-linux-amd64.tar.gz) | `8c62df3e8f02d0fe6388f82cf3af32c592783a012744b0595e5ae66097643dc6e28171322d69c1cd7e30c6b411f6f2b727728a503aec8f9d0c7cfdee44f307f5`
+[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-client-linux-arm.tar.gz) | `6e411c605778e2a079971bfe6f066bd834dcaa13a6e1369d1a5064cc16a95aee8e6b07197522e4ef83d40692869dbd1b082a784102cad8168375202db773ce80`
+[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-client-linux-arm64.tar.gz) | `52daf658b97c66bf67b24ad45adf27e70cf8e721e616250bef06c8d4d4b6e0820647b337c38eec2673d440c2578989ba1ca1d24b4babeb7c0e22834700c225d5`
+[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-client-linux-ppc64le.tar.gz) | `0f2fe4d16518640a958166bc9e1963d594828e6edfa37c018778ccce79761561d0f9f8db206bd4ed122ce068d74e10cd25655bb6763fb0d53c881f0199db09bf`
+[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-client-linux-s390x.tar.gz) | `58582b030c95160460f7061000c19da225d175249beff26d4a3f5d415670ff374781b4612e1b8e01e86d31772e4ab86cd41553885d514f013df9c01cbda4b7c2`
+[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-client-windows-386.tar.gz) | `d2898a2e2c6d28c9069479b7dfcf5dc640864e20090441c9bb101e3f6a1cbc28051135b60143dc6b8f1edaa896e8467d3c1b7bbd7b75a3f1fb3657da6eb7385d`
+[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-client-windows-amd64.tar.gz) | `50fa515ba4be8a30739cb811d8750260f2746914b98de9989c58e9b100d07f59a9b701d83a06646ccf3ad53c74b8a7a35c9eb860fb0cff27178145f457921c1b`
### Server Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-server-linux-amd64.tar.gz) | `eddfc9afd7337475c3865443170d1425dcf4a87d981555871a69bcf132e73d99b1ffa08a00490b30c60232f47bbeca4ad6253cf7e1dad44797b4af044dbdbef4`
-[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-server-linux-arm.tar.gz) | `dc85cd3a039cc0516beb19018c8378f3b7b88fa2edb8fa1476305e89eb7c64fef2d938bd48fd257ea8e690f7d84a69e9784a42aabed35e83ea7362c60773ba67`
-[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-server-linux-arm64.tar.gz) | `d7c3a72abaa4c3e3243f8b4b3a8adb8be2758e0f883423ea62d2c61b2081464a8976ad43ea0640a7e453aa4d389e3ea2d6d1baedf3b50e1171eca6e49cd087fe`
-[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-server-linux-ppc64le.tar.gz) | `b268a94eb056eea8bdf4d5739dec430f75a6a6b3c18e30df68d970c3566b3e4a638b3577f6219596ae54eac740628a7ebfecb0772645e6d960f790235e1d62c7`
-[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-server-linux-s390x.tar.gz) | `f4cfd8d2faacdd1f0065f9e0f4f8d0db7bd8f438f812f70a07f4cb5272ae9bed3ec876b3cbaf2f2a71e65e4de725e1dc0829b43f60f43c9e43656ac928657d5e`
+[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-server-linux-amd64.tar.gz) | `b124b2fa18935bbc15b9a3c0447df931314b41d36d2cd9a65bebd090dafec9bc8f3614bf0fca97504d9d5270580b0e5e3f8564a7c8d87fde57cd593b73a7697d`
+[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-server-linux-arm.tar.gz) | `cde20282adb8d43e350c932c5a52176c2e1accb80499631a46c6d6980c1967c324a77e295a14eb0e37702bcd26462980ac5fe5f1ee689386d974ac4c28d7b462`
+[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-server-linux-arm64.tar.gz) | `657b24b24dddb475a737be8e65669caf3c41102de5feb990b8b0f29066f823130ff759b1579a6ddbb08fef1e75edca3621054934253ef9d636f4bbcc255093ea`
+[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-server-linux-ppc64le.tar.gz) | `2373012c73109a38a6a2b64f1db716d62a65a4a64ccf246680f226dba96b598f9757ded4e2d3581ba4f499a28e7d8d89bbc0db98a09c812fdc7e12a014fb70ec`
+[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-server-linux-s390x.tar.gz) | `c2ce4362766bb08ffccea13893431c5f59d02f996fbb5fad1fe0014a9670440dca9e9ab4037116e19f090eeba9bdbb2ff8d2e80128afe29a86adb043a7c4e674`
### Node Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-node-linux-amd64.tar.gz) | `7040ee3c032ec4fe14530c3e47ee53d731acb947b06e2d560cbcd0e7e513142c0f300302059aaef03e24311946a9c59b576948eec9b520e2367f28fc4f80226c`
-[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-node-linux-arm.tar.gz) | `3d32e5243d1c65bce573cfb0f60d643ef3fc684a15551dbc8c3d5435e6854ff104c46c77b0b8708d9c661d52f7865a197ea758f0c17e1ed991993674929ea75e`
-[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-node-linux-arm64.tar.gz) | `d3a17027fa1c057528422b35e32260f5b7c7246400df595f0ebda5d150456d4388129b1ead4229f98f2b461ff9e85382a7da0d682541844a3c06f0aebe0469b6`
-[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-node-linux-ppc64le.tar.gz) | `89ed1f5093b49ab9d58d7a70089e881bf388f3316cb2607fa18e3bf072aff3d27aabe99124334774e63decb67349eb82f33ea509b56a72a51e1443c3352b4558`
-[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-node-linux-s390x.tar.gz) | `755a60824a9b8c4090a791d332e410692708ecece90e37388f58eb2c7ddddea6b859fefcc5a53ec3d275fee0a355086f4446ae8e85482a668d248cca9f5e503c`
-[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.3/kubernetes-node-windows-amd64.tar.gz) | `c71d8055d89e535771f345e0f673da021915a7a82c75951855ba2574a4250c8a57d0636b4ec9bba209edde8edef30098c6dec2f80403cd46139bb88d814c3751`
+[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-node-linux-amd64.tar.gz) | `c26b0b2fff310d791c91e610252a86966df271b745a3ded8067328dab04fd3c1600bf1f67d728521472fbba067be2a2a52c927c6af4ae6cbabf237f74843b5dd`
+[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-node-linux-arm.tar.gz) | `79e70e550a401435b0f3d06b60312bc0740924ca56607eae9cd0d12dce1a6ea1ade1a850145ba05fccec1f52eb6879767e901b6fe2e7b499cf4c632d9ebae017`
+[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-node-linux-arm64.tar.gz) | `5f920cf9e169c863760a27022f3f0e1503cedcb6b84089a7e77a05d2d449a9a68f23f1ea48924acc8221e78f151e832e07cbb5586e6e652c56c2fd6ff6009551`
+[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-node-linux-ppc64le.tar.gz) | `6037b555f484337e659b347ce0ca725e0a25e2e3034100a9ebc4c18668eb102093e8477cca8022cd99957a4532034ad0b7d1cf356c0bb6582f8acf9895e46423`
+[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-node-linux-s390x.tar.gz) | `a32a0a22ade7658e5fb924ca8b0ccca40e96f872d136062842c046fd3f17ecc056c22d6cfa3736cbbbac3b648299ef976ad6811ed942e13af3185d83e3440d97`
+[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.3/kubernetes-node-windows-amd64.tar.gz) | `005120b6500ee9839a6914a08ec270ccd273b5dea863da17d4da5ab1e47a7dee5b174cf5d923870186d144b954778d26e3e4445dc997411f267b200001e13e03`
-## Changelog since v1.14.0-alpha.2
-
-### Action Required
-
-* The --storage-versions flag of kube-apiserver is removed. The storage versions will always be the default value built-in the kube-apiserver binary. ([#67678](https://github.com/kubernetes/kubernetes/pull/67678), [@caesarxuchao](https://github.com/caesarxuchao))
+## Changelog since v1.15.0-alpha.2
### Other notable changes
-* fix [#73264](https://github.com/kubernetes/kubernetes/pull/73264) cpuPeriod was not reset, but used as set via flag, although it was disabled via alpha gate ([#73342](https://github.com/kubernetes/kubernetes/pull/73342), [@szuecs](https://github.com/szuecs))
-* Update kubelet CLI summary documentation and generated Webpage ([#73256](https://github.com/kubernetes/kubernetes/pull/73256), [@deitch](https://github.com/deitch))
-* Considerably reduced the CPU load in kube-apiserver while aggregating OpenAPI specifications from aggregated API servers. ([#71223](https://github.com/kubernetes/kubernetes/pull/71223), [@sttts](https://github.com/sttts))
-* kubeadm: add a preflight check that throws a warning if the cgroup driver for Docker on Linux is not "systemd" as per the k8s.io CRI installation guide. ([#73837](https://github.com/kubernetes/kubernetes/pull/73837), [@neolit123](https://github.com/neolit123))
-* Kubelet: add usageNanoCores from CRI stats provider ([#73659](https://github.com/kubernetes/kubernetes/pull/73659), [@feiskyer](https://github.com/feiskyer))
-* Fix watch to not send the same set of events multiple times causing watcher to go back in time ([#73845](https://github.com/kubernetes/kubernetes/pull/73845), [@wojtek-t](https://github.com/wojtek-t))
-* `system:kube-controller-manager` and `system:kube-scheduler` users are now permitted to perform delegated authentication/authorization checks by default RBAC policy ([#72491](https://github.com/kubernetes/kubernetes/pull/72491), [@liggitt](https://github.com/liggitt))
-* Prevent AWS Network Load Balancer security groups ingress rules to be deleted by ensuring target groups are tagged. ([#73594](https://github.com/kubernetes/kubernetes/pull/73594), [@masterzen](https://github.com/masterzen))
-* Set a low oom_score_adj for containers in pods with system-critical priorities ([#73758](https://github.com/kubernetes/kubernetes/pull/73758), [@sjenning](https://github.com/sjenning))
-* Ensure directories on volumes are group-executable when using fsGroup ([#73533](https://github.com/kubernetes/kubernetes/pull/73533), [@mxey](https://github.com/mxey))
-* kube-apiserver now only aggregates openapi schemas from `/openapi/v2` endpoints of aggregated API servers. The fallback to aggregate from `/swagger.json` has been removed. Ensure aggregated API servers provide schema information via `/openapi/v2` (available since v1.10). ([#73441](https://github.com/kubernetes/kubernetes/pull/73441), [@roycaihw](https://github.com/roycaihw))
-* Change docker metrics to conform metrics guidelines and using histogram for better aggregation. ([#72323](https://github.com/kubernetes/kubernetes/pull/72323), [@danielqsj](https://github.com/danielqsj))
- * The following metrics are deprecated, and will be removed in a future release:
- * `docker_operations`
- * `docker_operations_latency_microseconds`
- * `docker_operations_errors`
- * `docker_operations_timeout`
- * `network_plugin_operations_latency_microseconds`
- * Please convert to the following metrics:
- * `docker_operations_total`
- * `docker_operations_latency_seconds`
- * `docker_operations_errors_total`
- * `docker_operations_timeout_total`
- * `network_plugin_operations_latency_seconds`
-* `kubectl delete --all-namespaces` is a recognized flag. ([#73716](https://github.com/kubernetes/kubernetes/pull/73716), [@deads2k](https://github.com/deads2k))
-* MAC Address filter has been fixed in vSphere Cloud Provider, it no longer ignores `00:1c:14` and `00:05:69` prefixes ([#73721](https://github.com/kubernetes/kubernetes/pull/73721), [@frapposelli](https://github.com/frapposelli))
-* Add kubelet_node_name metrics. ([#72910](https://github.com/kubernetes/kubernetes/pull/72910), [@danielqsj](https://github.com/danielqsj))
-* The HugePages feature gate has graduated to GA, and can no longer be disabled. The feature gate will be removed in v1.16 ([#72785](https://github.com/kubernetes/kubernetes/pull/72785), [@derekwaynecarr](https://github.com/derekwaynecarr))
-* Fix a bug that aggregated openapi spec may override swagger securityDefinitions and swagger info in kube-apiserver ([#73484](https://github.com/kubernetes/kubernetes/pull/73484), [@roycaihw](https://github.com/roycaihw))
-* Fixes a bug that prevented deletion of dynamically provisioned volumes in Quobyte backends. ([#68925](https://github.com/kubernetes/kubernetes/pull/68925), [@casusbelli](https://github.com/casusbelli))
-* error messages returned in authentication webhook status responses are now correctly included in the apiserver log ([#73595](https://github.com/kubernetes/kubernetes/pull/73595), [@liggitt](https://github.com/liggitt))
-* kubeadm: `kubeadm alpha preflight` and `kubeadm alpha preflight node` are removed; you can now use `kubeadm join phase preflight` ([#73718](https://github.com/kubernetes/kubernetes/pull/73718), [@fabriziopandini](https://github.com/fabriziopandini))
-* kube-apiserver: the deprecated `repair-malformed-updates` has been removed ([#73663](https://github.com/kubernetes/kubernetes/pull/73663), [@danielqsj](https://github.com/danielqsj))
-* e2e.test now rejects unknown --provider values instead of merely warning about them. An empty provider name is not accepted anymore and was replaced by "skeleton" (= a provider with no special behavior). ([#73402](https://github.com/kubernetes/kubernetes/pull/73402), [@pohly](https://github.com/pohly))
-* Updated AWS SDK to v1.16.26 for ECR PrivateLink support ([#73435](https://github.com/kubernetes/kubernetes/pull/73435), [@micahhausler](https://github.com/micahhausler))
-* Expand kubectl wait to work with more types of selectors. ([#71746](https://github.com/kubernetes/kubernetes/pull/71746), [@rctl](https://github.com/rctl))
-* The CustomPodDNS feature gate has graduated to GA, and can no longer be disabled. The feature gate will be removed in v1.16 ([#72832](https://github.com/kubernetes/kubernetes/pull/72832), [@MrHohn](https://github.com/MrHohn))
-* The `rules` field in RBAC Role and ClusterRole objects is now correctly reported as optional in the openapi schema. ([#73250](https://github.com/kubernetes/kubernetes/pull/73250), [@liggitt](https://github.com/liggitt))
-* AWS ELB health checks will now use HTTPS/SSL protocol for HTTPS/SSL backends. ([#70309](https://github.com/kubernetes/kubernetes/pull/70309), [@2rs2ts](https://github.com/2rs2ts))
-* kubeadm reset: fixed crash caused by absence of a configuration file ([#73636](https://github.com/kubernetes/kubernetes/pull/73636), [@bart0sh](https://github.com/bart0sh))
-* CoreDNS is now version 1.3.1 ([#73610](https://github.com/kubernetes/kubernetes/pull/73610), [@rajansandeep](https://github.com/rajansandeep))
- * - A new `k8s_external` plugin that allows external zones to point to Kubernetes in-cluster services.
- * - CoreDNS now checks if a zone transfer is allowed. Also allow a TTL of 0 to avoid caching in the cache plugin.
- * - TTL is also applied to negative responses (NXDOMAIN, etc).
-
-* Missing directories listed in a user's PATH are no longer considered errors and are instead logged by the "kubectl plugin list" command when listing available plugins. ([#73542](https://github.com/kubernetes/kubernetes/pull/73542), [@juanvallejo](https://github.com/juanvallejo))
-* remove kubelet flag '--experimental-fail-swap-on' (deprecated in v1.8) ([#69552](https://github.com/kubernetes/kubernetes/pull/69552), [@Pingan2017](https://github.com/Pingan2017))
-* Introduced support for Windows nodes into the cluster bringup scripts for GCE. ([#73442](https://github.com/kubernetes/kubernetes/pull/73442), [@pjh](https://github.com/pjh))
-* Now users could get object info like: ([#73063](https://github.com/kubernetes/kubernetes/pull/73063), [@WanLinghao](https://github.com/WanLinghao))
- * a. kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[0:3].name
- * b. kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[-2:].name
-* scheduler: use incremental scheduling cycle in PriorityQueue to put all in-flight unschedulable pods back to active queue if we received move request ([#73309](https://github.com/kubernetes/kubernetes/pull/73309), [@cofyc](https://github.com/cofyc))
-* fixes an error processing watch events when running skewed apiservers ([#73482](https://github.com/kubernetes/kubernetes/pull/73482), [@liggitt](https://github.com/liggitt))
-* Prometheus metrics for crd_autoregister, crd_finalizer and crd_naming_condition_controller are exported. ([#71767](https://github.com/kubernetes/kubernetes/pull/71767), [@roycaihw](https://github.com/roycaihw))
-* Adds deleting pods created by DaemonSet assigned to not existing nodes. ([#73401](https://github.com/kubernetes/kubernetes/pull/73401), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski))
-* Graduate Pod Priority and Preemption to GA. ([#73498](https://github.com/kubernetes/kubernetes/pull/73498), [@bsalamat](https://github.com/bsalamat))
-* Adds configuration for AWS endpoint fine control: ([#72245](https://github.com/kubernetes/kubernetes/pull/72245), [@ampsingram](https://github.com/ampsingram))
- * OverrideEndpoints bool Set to true to allow custom endpoints
- * ServiceDelimiter string Delimiter to use to separate overridden services (multiple services) Defaults to "&"
- * ServicenameDelimiter string Delimiter to use to separate servicename from its configuration parameters Defaults "|"
- * OverrideSeparator string Delimiter to use to separate region of occurrence, url and signing region for each override Defaults to ","
- * ServiceOverrides string example: s3|region1, https://s3.foo.bar, some signing_region & ec2|region2, https://ec2.foo.bar, signing_region
-* The CoreDNS configuration now has the forward plugin for proxy in the default configuration instead of the proxy plugin. ([#73267](https://github.com/kubernetes/kubernetes/pull/73267), [@rajansandeep](https://github.com/rajansandeep))
-* Fixed a bug that caused PV allocation on non-English vSphere installations to fail ([#73115](https://github.com/kubernetes/kubernetes/pull/73115), [@alvaroaleman](https://github.com/alvaroaleman))
+* Adding ListMeta.RemainingItemCount. When responding a LIST request, if the server has more data available, and if the request does not contain label selectors or field selectors, the server sets the ListOptions.RemainingItemCount to the number of remaining objects. ([#75993](https://github.com/kubernetes/kubernetes/pull/75993), [@caesarxuchao](https://github.com/caesarxuchao))
+* This PR removes unused soak test cauldron ([#77335](https://github.com/kubernetes/kubernetes/pull/77335), [@loqutus](https://github.com/loqutus))
+* N/A ([#76966](https://github.com/kubernetes/kubernetes/pull/76966), [@figo](https://github.com/figo))
+* kubeadm: kubeadm alpha certs renew and kubeadm upgrade now supports renews of certificates embedded in KubeConfig files managed by kubeadm; this does not apply to certificates signed by external CAs. ([#77180](https://github.com/kubernetes/kubernetes/pull/77180), [@fabriziopandini](https://github.com/fabriziopandini))
+* As of Kubernetes 1.15, the SupportNodePidsLimit feature introduced as alpha in Kubernetes 1.14 is now beta, and the ability to utilize it is enabled by default. It is no longer necessary to set the feature gate `SupportNodePidsLimit=true`. In all other respects, this functionality behaves as it did in Kubernetes 1.14. ([#76221](https://github.com/kubernetes/kubernetes/pull/76221), [@RobertKrawitz](https://github.com/RobertKrawitz))
+* Bump addon-manager to v9.0.1 ([#77282](https://github.com/kubernetes/kubernetes/pull/77282), [@MrHohn](https://github.com/MrHohn))
+ * - Rebase image on debian-base:v1.0.0
+* Fix kubectl describe CronJobs error of `Successful Job History Limit`. ([#77347](https://github.com/kubernetes/kubernetes/pull/77347), [@danielqsj](https://github.com/danielqsj))
+* Remove extra pod creation expections when daemonset fails to create pods in batches. ([#74856](https://github.com/kubernetes/kubernetes/pull/74856), [@draveness](https://github.com/draveness))
+* enhance the daemonset sync logic in clock-skew scenario ([#77208](https://github.com/kubernetes/kubernetes/pull/77208), [@DaiHao](https://github.com/DaiHao))
+* GCE-only flag `cloud-provider-gce-lb-src-cidrs` becomes optional for external cloud providers. ([#76627](https://github.com/kubernetes/kubernetes/pull/76627), [@timoreimann](https://github.com/timoreimann))
+* The GCERegionalPersistentDisk feature gate (GA in 1.13) can no longer be disabled. The feature gate will be removed in v1.17. ([#77412](https://github.com/kubernetes/kubernetes/pull/77412), [@liggitt](https://github.com/liggitt))
+* API requests rejected by admission webhooks which specify an http status code < 400 are now assigned a 400 status code. ([#77022](https://github.com/kubernetes/kubernetes/pull/77022), [@liggitt](https://github.com/liggitt))
+* kubeadm: Add ability to specify certificate encryption and decryption key for the upload/download certificates phases as part of the new v1beta2 kubeadm config format. ([#77012](https://github.com/kubernetes/kubernetes/pull/77012), [@rosti](https://github.com/rosti))
+* Fixes incorrect handling by kubectl of custom resources whose Kind is "Status" ([#77368](https://github.com/kubernetes/kubernetes/pull/77368), [@liggitt](https://github.com/liggitt))
+* kubeadm: disable the kube-proxy DaemonSet on non-Linux nodes. This step is required to support Windows worker nodes. ([#76327](https://github.com/kubernetes/kubernetes/pull/76327), [@neolit123](https://github.com/neolit123))
+* Add etag for NSG updates so as to fix nsg race condition ([#77210](https://github.com/kubernetes/kubernetes/pull/77210), [@feiskyer](https://github.com/feiskyer))
+* The `series.state` field in the events.k8s.io/v1beta1 Event API is deprecated and will be removed in v1.18 ([#75987](https://github.com/kubernetes/kubernetes/pull/75987), [@yastij](https://github.com/yastij))
+* API paging is now enabled by default in k8s.io/apiserver recommended options, and in k8s.io/sample-apiserver ([#77278](https://github.com/kubernetes/kubernetes/pull/77278), [@liggitt](https://github.com/liggitt))
+* GCE/Windows: force kill Stackdriver logging processes when the service cannot be stopped ([#77378](https://github.com/kubernetes/kubernetes/pull/77378), [@yujuhong](https://github.com/yujuhong))
+* ingress objects are now persisted in etcd using the networking.k8s.io/v1beta1 version ([#77139](https://github.com/kubernetes/kubernetes/pull/77139), [@cmluciano](https://github.com/cmluciano))
+* [fluentd-gcp addon] Bump fluentd-gcp-scaler to v0.5.2 to pick up security fixes. ([#76762](https://github.com/kubernetes/kubernetes/pull/76762), [@serathius](https://github.com/serathius))
+* Add RuntimeClass restrictions & defaulting to PodSecurityPolicy. ([#73795](https://github.com/kubernetes/kubernetes/pull/73795), [@tallclair](https://github.com/tallclair))
+* Promote meta.k8s.io/v1beta1 Table and PartialObjectMetadata to v1. ([#77136](https://github.com/kubernetes/kubernetes/pull/77136), [@smarterclayton](https://github.com/smarterclayton))
+* Fix bug with block volume expansion ([#77317](https://github.com/kubernetes/kubernetes/pull/77317), [@gnufied](https://github.com/gnufied))
+* Fixes spurious error messages about failing to clean up iptables rules when using iptables 1.8. ([#77303](https://github.com/kubernetes/kubernetes/pull/77303), [@danwinship](https://github.com/danwinship))
+* Add TLS termination support for NLB ([#74910](https://github.com/kubernetes/kubernetes/pull/74910), [@M00nF1sh](https://github.com/M00nF1sh))
+* Preserves existing namespace information in manifests when running `kubectl set ... --local` commands ([#77267](https://github.com/kubernetes/kubernetes/pull/77267), [@liggitt](https://github.com/liggitt))
+* fix issue that pull image failed from a cross-subscription Azure Container Registry when using MSI to authenticate ([#77245](https://github.com/kubernetes/kubernetes/pull/77245), [@norshtein](https://github.com/norshtein))
+* Clean links handling in cp's tar code ([#76788](https://github.com/kubernetes/kubernetes/pull/76788), [@soltysh](https://github.com/soltysh))
+* Implement and update interfaces and skeleton for the scheduling framework. ([#75848](https://github.com/kubernetes/kubernetes/pull/75848), [@bsalamat](https://github.com/bsalamat))
+* Fixes segmentation fault issue with Protobuf library when log entries are deeply nested. ([#77224](https://github.com/kubernetes/kubernetes/pull/77224), [@qingling128](https://github.com/qingling128))
+* kubeadm: support sub-domain wildcards in certificate SANs ([#76920](https://github.com/kubernetes/kubernetes/pull/76920), [@sempr](https://github.com/sempr))
+* Fixes an error with stuck informers when an etcd watch receives update or delete events with missing data ([#76675](https://github.com/kubernetes/kubernetes/pull/76675), [@ryanmcnamara](https://github.com/ryanmcnamara))
-# v1.14.0-alpha.2
+# v1.15.0-alpha.2
[Documentation](https://docs.k8s.io)
-## Downloads for v1.14.0-alpha.2
+## Downloads for v1.15.0-alpha.2
filename | sha512 hash
-------- | -----------
-[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes.tar.gz) | `1330e4421b61f6b1e6e4dee276d4742754bd3dd4493508d67ebb4445065277c619c4da8b4835febf0b2cdcf9e75fce96de1c1d99998904bae2bb794a453693f2`
-[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-src.tar.gz) | `352c043bebf13a616441c920f3eec80d3f02f111d8488c31aa903e1483bce6d1fbe7472208f64730142960c8f778ab921ef7b654540a3ec09e53bd7e644521bd`
+[kubernetes.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes.tar.gz) | `88ca590c9bc2a095492310fee73bd191398375bc7f549e66e8978c48be8a9c0f9ad26e3881b84d5f2f2e49273333b3086dd99cc8c52de68e38464729f0d2828f`
+[kubernetes-src.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-src.tar.gz) | `f587073d7b58903a52beeaa911c932047294be54b6f395063c65b46a61113af1aeca37c0edc536525398f0051968708cc9bb17a2173edb8c2e8f3938ad91c0b0`
### Client Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-darwin-386.tar.gz) | `ee5aba4efce323167e6d897a2ff6962a240e466333bcae9390be2c8521c6da50ac2cb6139510b693aad49d6393b97a2118ed1fe4f999dd08bdca6d875d25f804`
-[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-darwin-amd64.tar.gz) | `4b5c0b340322956a8d096c595124a765ac318d0eb460d6320218f2470e22d88221a0a9f1f93d5f3075f1c36b18c7041ee2fcb32e0f9c94d9f79bc3fd3005e68e`
-[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-linux-386.tar.gz) | `7a5bfe68dd58c8478746a410872b615daf8abb9a78754140fb4d014a0c9177a87859ac046f56f5743fb97a9881abc2cf48c3e51aa02c8a86a754bf2cc59edb54`
-[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-linux-amd64.tar.gz) | `c3139f58070241f2da815f701af3c0bd0ea4fdec1fe54bb859bd11237ac9b75ecb01b62ac1c7a459a4dd79696412c6d2f8cbd492fd062a790ceadd3dcc9b07fd`
-[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-linux-arm.tar.gz) | `9d96d2e1e11aa61e2c3a5f4f27c18866feae9833b6ee70b15f5cdb5f992849dc1f79821af856b467487092a21a447231fb9c4de6ee6f17defed3cfa16d35b4c6`
-[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-linux-arm64.tar.gz) | `7b4dd825cf9f217c18b28976a3faa94f0bd4868e541e5be7d57cd770e2b163c6daddf12e5f9ad51d92abde794a444f2a20bf582a30f03c39e60186d356030a2d`
-[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-linux-ppc64le.tar.gz) | `490638e250c24b6bad8b67358fd7890f7a2f6456ae8ffe537c28bb5b3ce7abc591e6fecbddd6744f0f6c0e24b9f44c31f7ca1f7ebfc3c0d17a96fe8cf27b8548`
-[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-linux-s390x.tar.gz) | `9dd8c3361eda15dd1594066c55b79cb9a34578c225b2b48647cd5b34619cf23106b845ee25b80d979f8b69e8733148842177500dc48989177b6944677f071f1c`
-[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-windows-386.tar.gz) | `d624b8aead053201765b713d337528be82a71328ee3dd569f556868ceeb4904e64584892a016d247608fc4521c00ead7aed5d973b1206caa2d00406532d5b8b4`
-[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-client-windows-amd64.tar.gz) | `a1cf8c67984dd4eb4610fa05d27fe9e9e4123159f933e3986e9db835b9cf136962168f0003071001e01e2c1831804ba0a366f2495741aa60a41587a69c09cb62`
+[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-client-darwin-386.tar.gz) | `1b944693f3813702e64f41fc11102af59beceb5ded52aac3109ebe39eb2e9103d10b26f29519337a36c86dec5c472d2b0dd5bb0264969a587345b6bb89142520`
+[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-client-darwin-amd64.tar.gz) | `233bba8324f7570e527f7ef22a01552c28dbabc6eef658311668ed554923344791c2c9314678f205424a638fefebbbf67dd32be99cb70019cc77a08dbae08f4d`
+[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-client-linux-386.tar.gz) | `1203729b3180328631d4192c5f4cfb09e3fea958be544fe4ee3e86826422a6242d7eae9d3efba055ada4e65dbc7a3020305da97223d24416dd40686271fb3537`
+[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-client-linux-amd64.tar.gz) | `ad0613c88d4f97b2a8f35fff607bf6168724b28838587218ccece14afb52b531f723ced372de3a4014ee76ae2c738f523790178395a2b59d4b5f53fc3451fd04`
+[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-client-linux-arm.tar.gz) | `e9d3905d306504838d417051df43431f724ea689fd3564e575f8235fc80d771b9bc72c98eae4641e9e3c5619fc93550b93634ff33d8db3b0058e348d7258ee3d`
+[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-client-linux-arm64.tar.gz) | `a426b27d0851d84b76d225b9366668521441539e7582b2439e973c98c84909fc0a236478d505c6cf50598c4ecb4796f3214ee5c80d42653ddb8e30d5ce7732be`
+[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-client-linux-ppc64le.tar.gz) | `be717777159b6f0c472754be704d543b80168cc02d76ca936f6559a55752530e061fe311df3906660dcaf7950a7cbea102232fb54bc4056384c11018d1dfff24`
+[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-client-linux-s390x.tar.gz) | `4a4a08d23be247e1543c85895c211e9fee8e8fa276e5aa31ed012804fa0921eeb0e5828f8ef152742b41dc1db08658dec01c0287b2828c3d3b91f260243c2457`
+[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-client-windows-386.tar.gz) | `8d16d655d7d4213a45a583f81b31056a02dd2100d06d8072a8ec77e255630bd9acfff062d7ab46946f94d667a8d73c611818445464638f3a3ef69c29e9aafda7`
+[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-client-windows-amd64.tar.gz) | `d4ece03464aaa9c2416d7acf9de7f94f3e01fa17f6f7469a9aedaefa90d4b0af193a1b78fb514fd9de0a55a45244a076e3897e62f9208581523690bbe0353357`
### Server Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-server-linux-amd64.tar.gz) | `b93982b56371994c540cd11e6bc21808279340617164992c10f30d8e6ae4d5e270e41c1edc0625d3458a18944ec7aa8c273acbbcd718d60b6cacbc24220c42ac`
-[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-server-linux-arm.tar.gz) | `bfd76c6b26e5927166d776f6110b97ee36c1d63ad39e2d18899f3e428ebb0f9615bb677ac8e9bcc1864c72a40efd71e1314fe6d137f9c6e54f720270929e3f46`
-[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-server-linux-arm64.tar.gz) | `6721dec0df9466cd6c056160c73d598296cebb0af9259eb21b693abb8708901bc8bc30e11815e14d00d6eb12b8bb90b699e3119b922da855e2c411bdf229d6e5`
-[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-server-linux-ppc64le.tar.gz) | `f8cd307db8141d989ae1218dd2b438bc9cee017d533b1451d2345f9689c451fdb080acd1b9b2f535ed04017e44b81a0585072e7d58a9d201a0ec28fd09df0a6f`
-[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-server-linux-s390x.tar.gz) | `de7514bbd87a1b363e1bc7787f37d5ea10faac4afe7c5163c23c4df16781aa77570ec553bc4f4b6094166c1fcfc3c431f13e51ffa32f7ea2849e76ec0151ea35`
+[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-server-linux-amd64.tar.gz) | `932557827bfcc329162fcf29510f40951bdd5da4890de62fd5c44d5290349b0942ffe07bb2b518ca0f21b4de4c27ec6cfa338ec2b40e938e3a9f6e3ab5db89c0`
+[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-server-linux-arm.tar.gz) | `e1c5349feab83ad458b9a5956026c48c7ce53f3becc09c537eda8984cea56bb254e7972d467e3b3349ad8e35cf70bebcb4b6a0ab98cbe43ab5f1238f0844d151`
+[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-server-linux-arm64.tar.gz) | `e8cfe09ff625b36b58d97440d82dbc06795d503729b45a8d077de7c73b70f350010747ad2c118ea75946e40cbf5cdfb1fdfa686c8cc714d4ec942f9bf2925664`
+[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-server-linux-ppc64le.tar.gz) | `99770fe0abd0ec2d5f7e38d434a82fa323b2e25124e62aadf483dd68e763b07292e9303a2c8d96964bed91cab7050e0f5be02c76919c33dcc18b46d541677022`
+[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-server-linux-s390x.tar.gz) | `3f0772f3b470d59330dd6b44a43af640a7ec42354d734a1aef491769d20a2dadaebda71cac6ad926082e03e967c6dd16ce9c440183d705c8c7c5a33f6d7b89be`
### Node Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-node-linux-amd64.tar.gz) | `8c37fd2fe6232d2c148e23df021b8b5347136263399932bcdff0c7a0186f3145de9ede4936b14de7484cc6db9241517d79b5306c380ed374396882900b63e912`
-[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-node-linux-arm.tar.gz) | `389e4e77ab9e62968a25b8f4e146a2c3fbb3db2e60e051922edf6395c26cc5380e5a77bf67022339d6ebfe9abd714636d77510bbc42924b4265fdb245fae08c9`
-[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-node-linux-arm64.tar.gz) | `7efc32dfeefcef7f860913c25431bd891a435e92cb8d5a95f8deca1a82aa899a007d4b19134493694a4bccb5564867488634a780c128f0cf82c61d98afa889f5`
-[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-node-linux-ppc64le.tar.gz) | `da30c03bca4b81d810a7df006db02333dea87e336d6cdca9c93392e01c7e43bf4902c969efa7fa53e8a70a0e863b403ec26b87bd38226b8b9f98777ddb0051a0`
-[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-node-linux-s390x.tar.gz) | `cce43b7f0350b9e5a77ea703225adb9714ef022d176db5b99a0327937d19021d7a8e93ef1169389fd53b895bb98725d23c7565ef80afdd17596c26daf41eeeac`
-[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.2/kubernetes-node-windows-amd64.tar.gz) | `d3accf522d80cbfb3d03e9eaa60a09767ba11e88a8a5b44a629192a7c6916b1fb3440f022a5ffc4ea78f3595f254a42f028dd428d117360091cd0c747ec39eb5`
+[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-node-linux-amd64.tar.gz) | `9c879a12174a8c69124a649a8e6d51a5d4c174741d743f68f9ccec349aa671ca085e33cf63ba6047e89c9e16c2122758bbcac01eba48864cd834d18ff6c6bd36`
+[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-node-linux-arm.tar.gz) | `3ac31c7f6b01896da60028037f30f8b6f331b7cd989dcfabd5623dbfbbed8a60ff5911fc175d976e831075587f2cd79c97f50b5cfa73bac203746bd2f6b75cd1`
+[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-node-linux-arm64.tar.gz) | `669376d5673534d53d2546bc7768f00a3add74da452061dbc2892f59efba28dc54835e4bc556c84ef54cb761f9e65f2b54e274f39faa0d609976da76fcdd87df`
+[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-node-linux-ppc64le.tar.gz) | `b1c7fb9fcafc216fa2bd9551399f11a592922556dfad4c56fa273a7c54426fbb63b786ecf44d71148f5c8bd08212f9915c0b784790661302b9953d6da44934d7`
+[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-node-linux-s390x.tar.gz) | `b93ae8cebd79d1ce0cb2aed66ded63b3541fcca23a1f879299c422774fb757ad3c30e782ccd7314480d247a5435c434014ed8a4cc3943b3078df0ef5b5a5b8f1`
+[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.2/kubernetes-node-windows-amd64.tar.gz) | `e99127789e045972d0c52c61902f00297c208851bb65e01d28766b6f9439f81a56e48f3fc1a20189c59ea76d3ba4ac3dd230ad054c8a2106ae8a19d4232137ba`
-## Changelog since v1.14.0-alpha.1
-
-### Action Required
-
-* Promote ValidateProxyRedirects to Beta, and enable by default. This feature restricts redirect following from the apiserver to same-host redirects. ([#72552](https://github.com/kubernetes/kubernetes/pull/72552), [@tallclair](https://github.com/tallclair))
- * ACTION REQUIRED: If nodes are configured to respond to CRI streaming requests on a different host interface than what the apiserver makes requests on (only the case if not using the built-in dockershim & setting the kubelet flag `--redirect-container-streaming=true`), then these requests will be broken. In that case, the feature can be temporarily disabled until the node configuration is corrected. We suggest setting `--redirect-container-streaming=false` on the kubelet to avoid issues.
+## Changelog since v1.15.0-alpha.1
### Other notable changes
-* Added alpha field storageVersionHash to the discovery document for each resource. Its value must be treated as opaque by clients. Only equality comparison on the value is valid. ([#73191](https://github.com/kubernetes/kubernetes/pull/73191), [@caesarxuchao](https://github.com/caesarxuchao))
-* Fix admission metrics in seconds. ([#72343](https://github.com/kubernetes/kubernetes/pull/72343), [@danielqsj](https://github.com/danielqsj))
- * Add metrics `*_admission_latencies_milliseconds` and `*_admission_latencies_milliseconds_summary` for backward compatible, but will be removed in a future release.
-* Pod eviction now honors graceful deletion by default if no delete options are provided in the eviction request ([#72730](https://github.com/kubernetes/kubernetes/pull/72730), [@liggitt](https://github.com/liggitt))
-* Update to go1.11.5 ([#73326](https://github.com/kubernetes/kubernetes/pull/73326), [@ixdy](https://github.com/ixdy))
-* Change proxy metrics to conform metrics guidelines. ([#72334](https://github.com/kubernetes/kubernetes/pull/72334), [@danielqsj](https://github.com/danielqsj))
- * The metrics `sync_proxy_rules_latency_microseconds` is deprecated, and will be removed in a future release, please convert to metrics`sync_proxy_rules_latency_seconds`.
-* Add network stats for Windows nodes and pods. ([#70121](https://github.com/kubernetes/kubernetes/pull/70121), [@feiskyer](https://github.com/feiskyer))
-* kubeadm: When certificates are present joining a new control plane make sure that they match at least the required SANs ([#73093](https://github.com/kubernetes/kubernetes/pull/73093), [@ereslibre](https://github.com/ereslibre))
-* A new `TaintNodesByCondition` admission plugin taints newly created Node objects as "not ready", to fix a race condition that could cause pods to be scheduled on new nodes before their taints were updated to accurately reflect their reported conditions. This admission plugin is enabled by default if the `TaintNodesByCondition` feature is enabled. ([#73097](https://github.com/kubernetes/kubernetes/pull/73097), [@bsalamat](https://github.com/bsalamat))
-* kube-addon-manager was updated to v9.0, and now uses kubectl v1.13.2 and prunes workload resources via the apps/v1 API ([#72978](https://github.com/kubernetes/kubernetes/pull/72978), [@liggitt](https://github.com/liggitt))
-* When a watch is closed by an HTTP2 load balancer and we are told to go away, skip printing the message to stderr by default. ([#73277](https://github.com/kubernetes/kubernetes/pull/73277), [@smarterclayton](https://github.com/smarterclayton))
-* If you are running the cloud-controller-manager and you have the `pvlabel.kubernetes.io` alpha Initializer enabled, you must now enable PersistentVolume labeling using the `PersistentVolumeLabel` admission controller instead. You can do this by adding `PersistentVolumeLabel` in the `--enable-admission-plugins` kube-apiserver flag. ([#73102](https://github.com/kubernetes/kubernetes/pull/73102), [@andrewsykim](https://github.com/andrewsykim))
-* The alpha Initializers feature, `admissionregistration.k8s.io/v1alpha1` API version, `Initializers` admission plugin, and use of the `metadata.initializers` API field have been removed. Discontinue use of the alpha feature and delete any existing `InitializerConfiguration` API objects before upgrading. The `metadata.initializers` field will be removed in a future release. ([#72972](https://github.com/kubernetes/kubernetes/pull/72972), [@liggitt](https://github.com/liggitt))
-* Scale max-inflight limits together with master VM sizes. ([#73268](https://github.com/kubernetes/kubernetes/pull/73268), [@wojtek-t](https://github.com/wojtek-t))
-* kubectl supports copying files with wild card ([#72641](https://github.com/kubernetes/kubernetes/pull/72641), [@dixudx](https://github.com/dixudx))
-* kubeadm: add back `--cert-dir` option for `kubeadm init phase certs sa` ([#73239](https://github.com/kubernetes/kubernetes/pull/73239), [@mattkelly](https://github.com/mattkelly))
-* Remove deprecated args '--show-all' ([#69255](https://github.com/kubernetes/kubernetes/pull/69255), [@Pingan2017](https://github.com/Pingan2017))
-* As per deprecation policy in https://kubernetes.io/docs/reference/using-api/deprecation-policy/ ([#73001](https://github.com/kubernetes/kubernetes/pull/73001), [@shivnagarajan](https://github.com/shivnagarajan))
- * the taints "node.alpha.kubernetes.io/notReady" and "node.alpha.kubernetes.io/unreachable". are no
- * longer supported or adjusted. These uses should be replaced with "node.kubernetes.io/not-ready"
- * and "node.kubernetes.io/unreachable" respectively instead.
-* The /swagger.json and /swagger-2.0.0.pb-v1 schema documents, deprecated since v1.10, have been removed in favor of `/openapi/v2` ([#73148](https://github.com/kubernetes/kubernetes/pull/73148), [@liggitt](https://github.com/liggitt))
-* CoreDNS is only officially supported on Linux at this time. As such, when kubeadm is used to deploy this component into your kubernetes cluster, it will be restricted (using nodeSelectors) to run only on nodes with that operating system. This ensures that in clusters which include Windows nodes, the scheduler will not ever attempt to place CoreDNS pods on these machines, reducing setup latency and enhancing initial cluster stability. ([#69940](https://github.com/kubernetes/kubernetes/pull/69940), [@MarcPow](https://github.com/MarcPow))
-* kubeadm now attempts to detect an installed CRI by its usual domain socket, so that --cri-socket can be omitted from the command line if Docker is not used and there is a single CRI installed. ([#69366](https://github.com/kubernetes/kubernetes/pull/69366), [@rosti](https://github.com/rosti))
-* scheduler: makes pod less racing so as to be put back into activeQ properly ([#73078](https://github.com/kubernetes/kubernetes/pull/73078), [@Huang-Wei](https://github.com/Huang-Wei))
-* jsonpath expressions containing `[start:end:step]` slice are now evaluated correctly ([#73149](https://github.com/kubernetes/kubernetes/pull/73149), [@liggitt](https://github.com/liggitt))
-* metadata.deletionTimestamp is no longer moved into the future when issuing repeated DELETE requests against a resource containing a finalizer. ([#73138](https://github.com/kubernetes/kubernetes/pull/73138), [@liggitt](https://github.com/liggitt))
-* The "kubectl api-resources" command will no longer fail to display any resources on a single failure ([#73035](https://github.com/kubernetes/kubernetes/pull/73035), [@juanvallejo](https://github.com/juanvallejo))
-* e2e tests that require SSH may be used against clusters that have nodes without external IP addresses by setting the environment variable `KUBE_SSH_BASTION` to the `host:port` of a machine that is allowed to SSH to those nodes. The same private key that the test would use is used for the bastion host. The test connects to the bastion and then tunnels another SSH connection to the node. ([#72286](https://github.com/kubernetes/kubernetes/pull/72286), [@smarterclayton](https://github.com/smarterclayton))
-* kubeadm: explicitly wait for `etcd` to have grown when joining a new control plane ([#72984](https://github.com/kubernetes/kubernetes/pull/72984), [@ereslibre](https://github.com/ereslibre))
-* Install CSINodeInfo and CSIDriver CRDs in the local cluster. ([#72584](https://github.com/kubernetes/kubernetes/pull/72584), [@xing-yang](https://github.com/xing-yang))
-* kubectl loads config file once and uses persistent client config ([#71117](https://github.com/kubernetes/kubernetes/pull/71117), [@dixudx](https://github.com/dixudx))
-* remove stale OutOfDisk condition from kubelet side ([#72507](https://github.com/kubernetes/kubernetes/pull/72507), [@dixudx](https://github.com/dixudx))
-* Node OS/arch labels are promoted to GA ([#73048](https://github.com/kubernetes/kubernetes/pull/73048), [@yujuhong](https://github.com/yujuhong))
-* Fix graceful apiserver shutdown to not drop outgoing bytes before the process terminates. ([#72970](https://github.com/kubernetes/kubernetes/pull/72970), [@sttts](https://github.com/sttts))
-* Change apiserver metrics to conform metrics guidelines. ([#72336](https://github.com/kubernetes/kubernetes/pull/72336), [@danielqsj](https://github.com/danielqsj))
- * The following metrics are deprecated, and will be removed in a future release:
- * `apiserver_request_count`
- * `apiserver_request_latencies`
- * `apiserver_request_latencies_summary`
- * `apiserver_dropped_requests`
- * `etcd_helper_cache_hit_count`
- * `etcd_helper_cache_miss_count`
- * `etcd_helper_cache_entry_count`
- * `etcd_request_cache_get_latencies_summary`
- * `etcd_request_cache_add_latencies_summary`
- * `etcd_request_latencies_summary`
- * `transformation_latencies_microseconds `
- * `data_key_generation_latencies_microseconds`
- * Please convert to the following metrics:
- * `apiserver_request_total`
- * `apiserver_request_latency_seconds`
- * `apiserver_dropped_requests_total`
- * `etcd_helper_cache_hit_total`
- * `etcd_helper_cache_miss_total`
- * `etcd_helper_cache_entry_total`
- * `etcd_request_cache_get_latency_seconds`
- * `etcd_request_cache_add_latency_seconds`
- * `etcd_request_latency_seconds`
- * `transformation_latencies_seconds`
- * `data_key_generation_latencies_seconds`
-* acquire lock before operating unschedulablepodsmap ([#73022](https://github.com/kubernetes/kubernetes/pull/73022), [@denkensk](https://github.com/denkensk))
-* Print `SizeLimit` of `EmptyDir` in `kubectl describe pod` outputs. ([#69279](https://github.com/kubernetes/kubernetes/pull/69279), [@dtaniwaki](https://github.com/dtaniwaki))
-* add goroutine to move unschedulable pods to activeq if they are not retried for more than 1 minute ([#72558](https://github.com/kubernetes/kubernetes/pull/72558), [@denkensk](https://github.com/denkensk))
-* PidPressure evicts pods from lowest priority to highest priority ([#72844](https://github.com/kubernetes/kubernetes/pull/72844), [@dashpole](https://github.com/dashpole))
-* Reduce GCE log rotation check from 1 hour to every 5 minutes. Rotation policy is unchanged (new day starts, log file size > 100MB). ([#72062](https://github.com/kubernetes/kubernetes/pull/72062), [@jpbetz](https://github.com/jpbetz))
-* Add support for max attach limit for Cinder ([#72980](https://github.com/kubernetes/kubernetes/pull/72980), [@gnufied](https://github.com/gnufied))
-* Fixes the setting of NodeAddresses when using the vSphere CloudProvider and nodes that have multiple IP addresses. ([#70805](https://github.com/kubernetes/kubernetes/pull/70805), [@danwinship](https://github.com/danwinship))
-* kubeadm: pull images when joining a new control plane instance ([#72870](https://github.com/kubernetes/kubernetes/pull/72870), [@MalloZup](https://github.com/MalloZup))
-* Enable mTLS encription between etcd and kube-apiserver in GCE ([#70144](https://github.com/kubernetes/kubernetes/pull/70144), [@wenjiaswe](https://github.com/wenjiaswe))
-* The `/swaggerapi/*` schema docs, deprecated since 1.7, have been removed in favor of the /openapi/v2 schema docs. ([#72924](https://github.com/kubernetes/kubernetes/pull/72924), [@liggitt](https://github.com/liggitt))
-* Allow users to use Docker 18.09 with kubeadm ([#72823](https://github.com/kubernetes/kubernetes/pull/72823), [@dims](https://github.com/dims))
+* Kubemark scripts have been fixed for IKS clusters. ([#76909](https://github.com/kubernetes/kubernetes/pull/76909), [@Huang-Wei](https://github.com/Huang-Wei))
+* fix azure disk list corruption issue ([#77187](https://github.com/kubernetes/kubernetes/pull/77187), [@andyzhangx](https://github.com/andyzhangx))
+* kubeadm: kubeadm upgrade now renews all the certificates used by one component before upgrading the component itself, with the exception of certificates signed by external CAs. User can eventually opt-out from certificate renewal during upgrades by setting the new flag --certificate-renewal to false. ([#76862](https://github.com/kubernetes/kubernetes/pull/76862), [@fabriziopandini](https://github.com/fabriziopandini))
+* kube-proxy: os exit when CleanupAndExit is set to true ([#76732](https://github.com/kubernetes/kubernetes/pull/76732), [@JieJhih](https://github.com/JieJhih))
+* kubectl exec now allows using resource name (e.g., deployment/mydeployment) to select a matching pod. ([#73664](https://github.com/kubernetes/kubernetes/pull/73664), [@prksu](https://github.com/prksu))
+ * kubectl exec now allows using --pod-running-timeout flag to wait till at least one pod is running.
+* kubeadm: add optional ECDSA support. ([#76390](https://github.com/kubernetes/kubernetes/pull/76390), [@rojkov](https://github.com/rojkov))
+ * kubeadm still generates RSA keys when deploying a node, but also accepts ECDSA
+ * keys if they exist already in the directory specified in --cert-dir option.
+* kube-proxy: HealthzBindAddress and MetricsBindAddress support ipv6 address. ([#76320](https://github.com/kubernetes/kubernetes/pull/76320), [@JieJhih](https://github.com/JieJhih))
+* Packets considered INVALID by conntrack are now dropped. In particular, this fixes ([#74840](https://github.com/kubernetes/kubernetes/pull/74840), [@anfernee](https://github.com/anfernee))
+ * a problem where spurious retransmits in a long-running TCP connection to a service
+ * IP could result in the connection being closed with the error "Connection reset by
+ * peer"
+* Introduce the v1beta2 config format to kubeadm. ([#76710](https://github.com/kubernetes/kubernetes/pull/76710), [@rosti](https://github.com/rosti))
+* kubeadm: bump the minimum supported Docker version to 1.13.1 ([#77051](https://github.com/kubernetes/kubernetes/pull/77051), [@chenzhiwei](https://github.com/chenzhiwei))
+* Rancher credential provider has now been removed ([#77099](https://github.com/kubernetes/kubernetes/pull/77099), [@dims](https://github.com/dims))
+* Support print volumeMode using `kubectl get pv/pvc -o wide` ([#76646](https://github.com/kubernetes/kubernetes/pull/76646), [@cwdsuzhou](https://github.com/cwdsuzhou))
+* Upgrade go-autorest to v11.1.2 ([#77070](https://github.com/kubernetes/kubernetes/pull/77070), [@feiskyer](https://github.com/feiskyer))
+* Fixes a bug where dry-run is not honored for pod/eviction sub-resource. ([#76969](https://github.com/kubernetes/kubernetes/pull/76969), [@apelisse](https://github.com/apelisse))
+* Reduce event spam for AttachVolume storage operation ([#75986](https://github.com/kubernetes/kubernetes/pull/75986), [@mucahitkurt](https://github.com/mucahitkurt))
+* Report cp errors consistently ([#77010](https://github.com/kubernetes/kubernetes/pull/77010), [@soltysh](https://github.com/soltysh))
+* specify azure file share name in azure file plugin ([#76988](https://github.com/kubernetes/kubernetes/pull/76988), [@andyzhangx](https://github.com/andyzhangx))
+* Migrate oom watcher not relying on cAdviosr's API any more ([#74942](https://github.com/kubernetes/kubernetes/pull/74942), [@WanLinghao](https://github.com/WanLinghao))
+* Validating admission webhooks are now properly called for CREATE operations on the following resources: tokenreviews, subjectaccessreviews, localsubjectaccessreviews, selfsubjectaccessreviews, selfsubjectrulesreviews ([#76959](https://github.com/kubernetes/kubernetes/pull/76959), [@sbezverk](https://github.com/sbezverk))
+* Fix OpenID Connect (OIDC) token refresh when the client secret contains a special character. ([#76914](https://github.com/kubernetes/kubernetes/pull/76914), [@tsuna](https://github.com/tsuna))
+* kubeadm: Improve resiliency when it comes to updating the `kubeadm-config` config map upon new control plane joins or resets. This allows for safe multiple control plane joins and/or resets. ([#76821](https://github.com/kubernetes/kubernetes/pull/76821), [@ereslibre](https://github.com/ereslibre))
+* Validating admission webhooks are now properly called for CREATE operations on the following resources: pods/binding, pods/eviction, bindings ([#76910](https://github.com/kubernetes/kubernetes/pull/76910), [@liggitt](https://github.com/liggitt))
+* Default TTL for DNS records in kubernetes zone is changed from 5s to 30s to keep consistent with old dnsmasq based kube-dns. The TTL can be customized with command `kubectl edit -n kube-system configmap/coredns`. ([#76238](https://github.com/kubernetes/kubernetes/pull/76238), [@Dieken](https://github.com/Dieken))
+* Fixed a kubemark panic when hollow-node is morphed as proxy. ([#76848](https://github.com/kubernetes/kubernetes/pull/76848), [@Huang-Wei](https://github.com/Huang-Wei))
+* k8s-dns-node-cache image version v1.15.1 ([#76640](https://github.com/kubernetes/kubernetes/pull/76640), [@george-angel](https://github.com/george-angel))
+* GCE/Windows: add support for stackdriver logging agent ([#76850](https://github.com/kubernetes/kubernetes/pull/76850), [@yujuhong](https://github.com/yujuhong))
+* Admission webhooks are now properly called for `scale` and `deployments/rollback` subresources ([#76849](https://github.com/kubernetes/kubernetes/pull/76849), [@liggitt](https://github.com/liggitt))
+* Switch to instance-level update APIs for Azure VMSS loadbalancer operations ([#76656](https://github.com/kubernetes/kubernetes/pull/76656), [@feiskyer](https://github.com/feiskyer))
+* kubeadm: kubeadm alpha cert renew now ignores certificates signed by external CAs ([#76865](https://github.com/kubernetes/kubernetes/pull/76865), [@fabriziopandini](https://github.com/fabriziopandini))
+* Update to use go 1.12.4 ([#76576](https://github.com/kubernetes/kubernetes/pull/76576), [@cblecker](https://github.com/cblecker))
+* [metrics-server addon] Restore connecting to nodes via IP addresses ([#76819](https://github.com/kubernetes/kubernetes/pull/76819), [@serathius](https://github.com/serathius))
+* fix detach azure disk back off issue which has too big lock in failure retry condition ([#76573](https://github.com/kubernetes/kubernetes/pull/76573), [@andyzhangx](https://github.com/andyzhangx))
+* Updated klog to 0.3.0 ([#76474](https://github.com/kubernetes/kubernetes/pull/76474), [@vincepri](https://github.com/vincepri))
+* kube-up.sh no longer supports "centos" and "local" providers ([#76711](https://github.com/kubernetes/kubernetes/pull/76711), [@dims](https://github.com/dims))
+* Ensure the backend pools are set correctly for Azure SLB with multiple backend pools (e.g. outbound rules) ([#76691](https://github.com/kubernetes/kubernetes/pull/76691), [@feiskyer](https://github.com/feiskyer))
+* Windows nodes on GCE use a known-working 1809 image rather than the latest 1809 image. ([#76722](https://github.com/kubernetes/kubernetes/pull/76722), [@pjh](https://github.com/pjh))
+* The userspace proxy now respects the IPTables proxy's minSyncInterval parameter. ([#71735](https://github.com/kubernetes/kubernetes/pull/71735), [@dcbw](https://github.com/dcbw))
+* Kubeadm will now include the missing certificate key if it is unable to find an expected key during `kubeadm join` when used with the `--experimental-control-plane` flow ([#76636](https://github.com/kubernetes/kubernetes/pull/76636), [@mdaniel](https://github.com/mdaniel))
-# v1.14.0-alpha.1
+# v1.15.0-alpha.1
[Documentation](https://docs.k8s.io)
-## Downloads for v1.14.0-alpha.1
+## Downloads for v1.15.0-alpha.1
filename | sha512 hash
-------- | -----------
-[kubernetes.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes.tar.gz) | `fac80e5674e547d00987516fb2eca6ea9947529307566be6a12932e3c9e430e8ad094afae748f31e9574838d98052423e3634a067f1456f7c13f6b27bfa63bcc`
-[kubernetes-src.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-src.tar.gz) | `d1b5b2c15cb0daa076606f4ccf887724b0166dee0320f2a61d16ab4689931ab0cf5dac4c499aea3d434eb96d589d2b3effe0037e2244978d4290bd19b9a3edea`
+[kubernetes.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes.tar.gz) | `e07246d1811bfcaf092a3244f94e4bcbfd050756aea1b56e8af54e9c016c16c9211ddeaaa08b8b398e823895dd7a8fc757e5674e11a86f1edc6f718b837cfe0c`
+[kubernetes-src.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-src.tar.gz) | `ebd902a1cfdde0d9a0062f3f21732eed76eb123da04a25f9f5c7cfce8a2926dc8331e6028c3cd27aa84aaa0bf069422a0a0b0a61e6e5f48be7fe4934e1e786fc`
### Client Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-darwin-386.tar.gz) | `307c426e4abaf81648af393ddd641c225d87b02d8662d1309fe3528f14ed91b2470f6b46dc8ce0459cf196e2cec906f7eb972bf4c9a96cbd570e206f5a059dca`
-[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-darwin-amd64.tar.gz) | `8daa85f3e8feaea0d55f20f850038dd113f0f08b62eef944b08a9109d4e69f323a8fcf20c12790c78386b454148bcc9a0cdf106ba3393620709d185c291887fa`
-[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-linux-386.tar.gz) | `28d73c299cb9859fdfeb3e4869a7a9c77f5679309c2613bd2c72d92dafd5faad0653a7377616190edd29cb8fa1aff104daba98f398e72f3447a132f208dde756`
-[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-linux-amd64.tar.gz) | `eb923e13026f80b743a57100d4f94995f322ab6f107c34ffd9aa74b5a6c6a4a410aff8921a4f675ace7db2ff8158a90874b8f56d3142ad2cbe615c11ec2d4535`
-[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-linux-arm.tar.gz) | `279b0d0c560900021abea4bbfc25aeca7389f0b37d80022dc3335147344663424e7ba6a0abecb2dca1d2facb4163e26080750736a9a1932d67422f88b0940679`
-[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-linux-arm64.tar.gz) | `d69d28361b9c9e16f3e6804ccda92d55ee743e63aba7fded04edf1f7202b1fa96c235e36ab2ca17df99b4aede80b92150790885bdb7f5b4d7956af3c269dd83c`
-[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-linux-ppc64le.tar.gz) | `ca6ebb87df98bf179c94f54a4e8ae2ef2ea534b1bc5014331f937aa9d4c0442d5423651457871ef5c51f481ba8a3f449d69ef7e42e49c1b313f66cff3d44926f`
-[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-linux-s390x.tar.gz) | `13fa2058ceba66d8da5ba5982aa302cdd1c61d15253183ab97739229584a178f057f7979b49a035cb2355197dbb388d1642939e2c002b10e23263127030022ab`
-[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-windows-386.tar.gz) | `42ba4bba477e2958aab674a0fbf888bd5401fa5fbc39466b6cad0fc97e249ac949042c513bf176957bcb336a906e612d9c6790215e78c280225351236ec96993`
-[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-client-windows-amd64.tar.gz) | `d5f339fe4d37c61babc97208446d1859423b7679f34040f72e9138b72a18d982e66732d1f4b4f3443700f9cbe96bfc0e12eaec0a8a373fb903b49efdafcbae04`
+[kubernetes-client-darwin-386.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-client-darwin-386.tar.gz) | `88ce20f3c1f914aebca3439b3f4b642c9c371970945a25e623730826168ebadc53706ac6f4422ea4295de86c7c6bff14ec96ad3cc8ae52d9920ecbdc9dab1729`
+[kubernetes-client-darwin-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-client-darwin-amd64.tar.gz) | `a5c1a43c7e3dbb27c1a4c7e4111596331887206f768072e3fb7671075c11f2ed7c26873eef291c048415247845e86ff58aa9946a89c4aede5d847677e871ccd5`
+[kubernetes-client-linux-386.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-client-linux-386.tar.gz) | `cf7513ab821cd0c979b1421034ce50e9bc0f347c184551cf4a9b6beab06588adda19f1b53b073525c0e73b5961beb5c1fab913c040c911acaa36496e4386a70d`
+[kubernetes-client-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-client-linux-amd64.tar.gz) | `964296e9289e12bc02ec05fb5ca9e6766654f81e1885989f8185ee8b47573ae07731e8b3cb69742b58ab1e795df8e47fd110d3226057a4c56a9ebeae162f8b35`
+[kubernetes-client-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-client-linux-arm.tar.gz) | `3480209c2112315d81e9ac22bc2a5961a805621b82ad80dc04c7044b7a8d63b3515f77ebdfad632555468b784bab92d018aeb92c42e8b382d0ce9f358f397514`
+[kubernetes-client-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-client-linux-arm64.tar.gz) | `be7d5bb5fddfbbe95d32b354b6ed26831b1afc406dc78e9188eae3d957991ea4ceb04b434d729891d017081816125c61ea67ac10ce82773e25edb9f45b39f2d3`
+[kubernetes-client-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-client-linux-ppc64le.tar.gz) | `bfaeb3b8b0b2e2dde8900cd2910786cb68804ad7d173b6b52c15400041d7e8db30ff601a7de6a789a8788100eda496f0ff6d5cdcabef775d4b09117e002fe758`
+[kubernetes-client-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-client-linux-s390x.tar.gz) | `653c99e3171f74e52903ac9101cf8280a5e9d82969c53e9d481a72e0cb5b4a22951f88305545c0916ba958ca609c39c249200780fed3f9bf88fa0b2d2438259c`
+[kubernetes-client-windows-386.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-client-windows-386.tar.gz) | `9b2862996eadf4e97d890f21bd4392beca80e356c7f94abaf5968b4ea3c2485f3391c89ce331c1de69ff9380de0c0b7be8635b079c79181e046b854b4c2530e6`
+[kubernetes-client-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-client-windows-amd64.tar.gz) | `97d87fcbc0cd821b3ca5ebfbda0b38fdc9c5a5ec58e521936163fead936995c6b26b0f05b711fbc3d61315848b6733778cb025a34de837321cf2bb0a1cca76d0`
### Server Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-server-linux-amd64.tar.gz) | `bcbcbd3ac4419e54e894d1e595f883e61fcf9db0353a30d794a9e5030cde8957abe8124fa5265e8c52fbc93f07cfe79b2493f791dc225468bf927b7ab4694087`
-[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-server-linux-arm.tar.gz) | `fda4ea9168555f724659601b06737dea6ec95574569df4ef7e4ab6c2cca3327623ef310bf34f792767f00ee8069b9dd83564835d43daf973087be816be40010b`
-[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-server-linux-arm64.tar.gz) | `c142857711ec698844cd61188e70b5ab185ba2c8828cf5563a2f42958489e2ae4dbb2c1626271d4f5582167bb363e55ed03afb15e7e86cd414e0dc049fe384c0`
-[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-server-linux-ppc64le.tar.gz) | `524a40c5717b24c5a3b2491c4c61cf3038ba5ae7f343797a1b56a5906d6a0a3eb57e9ae78590c28ac3d441d9d1bb480a0c264a07e009a4365503ad2357614aa8`
-[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-server-linux-s390x.tar.gz) | `ef943fe326b05ece57f2e409ab1cc5fe863f5effa591abae17181c84a5eb4061e9f394ffcc8ee6ebb3f5165b183bab747a8cef540cbb1436343e8180cec037e0`
+[kubernetes-server-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-server-linux-amd64.tar.gz) | `ffa2db2c39676e39535bcee3f41f4d178b239ca834c1aa6aafb75fb58cc5909ab94b712f2be6c0daa27ff249de6e31640fb4e5cdc7bdae82fc5dd2ad9f659518`
+[kubernetes-server-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-server-linux-arm.tar.gz) | `a526cf7009fec5cd43da693127668006d3d6c4ebfb719e8c5b9b78bd5ad34887d337f25b309693bf844eedcc77c972c5981475ed3c00537d638985c6d6af71de`
+[kubernetes-server-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-server-linux-arm64.tar.gz) | `4f9c8f85eebbf9f0023c9311560b7576cb5f4d2eac491e38aa4050c82b34f6a09b3702b3d8c1d7737d0f27fd2df82e8b0db5ab4600ca51efd5bd21ac38049062`
+[kubernetes-server-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-server-linux-ppc64le.tar.gz) | `bf95f15c3edd9a7f6c2911eedd55655a60da288c9df3fed4c5b2b7cc11d5e1da063546a44268d6c3cb7d48c48d566a0776b2536f847507bcbcd419dcc8643f49`
+[kubernetes-server-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-server-linux-s390x.tar.gz) | `a2588d8b3df5f7599cd84635e5772f9ba2c665287c54a6167784bb284eb09fb0e518e9acb0e295e18a77d48cc354c8918751b63f82504177a0b1838e9e89dfd3`
### Node Binaries
filename | sha512 hash
-------- | -----------
-[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-node-linux-amd64.tar.gz) | `396f7588e9131dd1b99d101c8bb94fb7e67ab067327ee58dab5a6e24887d8fbb6fc78fe50804abb0ab2f626034881d4280b3f678a1fd8b34891762bf2172b268`
-[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-node-linux-arm.tar.gz) | `b75c1550438da0b66582d6de90436ee3c44e41e67f74947d93ee9a07ed2b7757762f3f2b05bd7b5589d7e1ea2eb3616b2ef4fe59a9fbe9d8e7cb8f0c9d3dd158`
-[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-node-linux-arm64.tar.gz) | `b6c46f9250b5565fa178ecc99ffedc6724b0bfffb73acc7d3da2c678af71008a264502cc4a48a6e7452bd0a60d77194141bbc2ea9af49176ea66e27d874b77ac`
-[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-node-linux-ppc64le.tar.gz) | `8d505c61a59bc9fc53d6f219d6434ddd962ba383654c46e16d413cee0ad6bd26f276a9860ad3680349bcfacb361e75de07fc44f7d14c054c47b6bd0eae63615f`
-[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-node-linux-s390x.tar.gz) | `83b6cf0fb348faa93fa40ec2a947b202b3a5a2081c3896ae39618f947a57b431bc774fbe3a5437719f50f002de252438dc16bac6f632c11140f55d5051094ae6`
-[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.14.0-alpha.1/kubernetes-node-windows-amd64.tar.gz) | `43471680533685c534023787cd40431b67041bab43e93dea457283ee0f08a8fa02ee9ade3737d8e64d1d3255a281af9a107cb61f9e4d9c99dee188c82a075580`
+[kubernetes-node-linux-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-node-linux-amd64.tar.gz) | `b4e9faadd0e03d3d89de496b5248547b159a7fe0c26319d898a448f3da80eb7d7d346494ca52634e89850fbb8b2db1f996bc8e7efca6cff1d26370a77b669967`
+[kubernetes-node-linux-arm.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-node-linux-arm.tar.gz) | `bf6db10d15a97ae39e2fcdf32c11c6cd8afcd254dc2fbc1fc00c5c74d6179f4ed74c973f221b0f41a29ad2e7d03e5fdebf1ab927ca2e2dea010e7519badf39a9`
+[kubernetes-node-linux-arm64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-node-linux-arm64.tar.gz) | `e89b95a23e36164b10510492841d7d140a9bd1799846f4ee1e8fbd74e8f6c512093a412edfb93bd68da10718ccdbe826f4b6ffa80e868461e7b7880c1cc44346`
+[kubernetes-node-linux-ppc64le.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-node-linux-ppc64le.tar.gz) | `47f47c8b7fafc7d6ed0e55308ccb2a3b289e174d763c4a6415b7f1b7d2b81e4ee090a4c361eadd7cb9dd774638d0f0ad45d271ab21cc230a1b8564f06d9edae8`
+[kubernetes-node-linux-s390x.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-node-linux-s390x.tar.gz) | `8a0af4be530008bc8f120cd82ec592d08b09a85a2a558c10d712ff44867c4ef3369b3e4e2f5a5d0c2fa375c337472b1b2e67b01ef3615eb174d36fbfd80ec2ff`
+[kubernetes-node-windows-amd64.tar.gz](https://dl.k8s.io/v1.15.0-alpha.1/kubernetes-node-windows-amd64.tar.gz) | `f48886bf8f965572b78baf9e02417a56fab31870124240cac02809615caa0bc9be214d182e041fc142240f83500fe69c063d807cbe5566e9d8b64854ca39104b`
-## Changelog since v1.13.0
+## Changelog since v1.14.0
### Action Required
-* action required ([#68753](https://github.com/kubernetes/kubernetes/pull/68753), [@johnSchnake](https://github.com/johnSchnake))
- * If you are running E2E tests which require SSH keys and you utilize environment variables to override their location, you may need to modify the environment variable set. On all providers the environment variable override can now be either an absolute path to the key or a relative path (relative to ~/.ssh). Specifically the changes are:
- * - Created new GCE_SSH_KEY allowing specification of SSH keys for gce, gke, and kubemark.
- * - AWS_SSH_KEY, previously assumed to be an absolute path can now be either relative or absolute
- * - LOCAL_SSH_KEY (for local and vsphere providers) was previously assumed to be a filename relative to ~/.ssh but can now also be an absolute path
- * - KUBE_SSH_KEY (for skeleton provider) was previously assumed to be a filename relative to ~/.ssh but can now also be an absolute path
+* client-go: The `rest.AnonymousClientConfig(*rest.Config) *rest.Config` helper method no longer copies custom `Transport` and `WrapTransport` fields, because those can be used to inject user credentials. ([#75771](https://github.com/kubernetes/kubernetes/pull/75771), [@liggitt](https://github.com/liggitt))
+* ACTION REQUIRED: The Node.Status.Volumes.Attached.DevicePath field is now unset for CSI volumes. Update any external controllers that depend on this field. ([#75799](https://github.com/kubernetes/kubernetes/pull/75799), [@msau42](https://github.com/msau42))
### Other notable changes
-* Connections from Pods to Services with 0 endpoints will now ICMP reject immediately, rather than blackhole and timeout. ([#72534](https://github.com/kubernetes/kubernetes/pull/72534), [@thockin](https://github.com/thockin))
-* Improve efficiency of preemption logic in clusters with many pending pods. ([#72895](https://github.com/kubernetes/kubernetes/pull/72895), [@bsalamat](https://github.com/bsalamat))
-* Change scheduler metrics to conform metrics guidelines. ([#72332](https://github.com/kubernetes/kubernetes/pull/72332), [@danielqsj](https://github.com/danielqsj))
- * The following metrics are deprecated, and will be removed in a future release:
- * `e2e_scheduling_latency_microseconds`
- * `scheduling_algorithm_latency_microseconds`
- * `scheduling_algorithm_predicate_evaluation`
- * `scheduling_algorithm_priority_evaluation`
- * `scheduling_algorithm_preemption_evaluation`
- * `binding_latency_microseconds`
- * Please convert to the following metrics:
- * `e2e_scheduling_latency_seconds`
- * `scheduling_algorithm_latency_seconds`
- * `scheduling_algorithm_predicate_evaluation_seconds`
- * `scheduling_algorithm_priority_evaluation_seconds`
- * `scheduling_algorithm_preemption_evaluation_seconds`
- * `binding_latency_seconds`
-* Fix SelectorSpreadPriority scheduler to match all selectors when distributing pods. ([#72801](https://github.com/kubernetes/kubernetes/pull/72801), [@Ramyak](https://github.com/Ramyak))
-* Add bootstrap service account & cluster roles for node-lifecycle-controller, cloud-node-lifecycle-controller, and cloud-node-controller. ([#72764](https://github.com/kubernetes/kubernetes/pull/72764), [@andrewsykim](https://github.com/andrewsykim))
-* Fixes spurious 0-length API responses. ([#72856](https://github.com/kubernetes/kubernetes/pull/72856), [@liggitt](https://github.com/liggitt))
-* Updates Fluentd to 1.3.2 & added filter_parser ([#71180](https://github.com/kubernetes/kubernetes/pull/71180), [@monotek](https://github.com/monotek))
-* The leaderelection package allows the lease holder to release its lease when the calling context is cancelled. This allows ([#71490](https://github.com/kubernetes/kubernetes/pull/71490), [@smarterclayton](https://github.com/smarterclayton))
- * faster handoff when a leader-elected process is gracefully terminated.
-* Make volume binder resilient to races between main schedule loop and async binding operation ([#72045](https://github.com/kubernetes/kubernetes/pull/72045), [@cofyc](https://github.com/cofyc))
-* Bump minimum docker API version to 1.26 (1.13.1) ([#72831](https://github.com/kubernetes/kubernetes/pull/72831), [@yujuhong](https://github.com/yujuhong))
-* If the `TokenRequestProjection` feature gate is disabled, projected serviceAccountToken volume sources are now dropped at object creation time, or at object update time if the existing object did not have a projected serviceAccountToken volume source. Previously, these would result in validation errors. ([#72714](https://github.com/kubernetes/kubernetes/pull/72714), [@mourya007](https://github.com/mourya007))
-* Add `metrics-port` to kube-proxy cmd flags. ([#72682](https://github.com/kubernetes/kubernetes/pull/72682), [@whypro](https://github.com/whypro))
-* kubectl: fixed an issue with "too old resource version" errors continuously appearing when calling `kubectl delete` ([#72825](https://github.com/kubernetes/kubernetes/pull/72825), [@liggitt](https://github.com/liggitt))
-* [Breaking change, client-go]: The WaitFor function returns, probably an ErrWaitTimeout, when the done channel is closed, even if the `WaitFunc` doesn't handle the done channel. ([#72364](https://github.com/kubernetes/kubernetes/pull/72364), [@kdada](https://github.com/kdada))
-* removes newline from json output for windows nodes [#72657](https://github.com/kubernetes/kubernetes/pull/72657) ([#72659](https://github.com/kubernetes/kubernetes/pull/72659), [@jsturtevant](https://github.com/jsturtevant))
-* The DenyEscalatingExec and DenyExecOnPrivileged admission plugins are deprecated and will be removed in v1.18. Use of `PodSecurityPolicy` or a custom admission plugin to limit creation of pods is recommended instead. ([#72737](https://github.com/kubernetes/kubernetes/pull/72737), [@liggitt](https://github.com/liggitt))
-* Fix `describe statefulset` not printing number of desired replicas correctly ([#72781](https://github.com/kubernetes/kubernetes/pull/72781), [@tghartland](https://github.com/tghartland))
-* Fix kube-proxy PodSecurityPolicy binding on GCE & GKE. This was only an issue when running kube-proxy as a DaemonSet, with PodSecurityPolicy enabled. ([#72761](https://github.com/kubernetes/kubernetes/pull/72761), [@tallclair](https://github.com/tallclair))
-* Drops `status.Conditions` of new `PersistentVolume` objects if it was not set on the old object during `PrepareForUpdate`. ([#72739](https://github.com/kubernetes/kubernetes/pull/72739), [@rajathagasthya](https://github.com/rajathagasthya))
-* kubelet: fixes cadvisor internal error when "--container-runtime-endpoint" is set to "unix:///var/run/crio/crio.sock". ([#72340](https://github.com/kubernetes/kubernetes/pull/72340), [@makocchi-git](https://github.com/makocchi-git))
-* The `spec.SecurityContext.Sysctls` field is now dropped during creation of `Pod` objects unless the `Sysctls` feature gate is enabled. ([#72752](https://github.com/kubernetes/kubernetes/pull/72752), [@rajathagasthya](https://github.com/rajathagasthya))
- * The `spec.AllowedUnsafeSysctls` and `spec.ForbiddenSysctls` fields are now dropped during creation of `PodSecurityPolicy` objects unless the `Sysctls` feature gate is enabled.
-* kubeadm: fixed storing of front-proxy certificate in secrets required by kube-controller-manager selfhosting pivoting ([#72727](https://github.com/kubernetes/kubernetes/pull/72727), [@bart0sh](https://github.com/bart0sh))
-* Administrator is able to configure max pids for a pod on a node. ([#72076](https://github.com/kubernetes/kubernetes/pull/72076), [@derekwaynecarr](https://github.com/derekwaynecarr))
-* Move users of `factory.NewConfigFactory` to `scheduler.New`. ([#71875](https://github.com/kubernetes/kubernetes/pull/71875), [@wgliang](https://github.com/wgliang))
-* The `spec.SecurityContext.ShareProcessNamespace` field is now dropped during creation of `Pod` objects unless the `PodShareProcessNamespace ` feature gate is enabled. ([#72698](https://github.com/kubernetes/kubernetes/pull/72698), [@rajathagasthya](https://github.com/rajathagasthya))
-* kube-apiserver: When configuring integration with external KMS Providers, users can supply timeout value (i.e. how long should kube-apiserver wait before giving up on a call to KMS). ([@immutableT](https://github.com/immutableT) ) ([#72540](https://github.com/kubernetes/kubernetes/pull/72540), [@immutableT](https://github.com/immutableT))
-* The `spec.readinessGates` field is now dropped during creation of `Pod` objects unless the `PodReadinessGates` feature gate is enabled. ([#72695](https://github.com/kubernetes/kubernetes/pull/72695), [@rajathagasthya](https://github.com/rajathagasthya))
-* The `spec.dataSource` field is now dropped during creation of PersistentVolumeClaim objects unless the `VolumeSnapshotDataSource` feature gate is enabled. ([#72666](https://github.com/kubernetes/kubernetes/pull/72666), [@rajathagasthya](https://github.com/rajathagasthya))
-* Stop kubelet logging a warning to override hostname if there's no change detected. ([#71560](https://github.com/kubernetes/kubernetes/pull/71560), [@KashifSaadat](https://github.com/KashifSaadat))
-* client-go: fake clients now properly return NotFound errors when attempting to patch non-existent objects ([#70886](https://github.com/kubernetes/kubernetes/pull/70886), [@bouk](https://github.com/bouk))
-* kubectl: fixes a bug determining the correct namespace while running in a pod when the `--context` flag is explicitly specified, and the referenced context specifies the namespace `default` ([#72529](https://github.com/kubernetes/kubernetes/pull/72529), [@liggitt](https://github.com/liggitt))
-* Fix scheduling starvation of pods in cluster with large number of unschedulable pods. ([#72619](https://github.com/kubernetes/kubernetes/pull/72619), [@everpeace](https://github.com/everpeace))
-* If the AppArmor feature gate is disabled, AppArmor-specific annotations in pod and pod templates are dropped when the object is created, and during update of objects that do not already contain AppArmor annotations, rather than triggering a validation error. ([#72655](https://github.com/kubernetes/kubernetes/pull/72655), [@liggitt](https://github.com/liggitt))
-* client-go: shortens refresh period for token files to 1 minute to ensure auto-rotated projected service account tokens are read frequently enough. ([#72437](https://github.com/kubernetes/kubernetes/pull/72437), [@liggitt](https://github.com/liggitt))
-* Multiple tests which previously failed due to lack of external IP addresses defined on the nodes should now be passable. ([#68792](https://github.com/kubernetes/kubernetes/pull/68792), [@johnSchnake](https://github.com/johnSchnake))
-* kubeadm: fixed incorrect controller manager pod mutations during selfhosting pivoting ([#72518](https://github.com/kubernetes/kubernetes/pull/72518), [@bart0sh](https://github.com/bart0sh))
-* Increase Azure default maximumLoadBalancerRuleCount to 250. ([#72621](https://github.com/kubernetes/kubernetes/pull/72621), [@feiskyer](https://github.com/feiskyer))
-* RuntimeClass is now printed with extra `RUNTIME-HANDLER` column. ([#72446](https://github.com/kubernetes/kubernetes/pull/72446), [@Huang-Wei](https://github.com/Huang-Wei))
-* Updates the kubernetes dashboard add-on to v1.10.1. Skipping dashboard login is no longer enabled by default. ([#72495](https://github.com/kubernetes/kubernetes/pull/72495), [@liggitt](https://github.com/liggitt))
-* [GCP] Remove confusing error log entry form fluentd scalers. ([#72243](https://github.com/kubernetes/kubernetes/pull/72243), [@cezarygerard](https://github.com/cezarygerard))
-* change azure disk host cache to ReadOnly by default ([#72229](https://github.com/kubernetes/kubernetes/pull/72229), [@andyzhangx](https://github.com/andyzhangx))
-* Nodes deleted in the cloud provider with Ready condition `Unknown` should also be deleted on the API server. ([#72559](https://github.com/kubernetes/kubernetes/pull/72559), [@andrewsykim](https://github.com/andrewsykim))
-* `kubectl apply --prune` now uses the apps/v1 API to prune workload resources ([#72352](https://github.com/kubernetes/kubernetes/pull/72352), [@liggitt](https://github.com/liggitt))
-* Fixes a bug in HPA controller so HPAs are always updated every resyncPeriod (15 seconds). ([#72373](https://github.com/kubernetes/kubernetes/pull/72373), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski))
-* IPVS: "ExternalTrafficPolicy: Local" now works with LoadBalancer services using loadBalancerIP ([#72432](https://github.com/kubernetes/kubernetes/pull/72432), [@lbernail](https://github.com/lbernail))
-* Fixes issue with cleaning up stale NFS subpath mounts ([#71804](https://github.com/kubernetes/kubernetes/pull/71804), [@msau42](https://github.com/msau42))
-* Modify the scheduling result struct and improve logging for successful binding. ([#71926](https://github.com/kubernetes/kubernetes/pull/71926), [@wgliang](https://github.com/wgliang))
-* Run one etcd storage compaction per default interval of 5min. Do not run one for each resource and each CRD. This fixes the compaction log spam and reduces load on etcd. ([#68557](https://github.com/kubernetes/kubernetes/pull/68557), [@sttts](https://github.com/sttts))
-* kube-apiserver: `--runtime-config` can once again be used to enable/disable serving specific resources in the `extensions/v1beta1` API group. Note that specific resource enablement/disablement is only allowed for the `extensions/v1beta1` API group for legacy reasons. Attempts to enable/disable individual resources in other API groups will print a warning, and will return an error in future releases. ([#72249](https://github.com/kubernetes/kubernetes/pull/72249), [@liggitt](https://github.com/liggitt))
-* kubeadm: fixed storing of etcd certificates in secrets required by kube-apiserver selfhosting pivoting ([#72478](https://github.com/kubernetes/kubernetes/pull/72478), [@bart0sh](https://github.com/bart0sh))
-* kubeadm: remove the deprecated "--address" flag for controller-manager and scheduler. ([#71973](https://github.com/kubernetes/kubernetes/pull/71973), [@MalloZup](https://github.com/MalloZup))
-* kube-apiserver: improves performance of requests made with service account token authentication ([#71816](https://github.com/kubernetes/kubernetes/pull/71816), [@liggitt](https://github.com/liggitt))
-* Use prometheus conventions for workqueue metrics. ([#71300](https://github.com/kubernetes/kubernetes/pull/71300), [@danielqsj](https://github.com/danielqsj))
- * It is now deprecated to use the following metrics:
- * `{WorkQueueName}_depth`
- * `{WorkQueueName}_adds`
- * `{WorkQueueName}_queue_latency`
- * `{WorkQueueName}_work_duration`
- * `{WorkQueueName}_unfinished_work_seconds`
- * `{WorkQueueName}_longest_running_processor_microseconds`
- * `{WorkQueueName}_retries`
- * Please convert to the following metrics:
- * `workqueue_depth`
- * `workqueue_adds_total`
- * `workqueue_queue_latency_seconds`
- * `workqueue_work_duration_seconds`
- * `workqueue_unfinished_work_seconds`
- * `workqueue_longest_running_processor_seconds`
- * `workqueue_retries_total`
-* Fix inability to use k8s with dockerd having default IPC mode set to private. ([#70826](https://github.com/kubernetes/kubernetes/pull/70826), [@kolyshkin](https://github.com/kolyshkin))
-* Fix a race condition in the scheduler preemption logic that could cause nominatedNodeName of a pod not to be considered in one or more scheduling cycles. ([#72259](https://github.com/kubernetes/kubernetes/pull/72259), [@bsalamat](https://github.com/bsalamat))
-* Fix registration for scheduling framework plugins with the default plugin set ([#72396](https://github.com/kubernetes/kubernetes/pull/72396), [@y-taka-23](https://github.com/y-taka-23))
-* The GA VolumeScheduling feature gate can no longer be disabled and will be removed in a future release ([#72382](https://github.com/kubernetes/kubernetes/pull/72382), [@liggitt](https://github.com/liggitt))
-* Fix race condition introduced by graceful termination which can lead to a deadlock in kube-proxy ([#72361](https://github.com/kubernetes/kubernetes/pull/72361), [@lbernail](https://github.com/lbernail))
-* Fixes issue where subpath volume content was deleted during orphaned pod cleanup for Local volumes that are directories (and not mount points) on the root filesystem. ([#72291](https://github.com/kubernetes/kubernetes/pull/72291), [@msau42](https://github.com/msau42))
-* Fixes `kubectl create secret docker-registry` compatibility ([#72344](https://github.com/kubernetes/kubernetes/pull/72344), [@liggitt](https://github.com/liggitt))
-* Add-on manifests now use the apps/v1 API for DaemonSets, Deployments, and ReplicaSets ([#72203](https://github.com/kubernetes/kubernetes/pull/72203), [@liggitt](https://github.com/liggitt))
-* "kubectl wait" command now supports the "--all" flag to select all resources in the namespace of the specified resource types. ([#70599](https://github.com/kubernetes/kubernetes/pull/70599), [@caesarxuchao](https://github.com/caesarxuchao))
-* `deployments/rollback` is now passed through validation/admission controllers ([#72271](https://github.com/kubernetes/kubernetes/pull/72271), [@jhrv](https://github.com/jhrv))
-* The `Lease` API type in the `coordination.k8s.io` API group is promoted to `v1` ([#72239](https://github.com/kubernetes/kubernetes/pull/72239), [@wojtek-t](https://github.com/wojtek-t))
-* Move compatibility_test.go to pkg/scheduler/api ([#72014](https://github.com/kubernetes/kubernetes/pull/72014), [@huynq0911](https://github.com/huynq0911))
-* New Azure cloud provider option 'cloudProviderBackoffMode' has been added to reduce Azure API retries. Candidate values are: ([#70866](https://github.com/kubernetes/kubernetes/pull/70866), [@feiskyer](https://github.com/feiskyer))
- * default (or empty string): keep same with before.
- * v2: only backoff retry with Azure SDK with fixed exponent 2.
-* Set percentage of nodes scored in each cycle dynamically based on the cluster size. ([#72140](https://github.com/kubernetes/kubernetes/pull/72140), [@wgliang](https://github.com/wgliang))
-* Fix AAD support for Azure sovereign cloud in kubectl ([#72143](https://github.com/kubernetes/kubernetes/pull/72143), [@karataliu](https://github.com/karataliu))
-* Make kube-proxy service abstraction optional. ([#71355](https://github.com/kubernetes/kubernetes/pull/71355), [@bradhoekstra](https://github.com/bradhoekstra))
- * Add the 'service.kubernetes.io/service-proxy-name' label to a Service to disable the kube-proxy service proxy implementation.
-* kubectl: `-A` can now be used as a shortcut for `--all-namespaces` ([#72006](https://github.com/kubernetes/kubernetes/pull/72006), [@soltysh](https://github.com/soltysh))
-* discovery.CachedDiscoveryInterface implementation returned by NewMemCacheClient has changed semantics of Invalidate method -- the cache refresh is now deferred to the first cache lookup. ([#70994](https://github.com/kubernetes/kubernetes/pull/70994), [@mborsz](https://github.com/mborsz))
-* Fix device mountable volume names in DSW to prevent races in device mountable plugin, e.g. local. ([#71509](https://github.com/kubernetes/kubernetes/pull/71509), [@cofyc](https://github.com/cofyc))
-* Enable customize in kubectl: kubectl will be able to recognize directories with kustomization.YAML ([#70875](https://github.com/kubernetes/kubernetes/pull/70875), [@Liujingfang1](https://github.com/Liujingfang1))
-* Stably sort controllerrevisions. This can prevent pods of statefulsets from continually rolling. ([#66882](https://github.com/kubernetes/kubernetes/pull/66882), [@ryanmcnamara](https://github.com/ryanmcnamara))
-* Update to use go1.11.4. ([#72084](https://github.com/kubernetes/kubernetes/pull/72084), [@ixdy](https://github.com/ixdy))
-* fixes an issue deleting pods containing subpath volume mounts with the VolumeSubpath feature disabled ([#70490](https://github.com/kubernetes/kubernetes/pull/70490), [@liggitt](https://github.com/liggitt))
-* Clean up old eclass code ([#71399](https://github.com/kubernetes/kubernetes/pull/71399), [@resouer](https://github.com/resouer))
-* Fix a race condition in which kubeadm only waits for the kubelets kubeconfig file when it has performed the TLS bootstrap, but wasn't waiting for certificates to be present in the filesystem ([#72030](https://github.com/kubernetes/kubernetes/pull/72030), [@ereslibre](https://github.com/ereslibre))
-* In addition to restricting GCE metadata requests to known APIs, the metadata-proxy now restricts query strings to known parameters. ([#71094](https://github.com/kubernetes/kubernetes/pull/71094), [@dekkagaijin](https://github.com/dekkagaijin))
-* kubeadm: fix a possible panic when joining a new control plane node in HA scenarios ([#72123](https://github.com/kubernetes/kubernetes/pull/72123), [@anitgandhi](https://github.com/anitgandhi))
-* fix race condition when attach azure disk in vmss ([#71992](https://github.com/kubernetes/kubernetes/pull/71992), [@andyzhangx](https://github.com/andyzhangx))
-* Update to use go1.11.3 with fix for CVE-2018-16875 ([#72035](https://github.com/kubernetes/kubernetes/pull/72035), [@seemethere](https://github.com/seemethere))
-* kubeadm: fix a bug when syncing etcd endpoints ([#71945](https://github.com/kubernetes/kubernetes/pull/71945), [@pytimer](https://github.com/pytimer))
-* fix kubelet log flushing issue in azure disk ([#71990](https://github.com/kubernetes/kubernetes/pull/71990), [@andyzhangx](https://github.com/andyzhangx))
-* Disable proxy to loopback and linklocal ([#71980](https://github.com/kubernetes/kubernetes/pull/71980), [@micahhausler](https://github.com/micahhausler))
-* Fix overlapping filenames in diff if multiple resources have the same name. ([#71923](https://github.com/kubernetes/kubernetes/pull/71923), [@apelisse](https://github.com/apelisse))
-* fix issue: vm sku restriction policy does not work in azure disk attach/detach ([#71941](https://github.com/kubernetes/kubernetes/pull/71941), [@andyzhangx](https://github.com/andyzhangx))
-* kubeadm: Create /var/lib/etcd with correct permissions (0700) by default. ([#71885](https://github.com/kubernetes/kubernetes/pull/71885), [@dims](https://github.com/dims))
-* Scheduler only activates unschedulable pods if node's scheduling related properties change. ([#71551](https://github.com/kubernetes/kubernetes/pull/71551), [@mlmhl](https://github.com/mlmhl))
-* kube-proxy in IPVS mode will stop initiating connections to terminating pods for services with sessionAffinity set. ([#71834](https://github.com/kubernetes/kubernetes/pull/71834), [@lbernail](https://github.com/lbernail))
-* kubeadm: improve hostport parsing error messages ([#71258](https://github.com/kubernetes/kubernetes/pull/71258), [@bart0sh](https://github.com/bart0sh))
-* Support graceful termination with IPVS when deleting a service ([#71895](https://github.com/kubernetes/kubernetes/pull/71895), [@lbernail](https://github.com/lbernail))
-* Include CRD for BGPConfigurations, needed for calico 2.x to 3.x upgrade. ([#71868](https://github.com/kubernetes/kubernetes/pull/71868), [@satyasm](https://github.com/satyasm))
-* apply: fix detection of non-dry-run enabled servers ([#71854](https://github.com/kubernetes/kubernetes/pull/71854), [@apelisse](https://github.com/apelisse))
-* Clear UDP conntrack entry on endpoint changes when using nodeport ([#71573](https://github.com/kubernetes/kubernetes/pull/71573), [@JacobTanenbaum](https://github.com/JacobTanenbaum))
-* Add successful and failed history limits to cronjob describe ([#71844](https://github.com/kubernetes/kubernetes/pull/71844), [@soltysh](https://github.com/soltysh))
-* kube-controller-manager: fixed issue display help for the deprecated insecure --port flag ([#71601](https://github.com/kubernetes/kubernetes/pull/71601), [@liggitt](https://github.com/liggitt))
-* kubectl: fixes regression in --sort-by behavior ([#71805](https://github.com/kubernetes/kubernetes/pull/71805), [@liggitt](https://github.com/liggitt))
-* Fixes pod deletion when cleaning old cronjobs ([#71801](https://github.com/kubernetes/kubernetes/pull/71801), [@soltysh](https://github.com/soltysh))
-* kubeadm: use kubeconfig flag instead of kubeconfig-dir on init phase bootstrap-token ([#71803](https://github.com/kubernetes/kubernetes/pull/71803), [@yagonobre](https://github.com/yagonobre))
-* kube-scheduler: restores ability to run without authentication configuration lookup permissions ([#71755](https://github.com/kubernetes/kubernetes/pull/71755), [@liggitt](https://github.com/liggitt))
-* Add aggregator_unavailable_apiservice_{count,gauge} metrics in the kube-aggregator. ([#71380](https://github.com/kubernetes/kubernetes/pull/71380), [@sttts](https://github.com/sttts))
-* Fixes apiserver nil pointer panics when requesting v2beta1 autoscaling object metrics ([#71744](https://github.com/kubernetes/kubernetes/pull/71744), [@yue9944882](https://github.com/yue9944882))
-* Only use the first IP address got from instance metadata. This is because Azure CNI would set up a list of IP addresses in instance metadata, while only the first one is the Node's IP. ([#71736](https://github.com/kubernetes/kubernetes/pull/71736), [@feiskyer](https://github.com/feiskyer))
-* client-go: restores behavior of populating the BearerToken field in rest.Config objects constructed from kubeconfig files containing tokenFile config, or from in-cluster configuration. An additional BearerTokenFile field is now populated to enable constructed clients to periodically refresh tokens. ([#71713](https://github.com/kubernetes/kubernetes/pull/71713), [@liggitt](https://github.com/liggitt))
-* kubeadm: remove deprecated kubeadm config print-defaults command ([#71467](https://github.com/kubernetes/kubernetes/pull/71467), [@rosti](https://github.com/rosti))
-* hack/local-up-cluster.sh now enables kubelet authentication/authorization by default (they can be disabled with KUBELET_AUTHENTICATION_WEBHOOK=false and KUBELET_AUTHORIZATION_WEBHOOK=false ([#71690](https://github.com/kubernetes/kubernetes/pull/71690), [@liggitt](https://github.com/liggitt))
-* Fixes an issue where Azure VMSS instances not existing in Azure were not being deleted by the Cloud Controller Manager. ([#71597](https://github.com/kubernetes/kubernetes/pull/71597), [@marc-sensenich](https://github.com/marc-sensenich))
-* kubeadm reset correcty unmounts mount points inside /var/lib/kubelet ([#71663](https://github.com/kubernetes/kubernetes/pull/71663), [@bart0sh](https://github.com/bart0sh))
-* Upgrade default etcd server to 3.3.10 ([#71615](https://github.com/kubernetes/kubernetes/pull/71615), [@jpbetz](https://github.com/jpbetz))
-* When creating a service with annotation: service.beta.kubernetes.io/load-balancer-source-ranges containing multiple source ranges and service.beta.kubernetes.io/azure-shared-securityrule: "false", the NSG rules will be collapsed. ([#71484](https://github.com/kubernetes/kubernetes/pull/71484), [@ritazh](https://github.com/ritazh))
-* disable node's proxy use of http probe ([#68663](https://github.com/kubernetes/kubernetes/pull/68663), [@WanLinghao](https://github.com/WanLinghao))
-* Bumps version of kubernetes-cni to 0.6.0 ([#71629](https://github.com/kubernetes/kubernetes/pull/71629), [@mauilion](https://github.com/mauilion))
-* On GCI, NPD starts to monitor kubelet, docker, containerd crashlooping, read-only filesystem and corrupt docker overlay2 issues. ([#71522](https://github.com/kubernetes/kubernetes/pull/71522), [@wangzhen127](https://github.com/wangzhen127))
-* When a kubelet is using --bootstrap-kubeconfig and certificate rotation, it no longer waits for bootstrap to succeed before launching static pods. ([#71174](https://github.com/kubernetes/kubernetes/pull/71174), [@smarterclayton](https://github.com/smarterclayton))
-* Add an plugin interfaces for "reserve" and "prebind" extension points of the scheduling framework. ([#70227](https://github.com/kubernetes/kubernetes/pull/70227), [@bsalamat](https://github.com/bsalamat))
-* Fix scheduling starvation of pods in cluster with large number of unschedulable pods. ([#71488](https://github.com/kubernetes/kubernetes/pull/71488), [@bsalamat](https://github.com/bsalamat))
-* Reduce CSI log and event spam. ([#71581](https://github.com/kubernetes/kubernetes/pull/71581), [@saad-ali](https://github.com/saad-ali))
-* Add conntrack as a dependency of kubelet and kubeadm when building rpms and debs. Both require conntrack to handle cleanup of connections. ([#71540](https://github.com/kubernetes/kubernetes/pull/71540), [@mauilion](https://github.com/mauilion))
-* UDP connections now support graceful termination in IPVS mode ([#71515](https://github.com/kubernetes/kubernetes/pull/71515), [@lbernail](https://github.com/lbernail))
-* Log etcd client errors. The verbosity is set with the usual `-v` flag. ([#71318](https://github.com/kubernetes/kubernetes/pull/71318), [@sttts](https://github.com/sttts))
-* The `DefaultFeatureGate` package variable now only exposes readonly feature gate methods. Methods for mutating feature gates have moved into a `MutableFeatureGate` interface and are accessible via the `DefaultMutableFeatureGate` package variable. Only top-level commands and options setup should access `DefaultMutableFeatureGate`. ([#71302](https://github.com/kubernetes/kubernetes/pull/71302), [@liggitt](https://github.com/liggitt))
-* `node.kubernetes.io/pid-pressure` toleration is added for DaemonSet pods, and `node.kubernetes.io/out-of-disk` isn't added any more even if it's a critical pod. ([#67036](https://github.com/kubernetes/kubernetes/pull/67036), [@Huang-Wei](https://github.com/Huang-Wei))
-* Update k8s.io/utils to allow for asynchronous process control ([#71047](https://github.com/kubernetes/kubernetes/pull/71047), [@hoegaarden](https://github.com/hoegaarden))
-* Fixes possible panic during volume detach, if corresponding volume plugin became non-attachable ([#71471](https://github.com/kubernetes/kubernetes/pull/71471), [@mshaverdo](https://github.com/mshaverdo))
-* Fix cloud-controller-manager crash when using AWS provider and PersistentVolume initializing controller ([#70432](https://github.com/kubernetes/kubernetes/pull/70432), [@mvladev](https://github.com/mvladev))
-* Fixes an issue where Portworx volumes cannot be mounted if 9001 port is already in use on the host and users remap 9001 to another port. ([#70392](https://github.com/kubernetes/kubernetes/pull/70392), [@harsh-px](https://github.com/harsh-px))
-* Fix `SubPath` printing of `VolumeMounts`. ([#70127](https://github.com/kubernetes/kubernetes/pull/70127), [@dtaniwaki](https://github.com/dtaniwaki))
-* Fixes incorrect paths (missing first letter) when copying files from pods to ([#69885](https://github.com/kubernetes/kubernetes/pull/69885), [@clickyotomy](https://github.com/clickyotomy))
- * local in `kubectl cp'.
-* Fix AWS NLB security group updates where valid security group ports were incorrectly removed ([#68422](https://github.com/kubernetes/kubernetes/pull/68422), [@kellycampbell](https://github.com/kellycampbell))
- * when updating a service or when node changes occur.
+* Remove the function Parallelize, please convert to use the function ParallelizeUntil. ([#76595](https://github.com/kubernetes/kubernetes/pull/76595), [@danielqsj](https://github.com/danielqsj))
+* StorageObjectInUseProtection admission plugin is additionally enabled by default. ([#74610](https://github.com/kubernetes/kubernetes/pull/74610), [@oomichi](https://github.com/oomichi))
+ * So default enabled admission plugins are now `NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,StorageObjectInUseProtection`. Please note that if you previously had not set the `--admission-control` flag, your cluster behavior may change (to be more standard).
+* Juju provider source moved to the Charmed Kubernetes org ([#76628](https://github.com/kubernetes/kubernetes/pull/76628), [@kwmonroe](https://github.com/kwmonroe))
+* improve `kubectl auth can-i` command by warning users when they try access resource out of scope ([#76014](https://github.com/kubernetes/kubernetes/pull/76014), [@WanLinghao](https://github.com/WanLinghao))
+* Introduce API for watch bookmark events. ([#74074](https://github.com/kubernetes/kubernetes/pull/74074), [@wojtek-t](https://github.com/wojtek-t))
+ * Introduce Alpha field `AllowWatchBookmarks` in ListOptions for requesting watch bookmarks from apiserver. The implementation in apiserver is hidden behind feature gate `WatchBookmark` (currently in Alpha stage).
+* Override protocol between etcd server and kube-apiserver on master with HTTPS instead HTTP when mTLS is enabled in GCE ([#74690](https://github.com/kubernetes/kubernetes/pull/74690), [@wenjiaswe](https://github.com/wenjiaswe))
+* Fix issue in Portworx volume driver causing controller manager to crash ([#76341](https://github.com/kubernetes/kubernetes/pull/76341), [@harsh-px](https://github.com/harsh-px))
+* kubeadm: Fix a bug where if couple of CRIs are installed a user override of the CRI during join (via kubeadm join --cri-socket ...) is ignored and kubeadm bails out with an error ([#76505](https://github.com/kubernetes/kubernetes/pull/76505), [@rosti](https://github.com/rosti))
+* UpdateContainerResources is no longer recorded as a `container_status` operation. It now uses the label `update_container` ([#75278](https://github.com/kubernetes/kubernetes/pull/75278), [@Nessex](https://github.com/Nessex))
+* Bump metrics-server to v0.3.2 ([#76437](https://github.com/kubernetes/kubernetes/pull/76437), [@brett-elliott](https://github.com/brett-elliott))
+* The kubelet's /spec endpoint no longer provides cloud provider information (cloud_provider, instance_type, instance_id). ([#76291](https://github.com/kubernetes/kubernetes/pull/76291), [@dims](https://github.com/dims))
+* Change kubelet probe metrics to counter type. ([#76074](https://github.com/kubernetes/kubernetes/pull/76074), [@danielqsj](https://github.com/danielqsj))
+ * The metrics `prober_probe_result` is replaced by `prober_probe_total`.
+* Reduce GCE log rotation check from 1 hour to every 5 minutes. Rotation policy is unchanged (new day starts, log file size > 100MB). ([#76352](https://github.com/kubernetes/kubernetes/pull/76352), [@jpbetz](https://github.com/jpbetz))
+* Add ListPager.EachListItem utility function to client-go to enable incremental processing of chunked list responses ([#75849](https://github.com/kubernetes/kubernetes/pull/75849), [@jpbetz](https://github.com/jpbetz))
+* Added `CNI_VERSION` and `CNI_SHA1` environment variables in kube-up.sh to configure CNI versions on GCE. ([#76353](https://github.com/kubernetes/kubernetes/pull/76353), [@Random-Liu](https://github.com/Random-Liu))
+* Update cri-tools to v1.14.0 ([#75658](https://github.com/kubernetes/kubernetes/pull/75658), [@feiskyer](https://github.com/feiskyer))
+* 2X performance improvement on both required and preferred PodAffinity. ([#76243](https://github.com/kubernetes/kubernetes/pull/76243), [@Huang-Wei](https://github.com/Huang-Wei))
+* scheduler: add metrics to record number of pending pods in different queues ([#75501](https://github.com/kubernetes/kubernetes/pull/75501), [@Huang-Wei](https://github.com/Huang-Wei))
+* Create a new `kubectl rollout restart` command that does a rolling restart of a deployment. ([#76062](https://github.com/kubernetes/kubernetes/pull/76062), [@apelisse](https://github.com/apelisse))
+* - Added port configuration to Admission webhook configuration service reference. ([#74855](https://github.com/kubernetes/kubernetes/pull/74855), [@mbohlool](https://github.com/mbohlool))
+ * - Added port configuration to AuditSink webhook configuration service reference.
+ * - Added port configuration to CRD Conversion webhook configuration service reference.
+ * - Added port configuration to kube-aggregator service reference.
+* `kubectl get -w` now prints custom resource definitions with custom print columns ([#76161](https://github.com/kubernetes/kubernetes/pull/76161), [@liggitt](https://github.com/liggitt))
+* Fixes bug in DaemonSetController causing it to stop processing some DaemonSets for 5 minutes after node removal. ([#76060](https://github.com/kubernetes/kubernetes/pull/76060), [@krzysztof-jastrzebski](https://github.com/krzysztof-jastrzebski))
+* no ([#75820](https://github.com/kubernetes/kubernetes/pull/75820), [@YoubingLi](https://github.com/YoubingLi))
+* Use stdlib to log stack trace when a panic occurs ([#75853](https://github.com/kubernetes/kubernetes/pull/75853), [@roycaihw](https://github.com/roycaihw))
+* Fixes a NPD bug on GCI, so that it disables glog writing to files for log-counter ([#76211](https://github.com/kubernetes/kubernetes/pull/76211), [@wangzhen127](https://github.com/wangzhen127))
+* Tolerations with the same key and effect will be merged into one which has the value of the latest toleration for best effort pods. ([#75985](https://github.com/kubernetes/kubernetes/pull/75985), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla))
+* Fix empty array expansion error in cluster/gce/util.sh ([#76111](https://github.com/kubernetes/kubernetes/pull/76111), [@kewu1992](https://github.com/kewu1992))
+* kube-proxy no longer automatically cleans up network rules created by running kube-proxy in other modes. If you are switching the mode that kube-proxy is in running in (EG: iptables to IPVS), you will need to run `kube-proxy --cleanup`, or restart the worker node (recommended) before restarting kube-proxy. ([#76109](https://github.com/kubernetes/kubernetes/pull/76109), [@vllry](https://github.com/vllry))
+ * If you are not switching kube-proxy between different modes, this change should not require any action.
+* Adds a new "storage_operation_status_count" metric for kube-controller-manager and kubelet to count success and error statues. ([#75750](https://github.com/kubernetes/kubernetes/pull/75750), [@msau42](https://github.com/msau42))
+* GCE/Windows: disable stackdriver logging agent to prevent node startup failures ([#76099](https://github.com/kubernetes/kubernetes/pull/76099), [@yujuhong](https://github.com/yujuhong))
+* StatefulSet controllers no longer force a resync every 30 seconds when nothing has changed. ([#75622](https://github.com/kubernetes/kubernetes/pull/75622), [@jonsabo](https://github.com/jonsabo))
+* Ensures the conformance test image saves results before exiting when ginkgo returns non-zero value. ([#76039](https://github.com/kubernetes/kubernetes/pull/76039), [@johnSchnake](https://github.com/johnSchnake))
+* Add --image-repository flag to "kubeadm config images". ([#75866](https://github.com/kubernetes/kubernetes/pull/75866), [@jmkeyes](https://github.com/jmkeyes))
+* Paginate requests from the kube-apiserver watch cache to etcd in chunks. ([#75389](https://github.com/kubernetes/kubernetes/pull/75389), [@jpbetz](https://github.com/jpbetz))
+ * Paginate reflector init and resync List calls that are not served by watch cache.
+* `k8s.io/kubernetes` and published components (like `k8s.io/client-go` and `k8s.io/api`) now publish go module files containing dependency version information. See http://git.k8s.io/client-go/INSTALL.md#go-modules for details on consuming `k8s.io/client-go` using go modules. ([#74877](https://github.com/kubernetes/kubernetes/pull/74877), [@liggitt](https://github.com/liggitt))
+* give users the option to suppress detailed output in integration test ([#76063](https://github.com/kubernetes/kubernetes/pull/76063), [@Huang-Wei](https://github.com/Huang-Wei))
+* CSI alpha CRDs have been removed ([#75747](https://github.com/kubernetes/kubernetes/pull/75747), [@msau42](https://github.com/msau42))
+* Fixes a regression proxying responses from aggregated API servers which could cause watch requests to hang until the first event was received ([#75887](https://github.com/kubernetes/kubernetes/pull/75887), [@liggitt](https://github.com/liggitt))
+* Support specify the Resource Group of Route Table when update Pod network route (Azure) ([#75580](https://github.com/kubernetes/kubernetes/pull/75580), [@suker200](https://github.com/suker200))
+* Support parsing more v1.Taint forms. `key:effect`, `key=:effect-` are now accepted. ([#74159](https://github.com/kubernetes/kubernetes/pull/74159), [@dlipovetsky](https://github.com/dlipovetsky))
+* Resource list requests for PartialObjectMetadata now correctly return list metadata like the resourceVersion and the continue token. ([#75971](https://github.com/kubernetes/kubernetes/pull/75971), [@smarterclayton](https://github.com/smarterclayton))
+* `StubDomains` and `Upstreamnameserver` which contains a service name will be omitted while translating to the equivalent CoreDNS config. ([#75969](https://github.com/kubernetes/kubernetes/pull/75969), [@rajansandeep](https://github.com/rajansandeep))
+* Count PVCs that are unbound towards attach limit ([#73863](https://github.com/kubernetes/kubernetes/pull/73863), [@gnufied](https://github.com/gnufied))
+* Increased verbose level for local openapi aggregation logs to avoid flooding the log during normal operation ([#75781](https://github.com/kubernetes/kubernetes/pull/75781), [@roycaihw](https://github.com/roycaihw))
+* In the 'kubectl describe' output, the fields with names containing special characters are displayed as-is without any pretty formatting. ([#75483](https://github.com/kubernetes/kubernetes/pull/75483), [@gsadhani](https://github.com/gsadhani))
+* Support both JSON and YAML for scheduler configuration. ([#75857](https://github.com/kubernetes/kubernetes/pull/75857), [@danielqsj](https://github.com/danielqsj))
+* kubeadm: fix "upgrade plan" not defaulting to a "stable" version if no version argument is passed ([#75900](https://github.com/kubernetes/kubernetes/pull/75900), [@neolit123](https://github.com/neolit123))
+* clean up func podTimestamp in queue ([#75754](https://github.com/kubernetes/kubernetes/pull/75754), [@denkensk](https://github.com/denkensk))
+* The AWS credential provider can now obtain ECR credentials even without the AWS cloud provider or being on an EC2 instance. Additionally, AWS credential provider caching has been improved to honor the ECR credential timeout. ([#75587](https://github.com/kubernetes/kubernetes/pull/75587), [@tiffanyfay](https://github.com/tiffanyfay))
+* Add completed job status in Cronjob event. ([#75712](https://github.com/kubernetes/kubernetes/pull/75712), [@danielqsj](https://github.com/danielqsj))
+* kubeadm: implement deletion of multiple bootstrap tokens at once ([#75646](https://github.com/kubernetes/kubernetes/pull/75646), [@bart0sh](https://github.com/bart0sh))
+* GCE Windows nodes will rely solely on kubernetes and kube-proxy (and not the GCE agent) for network address management. ([#75855](https://github.com/kubernetes/kubernetes/pull/75855), [@pjh](https://github.com/pjh))
+* kubeadm: preflight checks on external etcd certificates are now skipped when joining a control-plane node with automatic copy of cluster certificates (--certificate-key) ([#75847](https://github.com/kubernetes/kubernetes/pull/75847), [@fabriziopandini](https://github.com/fabriziopandini))
+* [stackdriver addon] Bump prometheus-to-sd to v0.5.0 to pick up security fixes. ([#75362](https://github.com/kubernetes/kubernetes/pull/75362), [@serathius](https://github.com/serathius))
+ * [fluentd-gcp addon] Bump fluentd-gcp-scaler to v0.5.1 to pick up security fixes.
+ * [fluentd-gcp addon] Bump event-exporter to v0.2.4 to pick up security fixes.
+ * [fluentd-gcp addon] Bump prometheus-to-sd to v0.5.0 to pick up security fixes.
+ * [metatada-proxy addon] Bump prometheus-to-sd v0.5.0 to pick up security fixes.
+* Support describe pod with inline csi volumes ([#75513](https://github.com/kubernetes/kubernetes/pull/75513), [@cwdsuzhou](https://github.com/cwdsuzhou))
+* Object count quota is now supported for namespaced custom resources using the count/. syntax. ([#72384](https://github.com/kubernetes/kubernetes/pull/72384), [@zhouhaibing089](https://github.com/zhouhaibing089))
+* In case kubeadm can't access the current Kubernetes version remotely and fails to parse ([#72454](https://github.com/kubernetes/kubernetes/pull/72454), [@rojkov](https://github.com/rojkov))
+ * the git-based version it falls back to a static predefined value of
+ * k8s.io/kubernetes/cmd/kubeadm/app/constants.CurrentKubernetesVersion.
+* Fixed a potential deadlock in resource quota controller ([#74747](https://github.com/kubernetes/kubernetes/pull/74747), [@liggitt](https://github.com/liggitt))
+ * Enabled recording partial usage info for quota objects specifying multiple resources, when only some of the resources' usage can be determined.
+* CRI API will now be available in the kubernetes/cri-api repository ([#75531](https://github.com/kubernetes/kubernetes/pull/75531), [@dims](https://github.com/dims))
+* Support vSphere SAML token auth when using Zones ([#75515](https://github.com/kubernetes/kubernetes/pull/75515), [@dougm](https://github.com/dougm))
+* Transition service account controller clients to TokenRequest API ([#72179](https://github.com/kubernetes/kubernetes/pull/72179), [@WanLinghao](https://github.com/WanLinghao))
+* kubeadm: reimplemented IPVS Proxy check that produced confusing warning message. ([#75036](https://github.com/kubernetes/kubernetes/pull/75036), [@bart0sh](https://github.com/bart0sh))
+* Allow to read OpenStack user credentials from a secret instead of a local config file. ([#75062](https://github.com/kubernetes/kubernetes/pull/75062), [@Fedosin](https://github.com/Fedosin))
+* watch can now be enabled for events using the flag --watch-cache-sizes on kube-apiserver ([#74321](https://github.com/kubernetes/kubernetes/pull/74321), [@yastij](https://github.com/yastij))
+* kubeadm: Support for deprecated old kubeadm v1alpha3 config is totally removed. ([#75179](https://github.com/kubernetes/kubernetes/pull/75179), [@rosti](https://github.com/rosti))
+* The Kubelet now properly requests protobuf objects where they are ([#75602](https://github.com/kubernetes/kubernetes/pull/75602), [@smarterclayton](https://github.com/smarterclayton))
+ * supported from the apiserver, reducing load in large clusters.
+* Add name validation for dynamic client methods in client-go ([#75072](https://github.com/kubernetes/kubernetes/pull/75072), [@lblackstone](https://github.com/lblackstone))
+* Users may now execute `get-kube-binaries.sh` to request a client for an OS/Arch unlike the one of the host on which the script is invoked. ([#74889](https://github.com/kubernetes/kubernetes/pull/74889), [@akutz](https://github.com/akutz))
+* Move config local to controllers in kube-controller-manager ([#72800](https://github.com/kubernetes/kubernetes/pull/72800), [@stewart-yu](https://github.com/stewart-yu))
+* Fix some potential deadlocks and file descriptor leaking for inotify watches. ([#75376](https://github.com/kubernetes/kubernetes/pull/75376), [@cpuguy83](https://github.com/cpuguy83))
+* [IPVS] Introduces flag ipvs-strict-arp to configure stricter ARP sysctls, defaulting to false to preserve existing behaviors. This was enabled by default in 1.13.0, which impacted a few CNI plugins. ([#75295](https://github.com/kubernetes/kubernetes/pull/75295), [@lbernail](https://github.com/lbernail))
+* [IPVS] Allow for transparent kube-proxy restarts ([#75283](https://github.com/kubernetes/kubernetes/pull/75283), [@lbernail](https://github.com/lbernail))
+* Replace *_admission_latencies_milliseconds_summary and *_admission_latencies_milliseconds metrics due to reporting wrong unit (was labelled milliseconds, but reported seconds), and multiple naming guideline violations (units should be in base units and "duration" is the best practice labelling to measure the time a request takes). Please convert to use *_admission_duration_seconds and *_admission_duration_seconds_summary, these now report the unit as described, and follow the instrumentation best practices. ([#75279](https://github.com/kubernetes/kubernetes/pull/75279), [@danielqsj](https://github.com/danielqsj))
+* Reset exponential backoff when storage operation changes ([#75213](https://github.com/kubernetes/kubernetes/pull/75213), [@gnufied](https://github.com/gnufied))
+* Watch will now support converting response objects into Table or PartialObjectMetadata forms. ([#71548](https://github.com/kubernetes/kubernetes/pull/71548), [@smarterclayton](https://github.com/smarterclayton))
+* N/A ([#74974](https://github.com/kubernetes/kubernetes/pull/74974), [@goodluckbot](https://github.com/goodluckbot))
+* kubeadm: fix the machine readability of "kubeadm token create --print-join-command" ([#75487](https://github.com/kubernetes/kubernetes/pull/75487), [@displague](https://github.com/displague))
+* Update Cluster Autoscaler to 1.14.0; changelog: https://github.com/kubernetes/autoscaler/releases/tag/cluster-autoscaler-1.14.0 ([#75480](https://github.com/kubernetes/kubernetes/pull/75480), [@losipiuk](https://github.com/losipiuk))
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 0335c0978c..56cea2a220 100644
--- a/content/en/docs/tasks/access-application-cluster/ingress-minikube.md
+++ b/content/en/docs/tasks/access-application-cluster/ingress-minikube.md
@@ -135,7 +135,7 @@ The following file is an Ingress resource that sends traffic to your Service via
1. Create `example-ingress.yaml` from the following file:
- apiVersion: extensions/v1beta1
+ apiVersion: networking.k8s.io/v1beta1 # for versions before 1.14 use extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress
@@ -160,7 +160,7 @@ The following file is an Ingress resource that sends traffic to your Service via
Output:
```shell
- ingress.extensions/example-ingress created
+ ingress.networking.k8s.io/example-ingress created
```
1. Verify the IP address is set:
diff --git a/content/en/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md b/content/en/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md
index 5b6208f181..1bb365b34f 100644
--- a/content/en/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md
+++ b/content/en/docs/tasks/access-application-cluster/port-forward-access-application-cluster.md
@@ -33,7 +33,7 @@ for database debugging.
The output of a successful command verifies that the deployment was created:
deployment.apps/redis-master created
-
+
View the pod status to check that it is ready:
kubectl get pods
@@ -92,19 +92,19 @@ for database debugging.
1. `kubectl port-forward` allows using resource name, such as a pod name, to select a matching pod to port forward to since Kubernetes v1.10.
- kubectl port-forward redis-master-765d459796-258hz 7000:6379
+ kubectl port-forward redis-master-765d459796-258hz 7000:6379
which is the same as
kubectl port-forward pods/redis-master-765d459796-258hz 7000:6379
- or
+ or
- kubectl port-forward deployment/redis-master 7000:6379
+ kubectl port-forward deployment/redis-master 7000:6379
or
- kubectl port-forward rs/redis-master 7000:6379
+ kubectl port-forward rs/redis-master 7000:6379
or
@@ -117,7 +117,7 @@ for database debugging.
2. Start the Redis command line interface:
- redis-cli
+ redis-cli -p 7000
3. At the Redis command line prompt, enter the `ping` command:
diff --git a/content/en/docs/tasks/access-application-cluster/service-access-application-cluster.md b/content/en/docs/tasks/access-application-cluster/service-access-application-cluster.md
index 9c312e003c..af5eb2db86 100644
--- a/content/en/docs/tasks/access-application-cluster/service-access-application-cluster.md
+++ b/content/en/docs/tasks/access-application-cluster/service-access-application-cluster.md
@@ -33,17 +33,22 @@ provides load balancing for an application that has two running instances.
## Creating a service for an application running in two pods
+Here is the configuration file for the application Deployment:
+
+{{< codenew file="service/access/hello-application.yaml" >}}
+
1. Run a Hello World application in your cluster:
+ Create the application Deployment using the file above:
```shell
- kubectl run hello-world --replicas=2 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0 --port=8080
- ```
- The preceding command creates a
- [Deployment](/docs/concepts/workloads/controllers/deployment/)
- object and an associated
- [ReplicaSet](/docs/concepts/workloads/controllers/replicaset/)
- object. The ReplicaSet has two
- [Pods](/docs/concepts/workloads/pods/pod/),
- each of which runs the Hello World application.
+ kubectl apply -f https://k8s.io/examples/service/access/hello-application.yaml
+ ```
+ The preceding command creates a
+ [Deployment](/docs/concepts/workloads/controllers/deployment/)
+ object and an associated
+ [ReplicaSet](/docs/concepts/workloads/controllers/replicaset/)
+ object. The ReplicaSet has two
+ [Pods](/docs/concepts/workloads/pods/pod/),
+ each of which runs the Hello World application.
1. Display information about the Deployment:
```shell
diff --git a/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md b/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md
index f51eac0f71..12c8d7165d 100644
--- a/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md
+++ b/content/en/docs/tasks/access-application-cluster/web-ui-dashboard.md
@@ -30,7 +30,7 @@ Dashboard also provides information on the state of Kubernetes resources in your
The Dashboard UI is not deployed by default. To deploy it, run the following command:
```
-kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta1/aio/deploy/recommended.yaml
```
## Accessing the Dashboard UI
@@ -48,7 +48,7 @@ You can access Dashboard using the kubectl command-line tool by running the foll
kubectl proxy
```
-Kubectl will make Dashboard available at http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/.
+Kubectl will make Dashboard available at http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/.
The UI can _only_ be accessed from the machine where the command is executed. See `kubectl proxy --help` for more options.
diff --git a/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definition-versioning.md b/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definition-versioning.md
index 8e7b16fe8d..12c6f56972 100644
--- a/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definition-versioning.md
+++ b/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definition-versioning.md
@@ -34,8 +34,8 @@ level of your CustomResourceDefinitions or advance your API to a new version wit
The CustomResourceDefinition API supports a `versions` field that you can use to
support multiple versions of custom resources that you have developed. Versions
can have different schemas with a conversion webhook to convert custom resources between versions.
-Webhook conversions should follow the [Kubernetes API conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md) wherever applicable.
-Specifically, See the [API change documentation](https://github.com/kubernetes/community/blob/master/contributors/devel/api_changes.md) for a set of useful gotchas and suggestions.
+Webhook conversions should follow the [Kubernetes API conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md) wherever applicable.
+Specifically, See the [API change documentation](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api_changes.md) for a set of useful gotchas and suggestions.
{{< note >}}
Earlier iterations included a `version` field instead of `versions`. The
diff --git a/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md b/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md
index a48691add0..19d06b7c06 100644
--- a/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md
+++ b/content/en/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions.md
@@ -205,7 +205,7 @@ A structural schema is an [OpenAPI v3.0 validation schema](/docs/tasks/access-ku
1. specifies a non-empty type (via `type` in OpenAPI) for the root, for each specified field of an object node (via `properties` or `additionalProperties` in OpenAPI) and for each item in an array node (via `items` in OpenAPI), with the exception of:
* a node with `x-kubernetes-int-or-string: true`
* a node with `x-kubernetes-preserve-unknown-fields: true`
-2. for each each field in an object and each item in an array which is specified within any of `allOf`, `anyOf`, `oneOf` or `not`, the schema also specifies the field/item outside of those logical junctors (compare example 1 and 2).
+2. for each field in an object and each item in an array which is specified within any of `allOf`, `anyOf`, `oneOf` or `not`, the schema also specifies the field/item outside of those logical junctors (compare example 1 and 2).
3. does not set `description`, `type`, `default`, `additionProperties`, `nullable` within an `allOf`, `anyOf`, `oneOf` or `not`, with the exception of the two pattern for `x-kubernetes-int-or-string: true` (see below).
4. if `metadata` is specified, then only restrictions on `metadata.name` and `metadata.generateName` are allowed.
@@ -541,7 +541,7 @@ object. When all finalizers have been executed, the resource is deleted.
The value of `metadata.deletionGracePeriodSeconds` controls the interval between
polling updates.
-It is the responsibility of each controller to removes its finalizer from the list.
+It is the responsibility of each controller to remove its finalizer from the list.
Kubernetes only finally deletes the object if the list of finalizers is empty,
meaning all finalizers have been executed.
@@ -760,7 +760,7 @@ metadata:
spec:
cronSpec: "5 0 * * *"
image: my-awesome-cron-image
- replaces: 1
+ replicas: 1
```
Note that defaulting happens on the object
diff --git a/content/en/docs/tasks/administer-cluster/configure-upgrade-etcd.md b/content/en/docs/tasks/administer-cluster/configure-upgrade-etcd.md
index 3b8e82a08a..68fc7c2fc3 100644
--- a/content/en/docs/tasks/administer-cluster/configure-upgrade-etcd.md
+++ b/content/en/docs/tasks/administer-cluster/configure-upgrade-etcd.md
@@ -39,9 +39,9 @@ content_template: templates/task
Operating etcd with limited resources is suitable only for testing purposes. For deploying in production, advanced hardware configuration is required. Before deploying etcd in production, see [resource requirement reference documentation](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/hardware.md#example-hardware-configurations).
-## Starting Kubernetes API server
+## Starting etcd clusters
-This section covers starting a Kubernetes API server with an etcd cluster in the deployment.
+This section covers starting a single-node and multi-node etcd cluster.
### Single-node etcd cluster
diff --git a/content/en/docs/tasks/administer-cluster/coredns.md b/content/en/docs/tasks/administer-cluster/coredns.md
index 7055b21f6b..657459b145 100644
--- a/content/en/docs/tasks/administer-cluster/coredns.md
+++ b/content/en/docs/tasks/administer-cluster/coredns.md
@@ -19,7 +19,7 @@ This page describes the CoreDNS upgrade process and how to install CoreDNS inste
## About CoreDNS
[CoreDNS](https://coredns.io) is a flexible, extensible DNS server that can serve as the Kubernetes cluster DNS.
-Like Kubernetes, the CoreDNS project is hosted by the [CNCF.](http://www.cncf.io)
+Like Kubernetes, the CoreDNS project is hosted by the {{< glossary_tooltip text="CNCF" term_id="cncf" >}}.
You can use CoreDNS instead of kube-dns in your cluster by replacing kube-dns in an existing
deployment, or by using tools like kubeadm that will deploy and upgrade the cluster for you.
diff --git a/content/en/docs/tasks/administer-cluster/dns-debugging-resolution.md b/content/en/docs/tasks/administer-cluster/dns-debugging-resolution.md
index 8dc097b2d2..61fe3f80d2 100644
--- a/content/en/docs/tasks/administer-cluster/dns-debugging-resolution.md
+++ b/content/en/docs/tasks/administer-cluster/dns-debugging-resolution.md
@@ -95,7 +95,7 @@ Use the `kubectl get pods` command to verify that the DNS pod is running.
For CoreDNS:
```shell
-kubectl get pods --namespace=kube-system -l k8s-app=coredns
+kubectl get pods --namespace=kube-system -l k8s-app=kube-dns
NAME READY STATUS RESTARTS AGE
...
coredns-7b96bf9f76-5hsxb 1/1 Running 0 1h
@@ -122,7 +122,7 @@ Use `kubectl logs` command to see logs for the DNS containers.
For CoreDNS:
```shell
-for p in $(kubectl get pods --namespace=kube-system -l k8s-app=coredns -o name); do kubectl logs --namespace=kube-system $p; done
+for p in $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name); do kubectl logs --namespace=kube-system $p; done
```
Here is an example of a healthy CoreDNS log:
diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-14.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-14.md
index 014ac86383..b60071c3a2 100644
--- a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-14.md
+++ b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-14.md
@@ -68,7 +68,7 @@ are merged into a single document.
{{< tabs name="k8s_install_kubeadm_first_cp" >}}
{{% tab name="Ubuntu, Debian or HypriotOS" %}}
# replace x in 1.14.x-00 with the latest patch version
- apt-mark unhold kubeadm && \
+ apt-mark unhold kubeadm kubelet && \
apt-get update && apt-get install -y kubeadm=1.14.x-00 && \
apt-mark hold kubeadm
{{% /tab %}}
@@ -272,7 +272,7 @@ without compromising the minimum required capacity for running your workloads.
{{< tabs name="k8s_install_kubeadm_worker_nodes" >}}
{{% tab name="Ubuntu, Debian or HypriotOS" %}}
# replace x in 1.14.x-00 with the latest patch version
- apt-mark unhold kubeadm && \
+ apt-mark unhold kubeadm kubelet && \
apt-get update && apt-get install -y kubeadm=1.14.x-00 && \
apt-mark hold kubeadm
{{% /tab %}}
diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-15.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-15.md
index ccd23793e5..20896a678f 100644
--- a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-15.md
+++ b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade-1-15.md
@@ -56,7 +56,9 @@ The upgrade workflow at high level is the following:
{{% /tab %}}
{{< /tabs >}}
-## Upgrade the first control plane node
+## Upgrading control plane nodes
+
+### Upgrade the first control plane node
1. On your first control plane node, upgrade kubeadm:
@@ -220,28 +222,9 @@ The upgrade workflow at high level is the following:
Check the [addons](/docs/concepts/cluster-administration/addons/) page to
find your CNI provider and see whether additional upgrade steps are required.
-1. Upgrade the kubelet and kubectl on the control plane node:
+ This step is not required on additional control plane nodes if the CNI provider runs as a DaemonSet.
- {{< tabs name="k8s_install_kubelet" >}}
- {{% tab name="Ubuntu, Debian or HypriotOS" %}}
- # replace x in 1.15.x-00 with the latest patch version
- apt-mark unhold kubelet && \
- apt-get update && apt-get install -y kubelet=1.15.x-00 kubectl=1.15.x-00 && \
- apt-mark hold kubelet
- {{% /tab %}}
- {{% tab name="CentOS, RHEL or Fedora" %}}
- # replace x in 1.15.x-0 with the latest patch version
- yum install -y kubelet-1.15.x-0 kubectl-1.15.x-0 --disableexcludes=kubernetes
- {{% /tab %}}
- {{< /tabs >}}
-
-1. Restart the kubelet
-
- ```shell
- sudo systemctl restart kubelet
- ```
-
-## Upgrade additional control plane nodes
+### Upgrade additional control plane nodes
1. Same as the first control plane node but use:
@@ -257,6 +240,29 @@ sudo kubeadm upgrade apply
Also `sudo kubeadm upgrade plan` is not needed.
+### Upgrade kubelet and kubectl
+
+1. Upgrade the kubelet and kubectl on all control plane nodes:
+
+ {{< tabs name="k8s_install_kubelet" >}}
+ {{% tab name="Ubuntu, Debian or HypriotOS" %}}
+ # replace x in 1.15.x-00 with the latest patch version
+ apt-mark unhold kubelet kubectl && \
+ apt-get update && apt-get install -y kubelet=1.15.x-00 kubectl=1.15.x-00 && \
+ apt-mark hold kubelet kubectl
+ {{% /tab %}}
+ {{% tab name="CentOS, RHEL or Fedora" %}}
+ # replace x in 1.15.x-0 with the latest patch version
+ yum install -y kubelet-1.15.x-0 kubectl-1.15.x-0 --disableexcludes=kubernetes
+ {{% /tab %}}
+ {{< /tabs >}}
+
+1. Restart the kubelet
+
+ ```shell
+ sudo systemctl restart kubelet
+ ```
+
## Upgrade worker nodes
The upgrade procedure on worker nodes should be executed one node at a time or few nodes at a time,
@@ -279,7 +285,7 @@ without compromising the minimum required capacity for running your workloads.
{{% /tab %}}
{{< /tabs >}}
-### Cordon the node
+### Drain the node
1. Prepare the node for maintenance by marking it unschedulable and evicting the workloads. Run:
@@ -287,16 +293,12 @@ without compromising the minimum required capacity for running your workloads.
kubectl drain $NODE --ignore-daemonsets
```
- You should see output similar to this:
+ You should see output similar to this:
```shell
- kubectl drain ip-172-31-85-18
- node "ip-172-31-85-18" cordoned
- error: unable to drain node "ip-172-31-85-18", aborting command...
-
- There are pending nodes to be drained:
- ip-172-31-85-18
- error: DaemonSet-managed pods (use --ignore-daemonsets to ignore): calico-node-5798d, kube-proxy-thjp9
+ node/ip-172-31-85-18 cordoned
+ WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-proxy-dj7d7, kube-system/weave-net-z65qx
+ node/ip-172-31-85-18 drained
```
### Upgrade the kubelet configuration
@@ -309,7 +311,7 @@ without compromising the minimum required capacity for running your workloads.
### Upgrade kubelet and kubectl
-1. Upgrade the Kubernetes package version by running the Linux package manager for your distribution:
+1. Upgrade the kubelet and kubectl on all worker nodes:
{{< tabs name="k8s_kubelet_and_kubectl" >}}
{{% tab name="Ubuntu, Debian or HypriotOS" %}}
diff --git a/content/en/docs/tasks/administer-cluster/namespaces-walkthrough.md b/content/en/docs/tasks/administer-cluster/namespaces-walkthrough.md
index 9eb8692a8f..e92e8ca476 100644
--- a/content/en/docs/tasks/administer-cluster/namespaces-walkthrough.md
+++ b/content/en/docs/tasks/administer-cluster/namespaces-walkthrough.md
@@ -225,7 +225,7 @@ At this point, all requests we make to the Kubernetes cluster from the command l
Let's create some contents.
```shell
-kubectl run snowflake --image=kubernetes/serve_hostname --replicas=2
+kubectl run snowflake --image=k8s.gcr.io/serve_hostname --replicas=2
```
We have just created a deployment whose replica size is 2 that is running the pod called `snowflake` with a basic container that just serves the hostname.
Note that `kubectl run` creates deployments only on Kubernetes cluster >= v1.2. If you are running older versions, it creates replication controllers instead.
@@ -266,7 +266,7 @@ kubectl get pods
Production likes to run cattle, so let's create some cattle pods.
```shell
-kubectl run cattle --image=kubernetes/serve_hostname --replicas=5
+kubectl run cattle --image=k8s.gcr.io/serve_hostname --replicas=5
kubectl get deployment
```
diff --git a/content/en/docs/tasks/administer-cluster/namespaces.md b/content/en/docs/tasks/administer-cluster/namespaces.md
index d8d7e9b827..3c2c974b8e 100644
--- a/content/en/docs/tasks/administer-cluster/namespaces.md
+++ b/content/en/docs/tasks/administer-cluster/namespaces.md
@@ -258,7 +258,7 @@ At this point, all requests we make to the Kubernetes cluster from the command l
Let's create some contents.
```shell
-kubectl run snowflake --image=kubernetes/serve_hostname --replicas=2
+kubectl run snowflake --image=k8s.gcr.io/serve_hostname --replicas=2
```
We have just created a deployment whose replica size is 2 that is running the pod called `snowflake` with a basic container that just serves the hostname.
Note that `kubectl run` creates deployments only on Kubernetes cluster >= v1.2. If you are running older versions, it creates replication controllers instead.
@@ -298,7 +298,7 @@ kubectl get pods
Production likes to run cattle, so let's create some cattle pods.
```shell
-kubectl run cattle --image=kubernetes/serve_hostname --replicas=5
+kubectl run cattle --image=k8s.gcr.io/serve_hostname --replicas=5
kubectl get deployment
```
diff --git a/content/en/docs/tasks/administer-cluster/nodelocaldns.md b/content/en/docs/tasks/administer-cluster/nodelocaldns.md
index 318a8d5220..9cd893c7a6 100644
--- a/content/en/docs/tasks/administer-cluster/nodelocaldns.md
+++ b/content/en/docs/tasks/administer-cluster/nodelocaldns.md
@@ -5,22 +5,28 @@ reviewers:
title: Using NodeLocal DNSCache in Kubernetes clusters
content_template: templates/task
---
-
+
{{% capture overview %}}
This page provides an overview of NodeLocal DNSCache feature in Kubernetes.
{{% /capture %}}
-{{% capture body %}}
+
+{{% capture prerequisites %}}
+
+ {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+{{% /capture %}}
+
+ {{% capture steps %}}
## Introduction
-NodeLocal DNSCache improves Cluster DNS performance by running a dns caching agent on cluster nodes as a Daemonset. In today's architecture, pods in ClusterFirst DNS mode reach out to a kube-dns serviceIP for DNS queries. This is translated to a kube-dns/CoreDNS endpoint via iptables rules added by kube-proxy. With this new architecture, pods will reach out to the dns caching agent running on the same node, thereby avoiding iptables DNAT rules and connection tracking. The local caching agent will query kube-dns service for cache misses of cluster hostnames(cluster.local suffix by default).
+NodeLocal DNSCache improves Cluster DNS performance by running a dns caching agent on cluster nodes as a DaemonSet. In today's architecture, Pods in ClusterFirst DNS mode reach out to a kube-dns serviceIP for DNS queries. This is translated to a kube-dns/CoreDNS endpoint via iptables rules added by kube-proxy. With this new architecture, Pods will reach out to the dns caching agent running on the same node, thereby avoiding iptables DNAT rules and connection tracking. The local caching agent will query kube-dns service for cache misses of cluster hostnames(cluster.local suffix by default).
## Motivation
-* With the current DNS architecture, it is possible that pods with the highest DNS QPS have to reach out to a different node, if there is no local kube-dns/CoreDNS instance.
-Having a local cache will help improve the latency in such scenarios.
+* With the current DNS architecture, it is possible that Pods with the highest DNS QPS have to reach out to a different node, if there is no local kube-dns/CoreDNS instance.
+Having a local cache will help improve the latency in such scenarios.
* Skipping iptables DNAT and connection tracking will help reduce [conntrack races](https://github.com/kubernetes/kubernetes/issues/56903) and avoid UDP DNS entries filling up conntrack table.
@@ -34,9 +40,10 @@ Having a local cache will help improve the latency in such scenarios.
## Architecture Diagram
-This is the path followed by DNS Queries after NodeLocal DNSCache is enabled:
+This is the path followed by DNS Queries after NodeLocal DNSCache is enabled:
-
+
+{{< figure src="/images/docs/nodelocaldns.jpg" alt="NodeLocal DNSCache flow" title="Nodelocal DNSCache flow" caption="This image shows how NodeLocal DNSCahe handles DNS queries." >}}
## Configuration
@@ -45,10 +52,11 @@ This feature can be enabled using the command:
`KUBE_ENABLE_NODELOCAL_DNS=true go run hack/e2e.go -v --up`
This works for e2e clusters created on GCE. On all other environments, the following steps will setup NodeLocal DNSCache:
+
* A yaml similar to [this](https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/dns/nodelocaldns/nodelocaldns.yaml) can be applied using `kubectl create -f` command.
* --cluster-dns flag to kubelet needs to be modified to use the LOCAL_DNS IP that NodeLocal DNSCache is listening on (169.254.20.10 by default)
-Once enabled, node-local-dns pods will run in the kube-system namespace on each of the cluster nodes. This pod runs [CoreDNS](https://github.com/coredns/coredns) in cache mode, so all CoreDNS metrics exposed by the different plugins will be available on a per-node basis.
+Once enabled, node-local-dns Pods will run in the kube-system namespace on each of the cluster nodes. This Pod runs [CoreDNS](https://github.com/coredns/coredns) in cache mode, so all CoreDNS metrics exposed by the different plugins will be available on a per-node basis.
### Feature availability
@@ -58,3 +66,5 @@ The addon can be applied using the yaml specified above in any k8s version. The
| :---------: |:-----------:|
| 1.15 | Beta(Not enabled by default) |
| 1.13 | Alpha(Not enabled by default) |
+
+ {{% /capture %}}
diff --git a/content/en/docs/tasks/administer-cluster/out-of-resource.md b/content/en/docs/tasks/administer-cluster/out-of-resource.md
index 32a6120c85..f574ea7373 100644
--- a/content/en/docs/tasks/administer-cluster/out-of-resource.md
+++ b/content/en/docs/tasks/administer-cluster/out-of-resource.md
@@ -27,6 +27,8 @@ The `kubelet` can proactively monitor for and prevent total starvation of a
compute resource. In those cases, the `kubelet` can reclaim the starved
resource by proactively failing one or more Pods. When the `kubelet` fails
a Pod, it terminates all of its containers and transitions its `PodPhase` to `Failed`.
+If the evicted Pod is managed by a Deployment, the Deployment will create another Pod
+to be scheduled by Kubernetes.
### Eviction Signals
diff --git a/content/en/docs/tasks/administer-cluster/sysctl-cluster.md b/content/en/docs/tasks/administer-cluster/sysctl-cluster.md
index d6a3f85602..9f341d046f 100644
--- a/content/en/docs/tasks/administer-cluster/sysctl-cluster.md
+++ b/content/en/docs/tasks/administer-cluster/sysctl-cluster.md
@@ -42,9 +42,9 @@ sudo sysctl -a
## Enabling Unsafe Sysctls
-Sysctls are grouped into _safe_ and _unsafe_ sysctls. In addition to proper
-namespacing a _safe_ sysctl must be properly _isolated_ between pods on the same
-node. This means that setting a _safe_ sysctl for one pod
+Sysctls are grouped into _safe_ and _unsafe_ sysctls. In addition to proper
+namespacing, a _safe_ sysctl must be properly _isolated_ between pods on the
+same node. This means that setting a _safe_ sysctl for one pod
- must not have any influence on any other pod on the node
- must not allow to harm the node's health
@@ -78,13 +78,13 @@ flag of the kubelet, e.g.:
```shell
kubelet --allowed-unsafe-sysctls \
- 'kernel.msg*,net.ipv4.route.min_pmtu' ...
+ 'kernel.msg*,net.core.somaxconn' ...
```
For {{< glossary_tooltip term_id="minikube" >}}, this can be done via the `extra-config` flag:
```shell
-minikube start --extra-config="kubelet.allowed-unsafe-sysctls=kernel.msg*,net.ipv4.route.min_pmtu"...
+minikube start --extra-config="kubelet.allowed-unsafe-sysctls=kernel.msg*,net.core.somaxconn"...
```
Only _namespaced_ sysctls can be enabled this way.
@@ -102,7 +102,10 @@ in future versions of the Linux kernel.
- `kernel.msg*`,
- `kernel.sem`,
- `fs.mqueue.*`,
-- `net.*`.
+- The parameters under `net.*` that can be set in container networking
+ namespace. However, there are exceptions (e.g.,
+ `net.netfilter.nf_conntrack_max` and `net.netfilter.nf_conntrack_expect_max`
+ can be set in container networking namespace but they are unnamespaced).
Sysctls with no namespace are called _node-level_ sysctls. If you need to set
them, you must manually configure them on each node's operating system, or by
@@ -112,8 +115,8 @@ Use the pod securityContext to configure namespaced sysctls. The securityContext
applies to all containers in the same pod.
This example uses the pod securityContext to set a safe sysctl
-`kernel.shm_rmid_forced` and two unsafe sysctls `net.ipv4.route.min_pmtu` and
-`kernel.msgmax` There is no distinction between _safe_ and _unsafe_ sysctls in
+`kernel.shm_rmid_forced` and two unsafe sysctls `net.core.somaxconn` and
+`kernel.msgmax`. There is no distinction between _safe_ and _unsafe_ sysctls in
the specification.
{{< warning >}}
@@ -131,8 +134,8 @@ spec:
sysctls:
- name: kernel.shm_rmid_forced
value: "0"
- - name: net.ipv4.route.min_pmtu
- value: "552"
+ - name: net.core.somaxconn
+ value: "1024"
- name: kernel.msgmax
value: "65536"
...
diff --git a/content/en/docs/tasks/configure-pod-container/assign-cpu-resource.md b/content/en/docs/tasks/configure-pod-container/assign-cpu-resource.md
index 3ebd53370b..c5ec448e48 100644
--- a/content/en/docs/tasks/configure-pod-container/assign-cpu-resource.md
+++ b/content/en/docs/tasks/configure-pod-container/assign-cpu-resource.md
@@ -7,9 +7,9 @@ weight: 20
{{% capture overview %}}
This page shows how to assign a CPU *request* and a CPU *limit* to
-a Container. A Container is guaranteed to have as much CPU as it requests,
-but is not allowed to use more CPU than its limit.
-
+a container. Containers cannot use more CPU than the configured limit.
+Provided the system has CPU time free, a container is guaranteed to be
+allocated as much CPU as it requests.
{{% /capture %}}
@@ -25,8 +25,8 @@ A few of the steps on this page require you to run the
service in your cluster. If you have the metrics-server
running, you can skip those steps.
-If you are running minikube, run the following command to enable
-metrics-server:
+If you are running {{< glossary_tooltip term_id="minikube" >}}, run the
+following command to enable metrics-server:
```shell
minikube addons enable metrics-server
@@ -43,8 +43,8 @@ If the resource metrics API is available, the output will include a
reference to `metrics.k8s.io`.
-```shell
-NAME
+```
+NAME
v1beta1.metrics.k8s.io
```
@@ -55,8 +55,8 @@ v1beta1.metrics.k8s.io
## Create a namespace
-Create a namespace so that the resources you create in this exercise are
-isolated from the rest of your cluster.
+Create a {{< glossary_tooltip term_id="namespace" >}} so that the resources you
+create in this exercise are isolated from the rest of your cluster.
```shell
kubectl create namespace cpu-example
@@ -64,14 +64,15 @@ kubectl create namespace cpu-example
## Specify a CPU request and a CPU limit
-To specify a CPU request for a Container, include the `resources:requests` field
+To specify a CPU request for a container, include the `resources:requests` field
in the Container resource manifest. To specify a CPU limit, include `resources:limits`.
-In this exercise, you create a Pod that has one Container. The Container has a request of 0.5 CPU and a limit of 1 CPU. Here is the configuration file for the Pod:
+In this exercise, you create a Pod that has one container. The container has a request
+of 0.5 CPU and a limit of 1 CPU. Here is the configuration file for the Pod:
{{< codenew file="pods/resource/cpu-request-limit.yaml" >}}
-The `args` section of the configuration file provides arguments for the Container when it starts.
+The `args` section of the configuration file provides arguments for the container when it starts.
The `-cpus "2"` argument tells the Container to attempt to use 2 CPUs.
Create the Pod:
@@ -80,7 +81,7 @@ Create the Pod:
kubectl apply -f https://k8s.io/examples/pods/resource/cpu-request-limit.yaml --namespace=cpu-example
```
-Verify that the Pod Container is running:
+Verify that the Pod is running:
```shell
kubectl get pod cpu-demo --namespace=cpu-example
@@ -92,7 +93,7 @@ View detailed information about the Pod:
kubectl get pod cpu-demo --output=yaml --namespace=cpu-example
```
-The output shows that the one Container in the Pod has a CPU request of 500 milliCPU
+The output shows that the one container in the Pod has a CPU request of 500 milliCPU
and a CPU limit of 1 CPU.
```yaml
@@ -109,18 +110,18 @@ Use `kubectl top` to fetch the metrics for the pod:
kubectl top pod cpu-demo --namespace=cpu-example
```
-The output shows that the Pod is using 974 milliCPU, which is just a bit less than
-the limit of 1 CPU specified in the Pod configuration file.
+This example output shows that the Pod is using 974 milliCPU, which is
+just a bit less than the limit of 1 CPU specified in the Pod configuration.
```
NAME CPU(cores) MEMORY(bytes)
cpu-demo 974m
```
-Recall that by setting `-cpu "2"`, you configured the Container to attempt to use 2 CPUs, but the Container is only being allowed to use about 1 CPU. The Container CPU use is being throttled, because the Container is attempting to use more CPU resources than its limit.
+Recall that by setting `-cpu "2"`, you configured the Container to attempt to use 2 CPUs, but the Container is only being allowed to use about 1 CPU. The container's CPU use is being throttled, because the container is attempting to use more CPU resources than its limit.
{{< note >}}
-Another possible explanation for the CPU throttling is that the Node might not have
+Another possible explanation for the CPU use being below 1.0 is that the Node might not have
enough CPU resources available. Recall that the prerequisites for this exercise require each of
your Nodes to have at least 1 CPU. If your Container runs on a Node that has only 1 CPU, the Container
cannot use more than 1 CPU regardless of the CPU limit specified for the Container.
@@ -183,6 +184,8 @@ scheduled to run on any Node, and it will remain in the Pending state indefinite
```shell
kubectl get pod cpu-demo-2 --namespace=cpu-example
+```
+```
NAME READY STATUS RESTARTS AGE
cpu-demo-2 0/1 Pending 0 7m
```
@@ -198,11 +201,11 @@ The output shows that the Container cannot be scheduled because of insufficient
CPU resources on the Nodes:
-```shell
+```
Events:
- Reason Message
- ------ -------
- FailedScheduling No nodes are available that match all of the following predicates:: Insufficient cpu (3).
+ Reason Message
+ ------ -------
+ FailedScheduling No nodes are available that match all of the following predicates:: Insufficient cpu (3).
```
Delete your Pod:
@@ -269,6 +272,3 @@ kubectl delete namespace cpu-example
* [Configure Quotas for API Objects](/docs/tasks/administer-cluster/quota-api-object/)
{{% /capture %}}
-
-
-
diff --git a/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md b/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md
index cd90e908b3..b05fa5ab70 100644
--- a/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md
+++ b/content/en/docs/tasks/configure-pod-container/configure-pod-configmap.md
@@ -340,14 +340,14 @@ the Apiserver. The generators
should be specified in a `kustomization.yaml` inside a directory.
#### Generate ConfigMaps from files
-For example, to generate a ConfigMap from files `configure-pod-container/configmap/kubectl/game.properties`
+For example, to generate a ConfigMap from files `configure-pod-container/configmap/game.properties`
```shell
# Create a kustomization.yaml file with ConfigMapGenerator
cat <./kustomization.yaml
configMapGenerator:
- name: game-config-4
files:
- - configure-pod-container/configmap/kubectl/game.properties
+ - configure-pod-container/configmap/game.properties
EOF
```
@@ -391,7 +391,7 @@ new ConfigMap is generated each time the content is modified.
#### Define the key to use when generating a ConfigMap from a file
You can define a key other than the file name to use in the ConfigMap generator.
-For example, to generate a ConfigMap from files `configure-pod-container/configmap/kubectl/game.properties`
+For example, to generate a ConfigMap from files `configure-pod-container/configmap/game.properties`
with the key `game-special-key`
```shell
@@ -400,7 +400,7 @@ cat <./kustomization.yaml
configMapGenerator:
- name: game-config-5
files:
- - game-special-key=configure-pod-container/configmap/kubectl/game.properties
+ - game-special-key=configure-pod-container/configmap/game.properties
EOF
```
@@ -412,7 +412,7 @@ configmap/game-config-5-m67dt67794 created
#### Generate ConfigMaps from Literals
To generate a ConfigMap from literals `special.type=charm` and `special.how=very`,
-you can specify the ConfigMap generator in `kusotmization.yaml` as
+you can specify the ConfigMap generator in `kustomization.yaml` as
```shell
# Create a kustomization.yaml file with ConfigMapGenerator
cat <./kustomization.yaml
@@ -593,7 +593,7 @@ basis. The [Secrets](/docs/concepts/configuration/secret/#using-secrets-as-files
### Mounted ConfigMaps are updated automatically
-When a ConfigMap already being consumed in a volume is updated, projected keys are eventually updated as well. Kubelet is checking whether the mounted ConfigMap is fresh on every periodic sync. However, it is using its local ttl-based cache for getting the current value of the ConfigMap. As a result, the total delay from the moment when the ConfigMap is updated to the moment when new keys are projected to the pod can be as long as kubelet sync period + ttl of ConfigMaps cache in kubelet.
+When a ConfigMap already being consumed in a volume is updated, projected keys are eventually updated as well. Kubelet is checking whether the mounted ConfigMap is fresh on every periodic sync. However, it is using its local ttl-based cache for getting the current value of the ConfigMap. As a result, the total delay from the moment when the ConfigMap is updated to the moment when new keys are projected to the pod can be as long as kubelet sync period (1 minute by default) + ttl of ConfigMaps cache (1 minute by default) in kubelet.
{{< note >}}
A container using a ConfigMap as a [subPath](/docs/concepts/storage/volumes/#using-subpath) volume will not receive ConfigMap updates.
diff --git a/content/en/docs/tasks/configure-pod-container/security-context.md b/content/en/docs/tasks/configure-pod-container/security-context.md
index 9e690fd66a..f3b8be8d37 100644
--- a/content/en/docs/tasks/configure-pod-container/security-context.md
+++ b/content/en/docs/tasks/configure-pod-container/security-context.md
@@ -53,7 +53,7 @@ Here is a configuration file for a Pod that has a `securityContext` and an `empt
In the configuration file, the `runAsUser` field specifies that for any Containers in
the Pod, all processes run with user ID 1000. The `runAsGroup` field specifies the primary group ID of 3000 for
-all processes within any containers of the Pod. If this field is ommitted, the primary group ID of the containers
+all processes within any containers of the Pod. If this field is omitted, the primary group ID of the containers
will be root(0). Any files created will also be owned by user 1000 and group 3000 when `runAsGroup` is specified.
Since `fsGroup` field is specified, all processes of the container are also part of the supplementary group ID 2000.
The owner for volume `/data/demo` and any files created in that volume will be Group ID 2000.
@@ -130,7 +130,7 @@ Run the following command:
$ id
uid=1000 gid=3000 groups=2000
```
-You will see that gid is 3000 which is same as `runAsGroup` field. If the `runAsGroup` was ommitted the gid would
+You will see that gid is 3000 which is same as `runAsGroup` field. If the `runAsGroup` was omitted the gid would
remain as 0(root) and the process will be able to interact with files that are owned by root(0) group and that have
the required group permissions for root(0) group.
diff --git a/content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md b/content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md
index ddbe374ccd..faa067a6e5 100644
--- a/content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md
+++ b/content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md
@@ -86,7 +86,7 @@ ability to freely perform troubleshooting, performance analyis and forensics.
### Google Cloud Monitoring
Google Cloud Monitoring is a hosted monitoring service you can use to
-visualize and alert on important metrics in your application. can collect
+visualize and alert on important metrics in your application. You can collect
metrics from Kubernetes, and you can access them
using the [Cloud Monitoring Console](https://app.google.stackdriver.com/).
You can create and customize dashboards to visualize the data gathered
diff --git a/content/en/docs/tasks/job/coarse-parallel-processing-work-queue.md b/content/en/docs/tasks/job/coarse-parallel-processing-work-queue.md
index 0399e24c13..a1596831f1 100644
--- a/content/en/docs/tasks/job/coarse-parallel-processing-work-queue.md
+++ b/content/en/docs/tasks/job/coarse-parallel-processing-work-queue.md
@@ -46,14 +46,14 @@ cluster and reuse it for many jobs, as well as for long-running services.
Start RabbitMQ as follows:
```shell
-kubectl create -f examples/celery-rabbitmq/rabbitmq-service.yaml
+kubectl create -f https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.3/examples/celery-rabbitmq/rabbitmq-service.yaml
```
```
service "rabbitmq-service" created
```
```shell
-kubectl create -f examples/celery-rabbitmq/rabbitmq-controller.yaml
+kubectl create -f https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.3/examples/celery-rabbitmq/rabbitmq-controller.yaml
```
```
replicationcontroller "rabbitmq-controller" created
diff --git a/content/en/docs/tasks/manage-daemon/update-daemon-set.md b/content/en/docs/tasks/manage-daemon/update-daemon-set.md
index 2171e5c132..0c1a5472b6 100644
--- a/content/en/docs/tasks/manage-daemon/update-daemon-set.md
+++ b/content/en/docs/tasks/manage-daemon/update-daemon-set.md
@@ -77,7 +77,7 @@ step 3.
After verifying the update strategy of the DaemonSet manifest, create the DaemonSet:
```shell
-kubectl apply -f ds.yaml
+kubectl create -f ds.yaml
```
Alternatively, use `kubectl apply` to create the same DaemonSet if you plan to
diff --git a/content/en/docs/tasks/manage-kubernetes-objects/declarative-config.md b/content/en/docs/tasks/manage-kubernetes-objects/declarative-config.md
index 00dd4cbd24..2f0511a221 100644
--- a/content/en/docs/tasks/manage-kubernetes-objects/declarative-config.md
+++ b/content/en/docs/tasks/manage-kubernetes-objects/declarative-config.md
@@ -939,7 +939,7 @@ configuration involves several manual steps:
1. Export the live object to a local configuration file:
```shell
- kubectl get / -o yaml --export > _.yaml
+ kubectl get / -o yaml > _.yaml
```
1. Manually remove the `status` field from the configuration file.
diff --git a/content/en/docs/tasks/manage-kubernetes-objects/kustomization.md b/content/en/docs/tasks/manage-kubernetes-objects/kustomization.md
index 95b02a295d..292b479b9a 100644
--- a/content/en/docs/tasks/manage-kubernetes-objects/kustomization.md
+++ b/content/en/docs/tasks/manage-kubernetes-objects/kustomization.md
@@ -8,7 +8,7 @@ weight: 20
[Kustomize](https://github.com/kubernetes-sigs/kustomize) is a standalone tool
to customize Kubernetes objects
-through a [kustomization file](https://github.com/kubernetes-sigs/kustomize/blob/master/docs/kustomization.yaml).
+through a [kustomization file](https://github.com/kubernetes-sigs/kustomize/blob/master/docs/glossary.md#kustomization).
Since 1.14, Kubectl also
supports the management of Kubernetes objects using a kustomization file.
@@ -153,7 +153,7 @@ secretGenerator:
- name: example-secret-2
literals:
- username=admin
- - password=secert
+ - password=secret
EOF
```
@@ -162,7 +162,7 @@ The generated Secret is as follows:
```yaml
apiVersion: v1
data:
- password: c2VjZXJ0
+ password: c2VjcmV0
username: YWRtaW4=
kind: Secret
metadata:
@@ -206,7 +206,7 @@ metadata:
### Setting cross-cutting fields
-It is quite common to set cross-cutting fields for all Kubernetes resources in a project.
+It is quite common to set cross-cutting fields for all Kubernetes resources in a project.
Some use cases for setting cross-cutting fields:
* setting the same namespace for all Resource
@@ -283,8 +283,8 @@ spec:
### Composing and Customizing Resources
It is common to compose a set of Resources in a project and manage them inside
-the same file or directory.
-Kustomize offers composing Resources from different files and applying patches or other customization to them.
+the same file or directory.
+Kustomize offers composing Resources from different files and applying patches or other customization to them.
#### Composing
@@ -465,7 +465,7 @@ EOF
cat < patch.yaml
- op: replace
path: /spec/replicas
- value: 3
+ value: 3
EOF
# Create a kustomization.yaml
@@ -479,7 +479,7 @@ patchesJson6902:
version: v1
kind: Deployment
name: my-nginx
- path: patch.yaml
+ path: patch.yaml
EOF
```
@@ -707,6 +707,7 @@ cat < base/kustomization.yaml
resources:
- deployment.yaml
- service.yaml
+EOF
```
This base can be used in multiple overlays. You can add different `namePrefix` or other cross-cutting fields
@@ -730,7 +731,7 @@ EOF
## How to apply/view/delete objects using Kustomize
-Use `--kustomize` or `-k` in `kubectl` commands to recognize Resources managed by `kustomization.yaml`.
+Use `--kustomize` or `-k` in `kubectl` commands to recognize Resources managed by `kustomization.yaml`.
Note that `-k` should point to a kustomization directory, such as
```shell
@@ -804,12 +805,12 @@ deployment.apps "dev-my-nginx" deleted
| namespace | string | add namespace to all resources |
| namePrefix | string | value of this field is prepended to the names of all resources |
| nameSuffix | string | value of this field is appended to the names of all resources |
-| commonlabels | map[string]string | labels to add to all resources and selectors |
+| commonLabels | map[string]string | labels to add to all resources and selectors |
| commonAnnotations | map[string]string | annotations to add to all resources |
| resources | []string | each entry in this list must resolve to an existing resource configuration file |
| configmapGenerator | [][ConfigMapArgs](https://github.com/kubernetes-sigs/kustomize/blob/master/pkg/types/kustomization.go#L195) | Each entry in this list generates a ConfigMap |
| secretGenerator | [][SecretArgs](https://github.com/kubernetes-sigs/kustomize/blob/master/pkg/types/kustomization.go#L201) | Each entry in this list generates a Secret |
-| generatorOptions | [GeneratorOptions](https://github.com/kubernetes-sigs/kustomize/blob/master/pkg/types/kustomization.go#L239) | Modify behaviors of all ConfigMap and Secret generatos |
+| generatorOptions | [GeneratorOptions](https://github.com/kubernetes-sigs/kustomize/blob/master/pkg/types/kustomization.go#L239) | Modify behaviors of all ConfigMap and Secret generator |
| bases | []string | Each entry in this list should resolve to a directory containing a kustomization.yaml file |
| patchesStrategicMerge | []string | Each entry in this list should resolve a strategic merge patch of a Kubernetes object |
| patchesJson6902 | [][Json6902](https://github.com/kubernetes-sigs/kustomize/blob/master/pkg/patch/json6902.go#L23) | Each entry in this list should resolve to a Kubernetes object and a Json Patch |
@@ -827,4 +828,4 @@ deployment.apps "dev-my-nginx" deleted
* [Kubectl Command Reference](/docs/reference/generated/kubectl/kubectl/)
* [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/)
-{{% /capture %}}
\ No newline at end of file
+{{% /capture %}}
diff --git a/content/en/docs/tasks/run-application/configure-pdb.md b/content/en/docs/tasks/run-application/configure-pdb.md
index 89ba99a4e8..c5c7417f42 100644
--- a/content/en/docs/tasks/run-application/configure-pdb.md
+++ b/content/en/docs/tasks/run-application/configure-pdb.md
@@ -86,7 +86,7 @@ Values for `minAvailable` or `maxUnavailable` can be expressed as integers or as
- When you specify an integer, it represents a number of Pods. For instance, if you set `minAvailable` to 10, then 10
Pods must always be available, even during a disruption.
- When you specify a percentage by setting the value to a string representation of a percentage (eg. `"50%"`), it represents a percentage of
- total Pods. For instance, if you set `minUnavailable` to `"50%"`, then only 50% of the Pods can be unavailable during a
+ total Pods. For instance, if you set `maxUnavailable` to `"50%"`, then only 50% of the Pods can be unavailable during a
disruption.
When you specify the value as a percentage, it may not map to an exact number of Pods. For example, if you have 7 Pods and
diff --git a/content/en/docs/tasks/tls/managing-tls-in-a-cluster.md b/content/en/docs/tasks/tls/managing-tls-in-a-cluster.md
index bc4abc5b7c..2e2794f47c 100644
--- a/content/en/docs/tasks/tls/managing-tls-in-a-cluster.md
+++ b/content/en/docs/tasks/tls/managing-tls-in-a-cluster.md
@@ -9,15 +9,19 @@ reviewers:
{{% capture overview %}}
-Every Kubernetes cluster has a cluster root Certificate Authority (CA). The CA
-is generally used by cluster components to validate the API server's
-certificate, by the API server to validate kubelet client certificates, etc. To
-support this, the CA certificate bundle is distributed to every node in the
-cluster and is distributed as a secret attached to default service accounts.
-Optionally, your workloads can use this CA to establish trust. Your application
-can request a certificate signing using the `certificates.k8s.io` API using a
-protocol that is similar to the
-[ACME draft](https://github.com/ietf-wg-acme/acme/).
+Kubernetes provides a `certificates.k8s.io` API, which lets you provision TLS
+certificates signed by a Certificate Authority (CA) that you control. These CA
+and certificates can be used by your workloads to establish trust.
+
+`certificates.k8s.io` API uses a protocol that is similar to the [ACME
+draft](https://github.com/ietf-wg-acme/acme/).
+
+{{< note >}}
+Certificates created using the `certificates.k8s.io` API are signed by a
+dedicated CA. It is possible to configure your cluster to use the cluster root
+CA for this purpose, but you should never rely on this. Do not assume that
+these certificates will validate against the cluster root CA.
+{{< /note >}}
{{% /capture %}}
@@ -32,17 +36,16 @@ protocol that is similar to the
## Trusting TLS in a Cluster
-Trusting the cluster root CA from an application running as a pod usually
-requires some extra application configuration. You will need to add the CA
-certificate bundle to the list of CA certificates that the TLS client or server
-trusts. For example, you would do this with a golang TLS config by parsing the
-certificate chain and adding the parsed certificates to the `RootCAs` field
-in the [`tls.Config`](https://godoc.org/crypto/tls#Config) struct.
+Trusting the custom CA from an application running as a pod usually requires
+some extra application configuration. You will need to add the CA certificate
+bundle to the list of CA certificates that the TLS client or server trusts. For
+example, you would do this with a golang TLS config by parsing the certificate
+chain and adding the parsed certificates to the `RootCAs` field in the
+[`tls.Config`](https://godoc.org/crypto/tls#Config) struct.
-The CA certificate bundle is automatically mounted into pods using the default
-service account at the path `/var/run/secrets/kubernetes.io/serviceaccount/ca.crt`.
-If you are not using the default service account, ask a cluster administrator to
-build a configmap containing the certificate bundle that you have access to use.
+You can distribute the CA certificate as a
+[ConfigMap](/docs/tasks/configure-pod-container/configure-pod-config) that your
+pods have access to use.
## Requesting a Certificate
@@ -205,13 +208,11 @@ the CSR and otherwise should deny the CSR.
## A Word of Warning on the Approval Permission
-The ability to approve CSRs decides who trusts who within the cluster. This
-includes who the Kubernetes API trusts. The ability to approve CSRs should
-not be granted broadly or lightly. The requirements of the challenge
-noted in the previous section and the repercussions of issuing a specific
-certificate should be fully understood before granting this permission. See
-[here](/docs/reference/access-authn-authz/authentication/#x509-client-certs) for information on how
-certificates interact with authentication.
+The ability to approve CSRs decides who trusts who within your environment. The
+ability to approve CSRs should not be granted broadly or lightly. The
+requirements of the challenge noted in the previous section and the
+repercussions of issuing a specific certificate should be fully understood
+before granting this permission.
## A Note to Cluster Administrators
diff --git a/content/en/docs/tasks/tools/install-kubectl.md b/content/en/docs/tasks/tools/install-kubectl.md
index 44059a974a..7aa1a197e5 100644
--- a/content/en/docs/tasks/tools/install-kubectl.md
+++ b/content/en/docs/tasks/tools/install-kubectl.md
@@ -1,6 +1,5 @@
---
reviewers:
-- bgrant0607
- mikedanese
title: Install and Set Up kubectl
content_template: templates/task
@@ -28,7 +27,7 @@ You must use a kubectl version that is within one minor version difference of yo
1. Download the latest release with the command:
```
- curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
+ curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
```
To download a specific version, replace the `$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)` portion of the command with the specific version.
diff --git a/content/en/docs/tasks/tools/install-minikube.md b/content/en/docs/tasks/tools/install-minikube.md
index 9ad784f28d..32b51751e0 100644
--- a/content/en/docs/tasks/tools/install-minikube.md
+++ b/content/en/docs/tasks/tools/install-minikube.md
@@ -165,7 +165,7 @@ After Minikube has finished installing, close the current CLI session and restar
### Install Minikube using an installer executable
-To install Minikube manually on Windows using [Windows Installer](https://docs.microsoft.com/en-us/windows/desktop/msi/windows-installer-portal), download [`minikube-installer.exe`](https://github.com/kubernetes/minikube/releases/latest/minikube-installer.exe) and execute the installer.
+To install Minikube manually on Windows using [Windows Installer](https://docs.microsoft.com/en-us/windows/desktop/msi/windows-installer-portal), download [`minikube-installer.exe`](https://github.com/kubernetes/minikube/releases/latest/download/minikube-installer.exe) and execute the installer.
### Install Minikube via direct download
diff --git a/content/en/docs/tutorials/kubernetes-basics/_index.html b/content/en/docs/tutorials/kubernetes-basics/_index.html
index 381f7af9f4..4adbf98f19 100644
--- a/content/en/docs/tutorials/kubernetes-basics/_index.html
+++ b/content/en/docs/tutorials/kubernetes-basics/_index.html
@@ -42,6 +42,8 @@ card:
For our first Deployment, we'll use a Node.js application packaged in a Docker container.
- To create the Node.js application and deploy the Docker container, follow the instructions from the
- Hello Minikube tutorial.
-
-
Now that you know what Deployments are, let's go to the online tutorial and deploy our first app!
-
+
+ For your first Deployment, you'll use a Node.js application packaged in a Docker container. (If you didn't already try creating a
+ Node.js application and deploying a Node.js application and deploying it using a container, you can do that first by following the
+ instructions from the Hello Minikube tutorial).
+
+
+
Now that you know what Deployments are, let's go to the online tutorial and deploy our first app!
diff --git a/content/en/docs/tutorials/online-training/overview.md b/content/en/docs/tutorials/online-training/overview.md
index cced29ebb9..4b5ccd69b2 100644
--- a/content/en/docs/tutorials/online-training/overview.md
+++ b/content/en/docs/tutorials/online-training/overview.md
@@ -43,6 +43,8 @@ Here are some of the sites that offer online training for Kubernetes:
* [Kubernetes for the Absolute Beginners with Hands-on Labs (KodeKloud)](https://kodekloud.com/p/kubernetes-for-the-absolute-beginners-hands-on)
+* [Kubernetes Fundamentals (LFS258) (The Linux Foundation)](https://training.linuxfoundation.org/training/kubernetes-fundamentals/)
+
* [Kubernetes Quick Start with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-quick-start)
* [Kubernetes the Hard Way with Hands-On Labs (Linux Academy)](https://linuxacademy.com/linux/training/course/name/kubernetes-the-hard-way)
diff --git a/content/en/docs/tutorials/stateful-application/basic-stateful-set.md b/content/en/docs/tutorials/stateful-application/basic-stateful-set.md
index 678d221937..9bf6e5d0a0 100644
--- a/content/en/docs/tutorials/stateful-application/basic-stateful-set.md
+++ b/content/en/docs/tutorials/stateful-application/basic-stateful-set.md
@@ -785,7 +785,7 @@ an error indicating that the Service already exists.
```shell
kubectl apply -f web.yaml
statefulset.apps/web created
-Error from server (AlreadyExists): error when creating "web.yaml": services "nginx" already exists
+service/nginx unchanged
```
Ignore the error. It only indicates that an attempt was made to create the nginx
diff --git a/content/en/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md b/content/en/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md
index f471de069d..fff92784ea 100644
--- a/content/en/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md
+++ b/content/en/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md
@@ -93,6 +93,13 @@ The following manifest describes a single-instance MySQL Deployment. The MySQL c
{{< codenew file="application/wordpress/mysql-deployment.yaml" >}}
+The following manifest describes a single-instance WordPress Deployment. The WordPress container mounts the
+PersistentVolume at `/var/www/html` for website data files. The `WORDPRESS_DB_HOST` environment variable sets
+the name of the MySQL Service defined above, and WordPress will access the database by Service. The
+`WORDPRESS_DB_PASSWORD` environment variable sets the database password from the Secret kustomize generated.
+
+{{< codenew file="application/wordpress/wordpress-deployment.yaml" >}}
+
1. Download the MySQL deployment configuration file.
```shell
diff --git a/content/en/docs/user-journeys/users/cluster-operator/_advanced.md b/content/en/docs/user-journeys/users/cluster-operator/_advanced.md
deleted file mode 100644
index 78c7cc19a4..0000000000
--- a/content/en/docs/user-journeys/users/cluster-operator/_advanced.md
+++ /dev/null
@@ -1,86 +0,0 @@
----
-reviewers:
-- chenopis
-layout: docsportal
-css: /css/style_user_journeys.css
-js: https://use.fontawesome.com/4bcc658a89.js, https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js
-title: Advanced Topics
-track: "USERS > CLUSTER OPERATOR > ADVANCED"
-content_template: templates/user-journey-content
-toc_hide: true
----
-
-{{% capture overview %}}
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id felis non enim faucibus lacinia. Aliquam massa mauris, interdum a ex ut, sagittis rutrum nulla. In pellentesque est at molestie fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec eu mi at velit lacinia venenatis ac nec sem. In volutpat pellentesque dui ut commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sollicitudin eleifend felis non facilisis. Pellentesque leo urna, congue id auctor non, varius a nunc. Duis ultrices, odio ut hendrerit suscipit, nisi mauris dignissim mauris, nec bibendum ante neque ut augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam condimentum libero sit amet rutrum fermentum. Proin posuere condimentum odio. Aenean volutpat, ex vel tincidunt tincidunt, massa odio condimentum lectus, vel iaculis libero dolor in nisi.
-
-{{% /capture %}}
-
-
-
-{{% capture body %}}
-## Setup federated clusters
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id felis non enim faucibus lacinia. Aliquam massa mauris, interdum a ex ut, sagittis rutrum nulla. In pellentesque est at molestie fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec eu mi at velit lacinia venenatis ac nec sem. In volutpat pellentesque dui ut commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sollicitudin eleifend felis non facilisis. Pellentesque leo urna, congue id auctor non, varius a nunc. Duis ultrices, odio ut hendrerit suscipit, nisi mauris dignissim mauris, nec bibendum ante neque ut augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam condimentum libero sit amet rutrum fermentum. Proin posuere condimentum odio. Aenean volutpat, ex vel tincidunt tincidunt, massa odio condimentum lectus, vel iaculis libero dolor in nisi.
-
-Curabitur bibendum tempor mi, vel lacinia nisi vulputate ac. Nulla dignissim consectetur nisl nec tincidunt. Etiam pharetra facilisis sapien, non gravida velit fermentum sed. Ut ac ultrices nunc, in vestibulum urna. Suspendisse accumsan euismod felis, sit amet rhoncus neque volutpat luctus. Aliquam tincidunt pellentesque mauris, sed tempus diam. Mauris in elit eget justo tempor suscipit.
-
-Aenean suscipit arcu ac leo tincidunt tempus. Donec maximus tellus libero, ac ullamcorper magna lobortis ac. Integer mollis nisl vitae magna gravida, nec ornare ex consectetur. Sed mattis tincidunt nisi, at consequat tellus malesuada non. Integer vel semper nisi, ut fringilla velit. Nam felis ex, congue non dui vitae, sollicitudin convallis turpis. Phasellus porttitor maximus turpis, in varius nibh fermentum aliquam. Cras finibus lacus non diam porttitor porttitor. Nulla fringilla sagittis nibh nec condimentum. Duis egestas mauris nec dolor hendrerit ullamcorper sit amet in mi. Phasellus sollicitudin justo diam.
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id felis non enim faucibus lacinia. Aliquam massa mauris, interdum a ex ut, sagittis rutrum nulla. In pellentesque est at molestie fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec eu mi at velit lacinia venenatis ac nec sem. In volutpat pellentesque dui ut commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sollicitudin eleifend felis non facilisis. Pellentesque leo urna, congue id auctor non, varius a nunc. Duis ultrices, odio ut hendrerit suscipit, nisi mauris dignissim mauris, nec bibendum ante neque ut augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam condimentum libero sit amet rutrum fermentum. Proin posuere condimentum odio. Aenean volutpat, ex vel tincidunt tincidunt, massa odio condimentum lectus, vel iaculis libero dolor in nisi.
-
-Curabitur bibendum tempor mi, vel lacinia nisi vulputate ac. Nulla dignissim consectetur nisl nec tincidunt. Etiam pharetra facilisis sapien, non gravida velit fermentum sed. Ut ac ultrices nunc, in vestibulum urna. Suspendisse accumsan euismod felis, sit amet rhoncus neque volutpat luctus. Aliquam tincidunt pellentesque mauris, sed tempus diam. Mauris in elit eget justo tempor suscipit.
-
-Aenean suscipit arcu ac leo tincidunt tempus. Donec maximus tellus libero, ac ullamcorper magna lobortis ac. Integer mollis nisl vitae magna gravida, nec ornare ex consectetur. Sed mattis tincidunt nisi, at consequat tellus malesuada non. Integer vel semper nisi, ut fringilla velit. Nam felis ex, congue non dui vitae, sollicitudin convallis turpis. Phasellus porttitor maximus turpis, in varius nibh fermentum aliquam. Cras finibus lacus non diam porttitor porttitor. Nulla fringilla sagittis nibh nec condimentum. Duis egestas mauris nec dolor hendrerit ullamcorper sit amet in mi. Phasellus sollicitudin justo diam.
-
-## Deploy an application with advanced features
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id felis non enim faucibus lacinia. Aliquam massa mauris, interdum a ex ut, sagittis rutrum nulla. In pellentesque est at molestie fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec eu mi at velit lacinia venenatis ac nec sem. In volutpat pellentesque dui ut commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sollicitudin eleifend felis non facilisis. Pellentesque leo urna, congue id auctor non, varius a nunc. Duis ultrices, odio ut hendrerit suscipit, nisi mauris dignissim mauris, nec bibendum ante neque ut augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam condimentum libero sit amet rutrum fermentum. Proin posuere condimentum odio. Aenean volutpat, ex vel tincidunt tincidunt, massa odio condimentum lectus, vel iaculis libero dolor in nisi.
-
-Curabitur bibendum tempor mi, vel lacinia nisi vulputate ac. Nulla dignissim consectetur nisl nec tincidunt. Etiam pharetra facilisis sapien, non gravida velit fermentum sed. Ut ac ultrices nunc, in vestibulum urna. Suspendisse accumsan euismod felis, sit amet rhoncus neque volutpat luctus. Aliquam tincidunt pellentesque mauris, sed tempus diam. Mauris in elit eget justo tempor suscipit.
-
-Aenean suscipit arcu ac leo tincidunt tempus. Donec maximus tellus libero, ac ullamcorper magna lobortis ac. Integer mollis nisl vitae magna gravida, nec ornare ex consectetur. Sed mattis tincidunt nisi, at consequat tellus malesuada non. Integer vel semper nisi, ut fringilla velit. Nam felis ex, congue non dui vitae, sollicitudin convallis turpis. Phasellus porttitor maximus turpis, in varius nibh fermentum aliquam. Cras finibus lacus non diam porttitor porttitor. Nulla fringilla sagittis nibh nec condimentum. Duis egestas mauris nec dolor hendrerit ullamcorper sit amet in mi. Phasellus sollicitudin justo diam.
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id felis non enim faucibus lacinia. Aliquam massa mauris, interdum a ex ut, sagittis rutrum nulla. In pellentesque est at molestie fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec eu mi at velit lacinia venenatis ac nec sem. In volutpat pellentesque dui ut commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sollicitudin eleifend felis non facilisis. Pellentesque leo urna, congue id auctor non, varius a nunc. Duis ultrices, odio ut hendrerit suscipit, nisi mauris dignissim mauris, nec bibendum ante neque ut augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam condimentum libero sit amet rutrum fermentum. Proin posuere condimentum odio. Aenean volutpat, ex vel tincidunt tincidunt, massa odio condimentum lectus, vel iaculis libero dolor in nisi.
-
-Curabitur bibendum tempor mi, vel lacinia nisi vulputate ac. Nulla dignissim consectetur nisl nec tincidunt. Etiam pharetra facilisis sapien, non gravida velit fermentum sed. Ut ac ultrices nunc, in vestibulum urna. Suspendisse accumsan euismod felis, sit amet rhoncus neque volutpat luctus. Aliquam tincidunt pellentesque mauris, sed tempus diam. Mauris in elit eget justo tempor suscipit.
-
-Aenean suscipit arcu ac leo tincidunt tempus. Donec maximus tellus libero, ac ullamcorper magna lobortis ac. Integer mollis nisl vitae magna gravida, nec ornare ex consectetur. Sed mattis tincidunt nisi, at consequat tellus malesuada non. Integer vel semper nisi, ut fringilla velit. Nam felis ex, congue non dui vitae, sollicitudin convallis turpis. Phasellus porttitor maximus turpis, in varius nibh fermentum aliquam. Cras finibus lacus non diam porttitor porttitor. Nulla fringilla sagittis nibh nec condimentum. Duis egestas mauris nec dolor hendrerit ullamcorper sit amet in mi. Phasellus sollicitudin justo diam.
-
-## Explore advanced topics
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id felis non enim faucibus lacinia. Aliquam massa mauris, interdum a ex ut, sagittis rutrum nulla. In pellentesque est at molestie fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec eu mi at velit lacinia venenatis ac nec sem. In volutpat pellentesque dui ut commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sollicitudin eleifend felis non facilisis. Pellentesque leo urna, congue id auctor non, varius a nunc. Duis ultrices, odio ut hendrerit suscipit, nisi mauris dignissim mauris, nec bibendum ante neque ut augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam condimentum libero sit amet rutrum fermentum. Proin posuere condimentum odio. Aenean volutpat, ex vel tincidunt tincidunt, massa odio condimentum lectus, vel iaculis libero dolor in nisi.
-
-Curabitur bibendum tempor mi, vel lacinia nisi vulputate ac. Nulla dignissim consectetur nisl nec tincidunt. Etiam pharetra facilisis sapien, non gravida velit fermentum sed. Ut ac ultrices nunc, in vestibulum urna. Suspendisse accumsan euismod felis, sit amet rhoncus neque volutpat luctus. Aliquam tincidunt pellentesque mauris, sed tempus diam. Mauris in elit eget justo tempor suscipit.
-
-Aenean suscipit arcu ac leo tincidunt tempus. Donec maximus tellus libero, ac ullamcorper magna lobortis ac. Integer mollis nisl vitae magna gravida, nec ornare ex consectetur. Sed mattis tincidunt nisi, at consequat tellus malesuada non. Integer vel semper nisi, ut fringilla velit. Nam felis ex, congue non dui vitae, sollicitudin convallis turpis. Phasellus porttitor maximus turpis, in varius nibh fermentum aliquam. Cras finibus lacus non diam porttitor porttitor. Nulla fringilla sagittis nibh nec condimentum. Duis egestas mauris nec dolor hendrerit ullamcorper sit amet in mi. Phasellus sollicitudin justo diam.
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id felis non enim faucibus lacinia. Aliquam massa mauris, interdum a ex ut, sagittis rutrum nulla. In pellentesque est at molestie fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec eu mi at velit lacinia venenatis ac nec sem. In volutpat pellentesque dui ut commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sollicitudin eleifend felis non facilisis. Pellentesque leo urna, congue id auctor non, varius a nunc. Duis ultrices, odio ut hendrerit suscipit, nisi mauris dignissim mauris, nec bibendum ante neque ut augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam condimentum libero sit amet rutrum fermentum. Proin posuere condimentum odio. Aenean volutpat, ex vel tincidunt tincidunt, massa odio condimentum lectus, vel iaculis libero dolor in nisi.
-
-Curabitur bibendum tempor mi, vel lacinia nisi vulputate ac. Nulla dignissim consectetur nisl nec tincidunt. Etiam pharetra facilisis sapien, non gravida velit fermentum sed. Ut ac ultrices nunc, in vestibulum urna. Suspendisse accumsan euismod felis, sit amet rhoncus neque volutpat luctus. Aliquam tincidunt pellentesque mauris, sed tempus diam. Mauris in elit eget justo tempor suscipit.
-
-Aenean suscipit arcu ac leo tincidunt tempus. Donec maximus tellus libero, ac ullamcorper magna lobortis ac. Integer mollis nisl vitae magna gravida, nec ornare ex consectetur. Sed mattis tincidunt nisi, at consequat tellus malesuada non. Integer vel semper nisi, ut fringilla velit. Nam felis ex, congue non dui vitae, sollicitudin convallis turpis. Phasellus porttitor maximus turpis, in varius nibh fermentum aliquam. Cras finibus lacus non diam porttitor porttitor. Nulla fringilla sagittis nibh nec condimentum. Duis egestas mauris nec dolor hendrerit ullamcorper sit amet in mi. Phasellus sollicitudin justo diam.
-
-## Additional resources
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id felis non enim faucibus lacinia. Aliquam massa mauris, interdum a ex ut, sagittis rutrum nulla. In pellentesque est at molestie fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec eu mi at velit lacinia venenatis ac nec sem. In volutpat pellentesque dui ut commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sollicitudin eleifend felis non facilisis. Pellentesque leo urna, congue id auctor non, varius a nunc. Duis ultrices, odio ut hendrerit suscipit, nisi mauris dignissim mauris, nec bibendum ante neque ut augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam condimentum libero sit amet rutrum fermentum. Proin posuere condimentum odio. Aenean volutpat, ex vel tincidunt tincidunt, massa odio condimentum lectus, vel iaculis libero dolor in nisi.
-
-Curabitur bibendum tempor mi, vel lacinia nisi vulputate ac. Nulla dignissim consectetur nisl nec tincidunt. Etiam pharetra facilisis sapien, non gravida velit fermentum sed. Ut ac ultrices nunc, in vestibulum urna. Suspendisse accumsan euismod felis, sit amet rhoncus neque volutpat luctus. Aliquam tincidunt pellentesque mauris, sed tempus diam. Mauris in elit eget justo tempor suscipit.
-
-Aenean suscipit arcu ac leo tincidunt tempus. Donec maximus tellus libero, ac ullamcorper magna lobortis ac. Integer mollis nisl vitae magna gravida, nec ornare ex consectetur. Sed mattis tincidunt nisi, at consequat tellus malesuada non. Integer vel semper nisi, ut fringilla velit. Nam felis ex, congue non dui vitae, sollicitudin convallis turpis. Phasellus porttitor maximus turpis, in varius nibh fermentum aliquam. Cras finibus lacus non diam porttitor porttitor. Nulla fringilla sagittis nibh nec condimentum. Duis egestas mauris nec dolor hendrerit ullamcorper sit amet in mi. Phasellus sollicitudin justo diam.
-
-Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean id felis non enim faucibus lacinia. Aliquam massa mauris, interdum a ex ut, sagittis rutrum nulla. In pellentesque est at molestie fringilla. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec eu mi at velit lacinia venenatis ac nec sem. In volutpat pellentesque dui ut commodo. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis sollicitudin eleifend felis non facilisis. Pellentesque leo urna, congue id auctor non, varius a nunc. Duis ultrices, odio ut hendrerit suscipit, nisi mauris dignissim mauris, nec bibendum ante neque ut augue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam condimentum libero sit amet rutrum fermentum. Proin posuere condimentum odio. Aenean volutpat, ex vel tincidunt tincidunt, massa odio condimentum lectus, vel iaculis libero dolor in nisi.
-
-Curabitur bibendum tempor mi, vel lacinia nisi vulputate ac. Nulla dignissim consectetur nisl nec tincidunt. Etiam pharetra facilisis sapien, non gravida velit fermentum sed. Ut ac ultrices nunc, in vestibulum urna. Suspendisse accumsan euismod felis, sit amet rhoncus neque volutpat luctus. Aliquam tincidunt pellentesque mauris, sed tempus diam. Mauris in elit eget justo tempor suscipit.
-
-Aenean suscipit arcu ac leo tincidunt tempus. Donec maximus tellus libero, ac ullamcorper magna lobortis ac. Integer mollis nisl vitae magna gravida, nec ornare ex consectetur. Sed mattis tincidunt nisi, at consequat tellus malesuada non. Integer vel semper nisi, ut fringilla velit. Nam felis ex, congue non dui vitae, sollicitudin convallis turpis. Phasellus porttitor maximus turpis, in varius nibh fermentum aliquam. Cras finibus lacus non diam porttitor porttitor. Nulla fringilla sagittis nibh nec condimentum. Duis egestas mauris nec dolor hendrerit ullamcorper sit amet in mi. Phasellus sollicitudin justo diam.
-
-{{% /capture %}}
-
-
diff --git a/content/en/docs/user-journeys/users/cluster-operator/intermediate.md b/content/en/docs/user-journeys/users/cluster-operator/intermediate.md
index 5421b5822b..b590e4862c 100644
--- a/content/en/docs/user-journeys/users/cluster-operator/intermediate.md
+++ b/content/en/docs/user-journeys/users/cluster-operator/intermediate.md
@@ -84,7 +84,7 @@ Start with the [basics on Kubernetes logging](/docs/concepts/cluster-administrat
Like log aggregation, many clusters utilize additional software to help capture metrics and display them. There is an overview of tools at [Tools for Monitoring Compute, Storage, and Network Resources](/docs/tasks/debug-application-cluster/resource-usage-monitoring/).
Kubernetes also supports a [resource metrics pipeline](/docs/tasks/debug-application-cluster/resource-metrics-pipeline/) which can be used by Horizontal Pod Autoscaler with custom metrics.
-[Prometheus](https://prometheus.io/), which is another CNCF project, is a common choice to support capture and temporary collection of metrics. There are several options for installing Prometheus, including using the [stable/prometheus](https://github.com/kubernetes/charts/tree/master/stable/prometheus) [helm](https://helm.sh/) chart, and CoreOS provides a [prometheus operator](https://github.com/coreos/prometheus-operator) and [kube-prometheus](https://github.com/coreos/prometheus-operator/tree/master/contrib/kube-prometheus), which adds on Grafana dashboards and common configurations.
+[Prometheus](https://prometheus.io/), another {{< glossary_tooltip text="CNCF" term_id="cncf" >}} project, is a common choice to support capture and temporary collection of metrics. There are several options for installing Prometheus, including using the [stable/prometheus](https://github.com/kubernetes/charts/tree/master/stable/prometheus) [helm](https://helm.sh/) chart, and CoreOS provides a [prometheus operator](https://github.com/coreos/prometheus-operator) and [kube-prometheus](https://github.com/coreos/prometheus-operator/tree/master/contrib/kube-prometheus), which adds on Grafana dashboards and common configurations.
A common configuration on [Minikube](https://github.com/kubernetes/minikube) and some Kubernetes clusters uses [Heapster](https://github.com/kubernetes/heapster)
[along with InfluxDB and Grafana](https://github.com/kubernetes/heapster/blob/master/docs/influxdb.md).
diff --git a/content/en/examples/application/mysql/mysql-statefulset.yaml b/content/en/examples/application/mysql/mysql-statefulset.yaml
index e0c04007a8..b69af02c59 100644
--- a/content/en/examples/application/mysql/mysql-statefulset.yaml
+++ b/content/en/examples/application/mysql/mysql-statefulset.yaml
@@ -106,16 +106,16 @@ spec:
cd /var/lib/mysql
# Determine binlog position of cloned data, if any.
- if [[ -f xtrabackup_slave_info ]]; then
+ if [[ -f xtrabackup_slave_info && "x$( change_master_to.sql.in
# Ignore xtrabackup_binlog_info in this case (it's useless).
- rm -f xtrabackup_binlog_info
+ rm -f xtrabackup_slave_info xtrabackup_binlog_info
elif [[ -f xtrabackup_binlog_info ]]; then
# We're cloning directly from master. Parse binlog position.
[[ `cat xtrabackup_binlog_info` =~ ^(.*?)[[:space:]]+(.*?)$ ]] || exit 1
- rm xtrabackup_binlog_info
+ 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
@@ -126,16 +126,15 @@ spec:
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 "$(
diff --git a/content/es/docs/concepts/architecture/cloud-controller.md b/content/es/docs/concepts/architecture/cloud-controller.md
index 619c82bfe0..73950a7f4b 100644
--- a/content/es/docs/concepts/architecture/cloud-controller.md
+++ b/content/es/docs/concepts/architecture/cloud-controller.md
@@ -225,9 +225,9 @@ Los siguientes proveedores de servicios en la nube han implementado CCMs:
* [Digital Ocean](https://github.com/digitalocean/digitalocean-cloud-controller-manager)
* [Oracle](https://github.com/oracle/oci-cloud-controller-manager)
-* [Azure](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/azure)
-* [GCE](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/gce)
-* [AWS](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/aws)
+* [Azure](https://github.com/kubernetes/cloud-provider-azure)
+* [GCP](https://github.com/kubernetes/cloud-provider-gcp)
+* [AWS](https://github.com/kubernetes/cloud-provider-aws)
* [BaiduCloud](https://github.com/baidu/cloud-provider-baiducloud)
* [Linode](https://github.com/linode/linode-cloud-controller-manager)
diff --git a/content/es/docs/concepts/overview/what-is-kubernetes.md b/content/es/docs/concepts/overview/what-is-kubernetes.md
new file mode 100644
index 0000000000..39af5e5db9
--- /dev/null
+++ b/content/es/docs/concepts/overview/what-is-kubernetes.md
@@ -0,0 +1,164 @@
+---
+reviewers:
+- raelga
+title: ¿Qué es Kubernetes?
+content_template: templates/concept
+weight: 10
+card:
+ name: concepts
+ weight: 10
+---
+
+{{% capture overview %}}
+Esta página ofrece una visión general sobre Kubernetes.
+{{% /capture %}}
+
+{{% capture body %}}
+Kubernetes es una plataforma portable y extensible de código abierto para
+administrar cargas de trabajo y servicios. Kubernetes facilita la automatización
+y la configuración declarativa. Tiene un ecosistema grande y en rápido crecimiento.
+El soporte, las herramientas y los servicios para Kubernetes están ampliamente disponibles.
+
+Google liberó el proyecto Kubernetes en el año 2014. Kubernetes se basa en [la experiencia de
+Google corriendo aplicaciones en producción a gran escala por década y media](https://research.google.com/pubs/pub43438.html), junto a las mejores ideas y prácticas de la comunidad.
+
+## ¿Por qué necesito Kubernetes y qué puede hacer por mi?
+
+Kubernetes tiene varias características. Puedes pensar en Kubernetes como:
+
+- una plataforma de contenedores
+- una plataforma de microservicios
+- una plataforma portable de nube
+
+y mucho más.
+
+Kubernetes ofrece un entorno de administración **centrado en contenedores**. Kubernetes
+orquesta la infraestructura de cómputo, redes y almacenamiento para que las cargas de
+trabajo de los usuarios no tengan que hacerlo. Esto ofrece la simplicidad de las Plataformas
+como Servicio (PaaS) con la flexibilidad de la Infraestructura como Servicio (IaaS) y permite
+la portabilidad entre proveedores de infraestructura.
+
+## ¿Qué hace de Kubernetes una plataforma?
+
+A pesar de que Kubernetes ya ofrece muchas funcionalidades, siempre hay nuevos
+escenarios que se benefician de nuevas características. Los flujos de trabajo
+de las aplicaciones pueden optimizarse para acelerar el tiempo de desarrollo.
+Una solución de orquestación propia puede ser suficiente al principio, pero suele requerir
+una automatización robusta cuando necesita escalar. Es por ello que Kubernetes fue diseñada como
+una plataforma: para poder construir un ecosistema de componentes y herramientas que hacen
+más fácil el desplegar, escalar y administrar aplicaciones.
+
+Las etiquetas, o [Labels](/es/docs/concepts/overview/working-with-objects/labels/), le
+permiten a los usuarios organizar sus recursos como deseen. Las anotaciones , o [Annotations](/es/docs/concepts/overview/working-with-objects/annotations/), les permiten asignar información arbitraria a un recurso para
+facilitar sus flujos de trabajo y hacer más fácil a las herramientas administrativas inspeccionar el estado.
+
+Además, el [Plano de Control](/docs/concepts/overview/components/) de Kubernetes usa las mismas
+[APIs](/docs/reference/using-api/api-overview/) que usan los desarrolladores y usuarios finales.
+Los usuarios pueden escribir sus propios controladores, como por ejemplo un planificador o [scheduler](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/devel/scheduler.md),
+usando [sus propias
+APIs](/docs/concepts/api-extension/custom-resources/)
+desde una [herramienta de línea de comandos](/docs/user-guide/kubectl-overview/).
+
+Este
+[diseño](https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md)
+ha permitido que otros sistemas sean construidos sobre Kubernetes.
+
+## Lo que Kubernetes no es
+
+Kubernetes no es una Plataforma como Servicio (PaaS) convencional. Ya que
+Kubernetes opera a nivel del contenedor y no a nivel del hardware, ofrece
+algunas características que las PaaS también ofrecen, como deployments,
+escalado, balanceo de carga, registros y monitoreo. Dicho esto, Kubernetes
+no es monolítico y las soluciones que se ofrecen de forma predeterminada
+son opcionales e intercambiables.
+
+Kubernetes ofrece los elementos esenciales para construir una plataforma
+para desarrolladores, preservando la elección del usuario y la flexibilidad
+en las partes más importantes.
+
+Entonces, podemos decir que Kubernetes:
+
+* No limita el tipo de aplicaciones que soporta. Kubernetes busca dar soporte a un número diverso de cargas de trabajo, que incluyen aplicaciones con y sin estado así como aplicaciones que procesan datos. Si la aplicación puede correr en un contenedor, debería correr bien en Kubernetes.
+* No hace deployment de código fuente ni compila tu aplicación. Los flujos de integración, entrega y deployment continuo (CI/CD) vienen determinados por la cultura y preferencia organizacional y sus requerimientos técnicos.
+* No provee servicios en capa de aplicación como middleware (por ejemplo, buses de mensaje), frameworks de procesamiento de datos (como Spark), bases de datos (como MySQL), caches o sistemas de almacenamiento (como Ceph). Es posible correr estas aplicaciones en Kubernetes, o acceder a ellos desde una aplicación usando un mecanismo portable como el Open Service Broker.
+* No dictamina las soluciones de registros, monitoreo o alerta que se deben usar. Hay algunas integraciones que se ofrecen como prueba de concepto, y existen mecanismos para recolectar y exportar métricas.
+* No provee ni obliga a usar un sistema o lenguaje de configuración (como [jsonnet](https://github.com/google/jsonnet)) sino que ofrece una API declarativa que puede ser usada con cualquier forma de especificación declarativa
+* No provee ni adopta un sistema exhaustivo de mantenimiento, administración o corrección automática de errores
+
+Además, Kubernetes no es un mero *sistema de orquestación*. De hecho, Kubernetes elimina la necesidad de orquestar. *Orquestación* se define como la ejecución de un flujo de trabajo definido: haz A, luego B y entonces C. Kubernetes está compuesto de un conjunto de procesos de control independientes y combinables entre si que llevan el estado actual hacia el estado deseado. No debería importar demasiado como llegar de A a C. No se requiere control centralizado y, como resultado, el sistema es más fácil de usar, más poderoso, robusto, resiliente y extensible.
+
+## ¿Por qué usar contenedores?
+
+¿Te preguntas las razones para usar contenedores?
+
+
+
+La *Manera Antigua* de desplegar aplicaciones era instalarlas en un
+servidor usando el administrador de paquetes del sistema operativo.
+La desventaja era que los ejecutables, la configuración, las librerías
+y el ciclo de vida de todos estos componentes se entretejían unos a
+otros. Podíamos construir imágenes de máquina virtual inmutables para
+tener rollouts y rollbacks predecibles, pero las máquinas virtuales
+son pesadas y poco portables.
+
+La *Manera Nueva* es desplegar contenedores basados en virtualización
+a nivel del sistema operativo, en vez del hardware. Estos contenedores
+están aislados entre ellos y con el servidor anfitrión: tienen sus propios
+sistemas de archivos, no ven los procesos de los demás y el uso de recursos
+puede ser limitado. Son más fáciles de construir que una máquina virtual, y
+porque no están acoplados a la infraestructura y sistema de archivos del
+anfitrión, pueden llevarse entre nubes y distribuciones de sistema operativo.
+
+Ya que los contenedores son pequeños y rápidos, una aplicación puede ser
+empaquetada en una imagen de contenedor. Esta relación uno a uno entre
+aplicación e imagen nos abre un abanico de beneficios para usar contenedores.
+Con contenedores, podemos crear imágenes inmutables al momento de la compilación
+en vez del despliegue ya que las aplicaciones no necesitan componerse junto al
+resto del _stack_ ni atarse al entorno de infraestructura de producción. Generar
+una imagen de contenedor al momento de la compilación permite tener un entorno
+consistente que va desde desarrollo hasta producción. De igual forma, los contenedores
+son más transparentes que las máquinas virtuales y eso hace que el monitoreo y la
+administración sean más fáciles. Esto se aprecia más cuando los ciclos de vida de
+los contenedores son administrados por la infraestructura en vez de un proceso supervisor
+escondido en el contenedor. Por último, ya que solo hay una aplicación por contenedor,
+administrar el despliegue de la aplicación se reduce a administrar el contenedor.
+
+En resumen, los beneficios de usar contenedores incluyen:
+
+* **Ágil creación y despliegue de aplicaciones**:
+ Mayor facilidad y eficiencia al crear imágenes de contenedor en vez de máquinas virtuales
+* **Desarrollo, integración y despliegue continuos**:
+ Permite que la imagen de contenedor se construya y despliegue de forma frecuente y confiable,
+ facilitando los rollbacks pues la imagen es inmutable
+* **Separación de tareas entre Dev y Ops**:
+ Puedes crear imágenes de contenedor al momento de compilar y no al desplegar, desacoplando la
+ aplicación de la infraestructura
+* **Observabilidad**
+ No solamente se presenta la información y métricas del sistema operativo, sino la salud de la
+ aplicación y otras señales
+* **Consistencia entre los entornos de desarrollo, pruebas y producción**:
+ La aplicación funciona igual en un laptop y en la nube
+* **Portabilidad entre nubes y distribuciones**:
+ Funciona en Ubuntu, RHEL, CoreOS, tu datacenter físico, Google Kubernetes Engine y todo lo demás
+* **Administración centrada en la aplicación**:
+ Eleva el nivel de abstracción del sistema operativo y el hardware virtualizado a la aplicación que funciona en un sistema con recursos lógicos
+* **[Microservicios](https://martinfowler.com/articles/microservices.html)** distribuidos, elásticos, liberados y débilmente acoplados:
+ Las aplicaciones se separan en piezas pequeñas e independientes que pueden ser desplegadas y administradas de forma dinámica, y no como una aplicación monolítica que opera en una sola máquina de gran capacidad
+* **Aislamiento de recursos**:
+ Hace el rendimiento de la aplicación más predecible
+* **Utilización de recursos**:
+ Permite mayor eficiencia y densidad
+
+## ¿Qué significa Kubernetes? ¿Qué significa K8S?
+
+El nombre **Kubernetes** proviene del griego y significa *timonel* o *piloto*. Es la raíz de *gobernador* y de [cibernética](http://www.etymonline.com/index.php?term=cybernetics). *K8s*
+es una abrevación que se obtiene al reemplazar las ocho letras "ubernete" con el número 8.
+
+{{% /capture %}}
+
+{{% capture whatsnext %}}
+* ¿Estás listo para [empezar](/docs/setup/)?
+* Para saber más, visita el resto de la [documentación de Kubernetes](/docs/home/).
+{{% /capture %}}
+
+
diff --git a/content/es/docs/concepts/overview/working-with-objects/field-selectors.md b/content/es/docs/concepts/overview/working-with-objects/field-selectors.md
index 830467d7b9..d077a3f23b 100644
--- a/content/es/docs/concepts/overview/working-with-objects/field-selectors.md
+++ b/content/es/docs/concepts/overview/working-with-objects/field-selectors.md
@@ -56,5 +56,5 @@ kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Alway
Puedes usar los selectores de campo entre múltiples tipos de recursos. Este comando de `kubectl` selecciona todos los Statefulsets y Services que no están en el espacio de nombres `default`:
```shell
-kubectl get statefulsets,services --field-selector metadata.namespace!=default
+kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default
```
diff --git a/content/es/docs/concepts/overview/working-with-objects/namespaces.md b/content/es/docs/concepts/overview/working-with-objects/namespaces.md
index e4ad987e0f..2b1c179828 100644
--- a/content/es/docs/concepts/overview/working-with-objects/namespaces.md
+++ b/content/es/docs/concepts/overview/working-with-objects/namespaces.md
@@ -79,7 +79,7 @@ Puedes indicar de forma permanente el espacio de nombres para todas las llamadas
en dicho contexto.
```shell
-kubectl config set-context $(kubectl config current-context) --namespace=
+kubectl config set-context --current --namespace=
# Validate it
kubectl config view | grep namespace:
```
diff --git a/content/es/docs/reference/glossary/kubectl.md b/content/es/docs/reference/glossary/kubectl.md
new file mode 100755
index 0000000000..f7aa46bd87
--- /dev/null
+++ b/content/es/docs/reference/glossary/kubectl.md
@@ -0,0 +1,18 @@
+---
+title: Kubectl
+id: kubectl
+date: 2018-04-12
+full_link: /docs/user-guide/kubectl-overview/
+short_description: >
+ Herramienta de línea de comandos para comunicarse con un servidor ejecutando la API de Kubernetes.
+
+aka:
+tags:
+- tool
+- fundamental
+---
+ Herramienta de línea de comandos para comunicarse con un servidor ejecutando la {{< glossary_tooltip text="API de Kubernetes" term_id="kubernetes-api" >}}.
+
+
+
+Puedes usar kubectl para crear, inspeccionar, actualizar y borrar objetos de Kubernetes.
diff --git a/content/es/docs/reference/glossary/minikube.md b/content/es/docs/reference/glossary/minikube.md
new file mode 100755
index 0000000000..b9baa1eb81
--- /dev/null
+++ b/content/es/docs/reference/glossary/minikube.md
@@ -0,0 +1,18 @@
+---
+title: Minikube
+id: minikube
+date: 2018-04-12
+full_link: /docs/getting-started-guides/minikube/
+short_description: >
+ Herramienta para ejecutar Kubernetes de forma local.
+
+aka:
+tags:
+- fundamental
+- tool
+---
+ Herramienta para ejecutar Kubernetes de forma local.
+
+
+
+Minikube ejecuta un clúster de un solo nodo en una máquina virtual (VM) en tu máquina local.
diff --git a/content/es/docs/reference/glossary/volume.md b/content/es/docs/reference/glossary/volume.md
new file mode 100755
index 0000000000..5209b18e35
--- /dev/null
+++ b/content/es/docs/reference/glossary/volume.md
@@ -0,0 +1,18 @@
+---
+title: Volume
+id: volume
+date: 2018-04-12
+full_link: /docs/concepts/storage/volumes/
+short_description: >
+ Un directorio que contiene datos y que es accesible desde los contenedores corriendo en un pod.
+
+aka:
+tags:
+- core-object
+- fundamental
+---
+ Un directorio que contiene datos y que es accesible desde los contenedores corriendo en un {{< glossary_tooltip text="pod" term_id="pod" >}}.
+
+
+
+Un volumen de Kubernetes vive mientras exista el {{< glossary_tooltip text="pod" term_id="pod" >}} que lo contiene, no depende de la vida del {{< glossary_tooltip text="contenedor" term_id="container" >}} por eso se conservan los datos entre los reinicios de los {{< glossary_tooltip text="contenedores" term_id="container" >}}.
diff --git a/content/es/docs/tasks/tools/install-kubectl.md b/content/es/docs/tasks/tools/install-kubectl.md
index 9a868e1b1a..e826232641 100644
--- a/content/es/docs/tasks/tools/install-kubectl.md
+++ b/content/es/docs/tasks/tools/install-kubectl.md
@@ -1,6 +1,5 @@
---
reviewers:
-- bgrant0607
- mikedanese
title: Instalar y Configurar kubectl
content_template: templates/task
diff --git a/content/fr/_index.html b/content/fr/_index.html
index dc8d598025..e34e326f15 100644
--- a/content/fr/_index.html
+++ b/content/fr/_index.html
@@ -47,12 +47,12 @@ Vous pourrez ainsi répartir sans effort vos workloads là où vous le souhaitez
diff --git a/content/fr/docs/concepts/cluster-administration/logging.md b/content/fr/docs/concepts/cluster-administration/logging.md
new file mode 100644
index 0000000000..18e80dc650
--- /dev/null
+++ b/content/fr/docs/concepts/cluster-administration/logging.md
@@ -0,0 +1,358 @@
+---
+reviewers:
+- piosz
+- x13n
+title: Architecture de Journalisation d'évènements (logging)
+content_template: templates/concept
+weight: 60
+---
+
+{{% capture overview %}}
+
+La journalisation des évènements systèmes et d'applications peut aider à
+comprendre ce qui se passe dans un cluster. Les journaux sont particulièrement
+utiles pour débogguer les problèmes et surveiller l'activité du cluster. La
+plupart des application modernes ont un mécanisme de journalisation
+d'évènements, et la plupart des environnements d'exécution de conteneurs ont été
+conçus pour supporter la journalisation des évènements. La méthode de
+journalisation la plus facile et la plus répandue pour des applications
+conteneurisées est d'écrire dans les flux de sortie standard et d'erreur
+standard (`stdout` et `stderr`).
+
+Malgré cela, la fonctionnalité de journalisation fournie nativement par
+l'environnement d'exécution de conteneurs n'est pas suffisante comme solution
+complète de journalisation. Quand un conteneur crash, quand un Pod est expulsé
+ou quand un nœud disparaît, il est utile de pouvoir accéder au journal
+d'événement de l'application. C'est pourquoi les journaux doivent avoir leur
+propre espace de stockage et un cycle de vie indépendamment des nœuds, Pods ou
+conteneurs. Ce concept est appelé _journalisation des évènements au niveau du
+cluster_ (cluster-level-logging). Un backend dédié pour stocker, analyser et
+faire des requêtes est alors nécessaire. Kubernetes n'offre pas nativement de
+solution de stockage pour les journaux mais il est possible d'intégrer de
+nombreuses solutions de journalisation d'évènements dans un cluster Kubernetes.
+
+
+{{% /capture %}}
+
+
+{{% capture body %}}
+
+L'architecture de journalisation des évènements au niveau du cluster est décrite
+en considérant qu'un backend de journalisation est présent à l'intérieur ou à
+l'extérieur du cluster. Même sans avoir l'intention de journaliser les
+évènements au niveau du cluster, il est intéressant de savoir comment les
+journaux sont conservés et gérés au niveau d'un nœud.
+
+## Journalisation simple d'évènements dans Kubernetes
+
+Dans cette section, on va utiliser un exemple simple de journalisation
+d'évènements avec le flux de sortie standard. Cette démonstration utilise un
+manifeste pour un Pod avec un seul conteneur qui écrit du texte sur le flux
+de sortie standard toutes les secondes.
+
+{{< codenew file="debug/counter-pod.yaml" >}}
+
+Pour lancer ce Pod, utilisez la commande suivante :
+
+```shell
+kubectl apply -f https://k8s.io/examples/debug/counter-pod.yaml
+```
+Le résultat est :
+```
+pod/counter created
+```
+
+Pour récupérer les événements du conteneur d'un pod, utilisez la commande
+`kubectl logs` de la manière suivante :
+
+```shell
+kubectl logs counter
+```
+Le résultat est :
+```
+0: Mon Jan 1 00:00:00 UTC 2001
+1: Mon Jan 1 00:00:01 UTC 2001
+2: Mon Jan 1 00:00:02 UTC 2001
+...
+```
+
+Utilisez `kubectl logs` pour récupérer les évènements de l'instanciation
+précédente d'un Pod en utilisant l'option `--previous` quand par exemple le
+conteneur a crashé.
+
+Si le Pod a plusieurs conteneurs, il faut spécifier le nom du conteneur dont on
+veut récupérer le journal d'évènement. Dans notre exemple le conteneur s'appelle
+`count` donc vous pouvez utiliser `kubectl logs counter count`. Plus de détails
+dans la [documentation de `kubectl
+logs`] (/docs/reference/generated/kubectl/kubectl-commands#logs)
+
+## Journalisation d'évènements au niveau du nœud
+
+
+
+Tout ce qu'une application conteneurisée écrit sur `stdout` ou `stderr` est pris
+en compte et redirigé par l'environment d'exécution des conteneurs. Par exemple,
+Docker redirige ces deux flux à un [driver de journalisation
+(EN)](https://docs.docker.com/config/containers/logging/configure/) qui est
+configuré dans Kubernetes pour écrire dans un fichier au format json.
+
+{{< note >}} Le driver json de Docker traite chaque ligne comme un message
+différent. Avec ce driver il n'y a pas de support direct pour des messages
+multi-lignes. Il faut donc traiter les messages multi-lignes au niveau de
+l'agent de journalisation ou plus haut. {{< /note >}}
+
+Par défaut quand un conteneur redémarre, le kubelet ne conserve le journal que
+du dernier conteneur terminé. Quand un Pod est expulsé d'un nœud, tous ses
+conteneurs sont aussi expulsés avec leurs journaux d'évènements.
+
+Quand on utilise la journalisation d'évènements au niveau du nœud, il faut
+prendre garde à mettre en place une politique de rotation des journaux adéquate
+afin qu'ils n'utilisent pas tout l'espace de stockage du nœud. Kubernetes n'a
+pas en charge la rotation des journaux, c'est à l'outil de déploiement de le
+prendre en compte.
+
+Par exemple, dans les clusters Kubernetes déployés avec le script `kube-up.sh`
+[`logrotate`](https://linux.die.net/man/8/logrotate) est configuré pour
+s'exécuter toutes les heures. Il est aussi possible de configurer
+l'environnement d'exécution des conteneurs pour que la rotation des journaux
+s'exécute automatiquement, e.g. en utilisant le paramètre `log-opt` de Docker.
+Dans le script `kube-up.sh`, c'est cette méthode qui est utilisée pour des
+images COS sur GCP et sinon c'est la première méthode dans tous les autres cas.
+Quel que soit la méthode choisie par `kube-up.sh` la rotation est configurée par
+defaut quand la taille d'un journal atteint 10 Mo.
+
+Ce [script][cosConfigureHelper] montre de manière détaillée comment `kube-up.sh`
+met en place la journalisation d'évènement pour des images COS sur GCP.
+
+Quand [`kubectl logs`](/docs/reference/generated/kubectl/kubectl-commands#logs)
+s'exécute comme dans le premier exemple de journalisation simple le kubelet du
+nœud gère la requête et lit directement depuis le fichier de journal et retourne
+son contenu dans la réponse.
+
+{{< note >}} Si un système externe a effectué la rotation des journaux, seul le
+contenu du dernier fichier journal sera disponible avec `kubectl logs`. Par
+exemple quand le journal atteint 10 Mo, `logrotate` effectue une rotation, il y a
+alors 2 fichers, un de 10 Mo et un de vide, à ce moment là `kubectl logs`
+retournera une réponse vide. {{< /note >}}
+
+[cosConfigureHelper]: https://github.com/kubernetes/kubernetes/blob/{{< param
+"githubbranch" >}}/cluster/gce/gci/configure-helper.sh
+
+### Journalisation des évènements des composants système
+
+Il y a deux types de composants système selon qu'ils s'exécutent dans un
+conteneur ou pas.
+
+Par exemple :
+
+* Le scheduler Kubernetes et kube-proxy s'exécutent dans un conteneur.
+* Kubelet et l'environment d'exécution de conteneurs, comme par exemple
+Docker, ne s'exécutent pas dans un conteneur.
+
+Sur les systèmes avec systemd, kubelet et l'environment d'exécution de
+conteneurs écrivent dans journald. Si systemd n'est pas présent, ils écrivent
+dans un fichier `.log` dans le répertoire `/var/log`.
+
+Les composants système qui s'exécutent dans un conteneur écrivent toujours dans
+le répertoire `/var/log`, en contournant le mécanisme de journalisation par
+défaut. Ils utilisent la bibliothèque de journalisation [klog][klog]. Les
+conventions pour la sévérité des évènements pour ces composants se trouvent dans
+cette [documentation sur les conventions de journalisation des évènements dans
+kubernetes]
+(https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md).
+
+De la même manière que les journaux des conteneurs, les journaux des composants
+systèmes doivent avoir une politique de rotation. Dans un cluster créé avec
+le script `kube-up.sh`, les journaux ont une rotation journalière ou quand leur
+taille atteint 100 Mo.
+
+[klog]: https://github.com/kubernetes/klog
+
+## Architecture de journalisation des évènements au niveau du cluster
+
+Kubernetes ne fournit pas de solution native pour la journalisation des
+évènements au niveau du cluster. Mais il y a différentes approches qui peuvent
+être considérées :
+
+* Utiliser un agent de journalisation au niveau du nœud sur chacun des nœuds.
+* Inclure un conteneur side-car pour journaliser les évènements du Pod
+applicatif.
+* Envoyer les évènements directement a un backend depuis l'application.
+
+### Utiliser un agent de journalisation au niveau du nœud
+
+
+
+Vous pouvez implémenter une journalisation au niveau du cluster en incluant un
+_agent de journalisation au niveau du nœud_ sur chacun des nœuds. L'agent de
+journalisation est un outil dédié qui met à disposition ou envoie les journaux à
+un backend. Communément l'agent de journalisation est un conteneur qui a accès
+au répertoire qui contient les journaux des conteneurs applicatifs sur ce nœud.
+
+Comme l'agent de journalisation doit s'exécuter sur chacun des nœuds, on utilise
+soit un DaemonSet, soit un manifeste de Pod, soit un processus dédié natif sur
+le nœud. Ces deux dernières options sont obsolètes et fortement découragées.
+
+Utiliser un agent de journalisation au niveau du nœud est l'approche la plus
+commune et recommandée pour un cluster Kubernetes parce qu'un seul agent par
+nœud est créé et qu'aucune modification dans l'application n'est nécessaire.
+Mais cette approche _ne fonctionne correctement que pour les flux standard de
+sortie et d'erreurs des applications_.
+
+Kubernetes ne définit pas d'agent de journalisation, mais deux agents de
+journalisation optionnels sont fournis avec la version de Kubernetes :
+[Stackdriver (EN)](/docs/user-guide/logging/stackdriver) pour utiliser sur
+Google Cloud Platform, et [Elasticsearch
+(EN)](/docs/user-guide/logging/elasticsearch). Les deux utilisent
+[fluentd](http://www.fluentd.org/) avec une configuration spécifique comme agent
+sur le nœud. Les liens précédents fournissent plus d'informations et les
+instructions pour les utiliser et configurer.
+
+### Inclure un conteneur side-car pour journaliser les évènements du Pod applicatif
+
+Vous pouvez utiliser un conteneur side-car d'une des manières suivantes :
+
+* Le conteneur side-car diffuse les journaux de l'application sur son propre
+`stdout`.
+* Le conteneur side-car exécute un agent de journalisation qui est configuré
+pour récupérer les journaux du conteneur applicatif.
+
+#### Conteneur side-car diffusant (Streaming sidecar container)
+
+
+
+Comme le conteneur side-car diffuse les journaux sur ses propres flux `stdout`
+et `stderr`, on peut bénéficier du kubelet et de l'agent de journalisation qui
+s'exécute déjà sur chaque nœud. Les conteneurs side-car lisent les journaux
+depuis un fichier, un socket ou bien journald. Chaque conteneur side-car écrit
+son journal sur son propre flux `stdout` ou `stderr`.
+
+Cette méthode permet de séparer les flux de journaux de différentes
+parties de votre application même si elles ne supportent pas d'écrire sur
+`stdout` ou `stderr`. La logique de rediriger les journaux est minime et
+le surcoût est non significatif. De plus comme les flux standards `stdout` et
+`stderr` sont gérés par kubelet, les outils natifs comme `kubectl logs` peuvent
+être utilisés.
+
+Regardez l'exemple qui suit.
+
+Un Pod exécute un unique conteneur et ce conteneur écrit dans deux fichiers de
+journaux différents en utilisant deux format différents. Voici le manifeste du
+Pod :
+
+{{< codenew file="admin/logging/two-files-counter-pod.yaml" >}}
+
+Il serait très désordonné d'avoir des évènements avec des formats différents
+dans le même journal en redirigeant les évènements dans le flux de sortie
+`stdout` d'un seul conteneur. Il est plutôt souhaitable d'utiliser deux
+conteneurs side-car, un pour chaque type de journaux. Chaque conteneur side-car
+suit un des fichiers et renvoie les évènements sur son propre `stdout`.
+
+Ci-dessous se trouve le manifeste pour un Pod avec deux conteneurs side-car.
+
+{{< codenew file="admin/logging/two-files-counter-pod-streaming-sidecar.yaml"
+>}}
+
+Quand ce Pod s'exécute, chaque journal peut être diffusé séparément en
+utilisant les commandes suivantes :
+
+```shell
+kubectl logs counter count-log-1
+```
+```
+0: Mon Jan 1 00:00:00 UTC 2001
+1: Mon Jan 1 00:00:01 UTC 2001
+2: Mon Jan 1 00:00:02 UTC 2001
+...
+```
+
+```shell
+kubectl logs counter count-log-2
+```
+```
+Mon Jan 1 00:00:00 UTC 2001 INFO 0
+Mon Jan 1 00:00:01 UTC 2001 INFO 1
+Mon Jan 1 00:00:02 UTC 2001 INFO 2
+...
+```
+
+L'agent au niveau du nœud installé dans le cluster récupère les deux flux de
+journaux sans aucune configuration supplémentaire. Il est possible de configurer
+l'agent pour qu'il analyse syntaxiquement les évènements en fonction du
+conteneur source.
+
+Notez que bien que la consommation en CPU et mémoire soit faible ( de l'ordre de
+quelques milicores pour la CPU et quelques mégaoctets pour la mémoire), ecrire
+les évènements dans un fichier et les envoyer ensuite dans `stdout` peut doubler
+l'espace disque utilisé. Quand une application écrit dans un seul fichier de
+journal il est préférable de configurer `/dev/stdout` comme destination plutôt
+que d'implémenter un conteneur side-car diffusant.
+
+Les conteneurs side-car peuvent être utilisés pour faire la rotation des
+journaux quand l'application n'en est pas capable elle même. Un exemple serait
+un petit conteneur side-car qui effectuerait cette rotation périodiquement.
+Toutefois il est recommandé d'utiliser `stdout` et `stderr` directement et de
+laisser la rotation et les politiques de rétentions au kubelet.
+
+### Conteneur side-car avec un agent de journalisation
+
+
+
+Quand un agent de journalisation au niveau du nœud n'est pas assez flexible pour
+votre utilisation vous pouvez créer un conteneur side-car avec un agent de
+journalisation séparé que vous avez configuré spécialement pour qu'il s'exécute
+avec votre application.
+
+{{< note >}}
+Utiliser un agent de journalisation dans un conteneur side-car peut entraîner
+une consommation de ressource significative. De plus vous n'avez plus accès aux
+journaux avec la commande `kubectl` parce qu'ils ne sont plus gérés par
+kubelet.
+{{< /note >}}
+
+Comme exemple, vous pouvez utiliser
+[Stackdriver](/docs/tasks/debug-application-cluster/logging-stackdriver/) où
+ fluentd est l'agent de journalisation. Ci-dessous se trouvent deux
+configurations qui implémentent cette méthode.
+
+Le premier fichier contient un
+[ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/) pour
+configurer fluentd.
+
+{{< codenew file="admin/logging/fluentd-sidecar-config.yaml" >}}
+
+{{< note >}}
+La configuration de fluentd est hors du cadre de cet article. Vous trouverez
+des informations pour configurer fluentd dans la [documentation officielle de
+fluentd](http://docs.fluentd.org/).
+{{< /note >}}
+
+Le second fichier est un manifeste pour un Pod avec un conteneur side-car qui
+exécute fluentd. Le Pod monte un volume où fluentd peut récupérer sa
+configuration.
+
+{{< codenew file="admin/logging/two-files-counter-pod-agent-sidecar.yaml" >}}
+
+Apres quelques minutes, les évènements apparaîtront dans l'interface de
+Stackdriver.
+
+Ce n'est qu'un exemple et vous pouvez remplacer fluentd par n'importe quel
+agent de journalisation qui lit depuis n'importe quelle source de votre
+application.
+
+### Envoyer les évènements directement depuis l'application.
+
+
+
+Vous pouvez implémenter la journalisation au niveau cluster en mettant à
+disposition ou en envoyant les journaux directement depuis chaque application;
+Toutefois l'implémentation de ce mécanisme de journalisation est hors du cadre
+de Kubernetes.
+
+
+{{% /capture %}}
diff --git a/content/fr/docs/concepts/containers/container-lifecycle-hooks.md b/content/fr/docs/concepts/containers/container-lifecycle-hooks.md
new file mode 100644
index 0000000000..be710f324e
--- /dev/null
+++ b/content/fr/docs/concepts/containers/container-lifecycle-hooks.md
@@ -0,0 +1,124 @@
+---
+reviewers:
+title: Hooks de cycle de vie de conteneurs
+content_template: templates/concept
+weight: 30
+---
+
+{{% capture overview %}}
+
+Cette page décrit comment un conteneur pris en charge par kubelet peut utiliser
+le framework de Hooks de cycle de vie de conteneurs pour exécuter du code déclenché par des
+événements durant son cycle de vie.
+
+{{% /capture %}}
+
+
+{{% capture body %}}
+
+## Aperçu
+
+De manière similaire à quantité de frameworks de langages de programmation qui ont des hooks
+de cycle de vie de composants, comme Angular, Kubernetes fournit aux conteneurs
+des hooks de cycle de vie.
+Les hooks permettent à un conteneur d'être au courant d'événements durant son cycle de vie
+et d'exécuter du code implémenté dans un handler lorsque le hook de cycle de vie correspondant
+est exécuté.
+
+## Hooks de conteneurs
+
+Il existe deux hooks exposés aux conteneurs :
+
+`PostStart`
+
+Ce hook s'exécute immédiatement après qu'un conteneur soit créé.
+Cependant, il n'y a aucune garantie que le hook s'exécute avant l'ENTRYPOINT du conteneur.
+Aucun paramètre n'est passé au handler.
+
+`PreStop`
+
+Ce hook est appelé immédiatement avant qu'un conteneur se termine, en raison d'un appel à l'API
+ou d'un événement comme un échec de la liveness probe, un droit de préemption, un conflit de ressources ou autres.
+Un appel au hook preStop échoue si le conteneur est déjà dans l'état terminé ou complété.
+Il est bloquant, ce qui veut dire qu'il est synchrone, et doit donc se terminer avant que l'appel pour supprimer le conteneur soit envoyé.
+Aucun paramètre n'est passé au handler.
+
+Une description plus précise du comportement de l'arrêt peut être trouvé dans
+[Arrêt de Pods](/fr/docs/concepts/workloads/pods/pod/#arr%C3%AAt-de-pods).
+
+### Implémentation d'un handler de hook
+
+Les conteneurs peuvent accéder à un hook en implémentant et enregistrant un handler pour ce hook.
+Il existe deux types de handlers de hook pouvant être implémentés pour des conteneurs :
+
+* Exec - Exécute une commande donnée, comme `pre-stop.sh`, dans les cgroups et namespaces du conteneur.
+Les ressources consommées par la commande sont comptabilisées pour le conteneur.
+* HTTP - Exécute une requête HTTP sur un endpoint spécifique du conteneur.
+
+### Exécution d'un handler de hook
+
+Lorsqu'un hook de cycle de vie de conteneur est appelé,
+le système de gestion de Kubernetes exécute le handler dans le conteneur enregistré
+pour ce hook.
+
+Les appels aux handlers de hook sont synchrones dans le contexte du pod contenant le conteneur.
+Ceci veut dire que pour un hook `PostStart`,
+bien que l'ENTRYPOINT du conteneur et le hook soient lancés de manière asynchrone, si le hook prend trop de temps à s'exécuter ou se bloque,
+le conteneur ne peut pas atteindre l'état `running`.
+
+Le comportement est similaire pour un hook `PreStop`.
+Si le hook se bloque durant l'exécution,
+la phase du Pod reste en état `Terminating` et le hook est tué après `terminationGracePeriodSeconds` que le pod se termine.
+Si un hook `PostStart` ou `PreStop` échoue,
+le conteneur est tué.
+
+Les utilisateurs doivent rendre leurs handlers de hook aussi légers que possible.
+Il existe des cas, cependant, où de longues commandes ont un intérêt,
+comme pour enregistrer un état avant de stopper un conteneur.
+
+### Garanties de déclenchement d'un hook
+La politique de déclenchement d'un hook est *au moins une fois*,
+ce qui veut dire qu'un hook peut être déclenché plus d'une fois pour un événement donné,
+comme `PostStart` ou `PreStop`.
+Il appartient à l'implémentation du hook de prendre en compte correctement ce comportement.
+
+En général, un seul déclenchement est fait.
+Si, par exemple, un récepteur de hook HTTP est hors service et ne peut pas
+prendre en charge du trafic, il n'y a aucune tentative de renvoi.
+Dans quelques rares cas, cependant, un double envoi peut se produire.
+Par exemple, si kubelet redémarre au milieu d'un déclenchement de hook,
+le hook pourrait être re-déclenché après que kubelet redémarre.
+
+### Débugger des handlers de hook
+
+Les logs pour un handler de hook ne sont pas exposés dans les événements du Pod.
+Si un handler échoue pour une raison particulière, il envoie un événement.
+Pour `PostStart`, c'est l'événement `FailedPostStartHook`
+et pour `PreStop`, c'est l'événement `FailedPreStopHook`.
+Vous pouvez voir ces événements en exécutant `kubectl describe pod `.
+Voici un exemple d'affichage d'événements lors de l'exécution de cette commande :
+
+```
+Events:
+ FirstSeen LastSeen Count From SubobjectPath Type Reason Message
+ --------- -------- ----- ---- ------------- -------- ------ -------
+ 1m 1m 1 {default-scheduler } Normal Scheduled Successfully assigned test-1730497541-cq1d2 to gke-test-cluster-default-pool-a07e5d30-siqd
+ 1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Pulling pulling image "test:1.0"
+ 1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Created Created container with docker id 5c6a256a2567; Security:[seccomp=unconfined]
+ 1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Pulled Successfully pulled image "test:1.0"
+ 1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Started Started container with docker id 5c6a256a2567
+ 38s 38s 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Killing Killing container with docker id 5c6a256a2567: PostStart handler: Error executing in Docker Container: 1
+ 37s 37s 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Killing Killing container with docker id 8df9fdfd7054: PostStart handler: Error executing in Docker Container: 1
+ 38s 37s 2 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "main" with RunContainerError: "PostStart handler: Error executing in Docker Container: 1"
+ 1m 22s 2 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Warning FailedPostStartHook
+```
+
+{{% /capture %}}
+
+{{% capture whatsnext %}}
+
+* En savoir plus sur l'[Environnement d'un conteneur](/fr/docs/concepts/containers/container-environment-variables/).
+* Entraînez-vous à
+ [attacher des handlers de conteneurs à des événements de cycle de vie](/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/).
+
+{{% /capture %}}
diff --git a/content/fr/docs/concepts/services-networking/ingress.md b/content/fr/docs/concepts/services-networking/ingress.md
index e604c63abe..32b1352e23 100644
--- a/content/fr/docs/concepts/services-networking/ingress.md
+++ b/content/fr/docs/concepts/services-networking/ingress.md
@@ -72,7 +72,7 @@ Assurez-vous de consulter la documentation de votre contrôleur d’Ingress pour
Exemple de ressource Ingress minimale :
```yaml
-apiVersion: extensions/v1beta1
+apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
@@ -126,7 +126,7 @@ Il existe des concepts Kubernetes qui vous permettent d’exposer un seul servic
```yaml
-apiVersion: extensions/v1beta1
+apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
@@ -166,7 +166,7 @@ foo.bar.com -> 178.91.123.132 -> / foo service1:4200
ceci nécessitera un Ingress défini comme suit :
```yaml
-apiVersion: extensions/v1beta1
+apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: simple-fanout-example
@@ -233,7 +233,7 @@ bar.foo.com --| |-> bar.foo.com s2:80
L’ingress suivant indique au load-balancer de router les requêtes en fonction de [En-tête du hôte](https://tools.ietf.org/html/rfc7230#section-5.4).
```yaml
-apiVersion: extensions/v1beta1
+apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: name-virtual-host-ingress
@@ -256,7 +256,7 @@ spec:
Si vous créez une ressource Ingress sans aucun hôte défini dans les règles, tout trafic Web à destination de l'adresse IP de votre contrôleur d'Ingress peut être mis en correspondance sans qu'un hôte virtuel basé sur le nom ne soit requis. Par exemple, la ressource Ingress suivante acheminera le trafic demandé pour `first.bar.com` au `service1` `second.foo.com` au `service2`, et à tout trafic à l'adresse IP sans nom d'hôte défini dans la demande (c'est-à-dire sans en-tête de requête présenté) au `service3`.
```yaml
-apiVersion: extensions/v1beta1
+apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: name-virtual-host-ingress
@@ -300,7 +300,7 @@ type: kubernetes.io/tls
Référencer ce secret dans un ingress indiquera au contrôleur d'ingress de sécuriser le canal du client au load-balancer à l'aide de TLS. Vous devez vous assurer que le secret TLS que vous avez créé provenait d'un certificat contenant un CN pour `sslexample.foo.com`.
```yaml
-apiVersion: extensions/v1beta1
+apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: tls-example-ingress
diff --git a/content/fr/docs/concepts/workloads/controllers/replicaset.md b/content/fr/docs/concepts/workloads/controllers/replicaset.md
new file mode 100644
index 0000000000..59b71ed092
--- /dev/null
+++ b/content/fr/docs/concepts/workloads/controllers/replicaset.md
@@ -0,0 +1,345 @@
+---
+title: ReplicaSet
+content_template: templates/concept
+weight: 10
+---
+
+{{% capture overview %}}
+
+Un ReplicaSet (ensemble de réplicas en français) a pour but de maintenir un ensemble stable de Pods à un moment donné.
+Cet objet est souvent utilisé pour garantir la disponibilité d'un certain nombre identique de Pods.
+
+{{% /capture %}}
+
+{{% capture body %}}
+
+## Comment un ReplicaSet fonctionne
+
+Un ReplicaSet est défini avec des champs, incluant un selecteur qui spécifie comment identifier les Pods qu'il peut posséder,
+un nombre de replicas indiquant le nombre de Pods qu'il doit maintenir et un modèle de Pod spécifiant les données que les
+nouveaux Pods que le replicatSet va créer jusqu'au nombre de replicas demandé.
+
+Un ReplicaSet va atteindre son objectif en créant et supprimant des Pods pour atteindre le nombre de réplicas désirés.
+Quand un ReplicaSet a besoin de créer de nouveaux Pods, il utilise alors son Pod template.
+
+Le lien d'un ReplicaSet à ses Pods est fait par le champ [metadata.ownerReferences](/docs/concepts/workloads/controllers/garbage-collection/#owners-and-dependents),
+qui spécifie la ressource de l'objet par lequel il est détenu. Tous les Pods acquis par un ReplicaSet ont leurs propres informations d'identification de leur Replicaset, avec leur propre champ ownerReferences. C'est par ce lien que le ReplicaSet connait l'état des Pods qu'il maintient et agit en fonction de ces derniers.
+
+Un ReplicaSet identifie des nouveaux Pods à acquérir en utilisant son selecteur.
+Si il y a un Pod qui n'a pas de OwnerReference ou que OwnerReference n'est pas un controller et qu'il correspond à un sélecteur de ReplicaSet, il va immédiatement être acquis par ce ReplicaSet.
+
+## Quand utiliser un ReplicaSet ?
+
+Un ReplicaSet garantit qu’un nombre spécifié de réplicas de Pod soient exécutés à un moment donné.
+Cependant, un Deployment est un concept de plus haut niveau qui gère les ReplicaSets et
+fournit des mises à jour déclaratives aux Pods ainsi que de nombreuses autres fonctionnalités utiles.
+Par conséquent, nous vous recommandons d’utiliser des Deployments au lieu d’utiliser directement des ReplicaSets, sauf si
+vous avez besoin d'une orchestration personnalisée des mises à jour ou si vous n'avez pas besoin de mises à jour.
+
+Cela signifie qu'il est possible que vous n'ayez jamais besoin de manipuler des objets ReplicaSet :
+utilisez plutôt un déploiement et définissez votre application dans la section spec.
+
+## Exemple
+
+{{< codenew file="controllers/frontend.yaml" >}}
+
+Enregistrer ce manifeste dans `frontend.yaml` et le soumettre à un cluster Kubernetes va créer le ReplicaSet défini et les pods qu’il gère.
+
+```shell
+kubectl apply -f https://kubernetes.io/examples/controllers/frontend.yaml
+```
+
+Vous pouvez ensuite récupérer les ReplicaSets actuellement déployés :
+```shell
+kubectl get rs
+```
+
+Et voir le frontend que vous avez créé :
+```shell
+NAME DESIRED CURRENT READY AGE
+frontend 3 3 3 6s
+```
+
+Vous pouvez également vérifier l'état du ReplicaSet :
+```shell
+kubectl describe rs/frontend
+```
+
+Et vous verrez une sortie similaire à :
+```shell
+Name: frontend
+Namespace: default
+Selector: tier=frontend,tier in (frontend)
+Labels: app=guestbook
+ tier=frontend
+Annotations:
+Replicas: 3 current / 3 desired
+Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
+Pod Template:
+ Labels: app=guestbook
+ tier=frontend
+ Containers:
+ php-redis:
+ Image: gcr.io/google_samples/gb-frontend:v3
+ Port: 80/TCP
+ Requests:
+ cpu: 100m
+ memory: 100Mi
+ Environment:
+ GET_HOSTS_FROM: dns
+ Mounts:
+ Volumes:
+Events:
+ FirstSeen LastSeen Count From SubobjectPath Type Reason Message
+ --------- -------- ----- ---- ------------- -------- ------ -------
+ 1m 1m 1 {replicaset-controller } Normal SuccessfulCreate Created pod: frontend-qhloh
+ 1m 1m 1 {replicaset-controller } Normal SuccessfulCreate Created pod: frontend-dnjpy
+ 1m 1m 1 {replicaset-controller } Normal SuccessfulCreate Created pod: frontend-9si5l
+```
+
+Et enfin, vous pourrez afficher les Pods déployés :
+```shell
+kubectl get Pods
+```
+
+Vous devriez voir des informations sur les Pods avec une sortie similaire à :
+```shell
+NAME READY STATUS RESTARTS AGE
+frontend-9si5l 1/1 Running 0 1m
+frontend-dnjpy 1/1 Running 0 1m
+frontend-qhloh 1/1 Running 0 1m
+```
+
+Vous pouvez également vérifier que la OwnerReference de ces pods est définie sur le frontend ReplicaSet.
+Pour ce faire, récupérez le yaml de l’un des pods :
+```shell
+kubectl get pods frontend-9si5l -o yaml
+```
+
+La sortie sera similaire à celle-ci, avec les informations de l'interface ReplicaSet frontend définies dans le champ ownerReferences des métadonnées:
+```shell
+apiVersion: v1
+kind: Pod
+metadata:
+ creationTimestamp: 2019-01-31T17:20:41Z
+ generateName: frontend-
+ labels:
+ tier: frontend
+ name: frontend-9si5l
+ namespace: default
+ ownerReferences:
+ - apiVersion: extensions/v1beta1
+ blockOwnerDeletion: true
+ controller: true
+ kind: ReplicaSet
+ name: frontend
+ uid: 892a2330-257c-11e9-aecd-025000000001
+...
+```
+
+## Acquisitions de Pod en dehors du template
+
+Bien que vous puissiez créer des pods manuellement sans problème, il est fortement recommandé de s’assurer que ces pods n'ont pas de
+labels correspondant au sélecteur de l’un de vos ReplicaSets. Car un ReplicaSet n’est pas limité
+à posséder les pods spécifiés par son modèle - il peut acquérir d’autres pods de la manière spécifiée dans les sections précédentes.
+
+Prenez l'exemple précédent de ReplicaSet, ainsi que les pods spécifiés dans le manifeste suivant :
+
+{{< codenew file="pods/pod-rs.yaml" >}}
+
+Ces pods n’ayant pas de contrôleur (ni d’objet) en tant que référence propriétaire, ils correspondent au sélecteur de du ReplicaSet frontend, ils seront donc immédiatement acquis par ce ReplicaSet.
+
+Supposons que vous créiez les pods une fois le ReplicaSet frontend déployé et qui a déjà déployé ses replicas de Pods initiaux afin de
+remplir son exigence de nombre de replicas :
+
+```shell
+kubectl apply -f https://kubernetes.io/examples/pods/pod-rs.yaml
+```
+
+Les nouveaux pods seront acquis par le ReplicaSet, puis immédiatement terminés car le ReplicaSet dépasserait alors le compte désiré.
+
+En récupérant les pods :
+```shell
+kubectl get Pods
+```
+
+La sortie montre que les nouveaux pods sont soit déjà terminés, soit en voie de l'être :
+```shell
+NAME READY STATUS RESTARTS AGE
+frontend-9si5l 1/1 Running 0 1m
+frontend-dnjpy 1/1 Running 0 1m
+frontend-qhloh 1/1 Running 0 1m
+pod2 0/1 Terminating 0 4s
+```
+
+Cependant, si vous créez d'abord les pods :
+```shell
+kubectl apply -f https://kubernetes.io/examples/pods/pod-rs.yaml
+```
+
+Et puis créez le ReplicaSet :
+```shell
+kubectl apply -f https://kubernetes.io/examples/controllers/frontend.yaml
+```
+
+Vous verrez que le ReplicaSet a acquis les pods et n'a créé que les nouveaux Pods manquants, conformément à ses spécifications,
+jusqu'au nombre souhaité de Pods. En récupérant les Pods :
+```shell
+kubectl get Pods
+```
+
+La sortie va donner :
+```shell
+NAME READY STATUS RESTARTS AGE
+frontend-pxj4r 1/1 Running 0 5s
+pod1 1/1 Running 0 13s
+pod2 1/1 Running 0 13s
+```
+
+De cette manière, un ReplicaSet peut avoir un ensemble de Pods hétérogène.
+
+## Écrire un manifest de ReplicaSet
+
+Comme avec tous les autres objets API Kubernetes, un ReplicaSet a besoin des champs `apiVersion`, `kind` et `metadata`.
+Pour ReplicaSets, l'attribut `kind` est toujours ReplicaSet.
+
+Dans Kubernetes 1.9, la version de l'API `apps/v1` pour le type ReplicaSet est la version actuelle et activée par défaut. La version de l'API `apps/v1beta2` est obsolète.
+
+Reportez-vous aux premières lignes de l'exemple `frontend.yaml` pour obtenir des conseils.
+
+Un ReplicaSet a également besoin de [`.spec` section](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status).
+
+### Pod Template
+
+L'attribut `.spec.template` est un [modèle de pod](/docs/concepts/workloads/Pods/pod-overview/#pod-templates) qui requiert d'avoir des labels. Dans notre exemple `frontend.yaml`, nous avons un label : `tier: frontend`.
+Il faut faire attention à ne pas avoir des selecteurs que d'autres controllers utilisent, afin d'éviter que le ReplicaSet n'adopte ce pod.
+
+Pour le champ [restart policy](/docs/concepts/workloads/Pods/pod-lifecycle/#restart-policy),
+`.spec.template.spec.restartPolicy`, la seule valeur autorisée est `Always`, qui est la valeur par défaut.
+
+### Sélecteur de Pod
+
+Le champ `.spec.selector` est un [label selector](/docs/concepts/overview/working-with-objects/labels/). Tel que discuté
+[précédemment](#how-a-replicaset-works), ce sont les labels utilisés pour identifier les Pods potentiels à acquérir. Dans notre
+exemple avec `frontend.yaml`, le sélecteur était :
+```shell
+matchLabels:
+ tier: frontend
+```
+
+Dans le ReplicaSet, `.spec.template.metadata.labels` doit correspondre à `spec.selector`, ou sinon il sera rejeté par l'API.
+
+{{< note >}}
+Pour 2 ReplicaSets spécifiant le même `.spec.selector` mais différents `.spec.template.metadata.labels` et `.spec.template.spec`, chaque ReplicaSet ignore les pods créés par l'autre ReplicaSet.
+{{< /note >}}
+
+### Replicas
+
+Vous pouvez spécifier le nombre de pods à exécuter simultanément en définissant `.spec.replicas`. Le ReplicaSet va créer/supprimer
+ses pods pour correspondre à ce nombre.
+
+Si vous ne spécifiez pas `.spec.replicas`, la valeur par défaut est 1.
+
+## Travailler avec des ReplicaSets
+
+### Suppression d'un ReplicaSet et de ses pods
+
+Pour supprimer un ReplicaSet et tous ses pods, utilisez [`kubectl delete`](/docs/reference/generated/kubectl/kubectl-commands#delete). The [Garbage collector](/docs/concepts/workloads/controllers/garbage-collection/) supprime automatiquement tous les pods associés par défaut.
+
+Lors de l’utilisation de l’API REST ou de la bibliothèque `client-go`, vous devez définir `propagationPolicy` sur `Background` ou `Foreground` dans
+l'option -d.
+Par exemple :
+```shell
+kubectl proxy --port=8080
+curl -X DELETE 'localhost:8080/apis/extensions/v1beta1/namespaces/default/replicasets/frontend' \
+> -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \
+> -H "Content-Type: application/json"
+```
+
+### Supprimer juste un ReplicaSet
+
+Vous pouvez supprimer un ReplicaSet sans affecter ses pods à l’aide de [`kubectl delete`](/docs/reference/generated/kubectl/kubectl-commands#delete) avec l'option `--cascade=false`.
+Lorsque vous utilisez l'API REST ou la bibliothèque `client-go`, vous devez définir `propagationPolicy` sur `Orphan`.
+Par exemple :
+```shell
+kubectl proxy --port=8080
+curl -X DELETE 'localhost:8080/apis/extensions/v1beta1/namespaces/default/replicasets/frontend' \
+> -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Orphan"}' \
+> -H "Content-Type: application/json"
+```
+
+Une fois l’original supprimé, vous pouvez créer un nouveau ReplicaSet pour le remplacer. Tant que l'ancien et le nouveau `.spec.selector` sont identiques, le nouveau adoptera les anciens Pods.
+Cependant, le ReplicaSet ne fera aucun effort pour que les pods existants correspondent à un nouveau Pod template.
+Pour mettre à jour les Pods à une nouvelle spec de manière contrôlée, utilisez un
+[Deployment](/docs/concepts/workloads/controllers/deployment/#creating-a-deployment), car les ReplicaSets ne supportent pas de rolling update directement.
+
+### Isoler les pods d'un ReplicaSet
+
+Vous pouvez supprimer les pods d'un ReplicaSet en modifiant leurs labels. Cette technique peut être utilisée pour enlever les pods
+pour le débogage, récupération de données, etc. Les pods ainsi supprimés seront automatiquement remplacés
+(en supposant que le nombre de réplicas n’est pas également modifié).
+
+### Scaling d'un ReplicaSet
+
+Un ReplicaSet peut facilement être scalé en mettant simplement à jour le champ `.spec.replicas`. Le contrôleur ReplicaSet
+garantit que le nombre souhaité de pods avec un sélecteur de label correspondant soient disponibles et opérationnels.
+
+### ReplicaSet en tant que Horizontal Pod Autoscaler Target
+
+Un ReplicaSet peut également être une cible pour
+[Horizontal Pod Autoscalers (HPA)](/docs/tasks/run-application/horizontal-pod-autoscale/).
+Un ReplicaSet peut être mis à l'échelle automatiquement par un HPA. Voici un exemple HPA qui cible
+le ReplicaSet que nous avons créé dans l'exemple précédent.
+
+{{< codenew file="controllers/hpa-rs.yaml" >}}
+
+Enregistrer ce manifeste dans `hpa-rs.yaml` et le soumettre à un cluster Kubernetes devrait
+créer le HPA défini qui scale automatiquement le ReplicaSet cible en fonction de l'utilisation du processeur
+des pods répliqués.
+
+```shell
+kubectl apply -f https://k8s.io/examples/controllers/hpa-rs.yaml
+```
+
+Vous pouvez aussi utiliser la commande `kubectl autoscale` pour accomplir la même chose.
+(et c'est plus facile !)
+
+```shell
+kubectl autoscale rs frontend --max=10
+```
+
+## Alternatives au ReplicaSet
+
+### Deployment (recommandé)
+
+Le [`Deployment`](/docs/concepts/workloads/controllers/deployment/) est un object qui peut posséder les ReplicaSets et les mettres à jour ainsi que leurs Pods de façon déclarative, côté serveur et avec des rolling updates.
+
+Alors que les ReplicaSets peuvent être utilisés indépendamment, ils sont principalement utilisés aujourd'hui par Deployments comme mécanisme pour orchestrer la création, suppresion et mises à jour des Pods.
+Lorsque vous utilisez des Deployments, vous n’aurez plus à vous soucier de la gestion des ReplicaSets ainsi créés.
+Les déploiements possèdent et gèrent leurs ReplicaSets.
+C'est pourquoi il est recommandé d’utiliser les déploiements lorsque vous voulez des ReplicaSets.
+
+### Pods nus
+
+Contrairement au cas où un utilisateur a créé directement des pods, un ReplicaSet remplace les pods supprimés ou terminés pour quelque raison que ce soit, par exemple en cas de défaillance d'un nœud ou de maintenance de nœud perturbateur, telle qu'une mise à jour kernel. Pour cette raison, nous vous recommandons d'utiliser un ReplicaSet même si votre application ne nécessite qu'un seul pod. Pensez-y de la même manière qu’un superviseur de processus, mais il supervise plusieurs pods sur plusieurs nœuds au lieu de processus individuels sur un seul nœud. Un ReplicaSet délègue les redémarrages de conteneurs locaux à un agent du nœud (par exemple, Kubelet ou Docker).
+
+### Job
+
+Utilisez un [`Job`](/docs/concepts/jobs/run-to-completion-finite-workloads/) au lieu d'un ReplicaSet pour les pods qui doivent se terminer seuls
+(c'est à dire des batch jobs).
+
+### DaemonSet
+
+Utilisez un [`DaemonSet`](/docs/concepts/workloads/controllers/daemonset/) au lieu d’un ReplicaSet pour les pods qui fournissent une
+fonction au niveau du noeud, comme le monitoring ou la gestion des logs de ce noeud. Ces pods ont une durée de vie qui est liée
+durée de vie d’une machine : le pod doit être en cours d’exécution sur la machine avant le démarrage des autres Pods et sont
+sûrs de se terminer lorsque la machine est prête à être redémarrée/arrêtée.
+
+### ReplicationController
+
+Les ReplicaSets sont les successeurs de [_ReplicationControllers_](/docs/concepts/workloads/controllers/replicationcontroller/).
+Les deux servent le même objectif et se comportent de la même manière, à la différence près que ReplicationController ne prend pas en charge les
+les exigences de sélecteur décrites dans le [labels user guide](/docs/concepts/overview/working-with-objects/labels/#label-selectors).
+En tant que tels, les ReplicaSets sont préférés aux ReplicationControllers.
+
+{{% /capture %}}
diff --git a/content/fr/docs/reference/glossary/annotation.md b/content/fr/docs/reference/glossary/annotation.md
new file mode 100755
index 0000000000..468d80af83
--- /dev/null
+++ b/content/fr/docs/reference/glossary/annotation.md
@@ -0,0 +1,17 @@
+---
+title: Annotation
+id: annotation
+date: 2018-04-12
+full_link: /docs/concepts/overview/working-with-objects/annotations
+short_description: >
+ Une paire clé-valeur qui est utilisée pour attacher des métadonnées arbitraires non-identifiantes à des objets.
+
+aka:
+tags:
+- fundamental
+---
+ Une paire clé-valeur qui est utilisée pour attacher des métadonnées arbitraires non-identifiantes à des objets.
+
+
+
+Les métadonnées d'une annotation peuvent être petites ou grandes, structurées ou non structurées, et peuvent inclure des caractères non autorisés par les étiquettes. Les clients tels que les outils et les librairies peuvent récupérer ces métadonnées.
diff --git a/content/fr/docs/reference/glossary/app-container.md b/content/fr/docs/reference/glossary/app-container.md
new file mode 100644
index 0000000000..4a5ece14b6
--- /dev/null
+++ b/content/fr/docs/reference/glossary/app-container.md
@@ -0,0 +1,18 @@
+---
+title: App Container
+id: app-container
+date: 2019-02-12
+full_link:
+short_description: >
+ Un conteneur utilisé pour exécuter une partie d'une charge de travail, comparable à un init conteneur.
+
+aka:
+tags:
+- workload
+---
+ Les conteneurs d'application (ou conteneurs app) sont les {{< glossary_tooltip text="containers" term_id="container" >}} dans un {{< glossary_tooltip text="pod" term_id="pod" >}} qui sont lancés après que les {{< glossary_tooltip text="init containers" term_id="init-container" >}} soient terminés.
+
+
+
+Un conteneur d'initialisation vous permet de séparer les détails d'initialisation importants pour l'ensemble du workload {{< glossary_tooltip text="workload" term_id="workload" >}}, et qui n'ont pas besoin de continuer à fonctionner une fois que le conteneur d'application est démarré.
+Si un pod n'a pas d'init conteneurs configurés, tous les conteneurs de ce pod sont des conteneurs d'application.
diff --git a/content/fr/docs/reference/glossary/application-architect.md b/content/fr/docs/reference/glossary/application-architect.md
new file mode 100644
index 0000000000..1228039ec2
--- /dev/null
+++ b/content/fr/docs/reference/glossary/application-architect.md
@@ -0,0 +1,17 @@
+---
+title: Architecte d'Application
+id: application-architect
+date: 2018-04-12
+full_link:
+short_description: >
+ Personne responsable de la conception haut niveau d'une application.
+
+aka:
+tags:
+- user-type
+---
+ Personne responsable de la conception haut niveau d'une application.
+
+
+
+Un architecte s'assure que l'implémentation d'une application lui permet d'interagir avec ses composants environnants, de manière maintenable et déployable à grande échelle. Les composants environnants comprennent les bases de données, les infrastructures de logging et autres micro-services.
diff --git a/content/fr/docs/reference/glossary/application-developer.md b/content/fr/docs/reference/glossary/application-developer.md
new file mode 100644
index 0000000000..fff90c8661
--- /dev/null
+++ b/content/fr/docs/reference/glossary/application-developer.md
@@ -0,0 +1,17 @@
+---
+title: Développeur d'Application
+id: application-developer
+date: 2018-04-12
+full_link:
+short_description: >
+ Personne qui écrit une application s'exécutant dans un cluster Kubernetes.
+
+aka:
+tags:
+- user-type
+---
+ Personne qui écrit une application s'exécutant dans un cluster Kubernetes.
+
+
+
+Un développeur d'application se concentre sur une partie de l'application. L'ampleur de son champ d'action peut varier considérablement en taille.
diff --git a/content/fr/docs/reference/glossary/certificate.md b/content/fr/docs/reference/glossary/certificate.md
new file mode 100755
index 0000000000..ef3d007091
--- /dev/null
+++ b/content/fr/docs/reference/glossary/certificate.md
@@ -0,0 +1,17 @@
+---
+title: Certificat
+id: certificate
+date: 2018-04-12
+full_link: /docs/tasks/tls/managing-tls-in-a-cluster/
+short_description: >
+ Fichier cryptograhpiquement sécurisé utilisé pour valider l'accès au cluster Kubernetes.
+
+aka:
+tags:
+- security
+---
+ Fichier cryptographiquement sécurisé utilisé pour valider l'accès au cluster Kubernetes.
+
+
+
+Les certificats permettent aux applications d'un cluster Kubernetes d'accéder à l'API Kubernetes en toute sécurité. Les certificats attestent que les clients sont autorisés à accéder à l'API.
diff --git a/content/fr/docs/reference/glossary/cla.md b/content/fr/docs/reference/glossary/cla.md
new file mode 100755
index 0000000000..95f0c99c76
--- /dev/null
+++ b/content/fr/docs/reference/glossary/cla.md
@@ -0,0 +1,17 @@
+---
+title: CLA (Contributor License Agreement)
+id: cla
+date: 2018-04-12
+full_link: https://github.com/kubernetes/community/blob/master/CLA.md
+short_description: >
+ Conditions en vertu desquelles un contributeur accorde une licence à un projet open source pour ses contributions.
+
+aka:
+tags:
+- community
+---
+ Conditions en vertu desquelles un {{< glossary_tooltip text="contributeur" term_id="contributor" >}} accorde une licence à un projet open source pour ses contributions.
+
+
+
+Les Accords de Licence de Contributeur (Contributor License Agreements) aident à résoudre les différends juridiques concernant les apports de matériel et la propriété intellectuelle.
diff --git a/content/fr/docs/reference/glossary/cloud-controller-manager.md b/content/fr/docs/reference/glossary/cloud-controller-manager.md
new file mode 100755
index 0000000000..adfe4a93b1
--- /dev/null
+++ b/content/fr/docs/reference/glossary/cloud-controller-manager.md
@@ -0,0 +1,19 @@
+---
+title: Cloud Controller Manager
+id: cloud-controller-manager
+date: 2018-04-12
+full_link: /docs/tasks/administer-cluster/running-cloud-controller/
+short_description: >
+ Le Cloud Controller Manager est une fonctionnalité alpha de la version 1.8. Dans les prochaines versions, il deviendra le moyen privilégié pour l'intégration de Kubernetes à n'importe quel cloud.
+
+aka:
+tags:
+- core-object
+- architecture
+- operation
+---
+ Le Cloud Controller Manager est une fonctionnalité alpha de la version 1.8. Dans les prochaines versions, il deviendra le moyen privilégié pour l'intégration de Kubernetes à n'importe quel cloud.
+
+
+
+Kubernetes v1.6 contient un nouveau binaire appelé cloud-controller-manager. Le cloud-controller-manager est un service qui intègre des boucles de contrôle propres au cloud. Ces boucles de contrôle spécifiques au cloud se trouvaient à l'origine dans le kube-controller-manager. Étant donné que les fournisseurs de cloud développent et mettent à jour leurs produits à un rythme différent de celui du projet Kubernetes, l'abstraction du code spécifique au fournisseur, au niveau du binaire cloud-controller-manager, permet aux fournisseurs de cloud d'évoluer indépendamment du code principal de Kubernetes.
diff --git a/content/fr/docs/reference/glossary/cloud-provider.md b/content/fr/docs/reference/glossary/cloud-provider.md
new file mode 100755
index 0000000000..9f8d5ede65
--- /dev/null
+++ b/content/fr/docs/reference/glossary/cloud-provider.md
@@ -0,0 +1,17 @@
+---
+title: Fournisseur de Cloud
+id: cloud-provider
+date: 2018-04-12
+full_link: /docs/concepts/cluster-administration/cloud-providers
+short_description: >
+ Le fournisseur de cloud est une entreprise offrant une plateforme de cloud computing, pouvant faire fonctionner des clusters Kubernetes.
+
+aka:
+tags:
+- community
+---
+ Le fournisseur de cloud est une entreprise offrant une plateforme de cloud computing, pouvant faire fonctionner des clusters Kubernetes.
+
+
+
+Les fournisseurs de cloud, parfois appelés Fournisseurs de Services Cloud (Cloud Service Providers), mettent à disposition des plate-formes de cloud computing. Ils peuvent offrir des services tels qu'une Infrastructure en tant que Service (IaaS, de l'anglais Infrastructure as a Service) ou une Plate-forme en tant que Service (PaaS, de l'anglais Platform as a Service). Les fournisseurs de cloud hébergent le cluster Kubernetes et fournissent également des services qui interagissent avec le cluster, tels que des loads balancers, des classes de stockages, etc.
diff --git a/content/fr/docs/reference/glossary/cluster-architect.md b/content/fr/docs/reference/glossary/cluster-architect.md
new file mode 100755
index 0000000000..8dde9f11e9
--- /dev/null
+++ b/content/fr/docs/reference/glossary/cluster-architect.md
@@ -0,0 +1,17 @@
+---
+title: Architecte de Cluster
+id: cluster-architect
+date: 2018-04-12
+full_link:
+short_description: >
+ Personne qui conçoit une infrastructure impliquant un ou plusieurs clusters Kubernetes.
+
+aka:
+tags:
+- user-type
+---
+ Personne qui conçoit une infrastructure impliquant un ou plusieurs clusters Kubernetes.
+
+
+
+Les architectes de cluster se préoccupent des bonnes pratiques pour les systèmes distribués, telle que la haute disponibilité et la sécurité par exemple.
diff --git a/content/fr/docs/reference/glossary/cluster-infrastructure.md b/content/fr/docs/reference/glossary/cluster-infrastructure.md
new file mode 100644
index 0000000000..d0f4a95845
--- /dev/null
+++ b/content/fr/docs/reference/glossary/cluster-infrastructure.md
@@ -0,0 +1,13 @@
+---
+title: Infrastructure de Cluster
+id: cluster-infrastructure
+date: 2019-05-12
+full_link:
+short_description: >
+ La couche d'infrastructure fournit et maintient, entre autres, les machines virtuelles, les réseaux ainsi que les groupes de sécurité.
+
+aka:
+tags:
+- operations
+---
+La couche d'infrastructure fournit et maintient, entre autres, les machines virtuelles, les réseaux ainsi que les groupes de sécurité.
diff --git a/content/fr/docs/reference/glossary/cluster-operations.md b/content/fr/docs/reference/glossary/cluster-operations.md
new file mode 100644
index 0000000000..a1cd200c47
--- /dev/null
+++ b/content/fr/docs/reference/glossary/cluster-operations.md
@@ -0,0 +1,13 @@
+---
+title: Opérations sur le Cluster
+id: cluster-operations
+date: 2019-05-12
+full_link:
+short_description: >
+ Activités telles que la mise à niveau des clusters, la mise en œuvre de la sécurité, du stockage, de l'Ingress, du réseau, de la consignation et de la surveillance, et autres opérations nécessaires pour gérer un cluster Kubernetes.
+
+aka:
+tags:
+- operations
+---
+ Activités telles que la mise à niveau des clusters, la mise en œuvre de la sécurité, du stockage, de l'Ingress, du réseau, de la consignation et de la surveillance, et autres opérations nécessaires pour gérer un cluster Kubernetes.
diff --git a/content/fr/docs/reference/glossary/cluster-operator.md b/content/fr/docs/reference/glossary/cluster-operator.md
new file mode 100755
index 0000000000..e921594312
--- /dev/null
+++ b/content/fr/docs/reference/glossary/cluster-operator.md
@@ -0,0 +1,21 @@
+---
+title: Opérateur de Cluster
+id: cluster-operator
+date: 2018-04-12
+full_link:
+short_description: >
+ Une personne qui configure, contrôle et surveille les clusters.
+
+aka:
+tags:
+- user-type
+---
+ Une personne qui configure, contrôle et surveille les clusters.
+
+
+
+Leur principale responsabilité consiste à assurer le bon fonctionnement d'un cluster, ce qui peut impliquer des activités de maintenance périodique ou des mises à niveau.
+
+{{< note >}}
+L'opérateur de cluster est différent du [modèle Opérateur](https://coreos.com/operators) complétant l'API Kubernetes.
+{{< /note >}}
diff --git a/content/fr/docs/reference/glossary/cluster.md b/content/fr/docs/reference/glossary/cluster.md
new file mode 100644
index 0000000000..fcf447b53a
--- /dev/null
+++ b/content/fr/docs/reference/glossary/cluster.md
@@ -0,0 +1,18 @@
+---
+title: Cluster
+id: cluster
+date: 2018-04-12
+full_link:
+short_description: >
+ Un ensemble de machines, appelées des "nœuds", qui exécutent des applications conteneurisées gérées par Kubernetes.
+
+aka:
+tags:
+- fundamental
+- operation
+---
+ Un ensemble de machines, appelées des "nœuds", qui exécutent des applications conteneurisées gérées par Kubernetes..
+
+
+
+Un cluster possède plusieurs nœuds travailleurs et au moins un nœud maître.
diff --git a/content/fr/docs/reference/glossary/cni.md b/content/fr/docs/reference/glossary/cni.md
new file mode 100644
index 0000000000..c3afa829d4
--- /dev/null
+++ b/content/fr/docs/reference/glossary/cni.md
@@ -0,0 +1,18 @@
+---
+title: Interface réseau de conteneurs (CNI)
+id: cni
+date: 2018-05-25
+full_link: /docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#cni
+short_description: >
+ Les plugins de l'interface réseau de conteneurs (CNI, de l'anglais Container Network Interface), sont un type de plugin réseau conforme à la spécification appc/CNI.
+
+
+aka:
+tags:
+- networking
+---
+ Les plugins de l'interface réseau de conteneurs (CNI, de l'anglais Container Network Interface), sont un type de plugin réseau conforme à la spécification appc/CNI.
+
+
+* Pour plus d'informations sur Kubernetes et le CNI, se référer [ici](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#cni).
+* Pour plus d'informations sur Kubernetes et le CNI, se référer aux ["Plugins réseau"](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#cni).
diff --git a/content/fr/docs/reference/glossary/containerd.md b/content/fr/docs/reference/glossary/containerd.md
new file mode 100644
index 0000000000..4b9f06a745
--- /dev/null
+++ b/content/fr/docs/reference/glossary/containerd.md
@@ -0,0 +1,19 @@
+---
+title: containerd
+id: containerd
+date: 2019-05-14
+full_link: https://containerd.io/docs/
+short_description: >
+ Un environnement d'exécution des conteneurs qui met l'accent sur la simplicité, la robustesse et la portabilité.
+
+
+aka:
+tags:
+- tool
+---
+ Un environnement d'exécution des conteneurs qui met l'accent sur la simplicité, la robustesse et la portabilité.
+
+
+
+Containerd est un environnement d'exécution de {{< glossary_tooltip text="conteneur" term_id="container" >}}
+qui fonctionne comme un daemon sous Linux ou Windows. Containerd s'occupe de la récupération et du stockage d'images de conteneurs, de l'exécution de conteneurs, et de l'accès au réseau, etc.
diff --git a/content/fr/docs/reference/glossary/contributor.md b/content/fr/docs/reference/glossary/contributor.md
new file mode 100755
index 0000000000..d616bccfc5
--- /dev/null
+++ b/content/fr/docs/reference/glossary/contributor.md
@@ -0,0 +1,17 @@
+---
+title: Contributeur
+id: contributor
+date: 2018-04-12
+full_link:
+short_description: >
+ Quelqu'un qui code, documente ou donne de son temps autrement, pour aider le projet ou la communauté Kubernetes.
+
+aka:
+tags:
+- community
+---
+Quelqu'un qui code, documente ou donne de son temps autrement, pour aider le projet ou la communauté Kubernetes.
+
+
+
+Les contributions comprennent les pull requests (PRs), le signalement des problèmes, les retours d'informations, les {{< glossary_tooltip text="groupes d'intérêts spéciaux (SIG, de l'anglais Special Interest Group)" term_id="sig" >}} la participation ou l'organisation des évènements de la communauté.
diff --git a/content/fr/docs/reference/glossary/cronjob.md b/content/fr/docs/reference/glossary/cronjob.md
new file mode 100755
index 0000000000..88151f6b34
--- /dev/null
+++ b/content/fr/docs/reference/glossary/cronjob.md
@@ -0,0 +1,18 @@
+---
+title: CronJob
+id: cronjob
+date: 2018-04-12
+full_link: /docs/concepts/workloads/controllers/cron-jobs/
+short_description: >
+ Gère une [Tâche](/docs/concepts/workloads/controllers/jobs-run-to-completion/) qui s'exécute périodiquement.
+
+aka:
+tags:
+- core-object
+- workload
+---
+ Gère une [Tâche](/docs/concepts/workloads/controllers/jobs-run-to-completion/) qui s'exécute périodiquement.
+
+
+
+Semblable à une ligne dans un fichier *crontab*, un objet Cronjob spécifie une planification en utilisant le format [cron](https://en.wikipedia.org/wiki/Cron).
diff --git a/content/fr/docs/reference/glossary/daemonset.md b/content/fr/docs/reference/glossary/daemonset.md
new file mode 100755
index 0000000000..da3bf4a65c
--- /dev/null
+++ b/content/fr/docs/reference/glossary/daemonset.md
@@ -0,0 +1,19 @@
+---
+title: DaemonSet
+id: daemonset
+date: 2018-04-12
+full_link: /docs/concepts/workloads/controllers/daemonset
+short_description: >
+ S'assure qu'une copie d'un Pod s'exécute sur un ensemble de nœuds d'un cluster.
+
+aka:
+tags:
+- fundamental
+- core-object
+- workload
+---
+ S'assure qu'une copie d'un {{< glossary_tooltip text="Pod" term_id="pod" >}} s'exécute sur un ensemble de nœuds d'un {{< glossary_tooltip text="cluster" term_id="cluster" >}}.
+
+
+
+Utilisé pour déployer des démons système tels que les collecteurs de logs et les agents de surveillance qui doivent généralement fonctionner sur chaque {{< glossary_tooltip text="nœud" term_id="node" >}}.
diff --git a/content/fr/docs/reference/glossary/data-plane.md b/content/fr/docs/reference/glossary/data-plane.md
new file mode 100644
index 0000000000..076db1fdde
--- /dev/null
+++ b/content/fr/docs/reference/glossary/data-plane.md
@@ -0,0 +1,13 @@
+---
+title: Plan de Données
+id: data-plane
+date: 2019-05-12
+full_link:
+short_description: >
+ Couche fournissant des capacités comme le CPU, la mémoire, le réseau et le stockage afin que les conteneurs puissent fonctionner et se connecter à un réseau.
+
+aka:
+tags:
+- fundamental
+---
+ Couche fournissant des capacités comme le CPU, la mémoire, le réseau et le stockage afin que les conteneurs puissent fonctionner et se connecter à un réseau.
diff --git a/content/fr/docs/reference/glossary/deployment.md b/content/fr/docs/reference/glossary/deployment.md
new file mode 100755
index 0000000000..a6b07def33
--- /dev/null
+++ b/content/fr/docs/reference/glossary/deployment.md
@@ -0,0 +1,19 @@
+---
+title: Déploiement
+id: deployment
+date: 2018-04-12
+full_link: /docs/concepts/workloads/controllers/deployment/
+short_description: >
+ Objet API gérant une application répliquée.
+
+aka:
+tags:
+- fundamental
+- core-object
+- workload
+---
+ Objet API gérant une application répliquée.
+
+
+
+Chaque réplique est représentée par un {{< glossary_tooltip text="Pod" term_id="pod" >}}, et les Pods sont répartis entre les nœuds d'un cluster.
diff --git a/content/fr/docs/reference/glossary/developer.md b/content/fr/docs/reference/glossary/developer.md
new file mode 100755
index 0000000000..ba73628ae6
--- /dev/null
+++ b/content/fr/docs/reference/glossary/developer.md
@@ -0,0 +1,18 @@
+---
+title: Développeur (désambiguïsation)
+id: developer
+date: 2018-04-12
+full_link:
+short_description: >
+ Peut faire référence à un Développeur d'Application, Contributeur de Code ou à un Développeur de Plate-forme.
+
+aka:
+tags:
+- community
+- user-type
+---
+ Peut faire référence à un {{< glossary_tooltip text="Développeur d'Application" term_id="application-developer" >}}, {{< glossary_tooltip text="Contributeur de Code" term_id="code-contributor" >}} ou à un {{< glossary_tooltip text="Développeur de Plate-forme" term_id="platform-developer" >}}.
+
+
+
+Ce terme ambigu peut avoir différentes significations selon le contexte.
diff --git a/content/fr/docs/reference/glossary/device-plugin.md b/content/fr/docs/reference/glossary/device-plugin.md
new file mode 100644
index 0000000000..9178e79ca2
--- /dev/null
+++ b/content/fr/docs/reference/glossary/device-plugin.md
@@ -0,0 +1,17 @@
+---
+title: Plugin de Périphérique
+id: device-plugin
+date: 2019-02-02
+full_link: /docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/
+short_description: >
+ Les Plugins de Périphériques sont des conteneurs fonctionnant dans Kubernetes, donnant accès à une ressource spécifique d'un fournisseur.
+aka:
+tags:
+- fundamental
+- extension
+---
+ Les Plugins de Périphériques sont des conteneurs fonctionnant dans Kubernetes, donnant accès à une ressource spécifique d'un fournisseur.
+
+
+
+[Les Plugins de Périphériques](/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/) sont des conteneurs fonctionnant dans Kubernetes, donnant accès à une ressource spécifique d'un fournisseur. Les Plugins de Périphériques communiquent ces ressources à kubelet et peuvent être déployés manuellement ou sous forme de DaemonSet, plutôt que d'écrire du code Kubernetes personnalisé.
diff --git a/content/fr/docs/reference/glossary/docker.md b/content/fr/docs/reference/glossary/docker.md
new file mode 100644
index 0000000000..c02921ade8
--- /dev/null
+++ b/content/fr/docs/reference/glossary/docker.md
@@ -0,0 +1,17 @@
+---
+title: Docker
+id: docker
+date: 2018-04-12
+full_link: https://docs.docker.com/engine/
+short_description: >
+ Docker est un logiciel fournissant une virtualisation au niveau du système d'exploitation, également connue sous le nom de conteneurs.
+
+aka:
+tags:
+- fundamental
+---
+Docker (spécifiquement, Docker Engine) est un logiciel fournissant une virtualisation au niveau du système d'exploitation également connue sous le nom {{< glossary_tooltip text="conteneurs" term_id="container" >}}}.
+
+
+
+Docker utilise les fonctionnalités d'isolation du kernel Linux telles que les cgroups et les kernel namespaces, ainsi qu'un système de fichiers compatible union comme OverlayFS et d'autres pour permettre aux conteneurs de fonctionner indépendamment dans une seule instance Linux, évitant ainsi le démarrage et la maintenance des machines virtuelles (VMs).
diff --git a/content/fr/docs/reference/glossary/image.md b/content/fr/docs/reference/glossary/image.md
new file mode 100644
index 0000000000..5c5715f9f4
--- /dev/null
+++ b/content/fr/docs/reference/glossary/image.md
@@ -0,0 +1,17 @@
+---
+title: Image
+id: image
+date: 2018-04-12
+full_link:
+short_description: >
+ Instance stockée d'un conteneur qui contient un ensemble de logiciels nécessaires à l'exécution d'une application.
+
+aka:
+tags:
+- fundamental
+---
+ Instance stockée d'un conteneur qui contient un ensemble de logiciels nécessaires à l'exécution d'une application.
+
+
+
+Une façon d'empaqueter un logiciel qui permet de le stocker dans un registre de conteneurs, de le récupérer dans un système local et de l'exécuter comme une application. Des métadonnées sont incluses dans l'image qui peut indiquer quel exécutable exécuter, qui l'a construit, et d'autres informations.
diff --git a/content/fr/docs/reference/glossary/kubelet.md b/content/fr/docs/reference/glossary/kubelet.md
new file mode 100644
index 0000000000..5f2ba823ee
--- /dev/null
+++ b/content/fr/docs/reference/glossary/kubelet.md
@@ -0,0 +1,18 @@
+---
+title: Kubelet
+id: kubelet
+date: 2018-04-12
+full_link: /docs/reference/generated/kubelet
+short_description: >
+ Un agent qui s'exécute sur chaque nœud du cluster. Il s'assure que les conteneurs fonctionnent dans un pod.
+
+aka:
+tags:
+- fundamental
+- core-object
+---
+ Un agent qui s'exécute sur chaque nœud du cluster. Il s'assure que les conteneurs fonctionnent dans un pod.
+
+
+
+Le kubelet prend un ensemble de PodSpecs fournis par divers mécanismes et s'assure du fonctionnement et de la santé des conteneurs décrits dans ces PodSpecs. Le kubelet ne gère que les conteneurs créés par Kubernetes.
diff --git a/content/fr/docs/reference/glossary/taint.md b/content/fr/docs/reference/glossary/taint.md
new file mode 100644
index 0000000000..3dbc1e7bb1
--- /dev/null
+++ b/content/fr/docs/reference/glossary/taint.md
@@ -0,0 +1,18 @@
+---
+title: Taint
+id: taint
+date: 2019-01-11
+full_link: /docs/concepts/configuration/taint-and-toleration/
+short_description: >
+ Un objet de base composé de trois caractéristiques requises : clé, valeur et effet. Les marquages empêchent l'ordonnancement des pods sur les nœuds ou les groupes de nœuds.
+
+aka:
+tags:
+- core-object
+- fundamental
+---
+ Un objet de base composé de trois caractéristiques requises : clé, valeur et effet. Les marquages empêchent l'ordonnancement des pods sur les nœuds ou les groupes de nœuds.
+
+
+
+Marquages et {{< glossary_tooltip text="tolérances" term_id="toleration" >}}} travaillent ensemble pour s'assurer que les pods ne sont pas ordonnancés sur des nœuds inappropriés. Un ou plusieurs marquages sont appliqués à un {{< glossary_tooltip text="nœud" term_id="node" >}}. Un nœud ne doit ordonnancer que des pods ayant les tolérances correspondantes pour les marquages configurés.
diff --git a/content/fr/docs/reference/kubectl/cheatsheet.md b/content/fr/docs/reference/kubectl/cheatsheet.md
index a9f35bf4e9..a1f8939278 100644
--- a/content/fr/docs/reference/kubectl/cheatsheet.md
+++ b/content/fr/docs/reference/kubectl/cheatsheet.md
@@ -140,7 +140,7 @@ kubectl get services --sort-by=.metadata.name # Liste les services classés par
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# Affiche la version des labels de tous les pods ayant un label app=cassandra
-kubectl get pods --selector=app=cassandra rc -o \
+kubectl get pods --selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'
# Affiche tous les noeuds, en utilisant un sélecteur pour exclure ceux ayant un label 'node-role.kubernetes.io/master'
diff --git a/content/fr/docs/setup/independent/create-cluster-kubeadm.md b/content/fr/docs/setup/independent/create-cluster-kubeadm.md
index 12c5a5ba77..8f93ee7f50 100644
--- a/content/fr/docs/setup/independent/create-cluster-kubeadm.md
+++ b/content/fr/docs/setup/independent/create-cluster-kubeadm.md
@@ -307,7 +307,7 @@ Pour que Calico fonctionne correctement, vous devez passer `--pod-network-cidr =
Notez que Calico fonctionne uniquement sur `amd64`,` arm64`, `ppc64le` et` s390x`.
```shell
-kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml
+kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
```
{{% /tab %}}
@@ -319,7 +319,7 @@ Pour que Canal fonctionne correctement, `--pod-network-cidr = 10.244.0.0 / 16` d
` kubeadm init`. Notez que Canal ne fonctionne que sur `amd64`.
```shell
-kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/canal.yaml
+kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/canal.yaml
```
{{% /tab %}}
diff --git a/content/fr/docs/tasks/configure-pod-container/assign-memory-resource.md b/content/fr/docs/tasks/configure-pod-container/assign-memory-resource.md
new file mode 100644
index 0000000000..533578e6b5
--- /dev/null
+++ b/content/fr/docs/tasks/configure-pod-container/assign-memory-resource.md
@@ -0,0 +1,335 @@
+---
+title: Allouer des ressources mémoire aux conteneurs et aux pods
+content_template: templates/task
+weight: 10
+---
+
+{{% capture overview %}}
+
+Cette page montre comment assigner une mémoire *request* et une mémoire *limit* à un conteneur. Un conteneur est garanti d'avoir autant de mémoire qu'il le demande, mais n'est pas autorisé à consommer plus de mémoire que sa limite.
+
+{{% /capture %}}
+
+{{% capture prerequisites %}}
+
+{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+
+Chaque nœud de votre cluster doit avoir au moins 300 MiB de mémoire.
+
+Pour quelques étapes de cette page, vous devez lancer
+[metrics-server] (https://github.com/kubernetes-incubator/metrics-server)
+dans votre cluster. Si vous avez déjà metrics-server vous pouvez sauter ces étapes.
+
+Si vous utilisez Minikube, exécutez la commande suivante pour activer metrics-server :
+
+```shell
+minikube addons enable metrics-server
+```
+
+Pour voir si le metrics-server fonctionne, ou un autre fournisseur de l'API des métriques de ressources (`metrics.k8s.io`), exécutez la commande suivante :
+
+```shell
+kubectl get apiservices
+```
+
+Si l'API des métriques de ressources est disponible, la sortie inclura une référence à `metrics.k8s.io`.
+
+```shell
+NAME
+v1beta1.metrics.k8s.io
+```
+
+{{% /capture %}}
+
+{{% capture steps %}}
+
+## Créer un namespace
+
+Créez un namespace de manière à ce que les ressources que vous créez dans cet exercice soient isolées du reste de votre cluster.
+
+```shell
+kubectl create namespace mem-example
+```
+
+## Spécifier une demande de mémoire et une limite de mémoire
+
+Pour spécifier une demande de mémoire pour un conteneur, incluez le champ `resources:requests`.
+dans le manifeste des ressources du conteneur. Pour spécifier une limite de mémoire, incluez `resources:limits`.
+
+Dans cet exercice, vous créez un pod qui possède un seul conteneur. Le conteneur dispose d'une demande de mémoire de 100 MiB et une limite de mémoire de 200 MiB. Voici le fichier de configuration
+pour le Pod :
+
+{{< codenew file="pods/resource/memory-request-limit.yaml" >}}
+
+La section `args` de votre fichier de configuration fournit des arguments pour le conteneur lorsqu'il démarre.
+Les arguments `"--vm-bytes", "150M"` indiquent au conteneur d'allouer 150 MiB de mémoire.
+
+Créez le Pod:
+
+```shell
+kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit.yaml --namespace=mem-example
+```
+
+Vérifiez que le Pod fonctionne :
+
+```shell
+kubectl get pod memory-demo --namespace=mem-example
+```
+
+Consultez des informations détaillées sur le Pod :
+
+```shell
+kubectl get pod memory-demo --output=yaml --namespace=mem-example
+```
+
+La sortie montre que le conteneur dans le Pod a une demande de mémoire de 100 MiB et une limite de mémoire de 200 MiB.
+
+
+```yaml
+...
+resources:
+ limits:
+ memory: 200Mi
+ requests:
+ memory: 100Mi
+...
+```
+
+Exécutez `kubectl top` pour récupérer les métriques du pod :
+
+```shell
+kubectl top pod memory-demo --namespace=mem-example
+```
+
+La sortie montre que le Pod utilise environ 162.900.000 bytes de mémoire, qui est d'environ 150 MiB. Ce qui est supérieur à la demande de 100 MiB du Pod, mais ne dépassant pas la limite de 200 Mio de Pod.
+
+```
+NAME CPU(cores) MEMORY(bytes)
+memory-demo 162856960
+```
+
+Supprimez votre Pod :
+
+```shell
+kubectl delete pod memory-demo --namespace=mem-example
+```
+
+## Dépasser la limite de mémoire d'un conteneur
+
+Un conteneur peut dépasser sa demande de mémoire si le nœud dispose de la mémoire disponible. Cependant, un conteneur n'est pas autorisé à utiliser plus que sa limite de mémoire. Si un conteneur alloue plus de mémoire que sa limite, le Conteneur devient un candidat à la terminaison. Si le conteneur continue à consommer de la mémoire au-delà de sa limite, le conteneur est arrêté.
+Si un conteneur terminé peut être redémarré, le kubelet le redémarre, comme pour tout autre type d'échec d'exécution.
+
+Dans cet exercice, vous créez un Pod qui tente d'allouer plus de mémoire que sa limite.
+Voici le fichier de configuration d'un Pod qui contient un conteneur avec une demande de mémoire de 50 MiB et une limite de mémoire de 100 MiB :
+
+{{< codenew file="pods/resource/memory-request-limit-2.yaml" >}}
+
+Dans la section `args` du fichier de configuration, vous pouvez voir que le conteneur
+tentera d'allouer 250 MiB de mémoire, ce qui est bien au-dessus de la limite de 100 MiB.
+
+Créez le Pod :
+
+```shell
+kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit-2.yaml --namespace=mem-example
+```
+
+Consultez des informations détaillées sur le Pod :
+
+```shell
+kubectl get pod memory-demo-2 --namespace=mem-example
+```
+
+A ce niveau, le conteneur est soit en train de tourner, soit stoppé. Répétez la commande précédente jusqu'à ce que le conteneur soit terminé :
+
+```shell
+NAME READY STATUS RESTARTS AGE
+memory-demo-2 0/1 OOMKilled 1 24s
+```
+
+Obtenez une vue plus détaillée de l'état du conteneur :
+
+```shell
+kubectl get pod memory-demo-2 --output=yaml --namespace=mem-example
+```
+
+La sortie indique que le conteneur a été stoppé suite à un manque de mémoire (OOM) :
+
+```shell
+lastState:
+ terminated:
+ containerID: docker://65183c1877aaec2e8427bc95609cc52677a454b56fcb24340dbd22917c23b10f
+ exitCode: 137
+ finishedAt: 2017-06-20T20:52:19Z
+ reason: OOMKilled
+ startedAt: null
+```
+
+Le conteneur dans cet exercice pourra être redémarré, ainsi le kubelet le redémarre. Répéter
+cette commande plusieurs fois pour s'assurer que le conteneur est stoppé et redémarré d'une manière répététive :
+
+```shell
+kubectl get pod memory-demo-2 --namespace=mem-example
+```
+
+La sortie permet de voir que le conteneur est stoppé, redémarré, stoppé à nouveau, redémarré, et ainsi de suite :
+
+```
+kubectl get pod memory-demo-2 --namespace=mem-example
+NAME READY STATUS RESTARTS AGE
+memory-demo-2 0/1 OOMKilled 1 37s
+```
+```
+
+kubectl get pod memory-demo-2 --namespace=mem-example
+NAME READY STATUS RESTARTS AGE
+memory-demo-2 1/1 Running 2 40s
+```
+
+Affichez des informations détaillées sur l'historique du Pod :
+
+```
+kubectl describe pod memory-demo-2 --namespace=mem-example
+```
+
+La sortie indique que le conteneur se démarre et échoue continuellement :
+
+```
+... Normal Created Created container with id 66a3a20aa7980e61be4922780bf9d24d1a1d8b7395c09861225b0eba1b1f8511
+... Warning BackOff Back-off restarting failed container
+```
+
+Affichez des informations détaillées sur les nœuds de votre cluster :
+
+```
+kubectl describe nodes
+```
+
+La sortie inclut un enregistrement de la mise à mort du conteneur suite à une condition hors mémoire :
+
+```
+Warning OOMKilling Memory cgroup out of memory: Kill process 4481 (stress) score 1994 or sacrifice child
+```
+
+Supprimez votre Pod :
+
+```shell
+kubectl delete pod memory-demo-2 --namespace=mem-example
+```
+
+## Spécifiez une demande de mémoire trop volumineuse pour vos nœuds.
+
+Les demandes de mémoire et les limites sont associées aux conteneurs, mais il est utile de réfléchir avant tout à la capacité de demande et limite mémoire des pods.
+La demande de mémoire pour le Pod est la somme des demandes de mémoire pour tous ses conteneurs. De même, la mémoire limite pour le Pod est la somme des limites de tous ses Conteneurs.
+
+L'ordonnancement des modules est basé sur les demandes. Un Pod est schedulé pour se lancer sur un Nœud uniquement si le Nœud dispose de suffisamment de mémoire disponible pour répondre à la demande de mémoire du Pod.
+
+Dans cet exercice, vous allez créer un Pod dont la demande de mémoire est si importante qu'elle dépasse la capacité de la mémoire de n'importe quel nœud de votre cluster. Voici le fichier de configuration d'un Pod qui possède un seul conteneur avec une demande de 1000 GiB de mémoire, qui dépasse probablement la capacité de tous les nœuds de votre cluster.
+
+{{< codenew file="pods/resource/memory-request-limit-3.yaml" >}}
+
+Créez le Pod :
+
+```shell
+kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit-3.yaml --namespace=mem-example
+```
+
+Affichez l'état du Pod :
+
+```shell
+kubectl get pod memory-demo-3 --namespace=mem-example
+```
+
+La sortie indique que l'état du Pod est PENDING. En d'autres termes, le Pod n'est pas programmé pour tourner sur aucun Nœud, et il restera indéfiniment dans l'état PENDING :
+
+```
+kubectl get pod memory-demo-3 --namespace=mem-example
+NAME READY STATUS RESTARTS AGE
+memory-demo-3 0/1 Pending 0 25s
+```
+
+Affichez des informations détaillées sur le Pod, y compris les événements :
+
+```shell
+kubectl describe pod memory-demo-3 --namespace=mem-example
+```
+
+La sortie indique que le conteneur ne peut pas être planifié par manque de mémoire sur les nœuds :
+
+```shell
+Events:
+ ... Reason Message
+ ------ -------
+ ... FailedScheduling No nodes are available that match all of the following predicates:: Insufficient memory (3).
+```
+
+## Unités de mémoire
+
+La ressource mémoire est mesurée en bytes. Vous pouvez exprimer la mémoire sous la forme d'un nombre entier simple ou d'un nombre avec l'un de ces suffixes : E, P, T, G, M, K, Ei, Pi, Ti, Gi, Mi, Ki.
+Par exemple, les valeurs suivantes représentent approximativement la même valeur :
+
+```shell
+128974848, 129e6, 129M , 123Mi
+```
+
+Supprimez votre Pod :
+
+```shell
+kubectl delete pod memory-demo-3 --namespace=mem-example
+```
+
+## Si vous ne spécifiez pas de limite de mémoire
+
+Si vous ne spécifiez pas de limite de mémoire pour un conteneur, l'une des situations suivantes s'applique :
+
+* Le conteneur n'a pas de limite maximale quant à la quantité de mémoire qu'il utilise. Le conteneur
+pourrait utiliser toute la mémoire disponible sur le nœud où il est en cours d'exécution, ce qui pourrait à son tour invoquer le OOM killer. De plus, dans le cas d'un OOM Kill, un conteneur sans limite de ressources aura plus de chance d'être stoppé.
+
+* Le conteneur s'exécute dans un namespace qui a une limite de mémoire par défaut, d'ou le conteneur est automatiquement affecté cette limite par defaut. Les administrateurs du cluster peuvent utiliser un [LimitRange](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#limitrange-v1-core)
+pour spécifier une valeur par défaut pour la limite de mémoire.
+
+## Motivation pour les demandes et les limites de mémoire
+
+En configurant les demandes de mémoire et les limites pour les conteneurs qui s'exécutent dans votre cluster.
+vous pouvez utiliser efficacement les ressources mémoire disponibles sur les noeuds de votre cluster. En gardant la demande de mémoire d'un Pod basse, vous donnez au Pod une bonne chance d'être schedulé. En ayant une limite de mémoire supérieure à la demande de mémoire, vous accomplissez deux choses :
+
+* Le Pod peut avoir des éclats d'activités où il fait usage de la mémoire qui se trouve être disponible.
+* La quantité de mémoire qu'un Pod peut utiliser pendant un éclat d'activité est limitée à une quantité raisonnable.
+
+## Clean up
+
+Supprimez votre namespace. Ceci va supprimer tous les Pods que vous avez créés dans cet exercice :
+
+```shell
+kubectl delete namespace mem-example
+```
+
+{{% /capture %}}
+
+{{% capture whatsnext %}}
+
+### Pour les développeurs d'applications
+
+* [Allocation des ressources CPU aux conteneurs et pods](/docs/tasks/configure-pod-container/assign-cpu-resource/)
+
+* [Configuration de la qualité de service pour les pods](/docs/tasks/configure-pod-container/quality-service-pod/)
+
+### Pour les administrateurs de cluster
+
+* [Configuration des demandes et des limites de mémoire par défaut pour un Namespace](/docs/tasks/administer-cluster/memory-default-namespace/)
+
+* [Configuration des demandes et des limites par défaut de CPU pour un Namespace](/docs/tasks/administer-cluster/cpu-default-namespace/)
+
+* [Configuration des contraintes de mémoire minimales et maximales pour un Namespace](/docs/tasks/administer-cluster/memory-constraint-namespace/)
+
+* [Configuration des contraintes minimales et maximales du CPU pour un Namespace](/docs/tasks/administer-cluster/cpu-constraint-namespace/)
+
+* [Configuration des quotas de mémoire et de CPU pour un Namespace](/docs/tasks/administer-cluster/quota-memory-cpu-namespace/)
+
+* [Configuration du quota de pods pour un Namespace](/docs/tasks/administer-cluster/quota-pod-namespace/)
+
+* [Configuration des quotas pour les objets API](/docs/tasks/administer-cluster/quota-api-object/)
+
+{{% /capture %}}
+
+
+
diff --git a/content/fr/docs/tasks/tools/install-kubectl.md b/content/fr/docs/tasks/tools/install-kubectl.md
new file mode 100644
index 0000000000..9582010e71
--- /dev/null
+++ b/content/fr/docs/tasks/tools/install-kubectl.md
@@ -0,0 +1,434 @@
+---
+reviewers:
+- remyleone
+- rbenzair
+title: Installer et configurer kubectl
+description: Installation et configuration de kubectl
+content_template: templates/task
+weight: 10
+card:
+ name: tasks
+ weight: 20
+ title: Installer kubectl
+---
+
+{{% capture overview %}}
+L'outil en ligne de commande de kubernetes, [kubectl](/docs/user-guide/kubectl/), vous permet d'exécuter des commandes dans les clusters Kubernetes. Vous pouvez utiliser kubectl pour déployer des applications, inspecter et gérer les ressources du cluster et consulter les logs. Pour une liste complète des opérations kubectl, voir [Aperçu de kubectl](/fr/docs/reference/kubectl/overview/).
+{{% /capture %}}
+
+{{% capture prerequisites %}}
+Vous devez utiliser une version de kubectl qui différe seulement d'une version mineure de la version de votre cluster. Par exemple, un client v1.2 doit fonctionner avec un master v1.1, v1.2 et v1.3. L'utilisation de la dernière version de kubectl permet d'éviter des problèmes imprévus.
+{{% /capture %}}
+
+{{% capture steps %}}
+
+## Installer kubectl sur Linux
+
+### Installer le binaire de kubectl avec curl sur Linux
+
+1. Téléchargez la dernière release avec la commande :
+
+ ```
+ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
+ ```
+
+ Pour télécharger une version spécifique, remplacez `$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)` avec la version spécifique.
+
+ Par exemple, pour télécharger la version {{< param "fullversion" >}} sur Linux, tapez :
+
+ ```
+ curl -LO https://storage.googleapis.com/kubernetes-release/release/{{< param "fullversion" >}}/bin/linux/amd64/kubectl
+ ```
+
+2. Rendez le binaire kubectl exécutable.
+
+ ```
+ chmod +x ./kubectl
+ ```
+
+3. Déplacez le binaire dans votre PATH.
+
+ ```
+ sudo mv ./kubectl /usr/local/bin/kubectl
+ ```
+4. Testez pour vous assurer que la version que vous avez installée est à jour:
+
+ ```
+ kubectl version
+ ```
+
+### Installation à l'aide des gestionnaires des paquets natifs
+
+{{< tabs name="kubectl_install" >}}
+{{< tab name="Ubuntu, Debian or HypriotOS" codelang="bash" >}}
+sudo apt-get update && sudo apt-get install -y apt-transport-https
+curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
+echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
+sudo apt-get update
+sudo apt-get install -y kubectl
+{{< /tab >}}
+{{< tab name="CentOS, RHEL or Fedora" codelang="bash" >}}cat < /etc/yum.repos.d/kubernetes.repo
+[kubernetes]
+name=Kubernetes
+baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
+enabled=1
+gpgcheck=1
+repo_gpgcheck=1
+gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
+EOF
+yum install -y kubectl
+{{< /tab >}}
+{{< /tabs >}}
+
+
+### Installer avec snap
+
+Si vous êtes sur Ubuntu ou une autre distribution Linux qui supporte le gestionnaire de paquets [snap](https://snapcraft.io/docs/core/install), kubectl est disponible comme application [snap](https://snapcraft.io/).
+
+1. Passez à l'utilisateur snap et exécutez la commande d'installation :
+
+ ```
+ sudo snap install kubectl --classic
+ ```
+
+2. Testez pour vous assurer que la version que vous avez installée est à jour :
+
+ ```
+ kubectl version
+ ```
+
+## Installer kubectl sur macOS
+
+### Installer le binaire kubectl avec curl sur macOS
+
+1. Téléchargez la dernière release:
+
+ ```
+ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
+ ```
+
+ Pour télécharger une version spécifique, remplacez `$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)` avec la version spécifique.
+
+ Par exemple, pour télécharger la version {{< param "fullversion" >}} sur macOS, tapez :
+
+ ```
+ curl -LO https://storage.googleapis.com/kubernetes-release/release/{{< param "fullversion" >}}/bin/darwin/amd64/kubectl
+ ```
+
+2. Rendrez le binaire kubectl exécutable.
+
+ ```
+ chmod +x ./kubectl
+ ```
+
+3. Déplacez le binaire dans votre PATH.
+
+ ```
+ sudo mv ./kubectl /usr/local/bin/kubectl
+ ```
+4. Testez pour vous assurer que la version que vous avez installée est à jour:
+
+ ```
+ kubectl version
+ ```
+
+### Installer avec Homebrew sur macOS
+
+Si vous êtes sur MacOS et que vous utilisez le gestionnaire de paquets [Homebrew](https://brew.sh/), vous pouvez installer kubectl avec Homebrew.
+
+1. Exécutez la commande d'installation:
+
+ ```
+ brew install kubernetes-cli
+ ```
+
+2. Testez pour vous assurer que la version que vous avez installée est à jour:
+
+ ```
+ kubectl version
+ ```
+
+### Installer avec Macports sur macOS
+
+Si vous êtes sur MacOS et que vous utilisez le gestionnaire de paquets [Macports](https://macports.org/), vous pouvez installer kubectl avec Macports.
+
+1. Exécuter la commande d'installation:
+
+ ```
+ sudo port selfupdate
+ sudo port install kubectl
+ ```
+
+2. Testez pour vous assurer que la version que vous avez installée est à jour:
+
+ ```
+ kubectl version
+ ```
+
+## Installer kubectl sur Windows
+
+### Installer le binaire kubectl avec curl sur Windows
+
+1. Téléchargez la dernière release {{< param "fullversion" >}} depuis [ce lien](https://storage.googleapis.com/kubernetes-release/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe).
+
+ Ou si vous avez `curl` installé, utilisez cette commande:
+
+ ```
+ curl -LO https://storage.googleapis.com/kubernetes-release/release/{{< param "fullversion" >}}/bin/windows/amd64/kubectl.exe
+ ```
+
+ Pour connaître la dernière version stable (par exemple, en scripting), jetez un coup d'oeil à [https://storage.googleapis.com/kubernetes-release/release/stable.txt](https://storage.googleapis.com/kubernetes-release/release/stable.txt).
+
+2. Ajoutez le binaire dans votre PATH.
+3. Testez pour vous assurer que la version que vous avez installée est à jour:
+
+ ```
+ kubectl version
+ ```
+
+### Installer avec Powershell de PSGallery
+
+Si vous êtes sous Windows et que vous utilisez le gestionnaire de paquets [Powershell Gallery](https://www.powershellgallery.com/) , vous pouvez installer et mettre à jour kubectl avec Powershell.
+
+1. Exécutez les commandes d'installation (spécifier le `DownloadLocation`):
+
+ ```
+ Install-Script -Name install-kubectl -Scope CurrentUser -Force
+ install-kubectl.ps1 [-DownloadLocation ]
+ ```
+
+ {{< note >}}Si vous ne spécifiez pas un `DownloadLocation`, `kubectl` sera installé dans le répertoire temp de l'utilisateur.{{< /note >}}
+
+ Le programme d'installation creé `$HOME/.kube` qui est suivie par la création d'un fichier de configuration
+
+2. Testez pour vous assurer que la version que vous avez installée est à jour:
+
+ ```
+ kubectl version
+ ```
+
+ {{< note >}}La mise à jour de l'installation s'effectue en réexécutant les deux commandes listées à l'étape 1.{{< /note >}}
+
+### Installer sur Windows avec Chocolatey ou Scoop
+
+Pour installer kubectl sur Windows, vous pouvez utiliser le gestionnaire de paquets [Chocolatey](https://chocolatey.org) ou l'installateur en ligne de commande [Scoop](https://scoop.sh).
+{{< tabs name="kubectl_win_install" >}}
+{{% tab name="choco" %}}
+
+ choco install kubernetes-cli
+
+{{% /tab %}}
+{{% tab name="scoop" %}}
+
+ scoop install kubectl
+
+{{% /tab %}}
+{{< /tabs >}}
+2. Testez pour vous assurer que la version que vous avez installée est à jour:
+
+ ```
+ kubectl version
+ ```
+
+3. Accédez à votre répertoire personnel:
+
+ ```
+ cd %USERPROFILE%
+ ```
+4. Créez le répertoire `.kube`:
+
+ ```
+ mkdir .kube
+ ```
+
+5. Allez dans le répertoire `.kube` que vous venez de créer:
+
+ ```
+ cd .kube
+ ```
+
+6. Configurez kubectl pour utiliser un remote cluster Kubernetes:
+
+ ```
+ New-Item config -type file
+ ```
+
+ {{< note >}}Editez le fichier de configuration avec un éditeur de texte de votre choix, tel que Notepad.{{< /note >}}
+
+## Télécharger en tant qu'élément du SDK Google Cloud
+
+Vous pouvez installer kubectl en tant qu'élément du SDK Google Cloud.
+
+1. Installer [Google Cloud SDK](https://cloud.google.com/sdk/).
+2. Exécutez la commande d'installation `kubectl`:
+
+ ```
+ gcloud components install kubectl
+ ```
+
+3. Testez pour vous assurer que la version que vous avez installée est à jour:
+
+ ```
+ kubectl version
+ ```
+
+## Vérification de la configuration de kubectl
+
+Pour permettre à kubectl de trouver et d'accéder à un cluster Kubernetes, il lui faut un [fichier kubeconfig](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/), qui est créé automatiquement lorsque vous créez un cluster avec `kube-up.sh` ou en déployant un cluster Minikube avec succès. Par défaut, la configuration de kubectl est située sous `~/.kube/config`.
+
+Vérifiez que kubectl est correctement configuré en obtenant l'état du cluster:
+
+```shell
+kubectl cluster-info
+```
+Si vous voyez une réponse avec une URL, kubectl est correctement configuré pour accéder à votre cluster.
+
+Si vous voyez un message similaire à celui qui suit, kubectl n'est pas configuré correctement ou n'est pas capable de se connecter à un cluster Kubernetes.
+
+```shell
+The connection to the server was refused - did you specify the right host or port?
+```
+
+Si par exemple, vous avez l'intention d'exécuter un cluster Kubernetes sur votre machine (localement), vous aurez besoin d'un outil comme Minikube pour être installé en premier et exécuter à nouveau les commandes décrites ci-dessus.
+
+Si kubectl cluster-info retourne la réponse en url mais que vous ne pouvez pas accéder à votre cluster, vous pouvez vérifier s'il est configuré correctement, en utilisant:
+
+```shell
+kubectl cluster-info dump
+```
+
+## Configurations kubectl optionnelles
+
+### Activation de l'auto-complétion de shell
+
+kubectl fournit un support d'auto-complétion pour Bash et Zsh, ce qui peut vous éviter beaucoup de temps de saisie.
+
+Vous trouverez ci-dessous les étapes à suivre pour configurer l'auto-complétion pour Bash (y compris la différence entre Linux et MacOS) et Zsh.
+
+{{< tabs name="kubectl_autocompletion" >}}
+
+{{% tab name="Bash on Linux" %}}
+
+### Introduction
+
+Le script de complétion kubectl pour Bash peut être généré avec la commande `kubectl completion bash`. Sourcer le script de completion dans votre shell permet l'auto-complétion de kubectl.
+
+En revanche, le script de complétion dépend de [**bash-completion**](https://github.com/scop/bash-completion), ce qui implique que vous devez d'abord installer ce logiciel (vous pouvez tester si vous avez déjà installé bash-completion en utilisant `type _init_completion`).
+
+### Installer bash-completion
+
+bash-completion est fourni par plusieurs gestionnaires de paquets (voir [ici](https://github.com/scop/bash-completion#installation)). Vous pouvez l'installer avec `apt-get install bash-completion` or `yum install bash-completion`, etc.
+
+Les commandes ci-dessus créent `/usr/share/bash-completion/bash_completion`, qui est le script principal de bash-completion. En fonction de votre gestionnaire de paquets, vous devez manuellement sourcer ce fichier dans votre `~/.bashrc`.
+
+Il vous suffit de recharger votre shell et de lancer `type _init_completion`. Si la commande réussit, vous êtes déjà configuré, sinon ajoutez le suivant à votre fichier `~/.bashrc' :
+
+```shell
+source /usr/share/bash-completion/bash_completion
+```
+
+Rechargez votre shell et vérifiez que bash-completion est correctement installé en tapant `type _init_completion`.
+
+### Activer l'auto-complétion de kubectl
+
+Vous devez maintenant vérifier que le script de completion de kubectl est bien sourcé dans toutes vos sessions shell. Il y a deux façons de le faire:
+
+- Sourcer le script de completion dans votre fichier `~/.bashrc`:
+
+ ```shell
+ echo 'source <(kubectl completion bash)' >>~/.bashrc
+ ```
+
+- Ajoutez le script de complétion dans le répertoire `/etc/bash_completion.d`:
+
+ ```shell
+ kubectl completion bash >/etc/bash_completion.d/kubectl
+ ```
+
+{{< note >}}
+bash-completion source tous les scripts de completion dans `/etc/bash_completion.d`.
+{{< /note >}}
+
+Les deux approches sont équivalentes. Après avoir rechargé votre shell, l'auto-complétion de kubectl devrait fonctionner.
+
+{{% /tab %}}
+
+
+{{% tab name="Bash on macOS" %}}
+
+{{< warning>}}
+macOS inclut Bash 3.2 par défaut. Le script de complétion kubectl nécessite Bash 4.1+ et ne fonctionne pas avec Bash 3.2. Une des solutions possibles est d'installer une version plus récente de Bash sous macOS (voir instructions [ici](https://itnext.io/upgrading-bash-on-macos-7138bd1066ba)). Les instructions ci-dessous ne fonctionnent que si vous utilisez Bash 4.1+.
+{{< /warning >}}
+
+### Introduction
+
+Le script de complétion kubectl pour Bash peut être généré avec la commande `kubectl completion bash`. Sourcer le script de completion dans votre shell permet l'auto-complétion de kubectl.
+
+En revanche, le script de complétion dépend de [**bash-completion**](https://github.com/scop/bash-completion), ce qui implique que vous devez d'abord installer ce logiciel (vous pouvez tester si vous avez déjà installé bash-completion en utilisant `type _init_completion`).
+
+### Installer bash-completion
+
+Vous pouvez installer bash-completion avec Homebrew:
+
+```shell
+brew install bash-completion
+```
+
+Comme indiqué dans la sortie de `brew install` (section "Caveats"), ajoutez les lignes suivantes à votre fichier `~/.bashrc` ou `~/.bash_profile` :
+
+```shell
+[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
+```
+
+Rechargez votre shell.
+
+### Activer l'auto-complétion de kubectl
+
+Si vous avez installé kubectl avec Homebrew (comme expliqué [ici](#installer-avec-homebrew-sur-macos)), alors le script de complétion a été automatiquement installé dans `/usr/local/etc/bash_completion.d/kubectl`. Dans ce cas, vous n'avez rien à faire.
+
+Si vous n'avez pas installé via Homebrew, vous devez maintenant vous assurer que le script de complétion kubectl est bien sourcé dans toutes vos sessions shell comme suit:
+
+- Ajoutez le script de complétion dans le répertoire `/usr/local/etc/bash_completion.d`:
+
+ ```shell
+ kubectl completion bash >/usr/local/etc/bash_completion.d/kubectl
+ ```
+
+
+{{< note >}}
+bash-completion (en cas d'installation avec Homebrew) source tous les scripts de complétion dans le répertoire.
+{{< /note >}}
+
+Après avoir rechargé votre shell, l'auto-complétion de kubectl devrait fonctionner.
+{{% /tab %}}
+
+{{% tab name="Zsh" %}}
+
+Le script de complétion de kubectl pour Zsh peut être généré avec la commande `kubectl completion zsh`. Sourcer le script de completion dans votre shell permet l'auto-complétion de kubectl.
+
+Pour faire ainsi dans toutes vos sessions shell, ajoutez ce qui suit à votre fichier `~/.zshrc`:
+
+```shell
+source <(kubectl completion zsh)
+```
+
+Après avoir rechargé votre shell, l'auto-complétion de kubectl devrait fonctionner.
+
+Si vous rencontrez une erreur comme `complete:13: command not found: compdef`, alors ajoutez ce qui suit au début de votre fichier `~/.zshrc`:
+
+```shell
+autoload -Uz compinit
+compinit
+```
+{{% /tab %}}
+{{< /tabs >}}
+
+{{% /capture %}}
+
+{{% capture whatsnext %}}
+* [Installer Minikube](/docs/tasks/tools/install-minikube/)
+* Voir les [guides de démarrage](/fr/docs/setup/) pour plus d'informations sur la création de clusters.
+* [Apprenez comment lancer et exposer votre application](/docs/tasks/access-application-cluster/service-access-application-cluster/)
+* Si vous avez besoin d'accéder à un cluster que vous n'avez pas créé, consultez [Partager l'accès du Cluster](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/).
+* Consulter les [documents de référence de kubectl](/fr/docs/reference/kubectl/kubectl/)
+{{% /capture %}}
diff --git a/content/fr/docs/tasks/tools/install-minikube.md b/content/fr/docs/tasks/tools/install-minikube.md
new file mode 100644
index 0000000000..5c04271011
--- /dev/null
+++ b/content/fr/docs/tasks/tools/install-minikube.md
@@ -0,0 +1,159 @@
+---
+title: Installer Minikube
+content_template: templates/task
+weight: 20
+card:
+ name: tasks
+ weight: 10
+---
+
+{{% capture overview %}}
+
+Cette page vous montre comment installer [Minikube](/fr/docs/tutorials/hello-minikube/), qui est un outil qui fait tourner un cluster Kubernetes à un noeud unique dans une machine virtuelle sur votre machine.
+
+{{% /capture %}}
+
+{{% capture prerequisites %}}
+
+La virtualisation VT-x ou AMD-v doit être activée dans le BIOS de votre machine.
+
+{{< tabs name="minikube_before_you_begin" >}}
+{{% tab name="Linux" %}}
+Pour vérifier si la virtualisation est prise en charge sur Linux, exécutez la commande suivante et vérifiez que la sortie n'est pas vide:
+```
+egrep --color 'vmx|svm' /proc/cpuinfo
+```
+{{% /tab %}}
+{{% tab name="macOS" %}}
+Pour vérifier si la virtualisation est prise en charge sur macOS, exécutez la commande suivante sur votre terminal.
+```
+sysctl -a | grep machdep.cpu.features
+```
+Si vous trouvez `VMX` dans la sortie, la fonction VT-x est supportée sur votre OS.
+{{% /tab %}}
+{{% tab name="Windows" %}}
+Pour vérifier si la virtualisation est prise en charge sur Windows 8 et au-delà, exécutez la commande suivante sur votre terminal Windows ou à l'invite de commande.
+```
+systeminfo
+```
+Si vous obtenez la sortie suivant, la virtualisation est prise en charge sur Windows.
+```
+Hyper-V Requirements: VM Monitor Mode Extensions: Yes
+ Virtualization Enabled In Firmware: Yes
+ Second Level Address Translation: Yes
+ Data Execution Prevention Available: Yes
+```
+
+{{% /tab %}}
+{{< /tabs >}}
+
+{{% /capture %}}
+
+{{% capture steps %}}
+
+## Installer un hyperviseur
+
+Si vous n'avez pas déjà un hyperviseur installé, installez-le maintenant pour votre système d'exploitation:
+
+Système d'exploitation | Hyperviseurs supportés
+:----------------|:---------------------
+macOS | [VirtualBox](https://www.virtualbox.org/wiki/Downloads), [VMware Fusion](https://www.vmware.com/products/fusion), [HyperKit](https://github.com/moby/hyperkit)
+Linux | [VirtualBox](https://www.virtualbox.org/wiki/Downloads), [KVM](http://www.linux-kvm.org/)
+Windows | [VirtualBox](https://www.virtualbox.org/wiki/Downloads), [Hyper-V](https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/quick_start/walkthrough_install)
+
+{{< note >}}
+Minikube supporte également une option `--vm-driver=none` qui exécute les composants Kubernetes sur la machine hôte et non dans une VM. L'utilisation de ce pilote nécessite Docker et un environnement Linux mais pas un hyperviseur.
+{{< /note >}}
+
+## Installer kubectl
+
+* Installez kubectl en suivant les instructions de la section [Installer et configurer kubectl](/fr/docs/tasks/tools/install-kubectl/).
+
+## Installer Minikube
+
+### macOS
+
+La façon la plus simple d'installer Minikube sur macOS est d'utiliser [Homebrew](https://brew.sh):
+
+```shell
+brew cask install minikube
+```
+
+Vous pouvez aussi l'installer sur macOS en téléchargeant un binaire statique:
+
+```shell
+curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 \
+ && chmod +x minikube
+```
+
+Voici une façon simple d'ajouter l'exécutable de Minikube à votre path:
+
+```shell
+sudo mv minikube /usr/local/bin
+```
+
+### Linux
+
+{{< note >}}
+Ce document vous montre comment installer Minikube sur Linux en utilisant un binaire statique.
+{{< /note >}}
+
+Vous pouvez installer Minikube sur Linux en téléchargeant un binaire statique:
+
+```shell
+curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
+ && chmod +x minikube
+```
+
+Voici une façon simple d'ajouter l'exécutable de Minikube à votre path:
+
+```shell
+sudo cp minikube /usr/local/bin && rm minikube
+```
+
+### Windows
+
+{{< note >}}
+Pour exécuter Minikube sur Windows, vous devez d'abord installer [VirtualBox](https://www.virtualbox.org/) ou [Hyper-V](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v). Hyper-V peut être utilisé avec trois versions de Windows 10 : Windows 10 Enterprise, Windows 10 Professional et Windows 10 Education. Voir le dépôt GitHub officiel de Minikube pour plus [d'informations sur l'installation](https://github.com/kubernetes/minikube/#installation).
+{{< /note >}}
+
+La façon la plus simple d'installer Minikube sur Windows est d'utiliser [Chocolatey](https://chocolatey.org/) (exécuté avec les droits administrateur) :
+
+```shell
+choco install minikube kubernetes-cli
+```
+
+Une fois l'installation de Minikube terminée, fermez la session CLI en cours et redémarrez. Minikube devrait avoir été ajouté à votre path automatiquement.
+
+#### Installation manuelle de Windows
+
+Pour installer Minikube manuellement sur Windows, téléchargez [`minikube-windows-amd64`](https://github.com/kubernetes/minikube/releases/latest), renommez-le en `minikube.exe`, et ajoutez-le à votre path.
+
+#### Windows Installer
+
+Pour installer manuellement Minikube sur Windows à l'aide de [Windows Installer](https://docs.microsoft.com/en-us/windows/desktop/msi/windows-installer-portal), téléchargez [`minikube-installer.exe`](https://github.com/kubernetes/minikube/releases/latest) et exécutez l'Installer.
+
+{{% /capture %}}
+
+{{% capture whatsnext %}}
+
+* [Exécutez Kubernetes localement via Minikube](/docs/setup/minikube/)
+
+{{% /capture %}}
+
+## Tout nettoyer pour recommencer à zéro
+
+Si vous avez déjà installé minikube, exécutez:
+```shell
+minikube start
+```
+
+Si cette commande renvoie une erreur:
+```shell
+machine does not exist
+```
+
+Vous devez supprimer les fichiers de configuration:
+```shell
+rm -rf ~/.minikube
+```
diff --git a/content/fr/docs/tutorials/kubernetes-basics/_index.html b/content/fr/docs/tutorials/kubernetes-basics/_index.html
index fa04e1f1b5..387d4afeeb 100644
--- a/content/fr/docs/tutorials/kubernetes-basics/_index.html
+++ b/content/fr/docs/tutorials/kubernetes-basics/_index.html
@@ -21,7 +21,7 @@ card:
Les bases de Kubernetes
-
Ce tutoriels offre une présentation des bases du système d’orchestration de cluster Kubernetes. Chaque module contient des informations de base sur les principales caractéristiques et concepts de Kubernetes, ainsi qu'un didacticiel en ligne interactif. Ces tutoriels interactifs vous permettent de gérer vous-même un cluster simple et ses applications conteneurisées.
+
Ce tutoriel offre une présentation des bases du système d’orchestration de cluster Kubernetes. Chaque module contient des informations de base sur les principales caractéristiques et concepts de Kubernetes, ainsi qu'un didacticiel en ligne interactif. Ces tutoriels interactifs vous permettent de gérer vous-même un cluster simple et ses applications conteneurisées.
À l'aide des didacticiels interactifs, vous pouvez apprendre à:
Déployer une application conteneurisée sur un cluster
En savoir plus sur les déploiements d'applications.
+
Déployez votre première application sur Kubernetes avec kubectl.
+
+
+
+
+
Déploiements Kubernetes
+
+ Une fois que vous avez un cluster Kubernetes en cours d'exécution, vous pouvez déployer vos applications conteneurisées par dessus.
+ Pour ce faire, vous créez une configuration de Déploiement (Deployments) Kubernetes. Le déploiement instruit Kubernetes
+ de comment créer et mettre à jour des instances de votre application. Une fois que vous avez créé un déploiement, le plannificateur de Kubernetes (kube-scheduler)
+ planifient les instanciations d'application sur des nœuds du cluster.
+
+
+
Une fois les instances d’application créées, un contrôleur de déploiement Kubernetes surveille en permanence ces instances. Si le nœud hébergeant une instance tombe en panne ou est supprimé, le contrôleur de déploiement remplace l'instance par une instance située sur un autre nœud du cluster. Ceci fournit un mécanisme d'auto-réparation pour faire face aux pannes ou à la maintenance de la machine.
+
+
Dans le monde de pré-orchestration, les scripts d'installation étaient souvent utilisés pour démarrer des applications, mais ils ne permettaient pas une récupération après une panne d'ordinateur. En créant et en maintenant vos instances d’application sur plusieurs nœuds, les Déploiements Kubernetes offre une approche fondamentalement différente de la gestion des applications.
+
+
+
+
+
+
Sommaire:
+
+
Déploiements
+
Kubectl
+
+
+
+
+ Un déploiement est responsable de la création et de la mise à jour des instances de votre application.
+
+
+
+
+
+
+
+
+
Déploiement de votre première application sur Kubernetes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Vous pouvez créer et gérer un déploiement à l'aide de l'interface de ligne de commande, Kubectl.
+
Kubectl utilise l'API Kubernetes pour interagir avec le cluster. Dans ce module, vous apprendrez les commandes Kubectl les plus courantes nécessaires à la création de déploiements exécutant vos applications sur un cluster Kubernetes.
+
+
Lorsque vous créez un déploiement, vous devez spécifier l'image de conteneur de votre application et le nombre de réplicas que vous souhaitez exécuter. Vous pouvez modifier ces informations ultérieurement en mettant à jour votre déploiement.; Modules 5 et 6 du bootcamp, expliquez comment vous pouvez faire évoluer et mettre à jour vos déploiements.
+
+
+
+
+
+
+
+
Les applications doivent être regroupées dans l’un des formats de conteneur pris en charge pour pouvoir être déployées sur Kubernetes.
+
+
+
+
+
+
+
+
Pour notre premier déploiement, nous utiliserons une application Node.js intégrée dans un conteneur Docker.
+ Pour créer l'application Node.js et déployer le conteneur Docker, suivez les instructions du
+ Tutoriel Hello Minikube.
+
+
Maintenant que vous savez ce que sont les déploiements, allons au didacticiel en ligne et déployons notre première application!
+
+
+
diff --git a/content/fr/examples/admin/logging/fluentd-sidecar-config.yaml b/content/fr/examples/admin/logging/fluentd-sidecar-config.yaml
new file mode 100644
index 0000000000..eea1849b03
--- /dev/null
+++ b/content/fr/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
+
diff --git a/content/fr/examples/admin/logging/two-files-counter-pod-agent-sidecar.yaml b/content/fr/examples/admin/logging/two-files-counter-pod-agent-sidecar.yaml
new file mode 100644
index 0000000000..b37b616e6f
--- /dev/null
+++ b/content/fr/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
+ 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: k8s.gcr.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
diff --git a/content/fr/examples/admin/logging/two-files-counter-pod-streaming-sidecar.yaml b/content/fr/examples/admin/logging/two-files-counter-pod-streaming-sidecar.yaml
new file mode 100644
index 0000000000..87bd198cfd
--- /dev/null
+++ b/content/fr/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
+ 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
+ args: [/bin/sh, -c, 'tail -n+1 -f /var/log/1.log']
+ volumeMounts:
+ - name: varlog
+ mountPath: /var/log
+ - name: count-log-2
+ image: busybox
+ args: [/bin/sh, -c, 'tail -n+1 -f /var/log/2.log']
+ volumeMounts:
+ - name: varlog
+ mountPath: /var/log
+ volumes:
+ - name: varlog
+ emptyDir: {}
diff --git a/content/fr/examples/admin/logging/two-files-counter-pod.yaml b/content/fr/examples/admin/logging/two-files-counter-pod.yaml
new file mode 100644
index 0000000000..6ebeb717a1
--- /dev/null
+++ b/content/fr/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
+ 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: {}
diff --git a/content/fr/examples/controllers/frontend.yaml b/content/fr/examples/controllers/frontend.yaml
new file mode 100644
index 0000000000..b9f31044ec
--- /dev/null
+++ b/content/fr/examples/controllers/frontend.yaml
@@ -0,0 +1,21 @@
+apiVersion: apps/v1
+kind: ReplicaSet
+metadata:
+ name: frontend
+ labels:
+ app: guestbook
+ tier: frontend
+spec:
+ # modify replicas according to your case
+ replicas: 3
+ selector:
+ matchLabels:
+ tier: frontend
+ template:
+ metadata:
+ labels:
+ tier: frontend
+ spec:
+ containers:
+ - name: php-redis
+ image: gcr.io/google_samples/gb-frontend:v3
diff --git a/content/fr/examples/controllers/hpa-rs.yaml b/content/fr/examples/controllers/hpa-rs.yaml
new file mode 100644
index 0000000000..a8388530dc
--- /dev/null
+++ b/content/fr/examples/controllers/hpa-rs.yaml
@@ -0,0 +1,11 @@
+apiVersion: autoscaling/v1
+kind: HorizontalPodAutoscaler
+metadata:
+ name: frontend-scaler
+spec:
+ scaleTargetRef:
+ kind: ReplicaSet
+ name: frontend
+ minReplicas: 3
+ maxReplicas: 10
+ targetCPUUtilizationPercentage: 50
diff --git a/content/fr/examples/debug/counter-pod.yaml b/content/fr/examples/debug/counter-pod.yaml
new file mode 100644
index 0000000000..f997886386
--- /dev/null
+++ b/content/fr/examples/debug/counter-pod.yaml
@@ -0,0 +1,10 @@
+apiVersion: v1
+kind: Pod
+metadata:
+ name: counter
+spec:
+ containers:
+ - name: count
+ image: busybox
+ args: [/bin/sh, -c,
+ 'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
diff --git a/content/fr/examples/pods/pod-rs.yaml b/content/fr/examples/pods/pod-rs.yaml
new file mode 100644
index 0000000000..df7b390597
--- /dev/null
+++ b/content/fr/examples/pods/pod-rs.yaml
@@ -0,0 +1,23 @@
+apiVersion: v1
+kind: Pod
+metadata:
+ name: pod1
+ labels:
+ tier: frontend
+spec:
+ containers:
+ - name: hello1
+ image: gcr.io/google-samples/hello-app:2.0
+
+---
+
+apiVersion: v1
+kind: Pod
+metadata:
+ name: pod2
+ labels:
+ tier: frontend
+spec:
+ containers:
+ - name: hello2
+ image: gcr.io/google-samples/hello-app:1.0
diff --git a/content/fr/examples/pods/resource/memory-request-limit-2.yaml b/content/fr/examples/pods/resource/memory-request-limit-2.yaml
new file mode 100644
index 0000000000..99032c4fc2
--- /dev/null
+++ b/content/fr/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"]
diff --git a/content/fr/examples/pods/resource/memory-request-limit-3.yaml b/content/fr/examples/pods/resource/memory-request-limit-3.yaml
new file mode 100644
index 0000000000..9f089c4a7a
--- /dev/null
+++ b/content/fr/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:
+ limits:
+ memory: "1000Gi"
+ requests:
+ memory: "1000Gi"
+ command: ["stress"]
+ args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
diff --git a/content/fr/examples/pods/resource/memory-request-limit.yaml b/content/fr/examples/pods/resource/memory-request-limit.yaml
new file mode 100644
index 0000000000..985b1308d9
--- /dev/null
+++ b/content/fr/examples/pods/resource/memory-request-limit.yaml
@@ -0,0 +1,16 @@
+apiVersion: v1
+kind: Pod
+metadata:
+ name: memory-demo
+ namespace: mem-example
+spec:
+ containers:
+ - name: memory-demo-ctr
+ image: polinux/stress
+ resources:
+ limits:
+ memory: "200Mi"
+ requests:
+ memory: "100Mi"
+ command: ["stress"]
+ args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
diff --git a/content/id/docs/concepts/architecture/cloud-controller.md b/content/id/docs/concepts/architecture/cloud-controller.md
new file mode 100644
index 0000000000..16052ba1f7
--- /dev/null
+++ b/content/id/docs/concepts/architecture/cloud-controller.md
@@ -0,0 +1,237 @@
+---
+title: Konsep-konsep di balik Controller Manager
+content_template: templates/concept
+weight: 30
+---
+
+{{% capture overview %}}
+Konsep _Cloud Controller Manager_/CCM (jangan tertukar dengan program biner kube-controller-manager) awalnya dibuat untuk memungkinkan kode vendor _cloud_ spesifik dan kode inti Kubernetes untuk berkembang secara independen satu sama lainnya. CCM berjalan bersama dengan komponen Master lainnya seperti Kubernetes Controller Manager, API Server, dan Scheduler. CCM juga dapat dijalankan sebagai Kubernetes Addon (tambahan fungsi terhadap Kubernetes), yang akan berjalan di atas kluster Kubernetes.
+
+Desain CCM didasarkan pada mekanisme _plugin_ yang memungkinkan penyedia layanan _cloud_ untuk berintegrasi dengan Kubernetes dengan mudah dengan menggunakan _plugin_. Sudah ada rencana untuk pengenalan penyedia layanan _cloud_ baru pada Kubernetes, dan memindahkan penyedia layanan _cloud_ yang sudah ada dari model yang lama ke model CCM.
+
+Dokumen ini mendiskusikan konsep di balik CCM dan mendetail fungsi-fungsinya.
+
+Berikut adalah arsitektur sebuah kluster Kubernetes tanpa CCM:
+
+
+
+{{% /capture %}}
+
+
+{{% capture body %}}
+
+## Desain
+
+Pada diagram sebelumnya, Kubernetes dan penyedia layanan _cloud_ diintegrasikan melalui beberapa komponen berbeda:
+
+* Kubelet
+* Kubernetes Controller Manager
+* Kubernetes API server
+
+CCM menggabungkan semua logika yang bergantung pada _cloud_ dari dalam tiga komponen tersebut ke dalam sebuah titik integrasi dengan _cloud_. Arsitektur baru di dalam model CCM adalah sebagai berikut:
+
+
+
+## Komponen-komponen CCM
+
+CCM memisahkan beberapa fungsi Kubernetes Controller Manager (KCM) dan menjalankannya sebagai proses yang berbeda. Secara spesifik, CCM memisahkan pengendali-pengendali (_controller_) di dalam KCM yang bergantung terhadap penyedia layanan _cloud_. KCM memiliki beberapa komponen pengendali yang bergantung pada _cloud_ sebagai berikut:
+
+* Node Controller
+* Volume Controller
+* Route Controller
+* Service Controller
+
+Pada versi 1.9, CCM menjalankan pengendali-pengendali dari daftar sebelumnya sebagai berikut:
+
+* Node Controller
+* Route Controller
+* Service Controller
+
+{{< note >}}
+Volume Controller secara sengaja tidak dipilih sebagai bagian dari CCM. Hal ini adalah karena kerumitan untuk melakukannya, dan mempertimbangkan usaha-usaha yang sedang berlangsung untuk memisahkan logika volume yang spesifik vendor dari KCM, sehingga diputuskan bahwa Volume Contoller tidak akan dipisahkan dari KCM ke CCM.
+{{< /note >}}
+
+Rencana awal untuk mendukung volume menggunakan CCM adalah dengan menggunakan Flexvolume untuk mendukung penambahan volume secara _pluggable_. Namun, ada sebuah usaha lain yang diberi nama Container Storage Interface (CSI) yang sedang berlangsung untuk menggantikan Flexvolume.
+
+Mempertimbangkan dinamika tersebut, kami memutuskan untuk mengambil tindakan sementara hingga CSI siap digunakan.
+
+## Fungsi-fungsi CCM
+
+Fungsi-fungsi CCM diwarisi oleh komponen-komponen Kubernetes yang bergantung pada penyedia layanan _cloud_. Bagian ini disusun berdasarkan komponen-komponen tersebut.
+
+### 1. Kubernetes Controller Manager
+
+Kebanyakan fungsi CCM diturunkan dari KCM. Seperti yang telah disebutkan pada bagian sebelumnya, CCM menjalankan komponen-komponen pengendali sebagai berikut:
+
+* Node Controller
+* Route Controller
+* Service Controller
+
+#### Node Controller
+
+Node Controller bertugas untuk menyiapkan sebuah node dengan cara mengambil informasi node-node yang berjalan di dalam kluster dari penyedia layanan _cloud_. Node Controller melakukan fungsi-fungsi berikut:
+
+1. Menyiapkan sebuah node dengan memberi label _zone_/_region_ yang spesifik pada _cloud_.
+2. Menyiapkan sebuah node dengan informasi _instance_ yang spesifik _cloud_ , misalnya tipe dan ukurannya.
+3. Mendapatkan alamat jaringan dan _hostname_ milik node tersebut.
+4. Dalam hal sebuah node menjadi tidak responsif, memeriksa _cloud_ untuk melihat apakah node tersebut telah dihapus dari _cloud_. Juga, menghapus objek Node tersebut dari kluster Kubernetes, jika node tersebut telah dihapus dari _cloud_.
+
+#### Route Controller
+
+Route Controller bertugas mengkonfigurasi rute jaringan di dalam _cloud_ secara sesuai agar Container pada node-node yang berbeda di dalam kluster Kubernetes dapat berkomunikasi satu sama lain. Route Controller hanya berlaku untuk kluster yang berjalan pada Google Compute Engine (GCE) di penyedia layanan _cloud_ GCP.
+
+#### Service Controller
+
+Service Controller bertugas memantau terjadinya operasi `create`, `update`, dan `delete` pada Service. Berdasarkan keadaan terkini Service-service pada kluster Kubernetes, Service Controller mengkonfigurasi _load balancer_ spesifik _cloud_ (seperti ELB, Google LB, atau Oracle Cloud Infrastructure LB) agar sesuai dengan keadaan Service-service pada kluster Kubernetes. Sebagai tambahan, Service Controller juga memastikan bahwa _service backend_ (target dari _load balancer_ yang bersangkutan) dari _load balancer cloud_ tersebut berada dalam kondisi terkini.
+
+### 2. Kubelet
+
+Node Controller berisi fungsi Kubelet yang bergantung pada _cloud_. Sebelum CCM, Kubelet bertugas untuk menyiapkan node dengan informasi spesifik _cloud_ seperti alamat IP, label _zone_/_region_, dan tipe _instance_. Setelah diperkenalkannya CCM, tugas tersebut telah dipindahkan dari Kubelet ke dalam CCM.
+
+Pada model baru ini, Kubelet menyiapkan sebuah node tanpa informasi spesifik _cloud_. Namun, Kubelet menambahkan sebuah Taint pada node yang baru dibuat yang menjadikan node tersebut tidak dapat dijadwalkan (sehingga tidak ada Pod yang dapat dijadwalkan ke node tersebut) hingga CCM menyiapkan node tersebut dengan informasi spesifik _cloud_. Setelah itu, Kubelet menghapus Taint tersebut.
+
+## Mekanisme _Plugin_
+
+CCM menggunakan _interface_ Go untuk memungkinkan implementasi dari _cloud_ apapun untuk ditambahkan. Secara spesifik, CCM menggunakan CloudProvider Interface yang didefinisikan [di sini](https://github.com/kubernetes/cloud-provider/blob/9b77dc1c384685cb732b3025ed5689dd597a5971/cloud.go#L42-L62)
+
+Implementasi dari empat kontroler-kontroler yang disorot di atas, dan beberapa kerangka kerja, bersama dengan CloudProvider Interface, akan tetap berada pada kode inti Kubernetes. Implementasi spesifik penyedia layanan _cloud_ akan dibuat di luar kode inti dan menggunakan CloudProvider Interface yang didefinisikan di kode inti.
+
+Untuk informasi lebih lanjut mengenai pengembangan _plugin_, lihat [Mengembangkan Cloud Controller Manager](/docs/tasks/administer-cluster/developing-cloud-controller-manager/).
+
+## Otorisasi
+
+Bagian ini memerinci akses yang dibutuhkan oleh CCM terhadap berbagai objek API untuk melakukan tugas-tugasnya.
+
+### Akses untuk Node Controller
+
+Node Controller hanya berinteraksi dengan objek-objek Node. Node Controller membutuhkan akses penuh untuk operasi `get`, `list`, `create`, `update`, `patch`, `watch`, dan `delete` terhadap objek-objek Node.
+
+v1/Node:
+
+* Get
+* List
+* Create
+* Update
+* Patch
+* Watch
+* Delete
+
+### Akses untuk Route Controller
+
+Route Controller memantau pembuatan objek Node dan mengkonfigurasi rute jaringan secara sesuai. Route Controller membutuhkan akses untuk operasi `get` terhadap objek-objek Node.
+
+v1/Node:
+
+* Get
+
+### Akses untuk Service Controller
+
+Service Controller memantau terjadinya operasi `create`, `update` dan `delete`, kemudian mengkonfigurasi Endpoint untuk Service-service tersebut secara sesuai.
+
+Untuk mengakses Service-service, Service Controller membutuhkan akses untuk operasi _list_ dan _watch_. Untuk memperbarui Service-service, dibutuhkan akses untuk operasi `patch` dan `update`.
+
+Untuk menyiapkan Endpoint bagi untuk Service-service, dibutuhkan akses untuk operasi `create`, `list`, `get`, `watch`, dan `update`.
+
+v1/Service:
+
+* List
+* Get
+* Watch
+* Patch
+* Update
+
+### Akses Lainnya
+
+Implementasi dari inti CCM membutuhkan akses untuk membuat Event, dan untuk memastikan operasi yang aman, dibutuhkan akses untuk membuat ServiceAccount.
+
+v1/Event:
+
+* Create
+* Patch
+* Update
+
+v1/ServiceAccount:
+
+* Create
+
+Detail RBAC dari ClusterRole untuk CCM adalah sebagai berikut:
+
+```yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: cloud-controller-manager
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - events
+ verbs:
+ - create
+ - patch
+ - update
+- apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - '*'
+- apiGroups:
+ - ""
+ resources:
+ - nodes/status
+ verbs:
+ - patch
+- apiGroups:
+ - ""
+ resources:
+ - services
+ verbs:
+ - list
+ - patch
+ - update
+ - watch
+- apiGroups:
+ - ""
+ resources:
+ - serviceaccounts
+ verbs:
+ - create
+- apiGroups:
+ - ""
+ resources:
+ - persistentvolumes
+ verbs:
+ - get
+ - list
+ - update
+ - watch
+- apiGroups:
+ - ""
+ resources:
+ - endpoints
+ verbs:
+ - create
+ - get
+ - list
+ - watch
+ - update
+```
+
+## Implementasi Vendor-vendor
+
+Penyedia layanan cloud berikut telah mengimplementasikan CCM:
+
+* [Digital Ocean](https://github.com/digitalocean/digitalocean-cloud-controller-manager)
+* [Oracle](https://github.com/oracle/oci-cloud-controller-manager)
+* [Azure](https://github.com/kubernetes/cloud-provider-azure)
+* [GCP](https://github.com/kubernetes/cloud-provider-gcp)
+* [AWS](https://github.com/kubernetes/cloud-provider-aws)
+* [BaiduCloud](https://github.com/baidu/cloud-provider-baiducloud)
+* [Linode](https://github.com/linode/linode-cloud-controller-manager)
+
+## Administrasi Kluster
+
+Petunjuk lengkap untuk mengkonfigurasi dan menjalankan CCM disediakan [di sini](/docs/tasks/administer-cluster/running-cloud-controller/#cloud-controller-manager).
+
+{{% /capture %}}
diff --git a/content/id/docs/concepts/overview/object-management-kubectl/declarative-config.md b/content/id/docs/concepts/overview/object-management-kubectl/declarative-config.md
index b76b457ef4..040d11b286 100644
--- a/content/id/docs/concepts/overview/object-management-kubectl/declarative-config.md
+++ b/content/id/docs/concepts/overview/object-management-kubectl/declarative-config.md
@@ -809,7 +809,7 @@ Migrasi dari pengelolaan objek dengan perintah imperatif ke pengelolaan objek de
1. Ekspor objek *live* ke *file* konfigurasi lokal:
```shell
- kubectl get / -o yaml --export > _.yaml
+ kubectl get / -o yaml > _.yaml
```
1. Hapus secara manual *field* `status` dari *file* konfigurasi.
diff --git a/content/id/docs/concepts/overview/working-with-objects/field-selectors.md b/content/id/docs/concepts/overview/working-with-objects/field-selectors.md
index dd1a206ba2..5b9b83158a 100644
--- a/content/id/docs/concepts/overview/working-with-objects/field-selectors.md
+++ b/content/id/docs/concepts/overview/working-with-objects/field-selectors.md
@@ -64,5 +64,5 @@ Kamu dapat menggunakan selektor-selektor *field* dengan beberapa tipe *resource*
dan Service yang tidak terdapat pada *namespace* `default`:
```shell
-kubectl get statefulsets,services --field-selector metadata.namespace!=default
+kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default
```
diff --git a/content/id/docs/concepts/overview/working-with-objects/namespaces.md b/content/id/docs/concepts/overview/working-with-objects/namespaces.md
index 7931e097a5..91637e6719 100644
--- a/content/id/docs/concepts/overview/working-with-objects/namespaces.md
+++ b/content/id/docs/concepts/overview/working-with-objects/namespaces.md
@@ -67,7 +67,7 @@ kubectl --namespace= get pods
Kamu dapat menyimpan konfigurasi *namespace* untuk semua perintah `kubectl` dengan perintah:
```shell
-kubectl config set-context $(kubectl config current-context) --namespace=
+kubectl config set-context --current --namespace=
# Cek namespace
kubectl config view | grep namespace:
```
diff --git a/content/id/docs/concepts/storage/_index.md b/content/id/docs/concepts/storage/_index.md
new file mode 100755
index 0000000000..7e0dd19b12
--- /dev/null
+++ b/content/id/docs/concepts/storage/_index.md
@@ -0,0 +1,5 @@
+---
+title: "Storage"
+weight: 70
+---
+
diff --git a/content/id/docs/concepts/storage/persistent-volumes.md b/content/id/docs/concepts/storage/persistent-volumes.md
new file mode 100644
index 0000000000..e3d04b089c
--- /dev/null
+++ b/content/id/docs/concepts/storage/persistent-volumes.md
@@ -0,0 +1,697 @@
+---
+title: Persistent Volume
+feature:
+ title: Orkestrasi penyimpanan
+ description: >
+ Secara otomatis memasang sistem penyimpanan pilihanmu, baik dari penyimpanan lokal, penyedia layanan _cloud_ seperti GCP atau AWS, maupun sebuah sistem penyimpanan jaringan seperti NFS, iSCSI, Gluster, Ceph, Cinder, atau Flocker.
+
+content_template: templates/concept
+weight: 20
+---
+
+{{% capture overview %}}
+
+Dokumen ini menjelaskan kondisi terkini dari `PersistentVolumes` pada Kubernetes. Disarankan telah memiliki familiaritas dengan [volume](/docs/concepts/storage/volumes/).
+
+{{% /capture %}}
+
+
+{{% capture body %}}
+
+## Pengenalan
+
+Mengelola penyimpanan adalah hal yang berbeda dengan mengelola komputasi. Sub-sistem `PersistentVolume` (PV) menyediakan API untuk para pengguna dan administrator yang mengabstraksi detail-detail tentang bagaimana penyimpanan disediakan dari bagaimana penyimpanan dikonsumsi. Untuk melakukan ini, kami mengenalkan dua sumber daya API baru: `PersistentVolume` (PV) dan `PersistentVolumeClaim` (PVC).
+
+Sebuah `PersistentVolume` (PV) adalah suatu bagian dari penyimpanan pada kluster yang telah disediakan oleh seorang administrator. PV merupakan sebuah sumber daya pada kluster sama halnya dengan _node_ yang juga merupakan sumber daya kluster. PV adalah _volume plugin_ seperti _Volumes_, tetapi memiliki siklus hidup yang independen dari _pod_ individual yang menggunakan PV tersebut. Objek API ini menangkap detail-detail implementasi dari penyimpanan, seperti NFS, iSCSI, atau sistem penyimpanan yang spesifik pada penyedia layanan _cloud_.
+
+Sebuah `PersistentVolumeClaim` (PVC) merupakan permintaan penyimpanan oleh pengguna. PVC mirip dengan sebuah _pod_. _Pod_ mengonsumsi sumber daya _node_ dan PVC mengonsumsi sumber daya PV. _Pods_ dapat meminta taraf-taraf spesifik dari sumber daya (CPU dan Memory). Klaim dapat meminta ukuran dan mode akses yang spesifik (seperti, dapat dipasang sekali sebagai _read/write_ atau lain kali sebagai _read-only_).
+
+Meskipun `PersistentVolumeClaims` mengizinkan pengguna untuk mengkonsumsi sumber daya penyimpanan
+abstrak, pada umumnya para pengguna membutuhkan `PersistentVolumes` dengan properti yang
+bermacam-macam, seperti performa, untuk mengatasi masalah yang berbeda. Para administrator kluster
+harus dapat menawarkan berbagai macam `PersistentVolumes` yang berbeda tidak hanya pada ukuran dan
+mode akses, tanpa memaparkan detail-detail bagaimana cara volume tersebut diimplementasikan
+kepada para pengguna. Untuk mengatasi hal ini maka dibutuhkan sumber daya
+`StorageClass`.
+
+Silakan lihat [panduan mendetail dengan contoh-contoh yang sudah berjalan](/docs/tasks/configure-pod-container/configure-persistent-volume-storage/).
+
+
+## Siklus hidup dari sebuah volume dan klaim
+
+PV adalah sumber daya dalam sebuah kluster. PVC adalah permintaan terhadap sumber daya tersebut dan juga berperan sebagai pemeriksaan klaim dari sumber daya yang diminta. Interaksi antara PV dan PVC mengikuti siklus hidup berikut ini:
+
+### Penyediaan
+
+Ada dua cara untuk menyediakan PV: secara statis atau dinamis.
+
+#### Statis
+Seorang administrator kluster membuat beberapa PV. PV yang telah dibuat membawa detail-detail dari penyimpanan yang sesungguhnya tersedia untuk digunakan oleh pengguna kluster. PV tersebut ada pada Kubernetes API dan siap untuk digunakan.
+
+#### Dinamis
+Ketika tidak ada PV statis yang dibuat oleh administrator yang sesuai dengan `PersistentVolumeClaim` (PVC) yang dibuat oleh pengguna, kluster akan mencoba untuk menyediakan volume khusus sesuai permintaan PVC.
+Penyediaan dinamis ini berbasis `StorageClass`: artinya PVC harus meminta sebuah _storage class_ dan _storage class_ tersebut harus sudah dibuat dan dikonfigurasi oleh administrator agar penyediaan dinamis bisa terjadi. Klaim yang meminta PV dengan _storage class_ `""` secara efektif telah menonaktifkan penyediaan dinamis.
+
+Untuk mengaktifkan penyediaan _storage_ dinamis berdasarkan _storage class_, administrator kluster harus mengaktifkan [_admission controller_](/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass)
+`DefaultStorageClass` pada API _server_. Hal ini dapat dilakukan, dengan cara memastikan `DefaultStorageClass` ada di antara urutan daftar _value_ yang dibatasi koma untuk _flag_ `--enable-admission-plugins` pada komponen API _server_. Untuk informasi lebih lanjut mengenai _flag_ perintah pada API _server_, silakan cek dokumentasi,
+[kube-apiserver](/docs/admin/kube-apiserver/).
+
+### Pengikatan
+
+Seorang pengguna membuat, atau telah membuat (dalam kasus penyediaan dinamis), sebuah `PersistentVolumeClaim` (PVC) dengan jumlah penyimpanan spesifik yang diminta dan dengan mode akses tertentu. Sebuah _control loop_ pada _master_ akan melihat adanya PVC baru, mencari PV yang cocok (jika memungkinkan), dan mengikat PVC dengan PV tersebut. Jika sebuah PV disediakan secara dinamis untuk sebuah PVC baru, _loop_ tersebut akan selalu mengikat PV tersebut pada PVC yang baru dibuat itu. Jika tidak, pengguna akan selalu mendapatkan setidaknya apa yang dimintanya, tetapi volume tersebut mungkin lebih dari apa yang diminta sebelumnya. Setelah terikat, ikatan `PersistentVolumeClaim` (PVC) bersifat eksklusif, terlepas dari bagaimana caranya mereka bisa terikat. Sebuah ikatan PVC ke PV merupakan pemetaan satu ke satu.
+
+Klaim akan berada dalam kondisi tidak terikat tanpa kepastian jika tidak ada volume yang cocok. Klaim akan terikat dengan volume yang cocok ketika ada volume yang cocok. Sebagai contoh, sebuah kluster yang sudah menyediakan banyak PV berukuran 50Gi tidak akan cocok dengan PVC yang meminta 100Gi. PVC hanya akan terikat ketika ada PV 100Gi yang ditambahkan ke kluster.
+
+### Penggunaan
+
+_Pod_ menggunakan klaim sebagai volume. Kluster menginspeksi klaim untuk menemukan volume yang terikat dengan klaim tersebut dan memasangkan volume tersebut ke pada _pod_. Untuk volume yang mendukung banyak mode akses, pengguna yang menentukan mode yang diinginkan ketika menggunakan klaim sebagai volume dalam sebuah _pod_.
+
+Ketika pengguna memiliki klaim dan klaim tersebut telah terikat, PV yang terikat menjadi hak penggunanya selama yang dibutuhkan. Pengguna menjadwalkan _pod_ dan mengakses PV yang sudah diklaim dengan menambahkan `persistentVolumeClaim` pada blok volume pada _Pod_ miliknya. [Lihat pranala di bawah untuk detail-detail mengenai sintaks](#claims-as-volumes).
+
+### Object Penyimpanan dalam Perlindungan Penggunaan
+Tujuan dari Objek Penyimpanan dalam Perlindungan Penggunan adalah untuk memastikan _Persistent Volume Claim_ (PVC) yang sedang aktif digunakan oleh sebuah _pod_ dan _Persistent Volume_ (PV) yang terikat pada PVC tersebut tidak dihapus dari sistem karena hal ini dapat menyebabkan kehilangan data.
+
+{{< note >}}
+PVC dikatakan aktif digunakan oleh sebuah _pod_ ketika sebuah objek _pod_ ada yang menggunakan PVC tersebut.
+{{< /note >}}
+
+Jika seorang pengguna menghapus PVC yang sedang aktif digunakan oleh sebuah _pod_, PVC tersebut tidak akan langsung dihapus. Penghapusan PVC akan ditunda sampai PVC tidak lagi aktif digunakan oleh _pod_ manapun, dan juga ketika admin menghapus sebuah PV yang terikat dengan sebuah PVC, PV tersebut tidak akan langsung dihapus. Penghapusan PV akan ditunda sampai PV tidak lagi terikat dengan sebuah PVC.
+
+Kamu dapat melihat PVC yang dilindungi ketika status PVC berisi `Terminating` dan daftar `Finalizers` meliputi `kubernetes.io/pvc-protection`:
+
+```shell
+kubectl describe pvc hostpath
+Name: hostpath
+Namespace: default
+StorageClass: example-hostpath
+Status: Terminating
+Volume:
+Labels:
+Annotations: volume.beta.kubernetes.io/storage-class=example-hostpath
+ volume.beta.kubernetes.io/storage-provisioner=example.com/hostpath
+Finalizers: [kubernetes.io/pvc-protection]
+...
+```
+
+Kamu dapat melihat sebuah PV dilindungi ketika status PV berisi `Terminating` dan daftar `Finalizers` juga meliputi `kubernetes.io/pv-protection`:
+
+```shell
+kubectl describe pv task-pv-volume
+Name: task-pv-volume
+Labels: type=local
+Annotations:
+Finalizers: [kubernetes.io/pv-protection]
+StorageClass: standard
+Status: Available
+Claim:
+Reclaim Policy: Delete
+Access Modes: RWO
+Capacity: 1Gi
+Message:
+Source:
+ Type: HostPath (bare host directory volume)
+ Path: /tmp/data
+ HostPathType:
+Events:
+```
+
+### Melakukan Reklaim
+
+Ketika seorang pengguna telah selesai dengan volumenya, ia dapat menghapus objek PVC dari API yang memungkinkan untuk reklamasi dari sumber daya tersebut. Kebijakan reklaim dari sebuah `PersistentVolume` (PV) menyatakan apa yang dilakukan kluster setelah volume dilepaskan dari klaimnya. Saat ini, volume dapat dipertahankan (_Retained_), didaur ulang (_Recycled_), atau dihapus (_Deleted_).
+
+#### _Retain_
+
+`Retain` merupakan kebijakan reklaim yang mengizinkan reklamasi manual dari sebuah sumber daya. Ketika `PersistentVolumeClaim` (PVC) dihapus, `PersistentVolume` (PV) masih akan tetap ada dan volume tersebut dianggap "terlepas" . Tetapi PV tersebut belum tersedia untuk klaim lainnya karena data milik pengklaim sebelumnya masih terdapat pada volume. Seorang administrator dapat mereklaim volume secara manual melalui beberapa langkah.
+
+1. Menghapus `PersistentVolume` (PV). Aset _storage_ yang terasosiasi dengan infrastruktur eksternal (seperti AWS EBS, GCE PD, Azure Disk, atau Cinder Volume) akan tetap ada setelah PV dihapus.
+2. Secara manual membersihkan data pada aset _storage_ terkait.
+3. Secara manual menghapus aset _storage_, atau jika kamu ingin menggunakan aset _storage_ yang sama, buatlah sebuah `PersistentVolume` baru dengan definisi aset _storage_ tersebut.
+
+#### _Delete_
+
+Untuk _volume plugin_ yang mendukung kebijakan reklaim `Delete`, penghapusan akan menghilangkan kedua objek dari Kubernetes, `PersistentVolume` (PV) dan juga aset _storage_ yang terasosiasi pada infrastruktur eksternal seperti, AWS EBS, GCE PD, Azure Disk, atau Cinder Volume. Volume yang disediakan secara dinamis mewarisi [kebijakan reklaim dari `StorageClass` miliknya](#reclaim-policy), yang secara bawaan adalah `Delete`. Administrator harus mengkonfigurasi `StorageClass` sesuai ekspektasi pengguna, jika tidak maka PV tersebut harus diubah atau ditambal setelah dibuat nanti. Lihat [Mengganti Kebijakan Reklaim pada PersistentVolume](/docs/tasks/administer-cluster/change-pv-reclaim-policy/).
+
+#### _Recycle_
+
+{{< warning >}}
+Kebijakan reklaim `Recycle` sudah ditinggalkan. Sebagai gantinya, pendekatan yang direkomendasikan adalah menggunakan penyediaan dinamis.
+{{< /warning >}}
+
+Jika didukung oleh _plugin volume_ yang berada di baliknya, kebijakan reklaim `Recycle` melakukan penghapusan dasar (`rm -rf /thevolume/*`) pada volume dan membuatnya kembali tersedia untuk klaim baru.
+
+Namun, seorang administrator dapat mengkonfigurasi templat _recycler pod_ kustom menggunakan argumen baris perintah _controller manager_ Kubernetes sebagaimana dijelaskan [di sini](/docs/admin/kube-controller-manager/). Templat _reycler pod_ kustom harus memiliki spesifikasi `volumes`, seperti yang ditunjukkan pada contoh di bawah:
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: pv-recycler
+ namespace: default
+spec:
+ restartPolicy: Never
+ volumes:
+ - name: vol
+ hostPath:
+ path: /any/path/it/will/be/replaced
+ containers:
+ - name: pv-recycler
+ image: "k8s.gcr.io/busybox"
+ command: ["/bin/sh", "-c", "test -e /scrub && rm -rf /scrub/..?* /scrub/.[!.]* /scrub/* && test -z \"$(ls -A /scrub)\" || exit 1"]
+ volumeMounts:
+ - name: vol
+ mountPath: /scrub
+```
+
+Namun, alamat yang dispesifikasikan pada templat _recycler pod_ kustom pada bagian `volumes` diganti dengan alamat pada volume yang akan didaur ulang.
+
+### Memperluas _Persistent Volumes Claim_
+
+{{< feature-state for_k8s_version="v1.11" state="beta" >}}
+
+Dukungan untuk memperluas PersistentVolumeClaim (PVC) sekarang sudah diaktifkan sejak awal. Kamu dapat memperluas
+tipe-tipe volume berikut:
+
+* gcePersistentDisk
+* awsElasticBlockStore
+* Cinder
+* glusterfs
+* rbd
+* Azure File
+* Azure Disk
+* Portworx
+* FlexVolumes
+* CSI
+
+Kamu hanya dapat memperluas sebuah PVC jika kolom `allowVolumeExpansion` dipasang sebagai benar pada _storage class_ miliknya.
+
+``` yaml
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: gluster-vol-default
+provisioner: kubernetes.io/glusterfs
+parameters:
+ resturl: "http://192.168.10.100:8080"
+ restuser: ""
+ secretNamespace: ""
+ secretName: ""
+allowVolumeExpansion: true
+```
+
+Untuk meminta volume yang lebih besar pada sebuah PVC, ubah objek PVC dan spesifikasikan ukuran yang lebih
+besar. Hal ini akan memicu perluasan dari volume yang berada di balik `PersistentVolume` (PV). Sebuah
+`PersistentVolume` (PV) baru tidak akan dibuat untuk memenuhi klaim tersebut. Sebaliknya, volume yang sudah ada akan diatur ulang ukurannya.
+
+#### Perluasan Volume CSI
+
+{{< feature-state for_k8s_version="v1.14" state="alpha" >}}
+
+Perluasan volume CSI mengharuskan kamu untuk mengaktifkan gerbang fitur `ExpandCSIVolumes` dan juga membutuhkan _driver_ CSI yang spesifik untuk mendukung perluasan volume. Silakan merujuk pada dokumentasi _driver_ spesifik CSI untuk informasi lebih lanjut.
+
+
+#### Mengubah ukuran sebuah volume yang memiliki _file system_
+
+Kamu hanya dapat mengubah ukuran volume yang memiliki _file system_ jika _file system_ tersebut adalah XFS, Ext3, atau Ext4.
+
+Ketika sebuah volume memiliki _file system_, _file system_ tersebut hanya akan diubah ukurannya ketika sebuah _pod_ baru dinyalakan menggunakan
+`PersistentVolumeClaim` (PVC) dalam mode _ReadWrite_. Maka dari itu, jika sebuah _pod_ atau _deployment_ menggunakan sebuah volume dan
+kamu ingin memperluasnya, kamu harus menghapus atau membuat ulang _pod_ tersebut setelah volume selesai diperluas oleh penyedia _cloud_ dalam _controller-manager_. Kamu dapat melihat status dari operasi pengubahan ukuran dengan menjalankan perintah `kubectl describe pvc`:
+
+```
+kubectl describe pvc
+```
+
+Jika `PersistentVolumeClaim` (PVC) memiliki status `FileSystemResizePending`, maka berarti aman untuk membuat ulang _pod_ menggunakan PersistentVolumeClaim (PVC) tersebut.
+
+FlexVolumes mengizinkan pengubahan ukuran jika _driver_ diatur dengan kapabilitas `RequiresFSResize` menjadi "_true_".
+FlexVolume dapat diubah ukurannya pada saat _pod_ mengalami _restart_.
+
+{{< feature-state for_k8s_version="v1.11" state="alpha" >}}
+
+#### Mengubah ukuran PersistentVolumeClaim (PVC) yang sedang digunakan
+
+Memperluas PVC yang sedang digunakan merupakan fitur alfa. Untuk menggunakannya, aktifkan gerbang fitur `ExpandInUsePersistentVolumes`.
+Pada kasus ini, kamu tidak perlu menghapus dan membuat ulang sebuah _Pod_ atau _deployment_ yang menggunakan PVC yang telah ada.
+PVC manapun yang sedang digunakan secara otomatis menjadi tersedia untuk _pod_ yang menggunakannya segera setelah _file system_ miliknya diperluas.
+Fitur ini tidak memiliki efek pada PVC yang tidak sedang digunakan oleh _Pod_ atau _deployment_. Kamu harus membuat sebuah _Pod_ yang
+menggunakan PVC sebelum perluasan dapat selesai dilakukan.
+
+Memperluas PVC yang sedang digunakan sudah ditambahkan pada rilis 1.13. Untuk mengaktifkan fitur ini gunakan `ExpandInUsePersistentVolumes` dan gerbang fitur `ExpandPersistentVolumes`. Gerbang fitur `ExpandPersistentVolumes` sudah diaktifkan sejak awal. Jika `ExpandInUsePersistentVolumes` sudah terpasang, FlexVolume dapat diubah ukurannya secara langsung tanpa perlu melakukan _restart_ pada _pod_.
+
+{{< note >}}
+Pengubahan ukuran FlexVolume hanya mungkin dilakukan ketika _driver_ yang menjalankannya mendukung pengubahan ukuran.
+{{< /note >}}
+
+{{< note >}}
+Memperluas volume EBS merupakan operasi yang memakan waktu. Terlebih lagi, ada kuota per volume untuk satu kali modifikasi setiap 6 jam.
+{{< /note >}}
+
+
+## Tipe-tipe _Persistent Volume_
+
+Tipe-tipe `PersistentVolume` (PV) diimplementasikan sebagai _plugin_. Kubernetes saat ini mendukung _plugin_ berikut:
+
+* GCEPersistentDisk
+* AWSElasticBlockStore
+* AzureFile
+* AzureDisk
+* FC (Fibre Channel)
+* Flexvolume
+* Flocker
+* NFS
+* iSCSI
+* RBD (Ceph Block Device)
+* CephFS
+* Cinder (OpenStack block storage)
+* Glusterfs
+* VsphereVolume
+* Quobyte Volumes
+* HostPath (Hanya untuk pengujian _single node_ -- penyimpanan lokal tidak didukung dan TIDAK AKAN BEKERJA pada kluster _multi-node_)
+* Portworx Volumes
+* ScaleIO Volumes
+* StorageOS
+
+## _Persistent Volume_
+
+Setiap PV memiliki sebuah _spec_ dan status, yang merupakan spesifikasi dan status dari volume tersebut.
+
+```yaml
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ name: pv0003
+spec:
+ capacity:
+ storage: 5Gi
+ volumeMode: Filesystem
+ accessModes:
+ - ReadWriteOnce
+ persistentVolumeReclaimPolicy: Recycle
+ storageClassName: slow
+ mountOptions:
+ - hard
+ - nfsvers=4.1
+ nfs:
+ path: /tmp
+ server: 172.17.0.2
+```
+
+### Kapasitas
+
+Secara umum, sebuah PV akan memiliki kapasitas _storage_ tertentu. Hal ini ditentukan menggunakan atribut `capacity` pada PV. Lihat [Model Sumber Daya](https://git.k8s.io/community/contributors/design-proposals/scheduling/resources.md) Kubernetes untuk memahami satuan yang diharapkan pada atribut `capacity`.
+
+Saat ini, ukuran _storage_ merupakan satu-satunya sumber daya yang dapat ditentukan atau diminta. Atribut-atribut lainnya di masa depan dapat mencakup IOPS, _throughput_, dsb.
+
+### Mode Volume
+
+{{< feature-state for_k8s_version="v1.13" state="beta" >}}
+
+Sebelum Kubernetes 1.9, semua _volume plugin_ akan membuat sebuah _filesystem_ pada PersistentVolume (PV).
+Sekarang, kamu dapat menentukan nilai dari `volumeMode` menjadi `block` untuk menggunakan perangkat _raw block_, atau `filesystem`
+untuk menggunakan sebuah _filesystem_. `filesystem` menjadi standar yang digunakan jika nilainya dihilangkan. Hal ini merupakan parameter API
+opsional.
+
+### Mode Akses
+
+Sebuah `PersistentVolume` (PV) dapat dipasangkan pada sebuah _host_ dengan cara apapun yang didukung oleh penyedia sumber daya. Seperti ditunjukkan pada tabel di bawah, para penyedia akan memiliki kapabilitas yang berbeda-beda dan setiap mode akses PV akan ditentukan menjadi mode-mode spesifik yang didukung oleh tiap volume tersebut. Sebagai contoh, NFS dapat mendukung banyak klien _read/write_, tetapi sebuah NFS PV tertentu mungkin diekspor pada server sebagai _read-only_. Setiap PV memilik seperangkat mode aksesnya sendiri yang menjelaskan kapabilitas dari PV tersebut.
+
+Beberapa mode akses tersebut antara lain:
+
+* ReadWriteOnce -- volume dapat dipasang sebagai _read-write_ oleh satu _node_
+* ReadOnlyMany -- volume dapat dipasang sebagai _read-only_ oleh banyak _node_
+* ReadWriteMany -- volume dapat dipasang sebagai _read-write_ oleh banyak _node_
+
+Pada CLI, mode-mode akses tersebut disingkat menjadi:
+
+* RWO - ReadWriteOnce
+* ROX - ReadOnlyMany
+* RWX - ReadWriteMany
+
+> __Penting!__ Sebuah volume hanya dapat dipasang menggunakan satu mode akses dalam satu waktu, meskipun volume tersebut mendukung banyak mode. Sebagai contoh, sebuah GCEPersistentDisk dapat dipasangkan sebagai ReadWriteOnce oleh satu _node_ atau ReadOnlyMany oleh banyak node, tetapi tidak dalam waktu yang bersamaan.
+
+
+| Volume Plugin | ReadWriteOnce| ReadOnlyMany| ReadWriteMany|
+| :--- | :---: | :---: | :---: |
+| AWSElasticBlockStore | ✓ | - | - |
+| AzureFile | ✓ | ✓ | ✓ |
+| AzureDisk | ✓ | - | - |
+| CephFS | ✓ | ✓ | ✓ |
+| Cinder | ✓ | - | - |
+| FC | ✓ | ✓ | - |
+| Flexvolume | ✓ | ✓ | depends on the driver |
+| Flocker | ✓ | - | - |
+| GCEPersistentDisk | ✓ | ✓ | - |
+| Glusterfs | ✓ | ✓ | ✓ |
+| HostPath | ✓ | - | - |
+| iSCSI | ✓ | ✓ | - |
+| Quobyte | ✓ | ✓ | ✓ |
+| NFS | ✓ | ✓ | ✓ |
+| RBD | ✓ | ✓ | - |
+| VsphereVolume | ✓ | - | - (works when pods are collocated) |
+| PortworxVolume | ✓ | - | ✓ |
+| ScaleIO | ✓ | ✓ | - |
+| StorageOS | ✓ | - | - |
+
+### Kelas
+
+Sebuah PV bisa memiliki sebuah kelas, yang dispesifikasi dalam pengaturan atribut
+`storageClassName` menjadi nama
+[StorageClass](/docs/concepts/storage/storage-classes/).
+Sebuah PV dari kelas tertentu hanya dapat terikat dengan PVC yang meminta
+kelas tersebut. Sebuah PV tanpa `storageClassName` tidak memiliki kelas dan hanya dapat terikat
+dengan PVC yang tidak meminta kelas tertentu.
+
+Dahulu, anotasi `volume.beta.kubernetes.io/storage-class` digunakan sebagai ganti
+atribut `storageClassName`. Anotasi ini masih dapat bekerja, namun
+akan dihilangkan sepenuhnya pada rilis Kubernetes mendatang.
+
+### Kebijakan Reklaim
+
+Kebijakan-kebijakan reklaim saat ini antara lain:
+
+* Retain -- reklamasi manual
+* Recycle -- penghapusan dasar (`rm -rf /thevolume/*`)
+* Delete -- aset _storage_ terasosiasi seperti AWS EBS, GCE PD, Azure Disk, atau OpenStack Cinder volume akan dihapus
+
+Saat ini, hanya NFS dan HostPath yang mendukung daur ulang. AWS EBS, GCE PD, Azure Disk, dan Cinder Volume mendukung penghapusan.
+
+### Opsi Pemasangan
+
+Seorang administrator Kubernetes dapat menspesifikasi opsi pemasangan tambahan untuk ketika sebuah _Persistent Volume_ dipasangkan pada sebuah _node_.
+
+{{< note >}}
+Tidak semua tipe _Persistent Volume_ mendukung opsi pemasanagan.
+{{< /note >}}
+
+Tipe-tipe volume yang mendukung opsi pemasangan antara lain:
+
+* AWSElasticBlockStore
+* AzureDisk
+* AzureFile
+* CephFS
+* Cinder (OpenStack block storage)
+* GCEPersistentDisk
+* Glusterfs
+* NFS
+* Quobyte Volumes
+* RBD (Ceph Block Device)
+* StorageOS
+* VsphereVolume
+* iSCSI
+
+Opsi pemasangan tidak divalidasi, sehingga pemasangan akan gagal jika salah satunya tidak valid.
+
+Dahulu, anotasi `volume.beta.kubernetes.io/mount-options` digunakan sebagai ganti
+atribut `mountOptions`. Anotasi ini masih dapat bekerja, namun
+akan dihilangkan sepenuhnya pada rilis Kubernetes mendatang.
+
+### Afinitas Node
+
+{{< note >}}
+Untuk kebanyakan tipe volume, kamu tidak perlu memasang kolom ini. Kolom ini secara otomatis terisi untuk tipe blok volume [AWS EBS](/docs/concepts/storage/volumes/#awselasticblockstore), [GCE PD](/docs/concepts/storage/volumes/#gcepersistentdisk) dan [Azure Disk](/docs/concepts/storage/volumes/#azuredisk). Kamu harus mengaturnya secara eksplisit untuk volume [lokal](/docs/concepts/storage/volumes/#local).
+{{< /note >}}
+
+Sebuah PV dapat menspesifikasi [afinitas node](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volumenodeaffinity-v1-core) untuk mendefinisikan batasan yang membatasi _node_ mana saja yang dapat mengakses volume tersebut. _Pod_ yang menggunakan sebuah PV hanya akan bisa dijadwalkan ke _node_ yang dipilih oleh afinitas _node_.
+
+### Fase
+
+Sebuah volume akan berada dalam salah satu fase di bawah ini:
+
+* Available -- sumber daya bebas yang belum terikat dengan sebuah klaim
+* Bound -- volume sudah terikat dengan sebuah klaim
+* Released -- klaim sudah dihapus, tetapi sumber daya masih belum direklaim oleh kluster
+* Failed -- volume gagal menjalankan reklamasi otomatis
+
+CLI akan menunjukkan nama dari PVC yang terikat pada PV.
+
+## PersistentVolumeClaims
+
+Setiap PVC memiliki _spec_ dan status, yang merupakan spesifikasi dan status dari klaim.
+
+```yaml
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: myclaim
+spec:
+ accessModes:
+ - ReadWriteOnce
+ volumeMode: Filesystem
+ resources:
+ requests:
+ storage: 8Gi
+ storageClassName: slow
+ selector:
+ matchLabels:
+ release: "stable"
+ matchExpressions:
+ - {key: environment, operator: In, values: [dev]}
+```
+
+### Mode Akses
+
+Klaim menggunakan penulisan yang sama dengan volume ketika meminta _storage_ dengan mode akses tertentu.
+
+### Mode Volume
+
+Klaim menggunakan penulisan yang sama dengan volume untuk mengindikasikan konsumsi dari volume sebagai _filesystem_ ataupun perangkat _block_.
+
+### Sumber daya
+
+Klaim, seperti _pod_, bisa meminta sumber daya dengan jumlah tertentu. Pada kasus ini, permintaan untuk _storage_. [Model sumber daya](https://git.k8s.io/community/contributors/design-proposals/scheduling/resources.md) yang sama berlaku untuk baik volume maupun klaim.
+
+### _Selector_
+
+Klaim dapat menspesifikasi [_label selector_](/docs/concepts/overview/working-with-objects/labels/#label-selectors) untuk memilih serangkaian volume lebih jauh. Hanya volume yang cocok labelnya dengan _selector_ yang dapat terikat dengan klaim. _Selector_ dapat terdiri dari dua kolom:
+
+* `matchLabels` - volume harus memiliki label dengan nilai ini
+* `matchExpressions` - daftar dari persyaratan yang dibuat dengan menentukan kunci, daftar nilai, dan operator yang menghubungkan kunci dengan nilai. Operator yang valid meliputi In, NotIn, Exists, dan DoesNotExist.
+
+Semua persyaratan tersebut, dari `matchLabels` dan `matchExpressions` akan dilakukan operasi AND bersama – semuanya harus dipenuhi untuk mendapatkan kecocokan.
+
+### Kelas
+
+Sebuah klaim dapat meminta kelas tertentu dengan menspesifikasi nama dari
+[StorageClass](/docs/concepts/storage/storage-classes/)
+menggunakan atribut `storageClassName`.
+Hanya PV dari kelas yang diminta, yang memiliki `storageClassName` yang sama dengan PVC, yang dapat
+terikat dengan PVC.
+
+PVC tidak harus meminta sebuah kelas. Sebuah PVC dengan `storageClassName` miliknya bernilai
+`""` akan selalu diinterpretasikan sebagai meminta PV tanpa kelas, jadi PVC
+hanya bisa terikat ke PV tanpa kelas (tanpa anotasi atau bernilai
+`""`). Sebuah PVC tanpa `storageClassName` tidaklah sama dan diperlakukan berbeda
+oleh kluster tergantung apakah
+[_admission plugin_ `DefaultStorageClass`](/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass)
+dinyalakan.
+
+* Jika _admission plugin_ dinyalakan, administrator bisa menspesifikasi
+ `StorageClass` standar. Seluruh PVC yang tidak memiliki `storageClassName` dapat terikat hanya ke
+ PVs standar. Menspesifikasikan `StorageClass` standar dapat dilakukan dengan mengatur
+ anotasi `storageclass.kubernetes.io/is-default-class` menjadi "_true_" pada
+ sebuah objek `StorageClass`. Jika administrator tidak menspesifikasikan standar apapun,
+ kluster menanggapi pembuatan PVC sekan-akan _admission plugin_ dimatikan. Jika
+ ada lebih dari satu setelan standar dispesifikasikan, _admission plugin_ melarang pembuatan seluruh
+ PVC.
+* Jika _admission plugin_ dimatikan, tidak ada pilihan menggunakan
+ `StorageClass` standar. Semua PVC yang tidak memiliki `storageClassName` hanya dapat diikat ke PV yang
+ tidak memiliki kelas. Pada kasus ini, PVC yang tidak memiliki `storageClassName` diperlakukan
+ sama seperti PVC yang memiliki `storageClassName` bernilai `""`.
+
+Tergantung metode instalasi, sebuah StorageClass dari setelan standar dapat dibuat
+ke kluster Kubernetes oleh _addon manager_ pada saat instalasi.
+
+Ketika sebuah PVC menspesifikasi sebuah `selector` selain meminta `StorageClass`,
+kebutuhan tersebut akan digabungkan dengan operasi AND bersama: hanya PV dari kelas yang diminta dan dengan
+label yang diminta yang dapat terikat ke PVC.
+
+{{< note >}}
+Saat ini, sebuah PVC dengan `selector` yang tak kosong tidak dapat memiliki PV yang disediakan secara dinamis untuknya.
+{{< /note >}}
+
+Dahulu, anotasi `volume.beta.kubernetes.io/storage-class` digunakan sebagai ganti
+atribut `storageClassName`. Anotasi ini masih dapat bekerja, namun
+akan dihilangkan sepenuhnya pada rilis Kubernetes mendatang.
+
+## Klaim sebagai Volume
+
+_Pod_ mengakses _storage_ dengan menggunakan klaim sebagai volume. Klaim harus berada pada _namespace_ yang sama dengan _pod_ yang menggunakan klaim tersebut. Kluster menemukan klaim pada _namespace_ yang sama dengan _pod_ dan menggunakannya untuk mendapatkan `PersistentVolume` (PV) yang ada di baliknya. Volume tersebut kemudian dipasangkan ke _host_ dan lalu ke _pod_.
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: mypod
+spec:
+ containers:
+ - name: myfrontend
+ image: nginx
+ volumeMounts:
+ - mountPath: "/var/www/html"
+ name: mypd
+ volumes:
+ - name: mypd
+ persistentVolumeClaim:
+ claimName: myclaim
+```
+
+### Catatan Mengenai _Namespace_
+
+Ikatan `PersistentVolumes` bersifat eksklusif, dan karena `PersistentVolumeClaims` merupakan objek yang berada pada _namespace_, pemasangan klaim dengan "banyak" mode (`ROX`, `RWX`) hanya dimungkinkan jika berada dalam satu _namespace_ yang sama.
+
+## Dukungan Volume _Raw Block_
+
+{{< feature-state for_k8s_version="v1.13" state="beta" >}}
+
+_Volume plugins_ berikut mendukung volume _raw block_, termasuk penyediaan dinamis jika
+mungkin diterapkan.
+
+* AWSElasticBlockStore
+* AzureDisk
+* FC (Fibre Channel)
+* GCEPersistentDisk
+* iSCSI
+* Local volume
+* RBD (Ceph Block Device)
+* VsphereVolume (alpha)
+
+{{< note >}}
+Hanya FC dan volume iSCSI yang mendukung volume _raw block_ pada Kubernetes 1.9.
+Dukungan untuk _plugin_ lainnya ditambahkan pada 1.10.
+{{< /note >}}
+
+### _Persistent Volume_ menggunakan Volume _Raw Block_
+```yaml
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ name: block-pv
+spec:
+ capacity:
+ storage: 10Gi
+ accessModes:
+ - ReadWriteOnce
+ volumeMode: Block
+ persistentVolumeReclaimPolicy: Retain
+ fc:
+ targetWWNs: ["50060e801049cfd1"]
+ lun: 0
+ readOnly: false
+```
+### _Persistent Volume Claim_ meminta Volume _Raw Block_
+```yaml
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: block-pvc
+spec:
+ accessModes:
+ - ReadWriteOnce
+ volumeMode: Block
+ resources:
+ requests:
+ storage: 10Gi
+```
+### Spesifikasi _Pod_ yang menambahkan alamat Perangkat _Raw Block_ pada kontainer
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: pod-with-block-volume
+spec:
+ containers:
+ - name: fc-container
+ image: fedora:26
+ command: ["/bin/sh", "-c"]
+ args: [ "tail -f /dev/null" ]
+ volumeDevices:
+ - name: data
+ devicePath: /dev/xvda
+ volumes:
+ - name: data
+ persistentVolumeClaim:
+ claimName: block-pvc
+```
+
+{{< note >}}
+Ketika menambahkan sebuah perangkat _raw block_ untuk sebuah _Pod_, kita menspesifikasi alamat perangkat dalam kontainer alih-alih alamat pemasangan.
+{{< /note >}}
+
+### Mengikat _Block Volume_
+
+Jika seorang pengguna meminta sebuah volume _raw block_ dengan mengindikasikannya menggunakan kolom `volumeMode` pada _spec_ `PersistentVolumeClaim` (PVC), aturan pengikatannya sedikit berbeda dibanding rilis-rilis sebelumnya yang tidak memerhatikan mode ini sebagai bagian dari _spec_.
+Di bawah merupakan tabel dari kemungkinan kombinasi yang pengguna dan admin dapat spesifikasikan untuk meminta sebuah perangkat _raw block_. Tabel tersebut mengindikasikan apakah volume akan terikat atau tidak jika dikombinasikan dengan cara tertentu:
+Matriks pengikatan volume untuk volume yang disediakan secara statis:
+
+| PV volumeMode | PVC volumeMode | Hasil |
+| --------------|:---------------:| ----------------:|
+| unspecified | unspecified | TERIKAT |
+| unspecified | Block | TIDAK TERIKAT |
+| unspecified | Filesystem | TERIKAT |
+| Block | unspecified | TIDAK TERIKAT |
+| Block | Block | TERIKAT |
+| Block | Filesystem | TIDAK TERIKAT |
+| Filesystem | Filesystem | TERIKAT |
+| Filesystem | Block | TIDAK TERIKAT |
+| Filesystem | unspecified | TERIKAT |
+
+{{< note >}}
+Hanya volume yang disediakan secara statis yang didukung untuk rilis alfa. Administrator harus memperhatikan nilai-nilai tersebut ketika mengerjakan perangkat-perangkat _raw block_.
+{{< /note >}}
+
+## _Volume Snapshot_ dan Dukungan Pemulihan Volume dari _Snapshot_
+
+{{< feature-state for_k8s_version="v1.12" state="alpha" >}}
+
+Fitur _volume snapshot_ ditambahkan hanya untuk mendukung _CSI Volume Plugins_. Untuk lebih detail, lihat [_volume snapshots_](/docs/concepts/storage/volume-snapshots/).
+
+Untuk mengaktifkan dukungan pemulihan sebuah volume dari sebuah sumber data _volume snapshot_, aktifkan
+gerbang fitur `VolumeSnapshotDataSource` pada apiserver dan _controller-manager_.
+
+### Membuat _Persistent Volume Claim_ dari _Volume Snapshot_
+```yaml
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: restore-pvc
+spec:
+ storageClassName: csi-hostpath-sc
+ dataSource:
+ name: new-snapshot-test
+ kind: VolumeSnapshot
+ apiGroup: snapshot.storage.k8s.io
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 10Gi
+```
+
+## Menulis Konfigurasi Portabel
+
+Jika kamu menulis templat konfigurasi atau contoh yang dapat berjalan pada berbagai macam kluster
+dan membutuhkan _persistent storage_, kami merekomendasikan agar kamu menggunakan pola berikut:
+
+- Masukkan objek PersistentVolumeClaim (PVC) pada kumpulan _config_ (bersamaan dengan
+ Deployments, ConfigMaps, dsb).
+- Jangan memasukkan objek PersistentVolume (PV) pada _config_, karena pengguna yang menginstantiasi
+ _config_ tersebut kemungkinan tidak memiliki izin untuk membuat PersistentVolume (PV).
+- Berikan pengguna opsi untuk menyediakan nama _storage class_ ketika menginstantiasi
+ templat.
+ - Jika pengguna menyediakan nama _storage class_, taruh nilai tersebut pada
+ kolom `persistentVolumeClaim.storageClassName`.
+ Hal ini akan membuat PVC agar sesuai dengan _storage class_
+ yang tepat jika kluster memiliki banyak StorageClass yang diaktifkan oleh admin.
+ - Jika pengguna tidak menyediakan nama _storage class_, biarkan
+ kolom `persistentVolumeClaim.storageClassName` kosong.
+ - Hal ini kakan membuat sebuah PV disediakan secara otomatis untuk pengguna dengan
+ StorageClass standar pada kluster. Banyak lingkungan kluster memiliki
+ StorageClass standar yang sudah terpasang, atau administrator dapat membuat
+ StorageClass standar sendiri.
+- Dalam pembuatan, perhatikan PVC yang tidak kunjung terikat setelah beberapa lama
+ dan beritahukan hal ini pada pengguna, karena hal ini dapat mengindikasikan kluster tidak
+ memiliki dukungan penyimpanan dinamis (di mana pengguna harus membuat PV yang sesuai)
+ atau kluster tidak memiliki sistem penyimpanan (di mana penggun tidak dapat membuat
+ PVC yang membutuhkan _config_).
+
+{{% /capture %}}
diff --git a/content/id/docs/concepts/storage/storage-limits.md b/content/id/docs/concepts/storage/storage-limits.md
new file mode 100644
index 0000000000..4a9ae8311c
--- /dev/null
+++ b/content/id/docs/concepts/storage/storage-limits.md
@@ -0,0 +1,80 @@
+---
+title: Limit Volume yang Spesifik terhadap Node
+content_template: templates/concept
+---
+
+{{% capture overview %}}
+
+Laman ini menjelaskan soal jumlah volume maksimal yang dapat dihubungkan
+ke sebuah Node untuk berbagai penyedia layanan cloud.
+
+Penyedia layanan cloud seperti Google, Amazon, dan Microsoft pada umumnya memiliki
+keterbatasan dalam jumlah volume yang bisa terhubung ke sebuah Node. Keterbatasn ini
+sangatlah penting untuk diketahui Kubernetes dalam menentukan keputusan. Jika tidak,
+Pod-pod yang telah dijadwalkan pada sebuah Node akan macet dan menunggu terus-menerus
+untuk terhubung pada volume.
+
+{{% /capture %}}
+
+{{% capture body %}}
+
+## Limit _default_ pada Kubernetes
+
+Kubernetes _scheduler_ memiliki limit _default_ untuk jumlah volume
+yang dapat terhubung pada sebuah Node:
+
+
+
+## Limit _custom_
+
+Kamu dapat mengganti limit-limit ini dengan mengkonfigurasi nilai dari
+variabel _environment_ `KUBE_MAX_PD_VOLS`, lalu menjalankan _scheduler_.
+
+Berhati-hatilah jika kamu menerapkan limit yang lebih besar dari limit _default_.
+Perhatikan dokumentasi penyedia layanan cloud untuk hal ini, dan pastikan Node
+benar-benar dapat mendukung nilai limit yang kamu inginkan.
+
+Limit ini diterapkan untuk seluruh kluster, jadi akan berdampak pada semua Node.
+
+## Limit volume dinamis
+
+{{< feature-state state="beta" for_k8s_version="v1.12" >}}
+
+Sebagai fitur Alpha, Kubernetes 1.11 memperkenalkan dukungan untuk limit volume yang dinamis berdasarkan tipe Node.
+Pada Kubernettes 1.12, fitur ini telah mendapat promosi ke Beta dan akan diaktifkan secara _default_.
+
+Limit volume dinamis mendukung tipe-tipe volume berikut:
+
+- Amazon EBS
+- Google Persistent Disk
+- Azure Disk
+- CSI
+
+
+Ketika fitur limit volume dinamis diaktifkan, Kubernetes secara otomatis
+menentukan tipe Node dan menerapkan jumlah volume dengan tepat, berapa yang bisa
+terhubung Node. Sebagai contoh:
+
+* Pada
+Google Compute Engine,
+maskimal 128 jumlah volumes dapat terhubung pada sebuah node, [tergantung dari
+tipe node](https://cloud.google.com/compute/docs/disks/#pdnumberlimits).
+
+* Untuk Amazon EBS disk pada tipe instans M5,C5,R5,T3 dan Z1D, Kubernetes hanya memperbolehkan 25
+volume dapat terhubung pada sebuah Node. Untuk tipe instans lainnya pada
+Amazon Elastic Compute Cloud (EC2),
+Kubernetes memperbolehkan 39 jumlah volume dapat terhubung pada sebuah Node.
+
+* Pada Azure, maksimal 64 jumlah disk dapat terhubung pada suatu node, tergantung dari tipe node. Untuk perinciannya
+bisa dilihat pada [Ukuran mesin virtual (VM) di Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes).
+
+* Untuk CSI, driver manapun yang memberitahukan (_advertise_) limit volume terhubung melalui spek CSI akan memiliki limit tersebut yang disediakan
+ sebagai properti Node dan Scheduler tidak akan menjadwalkan Pod dengan volume pada Node manapun yang sudah penuh kapasitasnya. Untuk penjelasan lebih jauh
+ lihat [spek CSI](https://github.com/container-storage-interface/spec/blob/master/spec.md#nodegetinfo).
+
+{{% /capture %}}
diff --git a/content/id/docs/concepts/workloads/controllers/cron-jobs.md b/content/id/docs/concepts/workloads/controllers/cron-jobs.md
new file mode 100644
index 0000000000..9f50e0b42c
--- /dev/null
+++ b/content/id/docs/concepts/workloads/controllers/cron-jobs.md
@@ -0,0 +1,58 @@
+---
+title: CronJob
+content_template: templates/concept
+weight: 80
+---
+
+{{% capture overview %}}
+
+Suatu CronJob menciptakan [Job](/docs/concepts/workloads/controllers/jobs-run-to-completion/) yang dijadwalkan berdasarkan waktu tertentu.
+
+Satu objek CronJob sepadan dengan satu baris pada _file_ _crontab_ (_cron table_). CronJob tersebut menjalankan suatu pekerjaan secara berkala
+pada waktu tertentu, dituliskan dalam format [Cron](https://en.wikipedia.org/wiki/Cron).
+
+{{< note >}}
+Seluruh waktu `schedule:` pada _**CronJob**_ mengikuti zona waktu dari _master_ di mana Job diinisiasi.
+{{< /note >}}
+
+Untuk panduan dalam berkreasi dengan _cron job_, dan contoh _spec file_ untuk suatu _cron job_, lihat [Menjalankan otomasi _task_ dengan _cron job_](/docs/tasks/job/automated-tasks-with-cron-jobs).
+
+{{% /capture %}}
+
+
+{{% capture body %}}
+
+## Limitasi _Cron Job_
+
+Suatu _cron job_ menciptakan _kurang lebih_ satu objek Job setiap penjadwalan. Istilah yang digunakan adalah "_kurang lebih_" karena
+terdapat beberapa kasus yang menyebabkan dua Job terbuat, atau tidak ada Job sama sekali yang terbuat. Kemungkinan-kemungkinan
+seperti itu memang diusahakan untuk tidak sering terjadi, tapi tidak ada jaminan kemungkinan-kemungkinan tersebut tidak akan pernah terjadi.
+Oleh karena itu, Job sudah sepantasnya memiliki sifat idempoten.
+
+Jika pengaturan `startingDeadlineSeconds` menggunakan nilai yang besar atau tidak diatur (menggunakan nilai _default_)
+dan jika pengaturan `concurrencyPolicy` dijadikan `Allow`, Job yang terbuat akan dijalankan paling tidak satu kali.
+
+CronJob _controller_ memeriksa berapa banyak jadwal yang terlewatkan sejak waktu terakhir eksekusi hingga saat ini. Jika terdapat lebih dari 100 jadwal yang terlewat, maka CronJob _controller_ tidak memulai Job dan mencatat kesalahan:
+
+````
+Cannot determine if job needs to be started. Too many missed start time (> 100). Set or decrease .spec.startingDeadlineSeconds or check clock skew.
+````
+
+Perlu diingat bahwa jika pengaturan `startingDeadlineSeconds` memiliki suatu nilai (bukan `nil`), CronJob _controller_ akan menghitung berapa banyak Job yang terlewatkan dari sejak `startingDeadlineSeconds` hingga sekarang dan bukan sejak waktu terakhir eksekusi. Misalnya: Jika `startingDeadlineSeconds` memiliki nilai `200`, CronJob _controller_ akan menghitung berapa banyak Job yang terlewatkan dalam 200 detik terakhir.
+
+Suatu CronJob dianggap terlewat jika ia gagal diciptakan pada waktu yang semestinya. Misalnya: Jika pengaturan `concurrencyPolicy` dijadikan `Forbid`
+dan suatu CronJob dicoba dijadwalkan saat masih ada penjadwalan sebelumnya yang masih berjalan, maka ia akan dianggap terlewat.
+
+Contoh: Suatu CronJob akan menjadwalkan Job baru tiap satu menit dimulai sejak `08:30:00`, dan `startingDeadlineSeconds` tidak diatur.
+Jika CronJob _controller_ tidak aktif dari `08:29:00` sampai `10:21:00`, Job tidak akan dijalankan karena jumlah Job yang terlewat
+sudah lebih dari 100.
+
+Sebagai ilustrasi lebih lanjut, misalkan suatu CronJob diatur untuk menjadwalkan Job baru setiap satu menit dimulai sejak `08:30:00`,
+dan `startingDeadlineSeconds` memiliki nilai `200`. Jika CronJob _controller_ tidak aktif seperti pada contoh sebelumnya (`08:29:00` sampai `10:21:00`),
+Job akan tetap dijalankan pada 10:22:00. Hal ini terjadi karena CronJob _controller_ memeriksa banyaknya jadwal yang terlewatkan pada 200 detik terakhir
+(dalam kasus ini: 3 jadwal terlewat), dan bukan dari sejak waktu eksekusi terakhir.
+
+CronJob hanya bertanggung-jawab untuk menciptakan Job yang sesuai dengan jadwalnya sendiri,
+dan Job tersebut bertanggung jawab terhadap pengelolaan Pod yang direpresentasikan olehnya.
+
+{{% /capture %}}
\ No newline at end of file
diff --git a/content/id/docs/concepts/workloads/pods/init-containers.md b/content/id/docs/concepts/workloads/pods/init-containers.md
new file mode 100644
index 0000000000..d54f18c0af
--- /dev/null
+++ b/content/id/docs/concepts/workloads/pods/init-containers.md
@@ -0,0 +1,281 @@
+---
+title: Init Container
+content_template: templates/concept
+weight: 40
+---
+
+{{% capture overview %}}
+Halaman ini menyediakan ikhtisar untuk Init Container, yaitu Container khusus yang dijalankan sebelum Container aplikasi dan berisi skrip peralatan atau _setup_ yang tidak tersedia di dalam _image_ dari Container aplikasi.
+{{% /capture %}}
+
+Fitur ini telah keluar dari trek Beta sejak versi 1.6. Init Container dapat dispesifikasikan di dalam PodSpec bersama dengan _array_ `containers` aplikasi. Nilai anotasi _beta_ akan tetap diperhitungkan dan akan menimpa nilai pada PodSpec, tetapi telah ditandai sebagai kedaluarsa pada versi 1.6 dan 1.7. Pada versi 1.8, anotasi _beta_ tidak didukung lagi dan harus diganti menjadi nilai pada PodSpec.
+
+{{% capture body %}}
+
+## Memahami Init Container
+
+Sebuah [Pod](/docs/concepts/workloads/pods/pod-overview/) dapat memiliki beberapa Container yang berjalan di dalamnya, dan dapat juga memiliki satu atau lebih Init Container, yang akan berjalan sebelum Container aplikasi dijalankan.
+
+Init Container sama saja seperti Container biasa, kecuali:
+
+* Mereka selalu berjalan hingga selesai.
+* Setiap Init Container harus selesai secara sukses sebelum Init Container berikutnya dijalankan.
+
+Jika sebuah Init Container tidak selesai secara sukses untuk sebuah Pod, Kubernetes akan mengulang kembali Pod tersebut secara terus menerus hingga Init Container selesai secara sukses. Tetapi, jika Pod tersebut memiliki nilai `restartPolicy` berupa `Never`, Pod tersebut tidak akan diulang kembali.
+
+Untuk menspesifikasikan sebuah Container sebagai Init Container, tambahkan kolom `initContainers` pada PodSpec sebagai sebuah _array_ JSON yang berisi objek dengan tipe [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core), berdampingan dengan array `containers` aplikasi.
+Status-status dari Init Container dikembalikan di kolom `.status.initContainerStatuses` sebagai sebuah _array_ dari status-status Container (mirip seperti kolom `status.containerStatuses`)
+
+### Perbedaan dengan Container biasa
+
+Init Container mendukung semua kolom dan fitur dari Container aplikasi, termasuk konfigurasi `limit` sumber daya, `volume`, dan keamanan. Tetapi, `request` dan `limit` sumber daya dari sebuah Init Container ditangani dengan cara yang sedikit berbeda, yang didokumentasikan di bagian [Sumber Daya](#sumber-daya) di bawah. Juga, Init Container tidak mendukung _readiness probe_ karena mereka harus berjalan hingga selesai sebelum Pod dapat siap.
+
+Jika beberapa Init Container dispesifikasikan untuk sebuah Pod, Container-container tersebut akan dijalankan satu per satu secara berurutan. Setiap Init Container harus selesai secara sukses sebelum yang berikutnya dapat berjalan.
+Saat semua Init Container telah berjalan hingga selesai, Kubernetes akan menginisialisasi Pod dan menjalankan Container aplikasi seperti biasa.
+
+## Apa kegunaan Init Container?
+
+Karena Init Container memiliki _image_ yang berbeda dengan Container aplikasi, mereka memiliki beberapa kelebihan untuk kode yang berhubungan dengan dimulainya Init Container:
+
+* Mereka dapat berisi dan menjalankan skrip peralatan yang tidak diinginkan untuk berada di dalam _image_ Container aplikasi karena alasan keamanan.
+* Mereka dapat berisi skrip peralatan atau _setup_ yang tidak tersedia di dalam _image_ aplikasi. Misalnya, kita tidak perlu membuat _image_ dengan instruksi `FROM` dari _image_ lainnya hanya untuk menggunakan peralatan seperti `sed`, `awk`, `python`, atau `dig` pada saat _setup_.
+* Peran _builder_ atau _deployer_ dari _image_ dapat bekerja secara independen tanpa harus digabung untuk membuat satu _image_ aplikasi.
+* Mereka menggunakan _namespace_ Linux, sehingga mereka dapat memiliki sudut pandang _filesystem_ yang berbeda dengan Container aplikasi. Oleh karenanya, mereka dapat diberikan akses terhadap `Secret` yang tidak boleh diakses oleh Container aplikasi.
+* Mereka berjalan hingga selesai sebelum Container aplikasi manapun dimulai, sedangkan Container aplikasi dijalankan secara paralel, sehingga Init Container menyediakan cara yang mudah untuk menunda dijalankannya Container aplikasi hingga ketentuan-ketentuan yang diinginkan dipenuhi.
+
+### Contoh-contoh
+
+Berikut beberapa contoh kasus penggunaan Init Container:
+
+* Menunggu sebuah Service untuk dibuat dengan perintah _shell_ seperti:
+
+ for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
+
+* Mendaftarkan suatu Pod ke sebuah peladen terpisah dari _downward API_ dengan perintah seperti:
+
+ `curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d 'instance=$()&ip=$()'`
+
+* Menunggu beberapa waktu sebelum menjalankan Container aplikasi dengan perintah seperti `sleep 60`.
+* Mengklon sebuah _git repository_ ke dalam sebuah _volume_.
+* Menaruh nilai-nilai tertentu ke dalam sebuah _file_ konfigurasi dan menjalankan peralatan _template_ untuk membuat _file_ konfigurasi secara dinamis untuk Container aplikasi utama. Misalnya, untuk menaruh nilai POD_IP ke dalam sebuah konfigurasi dan membuat konfigurasi aplikasi utama menggunakan Jinja.
+
+Contoh-contoh penggunaan yang lebih detail dapat dilihat pada [dokumentasi StatefulSet](/docs/concepts/workloads/controllers/statefulset/) dan [petunjuk Produksi Pod](/docs/tasks/configure-pod-container/configure-pod-initialization/).
+
+### Menggunakan Init Container
+
+_File_ YAML untuk Kubernetes 1.5 berikut menguraikan sebuah Pod sederhana yang memiliki dua buah Init Container.
+Pod pertama menunggu `myservice` dan yang kedua menunggu `mydb`. Saat kedua Init Container tersebut sudah selesai, Podnya akan dijalankan.
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: myapp-pod
+ labels:
+ app: myapp
+ annotations:
+ pod.beta.kubernetes.io/init-containers: '[
+ {
+ "name": "init-myservice",
+ "image": "busybox:1.28",
+ "command": ["sh", "-c", "until nslookup myservice; do echo waiting for myservice; sleep 2; done;"]
+ },
+ {
+ "name": "init-mydb",
+ "image": "busybox:1.28",
+ "command": ["sh", "-c", "until nslookup mydb; do echo waiting for mydb; sleep 2; done;"]
+ }
+ ]'
+spec:
+ containers:
+ - name: myapp-container
+ image: busybox:1.28
+ command: ['sh', '-c', 'echo The app is running! && sleep 3600']
+```
+
+Ada sintaksis baru pada Kubernetes 1.6, walaupun sintaksis anotasi yang lama tetap akan bekerja untuk versi 1.6 dan 1.7. Sintaksis yang baru harus digunakan untuk versi 1.8 ke atas. Deklarasi Init Container dipindahkan ke dalam `spec`:
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: myapp-pod
+ labels:
+ app: myapp
+spec:
+ containers:
+ - name: myapp-container
+ image: busybox:1.28
+ command: ['sh', '-c', 'echo The app is running! && sleep 3600']
+ initContainers:
+ - name: init-myservice
+ image: busybox:1.28
+ command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
+ - name: init-mydb
+ image: busybox:1.28
+ command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
+```
+
+Sintaksis versi 1.5 tetap akan bekerja pada versi 1.6 dan 1.7, tetapi kami menyarankan untuk menggunakan sintaksis versi 1.6. Pada Kubernetes 1.6, Init Container dijadikan sebagai sebuah kolom di dalam API Kubernetes. Anotasi _beta_ tetap akan diperhitungkan pada versi 1.6 dan 1.7, tetapi tidak didukung lagi pada versi 1.8 ke atas.
+
+_File_ YAML di bawah menguraikan Service `mydb` dan `myservice`.
+
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: myservice
+spec:
+ ports:
+ - protocol: TCP
+ port: 80
+ targetPort: 9376
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: mydb
+spec:
+ ports:
+ - protocol: TCP
+ port: 80
+ targetPort: 9377
+```
+
+Pod ini dapat dijalankan dan di-_debug_ dengan menggunakan perintah berikut:
+
+```shell
+kubectl apply -f myapp.yaml
+```
+
+```
+pod/myapp-pod created
+```
+
+```shell
+kubectl get -f myapp.yaml
+```
+
+```
+NAME READY STATUS RESTARTS AGE
+myapp-pod 0/1 Init:0/2 0 6m
+```
+
+```shell
+kubectl describe -f myapp.yaml
+```
+
+```
+Name: myapp-pod
+Namespace: default
+[...]
+Labels: app=myapp
+Status: Pending
+[...]
+Init Containers:
+ init-myservice:
+[...]
+ State: Running
+[...]
+ init-mydb:
+[...]
+ State: Waiting
+ Reason: PodInitializing
+ Ready: False
+[...]
+Containers:
+ myapp-container:
+[...]
+ State: Waiting
+ Reason: PodInitializing
+ Ready: False
+[...]
+Events:
+ FirstSeen LastSeen Count From SubObjectPath Type Reason Message
+ --------- -------- ----- ---- ------------- -------- ------ -------
+ 16s 16s 1 {default-scheduler } Normal Scheduled Successfully assigned myapp-pod to 172.17.4.201
+ 16s 16s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Pulling pulling image "busybox"
+ 13s 13s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Pulled Successfully pulled image "busybox"
+ 13s 13s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Created Created container with docker id 5ced34a04634; Security:[seccomp=unconfined]
+ 13s 13s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Started Started container with docker id 5ced34a04634
+```
+
+```shell
+kubectl logs myapp-pod -c init-myservice # Memeriksa Init Container pertama
+kubectl logs myapp-pod -c init-mydb # Memeriksa Init Container kedua
+```
+
+Saat kita menjalankan Service `mydb` dan `myservice`, kita dapat melihat Init Container telah selesai dan `myapp-pod` pun dibuat:
+
+```shell
+kubectl apply -f services.yaml
+```
+
+```
+service/myservice created
+service/mydb created
+```
+
+```shell
+kubectl get -f myapp.yaml
+NAME READY STATUS RESTARTS AGE
+myapp-pod 1/1 Running 0 9m
+```
+
+Contoh ini sangat sederhana, tetapi dapat memberikan sedikit petunjuk bagi kamu untuk membuat Init Container sendiri.
+
+## Perilaku mendetail
+
+Saat dimulainya sebuah Pod, Init Container dijalankan secara berurutan, setelah jaringan dan _volume_ telah diinisialisasi. Setiap Init Container harus selesai dan keluar secara berhasil sebelum yang berikutnya dijalankan. Jika ada Init Container yang gagal dijalankan atau keluar secara gagal, dia akan diulang kembali sesuai dengan `restartPolicy` yang dimiliki Pod. Tetapi, jika `restartPolicy` Pod disetel dengan nilai `Always`, Init Container akan menggunakan strategi `RestartPolicy` `OnFailure`.
+
+Sebuah Pod tidak dapat masuk ke status `Ready` hingga semua Init Container berhasil selesai. _Port_ di sebuah Init Container tidak diagregasikan di dalam sebuah Service. Sebuah Pod yang sedang diinisalisasikan akan masuk ke dalam status `Pending`, tetapi akan memiliki kondisi `Initializing` yang disetel menjadi `true`.
+
+Jika sebuah Pod diulang [kembali](#alasan-pod-diulang-kembali), semua Init Container harus dijalankan kembali.
+
+Perubahan pada spesifikasi Init Container dibatasi hanya pada kolom `image` pada Init Container. Mengganti kolom `image` sebuah Init Container sama dengan mengulang kembali Pod tersebut.
+
+Karena Init Container dapat diulang kembali, dicoba ulang, atau dijalankan ulang, Init Container sebaiknya bersifat _idempotent_. Khususnya, kode yang menulis ke dalam _file_ pada `EmptyDir` sebaiknya dipersiapkan untuk menangani kemungkinan jika _file_ keluaran yang diharapkan sudah ada di dalam `EmptyDir` tersebut.
+
+Init Container memiliki semua kolom yang dimiliki oleh Container aplikasi. Tetapi, Kubernetes melarang penggunaan `readinessProbe` karena Init Container tidak dapat mendefinisikan/menggunakan _readiness probe_ setelah selesai/keluar secara berhasil. Hal ini dipaksakan saat proses validasi.
+
+Gunakan `activeDeadlineSeconds` pada Pod dan `livenessProbe` pada Container untuk mencegah Init Container gagal terus menerus. Nilai `activeDeadlineSeconds` berlaku juga terhadap Init Container.
+
+Nama setiap Container aplikasi dan Init Container pada sebuah Pod haruslah unik; Kesalahan validasi akan terjadi jika ada Container atau Init Container yang memiliki nama yang sama.
+
+### Sumber Daya
+
+Karena eksekusi Init Container yang berurutan, aturan-aturan untuk sumber daya berlaku sebagai berikut:
+
+* Yang tertinggi antara `request` atau `limit` sumber daya yang didefinisikan pada **semua Init Container** adalah **`request`/`limit` inisialisasi yang berlaku**.
+* `request`/`limit` sumber daya Pod yang berlaku adalah yang paling besar diantara:
+ * Jumah `request`/`limit` semua Container aplikasi untuk suatu sumber daya.
+ * `request`/`limit` inisialisasi yang berlaku untuk suatu sumber daya.
+* Penjadwalan dilakukan berdasarkan `request`/`limit` (Pod) yang berlaku, yang berarti bahwa Init Container dapat mengambil sumber daya inisialisasi yang tidak digunakan selama umur Pod tersebut.
+* **Tingkat QoS yang berlaku** milik Pod adalah sama dengan tingkat QoS untuk Init Container dan Container aplikasi.
+
+`ResourceQuota` dan `limitedResources` diberlakukan berdasarkan `request` dan `limit` Pod yang berlaku.
+
+Cgroup pada tingat Pod didasarkan pada `request` dan `limit` Pod yang berlaku, sama dengan _scheduler_.
+
+### Alasan Pod diulang kembali
+
+Pod dapat diulang kembali, yang berakibat pada diulangnya eksekusi Init Container, diakibatkan oleh beberapa alasan berikut:
+
+* Seorang pengguna memperbarui `PodSpec`, mengakibatkan `image` Init Container berubah. Perubahan apapun pada `image` Init Container akan mengulang kembali Pod tersebut. Perubahan pada `image` Container aplikasi hanya mengulang kembali Container aplikasi yang bersangkutan.
+* Infrastruktur Container Pod diulang kembali. Hal ini jarang terjadi, dan hanya dapat dilakukan oleh seseorang yang memiliki akses _root_ pada _node_ yang bersangkutan.
+* Semua Container di dalam Pod diterminasi, dengan nilai `restartPolicy` yang disetel sebagai `Always`, memaksa pengulangan kembali, dan catatan selesainya Init Container telah hilang karena _garbage collection_.
+
+## Dukungan dan kompatibilitas
+
+Sebuah kluster dengan versi Apiserver 1.6.0 ke atas mendukung Init Container melalui kolom `.spec.initContainers`. Versi-versi sebelumnya mendukung Init Container melalui anotasi _alpha_ atau _beta_. Kolom `.spec.initContainers` juga diduplikasikan dalam bentuk anotasi _alpha_ dan _beta_ agar Kubelet versi 1.3.0 ke atas dapat menjalankan Init Container, dan agar Apiserver versi 1.6 dapat dengan aman dikembalikan ke versi 1.5.x tanpa kehilangan fungsionalitas Pod-pod yang telah dibuat sebelumnya.
+
+Pada Apiserver dan Kubelet versi 1.8.0 ke atas, dukungan untuk anotasi _alpha_ dan _beta_ telah dihapus, sehingga dibutuhkan konversi (manual) dari anotasi yang telah kedaluwarsa tersebut ke dalam bentuk kolom `.spec.initContainers`.
+
+{{% /capture %}}
+
+
+{{% capture whatsnext %}}
+
+* [Membuat Pod yang memiliki Init Container](/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod-that-has-an-init-container)
+
+{{% /capture %}}
diff --git a/content/id/docs/concepts/workloads/pods/podpreset.md b/content/id/docs/concepts/workloads/pods/podpreset.md
index 281d84d894..c9e1a02f3d 100644
--- a/content/id/docs/concepts/workloads/pods/podpreset.md
+++ b/content/id/docs/concepts/workloads/pods/podpreset.md
@@ -44,9 +44,14 @@ Dalam rangka untuk menggunakan Pod Preset di dalam kluster kamu, kamu harus mema
1. Kamu telah mengaktifkan tipe API `settings.k8s.io/v1alpha1/podpreset`. Sebagai contoh, ini bisa dilakukan dengan menambahkan `settings.k8s.io/v1alpha1=true` di dalam opsi `--runtime-config` untuk API _server_. Dalam _minikube_ tambahkan argumen berikut `--extra-config=apiserver.runtime-config=settings.k8s.io/v1alpha1=true` saat menginisialisasi kluster.
-2. Kamu telah mengaktifkan _admission controller_ dari `PodPreset`. Salah satu cara untuk melakukannya adalah dengan menambahkan `PodPreset` di dalam nilai opsi `--enable-admission-plugins` yang dispesifikasikan untuk API _server_. Dalam _minikube_ tambahkan argumen berikut `--extra-config=apiserver.enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset ` saat menginisialisasi kluster.
+1. Kamu telah mengaktifkan _admission controller_ dari `PodPreset`. Salah satu cara untuk melakukannya adalah dengan menambahkan `PodPreset` di dalam nilai opsi `--enable-admission-plugins` yang dispesifikasikan untuk API _server_. Dalam _minikube_ tambahkan argumen berikut
-3. Kamu telah membuat objek `PodPreset` pada _namespace_ yang kamu gunakan dengan cara mendefinisikan Pod Preset.
+ ```shell
+ --extra-config=apiserver.enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset
+ ```
+
+ saat menginisialisasi kluster.
+1. Kamu telah membuat objek `PodPreset` pada _namespace_ yang kamu gunakan dengan cara mendefinisikan Pod Preset.
{{% /capture %}}
diff --git a/content/it/_index.html b/content/it/_index.html
index 38840cb037..be6827ea6e 100644
--- a/content/it/_index.html
+++ b/content/it/_index.html
@@ -44,12 +44,12 @@ Kubernetes è open source e ti offre la libertà di trarre vantaggio dall'infras
diff --git a/content/it/docs/concepts/architecture/cloud-controller.md b/content/it/docs/concepts/architecture/cloud-controller.md
index bac2e7a654..42b68a0f26 100644
--- a/content/it/docs/concepts/architecture/cloud-controller.md
+++ b/content/it/docs/concepts/architecture/cloud-controller.md
@@ -254,9 +254,9 @@ I seguenti fornitori di cloud hanno implementato CCM:
* [Digital Ocean](https://github.com/digitalocean/digitalocean-cloud-controller-manager)
* [Oracle](https://github.com/oracle/oci-cloud-controller-manager)
-* [Azure](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/azure)
-* [GCE](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/gce)
-* [AWS](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/aws)
+* [Azure](https://github.com/kubernetes/cloud-provider-azure)
+* [GCP](https://github.com/kubernetes/cloud-provider-gcp)
+* [AWS](https://github.com/kubernetes/cloud-provider-aws)
* [BaiduCloud](https://github.com/baidu/cloud-provider-baiducloud)
## Cluster Administration
diff --git a/content/ja/docs/setup/independent/create-cluster-kubeadm.md b/content/ja/docs/setup/independent/create-cluster-kubeadm.md
index ff8e151442..64099c59fb 100644
--- a/content/ja/docs/setup/independent/create-cluster-kubeadm.md
+++ b/content/ja/docs/setup/independent/create-cluster-kubeadm.md
@@ -282,7 +282,7 @@ For more information about using Calico, see [Quickstart for Calico on Kubernete
For Calico to work correctly, you need to pass `--pod-network-cidr=192.168.0.0/16` to `kubeadm init` or update the `calico.yml` file to match your Pod network. Note that Calico works on `amd64`, `arm64`, and `ppc64le` only.
```shell
-kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml
+kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
```
{{% /tab %}}
@@ -292,7 +292,7 @@ Canal uses Calico for policy and Flannel for networking. Refer to the Calico doc
For Canal to work correctly, `--pod-network-cidr=10.244.0.0/16` has to be passed to `kubeadm init`. Note that Canal works on `amd64` only.
```shell
-kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/canal.yaml
+kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/canal.yaml
```
{{% /tab %}}
diff --git a/content/ja/docs/setup/on-premises-metal/krib.md b/content/ja/docs/setup/on-premises-metal/krib.md
index 5d8a2ef688..b154953e2a 100644
--- a/content/ja/docs/setup/on-premises-metal/krib.md
+++ b/content/ja/docs/setup/on-premises-metal/krib.md
@@ -28,7 +28,7 @@ KRIB features:
## クラスターの作成
-Review [Digital Rebar documentation](https://https://provision.readthedocs.io/en/tip/README.html) for details about installing the platform.
+Review [Digital Rebar documentation](https://provision.readthedocs.io/en/tip/README.html) for details about installing the platform.
The Digital Rebar Provision Golang binary should be installed on a Linux-like system with 16 GB of RAM or larger (Packet.net Tiny and Rasberry Pi are also acceptable).
diff --git a/content/ja/docs/tutorials/kubernetes-basics/expose/expose-intro.html b/content/ja/docs/tutorials/kubernetes-basics/expose/expose-intro.html
index 049539137f..56ab5c0685 100644
--- a/content/ja/docs/tutorials/kubernetes-basics/expose/expose-intro.html
+++ b/content/ja/docs/tutorials/kubernetes-basics/expose/expose-intro.html
@@ -36,7 +36,7 @@ weight: 10
diff --git a/content/ja/examples/application/mysql/mysql-statefulset.yaml b/content/ja/examples/application/mysql/mysql-statefulset.yaml
index e0c04007a8..b69af02c59 100644
--- a/content/ja/examples/application/mysql/mysql-statefulset.yaml
+++ b/content/ja/examples/application/mysql/mysql-statefulset.yaml
@@ -106,16 +106,16 @@ spec:
cd /var/lib/mysql
# Determine binlog position of cloned data, if any.
- if [[ -f xtrabackup_slave_info ]]; then
+ if [[ -f xtrabackup_slave_info && "x$( change_master_to.sql.in
# Ignore xtrabackup_binlog_info in this case (it's useless).
- rm -f xtrabackup_binlog_info
+ rm -f xtrabackup_slave_info xtrabackup_binlog_info
elif [[ -f xtrabackup_binlog_info ]]; then
# We're cloning directly from master. Parse binlog position.
[[ `cat xtrabackup_binlog_info` =~ ^(.*?)[[:space:]]+(.*?)$ ]] || exit 1
- rm xtrabackup_binlog_info
+ 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
@@ -126,16 +126,15 @@ spec:
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 "$(}}
-### 용량
+### 용량과 할당가능 {#capacity}
노드 상에 사용 가능한 리소스를 나타낸다. 리소스에는 CPU, 메모리 그리고 노드 상으로 스케줄 되어질 수 있는 최대 파드 수가 있다.
-### 정보
+용량 블록의 필드는 노드에 있는 리소스의 총량을 나타낸다.
+할당가능 블록은 일반 파드에서 사용할 수 있는
+노드의 리소스 양을 나타낸다.
+
+노드에서
+[컴퓨팅 리소스 예약](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable)하는 방법을
+배우는 동안 용량 및 할당가능 리소스에 대해 자세히 읽어보자.
+
+### 정보 {#info}
커널 버전, 쿠버네티스 버전 (kubelet과 kube-proxy 버전), (사용하는 경우) Docker 버전, OS 이름과 같은 노드에 대한 일반적인 정보이다. 정보는 Kubelet에 의해 노드로부터 수집된다.
diff --git a/content/ko/docs/concepts/cluster-administration/federation.md b/content/ko/docs/concepts/cluster-administration/federation.md
index 1719b9882b..81584a28e1 100644
--- a/content/ko/docs/concepts/cluster-administration/federation.md
+++ b/content/ko/docs/concepts/cluster-administration/federation.md
@@ -170,7 +170,7 @@ zone)](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availabi
마지막으로, 클러스터 중 어느 클러스터라도 쿠버네티스 클러스터에서 추천되는 최대 노드 수 보다 더 많은 노드가 필요하다면,
더 많은 클러스터가 필요할 것이다. 쿠버네티스 v1.3은 클러스터를 최대 1000노드까지 지원한다. 쿠버네티스 v1.8은
-클러스터를 최대 5000 노드까지 지원한다. 더 자세한 가이드는 [대규모 클러스터 구축하기](/docs/setup/cluster-large/)에서 확인 가능하다.
+클러스터를 최대 5000 노드까지 지원한다. 더 자세한 가이드는 [대규모 클러스터 구축하기](/docs/setup/best-practices/cluster-large/)에서 확인 가능하다.
{{% /capture %}}
diff --git a/content/ko/docs/concepts/containers/images.md b/content/ko/docs/concepts/containers/images.md
index 76bd64fe5e..50291bd72d 100644
--- a/content/ko/docs/concepts/containers/images.md
+++ b/content/ko/docs/concepts/containers/images.md
@@ -60,6 +60,8 @@ Docker *18.06 또는 그 이상* 을 사용하길 바란다. 더 낮은 버전
- AWS EC2 컨테이너 레지스트리(ECR) 사용
- IAM 역할 및 정책을 사용하여 ECR 저장소에 접근을 제어함
- ECR 로그인 자격 증명은 자동으로 갱신됨
+ - Oracle 클라우드 인프라스트럭처 레지스트리(OCIR) 사용
+ - IAM 역할과 정책을 사용하여 OCIR 저장소에 접근을 제어함
- Azure 컨테이너 레지스트리(ACR) 사용
- IBM 클라우드 컨테이너 레지스트리 사용
- 프라이빗 레지스트리에 대한 인증을 위한 노드 구성
@@ -275,19 +277,7 @@ GCE 및 자동 노드 교체를 수행하는 다른 클라우드 제공자에
대문자 값을 적절히 대체하여, 다음 커맨드를 실행한다.
```shell
-cat < ./kustomization.yaml
-secretGenerator:
-- name: myregistrykey
- type: docker-registry
- literals:
- - docker-server=DOCKER_REGISTRY_SERVER
- - docker-username=DOCKER_USER
- - docker-password=DOCKER_PASSWORD
- - docker-email=DOCKER_EMAIL
-EOF
-
-kubectl apply -k .
-secret/myregistrykey-66h7d4d986 created
+kubectl create secret docker-registry --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
```
만약 Docer 자격 증명 파일이 이미 존재한다면, 위의 명령을 사용하지 않고,
diff --git a/content/ko/docs/concepts/containers/runtime-class.md b/content/ko/docs/concepts/containers/runtime-class.md
index 72923dc571..86dd09209c 100644
--- a/content/ko/docs/concepts/containers/runtime-class.md
+++ b/content/ko/docs/concepts/containers/runtime-class.md
@@ -8,7 +8,13 @@ weight: 20
{{< feature-state for_k8s_version="v1.12" state="alpha" >}}
-이 페이지는 런타임 클래스 리소스와 런타임 선택 메커니즘에 대해서 설명한다.
+이 페이지는 런타임 클래스(RuntimeClass) 리소스와 런타임 선택 메커니즘에 대해서 설명한다.
+
+{{< warning >}}
+런타임클래스는 v1.14 베타 업그레이드에서 *중대한* 변화를 포함한다.
+런타임클래스를 v1.14 이전부터 사용하고 있었다면,
+[런타임 클래스를 알파에서 베타로 업그레이드하기](#upgrading-runtimeclass-from-alpha-to-beta)를 확인한다.
+{{< /warning >}}
{{% /capture %}}
@@ -17,82 +23,72 @@ weight: 20
## 런타임 클래스
-런타임 클래스는 파드의 컨테이너를 실행하는데 사용할 컨테이너 런타임 설정을 선택하기 위한
-알파 특징이다.
+런타임 클래스는 컨테이너 런타임 설정을 선택하는 기능이다.
+이 컨테이너 런타임 설정은 파드의 컨테이너를 실행할 때에 이용한다.
+
+## 동기
+
+서로 다른 파드간에 런타임 클래스를 설정하여
+성능대 보안의 균형을 유지할 수 있다.
+예를 들어, 일부 작업에서 높은 수준의 정보 보안 보증이 요구되는 경우,
+하드웨어 가상화를 이용하는 컨테이너 런타임으로 파드를 실행하도록 예약하는 선택을 할 수 있다.
+그러면 몇가지 추가적인 오버헤드는 있지만
+대체 런타임을 추가 분리하는 유익이 있다.
+
+또한 런타임 클래스를 사용하여 컨테이너 런타임이 같으나 설정이 다른
+여러 파드를 실행할 수 있다.
### 셋업
-초기 알파 특징이므로, 런타임 클래스 특징을 사용하기 위해서는 몇 가지 추가 셋업
-단계가 필요하다.
-
-1. 런타임 클래스 특징 게이트 활성화(apiservers 및 kubelets에 대해서, 버전 1.12+ 필요)
-2. 런타임 클래스 CRD 설치
-3. CRI 구현(implementation)을 노드에 설정(런타임에 따라서)
-4. 상응하는 런타임 클래스 리소스 생성
-
-#### 1. 런타임 클래스 특징 게이트 활성화
-
+RuntimeClass 특징 게이트가 활성화(기본값)를 확인한다.
특징 게이트 활성화에 대한 설명은 [특징 게이트](/docs/reference/command-line-tools-reference/feature-gates/)를
-참고한다. `RuntimeClass` 특징 게이트는 apiservers _및_ kubelets에서 활성화되어야
-한다.
+참고한다. `RuntimeClass` 특징 게이트는 apiservers _및_ kubelets에서 활성화되어야 한다.
-#### 2. 런타임 클래스 CRD 설치
+1. CRI 구현(implementation)을 노드에 설정(런타임에 따라서)
+2. 상응하는 런타임 클래스 리소스 생성
-런타임 클래스 [CustomResourceDefinition][] (CRD)는 쿠버네티스 git 저장소의 애드온 디렉터리에서 찾을 수
-있다. [kubernetes/cluster/addons/runtimeclass/runtimeclass_crd.yaml][runtimeclass_crd]
+#### 1. CRI 구현을 노드에 설정
-`kubectl apply -f runtimeclass_crd.yaml`을 통해서 해당 CRD를 설치한다.
-
-[CustomResourceDefinition]: /docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/
-[runtimeclass_crd]: https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/runtimeclass/runtimeclass_crd.yaml
-
-
-#### 3. CRI 구현을 노드에 설정
-
-런타임 클래스와 함께 선택할 설정은 CRI 구현에 의존적이다. 사용자의 CRI
-구현에 따른 설정 방법은 연관된 문서를 통해서 확인한다. 이것은 알파
-특징이므로, 아직 모든 CRI가 다중 런타임 클래스를 지원하지는 않는다.
+런타임 클래스를 통한 가능한 구성은 컨테이너 런타임 인터페이스(CRI) 구현에 의존적이다.
+사용자의 CRI 구현에 따른 설정 방법은
+연관된 문서를 통해서 확인한다([아래](#cri-configuration)).
{{< note >}}
런타임 클래스는 클러스터 전체에 걸쳐 동질의 노드 설정
-(모든 노드가 컨테이너 런타임에 준하는 동일한 방식으로 설정되었음을 의미)을 가정한다. 어떠한 이질성(다양한
-설정)이라도
-스케줄링 특징을 통해서 런타임 클래스와는 독립적으로 관리되어야 한다([파드를 노드에
-할당하기](/docs/concepts/configuration/assign-pod-node/) 참고).
+(모든 노드가 컨테이너 런타임에 준하는 동일한 방식으로 설정되었음을 의미)을 가정한다. 어떠한 이질성(다양한
+설정)이라도 스케줄링 특징을 통해서 런타임 클래스와는 독립적으로 관리되어야 한다
+([파드를 노드에 할당하기](/docs/concepts/configuration/assign-pod-node/) 참고).
{{< /note >}}
-해당 설정은 상응하는 `RuntimeHandler` 이름을 가지며, 이는 런타임 클래스에 의해서 참조된다.
+해당 설정은 상응하는 `handler` 이름을 가지며, 이는 런타임 클래스에 의해서 참조된다.
런타임 핸들러는 유효한 DNS 1123 서브도메인(알파-숫자 + `-`와 `.`문자)을 가져야 한다.
-#### 4. 상응하는 런타임 클래스 리소스 생성
+#### 2. 상응하는 런타임 클래스 리소스 생성
-3단계에서 셋업 한 설정은 연관된 `RuntimeHandler` 이름을 가져야 하며, 이를 통해서
-설정을 식별할 수 있다. 각 런타임 핸들러(그리고 선택적으로 비어있는 `""` 핸들러)에 대해서,
-상응하는 런타임 클래스 오브젝트를 생성한다.
+1단계에서 셋업 한 설정은 연관된 `handler` 이름을 가져야 하며, 이를 통해서 설정을 식별할 수 있다.
+각 런타임 핸들러(그리고 선택적으로 비어있는 `""` 핸들러)에 대해서, 상응하는 런타임 클래스 오브젝트를 생성한다.
현재 런타임 클래스 리소스는 런타임 클래스 이름(`metadata.name`)과 런타임 핸들러
-(`spec.runtimeHandler`)로 단 2개의 중요 필드만 가지고 있다. 오브젝트 정의는 다음과 같은 형태이다.
+(`handler`)로 단 2개의 중요 필드만 가지고 있다. 오브젝트 정의는 다음과 같은 형태이다.
```yaml
-apiVersion: node.k8s.io/v1alpha1 # 런타임 클래스는 node.k8s.io API 그룹에 정의되어 있음
+apiVersion: node.k8s.io/v1beta1 # 런타임 클래스는 node.k8s.io API 그룹에 정의되어 있음
kind: RuntimeClass
metadata:
name: myclass # 런타임 클래스는 해당 이름을 통해서 참조됨
# 런타임 클래스는 네임스페이스가 없는 리소스임
-spec:
- runtimeHandler: myconfiguration # 상응하는 CRI 설정의 이름임
+handler: myconfiguration # 상응하는 CRI 설정의 이름임
```
-
{{< note >}}
런타임 클래스 쓰기 작업(create/update/patch/delete)은
-클러스터 관리자로 제한할 것을 권장한다. 이것은 일반적으로 기본 설정이다. 더 자세한 정보는 [권한
-개요](/docs/reference/access-authn-authz/authorization/)를 참고한다.
+클러스터 관리자로 제한할 것을 권장한다. 이것은 일반적으로 기본 설정이다.
+더 자세한 정보는 [권한 개요](/docs/reference/access-authn-authz/authorization/)를 참고한다.
{{< /note >}}
### 사용
-클러스터를 위해서 런타임 클래스를 설정하고 나면, 그것을 사용하는 것은 매우 간단하다. 파드 스펙에
+클러스터를 위해서 런타임 클래스를 설정하고 나면, 그것을 사용하는 것은 매우 간단하다. 파드 스펙에
`runtimeClassName`를 명시한다. 예를 들면 다음과 같다.
```yaml
@@ -105,12 +101,75 @@ spec:
# ...
```
-이것은 Kubelet이 지명된 런타임 클래스를 사용하여 해당 파드를 실행하도록 지시할 것이다. 만약 지명된
-런타임 클래스가 없거나, CRI가 상응하는 핸들러를 실행할 수 없는 경우, 파드는
-`Failed` 터미널 [단계](/ko/docs/concepts/workloads/pods/pod-lifecycle/#파드의-단계-phase)로 들어간다. 에러
-메시지를 위해서는 상응하는 [이벤트](/docs/tasks/debug-application-cluster/debug-application-introspection/)를
+이것은 Kubelet이 지명된 런타임 클래스를 사용하여 해당 파드를 실행하도록 지시할 것이다.
+만약 지명된 런타임 클래스가 없거나, CRI가 상응하는 핸들러를 실행할 수 없는 경우, 파드는
+`Failed` 터미널 [단계](/ko/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase)로 들어간다.
+에러 메시지에 상응하는 [이벤트](/docs/tasks/debug-application-cluster/debug-application-introspection/)를
확인한다.
-만약 명시된 `runtimeClassName`가 없다면, 기본 런타임 핸들러가 사용될 것이다. 기본 런타임 핸들러는 런타임 클래스 특징이 비활성화되었을 때와 동일하게 동작한다.
+만약 명시된 `runtimeClassName`가 없다면, 기본 런타임 핸들러가 사용되며,
+런타임 클래스 특징이 비활성화되었을 때와 동일하게 동작한다.
+
+### CRI 구성 {#cri-configuration}
+
+CRI 런타임 설치에 대한 자세한 내용은 [CRI 설치](/docs/setup/production-environment/container-runtimes/)를 확인한다.
+
+#### dockershim
+
+쿠버네티스의 내장 dockershim CRI는 런타임 핸들러를 지원하지 않는다.
+
+#### [containerd](https://containerd.io/)
+
+런타임 핸들러는 containerd의 구성 파일인 `/etc/containerd/config.toml` 통해 설정한다.
+유효한 핸들러는 runtimes 단락 아래에서 설정한다.
+
+```
+[plugins.cri.containerd.runtimes.${HANDLER_NAME}]
+```
+
+더 자세한 containerd의 구성 문서를 살펴본다.
+https://github.com/containerd/cri/blob/master/docs/config.md
+
+#### [cri-o](https://cri-o.io/)
+
+런타임 핸들러는 cri-o의 구성파일인 `/etc/crio/crio.conf`을 통해 설정한다.
+[crio.runtime 테이블](https://github.com/kubernetes-sigs/cri-o/blob/master/docs/crio.conf.5.md#crioruntime-table) 아래에
+유효한 핸들러를 설정한다.
+
+```
+[crio.runtime.runtimes.${HANDLER_NAME}]
+ runtime_path = "${PATH_TO_BINARY}"
+```
+
+더 자세한 cri-o의 구성 문서를 살펴본다.
+https://github.com/kubernetes-sigs/cri-o/blob/master/cmd/crio/config.go
+
+
+### 런타임 클래스를 알파에서 베타로 업그레이드 {#upgrading-runtimeclass-from-alpha-to-beta}
+
+런타임 클래스 베타 기능은 다음의 변화를 포함한다.
+
+- `node.k8s.io` API 그룹과 `runtimeclasses.node.k8s.io` 리소스는 CustomResourceDefinition에서
+ 내장 API로 이전되었다.
+- 런타임 클래스 정의에서 `spec`을 직접 사용할 수 있다.
+ (즉, 더 이상 RuntimeClassSpec는 없다).
+- `runtimeHandler` 필드는 `handler`로 이름이 바뀌었다.
+- `handler` 필드는 이제 모두 API 버전에서 요구된다. 이는 알파 API에서도 `runtimeHandler` 필드가
+ 필요하다는 의미이다.
+- `handler` 필드는 반드시 올바른 DNS 레이블([RFC 1123](https://tools.ietf.org/html/rfc1123))으로,
+ 이는 더 이상 `.` 캐릭터(모든 버전에서)를 포함할 수 없다 의미이다. 올바른 핸들러는
+ 다음의 정규 표현식을 따른다. `^[a-z0-9]([-a-z0-9]*[a-z0-9])?$`.
+
+**작업 필요** 다음 작업은 알파 버전의 런타임 기능을
+베타 버전으로 업그레이드하기 위해 진행되어야 한다.
+
+- 런타임 클래스 리소스는 v1.14로 업그레이드 *후에* 반드시 재생성되어야 하고,
+ `runtimeclasses.node.k8s.io` CRD는 다음과 같이 수동으로 지워야 한다.
+ ```
+ kubectl delete customresourcedefinitions.apiextensions.k8s.io runtimeclasses.node.k8s.io
+ ```
+- 지정되지 않았거나 비어 있는 `runtimeHandler` 이거나 핸들러 내에 `.` 캐릭터를 사용한 알파 런타임 클래스는
+ 더 이상 올바르지 않으며, 반드시 올바른 핸들러 구성으로 이전헤야 한다
+ (위를 참조).
{{% /capture %}}
diff --git a/content/ko/docs/concepts/overview/components.md b/content/ko/docs/concepts/overview/components.md
index 2248084272..40b6fe95b9 100644
--- a/content/ko/docs/concepts/overview/components.md
+++ b/content/ko/docs/concepts/overview/components.md
@@ -16,7 +16,7 @@ card:
## 마스터 컴포넌트
마스터 컴포넌트는 클러스터의 컨트롤 플레인을 제공한다. 마스터 컴포넌트는 클러스터에 관한 전반적인 결정
-(예를 들어, 스케줄링)을 수행하고 클러스터 이벤트(레플리케이션 컨트롤러의 `replicas` 필드가 요구조건을 충족되지 않을 경우 새로운 파드를 구동 시키는 것)를 감지하고 반응한다.
+(예를 들어, 스케줄링)을 수행하고 클러스터 이벤트(예를 들어, 레플리케이션 컨트롤러의 `replicas` 필드가 요구조건을 충족되지 않을 경우 새로운 파드를 구동 시키는 것)를 감지하고 반응한다.
마스터 컴포넌트는 클러스터 내 어떠한 머신에서든지 동작 될 수 있다. 그러나,
간결성을 위하여, 구성 스크립트는 보통 동일 머신 상에 모든 마스터 컴포넌트를 구동시키고,
@@ -72,13 +72,11 @@ cloud-controller-manager는 클라우드 밴더 코드와 쿠버네티스 코드
### kube-proxy
-[kube-proxy](/docs/admin/kube-proxy/)는 호스트 상에서 네트워크 규칙을 유지하고 연결에 대한 포워딩을 수행함으로서
- 쿠버네티스 서비스 추상화가 가능하도록 해준다.
+{{< glossary_definition term_id="kube-proxy" length="all" >}}
### 컨테이너 런타임
-컨테이너 런타임은 컨테이너의 동작을 책임지는 소프트웨어다.
-쿠버네티스는 몇몇의 런타임을 지원하는데 [Docker](http://www.docker.com), [containerd](https://containerd.io), [cri-o](https://cri-o.io/), [rktlet](https://github.com/kubernetes-incubator/rktlet) 그리고 [Kubernetes CRI (Container Runtime Interface)](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md)를 구현한 모든 런타임이다.
+{{< glossary_definition term_id="container-runtime" length="all" >}}
## 애드온
diff --git a/content/ko/docs/concepts/overview/kubernetes-api.md b/content/ko/docs/concepts/overview/kubernetes-api.md
index 0ed8643c86..e3d9981a3a 100644
--- a/content/ko/docs/concepts/overview/kubernetes-api.md
+++ b/content/ko/docs/concepts/overview/kubernetes-api.md
@@ -15,8 +15,7 @@ API 엔드포인트, 리소스 타입과 샘플은 [API Reference](/docs/referen
API에 원격 접속하는 방법은 [Controlling API Access doc](/docs/reference/access-authn-authz/controlling-access/)에서 논의되었다.
-쿠버네티스 API는 시스템을 위한 선언적 설정 스키마를 위한 기초가 되기도 한다.
-[kubectl](/docs/reference/kubectl/overview/) 커맨드라인 툴을 사용해서 API 오브젝트를 생성, 업데이트, 삭제 및 조회할 수 있다.
+쿠버네티스 API는 시스템을 위한 선언적 설정 스키마를 위한 기초가 되기도 한다. [kubectl](/docs/reference/kubectl/overview/) 커맨드라인 툴을 사용해서 API 오브젝트를 생성, 업데이트, 삭제 및 조회할 수 있다.
쿠버네티스는 또한 API 리소스에 대해 직렬화된 상태를 (현재는 [etcd](https://coreos.com/docs/distributed-configuration/getting-started-with-etcd/)에) 저장한다.
@@ -24,7 +23,6 @@ API에 원격 접속하는 방법은 [Controlling API Access doc](/docs/referenc
{{% /capture %}}
-{{< toc >}}
{{% capture body %}}
@@ -36,9 +34,9 @@ API에 원격 접속하는 방법은 [Controlling API Access doc](/docs/referenc
## OpenAPI 및 Swagger 정의
-완전한 API 상세 내용은 [OpenAPI](https://www.openapis.org/)를 활용해서 문서화했다.
+완전한 API 상세 내용은 [OpenAPI](https://www.openapis.org/)를 활용해서 문서화했다.
-쿠버네티스 1.10부터, OpenAPI 규격은 `/openapi/v2` 엔드포인트에서만 제공된다.
+쿠버네티스 1.10부터, OpenAPI 규격은 `/openapi/v2` 엔드포인트에서만 제공된다.
요청 형식은 HTTP 헤더에 명시해서 설정할 수 있다.
헤더 | 가능한 값
@@ -46,7 +44,8 @@ API에 원격 접속하는 방법은 [Controlling API Access doc](/docs/referenc
Accept | `application/json`, `application/com.github.proto-openapi.spec.v2@v1.0+protobuf` (기본 content-type은 `*/*`에 대해 `application/json`이거나 이 헤더를 전달하지 않음)
Accept-Encoding | `gzip` (이 헤더를 전달하지 않아도 됨)
-1.14 이전 버전에서 형식이 구분된 엔드포인트(`/swagger.json`, `/swagger-2.0.0.json`, `/swagger-2.0.0.pb-v1`, `/swagger-2.0.0.pb-v1.gz`)는 OpenAPI 스펙을 다른 포맷으로 제공한다. 이러한 엔드포인트는 사용 중단되었으며, 쿠버네티스 1.14에서 제거될 예정이다.
+1.14 이전 버전에서 형식이 구분된 엔드포인트(`/swagger.json`, `/swagger-2.0.0.json`, `/swagger-2.0.0.pb-v1`, `/swagger-2.0.0.pb-v1.gz`)는 OpenAPI 스펙을 다른 포맷으로 제공한다.
+이러한 엔드포인트는 사용 중단되었으며, 쿠버네티스 1.14에서 제거됬다.
**OpenAPI 규격을 조회하는 예제**
@@ -58,21 +57,25 @@ GET /swagger-2.0.0.pb-v1.gz | GET /openapi/v2 **Accept**: application/com.github
쿠버네티스는 주로 클러스터 내부 통신용 API를 위해 대안적인 Protobuf에 기반한 직렬화 형식을 구현한다. 해당 API는 [design proposal](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/protobuf.md) 문서와 IDL 파일에 문서화되어 있고 각각의 스키마를 담고 있는 IDL 파일은 API 오브젝트를 정의하는 Go 패키지에 들어있다.
-1.14 이전 버전에서 쿠버네티스 apiserver는 `/swaggerapi`에서 [Swagger v1.2](http://swagger.io/)
-쿠버네티스 API 스펙을 검색하는데 사용할 수 있는 API도 제공한다.
+1.14 이전 버전에서 쿠버네티스 apiserver는 `/swaggerapi`에서 [Swagger v1.2](http://swagger.io/)
+쿠버네티스 API 스펙을 검색하는데 사용할 수 있는 API도 제공한다.
이러한 엔드포인트는 사용 중단되었으며, 쿠버네티스 1.14에서 제거될 예정이다.
## API 버전 규칙
-필드를 없애거나 리소스 표현을 재구성하기 쉽도록, 쿠버네티스는 `/api/v1`이나
-`/apis/extensions/v1beta1`과 같이 각각 다른 API 경로에서 복수의 API 버전을 지원한다.
+필드를 없애거나 리소스 표현을 재구성하기 쉽도록,
+쿠버네티스는 `/api/v1`이나 `/apis/extensions/v1beta1`과 같이
+각각 다른 API 경로에서 복수의 API 버전을 지원한다.
리소스나 필드 수준보다는 API 수준에서 버전을 선택했는데, API가 명료하고, 시스템 리소스와 행위 관점에서 일관성있으며, 더 이상 사용되지 않는 API나 실험적인 API에 접근을 제어할 수 있도록 하기 위함이다. 스키마 변경에 대해서 JSON과 Protobuf 직렬화 스키마 모두 동일한 가이드라인을 따른다. 다음에 이어지는 설명 모두는 이 두 가지 형식에 모두 해당한다.
-API 버전 규칙과 소프트웨어 버전 규칙은 간접적으로 연관되어 있음을 알아두자. [API and release versioning proposal](https://git.k8s.io/community/contributors/design-proposals/release/versioning.md)에는 API 버전 규칙과 소프트웨어 버전 규칙 간의 관계가 기술되어 있다.
+API 버전 규칙과 소프트웨어 버전 규칙은 간접적으로 연관되어 있음을 알아두자.
+[API and release versioning proposal](https://git.k8s.io/community/contributors/design-proposals/release/versioning.md)에는
+API 버전 규칙과 소프트웨어 버전 규칙 간의 관계가 기술되어 있다.
-API 버전이 다른 경우는 안정성이나 기술 지원의 수준이 다르다는 것을 암시한다. 각각의 수준에 대한 조건은 [API Changes documentation](https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions)에서 상세히 다룬다. 요약하자면 다음과 같다.
+API 버전이 다른 경우는 안정성이나 기술 지원의 수준이 다르다는 것을 암시한다.
+각각의 수준에 대한 조건은 [API Changes documentation](https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions)에서 상세히 다룬다. 요약하자면 다음과 같다.
- 알파(Alpha) 수준:
- 버전 이름에 `alpha`가 포함된다. (예: `v1alpha1`)
@@ -87,7 +90,8 @@ API 버전이 다른 경우는 안정성이나 기술 지원의 수준이 다르
- 오브젝트에 대한 스키마나 문법이 다음 베타 또는 안정화 릴리스에서 호환되지 않는 방식으로 바뀔 수도 있다. 이런 경우,
다음 버전으로 이관할 수 있는 가이드를 제공할 것이다.
이 때 API 오브젝트의 삭제, 편집 또는 재생성이 필요할 수도 있다. 편집 절차는 좀 생각해볼 필요가 있다. 이 기능에 의존하고 있는 애플리케이션은 다운타임이 필요할 수도 있다.
- - 다음 릴리스에서 호환되지 않을 수도 있으므로 사업적으로 중요하지 않은 용도로만 사용하기를 권장한다. 복수의 클러스터를 가지고 있어서 독립적으로 업그레이드할 수 있다면 이런 제약에서 안심이 될 수도 있겠다.
+ - 다음 릴리스에서 호환되지 않을 수도 있으므로 사업적으로 중요하지 않은 용도로만 사용하기를 권장한다.
+ 복수의 클러스터를 가지고 있어서 독립적으로 업그레이드할 수 있다면 이런 제약에서 안심이 될 수도 있겠다.
- **베타 기능을 사용하고 피드백을 주기를 바란다! 일단 베타가 끝나면, 실질적으로 더 많은 변경이 어렵다.**
- 안정화(stable) 수준:
- 버전 이름이 `vX`이고 `X` 는 정수다.
@@ -95,8 +99,7 @@ API 버전이 다른 경우는 안정성이나 기술 지원의 수준이 다르
## API 그룹
-쿠버네티스 API를 보다 쉽게 확장하기 위해서,
-[*API 그룹*](https://git.k8s.io/community/contributors/design-proposals/api-machinery/api-group.md)을 구현했다.
+쿠버네티스 API를 보다 쉽게 확장하기 위해서, [*API 그룹*](https://git.k8s.io/community/contributors/design-proposals/api-machinery/api-group.md)을 구현했다.
API 그룹은 REST 경로와 직렬화된 객체의 `apiVersion` 필드에 명시된다.
현재 다양한 API 그룹이 사용되고 있다.
@@ -111,8 +114,9 @@ API 그룹은 REST 경로와 직렬화된 객체의 `apiVersion` 필드에 명
1. [CustomResourceDefinition](/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/)은 아주 기본적인
CRUD 요구를 갖는 사용자에게 적합하다.
-1. 쿠버네티스 API 의미론의 전체 셋을 가지고 사용자만의 apiserver를 만들고자하는 사용자는 [aggregator](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/)를 사용해서 클라이언트 입장에서 매끄럽게 동작하도록
- 만들 수 있다.
+1. 쿠버네티스 API 의미론의 전체 셋을 가지고, 사용자만의 apiserver를 만들고자하는 사용자는
+ [aggregator](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/)를 사용해서 클라이언트 입장에서 매끄럽게 동작하도록
+ 만들 수 있다.
## API 그룹 활성화 시키기
@@ -122,7 +126,7 @@ API 그룹은 REST 경로와 직렬화된 객체의 `apiVersion` 필드에 명
`--runtime-config=batch/v1=false`와 같이 설정하고, batch/v2alpha1을 활성화 시키려면 `--runtime-config=batch/v2alpha1`을
설정한다. 이 플래그는 apiserver의 런타임 설정에 쉼표로 분리된 키=값 쌍의 집합을 허용한다.
-중요: 그룹이나 리소스를 활성화 또는 비활성화 시키기 위해서는 apiserver와 controller-manager를 재시작해서
+중요: 그룹이나 리소스를 활성화 또는 비활성화 시키기 위해서는 apiserver와 controller-manager를 재시작해서
`--runtime-config` 변경을 반영시켜야 한다.
## 그룹 내 리소스 활성화 시키기
diff --git a/content/ko/docs/concepts/overview/what-is-kubernetes.md b/content/ko/docs/concepts/overview/what-is-kubernetes.md
index 0e5823b6bf..52ad2dc974 100644
--- a/content/ko/docs/concepts/overview/what-is-kubernetes.md
+++ b/content/ko/docs/concepts/overview/what-is-kubernetes.md
@@ -12,196 +12,79 @@ card:
{{% /capture %}}
{{% capture body %}}
-쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고,
-확장가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두
-용이하게 해준다. 쿠버네티스는 크고, 빠르게 성장하는 생태계를 가지고 있다.
-쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 수 있다.
+쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다. 쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다. 쿠버네티스는 크고, 빠르게 성장하는 생태계를 가지고 있다. 쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 수 있다.
-구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다.
-쿠버네티스는
-[구글의 15여년에 걸친 대규모 상용 워크로드 운영 경험](https://research.google.com/pubs/pub43438.html)을
-기반으로 만들어졌으며
-커뮤니티의 최고의 아이디어와 적용 사례가 결합되었다.
+쿠버네티스란 명칭은 키잡이(helmsman)이나 파일럿을 뜻하는 그리스어에서 유래했다. 구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다. 쿠버네티스는 [구글의 15여년에 걸친 대규모 상용 워크로드 운영 경험](https://research.google.com/pubs/pub43438.html)을 기반으로 만들어졌으며 커뮤니티의 최고의 아이디어와 적용 사례가 결합되었다.
-## 쿠버네티스가 왜 필요하고 무엇을 할 수 있는가
+## 여정 돌아보기
+시간이 지나면서 쿠버네티스가 왜 유용하게 되었는지 살펴보자.
-쿠버네티스에는 많은 기능이 있다. 다음과 같이 생각해 볼 수 있다.
+
-- 컨테이너 플랫폼
-- 마이크로서비스 플랫폼
-- 이식성 있는 클라우드 플랫폼
-그리고 더 많은 기능.
+**전통적인 배포 시대:**
+초기 조직은 애플리케이션을 물리 서버에서 실행했었다. 한 물리 서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당의 문제가 발생했다. 예를 들어 물리 서버 하나에서 여러 애플리케이션을 실행하면, 리소스 전부를 차지하는 애플리케이션 인스턴스가 있을 수 있고, 결과적으로는 다른 애플리케이션의 성능이 저하될 수 있었다. 이에 대한 해결책은 서로 다른 여러 물리 서버에서 각 애플리케이션을 실행하는 것이 있다. 그러나 이는 리소스가 충분히 활용되지 않는다는 점에서 확장 가능하지 않았으므로, 물리 서버를 많이 유지하기 위해서 조직에게 많은 비용이 들었다.
-쿠버네티스는 **컨테이너 중심의** 관리 환경을 제공한다.
-이 환경은 사용자 워크로드를 위해서
-컴퓨팅, 네트워킹 및 스토리지 인프라스트럭처를 오케스트레이션한다.
-이는 Platform as a Service(PaaS)의 매우 단순명료함에
-Infrastructure as a Service (IaaS)의 유연함을 더해 주며,
-인프라스트럭처 제공자 간 이식을 가능하게 한다.
+**가상화된 배포 시대:**
+그 해결책으로 가상화가 도입되었다. 이는 단일 물리 서버의 CPU에서 여러 가상 시스템 (VM)을 실행할 수 있게 한다. 가상화를 사용하면 VM간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스 할 수 없으므로, 일정 수준의 보안성을 제공할 수 있다.
-## 어떻게 쿠버네티스가 플랫폼인가
+가상화를 사용하면 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있으며, 쉽게 애플리케이션을 추가하거나 업데이트할 수 있고 하드웨어 비용을 절감할 수 있어 더 나은 확장성을 제공한다.
-쿠버네티스가 제공하는 많은 기능이 있지만,
-신규 기능을 통해 혜택을 얻을 수 있는 새로운 시나리오는 항상 있게 마련이다.
-개발자의 생산성을 극대화할 수 있도록 애플리케이션에 특화된 워크플로우를 최적화할 수 있다.
-초기에 수용 가능한 애드혹 오케스트레이션은
-대규모의 견고한 자동화를 필요로 하곤 한다.
-이것이 쿠버네티스가 애플리케이션을 더 쉽게 배포하고,
-스케일링하며, 관리하는 컴포넌트와 툴의 생태계를 만드는
-플랫폼의 기능을 하도록 설계된 이유이다.
+각 VM은 가상화된 하드웨어 상에서 자체 운영체제를 포함한 모든 구성 요소를 실행하는 전체 시스템이다.
-[레이블](/docs/concepts/overview/working-with-objects/labels/)은
-사용자가 원하는 방식대로 자원을 정리할 수 있도록 해준다.
-[어노테이션](/docs/concepts/overview/working-with-objects/annotations/)은
-자원에 사용자 정의 정보를 추가해서
-사용자의 워크플로우에 활용할 수 있도록 하고
-관리 툴이 상태를 쉽게 체크할 수 있는 방법을 제공해 준다.
+**컨테이너 개발 시대:**
+컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유한다. 그러므로 컨테이너는 가볍다고 여겨진다. VM과 마찬가지로 컨테이너에는 자체 파일 시스템, CPU, 메모리, 프로세스 공간 등이 있다. 기본 인프라와의 종속성을 끊었기 때문에, 클라우드나 OS 배포본에 모두 이식할 수 있다.
-추가로,
-[쿠버네티스 컨트롤 플레인](/docs/concepts/overview/components/)은
-개발자와 사용자가 공통으로 사용할 수 있는 [API](/docs/reference/using-api/api-overview/)를
-기반으로 하고 있다.
-사용자는
-범용의 [커맨드라인 툴]((/docs/user-guide/kubectl-overview/))을
-대상으로 하는 [자체 API](/docs/concepts/api-extension/custom-resources/)를 가진
-[스케줄러](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/devel/scheduler.md)와
-같은 사용자만의 컨트롤러를 작성할 수 있다.
+쿠버네티스에는 많은 기능이 있어 점점 인기를 끌고 있다. 컨테이너의 장점의 일부는 다음과 같다.
-이 [설계](https://git.k8s.io/community/contributors/design-proposals/architecture/architecture.md)를 통해
-쿠버네티스 위에
-많은 다른 시스템을 올릴 수 있게 된다.
+* 기민한 애플리케이션 생성과 배포: VM 이미지를 사용하는 것에 비해 컨테이너 이미지 생성이 보다 쉽고 효율적임.
+* 지속적인 개발, 통합 및 배포: 안정적이고 주기적으로 컨테이너 이미지를 빌드해서 배포할 수 있고 (이미지의 불변성 덕에) 빠르고 쉽게 롤백할 수 있다.
+* 개발과 운영의 관심사 분리: 배포 시점이 아닌 빌드/릴리스 시점에 애플리케이션 컨테이너 이미지를 만들기 때문에, 애플리케이션이 인프라스트럭처에서 디커플된다.
+* 가시성은 OS 수준의 정보와 메트릭에 머무르지 않고, 애플리케이션의 헬스와 그 밖의 시그널을 볼 수 있다.
+* 개발, 테스팅 및 운영 환경에 걸친 일관성: 랩탑에서도 클라우드에서와 동일하게 구동된다.
+* 클라우드 및 OS 배포판 간 이식성: Ubuntu, RHEL, CoreOS, on-prem, Google Kubernetes Engine 및 다른 어디에서든 구동된다.
+* 애플리케이션 중심 관리: 가상 하드웨어의 OS에서 애플리케이션을 구동하는 수준에서 OS의 논리적인 자원을 사용하여 애플리케이션을 구동하는 수준으로 추상화 수준이 높아진다.
+* 느슨하게 커플되고, 분산되고, 유연하며, 자유로운 마이크로서비스: 애플리케이션은 단일 목적의 머신에서 모놀리식 스택으로 구동되지 않고 보다 작고 독립적인 단위로 쪼개져서 동적으로 배포되고 관리될 수 있다.
+* 자원 격리: 애플리케이션 성능을 예측할 수 있다.
+* 자원 사용량: 고효율 고집적.
+
+## 쿠버네티스가 왜 필요하고 무엇을 할 수 있나
+
+컨테이너는 애플리케이션을 포장하고 실행하는 좋은 방법이다. 프로덕션 환경에서는 애플리케이션을 실행하는 컨테이너를 관리하고 가동 중지 시간이 없는지 확인해야한다. 예를 들어 컨테이너가 다운되면 다른 컨테이너를 다시 시작해야한다. 이 문제를 시스템에 의해 처리한다면 더 쉽지 않을까?
+
+그것이 쿠버네티스가 필요한 이유이다! 쿠버네티스는 분산 시스템을 탄력적으로 실행하기 위한 프레임 워크를 제공한다. 확장 요구 사항, 장애 조치, 배포 패턴 등을 처리한다. 예를 들어, 쿠버네티스는 시스템의 카나리아 배포를 쉽게 관리 할 수 있다.
+
+쿠버네티스는 다음을 제공한다.
+
+* **서비스 디스커버리와 로드 밸런싱**
+쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있다. 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있다.
+* **스토리지 오케스트레이션**
+쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재 할 수 있다.
+* **자동화된 롤아웃과 롤백**
+쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있다. 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있다.
+* **자동화된 빈 패킹(bin packing)**
+쿠버네티스를 사용하면 각 컨테이너에 필요한 CPU 및 메모리 (RAM)의 양을 지정할 수 있다. 컨테이너에 자원 요청이 지정되면 쿠버네티스는 컨테이너에 대한 자원을 관리하기 위해 더 나은 결정을 내릴 수 있다.
+* **자동화된 복구(self-healing)**
+쿠버네티스는 실패한 컨테이너를 다시 시작하고, 컨테이너를 교체하며, '사용자 정의 상태 검사'에 응답하지 않는 컨테이너를 죽이고, 서비스 준비가 끝날 때까지 그러한 과정을 클라이언트에 보여주지 않는다.
+* **시크릿과 구성 관리**
+쿠버네티스를 사용하면 암호, OAuth 토큰 및 ssh 키와 같은 중요한 정보를 저장하고 관리 할 수 있다. 컨테이너 이미지를 재구성하지 않고 스택 구성에 비밀을 노출하지 않고도 비밀 및 애플리케이션 구성을 배포 및 업데이트 할 수 있다.
## 쿠버네티스가 아닌 것
-쿠버네티스는 전통적인, 모든 것이 포함된 Platform as a Service(PaaS)가
-아니다. 쿠버네티스는 하드웨어 수준보다는 컨테이너 수준에서 운영되기 때문에,
-PaaS가 일반적으로 제공하는 배포, 스케일링, 로드 밸런싱, 로깅 및 모니터링과
-같은 기능에서 공통점이 있기도 하다.
-하지만, 쿠버네티스는 모놀리식(monolithic)하지
-않아서, 이런 기본 솔루션이 선택적이며 추가나 제거가 용이하다.
-쿠버네티스는 개발자 플랫폼을 만드는 구성 요소를 제공하지만,
-필요한 경우 사용자의 선택권과
-유연성을 지켜준다.
+쿠버네티스는 전통적인, 모든 것이 포함된 Platform as a Service(PaaS)가 아니다. 쿠버네티스는 하드웨어 수준보다는 컨테이너 수준에서 운영되기 때문에, PaaS가 일반적으로 제공하는 배포, 스케일링, 로드 밸런싱, 로깅 및 모니터링과 같은 기능에서 공통점이 있기도 하다. 하지만, 쿠버네티스는 모놀리식(monolithic)하지 않아서, 이런 기본 솔루션이 선택적이며 추가나 제거가 용이하다. 쿠버네티스는 개발자 플랫폼을 만드는 구성 요소를 제공하지만, 필요한 경우 사용자의 선택권과 유연성을 지켜준다.
-쿠버네티스는
+쿠버네티스는:
-* 지원하는 애플리케이션의 유형을 제약하지 않는다. 쿠버네티스는
- 상태 유지가 필요 없는(stateless) 워크로드, 상태 유지가 필요한(stateful) 워크로드,
- 데이터 처리를 위한 워크로드를 포함해서 극단적으로 다양한 워크로드를 지원하는
- 것을 목표로 한다. 애플리케이션이 컨테이너에서 구동될 수 있다면, 쿠버네티스에서
- 매우 잘 동작할 것이다.
-* 소스 코드를 배포하지 않으며 애플리케이션을 빌드하지 않는다.
- 지속적인 통합과 전달과 배포 곧 CI/CD 워크플로우는
- 조직 문화와 취향에 따를 뿐만 아니라
- 기술적인 요구사항으로 결정된다.
-* 미들웨어(예, 메시지 버스), 데이터 처리 프레임워크(예, Spark), 데이터베이스(예, mysql),
- 캐시 또는 클러스터 스토리지 시스템(예, Ceph)와 같은 애플리케이션 레벨의 서비스를
- 제공하지 않는다. 이런 컴포넌트는 쿠버네티스 상에서 구동될 수 있고,
- 쿠버네티스 상에서
- 구동 중인 애플리케이션이 Open Service Broker와 같은 이식 가능한 메커니즘을 통해 접근할
- 수도 있다.
-* 로깅, 모니터링 또는 경보 솔루션을 포함하지 않는다.
- 개념 증명을 위한 일부 통합이나,
- 메트릭을 수집하고 노출하는 메커니즘을 제공한다.
-* 기본 설정 언어/시스템(예, [jsonnet](https://github.com/google/jsonnet))을 제공하거나
- 요구하지 않는다.
- 선언적 명세의 임의적인 형식을 목적으로 하는 선언적 API를 제공한다.
-* 포괄적인 머신 설정, 유지보수, 관리, 자동 복구 시스템을
- 제공하거나 채택하지 않는다.
-
-추가로, 쿠버네티스는 단순한 *오케스트레이션 시스템* 이 아니다.
-사실, 쿠버네티스는 오케스트레이션의 필요성을 없애준다.
-*오케스트레이션* 의 기술적인 정의는 A를 먼저 한 다음, B를 하고, C를 하는 것과 같이
-정의된 워크플로우를 수행하는 것이다. 반면에, 쿠버네티스는
-독립적이고 조합 가능한 제어 프로세스들로 구성되어
-있다. 이 프로세스는 지속적으로 현재 상태를 입력받은 의도된 상태로 나아가도록 한다.
-A에서 C로 어떻게 갔는지는 상관이 없다. 중앙화된 제어도 필요치 않다. 이로써 시스템이
-보다 더 사용하기 쉬워지고,
-강력해지며, 견고하고, 회복력을 갖추게 되며, 확장 가능해진다.
-
-## 왜 컨테이너인가
-
-왜 컨테이너를 써야하는지 이유를 알고 싶은가?
-
-
-
-애플리케이션을 배포하는 *옛 방식* 은 운영 체제의 패키지 관리자를
-사용해서 애플리케이션을 호스트에 설치하는 것이었다. 이 방식은
-애플리케이션의 실행 파일, 설정, 라이브러리 서로 간의 라이프사이클과
-호스트 OS와 얽히게 된다는 단점이 있다.
-예측 가능한 롤아웃과 롤백을
-위해서 불변의 가상 머신 이미지를 만들 수도 있지만,
-VM은 너무 크고 이식 가능하지 않다.
-
-*새로운 방법* 은 하드웨어 가상화가 아닌 운영 체제 수준의 가상화에 기반한
-컨테이너를 배포하는 것이다. 이 컨테이너는 서로 격리되고 호스트와도 격리된다.
-컨테이너는 컨테이너 자체의 파일시스템을 갖고,
-다른 컨테이너의 프로세스를 알 수 없으며,
-연산에 필요한 자원을 제한할 수 있다.
-VM보다 빌드하기 쉬우며,
-기반이 되는 인프라스트럭처와 호스트 파일시스템에서
-디커플되었기(decoupled) 때문에 클라우드나 OS 배포판 간 이식성이 있다.
-
-컨테이너는 작고 빠르기 때문에, 애플리케이션 각각을 컨테이너 이미지로
-패키지할 수 있다. 이렇게 애플리케이션과 이미지를 일대일 관계를 갖도록 하면
-컨테이너의 혜택을 만끽할 수 있게 된다.
-불변의 컨테이너 이미지는
-배포 시점이 아닌 빌드/릴리스 시점에 만들어질 수 있다.
-왜냐하면 각각의 애플리케이션은
-애플리케이션 스택 외의 나머지 요소와 조합될 필요가 없기 때문이고,
-운영 인프라스트럭처 환경에 밀접하게 결합시킬 필요도 없기 때문이다.
-컨테이너 이미지를 빌드/릴리스 시점에 생성하게 되면 개발
-환경부터 운영 환경까지 일관된 환경을 가져갈 수 있게 된다.
-마찬가지로, 컨테이너는 VM보다 훨씬 더 투명해서 모니터링과 관리가 용이하다.
-컨테이너의 프로세스 라이프사이클이 수퍼바이저 프로세스에 의해 컨테이너
-내에 감추어지지 않고, 인프라스트럭처에 의해 관리될 때 더욱 이는
-용이해진다. 컨테이너마다 단일 애플리케이션을 담게되면,
-궁극적으로 컨테이너를 관리하는 것이 애플리케이션의 배포를 관리하는 것과 같아진다.
-
-컨테이너의 혜택 요약:
-
-* **기민한 애플리케이션 생성과 배포**:
- VM 이미지 사용 대비 컨테이너 이미지 생성이 보다 쉽고 효율적임.
-* **지속적인 개발, 통합 및 배포**:
- 안정적이고 주기적으로 컨테이너 이미지를
- 빌드해서 배포할 수 있고
- (이미지의 불변성 덕에) 빠르고 쉽게 롤백할 수 있다.
-* **개발과 운영의 관심사 분리**:
- 배포 시점이 아닌 빌드/릴리스 시점에
- 애플리케이션 컨테이너 이미지를 만들기 때문에,
- 애플리케이션이 인프라스트럭처에서 디커플된다.
-* **가시성**
- OS 수준의 정보와 메트릭에 머무르지 않고, 애플리케이션의 헬스와
- 그 밖의 시그널을 볼 수 있다.
-* **개발, 테스팅 및 운영 환경을 걸친 일관성**:
- 랩탑에서도 클라우드에서와 동일하게 구동된다.
-* **클라우드 및 OS 배포판 간 이식성**:
- Ubuntu, RHEL, CoreOS, on-prem, Google Kubernetes Engine 및 다른 어디에서든 구동된다.
-* **애플리케이션 중심 관리**:
- 가상 하드웨어의 OS에서 애플리케이션을 구동하는 수준에서 OS의
- 논리적인 자원을 사용하여 애플리케이션을 구동하는 수준으로 추상화 수준이 높아진다.
-* **느슨하게 커플되고, 분산되고, 유연하며, 자유로운 [마이크로서비스](https://martinfowler.com/articles/microservices.html)**:
- 애플리케이션은 단일 목적의 머신에서 모놀리식 스택으로
- 구동되지 않고 보다 작고 독립적인 단위로 쪼개져서 동적으로 배포되고
- 관리될 수 있다.
-* **자원 격리**:
- 애플리케이션 성능을 예측할 수 있다.
-* **지원 사용량**:
- 고효율 고집적.
-
-## 쿠버네티스와 K8s의 뜻
-
-**쿠버네티스**는 *키잡이* 나 *파일럿* 을 뜻하는 그리스어에서 유래했으며,
-이는 *governor*(통치자)와
-[cybernetic(인공두뇌학)](http://www.etymonline.com/index.php?term=cybernetics)의
-어원이다.
-*K8s* 는 "ubernete" 8 글자를 "8"로 대체한 약어이다.
+* 지원하는 애플리케이션의 유형을 제약하지 않는다. 쿠버네티스는 상태 유지가 필요 없는(stateless) 워크로드, 상태 유지가 필요한(stateful) 워크로드, 데이터 처리를 위한 워크로드를 포함해서 극단적으로 다양한 워크로드를 지원하는 것을 목표로 한다. 애플리케이션이 컨테이너에서 구동될 수 있다면, 쿠버네티스에서도 잘 동작할 것이다.
+* 소스 코드를 배포하지 않으며 애플리케이션을 빌드하지 않는다. 지속적인 통합과 전달과 배포, 곧 CI/CD 워크플로우는 조직 문화와 취향에 따를 뿐만 아니라 기술적인 요구사항으로 결정된다.
+* 애플리케이션 레벨의 서비스를 제공하지 않는다. 애플리케이션 레벨의 서비스에는 미들웨어(예, 메시지 버스), 데이터 처리 프레임워크(예, Spark), 데이터베이스(예, mysql), 캐시 또는 클러스터 스토리지 시스템(예, Ceph) 등이 있다. 이런 컴포넌트는 쿠버네티스 상에서 구동될 수 있고, 쿠버네티스 상에서 구동 중인 애플리케이션이 Open Service Broker와 같은 이식 가능한 메커니즘을 통해 접근할 수도 있다.
+* 로깅, 모니터링 또는 경보 솔루션을 포함하지 않는다. 개념 증명을 위한 일부 통합이나, 메트릭을 수집하고 노출하는 메커니즘을 제공한다.
+* 기본 설정 언어/시스템(예, jsonnet)을 제공하거나 요구하지 않는다. 선언적 명세의 임의적인 형식을 목적으로 하는 선언적 API를 제공한다.
+* 포괄적인 머신 설정, 유지보수, 관리, 자동 복구 시스템을 제공하거나 채택하지 않는다.
+* 추가로, 쿠버네티스는 단순한 오케스트레이션 시스템이 아니다. 사실, 쿠버네티스는 오케스트레이션의 필요성을 없애준다. 오케스트레이션의 기술적인 정의는 A를 먼저 한 다음, B를 하고, C를 하는 것과 같이 정의된 워크플로우를 수행하는 것이다. 반면에, 쿠버네티스는 독립적이고 조합 가능한 제어 프로세스들로 구성되어 있다. 이 프로세스는 지속적으로 현재 상태를 입력받은 의도된 상태로 나아가도록 한다. A에서 C로 어떻게 갔는지는 상관이 없다. 중앙화된 제어도 필요치 않다. 이로써 시스템이 보다 더 사용하기 쉬워지고, 강력해지며, 견고하고, 회복력을 갖추게 되며, 확장 가능해진다.
{{% /capture %}}
{{% capture whatsnext %}}
-* [시작할](/docs/setup/) 준비가 되었는가?
-* 보다 자세한 내용은 [쿠버네티스 문서](/ko/docs/home/)를 참조한다.
+* [쿠버네티스 구성요소](/docs/concepts/overview/components/) 살펴보기
+* [시작하기](/docs/setup/) 준비가 되었는가?
{{% /capture %}}
-
-
diff --git a/content/ko/docs/concepts/overview/working-with-objects/annotations.md b/content/ko/docs/concepts/overview/working-with-objects/annotations.md
index 1825239058..b0b3c975f0 100644
--- a/content/ko/docs/concepts/overview/working-with-objects/annotations.md
+++ b/content/ko/docs/concepts/overview/working-with-objects/annotations.md
@@ -69,8 +69,29 @@ _어노테이션_ 은 키/값 쌍이다. 유효한 어노테이션 키에는 두
`kubernetes.io/`와 `k8s.io/` 접두사는 쿠버네티스 핵심 구성 요소를 위해 예약되어 있다.
+다음은 `imageregistry: https://hub.docker.com/` 어노테이션이 있는 파드의 구성 파일 예시이다.
+
+```yaml
+
+apiVersion: v1
+kind: Pod
+metadata:
+ name: annotations-demo
+ annotations:
+ imageregistry: "https://hub.docker.com/"
+spec:
+ containers:
+ - name: nginx
+ image: nginx:1.7.9
+ ports:
+ - containerPort: 80
+
+```
+
{{% /capture %}}
{{% capture whatsnext %}}
[레이블과 셀렉터](/docs/concepts/overview/working-with-objects/labels/)에 대해 알아본다.
{{% /capture %}}
+
+
diff --git a/content/ko/docs/concepts/overview/working-with-objects/field-selectors.md b/content/ko/docs/concepts/overview/working-with-objects/field-selectors.md
new file mode 100644
index 0000000000..3e7868c269
--- /dev/null
+++ b/content/ko/docs/concepts/overview/working-with-objects/field-selectors.md
@@ -0,0 +1,60 @@
+---
+title: 필드 셀렉터
+weight: 60
+---
+
+_필드 셀렉터_ 는 한 개 이상의 리소스 필드 값에 따라 [쿠버네티스 리소스를 선택](/docs/concepts/overview/working-with-objects/kubernetes-objects)하기 위해 사용된다. 필드 셀렉터 쿼리의 예시는 다음과 같다.
+
+* `metadata.name=my-service`
+* `metadata.namespace!=default`
+* `status.phase=Pending`
+
+다음의 `kubectl` 커맨드는 [`status.phase`](/ko/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase) 필드의 값이 `Running` 인 모든 파드를 선택한다.
+
+```shell
+kubectl get pods --field-selector status.phase=Running
+```
+
+{{< note >}}
+필드 셀렉터는 본질적으로 리소스 *필터* 이다. 기본적으로 적용되는 셀렉터나 필드는 없으며, 이는 명시된 종류의 모든 리소스가 선택된다는 것을 의미한다. 따라서 다음의 `kubectl` 쿼리들은 동일하다.
+
+```shell
+kubectl get pods
+kubectl get pods --field-selector ""
+```
+{{< /note >}}
+
+## 사용 가능한 필드
+
+사용 가능한 필드는 쿠버네티스의 리소스 종류에 따라서 다르다. 모든 리소스 종류는 `metadata.name` 과 `metadata.namespace` 필드 셀렉터를 사용할 수 있다. 사용할 수 없는 필드 셀렉터를 사용하면 다음과 같이 에러를 출력한다.
+
+```shell
+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"
+```
+
+## 사용 가능한 연산자
+
+필드 셀렉터에서 `=`, `==`, `!=` 연산자를 사용할 수 있다 (`=`와 `==`는 동일한 의미이다). 예를 들면, 다음의 `kubectl` 커맨드는 `default` 네임스페이스에 속해있지 않은 모든 쿠버네티스 서비스를 선택한다.
+
+```shell
+kubectl get services --all-namespaces --field-selector metadata.namespace!=default
+```
+
+## 연계되는 셀렉터
+
+[레이블](/docs/concepts/overview/working-with-objects/labels)을 비롯한 다른 셀렉터처럼, 쉼표로 구분되는 목록을 통해 필드 셀렉터를 연계해서 사용할 수 있다. 다음의 `kubectl` 커맨드는 `status.phase` 필드가 `Running` 이 아니고, `spec.restartPolicy` 필드가 `Always` 인 모든 파드를 선택한다.
+
+```shell
+kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always
+```
+
+## 여러 개의 리소스 종류
+
+필드 셀렉터를 여러 개의 리소스 종류에 걸쳐 사용할 수 있다. 다음의 `kubectl` 커맨드는 `default` 네임스페이스에 속해있지 않은 모든 스테이트풀 셋과 서비스를 선택한다.
+
+```shell
+kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default
+```
diff --git a/content/ko/docs/concepts/overview/working-with-objects/names.md b/content/ko/docs/concepts/overview/working-with-objects/names.md
index 45e44b5c28..8896f2e931 100644
--- a/content/ko/docs/concepts/overview/working-with-objects/names.md
+++ b/content/ko/docs/concepts/overview/working-with-objects/names.md
@@ -17,13 +17,28 @@ weight: 20
{{% capture body %}}
-## Names
+## 이름 {#names}
{{< glossary_definition term_id="name" length="all" >}}
관례에 따라, 쿠버네티스 리소스의 이름은 최대 253자까지 허용되고 소문자 알파벳과 숫자(alphanumeric), `-`, 그리고 `.`로 구성되며 특정 리소스는 보다 구체적인 제약을 갖는다.
-## UIDs
+다음은 이름이 `nginx-demo`이고 컨테이너 이름이 `nginx`인 파드의 구성 파일 예시이다.
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: nginx-demo
+spec:
+ containers:
+ - name: nginx
+ image: nginx:1.7.9
+ ports:
+ - containerPort: 80
+```
+
+## UID {#uids}
{{< glossary_definition term_id="uid" length="all" >}}
diff --git a/content/ko/docs/concepts/overview/working-with-objects/namespaces.md b/content/ko/docs/concepts/overview/working-with-objects/namespaces.md
index ae052bb8fc..119cf34fe6 100644
--- a/content/ko/docs/concepts/overview/working-with-objects/namespaces.md
+++ b/content/ko/docs/concepts/overview/working-with-objects/namespaces.md
@@ -76,7 +76,7 @@ kubectl --namespace= get pods
영구적으로 저장할 수 있다.
```shell
-kubectl config set-context $(kubectl config current-context) --namespace=
+kubectl config set-context --current --namespace=
# 확인하기
kubectl config view | grep namespace:
```
diff --git a/content/ko/docs/concepts/workloads/controllers/replicationcontroller.md b/content/ko/docs/concepts/workloads/controllers/replicationcontroller.md
new file mode 100644
index 0000000000..38d1c99937
--- /dev/null
+++ b/content/ko/docs/concepts/workloads/controllers/replicationcontroller.md
@@ -0,0 +1,291 @@
+---
+
+
+
+title: 레플리케이션 컨트롤러
+feature:
+ title: 자가 치유
+ anchor: 레플리케이션 컨트롤러의 동작 방식
+ description: >
+ 오류가 발생한 컨테이너를 재시작하고, 노드가 죽었을 때 컨테이너를 교체하기 위해 다시 스케줄하고, 사용자 정의 상태 체크에 응답하지 않는 컨테이너를 제거하며, 서비스를 제공할 준비가 될 때까지 클라이언트에 해당 컨테이너를 알리지 않는다.
+
+content_template: templates/concept
+weight: 20
+---
+
+{{% capture overview %}}
+
+{{< note >}}
+[`ReplicaSet`](/docs/concepts/workloads/controllers/replicaset/) 을 구성하는 [`Deployment`](/docs/concepts/workloads/controllers/deployment/) 가 현재 권장되는 레플리케이션 설정 방법이다.
+{{< /note >}}
+
+_레플리케이션 컨트롤러_ 는 언제든지 지정된 수의 파드 레플리카가
+실행 중임을 보장한다.
+다시 말하면, 레플리케이션 컨트롤러는 파드 또는 동일 종류의 파드의 셋이 항상 기동되고 사용 가능한지 확인한다.
+
+{{% /capture %}}
+
+
+{{% capture body %}}
+
+## 레플리케이션 컨트롤러의 동작방식
+
+파드가 너무 많으면 레플리케이션 컨트롤러가 추가적인 파드를 제거한다.
+너무 적으면 레플리케이션 컨트롤러는 더 많은 파드를 시작한다.
+수동으로 생성된 파드와 달리 레플리케이션 컨트롤러가 유지 관리하는 파드는 실패하거나 삭제되거나 종료되는 경우 자동으로 교체된다.
+예를 들어, 커널 업그레이드와 같이 파괴적인 유지 보수 작업을 하고 난 이후의 노드에서 파드가 다시 생성된다.
+따라서 애플리케이션에 하나의 파드만 필요한 경우에도 레플리케이션 컨트롤러를 사용해야 한다.
+레플리케이션 컨트롤러는 프로세스 감시자(supervisor)와 유사하지만
+단일 노드에서 개별 프로세스를 감시하는 대신 레플리케이션 컨트롤러는
+여러 노드에서 여러 파드를 감시한다.
+
+레플리케이션 컨트롤러는 디스커션에서 종종 "rc" 혹은 "rcs"로 축약되며
+kubectl 명령에서 숏컷으로 사용된다.
+
+간단한 경우는 하나의 레플리케이션 컨트롤러 오브젝트를 생성하여
+한 개의 파드 인스턴스를 영구히 안정적으로 실행하는 것이다.
+보다 복잡한 사용 사례는 웹 서버와 같이 복제된 서비스의 동일한 레플리카를 여러 개 실행하는 것이다.
+
+## 레플리케이션 컨트롤러 예제 실행
+
+레플리케이션 컨트롤러 예제의 config는 nginx 웹서버의 복사본 세 개를 실행한다.
+
+{{< codenew file="controllers/replication.yaml" >}}
+
+예제 파일을 다운로드 한 후 다음 명령을 실행하여 예제 작업을 실행하라.
+
+```shell
+kubectl apply -f https://k8s.io/examples/controllers/replication.yaml
+```
+```
+replicationcontroller/nginx created
+```
+
+다음 명령을 사용하여 레플리케이션 컨트롤러의 상태를 확인하라.
+
+```shell
+kubectl describe replicationcontrollers/nginx
+```
+```
+Name: nginx
+Namespace: default
+Selector: app=nginx
+Labels: app=nginx
+Annotations:
+Replicas: 3 current / 3 desired
+Pods Status: 0 Running / 3 Waiting / 0 Succeeded / 0 Failed
+Pod Template:
+ Labels: app=nginx
+ Containers:
+ nginx:
+ Image: nginx
+ Port: 80/TCP
+ Environment:
+ Mounts:
+ Volumes:
+Events:
+ FirstSeen LastSeen Count From SubobjectPath Type Reason Message
+ --------- -------- ----- ---- ------------- ---- ------ -------
+ 20s 20s 1 {replication-controller } Normal SuccessfulCreate Created pod: nginx-qrm3m
+ 20s 20s 1 {replication-controller } Normal SuccessfulCreate Created pod: nginx-3ntk0
+ 20s 20s 1 {replication-controller } Normal SuccessfulCreate Created pod: nginx-4ok8v
+```
+
+이제 세 개의 파드가 생성되었으나 아직 이미지가 풀(pull)되지 않아서 어떤 파드도 시작되지 않았다.
+조금 지난 후에 같은 명령이 다음과 같이 보일 것이다.
+
+```shell
+Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
+```
+
+레플리케이션 컨트롤러에 속한 모든 파드를 머신이 읽을 수 있는 형식으로 나열하기 위해 다음과 같은 명령을 사용할 수 있다.
+
+```shell
+pods=$(kubectl get pods --selector=app=nginx --output=jsonpath={.items..metadata.name})
+echo $pods
+```
+```
+nginx-3ntk0 nginx-4ok8v nginx-qrm3m
+```
+
+여기서 셀렉터는 레플리케이션 컨트롤러의 셀렉터와 같다 (
+`kubectl describe` 의 출력에서 볼 수 있는 것과, 다른 형식의 파일인 `replication.yaml` 의 것). `--output=jsonpath` 옵션은
+반환된 목록의 각 파드에서 이름을 가져오는 표현식을 지정한다.
+
+
+## 레플리케이션 컨트롤러의 Spec 작성
+
+다른 모든 쿠버네티스 컨피그와 마찬가지로 레플리케이션 컨트롤러는 `apiVersion`, `kind`, `metadata` 와 같은 필드가 필요하다.
+컨피그 파일의 동작에 관련된 일반적인 정보는 다음을 참조하라 [쿠버네티스 오브젝트 관리 ](/ko/docs/concepts/overview/working-with-objects/object-management/).
+
+레플리케이션 컨트롤러는 또한 [`.spec` section](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status) 도 필요하다.
+
+### 파드 템플릿
+
+`.spec.template` 는 오직 `.spec` 필드에서 요구되는 것이다.
+
+`.spec.template` 는 [파드(Pod) 개요](/ko/docs/concepts/workloads/pods/pod-overview/#pod-templates) 이다. 정확하게 [파드](/ko/docs/concepts/workloads/pods/pod/) 스키마와 동일하나, 중첩되어 있고 `apiVersion` 혹은 `kind`를 갖지 않는다.
+
+파드에 필요한 필드 외에도 레플리케이션 컨트롤러의 파드 템플릿은 적절한 레이블과 적절한 재시작 정책을 지정해야 한다. 레이블의 경우 다른 컨트롤러와
+중첩되지 않도록 하라. [파드 셀렉터](#파드-셀렉터)를 참조하라.
+
+오직 `Always` 와 동일한 [`.spec.template.spec.restartPolicy`](/ko/docs/concepts/workloads/pods/pod-lifecycle/#재시작-정책) 만 허용되며, 특별히 지정되지 않으면 기본값이다.
+
+로컬 컨테이너의 재시작의 경우, 레플리케이션 컨트롤러는 노드의 에이전트에게 위임한다.
+예를 들어 [Kubelet](/docs/admin/kubelet/) 혹은 도커이다.
+
+### 레플리케이션 컨트롤러에서 레이블
+
+레플리케이션 컨트롤러 자체는 레이블 (`.metadata.labels`) 을 가질 수 있다. 일반적으로 이것을 `.spec.template.metadata.labels` 와 동일하게 설정할 것이다. `.metadata.labels` 가 지정되어 있지 않은 경우,
+기본은 `.spec.template.metadata.labels` 이다. 하지만 레이블은
+다른 것이 허용되며, `.metadata.labels` 라벨은 레플리케이션 컨트롤러의
+동작에 영향을 미치지 않는다.
+
+### 파드 셀렉터
+
+`.spec.selector` 필드는 [레이블 셀렉터](/docs/concepts/overview/working-with-objects/labels/#label-selectors) 이다. 레플리케이션 컨트롤러는 셀렉터와 일치하는 레이블이 있는 모든 파드를 관리한다.
+직접 생성하거나 삭제된 파드와 다른 사람이나 프로세스가 생성하거나
+삭제한 파드를 구분하지 않는다. 이렇게 하면 실행중인 파드에 영향을 주지 않고
+레플리케이션 컨트롤러를 교체할 수 있다.
+
+지정된 경우 `.spec.template.metadata.labels` 은
+`.spec.selector` 와 동일해야 하며 그렇지 않으면 API에 의해 거부된다. `.spec.selector` 가 지정되지 않은 경우 기본값은
+`.spec.template.metadata.labels` 이다.
+
+또한 일반적으로 이 셀렉터와 레이블이 일치하는 파드를 직접
+다른 레플리케이션 컨트롤러 또는 잡과 같은 다른 컨트롤러로 작성해서는 안된다.
+그렇게 하면 레플리케이션 컨트롤러는 다른 파드를 생성했다고 생각한다.
+쿠버네티스는 이런 작업을 중단해 주지 않는다.
+
+중첩된 셀렉터들을 갖는 다수의 컨트롤러들을 종료하게 되면, 삭제된 것들은 스스로 관리를 해야 한다
+([아래](#레플리케이션-컨트롤러-사용하기)를 참조).
+
+### 다수의 레플리카
+
+`.spec.replicas` 를 동시에 실행하고 싶은 파드의 수로 설정함으로써
+실행할 파드의 수를 지정할 수 있다. 레플리카가 증가 또는 감소한 경우 또는
+파드가 정상적으로 종료되고 교체가 일찍 시작되는 경우라면
+언제든지 실행중인 수가 더 높거나 낮을 수 있다.
+
+`.spec.replicas` 를 지정하지 않으면 기본값은 1이다.
+
+## 레플리케이션 컨트롤러 사용하기
+
+### 레플리케이션 컨트롤러와 레플리케이션 컨트롤러의 파드 삭제
+
+레플리케이션 컨트롤러와 레플리케이션의 모든 파드를 삭제하려면 [`kubectl
+delete`](/docs/reference/generated/kubectl/kubectl-commands#delete) 를 사용하라.
+Kubectl은 레플리케이션 컨트롤러를 0으로 스케일하고 레플리케이션 컨트롤러 자체를
+삭제하기 전에 각 파드를 삭제하기를 기다린다. 이 kubectl 명령이 인터럽트되면 다시 시작할 수 있다.
+
+REST API나 go 클라이언트 라이브러리를 사용하는 경우 명시적으로 단계를 수행해야 한다 (레플리카를 0으로 스케일하고 파드의 삭제를 기다린 이후,
+레플리케이션 컨트롤러를 삭제).
+
+### 레플리케이션 컨트롤러만 삭제
+
+해당 파드에 영향을 주지 않고 레플리케이션 컨트롤러를 삭제할 수 있다.
+
+kubectl을 사용하여, [`kubectl delete`](/docs/reference/generated/kubectl/kubectl-commands#delete) 에 옵션으로 `--cascade=false`를 지정하라.
+
+REST API나 go 클라이언트 라이브러리를 사용하는 경우 간단히 레플리케이션 컨트롤러 오브젝트를 삭제하라.
+
+원본이 삭제되면 대체할 새로운 레플리케이션 컨트롤러를 생성하여 교체할 수 있다. 오래된 파드와 새로운 파드의 `.spec.selector` 가 동일하다면,
+새로운 레플리케이션 컨트롤러는 오래된 파드를 채택할 것이다. 그러나 기존 파드를
+새로운 파드 템플릿과 일치시키려는 노력은 하지 않을 것이다.
+새로운 spec에 대한 파드를 제어된 방법으로 업데이트하려면 [롤링 업데이트](#롤링-업데이트) 를 사용하라.
+
+### 레플리케이션 컨트롤러에서 파드 격리
+
+파드는 레이블을 변경하여 레플리케이션 컨트롤러의 대상 셋에서 제거될 수 있다. 이 기술은 디버깅, 데이터 복구 등을 위해 서비스에서 파드를 제거하는데 사용될 수 있다. 이 방법으로 제거된 파드는 자동으로 교체된다 (레플리카 수가 변경되지 않는다고 가정).
+
+## 일반적인 사용법 패턴
+
+### 다시 스케줄하기
+
+위에서 언급했듯이, 실행하려는 파드가 한 개 혹은 1000개이든 관계없이 레플리케이션 컨트롤러는 노드 실패 또는 파드 종료시 지정된 수의 파드가 존재하도록 보장한다 (예 : 다른 제어 에이전트에 의한 동작으로 인해).
+
+### 스케일링
+
+레플리케이션 컨트롤러는 `replicas` 필드를 업데이트함으로써 수동으로 또는 오토 스케일링 제어 에이전트로 레플리카의 수를 쉽게 스케일 업하거나 스케일 다운할 수 있다.
+
+### 롤링 업데이트
+
+레플리케이션 컨트롤러는 파드를 하나씩 교체함으로써 서비스에 대한 롤링 업데이트를 쉽게 하도록 설계되었다.
+
+[#1353](http://issue.k8s.io/1353) 에서 설명한 것처럼, 권장되는 접근법은 1 개의 레플리카를 가진 새로운 레플리케이션 컨트롤러를 생성하고 새로운 (+1) 컨트롤러 및 이전 (-1) 컨트롤러를 차례대로 스케일한 후 0개의 레플리카가 되면 이전 컨트롤러를 삭제하는 것이다. 예상치 못한 오류와 상관없이 파드 세트를 예측 가능하게 업데이트한다.
+
+이상적으로 롤링 업데이트 컨트롤러는 애플리케이션 준비 상태를 고려하며 주어진 시간에 충분한 수의 파드가 생산적으로 제공되도록 보장할 것이다.
+
+두 레플리케이션 컨트롤러는 일반적으로 롤링 업데이트를 동기화 하는 이미지 업데이트이기 때문에 파드의 기본 컨테이너 이미지 태그와 같이 적어도 하나의 차별화된 레이블로 파드를 생성해야 한다.
+
+롤링 업데이트는 클라이언트 툴에서 [`kubectl rolling-update`](/docs/reference/generated/kubectl/kubectl-commands#rolling-update) 로 수행된다.
+좀 더 상세한 예제는 [`kubectl rolling-update` task](/docs/tasks/run-application/rolling-update-replication-controller/) 를 방문하라.
+
+### 다수의 릴리스 트랙
+
+롤링 업데이트가 진행되는 동안 다수의 애플리케이션 릴리스를 실행하는 것 외에도 다수의 릴리스 트랙을 사용하여 장기간에 걸쳐 또는 연속적으로 실행하는 것이 일반적이다. 트랙은 레이블 별로 구분된다.
+
+예를 들어, 서비스는 `tier in (frontend), environment in (prod)` 이 있는 모든 파드를 대상으로 할 수 있다. 이제 이 계층을 구성하는 10 개의 복제된 파드가 있다고 가정해 보자. 하지만 이 구성 요소의 새로운 버전을 '카나리' 하기를 원한다. 대량의 레플리카에 대해 `replicas` 를 9로 설정하고 `tier=frontend, environment=prod, track=stable` 레이블을 설정한 레플리케이션 컨트롤러와, 카나리에 `replicas` 가 1로 설정된 다른 레플리케이션 컨트롤러에 `tier=frontend, environment=prod, track=canary` 라는 레이블을 설정할 수 있다. 이제 이 서비스는 카나리와 카나리 이외의 파드 모두를 포함한다. 그러나 레플리케이션 컨트롤러를 별도로 조작하여 테스트하고 결과를 모니터링하는 등의 작업이 혼란스러울 수 있다.
+
+### 서비스와 레플리케이션 컨트롤러 사용
+
+하나의 서비스 뒤에 여러 개의 레플리케이션 컨트롤러가 있을 수 있다. 예를 들어 일부 트래픽은 이전 버전으로 이동하고 일부는 새 버전으로 이동한다.
+
+레플리케이션 컨트롤러는 자체적으로 종료되지 않지만 서비스만큼 오래 지속될 것으로 기대되지는 않는다. 서비스는 여러 레플리케이션 컨트롤러에 의해 제어되는 파드로 구성될 수 있으며 서비스 라이프사이클 동안 (예를 들어 서비스를 실행하는 파드 업데이트 수행을 위해)
+많은 레플리케이션 컨트롤러가 생성 및 제거될 것으로 예상된다. 서비스 자체와 클라이언트 모두 파드를 유지하는 레플리케이션 컨트롤러를 의식하지 않는 상태로 남아 있어야 한다.
+
+## 레플리케이션을 위한 프로그램 작성
+
+레플리케이션 컨트롤러에 의해 생성된 파드는 해당 구성이 시간이 지남에 따라 이질적이 될 수 있지만 균일하고 의미상 동일하도록 설계되었다. 이는 레플리카된 상태 스테이트리스 서버에 적합하지만 레플리케이션 컨트롤러를 사용하여 마스터 선출, 샤드 및 워크-풀 애플리케이션의 가용성을 유지할 수도 있다. [RabbitMQ work queues](https://www.rabbitmq.com/tutorials/tutorial-two-python.html) 와 같은 애플리케이션은 안티패턴으로 간주되는 각 파드의 구성에 대한 정적/일회성 사용자 정의와 반대로 동적 작업 할당 메커니즘을 사용해야 한다. 리소스의 수직 자동 크기 조정 (예 : CPU 또는 메모리)과 같은 수행된 모든 파드 사용자 정의는 레플리케이션 컨트롤러 자체와 달리 다른 온라인 컨트롤러 프로세스에 의해 수행되어야 한다.
+
+## 레플리케이션 컨트롤러의 책임
+
+레플리케이션 컨트롤러는 의도한 수의 파드가 해당 레이블 선택기와 일치하고 동작하는지를 단순히 확인한다. 현재, 종료된 파드만 해당 파드의 수에서 제외된다. 향후 시스템에서 사용할 수 있는 [readiness](http://issue.k8s.io/620) 및 기타 정보가 고려될 수 있으며 교체 정책에 대한 통제를 더 추가 할 수 있고 외부 클라이언트가 임의로 정교한 교체 또는 스케일 다운 정책을 구현하기 위해 사용할 수 있는 이벤트를 내보낼 계획이다.
+
+레플리케이션 컨트롤러는 이 좁은 책임에 영원히 제약을 받는다. 그 자체로는 준비성 또는 활성 프로브를 실행하지 않을 것이다. 오토 스케일링을 수행하는 대신, 외부 오토 스케일러 ([#492](http://issue.k8s.io/492)에서 논의된) 가 레플리케이션 컨트롤러의 `replicas` 필드를 변경함으로써 제어되도록 의도되었다. 레플리케이션 컨트롤러에 스케줄링 정책 (예를 들어 [spreading](http://issue.k8s.io/367#issuecomment-48428019)) 을 추가하지 않을 것이다. 오토사이징 및 기타 자동화 된 프로세스를 방해할 수 있으므로 제어된 파드가 현재 지정된 템플릿과 일치하는지 확인해야 한다. 마찬가지로 기한 완료, 순서 종속성, 구성 확장 및 기타 기능은 다른 곳에 속한다. 대량의 파드 생성 메커니즘 ([#170](http://issue.k8s.io/170)) 까지도 고려해야 한다.
+
+레플리케이션 컨트롤러는 조합 가능한 빌딩-블록 프리미티브가 되도록 고안되었다. 향후 사용자의 편의를 위해 더 상위 수준의 API 및/또는 도구와 그리고 다른 보완적인 기본 요소가 그 위에 구축 될 것으로 기대한다. 현재 kubectl이 지원하는 "매크로" 작업 (실행, 스케일, 롤링 업데이트)은 개념 증명의 예시이다. 예를 들어 [Asgard](http://techblog.netflix.com/2012/06/asgard-web-based-cloud-management-and.html) 와 같이 레플리케이션 컨트롤러, 오토 스케일러, 서비스, 정책 스케줄링, 카나리 등을 관리할 수 있다.
+
+
+## API 오브젝트
+
+레플리케이션 컨트롤러는 쿠버네티스 REST API의 최상위 수준의 리소스이다.
+API 오브젝트에 대한 더 자세한 것은
+[ReplicationController API object](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#replicationcontroller-v1-core) 에서 찾을 수 있다.
+
+## 레플리케이션 컨트롤러의 대안
+
+### 레플리카셋
+
+[`레플리카셋`](/docs/concepts/workloads/controllers/replicaset/)은 새로운 [set-based label selector](/docs/concepts/overview/working-with-objects/labels/#set-based-requirement) 이다.
+이것은 주로 [`디플로이먼트`](/docs/concepts/workloads/controllers/deployment/) 에 의해 파드의 생성, 삭제 및 업데이트를 오케스트레이션 하는 메커니즘으로 사용된다.
+사용자 지정 업데이트 조정이 필요하거나 업데이트가 필요하지 않은 경우가 아니면 레플리카 셋을 직접 사용하는 대신 디플로이먼트를 사용하는 것이 좋다.
+
+
+### 디플로이먼트 (권장되는)
+
+[`디플로이먼트`](/docs/concepts/workloads/controllers/deployment/) 는 `kubectl rolling-update` 와 비슷한 방식으로 기본 레플리카셋과 그 파드를 업데이트하는 상위 수준의 API 오브젝트이다.
+`kubectl rolling-update` 와는 다르게 선언적이며, 서버 사이드이고,
+추가 기능이 있기 때문에 롤링 업데이트 기능을 원한다면 디플로이먼트를 권장한다.
+
+### 베어 파드
+
+사용자가 직접 파드를 만든 경우와 달리 레플리케이션 컨트롤러는 노드 오류 또는 커널 업그레이드와 같은 장애가 발생하는 노드 유지 관리의 경우와 같이 어떤 이유로든 삭제되거나 종료된 파드를 대체한다. 따라서 애플리케이션에 하나의 파드만 필요한 경우에도 레플리케이션 컨트롤러를 사용하는 것이 좋다. 프로세스 관리자와 비슷하게 생각하면, 단지 단일 노드의 개별 프로세스가 아닌 여러 노드에서 여러 파드를 감독하는 것이다. 레플리케이션 컨트롤러는 로컬 컨테이너가 노드의 에이전트로 (예를 들어 Kubelet 또는 도커 ) 재시작하도록 위임한다.
+
+### 잡
+
+자체적으로 제거될 것으로 예상되는 파드 (즉, 배치 잡)의 경우
+레플리케이션 컨트롤러 대신 [`잡`](/docs/concepts/jobs/run-to-completion-finite-workloads/)을 사용하라.
+
+### 데몬셋
+
+머신 모니터링이나 머신 로깅과 같은 머신 레벨 기능을 제공하는 파드에는 레플리케이션 컨트롤러 대신
+[`데몬셋`](/docs/concepts/workloads/controllers/daemonset/)을 사용하라. 이런 파드들의 수명은 머신의 수명에 달려 있다.
+다른 파드가 시작되기 전에 파드가 머신에서 실행되어야 하며,
+머신이 재부팅/종료 준비가 되어 있을 때 안전하게 종료된다.
+
+## 더 자세한 정보는
+
+[스테이트리스 애플리케이션 레플리케이션 컨트롤러 실행하기](docs/tutorials/stateless-application/run-stateless-ap-replication-controller/) 를 참조하라.
+
+{{% /capture %}}
diff --git a/content/ko/docs/concepts/workloads/pods/pod-overview.md b/content/ko/docs/concepts/workloads/pods/pod-overview.md
index 79cd31753b..1555ff06e4 100644
--- a/content/ko/docs/concepts/workloads/pods/pod-overview.md
+++ b/content/ko/docs/concepts/workloads/pods/pod-overview.md
@@ -15,10 +15,9 @@ card:
{{% capture body %}}
## 파드에 대해 이해하기
-*파드* 는 쿠버네티스의 기본 구성 요소이다. 쿠버네티스 객체 모델 중 만들고 배포할 수 있는 가장 작고 간단한 단위이다. 파드는 {{< glossary_tooltip term_id="cluster" >}} 에서의 Running 프로세스를 나타낸다.
+*파드* 는 쿠버네티스 애플리케이션의 기본 실행 단위이다. 쿠버네티스 객체 모델 중 만들고 배포할 수 있는 가장 작고 간단한 단위이다. 파드는 {{< glossary_tooltip term_id="cluster" >}} 에서의 Running 프로세스를 나타낸다.
-파드는 애플리케이션 컨테이너(또는, 몇몇의 경우, 다중 컨테이너), 저장소 리소스, 특정 네트워크 IP 그리고, {{< glossary_tooltip text="container" term_id="container" >}} 가 동작하기 위해 만들어진 옵션들을 캡슐화 한다.
-파드는 배포의 단위를 말한다. 아마 단일 컨테이너로 구성되어 있거나, 강하게 결합되어 리소스를 공유하는 소수의 컨테이너로 구성되어 있는 *쿠버네티스에서의 애플리케이션 단일 인스턴스* 를 의미함.
+파드는 애플리케이션 컨테이너(또는, 몇몇의 경우, 다중 컨테이너), 저장소 리소스, 특정 네트워크 IP 그리고, {{< glossary_tooltip text="container" term_id="container" >}} 가 동작하기 위해 만들어진 옵션들을 캡슐화 한다. 파드는 배포의 단위를 말한다. 아마 단일 컨테이너로 구성되어 있거나, 강하게 결합되어 리소스를 공유하는 소수의 컨테이너로 구성되어 있는 *쿠버네티스에서의 애플리케이션 단일 인스턴스* 를 의미함.
[도커](https://www.docker.com)는 쿠버네티스 파드에서 사용되는 가장 대표적인 컨테이너 런타임이지만, 파드는 다른 컨테이너 런타임 역시 지원한다.
@@ -27,25 +26,19 @@ card:
* **단일 컨테이너만 동작하는 파드**. "단일 컨테이너 당 한 개의 파드" 모델은 쿠버네티스 사용 사례 중 가장 흔하다. 이 경우, 한 개의 파드가 단일 컨테이너를 감싸고 있다고 생각할 수 있으며, 쿠버네티스는 컨테이너가 아닌 파드를 직접 관리한다고 볼 수 있다.
* **함께 동작하는 작업이 필요한 다중 컨테이너가 동작하는 파드**. 아마 파드는 강하게 결합되어 있고 리소스 공유가 필요한 다중으로 함께 배치된 컨테이너로 구성되어 있을 것이다. 이렇게 함께 배치되어 설치된 컨테이너는 단일 결합 서비스 단위일 것이다. 한 컨테이너는 공유 볼륨에서 퍼블릭으로 파일들을 옮기고, 동시에 분리되어 있는 "사이드카" 컨테이너는 그 파일들을 업데이트 하거나 복구한다. 파드는 이 컨테이너와 저장소 리소스들을 한 개의 관리 가능한 요소로 묶는다.
-
-
[쿠버네티스 블로그](http://kubernetes.io/blog)에는 파드 사용 사례의 몇 가지 추가적인 정보가 있다. 더 많은 정보를 위해서 아래 내용을 참조하길 바란다.
* [분산 시스템 툴킷: 복합 컨테이너를 위한 패턴](https://kubernetes.io/blog/2015/06/the-distributed-system-toolkit-patterns)
* [컨테이너 디자인 패턴](https://kubernetes.io/blog/2016/06/container-design-patterns)
-
각각의 파드는 주어진 애플리케이션에서 단일 인스턴스로 동작을 하는 것을 말한다. 만약 애플리케이션을 수평적으로 스케일하기를 원하면(예를 들면, 다중 인스턴스 동작하는 것), 각 인스턴스 당 한 개씩 다중 파드를 사용해야 한다. 쿠버네티스에서는, 일반적으로 이것을 _복제_ 라고 한다. 복제된 파드는 주로 컨트롤러라고 하는 추상화 개념의 그룹에 의해 만들어지고 관리된다. 더 많은 정보는 [파드와 컨트롤러](#pods-and-controllers)를 참고하길 바란다.
-
-
## 어떻게 파드가 다중 컨테이너를 관리하는가
파드는 결합도가 있는 단위의 서비스를 형성하는 다중 협력 프로세스(컨테이너)를 지원하도록 디자인 되었다. 파드 내부의 컨테이너는 자동으로 동일한 물리적 또는 가상의 머신의 클러스터에 함께 배치되고 스케쥴된다. 컨테이너는 리소스와 의존성 공유, 다른 컨테이너와의 통신 그리고 언제,어떻게 조절하는지를 공유할 수 있다.
단일 파드 내부에서 함께 배치되고 관리되는 컨테이너 그룹은 상대적으로 심화된 사용 예시임에 유의하자. 컨테이너가 강하게 결합된 특별한 인스턴스의 경우에만 이 패턴을 사용하는게 좋다. 예를 들어, 공유 볼륨 내부 파일의 웹 서버 역할을 하는 컨테이너와 원격 소스로부터 그 파일들을 업데이트하는 분리된 "사이드카" 컨테이너가 있는 경우 아래 다이어그램의 모습일 것이다.
-
{{< figure src="/images/docs/pod.svg" alt="example pod diagram" width="50%" >}}
몇몇의 파드는 {{< glossary_tooltip text="init containers" term_id="init-container" >}} 뿐만 아니라 {{< glossary_tooltip text="app containers" term_id="app-container" >}} 도 가진다. 초기 컨테이너는 앱 컨테이너 시작이 완료되기 전에 동작한다.
@@ -62,18 +55,17 @@ card:
## 파드 작업
-직접 쿠버네티스에서 싱글톤 파드이더라도 개별 파드를 만들일이 거의 없을 것이다. 그 이유는 파드가 상대적으로 수명이 짧고 일시적이기 때문이다. 파드가 만들어지면(직접 만들거나, 컨트롤러에 의해서 간접적으로 만들어지거나), 그것은 클러스터의 {{< glossary_tooltip term_id="node" >}} 에서 동작할 것이다. 파드는 프로세스가 종료되거나, 파드 객체가 삭제되거나, 파드가 리소스의 부족으로 인해 *제거되거나*, 노드에 장애가 생기지 않는 한 노드에 남아있는다.
+직접 쿠버네티스에서 싱글톤 파드이더라도 개별 파드를 만들일이 거의 없을 것이다. 그 이유는 파드가 상대적으로 수명이 짧고 일시적이기 때문이다. 파드가 만들어지면(직접 만들거나, 컨트롤러에 의해서 간접적으로 만들어지거나), 그것은 클러스터의 {{< glossary_tooltip term_id="node" >}} 에서 동작할 것이다. 파드는 프로세스가 종료되거나, 파드 객체가 삭제되거나, 파드가 리소스의 부족으로 인해 *제거되거나*, 노드에 장애가 생기지 않는 한 노드에 남아있는다.
{{< note >}}
파드 내부에서 재시작되는 컨테이너를 파드와 함께 재시작되는 컨테이너로 혼동해서는 안된다. 파드는 자기 스스로 동작하지 않는다. 하지만 컨테이너 환경은 그것이 삭제될 때까지 계속 동작한다.
{{< /note >}}
-파드는 스스로 자신을 치료하지 않는다. 만약 파드가 스케줄링된 노드에 장애가 생기거나, 스케쥴링 동작이 스스로 실패할 경우 파드는 삭제된다. 그와 비슷하게, 파드는 리소스나 노드의 유지 부족으로 인해 제거되는 상황에서 살아남지 못할 것이다.
-쿠버네티스는 상대적으로 일시적인 파드 인스턴스를 관리하는 작업을 처리하는 *컨트롤러* 라고 하는 고수준의 추상적 개념을 사용한다. 즉, 파드를 직접적으로 사용가능 하지만, 컨트롤러를 사용하여 파드를 관리하는 것이 쿠버네티스에서 훨씬 더 보편적이다. 쿠버네티스가 어떻게 파드 스케일링과 치료하는지 보려면 [파드와 컨트롤러](#pods-and-controllers)를 참고하길 바란다.
+파드는 스스로 자신을 치료하지 않는다. 만약 파드가 스케줄링된 노드에 장애가 생기거나, 스케쥴링 동작이 스스로 실패할 경우 파드는 삭제된다. 그와 비슷하게, 파드는 리소스나 노드의 유지 부족으로 인해 제거되는 상황에서 살아남지 못할 것이다. 쿠버네티스는 상대적으로 일시적인 파드 인스턴스를 관리하는 작업을 처리하는 *컨트롤러* 라고 하는 고수준의 추상적 개념을 사용한다. 즉, 파드를 직접적으로 사용가능 하지만, 컨트롤러를 사용하여 파드를 관리하는 것이 쿠버네티스에서 훨씬 더 보편적이다. 쿠버네티스가 어떻게 파드 스케일링과 치료하는지 보려면 [파드와 컨트롤러](#pods-and-controllers)를 참고하길 바란다.
### 파드와 컨트롤러
-컨트롤러는 다중 파드를 생성하고 관리해 주는데, 클러스터 범위 내에서의 레플리케이션 핸들링, 롤아웃 그리고 셀프힐링 기능 제공을 한다. 예를 들어, 만약 노드가 고장났을 때, 컨트롤러는 다른 노드에 파드를 스케줄링 함으로써 자동으로 교체할 것이다.
+컨트롤러는 다중 파드를 생성하고 관리해 주는데, 클러스터 범위 내에서의 레플리케이션 핸들링, 롤아웃 그리고 셀프힐링 기능 제공을 한다. 예를 들어, 만약 노드가 고장났을 때, 컨트롤러는 다른 노드에 파드를 스케줄링 함으로써 자동으로 교체할 것이다.
한 가지 또는 그 이상의 파드를 보유한 컨트롤러의 몇 가지 예시.
@@ -84,7 +76,11 @@ card:
일반적으로, 컨트롤러는 책임을 지고 제공한 파드 템플릿을 사용한다.
## 파드 템플릿
-파드 템플릿은 [레플리케이션 컨트롤러](/docs/concepts/workloads/controllers/replicationcontroller/), [잡](/docs/concepts/jobs/run-to-completion-finite-workloads/), [데몬 셋](/docs/concepts/workloads/controllers/daemonset/)과 같은 다른 객체를 포함하는 파드 명세서이다. 컨트롤러는 파드 템플릿을 사용하여 실제 파드를 만든다.
+
+파드 템플릿은 [레플리케이션 컨트롤러](/docs/concepts/workloads/controllers/replicationcontroller/),
+[잡](/docs/concepts/jobs/run-to-completion-finite-workloads/),
+[데몬 셋](/docs/concepts/workloads/controllers/daemonset/)과 같은 다른 객체를 포함하는 파드 명세서이다.
+컨트롤러는 파드 템플릿을 사용하여 실제 파드를 만든다.
아래 예시는 메시지를 출력하는 컨테이너를 포함하는 파드에 대한 간단한 매니페스트이다.
```yaml
@@ -98,7 +94,7 @@ spec:
containers:
- name: myapp-container
image: busybox
- command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
+ command: ['sh', '-c', 'echo 안녕하세요 쿠버네티스! && sleep 3600']
```
모든 레플리카의 현재 원하는 상태를 지정하는 대신, 파드 템플릿은 쿠키 틀과 같다. 쿠키가 한 번 잘리면, 그 쿠키는 쿠키 틀과 더이상 관련이 없다. 양자 얽힘이 없는 것이다. 그 이후 템플릿을 변경하거나 새로운 템플릿으로 바꿔도 이미 만들어진 파드에는 직접적인 영향이 없다. 마찬가지로, 레플리케이션 컨트롤러에 의해 만들어진 파드는 아마 그 이후 직접 업데이트될 수 있다. 이것은 모든 컨테이너가 속해있는 파드에서 현재 원하는 상태를 명시하는 것과 의도적으로 대비가 된다. 이러한 접근은 시스템의 의미를 철저히 단순화하고 유연성을 증가시킨다.
@@ -106,7 +102,8 @@ spec:
{{% /capture %}}
{{% capture whatsnext %}}
-* [파드](/docs/concepts/workloads/pods/pod/)의 다른 동작들을 더 배워보자.
+* [파드](/docs/concepts/workloads/pods/pod/)에 대해 더 배워보자.
+* 파드의 동작에 대해 더 알아보자.
* [파드 종료](/docs/concepts/workloads/pods/pod/#termination-of-pods)
* [파드 라이프사이클](/ko/docs/concepts/workloads/pods/pod-lifecycle/)
{{% /capture %}}
diff --git a/content/ko/docs/concepts/workloads/pods/pod.md b/content/ko/docs/concepts/workloads/pods/pod.md
index 4c9340aa71..f58d6f8b4f 100644
--- a/content/ko/docs/concepts/workloads/pods/pod.md
+++ b/content/ko/docs/concepts/workloads/pods/pod.md
@@ -28,7 +28,7 @@ _파드_ 는 (고래 떼(pod of whales)나 콩꼬투리(pea pod)와 마찬가지
파드의 컨텍스트 내에서 개별 응용 프로그램은
추가적으로 하위 격리가 적용된다.
-컨테이너들 안의 파드는 IP주소와 포트 공간을 공유하고,
+파드 안의 컨테이너들은 IP주소와 포트 공간을 공유하고,
서로를 `localhost` 를 통해 찾을 수 있다.
그들은 또한 SystemV 세마포어나, POSIX 공유 메모리와 같은 표준 프로세스 간 통신 방식으로
서로 통신할 수 있다.
diff --git a/content/ko/docs/concepts/workloads/pods/podpreset.md b/content/ko/docs/concepts/workloads/pods/podpreset.md
index 8f2134a686..1a4f036794 100644
--- a/content/ko/docs/concepts/workloads/pods/podpreset.md
+++ b/content/ko/docs/concepts/workloads/pods/podpreset.md
@@ -5,8 +5,8 @@ weight: 50
---
{{% capture overview %}}
-이 페이지는 파드 프리셋에 대한 개요를 제공한다. 파드 프리셋은 파드 생성 시간에 파드에
-특정 정보를 주입하기 위한 오브젝트이다. 해당 정보에는
+이 페이지는 파드 프리셋에 대한 개요를 제공한다. 파드 프리셋은 파드 생성 시간에 파드에
+특정 정보를 주입하기 위한 오브젝트이다. 해당 정보에는
시크릿, 볼륨, 볼륨 마운트, 환경 변수가 포함될 수 있다.
{{% /capture %}}
@@ -14,12 +14,12 @@ weight: 50
{{% capture body %}}
## 파드 프리셋 이해하기
-`Pod Preset`은 파드 생성 시간에 파드에 추가적인 런타임 요구사항을
-주입하기 위한 API 리소스이다.
-주어진 파드 프리셋이 적용되도록 파드에 명시하기 위해서는
+`Pod Preset`은 파드 생성 시간에 파드에 추가적인 런타임 요구사항을
+주입하기 위한 API 리소스이다.
+주어진 파드 프리셋이 적용되도록 파드에 명시하기 위해서는
[레이블 셀렉터](/docs/concepts/overview/working-with-objects/labels/#label-selectors)를 사용한다.
-파드 프리셋을 사용하는 것은 파드 템플릿 작성자에게 모든 파드를 위한 모든 정보를 명시적으로
+파드 프리셋을 사용하는 것은 파드 템플릿 작성자에게 모든 파드를 위한 모든 정보를 명시적으로
제공하지는 않아도 되도록 한다. 이렇게 하면, 어떤 특정 서비스를 사용할 파드의 파드
템플릿 작성자는 해당 서비스에 대한 모든 세부 사항을 알 필요가 없다.
@@ -28,52 +28,59 @@ weight: 50
## 어떻게 동작하는가
쿠버네티스는 어드미션 컨트롤러(`PodPreset`)를 제공한다. 어드미션 컨트롤러가 활성화되면,
-파드 프리셋을 파드 생성 요청에 적용한다.
+파드 프리셋을 파드 생성 요청에 적용한다.
파드 생성 요청이 발생하면, 시스템은 다음의 내용을 수행한다.
1. 사용 가능한 모든 `PodPresets`을 검색한다.
-1. `PodPreset`의 레이블 셀렉터들 중 하나라도 생성되는 파드의 레이블과 일치하는
- 것이 있는지 확인한다.
-1. `PodPreset`에 의해서 정의된 다양한 리소스가 생성되는 파드에
+1. `PodPreset`의 레이블 셀렉터들 중 하나라도 생성되는 파드의 레이블과 일치하는
+ 것이 있는지 확인한다.
+1. `PodPreset`에 의해서 정의된 다양한 리소스가 생성되는 파드에
병합되도록 시도한다.
-1. 오류 시, 파드의 병합 오류를 문서화하는 이벤트를 발생시키고, `PodPreset`으로
- 부터 주입된 어떤 리소스도 _없이_ 파드를 생성한다.
-1. 수정된 파드 스펙의 결과에 어노테이션을 달아 `PodPreset`에 의해서
+1. 오류 시, 파드의 병합 오류를 문서화하는 이벤트를 발생시키고, `PodPreset`으로
+ 부터 주입된 어떤 리소스도 _없이_ 파드를 생성한다.
+1. 수정된 파드 스펙의 결과에 어노테이션을 달아 `PodPreset`에 의해서
수정되었음을 표시한다. 해당 어노테이션은 다음의 양식을 따른다.
`podpreset.admission.kubernetes.io/podpreset-<파드-프리셋 이름>: "<리소스 버전>"`.
-각 파드는 0개 이상의 파드 프리셋에 일치될 수 있고, 각 `PodPreset`은 0개 이상의
-파드에 적용될 수 있다. 하나의 `PodPreset`이 한 개 이상의 파드에 적용되었을
-때, 쿠버네티스는 해당 파드의 스펙을 수정한다. `Env`, `EnvFrom`, `VolumeMounts`의
-변경에 대해서는, 쿠버네티스가 파드 내의 모든 컨테이너의 컨테이너 스펙을
+각 파드는 0개 이상의 파드 프리셋에 일치될 수 있고, 각 `PodPreset`은 0개 이상의
+파드에 적용될 수 있다. 하나의 `PodPreset`이 한 개 이상의 파드에 적용되었을
+때, 쿠버네티스는 해당 파드의 스펙을 수정한다. `Env`, `EnvFrom`, `VolumeMounts`의
+변경에 대해서는, 쿠버네티스가 파드 내의 모든 컨테이너의 컨테이너 스펙을
수정한다. `Volume` 변경에 대해서는, 쿠버네티스는 해당 파드의 스펙을 수정한다.
{{< note >}}
-파드 프리셋은 적절한 경우 파드 스펙의 `.spec.containers` 필드를
-수정할 수도 있다. 파드 프리셋으로부터의 리소스 정의 *없음* 은 `initContainers`
-필드에 적용될 것이다.
+파드 프리셋은 적절한 경우 파드 스펙의 다음 필드를 수정할 수도 있다.
+- `.spec.containers` 필드
+- `initContainers` 필드(쿠버네티스 버전 1.14.0 이후에서 필요)
{{< /note >}}
### 특정 파드의 파드 프리셋 비활성화하기
-어떠한 파드 프리셋 변이에 의해서도 파드에 변경이 일어나지 않게 하고 싶은 경우가
-있을 것이다. 이 경우에는, 다음과 같은 양식으로 어노테이션을 파드 스펙에
+어떠한 파드 프리셋 변이에 의해서도 파드에 변경이 일어나지 않게 하고 싶은 경우가
+있을 것이다. 이 경우에는, 다음과 같은 양식으로 어노테이션을 파드 스펙에
추가한다. `podpreset.admission.kubernetes.io/exclude: "true"`.
## 파드 프리셋 활성화하기
클러스터에서 파드 프리셋을 사용하기 위해서는 다음 사항이 반드시 이행되어야 한다.
-1. API 타입 `settings.k8s.io/v1alpha1/podpreset`을 활성화하였다.
- 예를 들면, 이것은 API 서버의 `--runtime-config` 옵션에 `settings.k8s.io/v1alpha1=true`을 포함하여 완료할 수 있다.
- minikube에서는 클러스터가 시작할 때 `--extra-config=apiserver.runtime-config=settings.k8s.io/v1alpha1=true`
+1. API 타입 `settings.k8s.io/v1alpha1/podpreset`을 활성화하였다.
+ 예를 들면, 이것은 API 서버의 `--runtime-config` 옵션에 `settings.k8s.io/v1alpha1=true`을 포함하여 완료할 수 있다.
+ minikube에서는 클러스터가 시작할 때
+ `--extra-config=apiserver.runtime-config=settings.k8s.io/v1alpha1=true`
플래그를 추가한다.
-1. 어드미션 컨트롤러 `PodPreset`을 활성화하였다. 이것을 이루는 방법 중 하나는
+1. 어드미션 컨트롤러 `PodPreset`을 활성화하였다.
+ 이것을 이루는 방법 중 하나는
API 서버를 위해서 명시된 `--enable-admission-plugins` 옵션에 `PodPreset`을 포함하는 것이다.
- minikube에서는 클러스터가 시작할 때 `--extra-config=apiserver.enable-admission-plugins=Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset`
+ minikube에서는 클러스터가 시작할 때
+
+ ```shell
+ --extra-config=apiserver.enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset
+ ```
+
플래그를 추가한다.
-1. 사용할 네임스페이스 안에서 `PodPreset` 오브젝트를 생성하여
- 파드 프리셋을 정의하였다.
+1. 사용할 네임스페이스 안에서 `PodPreset` 오브젝트를 생성하여
+ 파드 프리셋을 정의하였다.
{{% /capture %}}
diff --git a/content/ko/docs/reference/glossary/applications.md b/content/ko/docs/reference/glossary/applications.md
new file mode 100644
index 0000000000..7719f0a1fc
--- /dev/null
+++ b/content/ko/docs/reference/glossary/applications.md
@@ -0,0 +1,13 @@
+---
+title: 애플리케이션(Applications)
+id: appplications
+date: 2019-05-12
+full_link:
+short_description: >
+ 컨테이너화된 다양한 애플리케이션들이 실행되는 레이어.
+
+aka:
+tags:
+- fundamental
+---
+ 컨테이너화된 다양한 애플리케이션들이 실행되는 레이어.
diff --git a/content/ko/docs/reference/glossary/cla.md b/content/ko/docs/reference/glossary/cla.md
new file mode 100644
index 0000000000..25b8efab4d
--- /dev/null
+++ b/content/ko/docs/reference/glossary/cla.md
@@ -0,0 +1,17 @@
+---
+title: CLA (컨트리뷰터 사용권 계약|Contributor License Agreement)
+id: cla
+date: 2018-04-12
+full_link: https://github.com/kubernetes/community/blob/master/CLA.md
+short_description: >
+ 컨트리뷰터가 기여한 것에 대한 사용권을 오픈 소스 프로젝트에 허락하는 계약 조건.
+
+aka:
+tags:
+- community
+---
+ {{< glossary_tooltip text="컨트리뷰터" term_id="contributor" >}}가 기여한 것에 대한 사용권을 오픈 소스 프로젝트에 허락하는 계약 조건.
+
+
+
+CLA는 기부된 자료 및 지적 재산권(IP)과 관련된 법적 분쟁을 해결하는 데 도움이 됩니다.
diff --git a/content/ko/docs/reference/glossary/cni.md b/content/ko/docs/reference/glossary/cni.md
new file mode 100644
index 0000000000..a88ac5277a
--- /dev/null
+++ b/content/ko/docs/reference/glossary/cni.md
@@ -0,0 +1,18 @@
+---
+title: 컨테이너 네트워크 인터페이스(Container network interface, CNI)
+id: cni
+date: 2018-05-25
+full_link: /docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#cni
+short_description: >
+ 컨테이너 네트워크 인터페이스(CNI) 플러그인은 appc/CNI 스팩을 따르는 네트워크 플러그인의 일종이다.
+
+
+aka:
+tags:
+- networking
+---
+ 컨테이너 네트워크 인터페이스(CNI) 플러그인은 appc/CNI 스팩을 따르는 네트워크 플러그인의 일종이다.
+
+
+* 쿠버네티스와 CNI에 대한 정보는 [여기](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#cni)를 참고한다.
+* 쿠버네티스와 CNI에 대한 정보는 ["네트워크 플러그인"](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#cni)에서 볼 수 있다.
diff --git a/content/ko/docs/reference/glossary/container-env-variables.md b/content/ko/docs/reference/glossary/container-env-variables.md
index 093fe822cf..dc12e65839 100755
--- a/content/ko/docs/reference/glossary/container-env-variables.md
+++ b/content/ko/docs/reference/glossary/container-env-variables.md
@@ -2,11 +2,11 @@
title: 컨테이너 환경 변수(Container Environment Variables)
id: container-env-variables
date: 2018-04-12
-full_link: /ko/docs/concepts/containers/container-environment-variables.md
+full_link: /ko/docs/concepts/containers/container-environment-variables/
short_description: >
컨테이너 환경 변수는 파드에서 동작 중인 컨테이너에 유용한 정보를 제공하기 위한 이름=값 쌍이다.
-aka:
+aka:
tags:
- fundamental
---
@@ -14,4 +14,4 @@ tags:
-컨테이너 환경 변수는 중요한 리소스에 대한 정보와 함께 실행 중인 컨테이너화 된 애플리케이션이 요구하는 정보를 해당 {{< glossary_tooltip text="컨테이너" term_id="container" >}}에 제공한다. 예를 들면, 파일 시스템 상세 정보, 컨테이너 스스로에 대한 정보, 서비스 엔드포인트와 같은 다른 클러스터 리소스에 대한 정보 등이 있다.
+컨테이너 환경 변수는 중요한 리소스에 대한 정보와 함께 실행 중인 컨테이너화 된 애플리케이션이 요구하는 정보를 해당 {{< glossary_tooltip text="컨테이너" term_id="container" >}}에 제공한다. 예를 들면, 파일 시스템 상세 정보, 컨테이너 스스로에 대한 정보, 서비스 엔드포인트와 같은 다른 클러스터 리소스에 대한 정보 등이 있다.
\ No newline at end of file
diff --git a/content/ko/docs/reference/glossary/container-runtime.md b/content/ko/docs/reference/glossary/container-runtime.md
new file mode 100644
index 0000000000..8a26ee8147
--- /dev/null
+++ b/content/ko/docs/reference/glossary/container-runtime.md
@@ -0,0 +1,21 @@
+---
+title: 컨테이너 런타임
+id: container-runtime
+date: 2019-06-05
+full_link: /docs/reference/generated/container-runtime
+short_description: >
+ 컨테이너 런타임은 컨테이너 실행을 담당하는 소프트웨어이다.
+
+aka:
+tags:
+- fundamental
+- workload
+---
+ 컨테이너 런타임은 컨테이너 실행을 담당하는 소프트웨어이다.
+
+
+
+쿠버네티스느 여러 컨테이너 런타임을 지원한다. [Docker](http://www.docker.com),
+[containerd](https://containerd.io), [cri-o](https://cri-o.io/),
+[rktlet](https://github.com/kubernetes-incubator/rktlet)과
+[Kubernetes CRI (컨테이너 런타임 인터페이스)](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md)를 구현한 모든 소프트웨어.
diff --git a/content/ko/docs/reference/glossary/contributor.md b/content/ko/docs/reference/glossary/contributor.md
new file mode 100644
index 0000000000..7a788e05e6
--- /dev/null
+++ b/content/ko/docs/reference/glossary/contributor.md
@@ -0,0 +1,17 @@
+---
+title: 컨트리뷰터(Contributor)
+id: contributor
+date: 2018-04-12
+full_link:
+short_description: >
+ 쿠버네티스 프로젝트 또는 커뮤니티를 돕기 위해 코드, 문서 또는 시간을 기부하는 사람.
+
+aka:
+tags:
+- community
+---
+ 쿠버네티스 프로젝트 또는 커뮤니티를 돕기 위해 코드, 문서 또는 시간을 기부하는 사람.
+
+
+
+기여에는 풀 리퀘스트(PR), 이슈, 피드백, {{< glossary_tooltip text="분과회(special interest groups)" term_id="sig" >}} 참여, 또는 커뮤니티 행사 조직이 포함됩니다.
diff --git a/content/ko/docs/reference/glossary/control-plane.md b/content/ko/docs/reference/glossary/control-plane.md
new file mode 100644
index 0000000000..4cf2abbf5a
--- /dev/null
+++ b/content/ko/docs/reference/glossary/control-plane.md
@@ -0,0 +1,13 @@
+---
+title: 컨트롤 플레인(Control Plane)
+id: control-plane
+date: 2019-05-12
+full_link:
+short_description: >
+ 컨테이너의 라이프사이클을 정의, 배포, 관리하기 위한 API와 인터페이스들을 노출하는 컨테이너 오케스트레이션 레이어.
+
+aka:
+tags:
+- fundamental
+---
+ 컨테이너의 라이프사이클을 정의, 배포, 관리하기 위한 API와 인터페이스들을 노출하는 컨테이너 오케스트레이션 레이어.
diff --git a/content/ko/docs/reference/glossary/cri.md b/content/ko/docs/reference/glossary/cri.md
new file mode 100644
index 0000000000..9146465685
--- /dev/null
+++ b/content/ko/docs/reference/glossary/cri.md
@@ -0,0 +1,18 @@
+---
+title: 컨테이너 런타임 인터페이스(Container runtime interface, CRI)
+id: cri
+date: 2019-03-07
+full_link: https://kubernetes.io/docs/concepts/overview/components/#container-runtime
+short_description: >
+ Kubelet과 컨테이너 런타임을 통합시키기 위한 API
+
+
+aka:
+tags:
+- fundamental
+---
+컨테이너 런타임 인터페이스(CRI)는 노드의 Kubelet과 컨테이너
+런타임을 통합시키기 위한 API이다.
+
+
+API와 스펙에 대한 정보는 [CRI](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md)를 참고한다.
diff --git a/content/ko/docs/reference/glossary/data-plane.md b/content/ko/docs/reference/glossary/data-plane.md
new file mode 100644
index 0000000000..30f4e4cb97
--- /dev/null
+++ b/content/ko/docs/reference/glossary/data-plane.md
@@ -0,0 +1,13 @@
+---
+title: 데이터 플레인(Data Plane)
+id: data-plane
+date: 2019-05-12
+full_link:
+short_description: >
+ 컨테이너가 실행되고 네트워크에 연결될 수 있게 CPU, 메모리, 네트워크, 스토리지와 같은 능력을 제공하는 레이어.
+
+aka:
+tags:
+- fundamental
+---
+ 컨테이너가 실행되고 네트워크에 연결될 수 있게 CPU, 메모리, 네트워크, 스토리지와 같은 능력을 제공하는 레이어.
diff --git a/content/ko/docs/reference/glossary/etcd.md b/content/ko/docs/reference/glossary/etcd.md
index 2521590b6d..ea5a38d015 100644
--- a/content/ko/docs/reference/glossary/etcd.md
+++ b/content/ko/docs/reference/glossary/etcd.md
@@ -13,7 +13,10 @@ tags:
---
모든 클러스터 데이터를 담는 쿠버네티스 뒷단의 저장소로 사용되는 일관성·고가용성 키-값 저장소.
-
+
-쿠버네티스 클러스터 정보를 담고 있는 etcd 데이터에 대한 백업 계획은 필수이다. etcd에 대한 자세한 정보는, [etcd 문서](https://github.com/coreos/etcd/blob/master/Documentation/docs.md)를 참고한다.
+쿠버네티스 클러스터에서 etcd를 뒷단의 저장소로 사용한다면,
+이 데이터를 [백업](/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster)하는 계획은
+필수이다.
+etcd에 대한 자세한 정보는, [etcd 문서](https://github.com/coreos/etcd/blob/master/Documentation/docs.md)를 참고한다.
diff --git a/content/ko/docs/reference/glossary/ingress.md b/content/ko/docs/reference/glossary/ingress.md
new file mode 100755
index 0000000000..fc6189e975
--- /dev/null
+++ b/content/ko/docs/reference/glossary/ingress.md
@@ -0,0 +1,20 @@
+---
+title: 인그레스(Ingress)
+id: ingress
+date: 2018-04-12
+full_link: /docs/concepts/services-networking/ingress/
+short_description: >
+ 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함.
+
+aka:
+tags:
+- networking
+- architecture
+- extension
+---
+ 클러스터 내의 서비스에 대한 외부 접근을 관리하는 API 오브젝트이며, 일반적으로 HTTP를 관리함.
+
+
+
+인그레스는 부하 분산, SSL 종료, 명칭 기반의 가상 호스팅을 제공할 수 있다.
+
diff --git a/content/ko/docs/reference/glossary/istio.md b/content/ko/docs/reference/glossary/istio.md
new file mode 100755
index 0000000000..d55989456e
--- /dev/null
+++ b/content/ko/docs/reference/glossary/istio.md
@@ -0,0 +1,20 @@
+---
+title: Istio
+id: istio
+date: 2018-04-12
+full_link: https://istio.io/docs/concepts/what-is-istio/overview.html
+short_description: >
+ 마이크로서비스의 통합을 위한 통일된 방법을 제공하는 오픈 플랫폼(쿠버네티스에 특정적이지 않음)이며, 트래픽 흐름을 관리하고, 정책을 시행하고, 텔레메트리 데이터를 모은다.
+
+aka:
+tags:
+- networking
+- architecture
+- extension
+---
+ 마이크로서비스의 통합을 위한 통일된 방법을 제공하는 오픈 플랫폼(쿠버네티스에 특정적이지 않음)이며, 트래픽 흐름을 관리하고, 정책을 시행하고, 텔레메트리 데이터를 모은다.
+
+
+
+Istio를 추가하는 것은 애플리케이션 코드 변경을 요구하지 않는다. 그것은 서비스와 네트워크 사이의 인프라스트럭쳐 레이어이다. 이는 서비스 디플로이먼트와 조합되었을 때, 일반적으로 서비스 메시라고 일컫는다. Istio의 컨트롤 플레인은 쿠버네티스, Mesosphere 등과 같은 하부의 클러스터 관리 플랫폼을 추상화한다.
+
diff --git a/content/ko/docs/reference/glossary/kube-proxy.md b/content/ko/docs/reference/glossary/kube-proxy.md
index 22f55677ae..5f8a4fc612 100755
--- a/content/ko/docs/reference/glossary/kube-proxy.md
+++ b/content/ko/docs/reference/glossary/kube-proxy.md
@@ -6,14 +6,17 @@ full_link: /docs/reference/generated/kube-proxy
short_description: >
`kube-proxy`는 클러스터의 각 노드에서 실행되는 네트워크 프록시이다.
-aka:
+aka:
tags:
- fundamental
- core-object
---
`kube-proxy`는 클러스터의 각 노드에서 실행되는 네트워크 프록시이다.
-
+이는 호스트의 네트워크 규칙을 관리하고 접속 포워딩을 수행하여
+쿠버네티스 서비스 추상화를 가능케 한다.
+
+
`kube-proxy`는 요청에 대한 포워딩을 책임진다. `kube-proxy`는 TCP 및 UDP 스트림 포워딩을 허용하거나 TCP 및 UDP 포워딩을 백 엔드 기능 집합에 걸쳐 라운드 로빈을 제공한다.
diff --git a/content/ko/docs/reference/glossary/limitrange.md b/content/ko/docs/reference/glossary/limitrange.md
new file mode 100755
index 0000000000..5588e45449
--- /dev/null
+++ b/content/ko/docs/reference/glossary/limitrange.md
@@ -0,0 +1,23 @@
+---
+title: 범위 제한(LimitRange)
+id: limitrange
+date: 2019-04-15
+full_link: /docs/concepts/policy/limit-range/
+short_description: >
+ 네임스페이스 안의 컨테이너나 파드의 리소스 사용량을 제한하는 제약을 제공한다.
+
+aka:
+tags:
+- core-object
+- fundamental
+- architecture
+related:
+ - pod
+ - container
+
+---
+ 네임스페이스 안의 {{< glossary_tooltip text="컨테이너" term_id="container" >}}나 {{< glossary_tooltip text="파드" term_id="pod" >}}의 리소스 사용량을 제한하는 제약을 제공한다.
+
+
+범위 제한은 타입별로 만들 수 있는 객체의 수와
+네임스페이스 안의 개별 {{< glossary_tooltip text="컨테이너" term_id="container" >}}나 {{< glossary_tooltip text="파드" term_id="pod" >}}가 요청하거나 소비한 컴퓨팅 리소스의 양을 제한한다.
diff --git a/content/ko/docs/reference/glossary/logging.md b/content/ko/docs/reference/glossary/logging.md
new file mode 100644
index 0000000000..1f3cb251df
--- /dev/null
+++ b/content/ko/docs/reference/glossary/logging.md
@@ -0,0 +1,18 @@
+---
+title: 로깅(Logging)
+id: logging
+date: 2019-04-04
+full_link: /docs/concepts/cluster-administration/logging/
+short_description: >
+ 로그는 클러스터나 애플리케이션에 의해 로깅된 이벤트의 목록이다.
+
+aka:
+tags:
+- architecture
+- fundamental
+---
+로그는 {{< glossary_tooltip text="클러스터" term_id="cluster" >}}나 애플리케이션에 의해 로깅된 이벤트의 목록이다.
+
+
+
+애플리케이션과 시스템 로그는 클러스터 내부에서 어떤 일이 벌어지고 있는지 이해하는데 도움을 준다. 특히 로그는 문제를 디버깅하거나 클러스터 활동을 모니터링할 때 유용하다.
diff --git a/content/ko/docs/reference/glossary/minikube.md b/content/ko/docs/reference/glossary/minikube.md
index 205219f9a9..71ba64ef39 100755
--- a/content/ko/docs/reference/glossary/minikube.md
+++ b/content/ko/docs/reference/glossary/minikube.md
@@ -2,18 +2,20 @@
title: Minikube
id: minikube
date: 2018-04-12
-full_link: /docs/getting-started-guides/minikube/
+full_link: /docs/setup/learning-environment/minikube/
short_description: >
- 내부적으로 쿠버네티스를 실행하기 위한 도구.
+ 로컬에서 쿠버네티스를 실행하기 위한 도구.
-aka:
+aka:
tags:
- fundamental
- tool
---
- 내부적으로 쿠버네티스를 실행하기 위한 도구.
+ 로컬에서 쿠버네티스를 실행하기 위한 도구.
-
+
Minikube는 VM이나 사용자 컴퓨터에서 단일 노드 클러스터를 실행한다.
+Minikube를 사용하여
+[학습 환경에서 쿠버네티스 시도하기](/docs/setup/learning-environment/)를 할 수 있다.
diff --git a/content/ko/docs/reference/glossary/mirror-pod.md b/content/ko/docs/reference/glossary/mirror-pod.md
new file mode 100755
index 0000000000..d3b610db28
--- /dev/null
+++ b/content/ko/docs/reference/glossary/mirror-pod.md
@@ -0,0 +1,21 @@
+---
+title: 미러 파드(Mirror Pod)
+id: mirror-pod
+date: 2091-02-12
+full_link:
+short_description: >
+ Kubelet의 스태틱 파드(Static Pod)를 추적하는 API 서버 내부의 객체.
+
+aka:
+tags:
+- fundamental
+---
+ Kubelet이 {{< glossary_tooltip text="스태틱 파드" term_id="static-pod" >}}를
+ 표현하는 {{< glossary_tooltip text="파드" term_id="pod" >}} 객체
+
+
+Kubelet이 설정에서 스태틱 파드를 찾으면, 자동으로 쿠버네티스
+API 서버에 파드 객체 생성을 시도한다. 이렇게 생성된 파드를
+API 서버에서 확인할 수는 있지만, API 서버를 통해 제어할 수는 없다.
+
+(예를 들어, 미러 파드를 제거하더라도 kubelet 데몬이 해당 파드를 멈추지 않는다.)
diff --git a/content/ko/docs/reference/glossary/network-policy.md b/content/ko/docs/reference/glossary/network-policy.md
new file mode 100755
index 0000000000..7e1a752733
--- /dev/null
+++ b/content/ko/docs/reference/glossary/network-policy.md
@@ -0,0 +1,20 @@
+---
+title: 네트워크 폴리시(Network Policy)
+id: network-policy
+date: 2018-04-12
+full_link: /docs/concepts/services-networking/network-policies/
+short_description: >
+ 파드 그룹들이 서로에 대한 그리고 다른 네트워크 엔드포인트에 대한 통신이 어떻게 허용되는지에 대한 명세이다.
+
+aka:
+tags:
+- networking
+- architecture
+- extension
+---
+ 파드 그룹들이 서로에 대한 그리고 다른 네트워크 엔드포인트에 대한 통신이 어떻게 허용되는지에 대한 명세이다.
+
+
+
+네트워크 폴리시는 어떤 파드들의 연결을 서로 허용할지, 어떤 네임스페이스가 통신 가능하도록 허용할지, 더 상세하게는 어떤 포트 번호에 각 정책을 시행할지도 선언적으로 구성할 수 있게 도와준다. `NetworkPolicy` 리소스는 파드를 선택하고 선택된 파드에 어떤 트래픽을 허용할지 명시하는 규칙을 정의하기 위해서 레이블을 사용한다. 네트워크 폴리시는 네트워크 프로바이더에 의해 제공되는 네트워크 플러그인 지원에 의해 구현된다. 네트워크 리소스를 그것을 구현하는 컨트롤러 없이 생성하는 것은 아무런 효과가 없음을 주의하기 바란다.
+
diff --git a/content/ko/docs/reference/glossary/node.md b/content/ko/docs/reference/glossary/node.md
index 2fafe15d07..b92bd5468e 100755
--- a/content/ko/docs/reference/glossary/node.md
+++ b/content/ko/docs/reference/glossary/node.md
@@ -4,15 +4,14 @@ id: node
date: 2018-04-12
full_link: /docs/concepts/architecture/nodes/
short_description: >
- 노드는 쿠버네티스의 워커 머신이다.
+ 노드는 쿠버네티스의 작업 장비(worker machine)이다.
-aka:
+aka:
tags:
- fundamental
---
- 노드는 쿠버네티스의 워커 머신이다.
+ 노드는 쿠버네티스의 작업 장비(worker machine)이다.
-
-
-워커 머신은 클러스터에 따라 VM이거나 물리 머신일 것이다. 그것은 실행해야 하는 {{< glossary_tooltip text="서비스" term_id="service" >}}와 {{< glossary_tooltip text="파드" term_id="pod" >}}를 가지고 있으며, 마스터 컴포넌트에 의해서 관리된다. 노드에 있는 {{< glossary_tooltip text="서비스" term_id="service" >}}는 Docker, kubelet, kube-proxy를 포함한다.
+
+작업 노드는 클러스터에 따라 VM이거나 물리 머신일 것이다. {{< glossary_tooltip text="파드" term_id="pod" >}} 실행에 필요한 로컬 데몬과 서비스를 가지고 있으며, 콘트롤 플레인에 의해서 관리된다. 노드에 있는 데몬은 {{< glossary_tooltip text="kubelet" term_id="kubelet" >}}, {{< glossary_tooltip text="kube-proxy" term_id="kube-proxy" >}}와 {{< glossary_tooltip term_id="docker" >}} 같이 컨테이너 런타임을 구현한 {{< glossary_tooltip text="CRI" term_id="cri" >}}를 포함한다.
diff --git a/content/ko/docs/reference/glossary/qos-class.md b/content/ko/docs/reference/glossary/qos-class.md
new file mode 100755
index 0000000000..c1c7450d91
--- /dev/null
+++ b/content/ko/docs/reference/glossary/qos-class.md
@@ -0,0 +1,22 @@
+---
+title: QoS 클래스(QoS Class)
+id: qos-class
+date: 2019-04-15
+full_link:
+short_description: >
+ QoS 클래스(서비스 품질 클래스)는 쿠버네티스가 클러스터 안의 파드들을 여러 클래스로 구분하고, 스케줄링과 축출(eviction)에 대한 결정을 내리는 방법을 제공한다.
+
+aka:
+tags:
+- core-object
+- fundamental
+- architecture
+related:
+- pod
+
+---
+ QoS 클래스(서비스 품질 클래스)는 쿠버네티스가 클러스터 안의 파드들을 여러 클래스로 구분하고, 스케줄링과 축출(eviction)에 대한 결정을 내리는 방법을 제공한다.
+
+
+파드의 QoS 클래스는 생성 시점의 컴퓨팅 리소스 요청량과 제한 값에 기반해서 설정된다. QoS 클래스는 파드의 스케줄링과 축출을 위한 결정을 내릴 때 사용된다.
+쿠버네티스는 파드에 `Guaranteed`, `Burstable` 또는 `BestEffort` 중 하나를 QoS 클래스로 할당할 수 있다.
diff --git a/content/ko/docs/reference/glossary/service.md b/content/ko/docs/reference/glossary/service.md
index 3034640c5a..65a0d17787 100755
--- a/content/ko/docs/reference/glossary/service.md
+++ b/content/ko/docs/reference/glossary/service.md
@@ -4,16 +4,15 @@ id: service
date: 2018-04-12
full_link: /docs/concepts/services-networking/service/
short_description: >
- 파드의 집합과 같은 애플리케이션에 엑세스하는 방법을 기술하는 API 오브젝트이며, 포트와 로드밸런서를 기술할 수 있다.
+ 네트워크 서비스로 파드 집합에서 실행 중인 애플리케이션을 노출하는 방법
aka:
tags:
- fundamental
- core-object
---
- {{< glossary_tooltip text="파드" term_id="pod" >}}의 집합과 같은 애플리케이션에 엑세스하는 방법을 기술하는 API 오브젝트이며, 포트와 로드밸런서를 기술할 수 있다.
+{{< glossary_tooltip text="파드" term_id="pod" >}} 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법
-
-
-엑세스 포인트는 클러스터의 내부이거나 외부일 수 있다.
+
+서비스의 대상이 되는 파드 집합은 (보통) {{< glossary_tooltip text="셀렉터" term_id="selector" >}}로 결정된다. 많은 파드가 추가되거나 제거되면, 셀렉터와 일치하는 파드의 집합도 변경된다. 서비스는 네트워크 트래픽을 현재 워크로드를 위한 파드 집합으로 보낼 수 있는지 확인한다.
diff --git a/content/ko/docs/reference/glossary/static-pod.md b/content/ko/docs/reference/glossary/static-pod.md
new file mode 100755
index 0000000000..91d5d2794c
--- /dev/null
+++ b/content/ko/docs/reference/glossary/static-pod.md
@@ -0,0 +1,14 @@
+---
+title: 스태틱 파드(Static Pod)
+id: static-pod
+date: 2091-02-12
+full_link: /docs/tasks/administer-cluster/static-pod/
+short_description: >
+ 특정 노드의 kubelet 데몬이 직접 관리하는 파드
+
+aka:
+tags:
+- fundamental
+---
+ API 서버가 관찰하지 않고, 특정 노드의 kubelet 데몬이
+ 직접 관리하는 {{< glossary_tooltip text="파드" term_id="pod" >}}.
diff --git a/content/ko/docs/reference/kubectl/cheatsheet.md b/content/ko/docs/reference/kubectl/cheatsheet.md
index ed0158e3a5..cfc244dc1f 100644
--- a/content/ko/docs/reference/kubectl/cheatsheet.md
+++ b/content/ko/docs/reference/kubectl/cheatsheet.md
@@ -6,11 +6,6 @@ card:
weight: 30
---
-
-
-
-
-
{{% capture overview %}}
참고 항목: [Kubectl 개요](/docs/reference/kubectl/overview/)와 [JsonPath 가이드](/docs/reference/kubectl/jsonpath).
@@ -160,7 +155,7 @@ kubectl get services --sort-by=.metadata.name # Name으로 정렬된 서비스
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'
# app=cassandra 레이블을 가진 모든 파드의 레이블 버전 조회
-kubectl get pods --selector=app=cassandra rc -o \
+kubectl get pods --selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'
# 모든 워커 노드 조회 (셀렉터를 사용하여 'node-role.kubernetes.io/master'
@@ -182,6 +177,9 @@ echo $(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name
# 마찬가지로 "jq"를 사용
for item in $( kubectl get pod --output=name); do printf "Labels for %s\n" "$item" | grep --color -E '[^/]+$' && kubectl get "$item" --output=json | jq -r -S '.metadata.labels | to_entries | .[] | " \(.key)=\(.value)"' 2>/dev/null; printf "\n"; done
+# 혹은 이 명령어를 파드와 연관된 모든 레이블을 조회하는데 사용할 수 있다.
+kubectl get pods --show-labels
+
# 어떤 노드가 준비됐는지 확인
JSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}' \
&& kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"
@@ -229,7 +227,7 @@ kubectl autoscale deployment foo --min=2 --max=10 # 디플로이
```bash
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}' # 노드를 부분적으로 업데이트
-# 컨테이너의 이미지를 업데이트. 병합(merge) 키이므로, spec.containers[*].name이 필요.
+# 컨테이너의 이미지를 업데이트. 병합(merge) 키이므로, spec.containers[*].name이 필요.
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'
# 위치 배열을 이용한 json 패치를 사용하여, 컨테이너의 이미지를 업데이트.
diff --git a/content/ko/docs/reference/tools.md b/content/ko/docs/reference/tools.md
new file mode 100644
index 0000000000..08cd066380
--- /dev/null
+++ b/content/ko/docs/reference/tools.md
@@ -0,0 +1,59 @@
+---
+
+
+title: 도구
+content_template: templates/concept
+---
+
+{{% capture overview %}}
+쿠버네티스는 쿠버네티스 시스템으로 작업하는 데 도움이되는 몇 가지 기본 제공 도구를 포함한다.
+{{% /capture %}}
+
+{{% capture body %}}
+## Kubectl
+
+[`kubectl`](/docs/tasks/tools/install-kubectl/)은 쿠버네티스를 위한 커맨드라인 툴이며, 쿠버네티스 클러스터 매니저을 제어한다.
+
+## Kubeadm
+
+[`kubeadm`](/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)은 물리적 환경, 클라우드 서버, 또는 가상머신 상에서 안전한 쿠버네티스를 쉽게 프로비저닝하기 위한 커맨드라인 툴이다(현재는 알파 상태).
+
+## Kubefed
+
+[`kubefed`](/docs/tasks/federation/set-up-cluster-federation-kubefed/)는 페더레이션 클러스터를
+관리하는데 도움이 되는 커맨드라인 툴이다.
+
+## Minikube
+
+[`minikube`](/ko/docs/tasks/tools/install-minikube/)는 개발과 테스팅 목적으로 하는
+단일 노드 쿠버네티스 클러스터를 로컬 워크스테이션에서
+쉽게 구동시키는 도구이다.
+
+## 대시보드
+
+[`대시보드`](/docs/tasks/access-application-cluster/web-ui-dashboard/), 는 쿠버네티스의 웹기반 유저 인터페이스이며 컨테이너화된 애플리케이션을 쿠버네티스 클러스터로 배포하고
+클러스터 및 클러스터 자원의 문제를 해결하며 관리할 수 있게 해준다.
+
+## Helm
+
+[`쿠버네티스 Helm`](https://github.com/kubernetes/helm)은 사전 구성된 쿠버네티스 리소스를 관리하기위한 도구이며
+또한 Helm의 쿠버네티스 차트라고도 한다.
+
+Helm의 용도
+
+* 쿠버네티스 차트로 배포된 인기있는 소프트웨어를 검색하고 사용
+* 쿠버네티스 차트로 나의 애플리케이션을 공유
+* 쿠버네티스 애플리케이션의 반복가능한 빌드 및 생성
+* 매니페스트 파일의 지능화된 관리
+* Helm 패키지의 릴리스 관리
+
+## Kompose
+
+[`Kompose`](https://github.com/kubernetes-incubator/kompose)는 도커 컴포즈 유저들이 쿠버네티스로 이동하는데 도움이 되는 도구이다.
+
+Kompose의 용도
+
+* 도커 컴포즈 파일을 쿠버네티스 오브젝트로 변환
+* 로컬 도커 개발 환경에서 나의 애플리케이션을 쿠버네티스를 통해 관리하도록 이전
+* V1 또는 V2 도커 컴포즈 `yaml` 파일 또는 [분산 애플리케이션 번들](https://docs.docker.com/compose/bundles/)을 변환
+{{% /capture %}}
diff --git a/content/ko/docs/setup/_index.md b/content/ko/docs/setup/_index.md
index 21a79f6775..a8693e3b58 100644
--- a/content/ko/docs/setup/_index.md
+++ b/content/ko/docs/setup/_index.md
@@ -1,76 +1,106 @@
---
no_issue: true
-title: 설치
+title: 시작하기
main_menu: true
-weight: 30
+weight: 20
content_template: templates/concept
+card:
+ name: setup
+ weight: 20
+ anchors:
+ - anchor: "#학습-환경"
+ title: 학습 환경
+ - anchor: "#운영-환경"
+ title: 운영 환경
---
{{% capture overview %}}
-니즈에 가장 적합한 솔루션 유형을 찾기 위해서는 이 페이지를 사용하길 바란다.
+본 섹션에서는 쿠버네티스를 구축하고 실행하는 여러가지 옵션을 다룬다.
-쿠버네티스를 어디에서 동작시킬지 결정하는 것은 가용한 자원과 요구되는 유연성의 정도에 의존적이다. 쿠버네티스는 랩톱부터, 클라우드 프로바이더의 VM, 베어메탈(bare metal) 서버로 이루어진 랙까지 거의 모든 곳에서 동작시킬 수 있다. 또한 단 하나의 명령어 실행으로 완전-관리되는(fully-managed) 클러스터를 설치할 수도 있고, 베어메탈 서버에 자신만의 맞춤형 클러스터를 만들 수도 있다.
+각각의 쿠버네티스 솔루션은 유지보수의 용이성, 보안, 제어, 가용 자원, 클러스터를 운영하고 관리하기 위해 필요한 전문성과 같은 제각각의 요구사항을 충족한다.
+
+쿠버네티스 클러스터를 로컬 머신에, 클라우드에, 온-프레미스 데이터센터에 배포할 수 있고, 아니면 매니지드 쿠버네티스 클러스터를 선택할 수도 있다. 넓은 범위의 클라우드 프로바이더에 걸치거나 베어 메탈 환경을 사용하는 커스텀 솔루션을 만들 수도 있다.
+
+더 간단하게 정리하면, 쿠버네티스 클러스터를 학습 환경과 운영 환경에 만들 수 있다.
{{% /capture %}}
{{% capture body %}}
-## 로컬 머신(Local-machine) 솔루션
+## 학습 환경
-로컬 머신 솔루션은 쿠버네티스를 시작하기에 쉬운 방법이다. 클라우드 자원(resource)과 한도(quota)에 대한 걱정 없이 쿠버네티스 클러스터를 생성하고 테스트할 수 있다.
+쿠버네티스를 배우고 있다면, 쿠버네티스 커뮤니티에서 지원하는 도구나, 로컬 머신에서 쿠버네티스를 설치하기 위한 생태계 내의 도구와 같은 도커 기반의 솔루션을 사용하자.
-다음과 같은 사항을 원한다면 로컬 솔루션을 선택해야 한다.
+{{< table caption="쿠버네티스를 배포하기 위해 커뮤니티와 생태계에서 지원하는 도구를 나열한 로컬 머신 솔루션 표." >}}
-* 쿠버네티스를 써 보거나 배우기 시작하려고 함
-* 내부적으로 클러스터를 개발하거나 테스트하려고 함
+|커뮤니티 |생태계 |
+| ------------ | -------- |
+| [Minikube](/docs/setup/learning-environment/minikube/) | [CDK on LXD](https://www.ubuntu.com/kubernetes/docs/install-local) |
+| [Kubeadm-dind](https://github.com/kubernetes-sigs/kubeadm-dind-cluster) | [Docker Desktop](https://www.docker.com/products/docker-desktop)|
+| [Kubernetes IN Docker](https://github.com/kubernetes-sigs/kind) | [Minishift](https://docs.okd.io/latest/minishift/)|
+| | [MicroK8s](https://microk8s.io/)|
+| | [IBM Cloud Private-CE (Community Edition)](https://github.com/IBM/deploy-ibm-cloud-private) |
+| | [IBM Cloud Private-CE (Community Edition) on Linux Containers](https://github.com/HSBawa/icp-ce-on-linux-containers)|
+| | [k3s](https://k3s.io)|
+| | [Ubuntu on LXD](/docs/getting-started-guides/ubuntu/)|
-[로컬 머신 솔루션](/docs/setup/pick-right-solution/#local-machine-solutions) 중 하나를 선택하길 바란다.
-## 호스트 된(Hosted) 솔루션
+## 운영 환경
-호스트 된 솔루션은 쿠버네티스 클러스터를 생성하고 유지 관리하는데 편리한 방법이다. 호스트가 사용자의 클러스터를 관리하고 운영하기 때문에 사용자는 관리와 운영에서 자유롭다.
+운영 환경을 위한 솔루션을 평가할 때에는, 쿠버네티스 클러스터 운영에 대한 어떤 측면(또는 _추상적인 개념_)을 스스로 관리하기를 원하는지, 제공자에게 넘기기를 원하는지 고려하자.
-다음의 경우 호스트 된 솔루션이 필요하다.
+몇 가지 가능한 쿠버네티스 클러스터의 추상적인 개념은 {{< glossary_tooltip text="애플리케이션" term_id="applications" >}}, {{< glossary_tooltip text="데이터 플레인" term_id="data-plane" >}}, {{< glossary_tooltip text="컨트롤 플레인" term_id="control-plane" >}}, {{< glossary_tooltip text="클러스터 인프라스트럭처" term_id="cluster-infrastructure" >}}, 및 {{< glossary_tooltip text="클러스터 운영" term_id="cluster-operations" >}}이다.
-* 완전히 관리된 솔루션을 원함
-* 사용자의 앱 또는 서비스를 개발에만 집중하고 싶음
-* 지정된 사이트 신뢰성 엔지니어링(SRE) 팀은 없지만 고가용성을 원함
-* 클러스터를 호스팅하고 모니터할 자원이 없음
+다음의 다이어그램은 쿠버네티스 클러스터에 대해 가능한 추상적인 개념을 나열하고, 각 추상적인 개념을 사용자 스스로 관리하는지 제공자에 의해 관리되는지를 보여준다.
-[호스트 된 솔루션](/docs/setup/pick-right-solution/#hosted-solutions) 중 하나를 선택하길 바란다.
+운영 환경 솔루션
-## 턴키(Turnkey) – 클라우드 솔루션
+{{< table caption="제공자와 솔루션을 나열한 운영 환경 솔루션 표." >}}
+다음 운영 환경 솔루션 표는 제공자와 솔루션을 나열한다.
-이와 같은 솔루션들은 쿠버네티스 클러스터를 단지 몇 가지 명령어로 생성하게 해준다. 솔루션들은 활발히 개발되며 활동적인 커뮤니티의 지원을 받는다. 또한 넓은 범위의 IaaS 클라우드 프로바이더들에 호스트 될 수 있음에도, 노력의 대가로 솔루션들은 더욱 더 큰 자유와 유연성을 제공한다.
-
-다음의 경우 턴키 클라우드 솔루션을 선택해야 한다.
-
-* 호스트 된 솔루션이 허용하는 것보다는 클러스터에 대한 더 높은 제어권을 원함
-* 운영에 대한 더 큰 소유권을 가지고 싶음
-
-[턴키 클라우드 솔루션](/docs/setup/pick-right-solution/#turnkey-cloud-solutions) 중 하나를 선택하길 바란다.
-
-## 턴키(Turnkey) – 온-프레미스(On-Premise) 솔루션
-
-이와 같은 솔루션들은 내부의, 안전한, 클라우드 네트워크에 쿠버네티스 클러스터를 단 몇 가지 명령어로 생성하게 해준다.
-
-다음의 경우 온-프레미스 턴키 솔루션을 선택해야 한다.
-
-* 프라이빗 클라우드 네트워크에 클러스터를 디플로이하길 원함
-* 지정된 사이트 신뢰성 엔지니어링(SRE) 팀을 보유함
-* 클러스터를 호스팅하고 모니터할 수 있는 자원을 보유함
-
-[온-프레미스 턴키 클라우드 솔루션](/docs/setup/pick-right-solution/#on-premises-turnkey-cloud-solutions) 중 하나를 선택하길 바란다.
-
-## 사용자 지정(Custom) 솔루션
-
-사용자 지정 솔루션들은 클러스터에 대해서 가장 큰 자유를 제공하지만, 그 대신 높은 전문성을 필요로 한다. 이 솔루션들은 서로 다른 운영체제들에 대해서 베어메탈부터 클라우드 프로바이더들까지의 지원을 포함한다.
-
-[사용자 지정 솔루션](/docs/setup/pick-right-solution/#custom-solutions) 중 하나를 선택하길 바란다.
+|제공자 | 매니지드 | 턴키 클라우드 | 온-프렘(on-prem) 데이터센터 | 커스텀 (클라우드) | 커스텀 (온-프레미스 VMs)| 커스텀 (베어 메탈) |
+| --------- | ------ | ------ | ------ | ------ | ------ | ----- |
+| [Agile Stacks](https://www.agilestacks.com/products/kubernetes)| | ✔ | ✔ | | |
+| [Alibaba Cloud](https://www.alibabacloud.com/product/kubernetes)| | ✔ | | | |
+| [Amazon](https://aws.amazon.com) | [Amazon EKS](https://aws.amazon.com/eks/) |[Amazon EC2](https://aws.amazon.com/ec2/) | | | |
+| [AppsCode](https://appscode.com/products/pharmer/) | ✔ | | | | |
+| [APPUiO](https://appuio.ch/) | ✔ | ✔ | ✔ | | | |
+| [CenturyLink Cloud](https://www.ctl.io/) | | ✔ | | | |
+| [Cisco Container Platform](https://cisco.com/go/containers) | | | ✔ | | |
+| [Cloud Foundry Container Runtime (CFCR)](https://docs-cfcr.cfapps.io/) | | | | ✔ |✔ |
+| [CloudStack](https://cloudstack.apache.org/) | | | | | ✔|
+| [Canonical](https://www.ubuntu.com/kubernetes/docs/quickstart) | | ✔ | | ✔ |✔ | ✔
+| [Containership](https://containership.io/containership-platform) | ✔ |✔ | | | |
+| [Digital Rebar](https://provision.readthedocs.io/en/tip/README.html) | | | | | | ✔
+| [DigitalOcean](https://www.digitalocean.com/products/kubernetes/) | ✔ | | | | |
+| [Docker Enterprise](https://www.docker.com/products/docker-enterprise) | |✔ | ✔ | | | ✔
+| [Fedora (멀티 노드)](https://kubernetes.io/docs/getting-started-guides/fedora/flannel_multi_node_cluster/) | | | | | ✔ | ✔
+| [Fedora (단일 노드)](https://kubernetes.io/docs/getting-started-guides/fedora/fedora_manual_config/) | | | | | | ✔
+| [Gardner](https://gardener.cloud/) | |✔ | | ✔ | |
+| [Giant Swarm](https://giantswarm.io/) | ✔ | ✔ | ✔ | |
+| [Google](https://cloud.google.com/) | [Google Kubernetes Engine (GKE)](https://cloud.google.com/kubernetes-engine/) | [Google Compute Engine (GCE)](https://cloud.google.com/compute/)|[GKE On-Prem](https://cloud.google.com/gke-on-prem/) | | | | | | | |
+| [IBM](https://www.ibm.com/in-en/cloud) | [IBM Cloud Kubernetes Service](https://cloud.ibm.com/kubernetes/catalog/cluster)| |[IBM Cloud Private](https://www.ibm.com/in-en/cloud/private) | |
+| [Kontena Pharos](https://www.kontena.io/pharos/) | |✔| ✔ | | |
+| [Kubermatic](https://www.loodse.com/) | ✔ | ✔ | ✔ | | |
+| [KubeSail](https://kubesail.com/) | ✔ | | | | |
+| [Kubespray](https://kubespray.io/#/) | | | |✔ | ✔ | ✔ |
+| [Kublr](https://kublr.com/) |✔ | ✔ |✔ |✔ |✔ |✔ |
+| [Microsoft Azure](https://azure.microsoft.com) | [Azure Kubernetes Service (AKS)](https://azure.microsoft.com/en-us/services/kubernetes-service/) | | | | |
+| [Mirantis Cloud Platform](https://www.mirantis.com/software/kubernetes/) | | | ✔ | | |
+| [Nirmata](https://www.nirmata.com/) | | ✔ | ✔ | | |
+| [Nutanix](https://www.nutanix.com/en) | [Nutanix Karbon](https://www.nutanix.com/products/karbon) | [Nutanix Karbon](https://www.nutanix.com/products/karbon) | | | [Nutanix AHV](https://www.nutanix.com/products/acropolis/virtualization) |
+| [OpenShift](https://www.openshift.com) |[OpenShift Dedicated](https://www.openshift.com/products/dedicated/) and [OpenShift Online](https://www.openshift.com/products/online/) | | [OpenShift Container Platform](https://www.openshift.com/products/container-platform/) | | [OpenShift Container Platform](https://www.openshift.com/products/container-platform/) |[OpenShift Container Platform](https://www.openshift.com/products/container-platform/)
+| [Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE)](https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengoverview.htm) | ✔ | ✔ | | | |
+| [oVirt](https://www.ovirt.org/) | | | | | ✔ |
+| [Pivotal](https://pivotal.io/) | | [Enterprise Pivotal Container Service (PKS)](https://pivotal.io/platform/pivotal-container-service) | [Enterprise Pivotal Container Service (PKS)](https://pivotal.io/platform/pivotal-container-service) | | |
+| [Platform9](https://platform9.com/) | ✔ | ✔ | ✔ | | ✔ |✔
+| [Rancher](https://rancher.com/) | | [Rancher 2.x](https://rancher.com/docs/rancher/v2.x/en/) | | [Rancher Kubernetes Engine (RKE)](https://rancher.com/docs/rke/latest/en/) | | [k3s](https://k3s.io/)
+| [StackPoint](https://stackpoint.io/) | ✔ | ✔ | | | |
+| [Supergiant](https://supergiant.io/) | |✔ | | | |
+| [SUSE](https://www.suse.com/) | | ✔ | | | |
+| [SysEleven](https://www.syseleven.io/) | ✔ | | | | |
+| [VEXXHOST](https://vexxhost.com/) | ✔ | ✔ | | | |
+| [VMware](https://cloud.vmware.com/) | [VMware Cloud PKS](https://cloud.vmware.com/vmware-cloud-pks) |[VMware Enterprise PKS](https://cloud.vmware.com/vmware-enterprise-pks) | [VMware Enterprise PKS](https://cloud.vmware.com/vmware-enterprise-pks) | [VMware Essential PKS](https://cloud.vmware.com/vmware-essential-pks) | |[VMware Essential PKS](https://cloud.vmware.com/vmware-essential-pks)
{{% /capture %}}
-
-{{% capture whatsnext %}}
-완전한 솔루션 리스트를 확인하기 위해서는 [올바른 솔루션 선택하기](/docs/setup/pick-right-solution/)로 가길 바란다.
-{{% /capture %}}
diff --git a/content/ko/docs/setup/best-practices/_index.md b/content/ko/docs/setup/best-practices/_index.md
new file mode 100644
index 0000000000..844e41a352
--- /dev/null
+++ b/content/ko/docs/setup/best-practices/_index.md
@@ -0,0 +1,4 @@
+---
+title: 모범 사례
+weight: 40
+---
diff --git a/content/ko/docs/setup/certificates.md b/content/ko/docs/setup/best-practices/certificates.md
similarity index 88%
rename from content/ko/docs/setup/certificates.md
rename to content/ko/docs/setup/best-practices/certificates.md
index 7b9630c282..0d833c95d8 100644
--- a/content/ko/docs/setup/certificates.md
+++ b/content/ko/docs/setup/best-practices/certificates.md
@@ -1,6 +1,7 @@
---
title: PKI 인증서 및 요구 조건
content_template: templates/concept
+weight: 40
---
{{% capture overview %}}
@@ -84,15 +85,15 @@ etcd 역시 클라이언트와 피어 간에 상호 TLS 인증을 구현한다.
| 기본 CN | 권고되는 키 파일 경로 | 권고하는 인증서 파일 경로 | 명령어 | 키 파라미터 | 인증서 파라미터 |
|------------------------------|------------------------------|-----------------------------|----------------|------------------------------|-------------------------------------------|
-| etcd-ca | | etcd/ca.crt | kube-apiserver | | --etcd-cafile |
+| etcd-ca | etcd/ca.key | etcd/ca.crt | kube-apiserver | | --etcd-cafile |
| etcd-client | apiserver-etcd-client.key | apiserver-etcd-client.crt | kube-apiserver | --etcd-keyfile | --etcd-certfile |
-| kubernetes-ca | | ca.crt | kube-apiserver | | --client-ca-file |
+| kubernetes-ca | ca.key | ca.crt | kube-apiserver | | --client-ca-file |
| kube-apiserver | apiserver.key | apiserver.crt | kube-apiserver | --tls-private-key-file | --tls-cert-file |
-| apiserver-kubelet-client | | apiserver-kubelet-client.crt| kube-apiserver | | --kubelet-client-certificate |
-| front-proxy-ca | | front-proxy-ca.crt | kube-apiserver | | --requestheader-client-ca-file |
+| apiserver-kubelet-client | apiserver-kubelet-client.key | apiserver-kubelet-client.crt| kube-apiserver | | --kubelet-client-certificate |
+| front-proxy-ca | front-proxy-ca.key | front-proxy-ca.crt | kube-apiserver | | --requestheader-client-ca-file |
| front-proxy-client | front-proxy-client.key | front-proxy-client.crt | kube-apiserver | --proxy-client-key-file | --proxy-client-cert-file |
| | | | | | |
-| etcd-ca | | etcd/ca.crt | etcd | | --trusted-ca-file, --peer-trusted-ca-file |
+| etcd-ca | etcd/ca.key | etcd/ca.crt | etcd | | --trusted-ca-file, --peer-trusted-ca-file |
| kube-etcd | etcd/server.key | etcd/server.crt | etcd | --key-file | --cert-file |
| kube-etcd-peer | etcd/peer.key | etcd/peer.crt | etcd | --peer-key-file | --peer-cert-file |
| etcd-ca | | etcd/ca.crt | etcdctl[2] | | --cacert |
@@ -128,12 +129,12 @@ KUBECONFIG= kubectl config use-context default-system
이 파일들은 다음과 같이 사용된다.
-| 파일명 | 명령어 | 설명 |
+| 파일명 | 명령어 | 설명 |
|-------------------------|-------------------------|-----------------------------------------------------------------------|
-| admin.conf | kubectl | 클러스터 관리자를 설정한다. |
-| kubelet.conf | kubelet | 클러스터 각 노드를 위해 필요하다. |
+| admin.conf | kubectl | 클러스터 관리자를 설정한다. |
+| kubelet.conf | kubelet | 클러스터 각 노드를 위해 필요하다. |
| controller-manager.conf | kube-controller-manager | 반드시 매니페스트를 `manifests/kube-controller-manager.yaml`에 추가해야한다. |
-| scheduler.conf | kube-scheduler | 반드시 매니페스트를 `manifests/kube-scheduler.yaml`에 추가해야한다. |
+| scheduler.conf | kube-scheduler | 반드시 매니페스트를 `manifests/kube-scheduler.yaml`에 추가해야한다. |
[usage]: https://godoc.org/k8s.io/api/certificates/v1beta1#KeyUsage
[kubeadm]: /docs/reference/setup-tools/kubeadm/kubeadm/
diff --git a/content/ko/docs/setup/cluster-large.md b/content/ko/docs/setup/best-practices/cluster-large.md
similarity index 99%
rename from content/ko/docs/setup/cluster-large.md
rename to content/ko/docs/setup/best-practices/cluster-large.md
index 5463923ba2..d227f66662 100644
--- a/content/ko/docs/setup/cluster-large.md
+++ b/content/ko/docs/setup/best-practices/cluster-large.md
@@ -1,6 +1,6 @@
---
title: 대형 클러스터 구축
-weight: 80
+weight: 20
---
## 지원
diff --git a/content/ko/docs/setup/multiple-zones.md b/content/ko/docs/setup/best-practices/multiple-zones.md
similarity index 99%
rename from content/ko/docs/setup/multiple-zones.md
rename to content/ko/docs/setup/best-practices/multiple-zones.md
index 8b9804cc0e..d9ef519878 100644
--- a/content/ko/docs/setup/multiple-zones.md
+++ b/content/ko/docs/setup/best-practices/multiple-zones.md
@@ -1,6 +1,6 @@
---
title: 여러 영역에서 구동
-weight: 90
+weight: 10
content_template: templates/concept
---
diff --git a/content/ko/docs/setup/node-conformance.md b/content/ko/docs/setup/best-practices/node-conformance.md
similarity index 99%
rename from content/ko/docs/setup/node-conformance.md
rename to content/ko/docs/setup/best-practices/node-conformance.md
index 3af869d905..7e3e62dfa1 100644
--- a/content/ko/docs/setup/node-conformance.md
+++ b/content/ko/docs/setup/best-practices/node-conformance.md
@@ -1,5 +1,6 @@
---
title: 노드 구성 검증하기
+weight: 30
---
{{< toc >}}
diff --git a/content/ko/docs/setup/custom-cloud/_index.md b/content/ko/docs/setup/custom-cloud/_index.md
deleted file mode 100644
index 5ddaaf3f3f..0000000000
--- a/content/ko/docs/setup/custom-cloud/_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 사용자 지정 클라우드 솔루션
-weight: 50
----
diff --git a/content/ko/docs/setup/independent/_index.md b/content/ko/docs/setup/independent/_index.md
deleted file mode 100755
index e87c318721..0000000000
--- a/content/ko/docs/setup/independent/_index.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: "kubeadm으로 클러스터 부트스트래핑 하기"
-weight: 30
----
-
diff --git a/content/ko/docs/setup/learning-environment/_index.md b/content/ko/docs/setup/learning-environment/_index.md
new file mode 100644
index 0000000000..cd7005bf79
--- /dev/null
+++ b/content/ko/docs/setup/learning-environment/_index.md
@@ -0,0 +1,4 @@
+---
+title: 학습 환경
+weight: 20
+---
diff --git a/content/ko/docs/setup/minikube.md b/content/ko/docs/setup/learning-environment/minikube.md
similarity index 56%
rename from content/ko/docs/setup/minikube.md
rename to content/ko/docs/setup/learning-environment/minikube.md
index dc43fad420..510013d88c 100644
--- a/content/ko/docs/setup/minikube.md
+++ b/content/ko/docs/setup/learning-environment/minikube.md
@@ -1,11 +1,11 @@
---
-title: Minikube로 로컬 상에서 쿠버네티스 구동
-content_template: templates/concept
+title: Minikube로 쿠버네티스 설치
+content_template: templates/concept
---
{{% capture overview %}}
-Minikube는 쿠버네티스를 로컬에서 쉽게 실행하는 도구이다. Minikube는 매일 쿠버네티스를 사용하거나 개발하려는 사용자들을 위해 VM 이나 노트북에서 단일 노드 쿠버네티스 클러스터를 실행한다.
+Minikube는 쿠버네티스를 로컬에서 쉽게 실행하는 도구이다. Minikube는 매일 쿠버네티스를 사용하거나 개발하려는 사용자들을 위해 가상 머신(VM) 이나 노트북에서 단일 노드 쿠버네티스 클러스터를 실행한다.
{{% /capture %}}
@@ -13,14 +13,15 @@ Minikube는 쿠버네티스를 로컬에서 쉽게 실행하는 도구이다. Mi
## Minikube 특징
-* Minikube는 다음과 같은 쿠버네티스의 기능을 제공한다.
- * DNS
- * 노드 포트
- * 컨피그 맵과 시크릿
- * 대시보드
- * 컨테이너 런타임: Docker, [rkt](https://github.com/rkt/rkt), [CRI-O](https://github.com/kubernetes-incubator/cri-o) 와 [containerd](https://github.com/containerd/containerd)
- * CNI(Container Network Interface) 사용
- * 인그레스
+Minikube는 다음과 같은 쿠버네티스의 기능을 제공한다.
+
+* DNS
+* 노드 포트
+* 컨피그 맵과 시크릿
+* 대시보드
+* 컨테이너 런타임: Docker, [rkt](https://github.com/rkt/rkt), [CRI-O](https://github.com/kubernetes-incubator/cri-o) 와 [containerd](https://github.com/containerd/containerd)
+* CNI(Container Network Interface) 사용
+* 인그레스
## 설치
@@ -28,123 +29,183 @@ Minikube는 쿠버네티스를 로컬에서 쉽게 실행하는 도구이다. Mi
## 빠른 시작
-여기부터는 Minikube 사용에 대한 간단한 데모이다.
-VM 드라이버를 바꾸기 원하면 적절한 `--vm-driver=xxx` 플래그를 `minikube start`에 추가한다.
-Minikube는 다음의 드라이버를 지원한다.
+여기서 기술하는 간단한 데모는 어떻게 로컬에서 Minikube를 시작하고, 사용하고 삭제하는지를 안내한다. 다음의 주어진 단계를 따라서 Minikube를 시작하고 탐구한다.
+
+1. Minikube를 시작하고 클러스터를 생성
+ ```shell
+ minikube start
+ ```
+ 결과는 다음과 비슷하다.
+
+ ```
+ Starting local Kubernetes cluster...
+ Running pre-create checks...
+ Creating machine...
+ Starting local Kubernetes cluster...
+ ```
+ 특정 쿠버네티스 버전, VM, 컨테이너 런타임 상에서 클러스터를 시작하기 위한 보다 상세한 정보는 [클러스터 시작하기](#클러스터-시작하기)를 참조한다.
+
+2. 이제, kubectl을 통해서 클러스터와 상호작용할 수 있다. 보다 상세한 정보는 [클러스터와 상호 작용하기](#클러스터와-상호-작용하기)를 참조한다.
+
+ 단순한 HTTP 서버인 `echoserver` 이미지를 사용해서 쿠버네티스 디플로이먼트를 만들고 `--port`를 이용해서 8080 포트로 노출해보자.
+ ```shell
+ kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
+ ```
+ 결과는 다음과 비슷하다.
+ ```
+ deployment.apps/hello-minikube created
+ ```
+3. `hello-minikube` 디플로이먼트에 액세스하기 위해, 서비스로 노출시킨다.
+ ```shell
+ kubectl expose deployment hello-minikube --type=NodePort
+ ```
+ `--type=NodePort` 옵션은 서비스 타입을 지정한다.
+
+ 결과는 다음과 비슷하다.
+ ```
+ service/hello-minikube exposed
+ ```
+4. `hello-minikube` 파드가 이제 시작되었지만 노출된 서비스를 통해서 접근하기 전에 파드가 뜨기를 기다려야한다.
+
+ 파드가 떠서 구동되고 있는지 확인한다.
+ ```shell
+ kubectl get pod
+ ```
+ 출력에서 `STATUS`가 `ContainerCreating`으로 나타나는 경우, 파드는 아직 생성 중이다.
+ ```
+ NAME READY STATUS RESTARTS AGE
+ hello-minikube-3383150820-vctvh 0/1 ContainerCreating 0 3s
+ ```
+ 출력에서 `STATUS`가 `Running`으로 나타나는 경우, 파드는 이제 떠서 기동 중이다.
+ ```
+ NAME READY STATUS RESTARTS AGE
+ hello-minikube-3383150820-vctvh 1/1 Running 0 13s
+ ```
+5. 서비스 상세를 보기 위해서 노출된 서비스의 URL을 얻는다.
+ ```shell
+ minikube service hello-minikube --url
+ ```
+6. 로컬 클러스터의 상세를 보기위해서, 출력에서 얻은 URL을 브라우저에 복사해서 붙여 넣는다.
+
+ 출력은 다음과 비슷하다.
+ ```
+ Hostname: hello-minikube-7c77b68cff-8wdzq
+
+ Pod Information:
+ -no pod information available-
+
+ Server values:
+ server_version=nginx: 1.13.3 - lua: 10008
+
+ Request Information:
+ client_address=172.17.0.1
+ method=GET
+ real path=/
+ query=
+ request_version=1.1
+ request_scheme=http
+ request_uri=http://192.168.99.100:8080/
+
+ Request Headers:
+ accept=*/*
+ host=192.168.99.100:30674
+ user-agent=curl/7.47.0
+
+ Request Body:
+ -no body in request-
+ ```
+ 서비스나 클러스터가 더 이상 구동되지 않도록 하려면, 삭제한다.
+7. `hello-minikube` 서비스 삭제
+ ```shell
+ kubectl delete services hello-minikube
+ ```
+ 출력은 다음과 비슷하다.
+ ```
+ service "hello-minikube" deleted
+ ```
+8. `hello-minikube` 디플로이먼트 삭제
+ ```shell
+ kubectl delete deployment hello-minikube
+ ```
+ 출력은 다음과 비슷하다.
+ ```
+ deployment.extensions "hello-minikube" deleted
+ ```
+9. 로컬 Minikube 클러스터 중지
+ ```shell
+ minikube stop
+ ```
+ 출력은 다음과 비슷하다.
+ ```
+ Stopping "minikube"...
+ "minikube" stopped.
+ ```
+ 보다 상세한 정보는 [클러스터 중지하기](#클러스터-중지하기)를 참조한다.
+10. 로컬 Minikube 클러스터 삭제
+ ```shell
+ minikube delete
+ ```
+ 출력은 다음과 비슷하다.
+ ```
+ Deleting "minikube" ...
+ The "minikube" cluster has been deleted.
+ ```
+ 보다 상세한 정보는 [Deleting a cluster](#클러스터-삭제하기)를 참조한다.
+
+## 클러스터 관리하기
+
+### 클러스터 시작하기
+
+클러스터를 시작하기 위해서 `minikube start` 커멘드를 사용할 수 있다.
+이 커멘드는 단일 노드 쿠버네티스 클러스터를 구동하는 가상 머신을 생성하고 구성한다.
+이 커멘드는 또한 [kubectl](/docs/user-guide/kubectl-overview/)도 설정해서 클러스터와 통신할 수 있도록 한다.
+
+{{< note >}}
+웹 프록시 뒤에 있다면, `minikube start` 커맨드에 해당 정보를 전달해야 한다.
+
+```shell
+https_proxy= minikube start --docker-env http_proxy= --docker-env https_proxy= --docker-env no_proxy=192.168.99.0/24
+```
+불행하게도, 환경 변수 설정만으로는 되지 않는다.
+
+Minikube는 또한 "minikube" 컨텍스트를 생성하고 이를 kubectl의 기본값으로 설정한다.
+이 컨텍스트로 돌아오려면, 다음의 코멘드를 입력한다. `kubectl config use-context minikube`.
+{{< /note >}}
+
+#### 쿠버네티스 버전 지정하기
+
+`minikube start` 코멘드에 `--kubernetes-version` 문자열을
+추가해서 Minikube에서 사용할 쿠버네티스 버전을 지정할 수 있다.
+예를 들어 버전 {{< param "fullversion" >}}를 구동하려면, 다음과 같이 실행한다.
+
+```
+minikube start --kubernetes-version {{< param "fullversion" >}}
+```
+#### VM 드라이버 지정하기
+`minikube start` 코멘드에 `--vm-driver=` 플래그를 추가해서 VM 드라이버를 변경할 수 있다.
+코멘드를 예를 들면 다음과 같다.
+```shell
+minikube start --vm-driver=
+```
+ Minikube는 다음의 드라이버를 지원한다.
+ {{< note >}}
+ 지원되는 드라이버와 플러그인 설치 방법에 대한 보다 상세한 정보는 [드라이버](https://git.k8s.io/minikube/docs/drivers.md)를 참조한다.
+{{< /note >}}
* virtualbox
* vmwarefusion
-* kvm2 ([driver installation](https://git.k8s.io/minikube/docs/drivers.md#kvm2-driver))
-* hyperkit ([driver installation](https://git.k8s.io/minikube/docs/drivers.md#hyperkit-driver))
-* hyperv ([driver installation](https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#hyperv-driver))
-아래 나오는 IP주소는 동적이고 변할 수 있음을 알린다. 이는 `minikube ip` 명령으로 확인할 수 있다.
-* vmware ([driver installation](https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#vmware-unified-driver)) (VMware unified driver)
-* none (쿠버네티스 구성요소는 VM이 아닌 호스트상에서 동작한다. 이 드라이버를 사용하기 위해서는 Docker ([docker 설치](https://docs.docker.com/install/linux/docker-ce/ubuntu/))와 리눅스 환경)이 필요하다.
-
-```shell
-minikube start
-```
-```
-Starting local Kubernetes cluster...
-Running pre-create checks...
-Creating machine...
-Starting local Kubernetes cluster...
-```
-```shell
-kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
-```
-```
-deployment.apps/hello-minikube created
-```
-
-```shell
-kubectl expose deployment hello-minikube --type=NodePort
-```
-```
-service/hello-minikube exposed
-```
-
-에코 서버 파드를 실행했지만 노출된 서비스를 통해 curl 등의 접근하기 전에
-파드가 올라갈 때까지 기다려야 한다.
-파드가 실행 중인지 확인하기 위해 다음을 이용할 수 있다.
-
-```
-kubectl get pod
-```
-```
-NAME READY STATUS RESTARTS AGE
-hello-minikube-3383150820-vctvh 0/1 ContainerCreating 0 3s
-```
-
-이 파드는 ContainerCreating 상태임을 알 수 있다.
-kubectl get pod
-
-```
-NAME READY STATUS RESTARTS AGE
-hello-minikube-3383150820-vctvh 1/1 Running 0 13s
-```
-
-이제 파드가 Running 상태이므로 curl를 실행해 볼 수 있다.
-
-```
-curl $(minikube service hello-minikube --url)
-```
-```
-
-Hostname: hello-minikube-7c77b68cff-8wdzq
-
-Pod Information:
- -no pod information available-
-
-Server values:
- server_version=nginx: 1.13.3 - lua: 10008
-
-Request Information:
- client_address=172.17.0.1
- method=GET
- real path=/
- query=
- request_version=1.1
- request_scheme=http
- request_uri=http://192.168.99.100:8080/
-
-Request Headers:
- accept=*/*
- host=192.168.99.100:30674
- user-agent=curl/7.47.0
-
-Request Body:
- -no body in request-
-```
-
-```shell
-kubectl delete services hello-minikube
-```
-```
-service "hello-minikube" deleted
-```
-
-```shell
-kubectl delete deployment hello-minikube
-```
-```
-deployment.extensions "hello-minikube" deleted
-```
-
-```shell
-minikube stop
-```
-```
-Stopping local Kubernetes cluster...
-Stopping "minikube"...
-```
-
-### 다른 컨테이너 런타임
-
-#### containerd
+* kvm2 ([드라이버 설치](https://git.k8s.io/minikube/docs/drivers.md#kvm2-driver))
+* hyperkit ([드라이버 설치](https://git.k8s.io/minikube/docs/drivers.md#hyperkit-driver))
+* hyperv ([드라이버 설치](https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#hyperv-driver))
+다음 IP는 동적이며 변경할 수 있다. `minikube ip`로 알아낼 수 있다.
+* vmware ([드라이버 설치](https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#vmware-unified-driver)) (VMware unified driver)
+* none (쿠버네티스 컴포넌트를 VM이 아닌 호스트 상에서 구동한다. 이 드라이버를 사용하려면 도커와 리눅스 환경이 필요하다.([도커 설치](https://docs.docker.com/install/linux/docker-ce/ubuntu/)))
+#### 대안적인 컨테이너 런타임 상에서 클러스터 시작하기
+Minikube를 다음의 컨테이너 런타임에서 기동할 수 있다.
+{{< tabs name="container_runtimes" >}}
+{{% tab name="containerd" %}}
[containerd](https://github.com/containerd/containerd)를 컨테이너 런타임으로 사용하려면, 다음을 실행한다.
-
```bash
minikube start \
--network-plugin=cni \
@@ -164,9 +225,8 @@ minikube start \
--extra-config=kubelet.image-service-endpoint=unix:///run/containerd/containerd.sock \
--bootstrapper=kubeadm
```
-
-#### CRI-O
-
+{{% /tab %}}
+{{% tab name="CRI-O" %}}
[CRI-O](https://github.com/kubernetes-incubator/cri-o)를 컨테이너 런타임으로 사용하려면, 다음을 실행한다.
```bash
@@ -176,7 +236,6 @@ minikube start \
--container-runtime=cri-o \
--bootstrapper=kubeadm
```
-
혹은 확장 버전을 사용할 수 있다.
```bash
@@ -188,9 +247,8 @@ minikube start \
--extra-config=kubelet.image-service-endpoint=/var/run/crio.sock \
--bootstrapper=kubeadm
```
-
-#### rkt 컨테이너 엔진
-
+{{% /tab %}}
+{{% tab name="rkt container engine" %}}
[rkt](https://github.com/rkt/rkt)를 컨테이너 런타임으로 사용하려면, 다음을 실행한다.
```shell
@@ -199,37 +257,38 @@ minikube start \
--enable-default-cni \
--container-runtime=rkt
```
-
이것은 rkt와 Docker와 CNI 네트워킹을 포함하는 대안적인 Minikube ISO 이미지를 이용한다.
+{{% /tab %}}
+{{< /tabs >}}
-### 드라이버 플러그인
+#### Docker 데몬 재사용을 통한 로컬 이미지 사용하기
-지원하는 드라이버 상세 정보와 설치방법은 [드라이버](https://git.k8s.io/minikube/docs/drivers.md)를 살펴보자
-꼭 필요하다면 말이다.
+쿠버네티스 단일 VM을 사용하면 Minikube에 내장된 도커 데몬을 재사용하기에 매우 간편하다. 이 경우는 호스트 장비에 도커 레지스트리를 설치하고 이미지를 푸시할 필요가 없다. 또 로컬에서 빠르게 실행할 수 있는데 이는 Minikube와 동일한 도커 데몬 안에서 이미지를 빌드하기 때문이다.
-### Docker 데몬 재사용
+{{< note >}}
+Docker 이미지를 'latest'가 아닌 다른 태그로 태그했는지 확인하고 이미지를 풀링할 때에는 그 태그를 이용한다. 혹시 이미지 태그 버전을 지정하지 않았다면, 기본값은 `:latest`이고 이미지 풀링 정책은 `Always`가 가정하나, 만약 기본 Docker 레지스트리(보통 DockerHub)에 해당 Docker 이미지 버전이 없다면 `ErrImagePull`의 결과가 나타날 것이다.
+{{< /note >}}
-쿠버네티스 단일 VM을 사용하면 Minikube에 내장된 Docker 데몬을 재사용하기에 매우 간편하다. 이 경우는 호스트 장비에 Docker 레지스트리를 설치하고 이미지를 푸시할 필요가 없다. 또 로컬에서 빠르게 실행할 수 있는데 이는 Minikube와 동일한 Docker 데몬 안에서 이미지를 빌드하기 때문이다. Docker 이미지를 'latest'가 아닌 다른 태그로 태그했는지 확인하고 이미지를 풀링할 때에는 그 태그를 이용한다. 혹시 이미지 태그 버전을 지정하지 않았다면, 기본값은 `:latest`이고 이미지 풀링 정책은 `Always`가 가정하나, 만약 기본 Docker 레지스트리(보통 DockerHub)에 해당 Docker 이미지 버전이 없다면 `ErrImagePull`의 결과가 나타날 것이다.
-
-맥이나 리눅스 호스트의 Docker 데몬에서 이 작업이 가능하게 하려면 `docker-env command`를 쉘에서 사용해야 한다.
+맥이나 리눅스 호스트에서 해당 Docker 데몬을 사용하려면 `docker-env command`를 쉘에서 사용해야 한다.
```shell
eval $(minikube docker-env)
```
-맥이나 리눅스 호스트에서 Minikube VM안에 Docker 데몬과 통신하도록 Docker를 명령행에서 사용할 수 있어야 한다.
+이제 개인의 맥/리눅스 머신 내 커멘드 라인에서 도커를 사용해서 Minikube VM 안의 도커 데몬과 통신할 수 있다.
```shell
docker ps
```
+{{< note >}}
Centos 7 에서 Docker는 아래와 같은 오류를 발생한다.
-```shell
+```
Could not read CA certificate "/etc/docker/ca.pem": open /etc/docker/ca.pem: no such file or directory
```
-해결 방법은 /etc/sysconfig/docker를 Minikube의 환경 변화를 기대한 것대로 바꾸도록 업데이트하는 것이다.
+/etc/sysconfig/docker를 업데이트하고 Minikube의 환경에 변경이 반영되었는지 확인해서 고칠 수 있다.
```shell
< DOCKER_CERT_PATH=/etc/docker
@@ -238,39 +297,9 @@ Could not read CA certificate "/etc/docker/ca.pem": open /etc/docker/ca.pem: no
> DOCKER_CERT_PATH=/etc/docker
> fi
```
+{{< /note >}}
-imagePullPolicy:Always를 꺼야하는 것은 명심하자. 그렇지 않으면 쿠버네티스가 로컬에서 빌드한 이미지를 사용하지 않는다.
-
-## 클러스터 관리
-
-### 클러스터 시작
-
-`minikube start` 명령은 클러스터를 시작하는데 사용할 수 있다.
-이 명령은 단일 노드 쿠버네티스 클러스터를 실행하는 가상머신을 생성하고 구성한다.
-또한 클러스터와 통신하기 위해 [kubectl](/docs/user-guide/kubectl-overview/)를 구성한다.
-
-만약 웹 프록시를 사용 중이라면 `minikube start` 명령에서 이 정보를 포함해야 한다.
-
-```shell
-https_proxy= minikube start --docker-env http_proxy= --docker-env https_proxy= --docker-env no_proxy=192.168.99.0/24
-```
-
-불행히 환경 설정 변수만으로는 동작하지 않는다.
-
-Minikube는 또한 "minikube" 컨텍스트를 생성하고, kubectl의 기본값으로 설정한다.
-나중에 이 컨택스트를 변경하려면, `kubectl config use-context minikube` 명령을 실행하자.
-
-#### 쿠버네티스 버전 지정
-
-Minikube에서 사용할 쿠버네티스 버전은 `--kubernetes-version` 문자열을
-`minikube start` 명령에 추가하여 지정할 수 있다.
-예를 들어, `v1.7.3`을 이용한다면 아래처럼 할 수 있다.
-
-```
-minikube start --kubernetes-version v1.7.3
-```
-
-### 쿠버네티스 구성
+### 쿠버네티스 구성하기
Minikube는 사용자가 쿠버네티스 컴포넌트를 다양한 값으로 설정할 수 있도록 하는 '설정기' 기능이 있다.
이 기능을 사용하려면, `--extra-config` 플래그를 `minikube start` 명령어에 추가하여야 한다.
@@ -307,18 +336,18 @@ Minikube는 사용자가 쿠버네티스 컴포넌트를 다양한 값으로 설
`minikube delete` 명령은 클러스터를 삭제하는데 사용할 수 있다.
이 명령어는 Minikube 가상 머신을 종료하고 삭제한다. 어떤 데이터나 상태도 보존되지 않다.
-## 클러스터와 상호 작용
+## 클러스터와 상호 작용하기
### Kubectl
-`minikube start` 명령어는 Minikube로 부르는 "[kubectl 컨텍스트](/docs/reference/generated/kubectl/kubectl-commands/#-em-set-context-em-)" 를 생성한다.
+`minikube start` 명령어는 Minikube로 부르는 [kubectl 컨텍스트](/docs/reference/generated/kubectl/kubectl-commands/#-em-set-context-em-)를 생성한다.
이 컨텍스트는 Minikube 클러스터와 통신하는 설정을 포함한다.
Minikube는 이 컨텍스트를 자동적으로 기본으로 설정한다. 만약 미래에 이것을 바꾸고 싶다면
`kubectl config use-context minikube`을 실행하자.
-혹은 각 명령어를 `kubectl get pods --context=minikube`처럼 컨텍스트를 전달하십시오.
+혹은 `kubectl get pods --context=minikube`처럼 코멘드를 실행할때마다 매번 컨텍스트를 전달한다.
### 대시보드
@@ -400,7 +429,7 @@ Minikube와 함께 시작하려는 애드온을 `~/.minikube/addons` 디렉터
폴더 내부의 애드온은 Minikube VM으로 이동되어
Minikube가 시작하거나 재시작될 때에 함께 실행된다.
-## HTTP 프록시 환경에서 Minikube 사용
+## HTTP 프록시 환경에서 Minikube 사용하기
Minikube는 쿠버네티스와 Docker 데몬을 포함한 가상 머신을 생성한다.
쿠버네티스가 Docker를 이용하여 컨테이너를 스케쥴링 시도할 때에, Docker 데몬은 컨테이너 이미지를 풀링하기 위해 외부 네트워크를 이용해야 한다.
diff --git a/content/ko/docs/setup/production-environment/_index.md b/content/ko/docs/setup/production-environment/_index.md
new file mode 100644
index 0000000000..5296cfcaf2
--- /dev/null
+++ b/content/ko/docs/setup/production-environment/_index.md
@@ -0,0 +1,4 @@
+---
+title: 운영 환경
+weight: 30
+---
diff --git a/content/ko/docs/setup/cri.md b/content/ko/docs/setup/production-environment/container-runtimes.md
similarity index 97%
rename from content/ko/docs/setup/cri.md
rename to content/ko/docs/setup/production-environment/container-runtimes.md
index 11408b9562..74a9489426 100644
--- a/content/ko/docs/setup/cri.md
+++ b/content/ko/docs/setup/production-environment/container-runtimes.md
@@ -1,7 +1,7 @@
---
-title: CRI 설치
+title: 컨테이너 런타임
content_template: templates/concept
-weight: 100
+weight: 10
---
{{% capture overview %}}
{{< feature-state for_k8s_version="v1.6" state="stable" >}}
@@ -181,7 +181,7 @@ add-apt-repository ppa:projectatomic/ppa
apt-get update
# CRI-O 설치
-apt-get install cri-o-1.11
+apt-get install cri-o-1.13
{{< /tab >}}
{{< tab name="CentOS/RHEL 7.4+" codelang="bash" >}}
@@ -281,7 +281,7 @@ systemctl restart containerd
`systemd` cgroup driver를 사용하려면, `/etc/containerd/config.toml`의 `plugins.cri.systemd_cgroup = true`을 설정한다.
kubeadm을 사용하는 경우에도 마찬가지로, 수동으로
-[cgroup driver for kubelet](/docs/setup/independent/install-kubeadm/#configure-cgroup-driver-used-by-kubelet-on-master-node)을
+[cgroup driver for kubelet](/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#configure-cgroup-driver-used-by-kubelet-on-master-node)을
설정해준다.
## 다른 CRI 런타임: frakti
diff --git a/content/ko/docs/setup/on-premises-vm/_index.md b/content/ko/docs/setup/production-environment/on-premises-vm/_index.md
similarity index 76%
rename from content/ko/docs/setup/on-premises-vm/_index.md
rename to content/ko/docs/setup/production-environment/on-premises-vm/_index.md
index 92d67a957c..d9b92bea18 100644
--- a/content/ko/docs/setup/on-premises-vm/_index.md
+++ b/content/ko/docs/setup/production-environment/on-premises-vm/_index.md
@@ -1,4 +1,4 @@
---
title: 온-프레미스 VM
-weight: 60
+weight: 40
---
diff --git a/content/ko/docs/setup/production-environment/tools/_index.md b/content/ko/docs/setup/production-environment/tools/_index.md
new file mode 100644
index 0000000000..5beb1d5a9d
--- /dev/null
+++ b/content/ko/docs/setup/production-environment/tools/_index.md
@@ -0,0 +1,4 @@
+---
+title: Installing Kubernetes with deployment tools
+weight: 30
+---
diff --git a/content/ko/docs/setup/custom-cloud/kops.md b/content/ko/docs/setup/production-environment/tools/kops.md
similarity index 99%
rename from content/ko/docs/setup/custom-cloud/kops.md
rename to content/ko/docs/setup/production-environment/tools/kops.md
index f19e0488d6..50dad0c32e 100644
--- a/content/ko/docs/setup/custom-cloud/kops.md
+++ b/content/ko/docs/setup/production-environment/tools/kops.md
@@ -1,6 +1,7 @@
---
-title: Kops로 AWS에 쿠버네티스 설치하기
+title: Kops로 쿠버네티스 설치하기
content_template: templates/concept
+weight: 20
---
{{% capture overview %}}
diff --git a/content/ko/docs/setup/turnkey/_index.md b/content/ko/docs/setup/production-environment/turnkey/_index.md
similarity index 80%
rename from content/ko/docs/setup/turnkey/_index.md
rename to content/ko/docs/setup/production-environment/turnkey/_index.md
index 8abee4413c..652a2f3f63 100644
--- a/content/ko/docs/setup/turnkey/_index.md
+++ b/content/ko/docs/setup/production-environment/turnkey/_index.md
@@ -1,4 +1,4 @@
---
title: 턴키 클라우드 솔루션
-weight: 40
+weight: 30
---
diff --git a/content/ko/docs/setup/release/_index.md b/content/ko/docs/setup/release/_index.md
index 9ced1d7bee..fcef7a59ab 100755
--- a/content/ko/docs/setup/release/_index.md
+++ b/content/ko/docs/setup/release/_index.md
@@ -1,5 +1,5 @@
---
-title: "쿠버네티스 다운로드"
-weight: 20
+title: "릴리스 노트와 버전 차이 지원(skew)"
+weight: 10
---
diff --git a/content/ko/docs/setup/release/building-from-source.md b/content/ko/docs/setup/release/building-from-source.md
deleted file mode 100644
index d8b9af438f..0000000000
--- a/content/ko/docs/setup/release/building-from-source.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: 릴리스 빌드
-content_template: templates/concept
-card:
- name: download
- weight: 20
- title: 릴리스 빌드하기
----
-
-{{% capture overview %}}
-소스로부터 빌드하거나 이미 빌드된 릴리스를 다운받을 수 있다. 쿠버네티스를 자체를 개발할 계획이 없다면, [릴리스 노트](/docs/setup/release/notes/)에 있는 현재 릴리스 빌드 버전을 사용하는 것을 추천한다.
-
-쿠버네티스 소스 코드는 [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) 리포지토리에서 다운받을 수 있다.
-{{% /capture %}}
-
-{{% capture body %}}
-## 소스로부터 빌드
-
-소스 코드를 빌드만 하려면, 모든 빌드 과정이 Docker 컨테이너 안에서 실행되기 때문에 golang 환경을 구축할 필요가 없다.
-
-릴리스를 빌드하는 것은 간단하다.
-
-```shell
-git clone https://github.com/kubernetes/kubernetes.git
-cd kubernetes
-make release
-```
-
-릴리스 절차에 대한 더 자세한 설명은 kubernetes/kubernetes [`빌드`](http://releases.k8s.io/{{< param "githubbranch" >}}/build/) 디렉토리를 참조한다.
-{{% /capture %}}
diff --git a/content/ko/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md b/content/ko/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md
index 2cbc6f69bc..262588a6db 100644
--- a/content/ko/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md
+++ b/content/ko/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume.md
@@ -6,8 +6,8 @@ weight: 110
{{% capture overview %}}
-이 페이지는 동일한 파드(Pod)에서 실행 중인 두 개의 컨테이너 간에 통신할 때에, 어떻게 볼륨(Volume)을 이용하는지
-살펴본다.
+이 페이지에서는 동일한 파드(Pod)에서 실행 중인 두 개의 컨테이너 간에 통신할 때에, 어떻게 볼륨(Volume)을 이용하는지
+살펴본다. 컨테이너 간에 [프로세스 네임스페이스 공유하기](/docs/tasks/configure-pod-container/share-process-namespace/)를 통해 통신할 수 있는 방법을 참고하자.
{{% /capture %}}
@@ -135,11 +135,13 @@ Debian 컨테이너에서 nginx 웹 서버가 호스팅하는 문서의 루트
* [합성 컨테이너(composite container) 패턴](https://kubernetes.io/blog/2015/06/the-distributed-system-toolkit-patterns)에 관하여
더 공부한다.
-* [모듈 구조를 위한 컴포지트 컨테이너](http://www.slideshare.net/Docker/slideshare-burns)에 관하여
-공부한다.
+* [모듈 구조를 위한 합성 컨테이너 구조](http://www.slideshare.net/Docker/slideshare-burns)에 관하여
+더 공부한다.
-* [저장소로 볼륨을 사용하는 파드 구성 방법](/docs/tasks/configure-pod-container/configure-volume-storage/)을
-참고한다.
+* [파드에서 저장소로 볼룸을 사용하도록 구성하기](/docs/tasks/configure-pod-container/configure-volume-storage/)에 관하여
+확인한다.
+
+* [파드에서 컨테이너 간에 프로세스 네임스페이스를 공유하는 파드 구성하는 방법](/docs/tasks/configure-pod-container/share-process-namespace/)을 참고한다.
* [볼륨](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core)을 확인한다.
diff --git a/content/ko/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md b/content/ko/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md
new file mode 100644
index 0000000000..858385fbcf
--- /dev/null
+++ b/content/ko/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md
@@ -0,0 +1,379 @@
+---
+title: 다중 클러스터 접근 구성
+content_template: templates/task
+weight: 30
+card:
+ name: tasks
+ weight: 40
+---
+
+
+{{% capture overview %}}
+
+이 페이지에서는 구성 파일을 사용하여 다수의 클러스터에 접근할 수 있도록
+설정하는 방식을 보여준다. 클러스터, 사용자, 컨텍스트가 하나 이상의
+구성 파일에 정의된 다음 `kubectl config use-context` 커맨드를
+사용하여 클러스터를 빠르게 변경할 수 있다.
+
+{{< note >}}
+클러스터에 접근할 수 있도록 설정하는데 사용되는 파일은 종종 *kubeconfig file* 이라고
+불린다. 이는 구성 파일을 참조하는 일반적인 방식으로 `kubeconfig`라는 이름을 가진 파일이
+반드시 존재해야 한다는 것을 의미하는 것은 아니다.
+{{< /note >}}
+
+{{% /capture %}}
+
+{{% capture prerequisites %}}
+
+{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+
+{{% /capture %}}
+
+{{% capture steps %}}
+
+## 클러스터, 사용자, 컨텍스트 정의
+
+당신이 개발 작업을 위한 클러스터와 스크래치 작업을 위한 클러스터를 가지고 있다고 가정해보자.
+`development` 클러스터에서는 프런트 엔드 개발자들이 `frontend`라는 네임스페이스에서
+작업을 하고 있고, 스토리지 개발자들은 `storage`라는 네임스페이스에서 작업을 하고 있다.
+`scratch` 클러스터에서는 개발자들이 default 네임스페이스에서 개발하거나 필요에 따라 보조
+네임스페이스들을 생성하고 있다. development 클러스터에 접근하려면 인증서로 인증을 해야 하고,
+scratch 클러스터에 접근하려면 사용자네임과 패스워드로 인증을 해야 한다.
+
+`config-exercise`라는 디렉토리를 생성한다. `config-exercise` 디렉토리에
+다음 내용을 가진 `config-demo`라는 파일을 생성한다.
+
+```shell
+apiVersion: v1
+kind: Config
+preferences: {}
+
+clusters:
+- cluster:
+ name: development
+- cluster:
+ name: scratch
+
+users:
+- name: developer
+- name: experimenter
+
+contexts:
+- context:
+ name: dev-frontend
+- context:
+ name: dev-storage
+- context:
+ name: exp-scratch
+```
+
+구성 파일은 클러스터들, 사용자들, 컨텍스트들을 기술한다. `config-demo` 파일은 두 클러스터들과
+두 사용자들, 세 컨텍스트들을 기술하기 위한 프레임워크를 가진다.
+
+`config-exercise` 디렉토리로 이동한다. 그리고 다음 커맨드들을 실행하여 구성 파일에 클러스터의
+세부사항들을 추가한다.
+
+```shell
+kubectl config --kubeconfig=config-demo set-cluster development --server=https://1.2.3.4 --certificate-authority=fake-ca-file
+kubectl config --kubeconfig=config-demo set-cluster scratch --server=https://5.6.7.8 --insecure-skip-tls-verify
+```
+
+사용자의 세부사항들을 구성 파일에 추가한다.
+
+```shell
+kubectl config --kubeconfig=config-demo set-credentials developer --client-certificate=fake-cert-file --client-key=fake-key-seefile
+kubectl config --kubeconfig=config-demo set-credentials experimenter --username=exp --password=some-password
+```
+
+{{< note >}}
+`kubectl config unset users.`을 실행하여 사용자를 삭제할 수 있다.
+{{< /note >}}
+
+컨텍스트 세부사항들을 구성 파일에 추가한다.
+
+```shell
+kubectl config --kubeconfig=config-demo set-context dev-frontend --cluster=development --namespace=frontend --user=developer
+kubectl config --kubeconfig=config-demo set-context dev-storage --cluster=development --namespace=storage --user=developer
+kubectl config --kubeconfig=config-demo set-context exp-scratch --cluster=scratch --namespace=default --user=experimenter
+```
+
+`config-demo` 파일을 열어서 세부사항들이 추가되었는지 확인한다. `config-demo` 파일을 열어보는
+것 대신에 `config view` 커맨드를 사용할 수도 있다.
+
+```shell
+kubectl config --kubeconfig=config-demo view
+```
+
+두 클러스터, 두 사용자, 세 컨텍스트들이 출력 결과로 나온다.
+
+```shell
+apiVersion: v1
+clusters:
+- cluster:
+ certificate-authority: fake-ca-file
+ server: https://1.2.3.4
+ name: development
+- cluster:
+ insecure-skip-tls-verify: true
+ server: https://5.6.7.8
+ name: scratch
+contexts:
+- context:
+ cluster: development
+ namespace: frontend
+ user: developer
+ name: dev-frontend
+- context:
+ cluster: development
+ namespace: storage
+ user: developer
+ name: dev-storage
+- context:
+ cluster: scratch
+ namespace: default
+ user: experimenter
+ name: exp-scratch
+current-context: ""
+kind: Config
+preferences: {}
+users:
+- name: developer
+ user:
+ client-certificate: fake-cert-file
+ client-key: fake-key-file
+- name: experimenter
+ user:
+ password: some-password
+ username: exp
+```
+
+위 `fake-ca-file`, `fake-cert-file`, `fake-key-file`은 인증서 파일들의 실제 경로를 위한
+플레이스홀더(placeholder)이다.
+당신의 환경에 맞게 이들을 실제 인증서 경로로 변경해줘야 한다.
+
+만약 당신이 인증서 파일들의 경로 대신에 base64로 인코딩된 데이터를 여기에 사용하려고 한다면
+키에 `-data` 접미사를 추가해야 한다. 예를 들면 `certificate-authority-data`,
+`client-certificate-data`, `client-key-data` 같이 사용할 수 있다.
+
+컨텍스트는 세 가지(클러스터, 사용자, 네임스페이스) 요소들로 이뤄진다. 예를 들어
+`dev-frontend` 컨텍스트는 `development` 클러스터의 `frontend` 네임스페이스에 접근하는데
+`developer` 사용자 자격증명을 사용하라고 알려준다.
+
+현재 컨텍스트를 설정한다.
+
+```shell
+kubectl config --kubeconfig=config-demo use-context dev-frontend
+```
+
+이제 당신이 `kubectl` 커맨드를 입력할 때마다 `dev-frontend` 컨텍스트에 명시된 클러스터와
+네임스페이스 상에서 동작하게 될 것이다. 그리고 커맨드는 `dev-frontend` 컨텍스트 내에 명시된
+사용자 자격증명을 사용할 것이다.
+
+현재 컨텍스트에 관련된 구성 정보만을 보려면
+`--minify` 플래그를 사용한다.
+
+```shell
+kubectl config --kubeconfig=config-demo view --minify
+```
+
+`dev-frontend` 컨텍스트에 관련된 구성 정보가 출력 결과로 표시될 것이다.
+
+```shell
+apiVersion: v1
+clusters:
+- cluster:
+ certificate-authority: fake-ca-file
+ server: https://1.2.3.4
+ name: development
+contexts:
+- context:
+ cluster: development
+ namespace: frontend
+ user: developer
+ name: dev-frontend
+current-context: dev-frontend
+kind: Config
+preferences: {}
+users:
+- name: developer
+ user:
+ client-certificate: fake-cert-file
+ client-key: fake-key-file
+```
+
+이제 당신이 잠시 scratch 클러스터에서 작업하려고 한다고 가정해보자.
+
+현재 컨텍스트를 `exp-scratch`로 변경한다.
+
+```shell
+kubectl config --kubeconfig=config-demo use-context exp-scratch
+```
+
+이제 당신이 실행하는 모든 `kubectl` 커맨드는 `scratch` 클러스터의
+default 네임스페이스에 적용되며 `exp-scratch` 컨텍스트에 나열된
+사용자의 자격증명을 사용할 것이다.
+
+현재의 컨텍스트인 `exp-scratch`에 관련된 설정을 보자.
+
+```shell
+kubectl config --kubeconfig=config-demo view --minify
+```
+
+마지막으로 당신이 `development` 클러스터의 `storage` 네임스페이스에서
+잠시 작업을 하려고 한다고 가정해보자.
+
+현재 컨텍스트를 `dev-storage`로 변경한다.
+
+```shell
+kubectl config --kubeconfig=config-demo use-context dev-storage
+```
+
+현재 컨텍스트인 `dev-storage`에 관련된 설정을 보자.
+
+
+```shell
+kubectl config --kubeconfig=config-demo view --minify
+```
+
+## 두 번째 구성 파일 생성
+
+`config-exercise` 디렉토리에서 다음 내용으로 `config-demo-2`라는 파일을 생성한다.
+
+```shell
+apiVersion: v1
+kind: Config
+preferences: {}
+
+contexts:
+- context:
+ cluster: development
+ namespace: ramp
+ user: developer
+ name: dev-ramp-up
+```
+
+위 구성 파일은 `dev-ramp-up`이라는 신규 컨텍스트를 정의한다.
+
+## KUBECONFIG 환경 변수 설정
+
+`KUBECONFIG`라는 환경 변수를 가지고 있는지 확인해보자. 만약 가지고 있다면,
+이후에 복원할 수 있도록 `KUBECONFIG` 환경 변수의 현재 값을 저장한다.
+예:
+
+### Linux
+```shell
+export KUBECONFIG_SAVED=$KUBECONFIG
+```
+### Windows PowerShell
+```shell
+$Env:KUBECONFIG_SAVED=$ENV:KUBECONFIG
+```
+`KUBECONFIG` 환경 변수는 구성 파일들의 경로의 리스트이다. 이 리스트는
+Linux와 Mac에서는 콜론으로 구분되며 Windows에서는 세미콜론으로 구분된다.
+`KUBECONFIG` 환경 변수를 가지고 있다면, 리스트에 포함된 구성 파일들에
+익숙해지길 바란다.
+
+다음 예와 같이 임시로 `KUBECONFIG` 환경 변수에 두 개의 경로들을 덧붙여보자.
+
+### Linux
+```shell
+export KUBECONFIG=$KUBECONFIG:config-demo:config-demo-2
+```
+### Windows PowerShell
+```shell
+$Env:KUBECONFIG=("config-demo;config-demo-2")
+```
+
+`config-exercise` 디렉토리에서 다음 커맨드를 입력한다.
+
+```shell
+kubectl config view
+```
+
+당신의 `KUBECONFIG` 환경 변수에 나열된 모든 파일들이 합쳐진 정보가 출력 결과로
+표시될 것이다. 특히, 합쳐진 정보가 `config-demo-2` 파일의 `dev-ramp-up`
+컨텍스트와 `config-demo` 파일의 세 개의 컨텍스트들을
+가지고 있다는 것에 주목하길 바란다.
+
+```shell
+contexts:
+- context:
+ cluster: development
+ namespace: frontend
+ user: developer
+ name: dev-frontend
+- context:
+ cluster: development
+ namespace: ramp
+ user: developer
+ name: dev-ramp-up
+- context:
+ cluster: development
+ namespace: storage
+ user: developer
+ name: dev-storage
+- context:
+ cluster: scratch
+ namespace: default
+ user: experimenter
+ name: exp-scratch
+```
+
+kubeconfig 파일들을 어떻게 병합하는지에 대한 상세정보는
+[kubeconfig 파일을 사용하여 클러스터 접근 구성하기](/docs/concepts/configuration/organize-cluster-access-kubeconfig/)를 참조한다.
+
+## $HOME/.kube 디렉토리 탐색
+
+만약 당신이 이미 클러스터를 가지고 있고 `kubectl`을 사용하여
+해당 클러스터를 제어하고 있다면, 아마 `$HOME/.kube` 디렉토리에 `config`라는
+파일을 가지고 있을 것이다.
+
+`$HOME/.kube`로 가서 어떤 파일들이 존재하는지 보자.
+보통 `config`라는 파일이 존재할 것이다. 해당 디렉토리 내에는 다른 구성 파일들도 있을 수 있다.
+간단하게 말하자면 당신은 이 파일들의 컨텐츠에 익숙해져야 한다.
+
+## $HOME/.kube/config를 KUBECONFIG 환경 변수에 추가
+
+당신이 `$HOME/.kube/config` 파일을 가지고 있는데 `KUBECONFIG`
+환경 변수에 나타나지 않는다면 `KUBECONFIG` 환경 변수에 추가해보자.
+예:
+
+### Linux
+```shell
+export KUBECONFIG=$KUBECONFIG:$HOME/.kube/config
+```
+### Windows Powershell
+```shell
+ $Env:KUBECONFIG=($Env:KUBECONFIG;$HOME/.kube/config)
+```
+
+이제 `KUBECONFIG` 환경 변수에 리스트에 포함된 모든 파일들이 합쳐진 구성 정보를 보자.
+config-exercise 디렉토리에서 다음 커맨드를 실행한다.
+
+```shell
+kubectl config view
+```
+
+## 정리
+
+`KUBECONFIG` 환경 변수를 원래 값으로 되돌려 놓자. 예를 들면:
+Linux:
+```shell
+export KUBECONFIG=$KUBECONFIG_SAVED
+```
+Windows PowerShell
+```shell
+ $Env:KUBECONFIG=$ENV:KUBECONFIG_SAVED
+```
+
+{{% /capture %}}
+
+{{% capture whatsnext %}}
+
+* [kubeconfig 파일을 사용하여 클러스터 접근 구성하기](/docs/concepts/configuration/organize-cluster-access-kubeconfig/)
+* [kubectl config](/docs/reference/generated/kubectl/kubectl-commands/)
+
+{{% /capture %}}
+
+
+
diff --git a/content/ko/docs/tasks/administer-cluster/_index.md b/content/ko/docs/tasks/administer-cluster/_index.md
new file mode 100755
index 0000000000..77ca3f2479
--- /dev/null
+++ b/content/ko/docs/tasks/administer-cluster/_index.md
@@ -0,0 +1,5 @@
+---
+title: "클러스터 운영"
+weight: 20
+---
+
diff --git a/content/ko/docs/tasks/administer-cluster/cluster-management.md b/content/ko/docs/tasks/administer-cluster/cluster-management.md
new file mode 100644
index 0000000000..823e7c3116
--- /dev/null
+++ b/content/ko/docs/tasks/administer-cluster/cluster-management.md
@@ -0,0 +1,220 @@
+---
+title: 클러스터 관리
+content_template: templates/concept
+---
+
+{{% capture overview %}}
+
+이 문서는 클러스터의 라이프사이클에 관련된 몇 가지 주제들을 설명한다. 신규 클러스터 생성,
+클러스터의 마스터와 워커 노드들의 업그레이드,
+노드 유지보수(예. 커널 업그레이드) 수행, 운영 중인 클러스터의
+쿠버네티스 API 버전 업그레이드.
+
+{{% /capture %}}
+
+
+{{% capture body %}}
+
+## 클러스터 생성과 설정
+
+일련의 머신들에 쿠버네티스를 설치하려면, 환경에 맞게 기존의 [시작하기](/docs/setup/) 안내서들 중에 하나를 선택하여 참조한다.
+
+## 클러스터 업그레이드
+
+클러스터 업그레이드 상태의 현황은 제공자에 따라 달라지며, 몇몇 릴리스들은 업그레이드에 각별한 주의를 요하기도 한다. 관리자들에게는 클러스터 업그레이드에 앞서 [릴리스 노트](https://git.k8s.io/kubernetes/CHANGELOG.md)와 버전에 맞는 업그레이드 노트 모두를 검토하도록 권장하고 있다.
+
+### Azure Kubernetes Service (AKS) 클러스터 업그레이드
+
+Azure Kubernetes Service는 클러스터의 컨트롤 플레인과 노드를 손쉽게 셀프 서비스 업그레이드할 수 있게 해준다. 프로세스는
+현재 사용자가 직접 시작하는 방식이며 [Azure AKS 문서](https://docs.microsoft.com/en-us/azure/aks/upgrade-cluster)에 설명되어 있다.
+
+### Google Compute Engine 클러스터 업그레이드
+
+Google Compute Engine Open Source (GCE-OSS)는 마스터를 삭제하고
+재생성하는 방식으로 마스터 업그레이드를 지원한다. 하지만 업그레이드 간에 데이터를 보존하기 위해
+동일한 Persistent Disk(PD)를 유지한다.
+
+GCE의 노드 업그레이드는 [관리형 인스턴스 그룹](https://cloud.google.com/compute/docs/instance-groups/)을 사용하며, 각 노드는
+순차적으로 제거된 후에 신규 소프트웨어를 가지고 재생성된다. 해당 노드에서 동작하는 파드들은
+레플리케이션 컨트롤러에 의해서 제어되거나, 롤 아웃 후에 수작업으로 재생성되어야 한다.
+
+open source Google Compute Engine(GCE) 클러스터 업그레이드는 `cluster/gce/upgrade.sh` 스크립트로 제어한다.
+
+`cluster/gce/upgrade.sh -h`를 실행하여 사용법을 알아볼 수 있다.
+
+예를 들어, 마스터만 특정 버전(v1.0.2)로 업그레이드하려고 한다면 다음과 같이 커맨드를 사용한다.
+
+```shell
+cluster/gce/upgrade.sh -M v1.0.2
+```
+
+이 대신에, 전체 클러스터를 최신 안정 릴리스로 업그레이드하려고 한다면 다음과 같이 커맨드를 사용한다.
+
+```shell
+cluster/gce/upgrade.sh release/stable
+```
+
+### Google Kubernetes Engine 클러스터 업그레이드
+
+Google Kubernetes Engine은 자동으로 마스터 구성요소들(예. `kube-apiserver`, `kube-scheduler`)을 최신 버전으로 업데이트한다. 이는 운영체제와 마스터 상에서 동작하는 다른 구성요소들의 업그레이드를 처리하기도 한다.
+
+노드 업그레이드 프로세스는 사용자가 직접 시작하는 방식이며 [Google Kubernetes Engine 문서](https://cloud.google.com/kubernetes-engine/docs/clusters/upgrade)에 설명되어 있다.
+
+### Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) 클러스터 업그레이드
+
+Oracle은 당신이 고가용성의 관리형 쿠버네티스 컨트롤 플레인을 가질 수 있도록 사용자를 대신하여 Oracle 컨트롤 플레인 내에 마스터 노드들의 세트를 (그리고 etcd 노드들과 같은 관련 쿠버네티스 인프라스트럭처를) 생성하고 관리한다. 또한 이 마스터 노드들을 다운타임 없이 쿠버네티스 신규 버전으로 유연하게 업그레이드할 수도 있다. 이 기능들은 [OKE 문서](https://docs.cloud.oracle.com/iaas/Content/ContEng/Tasks/contengupgradingk8smasternode.htm)에 설명되어 있다.
+
+### 다른 플랫폼들의 클러스터 업그레이드
+
+다른 제공자들과 도구들은 업그레이드를 다른 방식으로 관리한다. 이들의 업그레이드를 위해서는 이들의 주요 문서를 참조하기를 권장한다.
+
+* [kops](https://github.com/kubernetes/kops)
+* [kubespray](https://github.com/kubernetes-incubator/kubespray)
+* [CoreOS Tectonic](https://coreos.com/tectonic/docs/latest/admin/upgrade.html)
+* [Digital Rebar](https://provision.readthedocs.io/en/tip/doc/content-packages/krib.html)
+* ...
+
+위 리스트에서 언급되지 않은 플랫폼의 클러스터 업그레이드는 [버전 차이 지원(skew)](/docs/setup/release/version-skew-policy/#supported-component-upgrade-order) 페이지 상의 구성요소 업그레이드 순서 부분을 확인해보는 것이 좋다.
+
+## 클러스터 크기 재조정
+
+[노드 자가 등록 모드](/docs/concepts/architecture/nodes/#self-registration-of-nodes)로 운영 중인 클러스터가 리소스가 부족하다면 쉽게 머신들을 더 추가할 수 있다. GCE나 Google Kubernetes Engine을 사용하고 있다면 노드들을 관리하는 인스턴스 그룹의 크기를 재조정하여 이를 수행할 수 있다.
+[Google Cloud 콘솔 페이지](https://console.developers.google.com)를 사용한다면 `Compute > Compute Engine > Instance groups > your group > Edit group`에서 인스턴스들의 숫자를 고쳐서 이를 수행할 수 있으며 gcloud CLI를 사용한다면 다음 커맨드를 사용하여 이를 수행할 수 있다.
+
+```shell
+gcloud compute instance-groups managed resize kubernetes-node-pool --size=42 --zone=$ZONE
+```
+
+인스턴스 그룹은 신규 머신들에 적절한 이미지를 넣고 시작하는 것을 관리하는 반면에 Kubelet은 자신의 노드를 API 서버에 등록하여 스케줄링할 수 있도록 해준다. 사용자가 인스턴스 그룹을 스케일 다운하면 시스템은 임의로 노드들을 선택하여 죽일 것이다.
+
+다른 환경에서는 사용자가 직접 머신을 구성하고 어떤 머신에서 API 서버가 동작하는지를 Kubelet에 알려줘야 할 수도 있다.
+
+### Azure Kubernetes Service (AKS) 클러스터 크기 재조정
+
+Azure Kubernetes Service는 사용자가 CLI나 Azure 포털에서 클러스터의 크기를 재조정할 수 있게 해주며 [Azure AKS 문서](https://docs.microsoft.com/en-us/azure/aks/scale-cluster)에서 이를 설명하고 있다.
+
+
+### 클러스터 오토스케일링
+
+GCE나 Google Kubernetes Engine을 사용한다면, 파드가 필요로하는 리소스를 기반으로 클러스터의 크기를 자동으로
+재조정하도록 클러스터를 구성할 수 있다.
+
+[컴퓨트 리소스](/docs/concepts/configuration/manage-compute-resources-container/)에 기술된 것처럼 사용자들은 파드에 얼마만큼의 CPU와 메모리를 할당할 것인지 예약할 수 있다.
+이 정보는 쿠버네티스 스케줄러가 해당 파드를 어디에서 실행시킬 것인지를 결정할 때 사용된다.
+여유 용량이 넉넉한 노드가 없다면 (또는 다른 파드 요구조건을 충족하지 못한다면) 해당 파드는
+다른 파드들이 종료될 때까지 기다리거나 신규 노드가 추가될 때까지 기다린다.
+
+Cluster autoscaler는 스케줄링될 수 없는 파드들을 검색하여 클러스터 내의 다른 노드들과 유사한 신규 노드를
+추가하는 것이 도움이 되는지를 체크한다. 만약 도움이 된다면 대기중인 파드들을 수용하기 위해 클러스터의 크기를 재조정한다.
+
+Cluster autoscaler는 또한 하나 이상의 노드들이 장기간(10분, 하지만 미래에는 변경될 수 있다.)동안
+더 이상 필요하지 않다는 것을 확인했을 때 클러스터를 스케일 다운하기도 한다.
+
+Cluster autoscaler는 인스턴스 그룹(GCE)이나 노드 풀(Google Kubernetes Engine) 단위로 구성된다.
+
+GCE를 사용한다면 kube-up.sh 스크립트로 클러스터를 생성할 때 Cluster autoscaler를 활성화할 수 있다.
+cluster autoscaler를 구성하려면 다음 세 가지 환경 변수들을 설정해야 한다.
+
+* `KUBE_ENABLE_CLUSTER_AUTOSCALER` - true로 설정되면 cluster autoscaler를 활성화한다.
+* `KUBE_AUTOSCALER_MIN_NODES` - 클러스터 노드들의 최소 개수.
+* `KUBE_AUTOSCALER_MAX_NODES` - 클러스터 노드들의 최대 개수.
+
+예제:
+
+```shell
+KUBE_ENABLE_CLUSTER_AUTOSCALER=true KUBE_AUTOSCALER_MIN_NODES=3 KUBE_AUTOSCALER_MAX_NODES=10 NUM_NODES=5 ./cluster/kube-up.sh
+```
+
+Google Kubernetes Engine에서는 클러스터 생성이나 업데이트, 또는 (오토스케일하려고 하는) 특정 노드 풀의
+생성 시기에 해당 `gcloud` 커맨드에 `--enable-autoscaling` `--minnodes` `--maxnodes` 플래그들을
+전달하여 cluster autoscaler를 구성할 수 있다.
+
+예제:
+
+```shell
+gcloud container clusters create mytestcluster --zone=us-central1-b --enable-autoscaling --min-nodes=3 --max-nodes=10 --num-nodes=5
+```
+
+```shell
+gcloud container clusters update mytestcluster --enable-autoscaling --min-nodes=1 --max-nodes=15
+```
+
+**Cluster autoscaler는 노드가 수작업으로 변경(예. kubectl을 통해 레이블을 추가)되는 경우를 예상하지 않는데, 동일한 인스턴스 그룹 내의 신규 노드들에 이 속성들이 전파되지 않을 것이기 때문이다.**
+
+cluster autoscaler가 클러스터 스케일 여부와 언제 어떻게 클러스터 스케일하는지에 대한 상세 사항은
+autoscaler 프로젝트의 [FAQ](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md)
+문서를 참조하기를 바란다.
+
+## 노드 유지보수
+
+(커널 업그레이드, libc 업그레이드, 하드웨어 수리 등으로) 한 노드를 리부트해야하는데 다운타임이 짧다면,
+Kubelet이 재시작할 때 해당 노드에 스케줄된 파드들을 재시작하려고 할 것이다. 만약 리부트가 길게 걸린다면
+(컨트롤러 관리자의 `--pod-eviction-timeout`으로 제어되는 기본 시간은 5분이다.)
+노드 컨트롤러는 사용불가한 노드에 묶여져 있는 파드들을 종료 시킬 것이다. 만약 상응하는
+레플리카 셋 (또는 레플리케이션 컨트롤러)가 존재한다면, 해당 파드의 신규 복제본을 다른 노드에서 기동시킬 것이다. 따라서, 모든 파드들이
+복제된 상황에서 모든 노드들이 동시에 다운되지 않는다고 가정했을 때, 별다른 조작없이 업데이트를 진행할 수 있다.
+
+만약 업그레이드 과정을 상세하게 통제하기를 원한다면, 다음 워크플로우를 사용할 수 있다.
+
+노드에 스케줄할 수 없도록 표시하면서 해당 노드 상의 모든 파드들을 자연스럽게 종료하기 위해 `kubectl drain`을 사용한다.
+
+```shell
+kubectl drain $NODENAME
+```
+
+이렇게하면 파드가 종료되는 동안 신규 파드들이 해당 노드에 스케줄되는 것을 방지한다.
+
+레플리카 셋의 파드들은 신규 노드에 스케줄되는 신규 파드로 교체될 것이다. 추가적으로 해당 파드가 한 서비스의 일부라면, 클라이언트들은 자동으로 신규 파드로 재전송될 것이다.
+
+레플리카 셋이 아닌 파드들은 직접 해당 파드의 새로운 복제본을 올려야 하며, 해당 파드가 한 서비스의 일부가 아니라면 클라이언트들을 신규 복제본으로 재전송해야 한다.
+
+해당 노드에 유지보수 작업을 수행한다.
+
+해당 노드가 다시 스케줄될 수 있도록 한다.
+
+```shell
+kubectl uncordon $NODENAME
+```
+
+해당 노드의 VM 인스턴스를 삭제하고 신규로 생성했다면, 신규로 스케줄 가능한 노드 리소스가
+자동으로 생성될 것이다.(당신이 노드 디스커버리를 지원하는 클라우드 제공자를 사용한다면;
+이는 현재 Google Compute Engine만 지원되며 Google Compute Engine 상에서 kube-register를 사용하는 CoreOS를 포함하지는 않는다.) 상세 내용은 [노드](/docs/concepts/architecture/nodes)를 참조하라.
+
+## 고급 주제들
+
+### 다른 API 버전으로 업그레이드
+
+신규 API 버전이 릴리스 되었을 때, 해당 신규 API 버전을 지원하려면 클러스터를 업그레이드해야 할 수 있다.(예. 'v2'가 출시되었을 때 'v1'에서 'v2'로 변경)
+
+이는 드문 경우지만 세심한 관리가 요구된다. 신규 API 버전으로 업그레이드하는데는 일련의 과정이 존재한다.
+
+ 1. 신규 API 버전을 ON한다.
+ 1. 신규 버전을 사용하도록 클러스터의 스토리지를 업그레이드한다.
+ 1. 모든 구성 파일들을 업그레이드한다. 구식 API 버전 엔드포인트의 사용자들을 식별한다.
+ 1. `cluster/update-storage-objects.sh`을 실행하여 스토리지 내에 기존 객체들을 신규 버전으로 업데이트한다.
+ 1. 구식 API 버전을 OFF한다.
+
+### 클러스터에서 API 버전을 ON/OFF 하기
+
+특정 API 버전들은 API 서버가 올라오는 동안 `--runtime-config=api/` 플래그를 전달하여 ON/OFF 시킬 수 있다. 예를 들어, v1 API를 OFF 시키려면, `--runtime-config=api/v1=false`를
+전달한다. runtime-config는 모든 API들과 레거시 API들을 각각 제어하는 api/all과 api/legacy 2가지 특수 키도 지원한다.
+예를 들어, v1을 제외한 모든 API 버전들을 OFF하려면 `--runtime-config=api/all=false,api/v1=true`를 전달한다.
+이 플래그들을 위해 레거시 API들은 명확하게 사용중단된 API들이다.(예. `v1beta3`)
+
+### 클러스터에서 스토리지 API 버전을 변경
+
+클러스터 내에서 활성화된 쿠버네티스 리소스들의 클러스터의 내부 표현을 위해 디스크에 저장된 객체들은 특정 버전의 API를 사용하여 작성된다.
+지원되는 API가 변경될 때, 이 객체들은 새로운 API로 재작성되어야 할 수도 있다. 이것이 실패하면 결과적으로 리소스들이
+쿠버네티스 API 서버에서 더 이상 해독되거나 사용할 수 없게 될 것이다.
+
+### 구성 파일을 신규 API 버전으로 변경
+
+다른 API 버전들 간에 구성 파일을 전환하는데 `kubectl convert` 커맨드를 사용할 수 있다.
+
+```shell
+kubectl convert -f pod.yaml --output-version v1
+```
+
+옵션에 대한 상세 정보는 [kubectl convert](/docs/reference/generated/kubectl/kubectl-commands#convert) 커맨드의 사용법을 참조하기를 바란다.
+
+{{% /capture %}}
diff --git a/content/ko/docs/tasks/manage-kubernetes-objects/declarative-config.md b/content/ko/docs/tasks/manage-kubernetes-objects/declarative-config.md
index 8c62597a89..8d0795441f 100644
--- a/content/ko/docs/tasks/manage-kubernetes-objects/declarative-config.md
+++ b/content/ko/docs/tasks/manage-kubernetes-objects/declarative-config.md
@@ -937,7 +937,7 @@ fields to the annotation, and instead. Then add this bullet point.
1. 활성 오브젝트를 로컬 구성 파일로 내보낸다.
```shell
- kubectl get <종류>/<이름> -o yaml --export > <종류>_<이름>.yaml
+ kubectl get <종류>/<이름> -o yaml > <종류>_<이름>.yaml
```
1. 구성 파일에서 수동으로 `status` 필드를 제거한다.
diff --git a/content/ko/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md b/content/ko/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
index 93c6cb5096..ee7cf0093a 100644
--- a/content/ko/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
+++ b/content/ko/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
@@ -6,7 +6,9 @@ weight: 100
{{% capture overview %}}
-Horizontal Pod Autoscaler는 CPU 사용량(또는 베타 지원의 다른 애플리케이션 지원 메트릭)을 관찰하여 레플리케이션 컨트롤러, 디플로이먼트 또는 레플리카 셋의 파드 개수를 자동으로 스케일한다.
+Horizontal Pod Autoscaler는
+CPU 사용량(또는 베타 지원의 다른 애플리케이션 지원 메트릭)을 관찰하여
+레플리케이션 컨트롤러, 디플로이먼트 또는 레플리카 셋의 파드 개수를 자동으로 스케일한다.
이 문서는 php-apache 서버를 대상으로 Horizontal Pod Autoscaler를 동작해보는 예제이다. Horizontal Pod Autoscaler 동작과 관련된 더 많은 정보를 위해서는 [Horizontal Pod Autoscaler 사용자 가이드](/docs/tasks/run-application/horizontal-pod-autoscale/)를 참고하기 바란다.
@@ -17,9 +19,16 @@ Horizontal Pod Autoscaler는 CPU 사용량(또는 베타 지원의 다른 애플
{{% capture prerequisites %}}
이 예제는 버전 1.2 또는 이상의 쿠버네티스 클러스터와 kubectl을 필요로 한다.
-[메트릭-서버](https://github.com/kubernetes-incubator/metrics-server/) 모니터링을 클러스터에 배포하여 리소스 메트릭 API를 통해 메트릭을 제공해야 한다. Horizontal Pod Autoscaler가 메트릭을 수집할때 해당 API를 사용한다. 메트릭-서버를 배포하는 지침은 [메트릭-서버](https://github.com/kubernetes-incubator/metrics-server/)의 GitHub 저장소에 있고, [GCE 가이드](/docs/setup/turnkey/gce/)로 클러스터를 올리는 경우 메트릭-서버 모니터링은 디폴트로 활성화된다.
+[메트릭-서버](https://github.com/kubernetes-incubator/metrics-server/) 모니터링을 클러스터에 배포하여 리소스 메트릭 API를 통해 메트릭을 제공해야 한다.
+Horizontal Pod Autoscaler가 메트릭을 수집할때 해당 API를 사용한다.
+메트릭-서버를 배포하는 지침은 [메트릭-서버](https://github.com/kubernetes-incubator/metrics-server/)의 GitHub 저장소에 있고, [GCE 가이드](/docs/setup/turnkey/gce/)로 클러스터를 올리는 경우 메트릭-서버 모니터링은 디폴트로 활성화된다.
-Horizontal Pod Autoscaler에 다양한 자원 메트릭을 적용하고자 하는 경우, 버전 1.6 또는 이상의 쿠버네티스 클러스터와 kubectl를 사용해야 한다. 또한, 사용자 정의 메트릭을 사용하기 위해서는, 클러스터가 사용자 정의 메트릭 API를 제공하는 API 서버와 통신할 수 있어야 한다. 마지막으로, 쿠버네티스 오브젝트와 관련이 없는 메트릭을 사용하는 경우 버전 1.10 또는 이상의 쿠버네티스 클러스터와 kubectl을 사용해야 하며, 외부 메트릭 API와 통신이 가능해야 한다. 자세한 사항은 [Horizontal Pod Autoscaler 사용자 가이드](/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-custom-metrics)를 참고하길 바란다.
+Horizontal Pod Autoscaler에 다양한 자원 메트릭을 적용하고자 하는 경우,
+버전 1.6 또는 이상의 쿠버네티스 클러스터와 kubectl를 사용해야 한다.
+또한, 사용자 정의 메트릭을 사용하기 위해서는, 클러스터가 사용자 정의 메트릭 API를 제공하는 API 서버와 통신할 수 있어야 한다.
+마지막으로 쿠버네티스 오브젝트와 관련이 없는 메트릭을 사용하는 경우,
+버전 1.10 또는 이상의 쿠버네티스 클러스터와 kubectl을 사용해야 하며, 외부 메트릭 API와 통신이 가능해야 한다.
+자세한 사항은 [Horizontal Pod Autoscaler 사용자 가이드](/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-custom-metrics)를 참고하길 바란다.
{{% /capture %}}
@@ -30,7 +39,6 @@ Horizontal Pod Autoscaler에 다양한 자원 메트릭을 적용하고자 하
Horizontal Pod Autoscaler 시연을 위해 php-apache 이미지를 맞춤 제작한 Docker 이미지를 사용한다.
Dockerfile은 다음과 같다.
-
```
FROM php:5-apache
ADD index.php /var/www/html/index.php
@@ -61,9 +69,14 @@ deployment.apps/php-apache created
## Horizontal Pod Autoscaler 생성
-이제 서비스가 동작중이므로, [kubectl autoscale](/docs/reference/generated/kubectl/kubectl-commands#autoscale)를
-사용하여 오토스케일러를 생성한다. 다음 명령어는 첫 번째 단계에서 만든 php-apache 디플로이먼트 파드의 개수를 1부터 10 사이로 유지하는 Horizontal Pod Autoscaler를 생성한다.
-간단히 얘기하면, HPA는 (디플로이먼트를 통한) 평균 CPU 사용량을 50%로 유지하기 위하여 레플리카의 개수를 늘리고 줄인다. ([kubectl run](https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/docs/user-guide/kubectl/kubectl_run.md)으로 각 파드는 200 밀리코어까지 요청할 수 있고, 따라서 여기서 말하는 평균 CPU 사용은 100 밀리코어를 말한다.) 이에 대한 자세한 알고리즘은 [여기](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#autoscaling-algorithm)를 참고하기 바란다.
+이제 서비스가 동작중이므로,
+[kubectl autoscale](/docs/reference/generated/kubectl/kubectl-commands#autoscale)를 사용하여 오토스케일러를 생성한다.
+다음 명령어는 첫 번째 단계에서 만든 php-apache 디플로이먼트 파드의 개수를
+1부터 10 사이로 유지하는 Horizontal Pod Autoscaler를 생성한다.
+간단히 얘기하면, HPA는 (디플로이먼트를 통한) 평균 CPU 사용량을 50%로 유지하기 위하여 레플리카의 개수를 늘리고 줄인다.
+[kubectl run](https://github.com/kubernetes/kubernetes/blob/{{< param "githubbranch" >}}/docs/user-guide/kubectl/kubectl_run.md)으로 각 파드는 200 밀리코어까지 요청할 수 있고,
+따라서 여기서 말하는 평균 CPU 사용은 100 밀리코어를 말한다).
+이에 대한 자세한 알고리즘은 [여기](/docs/tasks/run-application/horizontal-pod-autoscale/#algorithm-details)를 참고하기 바란다.
```shell
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
@@ -109,7 +122,8 @@ php-apache Deployment/php-apache/scale 305% / 50% 305% 1 10
```
-CPU 소비가 305%까지 증가하였다. 결과적으로, 디플로이먼트의 레플리카 개수는 7개까지 증가하였다.
+CPU 소비가 305%까지 증가하였다.
+결과적으로, 디플로이먼트의 레플리카 개수는 7개까지 증가하였다.
```shell
kubectl get deployment php-apache
@@ -120,13 +134,19 @@ php-apache 7 7 7 7 19m
```
{{< note >}}
-레플리카의 개수를 안정화시키는데 몇 분이 걸릴 수 있다. 부하의 양은 환경에 따라 다르기 때문에, 최종 레플리카의 개수는 본 예제와 다를 수 있다.
+레플리카의 개수를 안정화시키는데 몇 분이 걸릴 수 있다.
+부하의 양은 환경에 따라 다르기 때문에,
+최종 레플리카의 개수는 본 예제와 다를 수 있다.
{{< /note >}}
## 부하 중지
본 예제를 마무리하기 위해 부하를 중단시킨다.
-`busybox` 컨테이너를 띄운 터미널에서, ` + C`로 부하 발생을 중단시킨다. 그런 다음 (몇 분 후에) 결과를 확인한다.
+
+`busybox` 컨테이너를 띄운 터미널에서,
+` + C`로 부하 발생을 중단시킨다.
+
+그런 다음 (몇 분 후에) 결과를 확인한다.
```shell
kubectl get hpa
@@ -156,7 +176,8 @@ CPU 사용량은 0으로 떨어졌고, HPA는 레플리카의 개수를 1로 낮
## 다양한 메트릭 및 사용자 정의 메트릭을 기초로한 오토스케일링
-`php-apache` 디플로이먼트를 오토스케일링할 때 `autoscaling/v2beta2` API 버전을 사용하여 추가적인 메트릭을 제공할 수 있다.
+`php-apache` 디플로이먼트를 오토스케일링할 때,
+`autoscaling/v2beta2` API 버전을 사용하여 추가적인 메트릭을 제공할 수 있다.
첫 번째로, `autoscaling/v2beta2` 형식으로 HorizontalPodAutoscaler YAML 파일을 생성한다.
@@ -200,15 +221,26 @@ status:
averageValue: 0
```
-`targetCPUUtilizationPercentage` 필드가 `metrics` 배열로 대체되었다. CPU 사용량 메트릭은 *resource metric* 으로 파드 컨테이너 자원의 백분율로 표현된다. CPU 외에 다른 메트릭을 지정할 수 있는데, 기본적으로 지원되는 다른 메트릭은 메모리뿐이다. 이 자원들은 한 클러스터에서 다른 클러스터로 이름을 변경할 수 없으며, `metrics.k8s.io` API가 가용한 경우 언제든지 사용할 수 있어야 한다.
+`targetCPUUtilizationPercentage` 필드가 `metrics` 배열로 대체되었다.
+CPU 사용량 메트릭은 *resource metric* 으로 파드 컨테이너 자원의 백분율로 표현된다.
+CPU 외에 다른 메트릭을 지정할 수 있는데, 기본적으로 지원되는 다른 메트릭은 메모리뿐이다.
+이 자원들은 한 클러스터에서 다른 클러스터로 이름을 변경할 수 없으며,
+`metrics.k8s.io` API가 가용한 경우 언제든지 사용할 수 있어야 한다.
-또한, `AverageUtilization` 대신 `AverageValue`의 `target` 타입을, 그리고 `target.averageUtilization` 대신 `target.averageValue`로 설정하여 자원 메트릭을 퍼센트 대신 값으로 명시할 수 있다.
+또한, `AverageUtilization` 대신 `AverageValue`의 `target` 타입을,
+그리고 `target.averageUtilization` 대신 `target.averageValue`로 설정하여
+자원 메트릭을 퍼센트 대신 값으로 명시할 수 있다.
-파드 메트릭과 오브젝트 메트릭 두 가지의 *사용자 정의 메트릭* 이 있다. 파드 메트릭과 오브젝트 메트릭. 이 메트릭은 클러스터에 특화된 이름을 가지고 있으며, 더 고급화된 클러스터 모니터링 설정이 필요하다.
+파드 메트릭과 오브젝트 메트릭 두 가지의 *사용자 정의 메트릭* 이 있다.
+파드 메트릭과 오브젝트 메트릭. 이 메트릭은 클러스터에 특화된 이름을 가지고 있으며,
+더 고급화된 클러스터 모니터링 설정이 필요하다.
-이러한 대체 메트릭 타입중 첫 번째는 *파드 메트릭* 이다. 이 메트릭은 파드들을 설명하고, 파드들간의 평균을 내며, 대상 값과 비교하여 레플리카 개수를 결정한다.
+이러한 대체 메트릭 타입중 첫 번째는 *파드 메트릭* 이다.
+이 메트릭은 파드들을 설명하고, 파드들간의 평균을 내며,
+대상 값과 비교하여 레플리카 개수를 결정한다.
-이것들은 `AverageValue`의 `target`만을 지원한다는 것을 제외하면, 자원 메트릭과 매우 유사하게 동작한다.
+이것들은 `AverageValue`의 `target`만을 지원한다는 것을 제외하면,
+자원 메트릭과 매우 유사하게 동작한다.
파드 메트릭은 이처럼 메트릭 블록을 사용하여 정의된다.
@@ -223,7 +255,13 @@ pods:
averageValue: 1k
```
-두 번째 대체 메트릭 타입은 *오브젝트 메트릭* 이다. 이 메트릭은 파드를 기술하는 대신에 동일한 네임스페이스 내에 다른 오브젝트를 표현한다. 이 메트릭은 반드시 오브젝트로부터 가져올 필요는 없다. 단지 오브젝트를 기술할 뿐이다. 오브젝트 메트릭은 `Value`과 `AverageValue`의 `target` 타입을 지원한다. `Value`를 사용할 경우 대상은 API로부터 반환되는 메트릭과 직접 비교된다. `AverageValue`를 사용할 경우, 대상 값과 비교되기 이전에 사용자 정의 메트릭 API로부터 반환된 값은 파드의 개수로 나눠진다. 다음은 `requests-per-second` 메트릭을 YAML로 기술한 예제이다.
+두 번째 대체 메트릭 타입은 *오브젝트 메트릭* 이다.
+이 메트릭은 파드를 기술하는 대신에 동일한 네임스페이스 내에 다른 오브젝트를 표현한다.
+이 메트릭은 반드시 오브젝트로부터 가져올 필요는 없다. 단지 오브젝트를 기술할 뿐이다.
+오브젝트 메트릭은 `Value`과 `AverageValue`의 `target` 타입을 지원한다.
+`Value`를 사용할 경우 대상은 API로부터 반환되는 메트릭과 직접 비교된다.
+`AverageValue`를 사용할 경우, 대상 값과 비교되기 이전에 사용자 정의 메트릭 API로부터 반환된 값은 파드의 개수로 나눠진다.
+다음은 `requests-per-second` 메트릭을 YAML로 기술한 예제이다.
```yaml
type: Object
@@ -239,9 +277,12 @@ object:
value: 2k
```
-이러한 메트릭 블록을 여러 개 제공하면, HorizontalPodAutoscaler는 각 메트릭을 차례로 고려한다. HorizontalPodAutoscaler는 각 메트릭에 대해 제안된 레플리카 개수를 계산하고, 그중 가장 높은 레플리카 개수를 선정한다.
+이러한 메트릭 블록을 여러 개 제공하면, HorizontalPodAutoscaler는 각 메트릭을 차례로 고려한다.
+HorizontalPodAutoscaler는 각 메트릭에 대해 제안된 레플리카 개수를 계산하고,
+그중 가장 높은 레플리카 개수를 선정한다.
-예를 들어, 네트워크 트래픽 메트릭을 수집하는 모니터링 시스템이 있는 경우, `kubectl edit` 명령어를 이용하여 다음과 같이 정의를 업데이트 할 수 있다.
+예를 들어, 네트워크 트래픽 메트릭을 수집하는 모니터링 시스템이 있는 경우,
+`kubectl edit` 명령어를 이용하여 다음과 같이 정의를 업데이트 할 수 있다.
```yaml
apiVersion: autoscaling/v2beta1
@@ -303,11 +344,17 @@ status:
value: 10k
```
-이후, HorizontalPodAutoscaler는 각 파드가 요청 된 약 50%의 CPU 사용률을 소모하는지, 초당 1000 패킷을 처리하는지, 메인-루트 인그레스 뒤의 모든 파드들이 초당 10000 요청을 처리하는지 확인한다.
+이후, HorizontalPodAutoscaler는 각 파드가 요청 된 약 50%의 CPU 사용률을 소모하는지,
+초당 1000 패킷을 처리하는지,
+메인-루트 인그레스 뒤의 모든 파드들이 초당 10000 요청을 처리하는지 확인한다.
### 보다 구체적인 메트릭을 기초로한 오토스케일링
-많은 메트릭 파이프라인들을 사용하면 이름 또는 _labels_ 이라 불리는 추가적인 식별자로 메트릭을 설명할 수 있다. 그리고, 모든 비 자원 메트릭 타입(파드, 오브젝트 그리고 아래 기술된 외부 타입)에 대해, 메트릭 파이프라인으로 전달되는 추가 레이블 셀렉터를 지정할 수 있다. 예를 들면, `verb` 레이블로 `http_requests` 메트릭을 수집하는 경우, 다음과 같이 메트릭 블록을 지정하여 GET 요청에 대해 크기를 조정할 수 있다.
+많은 메트릭 파이프라인들을 사용하면 이름 또는 _labels_ 이라 불리는 추가적인 식별자로 메트릭을 설명할 수 있다.
+그리고, 모든 비 자원 메트릭 타입(파드, 오브젝트 그리고 아래 기술된 외부 타입)에 대해,
+메트릭 파이프라인으로 전달되는 추가 레이블 셀렉터를 지정할 수 있다.
+예를 들면, `verb` 레이블로 `http_requests` 메트릭을 수집하는 경우,
+다음과 같이 메트릭 블록을 지정하여 GET 요청에 대해 크기를 조정할 수 있다.
```yaml
type: Object
@@ -317,18 +364,30 @@ object:
selector: `verb=GET`
```
-이 셀렉터는 쿠버네티스의 레이블 셀렉터와 동일한 문법이다. 모니터링 파이프라인은 네임과 셀렉터가 여러 시리즈와 일치하는 경우, 해당 여러 시리즈를 단일 값으로 축소하는 방법을 결정한다. 셀렉터는 부가적인 속성이며, 대상 오브젝트(`Pods` 타입의 대상 파드, `Object` 타입으로 기술된 오브젝트)가 아닌 메트릭을 선택할 수 없다.
+이 셀렉터는 쿠버네티스의 레이블 셀렉터와 동일한 문법이다.
+모니터링 파이프라인은 네임과 셀렉터가 여러 시리즈와 일치하는 경우,
+해당 여러 시리즈를 단일 값으로 축소하는 방법을 결정한다.
+셀렉터는 부가적인 속성이며,
+대상 오브젝트(`Pods` 타입의 대상 파드, `Object` 타입으로 기술된 오브젝트)가 아닌 메트릭을 선택할 수 없다.
### 쿠버네티스 오브젝트와 관련이 없는 메트릭을 기초로한 오토스케일링
-쿠버네티스 위에서 동작하는 애플리케이션은 쿠버네티스 클러스터의 어떤 오브젝트와도 관련이 없는 메트릭에 기반하여 오토스케일링을 할 수도 있다. 예로, 쿠버네티스 네임스페이스와 관련이 없는 서비스를 기초로한 메트릭을 들 수 있다. 쿠버네티스 버전 1.10 포함 이후 버전에서, *외부 메트릭* 을 사용하여 이러한 유스케이스를 해결할 수 있다.
+쿠버네티스 위에서 동작하는 애플리케이션은, 쿠버네티스 클러스터의 어떤 오브젝트와도 관련이 없는 메트릭에 기반하여
+오토스케일링을 할 수도 있다.
+예로, 쿠버네티스 네임스페이스와 관련이 없는 서비스를 기초로한 메트릭을 들 수 있다.
+쿠버네티스 버전 1.10 포함 이후 버전에서, *외부 메트릭* 을 사용하여 이러한 유스케이스를 해결할 수 있다.
-외부 메트릭 사용시, 먼저 모니터링 시스템에 대한 이해가 있어야 한다. 이 설치는 사용자 정의 메트릭과 유사하다.
+외부 메트릭 사용시, 먼저 모니터링 시스템에 대한 이해가 있어야 한다.
+이 설치는 사용자 정의 메트릭과 유사하다.
외부 메트릭을 사용하면 모니터링 시스템의 사용 가능한 메트릭에 기반하여 클러스터를 오토스케일링 할 수 있다.
-위의 예제처럼 `name`과 `selector`를 갖는 `metric` 블록을 제공하고, `Object` 대신에 `External` 메트릭 타입을 사용한다.
+위의 예제처럼 `name`과 `selector`를 갖는 `metric` 블록을 제공하고,
+`Object` 대신에 `External` 메트릭 타입을 사용한다.
만일 여러개의 시계열이 `metricSelector`와 일치하면, HorizontalPodAutoscaler가 값의 합을 사용한다.
-외부 메트릭들은 `Value`와 `AverageValue` 대상 타입을 모두 지원하고, `Object` 타입을 사용할 때와 똑같이 동작한다.
-예를 들면 애플리케이션이 호스팅 된 대기열 서비스에서 작업을 처리하는 경우, 다음과 같이 HorizontalPodAutoscaler 매니퍼스트에 30개의 미해결 태스크 당 한 개의 워커를 지정하도록 추가할 수 있다.
+외부 메트릭들은 `Value`와 `AverageValue` 대상 타입을 모두 지원하고,
+`Object` 타입을 사용할 때와 똑같이 동작한다.
+
+예를 들면 애플리케이션이 호스팅 된 대기열 서비스에서 작업을 처리하는 경우,
+다음과 같이 HorizontalPodAutoscaler 매니퍼스트에 30개의 미해결 태스크 당 한 개의 워커를 지정하도록 추가할 수 있다.
```yaml
- type: External
@@ -341,13 +400,19 @@ object:
averageValue: 30
```
-가능하다면, 외부 메트릭 대신 사용자 정의 메트릭 대상 타입을 사용하길 권장한다. 왜냐하면, 클러스터 관리자가 사용자 정의 메트릭 API를 보안관점에서 더 쉽게 보호할 수 있기 때문이다. 외부 메트릭 API는 잠재적으로 어떠한 메트릭에도 접근할 수 있기에, 클러스터 관리자는 API를 노출시킬때 신중해야 한다.
+가능하다면, 외부 메트릭 대신 사용자 정의 메트릭 대상 타입을 사용하길 권장한다.
+왜냐하면, 클러스터 관리자가 사용자 정의 메트릭 API를 보안관점에서 더 쉽게 보호할 수 있기 때문이다.
+외부 메트릭 API는 잠재적으로 어떠한 메트릭에도 접근할 수 있기에, 클러스터 관리자는 API를 노출시킬때 신중해야 한다.
## 부록: Horizontal Pod Autoscaler 상태 조건
-HorizontalPodAutoscaler의 `autoscaling/v2beta2` 형식을 사용하면, HorizontalPodAutoscaler에서 쿠버네티스가 설정한 *상태 조건* 을 확인할 수 있다. 이 상태 조건들은 HorizontalPodAutoscaler가 스케일을 할 수 있는지, 어떤 방식으로든 제한되어 있는지 여부를 나타낸다.
+HorizontalPodAutoscaler의 `autoscaling/v2beta2` 형식을 사용하면,
+HorizontalPodAutoscaler에서 쿠버네티스가 설정한 *상태 조건* 을 확인할 수 있다.
+이 상태 조건들은 HorizontalPodAutoscaler가 스케일을 할 수 있는지,
+어떤 방식으로든 제한되어 있는지 여부를 나타낸다.
-이 조건은 `status.conditions`에 나타난다. HorizontalPodAutoscaler에 영향을 주는 조건을 보기 위해 `kubectl describe hpa`를 사용할 수 있다.
+이 조건은 `status.conditions`에 나타난다.
+HorizontalPodAutoscaler에 영향을 주는 조건을 보기 위해 `kubectl describe hpa`를 사용할 수 있다.
```shell
kubectl describe hpa cm-test
@@ -373,17 +438,32 @@ Conditions:
Events:
```
-이 HorizontalPodAutoscaler 경우, 건강 상태의 여러 조건들을 볼 수 있다. 첫 번째 `AbleToScale`는 HPA가 스케일을 가져오고 업데이트할 수 있는지, 백 오프 관련 조건으로 스케일링이 방지되는지 여부를 나타낸다. 두 번째 `ScalingActive`는 HPA가 활성화되어있는지(즉 대상 레플리카 개수가 0이 아닌지), 원하는 스케일을 계산할 수 있는지 여부를 나타낸다. 만약 `False` 인 경우, 일반적으로 메트릭을 가져오는데 문제가 있다. 마지막으로, 마지막 조건인 `ScalingLimited`는 원하는 스케일 한도가 HorizontalPodAutoscaler의 최대/최소값으로 제한돼있음을 나타낸다. 이는 HorizontalPodAutoscaler에서 레플리카의 개수 제한을 최대/최소값으로 올리거나 낮추려는 것이다.
+이 HorizontalPodAutoscaler 경우, 건강 상태의 여러 조건들을 볼 수 있다.
+첫 번째 `AbleToScale`는 HPA가 스케일을 가져오고 업데이트할 수 있는지,
+백 오프 관련 조건으로 스케일링이 방지되는지 여부를 나타낸다.
+두 번째 `ScalingActive`는 HPA가 활성화되어있는지(즉 대상 레플리카 개수가 0이 아닌지),
+원하는 스케일을 계산할 수 있는지 여부를 나타낸다. 만약 `False` 인 경우,
+일반적으로 메트릭을 가져오는데 문제가 있다.
+마지막으로, 마지막 조건인 `ScalingLimited`는
+원하는 스케일 한도가 HorizontalPodAutoscaler의 최대/최소값으로 제한돼있음을 나타낸다.
+이는 HorizontalPodAutoscaler에서 레플리카의 개수 제한을 최대/최소값으로 올리거나 낮추려는 것이다.
## 부록: 수량
-HorizontalPodAutoscaler와 메트릭 API에서 모든 메트릭은 쿠버네티스에서 사용하는 *수량* 숫자 표기법을 사용한다. 예를 들면, `10500m` 수량은 10진법 `10.5`으로 쓰인다. 메트릭 API들은 가능한 경우 접미사 없이 정수를 반환하며, 일반적으로 수량을 밀리단위로 반환한다. 10진수로 표현했을때, `1`과 `1500m` 또는 `1`과 `1.5` 로 메트릭 값을 나타낼 수 있다. 더 많은 정보를 위해서는 [수량에 관한 용어집](/docs/reference/glossary?core-object=true#term-quantity) 을 참고하기 바란다.
+HorizontalPodAutoscaler와 메트릭 API에서 모든 메트릭은
+쿠버네티스에서 사용하는 *수량* 숫자 표기법을 사용한다.
+예를 들면, `10500m` 수량은 10진법 `10.5`으로 쓰인다.
+메트릭 API들은 가능한 경우 접미사 없이 정수를 반환하며,
+일반적으로 수량을 밀리단위로 반환한다.
+10진수로 표현했을때, `1`과 `1500m` 또는 `1`과 `1.5` 로 메트릭 값을 나타낼 수 있다.
+더 많은 정보를 위해서는 [수량에 관한 용어집](/docs/reference/glossary?core-object=true#term-quantity) 을 참고하기 바란다.
## 부록: 다른 가능한 시나리오
### 명시적으로 오토스케일러 만들기
-HorizontalPodAutoscaler를 생성하기 위해 `kubectl autoscale` 명령어를 사용하지 않고 명시적으로 다음 파일을 사용하여 만들 수 있다.
+HorizontalPodAutoscaler를 생성하기 위해 `kubectl autoscale` 명령어를 사용하지 않고,
+명시적으로 다음 파일을 사용하여 만들 수 있다.
{{< codenew file="application/hpa/php-apache.yaml" >}}
diff --git a/content/ko/docs/tasks/run-application/horizontal-pod-autoscale.md b/content/ko/docs/tasks/run-application/horizontal-pod-autoscale.md
index e569997905..6dd55a1fe1 100644
--- a/content/ko/docs/tasks/run-application/horizontal-pod-autoscale.md
+++ b/content/ko/docs/tasks/run-application/horizontal-pod-autoscale.md
@@ -12,14 +12,14 @@ weight: 90
{{% capture overview %}}
Horizontal Pod Autoscaler는 CPU 사용량
-(또는 [사용자 정의 메트릭](https://git.k8s.io/community/contributors/design-proposals/instrumentation/custom-metrics-api.md),
-아니면 다른 애플리케이션 지원 메트릭)을 관찰하여 레플리케이션
+(또는 [사용자 정의 메트릭](https://git.k8s.io/community/contributors/design-proposals/instrumentation/custom-metrics-api.md),
+아니면 다른 애플리케이션 지원 메트릭)을 관찰하여 레플리케이션
컨트롤러, 디플로이먼트 또는 레플리카 셋의 파드 개수를 자동으로 스케일한다. Horizontal
Pod Autoscaler는 크기를 조정할 수 없는 오브젝트(예: 데몬 셋)에는 적용되지 않는다.
Horizontal Pod Autoscaler는 쿠버네티스 API 리소스 및 컨트롤러로 구현된다.
리소스는 컨트롤러의 동작을 결정한다.
-컨트롤러는 관찰된 평균 CPU 사용률이 사용자가 지정한 대상과 일치하도록 레플리케이션
+컨트롤러는 관찰된 평균 CPU 사용률이 사용자가 지정한 대상과 일치하도록 레플리케이션
컨트롤러 또는 디플로이먼트에서 레플리카 개수를 주기적으로 조정한다.
{{% /capture %}}
@@ -31,43 +31,43 @@ Horizontal Pod Autoscaler는 쿠버네티스 API 리소스 및 컨트롤러로

-Horizontal Pod Autoscaler는 컨트롤러
-관리자의 `--horizontal-pod-autoscaler-sync-period` 플래그(기본값은
+Horizontal Pod Autoscaler는 컨트롤러
+관리자의 `--horizontal-pod-autoscaler-sync-period` 플래그(기본값은
15초)에 의해 제어되는 주기를 가진 컨트롤 루프로 구현된다.
-각 주기 동안 컨트롤러 관리자는 각 HorizontalPodAutoscaler 정의에
-지정된 메트릭에 대해 리소스 사용률을 질의한다. 컨트롤러 관리자는 리소스
-메트릭 API(파드 단위 리소스 메트릭 용)
+각 주기 동안 컨트롤러 관리자는 각 HorizontalPodAutoscaler 정의에
+지정된 메트릭에 대해 리소스 사용률을 질의한다. 컨트롤러 관리자는 리소스
+메트릭 API(파드 단위 리소스 메트릭 용)
또는 사용자 지정 메트릭 API(다른 모든 메트릭 용)에서 메트릭을 가져온다.
-* 파드 단위 리소스 메트릭(예 : CPU)의 경우 컨트롤러는 HorizontalPodAutoscaler가
-대상으로하는 각 파드에 대한 리소스 메트릭 API에서 메트릭을 가져온다.
-그런 다음, 목표 사용률 값이 설정되면, 컨트롤러는 각 파드의
-컨테이너에 대한 동등한 자원 요청을 퍼센트 단위로 하여 사용률 값을
-계산한다. 대상 원시 값이 설정된 경우 원시 메트릭 값이 직접 사용된다.
-그리고, 컨트롤러는 모든 대상 파드에서 사용된 사용률의 평균 또는 원시 값(지정된
-대상 유형에 따라 다름)을 가져와서 원하는 레플리카의 개수를 스케일하는데
+* 파드 단위 리소스 메트릭(예 : CPU)의 경우 컨트롤러는 HorizontalPodAutoscaler가
+대상으로하는 각 파드에 대한 리소스 메트릭 API에서 메트릭을 가져온다.
+그런 다음, 목표 사용률 값이 설정되면, 컨트롤러는 각 파드의
+컨테이너에 대한 동등한 자원 요청을 퍼센트 단위로 하여 사용률 값을
+계산한다. 대상 원시 값이 설정된 경우 원시 메트릭 값이 직접 사용된다.
+그리고, 컨트롤러는 모든 대상 파드에서 사용된 사용률의 평균 또는 원시 값(지정된
+대상 유형에 따라 다름)을 가져와서 원하는 레플리카의 개수를 스케일하는데
사용되는 비율을 생성한다.
-파드의 컨테이너 중 일부에 적절한 리소스 요청이 설정되지 않은 경우,
-파드의 CPU 사용률은 정의되지 않으며, 따라서 오토스케일러는
-해당 메트릭에 대해 아무런 조치도 취하지 않는다. 오토스케일링
-알고리즘의 작동 방식에 대한 자세한 내용은 아래 [알고리즘 세부 정보](#알고리즘-세부-정보)
+파드의 컨테이너 중 일부에 적절한 리소스 요청이 설정되지 않은 경우,
+파드의 CPU 사용률은 정의되지 않으며, 따라서 오토스케일러는
+해당 메트릭에 대해 아무런 조치도 취하지 않는다. 오토스케일링
+알고리즘의 작동 방식에 대한 자세한 내용은 아래 [알고리즘 세부 정보](#알고리즘-세부-정보)
섹션을 참조하기 바란다.
-* 파드 단위 사용자 정의 메트릭의 경우, 컨트롤러는 사용률 값이 아닌 원시 값을 사용한다는 점을
+* 파드 단위 사용자 정의 메트릭의 경우, 컨트롤러는 사용률 값이 아닌 원시 값을 사용한다는 점을
제외하고는 파드 단위 리소스 메트릭과 유사하게 작동한다.
-* 오브젝트 메트릭 및 외부 메트릭의 경우, 문제의 오브젝트를 표현하는
-단일 메트릭을 가져온다. 이 메트릭은 목표 값과
-비교되어 위와 같은 비율을 생성한다. `autoscaling/v2beta2` API
-버전에서는, 비교가 이루어지기 전에 해당 값을 파드의 개수로
+* 오브젝트 메트릭 및 외부 메트릭의 경우, 문제의 오브젝트를 표현하는
+단일 메트릭을 가져온다. 이 메트릭은 목표 값과
+비교되어 위와 같은 비율을 생성한다. `autoscaling/v2beta2` API
+버전에서는, 비교가 이루어지기 전에 해당 값을 파드의 개수로
선택적으로 나눌 수 있다.
-HorizontalPodAutoscaler는 보통 일련의 API 집합(`metrics.k8s.io`,
-`custom.metrics.k8s.io`, `external.metrics.k8s.io`)에서 메트릭을 가져온다. `metrics.k8s.io` API는 대개 별도로
-시작해야 하는 메트릭-서버에 의해 제공된다. 가이드는
-[메트릭-서버](/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#metrics-server)를
+HorizontalPodAutoscaler는 보통 일련의 API 집합(`metrics.k8s.io`,
+`custom.metrics.k8s.io`, `external.metrics.k8s.io`)에서 메트릭을 가져온다. `metrics.k8s.io` API는 대개 별도로
+시작해야 하는 메트릭-서버에 의해 제공된다. 가이드는
+[메트릭-서버](/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#metrics-server)를
참조한다. HorizontalPodAutoscaler는 힙스터(Heapster)에서 직접 메트릭을 가져올 수도 있다.
{{< note >}}
@@ -79,194 +79,202 @@ HorizontalPodAutoscaler는 보통 일련의 API 집합(`metrics.k8s.io`,
오토스케일러는 스케일 하위 리소스를 사용하여 상응하는 확장 가능 컨트롤러(예: 레플리케이션 컨트롤러, 디플로이먼트, 레플리케이션 셋)에 접근한다.
스케일은 레플리카의 개수를 동적으로 설정하고 각 현재 상태를 검사 할 수 있게 해주는 인터페이스이다.
-하위 리소스 스케일에 대한 자세한 내용은
+하위 리소스 스케일에 대한 자세한 내용은
[여기](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#scale-subresource)에서 확인할 수 있다.
### 알고리즘 세부 정보
-가장 기본적인 관점에서, Horizontal Pod Autoscaler 컨트롤러는
-원하는(desired) 메트릭 값과 현재(current) 메트릭 값 사이의 비율로
+가장 기본적인 관점에서, Horizontal Pod Autoscaler 컨트롤러는
+원하는(desired) 메트릭 값과 현재(current) 메트릭 값 사이의 비율로
작동한다.
```
원하는 레플리카 수 = ceil[현재 레플리카 수 * ( 현재 메트릭 값 / 원하는 메트릭 값 )]
```
-예를 들어 현재 메트릭 값이 `200m`이고 원하는 값이
-`100m`인 경우 `200.0 / 100.0 == 2.0`이므로 복제본 수가 두 배가
-된다. 만약 현재 값이 `50m` 이면, `50.0 / 100.0 == 0.5` 이므로
-복제본 수를 반으로 줄일 것이다. 비율이 1.0(0.1을 기본값으로 사용하는
-`-horizontal-pod-autoscaler-tolerance` 플래그를 사용하여
+예를 들어 현재 메트릭 값이 `200m`이고 원하는 값이
+`100m`인 경우 `200.0 / 100.0 == 2.0`이므로 복제본 수가 두 배가
+된다. 만약 현재 값이 `50m` 이면, `50.0 / 100.0 == 0.5` 이므로
+복제본 수를 반으로 줄일 것이다. 비율이 1.0(0.1을 기본값으로 사용하는
+`-horizontal-pod-autoscaler-tolerance` 플래그를 사용하여
전역적으로 구성 가능한 허용 오차 내)에 충분히 가깝다면 스케일링을 건너 뛸 것이다.
-`targetAverageValue` 또는 `targetAverageUtilization`가 지정되면,
-`currentMetricValue`는 HorizontalPodAutoscaler의 스케일 목표
-안에 있는 모든 파드에서 주어진 메트릭의 평균을 취하여 계산된다.
-허용치를 확인하고 최종 값을 결정하기 전에, 파드
+`targetAverageValue` 또는 `targetAverageUtilization`가 지정되면,
+`currentMetricValue`는 HorizontalPodAutoscaler의 스케일 목표
+안에 있는 모든 파드에서 주어진 메트릭의 평균을 취하여 계산된다.
+허용치를 확인하고 최종 값을 결정하기 전에, 파드
준비 상태와 누락된 메트릭을 고려한다.
-삭제 타임 스탬프가 설정된 모든 파드(즉, 종료
+삭제 타임 스탬프가 설정된 모든 파드(즉, 종료
중인 파드) 및 실패한 파드는 모두 폐기된다.
-특정 파드에 메트릭이 누락된 경우, 나중을 위해 처리를 미뤄두는데, 이와
+특정 파드에 메트릭이 누락된 경우, 나중을 위해 처리를 미뤄두는데, 이와
같이 누락된 메트릭이 있는 모든 파드는 최종 스케일 량을 조정하는데 사용된다.
-CPU를 스케일할 때, 어떤 파드라도 아직 준비가 안되었거나 (즉, 여전히
-초기화 중인 경우) * 또는 * 파드의 최신 메트릭 포인트가 준비되기
+CPU를 스케일할 때, 어떤 파드라도 아직 준비가 안되었거나 (즉, 여전히
+초기화 중인 경우) * 또는 * 파드의 최신 메트릭 포인트가 준비되기
전이라면, 마찬가지로 해당 파드는 나중에 처리된다.
기술적 제약으로 인해, HorizontalPodAutoscaler 컨트롤러는
- 특정 CPU 메트릭을 나중에 사용할지 말지 결정할 때, 파드가 준비되는
-시작 시간을 정확하게 알 수 없다. 대신, 파드가 아직 준비되지
-않았고 시작 이후 짧은 시간 내에 파드가 준비되지 않은 상태로
+ 특정 CPU 메트릭을 나중에 사용할지 말지 결정할 때, 파드가 준비되는
+시작 시간을 정확하게 알 수 없다. 대신, 파드가 아직 준비되지
+않았고 시작 이후 짧은 시간 내에 파드가 준비되지 않은 상태로
전환된다면, 해당 파드를 "아직 준비되지 않음(not yet ready)"으로 간주한다.
이 값은 `--horizontal-pod-autoscaler-initial-readiness-delay` 플래그로 설정되며, 기본값은 30초
-이다. 일단 파드가 준비되고 시작된 후 구성 가능한 시간 이내이면,
-준비를 위한 어떠한 전환이라도 이를 시작 시간으로 간주한다. 이
-값은 `--horizontal-pod-autoscaler-cpu-initialization-period` 플래그로 설정되며
+이다. 일단 파드가 준비되고 시작된 후 구성 가능한 시간 이내이면,
+준비를 위한 어떠한 전환이라도 이를 시작 시간으로 간주한다. 이
+값은 `--horizontal-pod-autoscaler-cpu-initialization-period` 플래그로 설정되며
기본값은 5분이다.
-`현재 메트릭 값 / 원하는 메트릭 값` 기본 스케일 비율은 나중에
+`현재 메트릭 값 / 원하는 메트릭 값` 기본 스케일 비율은 나중에
사용하기로 되어 있거나 위에서 폐기되지 않은 남아있는 파드를 사용하여 계산된다.
-누락된 메트릭이 있는 경우, 파드가 스케일 다운의 경우
-원하는 값의 100%를 소비하고 스케일 업의 경우 0%를 소비한다고
-가정하여 평균을 보다 보수적으로 재계산한다. 이것은 잠재적인
+누락된 메트릭이 있는 경우, 파드가 스케일 다운의 경우
+원하는 값의 100%를 소비하고 스케일 업의 경우 0%를 소비한다고
+가정하여 평균을 보다 보수적으로 재계산한다. 이것은 잠재적인
스케일의 크기를 약화시킨다.
-또한 아직-준비되지-않은 파드가 있는 경우 누락된 메트릭이나
-아직-준비되지-않은 파드를 고려하지 않고 스케일 업했을 경우,
-아직-준비되지-않은 파드가 원하는 메트릭의 0%를 소비한다고
+또한 아직-준비되지-않은 파드가 있는 경우 누락된 메트릭이나
+아직-준비되지-않은 파드를 고려하지 않고 스케일 업했을 경우,
+아직-준비되지-않은 파드가 원하는 메트릭의 0%를 소비한다고
보수적으로 가정하고 스케일 확장의 크기를 약화시킨다.
-아직-준비되지-않은 파드나 누락된 메트릭을 고려한 후에 사용
-비율을 다시 계산한다. 새 비율이 스케일 방향을
-바꾸거나, 허용 오차 내에 있으면 스케일링을 건너뛴다. 그렇지 않으면, 새
+아직-준비되지-않은 파드나 누락된 메트릭을 고려한 후에 사용
+비율을 다시 계산한다. 새 비율이 스케일 방향을
+바꾸거나, 허용 오차 내에 있으면 스케일링을 건너뛴다. 그렇지 않으면, 새
비율을 사용하여 스케일한다.
-평균 사용량에 대한 *원래* 값은 새로운 사용 비율이 사용되는
-경우에도 아직-준비되지-않은 파드 또는 누락된 메트릭에 대한
-고려없이 HorizontalPodAutoscaler 상태를 통해 다시
-보고된다.
+평균 사용량에 대한 *원래* 값은 새로운 사용 비율이 사용되는
+경우에도 아직-준비되지-않은 파드 또는 누락된 메트릭에 대한
+고려없이 HorizontalPodAutoscaler 상태를 통해 다시
+보고된다.
-HorizontalPodAutoscaler에 여러 메트릭이 지정된 경우, 이 계산은
-각 메트릭에 대해 수행된 다음 원하는 레플리카 수 중 가장
-큰 값이 선택된다. 이러한 메트릭 중 어떠한 것도 원하는
-레플리카 수로 변환할 수 없는 경우(예 : 메트릭 API에서 메트릭을
+HorizontalPodAutoscaler에 여러 메트릭이 지정된 경우, 이 계산은
+각 메트릭에 대해 수행된 다음 원하는 레플리카 수 중 가장
+큰 값이 선택된다. 이러한 메트릭 중 어떠한 것도 원하는
+레플리카 수로 변환할 수 없는 경우(예 : 메트릭 API에서 메트릭을
가져오는 중 오류 발생) 스케일을 건너뛴다.
-마지막으로, HPA가 목표를 스케일하기 직전에 스케일 권장 사항이 기록된다. 컨트롤러는
-구성 가능한 창(window) 내에서 가장 높은 권장 사항을 선택하도록 해당 창 내의
-모든 권장 사항을 고려한다. 이 값은 `--horizontal-pod-autoscaler-downscale-stabilization` 플래그를 사용하여 설정할 수 있고, 기본 값은 5분이다.
-즉, 스케일 다운이 점진적으로 발생하여 급격히 변동하는 메트릭 값의
+마지막으로, HPA가 목표를 스케일하기 직전에 스케일 권장 사항이 기록된다. 컨트롤러는
+구성 가능한 창(window) 내에서 가장 높은 권장 사항을 선택하도록 해당 창 내의
+모든 권장 사항을 고려한다. 이 값은 `--horizontal-pod-autoscaler-downscale-stabilization` 플래그를 사용하여 설정할 수 있고, 기본 값은 5분이다.
+즉, 스케일 다운이 점진적으로 발생하여 급격히 변동하는 메트릭 값의
영향을 완만하게 한다.
## API 오브젝트
-Horizontal Pod Autoscaler는 쿠버네티스 `autoscaling` API 그룹의 API 리소스이다.
-CPU에 대한 오토스케일링 지원만 포함하는 안정된 버전은
+Horizontal Pod Autoscaler는 쿠버네티스 `autoscaling` API 그룹의 API 리소스이다.
+CPU에 대한 오토스케일링 지원만 포함하는 안정된 버전은
`autoscaling/v1` API 버전에서 찾을 수 있다.
-메모리 및 사용자 정의 메트릭에 대한 스케일링 지원을 포함하는 베타 버전은
-`autoscaling/v2beta2`에서 확인할 수 있다. `autoscaling/v2beta2`에서 소개된
+메모리 및 사용자 정의 메트릭에 대한 스케일링 지원을 포함하는 베타 버전은
+`autoscaling/v2beta2`에서 확인할 수 있다. `autoscaling/v2beta2`에서 소개된
새로운 필드는 `autoscaling/v1`로 작업할 때 어노테이션으로 보존된다.
-API 오브젝트에 대한 자세한 내용은
+API 오브젝트에 대한 자세한 내용은
[HorizontalPodAutoscaler 오브젝트](https://git.k8s.io/community/contributors/design-proposals/autoscaling/horizontal-pod-autoscaler.md#horizontalpodautoscaler-object)에서 찾을 수 있다.
## kubectl에서 Horizontal Pod Autoscaler 지원
-Horizontal Pod Autoscaler는 모든 API 리소스와 마찬가지로 `kubectl`에 의해 표준 방식으로 지원된다.
-`kubectl create` 커맨드를 사용하여 새로운 오토스케일러를 만들 수 있다.
-`kubectl get hpa`로 오토스케일러 목록을 조회할 수 있고, `kubectl describe hpa`로 세부 사항을 확인할 수 있다.
+Horizontal Pod Autoscaler는 모든 API 리소스와 마찬가지로 `kubectl`에 의해 표준 방식으로 지원된다.
+`kubectl create` 커맨드를 사용하여 새로운 오토스케일러를 만들 수 있다.
+`kubectl get hpa`로 오토스케일러 목록을 조회할 수 있고, `kubectl describe hpa`로 세부 사항을 확인할 수 있다.
마지막으로 `kubectl delete hpa`를 사용하여 오토스케일러를 삭제할 수 있다.
-또한 Horizontal Pod Autoscaler를 쉽게 생성 할 수 있는 `kubectl autoscale`이라는 특별한 명령이 있다.
-예를 들어 `kubectl autoscale rs foo --min=2 --max=5 --cpu-percent=80`을
-실행하면 레플리케이션 셋 *foo* 에 대한 오토스케일러가 생성되고, 목표 CPU 사용률은 `80 %`,
-그리고 2와 5 사이의 레플리카 개수로 설정된다.
+또한 Horizontal Pod Autoscaler를 쉽게 생성 할 수 있는 `kubectl autoscale`이라는 특별한 명령이 있다.
+예를 들어 `kubectl autoscale rs foo --min=2 --max=5 --cpu-percent=80`을
+실행하면 레플리케이션 셋 *foo* 에 대한 오토스케일러가 생성되고, 목표 CPU 사용률은 `80 %`,
+그리고 2와 5 사이의 레플리카 개수로 설정된다.
`kubectl autoscale`에 대한 자세한 문서는 [여기](/docs/reference/generated/kubectl/kubectl-commands/#autoscale)에서 찾을 수 있다.
## 롤링 업데이트 중 오토스케일링
-현재 쿠버네티스에서는 레플리케이션 컨트롤러를 직접 관리하거나,
-기본 레플리카 셋를 관리하는 디플로이먼트 오브젝트를 사용하여 [롤링 업데이트](/docs/tasks/run-application/rolling-update-replication-controller/)를 수행 할 수 있다.
-Horizontal Pod Autoscaler는 후자의 방법을 지원한다. Horizontal Pod Autoscaler는 디플로이먼트 오브젝트에 바인딩되고,
+현재 쿠버네티스에서는 레플리케이션 컨트롤러를 직접 관리하거나,
+기본 레플리카 셋를 관리하는 디플로이먼트 오브젝트를 사용하여 [롤링 업데이트](/docs/tasks/run-application/rolling-update-replication-controller/)를 수행 할 수 있다.
+Horizontal Pod Autoscaler는 후자의 방법을 지원한다. Horizontal Pod Autoscaler는 디플로이먼트 오브젝트에 바인딩되고,
디플로이먼트 오브젝트를 위한 크기를 설정하며, 디플로이먼트는 기본 레플리카 셋의 크기를 결정한다.
-Horizontal Pod Autoscaler는 레플리케이션 컨트롤러를 직접 조작하는 롤링 업데이트에서 작동하지 않는다.
-즉, Horizontal Pod Autoscaler를 레플리케이션 컨트롤러에 바인딩하고 롤링 업데이트를 수행할 수 없다. (예 : `kubectl rolling-update`)
-작동하지 않는 이유는 롤링 업데이트에서 새 레플리케이션 컨트롤러를 만들 때,
+Horizontal Pod Autoscaler는 레플리케이션 컨트롤러를 직접 조작하는 롤링 업데이트에서 작동하지 않는다.
+즉, Horizontal Pod Autoscaler를 레플리케이션 컨트롤러에 바인딩하고 롤링 업데이트를 수행할 수ㄴ 없다. (예 : `kubectl rolling-update`)
+작동하지 않는 이유는 롤링 업데이트에서 새 레플리케이션 컨트롤러를 만들 때,
Horizontal Pod Autoscaler가 새 레플리케이션 컨트롤러에 바인딩되지 않기 때문이다.
## 쿨-다운 / 지연에 대한 지원
-Horizontal Pod Autoscaler를 사용하여 레플리카 그룹의 스케일을 관리할 때,
-평가된 메트릭의 동적인 특징 때문에 레플리카 수가
+Horizontal Pod Autoscaler를 사용하여 레플리카 그룹의 스케일을 관리할 때,
+평가된 메트릭의 동적인 특징 때문에 레플리카 수가
자주 변동할 수 있다. 이것은 때로는 *스래싱 (thrashing)* 이라고도 한다.
-v1.6부터 클러스터 운영자는 `kube-controller-manager` 구성
+v1.6부터 클러스터 운영자는 `kube-controller-manager` 구성
요소의 플래그로 노출된 글로벌 HPA 설정을 조정하여 이 문제를 완화할 수 있다.
-v1.12부터는 새로운 알고리즘 업데이트가 업스케일 지연에 대한
+v1.12부터는 새로운 알고리즘 업데이트가 업스케일 지연에 대한
필요성을 제거하였다.
-- `--horizontal-pod-autoscaler-downscale-delay` : 이 옵션 값은
- 오토스케일러가 현재의 작업이 완료된 후에 다른 다운스케일 작업을
- 수행하기까지 기다려야 하는 시간을 지정하는 지속 시간이다.
+- `--horizontal-pod-autoscaler-downscale-delay` : 이 옵션 값은
+ 오토스케일러가 현재의 작업이 완료된 후에 다른 다운스케일 작업을
+ 수행하기까지 기다려야 하는 시간을 지정하는 지속 시간이다.
기본값은 5분(`5m0s`)이다.
{{< note >}}
-이러한 파라미터 값을 조정할 때 클러스터 운영자는 가능한 결과를 알아야
-한다. 지연(쿨-다운) 값이 너무 길면, Horizontal Pod Autoscaler가
-워크로드 변경에 반응하지 않는다는 불만이 있을 수 있다. 그러나 지연 값을
-너무 짧게 설정하면, 레플리카 셋의 크기가 평소와 같이 계속 스래싱될 수
+이러한 파라미터 값을 조정할 때 클러스터 운영자는 가능한 결과를 알아야
+한다. 지연(쿨-다운) 값이 너무 길면, Horizontal Pod Autoscaler가
+워크로드 변경에 반응하지 않는다는 불만이 있을 수 있다. 그러나 지연 값을
+너무 짧게 설정하면, 레플리카 셋의 크기가 평소와 같이 계속 스래싱될 수
있다.
{{< /note >}}
## 멀티 메트릭을 위한 지원
-Kubernetes 1.6은 멀티 메트릭을 기반으로 스케일링을 지원한다. `autoscaling/v2beta2` API
-버전을 사용하여 Horizontal Pod Autoscaler가 스케일을 조정할 멀티 메트릭을 지정할 수 있다. 그런 다음 Horizontal Pod
-Autoscaler 컨트롤러가 각 메트릭을 평가하고, 해당 메트릭을 기반으로 새 스케일을 제안한다.
+Kubernetes 1.6은 멀티 메트릭을 기반으로 스케일링을 지원한다. `autoscaling/v2beta2` API
+버전을 사용하여 Horizontal Pod Autoscaler가 스케일을 조정할 멀티 메트릭을 지정할 수 있다. 그런 다음 Horizontal Pod
+Autoscaler 컨트롤러가 각 메트릭을 평가하고, 해당 메트릭을 기반으로 새 스케일을 제안한다.
제안된 스케일 중 가장 큰 것이 새로운 스케일로 사용된다.
## 사용자 정의 메트릭을 위한 지원
{{< note >}}
-쿠버네티스 1.2는 특수 어노테이션을 사용하여 애플리케이션 관련 메트릭을 기반으로 하는 스케일의 알파 지원을 추가했다.
-쿠버네티스 1.6에서는 이러한 어노테이션 지원이 제거되고 새로운 오토스케일링 API가 추가되었다. 이전 사용자 정의
-메트릭 수집 방법을 계속 사용할 수는 있지만, Horizontal Pod Autoscaler에서는 이 메트릭을 사용할 수 없다. 그리고
+쿠버네티스 1.2는 특수 어노테이션을 사용하여 애플리케이션 관련 메트릭을 기반으로 하는 스케일의 알파 지원을 추가했다.
+쿠버네티스 1.6에서는 이러한 어노테이션 지원이 제거되고 새로운 오토스케일링 API가 추가되었다. 이전 사용자 정의
+메트릭 수집 방법을 계속 사용할 수는 있지만, Horizontal Pod Autoscaler에서는 이 메트릭을 사용할 수 없다. 그리고
Horizontal Pod Autoscaler 컨트롤러에서는 더 이상 스케일 할 사용자 정의 메트릭을 지정하는 이전 어노테이션을 사용할 수 없다.
{{< /note >}}
쿠버네티스 1.6에서는 Horizontal Pod Autoscaler에서 사용자 정의 메트릭을 사용할 수 있도록 지원한다.
-`autoscaling/v2beta2` API에서 사용할 Horizontal Pod Autoscaler에 대한 사용자 정의 메트릭을 추가 할 수 있다.
+`autoscaling/v2beta2` API에서 사용할 Horizontal Pod Autoscaler에 대한 사용자 정의 메트릭을 추가 할 수 있다.
그리고 쿠버네티스는 새 사용자 정의 메트릭 API에 질의하여 적절한 사용자 정의 메트릭의 값을 가져온다.
요구 사항은 [메트릭을 위한 지원](#메트릭-API를-위한-지원)을 참조한다.
## 메트릭 API를 위한 지원
-기본적으로 HorizontalPodAutoscaler 컨트롤러는 일련의 API에서 메트릭을 검색한다. 이러한
+기본적으로 HorizontalPodAutoscaler 컨트롤러는 일련의 API에서 메트릭을 검색한다. 이러한
API에 접속하려면 클러스터 관리자는 다음을 확인해야 한다.
* [API 집합 레이어](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/) 활성화
* 해당 API 등록:
- * 리소스 메트릭의 경우, 일반적으로 이것은 [메트릭-서버](https://github.com/kubernetes-incubator/metrics-server)가 제공하는 `metrics.k8s.io` API이다.
+ * 리소스 메트릭의 경우, 일반적으로 이것은 [메트릭-서버](https://github.com/kubernetes-incubator/metrics-server)가 제공하는 `metrics.k8s.io` API이다.
클러스터 애드온으로 시작할 수 있다.
- * 사용자 정의 메트릭의 경우, 이것은 `custom.metrics.k8s.io` API이다. 메트릭 솔루션 공급 업체에서 제공하는 "어댑터" API 서버에서 제공한다.
- 메트릭 파이프라인 또는 [알려진 솔루션 목록](https://github.com/kubernetes/metrics/blob/master/IMPLEMENTATIONS.md#custom-metrics-api)으로 확인한다.
+ * 사용자 정의 메트릭의 경우, 이것은 `custom.metrics.k8s.io` API이다. 메트릭 솔루션 공급 업체에서 제공하는 "어댑터" API 서버에서 제공한다.
+ 메트릭 파이프라인 또는 [알려진 솔루션 목록](https://github.com/kubernetes/metrics/blob/master/IMPLEMENTATIONS.md#custom-metrics-api)으로 확인한다.
직접 작성하고 싶다면 [샘플](https://github.com/kubernetes-incubator/custom-metrics-apiserver)을 확인하라.
* 외부 메트릭의 경우, 이것은 `external.metrics.k8s.io` API이다. 위에 제공된 사용자 정의 메트릭 어댑터에서 제공될 수 있다.
* `--horizontal-pod-autoscaler-use-rest-clients`는 `true`이거나 설정되지 않음. 이것을 false로 설정하면 더 이상 사용되지 않는 힙스터 기반 오토스케일링으로 전환된다.
+이런 다양한 메트릭 경로와 각각의 다른 점에 대한 상세 내용은 관련 디자인 제안서인
+[HPA V2](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/autoscaling/hpa-v2.md),
+[custom.metrics.k8s.io](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/custom-metrics-api.md),
+[external.metrics.k8s.io](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/external-metrics-api.md)를 참조한다.
+
+어떻게 사용하는지에 대한 예시는 [커스텀 메트릭 사용하는 작업 과정](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics)과
+[외부 메트릭스 사용하는 작업 과정](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects)을 참조한다.
+
{{% /capture %}}
{{% capture whatsnext %}}
diff --git a/content/ko/docs/tasks/tools/install-minikube.md b/content/ko/docs/tasks/tools/install-minikube.md
index 24d2226693..80100f534d 100644
--- a/content/ko/docs/tasks/tools/install-minikube.md
+++ b/content/ko/docs/tasks/tools/install-minikube.md
@@ -15,12 +15,10 @@ card:
{{% capture prerequisites %}}
-컴퓨터의 바이오스(BIOS)에서 VT-x 또는 AMD-v 가상화는 필수적으로 활성화되어 있어야 한다.
-
{{< tabs name="minikube_before_you_begin" >}}
{{% tab name="리눅스" %}}
리눅스에서 가상화 지원 여부를 확인하려면, 아래의 명령을 실행하고 출력이 비어있지 않은지 확인한다.
-```
+```shell
egrep --color 'vmx|svm' /proc/cpuinfo
```
{{% /tab %}}
@@ -44,6 +42,12 @@ Hyper-V Requirements: VM Monitor Mode Extensions: Yes
Data Execution Prevention Available: Yes
```
+다음의 출력을 확인할 수 있다면, 이미 하이퍼바이저가 설치되어 있는 것으로 다음 단계를 건너 뛸 수 있다.
+```
+Hyper-V Requirements: A hypervisor has been detected. Features required for Hyper-V will not be displayed.
+```
+
+
{{% /tab %}}
{{< /tabs >}}
@@ -51,87 +55,125 @@ Hyper-V Requirements: VM Monitor Mode Extensions: Yes
{{% capture steps %}}
-## 하이퍼바이저(hypervisor) 설치 {#install-a-hypervisor}
+# minikube 설치하기
+
+{{< tabs name="tab_with_md" >}}
+{{% tab name="리눅스" %}}
+
+### kubectl 설치
+
+kubectl이 설치되었는지 확인한다. kubectl은 [kubectl 설치하고 설정하기](/docs/tasks/tools/install-kubectl/#install-kubectl-on-linux)의 요령을 따라서 설치할 수 있다.
+
+## 하이퍼바이저(hypervisor) 설치
하이퍼바이저를 설치하지 않다면, 운영체제에 적합한 하이퍼바이저를 지금 설치한다.
-운영체제 | 지원하는 하이퍼바이저
-:----------------|:---------------------
-맥OS | [VirtualBox](https://www.virtualbox.org/wiki/Downloads), [VMware Fusion](https://www.vmware.com/products/fusion), [HyperKit](https://github.com/moby/hyperkit)
-리눅스 | [VirtualBox](https://www.virtualbox.org/wiki/Downloads), [KVM](http://www.linux-kvm.org/)
-윈도우 | [VirtualBox](https://www.virtualbox.org/wiki/Downloads), [Hyper-V](https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/quick_start/walkthrough_install)
+• [KVM](https://www.linux-kvm.org/), 또한 QEMU를 사용한다
+
+• [VirtualBox](https://www.virtualbox.org/wiki/Downloads)
{{< note >}}
-Minikube는 쿠버네티스 컴포넌트를 VM이 아닌 호스트에서도 동작하도록 `--vm-driver=none` 옵션도 지원한다. 이 드라이버를 사용하기 위해서는 하이퍼바이저가 아닌 Docker와 리눅스 환경을 필요로 한다.
+Minikube는 쿠버네티스 컴포넌트를 VM이 아닌 호스트에서도 동작하도록 `--vm-driver=none` 옵션도 지원한다. 이 드라이버를 사용하기 위해서는 하이퍼바이저가 아닌 [도커](https://www.docker.com/products/docker-desktop)와 리눅스 환경을 필요로 한다.
{{< /note >}}
-## kubectl 설치
+### 패키지를 이용하여 Minikube 설치
-* [kubectl 설치하고 설정하기](/docs/tasks/tools/install-kubectl/) 지침에 따라 kubectl을 설치한다.
+Minikube를 위한 *실험적인* 패키지가 있다.
+리눅스 (AMD64) 패키지는 GitHub의 Minikube의 [릴리스](https://github.com/kubernetes/minikube/releases)에서 찾을 수 있다.
-## Minikube 설치 {#install-minikube}
+적절한 패키지를 설치하기 위해 리눅스 배포판의 패키지 도구를 사용한다.
-### 맥OS {#macos}
+### Minikube를 직접 다운로드하여 설치
-맥OS에 Minikube를 설치하는 가장 쉬운 방법은 [Homebrew](https://brew.sh)을 사용하는 것이다.
-
-```shell
-brew cask install minikube
-```
-
-정적 바이너리를 내려받아서 맥OS에 설치할 수도 있다.
-
-```shell
-curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 \
- && chmod +x minikube
-```
-
-Minikube 실행 파일을 경로에 추가하는 쉬운 방법은 다음과 같다.
-
-```shell
-sudo mv minikube /usr/local/bin
-```
-
-### 리눅스 {#linux}
-
-{{< note >}}
-이 문서는 Minikube를 리눅스에 정적 바이너리를 사용해서 설치하는 방법을 설명한다.
-{{< /note >}}
-
-정적 바이너리를 내려받아서 리눅스에 Minikube를 설치할 수 있다.
+패키지를 통해 설치하지 못하였다면,
+바이너리 자체를 다운로드 받고 사용할 수 있다.
```shell
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& chmod +x minikube
```
-Minikube 실행 파일을 경로에 추가하는 쉬운 방법은 다음과 같다.
+Minikube 실행 파일을 사용자 실행 경로에 추가하는 가장 쉬운 방법은 다음과 같다.
```shell
-sudo cp minikube /usr/local/bin && rm minikube
+sudo install minikube /usr/local/bin
```
-### 윈도우 {#windows}
+{{% /tab %}}
+{{% tab name="맥OS" %}}
+### kubectl 설치
+
+kubectl이 설치되었는지 확인한다. kubectl은 [kubectl 설치하고 설정하기](/docs/tasks/tools/install-kubectl/#install-kubectl-on-macos)의 요령을 따라서 설치할 수 있다.
+
+### 하이퍼바이저(hypervisor) 설치
+
+하이퍼바이저를 설치하지 않았다면, 다음 중 하나를 지금 설치한다.
+
+• [HyperKit](https://github.com/moby/hyperkit)
+
+• [VirtualBox](https://www.virtualbox.org/wiki/Downloads)
+
+• [VMware Fusion](https://www.vmware.com/products/fusion)
+
+### Minikube 설치
+가장 쉽게 맥OS에 Minikube를 설치하는 방법은 [Homebrew](https://brew.sh)를 이용하는 것이다.
+
+```shell
+brew cask install minikube
+```
+
+실행 바이너리를 다운로드 받아서 맥OS에 설치할 수도 있다.
+
+```shell
+curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 \
+ && chmod +x minikube
+```
+
+Minikube 실행 파일을 사용자 실행 경로에 추가하는 가장 쉬운 방법은 다음과 같다.
+
+```shell
+sudo mv minikube /usr/local/bin
+```
+
+{{% /tab %}}
+{{% tab name="Windows" %}}
+### kubectl 설치하기
+
+kubectl이 설치되었는지 확인한다. kubectl은 [kubectl 설치하고 설정하기](/docs/tasks/tools/install-kubectl/#install-kubectl-on-windows)의 요령을 따라서 설치할 수 있다.
+
+### 하이퍼바이저(hypervisor) 설치하기
+
+하이퍼바이저가 설치 안 되어 있다면 아래중 하나를 지금 설치한다.
+
+• [Hyper-V](https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/quick_start/walkthrough_install)
+
+• [VirtualBox](https://www.virtualbox.org/wiki/Downloads)
{{< note >}}
-Minikube를 윈도우에서 실행하려면, 먼저 [VirtualBox](https://www.virtualbox.org/) 또는 [Hyper-V](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v)를 설치해야 한다. Hyper-V는 Windows 10 엔터프라이즈, Windows 10 프로페셔널, Windows 10 에듀케이션 세 버전의 Windows 10에서 동작한다. Minikube 공식 GitHub 레포지토리에 추가적인 [설치 방법](https://github.com/kubernetes/minikube/#installation)을 확인한다.
+Hyper-V는 다음 세 버전의 윈도우 10에서 실행할 수 있다. Windows 10 Enterprise, Windows 10 Professional, Windows 10 Education.
{{< /note >}}
-윈도우에서 Minikube를 설치하는 가장 쉬운 방법은 [Chocolatey](https://chocolatey.org/)를 사용하는 것이다. (관리자 권한으로 실행)
+### Chocolatey를 이용한 Minikube 설치
+
+윈도우에서 Minikube를 설치하는 가장 쉬운 방법은 [Chocolatey](https://chocolatey.org/)를 사용하는 것이다(관리자 권한으로 실행).
```shell
choco install minikube kubernetes-cli
```
-Minikube 설치를 마친 후, 현재 CLI 세션을 닫고 재시작한다. Minikube가 실행 경로에 자동으로 추가되어 있어야 한다.
+Minikube 설치를 마친 후, 현재 CLI 세션을 닫고 재시작한다. Minikube 실행 파일의 경로는 실행 경로(path)에 자동으로 추가된다.
-#### 윈도우 수동 설치 {#windows-manual-installation}
+### 인스톨러 실행파일을 통한 Minikube 설치
-윈도우에서 Minikube를 수동으로 설치하려면, [`minikube-windows-amd64`](https://github.com/kubernetes/minikube/releases/latest)를 내려받아서 이름을 `minikube.exe`로 변경하고, 실행 경로에 추가한다.
+윈도우에서 수동으로 [Windows 인스톨러](https://docs.microsoft.com/en-us/windows/desktop/msi/windows-installer-portal)로 설치하려면, [`minikube-installer.exe`](https://github.com/kubernetes/minikube/releases/latest/minikube-installer.exe)를 다운로드 받고, 이 인스톨러를 실행한다.
-#### 윈도우 인스톨러 {#windows-installer}
+### 직접 다운로드하여 Minikube 설치
+
+윈도우에서 Minikube를 수동으로 설치하려면, [`minikube-windows-amd64`](https://github.com/kubernetes/minikube/releases/latest)를 다운로드 받아서, 파일 이름을 `minikube.exe`로 변경하고, 실행 경로에 추가한다.
+
+{{% /tab %}}
+{{< /tabs >}}
-[Windows 인스톨러](https://docs.microsoft.com/en-us/windows/desktop/msi/windows-installer-portal)으로 윈도우에서 Minikube를 수동으로 설치하려면 [`minikube-installer.exe`](https://github.com/kubernetes/minikube/releases/latest)를 내려받아서 인스톨러를 실행한다.
{{% /capture %}}
@@ -155,5 +197,5 @@ machine does not exist
구성 파일을 삭제해야 한다.
```shell
-rm -rf ~/.minikube
+minikube delete
```
diff --git a/content/ko/docs/tutorials/clusters/apparmor.md b/content/ko/docs/tutorials/clusters/apparmor.md
index b370a7e613..c5b84d2e4f 100644
--- a/content/ko/docs/tutorials/clusters/apparmor.md
+++ b/content/ko/docs/tutorials/clusters/apparmor.md
@@ -158,7 +158,7 @@ container.apparmor.security.beta.kubernetes.io/:
kubectl get events | grep Created
```
```
-22s 22s 1 hello-apparmor Pod spec.containers{hello} Normal Created {kubelet e2e-test-stclair-minion-group-31nt} Created container with docker id 269a53b202d3; Security:[seccomp=unconfined apparmor=k8s-apparmor-example-deny-write]
+22s 22s 1 hello-apparmor Pod spec.containers{hello} Normal Created {kubelet e2e-test-stclair-node-pool-31nt} Created container with docker id 269a53b202d3; Security:[seccomp=unconfined apparmor=k8s-apparmor-example-deny-write]apparmor=k8s-apparmor-example-deny-write]
```
컨테이너의 루트 프로세스가 올바른 프로파일로 실행되는지는 proc attr을 확인하여 직접 검증할 수 있다.
@@ -315,7 +315,7 @@ Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
23s 23s 1 {default-scheduler } Normal Scheduled Successfully assigned hello-apparmor-2 to e2e-test-stclair-minion-group-t1f5
- 23s 23s 1 {kubelet e2e-test-stclair-minion-group-t1f5} Warning AppArmor Cannot enforce AppArmor: profile "k8s-apparmor-example-allow-write" is not loaded
+ 23s 23s 1 {kubelet e2e-test-stclair-node-pool-t1f5} Warning AppArmor Cannot enforce AppArmor: profile "k8s-apparmor-example-allow-write" is not loaded
```
파드 상태는 Failed이며 오류메시지는 `Pod Cannot enforce AppArmor: profile
diff --git a/content/ko/docs/tutorials/kubernetes-basics/_index.html b/content/ko/docs/tutorials/kubernetes-basics/_index.html
index 1f9659628a..405572ef30 100644
--- a/content/ko/docs/tutorials/kubernetes-basics/_index.html
+++ b/content/ko/docs/tutorials/kubernetes-basics/_index.html
@@ -24,10 +24,10 @@ card:
이 튜토리얼에서는 쿠버네티스 클러스터 오케스트레이션 시스템의 기초를 익힐 수 있는 가이드를 제공한다. 각각의 모듈에는 쿠버네티스의 주요 기능과 개념에 대한 배경 지식이 담겨 있으며 대화형 온라인 튜토리얼도 포함되어 있다. 대화형 튜토리얼에서 간단한 클러스터와 그 클러스터 상의 컨테이너화 된 애플리케이션을 직접 관리해볼 수 있다.
대화형 튜토리얼을 사용해서 다음의 내용을 배울 수 있다.
-
컨테이너화된 애플리케이션을 클러스터에 배포하기
-
디플로이먼트를 스케일링하기
-
컨테이너화된 애플리케이션을 새로운 소프트웨어 버전으로 업데이트하기
-
컨테이너화된 애플리케이션을 디버그하기
+
컨테이너화된 애플리케이션을 클러스터에 배포하기.
+
디플로이먼트를 스케일링하기.
+
컨테이너화된 애플리케이션을 새로운 소프트웨어 버전으로 업데이트하기.
+
컨테이너화된 애플리케이션을 디버그하기.
이 튜토리얼에서는 Katacoda를 사용해서 독자의 웹브라우저에서 Minikube가 동작하는 가상 터미널을 구동시킨다. Minikube는 로컬에 설치할 수 있는 작은 규모의 쿠버네티스로써 어디에서든 작동된다. 어떤 소프트웨어도 설치할 필요가 없고, 아무 것도 설정할 필요가 없다. 왜냐하면 대화형 튜토리얼이 웹브라우저 자체에서 바로 동작하기 때문이다.
diff --git a/content/ko/docs/tutorials/online-training/overview.md b/content/ko/docs/tutorials/online-training/overview.md
index 2463c5a69d..402cb29a10 100644
--- a/content/ko/docs/tutorials/online-training/overview.md
+++ b/content/ko/docs/tutorials/online-training/overview.md
@@ -17,33 +17,31 @@ content_template: templates/concept
* [Cloud Native Certified Kubernetes Administrator (CKA) with Hands-On Labs & Practice Exams (Linux Academy)](https://linuxacademy.com/linux/training/course/name/cloud-native-certified-kubernetes-administrator-cka)
-* [Certified Kubernetes Administrator Developer 준비 과정 및 모의 시험 (KodeKloud)](https://kodekloud.com/p/certified-kubernetes-administrator-with-practice-tests)
+* [Certified Kubernetes Administrator Preparation Course with Practice Tests (KodeKloud)](https://kodekloud.com/p/certified-kubernetes-administrator-with-practice-tests)
* [Certified Kubernetes Application Developer (CKAD) with Hands-On Labs & Practice Exams (Linux Academy)] (https://linuxacademy.com/containers/training/course/name/certified-kubernetes-application-developer-ckad/)
-* [Certified Kubernetes Application Developer 준비 과정 및 모의 시험 (KodeKloud)](https://kodekloud.com/p/kubernetes-certification-course)
+* [Certified Kubernetes Application Developer Preparation Course with Practice Tests (KodeKloud)](https://kodekloud.com/p/kubernetes-certification-course)
-* [Google Kubernetes Engine 시작하기 (Coursera)](https://www.coursera.org/learn/google-kubernetes-engine)
+* [Getting Started with Google Kubernetes Engine (Coursera)](https://www.coursera.org/learn/google-kubernetes-engine)
-* [Google Kubernetes Engine Deep Dive (Linux Academy)](https://linuxacademy.com/google-cloud-platform/training/course/name/google-kubernetes-engine-deep-dive)
+* [Getting Started with Kubernetes (Pluralsight)](https://www.pluralsight.com/courses/getting-started-kubernetes)
-* [쿠버네티스 시작하기 (Pluralsight)](https://www.pluralsight.com/courses/getting-started-kubernetes)
+* [Getting Started with Kubernetes Clusters on OCI Oracle Kubernetes Engine (OKE) (Learning Library)](https://apexapps.oracle.com/pls/apex/f?p=44785:50:0:::50:P50_EVENT_ID,P50_COURSE_ID:5935,256)
-* [OCI Oracle Kubernetes Engine (OKE)에서 쿠버네티스 클러스터 시작하기 (Learning Library)](https://apexapps.oracle.com/pls/apex/f?p=44785:50:0:::50:P50_EVENT_ID,P50_COURSE_ID:5935,256)
-
-* [쿠버네티스 소개 및 실습 (Instruqt)](https://play.instruqt.com/public/topics/getting-started-with-kubernetes)
-
-* [IBM 클라우드: 쿠버네티스로 마이크로서비스(Microservices) 배포 (Coursera)](https://www.coursera.org/learn/deploy-micro-kube-ibm-cloud)
-
-* [쿠버네티스 소개 (edX)](https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x)
-
-* [Kubernetes Essentials with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-essentials)
+* [Google Kubernetes Engine Deep Dive (Linux Academy)] (https://linuxacademy.com/google-cloud-platform/training/course/name/google-kubernetes-engine-deep-dive)
* [Helm Deep Dive with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/helm-deep-dive-part-1)
-* [초보자를 위한 쿠버네티스 실습 랩 (KodeKloud)](https://kodekloud.com/p/kubernetes-for-the-absolute-beginners-hands-on)
+* [Hands-on Introduction to Kubernetes (Instruqt)](https://play.instruqt.com/public/topics/getting-started-with-kubernetes)
-* [Kubernetes Quick Start (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-quick-start)
+* [IBM Cloud: Deploying Microservices with Kubernetes (Coursera)](https://www.coursera.org/learn/deploy-micro-kube-ibm-cloud)
+
+* [Introduction to Kubernetes (edX)](https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x)
+
+* [Kubernetes Essentials with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-essentials)
+
+* [Kubernetes for the Absolute Beginners with Hands-on Labs (KodeKloud)](https://kodekloud.com/p/kubernetes-for-the-absolute-beginners-hands-on)
* [Kubernetes Quick Start with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-quick-start)
@@ -55,7 +53,7 @@ content_template: templates/concept
* [Learn Kubernetes by Doing - 100% Hands-On Experience (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/learn-kubernetes-by-doing)
-* [대화식 실습 시나리오를 사용하여 쿠버네티스 배우기 (Katacoda)](https://www.katacoda.com/courses/kubernetes/)
+* [Learn Kubernetes using Interactive Hands-on Scenarios (Katacoda)](https://www.katacoda.com/courses/kubernetes/)
* [Microservice Applications in Kubernetes - 100% Hands-On Experience (Linux Academy)] (https://linuxacademy.com/devops/training/course/name/learn-microservices-by-doing)
@@ -63,9 +61,7 @@ content_template: templates/concept
* [Service Mesh with Istio with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/service-mesh-with-istio-part-1)
-* [Prometheus로 쿠버네티스 모니터링 (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-and-prometheus)
-
-* [쿠버네티스와 확장 가능한 마이크로서비스(Microservices) (Udacity)](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615)
+* [Scalable Microservices with Kubernetes (Udacity)](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615)
* [Self-paced Kubernetes online course (Learnk8s Academy)](https://learnk8s.io/academy)
{{% /capture %}}
diff --git a/content/ko/docs/tutorials/services/source-ip.md b/content/ko/docs/tutorials/services/source-ip.md
index a7946664c2..f6654f5891 100644
--- a/content/ko/docs/tutorials/services/source-ip.md
+++ b/content/ko/docs/tutorials/services/source-ip.md
@@ -34,7 +34,10 @@ content_template: templates/tutorial
작은 nginx 웹 서버를 이용한다. 다음과 같이 생성할 수 있다.
```console
-$ kubectl run source-ip-app --image=k8s.gcr.io/echoserver:1.4
+kubectl run source-ip-app --image=k8s.gcr.io/echoserver:1.4
+```
+출력은 다음과 같다.
+```
deployment.apps/source-ip-app created
```
@@ -59,13 +62,21 @@ deployment.apps/source-ip-app created
Kube-proxy는 이 모드를 `proxyMode` 엔드포인트를 통해 노출한다.
```console
-$ kubectl get nodes
+kubectl get nodes
+```
+출력은 다음과 유사하다
+```
NAME STATUS ROLES AGE VERSION
-kubernetes-minion-group-6jst Ready 2h v1.13.0
-kubernetes-minion-group-cx31 Ready 2h v1.13.0
-kubernetes-minion-group-jj1t Ready 2h v1.13.0
-
-kubernetes-minion-group-6jst $ curl localhost:10249/proxyMode
+kubernetes-node-6jst Ready 2h v1.13.0
+kubernetes-node-cx31 Ready 2h v1.13.0
+kubernetes-node-jj1t Ready 2h v1.13.0
+```
+한 노드의 프록시 모드를 확인한다.
+```console
+kubernetes-node-6jst $ curl localhost:10249/proxyMode
+```
+출력은 다음과 같다.
+```
iptables
```
@@ -272,12 +283,12 @@ $ kubectl get svc loadbalancer -o yaml | grep -i healthCheckNodePort
```
$ kubectl get pod -o wide -l run=source-ip-app
NAME READY STATUS RESTARTS AGE IP NODE
-source-ip-app-826191075-qehz4 1/1 Running 0 20h 10.180.1.136 kubernetes-minion-group-6jst
+source-ip-app-826191075-qehz4 1/1 Running 0 20h 10.180.1.136 kubernetes-node-6jst
-kubernetes-minion-group-6jst $ curl localhost:32122/healthz
+kubernetes-node-6jst $ curl localhost:32122/healthz
1 Service Endpoints found
-kubernetes-minion-group-jj1t $ curl localhost:32122/healthz
+kubernetes-node-jj1t $ curl localhost:32122/healthz
No Service Endpoints Found
```
diff --git a/content/ko/docs/tutorials/stateful-application/zookeeper.md b/content/ko/docs/tutorials/stateful-application/zookeeper.md
index a5055d6c87..f541864416 100644
--- a/content/ko/docs/tutorials/stateful-application/zookeeper.md
+++ b/content/ko/docs/tutorials/stateful-application/zookeeper.md
@@ -823,9 +823,9 @@ for i in 0 1 2; do kubectl get pod zk-$i --template {{.spec.nodeName}}; echo "";
`zk` `스테이트풀셋`에 모든 파드는 다른 노드에 배포된다.
```shell
-kubernetes-minion-group-cxpk
-kubernetes-minion-group-a5aq
-kubernetes-minion-group-2g2d
+kubernetes-node-cxpk
+kubernetes-node-a5aq
+kubernetes-node-2g2d
```
이는 `zk` `스테이트풀셋`의 파드에 `파드안티어피니티(PodAntiAffinity)`를 지정했기 때문이다.
@@ -897,9 +897,9 @@ kubectl get pods -w -l app=zk
```shell
for i in 0 1 2; do kubectl get pod zk-$i --template {{.spec.nodeName}}; echo ""; done
-kubernetes-minion-group-pb41
-kubernetes-minion-group-ixsl
-kubernetes-minion-group-i4c4
+kubernetes-node-pb41
+kubernetes-node-ixsl
+kubernetes-node-i4c4
```
`zk-0`파드가 스케쥴되는 노드를 통제하기 위해
@@ -907,11 +907,11 @@ kubernetes-minion-group-i4c4
```shell
kubectl drain $(kubectl get pod zk-0 --template {{.spec.nodeName}}) --ignore-daemonsets --force --delete-local-data
-node "kubernetes-minion-group-pb41" cordoned
+node "kubernetes-node-group-pb41" cordoned
-WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-minion-group-pb41, kube-proxy-kubernetes-minion-group-pb41; Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-o5elz
+WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-node-group-pb41, kube-proxy-kubernetes-node-group-pb41; Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-o5elz
pod "zk-0" deleted
-node "kubernetes-minion-group-pb41" drained
+node "kubernetes-node-group-pb41" drained
```
클러스터에 4개 노드가 있기 때문에 `kubectl drain`이 성공하여
@@ -938,11 +938,11 @@ zk-0 1/1 Running 0 1m
`zk-1` 이 스케쥴된 노드를 비워보자.
```shell
-kubectl drain $(kubectl get pod zk-1 --template {{.spec.nodeName}}) --ignore-daemonsets --force --delete-local-data "kubernetes-minion-group-ixsl" cordoned
+kubectl drain $(kubectl get pod zk-1 --template {{.spec.nodeName}}) --ignore-daemonsets --force --delete-local-data "kubernetes-node-ixsl" cordoned
-WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-minion-group-ixsl, kube-proxy-kubernetes-minion-group-ixsl; Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-voc74
+WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-node-ixsl, kube-proxy-kubernetes-node-ixsl; Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-voc74
pod "zk-1" deleted
-node "kubernetes-minion-group-ixsl" drained
+node "kubernetes-node-ixsl" drained
```
`zk-1` 파드는 스케쥴되지 않는데 이는 `zk` `스테이트풀셋`이 오직 2개 노드가 스케쥴되도록 파드를 위치시키는 것을 금하는 `파드안티어피니티` 규칙을 포함하였기 때문이고 그 파드는 Pending 상태로 남을 것이다.
@@ -977,10 +977,10 @@ zk-1 0/1 Pending 0 0s
```shell
kubectl drain $(kubectl get pod zk-2 --template {{.spec.nodeName}}) --ignore-daemonsets --force --delete-local-data
-node "kubernetes-minion-group-i4c4" cordoned
+node "kubernetes-node-i4c4" cordoned
-WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-minion-group-i4c4, kube-proxy-kubernetes-minion-group-i4c4; Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-dyrog
-WARNING: Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-dyrog; Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-minion-group-i4c4, kube-proxy-kubernetes-minion-group-i4c4
+WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-node-i4c4, kube-proxy-kubernetes-node-i4c4; Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-dyrog
+WARNING: Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-dyrog; Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-node-i4c4, kube-proxy-kubernetes-node-i4c4
There are pending pods when an error occurred: Cannot evict pod as it would violate the pod's disruption budget.
pod/zk-2
```
@@ -1017,9 +1017,9 @@ numChildren = 0
[`kubectl uncordon`](/docs/reference/generated/kubectl/kubectl-commands/#uncordon) 이용하여 첫 노드의 통제를 풀자.
```shell
-kubectl uncordon kubernetes-minion-group-pb41
+kubectl uncordon kubernetes-node-pb41
-node "kubernetes-minion-group-pb41" uncordoned
+node "kubernetes-node-pb41" uncordoned
```
`zk-1`은 이 노드에서 재스케쥴된다. `zk-1`이 Running과 Ready가 될 때까지 기다리자.
@@ -1062,11 +1062,11 @@ kubectl drain $(kubectl get pod zk-2 --template {{.spec.nodeName}}) --ignore-dae
출력은
```
-node "kubernetes-minion-group-i4c4" already cordoned
-WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-minion-group-i4c4, kube-proxy-kubernetes-minion-group-i4c4; Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-dyrog
+node "kubernetes-node-i4c4" already cordoned
+WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, or DaemonSet: fluentd-cloud-logging-kubernetes-node-i4c4, kube-proxy-kubernetes-node-i4c4; Ignoring DaemonSet-managed pods: node-problem-detector-v0.1-dyrog
pod "heapster-v1.2.0-2604621511-wht1r" deleted
pod "zk-2" deleted
-node "kubernetes-minion-group-i4c4" drained
+node "kubernetes-node-i4c4" drained
```
이번엔 `kubectl drain` 이 성공한다.
@@ -1074,11 +1074,11 @@ node "kubernetes-minion-group-i4c4" drained
`zk-2`가 재스케줄되도록 두번째 노드의 통제를 풀어보자.
```shell
-kubectl uncordon kubernetes-minion-group-ixsl
+kubectl uncordon kubernetes-node-ixsl
```
```
-node "kubernetes-minion-group-ixsl" uncordoned
+node "kubernetes-node-ixsl" uncordoned
```
`kubectl drain`을 `PodDisruptionBudget`과 결합하면 유지보수중에도 서비스를 가용하게 할 수 있다. drain으로 노드를 통제하고 유지보수를 위해 노드를 오프라인하기 전에 파드를 추출하기 위해 사용한다면 서비스는 혼란 예산을 표기한 서비스는 그 예산이 존중은 존중될 것이다. 파드가 즉각적으로 재스케줄 할 수 있도록 항상 중요 서비스를 위한 추가 용량을 할당해야 한다.
diff --git a/content/ko/docs/tutorials/stateless-application/expose-external-ip-address.md b/content/ko/docs/tutorials/stateless-application/expose-external-ip-address.md
index 6f005b28aa..23aeaa2165 100644
--- a/content/ko/docs/tutorials/stateless-application/expose-external-ip-address.md
+++ b/content/ko/docs/tutorials/stateless-application/expose-external-ip-address.md
@@ -6,7 +6,8 @@ weight: 10
{{% capture overview %}}
-이 페이지에서는 외부 IP 주소를 노출하는 쿠버네티스 서비스 오브젝트를 생성하는 방법에 대해 설명한다.
+이 페이지에서는 외부 IP 주소를 노출하는
+쿠버네티스 서비스 오브젝트를 생성하는 방법에 대해 설명한다.
{{% /capture %}}
@@ -15,9 +16,13 @@ weight: 10
* [kubectl](/docs/tasks/tools/install-kubectl/)을 설치한다.
- * Google Kubernetes Engine 또는 Amazon Web Services와 같은 클라우드 공급자를 사용하여 쿠버네티스 클러스터를 생성한다. 이 튜토리얼은 [외부 로드 밸런서](/docs/tasks/access-application-cluster/create-external-load-balancer/)를 생성하는데, 클라우드 공급자가 필요하다.
+ * Google Kubernetes Engine 또는 Amazon Web Services와 같은 클라우드 공급자를 사용하여
+쿠버네티스 클러스터를 생성한다.
+이 튜토리얼은 [외부 로드 밸런서](/docs/tasks/access-application-cluster/create-external-load-balancer/)를 생성하는데,
+클라우드 공급자가 필요하다.
- * `kubectl`이 쿠버네티스 API 서버와 통신하도록 설정한다. 자세한 내용은 클라우드 공급자의 설명을 참고한다.
+ * `kubectl`이 쿠버네티스 API 서버와 통신하도록 설정한다.
+ 자세한 내용은 클라우드 공급자의 설명을 참고한다.
{{% /capture %}}
@@ -37,12 +42,18 @@ weight: 10
1. 클러스터에서 Hello World 애플리케이션을 실행한다.
- kubectl run hello-world --replicas=5 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0 --port=8080
+{{< codenew file="service/load-balancer-example.yaml" >}}
- 위의 명령어는 [디플로이먼트](/docs/concepts/workloads/controllers/deployment/)
+```shell
+kubectl apply -f https://k8s.io/examples/service/load-balancer-example.yaml
+```
+
+
+위의 명령어는
+ [디플로이먼트](/docs/concepts/workloads/controllers/deployment/)
오브젝트와 관련된
[레플리카 셋](/docs/concepts/workloads/controllers/replicaset/)
- 오브젝트를 생성한다. 레플리카 셋은 다섯 개의
+ 오브젝트를 생성한다. 레플리카 셋은 다섯 개의
[파드](/docs/concepts/workloads/pods/pod/)가 있으며,
각 파드는 Hello World 애플리케이션을 실행한다.
@@ -69,7 +80,8 @@ weight: 10
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-service LoadBalancer 10.3.245.137 104.198.205.71 8080/TCP 54s
- 참고: 만약 외부 IP 주소가 \으로 표시되면 잠시 기다린 다음, 동일한 명령어를 다시 입력한다.
+ 참고: 만약 외부 IP 주소가 \으로 표시되면 잠시 기다린 다음,
+ 동일한 명령어를 다시 입력한다.
1. 서비스에 대한 자세한 정보를 확인한다.
@@ -79,9 +91,9 @@ weight: 10
Name: my-service
Namespace: default
- Labels: run=load-balancer-example
+ Labels: app.kubernetes.io/name=load-balancer-example
Annotations:
- Selector: run=load-balancer-example
+ Selector: app.kubernetes.io/name=load-balancer-example
Type: LoadBalancer
IP: 10.3.245.137
LoadBalancer Ingress: 104.198.205.71
@@ -93,10 +105,13 @@ weight: 10
서비스에 의해 노출된 외부 IP 주소 (`LoadBalancer Ingress`)를 기억해두자.
예시에서 외부 IP 주소는 104.198.205.71이다.
- 그리고 `Port`와`NodePort`의 값을 기억해두자. 예시에서 `Port`는 8080이고 `NodePort`는 32377이다.
+ 그리고 `Port`와`NodePort`의 값을 기억해두자.
+ 예시에서 `Port`는 8080이고 `NodePort`는 32377이다.
1. 위의 출력 결과를 통해, 서비스에 여러 엔드포인트가 있음을 알 수 있다.
- 10.0.0.6:8080,10.0.1.6:8080,10.0.1.7:8080 + 2. 이 주소는 Hello World 애플리케이션을 실행 중인 파드의 내부 주소다. 해당 주소가 파드 주소인지 확인하려면, 아래 명령어를 입력하면 된다.
+ 10.0.0.6:8080,10.0.1.6:8080,10.0.1.7:8080 + 2.
+ 이 주소는 Hello World 애플리케이션을 실행 중인 파드의 내부 주소다.
+ 해당 주소가 파드 주소인지 확인하려면, 아래 명령어를 입력하면 된다.
kubectl get pods --output=wide
@@ -109,13 +124,16 @@ weight: 10
hello-world-2895499144-o4z13 ... 10.0.1.7 gke-cluster-1-default-pool-e0b8d269-1afc
hello-world-2895499144-segjf ... 10.0.2.5 gke-cluster-1-default-pool-e0b8d269-cpuc
-1. Hello World 애플리케이션에 접근하기 위해 외부 IP 주소 (`LoadBalancer Ingress`)를 사용한다.
+1. Hello World 애플리케이션에 접근하기 위해
+ 외부 IP 주소 (`LoadBalancer Ingress`)를 사용한다.
curl http://:
``는 서비스의 외부 IP 주소 (`LoadBalancer Ingress`)를 의미하며,
- ``는 서비스 정보에서 `Port` 값을 의미한다.
- 만약 minikube를 사용하고 있다면, `minikube service my-service` 명령어를 통해 자동으로 브라우저 내에서 Hello World 애플리케이션에 접근할 수 있다.
+ ``는 서비스 정보에서 `Port` 값을
+ 의미한다.
+ 만약 minikube를 사용하고 있다면, `minikube service my-service` 명령어를 통해,
+ 자동으로 브라우저 내에서 Hello World 애플리케이션에 접근할 수 있다.
성공적인 요청에 대한 응답으로 hello 메세지가 나타난다.
@@ -130,7 +148,8 @@ weight: 10
kubectl delete services my-service
-Hello World 애플리케이션을 실행 중인 디플로이먼트, 레플리카 셋, 파드를 삭제하려면, 아래의 명령어를 입력한다.
+Hello World 애플리케이션을 실행 중인 디플로이먼트, 레플리카 셋, 파드를 삭제하려면,
+아래의 명령어를 입력한다.
kubectl delete deployment hello-world
@@ -139,5 +158,6 @@ Hello World 애플리케이션을 실행 중인 디플로이먼트, 레플리카
{{% capture whatsnext %}}
-[애플리케이션과 서비스 연결하기](/docs/concepts/services-networking/connect-applications-service/)에 대해 더 배워 본다.
+[애플리케이션과 서비스 연결하기](/docs/concepts/services-networking/connect-applications-service/)에 대해
+더 배워 본다.
{{% /capture %}}
diff --git a/content/zh/docs/user-guide/deployment.yaml b/content/ko/examples/controllers/replication.yaml
similarity index 60%
rename from content/zh/docs/user-guide/deployment.yaml
rename to content/ko/examples/controllers/replication.yaml
index 8cdf1692ef..6eff0b9b57 100644
--- a/content/zh/docs/user-guide/deployment.yaml
+++ b/content/ko/examples/controllers/replication.yaml
@@ -1,18 +1,16 @@
-apiVersion: apps/v1beta1
-kind: Deployment
+apiVersion: v1
+kind: ReplicationController
metadata:
- name: nginx-deployment
- labels:
- name: nginx-deployment
+ name: nginx
spec:
replicas: 3
selector:
- matchLabels:
- name: nginx
+ app: nginx
template:
metadata:
+ name: nginx
labels:
- name: nginx
+ app: nginx
spec:
containers:
- name: nginx
diff --git a/content/ko/examples/service/load-balancer-example.yaml b/content/ko/examples/service/load-balancer-example.yaml
new file mode 100644
index 0000000000..ea88fd1548
--- /dev/null
+++ b/content/ko/examples/service/load-balancer-example.yaml
@@ -0,0 +1,21 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app.kubernetes.io/name: load-balancer-example
+ name: hello-world
+spec:
+ replicas: 5
+ selector:
+ matchLabels:
+ app.kubernetes.io/name: load-balancer-example
+ template:
+ metadata:
+ labels:
+ app.kubernetes.io/name: load-balancer-example
+ spec:
+ containers:
+ - image: gcr.io/google-samples/node-hello:1.0
+ name: hello-world
+ ports:
+ - containerPort: 8080
diff --git a/content/pt/case-studies/chinaunicom/chinaunicom_featured_logo.png b/content/pt/case-studies/chinaunicom/chinaunicom_featured_logo.png
new file mode 100644
index 0000000000..f90ff1e509
Binary files /dev/null and b/content/pt/case-studies/chinaunicom/chinaunicom_featured_logo.png differ
diff --git a/content/pt/case-studies/chinaunicom/index.html b/content/pt/case-studies/chinaunicom/index.html
new file mode 100644
index 0000000000..63131d0031
--- /dev/null
+++ b/content/pt/case-studies/chinaunicom/index.html
@@ -0,0 +1,96 @@
+---
+title: Estudo de caso China Unicom
+
+linkTitle: chinaunicom
+case_study_styles: true
+cid: caseStudies
+css: /css/style_case_studies.css
+logo: chinaunicom_featured_logo.png
+featured: true
+weight: 1
+quote: >
+ O Kubernetes melhorou nossa experiência usando a infraestrutura de nuvem. Atualmente, não há tecnologia alternativa que possa substituí-lo.
+---
+
+
+
ESTUDO DE CASO:
China Unicom: Como o Kubernetes alavancou a utilização de recursos, aumentando sua eficiência operacional e menores custos em TI
+
+
+
+
+
+
+ Empresa China Unicom Localização Beijing, China Indústria Telecom
+
+
+
+
+
+
+
Desafio
+ A China Unicom é uma das três principais operadoras de telecomunicações da China e, para atender seus 300 milhões de usuários, a empresa administra vários data centers com milhares de servidores em cada um, usando Docker Contêiner, VMWare e OpenStack em sua infra-estrutura desde 2016. Infelizmente, "a taxa de utilização de recursos era relativamente baixa", diz Chengyu Zhang, líder do Grupo de Pesquisa e Desenvolvimento de Tecnologia de Plataforma, "e não tínhamos uma plataforma de nuvem para acomodar nossas centenas de aplicativos". Outrora uma empresa totalmente estatal, a China Unicom, nos últimos anos, obteve investimentos privados da BAT (Baidu, Alibaba, Tencent) e JD.com, e agora está se concentrando no desenvolvimento interno usando tecnologia open source, ao invés de produtos comerciais. Como tal, a equipe do China Unicom Lab de Zhang começou a procurar por um framework de orquestração que fosse de código aberto para sua infraestrutura de nuvem.
+
+
Solução
+ Por causa de seu crescimento rápido e comunidade madura de código aberto, o Kubernetes foi uma escolha natural para a China Unicom. A plataforma de nuvem habilitada para Kubernetes da empresa agora hospeda 50 microsserviços e todo o novo desenvolvimento daqui para frente. "O Kubernetes melhorou nossa experiência usando a infraestrutura de nuvem", diz Zhang. "Atualmente, não há tecnologia alternativa que possa substituí-lo." A China Unicom também usa o Istio para sua estrutura de microsserviço, Envoy, CoreDNS e Fluentd.
+
+
Impacto
+ Na China Unicom, o Kubernetes melhorou a eficiência operacional e de desenvolvimento. A utilização de recursos aumentou de 20 a 50%, diminuindo os custos de infraestrutura de TI, e o tempo de implantação passou de algumas horas para 5 a 10 minutos. "Isso se deve principalmente à autocorreção e à escalabilidade, para que possamos aumentar nossa eficiência em operação e manutenção", diz Zhang. "Por exemplo, atualmente temos apenas cinco pessoas mantendo nossos múltiplos sistemas. Nós nunca poderíamos imaginar que podemos alcançar essa escalabilidade em tão pouco tempo".
+
+
+
+
+
+
+
+ "O Kubernetes melhorou nossa experiência usando a infraestrutura em nuvem. Atualmente, não há tecnologia alternativa que possa substituí-lo."
+ - Chengyu Zhang, Líder do Grupo de Pesquisa e Desenvolvimento em Tecnologia de Plataforma, China Unicom
+
+
+
+
+
Com mais de 300 milhões de usuários, a China Unicom é uma das três principais operadoras de telecomunicações do país.
+
+ Nos bastidores, a empresa administra vários datacenters com milhares de servidores em cada um, usando contêineres Docker, infra-estrutura VMWare e OpenStack desde 2016. Infelizmente, "a taxa de utilização de recursos foi relativamente baixa", diz Chengyu Zhang, líder de pesquisa e desenvolvimento de plataformas tecnológicas. "e não tínhamos uma plataforma de nuvem para acomodar nossas centenas de aplicativos".
+ A equipe de Zhang, responsável por novas tecnologias, pesquisa e desenvolvimento e plataformas, decidiu encontrar uma solução de gerenciamento de TI. Anteriormente uma empresa totalmente estatal, a China Unicom tem, nos últimos anos, feito investimentos privados da BAT (Baidu, Alibaba, Tencent) e da JD.com, e agora está se concentrando no desenvolvimento local usando tecnologia open source, ao invés de produtos comerciais. Por esse motivo, a equipe começou a procurar por um framework de orquestração que fosse de código aberto para sua infraestrutura de nuvem.
+
+
+
+
+
+ "Nós nunca poderíamos imaginar que alcançaríamos essa escalabilidade em tão pouco tempo." - Chengyu Zhang, Líder do Grupo de Tecnologia de Plataforma de Pesquisa e Desenvolvimento, China Unicom
+
+
+
+
+
+ Embora a China Unicom já estivesse usando o Mesos para um sistema central de operadoras de telecomunicações, a equipe sentiu que o Kubernetes era uma escolha natural para a nova plataforma de nuvem. "A principal razão foi que tem uma comunidade madura", diz Zhang. "Ela cresce muito rapidamente e, portanto, podemos aprender muito com as melhores práticas das outras pessoas". A China Unicom também usa o Istio para sua estrutura de microsserviço, Envoy, CoreDNS e Fluentd.
+ A plataforma de nuvem habilitada para Kubernetes da empresa agora hospeda 50 microsserviços e todo o novo desenvolvimento daqui para frente. Os desenvolvedores da China Unicom podem facilmente aproveitar a tecnologia por meio de APIs, sem fazer o trabalho de desenvolvimento por conta própria. A plataforma de nuvem fornece 20 a 30 serviços conectados à plataforma PaaS de data center da empresa, além de oferecer suporte a análises de big data para usuários internos nas filiais das 31 províncias da China.
+ "O Kubernetes melhorou nossa experiência usando a infraestrutura de nuvem", diz Zhang. "Atualmente, não há tecnologia alternativa que possa substituí-lo."
+
+
+
+
+ "Essa tecnologia é relativamente complicada, mas quando os desenvolvedores se acostumarem, eles poderão desfrutar de todos os benefícios." - Jie Jia , Membro da Plataforma de Tecnologia de I & D, China Unicom span>
+
+
+
+
+
+ Na verdade, o Kubernetes aumentou a eficiência operacional e de desenvolvimento na China Unicom. A utilização de recursos aumentou de 20 a 50%, diminuindo os custos de infraestrutura de TI, e o tempo de implantação passou de algumas horas para 5 a 10 minutos. "Isso se deve principalmente à auto-correção e escalabilidade do Kubernetes, para que possamos aumentar nossa eficiência em operação e manutenção", diz Zhang. "Por exemplo, atualmente temos apenas cinco pessoas mantendo nossos múltiplos sistemas".
+ Com os ganhos que a China Unicom experimentou com o Kubernetes, Zhang e sua equipe estão ansiosos para devolver à comunidade. Isso começa com a participação em encontros e conferências, e oferecendo conselhos para outras empresas que estão considerando um caminho semelhante. "Especialmente para as empresas que têm um sistema tradicional de computação em nuvem, eu realmente recomendo que elas se juntem à comunidade de computação nativa da nuvem", diz Zhang.
+
+
+
+
+ "As empresas podem usar os serviços gerenciados oferecidos por empresas como a Rancher, porque eles já personalizaram essa tecnologia, e você pode aproveitar essa tecnologia com facilidade." - Jie Jia, membro da Plataforma de Tecnologia de P&D, China Unicom
+
+
+
+ Jie Jia, membro da equipe de Tecnologia de P&D da Plataforma, acrescenta que, embora "essa tecnologia seja relativamente complicada, desde que os desenvolvedores se acostumem a ela, eles poderão desfrutar de todos os benefícios". E Zhang ressalta que, em sua própria experiência com a nuvem de máquinas virtuais, "o Kubernetes e essas tecnologias nativas de nuvem são relativamente mais simples".
+ Além disso, "as empresas podem usar os serviços gerenciados oferecidos por empresas como Rancher, porque eles já personalizaram essa tecnologia", diz Jia. "Você pode facilmente aproveitar essa tecnologia".
+ Olhando para o futuro, a China Unicom planeja desenvolver mais aplicativos no Kubernetes, com foco em big data e aprendizado de máquina. A equipe continua a otimizar a plataforma de nuvem que construiu e espera passar no teste de conformidade para se juntar ao programa de Certificação Kubernetes com 32 distros e plataformas compatíveis. Eles também esperam, um dia, contribuir com o código para a comunidade.
+ Se isso soa ambicioso, é porque os resultados que eles obtiveram ao adotar o Kubernetes foram além de suas maiores expectativas. Zhang diz: "Nós nunca poderíamos imaginar que podemos alcançar essa escalabilidade em tão pouco tempo".
+
+
+
+
diff --git a/content/pt/docs/concepts/architecture/cloud-controller.md b/content/pt/docs/concepts/architecture/cloud-controller.md
index 8dc08ea213..a708b1998e 100644
--- a/content/pt/docs/concepts/architecture/cloud-controller.md
+++ b/content/pt/docs/concepts/architecture/cloud-controller.md
@@ -226,9 +226,9 @@ Os seguintes provedores de nuvem implementaram CCMs:
* [Digital Ocean](https://github.com/digitalocean/digitalocean-cloud-controller-manager)
* [Oracle](https://github.com/oracle/oci-cloud-controller-manager)
-* [Azure](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/azure)
-* [GCE](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/gce)
-* [AWS](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/aws)
+* [Azure](https://github.com/kubernetes/cloud-provider-azure)
+* [GCP](https://github.com/kubernetes/cloud-provider-gcp)
+* [AWS](https://github.com/kubernetes/cloud-provider-aws)
* [BaiduCloud](https://github.com/baidu/cloud-provider-baiducloud)
* [Linode](https://github.com/linode/linode-cloud-controller-manager)
diff --git a/content/pt/docs/concepts/cluster-administration/_index.md b/content/pt/docs/concepts/cluster-administration/_index.md
new file mode 100755
index 0000000000..75c4425176
--- /dev/null
+++ b/content/pt/docs/concepts/cluster-administration/_index.md
@@ -0,0 +1,5 @@
+---
+title: "Administração de Cluster"
+weight: 100
+---
+
diff --git a/content/pt/docs/concepts/cluster-administration/addons.md b/content/pt/docs/concepts/cluster-administration/addons.md
new file mode 100644
index 0000000000..a9e0f55d9e
--- /dev/null
+++ b/content/pt/docs/concepts/cluster-administration/addons.md
@@ -0,0 +1,58 @@
+---
+title: Instalando Addons
+content_template: templates/concept
+---
+
+{{% capture overview %}}
+
+
+Addons estendem a funcionalidade do Kubernetes.
+
+Esta página lista alguns dos add-ons e links com suas respectivas instruções de instalação.
+
+Os Add-ons de cada sessão são classificados em ordem alfabética - a ordem não implica qualquer status preferencial.
+
+{{% /capture %}}
+
+
+{{% capture body %}}
+
+## Rede e Política de Rede
+
+
+* [ACI](https://www.github.com/noironetworks/aci-containers) fornece rede integrada de contêineres e segurança de rede com a Cisco ACI.
+* [Calico](https://docs.projectcalico.org/latest/getting-started/kubernetes/) é um provedor de políticas de rede e rede L3 seguro.
+* [Canal](https://github.com/tigera/canal/tree/master/k8s-install) une Flannel e Calico, fornecendo rede e política de rede.
+* [Cilium](https://github.com/cilium/cilium) é um plug-in de políticas de rede e rede L3 que pode impor políticas de HTTP / API / L7 de forma transparente. Tanto o modo de roteamento quanto o de sobreposição / encapsulamento são suportados.
+* [CNI-Genie](https://github.com/Huawei-PaaS/CNI-Genie) permite que o Kubernetes se conecte facilmente a uma variedade de plugins CNI, como Calico, Canal, Flannel, Romana ou Weave.
+* [Contiv](http://contiv.github.io) fornece um rede configurável (L3 nativa usando BGP, sobreposição usando vxlan, L2 clássico e Cisco-SDN / ACI) para vários casos de uso e uma estrutura rica de políticas de rede. O projeto Contiv é totalmente [open source](http://github.com/contiv). O script de [instalação](http://github.com/contiv/install) fornece opções de instalação com ou sem kubeadm.
+* [Contrail](http://www.juniper.net/us/en/products-services/sdn/contrail/contrail-networking/), baseado no [Tungsten Fabric](https://tungsten.io), é um projeto open source, multi-cloud com uma rede virtualizada e com uma plataforma de gerenciamento de políticas de rede. O Contrail e o Tungsten Fabric estão integrados a sistemas de orquestração, como Kubernetes, OpenShift, OpenStack e Mesos, e fornecem modos de isolamento para máquinas virtuais, containers / pods e cargas em servidores físicos.
+* [Flannel](https://github.com/coreos/flannel/blob/master/Documentation/kubernetes.md) é um provedor de rede de sobreposição que pode ser usado com o Kubernetes.
+* [Knitter](https://github.com/ZTE/Knitter/) é uma solução de rede que suporta múltiplas redes no Kubernetes.
+* [Multus](https://github.com/Intel-Corp/multus-cni) é um plugin Multi para suporte a várias redes no Kubernetes para suportar todos os plugins CNI (por exemplo, Calico, Cilium, Contiv, Flannel), além das cargas de trabalho baseadas em SRIOV, DPDK, OVS-DPDK e VPP no Kubernetes.
+* [NSX-T](https://docs.vmware.com/en/VMware-NSX-T/2.0/nsxt_20_ncp_kubernetes.pdf) O Plugin de contêiner (NCP) fornece integração entre o VMware NSX-T e orquestradores de contêineres como o Kubernetes, além da integração entre o NSX-T e as plataformas CaaS / PaaS baseadas em contêiner, como Pivotal Container Service (PKS) e OpenShift.
+* [Nuage](https://github.com/nuagenetworks/nuage-kubernetes/blob/v5.1.1-1/docs/kubernetes-1-installation.rst) é uma plataforma SDN que fornece uma rede baseada em políticas entre os Pods Kubernetes e os ambientes não-Kubernetes, com visibilidade e monitoramento de segurança.
+* [Romana](http://romana.io) é uma solução de rede Camada 3 para redes de pods que também suporta [NetworkPolicy API](/docs/concepts/services-networking/network-policies/). Detalhes da instalação do add-on Kubeadm disponíveis [aqui](https://github.com/romana/romana/tree/master/containerize).
+* [Weave Net](https://www.weave.works/docs/net/latest/kube-addon/) fornece rede e política de rede, continuará trabalhando em ambos os lados de uma partição de rede e não requer um banco de dados externo.
+
+## Descoberta de Serviço
+
+* [CoreDNS](https://coredns.io) é um servidor DNS flexível e extensível que pode ser [instalado](https://github.com/coredns/deployment/tree/master/kubernetes) como DNS dentro do cluster para ser utilizado por pods.
+
+## Visualização & Controle
+
+* [Dashboard](https://github.com/kubernetes/dashboard#kubernetes-dashboard) é uma interface web para gestão do Kubernetes.
+* [Weave Scope](https://www.weave.works/documentation/scope-latest-installing/#k8s) é uma ferramenta gráfica para visualizar contêineres, pods, serviços etc. Use-o em conjunto com o [Weave Cloud account](https://cloud.weave.works/) ou hospede você mesmo a interface do usuário.
+
+## A infraestrutura
+
+* [KubeVirt](https://kubevirt.io/user-guide/docs/latest/administration/intro.html#cluster-side-add-on-deployment) é um add-on para executar máquinas virtuais no Kubernetes. É geralmente executado em clusters em maquina fisica.
+
+
+## Add-ons Legado
+
+Existem vários outros complementos documentados no diretório não mais ultilizados [cluster/addons](https://git.k8s.io/kubernetes/cluster/addons).
+
+Projetos bem mantidos deveriam ser linkados aqui. PRs são bem vindas!
+
+{{% /capture %}}
diff --git a/content/zh/docs/admin/authorization/_index.md b/content/zh/docs/admin/authorization/_index.md
deleted file mode 100644
index 92c3d2174d..0000000000
--- a/content/zh/docs/admin/authorization/_index.md
+++ /dev/null
@@ -1,156 +0,0 @@
----
-approvers:
-- erictune
-- lavalamp
-- deads2k
-- liggitt
-title: 概述
-content_template: templates/concept
----
-
-{{% capture overview %}}
-
-学习有关 Kubernetes 授权的更多信息,包括有关使用支持的授权模块创建策略的详细信息。
-
-{{% /capture %}}
-
-{{% capture body %}}
-
-在 Kubernetes 里,您必须经过身份验证(登录),才能授权您的请求(授予访问权限).。有关认证的信息,请参阅[访问控制概述](/docs/admin/access-the-api/)。
-
-Kubernetes 提供通用的 REST API 请求。这意味着 Kubernetes 授权可以与现有的组织或云提供商的访问控制系统一起使用,该系统可以处理除 Kubernetes API 之外的其他 API。
-
-## 确定请求是允许还是被拒绝
-Kubernetes 使用 API 服务器授权 API 请求。它根据所有策略评估所有请求属性,并允许或拒绝请求。某些策略必须允许 API 请求的所有部分继续进行,这意味着默认情况下是拒绝权限。
-
-(虽然 Kubernetes 使用 API 服务器,访问控制和依赖特定类型对象的特定领域策略由 Admission 控制器处理。)
-
-当配置多个授权模块时,按顺序检查每个模块,如果有任何模块授权请求,则可以继续执行该请求。如果所有模块拒绝请求,则拒绝该请求(HTTP状态代码403)。
-
-## 查看您的请求属性
-
-Kubernetes 仅查看以下API请求属性:
-
-* **user** - 验证期间提供的 `user` 字符串
-* **group** - 认证用户所属的组名列表
-* **“extra"** - 由认证层提供的任意字符串键到字符串值的映射
-* **API** - 指示请求是否用于API资源
-* **Request path** - 诸如`/api`或`/healthz`的其他非资源端点的路径(请参阅[kubectl](#kubectl)).
-* **API request verb** - API 动词 `get`,`list`,`create`,`update`,`patch`,`watch`,`proxy`,`redirect`,`delete`和`deletecollection`用于资源请求。要确定资源 API 端点的请求动词,请参阅**确定下面的请求动词**.
-* **HTTP request verb** - HTTP动词`get`,`post`,`put`和`delete`用于非资源请求
-* **Resource** - 正在访问的资源的ID或名称(仅适用于资源请求)
- --* 对于使用`get`, `update`, `patch`, 和 `delete`动词的资源请求,您必须提供资源名称。
-* **Subresource** - 正在访问的子资源(仅用于资源请求)
-* **Namespace** - 正在被访问的对象的命名空间(仅针对命名空间的资源请求)
-* **API group** - 正在访问的API组(仅用于资源请求). 一个空字符串指定[核心 API 组](/docs/api/).
-
-## 确定请求动词
-
-要确定资源 API 端点的请求动词,请查看所使用的HTTP动词以及请求是否对单个资源或资源集合进行操作:
-
-HTTP动词| 请求动词
----------- | ---------------
-POST | 创建
-GET,HEAD | 获取(个人资源),列表(集合)
-PUT | 更新
-PATCH | 补丁
-DELETE| 删除(个人资源),删除(收藏)
-
-Kubernetes 有时会使用专门的动词检查授权以获得额外的权限。例如:
-
-* [PodSecurityPolicy](/docs/concepts/policy/pod-security-policy/)在`extensions` API组中的`podsecuritypolicies`资源上检查`use`动词的授权。
-* [RBAC](/docs/admin/authorization/rbac/#privilege-escalation-prevention-and-bootstrapping) 在`rbac.authorization.k8s.io` API组中的`roles`和`clusterroles`资源上检查`bind`动词的授权。
-* [认证](/docs/admin/authentication/) 在核心API组中的`users`,`groups`和`serviceaccounts`上的`impersonate`动词的授权以及`authentication.k8s.io` API组中的`userextras`进行层次检查。
-
-## 授权模块
-* **ABAC模式** - 基于属性的访问控制(ABAC)定义了访问控制范例,通过使用将属性组合在一起的策略来授予用户访问权限。策略可以使用任何类型的属性(用户属性,资源属性,对象,环境属性等)。要了解有关使用ABAC模式的更多信息,请参阅[ABAC模式](/docs/admin/authorization/abac/)
-* **RBAC模式** - 基于角色的访问控制(RBAC)是一种根据企业内个人用户的角色来调整对计算机或网络资源的访问的方法。在这种情况下,访问是单个用户执行特定任务(例如查看,创建或修改文件)的能力。要了解有关使用RBAC模式的更多信息,请参阅[RBAC模式](/docs/admin/authorization/rbac/)
-*当指定 "RBAC"(基于角色的访问控制)使用 "rbac.authorization.k8s.io" API组来驱动授权决定时,允许管理员通过Kubernetes API动态配置权限策略.
-.. *截至1.6 RBAC模式是测试版.
-.. *要启用RBAC,请使用 `--authorization-mode=RBAC` 启动 apiserver.
-* **Webhook模式** - WebHook 是HTTP回调:发生事件时发生的HTTP POST; 通过HTTP POST简单的事件通知. 实施 WebHooks 的 Web 应用程序将在某些事情发生时向URL发送消息. 要了解有关使用Webhook模式的更多信息,请参阅[Webhook模式](/docs/admin/authorization/webhook/)
-* **自定义模块** - 您可以创建使用Kubernetes的自定义模块. 要了解更多信息,请参阅下面的**自定义模块**。
-
-### 自定义模块
-可以相当容易地开发其他实现,APIserver 调用 Authorizer 接口:
-
-```go
-type Authorizer interface {
- Authorize(a Attributes) error
-}
-```
-
-以确定是否允许每个API操作.
-
-授权插件是实现此接口的模块.授权插件代码位于 `pkg/auth/authorizer/$MODULENAME` 中。
-
-授权模块可以完全实现,也可以拨出远程授权服务。 授权模块可以实现自己的缓存,以减少具有相同或相似参数的重复授权调用的成本。 开发人员应该考虑缓存和撤销权限之间的交互。
-
-#### 检查API访问
-
-Kubernetes 将 `subjectaccessreviews.v1.authorization.k8s.io` 资源公开为允许外部访问API授权者决策的普通资源。 无论您选择使用哪个授权器,您都可以使用`SubjectAccessReview`发出一个`POST`,就像webhook授权器的`apis/authorization.k8s.io/v1/subjectaccessreviews` 端点一样,并回复一个响应。 例如:
-
-
-```bash
-kubectl create --v=8 -f - << __EOF__
-{
- "apiVersion": "authorization.k8s.io/v1",
- "kind": "SubjectAccessReview",
- "spec": {
- "resourceAttributes": {
- "namespace": "kittensandponies",
- "verb": "get",
- "group": "unicorn.example.org",
- "resource": "pods"
- },
- "user": "jane",
- "group": [
- "group1",
- "group2"
- ],
- "extra": {
- "scopes": [
- "openid",
- "profile"
- ]
- }
- }
-}
-__EOF__
-
---- snip lots of output ---
-
-I0913 08:12:31.362873 27425 request.go:908] Response Body: {"kind":"SubjectAccessReview","apiVersion":"authorization.k8s.io/v1","metadata":{"creationTimestamp":null},"spec":{"resourceAttributes":{"namespace":"kittensandponies","verb":"GET","group":"unicorn.example.org","resource":"pods"},"user":"jane","group":["group1","group2"],"extra":{"scopes":["openid","profile"]}},"status":{"allowed":true}}
-subjectaccessreview "" created
-```
-
-这对于调试访问问题非常有用,因为您可以使用此资源来确定授权者授予哪些访问权限。
-
-## 为您的授权模块使用标志
-
-您的策略中必须包含一个标志,以指出您的策略包含哪个授权模块:
-
-可以使用以下标志:
- - `--authorization-mode=ABAC` 基于属性的访问控制(ABAC)模式允许您使用本地文件配置策略。
- - `--authorization-mode=RBAC` 基于角色的访问控制(RBAC)模式允许您使用Kubernetes API创建和存储策略.
- - `--authorization-mode=Webhook` WebHook是一种HTTP回调模式,允许您使用远程REST管理授权。
- - `--authorization-mode=AlwaysDeny` 此标志阻止所有请求. 仅使用此标志进行测试。
- - `--authorization-mode=AlwaysAllow` 此标志允许所有请求. 只有在您不需要API请求授权的情况下才能使用此标志。
-
-您可以选择多个授权模块. 如果其中一种模式为 `AlwaysAllow`,则覆盖其他模式,并允许所有API请求。
-
-## 版本控制
-
-对于版本 1.2,配置了 kube-up.sh 创建的集群,以便任何请求都不需要授权。
-
-从版本 1.3 开始,配置由 kube-up.sh 创建的集群,使得 ABAC 授权模块处于启用状态。但是,其输入文件最初设置为允许所有用户执行所有操作,集群管理员需要编辑该文件,或者配置不同的授权器来限制用户可以执行的操作。
-
-{{% /capture %}}
-{{% capture whatsnext %}}
-
-* 要学习有关身份验证的更多信息,请参阅**身份验证**[控制访问 Kubernetes API](docs/admin/access-the-api/)。
-* 要了解有关入学管理的更多信息,请参阅[使用 Admission 控制器](docs/admin/admission-controllers/)。
-*
-{{% /capture %}}
-
-
diff --git a/content/zh/docs/admin/daemon.yaml b/content/zh/docs/admin/daemon.yaml
deleted file mode 100644
index c5cd14a592..0000000000
--- a/content/zh/docs/admin/daemon.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-apiVersion: extensions/v1beta1
-kind: DaemonSet
-metadata:
- name: prometheus-node-exporter
-spec:
- template:
- metadata:
- name: prometheus-node-exporter
- labels:
- daemon: prom-node-exp
- spec:
- containers:
- - name: c
- image: prom/prometheus
- ports:
- - containerPort: 9090
- hostPort: 9090
- name: serverport
diff --git a/content/zh/docs/admin/high-availability/_index.md b/content/zh/docs/admin/high-availability/_index.md
deleted file mode 100644
index d0f624c812..0000000000
--- a/content/zh/docs/admin/high-availability/_index.md
+++ /dev/null
@@ -1,214 +0,0 @@
----
-title: 构建高可用集群
----
-
-
-## 简介
-
-
-本文描述了如何构建一个高可用(high-availability, HA)的Kubernetes集群。这是一个非常高级的主题。
-
-对于仅希望使用Kubernetes进行试验的用户,推荐使用更简单的配置工具进行搭建,例如:
-[Minikube](/docs/getting-started-guides/minikube/),或者尝试使用[Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine/) 来运行Kubernetes。
-
-此外,当前在我们的端到端(e2e)测试环境中,没有对Kubernetes高可用的支持进行连续测试。我们将会增加这个连续测试项,但当前对单节点master的安装测试得更加严格。
-
-{{< toc >}}
-
-## 概览
-
-
-搭建一个正真可靠,高度可用的分布式系统需要若干步骤。这类似于穿上内衣,裤子,皮带,背带,另一套内衣和另一套裤子。我们会详细介绍每一个步骤,但先在这里给出一个总结来帮助指导用户。
-
-
-相关步骤如下:
-
- * [创建可靠的组成节点,共同形成我们的高可用主节点实现。](#可靠的节点)
- * [使用etcd集群,搭建一个冗余的,可靠的存储层。](#建立一个冗余的,可靠的存储层)
- * [启动具有备份和负载均衡能力的Kubernetes API 服务](#复制的API服务)
- * [搭建运行master选举的Kubernetes scheduler和controller-manager守护程序](#进行master选举的组件)
-
-系统完成时看起来应该像这样:
-
-
-
-
-## 初始配置
-
-
-本文假设你正在搭建一个3节点的主节点集群,每个节点上都运行者某种Linux系统。
-
-指南中的示例使用Debian发行版,但它们应该可以被轻松移植到其他发行版上。
-
-同样的,不管在公有云还是私有云亦或是裸机上,这个配置都应该可以运行。
-
-
-从一个现成的单主节点集群开始是实现一个高可用Kubernetes集群的最简单的方法。这篇指导 [https://get.k8s.io](https://get.k8s.io) 描述了在多种平台上方便的安装一个单主节点集群的方法。
-
-## 可靠的节点
-
-
-我们在每个主节点上都将运行数个实现Kubernetes API的进程。使他们可靠的第一步是保证在发生故障时,每一个进程都可以自动重启。为了实现这个目标,我们需要安装一个进程监视器。我们选择了在每个工作者节点上都会运行的`kubelet`进程。这会带来便利性,因为我们使用了容器来分发我们的二进制文件,所以我们能够为每一个守护程序建立资源限制并省查它们的资源消耗。当然,我们也需要一些手段来监控kubelete本身(在此监测监控者本身是一个有趣的话题)。对于Debian系统我们选择了monit,但也有许多可替代的工具。例如在基于systemd的系统上(如RHEL, CentOS),你可以运行 'systemctl enable kubelet'。
-
-
-如果你是从标准的Kubernetes安装扩展而来,那么`kubelet`二进制文件应该已经存在于你的系统中。你可以运行`which kubelet`来判断是否确实安装了这个二进制文件。如果没有安装的话,你应该手动安装 [kubelet binary](https://storage.googleapis.com/kubernetes-release/release/v0.19.3/bin/linux/amd64/kubelet),
-[kubelet init file](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/saltbase/salt/kubelet/initd) 和 [default-kubelet](/docs/admin/high-availability/default-kubelet)脚本。
-
-如果使用monit,你还需要安装monit守护程序(`apt-get install monit`)以及[monit-kubelet](/docs/admin/high-availability/monit-kubelet) 和
-[monit-docker](/docs/admin/high-availability/monit-docker) 配置。
-
-在使用systemd的系统上,你可以执行 `systemctl enable kubelet` 和 `systemctl enable docker`。
-
-
-## 建立一个冗余的,可靠的存储层
-
-
-高可用方案的中心基础是一个冗余的,可靠的存储层。高可用的头条规则是保护数据。不管发生了什么,不管什么着了火,只要还有数据,你就可以重建。如果丢掉了数据,你就完了。
-
-
-集群化的etcd已经把你存储的数据复制到了你集群中的所有主节点实例上。这意味着如果要想丢失数据,三个节点的物理(或虚拟)硬盘需要全部同时故障。这种情况发生的概率是比较低的,所以对于许多人来说,运行一个复制的etcd集群可能已经足够的可靠了。你可以将集群数量从3个增大到5个来增加集群的可靠性。如果那样还不够,你可以添加[更多的可靠性到你的存储层](#更加可靠的存储)。
-
-
-### 集群化etcd
-
-
-集群化etcd的完整细节超出了本文范围,你可以在[etcd clustering page](https://github.com/coreos/etcd/blob/master/Documentation/op-guide/clustering.md)找到许多详细内容。这个例子仅走查一个简单的集群建立过程,使用etcd内置的发现功能来构建我们的集群。
-
-
-首先,调用etcd发现服务来创建一个新令牌:
-
-```shell
-curl https://discovery.etcd.io/new?size=3
-```
-
-
-在每个节点上,拷贝 [etcd.yaml](/docs/admin/high-availability/etcd.yaml) 文件到`/etc/kubernetes/manifests/etcd.yaml`。
-
-
-每个节点上的kubelet会动态的监控这个文件夹的内容,并且会按照`etcd.yaml`里对pod的定义创建一个`etcd`服务的实例。
-
-
-请注意,你应该使用上文中获取的令牌URL替换全部三个节点上`etcd.yaml`中的`${DISCOVERY_TOKEN}`项。同时还应该将每个节点上的 `${NODE_NAME}`替换为一个不同的名字(例如:`node-1`),并将 `${NODE_IP}`替换为正确的IP地址。
-
-
-#### 验证你的集群
-
-
-如果已经将这个文件拷贝到所有三个节点,你应该已经搭建起了一个集群化的etcd。你可以在主节点上进行验证:
-```shell
-kubectl exec < pod_name > etcdctl member list
-```
-
-和
-
-```shell
-kubectl exec < pod_name > etcdctl cluster-health
-```
-
-
-你也可以在一个节点上运行 `etcdctl set foo bar`,在另一个节点上运行`etcdctl get foo`来验证集群是否工作正常。
-
-
-### 更加可靠的存储
-
-
-当然,如果你对增加数据的可靠性感兴趣,这里还有一些更深入的选项可以使etcd把它的数据存放在比常规硬盘更可靠的地方(裤带和背带,ftw!)。
-
-
-如果你使用云服务,那么你的提供商通常会为你提供这个特性,例如Google Cloud Platform上的 [Persistent Disk](https://cloud.google.com/compute/docs/disks/persistent-disks) 。它们是可以挂载到你的虚拟机中的块设备持久化存储。其他的云服务提供商提供了类似的解决方案。
-
-
-如果运行于物理机之上,你仍然可以使用iSCSI或者NFS接口通过网络来连接冗余存储。
-此外,你还可以运行一个集群文件系统,比如Gluster或者Ceph。最后,你还可以在你的每个物理机器上运行RAID矩阵。
-
-
-不管你选择如何实现,如果已经选择了使用其中的一个选项,那么你应该保证你的存储被挂载到了每一台机器上。如果你的存储在集群中的三个主节点之间共享,那么你应该在存储上为每一个节点创建一个不同的文件夹。对于所有的这些指导,我们都假设这个存储被挂载到你机器上的`/var/etcd/data`路径。
-
-
-## 复制的API服务
-
-
-在正确搭建复制的etcd之后,我们还需要使用kubelet安装apiserver。
-
-
-
-
-首先,你需要创建初始的日志文件,这样Docker才会挂载一个文件而不是一个文件夹:
-```shell
-touch /var/log/kube-apiserver.log
-```
-
-接下来,你需要在每个节点上创建一个`/srv/kubernetes/`文件夹。这个文件夹包含:
-
- * basic_auth.csv - 基本认证的用户名和密码
- * ca.crt - CA证书
- * known_tokens.csv - 实体(例如kubelet)用来和apiserver通信的令牌
- * kubecfg.crt - 客户端证书,公钥
- * kubecfg.key - 客户端证书,私钥
- * server.cert - 服务端证书,公钥
- * server.key - 服务端证书,私钥
-
-
-创建这个文件夹最简单的方法可以是从一个工作正常的集群的主节点拷贝,或者你也可以手动生成它们。
-
-
-### 启动API服务
-
-
-一旦这些文件已经存在了,拷贝 [kube-apiserver.yaml](/docs/admin/high-availability/kube-apiserver.yaml) 到每个主节点的 `/etc/kubernetes/manifests/`文件夹。
-
-
-kubelet会监控这个文件夹,并且会按照文件里对pod的定义创建一个`kube-apiserver`容器。
-
-
-### 负载均衡
-
-
-现在,你应该有3个全部正常工作的apiserver了。如果搭建了网络负载均衡器,你应该能够通过那个负载均衡器访问你的集群,并且看到负载在apiserver实例间分发。设置负载均衡器依赖于你的平台的实际情况,例如对于Google Cloud Platform的指导可以在[这里](https://cloud.google.com/compute/docs/load-balancing/)找到。
-
-
-请注意,如果使用了身份认证,你可能需要重新生成你的证书,除每个节点的IP地址外额外包含负载均衡器的IP地址。
-
-
-对于部署在集群中的pods, `kubernetes`服务/dns名称应该自动的为主节点提供了负载均衡的endpoint。
-
-
-对于使用API的外部用户(如命令行运行的`kubectl`,持续集成管道或其他客户端)你会希望将他们配置成为访问外部负载均衡器的地址。
-
-
-## 进行Master选举的组件
-
-
-到目前为止,我们已经搭建了状态存储,也搭建好了API服务,但我们还没有运行任何真正改变集群状态的服务,比如controller manager和scheduler。为了可靠的实现这个目标,我们希望在同一时间只有一个参与者在修改集群状态。但是我们希望复制这些参与者的实例以防某个机器宕机。要做到这一点,我们打算在API中使用一个lease-lock来执行master选举。我们会对每一个scheduler和controller-manager使用`--leader-elect`标志,从而在API中使用一个租约来保证同一时间只有一个scheduler和controller-manager的实例正在运行。
-
-
-scheduler和controller-manager可以配置为只和位于它们相同节点(即127.0.0.1)上的API服务通信,也可以配置为使用API服务的负载均衡器的IP地址。不管它们如何配置,当使用`--leader-elect` 时scheduler和controller-manager都将完成上文提到的leader选举过程。
-
-
-为了防止访问API服务失败,选举出的leader不能通过更新租约来选举一个新的leader。当scheduler和controller-manager通过127.0.0.1访问API服务,而相同节点上的API服务不可用时,这一点相当重要。
-
-
-### 安装配置文件
-
-
-首先,在每个节点上创建空白日志文件,这样Docker就会挂载这些文件而不是创建一个新文件夹:
-
-```shell
-touch /var/log/kube-scheduler.log
-touch /var/log/kube-controller-manager.log
-```
-
-
-接下来,在每个节点上配置scheduler和controller manager pods的描述文件。拷贝 [kube-scheduler.yaml](/docs/admin/high-availability/kube-scheduler.yaml) 和 [kube-controller-manager.yaml](/docs/admin/high-availability/kube-controller-manager.yaml) 到`/etc/kubernetes/manifests/` 文件夹。
-
-
-## 结尾
-
-
-此时,你已经完成了master组件的配置(耶!),但你还需要添加工作者节点(噗!)。
-
-
-如果你有一个现成的集群,你只需要在每个节点上简单的重新配置你的kubeletes连接到负载均衡的endpoint并重启它们。
-
-
-如果你搭建的是一个全新的集群,你将需要在每个工作节点上安装kubelet和kube-proxy,并设置 `--apiserver`指向复制的endpoint。
\ No newline at end of file
diff --git a/content/zh/docs/admin/ovs-networking.md b/content/zh/docs/admin/ovs-networking.md
deleted file mode 100644
index 5b4fe7f5f8..0000000000
--- a/content/zh/docs/admin/ovs-networking.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-approvers:
-- thockin
-title: Kubernetes OpenVSwitch GRE/VxLAN 网络
----
-
-本文档介绍了如何使用OpenVSwitch,在跨nodes的pods之间设置网络。
-隧道类型可以是GRE或者是VxLAN。如需在网络内执行大规模隔离时,最好使用VxLAN。
-
-
-
-Kubernetes中Vagrant的设置如下:
-
-docker网桥被brctl生成的Linux网桥(kbr0)所代替,kbr0是具有256个地址空间的子网。总的来说,node会得到10.244.x.0/24的子网,docker上配置使用的网桥会代替默认docker0的网桥。
-
-另外,OVS网桥创建(obr0),并将其作为端口添加到kbr0的网桥中。所有OVS网桥通过GRE隧道连接所有的nodes。因此,每个node都有一个到其他nodes的出站GRE隧道。这个隧道没有必要是一个完整的网状物,但是越像网状结构越好。在网桥上开启STP(生成树)模式以防止环路的发生。
-
-路由规则允许任何10.244.0.0/16通过与隧道相连的OVS网桥到达目标。
-
-
-
-
diff --git a/content/zh/docs/concepts/architecture/cloud-controller.md b/content/zh/docs/concepts/architecture/cloud-controller.md
index dd95033892..efa9ee49db 100644
--- a/content/zh/docs/concepts/architecture/cloud-controller.md
+++ b/content/zh/docs/concepts/architecture/cloud-controller.md
@@ -239,9 +239,9 @@ rules:
* [Digital Ocean](https://github.com/digitalocean/digitalocean-cloud-controller-manager)
* [Oracle](https://github.com/oracle/oci-cloud-controller-manager)
-* [Azure](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/azure)
-* [GCE](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/gce)
-* [AWS](https://github.com/kubernetes/kubernetes/tree/master/pkg/cloudprovider/providers/aws)
+* [Azure](https://github.com/kubernetes/cloud-provider-azure)
+* [GCP](https://github.com/kubernetes/cloud-provider-gcp)
+* [AWS](https://github.com/kubernetes/cloud-provider-aws)
* [BaiduCloud](https://github.com/baidu/cloud-provider-baiducloud)
## 群集管理
diff --git a/content/zh/docs/concepts/cluster-administration/cluster-administration-overview.md b/content/zh/docs/concepts/cluster-administration/cluster-administration-overview.md
index bfed5f8ee2..6017840426 100644
--- a/content/zh/docs/concepts/cluster-administration/cluster-administration-overview.md
+++ b/content/zh/docs/concepts/cluster-administration/cluster-administration-overview.md
@@ -25,7 +25,7 @@ content_template: templates/concept
- 你是打算在你的电脑上尝试 Kubernetes,还是要构建一个高可用的多节点集群?请选择最适合你需求的发行版。
- **如果你正在设计一个高可用集群**,请了解[在多个 zones 中配置集群](/docs/admin/multi-cluster)。
- 你的集群是在**本地**还是**云(IaaS)**上?Kubernetes 不能直接支持混合集群。作为代替,你可以建立多个集群。
- - **如果你在本地配置 Kubernetes**,需要考虑哪种[网络模型](/docs/admin/networking)最适合。一种自定义网络的选项是 [*OpenVSwitch GRE/VxLAN 网络*](/docs/admin/ovs-networking/),它使用 OpenVSwitch 在跨 Kubernetes 节点的 pods 之间建立起网络。
+ - **如果你在本地配置 Kubernetes**,需要考虑哪种[网络模型](/docs/admin/networking)最适合。
- 你的 Kubernetes 在 **裸金属硬件** 还是 **虚拟机(VMs)**上运行?
- 你**只想运行一个集群**,还是打算**活动开发 Kubernetes 项目代码**?如果是后者,请选择一个活动开发的发行版。某些发行版只提供二进制发布版,但提供更多的选择。
- 让你自己熟悉运行一个集群所需的[组件](/docs/admin/cluster-components) 。
diff --git a/content/zh/docs/concepts/cluster-administration/sysctl-cluster.md b/content/zh/docs/concepts/cluster-administration/sysctl-cluster.md
index 3f204dee52..2bcd589ac3 100644
--- a/content/zh/docs/concepts/cluster-administration/sysctl-cluster.md
+++ b/content/zh/docs/concepts/cluster-administration/sysctl-cluster.md
@@ -34,7 +34,10 @@ $ sudo sysctl -a
- `kernel.msg*`(内核中SystemV消息队列相关参数),
- `kernel.sem`(内核中信号量参数),
- `fs.mqueue.*`(内核中POSIX消息队列相关参数),
-- `net.*`(内核中网络配置项相关参数)。
+- `net.*`(内核中网络配置项相关参数),如果它可以在容器命名空间里被更改。然而,也有一些特例
+ (例如,`net.netfilter.nf_conntrack_max` 和
+ `net.netfilter.nf_conntrack_expect_max`
+ 可以在容器命名空间里被更改,但它们是非命名空间的)。
Sysctls中非命名空间级的被称为 _节点级_ ,其必须由集群管理员手动设置,要么通过节点的底层Linux分布方式(例如,通过 `/etc/sysctls.conf`),亦或在特权容器中使用Daemonset。
@@ -71,7 +74,7 @@ Sysctls被分为 _安全的_ 和 _不安全的_ sysctls。同一节点上的pods
sysctls。 _不安全的_ sysctls 会打上kubelet标识,在逐节点的基础上被启用,例如:
```shell
-$ kubelet --experimental-allowed-unsafe-sysctls 'kernel.msg*,net.ipv4.route.min_pmtu' ...
+$ kubelet --experimental-allowed-unsafe-sysctls 'kernel.msg*,net.core.somaxconn' ...
```
只有 _命名空间级_ sysctls 可以使用该方法启用。
@@ -89,7 +92,7 @@ metadata:
name: sysctl-example
annotations:
security.alpha.kubernetes.io/sysctls: kernel.shm_rmid_forced=1
- security.alpha.kubernetes.io/unsafe-sysctls: net.ipv4.route.min_pmtu=1000,kernel.msgmax=1 2 3
+ security.alpha.kubernetes.io/unsafe-sysctls: net.core.somaxconn=1024,kernel.msgmax=1 2 3
spec:
...
```
diff --git a/content/zh/docs/concepts/overview/kubernetes-api.md b/content/zh/docs/concepts/overview/kubernetes-api.md
index 14837de3a7..9f79f25aa4 100644
--- a/content/zh/docs/concepts/overview/kubernetes-api.md
+++ b/content/zh/docs/concepts/overview/kubernetes-api.md
@@ -35,7 +35,7 @@ Kubernetes实现了另一种基于Protobuf的序列化格式,该格式主要
请注意,API版本控制和软件版本控制只有间接相关性。 [API和发行版本建议](https://git.k8s.io/community/contributors/design-proposals/release/versioning.md)描述了API版本与软件版本之间的关系。
-不同的API版本名称意味着不同级别的软件稳定性和支持程度。 每个级别的标准在[API变更文档](https://git.k8s.io/community/contributors/devel/api_changes.md#alpha-beta-and-stable-versions)中有更详细的描述。 内容主要概括如下:
+不同的API版本名称意味着不同级别的软件稳定性和支持程度。 每个级别的标准在[API变更文档](https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions)中有更详细的描述。 内容主要概括如下:
* Alpha 测试版本:
diff --git a/content/zh/docs/concepts/workloads/controllers/deployment.md b/content/zh/docs/concepts/workloads/controllers/deployment.md
index b9ee162868..f9ba89cd27 100644
--- a/content/zh/docs/concepts/workloads/controllers/deployment.md
+++ b/content/zh/docs/concepts/workloads/controllers/deployment.md
@@ -1,6 +1,5 @@
---
approvers:
-- bgrant0607
- janetkuo
title: Deployments
content_template: templates/concept
diff --git a/content/zh/docs/admin/authorization/abac.md b/content/zh/docs/reference/access-authn-authz/abac.md
similarity index 100%
rename from content/zh/docs/admin/authorization/abac.md
rename to content/zh/docs/reference/access-authn-authz/abac.md
diff --git a/content/zh/docs/admin/bootstrap-tokens.md b/content/zh/docs/reference/access-authn-authz/bootstrap-tokens.md
similarity index 100%
rename from content/zh/docs/admin/bootstrap-tokens.md
rename to content/zh/docs/reference/access-authn-authz/bootstrap-tokens.md
diff --git a/content/zh/docs/admin/accessing-the-api.md b/content/zh/docs/reference/access-authn-authz/controlling-access.md
similarity index 99%
rename from content/zh/docs/admin/accessing-the-api.md
rename to content/zh/docs/reference/access-authn-authz/controlling-access.md
index 930cf620fd..251b69484d 100644
--- a/content/zh/docs/admin/accessing-the-api.md
+++ b/content/zh/docs/reference/access-authn-authz/controlling-access.md
@@ -1,6 +1,5 @@
---
approvers:
-- bgrant0607
- erictune
- lavalamp
title: Kubernetes API访问控制
diff --git a/content/zh/docs/admin/service-accounts-admin.md b/content/zh/docs/reference/access-authn-authz/service-accounts-admin.md
similarity index 100%
rename from content/zh/docs/admin/service-accounts-admin.md
rename to content/zh/docs/reference/access-authn-authz/service-accounts-admin.md
diff --git a/content/zh/docs/admin/authorization/webhook.md b/content/zh/docs/reference/access-authn-authz/webhook.md
similarity index 100%
rename from content/zh/docs/admin/authorization/webhook.md
rename to content/zh/docs/reference/access-authn-authz/webhook.md
diff --git a/content/zh/docs/admin/kube-apiserver.md b/content/zh/docs/reference/command-line-tools-reference/kube-apiserver.md
similarity index 100%
rename from content/zh/docs/admin/kube-apiserver.md
rename to content/zh/docs/reference/command-line-tools-reference/kube-apiserver.md
diff --git a/content/zh/docs/admin/kubelet-authentication-authorization.md b/content/zh/docs/reference/command-line-tools-reference/kubelet-authentication-authorization.md
similarity index 100%
rename from content/zh/docs/admin/kubelet-authentication-authorization.md
rename to content/zh/docs/reference/command-line-tools-reference/kubelet-authentication-authorization.md
diff --git a/content/zh/docs/admin/kubelet-tls-bootstrapping.md b/content/zh/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping.md
similarity index 100%
rename from content/zh/docs/admin/kubelet-tls-bootstrapping.md
rename to content/zh/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping.md
diff --git a/content/zh/docs/user-guide/docker-cli-to-kubectl.md b/content/zh/docs/reference/kubectl/docker-cli-to-kubectl.md
similarity index 99%
rename from content/zh/docs/user-guide/docker-cli-to-kubectl.md
rename to content/zh/docs/reference/kubectl/docker-cli-to-kubectl.md
index 88bfa0d6d4..e1bee1f55d 100644
--- a/content/zh/docs/user-guide/docker-cli-to-kubectl.md
+++ b/content/zh/docs/reference/kubectl/docker-cli-to-kubectl.md
@@ -1,6 +1,5 @@
---
approvers:
-- bgrant0607
- brendandburns
- thockin
title: Docker 用户使用 kubectl 命令指南
diff --git a/content/zh/docs/user-guide/jsonpath.md b/content/zh/docs/reference/kubectl/jsonpath.md
similarity index 100%
rename from content/zh/docs/user-guide/jsonpath.md
rename to content/zh/docs/reference/kubectl/jsonpath.md
diff --git a/content/zh/docs/user-guide/kubectl-overview.md b/content/zh/docs/reference/kubectl/kubectl-overview.md
similarity index 99%
rename from content/zh/docs/user-guide/kubectl-overview.md
rename to content/zh/docs/reference/kubectl/kubectl-overview.md
index 430253da8e..d6fd615353 100644
--- a/content/zh/docs/user-guide/kubectl-overview.md
+++ b/content/zh/docs/reference/kubectl/kubectl-overview.md
@@ -1,6 +1,5 @@
---
approvers:
-- bgrant0607
- hw-qiaolei
title: kubectl概述
---
diff --git a/content/zh/docs/admin/cluster-large.md b/content/zh/docs/setup/cluster-large.md
similarity index 100%
rename from content/zh/docs/admin/cluster-large.md
rename to content/zh/docs/setup/cluster-large.md
diff --git a/content/zh/docs/setup/independent/create-cluster-kubeadm.md b/content/zh/docs/setup/independent/create-cluster-kubeadm.md
index 9f3cbe89ef..0648f32972 100644
--- a/content/zh/docs/setup/independent/create-cluster-kubeadm.md
+++ b/content/zh/docs/setup/independent/create-cluster-kubeadm.md
@@ -433,7 +433,7 @@ For more information about using Calico, see [Quickstart for Calico on Kubernete
For Calico to work correctly, you need to pass `--Pod-network-cidr=192.168.0.0/16` to `kubeadm init` or update the `calico.yml` file to match your Pod network. Note that Calico works on `amd64` only.
```shell
-kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml
+kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
```
-->
@@ -444,7 +444,7 @@ kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml
或者根据您的网络方案更新 `calico.yml` 。注意 Calico 只适用于 `amd64` 架构。
```shell
-kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml
+kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
```
{{% /tab %}}
@@ -455,7 +455,7 @@ Canal uses Calico for policy and Flannel for networking. Refer to the Calico doc
For Canal to work correctly, `--Pod-network-cidr=10.244.0.0/16` has to be passed to `kubeadm init`. Note that Canal works on `amd64` only.
```shell
-kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/canal.yaml
+kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/canal.yaml
```
-->
@@ -466,7 +466,7 @@ Canal 使用 Calico 提供的网络策略和 Flannel 提供的网络功能。请
为了 Canal 可以正确运行,`kubeadm init` 运行时需要设置`--Pod-network-cidr=10.244.0.0/16`,同时注意它只适用于 `amd64` 架构。
```shell
-kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/canal.yaml
+kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/canal.yaml
```
{{% /tab %}}
diff --git a/content/zh/docs/admin/multiple-zones.md b/content/zh/docs/setup/multiple-zones.md
similarity index 100%
rename from content/zh/docs/admin/multiple-zones.md
rename to content/zh/docs/setup/multiple-zones.md
diff --git a/content/zh/docs/admin/node-conformance.md b/content/zh/docs/setup/node-conformance.md
similarity index 100%
rename from content/zh/docs/admin/node-conformance.md
rename to content/zh/docs/setup/node-conformance.md
diff --git a/content/zh/docs/tasks/administer-cluster/sysctl-cluster.md b/content/zh/docs/tasks/administer-cluster/sysctl-cluster.md
index 3bf431e9ad..acf6849d40 100644
--- a/content/zh/docs/tasks/administer-cluster/sysctl-cluster.md
+++ b/content/zh/docs/tasks/administer-cluster/sysctl-cluster.md
@@ -136,7 +136,7 @@ flag of the kubelet, e.g.:
```shell
$ kubelet --allowed-unsafe-sysctls \
- 'kernel.msg*,net.ipv4.route.min_pmtu' ...
+ 'kernel.msg*,net.core.somaxconn' ...
```
-此示例中,使用 Pod SecurityContext 来对一个安全的 sysctl 参数 `kernel.shm_rmid_forced` 以及两个非安全的 sysctl 参数 `net.ipv4.route.min_pmtu`和 `kernel.msgmax` 进行设置。在 Pod 规格中对 _安全的_ 和 _非安全的_ sysctl 参数不做区分。
+此示例中,使用 Pod SecurityContext 来对一个安全的 sysctl 参数 `kernel.shm_rmid_forced` 以及两个非安全的 sysctl 参数 `net.core.somaxconn`和 `kernel.msgmax` 进行设置。在 Pod 规格中对 _安全的_ 和 _非安全的_ sysctl 参数不做区分。
{{< warning >}}
- 获取正在运行的 pod
-
- ```shell
- kubectl get pods
- ```
+2. List the running Pods:
+
+ 获取正在运行的 pod
+
+ ```shell
+ kubectl get pods
+ ```
查询结果显示在command-demo这个Pod下运行的容器已经启动完成
@@ -59,7 +57,7 @@ content_template: templates/task
日志中显示了HOSTNAME 与KUBERNETES_PORT 这两个环境变量的值:
- ```shell
+ ```
command-demo
tcp://10.3.240.1:443
```
@@ -69,13 +67,13 @@ content_template: templates/task
在上面的示例中,我们直接将一串字符作为命令的入参。除此之外,我们还可以
将环境变量作为命令的入参。
- ```shell
- env:
- - name: MESSAGE
- value: "hello world"
- command: ["/bin/echo"]
- args: ["$(MESSAGE)"]
- ```
+```yaml
+env:
+- name: MESSAGE
+ value: "hello world"
+command: ["/bin/echo"]
+args: ["$(MESSAGE)"]
+```
这样一来,我们就可以将那些用来设置环境变量的方法应用于设置命令的入参,其
中包括了[ConfigMaps](/docs/tasks/configure-pod-container/configure-pod-configmap/)
@@ -92,10 +90,10 @@ content_template: templates/task
有时候,需要通过shell来执行命令。 例如,命令可能由多个命令组合而成,抑或包含
在一个shell脚本中。这时,就可以通过如下方式在shell中执行命令:
- ```shell
- command: ["/bin/sh"]
- args: ["-c", "while true; do echo hello; sleep 10;done"]
- ```
+```shell
+command: ["/bin/sh"]
+args: ["-c", "while true; do echo hello; sleep 10;done"]
+```
## 注意
diff --git a/content/zh/docs/tasks/run-application/mysql-statefulset.yaml b/content/zh/docs/tasks/run-application/mysql-statefulset.yaml
index d8ee2d9ac9..80483e8958 100644
--- a/content/zh/docs/tasks/run-application/mysql-statefulset.yaml
+++ b/content/zh/docs/tasks/run-application/mysql-statefulset.yaml
@@ -100,16 +100,16 @@ spec:
cd /var/lib/mysql
# Determine binlog position of cloned data, if any.
- if [[ -f xtrabackup_slave_info ]]; then
+ if [[ -f xtrabackup_slave_info && "x$( change_master_to.sql.in
# Ignore xtrabackup_binlog_info in this case (it's useless).
- rm -f xtrabackup_binlog_info
+ rm -f xtrabackup_slave_info xtrabackup_binlog_info
elif [[ -f xtrabackup_binlog_info ]]; then
# We're cloning directly from master. Parse binlog position.
[[ `cat xtrabackup_binlog_info` =~ ^(.*?)[[:space:]]+(.*?)$ ]] || exit 1
- rm xtrabackup_binlog_info
+ 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
@@ -120,16 +120,15 @@ spec:
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 "$(
---
title: 运行应用程序的多个实例
weight: 10
---
+
+
@@ -69,11 +72,11 @@ weight: 10
-
+
-
+
diff --git a/content/zh/docs/user-guide/bad-nginx-deployment.yaml b/content/zh/docs/user-guide/bad-nginx-deployment.yaml
deleted file mode 100644
index e93cf309b4..0000000000
--- a/content/zh/docs/user-guide/bad-nginx-deployment.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-apiVersion: apps/v1beta1
-kind: Deployment
-metadata:
- name: nginx-deployment
-spec:
- replicas: 3
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - name: nginx
- image: nginx:1.91
- ports:
- - containerPort: 80
diff --git a/content/zh/docs/user-guide/curlpod.yaml b/content/zh/docs/user-guide/curlpod.yaml
deleted file mode 100644
index 0741a58e7f..0000000000
--- a/content/zh/docs/user-guide/curlpod.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-apiVersion: apps/v1beta1
-kind: Deployment
-metadata:
- name: curl-deployment
-spec:
- replicas: 1
- template:
- metadata:
- labels:
- app: curlpod
- spec:
- volumes:
- - name: secret-volume
- secret:
- secretName: nginxsecret
- containers:
- - name: curlpod
- command:
- - sh
- - -c
- - while true; do sleep 1; done
- image: radial/busyboxplus:curl
- volumeMounts:
- - mountPath: /etc/nginx/ssl
- name: secret-volume
diff --git a/content/zh/docs/user-guide/ingress.yaml b/content/zh/docs/user-guide/ingress.yaml
deleted file mode 100644
index 56a0d5138f..0000000000
--- a/content/zh/docs/user-guide/ingress.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-apiVersion: networking.k8s.io/v1beta1
-kind: Ingress
-metadata:
- name: test-ingress
-spec:
- backend:
- serviceName: testsvc
- servicePort: 80
-
diff --git a/content/zh/docs/user-guide/job.yaml b/content/zh/docs/user-guide/job.yaml
deleted file mode 100644
index ece4512a8a..0000000000
--- a/content/zh/docs/user-guide/job.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-apiVersion: batch/v1
-kind: Job
-metadata:
- name: pi
-spec:
- template:
- metadata:
- name: pi
- spec:
- containers:
- - name: pi
- image: perl
- command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
- restartPolicy: Never
-
diff --git a/content/zh/docs/user-guide/multi-pod.yaml b/content/zh/docs/user-guide/multi-pod.yaml
deleted file mode 100644
index 2ace060d89..0000000000
--- a/content/zh/docs/user-guide/multi-pod.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-apiVersion: v1
-kind: Pod
-metadata:
- labels:
- name: redis
- redis-sentinel: "true"
- role: master
- name: redis-master
-spec:
- containers:
- - name: master
- image: kubernetes/redis:v1
- env:
- - name: MASTER
- value: "true"
- ports:
- - containerPort: 6379
- resources:
- limits:
- cpu: "0.5"
- volumeMounts:
- - mountPath: /redis-master-data
- name: data
- - name: sentinel
- image: kubernetes/redis:v1
- env:
- - name: SENTINEL
- value: "true"
- ports:
- - containerPort: 26379
- volumes:
- - name: data
- emptyDir: {}
----
-apiVersion: v1
-kind: Pod
-metadata:
- labels:
- name: redis-proxy
- role: proxy
- name: redis-proxy
-spec:
- containers:
- - name: proxy
- image: kubernetes/redis-proxy:v1
- ports:
- - containerPort: 6379
- name: api
diff --git a/content/zh/docs/user-guide/new-nginx-deployment.yaml b/content/zh/docs/user-guide/new-nginx-deployment.yaml
deleted file mode 100644
index 67bb9fd10f..0000000000
--- a/content/zh/docs/user-guide/new-nginx-deployment.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-apiVersion: apps/v1beta1
-kind: Deployment
-metadata:
- name: nginx-deployment
-spec:
- replicas: 3
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - name: nginx
- image: nginx:1.9.1
- ports:
- - containerPort: 80
diff --git a/content/zh/docs/user-guide/nginx-app.yaml b/content/zh/docs/user-guide/nginx-app.yaml
deleted file mode 100644
index bc7e095646..0000000000
--- a/content/zh/docs/user-guide/nginx-app.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: my-nginx-svc
- labels:
- app: nginx
-spec:
- type: LoadBalancer
- ports:
- - port: 80
- selector:
- app: nginx
----
-apiVersion: apps/v1beta1
-kind: Deployment
-metadata:
- name: my-nginx
-spec:
- replicas: 3
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - name: nginx
- image: nginx:1.7.9
- ports:
- - containerPort: 80
diff --git a/content/zh/docs/user-guide/nginx-deployment.yaml b/content/zh/docs/user-guide/nginx-deployment.yaml
deleted file mode 100644
index 2aabf5e7b1..0000000000
--- a/content/zh/docs/user-guide/nginx-deployment.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-apiVersion: apps/v1beta1
-kind: Deployment
-metadata:
- name: nginx-deployment
-spec:
- replicas: 3
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - name: nginx
- image: nginx:1.7.9
- ports:
- - containerPort: 80
diff --git a/content/zh/docs/user-guide/nginx-init-containers.yaml b/content/zh/docs/user-guide/nginx-init-containers.yaml
deleted file mode 100644
index fdfde0619a..0000000000
--- a/content/zh/docs/user-guide/nginx-init-containers.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
-apiVersion: v1
-kind: Pod
-metadata:
- name: nginx
-spec:
- containers:
- - name: nginx
- image: nginx
- ports:
- - containerPort: 80
- volumeMounts:
- - name: workdir
- mountPath: /usr/share/nginx/html
- # These containers are run during pod initialization
- initContainers:
- - name: install
- image: busybox
- command:
- - wget
- - "-O"
- - "/work-dir/index.html"
- - http://kubernetes.io/index.html
- volumeMounts:
- - name: workdir
- mountPath: "/work-dir"
- dnsPolicy: Default
- volumes:
- - name: workdir
- emptyDir: {}
diff --git a/content/zh/docs/user-guide/nginx-lifecycle-deployment.yaml b/content/zh/docs/user-guide/nginx-lifecycle-deployment.yaml
deleted file mode 100644
index 52bbbe23d7..0000000000
--- a/content/zh/docs/user-guide/nginx-lifecycle-deployment.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-apiVersion: apps/v1beta1
-kind: Deployment
-metadata:
- name: nginx
-spec:
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - name: nginx
- image: nginx
- ports:
- - containerPort: 80
- lifecycle:
- preStop:
- exec:
- # SIGTERM triggers a quick exit; gracefully terminate instead
- command: ["/usr/sbin/nginx","-s","quit"]
diff --git a/content/zh/docs/user-guide/nginx-probe-deployment.yaml b/content/zh/docs/user-guide/nginx-probe-deployment.yaml
deleted file mode 100644
index d1d849efef..0000000000
--- a/content/zh/docs/user-guide/nginx-probe-deployment.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-apiVersion: apps/v1beta1
-kind: Deployment
-metadata:
- name: nginx
-spec:
- template:
- metadata:
- labels:
- app: nginx
- spec:
- containers:
- - name: nginx
- image: nginx
- ports:
- - containerPort: 80
- livenessProbe:
- httpGet:
- # Path to probe; should be cheap, but representative of typical behavior
- path: /index.html
- port: 80
- initialDelaySeconds: 30
- timeoutSeconds: 1
diff --git a/content/zh/docs/user-guide/nginx-secure-app.yaml b/content/zh/docs/user-guide/nginx-secure-app.yaml
deleted file mode 100644
index ec180a18df..0000000000
--- a/content/zh/docs/user-guide/nginx-secure-app.yaml
+++ /dev/null
@@ -1,46 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: my-nginx
- labels:
- run: my-nginx
-spec:
- type: NodePort
- ports:
- - port: 8080
- targetPort: 80
- protocol: TCP
- name: http
- - port: 443
- protocol: TCP
- name: https
- selector:
- run: my-nginx
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: my-nginx
-spec:
- selector:
- matchLabels:
- run: my-nginx
- replicas: 1
- template:
- metadata:
- labels:
- run: my-nginx
- spec:
- volumes:
- - name: secret-volume
- secret:
- secretName: nginxsecret
- containers:
- - name: nginxhttps
- image: bprashanth/nginxhttps:1.0
- ports:
- - containerPort: 443
- - containerPort: 80
- volumeMounts:
- - mountPath: /etc/nginx/ssl
- name: secret-volume
diff --git a/content/zh/docs/user-guide/nginx-svc.yaml b/content/zh/docs/user-guide/nginx-svc.yaml
deleted file mode 100644
index 12fcd5d0bf..0000000000
--- a/content/zh/docs/user-guide/nginx-svc.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- name: my-nginx
- labels:
- run: my-nginx
-spec:
- ports:
- - port: 80
- protocol: TCP
- selector:
- run: my-nginx
diff --git a/content/zh/docs/user-guide/pod-w-message.yaml b/content/zh/docs/user-guide/pod-w-message.yaml
deleted file mode 100644
index e7fdc7d3be..0000000000
--- a/content/zh/docs/user-guide/pod-w-message.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-apiVersion: v1
-kind: Pod
-metadata:
- name: pod-w-message
-spec:
- containers:
- - name: messager
- image: "ubuntu:14.04"
- command: ["/bin/sh","-c"]
- args: ["sleep 60 && /bin/echo Sleep expired > /dev/termination-log"]
diff --git a/content/zh/docs/user-guide/pod.yaml b/content/zh/docs/user-guide/pod.yaml
deleted file mode 100644
index 7053af0be4..0000000000
--- a/content/zh/docs/user-guide/pod.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-apiVersion: v1
-kind: Pod
-metadata:
- name: nginx
- labels:
- app: nginx
-spec:
- containers:
- - name: nginx
- image: nginx
- ports:
- - containerPort: 80
diff --git a/content/zh/docs/user-guide/redis-deployment.yaml b/content/zh/docs/user-guide/redis-deployment.yaml
deleted file mode 100644
index eacaa6feea..0000000000
--- a/content/zh/docs/user-guide/redis-deployment.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-apiVersion: apps/v1beta1
-kind: Deployment
-metadata:
- name: redis
-spec:
- template:
- metadata:
- labels:
- app: redis
- tier: backend
- spec:
- # Provision a fresh volume for the pod
- volumes:
- - name: data
- emptyDir: {}
- containers:
- - name: redis
- image: kubernetes/redis:v1
- ports:
- - containerPort: 6379
- # Mount the volume into the pod
- volumeMounts:
- - mountPath: /redis-master-data
- name: data # must match the name of the volume, above
diff --git a/content/zh/docs/user-guide/redis-resource-deployment.yaml b/content/zh/docs/user-guide/redis-resource-deployment.yaml
deleted file mode 100644
index f597f9bb74..0000000000
--- a/content/zh/docs/user-guide/redis-resource-deployment.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
-apiVersion: apps/v1beta1
-kind: Deployment
-metadata:
- name: redis
-spec:
- template:
- metadata:
- labels:
- app: redis
- tier: backend
- spec:
- containers:
- - name: redis
- image: kubernetes/redis:v1
- ports:
- - containerPort: 80
- resources:
- limits:
- # cpu units are cores
- cpu: 500m
- # memory units are bytes
- memory: 64Mi
- requests:
- # cpu units are cores
- cpu: 500m
- # memory units are bytes
- memory: 64Mi
diff --git a/content/zh/docs/user-guide/redis-secret-deployment.yaml b/content/zh/docs/user-guide/redis-secret-deployment.yaml
deleted file mode 100644
index a7201802ec..0000000000
--- a/content/zh/docs/user-guide/redis-secret-deployment.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
-apiVersion: apps/v1beta1
-kind: Deployment
-metadata:
- name: redis
-spec:
- template:
- metadata:
- labels:
- app: redis
- tier: backend
- spec:
- volumes:
- - name: data
- emptyDir: {}
- - name: supersecret # The "mysecret" secret populates this "supersecret" volume.
- secret:
- secretName: mysecret
- containers:
- - name: redis
- image: kubernetes/redis:v1
- ports:
- - containerPort: 6379
- volumeMounts:
- - mountPath: /redis-master-data
- name: data
- - mountPath: /var/run/secrets/super # Mount the "supersecret" volume into the pod.
- name: supersecret
diff --git a/content/zh/docs/user-guide/run-my-nginx.yaml b/content/zh/docs/user-guide/run-my-nginx.yaml
deleted file mode 100644
index 76a879f5c4..0000000000
--- a/content/zh/docs/user-guide/run-my-nginx.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: my-nginx
-spec:
- selector:
- matchLabels:
- run: my-nginx
- replicas: 2
- template:
- metadata:
- labels:
- run: my-nginx
- spec:
- containers:
- - name: my-nginx
- image: nginx
- ports:
- - containerPort: 80
-
diff --git a/i18n/hi.toml b/i18n/hi.toml
new file mode 100644
index 0000000000..2e5d6ad331
--- /dev/null
+++ b/i18n/hi.toml
@@ -0,0 +1,195 @@
+# i18n strings for the English (main) site.
+
+[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"
+
+[objectives_heading]
+other = "Objectives"
+
+[cleanup_heading]
+other = "Cleaning up"
+
+[prerequisites_heading]
+other = "Before you begin"
+
+[whatsnext_heading]
+other = "What's next"
+
+[feedback_heading]
+other = "Feedback"
+
+[feedback_question]
+other = "Was this page helpful?"
+
+[feedback_yes]
+other = "Yes"
+
+[feedback_no]
+other = "No"
+
+[latest_version]
+other = "latest version."
+
+[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 "
+
+[caution]
+other = "Caution:"
+
+[note]
+other = "Note:"
+
+[warning]
+other = "Warning:"
+
+[main_read_about]
+other = "Read about"
+
+[main_read_more]
+other = "Read more"
+
+[main_github_invite]
+other = "Interested in hacking on the core Kubernetes code base?"
+
+[main_github_view_on]
+other = "View On GitHub"
+
+[main_github_create_an_issue]
+other = "Create an Issue"
+
+[main_community_explore]
+other = "Explore the community"
+
+[main_kubernetes_features]
+other = "Kubernetes Features"
+
+[main_cncf_project]
+other = """We are a CNCF graduated project"""
+
+[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_contribute]
+other = "Contribute"
+
+[main_edit_this_page]
+other = "Edit This Page"
+
+[main_page_history]
+other ="Page History"
+
+[main_page_last_modified_on]
+other = "Page last modified on"
+
+[main_by]
+other = "by"
+
+[main_documentation_license]
+other = """The Kubernetes Authors | Documentation Distributed under CC BY 4.0"""
+
+[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"""
+
+# Labels for the docs portal home page.
+[docs_label_browse]
+other = "Browse Docs"
+
+[docs_label_contributors]
+other = "Contributors"
+
+[docs_label_users]
+other = "Users"
+
+[docs_label_i_am]
+other = "I AM..."
+
+# layouts > blog > pager
+
+[layouts_blog_pager_prev]
+other = "<< Prev"
+
+[layouts_blog_pager_next]
+other = "Next >>"
+
+# layouts > blog > list
+
+[layouts_case_studies_list_tell]
+other = "Tell your story"
+
+# layouts > docs > glossary
+
+[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 K8s, as well as more general terms that provide useful context."
+
+[layouts_docs_glossary_filter]
+other = "Filter terms according to their tags"
+
+[layouts_docs_glossary_select_all]
+other = "Select all"
+
+[layouts_docs_glossary_deselect_all]
+other = "Deselect all"
+
+[layouts_docs_glossary_aka]
+other = "Also known as"
+
+[layouts_docs_glossary_click_details_before]
+other = "Click on the"
+
+[layouts_docs_glossary_click_details_after]
+other = "indicators below to get a longer explanation for any particular term."
+
+# layouts > docs > search
+
+[layouts_docs_search_fetching]
+other = "Fetching results.."
+
+# layouts > partial > feedback
+
+[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_issue]
+other = "Open an issue in the GitHub repo if you want to "
+
+[layouts_docs_partials_feedback_problem]
+other = "report a problem"
+
+[layouts_docs_partials_feedback_or]
+other = "or"
+
+[layouts_docs_partials_feedback_improvement]
+other = "suggest an improvement"
+
+# Community links
+[community_twitter_name]
+other = "Twitter"
+[community_github_name]
+other = "GitHub"
+[community_slack_name]
+other = "Slack"
+[community_stack_overflow_name]
+other = "Stack Overflow"
+[community_forum_name]
+other = "Forum"
+[community_events_calendar]
+other = "Events Calendar"
+
+# UI elements
+[ui_search_placeholder]
+other = "Search"
diff --git a/layouts/blog/pager.html b/layouts/blog/pager.html
index 1d2dd68a61..bae7df9e0a 100644
--- a/layouts/blog/pager.html
+++ b/layouts/blog/pager.html
@@ -1,7 +1,7 @@
{{ end }}
-
+{{ end }}
diff --git a/scripts/README.md b/scripts/README.md
new file mode 100644
index 0000000000..29dd7aa9d9
--- /dev/null
+++ b/scripts/README.md
@@ -0,0 +1,73 @@
+# Development scripts for Kubernetes documentation
+
+- `find_pr.py`: Find what GitHub pull requests touch a given file.
+- `upstream_changes.py`: Find what changes occurred between two versions
+- `test_examples.sh`: This script tests whether a change affects example files bundled in the website.
+- `check-headers-file.sh`: This script checks the headers if you are in a production environment.
+- `hugo-version-check.sh`: This script checks whether your local Hugo version matches the version used in production.
+
+## Requirements
+
+Some of those scripts have external requirements. You can install them with the following commands:
+
+```
+python3 -m pip install -r requirements.txt
+```
+
+## find_pr.py
+
+```
+$ ./find_pr.py --help
+Usage: find_pr.py [OPTIONS] PATH
+
+ Find what GitHub pull requests touch a given file.
+
+ ex: ./find_pr.py --tags "language/fr" "content/fr/_index.html"
+
+Options:
+ --tags TEXT Tags of PullRequest (Can be passed multiple times)
+ --token TEXT GitHub API token. (Default env variable GITHUB_TOKEN)
+ --last-n-pr INTEGER Last n-th PullRequests
+ --help Show this message and exit.
+```
+
+## upstream_changes.py
+
+```
+$ ./upstream_changes.py --help
+Usage: upstream_changes.py [OPTIONS] PATH
+
+ Find what changes occurred between two versions
+
+ ex: ./upstream_changes.py content/fr/_index.html
+
+Options:
+ --reference TEXT Specify the reference version of the file. Default to the
+ English one.
+ --git-path TEXT Specify git path
+ --help Show this message and exit.
+```
+
+## test_examples.sh
+
+This script tests whether a change affects example files bundled in the website.
+
+To install the dependencies:
+
+ $ ./scripts/test_examples.sh install
+
+To run the examples:
+
+ $ ./scripts/test_examples.sh run
+
+## check-headers-file.sh
+
+This script checks the headers if you are in a production environment.
+
+ ./scripts/check-headers-file.sh
+
+## hugo-version-check.sh
+
+This script checks whether your local Hugo version matches the version used in production.
+
+ ./scripts/hugo-version-check.sh
diff --git a/scripts/requirements.txt b/scripts/requirements.txt
new file mode 100644
index 0000000000..50ad2619ec
--- /dev/null
+++ b/scripts/requirements.txt
@@ -0,0 +1,3 @@
+requests==2.20.1
+click==6.7
+jinja2==2.10.1
diff --git a/static/_redirects b/static/_redirects
index bacd5d32d6..b07146cea0 100644
--- a/static/_redirects
+++ b/static/_redirects
@@ -103,6 +103,7 @@
/docs/concepts/clusters/logging/ /docs/concepts/cluster-administration/logging/ 301
/docs/concepts/configuration/container-command-arg/ /docs/tasks/inject-data-application/define-command-argument-container/ 301
/docs/concepts/configuration/container-command-args/ /docs/tasks/inject-data-application/define-command-argument-container/ 301
+/docs/concepts/configuration/scheduler-perf-tuning/ /docs/concepts/scheduling/scheduler-perf-tuning/ 301
/docs/concepts/ecosystem/thirdpartyresource/ /docs/tasks/access-kubernetes-api/extend-api-third-party-resource/ 301
/docs/concepts/jobs/cron-jobs/ /docs/concepts/workloads/controllers/cron-jobs/ 301
/docs/concepts/jobs/run-to-completion-finite-workloads/ /docs/concepts/workloads/controllers/jobs-run-to-completion/ 301
diff --git a/static/docs/reference/generated/kubernetes-api/v1.15/index.html b/static/docs/reference/generated/kubernetes-api/v1.15/index.html
index 7326a0ce3b..168e3020da 100644
--- a/static/docs/reference/generated/kubernetes-api/v1.15/index.html
+++ b/static/docs/reference/generated/kubernetes-api/v1.15/index.html
@@ -1930,6 +1930,9 @@
initContainers Container array patch strategy: merge patch merge key: name
List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
nodeName string
NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.
nodeSelector object
NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
+
overhead object
Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. This field will be autopopulated at admission time by the RuntimeClass admission controller. If the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. The RuntimeClass admission controller will reject Pod create requests which have the overhead already set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature.
preemptionPolicy string
PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature.
priority integer
The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.
priorityClassName string
If specified, indicates the pod's priority. "system-node-critical" and "system-cluster-critical" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.
@@ -26772,6 +26779,7 @@ $ curl -X GET 'http://127.0.0.1:8001/api/v1/watch/namespaces/default/services/de
handler string
Handler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node & CRI configuration. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called "runc" might specify that the runc OCI runtime (using native Linux containers) will be used to run the containers in a pod. The Handler must conform to the DNS Label (RFC 1123) requirements, and is immutable.
kind string
Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds
Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. For more details, see https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature.
RuntimeClassList v1beta1 node
@@ -26880,8 +26888,8 @@ $ curl -X GET 'http://127.0.0.1:8001/api/v1/watch/namespaces/default/services/de
Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. For more details, see https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature.
runtimeHandler string
RuntimeHandler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node & CRI configuration. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called "runc" might specify that the runc OCI runtime (using native Linux containers) will be used to run the containers in a pod. The RuntimeHandler must conform to the DNS Label (RFC 1123) requirements and is immutable.
@@ -52133,9 +52185,9 @@ $ curl -X GET 'http://127.0.0.1:8001/apis/extensions/v1beta1/watch/namespaces/de
diff --git a/static/docs/reference/generated/kubernetes-api/v1.15/navData.js b/static/docs/reference/generated/kubernetes-api/v1.15/navData.js
index c344960eb9..978ef78c04 100644
--- a/static/docs/reference/generated/kubernetes-api/v1.15/navData.js
+++ b/static/docs/reference/generated/kubernetes-api/v1.15/navData.js
@@ -1 +1 @@
-(function(){navData={"toc":[{"section":"webhookclientconfig-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"webhookclientconfig-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"volumeerror-v1alpha1-storage-k8s-io","subsections":[]},{"section":"volumeerror-v1beta1-storage-k8s-io","subsections":[]},{"section":"volumeattachmentsource-v1alpha1-storage-k8s-io","subsections":[]},{"section":"volumeattachmentsource-v1beta1-storage-k8s-io","subsections":[]},{"section":"volumeattachment-v1alpha1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-volumeattachment-v1alpha1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"watch-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"list-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"read-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-volumeattachment-v1alpha1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"delete-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"replace-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"patch-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"create-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]}]}]},{"section":"volumeattachment-v1beta1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-volumeattachment-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"watch-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"list-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"read-volumeattachment-v1beta1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-volumeattachment-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"delete-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"replace-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"patch-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"create-volumeattachment-v1beta1-storage-k8s-io","subsections":[]}]}]},{"section":"userinfo-v1beta1-authentication-k8s-io","subsections":[]},{"section":"tokenreview-v1beta1-authentication-k8s-io","subsections":[{"section":"-strong-write-operations-tokenreview-v1beta1-authentication-k8s-io-strong-","subsections":[{"section":"create-tokenreview-v1beta1-authentication-k8s-io","subsections":[]}]}]},{"section":"supplementalgroupsstrategyoptions-v1beta1-extensions","subsections":[]},{"section":"subjectrulesreviewstatus-v1beta1-authorization-k8s-io","subsections":[]},{"section":"subjectaccessreview-v1beta1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-subjectaccessreview-v1beta1-authorization-k8s-io-strong-","subsections":[{"section":"create-subjectaccessreview-v1beta1-authorization-k8s-io","subsections":[]}]}]},{"section":"subject-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"subject-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"storageclass-v1beta1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-storageclass-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"watch-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"list-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"read-storageclass-v1beta1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-storageclass-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"delete-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"replace-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"patch-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"create-storageclass-v1beta1-storage-k8s-io","subsections":[]}]}]},{"section":"statefulsetupdatestrategy-v1beta1-apps","subsections":[]},{"section":"statefulsetupdatestrategy-v1beta2-apps","subsections":[]},{"section":"statefulsetcondition-v1beta1-apps","subsections":[]},{"section":"statefulsetcondition-v1beta2-apps","subsections":[]},{"section":"statefulset-v1beta1-apps","subsections":[{"section":"-strong-misc-operations-statefulset-v1beta1-apps-strong-","subsections":[{"section":"patch-scale-statefulset-v1beta1-apps","subsections":[]},{"section":"replace-scale-statefulset-v1beta1-apps","subsections":[]},{"section":"read-scale-statefulset-v1beta1-apps","subsections":[]}]},{"section":"-strong-status-operations-statefulset-v1beta1-apps-strong-","subsections":[{"section":"replace-status-statefulset-v1beta1-apps","subsections":[]},{"section":"read-status-statefulset-v1beta1-apps","subsections":[]},{"section":"patch-status-statefulset-v1beta1-apps","subsections":[]}]},{"section":"-strong-read-operations-statefulset-v1beta1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-statefulset-v1beta1-apps","subsections":[]},{"section":"watch-list-statefulset-v1beta1-apps","subsections":[]},{"section":"watch-statefulset-v1beta1-apps","subsections":[]},{"section":"list-all-namespaces-statefulset-v1beta1-apps","subsections":[]},{"section":"list-statefulset-v1beta1-apps","subsections":[]},{"section":"read-statefulset-v1beta1-apps","subsections":[]}]},{"section":"-strong-write-operations-statefulset-v1beta1-apps-strong-","subsections":[{"section":"delete-collection-statefulset-v1beta1-apps","subsections":[]},{"section":"delete-statefulset-v1beta1-apps","subsections":[]},{"section":"replace-statefulset-v1beta1-apps","subsections":[]},{"section":"patch-statefulset-v1beta1-apps","subsections":[]},{"section":"create-statefulset-v1beta1-apps","subsections":[]}]}]},{"section":"statefulset-v1beta2-apps","subsections":[{"section":"-strong-misc-operations-statefulset-v1beta2-apps-strong-","subsections":[{"section":"patch-scale-statefulset-v1beta2-apps","subsections":[]},{"section":"replace-scale-statefulset-v1beta2-apps","subsections":[]},{"section":"read-scale-statefulset-v1beta2-apps","subsections":[]}]},{"section":"-strong-status-operations-statefulset-v1beta2-apps-strong-","subsections":[{"section":"replace-status-statefulset-v1beta2-apps","subsections":[]},{"section":"read-status-statefulset-v1beta2-apps","subsections":[]},{"section":"patch-status-statefulset-v1beta2-apps","subsections":[]}]},{"section":"-strong-read-operations-statefulset-v1beta2-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-statefulset-v1beta2-apps","subsections":[]},{"section":"watch-list-statefulset-v1beta2-apps","subsections":[]},{"section":"watch-statefulset-v1beta2-apps","subsections":[]},{"section":"list-all-namespaces-statefulset-v1beta2-apps","subsections":[]},{"section":"list-statefulset-v1beta2-apps","subsections":[]},{"section":"read-statefulset-v1beta2-apps","subsections":[]}]},{"section":"-strong-write-operations-statefulset-v1beta2-apps-strong-","subsections":[{"section":"delete-collection-statefulset-v1beta2-apps","subsections":[]},{"section":"delete-statefulset-v1beta2-apps","subsections":[]},{"section":"replace-statefulset-v1beta2-apps","subsections":[]},{"section":"patch-statefulset-v1beta2-apps","subsections":[]},{"section":"create-statefulset-v1beta2-apps","subsections":[]}]}]},{"section":"servicereference-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"servicereference-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"servicereference-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"servicereference-v1-apiregistration-k8s-io","subsections":[]},{"section":"selfsubjectrulesreview-v1beta1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-selfsubjectrulesreview-v1beta1-authorization-k8s-io-strong-","subsections":[{"section":"create-selfsubjectrulesreview-v1beta1-authorization-k8s-io","subsections":[]}]}]},{"section":"selfsubjectaccessreview-v1beta1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-selfsubjectaccessreview-v1beta1-authorization-k8s-io-strong-","subsections":[{"section":"create-selfsubjectaccessreview-v1beta1-authorization-k8s-io","subsections":[]}]}]},{"section":"scale-v1beta1-extensions","subsections":[]},{"section":"scale-v1beta1-apps","subsections":[]},{"section":"scale-v1-autoscaling","subsections":[]},{"section":"selinuxstrategyoptions-v1beta1-extensions","subsections":[]},{"section":"runtimeclassstrategyoptions-v1beta1-extensions","subsections":[]},{"section":"runtimeclass-v1alpha1-node-k8s-io","subsections":[{"section":"-strong-read-operations-runtimeclass-v1alpha1-node-k8s-io-strong-","subsections":[{"section":"watch-list-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"watch-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"list-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"read-runtimeclass-v1alpha1-node-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-runtimeclass-v1alpha1-node-k8s-io-strong-","subsections":[{"section":"delete-collection-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"delete-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"replace-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"patch-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"create-runtimeclass-v1alpha1-node-k8s-io","subsections":[]}]}]},{"section":"runasuserstrategyoptions-v1beta1-extensions","subsections":[]},{"section":"runasgroupstrategyoptions-v1beta1-extensions","subsections":[]},{"section":"rollingupdatestatefulsetstrategy-v1beta1-apps","subsections":[]},{"section":"rollingupdatestatefulsetstrategy-v1beta2-apps","subsections":[]},{"section":"rollbackconfig-v1beta1-extensions","subsections":[]},{"section":"roleref-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"roleref-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-rolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-list-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-all-namespaces-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-rolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-rolebinding-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-list-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-all-namespaces-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-rolebinding-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"role-v1alpha1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-role-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-list-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-all-namespaces-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-role-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"role-v1beta1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-role-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-list-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-all-namespaces-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-role-v1beta1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-role-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-role-v1beta1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"resourcerule-v1beta1-authorization-k8s-io","subsections":[]},{"section":"resourcemetricstatus-v2beta1-autoscaling","subsections":[]},{"section":"resourcemetricsource-v2beta1-autoscaling","subsections":[]},{"section":"resourceattributes-v1beta1-authorization-k8s-io","subsections":[]},{"section":"replicasetcondition-v1beta1-extensions","subsections":[]},{"section":"replicasetcondition-v1beta2-apps","subsections":[]},{"section":"replicaset-v1beta1-extensions","subsections":[{"section":"-strong-misc-operations-replicaset-v1beta1-extensions-strong-","subsections":[{"section":"patch-scale-replicaset-v1beta1-extensions","subsections":[]},{"section":"replace-scale-replicaset-v1beta1-extensions","subsections":[]},{"section":"read-scale-replicaset-v1beta1-extensions","subsections":[]}]},{"section":"-strong-status-operations-replicaset-v1beta1-extensions-strong-","subsections":[{"section":"replace-status-replicaset-v1beta1-extensions","subsections":[]},{"section":"read-status-replicaset-v1beta1-extensions","subsections":[]},{"section":"patch-status-replicaset-v1beta1-extensions","subsections":[]}]},{"section":"-strong-read-operations-replicaset-v1beta1-extensions-strong-","subsections":[{"section":"watch-list-all-namespaces-replicaset-v1beta1-extensions","subsections":[]},{"section":"watch-list-replicaset-v1beta1-extensions","subsections":[]},{"section":"watch-replicaset-v1beta1-extensions","subsections":[]},{"section":"list-all-namespaces-replicaset-v1beta1-extensions","subsections":[]},{"section":"list-replicaset-v1beta1-extensions","subsections":[]},{"section":"read-replicaset-v1beta1-extensions","subsections":[]}]},{"section":"-strong-write-operations-replicaset-v1beta1-extensions-strong-","subsections":[{"section":"delete-collection-replicaset-v1beta1-extensions","subsections":[]},{"section":"delete-replicaset-v1beta1-extensions","subsections":[]},{"section":"replace-replicaset-v1beta1-extensions","subsections":[]},{"section":"patch-replicaset-v1beta1-extensions","subsections":[]},{"section":"create-replicaset-v1beta1-extensions","subsections":[]}]}]},{"section":"replicaset-v1beta2-apps","subsections":[{"section":"-strong-misc-operations-replicaset-v1beta2-apps-strong-","subsections":[{"section":"patch-scale-replicaset-v1beta2-apps","subsections":[]},{"section":"replace-scale-replicaset-v1beta2-apps","subsections":[]},{"section":"read-scale-replicaset-v1beta2-apps","subsections":[]}]},{"section":"-strong-status-operations-replicaset-v1beta2-apps-strong-","subsections":[{"section":"replace-status-replicaset-v1beta2-apps","subsections":[]},{"section":"read-status-replicaset-v1beta2-apps","subsections":[]},{"section":"patch-status-replicaset-v1beta2-apps","subsections":[]}]},{"section":"-strong-read-operations-replicaset-v1beta2-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-replicaset-v1beta2-apps","subsections":[]},{"section":"watch-list-replicaset-v1beta2-apps","subsections":[]},{"section":"watch-replicaset-v1beta2-apps","subsections":[]},{"section":"list-all-namespaces-replicaset-v1beta2-apps","subsections":[]},{"section":"list-replicaset-v1beta2-apps","subsections":[]},{"section":"read-replicaset-v1beta2-apps","subsections":[]}]},{"section":"-strong-write-operations-replicaset-v1beta2-apps-strong-","subsections":[{"section":"delete-collection-replicaset-v1beta2-apps","subsections":[]},{"section":"delete-replicaset-v1beta2-apps","subsections":[]},{"section":"replace-replicaset-v1beta2-apps","subsections":[]},{"section":"patch-replicaset-v1beta2-apps","subsections":[]},{"section":"create-replicaset-v1beta2-apps","subsections":[]}]}]},{"section":"priorityclass-v1alpha1-scheduling-k8s-io","subsections":[{"section":"-strong-read-operations-priorityclass-v1alpha1-scheduling-k8s-io-strong-","subsections":[{"section":"watch-list-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"watch-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"list-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"read-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-priorityclass-v1alpha1-scheduling-k8s-io-strong-","subsections":[{"section":"delete-collection-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"delete-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"replace-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"patch-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"create-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]}]}]},{"section":"priorityclass-v1beta1-scheduling-k8s-io","subsections":[{"section":"-strong-read-operations-priorityclass-v1beta1-scheduling-k8s-io-strong-","subsections":[{"section":"watch-list-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"watch-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"list-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"read-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-priorityclass-v1beta1-scheduling-k8s-io-strong-","subsections":[{"section":"delete-collection-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"delete-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"replace-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"patch-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"create-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]}]}]},{"section":"policyrule-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"policyrule-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"podsmetricstatus-v2beta1-autoscaling","subsections":[]},{"section":"podsmetricsource-v2beta1-autoscaling","subsections":[]},{"section":"podsecuritypolicy-v1beta1-extensions","subsections":[{"section":"-strong-read-operations-podsecuritypolicy-v1beta1-extensions-strong-","subsections":[{"section":"watch-list-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"watch-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"list-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"read-podsecuritypolicy-v1beta1-extensions","subsections":[]}]},{"section":"-strong-write-operations-podsecuritypolicy-v1beta1-extensions-strong-","subsections":[{"section":"delete-collection-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"delete-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"replace-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"patch-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"create-podsecuritypolicy-v1beta1-extensions","subsections":[]}]}]},{"section":"objectmetricstatus-v2beta1-autoscaling","subsections":[]},{"section":"objectmetricsource-v2beta1-autoscaling","subsections":[]},{"section":"nonresourcerule-v1beta1-authorization-k8s-io","subsections":[]},{"section":"nonresourceattributes-v1beta1-authorization-k8s-io","subsections":[]},{"section":"networkpolicyport-v1beta1-extensions","subsections":[]},{"section":"networkpolicypeer-v1beta1-extensions","subsections":[]},{"section":"networkpolicyingressrule-v1beta1-extensions","subsections":[]},{"section":"networkpolicyegressrule-v1beta1-extensions","subsections":[]},{"section":"networkpolicy-v1beta1-extensions","subsections":[{"section":"-strong-read-operations-networkpolicy-v1beta1-extensions-strong-","subsections":[{"section":"watch-list-all-namespaces-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"watch-list-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"watch-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"list-all-namespaces-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"list-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"read-networkpolicy-v1beta1-extensions","subsections":[]}]},{"section":"-strong-write-operations-networkpolicy-v1beta1-extensions-strong-","subsections":[{"section":"delete-collection-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"delete-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"replace-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"patch-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"create-networkpolicy-v1beta1-extensions","subsections":[]}]}]},{"section":"metricstatus-v2beta1-autoscaling","subsections":[]},{"section":"metricspec-v2beta1-autoscaling","subsections":[]},{"section":"localsubjectaccessreview-v1beta1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-localsubjectaccessreview-v1beta1-authorization-k8s-io-strong-","subsections":[{"section":"create-localsubjectaccessreview-v1beta1-authorization-k8s-io","subsections":[]}]}]},{"section":"lease-v1beta1-coordination-k8s-io","subsections":[{"section":"-strong-read-operations-lease-v1beta1-coordination-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"watch-list-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"watch-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"list-all-namespaces-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"list-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"read-lease-v1beta1-coordination-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-lease-v1beta1-coordination-k8s-io-strong-","subsections":[{"section":"delete-collection-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"delete-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"replace-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"patch-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"create-lease-v1beta1-coordination-k8s-io","subsections":[]}]}]},{"section":"jobtemplatespec-v2alpha1-batch","subsections":[]},{"section":"ingresstls-v1beta1-extensions","subsections":[]},{"section":"ingressrule-v1beta1-extensions","subsections":[]},{"section":"ingressbackend-v1beta1-extensions","subsections":[]},{"section":"ingress-v1beta1-extensions","subsections":[{"section":"-strong-status-operations-ingress-v1beta1-extensions-strong-","subsections":[{"section":"replace-status-ingress-v1beta1-extensions","subsections":[]},{"section":"read-status-ingress-v1beta1-extensions","subsections":[]},{"section":"patch-status-ingress-v1beta1-extensions","subsections":[]}]},{"section":"-strong-read-operations-ingress-v1beta1-extensions-strong-","subsections":[{"section":"watch-list-all-namespaces-ingress-v1beta1-extensions","subsections":[]},{"section":"watch-list-ingress-v1beta1-extensions","subsections":[]},{"section":"watch-ingress-v1beta1-extensions","subsections":[]},{"section":"list-all-namespaces-ingress-v1beta1-extensions","subsections":[]},{"section":"list-ingress-v1beta1-extensions","subsections":[]},{"section":"read-ingress-v1beta1-extensions","subsections":[]}]},{"section":"-strong-write-operations-ingress-v1beta1-extensions-strong-","subsections":[{"section":"delete-collection-ingress-v1beta1-extensions","subsections":[]},{"section":"delete-ingress-v1beta1-extensions","subsections":[]},{"section":"replace-ingress-v1beta1-extensions","subsections":[]},{"section":"patch-ingress-v1beta1-extensions","subsections":[]},{"section":"create-ingress-v1beta1-extensions","subsections":[]}]}]},{"section":"ipblock-v1beta1-extensions","subsections":[]},{"section":"idrange-v1beta1-extensions","subsections":[]},{"section":"hostportrange-v1beta1-extensions","subsections":[]},{"section":"horizontalpodautoscalercondition-v2beta1-autoscaling","subsections":[]},{"section":"horizontalpodautoscaler-v2beta1-autoscaling","subsections":[{"section":"-strong-status-operations-horizontalpodautoscaler-v2beta1-autoscaling-strong-","subsections":[{"section":"replace-status-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"read-status-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"patch-status-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]}]},{"section":"-strong-read-operations-horizontalpodautoscaler-v2beta1-autoscaling-strong-","subsections":[{"section":"watch-list-all-namespaces-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"watch-list-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"watch-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"list-all-namespaces-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"list-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"read-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]}]},{"section":"-strong-write-operations-horizontalpodautoscaler-v2beta1-autoscaling-strong-","subsections":[{"section":"delete-collection-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"delete-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"replace-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"patch-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"create-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]}]}]},{"section":"horizontalpodautoscaler-v2beta2-autoscaling","subsections":[{"section":"-strong-status-operations-horizontalpodautoscaler-v2beta2-autoscaling-strong-","subsections":[{"section":"replace-status-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"read-status-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"patch-status-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]}]},{"section":"-strong-read-operations-horizontalpodautoscaler-v2beta2-autoscaling-strong-","subsections":[{"section":"watch-list-all-namespaces-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"watch-list-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"watch-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"list-all-namespaces-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"list-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"read-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]}]},{"section":"-strong-write-operations-horizontalpodautoscaler-v2beta2-autoscaling-strong-","subsections":[{"section":"delete-collection-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"delete-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"replace-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"patch-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"create-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]}]}]},{"section":"httpingressrulevalue-v1beta1-extensions","subsections":[]},{"section":"httpingresspath-v1beta1-extensions","subsections":[]},{"section":"fsgroupstrategyoptions-v1beta1-extensions","subsections":[]},{"section":"externalmetricstatus-v2beta1-autoscaling","subsections":[]},{"section":"externalmetricsource-v2beta1-autoscaling","subsections":[]},{"section":"eventseries-v1beta1-events-k8s-io","subsections":[]},{"section":"event-v1beta1-events-k8s-io","subsections":[{"section":"-strong-read-operations-event-v1beta1-events-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-event-v1beta1-events-k8s-io","subsections":[]},{"section":"watch-list-event-v1beta1-events-k8s-io","subsections":[]},{"section":"watch-event-v1beta1-events-k8s-io","subsections":[]},{"section":"list-all-namespaces-event-v1beta1-events-k8s-io","subsections":[]},{"section":"list-event-v1beta1-events-k8s-io","subsections":[]},{"section":"read-event-v1beta1-events-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-event-v1beta1-events-k8s-io-strong-","subsections":[{"section":"delete-collection-event-v1beta1-events-k8s-io","subsections":[]},{"section":"delete-event-v1beta1-events-k8s-io","subsections":[]},{"section":"replace-event-v1beta1-events-k8s-io","subsections":[]},{"section":"patch-event-v1beta1-events-k8s-io","subsections":[]},{"section":"create-event-v1beta1-events-k8s-io","subsections":[]}]}]},{"section":"deploymentcondition-v1beta1-extensions","subsections":[]},{"section":"deploymentcondition-v1beta1-apps","subsections":[]},{"section":"deploymentcondition-v1beta2-apps","subsections":[]},{"section":"deployment-v1beta1-extensions","subsections":[{"section":"-strong-misc-operations-deployment-v1beta1-extensions-strong-","subsections":[{"section":"rollback-deployment-v1beta1-extensions","subsections":[]},{"section":"patch-scale-deployment-v1beta1-extensions","subsections":[]},{"section":"replace-scale-deployment-v1beta1-extensions","subsections":[]},{"section":"read-scale-deployment-v1beta1-extensions","subsections":[]}]},{"section":"-strong-status-operations-deployment-v1beta1-extensions-strong-","subsections":[{"section":"replace-status-deployment-v1beta1-extensions","subsections":[]},{"section":"read-status-deployment-v1beta1-extensions","subsections":[]},{"section":"patch-status-deployment-v1beta1-extensions","subsections":[]}]},{"section":"-strong-read-operations-deployment-v1beta1-extensions-strong-","subsections":[{"section":"watch-list-all-namespaces-deployment-v1beta1-extensions","subsections":[]},{"section":"watch-list-deployment-v1beta1-extensions","subsections":[]},{"section":"watch-deployment-v1beta1-extensions","subsections":[]},{"section":"list-all-namespaces-deployment-v1beta1-extensions","subsections":[]},{"section":"list-deployment-v1beta1-extensions","subsections":[]},{"section":"read-deployment-v1beta1-extensions","subsections":[]}]},{"section":"-strong-write-operations-deployment-v1beta1-extensions-strong-","subsections":[{"section":"delete-collection-deployment-v1beta1-extensions","subsections":[]},{"section":"delete-deployment-v1beta1-extensions","subsections":[]},{"section":"replace-deployment-v1beta1-extensions","subsections":[]},{"section":"patch-deployment-v1beta1-extensions","subsections":[]},{"section":"create-deployment-v1beta1-extensions","subsections":[]}]}]},{"section":"deployment-v1beta1-apps","subsections":[{"section":"-strong-misc-operations-deployment-v1beta1-apps-strong-","subsections":[{"section":"rollback-deployment-v1beta1-apps","subsections":[]},{"section":"patch-scale-deployment-v1beta1-apps","subsections":[]},{"section":"replace-scale-deployment-v1beta1-apps","subsections":[]},{"section":"read-scale-deployment-v1beta1-apps","subsections":[]}]},{"section":"-strong-status-operations-deployment-v1beta1-apps-strong-","subsections":[{"section":"replace-status-deployment-v1beta1-apps","subsections":[]},{"section":"read-status-deployment-v1beta1-apps","subsections":[]},{"section":"patch-status-deployment-v1beta1-apps","subsections":[]}]},{"section":"-strong-read-operations-deployment-v1beta1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-deployment-v1beta1-apps","subsections":[]},{"section":"watch-list-deployment-v1beta1-apps","subsections":[]},{"section":"watch-deployment-v1beta1-apps","subsections":[]},{"section":"list-all-namespaces-deployment-v1beta1-apps","subsections":[]},{"section":"list-deployment-v1beta1-apps","subsections":[]},{"section":"read-deployment-v1beta1-apps","subsections":[]}]},{"section":"-strong-write-operations-deployment-v1beta1-apps-strong-","subsections":[{"section":"delete-collection-deployment-v1beta1-apps","subsections":[]},{"section":"delete-deployment-v1beta1-apps","subsections":[]},{"section":"replace-deployment-v1beta1-apps","subsections":[]},{"section":"patch-deployment-v1beta1-apps","subsections":[]},{"section":"create-deployment-v1beta1-apps","subsections":[]}]}]},{"section":"deployment-v1beta2-apps","subsections":[{"section":"-strong-misc-operations-deployment-v1beta2-apps-strong-","subsections":[{"section":"patch-scale-deployment-v1beta2-apps","subsections":[]},{"section":"replace-scale-deployment-v1beta2-apps","subsections":[]},{"section":"read-scale-deployment-v1beta2-apps","subsections":[]}]},{"section":"-strong-status-operations-deployment-v1beta2-apps-strong-","subsections":[{"section":"replace-status-deployment-v1beta2-apps","subsections":[]},{"section":"read-status-deployment-v1beta2-apps","subsections":[]},{"section":"patch-status-deployment-v1beta2-apps","subsections":[]}]},{"section":"-strong-read-operations-deployment-v1beta2-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-deployment-v1beta2-apps","subsections":[]},{"section":"watch-list-deployment-v1beta2-apps","subsections":[]},{"section":"watch-deployment-v1beta2-apps","subsections":[]},{"section":"list-all-namespaces-deployment-v1beta2-apps","subsections":[]},{"section":"list-deployment-v1beta2-apps","subsections":[]},{"section":"read-deployment-v1beta2-apps","subsections":[]}]},{"section":"-strong-write-operations-deployment-v1beta2-apps-strong-","subsections":[{"section":"delete-collection-deployment-v1beta2-apps","subsections":[]},{"section":"delete-deployment-v1beta2-apps","subsections":[]},{"section":"replace-deployment-v1beta2-apps","subsections":[]},{"section":"patch-deployment-v1beta2-apps","subsections":[]},{"section":"create-deployment-v1beta2-apps","subsections":[]}]}]},{"section":"daemonsetupdatestrategy-v1beta1-extensions","subsections":[]},{"section":"daemonsetupdatestrategy-v1beta2-apps","subsections":[]},{"section":"daemonsetcondition-v1beta1-extensions","subsections":[]},{"section":"daemonsetcondition-v1beta2-apps","subsections":[]},{"section":"daemonset-v1beta1-extensions","subsections":[{"section":"-strong-status-operations-daemonset-v1beta1-extensions-strong-","subsections":[{"section":"replace-status-daemonset-v1beta1-extensions","subsections":[]},{"section":"read-status-daemonset-v1beta1-extensions","subsections":[]},{"section":"patch-status-daemonset-v1beta1-extensions","subsections":[]}]},{"section":"-strong-read-operations-daemonset-v1beta1-extensions-strong-","subsections":[{"section":"watch-list-all-namespaces-daemonset-v1beta1-extensions","subsections":[]},{"section":"watch-list-daemonset-v1beta1-extensions","subsections":[]},{"section":"watch-daemonset-v1beta1-extensions","subsections":[]},{"section":"list-all-namespaces-daemonset-v1beta1-extensions","subsections":[]},{"section":"list-daemonset-v1beta1-extensions","subsections":[]},{"section":"read-daemonset-v1beta1-extensions","subsections":[]}]},{"section":"-strong-write-operations-daemonset-v1beta1-extensions-strong-","subsections":[{"section":"delete-collection-daemonset-v1beta1-extensions","subsections":[]},{"section":"delete-daemonset-v1beta1-extensions","subsections":[]},{"section":"replace-daemonset-v1beta1-extensions","subsections":[]},{"section":"patch-daemonset-v1beta1-extensions","subsections":[]},{"section":"create-daemonset-v1beta1-extensions","subsections":[]}]}]},{"section":"daemonset-v1beta2-apps","subsections":[{"section":"-strong-status-operations-daemonset-v1beta2-apps-strong-","subsections":[{"section":"replace-status-daemonset-v1beta2-apps","subsections":[]},{"section":"read-status-daemonset-v1beta2-apps","subsections":[]},{"section":"patch-status-daemonset-v1beta2-apps","subsections":[]}]},{"section":"-strong-read-operations-daemonset-v1beta2-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-daemonset-v1beta2-apps","subsections":[]},{"section":"watch-list-daemonset-v1beta2-apps","subsections":[]},{"section":"watch-daemonset-v1beta2-apps","subsections":[]},{"section":"list-all-namespaces-daemonset-v1beta2-apps","subsections":[]},{"section":"list-daemonset-v1beta2-apps","subsections":[]},{"section":"read-daemonset-v1beta2-apps","subsections":[]}]},{"section":"-strong-write-operations-daemonset-v1beta2-apps-strong-","subsections":[{"section":"delete-collection-daemonset-v1beta2-apps","subsections":[]},{"section":"delete-daemonset-v1beta2-apps","subsections":[]},{"section":"replace-daemonset-v1beta2-apps","subsections":[]},{"section":"patch-daemonset-v1beta2-apps","subsections":[]},{"section":"create-daemonset-v1beta2-apps","subsections":[]}]}]},{"section":"crossversionobjectreference-v2beta1-autoscaling","subsections":[]},{"section":"crossversionobjectreference-v2beta2-autoscaling","subsections":[]},{"section":"cronjob-v2alpha1-batch","subsections":[{"section":"-strong-status-operations-cronjob-v2alpha1-batch-strong-","subsections":[{"section":"replace-status-cronjob-v2alpha1-batch","subsections":[]},{"section":"read-status-cronjob-v2alpha1-batch","subsections":[]},{"section":"patch-status-cronjob-v2alpha1-batch","subsections":[]}]},{"section":"-strong-read-operations-cronjob-v2alpha1-batch-strong-","subsections":[{"section":"watch-list-all-namespaces-cronjob-v2alpha1-batch","subsections":[]},{"section":"watch-list-cronjob-v2alpha1-batch","subsections":[]},{"section":"watch-cronjob-v2alpha1-batch","subsections":[]},{"section":"list-all-namespaces-cronjob-v2alpha1-batch","subsections":[]},{"section":"list-cronjob-v2alpha1-batch","subsections":[]},{"section":"read-cronjob-v2alpha1-batch","subsections":[]}]},{"section":"-strong-write-operations-cronjob-v2alpha1-batch-strong-","subsections":[{"section":"delete-collection-cronjob-v2alpha1-batch","subsections":[]},{"section":"delete-cronjob-v2alpha1-batch","subsections":[]},{"section":"replace-cronjob-v2alpha1-batch","subsections":[]},{"section":"patch-cronjob-v2alpha1-batch","subsections":[]},{"section":"create-cronjob-v2alpha1-batch","subsections":[]}]}]},{"section":"controllerrevision-v1beta1-apps","subsections":[{"section":"-strong-read-operations-controllerrevision-v1beta1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-controllerrevision-v1beta1-apps","subsections":[]},{"section":"watch-list-controllerrevision-v1beta1-apps","subsections":[]},{"section":"watch-controllerrevision-v1beta1-apps","subsections":[]},{"section":"list-all-namespaces-controllerrevision-v1beta1-apps","subsections":[]},{"section":"list-controllerrevision-v1beta1-apps","subsections":[]},{"section":"read-controllerrevision-v1beta1-apps","subsections":[]}]},{"section":"-strong-write-operations-controllerrevision-v1beta1-apps-strong-","subsections":[{"section":"delete-collection-controllerrevision-v1beta1-apps","subsections":[]},{"section":"delete-controllerrevision-v1beta1-apps","subsections":[]},{"section":"replace-controllerrevision-v1beta1-apps","subsections":[]},{"section":"patch-controllerrevision-v1beta1-apps","subsections":[]},{"section":"create-controllerrevision-v1beta1-apps","subsections":[]}]}]},{"section":"controllerrevision-v1beta2-apps","subsections":[{"section":"-strong-read-operations-controllerrevision-v1beta2-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-controllerrevision-v1beta2-apps","subsections":[]},{"section":"watch-list-controllerrevision-v1beta2-apps","subsections":[]},{"section":"watch-controllerrevision-v1beta2-apps","subsections":[]},{"section":"list-all-namespaces-controllerrevision-v1beta2-apps","subsections":[]},{"section":"list-controllerrevision-v1beta2-apps","subsections":[]},{"section":"read-controllerrevision-v1beta2-apps","subsections":[]}]},{"section":"-strong-write-operations-controllerrevision-v1beta2-apps-strong-","subsections":[{"section":"delete-collection-controllerrevision-v1beta2-apps","subsections":[]},{"section":"delete-controllerrevision-v1beta2-apps","subsections":[]},{"section":"replace-controllerrevision-v1beta2-apps","subsections":[]},{"section":"patch-controllerrevision-v1beta2-apps","subsections":[]},{"section":"create-controllerrevision-v1beta2-apps","subsections":[]}]}]},{"section":"clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-clusterrolebinding-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-clusterrolebinding-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-clusterrole-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-clusterrole-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-clusterrole-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-clusterrole-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"allowedhostpath-v1beta1-extensions","subsections":[]},{"section":"allowedflexvolume-v1beta1-extensions","subsections":[]},{"section":"allowedcsidriver-v1beta1-extensions","subsections":[]},{"section":"aggregationrule-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"aggregationrule-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"apiservicecondition-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"apiservice-v1beta1-apiregistration-k8s-io","subsections":[{"section":"-strong-status-operations-apiservice-v1beta1-apiregistration-k8s-io-strong-","subsections":[{"section":"replace-status-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"read-status-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"patch-status-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]}]},{"section":"-strong-read-operations-apiservice-v1beta1-apiregistration-k8s-io-strong-","subsections":[{"section":"watch-list-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"watch-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"list-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"read-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-apiservice-v1beta1-apiregistration-k8s-io-strong-","subsections":[{"section":"delete-collection-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"delete-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"replace-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"patch-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"create-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]}]}]},{"section":"-strong-old-api-versions-strong-","subsections":[]},{"section":"windowssecuritycontextoptions-v1-core","subsections":[]},{"section":"weightedpodaffinityterm-v1-core","subsections":[]},{"section":"webhookthrottleconfig-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"webhookclientconfig-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"webhook-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"watchevent-v1-meta","subsections":[]},{"section":"vspherevirtualdiskvolumesource-v1-core","subsections":[]},{"section":"volumeprojection-v1-core","subsections":[]},{"section":"volumenodeaffinity-v1-core","subsections":[]},{"section":"volumemount-v1-core","subsections":[]},{"section":"volumeerror-v1-storage-k8s-io","subsections":[]},{"section":"volumedevice-v1-core","subsections":[]},{"section":"volumeattachmentsource-v1-storage-k8s-io","subsections":[]},{"section":"validatingwebhook-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"userinfo-v1-authentication-k8s-io","subsections":[]},{"section":"typedlocalobjectreference-v1-core","subsections":[]},{"section":"topologyselectorterm-v1-core","subsections":[]},{"section":"topologyselectorlabelrequirement-v1-core","subsections":[]},{"section":"toleration-v1-core","subsections":[]},{"section":"time-v1-meta","subsections":[]},{"section":"taint-v1-core","subsections":[]},{"section":"tcpsocketaction-v1-core","subsections":[]},{"section":"sysctl-v1-core","subsections":[]},{"section":"supplementalgroupsstrategyoptions-v1beta1-policy","subsections":[]},{"section":"subjectrulesreviewstatus-v1-authorization-k8s-io","subsections":[]},{"section":"subject-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"storageosvolumesource-v1-core","subsections":[]},{"section":"storageospersistentvolumesource-v1-core","subsections":[]},{"section":"statusdetails-v1-meta","subsections":[]},{"section":"statuscause-v1-meta","subsections":[]},{"section":"status-v1-meta","subsections":[]},{"section":"statefulsetupdatestrategy-v1-apps","subsections":[]},{"section":"statefulsetcondition-v1-apps","subsections":[]},{"section":"sessionaffinityconfig-v1-core","subsections":[]},{"section":"servicereference-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"serviceport-v1-core","subsections":[]},{"section":"serviceaccounttokenprojection-v1-core","subsections":[]},{"section":"serveraddressbyclientcidr-v1-meta","subsections":[]},{"section":"securitycontext-v1-core","subsections":[]},{"section":"secretvolumesource-v1-core","subsections":[]},{"section":"secretreference-v1-core","subsections":[]},{"section":"secretprojection-v1-core","subsections":[]},{"section":"secretkeyselector-v1-core","subsections":[]},{"section":"secretenvsource-v1-core","subsections":[]},{"section":"scopedresourceselectorrequirement-v1-core","subsections":[]},{"section":"scopeselector-v1-core","subsections":[]},{"section":"scaleiovolumesource-v1-core","subsections":[]},{"section":"scaleiopersistentvolumesource-v1-core","subsections":[]},{"section":"scale-v1beta2-apps","subsections":[]},{"section":"selinuxstrategyoptions-v1beta1-policy","subsections":[]},{"section":"selinuxoptions-v1-core","subsections":[]},{"section":"runtimeclassstrategyoptions-v1beta1-policy","subsections":[]},{"section":"runasuserstrategyoptions-v1beta1-policy","subsections":[]},{"section":"runasgroupstrategyoptions-v1beta1-policy","subsections":[]},{"section":"rulewithoperations-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"rollingupdatestatefulsetstrategy-v1-apps","subsections":[]},{"section":"rollbackconfig-v1beta1-apps","subsections":[]},{"section":"roleref-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"resourcerule-v1-authorization-k8s-io","subsections":[]},{"section":"resourcerequirements-v1-core","subsections":[]},{"section":"resourcemetricstatus-v2beta2-autoscaling","subsections":[]},{"section":"resourcemetricsource-v2beta2-autoscaling","subsections":[]},{"section":"resourcefieldselector-v1-core","subsections":[]},{"section":"resourceattributes-v1-authorization-k8s-io","subsections":[]},{"section":"replicationcontrollercondition-v1-core","subsections":[]},{"section":"replicasetcondition-v1-apps","subsections":[]},{"section":"rbdvolumesource-v1-core","subsections":[]},{"section":"rbdpersistentvolumesource-v1-core","subsections":[]},{"section":"quobytevolumesource-v1-core","subsections":[]},{"section":"quantity-resource-core","subsections":[]},{"section":"projectedvolumesource-v1-core","subsections":[]},{"section":"probe-v1-core","subsections":[]},{"section":"preferredschedulingterm-v1-core","subsections":[]},{"section":"preconditions-v1-meta","subsections":[]},{"section":"portworxvolumesource-v1-core","subsections":[]},{"section":"policyrule-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"policy-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"podsmetricstatus-v2beta2-autoscaling","subsections":[]},{"section":"podsmetricsource-v2beta2-autoscaling","subsections":[]},{"section":"podsecuritycontext-v1-core","subsections":[]},{"section":"podreadinessgate-v1-core","subsections":[]},{"section":"poddnsconfigoption-v1-core","subsections":[]},{"section":"poddnsconfig-v1-core","subsections":[]},{"section":"podcondition-v1-core","subsections":[]},{"section":"podantiaffinity-v1-core","subsections":[]},{"section":"podaffinityterm-v1-core","subsections":[]},{"section":"podaffinity-v1-core","subsections":[]},{"section":"photonpersistentdiskvolumesource-v1-core","subsections":[]},{"section":"persistentvolumeclaimvolumesource-v1-core","subsections":[]},{"section":"persistentvolumeclaimcondition-v1-core","subsections":[]},{"section":"patch-v1-meta","subsections":[]},{"section":"ownerreference-v1-meta","subsections":[]},{"section":"objectreference-v1-core","subsections":[]},{"section":"objectmetricstatus-v2beta2-autoscaling","subsections":[]},{"section":"objectmetricsource-v2beta2-autoscaling","subsections":[]},{"section":"objectmeta-v1-meta","subsections":[]},{"section":"objectfieldselector-v1-core","subsections":[]},{"section":"nonresourcerule-v1-authorization-k8s-io","subsections":[]},{"section":"nonresourceattributes-v1-authorization-k8s-io","subsections":[]},{"section":"nodesysteminfo-v1-core","subsections":[]},{"section":"nodeselectorterm-v1-core","subsections":[]},{"section":"nodeselectorrequirement-v1-core","subsections":[]},{"section":"nodeselector-v1-core","subsections":[]},{"section":"nodedaemonendpoints-v1-core","subsections":[]},{"section":"nodeconfigstatus-v1-core","subsections":[]},{"section":"nodeconfigsource-v1-core","subsections":[]},{"section":"nodecondition-v1-core","subsections":[]},{"section":"nodeaffinity-v1-core","subsections":[]},{"section":"nodeaddress-v1-core","subsections":[]},{"section":"networkpolicyport-v1-networking-k8s-io","subsections":[]},{"section":"networkpolicypeer-v1-networking-k8s-io","subsections":[]},{"section":"networkpolicyingressrule-v1-networking-k8s-io","subsections":[]},{"section":"networkpolicyegressrule-v1-networking-k8s-io","subsections":[]},{"section":"nfsvolumesource-v1-core","subsections":[]},{"section":"mutatingwebhook-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"microtime-v1-meta","subsections":[]},{"section":"metricvaluestatus-v2beta2-autoscaling","subsections":[]},{"section":"metrictarget-v2beta2-autoscaling","subsections":[]},{"section":"metricstatus-v2beta2-autoscaling","subsections":[]},{"section":"metricspec-v2beta2-autoscaling","subsections":[]},{"section":"metricidentifier-v2beta2-autoscaling","subsections":[]},{"section":"managedfieldsentry-v1-meta","subsections":[]},{"section":"localvolumesource-v1-core","subsections":[]},{"section":"localobjectreference-v1-core","subsections":[]},{"section":"loadbalancerstatus-v1-core","subsections":[]},{"section":"loadbalanceringress-v1-core","subsections":[]},{"section":"listmeta-v1-meta","subsections":[]},{"section":"limitrangeitem-v1-core","subsections":[]},{"section":"lifecycle-v1-core","subsections":[]},{"section":"labelselectorrequirement-v1-meta","subsections":[]},{"section":"labelselector-v1-meta","subsections":[]},{"section":"keytopath-v1-core","subsections":[]},{"section":"jobtemplatespec-v1beta1-batch","subsections":[]},{"section":"jobcondition-v1-batch","subsections":[]},{"section":"jsonschemapropsorbool-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"jsonschemapropsorarray-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"jsonschemaprops-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"json-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"initializers-v1-meta","subsections":[]},{"section":"initializer-v1-meta","subsections":[]},{"section":"ingresstls-v1beta1-networking-k8s-io","subsections":[]},{"section":"ingressrule-v1beta1-networking-k8s-io","subsections":[]},{"section":"ingressbackend-v1beta1-networking-k8s-io","subsections":[]},{"section":"iscsivolumesource-v1-core","subsections":[]},{"section":"iscsipersistentvolumesource-v1-core","subsections":[]},{"section":"ipblock-v1-networking-k8s-io","subsections":[]},{"section":"idrange-v1beta1-policy","subsections":[]},{"section":"hostportrange-v1beta1-policy","subsections":[]},{"section":"hostpathvolumesource-v1-core","subsections":[]},{"section":"hostalias-v1-core","subsections":[]},{"section":"horizontalpodautoscalercondition-v2beta2-autoscaling","subsections":[]},{"section":"handler-v1-core","subsections":[]},{"section":"httpingressrulevalue-v1beta1-networking-k8s-io","subsections":[]},{"section":"httpingresspath-v1beta1-networking-k8s-io","subsections":[]},{"section":"httpheader-v1-core","subsections":[]},{"section":"httpgetaction-v1-core","subsections":[]},{"section":"groupversionfordiscovery-v1-meta","subsections":[]},{"section":"glusterfsvolumesource-v1-core","subsections":[]},{"section":"glusterfspersistentvolumesource-v1-core","subsections":[]},{"section":"gitrepovolumesource-v1-core","subsections":[]},{"section":"gcepersistentdiskvolumesource-v1-core","subsections":[]},{"section":"flockervolumesource-v1-core","subsections":[]},{"section":"flexvolumesource-v1-core","subsections":[]},{"section":"flexpersistentvolumesource-v1-core","subsections":[]},{"section":"fields-v1-meta","subsections":[]},{"section":"fsgroupstrategyoptions-v1beta1-policy","subsections":[]},{"section":"fcvolumesource-v1-core","subsections":[]},{"section":"externalmetricstatus-v2beta2-autoscaling","subsections":[]},{"section":"externalmetricsource-v2beta2-autoscaling","subsections":[]},{"section":"externaldocumentation-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"execaction-v1-core","subsections":[]},{"section":"eviction-v1beta1-policy","subsections":[]},{"section":"eventsource-v1-core","subsections":[]},{"section":"eventseries-v1-core","subsections":[]},{"section":"envvarsource-v1-core","subsections":[]},{"section":"envvar-v1-core","subsections":[]},{"section":"envfromsource-v1-core","subsections":[]},{"section":"endpointsubset-v1-core","subsections":[]},{"section":"endpointport-v1-core","subsections":[]},{"section":"endpointaddress-v1-core","subsections":[]},{"section":"emptydirvolumesource-v1-core","subsections":[]},{"section":"downwardapivolumesource-v1-core","subsections":[]},{"section":"downwardapivolumefile-v1-core","subsections":[]},{"section":"downwardapiprojection-v1-core","subsections":[]},{"section":"deploymentcondition-v1-apps","subsections":[]},{"section":"deleteoptions-v1-meta","subsections":[]},{"section":"daemonsetupdatestrategy-v1-apps","subsections":[]},{"section":"daemonsetcondition-v1-apps","subsections":[]},{"section":"daemonendpoint-v1-core","subsections":[]},{"section":"customresourcevalidation-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcesubresources-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcesubresourcestatus-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcesubresourcescale-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcedefinitionversion-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcedefinitionnames-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcedefinitioncondition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourceconversion-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcecolumndefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"crossversionobjectreference-v1-autoscaling","subsections":[]},{"section":"containerstatewaiting-v1-core","subsections":[]},{"section":"containerstateterminated-v1-core","subsections":[]},{"section":"containerstaterunning-v1-core","subsections":[]},{"section":"containerstate-v1-core","subsections":[]},{"section":"containerport-v1-core","subsections":[]},{"section":"containerimage-v1-core","subsections":[]},{"section":"configmapvolumesource-v1-core","subsections":[]},{"section":"configmapprojection-v1-core","subsections":[]},{"section":"configmapnodeconfigsource-v1-core","subsections":[]},{"section":"configmapkeyselector-v1-core","subsections":[]},{"section":"configmapenvsource-v1-core","subsections":[]},{"section":"componentcondition-v1-core","subsections":[]},{"section":"clientipconfig-v1-core","subsections":[]},{"section":"cindervolumesource-v1-core","subsections":[]},{"section":"cinderpersistentvolumesource-v1-core","subsections":[]},{"section":"certificatesigningrequestcondition-v1beta1-certificates-k8s-io","subsections":[]},{"section":"cephfsvolumesource-v1-core","subsections":[]},{"section":"cephfspersistentvolumesource-v1-core","subsections":[]},{"section":"capabilities-v1-core","subsections":[]},{"section":"csivolumesource-v1-core","subsections":[]},{"section":"csipersistentvolumesource-v1-core","subsections":[]},{"section":"csinodedriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"azurefilevolumesource-v1-core","subsections":[]},{"section":"azurefilepersistentvolumesource-v1-core","subsections":[]},{"section":"azurediskvolumesource-v1-core","subsections":[]},{"section":"attachedvolume-v1-core","subsections":[]},{"section":"allowedhostpath-v1beta1-policy","subsections":[]},{"section":"allowedflexvolume-v1beta1-policy","subsections":[]},{"section":"allowedcsidriver-v1beta1-policy","subsections":[]},{"section":"aggregationrule-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"affinity-v1-core","subsections":[]},{"section":"awselasticblockstorevolumesource-v1-core","subsections":[]},{"section":"apiversions-v1-meta","subsections":[]},{"section":"apiservicecondition-v1-apiregistration-k8s-io","subsections":[]},{"section":"apiresource-v1-meta","subsections":[]},{"section":"apigroup-v1-meta","subsections":[]},{"section":"-strong-definitions-strong-","subsections":[]},{"section":"networkpolicy-v1-networking-k8s-io","subsections":[{"section":"-strong-read-operations-networkpolicy-v1-networking-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"watch-list-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"watch-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"list-all-namespaces-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"list-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"read-networkpolicy-v1-networking-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-networkpolicy-v1-networking-k8s-io-strong-","subsections":[{"section":"delete-collection-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"delete-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"replace-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"patch-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"create-networkpolicy-v1-networking-k8s-io","subsections":[]}]}]},{"section":"tokenreview-v1-authentication-k8s-io","subsections":[{"section":"-strong-write-operations-tokenreview-v1-authentication-k8s-io-strong-","subsections":[{"section":"create-tokenreview-v1-authentication-k8s-io","subsections":[]}]}]},{"section":"subjectaccessreview-v1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-subjectaccessreview-v1-authorization-k8s-io-strong-","subsections":[{"section":"create-subjectaccessreview-v1-authorization-k8s-io","subsections":[]}]}]},{"section":"serviceaccount-v1-core","subsections":[{"section":"-strong-read-operations-serviceaccount-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-serviceaccount-v1-core","subsections":[]},{"section":"watch-list-serviceaccount-v1-core","subsections":[]},{"section":"watch-serviceaccount-v1-core","subsections":[]},{"section":"list-all-namespaces-serviceaccount-v1-core","subsections":[]},{"section":"list-serviceaccount-v1-core","subsections":[]},{"section":"read-serviceaccount-v1-core","subsections":[]}]},{"section":"-strong-write-operations-serviceaccount-v1-core-strong-","subsections":[{"section":"delete-collection-serviceaccount-v1-core","subsections":[]},{"section":"delete-serviceaccount-v1-core","subsections":[]},{"section":"replace-serviceaccount-v1-core","subsections":[]},{"section":"patch-serviceaccount-v1-core","subsections":[]},{"section":"create-serviceaccount-v1-core","subsections":[]}]}]},{"section":"selfsubjectrulesreview-v1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-selfsubjectrulesreview-v1-authorization-k8s-io-strong-","subsections":[{"section":"create-selfsubjectrulesreview-v1-authorization-k8s-io","subsections":[]}]}]},{"section":"selfsubjectaccessreview-v1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-selfsubjectaccessreview-v1-authorization-k8s-io-strong-","subsections":[{"section":"create-selfsubjectaccessreview-v1-authorization-k8s-io","subsections":[]}]}]},{"section":"runtimeclass-v1beta1-node-k8s-io","subsections":[{"section":"-strong-read-operations-runtimeclass-v1beta1-node-k8s-io-strong-","subsections":[{"section":"watch-list-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"watch-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"list-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"read-runtimeclass-v1beta1-node-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-runtimeclass-v1beta1-node-k8s-io-strong-","subsections":[{"section":"delete-collection-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"delete-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"replace-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"patch-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"create-runtimeclass-v1beta1-node-k8s-io","subsections":[]}]}]},{"section":"rolebinding-v1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-rolebinding-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-list-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-all-namespaces-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-rolebinding-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"role-v1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-role-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-list-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-all-namespaces-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-role-v1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-role-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-role-v1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"resourcequota-v1-core","subsections":[{"section":"-strong-status-operations-resourcequota-v1-core-strong-","subsections":[{"section":"replace-status-resourcequota-v1-core","subsections":[]},{"section":"read-status-resourcequota-v1-core","subsections":[]},{"section":"patch-status-resourcequota-v1-core","subsections":[]}]},{"section":"-strong-read-operations-resourcequota-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-resourcequota-v1-core","subsections":[]},{"section":"watch-list-resourcequota-v1-core","subsections":[]},{"section":"watch-resourcequota-v1-core","subsections":[]},{"section":"list-all-namespaces-resourcequota-v1-core","subsections":[]},{"section":"list-resourcequota-v1-core","subsections":[]},{"section":"read-resourcequota-v1-core","subsections":[]}]},{"section":"-strong-write-operations-resourcequota-v1-core-strong-","subsections":[{"section":"delete-collection-resourcequota-v1-core","subsections":[]},{"section":"delete-resourcequota-v1-core","subsections":[]},{"section":"replace-resourcequota-v1-core","subsections":[]},{"section":"patch-resourcequota-v1-core","subsections":[]},{"section":"create-resourcequota-v1-core","subsections":[]}]}]},{"section":"persistentvolume-v1-core","subsections":[{"section":"-strong-status-operations-persistentvolume-v1-core-strong-","subsections":[{"section":"replace-status-persistentvolume-v1-core","subsections":[]},{"section":"read-status-persistentvolume-v1-core","subsections":[]},{"section":"patch-status-persistentvolume-v1-core","subsections":[]}]},{"section":"-strong-read-operations-persistentvolume-v1-core-strong-","subsections":[{"section":"watch-list-persistentvolume-v1-core","subsections":[]},{"section":"watch-persistentvolume-v1-core","subsections":[]},{"section":"list-persistentvolume-v1-core","subsections":[]},{"section":"read-persistentvolume-v1-core","subsections":[]}]},{"section":"-strong-write-operations-persistentvolume-v1-core-strong-","subsections":[{"section":"delete-collection-persistentvolume-v1-core","subsections":[]},{"section":"delete-persistentvolume-v1-core","subsections":[]},{"section":"replace-persistentvolume-v1-core","subsections":[]},{"section":"patch-persistentvolume-v1-core","subsections":[]},{"section":"create-persistentvolume-v1-core","subsections":[]}]}]},{"section":"node-v1-core","subsections":[{"section":"-strong-proxy-operations-node-v1-core-strong-","subsections":[{"section":"replace-connect-proxy-path-node-v1-core","subsections":[]},{"section":"replace-connect-proxy-node-v1-core","subsections":[]},{"section":"head-connect-proxy-path-node-v1-core","subsections":[]},{"section":"head-connect-proxy-node-v1-core","subsections":[]},{"section":"get-connect-proxy-path-node-v1-core","subsections":[]},{"section":"get-connect-proxy-node-v1-core","subsections":[]},{"section":"delete-connect-proxy-path-node-v1-core","subsections":[]},{"section":"delete-connect-proxy-node-v1-core","subsections":[]},{"section":"create-connect-proxy-path-node-v1-core","subsections":[]},{"section":"create-connect-proxy-node-v1-core","subsections":[]}]},{"section":"-strong-status-operations-node-v1-core-strong-","subsections":[{"section":"replace-status-node-v1-core","subsections":[]},{"section":"read-status-node-v1-core","subsections":[]},{"section":"patch-status-node-v1-core","subsections":[]}]},{"section":"-strong-read-operations-node-v1-core-strong-","subsections":[{"section":"watch-list-node-v1-core","subsections":[]},{"section":"watch-node-v1-core","subsections":[]},{"section":"list-node-v1-core","subsections":[]},{"section":"read-node-v1-core","subsections":[]}]},{"section":"-strong-write-operations-node-v1-core-strong-","subsections":[{"section":"delete-collection-node-v1-core","subsections":[]},{"section":"delete-node-v1-core","subsections":[]},{"section":"replace-node-v1-core","subsections":[]},{"section":"patch-node-v1-core","subsections":[]},{"section":"create-node-v1-core","subsections":[]}]}]},{"section":"namespace-v1-core","subsections":[{"section":"-strong-status-operations-namespace-v1-core-strong-","subsections":[{"section":"replace-status-namespace-v1-core","subsections":[]},{"section":"read-status-namespace-v1-core","subsections":[]},{"section":"patch-status-namespace-v1-core","subsections":[]}]},{"section":"-strong-read-operations-namespace-v1-core-strong-","subsections":[{"section":"watch-list-namespace-v1-core","subsections":[]},{"section":"watch-namespace-v1-core","subsections":[]},{"section":"list-namespace-v1-core","subsections":[]},{"section":"read-namespace-v1-core","subsections":[]}]},{"section":"-strong-write-operations-namespace-v1-core-strong-","subsections":[{"section":"delete-namespace-v1-core","subsections":[]},{"section":"replace-namespace-v1-core","subsections":[]},{"section":"patch-namespace-v1-core","subsections":[]},{"section":"create-namespace-v1-core","subsections":[]}]}]},{"section":"localsubjectaccessreview-v1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-localsubjectaccessreview-v1-authorization-k8s-io-strong-","subsections":[{"section":"create-localsubjectaccessreview-v1-authorization-k8s-io","subsections":[]}]}]},{"section":"lease-v1-coordination-k8s-io","subsections":[{"section":"-strong-read-operations-lease-v1-coordination-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-lease-v1-coordination-k8s-io","subsections":[]},{"section":"watch-list-lease-v1-coordination-k8s-io","subsections":[]},{"section":"watch-lease-v1-coordination-k8s-io","subsections":[]},{"section":"list-all-namespaces-lease-v1-coordination-k8s-io","subsections":[]},{"section":"list-lease-v1-coordination-k8s-io","subsections":[]},{"section":"read-lease-v1-coordination-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-lease-v1-coordination-k8s-io-strong-","subsections":[{"section":"delete-collection-lease-v1-coordination-k8s-io","subsections":[]},{"section":"delete-lease-v1-coordination-k8s-io","subsections":[]},{"section":"replace-lease-v1-coordination-k8s-io","subsections":[]},{"section":"patch-lease-v1-coordination-k8s-io","subsections":[]},{"section":"create-lease-v1-coordination-k8s-io","subsections":[]}]}]},{"section":"componentstatus-v1-core","subsections":[{"section":"-strong-read-operations-componentstatus-v1-core-strong-","subsections":[{"section":"list-componentstatus-v1-core","subsections":[]},{"section":"read-componentstatus-v1-core","subsections":[]}]}]},{"section":"clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-clusterrolebinding-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-clusterrolebinding-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"clusterrole-v1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-clusterrole-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-clusterrole-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[{"section":"-strong-status-operations-certificatesigningrequest-v1beta1-certificates-k8s-io-strong-","subsections":[{"section":"replace-status-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"read-status-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"patch-status-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]}]},{"section":"-strong-read-operations-certificatesigningrequest-v1beta1-certificates-k8s-io-strong-","subsections":[{"section":"watch-list-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"watch-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"list-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"read-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-certificatesigningrequest-v1beta1-certificates-k8s-io-strong-","subsections":[{"section":"delete-collection-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"delete-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"replace-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"patch-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"create-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]}]}]},{"section":"binding-v1-core","subsections":[{"section":"-strong-write-operations-binding-v1-core-strong-","subsections":[{"section":"create-binding-v1-core","subsections":[]}]}]},{"section":"auditsink-v1alpha1-auditregistration-k8s-io","subsections":[{"section":"-strong-read-operations-auditsink-v1alpha1-auditregistration-k8s-io-strong-","subsections":[{"section":"watch-list-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"watch-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"list-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"read-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-auditsink-v1alpha1-auditregistration-k8s-io-strong-","subsections":[{"section":"delete-collection-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"delete-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"replace-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"patch-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"create-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]}]}]},{"section":"apiservice-v1-apiregistration-k8s-io","subsections":[{"section":"-strong-status-operations-apiservice-v1-apiregistration-k8s-io-strong-","subsections":[{"section":"replace-status-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"read-status-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"patch-status-apiservice-v1-apiregistration-k8s-io","subsections":[]}]},{"section":"-strong-read-operations-apiservice-v1-apiregistration-k8s-io-strong-","subsections":[{"section":"watch-list-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"watch-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"list-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"read-apiservice-v1-apiregistration-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-apiservice-v1-apiregistration-k8s-io-strong-","subsections":[{"section":"delete-collection-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"delete-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"replace-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"patch-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"create-apiservice-v1-apiregistration-k8s-io","subsections":[]}]}]},{"section":"-strong-cluster-apis-strong-","subsections":[]},{"section":"podsecuritypolicy-v1beta1-policy","subsections":[{"section":"-strong-read-operations-podsecuritypolicy-v1beta1-policy-strong-","subsections":[{"section":"watch-list-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"watch-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"list-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"read-podsecuritypolicy-v1beta1-policy","subsections":[]}]},{"section":"-strong-write-operations-podsecuritypolicy-v1beta1-policy-strong-","subsections":[{"section":"delete-collection-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"delete-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"replace-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"patch-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"create-podsecuritypolicy-v1beta1-policy","subsections":[]}]}]},{"section":"podpreset-v1alpha1-settings-k8s-io","subsections":[{"section":"-strong-read-operations-podpreset-v1alpha1-settings-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"watch-list-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"watch-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"list-all-namespaces-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"list-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"read-podpreset-v1alpha1-settings-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-podpreset-v1alpha1-settings-k8s-io-strong-","subsections":[{"section":"delete-collection-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"delete-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"replace-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"patch-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"create-podpreset-v1alpha1-settings-k8s-io","subsections":[]}]}]},{"section":"priorityclass-v1-scheduling-k8s-io","subsections":[{"section":"-strong-read-operations-priorityclass-v1-scheduling-k8s-io-strong-","subsections":[{"section":"watch-list-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"watch-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"list-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"read-priorityclass-v1-scheduling-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-priorityclass-v1-scheduling-k8s-io-strong-","subsections":[{"section":"delete-collection-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"delete-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"replace-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"patch-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"create-priorityclass-v1-scheduling-k8s-io","subsections":[]}]}]},{"section":"poddisruptionbudget-v1beta1-policy","subsections":[{"section":"-strong-status-operations-poddisruptionbudget-v1beta1-policy-strong-","subsections":[{"section":"replace-status-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"read-status-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"patch-status-poddisruptionbudget-v1beta1-policy","subsections":[]}]},{"section":"-strong-read-operations-poddisruptionbudget-v1beta1-policy-strong-","subsections":[{"section":"watch-list-all-namespaces-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"watch-list-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"watch-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"list-all-namespaces-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"list-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"read-poddisruptionbudget-v1beta1-policy","subsections":[]}]},{"section":"-strong-write-operations-poddisruptionbudget-v1beta1-policy-strong-","subsections":[{"section":"delete-collection-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"delete-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"replace-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"patch-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"create-poddisruptionbudget-v1beta1-policy","subsections":[]}]}]},{"section":"podtemplate-v1-core","subsections":[{"section":"-strong-read-operations-podtemplate-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-podtemplate-v1-core","subsections":[]},{"section":"watch-list-podtemplate-v1-core","subsections":[]},{"section":"watch-podtemplate-v1-core","subsections":[]},{"section":"list-all-namespaces-podtemplate-v1-core","subsections":[]},{"section":"list-podtemplate-v1-core","subsections":[]},{"section":"read-podtemplate-v1-core","subsections":[]}]},{"section":"-strong-write-operations-podtemplate-v1-core-strong-","subsections":[{"section":"delete-collection-podtemplate-v1-core","subsections":[]},{"section":"delete-podtemplate-v1-core","subsections":[]},{"section":"replace-podtemplate-v1-core","subsections":[]},{"section":"patch-podtemplate-v1-core","subsections":[]},{"section":"create-podtemplate-v1-core","subsections":[]}]}]},{"section":"validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[{"section":"-strong-read-operations-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","subsections":[{"section":"watch-list-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"watch-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"list-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"read-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","subsections":[{"section":"delete-collection-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"delete-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"replace-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"patch-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"create-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]}]}]},{"section":"mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[{"section":"-strong-read-operations-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","subsections":[{"section":"watch-list-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"watch-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"list-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"read-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","subsections":[{"section":"delete-collection-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"delete-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"replace-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"patch-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"create-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]}]}]},{"section":"horizontalpodautoscaler-v1-autoscaling","subsections":[{"section":"-strong-status-operations-horizontalpodautoscaler-v1-autoscaling-strong-","subsections":[{"section":"replace-status-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"read-status-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"patch-status-horizontalpodautoscaler-v1-autoscaling","subsections":[]}]},{"section":"-strong-read-operations-horizontalpodautoscaler-v1-autoscaling-strong-","subsections":[{"section":"watch-list-all-namespaces-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"watch-list-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"watch-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"list-all-namespaces-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"list-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"read-horizontalpodautoscaler-v1-autoscaling","subsections":[]}]},{"section":"-strong-write-operations-horizontalpodautoscaler-v1-autoscaling-strong-","subsections":[{"section":"delete-collection-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"delete-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"replace-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"patch-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"create-horizontalpodautoscaler-v1-autoscaling","subsections":[]}]}]},{"section":"limitrange-v1-core","subsections":[{"section":"-strong-read-operations-limitrange-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-limitrange-v1-core","subsections":[]},{"section":"watch-list-limitrange-v1-core","subsections":[]},{"section":"watch-limitrange-v1-core","subsections":[]},{"section":"list-all-namespaces-limitrange-v1-core","subsections":[]},{"section":"list-limitrange-v1-core","subsections":[]},{"section":"read-limitrange-v1-core","subsections":[]}]},{"section":"-strong-write-operations-limitrange-v1-core-strong-","subsections":[{"section":"delete-collection-limitrange-v1-core","subsections":[]},{"section":"delete-limitrange-v1-core","subsections":[]},{"section":"replace-limitrange-v1-core","subsections":[]},{"section":"patch-limitrange-v1-core","subsections":[]},{"section":"create-limitrange-v1-core","subsections":[]}]}]},{"section":"event-v1-core","subsections":[{"section":"-strong-read-operations-event-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-event-v1-core","subsections":[]},{"section":"watch-list-event-v1-core","subsections":[]},{"section":"watch-event-v1-core","subsections":[]},{"section":"list-all-namespaces-event-v1-core","subsections":[]},{"section":"list-event-v1-core","subsections":[]},{"section":"read-event-v1-core","subsections":[]}]},{"section":"-strong-write-operations-event-v1-core-strong-","subsections":[{"section":"delete-collection-event-v1-core","subsections":[]},{"section":"delete-event-v1-core","subsections":[]},{"section":"replace-event-v1-core","subsections":[]},{"section":"patch-event-v1-core","subsections":[]},{"section":"create-event-v1-core","subsections":[]}]}]},{"section":"customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[{"section":"-strong-status-operations-customresourcedefinition-v1beta1-apiextensions-k8s-io-strong-","subsections":[{"section":"replace-status-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"read-status-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"patch-status-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]}]},{"section":"-strong-read-operations-customresourcedefinition-v1beta1-apiextensions-k8s-io-strong-","subsections":[{"section":"watch-list-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"watch-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"list-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"read-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-customresourcedefinition-v1beta1-apiextensions-k8s-io-strong-","subsections":[{"section":"delete-collection-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"delete-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"replace-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"patch-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"create-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]}]}]},{"section":"controllerrevision-v1-apps","subsections":[{"section":"-strong-read-operations-controllerrevision-v1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-controllerrevision-v1-apps","subsections":[]},{"section":"watch-list-controllerrevision-v1-apps","subsections":[]},{"section":"watch-controllerrevision-v1-apps","subsections":[]},{"section":"list-all-namespaces-controllerrevision-v1-apps","subsections":[]},{"section":"list-controllerrevision-v1-apps","subsections":[]},{"section":"read-controllerrevision-v1-apps","subsections":[]}]},{"section":"-strong-write-operations-controllerrevision-v1-apps-strong-","subsections":[{"section":"delete-collection-controllerrevision-v1-apps","subsections":[]},{"section":"delete-controllerrevision-v1-apps","subsections":[]},{"section":"replace-controllerrevision-v1-apps","subsections":[]},{"section":"patch-controllerrevision-v1-apps","subsections":[]},{"section":"create-controllerrevision-v1-apps","subsections":[]}]}]},{"section":"-strong-metadata-apis-strong-","subsections":[]},{"section":"volumeattachment-v1-storage-k8s-io","subsections":[{"section":"-strong-status-operations-volumeattachment-v1-storage-k8s-io-strong-","subsections":[{"section":"replace-status-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"read-status-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"patch-status-volumeattachment-v1-storage-k8s-io","subsections":[]}]},{"section":"-strong-read-operations-volumeattachment-v1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"watch-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"list-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"read-volumeattachment-v1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-volumeattachment-v1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"delete-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"replace-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"patch-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"create-volumeattachment-v1-storage-k8s-io","subsections":[]}]}]},{"section":"volume-v1-core","subsections":[]},{"section":"storageclass-v1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-storageclass-v1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"watch-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"list-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"read-storageclass-v1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-storageclass-v1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"delete-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"replace-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"patch-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"create-storageclass-v1-storage-k8s-io","subsections":[]}]}]},{"section":"persistentvolumeclaim-v1-core","subsections":[{"section":"-strong-status-operations-persistentvolumeclaim-v1-core-strong-","subsections":[{"section":"replace-status-persistentvolumeclaim-v1-core","subsections":[]},{"section":"read-status-persistentvolumeclaim-v1-core","subsections":[]},{"section":"patch-status-persistentvolumeclaim-v1-core","subsections":[]}]},{"section":"-strong-read-operations-persistentvolumeclaim-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-persistentvolumeclaim-v1-core","subsections":[]},{"section":"watch-list-persistentvolumeclaim-v1-core","subsections":[]},{"section":"watch-persistentvolumeclaim-v1-core","subsections":[]},{"section":"list-all-namespaces-persistentvolumeclaim-v1-core","subsections":[]},{"section":"list-persistentvolumeclaim-v1-core","subsections":[]},{"section":"read-persistentvolumeclaim-v1-core","subsections":[]}]},{"section":"-strong-write-operations-persistentvolumeclaim-v1-core-strong-","subsections":[{"section":"delete-collection-persistentvolumeclaim-v1-core","subsections":[]},{"section":"delete-persistentvolumeclaim-v1-core","subsections":[]},{"section":"replace-persistentvolumeclaim-v1-core","subsections":[]},{"section":"patch-persistentvolumeclaim-v1-core","subsections":[]},{"section":"create-persistentvolumeclaim-v1-core","subsections":[]}]}]},{"section":"secret-v1-core","subsections":[{"section":"-strong-read-operations-secret-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-secret-v1-core","subsections":[]},{"section":"watch-list-secret-v1-core","subsections":[]},{"section":"watch-secret-v1-core","subsections":[]},{"section":"list-all-namespaces-secret-v1-core","subsections":[]},{"section":"list-secret-v1-core","subsections":[]},{"section":"read-secret-v1-core","subsections":[]}]},{"section":"-strong-write-operations-secret-v1-core-strong-","subsections":[{"section":"delete-collection-secret-v1-core","subsections":[]},{"section":"delete-secret-v1-core","subsections":[]},{"section":"replace-secret-v1-core","subsections":[]},{"section":"patch-secret-v1-core","subsections":[]},{"section":"create-secret-v1-core","subsections":[]}]}]},{"section":"csinode-v1beta1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-csinode-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"watch-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"list-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"read-csinode-v1beta1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-csinode-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"delete-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"replace-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"patch-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"create-csinode-v1beta1-storage-k8s-io","subsections":[]}]}]},{"section":"csidriver-v1beta1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-csidriver-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"watch-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"list-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"read-csidriver-v1beta1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-csidriver-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"delete-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"replace-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"patch-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"create-csidriver-v1beta1-storage-k8s-io","subsections":[]}]}]},{"section":"configmap-v1-core","subsections":[{"section":"-strong-read-operations-configmap-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-configmap-v1-core","subsections":[]},{"section":"watch-list-configmap-v1-core","subsections":[]},{"section":"watch-configmap-v1-core","subsections":[]},{"section":"list-all-namespaces-configmap-v1-core","subsections":[]},{"section":"list-configmap-v1-core","subsections":[]},{"section":"read-configmap-v1-core","subsections":[]}]},{"section":"-strong-write-operations-configmap-v1-core-strong-","subsections":[{"section":"delete-collection-configmap-v1-core","subsections":[]},{"section":"delete-configmap-v1-core","subsections":[]},{"section":"replace-configmap-v1-core","subsections":[]},{"section":"patch-configmap-v1-core","subsections":[]},{"section":"create-configmap-v1-core","subsections":[]}]}]},{"section":"-strong-config-and-storage-apis-strong-","subsections":[]},{"section":"service-v1-core","subsections":[{"section":"-strong-proxy-operations-service-v1-core-strong-","subsections":[{"section":"replace-connect-proxy-path-service-v1-core","subsections":[]},{"section":"replace-connect-proxy-service-v1-core","subsections":[]},{"section":"head-connect-proxy-path-service-v1-core","subsections":[]},{"section":"head-connect-proxy-service-v1-core","subsections":[]},{"section":"get-connect-proxy-path-service-v1-core","subsections":[]},{"section":"get-connect-proxy-service-v1-core","subsections":[]},{"section":"delete-connect-proxy-path-service-v1-core","subsections":[]},{"section":"delete-connect-proxy-service-v1-core","subsections":[]},{"section":"create-connect-proxy-path-service-v1-core","subsections":[]},{"section":"create-connect-proxy-service-v1-core","subsections":[]}]},{"section":"-strong-status-operations-service-v1-core-strong-","subsections":[{"section":"replace-status-service-v1-core","subsections":[]},{"section":"read-status-service-v1-core","subsections":[]},{"section":"patch-status-service-v1-core","subsections":[]}]},{"section":"-strong-read-operations-service-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-service-v1-core","subsections":[]},{"section":"watch-list-service-v1-core","subsections":[]},{"section":"watch-service-v1-core","subsections":[]},{"section":"list-all-namespaces-service-v1-core","subsections":[]},{"section":"list-service-v1-core","subsections":[]},{"section":"read-service-v1-core","subsections":[]}]},{"section":"-strong-write-operations-service-v1-core-strong-","subsections":[{"section":"delete-service-v1-core","subsections":[]},{"section":"replace-service-v1-core","subsections":[]},{"section":"patch-service-v1-core","subsections":[]},{"section":"create-service-v1-core","subsections":[]}]}]},{"section":"ingress-v1beta1-networking-k8s-io","subsections":[{"section":"-strong-status-operations-ingress-v1beta1-networking-k8s-io-strong-","subsections":[{"section":"replace-status-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"read-status-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"patch-status-ingress-v1beta1-networking-k8s-io","subsections":[]}]},{"section":"-strong-read-operations-ingress-v1beta1-networking-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"watch-list-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"watch-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"list-all-namespaces-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"list-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"read-ingress-v1beta1-networking-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-ingress-v1beta1-networking-k8s-io-strong-","subsections":[{"section":"delete-collection-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"delete-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"replace-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"patch-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"create-ingress-v1beta1-networking-k8s-io","subsections":[]}]}]},{"section":"endpoints-v1-core","subsections":[{"section":"-strong-read-operations-endpoints-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-endpoints-v1-core","subsections":[]},{"section":"watch-list-endpoints-v1-core","subsections":[]},{"section":"watch-endpoints-v1-core","subsections":[]},{"section":"list-all-namespaces-endpoints-v1-core","subsections":[]},{"section":"list-endpoints-v1-core","subsections":[]},{"section":"read-endpoints-v1-core","subsections":[]}]},{"section":"-strong-write-operations-endpoints-v1-core-strong-","subsections":[{"section":"delete-collection-endpoints-v1-core","subsections":[]},{"section":"delete-endpoints-v1-core","subsections":[]},{"section":"replace-endpoints-v1-core","subsections":[]},{"section":"patch-endpoints-v1-core","subsections":[]},{"section":"create-endpoints-v1-core","subsections":[]}]}]},{"section":"-strong-service-apis-strong-","subsections":[]},{"section":"statefulset-v1-apps","subsections":[{"section":"-strong-misc-operations-statefulset-v1-apps-strong-","subsections":[{"section":"patch-scale-statefulset-v1-apps","subsections":[]},{"section":"replace-scale-statefulset-v1-apps","subsections":[]},{"section":"read-scale-statefulset-v1-apps","subsections":[]}]},{"section":"-strong-status-operations-statefulset-v1-apps-strong-","subsections":[{"section":"replace-status-statefulset-v1-apps","subsections":[]},{"section":"read-status-statefulset-v1-apps","subsections":[]},{"section":"patch-status-statefulset-v1-apps","subsections":[]}]},{"section":"-strong-read-operations-statefulset-v1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-statefulset-v1-apps","subsections":[]},{"section":"watch-list-statefulset-v1-apps","subsections":[]},{"section":"watch-statefulset-v1-apps","subsections":[]},{"section":"list-all-namespaces-statefulset-v1-apps","subsections":[]},{"section":"list-statefulset-v1-apps","subsections":[]},{"section":"read-statefulset-v1-apps","subsections":[]}]},{"section":"-strong-write-operations-statefulset-v1-apps-strong-","subsections":[{"section":"delete-collection-statefulset-v1-apps","subsections":[]},{"section":"delete-statefulset-v1-apps","subsections":[]},{"section":"replace-statefulset-v1-apps","subsections":[]},{"section":"patch-statefulset-v1-apps","subsections":[]},{"section":"create-statefulset-v1-apps","subsections":[]}]}]},{"section":"replicationcontroller-v1-core","subsections":[{"section":"-strong-misc-operations-replicationcontroller-v1-core-strong-","subsections":[{"section":"patch-scale-replicationcontroller-v1-core","subsections":[]},{"section":"replace-scale-replicationcontroller-v1-core","subsections":[]},{"section":"read-scale-replicationcontroller-v1-core","subsections":[]}]},{"section":"-strong-status-operations-replicationcontroller-v1-core-strong-","subsections":[{"section":"replace-status-replicationcontroller-v1-core","subsections":[]},{"section":"read-status-replicationcontroller-v1-core","subsections":[]},{"section":"patch-status-replicationcontroller-v1-core","subsections":[]}]},{"section":"-strong-read-operations-replicationcontroller-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-replicationcontroller-v1-core","subsections":[]},{"section":"watch-list-replicationcontroller-v1-core","subsections":[]},{"section":"watch-replicationcontroller-v1-core","subsections":[]},{"section":"list-all-namespaces-replicationcontroller-v1-core","subsections":[]},{"section":"list-replicationcontroller-v1-core","subsections":[]},{"section":"read-replicationcontroller-v1-core","subsections":[]}]},{"section":"-strong-write-operations-replicationcontroller-v1-core-strong-","subsections":[{"section":"delete-collection-replicationcontroller-v1-core","subsections":[]},{"section":"delete-replicationcontroller-v1-core","subsections":[]},{"section":"replace-replicationcontroller-v1-core","subsections":[]},{"section":"patch-replicationcontroller-v1-core","subsections":[]},{"section":"create-replicationcontroller-v1-core","subsections":[]}]}]},{"section":"replicaset-v1-apps","subsections":[{"section":"-strong-misc-operations-replicaset-v1-apps-strong-","subsections":[{"section":"patch-scale-replicaset-v1-apps","subsections":[]},{"section":"replace-scale-replicaset-v1-apps","subsections":[]},{"section":"read-scale-replicaset-v1-apps","subsections":[]}]},{"section":"-strong-status-operations-replicaset-v1-apps-strong-","subsections":[{"section":"replace-status-replicaset-v1-apps","subsections":[]},{"section":"read-status-replicaset-v1-apps","subsections":[]},{"section":"patch-status-replicaset-v1-apps","subsections":[]}]},{"section":"-strong-read-operations-replicaset-v1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-replicaset-v1-apps","subsections":[]},{"section":"watch-list-replicaset-v1-apps","subsections":[]},{"section":"watch-replicaset-v1-apps","subsections":[]},{"section":"list-all-namespaces-replicaset-v1-apps","subsections":[]},{"section":"list-replicaset-v1-apps","subsections":[]},{"section":"read-replicaset-v1-apps","subsections":[]}]},{"section":"-strong-write-operations-replicaset-v1-apps-strong-","subsections":[{"section":"delete-collection-replicaset-v1-apps","subsections":[]},{"section":"delete-replicaset-v1-apps","subsections":[]},{"section":"replace-replicaset-v1-apps","subsections":[]},{"section":"patch-replicaset-v1-apps","subsections":[]},{"section":"create-replicaset-v1-apps","subsections":[]}]}]},{"section":"pod-v1-core","subsections":[{"section":"-strong-misc-operations-pod-v1-core-strong-","subsections":[{"section":"read-log-pod-v1-core","subsections":[]}]},{"section":"-strong-proxy-operations-pod-v1-core-strong-","subsections":[{"section":"replace-connect-proxy-path-pod-v1-core","subsections":[]},{"section":"replace-connect-proxy-pod-v1-core","subsections":[]},{"section":"head-connect-proxy-path-pod-v1-core","subsections":[]},{"section":"head-connect-proxy-pod-v1-core","subsections":[]},{"section":"get-connect-proxy-path-pod-v1-core","subsections":[]},{"section":"get-connect-proxy-pod-v1-core","subsections":[]},{"section":"get-connect-portforward-pod-v1-core","subsections":[]},{"section":"delete-connect-proxy-path-pod-v1-core","subsections":[]},{"section":"delete-connect-proxy-pod-v1-core","subsections":[]},{"section":"create-connect-proxy-path-pod-v1-core","subsections":[]},{"section":"create-connect-proxy-pod-v1-core","subsections":[]},{"section":"create-connect-portforward-pod-v1-core","subsections":[]}]},{"section":"-strong-status-operations-pod-v1-core-strong-","subsections":[{"section":"replace-status-pod-v1-core","subsections":[]},{"section":"read-status-pod-v1-core","subsections":[]},{"section":"patch-status-pod-v1-core","subsections":[]}]},{"section":"-strong-read-operations-pod-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-pod-v1-core","subsections":[]},{"section":"watch-list-pod-v1-core","subsections":[]},{"section":"watch-pod-v1-core","subsections":[]},{"section":"list-all-namespaces-pod-v1-core","subsections":[]},{"section":"list-pod-v1-core","subsections":[]},{"section":"read-pod-v1-core","subsections":[]}]},{"section":"-strong-write-operations-pod-v1-core-strong-","subsections":[{"section":"delete-collection-pod-v1-core","subsections":[]},{"section":"delete-pod-v1-core","subsections":[]},{"section":"replace-pod-v1-core","subsections":[]},{"section":"patch-pod-v1-core","subsections":[]},{"section":"create-eviction-pod-v1-core","subsections":[]},{"section":"create-pod-v1-core","subsections":[]}]}]},{"section":"job-v1-batch","subsections":[{"section":"-strong-status-operations-job-v1-batch-strong-","subsections":[{"section":"replace-status-job-v1-batch","subsections":[]},{"section":"read-status-job-v1-batch","subsections":[]},{"section":"patch-status-job-v1-batch","subsections":[]}]},{"section":"-strong-read-operations-job-v1-batch-strong-","subsections":[{"section":"watch-list-all-namespaces-job-v1-batch","subsections":[]},{"section":"watch-list-job-v1-batch","subsections":[]},{"section":"watch-job-v1-batch","subsections":[]},{"section":"list-all-namespaces-job-v1-batch","subsections":[]},{"section":"list-job-v1-batch","subsections":[]},{"section":"read-job-v1-batch","subsections":[]}]},{"section":"-strong-write-operations-job-v1-batch-strong-","subsections":[{"section":"delete-collection-job-v1-batch","subsections":[]},{"section":"delete-job-v1-batch","subsections":[]},{"section":"replace-job-v1-batch","subsections":[]},{"section":"patch-job-v1-batch","subsections":[]},{"section":"create-job-v1-batch","subsections":[]}]}]},{"section":"deployment-v1-apps","subsections":[{"section":"-strong-misc-operations-deployment-v1-apps-strong-","subsections":[{"section":"patch-scale-deployment-v1-apps","subsections":[]},{"section":"replace-scale-deployment-v1-apps","subsections":[]},{"section":"read-scale-deployment-v1-apps","subsections":[]}]},{"section":"-strong-status-operations-deployment-v1-apps-strong-","subsections":[{"section":"replace-status-deployment-v1-apps","subsections":[]},{"section":"read-status-deployment-v1-apps","subsections":[]},{"section":"patch-status-deployment-v1-apps","subsections":[]}]},{"section":"-strong-read-operations-deployment-v1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-deployment-v1-apps","subsections":[]},{"section":"watch-list-deployment-v1-apps","subsections":[]},{"section":"watch-deployment-v1-apps","subsections":[]},{"section":"list-all-namespaces-deployment-v1-apps","subsections":[]},{"section":"list-deployment-v1-apps","subsections":[]},{"section":"read-deployment-v1-apps","subsections":[]}]},{"section":"-strong-write-operations-deployment-v1-apps-strong-","subsections":[{"section":"delete-collection-deployment-v1-apps","subsections":[]},{"section":"delete-deployment-v1-apps","subsections":[]},{"section":"replace-deployment-v1-apps","subsections":[]},{"section":"patch-deployment-v1-apps","subsections":[]},{"section":"create-deployment-v1-apps","subsections":[]}]}]},{"section":"daemonset-v1-apps","subsections":[{"section":"-strong-status-operations-daemonset-v1-apps-strong-","subsections":[{"section":"replace-status-daemonset-v1-apps","subsections":[]},{"section":"read-status-daemonset-v1-apps","subsections":[]},{"section":"patch-status-daemonset-v1-apps","subsections":[]}]},{"section":"-strong-read-operations-daemonset-v1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-daemonset-v1-apps","subsections":[]},{"section":"watch-list-daemonset-v1-apps","subsections":[]},{"section":"watch-daemonset-v1-apps","subsections":[]},{"section":"list-all-namespaces-daemonset-v1-apps","subsections":[]},{"section":"list-daemonset-v1-apps","subsections":[]},{"section":"read-daemonset-v1-apps","subsections":[]}]},{"section":"-strong-write-operations-daemonset-v1-apps-strong-","subsections":[{"section":"delete-collection-daemonset-v1-apps","subsections":[]},{"section":"delete-daemonset-v1-apps","subsections":[]},{"section":"replace-daemonset-v1-apps","subsections":[]},{"section":"patch-daemonset-v1-apps","subsections":[]},{"section":"create-daemonset-v1-apps","subsections":[]}]}]},{"section":"cronjob-v1beta1-batch","subsections":[{"section":"-strong-status-operations-cronjob-v1beta1-batch-strong-","subsections":[{"section":"replace-status-cronjob-v1beta1-batch","subsections":[]},{"section":"read-status-cronjob-v1beta1-batch","subsections":[]},{"section":"patch-status-cronjob-v1beta1-batch","subsections":[]}]},{"section":"-strong-read-operations-cronjob-v1beta1-batch-strong-","subsections":[{"section":"watch-list-all-namespaces-cronjob-v1beta1-batch","subsections":[]},{"section":"watch-list-cronjob-v1beta1-batch","subsections":[]},{"section":"watch-cronjob-v1beta1-batch","subsections":[]},{"section":"list-all-namespaces-cronjob-v1beta1-batch","subsections":[]},{"section":"list-cronjob-v1beta1-batch","subsections":[]},{"section":"read-cronjob-v1beta1-batch","subsections":[]}]},{"section":"-strong-write-operations-cronjob-v1beta1-batch-strong-","subsections":[{"section":"delete-collection-cronjob-v1beta1-batch","subsections":[]},{"section":"delete-cronjob-v1beta1-batch","subsections":[]},{"section":"replace-cronjob-v1beta1-batch","subsections":[]},{"section":"patch-cronjob-v1beta1-batch","subsections":[]},{"section":"create-cronjob-v1beta1-batch","subsections":[]}]}]},{"section":"container-v1-core","subsections":[]},{"section":"-strong-workloads-apis-strong-","subsections":[]},{"section":"-strong-api-overview-strong-","subsections":[]}],"flatToc":["webhookclientconfig-v1alpha1-auditregistration-k8s-io","webhookclientconfig-v1beta1-apiextensions-k8s-io","volumeerror-v1alpha1-storage-k8s-io","volumeerror-v1beta1-storage-k8s-io","volumeattachmentsource-v1alpha1-storage-k8s-io","volumeattachmentsource-v1beta1-storage-k8s-io","watch-list-volumeattachment-v1alpha1-storage-k8s-io","watch-volumeattachment-v1alpha1-storage-k8s-io","list-volumeattachment-v1alpha1-storage-k8s-io","read-volumeattachment-v1alpha1-storage-k8s-io","-strong-read-operations-volumeattachment-v1alpha1-storage-k8s-io-strong-","delete-collection-volumeattachment-v1alpha1-storage-k8s-io","delete-volumeattachment-v1alpha1-storage-k8s-io","replace-volumeattachment-v1alpha1-storage-k8s-io","patch-volumeattachment-v1alpha1-storage-k8s-io","create-volumeattachment-v1alpha1-storage-k8s-io","-strong-write-operations-volumeattachment-v1alpha1-storage-k8s-io-strong-","volumeattachment-v1alpha1-storage-k8s-io","watch-list-volumeattachment-v1beta1-storage-k8s-io","watch-volumeattachment-v1beta1-storage-k8s-io","list-volumeattachment-v1beta1-storage-k8s-io","read-volumeattachment-v1beta1-storage-k8s-io","-strong-read-operations-volumeattachment-v1beta1-storage-k8s-io-strong-","delete-collection-volumeattachment-v1beta1-storage-k8s-io","delete-volumeattachment-v1beta1-storage-k8s-io","replace-volumeattachment-v1beta1-storage-k8s-io","patch-volumeattachment-v1beta1-storage-k8s-io","create-volumeattachment-v1beta1-storage-k8s-io","-strong-write-operations-volumeattachment-v1beta1-storage-k8s-io-strong-","volumeattachment-v1beta1-storage-k8s-io","userinfo-v1beta1-authentication-k8s-io","create-tokenreview-v1beta1-authentication-k8s-io","-strong-write-operations-tokenreview-v1beta1-authentication-k8s-io-strong-","tokenreview-v1beta1-authentication-k8s-io","supplementalgroupsstrategyoptions-v1beta1-extensions","subjectrulesreviewstatus-v1beta1-authorization-k8s-io","create-subjectaccessreview-v1beta1-authorization-k8s-io","-strong-write-operations-subjectaccessreview-v1beta1-authorization-k8s-io-strong-","subjectaccessreview-v1beta1-authorization-k8s-io","subject-v1alpha1-rbac-authorization-k8s-io","subject-v1beta1-rbac-authorization-k8s-io","watch-list-storageclass-v1beta1-storage-k8s-io","watch-storageclass-v1beta1-storage-k8s-io","list-storageclass-v1beta1-storage-k8s-io","read-storageclass-v1beta1-storage-k8s-io","-strong-read-operations-storageclass-v1beta1-storage-k8s-io-strong-","delete-collection-storageclass-v1beta1-storage-k8s-io","delete-storageclass-v1beta1-storage-k8s-io","replace-storageclass-v1beta1-storage-k8s-io","patch-storageclass-v1beta1-storage-k8s-io","create-storageclass-v1beta1-storage-k8s-io","-strong-write-operations-storageclass-v1beta1-storage-k8s-io-strong-","storageclass-v1beta1-storage-k8s-io","statefulsetupdatestrategy-v1beta1-apps","statefulsetupdatestrategy-v1beta2-apps","statefulsetcondition-v1beta1-apps","statefulsetcondition-v1beta2-apps","patch-scale-statefulset-v1beta1-apps","replace-scale-statefulset-v1beta1-apps","read-scale-statefulset-v1beta1-apps","-strong-misc-operations-statefulset-v1beta1-apps-strong-","replace-status-statefulset-v1beta1-apps","read-status-statefulset-v1beta1-apps","patch-status-statefulset-v1beta1-apps","-strong-status-operations-statefulset-v1beta1-apps-strong-","watch-list-all-namespaces-statefulset-v1beta1-apps","watch-list-statefulset-v1beta1-apps","watch-statefulset-v1beta1-apps","list-all-namespaces-statefulset-v1beta1-apps","list-statefulset-v1beta1-apps","read-statefulset-v1beta1-apps","-strong-read-operations-statefulset-v1beta1-apps-strong-","delete-collection-statefulset-v1beta1-apps","delete-statefulset-v1beta1-apps","replace-statefulset-v1beta1-apps","patch-statefulset-v1beta1-apps","create-statefulset-v1beta1-apps","-strong-write-operations-statefulset-v1beta1-apps-strong-","statefulset-v1beta1-apps","patch-scale-statefulset-v1beta2-apps","replace-scale-statefulset-v1beta2-apps","read-scale-statefulset-v1beta2-apps","-strong-misc-operations-statefulset-v1beta2-apps-strong-","replace-status-statefulset-v1beta2-apps","read-status-statefulset-v1beta2-apps","patch-status-statefulset-v1beta2-apps","-strong-status-operations-statefulset-v1beta2-apps-strong-","watch-list-all-namespaces-statefulset-v1beta2-apps","watch-list-statefulset-v1beta2-apps","watch-statefulset-v1beta2-apps","list-all-namespaces-statefulset-v1beta2-apps","list-statefulset-v1beta2-apps","read-statefulset-v1beta2-apps","-strong-read-operations-statefulset-v1beta2-apps-strong-","delete-collection-statefulset-v1beta2-apps","delete-statefulset-v1beta2-apps","replace-statefulset-v1beta2-apps","patch-statefulset-v1beta2-apps","create-statefulset-v1beta2-apps","-strong-write-operations-statefulset-v1beta2-apps-strong-","statefulset-v1beta2-apps","servicereference-v1alpha1-auditregistration-k8s-io","servicereference-v1beta1-apiregistration-k8s-io","servicereference-v1beta1-apiextensions-k8s-io","servicereference-v1-apiregistration-k8s-io","create-selfsubjectrulesreview-v1beta1-authorization-k8s-io","-strong-write-operations-selfsubjectrulesreview-v1beta1-authorization-k8s-io-strong-","selfsubjectrulesreview-v1beta1-authorization-k8s-io","create-selfsubjectaccessreview-v1beta1-authorization-k8s-io","-strong-write-operations-selfsubjectaccessreview-v1beta1-authorization-k8s-io-strong-","selfsubjectaccessreview-v1beta1-authorization-k8s-io","scale-v1beta1-extensions","scale-v1beta1-apps","scale-v1-autoscaling","selinuxstrategyoptions-v1beta1-extensions","runtimeclassstrategyoptions-v1beta1-extensions","watch-list-runtimeclass-v1alpha1-node-k8s-io","watch-runtimeclass-v1alpha1-node-k8s-io","list-runtimeclass-v1alpha1-node-k8s-io","read-runtimeclass-v1alpha1-node-k8s-io","-strong-read-operations-runtimeclass-v1alpha1-node-k8s-io-strong-","delete-collection-runtimeclass-v1alpha1-node-k8s-io","delete-runtimeclass-v1alpha1-node-k8s-io","replace-runtimeclass-v1alpha1-node-k8s-io","patch-runtimeclass-v1alpha1-node-k8s-io","create-runtimeclass-v1alpha1-node-k8s-io","-strong-write-operations-runtimeclass-v1alpha1-node-k8s-io-strong-","runtimeclass-v1alpha1-node-k8s-io","runasuserstrategyoptions-v1beta1-extensions","runasgroupstrategyoptions-v1beta1-extensions","rollingupdatestatefulsetstrategy-v1beta1-apps","rollingupdatestatefulsetstrategy-v1beta2-apps","rollbackconfig-v1beta1-extensions","roleref-v1alpha1-rbac-authorization-k8s-io","roleref-v1beta1-rbac-authorization-k8s-io","watch-list-all-namespaces-rolebinding-v1alpha1-rbac-authorization-k8s-io","watch-list-rolebinding-v1alpha1-rbac-authorization-k8s-io","watch-rolebinding-v1alpha1-rbac-authorization-k8s-io","list-all-namespaces-rolebinding-v1alpha1-rbac-authorization-k8s-io","list-rolebinding-v1alpha1-rbac-authorization-k8s-io","read-rolebinding-v1alpha1-rbac-authorization-k8s-io","-strong-read-operations-rolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","delete-collection-rolebinding-v1alpha1-rbac-authorization-k8s-io","delete-rolebinding-v1alpha1-rbac-authorization-k8s-io","replace-rolebinding-v1alpha1-rbac-authorization-k8s-io","patch-rolebinding-v1alpha1-rbac-authorization-k8s-io","create-rolebinding-v1alpha1-rbac-authorization-k8s-io","-strong-write-operations-rolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","rolebinding-v1alpha1-rbac-authorization-k8s-io","watch-list-all-namespaces-rolebinding-v1beta1-rbac-authorization-k8s-io","watch-list-rolebinding-v1beta1-rbac-authorization-k8s-io","watch-rolebinding-v1beta1-rbac-authorization-k8s-io","list-all-namespaces-rolebinding-v1beta1-rbac-authorization-k8s-io","list-rolebinding-v1beta1-rbac-authorization-k8s-io","read-rolebinding-v1beta1-rbac-authorization-k8s-io","-strong-read-operations-rolebinding-v1beta1-rbac-authorization-k8s-io-strong-","delete-collection-rolebinding-v1beta1-rbac-authorization-k8s-io","delete-rolebinding-v1beta1-rbac-authorization-k8s-io","replace-rolebinding-v1beta1-rbac-authorization-k8s-io","patch-rolebinding-v1beta1-rbac-authorization-k8s-io","create-rolebinding-v1beta1-rbac-authorization-k8s-io","-strong-write-operations-rolebinding-v1beta1-rbac-authorization-k8s-io-strong-","rolebinding-v1beta1-rbac-authorization-k8s-io","watch-list-all-namespaces-role-v1alpha1-rbac-authorization-k8s-io","watch-list-role-v1alpha1-rbac-authorization-k8s-io","watch-role-v1alpha1-rbac-authorization-k8s-io","list-all-namespaces-role-v1alpha1-rbac-authorization-k8s-io","list-role-v1alpha1-rbac-authorization-k8s-io","read-role-v1alpha1-rbac-authorization-k8s-io","-strong-read-operations-role-v1alpha1-rbac-authorization-k8s-io-strong-","delete-collection-role-v1alpha1-rbac-authorization-k8s-io","delete-role-v1alpha1-rbac-authorization-k8s-io","replace-role-v1alpha1-rbac-authorization-k8s-io","patch-role-v1alpha1-rbac-authorization-k8s-io","create-role-v1alpha1-rbac-authorization-k8s-io","-strong-write-operations-role-v1alpha1-rbac-authorization-k8s-io-strong-","role-v1alpha1-rbac-authorization-k8s-io","watch-list-all-namespaces-role-v1beta1-rbac-authorization-k8s-io","watch-list-role-v1beta1-rbac-authorization-k8s-io","watch-role-v1beta1-rbac-authorization-k8s-io","list-all-namespaces-role-v1beta1-rbac-authorization-k8s-io","list-role-v1beta1-rbac-authorization-k8s-io","read-role-v1beta1-rbac-authorization-k8s-io","-strong-read-operations-role-v1beta1-rbac-authorization-k8s-io-strong-","delete-collection-role-v1beta1-rbac-authorization-k8s-io","delete-role-v1beta1-rbac-authorization-k8s-io","replace-role-v1beta1-rbac-authorization-k8s-io","patch-role-v1beta1-rbac-authorization-k8s-io","create-role-v1beta1-rbac-authorization-k8s-io","-strong-write-operations-role-v1beta1-rbac-authorization-k8s-io-strong-","role-v1beta1-rbac-authorization-k8s-io","resourcerule-v1beta1-authorization-k8s-io","resourcemetricstatus-v2beta1-autoscaling","resourcemetricsource-v2beta1-autoscaling","resourceattributes-v1beta1-authorization-k8s-io","replicasetcondition-v1beta1-extensions","replicasetcondition-v1beta2-apps","patch-scale-replicaset-v1beta1-extensions","replace-scale-replicaset-v1beta1-extensions","read-scale-replicaset-v1beta1-extensions","-strong-misc-operations-replicaset-v1beta1-extensions-strong-","replace-status-replicaset-v1beta1-extensions","read-status-replicaset-v1beta1-extensions","patch-status-replicaset-v1beta1-extensions","-strong-status-operations-replicaset-v1beta1-extensions-strong-","watch-list-all-namespaces-replicaset-v1beta1-extensions","watch-list-replicaset-v1beta1-extensions","watch-replicaset-v1beta1-extensions","list-all-namespaces-replicaset-v1beta1-extensions","list-replicaset-v1beta1-extensions","read-replicaset-v1beta1-extensions","-strong-read-operations-replicaset-v1beta1-extensions-strong-","delete-collection-replicaset-v1beta1-extensions","delete-replicaset-v1beta1-extensions","replace-replicaset-v1beta1-extensions","patch-replicaset-v1beta1-extensions","create-replicaset-v1beta1-extensions","-strong-write-operations-replicaset-v1beta1-extensions-strong-","replicaset-v1beta1-extensions","patch-scale-replicaset-v1beta2-apps","replace-scale-replicaset-v1beta2-apps","read-scale-replicaset-v1beta2-apps","-strong-misc-operations-replicaset-v1beta2-apps-strong-","replace-status-replicaset-v1beta2-apps","read-status-replicaset-v1beta2-apps","patch-status-replicaset-v1beta2-apps","-strong-status-operations-replicaset-v1beta2-apps-strong-","watch-list-all-namespaces-replicaset-v1beta2-apps","watch-list-replicaset-v1beta2-apps","watch-replicaset-v1beta2-apps","list-all-namespaces-replicaset-v1beta2-apps","list-replicaset-v1beta2-apps","read-replicaset-v1beta2-apps","-strong-read-operations-replicaset-v1beta2-apps-strong-","delete-collection-replicaset-v1beta2-apps","delete-replicaset-v1beta2-apps","replace-replicaset-v1beta2-apps","patch-replicaset-v1beta2-apps","create-replicaset-v1beta2-apps","-strong-write-operations-replicaset-v1beta2-apps-strong-","replicaset-v1beta2-apps","watch-list-priorityclass-v1alpha1-scheduling-k8s-io","watch-priorityclass-v1alpha1-scheduling-k8s-io","list-priorityclass-v1alpha1-scheduling-k8s-io","read-priorityclass-v1alpha1-scheduling-k8s-io","-strong-read-operations-priorityclass-v1alpha1-scheduling-k8s-io-strong-","delete-collection-priorityclass-v1alpha1-scheduling-k8s-io","delete-priorityclass-v1alpha1-scheduling-k8s-io","replace-priorityclass-v1alpha1-scheduling-k8s-io","patch-priorityclass-v1alpha1-scheduling-k8s-io","create-priorityclass-v1alpha1-scheduling-k8s-io","-strong-write-operations-priorityclass-v1alpha1-scheduling-k8s-io-strong-","priorityclass-v1alpha1-scheduling-k8s-io","watch-list-priorityclass-v1beta1-scheduling-k8s-io","watch-priorityclass-v1beta1-scheduling-k8s-io","list-priorityclass-v1beta1-scheduling-k8s-io","read-priorityclass-v1beta1-scheduling-k8s-io","-strong-read-operations-priorityclass-v1beta1-scheduling-k8s-io-strong-","delete-collection-priorityclass-v1beta1-scheduling-k8s-io","delete-priorityclass-v1beta1-scheduling-k8s-io","replace-priorityclass-v1beta1-scheduling-k8s-io","patch-priorityclass-v1beta1-scheduling-k8s-io","create-priorityclass-v1beta1-scheduling-k8s-io","-strong-write-operations-priorityclass-v1beta1-scheduling-k8s-io-strong-","priorityclass-v1beta1-scheduling-k8s-io","policyrule-v1alpha1-rbac-authorization-k8s-io","policyrule-v1beta1-rbac-authorization-k8s-io","podsmetricstatus-v2beta1-autoscaling","podsmetricsource-v2beta1-autoscaling","watch-list-podsecuritypolicy-v1beta1-extensions","watch-podsecuritypolicy-v1beta1-extensions","list-podsecuritypolicy-v1beta1-extensions","read-podsecuritypolicy-v1beta1-extensions","-strong-read-operations-podsecuritypolicy-v1beta1-extensions-strong-","delete-collection-podsecuritypolicy-v1beta1-extensions","delete-podsecuritypolicy-v1beta1-extensions","replace-podsecuritypolicy-v1beta1-extensions","patch-podsecuritypolicy-v1beta1-extensions","create-podsecuritypolicy-v1beta1-extensions","-strong-write-operations-podsecuritypolicy-v1beta1-extensions-strong-","podsecuritypolicy-v1beta1-extensions","objectmetricstatus-v2beta1-autoscaling","objectmetricsource-v2beta1-autoscaling","nonresourcerule-v1beta1-authorization-k8s-io","nonresourceattributes-v1beta1-authorization-k8s-io","networkpolicyport-v1beta1-extensions","networkpolicypeer-v1beta1-extensions","networkpolicyingressrule-v1beta1-extensions","networkpolicyegressrule-v1beta1-extensions","watch-list-all-namespaces-networkpolicy-v1beta1-extensions","watch-list-networkpolicy-v1beta1-extensions","watch-networkpolicy-v1beta1-extensions","list-all-namespaces-networkpolicy-v1beta1-extensions","list-networkpolicy-v1beta1-extensions","read-networkpolicy-v1beta1-extensions","-strong-read-operations-networkpolicy-v1beta1-extensions-strong-","delete-collection-networkpolicy-v1beta1-extensions","delete-networkpolicy-v1beta1-extensions","replace-networkpolicy-v1beta1-extensions","patch-networkpolicy-v1beta1-extensions","create-networkpolicy-v1beta1-extensions","-strong-write-operations-networkpolicy-v1beta1-extensions-strong-","networkpolicy-v1beta1-extensions","metricstatus-v2beta1-autoscaling","metricspec-v2beta1-autoscaling","create-localsubjectaccessreview-v1beta1-authorization-k8s-io","-strong-write-operations-localsubjectaccessreview-v1beta1-authorization-k8s-io-strong-","localsubjectaccessreview-v1beta1-authorization-k8s-io","watch-list-all-namespaces-lease-v1beta1-coordination-k8s-io","watch-list-lease-v1beta1-coordination-k8s-io","watch-lease-v1beta1-coordination-k8s-io","list-all-namespaces-lease-v1beta1-coordination-k8s-io","list-lease-v1beta1-coordination-k8s-io","read-lease-v1beta1-coordination-k8s-io","-strong-read-operations-lease-v1beta1-coordination-k8s-io-strong-","delete-collection-lease-v1beta1-coordination-k8s-io","delete-lease-v1beta1-coordination-k8s-io","replace-lease-v1beta1-coordination-k8s-io","patch-lease-v1beta1-coordination-k8s-io","create-lease-v1beta1-coordination-k8s-io","-strong-write-operations-lease-v1beta1-coordination-k8s-io-strong-","lease-v1beta1-coordination-k8s-io","jobtemplatespec-v2alpha1-batch","ingresstls-v1beta1-extensions","ingressrule-v1beta1-extensions","ingressbackend-v1beta1-extensions","replace-status-ingress-v1beta1-extensions","read-status-ingress-v1beta1-extensions","patch-status-ingress-v1beta1-extensions","-strong-status-operations-ingress-v1beta1-extensions-strong-","watch-list-all-namespaces-ingress-v1beta1-extensions","watch-list-ingress-v1beta1-extensions","watch-ingress-v1beta1-extensions","list-all-namespaces-ingress-v1beta1-extensions","list-ingress-v1beta1-extensions","read-ingress-v1beta1-extensions","-strong-read-operations-ingress-v1beta1-extensions-strong-","delete-collection-ingress-v1beta1-extensions","delete-ingress-v1beta1-extensions","replace-ingress-v1beta1-extensions","patch-ingress-v1beta1-extensions","create-ingress-v1beta1-extensions","-strong-write-operations-ingress-v1beta1-extensions-strong-","ingress-v1beta1-extensions","ipblock-v1beta1-extensions","idrange-v1beta1-extensions","hostportrange-v1beta1-extensions","horizontalpodautoscalercondition-v2beta1-autoscaling","replace-status-horizontalpodautoscaler-v2beta1-autoscaling","read-status-horizontalpodautoscaler-v2beta1-autoscaling","patch-status-horizontalpodautoscaler-v2beta1-autoscaling","-strong-status-operations-horizontalpodautoscaler-v2beta1-autoscaling-strong-","watch-list-all-namespaces-horizontalpodautoscaler-v2beta1-autoscaling","watch-list-horizontalpodautoscaler-v2beta1-autoscaling","watch-horizontalpodautoscaler-v2beta1-autoscaling","list-all-namespaces-horizontalpodautoscaler-v2beta1-autoscaling","list-horizontalpodautoscaler-v2beta1-autoscaling","read-horizontalpodautoscaler-v2beta1-autoscaling","-strong-read-operations-horizontalpodautoscaler-v2beta1-autoscaling-strong-","delete-collection-horizontalpodautoscaler-v2beta1-autoscaling","delete-horizontalpodautoscaler-v2beta1-autoscaling","replace-horizontalpodautoscaler-v2beta1-autoscaling","patch-horizontalpodautoscaler-v2beta1-autoscaling","create-horizontalpodautoscaler-v2beta1-autoscaling","-strong-write-operations-horizontalpodautoscaler-v2beta1-autoscaling-strong-","horizontalpodautoscaler-v2beta1-autoscaling","replace-status-horizontalpodautoscaler-v2beta2-autoscaling","read-status-horizontalpodautoscaler-v2beta2-autoscaling","patch-status-horizontalpodautoscaler-v2beta2-autoscaling","-strong-status-operations-horizontalpodautoscaler-v2beta2-autoscaling-strong-","watch-list-all-namespaces-horizontalpodautoscaler-v2beta2-autoscaling","watch-list-horizontalpodautoscaler-v2beta2-autoscaling","watch-horizontalpodautoscaler-v2beta2-autoscaling","list-all-namespaces-horizontalpodautoscaler-v2beta2-autoscaling","list-horizontalpodautoscaler-v2beta2-autoscaling","read-horizontalpodautoscaler-v2beta2-autoscaling","-strong-read-operations-horizontalpodautoscaler-v2beta2-autoscaling-strong-","delete-collection-horizontalpodautoscaler-v2beta2-autoscaling","delete-horizontalpodautoscaler-v2beta2-autoscaling","replace-horizontalpodautoscaler-v2beta2-autoscaling","patch-horizontalpodautoscaler-v2beta2-autoscaling","create-horizontalpodautoscaler-v2beta2-autoscaling","-strong-write-operations-horizontalpodautoscaler-v2beta2-autoscaling-strong-","horizontalpodautoscaler-v2beta2-autoscaling","httpingressrulevalue-v1beta1-extensions","httpingresspath-v1beta1-extensions","fsgroupstrategyoptions-v1beta1-extensions","externalmetricstatus-v2beta1-autoscaling","externalmetricsource-v2beta1-autoscaling","eventseries-v1beta1-events-k8s-io","watch-list-all-namespaces-event-v1beta1-events-k8s-io","watch-list-event-v1beta1-events-k8s-io","watch-event-v1beta1-events-k8s-io","list-all-namespaces-event-v1beta1-events-k8s-io","list-event-v1beta1-events-k8s-io","read-event-v1beta1-events-k8s-io","-strong-read-operations-event-v1beta1-events-k8s-io-strong-","delete-collection-event-v1beta1-events-k8s-io","delete-event-v1beta1-events-k8s-io","replace-event-v1beta1-events-k8s-io","patch-event-v1beta1-events-k8s-io","create-event-v1beta1-events-k8s-io","-strong-write-operations-event-v1beta1-events-k8s-io-strong-","event-v1beta1-events-k8s-io","deploymentcondition-v1beta1-extensions","deploymentcondition-v1beta1-apps","deploymentcondition-v1beta2-apps","rollback-deployment-v1beta1-extensions","patch-scale-deployment-v1beta1-extensions","replace-scale-deployment-v1beta1-extensions","read-scale-deployment-v1beta1-extensions","-strong-misc-operations-deployment-v1beta1-extensions-strong-","replace-status-deployment-v1beta1-extensions","read-status-deployment-v1beta1-extensions","patch-status-deployment-v1beta1-extensions","-strong-status-operations-deployment-v1beta1-extensions-strong-","watch-list-all-namespaces-deployment-v1beta1-extensions","watch-list-deployment-v1beta1-extensions","watch-deployment-v1beta1-extensions","list-all-namespaces-deployment-v1beta1-extensions","list-deployment-v1beta1-extensions","read-deployment-v1beta1-extensions","-strong-read-operations-deployment-v1beta1-extensions-strong-","delete-collection-deployment-v1beta1-extensions","delete-deployment-v1beta1-extensions","replace-deployment-v1beta1-extensions","patch-deployment-v1beta1-extensions","create-deployment-v1beta1-extensions","-strong-write-operations-deployment-v1beta1-extensions-strong-","deployment-v1beta1-extensions","rollback-deployment-v1beta1-apps","patch-scale-deployment-v1beta1-apps","replace-scale-deployment-v1beta1-apps","read-scale-deployment-v1beta1-apps","-strong-misc-operations-deployment-v1beta1-apps-strong-","replace-status-deployment-v1beta1-apps","read-status-deployment-v1beta1-apps","patch-status-deployment-v1beta1-apps","-strong-status-operations-deployment-v1beta1-apps-strong-","watch-list-all-namespaces-deployment-v1beta1-apps","watch-list-deployment-v1beta1-apps","watch-deployment-v1beta1-apps","list-all-namespaces-deployment-v1beta1-apps","list-deployment-v1beta1-apps","read-deployment-v1beta1-apps","-strong-read-operations-deployment-v1beta1-apps-strong-","delete-collection-deployment-v1beta1-apps","delete-deployment-v1beta1-apps","replace-deployment-v1beta1-apps","patch-deployment-v1beta1-apps","create-deployment-v1beta1-apps","-strong-write-operations-deployment-v1beta1-apps-strong-","deployment-v1beta1-apps","patch-scale-deployment-v1beta2-apps","replace-scale-deployment-v1beta2-apps","read-scale-deployment-v1beta2-apps","-strong-misc-operations-deployment-v1beta2-apps-strong-","replace-status-deployment-v1beta2-apps","read-status-deployment-v1beta2-apps","patch-status-deployment-v1beta2-apps","-strong-status-operations-deployment-v1beta2-apps-strong-","watch-list-all-namespaces-deployment-v1beta2-apps","watch-list-deployment-v1beta2-apps","watch-deployment-v1beta2-apps","list-all-namespaces-deployment-v1beta2-apps","list-deployment-v1beta2-apps","read-deployment-v1beta2-apps","-strong-read-operations-deployment-v1beta2-apps-strong-","delete-collection-deployment-v1beta2-apps","delete-deployment-v1beta2-apps","replace-deployment-v1beta2-apps","patch-deployment-v1beta2-apps","create-deployment-v1beta2-apps","-strong-write-operations-deployment-v1beta2-apps-strong-","deployment-v1beta2-apps","daemonsetupdatestrategy-v1beta1-extensions","daemonsetupdatestrategy-v1beta2-apps","daemonsetcondition-v1beta1-extensions","daemonsetcondition-v1beta2-apps","replace-status-daemonset-v1beta1-extensions","read-status-daemonset-v1beta1-extensions","patch-status-daemonset-v1beta1-extensions","-strong-status-operations-daemonset-v1beta1-extensions-strong-","watch-list-all-namespaces-daemonset-v1beta1-extensions","watch-list-daemonset-v1beta1-extensions","watch-daemonset-v1beta1-extensions","list-all-namespaces-daemonset-v1beta1-extensions","list-daemonset-v1beta1-extensions","read-daemonset-v1beta1-extensions","-strong-read-operations-daemonset-v1beta1-extensions-strong-","delete-collection-daemonset-v1beta1-extensions","delete-daemonset-v1beta1-extensions","replace-daemonset-v1beta1-extensions","patch-daemonset-v1beta1-extensions","create-daemonset-v1beta1-extensions","-strong-write-operations-daemonset-v1beta1-extensions-strong-","daemonset-v1beta1-extensions","replace-status-daemonset-v1beta2-apps","read-status-daemonset-v1beta2-apps","patch-status-daemonset-v1beta2-apps","-strong-status-operations-daemonset-v1beta2-apps-strong-","watch-list-all-namespaces-daemonset-v1beta2-apps","watch-list-daemonset-v1beta2-apps","watch-daemonset-v1beta2-apps","list-all-namespaces-daemonset-v1beta2-apps","list-daemonset-v1beta2-apps","read-daemonset-v1beta2-apps","-strong-read-operations-daemonset-v1beta2-apps-strong-","delete-collection-daemonset-v1beta2-apps","delete-daemonset-v1beta2-apps","replace-daemonset-v1beta2-apps","patch-daemonset-v1beta2-apps","create-daemonset-v1beta2-apps","-strong-write-operations-daemonset-v1beta2-apps-strong-","daemonset-v1beta2-apps","crossversionobjectreference-v2beta1-autoscaling","crossversionobjectreference-v2beta2-autoscaling","replace-status-cronjob-v2alpha1-batch","read-status-cronjob-v2alpha1-batch","patch-status-cronjob-v2alpha1-batch","-strong-status-operations-cronjob-v2alpha1-batch-strong-","watch-list-all-namespaces-cronjob-v2alpha1-batch","watch-list-cronjob-v2alpha1-batch","watch-cronjob-v2alpha1-batch","list-all-namespaces-cronjob-v2alpha1-batch","list-cronjob-v2alpha1-batch","read-cronjob-v2alpha1-batch","-strong-read-operations-cronjob-v2alpha1-batch-strong-","delete-collection-cronjob-v2alpha1-batch","delete-cronjob-v2alpha1-batch","replace-cronjob-v2alpha1-batch","patch-cronjob-v2alpha1-batch","create-cronjob-v2alpha1-batch","-strong-write-operations-cronjob-v2alpha1-batch-strong-","cronjob-v2alpha1-batch","watch-list-all-namespaces-controllerrevision-v1beta1-apps","watch-list-controllerrevision-v1beta1-apps","watch-controllerrevision-v1beta1-apps","list-all-namespaces-controllerrevision-v1beta1-apps","list-controllerrevision-v1beta1-apps","read-controllerrevision-v1beta1-apps","-strong-read-operations-controllerrevision-v1beta1-apps-strong-","delete-collection-controllerrevision-v1beta1-apps","delete-controllerrevision-v1beta1-apps","replace-controllerrevision-v1beta1-apps","patch-controllerrevision-v1beta1-apps","create-controllerrevision-v1beta1-apps","-strong-write-operations-controllerrevision-v1beta1-apps-strong-","controllerrevision-v1beta1-apps","watch-list-all-namespaces-controllerrevision-v1beta2-apps","watch-list-controllerrevision-v1beta2-apps","watch-controllerrevision-v1beta2-apps","list-all-namespaces-controllerrevision-v1beta2-apps","list-controllerrevision-v1beta2-apps","read-controllerrevision-v1beta2-apps","-strong-read-operations-controllerrevision-v1beta2-apps-strong-","delete-collection-controllerrevision-v1beta2-apps","delete-controllerrevision-v1beta2-apps","replace-controllerrevision-v1beta2-apps","patch-controllerrevision-v1beta2-apps","create-controllerrevision-v1beta2-apps","-strong-write-operations-controllerrevision-v1beta2-apps-strong-","controllerrevision-v1beta2-apps","watch-list-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","watch-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","list-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","read-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","-strong-read-operations-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","delete-collection-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","delete-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","replace-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","patch-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","create-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","-strong-write-operations-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","watch-list-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","watch-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","list-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","read-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","-strong-read-operations-clusterrolebinding-v1beta1-rbac-authorization-k8s-io-strong-","delete-collection-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","delete-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","replace-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","patch-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","create-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","-strong-write-operations-clusterrolebinding-v1beta1-rbac-authorization-k8s-io-strong-","clusterrolebinding-v1beta1-rbac-authorization-k8s-io","watch-list-clusterrole-v1alpha1-rbac-authorization-k8s-io","watch-clusterrole-v1alpha1-rbac-authorization-k8s-io","list-clusterrole-v1alpha1-rbac-authorization-k8s-io","read-clusterrole-v1alpha1-rbac-authorization-k8s-io","-strong-read-operations-clusterrole-v1alpha1-rbac-authorization-k8s-io-strong-","delete-collection-clusterrole-v1alpha1-rbac-authorization-k8s-io","delete-clusterrole-v1alpha1-rbac-authorization-k8s-io","replace-clusterrole-v1alpha1-rbac-authorization-k8s-io","patch-clusterrole-v1alpha1-rbac-authorization-k8s-io","create-clusterrole-v1alpha1-rbac-authorization-k8s-io","-strong-write-operations-clusterrole-v1alpha1-rbac-authorization-k8s-io-strong-","clusterrole-v1alpha1-rbac-authorization-k8s-io","watch-list-clusterrole-v1beta1-rbac-authorization-k8s-io","watch-clusterrole-v1beta1-rbac-authorization-k8s-io","list-clusterrole-v1beta1-rbac-authorization-k8s-io","read-clusterrole-v1beta1-rbac-authorization-k8s-io","-strong-read-operations-clusterrole-v1beta1-rbac-authorization-k8s-io-strong-","delete-collection-clusterrole-v1beta1-rbac-authorization-k8s-io","delete-clusterrole-v1beta1-rbac-authorization-k8s-io","replace-clusterrole-v1beta1-rbac-authorization-k8s-io","patch-clusterrole-v1beta1-rbac-authorization-k8s-io","create-clusterrole-v1beta1-rbac-authorization-k8s-io","-strong-write-operations-clusterrole-v1beta1-rbac-authorization-k8s-io-strong-","clusterrole-v1beta1-rbac-authorization-k8s-io","allowedhostpath-v1beta1-extensions","allowedflexvolume-v1beta1-extensions","allowedcsidriver-v1beta1-extensions","aggregationrule-v1alpha1-rbac-authorization-k8s-io","aggregationrule-v1beta1-rbac-authorization-k8s-io","apiservicecondition-v1beta1-apiregistration-k8s-io","replace-status-apiservice-v1beta1-apiregistration-k8s-io","read-status-apiservice-v1beta1-apiregistration-k8s-io","patch-status-apiservice-v1beta1-apiregistration-k8s-io","-strong-status-operations-apiservice-v1beta1-apiregistration-k8s-io-strong-","watch-list-apiservice-v1beta1-apiregistration-k8s-io","watch-apiservice-v1beta1-apiregistration-k8s-io","list-apiservice-v1beta1-apiregistration-k8s-io","read-apiservice-v1beta1-apiregistration-k8s-io","-strong-read-operations-apiservice-v1beta1-apiregistration-k8s-io-strong-","delete-collection-apiservice-v1beta1-apiregistration-k8s-io","delete-apiservice-v1beta1-apiregistration-k8s-io","replace-apiservice-v1beta1-apiregistration-k8s-io","patch-apiservice-v1beta1-apiregistration-k8s-io","create-apiservice-v1beta1-apiregistration-k8s-io","-strong-write-operations-apiservice-v1beta1-apiregistration-k8s-io-strong-","apiservice-v1beta1-apiregistration-k8s-io","-strong-old-api-versions-strong-","windowssecuritycontextoptions-v1-core","weightedpodaffinityterm-v1-core","webhookthrottleconfig-v1alpha1-auditregistration-k8s-io","webhookclientconfig-v1beta1-admissionregistration-k8s-io","webhook-v1alpha1-auditregistration-k8s-io","watchevent-v1-meta","vspherevirtualdiskvolumesource-v1-core","volumeprojection-v1-core","volumenodeaffinity-v1-core","volumemount-v1-core","volumeerror-v1-storage-k8s-io","volumedevice-v1-core","volumeattachmentsource-v1-storage-k8s-io","validatingwebhook-v1beta1-admissionregistration-k8s-io","userinfo-v1-authentication-k8s-io","typedlocalobjectreference-v1-core","topologyselectorterm-v1-core","topologyselectorlabelrequirement-v1-core","toleration-v1-core","time-v1-meta","taint-v1-core","tcpsocketaction-v1-core","sysctl-v1-core","supplementalgroupsstrategyoptions-v1beta1-policy","subjectrulesreviewstatus-v1-authorization-k8s-io","subject-v1-rbac-authorization-k8s-io","storageosvolumesource-v1-core","storageospersistentvolumesource-v1-core","statusdetails-v1-meta","statuscause-v1-meta","status-v1-meta","statefulsetupdatestrategy-v1-apps","statefulsetcondition-v1-apps","sessionaffinityconfig-v1-core","servicereference-v1beta1-admissionregistration-k8s-io","serviceport-v1-core","serviceaccounttokenprojection-v1-core","serveraddressbyclientcidr-v1-meta","securitycontext-v1-core","secretvolumesource-v1-core","secretreference-v1-core","secretprojection-v1-core","secretkeyselector-v1-core","secretenvsource-v1-core","scopedresourceselectorrequirement-v1-core","scopeselector-v1-core","scaleiovolumesource-v1-core","scaleiopersistentvolumesource-v1-core","scale-v1beta2-apps","selinuxstrategyoptions-v1beta1-policy","selinuxoptions-v1-core","runtimeclassstrategyoptions-v1beta1-policy","runasuserstrategyoptions-v1beta1-policy","runasgroupstrategyoptions-v1beta1-policy","rulewithoperations-v1beta1-admissionregistration-k8s-io","rollingupdatestatefulsetstrategy-v1-apps","rollbackconfig-v1beta1-apps","roleref-v1-rbac-authorization-k8s-io","resourcerule-v1-authorization-k8s-io","resourcerequirements-v1-core","resourcemetricstatus-v2beta2-autoscaling","resourcemetricsource-v2beta2-autoscaling","resourcefieldselector-v1-core","resourceattributes-v1-authorization-k8s-io","replicationcontrollercondition-v1-core","replicasetcondition-v1-apps","rbdvolumesource-v1-core","rbdpersistentvolumesource-v1-core","quobytevolumesource-v1-core","quantity-resource-core","projectedvolumesource-v1-core","probe-v1-core","preferredschedulingterm-v1-core","preconditions-v1-meta","portworxvolumesource-v1-core","policyrule-v1-rbac-authorization-k8s-io","policy-v1alpha1-auditregistration-k8s-io","podsmetricstatus-v2beta2-autoscaling","podsmetricsource-v2beta2-autoscaling","podsecuritycontext-v1-core","podreadinessgate-v1-core","poddnsconfigoption-v1-core","poddnsconfig-v1-core","podcondition-v1-core","podantiaffinity-v1-core","podaffinityterm-v1-core","podaffinity-v1-core","photonpersistentdiskvolumesource-v1-core","persistentvolumeclaimvolumesource-v1-core","persistentvolumeclaimcondition-v1-core","patch-v1-meta","ownerreference-v1-meta","objectreference-v1-core","objectmetricstatus-v2beta2-autoscaling","objectmetricsource-v2beta2-autoscaling","objectmeta-v1-meta","objectfieldselector-v1-core","nonresourcerule-v1-authorization-k8s-io","nonresourceattributes-v1-authorization-k8s-io","nodesysteminfo-v1-core","nodeselectorterm-v1-core","nodeselectorrequirement-v1-core","nodeselector-v1-core","nodedaemonendpoints-v1-core","nodeconfigstatus-v1-core","nodeconfigsource-v1-core","nodecondition-v1-core","nodeaffinity-v1-core","nodeaddress-v1-core","networkpolicyport-v1-networking-k8s-io","networkpolicypeer-v1-networking-k8s-io","networkpolicyingressrule-v1-networking-k8s-io","networkpolicyegressrule-v1-networking-k8s-io","nfsvolumesource-v1-core","mutatingwebhook-v1beta1-admissionregistration-k8s-io","microtime-v1-meta","metricvaluestatus-v2beta2-autoscaling","metrictarget-v2beta2-autoscaling","metricstatus-v2beta2-autoscaling","metricspec-v2beta2-autoscaling","metricidentifier-v2beta2-autoscaling","managedfieldsentry-v1-meta","localvolumesource-v1-core","localobjectreference-v1-core","loadbalancerstatus-v1-core","loadbalanceringress-v1-core","listmeta-v1-meta","limitrangeitem-v1-core","lifecycle-v1-core","labelselectorrequirement-v1-meta","labelselector-v1-meta","keytopath-v1-core","jobtemplatespec-v1beta1-batch","jobcondition-v1-batch","jsonschemapropsorbool-v1beta1-apiextensions-k8s-io","jsonschemapropsorarray-v1beta1-apiextensions-k8s-io","jsonschemaprops-v1beta1-apiextensions-k8s-io","json-v1beta1-apiextensions-k8s-io","initializers-v1-meta","initializer-v1-meta","ingresstls-v1beta1-networking-k8s-io","ingressrule-v1beta1-networking-k8s-io","ingressbackend-v1beta1-networking-k8s-io","iscsivolumesource-v1-core","iscsipersistentvolumesource-v1-core","ipblock-v1-networking-k8s-io","idrange-v1beta1-policy","hostportrange-v1beta1-policy","hostpathvolumesource-v1-core","hostalias-v1-core","horizontalpodautoscalercondition-v2beta2-autoscaling","handler-v1-core","httpingressrulevalue-v1beta1-networking-k8s-io","httpingresspath-v1beta1-networking-k8s-io","httpheader-v1-core","httpgetaction-v1-core","groupversionfordiscovery-v1-meta","glusterfsvolumesource-v1-core","glusterfspersistentvolumesource-v1-core","gitrepovolumesource-v1-core","gcepersistentdiskvolumesource-v1-core","flockervolumesource-v1-core","flexvolumesource-v1-core","flexpersistentvolumesource-v1-core","fields-v1-meta","fsgroupstrategyoptions-v1beta1-policy","fcvolumesource-v1-core","externalmetricstatus-v2beta2-autoscaling","externalmetricsource-v2beta2-autoscaling","externaldocumentation-v1beta1-apiextensions-k8s-io","execaction-v1-core","eviction-v1beta1-policy","eventsource-v1-core","eventseries-v1-core","envvarsource-v1-core","envvar-v1-core","envfromsource-v1-core","endpointsubset-v1-core","endpointport-v1-core","endpointaddress-v1-core","emptydirvolumesource-v1-core","downwardapivolumesource-v1-core","downwardapivolumefile-v1-core","downwardapiprojection-v1-core","deploymentcondition-v1-apps","deleteoptions-v1-meta","daemonsetupdatestrategy-v1-apps","daemonsetcondition-v1-apps","daemonendpoint-v1-core","customresourcevalidation-v1beta1-apiextensions-k8s-io","customresourcesubresources-v1beta1-apiextensions-k8s-io","customresourcesubresourcestatus-v1beta1-apiextensions-k8s-io","customresourcesubresourcescale-v1beta1-apiextensions-k8s-io","customresourcedefinitionversion-v1beta1-apiextensions-k8s-io","customresourcedefinitionnames-v1beta1-apiextensions-k8s-io","customresourcedefinitioncondition-v1beta1-apiextensions-k8s-io","customresourceconversion-v1beta1-apiextensions-k8s-io","customresourcecolumndefinition-v1beta1-apiextensions-k8s-io","crossversionobjectreference-v1-autoscaling","containerstatewaiting-v1-core","containerstateterminated-v1-core","containerstaterunning-v1-core","containerstate-v1-core","containerport-v1-core","containerimage-v1-core","configmapvolumesource-v1-core","configmapprojection-v1-core","configmapnodeconfigsource-v1-core","configmapkeyselector-v1-core","configmapenvsource-v1-core","componentcondition-v1-core","clientipconfig-v1-core","cindervolumesource-v1-core","cinderpersistentvolumesource-v1-core","certificatesigningrequestcondition-v1beta1-certificates-k8s-io","cephfsvolumesource-v1-core","cephfspersistentvolumesource-v1-core","capabilities-v1-core","csivolumesource-v1-core","csipersistentvolumesource-v1-core","csinodedriver-v1beta1-storage-k8s-io","azurefilevolumesource-v1-core","azurefilepersistentvolumesource-v1-core","azurediskvolumesource-v1-core","attachedvolume-v1-core","allowedhostpath-v1beta1-policy","allowedflexvolume-v1beta1-policy","allowedcsidriver-v1beta1-policy","aggregationrule-v1-rbac-authorization-k8s-io","affinity-v1-core","awselasticblockstorevolumesource-v1-core","apiversions-v1-meta","apiservicecondition-v1-apiregistration-k8s-io","apiresource-v1-meta","apigroup-v1-meta","-strong-definitions-strong-","watch-list-all-namespaces-networkpolicy-v1-networking-k8s-io","watch-list-networkpolicy-v1-networking-k8s-io","watch-networkpolicy-v1-networking-k8s-io","list-all-namespaces-networkpolicy-v1-networking-k8s-io","list-networkpolicy-v1-networking-k8s-io","read-networkpolicy-v1-networking-k8s-io","-strong-read-operations-networkpolicy-v1-networking-k8s-io-strong-","delete-collection-networkpolicy-v1-networking-k8s-io","delete-networkpolicy-v1-networking-k8s-io","replace-networkpolicy-v1-networking-k8s-io","patch-networkpolicy-v1-networking-k8s-io","create-networkpolicy-v1-networking-k8s-io","-strong-write-operations-networkpolicy-v1-networking-k8s-io-strong-","networkpolicy-v1-networking-k8s-io","create-tokenreview-v1-authentication-k8s-io","-strong-write-operations-tokenreview-v1-authentication-k8s-io-strong-","tokenreview-v1-authentication-k8s-io","create-subjectaccessreview-v1-authorization-k8s-io","-strong-write-operations-subjectaccessreview-v1-authorization-k8s-io-strong-","subjectaccessreview-v1-authorization-k8s-io","watch-list-all-namespaces-serviceaccount-v1-core","watch-list-serviceaccount-v1-core","watch-serviceaccount-v1-core","list-all-namespaces-serviceaccount-v1-core","list-serviceaccount-v1-core","read-serviceaccount-v1-core","-strong-read-operations-serviceaccount-v1-core-strong-","delete-collection-serviceaccount-v1-core","delete-serviceaccount-v1-core","replace-serviceaccount-v1-core","patch-serviceaccount-v1-core","create-serviceaccount-v1-core","-strong-write-operations-serviceaccount-v1-core-strong-","serviceaccount-v1-core","create-selfsubjectrulesreview-v1-authorization-k8s-io","-strong-write-operations-selfsubjectrulesreview-v1-authorization-k8s-io-strong-","selfsubjectrulesreview-v1-authorization-k8s-io","create-selfsubjectaccessreview-v1-authorization-k8s-io","-strong-write-operations-selfsubjectaccessreview-v1-authorization-k8s-io-strong-","selfsubjectaccessreview-v1-authorization-k8s-io","watch-list-runtimeclass-v1beta1-node-k8s-io","watch-runtimeclass-v1beta1-node-k8s-io","list-runtimeclass-v1beta1-node-k8s-io","read-runtimeclass-v1beta1-node-k8s-io","-strong-read-operations-runtimeclass-v1beta1-node-k8s-io-strong-","delete-collection-runtimeclass-v1beta1-node-k8s-io","delete-runtimeclass-v1beta1-node-k8s-io","replace-runtimeclass-v1beta1-node-k8s-io","patch-runtimeclass-v1beta1-node-k8s-io","create-runtimeclass-v1beta1-node-k8s-io","-strong-write-operations-runtimeclass-v1beta1-node-k8s-io-strong-","runtimeclass-v1beta1-node-k8s-io","watch-list-all-namespaces-rolebinding-v1-rbac-authorization-k8s-io","watch-list-rolebinding-v1-rbac-authorization-k8s-io","watch-rolebinding-v1-rbac-authorization-k8s-io","list-all-namespaces-rolebinding-v1-rbac-authorization-k8s-io","list-rolebinding-v1-rbac-authorization-k8s-io","read-rolebinding-v1-rbac-authorization-k8s-io","-strong-read-operations-rolebinding-v1-rbac-authorization-k8s-io-strong-","delete-collection-rolebinding-v1-rbac-authorization-k8s-io","delete-rolebinding-v1-rbac-authorization-k8s-io","replace-rolebinding-v1-rbac-authorization-k8s-io","patch-rolebinding-v1-rbac-authorization-k8s-io","create-rolebinding-v1-rbac-authorization-k8s-io","-strong-write-operations-rolebinding-v1-rbac-authorization-k8s-io-strong-","rolebinding-v1-rbac-authorization-k8s-io","watch-list-all-namespaces-role-v1-rbac-authorization-k8s-io","watch-list-role-v1-rbac-authorization-k8s-io","watch-role-v1-rbac-authorization-k8s-io","list-all-namespaces-role-v1-rbac-authorization-k8s-io","list-role-v1-rbac-authorization-k8s-io","read-role-v1-rbac-authorization-k8s-io","-strong-read-operations-role-v1-rbac-authorization-k8s-io-strong-","delete-collection-role-v1-rbac-authorization-k8s-io","delete-role-v1-rbac-authorization-k8s-io","replace-role-v1-rbac-authorization-k8s-io","patch-role-v1-rbac-authorization-k8s-io","create-role-v1-rbac-authorization-k8s-io","-strong-write-operations-role-v1-rbac-authorization-k8s-io-strong-","role-v1-rbac-authorization-k8s-io","replace-status-resourcequota-v1-core","read-status-resourcequota-v1-core","patch-status-resourcequota-v1-core","-strong-status-operations-resourcequota-v1-core-strong-","watch-list-all-namespaces-resourcequota-v1-core","watch-list-resourcequota-v1-core","watch-resourcequota-v1-core","list-all-namespaces-resourcequota-v1-core","list-resourcequota-v1-core","read-resourcequota-v1-core","-strong-read-operations-resourcequota-v1-core-strong-","delete-collection-resourcequota-v1-core","delete-resourcequota-v1-core","replace-resourcequota-v1-core","patch-resourcequota-v1-core","create-resourcequota-v1-core","-strong-write-operations-resourcequota-v1-core-strong-","resourcequota-v1-core","replace-status-persistentvolume-v1-core","read-status-persistentvolume-v1-core","patch-status-persistentvolume-v1-core","-strong-status-operations-persistentvolume-v1-core-strong-","watch-list-persistentvolume-v1-core","watch-persistentvolume-v1-core","list-persistentvolume-v1-core","read-persistentvolume-v1-core","-strong-read-operations-persistentvolume-v1-core-strong-","delete-collection-persistentvolume-v1-core","delete-persistentvolume-v1-core","replace-persistentvolume-v1-core","patch-persistentvolume-v1-core","create-persistentvolume-v1-core","-strong-write-operations-persistentvolume-v1-core-strong-","persistentvolume-v1-core","replace-connect-proxy-path-node-v1-core","replace-connect-proxy-node-v1-core","head-connect-proxy-path-node-v1-core","head-connect-proxy-node-v1-core","get-connect-proxy-path-node-v1-core","get-connect-proxy-node-v1-core","delete-connect-proxy-path-node-v1-core","delete-connect-proxy-node-v1-core","create-connect-proxy-path-node-v1-core","create-connect-proxy-node-v1-core","-strong-proxy-operations-node-v1-core-strong-","replace-status-node-v1-core","read-status-node-v1-core","patch-status-node-v1-core","-strong-status-operations-node-v1-core-strong-","watch-list-node-v1-core","watch-node-v1-core","list-node-v1-core","read-node-v1-core","-strong-read-operations-node-v1-core-strong-","delete-collection-node-v1-core","delete-node-v1-core","replace-node-v1-core","patch-node-v1-core","create-node-v1-core","-strong-write-operations-node-v1-core-strong-","node-v1-core","replace-status-namespace-v1-core","read-status-namespace-v1-core","patch-status-namespace-v1-core","-strong-status-operations-namespace-v1-core-strong-","watch-list-namespace-v1-core","watch-namespace-v1-core","list-namespace-v1-core","read-namespace-v1-core","-strong-read-operations-namespace-v1-core-strong-","delete-namespace-v1-core","replace-namespace-v1-core","patch-namespace-v1-core","create-namespace-v1-core","-strong-write-operations-namespace-v1-core-strong-","namespace-v1-core","create-localsubjectaccessreview-v1-authorization-k8s-io","-strong-write-operations-localsubjectaccessreview-v1-authorization-k8s-io-strong-","localsubjectaccessreview-v1-authorization-k8s-io","watch-list-all-namespaces-lease-v1-coordination-k8s-io","watch-list-lease-v1-coordination-k8s-io","watch-lease-v1-coordination-k8s-io","list-all-namespaces-lease-v1-coordination-k8s-io","list-lease-v1-coordination-k8s-io","read-lease-v1-coordination-k8s-io","-strong-read-operations-lease-v1-coordination-k8s-io-strong-","delete-collection-lease-v1-coordination-k8s-io","delete-lease-v1-coordination-k8s-io","replace-lease-v1-coordination-k8s-io","patch-lease-v1-coordination-k8s-io","create-lease-v1-coordination-k8s-io","-strong-write-operations-lease-v1-coordination-k8s-io-strong-","lease-v1-coordination-k8s-io","list-componentstatus-v1-core","read-componentstatus-v1-core","-strong-read-operations-componentstatus-v1-core-strong-","componentstatus-v1-core","watch-list-clusterrolebinding-v1-rbac-authorization-k8s-io","watch-clusterrolebinding-v1-rbac-authorization-k8s-io","list-clusterrolebinding-v1-rbac-authorization-k8s-io","read-clusterrolebinding-v1-rbac-authorization-k8s-io","-strong-read-operations-clusterrolebinding-v1-rbac-authorization-k8s-io-strong-","delete-collection-clusterrolebinding-v1-rbac-authorization-k8s-io","delete-clusterrolebinding-v1-rbac-authorization-k8s-io","replace-clusterrolebinding-v1-rbac-authorization-k8s-io","patch-clusterrolebinding-v1-rbac-authorization-k8s-io","create-clusterrolebinding-v1-rbac-authorization-k8s-io","-strong-write-operations-clusterrolebinding-v1-rbac-authorization-k8s-io-strong-","clusterrolebinding-v1-rbac-authorization-k8s-io","watch-list-clusterrole-v1-rbac-authorization-k8s-io","watch-clusterrole-v1-rbac-authorization-k8s-io","list-clusterrole-v1-rbac-authorization-k8s-io","read-clusterrole-v1-rbac-authorization-k8s-io","-strong-read-operations-clusterrole-v1-rbac-authorization-k8s-io-strong-","delete-collection-clusterrole-v1-rbac-authorization-k8s-io","delete-clusterrole-v1-rbac-authorization-k8s-io","replace-clusterrole-v1-rbac-authorization-k8s-io","patch-clusterrole-v1-rbac-authorization-k8s-io","create-clusterrole-v1-rbac-authorization-k8s-io","-strong-write-operations-clusterrole-v1-rbac-authorization-k8s-io-strong-","clusterrole-v1-rbac-authorization-k8s-io","replace-status-certificatesigningrequest-v1beta1-certificates-k8s-io","read-status-certificatesigningrequest-v1beta1-certificates-k8s-io","patch-status-certificatesigningrequest-v1beta1-certificates-k8s-io","-strong-status-operations-certificatesigningrequest-v1beta1-certificates-k8s-io-strong-","watch-list-certificatesigningrequest-v1beta1-certificates-k8s-io","watch-certificatesigningrequest-v1beta1-certificates-k8s-io","list-certificatesigningrequest-v1beta1-certificates-k8s-io","read-certificatesigningrequest-v1beta1-certificates-k8s-io","-strong-read-operations-certificatesigningrequest-v1beta1-certificates-k8s-io-strong-","delete-collection-certificatesigningrequest-v1beta1-certificates-k8s-io","delete-certificatesigningrequest-v1beta1-certificates-k8s-io","replace-certificatesigningrequest-v1beta1-certificates-k8s-io","patch-certificatesigningrequest-v1beta1-certificates-k8s-io","create-certificatesigningrequest-v1beta1-certificates-k8s-io","-strong-write-operations-certificatesigningrequest-v1beta1-certificates-k8s-io-strong-","certificatesigningrequest-v1beta1-certificates-k8s-io","create-binding-v1-core","-strong-write-operations-binding-v1-core-strong-","binding-v1-core","watch-list-auditsink-v1alpha1-auditregistration-k8s-io","watch-auditsink-v1alpha1-auditregistration-k8s-io","list-auditsink-v1alpha1-auditregistration-k8s-io","read-auditsink-v1alpha1-auditregistration-k8s-io","-strong-read-operations-auditsink-v1alpha1-auditregistration-k8s-io-strong-","delete-collection-auditsink-v1alpha1-auditregistration-k8s-io","delete-auditsink-v1alpha1-auditregistration-k8s-io","replace-auditsink-v1alpha1-auditregistration-k8s-io","patch-auditsink-v1alpha1-auditregistration-k8s-io","create-auditsink-v1alpha1-auditregistration-k8s-io","-strong-write-operations-auditsink-v1alpha1-auditregistration-k8s-io-strong-","auditsink-v1alpha1-auditregistration-k8s-io","replace-status-apiservice-v1-apiregistration-k8s-io","read-status-apiservice-v1-apiregistration-k8s-io","patch-status-apiservice-v1-apiregistration-k8s-io","-strong-status-operations-apiservice-v1-apiregistration-k8s-io-strong-","watch-list-apiservice-v1-apiregistration-k8s-io","watch-apiservice-v1-apiregistration-k8s-io","list-apiservice-v1-apiregistration-k8s-io","read-apiservice-v1-apiregistration-k8s-io","-strong-read-operations-apiservice-v1-apiregistration-k8s-io-strong-","delete-collection-apiservice-v1-apiregistration-k8s-io","delete-apiservice-v1-apiregistration-k8s-io","replace-apiservice-v1-apiregistration-k8s-io","patch-apiservice-v1-apiregistration-k8s-io","create-apiservice-v1-apiregistration-k8s-io","-strong-write-operations-apiservice-v1-apiregistration-k8s-io-strong-","apiservice-v1-apiregistration-k8s-io","-strong-cluster-apis-strong-","watch-list-podsecuritypolicy-v1beta1-policy","watch-podsecuritypolicy-v1beta1-policy","list-podsecuritypolicy-v1beta1-policy","read-podsecuritypolicy-v1beta1-policy","-strong-read-operations-podsecuritypolicy-v1beta1-policy-strong-","delete-collection-podsecuritypolicy-v1beta1-policy","delete-podsecuritypolicy-v1beta1-policy","replace-podsecuritypolicy-v1beta1-policy","patch-podsecuritypolicy-v1beta1-policy","create-podsecuritypolicy-v1beta1-policy","-strong-write-operations-podsecuritypolicy-v1beta1-policy-strong-","podsecuritypolicy-v1beta1-policy","watch-list-all-namespaces-podpreset-v1alpha1-settings-k8s-io","watch-list-podpreset-v1alpha1-settings-k8s-io","watch-podpreset-v1alpha1-settings-k8s-io","list-all-namespaces-podpreset-v1alpha1-settings-k8s-io","list-podpreset-v1alpha1-settings-k8s-io","read-podpreset-v1alpha1-settings-k8s-io","-strong-read-operations-podpreset-v1alpha1-settings-k8s-io-strong-","delete-collection-podpreset-v1alpha1-settings-k8s-io","delete-podpreset-v1alpha1-settings-k8s-io","replace-podpreset-v1alpha1-settings-k8s-io","patch-podpreset-v1alpha1-settings-k8s-io","create-podpreset-v1alpha1-settings-k8s-io","-strong-write-operations-podpreset-v1alpha1-settings-k8s-io-strong-","podpreset-v1alpha1-settings-k8s-io","watch-list-priorityclass-v1-scheduling-k8s-io","watch-priorityclass-v1-scheduling-k8s-io","list-priorityclass-v1-scheduling-k8s-io","read-priorityclass-v1-scheduling-k8s-io","-strong-read-operations-priorityclass-v1-scheduling-k8s-io-strong-","delete-collection-priorityclass-v1-scheduling-k8s-io","delete-priorityclass-v1-scheduling-k8s-io","replace-priorityclass-v1-scheduling-k8s-io","patch-priorityclass-v1-scheduling-k8s-io","create-priorityclass-v1-scheduling-k8s-io","-strong-write-operations-priorityclass-v1-scheduling-k8s-io-strong-","priorityclass-v1-scheduling-k8s-io","replace-status-poddisruptionbudget-v1beta1-policy","read-status-poddisruptionbudget-v1beta1-policy","patch-status-poddisruptionbudget-v1beta1-policy","-strong-status-operations-poddisruptionbudget-v1beta1-policy-strong-","watch-list-all-namespaces-poddisruptionbudget-v1beta1-policy","watch-list-poddisruptionbudget-v1beta1-policy","watch-poddisruptionbudget-v1beta1-policy","list-all-namespaces-poddisruptionbudget-v1beta1-policy","list-poddisruptionbudget-v1beta1-policy","read-poddisruptionbudget-v1beta1-policy","-strong-read-operations-poddisruptionbudget-v1beta1-policy-strong-","delete-collection-poddisruptionbudget-v1beta1-policy","delete-poddisruptionbudget-v1beta1-policy","replace-poddisruptionbudget-v1beta1-policy","patch-poddisruptionbudget-v1beta1-policy","create-poddisruptionbudget-v1beta1-policy","-strong-write-operations-poddisruptionbudget-v1beta1-policy-strong-","poddisruptionbudget-v1beta1-policy","watch-list-all-namespaces-podtemplate-v1-core","watch-list-podtemplate-v1-core","watch-podtemplate-v1-core","list-all-namespaces-podtemplate-v1-core","list-podtemplate-v1-core","read-podtemplate-v1-core","-strong-read-operations-podtemplate-v1-core-strong-","delete-collection-podtemplate-v1-core","delete-podtemplate-v1-core","replace-podtemplate-v1-core","patch-podtemplate-v1-core","create-podtemplate-v1-core","-strong-write-operations-podtemplate-v1-core-strong-","podtemplate-v1-core","watch-list-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","watch-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","list-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","read-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","-strong-read-operations-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","delete-collection-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","delete-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","replace-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","patch-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","create-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","-strong-write-operations-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","watch-list-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","watch-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","list-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","read-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","-strong-read-operations-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","delete-collection-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","delete-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","replace-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","patch-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","create-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","-strong-write-operations-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","replace-status-horizontalpodautoscaler-v1-autoscaling","read-status-horizontalpodautoscaler-v1-autoscaling","patch-status-horizontalpodautoscaler-v1-autoscaling","-strong-status-operations-horizontalpodautoscaler-v1-autoscaling-strong-","watch-list-all-namespaces-horizontalpodautoscaler-v1-autoscaling","watch-list-horizontalpodautoscaler-v1-autoscaling","watch-horizontalpodautoscaler-v1-autoscaling","list-all-namespaces-horizontalpodautoscaler-v1-autoscaling","list-horizontalpodautoscaler-v1-autoscaling","read-horizontalpodautoscaler-v1-autoscaling","-strong-read-operations-horizontalpodautoscaler-v1-autoscaling-strong-","delete-collection-horizontalpodautoscaler-v1-autoscaling","delete-horizontalpodautoscaler-v1-autoscaling","replace-horizontalpodautoscaler-v1-autoscaling","patch-horizontalpodautoscaler-v1-autoscaling","create-horizontalpodautoscaler-v1-autoscaling","-strong-write-operations-horizontalpodautoscaler-v1-autoscaling-strong-","horizontalpodautoscaler-v1-autoscaling","watch-list-all-namespaces-limitrange-v1-core","watch-list-limitrange-v1-core","watch-limitrange-v1-core","list-all-namespaces-limitrange-v1-core","list-limitrange-v1-core","read-limitrange-v1-core","-strong-read-operations-limitrange-v1-core-strong-","delete-collection-limitrange-v1-core","delete-limitrange-v1-core","replace-limitrange-v1-core","patch-limitrange-v1-core","create-limitrange-v1-core","-strong-write-operations-limitrange-v1-core-strong-","limitrange-v1-core","watch-list-all-namespaces-event-v1-core","watch-list-event-v1-core","watch-event-v1-core","list-all-namespaces-event-v1-core","list-event-v1-core","read-event-v1-core","-strong-read-operations-event-v1-core-strong-","delete-collection-event-v1-core","delete-event-v1-core","replace-event-v1-core","patch-event-v1-core","create-event-v1-core","-strong-write-operations-event-v1-core-strong-","event-v1-core","replace-status-customresourcedefinition-v1beta1-apiextensions-k8s-io","read-status-customresourcedefinition-v1beta1-apiextensions-k8s-io","patch-status-customresourcedefinition-v1beta1-apiextensions-k8s-io","-strong-status-operations-customresourcedefinition-v1beta1-apiextensions-k8s-io-strong-","watch-list-customresourcedefinition-v1beta1-apiextensions-k8s-io","watch-customresourcedefinition-v1beta1-apiextensions-k8s-io","list-customresourcedefinition-v1beta1-apiextensions-k8s-io","read-customresourcedefinition-v1beta1-apiextensions-k8s-io","-strong-read-operations-customresourcedefinition-v1beta1-apiextensions-k8s-io-strong-","delete-collection-customresourcedefinition-v1beta1-apiextensions-k8s-io","delete-customresourcedefinition-v1beta1-apiextensions-k8s-io","replace-customresourcedefinition-v1beta1-apiextensions-k8s-io","patch-customresourcedefinition-v1beta1-apiextensions-k8s-io","create-customresourcedefinition-v1beta1-apiextensions-k8s-io","-strong-write-operations-customresourcedefinition-v1beta1-apiextensions-k8s-io-strong-","customresourcedefinition-v1beta1-apiextensions-k8s-io","watch-list-all-namespaces-controllerrevision-v1-apps","watch-list-controllerrevision-v1-apps","watch-controllerrevision-v1-apps","list-all-namespaces-controllerrevision-v1-apps","list-controllerrevision-v1-apps","read-controllerrevision-v1-apps","-strong-read-operations-controllerrevision-v1-apps-strong-","delete-collection-controllerrevision-v1-apps","delete-controllerrevision-v1-apps","replace-controllerrevision-v1-apps","patch-controllerrevision-v1-apps","create-controllerrevision-v1-apps","-strong-write-operations-controllerrevision-v1-apps-strong-","controllerrevision-v1-apps","-strong-metadata-apis-strong-","replace-status-volumeattachment-v1-storage-k8s-io","read-status-volumeattachment-v1-storage-k8s-io","patch-status-volumeattachment-v1-storage-k8s-io","-strong-status-operations-volumeattachment-v1-storage-k8s-io-strong-","watch-list-volumeattachment-v1-storage-k8s-io","watch-volumeattachment-v1-storage-k8s-io","list-volumeattachment-v1-storage-k8s-io","read-volumeattachment-v1-storage-k8s-io","-strong-read-operations-volumeattachment-v1-storage-k8s-io-strong-","delete-collection-volumeattachment-v1-storage-k8s-io","delete-volumeattachment-v1-storage-k8s-io","replace-volumeattachment-v1-storage-k8s-io","patch-volumeattachment-v1-storage-k8s-io","create-volumeattachment-v1-storage-k8s-io","-strong-write-operations-volumeattachment-v1-storage-k8s-io-strong-","volumeattachment-v1-storage-k8s-io","volume-v1-core","watch-list-storageclass-v1-storage-k8s-io","watch-storageclass-v1-storage-k8s-io","list-storageclass-v1-storage-k8s-io","read-storageclass-v1-storage-k8s-io","-strong-read-operations-storageclass-v1-storage-k8s-io-strong-","delete-collection-storageclass-v1-storage-k8s-io","delete-storageclass-v1-storage-k8s-io","replace-storageclass-v1-storage-k8s-io","patch-storageclass-v1-storage-k8s-io","create-storageclass-v1-storage-k8s-io","-strong-write-operations-storageclass-v1-storage-k8s-io-strong-","storageclass-v1-storage-k8s-io","replace-status-persistentvolumeclaim-v1-core","read-status-persistentvolumeclaim-v1-core","patch-status-persistentvolumeclaim-v1-core","-strong-status-operations-persistentvolumeclaim-v1-core-strong-","watch-list-all-namespaces-persistentvolumeclaim-v1-core","watch-list-persistentvolumeclaim-v1-core","watch-persistentvolumeclaim-v1-core","list-all-namespaces-persistentvolumeclaim-v1-core","list-persistentvolumeclaim-v1-core","read-persistentvolumeclaim-v1-core","-strong-read-operations-persistentvolumeclaim-v1-core-strong-","delete-collection-persistentvolumeclaim-v1-core","delete-persistentvolumeclaim-v1-core","replace-persistentvolumeclaim-v1-core","patch-persistentvolumeclaim-v1-core","create-persistentvolumeclaim-v1-core","-strong-write-operations-persistentvolumeclaim-v1-core-strong-","persistentvolumeclaim-v1-core","watch-list-all-namespaces-secret-v1-core","watch-list-secret-v1-core","watch-secret-v1-core","list-all-namespaces-secret-v1-core","list-secret-v1-core","read-secret-v1-core","-strong-read-operations-secret-v1-core-strong-","delete-collection-secret-v1-core","delete-secret-v1-core","replace-secret-v1-core","patch-secret-v1-core","create-secret-v1-core","-strong-write-operations-secret-v1-core-strong-","secret-v1-core","watch-list-csinode-v1beta1-storage-k8s-io","watch-csinode-v1beta1-storage-k8s-io","list-csinode-v1beta1-storage-k8s-io","read-csinode-v1beta1-storage-k8s-io","-strong-read-operations-csinode-v1beta1-storage-k8s-io-strong-","delete-collection-csinode-v1beta1-storage-k8s-io","delete-csinode-v1beta1-storage-k8s-io","replace-csinode-v1beta1-storage-k8s-io","patch-csinode-v1beta1-storage-k8s-io","create-csinode-v1beta1-storage-k8s-io","-strong-write-operations-csinode-v1beta1-storage-k8s-io-strong-","csinode-v1beta1-storage-k8s-io","watch-list-csidriver-v1beta1-storage-k8s-io","watch-csidriver-v1beta1-storage-k8s-io","list-csidriver-v1beta1-storage-k8s-io","read-csidriver-v1beta1-storage-k8s-io","-strong-read-operations-csidriver-v1beta1-storage-k8s-io-strong-","delete-collection-csidriver-v1beta1-storage-k8s-io","delete-csidriver-v1beta1-storage-k8s-io","replace-csidriver-v1beta1-storage-k8s-io","patch-csidriver-v1beta1-storage-k8s-io","create-csidriver-v1beta1-storage-k8s-io","-strong-write-operations-csidriver-v1beta1-storage-k8s-io-strong-","csidriver-v1beta1-storage-k8s-io","watch-list-all-namespaces-configmap-v1-core","watch-list-configmap-v1-core","watch-configmap-v1-core","list-all-namespaces-configmap-v1-core","list-configmap-v1-core","read-configmap-v1-core","-strong-read-operations-configmap-v1-core-strong-","delete-collection-configmap-v1-core","delete-configmap-v1-core","replace-configmap-v1-core","patch-configmap-v1-core","create-configmap-v1-core","-strong-write-operations-configmap-v1-core-strong-","configmap-v1-core","-strong-config-and-storage-apis-strong-","replace-connect-proxy-path-service-v1-core","replace-connect-proxy-service-v1-core","head-connect-proxy-path-service-v1-core","head-connect-proxy-service-v1-core","get-connect-proxy-path-service-v1-core","get-connect-proxy-service-v1-core","delete-connect-proxy-path-service-v1-core","delete-connect-proxy-service-v1-core","create-connect-proxy-path-service-v1-core","create-connect-proxy-service-v1-core","-strong-proxy-operations-service-v1-core-strong-","replace-status-service-v1-core","read-status-service-v1-core","patch-status-service-v1-core","-strong-status-operations-service-v1-core-strong-","watch-list-all-namespaces-service-v1-core","watch-list-service-v1-core","watch-service-v1-core","list-all-namespaces-service-v1-core","list-service-v1-core","read-service-v1-core","-strong-read-operations-service-v1-core-strong-","delete-service-v1-core","replace-service-v1-core","patch-service-v1-core","create-service-v1-core","-strong-write-operations-service-v1-core-strong-","service-v1-core","replace-status-ingress-v1beta1-networking-k8s-io","read-status-ingress-v1beta1-networking-k8s-io","patch-status-ingress-v1beta1-networking-k8s-io","-strong-status-operations-ingress-v1beta1-networking-k8s-io-strong-","watch-list-all-namespaces-ingress-v1beta1-networking-k8s-io","watch-list-ingress-v1beta1-networking-k8s-io","watch-ingress-v1beta1-networking-k8s-io","list-all-namespaces-ingress-v1beta1-networking-k8s-io","list-ingress-v1beta1-networking-k8s-io","read-ingress-v1beta1-networking-k8s-io","-strong-read-operations-ingress-v1beta1-networking-k8s-io-strong-","delete-collection-ingress-v1beta1-networking-k8s-io","delete-ingress-v1beta1-networking-k8s-io","replace-ingress-v1beta1-networking-k8s-io","patch-ingress-v1beta1-networking-k8s-io","create-ingress-v1beta1-networking-k8s-io","-strong-write-operations-ingress-v1beta1-networking-k8s-io-strong-","ingress-v1beta1-networking-k8s-io","watch-list-all-namespaces-endpoints-v1-core","watch-list-endpoints-v1-core","watch-endpoints-v1-core","list-all-namespaces-endpoints-v1-core","list-endpoints-v1-core","read-endpoints-v1-core","-strong-read-operations-endpoints-v1-core-strong-","delete-collection-endpoints-v1-core","delete-endpoints-v1-core","replace-endpoints-v1-core","patch-endpoints-v1-core","create-endpoints-v1-core","-strong-write-operations-endpoints-v1-core-strong-","endpoints-v1-core","-strong-service-apis-strong-","patch-scale-statefulset-v1-apps","replace-scale-statefulset-v1-apps","read-scale-statefulset-v1-apps","-strong-misc-operations-statefulset-v1-apps-strong-","replace-status-statefulset-v1-apps","read-status-statefulset-v1-apps","patch-status-statefulset-v1-apps","-strong-status-operations-statefulset-v1-apps-strong-","watch-list-all-namespaces-statefulset-v1-apps","watch-list-statefulset-v1-apps","watch-statefulset-v1-apps","list-all-namespaces-statefulset-v1-apps","list-statefulset-v1-apps","read-statefulset-v1-apps","-strong-read-operations-statefulset-v1-apps-strong-","delete-collection-statefulset-v1-apps","delete-statefulset-v1-apps","replace-statefulset-v1-apps","patch-statefulset-v1-apps","create-statefulset-v1-apps","-strong-write-operations-statefulset-v1-apps-strong-","statefulset-v1-apps","patch-scale-replicationcontroller-v1-core","replace-scale-replicationcontroller-v1-core","read-scale-replicationcontroller-v1-core","-strong-misc-operations-replicationcontroller-v1-core-strong-","replace-status-replicationcontroller-v1-core","read-status-replicationcontroller-v1-core","patch-status-replicationcontroller-v1-core","-strong-status-operations-replicationcontroller-v1-core-strong-","watch-list-all-namespaces-replicationcontroller-v1-core","watch-list-replicationcontroller-v1-core","watch-replicationcontroller-v1-core","list-all-namespaces-replicationcontroller-v1-core","list-replicationcontroller-v1-core","read-replicationcontroller-v1-core","-strong-read-operations-replicationcontroller-v1-core-strong-","delete-collection-replicationcontroller-v1-core","delete-replicationcontroller-v1-core","replace-replicationcontroller-v1-core","patch-replicationcontroller-v1-core","create-replicationcontroller-v1-core","-strong-write-operations-replicationcontroller-v1-core-strong-","replicationcontroller-v1-core","patch-scale-replicaset-v1-apps","replace-scale-replicaset-v1-apps","read-scale-replicaset-v1-apps","-strong-misc-operations-replicaset-v1-apps-strong-","replace-status-replicaset-v1-apps","read-status-replicaset-v1-apps","patch-status-replicaset-v1-apps","-strong-status-operations-replicaset-v1-apps-strong-","watch-list-all-namespaces-replicaset-v1-apps","watch-list-replicaset-v1-apps","watch-replicaset-v1-apps","list-all-namespaces-replicaset-v1-apps","list-replicaset-v1-apps","read-replicaset-v1-apps","-strong-read-operations-replicaset-v1-apps-strong-","delete-collection-replicaset-v1-apps","delete-replicaset-v1-apps","replace-replicaset-v1-apps","patch-replicaset-v1-apps","create-replicaset-v1-apps","-strong-write-operations-replicaset-v1-apps-strong-","replicaset-v1-apps","read-log-pod-v1-core","-strong-misc-operations-pod-v1-core-strong-","replace-connect-proxy-path-pod-v1-core","replace-connect-proxy-pod-v1-core","head-connect-proxy-path-pod-v1-core","head-connect-proxy-pod-v1-core","get-connect-proxy-path-pod-v1-core","get-connect-proxy-pod-v1-core","get-connect-portforward-pod-v1-core","delete-connect-proxy-path-pod-v1-core","delete-connect-proxy-pod-v1-core","create-connect-proxy-path-pod-v1-core","create-connect-proxy-pod-v1-core","create-connect-portforward-pod-v1-core","-strong-proxy-operations-pod-v1-core-strong-","replace-status-pod-v1-core","read-status-pod-v1-core","patch-status-pod-v1-core","-strong-status-operations-pod-v1-core-strong-","watch-list-all-namespaces-pod-v1-core","watch-list-pod-v1-core","watch-pod-v1-core","list-all-namespaces-pod-v1-core","list-pod-v1-core","read-pod-v1-core","-strong-read-operations-pod-v1-core-strong-","delete-collection-pod-v1-core","delete-pod-v1-core","replace-pod-v1-core","patch-pod-v1-core","create-eviction-pod-v1-core","create-pod-v1-core","-strong-write-operations-pod-v1-core-strong-","pod-v1-core","replace-status-job-v1-batch","read-status-job-v1-batch","patch-status-job-v1-batch","-strong-status-operations-job-v1-batch-strong-","watch-list-all-namespaces-job-v1-batch","watch-list-job-v1-batch","watch-job-v1-batch","list-all-namespaces-job-v1-batch","list-job-v1-batch","read-job-v1-batch","-strong-read-operations-job-v1-batch-strong-","delete-collection-job-v1-batch","delete-job-v1-batch","replace-job-v1-batch","patch-job-v1-batch","create-job-v1-batch","-strong-write-operations-job-v1-batch-strong-","job-v1-batch","patch-scale-deployment-v1-apps","replace-scale-deployment-v1-apps","read-scale-deployment-v1-apps","-strong-misc-operations-deployment-v1-apps-strong-","replace-status-deployment-v1-apps","read-status-deployment-v1-apps","patch-status-deployment-v1-apps","-strong-status-operations-deployment-v1-apps-strong-","watch-list-all-namespaces-deployment-v1-apps","watch-list-deployment-v1-apps","watch-deployment-v1-apps","list-all-namespaces-deployment-v1-apps","list-deployment-v1-apps","read-deployment-v1-apps","-strong-read-operations-deployment-v1-apps-strong-","delete-collection-deployment-v1-apps","delete-deployment-v1-apps","replace-deployment-v1-apps","patch-deployment-v1-apps","create-deployment-v1-apps","-strong-write-operations-deployment-v1-apps-strong-","deployment-v1-apps","replace-status-daemonset-v1-apps","read-status-daemonset-v1-apps","patch-status-daemonset-v1-apps","-strong-status-operations-daemonset-v1-apps-strong-","watch-list-all-namespaces-daemonset-v1-apps","watch-list-daemonset-v1-apps","watch-daemonset-v1-apps","list-all-namespaces-daemonset-v1-apps","list-daemonset-v1-apps","read-daemonset-v1-apps","-strong-read-operations-daemonset-v1-apps-strong-","delete-collection-daemonset-v1-apps","delete-daemonset-v1-apps","replace-daemonset-v1-apps","patch-daemonset-v1-apps","create-daemonset-v1-apps","-strong-write-operations-daemonset-v1-apps-strong-","daemonset-v1-apps","replace-status-cronjob-v1beta1-batch","read-status-cronjob-v1beta1-batch","patch-status-cronjob-v1beta1-batch","-strong-status-operations-cronjob-v1beta1-batch-strong-","watch-list-all-namespaces-cronjob-v1beta1-batch","watch-list-cronjob-v1beta1-batch","watch-cronjob-v1beta1-batch","list-all-namespaces-cronjob-v1beta1-batch","list-cronjob-v1beta1-batch","read-cronjob-v1beta1-batch","-strong-read-operations-cronjob-v1beta1-batch-strong-","delete-collection-cronjob-v1beta1-batch","delete-cronjob-v1beta1-batch","replace-cronjob-v1beta1-batch","patch-cronjob-v1beta1-batch","create-cronjob-v1beta1-batch","-strong-write-operations-cronjob-v1beta1-batch-strong-","cronjob-v1beta1-batch","container-v1-core","-strong-workloads-apis-strong-","-strong-api-overview-strong-"]};})();
\ No newline at end of file
+(function(){navData={"toc":[{"section":"webhookclientconfig-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"webhookclientconfig-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"volumeerror-v1alpha1-storage-k8s-io","subsections":[]},{"section":"volumeerror-v1beta1-storage-k8s-io","subsections":[]},{"section":"volumeattachmentsource-v1alpha1-storage-k8s-io","subsections":[]},{"section":"volumeattachmentsource-v1beta1-storage-k8s-io","subsections":[]},{"section":"volumeattachment-v1alpha1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-volumeattachment-v1alpha1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"watch-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"list-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"read-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-volumeattachment-v1alpha1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"delete-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"replace-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"patch-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]},{"section":"create-volumeattachment-v1alpha1-storage-k8s-io","subsections":[]}]}]},{"section":"volumeattachment-v1beta1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-volumeattachment-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"watch-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"list-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"read-volumeattachment-v1beta1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-volumeattachment-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"delete-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"replace-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"patch-volumeattachment-v1beta1-storage-k8s-io","subsections":[]},{"section":"create-volumeattachment-v1beta1-storage-k8s-io","subsections":[]}]}]},{"section":"userinfo-v1beta1-authentication-k8s-io","subsections":[]},{"section":"tokenreview-v1beta1-authentication-k8s-io","subsections":[{"section":"-strong-write-operations-tokenreview-v1beta1-authentication-k8s-io-strong-","subsections":[{"section":"create-tokenreview-v1beta1-authentication-k8s-io","subsections":[]}]}]},{"section":"supplementalgroupsstrategyoptions-v1beta1-extensions","subsections":[]},{"section":"subjectrulesreviewstatus-v1beta1-authorization-k8s-io","subsections":[]},{"section":"subjectaccessreview-v1beta1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-subjectaccessreview-v1beta1-authorization-k8s-io-strong-","subsections":[{"section":"create-subjectaccessreview-v1beta1-authorization-k8s-io","subsections":[]}]}]},{"section":"subject-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"subject-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"storageclass-v1beta1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-storageclass-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"watch-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"list-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"read-storageclass-v1beta1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-storageclass-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"delete-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"replace-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"patch-storageclass-v1beta1-storage-k8s-io","subsections":[]},{"section":"create-storageclass-v1beta1-storage-k8s-io","subsections":[]}]}]},{"section":"statefulsetupdatestrategy-v1beta1-apps","subsections":[]},{"section":"statefulsetupdatestrategy-v1beta2-apps","subsections":[]},{"section":"statefulsetcondition-v1beta1-apps","subsections":[]},{"section":"statefulsetcondition-v1beta2-apps","subsections":[]},{"section":"statefulset-v1beta1-apps","subsections":[{"section":"-strong-misc-operations-statefulset-v1beta1-apps-strong-","subsections":[{"section":"patch-scale-statefulset-v1beta1-apps","subsections":[]},{"section":"replace-scale-statefulset-v1beta1-apps","subsections":[]},{"section":"read-scale-statefulset-v1beta1-apps","subsections":[]}]},{"section":"-strong-status-operations-statefulset-v1beta1-apps-strong-","subsections":[{"section":"replace-status-statefulset-v1beta1-apps","subsections":[]},{"section":"read-status-statefulset-v1beta1-apps","subsections":[]},{"section":"patch-status-statefulset-v1beta1-apps","subsections":[]}]},{"section":"-strong-read-operations-statefulset-v1beta1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-statefulset-v1beta1-apps","subsections":[]},{"section":"watch-list-statefulset-v1beta1-apps","subsections":[]},{"section":"watch-statefulset-v1beta1-apps","subsections":[]},{"section":"list-all-namespaces-statefulset-v1beta1-apps","subsections":[]},{"section":"list-statefulset-v1beta1-apps","subsections":[]},{"section":"read-statefulset-v1beta1-apps","subsections":[]}]},{"section":"-strong-write-operations-statefulset-v1beta1-apps-strong-","subsections":[{"section":"delete-collection-statefulset-v1beta1-apps","subsections":[]},{"section":"delete-statefulset-v1beta1-apps","subsections":[]},{"section":"replace-statefulset-v1beta1-apps","subsections":[]},{"section":"patch-statefulset-v1beta1-apps","subsections":[]},{"section":"create-statefulset-v1beta1-apps","subsections":[]}]}]},{"section":"statefulset-v1beta2-apps","subsections":[{"section":"-strong-misc-operations-statefulset-v1beta2-apps-strong-","subsections":[{"section":"patch-scale-statefulset-v1beta2-apps","subsections":[]},{"section":"replace-scale-statefulset-v1beta2-apps","subsections":[]},{"section":"read-scale-statefulset-v1beta2-apps","subsections":[]}]},{"section":"-strong-status-operations-statefulset-v1beta2-apps-strong-","subsections":[{"section":"replace-status-statefulset-v1beta2-apps","subsections":[]},{"section":"read-status-statefulset-v1beta2-apps","subsections":[]},{"section":"patch-status-statefulset-v1beta2-apps","subsections":[]}]},{"section":"-strong-read-operations-statefulset-v1beta2-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-statefulset-v1beta2-apps","subsections":[]},{"section":"watch-list-statefulset-v1beta2-apps","subsections":[]},{"section":"watch-statefulset-v1beta2-apps","subsections":[]},{"section":"list-all-namespaces-statefulset-v1beta2-apps","subsections":[]},{"section":"list-statefulset-v1beta2-apps","subsections":[]},{"section":"read-statefulset-v1beta2-apps","subsections":[]}]},{"section":"-strong-write-operations-statefulset-v1beta2-apps-strong-","subsections":[{"section":"delete-collection-statefulset-v1beta2-apps","subsections":[]},{"section":"delete-statefulset-v1beta2-apps","subsections":[]},{"section":"replace-statefulset-v1beta2-apps","subsections":[]},{"section":"patch-statefulset-v1beta2-apps","subsections":[]},{"section":"create-statefulset-v1beta2-apps","subsections":[]}]}]},{"section":"servicereference-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"servicereference-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"servicereference-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"servicereference-v1-apiregistration-k8s-io","subsections":[]},{"section":"selfsubjectrulesreview-v1beta1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-selfsubjectrulesreview-v1beta1-authorization-k8s-io-strong-","subsections":[{"section":"create-selfsubjectrulesreview-v1beta1-authorization-k8s-io","subsections":[]}]}]},{"section":"selfsubjectaccessreview-v1beta1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-selfsubjectaccessreview-v1beta1-authorization-k8s-io-strong-","subsections":[{"section":"create-selfsubjectaccessreview-v1beta1-authorization-k8s-io","subsections":[]}]}]},{"section":"scale-v1beta1-extensions","subsections":[]},{"section":"scale-v1beta1-apps","subsections":[]},{"section":"scale-v1-autoscaling","subsections":[]},{"section":"selinuxstrategyoptions-v1beta1-extensions","subsections":[]},{"section":"runtimeclassstrategyoptions-v1beta1-extensions","subsections":[]},{"section":"runtimeclass-v1alpha1-node-k8s-io","subsections":[{"section":"-strong-read-operations-runtimeclass-v1alpha1-node-k8s-io-strong-","subsections":[{"section":"watch-list-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"watch-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"list-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"read-runtimeclass-v1alpha1-node-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-runtimeclass-v1alpha1-node-k8s-io-strong-","subsections":[{"section":"delete-collection-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"delete-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"replace-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"patch-runtimeclass-v1alpha1-node-k8s-io","subsections":[]},{"section":"create-runtimeclass-v1alpha1-node-k8s-io","subsections":[]}]}]},{"section":"runasuserstrategyoptions-v1beta1-extensions","subsections":[]},{"section":"runasgroupstrategyoptions-v1beta1-extensions","subsections":[]},{"section":"rollingupdatestatefulsetstrategy-v1beta1-apps","subsections":[]},{"section":"rollingupdatestatefulsetstrategy-v1beta2-apps","subsections":[]},{"section":"rollbackconfig-v1beta1-extensions","subsections":[]},{"section":"roleref-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"roleref-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-rolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-list-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-all-namespaces-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-rolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-rolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-rolebinding-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-list-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-all-namespaces-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-rolebinding-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-rolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"role-v1alpha1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-role-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-list-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-all-namespaces-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-role-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-role-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"role-v1beta1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-role-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-list-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-all-namespaces-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-role-v1beta1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-role-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-role-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-role-v1beta1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"resourcerule-v1beta1-authorization-k8s-io","subsections":[]},{"section":"resourcemetricstatus-v2beta1-autoscaling","subsections":[]},{"section":"resourcemetricsource-v2beta1-autoscaling","subsections":[]},{"section":"resourceattributes-v1beta1-authorization-k8s-io","subsections":[]},{"section":"replicasetcondition-v1beta1-extensions","subsections":[]},{"section":"replicasetcondition-v1beta2-apps","subsections":[]},{"section":"replicaset-v1beta1-extensions","subsections":[{"section":"-strong-misc-operations-replicaset-v1beta1-extensions-strong-","subsections":[{"section":"patch-scale-replicaset-v1beta1-extensions","subsections":[]},{"section":"replace-scale-replicaset-v1beta1-extensions","subsections":[]},{"section":"read-scale-replicaset-v1beta1-extensions","subsections":[]}]},{"section":"-strong-status-operations-replicaset-v1beta1-extensions-strong-","subsections":[{"section":"replace-status-replicaset-v1beta1-extensions","subsections":[]},{"section":"read-status-replicaset-v1beta1-extensions","subsections":[]},{"section":"patch-status-replicaset-v1beta1-extensions","subsections":[]}]},{"section":"-strong-read-operations-replicaset-v1beta1-extensions-strong-","subsections":[{"section":"watch-list-all-namespaces-replicaset-v1beta1-extensions","subsections":[]},{"section":"watch-list-replicaset-v1beta1-extensions","subsections":[]},{"section":"watch-replicaset-v1beta1-extensions","subsections":[]},{"section":"list-all-namespaces-replicaset-v1beta1-extensions","subsections":[]},{"section":"list-replicaset-v1beta1-extensions","subsections":[]},{"section":"read-replicaset-v1beta1-extensions","subsections":[]}]},{"section":"-strong-write-operations-replicaset-v1beta1-extensions-strong-","subsections":[{"section":"delete-collection-replicaset-v1beta1-extensions","subsections":[]},{"section":"delete-replicaset-v1beta1-extensions","subsections":[]},{"section":"replace-replicaset-v1beta1-extensions","subsections":[]},{"section":"patch-replicaset-v1beta1-extensions","subsections":[]},{"section":"create-replicaset-v1beta1-extensions","subsections":[]}]}]},{"section":"replicaset-v1beta2-apps","subsections":[{"section":"-strong-misc-operations-replicaset-v1beta2-apps-strong-","subsections":[{"section":"patch-scale-replicaset-v1beta2-apps","subsections":[]},{"section":"replace-scale-replicaset-v1beta2-apps","subsections":[]},{"section":"read-scale-replicaset-v1beta2-apps","subsections":[]}]},{"section":"-strong-status-operations-replicaset-v1beta2-apps-strong-","subsections":[{"section":"replace-status-replicaset-v1beta2-apps","subsections":[]},{"section":"read-status-replicaset-v1beta2-apps","subsections":[]},{"section":"patch-status-replicaset-v1beta2-apps","subsections":[]}]},{"section":"-strong-read-operations-replicaset-v1beta2-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-replicaset-v1beta2-apps","subsections":[]},{"section":"watch-list-replicaset-v1beta2-apps","subsections":[]},{"section":"watch-replicaset-v1beta2-apps","subsections":[]},{"section":"list-all-namespaces-replicaset-v1beta2-apps","subsections":[]},{"section":"list-replicaset-v1beta2-apps","subsections":[]},{"section":"read-replicaset-v1beta2-apps","subsections":[]}]},{"section":"-strong-write-operations-replicaset-v1beta2-apps-strong-","subsections":[{"section":"delete-collection-replicaset-v1beta2-apps","subsections":[]},{"section":"delete-replicaset-v1beta2-apps","subsections":[]},{"section":"replace-replicaset-v1beta2-apps","subsections":[]},{"section":"patch-replicaset-v1beta2-apps","subsections":[]},{"section":"create-replicaset-v1beta2-apps","subsections":[]}]}]},{"section":"priorityclass-v1alpha1-scheduling-k8s-io","subsections":[{"section":"-strong-read-operations-priorityclass-v1alpha1-scheduling-k8s-io-strong-","subsections":[{"section":"watch-list-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"watch-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"list-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"read-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-priorityclass-v1alpha1-scheduling-k8s-io-strong-","subsections":[{"section":"delete-collection-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"delete-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"replace-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"patch-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]},{"section":"create-priorityclass-v1alpha1-scheduling-k8s-io","subsections":[]}]}]},{"section":"priorityclass-v1beta1-scheduling-k8s-io","subsections":[{"section":"-strong-read-operations-priorityclass-v1beta1-scheduling-k8s-io-strong-","subsections":[{"section":"watch-list-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"watch-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"list-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"read-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-priorityclass-v1beta1-scheduling-k8s-io-strong-","subsections":[{"section":"delete-collection-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"delete-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"replace-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"patch-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]},{"section":"create-priorityclass-v1beta1-scheduling-k8s-io","subsections":[]}]}]},{"section":"policyrule-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"policyrule-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"podsmetricstatus-v2beta1-autoscaling","subsections":[]},{"section":"podsmetricsource-v2beta1-autoscaling","subsections":[]},{"section":"podsecuritypolicy-v1beta1-extensions","subsections":[{"section":"-strong-read-operations-podsecuritypolicy-v1beta1-extensions-strong-","subsections":[{"section":"watch-list-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"watch-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"list-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"read-podsecuritypolicy-v1beta1-extensions","subsections":[]}]},{"section":"-strong-write-operations-podsecuritypolicy-v1beta1-extensions-strong-","subsections":[{"section":"delete-collection-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"delete-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"replace-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"patch-podsecuritypolicy-v1beta1-extensions","subsections":[]},{"section":"create-podsecuritypolicy-v1beta1-extensions","subsections":[]}]}]},{"section":"overhead-v1alpha1-node-k8s-io","subsections":[]},{"section":"objectmetricstatus-v2beta1-autoscaling","subsections":[]},{"section":"objectmetricsource-v2beta1-autoscaling","subsections":[]},{"section":"nonresourcerule-v1beta1-authorization-k8s-io","subsections":[]},{"section":"nonresourceattributes-v1beta1-authorization-k8s-io","subsections":[]},{"section":"networkpolicyport-v1beta1-extensions","subsections":[]},{"section":"networkpolicypeer-v1beta1-extensions","subsections":[]},{"section":"networkpolicyingressrule-v1beta1-extensions","subsections":[]},{"section":"networkpolicyegressrule-v1beta1-extensions","subsections":[]},{"section":"networkpolicy-v1beta1-extensions","subsections":[{"section":"-strong-read-operations-networkpolicy-v1beta1-extensions-strong-","subsections":[{"section":"watch-list-all-namespaces-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"watch-list-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"watch-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"list-all-namespaces-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"list-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"read-networkpolicy-v1beta1-extensions","subsections":[]}]},{"section":"-strong-write-operations-networkpolicy-v1beta1-extensions-strong-","subsections":[{"section":"delete-collection-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"delete-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"replace-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"patch-networkpolicy-v1beta1-extensions","subsections":[]},{"section":"create-networkpolicy-v1beta1-extensions","subsections":[]}]}]},{"section":"metricstatus-v2beta1-autoscaling","subsections":[]},{"section":"metricspec-v2beta1-autoscaling","subsections":[]},{"section":"localsubjectaccessreview-v1beta1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-localsubjectaccessreview-v1beta1-authorization-k8s-io-strong-","subsections":[{"section":"create-localsubjectaccessreview-v1beta1-authorization-k8s-io","subsections":[]}]}]},{"section":"lease-v1beta1-coordination-k8s-io","subsections":[{"section":"-strong-read-operations-lease-v1beta1-coordination-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"watch-list-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"watch-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"list-all-namespaces-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"list-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"read-lease-v1beta1-coordination-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-lease-v1beta1-coordination-k8s-io-strong-","subsections":[{"section":"delete-collection-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"delete-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"replace-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"patch-lease-v1beta1-coordination-k8s-io","subsections":[]},{"section":"create-lease-v1beta1-coordination-k8s-io","subsections":[]}]}]},{"section":"jobtemplatespec-v2alpha1-batch","subsections":[]},{"section":"ingresstls-v1beta1-extensions","subsections":[]},{"section":"ingressrule-v1beta1-extensions","subsections":[]},{"section":"ingressbackend-v1beta1-extensions","subsections":[]},{"section":"ingress-v1beta1-extensions","subsections":[{"section":"-strong-status-operations-ingress-v1beta1-extensions-strong-","subsections":[{"section":"replace-status-ingress-v1beta1-extensions","subsections":[]},{"section":"read-status-ingress-v1beta1-extensions","subsections":[]},{"section":"patch-status-ingress-v1beta1-extensions","subsections":[]}]},{"section":"-strong-read-operations-ingress-v1beta1-extensions-strong-","subsections":[{"section":"watch-list-all-namespaces-ingress-v1beta1-extensions","subsections":[]},{"section":"watch-list-ingress-v1beta1-extensions","subsections":[]},{"section":"watch-ingress-v1beta1-extensions","subsections":[]},{"section":"list-all-namespaces-ingress-v1beta1-extensions","subsections":[]},{"section":"list-ingress-v1beta1-extensions","subsections":[]},{"section":"read-ingress-v1beta1-extensions","subsections":[]}]},{"section":"-strong-write-operations-ingress-v1beta1-extensions-strong-","subsections":[{"section":"delete-collection-ingress-v1beta1-extensions","subsections":[]},{"section":"delete-ingress-v1beta1-extensions","subsections":[]},{"section":"replace-ingress-v1beta1-extensions","subsections":[]},{"section":"patch-ingress-v1beta1-extensions","subsections":[]},{"section":"create-ingress-v1beta1-extensions","subsections":[]}]}]},{"section":"ipblock-v1beta1-extensions","subsections":[]},{"section":"idrange-v1beta1-extensions","subsections":[]},{"section":"hostportrange-v1beta1-extensions","subsections":[]},{"section":"horizontalpodautoscalercondition-v2beta1-autoscaling","subsections":[]},{"section":"horizontalpodautoscaler-v2beta1-autoscaling","subsections":[{"section":"-strong-status-operations-horizontalpodautoscaler-v2beta1-autoscaling-strong-","subsections":[{"section":"replace-status-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"read-status-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"patch-status-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]}]},{"section":"-strong-read-operations-horizontalpodautoscaler-v2beta1-autoscaling-strong-","subsections":[{"section":"watch-list-all-namespaces-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"watch-list-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"watch-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"list-all-namespaces-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"list-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"read-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]}]},{"section":"-strong-write-operations-horizontalpodautoscaler-v2beta1-autoscaling-strong-","subsections":[{"section":"delete-collection-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"delete-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"replace-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"patch-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]},{"section":"create-horizontalpodautoscaler-v2beta1-autoscaling","subsections":[]}]}]},{"section":"horizontalpodautoscaler-v2beta2-autoscaling","subsections":[{"section":"-strong-status-operations-horizontalpodautoscaler-v2beta2-autoscaling-strong-","subsections":[{"section":"replace-status-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"read-status-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"patch-status-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]}]},{"section":"-strong-read-operations-horizontalpodautoscaler-v2beta2-autoscaling-strong-","subsections":[{"section":"watch-list-all-namespaces-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"watch-list-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"watch-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"list-all-namespaces-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"list-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"read-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]}]},{"section":"-strong-write-operations-horizontalpodautoscaler-v2beta2-autoscaling-strong-","subsections":[{"section":"delete-collection-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"delete-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"replace-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"patch-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]},{"section":"create-horizontalpodautoscaler-v2beta2-autoscaling","subsections":[]}]}]},{"section":"httpingressrulevalue-v1beta1-extensions","subsections":[]},{"section":"httpingresspath-v1beta1-extensions","subsections":[]},{"section":"fsgroupstrategyoptions-v1beta1-extensions","subsections":[]},{"section":"externalmetricstatus-v2beta1-autoscaling","subsections":[]},{"section":"externalmetricsource-v2beta1-autoscaling","subsections":[]},{"section":"eventseries-v1beta1-events-k8s-io","subsections":[]},{"section":"event-v1beta1-events-k8s-io","subsections":[{"section":"-strong-read-operations-event-v1beta1-events-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-event-v1beta1-events-k8s-io","subsections":[]},{"section":"watch-list-event-v1beta1-events-k8s-io","subsections":[]},{"section":"watch-event-v1beta1-events-k8s-io","subsections":[]},{"section":"list-all-namespaces-event-v1beta1-events-k8s-io","subsections":[]},{"section":"list-event-v1beta1-events-k8s-io","subsections":[]},{"section":"read-event-v1beta1-events-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-event-v1beta1-events-k8s-io-strong-","subsections":[{"section":"delete-collection-event-v1beta1-events-k8s-io","subsections":[]},{"section":"delete-event-v1beta1-events-k8s-io","subsections":[]},{"section":"replace-event-v1beta1-events-k8s-io","subsections":[]},{"section":"patch-event-v1beta1-events-k8s-io","subsections":[]},{"section":"create-event-v1beta1-events-k8s-io","subsections":[]}]}]},{"section":"deploymentcondition-v1beta1-extensions","subsections":[]},{"section":"deploymentcondition-v1beta1-apps","subsections":[]},{"section":"deploymentcondition-v1beta2-apps","subsections":[]},{"section":"deployment-v1beta1-extensions","subsections":[{"section":"-strong-misc-operations-deployment-v1beta1-extensions-strong-","subsections":[{"section":"rollback-deployment-v1beta1-extensions","subsections":[]},{"section":"patch-scale-deployment-v1beta1-extensions","subsections":[]},{"section":"replace-scale-deployment-v1beta1-extensions","subsections":[]},{"section":"read-scale-deployment-v1beta1-extensions","subsections":[]}]},{"section":"-strong-status-operations-deployment-v1beta1-extensions-strong-","subsections":[{"section":"replace-status-deployment-v1beta1-extensions","subsections":[]},{"section":"read-status-deployment-v1beta1-extensions","subsections":[]},{"section":"patch-status-deployment-v1beta1-extensions","subsections":[]}]},{"section":"-strong-read-operations-deployment-v1beta1-extensions-strong-","subsections":[{"section":"watch-list-all-namespaces-deployment-v1beta1-extensions","subsections":[]},{"section":"watch-list-deployment-v1beta1-extensions","subsections":[]},{"section":"watch-deployment-v1beta1-extensions","subsections":[]},{"section":"list-all-namespaces-deployment-v1beta1-extensions","subsections":[]},{"section":"list-deployment-v1beta1-extensions","subsections":[]},{"section":"read-deployment-v1beta1-extensions","subsections":[]}]},{"section":"-strong-write-operations-deployment-v1beta1-extensions-strong-","subsections":[{"section":"delete-collection-deployment-v1beta1-extensions","subsections":[]},{"section":"delete-deployment-v1beta1-extensions","subsections":[]},{"section":"replace-deployment-v1beta1-extensions","subsections":[]},{"section":"patch-deployment-v1beta1-extensions","subsections":[]},{"section":"create-deployment-v1beta1-extensions","subsections":[]}]}]},{"section":"deployment-v1beta1-apps","subsections":[{"section":"-strong-misc-operations-deployment-v1beta1-apps-strong-","subsections":[{"section":"rollback-deployment-v1beta1-apps","subsections":[]},{"section":"patch-scale-deployment-v1beta1-apps","subsections":[]},{"section":"replace-scale-deployment-v1beta1-apps","subsections":[]},{"section":"read-scale-deployment-v1beta1-apps","subsections":[]}]},{"section":"-strong-status-operations-deployment-v1beta1-apps-strong-","subsections":[{"section":"replace-status-deployment-v1beta1-apps","subsections":[]},{"section":"read-status-deployment-v1beta1-apps","subsections":[]},{"section":"patch-status-deployment-v1beta1-apps","subsections":[]}]},{"section":"-strong-read-operations-deployment-v1beta1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-deployment-v1beta1-apps","subsections":[]},{"section":"watch-list-deployment-v1beta1-apps","subsections":[]},{"section":"watch-deployment-v1beta1-apps","subsections":[]},{"section":"list-all-namespaces-deployment-v1beta1-apps","subsections":[]},{"section":"list-deployment-v1beta1-apps","subsections":[]},{"section":"read-deployment-v1beta1-apps","subsections":[]}]},{"section":"-strong-write-operations-deployment-v1beta1-apps-strong-","subsections":[{"section":"delete-collection-deployment-v1beta1-apps","subsections":[]},{"section":"delete-deployment-v1beta1-apps","subsections":[]},{"section":"replace-deployment-v1beta1-apps","subsections":[]},{"section":"patch-deployment-v1beta1-apps","subsections":[]},{"section":"create-deployment-v1beta1-apps","subsections":[]}]}]},{"section":"deployment-v1beta2-apps","subsections":[{"section":"-strong-misc-operations-deployment-v1beta2-apps-strong-","subsections":[{"section":"patch-scale-deployment-v1beta2-apps","subsections":[]},{"section":"replace-scale-deployment-v1beta2-apps","subsections":[]},{"section":"read-scale-deployment-v1beta2-apps","subsections":[]}]},{"section":"-strong-status-operations-deployment-v1beta2-apps-strong-","subsections":[{"section":"replace-status-deployment-v1beta2-apps","subsections":[]},{"section":"read-status-deployment-v1beta2-apps","subsections":[]},{"section":"patch-status-deployment-v1beta2-apps","subsections":[]}]},{"section":"-strong-read-operations-deployment-v1beta2-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-deployment-v1beta2-apps","subsections":[]},{"section":"watch-list-deployment-v1beta2-apps","subsections":[]},{"section":"watch-deployment-v1beta2-apps","subsections":[]},{"section":"list-all-namespaces-deployment-v1beta2-apps","subsections":[]},{"section":"list-deployment-v1beta2-apps","subsections":[]},{"section":"read-deployment-v1beta2-apps","subsections":[]}]},{"section":"-strong-write-operations-deployment-v1beta2-apps-strong-","subsections":[{"section":"delete-collection-deployment-v1beta2-apps","subsections":[]},{"section":"delete-deployment-v1beta2-apps","subsections":[]},{"section":"replace-deployment-v1beta2-apps","subsections":[]},{"section":"patch-deployment-v1beta2-apps","subsections":[]},{"section":"create-deployment-v1beta2-apps","subsections":[]}]}]},{"section":"daemonsetupdatestrategy-v1beta1-extensions","subsections":[]},{"section":"daemonsetupdatestrategy-v1beta2-apps","subsections":[]},{"section":"daemonsetcondition-v1beta1-extensions","subsections":[]},{"section":"daemonsetcondition-v1beta2-apps","subsections":[]},{"section":"daemonset-v1beta1-extensions","subsections":[{"section":"-strong-status-operations-daemonset-v1beta1-extensions-strong-","subsections":[{"section":"replace-status-daemonset-v1beta1-extensions","subsections":[]},{"section":"read-status-daemonset-v1beta1-extensions","subsections":[]},{"section":"patch-status-daemonset-v1beta1-extensions","subsections":[]}]},{"section":"-strong-read-operations-daemonset-v1beta1-extensions-strong-","subsections":[{"section":"watch-list-all-namespaces-daemonset-v1beta1-extensions","subsections":[]},{"section":"watch-list-daemonset-v1beta1-extensions","subsections":[]},{"section":"watch-daemonset-v1beta1-extensions","subsections":[]},{"section":"list-all-namespaces-daemonset-v1beta1-extensions","subsections":[]},{"section":"list-daemonset-v1beta1-extensions","subsections":[]},{"section":"read-daemonset-v1beta1-extensions","subsections":[]}]},{"section":"-strong-write-operations-daemonset-v1beta1-extensions-strong-","subsections":[{"section":"delete-collection-daemonset-v1beta1-extensions","subsections":[]},{"section":"delete-daemonset-v1beta1-extensions","subsections":[]},{"section":"replace-daemonset-v1beta1-extensions","subsections":[]},{"section":"patch-daemonset-v1beta1-extensions","subsections":[]},{"section":"create-daemonset-v1beta1-extensions","subsections":[]}]}]},{"section":"daemonset-v1beta2-apps","subsections":[{"section":"-strong-status-operations-daemonset-v1beta2-apps-strong-","subsections":[{"section":"replace-status-daemonset-v1beta2-apps","subsections":[]},{"section":"read-status-daemonset-v1beta2-apps","subsections":[]},{"section":"patch-status-daemonset-v1beta2-apps","subsections":[]}]},{"section":"-strong-read-operations-daemonset-v1beta2-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-daemonset-v1beta2-apps","subsections":[]},{"section":"watch-list-daemonset-v1beta2-apps","subsections":[]},{"section":"watch-daemonset-v1beta2-apps","subsections":[]},{"section":"list-all-namespaces-daemonset-v1beta2-apps","subsections":[]},{"section":"list-daemonset-v1beta2-apps","subsections":[]},{"section":"read-daemonset-v1beta2-apps","subsections":[]}]},{"section":"-strong-write-operations-daemonset-v1beta2-apps-strong-","subsections":[{"section":"delete-collection-daemonset-v1beta2-apps","subsections":[]},{"section":"delete-daemonset-v1beta2-apps","subsections":[]},{"section":"replace-daemonset-v1beta2-apps","subsections":[]},{"section":"patch-daemonset-v1beta2-apps","subsections":[]},{"section":"create-daemonset-v1beta2-apps","subsections":[]}]}]},{"section":"crossversionobjectreference-v2beta1-autoscaling","subsections":[]},{"section":"crossversionobjectreference-v2beta2-autoscaling","subsections":[]},{"section":"cronjob-v2alpha1-batch","subsections":[{"section":"-strong-status-operations-cronjob-v2alpha1-batch-strong-","subsections":[{"section":"replace-status-cronjob-v2alpha1-batch","subsections":[]},{"section":"read-status-cronjob-v2alpha1-batch","subsections":[]},{"section":"patch-status-cronjob-v2alpha1-batch","subsections":[]}]},{"section":"-strong-read-operations-cronjob-v2alpha1-batch-strong-","subsections":[{"section":"watch-list-all-namespaces-cronjob-v2alpha1-batch","subsections":[]},{"section":"watch-list-cronjob-v2alpha1-batch","subsections":[]},{"section":"watch-cronjob-v2alpha1-batch","subsections":[]},{"section":"list-all-namespaces-cronjob-v2alpha1-batch","subsections":[]},{"section":"list-cronjob-v2alpha1-batch","subsections":[]},{"section":"read-cronjob-v2alpha1-batch","subsections":[]}]},{"section":"-strong-write-operations-cronjob-v2alpha1-batch-strong-","subsections":[{"section":"delete-collection-cronjob-v2alpha1-batch","subsections":[]},{"section":"delete-cronjob-v2alpha1-batch","subsections":[]},{"section":"replace-cronjob-v2alpha1-batch","subsections":[]},{"section":"patch-cronjob-v2alpha1-batch","subsections":[]},{"section":"create-cronjob-v2alpha1-batch","subsections":[]}]}]},{"section":"controllerrevision-v1beta1-apps","subsections":[{"section":"-strong-read-operations-controllerrevision-v1beta1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-controllerrevision-v1beta1-apps","subsections":[]},{"section":"watch-list-controllerrevision-v1beta1-apps","subsections":[]},{"section":"watch-controllerrevision-v1beta1-apps","subsections":[]},{"section":"list-all-namespaces-controllerrevision-v1beta1-apps","subsections":[]},{"section":"list-controllerrevision-v1beta1-apps","subsections":[]},{"section":"read-controllerrevision-v1beta1-apps","subsections":[]}]},{"section":"-strong-write-operations-controllerrevision-v1beta1-apps-strong-","subsections":[{"section":"delete-collection-controllerrevision-v1beta1-apps","subsections":[]},{"section":"delete-controllerrevision-v1beta1-apps","subsections":[]},{"section":"replace-controllerrevision-v1beta1-apps","subsections":[]},{"section":"patch-controllerrevision-v1beta1-apps","subsections":[]},{"section":"create-controllerrevision-v1beta1-apps","subsections":[]}]}]},{"section":"controllerrevision-v1beta2-apps","subsections":[{"section":"-strong-read-operations-controllerrevision-v1beta2-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-controllerrevision-v1beta2-apps","subsections":[]},{"section":"watch-list-controllerrevision-v1beta2-apps","subsections":[]},{"section":"watch-controllerrevision-v1beta2-apps","subsections":[]},{"section":"list-all-namespaces-controllerrevision-v1beta2-apps","subsections":[]},{"section":"list-controllerrevision-v1beta2-apps","subsections":[]},{"section":"read-controllerrevision-v1beta2-apps","subsections":[]}]},{"section":"-strong-write-operations-controllerrevision-v1beta2-apps-strong-","subsections":[{"section":"delete-collection-controllerrevision-v1beta2-apps","subsections":[]},{"section":"delete-controllerrevision-v1beta2-apps","subsections":[]},{"section":"replace-controllerrevision-v1beta2-apps","subsections":[]},{"section":"patch-controllerrevision-v1beta2-apps","subsections":[]},{"section":"create-controllerrevision-v1beta2-apps","subsections":[]}]}]},{"section":"clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-clusterrolebinding-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-clusterrolebinding-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-clusterrole-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-clusterrole-v1alpha1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-clusterrole-v1alpha1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-clusterrole-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-clusterrole-v1beta1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-clusterrole-v1beta1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"allowedhostpath-v1beta1-extensions","subsections":[]},{"section":"allowedflexvolume-v1beta1-extensions","subsections":[]},{"section":"allowedcsidriver-v1beta1-extensions","subsections":[]},{"section":"aggregationrule-v1alpha1-rbac-authorization-k8s-io","subsections":[]},{"section":"aggregationrule-v1beta1-rbac-authorization-k8s-io","subsections":[]},{"section":"apiservicecondition-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"apiservice-v1beta1-apiregistration-k8s-io","subsections":[{"section":"-strong-status-operations-apiservice-v1beta1-apiregistration-k8s-io-strong-","subsections":[{"section":"replace-status-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"read-status-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"patch-status-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]}]},{"section":"-strong-read-operations-apiservice-v1beta1-apiregistration-k8s-io-strong-","subsections":[{"section":"watch-list-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"watch-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"list-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"read-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-apiservice-v1beta1-apiregistration-k8s-io-strong-","subsections":[{"section":"delete-collection-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"delete-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"replace-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"patch-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]},{"section":"create-apiservice-v1beta1-apiregistration-k8s-io","subsections":[]}]}]},{"section":"-strong-old-api-versions-strong-","subsections":[]},{"section":"windowssecuritycontextoptions-v1-core","subsections":[]},{"section":"weightedpodaffinityterm-v1-core","subsections":[]},{"section":"webhookthrottleconfig-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"webhookclientconfig-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"webhook-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"watchevent-v1-meta","subsections":[]},{"section":"vspherevirtualdiskvolumesource-v1-core","subsections":[]},{"section":"volumeprojection-v1-core","subsections":[]},{"section":"volumenodeaffinity-v1-core","subsections":[]},{"section":"volumemount-v1-core","subsections":[]},{"section":"volumeerror-v1-storage-k8s-io","subsections":[]},{"section":"volumedevice-v1-core","subsections":[]},{"section":"volumeattachmentsource-v1-storage-k8s-io","subsections":[]},{"section":"validatingwebhook-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"userinfo-v1-authentication-k8s-io","subsections":[]},{"section":"typedlocalobjectreference-v1-core","subsections":[]},{"section":"topologyselectorterm-v1-core","subsections":[]},{"section":"topologyselectorlabelrequirement-v1-core","subsections":[]},{"section":"toleration-v1-core","subsections":[]},{"section":"time-v1-meta","subsections":[]},{"section":"taint-v1-core","subsections":[]},{"section":"tcpsocketaction-v1-core","subsections":[]},{"section":"sysctl-v1-core","subsections":[]},{"section":"supplementalgroupsstrategyoptions-v1beta1-policy","subsections":[]},{"section":"subjectrulesreviewstatus-v1-authorization-k8s-io","subsections":[]},{"section":"subject-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"storageosvolumesource-v1-core","subsections":[]},{"section":"storageospersistentvolumesource-v1-core","subsections":[]},{"section":"statusdetails-v1-meta","subsections":[]},{"section":"statuscause-v1-meta","subsections":[]},{"section":"status-v1-meta","subsections":[]},{"section":"statefulsetupdatestrategy-v1-apps","subsections":[]},{"section":"statefulsetcondition-v1-apps","subsections":[]},{"section":"sessionaffinityconfig-v1-core","subsections":[]},{"section":"servicereference-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"serviceport-v1-core","subsections":[]},{"section":"serviceaccounttokenprojection-v1-core","subsections":[]},{"section":"serveraddressbyclientcidr-v1-meta","subsections":[]},{"section":"securitycontext-v1-core","subsections":[]},{"section":"secretvolumesource-v1-core","subsections":[]},{"section":"secretreference-v1-core","subsections":[]},{"section":"secretprojection-v1-core","subsections":[]},{"section":"secretkeyselector-v1-core","subsections":[]},{"section":"secretenvsource-v1-core","subsections":[]},{"section":"scopedresourceselectorrequirement-v1-core","subsections":[]},{"section":"scopeselector-v1-core","subsections":[]},{"section":"scaleiovolumesource-v1-core","subsections":[]},{"section":"scaleiopersistentvolumesource-v1-core","subsections":[]},{"section":"scale-v1beta2-apps","subsections":[]},{"section":"selinuxstrategyoptions-v1beta1-policy","subsections":[]},{"section":"selinuxoptions-v1-core","subsections":[]},{"section":"runtimeclassstrategyoptions-v1beta1-policy","subsections":[]},{"section":"runasuserstrategyoptions-v1beta1-policy","subsections":[]},{"section":"runasgroupstrategyoptions-v1beta1-policy","subsections":[]},{"section":"rulewithoperations-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"rollingupdatestatefulsetstrategy-v1-apps","subsections":[]},{"section":"rollbackconfig-v1beta1-apps","subsections":[]},{"section":"roleref-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"resourcerule-v1-authorization-k8s-io","subsections":[]},{"section":"resourcerequirements-v1-core","subsections":[]},{"section":"resourcemetricstatus-v2beta2-autoscaling","subsections":[]},{"section":"resourcemetricsource-v2beta2-autoscaling","subsections":[]},{"section":"resourcefieldselector-v1-core","subsections":[]},{"section":"resourceattributes-v1-authorization-k8s-io","subsections":[]},{"section":"replicationcontrollercondition-v1-core","subsections":[]},{"section":"replicasetcondition-v1-apps","subsections":[]},{"section":"rbdvolumesource-v1-core","subsections":[]},{"section":"rbdpersistentvolumesource-v1-core","subsections":[]},{"section":"quobytevolumesource-v1-core","subsections":[]},{"section":"quantity-resource-core","subsections":[]},{"section":"projectedvolumesource-v1-core","subsections":[]},{"section":"probe-v1-core","subsections":[]},{"section":"preferredschedulingterm-v1-core","subsections":[]},{"section":"preconditions-v1-meta","subsections":[]},{"section":"portworxvolumesource-v1-core","subsections":[]},{"section":"policyrule-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"policy-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"podsmetricstatus-v2beta2-autoscaling","subsections":[]},{"section":"podsmetricsource-v2beta2-autoscaling","subsections":[]},{"section":"podsecuritycontext-v1-core","subsections":[]},{"section":"podreadinessgate-v1-core","subsections":[]},{"section":"poddnsconfigoption-v1-core","subsections":[]},{"section":"poddnsconfig-v1-core","subsections":[]},{"section":"podcondition-v1-core","subsections":[]},{"section":"podantiaffinity-v1-core","subsections":[]},{"section":"podaffinityterm-v1-core","subsections":[]},{"section":"podaffinity-v1-core","subsections":[]},{"section":"photonpersistentdiskvolumesource-v1-core","subsections":[]},{"section":"persistentvolumeclaimvolumesource-v1-core","subsections":[]},{"section":"persistentvolumeclaimcondition-v1-core","subsections":[]},{"section":"patch-v1-meta","subsections":[]},{"section":"ownerreference-v1-meta","subsections":[]},{"section":"overhead-v1beta1-node-k8s-io","subsections":[]},{"section":"objectreference-v1-core","subsections":[]},{"section":"objectmetricstatus-v2beta2-autoscaling","subsections":[]},{"section":"objectmetricsource-v2beta2-autoscaling","subsections":[]},{"section":"objectmeta-v1-meta","subsections":[]},{"section":"objectfieldselector-v1-core","subsections":[]},{"section":"nonresourcerule-v1-authorization-k8s-io","subsections":[]},{"section":"nonresourceattributes-v1-authorization-k8s-io","subsections":[]},{"section":"nodesysteminfo-v1-core","subsections":[]},{"section":"nodeselectorterm-v1-core","subsections":[]},{"section":"nodeselectorrequirement-v1-core","subsections":[]},{"section":"nodeselector-v1-core","subsections":[]},{"section":"nodedaemonendpoints-v1-core","subsections":[]},{"section":"nodeconfigstatus-v1-core","subsections":[]},{"section":"nodeconfigsource-v1-core","subsections":[]},{"section":"nodecondition-v1-core","subsections":[]},{"section":"nodeaffinity-v1-core","subsections":[]},{"section":"nodeaddress-v1-core","subsections":[]},{"section":"networkpolicyport-v1-networking-k8s-io","subsections":[]},{"section":"networkpolicypeer-v1-networking-k8s-io","subsections":[]},{"section":"networkpolicyingressrule-v1-networking-k8s-io","subsections":[]},{"section":"networkpolicyegressrule-v1-networking-k8s-io","subsections":[]},{"section":"nfsvolumesource-v1-core","subsections":[]},{"section":"mutatingwebhook-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"microtime-v1-meta","subsections":[]},{"section":"metricvaluestatus-v2beta2-autoscaling","subsections":[]},{"section":"metrictarget-v2beta2-autoscaling","subsections":[]},{"section":"metricstatus-v2beta2-autoscaling","subsections":[]},{"section":"metricspec-v2beta2-autoscaling","subsections":[]},{"section":"metricidentifier-v2beta2-autoscaling","subsections":[]},{"section":"managedfieldsentry-v1-meta","subsections":[]},{"section":"localvolumesource-v1-core","subsections":[]},{"section":"localobjectreference-v1-core","subsections":[]},{"section":"loadbalancerstatus-v1-core","subsections":[]},{"section":"loadbalanceringress-v1-core","subsections":[]},{"section":"listmeta-v1-meta","subsections":[]},{"section":"limitrangeitem-v1-core","subsections":[]},{"section":"lifecycle-v1-core","subsections":[]},{"section":"labelselectorrequirement-v1-meta","subsections":[]},{"section":"labelselector-v1-meta","subsections":[]},{"section":"keytopath-v1-core","subsections":[]},{"section":"jobtemplatespec-v1beta1-batch","subsections":[]},{"section":"jobcondition-v1-batch","subsections":[]},{"section":"jsonschemapropsorbool-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"jsonschemapropsorarray-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"jsonschemaprops-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"json-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"initializers-v1-meta","subsections":[]},{"section":"initializer-v1-meta","subsections":[]},{"section":"ingresstls-v1beta1-networking-k8s-io","subsections":[]},{"section":"ingressrule-v1beta1-networking-k8s-io","subsections":[]},{"section":"ingressbackend-v1beta1-networking-k8s-io","subsections":[]},{"section":"iscsivolumesource-v1-core","subsections":[]},{"section":"iscsipersistentvolumesource-v1-core","subsections":[]},{"section":"ipblock-v1-networking-k8s-io","subsections":[]},{"section":"idrange-v1beta1-policy","subsections":[]},{"section":"hostportrange-v1beta1-policy","subsections":[]},{"section":"hostpathvolumesource-v1-core","subsections":[]},{"section":"hostalias-v1-core","subsections":[]},{"section":"horizontalpodautoscalercondition-v2beta2-autoscaling","subsections":[]},{"section":"handler-v1-core","subsections":[]},{"section":"httpingressrulevalue-v1beta1-networking-k8s-io","subsections":[]},{"section":"httpingresspath-v1beta1-networking-k8s-io","subsections":[]},{"section":"httpheader-v1-core","subsections":[]},{"section":"httpgetaction-v1-core","subsections":[]},{"section":"groupversionfordiscovery-v1-meta","subsections":[]},{"section":"glusterfsvolumesource-v1-core","subsections":[]},{"section":"glusterfspersistentvolumesource-v1-core","subsections":[]},{"section":"gitrepovolumesource-v1-core","subsections":[]},{"section":"gcepersistentdiskvolumesource-v1-core","subsections":[]},{"section":"flockervolumesource-v1-core","subsections":[]},{"section":"flexvolumesource-v1-core","subsections":[]},{"section":"flexpersistentvolumesource-v1-core","subsections":[]},{"section":"fields-v1-meta","subsections":[]},{"section":"fsgroupstrategyoptions-v1beta1-policy","subsections":[]},{"section":"fcvolumesource-v1-core","subsections":[]},{"section":"externalmetricstatus-v2beta2-autoscaling","subsections":[]},{"section":"externalmetricsource-v2beta2-autoscaling","subsections":[]},{"section":"externaldocumentation-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"execaction-v1-core","subsections":[]},{"section":"eviction-v1beta1-policy","subsections":[]},{"section":"eventsource-v1-core","subsections":[]},{"section":"eventseries-v1-core","subsections":[]},{"section":"envvarsource-v1-core","subsections":[]},{"section":"envvar-v1-core","subsections":[]},{"section":"envfromsource-v1-core","subsections":[]},{"section":"endpointsubset-v1-core","subsections":[]},{"section":"endpointport-v1-core","subsections":[]},{"section":"endpointaddress-v1-core","subsections":[]},{"section":"emptydirvolumesource-v1-core","subsections":[]},{"section":"downwardapivolumesource-v1-core","subsections":[]},{"section":"downwardapivolumefile-v1-core","subsections":[]},{"section":"downwardapiprojection-v1-core","subsections":[]},{"section":"deploymentcondition-v1-apps","subsections":[]},{"section":"deleteoptions-v1-meta","subsections":[]},{"section":"daemonsetupdatestrategy-v1-apps","subsections":[]},{"section":"daemonsetcondition-v1-apps","subsections":[]},{"section":"daemonendpoint-v1-core","subsections":[]},{"section":"customresourcevalidation-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcesubresources-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcesubresourcestatus-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcesubresourcescale-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcedefinitionversion-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcedefinitionnames-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcedefinitioncondition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourceconversion-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"customresourcecolumndefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"crossversionobjectreference-v1-autoscaling","subsections":[]},{"section":"containerstatewaiting-v1-core","subsections":[]},{"section":"containerstateterminated-v1-core","subsections":[]},{"section":"containerstaterunning-v1-core","subsections":[]},{"section":"containerstate-v1-core","subsections":[]},{"section":"containerport-v1-core","subsections":[]},{"section":"containerimage-v1-core","subsections":[]},{"section":"configmapvolumesource-v1-core","subsections":[]},{"section":"configmapprojection-v1-core","subsections":[]},{"section":"configmapnodeconfigsource-v1-core","subsections":[]},{"section":"configmapkeyselector-v1-core","subsections":[]},{"section":"configmapenvsource-v1-core","subsections":[]},{"section":"componentcondition-v1-core","subsections":[]},{"section":"clientipconfig-v1-core","subsections":[]},{"section":"cindervolumesource-v1-core","subsections":[]},{"section":"cinderpersistentvolumesource-v1-core","subsections":[]},{"section":"certificatesigningrequestcondition-v1beta1-certificates-k8s-io","subsections":[]},{"section":"cephfsvolumesource-v1-core","subsections":[]},{"section":"cephfspersistentvolumesource-v1-core","subsections":[]},{"section":"capabilities-v1-core","subsections":[]},{"section":"csivolumesource-v1-core","subsections":[]},{"section":"csipersistentvolumesource-v1-core","subsections":[]},{"section":"csinodedriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"azurefilevolumesource-v1-core","subsections":[]},{"section":"azurefilepersistentvolumesource-v1-core","subsections":[]},{"section":"azurediskvolumesource-v1-core","subsections":[]},{"section":"attachedvolume-v1-core","subsections":[]},{"section":"allowedhostpath-v1beta1-policy","subsections":[]},{"section":"allowedflexvolume-v1beta1-policy","subsections":[]},{"section":"allowedcsidriver-v1beta1-policy","subsections":[]},{"section":"aggregationrule-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"affinity-v1-core","subsections":[]},{"section":"awselasticblockstorevolumesource-v1-core","subsections":[]},{"section":"apiversions-v1-meta","subsections":[]},{"section":"apiservicecondition-v1-apiregistration-k8s-io","subsections":[]},{"section":"apiresource-v1-meta","subsections":[]},{"section":"apigroup-v1-meta","subsections":[]},{"section":"-strong-definitions-strong-","subsections":[]},{"section":"networkpolicy-v1-networking-k8s-io","subsections":[{"section":"-strong-read-operations-networkpolicy-v1-networking-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"watch-list-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"watch-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"list-all-namespaces-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"list-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"read-networkpolicy-v1-networking-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-networkpolicy-v1-networking-k8s-io-strong-","subsections":[{"section":"delete-collection-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"delete-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"replace-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"patch-networkpolicy-v1-networking-k8s-io","subsections":[]},{"section":"create-networkpolicy-v1-networking-k8s-io","subsections":[]}]}]},{"section":"tokenreview-v1-authentication-k8s-io","subsections":[{"section":"-strong-write-operations-tokenreview-v1-authentication-k8s-io-strong-","subsections":[{"section":"create-tokenreview-v1-authentication-k8s-io","subsections":[]}]}]},{"section":"subjectaccessreview-v1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-subjectaccessreview-v1-authorization-k8s-io-strong-","subsections":[{"section":"create-subjectaccessreview-v1-authorization-k8s-io","subsections":[]}]}]},{"section":"serviceaccount-v1-core","subsections":[{"section":"-strong-read-operations-serviceaccount-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-serviceaccount-v1-core","subsections":[]},{"section":"watch-list-serviceaccount-v1-core","subsections":[]},{"section":"watch-serviceaccount-v1-core","subsections":[]},{"section":"list-all-namespaces-serviceaccount-v1-core","subsections":[]},{"section":"list-serviceaccount-v1-core","subsections":[]},{"section":"read-serviceaccount-v1-core","subsections":[]}]},{"section":"-strong-write-operations-serviceaccount-v1-core-strong-","subsections":[{"section":"delete-collection-serviceaccount-v1-core","subsections":[]},{"section":"delete-serviceaccount-v1-core","subsections":[]},{"section":"replace-serviceaccount-v1-core","subsections":[]},{"section":"patch-serviceaccount-v1-core","subsections":[]},{"section":"create-serviceaccount-v1-core","subsections":[]}]}]},{"section":"selfsubjectrulesreview-v1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-selfsubjectrulesreview-v1-authorization-k8s-io-strong-","subsections":[{"section":"create-selfsubjectrulesreview-v1-authorization-k8s-io","subsections":[]}]}]},{"section":"selfsubjectaccessreview-v1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-selfsubjectaccessreview-v1-authorization-k8s-io-strong-","subsections":[{"section":"create-selfsubjectaccessreview-v1-authorization-k8s-io","subsections":[]}]}]},{"section":"runtimeclass-v1beta1-node-k8s-io","subsections":[{"section":"-strong-read-operations-runtimeclass-v1beta1-node-k8s-io-strong-","subsections":[{"section":"watch-list-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"watch-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"list-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"read-runtimeclass-v1beta1-node-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-runtimeclass-v1beta1-node-k8s-io-strong-","subsections":[{"section":"delete-collection-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"delete-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"replace-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"patch-runtimeclass-v1beta1-node-k8s-io","subsections":[]},{"section":"create-runtimeclass-v1beta1-node-k8s-io","subsections":[]}]}]},{"section":"rolebinding-v1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-rolebinding-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-list-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-all-namespaces-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-rolebinding-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-rolebinding-v1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"role-v1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-role-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-list-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-all-namespaces-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-role-v1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-role-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-role-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-role-v1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"resourcequota-v1-core","subsections":[{"section":"-strong-status-operations-resourcequota-v1-core-strong-","subsections":[{"section":"replace-status-resourcequota-v1-core","subsections":[]},{"section":"read-status-resourcequota-v1-core","subsections":[]},{"section":"patch-status-resourcequota-v1-core","subsections":[]}]},{"section":"-strong-read-operations-resourcequota-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-resourcequota-v1-core","subsections":[]},{"section":"watch-list-resourcequota-v1-core","subsections":[]},{"section":"watch-resourcequota-v1-core","subsections":[]},{"section":"list-all-namespaces-resourcequota-v1-core","subsections":[]},{"section":"list-resourcequota-v1-core","subsections":[]},{"section":"read-resourcequota-v1-core","subsections":[]}]},{"section":"-strong-write-operations-resourcequota-v1-core-strong-","subsections":[{"section":"delete-collection-resourcequota-v1-core","subsections":[]},{"section":"delete-resourcequota-v1-core","subsections":[]},{"section":"replace-resourcequota-v1-core","subsections":[]},{"section":"patch-resourcequota-v1-core","subsections":[]},{"section":"create-resourcequota-v1-core","subsections":[]}]}]},{"section":"persistentvolume-v1-core","subsections":[{"section":"-strong-status-operations-persistentvolume-v1-core-strong-","subsections":[{"section":"replace-status-persistentvolume-v1-core","subsections":[]},{"section":"read-status-persistentvolume-v1-core","subsections":[]},{"section":"patch-status-persistentvolume-v1-core","subsections":[]}]},{"section":"-strong-read-operations-persistentvolume-v1-core-strong-","subsections":[{"section":"watch-list-persistentvolume-v1-core","subsections":[]},{"section":"watch-persistentvolume-v1-core","subsections":[]},{"section":"list-persistentvolume-v1-core","subsections":[]},{"section":"read-persistentvolume-v1-core","subsections":[]}]},{"section":"-strong-write-operations-persistentvolume-v1-core-strong-","subsections":[{"section":"delete-collection-persistentvolume-v1-core","subsections":[]},{"section":"delete-persistentvolume-v1-core","subsections":[]},{"section":"replace-persistentvolume-v1-core","subsections":[]},{"section":"patch-persistentvolume-v1-core","subsections":[]},{"section":"create-persistentvolume-v1-core","subsections":[]}]}]},{"section":"node-v1-core","subsections":[{"section":"-strong-proxy-operations-node-v1-core-strong-","subsections":[{"section":"replace-connect-proxy-path-node-v1-core","subsections":[]},{"section":"replace-connect-proxy-node-v1-core","subsections":[]},{"section":"head-connect-proxy-path-node-v1-core","subsections":[]},{"section":"head-connect-proxy-node-v1-core","subsections":[]},{"section":"get-connect-proxy-path-node-v1-core","subsections":[]},{"section":"get-connect-proxy-node-v1-core","subsections":[]},{"section":"delete-connect-proxy-path-node-v1-core","subsections":[]},{"section":"delete-connect-proxy-node-v1-core","subsections":[]},{"section":"create-connect-proxy-path-node-v1-core","subsections":[]},{"section":"create-connect-proxy-node-v1-core","subsections":[]}]},{"section":"-strong-status-operations-node-v1-core-strong-","subsections":[{"section":"replace-status-node-v1-core","subsections":[]},{"section":"read-status-node-v1-core","subsections":[]},{"section":"patch-status-node-v1-core","subsections":[]}]},{"section":"-strong-read-operations-node-v1-core-strong-","subsections":[{"section":"watch-list-node-v1-core","subsections":[]},{"section":"watch-node-v1-core","subsections":[]},{"section":"list-node-v1-core","subsections":[]},{"section":"read-node-v1-core","subsections":[]}]},{"section":"-strong-write-operations-node-v1-core-strong-","subsections":[{"section":"delete-collection-node-v1-core","subsections":[]},{"section":"delete-node-v1-core","subsections":[]},{"section":"replace-node-v1-core","subsections":[]},{"section":"patch-node-v1-core","subsections":[]},{"section":"create-node-v1-core","subsections":[]}]}]},{"section":"namespace-v1-core","subsections":[{"section":"-strong-status-operations-namespace-v1-core-strong-","subsections":[{"section":"replace-status-namespace-v1-core","subsections":[]},{"section":"read-status-namespace-v1-core","subsections":[]},{"section":"patch-status-namespace-v1-core","subsections":[]}]},{"section":"-strong-read-operations-namespace-v1-core-strong-","subsections":[{"section":"watch-list-namespace-v1-core","subsections":[]},{"section":"watch-namespace-v1-core","subsections":[]},{"section":"list-namespace-v1-core","subsections":[]},{"section":"read-namespace-v1-core","subsections":[]}]},{"section":"-strong-write-operations-namespace-v1-core-strong-","subsections":[{"section":"delete-namespace-v1-core","subsections":[]},{"section":"replace-namespace-v1-core","subsections":[]},{"section":"patch-namespace-v1-core","subsections":[]},{"section":"create-namespace-v1-core","subsections":[]}]}]},{"section":"localsubjectaccessreview-v1-authorization-k8s-io","subsections":[{"section":"-strong-write-operations-localsubjectaccessreview-v1-authorization-k8s-io-strong-","subsections":[{"section":"create-localsubjectaccessreview-v1-authorization-k8s-io","subsections":[]}]}]},{"section":"lease-v1-coordination-k8s-io","subsections":[{"section":"-strong-read-operations-lease-v1-coordination-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-lease-v1-coordination-k8s-io","subsections":[]},{"section":"watch-list-lease-v1-coordination-k8s-io","subsections":[]},{"section":"watch-lease-v1-coordination-k8s-io","subsections":[]},{"section":"list-all-namespaces-lease-v1-coordination-k8s-io","subsections":[]},{"section":"list-lease-v1-coordination-k8s-io","subsections":[]},{"section":"read-lease-v1-coordination-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-lease-v1-coordination-k8s-io-strong-","subsections":[{"section":"delete-collection-lease-v1-coordination-k8s-io","subsections":[]},{"section":"delete-lease-v1-coordination-k8s-io","subsections":[]},{"section":"replace-lease-v1-coordination-k8s-io","subsections":[]},{"section":"patch-lease-v1-coordination-k8s-io","subsections":[]},{"section":"create-lease-v1-coordination-k8s-io","subsections":[]}]}]},{"section":"componentstatus-v1-core","subsections":[{"section":"-strong-read-operations-componentstatus-v1-core-strong-","subsections":[{"section":"list-componentstatus-v1-core","subsections":[]},{"section":"read-componentstatus-v1-core","subsections":[]}]}]},{"section":"clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-clusterrolebinding-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-clusterrolebinding-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-clusterrolebinding-v1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"clusterrole-v1-rbac-authorization-k8s-io","subsections":[{"section":"-strong-read-operations-clusterrole-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"watch-list-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"watch-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"list-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"read-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-clusterrole-v1-rbac-authorization-k8s-io-strong-","subsections":[{"section":"delete-collection-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"delete-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"replace-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"patch-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]},{"section":"create-clusterrole-v1-rbac-authorization-k8s-io","subsections":[]}]}]},{"section":"certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[{"section":"-strong-status-operations-certificatesigningrequest-v1beta1-certificates-k8s-io-strong-","subsections":[{"section":"replace-status-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"read-status-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"patch-status-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]}]},{"section":"-strong-read-operations-certificatesigningrequest-v1beta1-certificates-k8s-io-strong-","subsections":[{"section":"watch-list-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"watch-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"list-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"read-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-certificatesigningrequest-v1beta1-certificates-k8s-io-strong-","subsections":[{"section":"delete-collection-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"delete-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"replace-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"patch-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]},{"section":"create-certificatesigningrequest-v1beta1-certificates-k8s-io","subsections":[]}]}]},{"section":"binding-v1-core","subsections":[{"section":"-strong-write-operations-binding-v1-core-strong-","subsections":[{"section":"create-binding-v1-core","subsections":[]}]}]},{"section":"auditsink-v1alpha1-auditregistration-k8s-io","subsections":[{"section":"-strong-read-operations-auditsink-v1alpha1-auditregistration-k8s-io-strong-","subsections":[{"section":"watch-list-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"watch-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"list-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"read-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-auditsink-v1alpha1-auditregistration-k8s-io-strong-","subsections":[{"section":"delete-collection-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"delete-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"replace-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"patch-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]},{"section":"create-auditsink-v1alpha1-auditregistration-k8s-io","subsections":[]}]}]},{"section":"apiservice-v1-apiregistration-k8s-io","subsections":[{"section":"-strong-status-operations-apiservice-v1-apiregistration-k8s-io-strong-","subsections":[{"section":"replace-status-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"read-status-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"patch-status-apiservice-v1-apiregistration-k8s-io","subsections":[]}]},{"section":"-strong-read-operations-apiservice-v1-apiregistration-k8s-io-strong-","subsections":[{"section":"watch-list-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"watch-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"list-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"read-apiservice-v1-apiregistration-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-apiservice-v1-apiregistration-k8s-io-strong-","subsections":[{"section":"delete-collection-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"delete-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"replace-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"patch-apiservice-v1-apiregistration-k8s-io","subsections":[]},{"section":"create-apiservice-v1-apiregistration-k8s-io","subsections":[]}]}]},{"section":"-strong-cluster-apis-strong-","subsections":[]},{"section":"podsecuritypolicy-v1beta1-policy","subsections":[{"section":"-strong-read-operations-podsecuritypolicy-v1beta1-policy-strong-","subsections":[{"section":"watch-list-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"watch-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"list-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"read-podsecuritypolicy-v1beta1-policy","subsections":[]}]},{"section":"-strong-write-operations-podsecuritypolicy-v1beta1-policy-strong-","subsections":[{"section":"delete-collection-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"delete-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"replace-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"patch-podsecuritypolicy-v1beta1-policy","subsections":[]},{"section":"create-podsecuritypolicy-v1beta1-policy","subsections":[]}]}]},{"section":"podpreset-v1alpha1-settings-k8s-io","subsections":[{"section":"-strong-read-operations-podpreset-v1alpha1-settings-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"watch-list-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"watch-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"list-all-namespaces-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"list-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"read-podpreset-v1alpha1-settings-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-podpreset-v1alpha1-settings-k8s-io-strong-","subsections":[{"section":"delete-collection-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"delete-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"replace-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"patch-podpreset-v1alpha1-settings-k8s-io","subsections":[]},{"section":"create-podpreset-v1alpha1-settings-k8s-io","subsections":[]}]}]},{"section":"priorityclass-v1-scheduling-k8s-io","subsections":[{"section":"-strong-read-operations-priorityclass-v1-scheduling-k8s-io-strong-","subsections":[{"section":"watch-list-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"watch-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"list-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"read-priorityclass-v1-scheduling-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-priorityclass-v1-scheduling-k8s-io-strong-","subsections":[{"section":"delete-collection-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"delete-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"replace-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"patch-priorityclass-v1-scheduling-k8s-io","subsections":[]},{"section":"create-priorityclass-v1-scheduling-k8s-io","subsections":[]}]}]},{"section":"poddisruptionbudget-v1beta1-policy","subsections":[{"section":"-strong-status-operations-poddisruptionbudget-v1beta1-policy-strong-","subsections":[{"section":"replace-status-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"read-status-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"patch-status-poddisruptionbudget-v1beta1-policy","subsections":[]}]},{"section":"-strong-read-operations-poddisruptionbudget-v1beta1-policy-strong-","subsections":[{"section":"watch-list-all-namespaces-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"watch-list-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"watch-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"list-all-namespaces-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"list-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"read-poddisruptionbudget-v1beta1-policy","subsections":[]}]},{"section":"-strong-write-operations-poddisruptionbudget-v1beta1-policy-strong-","subsections":[{"section":"delete-collection-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"delete-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"replace-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"patch-poddisruptionbudget-v1beta1-policy","subsections":[]},{"section":"create-poddisruptionbudget-v1beta1-policy","subsections":[]}]}]},{"section":"podtemplate-v1-core","subsections":[{"section":"-strong-read-operations-podtemplate-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-podtemplate-v1-core","subsections":[]},{"section":"watch-list-podtemplate-v1-core","subsections":[]},{"section":"watch-podtemplate-v1-core","subsections":[]},{"section":"list-all-namespaces-podtemplate-v1-core","subsections":[]},{"section":"list-podtemplate-v1-core","subsections":[]},{"section":"read-podtemplate-v1-core","subsections":[]}]},{"section":"-strong-write-operations-podtemplate-v1-core-strong-","subsections":[{"section":"delete-collection-podtemplate-v1-core","subsections":[]},{"section":"delete-podtemplate-v1-core","subsections":[]},{"section":"replace-podtemplate-v1-core","subsections":[]},{"section":"patch-podtemplate-v1-core","subsections":[]},{"section":"create-podtemplate-v1-core","subsections":[]}]}]},{"section":"validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[{"section":"-strong-read-operations-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","subsections":[{"section":"watch-list-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"watch-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"list-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"read-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","subsections":[{"section":"delete-collection-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"delete-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"replace-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"patch-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"create-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]}]}]},{"section":"mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[{"section":"-strong-read-operations-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","subsections":[{"section":"watch-list-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"watch-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"list-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"read-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","subsections":[{"section":"delete-collection-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"delete-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"replace-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"patch-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]},{"section":"create-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","subsections":[]}]}]},{"section":"horizontalpodautoscaler-v1-autoscaling","subsections":[{"section":"-strong-status-operations-horizontalpodautoscaler-v1-autoscaling-strong-","subsections":[{"section":"replace-status-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"read-status-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"patch-status-horizontalpodautoscaler-v1-autoscaling","subsections":[]}]},{"section":"-strong-read-operations-horizontalpodautoscaler-v1-autoscaling-strong-","subsections":[{"section":"watch-list-all-namespaces-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"watch-list-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"watch-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"list-all-namespaces-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"list-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"read-horizontalpodautoscaler-v1-autoscaling","subsections":[]}]},{"section":"-strong-write-operations-horizontalpodautoscaler-v1-autoscaling-strong-","subsections":[{"section":"delete-collection-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"delete-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"replace-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"patch-horizontalpodautoscaler-v1-autoscaling","subsections":[]},{"section":"create-horizontalpodautoscaler-v1-autoscaling","subsections":[]}]}]},{"section":"limitrange-v1-core","subsections":[{"section":"-strong-read-operations-limitrange-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-limitrange-v1-core","subsections":[]},{"section":"watch-list-limitrange-v1-core","subsections":[]},{"section":"watch-limitrange-v1-core","subsections":[]},{"section":"list-all-namespaces-limitrange-v1-core","subsections":[]},{"section":"list-limitrange-v1-core","subsections":[]},{"section":"read-limitrange-v1-core","subsections":[]}]},{"section":"-strong-write-operations-limitrange-v1-core-strong-","subsections":[{"section":"delete-collection-limitrange-v1-core","subsections":[]},{"section":"delete-limitrange-v1-core","subsections":[]},{"section":"replace-limitrange-v1-core","subsections":[]},{"section":"patch-limitrange-v1-core","subsections":[]},{"section":"create-limitrange-v1-core","subsections":[]}]}]},{"section":"event-v1-core","subsections":[{"section":"-strong-read-operations-event-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-event-v1-core","subsections":[]},{"section":"watch-list-event-v1-core","subsections":[]},{"section":"watch-event-v1-core","subsections":[]},{"section":"list-all-namespaces-event-v1-core","subsections":[]},{"section":"list-event-v1-core","subsections":[]},{"section":"read-event-v1-core","subsections":[]}]},{"section":"-strong-write-operations-event-v1-core-strong-","subsections":[{"section":"delete-collection-event-v1-core","subsections":[]},{"section":"delete-event-v1-core","subsections":[]},{"section":"replace-event-v1-core","subsections":[]},{"section":"patch-event-v1-core","subsections":[]},{"section":"create-event-v1-core","subsections":[]}]}]},{"section":"customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[{"section":"-strong-status-operations-customresourcedefinition-v1beta1-apiextensions-k8s-io-strong-","subsections":[{"section":"replace-status-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"read-status-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"patch-status-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]}]},{"section":"-strong-read-operations-customresourcedefinition-v1beta1-apiextensions-k8s-io-strong-","subsections":[{"section":"watch-list-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"watch-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"list-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"read-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-customresourcedefinition-v1beta1-apiextensions-k8s-io-strong-","subsections":[{"section":"delete-collection-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"delete-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"replace-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"patch-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]},{"section":"create-customresourcedefinition-v1beta1-apiextensions-k8s-io","subsections":[]}]}]},{"section":"controllerrevision-v1-apps","subsections":[{"section":"-strong-read-operations-controllerrevision-v1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-controllerrevision-v1-apps","subsections":[]},{"section":"watch-list-controllerrevision-v1-apps","subsections":[]},{"section":"watch-controllerrevision-v1-apps","subsections":[]},{"section":"list-all-namespaces-controllerrevision-v1-apps","subsections":[]},{"section":"list-controllerrevision-v1-apps","subsections":[]},{"section":"read-controllerrevision-v1-apps","subsections":[]}]},{"section":"-strong-write-operations-controllerrevision-v1-apps-strong-","subsections":[{"section":"delete-collection-controllerrevision-v1-apps","subsections":[]},{"section":"delete-controllerrevision-v1-apps","subsections":[]},{"section":"replace-controllerrevision-v1-apps","subsections":[]},{"section":"patch-controllerrevision-v1-apps","subsections":[]},{"section":"create-controllerrevision-v1-apps","subsections":[]}]}]},{"section":"-strong-metadata-apis-strong-","subsections":[]},{"section":"volumeattachment-v1-storage-k8s-io","subsections":[{"section":"-strong-status-operations-volumeattachment-v1-storage-k8s-io-strong-","subsections":[{"section":"replace-status-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"read-status-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"patch-status-volumeattachment-v1-storage-k8s-io","subsections":[]}]},{"section":"-strong-read-operations-volumeattachment-v1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"watch-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"list-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"read-volumeattachment-v1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-volumeattachment-v1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"delete-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"replace-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"patch-volumeattachment-v1-storage-k8s-io","subsections":[]},{"section":"create-volumeattachment-v1-storage-k8s-io","subsections":[]}]}]},{"section":"volume-v1-core","subsections":[]},{"section":"storageclass-v1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-storageclass-v1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"watch-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"list-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"read-storageclass-v1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-storageclass-v1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"delete-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"replace-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"patch-storageclass-v1-storage-k8s-io","subsections":[]},{"section":"create-storageclass-v1-storage-k8s-io","subsections":[]}]}]},{"section":"persistentvolumeclaim-v1-core","subsections":[{"section":"-strong-status-operations-persistentvolumeclaim-v1-core-strong-","subsections":[{"section":"replace-status-persistentvolumeclaim-v1-core","subsections":[]},{"section":"read-status-persistentvolumeclaim-v1-core","subsections":[]},{"section":"patch-status-persistentvolumeclaim-v1-core","subsections":[]}]},{"section":"-strong-read-operations-persistentvolumeclaim-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-persistentvolumeclaim-v1-core","subsections":[]},{"section":"watch-list-persistentvolumeclaim-v1-core","subsections":[]},{"section":"watch-persistentvolumeclaim-v1-core","subsections":[]},{"section":"list-all-namespaces-persistentvolumeclaim-v1-core","subsections":[]},{"section":"list-persistentvolumeclaim-v1-core","subsections":[]},{"section":"read-persistentvolumeclaim-v1-core","subsections":[]}]},{"section":"-strong-write-operations-persistentvolumeclaim-v1-core-strong-","subsections":[{"section":"delete-collection-persistentvolumeclaim-v1-core","subsections":[]},{"section":"delete-persistentvolumeclaim-v1-core","subsections":[]},{"section":"replace-persistentvolumeclaim-v1-core","subsections":[]},{"section":"patch-persistentvolumeclaim-v1-core","subsections":[]},{"section":"create-persistentvolumeclaim-v1-core","subsections":[]}]}]},{"section":"secret-v1-core","subsections":[{"section":"-strong-read-operations-secret-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-secret-v1-core","subsections":[]},{"section":"watch-list-secret-v1-core","subsections":[]},{"section":"watch-secret-v1-core","subsections":[]},{"section":"list-all-namespaces-secret-v1-core","subsections":[]},{"section":"list-secret-v1-core","subsections":[]},{"section":"read-secret-v1-core","subsections":[]}]},{"section":"-strong-write-operations-secret-v1-core-strong-","subsections":[{"section":"delete-collection-secret-v1-core","subsections":[]},{"section":"delete-secret-v1-core","subsections":[]},{"section":"replace-secret-v1-core","subsections":[]},{"section":"patch-secret-v1-core","subsections":[]},{"section":"create-secret-v1-core","subsections":[]}]}]},{"section":"csinode-v1beta1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-csinode-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"watch-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"list-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"read-csinode-v1beta1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-csinode-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"delete-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"replace-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"patch-csinode-v1beta1-storage-k8s-io","subsections":[]},{"section":"create-csinode-v1beta1-storage-k8s-io","subsections":[]}]}]},{"section":"csidriver-v1beta1-storage-k8s-io","subsections":[{"section":"-strong-read-operations-csidriver-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"watch-list-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"watch-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"list-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"read-csidriver-v1beta1-storage-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-csidriver-v1beta1-storage-k8s-io-strong-","subsections":[{"section":"delete-collection-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"delete-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"replace-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"patch-csidriver-v1beta1-storage-k8s-io","subsections":[]},{"section":"create-csidriver-v1beta1-storage-k8s-io","subsections":[]}]}]},{"section":"configmap-v1-core","subsections":[{"section":"-strong-read-operations-configmap-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-configmap-v1-core","subsections":[]},{"section":"watch-list-configmap-v1-core","subsections":[]},{"section":"watch-configmap-v1-core","subsections":[]},{"section":"list-all-namespaces-configmap-v1-core","subsections":[]},{"section":"list-configmap-v1-core","subsections":[]},{"section":"read-configmap-v1-core","subsections":[]}]},{"section":"-strong-write-operations-configmap-v1-core-strong-","subsections":[{"section":"delete-collection-configmap-v1-core","subsections":[]},{"section":"delete-configmap-v1-core","subsections":[]},{"section":"replace-configmap-v1-core","subsections":[]},{"section":"patch-configmap-v1-core","subsections":[]},{"section":"create-configmap-v1-core","subsections":[]}]}]},{"section":"-strong-config-and-storage-apis-strong-","subsections":[]},{"section":"service-v1-core","subsections":[{"section":"-strong-proxy-operations-service-v1-core-strong-","subsections":[{"section":"replace-connect-proxy-path-service-v1-core","subsections":[]},{"section":"replace-connect-proxy-service-v1-core","subsections":[]},{"section":"head-connect-proxy-path-service-v1-core","subsections":[]},{"section":"head-connect-proxy-service-v1-core","subsections":[]},{"section":"get-connect-proxy-path-service-v1-core","subsections":[]},{"section":"get-connect-proxy-service-v1-core","subsections":[]},{"section":"delete-connect-proxy-path-service-v1-core","subsections":[]},{"section":"delete-connect-proxy-service-v1-core","subsections":[]},{"section":"create-connect-proxy-path-service-v1-core","subsections":[]},{"section":"create-connect-proxy-service-v1-core","subsections":[]}]},{"section":"-strong-status-operations-service-v1-core-strong-","subsections":[{"section":"replace-status-service-v1-core","subsections":[]},{"section":"read-status-service-v1-core","subsections":[]},{"section":"patch-status-service-v1-core","subsections":[]}]},{"section":"-strong-read-operations-service-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-service-v1-core","subsections":[]},{"section":"watch-list-service-v1-core","subsections":[]},{"section":"watch-service-v1-core","subsections":[]},{"section":"list-all-namespaces-service-v1-core","subsections":[]},{"section":"list-service-v1-core","subsections":[]},{"section":"read-service-v1-core","subsections":[]}]},{"section":"-strong-write-operations-service-v1-core-strong-","subsections":[{"section":"delete-service-v1-core","subsections":[]},{"section":"replace-service-v1-core","subsections":[]},{"section":"patch-service-v1-core","subsections":[]},{"section":"create-service-v1-core","subsections":[]}]}]},{"section":"ingress-v1beta1-networking-k8s-io","subsections":[{"section":"-strong-status-operations-ingress-v1beta1-networking-k8s-io-strong-","subsections":[{"section":"replace-status-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"read-status-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"patch-status-ingress-v1beta1-networking-k8s-io","subsections":[]}]},{"section":"-strong-read-operations-ingress-v1beta1-networking-k8s-io-strong-","subsections":[{"section":"watch-list-all-namespaces-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"watch-list-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"watch-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"list-all-namespaces-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"list-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"read-ingress-v1beta1-networking-k8s-io","subsections":[]}]},{"section":"-strong-write-operations-ingress-v1beta1-networking-k8s-io-strong-","subsections":[{"section":"delete-collection-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"delete-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"replace-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"patch-ingress-v1beta1-networking-k8s-io","subsections":[]},{"section":"create-ingress-v1beta1-networking-k8s-io","subsections":[]}]}]},{"section":"endpoints-v1-core","subsections":[{"section":"-strong-read-operations-endpoints-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-endpoints-v1-core","subsections":[]},{"section":"watch-list-endpoints-v1-core","subsections":[]},{"section":"watch-endpoints-v1-core","subsections":[]},{"section":"list-all-namespaces-endpoints-v1-core","subsections":[]},{"section":"list-endpoints-v1-core","subsections":[]},{"section":"read-endpoints-v1-core","subsections":[]}]},{"section":"-strong-write-operations-endpoints-v1-core-strong-","subsections":[{"section":"delete-collection-endpoints-v1-core","subsections":[]},{"section":"delete-endpoints-v1-core","subsections":[]},{"section":"replace-endpoints-v1-core","subsections":[]},{"section":"patch-endpoints-v1-core","subsections":[]},{"section":"create-endpoints-v1-core","subsections":[]}]}]},{"section":"-strong-service-apis-strong-","subsections":[]},{"section":"statefulset-v1-apps","subsections":[{"section":"-strong-misc-operations-statefulset-v1-apps-strong-","subsections":[{"section":"patch-scale-statefulset-v1-apps","subsections":[]},{"section":"replace-scale-statefulset-v1-apps","subsections":[]},{"section":"read-scale-statefulset-v1-apps","subsections":[]}]},{"section":"-strong-status-operations-statefulset-v1-apps-strong-","subsections":[{"section":"replace-status-statefulset-v1-apps","subsections":[]},{"section":"read-status-statefulset-v1-apps","subsections":[]},{"section":"patch-status-statefulset-v1-apps","subsections":[]}]},{"section":"-strong-read-operations-statefulset-v1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-statefulset-v1-apps","subsections":[]},{"section":"watch-list-statefulset-v1-apps","subsections":[]},{"section":"watch-statefulset-v1-apps","subsections":[]},{"section":"list-all-namespaces-statefulset-v1-apps","subsections":[]},{"section":"list-statefulset-v1-apps","subsections":[]},{"section":"read-statefulset-v1-apps","subsections":[]}]},{"section":"-strong-write-operations-statefulset-v1-apps-strong-","subsections":[{"section":"delete-collection-statefulset-v1-apps","subsections":[]},{"section":"delete-statefulset-v1-apps","subsections":[]},{"section":"replace-statefulset-v1-apps","subsections":[]},{"section":"patch-statefulset-v1-apps","subsections":[]},{"section":"create-statefulset-v1-apps","subsections":[]}]}]},{"section":"replicationcontroller-v1-core","subsections":[{"section":"-strong-misc-operations-replicationcontroller-v1-core-strong-","subsections":[{"section":"patch-scale-replicationcontroller-v1-core","subsections":[]},{"section":"replace-scale-replicationcontroller-v1-core","subsections":[]},{"section":"read-scale-replicationcontroller-v1-core","subsections":[]}]},{"section":"-strong-status-operations-replicationcontroller-v1-core-strong-","subsections":[{"section":"replace-status-replicationcontroller-v1-core","subsections":[]},{"section":"read-status-replicationcontroller-v1-core","subsections":[]},{"section":"patch-status-replicationcontroller-v1-core","subsections":[]}]},{"section":"-strong-read-operations-replicationcontroller-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-replicationcontroller-v1-core","subsections":[]},{"section":"watch-list-replicationcontroller-v1-core","subsections":[]},{"section":"watch-replicationcontroller-v1-core","subsections":[]},{"section":"list-all-namespaces-replicationcontroller-v1-core","subsections":[]},{"section":"list-replicationcontroller-v1-core","subsections":[]},{"section":"read-replicationcontroller-v1-core","subsections":[]}]},{"section":"-strong-write-operations-replicationcontroller-v1-core-strong-","subsections":[{"section":"delete-collection-replicationcontroller-v1-core","subsections":[]},{"section":"delete-replicationcontroller-v1-core","subsections":[]},{"section":"replace-replicationcontroller-v1-core","subsections":[]},{"section":"patch-replicationcontroller-v1-core","subsections":[]},{"section":"create-replicationcontroller-v1-core","subsections":[]}]}]},{"section":"replicaset-v1-apps","subsections":[{"section":"-strong-misc-operations-replicaset-v1-apps-strong-","subsections":[{"section":"patch-scale-replicaset-v1-apps","subsections":[]},{"section":"replace-scale-replicaset-v1-apps","subsections":[]},{"section":"read-scale-replicaset-v1-apps","subsections":[]}]},{"section":"-strong-status-operations-replicaset-v1-apps-strong-","subsections":[{"section":"replace-status-replicaset-v1-apps","subsections":[]},{"section":"read-status-replicaset-v1-apps","subsections":[]},{"section":"patch-status-replicaset-v1-apps","subsections":[]}]},{"section":"-strong-read-operations-replicaset-v1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-replicaset-v1-apps","subsections":[]},{"section":"watch-list-replicaset-v1-apps","subsections":[]},{"section":"watch-replicaset-v1-apps","subsections":[]},{"section":"list-all-namespaces-replicaset-v1-apps","subsections":[]},{"section":"list-replicaset-v1-apps","subsections":[]},{"section":"read-replicaset-v1-apps","subsections":[]}]},{"section":"-strong-write-operations-replicaset-v1-apps-strong-","subsections":[{"section":"delete-collection-replicaset-v1-apps","subsections":[]},{"section":"delete-replicaset-v1-apps","subsections":[]},{"section":"replace-replicaset-v1-apps","subsections":[]},{"section":"patch-replicaset-v1-apps","subsections":[]},{"section":"create-replicaset-v1-apps","subsections":[]}]}]},{"section":"pod-v1-core","subsections":[{"section":"-strong-misc-operations-pod-v1-core-strong-","subsections":[{"section":"read-log-pod-v1-core","subsections":[]}]},{"section":"-strong-proxy-operations-pod-v1-core-strong-","subsections":[{"section":"replace-connect-proxy-path-pod-v1-core","subsections":[]},{"section":"replace-connect-proxy-pod-v1-core","subsections":[]},{"section":"head-connect-proxy-path-pod-v1-core","subsections":[]},{"section":"head-connect-proxy-pod-v1-core","subsections":[]},{"section":"get-connect-proxy-path-pod-v1-core","subsections":[]},{"section":"get-connect-proxy-pod-v1-core","subsections":[]},{"section":"get-connect-portforward-pod-v1-core","subsections":[]},{"section":"delete-connect-proxy-path-pod-v1-core","subsections":[]},{"section":"delete-connect-proxy-pod-v1-core","subsections":[]},{"section":"create-connect-proxy-path-pod-v1-core","subsections":[]},{"section":"create-connect-proxy-pod-v1-core","subsections":[]},{"section":"create-connect-portforward-pod-v1-core","subsections":[]}]},{"section":"-strong-status-operations-pod-v1-core-strong-","subsections":[{"section":"replace-status-pod-v1-core","subsections":[]},{"section":"read-status-pod-v1-core","subsections":[]},{"section":"patch-status-pod-v1-core","subsections":[]}]},{"section":"-strong-read-operations-pod-v1-core-strong-","subsections":[{"section":"watch-list-all-namespaces-pod-v1-core","subsections":[]},{"section":"watch-list-pod-v1-core","subsections":[]},{"section":"watch-pod-v1-core","subsections":[]},{"section":"list-all-namespaces-pod-v1-core","subsections":[]},{"section":"list-pod-v1-core","subsections":[]},{"section":"read-pod-v1-core","subsections":[]}]},{"section":"-strong-write-operations-pod-v1-core-strong-","subsections":[{"section":"delete-collection-pod-v1-core","subsections":[]},{"section":"delete-pod-v1-core","subsections":[]},{"section":"replace-pod-v1-core","subsections":[]},{"section":"patch-pod-v1-core","subsections":[]},{"section":"create-eviction-pod-v1-core","subsections":[]},{"section":"create-pod-v1-core","subsections":[]}]}]},{"section":"job-v1-batch","subsections":[{"section":"-strong-status-operations-job-v1-batch-strong-","subsections":[{"section":"replace-status-job-v1-batch","subsections":[]},{"section":"read-status-job-v1-batch","subsections":[]},{"section":"patch-status-job-v1-batch","subsections":[]}]},{"section":"-strong-read-operations-job-v1-batch-strong-","subsections":[{"section":"watch-list-all-namespaces-job-v1-batch","subsections":[]},{"section":"watch-list-job-v1-batch","subsections":[]},{"section":"watch-job-v1-batch","subsections":[]},{"section":"list-all-namespaces-job-v1-batch","subsections":[]},{"section":"list-job-v1-batch","subsections":[]},{"section":"read-job-v1-batch","subsections":[]}]},{"section":"-strong-write-operations-job-v1-batch-strong-","subsections":[{"section":"delete-collection-job-v1-batch","subsections":[]},{"section":"delete-job-v1-batch","subsections":[]},{"section":"replace-job-v1-batch","subsections":[]},{"section":"patch-job-v1-batch","subsections":[]},{"section":"create-job-v1-batch","subsections":[]}]}]},{"section":"deployment-v1-apps","subsections":[{"section":"-strong-misc-operations-deployment-v1-apps-strong-","subsections":[{"section":"patch-scale-deployment-v1-apps","subsections":[]},{"section":"replace-scale-deployment-v1-apps","subsections":[]},{"section":"read-scale-deployment-v1-apps","subsections":[]}]},{"section":"-strong-status-operations-deployment-v1-apps-strong-","subsections":[{"section":"replace-status-deployment-v1-apps","subsections":[]},{"section":"read-status-deployment-v1-apps","subsections":[]},{"section":"patch-status-deployment-v1-apps","subsections":[]}]},{"section":"-strong-read-operations-deployment-v1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-deployment-v1-apps","subsections":[]},{"section":"watch-list-deployment-v1-apps","subsections":[]},{"section":"watch-deployment-v1-apps","subsections":[]},{"section":"list-all-namespaces-deployment-v1-apps","subsections":[]},{"section":"list-deployment-v1-apps","subsections":[]},{"section":"read-deployment-v1-apps","subsections":[]}]},{"section":"-strong-write-operations-deployment-v1-apps-strong-","subsections":[{"section":"delete-collection-deployment-v1-apps","subsections":[]},{"section":"delete-deployment-v1-apps","subsections":[]},{"section":"replace-deployment-v1-apps","subsections":[]},{"section":"patch-deployment-v1-apps","subsections":[]},{"section":"create-deployment-v1-apps","subsections":[]}]}]},{"section":"daemonset-v1-apps","subsections":[{"section":"-strong-status-operations-daemonset-v1-apps-strong-","subsections":[{"section":"replace-status-daemonset-v1-apps","subsections":[]},{"section":"read-status-daemonset-v1-apps","subsections":[]},{"section":"patch-status-daemonset-v1-apps","subsections":[]}]},{"section":"-strong-read-operations-daemonset-v1-apps-strong-","subsections":[{"section":"watch-list-all-namespaces-daemonset-v1-apps","subsections":[]},{"section":"watch-list-daemonset-v1-apps","subsections":[]},{"section":"watch-daemonset-v1-apps","subsections":[]},{"section":"list-all-namespaces-daemonset-v1-apps","subsections":[]},{"section":"list-daemonset-v1-apps","subsections":[]},{"section":"read-daemonset-v1-apps","subsections":[]}]},{"section":"-strong-write-operations-daemonset-v1-apps-strong-","subsections":[{"section":"delete-collection-daemonset-v1-apps","subsections":[]},{"section":"delete-daemonset-v1-apps","subsections":[]},{"section":"replace-daemonset-v1-apps","subsections":[]},{"section":"patch-daemonset-v1-apps","subsections":[]},{"section":"create-daemonset-v1-apps","subsections":[]}]}]},{"section":"cronjob-v1beta1-batch","subsections":[{"section":"-strong-status-operations-cronjob-v1beta1-batch-strong-","subsections":[{"section":"replace-status-cronjob-v1beta1-batch","subsections":[]},{"section":"read-status-cronjob-v1beta1-batch","subsections":[]},{"section":"patch-status-cronjob-v1beta1-batch","subsections":[]}]},{"section":"-strong-read-operations-cronjob-v1beta1-batch-strong-","subsections":[{"section":"watch-list-all-namespaces-cronjob-v1beta1-batch","subsections":[]},{"section":"watch-list-cronjob-v1beta1-batch","subsections":[]},{"section":"watch-cronjob-v1beta1-batch","subsections":[]},{"section":"list-all-namespaces-cronjob-v1beta1-batch","subsections":[]},{"section":"list-cronjob-v1beta1-batch","subsections":[]},{"section":"read-cronjob-v1beta1-batch","subsections":[]}]},{"section":"-strong-write-operations-cronjob-v1beta1-batch-strong-","subsections":[{"section":"delete-collection-cronjob-v1beta1-batch","subsections":[]},{"section":"delete-cronjob-v1beta1-batch","subsections":[]},{"section":"replace-cronjob-v1beta1-batch","subsections":[]},{"section":"patch-cronjob-v1beta1-batch","subsections":[]},{"section":"create-cronjob-v1beta1-batch","subsections":[]}]}]},{"section":"container-v1-core","subsections":[]},{"section":"-strong-workloads-apis-strong-","subsections":[]},{"section":"-strong-api-overview-strong-","subsections":[]}],"flatToc":["webhookclientconfig-v1alpha1-auditregistration-k8s-io","webhookclientconfig-v1beta1-apiextensions-k8s-io","volumeerror-v1alpha1-storage-k8s-io","volumeerror-v1beta1-storage-k8s-io","volumeattachmentsource-v1alpha1-storage-k8s-io","volumeattachmentsource-v1beta1-storage-k8s-io","watch-list-volumeattachment-v1alpha1-storage-k8s-io","watch-volumeattachment-v1alpha1-storage-k8s-io","list-volumeattachment-v1alpha1-storage-k8s-io","read-volumeattachment-v1alpha1-storage-k8s-io","-strong-read-operations-volumeattachment-v1alpha1-storage-k8s-io-strong-","delete-collection-volumeattachment-v1alpha1-storage-k8s-io","delete-volumeattachment-v1alpha1-storage-k8s-io","replace-volumeattachment-v1alpha1-storage-k8s-io","patch-volumeattachment-v1alpha1-storage-k8s-io","create-volumeattachment-v1alpha1-storage-k8s-io","-strong-write-operations-volumeattachment-v1alpha1-storage-k8s-io-strong-","volumeattachment-v1alpha1-storage-k8s-io","watch-list-volumeattachment-v1beta1-storage-k8s-io","watch-volumeattachment-v1beta1-storage-k8s-io","list-volumeattachment-v1beta1-storage-k8s-io","read-volumeattachment-v1beta1-storage-k8s-io","-strong-read-operations-volumeattachment-v1beta1-storage-k8s-io-strong-","delete-collection-volumeattachment-v1beta1-storage-k8s-io","delete-volumeattachment-v1beta1-storage-k8s-io","replace-volumeattachment-v1beta1-storage-k8s-io","patch-volumeattachment-v1beta1-storage-k8s-io","create-volumeattachment-v1beta1-storage-k8s-io","-strong-write-operations-volumeattachment-v1beta1-storage-k8s-io-strong-","volumeattachment-v1beta1-storage-k8s-io","userinfo-v1beta1-authentication-k8s-io","create-tokenreview-v1beta1-authentication-k8s-io","-strong-write-operations-tokenreview-v1beta1-authentication-k8s-io-strong-","tokenreview-v1beta1-authentication-k8s-io","supplementalgroupsstrategyoptions-v1beta1-extensions","subjectrulesreviewstatus-v1beta1-authorization-k8s-io","create-subjectaccessreview-v1beta1-authorization-k8s-io","-strong-write-operations-subjectaccessreview-v1beta1-authorization-k8s-io-strong-","subjectaccessreview-v1beta1-authorization-k8s-io","subject-v1alpha1-rbac-authorization-k8s-io","subject-v1beta1-rbac-authorization-k8s-io","watch-list-storageclass-v1beta1-storage-k8s-io","watch-storageclass-v1beta1-storage-k8s-io","list-storageclass-v1beta1-storage-k8s-io","read-storageclass-v1beta1-storage-k8s-io","-strong-read-operations-storageclass-v1beta1-storage-k8s-io-strong-","delete-collection-storageclass-v1beta1-storage-k8s-io","delete-storageclass-v1beta1-storage-k8s-io","replace-storageclass-v1beta1-storage-k8s-io","patch-storageclass-v1beta1-storage-k8s-io","create-storageclass-v1beta1-storage-k8s-io","-strong-write-operations-storageclass-v1beta1-storage-k8s-io-strong-","storageclass-v1beta1-storage-k8s-io","statefulsetupdatestrategy-v1beta1-apps","statefulsetupdatestrategy-v1beta2-apps","statefulsetcondition-v1beta1-apps","statefulsetcondition-v1beta2-apps","patch-scale-statefulset-v1beta1-apps","replace-scale-statefulset-v1beta1-apps","read-scale-statefulset-v1beta1-apps","-strong-misc-operations-statefulset-v1beta1-apps-strong-","replace-status-statefulset-v1beta1-apps","read-status-statefulset-v1beta1-apps","patch-status-statefulset-v1beta1-apps","-strong-status-operations-statefulset-v1beta1-apps-strong-","watch-list-all-namespaces-statefulset-v1beta1-apps","watch-list-statefulset-v1beta1-apps","watch-statefulset-v1beta1-apps","list-all-namespaces-statefulset-v1beta1-apps","list-statefulset-v1beta1-apps","read-statefulset-v1beta1-apps","-strong-read-operations-statefulset-v1beta1-apps-strong-","delete-collection-statefulset-v1beta1-apps","delete-statefulset-v1beta1-apps","replace-statefulset-v1beta1-apps","patch-statefulset-v1beta1-apps","create-statefulset-v1beta1-apps","-strong-write-operations-statefulset-v1beta1-apps-strong-","statefulset-v1beta1-apps","patch-scale-statefulset-v1beta2-apps","replace-scale-statefulset-v1beta2-apps","read-scale-statefulset-v1beta2-apps","-strong-misc-operations-statefulset-v1beta2-apps-strong-","replace-status-statefulset-v1beta2-apps","read-status-statefulset-v1beta2-apps","patch-status-statefulset-v1beta2-apps","-strong-status-operations-statefulset-v1beta2-apps-strong-","watch-list-all-namespaces-statefulset-v1beta2-apps","watch-list-statefulset-v1beta2-apps","watch-statefulset-v1beta2-apps","list-all-namespaces-statefulset-v1beta2-apps","list-statefulset-v1beta2-apps","read-statefulset-v1beta2-apps","-strong-read-operations-statefulset-v1beta2-apps-strong-","delete-collection-statefulset-v1beta2-apps","delete-statefulset-v1beta2-apps","replace-statefulset-v1beta2-apps","patch-statefulset-v1beta2-apps","create-statefulset-v1beta2-apps","-strong-write-operations-statefulset-v1beta2-apps-strong-","statefulset-v1beta2-apps","servicereference-v1alpha1-auditregistration-k8s-io","servicereference-v1beta1-apiregistration-k8s-io","servicereference-v1beta1-apiextensions-k8s-io","servicereference-v1-apiregistration-k8s-io","create-selfsubjectrulesreview-v1beta1-authorization-k8s-io","-strong-write-operations-selfsubjectrulesreview-v1beta1-authorization-k8s-io-strong-","selfsubjectrulesreview-v1beta1-authorization-k8s-io","create-selfsubjectaccessreview-v1beta1-authorization-k8s-io","-strong-write-operations-selfsubjectaccessreview-v1beta1-authorization-k8s-io-strong-","selfsubjectaccessreview-v1beta1-authorization-k8s-io","scale-v1beta1-extensions","scale-v1beta1-apps","scale-v1-autoscaling","selinuxstrategyoptions-v1beta1-extensions","runtimeclassstrategyoptions-v1beta1-extensions","watch-list-runtimeclass-v1alpha1-node-k8s-io","watch-runtimeclass-v1alpha1-node-k8s-io","list-runtimeclass-v1alpha1-node-k8s-io","read-runtimeclass-v1alpha1-node-k8s-io","-strong-read-operations-runtimeclass-v1alpha1-node-k8s-io-strong-","delete-collection-runtimeclass-v1alpha1-node-k8s-io","delete-runtimeclass-v1alpha1-node-k8s-io","replace-runtimeclass-v1alpha1-node-k8s-io","patch-runtimeclass-v1alpha1-node-k8s-io","create-runtimeclass-v1alpha1-node-k8s-io","-strong-write-operations-runtimeclass-v1alpha1-node-k8s-io-strong-","runtimeclass-v1alpha1-node-k8s-io","runasuserstrategyoptions-v1beta1-extensions","runasgroupstrategyoptions-v1beta1-extensions","rollingupdatestatefulsetstrategy-v1beta1-apps","rollingupdatestatefulsetstrategy-v1beta2-apps","rollbackconfig-v1beta1-extensions","roleref-v1alpha1-rbac-authorization-k8s-io","roleref-v1beta1-rbac-authorization-k8s-io","watch-list-all-namespaces-rolebinding-v1alpha1-rbac-authorization-k8s-io","watch-list-rolebinding-v1alpha1-rbac-authorization-k8s-io","watch-rolebinding-v1alpha1-rbac-authorization-k8s-io","list-all-namespaces-rolebinding-v1alpha1-rbac-authorization-k8s-io","list-rolebinding-v1alpha1-rbac-authorization-k8s-io","read-rolebinding-v1alpha1-rbac-authorization-k8s-io","-strong-read-operations-rolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","delete-collection-rolebinding-v1alpha1-rbac-authorization-k8s-io","delete-rolebinding-v1alpha1-rbac-authorization-k8s-io","replace-rolebinding-v1alpha1-rbac-authorization-k8s-io","patch-rolebinding-v1alpha1-rbac-authorization-k8s-io","create-rolebinding-v1alpha1-rbac-authorization-k8s-io","-strong-write-operations-rolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","rolebinding-v1alpha1-rbac-authorization-k8s-io","watch-list-all-namespaces-rolebinding-v1beta1-rbac-authorization-k8s-io","watch-list-rolebinding-v1beta1-rbac-authorization-k8s-io","watch-rolebinding-v1beta1-rbac-authorization-k8s-io","list-all-namespaces-rolebinding-v1beta1-rbac-authorization-k8s-io","list-rolebinding-v1beta1-rbac-authorization-k8s-io","read-rolebinding-v1beta1-rbac-authorization-k8s-io","-strong-read-operations-rolebinding-v1beta1-rbac-authorization-k8s-io-strong-","delete-collection-rolebinding-v1beta1-rbac-authorization-k8s-io","delete-rolebinding-v1beta1-rbac-authorization-k8s-io","replace-rolebinding-v1beta1-rbac-authorization-k8s-io","patch-rolebinding-v1beta1-rbac-authorization-k8s-io","create-rolebinding-v1beta1-rbac-authorization-k8s-io","-strong-write-operations-rolebinding-v1beta1-rbac-authorization-k8s-io-strong-","rolebinding-v1beta1-rbac-authorization-k8s-io","watch-list-all-namespaces-role-v1alpha1-rbac-authorization-k8s-io","watch-list-role-v1alpha1-rbac-authorization-k8s-io","watch-role-v1alpha1-rbac-authorization-k8s-io","list-all-namespaces-role-v1alpha1-rbac-authorization-k8s-io","list-role-v1alpha1-rbac-authorization-k8s-io","read-role-v1alpha1-rbac-authorization-k8s-io","-strong-read-operations-role-v1alpha1-rbac-authorization-k8s-io-strong-","delete-collection-role-v1alpha1-rbac-authorization-k8s-io","delete-role-v1alpha1-rbac-authorization-k8s-io","replace-role-v1alpha1-rbac-authorization-k8s-io","patch-role-v1alpha1-rbac-authorization-k8s-io","create-role-v1alpha1-rbac-authorization-k8s-io","-strong-write-operations-role-v1alpha1-rbac-authorization-k8s-io-strong-","role-v1alpha1-rbac-authorization-k8s-io","watch-list-all-namespaces-role-v1beta1-rbac-authorization-k8s-io","watch-list-role-v1beta1-rbac-authorization-k8s-io","watch-role-v1beta1-rbac-authorization-k8s-io","list-all-namespaces-role-v1beta1-rbac-authorization-k8s-io","list-role-v1beta1-rbac-authorization-k8s-io","read-role-v1beta1-rbac-authorization-k8s-io","-strong-read-operations-role-v1beta1-rbac-authorization-k8s-io-strong-","delete-collection-role-v1beta1-rbac-authorization-k8s-io","delete-role-v1beta1-rbac-authorization-k8s-io","replace-role-v1beta1-rbac-authorization-k8s-io","patch-role-v1beta1-rbac-authorization-k8s-io","create-role-v1beta1-rbac-authorization-k8s-io","-strong-write-operations-role-v1beta1-rbac-authorization-k8s-io-strong-","role-v1beta1-rbac-authorization-k8s-io","resourcerule-v1beta1-authorization-k8s-io","resourcemetricstatus-v2beta1-autoscaling","resourcemetricsource-v2beta1-autoscaling","resourceattributes-v1beta1-authorization-k8s-io","replicasetcondition-v1beta1-extensions","replicasetcondition-v1beta2-apps","patch-scale-replicaset-v1beta1-extensions","replace-scale-replicaset-v1beta1-extensions","read-scale-replicaset-v1beta1-extensions","-strong-misc-operations-replicaset-v1beta1-extensions-strong-","replace-status-replicaset-v1beta1-extensions","read-status-replicaset-v1beta1-extensions","patch-status-replicaset-v1beta1-extensions","-strong-status-operations-replicaset-v1beta1-extensions-strong-","watch-list-all-namespaces-replicaset-v1beta1-extensions","watch-list-replicaset-v1beta1-extensions","watch-replicaset-v1beta1-extensions","list-all-namespaces-replicaset-v1beta1-extensions","list-replicaset-v1beta1-extensions","read-replicaset-v1beta1-extensions","-strong-read-operations-replicaset-v1beta1-extensions-strong-","delete-collection-replicaset-v1beta1-extensions","delete-replicaset-v1beta1-extensions","replace-replicaset-v1beta1-extensions","patch-replicaset-v1beta1-extensions","create-replicaset-v1beta1-extensions","-strong-write-operations-replicaset-v1beta1-extensions-strong-","replicaset-v1beta1-extensions","patch-scale-replicaset-v1beta2-apps","replace-scale-replicaset-v1beta2-apps","read-scale-replicaset-v1beta2-apps","-strong-misc-operations-replicaset-v1beta2-apps-strong-","replace-status-replicaset-v1beta2-apps","read-status-replicaset-v1beta2-apps","patch-status-replicaset-v1beta2-apps","-strong-status-operations-replicaset-v1beta2-apps-strong-","watch-list-all-namespaces-replicaset-v1beta2-apps","watch-list-replicaset-v1beta2-apps","watch-replicaset-v1beta2-apps","list-all-namespaces-replicaset-v1beta2-apps","list-replicaset-v1beta2-apps","read-replicaset-v1beta2-apps","-strong-read-operations-replicaset-v1beta2-apps-strong-","delete-collection-replicaset-v1beta2-apps","delete-replicaset-v1beta2-apps","replace-replicaset-v1beta2-apps","patch-replicaset-v1beta2-apps","create-replicaset-v1beta2-apps","-strong-write-operations-replicaset-v1beta2-apps-strong-","replicaset-v1beta2-apps","watch-list-priorityclass-v1alpha1-scheduling-k8s-io","watch-priorityclass-v1alpha1-scheduling-k8s-io","list-priorityclass-v1alpha1-scheduling-k8s-io","read-priorityclass-v1alpha1-scheduling-k8s-io","-strong-read-operations-priorityclass-v1alpha1-scheduling-k8s-io-strong-","delete-collection-priorityclass-v1alpha1-scheduling-k8s-io","delete-priorityclass-v1alpha1-scheduling-k8s-io","replace-priorityclass-v1alpha1-scheduling-k8s-io","patch-priorityclass-v1alpha1-scheduling-k8s-io","create-priorityclass-v1alpha1-scheduling-k8s-io","-strong-write-operations-priorityclass-v1alpha1-scheduling-k8s-io-strong-","priorityclass-v1alpha1-scheduling-k8s-io","watch-list-priorityclass-v1beta1-scheduling-k8s-io","watch-priorityclass-v1beta1-scheduling-k8s-io","list-priorityclass-v1beta1-scheduling-k8s-io","read-priorityclass-v1beta1-scheduling-k8s-io","-strong-read-operations-priorityclass-v1beta1-scheduling-k8s-io-strong-","delete-collection-priorityclass-v1beta1-scheduling-k8s-io","delete-priorityclass-v1beta1-scheduling-k8s-io","replace-priorityclass-v1beta1-scheduling-k8s-io","patch-priorityclass-v1beta1-scheduling-k8s-io","create-priorityclass-v1beta1-scheduling-k8s-io","-strong-write-operations-priorityclass-v1beta1-scheduling-k8s-io-strong-","priorityclass-v1beta1-scheduling-k8s-io","policyrule-v1alpha1-rbac-authorization-k8s-io","policyrule-v1beta1-rbac-authorization-k8s-io","podsmetricstatus-v2beta1-autoscaling","podsmetricsource-v2beta1-autoscaling","watch-list-podsecuritypolicy-v1beta1-extensions","watch-podsecuritypolicy-v1beta1-extensions","list-podsecuritypolicy-v1beta1-extensions","read-podsecuritypolicy-v1beta1-extensions","-strong-read-operations-podsecuritypolicy-v1beta1-extensions-strong-","delete-collection-podsecuritypolicy-v1beta1-extensions","delete-podsecuritypolicy-v1beta1-extensions","replace-podsecuritypolicy-v1beta1-extensions","patch-podsecuritypolicy-v1beta1-extensions","create-podsecuritypolicy-v1beta1-extensions","-strong-write-operations-podsecuritypolicy-v1beta1-extensions-strong-","podsecuritypolicy-v1beta1-extensions","overhead-v1alpha1-node-k8s-io","objectmetricstatus-v2beta1-autoscaling","objectmetricsource-v2beta1-autoscaling","nonresourcerule-v1beta1-authorization-k8s-io","nonresourceattributes-v1beta1-authorization-k8s-io","networkpolicyport-v1beta1-extensions","networkpolicypeer-v1beta1-extensions","networkpolicyingressrule-v1beta1-extensions","networkpolicyegressrule-v1beta1-extensions","watch-list-all-namespaces-networkpolicy-v1beta1-extensions","watch-list-networkpolicy-v1beta1-extensions","watch-networkpolicy-v1beta1-extensions","list-all-namespaces-networkpolicy-v1beta1-extensions","list-networkpolicy-v1beta1-extensions","read-networkpolicy-v1beta1-extensions","-strong-read-operations-networkpolicy-v1beta1-extensions-strong-","delete-collection-networkpolicy-v1beta1-extensions","delete-networkpolicy-v1beta1-extensions","replace-networkpolicy-v1beta1-extensions","patch-networkpolicy-v1beta1-extensions","create-networkpolicy-v1beta1-extensions","-strong-write-operations-networkpolicy-v1beta1-extensions-strong-","networkpolicy-v1beta1-extensions","metricstatus-v2beta1-autoscaling","metricspec-v2beta1-autoscaling","create-localsubjectaccessreview-v1beta1-authorization-k8s-io","-strong-write-operations-localsubjectaccessreview-v1beta1-authorization-k8s-io-strong-","localsubjectaccessreview-v1beta1-authorization-k8s-io","watch-list-all-namespaces-lease-v1beta1-coordination-k8s-io","watch-list-lease-v1beta1-coordination-k8s-io","watch-lease-v1beta1-coordination-k8s-io","list-all-namespaces-lease-v1beta1-coordination-k8s-io","list-lease-v1beta1-coordination-k8s-io","read-lease-v1beta1-coordination-k8s-io","-strong-read-operations-lease-v1beta1-coordination-k8s-io-strong-","delete-collection-lease-v1beta1-coordination-k8s-io","delete-lease-v1beta1-coordination-k8s-io","replace-lease-v1beta1-coordination-k8s-io","patch-lease-v1beta1-coordination-k8s-io","create-lease-v1beta1-coordination-k8s-io","-strong-write-operations-lease-v1beta1-coordination-k8s-io-strong-","lease-v1beta1-coordination-k8s-io","jobtemplatespec-v2alpha1-batch","ingresstls-v1beta1-extensions","ingressrule-v1beta1-extensions","ingressbackend-v1beta1-extensions","replace-status-ingress-v1beta1-extensions","read-status-ingress-v1beta1-extensions","patch-status-ingress-v1beta1-extensions","-strong-status-operations-ingress-v1beta1-extensions-strong-","watch-list-all-namespaces-ingress-v1beta1-extensions","watch-list-ingress-v1beta1-extensions","watch-ingress-v1beta1-extensions","list-all-namespaces-ingress-v1beta1-extensions","list-ingress-v1beta1-extensions","read-ingress-v1beta1-extensions","-strong-read-operations-ingress-v1beta1-extensions-strong-","delete-collection-ingress-v1beta1-extensions","delete-ingress-v1beta1-extensions","replace-ingress-v1beta1-extensions","patch-ingress-v1beta1-extensions","create-ingress-v1beta1-extensions","-strong-write-operations-ingress-v1beta1-extensions-strong-","ingress-v1beta1-extensions","ipblock-v1beta1-extensions","idrange-v1beta1-extensions","hostportrange-v1beta1-extensions","horizontalpodautoscalercondition-v2beta1-autoscaling","replace-status-horizontalpodautoscaler-v2beta1-autoscaling","read-status-horizontalpodautoscaler-v2beta1-autoscaling","patch-status-horizontalpodautoscaler-v2beta1-autoscaling","-strong-status-operations-horizontalpodautoscaler-v2beta1-autoscaling-strong-","watch-list-all-namespaces-horizontalpodautoscaler-v2beta1-autoscaling","watch-list-horizontalpodautoscaler-v2beta1-autoscaling","watch-horizontalpodautoscaler-v2beta1-autoscaling","list-all-namespaces-horizontalpodautoscaler-v2beta1-autoscaling","list-horizontalpodautoscaler-v2beta1-autoscaling","read-horizontalpodautoscaler-v2beta1-autoscaling","-strong-read-operations-horizontalpodautoscaler-v2beta1-autoscaling-strong-","delete-collection-horizontalpodautoscaler-v2beta1-autoscaling","delete-horizontalpodautoscaler-v2beta1-autoscaling","replace-horizontalpodautoscaler-v2beta1-autoscaling","patch-horizontalpodautoscaler-v2beta1-autoscaling","create-horizontalpodautoscaler-v2beta1-autoscaling","-strong-write-operations-horizontalpodautoscaler-v2beta1-autoscaling-strong-","horizontalpodautoscaler-v2beta1-autoscaling","replace-status-horizontalpodautoscaler-v2beta2-autoscaling","read-status-horizontalpodautoscaler-v2beta2-autoscaling","patch-status-horizontalpodautoscaler-v2beta2-autoscaling","-strong-status-operations-horizontalpodautoscaler-v2beta2-autoscaling-strong-","watch-list-all-namespaces-horizontalpodautoscaler-v2beta2-autoscaling","watch-list-horizontalpodautoscaler-v2beta2-autoscaling","watch-horizontalpodautoscaler-v2beta2-autoscaling","list-all-namespaces-horizontalpodautoscaler-v2beta2-autoscaling","list-horizontalpodautoscaler-v2beta2-autoscaling","read-horizontalpodautoscaler-v2beta2-autoscaling","-strong-read-operations-horizontalpodautoscaler-v2beta2-autoscaling-strong-","delete-collection-horizontalpodautoscaler-v2beta2-autoscaling","delete-horizontalpodautoscaler-v2beta2-autoscaling","replace-horizontalpodautoscaler-v2beta2-autoscaling","patch-horizontalpodautoscaler-v2beta2-autoscaling","create-horizontalpodautoscaler-v2beta2-autoscaling","-strong-write-operations-horizontalpodautoscaler-v2beta2-autoscaling-strong-","horizontalpodautoscaler-v2beta2-autoscaling","httpingressrulevalue-v1beta1-extensions","httpingresspath-v1beta1-extensions","fsgroupstrategyoptions-v1beta1-extensions","externalmetricstatus-v2beta1-autoscaling","externalmetricsource-v2beta1-autoscaling","eventseries-v1beta1-events-k8s-io","watch-list-all-namespaces-event-v1beta1-events-k8s-io","watch-list-event-v1beta1-events-k8s-io","watch-event-v1beta1-events-k8s-io","list-all-namespaces-event-v1beta1-events-k8s-io","list-event-v1beta1-events-k8s-io","read-event-v1beta1-events-k8s-io","-strong-read-operations-event-v1beta1-events-k8s-io-strong-","delete-collection-event-v1beta1-events-k8s-io","delete-event-v1beta1-events-k8s-io","replace-event-v1beta1-events-k8s-io","patch-event-v1beta1-events-k8s-io","create-event-v1beta1-events-k8s-io","-strong-write-operations-event-v1beta1-events-k8s-io-strong-","event-v1beta1-events-k8s-io","deploymentcondition-v1beta1-extensions","deploymentcondition-v1beta1-apps","deploymentcondition-v1beta2-apps","rollback-deployment-v1beta1-extensions","patch-scale-deployment-v1beta1-extensions","replace-scale-deployment-v1beta1-extensions","read-scale-deployment-v1beta1-extensions","-strong-misc-operations-deployment-v1beta1-extensions-strong-","replace-status-deployment-v1beta1-extensions","read-status-deployment-v1beta1-extensions","patch-status-deployment-v1beta1-extensions","-strong-status-operations-deployment-v1beta1-extensions-strong-","watch-list-all-namespaces-deployment-v1beta1-extensions","watch-list-deployment-v1beta1-extensions","watch-deployment-v1beta1-extensions","list-all-namespaces-deployment-v1beta1-extensions","list-deployment-v1beta1-extensions","read-deployment-v1beta1-extensions","-strong-read-operations-deployment-v1beta1-extensions-strong-","delete-collection-deployment-v1beta1-extensions","delete-deployment-v1beta1-extensions","replace-deployment-v1beta1-extensions","patch-deployment-v1beta1-extensions","create-deployment-v1beta1-extensions","-strong-write-operations-deployment-v1beta1-extensions-strong-","deployment-v1beta1-extensions","rollback-deployment-v1beta1-apps","patch-scale-deployment-v1beta1-apps","replace-scale-deployment-v1beta1-apps","read-scale-deployment-v1beta1-apps","-strong-misc-operations-deployment-v1beta1-apps-strong-","replace-status-deployment-v1beta1-apps","read-status-deployment-v1beta1-apps","patch-status-deployment-v1beta1-apps","-strong-status-operations-deployment-v1beta1-apps-strong-","watch-list-all-namespaces-deployment-v1beta1-apps","watch-list-deployment-v1beta1-apps","watch-deployment-v1beta1-apps","list-all-namespaces-deployment-v1beta1-apps","list-deployment-v1beta1-apps","read-deployment-v1beta1-apps","-strong-read-operations-deployment-v1beta1-apps-strong-","delete-collection-deployment-v1beta1-apps","delete-deployment-v1beta1-apps","replace-deployment-v1beta1-apps","patch-deployment-v1beta1-apps","create-deployment-v1beta1-apps","-strong-write-operations-deployment-v1beta1-apps-strong-","deployment-v1beta1-apps","patch-scale-deployment-v1beta2-apps","replace-scale-deployment-v1beta2-apps","read-scale-deployment-v1beta2-apps","-strong-misc-operations-deployment-v1beta2-apps-strong-","replace-status-deployment-v1beta2-apps","read-status-deployment-v1beta2-apps","patch-status-deployment-v1beta2-apps","-strong-status-operations-deployment-v1beta2-apps-strong-","watch-list-all-namespaces-deployment-v1beta2-apps","watch-list-deployment-v1beta2-apps","watch-deployment-v1beta2-apps","list-all-namespaces-deployment-v1beta2-apps","list-deployment-v1beta2-apps","read-deployment-v1beta2-apps","-strong-read-operations-deployment-v1beta2-apps-strong-","delete-collection-deployment-v1beta2-apps","delete-deployment-v1beta2-apps","replace-deployment-v1beta2-apps","patch-deployment-v1beta2-apps","create-deployment-v1beta2-apps","-strong-write-operations-deployment-v1beta2-apps-strong-","deployment-v1beta2-apps","daemonsetupdatestrategy-v1beta1-extensions","daemonsetupdatestrategy-v1beta2-apps","daemonsetcondition-v1beta1-extensions","daemonsetcondition-v1beta2-apps","replace-status-daemonset-v1beta1-extensions","read-status-daemonset-v1beta1-extensions","patch-status-daemonset-v1beta1-extensions","-strong-status-operations-daemonset-v1beta1-extensions-strong-","watch-list-all-namespaces-daemonset-v1beta1-extensions","watch-list-daemonset-v1beta1-extensions","watch-daemonset-v1beta1-extensions","list-all-namespaces-daemonset-v1beta1-extensions","list-daemonset-v1beta1-extensions","read-daemonset-v1beta1-extensions","-strong-read-operations-daemonset-v1beta1-extensions-strong-","delete-collection-daemonset-v1beta1-extensions","delete-daemonset-v1beta1-extensions","replace-daemonset-v1beta1-extensions","patch-daemonset-v1beta1-extensions","create-daemonset-v1beta1-extensions","-strong-write-operations-daemonset-v1beta1-extensions-strong-","daemonset-v1beta1-extensions","replace-status-daemonset-v1beta2-apps","read-status-daemonset-v1beta2-apps","patch-status-daemonset-v1beta2-apps","-strong-status-operations-daemonset-v1beta2-apps-strong-","watch-list-all-namespaces-daemonset-v1beta2-apps","watch-list-daemonset-v1beta2-apps","watch-daemonset-v1beta2-apps","list-all-namespaces-daemonset-v1beta2-apps","list-daemonset-v1beta2-apps","read-daemonset-v1beta2-apps","-strong-read-operations-daemonset-v1beta2-apps-strong-","delete-collection-daemonset-v1beta2-apps","delete-daemonset-v1beta2-apps","replace-daemonset-v1beta2-apps","patch-daemonset-v1beta2-apps","create-daemonset-v1beta2-apps","-strong-write-operations-daemonset-v1beta2-apps-strong-","daemonset-v1beta2-apps","crossversionobjectreference-v2beta1-autoscaling","crossversionobjectreference-v2beta2-autoscaling","replace-status-cronjob-v2alpha1-batch","read-status-cronjob-v2alpha1-batch","patch-status-cronjob-v2alpha1-batch","-strong-status-operations-cronjob-v2alpha1-batch-strong-","watch-list-all-namespaces-cronjob-v2alpha1-batch","watch-list-cronjob-v2alpha1-batch","watch-cronjob-v2alpha1-batch","list-all-namespaces-cronjob-v2alpha1-batch","list-cronjob-v2alpha1-batch","read-cronjob-v2alpha1-batch","-strong-read-operations-cronjob-v2alpha1-batch-strong-","delete-collection-cronjob-v2alpha1-batch","delete-cronjob-v2alpha1-batch","replace-cronjob-v2alpha1-batch","patch-cronjob-v2alpha1-batch","create-cronjob-v2alpha1-batch","-strong-write-operations-cronjob-v2alpha1-batch-strong-","cronjob-v2alpha1-batch","watch-list-all-namespaces-controllerrevision-v1beta1-apps","watch-list-controllerrevision-v1beta1-apps","watch-controllerrevision-v1beta1-apps","list-all-namespaces-controllerrevision-v1beta1-apps","list-controllerrevision-v1beta1-apps","read-controllerrevision-v1beta1-apps","-strong-read-operations-controllerrevision-v1beta1-apps-strong-","delete-collection-controllerrevision-v1beta1-apps","delete-controllerrevision-v1beta1-apps","replace-controllerrevision-v1beta1-apps","patch-controllerrevision-v1beta1-apps","create-controllerrevision-v1beta1-apps","-strong-write-operations-controllerrevision-v1beta1-apps-strong-","controllerrevision-v1beta1-apps","watch-list-all-namespaces-controllerrevision-v1beta2-apps","watch-list-controllerrevision-v1beta2-apps","watch-controllerrevision-v1beta2-apps","list-all-namespaces-controllerrevision-v1beta2-apps","list-controllerrevision-v1beta2-apps","read-controllerrevision-v1beta2-apps","-strong-read-operations-controllerrevision-v1beta2-apps-strong-","delete-collection-controllerrevision-v1beta2-apps","delete-controllerrevision-v1beta2-apps","replace-controllerrevision-v1beta2-apps","patch-controllerrevision-v1beta2-apps","create-controllerrevision-v1beta2-apps","-strong-write-operations-controllerrevision-v1beta2-apps-strong-","controllerrevision-v1beta2-apps","watch-list-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","watch-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","list-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","read-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","-strong-read-operations-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","delete-collection-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","delete-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","replace-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","patch-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","create-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","-strong-write-operations-clusterrolebinding-v1alpha1-rbac-authorization-k8s-io-strong-","clusterrolebinding-v1alpha1-rbac-authorization-k8s-io","watch-list-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","watch-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","list-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","read-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","-strong-read-operations-clusterrolebinding-v1beta1-rbac-authorization-k8s-io-strong-","delete-collection-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","delete-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","replace-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","patch-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","create-clusterrolebinding-v1beta1-rbac-authorization-k8s-io","-strong-write-operations-clusterrolebinding-v1beta1-rbac-authorization-k8s-io-strong-","clusterrolebinding-v1beta1-rbac-authorization-k8s-io","watch-list-clusterrole-v1alpha1-rbac-authorization-k8s-io","watch-clusterrole-v1alpha1-rbac-authorization-k8s-io","list-clusterrole-v1alpha1-rbac-authorization-k8s-io","read-clusterrole-v1alpha1-rbac-authorization-k8s-io","-strong-read-operations-clusterrole-v1alpha1-rbac-authorization-k8s-io-strong-","delete-collection-clusterrole-v1alpha1-rbac-authorization-k8s-io","delete-clusterrole-v1alpha1-rbac-authorization-k8s-io","replace-clusterrole-v1alpha1-rbac-authorization-k8s-io","patch-clusterrole-v1alpha1-rbac-authorization-k8s-io","create-clusterrole-v1alpha1-rbac-authorization-k8s-io","-strong-write-operations-clusterrole-v1alpha1-rbac-authorization-k8s-io-strong-","clusterrole-v1alpha1-rbac-authorization-k8s-io","watch-list-clusterrole-v1beta1-rbac-authorization-k8s-io","watch-clusterrole-v1beta1-rbac-authorization-k8s-io","list-clusterrole-v1beta1-rbac-authorization-k8s-io","read-clusterrole-v1beta1-rbac-authorization-k8s-io","-strong-read-operations-clusterrole-v1beta1-rbac-authorization-k8s-io-strong-","delete-collection-clusterrole-v1beta1-rbac-authorization-k8s-io","delete-clusterrole-v1beta1-rbac-authorization-k8s-io","replace-clusterrole-v1beta1-rbac-authorization-k8s-io","patch-clusterrole-v1beta1-rbac-authorization-k8s-io","create-clusterrole-v1beta1-rbac-authorization-k8s-io","-strong-write-operations-clusterrole-v1beta1-rbac-authorization-k8s-io-strong-","clusterrole-v1beta1-rbac-authorization-k8s-io","allowedhostpath-v1beta1-extensions","allowedflexvolume-v1beta1-extensions","allowedcsidriver-v1beta1-extensions","aggregationrule-v1alpha1-rbac-authorization-k8s-io","aggregationrule-v1beta1-rbac-authorization-k8s-io","apiservicecondition-v1beta1-apiregistration-k8s-io","replace-status-apiservice-v1beta1-apiregistration-k8s-io","read-status-apiservice-v1beta1-apiregistration-k8s-io","patch-status-apiservice-v1beta1-apiregistration-k8s-io","-strong-status-operations-apiservice-v1beta1-apiregistration-k8s-io-strong-","watch-list-apiservice-v1beta1-apiregistration-k8s-io","watch-apiservice-v1beta1-apiregistration-k8s-io","list-apiservice-v1beta1-apiregistration-k8s-io","read-apiservice-v1beta1-apiregistration-k8s-io","-strong-read-operations-apiservice-v1beta1-apiregistration-k8s-io-strong-","delete-collection-apiservice-v1beta1-apiregistration-k8s-io","delete-apiservice-v1beta1-apiregistration-k8s-io","replace-apiservice-v1beta1-apiregistration-k8s-io","patch-apiservice-v1beta1-apiregistration-k8s-io","create-apiservice-v1beta1-apiregistration-k8s-io","-strong-write-operations-apiservice-v1beta1-apiregistration-k8s-io-strong-","apiservice-v1beta1-apiregistration-k8s-io","-strong-old-api-versions-strong-","windowssecuritycontextoptions-v1-core","weightedpodaffinityterm-v1-core","webhookthrottleconfig-v1alpha1-auditregistration-k8s-io","webhookclientconfig-v1beta1-admissionregistration-k8s-io","webhook-v1alpha1-auditregistration-k8s-io","watchevent-v1-meta","vspherevirtualdiskvolumesource-v1-core","volumeprojection-v1-core","volumenodeaffinity-v1-core","volumemount-v1-core","volumeerror-v1-storage-k8s-io","volumedevice-v1-core","volumeattachmentsource-v1-storage-k8s-io","validatingwebhook-v1beta1-admissionregistration-k8s-io","userinfo-v1-authentication-k8s-io","typedlocalobjectreference-v1-core","topologyselectorterm-v1-core","topologyselectorlabelrequirement-v1-core","toleration-v1-core","time-v1-meta","taint-v1-core","tcpsocketaction-v1-core","sysctl-v1-core","supplementalgroupsstrategyoptions-v1beta1-policy","subjectrulesreviewstatus-v1-authorization-k8s-io","subject-v1-rbac-authorization-k8s-io","storageosvolumesource-v1-core","storageospersistentvolumesource-v1-core","statusdetails-v1-meta","statuscause-v1-meta","status-v1-meta","statefulsetupdatestrategy-v1-apps","statefulsetcondition-v1-apps","sessionaffinityconfig-v1-core","servicereference-v1beta1-admissionregistration-k8s-io","serviceport-v1-core","serviceaccounttokenprojection-v1-core","serveraddressbyclientcidr-v1-meta","securitycontext-v1-core","secretvolumesource-v1-core","secretreference-v1-core","secretprojection-v1-core","secretkeyselector-v1-core","secretenvsource-v1-core","scopedresourceselectorrequirement-v1-core","scopeselector-v1-core","scaleiovolumesource-v1-core","scaleiopersistentvolumesource-v1-core","scale-v1beta2-apps","selinuxstrategyoptions-v1beta1-policy","selinuxoptions-v1-core","runtimeclassstrategyoptions-v1beta1-policy","runasuserstrategyoptions-v1beta1-policy","runasgroupstrategyoptions-v1beta1-policy","rulewithoperations-v1beta1-admissionregistration-k8s-io","rollingupdatestatefulsetstrategy-v1-apps","rollbackconfig-v1beta1-apps","roleref-v1-rbac-authorization-k8s-io","resourcerule-v1-authorization-k8s-io","resourcerequirements-v1-core","resourcemetricstatus-v2beta2-autoscaling","resourcemetricsource-v2beta2-autoscaling","resourcefieldselector-v1-core","resourceattributes-v1-authorization-k8s-io","replicationcontrollercondition-v1-core","replicasetcondition-v1-apps","rbdvolumesource-v1-core","rbdpersistentvolumesource-v1-core","quobytevolumesource-v1-core","quantity-resource-core","projectedvolumesource-v1-core","probe-v1-core","preferredschedulingterm-v1-core","preconditions-v1-meta","portworxvolumesource-v1-core","policyrule-v1-rbac-authorization-k8s-io","policy-v1alpha1-auditregistration-k8s-io","podsmetricstatus-v2beta2-autoscaling","podsmetricsource-v2beta2-autoscaling","podsecuritycontext-v1-core","podreadinessgate-v1-core","poddnsconfigoption-v1-core","poddnsconfig-v1-core","podcondition-v1-core","podantiaffinity-v1-core","podaffinityterm-v1-core","podaffinity-v1-core","photonpersistentdiskvolumesource-v1-core","persistentvolumeclaimvolumesource-v1-core","persistentvolumeclaimcondition-v1-core","patch-v1-meta","ownerreference-v1-meta","overhead-v1beta1-node-k8s-io","objectreference-v1-core","objectmetricstatus-v2beta2-autoscaling","objectmetricsource-v2beta2-autoscaling","objectmeta-v1-meta","objectfieldselector-v1-core","nonresourcerule-v1-authorization-k8s-io","nonresourceattributes-v1-authorization-k8s-io","nodesysteminfo-v1-core","nodeselectorterm-v1-core","nodeselectorrequirement-v1-core","nodeselector-v1-core","nodedaemonendpoints-v1-core","nodeconfigstatus-v1-core","nodeconfigsource-v1-core","nodecondition-v1-core","nodeaffinity-v1-core","nodeaddress-v1-core","networkpolicyport-v1-networking-k8s-io","networkpolicypeer-v1-networking-k8s-io","networkpolicyingressrule-v1-networking-k8s-io","networkpolicyegressrule-v1-networking-k8s-io","nfsvolumesource-v1-core","mutatingwebhook-v1beta1-admissionregistration-k8s-io","microtime-v1-meta","metricvaluestatus-v2beta2-autoscaling","metrictarget-v2beta2-autoscaling","metricstatus-v2beta2-autoscaling","metricspec-v2beta2-autoscaling","metricidentifier-v2beta2-autoscaling","managedfieldsentry-v1-meta","localvolumesource-v1-core","localobjectreference-v1-core","loadbalancerstatus-v1-core","loadbalanceringress-v1-core","listmeta-v1-meta","limitrangeitem-v1-core","lifecycle-v1-core","labelselectorrequirement-v1-meta","labelselector-v1-meta","keytopath-v1-core","jobtemplatespec-v1beta1-batch","jobcondition-v1-batch","jsonschemapropsorbool-v1beta1-apiextensions-k8s-io","jsonschemapropsorarray-v1beta1-apiextensions-k8s-io","jsonschemaprops-v1beta1-apiextensions-k8s-io","json-v1beta1-apiextensions-k8s-io","initializers-v1-meta","initializer-v1-meta","ingresstls-v1beta1-networking-k8s-io","ingressrule-v1beta1-networking-k8s-io","ingressbackend-v1beta1-networking-k8s-io","iscsivolumesource-v1-core","iscsipersistentvolumesource-v1-core","ipblock-v1-networking-k8s-io","idrange-v1beta1-policy","hostportrange-v1beta1-policy","hostpathvolumesource-v1-core","hostalias-v1-core","horizontalpodautoscalercondition-v2beta2-autoscaling","handler-v1-core","httpingressrulevalue-v1beta1-networking-k8s-io","httpingresspath-v1beta1-networking-k8s-io","httpheader-v1-core","httpgetaction-v1-core","groupversionfordiscovery-v1-meta","glusterfsvolumesource-v1-core","glusterfspersistentvolumesource-v1-core","gitrepovolumesource-v1-core","gcepersistentdiskvolumesource-v1-core","flockervolumesource-v1-core","flexvolumesource-v1-core","flexpersistentvolumesource-v1-core","fields-v1-meta","fsgroupstrategyoptions-v1beta1-policy","fcvolumesource-v1-core","externalmetricstatus-v2beta2-autoscaling","externalmetricsource-v2beta2-autoscaling","externaldocumentation-v1beta1-apiextensions-k8s-io","execaction-v1-core","eviction-v1beta1-policy","eventsource-v1-core","eventseries-v1-core","envvarsource-v1-core","envvar-v1-core","envfromsource-v1-core","endpointsubset-v1-core","endpointport-v1-core","endpointaddress-v1-core","emptydirvolumesource-v1-core","downwardapivolumesource-v1-core","downwardapivolumefile-v1-core","downwardapiprojection-v1-core","deploymentcondition-v1-apps","deleteoptions-v1-meta","daemonsetupdatestrategy-v1-apps","daemonsetcondition-v1-apps","daemonendpoint-v1-core","customresourcevalidation-v1beta1-apiextensions-k8s-io","customresourcesubresources-v1beta1-apiextensions-k8s-io","customresourcesubresourcestatus-v1beta1-apiextensions-k8s-io","customresourcesubresourcescale-v1beta1-apiextensions-k8s-io","customresourcedefinitionversion-v1beta1-apiextensions-k8s-io","customresourcedefinitionnames-v1beta1-apiextensions-k8s-io","customresourcedefinitioncondition-v1beta1-apiextensions-k8s-io","customresourceconversion-v1beta1-apiextensions-k8s-io","customresourcecolumndefinition-v1beta1-apiextensions-k8s-io","crossversionobjectreference-v1-autoscaling","containerstatewaiting-v1-core","containerstateterminated-v1-core","containerstaterunning-v1-core","containerstate-v1-core","containerport-v1-core","containerimage-v1-core","configmapvolumesource-v1-core","configmapprojection-v1-core","configmapnodeconfigsource-v1-core","configmapkeyselector-v1-core","configmapenvsource-v1-core","componentcondition-v1-core","clientipconfig-v1-core","cindervolumesource-v1-core","cinderpersistentvolumesource-v1-core","certificatesigningrequestcondition-v1beta1-certificates-k8s-io","cephfsvolumesource-v1-core","cephfspersistentvolumesource-v1-core","capabilities-v1-core","csivolumesource-v1-core","csipersistentvolumesource-v1-core","csinodedriver-v1beta1-storage-k8s-io","azurefilevolumesource-v1-core","azurefilepersistentvolumesource-v1-core","azurediskvolumesource-v1-core","attachedvolume-v1-core","allowedhostpath-v1beta1-policy","allowedflexvolume-v1beta1-policy","allowedcsidriver-v1beta1-policy","aggregationrule-v1-rbac-authorization-k8s-io","affinity-v1-core","awselasticblockstorevolumesource-v1-core","apiversions-v1-meta","apiservicecondition-v1-apiregistration-k8s-io","apiresource-v1-meta","apigroup-v1-meta","-strong-definitions-strong-","watch-list-all-namespaces-networkpolicy-v1-networking-k8s-io","watch-list-networkpolicy-v1-networking-k8s-io","watch-networkpolicy-v1-networking-k8s-io","list-all-namespaces-networkpolicy-v1-networking-k8s-io","list-networkpolicy-v1-networking-k8s-io","read-networkpolicy-v1-networking-k8s-io","-strong-read-operations-networkpolicy-v1-networking-k8s-io-strong-","delete-collection-networkpolicy-v1-networking-k8s-io","delete-networkpolicy-v1-networking-k8s-io","replace-networkpolicy-v1-networking-k8s-io","patch-networkpolicy-v1-networking-k8s-io","create-networkpolicy-v1-networking-k8s-io","-strong-write-operations-networkpolicy-v1-networking-k8s-io-strong-","networkpolicy-v1-networking-k8s-io","create-tokenreview-v1-authentication-k8s-io","-strong-write-operations-tokenreview-v1-authentication-k8s-io-strong-","tokenreview-v1-authentication-k8s-io","create-subjectaccessreview-v1-authorization-k8s-io","-strong-write-operations-subjectaccessreview-v1-authorization-k8s-io-strong-","subjectaccessreview-v1-authorization-k8s-io","watch-list-all-namespaces-serviceaccount-v1-core","watch-list-serviceaccount-v1-core","watch-serviceaccount-v1-core","list-all-namespaces-serviceaccount-v1-core","list-serviceaccount-v1-core","read-serviceaccount-v1-core","-strong-read-operations-serviceaccount-v1-core-strong-","delete-collection-serviceaccount-v1-core","delete-serviceaccount-v1-core","replace-serviceaccount-v1-core","patch-serviceaccount-v1-core","create-serviceaccount-v1-core","-strong-write-operations-serviceaccount-v1-core-strong-","serviceaccount-v1-core","create-selfsubjectrulesreview-v1-authorization-k8s-io","-strong-write-operations-selfsubjectrulesreview-v1-authorization-k8s-io-strong-","selfsubjectrulesreview-v1-authorization-k8s-io","create-selfsubjectaccessreview-v1-authorization-k8s-io","-strong-write-operations-selfsubjectaccessreview-v1-authorization-k8s-io-strong-","selfsubjectaccessreview-v1-authorization-k8s-io","watch-list-runtimeclass-v1beta1-node-k8s-io","watch-runtimeclass-v1beta1-node-k8s-io","list-runtimeclass-v1beta1-node-k8s-io","read-runtimeclass-v1beta1-node-k8s-io","-strong-read-operations-runtimeclass-v1beta1-node-k8s-io-strong-","delete-collection-runtimeclass-v1beta1-node-k8s-io","delete-runtimeclass-v1beta1-node-k8s-io","replace-runtimeclass-v1beta1-node-k8s-io","patch-runtimeclass-v1beta1-node-k8s-io","create-runtimeclass-v1beta1-node-k8s-io","-strong-write-operations-runtimeclass-v1beta1-node-k8s-io-strong-","runtimeclass-v1beta1-node-k8s-io","watch-list-all-namespaces-rolebinding-v1-rbac-authorization-k8s-io","watch-list-rolebinding-v1-rbac-authorization-k8s-io","watch-rolebinding-v1-rbac-authorization-k8s-io","list-all-namespaces-rolebinding-v1-rbac-authorization-k8s-io","list-rolebinding-v1-rbac-authorization-k8s-io","read-rolebinding-v1-rbac-authorization-k8s-io","-strong-read-operations-rolebinding-v1-rbac-authorization-k8s-io-strong-","delete-collection-rolebinding-v1-rbac-authorization-k8s-io","delete-rolebinding-v1-rbac-authorization-k8s-io","replace-rolebinding-v1-rbac-authorization-k8s-io","patch-rolebinding-v1-rbac-authorization-k8s-io","create-rolebinding-v1-rbac-authorization-k8s-io","-strong-write-operations-rolebinding-v1-rbac-authorization-k8s-io-strong-","rolebinding-v1-rbac-authorization-k8s-io","watch-list-all-namespaces-role-v1-rbac-authorization-k8s-io","watch-list-role-v1-rbac-authorization-k8s-io","watch-role-v1-rbac-authorization-k8s-io","list-all-namespaces-role-v1-rbac-authorization-k8s-io","list-role-v1-rbac-authorization-k8s-io","read-role-v1-rbac-authorization-k8s-io","-strong-read-operations-role-v1-rbac-authorization-k8s-io-strong-","delete-collection-role-v1-rbac-authorization-k8s-io","delete-role-v1-rbac-authorization-k8s-io","replace-role-v1-rbac-authorization-k8s-io","patch-role-v1-rbac-authorization-k8s-io","create-role-v1-rbac-authorization-k8s-io","-strong-write-operations-role-v1-rbac-authorization-k8s-io-strong-","role-v1-rbac-authorization-k8s-io","replace-status-resourcequota-v1-core","read-status-resourcequota-v1-core","patch-status-resourcequota-v1-core","-strong-status-operations-resourcequota-v1-core-strong-","watch-list-all-namespaces-resourcequota-v1-core","watch-list-resourcequota-v1-core","watch-resourcequota-v1-core","list-all-namespaces-resourcequota-v1-core","list-resourcequota-v1-core","read-resourcequota-v1-core","-strong-read-operations-resourcequota-v1-core-strong-","delete-collection-resourcequota-v1-core","delete-resourcequota-v1-core","replace-resourcequota-v1-core","patch-resourcequota-v1-core","create-resourcequota-v1-core","-strong-write-operations-resourcequota-v1-core-strong-","resourcequota-v1-core","replace-status-persistentvolume-v1-core","read-status-persistentvolume-v1-core","patch-status-persistentvolume-v1-core","-strong-status-operations-persistentvolume-v1-core-strong-","watch-list-persistentvolume-v1-core","watch-persistentvolume-v1-core","list-persistentvolume-v1-core","read-persistentvolume-v1-core","-strong-read-operations-persistentvolume-v1-core-strong-","delete-collection-persistentvolume-v1-core","delete-persistentvolume-v1-core","replace-persistentvolume-v1-core","patch-persistentvolume-v1-core","create-persistentvolume-v1-core","-strong-write-operations-persistentvolume-v1-core-strong-","persistentvolume-v1-core","replace-connect-proxy-path-node-v1-core","replace-connect-proxy-node-v1-core","head-connect-proxy-path-node-v1-core","head-connect-proxy-node-v1-core","get-connect-proxy-path-node-v1-core","get-connect-proxy-node-v1-core","delete-connect-proxy-path-node-v1-core","delete-connect-proxy-node-v1-core","create-connect-proxy-path-node-v1-core","create-connect-proxy-node-v1-core","-strong-proxy-operations-node-v1-core-strong-","replace-status-node-v1-core","read-status-node-v1-core","patch-status-node-v1-core","-strong-status-operations-node-v1-core-strong-","watch-list-node-v1-core","watch-node-v1-core","list-node-v1-core","read-node-v1-core","-strong-read-operations-node-v1-core-strong-","delete-collection-node-v1-core","delete-node-v1-core","replace-node-v1-core","patch-node-v1-core","create-node-v1-core","-strong-write-operations-node-v1-core-strong-","node-v1-core","replace-status-namespace-v1-core","read-status-namespace-v1-core","patch-status-namespace-v1-core","-strong-status-operations-namespace-v1-core-strong-","watch-list-namespace-v1-core","watch-namespace-v1-core","list-namespace-v1-core","read-namespace-v1-core","-strong-read-operations-namespace-v1-core-strong-","delete-namespace-v1-core","replace-namespace-v1-core","patch-namespace-v1-core","create-namespace-v1-core","-strong-write-operations-namespace-v1-core-strong-","namespace-v1-core","create-localsubjectaccessreview-v1-authorization-k8s-io","-strong-write-operations-localsubjectaccessreview-v1-authorization-k8s-io-strong-","localsubjectaccessreview-v1-authorization-k8s-io","watch-list-all-namespaces-lease-v1-coordination-k8s-io","watch-list-lease-v1-coordination-k8s-io","watch-lease-v1-coordination-k8s-io","list-all-namespaces-lease-v1-coordination-k8s-io","list-lease-v1-coordination-k8s-io","read-lease-v1-coordination-k8s-io","-strong-read-operations-lease-v1-coordination-k8s-io-strong-","delete-collection-lease-v1-coordination-k8s-io","delete-lease-v1-coordination-k8s-io","replace-lease-v1-coordination-k8s-io","patch-lease-v1-coordination-k8s-io","create-lease-v1-coordination-k8s-io","-strong-write-operations-lease-v1-coordination-k8s-io-strong-","lease-v1-coordination-k8s-io","list-componentstatus-v1-core","read-componentstatus-v1-core","-strong-read-operations-componentstatus-v1-core-strong-","componentstatus-v1-core","watch-list-clusterrolebinding-v1-rbac-authorization-k8s-io","watch-clusterrolebinding-v1-rbac-authorization-k8s-io","list-clusterrolebinding-v1-rbac-authorization-k8s-io","read-clusterrolebinding-v1-rbac-authorization-k8s-io","-strong-read-operations-clusterrolebinding-v1-rbac-authorization-k8s-io-strong-","delete-collection-clusterrolebinding-v1-rbac-authorization-k8s-io","delete-clusterrolebinding-v1-rbac-authorization-k8s-io","replace-clusterrolebinding-v1-rbac-authorization-k8s-io","patch-clusterrolebinding-v1-rbac-authorization-k8s-io","create-clusterrolebinding-v1-rbac-authorization-k8s-io","-strong-write-operations-clusterrolebinding-v1-rbac-authorization-k8s-io-strong-","clusterrolebinding-v1-rbac-authorization-k8s-io","watch-list-clusterrole-v1-rbac-authorization-k8s-io","watch-clusterrole-v1-rbac-authorization-k8s-io","list-clusterrole-v1-rbac-authorization-k8s-io","read-clusterrole-v1-rbac-authorization-k8s-io","-strong-read-operations-clusterrole-v1-rbac-authorization-k8s-io-strong-","delete-collection-clusterrole-v1-rbac-authorization-k8s-io","delete-clusterrole-v1-rbac-authorization-k8s-io","replace-clusterrole-v1-rbac-authorization-k8s-io","patch-clusterrole-v1-rbac-authorization-k8s-io","create-clusterrole-v1-rbac-authorization-k8s-io","-strong-write-operations-clusterrole-v1-rbac-authorization-k8s-io-strong-","clusterrole-v1-rbac-authorization-k8s-io","replace-status-certificatesigningrequest-v1beta1-certificates-k8s-io","read-status-certificatesigningrequest-v1beta1-certificates-k8s-io","patch-status-certificatesigningrequest-v1beta1-certificates-k8s-io","-strong-status-operations-certificatesigningrequest-v1beta1-certificates-k8s-io-strong-","watch-list-certificatesigningrequest-v1beta1-certificates-k8s-io","watch-certificatesigningrequest-v1beta1-certificates-k8s-io","list-certificatesigningrequest-v1beta1-certificates-k8s-io","read-certificatesigningrequest-v1beta1-certificates-k8s-io","-strong-read-operations-certificatesigningrequest-v1beta1-certificates-k8s-io-strong-","delete-collection-certificatesigningrequest-v1beta1-certificates-k8s-io","delete-certificatesigningrequest-v1beta1-certificates-k8s-io","replace-certificatesigningrequest-v1beta1-certificates-k8s-io","patch-certificatesigningrequest-v1beta1-certificates-k8s-io","create-certificatesigningrequest-v1beta1-certificates-k8s-io","-strong-write-operations-certificatesigningrequest-v1beta1-certificates-k8s-io-strong-","certificatesigningrequest-v1beta1-certificates-k8s-io","create-binding-v1-core","-strong-write-operations-binding-v1-core-strong-","binding-v1-core","watch-list-auditsink-v1alpha1-auditregistration-k8s-io","watch-auditsink-v1alpha1-auditregistration-k8s-io","list-auditsink-v1alpha1-auditregistration-k8s-io","read-auditsink-v1alpha1-auditregistration-k8s-io","-strong-read-operations-auditsink-v1alpha1-auditregistration-k8s-io-strong-","delete-collection-auditsink-v1alpha1-auditregistration-k8s-io","delete-auditsink-v1alpha1-auditregistration-k8s-io","replace-auditsink-v1alpha1-auditregistration-k8s-io","patch-auditsink-v1alpha1-auditregistration-k8s-io","create-auditsink-v1alpha1-auditregistration-k8s-io","-strong-write-operations-auditsink-v1alpha1-auditregistration-k8s-io-strong-","auditsink-v1alpha1-auditregistration-k8s-io","replace-status-apiservice-v1-apiregistration-k8s-io","read-status-apiservice-v1-apiregistration-k8s-io","patch-status-apiservice-v1-apiregistration-k8s-io","-strong-status-operations-apiservice-v1-apiregistration-k8s-io-strong-","watch-list-apiservice-v1-apiregistration-k8s-io","watch-apiservice-v1-apiregistration-k8s-io","list-apiservice-v1-apiregistration-k8s-io","read-apiservice-v1-apiregistration-k8s-io","-strong-read-operations-apiservice-v1-apiregistration-k8s-io-strong-","delete-collection-apiservice-v1-apiregistration-k8s-io","delete-apiservice-v1-apiregistration-k8s-io","replace-apiservice-v1-apiregistration-k8s-io","patch-apiservice-v1-apiregistration-k8s-io","create-apiservice-v1-apiregistration-k8s-io","-strong-write-operations-apiservice-v1-apiregistration-k8s-io-strong-","apiservice-v1-apiregistration-k8s-io","-strong-cluster-apis-strong-","watch-list-podsecuritypolicy-v1beta1-policy","watch-podsecuritypolicy-v1beta1-policy","list-podsecuritypolicy-v1beta1-policy","read-podsecuritypolicy-v1beta1-policy","-strong-read-operations-podsecuritypolicy-v1beta1-policy-strong-","delete-collection-podsecuritypolicy-v1beta1-policy","delete-podsecuritypolicy-v1beta1-policy","replace-podsecuritypolicy-v1beta1-policy","patch-podsecuritypolicy-v1beta1-policy","create-podsecuritypolicy-v1beta1-policy","-strong-write-operations-podsecuritypolicy-v1beta1-policy-strong-","podsecuritypolicy-v1beta1-policy","watch-list-all-namespaces-podpreset-v1alpha1-settings-k8s-io","watch-list-podpreset-v1alpha1-settings-k8s-io","watch-podpreset-v1alpha1-settings-k8s-io","list-all-namespaces-podpreset-v1alpha1-settings-k8s-io","list-podpreset-v1alpha1-settings-k8s-io","read-podpreset-v1alpha1-settings-k8s-io","-strong-read-operations-podpreset-v1alpha1-settings-k8s-io-strong-","delete-collection-podpreset-v1alpha1-settings-k8s-io","delete-podpreset-v1alpha1-settings-k8s-io","replace-podpreset-v1alpha1-settings-k8s-io","patch-podpreset-v1alpha1-settings-k8s-io","create-podpreset-v1alpha1-settings-k8s-io","-strong-write-operations-podpreset-v1alpha1-settings-k8s-io-strong-","podpreset-v1alpha1-settings-k8s-io","watch-list-priorityclass-v1-scheduling-k8s-io","watch-priorityclass-v1-scheduling-k8s-io","list-priorityclass-v1-scheduling-k8s-io","read-priorityclass-v1-scheduling-k8s-io","-strong-read-operations-priorityclass-v1-scheduling-k8s-io-strong-","delete-collection-priorityclass-v1-scheduling-k8s-io","delete-priorityclass-v1-scheduling-k8s-io","replace-priorityclass-v1-scheduling-k8s-io","patch-priorityclass-v1-scheduling-k8s-io","create-priorityclass-v1-scheduling-k8s-io","-strong-write-operations-priorityclass-v1-scheduling-k8s-io-strong-","priorityclass-v1-scheduling-k8s-io","replace-status-poddisruptionbudget-v1beta1-policy","read-status-poddisruptionbudget-v1beta1-policy","patch-status-poddisruptionbudget-v1beta1-policy","-strong-status-operations-poddisruptionbudget-v1beta1-policy-strong-","watch-list-all-namespaces-poddisruptionbudget-v1beta1-policy","watch-list-poddisruptionbudget-v1beta1-policy","watch-poddisruptionbudget-v1beta1-policy","list-all-namespaces-poddisruptionbudget-v1beta1-policy","list-poddisruptionbudget-v1beta1-policy","read-poddisruptionbudget-v1beta1-policy","-strong-read-operations-poddisruptionbudget-v1beta1-policy-strong-","delete-collection-poddisruptionbudget-v1beta1-policy","delete-poddisruptionbudget-v1beta1-policy","replace-poddisruptionbudget-v1beta1-policy","patch-poddisruptionbudget-v1beta1-policy","create-poddisruptionbudget-v1beta1-policy","-strong-write-operations-poddisruptionbudget-v1beta1-policy-strong-","poddisruptionbudget-v1beta1-policy","watch-list-all-namespaces-podtemplate-v1-core","watch-list-podtemplate-v1-core","watch-podtemplate-v1-core","list-all-namespaces-podtemplate-v1-core","list-podtemplate-v1-core","read-podtemplate-v1-core","-strong-read-operations-podtemplate-v1-core-strong-","delete-collection-podtemplate-v1-core","delete-podtemplate-v1-core","replace-podtemplate-v1-core","patch-podtemplate-v1-core","create-podtemplate-v1-core","-strong-write-operations-podtemplate-v1-core-strong-","podtemplate-v1-core","watch-list-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","watch-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","list-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","read-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","-strong-read-operations-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","delete-collection-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","delete-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","replace-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","patch-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","create-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","-strong-write-operations-validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","validatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","watch-list-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","watch-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","list-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","read-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","-strong-read-operations-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","delete-collection-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","delete-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","replace-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","patch-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","create-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","-strong-write-operations-mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io-strong-","mutatingwebhookconfiguration-v1beta1-admissionregistration-k8s-io","replace-status-horizontalpodautoscaler-v1-autoscaling","read-status-horizontalpodautoscaler-v1-autoscaling","patch-status-horizontalpodautoscaler-v1-autoscaling","-strong-status-operations-horizontalpodautoscaler-v1-autoscaling-strong-","watch-list-all-namespaces-horizontalpodautoscaler-v1-autoscaling","watch-list-horizontalpodautoscaler-v1-autoscaling","watch-horizontalpodautoscaler-v1-autoscaling","list-all-namespaces-horizontalpodautoscaler-v1-autoscaling","list-horizontalpodautoscaler-v1-autoscaling","read-horizontalpodautoscaler-v1-autoscaling","-strong-read-operations-horizontalpodautoscaler-v1-autoscaling-strong-","delete-collection-horizontalpodautoscaler-v1-autoscaling","delete-horizontalpodautoscaler-v1-autoscaling","replace-horizontalpodautoscaler-v1-autoscaling","patch-horizontalpodautoscaler-v1-autoscaling","create-horizontalpodautoscaler-v1-autoscaling","-strong-write-operations-horizontalpodautoscaler-v1-autoscaling-strong-","horizontalpodautoscaler-v1-autoscaling","watch-list-all-namespaces-limitrange-v1-core","watch-list-limitrange-v1-core","watch-limitrange-v1-core","list-all-namespaces-limitrange-v1-core","list-limitrange-v1-core","read-limitrange-v1-core","-strong-read-operations-limitrange-v1-core-strong-","delete-collection-limitrange-v1-core","delete-limitrange-v1-core","replace-limitrange-v1-core","patch-limitrange-v1-core","create-limitrange-v1-core","-strong-write-operations-limitrange-v1-core-strong-","limitrange-v1-core","watch-list-all-namespaces-event-v1-core","watch-list-event-v1-core","watch-event-v1-core","list-all-namespaces-event-v1-core","list-event-v1-core","read-event-v1-core","-strong-read-operations-event-v1-core-strong-","delete-collection-event-v1-core","delete-event-v1-core","replace-event-v1-core","patch-event-v1-core","create-event-v1-core","-strong-write-operations-event-v1-core-strong-","event-v1-core","replace-status-customresourcedefinition-v1beta1-apiextensions-k8s-io","read-status-customresourcedefinition-v1beta1-apiextensions-k8s-io","patch-status-customresourcedefinition-v1beta1-apiextensions-k8s-io","-strong-status-operations-customresourcedefinition-v1beta1-apiextensions-k8s-io-strong-","watch-list-customresourcedefinition-v1beta1-apiextensions-k8s-io","watch-customresourcedefinition-v1beta1-apiextensions-k8s-io","list-customresourcedefinition-v1beta1-apiextensions-k8s-io","read-customresourcedefinition-v1beta1-apiextensions-k8s-io","-strong-read-operations-customresourcedefinition-v1beta1-apiextensions-k8s-io-strong-","delete-collection-customresourcedefinition-v1beta1-apiextensions-k8s-io","delete-customresourcedefinition-v1beta1-apiextensions-k8s-io","replace-customresourcedefinition-v1beta1-apiextensions-k8s-io","patch-customresourcedefinition-v1beta1-apiextensions-k8s-io","create-customresourcedefinition-v1beta1-apiextensions-k8s-io","-strong-write-operations-customresourcedefinition-v1beta1-apiextensions-k8s-io-strong-","customresourcedefinition-v1beta1-apiextensions-k8s-io","watch-list-all-namespaces-controllerrevision-v1-apps","watch-list-controllerrevision-v1-apps","watch-controllerrevision-v1-apps","list-all-namespaces-controllerrevision-v1-apps","list-controllerrevision-v1-apps","read-controllerrevision-v1-apps","-strong-read-operations-controllerrevision-v1-apps-strong-","delete-collection-controllerrevision-v1-apps","delete-controllerrevision-v1-apps","replace-controllerrevision-v1-apps","patch-controllerrevision-v1-apps","create-controllerrevision-v1-apps","-strong-write-operations-controllerrevision-v1-apps-strong-","controllerrevision-v1-apps","-strong-metadata-apis-strong-","replace-status-volumeattachment-v1-storage-k8s-io","read-status-volumeattachment-v1-storage-k8s-io","patch-status-volumeattachment-v1-storage-k8s-io","-strong-status-operations-volumeattachment-v1-storage-k8s-io-strong-","watch-list-volumeattachment-v1-storage-k8s-io","watch-volumeattachment-v1-storage-k8s-io","list-volumeattachment-v1-storage-k8s-io","read-volumeattachment-v1-storage-k8s-io","-strong-read-operations-volumeattachment-v1-storage-k8s-io-strong-","delete-collection-volumeattachment-v1-storage-k8s-io","delete-volumeattachment-v1-storage-k8s-io","replace-volumeattachment-v1-storage-k8s-io","patch-volumeattachment-v1-storage-k8s-io","create-volumeattachment-v1-storage-k8s-io","-strong-write-operations-volumeattachment-v1-storage-k8s-io-strong-","volumeattachment-v1-storage-k8s-io","volume-v1-core","watch-list-storageclass-v1-storage-k8s-io","watch-storageclass-v1-storage-k8s-io","list-storageclass-v1-storage-k8s-io","read-storageclass-v1-storage-k8s-io","-strong-read-operations-storageclass-v1-storage-k8s-io-strong-","delete-collection-storageclass-v1-storage-k8s-io","delete-storageclass-v1-storage-k8s-io","replace-storageclass-v1-storage-k8s-io","patch-storageclass-v1-storage-k8s-io","create-storageclass-v1-storage-k8s-io","-strong-write-operations-storageclass-v1-storage-k8s-io-strong-","storageclass-v1-storage-k8s-io","replace-status-persistentvolumeclaim-v1-core","read-status-persistentvolumeclaim-v1-core","patch-status-persistentvolumeclaim-v1-core","-strong-status-operations-persistentvolumeclaim-v1-core-strong-","watch-list-all-namespaces-persistentvolumeclaim-v1-core","watch-list-persistentvolumeclaim-v1-core","watch-persistentvolumeclaim-v1-core","list-all-namespaces-persistentvolumeclaim-v1-core","list-persistentvolumeclaim-v1-core","read-persistentvolumeclaim-v1-core","-strong-read-operations-persistentvolumeclaim-v1-core-strong-","delete-collection-persistentvolumeclaim-v1-core","delete-persistentvolumeclaim-v1-core","replace-persistentvolumeclaim-v1-core","patch-persistentvolumeclaim-v1-core","create-persistentvolumeclaim-v1-core","-strong-write-operations-persistentvolumeclaim-v1-core-strong-","persistentvolumeclaim-v1-core","watch-list-all-namespaces-secret-v1-core","watch-list-secret-v1-core","watch-secret-v1-core","list-all-namespaces-secret-v1-core","list-secret-v1-core","read-secret-v1-core","-strong-read-operations-secret-v1-core-strong-","delete-collection-secret-v1-core","delete-secret-v1-core","replace-secret-v1-core","patch-secret-v1-core","create-secret-v1-core","-strong-write-operations-secret-v1-core-strong-","secret-v1-core","watch-list-csinode-v1beta1-storage-k8s-io","watch-csinode-v1beta1-storage-k8s-io","list-csinode-v1beta1-storage-k8s-io","read-csinode-v1beta1-storage-k8s-io","-strong-read-operations-csinode-v1beta1-storage-k8s-io-strong-","delete-collection-csinode-v1beta1-storage-k8s-io","delete-csinode-v1beta1-storage-k8s-io","replace-csinode-v1beta1-storage-k8s-io","patch-csinode-v1beta1-storage-k8s-io","create-csinode-v1beta1-storage-k8s-io","-strong-write-operations-csinode-v1beta1-storage-k8s-io-strong-","csinode-v1beta1-storage-k8s-io","watch-list-csidriver-v1beta1-storage-k8s-io","watch-csidriver-v1beta1-storage-k8s-io","list-csidriver-v1beta1-storage-k8s-io","read-csidriver-v1beta1-storage-k8s-io","-strong-read-operations-csidriver-v1beta1-storage-k8s-io-strong-","delete-collection-csidriver-v1beta1-storage-k8s-io","delete-csidriver-v1beta1-storage-k8s-io","replace-csidriver-v1beta1-storage-k8s-io","patch-csidriver-v1beta1-storage-k8s-io","create-csidriver-v1beta1-storage-k8s-io","-strong-write-operations-csidriver-v1beta1-storage-k8s-io-strong-","csidriver-v1beta1-storage-k8s-io","watch-list-all-namespaces-configmap-v1-core","watch-list-configmap-v1-core","watch-configmap-v1-core","list-all-namespaces-configmap-v1-core","list-configmap-v1-core","read-configmap-v1-core","-strong-read-operations-configmap-v1-core-strong-","delete-collection-configmap-v1-core","delete-configmap-v1-core","replace-configmap-v1-core","patch-configmap-v1-core","create-configmap-v1-core","-strong-write-operations-configmap-v1-core-strong-","configmap-v1-core","-strong-config-and-storage-apis-strong-","replace-connect-proxy-path-service-v1-core","replace-connect-proxy-service-v1-core","head-connect-proxy-path-service-v1-core","head-connect-proxy-service-v1-core","get-connect-proxy-path-service-v1-core","get-connect-proxy-service-v1-core","delete-connect-proxy-path-service-v1-core","delete-connect-proxy-service-v1-core","create-connect-proxy-path-service-v1-core","create-connect-proxy-service-v1-core","-strong-proxy-operations-service-v1-core-strong-","replace-status-service-v1-core","read-status-service-v1-core","patch-status-service-v1-core","-strong-status-operations-service-v1-core-strong-","watch-list-all-namespaces-service-v1-core","watch-list-service-v1-core","watch-service-v1-core","list-all-namespaces-service-v1-core","list-service-v1-core","read-service-v1-core","-strong-read-operations-service-v1-core-strong-","delete-service-v1-core","replace-service-v1-core","patch-service-v1-core","create-service-v1-core","-strong-write-operations-service-v1-core-strong-","service-v1-core","replace-status-ingress-v1beta1-networking-k8s-io","read-status-ingress-v1beta1-networking-k8s-io","patch-status-ingress-v1beta1-networking-k8s-io","-strong-status-operations-ingress-v1beta1-networking-k8s-io-strong-","watch-list-all-namespaces-ingress-v1beta1-networking-k8s-io","watch-list-ingress-v1beta1-networking-k8s-io","watch-ingress-v1beta1-networking-k8s-io","list-all-namespaces-ingress-v1beta1-networking-k8s-io","list-ingress-v1beta1-networking-k8s-io","read-ingress-v1beta1-networking-k8s-io","-strong-read-operations-ingress-v1beta1-networking-k8s-io-strong-","delete-collection-ingress-v1beta1-networking-k8s-io","delete-ingress-v1beta1-networking-k8s-io","replace-ingress-v1beta1-networking-k8s-io","patch-ingress-v1beta1-networking-k8s-io","create-ingress-v1beta1-networking-k8s-io","-strong-write-operations-ingress-v1beta1-networking-k8s-io-strong-","ingress-v1beta1-networking-k8s-io","watch-list-all-namespaces-endpoints-v1-core","watch-list-endpoints-v1-core","watch-endpoints-v1-core","list-all-namespaces-endpoints-v1-core","list-endpoints-v1-core","read-endpoints-v1-core","-strong-read-operations-endpoints-v1-core-strong-","delete-collection-endpoints-v1-core","delete-endpoints-v1-core","replace-endpoints-v1-core","patch-endpoints-v1-core","create-endpoints-v1-core","-strong-write-operations-endpoints-v1-core-strong-","endpoints-v1-core","-strong-service-apis-strong-","patch-scale-statefulset-v1-apps","replace-scale-statefulset-v1-apps","read-scale-statefulset-v1-apps","-strong-misc-operations-statefulset-v1-apps-strong-","replace-status-statefulset-v1-apps","read-status-statefulset-v1-apps","patch-status-statefulset-v1-apps","-strong-status-operations-statefulset-v1-apps-strong-","watch-list-all-namespaces-statefulset-v1-apps","watch-list-statefulset-v1-apps","watch-statefulset-v1-apps","list-all-namespaces-statefulset-v1-apps","list-statefulset-v1-apps","read-statefulset-v1-apps","-strong-read-operations-statefulset-v1-apps-strong-","delete-collection-statefulset-v1-apps","delete-statefulset-v1-apps","replace-statefulset-v1-apps","patch-statefulset-v1-apps","create-statefulset-v1-apps","-strong-write-operations-statefulset-v1-apps-strong-","statefulset-v1-apps","patch-scale-replicationcontroller-v1-core","replace-scale-replicationcontroller-v1-core","read-scale-replicationcontroller-v1-core","-strong-misc-operations-replicationcontroller-v1-core-strong-","replace-status-replicationcontroller-v1-core","read-status-replicationcontroller-v1-core","patch-status-replicationcontroller-v1-core","-strong-status-operations-replicationcontroller-v1-core-strong-","watch-list-all-namespaces-replicationcontroller-v1-core","watch-list-replicationcontroller-v1-core","watch-replicationcontroller-v1-core","list-all-namespaces-replicationcontroller-v1-core","list-replicationcontroller-v1-core","read-replicationcontroller-v1-core","-strong-read-operations-replicationcontroller-v1-core-strong-","delete-collection-replicationcontroller-v1-core","delete-replicationcontroller-v1-core","replace-replicationcontroller-v1-core","patch-replicationcontroller-v1-core","create-replicationcontroller-v1-core","-strong-write-operations-replicationcontroller-v1-core-strong-","replicationcontroller-v1-core","patch-scale-replicaset-v1-apps","replace-scale-replicaset-v1-apps","read-scale-replicaset-v1-apps","-strong-misc-operations-replicaset-v1-apps-strong-","replace-status-replicaset-v1-apps","read-status-replicaset-v1-apps","patch-status-replicaset-v1-apps","-strong-status-operations-replicaset-v1-apps-strong-","watch-list-all-namespaces-replicaset-v1-apps","watch-list-replicaset-v1-apps","watch-replicaset-v1-apps","list-all-namespaces-replicaset-v1-apps","list-replicaset-v1-apps","read-replicaset-v1-apps","-strong-read-operations-replicaset-v1-apps-strong-","delete-collection-replicaset-v1-apps","delete-replicaset-v1-apps","replace-replicaset-v1-apps","patch-replicaset-v1-apps","create-replicaset-v1-apps","-strong-write-operations-replicaset-v1-apps-strong-","replicaset-v1-apps","read-log-pod-v1-core","-strong-misc-operations-pod-v1-core-strong-","replace-connect-proxy-path-pod-v1-core","replace-connect-proxy-pod-v1-core","head-connect-proxy-path-pod-v1-core","head-connect-proxy-pod-v1-core","get-connect-proxy-path-pod-v1-core","get-connect-proxy-pod-v1-core","get-connect-portforward-pod-v1-core","delete-connect-proxy-path-pod-v1-core","delete-connect-proxy-pod-v1-core","create-connect-proxy-path-pod-v1-core","create-connect-proxy-pod-v1-core","create-connect-portforward-pod-v1-core","-strong-proxy-operations-pod-v1-core-strong-","replace-status-pod-v1-core","read-status-pod-v1-core","patch-status-pod-v1-core","-strong-status-operations-pod-v1-core-strong-","watch-list-all-namespaces-pod-v1-core","watch-list-pod-v1-core","watch-pod-v1-core","list-all-namespaces-pod-v1-core","list-pod-v1-core","read-pod-v1-core","-strong-read-operations-pod-v1-core-strong-","delete-collection-pod-v1-core","delete-pod-v1-core","replace-pod-v1-core","patch-pod-v1-core","create-eviction-pod-v1-core","create-pod-v1-core","-strong-write-operations-pod-v1-core-strong-","pod-v1-core","replace-status-job-v1-batch","read-status-job-v1-batch","patch-status-job-v1-batch","-strong-status-operations-job-v1-batch-strong-","watch-list-all-namespaces-job-v1-batch","watch-list-job-v1-batch","watch-job-v1-batch","list-all-namespaces-job-v1-batch","list-job-v1-batch","read-job-v1-batch","-strong-read-operations-job-v1-batch-strong-","delete-collection-job-v1-batch","delete-job-v1-batch","replace-job-v1-batch","patch-job-v1-batch","create-job-v1-batch","-strong-write-operations-job-v1-batch-strong-","job-v1-batch","patch-scale-deployment-v1-apps","replace-scale-deployment-v1-apps","read-scale-deployment-v1-apps","-strong-misc-operations-deployment-v1-apps-strong-","replace-status-deployment-v1-apps","read-status-deployment-v1-apps","patch-status-deployment-v1-apps","-strong-status-operations-deployment-v1-apps-strong-","watch-list-all-namespaces-deployment-v1-apps","watch-list-deployment-v1-apps","watch-deployment-v1-apps","list-all-namespaces-deployment-v1-apps","list-deployment-v1-apps","read-deployment-v1-apps","-strong-read-operations-deployment-v1-apps-strong-","delete-collection-deployment-v1-apps","delete-deployment-v1-apps","replace-deployment-v1-apps","patch-deployment-v1-apps","create-deployment-v1-apps","-strong-write-operations-deployment-v1-apps-strong-","deployment-v1-apps","replace-status-daemonset-v1-apps","read-status-daemonset-v1-apps","patch-status-daemonset-v1-apps","-strong-status-operations-daemonset-v1-apps-strong-","watch-list-all-namespaces-daemonset-v1-apps","watch-list-daemonset-v1-apps","watch-daemonset-v1-apps","list-all-namespaces-daemonset-v1-apps","list-daemonset-v1-apps","read-daemonset-v1-apps","-strong-read-operations-daemonset-v1-apps-strong-","delete-collection-daemonset-v1-apps","delete-daemonset-v1-apps","replace-daemonset-v1-apps","patch-daemonset-v1-apps","create-daemonset-v1-apps","-strong-write-operations-daemonset-v1-apps-strong-","daemonset-v1-apps","replace-status-cronjob-v1beta1-batch","read-status-cronjob-v1beta1-batch","patch-status-cronjob-v1beta1-batch","-strong-status-operations-cronjob-v1beta1-batch-strong-","watch-list-all-namespaces-cronjob-v1beta1-batch","watch-list-cronjob-v1beta1-batch","watch-cronjob-v1beta1-batch","list-all-namespaces-cronjob-v1beta1-batch","list-cronjob-v1beta1-batch","read-cronjob-v1beta1-batch","-strong-read-operations-cronjob-v1beta1-batch-strong-","delete-collection-cronjob-v1beta1-batch","delete-cronjob-v1beta1-batch","replace-cronjob-v1beta1-batch","patch-cronjob-v1beta1-batch","create-cronjob-v1beta1-batch","-strong-write-operations-cronjob-v1beta1-batch-strong-","cronjob-v1beta1-batch","container-v1-core","-strong-workloads-apis-strong-","-strong-api-overview-strong-"]};})();
\ No newline at end of file
diff --git a/static/images/blog/2019-06-24-kubeadm-ha-v115/logo.png b/static/images/blog/2019-06-24-kubeadm-ha-v115/logo.png
new file mode 100644
index 0000000000..85b9e3a9c1
Binary files /dev/null and b/static/images/blog/2019-06-24-kubeadm-ha-v115/logo.png differ
diff --git a/static/images/blog/2019-06-24-kubeadm-ha-v115/overview.png b/static/images/blog/2019-06-24-kubeadm-ha-v115/overview.png
new file mode 100644
index 0000000000..cf6b389c20
Binary files /dev/null and b/static/images/blog/2019-06-24-kubeadm-ha-v115/overview.png differ
diff --git a/static/images/blog/2019-06-24-kubeadm-ha-v115/projects.png b/static/images/blog/2019-06-24-kubeadm-ha-v115/projects.png
new file mode 100644
index 0000000000..811ecda19e
Binary files /dev/null and b/static/images/blog/2019-06-24-kubeadm-ha-v115/projects.png differ
diff --git a/static/images/blog/get-started-with-kubernetes-using-python/docker-image-ls.png b/static/images/blog/get-started-with-kubernetes-using-python/docker-image-ls.png
new file mode 100644
index 0000000000..166a5d8290
Binary files /dev/null and b/static/images/blog/get-started-with-kubernetes-using-python/docker-image-ls.png differ
diff --git a/static/images/blog/get-started-with-kubernetes-using-python/docker-settings-menu.png b/static/images/blog/get-started-with-kubernetes-using-python/docker-settings-menu.png
new file mode 100644
index 0000000000..ac45ba261b
Binary files /dev/null and b/static/images/blog/get-started-with-kubernetes-using-python/docker-settings-menu.png differ
diff --git a/static/images/blog/get-started-with-kubernetes-using-python/kubectl-get-pods.png b/static/images/blog/get-started-with-kubernetes-using-python/kubectl-get-pods.png
new file mode 100644
index 0000000000..b0e752e545
Binary files /dev/null and b/static/images/blog/get-started-with-kubernetes-using-python/kubectl-get-pods.png differ
diff --git a/static/images/blog/get-started-with-kubernetes-using-python/kubernetes-tab.png b/static/images/blog/get-started-with-kubernetes-using-python/kubernetes-tab.png
new file mode 100644
index 0000000000..a489e571e8
Binary files /dev/null and b/static/images/blog/get-started-with-kubernetes-using-python/kubernetes-tab.png differ
diff --git a/static/images/docs/contribute/netlify-pass.png b/static/images/docs/contribute/netlify-pass.png
new file mode 100644
index 0000000000..ea0ea0114b
Binary files /dev/null and b/static/images/docs/contribute/netlify-pass.png differ
diff --git a/content/en/docs/tasks/administer-cluster/nodelocaldns.jpg b/static/images/docs/nodelocaldns.jpg
similarity index 100%
rename from content/en/docs/tasks/administer-cluster/nodelocaldns.jpg
rename to static/images/docs/nodelocaldns.jpg