diff --git a/.gitmodules b/.gitmodules
index 38fde49fc9..771ed3fc6b 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,6 +1,7 @@
[submodule "themes/docsy"]
path = themes/docsy
url = https://github.com/google/docsy.git
+ branch = v0.2.0
[submodule "api-ref-generator"]
path = api-ref-generator
url = https://github.com/kubernetes-sigs/reference-docs
diff --git a/Dockerfile b/Dockerfile
index 9e9a6d65b0..a45fa4f0ac 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -27,16 +27,18 @@ RUN mkdir $HOME/src && \
FROM golang:1.16-alpine
RUN apk add --no-cache \
+ runuser \
git \
openssh-client \
rsync \
npm && \
npm install -D autoprefixer postcss-cli
-RUN mkdir -p /usr/local/src && \
- cd /usr/local/src && \
+RUN mkdir -p /var/hugo && \
addgroup -Sg 1000 hugo && \
- adduser -Sg hugo -u 1000 -h /src hugo
+ adduser -Sg hugo -u 1000 -h /var/hugo hugo && \
+ chown -R hugo: /var/hugo && \
+ runuser -u hugo -- git config --global --add safe.directory /src
COPY --from=0 /go/bin/hugo /usr/local/bin/hugo
diff --git a/Makefile b/Makefile
index 57fca6e2d1..e0569404d6 100644
--- a/Makefile
+++ b/Makefile
@@ -71,6 +71,9 @@ container-image: ## Build a container image for the preview of the website
--tag $(CONTAINER_IMAGE) \
--build-arg HUGO_VERSION=$(HUGO_VERSION)
+container-push: container-image ## Push container image for the preview of the website
+ $(CONTAINER_ENGINE) push $(CONTAINER_IMAGE)
+
container-build: module-check
$(CONTAINER_RUN) --read-only --mount type=tmpfs,destination=/tmp,tmpfs-mode=01777 $(CONTAINER_IMAGE) sh -c "npm ci && hugo --minify --environment development"
diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES
index c591f9cfc5..df9f571313 100644
--- a/OWNERS_ALIASES
+++ b/OWNERS_ALIASES
@@ -127,6 +127,7 @@ aliases:
# MasayaAoyama
- nasa9084
# oke-py
+ - ptux
sig-docs-ko-owners: # Admins for Korean content
- ClaudiaJKang
- gochist
@@ -178,6 +179,7 @@ aliases:
- tanjunchen
- tengqm
- xichengliudui
+ - ydFu
# zhangxiaoyu-zidif
sig-docs-pt-owners: # Admins for Portuguese content
- edsoncelio
@@ -248,7 +250,6 @@ aliases:
- cpanato # SIG Technical Lead
- jeremyrickard # SIG Technical Lead
- justaugustus # SIG Chair
- - LappleApple # SIG Program Manager
- puerco # SIG Technical Lead
- saschagrunert # SIG Chair
release-engineering-approvers:
diff --git a/README-ja.md b/README-ja.md
index 91e624c610..c4acd30d84 100644
--- a/README-ja.md
+++ b/README-ja.md
@@ -4,6 +4,9 @@
このリポジトリには、[KubernetesのWebサイトとドキュメント](https://kubernetes.io/)をビルドするために必要な全アセットが格納されています。貢献に興味を持っていただきありがとうございます!
+- [ドキュメントに貢献する](#contributing-to-the-docs)
+- [翻訳された`README.md`一覧](#localization-readmemds)
+
# リポジトリの使い方
Hugo(Extended version)を使用してWebサイトをローカルで実行することも、コンテナランタイムで実行することもできます。コンテナランタイムを使用することを強くお勧めします。これにより、本番Webサイトとのデプロイメントの一貫性が得られます。
@@ -56,6 +59,43 @@ make serve
これで、Hugoのサーバーが1313番ポートを使って開始します。お使いのブラウザにて http://localhost:1313 にアクセスしてください。リポジトリ内のソースファイルに変更を加えると、HugoがWebサイトの内容を更新してブラウザに反映します。
+## API reference pagesをビルドする
+
+`content/en/docs/reference/kubernetes-api`に配置されているAPIリファレンスページはを使ってSwagger仕様書からビルドされています。
+
+新しいKubernetesリリースのためにリファレンスページをアップデートするには、次の手順を実行します:
+
+1. `api-ref-generator`サブモジュールをプルする:
+
+ ```bash
+ git submodule update --init --recursive --depth 1
+ ```
+
+2. Swagger仕様書を更新する:
+
+ ```bash
+ curl 'https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json' > api-ref-assets/api/swagger.json
+ ```
+
+3. 新しいリリースの変更を反映するため、`api-ref-assets/config/`で`toc.yaml`と`fields.yaml`を適用する。
+
+4. 次に、ページをビルドする:
+
+ ```bash
+ make api-reference
+ ```
+
+ コンテナイメージからサイトを作成・サーブする事でローカルで結果をテストすることができます:
+
+ ```bash
+ make container-image
+ make container-serve
+ ```
+
+ APIリファレンスを見るために、ブラウザで を開いてください。
+
+5. 新しいコントラクトのすべての変更が設定ファイル`toc.yaml`と`fields.yaml`に反映されたら、新しく生成されたAPIリファレンスページとともにPull Requestを作成します。
+
## トラブルシューティング
### error: failed to transform resource: TOCSS: failed to transform "scss/main.scss" (text/x-scss): this feature is not available in your current Hugo version
@@ -107,7 +147,7 @@ sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
- [Slack](https://kubernetes.slack.com/messages/kubernetes-docs-ja)
- [メーリングリスト](https://groups.google.com/forum/#!forum/kubernetes-sig-docs)
-## ドキュメントに貢献する
+## ドキュメントに貢献する {#contributing-to-the-docs}
GitHubの画面右上にある**Fork**ボタンをクリックすると、お使いのGitHubアカウントに紐付いた本リポジトリのコピーが作成され、このコピーのことを*フォーク*と呼びます。フォークリポジトリの中ではお好きなように変更を加えていただいて構いません。加えた変更をこのリポジトリに追加したい任意のタイミングにて、フォークリポジトリからPull Reqeustを作成してください。
@@ -124,7 +164,15 @@ Kubernetesのドキュメントへの貢献に関する詳細については以
* [ドキュメントのスタイルガイド](https://kubernetes.io/docs/contribute/style/style-guide/)
* [Kubernetesドキュメントの翻訳方法](https://kubernetes.io/docs/contribute/localization/)
-## 翻訳された`README.md`一覧
+### New Contributor Ambassadors
+
+コントリビュートする時に何か助けが必要なら、[New Contributor Ambassadors](https://kubernetes.io/docs/contribute/advanced/#serve-as-a-new-contributor-ambassador)に聞いてみると良いでしょう。彼らはSIG Docsのapproverで、最初の数回のPull Requestを通して新しいコントリビューターを指導し助けることを責務としています。New Contributors Ambassadorsにコンタクトするには、[Kubernetes Slack](https://slack.k8s.io)が最適な場所です。現在のSIG DocsのNew Contributor Ambassadorは次の通りです:
+
+| 名前 | Slack | GitHub |
+| -------------------------- | -------------------------- | -------------------------- |
+| Arsh Sharma | @arsh | @RinkiyaKeDad |
+
+## 翻訳された`README.md`一覧 {#localization-readmemds}
| Language | Language |
|---|---|
diff --git a/README-zh.md b/README-zh.md
index 1074d60169..00a7ef1a24 100644
--- a/README-zh.md
+++ b/README-zh.md
@@ -13,7 +13,14 @@ This repository contains the assets required to build the [Kubernetes website an
我们非常高兴您想要参与贡献!
+- [为文档做贡献](#为文档做贡献)
+- [README.md 本地化](#readmemd-本地化)
+
+
@@ -46,7 +53,7 @@ Before you start, install the dependencies. Clone the repository and navigate to
-->
开始前,先安装这些依赖。克隆本仓库并进入对应目录:
-```
+```bash
git clone https://github.com/kubernetes/website.git
cd website
```
@@ -57,7 +64,7 @@ The Kubernetes website uses the [Docsy Hugo theme](https://github.com/google/doc
Kubernetes 网站使用的是 [Docsy Hugo 主题](https://github.com/google/docsy#readme)。 即使你打算在容器中运行网站,我们也强烈建议你通过运行以下命令来引入子模块和其他开发依赖项:
-```
+```bash
# pull in the Docsy submodule
git submodule update --init --recursive --depth 1
```
@@ -72,15 +79,23 @@ To build the site in a container, run the following to build the container image
要在容器中构建网站,请通过以下命令来构建容器镜像并运行:
-```
+```bash
make container-image
make container-serve
```
-启动浏览器,打开 http://localhost:1313 来查看网站。
+如果您看到错误,这可能意味着 hugo 容器没有足够的可用计算资源。
+要解决这个问题,请增加机器([MacOSX](https://docs.docker.com/docker-for-mac/#resources)
+和 [Windows](https://docs.docker.com/docker-for-windows/#resources))上
+Docker 允许的 CPU 和内存使用量。
+
+
+启动浏览器,打开 来查看网站。
当你对源文件作出修改时,Hugo 会更新网站并强制浏览器执行刷新操作。
上述命令会在端口 1313 上启动本地 Hugo 服务器。
-启动浏览器,打开 http://localhost:1313 来查看网站。
+启动浏览器,打开 来查看网站。
当你对源文件作出修改时,Hugo 会更新网站并强制浏览器执行刷新操作。
+
+## 构建 API 参考页面
+
+
+位于 `content/en/docs/reference/kubernetes-api` 的 API 参考页面是根据 Swagger 规范构建的,使用 。
+
+要更新新 Kubernetes 版本的参考页面,请执行以下步骤:
+
+
+1. 拉取 `api-ref-generator` 子模块:
+
+ ```bash
+ git submodule update --init --recursive --depth 1
+ ```
+
+
+2. 更新 Swagger 规范:
+
+ ```bash
+ curl 'https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json' > api-ref-assets/api/swagger.json
+ ```
+
+
+3. 在 `api-ref-assets/config/` 中,调整文件 `toc.yaml` 和 `fields.yaml` 以反映新版本的变化。
+
+
+4. 接下来,构建页面:
+
+ ```bash
+ make api-reference
+ ```
+
+
+ 您可以通过从容器映像创建和提供站点来在本地测试结果:
+
+ ```bash
+ make container-image
+ make container-serve
+ ```
+
+
+ 在 Web 浏览器中,打开 查看 API 参考。
+
+
+5. 当所有新的更改都反映到配置文件 `toc.yaml` 和 `fields.yaml` 中时,使用新生成的 API 参考页面创建一个 Pull Request。
+
## 故障排除
@@ -131,22 +212,28 @@ Hugo is shipped in two set of binaries for technical reasons. The current websit
If you run `make serve` on macOS and receive the following error:
-->
-### 对 macOs 上打开太多文件的故障排除
+### 对 macOS 上打开太多文件的故障排除
如果在 macOS 上运行 `make serve` 收到以下错误:
-```
+```bash
ERROR 2020/08/01 19:09:18 Error: listen tcp 127.0.0.1:1313: socket: too many open files
make: *** [serve] Error 1
```
+
试着查看一下当前打开文件数的限制:
`launchctl limit maxfiles`
-然后运行以下命令(参考https://gist.github.com/tombigel/d503800a282fcadbee14b537735d202c):
+
+然后运行以下命令(参考 ):
-```
+```shell
#!/bin/sh
# These are the original gist links, linking to my gists now.
@@ -165,6 +252,9 @@ sudo chown root:wheel /Library/LaunchDaemons/limit.maxproc.plist
sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist
```
+
这适用于 Catalina 和 Mojave macOS。
# 参与 SIG Docs 工作
@@ -184,20 +275,21 @@ You can also reach the maintainers of this project at:
你也可以通过以下渠道联系本项目的维护人员:
-- [Slack](https://kubernetes.slack.com/messages/sig-docs) [加入Slack](https://slack.k8s.io/)
+- [Slack](https://kubernetes.slack.com/messages/sig-docs)
+ - [获得此 Slack 的邀请](https://slack.k8s.io/)
- [邮件列表](https://groups.google.com/forum/#!forum/kubernetes-sig-docs)
# 为文档做贡献
你也可以点击屏幕右上方区域的 **Fork** 按钮,在你自己的 GitHub
-账号下创建本仓库的拷贝。此拷贝被称作 *fork*。
+账号下创建本仓库的拷贝。此拷贝被称作 _fork_。
你可以在自己的拷贝中任意地修改文档,并在你已准备好将所作修改提交给我们时,
在你自己的拷贝下创建一个拉取请求(Pull Request),以便让我们知道。
@@ -208,7 +300,7 @@ Once your pull request is created, a Kubernetes reviewer will take responsibilit
还要提醒的一点,有时可能会有不止一个 Kubernetes 评审人为你提供反馈意见。
有时候,某个评审人的意见和另一个最初被指派的评审人的意见不同。
@@ -220,17 +312,65 @@ Furthermore, in some cases, one of your reviewers might ask for a technical revi
有关为 Kubernetes 文档做出贡献的更多信息,请参阅:
-* [贡献 Kubernetes 文档](https://kubernetes.io/docs/contribute/)
-* [页面内容类型](https://kubernetes.io/docs/contribute/style/page-content-types/)
-* [文档风格指南](https://kubernetes.io/docs/contribute/style/style-guide/)
-* [本地化 Kubernetes 文档](https://kubernetes.io/docs/contribute/localization/)
+- [贡献 Kubernetes 文档](https://kubernetes.io/docs/contribute/)
+- [页面内容类型](https://kubernetes.io/docs/contribute/style/page-content-types/)
+- [文档风格指南](https://kubernetes.io/docs/contribute/style/style-guide/)
+- [本地化 Kubernetes 文档](https://kubernetes.io/docs/contribute/localization/)
+
+
+### 新贡献者大使
+
+
+如果您在贡献时需要帮助,[新贡献者大使](https://kubernetes.io/docs/contribute/advanced/#serve-as-a-new-contributor-ambassador)是一个很好的联系人。
+这些是 SIG Docs 批准者,其职责包括指导新贡献者并帮助他们完成最初的几个拉取请求。
+联系新贡献者大使的最佳地点是 [Kubernetes Slack](https://slack.k8s.io/)。
+SIG Docs 的当前新贡献者大使:
+
+
+| 姓名 | Slack | GitHub |
+| -------------------------- | -------------------------- | -------------------------- |
+| Arsh Sharma | @arsh | @RinkiyaKeDad |
+
+
+## `README.md` 本地化
+
+
+| 语言 | 语言 |
+| -------------------------- | -------------------------- |
+| [中文](README-zh.md) | [韩语](README-ko.md) |
+| [法语](README-fr.md) | [波兰语](README-pl.md) |
+| [德语](README-de.md) | [葡萄牙语](README-pt.md) |
+| [印地语](README-hi.md) | [俄语](README-ru.md) |
+| [印尼语](README-id.md) | [西班牙语](README-es.md) |
+| [意大利语](README-it.md) | [乌克兰语](README-uk.md) |
+| [日语](README-ja.md) | [越南语](README-vi.md) |
# 中文本地化
@@ -241,19 +381,19 @@ For more information about contributing to the Kubernetes documentation, see:
* [Slack channel](https://kubernetes.slack.com/messages/kubernetes-docs-zh)
-# 行为准则
+## 行为准则
参与 Kubernetes 社区受 [CNCF 行为准则](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) 约束。
-# 感谢!
+## 感谢你
Kubernetes 因为社区的参与而蓬勃发展,感谢您对我们网站和文档的贡献!
diff --git a/api-ref-assets/api/swagger.json b/api-ref-assets/api/swagger.json
index b836f6700a..399f47223f 100644
--- a/api-ref-assets/api/swagger.json
+++ b/api-ref-assets/api/swagger.json
@@ -367,7 +367,7 @@
"type": "object"
},
"io.k8s.api.apiserverinternal.v1alpha1.StorageVersion": {
- "description": "\n Storage version of a specific resource.",
+ "description": "Storage version of a specific resource.",
"properties": {
"apiVersion": {
"description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
@@ -786,11 +786,7 @@
"description": "Rolling update config params. Present only if type = \"RollingUpdate\"."
},
"type": {
- "description": "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.\n\nPossible enum values:\n - `\"OnDelete\"` Replace the old daemons only when it's killed\n - `\"RollingUpdate\"` Replace the old daemons by new ones using rolling update i.e replace them on each node one after the other.",
- "enum": [
- "OnDelete",
- "RollingUpdate"
- ],
+ "description": "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.\n\n",
"type": "string"
}
},
@@ -1003,11 +999,7 @@
"description": "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate."
},
"type": {
- "description": "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n\nPossible enum values:\n - `\"Recreate\"` Kill all existing pods before creating new ones.\n - `\"RollingUpdate\"` Replace the old ReplicaSets by new one using rolling update i.e gradually scale down the old ReplicaSets and scale up the new one.",
- "enum": [
- "Recreate",
- "RollingUpdate"
- ],
+ "description": "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.\n\n",
"type": "string"
}
},
@@ -1212,8 +1204,12 @@
"io.k8s.api.apps.v1.RollingUpdateStatefulSetStrategy": {
"description": "RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.",
"properties": {
+ "maxUnavailable": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.util.intstr.IntOrString",
+ "description": "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding up. This can not be 0. Defaults to 1. This field is alpha-level and is only honored by servers that enable the MaxUnavailableStatefulSet feature. The field applies to all pods in the range 0 to Replicas-1. That means if there is any unavailable pod in the range 0 to Replicas-1, it will be counted towards MaxUnavailable."
+ },
"partition": {
- "description": "Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.",
+ "description": "Partition indicates the ordinal at which the StatefulSet should be partitioned for updates. During a rolling update, all pods from ordinal Replicas-1 to Partition are updated. All pods from ordinal Partition-1 to 0 remain untouched. This is helpful in being able to do a canary based deployment. The default value is 0.",
"format": "int32",
"type": "integer"
}
@@ -1345,11 +1341,7 @@
"description": "persistentVolumeClaimRetentionPolicy describes the lifecycle of persistent volume claims created from volumeClaimTemplates. By default, all persistent volume claims are created as needed and retained until manually deleted. This policy allows the lifecycle to be altered, for example by deleting persistent volume claims when their stateful set is deleted, or when their pod is scaled down. This requires the StatefulSetAutoDeletePVC feature gate to be enabled, which is alpha. +optional"
},
"podManagementPolicy": {
- "description": "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\n\nPossible enum values:\n - `\"OrderedReady\"` will create pods in strictly increasing order on scale up and strictly decreasing order on scale down, progressing only when the previous pod is ready or terminated. At most one pod will be changed at any time.\n - `\"Parallel\"` will create and delete pods as soon as the stateful set replica count is changed, and will not wait for pods to be ready or complete termination.",
- "enum": [
- "OrderedReady",
- "Parallel"
- ],
+ "description": "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.\n\n",
"type": "string"
},
"replicas": {
@@ -1450,8 +1442,7 @@
}
},
"required": [
- "replicas",
- "availableReplicas"
+ "replicas"
],
"type": "object"
},
@@ -1463,11 +1454,7 @@
"description": "RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType."
},
"type": {
- "description": "Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.\n\nPossible enum values:\n - `\"OnDelete\"` triggers the legacy behavior. Version tracking and ordered rolling restarts are disabled. Pods are recreated from the StatefulSetSpec when they are manually deleted. When a scale operation is performed with this strategy,specification version indicated by the StatefulSet's currentRevision.\n - `\"RollingUpdate\"` indicates that update will be applied to all Pods in the StatefulSet with respect to the StatefulSet ordering constraints. When a scale operation is performed with this strategy, new Pods will be created from the specification version indicated by the StatefulSet's updateRevision.",
- "enum": [
- "OnDelete",
- "RollingUpdate"
- ],
+ "description": "Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.\n\n",
"type": "string"
}
},
@@ -4041,12 +4028,7 @@
"description": "CronJobSpec describes how the job execution will look like and when it will actually run.",
"properties": {
"concurrencyPolicy": {
- "description": "Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one\n\nPossible enum values:\n - `\"Allow\"` allows CronJobs to run concurrently.\n - `\"Forbid\"` forbids concurrent runs, skipping next run if previous hasn't finished yet.\n - `\"Replace\"` cancels currently running job and replaces it with a new one.",
- "enum": [
- "Allow",
- "Forbid",
- "Replace"
- ],
+ "description": "Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one\n\n",
"type": "string"
},
"failedJobsHistoryLimit": {
@@ -4075,6 +4057,10 @@
"suspend": {
"description": "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.",
"type": "boolean"
+ },
+ "timeZone": {
+ "description": "The time zone for the given schedule, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones. If not specified, this will rely on the time zone of the kube-controller-manager process. ALPHA: This field is in alpha and must be enabled via the `CronJobTimeZone` feature gate.",
+ "type": "string"
}
},
"required": [
@@ -4162,12 +4148,7 @@
"type": "string"
},
"type": {
- "description": "Type of job condition, Complete or Failed.\n\nPossible enum values:\n - `\"Complete\"` means the job has completed its execution.\n - `\"Failed\"` means the job has failed its execution.\n - `\"Suspended\"` means the job has been suspended.",
- "enum": [
- "Complete",
- "Failed",
- "Suspended"
- ],
+ "description": "Type of job condition, Complete or Failed.",
"type": "string"
}
},
@@ -4226,7 +4207,7 @@
"type": "integer"
},
"completionMode": {
- "description": "CompletionMode specifies how Pod completions are tracked. It can be `NonIndexed` (default) or `Indexed`.\n\n`NonIndexed` means that the Job is considered complete when there have been .spec.completions successfully completed Pods. Each Pod completion is homologous to each other.\n\n`Indexed` means that the Pods of a Job get an associated completion index from 0 to (.spec.completions - 1), available in the annotation batch.kubernetes.io/job-completion-index. The Job is considered complete when there is one successfully completed Pod for each index. When value is `Indexed`, .spec.completions must be specified and `.spec.parallelism` must be less than or equal to 10^5. In addition, The Pod name takes the form `$(job-name)-$(index)-$(random-string)`, the Pod hostname takes the form `$(job-name)-$(index)`.\n\nThis field is beta-level. More completion modes can be added in the future. If the Job controller observes a mode that it doesn't recognize, the controller skips updates for the Job.",
+ "description": "CompletionMode specifies how Pod completions are tracked. It can be `NonIndexed` (default) or `Indexed`.\n\n`NonIndexed` means that the Job is considered complete when there have been .spec.completions successfully completed Pods. Each Pod completion is homologous to each other.\n\n`Indexed` means that the Pods of a Job get an associated completion index from 0 to (.spec.completions - 1), available in the annotation batch.kubernetes.io/job-completion-index. The Job is considered complete when there is one successfully completed Pod for each index. When value is `Indexed`, .spec.completions must be specified and `.spec.parallelism` must be less than or equal to 10^5. In addition, The Pod name takes the form `$(job-name)-$(index)-$(random-string)`, the Pod hostname takes the form `$(job-name)-$(index)`.\n\nMore completion modes can be added in the future. If the Job controller observes a mode that it doesn't recognize, which is possible during upgrades due to version skew, the controller skips updates for the Job.",
"type": "string"
},
"completions": {
@@ -4248,7 +4229,7 @@
"description": "A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors"
},
"suspend": {
- "description": "Suspend specifies whether the Job controller should create Pods or not. If a Job is created with suspend set to true, no Pods are created by the Job controller. If a Job is suspended after creation (i.e. the flag goes from false to true), the Job controller will delete all active Pods associated with this Job. Users must design their workload to gracefully handle this. Suspending a Job will reset the StartTime field of the Job, effectively resetting the ActiveDeadlineSeconds timer too. Defaults to false.\n\nThis field is beta-level, gated by SuspendJob feature flag (enabled by default).",
+ "description": "Suspend specifies whether the Job controller should create Pods or not. If a Job is created with suspend set to true, no Pods are created by the Job controller. If a Job is suspended after creation (i.e. the flag goes from false to true), the Job controller will delete all active Pods associated with this Job. Users must design their workload to gracefully handle this. Suspending a Job will reset the StartTime field of the Job, effectively resetting the ActiveDeadlineSeconds timer too. Defaults to false.",
"type": "boolean"
},
"template": {
@@ -4298,7 +4279,7 @@
"type": "integer"
},
"ready": {
- "description": "The number of pods which have a Ready condition.\n\nThis field is alpha-level. The job controller populates the field when the feature gate JobReadyPods is enabled (disabled by default).",
+ "description": "The number of pods which have a Ready condition.\n\nThis field is beta-level. The job controller populates the field when the feature gate JobReadyPods is enabled (enabled by default).",
"format": "int32",
"type": "integer"
},
@@ -4455,6 +4436,10 @@
"suspend": {
"description": "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.",
"type": "boolean"
+ },
+ "timeZone": {
+ "description": "The time zone for the given schedule, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones. If not specified, this will rely on the time zone of the kube-controller-manager process. ALPHA: This field is in alpha and must be enabled via the `CronJobTimeZone` feature gate.",
+ "type": "string"
}
},
"required": [
@@ -4558,12 +4543,7 @@
"type": "string"
},
"type": {
- "description": "type of the condition. Known conditions are \"Approved\", \"Denied\", and \"Failed\".\n\nAn \"Approved\" condition is added via the /approval subresource, indicating the request was approved and should be issued by the signer.\n\nA \"Denied\" condition is added via the /approval subresource, indicating the request was denied and should not be issued by the signer.\n\nA \"Failed\" condition is added via the /status subresource, indicating the signer failed to issue the certificate.\n\nApproved and Denied conditions are mutually exclusive. Approved, Denied, and Failed conditions cannot be removed once added.\n\nOnly one condition of a given type is allowed.\n\nPossible enum values:\n - `\"Approved\"` Approved indicates the request was approved and should be issued by the signer.\n - `\"Denied\"` Denied indicates the request was denied and should not be issued by the signer.\n - `\"Failed\"` Failed indicates the signer failed to issue the certificate.",
- "enum": [
- "Approved",
- "Denied",
- "Failed"
- ],
+ "description": "type of the condition. Known conditions are \"Approved\", \"Denied\", and \"Failed\".\n\nAn \"Approved\" condition is added via the /approval subresource, indicating the request was approved and should be issued by the signer.\n\nA \"Denied\" condition is added via the /approval subresource, indicating the request was denied and should not be issued by the signer.\n\nA \"Failed\" condition is added via the /status subresource, indicating the signer failed to issue the certificate.\n\nApproved and Denied conditions are mutually exclusive. Approved, Denied, and Failed conditions cannot be removed once added.\n\nOnly one condition of a given type is allowed.",
"type": "string"
}
},
@@ -4611,7 +4591,7 @@
"description": "CertificateSigningRequestSpec contains the certificate request.",
"properties": {
"expirationSeconds": {
- "description": "expirationSeconds is the requested duration of validity of the issued certificate. The certificate signer may issue a certificate with a different validity duration so a client must check the delta between the notBefore and and notAfter fields in the issued certificate to determine the actual duration.\n\nThe v1.22+ in-tree implementations of the well-known Kubernetes signers will honor this field as long as the requested duration is not greater than the maximum duration they will honor per the --cluster-signing-duration CLI flag to the Kubernetes controller manager.\n\nCertificate signers may not honor this field for various reasons:\n\n 1. Old signer that is unaware of the field (such as the in-tree\n implementations prior to v1.22)\n 2. Signer whose configured maximum is shorter than the requested duration\n 3. Signer whose configured minimum is longer than the requested duration\n\nThe minimum valid value for expirationSeconds is 600, i.e. 10 minutes.\n\nAs of v1.22, this field is beta and is controlled via the CSRDuration feature gate.",
+ "description": "expirationSeconds is the requested duration of validity of the issued certificate. The certificate signer may issue a certificate with a different validity duration so a client must check the delta between the notBefore and and notAfter fields in the issued certificate to determine the actual duration.\n\nThe v1.22+ in-tree implementations of the well-known Kubernetes signers will honor this field as long as the requested duration is not greater than the maximum duration they will honor per the --cluster-signing-duration CLI flag to the Kubernetes controller manager.\n\nCertificate signers may not honor this field for various reasons:\n\n 1. Old signer that is unaware of the field (such as the in-tree\n implementations prior to v1.22)\n 2. Signer whose configured maximum is shorter than the requested duration\n 3. Signer whose configured minimum is longer than the requested duration\n\nThe minimum valid value for expirationSeconds is 600, i.e. 10 minutes.",
"format": "int32",
"type": "integer"
},
@@ -4785,20 +4765,20 @@
"description": "Represents a Persistent Disk resource in AWS.\n\nAn AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.",
"properties": {
"fsType": {
- "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore",
+ "description": "fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore",
"type": "string"
},
"partition": {
- "description": "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).",
+ "description": "partition is the partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).",
"format": "int32",
"type": "integer"
},
"readOnly": {
- "description": "Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore",
+ "description": "readOnly value true will force the readOnly setting in VolumeMounts. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore",
"type": "boolean"
},
"volumeID": {
- "description": "Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore",
+ "description": "volumeID is unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore",
"type": "string"
}
},
@@ -4847,27 +4827,27 @@
"description": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.",
"properties": {
"cachingMode": {
- "description": "Host Caching mode: None, Read Only, Read Write.",
+ "description": "cachingMode is the Host Caching mode: None, Read Only, Read Write.",
"type": "string"
},
"diskName": {
- "description": "The Name of the data disk in the blob storage",
+ "description": "diskName is the Name of the data disk in the blob storage",
"type": "string"
},
"diskURI": {
- "description": "The URI the data disk in the blob storage",
+ "description": "diskURI is the URI of data disk in the blob storage",
"type": "string"
},
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
+ "description": "fsType is Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
"type": "string"
},
"kind": {
- "description": "Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared",
+ "description": "kind expected values are Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared",
"type": "string"
},
"readOnly": {
- "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
+ "description": "readOnly Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
"type": "boolean"
}
},
@@ -4881,19 +4861,19 @@
"description": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.",
"properties": {
"readOnly": {
- "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
+ "description": "readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
"type": "boolean"
},
"secretName": {
- "description": "the name of secret that contains Azure Storage Account Name and Key",
+ "description": "secretName is the name of secret that contains Azure Storage Account Name and Key",
"type": "string"
},
"secretNamespace": {
- "description": "the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod",
+ "description": "secretNamespace is the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod",
"type": "string"
},
"shareName": {
- "description": "Share Name",
+ "description": "shareName is the azure Share Name",
"type": "string"
}
},
@@ -4907,15 +4887,15 @@
"description": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.",
"properties": {
"readOnly": {
- "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
+ "description": "readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
"type": "boolean"
},
"secretName": {
- "description": "the name of secret that contains Azure Storage Account Name and Key",
+ "description": "secretName is the name of secret that contains Azure Storage Account Name and Key",
"type": "string"
},
"shareName": {
- "description": "Share Name",
+ "description": "shareName is the azure share Name",
"type": "string"
}
},
@@ -4962,41 +4942,41 @@
"properties": {
"controllerExpandSecretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.SecretReference",
- "description": "ControllerExpandSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerExpandVolume call. This is an alpha field and requires enabling ExpandCSIVolumes feature gate. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed."
+ "description": "controllerExpandSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerExpandVolume call. This is an alpha field and requires enabling ExpandCSIVolumes feature gate. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed."
},
"controllerPublishSecretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.SecretReference",
- "description": "ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed."
+ "description": "controllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed."
},
"driver": {
- "description": "Driver is the name of the driver to use for this volume. Required.",
+ "description": "driver is the name of the driver to use for this volume. Required.",
"type": "string"
},
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\".",
+ "description": "fsType to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\".",
"type": "string"
},
"nodePublishSecretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.SecretReference",
- "description": "NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed."
+ "description": "nodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed."
},
"nodeStageSecretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.SecretReference",
- "description": "NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed."
+ "description": "nodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed."
},
"readOnly": {
- "description": "Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).",
+ "description": "readOnly value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).",
"type": "boolean"
},
"volumeAttributes": {
"additionalProperties": {
"type": "string"
},
- "description": "Attributes of the volume to publish.",
+ "description": "volumeAttributes of the volume to publish.",
"type": "object"
},
"volumeHandle": {
- "description": "VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.",
+ "description": "volumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.",
"type": "string"
}
},
@@ -5010,26 +4990,26 @@
"description": "Represents a source location of a volume to mount, managed by an external CSI driver",
"properties": {
"driver": {
- "description": "Driver is the name of the CSI driver that handles this volume. Consult with your admin for the correct name as registered in the cluster.",
+ "description": "driver is the name of the CSI driver that handles this volume. Consult with your admin for the correct name as registered in the cluster.",
"type": "string"
},
"fsType": {
- "description": "Filesystem type to mount. Ex. \"ext4\", \"xfs\", \"ntfs\". If not provided, the empty value is passed to the associated CSI driver which will determine the default filesystem to apply.",
+ "description": "fsType to mount. Ex. \"ext4\", \"xfs\", \"ntfs\". If not provided, the empty value is passed to the associated CSI driver which will determine the default filesystem to apply.",
"type": "string"
},
"nodePublishSecretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference",
- "description": "NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secret references are passed."
+ "description": "nodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secret references are passed."
},
"readOnly": {
- "description": "Specifies a read-only configuration for the volume. Defaults to false (read/write).",
+ "description": "readOnly specifies a read-only configuration for the volume. Defaults to false (read/write).",
"type": "boolean"
},
"volumeAttributes": {
"additionalProperties": {
"type": "string"
},
- "description": "VolumeAttributes stores driver-specific properties that are passed to the CSI driver. Consult your driver's documentation for supported values.",
+ "description": "volumeAttributes stores driver-specific properties that are passed to the CSI driver. Consult your driver's documentation for supported values.",
"type": "object"
}
},
@@ -5062,30 +5042,30 @@
"description": "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.",
"properties": {
"monitors": {
- "description": "Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
+ "description": "monitors is Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
"items": {
"type": "string"
},
"type": "array"
},
"path": {
- "description": "Optional: Used as the mounted root, rather than the full Ceph tree, default is /",
+ "description": "path is Optional: Used as the mounted root, rather than the full Ceph tree, default is /",
"type": "string"
},
"readOnly": {
- "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
+ "description": "readOnly is Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
"type": "boolean"
},
"secretFile": {
- "description": "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
+ "description": "secretFile is Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
"type": "string"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.SecretReference",
- "description": "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it"
+ "description": "secretRef is Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it"
},
"user": {
- "description": "Optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
+ "description": "user is Optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
"type": "string"
}
},
@@ -5098,30 +5078,30 @@
"description": "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.",
"properties": {
"monitors": {
- "description": "Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
+ "description": "monitors is Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
"items": {
"type": "string"
},
"type": "array"
},
"path": {
- "description": "Optional: Used as the mounted root, rather than the full Ceph tree, default is /",
+ "description": "path is Optional: Used as the mounted root, rather than the full Ceph tree, default is /",
"type": "string"
},
"readOnly": {
- "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
+ "description": "readOnly is Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
"type": "boolean"
},
"secretFile": {
- "description": "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
+ "description": "secretFile is Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
"type": "string"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference",
- "description": "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it"
+ "description": "secretRef is Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it"
},
"user": {
- "description": "Optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
+ "description": "user is optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it",
"type": "string"
}
},
@@ -5134,19 +5114,19 @@
"description": "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.",
"properties": {
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md",
+ "description": "fsType Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md",
"type": "string"
},
"readOnly": {
- "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md",
+ "description": "readOnly is Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md",
"type": "boolean"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.SecretReference",
- "description": "Optional: points to a secret object containing parameters used to connect to OpenStack."
+ "description": "secretRef is Optional: points to a secret object containing parameters used to connect to OpenStack."
},
"volumeID": {
- "description": "volume id used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md",
+ "description": "volumeID used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md",
"type": "string"
}
},
@@ -5159,19 +5139,19 @@
"description": "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.",
"properties": {
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md",
+ "description": "fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md",
"type": "string"
},
"readOnly": {
- "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md",
+ "description": "readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md",
"type": "boolean"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference",
- "description": "Optional: points to a secret object containing parameters used to connect to OpenStack."
+ "description": "secretRef is optional: points to a secret object containing parameters used to connect to OpenStack."
},
"volumeID": {
- "description": "volume id used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md",
+ "description": "volumeID used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md",
"type": "string"
}
},
@@ -5436,7 +5416,7 @@
"description": "Adapts a ConfigMap into a projected volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.",
"properties": {
"items": {
- "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.",
+ "description": "items if unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.",
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath"
},
@@ -5447,7 +5427,7 @@
"type": "string"
},
"optional": {
- "description": "Specify whether the ConfigMap or its keys must be defined",
+ "description": "optional specify whether the ConfigMap or its keys must be defined",
"type": "boolean"
}
},
@@ -5457,12 +5437,12 @@
"description": "Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.",
"properties": {
"defaultMode": {
- "description": "Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.",
+ "description": "defaultMode is optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.",
"format": "int32",
"type": "integer"
},
"items": {
- "description": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.",
+ "description": "items if unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.",
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath"
},
@@ -5473,7 +5453,7 @@
"type": "string"
},
"optional": {
- "description": "Specify whether the ConfigMap or its keys must be defined",
+ "description": "optional specify whether the ConfigMap or its keys must be defined",
"type": "boolean"
}
},
@@ -5483,14 +5463,14 @@
"description": "A single application container that you want to run within a pod.",
"properties": {
"args": {
- "description": "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will produce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell",
+ "description": "Arguments to the entrypoint. The container image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will produce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell",
"items": {
"type": "string"
},
"type": "array"
},
"command": {
- "description": "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will produce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell",
+ "description": "Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will produce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell",
"items": {
"type": "string"
},
@@ -5513,16 +5493,11 @@
"type": "array"
},
"image": {
- "description": "Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.",
+ "description": "Container image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.",
"type": "string"
},
"imagePullPolicy": {
- "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images\n\nPossible enum values:\n - `\"Always\"` means that kubelet always attempts to pull the latest image. Container will fail If the pull fails.\n - `\"IfNotPresent\"` means that kubelet pulls if the image isn't present on disk. Container will fail if the image isn't present and the pull fails.\n - `\"Never\"` means that kubelet never pulls an image, but only uses a local image. Container will fail if the image isn't present",
- "enum": [
- "Always",
- "IfNotPresent",
- "Never"
- ],
+ "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images\n\n",
"type": "string"
},
"lifecycle": {
@@ -5580,11 +5555,7 @@
"type": "string"
},
"terminationMessagePolicy": {
- "description": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.\n\nPossible enum values:\n - `\"FallbackToLogsOnError\"` will read the most recent contents of the container logs for the container status message when the container exits with an error and the terminationMessagePath has no contents.\n - `\"File\"` is the default behavior and will set the container status message to the contents of the container's terminationMessagePath when the container exits.",
- "enum": [
- "FallbackToLogsOnError",
- "File"
- ],
+ "description": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.\n\n",
"type": "string"
},
"tty": {
@@ -5659,12 +5630,7 @@
"type": "string"
},
"protocol": {
- "description": "Protocol for port. Must be UDP, TCP, or SCTP. Defaults to \"TCP\".\n\nPossible enum values:\n - `\"SCTP\"` is the SCTP protocol.\n - `\"TCP\"` is the TCP protocol.\n - `\"UDP\"` is the UDP protocol.",
- "enum": [
- "SCTP",
- "TCP",
- "UDP"
- ],
+ "description": "Protocol for port. Must be UDP, TCP, or SCTP. Defaults to \"TCP\".\n\n",
"type": "string"
}
},
@@ -5705,7 +5671,7 @@
"description": "ContainerStateTerminated is a terminated state of a container.",
"properties": {
"containerID": {
- "description": "Container's ID in the format 'docker://'",
+ "description": "Container's ID in the format '://'",
"type": "string"
},
"exitCode": {
@@ -5758,7 +5724,7 @@
"description": "ContainerStatus contains details for the current status of this container.",
"properties": {
"containerID": {
- "description": "Container's ID in the format 'docker://'.",
+ "description": "Container's ID in the format '://'.",
"type": "string"
},
"image": {
@@ -5879,12 +5845,12 @@
"description": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.",
"properties": {
"medium": {
- "description": "What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir",
+ "description": "medium represents what type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir",
"type": "string"
},
"sizeLimit": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity",
- "description": "Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir"
+ "description": "sizeLimit is the total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir"
}
},
"type": "object"
@@ -5919,7 +5885,7 @@
"description": "EndpointPort is a tuple that describes a single port.",
"properties": {
"appProtocol": {
- "description": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.",
+ "description": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.",
"type": "string"
},
"name": {
@@ -5932,12 +5898,7 @@
"type": "integer"
},
"protocol": {
- "description": "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.\n\nPossible enum values:\n - `\"SCTP\"` is the SCTP protocol.\n - `\"TCP\"` is the TCP protocol.\n - `\"UDP\"` is the UDP protocol.",
- "enum": [
- "SCTP",
- "TCP",
- "UDP"
- ],
+ "description": "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.\n\n",
"type": "string"
}
},
@@ -6106,14 +6067,14 @@
"description": "An EphemeralContainer is a temporary container that you may add to an existing Pod for user-initiated activities such as debugging. Ephemeral containers have no resource or scheduling guarantees, and they will not be restarted when they exit or when a Pod is removed or restarted. The kubelet may evict a Pod if an ephemeral container causes the Pod to exceed its resource allocation.\n\nTo add an ephemeral container, use the ephemeralcontainers subresource of an existing Pod. Ephemeral containers may not be removed or restarted.\n\nThis is a beta feature available on clusters that haven't disabled the EphemeralContainers feature gate.",
"properties": {
"args": {
- "description": "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will produce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell",
+ "description": "Arguments to the entrypoint. The image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will produce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell",
"items": {
"type": "string"
},
"type": "array"
},
"command": {
- "description": "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will produce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell",
+ "description": "Entrypoint array. Not executed within a shell. The image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. \"$$(VAR_NAME)\" will produce the string literal \"$(VAR_NAME)\". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell",
"items": {
"type": "string"
},
@@ -6136,16 +6097,11 @@
"type": "array"
},
"image": {
- "description": "Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images",
+ "description": "Container image name. More info: https://kubernetes.io/docs/concepts/containers/images",
"type": "string"
},
"imagePullPolicy": {
- "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images\n\nPossible enum values:\n - `\"Always\"` means that kubelet always attempts to pull the latest image. Container will fail If the pull fails.\n - `\"IfNotPresent\"` means that kubelet pulls if the image isn't present on disk. Container will fail if the image isn't present and the pull fails.\n - `\"Never\"` means that kubelet never pulls an image, but only uses a local image. Container will fail if the image isn't present",
- "enum": [
- "Always",
- "IfNotPresent",
- "Never"
- ],
+ "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images\n\n",
"type": "string"
},
"lifecycle": {
@@ -6207,11 +6163,7 @@
"type": "string"
},
"terminationMessagePolicy": {
- "description": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.\n\nPossible enum values:\n - `\"FallbackToLogsOnError\"` will read the most recent contents of the container logs for the container status message when the container exits with an error and the terminationMessagePath has no contents.\n - `\"File\"` is the default behavior and will set the container status message to the contents of the container's terminationMessagePath when the container exits.",
- "enum": [
- "FallbackToLogsOnError",
- "File"
- ],
+ "description": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.\n\n",
"type": "string"
},
"tty": {
@@ -6423,27 +6375,27 @@
"description": "Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.",
"properties": {
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
+ "description": "fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
"type": "string"
},
"lun": {
- "description": "Optional: FC target lun number",
+ "description": "lun is Optional: FC target lun number",
"format": "int32",
"type": "integer"
},
"readOnly": {
- "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
+ "description": "readOnly is Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
"type": "boolean"
},
"targetWWNs": {
- "description": "Optional: FC target worldwide names (WWNs)",
+ "description": "targetWWNs is Optional: FC target worldwide names (WWNs)",
"items": {
"type": "string"
},
"type": "array"
},
"wwids": {
- "description": "Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.",
+ "description": "wwids Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.",
"items": {
"type": "string"
},
@@ -6456,27 +6408,27 @@
"description": "FlexPersistentVolumeSource represents a generic persistent volume resource that is provisioned/attached using an exec based plugin.",
"properties": {
"driver": {
- "description": "Driver is the name of the driver to use for this volume.",
+ "description": "driver is the name of the driver to use for this volume.",
"type": "string"
},
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.",
+ "description": "fsType is the Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.",
"type": "string"
},
"options": {
"additionalProperties": {
"type": "string"
},
- "description": "Optional: Extra command options if any.",
+ "description": "options is Optional: this field holds extra command options if any.",
"type": "object"
},
"readOnly": {
- "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
+ "description": "readOnly is Optional: defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
"type": "boolean"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.SecretReference",
- "description": "Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts."
+ "description": "secretRef is Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts."
}
},
"required": [
@@ -6488,27 +6440,27 @@
"description": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.",
"properties": {
"driver": {
- "description": "Driver is the name of the driver to use for this volume.",
+ "description": "driver is the name of the driver to use for this volume.",
"type": "string"
},
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.",
+ "description": "fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.",
"type": "string"
},
"options": {
"additionalProperties": {
"type": "string"
},
- "description": "Optional: Extra command options if any.",
+ "description": "options is Optional: this field holds extra command options if any.",
"type": "object"
},
"readOnly": {
- "description": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
+ "description": "readOnly is Optional: defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
"type": "boolean"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference",
- "description": "Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts."
+ "description": "secretRef is Optional: secretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts."
}
},
"required": [
@@ -6520,11 +6472,11 @@
"description": "Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.",
"properties": {
"datasetName": {
- "description": "Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated",
+ "description": "datasetName is Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated",
"type": "string"
},
"datasetUUID": {
- "description": "UUID of the dataset. This is unique identifier of a Flocker dataset",
+ "description": "datasetUUID is the UUID of the dataset. This is unique identifier of a Flocker dataset",
"type": "string"
}
},
@@ -6534,20 +6486,20 @@
"description": "Represents a Persistent Disk resource in Google Compute Engine.\n\nA GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.",
"properties": {
"fsType": {
- "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk",
+ "description": "fsType is filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk",
"type": "string"
},
"partition": {
- "description": "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk",
+ "description": "partition is the partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk",
"format": "int32",
"type": "integer"
},
"pdName": {
- "description": "Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk",
+ "description": "pdName is unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk",
"type": "string"
},
"readOnly": {
- "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk",
+ "description": "readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk",
"type": "boolean"
}
},
@@ -6577,15 +6529,15 @@
"description": "Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.\n\nDEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.",
"properties": {
"directory": {
- "description": "Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.",
+ "description": "directory is the target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.",
"type": "string"
},
"repository": {
- "description": "Repository URL",
+ "description": "repository is the URL",
"type": "string"
},
"revision": {
- "description": "Commit hash for the specified revision.",
+ "description": "revision is the commit hash for the specified revision.",
"type": "string"
}
},
@@ -6598,19 +6550,19 @@
"description": "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.",
"properties": {
"endpoints": {
- "description": "EndpointsName is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
+ "description": "endpoints is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
"type": "string"
},
"endpointsNamespace": {
- "description": "EndpointsNamespace is the namespace that contains Glusterfs endpoint. If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
+ "description": "endpointsNamespace is the namespace that contains Glusterfs endpoint. If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
"type": "string"
},
"path": {
- "description": "Path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
+ "description": "path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
"type": "string"
},
"readOnly": {
- "description": "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
+ "description": "readOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
"type": "boolean"
}
},
@@ -6624,15 +6576,15 @@
"description": "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.",
"properties": {
"endpoints": {
- "description": "EndpointsName is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
+ "description": "endpoints is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
"type": "string"
},
"path": {
- "description": "Path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
+ "description": "path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
"type": "string"
},
"readOnly": {
- "description": "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
+ "description": "readOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod",
"type": "boolean"
}
},
@@ -6665,11 +6617,7 @@
"description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME."
},
"scheme": {
- "description": "Scheme to use for connecting to the host. Defaults to HTTP.\n\nPossible enum values:\n - `\"HTTP\"` means that the scheme used will be http://\n - `\"HTTPS\"` means that the scheme used will be https://",
- "enum": [
- "HTTP",
- "HTTPS"
- ],
+ "description": "Scheme to use for connecting to the host. Defaults to HTTP.\n\n",
"type": "string"
}
},
@@ -6717,11 +6665,11 @@
"description": "Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.",
"properties": {
"path": {
- "description": "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath",
+ "description": "path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath",
"type": "string"
},
"type": {
- "description": "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath",
+ "description": "type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath",
"type": "string"
}
},
@@ -6734,51 +6682,51 @@
"description": "ISCSIPersistentVolumeSource represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.",
"properties": {
"chapAuthDiscovery": {
- "description": "whether support iSCSI Discovery CHAP authentication",
+ "description": "chapAuthDiscovery defines whether support iSCSI Discovery CHAP authentication",
"type": "boolean"
},
"chapAuthSession": {
- "description": "whether support iSCSI Session CHAP authentication",
+ "description": "chapAuthSession defines whether support iSCSI Session CHAP authentication",
"type": "boolean"
},
"fsType": {
- "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi",
+ "description": "fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi",
"type": "string"
},
"initiatorName": {
- "description": "Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection.",
+ "description": "initiatorName is the custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection.",
"type": "string"
},
"iqn": {
- "description": "Target iSCSI Qualified Name.",
+ "description": "iqn is Target iSCSI Qualified Name.",
"type": "string"
},
"iscsiInterface": {
- "description": "iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).",
+ "description": "iscsiInterface is the interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).",
"type": "string"
},
"lun": {
- "description": "iSCSI Target Lun number.",
+ "description": "lun is iSCSI Target Lun number.",
"format": "int32",
"type": "integer"
},
"portals": {
- "description": "iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).",
+ "description": "portals is the iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).",
"items": {
"type": "string"
},
"type": "array"
},
"readOnly": {
- "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.",
+ "description": "readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.",
"type": "boolean"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.SecretReference",
- "description": "CHAP Secret for iSCSI target and initiator authentication"
+ "description": "secretRef is the CHAP Secret for iSCSI target and initiator authentication"
},
"targetPortal": {
- "description": "iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).",
+ "description": "targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).",
"type": "string"
}
},
@@ -6793,51 +6741,51 @@
"description": "Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.",
"properties": {
"chapAuthDiscovery": {
- "description": "whether support iSCSI Discovery CHAP authentication",
+ "description": "chapAuthDiscovery defines whether support iSCSI Discovery CHAP authentication",
"type": "boolean"
},
"chapAuthSession": {
- "description": "whether support iSCSI Session CHAP authentication",
+ "description": "chapAuthSession defines whether support iSCSI Session CHAP authentication",
"type": "boolean"
},
"fsType": {
- "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi",
+ "description": "fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi",
"type": "string"
},
"initiatorName": {
- "description": "Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection.",
+ "description": "initiatorName is the custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection.",
"type": "string"
},
"iqn": {
- "description": "Target iSCSI Qualified Name.",
+ "description": "iqn is the target iSCSI Qualified Name.",
"type": "string"
},
"iscsiInterface": {
- "description": "iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).",
+ "description": "iscsiInterface is the interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).",
"type": "string"
},
"lun": {
- "description": "iSCSI Target Lun number.",
+ "description": "lun represents iSCSI Target Lun number.",
"format": "int32",
"type": "integer"
},
"portals": {
- "description": "iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).",
+ "description": "portals is the iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).",
"items": {
"type": "string"
},
"type": "array"
},
"readOnly": {
- "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.",
+ "description": "readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.",
"type": "boolean"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference",
- "description": "CHAP Secret for iSCSI target and initiator authentication"
+ "description": "secretRef is the CHAP Secret for iSCSI target and initiator authentication"
},
"targetPortal": {
- "description": "iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).",
+ "description": "targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).",
"type": "string"
}
},
@@ -6852,16 +6800,16 @@
"description": "Maps a string key to a path within a volume.",
"properties": {
"key": {
- "description": "The key to project.",
+ "description": "key is the key to project.",
"type": "string"
},
"mode": {
- "description": "Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.",
+ "description": "mode is Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.",
"format": "int32",
"type": "integer"
},
"path": {
- "description": "The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.",
+ "description": "path is the relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.",
"type": "string"
}
},
@@ -6971,12 +6919,7 @@
"type": "object"
},
"type": {
- "description": "Type of resource that this limit applies to.\n\nPossible enum values:\n - `\"Container\"` Limit that applies to all containers in a namespace\n - `\"PersistentVolumeClaim\"` Limit that applies to all persistent volume claims in a namespace\n - `\"Pod\"` Limit that applies to all pods in a namespace",
- "enum": [
- "Container",
- "PersistentVolumeClaim",
- "Pod"
- ],
+ "description": "Type of resource that this limit applies to.",
"type": "string"
}
},
@@ -7086,11 +7029,11 @@
"description": "Local represents directly-attached storage with node affinity (Beta feature)",
"properties": {
"fsType": {
- "description": "Filesystem type to mount. It applies only when the Path is a block device. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default value is to auto-select a filesystem if unspecified.",
+ "description": "fsType is the filesystem type to mount. It applies only when the Path is a block device. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default value is to auto-select a filesystem if unspecified.",
"type": "string"
},
"path": {
- "description": "The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...).",
+ "description": "path of the full path to the volume on the node. It can be either a directory or block device (disk, partition, ...).",
"type": "string"
}
},
@@ -7103,15 +7046,15 @@
"description": "Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.",
"properties": {
"path": {
- "description": "Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs",
+ "description": "path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs",
"type": "string"
},
"readOnly": {
- "description": "ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs",
+ "description": "readOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs",
"type": "boolean"
},
"server": {
- "description": "Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs",
+ "description": "server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs",
"type": "string"
}
},
@@ -7171,14 +7114,7 @@
"type": "string"
},
"type": {
- "description": "Type of namespace controller condition.\n\nPossible enum values:\n - `\"NamespaceContentRemaining\"` contains information about resources remaining in a namespace.\n - `\"NamespaceDeletionContentFailure\"` contains information about namespace deleter errors during deletion of resources.\n - `\"NamespaceDeletionDiscoveryFailure\"` contains information about namespace deleter errors during resource discovery.\n - `\"NamespaceDeletionGroupVersionParsingFailure\"` contains information about namespace deleter errors parsing GV for legacy types.\n - `\"NamespaceFinalizersRemaining\"` contains information about which finalizers are on resources remaining in a namespace.",
- "enum": [
- "NamespaceContentRemaining",
- "NamespaceDeletionContentFailure",
- "NamespaceDeletionDiscoveryFailure",
- "NamespaceDeletionGroupVersionParsingFailure",
- "NamespaceFinalizersRemaining"
- ],
+ "description": "Type of namespace controller condition.",
"type": "string"
}
},
@@ -7249,11 +7185,7 @@
"x-kubernetes-patch-strategy": "merge"
},
"phase": {
- "description": "Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/\n\nPossible enum values:\n - `\"Active\"` means the namespace is available for use in the system\n - `\"Terminating\"` means the namespace is undergoing graceful termination",
- "enum": [
- "Active",
- "Terminating"
- ],
+ "description": "Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/\n\n",
"type": "string"
}
},
@@ -7300,14 +7232,7 @@
"type": "string"
},
"type": {
- "description": "Node address type, one of Hostname, ExternalIP or InternalIP.\n\nPossible enum values:\n - `\"ExternalDNS\"` identifies a DNS name which resolves to an IP address which has the characteristics of a NodeExternalIP. The IP it resolves to may or may not be a listed NodeExternalIP address.\n - `\"ExternalIP\"` identifies an IP address which is, in some way, intended to be more usable from outside the cluster then an internal IP, though no specific semantics are defined. It may be a globally routable IP, though it is not required to be. External IPs may be assigned directly to an interface on the node, like a NodeInternalIP, or alternatively, packets sent to the external IP may be NAT'ed to an internal node IP rather than being delivered directly (making the IP less efficient for node-to-node traffic than a NodeInternalIP).\n - `\"Hostname\"` identifies a name of the node. Although every node can be assumed to have a NodeAddress of this type, its exact syntax and semantics are not defined, and are not consistent between different clusters.\n - `\"InternalDNS\"` identifies a DNS name which resolves to an IP address which has the characteristics of a NodeInternalIP. The IP it resolves to may or may not be a listed NodeInternalIP address.\n - `\"InternalIP\"` identifies an IP address which is assigned to one of the node's network interfaces. Every node should have at least one address of this type. An internal IP is normally expected to be reachable from every other node, but may not be visible to hosts outside the cluster. By default it is assumed that kube-apiserver can reach node internal IPs, though it is possible to configure clusters where this is not the case. NodeInternalIP is the default type of node IP, and does not necessarily imply that the IP is ONLY reachable internally. If a node has multiple internal IPs, no specific semantics are assigned to the additional IPs.",
- "enum": [
- "ExternalDNS",
- "ExternalIP",
- "Hostname",
- "InternalDNS",
- "InternalIP"
- ],
+ "description": "Node address type, one of Hostname, ExternalIP or InternalIP.",
"type": "string"
}
},
@@ -7358,14 +7283,7 @@
"type": "string"
},
"type": {
- "description": "Type of node condition.\n\nPossible enum values:\n - `\"DiskPressure\"` means the kubelet is under pressure due to insufficient available disk.\n - `\"MemoryPressure\"` means the kubelet is under pressure due to insufficient available memory.\n - `\"NetworkUnavailable\"` means that network for the node is not correctly configured.\n - `\"PIDPressure\"` means the kubelet is under pressure due to insufficient available PID.\n - `\"Ready\"` means kubelet is healthy and ready to accept pods.",
- "enum": [
- "DiskPressure",
- "MemoryPressure",
- "NetworkUnavailable",
- "PIDPressure",
- "Ready"
- ],
+ "description": "Type of node condition.",
"type": "string"
}
},
@@ -7477,15 +7395,7 @@
"type": "string"
},
"operator": {
- "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.\n\nPossible enum values:\n - `\"DoesNotExist\"`\n - `\"Exists\"`\n - `\"Gt\"`\n - `\"In\"`\n - `\"Lt\"`\n - `\"NotIn\"`",
- "enum": [
- "DoesNotExist",
- "Exists",
- "Gt",
- "In",
- "Lt",
- "NotIn"
- ],
+ "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.\n\n",
"type": "string"
},
"values": {
@@ -7528,7 +7438,7 @@
"properties": {
"configSource": {
"$ref": "#/definitions/io.k8s.api.core.v1.NodeConfigSource",
- "description": "Deprecated. If specified, the source of the node's configuration. The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field. This field is deprecated as of 1.22: https://git.k8s.io/enhancements/keps/sig-node/281-dynamic-kubelet-configuration"
+ "description": "Deprecated: Previously used to specify the source of the node's configuration for the DynamicKubeletConfig feature. This feature is removed from Kubelets as of 1.24 and will be fully removed in 1.26."
},
"externalID": {
"description": "Deprecated. Not all kubelets will set this field. Remove field after 1.13. see: https://issues.k8s.io/61966",
@@ -7619,12 +7529,7 @@
"description": "Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info"
},
"phase": {
- "description": "NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.\n\nPossible enum values:\n - `\"Pending\"` means the node has been created/added by the system, but not configured.\n - `\"Running\"` means the node has been configured and has Kubernetes components running.\n - `\"Terminated\"` means the node has been removed from the cluster.",
- "enum": [
- "Pending",
- "Running",
- "Terminated"
- ],
+ "description": "NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.\n\n",
"type": "string"
},
"volumesAttached": {
@@ -7656,7 +7561,7 @@
"type": "string"
},
"containerRuntimeVersion": {
- "description": "ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).",
+ "description": "ContainerRuntime Version reported by the node through runtime remote API (e.g. containerd://1.4.2).",
"type": "string"
},
"kernelVersion": {
@@ -7772,11 +7677,11 @@
},
"spec": {
"$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeSpec",
- "description": "Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes"
+ "description": "spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes"
},
"status": {
"$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeStatus",
- "description": "Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes"
+ "description": "status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes"
}
},
"type": "object",
@@ -7805,11 +7710,11 @@
},
"spec": {
"$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimSpec",
- "description": "Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims"
+ "description": "spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims"
},
"status": {
"$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimStatus",
- "description": "Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims"
+ "description": "status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims"
}
},
"type": "object",
@@ -7826,29 +7731,24 @@
"properties": {
"lastProbeTime": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time",
- "description": "Last time we probed the condition."
+ "description": "lastProbeTime is the time we probed the condition."
},
"lastTransitionTime": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time",
- "description": "Last time the condition transitioned from one status to another."
+ "description": "lastTransitionTime is the time the condition transitioned from one status to another."
},
"message": {
- "description": "Human-readable message indicating details about last transition.",
+ "description": "message is the human-readable message indicating details about last transition.",
"type": "string"
},
"reason": {
- "description": "Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized.",
+ "description": "reason is a unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized.",
"type": "string"
},
"status": {
"type": "string"
},
"type": {
- "description": "\n\n\nPossible enum values:\n - `\"FileSystemResizePending\"` - controller resize is finished and a file system resize is pending on node\n - `\"Resizing\"` - a user trigger resize of pvc has been started",
- "enum": [
- "FileSystemResizePending",
- "Resizing"
- ],
"type": "string"
}
},
@@ -7866,7 +7766,7 @@
"type": "string"
},
"items": {
- "description": "A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims",
+ "description": "items is a list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims",
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaim"
},
@@ -7897,7 +7797,7 @@
"description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes",
"properties": {
"accessModes": {
- "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1",
+ "description": "accessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1",
"items": {
"type": "string"
},
@@ -7905,22 +7805,22 @@
},
"dataSource": {
"$ref": "#/definitions/io.k8s.api.core.v1.TypedLocalObjectReference",
- "description": "This field can be used to specify either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) * An existing PVC (PersistentVolumeClaim) If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source. If the AnyVolumeDataSource feature gate is enabled, this field will always have the same contents as the DataSourceRef field."
+ "description": "dataSource field can be used to specify either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) * An existing PVC (PersistentVolumeClaim) If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source. If the AnyVolumeDataSource feature gate is enabled, this field will always have the same contents as the DataSourceRef field."
},
"dataSourceRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.TypedLocalObjectReference",
- "description": "Specifies the object from which to populate the volume with data, if a non-empty volume is desired. This may be any local object from a non-empty API group (non core object) or a PersistentVolumeClaim object. When this field is specified, volume binding will only succeed if the type of the specified object matches some installed volume populator or dynamic provisioner. This field will replace the functionality of the DataSource field and as such if both fields are non-empty, they must have the same value. For backwards compatibility, both fields (DataSource and DataSourceRef) will be set to the same value automatically if one of them is empty and the other is non-empty. There are two important differences between DataSource and DataSourceRef: * While DataSource only allows two specific types of objects, DataSourceRef\n allows any non-core object, as well as PersistentVolumeClaim objects.\n* While DataSource ignores disallowed values (dropping them), DataSourceRef\n preserves all values, and generates an error if a disallowed value is\n specified.\n(Alpha) Using this field requires the AnyVolumeDataSource feature gate to be enabled."
+ "description": "dataSourceRef specifies the object from which to populate the volume with data, if a non-empty volume is desired. This may be any local object from a non-empty API group (non core object) or a PersistentVolumeClaim object. When this field is specified, volume binding will only succeed if the type of the specified object matches some installed volume populator or dynamic provisioner. This field will replace the functionality of the DataSource field and as such if both fields are non-empty, they must have the same value. For backwards compatibility, both fields (DataSource and DataSourceRef) will be set to the same value automatically if one of them is empty and the other is non-empty. There are two important differences between DataSource and DataSourceRef: * While DataSource only allows two specific types of objects, DataSourceRef\n allows any non-core object, as well as PersistentVolumeClaim objects.\n* While DataSource ignores disallowed values (dropping them), DataSourceRef\n preserves all values, and generates an error if a disallowed value is\n specified.\n(Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled."
},
"resources": {
"$ref": "#/definitions/io.k8s.api.core.v1.ResourceRequirements",
- "description": "Resources represents the minimum resources the volume should have. If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements that are lower than previous value but must still be higher than capacity recorded in the status field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources"
+ "description": "resources represents the minimum resources the volume should have. If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements that are lower than previous value but must still be higher than capacity recorded in the status field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources"
},
"selector": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector",
- "description": "A label query over volumes to consider for binding."
+ "description": "selector is a label query over volumes to consider for binding."
},
"storageClassName": {
- "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1",
+ "description": "storageClassName is the name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1",
"type": "string"
},
"volumeMode": {
@@ -7928,7 +7828,7 @@
"type": "string"
},
"volumeName": {
- "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.",
+ "description": "volumeName is the binding reference to the PersistentVolume backing this claim.",
"type": "string"
}
},
@@ -7938,7 +7838,7 @@
"description": "PersistentVolumeClaimStatus is the current status of a persistent volume claim.",
"properties": {
"accessModes": {
- "description": "AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1",
+ "description": "accessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1",
"items": {
"type": "string"
},
@@ -7948,18 +7848,18 @@
"additionalProperties": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"
},
- "description": "The storage resource within AllocatedResources tracks the capacity allocated to a PVC. It may be larger than the actual capacity when a volume expansion operation is requested. For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. If a volume expansion capacity request is lowered, allocatedResources is only lowered if there are no expansion operations in progress and if the actual volume capacity is equal or lower than the requested capacity. This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature.",
+ "description": "allocatedResources is the storage resource within AllocatedResources tracks the capacity allocated to a PVC. It may be larger than the actual capacity when a volume expansion operation is requested. For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. If a volume expansion capacity request is lowered, allocatedResources is only lowered if there are no expansion operations in progress and if the actual volume capacity is equal or lower than the requested capacity. This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature.",
"type": "object"
},
"capacity": {
"additionalProperties": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"
},
- "description": "Represents the actual resources of the underlying volume.",
+ "description": "capacity represents the actual resources of the underlying volume.",
"type": "object"
},
"conditions": {
- "description": "Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.",
+ "description": "conditions is the current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.",
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimCondition"
},
@@ -7968,16 +7868,11 @@
"x-kubernetes-patch-strategy": "merge"
},
"phase": {
- "description": "Phase represents the current phase of PersistentVolumeClaim.\n\nPossible enum values:\n - `\"Bound\"` used for PersistentVolumeClaims that are bound\n - `\"Lost\"` used for PersistentVolumeClaims that lost their underlying PersistentVolume. The claim was bound to a PersistentVolume and this volume does not exist any longer and all data on it was lost.\n - `\"Pending\"` used for PersistentVolumeClaims that are not yet bound",
- "enum": [
- "Bound",
- "Lost",
- "Pending"
- ],
+ "description": "phase represents the current phase of PersistentVolumeClaim.\n\n",
"type": "string"
},
"resizeStatus": {
- "description": "ResizeStatus stores status of resize operation. ResizeStatus is not set by default but when expansion is complete resizeStatus is set to empty string by resize controller or kubelet. This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature.",
+ "description": "resizeStatus stores status of resize operation. ResizeStatus is not set by default but when expansion is complete resizeStatus is set to empty string by resize controller or kubelet. This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature.",
"type": "string"
}
},
@@ -8004,11 +7899,11 @@
"description": "PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).",
"properties": {
"claimName": {
- "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims",
+ "description": "claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims",
"type": "string"
},
"readOnly": {
- "description": "Will force the ReadOnly setting in VolumeMounts. Default false.",
+ "description": "readOnly Will force the ReadOnly setting in VolumeMounts. Default false.",
"type": "boolean"
}
},
@@ -8025,7 +7920,7 @@
"type": "string"
},
"items": {
- "description": "List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes",
+ "description": "items is a list of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes",
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolume"
},
@@ -8056,7 +7951,7 @@
"description": "PersistentVolumeSpec is the specification of a persistent volume.",
"properties": {
"accessModes": {
- "description": "AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes",
+ "description": "accessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes",
"items": {
"type": "string"
},
@@ -8064,73 +7959,73 @@
},
"awsElasticBlockStore": {
"$ref": "#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource",
- "description": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore"
+ "description": "awsElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore"
},
"azureDisk": {
"$ref": "#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource",
- "description": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod."
+ "description": "azureDisk represents an Azure Data Disk mount on the host and bind mount to the pod."
},
"azureFile": {
"$ref": "#/definitions/io.k8s.api.core.v1.AzureFilePersistentVolumeSource",
- "description": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod."
+ "description": "azureFile represents an Azure File Service mount on the host and bind mount to the pod."
},
"capacity": {
"additionalProperties": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"
},
- "description": "A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity",
+ "description": "capacity is the description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity",
"type": "object"
},
"cephfs": {
"$ref": "#/definitions/io.k8s.api.core.v1.CephFSPersistentVolumeSource",
- "description": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime"
+ "description": "cephFS represents a Ceph FS mount on the host that shares a pod's lifetime"
},
"cinder": {
"$ref": "#/definitions/io.k8s.api.core.v1.CinderPersistentVolumeSource",
- "description": "Cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md"
+ "description": "cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md"
},
"claimRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference",
- "description": "ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding"
+ "description": "claimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding"
},
"csi": {
"$ref": "#/definitions/io.k8s.api.core.v1.CSIPersistentVolumeSource",
- "description": "CSI represents storage that is handled by an external CSI driver (Beta feature)."
+ "description": "csi represents storage that is handled by an external CSI driver (Beta feature)."
},
"fc": {
"$ref": "#/definitions/io.k8s.api.core.v1.FCVolumeSource",
- "description": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod."
+ "description": "fc represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod."
},
"flexVolume": {
"$ref": "#/definitions/io.k8s.api.core.v1.FlexPersistentVolumeSource",
- "description": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin."
+ "description": "flexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin."
},
"flocker": {
"$ref": "#/definitions/io.k8s.api.core.v1.FlockerVolumeSource",
- "description": "Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running"
+ "description": "flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running"
},
"gcePersistentDisk": {
"$ref": "#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource",
- "description": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk"
+ "description": "gcePersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk"
},
"glusterfs": {
"$ref": "#/definitions/io.k8s.api.core.v1.GlusterfsPersistentVolumeSource",
- "description": "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://examples.k8s.io/volumes/glusterfs/README.md"
+ "description": "glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://examples.k8s.io/volumes/glusterfs/README.md"
},
"hostPath": {
"$ref": "#/definitions/io.k8s.api.core.v1.HostPathVolumeSource",
- "description": "HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath"
+ "description": "hostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath"
},
"iscsi": {
"$ref": "#/definitions/io.k8s.api.core.v1.ISCSIPersistentVolumeSource",
- "description": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin."
+ "description": "iscsi represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin."
},
"local": {
"$ref": "#/definitions/io.k8s.api.core.v1.LocalVolumeSource",
- "description": "Local represents directly-attached storage with node affinity"
+ "description": "local represents directly-attached storage with node affinity"
},
"mountOptions": {
- "description": "A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options",
+ "description": "mountOptions is the list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options",
"items": {
"type": "string"
},
@@ -8138,48 +8033,43 @@
},
"nfs": {
"$ref": "#/definitions/io.k8s.api.core.v1.NFSVolumeSource",
- "description": "NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs"
+ "description": "nfs represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs"
},
"nodeAffinity": {
"$ref": "#/definitions/io.k8s.api.core.v1.VolumeNodeAffinity",
- "description": "NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume."
+ "description": "nodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume."
},
"persistentVolumeReclaimPolicy": {
- "description": "What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming\n\nPossible enum values:\n - `\"Delete\"` means the volume will be deleted from Kubernetes on release from its claim. The volume plugin must support Deletion.\n - `\"Recycle\"` means the volume will be recycled back into the pool of unbound persistent volumes on release from its claim. The volume plugin must support Recycling.\n - `\"Retain\"` means the volume will be left in its current phase (Released) for manual reclamation by the administrator. The default policy is Retain.",
- "enum": [
- "Delete",
- "Recycle",
- "Retain"
- ],
+ "description": "persistentVolumeReclaimPolicy defines what happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming\n\n",
"type": "string"
},
"photonPersistentDisk": {
"$ref": "#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource",
- "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
+ "description": "photonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
},
"portworxVolume": {
"$ref": "#/definitions/io.k8s.api.core.v1.PortworxVolumeSource",
- "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine"
+ "description": "portworxVolume represents a portworx volume attached and mounted on kubelets host machine"
},
"quobyte": {
"$ref": "#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource",
- "description": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime"
+ "description": "quobyte represents a Quobyte mount on the host that shares a pod's lifetime"
},
"rbd": {
"$ref": "#/definitions/io.k8s.api.core.v1.RBDPersistentVolumeSource",
- "description": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md"
+ "description": "rbd represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md"
},
"scaleIO": {
"$ref": "#/definitions/io.k8s.api.core.v1.ScaleIOPersistentVolumeSource",
- "description": "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes."
+ "description": "scaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes."
},
"storageClassName": {
- "description": "Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.",
+ "description": "storageClassName is the name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.",
"type": "string"
},
"storageos": {
"$ref": "#/definitions/io.k8s.api.core.v1.StorageOSPersistentVolumeSource",
- "description": "StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://examples.k8s.io/volumes/storageos/README.md"
+ "description": "storageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://examples.k8s.io/volumes/storageos/README.md"
},
"volumeMode": {
"description": "volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec.",
@@ -8187,7 +8077,7 @@
},
"vsphereVolume": {
"$ref": "#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource",
- "description": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine"
+ "description": "vsphereVolume represents a vSphere volume attached and mounted on kubelets host machine"
}
},
"type": "object"
@@ -8196,22 +8086,15 @@
"description": "PersistentVolumeStatus is the current status of a persistent volume.",
"properties": {
"message": {
- "description": "A human-readable message indicating details about why the volume is in this state.",
+ "description": "message is a human-readable message indicating details about why the volume is in this state.",
"type": "string"
},
"phase": {
- "description": "Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase\n\nPossible enum values:\n - `\"Available\"` used for PersistentVolumes that are not yet bound Available volumes are held by the binder and matched to PersistentVolumeClaims\n - `\"Bound\"` used for PersistentVolumes that are bound\n - `\"Failed\"` used for PersistentVolumes that failed to be correctly recycled or deleted after being released from a claim\n - `\"Pending\"` used for PersistentVolumes that are not available\n - `\"Released\"` used for PersistentVolumes where the bound PersistentVolumeClaim was deleted released volumes must be recycled before becoming available again this phase is used by the persistent volume claim binder to signal to another process to reclaim the resource",
- "enum": [
- "Available",
- "Bound",
- "Failed",
- "Pending",
- "Released"
- ],
+ "description": "phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase\n\n",
"type": "string"
},
"reason": {
- "description": "Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.",
+ "description": "reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.",
"type": "string"
}
},
@@ -8221,11 +8104,11 @@
"description": "Represents a Photon Controller persistent disk resource.",
"properties": {
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
+ "description": "fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
"type": "string"
},
"pdID": {
- "description": "ID that identifies Photon Controller persistent disk",
+ "description": "pdID is the ID that identifies Photon Controller persistent disk",
"type": "string"
}
},
@@ -8296,10 +8179,10 @@
},
"namespaceSelector": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector",
- "description": "A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means \"this pod's namespace\". An empty selector ({}) matches all namespaces. This field is beta-level and is only honored when PodAffinityNamespaceSelector feature is enabled."
+ "description": "A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means \"this pod's namespace\". An empty selector ({}) matches all namespaces."
},
"namespaces": {
- "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"",
+ "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\".",
"items": {
"type": "string"
},
@@ -8359,13 +8242,7 @@
"type": "string"
},
"type": {
- "description": "Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions\n\nPossible enum values:\n - `\"ContainersReady\"` indicates whether all containers in the pod are ready.\n - `\"Initialized\"` means that all init containers in the pod have started successfully.\n - `\"PodScheduled\"` represents status of the scheduling process for this pod.\n - `\"Ready\"` means the pod is able to service requests and should be added to the load balancing pools of all matching services.",
- "enum": [
- "ContainersReady",
- "Initialized",
- "PodScheduled",
- "Ready"
- ],
+ "description": "Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions",
"type": "string"
}
},
@@ -8477,13 +8354,7 @@
"description": "PodReadinessGate contains the reference to a pod condition",
"properties": {
"conditionType": {
- "description": "ConditionType refers to a condition in the pod's condition list with matching type.\n\nPossible enum values:\n - `\"ContainersReady\"` indicates whether all containers in the pod are ready.\n - `\"Initialized\"` means that all init containers in the pod have started successfully.\n - `\"PodScheduled\"` represents status of the scheduling process for this pod.\n - `\"Ready\"` means the pod is able to service requests and should be added to the load balancing pools of all matching services.",
- "enum": [
- "ContainersReady",
- "Initialized",
- "PodScheduled",
- "Ready"
- ],
+ "description": "ConditionType refers to a condition in the pod's condition list with matching type.",
"type": "string"
}
},
@@ -8578,13 +8449,7 @@
"description": "Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy."
},
"dnsPolicy": {
- "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n\nPossible enum values:\n - `\"ClusterFirst\"` indicates that the pod should use cluster DNS first unless hostNetwork is true, if it is available, then fall back on the default (as determined by kubelet) DNS settings.\n - `\"ClusterFirstWithHostNet\"` indicates that the pod should use cluster DNS first, if it is available, then fall back on the default (as determined by kubelet) DNS settings.\n - `\"Default\"` indicates that the pod should use the default (as determined by kubelet) DNS settings.\n - `\"None\"` indicates that the pod should use empty DNS settings. DNS parameters such as nameservers and search paths should be defined via DNSConfig.",
- "enum": [
- "ClusterFirst",
- "ClusterFirstWithHostNet",
- "Default",
- "None"
- ],
+ "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.\n\n",
"type": "string"
},
"enableServiceLinks": {
@@ -8626,7 +8491,7 @@
"type": "string"
},
"imagePullSecrets": {
- "description": "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod",
+ "description": "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod",
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference"
},
@@ -8657,17 +8522,17 @@
},
"os": {
"$ref": "#/definitions/io.k8s.api.core.v1.PodOS",
- "description": "Specifies the OS of the containers in the pod. Some pod and container fields are restricted if this is set.\n\nIf the OS field is set to linux, the following fields must be unset: -securityContext.windowsOptions\n\nIf the OS field is set to windows, following fields must be unset: - spec.hostPID - spec.hostIPC - spec.securityContext.seLinuxOptions - spec.securityContext.seccompProfile - spec.securityContext.fsGroup - spec.securityContext.fsGroupChangePolicy - spec.securityContext.sysctls - spec.shareProcessNamespace - spec.securityContext.runAsUser - spec.securityContext.runAsGroup - spec.securityContext.supplementalGroups - spec.containers[*].securityContext.seLinuxOptions - spec.containers[*].securityContext.seccompProfile - spec.containers[*].securityContext.capabilities - spec.containers[*].securityContext.readOnlyRootFilesystem - spec.containers[*].securityContext.privileged - spec.containers[*].securityContext.allowPrivilegeEscalation - spec.containers[*].securityContext.procMount - spec.containers[*].securityContext.runAsUser - spec.containers[*].securityContext.runAsGroup This is an alpha field and requires the IdentifyPodOS feature"
+ "description": "Specifies the OS of the containers in the pod. Some pod and container fields are restricted if this is set.\n\nIf the OS field is set to linux, the following fields must be unset: -securityContext.windowsOptions\n\nIf the OS field is set to windows, following fields must be unset: - spec.hostPID - spec.hostIPC - spec.securityContext.seLinuxOptions - spec.securityContext.seccompProfile - spec.securityContext.fsGroup - spec.securityContext.fsGroupChangePolicy - spec.securityContext.sysctls - spec.shareProcessNamespace - spec.securityContext.runAsUser - spec.securityContext.runAsGroup - spec.securityContext.supplementalGroups - spec.containers[*].securityContext.seLinuxOptions - spec.containers[*].securityContext.seccompProfile - spec.containers[*].securityContext.capabilities - spec.containers[*].securityContext.readOnlyRootFilesystem - spec.containers[*].securityContext.privileged - spec.containers[*].securityContext.allowPrivilegeEscalation - spec.containers[*].securityContext.procMount - spec.containers[*].securityContext.runAsUser - spec.containers[*].securityContext.runAsGroup This is a beta field and requires the IdentifyPodOS feature"
},
"overhead": {
"additionalProperties": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"
},
- "description": "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/688-pod-overhead/README.md This field is beta-level as of Kubernetes v1.18, and is only honored by servers that enable the PodOverhead feature.",
+ "description": "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/688-pod-overhead/README.md",
"type": "object"
},
"preemptionPolicy": {
- "description": "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is beta-level, gated by the NonPreemptingPriority feature-gate.",
+ "description": "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.",
"type": "string"
},
"priority": {
@@ -8687,16 +8552,11 @@
"type": "array"
},
"restartPolicy": {
- "description": "Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n\nPossible enum values:\n - `\"Always\"`\n - `\"Never\"`\n - `\"OnFailure\"`",
- "enum": [
- "Always",
- "Never",
- "OnFailure"
- ],
+ "description": "Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy\n\n",
"type": "string"
},
"runtimeClassName": {
- "description": "RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the \"legacy\" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class This is a beta feature as of Kubernetes v1.14.",
+ "description": "RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the \"legacy\" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class",
"type": "string"
},
"schedulerName": {
@@ -8781,7 +8641,7 @@
"x-kubernetes-patch-strategy": "merge"
},
"containerStatuses": {
- "description": "The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status",
+ "description": "The list has one entry per container in the manifest. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status",
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.ContainerStatus"
},
@@ -8814,14 +8674,7 @@
"type": "string"
},
"phase": {
- "description": "The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values:\n\nPending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\n\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase\n\nPossible enum values:\n - `\"Failed\"` means that all containers in the pod have terminated, and at least one container has terminated in a failure (exited with a non-zero exit code or was stopped by the system).\n - `\"Pending\"` means the pod has been accepted by the system, but one or more of the containers has not been started. This includes time before being bound to a node, as well as time spent pulling images onto the host.\n - `\"Running\"` means the pod has been bound to a node and all of the containers have been started. At least one container is still running or is in the process of being restarted.\n - `\"Succeeded\"` means that all containers in the pod have voluntarily terminated with a container exit code of 0, and the system is not going to restart any of these containers.\n - `\"Unknown\"` means that for some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod. Deprecated: It isn't being set since 2015 (74da3b14b0c0f658b3bb8d2def5094686d0e9095)",
- "enum": [
- "Failed",
- "Pending",
- "Running",
- "Succeeded",
- "Unknown"
- ],
+ "description": "The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values:\n\nPending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\n\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase\n\n",
"type": "string"
},
"podIP": {
@@ -8838,12 +8691,7 @@
"x-kubernetes-patch-strategy": "merge"
},
"qosClass": {
- "description": "The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md\n\nPossible enum values:\n - `\"BestEffort\"` is the BestEffort qos class.\n - `\"Burstable\"` is the Burstable qos class.\n - `\"Guaranteed\"` is the Guaranteed qos class.",
- "enum": [
- "BestEffort",
- "Burstable",
- "Guaranteed"
- ],
+ "description": "The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md\n\n",
"type": "string"
},
"reason": {
@@ -8947,12 +8795,7 @@
"type": "integer"
},
"protocol": {
- "description": "Protocol is the protocol of the service port of which status is recorded here The supported values are: \"TCP\", \"UDP\", \"SCTP\"\n\nPossible enum values:\n - `\"SCTP\"` is the SCTP protocol.\n - `\"TCP\"` is the TCP protocol.\n - `\"UDP\"` is the UDP protocol.",
- "enum": [
- "SCTP",
- "TCP",
- "UDP"
- ],
+ "description": "Protocol is the protocol of the service port of which status is recorded here The supported values are: \"TCP\", \"UDP\", \"SCTP\"\n\n",
"type": "string"
}
},
@@ -8966,15 +8809,15 @@
"description": "PortworxVolumeSource represents a Portworx volume resource.",
"properties": {
"fsType": {
- "description": "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.",
+ "description": "fSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.",
"type": "string"
},
"readOnly": {
- "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
+ "description": "readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
"type": "boolean"
},
"volumeID": {
- "description": "VolumeID uniquely identifies a Portworx volume",
+ "description": "volumeID uniquely identifies a Portworx volume",
"type": "string"
}
},
@@ -9016,7 +8859,7 @@
},
"grpc": {
"$ref": "#/definitions/io.k8s.api.core.v1.GRPCAction",
- "description": "GRPC specifies an action involving a GRPC port. This is an alpha field and requires enabling GRPCContainerProbe feature gate."
+ "description": "GRPC specifies an action involving a GRPC port. This is a beta field and requires enabling GRPCContainerProbe feature gate."
},
"httpGet": {
"$ref": "#/definitions/io.k8s.api.core.v1.HTTPGetAction",
@@ -9058,12 +8901,12 @@
"description": "Represents a projected volume source",
"properties": {
"defaultMode": {
- "description": "Mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.",
+ "description": "defaultMode are the mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.",
"format": "int32",
"type": "integer"
},
"sources": {
- "description": "list of volume projections",
+ "description": "sources is the list of volume projections",
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.VolumeProjection"
},
@@ -9076,27 +8919,27 @@
"description": "Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.",
"properties": {
"group": {
- "description": "Group to map volume access to Default is no group",
+ "description": "group to map volume access to Default is no group",
"type": "string"
},
"readOnly": {
- "description": "ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.",
+ "description": "readOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.",
"type": "boolean"
},
"registry": {
- "description": "Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes",
+ "description": "registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes",
"type": "string"
},
"tenant": {
- "description": "Tenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin",
+ "description": "tenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin",
"type": "string"
},
"user": {
- "description": "User to map volume access to Defaults to serivceaccount user",
+ "description": "user to map volume access to Defaults to serivceaccount user",
"type": "string"
},
"volume": {
- "description": "Volume is a string that references an already created Quobyte volume by name.",
+ "description": "volume is a string that references an already created Quobyte volume by name.",
"type": "string"
}
},
@@ -9110,38 +8953,38 @@
"description": "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.",
"properties": {
"fsType": {
- "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd",
+ "description": "fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd",
"type": "string"
},
"image": {
- "description": "The rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
+ "description": "image is the rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
"type": "string"
},
"keyring": {
- "description": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
+ "description": "keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
"type": "string"
},
"monitors": {
- "description": "A collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
+ "description": "monitors is a collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
"items": {
"type": "string"
},
"type": "array"
},
"pool": {
- "description": "The rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
+ "description": "pool is the rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
"type": "string"
},
"readOnly": {
- "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
+ "description": "readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
"type": "boolean"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.SecretReference",
- "description": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it"
+ "description": "secretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it"
},
"user": {
- "description": "The rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
+ "description": "user is the rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
"type": "string"
}
},
@@ -9155,38 +8998,38 @@
"description": "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.",
"properties": {
"fsType": {
- "description": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd",
+ "description": "fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd",
"type": "string"
},
"image": {
- "description": "The rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
+ "description": "image is the rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
"type": "string"
},
"keyring": {
- "description": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
+ "description": "keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
"type": "string"
},
"monitors": {
- "description": "A collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
+ "description": "monitors is a collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
"items": {
"type": "string"
},
"type": "array"
},
"pool": {
- "description": "The rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
+ "description": "pool is the rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
"type": "string"
},
"readOnly": {
- "description": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
+ "description": "readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
"type": "boolean"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference",
- "description": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it"
+ "description": "secretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it"
},
"user": {
- "description": "The rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
+ "description": "user is the rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it",
"type": "string"
}
},
@@ -9545,43 +9388,43 @@
"description": "ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume",
"properties": {
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\"",
+ "description": "fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\"",
"type": "string"
},
"gateway": {
- "description": "The host address of the ScaleIO API Gateway.",
+ "description": "gateway is the host address of the ScaleIO API Gateway.",
"type": "string"
},
"protectionDomain": {
- "description": "The name of the ScaleIO Protection Domain for the configured storage.",
+ "description": "protectionDomain is the name of the ScaleIO Protection Domain for the configured storage.",
"type": "string"
},
"readOnly": {
- "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
+ "description": "readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
"type": "boolean"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.SecretReference",
- "description": "SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail."
+ "description": "secretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail."
},
"sslEnabled": {
- "description": "Flag to enable/disable SSL communication with Gateway, default false",
+ "description": "sslEnabled is the flag to enable/disable SSL communication with Gateway, default false",
"type": "boolean"
},
"storageMode": {
- "description": "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.",
+ "description": "storageMode indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.",
"type": "string"
},
"storagePool": {
- "description": "The ScaleIO Storage Pool associated with the protection domain.",
+ "description": "storagePool is the ScaleIO Storage Pool associated with the protection domain.",
"type": "string"
},
"system": {
- "description": "The name of the storage system as configured in ScaleIO.",
+ "description": "system is the name of the storage system as configured in ScaleIO.",
"type": "string"
},
"volumeName": {
- "description": "The name of a volume already created in the ScaleIO system that is associated with this volume source.",
+ "description": "volumeName is the name of a volume already created in the ScaleIO system that is associated with this volume source.",
"type": "string"
}
},
@@ -9596,43 +9439,43 @@
"description": "ScaleIOVolumeSource represents a persistent ScaleIO volume",
"properties": {
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\".",
+ "description": "fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\".",
"type": "string"
},
"gateway": {
- "description": "The host address of the ScaleIO API Gateway.",
+ "description": "gateway is the host address of the ScaleIO API Gateway.",
"type": "string"
},
"protectionDomain": {
- "description": "The name of the ScaleIO Protection Domain for the configured storage.",
+ "description": "protectionDomain is the name of the ScaleIO Protection Domain for the configured storage.",
"type": "string"
},
"readOnly": {
- "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
+ "description": "readOnly Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
"type": "boolean"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference",
- "description": "SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail."
+ "description": "secretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail."
},
"sslEnabled": {
- "description": "Flag to enable/disable SSL communication with Gateway, default false",
+ "description": "sslEnabled Flag enable/disable SSL communication with Gateway, default false",
"type": "boolean"
},
"storageMode": {
- "description": "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.",
+ "description": "storageMode indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.",
"type": "string"
},
"storagePool": {
- "description": "The ScaleIO Storage Pool associated with the protection domain.",
+ "description": "storagePool is the ScaleIO Storage Pool associated with the protection domain.",
"type": "string"
},
"system": {
- "description": "The name of the storage system as configured in ScaleIO.",
+ "description": "system is the name of the storage system as configured in ScaleIO.",
"type": "string"
},
"volumeName": {
- "description": "The name of a volume already created in the ScaleIO system that is associated with this volume source.",
+ "description": "volumeName is the name of a volume already created in the ScaleIO system that is associated with this volume source.",
"type": "string"
}
},
@@ -9661,25 +9504,11 @@
"description": "A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator that relates the scope name and values.",
"properties": {
"operator": {
- "description": "Represents a scope's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist.\n\nPossible enum values:\n - `\"DoesNotExist\"`\n - `\"Exists\"`\n - `\"In\"`\n - `\"NotIn\"`",
- "enum": [
- "DoesNotExist",
- "Exists",
- "In",
- "NotIn"
- ],
+ "description": "Represents a scope's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist.\n\n",
"type": "string"
},
"scopeName": {
- "description": "The name of the scope that the selector applies to.\n\nPossible enum values:\n - `\"BestEffort\"` Match all pod objects that have best effort quality of service\n - `\"CrossNamespacePodAffinity\"` Match all pod objects that have cross-namespace pod (anti)affinity mentioned. This is a beta feature enabled by the PodAffinityNamespaceSelector feature flag.\n - `\"NotBestEffort\"` Match all pod objects that do not have best effort quality of service\n - `\"NotTerminating\"` Match all pod objects where spec.activeDeadlineSeconds is nil\n - `\"PriorityClass\"` Match all pod objects that have priority class mentioned\n - `\"Terminating\"` Match all pod objects where spec.activeDeadlineSeconds >=0",
- "enum": [
- "BestEffort",
- "CrossNamespacePodAffinity",
- "NotBestEffort",
- "NotTerminating",
- "PriorityClass",
- "Terminating"
- ],
+ "description": "The name of the scope that the selector applies to.\n\n",
"type": "string"
},
"values": {
@@ -9704,12 +9533,7 @@
"type": "string"
},
"type": {
- "description": "type indicates which kind of seccomp profile will be applied. Valid options are:\n\nLocalhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied.\n\nPossible enum values:\n - `\"Localhost\"` indicates a profile defined in a file on the node should be used. The file's location relative to /seccomp.\n - `\"RuntimeDefault\"` represents the default container runtime seccomp profile.\n - `\"Unconfined\"` indicates no seccomp profile is applied (A.K.A. unconfined).",
- "enum": [
- "Localhost",
- "RuntimeDefault",
- "Unconfined"
- ],
+ "description": "type indicates which kind of seccomp profile will be applied. Valid options are:\n\nLocalhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied.\n\n",
"type": "string"
}
},
@@ -9849,7 +9673,7 @@
"description": "Adapts a secret into a projected volume.\n\nThe contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.",
"properties": {
"items": {
- "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.",
+ "description": "items if unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.",
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath"
},
@@ -9860,7 +9684,7 @@
"type": "string"
},
"optional": {
- "description": "Specify whether the Secret or its key must be defined",
+ "description": "optional field specify whether the Secret or its key must be defined",
"type": "boolean"
}
},
@@ -9870,11 +9694,11 @@
"description": "SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace",
"properties": {
"name": {
- "description": "Name is unique within a namespace to reference a secret resource.",
+ "description": "name is unique within a namespace to reference a secret resource.",
"type": "string"
},
"namespace": {
- "description": "Namespace defines the space within which the secret name must be unique.",
+ "description": "namespace defines the space within which the secret name must be unique.",
"type": "string"
}
},
@@ -9885,23 +9709,23 @@
"description": "Adapts a Secret into a volume.\n\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.",
"properties": {
"defaultMode": {
- "description": "Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.",
+ "description": "defaultMode is Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.",
"format": "int32",
"type": "integer"
},
"items": {
- "description": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.",
+ "description": "items If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.",
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.KeyToPath"
},
"type": "array"
},
"optional": {
- "description": "Specify whether the Secret or its keys must be defined",
+ "description": "optional field specify whether the Secret or its keys must be defined",
"type": "boolean"
},
"secretName": {
- "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret",
+ "description": "secretName is the name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret",
"type": "string"
}
},
@@ -10019,7 +9843,7 @@
"description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata"
},
"secrets": {
- "description": "Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret",
+ "description": "Secrets is a list of the secrets in the same namespace that pods running using this ServiceAccount are allowed to use. Pods are only limited to this list if this service account has a \"kubernetes.io/enforce-mountable-secrets\" annotation set to \"true\". This field should not be used to find auto-generated service account token secrets for use outside of pods. Instead, tokens can be requested directly using the TokenRequest API, or service account token secrets can be manually created. More info: https://kubernetes.io/docs/concepts/configuration/secret",
"items": {
"$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference"
},
@@ -10076,16 +9900,16 @@
"description": "ServiceAccountTokenProjection represents a projected service account token volume. This projection can be used to insert a service account token into the pods runtime filesystem for use against APIs (Kubernetes API Server or otherwise).",
"properties": {
"audience": {
- "description": "Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.",
+ "description": "audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.",
"type": "string"
},
"expirationSeconds": {
- "description": "ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.",
+ "description": "expirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.",
"format": "int64",
"type": "integer"
},
"path": {
- "description": "Path is the path relative to the mount point of the file to project the token into.",
+ "description": "path is the path relative to the mount point of the file to project the token into.",
"type": "string"
}
},
@@ -10133,7 +9957,7 @@
"description": "ServicePort contains information on service's port.",
"properties": {
"appProtocol": {
- "description": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.",
+ "description": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.",
"type": "string"
},
"name": {
@@ -10151,12 +9975,7 @@
"type": "integer"
},
"protocol": {
- "description": "The IP protocol for this port. Supports \"TCP\", \"UDP\", and \"SCTP\". Default is TCP.\n\nPossible enum values:\n - `\"SCTP\"` is the SCTP protocol.\n - `\"TCP\"` is the TCP protocol.\n - `\"UDP\"` is the UDP protocol.",
- "enum": [
- "SCTP",
- "TCP",
- "UDP"
- ],
+ "description": "The IP protocol for this port. Supports \"TCP\", \"UDP\", and \"SCTP\". Default is TCP.\n\n",
"type": "string"
},
"targetPort": {
@@ -10173,7 +9992,7 @@
"description": "ServiceSpec describes the attributes that a user creates on a service.",
"properties": {
"allocateLoadBalancerNodePorts": {
- "description": "allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is \"true\". It may be set to \"false\" if the cluster load-balancer does not rely on NodePorts. If the caller requests specific NodePorts (by specifying a value), those requests will be respected, regardless of this field. This field may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type. This field is beta-level and is only honored by servers that enable the ServiceLBNodePortControl feature.",
+ "description": "allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is \"true\". It may be set to \"false\" if the cluster load-balancer does not rely on NodePorts. If the caller requests specific NodePorts (by specifying a value), those requests will be respected, regardless of this field. This field may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type.",
"type": "boolean"
},
"clusterIP": {
@@ -10200,11 +10019,7 @@
"type": "string"
},
"externalTrafficPolicy": {
- "description": "externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \"Local\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \"Cluster\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.\n\nPossible enum values:\n - `\"Cluster\"` specifies node-global (legacy) behavior.\n - `\"Local\"` specifies node-local endpoints behavior.",
- "enum": [
- "Cluster",
- "Local"
- ],
+ "description": "externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \"Local\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \"Cluster\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.\n\n",
"type": "string"
},
"healthCheckNodePort": {
@@ -10233,7 +10048,7 @@
"type": "string"
},
"loadBalancerIP": {
- "description": "Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.",
+ "description": "Only applies to Service Type: LoadBalancer. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature. Deprecated: This field was under-specified and its meaning varies across implementations, and it cannot support dual-stack. As of Kubernetes v1.24, users are encouraged to use implementation-specific annotations when available. This field may be removed in a future API version.",
"type": "string"
},
"loadBalancerSourceRanges": {
@@ -10270,11 +10085,7 @@
"x-kubernetes-map-type": "atomic"
},
"sessionAffinity": {
- "description": "Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n\nPossible enum values:\n - `\"ClientIP\"` is the Client IP based.\n - `\"None\"` - no session affinity.",
- "enum": [
- "ClientIP",
- "None"
- ],
+ "description": "Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies\n\n",
"type": "string"
},
"sessionAffinityConfig": {
@@ -10282,13 +10093,7 @@
"description": "sessionAffinityConfig contains the configurations of session affinity."
},
"type": {
- "description": "type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object or EndpointSlice objects. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a virtual IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the same endpoints as the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the same endpoints as the clusterIP. \"ExternalName\" aliases this service to the specified externalName. Several other fields do not apply to ExternalName services. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types\n\nPossible enum values:\n - `\"ClusterIP\"` means a service will only be accessible inside the cluster, via the cluster IP.\n - `\"ExternalName\"` means a service consists of only a reference to an external name that kubedns or equivalent will return as a CNAME record, with no exposing or proxying of any pods involved.\n - `\"LoadBalancer\"` means a service will be exposed via an external load balancer (if the cloud provider supports it), in addition to 'NodePort' type.\n - `\"NodePort\"` means a service will be exposed on one port of every node, in addition to 'ClusterIP' type.",
- "enum": [
- "ClusterIP",
- "ExternalName",
- "LoadBalancer",
- "NodePort"
- ],
+ "description": "type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object or EndpointSlice objects. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a virtual IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the same endpoints as the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the same endpoints as the clusterIP. \"ExternalName\" aliases this service to the specified externalName. Several other fields do not apply to ExternalName services. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types\n\n",
"type": "string"
}
},
@@ -10331,23 +10136,23 @@
"description": "Represents a StorageOS persistent volume resource.",
"properties": {
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
+ "description": "fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
"type": "string"
},
"readOnly": {
- "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
+ "description": "readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
"type": "boolean"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.ObjectReference",
- "description": "SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted."
+ "description": "secretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted."
},
"volumeName": {
- "description": "VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.",
+ "description": "volumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.",
"type": "string"
},
"volumeNamespace": {
- "description": "VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.",
+ "description": "volumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.",
"type": "string"
}
},
@@ -10357,23 +10162,23 @@
"description": "Represents a StorageOS persistent volume resource.",
"properties": {
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
+ "description": "fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
"type": "string"
},
"readOnly": {
- "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
+ "description": "readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.",
"type": "boolean"
},
"secretRef": {
"$ref": "#/definitions/io.k8s.api.core.v1.LocalObjectReference",
- "description": "SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted."
+ "description": "secretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted."
},
"volumeName": {
- "description": "VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.",
+ "description": "volumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.",
"type": "string"
},
"volumeNamespace": {
- "description": "VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.",
+ "description": "volumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.",
"type": "string"
}
},
@@ -10418,12 +10223,7 @@
"description": "The node this Taint is attached to has the \"effect\" on any pod that does not tolerate the Taint.",
"properties": {
"effect": {
- "description": "Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\n\nPossible enum values:\n - `\"NoExecute\"` Evict any already-running pods that do not tolerate the taint. Currently enforced by NodeController.\n - `\"NoSchedule\"` Do not allow new pods to schedule onto the node unless they tolerate the taint, but allow all pods submitted to Kubelet without going through the scheduler to start, and allow all already-running pods to continue running. Enforced by the scheduler.\n - `\"PreferNoSchedule\"` Like TaintEffectNoSchedule, but the scheduler tries not to schedule new pods onto the node, rather than prohibiting new pods from scheduling onto the node entirely. Enforced by the scheduler.",
- "enum": [
- "NoExecute",
- "NoSchedule",
- "PreferNoSchedule"
- ],
+ "description": "Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.\n\n",
"type": "string"
},
"key": {
@@ -10449,12 +10249,7 @@
"description": "The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator .",
"properties": {
"effect": {
- "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.\n\nPossible enum values:\n - `\"NoExecute\"` Evict any already-running pods that do not tolerate the taint. Currently enforced by NodeController.\n - `\"NoSchedule\"` Do not allow new pods to schedule onto the node unless they tolerate the taint, but allow all pods submitted to Kubelet without going through the scheduler to start, and allow all already-running pods to continue running. Enforced by the scheduler.\n - `\"PreferNoSchedule\"` Like TaintEffectNoSchedule, but the scheduler tries not to schedule new pods onto the node, rather than prohibiting new pods from scheduling onto the node entirely. Enforced by the scheduler.",
- "enum": [
- "NoExecute",
- "NoSchedule",
- "PreferNoSchedule"
- ],
+ "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.\n\n",
"type": "string"
},
"key": {
@@ -10462,11 +10257,7 @@
"type": "string"
},
"operator": {
- "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.\n\nPossible enum values:\n - `\"Equal\"`\n - `\"Exists\"`",
- "enum": [
- "Equal",
- "Exists"
- ],
+ "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.\n\n",
"type": "string"
},
"tolerationSeconds": {
@@ -10524,20 +10315,21 @@
"description": "LabelSelector is used to find matching pods. Pods that match this label selector are counted to determine the number of pods in their corresponding topology domain."
},
"maxSkew": {
- "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.",
+ "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. The global minimum is the minimum number of matching pods in an eligible domain or zero if the number of eligible domains is less than MinDomains. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 2/2/1: In this case, the global minimum is 1. | zone1 | zone2 | zone3 | | P P | P P | P | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 2/2/2; scheduling it onto zone1(zone2) would make the ActualSkew(3-1) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.",
+ "format": "int32",
+ "type": "integer"
+ },
+ "minDomains": {
+ "description": "MinDomains indicates a minimum number of eligible domains. When the number of eligible domains with matching topology keys is less than minDomains, Pod Topology Spread treats \"global minimum\" as 0, and then the calculation of Skew is performed. And when the number of eligible domains with matching topology keys equals or greater than minDomains, this value has no effect on scheduling. As a result, when the number of eligible domains is less than minDomains, scheduler won't schedule more than maxSkew Pods to those domains. If value is nil, the constraint behaves as if MinDomains is equal to 1. Valid values are integers greater than 0. When value is not nil, WhenUnsatisfiable must be DoNotSchedule.\n\nFor example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same labelSelector spread as 2/2/2: | zone1 | zone2 | zone3 | | P P | P P | P P | The number of domains is less than 5(MinDomains), so \"global minimum\" is treated as 0. In this situation, new pod with the same labelSelector cannot be scheduled, because computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones, it will violate MaxSkew.\n\nThis is an alpha field and requires enabling MinDomainsInPodTopologySpread feature gate.",
"format": "int32",
"type": "integer"
},
"topologyKey": {
- "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.",
+ "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each as a \"bucket\", and try to put balanced number of pods into each bucket. We define a domain as a particular instance of a topology. Also, we define an eligible domain as a domain whose nodes match the node selector. e.g. If TopologyKey is \"kubernetes.io/hostname\", each Node is a domain of that topology. And, if TopologyKey is \"topology.kubernetes.io/zone\", each zone is a domain of that topology. It's a required field.",
"type": "string"
},
"whenUnsatisfiable": {
- "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.\n\nPossible enum values:\n - `\"DoNotSchedule\"` instructs the scheduler not to schedule the pod when constraints are not satisfied.\n - `\"ScheduleAnyway\"` instructs the scheduler to schedule the pod even if constraints are not satisfied.",
- "enum": [
- "DoNotSchedule",
- "ScheduleAnyway"
- ],
+ "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.\n\n",
"type": "string"
}
},
@@ -10576,123 +10368,123 @@
"properties": {
"awsElasticBlockStore": {
"$ref": "#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource",
- "description": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore"
+ "description": "awsElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore"
},
"azureDisk": {
"$ref": "#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource",
- "description": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod."
+ "description": "azureDisk represents an Azure Data Disk mount on the host and bind mount to the pod."
},
"azureFile": {
"$ref": "#/definitions/io.k8s.api.core.v1.AzureFileVolumeSource",
- "description": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod."
+ "description": "azureFile represents an Azure File Service mount on the host and bind mount to the pod."
},
"cephfs": {
"$ref": "#/definitions/io.k8s.api.core.v1.CephFSVolumeSource",
- "description": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime"
+ "description": "cephFS represents a Ceph FS mount on the host that shares a pod's lifetime"
},
"cinder": {
"$ref": "#/definitions/io.k8s.api.core.v1.CinderVolumeSource",
- "description": "Cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md"
+ "description": "cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md"
},
"configMap": {
"$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapVolumeSource",
- "description": "ConfigMap represents a configMap that should populate this volume"
+ "description": "configMap represents a configMap that should populate this volume"
},
"csi": {
"$ref": "#/definitions/io.k8s.api.core.v1.CSIVolumeSource",
- "description": "CSI (Container Storage Interface) represents ephemeral storage that is handled by certain external CSI drivers (Beta feature)."
+ "description": "csi (Container Storage Interface) represents ephemeral storage that is handled by certain external CSI drivers (Beta feature)."
},
"downwardAPI": {
"$ref": "#/definitions/io.k8s.api.core.v1.DownwardAPIVolumeSource",
- "description": "DownwardAPI represents downward API about the pod that should populate this volume"
+ "description": "downwardAPI represents downward API about the pod that should populate this volume"
},
"emptyDir": {
"$ref": "#/definitions/io.k8s.api.core.v1.EmptyDirVolumeSource",
- "description": "EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir"
+ "description": "emptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir"
},
"ephemeral": {
"$ref": "#/definitions/io.k8s.api.core.v1.EphemeralVolumeSource",
- "description": "Ephemeral represents a volume that is handled by a cluster storage driver. The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, and deleted when the pod is removed.\n\nUse this if: a) the volume is only needed while the pod runs, b) features of normal volumes like restoring from snapshot or capacity\n tracking are needed,\nc) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning through\n a PersistentVolumeClaim (see EphemeralVolumeSource for more\n information on the connection between this volume type\n and PersistentVolumeClaim).\n\nUse PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod.\n\nUse CSI for light-weight local ephemeral volumes if the CSI driver is meant to be used that way - see the documentation of the driver for more information.\n\nA pod can use both types of ephemeral volumes and persistent volumes at the same time."
+ "description": "ephemeral represents a volume that is handled by a cluster storage driver. The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, and deleted when the pod is removed.\n\nUse this if: a) the volume is only needed while the pod runs, b) features of normal volumes like restoring from snapshot or capacity\n tracking are needed,\nc) the storage driver is specified through a storage class, and d) the storage driver supports dynamic volume provisioning through\n a PersistentVolumeClaim (see EphemeralVolumeSource for more\n information on the connection between this volume type\n and PersistentVolumeClaim).\n\nUse PersistentVolumeClaim or one of the vendor-specific APIs for volumes that persist for longer than the lifecycle of an individual pod.\n\nUse CSI for light-weight local ephemeral volumes if the CSI driver is meant to be used that way - see the documentation of the driver for more information.\n\nA pod can use both types of ephemeral volumes and persistent volumes at the same time."
},
"fc": {
"$ref": "#/definitions/io.k8s.api.core.v1.FCVolumeSource",
- "description": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod."
+ "description": "fc represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod."
},
"flexVolume": {
"$ref": "#/definitions/io.k8s.api.core.v1.FlexVolumeSource",
- "description": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin."
+ "description": "flexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin."
},
"flocker": {
"$ref": "#/definitions/io.k8s.api.core.v1.FlockerVolumeSource",
- "description": "Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running"
+ "description": "flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running"
},
"gcePersistentDisk": {
"$ref": "#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource",
- "description": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk"
+ "description": "gcePersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk"
},
"gitRepo": {
"$ref": "#/definitions/io.k8s.api.core.v1.GitRepoVolumeSource",
- "description": "GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container."
+ "description": "gitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container."
},
"glusterfs": {
"$ref": "#/definitions/io.k8s.api.core.v1.GlusterfsVolumeSource",
- "description": "Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md"
+ "description": "glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md"
},
"hostPath": {
"$ref": "#/definitions/io.k8s.api.core.v1.HostPathVolumeSource",
- "description": "HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath"
+ "description": "hostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath"
},
"iscsi": {
"$ref": "#/definitions/io.k8s.api.core.v1.ISCSIVolumeSource",
- "description": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md"
+ "description": "iscsi represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md"
},
"name": {
- "description": "Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
+ "description": "name of the volume. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
"type": "string"
},
"nfs": {
"$ref": "#/definitions/io.k8s.api.core.v1.NFSVolumeSource",
- "description": "NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs"
+ "description": "nfs represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs"
},
"persistentVolumeClaim": {
"$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource",
- "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims"
+ "description": "persistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims"
},
"photonPersistentDisk": {
"$ref": "#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource",
- "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
+ "description": "photonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
},
"portworxVolume": {
"$ref": "#/definitions/io.k8s.api.core.v1.PortworxVolumeSource",
- "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine"
+ "description": "portworxVolume represents a portworx volume attached and mounted on kubelets host machine"
},
"projected": {
"$ref": "#/definitions/io.k8s.api.core.v1.ProjectedVolumeSource",
- "description": "Items for all in one resources secrets, configmaps, and downward API"
+ "description": "projected items for all in one resources secrets, configmaps, and downward API"
},
"quobyte": {
"$ref": "#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource",
- "description": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime"
+ "description": "quobyte represents a Quobyte mount on the host that shares a pod's lifetime"
},
"rbd": {
"$ref": "#/definitions/io.k8s.api.core.v1.RBDVolumeSource",
- "description": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md"
+ "description": "rbd represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md"
},
"scaleIO": {
"$ref": "#/definitions/io.k8s.api.core.v1.ScaleIOVolumeSource",
- "description": "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes."
+ "description": "scaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes."
},
"secret": {
"$ref": "#/definitions/io.k8s.api.core.v1.SecretVolumeSource",
- "description": "Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret"
+ "description": "secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret"
},
"storageos": {
"$ref": "#/definitions/io.k8s.api.core.v1.StorageOSVolumeSource",
- "description": "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes."
+ "description": "storageOS represents a StorageOS volume attached and mounted on Kubernetes nodes."
},
"vsphereVolume": {
"$ref": "#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource",
- "description": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine"
+ "description": "vsphereVolume represents a vSphere volume attached and mounted on kubelets host machine"
}
},
"required": [
@@ -10757,7 +10549,7 @@
"properties": {
"required": {
"$ref": "#/definitions/io.k8s.api.core.v1.NodeSelector",
- "description": "Required specifies hard node constraints that must be met."
+ "description": "required specifies hard node constraints that must be met."
}
},
"type": "object"
@@ -10767,19 +10559,19 @@
"properties": {
"configMap": {
"$ref": "#/definitions/io.k8s.api.core.v1.ConfigMapProjection",
- "description": "information about the configMap data to project"
+ "description": "configMap information about the configMap data to project"
},
"downwardAPI": {
"$ref": "#/definitions/io.k8s.api.core.v1.DownwardAPIProjection",
- "description": "information about the downwardAPI data to project"
+ "description": "downwardAPI information about the downwardAPI data to project"
},
"secret": {
"$ref": "#/definitions/io.k8s.api.core.v1.SecretProjection",
- "description": "information about the secret data to project"
+ "description": "secret information about the secret data to project"
},
"serviceAccountToken": {
"$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccountTokenProjection",
- "description": "information about the serviceAccountToken data to project"
+ "description": "serviceAccountToken is information about the serviceAccountToken data to project"
}
},
"type": "object"
@@ -10788,19 +10580,19 @@
"description": "Represents a vSphere volume resource.",
"properties": {
"fsType": {
- "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
+ "description": "fsType is filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.",
"type": "string"
},
"storagePolicyID": {
- "description": "Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.",
+ "description": "storagePolicyID is the storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.",
"type": "string"
},
"storagePolicyName": {
- "description": "Storage Policy Based Management (SPBM) profile name.",
+ "description": "storagePolicyName is the storage Policy Based Management (SPBM) profile name.",
"type": "string"
},
"volumePath": {
- "description": "Path that identifies vSphere volume vmdk",
+ "description": "volumePath is the path that identifies vSphere volume vmdk",
"type": "string"
}
},
@@ -10854,7 +10646,7 @@
"description": "Endpoint represents a single logical \"backend\" implementing a service.",
"properties": {
"addresses": {
- "description": "addresses of this endpoint. The contents of this field are interpreted according to the corresponding EndpointSlice addressType field. Consumers must handle different types of addresses in the context of their own capabilities. This must contain at least one address but no more than 100.",
+ "description": "addresses of this endpoint. The contents of this field are interpreted according to the corresponding EndpointSlice addressType field. Consumers must handle different types of addresses in the context of their own capabilities. This must contain at least one address but no more than 100. These are all assumed to be fungible and clients may choose to only use the first element. Refer to: https://issue.k8s.io/106267",
"items": {
"type": "string"
},
@@ -10934,7 +10726,7 @@
"description": "EndpointPort represents a Port used by an EndpointSlice",
"properties": {
"appProtocol": {
- "description": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.",
+ "description": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.",
"type": "string"
},
"name": {
@@ -10958,12 +10750,7 @@
"description": "EndpointSlice represents a subset of the endpoints that implement a service. For a given service there may be multiple EndpointSlice objects, selected by labels, which must be joined to produce the full set of endpoints.",
"properties": {
"addressType": {
- "description": "addressType specifies the type of address carried by this EndpointSlice. All addresses in this slice must be the same type. This field is immutable after creation. The following address types are currently supported: * IPv4: Represents an IPv4 Address. * IPv6: Represents an IPv6 Address. * FQDN: Represents a Fully Qualified Domain Name.\n\nPossible enum values:\n - `\"FQDN\"` represents a FQDN.\n - `\"IPv4\"` represents an IPv4 Address.\n - `\"IPv6\"` represents an IPv6 Address.",
- "enum": [
- "FQDN",
- "IPv4",
- "IPv6"
- ],
+ "description": "addressType specifies the type of address carried by this EndpointSlice. All addresses in this slice must be the same type. This field is immutable after creation. The following address types are currently supported: * IPv4: Represents an IPv4 Address. * IPv6: Represents an IPv6 Address. * FQDN: Represents a Fully Qualified Domain Name.\n\n",
"type": "string"
},
"apiVersion": {
@@ -11060,7 +10847,7 @@
"description": "Endpoint represents a single logical \"backend\" implementing a service.",
"properties": {
"addresses": {
- "description": "addresses of this endpoint. The contents of this field are interpreted according to the corresponding EndpointSlice addressType field. Consumers must handle different types of addresses in the context of their own capabilities. This must contain at least one address but no more than 100.",
+ "description": "addresses of this endpoint. The contents of this field are interpreted according to the corresponding EndpointSlice addressType field. Consumers must handle different types of addresses in the context of their own capabilities. This must contain at least one address but no more than 100. These are all assumed to be fungible and clients may choose to only use the first element. Refer to: https://issue.k8s.io/106267",
"items": {
"type": "string"
},
@@ -11136,7 +10923,7 @@
"description": "EndpointPort represents a Port used by an EndpointSlice",
"properties": {
"appProtocol": {
- "description": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.",
+ "description": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.",
"type": "string"
},
"name": {
@@ -12983,6 +12770,10 @@
"spec": {
"$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicySpec",
"description": "Specification of the desired behavior for this NetworkPolicy."
+ },
+ "status": {
+ "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicyStatus",
+ "description": "Status is the current state of the NetworkPolicy. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status"
}
},
"type": "object",
@@ -13140,6 +12931,25 @@
],
"type": "object"
},
+ "io.k8s.api.networking.v1.NetworkPolicyStatus": {
+ "description": "NetworkPolicyStatus describe the current state of the NetworkPolicy.",
+ "properties": {
+ "conditions": {
+ "description": "Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. Current service state",
+ "items": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Condition"
+ },
+ "type": "array",
+ "x-kubernetes-list-map-keys": [
+ "type"
+ ],
+ "x-kubernetes-list-type": "map",
+ "x-kubernetes-patch-merge-key": "type",
+ "x-kubernetes-patch-strategy": "merge"
+ }
+ },
+ "type": "object"
+ },
"io.k8s.api.networking.v1.ServiceBackendPort": {
"description": "ServiceBackendPort is the service port being referenced.",
"properties": {
@@ -13189,7 +12999,7 @@
},
"overhead": {
"$ref": "#/definitions/io.k8s.api.node.v1.Overhead",
- "description": "Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. For more details, see\n https://kubernetes.io/docs/concepts/scheduling-eviction/pod-overhead/\nThis field is in beta starting v1.18 and is only honored by servers that enable the PodOverhead feature."
+ "description": "Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. For more details, see\n https://kubernetes.io/docs/concepts/scheduling-eviction/pod-overhead/"
},
"scheduling": {
"$ref": "#/definitions/io.k8s.api.node.v1.Scheduling",
@@ -13265,129 +13075,6 @@
},
"type": "object"
},
- "io.k8s.api.node.v1alpha1.Overhead": {
- "description": "Overhead structure represents the resource overhead associated with running a pod.",
- "properties": {
- "podFixed": {
- "additionalProperties": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"
- },
- "description": "PodFixed represents the fixed resource overhead associated with running a pod.",
- "type": "object"
- }
- },
- "type": "object"
- },
- "io.k8s.api.node.v1alpha1.RuntimeClass": {
- "description": "RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod. For more details, see https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class",
- "properties": {
- "apiVersion": {
- "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
- "type": "string"
- },
- "kind": {
- "description": "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/sig-architecture/api-conventions.md#types-kinds",
- "type": "string"
- },
- "metadata": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta",
- "description": "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata"
- },
- "spec": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClassSpec",
- "description": "Specification of the RuntimeClass More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status"
- }
- },
- "required": [
- "spec"
- ],
- "type": "object",
- "x-kubernetes-group-version-kind": [
- {
- "group": "node.k8s.io",
- "kind": "RuntimeClass",
- "version": "v1alpha1"
- }
- ]
- },
- "io.k8s.api.node.v1alpha1.RuntimeClassList": {
- "description": "RuntimeClassList is a list of RuntimeClass objects.",
- "properties": {
- "apiVersion": {
- "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
- "type": "string"
- },
- "items": {
- "description": "Items is a list of schema objects.",
- "items": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClass"
- },
- "type": "array"
- },
- "kind": {
- "description": "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/sig-architecture/api-conventions.md#types-kinds",
- "type": "string"
- },
- "metadata": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta",
- "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata"
- }
- },
- "required": [
- "items"
- ],
- "type": "object",
- "x-kubernetes-group-version-kind": [
- {
- "group": "node.k8s.io",
- "kind": "RuntimeClassList",
- "version": "v1alpha1"
- }
- ]
- },
- "io.k8s.api.node.v1alpha1.RuntimeClassSpec": {
- "description": "RuntimeClassSpec is a specification of a RuntimeClass. It contains parameters that are required to describe the RuntimeClass to the Container Runtime Interface (CRI) implementation, as well as any other components that need to understand how the pod will be run. The RuntimeClassSpec is immutable.",
- "properties": {
- "overhead": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.Overhead",
- "description": "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/688-pod-overhead/README.md This field is beta-level as of Kubernetes v1.18, and is only honored by servers that enable the PodOverhead feature."
- },
- "runtimeHandler": {
- "description": "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 be lowercase, conform to the DNS Label (RFC 1123) requirements, and is immutable.",
- "type": "string"
- },
- "scheduling": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.Scheduling",
- "description": "Scheduling holds the scheduling constraints to ensure that pods running with this RuntimeClass are scheduled to nodes that support it. If scheduling is nil, this RuntimeClass is assumed to be supported by all nodes."
- }
- },
- "required": [
- "runtimeHandler"
- ],
- "type": "object"
- },
- "io.k8s.api.node.v1alpha1.Scheduling": {
- "description": "Scheduling specifies the scheduling constraints for nodes supporting a RuntimeClass.",
- "properties": {
- "nodeSelector": {
- "additionalProperties": {
- "type": "string"
- },
- "description": "nodeSelector lists labels that must be present on nodes that support this RuntimeClass. Pods using this RuntimeClass can only be scheduled to a node matched by this selector. The RuntimeClass nodeSelector is merged with a pod's existing nodeSelector. Any conflicts will cause the pod to be rejected in admission.",
- "type": "object",
- "x-kubernetes-map-type": "atomic"
- },
- "tolerations": {
- "description": "tolerations are appended (excluding duplicates) to pods running with this RuntimeClass during admission, effectively unioning the set of nodes tolerated by the pod and the RuntimeClass.",
- "items": {
- "$ref": "#/definitions/io.k8s.api.core.v1.Toleration"
- },
- "type": "array",
- "x-kubernetes-list-type": "atomic"
- }
- },
- "type": "object"
- },
"io.k8s.api.node.v1beta1.Overhead": {
"description": "Overhead structure represents the resource overhead associated with running a pod.",
"properties": {
@@ -13422,7 +13109,7 @@
},
"overhead": {
"$ref": "#/definitions/io.k8s.api.node.v1beta1.Overhead",
- "description": "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/688-pod-overhead/README.md This field is beta-level as of Kubernetes v1.18, and is only honored by servers that enable the PodOverhead feature."
+ "description": "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/688-pod-overhead/README.md"
},
"scheduling": {
"$ref": "#/definitions/io.k8s.api.node.v1beta1.Scheduling",
@@ -13849,8 +13536,7 @@
},
"selector": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector",
- "description": "Label query over pods whose evictions are managed by the disruption budget. A null selector selects no pods. An empty selector ({}) also selects no pods, which differs from standard behavior of selecting all pods. In policy/v1, an empty selector will select all pods in the namespace.",
- "x-kubernetes-patch-strategy": "replace"
+ "description": "Label query over pods whose evictions are managed by the disruption budget. A null selector selects no pods. An empty selector ({}) also selects no pods, which differs from standard behavior of selecting all pods. In policy/v1, an empty selector will select all pods in the namespace."
}
},
"type": "object"
@@ -14629,7 +14315,7 @@
"description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata"
},
"preemptionPolicy": {
- "description": "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is beta-level, gated by the NonPreemptingPriority feature-gate.",
+ "description": "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.",
"type": "string"
},
"value": {
@@ -14772,7 +14458,7 @@
"type": "boolean"
},
"storageCapacity": {
- "description": "If set to true, storageCapacity indicates that the CSI volume driver wants pod scheduling to consider the storage capacity that the driver deployment will report by creating CSIStorageCapacity objects with capacity information.\n\nThe check can be enabled immediately when deploying a driver. In that case, provisioning new volumes with late binding will pause until the driver deployment has published some suitable CSIStorageCapacity object.\n\nAlternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.\n\nThis field was immutable in Kubernetes <= 1.22 and now is mutable.\n\nThis is a beta field and only available when the CSIStorageCapacity feature is enabled. The default is false.",
+ "description": "If set to true, storageCapacity indicates that the CSI volume driver wants pod scheduling to consider the storage capacity that the driver deployment will report by creating CSIStorageCapacity objects with capacity information.\n\nThe check can be enabled immediately when deploying a driver. In that case, provisioning new volumes with late binding will pause until the driver deployment has published some suitable CSIStorageCapacity object.\n\nAlternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.\n\nThis field was immutable in Kubernetes <= 1.22 and now is mutable.",
"type": "boolean"
},
"tokenRequests": {
@@ -14908,6 +14594,89 @@
],
"type": "object"
},
+ "io.k8s.api.storage.v1.CSIStorageCapacity": {
+ "description": "CSIStorageCapacity stores the result of one CSI GetCapacity call. For a given StorageClass, this describes the available capacity in a particular topology segment. This can be used when considering where to instantiate new PersistentVolumes.\n\nFor example this can express things like: - StorageClass \"standard\" has \"1234 GiB\" available in \"topology.kubernetes.io/zone=us-east1\" - StorageClass \"localssd\" has \"10 GiB\" available in \"kubernetes.io/hostname=knode-abc123\"\n\nThe following three cases all imply that no capacity is available for a certain combination: - no object exists with suitable topology and storage class name - such an object exists, but the capacity is unset - such an object exists, but the capacity is zero\n\nThe producer of these objects can decide which approach is more suitable.\n\nThey are consumed by the kube-scheduler when a CSI driver opts into capacity-aware scheduling with CSIDriverSpec.StorageCapacity. The scheduler compares the MaximumVolumeSize against the requested size of pending volumes to filter out unsuitable nodes. If MaximumVolumeSize is unset, it falls back to a comparison against the less precise Capacity. If that is also unset, the scheduler assumes that capacity is insufficient and tries some other node.",
+ "properties": {
+ "apiVersion": {
+ "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
+ "type": "string"
+ },
+ "capacity": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity",
+ "description": "Capacity is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.\n\nThe semantic is currently (CSI spec 1.2) defined as: The available capacity, in bytes, of the storage that can be used to provision volumes. If not set, that information is currently unavailable."
+ },
+ "kind": {
+ "description": "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/sig-architecture/api-conventions.md#types-kinds",
+ "type": "string"
+ },
+ "maximumVolumeSize": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity",
+ "description": "MaximumVolumeSize is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.\n\nThis is defined since CSI spec 1.4.0 as the largest size that may be used in a CreateVolumeRequest.capacity_range.required_bytes field to create a volume with the same parameters as those in GetCapacityRequest. The corresponding value in the Kubernetes API is ResourceRequirements.Requests in a volume claim."
+ },
+ "metadata": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta",
+ "description": "Standard object's metadata. The name has no particular meaning. It must be be a DNS subdomain (dots allowed, 253 characters). To ensure that there are no conflicts with other CSI drivers on the cluster, the recommendation is to use csisc-, a generated name, or a reverse-domain name which ends with the unique CSI driver name.\n\nObjects are namespaced.\n\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata"
+ },
+ "nodeTopology": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector",
+ "description": "NodeTopology defines which nodes have access to the storage for which capacity was reported. If not set, the storage is not accessible from any node in the cluster. If empty, the storage is accessible from all nodes. This field is immutable."
+ },
+ "storageClassName": {
+ "description": "The name of the StorageClass that the reported capacity applies to. It must meet the same requirements as the name of a StorageClass object (non-empty, DNS subdomain). If that object no longer exists, the CSIStorageCapacity object is obsolete and should be removed by its creator. This field is immutable.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "storageClassName"
+ ],
+ "type": "object",
+ "x-kubernetes-group-version-kind": [
+ {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacity",
+ "version": "v1"
+ }
+ ]
+ },
+ "io.k8s.api.storage.v1.CSIStorageCapacityList": {
+ "description": "CSIStorageCapacityList is a collection of CSIStorageCapacity objects.",
+ "properties": {
+ "apiVersion": {
+ "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
+ "type": "string"
+ },
+ "items": {
+ "description": "Items is the list of CSIStorageCapacity objects.",
+ "items": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacity"
+ },
+ "type": "array",
+ "x-kubernetes-list-map-keys": [
+ "name"
+ ],
+ "x-kubernetes-list-type": "map"
+ },
+ "kind": {
+ "description": "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/sig-architecture/api-conventions.md#types-kinds",
+ "type": "string"
+ },
+ "metadata": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta",
+ "description": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata"
+ }
+ },
+ "required": [
+ "items"
+ ],
+ "type": "object",
+ "x-kubernetes-group-version-kind": [
+ {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacityList",
+ "version": "v1"
+ }
+ ]
+ },
"io.k8s.api.storage.v1.StorageClass": {
"description": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.",
"properties": {
@@ -15188,91 +14957,8 @@
},
"type": "object"
},
- "io.k8s.api.storage.v1alpha1.CSIStorageCapacity": {
- "description": "CSIStorageCapacity stores the result of one CSI GetCapacity call. For a given StorageClass, this describes the available capacity in a particular topology segment. This can be used when considering where to instantiate new PersistentVolumes.\n\nFor example this can express things like: - StorageClass \"standard\" has \"1234 GiB\" available in \"topology.kubernetes.io/zone=us-east1\" - StorageClass \"localssd\" has \"10 GiB\" available in \"kubernetes.io/hostname=knode-abc123\"\n\nThe following three cases all imply that no capacity is available for a certain combination: - no object exists with suitable topology and storage class name - such an object exists, but the capacity is unset - such an object exists, but the capacity is zero\n\nThe producer of these objects can decide which approach is more suitable.\n\nThey are consumed by the kube-scheduler if the CSIStorageCapacity beta feature gate is enabled there and a CSI driver opts into capacity-aware scheduling with CSIDriver.StorageCapacity.",
- "properties": {
- "apiVersion": {
- "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
- "type": "string"
- },
- "capacity": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity",
- "description": "Capacity is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.\n\nThe semantic is currently (CSI spec 1.2) defined as: The available capacity, in bytes, of the storage that can be used to provision volumes. If not set, that information is currently unavailable and treated like zero capacity."
- },
- "kind": {
- "description": "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/sig-architecture/api-conventions.md#types-kinds",
- "type": "string"
- },
- "maximumVolumeSize": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity",
- "description": "MaximumVolumeSize is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.\n\nThis is defined since CSI spec 1.4.0 as the largest size that may be used in a CreateVolumeRequest.capacity_range.required_bytes field to create a volume with the same parameters as those in GetCapacityRequest. The corresponding value in the Kubernetes API is ResourceRequirements.Requests in a volume claim."
- },
- "metadata": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta",
- "description": "Standard object's metadata. The name has no particular meaning. It must be be a DNS subdomain (dots allowed, 253 characters). To ensure that there are no conflicts with other CSI drivers on the cluster, the recommendation is to use csisc-, a generated name, or a reverse-domain name which ends with the unique CSI driver name.\n\nObjects are namespaced.\n\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata"
- },
- "nodeTopology": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector",
- "description": "NodeTopology defines which nodes have access to the storage for which capacity was reported. If not set, the storage is not accessible from any node in the cluster. If empty, the storage is accessible from all nodes. This field is immutable."
- },
- "storageClassName": {
- "description": "The name of the StorageClass that the reported capacity applies to. It must meet the same requirements as the name of a StorageClass object (non-empty, DNS subdomain). If that object no longer exists, the CSIStorageCapacity object is obsolete and should be removed by its creator. This field is immutable.",
- "type": "string"
- }
- },
- "required": [
- "storageClassName"
- ],
- "type": "object",
- "x-kubernetes-group-version-kind": [
- {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacity",
- "version": "v1alpha1"
- }
- ]
- },
- "io.k8s.api.storage.v1alpha1.CSIStorageCapacityList": {
- "description": "CSIStorageCapacityList is a collection of CSIStorageCapacity objects.",
- "properties": {
- "apiVersion": {
- "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
- "type": "string"
- },
- "items": {
- "description": "Items is the list of CSIStorageCapacity objects.",
- "items": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacity"
- },
- "type": "array",
- "x-kubernetes-list-map-keys": [
- "name"
- ],
- "x-kubernetes-list-type": "map"
- },
- "kind": {
- "description": "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/sig-architecture/api-conventions.md#types-kinds",
- "type": "string"
- },
- "metadata": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta",
- "description": "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata"
- }
- },
- "required": [
- "items"
- ],
- "type": "object",
- "x-kubernetes-group-version-kind": [
- {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacityList",
- "version": "v1alpha1"
- }
- ]
- },
"io.k8s.api.storage.v1beta1.CSIStorageCapacity": {
- "description": "CSIStorageCapacity stores the result of one CSI GetCapacity call. For a given StorageClass, this describes the available capacity in a particular topology segment. This can be used when considering where to instantiate new PersistentVolumes.\n\nFor example this can express things like: - StorageClass \"standard\" has \"1234 GiB\" available in \"topology.kubernetes.io/zone=us-east1\" - StorageClass \"localssd\" has \"10 GiB\" available in \"kubernetes.io/hostname=knode-abc123\"\n\nThe following three cases all imply that no capacity is available for a certain combination: - no object exists with suitable topology and storage class name - such an object exists, but the capacity is unset - such an object exists, but the capacity is zero\n\nThe producer of these objects can decide which approach is more suitable.\n\nThey are consumed by the kube-scheduler if the CSIStorageCapacity beta feature gate is enabled there and a CSI driver opts into capacity-aware scheduling with CSIDriver.StorageCapacity.",
+ "description": "CSIStorageCapacity stores the result of one CSI GetCapacity call. For a given StorageClass, this describes the available capacity in a particular topology segment. This can be used when considering where to instantiate new PersistentVolumes.\n\nFor example this can express things like: - StorageClass \"standard\" has \"1234 GiB\" available in \"topology.kubernetes.io/zone=us-east1\" - StorageClass \"localssd\" has \"10 GiB\" available in \"kubernetes.io/hostname=knode-abc123\"\n\nThe following three cases all imply that no capacity is available for a certain combination: - no object exists with suitable topology and storage class name - such an object exists, but the capacity is unset - such an object exists, but the capacity is zero\n\nThe producer of these objects can decide which approach is more suitable.\n\nThey are consumed by the kube-scheduler when a CSI driver opts into capacity-aware scheduling with CSIDriverSpec.StorageCapacity. The scheduler compares the MaximumVolumeSize against the requested size of pending volumes to filter out unsuitable nodes. If MaximumVolumeSize is unset, it falls back to a comparison against the less precise Capacity. If that is also unset, the scheduler assumes that capacity is insufficient and tries some other node.",
"properties": {
"apiVersion": {
"description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
@@ -15280,7 +14966,7 @@
},
"capacity": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity",
- "description": "Capacity is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.\n\nThe semantic is currently (CSI spec 1.2) defined as: The available capacity, in bytes, of the storage that can be used to provision volumes. If not set, that information is currently unavailable and treated like zero capacity."
+ "description": "Capacity is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.\n\nThe semantic is currently (CSI spec 1.2) defined as: The available capacity, in bytes, of the storage that can be used to provision volumes. If not set, that information is currently unavailable."
},
"kind": {
"description": "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/sig-architecture/api-conventions.md#types-kinds",
@@ -16657,7 +16343,7 @@
"type": "string"
},
"selfLink": {
- "description": "selfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.",
+ "description": "Deprecated: selfLink is a legacy read-only field that is no longer populated by the system.",
"type": "string"
}
},
@@ -16692,7 +16378,7 @@
},
"time": {
"$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time",
- "description": "Time is timestamp of when these fields were set. It should always be empty if Operation is 'Apply'"
+ "description": "Time is the timestamp of when the ManagedFields entry was added. The timestamp will also be updated if a field is added, the manager changes any of the owned fields value or removes a field. The timestamp does not update when a field is removed from the entry because another manager took it over."
}
},
"type": "object"
@@ -16713,7 +16399,7 @@
"type": "object"
},
"clusterName": {
- "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.",
+ "description": "Deprecated: ClusterName is a legacy field that was always cleared by the system and never used; it will be removed completely in 1.25.\n\nThe name in the go struct is changed to help clients detect accidental use.",
"type": "string"
},
"creationTimestamp": {
@@ -16738,7 +16424,7 @@
"x-kubernetes-patch-strategy": "merge"
},
"generateName": {
- "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency",
+ "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will return a 409.\n\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency",
"type": "string"
},
"generation": {
@@ -16782,7 +16468,7 @@
"type": "string"
},
"selfLink": {
- "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.",
+ "description": "Deprecated: selfLink is a legacy read-only field that is no longer populated by the system.",
"type": "string"
},
"uid": {
@@ -16800,7 +16486,7 @@
"type": "string"
},
"blockOwnerDeletion": {
- "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.",
+ "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion for how the garbage collector interacts with this field and enforces the foreground deletion. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.",
"type": "boolean"
},
"controller": {
@@ -18327,7 +18013,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -18393,7 +18079,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -18744,7 +18430,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -18965,7 +18651,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -19044,7 +18730,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -19358,7 +19044,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -19579,7 +19265,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -19658,7 +19344,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -19972,7 +19658,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -20193,7 +19879,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -20272,7 +19958,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -20586,7 +20272,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -20807,7 +20493,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -20886,7 +20572,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -21200,7 +20886,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -21421,7 +21107,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -21500,7 +21186,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -21637,7 +21323,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -21716,7 +21402,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -22030,7 +21716,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -22251,7 +21937,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -22330,7 +22016,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -22511,7 +22197,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -22693,7 +22379,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -22772,7 +22458,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -22832,7 +22518,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -23878,7 +23564,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -23957,7 +23643,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -24271,7 +23957,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -24492,7 +24178,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -24571,7 +24257,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -24885,7 +24571,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -25106,7 +24792,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -25185,7 +24871,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -25322,7 +25008,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -25401,7 +25087,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -25538,7 +25224,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -25617,7 +25303,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -25931,7 +25617,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -26152,7 +25838,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -26231,7 +25917,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -26368,7 +26054,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -26447,7 +26133,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -26761,7 +26447,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -26982,7 +26668,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -27061,7 +26747,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -27375,7 +27061,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -27596,7 +27282,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -27675,7 +27361,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -27735,7 +27421,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -28094,7 +27780,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -28315,7 +28001,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -28394,7 +28080,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -29055,7 +28741,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -29134,7 +28820,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -29341,7 +29027,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -29420,7 +29106,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -29480,7 +29166,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -29640,7 +29326,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -29719,7 +29405,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -30025,7 +29711,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -30238,7 +29924,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -30317,7 +30003,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -30954,7 +30640,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -31033,7 +30719,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -31450,7 +31136,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -31663,7 +31349,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -31742,7 +31428,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -31871,7 +31557,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -31950,7 +31636,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -38106,7 +37792,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -38319,7 +38005,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -38398,7 +38084,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -38704,7 +38390,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -38917,7 +38603,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -38996,7 +38682,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -39828,7 +39514,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -40041,7 +39727,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -40120,7 +39806,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -40249,7 +39935,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -40328,7 +40014,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -40930,7 +40616,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -41143,7 +40829,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -41222,7 +40908,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -41351,7 +41037,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -41430,7 +41116,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -42373,7 +42059,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -42594,7 +42280,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -42673,7 +42359,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -42987,7 +42673,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -43208,7 +42894,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -43287,7 +42973,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -43424,7 +43110,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -43503,7 +43189,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -43817,7 +43503,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -44038,7 +43724,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -44117,7 +43803,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -44254,7 +43940,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -44333,7 +44019,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -44470,7 +44156,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -44549,7 +44235,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -44863,7 +44549,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -45084,7 +44770,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -45163,7 +44849,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -45300,7 +44986,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -45379,7 +45065,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -45516,7 +45202,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -45595,7 +45281,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -45909,7 +45595,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -46130,7 +45816,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -46209,7 +45895,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -46346,7 +46032,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -46425,7 +46111,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -46562,7 +46248,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -46641,7 +46327,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -48774,7 +48460,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -48929,7 +48615,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -49026,7 +48712,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -49115,7 +48801,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -49204,7 +48890,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -49724,7 +49410,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -49945,7 +49631,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -50024,7 +49710,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -50161,7 +49847,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -50240,7 +49926,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -51055,7 +50741,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -51276,7 +50962,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -51355,7 +51041,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -51492,7 +51178,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -51571,7 +51257,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -52386,7 +52072,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -52607,7 +52293,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -52686,7 +52372,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -52823,7 +52509,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -52902,7 +52588,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -53717,7 +53403,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -53938,7 +53624,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -54017,7 +53703,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -54154,7 +53840,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -54233,7 +53919,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -55192,7 +54878,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -55413,7 +55099,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -55492,7 +55178,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -55629,7 +55315,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -55708,7 +55394,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -56022,7 +55708,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -56243,7 +55929,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -56322,7 +56008,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -56459,7 +56145,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -56538,7 +56224,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -57710,7 +57396,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -57931,7 +57617,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -58010,7 +57696,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -58147,7 +57833,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -58226,7 +57912,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -58955,7 +58641,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -59168,7 +58854,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -59247,7 +58933,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -59376,7 +59062,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -59455,7 +59141,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -59584,7 +59270,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -59663,7 +59349,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -60384,7 +60070,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -60605,7 +60291,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -60684,7 +60370,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -61532,7 +61218,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -61753,7 +61439,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -61832,7 +61518,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -62647,7 +62333,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -62868,7 +62554,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -62947,7 +62633,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -63795,7 +63481,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -64016,7 +63702,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -64095,7 +63781,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -64910,7 +64596,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -65131,7 +64817,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -65210,7 +64896,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -65939,7 +65625,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -66152,7 +65838,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -66231,7 +65917,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -66360,7 +66046,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -66439,7 +66125,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -66745,7 +66431,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -66958,7 +66644,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -67037,7 +66723,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -67166,7 +66852,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -67245,7 +66931,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -68044,7 +67730,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -68257,7 +67943,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -68336,7 +68022,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -68465,7 +68151,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -68544,7 +68230,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -68850,7 +68536,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -69063,7 +68749,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -69142,7 +68828,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -69271,7 +68957,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -69350,7 +69036,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -70182,7 +69868,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -70395,7 +70081,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -70474,7 +70160,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -70603,7 +70289,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -70682,7 +70368,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -71284,7 +70970,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -71497,7 +71183,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -71576,7 +71262,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -72001,7 +71687,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -72222,7 +71908,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -72301,7 +71987,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -72438,7 +72124,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -72517,7 +72203,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -72831,7 +72517,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -73052,7 +72738,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -73131,7 +72817,223 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
+ "in": "query",
+ "name": "fieldValidation",
+ "type": "string",
+ "uniqueItems": true
+ }
+ ],
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy"
+ }
+ },
+ "201": {
+ "description": "Created",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "networking_v1"
+ ],
+ "x-kubernetes-action": "put",
+ "x-kubernetes-group-version-kind": {
+ "group": "networking.k8s.io",
+ "kind": "NetworkPolicy",
+ "version": "v1"
+ }
+ }
+ },
+ "/apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}/status": {
+ "get": {
+ "consumes": [
+ "*/*"
+ ],
+ "description": "read status of the specified NetworkPolicy",
+ "operationId": "readNetworkingV1NamespacedNetworkPolicyStatus",
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "networking_v1"
+ ],
+ "x-kubernetes-action": "get",
+ "x-kubernetes-group-version-kind": {
+ "group": "networking.k8s.io",
+ "kind": "NetworkPolicy",
+ "version": "v1"
+ }
+ },
+ "parameters": [
+ {
+ "description": "name of the NetworkPolicy",
+ "in": "path",
+ "name": "name",
+ "required": true,
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "object name and auth scope, such as for teams and projects",
+ "in": "path",
+ "name": "namespace",
+ "required": true,
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "If 'true', then the output is pretty printed.",
+ "in": "query",
+ "name": "pretty",
+ "type": "string",
+ "uniqueItems": true
+ }
+ ],
+ "patch": {
+ "consumes": [
+ "application/json-patch+json",
+ "application/merge-patch+json",
+ "application/strategic-merge-patch+json",
+ "application/apply-patch+yaml"
+ ],
+ "description": "partially update status of the specified NetworkPolicy",
+ "operationId": "patchNetworkingV1NamespacedNetworkPolicyStatus",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"
+ }
+ },
+ {
+ "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
+ "in": "query",
+ "name": "dryRun",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).",
+ "in": "query",
+ "name": "fieldManager",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
+ "in": "query",
+ "name": "fieldValidation",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.",
+ "in": "query",
+ "name": "force",
+ "type": "boolean",
+ "uniqueItems": true
+ }
+ ],
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy"
+ }
+ },
+ "201": {
+ "description": "Created",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "networking_v1"
+ ],
+ "x-kubernetes-action": "patch",
+ "x-kubernetes-group-version-kind": {
+ "group": "networking.k8s.io",
+ "kind": "NetworkPolicy",
+ "version": "v1"
+ }
+ },
+ "put": {
+ "consumes": [
+ "*/*"
+ ],
+ "description": "replace status of the specified NetworkPolicy",
+ "operationId": "replaceNetworkingV1NamespacedNetworkPolicyStatus",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.networking.v1.NetworkPolicy"
+ }
+ },
+ {
+ "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
+ "in": "query",
+ "name": "dryRun",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.",
+ "in": "query",
+ "name": "fieldManager",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -74558,7 +74460,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -74771,7 +74673,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -74850,7 +74752,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -75123,867 +75025,6 @@
}
]
},
- "/apis/node.k8s.io/v1alpha1/": {
- "get": {
- "consumes": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "description": "get available resources",
- "operationId": "getNodeV1alpha1APIResources",
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "node_v1alpha1"
- ]
- }
- },
- "/apis/node.k8s.io/v1alpha1/runtimeclasses": {
- "delete": {
- "consumes": [
- "*/*"
- ],
- "description": "delete collection of RuntimeClass",
- "operationId": "deleteNodeV1alpha1CollectionRuntimeClass",
- "parameters": [
- {
- "in": "body",
- "name": "body",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"
- }
- },
- {
- "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
- "in": "query",
- "name": "continue",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
- "in": "query",
- "name": "dryRun",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
- "in": "query",
- "name": "fieldSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.",
- "in": "query",
- "name": "gracePeriodSeconds",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
- "in": "query",
- "name": "labelSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
- "in": "query",
- "name": "limit",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.",
- "in": "query",
- "name": "orphanDependents",
- "type": "boolean",
- "uniqueItems": true
- },
- {
- "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.",
- "in": "query",
- "name": "propagationPolicy",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersion",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersionMatch",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
- "in": "query",
- "name": "timeoutSeconds",
- "type": "integer",
- "uniqueItems": true
- }
- ],
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "node_v1alpha1"
- ],
- "x-kubernetes-action": "deletecollection",
- "x-kubernetes-group-version-kind": {
- "group": "node.k8s.io",
- "kind": "RuntimeClass",
- "version": "v1alpha1"
- }
- },
- "get": {
- "consumes": [
- "*/*"
- ],
- "description": "list or watch objects of kind RuntimeClass",
- "operationId": "listNodeV1alpha1RuntimeClass",
- "parameters": [
- {
- "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
- "in": "query",
- "name": "allowWatchBookmarks",
- "type": "boolean",
- "uniqueItems": true
- },
- {
- "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
- "in": "query",
- "name": "continue",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
- "in": "query",
- "name": "fieldSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
- "in": "query",
- "name": "labelSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
- "in": "query",
- "name": "limit",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersion",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersionMatch",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
- "in": "query",
- "name": "timeoutSeconds",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
- "in": "query",
- "name": "watch",
- "type": "boolean",
- "uniqueItems": true
- }
- ],
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf",
- "application/json;stream=watch",
- "application/vnd.kubernetes.protobuf;stream=watch"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClassList"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "node_v1alpha1"
- ],
- "x-kubernetes-action": "list",
- "x-kubernetes-group-version-kind": {
- "group": "node.k8s.io",
- "kind": "RuntimeClass",
- "version": "v1alpha1"
- }
- },
- "parameters": [
- {
- "description": "If 'true', then the output is pretty printed.",
- "in": "query",
- "name": "pretty",
- "type": "string",
- "uniqueItems": true
- }
- ],
- "post": {
- "consumes": [
- "*/*"
- ],
- "description": "create a RuntimeClass",
- "operationId": "createNodeV1alpha1RuntimeClass",
- "parameters": [
- {
- "in": "body",
- "name": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClass"
- }
- },
- {
- "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
- "in": "query",
- "name": "dryRun",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.",
- "in": "query",
- "name": "fieldManager",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
- "in": "query",
- "name": "fieldValidation",
- "type": "string",
- "uniqueItems": true
- }
- ],
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClass"
- }
- },
- "201": {
- "description": "Created",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClass"
- }
- },
- "202": {
- "description": "Accepted",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClass"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "node_v1alpha1"
- ],
- "x-kubernetes-action": "post",
- "x-kubernetes-group-version-kind": {
- "group": "node.k8s.io",
- "kind": "RuntimeClass",
- "version": "v1alpha1"
- }
- }
- },
- "/apis/node.k8s.io/v1alpha1/runtimeclasses/{name}": {
- "delete": {
- "consumes": [
- "*/*"
- ],
- "description": "delete a RuntimeClass",
- "operationId": "deleteNodeV1alpha1RuntimeClass",
- "parameters": [
- {
- "in": "body",
- "name": "body",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"
- }
- },
- {
- "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
- "in": "query",
- "name": "dryRun",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.",
- "in": "query",
- "name": "gracePeriodSeconds",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.",
- "in": "query",
- "name": "orphanDependents",
- "type": "boolean",
- "uniqueItems": true
- },
- {
- "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.",
- "in": "query",
- "name": "propagationPolicy",
- "type": "string",
- "uniqueItems": true
- }
- ],
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"
- }
- },
- "202": {
- "description": "Accepted",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "node_v1alpha1"
- ],
- "x-kubernetes-action": "delete",
- "x-kubernetes-group-version-kind": {
- "group": "node.k8s.io",
- "kind": "RuntimeClass",
- "version": "v1alpha1"
- }
- },
- "get": {
- "consumes": [
- "*/*"
- ],
- "description": "read the specified RuntimeClass",
- "operationId": "readNodeV1alpha1RuntimeClass",
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClass"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "node_v1alpha1"
- ],
- "x-kubernetes-action": "get",
- "x-kubernetes-group-version-kind": {
- "group": "node.k8s.io",
- "kind": "RuntimeClass",
- "version": "v1alpha1"
- }
- },
- "parameters": [
- {
- "description": "name of the RuntimeClass",
- "in": "path",
- "name": "name",
- "required": true,
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "If 'true', then the output is pretty printed.",
- "in": "query",
- "name": "pretty",
- "type": "string",
- "uniqueItems": true
- }
- ],
- "patch": {
- "consumes": [
- "application/json-patch+json",
- "application/merge-patch+json",
- "application/strategic-merge-patch+json",
- "application/apply-patch+yaml"
- ],
- "description": "partially update the specified RuntimeClass",
- "operationId": "patchNodeV1alpha1RuntimeClass",
- "parameters": [
- {
- "in": "body",
- "name": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"
- }
- },
- {
- "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
- "in": "query",
- "name": "dryRun",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).",
- "in": "query",
- "name": "fieldManager",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
- "in": "query",
- "name": "fieldValidation",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.",
- "in": "query",
- "name": "force",
- "type": "boolean",
- "uniqueItems": true
- }
- ],
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClass"
- }
- },
- "201": {
- "description": "Created",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClass"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "node_v1alpha1"
- ],
- "x-kubernetes-action": "patch",
- "x-kubernetes-group-version-kind": {
- "group": "node.k8s.io",
- "kind": "RuntimeClass",
- "version": "v1alpha1"
- }
- },
- "put": {
- "consumes": [
- "*/*"
- ],
- "description": "replace the specified RuntimeClass",
- "operationId": "replaceNodeV1alpha1RuntimeClass",
- "parameters": [
- {
- "in": "body",
- "name": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClass"
- }
- },
- {
- "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
- "in": "query",
- "name": "dryRun",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.",
- "in": "query",
- "name": "fieldManager",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
- "in": "query",
- "name": "fieldValidation",
- "type": "string",
- "uniqueItems": true
- }
- ],
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClass"
- }
- },
- "201": {
- "description": "Created",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.node.v1alpha1.RuntimeClass"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "node_v1alpha1"
- ],
- "x-kubernetes-action": "put",
- "x-kubernetes-group-version-kind": {
- "group": "node.k8s.io",
- "kind": "RuntimeClass",
- "version": "v1alpha1"
- }
- }
- },
- "/apis/node.k8s.io/v1alpha1/watch/runtimeclasses": {
- "get": {
- "consumes": [
- "*/*"
- ],
- "description": "watch individual changes to a list of RuntimeClass. deprecated: use the 'watch' parameter with a list operation instead.",
- "operationId": "watchNodeV1alpha1RuntimeClassList",
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf",
- "application/json;stream=watch",
- "application/vnd.kubernetes.protobuf;stream=watch"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "node_v1alpha1"
- ],
- "x-kubernetes-action": "watchlist",
- "x-kubernetes-group-version-kind": {
- "group": "node.k8s.io",
- "kind": "RuntimeClass",
- "version": "v1alpha1"
- }
- },
- "parameters": [
- {
- "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
- "in": "query",
- "name": "allowWatchBookmarks",
- "type": "boolean",
- "uniqueItems": true
- },
- {
- "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
- "in": "query",
- "name": "continue",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
- "in": "query",
- "name": "fieldSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
- "in": "query",
- "name": "labelSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
- "in": "query",
- "name": "limit",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "If 'true', then the output is pretty printed.",
- "in": "query",
- "name": "pretty",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersion",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersionMatch",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
- "in": "query",
- "name": "timeoutSeconds",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
- "in": "query",
- "name": "watch",
- "type": "boolean",
- "uniqueItems": true
- }
- ]
- },
- "/apis/node.k8s.io/v1alpha1/watch/runtimeclasses/{name}": {
- "get": {
- "consumes": [
- "*/*"
- ],
- "description": "watch changes to an object of kind RuntimeClass. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.",
- "operationId": "watchNodeV1alpha1RuntimeClass",
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf",
- "application/json;stream=watch",
- "application/vnd.kubernetes.protobuf;stream=watch"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "node_v1alpha1"
- ],
- "x-kubernetes-action": "watch",
- "x-kubernetes-group-version-kind": {
- "group": "node.k8s.io",
- "kind": "RuntimeClass",
- "version": "v1alpha1"
- }
- },
- "parameters": [
- {
- "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
- "in": "query",
- "name": "allowWatchBookmarks",
- "type": "boolean",
- "uniqueItems": true
- },
- {
- "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
- "in": "query",
- "name": "continue",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
- "in": "query",
- "name": "fieldSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
- "in": "query",
- "name": "labelSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
- "in": "query",
- "name": "limit",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "name of the RuntimeClass",
- "in": "path",
- "name": "name",
- "required": true,
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "If 'true', then the output is pretty printed.",
- "in": "query",
- "name": "pretty",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersion",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersionMatch",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
- "in": "query",
- "name": "timeoutSeconds",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
- "in": "query",
- "name": "watch",
- "type": "boolean",
- "uniqueItems": true
- }
- ]
- },
"/apis/node.k8s.io/v1beta1/": {
"get": {
"consumes": [
@@ -76280,7 +75321,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -76493,7 +75534,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -76572,7 +75613,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -77182,7 +76223,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -77403,7 +76444,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -77482,7 +76523,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -77619,7 +76660,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -77698,7 +76739,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -78513,7 +77554,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -78734,7 +77775,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -78813,7 +77854,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -78950,7 +77991,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -79029,7 +78070,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -79446,7 +78487,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -79659,7 +78700,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -79738,7 +78779,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -80697,7 +79738,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -80910,7 +79951,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -80989,7 +80030,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -81295,7 +80336,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -81508,7 +80549,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -81587,7 +80628,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -81901,7 +80942,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -82122,7 +81163,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -82201,7 +81242,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -82515,7 +81556,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -82736,7 +81777,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -82815,7 +81856,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -84583,7 +83624,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -84796,7 +83837,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -84875,7 +83916,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -85477,7 +84518,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -85690,7 +84731,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -85769,7 +84810,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -86075,7 +85116,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -86288,7 +85329,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -86367,7 +85408,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -86410,6 +85451,731 @@
}
}
},
+ "/apis/storage.k8s.io/v1/csistoragecapacities": {
+ "get": {
+ "consumes": [
+ "*/*"
+ ],
+ "description": "list or watch objects of kind CSIStorageCapacity",
+ "operationId": "listStorageV1CSIStorageCapacityForAllNamespaces",
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf",
+ "application/json;stream=watch",
+ "application/vnd.kubernetes.protobuf;stream=watch"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacityList"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "storage_v1"
+ ],
+ "x-kubernetes-action": "list",
+ "x-kubernetes-group-version-kind": {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacity",
+ "version": "v1"
+ }
+ },
+ "parameters": [
+ {
+ "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
+ "in": "query",
+ "name": "allowWatchBookmarks",
+ "type": "boolean",
+ "uniqueItems": true
+ },
+ {
+ "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
+ "in": "query",
+ "name": "continue",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
+ "in": "query",
+ "name": "fieldSelector",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
+ "in": "query",
+ "name": "labelSelector",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
+ "in": "query",
+ "name": "limit",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "If 'true', then the output is pretty printed.",
+ "in": "query",
+ "name": "pretty",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
+ "in": "query",
+ "name": "resourceVersion",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
+ "in": "query",
+ "name": "resourceVersionMatch",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
+ "in": "query",
+ "name": "timeoutSeconds",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
+ "in": "query",
+ "name": "watch",
+ "type": "boolean",
+ "uniqueItems": true
+ }
+ ]
+ },
+ "/apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities": {
+ "delete": {
+ "consumes": [
+ "*/*"
+ ],
+ "description": "delete collection of CSIStorageCapacity",
+ "operationId": "deleteStorageV1CollectionNamespacedCSIStorageCapacity",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"
+ }
+ },
+ {
+ "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
+ "in": "query",
+ "name": "continue",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
+ "in": "query",
+ "name": "dryRun",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
+ "in": "query",
+ "name": "fieldSelector",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.",
+ "in": "query",
+ "name": "gracePeriodSeconds",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
+ "in": "query",
+ "name": "labelSelector",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
+ "in": "query",
+ "name": "limit",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.",
+ "in": "query",
+ "name": "orphanDependents",
+ "type": "boolean",
+ "uniqueItems": true
+ },
+ {
+ "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.",
+ "in": "query",
+ "name": "propagationPolicy",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
+ "in": "query",
+ "name": "resourceVersion",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
+ "in": "query",
+ "name": "resourceVersionMatch",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
+ "in": "query",
+ "name": "timeoutSeconds",
+ "type": "integer",
+ "uniqueItems": true
+ }
+ ],
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "storage_v1"
+ ],
+ "x-kubernetes-action": "deletecollection",
+ "x-kubernetes-group-version-kind": {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacity",
+ "version": "v1"
+ }
+ },
+ "get": {
+ "consumes": [
+ "*/*"
+ ],
+ "description": "list or watch objects of kind CSIStorageCapacity",
+ "operationId": "listStorageV1NamespacedCSIStorageCapacity",
+ "parameters": [
+ {
+ "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
+ "in": "query",
+ "name": "allowWatchBookmarks",
+ "type": "boolean",
+ "uniqueItems": true
+ },
+ {
+ "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
+ "in": "query",
+ "name": "continue",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
+ "in": "query",
+ "name": "fieldSelector",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
+ "in": "query",
+ "name": "labelSelector",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
+ "in": "query",
+ "name": "limit",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
+ "in": "query",
+ "name": "resourceVersion",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
+ "in": "query",
+ "name": "resourceVersionMatch",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
+ "in": "query",
+ "name": "timeoutSeconds",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
+ "in": "query",
+ "name": "watch",
+ "type": "boolean",
+ "uniqueItems": true
+ }
+ ],
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf",
+ "application/json;stream=watch",
+ "application/vnd.kubernetes.protobuf;stream=watch"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacityList"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "storage_v1"
+ ],
+ "x-kubernetes-action": "list",
+ "x-kubernetes-group-version-kind": {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacity",
+ "version": "v1"
+ }
+ },
+ "parameters": [
+ {
+ "description": "object name and auth scope, such as for teams and projects",
+ "in": "path",
+ "name": "namespace",
+ "required": true,
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "If 'true', then the output is pretty printed.",
+ "in": "query",
+ "name": "pretty",
+ "type": "string",
+ "uniqueItems": true
+ }
+ ],
+ "post": {
+ "consumes": [
+ "*/*"
+ ],
+ "description": "create a CSIStorageCapacity",
+ "operationId": "createStorageV1NamespacedCSIStorageCapacity",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacity"
+ }
+ },
+ {
+ "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
+ "in": "query",
+ "name": "dryRun",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.",
+ "in": "query",
+ "name": "fieldManager",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
+ "in": "query",
+ "name": "fieldValidation",
+ "type": "string",
+ "uniqueItems": true
+ }
+ ],
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacity"
+ }
+ },
+ "201": {
+ "description": "Created",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacity"
+ }
+ },
+ "202": {
+ "description": "Accepted",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacity"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "storage_v1"
+ ],
+ "x-kubernetes-action": "post",
+ "x-kubernetes-group-version-kind": {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacity",
+ "version": "v1"
+ }
+ }
+ },
+ "/apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities/{name}": {
+ "delete": {
+ "consumes": [
+ "*/*"
+ ],
+ "description": "delete a CSIStorageCapacity",
+ "operationId": "deleteStorageV1NamespacedCSIStorageCapacity",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"
+ }
+ },
+ {
+ "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
+ "in": "query",
+ "name": "dryRun",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.",
+ "in": "query",
+ "name": "gracePeriodSeconds",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.",
+ "in": "query",
+ "name": "orphanDependents",
+ "type": "boolean",
+ "uniqueItems": true
+ },
+ {
+ "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.",
+ "in": "query",
+ "name": "propagationPolicy",
+ "type": "string",
+ "uniqueItems": true
+ }
+ ],
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"
+ }
+ },
+ "202": {
+ "description": "Accepted",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "storage_v1"
+ ],
+ "x-kubernetes-action": "delete",
+ "x-kubernetes-group-version-kind": {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacity",
+ "version": "v1"
+ }
+ },
+ "get": {
+ "consumes": [
+ "*/*"
+ ],
+ "description": "read the specified CSIStorageCapacity",
+ "operationId": "readStorageV1NamespacedCSIStorageCapacity",
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacity"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "storage_v1"
+ ],
+ "x-kubernetes-action": "get",
+ "x-kubernetes-group-version-kind": {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacity",
+ "version": "v1"
+ }
+ },
+ "parameters": [
+ {
+ "description": "name of the CSIStorageCapacity",
+ "in": "path",
+ "name": "name",
+ "required": true,
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "object name and auth scope, such as for teams and projects",
+ "in": "path",
+ "name": "namespace",
+ "required": true,
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "If 'true', then the output is pretty printed.",
+ "in": "query",
+ "name": "pretty",
+ "type": "string",
+ "uniqueItems": true
+ }
+ ],
+ "patch": {
+ "consumes": [
+ "application/json-patch+json",
+ "application/merge-patch+json",
+ "application/strategic-merge-patch+json",
+ "application/apply-patch+yaml"
+ ],
+ "description": "partially update the specified CSIStorageCapacity",
+ "operationId": "patchStorageV1NamespacedCSIStorageCapacity",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"
+ }
+ },
+ {
+ "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
+ "in": "query",
+ "name": "dryRun",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).",
+ "in": "query",
+ "name": "fieldManager",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
+ "in": "query",
+ "name": "fieldValidation",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.",
+ "in": "query",
+ "name": "force",
+ "type": "boolean",
+ "uniqueItems": true
+ }
+ ],
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacity"
+ }
+ },
+ "201": {
+ "description": "Created",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacity"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "storage_v1"
+ ],
+ "x-kubernetes-action": "patch",
+ "x-kubernetes-group-version-kind": {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacity",
+ "version": "v1"
+ }
+ },
+ "put": {
+ "consumes": [
+ "*/*"
+ ],
+ "description": "replace the specified CSIStorageCapacity",
+ "operationId": "replaceStorageV1NamespacedCSIStorageCapacity",
+ "parameters": [
+ {
+ "in": "body",
+ "name": "body",
+ "required": true,
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacity"
+ }
+ },
+ {
+ "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
+ "in": "query",
+ "name": "dryRun",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.",
+ "in": "query",
+ "name": "fieldManager",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
+ "in": "query",
+ "name": "fieldValidation",
+ "type": "string",
+ "uniqueItems": true
+ }
+ ],
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacity"
+ }
+ },
+ "201": {
+ "description": "Created",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.api.storage.v1.CSIStorageCapacity"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "storage_v1"
+ ],
+ "x-kubernetes-action": "put",
+ "x-kubernetes-group-version-kind": {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacity",
+ "version": "v1"
+ }
+ }
+ },
"/apis/storage.k8s.io/v1/storageclasses": {
"delete": {
"consumes": [
@@ -86673,7 +86439,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -86886,7 +86652,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -86965,7 +86731,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -87271,7 +87037,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -87484,7 +87250,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -87563,7 +87329,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -87692,7 +87458,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -87771,7 +87537,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -88274,6 +88040,363 @@
}
]
},
+ "/apis/storage.k8s.io/v1/watch/csistoragecapacities": {
+ "get": {
+ "consumes": [
+ "*/*"
+ ],
+ "description": "watch individual changes to a list of CSIStorageCapacity. deprecated: use the 'watch' parameter with a list operation instead.",
+ "operationId": "watchStorageV1CSIStorageCapacityListForAllNamespaces",
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf",
+ "application/json;stream=watch",
+ "application/vnd.kubernetes.protobuf;stream=watch"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "storage_v1"
+ ],
+ "x-kubernetes-action": "watchlist",
+ "x-kubernetes-group-version-kind": {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacity",
+ "version": "v1"
+ }
+ },
+ "parameters": [
+ {
+ "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
+ "in": "query",
+ "name": "allowWatchBookmarks",
+ "type": "boolean",
+ "uniqueItems": true
+ },
+ {
+ "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
+ "in": "query",
+ "name": "continue",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
+ "in": "query",
+ "name": "fieldSelector",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
+ "in": "query",
+ "name": "labelSelector",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
+ "in": "query",
+ "name": "limit",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "If 'true', then the output is pretty printed.",
+ "in": "query",
+ "name": "pretty",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
+ "in": "query",
+ "name": "resourceVersion",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
+ "in": "query",
+ "name": "resourceVersionMatch",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
+ "in": "query",
+ "name": "timeoutSeconds",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
+ "in": "query",
+ "name": "watch",
+ "type": "boolean",
+ "uniqueItems": true
+ }
+ ]
+ },
+ "/apis/storage.k8s.io/v1/watch/namespaces/{namespace}/csistoragecapacities": {
+ "get": {
+ "consumes": [
+ "*/*"
+ ],
+ "description": "watch individual changes to a list of CSIStorageCapacity. deprecated: use the 'watch' parameter with a list operation instead.",
+ "operationId": "watchStorageV1NamespacedCSIStorageCapacityList",
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf",
+ "application/json;stream=watch",
+ "application/vnd.kubernetes.protobuf;stream=watch"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "storage_v1"
+ ],
+ "x-kubernetes-action": "watchlist",
+ "x-kubernetes-group-version-kind": {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacity",
+ "version": "v1"
+ }
+ },
+ "parameters": [
+ {
+ "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
+ "in": "query",
+ "name": "allowWatchBookmarks",
+ "type": "boolean",
+ "uniqueItems": true
+ },
+ {
+ "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
+ "in": "query",
+ "name": "continue",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
+ "in": "query",
+ "name": "fieldSelector",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
+ "in": "query",
+ "name": "labelSelector",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
+ "in": "query",
+ "name": "limit",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "object name and auth scope, such as for teams and projects",
+ "in": "path",
+ "name": "namespace",
+ "required": true,
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "If 'true', then the output is pretty printed.",
+ "in": "query",
+ "name": "pretty",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
+ "in": "query",
+ "name": "resourceVersion",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
+ "in": "query",
+ "name": "resourceVersionMatch",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
+ "in": "query",
+ "name": "timeoutSeconds",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
+ "in": "query",
+ "name": "watch",
+ "type": "boolean",
+ "uniqueItems": true
+ }
+ ]
+ },
+ "/apis/storage.k8s.io/v1/watch/namespaces/{namespace}/csistoragecapacities/{name}": {
+ "get": {
+ "consumes": [
+ "*/*"
+ ],
+ "description": "watch changes to an object of kind CSIStorageCapacity. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.",
+ "operationId": "watchStorageV1NamespacedCSIStorageCapacity",
+ "produces": [
+ "application/json",
+ "application/yaml",
+ "application/vnd.kubernetes.protobuf",
+ "application/json;stream=watch",
+ "application/vnd.kubernetes.protobuf;stream=watch"
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"
+ }
+ },
+ "401": {
+ "description": "Unauthorized"
+ }
+ },
+ "schemes": [
+ "https"
+ ],
+ "tags": [
+ "storage_v1"
+ ],
+ "x-kubernetes-action": "watch",
+ "x-kubernetes-group-version-kind": {
+ "group": "storage.k8s.io",
+ "kind": "CSIStorageCapacity",
+ "version": "v1"
+ }
+ },
+ "parameters": [
+ {
+ "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
+ "in": "query",
+ "name": "allowWatchBookmarks",
+ "type": "boolean",
+ "uniqueItems": true
+ },
+ {
+ "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
+ "in": "query",
+ "name": "continue",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
+ "in": "query",
+ "name": "fieldSelector",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
+ "in": "query",
+ "name": "labelSelector",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
+ "in": "query",
+ "name": "limit",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "name of the CSIStorageCapacity",
+ "in": "path",
+ "name": "name",
+ "required": true,
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "object name and auth scope, such as for teams and projects",
+ "in": "path",
+ "name": "namespace",
+ "required": true,
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "If 'true', then the output is pretty printed.",
+ "in": "query",
+ "name": "pretty",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
+ "in": "query",
+ "name": "resourceVersion",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
+ "in": "query",
+ "name": "resourceVersionMatch",
+ "type": "string",
+ "uniqueItems": true
+ },
+ {
+ "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
+ "in": "query",
+ "name": "timeoutSeconds",
+ "type": "integer",
+ "uniqueItems": true
+ },
+ {
+ "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
+ "in": "query",
+ "name": "watch",
+ "type": "boolean",
+ "uniqueItems": true
+ }
+ ]
+ },
"/apis/storage.k8s.io/v1/watch/storageclasses": {
"get": {
"consumes": [
@@ -88734,1121 +88857,6 @@
}
]
},
- "/apis/storage.k8s.io/v1alpha1/": {
- "get": {
- "consumes": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "description": "get available resources",
- "operationId": "getStorageV1alpha1APIResources",
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.APIResourceList"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "storage_v1alpha1"
- ]
- }
- },
- "/apis/storage.k8s.io/v1alpha1/csistoragecapacities": {
- "get": {
- "consumes": [
- "*/*"
- ],
- "description": "list or watch objects of kind CSIStorageCapacity",
- "operationId": "listStorageV1alpha1CSIStorageCapacityForAllNamespaces",
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf",
- "application/json;stream=watch",
- "application/vnd.kubernetes.protobuf;stream=watch"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacityList"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "storage_v1alpha1"
- ],
- "x-kubernetes-action": "list",
- "x-kubernetes-group-version-kind": {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacity",
- "version": "v1alpha1"
- }
- },
- "parameters": [
- {
- "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
- "in": "query",
- "name": "allowWatchBookmarks",
- "type": "boolean",
- "uniqueItems": true
- },
- {
- "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
- "in": "query",
- "name": "continue",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
- "in": "query",
- "name": "fieldSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
- "in": "query",
- "name": "labelSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
- "in": "query",
- "name": "limit",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "If 'true', then the output is pretty printed.",
- "in": "query",
- "name": "pretty",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersion",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersionMatch",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
- "in": "query",
- "name": "timeoutSeconds",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
- "in": "query",
- "name": "watch",
- "type": "boolean",
- "uniqueItems": true
- }
- ]
- },
- "/apis/storage.k8s.io/v1alpha1/namespaces/{namespace}/csistoragecapacities": {
- "delete": {
- "consumes": [
- "*/*"
- ],
- "description": "delete collection of CSIStorageCapacity",
- "operationId": "deleteStorageV1alpha1CollectionNamespacedCSIStorageCapacity",
- "parameters": [
- {
- "in": "body",
- "name": "body",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"
- }
- },
- {
- "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
- "in": "query",
- "name": "continue",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
- "in": "query",
- "name": "dryRun",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
- "in": "query",
- "name": "fieldSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.",
- "in": "query",
- "name": "gracePeriodSeconds",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
- "in": "query",
- "name": "labelSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
- "in": "query",
- "name": "limit",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.",
- "in": "query",
- "name": "orphanDependents",
- "type": "boolean",
- "uniqueItems": true
- },
- {
- "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.",
- "in": "query",
- "name": "propagationPolicy",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersion",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersionMatch",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
- "in": "query",
- "name": "timeoutSeconds",
- "type": "integer",
- "uniqueItems": true
- }
- ],
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "storage_v1alpha1"
- ],
- "x-kubernetes-action": "deletecollection",
- "x-kubernetes-group-version-kind": {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacity",
- "version": "v1alpha1"
- }
- },
- "get": {
- "consumes": [
- "*/*"
- ],
- "description": "list or watch objects of kind CSIStorageCapacity",
- "operationId": "listStorageV1alpha1NamespacedCSIStorageCapacity",
- "parameters": [
- {
- "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
- "in": "query",
- "name": "allowWatchBookmarks",
- "type": "boolean",
- "uniqueItems": true
- },
- {
- "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
- "in": "query",
- "name": "continue",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
- "in": "query",
- "name": "fieldSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
- "in": "query",
- "name": "labelSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
- "in": "query",
- "name": "limit",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersion",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersionMatch",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
- "in": "query",
- "name": "timeoutSeconds",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
- "in": "query",
- "name": "watch",
- "type": "boolean",
- "uniqueItems": true
- }
- ],
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf",
- "application/json;stream=watch",
- "application/vnd.kubernetes.protobuf;stream=watch"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacityList"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "storage_v1alpha1"
- ],
- "x-kubernetes-action": "list",
- "x-kubernetes-group-version-kind": {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacity",
- "version": "v1alpha1"
- }
- },
- "parameters": [
- {
- "description": "object name and auth scope, such as for teams and projects",
- "in": "path",
- "name": "namespace",
- "required": true,
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "If 'true', then the output is pretty printed.",
- "in": "query",
- "name": "pretty",
- "type": "string",
- "uniqueItems": true
- }
- ],
- "post": {
- "consumes": [
- "*/*"
- ],
- "description": "create a CSIStorageCapacity",
- "operationId": "createStorageV1alpha1NamespacedCSIStorageCapacity",
- "parameters": [
- {
- "in": "body",
- "name": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacity"
- }
- },
- {
- "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
- "in": "query",
- "name": "dryRun",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.",
- "in": "query",
- "name": "fieldManager",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
- "in": "query",
- "name": "fieldValidation",
- "type": "string",
- "uniqueItems": true
- }
- ],
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacity"
- }
- },
- "201": {
- "description": "Created",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacity"
- }
- },
- "202": {
- "description": "Accepted",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacity"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "storage_v1alpha1"
- ],
- "x-kubernetes-action": "post",
- "x-kubernetes-group-version-kind": {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacity",
- "version": "v1alpha1"
- }
- }
- },
- "/apis/storage.k8s.io/v1alpha1/namespaces/{namespace}/csistoragecapacities/{name}": {
- "delete": {
- "consumes": [
- "*/*"
- ],
- "description": "delete a CSIStorageCapacity",
- "operationId": "deleteStorageV1alpha1NamespacedCSIStorageCapacity",
- "parameters": [
- {
- "in": "body",
- "name": "body",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions"
- }
- },
- {
- "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
- "in": "query",
- "name": "dryRun",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.",
- "in": "query",
- "name": "gracePeriodSeconds",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.",
- "in": "query",
- "name": "orphanDependents",
- "type": "boolean",
- "uniqueItems": true
- },
- {
- "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.",
- "in": "query",
- "name": "propagationPolicy",
- "type": "string",
- "uniqueItems": true
- }
- ],
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"
- }
- },
- "202": {
- "description": "Accepted",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "storage_v1alpha1"
- ],
- "x-kubernetes-action": "delete",
- "x-kubernetes-group-version-kind": {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacity",
- "version": "v1alpha1"
- }
- },
- "get": {
- "consumes": [
- "*/*"
- ],
- "description": "read the specified CSIStorageCapacity",
- "operationId": "readStorageV1alpha1NamespacedCSIStorageCapacity",
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacity"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "storage_v1alpha1"
- ],
- "x-kubernetes-action": "get",
- "x-kubernetes-group-version-kind": {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacity",
- "version": "v1alpha1"
- }
- },
- "parameters": [
- {
- "description": "name of the CSIStorageCapacity",
- "in": "path",
- "name": "name",
- "required": true,
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "object name and auth scope, such as for teams and projects",
- "in": "path",
- "name": "namespace",
- "required": true,
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "If 'true', then the output is pretty printed.",
- "in": "query",
- "name": "pretty",
- "type": "string",
- "uniqueItems": true
- }
- ],
- "patch": {
- "consumes": [
- "application/json-patch+json",
- "application/merge-patch+json",
- "application/strategic-merge-patch+json",
- "application/apply-patch+yaml"
- ],
- "description": "partially update the specified CSIStorageCapacity",
- "operationId": "patchStorageV1alpha1NamespacedCSIStorageCapacity",
- "parameters": [
- {
- "in": "body",
- "name": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch"
- }
- },
- {
- "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
- "in": "query",
- "name": "dryRun",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).",
- "in": "query",
- "name": "fieldManager",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
- "in": "query",
- "name": "fieldValidation",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.",
- "in": "query",
- "name": "force",
- "type": "boolean",
- "uniqueItems": true
- }
- ],
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacity"
- }
- },
- "201": {
- "description": "Created",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacity"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "storage_v1alpha1"
- ],
- "x-kubernetes-action": "patch",
- "x-kubernetes-group-version-kind": {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacity",
- "version": "v1alpha1"
- }
- },
- "put": {
- "consumes": [
- "*/*"
- ],
- "description": "replace the specified CSIStorageCapacity",
- "operationId": "replaceStorageV1alpha1NamespacedCSIStorageCapacity",
- "parameters": [
- {
- "in": "body",
- "name": "body",
- "required": true,
- "schema": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacity"
- }
- },
- {
- "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed",
- "in": "query",
- "name": "dryRun",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.",
- "in": "query",
- "name": "fieldManager",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
- "in": "query",
- "name": "fieldValidation",
- "type": "string",
- "uniqueItems": true
- }
- ],
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacity"
- }
- },
- "201": {
- "description": "Created",
- "schema": {
- "$ref": "#/definitions/io.k8s.api.storage.v1alpha1.CSIStorageCapacity"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "storage_v1alpha1"
- ],
- "x-kubernetes-action": "put",
- "x-kubernetes-group-version-kind": {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacity",
- "version": "v1alpha1"
- }
- }
- },
- "/apis/storage.k8s.io/v1alpha1/watch/csistoragecapacities": {
- "get": {
- "consumes": [
- "*/*"
- ],
- "description": "watch individual changes to a list of CSIStorageCapacity. deprecated: use the 'watch' parameter with a list operation instead.",
- "operationId": "watchStorageV1alpha1CSIStorageCapacityListForAllNamespaces",
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf",
- "application/json;stream=watch",
- "application/vnd.kubernetes.protobuf;stream=watch"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "storage_v1alpha1"
- ],
- "x-kubernetes-action": "watchlist",
- "x-kubernetes-group-version-kind": {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacity",
- "version": "v1alpha1"
- }
- },
- "parameters": [
- {
- "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
- "in": "query",
- "name": "allowWatchBookmarks",
- "type": "boolean",
- "uniqueItems": true
- },
- {
- "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
- "in": "query",
- "name": "continue",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
- "in": "query",
- "name": "fieldSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
- "in": "query",
- "name": "labelSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
- "in": "query",
- "name": "limit",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "If 'true', then the output is pretty printed.",
- "in": "query",
- "name": "pretty",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersion",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersionMatch",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
- "in": "query",
- "name": "timeoutSeconds",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
- "in": "query",
- "name": "watch",
- "type": "boolean",
- "uniqueItems": true
- }
- ]
- },
- "/apis/storage.k8s.io/v1alpha1/watch/namespaces/{namespace}/csistoragecapacities": {
- "get": {
- "consumes": [
- "*/*"
- ],
- "description": "watch individual changes to a list of CSIStorageCapacity. deprecated: use the 'watch' parameter with a list operation instead.",
- "operationId": "watchStorageV1alpha1NamespacedCSIStorageCapacityList",
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf",
- "application/json;stream=watch",
- "application/vnd.kubernetes.protobuf;stream=watch"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "storage_v1alpha1"
- ],
- "x-kubernetes-action": "watchlist",
- "x-kubernetes-group-version-kind": {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacity",
- "version": "v1alpha1"
- }
- },
- "parameters": [
- {
- "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
- "in": "query",
- "name": "allowWatchBookmarks",
- "type": "boolean",
- "uniqueItems": true
- },
- {
- "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
- "in": "query",
- "name": "continue",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
- "in": "query",
- "name": "fieldSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
- "in": "query",
- "name": "labelSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
- "in": "query",
- "name": "limit",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "object name and auth scope, such as for teams and projects",
- "in": "path",
- "name": "namespace",
- "required": true,
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "If 'true', then the output is pretty printed.",
- "in": "query",
- "name": "pretty",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersion",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersionMatch",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
- "in": "query",
- "name": "timeoutSeconds",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
- "in": "query",
- "name": "watch",
- "type": "boolean",
- "uniqueItems": true
- }
- ]
- },
- "/apis/storage.k8s.io/v1alpha1/watch/namespaces/{namespace}/csistoragecapacities/{name}": {
- "get": {
- "consumes": [
- "*/*"
- ],
- "description": "watch changes to an object of kind CSIStorageCapacity. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.",
- "operationId": "watchStorageV1alpha1NamespacedCSIStorageCapacity",
- "produces": [
- "application/json",
- "application/yaml",
- "application/vnd.kubernetes.protobuf",
- "application/json;stream=watch",
- "application/vnd.kubernetes.protobuf;stream=watch"
- ],
- "responses": {
- "200": {
- "description": "OK",
- "schema": {
- "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent"
- }
- },
- "401": {
- "description": "Unauthorized"
- }
- },
- "schemes": [
- "https"
- ],
- "tags": [
- "storage_v1alpha1"
- ],
- "x-kubernetes-action": "watch",
- "x-kubernetes-group-version-kind": {
- "group": "storage.k8s.io",
- "kind": "CSIStorageCapacity",
- "version": "v1alpha1"
- }
- },
- "parameters": [
- {
- "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored.",
- "in": "query",
- "name": "allowWatchBookmarks",
- "type": "boolean",
- "uniqueItems": true
- },
- {
- "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.",
- "in": "query",
- "name": "continue",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.",
- "in": "query",
- "name": "fieldSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.",
- "in": "query",
- "name": "labelSelector",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.",
- "in": "query",
- "name": "limit",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "name of the CSIStorageCapacity",
- "in": "path",
- "name": "name",
- "required": true,
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "object name and auth scope, such as for teams and projects",
- "in": "path",
- "name": "namespace",
- "required": true,
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "If 'true', then the output is pretty printed.",
- "in": "query",
- "name": "pretty",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersion sets a constraint on what resource versions a request may be served from. See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersion",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "resourceVersionMatch determines how resourceVersion is applied to list calls. It is highly recommended that resourceVersionMatch be set for list calls where resourceVersion is set See https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions for details.\n\nDefaults to unset",
- "in": "query",
- "name": "resourceVersionMatch",
- "type": "string",
- "uniqueItems": true
- },
- {
- "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.",
- "in": "query",
- "name": "timeoutSeconds",
- "type": "integer",
- "uniqueItems": true
- },
- {
- "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.",
- "in": "query",
- "name": "watch",
- "type": "boolean",
- "uniqueItems": true
- }
- ]
- },
"/apis/storage.k8s.io/v1beta1/": {
"get": {
"consumes": [
@@ -90264,7 +89272,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -90485,7 +89493,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
@@ -90564,7 +89572,7 @@
"uniqueItems": true
},
{
- "description": "fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.",
+ "description": "fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.",
"in": "query",
"name": "fieldValidation",
"type": "string",
diff --git a/api-ref-assets/config/fields.yaml b/api-ref-assets/config/fields.yaml
index 1c18d231ab..71cffef523 100644
--- a/api-ref-assets/config/fields.yaml
+++ b/api-ref-assets/config/fields.yaml
@@ -405,6 +405,7 @@
- fields:
- jobTemplate
- schedule
+ - timeZone
- concurrencyPolicy
- startingDeadlineSeconds
- suspend
diff --git a/api-ref-assets/config/toc.yaml b/api-ref-assets/config/toc.yaml
index 8184af24b9..78475b137f 100644
--- a/api-ref-assets/config/toc.yaml
+++ b/api-ref-assets/config/toc.yaml
@@ -124,7 +124,7 @@ parts:
version: v1
- name: CSIStorageCapacity
group: storage.k8s.io
- version: v1beta1
+ version: v1
- name: Authentication Resources
chapters:
- name: ServiceAccount
diff --git a/assets/scss/_custom.scss b/assets/scss/_custom.scss
index 1ebe8c81fa..db0263d991 100644
--- a/assets/scss/_custom.scss
+++ b/assets/scss/_custom.scss
@@ -634,12 +634,12 @@ body.td-documentation {
a {
color: inherit;
- border-bottom: 1px solid #fff;
+ text-decoration: underline;
}
a:hover {
color: inherit;
- border-bottom: none;
+ text-decoration: initial;
}
}
@@ -648,6 +648,9 @@ body.td-documentation {
}
#announcement {
+ // default background is blue; overrides are possible
+ color: #fff;
+
.announcement-main {
margin-left: auto;
margin-right: auto;
@@ -660,9 +663,8 @@ body.td-documentation {
}
- /* always white */
h1, h2, h3, h4, h5, h6, p * {
- color: #ffffff;
+ color: inherit; /* defaults to white */
background: transparent;
img.event-logo {
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
index 5039818482..542d58016c 100644
--- a/cloudbuild.yaml
+++ b/cloudbuild.yaml
@@ -9,17 +9,20 @@ options:
steps:
# It's fine to bump the tag to a recent version, as needed
- name: "gcr.io/k8s-staging-test-infra/gcb-docker-gcloud:v20210917-12df099d55"
- entrypoint: make
+ entrypoint: 'bash'
env:
- DOCKER_CLI_EXPERIMENTAL=enabled
- TAG=$_GIT_TAG
- BASE_REF=$_PULL_BASE_REF
args:
- - container-image
+ - -c
+ - |
+ gcloud auth configure-docker \
+ && make container-push
substitutions:
# _GIT_TAG will be filled with a git-based tag for the image, of the form vYYYYMMDD-hash, and
# can be used as a substitution
_GIT_TAG: "12345"
# _PULL_BASE_REF will contain the ref that was pushed to to trigger this build -
- # a branch like 'master' or 'release-0.2', or a tag like 'v0.2'.
- _PULL_BASE_REF: "master"
+ # a branch like 'main' or 'release-0.2', or a tag like 'v0.2'.
+ _PULL_BASE_REF: "main"
diff --git a/config.toml b/config.toml
index f2f90e2c05..d524ab4232 100644
--- a/config.toml
+++ b/config.toml
@@ -122,7 +122,7 @@ id = "UA-00000000-0"
[params]
copyright_k8s = "The Kubernetes Authors"
-copyright_linux = "Copyright © 2020 The Linux Foundation ®."
+copyright_linux = "Copyright © 2020 The Linux Foundation ®."
# privacy_policy = "https://policies.google.com/privacy"
@@ -139,10 +139,10 @@ time_format_default = "January 02, 2006 at 3:04 PM PST"
description = "Production-Grade Container Orchestration"
showedit = true
-latest = "v1.23"
+latest = "v1.24"
-fullversion = "v1.23.0"
-version = "v1.23"
+fullversion = "v1.24.0"
+version = "v1.24"
githubbranch = "main"
docsbranch = "main"
deprecated = false
@@ -155,10 +155,10 @@ githubWebsiteRaw = "raw.githubusercontent.com/kubernetes/website"
# GitHub repository link for editing a page and opening issues.
github_repo = "https://github.com/kubernetes/website"
-#Searching
+# Searching
k8s_search = true
-#The following search parameters are specific to Docsy's implementation. Kubernetes implementes its own search-related partials and scripts.
+# The following search parameters are specific to Docsy's implementation. Kubernetes implementes its own search-related partials and scripts.
# Google Custom Search Engine ID. Remove or comment out to disable search.
#gcs_engine_id = "011737558837375720776:fsdu1nryfng"
@@ -179,51 +179,53 @@ js = [
]
[[params.versions]]
-fullversion = "v1.23.0"
-version = "v1.23"
-githubbranch = "v1.23.0"
+fullversion = "v1.24.0"
+version = "v1.24"
+githubbranch = "v1.24.0"
docsbranch = "main"
url = "https://kubernetes.io"
[[params.versions]]
-fullversion = "v1.22.4"
+fullversion = "v1.23.6"
+version = "v1.23"
+githubbranch = "v1.23.6"
+docsbranch = "release-1.23"
+url = "https://v1-23.docs.kubernetes.io"
+
+[[params.versions]]
+fullversion = "v1.22.9"
version = "v1.22"
-githubbranch = "v1.22.4"
+githubbranch = "v1.22.9"
docsbranch = "release-1.22"
url = "https://v1-22.docs.kubernetes.io"
[[params.versions]]
-fullversion = "v1.21.7"
+fullversion = "v1.21.12"
version = "v1.21"
-githubbranch = "v1.21.7"
+githubbranch = "v1.21.12"
docsbranch = "release-1.21"
url = "https://v1-21.docs.kubernetes.io"
[[params.versions]]
-fullversion = "v1.20.13"
+fullversion = "v1.20.15"
version = "v1.20"
-githubbranch = "v1.20.13"
+githubbranch = "v1.20.15"
docsbranch = "release-1.20"
url = "https://v1-20.docs.kubernetes.io"
-[[params.versions]]
-fullversion = "v1.19.16"
-version = "v1.19"
-githubbranch = "v1.19.16"
-docsbranch = "release-1.19"
-url = "https://v1-19.docs.kubernetes.io"
-
# User interface configuration
[params.ui]
# Enable to show the side bar menu in its compact state.
sidebar_menu_compact = false
+# Show expand/collapse icon for sidebar sections.
+sidebar_menu_foldable = true
# https://github.com/gohugoio/hugo/issues/8918#issuecomment-903314696
sidebar_cache_limit = 1
-# Set to true to disable breadcrumb navigation.
+# Set to true to disable breadcrumb navigation.
breadcrumb_disable = false
-# Set to true to hide the sidebar search box (the top nav search box will still be displayed if search is enabled)
+# Set to true to hide the sidebar search box (the top nav search box will still be displayed if search is enabled)
sidebar_search_disable = false
-# Set to false if you don't want to display a logo (/assets/icons/logo.svg) in the top nav bar
+# Set to false if you don't want to display a logo (/assets/icons/logo.svg) in the top nav bar
navbar_logo = true
# Set to true to disable the About link in the site footer
footer_about_disable = false
@@ -244,50 +246,50 @@ no = 'Sorry to hear that. Please currently planned
+for the 1.22 release in late 2021) of Kubernetes it will no longer be supported
and you will need to switch to one of the other compliant container runtimes,
like containerd or CRI-O. Just make sure that the runtime you choose supports
the docker daemon configurations you currently use (e.g. logging).
diff --git a/content/en/blog/_posts/2020-12-08-kubernetes-release-1.20.md b/content/en/blog/_posts/2020-12-08-kubernetes-release-1.20.md
index 8eb382cac1..295c8d7d36 100644
--- a/content/en/blog/_posts/2020-12-08-kubernetes-release-1.20.md
+++ b/content/en/blog/_posts/2020-12-08-kubernetes-release-1.20.md
@@ -32,7 +32,7 @@ The `kubectl alpha debug` features graduates to beta in 1.20, becoming `kubectl
Note that as a new built-in command, `kubectl debug` takes priority over any kubectl plugin named “debug”. You must rename the affected plugin.
-Invocations using `kubectl alpha debug` are now deprecated and will be removed in a subsequent release. Update your scripts to use `kubectl debug`. For more information about `kubectl debug`, see [Debugging Running Pods](https://kubernetes.io/docs/tasks/debug-application-cluster/debug-running-pod/).
+Invocations using `kubectl alpha debug` are now deprecated and will be removed in a subsequent release. Update your scripts to use `kubectl debug`. For more information about `kubectl debug`, see [Debugging Running Pods](https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/).
### Beta: API Priority and Fairness
diff --git a/content/en/blog/_posts/2021-04-19-introducing-indexed-jobs.md b/content/en/blog/_posts/2021-04-19-introducing-indexed-jobs.md
index 990dd6308b..e0233d69a6 100644
--- a/content/en/blog/_posts/2021-04-19-introducing-indexed-jobs.md
+++ b/content/en/blog/_posts/2021-04-19-introducing-indexed-jobs.md
@@ -62,7 +62,7 @@ spec:
Note that completion mode is an alpha feature in the 1.21 release. To be able to
use it in your cluster, make sure to enable the `IndexedJob` [feature
gate](/docs/reference/command-line-tools-reference/feature-gates/) on the
-[API server](docs/reference/command-line-tools-reference/kube-apiserver/) and
+[API server](/docs/reference/command-line-tools-reference/kube-apiserver/) and
the [controller manager](/docs/reference/command-line-tools-reference/kube-controller-manager/).
When you run the example, you will see that each of the three created Pods gets a
diff --git a/content/en/blog/_posts/2021-05-14-using-finalizers-to-control-deletion.md b/content/en/blog/_posts/2021-05-14-using-finalizers-to-control-deletion.md
index a361c4d0be..c868b1bd5c 100644
--- a/content/en/blog/_posts/2021-05-14-using-finalizers-to-control-deletion.md
+++ b/content/en/blog/_posts/2021-05-14-using-finalizers-to-control-deletion.md
@@ -108,7 +108,7 @@ metadata:
uid: 93a37fed-23e3-45e8-b6ee-b2521db81638
```
-In short, what’s happened is that the object was updated, not deleted. That’s because Kubernetes saw that the object contained finalizers and put it into a read-only state. The deletion timestamp signals that the object can only be read, with the exception of removing the finalizer key updates. In other words, the deletion will not be complete until we edit the object and remove the finalizer.
+In short, what’s happened is that the object was updated, not deleted. That’s because Kubernetes saw that the object contained finalizers and blocked removal of the object from etcd. The deletion timestamp signals that deletion was requested, but the deletion will not be complete until we edit the object and remove the finalizer.
Here's a demonstration of using the `patch` command to remove finalizers. If we want to delete an object, we can simply patch it on the command line to remove the finalizers. In this way, the deletion that was running in the background will complete and the object will be deleted. When we attempt to `get` that configmap, it will be gone.
diff --git a/content/en/blog/_posts/2021-09-13-read-write-once-pod-access-mode-alpha.md b/content/en/blog/_posts/2021-09-13-read-write-once-pod-access-mode-alpha.md
index e569c7a015..64d47ae657 100644
--- a/content/en/blog/_posts/2021-09-13-read-write-once-pod-access-mode-alpha.md
+++ b/content/en/blog/_posts/2021-09-13-read-write-once-pod-access-mode-alpha.md
@@ -255,7 +255,7 @@ The minimum required versions are:
## What’s next?
-As part of the beta graduation for this feature, SIG Storage plans to update the Kubenetes scheduler to support pod preemption in relation to ReadWriteOncePod storage.
+As part of the beta graduation for this feature, SIG Storage plans to update the Kubernetes scheduler to support pod preemption in relation to ReadWriteOncePod storage.
This means if two pods request a PersistentVolumeClaim with ReadWriteOncePod, the pod with highest priority will gain access to the PersistentVolumeClaim and any pod with lower priority will be preempted from the node and be unable to access the PersistentVolumeClaim.
## How can I learn more?
diff --git a/content/en/blog/_posts/2021-10-05-nsa-cisa-hardening.md b/content/en/blog/_posts/2021-10-05-nsa-cisa-hardening.md
index c953a02677..e32d7bcb72 100644
--- a/content/en/blog/_posts/2021-10-05-nsa-cisa-hardening.md
+++ b/content/en/blog/_posts/2021-10-05-nsa-cisa-hardening.md
@@ -317,7 +317,7 @@ RequestResponse's including metadata and request / response bodies. While helpfu
Each organization needs to evaluate their
own threat model and build an audit policy that complements or helps troubleshooting incident response. Think
-about how someone would attack your organization and what audit trail could identify it. Review more advanced options for tuning audit logs in the official [audit logging documentation](/docs/tasks/debug-application-cluster/audit/#audit-policy).
+about how someone would attack your organization and what audit trail could identify it. Review more advanced options for tuning audit logs in the official [audit logging documentation](/docs/tasks/debug/debug-cluster/audit/#audit-policy).
It's crucial to tune your audit logs to only include events that meet your threat model. A minimal audit policy that logs everything at `metadata` level can also be a good starting point.
Audit logging configurations can also be tested with
diff --git a/content/en/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md b/content/en/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md
index 56e0df7416..a436694640 100644
--- a/content/en/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md
+++ b/content/en/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md
@@ -8,8 +8,8 @@ slug: kubernetes-1-23-statefulset-pvc-auto-deletion
**Author:** Matthew Cary (Google)
Kubernetes v1.23 introduced a new, alpha-level policy for
-[StatefulSets](docs/concepts/workloads/controllers/statefulset/) that controls the lifetime of
-[PersistentVolumeClaims](docs/concepts/storage/persistent-volumes/) (PVCs) generated from the
+[StatefulSets](/docs/concepts/workloads/controllers/statefulset/) that controls the lifetime of
+[PersistentVolumeClaims](/docs/concepts/storage/persistent-volumes/) (PVCs) generated from the
StatefulSet spec template for cases when they should be deleted automatically when the StatefulSet
is deleted or pods in the StatefulSet are scaled down.
@@ -82,7 +82,7 @@ This policy forms a matrix with four cases. I’ll walk through and give an exam
new replicas will automatically use them.
Visit the
-[documentation](docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-policies) to
+[documentation](/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-policies) to
see all the details.
## What’s next?
diff --git a/content/en/blog/_posts/2022-01-07-kubernetes-is-moving-on-from-dockershim.md b/content/en/blog/_posts/2022-01-07-kubernetes-is-moving-on-from-dockershim.md
index 07f33b8b80..9e7672f2b8 100644
--- a/content/en/blog/_posts/2022-01-07-kubernetes-is-moving-on-from-dockershim.md
+++ b/content/en/blog/_posts/2022-01-07-kubernetes-is-moving-on-from-dockershim.md
@@ -12,7 +12,7 @@ to reaffirm our community values by supporting open source container runtimes,
enabling a smaller kubelet, and increasing engineering velocity for teams using
Kubernetes. If you [use Docker Engine as a container runtime](/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use/)
for your Kubernetes cluster, get ready to migrate in 1.24! To check if you're
-affected, refer to [Check whether dockershim deprecation affects you](/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/).
+affected, refer to [Check whether dockershim removal affects you](/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you/).
## Why we’re moving away from dockershim
diff --git a/content/en/blog/_posts/2022-02-17-updated-dockershim-faq.md b/content/en/blog/_posts/2022-02-17-updated-dockershim-faq.md
index 6091090567..74e61b117d 100644
--- a/content/en/blog/_posts/2022-02-17-updated-dockershim-faq.md
+++ b/content/en/blog/_posts/2022-02-17-updated-dockershim-faq.md
@@ -7,31 +7,37 @@ slug: dockershim-faq
aliases: [ '/dockershim' ]
---
-**This is an update to the original [Dockershim Deprecation FAQ](/blog/2020/12/02/dockershim-faq/) article,
-published in late 2020.**
+**This supersedes the original
+[Dockershim Deprecation FAQ](/blog/2020/12/02/dockershim-faq/) article,
+published in late 2020. The article includes updates from the v1.24
+release of Kubernetes.**
+
+---
This document goes over some frequently asked questions regarding the
-deprecation and removal of _dockershim_, that was
+removal of _dockershim_ from Kubernetes. The removal was originally
[announced](/blog/2020/12/08/kubernetes-1-20-release-announcement/)
-as a part of the Kubernetes v1.20 release. For more detail
-on what that means, check out the blog post
+as a part of the Kubernetes v1.20 release. The Kubernetes
+[v1.24 release](/releases/#release-v1-24) actually removed the dockershim
+from Kubernetes.
+
+For more on what that means, check out the blog post
[Don't Panic: Kubernetes and Docker](/blog/2020/12/02/dont-panic-kubernetes-and-docker/).
-Also, you can read [check whether dockershim removal affects you](/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/)
-to determine how much impact the removal of dockershim would have for you
-or for your organization.
+To determine the impact that the removal of dockershim would have for you or your organization,
+you can read [Check whether dockershim removal affects you](/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you/).
-As the Kubernetes 1.24 release has become imminent, we've been working hard to try to make this a smooth transition.
+In the months and days leading up to the Kubernetes 1.24 release, Kubernetes contributors worked hard to try to make this a smooth transition.
-- We've written a blog post detailing our [commitment and next steps](/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim/).
-- We believe there are no major blockers to migration to [other container runtimes](/docs/setup/production-environment/container-runtimes/#container-runtimes).
-- There is also a [Migrating from dockershim](/docs/tasks/administer-cluster/migrating-from-dockershim/) guide available.
-- We've also created a page to list
+- A blog post detailing our [commitment and next steps](/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim/).
+- Checking if there were major blockers to migration to [other container runtimes](/docs/setup/production-environment/container-runtimes/#container-runtimes).
+- Adding a [migrating from dockershim](/docs/tasks/administer-cluster/migrating-from-dockershim/) guide.
+- Creating a list of
[articles on dockershim removal and on using CRI-compatible runtimes](/docs/reference/node/topics-on-dockershim-and-cri-compatible-runtimes/).
That list includes some of the already mentioned docs, and also covers selected external sources
(including vendor guides).
-### Why is the dockershim being removed from Kubernetes?
+### Why was the dockershim removed from Kubernetes?
Early versions of Kubernetes only worked with a specific container runtime:
Docker Engine. Later, Kubernetes added support for working with other container runtimes.
@@ -49,36 +55,18 @@ In fact, maintaining dockershim had become a heavy burden on the Kubernetes main
Additionally, features that were largely incompatible with the dockershim, such
as cgroups v2 and user namespaces are being implemented in these newer CRI
-runtimes. Removing support for the dockershim will allow further development in
-those areas.
+runtimes. Removing the dockershim from Kubernetes allows further development in those areas.
[drkep]: https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2221-remove-dockershim
-### Can I still use Docker Engine in Kubernetes 1.23?
+### Are Docker and containers the same thing?
-Yes, the only thing changed in 1.20 is a single warning log printed at [kubelet]
-startup if using Docker Engine as the runtime. You'll see this warning in all versions up to 1.23. The dockershim removal occurs in Kubernetes 1.24.
-
-[kubelet]: /docs/reference/command-line-tools-reference/kubelet/
-
-### When will dockershim be removed?
-
-Given the impact of this change, we are using an extended deprecation timeline.
-Removal of dockershim is scheduled for Kubernetes v1.24, see [Dockershim Removal Kubernetes Enhancement Proposal][drkep].
-The Kubernetes project will be working closely with vendors and other ecosystem groups to ensure
-a smooth transition and will evaluate things as the situation evolves.
-
-### Can I still use Docker Engine as my container runtime?
-
-First off, if you use Docker on your own PC to develop or test containers: nothing changes.
-You can still use Docker locally no matter what container runtime(s) you use for your
-Kubernetes clusters. Containers make this kind of interoperability possible.
-
-Mirantis and Docker have [committed][mirantis] to maintaining a replacement adapter for
-Docker Engine, and to maintain that adapter even after the in-tree dockershim is removed
-from Kubernetes. The replacement adapter is named [`cri-dockerd`](https://github.com/Mirantis/cri-dockerd).
-
-[mirantis]: https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/
+Docker popularized the Linux containers pattern and has been instrumental in
+developing the underlying technology, however containers in Linux have existed
+for a long time. The container ecosystem has grown to be much broader than just
+Docker. Standards like OCI and CRI have helped many tools grow and thrive in our
+ecosystem, some replacing aspects of Docker while others enhance existing
+functionality.
### Will my existing container images still work?
@@ -90,14 +78,41 @@ All your existing images will still work exactly the same.
Yes. All CRI runtimes support the same pull secrets configuration used in
Kubernetes, either via the PodSpec or ServiceAccount.
-### Are Docker and containers the same thing?
+### Can I still use Docker Engine in Kubernetes 1.23?
-Docker popularized the Linux containers pattern and has been instrumental in
-developing the underlying technology, however containers in Linux have existed
-for a long time. The container ecosystem has grown to be much broader than just
-Docker. Standards like OCI and CRI have helped many tools grow and thrive in our
-ecosystem, some replacing aspects of Docker while others enhance existing
-functionality.
+Yes, the only thing changed in 1.20 is a single warning log printed at [kubelet]
+startup if using Docker Engine as the runtime. You'll see this warning in all versions up to 1.23. The dockershim removal occurred
+in Kubernetes 1.24.
+
+If you're running Kubernetes v1.24 or later, see [Can I still use Docker Engine as my container runtime?](#can-i-still-use-docker-engine-as-my-container-runtime).
+(Remember, you can switch away from the dockershim if you're using any supported Kubernetes release; from release v1.24, you
+**must** switch as Kubernetes no longer incluides the dockershim).
+
+[kubelet]: /docs/reference/command-line-tools-reference/kubelet/
+
+### Which CRI implementation should I use?
+
+That’s a complex question and it depends on a lot of factors. If Docker Engine is
+working for you, moving to containerd should be a relatively easy swap and
+will have strictly better performance and less overhead. However, we encourage you
+to explore all the options from the [CNCF landscape] in case another would be an
+even better fit for your environment.
+
+[CNCF landscape]: https://landscape.cncf.io/card-mode?category=container-runtime&grouping=category
+
+#### Can I still use Docker Engine as my container runtime?
+
+First off, if you use Docker on your own PC to develop or test containers: nothing changes.
+You can still use Docker locally no matter what container runtime(s) you use for your
+Kubernetes clusters. Containers make this kind of interoperability possible.
+
+Mirantis and Docker have [committed][mirantis] to maintaining a replacement adapter for
+Docker Engine, and to maintain that adapter even after the in-tree dockershim is removed
+from Kubernetes. The replacement adapter is named [`cri-dockerd`](https://github.com/Mirantis/cri-dockerd).
+
+You can install `cri-dockerd` and use it to connect the kubelet to Docker Engine. Read [Migrate Docker Engine nodes from dockershim to cri-dockerd](/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd/) to learn more.
+
+[mirantis]: https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/
### Are there examples of folks using other runtimes in production today?
@@ -135,16 +150,6 @@ provide an end-to-end standard for managing containers.
[runc]: https://github.com/opencontainers/runc
[containerd]: https://containerd.io/
-### Which CRI implementation should I use?
-
-That’s a complex question and it depends on a lot of factors. If Docker is
-working for you, moving to containerd should be a relatively easy swap and
-will have strictly better performance and less overhead. However, we encourage you
-to explore all the options from the [CNCF landscape] in case another would be an
-even better fit for your environment.
-
-[CNCF landscape]: https://landscape.cncf.io/card-mode?category=container-runtime&grouping=category
-
### What should I look out for when changing CRI implementations?
While the underlying containerization code is the same between Docker and most
@@ -153,24 +158,25 @@ common things to consider when migrating are:
- Logging configuration
- Runtime resource limitations
-- Node provisioning scripts that call docker or use docker via it's control socket
-- Kubectl plugins that require docker CLI or the control socket
+- Node provisioning scripts that call docker or use Docker Engine via its control socket
+- Plugins for `kubectl` that require the `docker` CLI or the Docker Engine control socket
- Tools from the Kubernetes project that require direct access to Docker Engine
(for example: the deprecated `kube-imagepuller` tool)
-- Configuration of functionality like `registry-mirrors` and insecure registries
+- Configuration of functionality like `registry-mirrors` and insecure registries
- Other support scripts or daemons that expect Docker Engine to be available and are run
outside of Kubernetes (for example, monitoring or security agents)
- GPUs or special hardware and how they integrate with your runtime and Kubernetes
If you use Kubernetes resource requests/limits or file-based log collection
-DaemonSets then they will continue to work the same, but if you’ve customized
+DaemonSets then they will continue to work the same, but if you've customized
your `dockerd` configuration, you’ll need to adapt that for your new container
runtime where possible.
Another thing to look out for is anything expecting to run for system maintenance
or nested inside a container when building images will no longer work. For the
-former, you can use the [`crictl`][cr] tool as a drop-in replacement (see [mapping from docker cli to crictl](https://kubernetes.io/docs/tasks/debug-application-cluster/crictl/#mapping-from-docker-cli-to-crictl)) and for the
-latter you can use newer container build options like [img], [buildah],
+former, you can use the [`crictl`][cr] tool as a drop-in replacement (see
+[mapping from docker cli to crictl](https://kubernetes.io/docs/tasks/debug/debug-cluster/crictl/#mapping-from-docker-cli-to-crictl))
+and for the latter you can use newer container build options like [img], [buildah],
[kaniko], or [buildkit-cli-for-kubectl] that don’t require Docker.
[cr]: https://github.com/kubernetes-sigs/cri-tools
@@ -204,7 +210,7 @@ discussion of the changes.
[dep]: https://dev.to/inductor/wait-docker-is-deprecated-in-kubernetes-now-what-do-i-do-e4m
-### Is there any tooling that can help me find dockershim in use
+### Is there any tooling that can help me find dockershim in use?
Yes! The [Detector for Docker Socket (DDS)][dds] is a kubectl plugin that you can
install and then use to check your cluster. DDS can detect if active Kubernetes workloads
diff --git a/content/en/blog/_posts/2022-03-31-ready-for-dockershim-removal.md b/content/en/blog/_posts/2022-03-31-ready-for-dockershim-removal.md
index b615a4183e..4362a0daa7 100644
--- a/content/en/blog/_posts/2022-03-31-ready-for-dockershim-removal.md
+++ b/content/en/blog/_posts/2022-03-31-ready-for-dockershim-removal.md
@@ -12,7 +12,7 @@ Way back in December of 2020, Kubernetes announced the [deprecation of Dockershi
## First, does this even affect you?
-If you are rolling your own cluster or are otherwise unsure whether or not this removal affects you, stay on the safe side and [check to see if you have any dependencies on Docker Engine](/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/). Please note that using Docker Desktop to build your application containers is not a Docker dependency for your cluster. Container images created by Docker are compliant with the [Open Container Initiative (OCI)](https://opencontainers.org/), a Linux Foundation governance structure that defines industry standards around container formats and runtimes. They will work just fine on any container runtime supported by Kubernetes.
+If you are rolling your own cluster or are otherwise unsure whether or not this removal affects you, stay on the safe side and [check to see if you have any dependencies on Docker Engine](/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you/). Please note that using Docker Desktop to build your application containers is not a Docker dependency for your cluster. Container images created by Docker are compliant with the [Open Container Initiative (OCI)](https://opencontainers.org/), a Linux Foundation governance structure that defines industry standards around container formats and runtimes. They will work just fine on any container runtime supported by Kubernetes.
If you are using a managed Kubernetes service from a cloud provider, and you haven’t explicitly changed the container runtime, there may be nothing else for you to do. Amazon EKS, Azure AKS, and Google GKE all default to containerd now, though you should make sure they do not need updating if you have any node customizations. To check the runtime of your nodes, follow [Find Out What Container Runtime is Used on a Node](/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use/).
diff --git a/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/index.md b/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/index.md
new file mode 100644
index 0000000000..6c21c5f3c1
--- /dev/null
+++ b/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/index.md
@@ -0,0 +1,155 @@
+---
+layout: blog
+title: 'Increasing the security bar in Ingress-NGINX v1.2.0'
+date: 2022-04-28
+slug: ingress-nginx-1-2-0
+---
+
+**Authors:** Ricardo Katz (VMware), James Strong (Chainguard)
+
+The [Ingress](/docs/concepts/services-networking/ingress/) may be one of the most targeted components
+of Kubernetes. An Ingress typically defines an HTTP reverse proxy, exposed to the Internet, containing
+multiple websites, and with some privileged access to Kubernetes API (such as to read Secrets relating to
+TLS certificates and their private keys).
+
+While it is a risky component in your architecture, it is still the most popular way to properly expose your services.
+
+Ingress-NGINX has been part of security assessments that figured out we have a big problem: we don't
+do all proper sanitization before turning the configuration into an `nginx.conf` file, which may lead to information
+disclosure risks.
+
+While we understand this risk and the real need to fix this, it's not an easy process to do, so we took another approach to reduce (but not remove!) this risk in the current (v1.2.0) release.
+
+## Meet Ingress NGINX v1.2.0 and the chrooted NGINX process
+
+One of the main challenges is that Ingress-NGINX runs the web proxy server (NGINX) alongside the Ingress
+controller (the component that has access to Kubernetes API that and that creates the `nginx.conf` file).
+
+So, NGINX does have the same access to the filesystem of the controller (and Kubernetes service account token, and other configurations from the container). While splitting those components is our end goal, the project needed a fast response; that lead us to the idea of using `chroot()`.
+
+Let's take a look into what an Ingress-NGINX container looked like before this change:
+
+
+
+As we can see, the same container (not the Pod, the container!) that provides HTTP Proxy is the one that watches Ingress objects and writes the Container Volume
+
+Now, meet the new architecture:
+
+
+
+What does all of this mean? A basic summary is: that we are isolating the NGINX service as a container inside the
+controller container.
+
+While this is not strictly true, to understand what was done here, it's good to understand how
+Linux containers (and underlying mechanisms such as kernel namespaces) work.
+You can read about cgroups in the Kubernetes glossary: [`cgroup`](https://kubernetes.io/docs/reference/glossary/?fundamental=true#term-cgroup) and learn more about cgroups interact with namespaces in the NGINX project article
+[What Are Namespaces and cgroups, and How Do They Work?](https://www.nginx.com/blog/what-are-namespaces-cgroups-how-do-they-work/).
+(As you read that, bear in mind that Linux kernel namespaces are a different thing from
+[Kubernetes namespaces](/docs/concepts/overview/working-with-objects/namespaces/)).
+
+## Skip the talk, what do I need to use this new approach?
+
+While this increases the security, we made this feature an opt-in in this release so you can have
+time to make the right adjustments in your environment(s). This new feature is only available from
+release v1.2.0 of the Ingress-NGINX controller.
+
+There are two required changes in your deployments to use this feature:
+* Append the suffix "-chroot" to the container image name. For example: `gcr.io/k8s-staging-ingress-nginx/controller-chroot:v1.2.0`
+* In your Pod template for the Ingress controller, find where you add the capability `NET_BIND_SERVICE` and add the capability `SYS_CHROOT`. After you edit the manifest, you'll see a snippet like:
+
+```yaml
+capabilities:
+ drop:
+ - ALL
+ add:
+ - NET_BIND_SERVICE
+ - SYS_CHROOT
+```
+
+If you deploy the controller using the official Helm chart then change the following setting in
+`values.yaml`:
+
+```yaml
+controller:
+ image:
+ chroot: true
+```
+
+Ingress controllers are normally set up cluster-wide (the IngressClass API is cluster scoped). If you manage the
+Ingress-NGINX controller but you're not the overall cluster operator, then check with your cluster admin about
+whether you can use the `SYS_CHROOT` capability, **before** you enable it in your deployment.
+
+## OK, but how does this increase the security of my Ingress controller?
+
+Take the following configuration snippet and imagine, for some reason it was added to your `nginx.conf`:
+```
+location /randomthing/ {
+ alias /;
+ autoindex on;
+}
+```
+
+If you deploy this configuration, someone can call `http://website.example/randomthing` and get some listing (and access) to the whole filesystem of the Ingress controller.
+
+Now, can you spot the difference between chrooted and non chrooted Nginx on the listings below?
+
+| Without extra `chroot()` | With extra `chroot()` |
+|----------------------------|--------|
+| `bin` | `bin` |
+| `dev` | `dev` |
+| `etc` | `etc` |
+| `home` | |
+| `lib` | `lib` |
+| `media` | |
+| `mnt` | |
+| `opt` | `opt` |
+| `proc` | `proc` |
+| `root` | |
+| `run` | `run` |
+| `sbin` | |
+| `srv` | |
+| `sys` | |
+| `tmp` | `tmp` |
+| `usr` | `usr` |
+| `var` | `var` |
+| `dbg` | |
+| `nginx-ingress-controller` | |
+| `wait-shutdown` | |
+
+The one in left side is not chrooted. So NGINX has full access to the filesystem. The one in right side is chrooted, so a new filesystem with only the required files to make NGINX work is created.
+
+## What about other security improvements in this release?
+
+We know that the new `chroot()` mechanism helps address some portion of the risk, but still, someone
+can try to inject commands to read, for example, the `nginx.conf` file and extract sensitive information.
+
+So, another change in this release (this is opt-out!) is the _deep inspector_.
+We know that some directives or regular expressions may be dangerous to NGINX, so the deep inspector
+checks all fields from an Ingress object (during its reconciliation, and also with a
+[validating admission webhook](/docs/reference/access-authn-authz/admission-controllers/#validatingadmissionwebhook))
+to verify if any fields contains these dangerous directives.
+
+The ingress controller already does this for annotations, and our goal is to move this existing validation to happen inside
+deep inspection as part of a future release.
+
+You can take a look into the existing rules in [https://github.com/kubernetes/ingress-nginx/blob/main/internal/ingress/inspector/rules.go](https://github.com/kubernetes/ingress-nginx/blob/main/internal/ingress/inspector/rules.go).
+
+Due to the nature of inspecting and matching all strings within relevant Ingress objects, this new feature may consume a bit more CPU. You can disable it by running the ingress controller with the command line argument `--deep-inspect=false`.
+
+## What's next?
+
+This is not our final goal. Our final goal is to split the control plane and the data plane processes.
+In fact, doing so will help us also achieve a [Gateway](https://gateway-api.sigs.k8s.io/) API implementation,
+as we may have a different controller as soon as it "knows" what to provide to the data plane
+(we need some help here!!)
+
+Some other projects in Kubernetes already take this approach
+(like [KPNG](https://github.com/kubernetes-sigs/kpng), the proposed replacement for `kube-proxy`),
+and we plan to align with them and get the same experience for Ingress-NGINX.
+
+## Further reading
+
+If you want to take a look into how chrooting was done in Ingress NGINX, take a look
+into [https://github.com/kubernetes/ingress-nginx/pull/8337](https://github.com/kubernetes/ingress-nginx/pull/8337)
+The release v1.2.0 containing all the changes can be found at
+[https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.2.0](https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.2.0)
diff --git a/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/ingress-post-chroot.png b/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/ingress-post-chroot.png
new file mode 100644
index 0000000000..d5d588a3bb
Binary files /dev/null and b/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/ingress-post-chroot.png differ
diff --git a/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/ingress-pre-chroot.png b/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/ingress-pre-chroot.png
new file mode 100644
index 0000000000..38c7d54a55
Binary files /dev/null and b/content/en/blog/_posts/2022-04-28-Increasing-the-security-bar-in-Ingress-NGINX/ingress-pre-chroot.png differ
diff --git a/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md b/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md
new file mode 100644
index 0000000000..c2532638d0
--- /dev/null
+++ b/content/en/blog/_posts/2022-04-29-kubernetes-1.23-release-interview.md
@@ -0,0 +1,319 @@
+---
+layout: blog
+title: "Frontiers, fsGroups and frogs: the Kubernetes 1.23 release interview"
+date: 2022-04-29
+---
+
+**Author**: Craig Box (Google)
+
+One of the highlights of hosting the weekly [Kubernetes Podcast from Google](https://kubernetespodcast.com/) is talking to the release managers for each new Kubernetes version. The release team is constantly refreshing. Many working their way from small documentation fixes, step up to shadow roles, and then eventually lead a release.
+
+As we prepare for the 1.24 release next week, [in accordance with long-standing tradition](https://www.google.com/search?q=%22release+interview%22+site%3Akubernetes.io%2Fblog), I'm pleased to bring you a look back at the story of 1.23. The release was led by [Rey Lejano](https://twitter.com/reylejano), a Field Engineer at SUSE. [I spoke to Rey](https://kubernetespodcast.com/episode/167-kubernetes-1.23/) in December, as he was awaiting the birth of his first child.
+
+Make sure you [subscribe, wherever you get your podcasts](https://kubernetespodcast.com/subscribe/), so you hear all our stories from the Cloud Native community, including the story of 1.24 next week.
+
+*This transcript has been lightly edited and condensed for clarity.*
+
+---
+
+**CRAIG BOX: I'd like to start with what is, of course, on top of everyone's mind at the moment. Let's talk African clawed frogs!**
+
+REY LEJANO: [CHUCKLES] Oh, you mean [Xenopus lavis](https://en.wikipedia.org/wiki/African_clawed_frog), the scientific name for the African clawed frog?
+
+**CRAIG BOX: Of course.**
+
+REY LEJANO: Not many people know, but my background and my degree is actually in microbiology, from the University of California Davis. I did some research for about four years in biochemistry, in a biochemistry lab, and I [do have a research paper published](https://www.sciencedirect.com/science/article/pii/). It's actually on glycoproteins, particularly something called "cortical granule lectin". We used frogs, because they generate lots and lots of eggs, from which we can extract the protein. That protein prevents polyspermy. When the sperm goes into the egg, the egg releases a glycoprotein, cortical granule lectin, to the membrane, and prevents any other sperm from going inside the egg.
+
+**CRAIG BOX: Were you able to take anything from the testing that we did on frogs and generalize that to higher-order mammals, perhaps?**
+
+REY LEJANO: Yes. Since mammals also have cortical granule lectin, we were able to analyze both the convergence and the evolutionary pattern, not just from multiple species of frogs, but also into mammals as well.
+
+**CRAIG BOX: Now, there's a couple of different threads to unravel here. When you were young, what led you into the fields of biology, and perhaps more the technical side of it?**
+
+REY LEJANO: I think it was mostly from family, since I do have a family history in the medical field that goes back generations. So I kind of felt like that was the natural path going into college.
+
+**CRAIG BOX: Now, of course, you're working in a more abstract tech field. What led you out of microbiology?**
+
+REY LEJANO: [CHUCKLES] Well, I've always been interested in tech. Taught myself a little programming when I was younger, before high school, did some web dev stuff. Just kind of got burnt out being in a lab. I was literally in the basement. I had a great opportunity to join a consultancy that specialized in [ITIL](https://www.axelos.com/certifications/itil-service-management/what-is-itil). I actually started off with application performance management, went into monitoring, went into operation management and also ITIL, which is aligning your IT asset management and service managements with business services. Did that for a good number of years, actually.
+
+**CRAIG BOX: It's very interesting, as people describe the things that they went through and perhaps the technologies that they worked on, you can pretty much pinpoint how old they might be. There's a lot of people who come into tech these days that have never heard of ITIL. They have no idea what it is. It's basically just SRE with more process.**
+
+REY LEJANO: Yes, absolutely. It's not very cloud native. [CHUCKLES]
+
+**CRAIG BOX: Not at all.**
+
+REY LEJANO: You don't really hear about it in the cloud native landscape. Definitely, you can tell someone's been in the field for a little bit, if they specialize or have worked with ITIL before.
+
+**CRAIG BOX: You mentioned that you wanted to get out of the basement. That is quite often where people put the programmers. Did they just give you a bit of light in the new basement?**
+
+REY LEJANO: [LAUGHS] They did give us much better lighting. Able to get some vitamin D sometimes, as well.
+
+**CRAIG BOX: To wrap up the discussion about your previous career — over the course of the last year, with all of the things that have happened in the world, I could imagine that microbiology skills may be more in demand than perhaps they were when you studied them?**
+
+REY LEJANO: Oh, absolutely. I could definitely see a big increase of numbers of people going into the field. Also, reading what's going on with the world currently kind of brings back all the education I've learned in the past, as well.
+
+**CRAIG BOX: Do you keep in touch with people you went through school with?**
+
+REY LEJANO: Just some close friends, but not in the microbiology field.
+
+**CRAIG BOX: One thing that I think will probably happen as a result of the pandemic is a renewed interest in some of these STEM fields. It will be interesting to see what impact that has on society at large.**
+
+REY LEJANO: Yeah. I think that'll be great.
+
+**CRAIG BOX: You mentioned working at a consultancy doing IT management, application performance monitoring, and so on. When did Kubernetes come into your professional life?**
+
+REY LEJANO: One of my good friends at the company I worked at, left in mid-2015. He went on to a company that was pretty heavily into Docker. He taught me a little bit. I did my first "docker run" around 2015, maybe 2016. Then, one of the applications we were using for the ITIL framework was containerized around 2018 or so, also in Kubernetes. At that time, it was pretty buggy. That was my initial introduction to Kubernetes and containerised applications.
+
+Then I left that company, and I actually joined my friend over at [RX-M](https://rx-m.com/), which is a cloud native consultancy and training firm. They specialize in Docker and Kubernetes. I was able to get my feet wet. I got my CKD, got my CKA as well. And they were really, really great at encouraging us to learn more about Kubernetes and also to be involved in the community.
+
+**CRAIG BOX: You will have seen, then, the life cycle of people adopting Kubernetes and containerization at large, through your own initial journey and then through helping customers. How would you characterize how that journey has changed from the early days to perhaps today?**
+
+REY LEJANO: I think the early days, there was a lot of questions of, why do I have to containerize? Why can't I just stay with virtual machines?
+
+**CRAIG BOX: It's a line item on your CV.**
+
+REY LEJANO: [CHUCKLES] It is. And nowadays, I think people know the value of using containers, of orchestrating containers with Kubernetes. I don't want to say "jumping on the bandwagon", but it's become the de-facto standard to orchestrate containers.
+
+**CRAIG BOX: It's not something that a consultancy needs to go out and pitch to customers that they should be doing. They're just taking it as, that will happen, and starting a bit further down the path, perhaps.**
+
+REY LEJANO: Absolutely.
+
+**CRAIG BOX: Working at a consultancy like that, how much time do you get to work on improving process, perhaps for multiple customers, and then looking at how you can upstream that work, versus paid work that you do for just an individual customer at a time?**
+
+REY LEJANO: Back then, it would vary. They helped me introduce myself, and I learned a lot about the cloud native landscape and Kubernetes itself. They helped educate me as to how the cloud native landscape, and the tools around it, can be used together. My boss at that company, Randy, he actually encouraged us to start contributing upstream, and encouraged me to join the release team. He just said, this is a great opportunity. Definitely helped me with starting with the contributions early on.
+
+**CRAIG BOX: Was the release team the way that you got involved with upstream Kubernetes contribution?**
+
+REY LEJANO: Actually, no. My first contribution was with SIG Docs. I met Taylor Dolezal — he was the release team lead for 1.19, but he is involved with SIG Docs as well. I met him at KubeCon 2019, I sat at his table during a luncheon. I remember Paris Pittman was hosting this luncheon at the Marriott. Taylor says he was involved with SIG Docs. He encouraged me to join. I started joining into meetings, started doing a few drive-by PRs. That's what we call them — drive-by — little typo fixes. Then did a little bit more, started to send better or higher quality pull requests, and also reviewing PRs.
+
+**CRAIG BOX: When did you first formally take your release team role?**
+
+REY LEJANO: That was in [1.18](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.18/release_team.md), in December. My boss at the time encouraged me to apply. I did, was lucky enough to get accepted for the release notes shadow. Then from there, stayed in with release notes for a few cycles, then went into Docs, naturally then led Docs, then went to Enhancements, and now I'm the release lead for 1.23.
+
+**CRAIG BOX: I don't know that a lot of people think about what goes into a good release note. What would you say does?**
+
+REY LEJANO: [CHUCKLES] You have to tell the end user what has changed or what effect that they might see in the release notes. It doesn't have to be highly technical. It could just be a few lines, and just saying what has changed, what they have to do if they have to do anything as well.
+
+**CRAIG BOX: As you moved through the process of shadowing, how did you learn from the people who were leading those roles?**
+
+REY LEJANO: I said this a few times when I was the release lead for this cycle. You get out of the release team as much as you put in, or it directly aligns to how much you put in. I learned a lot. I went into the release team having that mindset of learning from the role leads, learning from the other shadows, as well. That's actually a saying that my first role lead told me. I still carry it to heart, and that was back in 1.18. That was Eddie, in the very first meeting we had, and I still carry it to heart.
+
+**CRAIG BOX: You, of course, were [the release lead for 1.23](https://github.com/kubernetes/sig-release/tree/master/releases/release-1.23). First of all, congratulations on the release.**
+
+REY LEJANO: Thank you very much.
+
+**CRAIG BOX: The theme for this release is [The Next Frontier](https://kubernetes.io/blog/2021/12/07/kubernetes-1-23-release-announcement/). Tell me the story of how we came to the theme and then the logo.**
+
+REY LEJANO: The Next Frontier represents a few things. It not only represents the next enhancements in this release, but Kubernetes itself also has a history of Star Trek references. The original codename for Kubernetes was Project Seven, a reference to Seven of Nine, originally from Star Trek Voyager. Also the seven spokes in the helm in the logo of Kubernetes as well. And, of course, Borg, the predecessor to Kubernetes.
+
+The Next Frontier continues that Star Trek reference. It's a fusion of two titles in the Star Trek universe. One is [Star Trek V, the Final Frontier](https://en.wikipedia.org/wiki/Star_Trek_V:_The_Final_Frontier), and the Star Trek: The Next Generation.
+
+**CRAIG BOX: Do you have any opinion on the fact that Star Trek V was an odd-numbered movie, and they are [canonically referred to as being lesser than the even-numbered ones](https://screenrant.com/star-trek-movies-odd-number-curse-explained/)?**
+
+REY LEJANO: I can't say, because I am such a sci-fi nerd that I love all of them even though they're bad. Even the post-Next Generation movies, after the series, I still liked all of them, even though I know some weren't that great.
+
+**CRAIG BOX: Am I right in remembering that Star Trek V was the one directed by William Shatner?**
+
+REY LEJANO: Yes, that is correct.
+
+**CRAIG BOX: I think that says it all.**
+
+REY LEJANO: [CHUCKLES] Yes.
+
+**CRAIG BOX: Now, I understand that the theme comes from a part of the [SIG Release charter](https://github.com/kubernetes/community/blob/master/sig-release/charter.md)?**
+
+REY LEJANO: Yes. There's a line in the SIG Release charter, "ensure there is a consistent group of community members in place to support the release process across time." With the release team, we have new shadows that join every single release cycle. With this, we're growing with this community. We're growing the release team members. We're growing SIG Release. We're growing the Kubernetes community itself. For a lot of people, this is their first time contributing to open source, so that's why I say it's their new open source frontier.
+
+**CRAIG BOX: And the logo is obviously very Star Trek-inspired. It sort of surprised me that it took that long for someone to go this route.**
+
+REY LEJANO: I was very surprised as well. I had to relearn Adobe Illustrator to create the logo.
+
+**CRAIG BOX: This your own work, is it?**
+
+REY LEJANO: This is my own work.
+
+**CRAIG BOX: It's very nice.**
+
+REY LEJANO: Thank you very much. Funny, the galaxy actually took me the longest time versus the ship. Took me a few days to get that correct. I'm always fine-tuning it, so there might be a final change when this is actually released.
+
+**CRAIG BOX: No frontier is ever truly final.**
+
+REY LEJANO: True, very true.
+
+**CRAIG BOX: Moving now from the theme of the release to the substance, perhaps, what is new in 1.23?**
+
+REY LEJANO: We have 47 enhancements. I'm going to run through most of the stable ones, if not all of them, some of the key Beta ones, and a few of the Alpha enhancements for 1.23.
+
+One of the key enhancements is [dual-stack IPv4/IPv6](https://github.com/kubernetes/enhancements/issues/563), which went GA in 1.23.
+
+Some background info: dual-stack was introduced as Alpha in 1.15. You probably saw a keynote at KubeCon 2019. Back then, the way dual-stack worked was that you needed two services — you needed a service per IP family. You would need a service for IPv4 and a service for IPv6. It was refactored in 1.20. In 1.21, it was in Beta; clusters were enabled to be dual-stack by default.
+
+And then in 1.23 we did remove the IPv6 dual-stack feature flag. It's not mandatory to use dual-stack. It's actually not "default" still. The pods, the services still default to single-stack. There are some requirements to be able to use dual-stack. The nodes have to be routable on IPv4 and IPv6 network interfaces. You need a CNI plugin that supports dual-stack. The pods themselves have to be configured to be dual-stack. And the services need the ipFamilyPolicy field to specify prefer dual-stack, or require dual-stack.
+
+**CRAIG BOX: This sounds like there's an implication in this that v4 is still required. Do you see a world where we can actually move to v6-only clusters?**
+
+REY LEJANO: I think we'll be talking about IPv4 and IPv6 for many, many years to come. I remember a long time ago, they kept saying "it's going to be all IPv6", and that was decades ago.
+
+**CRAIG BOX: I think I may have mentioned on the show before, but there was [a meeting in London that Vint Cerf attended](https://www.youtube.com/watch?v=AEaJtZVimqs), and he gave a public presentation at the time to say, now is the time of v6. And that was 10 years ago at least. It's still not the time of v6, and my desktop still doesn't have Linux on it. One day.**
+
+REY LEJANO: [LAUGHS] In my opinion, that's one of the big key features that went stable for 1.23.
+
+One of the other highlights of 1.23 is [pod security admission going to Beta](/blog/2021/12/09/pod-security-admission-beta/). I know this feature is going to Beta, but I highlight this because as some people might know, PodSecurityPolicy, which was deprecated in 1.21, is targeted to be removed in 1.25. Pod security admission replaces pod security policy. It's an admission controller. It evaluates the pods against a predefined set of pod security standards to either admit or deny the pod for running.
+
+There's three levels of pod security standards. Privileged, that's totally open. Baseline, known privileges escalations are minimized. Or Restricted, which is hardened. And you could set pod security standards either to run in three modes, which is enforce: reject any pods that are in violation; to audit: pods are allowed to be created, but the violations are recorded; or warn: it will send a warning message to the user, and the pod is allowed.
+
+**CRAIG BOX: You mentioned there that PodSecurityPolicy is due to be deprecated in two releases' time. Are we lining up these features so that pod security admission will be GA at that time?**
+
+REY LEJANO: Yes. Absolutely. I'll talk about that for another feature in a little bit as well. There's also another feature that went to GA. It was an API that went to GA, and therefore the Beta API is now deprecated. I'll talk about that a little bit.
+
+**CRAIG BOX: All right. Let's talk about what's next on the list.**
+
+REY LEJANO: Let's move on to more stable enhancements. One is the [TTL controller](https://github.com/kubernetes/enhancements/issues/592). This cleans up jobs and pods after the jobs are finished. There is a TTL timer that starts when the job or pod is finished. This TTL controller watches all the jobs, and ttlSecondsAfterFinished needs to be set. The controller will see if the ttlSecondsAfterFinished, combined with the last transition time, if it's greater than now. If it is, then it will delete the job and the pods of that job.
+
+**CRAIG BOX: Loosely, it could be called a garbage collector?**
+
+REY LEJANO: Yes. Garbage collector for pods and jobs, or jobs and pods.
+
+**CRAIG BOX: If Kubernetes is truly becoming a programming language, it of course has to have a garbage collector implemented.**
+
+REY LEJANO: Yeah. There's another one, too, coming in Alpha. [CHUCKLES]
+
+**CRAIG BOX: Tell me about that.**
+
+REY LEJANO: That one is coming in in Alpha. It's actually one of my favorite features, because there's only a few that I'm going to highlight today. [PVCs for StafeulSet will be cleaned up](https://github.com/kubernetes/enhancements/issues/1847). It will auto-delete PVCs created by StatefulSets, when you delete that StatefulSet.
+
+**CRAIG BOX: What's next on our tour of stable features?**
+
+REY LEJANO: Next one is, [skip volume ownership change goes to stable](https://github.com/kubernetes/enhancements/issues/695). This is from SIG Storage. There are times when you're running a stateful application, like many databases, they're sensitive to permission bits changing underneath. Currently, when a volume is bind mounted inside the container, the permissions of that volume will change recursively. It might take a really long time.
+
+Now, there's a field, the fsGroupChangePolicy, which allows you, as a user, to tell Kubernetes how you want the permission and ownership change for that volume to happen. You can set it to always, to always change permissions, or just on mismatch, to only do it when the permission ownership changes at the top level is different from what is expected.
+
+**CRAIG BOX: It does feel like a lot of these enhancements came from a very particular use case where someone said, "hey, this didn't work for me and I've plumbed in a feature that works with exactly the thing I need to have".**
+
+REY LEJANO: Absolutely. People create issues for these, then create Kubernetes enhancement proposals, and then get targeted for releases.
+
+**CRAIG BOX: Another GA feature in this release — ephemeral volumes.**
+
+REY LEJANO: We've always been able to use empty dir for ephemeral volumes, but now we could actually have [ephemeral inline volumes](https://github.com/kubernetes/enhancements/issues/1698), meaning that you could take your standard CSI driver and be able to use ephemeral volumes with it.
+
+**CRAIG BOX: And, a long time coming, [CronJobs](https://github.com/kubernetes/enhancements/issues/19).**
+
+REY LEJANO: CronJobs is a funny one, because it was stable before 1.23. For 1.23, it was still tracked,but it was just cleaning up some of the old controller. With CronJobs, there's a v2 controller. What was cleaned up in 1.23 is just the old v1 controller.
+
+**CRAIG BOX: Were there any other duplications or major cleanups of note in this release?**
+
+REY LEJANO: Yeah. There were a few you might see in the major themes. One's a little tricky, around FlexVolumes. This is one of the efforts from SIG Storage. They have an effort to migrate in-tree plugins to CSI drivers. This is a little tricky, because FlexVolumes were actually deprecated in November 2020. We're [formally announcing it in 1.23](https://github.com/kubernetes/community/blob/master/sig-storage/volume-plugin-faq.md#kubernetes-volume-plugin-faq-for-storage-vendors).
+
+**CRAIG BOX: FlexVolumes, in my mind, predate CSI as a concept. So it's about time to get rid of them.**
+
+REY LEJANO: Yes, it is. There's another deprecation, just some [klog specific flags](https://kubernetes.io/docs/concepts/cluster-administration/system-logs/#klog), but other than that, there are no other big deprecations in 1.23.
+
+**CRAIG BOX: The buzzword of the last KubeCon, and in some ways the theme of the last 12 months, has been secure software supply chain. What work is Kubernetes doing to improve in this area?**
+
+REY LEJANO: For 1.23, Kubernetes is now SLSA compliant at Level 1, which means that provenance attestation files that describe the staging and release phases of the release process are satisfactory for the SLSA framework.
+
+**CRAIG BOX: What needs to happen to step up to further levels?**
+
+REY LEJANO: Level 1 means a few things — that the build is scripted; that the provenance is available, meaning that the artifacts are verified and they're handed over from one phase to the next; and describes how the artifact is produced. Level 2 means that the source is version-controlled, which it is, provenance is authenticated, provenance is service-generated, and there is a build service. There are four levels of SLSA compliance.
+
+**CRAIG BOX: It does seem like the levels were largely influenced by what it takes to build a big, secure project like this. It doesn't seem like it will take a lot of extra work to move up to verifiable provenance, for example. There's probably just a few lines of script required to meet many of those requirements.**
+
+REY LEJANO: Absolutely. I feel like we're almost there; we'll see what will come out of 1.24. And I do want to give a big shout-out to SIG Release and Release Engineering, primarily to Adolfo García Veytia, who is aka Puerco on GitHub and on Slack. He's been driving this forward.
+
+**CRAIG BOX: You've mentioned some APIs that are being graduated in time to replace their deprecated version. Tell me about the new HPA API.**
+
+REY LEJANO: The [horizontal pod autoscaler v2 API](https://github.com/kubernetes/enhancements/issues/2702), is now stable, which means that the v2beta2 API is deprecated. Just for everyone's knowledge, the v1 API is not being deprecated. The difference is that v2 adds support for multiple and custom metrics to be used for HPA.
+
+**CRAIG BOX: There's also now a facility to validate my CRDs with an expression language.**
+
+REY LEJANO: Yeah. You can use the [Common Expression Language, or CEL](https://github.com/google/cel-spec), to validate your CRDs, so you no longer need to use webhooks. This also makes the CRDs more self-contained and declarative, because the rules are now kept within the CRD object definition.
+
+**CRAIG BOX: What new features, perhaps coming in Alpha or Beta, have taken your interest?**
+
+REY LEJANO: Aside from pod security policies, I really love [ephemeral containers](https://github.com/kubernetes/enhancements/issues/277) supporting kubectl debug. It launches an ephemeral container and a running pod, shares those pod namespaces, and you can do all your troubleshooting with just running kubectl debug.
+
+**CRAIG BOX: There's also been some interesting changes in the way that events are handled with kubectl.**
+
+REY LEJANO: Yeah. kubectl events has always had some issues, like how things weren't sorted. [kubectl events improved](https://github.com/kubernetes/enhancements/issues/1440) that so now you can do `--watch`, and it will also sort with the `--watch` option as well. That is something new. You can actually combine fields and custom columns. And also, you can list events in the timeline with doing the last N number of minutes. And you can also sort events using other criteria as well.
+
+**CRAIG BOX: You are a field engineer at SUSE. Are there any things that are coming in that your individual customers that you deal with are looking out for?**
+
+REY LEJANO: More of what I look out for to help the customers.
+
+**CRAIG BOX: Right.**
+
+REY LEJANO: I really love kubectl events. Really love the PVCs being cleaned up with StatefulSets. Most of it's for selfish reasons that it will improve troubleshooting efforts. [CHUCKLES]
+
+**CRAIG BOX: I have always hoped that a release team lead would say to me, "yes, I have selfish reasons. And I finally got something I wanted in."**
+
+REY LEJANO: [LAUGHS]
+
+**CRAIG BOX: Perhaps I should run to be release team lead, just so I can finally get init containers fixed once and for all.**
+
+REY LEJANO: Oh, init containers, I've been looking for that for a while. I've actually created animated GIFs on how init containers will be run with that Kubernetes enhancement proposal, but it's halted currently.
+
+**CRAIG BOX: One day.**
+
+REY LEJANO: One day. Maybe I shouldn't stay halted.
+
+**CRAIG BOX: You mentioned there are obviously the things you look out for. Are there any things that are coming down the line, perhaps Alpha features or maybe even just proposals you've seen lately, that you're personally really looking forward to seeing which way they go?**
+
+REY LEJANO: Yeah. Oone is a very interesting one, it affects the whole community, so it's not just for personal reasons. As you may have known, Dockershim is deprecated. And we did release a blog that it will be removed in 1.24.
+
+**CRAIG BOX: Scared a bunch of people.**
+
+REY LEJANO: Scared a bunch of people. From a survey, we saw that a lot of people are still using Docker and Dockershim. One of the enhancements for 1.23 is, [kubelet CRI goes to Beta](https://github.com/kubernetes/enhancements/issues/2040). This promotes the CRI API, which is required. This had to be in Beta for Dockershim to be removed in 1.24.
+
+**CRAIG BOX: Now, in the last release team lead interview, [we spoke with Savitha Raghunathan](https://kubernetespodcast.com/episode/157-kubernetes-1.22/), and she talked about what she would advise you as her successor. It was to look out for the mental health of the team members. How were you able to take that advice on board?**
+
+REY LEJANO: That was great advice from Savitha. A few things I've made note of with each release team meeting. After each release team meeting, I stop the recording, because we do record all the meetings and post them on YouTube. And I open up the floor to anyone who wants to say anything that's not recorded, that's not going to be on the agenda. Also, I tell people not to work on weekends. I broke this rule once, but other than that, I told people it could wait. Just be mindful of your mental health.
+
+**CRAIG BOX: It's just been announced that [James Laverack from Jetstack](https://twitter.com/JamesLaverack/status/1466834312993644551) will be the release team lead for 1.24. James and I shared an interesting Mexican dinner at the last KubeCon in San Diego.**
+
+REY LEJANO: Oh, nice. I didn't know you knew James.
+
+**CRAIG BOX: The British tech scene. We're a very small world. What will your advice to James be?**
+
+REY LEJANO: What I would tell James for 1.24 is use teachable moments in the release team meetings. When you're a shadow for the first time, it's very daunting. It's very difficult, because you don't know the repos. You don't know the release process. Everyone around you seems like they know the release process, and very familiar with what the release process is. But as a first-time shadow, you don't know all the vernacular for the community. I just advise to use teachable moments. Take a few minutes in the release team meetings to make it a little easier for new shadows to ramp up and to be familiar with the release process.
+
+**CRAIG BOX: Has there been major evolution in the process in the time that you've been involved? Or do you think that it's effectively doing what it needs to do?**
+
+REY LEJANO: It's always evolving. I remember my first time in release notes, 1.18, we said that our goal was to automate and program our way out so that we don't have a release notes team anymore. That's changed [CHUCKLES] quite a bit. Although there's been significant advancements in the release notes process by Adolfo and also James, they've created a subcommand in krel to generate release notes.
+
+But nowadays, all their release notes are richer. Still not there at the automation process yet. Every release cycle, there is something a little bit different. For this release cycle, we had a production readiness review deadline. It was a soft deadline. A production readiness review is a review by several people in the community. It's actually been required since 1.21, and it ensures that the enhancements are observable, scalable, supportable, and it's safe to operate in production, and could also be disabled or rolled back. In 1.23, we had a deadline to have the production readiness review completed by a specific date.
+
+**CRAIG BOX: How have you found the change of schedule to three releases per year rather than four?**
+
+REY LEJANO: Moving to three releases a year from four, in my opinion, has been an improvement, because we support the last three releases, and now we can actually support the last releases in a calendar year instead of having 9 months out of 12 months of the year.
+
+**CRAIG BOX: The next event on the calendar is a [Kubernetes contributor celebration](https://www.kubernetes.dev/events/kcc2021/) starting next Monday. What can we expect from that event?**
+
+REY LEJANO: This is our second time running this virtual event. It's a virtual celebration to recognize the whole community and all of our accomplishments of the year, and also contributors. There's a number of events during this week of celebration. It starts the week of December 13.
+
+There's events like the Kubernetes Contributor Awards, where SIGs honor and recognize the hard work of the community and contributors. There's also a DevOps party game as well. There is a cloud native bake-off. I do highly suggest people to go to [kubernetes.dev/celebration](https://www.kubernetes.dev/events/past-events/2021/kcc2021/) to learn more.
+
+**CRAIG BOX: How exactly does one judge a virtual bake-off?**
+
+REY LEJANO: That I don't know. [CHUCKLES]
+
+**CRAIG BOX: I tasted my scones. I think they're the best. I rate them 10 out of 10.**
+
+REY LEJANO: Yeah. That is very difficult to do virtually. I would have to say, probably what the dish is, how closely it is tied with Kubernetes or open source or to CNCF. There's a few judges. I know Josh Berkus and Rin Oliver are a few of the judges running the bake-off.
+
+**CRAIG BOX: Yes. We spoke with Josh about his love of the kitchen, and so he seems like a perfect fit for that role.**
+
+REY LEJANO: He is.
+
+**CRAIG BOX: Finally, your wife and yourself are expecting your first child in January. Have you had a production readiness review for that?**
+
+REY LEJANO: I think we failed that review. [CHUCKLES]
+
+**CRAIG BOX: There's still time.**
+
+REY LEJANO: We are working on refactoring. We're going to refactor a little bit in December, and `--apply` again.
+
+---
+
+_[Rey Lejano](https://twitter.com/reylejano) is a field engineer at SUSE, by way of Rancher Labs, and was the release team lead for Kubernetes 1.23. He is now also a co-chair for SIG Docs. His son Liam is now 3 and a half months old._
+
+_You can find the [Kubernetes Podcast from Google](http://www.kubernetespodcast.com/) at [@KubernetesPod](https://twitter.com/KubernetesPod) on Twitter, and you can [subscribe](https://kubernetespodcast.com/subscribe/) so you never miss an episode._
diff --git a/content/en/blog/_posts/2022-05-03-dockershim-historical-context.md b/content/en/blog/_posts/2022-05-03-dockershim-historical-context.md
new file mode 100644
index 0000000000..6bdfac570d
--- /dev/null
+++ b/content/en/blog/_posts/2022-05-03-dockershim-historical-context.md
@@ -0,0 +1,25 @@
+---
+layout: blog
+title: "Dockershim: The Historical Context"
+date: 2022-05-03
+slug: dockershim-historical-context
+---
+
+**Author:** Kat Cosgrove
+
+
+Dockershim has been removed as of Kubernetes v1.24, and this is a positive move for the project. However, context is important for fully understanding something, be it socially or in software development, and this deserves a more in-depth review. Alongside the dockershim removal in Kubernetes v1.24, we’ve seen some confusion (sometimes at a panic level) and dissatisfaction with this decision in the community, largely due to a lack of context around this removal. The decision to deprecate and eventually remove dockershim from Kubernetes was not made quickly or lightly. Still, it’s been in the works for so long that many of today’s users are newer than that decision, and certainly newer than the choices that led to the dockershim being necessary in the first place.
+
+So what is the dockershim, and why is it going away?
+
+In the early days of Kubernetes, we only supported one container runtime. That runtime was Docker Engine. Back then, there weren’t really a lot of other options out there and Docker was the dominant tool for working with containers, so this was not a controversial choice. Eventually, we started adding more container runtimes, like rkt and hypernetes, and it became clear that Kubernetes users want a choice of runtimes working best for them. So Kubernetes needed a way to allow cluster operators the flexibility to use whatever runtime they choose.
+
+The [Container Runtime Interface](/blog/2016/12/container-runtime-interface-cri-in-kubernetes/) (CRI) was released to allow that flexibility. The introduction of CRI was great for the project and users alike, but it did introduce a problem: Docker Engine’s use as a container runtime predates CRI, and Docker Engine is not CRI-compatible. To solve this issue, a small software shim (dockershim) was introduced as part of the kubelet component specifically to fill in the gaps between Docker Engine and CRI, allowing cluster operators to continue using Docker Engine as their container runtime largely uninterrupted.
+
+However, this little software shim was never intended to be a permanent solution. Over the course of years, its existence has introduced a lot of unnecessary complexity to the kubelet itself. Some integrations are inconsistently implemented for Docker because of this shim, resulting in an increased burden on maintainers, and maintaining vendor-specific code is not in line with our open source philosophy. To reduce this maintenance burden and move towards a more collaborative community in support of open standards, [KEP-2221 was introduced](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2221-remove-dockershim), proposing the removal of the dockershim. With the release of Kubernetes v1.20, the deprecation was official.
+
+We didn’t do a great job communicating this, and unfortunately, the deprecation announcement led to some panic within the community. Confusion around what this meant for Docker as a company, if container images built by Docker would still run, and what Docker Engine actually is led to a conflagration on social media. This was our fault; we should have more clearly communicated what was happening and why at the time. To combat this, we released [a blog](/blog/2020/12/02/dont-panic-kubernetes-and-docker/) and [accompanying FAQ](/blog/2020/12/02/dockershim-faq/) to allay the community’s fears and correct some misconceptions about what Docker is and how containers work within Kubernetes. As a result of the community’s concerns, Docker and Mirantis jointly agreed to continue supporting the dockershim code in the form of [cri-dockerd](https://www.mirantis.com/blog/the-future-of-dockershim-is-cri-dockerd/), allowing you to continue using Docker Engine as your container runtime if need be. For the interest of users who want to try other runtimes, like containerd or cri-o, [migration documentation was written](/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd/).
+
+We later [surveyed the community](https://kubernetes.io/blog/2021/11/12/are-you-ready-for-dockershim-removal/) and [discovered that there are still many users with questions and concerns](/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim). In response, Kubernetes maintainers and the CNCF committed to addressing these concerns by extending documentation and other programs. In fact, this blog post is a part of this program. With so many end users successfully migrated to other runtimes, and improved documentation, we believe that everyone has a paved way to migration now.
+
+Docker is not going away, either as a tool or as a company. It’s an important part of the cloud native community and the history of the Kubernetes project. We wouldn’t be where we are without them. That said, removing dockershim from kubelet is ultimately good for the community, the ecosystem, the project, and open source at large. This is an opportunity for all of us to come together to support open standards, and we’re glad to be doing so with the help of Docker and the community.
diff --git a/content/en/blog/_posts/2022-05-03-kubernetes-release-1.24.md b/content/en/blog/_posts/2022-05-03-kubernetes-release-1.24.md
new file mode 100644
index 0000000000..f29c6c92fe
--- /dev/null
+++ b/content/en/blog/_posts/2022-05-03-kubernetes-release-1.24.md
@@ -0,0 +1,242 @@
+---
+layout: blog
+title: "Kubernetes 1.24: Stargazer"
+date: 2022-05-03
+slug: kubernetes-1-24-release-announcement
+---
+
+**Authors**: [Kubernetes 1.24 Release Team](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.24/release-team.md)
+
+We are excited to announce the release of Kubernetes 1.24, the first release of 2022!
+
+This release consists of 46 enhancements: fourteen enhancements have graduated to stable,
+fifteen enhancements are moving to beta, and thirteen enhancements are entering alpha.
+Also, two features have been deprecated, and two features have been removed.
+
+## Major Themes
+
+### Dockershim Removed from kubelet
+
+After its deprecation in v1.20, the dockershim component has been removed from the kubelet in Kubernetes v1.24.
+From v1.24 onwards, you will need to either use one of the other [supported runtimes](/docs/setup/production-environment/container-runtimes/) (such as containerd or CRI-O)
+or use cri-dockerd if you are relying on Docker Engine as your container runtime.
+For more information about ensuring your cluster is ready for this removal, please
+see [this guide](/blog/2022/03/31/ready-for-dockershim-removal/).
+
+### Beta APIs Off by Default
+
+[New beta APIs will not be enabled in clusters by default](https://github.com/kubernetes/enhancements/issues/3136).
+Existing beta APIs and new versions of existing beta APIs will continue to be enabled by default.
+
+### Signing Release Artifacts
+
+Release artifacts are [signed](https://github.com/kubernetes/enhancements/issues/3031) using [cosign](https://github.com/sigstore/cosign)
+signatures,
+and there is experimental support for [verifying image signatures](/docs/tasks/administer-cluster/verify-signed-images/).
+Signing and verification of release artifacts is part of [increasing software supply chain security for the Kubernetes release process](https://github.com/kubernetes/enhancements/issues/3027).
+
+### OpenAPI v3
+
+Kubernetes 1.24 offers beta support for publishing its APIs in the [OpenAPI v3 format](https://github.com/kubernetes/enhancements/issues/2896).
+
+### Storage Capacity and Volume Expansion Are Generally Available
+
+[Storage capacity tracking](https://github.com/kubernetes/enhancements/issues/1472)
+supports exposing currently available storage capacity via [CSIStorageCapacity objects](/docs/concepts/storage/storage-capacity/#api)
+and enhances scheduling of pods that use CSI volumes with late binding.
+
+[Volume expansion](https://github.com/kubernetes/enhancements/issues/284) adds support
+for resizing existing persistent volumes.
+
+### NonPreemptingPriority to Stable
+
+This feature adds [a new option to PriorityClasses](https://github.com/kubernetes/enhancements/issues/902),
+which can enable or disable pod preemption.
+
+### Storage Plugin Migration
+
+Work is underway to [migrate the internals of in-tree storage plugins](https://github.com/kubernetes/enhancements/issues/625) to call out to CSI Plugins
+while maintaining the original API.
+The [Azure Disk](https://github.com/kubernetes/enhancements/issues/1490)
+and [OpenStack Cinder](https://github.com/kubernetes/enhancements/issues/1489) plugins
+have both been migrated.
+
+### gRPC Probes Graduate to Beta
+
+With Kubernetes 1.24, the [gRPC probes functionality](https://github.com/kubernetes/enhancements/issues/2727)
+has entered beta and is available by default. You can now [configure startup, liveness, and readiness probes](/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes) for your gRPC app
+natively within Kubernetes without exposing an HTTP endpoint or
+using an extra executable.
+
+### Kubelet Credential Provider Graduates to Beta
+
+Originally released as Alpha in Kubernetes 1.20, the kubelet's support for
+[image credential providers](/docs/tasks/kubelet-credential-provider/kubelet-credential-provider/)
+has now graduated to Beta.
+This allows the kubelet to dynamically retrieve credentials for a container image registry
+using exec plugins rather than storing credentials on the node's filesystem.
+
+### Contextual Logging in Alpha
+
+Kubernetes 1.24 has introduced [contextual logging](https://github.com/kubernetes/enhancements/issues/3077)
+that enables the caller of a function to control all aspects of logging (output formatting, verbosity, additional values, and names).
+
+### Avoiding Collisions in IP allocation to Services
+
+Kubernetes 1.24 introduces a new opt-in feature that allows you to
+[soft-reserve a range for static IP address assignments](/docs/concepts/services-networking/service/#service-ip-static-sub-range)
+to Services.
+With the manual enablement of this feature, the cluster will prefer automatic assignment from
+the pool of Service IP addresses, thereby reducing the risk of collision.
+
+A Service `ClusterIP` can be assigned:
+
+* dynamically, which means the cluster will automatically pick a free IP within the configured Service IP range.
+* statically, which means the user will set one IP within the configured Service IP range.
+
+Service `ClusterIP` are unique; hence, trying to create a Service with a `ClusterIP` that has already been allocated will return an error.
+
+### Dynamic Kubelet Configuration is Removed from the Kubelet
+
+After being deprecated in Kubernetes 1.22, Dynamic Kubelet Configuration has been removed from the kubelet. The feature will be removed from the API server in Kubernetes 1.26.
+
+## CNI Version-Related Breaking Change
+
+Before you upgrade to Kubernetes 1.24, please verify that you are using/upgrading to a container
+runtime that has been tested to work correctly with this release.
+
+For example, the following container runtimes are being prepared, or have already been prepared, for Kubernetes:
+
+* containerd v1.6.4 and later, v1.5.11 and later
+* CRI-O 1.24 and later
+
+Service issues exist for pod CNI network setup and tear down in containerd
+v1.6.0–v1.6.3 when the CNI plugins have not been upgraded and/or the CNI config
+version is not declared in the CNI config files. The containerd team reports, "these issues are resolved in containerd v1.6.4."
+
+With containerd v1.6.0–v1.6.3, if you do not upgrade the CNI plugins and/or
+declare the CNI config version, you might encounter the following "Incompatible
+CNI versions" or "Failed to destroy network for sandbox" error conditions.
+
+## CSI Snapshot
+
+_This information was added after initial publication._
+
+[VolumeSnapshot v1beta1 CRD has been removed](https://github.com/kubernetes/enhancements/issues/177).
+Volume snapshot and restore functionality for Kubernetes and the Container Storage Interface (CSI), which provides standardized APIs design (CRDs) and adds PV snapshot/restore support for CSI volume drivers, moved to GA in v1.20. VolumeSnapshot v1beta1 was deprecated in v1.20 and is now unsupported. Refer to [KEP-177: CSI Snapshot](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/177-volume-snapshot#kep-177-csi-snapshot) and [Volume Snapshot GA blog](https://kubernetes.io/blog/2020/12/10/kubernetes-1.20-volume-snapshot-moves-to-ga/) for more information.
+
+## Other Updates
+
+### Graduations to Stable
+
+This release saw fourteen enhancements promoted to stable:
+
+* [Container Storage Interface (CSI) Volume Expansion](https://github.com/kubernetes/enhancements/issues/284)
+* [Pod Overhead](https://github.com/kubernetes/enhancements/issues/688): Account for resources tied to the pod sandbox but not specific containers.
+* [Add non-preempting option to PriorityClasses](https://github.com/kubernetes/enhancements/issues/902)
+* [Storage Capacity Tracking](https://github.com/kubernetes/enhancements/issues/1472)
+* [OpenStack Cinder In-Tree to CSI Driver Migration](https://github.com/kubernetes/enhancements/issues/1489)
+* [Azure Disk In-Tree to CSI Driver Migration](https://github.com/kubernetes/enhancements/issues/1490)
+* [Efficient Watch Resumption](https://github.com/kubernetes/enhancements/issues/1904): Watch can be efficiently resumed after kube-apiserver reboot.
+* [Service Type=LoadBalancer Class Field](https://github.com/kubernetes/enhancements/issues/1959): Introduce a new Service annotation `service.kubernetes.io/load-balancer-class` that allows multiple implementations of `type: LoadBalancer` Services in the same cluster.
+* [Indexed Job](https://github.com/kubernetes/enhancements/issues/2214): Add a completion index to Pods of Jobs with a fixed completion count.
+* [Add Suspend Field to Jobs API](https://github.com/kubernetes/enhancements/issues/2232): Add a suspend field to the Jobs API to allow orchestrators to create jobs with more control over when pods are created.
+* [Pod Affinity NamespaceSelector](https://github.com/kubernetes/enhancements/issues/2249): Add a `namespaceSelector` field for to pod affinity/anti-affinity spec.
+* [Leader Migration for Controller Managers](https://github.com/kubernetes/enhancements/issues/2436): kube-controller-manager and cloud-controller-manager can apply new controller-to-controller-manager assignment in HA control plane without downtime.
+* [CSR Duration](https://github.com/kubernetes/enhancements/issues/2784): Extend the CertificateSigningRequest API with a mechanism to allow clients to request a specific duration for the issued certificate.
+
+### Major Changes
+
+This release saw two major changes:
+
+* [Dockershim Removal](https://github.com/kubernetes/enhancements/issues/2221)
+* [Beta APIs are off by Default](https://github.com/kubernetes/enhancements/issues/3136)
+
+### Release Notes
+
+Check out the full details of the Kubernetes 1.24 release in our [release notes](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md).
+
+### Availability
+
+Kubernetes 1.24 is available for download on [GitHub](https://github.com/kubernetes/kubernetes/releases/tag/v1.24.0).
+To get started with Kubernetes, check out these [interactive tutorials](/docs/tutorials/) or run local
+Kubernetes clusters using containers as “nodes”, with [kind](https://kind.sigs.k8s.io/).
+You can also easily install 1.24 using [kubeadm](/docs/setup/independent/create-cluster-kubeadm/).
+
+### Release Team
+
+This release would not have been possible without the combined efforts of committed individuals
+comprising the Kubernetes 1.24 release team. This team came together to deliver all of the components
+that go into each Kubernetes release, including code, documentation, release notes, and more.
+
+Special thanks to James Laverack, our release lead, for guiding us through a successful release cycle,
+and to all of the release team members for the time and effort they put in to deliver the v1.24
+release for the Kubernetes community.
+
+### Release Theme and Logo
+
+**Kubernetes 1.24: Stargazer**
+
+{{< figure src="/images/blog/2022-05-03-kubernetes-release-1.24/kubernetes-1.24.png" alt="" class="release-logo" >}}
+
+The theme for Kubernetes 1.24 is _Stargazer_.
+
+Generations of people have looked to the stars in awe and wonder, from ancient astronomers to the
+scientists who built the James Webb Space Telescope. The stars have inspired us, set our imagination
+alight, and guided us through long nights on difficult seas.
+
+With this release we gaze upwards, to what is possible when our community comes together. Kubernetes
+is the work of hundreds of contributors across the globe and thousands of end-users supporting
+applications that serve millions. Every one is a star in our sky, helping us chart our course.
+
+The release logo is made by [Britnee Laverack](https://www.instagram.com/artsyfie/), and depicts a telescope set upon starry skies and the
+[Pleiades](https://en.wikipedia.org/wiki/Pleiades), often known in mythology as the “Seven Sisters”. The number seven is especially auspicious
+for the Kubernetes project, and is a reference back to our original “Project Seven” name.
+
+This release of Kubernetes is named for those that would look towards the night sky and wonder — for
+all the stargazers out there. ✨
+
+### User Highlights
+
+* Check out how leading retail e-commerce company [La Redoute used Kubernetes, alongside other CNCF projects, to transform and streamline its software delivery lifecycle](https://www.cncf.io/case-studies/la-redoute/) - from development to operations.
+* Trying to ensure no change to an API call would cause any breaks, [Salt Security built its microservices entirely on Kubernetes, and it communicates via gRPC while Linkerd ensures messages are encrypted](https://www.cncf.io/case-studies/salt-security/).
+* In their effort to migrate from private to public cloud, [Allainz Direct engineers redesigned its CI/CD pipeline in just three months while managing to condense 200 workflows down to 10-15](https://www.cncf.io/case-studies/allianz/).
+* Check out how [Bink, a UK based fintech company, updated its in-house Kubernetes distribution with Linkerd to build a cloud-agnostic platform that scales as needed whilst allowing them to keep a close eye on performance and stability](https://www.cncf.io/case-studies/bink/).
+* Using Kubernetes, the Dutch organization [Stichting Open Nederland](http://www.stichtingopennederland.nl/) created a testing portal in just one-and-a-half months to help safely reopen events in the Netherlands. The [Testing for Entry (Testen voor Toegang)](https://www.testenvoortoegang.org/) platform [leveraged the performance and scalability of Kubernetes to help individuals book over 400,000 COVID-19 testing appointments per day. ](https://www.cncf.io/case-studies/true/)
+* Working alongside SparkFabrik and utilizing Backstage, [Santagostino created the developer platform Samaritan to centralize services and documentation, manage the entire lifecycle of services, and simplify the work of Santagostino developers](https://www.cncf.io/case-studies/santagostino/).
+
+### Ecosystem Updates
+
+* KubeCon + CloudNativeCon Europe 2022 will take place in Valencia, Spain, from 16 – 20 May 2022! You can find more information about the conference and registration on the [event site](https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/).
+* In the [2021 Cloud Native Survey](https://www.cncf.io/announcements/2022/02/10/cncf-sees-record-kubernetes-and-container-adoption-in-2021-cloud-native-survey/), the CNCF saw record Kubernetes and container adoption. Take a look at the [results of the survey](https://www.cncf.io/reports/cncf-annual-survey-2021/).
+* The [Linux Foundation](https://www.linuxfoundation.org/) and [The Cloud Native Computing Foundation](https://www.cncf.io/) (CNCF) announced the availability of a new [Cloud Native Developer Bootcamp](https://training.linuxfoundation.org/training/cloudnativedev-bootcamp/?utm_source=lftraining&utm_medium=pr&utm_campaign=clouddevbc0322) to provide participants with the knowledge and skills to design, build, and deploy cloud native applications. Check out the [announcement](https://www.cncf.io/announcements/2022/03/15/new-cloud-native-developer-bootcamp-provides-a-clear-path-to-cloud-native-careers/) to learn more.
+
+### Project Velocity
+
+The [CNCF K8s DevStats](https://k8s.devstats.cncf.io/d/12/dashboards?orgId=1&refresh=15m) project
+aggregates a number of interesting data points related to the velocity of Kubernetes and various
+sub-projects. This includes everything from individual contributions to the number of companies that
+are contributing, and is an illustration of the depth and breadth of effort that goes into evolving this ecosystem.
+
+In the v1.24 release cycle, which [ran for 17 weeks](https://github.com/kubernetes/sig-release/tree/master/releases/release-1.24) (January 10 to May 3), we saw contributions from [1029 companies](https://k8s.devstats.cncf.io/d/9/companies-table?orgId=1&var-period_name=v1.23.0%20-%20v1.24.0&var-metric=contributions) and [1179 individuals](https://k8s.devstats.cncf.io/d/66/developer-activity-counts-by-companies?orgId=1&var-period_name=v1.23.0%20-%20v1.24.0&var-metric=contributions&var-repogroup_name=Kubernetes&var-country_name=All&var-companies=All&var-repo_name=kubernetes%2Fkubernetes).
+
+## Upcoming Release Webinar
+
+Join members of the Kubernetes 1.24 release team on Tue May 24, 2022 9:45am – 11am PT to learn about
+the major features of this release, as well as deprecations and removals to help plan for upgrades.
+For more information and registration, visit the [event page](https://community.cncf.io/e/mck3kd/)
+on the CNCF Online Programs site.
+
+## Get Involved
+
+The simplest way to get involved with Kubernetes is by joining one of the many [Special Interest Groups](https://github.com/kubernetes/community/blob/master/sig-list.md) (SIGs) that align with your interests.
+Have something you’d like to broadcast to the Kubernetes community? Share your voice at our weekly [community meeting](https://github.com/kubernetes/community/tree/master/communication), and through the channels below:
+
+* Find out more about contributing to Kubernetes at the [Kubernetes Contributors](https://www.kubernetes.dev/) website
+* Follow us on Twitter [@Kubernetesio](https://twitter.com/kubernetesio) for the latest updates
+* Join the community discussion on [Discuss](https://discuss.kubernetes.io/)
+* Join the community on [Slack](http://slack.k8s.io/)
+* Post questions (or answer questions) on [Server Fault](https://serverfault.com/questions/tagged/kubernetes).
+* Share your Kubernetes [story](https://docs.google.com/a/linuxfoundation.org/forms/d/e/1FAIpQLScuI7Ye3VQHQTwBASrgkjQDSS5TP0g3AXfFhwSM9YpHgxRKFA/viewform)
+* Read more about what’s happening with Kubernetes on the [blog](https://kubernetes.io/blog/)
+* Learn more about the [Kubernetes Release Team](https://github.com/kubernetes/sig-release/tree/master/release-team)
diff --git a/content/en/blog/_posts/2022-05-05-volume-expansion-ga.md b/content/en/blog/_posts/2022-05-05-volume-expansion-ga.md
new file mode 100644
index 0000000000..c823ae8a2c
--- /dev/null
+++ b/content/en/blog/_posts/2022-05-05-volume-expansion-ga.md
@@ -0,0 +1,103 @@
+---
+layout: blog
+title: "Kubernetes 1.24: Volume Expansion Now A Stable Feature"
+date: 2022-05-05
+slug: volume-expansion-ga
+---
+
+**Author:** Hemant Kumar (Red Hat)
+
+Volume expansion was introduced as a alpha feature in Kubernetes 1.8 and it went beta in 1.11 and with Kubernetes 1.24 we are excited to announce general availability(GA)
+of volume expansion.
+
+This feature allows Kubernetes users to simply edit their `PersistentVolumeClaim` objects and specify new size in PVC Spec and Kubernetes will automatically expand the volume
+using storage backend and also expand the underlying file system in-use by the Pod without requiring any downtime at all if possible.
+
+
+### How to use volume expansion
+
+You can trigger expansion for a PersistentVolume by editing the `spec` field of a PVC, specifying a different
+(and larger) storage request. For example, given following PVC:
+
+```
+kind: PersistentVolumeClaim
+apiVersion: v1
+metadata:
+ name: myclaim
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 1Gi # specify new size here
+```
+
+You can request expansion of the underlying PersistentVolume by specifying a new value instead of old `1Gi` size.
+Once you've changed the requested size, watch the `status.conditions` field of the PVC to see if the
+resize has completed.
+
+When Kubernetes starts expanding the volume - it will add `Resizing` condition to the PVC, which will be removed once expansion completes. More information about progress of
+expansion operation can also be obtained by monitoring events associated with the PVC:
+
+```
+kubectl describe pvc
+```
+
+### Storage driver support
+
+Not every volume type however is expandable by default. Some volume types such as - intree hostpath volumes are not expandable at all. For CSI volumes - the CSI driver
+must have capability `EXPAND_VOLUME` in controller or node service (or both if appropriate). Please refer to documentation of your CSI driver, to find out
+if it supports volume expansion.
+
+Please refer to volume expansion documentation for intree volume types which support volume expansion - [Expanding Persistent Volumes](/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims).
+
+
+In general to provide some degree of control over volumes that can be expanded, only dynamically provisioned PVCs whose storage class has `allowVolumeExpansion` parameter set to `true` are expandable.
+
+A Kubernetes cluster administrator must edit the appropriate StorageClass object and set
+the `allowVolumeExpansion` field to `true`. For example:
+
+```
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: gp2-default
+provisioner: kubernetes.io/aws-ebs
+parameters:
+ secretNamespace: ""
+ secretName: ""
+allowVolumeExpansion: true
+```
+
+### Online expansion compared to offline expansion
+
+By default, Kubernetes attempts to expand volumes immediately after user requests a resize.
+If one or more Pods are using the volume, Kubernetes tries to expands the volume using an online resize;
+as a result volume expansion usually requires no application downtime.
+Filesystem expansion on the node is also performed online and hence does not require shutting
+down any Pod that was using the PVC.
+
+If you expand a PersistentVolume that is not in use, Kubernetes does an offline resize (and,
+because the volume isn't in use, there is again no workload disruption).
+
+In some cases though - if underlying Storage Driver can only support offline expansion, users of the PVC must take down their Pod before expansion can succeed. Please refer to documentation of your storage
+provider to find out - what mode of volume expansion it supports.
+
+When volume expansion was introduced as an alpha feature, Kubernetes only supported offline filesystem
+expansion on the node and hence required users to restart their pods for file system resizing to finish.
+His behaviour has been changed and Kubernetes tries its best to fulfil any resize request regardless
+of whether the underlying PersistentVolume volume is online or offline. If your storage provider supports
+online expansion then no Pod restart should be necessary for volume expansion to finish.
+
+## Next steps
+
+Although volume expansion is now stable as part of the recent v1.24 release,
+SIG Storage are working to make it even simpler for users of Kubernetes to expand their persistent storage.
+Kubernetes 1.23 introduced features for triggering recovery from failed volume expansion, allowing users
+to attempt self-service healing after a failed resize.
+See [Recovering from volume expansion failure](/docs/concepts/storage/persistent-volumes/#recovering-from-failure-when-expanding-volumes) for more details.
+
+The Kubernetes contributor community is also discussing the potential for StatefulSet-driven storage expansion. This proposed
+feature would let you trigger expansion for all underlying PVs that are providing storage to a StatefulSet,
+by directly editing the StatefulSet object.
+See the [Support Volume Expansion Through StatefulSets](https://github.com/kubernetes/enhancements/issues/661) enhancement proposal for more details.
diff --git a/content/en/blog/_posts/2022-05-06-storage-capacity-GA/index.md b/content/en/blog/_posts/2022-05-06-storage-capacity-GA/index.md
new file mode 100644
index 0000000000..35d6838f51
--- /dev/null
+++ b/content/en/blog/_posts/2022-05-06-storage-capacity-GA/index.md
@@ -0,0 +1,79 @@
+---
+layout: blog
+title: "Storage Capacity Tracking reaches GA in Kubernetes 1.24"
+date: 2022-05-06
+slug: storage-capacity-ga
+---
+
+ **Authors:** Patrick Ohly (Intel)
+
+The v1.24 release of Kubernetes brings [storage capacity](/docs/concepts/storage/storage-capacity/)
+tracking as a generally available feature.
+
+## Problems we have solved
+
+As explained in more detail in the [previous blog post about this
+feature](/blog/2021/04/14/local-storage-features-go-beta/), storage capacity
+tracking allows a CSI driver to publish information about remaining
+capacity. The kube-scheduler then uses that information to pick suitable nodes
+for a Pod when that Pod has volumes that still need to be provisioned.
+
+Without this information, a Pod may get stuck without ever being scheduled onto
+a suitable node because kube-scheduler has to choose blindly and always ends up
+picking a node for which the volume cannot be provisioned because the
+underlying storage system managed by the CSI driver does not have sufficient
+capacity left.
+
+Because CSI drivers publish storage capacity information that gets used at a
+later time when it might not be up-to-date anymore, it can still happen that a
+node is picked that doesn't work out after all. Volume provisioning recovers
+from that by informing the scheduler that it needs to try again with a
+different node.
+
+[Load
+tests](https://github.com/kubernetes-csi/csi-driver-host-path/blob/master/docs/storage-capacity-tracking.md)
+that were done again for promotion to GA confirmed that all storage in a
+cluster can be consumed by Pods with storage capacity tracking whereas Pods got
+stuck without it.
+
+## Problems we have *not* solved
+
+Recovery from a failed volume provisioning attempt has one known limitation: if a Pod
+uses two volumes and only one of them could be provisioned, then all future
+scheduling decisions are limited by the already provisioned volume. If that
+volume is local to a node and the other volume cannot be provisioned there, the
+Pod is stuck. This problem pre-dates storage capacity tracking and while the
+additional information makes it less likely to occur, it cannot be avoided in
+all cases, except of course by only using one volume per Pod.
+
+An idea for solving this was proposed in a [KEP
+draft](https://github.com/kubernetes/enhancements/pull/1703): volumes that were
+provisioned and haven't been used yet cannot have any valuable data and
+therefore could be freed and provisioned again elsewhere. SIG Storage is
+looking for interested developers who want to continue working on this.
+
+Also not solved is support in Cluster Autoscaler for Pods with volumes. For CSI
+drivers with storage capacity tracking, a prototype was developed and discussed
+in [a PR](https://github.com/kubernetes/autoscaler/pull/3887). It was meant to
+work with arbitrary CSI drivers, but that flexibility made it hard to configure
+and slowed down scale up operations: because autoscaler was unable to simulate
+volume provisioning, it only scaled the cluster by one node at a time, which
+was seen as insufficient.
+
+Therefore that PR was not merged and a different approach with tighter coupling
+between autoscaler and CSI driver will be needed. For this a better
+understanding is needed about which local storage CSI drivers are used in
+combination with cluster autoscaling. Should this lead to a new KEP, then users
+will have to try out an implementation in practice before it can move to beta
+or GA. So please reach out to SIG Storage if you have an interest in this
+topic.
+
+## Acknowledgements
+
+Thanks a lot to the members of the community who have contributed to this
+feature or given feedback including members of [SIG
+Scheduling](https://github.com/kubernetes/community/tree/master/sig-scheduling),
+[SIG
+Autoscaling](https://github.com/kubernetes/community/tree/master/sig-autoscaling),
+and of course [SIG
+Storage](https://github.com/kubernetes/community/tree/master/sig-storage)!
diff --git a/content/en/blog/_posts/2022-05-13-grpc-probes-in-beta.md b/content/en/blog/_posts/2022-05-13-grpc-probes-in-beta.md
new file mode 100644
index 0000000000..5ff495410b
--- /dev/null
+++ b/content/en/blog/_posts/2022-05-13-grpc-probes-in-beta.md
@@ -0,0 +1,209 @@
+---
+layout: blog
+title: "Kubernetes 1.24: gRPC container probes in beta"
+date: 2022-05-13
+slug: grpc-probes-now-in-beta
+---
+
+**Author**: Sergey Kanzhelev (Google)
+
+
+With Kubernetes 1.24 the gRPC probes functionality entered beta and is available by default.
+Now you can configure startup, liveness, and readiness probes for your gRPC app
+without exposing any HTTP endpoint, nor do you need an executable. Kubernetes can natively connect to your your workload via gRPC and query its status.
+
+## Some history
+
+It's useful to let the system managing your workload check that the app is
+healthy, has started OK, and whether the app considers itself good to accept
+traffic. Before the gRPC support was added, Kubernetes already allowed you to
+check for health based on running an executable from inside the container image,
+by making an HTTP request, or by checking whether a TCP connection succeeded.
+
+For most apps, those checks are enough. If your app provides a gRPC endpoint
+for a health (or readiness) check, it is easy
+to repurpose the `exec` probe to use it for gRPC health checking.
+In the blog article [Health checking gRPC servers on Kubernetes](/blog/2018/10/01/health-checking-grpc-servers-on-kubernetes/),
+Ahmet Alp Balkan described how you can do that — a mechanism that still works today.
+
+There is a commonly used tool to enable this that was [created](https://github.com/grpc-ecosystem/grpc-health-probe/commit/2df4478982e95c9a57d5fe3f555667f4365c025d)
+on August 21, 2018, and with
+the first release at [Sep 19, 2018](https://github.com/grpc-ecosystem/grpc-health-probe/releases/tag/v0.1.0-alpha.1).
+
+This approach for gRPC apps health checking is very popular. There are [3,626 Dockerfiles](https://github.com/search?l=Dockerfile&q=grpc_health_probe&type=code)
+with the `grpc_health_probe` and [6,621 yaml](https://github.com/search?l=YAML&q=grpc_health_probe&type=Code) files that are discovered with the
+basic search on GitHub (at the moment of writing). This is good indication of the tool popularity
+and the need to support this natively.
+
+Kubernetes v1.23 introduced an alpha-quality implementation of native support for
+querying a workload status using gRPC. Because it was an alpha feature,
+this was disabled by default for the v1.23 release.
+
+## Using the feature
+
+We built gRPC health checking in similar way with other probes and believe
+it will be [easy to use](/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-grpc-liveness-probe)
+if you are familiar with other probe types in Kubernetes.
+The natively supported health probe has many benefits over the workaround involving `grpc_health_probe` executable.
+
+With the native gRPC support you don't need to download and carry `10MB` of an additional executable with your image.
+Exec probes are generally slower than a gRPC call as they require instantiating a new process to run an executable.
+It also makes the checks less sensible for edge cases when the pod is running at maximum resources and has troubles
+instantiating new processes.
+
+There are a few limitations though. Since configuring a client certificate for probes is hard,
+services that require client authentication are not supported. The built-in probes are also
+not checking the server certificates and ignore related problems.
+
+Built-in checks also cannot be configured to ignore certain types of errors
+(`grpc_health_probe` returns different exit codes for different errors),
+and cannot be "chained" to run the health check on multiple services in a single probe.
+
+But all these limitations are quite standard for gRPC and there are easy workarounds
+for those.
+
+## Try it for yourself
+
+### Cluster-level setup
+
+You can try this feature today. To try native gRPC probes, you can spin up a Kubernetes cluster
+yourself with the `GRPCContainerProbe` feature gate enabled, there are many [tools available](/docs/tasks/tools/).
+
+Since the feature gate `GRPCContainerProbe` is enabled by default in 1.24,
+many vendors will have this functionality working out of the box.
+So you may just create an 1.24 cluster on platform of your choice. Some vendors
+allow to enable alpha features on 1.23 clusters.
+
+For example, at the moment of writing, you can spin up the test cluster on GKE for a quick test.
+Other vendors may also have similar capabilities, especially if you
+are reading this blog post long after the Kubernetes 1.24 release.
+
+On GKE use the following command (note, version is `1.23` and `enable-kubernetes-alpha` are specified).
+
+```shell
+gcloud container clusters create test-grpc \
+ --enable-kubernetes-alpha \
+ --no-enable-autorepair \
+ --no-enable-autoupgrade \
+ --release-channel=rapid \
+ --cluster-version=1.23
+```
+
+You will also need to configure `kubectl` to access the cluster:
+
+```shell
+gcloud container clusters get-credentials test-grpc
+```
+
+### Trying the feature out
+
+Let's create the pod to test how gRPC probes work. For this test we will use the `agnhost` image.
+This is a k8s maintained image with that can be used for all sorts of workload testing.
+For example, it has a useful [grpc-health-checking](https://github.com/kubernetes/kubernetes/blob/b2c5bd2a278288b5ef19e25bf7413ecb872577a4/test/images/agnhost/README.md#grpc-health-checking) module
+that exposes two ports - one is serving health checking service,
+another - http port to react on commands `make-serving` and `make-not-serving`.
+
+Here is an example pod definition. It starts the `grpc-health-checking` module,
+exposes ports `5000` and `8080`, and configures gRPC readiness probe:
+
+``` yaml
+---
+apiVersion: v1
+kind: Pod
+metadata:
+ name: test-grpc
+spec:
+ containers:
+ - name: agnhost
+ image: k8s.gcr.io/e2e-test-images/agnhost:2.35
+ command: ["/agnhost", "grpc-health-checking"]
+ ports:
+ - containerPort: 5000
+ - containerPort: 8080
+ readinessProbe:
+ grpc:
+ port: 5000
+```
+
+If the file called `test.yaml`, you can create the pod and check it's status.
+The pod will be in ready state as indicated by the snippet of the output.
+
+```shell
+kubectl apply -f test.yaml
+kubectl describe test-grpc
+```
+
+The output will contain something like this:
+
+```
+Conditions:
+ Type Status
+ Initialized True
+ Ready True
+ ContainersReady True
+ PodScheduled True
+```
+
+Now let's change the health checking endpoint status to NOT_SERVING.
+In order to call the http port of the Pod, let's create a port forward:
+
+```shell
+kubectl port-forward test-grpc 8080:8080
+```
+
+You can `curl` to call the command...
+
+```shell
+curl http://localhost:8080/make-not-serving
+```
+
+... and in a few seconds the port status will switch to not ready.
+
+```shell
+kubectl describe pod test-grpc
+```
+
+The output now will have:
+
+```
+Conditions:
+ Type Status
+ Initialized True
+ Ready False
+ ContainersReady False
+ PodScheduled True
+
+...
+
+ Warning Unhealthy 2s (x6 over 42s) kubelet Readiness probe failed: service unhealthy (responded with "NOT_SERVING")
+```
+
+Once it is switched back, in about one second the Pod will get back to ready status:
+
+``` bsh
+curl http://localhost:8080/make-serving
+kubectl describe test-grpc
+```
+
+The output indicates that the Pod went back to being `Ready`:
+
+```
+Conditions:
+ Type Status
+ Initialized True
+ Ready True
+ ContainersReady True
+ PodScheduled True
+```
+
+This new built-in gRPC health probing on Kubernetes makes implementing a health-check via gRPC
+much easier than the older approach that relied on using a separate `exec` probe. Read through
+the official
+[documentation](/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-grpc-liveness-probe)
+to learn more and provide feedback before the feature will be promoted to GA.
+
+## Summary
+
+Kubernetes is a popular workload orchestration platform and we add features based on feedback and demand.
+Features like gRPC probes support is a minor improvement that will make life of many app developers
+easier and apps more resilient. Try it today and give feedback, before the feature went into GA.
diff --git a/content/en/blog/_posts/2022-05-16-volume-populators-beta.md b/content/en/blog/_posts/2022-05-16-volume-populators-beta.md
new file mode 100644
index 0000000000..4558f07eae
--- /dev/null
+++ b/content/en/blog/_posts/2022-05-16-volume-populators-beta.md
@@ -0,0 +1,162 @@
+---
+layout: blog
+title: "Kubernetes 1.24: Volume Populators Graduate to Beta"
+date: 2022-05-16
+slug: volume-populators-beta
+---
+
+**Author:**
+Ben Swartzlander (NetApp)
+
+The volume populators feature is now two releases old and entering beta! The `AnyVolumeDataSource` feature
+gate defaults to enabled in Kubernetes v1.24, which means that users can specify any custom resource
+as the data source of a PVC.
+
+An [earlier blog article](/blog/2021/08/30/volume-populators-redesigned/) detailed how the
+volume populators feature works. In short, a cluster administrator can install a CRD and
+associated populator controller in the cluster, and any user who can create instances of
+the CR can create pre-populated volumes by taking advantage of the populator.
+
+Multiple populators can be installed side by side for different purposes. The SIG storage
+community is already seeing some implementations in public, and more prototypes should
+appear soon.
+
+Cluster administrations are **strongly encouraged** to install the
+volume-data-source-validator controller and associated `VolumePopulator` CRD before installing
+any populators so that users can get feedback about invalid PVC data sources.
+
+## New Features
+
+The [lib-volume-populator](https://github.com/kubernetes-csi/lib-volume-populator) library
+on which populators are built now includes metrics to help operators monitor and detect
+problems. This library is now beta and latest release is v1.0.1.
+
+The [volume data source validator](https://github.com/kubernetes-csi/volume-data-source-validator)
+controller also has metrics support added, and is in beta. The `VolumePopulator` CRD is
+beta and the latest release is v1.0.1.
+
+## Trying it out
+
+To see how this works, you can install the sample "hello" populator and try it
+out.
+
+First install the volume-data-source-validator controller.
+
+```shell
+kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/volume-data-source-validator/v1.0.1/client/config/crd/populator.storage.k8s.io_volumepopulators.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/volume-data-source-validator/v1.0.1/deploy/kubernetes/rbac-data-source-validator.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/volume-data-source-validator/v1.0.1/deploy/kubernetes/setup-data-source-validator.yaml
+```
+
+Next install the example populator.
+
+```shell
+kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/lib-volume-populator/v1.0.1/example/hello-populator/crd.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/lib-volume-populator/87a47467b86052819e9ad13d15036d65b9a32fbb/example/hello-populator/deploy.yaml
+```
+
+Your cluster now has a new CustomResourceDefinition that provides a test API named Hello.
+Create an instance of the `Hello` custom resource, with some text:
+
+```yaml
+apiVersion: hello.example.com/v1alpha1
+kind: Hello
+metadata:
+ name: example-hello
+spec:
+ fileName: example.txt
+ fileContents: Hello, world!
+```
+
+Create a PVC that refers to that CR as its data source.
+
+```yaml
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: example-pvc
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 10Mi
+ dataSourceRef:
+ apiGroup: hello.example.com
+ kind: Hello
+ name: example-hello
+ volumeMode: Filesystem
+```
+
+Next, run a Job that reads the file in the PVC.
+
+```yaml
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: example-job
+spec:
+ template:
+ spec:
+ containers:
+ - name: example-container
+ image: busybox:latest
+ command:
+ - cat
+ - /mnt/example.txt
+ volumeMounts:
+ - name: vol
+ mountPath: /mnt
+ restartPolicy: Never
+ volumes:
+ - name: vol
+ persistentVolumeClaim:
+ claimName: example-pvc
+```
+
+Wait for the job to complete (including all of its dependencies).
+
+```shell
+kubectl wait --for=condition=Complete job/example-job
+```
+
+And last examine the log from the job.
+
+```shell
+kubectl logs job/example-job
+```
+
+The output should be:
+
+```terminal
+Hello, world!
+```
+
+Note that the volume already contained a text file with the string contents from
+the CR. This is only the simplest example. Actual populators can set up the volume
+to contain arbitrary contents.
+
+## How to write your own volume populator
+
+Developers interested in writing new poplators are encouraged to use the
+[lib-volume-populator](https://github.com/kubernetes-csi/lib-volume-populator) library
+and to only supply a small controller wrapper around the library, and a pod image
+capable of attaching to volumes and writing the appropriate data to the volume.
+
+Individual populators can be extremely generic such that they work with every type
+of PVC, or they can do vendor specific things to rapidly fill a volume with data
+if the volume was provisioned by a specific CSI driver from the same vendor, for
+example, by communicating directly with the storage for that volume.
+
+## How can I learn more?
+
+The enhancement proposal,
+[Volume Populators](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1495-volume-populators), includes lots of detail about the history and technical implementation
+of this feature.
+
+[Volume populators and data sources](/docs/concepts/storage/persistent-volumes/#volume-populators-and-data-sources), within the documentation topic about persistent volumes,
+explains how to use this feature in your cluster.
+
+Please get involved by joining the Kubernetes storage SIG to help us enhance this
+feature. There are a lot of good ideas already and we'd be thrilled to have more!
+
diff --git a/content/en/blog/_posts/2022-05-18-prevent-unauthorised-volume-mode-conversion.md b/content/en/blog/_posts/2022-05-18-prevent-unauthorised-volume-mode-conversion.md
new file mode 100644
index 0000000000..920d578d01
--- /dev/null
+++ b/content/en/blog/_posts/2022-05-18-prevent-unauthorised-volume-mode-conversion.md
@@ -0,0 +1,117 @@
+---
+layout: blog
+title: 'Kubernetes 1.24: Prevent unauthorised volume mode conversion'
+date: 2022-05-18
+slug: prevent-unauthorised-volume-mode-conversion-alpha
+---
+
+**Author:** Raunak Pradip Shah (Mirantis)
+
+Kubernetes v1.24 introduces a new alpha-level feature that prevents unauthorised users
+from modifying the volume mode of a [`PersistentVolumeClaim`](/docs/concepts/storage/persistent-volumes/) created from an
+existing [`VolumeSnapshot`](/docs/concepts/storage/volume-snapshots/) in the Kubernetes cluster.
+
+
+
+### The problem
+
+The [Volume Mode](/docs/concepts/storage/persistent-volumes/#volume-mode) determines whether a volume
+is formatted into a filesystem or presented as a raw block device.
+
+Users can leverage the `VolumeSnapshot` feature, which has been stable since Kubernetes v1.20,
+to create a `PersistentVolumeClaim` (shortened as PVC) from an existing `VolumeSnapshot` in
+the Kubernetes cluster. The PVC spec includes a `dataSource` field, which can point to an
+existing `VolumeSnapshot` instance.
+Visit [Create a PersistentVolumeClaim from a Volume Snapshot](/docs/concepts/storage/persistent-volumes/#create-persistent-volume-claim-from-volume-snapshot) for more details.
+
+When leveraging the above capability, there is no logic that validates whether the mode of the
+original volume, whose snapshot was taken, matches the mode of the newly created volume.
+
+This presents a security gap that allows malicious users to potentially exploit an
+as-yet-unknown vulnerability in the host operating system.
+
+Many popular storage backup vendors convert the volume mode during the course of a
+backup operation, for efficiency purposes, which prevents Kubernetes from blocking
+the operation completely and presents a challenge in distinguishing trusted
+users from malicious ones.
+
+### Preventing unauthorised users from converting the volume mode
+
+In this context, an authorised user is one who has access rights to perform `Update`
+or `Patch` operations on `VolumeSnapshotContents`, which is a cluster-level resource.
+It is upto the cluster administrator to provide these rights only to trusted users
+or applications, like backup vendors.
+
+If the alpha feature is [enabled](https://kubernetes-csi.github.io/docs/) in
+`snapshot-controller`, `snapshot-validation-webhook` and `external-provisioner`,
+then unauthorised users will not be allowed to modify the volume mode of a PVC
+when it is being created from a `VolumeSnapshot`.
+
+To convert the volume mode, an authorised user must do the following:
+
+1. Identify the `VolumeSnapshot` that is to be used as the data source for a newly
+created PVC in the given namespace.
+2. Identify the `VolumeSnapshotContent` bound to the above `VolumeSnapshot`.
+
+ ```shell
+ kubectl get volumesnapshot -n
+ ```
+
+3. Add the annotation [`snapshot.storage.kubernetes.io/allowVolumeModeChange`](/docs/reference/labels-annotations-taints/#snapshot-storage-kubernetes-io-allowvolumemodechange)
+to the `VolumeSnapshotContent`.
+
+4. This annotation can be added either via software or manually by the authorised
+user. The `VolumeSnapshotContent` annotation must look like following manifest fragment:
+
+ ```yaml
+ kind: VolumeSnapshotContent
+ metadata:
+ annotations:
+ - snapshot.storage.kubernetes.io/allowVolumeModeChange: "true"
+ ...
+ ```
+
+**Note**: For pre-provisioned `VolumeSnapshotContents`, you must take an extra
+step of setting `spec.sourceVolumeMode` field to either `Filesystem` or `Block`,
+depending on the mode of the volume from which this snapshot was taken.
+
+An example is shown below:
+
+ ```yaml
+ apiVersion: snapshot.storage.k8s.io/v1
+ kind: VolumeSnapshotContent
+ metadata:
+ annotations:
+ - snapshot.storage.kubernetes.io/allowVolumeModeChange: "true"
+ name: new-snapshot-content-test
+ spec:
+ deletionPolicy: Delete
+ driver: hostpath.csi.k8s.io
+ source:
+ snapshotHandle: 7bdd0de3-aaeb-11e8-9aae-0242ac110002
+ sourceVolumeMode: Filesystem
+ volumeSnapshotRef:
+ name: new-snapshot-test
+ namespace: default
+ ```
+
+Repeat steps 1 to 3 for all `VolumeSnapshotContents` whose volume mode needs to be
+converted during a backup or restore operation.
+
+If the annotation shown in step 4 above is present on a `VolumeSnapshotContent`
+object, Kubernetes will not prevent the volume mode from being converted.
+Users should keep this in mind before they attempt to add the annotation
+to any `VolumeSnapshotContent`.
+
+
+### What's next
+
+[Enable this feature](https://kubernetes-csi.github.io/docs/) and let us know
+what you think!
+
+We hope this feature causes no disruption to existing workflows while preventing
+malicious users from exploiting security vulnerabilities in their clusters.
+
+For any queries or issues, join [Kubernetes on Slack](https://slack.k8s.io/) and
+create a thread in the #sig-storage channel. Alternately, create an issue in the
+CSI external-snapshotter [repository](https://github.com/kubernetes-csi/external-snapshotter).
\ No newline at end of file
diff --git a/content/en/blog/_posts/2022-05-20-non-graceful-node-shutdown.md b/content/en/blog/_posts/2022-05-20-non-graceful-node-shutdown.md
new file mode 100644
index 0000000000..f8f4876285
--- /dev/null
+++ b/content/en/blog/_posts/2022-05-20-non-graceful-node-shutdown.md
@@ -0,0 +1,96 @@
+---
+layout: blog
+title: "Kubernetes 1.24: Introducing Non-Graceful Node Shutdown Alpha"
+date: 2022-05-20
+slug: kubernetes-1-24-non-graceful-node-shutdown-alpha
+---
+
+**Authors** Xing Yang and Yassine Tijani (VMware)
+
+Kubernetes v1.24 introduces alpha support for [Non-Graceful Node Shutdown](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/2268-non-graceful-shutdown). This feature allows stateful workloads to failover to a different node after the original node is shutdown or in a non-recoverable state such as hardware failure or broken OS.
+
+## How is this different from Graceful Node Shutdown
+
+You might have heard about the [Graceful Node Shutdown](/docs/concepts/architecture/nodes/#graceful-node-shutdown) capability of Kubernetes,
+and are wondering how the Non-Graceful Node Shutdown feature is different from that. Graceful Node Shutdown
+allows Kubernetes to detect when a node is shutting down cleanly, and handles that situation appropriately.
+A Node Shutdown can be "graceful" only if the node shutdown action can be detected by the kubelet ahead
+of the actual shutdown. However, there are cases where a node shutdown action may not be detected by
+the kubelet. This could happen either because the shutdown command does not trigger the systemd inhibitor
+locks mechanism that kubelet relies upon, or because of a configuration error
+(the `ShutdownGracePeriod` and `ShutdownGracePeriodCriticalPods` are not configured properly).
+
+Graceful node shutdown relies on Linux-specific support. The kubelet does not watch for upcoming
+shutdowns on Windows nodes (this may change in a future Kubernetes release).
+
+When a node is shutdown but without the kubelet detecting it, pods on that node
+also shut down ungracefully. For stateless apps, that's often not a problem (a ReplicaSet adds a new pod once
+the cluster detects that the affected node or pod has failed). For stateful apps, the story is more complicated.
+If you use a StatefulSet and have a pod from that StatefulSet on a node that fails uncleanly, that affected pod
+will be marked as terminating; the StatefulSet cannot create a replacement pod because the pod
+still exists in the cluster.
+As a result, the application running on the StatefulSet may be degraded or even offline. If the original, shut
+down node comes up again, the kubelet on that original node reports in, deletes the existing pods, and
+the control plane makes a replacement pod for that StatefulSet on a different running node.
+If the original node has failed and does not come up, those stateful pods would be stuck in a
+terminating status on that failed node indefinitely.
+
+```
+$ kubectl get pod -o wide
+NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
+web-0 1/1 Running 0 100m 10.244.2.4 k8s-node-876-1639279816
+web-1 1/1 Terminating 0 100m 10.244.1.3 k8s-node-433-1639279804
+```
+
+## Try out the new non-graceful shutdown handling
+
+To use the non-graceful node shutdown handling, you must enable the `NodeOutOfServiceVolumeDetach`
+[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) for the `kube-controller-manager`
+component.
+
+In the case of a node shutdown, you can manually taint that node as out of service. You should make certain that
+the node is truly shutdown (not in the middle of restarting) before you add that taint. You could add that
+taint following a shutdown that the kubelet did not detect and handle in advance; another case where you
+can use that taint is when the node is in a non-recoverable state due to a hardware failure or a broken OS.
+The values you set for that taint can be `node.kubernetes.io/out-of-service=nodeshutdown: "NoExecute"`
+or `node.kubernetes.io/out-of-service=nodeshutdown:" NoSchedule"`.
+Provided you have enabled the feature gate mentioned earlier, setting the out-of-service taint on a Node
+means that pods on the node will be deleted unless if there are matching tolerations on the pods.
+Persistent volumes attached to the shutdown node will be detached, and for StatefulSets, replacement pods will
+be created successfully on a different running node.
+
+```
+$ kubectl taint nodes node.kubernetes.io/out-of-service=nodeshutdown:NoExecute
+
+$ kubectl get pod -o wide
+NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
+web-0 1/1 Running 0 150m 10.244.2.4 k8s-node-876-1639279816
+web-1 1/1 Running 0 10m 10.244.1.7 k8s-node-433-1639279804
+```
+
+Note: Before applying the out-of-service taint, you **must** verify that a node is already in shutdown or power off state (not in the middle of restarting), either because the user intentionally shut it down or the node is down due to hardware failures, OS issues, etc.
+
+Once all the workload pods that are linked to the out-of-service node are moved to a new running node, and the shutdown node has been recovered, you should remove
+that taint on the affected node after the node is recovered.
+If you know that the node will not return to service, you could instead delete the node from the cluster.
+
+## What’s next?
+
+Depending on feedback and adoption, the Kubernetes team plans to push the Non-Graceful Node Shutdown implementation to Beta in either 1.25 or 1.26.
+
+This feature requires a user to manually add a taint to the node to trigger workloads failover and remove the taint after the node is recovered. In the future, we plan to find ways to automatically detect and fence nodes that are shutdown/failed and automatically failover workloads to another node.
+
+## How can I learn more?
+
+Check out the [documentation](/docs/concepts/architecture/nodes/#non-graceful-node-shutdown)
+for non-graceful node shutdown.
+
+## How to get involved?
+
+This feature has a long story. Yassine Tijani ([yastij](https://github.com/yastij)) started the KEP more than two years ago. Xing Yang ([xing-yang](https://github.com/xing-yang)) continued to drive the effort. There were many discussions among SIG Storage, SIG Node, and API reviewers to nail down the design details. Ashutosh Kumar ([sonasingh46](https://github.com/sonasingh46)) did most of the implementation and brought it to Alpha in Kubernetes 1.24.
+
+We want to thank the following people for their insightful reviews: Tim Hockin ([thockin](https://github.com/thockin)) for his guidance on the design, Jing Xu ([jingxu97](https://github.com/jingxu97)), Hemant Kumar ([gnufied](https://github.com/gnufied)), and Michelle Au ([msau42](https://github.com/msau42)) for reviews from SIG Storage side, and Mrunal Patel ([mrunalp](https://github.com/mrunalp)), David Porter ([bobbypage](https://github.com/bobbypage)), Derek Carr ([derekwaynecarr](https://github.com/derekwaynecarr)), and Danielle Endocrimes ([endocrimes](https://github.com/endocrimes)) for reviews from SIG Node side.
+
+There are many people who have helped review the design and implementation along the way. We want to thank everyone who has contributed to this effort including the about 30 people who have reviewed the [KEP](https://github.com/kubernetes/enhancements/pull/1116) and implementation over the last couple of years.
+
+This feature is a collaboration between SIG Storage and SIG Node. For those interested in getting involved with the design and development of any part of the Kubernetes Storage system, join the [Kubernetes Storage Special Interest Group](https://github.com/kubernetes/community/tree/master/sig-storage) (SIG). For those interested in getting involved with the design and development of the components that support the controlled interactions between pods and host resources, join the [Kubernetes Node SIG](https://github.com/kubernetes/community/tree/master/sig-node).
diff --git a/content/en/blog/_posts/2022-05-23-service-ip-dynamic-and-static-allocation.md b/content/en/blog/_posts/2022-05-23-service-ip-dynamic-and-static-allocation.md
new file mode 100644
index 0000000000..92120605a2
--- /dev/null
+++ b/content/en/blog/_posts/2022-05-23-service-ip-dynamic-and-static-allocation.md
@@ -0,0 +1,137 @@
+---
+layout: blog
+title: "Kubernetes 1.24: Avoid Collisions Assigning IP Addresses to Services"
+date: 2022-05-23
+slug: service-ip-dynamic-and-static-allocation
+---
+
+**Author:** Antonio Ojea (Red Hat)
+
+
+In Kubernetes, [Services](/docs/concepts/services-networking/service/) are an abstract way to expose
+an application running on a set of Pods. Services
+can have a cluster-scoped virtual IP address (using a Service of `type: ClusterIP`).
+Clients can connect using that virtual IP address, and Kubernetes then load-balances traffic to that
+Service across the different backing Pods.
+
+## How Service ClusterIPs are allocated?
+
+A Service `ClusterIP` can be assigned:
+
+_dynamically_
+: the cluster's control plane automatically picks a free IP address from within the configured IP range for `type: ClusterIP` Services.
+
+_statically_
+: you specify an IP address of your choice, from within the configured IP range for Services.
+
+Across your whole cluster, every Service `ClusterIP` must be unique.
+Trying to create a Service with a specific `ClusterIP` that has already
+been allocated will return an error.
+
+## Why do you need to reserve Service Cluster IPs?
+
+Sometimes you may want to have Services running in well-known IP addresses, so other components and
+users in the cluster can use them.
+
+The best example is the DNS Service for the cluster. Some Kubernetes installers assign the 10th address from
+the Service IP range to the DNS service. Assuming you configured your cluster with Service IP range
+10.96.0.0/16 and you want your DNS Service IP to be 10.96.0.10, you'd have to create a Service like
+this:
+
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ k8s-app: kube-dns
+ kubernetes.io/cluster-service: "true"
+ kubernetes.io/name: CoreDNS
+ name: kube-dns
+ namespace: kube-system
+spec:
+ clusterIP: 10.96.0.10
+ ports:
+ - name: dns
+ port: 53
+ protocol: UDP
+ targetPort: 53
+ - name: dns-tcp
+ port: 53
+ protocol: TCP
+ targetPort: 53
+ selector:
+ k8s-app: kube-dns
+ type: ClusterIP
+```
+
+but as I explained before, the IP address 10.96.0.10 has not been reserved; if other Services are created
+before or in parallel with dynamic allocation, there is a chance they can allocate this IP, hence,
+you will not be able to create the DNS Service because it will fail with a conflict error.
+
+## How can you avoid Service ClusterIP conflicts? {#avoid-ClusterIP-conflict}
+
+In Kubernetes 1.24, you can enable a new feature gate `ServiceIPStaticSubrange`.
+Turning this on allows you to use a different IP
+allocation strategy for Services, reducing the risk of collision.
+
+The `ClusterIP` range will be divided, based on the formula `min(max(16, cidrSize / 16), 256)`,
+described as _never less than 16 or more than 256 with a graduated step between them_.
+
+Dynamic IP assignment will use the upper band by default, once this has been exhausted it will
+use the lower range. This will allow users to use static allocations on the lower band with a low
+risk of collision.
+
+Examples:
+
+#### Service IP CIDR block: 10.96.0.0/24
+
+Range Size: 28 - 2 = 254
+Band Offset: `min(max(16,256/16),256)` = `min(16,256)` = 16
+Static band start: 10.96.0.1
+Static band end: 10.96.0.16
+Range end: 10.96.0.254
+
+{{< mermaid >}}
+pie showData
+ title 10.96.0.0/24
+ "Static" : 16
+ "Dynamic" : 238
+{{< /mermaid >}}
+
+#### Service IP CIDR block: 10.96.0.0/20
+
+Range Size: 212 - 2 = 4094
+Band Offset: `min(max(16,256/16),256)` = `min(256,256)` = 256
+Static band start: 10.96.0.1
+Static band end: 10.96.1.0
+Range end: 10.96.15.254
+
+{{< mermaid >}}
+pie showData
+ title 10.96.0.0/20
+ "Static" : 256
+ "Dynamic" : 3838
+{{< /mermaid >}}
+
+#### Service IP CIDR block: 10.96.0.0/16
+
+Range Size: 216 - 2 = 65534
+Band Offset: `min(max(16,65536/16),256)` = `min(4096,256)` = 256
+Static band start: 10.96.0.1
+Static band ends: 10.96.1.0
+Range end: 10.96.255.254
+
+{{< mermaid >}}
+pie showData
+ title 10.96.0.0/16
+ "Static" : 256
+ "Dynamic" : 65278
+{{< /mermaid >}}
+
+## Get involved with SIG Network
+
+The current SIG-Network [KEPs](https://github.com/orgs/kubernetes/projects/10) and [issues](https://github.com/kubernetes/kubernetes/issues?q=is%3Aopen+is%3Aissue+label%3Asig%2Fnetwork) on GitHub illustrate the SIG’s areas of emphasis.
+
+[SIG Network meetings](https://github.com/kubernetes/community/tree/master/sig-network) are a friendly, welcoming venue for you to connect with the community and share your ideas.
+Looking forward to hearing from you!
+
diff --git a/content/en/blog/_posts/2022-05-25-contextual-logging/index.md b/content/en/blog/_posts/2022-05-25-contextual-logging/index.md
new file mode 100644
index 0000000000..2d5ef5c4c7
--- /dev/null
+++ b/content/en/blog/_posts/2022-05-25-contextual-logging/index.md
@@ -0,0 +1,251 @@
+---
+layout: blog
+title: "Contextual Logging in Kubernetes 1.24"
+date: 2022-05-25
+slug: contextual-logging
+canonicalUrl: https://kubernetes.dev/blog/2022/05/25/contextual-logging/
+---
+
+ **Authors:** Patrick Ohly (Intel)
+
+The [Structured Logging Working
+Group](https://github.com/kubernetes/community/blob/master/wg-structured-logging/README.md)
+has added new capabilities to the logging infrastructure in Kubernetes
+1.24. This blog post explains how developers can take advantage of those to
+make log output more useful and how they can get involved with improving Kubernetes.
+
+## Structured logging
+
+The goal of [structured
+logging](https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/1602-structured-logging/README.md)
+is to replace C-style formatting and the resulting opaque log strings with log
+entries that have a well-defined syntax for storing message and parameters
+separately, for example as a JSON struct.
+
+When using the traditional klog text output format for structured log calls,
+strings were originally printed with `\n` escape sequences, except when
+embedded inside a struct. For structs, log entries could still span multiple
+lines, with no clean way to split the log stream into individual entries:
+
+```
+I1112 14:06:35.783529 328441 structured_logging.go:51] "using InfoS" longData={Name:long Data:Multiple
+lines
+with quite a bit
+of text. internal:0}
+I1112 14:06:35.783549 328441 structured_logging.go:52] "using InfoS with\nthe message across multiple lines" int=1 stringData="long: Multiple\nlines\nwith quite a bit\nof text." str="another value"
+```
+
+Now, the `<` and `>` markers along with indentation are used to ensure that splitting at a
+klog header at the start of a line is reliable and the resulting output is human-readable:
+
+```
+I1126 10:31:50.378204 121736 structured_logging.go:59] "using InfoS" longData=<
+ {Name:long Data:Multiple
+ lines
+ with quite a bit
+ of text. internal:0}
+ >
+I1126 10:31:50.378228 121736 structured_logging.go:60] "using InfoS with\nthe message across multiple lines" int=1 stringData=<
+ long: Multiple
+ lines
+ with quite a bit
+ of text.
+ > str="another value"
+```
+
+Note that the log message itself is printed with quoting. It is meant to be a
+fixed string that identifies a log entry, so newlines should be avoided there.
+
+Before Kubernetes 1.24, some log calls in kube-scheduler still used `klog.Info`
+for multi-line strings to avoid the unreadable output. Now all log calls have
+been updated to support structured logging.
+
+## Contextual logging
+
+[Contextual logging](https://github.com/kubernetes/enhancements/blob/master/keps/sig-instrumentation/3077-contextual-logging/README.md)
+is based on the [go-logr API](https://github.com/go-logr/logr#a-minimal-logging-api-for-go). The key
+idea is that libraries are passed a logger instance by their caller and use
+that for logging instead of accessing a global logger. The binary decides about
+the logging implementation, not the libraries. The go-logr API is designed
+around structured logging and supports attaching additional information to a
+logger.
+
+This enables additional use cases:
+
+- The caller can attach additional information to a logger:
+ - [`WithName`](https://pkg.go.dev/github.com/go-logr/logr#Logger.WithName) adds a prefix
+ - [`WithValues`](https://pkg.go.dev/github.com/go-logr/logr#Logger.WithValues) adds key/value pairs
+
+ When passing this extended logger into a function and a function uses it
+ instead of the global logger, the additional information is
+ then included in all log entries, without having to modify the code that
+ generates the log entries. This is useful in highly parallel applications
+ where it can become hard to identify all log entries for a certain operation
+ because the output from different operations gets interleaved.
+
+- When running unit tests, log output can be associated with the current test.
+ Then when a test fails, only the log output of the failed test gets shown
+ by `go test`. That output can also be more verbose by default because it
+ will not get shown for successful tests. Tests can be run in parallel
+ without interleaving their output.
+
+One of the design decisions for contextual logging was to allow attaching a
+logger as value to a `context.Context`. Since the logger encapsulates all
+aspects of the intended logging for the call, it is *part* of the context and
+not just *using* it. A practical advantage is that many APIs already have a
+`ctx` parameter or adding one has additional advantages, like being able to get
+rid of `context.TODO()` calls inside the functions.
+
+Another decision was to not break compatibility with klog v2:
+
+- Libraries that use the traditional klog logging calls in a binary that has
+ set up contextual logging will work and log through the logging backend
+ chosen by the binary. However, such log output will not include the
+ additional information and will not work well in unit tests, so libraries
+ should be modified to support contextual logging. The [migration guide](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/migration-to-structured-logging.md)
+ for structured logging has been extended to also cover contextual logging.
+
+- When a library supports contextual logging and retrieves a logger from its
+ context, it will still work in a binary that does not initialize contextual
+ logging because it will get a logger that logs through klog.
+
+In Kubernetes 1.24, contextual logging is a new alpha feature with
+`ContextualLogging` as feature gate. When disabled (the default), the new klog
+API calls for contextual logging (see below) become no-ops to avoid performance
+or functional regressions.
+
+No Kubernetes component has been converted yet. An [example program](https://github.com/kubernetes/kubernetes/blob/v1.24.0-beta.0/staging/src/k8s.io/component-base/logs/example/cmd/logger.go)
+in the Kubernetes repository demonstrates how to enable contextual logging in a
+binary and how the output depends on the binary's parameters:
+
+```console
+$ cd $GOPATH/src/k8s.io/kubernetes/staging/src/k8s.io/component-base/logs/example/cmd/
+$ go run . --help
+...
+ --feature-gates mapStringBool A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
+ AllAlpha=true|false (ALPHA - default=false)
+ AllBeta=true|false (BETA - default=false)
+ ContextualLogging=true|false (ALPHA - default=false)
+$ go run . --feature-gates ContextualLogging=true
+...
+I0404 18:00:02.916429 451895 logger.go:94] "example/myname: runtime" foo="bar" duration="1m0s"
+I0404 18:00:02.916447 451895 logger.go:95] "example: another runtime" foo="bar" duration="1m0s"
+```
+
+The `example` prefix and `foo="bar"` were added by the caller of the function
+which logs the `runtime` message and `duration="1m0s"` value.
+
+The sample code for klog includes an
+[example](https://github.com/kubernetes/klog/blob/v2.60.1/ktesting/example/example_test.go)
+for a unit test with per-test output.
+
+## klog enhancements
+
+### Contextual logging API
+
+The following calls manage the lookup of a logger:
+
+[`FromContext`](https://pkg.go.dev/k8s.io/klog/v2#FromContext)
+: from a `context` parameter, with fallback to the global logger
+
+[`Background`](https://pkg.go.dev/k8s.io/klog/v2#Background)
+: the global fallback, with no intention to support contextual logging
+
+[`TODO`](https://pkg.go.dev/k8s.io/klog/v2#TODO)
+: the global fallback, but only as a temporary solution until the function gets extended to accept
+ a logger through its parameters
+
+[`SetLoggerWithOptions`](https://pkg.go.dev/k8s.io/klog/v2#SetLoggerWithOptions)
+: changes the fallback logger; when called with [`ContextualLogger(true)`](https://pkg.go.dev/k8s.io/klog/v2#ContextualLogger),
+ the logger is ready to be called directly, in which case logging will be done
+ without going through klog
+
+To support the feature gate mechanism in Kubernetes, klog has wrapper calls for
+the corresponding go-logr calls and a global boolean controlling their behavior:
+
+- [`LoggerWithName`](https://pkg.go.dev/k8s.io/klog/v2#LoggerWithName)
+- [`LoggerWithValues`](https://pkg.go.dev/k8s.io/klog/v2#LoggerWithValues)
+- [`NewContext`](https://pkg.go.dev/k8s.io/klog/v2#NewContext)
+- [`EnableContextualLogging`](https://pkg.go.dev/k8s.io/klog/v2#EnableContextualLogging)
+
+Usage of those functions in Kubernetes code is enforced with a linter
+check. The klog default for contextual logging is to enable the functionality
+because it is considered stable in klog. It is only in Kubernetes binaries
+where that default gets overridden and (in some binaries) controlled via the
+`--feature-gate` parameter.
+
+### ktesting logger
+
+The new [ktesting](https://pkg.go.dev/k8s.io/klog/v2@v2.60.1/ktesting) package
+implements logging through `testing.T` using klog's text output format. It has
+a [single API call](https://pkg.go.dev/k8s.io/klog/v2@v2.60.1/ktesting#NewTestContext) for
+instrumenting a test case and [support for command line flags](https://pkg.go.dev/k8s.io/klog/v2@v2.60.1/ktesting/init).
+
+### klogr
+
+[`klog/klogr`](https://pkg.go.dev/k8s.io/klog/v2@v2.60.1/klogr) continues to be
+supported and it's default behavior is unchanged: it formats structured log
+entries using its own, custom format and prints the result via klog.
+
+However, this usage is discouraged because that format is neither
+machine-readable (in contrast to real JSON output as produced by zapr, the
+go-logr implementation used by Kubernetes) nor human-friendly (in contrast to
+the klog text format).
+
+Instead, a klogr instance should be created with
+[`WithFormat(FormatKlog)`](https://pkg.go.dev/k8s.io/klog/v2@v2.60.1/klogr#WithFormat)
+which chooses the klog text format. A simpler construction method with the same
+result is the new
+[`klog.NewKlogr`](https://pkg.go.dev/k8s.io/klog/v2#NewKlogr). That is the
+logger that klog returns as fallback when nothing else is configured.
+
+### Reusable output test
+
+A lot of go-logr implementations have very similar unit tests where they check
+the result of certain log calls. If a developer didn't know about certain
+caveats like for example a `String` function that panics when called, then it
+is likely that both the handling of such caveats and the unit test are missing.
+
+[`klog.test`](https://pkg.go.dev/k8s.io/klog/v2@v2.60.1/test) is a reusable set
+of test cases that can be applied to a go-logr implementation.
+
+### Output flushing
+
+klog used to start a goroutine unconditionally during `init` which flushed
+buffered data at a hard-coded interval. Now that goroutine is only started on
+demand (i.e. when writing to files with buffering) and can be controlled with
+[`StopFlushDaemon`](https://pkg.go.dev/k8s.io/klog/v2#StopFlushDaemon) and
+[`StartFlushDaemon`](https://pkg.go.dev/k8s.io/klog/v2#StartFlushDaemon).
+
+When a go-logr implementation buffers data, flushing that data can be
+integrated into [`klog.Flush`](https://pkg.go.dev/k8s.io/klog/v2#Flush) by
+registering the logger with the
+[`FlushLogger`](https://pkg.go.dev/k8s.io/klog/v2#FlushLogger) option.
+
+### Various other changes
+
+For a description of all other enhancements see in the [release notes](https://github.com/kubernetes/klog/releases).
+
+## logcheck
+
+Originally designed as a linter for structured log calls, the
+ [`logcheck`](https://github.com/kubernetes/klog/tree/788efcdee1e9be0bfbe5b076343d447314f2377e/hack/tools/logcheck)
+tool has been enhanced to support also contextual logging and traditional klog
+log calls. These enhanced checks already found bugs in Kubernetes, like calling
+`klog.Info` instead of `klog.Infof` with a format string and parameters.
+
+It can be included as a plugin in a `golangci-lint` invocation, which is how
+[Kubernetes uses it now](https://github.com/kubernetes/kubernetes/commit/17e3c555c5115f8c9176bae10ba45baa04d23a7b),
+or get invoked stand-alone.
+
+We are in the process of [moving the tool](https://github.com/kubernetes/klog/issues/312) into a new repository because it isn't
+really related to klog and its releases should be tracked and tagged properly.
+
+## Next steps
+
+The [Structured Logging WG](https://github.com/kubernetes/community/tree/master/wg-structured-logging)
+is always looking for new contributors. The migration
+away from C-style logging is now going to target structured, contextual logging
+in one step to reduce the overall code churn and number of PRs. Changing log
+calls is good first contribution to Kubernetes and an opportunity to get to
+know code in various different areas.
diff --git a/content/en/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md b/content/en/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md
new file mode 100644
index 0000000000..aa6257eb3e
--- /dev/null
+++ b/content/en/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md
@@ -0,0 +1,148 @@
+---
+layout: blog
+title: 'Kubernetes 1.24: Maximum Unavailable Replicas for StatefulSet'
+date: 2022-05-27
+slug: maxunavailable-for-statefulset
+---
+
+**Author:** Mayank Kumar (Salesforce)
+
+Kubernetes [StatefulSets](/docs/concepts/workloads/controllers/statefulset/), since their introduction in
+1.5 and becoming stable in 1.9, have been widely used to run stateful applications. They provide stable pod identity, persistent
+per pod storage and ordered graceful deployment, scaling and rolling updates. You can think of StatefulSet as the atomic building
+block for running complex stateful applications. As the use of Kubernetes has grown, so has the number of scenarios requiring
+StatefulSets. Many of these scenarios, require faster rolling updates than the currently supported one-pod-at-a-time updates, in the
+case where you're using the `OrderedReady` Pod management policy for a StatefulSet.
+
+
+Here are some examples:
+
+- I am using a StatefulSet to orchestrate a multi-instance, cache based application where the size of the cache is large. The cache
+ starts cold and requires some siginificant amount of time before the container can start. There could be more initial startup tasks
+ that are required. A RollingUpdate on this StatefulSet would take a lot of time before the application is fully updated. If the
+ StatefulSet supported updating more than one pod at a time, it would result in a much faster update.
+
+- My stateful application is composed of leaders and followers or one writer and multiple readers. I have multiple readers or
+ followers and my application can tolerate multiple pods going down at the same time. I want to update this application more than
+ one pod at a time so that i get the new updates rolled out quickly, especially if the number of instances of my application are
+ large. Note that my application still requires unique identity per pod.
+
+
+In order to support such scenarios, Kubernetes 1.24 includes a new alpha feature to help. Before you can use the new feature you must
+enable the `MaxUnavailableStatefulSet` feature flag. Once you enable that, you can specify a new field called `maxUnavailable`, part
+of the `spec` for a StatefulSet. For example:
+
+```
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: web
+ namespace: default
+spec:
+ podManagementPolicy: OrderedReady # you must set OrderedReady
+ replicas: 5
+ selector:
+ matchLabels:
+ app: nginx
+ template:
+ metadata:
+ labels:
+ app: nginx
+ spec:
+ containers:
+ - image: k8s.gcr.io/nginx-slim:0.8
+ imagePullPolicy: IfNotPresent
+ name: nginx
+ updateStrategy:
+ rollingUpdate:
+ maxUnavailable: 2 # this is the new alpha field, whose default value is 1
+ partition: 0
+ type: RollingUpdate
+```
+
+If you enable the new feature and you don't specify a value for `maxUnavailable` in a StatefulSet, Kubernetes applies a default
+`maxUnavailable: 1`. This matches the behavior you would see if you don't enable the new feature.
+
+I'll run through a scenario based on that example manifest to demonstrate how this feature works. I will deploy a StatefulSet that
+has 5 replicas, with `maxUnavailable` set to 2 and `partition` set to 0.
+
+I can trigger a rolling update by changing the image to `k8s.gcr.io/nginx-slim:0.9`. Once I initiate the rolling update, I can
+watch the pods update 2 at a time as the current value of maxUnavailable is 2. The below output shows a span of time and is not
+complete. The maxUnavailable can be an absolute number (for example, 2) or a percentage of desired Pods (for example, 10%). The
+absolute number is calculated from percentage by rounding down.
+```
+kubectl get pods --watch
+```
+
+```
+NAME READY STATUS RESTARTS AGE
+web-0 1/1 Running 0 85s
+web-1 1/1 Running 0 2m6s
+web-2 1/1 Running 0 106s
+web-3 1/1 Running 0 2m47s
+web-4 1/1 Running 0 2m27s
+web-4 1/1 Terminating 0 5m43s ----> start terminating 4
+web-3 1/1 Terminating 0 6m3s ----> start terminating 3
+web-3 0/1 Terminating 0 6m7s
+web-3 0/1 Pending 0 0s
+web-3 0/1 Pending 0 0s
+web-4 0/1 Terminating 0 5m48s
+web-4 0/1 Terminating 0 5m48s
+web-3 0/1 ContainerCreating 0 2s
+web-3 1/1 Running 0 2s
+web-4 0/1 Pending 0 0s
+web-4 0/1 Pending 0 0s
+web-4 0/1 ContainerCreating 0 0s
+web-4 1/1 Running 0 1s
+web-2 1/1 Terminating 0 5m46s ----> start terminating 2 (only after both 4 and 3 are running)
+web-1 1/1 Terminating 0 6m6s ----> start terminating 1
+web-2 0/1 Terminating 0 5m47s
+web-1 0/1 Terminating 0 6m7s
+web-1 0/1 Pending 0 0s
+web-1 0/1 Pending 0 0s
+web-1 0/1 ContainerCreating 0 1s
+web-1 1/1 Running 0 2s
+web-2 0/1 Pending 0 0s
+web-2 0/1 Pending 0 0s
+web-2 0/1 ContainerCreating 0 0s
+web-2 1/1 Running 0 1s
+web-0 1/1 Terminating 0 6m6s ----> start terminating 0 (only after 2 and 1 are running)
+web-0 0/1 Terminating 0 6m7s
+web-0 0/1 Pending 0 0s
+web-0 0/1 Pending 0 0s
+web-0 0/1 ContainerCreating 0 0s
+web-0 1/1 Running 0 1s
+```
+Note that as soon as the rolling update starts, both 4 and 3 (the two highest ordinal pods) start terminating at the same time. Pods
+with ordinal 4 and 3 may become ready at their own pace. As soon as both pods 4 and 3 are ready, pods 2 and 1 start terminating at the
+same time. When pods 2 and 1 are both running and ready, pod 0 starts terminating.
+
+In Kubernetes, updates to StatefulSets follow a strict ordering when updating Pods. In this example, the update starts at replica 4, then
+replica 3, then replica 2, and so on, one pod at a time. When going one pod at a time, its not possible for 3 to be running and ready
+before 4. When `maxUnavailable` is more than 1 (in the example scenario I set `maxUnavailable` to 2), it is possible that replica 3 becomes
+ready and running before replica 4 is ready—and that is ok. If you're a developer and you set `maxUnavailable` to more than 1, you should
+know that this outcome is possible and you must ensure that your application is able to handle such ordering issues that occur
+if any. When you set `maxUnavailable` greater than 1, the ordering is guaranteed in between each batch of pods being updated. That guarantee
+means that pods in update batch 2 (replicas 2 and 1) cannot start updating until the pods from batch 0 (replicas 4 and 3) are ready.
+
+Although Kubernetes refers to these as _replicas_, your stateful application may have a different view and each pod of the StatefulSet may
+be holding completely different data than other pods. The important thing here is that updates to StatefulSets happen in batches, and you can
+now have a batch size larger than 1 (as an alpha feature).
+
+Also note, that the above behavior is with `podManagementPolicy: OrderedReady`. If you defined a StatefulSet as `podManagementPolicy: Parallel`,
+not only `maxUnavailable` number of replicas are terminated at the same time; `maxUnavailable` number of replicas start in `ContainerCreating`
+phase at the same time as well. This is called bursting.
+
+So, now you may have a lot of questions about:-
+- What is the behavior when you set `podManagementPolicy: Parallel`?
+- What is the behavior when `partition` to a value other than `0`?
+
+It might be better to try and see it for yourself. This is an alpha feature, and the Kubernetes contributors are looking for feedback on this feature. Did
+this help you achieve your stateful scenarios Did you find a bug or do you think the behavior as implemented is not intuitive or can
+break applications or catch them by surprise? Please [open an issue](https://github.com/kubernetes/kubernetes/issues) to let us know.
+
+## Further reading and next steps {#next-steps}
+- [Maximum unavailable Pods](/docs/concepts/workloads/controllers/statefulset/#maximum-unavailable-pods)
+- [KEP for MaxUnavailable for StatefulSet](https://github.com/kubernetes/enhancements/tree/master/keps/sig-apps/961-maxunavailable-for-statefulset)
+- [Implementation](https://github.com/kubernetes/kubernetes/pull/82162/files)
+- [Enhancement Tracking Issue](https://github.com/kubernetes/enhancements/issues/961)
diff --git a/content/en/blog/_posts/2022-06-01-annual-report-2021.md b/content/en/blog/_posts/2022-06-01-annual-report-2021.md
new file mode 100644
index 0000000000..e0a4130357
--- /dev/null
+++ b/content/en/blog/_posts/2022-06-01-annual-report-2021.md
@@ -0,0 +1,19 @@
+---
+layout: blog
+title: "Annual Report Summary 2021"
+date: 2022-06-01
+slug: annual-report-summary-2021
+---
+
+**Author:** Paris Pittman (Steering Committee)
+
+Last year, we published our first [Annual Report Summary](/blog/2021/06/28/announcing-kubernetes-community-group-annual-reports/) for 2020 and it's already time for our second edition!
+
+[2021 Annual Report Summary](https://www.cncf.io/reports/kubernetes-annual-report-2021/)
+
+This summary reflects the work that has been done in 2021 and the initiatives on deck for the rest of 2022. Please forward to organizations and indidviduals participating in upstream activities, planning cloud native strategies, and/or those looking to help out. To find a specific community group's complete report, go to the [kubernetes/community repo](https://github.com/kubernetes/community) under the groups folder. Example: [sig-api-machinery/annual-report-2021.md](https://github.com/kubernetes/community/blob/master/sig-api-machinery/annual-report-2021.md)
+
+You’ll see that this report summary is a growth area in itself. It takes us roughly 6 months to prepare and execute, which isn’t helpful or valuable to anyone as a fast moving project with short and long term needs. How can we make this better? Provide your feedback here: https://github.com/kubernetes/steering/issues/242
+
+Reference:
+[Annual Report Documentation](https://github.com/kubernetes/community/blob/master/committee-steering/governance/annual-reports.md)
diff --git a/content/en/docs/concepts/architecture/nodes.md b/content/en/docs/concepts/architecture/nodes.md
index 4d3534492e..39d229a897 100644
--- a/content/en/docs/concepts/architecture/nodes.md
+++ b/content/en/docs/concepts/architecture/nodes.md
@@ -312,16 +312,18 @@ controller deletes the node from its list of nodes.
The third is monitoring the nodes' health. The node controller is
responsible for:
-- In the case that a node becomes unreachable, updating the NodeReady condition
- of within the Node's `.status`. In this case the node controller sets the
- NodeReady condition to `ConditionUnknown`.
+- In the case that a node becomes unreachable, updating the `Ready` condition
+ in the Node's `.status` field. In this case the node controller sets the
+ `Ready` condition to `Unknown`.
- If a node remains unreachable: triggering
[API-initiated eviction](/docs/concepts/scheduling-eviction/api-eviction/)
for all of the Pods on the unreachable node. By default, the node controller
- waits 5 minutes between marking the node as `ConditionUnknown` and submitting
+ waits 5 minutes between marking the node as `Unknown` and submitting
the first eviction request.
-The node controller checks the state of each node every `--node-monitor-period` seconds.
+By default, the node controller checks the state of each node every 5 seconds.
+This period can be configured using the `--node-monitor-period` flag on the
+`kube-controller-manager` component.
### Rate limits on eviction
@@ -331,7 +333,7 @@ from more than 1 node per 10 seconds.
The node eviction behavior changes when a node in a given availability zone
becomes unhealthy. The node controller checks what percentage of nodes in the zone
-are unhealthy (NodeReady condition is `ConditionUnknown` or `ConditionFalse`) at
+are unhealthy (the `Ready` condition is `Unknown` or `False`) at
the same time:
- If the fraction of unhealthy nodes is at least `--unhealthy-zone-threshold`
@@ -384,7 +386,7 @@ If you want to explicitly reserve resources for non-Pod processes, see
## Node topology
-{{< feature-state state="alpha" for_k8s_version="v1.16" >}}
+{{< feature-state state="beta" for_k8s_version="v1.18" >}}
If you have enabled the `TopologyManager`
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/), then
@@ -412,7 +414,7 @@ enabled by default in 1.21.
Note that by default, both configuration options described below,
`shutdownGracePeriod` and `shutdownGracePeriodCriticalPods` are set to zero,
-thus not activating Graceful node shutdown functionality.
+thus not activating the graceful node shutdown functionality.
To activate the feature, the two kubelet config settings should be configured appropriately and
set to non-zero values.
@@ -450,6 +452,56 @@ Reason: Terminated
Message: Pod was terminated in response to imminent node shutdown.
```
+{{< /note >}}
+
+## Non Graceful node shutdown {#non-graceful-node-shutdown}
+
+{{< feature-state state="alpha" for_k8s_version="v1.24" >}}
+
+A node shutdown action may not be detected by kubelet's Node Shutdown Mananger,
+either because the command does not trigger the inhibitor locks mechanism used by
+kubelet or because of a user error, i.e., the ShutdownGracePeriod and
+ShutdownGracePeriodCriticalPods are not configured properly. Please refer to above
+section [Graceful Node Shutdown](#graceful-node-shutdown) for more details.
+
+When a node is shutdown but not detected by kubelet's Node Shutdown Manager, the pods
+that are part of a StatefulSet will be stuck in terminating status on
+the shutdown node and cannot move to a new running node. This is because kubelet on
+the shutdown node is not available to delete the pods so the StatefulSet cannot
+create a new pod with the same name. If there are volumes used by the pods, the
+VolumeAttachments will not be deleted from the original shutdown node so the volumes
+used by these pods cannot be attached to a new running node. As a result, the
+application running on the StatefulSet cannot function properly. If the original
+shutdown node comes up, the pods will be deleted by kubelet and new pods will be
+created on a different running node. If the original shutdown node does not come up,
+these pods will be stuck in terminating status on the shutdown node forever.
+
+To mitigate the above situation, a user can manually add the taint `node
+kubernetes.io/out-of-service` with either `NoExecute` or `NoSchedule` effect to
+a Node marking it out-of-service.
+If the `NodeOutOfServiceVolumeDetach` [feature gate](/docs/reference/
+command-line-tools-reference/feature-gates/) is enabled on
+`kube-controller-manager`, and a Node is marked out-of-service with this taint, the
+pods on the node will be forcefully deleted if there are no matching tolerations on
+it and volume detach operations for the pods terminating on the node will happen
+immediately. This allows the Pods on the out-of-service node to recover quickly on a
+different node.
+
+During a non-graceful shutdown, Pods are terminated in the two phases:
+
+1. Force delete the Pods that do not have matching `out-of-service` tolerations.
+2. Immediately perform detach volume operation for such pods.
+
+
+{{< note >}}
+- Before adding the taint `node.kubernetes.io/out-of-service` , it should be verified
+that the node is already in shutdown or power off state (not in the middle of
+restarting).
+- The user is required to manually remove the out-of-service taint after the pods are
+moved to a new node and the user has checked that the shutdown node has been
+recovered since the user was the one who originally added the taint.
+
+
{{< /note >}}
### Pod Priority based graceful node shutdown {#pod-priority-graceful-node-shutdown}
@@ -534,10 +586,18 @@ next priority class value range.
If this feature is enabled and no configuration is provided, then no ordering
action will be taken.
-Using this feature, requires enabling the
-`GracefulNodeShutdownBasedOnPodPriority` feature gate, and setting the kubelet
-config's `ShutdownGracePeriodByPodPriority` to the desired configuration
-containing the pod priority class values and their respective shutdown periods.
+Using this feature requires enabling the `GracefulNodeShutdownBasedOnPodPriority`
+[feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
+, and setting `ShutdownGracePeriodByPodPriority` in the
+[kubelet config](/docs/reference/config-api/kubelet-config.v1beta1/)
+to the desired configuration containing the pod priority class values and
+their respective shutdown periods.
+
+{{< note >}}
+The ability to take Pod priority into account during graceful node shutdown was introduced
+as an Alpha feature in Kubernetes v1.23. In Kubernetes {{< skew currentVersion >}}
+the feature is Beta and is enabled by default.
+{{< /note >}}
Metrics `graceful_shutdown_start_time_seconds` and `graceful_shutdown_end_time_seconds`
are emitted under the kubelet subsystem to monitor node shutdowns.
diff --git a/content/en/docs/concepts/cluster-administration/_index.md b/content/en/docs/concepts/cluster-administration/_index.md
index 7d5aec5078..7e5827a6f7 100644
--- a/content/en/docs/concepts/cluster-administration/_index.md
+++ b/content/en/docs/concepts/cluster-administration/_index.md
@@ -59,7 +59,7 @@ Before choosing a guide, here are some considerations:
* [Using Sysctls in a Kubernetes Cluster](/docs/tasks/administer-cluster/sysctl-cluster/) describes to an administrator how to use the `sysctl` command-line tool to set kernel parameters .
-* [Auditing](/docs/tasks/debug-application-cluster/audit/) describes how to interact with Kubernetes' audit logs.
+* [Auditing](/docs/tasks/debug/debug-cluster/audit/) describes how to interact with Kubernetes' audit logs.
### Securing the kubelet
* [Control Plane-Node communication](/docs/concepts/architecture/control-plane-node-communication/)
diff --git a/content/en/docs/concepts/cluster-administration/addons.md b/content/en/docs/concepts/cluster-administration/addons.md
index 89351eb6ab..3e9cd31643 100644
--- a/content/en/docs/concepts/cluster-administration/addons.md
+++ b/content/en/docs/concepts/cluster-administration/addons.md
@@ -20,7 +20,7 @@ This page lists some of the available add-ons and links to their respective inst
* [Calico](https://docs.projectcalico.org/latest/introduction/) is a networking and network policy provider. Calico supports a flexible set of networking options so you can choose the most efficient option for your situation, including non-overlay and overlay networks, with or without BGP. Calico uses the same engine to enforce network policy for hosts, pods, and (if using Istio & Envoy) applications at the service mesh layer.
* [Canal](https://github.com/tigera/canal/tree/master/k8s-install) unites Flannel and Calico, providing networking and network policy.
* [Cilium](https://github.com/cilium/cilium) is a L3 network and network policy plugin that can enforce HTTP/API/L7 policies transparently. Both routing and overlay/encapsulation mode are supported, and it can work on top of other CNI plugins.
-* [CNI-Genie](https://github.com/Huawei-PaaS/CNI-Genie) enables Kubernetes to seamlessly connect to a choice of CNI plugins, such as Calico, Canal, Flannel, Romana, or Weave.
+* [CNI-Genie](https://github.com/Huawei-PaaS/CNI-Genie) enables Kubernetes to seamlessly connect to a choice of CNI plugins, such as Calico, Canal, Flannel, or Weave.
* [Contrail](https://www.juniper.net/us/en/products-services/sdn/contrail/contrail-networking/), based on [Tungsten Fabric](https://tungsten.io), is an open source, multi-cloud network virtualization and policy management platform. Contrail and Tungsten Fabric are integrated with orchestration systems such as Kubernetes, OpenShift, OpenStack and Mesos, and provide isolation modes for virtual machines, containers/pods and bare metal workloads.
* [Flannel](https://github.com/flannel-io/flannel#deploying-flannel-manually) is an overlay network provider that can be used with Kubernetes.
* [Knitter](https://github.com/ZTE/Knitter/) is a plugin to support multiple network interfaces in a Kubernetes pod.
@@ -29,7 +29,7 @@ This page lists some of the available add-ons and links to their respective inst
* [OVN4NFV-K8S-Plugin](https://github.com/opnfv/ovn4nfv-k8s-plugin) is OVN based CNI controller plugin to provide cloud native based Service function chaining(SFC), Multiple OVN overlay networking, dynamic subnet creation, dynamic creation of virtual networks, VLAN Provider network, Direct provider network and pluggable with other Multi-network plugins, ideal for edge based cloud native workloads in Multi-cluster networking
* [NSX-T](https://docs.vmware.com/en/VMware-NSX-T/2.0/nsxt_20_ncp_kubernetes.pdf) Container Plug-in (NCP) provides integration between VMware NSX-T and container orchestrators such as Kubernetes, as well as integration between NSX-T and container-based CaaS/PaaS platforms such as Pivotal Container Service (PKS) and OpenShift.
* [Nuage](https://github.com/nuagenetworks/nuage-kubernetes/blob/v5.1.1-1/docs/kubernetes-1-installation.rst) is an SDN platform that provides policy-based networking between Kubernetes Pods and non-Kubernetes environments with visibility and security monitoring.
-* **Romana** is a Layer 3 networking solution for pod networks that also supports the [NetworkPolicy API](/docs/concepts/services-networking/network-policies/). Kubeadm add-on installation details available [here](https://github.com/romana/romana/tree/master/containerize).
+* [Romana](https://github.com/romana) is a Layer 3 networking solution for pod networks that also supports the [NetworkPolicy](/docs/concepts/services-networking/network-policies/) API.
* [Weave Net](https://www.weave.works/docs/net/latest/kubernetes/kube-addon/) provides networking and network policy, will carry on working on both sides of a network partition, and does not require an external database.
## Service Discovery
diff --git a/content/en/docs/concepts/cluster-administration/flow-control.md b/content/en/docs/concepts/cluster-administration/flow-control.md
index 9e8f2a7923..7f5e476020 100644
--- a/content/en/docs/concepts/cluster-administration/flow-control.md
+++ b/content/en/docs/concepts/cluster-administration/flow-control.md
@@ -331,7 +331,7 @@ Thus, in a situation with a mixture of servers of different versions
there may be thrashing as long as different servers have different
opinions of the proper content of these objects.
-Each `kube-apiserver` makes an inital maintenance pass over the
+Each `kube-apiserver` makes an initial maintenance pass over the
mandatory and suggested configuration objects, and after that does
periodic maintenance (once per minute) of those objects.
diff --git a/content/en/docs/concepts/cluster-administration/manage-deployment.md b/content/en/docs/concepts/cluster-administration/manage-deployment.md
index c09e59f1df..c90715da09 100644
--- a/content/en/docs/concepts/cluster-administration/manage-deployment.md
+++ b/content/en/docs/concepts/cluster-administration/manage-deployment.md
@@ -461,7 +461,7 @@ That's it! The Deployment will declaratively update the deployed nginx applicati
## {{% heading "whatsnext" %}}
-- Learn about [how to use `kubectl` for application introspection and debugging](/docs/tasks/debug-application-cluster/debug-application-introspection/).
+- Learn about [how to use `kubectl` for application introspection and debugging](/docs/tasks/debug/debug-application/debug-running-pod/).
- See [Configuration Best Practices and Tips](/docs/concepts/configuration/overview/).
diff --git a/content/en/docs/concepts/cluster-administration/system-logs.md b/content/en/docs/concepts/cluster-administration/system-logs.md
index 9d0359ddad..f468de32b7 100644
--- a/content/en/docs/concepts/cluster-administration/system-logs.md
+++ b/content/en/docs/concepts/cluster-administration/system-logs.md
@@ -110,6 +110,55 @@ I1025 00:15:15.525108 1 example.go:116] "Example" data="This is text with
second line.}
```
+### Contextual Logging
+
+{{< feature-state for_k8s_version="v1.24" state="alpha" >}}
+
+Contextual logging builds on top of structured logging. It is primarily about
+how developers use logging calls: code based on that concept is more flexible
+and supports additional use cases as described in the [Contextual Logging
+KEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/3077-contextual-logging).
+
+If developers use additional functions like `WithValues` or `WithName` in
+their components, then log entries contain additional information that gets
+passed into functions by their caller.
+
+Currently this is gated behind the `StructuredLogging` feature gate and
+disabled by default. The infrastructure for this was added in 1.24 without
+modifying components. The
+[`component-base/logs/example`](https://github.com/kubernetes/kubernetes/blob/v1.24.0-beta.0/staging/src/k8s.io/component-base/logs/example/cmd/logger.go)
+command demonstrates how to use the new logging calls and how a component
+behaves that supports contextual logging.
+
+```console
+$ cd $GOPATH/src/k8s.io/kubernetes/staging/src/k8s.io/component-base/logs/example/cmd/
+$ go run . --help
+...
+ --feature-gates mapStringBool A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
+ AllAlpha=true|false (ALPHA - default=false)
+ AllBeta=true|false (BETA - default=false)
+ ContextualLogging=true|false (ALPHA - default=false)
+$ go run . --feature-gates ContextualLogging=true
+...
+I0404 18:00:02.916429 451895 logger.go:94] "example/myname: runtime" foo="bar" duration="1m0s"
+I0404 18:00:02.916447 451895 logger.go:95] "example: another runtime" foo="bar" duration="1m0s"
+```
+
+The `example` prefix and `foo="bar"` were added by the caller of the function
+which logs the `runtime` message and `duration="1m0s"` value, without having to
+modify that function.
+
+With contextual logging disable, `WithValues` and `WithName` do nothing and log
+calls go through the global klog logger. Therefore this additional information
+is not in the log output anymore:
+
+```console
+$ go run . --feature-gates ContextualLogging=false
+...
+I0404 18:03:31.171945 452150 logger.go:94] "runtime" duration="1m0s"
+I0404 18:03:31.171962 452150 logger.go:95] "another runtime" duration="1m0s"
+```
+
### JSON log format
{{< feature-state for_k8s_version="v1.19" state="alpha" >}}
@@ -150,27 +199,6 @@ List of components currently supporting JSON format:
* {{< glossary_tooltip term_id="kube-scheduler" text="kube-scheduler" >}}
* {{< glossary_tooltip term_id="kubelet" text="kubelet" >}}
-### Log sanitization
-
-{{< feature-state for_k8s_version="v1.20" state="alpha" >}}
-
-{{}}
-Log sanitization might incur significant computation overhead and therefore should not be enabled in production.
-{{< /warning >}}
-
-The `--experimental-logging-sanitization` flag enables the klog sanitization filter.
-If enabled all log arguments are inspected for fields tagged as sensitive data (e.g. passwords, keys, tokens) and logging of these fields will be prevented.
-
-List of components currently supporting log sanitization:
-* kube-controller-manager
-* kube-apiserver
-* kube-scheduler
-* kubelet
-
-{{< note >}}
-The Log sanitization filter does not prevent user workload logs from leaking sensitive data.
-{{< /note >}}
-
### Log verbosity level
The `-v` flag controls log verbosity. Increasing the value increases the number of logged events. Decreasing the value decreases the number of logged events.
@@ -197,5 +225,6 @@ The `logrotate` tool rotates logs daily, or once the log size is greater than 10
* Read about the [Kubernetes Logging Architecture](/docs/concepts/cluster-administration/logging/)
* Read about [Structured Logging](https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/1602-structured-logging)
+* Read about [Contextual Logging](https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/3077-contextual-logging)
* Read about [deprecation of klog flags](https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
* Read about the [Conventions for logging severity](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md)
diff --git a/content/en/docs/concepts/configuration/configmap.md b/content/en/docs/concepts/configuration/configmap.md
index eb48d8e501..4f5ace4348 100644
--- a/content/en/docs/concepts/configuration/configmap.md
+++ b/content/en/docs/concepts/configuration/configmap.md
@@ -279,5 +279,6 @@ to the deleted ConfigMap, it is recommended to recreate these pods.
* Read about [Secrets](/docs/concepts/configuration/secret/).
* Read [Configure a Pod to Use a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/).
+* Read about [changing a ConfigMap (or any other Kubernetes object)](/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch/)
* Read [The Twelve-Factor App](https://12factor.net/) to understand the motivation for
separating code from configuration.
diff --git a/content/en/docs/concepts/configuration/manage-resources-containers.md b/content/en/docs/concepts/configuration/manage-resources-containers.md
index 575f96f04d..2cb2ee1b7f 100644
--- a/content/en/docs/concepts/configuration/manage-resources-containers.md
+++ b/content/en/docs/concepts/configuration/manage-resources-containers.md
@@ -47,10 +47,9 @@ or by enforcement (the system prevents the container from ever exceeding the lim
runtimes can have different ways to implement the same restrictions.
{{< note >}}
-If a container specifies its own memory limit, but does not specify a memory request, Kubernetes
-automatically assigns a memory request that matches the limit. Similarly, if a container specifies its own
-CPU limit, but does not specify a CPU request, Kubernetes automatically assigns a CPU request that matches
-the limit.
+If you specify a limit for a resource, but do not specify any request, and no admission-time
+mechanism has applied a default request for that resource, then Kubernetes copies the limit
+you specified and uses it as the requested value for the resource.
{{< /note >}}
## Resource types
@@ -229,9 +228,9 @@ see the [Troubleshooting](#troubleshooting) section.
The kubelet reports the resource usage of a Pod as part of the Pod
[`status`](/docs/concepts/overview/working-with-objects/kubernetes-objects/#object-spec-and-status).
-If optional [tools for monitoring](/docs/tasks/debug-application-cluster/resource-usage-monitoring/)
+If optional [tools for monitoring](/docs/tasks/debug/debug-cluster/resource-usage-monitoring/)
are available in your cluster, then Pod resource usage can be retrieved either
-from the [Metrics API](/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#metrics-api)
+from the [Metrics API](/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/#metrics-api)
directly or from your monitoring tools.
## Local ephemeral storage
diff --git a/content/en/docs/concepts/configuration/secret.md b/content/en/docs/concepts/configuration/secret.md
index d9611439a4..f83372532f 100644
--- a/content/en/docs/concepts/configuration/secret.md
+++ b/content/en/docs/concepts/configuration/secret.md
@@ -247,6 +247,8 @@ You can still [manually create](/docs/tasks/configure-pod-container/configure-se
a service account token Secret; for example, if you need a token that never expires.
However, using the [TokenRequest](/docs/reference/kubernetes-api/authentication-resources/token-request-v1/)
subresource to obtain a token to access the API is recommended instead.
+You can use the [`kubectl create token`](/docs/reference/generated/kubectl/kubectl-commands#-em-token-em-)
+command to obtain a token from the `TokenRequest` API.
{{< /note >}}
#### Projection of Secret keys to specific paths
@@ -886,15 +888,30 @@ In this case, `0` means you have created an empty Secret.
### Service account token Secrets
A `kubernetes.io/service-account-token` type of Secret is used to store a
-token that identifies a
+token credential that identifies a
{{< glossary_tooltip text="service account" term_id="service-account" >}}.
+
+Since 1.22, this type of Secret is no longer used to mount credentials into Pods,
+and obtaining tokens via the [TokenRequest](/docs/reference/kubernetes-api/authentication-resources/token-request-v1/)
+API is recommended instead of using service account token Secret objects.
+Tokens obtained from the `TokenRequest` API are more secure than ones stored in Secret objects,
+because they have a bounded lifetime and are not readable by other API clients.
+You can use the [`kubectl create token`](/docs/reference/generated/kubectl/kubectl-commands#-em-token-em-)
+command to obtain a token from the `TokenRequest` API.
+
+You should only create a service account token Secret object
+if you can't use the `TokenRequest` API to obtain a token,
+and the security exposure of persisting a non-expiring token credential
+in a readable API object is acceptable to you.
+
When using this Secret type, you need to ensure that the
`kubernetes.io/service-account.name` annotation is set to an existing
-service account name. A Kubernetes
-{{< glossary_tooltip text="controller" term_id="controller" >}} fills in some
-other fields such as the `kubernetes.io/service-account.uid` annotation, and the
-`token` key in the `data` field, which is set to contain an authentication
-token.
+service account name. If you are creating both the ServiceAccount and
+the Secret objects, you should create the ServiceAccount object first.
+
+After the Secret is created, a Kubernetes {{< glossary_tooltip text="controller" term_id="controller" >}}
+fills in some other fields such as the `kubernetes.io/service-account.uid` annotation, and the
+`token` key in the `data` field, which is populated with an authentication token.
The following example configuration declares a service account token Secret:
@@ -911,20 +928,14 @@ data:
extra: YmFyCg==
```
-When creating a `Pod`, Kubernetes automatically finds or creates a service account
-Secret and then automatically modifies your Pod to use this Secret. The service account
-token Secret contains credentials for accessing the Kubernetes API.
-
-The automatic creation and use of API credentials can be disabled or
-overridden if desired. However, if all you need to do is securely access the
-API server, this is the recommended workflow.
+After creating the Secret, wait for Kubernetes to populate the `token` key in the `data` field.
See the [ServiceAccount](/docs/tasks/configure-pod-container/configure-service-account/)
documentation for more information on how service accounts work.
You can also check the `automountServiceAccountToken` field and the
`serviceAccountName` field of the
[`Pod`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core)
-for information on referencing service account from Pods.
+for information on referencing service account credentials from within Pods.
### Docker config Secrets
@@ -982,7 +993,7 @@ kubectl create secret docker-registry secret-tiger-docker \
```
That command creates a Secret of type `kubernetes.io/dockerconfigjson`.
-If you dump the `.data.dockercfgjson` field from that new Secret and then
+If you dump the `.data.dockerconfigjson` field from that new Secret and then
decode it from base64:
```shell
@@ -1291,7 +1302,7 @@ on that node.
- When deploying applications that interact with the Secret API, you should
limit access using
[authorization policies](/docs/reference/access-authn-authz/authorization/) such as
- [RBAC]( /docs/reference/access-authn-authz/rbac/).
+ [RBAC](/docs/reference/access-authn-authz/rbac/).
- In the Kubernetes API, `watch` and `list` requests for Secrets within a namespace
are extremely powerful capabilities. Avoid granting this access where feasible, since
listing Secrets allows the clients to inspect the values of every Secret in that
@@ -1310,7 +1321,7 @@ have access to run a Pod that then exposes the Secret.
- When deploying applications that interact with the Secret API, you should
limit access using
[authorization policies](/docs/reference/access-authn-authz/authorization/) such as
- [RBAC]( /docs/reference/access-authn-authz/rbac/).
+ [RBAC](/docs/reference/access-authn-authz/rbac/).
- In the API server, objects (including Secrets) are persisted into
{{< glossary_tooltip term_id="etcd" >}}; therefore:
- only allow cluster admistrators to access etcd (this includes read-only access);
diff --git a/content/en/docs/concepts/configuration/windows-resource-management.md b/content/en/docs/concepts/configuration/windows-resource-management.md
new file mode 100644
index 0000000000..6593caa5fb
--- /dev/null
+++ b/content/en/docs/concepts/configuration/windows-resource-management.md
@@ -0,0 +1,83 @@
+---
+reviewers:
+- jayunit100
+- jsturtevant
+- marosset
+- perithompson
+title: Resource Management for Windows nodes
+content_type: concept
+weight: 75
+---
+
+
+
+This page outlines the differences in how resources are managed between Linux and Windows.
+
+
+
+On Linux nodes, {{< glossary_tooltip text="cgroups" term_id="cgroup" >}} are used
+as a pod boundary for resource control. Containers are created within that boundary
+for network, process and file system isolation. The Linux cgroup APIs can be used to
+gather CPU, I/O, and memory use statistics.
+
+In contrast, Windows uses a [_job object_](https://docs.microsoft.com/windows/win32/procthread/job-objects) per container with a system namespace filter
+to contain all processes in a container and provide logical isolation from the
+host.
+(Job objects are a Windows process isolation mechanism and are different from
+what Kubernetes refers to as a {{< glossary_tooltip term_id="job" text="Job" >}}).
+
+There is no way to run a Windows container without the namespace filtering in
+place. This means that system privileges cannot be asserted in the context of the
+host, and thus privileged containers are not available on Windows.
+Containers cannot assume an identity from the host because the Security Account Manager
+(SAM) is separate.
+
+## Memory reservations {#resource-management-memory}
+
+Windows does not have an out-of-memory process killer as Linux does. Windows always
+treats all user-mode memory allocations as virtual, and pagefiles are mandatory.
+
+Windows nodes do not overcommit memory for processes running in containers. The
+net effect is that Windows won't reach out of memory conditions the same way Linux
+does, and processes page to disk instead of being subject to out of memory (OOM)
+termination. If memory is over-provisioned and all physical memory is exhausted,
+then paging can slow down performance.
+
+You can place bounds on memory use for workloads using the kubelet
+parameters `--kubelet-reserve` and/or `--system-reserve`; these account
+for memory usage on the node (outside of containers), and reduce
+[NodeAllocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable).
+As you deploy workloads, set resource limits on containers. This also subtracts from
+`NodeAllocatable` and prevents the scheduler from adding more pods once a node is full.
+
+{{< note >}}
+When you set memory resource limits for Windows containers, you should either set a
+limit and leave the memory request unspecified, or set the request equal to the limit.
+{{< /note >}}
+
+On Windows, good practice to avoid over-provisioning is to configure the kubelet
+with a system reserved memory of at least 2GiB to account for Windows, Kubernetes
+and container runtime overheads.
+
+## CPU reservations {#resource-management-cpu}
+
+To account for CPU use by the operating system, the container runtime, and by
+Kubernetes host processes such as the kubelet, you can (and should) reserve a
+percentage of total CPU. You should determine this CPU reservation taking account of
+to the number of CPU cores available on the node. To decide on the CPU percentage to
+reserve, identify the maximum pod density for each node and monitor the CPU usage of
+the system services running there, then choose a value that meets your workload needs.
+
+You can place bounds on CPU usage for workloads using the
+kubelet parameters `--kubelet-reserve` and/or `--system-reserve` to
+account for CPU usage on the node (outside of containers).
+This reduces `NodeAllocatable`.
+The cluster-wide scheduler then takes this reservation into account when determining
+pod placement.
+
+On Windows, the kubelet supports a command-line flag to set the priority of the
+kubelet process: `--windows-priorityclass`. This flag allows the kubelet process to get
+more CPU time slices when compared to other processes running on the Windows host.
+More information on the allowable values and their meaning is available at
+[Windows Priority Classes](https://docs.microsoft.com/en-us/windows/win32/procthread/scheduling-priorities#priority-class).
+To ensure that running Pods do not starve the kubelet of CPU cycles, set this flag to `ABOVE_NORMAL_PRIORITY_CLASS` or above.
diff --git a/content/en/docs/concepts/containers/runtime-class.md b/content/en/docs/concepts/containers/runtime-class.md
index 849cd98782..6366ee0551 100644
--- a/content/en/docs/concepts/containers/runtime-class.md
+++ b/content/en/docs/concepts/containers/runtime-class.md
@@ -1,7 +1,7 @@
---
reviewers:
-- tallclair
-- dchen1107
+ - tallclair
+ - dchen1107
title: Runtime Class
content_type: concept
weight: 20
@@ -16,9 +16,6 @@ This page describes the RuntimeClass resource and runtime selection mechanism.
RuntimeClass is a feature for selecting the container runtime configuration. The container runtime
configuration is used to run a Pod's containers.
-
-
-
## Motivation
@@ -62,12 +59,15 @@ The RuntimeClass resource currently only has 2 significant fields: the RuntimeCl
(`metadata.name`) and the handler (`handler`). The object definition looks like this:
```yaml
-apiVersion: node.k8s.io/v1 # RuntimeClass is defined in the node.k8s.io API group
+# RuntimeClass is defined in the node.k8s.io API group
+apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
- name: myclass # The name the RuntimeClass will be referenced by
- # RuntimeClass is a non-namespaced resource
-handler: myconfiguration # The name of the corresponding CRI configuration
+ # The name the RuntimeClass will be referenced by.
+ # RuntimeClass is a non-namespaced resource.
+ name: myclass
+# The name of the corresponding CRI configuration
+handler: myconfiguration
```
The name of a RuntimeClass object must be a valid
@@ -75,14 +75,14 @@ The name of a RuntimeClass object must be a valid
{{< note >}}
It is recommended that RuntimeClass write operations (create/update/patch/delete) be
-restricted to the cluster administrator. This is typically the default. See [Authorization
-Overview](/docs/reference/access-authn-authz/authorization/) for more details.
+restricted to the cluster administrator. This is typically the default. See
+[Authorization Overview](/docs/reference/access-authn-authz/authorization/) for more details.
{{< /note >}}
## Usage
-Once RuntimeClasses are configured for the cluster, using them is very simple. Specify a
-`runtimeClassName` in the Pod spec. For example:
+Once RuntimeClasses are configured for the cluster, you can specify a
+`runtimeClassName` in the Pod spec to use it. For example:
```yaml
apiVersion: v1
@@ -97,7 +97,7 @@ spec:
This will instruct the kubelet to use the named RuntimeClass to run this pod. If the named
RuntimeClass does not exist, or the CRI cannot run the corresponding handler, the pod will enter the
`Failed` terminal [phase](/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase). Look for a
-corresponding [event](/docs/tasks/debug-application-cluster/debug-application-introspection/) for an
+corresponding [event](/docs/tasks/debug/debug-application/debug-running-pod/) for an
error message.
If no `runtimeClassName` is specified, the default RuntimeHandler will be used, which is equivalent
@@ -107,16 +107,6 @@ to the behavior when the RuntimeClass feature is disabled.
For more details on setting up CRI runtimes, see [CRI installation](/docs/setup/production-environment/container-runtimes/).
-#### dockershim
-
-{{< feature-state for_k8s_version="v1.20" state="deprecated" >}}
-
-Dockershim is deprecated as of Kubernetes v1.20, and will be removed in v1.24. For more information on the deprecation,
-see [dockershim deprecation](/blog/2020/12/08/kubernetes-1-20-release-announcement/#dockershim-deprecation)
-
-RuntimeClasses with dockershim must set the runtime handler to `docker`. Dockershim does not support
-custom configurable runtime handlers.
-
#### {{< glossary_tooltip term_id="containerd" >}}
Runtime handlers are configured through containerd's configuration at
@@ -126,14 +116,14 @@ Runtime handlers are configured through containerd's configuration at
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.${HANDLER_NAME}]
```
-See containerd's config documentation for more details:
-https://github.com/containerd/cri/blob/master/docs/config.md
+See containerd's [config documentation](https://github.com/containerd/cri/blob/master/docs/config.md)
+for more details:
#### {{< glossary_tooltip term_id="cri-o" >}}
Runtime handlers are configured through CRI-O's configuration at `/etc/crio/crio.conf`. Valid
-handlers are configured under the [crio.runtime
-table](https://github.com/cri-o/cri-o/blob/master/docs/crio.conf.5.md#crioruntime-table):
+handlers are configured under the
+[crio.runtime table](https://github.com/cri-o/cri-o/blob/master/docs/crio.conf.5.md#crioruntime-table):
```
[crio.runtime.runtimes.${HANDLER_NAME}]
@@ -161,27 +151,24 @@ can add `tolerations` to the RuntimeClass. As with the `nodeSelector`, the toler
with the pod's tolerations in admission, effectively taking the union of the set of nodes tolerated
by each.
-To learn more about configuring the node selector and tolerations, see [Assigning Pods to
-Nodes](/docs/concepts/scheduling-eviction/assign-pod-node/).
+To learn more about configuring the node selector and tolerations, see
+[Assigning Pods to Nodes](/docs/concepts/scheduling-eviction/assign-pod-node/).
### Pod Overhead
-{{< feature-state for_k8s_version="v1.18" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
You can specify _overhead_ resources that are associated with running a Pod. Declaring overhead allows
the cluster (including the scheduler) to account for it when making decisions about Pods and resources.
-To use Pod overhead, you must have the PodOverhead [feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
-enabled (it is on by default).
-Pod overhead is defined in RuntimeClass through the `overhead` fields. Through the use of these fields,
+Pod overhead is defined in RuntimeClass through the `overhead` field. Through the use of this field,
you can specify the overhead of running pods utilizing this RuntimeClass and ensure these overheads
are accounted for in Kubernetes.
-
## {{% heading "whatsnext" %}}
-
- [RuntimeClass Design](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/585-runtime-class/README.md)
- [RuntimeClass Scheduling Design](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/585-runtime-class/README.md#runtimeclass-scheduling)
- Read about the [Pod Overhead](/docs/concepts/scheduling-eviction/pod-overhead/) concept
- [PodOverhead Feature Design](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/688-pod-overhead)
+
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 f57be2d76a..6785dccdac 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
@@ -346,8 +346,6 @@ Here are some examples of device plugin implementations:
* The [AMD GPU device plugin](https://github.com/RadeonOpenCompute/k8s-device-plugin)
* The [Intel device plugins](https://github.com/intel/intel-device-plugins-for-kubernetes) for Intel GPU, FPGA, QAT, VPU, SGX, DSA, DLB and IAA devices
* The [KubeVirt device plugins](https://github.com/kubevirt/kubernetes-device-plugins) for hardware-assisted virtualization
-* The [NVIDIA GPU device plugin](https://github.com/NVIDIA/k8s-device-plugin)
- * Requires [nvidia-docker](https://github.com/NVIDIA/nvidia-docker) 2.0, which allows you to run GPU-enabled Docker containers.
* The [NVIDIA GPU device plugin for Container-Optimized OS](https://github.com/GoogleCloudPlatform/container-engine-accelerators/tree/master/cmd/nvidia_gpu)
* The [RDMA device plugin](https://github.com/hustcat/k8s-rdma-device-plugin)
* The [SocketCAN device plugin](https://github.com/collabora/k8s-socketcan)
diff --git a/content/en/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md b/content/en/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md
index 0ec8bf81b1..647111b375 100644
--- a/content/en/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md
+++ b/content/en/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md
@@ -11,36 +11,52 @@ weight: 10
-Network plugins in Kubernetes come in a few flavors:
+Kubernetes {{< skew currentVersion >}} supports [Container Network Interface](https://github.com/containernetworking/cni)
+(CNI) plugins for cluster networking. You must use a CNI plugin that is compatible with your cluster and that suits your needs. Different plugins are available (both open- and closed- source) in the wider Kubernetes ecosystem.
-* CNI plugins: adhere to the [Container Network Interface](https://github.com/containernetworking/cni) (CNI) specification, designed for interoperability.
- * Kubernetes follows the [v0.4.0](https://github.com/containernetworking/cni/blob/spec-v0.4.0/SPEC.md) release of the CNI specification.
-* Kubenet plugin: implements basic `cbr0` using the `bridge` and `host-local` CNI plugins
+A CNI plugin is required to implement the [Kubernetes network model](/docs/concepts/services-networking/#the-kubernetes-network-model).
+
+You must use a CNI plugin that is compatible with the
+[v0.4.0](https://github.com/containernetworking/cni/blob/spec-v0.4.0/SPEC.md) or later
+releases of the CNI specification. The Kubernetes project recommends using a plugin that is
+compatible with the [v1.0.0](https://github.com/containernetworking/cni/blob/spec-v1.0.0/SPEC.md)
+CNI specification (plugins can be compatible with multiple spec versions).
## Installation
-The kubelet has a single default network plugin, and a default network common to the entire cluster. It probes for plugins when it starts up, remembers what it finds, and executes the selected plugin at appropriate times in the pod lifecycle (this is only true for Docker, as CRI manages its own CNI plugins). There are two Kubelet command line parameters to keep in mind when using plugins:
+A Container Runtime, in the networking context, is a daemon on a node configured to provide CRI Services for kubelet. In particular, the Container Runtime must be configured to load the CNI plugins required to implement the Kubernetes network model.
-* `cni-bin-dir`: Kubelet probes this directory for plugins on startup
-* `network-plugin`: The network plugin to use from `cni-bin-dir`. It must match the name reported by a plugin probed from the plugin directory. For CNI plugins, this is `cni`.
+{{< note >}}
+Prior to Kubernetes 1.24, the CNI plugins could also be managed by the kubelet using the `cni-bin-dir` and `network-plugin` command-line parameters.
+These command-line parameters were removed in Kubernetes 1.24, with management of the CNI no longer in scope for kubelet.
+
+See [Troubleshooting CNI plugin-related errors](/docs/tasks/administer-cluster/migrating-from-dockershim/troubleshooting-cni-plugin-related-errors/)
+if you are facing issues following the removal of dockershim.
+{{< /note >}}
+
+For specific information about how a Container Runtime manages the CNI plugins, see the documentation for that Container Runtime, for example:
+- [containerd](https://github.com/containerd/containerd/blob/main/script/setup/install-cni)
+- [CRI-O](https://github.com/cri-o/cri-o/blob/main/contrib/cni/README.md)
+
+For specific information about how to install and manage a CNI plugin, see the documentation for that plugin or [networking provider](/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-networking-model).
## Network Plugin Requirements
-Besides providing the [`NetworkPlugin` interface](https://github.com/kubernetes/kubernetes/tree/{{< param "fullversion" >}}/pkg/kubelet/dockershim/network/plugins.go) to configure and clean up pod networking, the plugin may also need specific support for kube-proxy. The iptables proxy obviously depends on iptables, and the plugin may need to ensure that container traffic is made available to iptables. For example, if the plugin connects containers to a Linux bridge, the plugin must set the `net/bridge/bridge-nf-call-iptables` sysctl to `1` to ensure that the iptables proxy functions correctly. If the plugin does not use a Linux bridge (but instead something like Open vSwitch or some other mechanism) it should ensure container traffic is appropriately routed for the proxy.
+For plugin developers and users who regularly build or deploy Kubernetes, the plugin may also need specific configuration to support kube-proxy.
+The iptables proxy depends on iptables, and the plugin may need to ensure that container traffic is made available to iptables.
+For example, if the plugin connects containers to a Linux bridge, the plugin must set the `net/bridge/bridge-nf-call-iptables` sysctl to `1` to ensure that the iptables proxy functions correctly.
+If the plugin does not use a Linux bridge, but uses something like Open vSwitch or some other mechanism instead, it should ensure container traffic is appropriately routed for the proxy.
-By default if no kubelet network plugin is specified, the `noop` plugin is used, which sets `net/bridge/bridge-nf-call-iptables=1` to ensure simple configurations (like Docker with a bridge) work correctly with the iptables proxy.
+By default, if no kubelet network plugin is specified, the `noop` plugin is used, which sets `net/bridge/bridge-nf-call-iptables=1` to ensure simple configurations (like Docker with a bridge) work correctly with the iptables proxy.
-### CNI
+### Loopback CNI
-The CNI plugin is selected by passing Kubelet the `--network-plugin=cni` command-line option. Kubelet reads a file from `--cni-conf-dir` (default `/etc/cni/net.d`) and uses the CNI configuration from that file to set up each pod's network. The CNI configuration file must match the [CNI specification](https://github.com/containernetworking/cni/blob/master/SPEC.md#network-configuration), and any required CNI plugins referenced by the configuration must be present in `--cni-bin-dir` (default `/opt/cni/bin`).
+In addition to the CNI plugin installed on the nodes for implementing the Kubernetes network model, Kubernetes also requires the container runtimes to provide a loopback interface `lo`, which is used for each sandbox (pod sandboxes, vm sandboxes, ...).
+Implementing the loopback interface can be accomplished by re-using the [CNI loopback plugin.](https://github.com/containernetworking/plugins/blob/master/plugins/main/loopback/loopback.go) or by developing your own code to achieve this (see [this example from CRI-O](https://github.com/cri-o/ocicni/blob/release-1.24/pkg/ocicni/util_linux.go#L91)).
-If there are multiple CNI configuration files in the directory, the kubelet uses the configuration file that comes first by name in lexicographic order.
-
-In addition to the CNI plugin specified by the configuration file, Kubernetes requires the standard CNI [`lo`](https://github.com/containernetworking/plugins/blob/master/plugins/main/loopback/loopback.go) plugin, at minimum version 0.2.0
-
-#### Support hostPort
+### Support hostPort
The CNI networking plugin supports `hostPort`. You can use the official [portmap](https://github.com/containernetworking/plugins/tree/master/plugins/meta/portmap)
plugin offered by the CNI plugin team or use your own plugin with portMapping functionality.
@@ -77,7 +93,7 @@ For example:
}
```
-#### Support traffic shaping
+### Support traffic shaping
**Experimental Feature**
@@ -129,37 +145,4 @@ metadata:
...
```
-### kubenet
-
-Kubenet is a very basic, simple network plugin, on Linux only. It does not, of itself, implement more advanced features like cross-node networking or network policy. It is typically used together with a cloud provider that sets up routing rules for communication between nodes, or in single-node environments.
-
-Kubenet creates a Linux bridge named `cbr0` and creates a veth pair for each pod with the host end of each pair connected to `cbr0`. The pod end of the pair is assigned an IP address allocated from a range assigned to the node either through configuration or by the controller-manager. `cbr0` is assigned an MTU matching the smallest MTU of an enabled normal interface on the host.
-
-The plugin requires a few things:
-
-* The standard CNI `bridge`, `lo` and `host-local` plugins are required, at minimum version 0.2.0. Kubenet will first search for them in `/opt/cni/bin`. Specify `cni-bin-dir` to supply additional search path. The first found match will take effect.
-* Kubelet must be run with the `--network-plugin=kubenet` argument to enable the plugin
-* Kubelet should also be run with the `--non-masquerade-cidr=` argument to ensure traffic to IPs outside this range will use IP masquerade.
-* The node must be assigned an IP subnet through either the `--pod-cidr` kubelet command-line option or the `--allocate-node-cidrs=true --cluster-cidr=` controller-manager command-line options.
-
-### Customizing the MTU (with kubenet)
-
-The MTU should always be configured correctly to get the best networking performance. Network plugins will usually try
-to infer a sensible MTU, but sometimes the logic will not result in an optimal MTU. For example, if the
-Docker bridge or another interface has a small MTU, kubenet will currently select that MTU. Or if you are
-using IPSEC encapsulation, the MTU must be reduced, and this calculation is out-of-scope for
-most network plugins.
-
-Where needed, you can specify the MTU explicitly with the `network-plugin-mtu` kubelet option. For example,
-on AWS the `eth0` MTU is typically 9001, so you might specify `--network-plugin-mtu=9001`. If you're using IPSEC you
-might reduce it to allow for encapsulation overhead; for example: `--network-plugin-mtu=8873`.
-
-This option is provided to the network-plugin; currently **only kubenet supports `network-plugin-mtu`**.
-
-## Usage Summary
-
-* `--network-plugin=cni` specifies that we use the `cni` network plugin with actual CNI plugin binaries located in `--cni-bin-dir` (default `/opt/cni/bin`) and CNI plugin configuration located in `--cni-conf-dir` (default `/etc/cni/net.d`).
-* `--network-plugin=kubenet` specifies that we use the `kubenet` network plugin with CNI `bridge`, `lo` and `host-local` plugins placed in `/opt/cni/bin` or `cni-bin-dir`.
-* `--network-plugin-mtu=9001` specifies the MTU to use, currently only used by the `kubenet` network plugin.
-
## {{% heading "whatsnext" %}}
diff --git a/content/en/docs/concepts/extend-kubernetes/operator.md b/content/en/docs/concepts/extend-kubernetes/operator.md
index 96a17ada96..3c2fc9890d 100644
--- a/content/en/docs/concepts/extend-kubernetes/operator.md
+++ b/content/en/docs/concepts/extend-kubernetes/operator.md
@@ -111,6 +111,7 @@ Operator.
{{% thirdparty-content %}}
* [Charmed Operator Framework](https://juju.is/)
+* [Java Operator SDK](https://github.com/java-operator-sdk/java-operator-sdk)
* [Kopf](https://github.com/nolar/kopf) (Kubernetes Operator Pythonic Framework)
* [kubebuilder](https://book.kubebuilder.io/)
* [KubeOps](https://buehler.github.io/dotnet-operator-sdk/) (.NET operator SDK)
diff --git a/content/en/docs/concepts/overview/components.md b/content/en/docs/concepts/overview/components.md
index 60433f63e5..387fc157d9 100644
--- a/content/en/docs/concepts/overview/components.md
+++ b/content/en/docs/concepts/overview/components.md
@@ -114,7 +114,7 @@ Containers started by Kubernetes automatically include this DNS server in their
### Container Resource Monitoring
-[Container Resource Monitoring](/docs/tasks/debug-application-cluster/resource-usage-monitoring/) records generic time-series metrics
+[Container Resource Monitoring](/docs/tasks/debug/debug-cluster/resource-usage-monitoring/) records generic time-series metrics
about containers in a central database, and provides a UI for browsing that data.
### Cluster-level Logging
diff --git a/content/en/docs/concepts/overview/kubernetes-api.md b/content/en/docs/concepts/overview/kubernetes-api.md
index ed873bf352..3c0bba3adb 100644
--- a/content/en/docs/concepts/overview/kubernetes-api.md
+++ b/content/en/docs/concepts/overview/kubernetes-api.md
@@ -82,18 +82,42 @@ packages that define the API objects.
### OpenAPI V3
-{{< feature-state state="alpha" for_k8s_version="v1.23" >}}
+{{< feature-state state="beta" for_k8s_version="v1.24" >}}
-Kubernetes v1.23 offers initial support for publishing its APIs as OpenAPI v3; this is an
-alpha feature that is disabled by default.
-You can enable the alpha feature by turning on the
+Kubernetes {{< param "version" >}} offers beta support for publishing its APIs as OpenAPI v3; this is a
+beta feature that is enabled by default.
+You can disable the beta feature by turning off the
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) named `OpenAPIV3`
for the kube-apiserver component.
-With the feature enabled, the Kubernetes API server serves an
-aggregated OpenAPI v3 spec per Kubernetes group version at the
-`/openapi/v3/apis//` endpoint. Please refer to the
-table below for accepted request headers.
+A discovery endpoint `/openapi/v3` is provided to see a list of all
+group/versions available. This endpoint only returns JSON. These group/versions
+are provided in the following format:
+```json
+{
+ "paths": {
+ ...
+ "api/v1": {
+ "serverRelativeURL": "/openapi/v3/api/v1?hash=CC0E9BFD992D8C59AEC98A1E2336F899E8318D3CF4C68944C3DEC640AF5AB52D864AC50DAA8D145B3494F75FA3CFF939FCBDDA431DAD3CA79738B297795818CF"
+ },
+ "apis/admissionregistration.k8s.io/v1": {
+ "serverRelativeURL": "/openapi/v3/apis/admissionregistration.k8s.io/v1?hash=E19CC93A116982CE5422FC42B590A8AFAD92CDE9AE4D59B5CAAD568F083AD07946E6CB5817531680BCE6E215C16973CD39003B0425F3477CFD854E89A9DB6597"
+ },
+ ...
+}
+```
+
+The relative URLs are pointing to immutable OpenAPI descriptions, in
+order to improve client-side caching. The proper HTTP caching headers
+are also set by the API server for that purpose (`Expires` to 1 year in
+the future, and `Cache-Control` to `immutable`). When an obsolete URL is
+used, the API server returns a redirect to the newest URL.
+
+The Kubernetes API server publishes an OpenAPI v3 spec per Kubernetes
+group version at the `/openapi/v3/apis//?hash=`
+endpoint.
+
+Refer to the table below for accepted request headers.
Valid request header values for OpenAPI v3 queries
@@ -126,9 +150,6 @@ table below for accepted request headers.
-A discovery endpoint `/openapi/v3` is provided to see a list of all
-group/versions available. This endpoint only returns JSON.
-
## Persistence
Kubernetes stores the serialized state of objects by writing them into
diff --git a/content/en/docs/concepts/policy/resource-quotas.md b/content/en/docs/concepts/policy/resource-quotas.md
index d31efd09bc..0e88ca3433 100644
--- a/content/en/docs/concepts/policy/resource-quotas.md
+++ b/content/en/docs/concepts/policy/resource-quotas.md
@@ -442,7 +442,7 @@ pods 0 10
### Cross-namespace Pod Affinity Quota
-{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
Operators can use `CrossNamespacePodAffinity` quota scope to limit which namespaces are allowed to
have pods with affinity terms that cross namespaces. Specifically, it controls which pods are allowed
@@ -493,10 +493,6 @@ With the above configuration, pods can use `namespaces` and `namespaceSelector`
if the namespace where they are created have a resource quota object with
`CrossNamespaceAffinity` scope and a hard limit greater than or equal to the number of pods using those fields.
-This feature is beta and enabled by default. You can disable it using the
-[feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
-`PodAffinityNamespaceSelector` in both kube-apiserver and kube-scheduler.
-
## Requests compared to Limits {#requests-vs-limits}
When allocating compute resources, each container may specify a request and a limit value for either CPU or memory.
diff --git a/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md b/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md
index 44b3c07164..b5a786620b 100644
--- a/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md
+++ b/content/en/docs/concepts/scheduling-eviction/assign-pod-node.md
@@ -120,7 +120,7 @@ your Pod spec.
For example, consider the following Pod spec:
-{{}}
+{{< codenew file="pods/pod-with-node-affinity.yaml" >}}
In this example, the following rules apply:
@@ -167,7 +167,7 @@ scheduling decision for the Pod.
For example, consider the following Pod spec:
-{{}}
+{{< codenew file="pods/pod-with-affinity-anti-affinity.yaml" >}}
If there are two possible nodes that match the
`requiredDuringSchedulingIgnoredDuringExecution` rule, one with the
@@ -302,9 +302,8 @@ the Pod onto a node that is in the same zone as one or more Pods with the label
`topology.kubernetes.io/zone=R` label if there are other nodes in the
same zone currently running Pods with the `Security=S2` Pod label.
-See the
-[design doc](https://git.k8s.io/community/contributors/design-proposals/scheduling/podaffinity.md)
-for many more examples of Pod affinity and anti-affinity.
+To get yourself more familiar with the examples of Pod affinity and anti-affinity,
+refer to the [design proposal](https://github.com/kubernetes/design-proposals-archive/blob/main/scheduling/podaffinity.md).
You can use the `In`, `NotIn`, `Exists` and `DoesNotExist` values in the
`operator` field for Pod affinity and anti-affinity.
@@ -326,19 +325,13 @@ If omitted or empty, `namespaces` defaults to the namespace of the Pod where the
affinity/anti-affinity definition appears.
#### Namespace selector
-{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
You can also select matching namespaces using `namespaceSelector`, which is a label query over the set of namespaces.
The affinity term is applied to namespaces selected by both `namespaceSelector` and the `namespaces` field.
Note that an empty `namespaceSelector` ({}) matches all namespaces, while a null or empty `namespaces` list and
null `namespaceSelector` matches the namespace of the Pod where the rule is defined.
-{{}}
-This feature is beta and enabled by default. You can disable it via the
-[feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
-`PodAffinityNamespaceSelector` in both kube-apiserver and kube-scheduler.
-{{ }}
-
#### More practical use-cases
Inter-pod affinity and anti-affinity can be even more useful when they are used with higher
diff --git a/content/en/docs/concepts/scheduling-eviction/pod-overhead.md b/content/en/docs/concepts/scheduling-eviction/pod-overhead.md
index d5db85dadf..72b160653e 100644
--- a/content/en/docs/concepts/scheduling-eviction/pod-overhead.md
+++ b/content/en/docs/concepts/scheduling-eviction/pod-overhead.md
@@ -10,17 +10,12 @@ weight: 30
-{{< feature-state for_k8s_version="v1.18" state="beta" >}}
-
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
When you run a Pod on a Node, the Pod itself takes an amount of system resources. These
resources are additional to the resources needed to run the container(s) inside the Pod.
-_Pod Overhead_ is a feature for accounting for the resources consumed by the Pod infrastructure
-on top of the container requests & limits.
-
-
-
-
+In Kubernetes, _Pod Overhead_ is a way to account for the resources consumed by the Pod
+infrastructure on top of the container requests & limits.
@@ -29,33 +24,30 @@ In Kubernetes, the Pod's overhead is set at
time according to the overhead associated with the Pod's
[RuntimeClass](/docs/concepts/containers/runtime-class/).
-When Pod Overhead is enabled, the overhead is considered in addition to the sum of container
-resource requests when scheduling a Pod. Similarly, the kubelet will include the Pod overhead when sizing
-the Pod cgroup, and when carrying out Pod eviction ranking.
+A pod's overhead is considered in addition to the sum of container resource requests when
+scheduling a Pod. Similarly, the kubelet will include the Pod overhead when sizing the Pod cgroup,
+and when carrying out Pod eviction ranking.
-## Enabling Pod Overhead {#set-up}
+## Configuring Pod overhead {#set-up}
-You need to make sure that the `PodOverhead`
-[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) is enabled (it is on by default as of 1.18)
-across your cluster, and a `RuntimeClass` is utilized which defines the `overhead` field.
+You need to make sure a `RuntimeClass` is utilized which defines the `overhead` field.
## Usage example
-To use the PodOverhead feature, you need a RuntimeClass that defines the `overhead` field. As
-an example, you could use the following RuntimeClass definition with a virtualizing container runtime
-that uses around 120MiB per Pod for the virtual machine and the guest OS:
+To work with Pod overhead, you need a RuntimeClass that defines the `overhead` field. As
+an example, you could use the following RuntimeClass definition with a virtualization container
+runtime that uses around 120MiB per Pod for the virtual machine and the guest OS:
```yaml
----
-kind: RuntimeClass
apiVersion: node.k8s.io/v1
+kind: RuntimeClass
metadata:
- name: kata-fc
+ name: kata-fc
handler: kata-fc
overhead:
- podFixed:
- memory: "120Mi"
- cpu: "250m"
+ podFixed:
+ memory: "120Mi"
+ cpu: "250m"
```
Workloads which are created which specify the `kata-fc` RuntimeClass handler will take the memory and
@@ -92,13 +84,15 @@ updates the workload's PodSpec to include the `overhead` as described in the Run
the Pod will be rejected. In the given example, since only the RuntimeClass name is specified, the admission controller mutates the Pod
to include an `overhead`.
-After the RuntimeClass admission controller, you can check the updated PodSpec:
+After the RuntimeClass admission controller has made modifications, you can check the updated
+Pod overhead value:
```bash
kubectl get pod test-pod -o jsonpath='{.spec.overhead}'
```
The output is:
+
```
map[cpu:250m memory:120Mi]
```
@@ -110,44 +104,50 @@ When the kube-scheduler is deciding which node should run a new Pod, the schedul
`overhead` as well as the sum of container requests for that Pod. For this example, the scheduler adds the
requests and the overhead, then looks for a node that has 2.25 CPU and 320 MiB of memory available.
-Once a Pod is scheduled to a node, the kubelet on that node creates a new {{< glossary_tooltip text="cgroup" term_id="cgroup" >}}
-for the Pod. It is within this pod that the underlying container runtime will create containers.
+Once a Pod is scheduled to a node, the kubelet on that node creates a new {{< glossary_tooltip
+text="cgroup" term_id="cgroup" >}} for the Pod. It is within this pod that the underlying
+container runtime will create containers.
-If the resource has a limit defined for each container (Guaranteed QoS or Bustrable QoS with limits defined),
+If the resource has a limit defined for each container (Guaranteed QoS or Burstable QoS with limits defined),
the kubelet will set an upper limit for the pod cgroup associated with that resource (cpu.cfs_quota_us for CPU
and memory.limit_in_bytes memory). This upper limit is based on the sum of the container limits plus the `overhead`
defined in the PodSpec.
-For CPU, if the Pod is Guaranteed or Burstable QoS, the kubelet will set `cpu.shares` based on the sum of container
-requests plus the `overhead` defined in the PodSpec.
+For CPU, if the Pod is Guaranteed or Burstable QoS, the kubelet will set `cpu.shares` based on the
+sum of container requests plus the `overhead` defined in the PodSpec.
Looking at our example, verify the container requests for the workload:
+
```bash
kubectl get pod test-pod -o jsonpath='{.spec.containers[*].resources.limits}'
```
The total container requests are 2000m CPU and 200MiB of memory:
+
```
map[cpu: 500m memory:100Mi] map[cpu:1500m memory:100Mi]
```
Check this against what is observed by the node:
+
```bash
kubectl describe node | grep test-pod -B2
```
-The output shows 2250m CPU and 320MiB of memory are requested, which includes PodOverhead:
+The output shows requests for 2250m CPU, and for 320MiB of memory. The requests include Pod overhead:
+
```
- Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
- --------- ---- ------------ ---------- --------------- ------------- ---
- default test-pod 2250m (56%) 2250m (56%) 320Mi (1%) 320Mi (1%) 36m
+ Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
+ --------- ---- ------------ ---------- --------------- ------------- ---
+ default test-pod 2250m (56%) 2250m (56%) 320Mi (1%) 320Mi (1%) 36m
```
## Verify Pod cgroup limits
-Check the Pod's memory cgroups on the node where the workload is running. In the following example, [`crictl`](https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md)
+Check the Pod's memory cgroups on the node where the workload is running. In the following example,
+[`crictl`](https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md)
is used on the node, which provides a CLI for CRI-compatible container runtimes. This is an
-advanced example to show PodOverhead behavior, and it is not expected that users should need to check
+advanced example to show Pod overhead behavior, and it is not expected that users should need to check
cgroups directly on the node.
First, on the particular node, determine the Pod identifier:
@@ -158,17 +158,21 @@ POD_ID="$(sudo crictl pods --name test-pod -q)"
```
From this, you can determine the cgroup path for the Pod:
+
```bash
# Run this on the node where the Pod is scheduled
sudo crictl inspectp -o=json $POD_ID | grep cgroupsPath
```
The resulting cgroup path includes the Pod's `pause` container. The Pod level cgroup is one directory above.
+
```
- "cgroupsPath": "/kubepods/podd7f4b509-cf94-4951-9417-d1087c92a5b2/7ccf55aee35dd16aca4189c952d83487297f3cd760f1bbf09620e206e7d0c27a"
+ "cgroupsPath": "/kubepods/podd7f4b509-cf94-4951-9417-d1087c92a5b2/7ccf55aee35dd16aca4189c952d83487297f3cd760f1bbf09620e206e7d0c27a"
```
-In this specific case, the pod cgroup path is `kubepods/podd7f4b509-cf94-4951-9417-d1087c92a5b2`. Verify the Pod level cgroup setting for memory:
+In this specific case, the pod cgroup path is `kubepods/podd7f4b509-cf94-4951-9417-d1087c92a5b2`.
+Verify the Pod level cgroup setting for memory:
+
```bash
# Run this on the node where the Pod is scheduled.
# Also, change the name of the cgroup to match the cgroup allocated for your pod.
@@ -176,22 +180,20 @@ In this specific case, the pod cgroup path is `kubepods/podd7f4b509-cf94-4951-94
```
This is 320 MiB, as expected:
+
```
335544320
```
### Observability
-A `kube_pod_overhead` metric is available in [kube-state-metrics](https://github.com/kubernetes/kube-state-metrics)
-to help identify when PodOverhead is being utilized and to help observe stability of workloads
-running with a defined Overhead. This functionality is not available in the 1.9 release of
-kube-state-metrics, but is expected in a following release. Users will need to build kube-state-metrics
-from source in the meantime.
-
-
+Some `kube_pod_overhead_*` metrics are available in [kube-state-metrics](https://github.com/kubernetes/kube-state-metrics)
+to help identify when Pod overhead is being utilized and to help observe stability of workloads
+running with a defined overhead.
## {{% heading "whatsnext" %}}
+* Learn more about [RuntimeClass](/docs/concepts/containers/runtime-class/)
+* Read the [PodOverhead Design](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/688-pod-overhead)
+ enhancement proposal for extra context
-* [RuntimeClass](/docs/concepts/containers/runtime-class/)
-* [PodOverhead Design](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/688-pod-overhead)
diff --git a/content/en/docs/concepts/scheduling-eviction/pod-priority-preemption.md b/content/en/docs/concepts/scheduling-eviction/pod-priority-preemption.md
index 63776520a9..cee15e966e 100644
--- a/content/en/docs/concepts/scheduling-eviction/pod-priority-preemption.md
+++ b/content/en/docs/concepts/scheduling-eviction/pod-priority-preemption.md
@@ -104,7 +104,7 @@ description: "This priority class should be used for XYZ service pods only."
## Non-preempting PriorityClass {#non-preempting-priority-class}
-{{< feature-state for_k8s_version="v1.19" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
Pods with `preemptionPolicy: Never` will be placed in the scheduling queue
ahead of lower-priority pods,
@@ -203,9 +203,10 @@ resources reserved for Pod P and also gives users information about preemptions
in their clusters.
Please note that Pod P is not necessarily scheduled to the "nominated Node".
+The scheduler always tries the "nominated Node" before iterating over any other nodes.
After victim Pods are preempted, they get their graceful termination period. If
another node becomes available while scheduler is waiting for the victim Pods to
-terminate, scheduler will use the other node to schedule Pod P. As a result
+terminate, scheduler may use the other node to schedule Pod P. As a result
`nominatedNodeName` and `nodeName` of Pod spec are not always the same. Also, if
scheduler preempts Pods on Node N, but then a higher priority Pod than Pod P
arrives, scheduler may give Node N to the new higher priority Pod. In such a
diff --git a/content/en/docs/concepts/security/controlling-access.md b/content/en/docs/concepts/security/controlling-access.md
index ff15c1512d..e7ba78e1c4 100644
--- a/content/en/docs/concepts/security/controlling-access.md
+++ b/content/en/docs/concepts/security/controlling-access.md
@@ -134,7 +134,7 @@ for the corresponding API object, and then written to the object store (shown as
Kubernetes auditing provides a security-relevant, chronological set of records documenting the sequence of actions in a cluster.
The cluster audits the activities generated by users, by applications that use the Kubernetes API, and by the control plane itself.
-For more information, see [Auditing](/docs/tasks/debug-application-cluster/audit/).
+For more information, see [Auditing](/docs/tasks/debug/debug-cluster/audit/).
## API server ports and IPs
diff --git a/content/en/docs/concepts/security/pod-security-admission.md b/content/en/docs/concepts/security/pod-security-admission.md
index d492b348d9..1e452ea6af 100644
--- a/content/en/docs/concepts/security/pod-security-admission.md
+++ b/content/en/docs/concepts/security/pod-security-admission.md
@@ -19,7 +19,7 @@ The Kubernetes [Pod Security Standards](/docs/concepts/security/pod-security-sta
different isolation levels for Pods. These standards let you define how you want to restrict the
behavior of pods in a clear, consistent fashion.
-As a Beta feature, Kubernetes offers a built-in _Pod Security_ {{< glossary_tooltip
+As a beta feature, Kubernetes offers a built-in _Pod Security_ {{< glossary_tooltip
text="admission controller" term_id="admission-controller" >}}, the successor
to [PodSecurityPolicies](/docs/concepts/security/pod-security-policy/). Pod security restrictions
are applied at the {{< glossary_tooltip text="namespace" term_id="namespace" >}} level when pods
@@ -30,25 +30,21 @@ The PodSecurityPolicy API is deprecated and will be
[removed](/docs/reference/using-api/deprecation-guide/#v1-25) from Kubernetes in v1.25.
{{< /note >}}
-
-## Enabling the `PodSecurity` admission plugin
+## {{% heading "prerequisites" %}}
-In v1.23, the `PodSecurity` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
-is a Beta feature and is enabled by default.
+To use this mechanism, your cluster must enforce Pod Security admission.
-In v1.22, the `PodSecurity` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
-is an Alpha feature and must be enabled in `kube-apiserver` in order to use the built-in admission plugin.
+### Built-in Pod Security admission enforcement
-```shell
---feature-gates="...,PodSecurity=true"
-```
+In Kubernetes v{{< skew currentVersion >}}, the `PodSecurity` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
+is a beta feature and is enabled by default. You must have this feature gate enabled.
+If you are running a different version of Kubernetes, consult the documentation for that release.
-## Alternative: installing the `PodSecurity` admission webhook {#webhook}
+### Alternative: installing the `PodSecurity` admission webhook {#webhook}
-For environments where the built-in `PodSecurity` admission plugin cannot be used,
-either because the cluster is older than v1.22, or the `PodSecurity` feature cannot be enabled,
-the `PodSecurity` admission logic is also available as a Beta [validating admission webhook](https://git.k8s.io/pod-security-admission/webhook).
+The `PodSecurity` admission logic is also available as a [validating admission webhook](https://git.k8s.io/pod-security-admission/webhook). This implementation is also beta.
+For environments where the built-in `PodSecurity` admission plugin cannot be enabled, you can instead enable that logic via a validating admission webhook.
A pre-built container image, certificate generation scripts, and example manifests
are available at [https://git.k8s.io/pod-security-admission/webhook](https://git.k8s.io/pod-security-admission/webhook).
@@ -66,6 +62,8 @@ The generated certificate is valid for 2 years. Before it expires,
regenerate the certificate or remove the webhook in favor of the built-in admission plugin.
{{< /note >}}
+
+
## Pod Security levels
Pod Security admission places requirements on a Pod's [Security
@@ -88,7 +86,7 @@ takes if a potential violation is detected:
Mode | Description
:---------|:------------
**enforce** | Policy violations will cause the pod to be rejected.
-**audit** | Policy violations will trigger the addition of an audit annotation to the event recorded in the [audit log](/docs/tasks/debug-application-cluster/audit/), but are otherwise allowed.
+**audit** | Policy violations will trigger the addition of an audit annotation to the event recorded in the [audit log](/docs/tasks/debug/debug-cluster/audit/), but are otherwise allowed.
**warn** | Policy violations will trigger a user-facing warning, but are otherwise allowed.
{{< /table >}}
diff --git a/content/en/docs/concepts/security/pod-security-policy.md b/content/en/docs/concepts/security/pod-security-policy.md
index a8e90040ed..cc0acc410d 100644
--- a/content/en/docs/concepts/security/pod-security-policy.md
+++ b/content/en/docs/concepts/security/pod-security-policy.md
@@ -658,8 +658,7 @@ added. Capabilities listed in `RequiredDropCapabilities` must not be included in
**DefaultAddCapabilities** - The capabilities which are added to containers by
default, in addition to the runtime defaults. See the
-[Docker documentation](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)
-for the default list of capabilities when using the Docker runtime.
+documentation for your container runtime for information on working with Linux capabilities.
### SELinux
diff --git a/content/en/docs/concepts/security/pod-security-standards.md b/content/en/docs/concepts/security/pod-security-standards.md
index 393468ac74..b42f7f3acb 100644
--- a/content/en/docs/concepts/security/pod-security-standards.md
+++ b/content/en/docs/concepts/security/pod-security-standards.md
@@ -29,10 +29,9 @@ This guide outlines the requirements of each policy.
**The _Privileged_ policy is purposely-open, and entirely unrestricted.** This type of policy is
typically aimed at system- and infrastructure-level workloads managed by privileged, trusted users.
-The Privileged policy is defined by an absence of restrictions. For allow-by-default enforcement
-mechanisms (such as gatekeeper), the Privileged policy may be an absence of applied constraints
-rather than an instantiated profile. In contrast, for a deny-by-default mechanism (such as Pod
-Security Policy) the Privileged policy should enable all controls (disable all restrictions).
+The Privileged policy is defined by an absence of restrictions. Allow-by-default
+mechanisms (such as gatekeeper) may be Privileged by default. In contrast, for a deny-by-default mechanism (such as Pod
+Security Policy) the Privileged policy should disable all restrictions.
### Baseline
@@ -458,6 +457,16 @@ of individual policies are not defined here.
- {{< example file="policy/baseline-psp.yaml" >}}Baseline{{< /example >}}
- {{< example file="policy/restricted-psp.yaml" >}}Restricted{{< /example >}}
+### Alternatives
+
+{{% thirdparty-content %}}
+
+Other alternatives for enforcing policies are being developed in the Kubernetes ecosystem, such as:
+- [Kubewarden](https://github.com/kubewarden)
+- [Kyverno](https://kyverno.io/policies/pod-security/)
+- [OPA Gatekeeper](https://github.com/open-policy-agent/gatekeeper)
+
+
## FAQ
### Why isn't there a profile between privileged and baseline?
@@ -481,14 +490,6 @@ as well as other related parameters outside the Security Context. As of July 202
[Pod Security Policies](/docs/concepts/security/pod-security-policy/) are deprecated in favor of the
built-in [Pod Security Admission Controller](/docs/concepts/security/pod-security-admission/).
-{{% thirdparty-content %}}
-
-Other alternatives for enforcing security profiles are being developed in the Kubernetes
-ecosystem, such as:
-- [OPA Gatekeeper](https://github.com/open-policy-agent/gatekeeper).
-- [Kubewarden](https://github.com/kubewarden).
-- [Kyverno](https://kyverno.io/policies/pod-security/).
-
### What profiles should I apply to my Windows Pods?
Windows in Kubernetes has some limitations and differentiators from standard Linux-based
diff --git a/content/en/docs/concepts/security/rbac-good-practices.md b/content/en/docs/concepts/security/rbac-good-practices.md
new file mode 100644
index 0000000000..7361c3a163
--- /dev/null
+++ b/content/en/docs/concepts/security/rbac-good-practices.md
@@ -0,0 +1,179 @@
+---
+reviewers:
+title: Role Based Access Control Good Practices
+description: >
+ Principles and practices for good RBAC design for cluster operators.
+content_type: concept
+---
+
+
+
+Kubernetes {{< glossary_tooltip text="RBAC" term_id="rbac" >}} is a key security control
+to ensure that cluster users and workloads have only the access to resources required to
+execute their roles. It is important to ensure that, when designing permissions for cluster
+users, the cluster administrator understands the areas where privilge escalation could occur,
+to reduce the risk of excessive access leading to security incidents.
+
+The good practices laid out here should be read in conjunction with the general [RBAC documentation](/docs/reference/access-authn-authz/rbac/#restrictions-on-role-creation-or-update).
+
+
+
+## General good practice
+
+### Least privilege
+
+Ideally minimal RBAC rights should be assigned to users and service accounts. Only permissions
+explicitly required for their operation should be used. Whilst each cluster will be different,
+some general rules that can be applied are :
+
+ - Assign permissions at the namespace level where possible. Use RoleBindings as opposed to
+ ClusterRoleBindings to give users rights only within a specific namespace.
+ - Avoid providing wildcard permissions when possible, especially to all resources.
+ As Kubernetes is an extensible system, providing wildcard access gives rights
+ not just to all object types presently in the cluster, but also to all future object types
+ which are created in the future.
+ - Administrators should not use `cluster-admin` accounts except where specifically needed.
+ Providing a low privileged account with [impersonation rights](/docs/reference/access-authn-authz/authentication/#user-impersonation)
+ can avoid accidental modification of cluster resources.
+ - Avoid adding users to the `system:masters` group. Any user who is a member of this group
+ bypasses all RBAC rights checks and will always have unrestricted superuser access, which cannot be
+ revoked by removing RoleBindings or ClusterRoleBindings. As an aside, if a cluster is
+ using an authorization webhook, membership of this group also bypasses that webhook (requests
+ from users who are members of that group are never sent to the webhook)
+
+### Minimize distribution of privileged tokens
+
+Ideally, pods shouldn't be assigned service accounts that have been granted powerful permissions (for example, any of the rights listed under
+[privilege escalation risks](#privilege-escalation-risks)).
+In cases where a workload requires powerful permissions, consider the following practices:
+
+ - Limit the number of nodes running powerful pods. Ensure that any DaemonSets you run
+ are necessary and are run with least privilege to limit the blast radius of container escapes.
+ - Avoid running powerful pods alongside untrusted or publicly-exposed ones. Consider using
+ [Taints and Toleration](/docs/concepts/scheduling-eviction/taint-and-toleration/), [NodeAffinity](/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity), or [PodAntiAffinity](/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity) to ensure
+ pods don't run alongside untrusted or less-trusted Pods. Pay especial attention to
+ situations where less-trustworthy Pods are not meeting the **Restricted** Pod Security Standard.
+
+### Hardening
+
+Kubernetes defaults to providing access which may not be required in every cluster. Reviewing
+the RBAC rights provided by default can provide opportunities for security hardening.
+In general, changes should not be made to rights provided to `system:` accounts some options
+to harden cluster rights exist:
+
+- Review bindings for the `system:unauthenticated` group and remove where possible, as this gives
+ access to anyone who can contact the API server at a network level.
+- Avoid the default auto-mounting of service account tokens by setting
+ `automountServiceAccountToken: false`. For more details, see
+ [using default service account token](/docs/tasks/configure-pod-container/configure-service-account/#use-the-default-service-account-to-access-the-api-server).
+ Setting this value for a Pod will overwrite the service account setting, workloads
+ which require service account tokens can still mount them.
+
+### Periodic review
+
+It is vital to periodically review the Kubernetes RBAC settings for redundant entries and
+possible privilege escalations.
+If an attacker is able to create a user account with the same name as a deleted user,
+they can automatically inherit all the rights of the deleted user, especially the
+rights assigned to that user.
+
+## Kubernetes RBAC - privilege escalation risks {#privilege-escalation-risks}
+
+Within Kubernetes RBAC there are a number of privileges which, if granted, can allow a user or a service account
+to escalate their privileges in the cluster or affect systems outside the cluster.
+
+This section is intended to provide visibility of the areas where cluster operators
+should take care, to ensure that they do not inadvertently allow for more access to clusters than intended.
+
+### Listing secrets
+
+It is generally clear that allowing `get` access on Secrets will allow a user to read their contents.
+It is also important to note that `list` and `watch` access also effectively allow for users to reveal the Secret contents.
+For example, when a List response is returned (for example, via `kubectl get secrets -A -o yaml`), the response
+includes the contents of all Secrets.
+
+### Workload creation
+
+Users who are able to create workloads (either Pods, or
+[workload resources](/docs/concepts/workloads/controllers/) that manage Pods) will
+be able to gain access to the underlying node unless restrictions based on the Kubernetes
+[Pod Security Standards](/docs/concepts/security/pod-security-standards/) are in place.
+
+Users who can run privileged Pods can use that access to gain node access and potentially to
+further elevate their privileges. Where you do not fully trust a user or other principal
+with the ability to create suitably secure and isolated Pods, you should enforce either the
+**Baseline** or **Restricted** Pod Security Standard.
+You can use [Pod Security admission](/docs/concepts/security/pod-security-admission/)
+or other (third party) mechanisms to implement that enforcement.
+
+You can also use the deprecated [PodSecurityPolicy](/docs/concepts/policy/pod-security-policy/) mechanism
+to restrict users' abilities to create privileged Pods (N.B. PodSecurityPolicy is scheduled for removal
+in version 1.25).
+
+Creating a workload in a namespace also grants indirect access to Secrets in that namespace.
+Creating a pod in kube-system or a similarly privileged namespace can grant a user access to
+Secrets they would not have through RBAC directly.
+
+### Persistent volume creation
+
+As noted in the [PodSecurityPolicy](/docs/concepts/policy/pod-security-policy/#volumes-and-file-systems) documentation, access to create PersistentVolumes can allow for escalation of access to the underlying host. Where access to persistent storage is required trusted administrators should create
+PersistentVolumes, and constrained users should use PersistentVolumeClaims to access that storage.
+
+### Access to `proxy` subresource of Nodes
+
+Users with access to the proxy sub-resource of node objects have rights to the Kubelet API,
+which allows for command execution on every pod on the node(s) which they have rights to.
+This access bypasses audit logging and admission control, so care should be taken before
+granting rights to this resource.
+
+### Escalate verb
+
+Generally the RBAC system prevents users from creating clusterroles with more rights than
+they possess. The exception to this is the `escalate` verb. As noted in the [RBAC documentation](/docs/reference/access-authn-authz/rbac/#restrictions-on-role-creation-or-update),
+users with this right can effectively escalate their privileges.
+
+### Bind verb
+
+Similar to the `escalate` verb, granting users this right allows for bypass of Kubernetes
+in-built protections against privilege escalation, allowing users to create bindings to
+roles with rights they do not already have.
+
+### Impersonate verb
+
+This verb allows users to impersonate and gain the rights of other users in the cluster.
+Care should be taken when granting it, to ensure that excessive permissions cannot be gained
+via one of the impersonated accounts.
+
+### CSRs and certificate issuing
+
+The CSR API allows for users with `create` rights to CSRs and `update` rights on `certificatesigningrequests/approval`
+where the signer is `kubernetes.io/kube-apiserver-client` to create new client certificates
+which allow users to authenticate to the cluster. Those client certificates can have arbitrary
+names including duplicates of Kubernetes system components. This will effectively allow for privilege escalation.
+
+### Token request
+
+Users with `create` rights on `serviceaccounts/token` can create TokenRequests to issue
+tokens for existing service accounts.
+
+### Control admission webhooks
+
+Users with control over `validatingwebhookconfigurations` or `mutatingwebhookconfigurations`
+can control webhooks that can read any object admitted to the cluster, and in the case of
+mutating webhooks, also mutate admitted objects.
+
+
+## Kubernetes RBAC - denial of service risks {#denial-of-service-risks}
+
+### Object creation denial-of-service {#object-creation-dos}
+Users who have rights to create objects in a cluster may be able to create sufficient large
+objects to create a denial of service condition either based on the size or number of objects, as discussed in
+[etcd used by Kubernetes is vulnerable to OOM attack](https://github.com/kubernetes/kubernetes/issues/107325). This may be
+specifically relevant in multi-tenant clusters if semi-trusted or untrusted users
+are allowed limited access to a system.
+
+One option for mitigation of this issue would be to use [resource quotas](/docs/concepts/policy/resource-quotas/#object-count-quota)
+to limit the quantity of objects which can be created.
+
+## {{% heading "whatsnext" %}}
+* To learn more about RBAC, see the [RBAC documentation](/docs/reference/access-authn-authz/rbac/).
diff --git a/content/en/docs/concepts/security/windows-security.md b/content/en/docs/concepts/security/windows-security.md
new file mode 100644
index 0000000000..2126bdddaa
--- /dev/null
+++ b/content/en/docs/concepts/security/windows-security.md
@@ -0,0 +1,55 @@
+---
+reviewers:
+- jayunit100
+- jsturtevant
+- marosset
+- perithompson
+title: Security For Windows Nodes
+content_type: concept
+weight: 75
+---
+
+
+
+This page describes security considerations and best practices specific to the Windows operating system.
+
+
+
+## Protection for Secret data on nodes
+
+On Windows, data from Secrets are written out in clear text onto the node's local
+storage (as compared to using tmpfs / in-memory filesystems on Linux). As a cluster
+operator, you should take both of the following additional measures:
+
+1. Use file ACLs to secure the Secrets' file location.
+1. Apply volume-level encryption using [BitLocker](https://docs.microsoft.com/windows/security/information-protection/bitlocker/bitlocker-how-to-deploy-on-windows-server).
+
+## Container users
+
+[RunAsUsername](/docs/tasks/configure-pod-container/configure-runasusername)
+can be specified for Windows Pods or containers to execute the container
+processes as specific user. This is roughly equivalent to
+[RunAsUser](/docs/concepts/policy/pod-security-policy/#users-and-groups).
+
+Windows containers offer two default user accounts, ContainerUser and ContainerAdministrator.
+The differences between these two user accounts are covered in
+[When to use ContainerAdmin and ContainerUser user accounts](https://docs.microsoft.com/virtualization/windowscontainers/manage-containers/container-security#when-to-use-containeradmin-and-containeruser-user-accounts) within Microsoft's _Secure Windows containers_ documentation.
+
+Local users can be added to container images during the container build process.
+
+{{< note >}}
+
+* [Nano Server](https://hub.docker.com/_/microsoft-windows-nanoserver) based images run as `ContainerUser` by default
+* [Server Core](https://hub.docker.com/_/microsoft-windows-servercore) based images run as `ContainerAdministrator` by default
+
+{{< /note >}}
+
+Windows containers can also run as Active Directory identities by utilizing [Group Managed Service Accounts](/docs/tasks/configure-pod-container/configure-gmsa/)
+
+## Pod-level security isolation
+
+Linux-specific pod security context mechanisms (such as SELinux, AppArmor, Seccomp, or custom
+POSIX capabilities) are not supported on Windows nodes.
+
+Privileged containers are [not supported](/docs/concepts/windows/intro/#compatibility-v1-pod-spec-containers-securitycontext) on Windows.
+Instead [HostProcess containers](/docs/tasks/configure-pod-container/create-hostprocess-pod) can be used on Windows to perform many of the tasks performed by privileged containers on Linux.
diff --git a/content/en/docs/concepts/services-networking/_index.md b/content/en/docs/concepts/services-networking/_index.md
index ab1b784658..b4f7861075 100644
--- a/content/en/docs/concepts/services-networking/_index.md
+++ b/content/en/docs/concepts/services-networking/_index.md
@@ -7,26 +7,25 @@ description: >
## The Kubernetes network model
-Every [`Pod`](/docs/concepts/workloads/pods/) gets its own IP address.
+Every [`Pod`](/docs/concepts/workloads/pods/) in a cluster gets its own unique cluster-wide IP address.
This means you do not need to explicitly create links between `Pods` and you
almost never need to deal with mapping container ports to host ports.
This creates a clean, backwards-compatible model where `Pods` can be treated
much like VMs or physical hosts from the perspectives of port allocation,
-naming, service discovery, [load balancing](/docs/concepts/services-networking/ingress/#load-balancing), application configuration,
-and migration.
+naming, service discovery, [load balancing](/docs/concepts/services-networking/ingress/#load-balancing),
+application configuration, and migration.
Kubernetes imposes the following fundamental requirements on any networking
implementation (barring any intentional network segmentation policies):
- * pods on a [node](/docs/concepts/architecture/nodes/) can communicate with all pods on all nodes without NAT
+ * pods can communicate with all other pods on any other [node](/docs/concepts/architecture/nodes/)
+ without NAT
* agents on a node (e.g. system daemons, kubelet) can communicate with all
pods on that node
Note: For those platforms that support `Pods` running in the host network (e.g.
-Linux):
-
- * pods in the host network of a node can communicate with all pods on all
- nodes without NAT
+Linux), when pods are attached to the host network of a node they can still communicate
+with all pods on all nodes without NAT.
This model is not only less complex overall, but it is principally compatible
with the desire for Kubernetes to enable low-friction porting of apps from VMs
diff --git a/content/en/docs/concepts/services-networking/dns-pod-service.md b/content/en/docs/concepts/services-networking/dns-pod-service.md
index 9ca11a3457..939269f8ec 100644
--- a/content/en/docs/concepts/services-networking/dns-pod-service.md
+++ b/content/en/docs/concepts/services-networking/dns-pod-service.md
@@ -8,8 +8,8 @@ weight: 20
---
-Kubernetes creates DNS records for services and pods. You can contact
-services with consistent DNS names instead of IP addresses.
+Kubernetes creates DNS records for Services and Pods. You can contact
+Services with consistent DNS names instead of IP addresses.
@@ -25,20 +25,20 @@ Pod's own namespace and the cluster's default domain.
### Namespaces of Services
-A DNS query may return different results based on the namespace of the pod making
-it. DNS queries that don't specify a namespace are limited to the pod's
-namespace. Access services in other namespaces by specifying it in the DNS query.
+A DNS query may return different results based on the namespace of the Pod making
+it. DNS queries that don't specify a namespace are limited to the Pod's
+namespace. Access Services in other namespaces by specifying it in the DNS query.
-For example, consider a pod in a `test` namespace. A `data` service is in
+For example, consider a Pod in a `test` namespace. A `data` Service is in
the `prod` namespace.
-A query for `data` returns no results, because it uses the pod's `test` namespace.
+A query for `data` returns no results, because it uses the Pod's `test` namespace.
A query for `data.prod` returns the intended result, because it specifies the
namespace.
-DNS queries may be expanded using the pod's `/etc/resolv.conf`. Kubelet
-sets this file for each pod. For example, a query for just `data` may be
+DNS queries may be expanded using the Pod's `/etc/resolv.conf`. Kubelet
+sets this file for each Pod. For example, a query for just `data` may be
expanded to `data.test.svc.cluster.local`. The values of the `search` option
are used to expand queries. To learn more about DNS queries, see
[the `resolv.conf` manual page.](https://www.man7.org/linux/man-pages/man5/resolv.conf.5.html)
@@ -49,7 +49,7 @@ search .svc.cluster.local svc.cluster.local cluster.local
options ndots:5
```
-In summary, a pod in the _test_ namespace can successfully resolve either
+In summary, a Pod in the _test_ namespace can successfully resolve either
`data.prod` or `data.prod.svc.cluster.local`.
### DNS Records
@@ -70,14 +70,14 @@ For more up-to-date specification, see
### A/AAAA records
"Normal" (not headless) Services are assigned a DNS A or AAAA record,
-depending on the IP family of the service, for a name of the form
+depending on the IP family of the Service, for a name of the form
`my-svc.my-namespace.svc.cluster-domain.example`. This resolves to the cluster IP
of the Service.
"Headless" (without a cluster IP) Services are also assigned a DNS A or AAAA record,
-depending on the IP family of the service, for a name of the form
+depending on the IP family of the Service, for a name of the form
`my-svc.my-namespace.svc.cluster-domain.example`. Unlike normal
-Services, this resolves to the set of IPs of the pods selected by the Service.
+Services, this resolves to the set of IPs of the Pods selected by the Service.
Clients are expected to consume the set or else use standard round-robin
selection from the set.
@@ -87,36 +87,36 @@ SRV Records are created for named ports that are part of normal or [Headless
Services](/docs/concepts/services-networking/service/#headless-services).
For each named port, the SRV record would have the form
`_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster-domain.example`.
-For a regular service, this resolves to the port number and the domain name:
+For a regular Service, this resolves to the port number and the domain name:
`my-svc.my-namespace.svc.cluster-domain.example`.
-For a headless service, this resolves to multiple answers, one for each pod
-that is backing the service, and contains the port number and the domain name of the pod
+For a headless Service, this resolves to multiple answers, one for each Pod
+that is backing the Service, and contains the port number and the domain name of the Pod
of the form `auto-generated-name.my-svc.my-namespace.svc.cluster-domain.example`.
## Pods
### A/AAAA records
-In general a pod has the following DNS resolution:
+In general a Pod has the following DNS resolution:
`pod-ip-address.my-namespace.pod.cluster-domain.example`.
-For example, if a pod in the `default` namespace has the IP address 172.17.0.3,
+For example, if a Pod in the `default` namespace has the IP address 172.17.0.3,
and the domain name for your cluster is `cluster.local`, then the Pod has a DNS name:
`172-17-0-3.default.pod.cluster.local`.
-Any pods exposed by a Service have the following DNS resolution available:
+Any Pods exposed by a Service have the following DNS resolution available:
`pod-ip-address.service-name.my-namespace.svc.cluster-domain.example`.
### Pod's hostname and subdomain fields
-Currently when a pod is created, its hostname is the Pod's `metadata.name` value.
+Currently when a Pod is created, its hostname is the Pod's `metadata.name` value.
The Pod spec has an optional `hostname` field, which can be used to specify the
Pod's hostname. When specified, it takes precedence over the Pod's name to be
-the hostname of the pod. For example, given a Pod with `hostname` set to
+the hostname of the Pod. For example, given a Pod with `hostname` set to
"`my-host`", the Pod will have its hostname set to "`my-host`".
The Pod spec also has an optional `subdomain` field which can be used to specify
@@ -173,14 +173,14 @@ spec:
name: busybox
```
-If there exists a headless service in the same namespace as the pod and with
+If there exists a headless Service in the same namespace as the Pod and with
the same name as the subdomain, the cluster's DNS Server also returns an A or AAAA
record for the Pod's fully qualified hostname.
For example, given a Pod with the hostname set to "`busybox-1`" and the subdomain set to
"`default-subdomain`", and a headless Service named "`default-subdomain`" in
-the same namespace, the pod will see its own FQDN as
+the same namespace, the Pod will see its own FQDN as
"`busybox-1.default-subdomain.my-namespace.svc.cluster-domain.example`". DNS serves an
-A or AAAA record at that name, pointing to the Pod's IP. Both pods "`busybox1`" and
+A or AAAA record at that name, pointing to the Pod's IP. Both Pods "`busybox1`" and
"`busybox2`" can have their distinct A or AAAA records.
The Endpoints object can specify the `hostname` for any endpoint addresses,
@@ -189,7 +189,7 @@ along with its IP.
{{< note >}}
Because A or AAAA records are not created for Pod names, `hostname` is required for the Pod's A or AAAA
record to be created. A Pod with no `hostname` but with `subdomain` will only create the
-A or AAAA record for the headless service (`default-subdomain.my-namespace.svc.cluster-domain.example`),
+A or AAAA record for the headless Service (`default-subdomain.my-namespace.svc.cluster-domain.example`),
pointing to the Pod's IP address. Also, Pod needs to become ready in order to have a
record unless `publishNotReadyAddresses=True` is set on the Service.
{{< /note >}}
@@ -205,17 +205,17 @@ When you set `setHostnameAsFQDN: true` in the Pod spec, the kubelet writes the P
{{< note >}}
In Linux, the hostname field of the kernel (the `nodename` field of `struct utsname`) is limited to 64 characters.
-If a Pod enables this feature and its FQDN is longer than 64 character, it will fail to start. The Pod will remain in `Pending` status (`ContainerCreating` as seen by `kubectl`) generating error events, such as Failed to construct FQDN from pod hostname and cluster domain, FQDN `long-FQDN` is too long (64 characters is the max, 70 characters requested). One way of improving user experience for this scenario is to create an [admission webhook controller](/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks) to control FQDN size when users create top level objects, for example, Deployment.
+If a Pod enables this feature and its FQDN is longer than 64 character, it will fail to start. The Pod will remain in `Pending` status (`ContainerCreating` as seen by `kubectl`) generating error events, such as Failed to construct FQDN from Pod hostname and cluster domain, FQDN `long-FQDN` is too long (64 characters is the max, 70 characters requested). One way of improving user experience for this scenario is to create an [admission webhook controller](/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks) to control FQDN size when users create top level objects, for example, Deployment.
{{< /note >}}
### Pod's DNS Policy
-DNS policies can be set on a per-pod basis. Currently Kubernetes supports the
-following pod-specific DNS policies. These policies are specified in the
+DNS policies can be set on a per-Pod basis. Currently Kubernetes supports the
+following Pod-specific DNS policies. These policies are specified in the
`dnsPolicy` field of a Pod Spec.
- "`Default`": The Pod inherits the name resolution configuration from the node
- that the pods run on.
+ that the Pods run on.
See [related discussion](/docs/tasks/administer-cluster/dns-custom-nameservers)
for more details.
- "`ClusterFirst`": Any DNS query that does not match the configured cluster
@@ -226,6 +226,7 @@ following pod-specific DNS policies. These policies are specified in the
for details on how DNS queries are handled in those cases.
- "`ClusterFirstWithHostNet`": For Pods running with hostNetwork, you should
explicitly set its DNS policy "`ClusterFirstWithHostNet`".
+ - Note: This is not supported on Windows. See [below](#dns-windows) for details
- "`None`": It allows a Pod to ignore DNS settings from the Kubernetes
environment. All DNS settings are supposed to be provided using the
`dnsConfig` field in the Pod Spec.
@@ -306,7 +307,7 @@ For IPv6 setup, search path and name server should be setup like this:
kubectl exec -it dns-example -- cat /etc/resolv.conf
```
The output is similar to this:
-```shell
+```
nameserver fd00:79:30::a
search default.svc.cluster-domain.example svc.cluster-domain.example cluster-domain.example
options ndots:5
@@ -323,8 +324,25 @@ If the feature gate `ExpandedDNSConfig` is enabled for the kube-apiserver and
the kubelet, it is allowed for Kubernetes to have at most 32 search domains and
a list of search domains of up to 2048 characters.
-## {{% heading "whatsnext" %}}
+## DNS resolution on Windows nodes {#dns-windows}
+- ClusterFirstWithHostNet is not supported for Pods that run on Windows nodes.
+ Windows treats all names with a `.` as a FQDN and skips FQDN resolution.
+- On Windows, there are multiple DNS resolvers that can be used. As these come with
+ slightly different behaviors, using the
+ [`Resolve-DNSName`](https://docs.microsoft.com/powershell/module/dnsclient/resolve-dnsname)
+ powershell cmdlet for name query resolutions is recommended.
+- On Linux, you have a DNS suffix list, which is used after resolution of a name as fully
+ qualified has failed.
+ On Windows, you can only have 1 DNS suffix, which is the DNS suffix associated with that
+ Pod's namespace (example: `mydns.svc.cluster.local`). Windows can resolve FQDNs, Services,
+ or network name which can be resolved with this single suffix. For example, a Pod spawned
+ in the `default` namespace, will have the DNS suffix `default.svc.cluster.local`.
+ Inside a Windows Pod, you can resolve both `kubernetes.default.svc.cluster.local`
+ and `kubernetes`, but not the partially qualified names (`kubernetes.default` or
+ `kubernetes.default.svc`).
+
+## {{% heading "whatsnext" %}}
For guidance on administering DNS configurations, check
[Configure DNS Service](/docs/tasks/administer-cluster/dns-custom-nameservers/)
diff --git a/content/en/docs/concepts/services-networking/dual-stack.md b/content/en/docs/concepts/services-networking/dual-stack.md
index 262fe12d29..5561f03d6b 100644
--- a/content/en/docs/concepts/services-networking/dual-stack.md
+++ b/content/en/docs/concepts/services-networking/dual-stack.md
@@ -43,7 +43,7 @@ The following prerequisites are needed in order to utilize IPv4/IPv6 dual-stack
Kubernetes versions, refer to the documentation for that version
of Kubernetes.
* Provider support for dual-stack networking (Cloud provider or otherwise must be able to provide Kubernetes nodes with routable IPv4/IPv6 network interfaces)
- * A network plugin that supports dual-stack (such as Kubenet or Calico)
+ * A [network plugin](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) that supports dual-stack networking.
## Configure IPv4/IPv6 dual-stack
@@ -239,6 +239,21 @@ If you want to enable egress traffic in order to reach off-cluster destinations
Ensure your {{< glossary_tooltip text="CNI" term_id="cni" >}} provider supports IPv6.
{{< /note >}}
+## Windows support
+
+Kubernetes on Windows does not support single-stack "IPv6-only" networking. However,
+dual-stack IPv4/IPv6 networking for pods and nodes with single-family services
+is supported.
+
+You can use IPv4/IPv6 dual-stack networking with `l2bridge` networks.
+
+{{< note >}}
+Overlay (VXLAN) networks on Windows **do not** support dual-stack networking.
+{{< /note >}}
+
+You can read more about the different network modes for Windows within the
+[Networking on Windows](/docs/concepts/services-networking/windows-networking#network-modes) topic.
+
## {{% heading "whatsnext" %}}
diff --git a/content/en/docs/concepts/services-networking/ingress.md b/content/en/docs/concepts/services-networking/ingress.md
index e1ca55ab80..aebcc800c6 100644
--- a/content/en/docs/concepts/services-networking/ingress.md
+++ b/content/en/docs/concepts/services-networking/ingress.md
@@ -30,23 +30,8 @@ For clarity, this guide defines the following terms:
Traffic routing is controlled by rules defined on the Ingress resource.
Here is a simple example where an Ingress sends all its traffic to one Service:
-{{< mermaid >}}
-graph LR;
- client([client])-. Ingress-managed load balancer .->ingress[Ingress];
- ingress-->|routing rule|service[Service];
- subgraph cluster
- ingress;
- service-->pod1[Pod];
- service-->pod2[Pod];
- end
- classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000;
- classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff;
- classDef cluster fill:#fff,stroke:#bbb,stroke-width:2px,color:#326ce5;
- class ingress,service,pod1,pod2 k8s;
- class client plain;
- class cluster cluster;
-{{ mermaid >}}
+{{< figure src="/docs/images/ingress.svg" alt="ingress-diagram" class="diagram-large" caption="Figure. Ingress" link="https://mermaid.live/edit#pako:eNqNkstuwyAQRX8F4U0r2VHqPlSRKqt0UamLqlnaWWAYJygYLB59KMm_Fxcix-qmGwbuXA7DwAEzzQETXKutof0Ovb4vaoUQkwKUu6pi3FwXM_QSHGBt0VFFt8DRU2OWSGrKUUMlVQwMmhVLEV1Vcm9-aUksiuXRaO_CEhkv4WjBfAgG1TrGaLa-iaUw6a0DcwGI-WgOsF7zm-pN881fvRx1UDzeiFq7ghb1kgqFWiElyTjnuXVG74FkbdumefEpuNuRu_4rZ1pqQ7L5fL6YQPaPNiFuywcG9_-ihNyUkm6YSONWkjVNM8WUIyaeOJLO3clTB_KhL8NQDmVe-OJjxgZM5FhFiiFTK5zjDkxHBQ9_4zB4a-x20EGNSZhyaKmXrg7f5hSsvufUwTMXThtMWiot5Jh6p9ffimHijIezaSVoeN0uiqcfMJvf7w" >}}
An Ingress may 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.
@@ -74,7 +59,7 @@ A minimal Ingress resource example:
{{< codenew file="service/networking/minimal-ingress.yaml" >}}
-As with all other Kubernetes resources, an Ingress needs `apiVersion`, `kind`, and `metadata` fields.
+An Ingress needs `apiVersion`, `kind`, `metadata` and `spec` fields.
The name of an Ingress object must be a valid
[DNS subdomain name](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names).
For general information about working with config files, see [deploying applications](/docs/tasks/run-application/run-stateless-application-deployment/), [configuring containers](/docs/tasks/configure-pod-container/configure-pod-configmap/), [managing resources](/docs/concepts/cluster-administration/manage-deployment/).
@@ -398,25 +383,8 @@ A fanout configuration routes traffic from a single IP address to more than one
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:
-{{< mermaid >}}
-graph LR;
- client([client])-. Ingress-managed load balancer .->ingress[Ingress, 178.91.123.132];
- ingress-->|/foo|service1[Service service1:4200];
- ingress-->|/bar|service2[Service service2:8080];
- subgraph cluster
- ingress;
- service1-->pod1[Pod];
- service1-->pod2[Pod];
- service2-->pod3[Pod];
- service2-->pod4[Pod];
- end
- classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000;
- classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff;
- classDef cluster fill:#fff,stroke:#bbb,stroke-width:2px,color:#326ce5;
- class ingress,service1,service2,pod1,pod2,pod3,pod4 k8s;
- class client plain;
- class cluster cluster;
-{{ mermaid >}}
+{{< figure src="/docs/images/ingressFanOut.svg" alt="ingress-fanout-diagram" class="diagram-large" caption="Figure. Ingress Fan Out" link="https://mermaid.live/edit#pako:eNqNUslOwzAQ_RXLvYCUhMQpUFzUUzkgcUBwbHpw4klr4diR7bCo8O8k2FFbFomLPZq3jP00O1xpDpjijWHtFt09zAuFUCUFKHey8vf6NE7QrdoYsDZumGIb4Oi6NAskNeOoZJKpCgxK4oXwrFVgRyi7nCVXWZKRPMlysv5yD6Q4Xryf1Vq_WzDPooJs9egLNDbolKTpT03JzKgh3zWEztJZ0Niu9L-qZGcdmAMfj4cxvWmreba613z9C0B-AMQD-V_AdA-A4j5QZu0SatRKJhSqhZR0wjmPrDP6CeikrutQxy-Cuy2dtq9RpaU2dJKm6fzI5Glmg0VOLio4_5dLjx27hFSC015KJ2VZHtuQvY2fuHcaE43G0MaCREOow_FV5cMxHZ5-oPX75UM5avuXhXuOI9yAaZjg_aLuBl6B3RYaKDDtSw4166QrcKE-emrXcubghgunDaY1kxYizDqnH99UhakzHYykpWD9hjS--fEJoIELqQ" >}}
+
would require an Ingress such as:
@@ -460,25 +428,7 @@ you are using, you may need to create a default-http-backend
Name-based virtual hosts support routing HTTP traffic to multiple host names at the same IP address.
-{{< mermaid >}}
-graph LR;
- client([client])-. Ingress-managed load balancer .->ingress[Ingress, 178.91.123.132];
- ingress-->|Host: foo.bar.com|service1[Service service1:80];
- ingress-->|Host: bar.foo.com|service2[Service service2:80];
- subgraph cluster
- ingress;
- service1-->pod1[Pod];
- service1-->pod2[Pod];
- service2-->pod3[Pod];
- service2-->pod4[Pod];
- end
- classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000;
- classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff;
- classDef cluster fill:#fff,stroke:#bbb,stroke-width:2px,color:#326ce5;
- class ingress,service1,service2,pod1,pod2,pod3,pod4 k8s;
- class client plain;
- class cluster cluster;
-{{ mermaid >}}
+{{< figure src="/docs/images/ingressNameBased.svg" alt="ingress-namebase-diagram" class="diagram-large" caption="Figure. Ingress Name Based Virtual hosting" link="https://mermaid.live/edit#pako:eNqNkl9PwyAUxb8KYS-atM1Kp05m9qSJJj4Y97jugcLtRqTQAPVPdN_dVlq3qUt8gZt7zvkBN7xjbgRgiteW1Rt0_zjLNUJcSdD-ZBn21WmcoDu9tuBcXDHN1iDQVWHnSBkmUMEU0xwsSuK5DK5l745QejFNLtMkJVmSZmT1Re9NcTz_uDXOU1QakxTMJtxUHw7ss-SQLhehQEODTsdH4l20Q-zFyc84-Y67pghv5apxHuweMuj9eS2_NiJdPhix-kMgvwQShOyYMNkJoEUYM3PuGkpUKyY1KqVSdCSEiJy35gnoqCzLvo5fpPAbOqlfI26UsXQ0Ho9nB5CnqesRGTnncPYvSqsdUvqp9KRdlI6KojjEkB0mnLgjDRONhqENBYm6oXbLV5V1y6S7-l42_LowlIN2uFm_twqOcAW2YlK0H_i9c-bYb6CCHNO2FFCyRvkc53rbWptaMA83QnpjMS2ZchBh1nizeNMcU28bGEzXkrV_pArN7Sc0rBTu" >}}
The following Ingress tells the backing load balancer to route requests based on
diff --git a/content/en/docs/concepts/services-networking/network-policies.md b/content/en/docs/concepts/services-networking/network-policies.md
index 884cfc960d..63eaebc3c5 100644
--- a/content/en/docs/concepts/services-networking/network-policies.md
+++ b/content/en/docs/concepts/services-networking/network-policies.md
@@ -45,42 +45,7 @@ See the [NetworkPolicy](/docs/reference/generated/kubernetes-api/{{< param "vers
An example NetworkPolicy might look like this:
-```yaml
-apiVersion: networking.k8s.io/v1
-kind: NetworkPolicy
-metadata:
- name: test-network-policy
- namespace: default
-spec:
- podSelector:
- matchLabels:
- role: db
- policyTypes:
- - Ingress
- - Egress
- ingress:
- - from:
- - ipBlock:
- cidr: 172.17.0.0/16
- except:
- - 172.17.1.0/24
- - namespaceSelector:
- matchLabels:
- project: myproject
- - podSelector:
- matchLabels:
- role: frontend
- ports:
- - protocol: TCP
- port: 6379
- egress:
- - to:
- - ipBlock:
- cidr: 10.0.0.0/24
- ports:
- - protocol: TCP
- port: 5978
-```
+{{< codenew file="service/networking/networkpolicy.yaml" >}}
{{< note >}}
POSTing this to the API server for your cluster will have no effect unless your chosen networking solution supports network policy.
@@ -89,7 +54,7 @@ POSTing this to the API server for your cluster will have no effect unless your
__Mandatory Fields__: As with all other Kubernetes config, a NetworkPolicy
needs `apiVersion`, `kind`, and `metadata` fields. For general information
about working with config files, see
-[Configure Containers Using a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/),
+[Configure a Pod to Use a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/),
and [Object Management](/docs/concepts/overview/working-with-objects/object-management).
__spec__: NetworkPolicy [spec](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status) has all the information needed to define a particular network policy in the given namespace.
diff --git a/content/en/docs/concepts/services-networking/service.md b/content/en/docs/concepts/services-networking/service.md
index fa201c0e1b..3ca1bc8a26 100644
--- a/content/en/docs/concepts/services-networking/service.md
+++ b/content/en/docs/concepts/services-networking/service.md
@@ -122,7 +122,7 @@ metadata:
spec:
containers:
- name: nginx
- image: nginx:11.14.2
+ image: nginx:stable
ports:
- containerPort: 80
name: http-web-svc
@@ -192,6 +192,7 @@ where it's running, by adding an Endpoints object manually:
apiVersion: v1
kind: Endpoints
metadata:
+ # the name here should match the name of the Service
name: my-service
subsets:
- addresses:
@@ -203,6 +204,10 @@ subsets:
The name of the Endpoints object must be a valid
[DNS subdomain name](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names).
+When you create an [Endpoints](docs/reference/kubernetes-api/service-resources/endpoints-v1/)
+object for a Service, you set the name of the new object to be the same as that
+of the Service.
+
{{< note >}}
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).
@@ -394,6 +399,10 @@ 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).
+{{< note >}}
+On Windows, setting the maximum session sticky time for Services is not supported.
+{{< /note >}}
+
## Multi-Port Services
For some Services, you need to expose more than one port.
@@ -447,7 +456,7 @@ server will return a 422 HTTP status code to indicate that there's a problem.
You can set the `spec.externalTrafficPolicy` field to control how traffic from external sources is routed.
Valid values are `Cluster` and `Local`. Set the field to `Cluster` to route external traffic to all ready endpoints
-and `Local` to only route to ready node-local endpoints. If the traffic policy is `Local` and there are are no node-local
+and `Local` to only route to ready node-local endpoints. If the traffic policy is `Local` and there are no node-local
endpoints, the kube-proxy does not forward any traffic for the relevant Service.
{{< note >}}
@@ -701,23 +710,25 @@ Specify the assigned IP address as loadBalancerIP. Ensure that you have updated
#### Load balancers with mixed protocol types
-{{< feature-state for_k8s_version="v1.20" state="alpha" >}}
+{{< feature-state for_k8s_version="v1.24" state="beta" >}}
By default, for LoadBalancer type of Services, when there is more than one port defined, all
ports must have the same protocol, and the protocol must be one which is supported
by the cloud provider.
-If the feature gate `MixedProtocolLBService` is enabled for the kube-apiserver it is allowed to use different protocols when there is more than one port defined.
+The feature gate `MixedProtocolLBService` (enabled by default for the kube-apiserver as of v1.24) allows the use of
+different protocols for LoadBalancer type of Services, when there is more than one port defined.
{{< note >}}
-The set of protocols that can be used for LoadBalancer type of Services is still defined by the cloud provider.
+The set of protocols that can be used for LoadBalancer type of Services is still defined by the cloud provider. If a
+cloud provider does not support mixed protocols they will provide only a single protocol.
{{< /note >}}
#### Disabling load balancer NodePort allocation {#load-balancer-nodeport-allocation}
-{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
You can optionally disable node port allocation for a Service of `type=LoadBalancer`, by setting
the field `spec.allocateLoadBalancerNodePorts` to `false`. This should only be used for load balancer implementations
@@ -725,20 +736,12 @@ that route traffic directly to pods as opposed to using node ports. By default,
is `true` and type LoadBalancer Services will continue to allocate node ports. If `spec.allocateLoadBalancerNodePorts`
is set to `false` on an existing Service with allocated node ports, those node ports will **not** be de-allocated automatically.
You must explicitly remove the `nodePorts` entry in every Service port to de-allocate those node ports.
-Your cluster must have the `ServiceLBNodePortControl`
-[feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
-enabled to use this field.
-For Kubernetes v{{< skew currentVersion >}}, this feature gate is enabled by default,
-and you can use the `spec.allocateLoadBalancerNodePorts` field. For clusters running
-other versions of Kubernetes, check the documentation for that release.
#### Specifying class of load balancer implementation {#load-balancer-class}
-{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
`spec.loadBalancerClass` enables you to use a load balancer implementation other than the cloud provider default.
-Your cluster must have the `ServiceLoadBalancerClass` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) enabled to use this field. For Kubernetes v{{< skew currentVersion >}}, this feature gate is enabled by default. For clusters running
-other versions of Kubernetes, check the documentation for that release.
By default, `spec.loadBalancerClass` is `nil` and a `LoadBalancer` type of Service uses
the cloud provider's default load balancer implementation if the cluster is configured with
a cloud provider using the `--cloud-provider` component flag.
@@ -1254,7 +1257,8 @@ someone else's choice. That is an isolation failure.
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.
+Service its own IP address from within the `service-cluster-ip-range`
+CIDR range that is configured for the API server.
To ensure each Service receives a unique IP, an internal allocator atomically
updates a global allocation map in {{< glossary_tooltip term_id="etcd" >}}
@@ -1268,6 +1272,25 @@ in-memory locking). Kubernetes also uses controllers to check for invalid
assignments (eg due to administrator intervention) and for cleaning up allocated
IP addresses that are no longer used by any Services.
+#### IP address ranges for `type: ClusterIP` Services {#service-ip-static-sub-range}
+
+{{< feature-state for_k8s_version="v1.24" state="alpha" >}}
+However, there is a problem with this `ClusterIP` allocation strategy, because a user
+can also [choose their own address for the service](#choosing-your-own-ip-address).
+This could result in a conflict if the internal allocator selects the same IP address
+for another Service.
+
+If you enable the `ServiceIPStaticSubrange`
+[feature gate](/docs/reference/command-line-tools-reference/feature-gates/),
+the allocation strategy divides the `ClusterIP` range into two bands, based on
+the size of the configured `service-cluster-ip-range` by using the following formula
+`min(max(16, cidrSize / 16), 256)`, described as _never less than 16 or more than 256,
+with a graduated step function between them_. Dynamic IP allocations will be preferentially
+chosen from the upper band, reducing risks of conflicts with the IPs
+assigned from the lower band.
+This allows users to use the lower band of the `service-cluster-ip-range` for their
+Services with static IPs assigned with a very low risk of running into conflicts.
+
### Service IP addresses {#ips-and-vips}
Unlike Pod IP addresses, which actually route to a fixed destination,
diff --git a/content/en/docs/concepts/services-networking/windows-networking.md b/content/en/docs/concepts/services-networking/windows-networking.md
new file mode 100644
index 0000000000..6aa79f0a03
--- /dev/null
+++ b/content/en/docs/concepts/services-networking/windows-networking.md
@@ -0,0 +1,164 @@
+---
+reviewers:
+- aravindhp
+- jayunit100
+- jsturtevant
+- marosset
+title: Networking on Windows
+content_type: concept
+weight: 75
+---
+
+
+
+Kubernetes supports running nodes on either Linux or Windows. You can mix both kinds of node
+within a single cluster.
+This page provides an overview to networking specific to the Windows operating system.
+
+
+## Container networking on Windows {#networking}
+
+Networking for Windows containers is exposed through
+[CNI plugins](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/).
+Windows containers function similarly to virtual machines in regards to
+networking. Each container has a virtual network adapter (vNIC) which is connected
+to a Hyper-V virtual switch (vSwitch). The Host Networking Service (HNS) and the
+Host Compute Service (HCS) work together to create containers and attach container
+vNICs to networks. HCS is responsible for the management of containers whereas HNS
+is responsible for the management of networking resources such as:
+
+* Virtual networks (including creation of vSwitches)
+* Endpoints / vNICs
+* Namespaces
+* Policies including packet encapsulations, load-balancing rules, ACLs, and NAT rules.
+
+The Windows HNS and vSwitch implement namespacing and can
+create virtual NICs as needed for a pod or container. However, many configurations such
+as DNS, routes, and metrics are stored in the Windows registry database rather than as
+files inside `/etc`, which is how Linux stores those configurations. The Windows registry for the container
+is separate from that of the host, so concepts like mapping `/etc/resolv.conf` from
+the host into a container don't have the same effect they would on Linux. These must
+be configured using Windows APIs run in the context of that container. Therefore
+CNI implementations need to call the HNS instead of relying on file mappings to pass
+network details into the pod or container.
+
+## Network modes
+
+Windows supports five different networking drivers/modes: L2bridge, L2tunnel,
+Overlay (Beta), Transparent, and NAT. In a heterogeneous cluster with Windows and Linux
+worker nodes, you need to select a networking solution that is compatible on both
+Windows and Linux. The following table lists the out-of-tree plugins are supported on Windows,
+with recommendations on when to use each CNI:
+
+| Network Driver | Description | Container Packet Modifications | Network Plugins | Network Plugin Characteristics |
+| -------------- | ----------- | ------------------------------ | --------------- | ------------------------------ |
+| L2bridge | Containers are attached to an external vSwitch. Containers are attached to the underlay network, although the physical network doesn't need to learn the container MACs because they are rewritten on ingress/egress. | MAC is rewritten to host MAC, IP may be rewritten to host IP using HNS OutboundNAT policy. | [win-bridge](https://github.com/containernetworking/plugins/tree/master/plugins/main/windows/win-bridge), [Azure-CNI](https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md), Flannel host-gateway uses win-bridge | win-bridge uses L2bridge network mode, connects containers to the underlay of hosts, offering best performance. Requires user-defined routes (UDR) for inter-node connectivity. |
+| L2Tunnel | This is a special case of l2bridge, but only used on Azure. All packets are sent to the virtualization host where SDN policy is applied. | MAC rewritten, IP visible on the underlay network | [Azure-CNI](https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md) | Azure-CNI allows integration of containers with Azure vNET, and allows them to leverage the set of capabilities that [Azure Virtual Network provides](https://azure.microsoft.com/en-us/services/virtual-network/). For example, securely connect to Azure services or use Azure NSGs. See [azure-cni for some examples](https://docs.microsoft.com/azure/aks/concepts-network#azure-cni-advanced-networking) |
+| Overlay | Containers are given a vNIC connected to an external vSwitch. Each overlay network gets its own IP subnet, defined by a custom IP prefix.The overlay network driver uses VXLAN encapsulation. | Encapsulated with an outer header. | [win-overlay](https://github.com/containernetworking/plugins/tree/master/plugins/main/windows/win-overlay), Flannel VXLAN (uses win-overlay) | win-overlay should be used when virtual container networks are desired to be isolated from underlay of hosts (e.g. for security reasons). Allows for IPs to be re-used for different overlay networks (which have different VNID tags) if you are restricted on IPs in your datacenter. This option requires [KB4489899](https://support.microsoft.com/help/4489899) on Windows Server 2019. |
+| Transparent (special use case for [ovn-kubernetes](https://github.com/openvswitch/ovn-kubernetes)) | Requires an external vSwitch. Containers are attached to an external vSwitch which enables intra-pod communication via logical networks (logical switches and routers). | Packet is encapsulated either via [GENEVE](https://datatracker.ietf.org/doc/draft-gross-geneve/) or [STT](https://datatracker.ietf.org/doc/draft-davie-stt/) tunneling to reach pods which are not on the same host. Packets are forwarded or dropped via the tunnel metadata information supplied by the ovn network controller. NAT is done for north-south communication. | [ovn-kubernetes](https://github.com/openvswitch/ovn-kubernetes) | [Deploy via ansible](https://github.com/openvswitch/ovn-kubernetes/tree/master/contrib). Distributed ACLs can be applied via Kubernetes policies. IPAM support. Load-balancing can be achieved without kube-proxy. NATing is done without using iptables/netsh. |
+| NAT (*not used in Kubernetes*) | Containers are given a vNIC connected to an internal vSwitch. DNS/DHCP is provided using an internal component called [WinNAT](https://techcommunity.microsoft.com/t5/virtualization/windows-nat-winnat-capabilities-and-limitations/ba-p/382303) | MAC and IP is rewritten to host MAC/IP. | [nat](https://github.com/Microsoft/windows-container-networking/tree/master/plugins/nat) | Included here for completeness |
+
+As outlined above, the [Flannel](https://github.com/coreos/flannel)
+[CNI plugin](https://github.com/flannel-io/cni-plugin)
+is also [supported](https://github.com/flannel-io/cni-plugin#windows-support-experimental) on Windows via the
+[VXLAN network backend](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan) (**Beta support** ; delegates to win-overlay)
+and [host-gateway network backend](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) (stable support; delegates to win-bridge).
+
+This plugin supports delegating to one of the reference CNI plugins (win-overlay,
+win-bridge), to work in conjunction with Flannel daemon on Windows (Flanneld) for
+automatic node subnet lease assignment and HNS network creation. This plugin reads
+in its own configuration file (cni.conf), and aggregates it with the environment
+variables from the FlannelD generated subnet.env file. It then delegates to one of
+the reference CNI plugins for network plumbing, and sends the correct configuration
+containing the node-assigned subnet to the IPAM plugin (for example: `host-local`).
+
+For Node, Pod, and Service objects, the following network flows are supported for
+TCP/UDP traffic:
+
+* Pod → Pod (IP)
+* Pod → Pod (Name)
+* Pod → Service (Cluster IP)
+* Pod → Service (PQDN, but only if there are no ".")
+* Pod → Service (FQDN)
+* Pod → external (IP)
+* Pod → external (DNS)
+* Node → Pod
+* Pod → Node
+
+## IP address management (IPAM) {#ipam}
+
+The following IPAM options are supported on Windows:
+
+* [host-local](https://github.com/containernetworking/plugins/tree/master/plugins/ipam/host-local)
+* [azure-vnet-ipam](https://github.com/Azure/azure-container-networking/blob/master/docs/ipam.md) (for azure-cni only)
+* [Windows Server IPAM](https://docs.microsoft.com/windows-server/networking/technologies/ipam/ipam-top) (fallback option if no IPAM is set)
+
+## Load balancing and Services
+
+A Kubernetes {{< glossary_tooltip text="Service" term_id="service" >}} is an abstraction
+that defines a logical set of Pods and a means to access them over a network.
+In a cluster that includes Windows nodes, you can use the following types of Service:
+
+* `NodePort`
+* `ClusterIP`
+* `LoadBalancer`
+* `ExternalName`
+
+Windows container networking differs in some important ways from Linux networking.
+The [Microsoft documentation for Windows Container Networking](https://docs.microsoft.com/en-us/virtualization/windowscontainers/container-networking/architecture)
+provides additional details and background.
+
+On Windows, you can use the following settings to configure Services and load
+balancing behavior:
+
+{{< table caption="Windows Service Settings" >}}
+| Feature | Description | Minimum Supported Windows OS build | How to enable |
+| ------- | ----------- | -------------------------- | ------------- |
+| Session affinity | Ensures that connections from a particular client are passed to the same Pod each time. | Windows Server 2022 | Set `service.spec.sessionAffinity` to "ClientIP" |
+| Direct Server Return (DSR) | Load balancing mode where the IP address fixups and the LBNAT occurs at the container vSwitch port directly; service traffic arrives with the source IP set as the originating pod IP. | Windows Server 2019 | Set the following flags in kube-proxy: `--feature-gates="WinDSR=true" --enable-dsr=true` |
+| Preserve-Destination | Skips DNAT of service traffic, thereby preserving the virtual IP of the target service in packets reaching the backend Pod. Also disables node-node forwarding. | Windows Server, version 1903 | Set `"preserve-destination": "true"` in service annotations and enable DSR in kube-proxy. |
+| IPv4/IPv6 dual-stack networking | Native IPv4-to-IPv4 in parallel with IPv6-to-IPv6 communications to, from, and within a cluster | Windows Server 2019 | See [IPv4/IPv6 dual-stack](#ipv4ipv6-dual-stack) |
+| Client IP preservation | Ensures that source IP of incoming ingress traffic gets preserved. Also disables node-node forwarding. | Windows Server 2019 | Set `service.spec.externalTrafficPolicy` to "Local" and enable DSR in kube-proxy |
+{{< /table >}}
+
+{{< warning >}}
+There are known issue with NodePort Services on overlay networking, if the destination node is running Windows Server 2022.
+To avoid the issue entirely, you can configure the service with `externalTrafficPolicy: Local`.
+
+There are known issues with Pod to Pod connectivity on l2bridge network on Windows Server 2022 with KB5005619 or higher installed.
+To workaround the issue and restore Pod to Pod connectivity, you can disable the WinDSR feature in kube-proxy.
+
+These issues require OS fixes.
+Please follow https://github.com/microsoft/Windows-Containers/issues/204 for updates.
+{{< /warning >}}
+
+## Limitations
+
+The following networking functionality is _not_ supported on Windows nodes:
+
+* Host networking mode
+* Local NodePort access from the node itself (works for other nodes or external clients)
+* More than 64 backend pods (or unique destination addresses) for a single Service
+* IPv6 communication between Windows pods connected to overlay networks
+* Local Traffic Policy in non-DSR mode
+* Outbound communication using the ICMP protocol via the `win-overlay`, `win-bridge`, or using the Azure-CNI plugin.\
+ Specifically, the Windows data plane ([VFP](https://www.microsoft.com/research/project/azure-virtual-filtering-platform/))
+ doesn't support ICMP packet transpositions, and this means:
+ * ICMP packets directed to destinations within the same network (such as pod to pod communication via ping)
+ work as expected;
+ * TCP/UDP packets work as expected;
+ * 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, you can substitute `ping ` with
+ `curl ` when debugging connectivity with the outside world.
+
+Other limitations:
+
+* Windows reference network plugins win-bridge and win-overlay do not implement
+ [CNI spec](https://github.com/containernetworking/cni/blob/master/SPEC.md) v0.4.0,
+ due to a missing `CHECK` implementation.
+* The Flannel VXLAN CNI plugin has the following limitations on Windows:
+ * Node-pod connectivity is only possible for local pods with Flannel v0.12.0 (or higher).
+ * Flannel is restricted to using VNI 4096 and UDP port 4789. See the official
+ [Flannel VXLAN](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan)
+ backend docs for more details on these parameters.
diff --git a/content/en/docs/concepts/storage/ephemeral-volumes.md b/content/en/docs/concepts/storage/ephemeral-volumes.md
index 282cc21f8d..a51984885e 100644
--- a/content/en/docs/concepts/storage/ephemeral-volumes.md
+++ b/content/en/docs/concepts/storage/ephemeral-volumes.md
@@ -127,14 +127,17 @@ instructions.
### CSI driver restrictions
-{{< feature-state for_k8s_version="v1.21" state="deprecated" >}}
+CSI ephemeral volumes allow users to provide `volumeAttributes`
+directly to the CSI driver as part of the Pod spec. A CSI driver
+allowing `volumeAttributes` that are typically restricted to
+administrators is NOT suitable for use in an inline ephemeral volume.
+For example, parameters that are normally defined in the StorageClass
+should not be exposed to users through the use of inline ephemeral volumes.
-As a cluster administrator, you can use a [PodSecurityPolicy](/docs/concepts/security/pod-security-policy/) to control which CSI drivers can be used in a Pod, specified with the
-[`allowedCSIDrivers` field](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritypolicyspec-v1beta1-policy).
-
-{{< note >}}
-PodSecurityPolicy is deprecated and will be removed in the Kubernetes v1.25 release.
-{{< /note >}}
+Cluster administrators who need to restrict the CSI drivers that are
+allowed to be used as inline volumes within a Pod spec may do so by:
+- Removing `Ephemeral` from `volumeLifecycleModes` in the CSIDriver spec, which prevents the driver from being used as an inline ephemeral volume.
+- Using an [admission webhook](/docs/reference/access-authn-authz/extensible-admission-controllers/) to restrict how this driver is used.
### Generic ephemeral volumes
@@ -248,14 +251,8 @@ same namespace, so that these conflicts can't occur.
Enabling the GenericEphemeralVolume feature allows users to create
PVCs indirectly if they can create Pods, even if they do not have
permission to create PVCs directly. Cluster administrators must be
-aware of this. If this does not fit their security model, they have
-two choices:
-- Use an [admission webhook](/docs/reference/access-authn-authz/extensible-admission-controllers/)
- that rejects objects like Pods that have a generic ephemeral
- volume.
-- Use a [Pod Security Policy](/docs/concepts/security/pod-security-policy/)
- where the `volumes` list does not contain the `ephemeral` volume type
- (deprecated since Kubernetes 1.21).
+aware of this. If this does not fit their security model, they should
+use an [admission webhook](/docs/reference/access-authn-authz/extensible-admission-controllers/) that rejects objects like Pods that have a generic ephemeral volume.
The normal [namespace quota for PVCs](/docs/concepts/policy/resource-quotas/#storage-resource-quota) still applies, so
even if users are allowed to use this new mechanism, they cannot use
diff --git a/content/en/docs/concepts/storage/persistent-volumes.md b/content/en/docs/concepts/storage/persistent-volumes.md
index 7a11939507..074fe9f759 100644
--- a/content/en/docs/concepts/storage/persistent-volumes.md
+++ b/content/en/docs/concepts/storage/persistent-volumes.md
@@ -175,6 +175,74 @@ spec:
However, the particular path specified in the custom recycler Pod template in the `volumes` part is replaced with the particular path of the volume that is being recycled.
+### PersistentVolume deletion protection finalizer
+{{< feature-state for_k8s_version="v1.23" state="alpha" >}}
+
+Finalizers can be added on a PersistentVolume to ensure that PersistentVolumes
+having `Delete` reclaim policy are deleted only after the backing storage are deleted.
+
+The newly introduced finalizers `kubernetes.io/pv-controller` and `external-provisioner.volume.kubernetes.io/finalizer`
+are only added to dynamically provisioned volumes.
+
+The finalizer `kubernetes.io/pv-controller` is added to in-tree plugin volumes. The following is an example
+
+```shell
+kubectl describe pv pvc-74a498d6-3929-47e8-8c02-078c1ece4d78
+Name: pvc-74a498d6-3929-47e8-8c02-078c1ece4d78
+Labels:
+Annotations: kubernetes.io/createdby: vsphere-volume-dynamic-provisioner
+ pv.kubernetes.io/bound-by-controller: yes
+ pv.kubernetes.io/provisioned-by: kubernetes.io/vsphere-volume
+Finalizers: [kubernetes.io/pv-protection kubernetes.io/pv-controller]
+StorageClass: vcp-sc
+Status: Bound
+Claim: default/vcp-pvc-1
+Reclaim Policy: Delete
+Access Modes: RWO
+VolumeMode: Filesystem
+Capacity: 1Gi
+Node Affinity:
+Message:
+Source:
+ Type: vSphereVolume (a Persistent Disk resource in vSphere)
+ VolumePath: [vsanDatastore] d49c4a62-166f-ce12-c464-020077ba5d46/kubernetes-dynamic-pvc-74a498d6-3929-47e8-8c02-078c1ece4d78.vmdk
+ FSType: ext4
+ StoragePolicyName: vSAN Default Storage Policy
+Events:
+```
+
+The finalizer `external-provisioner.volume.kubernetes.io/finalizer` is added for CSI volumes.
+The following is an example:
+```shell
+Name: pvc-2f0bab97-85a8-4552-8044-eb8be45cf48d
+Labels:
+Annotations: pv.kubernetes.io/provisioned-by: csi.vsphere.vmware.com
+Finalizers: [kubernetes.io/pv-protection external-provisioner.volume.kubernetes.io/finalizer]
+StorageClass: fast
+Status: Bound
+Claim: demo-app/nginx-logs
+Reclaim Policy: Delete
+Access Modes: RWO
+VolumeMode: Filesystem
+Capacity: 200Mi
+Node Affinity:
+Message:
+Source:
+ Type: CSI (a Container Storage Interface (CSI) volume source)
+ Driver: csi.vsphere.vmware.com
+ FSType: ext4
+ VolumeHandle: 44830fa8-79b4-406b-8b58-621ba25353fd
+ ReadOnly: false
+ VolumeAttributes: storage.kubernetes.io/csiProvisionerIdentity=1648442357185-8081-csi.vsphere.vmware.com
+ type=vSphere CNS Block Volume
+Events:
+```
+
+Enabling the `CSIMigration` feature for a specific in-tree volume plugin will remove
+the `kubernetes.io/pv-controller` finalizer, while adding the `external-provisioner.volume.kubernetes.io/finalizer`
+finalizer. Similarly, disabling `CSIMigration` will remove the `external-provisioner.volume.kubernetes.io/finalizer`
+finalizer, while adding the `kubernetes.io/pv-controller` finalizer.
+
### Reserving a PersistentVolume
The control plane can [bind PersistentVolumeClaims to matching PersistentVolumes](#binding) in the
@@ -284,18 +352,13 @@ FlexVolumes (deprecated since Kubernetes v1.23) allow resize if the driver is co
#### Resizing an in-use PersistentVolumeClaim
-{{< feature-state for_k8s_version="v1.15" state="beta" >}}
-
-{{< note >}}
-Expanding in-use PVCs is available as beta since Kubernetes 1.15, and as alpha since 1.11. The `ExpandInUsePersistentVolumes` feature must be enabled, which is the case automatically for many clusters for beta features. Refer to the [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) documentation for more information.
-{{< /note >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
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 that
uses the PVC before the expansion can complete.
-
Similar to other volume types - FlexVolume volumes can also be expanded when in-use by a Pod.
{{< note >}}
@@ -329,7 +392,7 @@ If expanding underlying storage fails, the cluster administrator can manually re
Recovery from failing PVC expansion by users is available as an alpha feature since Kubernetes 1.23. The `RecoverVolumeExpansionFailure` feature must be enabled for this feature to work. Refer to the [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) documentation for more information.
{{< /note >}}
-If the feature gates `ExpandPersistentVolumes` and `RecoverVolumeExpansionFailure` are both
+If the feature gates `RecoverVolumeExpansionFailure` is
enabled in your cluster, and expansion has failed for a PVC, you can retry expansion with a
smaller size than the previously requested value. To request a new expansion attempt with a
smaller proposed size, edit `.spec.resources` for that PVC and choose a value that is less than the
@@ -477,6 +540,15 @@ In the CLI, the access modes are abbreviated to:
* RWX - ReadWriteMany
* RWOP - ReadWriteOncePod
+{{< note >}}
+Kubernetes uses volume access modes to match PersistentVolumeClaims and PersistentVolumes.
+In some cases, the volume access modes also constrain where the PersistentVolume can be mounted.
+Volume access modes do **not** enforce write protection once the storage has been mounted.
+Even if the access modes are specified as ReadWriteOnce, ReadOnlyMany, or ReadWriteMany, they don't set any constraints on the volume.
+For example, even if a PersistentVolume is created as ReadOnlyMany, it is no guarantee that it will be read-only.
+If the access modes are specified as ReadWriteOncePod, the volume is constrained and can be mounted on only a single Pod.
+{{< /note >}}
+
> __Important!__ A volume can only be mounted using one access mode at a time, even if it supports many. For example, a GCEPersistentDisk can be mounted as ReadWriteOnce by a single node or ReadOnlyMany by many nodes, but not at the same time.
@@ -849,17 +921,12 @@ spec:
## Volume populators and data sources
-{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
+{{< feature-state for_k8s_version="v1.24" state="beta" >}}
-{{< note >}}
-Kubernetes supports custom volume populators; this alpha feature was introduced
-in Kubernetes 1.18. Kubernetes 1.22 reimplemented the mechanism with a redesigned API.
-Check that you are reading the version of the Kubernetes documentation that matches your
-cluster. {{% version-check %}}
+Kubernetes supports custom volume populators.
To use custom volume populators, you must enable the `AnyVolumeDataSource`
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) for
the kube-apiserver and kube-controller-manager.
-{{< /note >}}
Volume populators take advantage of a PVC spec field called `dataSourceRef`. Unlike the
`dataSource` field, which can only contain either a reference to another PersistentVolumeClaim
@@ -877,6 +944,7 @@ contents.
There are two differences between the `dataSourceRef` field and the `dataSource` field that
users should be aware of:
+
* The `dataSource` field ignores invalid values (as if the field was blank) while the
`dataSourceRef` field never ignores values and will cause an error if an invalid value is
used. Invalid values are any core object (objects with no apiGroup) except for PVCs.
diff --git a/content/en/docs/concepts/storage/storage-capacity.md b/content/en/docs/concepts/storage/storage-capacity.md
index ecf3fdc213..38c1a56c7e 100644
--- a/content/en/docs/concepts/storage/storage-capacity.md
+++ b/content/en/docs/concepts/storage/storage-capacity.md
@@ -16,37 +16,41 @@ Storage capacity is limited and may vary depending on the node on
which a pod runs: network-attached storage might not be accessible by
all nodes, or storage is local to a node to begin with.
-{{< feature-state for_k8s_version="v1.21" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
This page describes how Kubernetes keeps track of storage capacity and
-how the scheduler uses that information to schedule Pods onto nodes
+how the scheduler uses that information to [schedule Pods](/docs/concepts/scheduling-eviction/) onto nodes
that have access to enough storage capacity for the remaining missing
volumes. Without storage capacity tracking, the scheduler may choose a
node that doesn't have enough capacity to provision a volume and
multiple scheduling retries will be needed.
-Tracking storage capacity is supported for {{< glossary_tooltip
-text="Container Storage Interface" term_id="csi" >}} (CSI) drivers and
-[needs to be enabled](#enabling-storage-capacity-tracking) when installing a CSI driver.
+## {{% heading "prerequisites" %}}
+
+Kubernetes v{{< skew currentVersion >}} includes cluster-level API support for
+storage capacity tracking. To use this you must also be using a CSI driver that
+supports capacity tracking. Consult the documentation for the CSI drivers that
+you use to find out whether this support is available and, if so, how to use
+it. If you are not running Kubernetes v{{< skew currentVersion >}}, check the
+documentation for that version of Kubernetes.
## API
There are two API extensions for this feature:
-- CSIStorageCapacity objects:
+- [CSIStorageCapacity](/docs/reference/kubernetes-api/config-and-storage-resources/csi-storage-capacity-v1/) objects:
these get produced by a CSI driver in the namespace
where the driver is installed. Each object contains capacity
information for one storage class and defines which nodes have
access to that storage.
-- [The `CSIDriverSpec.StorageCapacity` field](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#csidriverspec-v1-storage-k8s-io):
+- [The `CSIDriverSpec.StorageCapacity` field](/docs/reference/kubernetes-api/config-and-storage-resources/csi-driver-v1/#CSIDriverSpec):
when set to `true`, the Kubernetes scheduler will consider storage
capacity for volumes that use the CSI driver.
## Scheduling
Storage capacity information is used by the Kubernetes scheduler if:
-- the `CSIStorageCapacity` feature gate is true,
- a Pod uses a volume that has not been created yet,
- that volume uses a {{< glossary_tooltip text="StorageClass" term_id="storage-class" >}} which references a CSI driver and
uses `WaitForFirstConsumer` [volume binding
@@ -97,20 +101,9 @@ multiple volumes: one volume might have been created already in a
topology segment which then does not have enough capacity left for
another volume. Manual intervention is necessary to recover from this,
for example by increasing capacity or deleting the volume that was
-already created. [Further
-work](https://github.com/kubernetes/enhancements/pull/1703) is needed
-to handle this automatically.
-
-## Enabling storage capacity tracking
-
-Storage capacity tracking is a beta feature and enabled by default in
-a Kubernetes cluster since Kubernetes 1.21. In addition to having the
-feature enabled in the cluster, a CSI driver also has to support
-it. Please refer to the driver's documentation for details.
+already created.
## {{% heading "whatsnext" %}}
- For more information on the design, see the
[Storage Capacity Constraints for Pod Scheduling KEP](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/1472-storage-capacity-tracking/README.md).
-- For more information on further development of this feature, see the [enhancement tracking issue #1472](https://github.com/kubernetes/enhancements/issues/1472).
-- Learn about [Kubernetes Scheduler](/docs/concepts/scheduling-eviction/kube-scheduler/)
diff --git a/content/en/docs/concepts/storage/storage-classes.md b/content/en/docs/concepts/storage/storage-classes.md
index 788f592abe..53ee88a2e7 100644
--- a/content/en/docs/concepts/storage/storage-classes.md
+++ b/content/en/docs/concepts/storage/storage-classes.md
@@ -49,7 +49,7 @@ metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
- type: gp3
+ type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
@@ -271,9 +271,9 @@ parameters:
fsType: ext4
```
-* `type`: `io1`, `gp2`, `gp3`, `sc1`, `st1`. See
+* `type`: `io1`, `gp2`, `sc1`, `st1`. See
[AWS docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)
- for details. Default: `gp3`.
+ for details. Default: `gp2`.
* `zone` (Deprecated): AWS zone. If neither `zone` nor `zones` is specified, volumes are
generally round-robin-ed across all active zones where Kubernetes cluster
has a node. `zone` and `zones` parameters must not be used at the same time.
diff --git a/content/en/docs/concepts/storage/volume-health-monitoring.md b/content/en/docs/concepts/storage/volume-health-monitoring.md
index c5fb9c1929..0e39011a0f 100644
--- a/content/en/docs/concepts/storage/volume-health-monitoring.md
+++ b/content/en/docs/concepts/storage/volume-health-monitoring.md
@@ -24,7 +24,7 @@ If a CSI Driver supports Volume Health Monitoring feature from the controller si
The External Health Monitor {{< glossary_tooltip text="controller" term_id="controller" >}} also watches for node failure events. You can enable node failure monitoring by setting the `enable-node-watcher` flag to true. When the external health monitor detects a node failure event, the controller reports an Event will be reported on the PVC to indicate that pods using this PVC are on a failed node.
-If a CSI Driver supports Volume Health Monitoring feature from the node side, an Event will be reported on every Pod using the PVC when an abnormal volume condition is detected on a CSI volume.
+If a CSI Driver supports Volume Health Monitoring feature from the node side, an Event will be reported on every Pod using the PVC when an abnormal volume condition is detected on a CSI volume. In addition, Volume Health information is exposed as Kubelet VolumeStats metrics. A new metric kubelet_volume_stats_health_status_abnormal is added. This metric includes two labels: `namespace` and `persistentvolumeclaim`. The count is either 1 or 0. 1 indicates the volume is unhealthy, 0 indicates volume is healthy. For more information, please check [KEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1432-volume-health-monitor#kubelet-metrics-changes).
{{< note >}}
You need to enable the `CSIVolumeHealth` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) to use this feature from the node side.
diff --git a/content/en/docs/concepts/storage/volume-snapshots.md b/content/en/docs/concepts/storage/volume-snapshots.md
index 8d9a5acb72..0b4d2c2f2b 100644
--- a/content/en/docs/concepts/storage/volume-snapshots.md
+++ b/content/en/docs/concepts/storage/volume-snapshots.md
@@ -120,6 +120,7 @@ spec:
driver: hostpath.csi.k8s.io
source:
volumeHandle: ee0cfb94-f8d4-11e9-b2d8-0242ac110002
+ sourceVolumeMode: Filesystem
volumeSnapshotClassName: csi-hostpath-snapclass
volumeSnapshotRef:
name: new-snapshot-test
@@ -141,6 +142,7 @@ spec:
driver: hostpath.csi.k8s.io
source:
snapshotHandle: 7bdd0de3-aaeb-11e8-9aae-0242ac110002
+ sourceVolumeMode: Filesystem
volumeSnapshotRef:
name: new-snapshot-test
namespace: default
@@ -148,6 +150,51 @@ spec:
`snapshotHandle` is the unique identifier of the volume snapshot created on the storage backend. This field is required for the pre-provisioned snapshots. It specifies the CSI snapshot id on the storage system that this `VolumeSnapshotContent` represents.
+`sourceVolumeMode` is the mode of the volume whose snapshot is taken. The value
+of the `sourceVolumeMode` field can be either `Filesystem` or `Block`. If the
+source volume mode is not specified, Kubernetes treats the snapshot as if the
+source volume's mode is unknown.
+
+## Converting the volume mode of a Snapshot {#convert-volume-mode}
+
+If the `VolumeSnapshots` API installed on your cluster supports the `sourceVolumeMode`
+field, then the API has the capability to prevent unauthorized users from converting
+the mode of a volume.
+
+To check if your cluster has capability for this feature, run the following command:
+
+```yaml
+$ kubectl get crd volumesnapshotcontent -o yaml
+```
+
+If you want to allow users to create a `PersistentVolumeClaim` from an existing
+`VolumeSnapshot`, but with a different volume mode than the source, the annotation
+`snapshot.storage.kubernetes.io/allowVolumeModeChange: "true"`needs to be added to
+the `VolumeSnapshotContent` that corresponds to the `VolumeSnapshot`.
+
+For pre-provisioned snapshots, `Spec.SourceVolumeMode` needs to be populated
+by the cluster administrator.
+
+An example `VolumeSnapshotContent` resource with this feature enabled would look like:
+
+```yaml
+apiVersion: snapshot.storage.k8s.io/v1
+kind: VolumeSnapshotContent
+metadata:
+ name: new-snapshot-content-test
+ annotations:
+ - snapshot.storage.kubernetes.io/allowVolumeModeChange: "true"
+spec:
+ deletionPolicy: Delete
+ driver: hostpath.csi.k8s.io
+ source:
+ snapshotHandle: 7bdd0de3-aaeb-11e8-9aae-0242ac110002
+ sourceVolumeMode: Filesystem
+ volumeSnapshotRef:
+ name: new-snapshot-test
+ namespace: default
+```
+
## Provisioning Volumes from Snapshots
You can provision a new volume, pre-populated with data from a snapshot, by using
diff --git a/content/en/docs/concepts/storage/volumes.md b/content/en/docs/concepts/storage/volumes.md
index ed64345ce4..796dd26dd3 100644
--- a/content/en/docs/concepts/storage/volumes.md
+++ b/content/en/docs/concepts/storage/volumes.md
@@ -64,7 +64,9 @@ a different volume.
Kubernetes supports several types of volumes.
-### awsElasticBlockStore {#awselasticblockstore}
+### awsElasticBlockStore (deprecated) {#awselasticblockstore}
+
+{{< feature-state for_k8s_version="v1.17" state="deprecated" >}}
An `awsElasticBlockStore` volume mounts an Amazon Web Services (AWS)
[EBS volume](https://aws.amazon.com/ebs/) into your pod. Unlike
@@ -135,7 +137,9 @@ beta features must be enabled.
To disable the `awsElasticBlockStore` storage plugin from being loaded by the controller manager
and the kubelet, set the `InTreePluginAWSUnregister` flag to `true`.
-### azureDisk {#azuredisk}
+### azureDisk (deprecated) {#azuredisk}
+
+{{< feature-state for_k8s_version="v1.19" state="deprecated" >}}
The `azureDisk` volume type mounts a Microsoft Azure [Data Disk](https://docs.microsoft.com/en-us/azure/aks/csi-storage-drivers) into a pod.
@@ -143,14 +147,13 @@ For more details, see the [`azureDisk` volume plugin](https://github.com/kuberne
#### azureDisk CSI migration
-{{< feature-state for_k8s_version="v1.19" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
The `CSIMigration` feature for `azureDisk`, when enabled, redirects all plugin operations
from the existing in-tree plugin to the `disk.csi.azure.com` Container
-Storage Interface (CSI) Driver. In order to use this feature, the [Azure Disk CSI
-Driver](https://github.com/kubernetes-sigs/azuredisk-csi-driver)
-must be installed on the cluster and the `CSIMigration` and `CSIMigrationAzureDisk`
-features must be enabled.
+Storage Interface (CSI) Driver. In order to use this feature, the
+[Azure Disk CSI Driver](https://github.com/kubernetes-sigs/azuredisk-csi-driver)
+must be installed on the cluster and the `CSIMigration` feature must be enabled.
#### azureDisk CSI migration complete
@@ -159,7 +162,9 @@ features must be enabled.
To disable the `azureDisk` storage plugin from being loaded by the controller manager
and the kubelet, set the `InTreePluginAzureDiskUnregister` flag to `true`.
-### azureFile {#azurefile}
+### azureFile (deprecated) {#azurefile}
+
+{{< feature-state for_k8s_version="v1.21" state="deprecated" >}}
The `azureFile` volume type mounts a Microsoft Azure File volume (SMB 2.1 and 3.0)
into a pod.
@@ -177,7 +182,8 @@ Driver](https://github.com/kubernetes-sigs/azurefile-csi-driver)
must be installed on the cluster and the `CSIMigration` and `CSIMigrationAzureFile`
[feature gates](/docs/reference/command-line-tools-reference/feature-gates/) must be enabled.
-Azure File CSI driver does not support using same volume with different fsgroups, if Azurefile CSI migration is enabled, using same volume with different fsgroups won't be supported at all.
+Azure File CSI driver does not support using same volume with different fsgroups. If
+`CSIMigrationAzureFile` is enabled, using same volume with different fsgroups won't be supported at all.
#### azureFile CSI migration complete
@@ -201,7 +207,9 @@ You must have your own Ceph server running with the share exported before you ca
See the [CephFS example](https://github.com/kubernetes/examples/tree/master/volumes/cephfs/) for more details.
-### cinder
+### cinder (deprecated) {#cinder}
+
+{{< feature-state for_k8s_version="v1.18" state="deprecated" >}}
{{< note >}}
Kubernetes must be configured with the OpenStack cloud provider.
@@ -233,17 +241,17 @@ spec:
#### OpenStack CSI migration
-{{< feature-state for_k8s_version="v1.21" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
-The `CSIMigration` feature for Cinder is enabled by default in Kubernetes 1.21.
+The `CSIMigration` feature for Cinder is enabled by default since Kubernetes 1.21.
It redirects all plugin operations from the existing in-tree plugin to the
`cinder.csi.openstack.org` Container Storage Interface (CSI) Driver.
[OpenStack Cinder CSI Driver](https://github.com/kubernetes/cloud-provider-openstack/blob/master/docs/cinder-csi-plugin/using-cinder-csi-plugin.md)
must be installed on the cluster.
-You can disable Cinder CSI migration for your cluster by setting the `CSIMigrationOpenStack`
-[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) to `false`.
-If you disable the `CSIMigrationOpenStack` feature, the in-tree Cinder volume plugin takes responsibility
-for all aspects of Cinder volume storage management.
+
+To disable the in-tree Cinder plugin from being loaded by the controller manager
+and the kubelet, you can enable the `InTreePluginOpenStackUnregister`
+[feature gate](/docs/reference/command-line-tools-reference/feature-gates/).
### configMap
@@ -390,7 +398,9 @@ You must have your own Flocker installation running before you can use it.
See the [Flocker example](https://github.com/kubernetes/examples/tree/master/staging/volumes/flocker) for more details.
-### gcePersistentDisk
+### gcePersistentDisk (deprecated) {#gcepersistentdisk}
+
+{{< feature-state for_k8s_version="v1.17" state="deprecated" >}}
A `gcePersistentDisk` volume mounts a Google Compute Engine (GCE)
[persistent disk](https://cloud.google.com/compute/docs/disks) (PD) into your Pod.
@@ -969,66 +979,15 @@ spec:
For more information about StorageOS, dynamic provisioning, and PersistentVolumeClaims, see the
[StorageOS examples](https://github.com/kubernetes/examples/blob/master/volumes/storageos).
-### vsphereVolume {#vspherevolume}
+### vsphereVolume (deprecated) {#vspherevolume}
{{< note >}}
-You must configure the Kubernetes vSphere Cloud Provider. For cloudprovider
-configuration, refer to the [vSphere Getting Started guide](https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/).
+We recommend to use vSphere CSI out-of-tree driver instead.
{{< /note >}}
A `vsphereVolume` is used to mount a vSphere VMDK volume into your Pod. The contents
of a volume are preserved when it is unmounted. It supports both VMFS and VSAN datastore.
-{{< note >}}
-You must create vSphere VMDK volume using one of the following methods before using with a Pod.
-{{< /note >}}
-
-#### Creating a VMDK volume {#creating-vmdk-volume}
-
-Choose one of the following methods to create a VMDK.
-
-{{< tabs name="tabs_volumes" >}}
-{{% tab name="Create using vmkfstools" %}}
-First ssh into ESX, then use the following command to create a VMDK:
-
-```shell
-vmkfstools -c 2G /vmfs/volumes/DatastoreName/volumes/myDisk.vmdk
-```
-
-{{% /tab %}}
-{{% tab name="Create using vmware-vdiskmanager" %}}
-Use the following command to create a VMDK:
-
-```shell
-vmware-vdiskmanager -c -t 0 -s 40GB -a lsilogic myDisk.vmdk
-```
-
-{{% /tab %}}
-
-{{< /tabs >}}
-
-#### vSphere VMDK configuration example {#vsphere-vmdk-configuration}
-
-```yaml
-apiVersion: v1
-kind: Pod
-metadata:
- name: test-vmdk
-spec:
- containers:
- - image: k8s.gcr.io/test-webserver
- name: test-container
- volumeMounts:
- - mountPath: /test-vmdk
- name: test-volume
- volumes:
- - name: test-volume
- # This VMDK volume must already exist.
- vsphereVolume:
- volumePath: "[DatastoreName] volumes/myDisk"
- fsType: ext4
-```
-
For more information, see the [vSphere volume](https://github.com/kubernetes/examples/tree/master/staging/volumes/vsphere) examples.
#### vSphere CSI migration {#vsphere-csi-migration}
@@ -1040,8 +999,15 @@ from the existing in-tree plugin to the `csi.vsphere.vmware.com` {{< glossary_to
[vSphere CSI driver](https://github.com/kubernetes-sigs/vsphere-csi-driver)
must be installed on the cluster and the `CSIMigration` and `CSIMigrationvSphere`
[feature gates](/docs/reference/command-line-tools-reference/feature-gates/) must be enabled.
+You can find additional advice on how to migrate in VMware's
+documentation page [Migrating In-Tree vSphere Volumes to vSphere Container Storage Plug-in](https://docs.vmware.com/en/VMware-vSphere-Container-Storage-Plug-in/2.0/vmware-vsphere-csp-getting-started/GUID-968D421F-D464-4E22-8127-6CB9FF54423F.html).
-This also requires minimum vSphere vCenter/ESXi Version to be 7.0u1 and minimum HW Version to be VM version 15.
+Kubernetes v{{< skew currentVersion >}} requires that you are using vSphere 7.0u2 or later
+in order to migrate to the out-of-tree CSI driver.
+If you are running a version of Kubernetes other than v{{< skew currentVersion >}}, consult
+the documentation for that version of Kubernetes.
+If you are running Kubernetes v{{< skew currentVersion >}} and an older version of vSphere,
+consider upgrading to at least vSphere 7.0u2.
{{< note >}}
The following StorageClass parameters from the built-in `vsphereVolume` plugin are not supported by the vSphere CSI driver:
@@ -1211,7 +1177,6 @@ A `csi` volume can be used in a Pod in three different ways:
* through a reference to a [PersistentVolumeClaim](#persistentvolumeclaim)
* with a [generic ephemeral volume](/docs/concepts/storage/ephemeral-volumes/#generic-ephemeral-volume)
-(alpha feature)
* with a [CSI ephemeral volume](/docs/concepts/storage/ephemeral-volumes/#csi-ephemeral-volume)
if the driver supports that (beta feature)
@@ -1285,6 +1250,20 @@ for more information.
For more information on how to develop a CSI driver, refer to the
[kubernetes-csi documentation](https://kubernetes-csi.github.io/docs/)
+#### Windows CSI proxy
+
+{{< feature-state for_k8s_version="v1.22" state="stable" >}}
+
+CSI node plugins need to perform various privileged
+operations like scanning of disk devices and mounting of file systems. These operations
+differ for each host operating system. For Linux worker nodes, containerized CSI node
+node plugins are typically deployed as privileged containers. For Windows worker nodes,
+privileged operations for containerized CSI node plugins is supported using
+[csi-proxy](https://github.com/kubernetes-csi/csi-proxy), a community-managed,
+stand-alone binary that needs to be pre-installed on each Windows node.
+
+For more details, refer to the deployment guide of the CSI plugin you wish to deploy.
+
#### Migrating to CSI drivers from in-tree plugins
{{< feature-state for_k8s_version="v1.17" state="beta" >}}
@@ -1301,6 +1280,14 @@ provisioning/delete, attach/detach, mount/unmount and resizing of volumes.
In-tree plugins that support `CSIMigration` and have a corresponding CSI driver implemented
are listed in [Types of Volumes](#volume-types).
+The following in-tree plugins support persistent storage on Windows nodes:
+
+* [`awsElasticBlockStore`](#awselasticblockstore)
+* [`azureDisk`](#azuredisk)
+* [`azureFile`](#azurefile)
+* [`gcePersistentDisk`](#gcepersistentdisk)
+* [`vsphereVolume`](#vspherevolume)
+
### flexVolume
{{< feature-state for_k8s_version="v1.23" state="deprecated" >}}
@@ -1312,6 +1299,12 @@ volume plugin path on each node and in some cases the control plane nodes as wel
Pods interact with FlexVolume drivers through the `flexVolume` in-tree volume plugin.
For more details, see the FlexVolume [README](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-storage/flexvolume.md#readme) document.
+The following FlexVolume [plugins](https://github.com/Microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows),
+deployed as PowerShell scripts on the host, support Windows nodes:
+
+* [SMB](https://github.com/microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows/plugins/microsoft.com~smb.cmd)
+* [iSCSI](https://github.com/microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows/plugins/microsoft.com~iscsi.cmd)
+
{{< note >}}
FlexVolume is deprecated. Using an out-of-tree CSI driver is the recommended way to integrate external storage with Kubernetes.
diff --git a/content/en/docs/concepts/storage/windows-storage.md b/content/en/docs/concepts/storage/windows-storage.md
new file mode 100644
index 0000000000..b8f40177ca
--- /dev/null
+++ b/content/en/docs/concepts/storage/windows-storage.md
@@ -0,0 +1,71 @@
+---
+reviewers:
+- jingxu97
+- mauriciopoppe
+- jayunit100
+- jsturtevant
+- marosset
+- aravindhp
+title: Windows Storage
+content_type: concept
+---
+
+
+
+This page provides an storage overview specific to the Windows operating system.
+
+
+
+## Persistent storage {#storage}
+
+Windows has a layered filesystem driver to mount container layers and create a copy
+filesystem based on NTFS. All file paths in the container are resolved only within
+the context of that container.
+
+* With Docker, volume mounts can only target a directory in the container, and not
+ an individual file. This limitation does not apply to containerd.
+* Volume mounts cannot project files or directories back to the host filesystem.
+* Read-only filesystems are not supported because write access is always required
+ for the Windows registry and SAM database. However, read-only volumes are supported.
+* Volume user-masks and permissions are not available. Because the SAM is not shared
+ between the host & container, there's no mapping between them. All permissions are
+ resolved within the context of the container.
+
+As a result, the following storage functionality is not supported on Windows nodes:
+
+* Volume subpath mounts: only the entire volume can be mounted in a Windows container
+* Subpath volume mounting for Secrets
+* Host mount projection
+* Read-only root filesystem (mapped volumes still support `readOnly`)
+* Block device mapping
+* Memory as the storage medium (for example, `emptyDir.medium` set to `Memory`)
+* File system features like uid/gid; per-user Linux filesystem permissions
+* Setting [secret permissions with DefaultMode](/docs/concepts/configuration/secret/#secret-files-permissions) (due to UID/GID dependency)
+* NFS based storage/volume support
+* Expanding the mounted volume (resizefs)
+
+Kubernetes {{< glossary_tooltip text="volumes" term_id="volume" >}} enable complex
+applications, with data persistence and Pod volume sharing requirements, to be deployed
+on Kubernetes. Management of persistent volumes associated with a specific storage
+back-end or protocol includes actions such as provisioning/de-provisioning/resizing
+of volumes, attaching/detaching a volume to/from a Kubernetes node and
+mounting/dismounting a volume to/from individual containers in a pod that needs to
+persist data.
+
+Volume management components are shipped as Kubernetes volume
+[plugin](/docs/concepts/storage/volumes/#types-of-volumes).
+The following broad classes of Kubernetes volume plugins are supported on Windows:
+
+* [`FlexVolume plugins`](/docs/concepts/storage/volumes/#flexVolume)
+ * Please note that FlexVolumes have been deprecated as of 1.23
+* [`CSI Plugins`](/docs/concepts/storage/volumes/#csi)
+
+##### In-tree volume plugins
+
+The following in-tree plugins support persistent storage on Windows nodes:
+
+* [`awsElasticBlockStore`](/docs/concepts/storage/volumes/#awselasticblockstore)
+* [`azureDisk`](/docs/concepts/storage/volumes/#azuredisk)
+* [`azureFile`](/docs/concepts/storage/volumes/#azurefile)
+* [`gcePersistentDisk`](/docs/concepts/storage/volumes/#gcepersistentdisk)
+* [`vsphereVolume`](/docs/concepts/storage/volumes/#vspherevolume)
diff --git a/content/en/docs/setup/production-environment/windows/_index.md b/content/en/docs/concepts/windows/_index.md
similarity index 100%
rename from content/en/docs/setup/production-environment/windows/_index.md
rename to content/en/docs/concepts/windows/_index.md
diff --git a/content/en/docs/concepts/windows/intro.md b/content/en/docs/concepts/windows/intro.md
new file mode 100644
index 0000000000..a737d54e3b
--- /dev/null
+++ b/content/en/docs/concepts/windows/intro.md
@@ -0,0 +1,384 @@
+---
+reviewers:
+- jayunit100
+- jsturtevant
+- marosset
+- perithompson
+title: Windows containers in Kubernetes
+content_type: concept
+weight: 65
+---
+
+
+
+Windows applications constitute a large portion of the services and applications that
+run in many organizations. [Windows containers](https://aka.ms/windowscontainers)
+provide a way to encapsulate processes and package dependencies, making it easier
+to use DevOps practices and follow cloud native patterns for Windows applications.
+
+Organizations with investments in Windows-based applications and Linux-based
+applications don't have to look for separate orchestrators to manage their workloads,
+leading to increased operational efficiencies across their deployments, regardless
+of operating system.
+
+
+
+## Windows nodes in Kubernetes
+
+To enable the orchestration of Windows containers in Kubernetes, include Windows nodes
+in your existing Linux cluster. Scheduling Windows containers in
+{{< glossary_tooltip text="Pods" term_id="pod" >}} on Kubernetes is similar to
+scheduling Linux-based containers.
+
+In order to run Windows containers, your Kubernetes cluster must include
+multiple operating systems.
+While you can only run the {{< glossary_tooltip text="control plane" term_id="control-plane" >}} on Linux,
+you can deploy worker nodes running either Windows or Linux.
+
+Windows {{< glossary_tooltip text="nodes" term_id="node" >}} are
+[supported](#windows-os-version-support) provided that the operating system is
+Windows Server 2019.
+
+This document uses the term *Windows containers* to mean Windows containers with
+process isolation. Kubernetes does not support running Windows containers with
+[Hyper-V isolation](https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/hyperv-container).
+
+## Compatibility and limitations {#limitations}
+
+Some node features are only available if you use a specific
+[container runtime](#container-runtime); others are not available on Windows nodes,
+including:
+
+* HugePages: not supported for Windows containers
+* Privileged containers: not supported for Windows containers
+* TerminationGracePeriod: requires containerD
+
+Not all features of shared namespaces are supported. See [API compatibility](#api)
+for more details.
+
+See [Windows OS version compatibility](#windows-os-version-support) for details on
+the Windows versions that Kubernetes is tested against.
+
+From an API and kubectl perspective, Windows containers behave in much the same
+way as Linux-based containers. However, there are some notable differences in key
+functionality which are outlined in this section.
+
+### Comparison with Linux {#compatibility-linux-similarities}
+
+Key Kubernetes elements work the same way in Windows as they do in Linux. This
+section refers to several key workload abstractions and how they map to Windows.
+
+* [Pods](/docs/concepts/workloads/pods/)
+
+ A Pod is the basic building block of Kubernetes–the smallest and simplest unit in
+ the Kubernetes object model that you create or deploy. You may not deploy Windows and
+ Linux containers in the same Pod. All containers in a Pod are scheduled onto a single
+ Node where each Node represents a specific platform and architecture. The following
+ Pod capabilities, properties and events are supported with Windows containers:
+
+ * Single or multiple containers per Pod with process isolation and volume sharing
+ * Pod `status` fields
+ * Readiness and Liveness probes
+ * postStart & preStop container lifecycle hooks
+ * ConfigMap, Secrets: as environment variables or volumes
+ * `emptyDir` volumes
+ * Named pipe host mounts
+ * Resource limits
+ * OS field:
+
+ The `.spec.os.name` field should be set to `windows` to indicate that the current Pod uses Windows containers.
+ The `IdentifyPodOS` feature gate needs to be enabled for this field to be recognized.
+
+ {{< note >}}
+ Starting from 1.24, the `IdentifyPodOS` feature gate is in Beta stage and defaults to be enabled.
+ {{< /note >}}
+
+ If the `IdentifyPodOS` feature gate is enabled and you set the `.spec.os.name` field to `windows`,
+ you must not set the following fields in the `.spec` of that Pod:
+
+ * `spec.hostPID`
+ * `spec.hostIPC`
+ * `spec.securityContext.seLinuxOptions`
+ * `spec.securityContext.seccompProfile`
+ * `spec.securityContext.fsGroup`
+ * `spec.securityContext.fsGroupChangePolicy`
+ * `spec.securityContext.sysctls`
+ * `spec.shareProcessNamespace`
+ * `spec.securityContext.runAsUser`
+ * `spec.securityContext.runAsGroup`
+ * `spec.securityContext.supplementalGroups`
+ * `spec.containers[*].securityContext.seLinuxOptions`
+ * `spec.containers[*].securityContext.seccompProfile`
+ * `spec.containers[*].securityContext.capabilities`
+ * `spec.containers[*].securityContext.readOnlyRootFilesystem`
+ * `spec.containers[*].securityContext.privileged`
+ * `spec.containers[*].securityContext.allowPrivilegeEscalation`
+ * `spec.containers[*].securityContext.procMount`
+ * `spec.containers[*].securityContext.runAsUser`
+ * `spec.containers[*].securityContext.runAsGroup`
+
+ In the above list, wildcards (`*`) indicate all elements in a list.
+ For example, `spec.containers[*].securityContext` refers to the SecurityContext object
+ for all containers. If any of these fields is specified, the Pod will
+ not be admited by the API server.
+
+* [Workload resources](/docs/concepts/workloads/controllers/) including:
+ * ReplicaSet
+ * Deployment
+ * StatefulSet
+ * DaemonSet
+ * Job
+ * CronJob
+ * ReplicationController
+* {{< glossary_tooltip text="Services" term_id="service" >}}
+ See [Load balancing and Services](#load-balancing-and-services) for more details.
+
+Pods, workload resources, and Services are critical elements to managing Windows
+workloads on Kubernetes. However, on their own they are not enough to enable
+the proper lifecycle management of Windows workloads in a dynamic cloud native
+environment. Kubernetes also supports:
+
+* `kubectl exec`
+* Pod and container metrics
+* {{< glossary_tooltip text="Horizontal pod autoscaling" term_id="horizontal-pod-autoscaler" >}}
+* {{< glossary_tooltip text="Resource quotas" term_id="resource-quota" >}}
+* Scheduler preemption
+
+### Command line options for the kubelet {#kubelet-compatibility}
+
+Some kubelet command line options behave differently on Windows, as described below:
+
+* The `--windows-priorityclass` lets you set the scheduling priority of the kubelet process
+ (see [CPU resource management](/docs/concepts/configuration/windows-resource-management/#resource-management-cpu))
+* The `--kubelet-reserve`, `--system-reserve` , and `--eviction-hard` flags update
+ [NodeAllocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable)
+* Eviction by using `--enforce-node-allocable` is not implemented
+* Eviction by using `--eviction-hard` and `--eviction-soft` are not implemented
+* A kubelet running on a Windows node does not have memory
+ restrictions. `--kubelet-reserve` and `--system-reserve` do not set limits on
+ kubelet or processes running on the host. This means kubelet or a process on the host
+ could cause memory resource starvation outside the node-allocatable and scheduler.
+* The `MemoryPressure` Condition is not implemented
+* The kubelet does not take OOM eviction actions
+
+### API compatibility {#api}
+
+There are subtle differences in the way the Kubernetes APIs work for Windows due to the OS
+and container runtime. Some workload properties were designed for Linux, and fail to run on Windows.
+
+At a high level, these OS concepts are different:
+
+* Identity - Linux uses userID (UID) and groupID (GID) which
+ are represented as integer types. User and group names
+ are not canonical - they are just an alias in `/etc/groups`
+ or `/etc/passwd` back to UID+GID. Windows uses a larger binary
+ [security identifier](https://docs.microsoft.com/en-us/windows/security/identity-protection/access-control/security-identifiers) (SID)
+ which is stored in the Windows Security Access Manager (SAM) database. This
+ database is not shared between the host and containers, or between containers.
+* File permissions - Windows uses an access control list based on (SIDs), whereas
+ POSIX systems such as Linux use a bitmask based on object permissions and UID+GID,
+ plus _optional_ access control lists.
+* File paths - the convention on Windows is to use `\` instead of `/`. The Go IO
+ libraries typically accept both and just make it work, but when you're setting a
+ path or command line that's interpreted inside a container, `\` may be needed.
+* Signals - Windows interactive apps handle termination differently, and can
+ implement one or more of these:
+ * A UI thread handles well-defined messages including `WM_CLOSE`.
+ * Console apps handle Ctrl-C or Ctrl-break using a Control Handler.
+ * Services register a Service Control Handler function that can accept
+ `SERVICE_CONTROL_STOP` control codes.
+
+Container exit codes follow the same convention where 0 is success, and nonzero is failure.
+The specific error codes may differ across Windows and Linux. However, exit codes
+passed from the Kubernetes components (kubelet, kube-proxy) are unchanged.
+
+##### Field compatibility for container specifications {#compatibility-v1-pod-spec-containers}
+
+The following list documents differences between how Pod container specifications
+work between Windows and Linux:
+
+* Huge pages are not implemented in the Windows container
+ runtime, and are not available. They require [asserting a user
+ privilege](https://docs.microsoft.com/en-us/windows/desktop/Memory/large-page-support)
+ that's not configurable for containers.
+* `requests.cpu` and `requests.memory` - requests are subtracted
+ from node available resources, so they can be used to avoid overprovisioning a
+ node. However, they cannot be used to guarantee resources in an overprovisioned
+ node. They should be applied to all containers as a best practice if the operator
+ wants to avoid overprovisioning entirely.
+* `securityContext.allowPrivilegeEscalation` -
+ not possible on Windows; none of the capabilities are hooked up
+* `securityContext.capabilities` -
+ POSIX capabilities are not implemented on Windows
+* `securityContext.privileged` -
+ Windows doesn't support privileged containers
+* `securityContext.procMount` -
+ Windows doesn't have a `/proc` filesystem
+* `securityContext.readOnlyRootFilesystem` -
+ not possible on Windows; write access is required for registry & system
+ processes to run inside the container
+* `securityContext.runAsGroup` -
+ not possible on Windows as there is no GID support
+* `securityContext.runAsNonRoot` -
+ this setting will prevent containers from running as `ContainerAdministrator`
+ which is the closest equivalent to a root user on Windows.
+* `securityContext.runAsUser` -
+ use [`runAsUserName`](/docs/tasks/configure-pod-container/configure-runasusername)
+ instead
+* `securityContext.seLinuxOptions` -
+ not possible on Windows as SELinux is Linux-specific
+* `terminationMessagePath` -
+ this has some limitations in that Windows doesn't support mapping single files. The
+ default value is `/dev/termination-log`, which does work because it does not
+ exist on Windows by default.
+
+##### Field compatibility for Pod specifications {#compatibility-v1-pod}
+
+The following list documents differences between how Pod specifications work between Windows and Linux:
+
+* `hostIPC` and `hostpid` - host namespace sharing is not possible on Windows
+* `hostNetwork` - There is no Windows OS support to share the host network
+* `dnsPolicy` - setting the Pod `dnsPolicy` to `ClusterFirstWithHostNet` is
+ not supported on Windows because host networking is not provided. Pods always
+ run with a container network.
+* `podSecurityContext` (see below)
+* `shareProcessNamespace` - this is a beta feature, and depends on Linux namespaces
+ which are not implemented on Windows. Windows cannot share process namespaces or
+ the container's root filesystem. Only the network can be shared.
+* `terminationGracePeriodSeconds` - this is not fully implemented in Docker on Windows,
+ see the [GitHub issue](https://github.com/moby/moby/issues/25982).
+ The behavior today is that the ENTRYPOINT process is sent CTRL_SHUTDOWN_EVENT,
+ then Windows waits 5 seconds by default, and finally shuts down
+ all processes using the normal Windows shutdown behavior. The 5
+ second default is actually in the Windows registry
+ [inside the container](https://github.com/moby/moby/issues/25982#issuecomment-426441183),
+ so it can be overridden when the container is built.
+* `volumeDevices` - this is a beta feature, and is not implemented on Windows.
+ Windows cannot attach raw block devices to pods.
+* `volumes`
+ * If you define an `emptyDir` volume, you cannot set its volume source to `memory`.
+* You cannot enable `mountPropagation` for volume mounts as this is not
+ supported on Windows.
+
+##### Field compatibility for Pod security context {#compatibility-v1-pod-spec-containers-securitycontext}
+
+None of the Pod [`securityContext`](/docs/reference/kubernetes-api/workload-resources/pod-v1/#security-context) fields work on Windows.
+
+### Node problem detector
+
+The node problem detector (see
+[Monitor Node Health](/docs/tasks/debug/debug-cluster/monitor-node-health/))
+is not compatible with Windows.
+
+### Pause container
+
+In a Kubernetes Pod, an infrastructure or “pause” container is first created
+to host the container. In Linux, the cgroups and namespaces that make up a pod
+need a process to maintain their continued existence; the pause process provides
+this. Containers that belong to the same pod, including infrastructure and worker
+containers, share a common network endpoint (same IPv4 and / or IPv6 address, same
+network port spaces). Kubernetes uses pause containers to allow for worker containers
+crashing or restarting without losing any of the networking configuration.
+
+Kubernetes maintains a multi-architecture image that includes support for Windows.
+For Kubernetes v{{< skew currentVersion >}} the recommended pause image is `k8s.gcr.io/pause:3.6`.
+The [source code](https://github.com/kubernetes/kubernetes/tree/master/build/pause)
+is available on GitHub.
+
+Microsoft maintains a different multi-architecture image, with Linux and Windows
+amd64 support, that you can find as `mcr.microsoft.com/oss/kubernetes/pause:3.6`.
+This image is built from the same source as the Kubernetes maintained image but
+all of the Windows binaries are [authenticode signed](https://docs.microsoft.com/en-us/windows-hardware/drivers/install/authenticode) by Microsoft.
+The Kubernetes project recommends using the Microsoft maintained image if you are
+deploying to a production or production-like environment that requires signed
+binaries.
+
+### Container runtimes {#container-runtime}
+
+You need to install a
+{{< glossary_tooltip text="container runtime" term_id="container-runtime" >}}
+into each node in the cluster so that Pods can run there.
+
+The following container runtimes work with Windows:
+
+{{% thirdparty-content %}}
+
+#### cri-containerd
+
+{{< feature-state for_k8s_version="v1.20" state="stable" >}}
+
+You can use {{< glossary_tooltip term_id="containerd" text="ContainerD" >}} 1.4.0+
+as the container runtime for Kubernetes nodes that run Windows.
+
+Learn how to [install ContainerD on a Windows node](/docs/setup/production-environment/container-runtimes/#install-containerd).
+
+{{< note >}}
+There is a [known limitation](/docs/tasks/configure-pod-container/configure-gmsa/#gmsa-limitations)
+when using GMSA with containerd to access Windows network shares, which requires a
+kernel patch.
+{{< /note >}}
+
+#### Mirantis Container Runtime {#mcr}
+
+[Mirantis Container Runtime](https://docs.mirantis.com/mcr/20.10/overview.html) (MCR) is available as a container runtime for all Windows Server 2019 and later versions.
+
+See [Install MCR on Windows Servers](https://docs.mirantis.com/mcr/20.10/install/mcr-windows.html) for more information.
+
+## Windows OS version compatibility {#windows-os-version-support}
+
+On Windows nodes, strict compatibility rules apply where the host OS version must
+match the container base image OS version. Only Windows containers with a container
+operating system of Windows Server 2019 are fully supported.
+
+For Kubernetes v{{< skew currentVersion >}}, operating system compatibility for Windows nodes (and Pods)
+is as follows:
+
+Windows Server LTSC release
+: Windows Server 2019
+: Windows Server 2022
+
+Windows Server SAC release
+: Windows Server version 20H2
+
+The Kubernetes [version-skew policy](/docs/setup/release/version-skew-policy/) also applies.
+
+## Getting help and troubleshooting {#troubleshooting}
+
+Your main source of help for troubleshooting your Kubernetes cluster should start
+with the [Troubleshooting](/docs/tasks/debug/)
+page.
+
+Some additional, Windows-specific troubleshooting help is included
+in this section. Logs are an important element of troubleshooting
+issues in Kubernetes. Make sure to include them any time you seek
+troubleshooting assistance from other contributors. Follow the
+instructions in the
+SIG Windows [contributing guide on gathering logs](https://github.com/kubernetes/community/blob/master/sig-windows/CONTRIBUTING.md#gathering-logs).
+
+### Reporting issues and feature requests
+
+If you have what looks like a bug, or you would like to
+make a feature request, please follow the [SIG Windows contributing guide](https://github.com/kubernetes/community/blob/master/sig-windows/CONTRIBUTING.md#reporting-issues-and-feature-requests) to create a new issue.
+You should first search the list of issues in case it was
+reported previously and comment with your experience on the issue and add additional
+logs. SIG-Windows Slack is also a great avenue to get some initial support and
+troubleshooting ideas prior to creating a ticket.
+
+## {{% heading "whatsnext" %}}
+
+### Deployment tools
+
+The kubeadm tool helps you to deploy a Kubernetes cluster, providing the control
+plane to manage the cluster it, and nodes to run your workloads.
+[Adding Windows nodes](/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes/)
+explains how to deploy Windows nodes to your cluster using kubeadm.
+
+The Kubernetes [cluster API](https://cluster-api.sigs.k8s.io/) project also provides means to automate deployment of Windows nodes.
+
+### Windows distribution channels
+
+For a detailed explanation of Windows distribution channels see the [Microsoft documentation](https://docs.microsoft.com/en-us/windows-server/get-started-19/servicing-channels-19).
+
+Information on the different Windows Server servicing channels
+including their support models can be found at
+[Windows Server servicing channels](https://docs.microsoft.com/en-us/windows-server/get-started/servicing-channels-comparison).
diff --git a/content/en/docs/setup/production-environment/windows/user-guide-windows-containers.md b/content/en/docs/concepts/windows/user-guide.md
similarity index 78%
rename from content/en/docs/setup/production-environment/windows/user-guide-windows-containers.md
rename to content/en/docs/concepts/windows/user-guide.md
index cf3fafd784..450a1bb5e0 100644
--- a/content/en/docs/setup/production-environment/windows/user-guide-windows-containers.md
+++ b/content/en/docs/concepts/windows/user-guide.md
@@ -3,7 +3,6 @@ reviewers:
- jayunit100
- jsturtevant
- marosset
-- perithompson
title: Guide for scheduling Windows containers in Kubernetes
content_type: concept
weight: 75
@@ -11,31 +10,29 @@ weight: 75
-Windows applications constitute a large portion of the services and applications that run in many organizations.
-This guide walks you through the steps to configure and deploy a Windows container in Kubernetes.
-
-
+Windows applications constitute a large portion of the services and applications that run in many organizations.
+This guide walks you through the steps to configure and deploy Windows containers in Kubernetes.
## Objectives
* Configure an example deployment to run Windows containers on the Windows node
-* (Optional) Configure an Active Directory Identity for your Pod using Group Managed Service Accounts (GMSA)
+* Highlight Windows specific funcationality in Kubernetes
## Before you begin
-* Create a Kubernetes cluster that includes a
+* Create a Kubernetes cluster that includes a
control plane and a [worker node running Windows Server](/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes/)
-* It is important to note that creating and deploying services and workloads on Kubernetes
-behaves in much the same way for Linux and Windows containers.
-[Kubectl commands](/docs/reference/kubectl/) to interface with the cluster are identical.
+* It is important to note that creating and deploying services and workloads on Kubernetes
+behaves in much the same way for Linux and Windows containers.
+[Kubectl commands](/docs/reference/kubectl/) to interface with the cluster are identical.
The example in the section below is provided to jumpstart your experience with Windows containers.
## Getting Started: Deploying a Windows container
-To deploy a Windows container on Kubernetes, you must first create an example application.
-The example YAML file below creates a simple webserver application.
+The example YAML file below deploys a simple webserver application running inside a Windows container.
+
Create a service spec named `win-webserver.yaml` with the contents below:
```yaml
@@ -83,8 +80,8 @@ spec:
```
{{< note >}}
-Port mapping is also supported, but for simplicity in this example
-the container port 80 is exposed directly to the service.
+Port mapping is also supported, but for simplicity this example exposes
+port 80 of the container directly to the Service.
{{< /note >}}
1. Check that all nodes are healthy:
@@ -104,20 +101,19 @@ the container port 80 is exposed directly to the service.
1. Check that the deployment succeeded. To verify:
- * Two containers per pod on the Windows node, use `docker ps`
- * Two pods listed from the Linux control plane node, use `kubectl get pods`
- * Node-to-pod communication across the network, `curl` port 80 of your pod IPs from the Linux control plane node
+ * Two pods listed from the Linux control plane node, use `kubectl get pods`
+ * Node-to-pod communication across the network, `curl` port 80 of your pod IPs from the Linux control plane node
to check for a web server response
- * Pod-to-pod communication, ping between pods (and across hosts, if you have more than one Windows node)
+ * Pod-to-pod communication, ping between pods (and across hosts, if you have more than one Windows node)
using docker exec or kubectl exec
- * Service-to-pod communication, `curl` the virtual service IP (seen under `kubectl get services`)
+ * Service-to-pod communication, `curl` the virtual service IP (seen under `kubectl get services`)
from the Linux control plane node and from individual pods
* Service discovery, `curl` the service name with the Kubernetes [default DNS suffix](/docs/concepts/services-networking/dns-pod-service/#services)
* Inbound connectivity, `curl` the NodePort from the Linux control plane node or machines outside of the cluster
* Outbound connectivity, `curl` external IPs from inside the pod using kubectl exec
{{< note >}}
-Windows container hosts are not able to access the IP of services scheduled on them due to current platform limitations of the Windows networking stack.
+Windows container hosts are not able to access the IP of services scheduled on them due to current platform limitations of the Windows networking stack.
Only Windows pods are able to access service IPs.
{{< /note >}}
@@ -125,78 +121,85 @@ Only Windows pods are able to access service IPs.
### Capturing logs from workloads
-Logs are an important element of observability; they enable users to gain insights
-into the operational aspect of workloads and are a key ingredient to troubleshooting issues.
-Because Windows containers and workloads inside Windows containers behave differently from Linux containers,
-users had a hard time collecting logs, limiting operational visibility.
-Windows workloads for example are usually configured to log to ETW (Event Tracing for Windows)
-or push entries to the application event log.
-[LogMonitor](https://github.com/microsoft/windows-container-tools/tree/master/LogMonitor), an open source tool by Microsoft,
-is the recommended way to monitor configured log sources inside a Windows container.
-LogMonitor supports monitoring event logs, ETW providers, and custom application logs,
+Logs are an important element of observability; they enable users to gain insights
+into the operational aspect of workloads and are a key ingredient to troubleshooting issues.
+Because Windows containers and workloads inside Windows containers behave differently from Linux containers,
+users had a hard time collecting logs, limiting operational visibility.
+Windows workloads for example are usually configured to log to ETW (Event Tracing for Windows)
+or push entries to the application event log.
+[LogMonitor](https://github.com/microsoft/windows-container-tools/tree/master/LogMonitor), an open source tool by Microsoft,
+is the recommended way to monitor configured log sources inside a Windows container.
+LogMonitor supports monitoring event logs, ETW providers, and custom application logs,
piping them to STDOUT for consumption by `kubectl logs `.
-Follow the instructions in the LogMonitor GitHub page to copy its binaries and configuration files
+Follow the instructions in the LogMonitor GitHub page to copy its binaries and configuration files
to all your containers and add the necessary entrypoints for LogMonitor to push your logs to STDOUT.
-## Using configurable Container usernames
+## Configuring container user
-Starting with Kubernetes v1.16, Windows containers can be configured to run their entrypoints and processes
-with different usernames than the image defaults.
-The way this is achieved is a bit different from the way it is done for Linux containers.
+### Using configurable Container usernames
+
+Windows containers can be configured to run their entrypoints and processes
+with different usernames than the image defaults.
Learn more about it [here](/docs/tasks/configure-pod-container/configure-runasusername/).
-## Managing Workload Identity with Group Managed Service Accounts
+### Managing Workload Identity with Group Managed Service Accounts
-Starting with Kubernetes v1.14, Windows container workloads can be configured to use Group Managed Service Accounts (GMSA).
-Group Managed Service Accounts 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.
-Containers configured with a GMSA can access external Active Directory Domain resources while carrying the identity configured with the GMSA.
+Windows container workloads can be configured to use Group Managed Service Accounts (GMSA).
+Group Managed Service Accounts are a specific type of Active Directory account that provide automatic password management,
+simplified service principal name (SPN) management, and the ability to delegate the management to other administrators across multiple servers.
+Containers configured with a GMSA can access external Active Directory Domain resources while carrying the identity configured with the GMSA.
Learn more about configuring and using GMSA for Windows containers [here](/docs/tasks/configure-pod-container/configure-gmsa/).
## Taints and Tolerations
-Users today need to use some combination of taints and node selectors in order to
-keep Linux and Windows workloads on their respective OS-specific nodes.
-This likely imposes a burden only on Windows users. The recommended approach is outlined below,
+Users need to use some combination of taints and node selectors in order to
+schedule Linux and Windows workloads to their respective OS-specific nodes.
+The recommended approach is outlined below,
with one of its main goals being that this approach should not break compatibility for existing Linux workloads.
- {{< note >}}
+
If the `IdentifyPodOS` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) is
enabled, you can (and should) set `.spec.os.name` for a Pod to indicate the operating system
that the containers in that Pod are designed for. For Pods that run Linux containers, set
`.spec.os.name` to `linux`. For Pods that run Windows containers, set `.spec.os.name`
to Windows.
+{{< note >}}
+Starting from 1.24, the `IdentifyPodOS` feature is in Beta stage and defaults to be enabled.
+{{< /note >}}
+
The scheduler does not use the value of `.spec.os.name` when assigning Pods to nodes. You should
use normal Kubernetes mechanisms for
[assigning pods to nodes](/docs/concepts/scheduling-eviction/assign-pod-node/)
to ensure that the control plane for your cluster places pods onto nodes that are running the
appropriate operating system.
- no effect on the scheduling of the Windows pods, so taints and tolerations and node selectors are still required
+
+The `.spec.os.name` value has no effect on the scheduling of the Windows pods,
+so taints and tolerations and node selectors are still required
to ensure that the Windows pods land onto appropriate Windows nodes.
- {{< /note >}}
+
### Ensuring OS-specific workloads land on the appropriate container host
-Users can ensure Windows containers can be scheduled on the appropriate host using Taints and Tolerations.
+Users can ensure Windows containers can be scheduled on the appropriate host using Taints and Tolerations.
All Kubernetes nodes today have the following default labels:
* kubernetes.io/os = [windows|linux]
* kubernetes.io/arch = [amd64|arm64|...]
-If a Pod specification does not specify a nodeSelector like `"kubernetes.io/os": windows`,
-it is possible the Pod can be scheduled on any host, Windows or Linux.
-This can be problematic since a Windows container can only run on Windows and a Linux container can only run on Linux.
+If a Pod specification does not specify a nodeSelector like `"kubernetes.io/os": windows`,
+it is possible the Pod can be scheduled on any host, Windows or Linux.
+This can be problematic since a Windows container can only run on Windows and a Linux container can only run on Linux.
The best practice is to use a nodeSelector.
-However, we understand that in many cases users have a pre-existing large number of deployments for Linux containers,
-as well as an ecosystem of off-the-shelf configurations, such as community Helm charts, and programmatic Pod generation cases, such as with Operators.
-In those situations, you may be hesitant to make the configuration change to add nodeSelectors.
-The alternative is to use Taints. Because the kubelet can set Taints during registration,
+However, we understand that in many cases users have a pre-existing large number of deployments for Linux containers,
+as well as an ecosystem of off-the-shelf configurations, such as community Helm charts, and programmatic Pod generation cases, such as with Operators.
+In those situations, you may be hesitant to make the configuration change to add nodeSelectors.
+The alternative is to use Taints. Because the kubelet can set Taints during registration,
it could easily be modified to automatically add a taint when running on Windows only.
For example: `--register-with-taints='os=windows:NoSchedule'`
-By adding a taint to all Windows nodes, nothing will be scheduled on them (that includes existing Linux Pods).
+By adding a taint to all Windows nodes, nothing will be scheduled on them (that includes existing Linux Pods).
In order for a Windows Pod to be scheduled on a Windows node,
it would need both the nodeSelector and the appropriate matching toleration to choose Windows.
@@ -216,26 +219,24 @@ tolerations:
The Windows Server version used by each pod must match that of the node. If you want to use multiple Windows
Server versions in the same cluster, then you should set additional node labels and nodeSelectors.
-Kubernetes 1.17 automatically adds a new label `node.kubernetes.io/windows-build` to simplify this.
+Kubernetes 1.17 automatically adds a new label `node.kubernetes.io/windows-build` to simplify this.
If you're running an older version, then it's recommended to add this label manually to Windows nodes.
-This label reflects the Windows major, minor, and build number that need to match for compatibility.
+This label reflects the Windows major, minor, and build number that need to match for compatibility.
Here are values used today for each Windows Server version.
| Product Name | Build Number(s) |
|--------------------------------------|------------------------|
| Windows Server 2019 | 10.0.17763 |
-| Windows Server version 1809 | 10.0.17763 |
-| Windows Server version 1903 | 10.0.18362 |
-
+| Windows Server, Version 20H2 | 10.0.19042 |
+| Windows Server 2022 | 10.0.20348 |
### Simplifying with RuntimeClass
-[RuntimeClass] can be used to simplify the process of using taints and tolerations.
+[RuntimeClass] can be used to simplify the process of using taints and tolerations.
A cluster administrator can create a `RuntimeClass` object which is used to encapsulate these taints and tolerations.
-
-1. Save this file to `runtimeClasses.yml`. It includes the appropriate `nodeSelector`
+1. Save this file to `runtimeClasses.yml`. It includes the appropriate `nodeSelector`
for the Windows OS, architecture, and version.
```yaml
@@ -306,7 +307,4 @@ spec:
app: iis-2019
```
-
-
-
[RuntimeClass]: https://kubernetes.io/docs/concepts/containers/runtime-class/
diff --git a/content/en/docs/concepts/workloads/controllers/cron-jobs.md b/content/en/docs/concepts/workloads/controllers/cron-jobs.md
index cafe51102b..2d2416226a 100644
--- a/content/en/docs/concepts/workloads/controllers/cron-jobs.md
+++ b/content/en/docs/concepts/workloads/controllers/cron-jobs.md
@@ -91,6 +91,21 @@ For example, the line below states that the task must be started every Friday at
To generate CronJob schedule expressions, you can also use web tools like [crontab.guru](https://crontab.guru/).
+## Time zones
+For CronJobs with no time zone specified, the kube-controller-manager interprets schedules relative to its local time zone.
+
+{{< feature-state for_k8s_version="v1.24" state="alpha" >}}
+
+If you enable the `CronJobTimeZone` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/),
+you can specify a time zone for a CronJob (if you don't enable that feature gate, or if you are using a version of
+Kubernetes that does not have experimental time zone support, all CronJobs in your cluster have an unspecified
+timezone).
+
+When you have the feature enabled, you can set `spec.timeZone` to the name of a valid [time zone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) name. For example, setting
+`spec.timeZone: "Etc/UTC"` instructs Kubernetes to interpret the schedule relative to Coordinated Universal Time.
+
+A time zone database from the Go standard library is included in the binaries and used as a fallback in case an external database is not available on the system.
+
## CronJob limitations {#cron-job-limitations}
A cron job creates a job object _about_ once per execution time of its schedule. We say "about" because there
diff --git a/content/en/docs/concepts/workloads/controllers/daemonset.md b/content/en/docs/concepts/workloads/controllers/daemonset.md
index ffb1fbd614..d74a4a0c62 100644
--- a/content/en/docs/concepts/workloads/controllers/daemonset.md
+++ b/content/en/docs/concepts/workloads/controllers/daemonset.md
@@ -76,9 +76,9 @@ A Pod Template in a DaemonSet must have a [`RestartPolicy`](/docs/concepts/workl
The `.spec.selector` field is a pod selector. It works the same as the `.spec.selector` of
a [Job](/docs/concepts/workloads/controllers/job/).
-As of Kubernetes 1.8, you must specify a pod selector that matches the labels of the
-`.spec.template`. The pod selector will no longer be defaulted when left empty. Selector
-defaulting was not compatible with `kubectl apply`. Also, once a DaemonSet is created,
+You must specify a pod selector that matches the labels of the
+`.spec.template`.
+Also, once a DaemonSet is created,
its `.spec.selector` can not be mutated. Mutating the pod selector can lead to the
unintentional orphaning of Pods, and it was found to be confusing to users.
@@ -91,8 +91,8 @@ The `.spec.selector` is an object consisting of two fields:
When the two are specified the result is ANDed.
-If the `.spec.selector` is specified, it must match the `.spec.template.metadata.labels`.
-Config with these not matching will be rejected by the API.
+The `.spec.selector` must match the `.spec.template.metadata.labels`.
+Config with these two not matching will be rejected by the API.
### Running Pods on select Nodes
@@ -107,7 +107,7 @@ If you do not specify either, then the DaemonSet controller will create Pods on
### Scheduled by default scheduler
-{{< feature-state for_kubernetes_version="1.17" state="stable" >}}
+{{< feature-state for_k8s_version="1.17" state="stable" >}}
A DaemonSet ensures that all eligible nodes run a copy of a Pod. Normally, the
node that a Pod runs on is selected by the Kubernetes scheduler. However,
diff --git a/content/en/docs/concepts/workloads/controllers/job.md b/content/en/docs/concepts/workloads/controllers/job.md
index 6fb0a21ff6..cda286947b 100644
--- a/content/en/docs/concepts/workloads/controllers/job.md
+++ b/content/en/docs/concepts/workloads/controllers/job.md
@@ -42,7 +42,9 @@ You can run the example with this command:
```shell
kubectl apply -f https://kubernetes.io/examples/controllers/job.yaml
```
+
The output is similar to this:
+
```
job.batch/pi created
```
@@ -52,7 +54,9 @@ Check on the status of the Job with `kubectl`:
```shell
kubectl describe jobs/pi
```
+
The output is similar to this:
+
```
Name: pi
Namespace: default
@@ -97,7 +101,9 @@ To list all the Pods that belong to a Job in a machine readable form, you can us
pods=$(kubectl get pods --selector=job-name=pi --output=jsonpath='{.items[*].metadata.name}')
echo $pods
```
+
The output is similar to this:
+
```
pi-5rwd7
```
@@ -110,8 +116,10 @@ View the standard output of one of the pods:
```shell
kubectl logs $pods
```
+
The output is similar to this:
-```shell
+
+```
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901
```
@@ -190,7 +198,7 @@ parallelism, for a variety of reasons:
### Completion mode
-{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
Jobs with _fixed completion count_ - that is, jobs that have non null
`.spec.completions` - can have a completion mode that is specified in `.spec.completionMode`:
@@ -425,13 +433,7 @@ Here, `W` is the number of work items.
### Suspending a Job
-{{< feature-state for_k8s_version="v1.22" state="beta" >}}
-
-{{< note >}}
-In Kubernetes version 1.21, this feature was in alpha, which required additional
-steps to enable this feature; make sure to read the [right documentation for the
-version of Kubernetes you're using](/docs/home/supported-doc-versions/).
-{{< /note >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
When a Job is created, the Job controller will immediately begin creating Pods
to satisfy the Job's requirements and will continue to do so until the Job is
@@ -482,7 +484,7 @@ suspended in the past:
kubectl get jobs/myjob -o yaml
```
-```json
+```yaml
apiVersion: batch/v1
kind: Job
# .metadata and .spec omitted
@@ -581,7 +583,9 @@ Before deleting it, you make a note of what selector it uses:
```shell
kubectl get job old -o yaml
```
+
The output is similar to this:
+
```yaml
kind: Job
metadata:
@@ -706,4 +710,4 @@ object, but maintains complete control over what Pods are created and how work i
object definition to understand the API for jobs.
* Read about [`CronJob`](/docs/concepts/workloads/controllers/cron-jobs/), which you
can use to define a series of Jobs that will run based on a schedule, similar to
- the Unix tool `cron`.
+ the UNIX tool `cron`.
diff --git a/content/en/docs/concepts/workloads/controllers/replicaset.md b/content/en/docs/concepts/workloads/controllers/replicaset.md
index 8024e6246a..29df406dcb 100644
--- a/content/en/docs/concepts/workloads/controllers/replicaset.md
+++ b/content/en/docs/concepts/workloads/controllers/replicaset.md
@@ -78,7 +78,7 @@ kubectl describe rs/frontend
And you will see output similar to:
-```shell
+```
Name: frontend
Namespace: default
Selector: tier=frontend
@@ -130,7 +130,7 @@ kubectl get pods frontend-b2zdv -o yaml
The output will look similar to this, with the frontend ReplicaSet's info set in the metadata's ownerReferences field:
-```shell
+```yaml
apiVersion: v1
kind: Pod
metadata:
@@ -181,7 +181,7 @@ kubectl get pods
The output shows that the new Pods are either already terminated, or in the process of being terminated:
-```shell
+```
NAME READY STATUS RESTARTS AGE
frontend-b2zdv 1/1 Running 0 10m
frontend-vcmts 1/1 Running 0 10m
@@ -210,7 +210,7 @@ kubectl get pods
```
Will reveal in its output:
-```shell
+```
NAME READY STATUS RESTARTS AGE
frontend-hmmj2 1/1 Running 0 9s
pod1 1/1 Running 0 36s
diff --git a/content/en/docs/concepts/workloads/controllers/statefulset.md b/content/en/docs/concepts/workloads/controllers/statefulset.md
index 57f1e4872f..2ae481a431 100644
--- a/content/en/docs/concepts/workloads/controllers/statefulset.md
+++ b/content/en/docs/concepts/workloads/controllers/statefulset.md
@@ -266,7 +266,9 @@ in the same order as Pod termination (from the largest ordinal to the smallest),
each Pod one at a time.
The Kubernetes control plane waits until an updated Pod is Running and Ready prior
-to updating its predecessor. If you have set `.spec.minReadySeconds` (see [Minimum Ready Seconds](#minimum-ready-seconds)), the control plane additionally waits that amount of time after the Pod turns ready, before moving on.
+to updating its predecessor. If you have set `.spec.minReadySeconds` (see
+[Minimum Ready Seconds](#minimum-ready-seconds)), the control plane additionally waits that
+amount of time after the Pod turns ready, before moving on.
### Partitioned rolling updates {#partitions}
@@ -280,6 +282,27 @@ updates to its `.spec.template` will not be propagated to its Pods.
In most cases you will not need to use a partition, but they are useful if you want to stage an
update, roll out a canary, or perform a phased roll out.
+### Maximum unavailable Pods
+
+{{< feature-state for_k8s_version="v1.24" state="alpha" >}}
+
+You can control the maximum number of Pods that can be unavailable during an update
+by specifying the `.spec.updateStrategy.rollingUpdate.maxUnavailable` field.
+The value can be an absolute number (for example, `5`) or a percentage of desired
+Pods (for example, `10%`). Absolute number is calculated from the percentage value
+by rounding it up. This field cannot be 0. The default setting is 1.
+
+This field applies to all Pods in the range `0` to `replicas - 1`. If there is any
+unavailable Pod in the range `0` to `replicas - 1`, it will be counted towards
+`maxUnavailable`.
+
+{{< note >}}
+The `maxUnavailable` field is in Alpha stage and it is honored only by API servers
+that are running with the `MaxUnavailableStatefulSet`
+[feature gate](/docs/reference/commmand-line-tools-reference/feature-gates/)
+enabled.
+{{< /note >}}
+
### Forced rollback
When using [Rolling Updates](#rolling-updates) with the default
diff --git a/content/en/docs/concepts/workloads/pods/ephemeral-containers.md b/content/en/docs/concepts/workloads/pods/ephemeral-containers.md
index d32511da28..0a70fedd6f 100644
--- a/content/en/docs/concepts/workloads/pods/ephemeral-containers.md
+++ b/content/en/docs/concepts/workloads/pods/ephemeral-containers.md
@@ -70,5 +70,5 @@ you can view processes in other containers.
## {{% heading "whatsnext" %}}
-* Learn how to [debug pods using ephemeral containers](/docs/tasks/debug-application-cluster/debug-running-pod/#ephemeral-container).
+* Learn how to [debug pods using ephemeral containers](/docs/tasks/debug/debug-application/debug-running-pod/#ephemeral-container).
diff --git a/content/en/docs/concepts/workloads/pods/init-containers.md b/content/en/docs/concepts/workloads/pods/init-containers.md
index 43d23d3a0a..61b90d17d0 100644
--- a/content/en/docs/concepts/workloads/pods/init-containers.md
+++ b/content/en/docs/concepts/workloads/pods/init-containers.md
@@ -332,5 +332,5 @@ Kubernetes, consult the documentation for the version you are using.
## {{% heading "whatsnext" %}}
* Read about [creating a Pod that has an init container](/docs/tasks/configure-pod-container/configure-pod-initialization/#create-a-pod-that-has-an-init-container)
-* Learn how to [debug init containers](/docs/tasks/debug-application-cluster/debug-init-containers/)
+* Learn how to [debug init containers](/docs/tasks/debug/debug-application/debug-init-containers/)
diff --git a/content/en/docs/concepts/workloads/pods/pod-topology-spread-constraints.md b/content/en/docs/concepts/workloads/pods/pod-topology-spread-constraints.md
index 347f6729f9..939fd5222b 100644
--- a/content/en/docs/concepts/workloads/pods/pod-topology-spread-constraints.md
+++ b/content/en/docs/concepts/workloads/pods/pod-topology-spread-constraints.md
@@ -4,14 +4,12 @@ content_type: concept
weight: 40
---
-{{< feature-state for_k8s_version="v1.19" state="stable" >}}
-
You can use _topology spread constraints_ to control how {{< glossary_tooltip text="Pods" term_id="Pod" >}} are spread across your cluster among failure-domains such as regions, zones, nodes, and other user-defined topology domains. This can help to achieve high availability as well as efficient resource utilization.
+
## Prerequisites
@@ -75,16 +73,42 @@ You can define one or multiple `topologySpreadConstraint` to instruct the kube-s
- **maxSkew** describes the degree to which Pods may be unevenly distributed.
It must be greater than zero. Its semantics differs according to the value of `whenUnsatisfiable`:
+
- when `whenUnsatisfiable` equals to "DoNotSchedule", `maxSkew` is the maximum
permitted difference between the number of matching pods in the target
topology and the global minimum
- (the minimum number of pods that match the label selector in a topology domain. For example, if you have 3 zones with 0, 2 and 3 matching pods respectively, The global minimum is 0).
+ (the minimum number of pods that match the label selector in a topology domain.
+ For example, if you have 3 zones with 0, 2 and 3 matching pods respectively,
+ The global minimum is 0).
- when `whenUnsatisfiable` equals to "ScheduleAnyway", scheduler gives higher
precedence to topologies that would help reduce the skew.
+
+- **minDomains** indicates a minimum number of eligible domains.
+ A domain is a particular instance of a topology. An eligible domain is a domain whose
+ nodes match the node selector.
+
+ - The value of `minDomains` must be greater than 0, when specified.
+ - When the number of eligible domains with match topology keys is less than `minDomains`,
+ Pod topology spread treats "global minimum" as 0, and then the calculation of `skew` is performed.
+ The "global minimum" is the minimum number of matching Pods in an eligible domain,
+ or zero if the number of eligible domains is less than `minDomains`.
+ - When the number of eligible domains with matching topology keys equals or is greater than
+ `minDomains`, this value has no effect on scheduling.
+ - When `minDomains` is nil, the constraint behaves as if `minDomains` is 1.
+ - When `minDomains` is not nil, the value of `whenUnsatisfiable` must be "`DoNotSchedule`".
+
+ {{< note >}}
+ The `minDomains` field is an alpha field added in 1.24. You have to enable the
+ `MinDomainsInPodToplogySpread` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
+ in order to use it.
+ {{< /note >}}
+
- **topologyKey** is the key of node labels. If two Nodes are labelled with this key and have identical values for that label, the scheduler treats both Nodes as being in the same topology. The scheduler tries to place a balanced number of Pods into each topology domain.
+
- **whenUnsatisfiable** indicates how to deal with a Pod if it doesn't satisfy the spread constraint:
- `DoNotSchedule` (default) tells the scheduler not to schedule it.
- `ScheduleAnyway` tells the scheduler to still schedule it while prioritizing nodes that minimize the skew.
+
- **labelSelector** is used to find matching Pods. Pods that match this label selector are counted to determine the number of Pods in their corresponding topology domain. See [Label Selectors](/docs/concepts/overview/working-with-objects/labels/#label-selectors) for more details.
When a Pod defines more than one `topologySpreadConstraint`, those constraints are ANDed: The kube-scheduler looks for a node for the incoming Pod that satisfies all the constraints.
@@ -119,7 +143,7 @@ If we want an incoming Pod to be evenly spread with existing Pods across zones,
`topologyKey: zone` implies the even distribution will only be applied to the nodes which have label pair "zone:<any value>" present. `whenUnsatisfiable: DoNotSchedule` tells the scheduler to let it stay pending if the incoming Pod can't satisfy the constraint.
-If the scheduler placed this incoming Pod into "zoneA", the Pods distribution would become [3, 1], hence the actual skew is 2 (3 - 1) - which violates `maxSkew: 1`. In this example, the incoming Pod can only be placed onto "zoneB":
+If the scheduler placed this incoming Pod into "zoneA", the Pods distribution would become [3, 1], hence the actual skew is 2 (3 - 1) - which violates `maxSkew: 1`. In this example, the incoming Pod can only be placed into "zoneB":
{{}}
graph BT
@@ -164,7 +188,7 @@ graph BT
You can tweak the Pod spec to meet various kinds of requirements:
-- Change `maxSkew` to a bigger value like "2" so that the incoming Pod can be placed onto "zoneA" as well.
+- Change `maxSkew` to a bigger value like "2" so that the incoming Pod can be placed into "zoneA" as well.
- Change `topologyKey` to "node" so as to distribute the Pods evenly across nodes instead of zones. In the above example, if `maxSkew` remains "1", the incoming Pod can only be placed onto "node4".
- Change `whenUnsatisfiable: DoNotSchedule` to `whenUnsatisfiable: ScheduleAnyway` to ensure the incoming Pod to be always schedulable (suppose other scheduling APIs are satisfied). However, it's preferred to be placed onto the topology domain which has fewer matching Pods. (Be aware that this preferability is jointly normalized with other internal scheduling priorities like resource usage ratio, etc.)
@@ -195,7 +219,7 @@ You can use 2 TopologySpreadConstraints to control the Pods spreading on both zo
{{< codenew file="pods/topology-spread-constraints/two-constraints.yaml" >}}
-In this case, to match the first constraint, the incoming Pod can only be placed onto "zoneB"; while in terms of the second constraint, the incoming Pod can only be placed onto "node4". Then the results of 2 constraints are ANDed, so the only viable option is to place on "node4".
+In this case, to match the first constraint, the incoming Pod can only be placed into "zoneB"; while in terms of the second constraint, the incoming Pod can only be placed onto "node4". Then the results of 2 constraints are ANDed, so the only viable option is to place on "node4".
Multiple constraints can lead to conflicts. Suppose you have a 3-node cluster across 2 zones:
@@ -218,7 +242,7 @@ graph BT
class zoneA,zoneB cluster;
{{< /mermaid >}}
-If you apply "two-constraints.yaml" to this cluster, you will notice "mypod" stays in `Pending` state. This is because: to satisfy the first constraint, "mypod" can only be put to "zoneB"; while in terms of the second constraint, "mypod" can only put to "node2". Then a joint result of "zoneB" and "node2" returns nothing.
+If you apply "two-constraints.yaml" to this cluster, you will notice "mypod" stays in `Pending` state. This is because: to satisfy the first constraint, "mypod" can only placed into "zoneB"; while in terms of the second constraint, "mypod" can only be placed onto "node2". Then a joint result of "zoneB" and "node2" returns nothing.
To overcome this situation, you can either increase the `maxSkew` or modify one of the constraints to use `whenUnsatisfiable: ScheduleAnyway`.
@@ -262,7 +286,7 @@ class n5 k8s;
class zoneC cluster;
{{< /mermaid >}}
-and you know that "zoneC" must be excluded. In this case, you can compose the yaml as below, so that "mypod" will be placed onto "zoneB" instead of "zoneC". Similarly `spec.nodeSelector` is also respected.
+and you know that "zoneC" must be excluded. In this case, you can compose the yaml as below, so that "mypod" will be placed into "zoneB" instead of "zoneC". Similarly `spec.nodeSelector` is also respected.
{{< codenew file="pods/topology-spread-constraints/one-constraint-with-nodeaffinity.yaml" >}}
@@ -277,9 +301,9 @@ There are some implicit conventions worth noting here:
- The scheduler will bypass the nodes without `topologySpreadConstraints[*].topologyKey` present. This implies that:
1. the Pods located on those nodes do not impact `maxSkew` calculation - in the above example, suppose "node1" does not have label "zone", then the 2 Pods will be disregarded, hence the incoming Pod will be scheduled into "zoneA".
- 2. the incoming Pod has no chances to be scheduled onto this kind of nodes - in the above example, suppose a "node5" carrying label `{zone-typo: zoneC}` joins the cluster, it will be bypassed due to the absence of label key "zone".
+ 2. the incoming Pod has no chances to be scheduled onto such nodes - in the above example, suppose a "node5" carrying label `{zone-typo: zoneC}` joins the cluster, it will be bypassed due to the absence of label key "zone".
-- Be aware of what will happen if the incomingPod's `topologySpreadConstraints[*].labelSelector` doesn't match its own labels. In the above example, if we remove the incoming Pod's labels, it can still be placed onto "zoneB" since the constraints are still satisfied. However, after the placement, the degree of imbalance of the cluster remains unchanged - it's still zoneA having 2 Pods which hold label {foo:bar}, and zoneB having 1 Pod which holds label {foo:bar}. So if this is not what you expect, we recommend the workload's `topologySpreadConstraints[*].labelSelector` to match its own labels.
+- Be aware of what will happen if the incoming Pod's `topologySpreadConstraints[*].labelSelector` doesn't match its own labels. In the above example, if we remove the incoming Pod's labels, it can still be placed into "zoneB" since the constraints are still satisfied. However, after the placement, the degree of imbalance of the cluster remains unchanged - it's still zoneA having 2 Pods which hold label {foo:bar}, and zoneB having 1 Pod which holds label {foo:bar}. So if this is not what you expect, we recommend the workload's `topologySpreadConstraints[*].labelSelector` to match its own labels.
### Cluster-level default constraints
@@ -314,21 +338,17 @@ profiles:
```
{{< note >}}
-The score produced by default scheduling constraints might conflict with the
-score produced by the
-[`SelectorSpread` plugin](/docs/reference/scheduling/config/#scheduling-plugins).
-It is recommended that you disable this plugin in the scheduling profile when
-using default constraints for `PodTopologySpread`.
+[`SelectorSpread` plugin](/docs/reference/scheduling/config/#scheduling-plugins)
+is disabled by default. It's recommended to use `PodTopologySpread` to achieve similar
+behavior.
{{< /note >}}
-#### Internal default constraints
+#### Built-in default constraints {#internal-default-constraints}
-{{< feature-state for_k8s_version="v1.20" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
-With the `DefaultPodTopologySpread` feature gate, enabled by default, the
-legacy `SelectorSpread` plugin is disabled.
-kube-scheduler uses the following default topology constraints for the
-`PodTopologySpread` plugin configuration:
+If you don't configure any cluster-level default constraints for pod topology spreading,
+then kube-scheduler acts as if you specified the following default topology constraints:
```yaml
defaultConstraints:
@@ -341,7 +361,7 @@ defaultConstraints:
```
Also, the legacy `SelectorSpread` plugin, which provides an equivalent behavior,
-is disabled.
+is disabled by default.
{{< note >}}
The `PodTopologySpread` plugin does not score the nodes that don't have
diff --git a/content/en/docs/contribute/_index.md b/content/en/docs/contribute/_index.md
index 61a4e0a118..8627e8dd93 100644
--- a/content/en/docs/contribute/_index.md
+++ b/content/en/docs/contribute/_index.md
@@ -18,8 +18,15 @@ card:
{{< note >}}
To learn more about contributing to Kubernetes in general, see the
[contributor documentation](https://www.kubernetes.dev/docs/).
+
+You can also read the
+{{< glossary_tooltip text="CNCF" term_id="cncf" >}}
+[page](https://contribute.cncf.io/contributors/projects/#kubernetes)
+about contributing to Kubernetes.
{{< /note >}}
+---
+
This website is maintained by [Kubernetes SIG Docs](/docs/contribute/#get-involved-with-sig-docs).
Kubernetes documentation contributors:
diff --git a/content/en/docs/contribute/participate/pr-wranglers.md b/content/en/docs/contribute/participate/pr-wranglers.md
index 865af35805..42c1d2b32b 100644
--- a/content/en/docs/contribute/participate/pr-wranglers.md
+++ b/content/en/docs/contribute/participate/pr-wranglers.md
@@ -100,4 +100,4 @@ In late 2021, SIG Docs introduced the PR Wrangler Shadow Program. The program wa
- Others can reach out on the [#sig-docs Slack channel](https://kubernetes.slack.com/messages/sig-docs) for requesting to shadow an assigned PR Wrangler for a specific week. Feel free to reach out to Brad Topol (`@bradtopol`) or one of the [SIG Docs co-chairs/leads](https://github.com/kubernetes/community/tree/master/sig-docs#leadership).
-- Once you've signed up to shadow a PR Wrangler, introduce yourself to the PR Wrangler on the [Kubernetes Slack](slack.k8s.io).
\ No newline at end of file
+- Once you've signed up to shadow a PR Wrangler, introduce yourself to the PR Wrangler on the [Kubernetes Slack](https://slack.k8s.io).
diff --git a/content/en/docs/contribute/review/reviewing-prs.md b/content/en/docs/contribute/review/reviewing-prs.md
index 3e71e9c434..ec5ad21f6c 100644
--- a/content/en/docs/contribute/review/reviewing-prs.md
+++ b/content/en/docs/contribute/review/reviewing-prs.md
@@ -95,7 +95,7 @@ Figure 1. Review process steps.
1. Click on the `+` symbol beside the line you want to comment on.
2. Fill in any comments you have about the line and click either **Add single comment** (if you have only one comment to make) or **Start a review** (if you have multiple comments to make).
3. When finished, click **Review changes** at the top of the page. Here, you can add
- add a summary of your review (and leave some positive comments for the contributor!),
+ a summary of your review (and leave some positive comments for the contributor!),
approve the PR, comment or request changes as needed. New contributors should always
choose **Comment**.
diff --git a/content/en/docs/contribute/style/diagram-guide.md b/content/en/docs/contribute/style/diagram-guide.md
index 4024b44129..67e3ceb5e5 100644
--- a/content/en/docs/contribute/style/diagram-guide.md
+++ b/content/en/docs/contribute/style/diagram-guide.md
@@ -8,7 +8,7 @@ weight: 15
This guide shows you how to create, edit and share diagrams using the Mermaid
-Javascript library. Mermaid.js allows you to generate diagrams using a simple
+JavaScript library. Mermaid.js allows you to generate diagrams using a simple
markdown-like syntax inside Markdown files. You can also use Mermaid to
generate `.svg` or `.png` image files that you can add to your documentation.
diff --git a/content/en/docs/doc-contributor-tools/linkchecker/README.md b/content/en/docs/doc-contributor-tools/linkchecker/README.md
index a575c4d1fe..6d4b714655 100644
--- a/content/en/docs/doc-contributor-tools/linkchecker/README.md
+++ b/content/en/docs/doc-contributor-tools/linkchecker/README.md
@@ -46,7 +46,7 @@ To run the link checker:
2. Run the following command:
```
- make docker-internal-linkcheck
+ make container-internal-linkcheck
```
## Understanding the output
diff --git a/content/en/docs/home/supported-doc-versions.md b/content/en/docs/home/supported-doc-versions.md
index b955f95f56..fd3559a4d3 100644
--- a/content/en/docs/home/supported-doc-versions.md
+++ b/content/en/docs/home/supported-doc-versions.md
@@ -10,3 +10,8 @@ card:
This website contains documentation for the current version of Kubernetes
and the four previous versions of Kubernetes.
+
+The availability of documentation for a Kubernetes version is separate from whether
+that release is currently supported.
+Read [Support period](/releases/patch-releases/#support-period) to learn about
+which versions of Kubernetes are officially supported, and for how long.
\ No newline at end of file
diff --git a/content/en/docs/images/ingress.svg b/content/en/docs/images/ingress.svg
new file mode 100644
index 0000000000..450a0aae9b
--- /dev/null
+++ b/content/en/docs/images/ingress.svg
@@ -0,0 +1 @@
+cluster
Ingress-managed load balancer
routing rule
Ingress
Pod
Service
Pod
client
\ No newline at end of file
diff --git a/content/en/docs/images/ingressFanOut.svg b/content/en/docs/images/ingressFanOut.svg
new file mode 100644
index 0000000000..a6bf202635
--- /dev/null
+++ b/content/en/docs/images/ingressFanOut.svg
@@ -0,0 +1 @@
+cluster
Ingress-managed load balancer
/foo
/bar
Ingress, 178.91.123.132
Pod
Service service1:4200
Pod
Pod
Service service2:8080
Pod
client
\ No newline at end of file
diff --git a/content/en/docs/images/ingressNameBased.svg b/content/en/docs/images/ingressNameBased.svg
new file mode 100644
index 0000000000..7e1d7be98c
--- /dev/null
+++ b/content/en/docs/images/ingressNameBased.svg
@@ -0,0 +1 @@
+cluster
Ingress-managed load balancer
Host: foo.bar.com
Host: bar.foo.com
Ingress, 178.91.123.132
Pod
Service service1:80
Pod
Pod
Service service2:80
Pod
client
\ No newline at end of file
diff --git a/content/en/docs/images/tutor-service-nodePort-fig01.svg b/content/en/docs/images/tutor-service-nodePort-fig01.svg
new file mode 100644
index 0000000000..bb4d866f85
--- /dev/null
+++ b/content/en/docs/images/tutor-service-nodePort-fig01.svg
@@ -0,0 +1 @@
+
SNAT
SNAT
client
Node 2
Node 1
Endpoint
\ No newline at end of file
diff --git a/content/en/docs/images/tutor-service-nodePort-fig02.svg b/content/en/docs/images/tutor-service-nodePort-fig02.svg
new file mode 100644
index 0000000000..1a891575e5
--- /dev/null
+++ b/content/en/docs/images/tutor-service-nodePort-fig02.svg
@@ -0,0 +1 @@
+
client
Node 1
Node 2
endpoint
\ No newline at end of file
diff --git a/content/en/docs/reference/_index.md b/content/en/docs/reference/_index.md
index c41d20bdbb..403b84f7c2 100644
--- a/content/en/docs/reference/_index.md
+++ b/content/en/docs/reference/_index.md
@@ -77,9 +77,11 @@ operator to use or manage a cluster.
* [kube-apiserver configuration (v1alpha1)](/docs/reference/config-api/apiserver-config.v1alpha1/)
* [kube-apiserver configuration (v1)](/docs/reference/config-api/apiserver-config.v1/)
* [kube-apiserver encryption (v1)](/docs/reference/config-api/apiserver-encryption.v1/)
+* [kube-apiserver event rate limit (v1alpha1)](/docs/reference/config-api/apiserver-eventratelimit.v1/)
* [kubelet configuration (v1alpha1)](/docs/reference/config-api/kubelet-config.v1alpha1/) and
[kubelet configuration (v1beta1)](/docs/reference/config-api/kubelet-config.v1beta1/)
* [kubelet credential providers (v1alpha1)](/docs/reference/config-api/kubelet-credentialprovider.v1alpha1/)
+* [kubelet credential providers (v1beta1)](/docs/reference/config-api/kubelet-credentialprovider.v1beta1/)
* [kube-scheduler configuration (v1beta2)](/docs/reference/config-api/kube-scheduler-config.v1beta2/) and
[kube-scheduler configuration (v1beta3)](/docs/reference/config-api/kube-scheduler-config.v1beta3/)
* [kube-proxy configuration (v1alpha1)](/docs/reference/config-api/kube-proxy-config.v1alpha1/)
@@ -87,6 +89,7 @@ operator to use or manage a cluster.
* [Client authentication API (v1beta1)](/docs/reference/config-api/client-authentication.v1beta1/) and
[Client authentication API (v1)](/docs/reference/config-api/client-authentication.v1/)
* [WebhookAdmission configuration (v1)](/docs/reference/config-api/apiserver-webhookadmission.v1/)
+* [ImagePolicy API (v1alpha1)](/docs/reference/config-api/imagepolicy.v1alpha1/)
## Config API for kubeadm
diff --git a/content/en/docs/reference/access-authn-authz/abac.md b/content/en/docs/reference/access-authn-authz/abac.md
index 197901a170..4587bf1f83 100644
--- a/content/en/docs/reference/access-authn-authz/abac.md
+++ b/content/en/docs/reference/access-authn-authz/abac.md
@@ -33,13 +33,13 @@ properties:
- `group`, type string; if you specify `group`, it must match one of the groups of the authenticated user. `system:authenticated` matches all authenticated requests. `system:unauthenticated` matches all unauthenticated requests.
- Resource-matching properties:
- `apiGroup`, type string; an API group.
- - Ex: `extensions`
+ - Ex: `apps`, `networking.k8s.io`
- Wildcard: `*` matches all API groups.
- `namespace`, type string; a namespace.
- Ex: `kube-system`
- Wildcard: `*` matches all resource requests.
- `resource`, type string; a resource type
- - Ex: `pods`
+ - Ex: `pods`, `deployments`
- Wildcard: `*` matches all resource requests.
- Non-resource-matching properties:
- `nonResourcePath`, type string; non-resource request paths.
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 5150e03ec1..f03b04f8e3 100644
--- a/content/en/docs/reference/access-authn-authz/admission-controllers.md
+++ b/content/en/docs/reference/access-authn-authz/admission-controllers.md
@@ -94,7 +94,7 @@ kube-apiserver -h | grep enable-admission-plugins
In the current version, the default ones are:
```shell
-CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, DefaultStorageClass, DefaultTolerationSeconds, LimitRanger, MutatingAdmissionWebhook, NamespaceLifecycle, PersistentVolumeClaimResize, Priority, ResourceQuota, RuntimeClass, ServiceAccount, StorageObjectInUseProtection, TaintNodesByCondition, ValidatingAdmissionWebhook
+CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, DefaultStorageClass, DefaultTolerationSeconds, LimitRanger, MutatingAdmissionWebhook, NamespaceLifecycle, PersistentVolumeClaimResize, PodSecurity, Priority, ResourceQuota, RuntimeClass, ServiceAccount, StorageObjectInUseProtection, TaintNodesByCondition, ValidatingAdmissionWebhook
```
## What does each admission controller do?
@@ -139,7 +139,7 @@ requests with the `spec.signerName` requested on the CertificateSigningRequest r
See [Certificate Signing Requests](/docs/reference/access-authn-authz/certificate-signing-requests/) for more
information on the permissions required to perform different actions on CertificateSigningRequest resources.
-### CertificateSubjectRestrictions {#certificatesubjectrestrictions}
+### CertificateSubjectRestriction {#certificatesubjectrestriction}
This admission controller observes creation of CertificateSigningRequest resources that have a `spec.signerName`
of `kubernetes.io/kube-apiserver-client`. It rejects any request that specifies a 'group' (or 'organization attribute')
@@ -232,12 +232,10 @@ of it.
This admission controller mitigates the problem where the API server gets flooded by
event requests. The cluster admin can specify event rate limits by:
- * Enabling the `EventRateLimit` admission controller;
- * Referencing an `EventRateLimit` configuration file from the file provided to the API
- server's command line flag `--admission-control-config-file`:
+* Enabling the `EventRateLimit` admission controller;
+* Referencing an `EventRateLimit` configuration file from the file provided to the API
+ server's command line flag `--admission-control-config-file`:
-{{< tabs name="eventratelimit_example" >}}
-{{% tab name="apiserver.config.k8s.io/v1" %}}
```yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
@@ -246,19 +244,6 @@ plugins:
path: eventconfig.yaml
...
```
-{{% /tab %}}
-{{% tab name="apiserver.k8s.io/v1alpha1" %}}
-```yaml
-# Deprecated in v1.17 in favor of apiserver.config.k8s.io/v1
-apiVersion: apiserver.k8s.io/v1alpha1
-kind: AdmissionConfiguration
-plugins:
-- name: EventRateLimit
- path: eventconfig.yaml
-...
-```
-{{% /tab %}}
-{{< /tabs >}}
There are four types of limits that can be specified in the configuration:
@@ -283,7 +268,7 @@ limits:
burst: 50
```
-See the [EventRateLimit proposal](https://git.k8s.io/community/contributors/design-proposals/api-machinery/admission_control_event_rate_limit.md)
+See the [EventRateLimit Config API (v1alpha1)](/docs/reference/config-api/apiserver-eventratelimit.v1alpha1/)
for more details.
### ExtendedResourceToleration {#extendedresourcetoleration}
@@ -319,8 +304,6 @@ imagePolicy:
Reference the ImagePolicyWebhook configuration file from the file provided to the API server's command line flag `--admission-control-config-file`:
-{{< tabs name="imagepolicywebhook_example1" >}}
-{{% tab name="apiserver.config.k8s.io/v1" %}}
```yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
@@ -329,24 +312,9 @@ plugins:
path: imagepolicyconfig.yaml
...
```
-{{% /tab %}}
-{{% tab name="apiserver.k8s.io/v1alpha1" %}}
-```yaml
-# Deprecated in v1.17 in favor of apiserver.config.k8s.io/v1
-apiVersion: apiserver.k8s.io/v1alpha1
-kind: AdmissionConfiguration
-plugins:
-- name: ImagePolicyWebhook
- path: imagepolicyconfig.yaml
-...
-```
-{{% /tab %}}
-{{< /tabs >}}
Alternatively, you can embed the configuration directly in the file:
-{{< tabs name="imagepolicywebhook_example2" >}}
-{{% tab name="apiserver.config.k8s.io/v1" %}}
```yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
@@ -360,31 +328,14 @@ plugins:
retryBackoff: 500
defaultAllow: true
```
-{{% /tab %}}
-{{% tab name="apiserver.k8s.io/v1alpha1" %}}
-```yaml
-# Deprecated in v1.17 in favor of apiserver.config.k8s.io/v1
-apiVersion: apiserver.k8s.io/v1alpha1
-kind: AdmissionConfiguration
-plugins:
-- name: ImagePolicyWebhook
- configuration:
- imagePolicy:
- kubeConfigFile:
- allowTTL: 50
- denyTTL: 50
- retryBackoff: 500
- defaultAllow: true
-```
-{{% /tab %}}
-{{< /tabs >}}
The ImagePolicyWebhook config file must reference a
[kubeconfig](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)
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.
+The kubeconfig file's `cluster` field must point to the remote service, and the `user` field
+must contain the returned authorizer.
```yaml
# clusters refers to the remote service.
@@ -405,11 +356,21 @@ users:
For additional HTTP configuration, refer to the
[kubeconfig](/docs/tasks/access-application-cluster/configure-access-multiple-clusters/) documentation.
-#### Request Payloads
+#### Request payloads
-When faced with an admission decision, the API Server POSTs a JSON serialized `imagepolicy.k8s.io/v1alpha1` `ImageReview` object describing the action. This object contains fields describing the containers being admitted, as well as any pod annotations that match `*.image-policy.k8s.io/*`.
+When faced with an admission decision, the API Server POSTs a JSON serialized
+`imagepolicy.k8s.io/v1alpha1` `ImageReview` object describing the action.
+This object contains fields describing the containers being admitted, as well as
+any pod annotations that match `*.image-policy.k8s.io/*`.
-Note that webhook API objects are subject to the same versioning compatibility rules as other Kubernetes API objects. Implementers should be aware of looser compatibility promises for alpha objects and check the "apiVersion" field of the request to ensure correct deserialization. Additionally, the API Server must enable the imagepolicy.k8s.io/v1alpha1 API extensions group (`--runtime-config=imagepolicy.k8s.io/v1alpha1=true`).
+{{ note }}
+The webhook API objects are subject to the same versioning compatibility rules
+as other Kubernetes API objects. Implementers should be aware of looser compatibility
+promises for alpha objects and check the `apiVersion` field of the request to
+ensure correct deserialization.
+Additionally, the API Server must enable the `imagepolicy.k8s.io/v1alpha1` API extensions
+group (`--runtime-config=imagepolicy.k8s.io/v1alpha1=true`).
+{{ /note }}
An example request body:
@@ -434,7 +395,9 @@ An example request body:
}
```
-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
{
@@ -459,19 +422,23 @@ To disallow access, the service would return:
}
```
-For further documentation refer to the `imagepolicy.v1alpha1` API objects and `plugin/pkg/admission/imagepolicy/admission.go`.
+For further documentation refer to the
+[`imagepolicy.v1alpha1` API](/docs/reference/config-api/imagepolicy.v1alpha1/).
#### Extending with Annotations
-All annotations on a Pod that match `*.image-policy.k8s.io/*` are sent to the webhook. Sending annotations allows users who are aware of the image policy backend to send extra information to it, and for different backends implementations to accept different information.
+All annotations on a Pod that match `*.image-policy.k8s.io/*` are sent to the webhook.
+Sending annotations allows users who are aware of the image policy backend to
+send extra information to it, and for different backends implementations to
+accept different information.
Examples of information you might put here are:
- * request to "break glass" to override a policy, in case of emergency.
- * 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
+* request to "break glass" to override a policy, in case of emergency.
+* 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.
### LimitPodHardAntiAffinityTopology {#limitpodhardantiaffinitytopology}
@@ -480,14 +447,16 @@ This admission controller denies any pod that defines `AntiAffinity` topology ke
### LimitRanger {#limitranger}
-This admission controller will observe the incoming request and ensure that it does not violate any of the constraints
-enumerated in the `LimitRange` object in a `Namespace`. If you are using `LimitRange` objects in
-your Kubernetes deployment, you MUST use this admission controller to enforce those constraints. LimitRanger can also
-be used to apply default resource requests to Pods that don't specify any; currently, the default LimitRanger
-applies a 0.1 CPU requirement to all Pods in the `default` namespace.
+This admission controller will observe the incoming request and ensure that it does not violate
+any of the constraints enumerated in the `LimitRange` object in a `Namespace`. If you are using
+`LimitRange` objects in your Kubernetes deployment, you MUST use this admission controller to
+enforce those constraints. LimitRanger can also be used to apply default resource requests to Pods
+that don't specify any; currently, the default LimitRanger applies a 0.1 CPU requirement to all
+Pods in the `default` namespace.
-See the [limitRange design doc](https://git.k8s.io/community/contributors/design-proposals/resource-management/admission_control_limit_range.md)
-and the [example of Limit Range](/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/) for more details.
+See the [LimitRange API reference](/docs/reference/kubernetes-api/policy-resources/limit-range-v1/)
+and the [example of LimitRange](/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)
+for more details.
### MutatingAdmissionWebhook {#mutatingadmissionwebhook}
@@ -502,21 +471,20 @@ webhooks or validating admission controllers will permit the request to finish.
If you disable the MutatingAdmissionWebhook, you must also disable the
`MutatingWebhookConfiguration` object in the `admissionregistration.k8s.io/v1`
-group/version via the `--runtime-config` flag (both are on by default in
-versions >= 1.9).
+group/version via the `--runtime-config` flag, both are on by default.
#### Use caution when authoring and installing mutating webhooks
- * Users may be confused when the objects they try to create are different from
- what they get back.
- * Built in control loops may break when the objects they try to create are
- different when read back.
- * Setting originally unset fields is less likely to cause problems than
- overwriting fields set in the original request. Avoid doing the latter.
- * Future changes to control loops for built-in resources or third-party resources
- may break webhooks that work well today. Even when the webhook installation API
- is finalized, not all possible webhook behaviors will be guaranteed to be supported
- indefinitely.
+* Users may be confused when the objects they try to create are different from
+ what they get back.
+* Built in control loops may break when the objects they try to create are
+ different when read back.
+ * Setting originally unset fields is less likely to cause problems than
+ overwriting fields set in the original request. Avoid doing the latter.
+* Future changes to control loops for built-in resources or third-party resources
+ may break webhooks that work well today. Even when the webhook installation API
+ is finalized, not all possible webhook behaviors will be guaranteed to be supported
+ indefinitely.
### NamespaceAutoProvision {#namespaceautoprovision}
@@ -533,26 +501,28 @@ If the namespace referenced from a request doesn't exist, the request is rejecte
### NamespaceLifecycle {#namespacelifecycle}
-This admission controller enforces that a `Namespace` that is undergoing termination cannot have new objects created in it,
-and ensures that requests in a non-existent `Namespace` are rejected. This admission controller also prevents deletion of
-three system reserved namespaces `default`, `kube-system`, `kube-public`.
+This admission controller enforces that a `Namespace` that is undergoing termination cannot have
+new objects created in it, and ensures that requests in a non-existent `Namespace` are rejected.
+This admission controller also prevents deletion of three system reserved namespaces `default`,
+`kube-system`, `kube-public`.
-A `Namespace` deletion kicks off a sequence of operations that remove all objects (pods, services, etc.) in that
-namespace. In order to enforce integrity of that process, we strongly recommend running this admission controller.
+A `Namespace` deletion kicks off a sequence of operations that remove all objects (pods, services,
+etc.) in that namespace. In order to enforce integrity of that process, we strongly recommend
+running this admission controller.
### NodeRestriction {#noderestriction}
This admission controller limits the `Node` and `Pod` objects a kubelet can modify. In order to be limited by this admission controller,
kubelets must use credentials in the `system:nodes` group, with a username in the form `system:node:`.
Such kubelets will only be allowed to modify their own `Node` API object, and only modify `Pod` API objects that are bound to their node.
-In Kubernetes 1.11+, kubelets are not allowed to update or remove taints from their `Node` API object.
+kubelets are not allowed to update or remove taints from their `Node` API object.
-In Kubernetes 1.13+, the `NodeRestriction` admission plugin prevents kubelets from deleting their `Node` API object,
+The `NodeRestriction` admission plugin prevents kubelets from deleting their `Node` API object,
and enforces kubelet modification of labels under the `kubernetes.io/` or `k8s.io/` prefixes as follows:
* **Prevents** kubelets from adding/removing/updating labels with a `node-restriction.kubernetes.io/` prefix.
-This label prefix is reserved for administrators to label their `Node` objects for workload isolation purposes,
-and kubelets will not be allowed to modify labels with that prefix.
+ This label prefix is reserved for administrators to label their `Node` objects for workload isolation purposes,
+ and kubelets will not be allowed to modify labels with that prefix.
* **Allows** kubelets to add/remove/update these labels and label prefixes:
* `kubernetes.io/hostname`
* `kubernetes.io/arch`
@@ -566,9 +536,11 @@ and kubelets will not be allowed to modify labels with that prefix.
* `kubelet.kubernetes.io/`-prefixed labels
* `node.kubernetes.io/`-prefixed labels
-Use of any other labels under the `kubernetes.io` or `k8s.io` prefixes by kubelets is reserved, and may be disallowed or allowed by the `NodeRestriction` admission plugin in the future.
+Use of any other labels under the `kubernetes.io` or `k8s.io` prefixes by kubelets is reserved,
+and may be disallowed or allowed by the `NodeRestriction` admission plugin in the future.
-Future versions may add additional restrictions to ensure kubelets have the minimal set of permissions required to operate correctly.
+Future versions may add additional restrictions to ensure kubelets have the minimal set of
+permissions required to operate correctly.
### OwnerReferencesPermissionEnforcement {#ownerreferencespermissionenforcement}
@@ -580,16 +552,13 @@ subresource of the referenced *owner* can change it.
### PersistentVolumeClaimResize {#persistentvolumeclaimresize}
-This admission controller implements additional validations for checking incoming `PersistentVolumeClaim` resize requests.
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
-{{< note >}}
-Support for volume resizing is available as a beta feature. As a cluster administrator,
-you must ensure that the feature gate `ExpandPersistentVolumes` is set
-to `true` to enable resizing.
-{{< /note >}}
+This admission controller implements additional validations for checking incoming
+`PersistentVolumeClaim` resize requests.
-After enabling the `ExpandPersistentVolumes` feature gate, enabling the `PersistentVolumeClaimResize` admission
-controller is recommended, too. This admission controller prevents resizing of all claims by default unless a claim's `StorageClass`
+Enabling the `PersistentVolumeClaimResize` admission controller is recommended.
+This admission controller prevents resizing of all claims by default unless a claim's `StorageClass`
explicitly enables resizing by setting `allowVolumeExpansion` to `true`.
For example: all `PersistentVolumeClaim`s created from the following `StorageClass` support volume expansion:
@@ -628,9 +597,10 @@ Starting from 1.11, this admission controller is disabled by default.
{{< feature-state for_k8s_version="v1.5" state="alpha" >}}
-This admission controller defaults and limits what node selectors may be used within a namespace by reading a namespace annotation and a global configuration.
+This admission controller defaults and limits what node selectors may be used within a namespace
+by reading a namespace annotation and a global configuration.
-#### Configuration File Format
+#### Configuration file format
`PodNodeSelector` uses a configuration file to set options for the behavior of the backend.
Note that the configuration file format will move to a versioned file in a future release.
@@ -643,10 +613,9 @@ podNodeSelectorPluginConfig:
namespace2: name-of-node-selector
```
-Reference the `PodNodeSelector` configuration file from the file provided to the API server's command line flag `--admission-control-config-file`:
+Reference the `PodNodeSelector` configuration file from the file provided to the API server's
+command line flag `--admission-control-config-file`:
-{{< tabs name="podnodeselector_example1" >}}
-{{% tab name="apiserver.config.k8s.io/v1" %}}
```yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
@@ -655,22 +624,11 @@ plugins:
path: podnodeselector.yaml
...
```
-{{% /tab %}}
-{{% tab name="apiserver.k8s.io/v1alpha1" %}}
-```yaml
-# Deprecated in v1.17 in favor of apiserver.config.k8s.io/v1
-apiVersion: apiserver.k8s.io/v1alpha1
-kind: AdmissionConfiguration
-plugins:
-- name: PodNodeSelector
- path: podnodeselector.yaml
-...
-```
-{{% /tab %}}
-{{< /tabs >}}
#### Configuration Annotation Format
-`PodNodeSelector` uses the annotation key `scheduler.alpha.kubernetes.io/node-selector` to assign node selectors to namespaces.
+
+`PodNodeSelector` uses the annotation key `scheduler.alpha.kubernetes.io/node-selector` to assign
+node selectors to namespaces.
```yaml
apiVersion: v1
@@ -682,15 +640,17 @@ metadata:
```
#### Internal Behavior
+
This admission controller has the following behavior:
-1. If the `Namespace` has an annotation with a key `scheduler.alpha.kubernetes.io/node-selector`, use its value as the
-node selector.
-2. If the namespace lacks such an annotation, use the `clusterDefaultNodeSelector` defined in the `PodNodeSelector`
-plugin configuration file as the node selector.
-3. Evaluate the pod's node selector against the namespace node selector for conflicts. Conflicts result in rejection.
-4. Evaluate the pod's node selector against the namespace-specific allowed selector defined the plugin configuration file.
-Conflicts result in rejection.
+1. If the `Namespace` has an annotation with a key `scheduler.alpha.kubernetes.io/node-selector`,
+ use its value as the node selector.
+2. If the namespace lacks such an annotation, use the `clusterDefaultNodeSelector` defined in the
+ `PodNodeSelector` plugin configuration file as the node selector.
+3. Evaluate the pod's node selector against the namespace node selector for conflicts. Conflicts
+ result in rejection.
+4. Evaluate the pod's node selector against the namespace-specific allowed selector defined the
+ plugin configuration file. Conflicts result in rejection.
{{< note >}}
PodNodeSelector allows forcing pods to run on specifically labeled nodes. Also see the PodTolerationRestriction
@@ -723,7 +683,8 @@ for more information.
{{< feature-state for_k8s_version="v1.7" state="alpha" >}}
-The PodTolerationRestriction admission controller verifies any conflict between tolerations of a pod and the tolerations of its namespace.
+The PodTolerationRestriction admission controller verifies any conflict between tolerations of a
+pod and the tolerations of its namespace.
It rejects the pod request if there is a conflict.
It then merges the tolerations annotated on the namespace into the tolerations of the pod.
The resulting tolerations are checked against a list of allowed tolerations annotated to the namespace.
@@ -750,27 +711,31 @@ metadata:
### Priority {#priority}
-The priority admission controller uses the `priorityClassName` field and populates the integer value of the priority. If the priority class is not found, the Pod is rejected.
+The priority admission controller uses the `priorityClassName` field and populates the integer
+value of the priority.
+If the priority class is not found, the Pod is rejected.
### ResourceQuota {#resourcequota}
-This admission controller will observe the incoming request and ensure that it does not violate any of the constraints
-enumerated in the `ResourceQuota` object in a `Namespace`. If you are using `ResourceQuota`
-objects in your Kubernetes deployment, you MUST use this admission controller to enforce quota constraints.
+This admission controller will observe the incoming request and ensure that it does not violate
+any of the constraints enumerated in the `ResourceQuota` object in a `Namespace`. If you are
+using `ResourceQuota` objects in your Kubernetes deployment, you MUST use this admission
+controller to enforce quota constraints.
-See the [resourceQuota design doc](https://git.k8s.io/community/contributors/design-proposals/resource-management/admission_control_resource_quota.md) and the [example of Resource Quota](/docs/concepts/policy/resource-quotas/) for more details.
+See the [ResourceQuota API reference](/docs/reference/kubernetes-api/policy-resources/resource-quota-v1/)
+and the [example of Resource Quota](/docs/concepts/policy/resource-quotas/) for more details.
### RuntimeClass {#runtimeclass}
{{< feature-state for_k8s_version="v1.20" state="stable" >}}
-If you enable the `PodOverhead` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/), and define a RuntimeClass with [Pod overhead](/docs/concepts/scheduling-eviction/pod-overhead/) configured, this admission controller checks incoming
-Pods. When enabled, this admission controller rejects any Pod create requests that have the overhead already set.
-For Pods that have a RuntimeClass is configured and selected in their `.spec`, this admission controller sets `.spec.overhead` in the Pod based on the value defined in the corresponding RuntimeClass.
-
-{{< note >}}
-The `.spec.overhead` field for Pod and the `.overhead` field for RuntimeClass are both in beta. If you do not enable the `PodOverhead` feature gate, all Pods are treated as if `.spec.overhead` is unset.
-{{< /note >}}
+If you define a RuntimeClass with [Pod overhead](/docs/concepts/scheduling-eviction/pod-overhead/)
+configured, this admission controller checks incoming Pods.
+When enabled, this admission controller rejects any Pod create requests
+that have the overhead already set.
+For Pods that have a RuntimeClass configured and selected in their `.spec`,
+this admission controller sets `.spec.overhead` in the Pod based on the value
+defined in the corresponding RuntimeClass.
See also [Pod Overhead](/docs/concepts/scheduling-eviction/pod-overhead/)
for more information.
@@ -793,14 +758,15 @@ pod privileges.
This admission controller implements automation for
[serviceAccounts](/docs/tasks/configure-pod-container/configure-service-account/).
-We strongly recommend using this admission controller if you intend to make use of Kubernetes `ServiceAccount` objects.
+We strongly recommend using this admission controller if you intend to make use of Kubernetes
+`ServiceAccount` objects.
### StorageObjectInUseProtection
The `StorageObjectInUseProtection` plugin adds the `kubernetes.io/pvc-protection` or `kubernetes.io/pv-protection`
finalizers to newly created Persistent Volume Claims (PVCs) or Persistent Volumes (PV).
In case a user deletes a PVC or PV the PVC or PV is not removed until the finalizer is removed
-from the PVC or PV by PVC or PV Protection Controller.
+from the PVC or PV by PVC or PV Protection Controller.
Refer to the
[Storage Object in Use Protection](/docs/concepts/storage/persistent-volumes/#storage-object-in-use-protection)
for more detailed information.
@@ -809,7 +775,10 @@ for more detailed information.
{{< feature-state for_k8s_version="v1.17" state="stable" >}}
-This admission controller {{< glossary_tooltip text="taints" term_id="taint" >}} newly created Nodes as `NotReady` and `NoSchedule`. That tainting avoids 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 controller {{< glossary_tooltip text="taints" term_id="taint" >}} newly created
+Nodes as `NotReady` and `NoSchedule`. That tainting avoids a race condition that could cause Pods
+to be scheduled on new Nodes before their taints were updated to accurately reflect their reported
+conditions.
### ValidatingAdmissionWebhook {#validatingadmissionwebhook}
@@ -827,11 +796,11 @@ If you disable the ValidatingAdmissionWebhook, you must also disable the
group/version via the `--runtime-config` flag (both are on by default in
versions 1.9 and later).
-
## Is there a recommended set of admission controllers to use?
-Yes. The recommended admission controllers are enabled by default (shown [here](/docs/reference/command-line-tools-reference/kube-apiserver/#options)), so you do not need to explicitly specify them. You can enable additional admission controllers beyond the default set using the `--enable-admission-plugins` flag (**order doesn't matter**).
+Yes. The recommended admission controllers are enabled by default
+(shown [here](/docs/reference/command-line-tools-reference/kube-apiserver/#options)),
+so you do not need to explicitly specify them.
+You can enable additional admission controllers beyond the default set using the
+`--enable-admission-plugins` flag (**order doesn't matter**).
-{{< note >}}
-`--admission-control` was deprecated in 1.10 and replaced with `--enable-admission-plugins`.
-{{< /note >}}
diff --git a/content/en/docs/reference/access-authn-authz/authentication.md b/content/en/docs/reference/access-authn-authz/authentication.md
index bcec107182..b33b239199 100644
--- a/content/en/docs/reference/access-authn-authz/authentication.md
+++ b/content/en/docs/reference/access-authn-authz/authentication.md
@@ -905,7 +905,7 @@ users:
#
# The API version returned by the plugin MUST match the version listed here.
#
- # To integrate with tools that support multiple versions (such as client.authentication.k8s.io/v1alpha1),
+ # To integrate with tools that support multiple versions (such as client.authentication.k8s.io/v1beta1),
# set an environment variable, pass an argument to the tool that indicates which version the exec plugin expects,
# or read the version from the ExecCredential object in the KUBERNETES_EXEC_INFO environment variable.
apiVersion: "client.authentication.k8s.io/v1"
@@ -978,7 +978,7 @@ users:
#
# The API version returned by the plugin MUST match the version listed here.
#
- # To integrate with tools that support multiple versions (such as client.authentication.k8s.io/v1alpha1),
+ # To integrate with tools that support multiple versions (such as client.authentication.k8s.io/v1),
# set an environment variable, pass an argument to the tool that indicates which version the exec plugin expects,
# or read the version from the ExecCredential object in the KUBERNETES_EXEC_INFO environment variable.
apiVersion: "client.authentication.k8s.io/v1beta1"
diff --git a/content/en/docs/reference/access-authn-authz/bootstrap-tokens.md b/content/en/docs/reference/access-authn-authz/bootstrap-tokens.md
index 7e743be63d..b8a7faa946 100644
--- a/content/en/docs/reference/access-authn-authz/bootstrap-tokens.md
+++ b/content/en/docs/reference/access-authn-authz/bootstrap-tokens.md
@@ -70,7 +70,7 @@ controller on the controller manager.
Each valid token is backed by a secret in the `kube-system` namespace. You can
find the full design doc
-[here](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/cluster-lifecycle/bootstrap-discovery.md).
+[here](https://github.com/kubernetes/design-proposals-archive/blob/main/cluster-lifecycle/bootstrap-discovery.md).
Here is what the secret looks like.
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 8d0f9694ce..6f7154cc8a 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
@@ -1396,7 +1396,7 @@ monitoring mechanisms help cluster admins to answer questions like:
Sometimes it's useful to know which mutating webhook mutated the object in a API request, and what change did the
webhook apply.
-In v1.16+, kube-apiserver performs [auditing](/docs/tasks/debug-application-cluster/audit/) on each mutating webhook
+In v1.16+, kube-apiserver performs [auditing](/docs/tasks/debug/debug-cluster/audit/) on each mutating webhook
invocation. Each invocation generates an auditing annotation
capturing if a request object is mutated by the invocation, and optionally generates an annotation capturing the applied
patch from the webhook admission response. The annotations are set in the audit event for given request on given stage of
diff --git a/content/en/docs/reference/access-authn-authz/rbac.md b/content/en/docs/reference/access-authn-authz/rbac.md
index f17b9ae8dd..57a074a29a 100644
--- a/content/en/docs/reference/access-authn-authz/rbac.md
+++ b/content/en/docs/reference/access-authn-authz/rbac.md
@@ -31,7 +31,7 @@ kube-apiserver --authorization-mode=Example,RBAC --other-options --more-options
The RBAC API declares four kinds of Kubernetes object: _Role_, _ClusterRole_,
_RoleBinding_ and _ClusterRoleBinding_. You can
[describe objects](/docs/concepts/overview/working-with-objects/kubernetes-objects/#understanding-kubernetes-objects),
-or amend them, using tools such as `kubectl,` just like any other Kubernetes object.
+or amend them, using tools such as `kubectl`, just like any other Kubernetes object.
{{< caution >}}
These objects, by design, impose access restrictions. If you are making changes
@@ -384,11 +384,11 @@ rules:
```
Allow reading/writing Deployments (at the HTTP level: objects with `"deployments"`
-in the resource part of their URL) in both the `"extensions"` and `"apps"` API groups:
+in the resource part of their URL) in the `"apps"` API groups:
```yaml
rules:
-- apiGroups: ["extensions", "apps"]
+- apiGroups: ["apps"]
#
# at the HTTP level, the name of the resource for accessing Deployment
# objects is "deployments"
@@ -397,7 +397,7 @@ rules:
```
Allow reading Pods in the core API group, as well as reading or writing Job
-resources in the `"batch"` or `"extensions"` API groups:
+resources in the `"batch"` API group:
```yaml
rules:
@@ -407,7 +407,7 @@ rules:
# objects is "pods"
resources: ["pods"]
verbs: ["get", "list", "watch"]
-- apiGroups: ["batch", "extensions"]
+- apiGroups: ["batch"]
#
# at the HTTP level, the name of the resource for accessing Job
# objects is "jobs"
@@ -517,7 +517,7 @@ subjects:
namespace: kube-system
```
-For all service accounts in the "qa" group in any namespace:
+For all service accounts in the "qa" namespace:
```yaml
subjects:
@@ -525,15 +525,6 @@ subjects:
name: system:serviceaccounts:qa
apiGroup: rbac.authorization.k8s.io
```
-For all service accounts in the "dev" group in the "development" namespace:
-
-```yaml
-subjects:
-- kind: Group
- name: system:serviceaccounts:dev
- apiGroup: rbac.authorization.k8s.io
- namespace: development
-```
For all service accounts in any namespace:
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 f6dbbb97a8..8eb23b3a47 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
@@ -61,10 +61,9 @@ different Kubernetes components.
| `APIServerIdentity` | `false` | Alpha | 1.20 | |
| `APIServerTracing` | `false` | Alpha | 1.22 | |
| `AllowInsecureBackendProxy` | `true` | Beta | 1.17 | |
-| `AnyVolumeDataSource` | `false` | Alpha | 1.18 | |
+| `AnyVolumeDataSource` | `false` | Alpha | 1.18 | 1.23 |
+| `AnyVolumeDataSource` | `true` | Beta | 1.24 | |
| `AppArmor` | `true` | Beta | 1.4 | |
-| `ControllerManagerLeaderMigration` | `false` | Alpha | 1.21 | 1.21 |
-| `ControllerManagerLeaderMigration` | `true` | Beta | 1.22 | |
| `CPUManager` | `false` | Alpha | 1.8 | 1.9 |
| `CPUManager` | `true` | Beta | 1.10 | |
| `CPUManagerPolicyAlphaOptions` | `false` | Alpha | 1.23 | |
@@ -78,31 +77,21 @@ different Kubernetes components.
| `CSIMigrationAWS` | `false` | Alpha | 1.14 | 1.16 |
| `CSIMigrationAWS` | `false` | Beta | 1.17 | 1.22 |
| `CSIMigrationAWS` | `true` | Beta | 1.23 | |
-| `CSIMigrationAzureDisk` | `false` | Alpha | 1.15 | 1.18 |
-| `CSIMigrationAzureDisk` | `false` | Beta | 1.19 | 1.22 |
-| `CSIMigrationAzureDisk` | `true` | Beta | 1.23 | |
| `CSIMigrationAzureFile` | `false` | Alpha | 1.15 | 1.19 |
-| `CSIMigrationAzureFile` | `false` | Beta | 1.21 | |
+| `CSIMigrationAzureFile` | `false` | Beta | 1.21 | 1.23 |
+| `CSIMigrationAzureFile` | `true` | Beta | 1.24 | |
| `CSIMigrationGCE` | `false` | Alpha | 1.14 | 1.16 |
| `CSIMigrationGCE` | `false` | Beta | 1.17 | 1.22 |
| `CSIMigrationGCE` | `true` | Beta | 1.23 | |
-| `CSIMigrationOpenStack` | `false` | Alpha | 1.14 | 1.17 |
-| `CSIMigrationOpenStack` | `true` | Beta | 1.18 | |
| `CSIMigrationvSphere` | `false` | Beta | 1.19 | |
| `CSIMigrationPortworx` | `false` | Alpha | 1.23 | |
| `csiMigrationRBD` | `false` | Alpha | 1.23 | |
-| `CSIStorageCapacity` | `false` | Alpha | 1.19 | 1.20 |
-| `CSIStorageCapacity` | `true` | Beta | 1.21 | |
| `CSIVolumeHealth` | `false` | Alpha | 1.21 | |
-| `CSRDuration` | `true` | Beta | 1.22 | |
-| `ControllerManagerLeaderMigration` | `false` | Alpha | 1.21 | 1.21 |
-| `ControllerManagerLeaderMigration` | `true` | Beta | 1.22 | |
+| `ContextualLogging` | `false` | Alpha | 1.24 | |
| `CustomCPUCFSQuotaPeriod` | `false` | Alpha | 1.12 | |
| `CustomResourceValidationExpressions` | `false` | Alpha | 1.23 | |
| `DaemonSetUpdateSurge` | `false` | Alpha | 1.21 | 1.21 |
| `DaemonSetUpdateSurge` | `true` | Beta | 1.22 | |
-| `DefaultPodTopologySpread` | `false` | Alpha | 1.19 | 1.19 |
-| `DefaultPodTopologySpread` | `true` | Beta | 1.20 | |
| `DelegateFSGroupToCSIDriver` | `false` | Alpha | 1.22 | 1.22 |
| `DelegateFSGroupToCSIDriver` | `true` | Beta | 1.23 | |
| `DevicePlugins` | `false` | Alpha | 1.8 | 1.9 |
@@ -112,32 +101,25 @@ different Kubernetes components.
| `DisableCloudProviders` | `false` | Alpha | 1.22 | |
| `DisableKubeletCloudCredentialProviders` | `false` | Alpha | 1.23 | |
| `DownwardAPIHugePages` | `false` | Alpha | 1.20 | 1.20 |
-| `DownwardAPIHugePages` | `false` | Beta | 1.21 | |
-| `EfficientWatchResumption` | `false` | Alpha | 1.20 | 1.20 |
-| `EfficientWatchResumption` | `true` | Beta | 1.21 | |
+| `DownwardAPIHugePages` | `false` | Beta | 1.21 | 1.21 |
+| `DownwardAPIHugePages` | `true` | Beta | 1.22 | |
| `EndpointSliceTerminatingCondition` | `false` | Alpha | 1.20 | 1.21 |
| `EndpointSliceTerminatingCondition` | `true` | Beta | 1.22 | |
| `EphemeralContainers` | `false` | Alpha | 1.16 | 1.22 |
| `EphemeralContainers` | `true` | Beta | 1.23 | |
-| `ExpandCSIVolumes` | `false` | Alpha | 1.14 | 1.15 |
-| `ExpandCSIVolumes` | `true` | Beta | 1.16 | |
| `ExpandedDNSConfig` | `false` | Alpha | 1.22 | |
-| `ExpandInUsePersistentVolumes` | `false` | Alpha | 1.11 | 1.14 |
-| `ExpandInUsePersistentVolumes` | `true` | Beta | 1.15 | |
-| `ExpandPersistentVolumes` | `false` | Alpha | 1.8 | 1.10 |
-| `ExpandPersistentVolumes` | `true` | Beta | 1.11 | |
| `ExperimentalHostUserNamespaceDefaulting` | `false` | Beta | 1.5 | |
| `GracefulNodeShutdown` | `false` | Alpha | 1.20 | 1.20 |
| `GracefulNodeShutdown` | `true` | Beta | 1.21 | |
-| `GracefulNodeShutdownBasedOnPodPriority` | `false` | Alpha | 1.23 | |
+| `GracefulNodeShutdownBasedOnPodPriority` | `false` | Alpha | 1.23 | 1.23 |
| `GracefulNodeShutdownBasedOnPodPriority` | `true` | Beta | 1.24 | |
-| `GRPCContainerProbe` | `false` | Alpha | 1.23 | |
-| `HonorPVReclaimPolicy` | `false` | Alpha | 1.23 | |
+| `GRPCContainerProbe` | `false` | Alpha | 1.23 | 1.23 |
+| `GRPCContainerProbe` | `true` | Beta | 1.24 | |
+| `HonorPVReclaimPolicy` | `false` | Alpha | 1.23 | |
| `HPAContainerMetrics` | `false` | Alpha | 1.20 | |
| `HPAScaleToZero` | `false` | Alpha | 1.16 | |
-| `IdentifyPodOS` | `false` | Alpha | 1.23 | |
-| `IndexedJob` | `false` | Alpha | 1.21 | 1.21 |
-| `IndexedJob` | `true` | Beta | 1.22 | |
+| `IdentifyPodOS` | `false` | Alpha | 1.23 | 1.23 |
+| `IdentifyPodOS` | `true` | Beta | 1.24 | |
| `InTreePluginAWSUnregister` | `false` | Alpha | 1.21 | |
| `InTreePluginAzureDiskUnregister` | `false` | Alpha | 1.21 | |
| `InTreePluginAzureFileUnregister` | `false` | Alpha | 1.21 | |
@@ -147,42 +129,44 @@ different Kubernetes components.
| `InTreePluginRBDUnregister` | `false` | Alpha | 1.23 | |
| `InTreePluginvSphereUnregister` | `false` | Alpha | 1.21 | |
| `JobMutableNodeSchedulingDirectives` | `true` | Beta | 1.23 | |
-| `JobReadyPods` | `false` | Alpha | 1.23 | |
+| `JobReadyPods` | `false` | Alpha | 1.23 | 1.23 |
+| `JobReadyPods` | `true` | Beta | 1.24 | |
| `JobTrackingWithFinalizers` | `false` | Alpha | 1.22 | 1.22 |
-| `JobTrackingWithFinalizers` | `true` | Beta | 1.23 | |
-| `KubeletCredentialProviders` | `false` | Alpha | 1.20 | |
+| `JobTrackingWithFinalizers` | `true` | Beta | 1.23 | 1.23 |
+| `JobTrackingWithFinalizers` | `false` | Beta | 1.24 | |
+| `KubeletCredentialProviders` | `false` | Alpha | 1.20 | 1.23 |
+| `KubeletCredentialProviders` | `true` | Beta | 1.24 | |
| `KubeletInUserNamespace` | `false` | Alpha | 1.22 | |
| `KubeletPodResources` | `false` | Alpha | 1.13 | 1.14 |
| `KubeletPodResources` | `true` | Beta | 1.15 | |
| `KubeletPodResourcesGetAllocatable` | `false` | Alpha | 1.21 | 1.22 |
-| `KubeletPodResourcesGetAllocatable` | `false` | Beta | 1.23 | |
+| `KubeletPodResourcesGetAllocatable` | `true` | Beta | 1.23 | |
| `LocalStorageCapacityIsolation` | `false` | Alpha | 1.7 | 1.9 |
| `LocalStorageCapacityIsolation` | `true` | Beta | 1.10 | |
| `LocalStorageCapacityIsolationFSQuotaMonitoring` | `false` | Alpha | 1.15 | |
| `LogarithmicScaleDown` | `false` | Alpha | 1.21 | 1.21 |
| `LogarithmicScaleDown` | `true` | Beta | 1.22 | |
+| `MaxUnavailableStatefulSet` | `false` | Alpha | 1.24 | |
| `MemoryManager` | `false` | Alpha | 1.21 | 1.21 |
| `MemoryManager` | `true` | Beta | 1.22 | |
| `MemoryQoS` | `false` | Alpha | 1.22 | |
-| `MixedProtocolLBService` | `false` | Alpha | 1.20 | |
+| `MinDomainsInPodTopologySpread` | `false` | Alpha | 1.24 | |
+| `MixedProtocolLBService` | `false` | Alpha | 1.20 | 1.23 |
+| `MixedProtocolLBService` | `true` | Beta | 1.24 | |
| `NetworkPolicyEndPort` | `false` | Alpha | 1.21 | 1.21 |
| `NetworkPolicyEndPort` | `true` | Beta | 1.22 | |
+| `NetworkPolicyStatus` | `false` | Alpha | 1.24 | |
| `NodeSwap` | `false` | Alpha | 1.22 | |
-| `NonPreemptingPriority` | `false` | Alpha | 1.15 | 1.18 |
-| `NonPreemptingPriority` | `true` | Beta | 1.19 | |
-| `OpenAPIEnums` | `false` | Alpha | 1.23 | |
-| `OpenAPIV3` | `false` | Alpha | 1.23 | |
+| `NodeOutOfServiceVolumeDetach` | `false` | Alpha | 1.24 | |
+| `OpenAPIEnums` | `false` | Alpha | 1.23 | 1.23 |
+| `OpenAPIEnums` | `true` | Beta | 1.24 | |
+| `OpenAPIV3` | `false` | Alpha | 1.23 | 1.23 |
+| `OpenAPIV3` | `true` | Beta | 1.24 | |
| `PodAndContainerStatsFromCRI` | `false` | Alpha | 1.23 | |
-| `PodAffinityNamespaceSelector` | `false` | Alpha | 1.21 | 1.21 |
-| `PodAffinityNamespaceSelector` | `true` | Beta | 1.22 | |
| `PodDeletionCost` | `false` | Alpha | 1.21 | 1.21 |
| `PodDeletionCost` | `true` | Beta | 1.22 | |
-| `PodOverhead` | `false` | Alpha | 1.16 | 1.17 |
-| `PodOverhead` | `true` | Beta | 1.18 | |
| `PodSecurity` | `false` | Alpha | 1.22 | 1.22 |
| `PodSecurity` | `true` | Beta | 1.23 | |
-| `PreferNominatedNode` | `false` | Alpha | 1.21 | 1.21 |
-| `PreferNominatedNode` | `true` | Beta | 1.22 | |
| `ProbeTerminationGracePeriod` | `false` | Alpha | 1.21 | 1.21 |
| `ProbeTerminationGracePeriod` | `false` | Beta | 1.22 | |
| `ProcMountType` | `false` | Alpha | 1.12 | |
@@ -192,17 +176,13 @@ different Kubernetes components.
| `RecoverVolumeExpansionFailure` | `false` | Alpha | 1.23 | |
| `RemainingItemCount` | `false` | Alpha | 1.15 | 1.15 |
| `RemainingItemCount` | `true` | Beta | 1.16 | |
-| `RemoveSelfLink` | `false` | Alpha | 1.16 | 1.19 |
-| `RemoveSelfLink` | `true` | Beta | 1.20 | |
| `RotateKubeletServerCertificate` | `false` | Alpha | 1.7 | 1.11 |
| `RotateKubeletServerCertificate` | `true` | Beta | 1.12 | |
| `SeccompDefault` | `false` | Alpha | 1.22 | |
+| `ServerSideFieldValidation` | `false` | Alpha | 1.23 | - |
| `ServiceInternalTrafficPolicy` | `false` | Alpha | 1.21 | 1.21 |
| `ServiceInternalTrafficPolicy` | `true` | Beta | 1.22 | |
-| `ServiceLBNodePortControl` | `false` | Alpha | 1.20 | 1.21 |
-| `ServiceLBNodePortControl` | `true` | Beta | 1.22 | |
-| `ServiceLoadBalancerClass` | `false` | Alpha | 1.21 | 1.21 |
-| `ServiceLoadBalancerClass` | `true` | Beta | 1.22 | |
+| `ServiceIPStaticSubrange` | `false` | Alpha | 1.24 | |
| `SizeMemoryBackedVolumes` | `false` | Alpha | 1.20 | 1.21 |
| `SizeMemoryBackedVolumes` | `true` | Beta | 1.22 | |
| `StatefulSetAutoDeletePVC` | `false` | Alpha | 1.22 | |
@@ -211,10 +191,9 @@ different Kubernetes components.
| `StorageVersionAPI` | `false` | Alpha | 1.20 | |
| `StorageVersionHash` | `false` | Alpha | 1.14 | 1.14 |
| `StorageVersionHash` | `true` | Beta | 1.15 | |
-| `SuspendJob` | `false` | Alpha | 1.21 | 1.21 |
-| `SuspendJob` | `true` | Beta | 1.22 | |
| `TopologyAwareHints` | `false` | Alpha | 1.21 | 1.22 |
-| `TopologyAwareHints` | `false` | Beta | 1.23 | |
+| `TopologyAwareHints` | `false` | Beta | 1.23 | 1.23 |
+| `TopologyAwareHints` | `true` | Beta | 1.24 | |
| `TopologyManager` | `false` | Alpha | 1.16 | 1.17 |
| `TopologyManager` | `true` | Beta | 1.18 | |
| `VolumeCapacityPriority` | `false` | Alpha | 1.21 | - |
@@ -222,7 +201,7 @@ different Kubernetes components.
| `WinOverlay` | `false` | Alpha | 1.14 | 1.19 |
| `WinOverlay` | `true` | Beta | 1.20 | |
| `WindowsHostProcessContainers` | `false` | Alpha | 1.22 | 1.22 |
-| `WindowsHostProcessContainers` | `false` | Beta | 1.23 | |
+| `WindowsHostProcessContainers` | `true` | Beta | 1.23 | |
{{< /table >}}
### Feature gates for graduated or deprecated features
@@ -253,7 +232,10 @@ different Kubernetes components.
| `BoundServiceAccountTokenVolume` | `true` | GA | 1.22 | - |
| `ConfigurableFSGroupPolicy` | `false` | Alpha | 1.18 | 1.19 |
| `ConfigurableFSGroupPolicy` | `true` | Beta | 1.20 | 1.22 |
-| `ConfigurableFSGroupPolicy` | `true` | GA | 1.23 | |
+| `ConfigurableFSGroupPolicy` | `true` | GA | 1.23 | - |
+| `ControllerManagerLeaderMigration` | `false` | Alpha | 1.21 | 1.21 |
+| `ControllerManagerLeaderMigration` | `true` | Beta | 1.22 | 1.23 |
+| `ControllerManagerLeaderMigration` | `true` | GA | 1.24 | - |
| `CRIContainerLogRotation` | `false` | Alpha | 1.10 | 1.10 |
| `CRIContainerLogRotation` | `true` | Beta | 1.11 | 1.20 |
| `CRIContainerLogRotation` | `true` | GA | 1.21 | - |
@@ -262,34 +244,47 @@ different Kubernetes components.
| `CSIBlockVolume` | `true` | GA | 1.18 | - |
| `CSIDriverRegistry` | `false` | Alpha | 1.12 | 1.13 |
| `CSIDriverRegistry` | `true` | Beta | 1.14 | 1.17 |
-| `CSIDriverRegistry` | `true` | GA | 1.18 | |
+| `CSIDriverRegistry` | `true` | GA | 1.18 | - |
| `CSIMigrationAWSComplete` | `false` | Alpha | 1.17 | 1.20 |
| `CSIMigrationAWSComplete` | - | Deprecated | 1.21 | - |
+| `CSIMigrationAzureDisk` | `false` | Alpha | 1.15 | 1.18 |
+| `CSIMigrationAzureDisk` | `false` | Beta | 1.19 | 1.22 |
+| `CSIMigrationAzureDisk` | `true` | Beta | 1.23 | 1.23 |
+| `CSIMigrationAzureDisk` | `true` | GA | 1.24 | |
| `CSIMigrationAzureDiskComplete` | `false` | Alpha | 1.17 | 1.20 |
| `CSIMigrationAzureDiskComplete` | - | Deprecated | 1.21 | - |
| `CSIMigrationAzureFileComplete` | `false` | Alpha | 1.17 | 1.20 |
| `CSIMigrationAzureFileComplete` | - | Deprecated | 1.21 | - |
| `CSIMigrationGCEComplete` | `false` | Alpha | 1.17 | 1.20 |
| `CSIMigrationGCEComplete` | - | Deprecated | 1.21 | - |
+| `CSIMigrationOpenStack` | `false` | Alpha | 1.14 | 1.17 |
+| `CSIMigrationOpenStack` | `true` | Beta | 1.18 | 1.23 |
+| `CSIMigrationOpenStack` | `true` | GA | 1.24 | |
| `CSIMigrationOpenStackComplete` | `false` | Alpha | 1.17 | 1.20 |
| `CSIMigrationOpenStackComplete` | - | Deprecated | 1.21 | - |
| `CSIMigrationvSphereComplete` | `false` | Beta | 1.19 | 1.21 |
| `CSIMigrationvSphereComplete` | - | Deprecated | 1.22 | - |
| `CSINodeInfo` | `false` | Alpha | 1.12 | 1.13 |
| `CSINodeInfo` | `true` | Beta | 1.14 | 1.16 |
-| `CSINodeInfo` | `true` | GA | 1.17 | |
+| `CSINodeInfo` | `true` | GA | 1.17 | - |
| `CSIPersistentVolume` | `false` | Alpha | 1.9 | 1.9 |
| `CSIPersistentVolume` | `true` | Beta | 1.10 | 1.12 |
| `CSIPersistentVolume` | `true` | GA | 1.13 | - |
| `CSIServiceAccountToken` | `false` | Alpha | 1.20 | 1.20 |
| `CSIServiceAccountToken` | `true` | Beta | 1.21 | 1.21 |
-| `CSIServiceAccountToken` | `true` | GA | 1.22 | |
+| `CSIServiceAccountToken` | `true` | GA | 1.22 | - |
+| `CSIStorageCapacity` | `false` | Alpha | 1.19 | 1.20 |
+| `CSIStorageCapacity` | `true` | Beta | 1.21 | 1.23 |
+| `CSIStorageCapacity` | `true` | GA | 1.24 | - |
| `CSIVolumeFSGroupPolicy` | `false` | Alpha | 1.19 | 1.19 |
| `CSIVolumeFSGroupPolicy` | `true` | Beta | 1.20 | 1.22 |
| `CSIVolumeFSGroupPolicy` | `true` | GA | 1.23 | |
+| `CSRDuration` | `true` | Beta | 1.22 | 1.23 |
+| `CSRDuration` | `true` | GA | 1.24 | - |
| `CronJobControllerV2` | `false` | Alpha | 1.20 | 1.20 |
| `CronJobControllerV2` | `true` | Beta | 1.21 | 1.21 |
| `CronJobControllerV2` | `true` | GA | 1.22 | - |
+| `CronJobTimeZone` | `false` | Alpha | 1.24 | |
| `CustomPodDNS` | `false` | Alpha | 1.9 | 1.9 |
| `CustomPodDNS` | `true` | Beta| 1.10 | 1.13 |
| `CustomPodDNS` | `true` | GA | 1.14 | - |
@@ -308,6 +303,9 @@ different Kubernetes components.
| `CustomResourceWebhookConversion` | `false` | Alpha | 1.13 | 1.14 |
| `CustomResourceWebhookConversion` | `true` | Beta | 1.15 | 1.15 |
| `CustomResourceWebhookConversion` | `true` | GA | 1.16 | - |
+| `DefaultPodTopologySpread` | `false` | Alpha | 1.19 | 1.19 |
+| `DefaultPodTopologySpread` | `true` | Beta | 1.20 | 1.23 |
+| `DefaultPodTopologySpread` | `true` | GA | 1.24 | - |
| `DryRun` | `false` | Alpha | 1.12 | 1.12 |
| `DryRun` | `true` | Beta | 1.13 | 1.18 |
| `DryRun` | `true` | GA | 1.19 | - |
@@ -320,13 +318,16 @@ different Kubernetes components.
| `DynamicProvisioningScheduling` | - | Deprecated| 1.12 | - |
| `DynamicVolumeProvisioning` | `true` | Alpha | 1.3 | 1.7 |
| `DynamicVolumeProvisioning` | `true` | GA | 1.8 | - |
+| `EfficientWatchResumption` | `false` | Alpha | 1.20 | 1.20 |
+| `EfficientWatchResumption` | `true` | Beta | 1.21 | 1.23 |
+| `EfficientWatchResumption` | `true` | GA | 1.24 | - |
| `EnableAggregatedDiscoveryTimeout` | `true` | Deprecated | 1.16 | - |
| `EnableEquivalenceClassCache` | `false` | Alpha | 1.8 | 1.14 |
| `EnableEquivalenceClassCache` | - | Deprecated | 1.15 | - |
| `EndpointSlice` | `false` | Alpha | 1.16 | 1.16 |
| `EndpointSlice` | `false` | Beta | 1.17 | 1.17 |
| `EndpointSlice` | `true` | Beta | 1.18 | 1.20 |
-| `EndpointSlice` | `true` | GA | 1.21 | - |
+| `EndpointSlice` | `true` | GA | 1.21 | - |
| `EndpointSliceNodeName` | `false` | Alpha | 1.20 | 1.20 |
| `EndpointSliceNodeName` | `true` | GA | 1.21 | - |
| `EndpointSliceProxying` | `false` | Alpha | 1.18 | 1.18 |
@@ -336,6 +337,15 @@ different Kubernetes components.
| `EvenPodsSpread` | `true` | Beta | 1.18 | 1.18 |
| `EvenPodsSpread` | `true` | GA | 1.19 | - |
| `ExecProbeTimeout` | `true` | GA | 1.20 | - |
+| `ExpandCSIVolumes` | `false` | Alpha | 1.14 | 1.15 |
+| `ExpandCSIVolumes` | `true` | Beta | 1.16 | 1.23 |
+| `ExpandCSIVolumes` | `true` | GA | 1.24 | - |
+| `ExpandInUsePersistentVolumes` | `false` | Alpha | 1.11 | 1.14 |
+| `ExpandInUsePersistentVolumes` | `true` | Beta | 1.15 | 1.23 |
+| `ExpandInUsePersistentVolumes` | `true` | GA | 1.24 | - |
+| `ExpandPersistentVolumes` | `false` | Alpha | 1.8 | 1.10 |
+| `ExpandPersistentVolumes` | `true` | Beta | 1.11 | 1.23 |
+| `ExpandPersistentVolumes` | `true` | GA | 1.24 |- |
| `ExperimentalCriticalPodAnnotation` | `false` | Alpha | 1.5 | 1.12 |
| `ExperimentalCriticalPodAnnotation` | `false` | Deprecated | 1.13 | - |
| `ExternalPolicyForExternalIP` | `true` | GA | 1.18 | - |
@@ -352,17 +362,20 @@ different Kubernetes components.
| `HugePages` | `true` | GA | 1.14 | - |
| `HyperVContainer` | `false` | Alpha | 1.10 | 1.19 |
| `HyperVContainer` | `false` | Deprecated | 1.20 | - |
+| `IPv6DualStack` | `false` | Alpha | 1.15 | 1.20 |
+| `IPv6DualStack` | `true` | Beta | 1.21 | 1.22 |
+| `IPv6DualStack` | `true` | GA | 1.23 | - |
| `ImmutableEphemeralVolumes` | `false` | Alpha | 1.18 | 1.18 |
| `ImmutableEphemeralVolumes` | `true` | Beta | 1.19 | 1.20 |
| `ImmutableEphemeralVolumes` | `true` | GA | 1.21 | |
+| `IndexedJob` | `false` | Alpha | 1.21 | 1.21 |
+| `IndexedJob` | `true` | Beta | 1.22 | 1.23 |
+| `IndexedJob` | `true` | GA | 1.24 | - |
| `IngressClassNamespacedParams` | `false` | Alpha | 1.21 | 1.21 |
| `IngressClassNamespacedParams` | `true` | Beta | 1.22 | 1.22 |
| `IngressClassNamespacedParams` | `true` | GA | 1.23 | - |
| `Initializers` | `false` | Alpha | 1.7 | 1.13 |
| `Initializers` | - | Deprecated | 1.14 | - |
-| `IPv6DualStack` | `false` | Alpha | 1.15 | 1.20 |
-| `IPv6DualStack` | `true` | Beta | 1.21 | 1.22 |
-| `IPv6DualStack` | `true` | GA | 1.23 | - |
| `KubeletConfigFile` | `false` | Alpha | 1.8 | 1.9 |
| `KubeletConfigFile` | - | Deprecated | 1.10 | - |
| `KubeletPluginsWatcher` | `false` | Alpha | 1.11 | 1.11 |
@@ -371,27 +384,37 @@ different Kubernetes components.
| `LegacyNodeRoleBehavior` | `false` | Alpha | 1.16 | 1.18 |
| `LegacyNodeRoleBehavior` | `true` | Beta | 1.19 | 1.20 |
| `LegacyNodeRoleBehavior` | `false` | GA | 1.21 | - |
+| `LegacyServiceAccountTokenNoAutoGeneration` | `true` | Beta | 1.24 | |
| `MountContainers` | `false` | Alpha | 1.9 | 1.16 |
| `MountContainers` | `false` | Deprecated | 1.17 | - |
| `MountPropagation` | `false` | Alpha | 1.8 | 1.9 |
| `MountPropagation` | `true` | Beta | 1.10 | 1.11 |
| `MountPropagation` | `true` | GA | 1.12 | - |
+| `NamespaceDefaultLabelName` | `true` | Beta | 1.21 | 1.21 |
+| `NamespaceDefaultLabelName` | `true` | GA | 1.22 | - |
| `NodeDisruptionExclusion` | `false` | Alpha | 1.16 | 1.18 |
| `NodeDisruptionExclusion` | `true` | Beta | 1.19 | 1.20 |
| `NodeDisruptionExclusion` | `true` | GA | 1.21 | - |
| `NodeLease` | `false` | Alpha | 1.12 | 1.13 |
| `NodeLease` | `true` | Beta | 1.14 | 1.16 |
| `NodeLease` | `true` | GA | 1.17 | - |
-| `NamespaceDefaultLabelName` | `true` | Beta | 1.21 | 1.21 |
-| `NamespaceDefaultLabelName` | `true` | GA | 1.22 | - |
+| `NonPreemptingPriority` | `false` | Alpha | 1.15 | 1.18 |
+| `NonPreemptingPriority` | `true` | Beta | 1.19 | 1.23 |
+| `NonPreemptingPriority` | `true` | GA | 1.24 | - |
| `PVCProtection` | `false` | Alpha | 1.9 | 1.9 |
| `PVCProtection` | - | Deprecated | 1.10 | - |
| `PersistentLocalVolumes` | `false` | Alpha | 1.7 | 1.9 |
| `PersistentLocalVolumes` | `true` | Beta | 1.10 | 1.13 |
| `PersistentLocalVolumes` | `true` | GA | 1.14 | - |
+| `PodAffinityNamespaceSelector` | `false` | Alpha | 1.21 | 1.21 |
+| `PodAffinityNamespaceSelector` | `true` | Beta | 1.22 | 1.23 |
+| `PodAffinityNamespaceSelector` | `true` | GA | 1.24 | - |
| `PodDisruptionBudget` | `false` | Alpha | 1.3 | 1.4 |
| `PodDisruptionBudget` | `true` | Beta | 1.5 | 1.20 |
| `PodDisruptionBudget` | `true` | GA | 1.21 | - |
+| `PodOverhead` | `false` | Alpha | 1.16 | 1.17 |
+| `PodOverhead` | `true` | Beta | 1.18 | 1.23 |
+| `PodOverhead` | `true` | GA | 1.24 | - |
| `PodPriority` | `false` | Alpha | 1.8 | 1.10 |
| `PodPriority` | `true` | Beta | 1.11 | 1.13 |
| `PodPriority` | `true` | GA | 1.14 | - |
@@ -401,6 +424,12 @@ different Kubernetes components.
| `PodShareProcessNamespace` | `false` | Alpha | 1.10 | 1.11 |
| `PodShareProcessNamespace` | `true` | Beta | 1.12 | 1.16 |
| `PodShareProcessNamespace` | `true` | GA | 1.17 | - |
+| `PreferNominatedNode` | `false` | Alpha | 1.21 | 1.21 |
+| `PreferNominatedNode` | `true` | Beta | 1.22 | 1.23 |
+| `PreferNominatedNode` | `true` | GA | 1.24 | - |
+| `RemoveSelfLink` | `false` | Alpha | 1.16 | 1.19 |
+| `RemoveSelfLink` | `true` | Beta | 1.20 | 1.23 |
+| `RemoveSelfLink` | `true` | GA | 1.24 | - |
| `RequestManagement` | `false` | Alpha | 1.15 | 1.16 |
| `RequestManagement` | - | Deprecated | 1.17 | - |
| `ResourceLimitsPriorityFunction` | `false` | Alpha | 1.9 | 1.18 |
@@ -430,13 +459,18 @@ different Kubernetes components.
| `ServerSideApply` | `false` | Alpha | 1.14 | 1.15 |
| `ServerSideApply` | `true` | Beta | 1.16 | 1.21 |
| `ServerSideApply` | `true` | GA | 1.22 | - |
-| `ServerSideFieldValidation` | `false` | Alpha | 1.23 | - |
| `ServiceAccountIssuerDiscovery` | `false` | Alpha | 1.18 | 1.19 |
| `ServiceAccountIssuerDiscovery` | `true` | Beta | 1.20 | 1.20 |
| `ServiceAccountIssuerDiscovery` | `true` | GA | 1.21 | - |
| `ServiceAppProtocol` | `false` | Alpha | 1.18 | 1.18 |
| `ServiceAppProtocol` | `true` | Beta | 1.19 | 1.19 |
| `ServiceAppProtocol` | `true` | GA | 1.20 | - |
+| `ServiceLBNodePortControl` | `false` | Alpha | 1.20 | 1.21 |
+| `ServiceLBNodePortControl` | `true` | Beta | 1.22 | 1.23 |
+| `ServiceLBNodePortControl` | `true` | GA | 1.24 | - |
+| `ServiceLoadBalancerClass` | `false` | Alpha | 1.21 | 1.21 |
+| `ServiceLoadBalancerClass` | `true` | Beta | 1.22 | 1.23 |
+| `ServiceLoadBalancerClass` | `true` | GA | 1.24 | - |
| `ServiceLoadBalancerFinalizer` | `false` | Alpha | 1.15 | 1.15 |
| `ServiceLoadBalancerFinalizer` | `true` | Beta | 1.16 | 1.16 |
| `ServiceLoadBalancerFinalizer` | `true` | GA | 1.17 | - |
@@ -467,8 +501,11 @@ different Kubernetes components.
| `SupportPodPidsLimit` | `false` | Alpha | 1.10 | 1.13 |
| `SupportPodPidsLimit` | `true` | Beta | 1.14 | 1.19 |
| `SupportPodPidsLimit` | `true` | GA | 1.20 | - |
+| `SuspendJob` | `false` | Alpha | 1.21 | 1.21 |
+| `SuspendJob` | `true` | Beta | 1.22 | 1.23 |
+| `SuspendJob` | `true` | GA | 1.24 | - |
| `Sysctls` | `true` | Beta | 1.11 | 1.20 |
-| `Sysctls` | `true` | GA | 1.21 | |
+| `Sysctls` | `true` | GA | 1.21 | - |
| `TTLAfterFinished` | `false` | Alpha | 1.12 | 1.20 |
| `TTLAfterFinished` | `true` | Beta | 1.21 | 1.22 |
| `TTLAfterFinished` | `true` | GA | 1.23 | - |
@@ -570,7 +607,7 @@ Each feature gate is designed for enabling/disabling a specific feature:
Docker Engine; no longer available. See
[Device Plugins](/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/) for
an alternative.
-- `AdvancedAuditing`: Enable [advanced auditing](/docs/tasks/debug-application-cluster/audit/#advanced-audit)
+- `AdvancedAuditing`: Enable [advanced auditing](/docs/tasks/debug/debug-cluster/audit/#advanced-audit)
- `AffinityInAnnotations`: Enable setting
[Pod affinity or anti-affinity](/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity).
- `AllowExtTrafficLocalEndpoints`: Enable a service to route external requests to node local endpoints.
@@ -743,11 +780,14 @@ Each feature gate is designed for enabling/disabling a specific feature:
for fsGroups when mounting a volume in a Pod. See
[Configure volume permission and ownership change policy for Pods](/docs/tasks/configure-pod-container/security-context/#configure-volume-permission-and-ownership-change-policy-for-pods)
for more details.
+- `ContextualLogging`: When you enable this feature gate, Kubernetes components that support
+ contextual logging add extra detail to log output.
- `ControllerManagerLeaderMigration`: Enables leader migration for
`kube-controller-manager` and `cloud-controller-manager`.
- `CronJobControllerV2`: Use an alternative implementation of the
{{< glossary_tooltip text="CronJob" term_id="cronjob" >}} controller. Otherwise,
version 1 of the same controller is selected.
+- `CronJobTimeZone`: Allow the use of the `timeZone` optional field in [CronJobs](/docs/concepts/workloads/controllers/cron-jobs/)
- `CustomCPUCFSQuotaPeriod`: Enable nodes to change `cpuCFSQuotaPeriod` in
[kubelet config](/docs/tasks/administer-cluster/kubelet-config-file/).
- `CustomResourceValidationExpressions`: Enable expression language validation in CRD
@@ -786,8 +826,9 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `DryRun`: Enable server-side [dry run](/docs/reference/using-api/api-concepts/#dry-run) requests
so that validation, merging, and mutation can be tested without committing.
- `DynamicAuditing`: Used to enable dynamic auditing before v1.19.
-- `DynamicKubeletConfig`: Enable the dynamic configuration of kubelet. See
- [Reconfigure kubelet](/docs/tasks/administer-cluster/reconfigure-kubelet/).
+- `DynamicKubeletConfig`: Enable the dynamic configuration of kubelet. The
+ feature is no longer supported outside of supported skew policy. The feature
+ gate was removed from kubelet in 1.24. See [Reconfigure kubelet](/docs/tasks/administer-cluster/reconfigure-kubelet/).
- `DynamicProvisioningScheduling`: Extend the default scheduler to be aware of
volume topology and handle PV provisioning.
This feature is superseded by the `VolumeScheduling` feature completely in v1.12.
@@ -851,8 +892,10 @@ Each feature gate is designed for enabling/disabling a specific feature:
when shutting down a node gracefully.
- `GRPCContainerProbe`: Enables the gRPC probe method for {Liveness,Readiness,Startup}Probe.
See [Configure Liveness, Readiness and Startup Probes](/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-grpc-liveness-probe).
-- `HonorPVReclaimPolicy`: Honor persistent volume reclaim policy when it is `Delete`
- irrespective of PV-PVC deletion ordering.
+- `HonorPVReclaimPolicy`: Honor persistent volume reclaim policy when it is `Delete` irrespective of PV-PVC deletion ordering.
+ For more details, check the
+ [PersistentVolume deletion protection finalizer](/docs/concepts/storage/persistent-volumes/#persistentvolume-deletion-protection-finalizer)
+ documentation.
- `HPAContainerMetrics`: Enable the `HorizontalPodAutoscaler` to scale based on
metrics from individual containers in target pods.
- `HPAScaleToZero`: Enables setting `minReplicas` to 0 for `HorizontalPodAutoscaler`
@@ -928,6 +971,8 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `LegacyNodeRoleBehavior`: When disabled, legacy behavior in service load balancers and
node disruption will ignore the `node-role.kubernetes.io/master` label in favor of the
feature-specific labels provided by `NodeDisruptionExclusion` and `ServiceNodeExclusion`.
+- `LegacyServiceAccountTokenNoAutoGeneration`: Stop auto-generation of Secret-based
+ [service account tokens](/docs/reference/access-authn-authz/authentication/#service-account-tokens).
- `LocalStorageCapacityIsolation`: Enable the consumption of
[local ephemeral storage](/docs/concepts/configuration/manage-resources-containers/)
and also the `sizeLimit` property of an
@@ -941,10 +986,16 @@ Each feature gate is designed for enabling/disabling a specific feature:
filesystem walk for better performance and accuracy.
- `LogarithmicScaleDown`: Enable semi-random selection of pods to evict on controller scaledown
based on logarithmic bucketing of pod timestamps.
+- `MaxUnavailableStatefulSet`: Enables setting the `maxUnavailable` field for the
+ [rolling update strategy](/docs/concepts/workloads/controllers/statefulset/#rolling-updates)
+ of a StatefulSet. The field specifies the maximum number of Pods
+ that can be unavailable during the update.
- `MemoryManager`: Allows setting memory affinity for a container based on
NUMA topology.
- `MemoryQoS`: Enable memory protection and usage throttle on pod / container using
cgroup v2 memory controller.
+- `MinDomainsInPodTopologySpread`: Enable `minDomains` in Pod
+ [topology spread constraints](/docs/concepts/workloads/pods/pod-topology-spread-constraints/).
- `MixedProtocolLBService`: Enable using different protocols in the same `LoadBalancer` type
Service instance.
- `MountContainers`: Enable using utility containers on host as the volume mounter.
@@ -955,15 +1006,19 @@ Each feature gate is designed for enabling/disabling a specific feature:
on all namespaces, containing the namespace name.
- `NetworkPolicyEndPort`: Enable use of the field `endPort` in NetworkPolicy objects,
allowing the selection of a port range instead of a single port.
+- `NetworkPolicyStatus`: Enable the `status` subresource for NetworkPolicy objects.
- `NodeDisruptionExclusion`: Enable use of the Node label `node.kubernetes.io/exclude-disruption`
which prevents nodes from being evacuated during zone failures.
-- `NodeLease`: Enable the new Lease API to report node heartbeats, which could be used
- as a node health signal.
+- `NodeLease`: Enable the new Lease API to report node heartbeats, which could be used as a node health signal.
+- `NodeOutOfServiceVolumeDetach`: When a Node is marked out-of-service using the
+ `node.kubernetes.io/out-of-service` taint, Pods on the node will be forcefully deleted
+ if they can not tolerate this taint, and the volume detach operations for Pods terminating
+ on the node will happen immediately. The deleted Pods can recover quickly on different nodes.
- `NodeSwap`: Enable the kubelet to allocate swap memory for Kubernetes workloads on a node.
Must be used with `KubeletConfiguration.failSwapOn` set to false.
For more details, please see [swap memory](/docs/concepts/architecture/nodes/#swap-memory)
- `NonPreemptingPriority`: Enable `preemptionPolicy` field for PriorityClass and Pod.
-- `OpenAPIEnums`: Enables populating "enum" fields of OpenAPI schemas in the
+- `OpenAPIEnums`: Enables populating "enum" fields of OpenAPI schemas in the
spec returned from the API server.
- `OpenAPIV3`: Enables the API server to publish OpenAPI v3.
- `PodDeletionCost`: Enable the [Pod Deletion Cost](/docs/concepts/workloads/controllers/replicaset/#pod-deletion-cost)
@@ -1013,7 +1068,10 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `RemainingItemCount`: Allow the API servers to show a count of remaining
items in the response to a
[chunking list request](/docs/reference/using-api/api-concepts/#retrieving-large-results-sets-in-chunks).
-- `RemoveSelfLink`: Deprecates and removes `selfLink` from ObjectMeta and ListMeta.
+- `RemoveSelfLink`: Sets the `.metadata.selfLink` field to blank (empty string) for all
+ objects and collections. This field has been deprecated since the Kubernetes v1.16
+ release. When this feature is enabled, the `.metadata.selfLink` field remains part of
+ the Kubernetes API, but is always unset.
- `RequestManagement`: Enables managing request concurrency with prioritization and fairness
at each API server. Deprecated by `APIPriorityAndFairness` since 1.17.
- `ResourceLimitsPriorityFunction`: Enable a scheduler priority function that
@@ -1069,6 +1127,12 @@ Each feature gate is designed for enabling/disabling a specific feature:
topology of the cluster. See
[ServiceTopology](/docs/concepts/services-networking/service-topology/)
for more details.
+- `ServiceIPStaticSubrange`: Enables a strategy for Services ClusterIP allocations, whereby the
+ ClusterIP range is subdivided. Dynamic allocated ClusterIP addresses will be allocated preferently
+ from the upper range allowing users to assign static ClusterIPs from the lower range with a low
+ risk of collision. See
+ [Avoiding collisions](/docs/concepts/services-networking/service/#avoiding-collisions)
+ for more details.
- `SetHostnameAsFQDN`: Enable the ability of setting Fully Qualified Domain
Name(FQDN) as the hostname of a pod. See
[Pod's `setHostnameAsFQDN` field](/docs/concepts/services-networking/dns-pod-service/#pod-sethostnameasfqdn-field).
@@ -1155,3 +1219,8 @@ Each feature gate is designed for enabling/disabling a specific feature:
* The [deprecation policy](/docs/reference/using-api/deprecation-policy/) for Kubernetes explains
the project's approach to removing features and components.
+* Since Kubernetes 1.24, new beta APIs are not enabled by default. When enabling a beta
+ feature, you will also need to enable any associated API resources.
+ For example, to enable a particular resource like
+ `storage.k8s.io/v1beta1/csistoragecapacities`, set `--runtime-config=storage.k8s.io/v1beta1/csistoragecapacities`.
+ See [API Versioning](/docs/reference/using-api/#api-versioning) for more details on the command line flags.
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 774c1efd0b..ad2dc545b7 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
@@ -81,13 +81,6 @@ kube-apiserver [flags]
Identifiers of the API. The service account token authenticator will validate that tokens used against the API are bound to at least one of these audiences. If the --service-account-issuer flag is configured and this flag is not, this field defaults to a single element list containing the issuer URL.
-
---apiserver-count int Default: 1
-
-
-The number of apiservers running in the cluster, must be a positive number. (In use when --endpoint-reconciler-type=master-count is enabled.)
-
-
--audit-log-batch-buffer-size int Default: 10000
@@ -526,7 +519,7 @@ kube-apiserver [flags]
--endpoint-reconciler-type string Default: "lease"
-Use an endpoint reconciler (master-count, lease, none)
+Use an endpoint reconciler (master-count, lease, none) master-count is deprecated, and will be removed in a future version.
@@ -606,13 +599,6 @@ kube-apiserver [flags]
Amount of time to retain events.
-
---experimental-logging-sanitization
-
-
-[Experimental] When enabled prevents logging of fields tagged as sensitive (passwords, keys, tokens). Runtime log sanitization may introduce significant computation overhead and therefore should not be enabled in production.
-
-
--external-hostname string
@@ -624,7 +610,7 @@ kube-apiserver [flags]
--feature-gates <comma-separated 'key=True|False' pairs>
-A set of key=value pairs that describe feature gates for alpha/experimental features. Options are: APIListChunking=true|false (BETA - default=true) APIPriorityAndFairness=true|false (BETA - default=true) APIResponseCompression=true|false (BETA - default=true) APIServerIdentity=true|false (ALPHA - default=false) APIServerTracing=true|false (ALPHA - default=false) AllAlpha=true|false (ALPHA - default=false) AllBeta=true|false (BETA - default=false) AnyVolumeDataSource=true|false (ALPHA - default=false) AppArmor=true|false (BETA - default=true) CPUManager=true|false (BETA - default=true) CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false) CPUManagerPolicyBetaOptions=true|false (BETA - default=true) CPUManagerPolicyOptions=true|false (BETA - default=true) CSIInlineVolume=true|false (BETA - default=true) CSIMigration=true|false (BETA - default=true) CSIMigrationAWS=true|false (BETA - default=true) CSIMigrationAzureDisk=true|false (BETA - default=true) CSIMigrationAzureFile=true|false (BETA - default=false) CSIMigrationGCE=true|false (BETA - default=true) CSIMigrationOpenStack=true|false (BETA - default=true) CSIMigrationPortworx=true|false (ALPHA - default=false) CSIMigrationvSphere=true|false (BETA - default=false) CSIStorageCapacity=true|false (BETA - default=true) CSIVolumeHealth=true|false (ALPHA - default=false) CSRDuration=true|false (BETA - default=true) ControllerManagerLeaderMigration=true|false (BETA - default=true) CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false) CustomResourceValidationExpressions=true|false (ALPHA - default=false) DaemonSetUpdateSurge=true|false (BETA - default=true) DefaultPodTopologySpread=true|false (BETA - default=true) DelegateFSGroupToCSIDriver=true|false (BETA - default=true) DevicePlugins=true|false (BETA - default=true) DisableAcceleratorUsageMetrics=true|false (BETA - default=true) DisableCloudProviders=true|false (ALPHA - default=false) DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false) DownwardAPIHugePages=true|false (BETA - default=true) EfficientWatchResumption=true|false (BETA - default=true) EndpointSliceTerminatingCondition=true|false (BETA - default=true) EphemeralContainers=true|false (BETA - default=true) ExpandCSIVolumes=true|false (BETA - default=true) ExpandInUsePersistentVolumes=true|false (BETA - default=true) ExpandPersistentVolumes=true|false (BETA - default=true) ExpandedDNSConfig=true|false (ALPHA - default=false) ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false) GRPCContainerProbe=true|false (ALPHA - default=false) GracefulNodeShutdown=true|false (BETA - default=true) GracefulNodeShutdownBasedOnPodPriority=true|false (ALPHA - default=false) HPAContainerMetrics=true|false (ALPHA - default=false) HPAScaleToZero=true|false (ALPHA - default=false) HonorPVReclaimPolicy=true|false (ALPHA - default=false) IdentifyPodOS=true|false (ALPHA - default=false) InTreePluginAWSUnregister=true|false (ALPHA - default=false) InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false) InTreePluginAzureFileUnregister=true|false (ALPHA - default=false) InTreePluginGCEUnregister=true|false (ALPHA - default=false) InTreePluginOpenStackUnregister=true|false (ALPHA - default=false) InTreePluginPortworxUnregister=true|false (ALPHA - default=false) InTreePluginRBDUnregister=true|false (ALPHA - default=false) InTreePluginvSphereUnregister=true|false (ALPHA - default=false) IndexedJob=true|false (BETA - default=true) JobMutableNodeSchedulingDirectives=true|false (BETA - default=true) JobReadyPods=true|false (ALPHA - default=false) JobTrackingWithFinalizers=true|false (BETA - default=true) KubeletCredentialProviders=true|false (ALPHA - default=false) KubeletInUserNamespace=true|false (ALPHA - default=false) KubeletPodResources=true|false (BETA - default=true) KubeletPodResourcesGetAllocatable=true|false (BETA - default=true) LocalStorageCapacityIsolation=true|false (BETA - default=true) LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false) LogarithmicScaleDown=true|false (BETA - default=true) MemoryManager=true|false (BETA - default=true) MemoryQoS=true|false (ALPHA - default=false) MixedProtocolLBService=true|false (ALPHA - default=false) NetworkPolicyEndPort=true|false (BETA - default=true) NodeSwap=true|false (ALPHA - default=false) NonPreemptingPriority=true|false (BETA - default=true) OpenAPIEnums=true|false (ALPHA - default=false) OpenAPIV3=true|false (ALPHA - default=false) PodAffinityNamespaceSelector=true|false (BETA - default=true) PodAndContainerStatsFromCRI=true|false (ALPHA - default=false) PodDeletionCost=true|false (BETA - default=true) PodOverhead=true|false (BETA - default=true) PodSecurity=true|false (BETA - default=true) PreferNominatedNode=true|false (BETA - default=true) ProbeTerminationGracePeriod=true|false (BETA - default=false) ProcMountType=true|false (ALPHA - default=false) ProxyTerminatingEndpoints=true|false (ALPHA - default=false) QOSReserved=true|false (ALPHA - default=false) ReadWriteOncePod=true|false (ALPHA - default=false) RecoverVolumeExpansionFailure=true|false (ALPHA - default=false) RemainingItemCount=true|false (BETA - default=true) RemoveSelfLink=true|false (BETA - default=true) RotateKubeletServerCertificate=true|false (BETA - default=true) SeccompDefault=true|false (ALPHA - default=false) ServerSideFieldValidation=true|false (ALPHA - default=false) ServiceInternalTrafficPolicy=true|false (BETA - default=true) ServiceLBNodePortControl=true|false (BETA - default=true) ServiceLoadBalancerClass=true|false (BETA - default=true) SizeMemoryBackedVolumes=true|false (BETA - default=true) StatefulSetAutoDeletePVC=true|false (ALPHA - default=false) StatefulSetMinReadySeconds=true|false (BETA - default=true) StorageVersionAPI=true|false (ALPHA - default=false) StorageVersionHash=true|false (BETA - default=true) SuspendJob=true|false (BETA - default=true) TopologyAwareHints=true|false (BETA - default=false) TopologyManager=true|false (BETA - default=true) VolumeCapacityPriority=true|false (ALPHA - default=false) WinDSR=true|false (ALPHA - default=false) WinOverlay=true|false (BETA - default=true) WindowsHostProcessContainers=true|false (BETA - default=true) csiMigrationRBD=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for alpha/experimental features. Options are: APIListChunking=true|false (BETA - default=true) APIPriorityAndFairness=true|false (BETA - default=true) APIResponseCompression=true|false (BETA - default=true) APIServerIdentity=true|false (ALPHA - default=false) APIServerTracing=true|false (ALPHA - default=false) AllAlpha=true|false (ALPHA - default=false) AllBeta=true|false (BETA - default=false) AnyVolumeDataSource=true|false (BETA - default=true) AppArmor=true|false (BETA - default=true) CPUManager=true|false (BETA - default=true) CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false) CPUManagerPolicyBetaOptions=true|false (BETA - default=true) CPUManagerPolicyOptions=true|false (BETA - default=true) CSIInlineVolume=true|false (BETA - default=true) CSIMigration=true|false (BETA - default=true) CSIMigrationAWS=true|false (BETA - default=true) CSIMigrationAzureFile=true|false (BETA - default=true) CSIMigrationGCE=true|false (BETA - default=true) CSIMigrationPortworx=true|false (ALPHA - default=false) CSIMigrationRBD=true|false (ALPHA - default=false) CSIMigrationvSphere=true|false (BETA - default=false) CSIVolumeHealth=true|false (ALPHA - default=false) ContextualLogging=true|false (ALPHA - default=false) CronJobTimeZone=true|false (ALPHA - default=false) CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false) CustomResourceValidationExpressions=true|false (ALPHA - default=false) DaemonSetUpdateSurge=true|false (BETA - default=true) DelegateFSGroupToCSIDriver=true|false (BETA - default=true) DevicePlugins=true|false (BETA - default=true) DisableAcceleratorUsageMetrics=true|false (BETA - default=true) DisableCloudProviders=true|false (ALPHA - default=false) DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false) DownwardAPIHugePages=true|false (BETA - default=true) EndpointSliceTerminatingCondition=true|false (BETA - default=true) EphemeralContainers=true|false (BETA - default=true) ExpandedDNSConfig=true|false (ALPHA - default=false) ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false) GRPCContainerProbe=true|false (BETA - default=true) GracefulNodeShutdown=true|false (BETA - default=true) GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - default=true) HPAContainerMetrics=true|false (ALPHA - default=false) HPAScaleToZero=true|false (ALPHA - default=false) HonorPVReclaimPolicy=true|false (ALPHA - default=false) IdentifyPodOS=true|false (BETA - default=true) InTreePluginAWSUnregister=true|false (ALPHA - default=false) InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false) InTreePluginAzureFileUnregister=true|false (ALPHA - default=false) InTreePluginGCEUnregister=true|false (ALPHA - default=false) InTreePluginOpenStackUnregister=true|false (ALPHA - default=false) InTreePluginPortworxUnregister=true|false (ALPHA - default=false) InTreePluginRBDUnregister=true|false (ALPHA - default=false) InTreePluginvSphereUnregister=true|false (ALPHA - default=false) JobMutableNodeSchedulingDirectives=true|false (BETA - default=true) JobReadyPods=true|false (BETA - default=true) JobTrackingWithFinalizers=true|false (BETA - default=false) KubeletCredentialProviders=true|false (BETA - default=true) KubeletInUserNamespace=true|false (ALPHA - default=false) KubeletPodResources=true|false (BETA - default=true) KubeletPodResourcesGetAllocatable=true|false (BETA - default=true) LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - default=true) LocalStorageCapacityIsolation=true|false (BETA - default=true) LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false) LogarithmicScaleDown=true|false (BETA - default=true) MaxUnavailableStatefulSet=true|false (ALPHA - default=false) MemoryManager=true|false (BETA - default=true) MemoryQoS=true|false (ALPHA - default=false) MinDomainsInPodTopologySpread=true|false (ALPHA - default=false) MixedProtocolLBService=true|false (BETA - default=true) NetworkPolicyEndPort=true|false (BETA - default=true) NetworkPolicyStatus=true|false (ALPHA - default=false) NodeOutOfServiceVolumeDetach=true|false (ALPHA - default=false) NodeSwap=true|false (ALPHA - default=false) OpenAPIEnums=true|false (BETA - default=true) OpenAPIV3=true|false (BETA - default=true) PodAndContainerStatsFromCRI=true|false (ALPHA - default=false) PodDeletionCost=true|false (BETA - default=true) PodSecurity=true|false (BETA - default=true) ProbeTerminationGracePeriod=true|false (BETA - default=false) ProcMountType=true|false (ALPHA - default=false) ProxyTerminatingEndpoints=true|false (ALPHA - default=false) QOSReserved=true|false (ALPHA - default=false) ReadWriteOncePod=true|false (ALPHA - default=false) RecoverVolumeExpansionFailure=true|false (ALPHA - default=false) RemainingItemCount=true|false (BETA - default=true) RotateKubeletServerCertificate=true|false (BETA - default=true) SeccompDefault=true|false (ALPHA - default=false) ServerSideFieldValidation=true|false (ALPHA - default=false) ServiceIPStaticSubrange=true|false (ALPHA - default=false) ServiceInternalTrafficPolicy=true|false (BETA - default=true) SizeMemoryBackedVolumes=true|false (BETA - default=true) StatefulSetAutoDeletePVC=true|false (ALPHA - default=false) StatefulSetMinReadySeconds=true|false (BETA - default=true) StorageVersionAPI=true|false (ALPHA - default=false) StorageVersionHash=true|false (BETA - default=true) TopologyAwareHints=true|false (BETA - default=true) TopologyManager=true|false (BETA - default=true) VolumeCapacityPriority=true|false (ALPHA - default=false) WinDSR=true|false (ALPHA - default=false) WinOverlay=true|false (BETA - default=true) WindowsHostProcessContainers=true|false (BETA - default=true)
diff --git a/content/en/docs/reference/command-line-tools-reference/kube-controller-manager.md b/content/en/docs/reference/command-line-tools-reference/kube-controller-manager.md
index 6f1f3489a0..f0d0ee4e98 100644
--- a/content/en/docs/reference/command-line-tools-reference/kube-controller-manager.md
+++ b/content/en/docs/reference/command-line-tools-reference/kube-controller-manager.md
@@ -442,13 +442,6 @@ kube-controller-manager [flags]
The length of endpoint slice updates batching period. Processing of pod changes will be delayed by this duration to join them with potential upcoming updates and reduce the overall number of endpoints updates. Larger number = higher endpoint programming latency, but lower number of endpoints revision generated
-
---experimental-logging-sanitization
-
-
-[Experimental] When enabled prevents logging of fields tagged as sensitive (passwords, keys, tokens). Runtime log sanitization may introduce significant computation overhead and therefore should not be enabled in production.
-
-
--external-cloud-volume-plugin string
@@ -460,7 +453,7 @@ kube-controller-manager [flags]
--feature-gates <comma-separated 'key=True|False' pairs>
-A set of key=value pairs that describe feature gates for alpha/experimental features. Options are: APIListChunking=true|false (BETA - default=true) APIPriorityAndFairness=true|false (BETA - default=true) APIResponseCompression=true|false (BETA - default=true) APIServerIdentity=true|false (ALPHA - default=false) APIServerTracing=true|false (ALPHA - default=false) AllAlpha=true|false (ALPHA - default=false) AllBeta=true|false (BETA - default=false) AnyVolumeDataSource=true|false (ALPHA - default=false) AppArmor=true|false (BETA - default=true) CPUManager=true|false (BETA - default=true) CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false) CPUManagerPolicyBetaOptions=true|false (BETA - default=true) CPUManagerPolicyOptions=true|false (BETA - default=true) CSIInlineVolume=true|false (BETA - default=true) CSIMigration=true|false (BETA - default=true) CSIMigrationAWS=true|false (BETA - default=true) CSIMigrationAzureDisk=true|false (BETA - default=true) CSIMigrationAzureFile=true|false (BETA - default=false) CSIMigrationGCE=true|false (BETA - default=true) CSIMigrationOpenStack=true|false (BETA - default=true) CSIMigrationPortworx=true|false (ALPHA - default=false) CSIMigrationvSphere=true|false (BETA - default=false) CSIStorageCapacity=true|false (BETA - default=true) CSIVolumeHealth=true|false (ALPHA - default=false) CSRDuration=true|false (BETA - default=true) ControllerManagerLeaderMigration=true|false (BETA - default=true) CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false) CustomResourceValidationExpressions=true|false (ALPHA - default=false) DaemonSetUpdateSurge=true|false (BETA - default=true) DefaultPodTopologySpread=true|false (BETA - default=true) DelegateFSGroupToCSIDriver=true|false (BETA - default=true) DevicePlugins=true|false (BETA - default=true) DisableAcceleratorUsageMetrics=true|false (BETA - default=true) DisableCloudProviders=true|false (ALPHA - default=false) DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false) DownwardAPIHugePages=true|false (BETA - default=true) EfficientWatchResumption=true|false (BETA - default=true) EndpointSliceTerminatingCondition=true|false (BETA - default=true) EphemeralContainers=true|false (BETA - default=true) ExpandCSIVolumes=true|false (BETA - default=true) ExpandInUsePersistentVolumes=true|false (BETA - default=true) ExpandPersistentVolumes=true|false (BETA - default=true) ExpandedDNSConfig=true|false (ALPHA - default=false) ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false) GRPCContainerProbe=true|false (ALPHA - default=false) GracefulNodeShutdown=true|false (BETA - default=true) GracefulNodeShutdownBasedOnPodPriority=true|false (ALPHA - default=false) HPAContainerMetrics=true|false (ALPHA - default=false) HPAScaleToZero=true|false (ALPHA - default=false) HonorPVReclaimPolicy=true|false (ALPHA - default=false) IdentifyPodOS=true|false (ALPHA - default=false) InTreePluginAWSUnregister=true|false (ALPHA - default=false) InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false) InTreePluginAzureFileUnregister=true|false (ALPHA - default=false) InTreePluginGCEUnregister=true|false (ALPHA - default=false) InTreePluginOpenStackUnregister=true|false (ALPHA - default=false) InTreePluginPortworxUnregister=true|false (ALPHA - default=false) InTreePluginRBDUnregister=true|false (ALPHA - default=false) InTreePluginvSphereUnregister=true|false (ALPHA - default=false) IndexedJob=true|false (BETA - default=true) JobMutableNodeSchedulingDirectives=true|false (BETA - default=true) JobReadyPods=true|false (ALPHA - default=false) JobTrackingWithFinalizers=true|false (BETA - default=true) KubeletCredentialProviders=true|false (ALPHA - default=false) KubeletInUserNamespace=true|false (ALPHA - default=false) KubeletPodResources=true|false (BETA - default=true) KubeletPodResourcesGetAllocatable=true|false (BETA - default=true) LocalStorageCapacityIsolation=true|false (BETA - default=true) LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false) LogarithmicScaleDown=true|false (BETA - default=true) MemoryManager=true|false (BETA - default=true) MemoryQoS=true|false (ALPHA - default=false) MixedProtocolLBService=true|false (ALPHA - default=false) NetworkPolicyEndPort=true|false (BETA - default=true) NodeSwap=true|false (ALPHA - default=false) NonPreemptingPriority=true|false (BETA - default=true) OpenAPIEnums=true|false (ALPHA - default=false) OpenAPIV3=true|false (ALPHA - default=false) PodAffinityNamespaceSelector=true|false (BETA - default=true) PodAndContainerStatsFromCRI=true|false (ALPHA - default=false) PodDeletionCost=true|false (BETA - default=true) PodOverhead=true|false (BETA - default=true) PodSecurity=true|false (BETA - default=true) PreferNominatedNode=true|false (BETA - default=true) ProbeTerminationGracePeriod=true|false (BETA - default=false) ProcMountType=true|false (ALPHA - default=false) ProxyTerminatingEndpoints=true|false (ALPHA - default=false) QOSReserved=true|false (ALPHA - default=false) ReadWriteOncePod=true|false (ALPHA - default=false) RecoverVolumeExpansionFailure=true|false (ALPHA - default=false) RemainingItemCount=true|false (BETA - default=true) RemoveSelfLink=true|false (BETA - default=true) RotateKubeletServerCertificate=true|false (BETA - default=true) SeccompDefault=true|false (ALPHA - default=false) ServerSideFieldValidation=true|false (ALPHA - default=false) ServiceInternalTrafficPolicy=true|false (BETA - default=true) ServiceLBNodePortControl=true|false (BETA - default=true) ServiceLoadBalancerClass=true|false (BETA - default=true) SizeMemoryBackedVolumes=true|false (BETA - default=true) StatefulSetAutoDeletePVC=true|false (ALPHA - default=false) StatefulSetMinReadySeconds=true|false (BETA - default=true) StorageVersionAPI=true|false (ALPHA - default=false) StorageVersionHash=true|false (BETA - default=true) SuspendJob=true|false (BETA - default=true) TopologyAwareHints=true|false (BETA - default=false) TopologyManager=true|false (BETA - default=true) VolumeCapacityPriority=true|false (ALPHA - default=false) WinDSR=true|false (ALPHA - default=false) WinOverlay=true|false (BETA - default=true) WindowsHostProcessContainers=true|false (BETA - default=true) csiMigrationRBD=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for alpha/experimental features. Options are: APIListChunking=true|false (BETA - default=true) APIPriorityAndFairness=true|false (BETA - default=true) APIResponseCompression=true|false (BETA - default=true) APIServerIdentity=true|false (ALPHA - default=false) APIServerTracing=true|false (ALPHA - default=false) AllAlpha=true|false (ALPHA - default=false) AllBeta=true|false (BETA - default=false) AnyVolumeDataSource=true|false (BETA - default=true) AppArmor=true|false (BETA - default=true) CPUManager=true|false (BETA - default=true) CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false) CPUManagerPolicyBetaOptions=true|false (BETA - default=true) CPUManagerPolicyOptions=true|false (BETA - default=true) CSIInlineVolume=true|false (BETA - default=true) CSIMigration=true|false (BETA - default=true) CSIMigrationAWS=true|false (BETA - default=true) CSIMigrationAzureFile=true|false (BETA - default=true) CSIMigrationGCE=true|false (BETA - default=true) CSIMigrationPortworx=true|false (ALPHA - default=false) CSIMigrationRBD=true|false (ALPHA - default=false) CSIMigrationvSphere=true|false (BETA - default=false) CSIVolumeHealth=true|false (ALPHA - default=false) ContextualLogging=true|false (ALPHA - default=false) CronJobTimeZone=true|false (ALPHA - default=false) CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false) CustomResourceValidationExpressions=true|false (ALPHA - default=false) DaemonSetUpdateSurge=true|false (BETA - default=true) DelegateFSGroupToCSIDriver=true|false (BETA - default=true) DevicePlugins=true|false (BETA - default=true) DisableAcceleratorUsageMetrics=true|false (BETA - default=true) DisableCloudProviders=true|false (ALPHA - default=false) DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false) DownwardAPIHugePages=true|false (BETA - default=true) EndpointSliceTerminatingCondition=true|false (BETA - default=true) EphemeralContainers=true|false (BETA - default=true) ExpandedDNSConfig=true|false (ALPHA - default=false) ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false) GRPCContainerProbe=true|false (BETA - default=true) GracefulNodeShutdown=true|false (BETA - default=true) GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - default=true) HPAContainerMetrics=true|false (ALPHA - default=false) HPAScaleToZero=true|false (ALPHA - default=false) HonorPVReclaimPolicy=true|false (ALPHA - default=false) IdentifyPodOS=true|false (BETA - default=true) InTreePluginAWSUnregister=true|false (ALPHA - default=false) InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false) InTreePluginAzureFileUnregister=true|false (ALPHA - default=false) InTreePluginGCEUnregister=true|false (ALPHA - default=false) InTreePluginOpenStackUnregister=true|false (ALPHA - default=false) InTreePluginPortworxUnregister=true|false (ALPHA - default=false) InTreePluginRBDUnregister=true|false (ALPHA - default=false) InTreePluginvSphereUnregister=true|false (ALPHA - default=false) JobMutableNodeSchedulingDirectives=true|false (BETA - default=true) JobReadyPods=true|false (BETA - default=true) JobTrackingWithFinalizers=true|false (BETA - default=false) KubeletCredentialProviders=true|false (BETA - default=true) KubeletInUserNamespace=true|false (ALPHA - default=false) KubeletPodResources=true|false (BETA - default=true) KubeletPodResourcesGetAllocatable=true|false (BETA - default=true) LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - default=true) LocalStorageCapacityIsolation=true|false (BETA - default=true) LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false) LogarithmicScaleDown=true|false (BETA - default=true) MaxUnavailableStatefulSet=true|false (ALPHA - default=false) MemoryManager=true|false (BETA - default=true) MemoryQoS=true|false (ALPHA - default=false) MinDomainsInPodTopologySpread=true|false (ALPHA - default=false) MixedProtocolLBService=true|false (BETA - default=true) NetworkPolicyEndPort=true|false (BETA - default=true) NetworkPolicyStatus=true|false (ALPHA - default=false) NodeOutOfServiceVolumeDetach=true|false (ALPHA - default=false) NodeSwap=true|false (ALPHA - default=false) OpenAPIEnums=true|false (BETA - default=true) OpenAPIV3=true|false (BETA - default=true) PodAndContainerStatsFromCRI=true|false (ALPHA - default=false) PodDeletionCost=true|false (BETA - default=true) PodSecurity=true|false (BETA - default=true) ProbeTerminationGracePeriod=true|false (BETA - default=false) ProcMountType=true|false (ALPHA - default=false) ProxyTerminatingEndpoints=true|false (ALPHA - default=false) QOSReserved=true|false (ALPHA - default=false) ReadWriteOncePod=true|false (ALPHA - default=false) RecoverVolumeExpansionFailure=true|false (ALPHA - default=false) RemainingItemCount=true|false (BETA - default=true) RotateKubeletServerCertificate=true|false (BETA - default=true) SeccompDefault=true|false (ALPHA - default=false) ServerSideFieldValidation=true|false (ALPHA - default=false) ServiceIPStaticSubrange=true|false (ALPHA - default=false) ServiceInternalTrafficPolicy=true|false (BETA - default=true) SizeMemoryBackedVolumes=true|false (BETA - default=true) StatefulSetAutoDeletePVC=true|false (ALPHA - default=false) StatefulSetMinReadySeconds=true|false (BETA - default=true) StorageVersionAPI=true|false (ALPHA - default=false) StorageVersionHash=true|false (BETA - default=true) TopologyAwareHints=true|false (BETA - default=true) TopologyManager=true|false (BETA - default=true) VolumeCapacityPriority=true|false (ALPHA - default=false) WinDSR=true|false (ALPHA - default=false) WinOverlay=true|false (BETA - default=true) WindowsHostProcessContainers=true|false (BETA - default=true)
@@ -579,7 +572,7 @@ kube-controller-manager [flags]
--leader-elect-resource-lock string Default: "leases"
-The type of resource object that is used for locking during leader election. Supported options are 'endpoints', 'configmaps', 'leases', 'endpointsleases' and 'configmapsleases'.
+The type of resource object that is used for locking during leader election. Supported options are 'leases', 'endpointsleases' and 'configmapsleases'.
diff --git a/content/en/docs/reference/command-line-tools-reference/kube-proxy.md b/content/en/docs/reference/command-line-tools-reference/kube-proxy.md
index abe749b801..d391dfc46b 100644
--- a/content/en/docs/reference/command-line-tools-reference/kube-proxy.md
+++ b/content/en/docs/reference/command-line-tools-reference/kube-proxy.md
@@ -53,7 +53,7 @@ kube-proxy [flags]
--bind-address string Default: 0.0.0.0
-The IP address for the proxy server to serve on (set to '0.0.0.0' for all IPv4 interfaces and '::' for all IPv6 interfaces)
+The IP address for the proxy server to serve on (set to '0.0.0.0' for all IPv4 interfaces and '::' for all IPv6 interfaces). This parameter is ignored if a config file is specified by --config.
@@ -102,7 +102,7 @@ kube-proxy [flags]
--cluster-cidr string
-The CIDR range of pods in the cluster. When configured, traffic sent to a Service cluster IP from outside this range will be masqueraded and traffic sent from pods to an external LoadBalancer IP will be directed to the respective cluster IP instead
+The CIDR range of pods in the cluster. When configured, traffic sent to a Service cluster IP from outside this range will be masqueraded and traffic sent from pods to an external LoadBalancer IP will be directed to the respective cluster IP instead. For dual-stack clusters, a comma-separated list is accepted with at least one CIDR per IP family (IPv4 and IPv6). This parameter is ignored if a config file is specified by --config.
@@ -165,21 +165,21 @@ kube-proxy [flags]
--detect-local-mode LocalMode
-Mode to use to detect local traffic
+Mode to use to detect local traffic. This parameter is ignored if a config file is specified by --config.
--feature-gates <comma-separated 'key=True|False' pairs>
-A set of key=value pairs that describe feature gates for alpha/experimental features. Options are: APIListChunking=true|false (BETA - default=true) APIPriorityAndFairness=true|false (BETA - default=true) APIResponseCompression=true|false (BETA - default=true) APIServerIdentity=true|false (ALPHA - default=false) APIServerTracing=true|false (ALPHA - default=false) AllAlpha=true|false (ALPHA - default=false) AllBeta=true|false (BETA - default=false) AnyVolumeDataSource=true|false (ALPHA - default=false) AppArmor=true|false (BETA - default=true) CPUManager=true|false (BETA - default=true) CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false) CPUManagerPolicyBetaOptions=true|false (BETA - default=true) CPUManagerPolicyOptions=true|false (BETA - default=true) CSIInlineVolume=true|false (BETA - default=true) CSIMigration=true|false (BETA - default=true) CSIMigrationAWS=true|false (BETA - default=true) CSIMigrationAzureDisk=true|false (BETA - default=true) CSIMigrationAzureFile=true|false (BETA - default=false) CSIMigrationGCE=true|false (BETA - default=true) CSIMigrationOpenStack=true|false (BETA - default=true) CSIMigrationPortworx=true|false (ALPHA - default=false) CSIMigrationvSphere=true|false (BETA - default=false) CSIStorageCapacity=true|false (BETA - default=true) CSIVolumeHealth=true|false (ALPHA - default=false) CSRDuration=true|false (BETA - default=true) ControllerManagerLeaderMigration=true|false (BETA - default=true) CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false) CustomResourceValidationExpressions=true|false (ALPHA - default=false) DaemonSetUpdateSurge=true|false (BETA - default=true) DefaultPodTopologySpread=true|false (BETA - default=true) DelegateFSGroupToCSIDriver=true|false (BETA - default=true) DevicePlugins=true|false (BETA - default=true) DisableAcceleratorUsageMetrics=true|false (BETA - default=true) DisableCloudProviders=true|false (ALPHA - default=false) DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false) DownwardAPIHugePages=true|false (BETA - default=true) EfficientWatchResumption=true|false (BETA - default=true) EndpointSliceTerminatingCondition=true|false (BETA - default=true) EphemeralContainers=true|false (BETA - default=true) ExpandCSIVolumes=true|false (BETA - default=true) ExpandInUsePersistentVolumes=true|false (BETA - default=true) ExpandPersistentVolumes=true|false (BETA - default=true) ExpandedDNSConfig=true|false (ALPHA - default=false) ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false) GRPCContainerProbe=true|false (ALPHA - default=false) GracefulNodeShutdown=true|false (BETA - default=true) GracefulNodeShutdownBasedOnPodPriority=true|false (ALPHA - default=false) HPAContainerMetrics=true|false (ALPHA - default=false) HPAScaleToZero=true|false (ALPHA - default=false) HonorPVReclaimPolicy=true|false (ALPHA - default=false) IdentifyPodOS=true|false (ALPHA - default=false) InTreePluginAWSUnregister=true|false (ALPHA - default=false) InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false) InTreePluginAzureFileUnregister=true|false (ALPHA - default=false) InTreePluginGCEUnregister=true|false (ALPHA - default=false) InTreePluginOpenStackUnregister=true|false (ALPHA - default=false) InTreePluginPortworxUnregister=true|false (ALPHA - default=false) InTreePluginRBDUnregister=true|false (ALPHA - default=false) InTreePluginvSphereUnregister=true|false (ALPHA - default=false) IndexedJob=true|false (BETA - default=true) JobMutableNodeSchedulingDirectives=true|false (BETA - default=true) JobReadyPods=true|false (ALPHA - default=false) JobTrackingWithFinalizers=true|false (BETA - default=true) KubeletCredentialProviders=true|false (ALPHA - default=false) KubeletInUserNamespace=true|false (ALPHA - default=false) KubeletPodResources=true|false (BETA - default=true) KubeletPodResourcesGetAllocatable=true|false (BETA - default=true) LocalStorageCapacityIsolation=true|false (BETA - default=true) LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false) LogarithmicScaleDown=true|false (BETA - default=true) MemoryManager=true|false (BETA - default=true) MemoryQoS=true|false (ALPHA - default=false) MixedProtocolLBService=true|false (ALPHA - default=false) NetworkPolicyEndPort=true|false (BETA - default=true) NodeSwap=true|false (ALPHA - default=false) NonPreemptingPriority=true|false (BETA - default=true) OpenAPIEnums=true|false (ALPHA - default=false) OpenAPIV3=true|false (ALPHA - default=false) PodAffinityNamespaceSelector=true|false (BETA - default=true) PodAndContainerStatsFromCRI=true|false (ALPHA - default=false) PodDeletionCost=true|false (BETA - default=true) PodOverhead=true|false (BETA - default=true) PodSecurity=true|false (BETA - default=true) PreferNominatedNode=true|false (BETA - default=true) ProbeTerminationGracePeriod=true|false (BETA - default=false) ProcMountType=true|false (ALPHA - default=false) ProxyTerminatingEndpoints=true|false (ALPHA - default=false) QOSReserved=true|false (ALPHA - default=false) ReadWriteOncePod=true|false (ALPHA - default=false) RecoverVolumeExpansionFailure=true|false (ALPHA - default=false) RemainingItemCount=true|false (BETA - default=true) RemoveSelfLink=true|false (BETA - default=true) RotateKubeletServerCertificate=true|false (BETA - default=true) SeccompDefault=true|false (ALPHA - default=false) ServerSideFieldValidation=true|false (ALPHA - default=false) ServiceInternalTrafficPolicy=true|false (BETA - default=true) ServiceLBNodePortControl=true|false (BETA - default=true) ServiceLoadBalancerClass=true|false (BETA - default=true) SizeMemoryBackedVolumes=true|false (BETA - default=true) StatefulSetAutoDeletePVC=true|false (ALPHA - default=false) StatefulSetMinReadySeconds=true|false (BETA - default=true) StorageVersionAPI=true|false (ALPHA - default=false) StorageVersionHash=true|false (BETA - default=true) SuspendJob=true|false (BETA - default=true) TopologyAwareHints=true|false (BETA - default=false) TopologyManager=true|false (BETA - default=true) VolumeCapacityPriority=true|false (ALPHA - default=false) WinDSR=true|false (ALPHA - default=false) WinOverlay=true|false (BETA - default=true) WindowsHostProcessContainers=true|false (BETA - default=true) csiMigrationRBD=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for alpha/experimental features. Options are: APIListChunking=true|false (BETA - default=true) APIPriorityAndFairness=true|false (BETA - default=true) APIResponseCompression=true|false (BETA - default=true) APIServerIdentity=true|false (ALPHA - default=false) APIServerTracing=true|false (ALPHA - default=false) AllAlpha=true|false (ALPHA - default=false) AllBeta=true|false (BETA - default=false) AnyVolumeDataSource=true|false (BETA - default=true) AppArmor=true|false (BETA - default=true) CPUManager=true|false (BETA - default=true) CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false) CPUManagerPolicyBetaOptions=true|false (BETA - default=true) CPUManagerPolicyOptions=true|false (BETA - default=true) CSIInlineVolume=true|false (BETA - default=true) CSIMigration=true|false (BETA - default=true) CSIMigrationAWS=true|false (BETA - default=true) CSIMigrationAzureFile=true|false (BETA - default=true) CSIMigrationGCE=true|false (BETA - default=true) CSIMigrationPortworx=true|false (ALPHA - default=false) CSIMigrationRBD=true|false (ALPHA - default=false) CSIMigrationvSphere=true|false (BETA - default=false) CSIVolumeHealth=true|false (ALPHA - default=false) ContextualLogging=true|false (ALPHA - default=false) CronJobTimeZone=true|false (ALPHA - default=false) CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false) CustomResourceValidationExpressions=true|false (ALPHA - default=false) DaemonSetUpdateSurge=true|false (BETA - default=true) DelegateFSGroupToCSIDriver=true|false (BETA - default=true) DevicePlugins=true|false (BETA - default=true) DisableAcceleratorUsageMetrics=true|false (BETA - default=true) DisableCloudProviders=true|false (ALPHA - default=false) DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false) DownwardAPIHugePages=true|false (BETA - default=true) EndpointSliceTerminatingCondition=true|false (BETA - default=true) EphemeralContainers=true|false (BETA - default=true) ExpandedDNSConfig=true|false (ALPHA - default=false) ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false) GRPCContainerProbe=true|false (BETA - default=true) GracefulNodeShutdown=true|false (BETA - default=true) GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - default=true) HPAContainerMetrics=true|false (ALPHA - default=false) HPAScaleToZero=true|false (ALPHA - default=false) HonorPVReclaimPolicy=true|false (ALPHA - default=false) IdentifyPodOS=true|false (BETA - default=true) InTreePluginAWSUnregister=true|false (ALPHA - default=false) InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false) InTreePluginAzureFileUnregister=true|false (ALPHA - default=false) InTreePluginGCEUnregister=true|false (ALPHA - default=false) InTreePluginOpenStackUnregister=true|false (ALPHA - default=false) InTreePluginPortworxUnregister=true|false (ALPHA - default=false) InTreePluginRBDUnregister=true|false (ALPHA - default=false) InTreePluginvSphereUnregister=true|false (ALPHA - default=false) JobMutableNodeSchedulingDirectives=true|false (BETA - default=true) JobReadyPods=true|false (BETA - default=true) JobTrackingWithFinalizers=true|false (BETA - default=false) KubeletCredentialProviders=true|false (BETA - default=true) KubeletInUserNamespace=true|false (ALPHA - default=false) KubeletPodResources=true|false (BETA - default=true) KubeletPodResourcesGetAllocatable=true|false (BETA - default=true) LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - default=true) LocalStorageCapacityIsolation=true|false (BETA - default=true) LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false) LogarithmicScaleDown=true|false (BETA - default=true) MaxUnavailableStatefulSet=true|false (ALPHA - default=false) MemoryManager=true|false (BETA - default=true) MemoryQoS=true|false (ALPHA - default=false) MinDomainsInPodTopologySpread=true|false (ALPHA - default=false) MixedProtocolLBService=true|false (BETA - default=true) NetworkPolicyEndPort=true|false (BETA - default=true) NetworkPolicyStatus=true|false (ALPHA - default=false) NodeOutOfServiceVolumeDetach=true|false (ALPHA - default=false) NodeSwap=true|false (ALPHA - default=false) OpenAPIEnums=true|false (BETA - default=true) OpenAPIV3=true|false (BETA - default=true) PodAndContainerStatsFromCRI=true|false (ALPHA - default=false) PodDeletionCost=true|false (BETA - default=true) PodSecurity=true|false (BETA - default=true) ProbeTerminationGracePeriod=true|false (BETA - default=false) ProcMountType=true|false (ALPHA - default=false) ProxyTerminatingEndpoints=true|false (ALPHA - default=false) QOSReserved=true|false (ALPHA - default=false) ReadWriteOncePod=true|false (ALPHA - default=false) RecoverVolumeExpansionFailure=true|false (ALPHA - default=false) RemainingItemCount=true|false (BETA - default=true) RotateKubeletServerCertificate=true|false (BETA - default=true) SeccompDefault=true|false (ALPHA - default=false) ServerSideFieldValidation=true|false (ALPHA - default=false) ServiceIPStaticSubrange=true|false (ALPHA - default=false) ServiceInternalTrafficPolicy=true|false (BETA - default=true) SizeMemoryBackedVolumes=true|false (BETA - default=true) StatefulSetAutoDeletePVC=true|false (ALPHA - default=false) StatefulSetMinReadySeconds=true|false (BETA - default=true) StorageVersionAPI=true|false (ALPHA - default=false) StorageVersionHash=true|false (BETA - default=true) TopologyAwareHints=true|false (BETA - default=true) TopologyManager=true|false (BETA - default=true) VolumeCapacityPriority=true|false (ALPHA - default=false) WinDSR=true|false (ALPHA - default=false) WinOverlay=true|false (BETA - default=true) WindowsHostProcessContainers=true|false (BETA - default=true)This parameter is ignored if a config file is specified by --config.
--healthz-bind-address ipport Default: 0.0.0.0:10256
-The IP address with port for the health check server to serve on (set to '0.0.0.0:10256' for all IPv4 interfaces and '[::]:10256' for all IPv6 interfaces). Set empty to disable.
+The IP address with port for the health check server to serve on (set to '0.0.0.0:10256' for all IPv4 interfaces and '[::]:10256' for all IPv6 interfaces). Set empty to disable. This parameter is ignored if a config file is specified by --config.
@@ -333,35 +333,49 @@ kube-proxy [flags]
--metrics-bind-address ipport Default: 127.0.0.1:10249
-The IP address with port for the metrics server to serve on (set to '0.0.0.0:10249' for all IPv4 interfaces and '[::]:10249' for all IPv6 interfaces). Set empty to disable.
+The IP address with port for the metrics server to serve on (set to '0.0.0.0:10249' for all IPv4 interfaces and '[::]:10249' for all IPv6 interfaces). Set empty to disable. This parameter is ignored if a config file is specified by --config.
--nodeport-addresses strings
-A string slice of values which specify the addresses to use for NodePorts. Values may be valid IP blocks (e.g. 1.2.3.0/24, 1.2.3.4/32). The default empty string slice ([]) means to use all local addresses.
+A string slice of values which specify the addresses to use for NodePorts. Values may be valid IP blocks (e.g. 1.2.3.0/24, 1.2.3.4/32). The default empty string slice ([]) means to use all local addresses. This parameter is ignored if a config file is specified by --config.
--oom-score-adj int32 Default: -999
-The oom-score-adj value for kube-proxy process. Values must be within the range [-1000, 1000]
+The oom-score-adj value for kube-proxy process. Values must be within the range [-1000, 1000]. This parameter is ignored if a config file is specified by --config.
+
+
+
+--pod-bridge-interface string
+
+
+A bridge interface name in the cluster. Kube-proxy considers traffic as local if originating from an interface which matches the value. This argument should be set if DetectLocalMode is set to BridgeInterface.
+
+
+
+--pod-interface-name-prefix string
+
+
+An interface prefix in the cluster. Kube-proxy considers traffic as local if originating from interfaces that match the given prefix. This argument should be set if DetectLocalMode is set to InterfaceNamePrefix.
--profiling
-If true enables profiling via web interface on /debug/pprof handler.
+If true enables profiling via web interface on /debug/pprof handler. This parameter is ignored if a config file is specified by --config.
--proxy-mode ProxyMode
-Which proxy mode to use: 'userspace' (older) or 'iptables' (faster) or 'ipvs' or 'kernelspace' (windows). If blank, use the best-available proxy (currently iptables). If the iptables proxy is selected, regardless of how, but the system's kernel or iptables versions are insufficient, this always falls back to the userspace proxy.
+Which proxy mode to use: 'iptables' (Linux-only), 'ipvs' (Linux-only), 'kernelspace' (Windows-only), or 'userspace' (Linux/Windows, deprecated). The default value is 'iptables' on Linux and 'userspace' on Windows.This parameter is ignored if a config file is specified by --config.
@@ -375,7 +389,7 @@ kube-proxy [flags]
--show-hidden-metrics-for-version string
-The previous version for which you want to show hidden metrics. Only the previous minor version is meaningful, other values will not be allowed. The format is <major>.<minor>, e.g.: '1.16'. The purpose of this format is make sure you have the opportunity to notice if the next release hides additional metrics, rather than being surprised when they are permanently removed in the release after that.
+The previous version for which you want to show hidden metrics. Only the previous minor version is meaningful, other values will not be allowed. The format is <major>.<minor>, e.g.: '1.16'. The purpose of this format is make sure you have the opportunity to notice if the next release hides additional metrics, rather than being surprised when they are permanently removed in the release after that.This parameter is ignored if a config file is specified by --config.
diff --git a/content/en/docs/reference/command-line-tools-reference/kube-scheduler.md b/content/en/docs/reference/command-line-tools-reference/kube-scheduler.md
index 6f0115d6ac..ed0980e299 100644
--- a/content/en/docs/reference/command-line-tools-reference/kube-scheduler.md
+++ b/content/en/docs/reference/command-line-tools-reference/kube-scheduler.md
@@ -155,18 +155,11 @@ kube-scheduler [flags]
This flag provides an escape hatch for misbehaving metrics. You must provide the fully qualified metric name in order to disable it. Disclaimer: disabling metrics is higher in precedence than showing hidden metrics.
-
---experimental-logging-sanitization
-
-
-[Experimental] When enabled prevents logging of fields tagged as sensitive (passwords, keys, tokens). Runtime log sanitization may introduce significant computation overhead and therefore should not be enabled in production.
-
-
--feature-gates <comma-separated 'key=True|False' pairs>
-A set of key=value pairs that describe feature gates for alpha/experimental features. Options are: APIListChunking=true|false (BETA - default=true) APIPriorityAndFairness=true|false (BETA - default=true) APIResponseCompression=true|false (BETA - default=true) APIServerIdentity=true|false (ALPHA - default=false) APIServerTracing=true|false (ALPHA - default=false) AllAlpha=true|false (ALPHA - default=false) AllBeta=true|false (BETA - default=false) AnyVolumeDataSource=true|false (ALPHA - default=false) AppArmor=true|false (BETA - default=true) CPUManager=true|false (BETA - default=true) CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false) CPUManagerPolicyBetaOptions=true|false (BETA - default=true) CPUManagerPolicyOptions=true|false (BETA - default=true) CSIInlineVolume=true|false (BETA - default=true) CSIMigration=true|false (BETA - default=true) CSIMigrationAWS=true|false (BETA - default=true) CSIMigrationAzureDisk=true|false (BETA - default=true) CSIMigrationAzureFile=true|false (BETA - default=false) CSIMigrationGCE=true|false (BETA - default=true) CSIMigrationOpenStack=true|false (BETA - default=true) CSIMigrationPortworx=true|false (ALPHA - default=false) CSIMigrationvSphere=true|false (BETA - default=false) CSIStorageCapacity=true|false (BETA - default=true) CSIVolumeHealth=true|false (ALPHA - default=false) CSRDuration=true|false (BETA - default=true) ControllerManagerLeaderMigration=true|false (BETA - default=true) CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false) CustomResourceValidationExpressions=true|false (ALPHA - default=false) DaemonSetUpdateSurge=true|false (BETA - default=true) DefaultPodTopologySpread=true|false (BETA - default=true) DelegateFSGroupToCSIDriver=true|false (BETA - default=true) DevicePlugins=true|false (BETA - default=true) DisableAcceleratorUsageMetrics=true|false (BETA - default=true) DisableCloudProviders=true|false (ALPHA - default=false) DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false) DownwardAPIHugePages=true|false (BETA - default=true) EfficientWatchResumption=true|false (BETA - default=true) EndpointSliceTerminatingCondition=true|false (BETA - default=true) EphemeralContainers=true|false (BETA - default=true) ExpandCSIVolumes=true|false (BETA - default=true) ExpandInUsePersistentVolumes=true|false (BETA - default=true) ExpandPersistentVolumes=true|false (BETA - default=true) ExpandedDNSConfig=true|false (ALPHA - default=false) ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false) GRPCContainerProbe=true|false (ALPHA - default=false) GracefulNodeShutdown=true|false (BETA - default=true) GracefulNodeShutdownBasedOnPodPriority=true|false (ALPHA - default=false) HPAContainerMetrics=true|false (ALPHA - default=false) HPAScaleToZero=true|false (ALPHA - default=false) HonorPVReclaimPolicy=true|false (ALPHA - default=false) IdentifyPodOS=true|false (ALPHA - default=false) InTreePluginAWSUnregister=true|false (ALPHA - default=false) InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false) InTreePluginAzureFileUnregister=true|false (ALPHA - default=false) InTreePluginGCEUnregister=true|false (ALPHA - default=false) InTreePluginOpenStackUnregister=true|false (ALPHA - default=false) InTreePluginPortworxUnregister=true|false (ALPHA - default=false) InTreePluginRBDUnregister=true|false (ALPHA - default=false) InTreePluginvSphereUnregister=true|false (ALPHA - default=false) IndexedJob=true|false (BETA - default=true) JobMutableNodeSchedulingDirectives=true|false (BETA - default=true) JobReadyPods=true|false (ALPHA - default=false) JobTrackingWithFinalizers=true|false (BETA - default=true) KubeletCredentialProviders=true|false (ALPHA - default=false) KubeletInUserNamespace=true|false (ALPHA - default=false) KubeletPodResources=true|false (BETA - default=true) KubeletPodResourcesGetAllocatable=true|false (BETA - default=true) LocalStorageCapacityIsolation=true|false (BETA - default=true) LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false) LogarithmicScaleDown=true|false (BETA - default=true) MemoryManager=true|false (BETA - default=true) MemoryQoS=true|false (ALPHA - default=false) MixedProtocolLBService=true|false (ALPHA - default=false) NetworkPolicyEndPort=true|false (BETA - default=true) NodeSwap=true|false (ALPHA - default=false) NonPreemptingPriority=true|false (BETA - default=true) OpenAPIEnums=true|false (ALPHA - default=false) OpenAPIV3=true|false (ALPHA - default=false) PodAffinityNamespaceSelector=true|false (BETA - default=true) PodAndContainerStatsFromCRI=true|false (ALPHA - default=false) PodDeletionCost=true|false (BETA - default=true) PodOverhead=true|false (BETA - default=true) PodSecurity=true|false (BETA - default=true) PreferNominatedNode=true|false (BETA - default=true) ProbeTerminationGracePeriod=true|false (BETA - default=false) ProcMountType=true|false (ALPHA - default=false) ProxyTerminatingEndpoints=true|false (ALPHA - default=false) QOSReserved=true|false (ALPHA - default=false) ReadWriteOncePod=true|false (ALPHA - default=false) RecoverVolumeExpansionFailure=true|false (ALPHA - default=false) RemainingItemCount=true|false (BETA - default=true) RemoveSelfLink=true|false (BETA - default=true) RotateKubeletServerCertificate=true|false (BETA - default=true) SeccompDefault=true|false (ALPHA - default=false) ServerSideFieldValidation=true|false (ALPHA - default=false) ServiceInternalTrafficPolicy=true|false (BETA - default=true) ServiceLBNodePortControl=true|false (BETA - default=true) ServiceLoadBalancerClass=true|false (BETA - default=true) SizeMemoryBackedVolumes=true|false (BETA - default=true) StatefulSetAutoDeletePVC=true|false (ALPHA - default=false) StatefulSetMinReadySeconds=true|false (BETA - default=true) StorageVersionAPI=true|false (ALPHA - default=false) StorageVersionHash=true|false (BETA - default=true) SuspendJob=true|false (BETA - default=true) TopologyAwareHints=true|false (BETA - default=false) TopologyManager=true|false (BETA - default=true) VolumeCapacityPriority=true|false (ALPHA - default=false) WinDSR=true|false (ALPHA - default=false) WinOverlay=true|false (BETA - default=true) WindowsHostProcessContainers=true|false (BETA - default=true) csiMigrationRBD=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for alpha/experimental features. Options are: APIListChunking=true|false (BETA - default=true) APIPriorityAndFairness=true|false (BETA - default=true) APIResponseCompression=true|false (BETA - default=true) APIServerIdentity=true|false (ALPHA - default=false) APIServerTracing=true|false (ALPHA - default=false) AllAlpha=true|false (ALPHA - default=false) AllBeta=true|false (BETA - default=false) AnyVolumeDataSource=true|false (BETA - default=true) AppArmor=true|false (BETA - default=true) CPUManager=true|false (BETA - default=true) CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false) CPUManagerPolicyBetaOptions=true|false (BETA - default=true) CPUManagerPolicyOptions=true|false (BETA - default=true) CSIInlineVolume=true|false (BETA - default=true) CSIMigration=true|false (BETA - default=true) CSIMigrationAWS=true|false (BETA - default=true) CSIMigrationAzureFile=true|false (BETA - default=true) CSIMigrationGCE=true|false (BETA - default=true) CSIMigrationPortworx=true|false (ALPHA - default=false) CSIMigrationRBD=true|false (ALPHA - default=false) CSIMigrationvSphere=true|false (BETA - default=false) CSIVolumeHealth=true|false (ALPHA - default=false) ContextualLogging=true|false (ALPHA - default=false) CronJobTimeZone=true|false (ALPHA - default=false) CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false) CustomResourceValidationExpressions=true|false (ALPHA - default=false) DaemonSetUpdateSurge=true|false (BETA - default=true) DelegateFSGroupToCSIDriver=true|false (BETA - default=true) DevicePlugins=true|false (BETA - default=true) DisableAcceleratorUsageMetrics=true|false (BETA - default=true) DisableCloudProviders=true|false (ALPHA - default=false) DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false) DownwardAPIHugePages=true|false (BETA - default=true) EndpointSliceTerminatingCondition=true|false (BETA - default=true) EphemeralContainers=true|false (BETA - default=true) ExpandedDNSConfig=true|false (ALPHA - default=false) ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false) GRPCContainerProbe=true|false (BETA - default=true) GracefulNodeShutdown=true|false (BETA - default=true) GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - default=true) HPAContainerMetrics=true|false (ALPHA - default=false) HPAScaleToZero=true|false (ALPHA - default=false) HonorPVReclaimPolicy=true|false (ALPHA - default=false) IdentifyPodOS=true|false (BETA - default=true) InTreePluginAWSUnregister=true|false (ALPHA - default=false) InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false) InTreePluginAzureFileUnregister=true|false (ALPHA - default=false) InTreePluginGCEUnregister=true|false (ALPHA - default=false) InTreePluginOpenStackUnregister=true|false (ALPHA - default=false) InTreePluginPortworxUnregister=true|false (ALPHA - default=false) InTreePluginRBDUnregister=true|false (ALPHA - default=false) InTreePluginvSphereUnregister=true|false (ALPHA - default=false) JobMutableNodeSchedulingDirectives=true|false (BETA - default=true) JobReadyPods=true|false (BETA - default=true) JobTrackingWithFinalizers=true|false (BETA - default=false) KubeletCredentialProviders=true|false (BETA - default=true) KubeletInUserNamespace=true|false (ALPHA - default=false) KubeletPodResources=true|false (BETA - default=true) KubeletPodResourcesGetAllocatable=true|false (BETA - default=true) LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - default=true) LocalStorageCapacityIsolation=true|false (BETA - default=true) LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false) LogarithmicScaleDown=true|false (BETA - default=true) MaxUnavailableStatefulSet=true|false (ALPHA - default=false) MemoryManager=true|false (BETA - default=true) MemoryQoS=true|false (ALPHA - default=false) MinDomainsInPodTopologySpread=true|false (ALPHA - default=false) MixedProtocolLBService=true|false (BETA - default=true) NetworkPolicyEndPort=true|false (BETA - default=true) NetworkPolicyStatus=true|false (ALPHA - default=false) NodeOutOfServiceVolumeDetach=true|false (ALPHA - default=false) NodeSwap=true|false (ALPHA - default=false) OpenAPIEnums=true|false (BETA - default=true) OpenAPIV3=true|false (BETA - default=true) PodAndContainerStatsFromCRI=true|false (ALPHA - default=false) PodDeletionCost=true|false (BETA - default=true) PodSecurity=true|false (BETA - default=true) ProbeTerminationGracePeriod=true|false (BETA - default=false) ProcMountType=true|false (ALPHA - default=false) ProxyTerminatingEndpoints=true|false (ALPHA - default=false) QOSReserved=true|false (ALPHA - default=false) ReadWriteOncePod=true|false (ALPHA - default=false) RecoverVolumeExpansionFailure=true|false (ALPHA - default=false) RemainingItemCount=true|false (BETA - default=true) RotateKubeletServerCertificate=true|false (BETA - default=true) SeccompDefault=true|false (ALPHA - default=false) ServerSideFieldValidation=true|false (ALPHA - default=false) ServiceIPStaticSubrange=true|false (ALPHA - default=false) ServiceInternalTrafficPolicy=true|false (BETA - default=true) SizeMemoryBackedVolumes=true|false (BETA - default=true) StatefulSetAutoDeletePVC=true|false (ALPHA - default=false) StatefulSetMinReadySeconds=true|false (BETA - default=true) StorageVersionAPI=true|false (ALPHA - default=false) StorageVersionHash=true|false (BETA - default=true) TopologyAwareHints=true|false (BETA - default=true) TopologyManager=true|false (BETA - default=true) VolumeCapacityPriority=true|false (ALPHA - default=false) WinDSR=true|false (ALPHA - default=false) WinOverlay=true|false (BETA - default=true) WindowsHostProcessContainers=true|false (BETA - default=true)
@@ -236,7 +229,7 @@ kube-scheduler [flags]
--leader-elect-resource-lock string Default: "leases"
-The type of resource object that is used for locking during leader election. Supported options are 'endpoints', 'configmaps', 'leases', 'endpointsleases' and 'configmapsleases'.
+The type of resource object that is used for locking during leader election. Supported options are 'leases', 'endpointsleases' and 'configmapsleases'.
@@ -309,6 +302,13 @@ kube-scheduler [flags]
If true, SO_REUSEPORT will be used when binding the port, which allows more than one instance to bind on the same address and port. [default=false]
+
+--pod-max-in-unschedulable-pods-duration duration Default: 5m0s
+
+
+DEPRECATED: the maximum time a pod can stay in unschedulablePods. If a pod stays in unschedulablePods for longer than this value, the pod will be moved from unschedulablePods to backoffQ or activeQ. This flag is deprecated and will be removed in 1.26
+
+
--profiling Default: true
diff --git a/content/en/docs/reference/command-line-tools-reference/kubelet.md b/content/en/docs/reference/command-line-tools-reference/kubelet.md
index 555414a6eb..b10e1b7057 100644
--- a/content/en/docs/reference/command-line-tools-reference/kubelet.md
+++ b/content/en/docs/reference/command-line-tools-reference/kubelet.md
@@ -44,70 +44,70 @@ kubelet [flags]
--add-dir-header
-If true, adds the file directory to the header of the log messages (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
+If true, adds the file directory to the header of the log messages (DEPRECATED: will be removed in a future release, see here .)
--address string Default: 0.0.0.0
-The IP address for the Kubelet to serve on (set to 0.0.0.0 or :: for listening in all interfaces and IP families) (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The IP address for the Kubelet to serve on (set to 0.0.0.0 or :: for listening in all interfaces and IP families) (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--allowed-unsafe-sysctls strings
-Comma-separated whitelist of unsafe sysctls or unsafe sysctl patterns (ending in *). Use these at your own risk. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Comma-separated whitelist of unsafe sysctls or unsafe sysctl patterns (ending in *). Use these at your own risk. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--alsologtostderr
-Log to standard error as well as files (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
+Log to standard error as well as files (DEPRECATED: will be removed in a future release, see here .)
--anonymous-auth Default: true
-Enables anonymous requests to the Kubelet server. Requests that are not rejected by another authentication method are treated as anonymous requests. Anonymous requests have a username of system:anonymous, and a group name of system:unauthenticated. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Enables anonymous requests to the Kubelet server. Requests that are not rejected by another authentication method are treated as anonymous requests. Anonymous requests have a username of system:anonymous, and a group name of system:unauthenticated. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--authentication-token-webhook
-Use the TokenReview API to determine authentication for bearer tokens. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Use the TokenReview API to determine authentication for bearer tokens. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--authentication-token-webhook-cache-ttl duration Default: 2m0s
-The duration to cache responses from the webhook token authenticator. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The duration to cache responses from the webhook token authenticator. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--authorization-mode string Default: AlwaysAllow
-Authorization mode for Kubelet server. Valid options are AlwaysAllow or Webhook. Webhook mode uses the SubjectAccessReview API to determine authorization. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Authorization mode for Kubelet server. Valid options are AlwaysAllow or Webhook. Webhook mode uses the SubjectAccessReview API to determine authorization. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--authorization-webhook-cache-authorized-ttl duration Default: 5m0s
-The duration to cache 'authorized' responses from the webhook authorizer. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The duration to cache 'authorized' responses from the webhook authorizer. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--authorization-webhook-cache-unauthorized-ttl duration Default: 30s
-The duration to cache 'unauthorized' responses from the webhook authorizer. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The duration to cache 'unauthorized' responses from the webhook authorizer. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -135,28 +135,28 @@ kubelet [flags]
--cgroup-driver string Default: cgroupfs
-Driver that the kubelet uses to manipulate cgroups on the host. Possible values: cgroupfs, systemd. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)/td>
+ Driver that the kubelet uses to manipulate cgroups on the host. Possible values: cgroupfs, systemd. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--cgroup-root string Default: ''
-Optional root cgroup to use for pods. This is handled by the container runtime on a best effort basis. Default: '', which means use the container runtime default. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Optional root cgroup to use for pods. This is handled by the container runtime on a best effort basis. Default: '', which means use the container runtime default. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--cgroups-per-qos Default: true
-Enable creation of QoS cgroup hierarchy, if true top level QoS and pod cgroups are created. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Enable creation of QoS cgroup hierarchy, if true top level QoS and pod cgroups are created. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--client-ca-file string
-If set, any request presenting a client certificate signed by one of the authorities in the client-ca-file is authenticated with an identity corresponding to the CommonName of the client certificate. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+If set, any request presenting a client certificate signed by one of the authorities in the client-ca-file is authenticated with an identity corresponding to the CommonName of the client certificate. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -177,14 +177,14 @@ kubelet [flags]
--cluster-dns strings
-Comma-separated list of DNS server IP address. This value is used for containers DNS server in case of Pods with "dnsPolicy=ClusterFirst".Note: all DNS servers appearing in the list MUST serve the same set of records otherwise name resolution within the cluster may not work correctly. There is no guarantee as to which DNS server may be contacted for name resolution. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Comma-separated list of DNS server IP address. This value is used for containers DNS server in case of Pods with "dnsPolicy=ClusterFirst".Note: all DNS servers appearing in the list MUST serve the same set of records otherwise name resolution within the cluster may not work correctly. There is no guarantee as to which DNS server may be contacted for name resolution. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--cluster-domain string
-Domain for this cluster. If set, kubelet will configure all containers to search this domain in addition to the host's search domains (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Domain for this cluster. If set, kubelet will configure all containers to search this domain in addition to the host's search domains (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -219,14 +219,14 @@ kubelet [flags]
--container-log-max-files int32 Default: 5
-<Warning: Beta feature> Set the maximum number of container log files that can be present for a container. The number must be >= 2. This flag can only be used with --container-runtime=remote. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+<Warning: Beta feature> Set the maximum number of container log files that can be present for a container. The number must be >= 2. This flag can only be used with --container-runtime=remote. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--container-log-max-size string Default: 10Mi
-<Warning: Beta feature> Set the maximum size (e.g. 10Mi) of container log file before it is rotated. This flag can only be used with --container-runtime=remote. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+<Warning: Beta feature> Set the maximum size (e.g. 10Mi) of container log file before it is rotated. This flag can only be used with --container-runtime=remote. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -248,42 +248,42 @@ kubelet [flags]
--contention-profiling
-Enable lock contention profiling, if profiling is enabled (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Enable lock contention profiling, if profiling is enabled (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--cpu-cfs-quota Default: true
-Enable CPU CFS quota enforcement for containers that specify CPU limits (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Enable CPU CFS quota enforcement for containers that specify CPU limits (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--cpu-cfs-quota-period duration Default: 100ms
-Sets CPU CFS quota period value, cpu.cfs_period_us, defaults to Linux Kernel default. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Sets CPU CFS quota period value, cpu.cfs_period_us, defaults to Linux Kernel default. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--cpu-manager-policy string Default: none
-CPU Manager policy to use. Possible values: none, static. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+CPU Manager policy to use. Possible values: none, static. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--cpu-manager-policy-options mapStringString
-Comma-separated list of options to fine-tune the behavior of the selected CPU Manager policy. If not supplied, keep the default behaviour. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Comma-separated list of options to fine-tune the behavior of the selected CPU Manager policy. If not supplied, keep the default behaviour. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--cpu-manager-reconcile-period duration Default: 10s
-<Warning: Alpha feature> CPU Manager reconciliation period. Examples: 10s, or 1m. If not supplied, defaults to node status update frequency. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+<Warning: Alpha feature> CPU Manager reconciliation period. Examples: 10s, or 1m. If not supplied, defaults to node status update frequency. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -304,84 +304,84 @@ kubelet [flags]
--enable-controller-attach-detach Default: true
-Enables the Attach/Detach controller to manage attachment/detachment of volumes scheduled to this node, and disables kubelet from executing any attach/detach operations. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Enables the Attach/Detach controller to manage attachment/detachment of volumes scheduled to this node, and disables kubelet from executing any attach/detach operations. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--enable-debugging-handlers Default: true
-Enables server endpoints for log collection and local running of containers and commands. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Enables server endpoints for log collection and local running of containers and commands. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--enable-server Default: true
-Enable the Kubelet's server. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Enable the Kubelet's server. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--enforce-node-allocatable strings Default: pods
-A comma separated list of levels of node allocatable enforcement to be enforced by kubelet. Acceptable options are none, pods, system-reserved, and kube-reserved. If the latter two options are specified, --system-reserved-cgroup and --kube-reserved-cgroup must also be set, respectively. If none is specified, no additional options should be set. See https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/ for more details. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+A comma separated list of levels of node allocatable enforcement to be enforced by kubelet. Acceptable options are none, pods, system-reserved, and kube-reserved. If the latter two options are specified, --system-reserved-cgroup and --kube-reserved-cgroup must also be set, respectively. If none is specified, no additional options should be set. See here for more details. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--event-burst int32 Default: 10
-Maximum size of a bursty event records, temporarily allows event records to burst to this number, while still not exceeding --event-qps. The number must be >= 0. If 0 will use default burst (10). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Maximum size of a bursty event records, temporarily allows event records to burst to this number, while still not exceeding --event-qps. The number must be >= 0. If 0 will use default burst (10). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--event-qps int32 Default: 5
-QPS to limit event creations. The number must be >= 0. If 0 will use default QPS (5). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+QPS to limit event creations. The number must be >= 0. If 0 will use default QPS (5). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--eviction-hard mapStringString Default: imagefs.available<15%,memory.available<100Mi,nodefs.available<10%
-A set of eviction thresholds (e.g. memory.available<1Gi) that if met would trigger a pod eviction. On a Linux node, the default value also includes nodefs.inodesFree<5%. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+A set of eviction thresholds (e.g. memory.available<1Gi) that if met would trigger a pod eviction. On a Linux node, the default value also includes nodefs.inodesFree<5%. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--eviction-max-pod-grace-period int32
- Maximum allowed grace period (in seconds) to use when terminating pods in response to a soft eviction threshold being met. If negative, defer to pod specified value. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+ Maximum allowed grace period (in seconds) to use when terminating pods in response to a soft eviction threshold being met. If negative, defer to pod specified value. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--eviction-minimum-reclaim mapStringString
-A set of minimum reclaims (e.g. imagefs.available=2Gi) that describes the minimum amount of resource the kubelet will reclaim when performing a pod eviction if that resource is under pressure. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+A set of minimum reclaims (e.g. imagefs.available=2Gi) that describes the minimum amount of resource the kubelet will reclaim when performing a pod eviction if that resource is under pressure. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--eviction-pressure-transition-period duration Default: 5m0s
-Duration for which the kubelet has to wait before transitioning out of an eviction pressure condition. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Duration for which the kubelet has to wait before transitioning out of an eviction pressure condition. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--eviction-soft mapStringString
-A set of eviction thresholds (e.g. memory.available<1.5Gi) that if met over a corresponding grace period would trigger a pod eviction. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+A set of eviction thresholds (e.g. memory.available<1.5Gi) that if met over a corresponding grace period would trigger a pod eviction. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--eviction-soft-grace-period mapStringString
-A set of eviction grace periods (e.g. memory.available=1m30s) that correspond to how long a soft eviction threshold must hold before triggering a pod eviction. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+A set of eviction grace periods (e.g. memory.available=1m30s) that correspond to how long a soft eviction threshold must hold before triggering a pod eviction. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -395,7 +395,7 @@ kubelet [flags]
--experimental-allocatable-ignore-eviction Default: false
-When set to true, hard eviction thresholds will be ignored while calculating node allocatable. See https://kubernetes.io/docs/tasks/administer-cluster/reserve-compute-resources/ for more details. (DEPRECATED: will be removed in 1.24 or later)
+When set to true, hard eviction thresholds will be ignored while calculating node allocatable. See here for more details. (DEPRECATED: will be removed in 1.24 or later)
@@ -409,14 +409,14 @@ kubelet [flags]
--experimental-kernel-memcg-notification
-Use kernelMemcgNotification configuration, this flag will be removed in 1.24 or later. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Use kernelMemcgNotification configuration, this flag will be removed in 1.24 or later. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--experimental-log-sanitization bool
-[Experimental] When enabled, prevents logging of fields tagged as sensitive (passwords, keys, tokens). Runtime log sanitization may introduce significant computation overhead and therefore should not be enabled in production. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+ [Experimental] When enabled, prevents logging of fields tagged as sensitive (passwords, keys, tokens). Runtime log sanitization may introduce significant computation overhead and therefore should not be enabled in production. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -430,7 +430,7 @@ kubelet [flags]
--fail-swap-on Default: true
-Makes the Kubelet fail to start if swap is enabled on the node. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Makes the Kubelet fail to start if swap is enabled on the node. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -548,35 +548,35 @@ WinDSR=true|false (ALPHA - default=false)
WinOverlay=true|false (BETA - default=true)
WindowsHostProcessContainers=true|false (BETA - default=true)
csiMigrationRBD=true|false (ALPHA - default=false)
-(DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+(DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--file-check-frequency duration Default: 20s
-Duration between checking config files for new data. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Duration between checking config files for new data. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--hairpin-mode string Default: promiscuous-bridge
-How should the kubelet setup hairpin NAT. This allows endpoints of a Service to load balance back to themselves if they should try to access their own Service. Valid values are promiscuous-bridge, hairpin-veth and none. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+How should the kubelet setup hairpin NAT. This allows endpoints of a Service to load balance back to themselves if they should try to access their own Service. Valid values are promiscuous-bridge, hairpin-veth and none. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--healthz-bind-address string Default: 127.0.0.1
-The IP address for the healthz server to serve on (set to 0.0.0.0 or :: for listening in all interfaces and IP families). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The IP address for the healthz server to serve on (set to 0.0.0.0 or :: for listening in all interfaces and IP families). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--healthz-port int32 Default: 10248
-The port of the localhost healthz endpoint (set to 0 to disable). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The port of the localhost healthz endpoint (set to 0 to disable). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -597,7 +597,7 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--http-check-frequency duration Default: 20s
-Duration between checking HTTP for new data. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Duration between checking HTTP for new data. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -618,14 +618,14 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--image-gc-high-threshold int32 Default: 85
-The percent of disk usage after which image garbage collection is always run. Values must be within the range [0, 100], To disable image garbage collection, set to 100. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The percent of disk usage after which image garbage collection is always run. Values must be within the range [0, 100], To disable image garbage collection, set to 100. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--image-gc-low-threshold int32 Default: 80
-The percent of disk usage before which image garbage collection is never run. Lowest disk usage to garbage collect to. Values must be within the range [0, 100] and should not be larger than that of --image-gc-high-threshold. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The percent of disk usage before which image garbage collection is never run. Lowest disk usage to garbage collect to. Values must be within the range [0, 100] and should not be larger than that of --image-gc-high-threshold. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -646,14 +646,14 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--iptables-drop-bit int32 Default: 15
-The bit of the fwmark space to mark packets for dropping. Must be within the range [0, 31]. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The bit of the fwmark space to mark packets for dropping. Must be within the range [0, 31]. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--iptables-masquerade-bit int32 Default: 14
-The bit of the fwmark space to mark packets for SNAT. Must be within the range [0, 31]. Please match this parameter with corresponding parameter in kube-proxy. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The bit of the fwmark space to mark packets for SNAT. Must be within the range [0, 31]. Please match this parameter with corresponding parameter in kube-proxy. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -667,42 +667,42 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--kernel-memcg-notification
-If enabled, the kubelet will integrate with the kernel memcg notification to determine if memory eviction thresholds are crossed rather than polling. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+If enabled, the kubelet will integrate with the kernel memcg notification to determine if memory eviction thresholds are crossed rather than polling. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--kube-api-burst int32 Default: 10
-Burst to use while talking with kubernetes API server. The number must be >= 0. If 0 will use default burst (10). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Burst to use while talking with kubernetes API server. The number must be >= 0. If 0 will use default burst (10). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--kube-api-content-type string Default: application/vnd.kubernetes.protobuf
-Content type of requests sent to apiserver. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Content type of requests sent to apiserver. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--kube-api-qps int32 Default: 5
-QPS to use while talking with kubernetes API server. The number must be >= 0. If 0 will use default QPS (5). Doesn't cover events and node heartbeat apis which rate limiting is controlled by a different set of flags. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+QPS to use while talking with kubernetes API server. The number must be >= 0. If 0 will use default QPS (5). Doesn't cover events and node heartbeat apis which rate limiting is controlled by a different set of flags. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--kube-reserved mapStringString Default: <None>
-A set of <resource name>=<resource quantity> (e.g. cpu=200m,memory=500Mi,ephemeral-storage=1Gi,pid='100') pairs that describe resources reserved for kubernetes system components. Currently cpu, memory and local ephemeral-storage for root file system are supported. See http://kubernetes.io/docs/user-guide/compute-resources for more detail. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+A set of <resource name>=<resource quantity> (e.g. cpu=200m,memory=500Mi,ephemeral-storage=1Gi,pid='100') pairs that describe resources reserved for kubernetes system components. Currently cpu, memory and local ephemeral-storage for root file system are supported. See here for more detail. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--kube-reserved-cgroup string Default: ''
-Absolute name of the top level cgroup that is used to manage kubernetes components for which compute resources were reserved via --kube-reserved flag. Ex. /kube-reserved. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Absolute name of the top level cgroup that is used to manage kubernetes components for which compute resources were reserved via --kube-reserved flag. Ex. /kube-reserved. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -716,7 +716,7 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--kubelet-cgroups string
-Optional absolute name of cgroups to create and run the Kubelet in. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Optional absolute name of cgroups to create and run the Kubelet in. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -730,28 +730,28 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--log-backtrace-at <A string of format 'file:line'> Default: ":0"
-When logging hits line : , emit a stack trace. (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
+When logging hits line : , emit a stack trace. (DEPRECATED: will be removed in a future release, see here .)
--log-dir string
-If non-empty, write log files in this directory. (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
+If non-empty, write log files in this directory. (DEPRECATED: will be removed in a future release, see here .)
--log-file string
-If non-empty, use this log file. (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
+If non-empty, use this log file. (DEPRECATED: will be removed in a future release, see here .)
--log-file-max-size uint Default: 1800
-Defines the maximum size a log file can grow to. Unit is megabytes. If the value is 0, the maximum file size is unlimited. (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
+Defines the maximum size a log file can grow to. Unit is megabytes. If the value is 0, the maximum file size is unlimited. (DEPRECATED: will be removed in a future release, see here .)
@@ -765,49 +765,49 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--log-json-info-buffer-size string Default: '0'
-[Experimental] In JSON format with split output streams, the info messages can be buffered for a while to increase performance. The default value of zero bytes disables buffering. The size can be specified as number of bytes (512), multiples of 1000 (1K), multiples of 1024 (2Ki), or powers of those (3M, 4G, 5Mi, 6Gi). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+[Experimental] In JSON format with split output streams, the info messages can be buffered for a while to increase performance. The default value of zero bytes disables buffering. The size can be specified as number of bytes (512), multiples of 1000 (1K), multiples of 1024 (2Ki), or powers of those (3M, 4G, 5Mi, 6Gi). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--log-json-split-stream
-[Experimental] In JSON format, write error messages to stderr and info messages to stdout. The default is to write a single stream to stdout. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+[Experimental] In JSON format, write error messages to stderr and info messages to stdout. The default is to write a single stream to stdout. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--logging-format string Default: text
-Sets the log format. Permitted formats: text, json. Non-default formats don't honor these flags: --add-dir-header, --alsologtostderr, --log-backtrace-at, --log-dir, --log-file, --log-file-max-size, --logtostderr, --skip_headers, --skip_log_headers, --stderrthreshold, --log-flush-frequency. Non-default choices are currently alpha and subject to change without warning. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Sets the log format. Permitted formats: text, json. Non-default formats don't honor these flags: --add-dir-header, --alsologtostderr, --log-backtrace-at, --log-dir, --log-file, --log-file-max-size, --logtostderr, --skip_headers, --skip_log_headers, --stderrthreshold, --log-flush-frequency. Non-default choices are currently alpha and subject to change without warning. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--logtostderr Default: true
-log to standard error instead of files. (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
+log to standard error instead of files. (DEPRECATED: will be removed in a future release, see here .)
--make-iptables-util-chains Default: true
-If true, kubelet will ensure iptables utility rules are present on host. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+If true, kubelet will ensure iptables utility rules are present on host. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--manifest-url string
-URL for accessing additional Pod specifications to run (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+URL for accessing additional Pod specifications to run (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--manifest-url-header string
-Comma-separated list of HTTP headers to use when accessing the URL provided to --manifest-url. Multiple headers with the same name will be added in the same order provided. This flag can be repeatedly invoked. For example: --manifest-url-header 'a:hello,b:again,c:world' --manifest-url-header 'b:beautiful' (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Comma-separated list of HTTP headers to use when accessing the URL provided to --manifest-url. Multiple headers with the same name will be added in the same order provided. This flag can be repeatedly invoked. For example: --manifest-url-header 'a:hello,b:again,c:world' --manifest-url-header 'b:beautiful' (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -821,14 +821,14 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--max-open-files int Default: 1000000
-Number of files that can be opened by Kubelet process. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Number of files that can be opened by Kubelet process. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--max-pods int32 Default: 110
-Number of Pods that can run on this Kubelet. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Number of Pods that can run on this Kubelet. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -849,7 +849,7 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--memory-manager-policy string Default: None
-Memory Manager policy to use. Possible values: 'None', 'Static'. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Memory Manager policy to use. Possible values: 'None', 'Static'. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -863,7 +863,7 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--minimum-image-ttl-duration duration Default: 2m0s
-Minimum age for an unused image before it is garbage collected. Examples: '300ms', '10s' or '2h45m'. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Minimum age for an unused image before it is garbage collected. Examples: '300ms', '10s' or '2h45m'. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -898,14 +898,14 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--node-status-max-images int32 Default: 50
-The maximum number of images to report in node.status.images. If -1 is specified, no cap will be applied. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The maximum number of images to report in node.status.images. If -1 is specified, no cap will be applied. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--node-status-update-frequency duration Default: 10s
-Specifies how often kubelet posts node status to master. Note: be cautious when changing the constant, it must work with nodeMonitorGracePeriod in Node controller. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Specifies how often kubelet posts node status to master. Note: be cautious when changing the constant, it must work with nodeMonitorGracePeriod in Node controller. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -919,21 +919,21 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--one-output
-If true, only write logs to their native severity level (vs also writing to each lower severity level). (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
+If true, only write logs to their native severity level (vs also writing to each lower severity level). (DEPRECATED: will be removed in a future release, see here .)
--oom-score-adj int32 Default: -999
-The oom-score-adj value for kubelet process. Values must be within the range [-1000, 1000]. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The oom-score-adj value for kubelet process. Values must be within the range [-1000, 1000]. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--pod-cidr string
-The CIDR to use for pod IP addresses, only used in standalone mode. In cluster mode, this is obtained from the master. For IPv6, the maximum number of IP's allocated is 65536 (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The CIDR to use for pod IP addresses, only used in standalone mode. In cluster mode, this is obtained from the master. For IPv6, the maximum number of IP's allocated is 65536 (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -947,56 +947,56 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--pod-manifest-path string
-Path to the directory containing static pod files to run, or the path to a single static pod file. Files starting with dots will be ignored. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Path to the directory containing static pod files to run, or the path to a single static pod file. Files starting with dots will be ignored. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--pod-max-pids int Default: -1
-Set the maximum number of processes per pod. If -1, the kubelet defaults to the node allocatable PID capacity. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Set the maximum number of processes per pod. If -1, the kubelet defaults to the node allocatable PID capacity. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--pods-per-core int32
-Number of Pods per core that can run on this kubelet. The total number of pods on this kubelet cannot exceed --max-pods, so --max-pods will be used if this calculation results in a larger number of pods allowed on the kubelet. A value of 0 disables this limit. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Number of Pods per core that can run on this kubelet. The total number of pods on this kubelet cannot exceed --max-pods, so --max-pods will be used if this calculation results in a larger number of pods allowed on the kubelet. A value of 0 disables this limit. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--port int32 Default: 10250
-The port for the kubelet to serve on. (DEPRECATED: This parameter should be set via the config file specified by the kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The port for the kubelet to serve on. (DEPRECATED: This parameter should be set via the config file specified by the kubelet's --config flag. See kubelet-config-file for more information.)
--protect-kernel-defaults
- Default kubelet behaviour for kernel tuning. If set, kubelet errors if any of kernel tunables is different than kubelet defaults. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+ Default kubelet behaviour for kernel tuning. If set, kubelet errors if any of kernel tunables is different than kubelet defaults. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--provider-id string
-Unique identifier for identifying the node in a machine database, i.e cloud provider. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Unique identifier for identifying the node in a machine database, i.e cloud provider. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--qos-reserved mapStringString
-<Warning: Alpha feature> A set of <resource name>=<percentage> (e.g. memory=50%) pairs that describe how pod resource requests are reserved at the QoS level. Currently only memory is supported. Requires the QOSReserved feature gate to be enabled. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+<Warning: Alpha feature> A set of <resource name>=<percentage> (e.g. memory=50%) pairs that describe how pod resource requests are reserved at the QoS level. Currently only memory is supported. Requires the QOSReserved feature gate to be enabled. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--read-only-port int32 Default: 10255
-The read-only port for the kubelet to serve on with no authentication/authorization (set to 0 to disable). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The read-only port for the kubelet to serve on with no authentication/authorization (set to 0 to disable). (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -1010,7 +1010,7 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--register-node Default: true
-Register the node with the API server. If --kubeconfig is not provided, this flag is irrelevant, as the Kubelet won't have an API server to register with. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Register the node with the API server. If --kubeconfig is not provided, this flag is irrelevant, as the Kubelet won't have an API server to register with. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -1024,42 +1024,42 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--register-with-taints mapStringString
-Register the node with the given list of taints (comma separated <key>=<value>:<effect>). No-op if --register-node is false. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Register the node with the given list of taints (comma separated <key>=<value>:<effect>). No-op if --register-node is false. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--registry-burst int32 Default: 10
-Maximum size of a bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding --registry-qps. Only used if --registry-qps is greater than 0. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Maximum size of a bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding --registry-qps. Only used if --registry-qps is greater than 0. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--registry-qps int32 Default: 5
-If > 0, limit registry pull QPS to this value. If 0, unlimited. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+If > 0, limit registry pull QPS to this value. If 0, unlimited. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--reserved-cpus string
-A comma-separated list of CPUs or CPU ranges that are reserved for system and kubernetes usage. This specific list will supersede cpu counts in --system-reserved and --kube-reserved. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+A comma-separated list of CPUs or CPU ranges that are reserved for system and kubernetes usage. This specific list will supersede cpu counts in --system-reserved and --kube-reserved. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--reserved-memory string
-A comma-separated list of memory reservations for NUMA nodes. (e.g. --reserved-memory 0:memory=1Gi,hugepages-1M=2Gi --reserved-memory 1:memory=2Gi). The total sum for each memory type should be equal to the sum of --kube-reserved, --system-reserved and --eviction-threshold. See https://kubernetes.io/docs/tasks/administer-cluster/memory-manager/#reserved-memory-flag for more details. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+A comma-separated list of memory reservations for NUMA nodes. (e.g. --reserved-memory 0:memory=1Gi,hugepages-1M=2Gi --reserved-memory 1:memory=2Gi). The total sum for each memory type should be equal to the sum of --kube-reserved, --system-reserved and --eviction-threshold. See here for more details. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--resolv-conf string Default: /etc/resolv.conf
-Resolver configuration file used as the basis for the container DNS resolution configuration. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Resolver configuration file used as the basis for the container DNS resolution configuration. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -1073,21 +1073,21 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--rotate-certificates
-<Warning: Beta feature> Auto rotate the kubelet client certificates by requesting new certificates from the kube-apiserver when the certificate expiration approaches. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+<Warning: Beta feature> Auto rotate the kubelet client certificates by requesting new certificates from the kube-apiserver when the certificate expiration approaches. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--rotate-server-certificates
-Auto-request and rotate the kubelet serving certificates by requesting new certificates from the kube-apiserver when the certificate expiration approaches. Requires the RotateKubeletServerCertificate feature gate to be enabled, and approval of the submitted CertificateSigningRequest objects. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Auto-request and rotate the kubelet serving certificates by requesting new certificates from the kube-apiserver when the certificate expiration approaches. Requires the RotateKubeletServerCertificate feature gate to be enabled, and approval of the submitted CertificateSigningRequest objects. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--runonce
-If true, exit after spawning pods from local manifests or remote urls. Exclusive with --enable-server (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+If true, exit after spawning pods from local manifests or remote urls. Exclusive with --enable-server (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -1101,7 +1101,7 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--runtime-request-timeout duration Default: 2m0s
-Timeout of all runtime requests except long running request - pull, logs, exec and attach. When timeout exceeded, kubelet will cancel the request, throw out an error and retry later. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Timeout of all runtime requests except long running request - pull, logs, exec and attach. When timeout exceeded, kubelet will cancel the request, throw out an error and retry later. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -1115,70 +1115,70 @@ csiMigrationRBD=true|false (ALPHA - default=false)
--serialize-image-pulls Default: true
-Pull images one at a time. We recommend *not* changing the default value on nodes that run docker daemon with version < 1.9 or an aufs storage backend. Issue #10959 has more details. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Pull images one at a time. We recommend *not* changing the default value on nodes that run docker daemon with version < 1.9 or an aufs storage backend. Issue #10959 has more details. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--skip-headers
-If true, avoid header prefixes in the log messages. (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
+If true, avoid header prefixes in the log messages. (DEPRECATED: will be removed in a future release, see here .)
--skip-log-headers
-If true, avoid headers when opening log files. (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
+If true, avoid headers when opening log files. (DEPRECATED: will be removed in a future release, see here .)
--stderrthreshold int Default: 2
-logs at or above this threshold go to stderr. (DEPRECATED: will be removed in a future release, see https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
+logs at or above this threshold go to stderr. (DEPRECATED: will be removed in a future release, see here .)
--streaming-connection-idle-timeout duration Default: 4h0m0s
-Maximum time a streaming connection can be idle before the connection is automatically closed. 0 indicates no timeout. Example: 5m. Note: All connections to the kubelet server have a maximum duration of 4 hours. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Maximum time a streaming connection can be idle before the connection is automatically closed. 0 indicates no timeout. Example: 5m. Note: All connections to the kubelet server have a maximum duration of 4 hours. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--sync-frequency duration Default: 1m0s
-Max period between synchronizing running containers and config. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Max period between synchronizing running containers and config. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--system-cgroups string
-Optional absolute name of cgroups in which to place all non-kernel processes that are not already inside a cgroup under '/'. Empty for no container. Rolling back the flag requires a reboot. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Optional absolute name of cgroups in which to place all non-kernel processes that are not already inside a cgroup under '/'. Empty for no container. Rolling back the flag requires a reboot. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--system-reserved mapStringString Default: <none>
-A set of <resource name>=<resource quantity> (e.g. cpu=200m,memory=500Mi,ephemeral-storage=1Gi,pid='100') pairs that describe resources reserved for non-kubernetes components. Currently only cpu and memory are supported. See http://kubernetes.io/docs/user-guide/compute-resources for more detail. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+A set of <resource name>=<resource quantity> (e.g. cpu=200m,memory=500Mi,ephemeral-storage=1Gi,pid='100') pairs that describe resources reserved for non-kubernetes components. Currently only cpu and memory are supported. See here for more detail. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--system-reserved-cgroup string Default: ''
-Absolute name of the top level cgroup that is used to manage non-kubernetes components for which compute resources were reserved via --system-reserved flag. Ex. /system-reserved. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Absolute name of the top level cgroup that is used to manage non-kubernetes components for which compute resources were reserved via --system-reserved flag. Ex. /system-reserved. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--tls-cert-file string
-File containing x509 Certificate used for serving HTTPS (with intermediate certs, if any, concatenated after server cert). If --tls-cert-file and --tls-private-key-file are not provided, a self-signed certificate and key are generated for the public address and saved to the directory passed to --cert-dir. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+File containing x509 Certificate used for serving HTTPS (with intermediate certs, if any, concatenated after server cert). If --tls-cert-file and --tls-private-key-file are not provided, a self-signed certificate and key are generated for the public address and saved to the directory passed to --cert-dir. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -1190,21 +1190,21 @@ Preferred values:
TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384
Insecure values:
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_RC4_128_SHA.
-(DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+(DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--tls-min-version string
-Minimum TLS version supported. Possible values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Minimum TLS version supported. Possible values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--tls-private-key-file string
-File containing x509 private key matching --tls-cert-file. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+File containing x509 private key matching --tls-cert-file. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -1212,14 +1212,14 @@ TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_E
--topology-manager-policy string Default: 'none'
-Topology Manager policy to use. Possible values: 'none', 'best-effort', 'restricted', 'single-numa-node'. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Topology Manager policy to use. Possible values: 'none', 'best-effort', 'restricted', 'single-numa-node'. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--topology-manager-scope string Default: container
-Scope to which topology hints applied. Topology Manager collects hints from Hint Providers and applies them to defined scope to ensure the pod admission. Possible values: 'container', 'pod'. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Scope to which topology hints applied. Topology Manager collects hints from Hint Providers and applies them to defined scope to ensure the pod admission. Possible values: 'container', 'pod'. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
@@ -1247,14 +1247,14 @@ TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_E
--volume-plugin-dir string Default: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/
-The full path of the directory in which to search for additional third party volume plugins. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+The full path of the directory in which to search for additional third party volume plugins. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
--volume-stats-agg-period duration Default: 1m0s
-Specifies interval for kubelet to calculate and cache the volume disk usage for all pods and volumes. To disable volume calculations, set to 0. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/ for more information.)
+Specifies interval for kubelet to calculate and cache the volume disk usage for all pods and volumes. To disable volume calculations, set to 0. (DEPRECATED: This parameter should be set via the config file specified by the Kubelet's --config flag. See kubelet-config-file for more information.)
diff --git a/content/en/docs/reference/config-api/apiserver-audit.v1.md b/content/en/docs/reference/config-api/apiserver-audit.v1.md
index 3cca579663..e48824c649 100644
--- a/content/en/docs/reference/config-api/apiserver-audit.v1.md
+++ b/content/en/docs/reference/config-api/apiserver-audit.v1.md
@@ -89,7 +89,15 @@ For non-resource requests, this is the lower-cased HTTP method.
[]string
- Source IPs, from where the request originated and intermediate proxies.
+ Source IPs, from where the request originated and intermediate proxies.
+The source IPs are listed from (in order):
+
+X-Forwarded-For request header IPs
+X-Real-Ip header, if not present in the X-Forwarded-For list
+The remote address for the connection, if it doesn't match the last
+IP in the list up to here (X-Forwarded-For or X-Real-Ip).
+Note: All but the last IP can be arbitrarily set by the client.
+
userAgent
diff --git a/content/en/docs/reference/config-api/apiserver-eventratelimit.v1alpha1.md b/content/en/docs/reference/config-api/apiserver-eventratelimit.v1alpha1.md
new file mode 100644
index 0000000000..32b6aeb191
--- /dev/null
+++ b/content/en/docs/reference/config-api/apiserver-eventratelimit.v1alpha1.md
@@ -0,0 +1,121 @@
+---
+title: Event Rate Limit Configuration (v1alpha1)
+content_type: tool-reference
+package: evenratelimit.admission.k8s.io/v1alpha1
+auto_generated: true
+---
+
+
+## Resource Types
+
+
+- [Configuration](#evenratelimit-admission-k8s-io-v1alpha1-Configuration)
+
+
+
+## `Configuration` {#evenratelimit-admission-k8s-io-v1alpha1-Configuration}
+
+
+
+Configuration provides configuration for the EventRateLimit admission
+controller.
+
+
+
+Field Description
+
+
+apiVersion stringevenratelimit.admission.k8s.io/v1alpha1
+kind stringConfiguration
+
+
+limits [Required]
+[]Limit
+
+
+ limits are the limits to place on event queries received.
+Limits can be placed on events received server-wide, per namespace,
+per user, and per source+object.
+At least one limit is required.
+
+
+
+
+
+## `Limit` {#evenratelimit-admission-k8s-io-v1alpha1-Limit}
+
+
+**Appears in:**
+
+- [Configuration](#evenratelimit-admission-k8s-io-v1alpha1-Configuration)
+
+
+Limit is the configuration for a particular limit type
+
+
+
+Field Description
+
+
+
+type [Required]
+LimitType
+
+
+ type is the type of limit to which this configuration applies
+
+
+qps [Required]
+int32
+
+
+ qps is the number of event queries per second that are allowed for this
+type of limit. The qps and burst fields are used together to determine if
+a particular event query is accepted. The qps determines how many queries
+are accepted once the burst amount of queries has been exhausted.
+
+
+burst [Required]
+int32
+
+
+ burst is the burst number of event queries that are allowed for this type
+of limit. The qps and burst fields are used together to determine if a
+particular event query is accepted. The burst determines the maximum size
+of the allowance granted for a particular bucket. For example, if the burst
+is 10 and the qps is 3, then the admission control will accept 10 queries
+before blocking any queries. Every second, 3 more queries will be allowed.
+If some of that allowance is not used, then it will roll over to the next
+second, until the maximum allowance of 10 is reached.
+
+
+cacheSize
+int32
+
+
+ cacheSize is the size of the LRU cache for this type of limit. If a bucket
+is evicted from the cache, then the allowance for that bucket is reset. If
+more queries are later received for an evicted bucket, then that bucket
+will re-enter the cache with a clean slate, giving that bucket a full
+allowance of burst queries.
+The default cache size is 4096.
+If limitType is 'server', then cacheSize is ignored.
+
+
+
+
+
+## `LimitType` {#evenratelimit-admission-k8s-io-v1alpha1-LimitType}
+
+(Alias of `string`)
+
+**Appears in:**
+
+- [Limit](#evenratelimit-admission-k8s-io-v1alpha1-Limit)
+
+
+LimitType is the type of the limit (e.g., per-namespace)
+
+
+
+
diff --git a/content/en/docs/reference/config-api/imagepolicy.v1alpha1.md b/content/en/docs/reference/config-api/imagepolicy.v1alpha1.md
new file mode 100644
index 0000000000..f420623559
--- /dev/null
+++ b/content/en/docs/reference/config-api/imagepolicy.v1alpha1.md
@@ -0,0 +1,168 @@
+---
+title: Image Policy API (v1alpha1)
+content_type: tool-reference
+package: imagepolicy.k8s.io/v1alpha1
+auto_generated: true
+---
+
+
+## Resource Types
+
+
+- [ImageReview](#imagepolicy-k8s-io-v1alpha1-ImageReview)
+
+
+
+## `ImageReview` {#imagepolicy-k8s-io-v1alpha1-ImageReview}
+
+
+
+ImageReview checks if the set of images in a pod are allowed.
+
+
+
+Field Description
+
+
+apiVersion stringimagepolicy.k8s.io/v1alpha1
+kind stringImageReview
+
+
+metadata
+meta/v1.ObjectMeta
+
+
+ Standard object's metadata.
+More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+Refer to the Kubernetes API documentation for the fields of the metadata field.
+
+spec [Required]
+ImageReviewSpec
+
+
+ Spec holds information about the pod being evaluated
+
+
+status
+ImageReviewStatus
+
+
+ Status is filled in by the backend and indicates whether the pod should be allowed.
+
+
+
+
+
+## `ImageReviewContainerSpec` {#imagepolicy-k8s-io-v1alpha1-ImageReviewContainerSpec}
+
+
+**Appears in:**
+
+- [ImageReviewSpec](#imagepolicy-k8s-io-v1alpha1-ImageReviewSpec)
+
+
+ImageReviewContainerSpec is a description of a container within the pod creation request.
+
+
+
+Field Description
+
+
+
+image
+string
+
+
+ This can be in the form image:tag or image@SHA:012345679abcdef.
+
+
+
+
+
+## `ImageReviewSpec` {#imagepolicy-k8s-io-v1alpha1-ImageReviewSpec}
+
+
+**Appears in:**
+
+- [ImageReview](#imagepolicy-k8s-io-v1alpha1-ImageReview)
+
+
+ImageReviewSpec is a description of the pod creation request.
+
+
+
+Field Description
+
+
+
+containers
+[]ImageReviewContainerSpec
+
+
+ Containers is a list of a subset of the information in each container of the Pod being created.
+
+
+annotations
+map[string]string
+
+
+ Annotations is a list of key-value pairs extracted from the Pod's annotations.
+It only includes keys which match the pattern *.image-policy.k8s.io/*.
+It is up to each webhook backend to determine how to interpret these annotations, if at all.
+
+
+namespace
+string
+
+
+ Namespace is the namespace the pod is being created in.
+
+
+
+
+
+## `ImageReviewStatus` {#imagepolicy-k8s-io-v1alpha1-ImageReviewStatus}
+
+
+**Appears in:**
+
+- [ImageReview](#imagepolicy-k8s-io-v1alpha1-ImageReview)
+
+
+ImageReviewStatus is the result of the review for the pod creation request.
+
+
+
+Field Description
+
+
+
+allowed [Required]
+bool
+
+
+ Allowed indicates that all images were allowed to be run.
+
+
+reason
+string
+
+
+ Reason should be empty unless Allowed is false in which case it
+may contain a short description of what is wrong. Kubernetes
+may truncate excessively long errors when displaying to the user.
+
+
+auditAnnotations
+map[string]string
+
+
+ AuditAnnotations will be added to the attributes object of the
+admission controller request using 'AddAnnotation'. The keys should
+be prefix-less (i.e., the admission controller will add an
+appropriate prefix).
+
+
+
+
+
\ No newline at end of file
diff --git a/content/en/docs/reference/config-api/kube-proxy-config.v1alpha1.md b/content/en/docs/reference/config-api/kube-proxy-config.v1alpha1.md
index b3d1fc98ff..8c794f2755 100644
--- a/content/en/docs/reference/config-api/kube-proxy-config.v1alpha1.md
+++ b/content/en/docs/reference/config-api/kube-proxy-config.v1alpha1.md
@@ -193,6 +193,50 @@ An empty string slice is meant to select all network interfaces.
DetectLocalMode determines mode to use for detecting local traffic, defaults to LocalModeClusterCIDR
+detectLocal [Required]
+DetectLocalConfiguration
+
+
+ DetectLocal contains optional configuration settings related to DetectLocalMode.
+
+
+
+
+
+## `DetectLocalConfiguration` {#kubeproxy-config-k8s-io-v1alpha1-DetectLocalConfiguration}
+
+
+**Appears in:**
+
+- [KubeProxyConfiguration](#kubeproxy-config-k8s-io-v1alpha1-KubeProxyConfiguration)
+
+
+DetectLocalConfiguration contains optional settings related to DetectLocalMode option
+
+
+
+Field Description
+
+
+
+bridgeInterface [Required]
+string
+
+
+ BridgeInterface is a string argument which represents a single bridge interface name.
+Kube-proxy considers traffic as local if originating from this given bridge.
+This argument should be set if DetectLocalMode is set to LocalModeBridgeInterface.
+
+
+interfaceNamePrefix [Required]
+string
+
+
+ InterfaceNamePrefix is a string argument which represents a single interface prefix name.
+Kube-proxy considers traffic as local if originating from one or more interfaces which match
+the given prefix. This argument should be set if DetectLocalMode is set to LocalModeInterfaceNamePrefix.
+
+
@@ -424,6 +468,22 @@ NAT when loadbalancing
with DSR
+rootHnsEndpointName [Required]
+string
+
+
+ RootHnsEndpointName is the name of hnsendpoint that is attached to
+l2bridge for root network namespace
+
+
+forwardHealthCheckVip [Required]
+bool
+
+
+ ForwardHealthCheckVip forwards service VIP for health check port on
+Windows
+
+
@@ -747,8 +807,9 @@ default value of format is text
time.Duration
- Maximum number of seconds between log flushes. Ignored if the
-selected logging backend writes log messages without buffering.
+ Maximum number of nanoseconds (i.e. 1s = 1000000000) between log
+flushes. Ignored if the selected logging backend writes log
+messages without buffering.
verbosity [Required]
@@ -769,14 +830,6 @@ are always logged.
Only supported for "text" log format.
-sanitization [Required]
-bool
-
-
- [Experimental] When enabled prevents logging of fields tagged as sensitive (passwords, keys, tokens).
-Runtime log sanitization may introduce significant computation overhead and therefore should not be enabled in production.`)
-
-
options [Required]
FormatOptions
diff --git a/content/en/docs/reference/config-api/kube-scheduler-config.v1beta2.md b/content/en/docs/reference/config-api/kube-scheduler-config.v1beta2.md
index 8c5f981659..9025c78dcb 100644
--- a/content/en/docs/reference/config-api/kube-scheduler-config.v1beta2.md
+++ b/content/en/docs/reference/config-api/kube-scheduler-config.v1beta2.md
@@ -285,8 +285,9 @@ default value of format is text
time.Duration
- Maximum number of seconds between log flushes. Ignored if the
-selected logging backend writes log messages without buffering.
+ Maximum number of nanoseconds (i.e. 1s = 1000000000) between log
+flushes. Ignored if the selected logging backend writes log
+messages without buffering.
verbosity [Required]
@@ -307,14 +308,6 @@ are always logged.
Only supported for "text" log format.
-sanitization [Required]
-bool
-
-
- [Experimental] When enabled prevents logging of fields tagged as sensitive (passwords, keys, tokens).
-Runtime log sanitization may introduce significant computation overhead and therefore should not be enabled in production.`)
-
-
options [Required]
FormatOptions
@@ -663,8 +656,7 @@ of "System" or "List".
Nodes and Zones.
"List": Use constraints defined in .defaultConstraints.
-Defaults to "List" if feature gate DefaultPodTopologySpread is disabled
-and to "System" if enabled.
+Defaults to "System".
diff --git a/content/en/docs/reference/config-api/kube-scheduler-config.v1beta3.md b/content/en/docs/reference/config-api/kube-scheduler-config.v1beta3.md
index 6c8635415e..aeddbe89be 100644
--- a/content/en/docs/reference/config-api/kube-scheduler-config.v1beta3.md
+++ b/content/en/docs/reference/config-api/kube-scheduler-config.v1beta3.md
@@ -20,6 +20,329 @@ auto_generated: true
+## `ClientConnectionConfiguration` {#ClientConnectionConfiguration}
+
+
+**Appears in:**
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
+
+
+ClientConnectionConfiguration contains details for constructing a client.
+
+
+
+Field Description
+
+
+
+kubeconfig [Required]
+string
+
+
+ kubeconfig is the path to a KubeConfig file.
+
+
+acceptContentTypes [Required]
+string
+
+
+ acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the
+default value of 'application/json'. This field will control all connections to the server used by a particular
+client.
+
+
+contentType [Required]
+string
+
+
+ contentType is the content type used when sending data to the server from this client.
+
+
+qps [Required]
+float32
+
+
+ qps controls the number of queries per second allowed for this connection.
+
+
+burst [Required]
+int32
+
+
+ burst allows extra queries to accumulate when a client is exceeding its rate.
+
+
+
+
+
+## `DebuggingConfiguration` {#DebuggingConfiguration}
+
+
+**Appears in:**
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
+
+
+DebuggingConfiguration holds configuration for Debugging related features.
+
+
+
+Field Description
+
+
+
+enableProfiling [Required]
+bool
+
+
+ enableProfiling enables profiling via web interface host:port/debug/pprof/
+
+
+enableContentionProfiling [Required]
+bool
+
+
+ enableContentionProfiling enables lock contention profiling, if
+enableProfiling is true.
+
+
+
+
+
+## `FormatOptions` {#FormatOptions}
+
+
+**Appears in:**
+
+- [LoggingConfiguration](#LoggingConfiguration)
+
+
+FormatOptions contains options for the different logging formats.
+
+
+
+Field Description
+
+
+
+json [Required]
+JSONOptions
+
+
+ [Experimental] JSON contains options for logging format "json".
+
+
+
+
+
+## `JSONOptions` {#JSONOptions}
+
+
+**Appears in:**
+
+- [FormatOptions](#FormatOptions)
+
+
+JSONOptions contains options for logging format "json".
+
+
+
+Field Description
+
+
+
+splitStream [Required]
+bool
+
+
+ [Experimental] SplitStream redirects error messages to stderr while
+info messages go to stdout, with buffering. The default is to write
+both to stdout, without buffering.
+
+
+infoBufferSize [Required]
+k8s.io/apimachinery/pkg/api/resource.QuantityValue
+
+
+ [Experimental] InfoBufferSize sets the size of the info stream when
+using split streams. The default is zero, which disables buffering.
+
+
+
+
+
+## `LeaderElectionConfiguration` {#LeaderElectionConfiguration}
+
+
+**Appears in:**
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
+
+
+LeaderElectionConfiguration defines the configuration of leader election
+clients for components that can run with leader election enabled.
+
+
+
+Field Description
+
+
+
+leaderElect [Required]
+bool
+
+
+ leaderElect enables a leader election client to gain leadership
+before executing the main loop. Enable this when running replicated
+components for high availability.
+
+
+leaseDuration [Required]
+meta/v1.Duration
+
+
+ leaseDuration is the duration that non-leader candidates will wait
+after observing a leadership renewal until attempting to acquire
+leadership of a led but unrenewed leader slot. This is effectively the
+maximum duration that a leader can be stopped before it is replaced
+by another candidate. This is only applicable if leader election is
+enabled.
+
+
+renewDeadline [Required]
+meta/v1.Duration
+
+
+ renewDeadline is the interval between attempts by the acting master to
+renew a leadership slot before it stops leading. This must be less
+than or equal to the lease duration. This is only applicable if leader
+election is enabled.
+
+
+retryPeriod [Required]
+meta/v1.Duration
+
+
+ retryPeriod is the duration the clients should wait between attempting
+acquisition and renewal of a leadership. This is only applicable if
+leader election is enabled.
+
+
+resourceLock [Required]
+string
+
+
+ resourceLock indicates the resource object type that will be used to lock
+during leader election cycles.
+
+
+resourceName [Required]
+string
+
+
+ resourceName indicates the name of resource object that will be used to lock
+during leader election cycles.
+
+
+resourceNamespace [Required]
+string
+
+
+ resourceName indicates the namespace of resource object that will be used to lock
+during leader election cycles.
+
+
+
+
+
+## `LoggingConfiguration` {#LoggingConfiguration}
+
+
+**Appears in:**
+
+- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
+
+
+LoggingConfiguration contains logging options
+Refer Logs Options for more information.
+
+
+
+Field Description
+
+
+
+format [Required]
+string
+
+
+ Format Flag specifies the structure of log messages.
+default value of format is text
+
+
+flushFrequency [Required]
+time.Duration
+
+
+ Maximum number of nanoseconds (i.e. 1s = 1000000000) between log
+flushes. Ignored if the selected logging backend writes log
+messages without buffering.
+
+
+verbosity [Required]
+uint32
+
+
+ Verbosity is the threshold that determines which log messages are
+logged. Default is zero which logs only the most important
+messages. Higher values enable additional messages. Error messages
+are always logged.
+
+
+vmodule [Required]
+VModuleConfiguration
+
+
+ VModule overrides the verbosity threshold for individual files.
+Only supported for "text" log format.
+
+
+options [Required]
+FormatOptions
+
+
+ [Experimental] Options holds additional parameters that are specific
+to the different logging formats. Only the options for the selected
+format get used, but all of them get validated.
+
+
+
+
+
+## `VModuleConfiguration` {#VModuleConfiguration}
+
+(Alias of `[]k8s.io/component-base/config/v1alpha1.VModuleItem`)
+
+**Appears in:**
+
+- [LoggingConfiguration](#LoggingConfiguration)
+
+
+VModuleConfiguration is a collection of individual file names or patterns
+and the corresponding verbosity threshold.
+
+
+
+
+
+
## `DefaultPreemptionArgs` {#kubescheduler-config-k8s-io-v1beta3-DefaultPreemptionArgs}
@@ -323,8 +646,7 @@ of "System" or "List".
Nodes and Zones.
"List": Use constraints defined in .defaultConstraints.
-Defaults to "List" if feature gate DefaultPodTopologySpread is disabled
-and to "System" if enabled.
+Defaults to "System".
@@ -1061,333 +1383,3 @@ Weight defaults to 1 if not specified or explicitly set to 0.
-
-
-
-## `ClientConnectionConfiguration` {#ClientConnectionConfiguration}
-
-
-**Appears in:**
-
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
-
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
-
-
-ClientConnectionConfiguration contains details for constructing a client.
-
-
-
-Field Description
-
-
-
-kubeconfig [Required]
-string
-
-
- kubeconfig is the path to a KubeConfig file.
-
-
-acceptContentTypes [Required]
-string
-
-
- acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the
-default value of 'application/json'. This field will control all connections to the server used by a particular
-client.
-
-
-contentType [Required]
-string
-
-
- contentType is the content type used when sending data to the server from this client.
-
-
-qps [Required]
-float32
-
-
- qps controls the number of queries per second allowed for this connection.
-
-
-burst [Required]
-int32
-
-
- burst allows extra queries to accumulate when a client is exceeding its rate.
-
-
-
-
-
-## `DebuggingConfiguration` {#DebuggingConfiguration}
-
-
-**Appears in:**
-
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
-
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
-
-
-DebuggingConfiguration holds configuration for Debugging related features.
-
-
-
-Field Description
-
-
-
-enableProfiling [Required]
-bool
-
-
- enableProfiling enables profiling via web interface host:port/debug/pprof/
-
-
-enableContentionProfiling [Required]
-bool
-
-
- enableContentionProfiling enables lock contention profiling, if
-enableProfiling is true.
-
-
-
-
-
-## `FormatOptions` {#FormatOptions}
-
-
-**Appears in:**
-
-- [LoggingConfiguration](#LoggingConfiguration)
-
-
-FormatOptions contains options for the different logging formats.
-
-
-
-Field Description
-
-
-
-json [Required]
-JSONOptions
-
-
- [Experimental] JSON contains options for logging format "json".
-
-
-
-
-
-## `JSONOptions` {#JSONOptions}
-
-
-**Appears in:**
-
-- [FormatOptions](#FormatOptions)
-
-
-JSONOptions contains options for logging format "json".
-
-
-
-Field Description
-
-
-
-splitStream [Required]
-bool
-
-
- [Experimental] SplitStream redirects error messages to stderr while
-info messages go to stdout, with buffering. The default is to write
-both to stdout, without buffering.
-
-
-infoBufferSize [Required]
-k8s.io/apimachinery/pkg/api/resource.QuantityValue
-
-
- [Experimental] InfoBufferSize sets the size of the info stream when
-using split streams. The default is zero, which disables buffering.
-
-
-
-
-
-## `LeaderElectionConfiguration` {#LeaderElectionConfiguration}
-
-
-**Appears in:**
-
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
-
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
-
-
-LeaderElectionConfiguration defines the configuration of leader election
-clients for components that can run with leader election enabled.
-
-
-
-Field Description
-
-
-
-leaderElect [Required]
-bool
-
-
- leaderElect enables a leader election client to gain leadership
-before executing the main loop. Enable this when running replicated
-components for high availability.
-
-
-leaseDuration [Required]
-meta/v1.Duration
-
-
- leaseDuration is the duration that non-leader candidates will wait
-after observing a leadership renewal until attempting to acquire
-leadership of a led but unrenewed leader slot. This is effectively the
-maximum duration that a leader can be stopped before it is replaced
-by another candidate. This is only applicable if leader election is
-enabled.
-
-
-renewDeadline [Required]
-meta/v1.Duration
-
-
- renewDeadline is the interval between attempts by the acting master to
-renew a leadership slot before it stops leading. This must be less
-than or equal to the lease duration. This is only applicable if leader
-election is enabled.
-
-
-retryPeriod [Required]
-meta/v1.Duration
-
-
- retryPeriod is the duration the clients should wait between attempting
-acquisition and renewal of a leadership. This is only applicable if
-leader election is enabled.
-
-
-resourceLock [Required]
-string
-
-
- resourceLock indicates the resource object type that will be used to lock
-during leader election cycles.
-
-
-resourceName [Required]
-string
-
-
- resourceName indicates the name of resource object that will be used to lock
-during leader election cycles.
-
-
-resourceNamespace [Required]
-string
-
-
- resourceName indicates the namespace of resource object that will be used to lock
-during leader election cycles.
-
-
-
-
-
-## `LoggingConfiguration` {#LoggingConfiguration}
-
-
-**Appears in:**
-
-- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
-
-
-LoggingConfiguration contains logging options
-Refer Logs Options for more information.
-
-
-
-Field Description
-
-
-
-format [Required]
-string
-
-
- Format Flag specifies the structure of log messages.
-default value of format is text
-
-
-flushFrequency [Required]
-time.Duration
-
-
- Maximum number of seconds between log flushes. Ignored if the
-selected logging backend writes log messages without buffering.
-
-
-verbosity [Required]
-uint32
-
-
- Verbosity is the threshold that determines which log messages are
-logged. Default is zero which logs only the most important
-messages. Higher values enable additional messages. Error messages
-are always logged.
-
-
-vmodule [Required]
-VModuleConfiguration
-
-
- VModule overrides the verbosity threshold for individual files.
-Only supported for "text" log format.
-
-
-sanitization [Required]
-bool
-
-
- [Experimental] When enabled prevents logging of fields tagged as sensitive (passwords, keys, tokens).
-Runtime log sanitization may introduce significant computation overhead and therefore should not be enabled in production.`)
-
-
-options [Required]
-FormatOptions
-
-
- [Experimental] Options holds additional parameters that are specific
-to the different logging formats. Only the options for the selected
-format get used, but all of them get validated.
-
-
-
-
-
-## `VModuleConfiguration` {#VModuleConfiguration}
-
-(Alias of `[]k8s.io/component-base/config/v1alpha1.VModuleItem`)
-
-**Appears in:**
-
-- [LoggingConfiguration](#LoggingConfiguration)
-
-
-VModuleConfiguration is a collection of individual file names or patterns
-and the corresponding verbosity threshold.
-
-
-
diff --git a/content/en/docs/reference/config-api/kubeadm-config.v1beta2.md b/content/en/docs/reference/config-api/kubeadm-config.v1beta2.md
index 8874cf6a36..377ac021b6 100644
--- a/content/en/docs/reference/config-api/kubeadm-config.v1beta2.md
+++ b/content/en/docs/reference/config-api/kubeadm-config.v1beta2.md
@@ -143,7 +143,7 @@ configuration types to be used during a kubeadm init run.
criSocket : "/var/run/dockershim.sock"
taints :
- key : "kubeadmNode"
- value : "master"
+ value : "someValue"
effect : "NoSchedule"
kubeletExtraArgs :
v : 4
@@ -348,7 +348,7 @@ could be used for assigning a stable DNS to the control plane.
string
- mageRepository sets the container registry to pull images from.
+
imageRepository sets the container registry to pull images from.
If empty, k8s.gcr.io will be used by default; in case of kubernetes version is
a CI build (kubernetes version starts with ci/) gcr.io/k8s-staging-ci-images
is used as a default for control plane components and for kube-proxy, while
@@ -876,7 +876,9 @@ cluster information.
tlsBootstrapToken is a token used for TLS bootstrapping.
-If bootstrapToken is set, this field is defaulted to .bootstrapToken.token, but can be overridden. If file` is set, this field must be set in case the KubeConfigFile does not
+If bootstrapToken is set, this field is defaulted to .bootstrapToken.token,
+but can be overridden.
+If file is set, this field must be set in case the KubeConfigFile does not
contain any other authentication information.
@@ -1080,7 +1082,7 @@ originated from the Kubernetes/Kubernetes release process
string
- mageRepository sets the container registry to pull images from.
+
imageRepository sets the container registry to pull images from.
If not set, the imageRepository defined in ClusterConfiguration will be used.
@@ -1267,7 +1269,7 @@ Defaults to the hostname of the node if not provided.
string
- `criSocket is used to retrieve container runtime information. This information will
+
criSocket is used to retrieve container runtime information. This information will
be annotated to the Node API object, for later re-use.
@@ -1276,9 +1278,9 @@ be annotated to the Node API object, for later re-use.
taints specifies the taints the Node API object should be registered with.
-If this field is unset, i.e. nil, in the kubeadm init process it will be defaulted to
-'node-role.kubernetes.io/master=""'. If you don't want to taint your control-plane node,
-set this field to an empty list, i.e. taints: [] in the YAML file. This field is
+If this field is unset, i.e. nil, in the kubeadm init process it will be defaulted with
+a control-plane taint for control-plane nodes. If you don't want to taint your control-plane
+node, set this field to an empty list, i.e. taints: [], in the YAML file. This field is
solely used for Node registration.
diff --git a/content/en/docs/reference/config-api/kubeadm-config.v1beta3.md b/content/en/docs/reference/config-api/kubeadm-config.v1beta3.md
index 730973fd82..75fc7c1ecf 100644
--- a/content/en/docs/reference/config-api/kubeadm-config.v1beta3.md
+++ b/content/en/docs/reference/config-api/kubeadm-config.v1beta3.md
@@ -152,7 +152,7 @@ configuration types to be used during a kubeadm init run.
criSocket : "/var/run/dockershim.sock"
taints :
- key : "kubeadmNode"
- value : "master"
+ value : "someValue"
effect : "NoSchedule"
kubeletExtraArgs :
v : 4
@@ -264,109 +264,6 @@ node only (e.g. the node ip).
-## `BootstrapToken` {#BootstrapToken}
-
-
-**Appears in:**
-
-- [InitConfiguration](#kubeadm-k8s-io-v1beta3-InitConfiguration)
-
-
-BootstrapToken describes one bootstrap token, stored as a Secret in the cluster
-
-
-
-Field Description
-
-
-
-token [Required]
-BootstrapTokenString
-
-
- token is used for establishing bidirectional trust between nodes and control-planes.
-Used for joining nodes in the cluster.
-
-
-description
-string
-
-
- description sets a human-friendly message why this token exists and what it's used
-for, so other administrators can know its purpose.
-
-
-ttl
-meta/v1.Duration
-
-
- ttl defines the time to live for this token. Defaults to 24h.
-expires and ttl are mutually exclusive.
-
-
-expires
-meta/v1.Time
-
-
- expires specifies the timestamp when this token expires. Defaults to being set
-dynamically at runtime based on the ttl. expires and ttl are mutually exclusive.
-
-
-usages
-[]string
-
-
- usages describes the ways in which this token can be used. Can by default be used
-for establishing bidirectional trust, but that can be changed here.
-
-
-groups
-[]string
-
-
- groups specifies the extra groups that this token will authenticate as when/if
-used for authentication
-
-
-
-
-
-## `BootstrapTokenString` {#BootstrapTokenString}
-
-
-**Appears in:**
-
-- [BootstrapToken](#BootstrapToken)
-
-
-BootstrapTokenString is a token of the format abcdef.abcdef0123456789 that is used
-for both validation of the practically of the API server from a joining node's point
-of view and as an authentication method for the node in the bootstrap phase of
-"kubeadm join". This token is and should be short-lived.
-
-
-
-Field Description
-
-
-
-- [Required]
-string
-
-
- No description provided.
-
-- [Required]
-string
-
-
- No description provided.
-
-
-
-
-
-
## `ClusterConfiguration` {#kubeadm-k8s-io-v1beta3-ClusterConfiguration}
@@ -1263,9 +1160,9 @@ This information will be annotated to the Node API object, for later re-use
tains specifies the taints the Node API object should be registered with.
-If this field is unset, i.e. nil, in the kubeadm init process it will be defaulted to
-taints: ["node-role.kubernetes.io/master:""].
-If you don't want to taint your control-plane node, set this field to an empty slice,
+If this field is unset, i.e. nil, in the kubeadm init process it will be defaulted
+with a control-plane taint for control-plane nodes.
+If you don't want to taint your control-plane node, set this field to an empty list,
i.e. taints: [] in the YAML file. This field is solely used for Node registration.
@@ -1340,3 +1237,106 @@ first alpha-numerically.
+
+
+
+## `BootstrapToken` {#BootstrapToken}
+
+
+**Appears in:**
+
+- [InitConfiguration](#kubeadm-k8s-io-v1beta3-InitConfiguration)
+
+
+BootstrapToken describes one bootstrap token, stored as a Secret in the cluster
+
+
+
+Field Description
+
+
+
+token [Required]
+BootstrapTokenString
+
+
+ token is used for establishing bidirectional trust between nodes and control-planes.
+Used for joining nodes in the cluster.
+
+
+description
+string
+
+
+ description sets a human-friendly message why this token exists and what it's used
+for, so other administrators can know its purpose.
+
+
+ttl
+meta/v1.Duration
+
+
+ ttl defines the time to live for this token. Defaults to 24h.
+expires and ttl are mutually exclusive.
+
+
+expires
+meta/v1.Time
+
+
+ expires specifies the timestamp when this token expires. Defaults to being set
+dynamically at runtime based on the ttl. expires and ttl are mutually exclusive.
+
+
+usages
+[]string
+
+
+ usages describes the ways in which this token can be used. Can by default be used
+for establishing bidirectional trust, but that can be changed here.
+
+
+groups
+[]string
+
+
+ groups specifies the extra groups that this token will authenticate as when/if
+used for authentication
+
+
+
+
+
+## `BootstrapTokenString` {#BootstrapTokenString}
+
+
+**Appears in:**
+
+- [BootstrapToken](#BootstrapToken)
+
+
+BootstrapTokenString is a token of the format abcdef.abcdef0123456789 that is used
+for both validation of the practically of the API server from a joining node's point
+of view and as an authentication method for the node in the bootstrap phase of
+"kubeadm join". This token is and should be short-lived.
+
+
+
+Field Description
+
+
+
+- [Required]
+string
+
+
+ No description provided.
+
+- [Required]
+string
+
+
+ No description provided.
+
+
+
diff --git a/content/en/docs/reference/config-api/kubelet-config.v1alpha1.md b/content/en/docs/reference/config-api/kubelet-config.v1alpha1.md
index ccdec28e8d..2fe765dabe 100644
--- a/content/en/docs/reference/config-api/kubelet-config.v1alpha1.md
+++ b/content/en/docs/reference/config-api/kubelet-config.v1alpha1.md
@@ -13,166 +13,6 @@ auto_generated: true
-## `CredentialProviderConfig` {#kubelet-config-k8s-io-v1alpha1-CredentialProviderConfig}
-
-
-
-CredentialProviderConfig is the configuration containing information about
-each exec credential provider. Kubelet reads this configuration from disk and enables
-each provider as specified by the CredentialProvider type.
-
-
-
-Field Description
-
-
-apiVersion stringkubelet.config.k8s.io/v1alpha1
-kind stringCredentialProviderConfig
-
-
-providers [Required]
-[]CredentialProvider
-
-
- providers is a list of credential provider plugins that will be enabled by the kubelet.
-Multiple providers may match against a single image, in which case credentials
-from all providers will be returned to the kubelet. If multiple providers are called
-for a single image, the results are combined. If providers return overlapping
-auth keys, the value from the provider earlier in this list is used.
-
-
-
-
-
-## `CredentialProvider` {#kubelet-config-k8s-io-v1alpha1-CredentialProvider}
-
-
-**Appears in:**
-
-- [CredentialProviderConfig](#kubelet-config-k8s-io-v1alpha1-CredentialProviderConfig)
-
-
-CredentialProvider represents an exec plugin to be invoked by the kubelet. The plugin is only
-invoked when an image being pulled matches the images handled by the plugin (see matchImages).
-
-
-
-Field Description
-
-
-
-name [Required]
-string
-
-
- name is the required name of the credential provider. It must match the name of the
-provider executable as seen by the kubelet. The executable must be in the kubelet's
-bin directory (set by the --image-credential-provider-bin-dir flag).
-
-
-matchImages [Required]
-[]string
-
-
- matchImages is a required list of strings used to match against images in order to
-determine if this provider should be invoked. If one of the strings matches the
-requested image from the kubelet, the plugin will be invoked and given a chance
-to provide credentials. Images are expected to contain the registry domain
-and URL path.
-Each entry in matchImages is a pattern which can optionally contain a port and a path.
-Globs can be used in the domain, but not in the port or the path. Globs are supported
-as subdomains like '.k8s.io' or 'k8s. .io', and top-level-domains such as 'k8s.'.
-Matching partial subdomains like 'app .k8s.io' is also supported. Each glob can only match
-a single subdomain segment, so *.io does not match *.k8s.io.
-A match exists between an image and a matchImage when all of the below are true:
-
-Both contain the same number of domain parts and each part matches.
-The URL path of an imageMatch must be a prefix of the target image URL path.
-If the imageMatch contains a port, then the port must match in the image as well.
-
-Example values of matchImages:
-
-123456789.dkr.ecr.us-east-1.amazonaws.com
-*.azurecr.io
-gcr.io
-. .registry.io
-registry.io:8080/path
-
-
-
-defaultCacheDuration [Required]
-meta/v1.Duration
-
-
- defaultCacheDuration is the default duration the plugin will cache credentials in-memory
-if a cache duration is not provided in the plugin response. This field is required.
-
-
-apiVersion [Required]
-string
-
-
- Required input version of the exec CredentialProviderRequest. The returned CredentialProviderResponse
-MUST use the same encoding version as the input. Current supported values are:
-
-credentialprovider.kubelet.k8s.io/v1alpha1
-
-
-
-args
-[]string
-
-
- Arguments to pass to the command when executing it.
-
-
-env
-[]ExecEnvVar
-
-
- Env defines additional environment variables to expose to the process. These
-are unioned with the host's environment, as well as variables client-go uses
-to pass argument to the plugin.
-
-
-
-
-
-## `ExecEnvVar` {#kubelet-config-k8s-io-v1alpha1-ExecEnvVar}
-
-
-**Appears in:**
-
-- [CredentialProvider](#kubelet-config-k8s-io-v1alpha1-CredentialProvider)
-
-
-ExecEnvVar is used for setting environment variables when executing an exec-based
-credential plugin.
-
-
-
-Field Description
-
-
-
-name [Required]
-string
-
-
- No description provided.
-
-value [Required]
-string
-
-
- No description provided.
-
-
-
-
-
-
-
## `FormatOptions` {#FormatOptions}
@@ -247,3 +87,163 @@ and the corresponding verbosity threshold.
+
+
+
+## `CredentialProviderConfig` {#kubelet-config-k8s-io-v1alpha1-CredentialProviderConfig}
+
+
+
+CredentialProviderConfig is the configuration containing information about
+each exec credential provider. Kubelet reads this configuration from disk and enables
+each provider as specified by the CredentialProvider type.
+
+
+
+Field Description
+
+
+apiVersion stringkubelet.config.k8s.io/v1alpha1
+kind stringCredentialProviderConfig
+
+
+providers [Required]
+[]CredentialProvider
+
+
+ providers is a list of credential provider plugins that will be enabled by the kubelet.
+Multiple providers may match against a single image, in which case credentials
+from all providers will be returned to the kubelet. If multiple providers are called
+for a single image, the results are combined. If providers return overlapping
+auth keys, the value from the provider earlier in this list is used.
+
+
+
+
+
+## `CredentialProvider` {#kubelet-config-k8s-io-v1alpha1-CredentialProvider}
+
+
+**Appears in:**
+
+- [CredentialProviderConfig](#kubelet-config-k8s-io-v1alpha1-CredentialProviderConfig)
+
+
+CredentialProvider represents an exec plugin to be invoked by the kubelet. The plugin is only
+invoked when an image being pulled matches the images handled by the plugin (see matchImages).
+
+
+
+Field Description
+
+
+
+name [Required]
+string
+
+
+ name is the required name of the credential provider. It must match the name of the
+provider executable as seen by the kubelet. The executable must be in the kubelet's
+bin directory (set by the --image-credential-provider-bin-dir flag).
+
+
+matchImages [Required]
+[]string
+
+
+ matchImages is a required list of strings used to match against images in order to
+determine if this provider should be invoked. If one of the strings matches the
+requested image from the kubelet, the plugin will be invoked and given a chance
+to provide credentials. Images are expected to contain the registry domain
+and URL path.
+Each entry in matchImages is a pattern which can optionally contain a port and a path.
+Globs can be used in the domain, but not in the port or the path. Globs are supported
+as subdomains like *.k8s.io or k8s.*.io, and top-level-domains such as k8s.*.
+Matching partial subdomains like app*.k8s.io is also supported. Each glob can only match
+a single subdomain segment, so *.io does not match *.k8s.io.
+A match exists between an image and a matchImage when all of the below are true:
+
+Both contain the same number of domain parts and each part matches.
+The URL path of an imageMatch must be a prefix of the target image URL path.
+If the imageMatch contains a port, then the port must match in the image as well.
+
+Example values of matchImages:
+
+123456789.dkr.ecr.us-east-1.amazonaws.com
+*.azurecr.io
+gcr.io
+*.*.registry.io
+registry.io:8080/path
+
+
+
+defaultCacheDuration [Required]
+meta/v1.Duration
+
+
+ defaultCacheDuration is the default duration the plugin will cache credentials in-memory
+if a cache duration is not provided in the plugin response. This field is required.
+
+
+apiVersion [Required]
+string
+
+
+ Required input version of the exec CredentialProviderRequest. The returned CredentialProviderResponse
+MUST use the same encoding version as the input. Current supported values are:
+
+credentialprovider.kubelet.k8s.io/v1alpha1
+
+
+
+args
+[]string
+
+
+ Arguments to pass to the command when executing it.
+
+
+env
+[]ExecEnvVar
+
+
+ Env defines additional environment variables to expose to the process. These
+are unioned with the host's environment, as well as variables client-go uses
+to pass argument to the plugin.
+
+
+
+
+
+## `ExecEnvVar` {#kubelet-config-k8s-io-v1alpha1-ExecEnvVar}
+
+
+**Appears in:**
+
+- [CredentialProvider](#kubelet-config-k8s-io-v1alpha1-CredentialProvider)
+
+
+ExecEnvVar is used for setting environment variables when executing an exec-based
+credential plugin.
+
+
+
+Field Description
+
+
+
+name [Required]
+string
+
+
+ No description provided.
+
+value [Required]
+string
+
+
+ No description provided.
+
+
+
+
diff --git a/content/en/docs/reference/config-api/kubelet-config.v1beta1.md b/content/en/docs/reference/config-api/kubelet-config.v1beta1.md
index 9fc2bbfde0..ed68500044 100644
--- a/content/en/docs/reference/config-api/kubelet-config.v1beta1.md
+++ b/content/en/docs/reference/config-api/kubelet-config.v1beta1.md
@@ -9,11 +9,43 @@ auto_generated: true
## Resource Types
+- [CredentialProviderConfig](#kubelet-config-k8s-io-v1beta1-CredentialProviderConfig)
- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
- [SerializedNodeConfigSource](#kubelet-config-k8s-io-v1beta1-SerializedNodeConfigSource)
+## `CredentialProviderConfig` {#kubelet-config-k8s-io-v1beta1-CredentialProviderConfig}
+
+
+
+CredentialProviderConfig is the configuration containing information about
+each exec credential provider. Kubelet reads this configuration from disk and enables
+each provider as specified by the CredentialProvider type.
+
+
+
+Field Description
+
+
+apiVersion stringkubelet.config.k8s.io/v1beta1
+kind stringCredentialProviderConfig
+
+
+providers [Required]
+[]CredentialProvider
+
+
+ providers is a list of credential provider plugins that will be enabled by the kubelet.
+Multiple providers may match against a single image, in which case credentials
+from all providers will be returned to the kubelet. If multiple providers are called
+for a single image, the results are combined. If providers return overlapping
+auth keys, the value from the provider earlier in this list is used.
+
+
+
+
+
## `KubeletConfiguration` {#kubelet-config-k8s-io-v1beta1-KubeletConfiguration}
@@ -35,9 +67,6 @@ auto_generated: true
enableServer enables Kubelet's secured server.
Note: Kubelet's insecure port is controlled by the readOnlyPort option.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
Default: true
@@ -47,10 +76,6 @@ Default: true
staticPodPath is the path to the directory containing local (static) pods to
run, or the path to a single static pod file.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-the set of static pods specified at the new path may be different than the
-ones the Kubelet initially started with, and this may disrupt your node.
Default: ""
@@ -60,11 +85,6 @@ Default: ""
syncFrequency is the max period between synchronizing running
containers and config.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-shortening this duration may have a negative performance impact, especially
-as the number of Pods on the node increases. Alternatively, increasing this
-duration will result in longer refresh times for ConfigMaps and Secrets.
Default: "1m"
@@ -74,10 +94,6 @@ Default: "1m"
fileCheckFrequency is the duration between checking config files for
new data.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-shortening the duration will cause the Kubelet to reload local Static Pod
-configurations more frequently, which may have a negative performance impact.
Default: "20s"
@@ -86,10 +102,6 @@ Default: "20s"
httpCheckFrequency is the duration between checking http for new data.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-shortening the duration will cause the Kubelet to poll staticPodURL more
-frequently, which may have a negative performance impact.
Default: "20s"
@@ -98,10 +110,6 @@ Default: "20s"
staticPodURL is the URL for accessing static pods to run.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-the set of static pods specified at the new URL may be different than the
-ones the Kubelet initially started with, and this may disrupt your node.
Default: ""
@@ -110,9 +118,6 @@ Default: ""
staticPodURLHeader is a map of slices with HTTP headers to use when accessing the podURL.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt the ability to read the latest set of static pods from StaticPodURL.
Default: nil
@@ -122,9 +127,6 @@ Default: nil
address is the IP address for the Kubelet to serve on (set to 0.0.0.0
for all interfaces).
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
Default: "0.0.0.0"
@@ -134,9 +136,6 @@ Default: "0.0.0.0"
port is the port for the Kubelet to serve on.
The port number must be between 1 and 65535, inclusive.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
Default: 10250
@@ -148,9 +147,6 @@ Default: 10250
no authentication/authorization.
The port number must be between 1 and 65535, inclusive.
Setting this field to 0 disables the read-only service.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
Default: 0 (disabled)
@@ -163,9 +159,6 @@ if any, concatenated after server cert). If tlsCertFile and
tlsPrivateKeyFile are not provided, a self-signed certificate
and key are generated for the public address and saved to the directory
passed to the Kubelet's --cert-dir flag.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
Default: ""
@@ -174,9 +167,6 @@ Default: ""
tlsPrivateKeyFile is the file containing x509 private key matching tlsCertFile.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
Default: ""
@@ -186,9 +176,6 @@ Default: ""
tlsCipherSuites is the list of allowed cipher suites for the server.
Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants).
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
Default: nil
@@ -198,9 +185,6 @@ Default: nil
tlsMinVersion is the minimum TLS version supported.
Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants).
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
Default: ""
@@ -211,10 +195,6 @@ Default: ""
rotateCertificates enables client certificate rotation. The Kubelet will request a
new certificate from the certificates.k8s.io API. This requires an approver to approve the
certificate signing requests.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-disabling it may disrupt the Kubelet's ability to authenticate with the API server
-after the current certificate expires.
Default: false
@@ -227,11 +207,6 @@ signing a serving certificate, the Kubelet will request a certificate from
the 'certificates.k8s.io' API. This requires an approver to approve the
certificate signing requests (CSR). The RotateKubeletServerCertificate feature
must be enabled when setting this field.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-disabling it will stop the renewal of Kubelet server certificates, which can
-disrupt components that interact with the Kubelet server in the long term,
-due to certificate expiration.
Default: false
@@ -240,9 +215,6 @@ Default: false
authentication specifies how requests to the Kubelet's server are authenticated.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
Defaults:
anonymous:
enabled: false
@@ -256,9 +228,6 @@ cacheTTL: "2m"
authorization specifies how requests to the Kubelet's server are authorized.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
Defaults:
mode: Webhook
webhook:
@@ -273,10 +242,6 @@ cacheUnauthorizedTTL: "30s"
registryPullQPS is the limit of registry pulls per second.
The value must not be a negative number.
Setting it to 0 means no limit.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact scalability by changing the amount of traffic produced
-by image pulls.
Default: 5
@@ -288,10 +253,6 @@ Default: 5
pulls to burst to this number, while still not exceeding registryPullQPS.
The value must not be a negative number.
Only used if registryPullQPS is greater than 0.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact scalability by changing the amount of traffic produced
-by image pulls.
Default: 10
@@ -301,10 +262,6 @@ Default: 10
eventRecordQPS is the maximum event creations per second. If 0, there
is no limit enforced. The value cannot be a negative number.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact scalability by changing the amount of traffic produced by
-event creations.
Default: 5
@@ -316,10 +273,6 @@ Default: 5
allows event creations to burst to this number, while still not exceeding
eventRecordQPS. This field canot be a negative number and it is only used
when eventRecordQPS > 0.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact scalability by changing the amount of traffic produced by
-event creations.
Default: 10
@@ -330,9 +283,6 @@ Default: 10
enableDebuggingHandlers enables server endpoints for log access
and local running of containers and commands, including the exec,
attach, logs, and portforward features.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-disabling it may disrupt components that interact with the Kubelet server.
Default: true
@@ -341,9 +291,6 @@ Default: true
enableContentionProfiling enables lock contention profiling, if enableDebuggingHandlers is true.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-enabling it may carry a performance impact.
Default: false
@@ -353,9 +300,6 @@ Default: false
healthzPort is the port of the localhost healthz endpoint (set to 0 to disable).
A valid number is between 1 and 65535.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that monitor Kubelet health.
Default: 10248
@@ -364,9 +308,6 @@ Default: 10248
healthzBindAddress is the IP address for the healthz server to serve on.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that monitor Kubelet health.
Default: "127.0.0.1"
@@ -376,9 +317,6 @@ Default: "127.0.0.1"
oomScoreAdj is The oom-score-adj value for kubelet process. Values
must be within the range [-1000, 1000].
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact the stability of nodes under memory pressure.
Default: -999
@@ -389,8 +327,6 @@ Default: -999
clusterDomain is the DNS domain for this cluster. If set, kubelet will
configure all containers to search this domain in addition to the
host's search domains.
-Dynamic Kubelet Config (deprecated): Dynamically updating this field is not recommended,
-as it should be kept in sync with the rest of the cluster.
Default: ""
@@ -401,10 +337,6 @@ Default: ""
clusterDNS is a list of IP addresses for the cluster DNS server. If set,
kubelet will configure all containers to use this for DNS resolution
instead of the host's DNS servers.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-changes will only take effect on Pods created after the update. Draining
-the node is recommended before changing this field.
Default: nil
@@ -414,10 +346,6 @@ Default: nil
streamingConnectionIdleTimeout is the maximum time a streaming connection
can be idle before the connection is automatically closed.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact components that rely on infrequent updates over streaming
-connections to the Kubelet server.
Default: "4h"
@@ -430,12 +358,6 @@ status. If node lease feature is not enabled, it is also the frequency that
kubelet posts node status to master.
Note: When node lease feature is not enabled, be cautious when changing the
constant, it must work with nodeMonitorGracePeriod in nodecontroller.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact node scalability, and also that the node controller's
-nodeMonitorGracePeriod must be set to N*NodeStatusUpdateFrequency,
-where N is the number of retries before the node controller marks
-the node unhealthy.
Default: "10s"
@@ -464,10 +386,6 @@ If the lease expires, the node can be considered unhealthy.
The lease is currently renewed every 10s, per KEP-0009. In the future, the lease renewal
interval may be set based on the lease duration.
The field value must be greater than 0.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-decreasing the duration may reduce tolerance for issues that temporarily prevent
-the Kubelet from renewing the lease (e.g. a short-lived network issue).
Default: 40
@@ -476,9 +394,7 @@ Default: 40
imageMinimumGCAge is the minimum age for an unused image before it is
-garbage collected. If DynamicKubeletConfig (deprecated; default off)
-is on, when dynamically updating this field, consider that it may trigger or
-delay garbage collection, and may change the image overhead on the node.
+garbage collected.
Default: "2m"
@@ -491,10 +407,6 @@ image garbage collection is always run. The percent is calculated by
dividing this field value by 100, so this field must be between 0 and
100, inclusive. When specified, the value must be greater than
imageGCLowThresholdPercent.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may trigger or delay garbage collection, and may change the image overhead
-on the node.
Default: 85
@@ -507,10 +419,6 @@ image garbage collection is never run. Lowest disk usage to garbage
collect to. The percent is calculated by dividing this field value by 100,
so the field value must be between 0 and 100, inclusive. When specified, the
value must be less than imageGCHighThresholdPercent.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may trigger or delay garbage collection, and may change the image overhead
-on the node.
Default: 80
@@ -520,9 +428,6 @@ Default: 80
volumeStatsAggPeriod is the frequency for calculating and caching volume
disk usage for all pods.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-shortening the period may carry a performance impact.
Default: "1m"
@@ -531,8 +436,6 @@ Default: "1m"
kubeletCgroups is the absolute name of cgroups to isolate the kubelet in
-Dynamic Kubelet Config (deprecated): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
Default: ""
@@ -544,8 +447,6 @@ Default: ""
all non-kernel processes that are not already in a container. Empty
for no container. Rolling back the flag requires a reboot.
The cgroupRoot must be specified if this field is not empty.
-Dynamic Kubelet Config (deprecated): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
Default: ""
@@ -554,10 +455,7 @@ Default: ""
cgroupRoot is the root cgroup to use for pods. This is handled by the
-container runtime on a best effort basis.
-Dynamic Kubelet Config (deprecated): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
-Default: ""
+container runtime on a best effort basis.
cgroupsPerQOS
@@ -567,8 +465,6 @@ Default: ""
cgroupsPerQOS enable QoS based CGroup hierarchy: top level CGroups for QoS classes
and all Burstable and BestEffort Pods are brought up under their specific top level
QoS CGroup.
-Dynamic Kubelet Config (deprecated): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
Default: true
@@ -578,8 +474,6 @@ Default: true
cgroupDriver is the driver kubelet uses to manipulate CGroups on the host (cgroupfs
or systemd).
-Dynamic Kubelet Config (deprecated): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
Default: "cgroupfs"
@@ -589,8 +483,6 @@ Default: "cgroupfs"
cpuManagerPolicy is the name of the policy to use.
Requires the CPUManager feature gate to be enabled.
-Dynamic Kubelet Config (deprecated): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
Default: "None"
@@ -601,8 +493,6 @@ Default: "None"
cpuManagerPolicyOptions is a set of key=value which allows to set extra options
to fine tune the behaviour of the cpu manager policies.
Requires both the "CPUManager" and "CPUManagerPolicyOptions" feature gates to be enabled.
-Dynamic Kubelet Config (beta): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
Default: nil
@@ -612,9 +502,6 @@ Default: nil
cpuManagerReconcilePeriod is the reconciliation period for the CPU Manager.
Requires the CPUManager feature gate to be enabled.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-shortening the period may carry a performance impact.
Default: "10s"
@@ -624,8 +511,6 @@ Default: "10s"
memoryManagerPolicy is the name of the policy to use by memory manager.
Requires the MemoryManager feature gate to be enabled.
-Dynamic Kubelet Config (deprecated): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
Default: "none"
@@ -645,8 +530,6 @@ resources;
of CPU and device resources.
Policies other than "none" require the TopologyManager feature gate to be enabled.
-Dynamic Kubelet Config (deprecated): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
Default: "none"
@@ -673,8 +556,6 @@ the minimum percentage of a resource reserved for exclusive use by the
guaranteed QoS tier.
Currently supported resources: "memory"
Requires the QOSReserved feature gate to be enabled.
-Dynamic Kubelet Config (deprecated): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
Default: nil
@@ -684,9 +565,6 @@ Default: nil
runtimeRequestTimeout is the timeout for all runtime requests except long running
requests - pull, logs, exec and attach.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
Default: "2m"
@@ -705,9 +583,6 @@ themselves if they should try to access their own Service. Values:
Generally, one must set --hairpin-mode=hairpin-veth to achieve hairpin NAT,
because promiscuous-bridge assumes the existence of a container bridge named cbr0.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may require a node reboot, depending on the network plugin.
Default: "promiscuous-bridge"
@@ -717,12 +592,6 @@ Default: "promiscuous-bridge"
maxPods is the maximum number of Pods that can run on this Kubelet.
The value must be a non-negative integer.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-changes may cause Pods to fail admission on Kubelet restart, and may change
-the value reported in Node.Status.Capacity[v1.ResourcePods], thus affecting
-future scheduling decisions. Increasing this value may also decrease performance,
-as more Pods can be packed into a single node.
Default: 110
@@ -732,8 +601,6 @@ Default: 110
podCIDR is the CIDR to use for pod IP addresses, only used in standalone mode.
In cluster mode, this is obtained from the control plane.
-Dynamic Kubelet Config (deprecated): This field should always be set to the empty default.
-It should only set for standalone Kubelets, which cannot use Dynamic Kubelet Config.
Default: ""
@@ -742,9 +609,6 @@ Default: ""
podPidsLimit is the maximum number of PIDs in any pod.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-lowering it may prevent container processes from forking after the change.
Default: -1
@@ -754,10 +618,6 @@ Default: -1
resolvConf is the resolver configuration file used as the basis
for the container DNS resolution configuration.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-changes will only take effect on Pods created after the update. Draining
-the node is recommended before changing this field.
If set to the empty string, will override the default and effectively disable DNS lookups.
Default: "/etc/resolv.conf"
@@ -777,9 +637,6 @@ Default: false
cpuCFSQuota enables CPU CFS quota enforcement for containers that
specify CPU limits.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-disabling it may reduce node stability.
Default: true
@@ -790,10 +647,6 @@ Default: true
cpuCFSQuotaPeriod is the CPU CFS quota period value, cpu.cfs_period_us.
The value must be between 1 us and 1 second, inclusive.
Requires the CustomCPUCFSQuotaPeriod feature gate to be enabled.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-limits set for containers will result in different cpu.cfs_quota settings. This
-will trigger container restarts on the node being reconfigured.
Default: "100ms"
@@ -804,9 +657,6 @@ Default: "100ms"
nodeStatusMaxImages caps the number of images reported in Node.status.images.
The value must be greater than -2.
Note: If -1 is specified, no cap will be applied. If 0 is specified, no image is returned.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-different values can be reported on node status.
Default: 50
@@ -816,9 +666,6 @@ Default: 50
maxOpenFiles is Number of files that can be opened by Kubelet process.
The value must be a non-negative number.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact the ability of the Kubelet to interact with the node's filesystem.
Default: 1000000
@@ -827,11 +674,6 @@ Default: 1000000
contentType is contentType of requests sent to apiserver.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact the ability for the Kubelet to communicate with the API server.
-If the Kubelet loses contact with the API server due to a change to this field,
-the change cannot be reverted via dynamic Kubelet config.
Default: "application/vnd.kubernetes.protobuf"
@@ -840,10 +682,6 @@ Default: "application/vnd.kubernetes.protobuf"
kubeAPIQPS is the QPS to use while talking with kubernetes apiserver.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact scalability by changing the amount of traffic the Kubelet
-sends to the API server.
Default: 5
@@ -853,10 +691,6 @@ Default: 5
kubeAPIBurst is the burst to allow while talking with kubernetes API server.
This field cannot be a negative number.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact scalability by changing the amount of traffic the Kubelet
-sends to the API server.
Default: 10
@@ -868,9 +702,6 @@ Default: 10
at a time. We recommend not changing the default value on nodes that
run docker daemon with version < 1.9 or an Aufs storage backend.
Issue #10959 has more details.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact the performance of image pulls.
Default: true
@@ -881,9 +712,6 @@ Default: true
evictionHard is a map of signal names to quantities that defines hard eviction
thresholds. For example: {"memory.available": "300Mi"}.
To explicitly disable, pass a 0% or 100% threshold on an arbitrary resource.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may trigger or delay Pod evictions.
Default:
memory.available: "100Mi"
nodefs.available: "10%"
@@ -897,10 +725,6 @@ imagefs.available: "15%"
evictionSoft is a map of signal names to quantities that defines soft eviction thresholds.
For example: {"memory.available": "300Mi"}.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may trigger or delay Pod evictions, and may change the allocatable reported
-by the node.
Default: nil
@@ -910,9 +734,6 @@ Default: nil
evictionSoftGracePeriod is a map of signal names to quantities that defines grace
periods for each soft eviction signal. For example: {"memory.available": "30s"}.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may trigger or delay Pod evictions.
Default: nil
@@ -922,9 +743,6 @@ Default: nil
evictionPressureTransitionPeriod is the duration for which the kubelet has to wait
before transitioning out of an eviction pressure condition.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-lowering it may decrease the stability of the node when the node is overcommitted.
Default: "5m"
@@ -938,10 +756,6 @@ effectively caps the Pod's terminationGracePeriodSeconds value during soft evict
Note: Due to issue #64530, the behavior has a bug where this value currently just
overrides the grace period during soft eviction, which can increase the grace
period from what is set on the Pod. This bug will be fixed in a future release.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-lowering it decreases the amount of time Pods will have to gracefully clean
-up before being killed during a soft eviction.
Default: 0
@@ -953,9 +767,6 @@ Default: 0
which describe the minimum amount of a given resource the kubelet will reclaim when
performing a pod eviction while that resource is under pressure.
For example: {"imagefs.available": "2Gi"}.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may change how well eviction can manage resource pressure.
Default: nil
@@ -966,12 +777,6 @@ Default: nil
podsPerCore is the maximum number of pods per core. Cannot exceed maxPods.
The value must be a non-negative integer.
If 0, there is no limit on the number of Pods.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-changes may cause Pods to fail admission on Kubelet restart, and may change
-the value reported in Node.status.capacity.pods, thus affecting
-future scheduling decisions. Increasing this value may also decrease performance,
-as more Pods can be packed into a single node.
Default: 0
@@ -982,13 +787,8 @@ Default: 0
enableControllerAttachDetach enables the Attach/Detach controller to
manage attachment/detachment of volumes scheduled to this node, and
disables kubelet from executing any attach/detach operations.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-changing which component is responsible for volume management on a live node
-may result in volumes refusing to detach if the node is not drained prior to
-the update, and if Pods are scheduled to the node before the
-volumes.kubernetes.io/controller-managed-attach-detach annotation is updated by the
-Kubelet. In general, it is safest to leave this value set the same as local config.
+Note: attaching/detaching CSI volumes is not supported by the kubelet,
+so this option needs to be true for that use case.
Default: true
@@ -999,10 +799,6 @@ Default: true
protectKernelDefaults, if true, causes the Kubelet to error if kernel
flags are not as it expects. Otherwise the Kubelet will attempt to modify
kernel flags to match its expectation.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-enabling it may cause the Kubelet to crash-loop if the Kernel is not configured as
-Kubelet expects.
Default: false
@@ -1014,9 +810,6 @@ Default: false
are present on host.
These rules will serve as utility rules for various components, e.g. kube-proxy.
The rules will be created based on iptablesMasqueradeBit and iptablesDropBit.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-disabling it will prevent the Kubelet from healing locally misconfigured iptables rules.
Default: true
@@ -1028,10 +821,6 @@ Default: true
Values must be within the range [0, 31]. Must be different from other mark bits.
Warning: Please match the value of the corresponding parameter in kube-proxy.
TODO: clean up IPTablesMasqueradeBit in kube-proxy.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it needs to be coordinated with other components, like kube-proxy, and the update
-will only be effective if MakeIPTablesUtilChains is enabled.
Default: 14
@@ -1041,10 +830,6 @@ Default: 14
iptablesDropBit is the bit of the iptables fwmark space to mark for dropping packets.
Values must be within the range [0, 31]. Must be different from other mark bits.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it needs to be coordinated with other components, like kube-proxy, and the update
-will only be effective if MakeIPTablesUtilChains is enabled.
Default: 15
@@ -1055,12 +840,6 @@ Default: 15
featureGates is a map of feature names to bools that enable or disable experimental
features. This field modifies piecemeal the built-in default values from
"k8s.io/kubernetes/pkg/features/kube_features.go".
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider the
-documentation for the features you are enabling or disabling. While we
-encourage feature developers to make it possible to dynamically enable
-and disable features, some changes may require node reboots, and some
-features may require careful coordination to retroactively disable.
Default: nil
@@ -1069,9 +848,6 @@ Default: nil
failSwapOn tells the Kubelet to fail to start if swap is enabled on the node.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-setting it to true will cause the Kubelet to crash-loop if swap is enabled.
Default: true
@@ -1088,9 +864,6 @@ Default: true
containerLogMaxSize is a quantity defining the maximum size of the container log
file before it is rotated. For example: "5Mi" or "256Ki".
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may trigger log rotation.
Default: "10Mi"
@@ -1100,9 +873,6 @@ Default: "10Mi"
containerLogMaxFiles specifies the maximum number of container log files that can
be present for a container.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-lowering it may cause log files to be deleted.
Default: 5
@@ -1128,11 +898,6 @@ managers are running. Valid values include:
pairs that describe resources reserved for non-kubernetes components.
Currently only cpu and memory are supported.
See http://kubernetes.io/docs/user-guide/compute-resources for more detail.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may not be possible to increase the reserved resources, because this
-requires resizing cgroups. Always look for a NodeAllocatableEnforced event
-after updating this field to ensure that the update was successful.
Default: nil
@@ -1145,11 +910,6 @@ that describe resources reserved for kubernetes system components.
Currently cpu, memory and local storage for root file system are supported.
See https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
for more details.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may not be possible to increase the reserved resources, because this
-requires resizing cgroups. Always look for a NodeAllocatableEnforced event
-after updating this field to ensure that the update was successful.
Default: nil
@@ -1185,8 +945,6 @@ Default: ""
to enforce systemReserved compute resource reservation for OS system daemons.
Refer to Node Allocatable
doc for more information.
-Dynamic Kubelet Config (deprecated): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
Default: ""
@@ -1198,8 +956,6 @@ Default: ""
to enforce KubeReserved compute resource reservation for Kubernetes node system daemons.
Refer to Node Allocatable
doc for more information.
-Dynamic Kubelet Config (deprecated): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
Default: ""
@@ -1216,13 +972,6 @@ When kube-reserved is in the list, kubeReservedCgroup must be speci
This field is supported only when cgroupsPerQOS is set to true.
Refer to Node Allocatable
for more information.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-removing enforcements may reduce the stability of the node. Alternatively, adding
-enforcements may reduce the stability of components which were using more than
-the reserved amount of resources; for example, enforcing kube-reserved may cause
-Kubelets to OOM if it uses more than the reserved resources, and enforcing system-reserved
-may cause system daemons to OOM if they use more than the reserved resources.
Default: ["pods"]
@@ -1242,9 +991,6 @@ Default: []
volumePluginDir is the full path of the directory in which to search
for additional third party volume plugins.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that changing
-the volumePluginDir may disrupt workloads relying on third party volume plugins.
Default: "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/"
@@ -1254,9 +1000,6 @@ Default: "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/"
providerID, if set, sets the unique ID of the instance that an external
provider (i.e. cloudprovider) can use to identify a specific node.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact the ability of the Kubelet to interact with cloud providers.
Default: ""
@@ -1267,9 +1010,6 @@ Default: ""
kernelMemcgNotification, if set, instructs the the kubelet to integrate with the
kernel memcg notification for determining if memory eviction thresholds are
exceeded rather than polling.
-If DynamicKubeletConfig (deprecated; default off) is on, when
-dynamically updating this field, consider that
-it may impact the way Kubelet interacts with the kernel.
Default: false
@@ -1457,6 +1197,132 @@ It exists in the kubeletconfig API group because it is classified as a versioned
+## `CredentialProvider` {#kubelet-config-k8s-io-v1beta1-CredentialProvider}
+
+
+**Appears in:**
+
+- [CredentialProviderConfig](#kubelet-config-k8s-io-v1beta1-CredentialProviderConfig)
+
+
+CredentialProvider represents an exec plugin to be invoked by the kubelet. The plugin is only
+invoked when an image being pulled matches the images handled by the plugin (see matchImages).
+
+
+
+Field Description
+
+
+
+name [Required]
+string
+
+
+ name is the required name of the credential provider. It must match the name of the
+provider executable as seen by the kubelet. The executable must be in the kubelet's
+bin directory (set by the --image-credential-provider-bin-dir flag).
+
+
+matchImages [Required]
+[]string
+
+
+ matchImages is a required list of strings used to match against images in order to
+determine if this provider should be invoked. If one of the strings matches the
+requested image from the kubelet, the plugin will be invoked and given a chance
+to provide credentials. Images are expected to contain the registry domain
+and URL path.
+Each entry in matchImages is a pattern which can optionally contain a port and a path.
+Globs can be used in the domain, but not in the port or the path. Globs are supported
+as subdomains like '.k8s.io' or 'k8s. .io', and top-level-domains such as 'k8s.'.
+Matching partial subdomains like 'app .k8s.io' is also supported. Each glob can only match
+a single subdomain segment, so *.io does not match *.k8s.io.
+A match exists between an image and a matchImage when all of the below are true:
+
+Both contain the same number of domain parts and each part matches.
+The URL path of an imageMatch must be a prefix of the target image URL path.
+If the imageMatch contains a port, then the port must match in the image as well.
+
+Example values of matchImages:
+
+123456789.dkr.ecr.us-east-1.amazonaws.com
+*.azurecr.io
+gcr.io
+. .registry.io
+registry.io:8080/path
+
+
+
+defaultCacheDuration [Required]
+meta/v1.Duration
+
+
+ defaultCacheDuration is the default duration the plugin will cache credentials in-memory
+if a cache duration is not provided in the plugin response. This field is required.
+
+
+apiVersion [Required]
+string
+
+
+ Required input version of the exec CredentialProviderRequest. The returned CredentialProviderResponse
+MUST use the same encoding version as the input. Current supported values are:
+
+credentialprovider.kubelet.k8s.io/v1beta1
+
+
+
+args
+[]string
+
+
+ Arguments to pass to the command when executing it.
+
+
+env
+[]ExecEnvVar
+
+
+ Env defines additional environment variables to expose to the process. These
+are unioned with the host's environment, as well as variables client-go uses
+to pass argument to the plugin.
+
+
+
+
+
+## `ExecEnvVar` {#kubelet-config-k8s-io-v1beta1-ExecEnvVar}
+
+
+**Appears in:**
+
+- [CredentialProvider](#kubelet-config-k8s-io-v1beta1-CredentialProvider)
+
+
+ExecEnvVar is used for setting environment variables when executing an exec-based
+credential plugin.
+
+
+
+Field Description
+
+
+
+name [Required]
+string
+
+
+ No description provided.
+
+value [Required]
+string
+
+
+ No description provided.
+
+
+
+
## `KubeletAnonymousAuthentication` {#kubelet-config-k8s-io-v1beta1-KubeletAnonymousAuthentication}
@@ -1859,8 +1725,9 @@ default value of format is text
time.Duration
- Maximum number of seconds between log flushes. Ignored if the
-selected logging backend writes log messages without buffering.
+ Maximum number of nanoseconds (i.e. 1s = 1000000000) between log
+flushes. Ignored if the selected logging backend writes log
+messages without buffering.
verbosity [Required]
@@ -1881,14 +1748,6 @@ are always logged.
Only supported for "text" log format.
-sanitization [Required]
-bool
-
-
- [Experimental] When enabled prevents logging of fields tagged as sensitive (passwords, keys, tokens).
-Runtime log sanitization may introduce significant computation overhead and therefore should not be enabled in production.`)
-
-
options [Required]
FormatOptions
diff --git a/content/en/docs/reference/config-api/kubelet-credentialprovider.v1alpha1.md b/content/en/docs/reference/config-api/kubelet-credentialprovider.v1alpha1.md
index 070fe96d09..029d5ac62c 100644
--- a/content/en/docs/reference/config-api/kubelet-credentialprovider.v1alpha1.md
+++ b/content/en/docs/reference/config-api/kubelet-credentialprovider.v1alpha1.md
@@ -14,16 +14,14 @@ auto_generated: true
-
## `CredentialProviderRequest` {#credentialprovider-kubelet-k8s-io-v1alpha1-CredentialProviderRequest}
-
-
-CredentialProviderRequest includes the image that the kubelet requires authentication for.
+CredentialProviderRequest includes the image that the kubelet requires authentication for.
Kubelet will pass this request object to the plugin via stdin. In general, plugins should
-prefer responding with the same apiVersion they were sent.
+prefer responding with the same apiVersion they were sent.
+
Field Description
@@ -32,33 +30,27 @@ prefer responding with the same apiVersion they were sent.
apiVersion stringcredentialprovider.kubelet.k8s.io/v1alpha1
kind stringCredentialProviderRequest
-
-
image [Required]
string
- image is the container image that is being pulled as part of the
+ image is the container image that is being pulled as part of the
credential provider plugin request. Plugins may optionally parse the image
-to extract any information required to fetch credentials.
+to extract any information required to fetch credentials.
+
-
-
-
-
## `CredentialProviderResponse` {#credentialprovider-kubelet-k8s-io-v1alpha1-CredentialProviderResponse}
-
-
-CredentialProviderResponse holds credentials that the kubelet should use for the specified
+CredentialProviderResponse holds credentials that the kubelet should use for the specified
image provided in the original request. Kubelet will read the response from the plugin via stdout.
-This response should be set to the same apiVersion as CredentialProviderRequest.
+This response should be set to the same apiVersion as CredentialProviderRequest.
+
Field Description
@@ -67,119 +59,106 @@ This response should be set to the same apiVersion as CredentialProviderRequest.
apiVersion stringcredentialprovider.kubelet.k8s.io/v1alpha1
kind stringCredentialProviderResponse
-
-
cacheKeyType [Required]
PluginCacheKeyType
- cacheKeyType indiciates the type of caching key to use based on the image provided
+ cacheKeyType indiciates the type of caching key to use based on the image provided
in the request. There are three valid values for the cache key type: Image, Registry, and
-Global. If an invalid value is specified, the response will NOT be used by the kubelet.
+Global. If an invalid value is specified, the response will NOT be used by the kubelet.
+
-
-
cacheDuration
-meta/v1.Duration
+meta/v1.Duration
- cacheDuration indicates the duration the provided credentials should be cached for.
+ cacheDuration indicates the duration the provided credentials should be cached for.
The kubelet will use this field to set the in-memory cache duration for credentials
in the AuthConfig. If null, the kubelet will use defaultCacheDuration provided in
-CredentialProviderConfig. If set to 0, the kubelet will not cache the provided AuthConfig.
+CredentialProviderConfig. If set to 0, the kubelet will not cache the provided AuthConfig.
+
-
-
auth
map[string]k8s.io/kubelet/pkg/apis/credentialprovider/v1alpha1.AuthConfig
- auth is a map containing authentication information passed into the kubelet.
+ auth is a map containing authentication information passed into the kubelet.
Each key is a match image string (more on this below). The corresponding authConfig value
should be valid for all images that match against this key. A plugin should set
-this field to null if no valid credentials can be returned for the requested image.
-
-Each key in the map is a pattern which can optionally contain a port and a path.
+this field to null if no valid credentials can be returned for the requested image.
+Each key in the map is a pattern which can optionally contain a port and a path.
Globs can be used in the domain, but not in the port or the path. Globs are supported
-as subdomains like '∗.k8s.io' or 'k8s.∗.io', and top-level-domains such as 'k8s.∗'.
-Matching partial subdomains like 'app∗.k8s.io' is also supported. Each glob can only match
-a single subdomain segment, so ∗.io does not match ∗.k8s.io.
-
-The kubelet will match images against the key when all of the below are true:
-- Both contain the same number of domain parts and each part matches.
-- The URL path of an imageMatch must be a prefix of the target image URL path.
-- If the imageMatch contains a port, then the port must match in the image as well.
-
-When multiple keys are returned, the kubelet will traverse all keys in reverse order so that:
-- longer keys come before shorter keys with the same prefix
-- non-wildcard keys come before wildcard keys with the same prefix.
-
-For any given match, the kubelet will attempt an image pull with the provided credentials,
-stopping after the first successfully authenticated pull.
-
-Example keys:
- - 123456789.dkr.ecr.us-east-1.amazonaws.com
- - ∗.azurecr.io
- - gcr.io
- - ∗.∗.registry.io
- - registry.io:8080/path
+as subdomains like '.k8s.io' or 'k8s. .io', and top-level-domains such as 'k8s.'.
+Matching partial subdomains like 'app .k8s.io' is also supported. Each glob can only match
+a single subdomain segment, so *.io does not match *.k8s.io.
+The kubelet will match images against the key when all of the below are true:
+
+Both contain the same number of domain parts and each part matches.
+The URL path of an imageMatch must be a prefix of the target image URL path.
+If the imageMatch contains a port, then the port must match in the image as well.
+
+When multiple keys are returned, the kubelet will traverse all keys in reverse order so that:
+
+longer keys come before shorter keys with the same prefix
+non-wildcard keys come before wildcard keys with the same prefix.
+
+For any given match, the kubelet will attempt an image pull with the provided credentials,
+stopping after the first successfully authenticated pull.
+Example keys:
+
+123456789.dkr.ecr.us-east-1.amazonaws.com
+*.azurecr.io
+gcr.io
+. .registry.io
+registry.io:8080/path
+
+
-
-
-
-
## `AuthConfig` {#credentialprovider-kubelet-k8s-io-v1alpha1-AuthConfig}
-
-
**Appears in:**
- [CredentialProviderResponse](#credentialprovider-kubelet-k8s-io-v1alpha1-CredentialProviderResponse)
-AuthConfig contains authentication information for a container registry.
+AuthConfig contains authentication information for a container registry.
Only username/password based authentication is supported today, but more authentication
-mechanisms may be added in the future.
+mechanisms may be added in the future.
+
Field Description
-
username [Required]
string
- username is the username used for authenticating to the container registry
-An empty username is valid.
+ username is the username used for authenticating to the container registry
+An empty username is valid.
+
-
-
password [Required]
string
- password is the password used for authenticating to the container registry
-An empty password is valid.
+ password is the password used for authenticating to the container registry
+An empty password is valid.
+
-
-
-
-
## `PluginCacheKeyType` {#credentialprovider-kubelet-k8s-io-v1alpha1-PluginCacheKeyType}
(Alias of `string`)
-
**Appears in:**
- [CredentialProviderResponse](#credentialprovider-kubelet-k8s-io-v1alpha1-CredentialProviderResponse)
@@ -187,6 +166,4 @@ An empty password is valid.
-
-
diff --git a/content/en/docs/reference/config-api/kubelet-credentialprovider.v1beta1.md b/content/en/docs/reference/config-api/kubelet-credentialprovider.v1beta1.md
new file mode 100644
index 0000000000..a849970d4b
--- /dev/null
+++ b/content/en/docs/reference/config-api/kubelet-credentialprovider.v1beta1.md
@@ -0,0 +1,169 @@
+---
+title: Kubelet CredentialProvider (v1beta1)
+content_type: tool-reference
+package: credentialprovider.kubelet.k8s.io/v1beta1
+auto_generated: true
+---
+
+
+## Resource Types
+
+
+- [CredentialProviderRequest](#credentialprovider-kubelet-k8s-io-v1beta1-CredentialProviderRequest)
+- [CredentialProviderResponse](#credentialprovider-kubelet-k8s-io-v1beta1-CredentialProviderResponse)
+
+
+
+## `CredentialProviderRequest` {#credentialprovider-kubelet-k8s-io-v1beta1-CredentialProviderRequest}
+
+
+
+CredentialProviderRequest includes the image that the kubelet requires authentication for.
+Kubelet will pass this request object to the plugin via stdin. In general, plugins should
+prefer responding with the same apiVersion they were sent.
+
+
+
+Field Description
+
+
+apiVersion stringcredentialprovider.kubelet.k8s.io/v1beta1
+kind stringCredentialProviderRequest
+
+
+image [Required]
+string
+
+
+ image is the container image that is being pulled as part of the
+credential provider plugin request. Plugins may optionally parse the image
+to extract any information required to fetch credentials.
+
+
+
+
+
+## `CredentialProviderResponse` {#credentialprovider-kubelet-k8s-io-v1beta1-CredentialProviderResponse}
+
+
+
+CredentialProviderResponse holds credentials that the kubelet should use for the specified
+image provided in the original request. Kubelet will read the response from the plugin via stdout.
+This response should be set to the same apiVersion as CredentialProviderRequest.
+
+
+
+Field Description
+
+
+apiVersion stringcredentialprovider.kubelet.k8s.io/v1beta1
+kind stringCredentialProviderResponse
+
+
+cacheKeyType [Required]
+PluginCacheKeyType
+
+
+ cacheKeyType indiciates the type of caching key to use based on the image provided
+in the request. There are three valid values for the cache key type: Image, Registry, and
+Global. If an invalid value is specified, the response will NOT be used by the kubelet.
+
+
+cacheDuration
+meta/v1.Duration
+
+
+ cacheDuration indicates the duration the provided credentials should be cached for.
+The kubelet will use this field to set the in-memory cache duration for credentials
+in the AuthConfig. If null, the kubelet will use defaultCacheDuration provided in
+CredentialProviderConfig. If set to 0, the kubelet will not cache the provided AuthConfig.
+
+
+auth
+map[string]k8s.io/kubelet/pkg/apis/credentialprovider/v1beta1.AuthConfig
+
+
+ auth is a map containing authentication information passed into the kubelet.
+Each key is a match image string (more on this below). The corresponding authConfig value
+should be valid for all images that match against this key. A plugin should set
+this field to null if no valid credentials can be returned for the requested image.
+Each key in the map is a pattern which can optionally contain a port and a path.
+Globs can be used in the domain, but not in the port or the path. Globs are supported
+as subdomains like '.k8s.io' or 'k8s. .io', and top-level-domains such as 'k8s.'.
+Matching partial subdomains like 'app .k8s.io' is also supported. Each glob can only match
+a single subdomain segment, so *.io does not match *.k8s.io.
+The kubelet will match images against the key when all of the below are true:
+
+Both contain the same number of domain parts and each part matches.
+The URL path of an imageMatch must be a prefix of the target image URL path.
+If the imageMatch contains a port, then the port must match in the image as well.
+
+When multiple keys are returned, the kubelet will traverse all keys in reverse order so that:
+
+longer keys come before shorter keys with the same prefix
+non-wildcard keys come before wildcard keys with the same prefix.
+
+For any given match, the kubelet will attempt an image pull with the provided credentials,
+stopping after the first successfully authenticated pull.
+Example keys:
+
+123456789.dkr.ecr.us-east-1.amazonaws.com
+*.azurecr.io
+gcr.io
+. .registry.io
+registry.io:8080/path
+
+
+
+
+
+
+## `AuthConfig` {#credentialprovider-kubelet-k8s-io-v1beta1-AuthConfig}
+
+
+**Appears in:**
+
+- [CredentialProviderResponse](#credentialprovider-kubelet-k8s-io-v1beta1-CredentialProviderResponse)
+
+
+AuthConfig contains authentication information for a container registry.
+Only username/password based authentication is supported today, but more authentication
+mechanisms may be added in the future.
+
+
+
+Field Description
+
+
+
+username [Required]
+string
+
+
+ username is the username used for authenticating to the container registry
+An empty username is valid.
+
+
+password [Required]
+string
+
+
+ password is the password used for authenticating to the container registry
+An empty password is valid.
+
+
+
+
+
+## `PluginCacheKeyType` {#credentialprovider-kubelet-k8s-io-v1beta1-PluginCacheKeyType}
+
+(Alias of `string`)
+
+**Appears in:**
+
+- [CredentialProviderResponse](#credentialprovider-kubelet-k8s-io-v1beta1-CredentialProviderResponse)
+
+
+
+
+
diff --git a/content/en/docs/reference/glossary/api-eviction.md b/content/en/docs/reference/glossary/api-eviction.md
index 69fc9d9b0c..d450f90743 100644
--- a/content/en/docs/reference/glossary/api-eviction.md
+++ b/content/en/docs/reference/glossary/api-eviction.md
@@ -19,4 +19,9 @@ You can request eviction either by directly calling the Eviction API
using a client of the kube-apiserver, like the `kubectl drain` command.
When an `Eviction` object is created, the API server terminates the Pod.
+API-initiated evictions respect your configured [`PodDisruptionBudgets`](/docs/tasks/run-application/configure-pdb/)
+and [`terminationGracePeriodSeconds`](/docs/concepts/workloads/pods/pod-lifecycle#pod-termination).
+
API-initiated eviction is not the same as [node-pressure eviction](/docs/concepts/scheduling-eviction/eviction/#kubelet-eviction).
+
+* See [API-initiated eviction](/docs/concepts/scheduling-eviction/api-eviction/) for more information.
diff --git a/content/en/docs/reference/glossary/cadvisor.md b/content/en/docs/reference/glossary/cadvisor.md
index 300c9f14c3..a85e572467 100644
--- a/content/en/docs/reference/glossary/cadvisor.md
+++ b/content/en/docs/reference/glossary/cadvisor.md
@@ -4,7 +4,7 @@ id: cadvisor
date: 2021-12-09
full_link: https://github.com/google/cadvisor/
short_description: >
- Tool that provides understanding of the resource usage and perfomance characteristics for containers
+ Tool that provides understanding of the resource usage and performance characteristics for containers
aka:
tags:
- tool
diff --git a/content/en/docs/reference/glossary/dockershim.md b/content/en/docs/reference/glossary/dockershim.md
new file mode 100644
index 0000000000..d726679064
--- /dev/null
+++ b/content/en/docs/reference/glossary/dockershim.md
@@ -0,0 +1,18 @@
+---
+title: Dockershim
+id: dockershim
+date: 2022-04-15
+full_link: /dockershim
+short_description: >
+ A component of Kubernetes v1.23 and earlier, which allows Kubernetes system components to communicate with Docker Engine.
+
+aka:
+tags:
+- fundamental
+---
+The dockershim is a component of Kubernetes version 1.23 and earlier. It allows the kubelet
+to communicate with {{< glossary_tooltip text="Docker Engine" term_id="docker" >}}.
+
+
+
+Starting with version 1.24, dockershim has been removed from Kubernetes. For more information, see [Dockershim FAQ](/dockershim).
diff --git a/content/en/docs/reference/glossary/event.md b/content/en/docs/reference/glossary/event.md
index e534a91527..23c72302a6 100644
--- a/content/en/docs/reference/glossary/event.md
+++ b/content/en/docs/reference/glossary/event.md
@@ -21,5 +21,5 @@ or the continued existence of events with that reason.
Events should be treated as informative, best-effort, supplemental data.
-In Kubernetes, [auditing](/docs/tasks/debug-application-cluster/audit/) generates a different kind of
+In Kubernetes, [auditing](/docs/tasks/debug/debug-cluster/audit/) generates a different kind of
Event record (API group `audit.k8s.io`).
diff --git a/content/en/docs/reference/kubectl/cheatsheet.md b/content/en/docs/reference/kubectl/cheatsheet.md
index ca7e687735..3412175285 100644
--- a/content/en/docs/reference/kubectl/cheatsheet.md
+++ b/content/en/docs/reference/kubectl/cheatsheet.md
@@ -55,7 +55,7 @@ detailed config file information.
kubectl config view # Show Merged kubeconfig settings.
# use multiple kubeconfig files at the same time and view merged config
-KUBECONFIG=~/.kube/config:~/.kube/kubconfig2
+KUBECONFIG=~/.kube/config:~/.kube/kubconfig2
kubectl config view
@@ -64,7 +64,7 @@ kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'
kubectl config view -o jsonpath='{.users[].name}' # display the first user
kubectl config view -o jsonpath='{.users[*].name}' # get a list of users
-kubectl config get-contexts # display list of contexts
+kubectl config get-contexts # display list of contexts
kubectl config current-context # display the current-context
kubectl config use-context my-cluster-name # set the default context to my-cluster-name
@@ -102,10 +102,10 @@ kubectl apply -f https://git.io/vPieo # create resource(s) from url
kubectl create deployment nginx --image=nginx # start a single instance of nginx
# create a Job which prints "Hello World"
-kubectl create job hello --image=busybox:1.28 -- echo "Hello World"
+kubectl create job hello --image=busybox:1.28 -- echo "Hello World"
# create a CronJob that prints "Hello World" every minute
-kubectl create cronjob hello --image=busybox:1.28 --schedule="*/1 * * * *" -- echo "Hello World"
+kubectl create cronjob hello --image=busybox:1.28 --schedule="*/1 * * * *" -- echo "Hello World"
kubectl explain pods # get the documentation for pod manifests
@@ -183,8 +183,8 @@ kubectl get configmap myconfig \
-o jsonpath='{.data.ca\.crt}'
# Get all worker nodes (use a selector to exclude results that have a label
-# named 'node-role.kubernetes.io/master')
-kubectl get node --selector='!node-role.kubernetes.io/master'
+# named 'node-role.kubernetes.io/control-plane')
+kubectl get node --selector='!node-role.kubernetes.io/control-plane'
# Get all running pods in the namespace
kubectl get pods --field-selector=status.phase=Running
@@ -230,13 +230,16 @@ kubectl get pods -o json | jq -c 'paths|join(".")'
# Produce ENV for all pods, assuming you have a default container for the pods, default namespace and the `env` command is supported.
# Helpful when running any supported command across all pods, not just `env`
for pod in $(kubectl get po --output=jsonpath={.items..metadata.name}); do echo $pod && kubectl exec -it $pod -- env; done
+
+# Get a deployment's status subresource
+kubectl get deployment nginx-deployment --subresource=status
```
## Updating resources
```bash
kubectl set image deployment/frontend www=image:v2 # Rolling update "www" containers of "frontend" deployment, updating the image
-kubectl rollout history deployment/frontend # Check the history of deployments including the revision
+kubectl rollout history deployment/frontend # Check the history of deployments including the revision
kubectl rollout undo deployment/frontend # Rollback to the previous deployment
kubectl rollout undo deployment/frontend --to-revision=2 # Rollback to a specific revision
kubectl rollout status -w deployment/frontend # Watch rolling update status of "frontend" deployment until completion
@@ -276,6 +279,9 @@ kubectl patch deployment valid-deployment --type json -p='[{"op": "remove", "
# Add a new element to a positional array
kubectl patch sa default --type='json' -p='[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]'
+
+# Update a deployment's replica count by patching its scale subresource
+kubectl patch deployment nginx-deployment --subresource='scale' --type='merge' -p '{"spec":{"replicas":2}}'
```
## Editing resources
@@ -328,7 +334,7 @@ kubectl run nginx --image=nginx # Run pod nginx and write it
kubectl attach my-pod -i # Attach to Running Container
kubectl port-forward my-pod 5000:6000 # Listen on port 5000 on the local machine and forward to port 6000 on my-pod
kubectl exec my-pod -- ls / # Run command in existing pod (1 container case)
-kubectl exec --stdin --tty my-pod -- /bin/sh # Interactive shell access to a running pod (1 container case)
+kubectl exec --stdin --tty my-pod -- /bin/sh # Interactive shell access to a running pod (1 container case)
kubectl exec my-pod -c my-container -- ls / # Run command in existing pod (multi-container case)
kubectl top pod POD_NAME --containers # Show metrics for a given pod and its containers
kubectl top pod POD_NAME --sort-by=cpu # Show metrics for a given pod and sort it by 'cpu' or 'memory'
diff --git a/content/en/docs/reference/kubectl/conventions.md b/content/en/docs/reference/kubectl/conventions.md
index e62c5d5e44..00a842f058 100644
--- a/content/en/docs/reference/kubectl/conventions.md
+++ b/content/en/docs/reference/kubectl/conventions.md
@@ -19,6 +19,16 @@ For a stable output in a script:
* Fully-qualify the version. For example, `jobs.v1.batch/myjob`. This will ensure that kubectl does not use its default version that can change over time.
* Don't rely on context, preferences, or other implicit states.
+## Subresources
+
+* You can use the `--subresource` alpha flag for kubectl commands like `get`, `patch`,
+`edit` and `replace` to fetch and update subresources for all resources that
+support them. Currently, only the `status` and `scale` subresources are supported.
+* The API contract against a subresource is identical to a full resource. While updating the
+`status` subresource to a new value, keep in mind that the subresource could be potentially
+reconciled by a controller to a different value.
+
+
## Best Practices
### `kubectl run`
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 9c148702b5..95e2e79c77 100644
--- a/content/en/docs/reference/kubectl/docker-cli-to-kubectl.md
+++ b/content/en/docs/reference/kubectl/docker-cli-to-kubectl.md
@@ -187,7 +187,7 @@ kubectl exec -ti nginx-app-5jyvm -- /bin/sh
# exit
```
-For more information, see [Get a Shell to a Running Container](/docs/tasks/debug-application-cluster/get-shell-running-container/).
+For more information, see [Get a Shell to a Running Container](/docs/tasks/debug/debug-application/get-shell-running-container/).
## docker logs
diff --git a/content/en/docs/reference/kubernetes-api/authentication-resources/certificate-signing-request-v1.md b/content/en/docs/reference/kubernetes-api/authentication-resources/certificate-signing-request-v1.md
index dedb2c4d96..6d26235859 100644
--- a/content/en/docs/reference/kubernetes-api/authentication-resources/certificate-signing-request-v1.md
+++ b/content/en/docs/reference/kubernetes-api/authentication-resources/certificate-signing-request-v1.md
@@ -109,8 +109,6 @@ CertificateSigningRequestSpec contains the certificate request.
3. Signer whose configured minimum is longer than the requested duration
The minimum valid value for expirationSeconds is 600, i.e. 10 minutes.
-
- As of v1.22, this field is beta and is controlled via the CSRDuration feature gate.
- **extra** (map[string][]string)
@@ -212,11 +210,6 @@ CertificateSigningRequestStatus contains conditions used to indicate approved/de
Approved and Denied conditions are mutually exclusive. Approved, Denied, and Failed conditions cannot be removed once added.
Only one condition of a given type is allowed.
-
- Possible enum values:
- - `"Approved"` Approved indicates the request was approved and should be issued by the signer.
- - `"Denied"` Denied indicates the request was denied and should not be issued by the signer.
- - `"Failed"` Failed indicates the signer failed to issue the certificate.
- **conditions.lastTransitionTime** (Time)
diff --git a/content/en/docs/reference/kubernetes-api/authentication-resources/service-account-v1.md b/content/en/docs/reference/kubernetes-api/authentication-resources/service-account-v1.md
index 2b676969a8..f68e674c67 100644
--- a/content/en/docs/reference/kubernetes-api/authentication-resources/service-account-v1.md
+++ b/content/en/docs/reference/kubernetes-api/authentication-resources/service-account-v1.md
@@ -54,7 +54,7 @@ ServiceAccount binds together: * a name, understood by users, and perhaps by per
*Patch strategy: merge on key `name`*
- Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret
+ Secrets is a list of the secrets in the same namespace that pods running using this ServiceAccount are allowed to use. Pods are only limited to this list if this service account has a "kubernetes.io/enforce-mountable-secrets" annotation set to "true". This field should not be used to find auto-generated service account token secrets for use outside of pods. Instead, tokens can be requested directly using the TokenRequest API, or service account token secrets can be manually created. More info: https://kubernetes.io/docs/concepts/configuration/secret
diff --git a/content/en/docs/reference/kubernetes-api/cluster-resources/namespace-v1.md b/content/en/docs/reference/kubernetes-api/cluster-resources/namespace-v1.md
index 7dc5b03f9a..0871c397d3 100644
--- a/content/en/docs/reference/kubernetes-api/cluster-resources/namespace-v1.md
+++ b/content/en/docs/reference/kubernetes-api/cluster-resources/namespace-v1.md
@@ -90,13 +90,6 @@ NamespaceStatus is information about the current status of a Namespace.
- **conditions.type** (string), required
Type of namespace controller condition.
-
- Possible enum values:
- - `"NamespaceContentRemaining"` contains information about resources remaining in a namespace.
- - `"NamespaceDeletionContentFailure"` contains information about namespace deleter errors during deletion of resources.
- - `"NamespaceDeletionDiscoveryFailure"` contains information about namespace deleter errors during resource discovery.
- - `"NamespaceDeletionGroupVersionParsingFailure"` contains information about namespace deleter errors parsing GV for legacy types.
- - `"NamespaceFinalizersRemaining"` contains information about which finalizers are on resources remaining in a namespace.
- **conditions.lastTransitionTime** (Time)
@@ -114,9 +107,7 @@ NamespaceStatus is information about the current status of a Namespace.
Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
- Possible enum values:
- - `"Active"` means the namespace is available for use in the system
- - `"Terminating"` means the namespace is undergoing graceful termination
+
diff --git a/content/en/docs/reference/kubernetes-api/cluster-resources/node-v1.md b/content/en/docs/reference/kubernetes-api/cluster-resources/node-v1.md
index 0590545441..38132a5a6f 100644
--- a/content/en/docs/reference/kubernetes-api/cluster-resources/node-v1.md
+++ b/content/en/docs/reference/kubernetes-api/cluster-resources/node-v1.md
@@ -62,7 +62,7 @@ NodeSpec describes the attributes that a node is created with.
- **configSource** (NodeConfigSource)
- Deprecated. If specified, the source of the node's configuration. The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field. This field is deprecated as of 1.22: https://git.k8s.io/enhancements/keps/sig-node/281-dynamic-kubelet-configuration
+ Deprecated: Previously used to specify the source of the node's configuration for the DynamicKubeletConfig feature. This feature is removed from Kubelets as of 1.24 and will be fully removed in 1.26.
*NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil. This API is deprecated since 1.22*
@@ -121,10 +121,7 @@ NodeSpec describes the attributes that a node is created with.
Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
- Possible enum values:
- - `"NoExecute"` Evict any already-running pods that do not tolerate the taint. Currently enforced by NodeController.
- - `"NoSchedule"` Do not allow new pods to schedule onto the node unless they tolerate the taint, but allow all pods submitted to Kubelet without going through the scheduler to start, and allow all already-running pods to continue running. Enforced by the scheduler.
- - `"PreferNoSchedule"` Like TaintEffectNoSchedule, but the scheduler tries not to schedule new pods onto the node, rather than prohibiting new pods from scheduling onto the node entirely. Enforced by the scheduler.
+
- **taints.key** (string), required
@@ -171,13 +168,6 @@ NodeStatus is information about the current status of a node.
- **addresses.type** (string), required
Node address type, one of Hostname, ExternalIP or InternalIP.
-
- Possible enum values:
- - `"ExternalDNS"` identifies a DNS name which resolves to an IP address which has the characteristics of a NodeExternalIP. The IP it resolves to may or may not be a listed NodeExternalIP address.
- - `"ExternalIP"` identifies an IP address which is, in some way, intended to be more usable from outside the cluster then an internal IP, though no specific semantics are defined. It may be a globally routable IP, though it is not required to be. External IPs may be assigned directly to an interface on the node, like a NodeInternalIP, or alternatively, packets sent to the external IP may be NAT'ed to an internal node IP rather than being delivered directly (making the IP less efficient for node-to-node traffic than a NodeInternalIP).
- - `"Hostname"` identifies a name of the node. Although every node can be assumed to have a NodeAddress of this type, its exact syntax and semantics are not defined, and are not consistent between different clusters.
- - `"InternalDNS"` identifies a DNS name which resolves to an IP address which has the characteristics of a NodeInternalIP. The IP it resolves to may or may not be a listed NodeInternalIP address.
- - `"InternalIP"` identifies an IP address which is assigned to one of the node's network interfaces. Every node should have at least one address of this type. An internal IP is normally expected to be reachable from every other node, but may not be visible to hosts outside the cluster. By default it is assumed that kube-apiserver can reach node internal IPs, though it is possible to configure clusters where this is not the case. NodeInternalIP is the default type of node IP, and does not necessarily imply that the IP is ONLY reachable internally. If a node has multiple internal IPs, no specific semantics are assigned to the additional IPs.
- **allocatable** (map[string]}}">Quantity )
@@ -203,13 +193,6 @@ NodeStatus is information about the current status of a node.
- **conditions.type** (string), required
Type of node condition.
-
- Possible enum values:
- - `"DiskPressure"` means the kubelet is under pressure due to insufficient available disk.
- - `"MemoryPressure"` means the kubelet is under pressure due to insufficient available memory.
- - `"NetworkUnavailable"` means that network for the node is not correctly configured.
- - `"PIDPressure"` means the kubelet is under pressure due to insufficient available PID.
- - `"Ready"` means kubelet is healthy and ready to accept pods.
- **conditions.lastHeartbeatTime** (Time)
@@ -396,7 +379,7 @@ NodeStatus is information about the current status of a node.
- **nodeInfo.containerRuntimeVersion** (string), required
- ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).
+ ContainerRuntime Version reported by the node through runtime remote API (e.g. containerd://1.4.2).
- **nodeInfo.kernelVersion** (string), required
@@ -430,10 +413,7 @@ NodeStatus is information about the current status of a node.
NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.
- Possible enum values:
- - `"Pending"` means the node has been created/added by the system, but not configured.
- - `"Running"` means the node has been configured and has Kubernetes components running.
- - `"Terminated"` means the node has been removed from the cluster.
+
- **volumesAttached** ([]AttachedVolume)
diff --git a/content/en/docs/reference/kubernetes-api/cluster-resources/runtime-class-v1.md b/content/en/docs/reference/kubernetes-api/cluster-resources/runtime-class-v1.md
index ba69c0ddf4..4f8bb7571d 100644
--- a/content/en/docs/reference/kubernetes-api/cluster-resources/runtime-class-v1.md
+++ b/content/en/docs/reference/kubernetes-api/cluster-resources/runtime-class-v1.md
@@ -50,7 +50,6 @@ RuntimeClass defines a class of container runtime supported in the cluster. The
Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. For more details, see
https://kubernetes.io/docs/concepts/scheduling-eviction/pod-overhead/
- This field is in beta starting v1.18 and is only honored by servers that enable the PodOverhead feature.
*Overhead structure represents the resource overhead associated with running a pod.*
@@ -87,9 +86,7 @@ RuntimeClass defines a class of container runtime supported in the cluster. The
Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
- Possible enum values:
- - `"Equal"`
- - `"Exists"`
+
- **scheduling.tolerations.value** (string)
@@ -99,10 +96,7 @@ RuntimeClass defines a class of container runtime supported in the cluster. The
Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
- Possible enum values:
- - `"NoExecute"` Evict any already-running pods that do not tolerate the taint. Currently enforced by NodeController.
- - `"NoSchedule"` Do not allow new pods to schedule onto the node unless they tolerate the taint, but allow all pods submitted to Kubelet without going through the scheduler to start, and allow all already-running pods to continue running. Enforced by the scheduler.
- - `"PreferNoSchedule"` Like TaintEffectNoSchedule, but the scheduler tries not to schedule new pods onto the node, rather than prohibiting new pods from scheduling onto the node entirely. Enforced by the scheduler.
+
- **scheduling.tolerations.tolerationSeconds** (int64)
diff --git a/content/en/docs/reference/kubernetes-api/common-definitions/list-meta.md b/content/en/docs/reference/kubernetes-api/common-definitions/list-meta.md
index 96f2dafd30..145f905e9d 100644
--- a/content/en/docs/reference/kubernetes-api/common-definitions/list-meta.md
+++ b/content/en/docs/reference/kubernetes-api/common-definitions/list-meta.md
@@ -44,9 +44,7 @@ ListMeta describes metadata that synthetic resources must have, including lists
- **selfLink** (string)
- selfLink is a URL representing this object. Populated by the system. Read-only.
-
- DEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.
+ Deprecated: selfLink is a legacy read-only field that is no longer populated by the system.
diff --git a/content/en/docs/reference/kubernetes-api/common-definitions/node-selector-requirement.md b/content/en/docs/reference/kubernetes-api/common-definitions/node-selector-requirement.md
index 505fab63a5..e969d31f46 100644
--- a/content/en/docs/reference/kubernetes-api/common-definitions/node-selector-requirement.md
+++ b/content/en/docs/reference/kubernetes-api/common-definitions/node-selector-requirement.md
@@ -38,13 +38,7 @@ A node selector requirement is a selector that contains values, a key, and an op
Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
- Possible enum values:
- - `"DoesNotExist"`
- - `"Exists"`
- - `"Gt"`
- - `"In"`
- - `"Lt"`
- - `"NotIn"`
+
- **values** ([]string)
diff --git a/content/en/docs/reference/kubernetes-api/common-definitions/object-meta.md b/content/en/docs/reference/kubernetes-api/common-definitions/object-meta.md
index 40c7899adc..1d5339ad0c 100644
--- a/content/en/docs/reference/kubernetes-api/common-definitions/object-meta.md
+++ b/content/en/docs/reference/kubernetes-api/common-definitions/object-meta.md
@@ -38,7 +38,7 @@ ObjectMeta is metadata that all persisted resources must have, which includes al
GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.
- If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).
+ If this field is specified and the generated name exists, the server will return a 409.
Applied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
@@ -105,7 +105,7 @@ ObjectMeta is metadata that all persisted resources must have, which includes al
- **managedFields.time** (Time)
- Time is timestamp of when these fields were set. It should always be empty if Operation is 'Apply'
+ Time is the timestamp of when the ManagedFields entry was added. The timestamp will also be updated if a field is added, the manager changes any of the owned fields value or removes a field. The timestamp does not update when a field is removed from the entry because another manager took it over.
*Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.*
@@ -137,7 +137,7 @@ ObjectMeta is metadata that all persisted resources must have, which includes al
- **ownerReferences.blockOwnerDeletion** (boolean)
- If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.
+ If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion for how the garbage collector interacts with this field and enforces the foreground deletion. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.
- **ownerReferences.controller** (boolean)
@@ -180,9 +180,7 @@ ObjectMeta is metadata that all persisted resources must have, which includes al
- **selfLink** (string)
- SelfLink is a URL representing this object. Populated by the system. Read-only.
-
- DEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.
+ Deprecated: selfLink is a legacy read-only field that is no longer populated by the system.
- **uid** (string)
@@ -195,7 +193,9 @@ ObjectMeta is metadata that all persisted resources must have, which includes al
- **clusterName** (string)
- The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.
+ Deprecated: ClusterName is a legacy field that was always cleared by the system and never used; it will be removed completely in 1.25.
+
+ The name in the go struct is changed to help clients detect accidental use.
diff --git a/content/en/docs/reference/kubernetes-api/common-parameters/common-parameters.md b/content/en/docs/reference/kubernetes-api/common-parameters/common-parameters.md
index 7a520f8953..63005d7a54 100644
--- a/content/en/docs/reference/kubernetes-api/common-parameters/common-parameters.md
+++ b/content/en/docs/reference/kubernetes-api/common-parameters/common-parameters.md
@@ -80,7 +80,7 @@ A selector to restrict the list of returned objects by their fields. Defaults to
## fieldValidation {#fieldValidation}
-fieldValidation determines how the server should respond to unknown/duplicate fields in the object in the request. Introduced as alpha in 1.23, older servers or servers with the `ServerSideFieldValidation` feature disabled will discard valid values specified in this param and not perform any server side field validation. Valid values are: - Ignore: ignores unknown/duplicate fields. - Warn: responds with a warning for each unknown/duplicate field, but successfully serves the request. - Strict: fails the request on unknown/duplicate fields.
+fieldValidation instructs the server on how to handle objects in the request (POST/PUT/PATCH) containing unknown or duplicate fields, provided that the `ServerSideFieldValidation` feature gate is also enabled. Valid values are: - Ignore: This will ignore any unknown fields that are silently dropped from the object, and will ignore all but the last duplicate field that the decoder encounters. This is the default behavior prior to v1.23 and is the default behavior when the `ServerSideFieldValidation` feature gate is disabled. - Warn: This will send a warning via the standard warning response header for each unknown field that is dropped from the object, and for each duplicate field that is encountered. The request will still succeed if there are no other errors, and will only persist the last of any duplicate fields. This is the default when the `ServerSideFieldValidation` feature gate is enabled. - Strict: This will fail the request with a BadRequest error if any unknown fields would be dropped from the object, or if any duplicate fields are present. The error returned from the server will contain all unknown and duplicate fields encountered.
diff --git a/content/en/docs/reference/kubernetes-api/config-and-storage-resources/csi-driver-v1.md b/content/en/docs/reference/kubernetes-api/config-and-storage-resources/csi-driver-v1.md
index 26ca3c0871..099f2d396f 100644
--- a/content/en/docs/reference/kubernetes-api/config-and-storage-resources/csi-driver-v1.md
+++ b/content/en/docs/reference/kubernetes-api/config-and-storage-resources/csi-driver-v1.md
@@ -94,8 +94,6 @@ CSIDriverSpec is the specification of a CSIDriver.
Alternatively, the driver can be deployed with the field unset or false and it can be flipped later when storage capacity information has been published.
This field was immutable in Kubernetes \<= 1.22 and now is mutable.
-
- This is a beta field and only available when the CSIStorageCapacity feature is enabled. The default is false.
- **tokenRequests** ([]TokenRequest)
diff --git a/content/en/docs/reference/kubernetes-api/config-and-storage-resources/csi-storage-capacity-v1beta1.md b/content/en/docs/reference/kubernetes-api/config-and-storage-resources/csi-storage-capacity-v1.md
similarity index 86%
rename from content/en/docs/reference/kubernetes-api/config-and-storage-resources/csi-storage-capacity-v1beta1.md
rename to content/en/docs/reference/kubernetes-api/config-and-storage-resources/csi-storage-capacity-v1.md
index bbac434e85..cf4df4befe 100644
--- a/content/en/docs/reference/kubernetes-api/config-and-storage-resources/csi-storage-capacity-v1beta1.md
+++ b/content/en/docs/reference/kubernetes-api/config-and-storage-resources/csi-storage-capacity-v1.md
@@ -1,11 +1,11 @@
---
api_metadata:
- apiVersion: "storage.k8s.io/v1beta1"
- import: "k8s.io/api/storage/v1beta1"
+ apiVersion: "storage.k8s.io/v1"
+ import: "k8s.io/api/storage/v1"
kind: "CSIStorageCapacity"
content_type: "api_reference"
description: "CSIStorageCapacity stores the result of one CSI GetCapacity call."
-title: "CSIStorageCapacity v1beta1"
+title: "CSIStorageCapacity"
weight: 10
auto_generated: true
---
@@ -21,9 +21,9 @@ guide. You can file document formatting bugs against the
[reference-docs](https://github.com/kubernetes-sigs/reference-docs/) project.
-->
-`apiVersion: storage.k8s.io/v1beta1`
+`apiVersion: storage.k8s.io/v1`
-`import "k8s.io/api/storage/v1beta1"`
+`import "k8s.io/api/storage/v1"`
## CSIStorageCapacity {#CSIStorageCapacity}
@@ -36,11 +36,11 @@ The following three cases all imply that no capacity is available for a certain
The producer of these objects can decide which approach is more suitable.
-They are consumed by the kube-scheduler if the CSIStorageCapacity beta feature gate is enabled there and a CSI driver opts into capacity-aware scheduling with CSIDriver.StorageCapacity.
+They are consumed by the kube-scheduler when a CSI driver opts into capacity-aware scheduling with CSIDriverSpec.StorageCapacity. The scheduler compares the MaximumVolumeSize against the requested size of pending volumes to filter out unsuitable nodes. If MaximumVolumeSize is unset, it falls back to a comparison against the less precise Capacity. If that is also unset, the scheduler assumes that capacity is insufficient and tries some other node.
-- **apiVersion**: storage.k8s.io/v1beta1
+- **apiVersion**: storage.k8s.io/v1
- **kind**: CSIStorageCapacity
@@ -62,7 +62,7 @@ They are consumed by the kube-scheduler if the CSIStorageCapacity beta feature g
Capacity is the value reported by the CSI driver in its GetCapacityResponse for a GetCapacityRequest with topology and parameters that match the previous fields.
- The semantic is currently (CSI spec 1.2) defined as: The available capacity, in bytes, of the storage that can be used to provision volumes. If not set, that information is currently unavailable and treated like zero capacity.
+ The semantic is currently (CSI spec 1.2) defined as: The available capacity, in bytes, of the storage that can be used to provision volumes. If not set, that information is currently unavailable.
- **maximumVolumeSize** (}}">Quantity )
@@ -84,7 +84,7 @@ CSIStorageCapacityList is a collection of CSIStorageCapacity objects.
-- **apiVersion**: storage.k8s.io/v1beta1
+- **apiVersion**: storage.k8s.io/v1
- **kind**: CSIStorageCapacityList
@@ -94,7 +94,7 @@ CSIStorageCapacityList is a collection of CSIStorageCapacity objects.
Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-- **items** ([]}}">CSIStorageCapacity ), required
+- **items** ([]}}">CSIStorageCapacity ), required
*Map: unique values on key name will be kept during a merge*
@@ -119,7 +119,7 @@ CSIStorageCapacityList is a collection of CSIStorageCapacity objects.
#### HTTP Request
-GET /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/{name}
+GET /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities/{name}
#### Parameters
@@ -143,7 +143,7 @@ GET /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/{na
#### Response
-200 (}}">CSIStorageCapacity ): OK
+200 (}}">CSIStorageCapacity ): OK
401: Unauthorized
@@ -152,7 +152,7 @@ GET /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/{na
#### HTTP Request
-GET /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities
+GET /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities
#### Parameters
@@ -216,7 +216,7 @@ GET /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities
#### Response
-200 (}}">CSIStorageCapacityList ): OK
+200 (}}">CSIStorageCapacityList ): OK
401: Unauthorized
@@ -225,7 +225,7 @@ GET /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities
#### HTTP Request
-GET /apis/storage.k8s.io/v1beta1/csistoragecapacities
+GET /apis/storage.k8s.io/v1/csistoragecapacities
#### Parameters
@@ -284,7 +284,7 @@ GET /apis/storage.k8s.io/v1beta1/csistoragecapacities
#### Response
-200 (}}">CSIStorageCapacityList ): OK
+200 (}}">CSIStorageCapacityList ): OK
401: Unauthorized
@@ -293,7 +293,7 @@ GET /apis/storage.k8s.io/v1beta1/csistoragecapacities
#### HTTP Request
-POST /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities
+POST /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities
#### Parameters
@@ -303,7 +303,7 @@ POST /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities
}}">namespace
-- **body**: }}">CSIStorageCapacity , required
+- **body**: }}">CSIStorageCapacity , required
@@ -332,11 +332,11 @@ POST /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities
#### Response
-200 (}}">CSIStorageCapacity ): OK
+200 (}}">CSIStorageCapacity ): OK
-201 (}}">CSIStorageCapacity ): Created
+201 (}}">CSIStorageCapacity ): Created
-202 (}}">CSIStorageCapacity ): Accepted
+202 (}}">CSIStorageCapacity ): Accepted
401: Unauthorized
@@ -345,7 +345,7 @@ POST /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities
#### HTTP Request
-PUT /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/{name}
+PUT /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities/{name}
#### Parameters
@@ -360,7 +360,7 @@ PUT /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/{na
}}">namespace
-- **body**: }}">CSIStorageCapacity , required
+- **body**: }}">CSIStorageCapacity , required
@@ -389,9 +389,9 @@ PUT /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/{na
#### Response
-200 (}}">CSIStorageCapacity ): OK
+200 (}}">CSIStorageCapacity ): OK
-201 (}}">CSIStorageCapacity ): Created
+201 (}}">CSIStorageCapacity ): Created
401: Unauthorized
@@ -400,7 +400,7 @@ PUT /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/{na
#### HTTP Request
-PATCH /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/{name}
+PATCH /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities/{name}
#### Parameters
@@ -449,9 +449,9 @@ PATCH /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/{
#### Response
-200 (}}">CSIStorageCapacity ): OK
+200 (}}">CSIStorageCapacity ): OK
-201 (}}">CSIStorageCapacity ): Created
+201 (}}">CSIStorageCapacity ): Created
401: Unauthorized
@@ -460,7 +460,7 @@ PATCH /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/{
#### HTTP Request
-DELETE /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/{name}
+DELETE /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities/{name}
#### Parameters
@@ -515,7 +515,7 @@ DELETE /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities/
#### HTTP Request
-DELETE /apis/storage.k8s.io/v1beta1/namespaces/{namespace}/csistoragecapacities
+DELETE /apis/storage.k8s.io/v1/namespaces/{namespace}/csistoragecapacities
#### Parameters
diff --git a/content/en/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1.md b/content/en/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1.md
index d57d7db45c..a70bcadba1 100644
--- a/content/en/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1.md
+++ b/content/en/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-claim-v1.md
@@ -44,11 +44,11 @@ PersistentVolumeClaim is a user's request for and claim to a persistent volume
- **spec** (}}">PersistentVolumeClaimSpec )
- Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
- **status** (}}">PersistentVolumeClaimStatus )
- Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
@@ -62,15 +62,15 @@ PersistentVolumeClaimSpec describes the common attributes of storage devices and
- **accessModes** ([]string)
- AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+ accessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
- **selector** (}}">LabelSelector )
- A label query over volumes to consider for binding.
+ selector is a label query over volumes to consider for binding.
- **resources** (ResourceRequirements)
- Resources represents the minimum resources the volume should have. If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements that are lower than previous value but must still be higher than capacity recorded in the status field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+ resources represents the minimum resources the volume should have. If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements that are lower than previous value but must still be higher than capacity recorded in the status field of the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
*ResourceRequirements describes the compute resource requirements.*
@@ -85,11 +85,11 @@ PersistentVolumeClaimSpec describes the common attributes of storage devices and
- **volumeName** (string)
- VolumeName is the binding reference to the PersistentVolume backing this claim.
+ volumeName is the binding reference to the PersistentVolume backing this claim.
- **storageClassName** (string)
- Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+ storageClassName is the name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
- **volumeMode** (string)
@@ -102,16 +102,16 @@ PersistentVolumeClaimSpec describes the common attributes of storage devices and
- **dataSource** (}}">TypedLocalObjectReference )
- This field can be used to specify either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) * An existing PVC (PersistentVolumeClaim) If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source. If the AnyVolumeDataSource feature gate is enabled, this field will always have the same contents as the DataSourceRef field.
+ dataSource field can be used to specify either: * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) * An existing PVC (PersistentVolumeClaim) If the provisioner or an external controller can support the specified data source, it will create a new volume based on the contents of the specified data source. If the AnyVolumeDataSource feature gate is enabled, this field will always have the same contents as the DataSourceRef field.
- **dataSourceRef** (}}">TypedLocalObjectReference )
- Specifies the object from which to populate the volume with data, if a non-empty volume is desired. This may be any local object from a non-empty API group (non core object) or a PersistentVolumeClaim object. When this field is specified, volume binding will only succeed if the type of the specified object matches some installed volume populator or dynamic provisioner. This field will replace the functionality of the DataSource field and as such if both fields are non-empty, they must have the same value. For backwards compatibility, both fields (DataSource and DataSourceRef) will be set to the same value automatically if one of them is empty and the other is non-empty. There are two important differences between DataSource and DataSourceRef: * While DataSource only allows two specific types of objects, DataSourceRef
+ dataSourceRef specifies the object from which to populate the volume with data, if a non-empty volume is desired. This may be any local object from a non-empty API group (non core object) or a PersistentVolumeClaim object. When this field is specified, volume binding will only succeed if the type of the specified object matches some installed volume populator or dynamic provisioner. This field will replace the functionality of the DataSource field and as such if both fields are non-empty, they must have the same value. For backwards compatibility, both fields (DataSource and DataSourceRef) will be set to the same value automatically if one of them is empty and the other is non-empty. There are two important differences between DataSource and DataSourceRef: * While DataSource only allows two specific types of objects, DataSourceRef
allows any non-core object, as well as PersistentVolumeClaim objects.
* While DataSource ignores disallowed values (dropping them), DataSourceRef
preserves all values, and generates an error if a disallowed value is
specified.
- (Alpha) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
+ (Beta) Using this field requires the AnyVolumeDataSource feature gate to be enabled.
@@ -123,21 +123,21 @@ PersistentVolumeClaimStatus is the current status of a persistent volume claim.
- **accessModes** ([]string)
- AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+ accessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
- **allocatedResources** (map[string]}}">Quantity )
- The storage resource within AllocatedResources tracks the capacity allocated to a PVC. It may be larger than the actual capacity when a volume expansion operation is requested. For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. If a volume expansion capacity request is lowered, allocatedResources is only lowered if there are no expansion operations in progress and if the actual volume capacity is equal or lower than the requested capacity. This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature.
+ allocatedResources is the storage resource within AllocatedResources tracks the capacity allocated to a PVC. It may be larger than the actual capacity when a volume expansion operation is requested. For storage quota, the larger value from allocatedResources and PVC.spec.resources is used. If allocatedResources is not set, PVC.spec.resources alone is used for quota calculation. If a volume expansion capacity request is lowered, allocatedResources is only lowered if there are no expansion operations in progress and if the actual volume capacity is equal or lower than the requested capacity. This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature.
- **capacity** (map[string]}}">Quantity )
- Represents the actual resources of the underlying volume.
+ capacity represents the actual resources of the underlying volume.
- **conditions** ([]PersistentVolumeClaimCondition)
*Patch strategy: merge on key `type`*
- Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.
+ conditions is the current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.
*PersistentVolumeClaimCondition contails details about state of pvc*
@@ -147,47 +147,38 @@ PersistentVolumeClaimStatus is the current status of a persistent volume claim.
- **conditions.type** (string), required
-
-
-
- Possible enum values:
- - `"FileSystemResizePending"` - controller resize is finished and a file system resize is pending on node
- - `"Resizing"` - a user trigger resize of pvc has been started
- **conditions.lastProbeTime** (Time)
- Last time we probed the condition.
+ lastProbeTime is the time we probed the condition.
*Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.*
- **conditions.lastTransitionTime** (Time)
- Last time the condition transitioned from one status to another.
+ lastTransitionTime is the time the condition transitioned from one status to another.
*Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.*
- **conditions.message** (string)
- Human-readable message indicating details about last transition.
+ message is the human-readable message indicating details about last transition.
- **conditions.reason** (string)
- Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports "ResizeStarted" that means the underlying persistent volume is being resized.
+ reason is a unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports "ResizeStarted" that means the underlying persistent volume is being resized.
- **phase** (string)
- Phase represents the current phase of PersistentVolumeClaim.
+ phase represents the current phase of PersistentVolumeClaim.
+
- Possible enum values:
- - `"Bound"` used for PersistentVolumeClaims that are bound
- - `"Lost"` used for PersistentVolumeClaims that lost their underlying PersistentVolume. The claim was bound to a PersistentVolume and this volume does not exist any longer and all data on it was lost.
- - `"Pending"` used for PersistentVolumeClaims that are not yet bound
- **resizeStatus** (string)
- ResizeStatus stores status of resize operation. ResizeStatus is not set by default but when expansion is complete resizeStatus is set to empty string by resize controller or kubelet. This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature.
+ resizeStatus stores status of resize operation. ResizeStatus is not set by default but when expansion is complete resizeStatus is set to empty string by resize controller or kubelet. This is an alpha field and requires enabling RecoverVolumeExpansionFailure feature.
@@ -211,7 +202,7 @@ PersistentVolumeClaimList is a list of PersistentVolumeClaim items.
- **items** ([]}}">PersistentVolumeClaim ), required
- A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ items is a list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
diff --git a/content/en/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-v1.md b/content/en/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-v1.md
index b4340081bb..170a16ec97 100644
--- a/content/en/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-v1.md
+++ b/content/en/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-v1.md
@@ -44,11 +44,11 @@ PersistentVolume (PV) is a storage resource provisioned by an administrator. It
- **spec** (}}">PersistentVolumeSpec )
- Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
+ spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
- **status** (}}">PersistentVolumeStatus )
- Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
+ status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
@@ -62,30 +62,30 @@ PersistentVolumeSpec is the specification of a persistent volume.
- **accessModes** ([]string)
- AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes
+ accessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes
- **capacity** (map[string]}}">Quantity )
- A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity
+ capacity is the description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity
- **claimRef** (}}">ObjectReference )
- ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding
+ claimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding
- **mountOptions** ([]string)
- A list of mount options, e.g. ["ro", "soft"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options
+ mountOptions is the list of mount options, e.g. ["ro", "soft"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options
- **nodeAffinity** (VolumeNodeAffinity)
- NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.
+ nodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.
*VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.*
- **nodeAffinity.required** (NodeSelector)
- Required specifies hard node constraints that must be met.
+ required specifies hard node constraints that must be met.
*A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.*
@@ -107,16 +107,13 @@ PersistentVolumeSpec is the specification of a persistent volume.
- **persistentVolumeReclaimPolicy** (string)
- What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming
+ persistentVolumeReclaimPolicy defines what happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming
+
- Possible enum values:
- - `"Delete"` means the volume will be deleted from Kubernetes on release from its claim. The volume plugin must support Deletion.
- - `"Recycle"` means the volume will be recycled back into the pool of unbound persistent volumes on release from its claim. The volume plugin must support Recycling.
- - `"Retain"` means the volume will be left in its current phase (Released) for manual reclamation by the administrator. The default policy is Retain.
- **storageClassName** (string)
- Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.
+ storageClassName is the name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.
- **volumeMode** (string)
@@ -129,40 +126,40 @@ PersistentVolumeSpec is the specification of a persistent volume.
- **hostPath** (HostPathVolumeSource)
- HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
+ hostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
*Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.*
- **hostPath.path** (string), required
- Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
+ path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
- **hostPath.type** (string)
- Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
+ type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
- **local** (LocalVolumeSource)
- Local represents directly-attached storage with node affinity
+ local represents directly-attached storage with node affinity
*Local represents directly-attached storage with node affinity (Beta feature)*
- **local.path** (string), required
- The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...).
+ path of the full path to the volume on the node. It can be either a directory or block device (disk, partition, ...).
- **local.fsType** (string)
- Filesystem type to mount. It applies only when the Path is a block device. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default value is to auto-select a filesystem if unspecified.
+ fsType is the filesystem type to mount. It applies only when the Path is a block device. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default value is to auto-select a filesystem if unspecified.
### Persistent volumes
- **awsElasticBlockStore** (AWSElasticBlockStoreVolumeSource)
- AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+ awsElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
*Represents a Persistent Disk resource in AWS.
@@ -171,320 +168,320 @@ PersistentVolumeSpec is the specification of a persistent volume.
- **awsElasticBlockStore.volumeID** (string), required
- Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+ volumeID is unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
- **awsElasticBlockStore.fsType** (string)
- Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+ fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
- **awsElasticBlockStore.partition** (int32)
- The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
+ partition is the partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
- **awsElasticBlockStore.readOnly** (boolean)
- Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+ readOnly value true will force the readOnly setting in VolumeMounts. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
- **azureDisk** (AzureDiskVolumeSource)
- AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
+ azureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
*AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.*
- **azureDisk.diskName** (string), required
- The Name of the data disk in the blob storage
+ diskName is the Name of the data disk in the blob storage
- **azureDisk.diskURI** (string), required
- The URI the data disk in the blob storage
+ diskURI is the URI of data disk in the blob storage
- **azureDisk.cachingMode** (string)
- Host Caching mode: None, Read Only, Read Write.
+ cachingMode is the Host Caching mode: None, Read Only, Read Write.
- **azureDisk.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ fsType is Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
- **azureDisk.kind** (string)
- Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared
+ kind expected values are Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared
- **azureDisk.readOnly** (boolean)
- Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **azureFile** (AzureFilePersistentVolumeSource)
- AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
+ azureFile represents an Azure File Service mount on the host and bind mount to the pod.
*AzureFile represents an Azure File Service mount on the host and bind mount to the pod.*
- **azureFile.secretName** (string), required
- the name of secret that contains Azure Storage Account Name and Key
+ secretName is the name of secret that contains Azure Storage Account Name and Key
- **azureFile.shareName** (string), required
- Share Name
+ shareName is the azure Share Name
- **azureFile.readOnly** (boolean)
- Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **azureFile.secretNamespace** (string)
- the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod
+ secretNamespace is the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod
- **cephfs** (CephFSPersistentVolumeSource)
- CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
+ cephFS represents a Ceph FS mount on the host that shares a pod's lifetime
*Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.*
- **cephfs.monitors** ([]string), required
- Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ monitors is Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
- **cephfs.path** (string)
- Optional: Used as the mounted root, rather than the full Ceph tree, default is /
+ path is Optional: Used as the mounted root, rather than the full Ceph tree, default is /
- **cephfs.readOnly** (boolean)
- Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ readOnly is Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
- **cephfs.secretFile** (string)
- Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ secretFile is Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
- **cephfs.secretRef** (SecretReference)
- Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ secretRef is Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
*SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace*
- **cephfs.secretRef.name** (string)
- Name is unique within a namespace to reference a secret resource.
+ name is unique within a namespace to reference a secret resource.
- **cephfs.secretRef.namespace** (string)
- Namespace defines the space within which the secret name must be unique.
+ namespace defines the space within which the secret name must be unique.
- **cephfs.user** (string)
- Optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ user is Optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
- **cinder** (CinderPersistentVolumeSource)
- Cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
+ cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
*Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.*
- **cinder.volumeID** (string), required
- volume id used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
+ volumeID used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
- **cinder.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
+ fsType Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
- **cinder.readOnly** (boolean)
- Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
+ readOnly is Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
- **cinder.secretRef** (SecretReference)
- Optional: points to a secret object containing parameters used to connect to OpenStack.
+ secretRef is Optional: points to a secret object containing parameters used to connect to OpenStack.
*SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace*
- **cinder.secretRef.name** (string)
- Name is unique within a namespace to reference a secret resource.
+ name is unique within a namespace to reference a secret resource.
- **cinder.secretRef.namespace** (string)
- Namespace defines the space within which the secret name must be unique.
+ namespace defines the space within which the secret name must be unique.
- **csi** (CSIPersistentVolumeSource)
- CSI represents storage that is handled by an external CSI driver (Beta feature).
+ csi represents storage that is handled by an external CSI driver (Beta feature).
*Represents storage that is managed by an external CSI volume driver (Beta feature)*
- **csi.driver** (string), required
- Driver is the name of the driver to use for this volume. Required.
+ driver is the name of the driver to use for this volume. Required.
- **csi.volumeHandle** (string), required
- VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.
+ volumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.
- **csi.controllerExpandSecretRef** (SecretReference)
- ControllerExpandSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerExpandVolume call. This is an alpha field and requires enabling ExpandCSIVolumes feature gate. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.
+ controllerExpandSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerExpandVolume call. This is an alpha field and requires enabling ExpandCSIVolumes feature gate. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.
*SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace*
- **csi.controllerExpandSecretRef.name** (string)
- Name is unique within a namespace to reference a secret resource.
+ name is unique within a namespace to reference a secret resource.
- **csi.controllerExpandSecretRef.namespace** (string)
- Namespace defines the space within which the secret name must be unique.
+ namespace defines the space within which the secret name must be unique.
- **csi.controllerPublishSecretRef** (SecretReference)
- ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.
+ controllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.
*SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace*
- **csi.controllerPublishSecretRef.name** (string)
- Name is unique within a namespace to reference a secret resource.
+ name is unique within a namespace to reference a secret resource.
- **csi.controllerPublishSecretRef.namespace** (string)
- Namespace defines the space within which the secret name must be unique.
+ namespace defines the space within which the secret name must be unique.
- **csi.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs".
+ fsType to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs".
- **csi.nodePublishSecretRef** (SecretReference)
- NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.
+ nodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.
*SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace*
- **csi.nodePublishSecretRef.name** (string)
- Name is unique within a namespace to reference a secret resource.
+ name is unique within a namespace to reference a secret resource.
- **csi.nodePublishSecretRef.namespace** (string)
- Namespace defines the space within which the secret name must be unique.
+ namespace defines the space within which the secret name must be unique.
- **csi.nodeStageSecretRef** (SecretReference)
- NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.
+ nodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.
*SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace*
- **csi.nodeStageSecretRef.name** (string)
- Name is unique within a namespace to reference a secret resource.
+ name is unique within a namespace to reference a secret resource.
- **csi.nodeStageSecretRef.namespace** (string)
- Namespace defines the space within which the secret name must be unique.
+ namespace defines the space within which the secret name must be unique.
- **csi.readOnly** (boolean)
- Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).
+ readOnly value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).
- **csi.volumeAttributes** (map[string]string)
- Attributes of the volume to publish.
+ volumeAttributes of the volume to publish.
- **fc** (FCVolumeSource)
- FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
+ fc represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
*Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.*
- **fc.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
- **fc.lun** (int32)
- Optional: FC target lun number
+ lun is Optional: FC target lun number
- **fc.readOnly** (boolean)
- Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly is Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **fc.targetWWNs** ([]string)
- Optional: FC target worldwide names (WWNs)
+ targetWWNs is Optional: FC target worldwide names (WWNs)
- **fc.wwids** ([]string)
- Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.
+ wwids Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.
- **flexVolume** (FlexPersistentVolumeSource)
- FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.
+ flexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.
*FlexPersistentVolumeSource represents a generic persistent volume resource that is provisioned/attached using an exec based plugin.*
- **flexVolume.driver** (string), required
- Driver is the name of the driver to use for this volume.
+ driver is the name of the driver to use for this volume.
- **flexVolume.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
+ fsType is the Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
- **flexVolume.options** (map[string]string)
- Optional: Extra command options if any.
+ options is Optional: this field holds extra command options if any.
- **flexVolume.readOnly** (boolean)
- Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly is Optional: defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **flexVolume.secretRef** (SecretReference)
- Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.
+ secretRef is Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.
*SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace*
- **flexVolume.secretRef.name** (string)
- Name is unique within a namespace to reference a secret resource.
+ name is unique within a namespace to reference a secret resource.
- **flexVolume.secretRef.namespace** (string)
- Namespace defines the space within which the secret name must be unique.
+ namespace defines the space within which the secret name must be unique.
- **flocker** (FlockerVolumeSource)
- Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running
+ flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running
*Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.*
- **flocker.datasetName** (string)
- Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated
+ datasetName is Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated
- **flocker.datasetUUID** (string)
- UUID of the dataset. This is unique identifier of a Flocker dataset
+ datasetUUID is the UUID of the dataset. This is unique identifier of a Flocker dataset
- **gcePersistentDisk** (GCEPersistentDiskVolumeSource)
- GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ gcePersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
*Represents a Persistent Disk resource in Google Compute Engine.
@@ -493,346 +490,346 @@ PersistentVolumeSpec is the specification of a persistent volume.
- **gcePersistentDisk.pdName** (string), required
- Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ pdName is unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
- **gcePersistentDisk.fsType** (string)
- Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ fsType is filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
- **gcePersistentDisk.partition** (int32)
- The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ partition is the partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
- **gcePersistentDisk.readOnly** (boolean)
- ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
- **glusterfs** (GlusterfsPersistentVolumeSource)
- Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://examples.k8s.io/volumes/glusterfs/README.md
+ glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://examples.k8s.io/volumes/glusterfs/README.md
*Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.*
- **glusterfs.endpoints** (string), required
- EndpointsName is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+ endpoints is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
- **glusterfs.path** (string), required
- Path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+ path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
- **glusterfs.endpointsNamespace** (string)
- EndpointsNamespace is the namespace that contains Glusterfs endpoint. If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+ endpointsNamespace is the namespace that contains Glusterfs endpoint. If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
- **glusterfs.readOnly** (boolean)
- ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+ readOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
- **iscsi** (ISCSIPersistentVolumeSource)
- ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.
+ iscsi represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.
*ISCSIPersistentVolumeSource represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.*
- **iscsi.iqn** (string), required
- Target iSCSI Qualified Name.
+ iqn is Target iSCSI Qualified Name.
- **iscsi.lun** (int32), required
- iSCSI Target Lun number.
+ lun is iSCSI Target Lun number.
- **iscsi.targetPortal** (string), required
- iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
+ targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
- **iscsi.chapAuthDiscovery** (boolean)
- whether support iSCSI Discovery CHAP authentication
+ chapAuthDiscovery defines whether support iSCSI Discovery CHAP authentication
- **iscsi.chapAuthSession** (boolean)
- whether support iSCSI Session CHAP authentication
+ chapAuthSession defines whether support iSCSI Session CHAP authentication
- **iscsi.fsType** (string)
- Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi
+ fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi
- **iscsi.initiatorName** (string)
- Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface \:\ will be created for the connection.
+ initiatorName is the custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface \:\ will be created for the connection.
- **iscsi.iscsiInterface** (string)
- iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).
+ iscsiInterface is the interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).
- **iscsi.portals** ([]string)
- iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
+ portals is the iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
- **iscsi.readOnly** (boolean)
- ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.
+ readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.
- **iscsi.secretRef** (SecretReference)
- CHAP Secret for iSCSI target and initiator authentication
+ secretRef is the CHAP Secret for iSCSI target and initiator authentication
*SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace*
- **iscsi.secretRef.name** (string)
- Name is unique within a namespace to reference a secret resource.
+ name is unique within a namespace to reference a secret resource.
- **iscsi.secretRef.namespace** (string)
- Namespace defines the space within which the secret name must be unique.
+ namespace defines the space within which the secret name must be unique.
- **nfs** (NFSVolumeSource)
- NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+ nfs represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
*Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.*
- **nfs.path** (string), required
- Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+ path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
- **nfs.server** (string), required
- Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+ server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
- **nfs.readOnly** (boolean)
- ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+ readOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
- **photonPersistentDisk** (PhotonPersistentDiskVolumeSource)
- PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
+ photonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
*Represents a Photon Controller persistent disk resource.*
- **photonPersistentDisk.pdID** (string), required
- ID that identifies Photon Controller persistent disk
+ pdID is the ID that identifies Photon Controller persistent disk
- **photonPersistentDisk.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
- **portworxVolume** (PortworxVolumeSource)
- PortworxVolume represents a portworx volume attached and mounted on kubelets host machine
+ portworxVolume represents a portworx volume attached and mounted on kubelets host machine
*PortworxVolumeSource represents a Portworx volume resource.*
- **portworxVolume.volumeID** (string), required
- VolumeID uniquely identifies a Portworx volume
+ volumeID uniquely identifies a Portworx volume
- **portworxVolume.fsType** (string)
- FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.
+ fSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.
- **portworxVolume.readOnly** (boolean)
- Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **quobyte** (QuobyteVolumeSource)
- Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
+ quobyte represents a Quobyte mount on the host that shares a pod's lifetime
*Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.*
- **quobyte.registry** (string), required
- Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes
+ registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes
- **quobyte.volume** (string), required
- Volume is a string that references an already created Quobyte volume by name.
+ volume is a string that references an already created Quobyte volume by name.
- **quobyte.group** (string)
- Group to map volume access to Default is no group
+ group to map volume access to Default is no group
- **quobyte.readOnly** (boolean)
- ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.
+ readOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.
- **quobyte.tenant** (string)
- Tenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin
+ tenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin
- **quobyte.user** (string)
- User to map volume access to Defaults to serivceaccount user
+ user to map volume access to Defaults to serivceaccount user
- **rbd** (RBDPersistentVolumeSource)
- RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md
+ rbd represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md
*Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.*
- **rbd.image** (string), required
- The rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ image is the rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **rbd.monitors** ([]string), required
- A collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ monitors is a collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **rbd.fsType** (string)
- Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd
+ fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd
- **rbd.keyring** (string)
- Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **rbd.pool** (string)
- The rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ pool is the rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **rbd.readOnly** (boolean)
- ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **rbd.secretRef** (SecretReference)
- SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ secretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
*SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace*
- **rbd.secretRef.name** (string)
- Name is unique within a namespace to reference a secret resource.
+ name is unique within a namespace to reference a secret resource.
- **rbd.secretRef.namespace** (string)
- Namespace defines the space within which the secret name must be unique.
+ namespace defines the space within which the secret name must be unique.
- **rbd.user** (string)
- The rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ user is the rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **scaleIO** (ScaleIOPersistentVolumeSource)
- ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
+ scaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
*ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume*
- **scaleIO.gateway** (string), required
- The host address of the ScaleIO API Gateway.
+ gateway is the host address of the ScaleIO API Gateway.
- **scaleIO.secretRef** (SecretReference), required
- SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.
+ secretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.
*SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace*
- **scaleIO.secretRef.name** (string)
- Name is unique within a namespace to reference a secret resource.
+ name is unique within a namespace to reference a secret resource.
- **scaleIO.secretRef.namespace** (string)
- Namespace defines the space within which the secret name must be unique.
+ namespace defines the space within which the secret name must be unique.
- **scaleIO.system** (string), required
- The name of the storage system as configured in ScaleIO.
+ system is the name of the storage system as configured in ScaleIO.
- **scaleIO.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Default is "xfs"
+ fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Default is "xfs"
- **scaleIO.protectionDomain** (string)
- The name of the ScaleIO Protection Domain for the configured storage.
+ protectionDomain is the name of the ScaleIO Protection Domain for the configured storage.
- **scaleIO.readOnly** (boolean)
- Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **scaleIO.sslEnabled** (boolean)
- Flag to enable/disable SSL communication with Gateway, default false
+ sslEnabled is the flag to enable/disable SSL communication with Gateway, default false
- **scaleIO.storageMode** (string)
- Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.
+ storageMode indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.
- **scaleIO.storagePool** (string)
- The ScaleIO Storage Pool associated with the protection domain.
+ storagePool is the ScaleIO Storage Pool associated with the protection domain.
- **scaleIO.volumeName** (string)
- The name of a volume already created in the ScaleIO system that is associated with this volume source.
+ volumeName is the name of a volume already created in the ScaleIO system that is associated with this volume source.
- **storageos** (StorageOSPersistentVolumeSource)
- StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://examples.k8s.io/volumes/storageos/README.md
+ storageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://examples.k8s.io/volumes/storageos/README.md
*Represents a StorageOS persistent volume resource.*
- **storageos.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
- **storageos.readOnly** (boolean)
- Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **storageos.secretRef** (}}">ObjectReference )
- SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.
+ secretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.
- **storageos.volumeName** (string)
- VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.
+ volumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.
- **storageos.volumeNamespace** (string)
- VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.
+ volumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.
- **vsphereVolume** (VsphereVirtualDiskVolumeSource)
- VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
+ vsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
*Represents a vSphere volume resource.*
- **vsphereVolume.volumePath** (string), required
- Path that identifies vSphere volume vmdk
+ volumePath is the path that identifies vSphere volume vmdk
- **vsphereVolume.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ fsType is filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
- **vsphereVolume.storagePolicyID** (string)
- Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.
+ storagePolicyID is the storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.
- **vsphereVolume.storagePolicyName** (string)
- Storage Policy Based Management (SPBM) profile name.
+ storagePolicyName is the storage Policy Based Management (SPBM) profile name.
@@ -844,22 +841,17 @@ PersistentVolumeStatus is the current status of a persistent volume.
- **message** (string)
- A human-readable message indicating details about why the volume is in this state.
+ message is a human-readable message indicating details about why the volume is in this state.
- **phase** (string)
- Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase
+ phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase
+
- Possible enum values:
- - `"Available"` used for PersistentVolumes that are not yet bound Available volumes are held by the binder and matched to PersistentVolumeClaims
- - `"Bound"` used for PersistentVolumes that are bound
- - `"Failed"` used for PersistentVolumes that failed to be correctly recycled or deleted after being released from a claim
- - `"Pending"` used for PersistentVolumes that are not available
- - `"Released"` used for PersistentVolumes where the bound PersistentVolumeClaim was deleted released volumes must be recycled before becoming available again this phase is used by the persistent volume claim binder to signal to another process to reclaim the resource
- **reason** (string)
- Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.
+ reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.
@@ -883,7 +875,7 @@ PersistentVolumeList is a list of PersistentVolume items.
- **items** ([]}}">PersistentVolume ), required
- List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes
+ items is a list of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes
diff --git a/content/en/docs/reference/kubernetes-api/config-and-storage-resources/volume.md b/content/en/docs/reference/kubernetes-api/config-and-storage-resources/volume.md
index 00bed4bd01..420c6701d5 100644
--- a/content/en/docs/reference/kubernetes-api/config-and-storage-resources/volume.md
+++ b/content/en/docs/reference/kubernetes-api/config-and-storage-resources/volume.md
@@ -34,7 +34,7 @@ Volume represents a named volume in a pod that may be accessed by any container
- **name** (string), required
- Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ name of the volume. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
@@ -43,25 +43,25 @@ Volume represents a named volume in a pod that may be accessed by any container
- **persistentVolumeClaim** (PersistentVolumeClaimVolumeSource)
- PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ persistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
*PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).*
- **persistentVolumeClaim.claimName** (string), required
- ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
+ claimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
- **persistentVolumeClaim.readOnly** (boolean)
- Will force the ReadOnly setting in VolumeMounts. Default false.
+ readOnly Will force the ReadOnly setting in VolumeMounts. Default false.
### Projections
- **configMap** (ConfigMapVolumeSource)
- ConfigMap represents a configMap that should populate this volume
+ configMap represents a configMap that should populate this volume
*Adapts a ConfigMap into a volume.
@@ -74,19 +74,19 @@ Volume represents a named volume in a pod that may be accessed by any container
- **configMap.optional** (boolean)
- Specify whether the ConfigMap or its keys must be defined
+ optional specify whether the ConfigMap or its keys must be defined
- **configMap.defaultMode** (int32)
- Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
+ defaultMode is optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
- **configMap.items** ([]}}">KeyToPath )
- If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.
+ items if unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.
- **secret** (SecretVolumeSource)
- Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
*Adapts a Secret into a volume.
@@ -95,23 +95,23 @@ Volume represents a named volume in a pod that may be accessed by any container
- **secret.secretName** (string)
- Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
+ secretName is the name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
- **secret.optional** (boolean)
- Specify whether the Secret or its keys must be defined
+ optional field specify whether the Secret or its keys must be defined
- **secret.defaultMode** (int32)
- Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
+ defaultMode is Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
- **secret.items** ([]}}">KeyToPath )
- If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.
+ items If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.
- **downwardAPI** (DownwardAPIVolumeSource)
- DownwardAPI represents downward API about the pod that should populate this volume
+ downwardAPI represents downward API about the pod that should populate this volume
*DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.*
@@ -126,25 +126,25 @@ Volume represents a named volume in a pod that may be accessed by any container
- **projected** (ProjectedVolumeSource)
- Items for all in one resources secrets, configmaps, and downward API
+ projected items for all in one resources secrets, configmaps, and downward API
*Represents a projected volume source*
- **projected.defaultMode** (int32)
- Mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
+ defaultMode are the mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
- **projected.sources** ([]VolumeProjection)
- list of volume projections
+ sources is the list of volume projections
*Projection that may be projected along with other supported volume types*
- **projected.sources.configMap** (ConfigMapProjection)
- information about the configMap data to project
+ configMap information about the configMap data to project
*Adapts a ConfigMap into a projected volume.
@@ -157,15 +157,15 @@ Volume represents a named volume in a pod that may be accessed by any container
- **projected.sources.configMap.optional** (boolean)
- Specify whether the ConfigMap or its keys must be defined
+ optional specify whether the ConfigMap or its keys must be defined
- **projected.sources.configMap.items** ([]}}">KeyToPath )
- If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.
+ items if unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.
- **projected.sources.downwardAPI** (DownwardAPIProjection)
- information about the downwardAPI data to project
+ downwardAPI information about the downwardAPI data to project
*Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.*
@@ -176,7 +176,7 @@ Volume represents a named volume in a pod that may be accessed by any container
- **projected.sources.secret** (SecretProjection)
- information about the secret data to project
+ secret information about the secret data to project
*Adapts a secret into a projected volume.
@@ -189,70 +189,70 @@ Volume represents a named volume in a pod that may be accessed by any container
- **projected.sources.secret.optional** (boolean)
- Specify whether the Secret or its key must be defined
+ optional field specify whether the Secret or its key must be defined
- **projected.sources.secret.items** ([]}}">KeyToPath )
- If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.
+ items if unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.
- **projected.sources.serviceAccountToken** (ServiceAccountTokenProjection)
- information about the serviceAccountToken data to project
+ serviceAccountToken is information about the serviceAccountToken data to project
*ServiceAccountTokenProjection represents a projected service account token volume. This projection can be used to insert a service account token into the pods runtime filesystem for use against APIs (Kubernetes API Server or otherwise).*
- **projected.sources.serviceAccountToken.path** (string), required
- Path is the path relative to the mount point of the file to project the token into.
+ path is the path relative to the mount point of the file to project the token into.
- **projected.sources.serviceAccountToken.audience** (string)
- Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.
+ audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.
- **projected.sources.serviceAccountToken.expirationSeconds** (int64)
- ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.
+ expirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.
### Local / Temporary Directory
- **emptyDir** (EmptyDirVolumeSource)
- EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
+ emptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
*Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.*
- **emptyDir.medium** (string)
- What type of storage medium should back this directory. The default is "" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
+ medium represents what type of storage medium should back this directory. The default is "" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
- **emptyDir.sizeLimit** (}}">Quantity )
- Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir
+ sizeLimit is the total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir
- **hostPath** (HostPathVolumeSource)
- HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
+ hostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
*Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.*
- **hostPath.path** (string), required
- Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
+ path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
- **hostPath.type** (string)
- Type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
+ type for HostPath Volume Defaults to "" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
### Persistent volumes
- **awsElasticBlockStore** (AWSElasticBlockStoreVolumeSource)
- AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+ awsElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
*Represents a Persistent Disk resource in AWS.
@@ -261,223 +261,223 @@ Volume represents a named volume in a pod that may be accessed by any container
- **awsElasticBlockStore.volumeID** (string), required
- Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+ volumeID is unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
- **awsElasticBlockStore.fsType** (string)
- Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+ fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
- **awsElasticBlockStore.partition** (int32)
- The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
+ partition is the partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).
- **awsElasticBlockStore.readOnly** (boolean)
- Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
+ readOnly value true will force the readOnly setting in VolumeMounts. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
- **azureDisk** (AzureDiskVolumeSource)
- AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
+ azureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
*AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.*
- **azureDisk.diskName** (string), required
- The Name of the data disk in the blob storage
+ diskName is the Name of the data disk in the blob storage
- **azureDisk.diskURI** (string), required
- The URI the data disk in the blob storage
+ diskURI is the URI of data disk in the blob storage
- **azureDisk.cachingMode** (string)
- Host Caching mode: None, Read Only, Read Write.
+ cachingMode is the Host Caching mode: None, Read Only, Read Write.
- **azureDisk.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ fsType is Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
- **azureDisk.kind** (string)
- Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared
+ kind expected values are Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared
- **azureDisk.readOnly** (boolean)
- Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **azureFile** (AzureFileVolumeSource)
- AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
+ azureFile represents an Azure File Service mount on the host and bind mount to the pod.
*AzureFile represents an Azure File Service mount on the host and bind mount to the pod.*
- **azureFile.secretName** (string), required
- the name of secret that contains Azure Storage Account Name and Key
+ secretName is the name of secret that contains Azure Storage Account Name and Key
- **azureFile.shareName** (string), required
- Share Name
+ shareName is the azure share Name
- **azureFile.readOnly** (boolean)
- Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **cephfs** (CephFSVolumeSource)
- CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
+ cephFS represents a Ceph FS mount on the host that shares a pod's lifetime
*Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.*
- **cephfs.monitors** ([]string), required
- Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ monitors is Required: Monitors is a collection of Ceph monitors More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
- **cephfs.path** (string)
- Optional: Used as the mounted root, rather than the full Ceph tree, default is /
+ path is Optional: Used as the mounted root, rather than the full Ceph tree, default is /
- **cephfs.readOnly** (boolean)
- Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ readOnly is Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
- **cephfs.secretFile** (string)
- Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ secretFile is Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
- **cephfs.secretRef** (}}">LocalObjectReference )
- Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ secretRef is Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
- **cephfs.user** (string)
- Optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
+ user is optional: User is the rados user name, default is admin More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
- **cinder** (CinderVolumeSource)
- Cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
+ cinder represents a cinder volume attached and mounted on kubelets host machine. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
*Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.*
- **cinder.volumeID** (string), required
- volume id used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
+ volumeID used to identify the volume in cinder. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
- **cinder.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
+ fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
- **cinder.readOnly** (boolean)
- Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
+ readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://examples.k8s.io/mysql-cinder-pd/README.md
- **cinder.secretRef** (}}">LocalObjectReference )
- Optional: points to a secret object containing parameters used to connect to OpenStack.
+ secretRef is optional: points to a secret object containing parameters used to connect to OpenStack.
- **csi** (CSIVolumeSource)
- CSI (Container Storage Interface) represents ephemeral storage that is handled by certain external CSI drivers (Beta feature).
+ csi (Container Storage Interface) represents ephemeral storage that is handled by certain external CSI drivers (Beta feature).
*Represents a source location of a volume to mount, managed by an external CSI driver*
- **csi.driver** (string), required
- Driver is the name of the CSI driver that handles this volume. Consult with your admin for the correct name as registered in the cluster.
+ driver is the name of the CSI driver that handles this volume. Consult with your admin for the correct name as registered in the cluster.
- **csi.fsType** (string)
- Filesystem type to mount. Ex. "ext4", "xfs", "ntfs". If not provided, the empty value is passed to the associated CSI driver which will determine the default filesystem to apply.
+ fsType to mount. Ex. "ext4", "xfs", "ntfs". If not provided, the empty value is passed to the associated CSI driver which will determine the default filesystem to apply.
- **csi.nodePublishSecretRef** (}}">LocalObjectReference )
- NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secret references are passed.
+ nodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secret references are passed.
- **csi.readOnly** (boolean)
- Specifies a read-only configuration for the volume. Defaults to false (read/write).
+ readOnly specifies a read-only configuration for the volume. Defaults to false (read/write).
- **csi.volumeAttributes** (map[string]string)
- VolumeAttributes stores driver-specific properties that are passed to the CSI driver. Consult your driver's documentation for supported values.
+ volumeAttributes stores driver-specific properties that are passed to the CSI driver. Consult your driver's documentation for supported values.
- **fc** (FCVolumeSource)
- FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
+ fc represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
*Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.*
- **fc.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
- **fc.lun** (int32)
- Optional: FC target lun number
+ lun is Optional: FC target lun number
- **fc.readOnly** (boolean)
- Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly is Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **fc.targetWWNs** ([]string)
- Optional: FC target worldwide names (WWNs)
+ targetWWNs is Optional: FC target worldwide names (WWNs)
- **fc.wwids** ([]string)
- Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.
+ wwids Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.
- **flexVolume** (FlexVolumeSource)
- FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.
+ flexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.
*FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.*
- **flexVolume.driver** (string), required
- Driver is the name of the driver to use for this volume.
+ driver is the name of the driver to use for this volume.
- **flexVolume.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
+ fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script.
- **flexVolume.options** (map[string]string)
- Optional: Extra command options if any.
+ options is Optional: this field holds extra command options if any.
- **flexVolume.readOnly** (boolean)
- Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly is Optional: defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **flexVolume.secretRef** (}}">LocalObjectReference )
- Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.
+ secretRef is Optional: secretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.
- **flocker** (FlockerVolumeSource)
- Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running
+ flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running
*Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.*
- **flocker.datasetName** (string)
- Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated
+ datasetName is Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated
- **flocker.datasetUUID** (string)
- UUID of the dataset. This is unique identifier of a Flocker dataset
+ datasetUUID is the UUID of the dataset. This is unique identifier of a Flocker dataset
- **gcePersistentDisk** (GCEPersistentDiskVolumeSource)
- GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ gcePersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
*Represents a Persistent Disk resource in Google Compute Engine.
@@ -486,316 +486,316 @@ Volume represents a named volume in a pod that may be accessed by any container
- **gcePersistentDisk.pdName** (string), required
- Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ pdName is unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
- **gcePersistentDisk.fsType** (string)
- Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ fsType is filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
- **gcePersistentDisk.partition** (int32)
- The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ partition is the partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
- **gcePersistentDisk.readOnly** (boolean)
- ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
+ readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
- **glusterfs** (GlusterfsVolumeSource)
- Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md
+ glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/glusterfs/README.md
*Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.*
- **glusterfs.endpoints** (string), required
- EndpointsName is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+ endpoints is the endpoint name that details Glusterfs topology. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
- **glusterfs.path** (string), required
- Path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+ path is the Glusterfs volume path. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
- **glusterfs.readOnly** (boolean)
- ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
+ readOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
- **iscsi** (ISCSIVolumeSource)
- ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md
+ iscsi represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://examples.k8s.io/volumes/iscsi/README.md
*Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.*
- **iscsi.iqn** (string), required
- Target iSCSI Qualified Name.
+ iqn is the target iSCSI Qualified Name.
- **iscsi.lun** (int32), required
- iSCSI Target Lun number.
+ lun represents iSCSI Target Lun number.
- **iscsi.targetPortal** (string), required
- iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
+ targetPortal is iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
- **iscsi.chapAuthDiscovery** (boolean)
- whether support iSCSI Discovery CHAP authentication
+ chapAuthDiscovery defines whether support iSCSI Discovery CHAP authentication
- **iscsi.chapAuthSession** (boolean)
- whether support iSCSI Session CHAP authentication
+ chapAuthSession defines whether support iSCSI Session CHAP authentication
- **iscsi.fsType** (string)
- Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi
+ fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi
- **iscsi.initiatorName** (string)
- Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface \:\ will be created for the connection.
+ initiatorName is the custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface \:\ will be created for the connection.
- **iscsi.iscsiInterface** (string)
- iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).
+ iscsiInterface is the interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).
- **iscsi.portals** ([]string)
- iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
+ portals is the iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).
- **iscsi.readOnly** (boolean)
- ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.
+ readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.
- **iscsi.secretRef** (}}">LocalObjectReference )
- CHAP Secret for iSCSI target and initiator authentication
+ secretRef is the CHAP Secret for iSCSI target and initiator authentication
- **nfs** (NFSVolumeSource)
- NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+ nfs represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
*Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.*
- **nfs.path** (string), required
- Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+ path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
- **nfs.server** (string), required
- Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+ server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
- **nfs.readOnly** (boolean)
- ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
+ readOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
- **photonPersistentDisk** (PhotonPersistentDiskVolumeSource)
- PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
+ photonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
*Represents a Photon Controller persistent disk resource.*
- **photonPersistentDisk.pdID** (string), required
- ID that identifies Photon Controller persistent disk
+ pdID is the ID that identifies Photon Controller persistent disk
- **photonPersistentDisk.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
- **portworxVolume** (PortworxVolumeSource)
- PortworxVolume represents a portworx volume attached and mounted on kubelets host machine
+ portworxVolume represents a portworx volume attached and mounted on kubelets host machine
*PortworxVolumeSource represents a Portworx volume resource.*
- **portworxVolume.volumeID** (string), required
- VolumeID uniquely identifies a Portworx volume
+ volumeID uniquely identifies a Portworx volume
- **portworxVolume.fsType** (string)
- FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.
+ fSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.
- **portworxVolume.readOnly** (boolean)
- Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **quobyte** (QuobyteVolumeSource)
- Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
+ quobyte represents a Quobyte mount on the host that shares a pod's lifetime
*Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.*
- **quobyte.registry** (string), required
- Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes
+ registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes
- **quobyte.volume** (string), required
- Volume is a string that references an already created Quobyte volume by name.
+ volume is a string that references an already created Quobyte volume by name.
- **quobyte.group** (string)
- Group to map volume access to Default is no group
+ group to map volume access to Default is no group
- **quobyte.readOnly** (boolean)
- ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.
+ readOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.
- **quobyte.tenant** (string)
- Tenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin
+ tenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin
- **quobyte.user** (string)
- User to map volume access to Defaults to serivceaccount user
+ user to map volume access to Defaults to serivceaccount user
- **rbd** (RBDVolumeSource)
- RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md
+ rbd represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://examples.k8s.io/volumes/rbd/README.md
*Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.*
- **rbd.image** (string), required
- The rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ image is the rados image name. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **rbd.monitors** ([]string), required
- A collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ monitors is a collection of Ceph monitors. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **rbd.fsType** (string)
- Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd
+ fsType is the filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd
- **rbd.keyring** (string)
- Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **rbd.pool** (string)
- The rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ pool is the rados pool name. Default is rbd. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **rbd.readOnly** (boolean)
- ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ readOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **rbd.secretRef** (}}">LocalObjectReference )
- SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ secretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **rbd.user** (string)
- The rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
+ user is the rados user name. Default is admin. More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
- **scaleIO** (ScaleIOVolumeSource)
- ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
+ scaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
*ScaleIOVolumeSource represents a persistent ScaleIO volume*
- **scaleIO.gateway** (string), required
- The host address of the ScaleIO API Gateway.
+ gateway is the host address of the ScaleIO API Gateway.
- **scaleIO.secretRef** (}}">LocalObjectReference ), required
- SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.
+ secretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.
- **scaleIO.system** (string), required
- The name of the storage system as configured in ScaleIO.
+ system is the name of the storage system as configured in ScaleIO.
- **scaleIO.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Default is "xfs".
+ fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Default is "xfs".
- **scaleIO.protectionDomain** (string)
- The name of the ScaleIO Protection Domain for the configured storage.
+ protectionDomain is the name of the ScaleIO Protection Domain for the configured storage.
- **scaleIO.readOnly** (boolean)
- Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **scaleIO.sslEnabled** (boolean)
- Flag to enable/disable SSL communication with Gateway, default false
+ sslEnabled Flag enable/disable SSL communication with Gateway, default false
- **scaleIO.storageMode** (string)
- Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.
+ storageMode indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.
- **scaleIO.storagePool** (string)
- The ScaleIO Storage Pool associated with the protection domain.
+ storagePool is the ScaleIO Storage Pool associated with the protection domain.
- **scaleIO.volumeName** (string)
- The name of a volume already created in the ScaleIO system that is associated with this volume source.
+ volumeName is the name of a volume already created in the ScaleIO system that is associated with this volume source.
- **storageos** (StorageOSVolumeSource)
- StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.
+ storageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.
*Represents a StorageOS persistent volume resource.*
- **storageos.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ fsType is the filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
- **storageos.readOnly** (boolean)
- Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
+ readOnly defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.
- **storageos.secretRef** (}}">LocalObjectReference )
- SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.
+ secretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.
- **storageos.volumeName** (string)
- VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.
+ volumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.
- **storageos.volumeNamespace** (string)
- VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.
+ volumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to "default" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.
- **vsphereVolume** (VsphereVirtualDiskVolumeSource)
- VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
+ vsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
*Represents a vSphere volume resource.*
- **vsphereVolume.volumePath** (string), required
- Path that identifies vSphere volume vmdk
+ volumePath is the path that identifies vSphere volume vmdk
- **vsphereVolume.fsType** (string)
- Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
+ fsType is filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
- **vsphereVolume.storagePolicyID** (string)
- Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.
+ storagePolicyID is the storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.
- **vsphereVolume.storagePolicyName** (string)
- Storage Policy Based Management (SPBM) profile name.
+ storagePolicyName is the storage Policy Based Management (SPBM) profile name.
### Alpha level
- **ephemeral** (EphemeralVolumeSource)
- Ephemeral represents a volume that is handled by a cluster storage driver. The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, and deleted when the pod is removed.
+ ephemeral represents a volume that is handled by a cluster storage driver. The volume's lifecycle is tied to the pod that defines it - it will be created before the pod starts, and deleted when the pod is removed.
Use this if: a) the volume is only needed while the pod runs, b) features of normal volumes like restoring from snapshot or capacity
tracking are needed,
@@ -839,7 +839,7 @@ Volume represents a named volume in a pod that may be accessed by any container
- **gitRepo** (GitRepoVolumeSource)
- GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.
+ gitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.
*Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.
@@ -848,15 +848,15 @@ Volume represents a named volume in a pod that may be accessed by any container
- **gitRepo.repository** (string), required
- Repository URL
+ repository is the URL
- **gitRepo.directory** (string)
- Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.
+ directory is the target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.
- **gitRepo.revision** (string)
- Commit hash for the specified revision.
+ revision is the commit hash for the specified revision.
@@ -894,15 +894,15 @@ Maps a string key to a path within a volume.
- **key** (string), required
- The key to project.
+ key is the key to project.
- **path** (string), required
- The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.
+ path is the relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.
- **mode** (int32)
- Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
+ mode is Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.
diff --git a/content/en/docs/reference/kubernetes-api/policy-resources/limit-range-v1.md b/content/en/docs/reference/kubernetes-api/policy-resources/limit-range-v1.md
index caf5febdb5..3be570cfb0 100644
--- a/content/en/docs/reference/kubernetes-api/policy-resources/limit-range-v1.md
+++ b/content/en/docs/reference/kubernetes-api/policy-resources/limit-range-v1.md
@@ -66,11 +66,6 @@ LimitRangeSpec defines a min/max usage limit for resources that match on kind.
- **limits.type** (string), required
Type of resource that this limit applies to.
-
- Possible enum values:
- - `"Container"` Limit that applies to all containers in a namespace
- - `"PersistentVolumeClaim"` Limit that applies to all persistent volume claims in a namespace
- - `"Pod"` Limit that applies to all pods in a namespace
- **limits.default** (map[string]}}">Quantity )
diff --git a/content/en/docs/reference/kubernetes-api/policy-resources/network-policy-v1.md b/content/en/docs/reference/kubernetes-api/policy-resources/network-policy-v1.md
index 0dedc9e6e5..5236b927c8 100644
--- a/content/en/docs/reference/kubernetes-api/policy-resources/network-policy-v1.md
+++ b/content/en/docs/reference/kubernetes-api/policy-resources/network-policy-v1.md
@@ -46,6 +46,10 @@ NetworkPolicy describes what network traffic is allowed for a set of Pods
Specification of the desired behavior for this NetworkPolicy.
+- **status** (}}">NetworkPolicyStatus )
+
+ Status is the current state of the NetworkPolicy. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+
@@ -194,6 +198,54 @@ NetworkPolicySpec provides the specification of a NetworkPolicy
+## NetworkPolicyStatus {#NetworkPolicyStatus}
+
+NetworkPolicyStatus describe the current state of the NetworkPolicy.
+
+
+
+- **conditions** ([]Condition)
+
+ *Patch strategy: merge on key `type`*
+
+ *Map: unique values on key type will be kept during a merge*
+
+ Conditions holds an array of metav1.Condition that describe the state of the NetworkPolicy. Current service state
+
+
+ *Condition contains details for one aspect of the current state of this API Resource.*
+
+ - **conditions.lastTransitionTime** (Time), required
+
+ lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
+
+
+ *Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.*
+
+ - **conditions.message** (string), required
+
+ message is a human readable message indicating details about the transition. This may be an empty string.
+
+ - **conditions.reason** (string), required
+
+ reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.
+
+ - **conditions.status** (string), required
+
+ status of the condition, one of True, False, Unknown.
+
+ - **conditions.type** (string), required
+
+ type of condition in CamelCase or in foo.example.com/CamelCase.
+
+ - **conditions.observedGeneration** (int64)
+
+ observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.
+
+
+
+
+
## NetworkPolicyList {#NetworkPolicyList}
NetworkPolicyList is a list of NetworkPolicy objects.
@@ -254,6 +306,39 @@ GET /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}
+#### Response
+
+
+200 (}}">NetworkPolicy ): OK
+
+401: Unauthorized
+
+
+### `get` read status of the specified NetworkPolicy
+
+#### HTTP Request
+
+GET /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}/status
+
+#### Parameters
+
+
+- **name** (*in path*): string, required
+
+ name of the NetworkPolicy
+
+
+- **namespace** (*in path*): string, required
+
+ }}">namespace
+
+
+- **pretty** (*in query*): string
+
+ }}">pretty
+
+
+
#### Response
@@ -479,6 +564,61 @@ PUT /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}
+- **dryRun** (*in query*): string
+
+ }}">dryRun
+
+
+- **fieldManager** (*in query*): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (*in query*): string
+
+ }}">fieldValidation
+
+
+- **pretty** (*in query*): string
+
+ }}">pretty
+
+
+
+#### Response
+
+
+200 (}}">NetworkPolicy ): OK
+
+201 (}}">NetworkPolicy ): Created
+
+401: Unauthorized
+
+
+### `update` replace status of the specified NetworkPolicy
+
+#### HTTP Request
+
+PUT /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}/status
+
+#### Parameters
+
+
+- **name** (*in path*): string, required
+
+ name of the NetworkPolicy
+
+
+- **namespace** (*in path*): string, required
+
+ }}">namespace
+
+
+- **body**: }}">NetworkPolicy , required
+
+
+
+
- **dryRun** (*in query*): string
}}">dryRun
@@ -534,6 +674,66 @@ PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}
+- **dryRun** (*in query*): string
+
+ }}">dryRun
+
+
+- **fieldManager** (*in query*): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (*in query*): string
+
+ }}">fieldValidation
+
+
+- **force** (*in query*): boolean
+
+ }}">force
+
+
+- **pretty** (*in query*): string
+
+ }}">pretty
+
+
+
+#### Response
+
+
+200 (}}">NetworkPolicy ): OK
+
+201 (}}">NetworkPolicy ): Created
+
+401: Unauthorized
+
+
+### `patch` partially update status of the specified NetworkPolicy
+
+#### HTTP Request
+
+PATCH /apis/networking.k8s.io/v1/namespaces/{namespace}/networkpolicies/{name}/status
+
+#### Parameters
+
+
+- **name** (*in path*): string, required
+
+ name of the NetworkPolicy
+
+
+- **namespace** (*in path*): string, required
+
+ }}">namespace
+
+
+- **body**: }}">Patch , required
+
+
+
+
- **dryRun** (*in query*): string
}}">dryRun
diff --git a/content/en/docs/reference/kubernetes-api/policy-resources/resource-quota-v1.md b/content/en/docs/reference/kubernetes-api/policy-resources/resource-quota-v1.md
index 6952ebed86..4675db7475 100644
--- a/content/en/docs/reference/kubernetes-api/policy-resources/resource-quota-v1.md
+++ b/content/en/docs/reference/kubernetes-api/policy-resources/resource-quota-v1.md
@@ -82,23 +82,13 @@ ResourceQuotaSpec defines the desired hard limits to enforce for Quota.
Represents a scope's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist.
- Possible enum values:
- - `"DoesNotExist"`
- - `"Exists"`
- - `"In"`
- - `"NotIn"`
+
- **scopeSelector.matchExpressions.scopeName** (string), required
The name of the scope that the selector applies to.
- Possible enum values:
- - `"BestEffort"` Match all pod objects that have best effort quality of service
- - `"CrossNamespacePodAffinity"` Match all pod objects that have cross-namespace pod (anti)affinity mentioned. This is a beta feature enabled by the PodAffinityNamespaceSelector feature flag.
- - `"NotBestEffort"` Match all pod objects that do not have best effort quality of service
- - `"NotTerminating"` Match all pod objects where spec.activeDeadlineSeconds is nil
- - `"PriorityClass"` Match all pod objects that have priority class mentioned
- - `"Terminating"` Match all pod objects where spec.activeDeadlineSeconds >=0
+
- **scopeSelector.matchExpressions.values** ([]string)
diff --git a/content/en/docs/reference/kubernetes-api/service-resources/endpoint-slice-v1.md b/content/en/docs/reference/kubernetes-api/service-resources/endpoint-slice-v1.md
index de1ea073e3..f3f956221f 100644
--- a/content/en/docs/reference/kubernetes-api/service-resources/endpoint-slice-v1.md
+++ b/content/en/docs/reference/kubernetes-api/service-resources/endpoint-slice-v1.md
@@ -46,10 +46,7 @@ EndpointSlice represents a subset of the endpoints that implement a service. For
addressType specifies the type of address carried by this EndpointSlice. All addresses in this slice must be the same type. This field is immutable after creation. The following address types are currently supported: * IPv4: Represents an IPv4 Address. * IPv6: Represents an IPv6 Address. * FQDN: Represents a Fully Qualified Domain Name.
- Possible enum values:
- - `"FQDN"` represents a FQDN.
- - `"IPv4"` represents an IPv4 Address.
- - `"IPv6"` represents an IPv6 Address.
+
- **endpoints** ([]Endpoint), required
@@ -64,7 +61,7 @@ EndpointSlice represents a subset of the endpoints that implement a service. For
*Set: unique values will be kept during a merge*
- addresses of this endpoint. The contents of this field are interpreted according to the corresponding EndpointSlice addressType field. Consumers must handle different types of addresses in the context of their own capabilities. This must contain at least one address but no more than 100.
+ addresses of this endpoint. The contents of this field are interpreted according to the corresponding EndpointSlice addressType field. Consumers must handle different types of addresses in the context of their own capabilities. This must contain at least one address but no more than 100. These are all assumed to be fungible and clients may choose to only use the first element. Refer to: https://issue.k8s.io/106267
- **endpoints.conditions** (EndpointConditions)
@@ -148,7 +145,7 @@ EndpointSlice represents a subset of the endpoints that implement a service. For
- **ports.appProtocol** (string)
- The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.
+ The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.
diff --git a/content/en/docs/reference/kubernetes-api/service-resources/endpoints-v1.md b/content/en/docs/reference/kubernetes-api/service-resources/endpoints-v1.md
index 76f0f0b70f..73a1290c76 100644
--- a/content/en/docs/reference/kubernetes-api/service-resources/endpoints-v1.md
+++ b/content/en/docs/reference/kubernetes-api/service-resources/endpoints-v1.md
@@ -128,10 +128,7 @@ Endpoints is a collection of endpoints that implement the actual service. Exampl
The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.
- Possible enum values:
- - `"SCTP"` is the SCTP protocol.
- - `"TCP"` is the TCP protocol.
- - `"UDP"` is the UDP protocol.
+
- **subsets.ports.name** (string)
@@ -139,7 +136,7 @@ Endpoints is a collection of endpoints that implement the actual service. Exampl
- **subsets.ports.appProtocol** (string)
- The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.
+ The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.
diff --git a/content/en/docs/reference/kubernetes-api/service-resources/ingress-v1.md b/content/en/docs/reference/kubernetes-api/service-resources/ingress-v1.md
index a2cf98a20a..5a8bb7fd8e 100644
--- a/content/en/docs/reference/kubernetes-api/service-resources/ingress-v1.md
+++ b/content/en/docs/reference/kubernetes-api/service-resources/ingress-v1.md
@@ -109,16 +109,14 @@ IngressSpec describes the Ingress the user wishes to exist.
- **rules.http.paths.pathType** (string), required
- PathType determines the interpretation of the Path matching. PathType can be one of the following enum values:
- - `"Exact"` Matches the URL path exactly.
- - `"Prefix"` Matches based on a URL path prefix split by '/'. Matching is
+ PathType determines the interpretation of the Path matching. PathType can be one of the following values: * Exact: Matches the URL path exactly. * Prefix: Matches based on a URL path prefix split by '/'. Matching is
done on a path element by element basis. A path element refers is the
list of labels in the path split by the '/' separator. A request is a
match for path p if every p is an element-wise prefix of p of the
request path. Note that if the last element of the path is a substring
of the last element in request path, it is not a match (e.g. /foo/bar
matches /foo/bar/baz, but does not match /foo/barbaz).
- - `"ImplementationSpecific"` Interpretation of the Path matching is up to
+ * ImplementationSpecific: Interpretation of the Path matching is up to
the IngressClass. Implementations can treat this as a separate PathType
or treat it identically to Prefix or Exact path types.
Implementations are required to support all path types.
@@ -235,10 +233,7 @@ IngressStatus describe the current state of the Ingress.
Protocol is the protocol of the service port of which status is recorded here The supported values are: "TCP", "UDP", "SCTP"
- Possible enum values:
- - `"SCTP"` is the SCTP protocol.
- - `"TCP"` is the TCP protocol.
- - `"UDP"` is the UDP protocol.
+
- **loadBalancer.ingress.ports.error** (string)
diff --git a/content/en/docs/reference/kubernetes-api/service-resources/service-v1.md b/content/en/docs/reference/kubernetes-api/service-resources/service-v1.md
index b937bc1484..49b230dd2f 100644
--- a/content/en/docs/reference/kubernetes-api/service-resources/service-v1.md
+++ b/content/en/docs/reference/kubernetes-api/service-resources/service-v1.md
@@ -90,10 +90,7 @@ ServiceSpec describes the attributes that a user creates on a service.
The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". Default is TCP.
- Possible enum values:
- - `"SCTP"` is the SCTP protocol.
- - `"TCP"` is the TCP protocol.
- - `"UDP"` is the UDP protocol.
+
- **ports.name** (string)
@@ -105,17 +102,13 @@ ServiceSpec describes the attributes that a user creates on a service.
- **ports.appProtocol** (string)
- The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.
+ The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and https://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol.
- **type** (string)
type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. "ClusterIP" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object or EndpointSlice objects. If clusterIP is "None", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a virtual IP. "NodePort" builds on ClusterIP and allocates a port on every node which routes to the same endpoints as the clusterIP. "LoadBalancer" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the same endpoints as the clusterIP. "ExternalName" aliases this service to the specified externalName. Several other fields do not apply to ExternalName services. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
- Possible enum values:
- - `"ClusterIP"` means a service will only be accessible inside the cluster, via the cluster IP.
- - `"ExternalName"` means a service consists of only a reference to an external name that kubedns or equivalent will return as a CNAME record, with no exposing or proxying of any pods involved.
- - `"LoadBalancer"` means a service will be exposed via an external load balancer (if the cloud provider supports it), in addition to 'NodePort' type.
- - `"NodePort"` means a service will be exposed on one port of every node, in addition to 'ClusterIP' type.
+
- **ipFamilies** ([]string)
@@ -149,13 +142,11 @@ ServiceSpec describes the attributes that a user creates on a service.
Supports "ClientIP" and "None". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
- Possible enum values:
- - `"ClientIP"` is the Client IP based.
- - `"None"` - no session affinity.
+
- **loadBalancerIP** (string)
- Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.
+ Only applies to Service Type: LoadBalancer. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature. Deprecated: This field was under-specified and its meaning varies across implementations, and it cannot support dual-stack. As of Kubernetes v1.24, users are encouraged to use implementation-specific annotations when available. This field may be removed in a future API version.
- **loadBalancerSourceRanges** ([]string)
@@ -173,9 +164,7 @@ ServiceSpec describes the attributes that a user creates on a service.
externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. "Local" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. "Cluster" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.
- Possible enum values:
- - `"Cluster"` specifies node-global (legacy) behavior.
- - `"Local"` specifies node-local endpoints behavior.
+
- **internalTrafficPolicy** (string)
@@ -209,7 +198,7 @@ ServiceSpec describes the attributes that a user creates on a service.
- **allocateLoadBalancerNodePorts** (boolean)
- allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is "true". It may be set to "false" if the cluster load-balancer does not rely on NodePorts. If the caller requests specific NodePorts (by specifying a value), those requests will be respected, regardless of this field. This field may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type. This field is beta-level and is only honored by servers that enable the ServiceLBNodePortControl feature.
+ allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is "true". It may be set to "false" if the cluster load-balancer does not rely on NodePorts. If the caller requests specific NodePorts (by specifying a value), those requests will be respected, regardless of this field. This field may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type.
@@ -298,10 +287,7 @@ ServiceStatus represents the current status of a service.
Protocol is the protocol of the service port of which status is recorded here The supported values are: "TCP", "UDP", "SCTP"
- Possible enum values:
- - `"SCTP"` is the SCTP protocol.
- - `"TCP"` is the TCP protocol.
- - `"UDP"` is the UDP protocol.
+
- **loadBalancer.ingress.ports.error** (string)
diff --git a/content/en/docs/reference/kubernetes-api/workload-resources/cron-job-v1.md b/content/en/docs/reference/kubernetes-api/workload-resources/cron-job-v1.md
index 7219be2809..3f08903481 100644
--- a/content/en/docs/reference/kubernetes-api/workload-resources/cron-job-v1.md
+++ b/content/en/docs/reference/kubernetes-api/workload-resources/cron-job-v1.md
@@ -79,14 +79,15 @@ CronJobSpec describes how the job execution will look like and when it will actu
The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.
+- **timeZone** (string)
+
+ The time zone for the given schedule, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones. If not specified, this will rely on the time zone of the kube-controller-manager process. ALPHA: This field is in alpha and must be enabled via the `CronJobTimeZone` feature gate.
+
- **concurrencyPolicy** (string)
Specifies how to treat concurrent executions of a Job. Valid values are: - "Allow" (default): allows CronJobs to run concurrently; - "Forbid": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - "Replace": cancels currently running job and replaces it with a new one
- Possible enum values:
- - `"Allow"` allows CronJobs to run concurrently.
- - `"Forbid"` forbids concurrent runs, skipping next run if previous hasn't finished yet.
- - `"Replace"` cancels currently running job and replaces it with a new one.
+
- **startingDeadlineSeconds** (int64)
diff --git a/content/en/docs/reference/kubernetes-api/workload-resources/daemon-set-v1.md b/content/en/docs/reference/kubernetes-api/workload-resources/daemon-set-v1.md
index 555b7217fd..ca18671c2f 100644
--- a/content/en/docs/reference/kubernetes-api/workload-resources/daemon-set-v1.md
+++ b/content/en/docs/reference/kubernetes-api/workload-resources/daemon-set-v1.md
@@ -83,9 +83,7 @@ DaemonSetSpec is the specification of a daemon set.
Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is RollingUpdate.
- Possible enum values:
- - `"OnDelete"` Replace the old daemons only when it's killed
- - `"RollingUpdate"` Replace the old daemons by new ones using rolling update i.e replace them on each node one after the other.
+
- **updateStrategy.rollingUpdate** (RollingUpdateDaemonSet)
diff --git a/content/en/docs/reference/kubernetes-api/workload-resources/deployment-v1.md b/content/en/docs/reference/kubernetes-api/workload-resources/deployment-v1.md
index 60fc28f4a5..1a409e11e7 100644
--- a/content/en/docs/reference/kubernetes-api/workload-resources/deployment-v1.md
+++ b/content/en/docs/reference/kubernetes-api/workload-resources/deployment-v1.md
@@ -89,9 +89,7 @@ DeploymentSpec is the specification of the desired behavior of the Deployment.
Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.
- Possible enum values:
- - `"Recreate"` Kill all existing pods before creating new ones.
- - `"RollingUpdate"` Replace the old ReplicaSets by new one using rolling update i.e gradually scale down the old ReplicaSets and scale up the new one.
+
- **strategy.rollingUpdate** (RollingUpdateDeployment)
diff --git a/content/en/docs/reference/kubernetes-api/workload-resources/job-v1.md b/content/en/docs/reference/kubernetes-api/workload-resources/job-v1.md
index eea384cdf9..e79d7ba8f0 100644
--- a/content/en/docs/reference/kubernetes-api/workload-resources/job-v1.md
+++ b/content/en/docs/reference/kubernetes-api/workload-resources/job-v1.md
@@ -88,7 +88,7 @@ JobSpec describes how the job execution will look like.
`Indexed` means that the Pods of a Job get an associated completion index from 0 to (.spec.completions - 1), available in the annotation batch.kubernetes.io/job-completion-index. The Job is considered complete when there is one successfully completed Pod for each index. When value is `Indexed`, .spec.completions must be specified and `.spec.parallelism` must be less than or equal to 10^5. In addition, The Pod name takes the form `$(job-name)-$(index)-$(random-string)`, the Pod hostname takes the form `$(job-name)-$(index)`.
- This field is beta-level. More completion modes can be added in the future. If the Job controller observes a mode that it doesn't recognize, the controller skips updates for the Job.
+ More completion modes can be added in the future. If the Job controller observes a mode that it doesn't recognize, which is possible during upgrades due to version skew, the controller skips updates for the Job.
- **backoffLimit** (int32)
@@ -105,8 +105,6 @@ JobSpec describes how the job execution will look like.
- **suspend** (boolean)
Suspend specifies whether the Job controller should create Pods or not. If a Job is created with suspend set to true, no Pods are created by the Job controller. If a Job is suspended after creation (i.e. the flag goes from false to true), the Job controller will delete all active Pods associated with this Job. Users must design their workload to gracefully handle this. Suspending a Job will reset the StartTime field of the Job, effectively resetting the ActiveDeadlineSeconds timer too. Defaults to false.
-
- This field is beta-level, gated by SuspendJob feature flag (enabled by default).
### Selector
@@ -175,11 +173,6 @@ JobStatus represents the current state of a Job.
- **conditions.type** (string), required
Type of job condition, Complete or Failed.
-
- Possible enum values:
- - `"Complete"` means the job has completed its execution.
- - `"Failed"` means the job has failed its execution.
- - `"Suspended"` means the job has been suspended.
- **conditions.lastProbeTime** (Time)
@@ -236,7 +229,7 @@ JobStatus represents the current state of a Job.
The number of pods which have a Ready condition.
- This field is alpha-level. The job controller populates the field when the feature gate JobReadyPods is enabled (disabled by default).
+ This field is beta-level. The job controller populates the field when the feature gate JobReadyPods is enabled (enabled by default).
diff --git a/content/en/docs/reference/kubernetes-api/workload-resources/pod-v1.md b/content/en/docs/reference/kubernetes-api/workload-resources/pod-v1.md
index 3b8bab7b3a..dbcc8f889e 100644
--- a/content/en/docs/reference/kubernetes-api/workload-resources/pod-v1.md
+++ b/content/en/docs/reference/kubernetes-api/workload-resources/pod-v1.md
@@ -81,7 +81,7 @@ PodSpec is a description of a pod.
*Patch strategy: merge on key `name`*
- ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod
+ ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod
- **enableServiceLinks** (boolean)
@@ -93,7 +93,7 @@ PodSpec is a description of a pod.
If the OS field is set to linux, the following fields must be unset: -securityContext.windowsOptions
- If the OS field is set to windows, following fields must be unset: - spec.hostPID - spec.hostIPC - spec.securityContext.seLinuxOptions - spec.securityContext.seccompProfile - spec.securityContext.fsGroup - spec.securityContext.fsGroupChangePolicy - spec.securityContext.sysctls - spec.shareProcessNamespace - spec.securityContext.runAsUser - spec.securityContext.runAsGroup - spec.securityContext.supplementalGroups - spec.containers[*].securityContext.seLinuxOptions - spec.containers[*].securityContext.seccompProfile - spec.containers[*].securityContext.capabilities - spec.containers[*].securityContext.readOnlyRootFilesystem - spec.containers[*].securityContext.privileged - spec.containers[*].securityContext.allowPrivilegeEscalation - spec.containers[*].securityContext.procMount - spec.containers[*].securityContext.runAsUser - spec.containers[*].securityContext.runAsGroup This is an alpha field and requires the IdentifyPodOS feature
+ If the OS field is set to windows, following fields must be unset: - spec.hostPID - spec.hostIPC - spec.securityContext.seLinuxOptions - spec.securityContext.seccompProfile - spec.securityContext.fsGroup - spec.securityContext.fsGroupChangePolicy - spec.securityContext.sysctls - spec.shareProcessNamespace - spec.securityContext.runAsUser - spec.securityContext.runAsGroup - spec.securityContext.supplementalGroups - spec.containers[*].securityContext.seLinuxOptions - spec.containers[*].securityContext.seccompProfile - spec.containers[*].securityContext.capabilities - spec.containers[*].securityContext.readOnlyRootFilesystem - spec.containers[*].securityContext.privileged - spec.containers[*].securityContext.allowPrivilegeEscalation - spec.containers[*].securityContext.procMount - spec.containers[*].securityContext.runAsUser - spec.containers[*].securityContext.runAsGroup This is a beta field and requires the IdentifyPodOS feature
*PodOS defines the OS parameters of a pod.*
@@ -156,9 +156,7 @@ PodSpec is a description of a pod.
Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.
- Possible enum values:
- - `"Equal"`
- - `"Exists"`
+
- **tolerations.value** (string)
@@ -168,10 +166,7 @@ PodSpec is a description of a pod.
Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
- Possible enum values:
- - `"NoExecute"` Evict any already-running pods that do not tolerate the taint. Currently enforced by NodeController.
- - `"NoSchedule"` Do not allow new pods to schedule onto the node unless they tolerate the taint, but allow all pods submitted to Kubelet without going through the scheduler to start, and allow all already-running pods to continue running. Enforced by the scheduler.
- - `"PreferNoSchedule"` Like TaintEffectNoSchedule, but the scheduler tries not to schedule new pods onto the node, rather than prohibiting new pods from scheduling onto the node entirely. Enforced by the scheduler.
+
- **tolerations.tolerationSeconds** (int64)
@@ -183,7 +178,7 @@ PodSpec is a description of a pod.
- **runtimeClassName** (string)
- RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class This is a beta feature as of Kubernetes v1.14.
+ RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/585-runtime-class
- **priorityClassName** (string)
@@ -206,11 +201,11 @@ PodSpec is a description of a pod.
- **topologySpreadConstraints.maxSkew** (int32), required
- MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.
+ MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. The global minimum is the minimum number of matching pods in an eligible domain or zero if the number of eligible domains is less than MinDomains. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 2/2/1: In this case, the global minimum is 1. | zone1 | zone2 | zone3 | | P P | P P | P | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 2/2/2; scheduling it onto zone1(zone2) would make the ActualSkew(3-1) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.
- **topologySpreadConstraints.topologyKey** (string), required
- TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \ as a "bucket", and try to put balanced number of pods into each bucket. It's a required field.
+ TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \ as a "bucket", and try to put balanced number of pods into each bucket. We define a domain as a particular instance of a topology. Also, we define an eligible domain as a domain whose nodes match the node selector. e.g. If TopologyKey is "kubernetes.io/hostname", each Node is a domain of that topology. And, if TopologyKey is "topology.kubernetes.io/zone", each zone is a domain of that topology. It's a required field.
- **topologySpreadConstraints.whenUnsatisfiable** (string), required
@@ -219,14 +214,20 @@ PodSpec is a description of a pod.
skew.
A constraint is considered "Unsatisfiable" for an incoming pod if and only if every possible node assignment for that pod would violate "MaxSkew" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.
- Possible enum values:
- - `"DoNotSchedule"` instructs the scheduler not to schedule the pod when constraints are not satisfied.
- - `"ScheduleAnyway"` instructs the scheduler to schedule the pod even if constraints are not satisfied.
+
- **topologySpreadConstraints.labelSelector** (}}">LabelSelector )
LabelSelector is used to find matching pods. Pods that match this label selector are counted to determine the number of pods in their corresponding topology domain.
+ - **topologySpreadConstraints.minDomains** (int32)
+
+ MinDomains indicates a minimum number of eligible domains. When the number of eligible domains with matching topology keys is less than minDomains, Pod Topology Spread treats "global minimum" as 0, and then the calculation of Skew is performed. And when the number of eligible domains with matching topology keys equals or greater than minDomains, this value has no effect on scheduling. As a result, when the number of eligible domains is less than minDomains, scheduler won't schedule more than maxSkew Pods to those domains. If value is nil, the constraint behaves as if MinDomains is equal to 1. Valid values are integers greater than 0. When value is not nil, WhenUnsatisfiable must be DoNotSchedule.
+
+ For example, in a 3-zone cluster, MaxSkew is set to 2, MinDomains is set to 5 and pods with the same labelSelector spread as 2/2/2: | zone1 | zone2 | zone3 | | P P | P P | P P | The number of domains is less than 5(MinDomains), so "global minimum" is treated as 0. In this situation, new pod with the same labelSelector cannot be scheduled, because computed skew will be 3(3 - 0) if new Pod is scheduled to any of the three zones, it will violate MaxSkew.
+
+ This is an alpha field and requires enabling MinDomainsInPodTopologySpread feature gate.
+
### Lifecycle
@@ -234,10 +235,7 @@ PodSpec is a description of a pod.
Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
- Possible enum values:
- - `"Always"`
- - `"Never"`
- - `"OnFailure"`
+
- **terminationGracePeriodSeconds** (int64)
@@ -257,12 +255,6 @@ PodSpec is a description of a pod.
- **readinessGates.conditionType** (string), required
ConditionType refers to a condition in the pod's condition list with matching type.
-
- Possible enum values:
- - `"ContainersReady"` indicates whether all containers in the pod are ready.
- - `"Initialized"` means that all init containers in the pod have started successfully.
- - `"PodScheduled"` represents status of the scheduling process for this pod.
- - `"Ready"` means the pod is able to service requests and should be added to the load balancing pools of all matching services.
### Hostname and Name resolution
@@ -329,11 +321,7 @@ PodSpec is a description of a pod.
Set DNS policy for the pod. Defaults to "ClusterFirst". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.
- Possible enum values:
- - `"ClusterFirst"` indicates that the pod should use cluster DNS first unless hostNetwork is true, if it is available, then fall back on the default (as determined by kubelet) DNS settings.
- - `"ClusterFirstWithHostNet"` indicates that the pod should use cluster DNS first, if it is available, then fall back on the default (as determined by kubelet) DNS settings.
- - `"Default"` indicates that the pod should use the default (as determined by kubelet) DNS settings.
- - `"None"` indicates that the pod should use empty DNS settings. DNS parameters such as nameservers and search paths should be defined via DNSConfig.
+
### Hosts namespaces
@@ -416,10 +404,7 @@ PodSpec is a description of a pod.
Localhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied.
- Possible enum values:
- - `"Localhost"` indicates a profile defined in a file on the node should be used. The file's location relative to \/seccomp.
- - `"RuntimeDefault"` represents the default container runtime seccomp profile.
- - `"Unconfined"` indicates no seccomp profile is applied (A.K.A. unconfined).
+
- **securityContext.seccompProfile.localhostProfile** (string)
@@ -497,11 +482,11 @@ PodSpec is a description of a pod.
- **preemptionPolicy** (string)
- PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is beta-level, gated by the NonPreemptingPriority feature-gate.
+ PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.
- **overhead** (map[string]}}">Quantity )
- 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/688-pod-overhead/README.md This field is beta-level as of Kubernetes v1.18, and is only honored by servers that enable the PodOverhead feature.
+ 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/688-pod-overhead/README.md
### Deprecated
@@ -529,27 +514,24 @@ A single application container that you want to run within a pod.
- **image** (string)
- Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.
+ Container image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.
- **imagePullPolicy** (string)
Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
- Possible enum values:
- - `"Always"` means that kubelet always attempts to pull the latest image. Container will fail If the pull fails.
- - `"IfNotPresent"` means that kubelet pulls if the image isn't present on disk. Container will fail if the image isn't present and the pull fails.
- - `"Never"` means that kubelet never pulls an image, but only uses a local image. Container will fail if the image isn't present
+
### Entrypoint
- **command** ([]string)
- Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
+ Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
- **args** ([]string)
- Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
+ Arguments to the entrypoint. The container image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
- **workingDir** (string)
@@ -589,10 +571,7 @@ A single application container that you want to run within a pod.
Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP".
- Possible enum values:
- - `"SCTP"` is the SCTP protocol.
- - `"TCP"` is the TCP protocol.
- - `"UDP"` is the UDP protocol.
+
### Environment variables
@@ -809,9 +788,7 @@ A single application container that you want to run within a pod.
Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.
- Possible enum values:
- - `"FallbackToLogsOnError"` will read the most recent contents of the container logs for the container status message when the container exits with an error and the terminationMessagePath has no contents.
- - `"File"` is the default behavior and will set the container status message to the contents of the container's terminationMessagePath when the container exits.
+
- **livenessProbe** (}}">Probe )
@@ -891,10 +868,7 @@ A single application container that you want to run within a pod.
Localhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied.
- Possible enum values:
- - `"Localhost"` indicates a profile defined in a file on the node should be used. The file's location relative to \/seccomp.
- - `"RuntimeDefault"` represents the default container runtime seccomp profile.
- - `"Unconfined"` indicates no seccomp profile is applied (A.K.A. unconfined).
+
- **securityContext.seccompProfile.localhostProfile** (string)
@@ -990,27 +964,24 @@ This is a beta feature available on clusters that haven't disabled the Ephemeral
- **image** (string)
- Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images
+ Container image name. More info: https://kubernetes.io/docs/concepts/containers/images
- **imagePullPolicy** (string)
Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
- Possible enum values:
- - `"Always"` means that kubelet always attempts to pull the latest image. Container will fail If the pull fails.
- - `"IfNotPresent"` means that kubelet pulls if the image isn't present on disk. Container will fail if the image isn't present and the pull fails.
- - `"Never"` means that kubelet never pulls an image, but only uses a local image. Container will fail if the image isn't present
+
### Entrypoint
- **command** ([]string)
- Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
+ Entrypoint array. Not executed within a shell. The image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
- **args** ([]string)
- Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
+ Arguments to the entrypoint. The image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. Double $$ are reduced to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell
- **workingDir** (string)
@@ -1198,9 +1169,7 @@ This is a beta feature available on clusters that haven't disabled the Ephemeral
Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.
- Possible enum values:
- - `"FallbackToLogsOnError"` will read the most recent contents of the container logs for the container status message when the container exits with an error and the terminationMessagePath has no contents.
- - `"File"` is the default behavior and will set the container status message to the contents of the container's terminationMessagePath when the container exits.
+
### Debugging
@@ -1283,10 +1252,7 @@ This is a beta feature available on clusters that haven't disabled the Ephemeral
Localhost - a profile defined in a file on the node should be used. RuntimeDefault - the container runtime default profile should be used. Unconfined - no profile should be applied.
- Possible enum values:
- - `"Localhost"` indicates a profile defined in a file on the node should be used. The file's location relative to \/seccomp.
- - `"RuntimeDefault"` represents the default container runtime seccomp profile.
- - `"Unconfined"` indicates no seccomp profile is applied (A.K.A. unconfined).
+
- **securityContext.seccompProfile.localhostProfile** (string)
@@ -1372,10 +1338,7 @@ This is a beta feature available on clusters that haven't disabled the Ephemeral
Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP".
- Possible enum values:
- - `"SCTP"` is the SCTP protocol.
- - `"TCP"` is the TCP protocol.
- - `"UDP"` is the UDP protocol.
+
- **resources** (ResourceRequirements)
@@ -1479,9 +1442,7 @@ LifecycleHandler defines a specific action that should be taken in a lifecycle h
Scheme to use for connecting to the host. Defaults to HTTP.
- Possible enum values:
- - `"HTTP"` means that the scheme used will be http://
- - `"HTTPS"` means that the scheme used will be https://
+
- **tcpSocket** (TCPSocketAction)
@@ -1593,11 +1554,11 @@ Pod affinity is a group of inter pod affinity scheduling rules.
- **preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm.namespaceSelector** (}}">LabelSelector )
- A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces. This field is beta-level and is only honored when PodAffinityNamespaceSelector feature is enabled.
+ A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces.
- **preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm.namespaces** ([]string)
- namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace"
+ namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace".
- **preferredDuringSchedulingIgnoredDuringExecution.weight** (int32), required
@@ -1620,11 +1581,11 @@ Pod affinity is a group of inter pod affinity scheduling rules.
- **requiredDuringSchedulingIgnoredDuringExecution.namespaceSelector** (}}">LabelSelector )
- A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces. This field is beta-level and is only honored when PodAffinityNamespaceSelector feature is enabled.
+ A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces.
- **requiredDuringSchedulingIgnoredDuringExecution.namespaces** ([]string)
- namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace"
+ namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace".
@@ -1660,11 +1621,11 @@ Pod anti affinity is a group of inter pod anti affinity scheduling rules.
- **preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm.namespaceSelector** (}}">LabelSelector )
- A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces. This field is beta-level and is only honored when PodAffinityNamespaceSelector feature is enabled.
+ A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces.
- **preferredDuringSchedulingIgnoredDuringExecution.podAffinityTerm.namespaces** ([]string)
- namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace"
+ namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace".
- **preferredDuringSchedulingIgnoredDuringExecution.weight** (int32), required
@@ -1687,11 +1648,11 @@ Pod anti affinity is a group of inter pod anti affinity scheduling rules.
- **requiredDuringSchedulingIgnoredDuringExecution.namespaceSelector** (}}">LabelSelector )
- A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces. This field is beta-level and is only honored when PodAffinityNamespaceSelector feature is enabled.
+ A label query over the set of namespaces that the term applies to. The term is applied to the union of the namespaces selected by this field and the ones listed in the namespaces field. null selector and null or empty namespaces list means "this pod's namespace". An empty selector ({}) matches all namespaces.
- **requiredDuringSchedulingIgnoredDuringExecution.namespaces** ([]string)
- namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace"
+ namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means "this pod's namespace".
@@ -1755,9 +1716,7 @@ Probe describes a health check to be performed against a container to determine
Scheme to use for connecting to the host. Defaults to HTTP.
- Possible enum values:
- - `"HTTP"` means that the scheme used will be http://
- - `"HTTPS"` means that the scheme used will be https://
+
- **tcpSocket** (TCPSocketAction)
@@ -1803,7 +1762,7 @@ Probe describes a health check to be performed against a container to determine
- **grpc** (GRPCAction)
- GRPC specifies an action involving a GRPC port. This is an alpha field and requires enabling GRPCContainerProbe feature gate.
+ GRPC specifies an action involving a GRPC port. This is a beta field and requires enabling GRPCContainerProbe feature gate.
**
@@ -1851,12 +1810,7 @@ PodStatus represents information about the status of a pod. Status may trail the
More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase
- Possible enum values:
- - `"Failed"` means that all containers in the pod have terminated, and at least one container has terminated in a failure (exited with a non-zero exit code or was stopped by the system).
- - `"Pending"` means the pod has been accepted by the system, but one or more of the containers has not been started. This includes time before being bound to a node, as well as time spent pulling images onto the host.
- - `"Running"` means the pod has been bound to a node and all of the containers have been started. At least one container is still running or is in the process of being restarted.
- - `"Succeeded"` means that all containers in the pod have voluntarily terminated with a container exit code of 0, and the system is not going to restart any of these containers.
- - `"Unknown"` means that for some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod. Deprecated: It isn't being set since 2015 (74da3b14b0c0f658b3bb8d2def5094686d0e9095)
+
- **message** (string)
@@ -1900,12 +1854,6 @@ PodStatus represents information about the status of a pod. Status may trail the
- **conditions.type** (string), required
Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
-
- Possible enum values:
- - `"ContainersReady"` indicates whether all containers in the pod are ready.
- - `"Initialized"` means that all init containers in the pod have started successfully.
- - `"PodScheduled"` represents status of the scheduling process for this pod.
- - `"Ready"` means the pod is able to service requests and should be added to the load balancing pools of all matching services.
- **conditions.lastProbeTime** (Time)
@@ -1933,10 +1881,7 @@ PodStatus represents information about the status of a pod. Status may trail the
The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md
- Possible enum values:
- - `"BestEffort"` is the BestEffort qos class.
- - `"Burstable"` is the Burstable qos class.
- - `"Guaranteed"` is the Guaranteed qos class.
+
- **initContainerStatuses** ([]ContainerStatus)
@@ -1959,7 +1904,7 @@ PodStatus represents information about the status of a pod. Status may trail the
- **initContainerStatuses.containerID** (string)
- Container's ID in the format 'docker://\'.
+ Container's ID in the format '\://\'.
- **initContainerStatuses.state** (ContainerState)
@@ -1991,7 +1936,7 @@ PodStatus represents information about the status of a pod. Status may trail the
- **initContainerStatuses.state.terminated.containerID** (string)
- Container's ID in the format 'docker://\'
+ Container's ID in the format '\://\'
- **initContainerStatuses.state.terminated.exitCode** (int32), required
@@ -2068,7 +2013,7 @@ PodStatus represents information about the status of a pod. Status may trail the
- **initContainerStatuses.lastState.terminated.containerID** (string)
- Container's ID in the format 'docker://\'
+ Container's ID in the format '\://\'
- **initContainerStatuses.lastState.terminated.exitCode** (int32), required
@@ -2129,7 +2074,7 @@ PodStatus represents information about the status of a pod. Status may trail the
- **containerStatuses** ([]ContainerStatus)
- The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
+ The list has one entry per container in the manifest. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
*ContainerStatus contains details for the current status of this container.*
@@ -2148,7 +2093,7 @@ PodStatus represents information about the status of a pod. Status may trail the
- **containerStatuses.containerID** (string)
- Container's ID in the format 'docker://\'.
+ Container's ID in the format '\://\'.
- **containerStatuses.state** (ContainerState)
@@ -2180,7 +2125,7 @@ PodStatus represents information about the status of a pod. Status may trail the
- **containerStatuses.state.terminated.containerID** (string)
- Container's ID in the format 'docker://\'
+ Container's ID in the format '\://\'
- **containerStatuses.state.terminated.exitCode** (int32), required
@@ -2257,7 +2202,7 @@ PodStatus represents information about the status of a pod. Status may trail the
- **containerStatuses.lastState.terminated.containerID** (string)
- Container's ID in the format 'docker://\'
+ Container's ID in the format '\://\'
- **containerStatuses.lastState.terminated.exitCode** (int32), required
@@ -2337,7 +2282,7 @@ PodStatus represents information about the status of a pod. Status may trail the
- **ephemeralContainerStatuses.containerID** (string)
- Container's ID in the format 'docker://\'.
+ Container's ID in the format '\://\'.
- **ephemeralContainerStatuses.state** (ContainerState)
@@ -2369,7 +2314,7 @@ PodStatus represents information about the status of a pod. Status may trail the
- **ephemeralContainerStatuses.state.terminated.containerID** (string)
- Container's ID in the format 'docker://\'
+ Container's ID in the format '\://\'
- **ephemeralContainerStatuses.state.terminated.exitCode** (int32), required
@@ -2446,7 +2391,7 @@ PodStatus represents information about the status of a pod. Status may trail the
- **ephemeralContainerStatuses.lastState.terminated.containerID** (string)
- Container's ID in the format 'docker://\'
+ Container's ID in the format '\://\'
- **ephemeralContainerStatuses.lastState.terminated.exitCode** (int32), required
diff --git a/content/en/docs/reference/kubernetes-api/workload-resources/priority-class-v1.md b/content/en/docs/reference/kubernetes-api/workload-resources/priority-class-v1.md
index 20233188ac..5d57c0f5ae 100644
--- a/content/en/docs/reference/kubernetes-api/workload-resources/priority-class-v1.md
+++ b/content/en/docs/reference/kubernetes-api/workload-resources/priority-class-v1.md
@@ -56,7 +56,7 @@ PriorityClass defines mapping from a priority class name to the priority integer
- **preemptionPolicy** (string)
- PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is beta-level, gated by the NonPreemptingPriority feature-gate.
+ PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset.
diff --git a/content/en/docs/reference/kubernetes-api/workload-resources/stateful-set-v1.md b/content/en/docs/reference/kubernetes-api/workload-resources/stateful-set-v1.md
index cb10234801..9d2b41b6cc 100644
--- a/content/en/docs/reference/kubernetes-api/workload-resources/stateful-set-v1.md
+++ b/content/en/docs/reference/kubernetes-api/workload-resources/stateful-set-v1.md
@@ -90,9 +90,7 @@ A StatefulSetSpec is the specification of a StatefulSet.
Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.
- Possible enum values:
- - `"OnDelete"` triggers the legacy behavior. Version tracking and ordered rolling restarts are disabled. Pods are recreated from the StatefulSetSpec when they are manually deleted. When a scale operation is performed with this strategy,specification version indicated by the StatefulSet's currentRevision.
- - `"RollingUpdate"` indicates that update will be applied to all Pods in the StatefulSet with respect to the StatefulSet ordering constraints. When a scale operation is performed with this strategy, new Pods will be created from the specification version indicated by the StatefulSet's updateRevision.
+
- **updateStrategy.rollingUpdate** (RollingUpdateStatefulSetStrategy)
@@ -101,17 +99,22 @@ A StatefulSetSpec is the specification of a StatefulSet.
*RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.*
+ - **updateStrategy.rollingUpdate.maxUnavailable** (IntOrString)
+
+ The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding up. This can not be 0. Defaults to 1. This field is alpha-level and is only honored by servers that enable the MaxUnavailableStatefulSet feature. The field applies to all pods in the range 0 to Replicas-1. That means if there is any unavailable pod in the range 0 to Replicas-1, it will be counted towards MaxUnavailable.
+
+
+ *IntOrString is a type that can hold an int32 or a string. When used in JSON or YAML marshalling and unmarshalling, it produces or consumes the inner type. This allows you to have, for example, a JSON field that can accept a name or number.*
+
- **updateStrategy.rollingUpdate.partition** (int32)
- Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.
+ Partition indicates the ordinal at which the StatefulSet should be partitioned for updates. During a rolling update, all pods from ordinal Replicas-1 to Partition are updated. All pods from ordinal Partition-1 to 0 remain untouched. This is helpful in being able to do a canary based deployment. The default value is 0.
- **podManagementPolicy** (string)
podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.
- Possible enum values:
- - `"OrderedReady"` will create pods in strictly increasing order on scale up and strictly decreasing order on scale down, progressing only when the previous pod is ready or terminated. At most one pod will be changed at any time.
- - `"Parallel"` will create and delete pods as soon as the stateful set replica count is changed, and will not wait for pods to be ready or complete termination.
+
- **revisionHistoryLimit** (int32)
@@ -166,7 +169,7 @@ StatefulSetStatus represents the current state of a StatefulSet.
updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.
-- **availableReplicas** (int32), required
+- **availableReplicas** (int32)
Total number of available pods (ready for at least minReadySeconds) targeted by this statefulset. This is a beta field and enabled/disabled by StatefulSetMinReadySeconds feature gate.
diff --git a/content/en/docs/reference/labels-annotations-taints/_index.md b/content/en/docs/reference/labels-annotations-taints/_index.md
index c47dd5b03f..6622c63941 100644
--- a/content/en/docs/reference/labels-annotations-taints/_index.md
+++ b/content/en/docs/reference/labels-annotations-taints/_index.md
@@ -15,6 +15,76 @@ This document serves both as a reference to the values and as a coordination poi
## Labels, annotations and taints used on API objects
+### app.kubernetes.io/component
+
+Example: `app.kubernetes.io/component=database`
+
+Used on: All Objects
+
+The component within the architecture.
+
+One of the [recommended labels](/docs/concepts/overview/working-with-objects/common-labels/#labels).
+
+### app.kubernetes.io/created-by
+
+Example: `app.kubernetes.io/created-by=controller-manager`
+
+Used on: All Objects
+
+The controller/user who created this resource.
+
+One of the [recommended labels](/docs/concepts/overview/working-with-objects/common-labels/#labels).
+
+### app.kubernetes.io/instance
+
+Example: `app.kubernetes.io/instance=mysql-abcxzy`
+
+Used on: All Objects
+
+A unique name identifying the instance of an application.
+
+One of the [recommended labels](/docs/concepts/overview/working-with-objects/common-labels/#labels).
+
+### app.kubernetes.io/managed-by
+
+Example: `app.kubernetes.io/managed-by=helm`
+
+Used on: All Objects
+
+The tool being used to manage the operation of an application.
+
+One of the [recommended labels](/docs/concepts/overview/working-with-objects/common-labels/#labels).
+
+### app.kubernetes.io/name
+
+Example: `app.kubernetes.io/name=mysql`
+
+Used on: All Objects
+
+The name of the application.
+
+One of the [recommended labels](/docs/concepts/overview/working-with-objects/common-labels/#labels).
+
+### app.kubernetes.io/part-of
+
+Example: `app.kubernetes.io/part-of=wordpress`
+
+Used on: All Objects
+
+The name of a higher level application this one is part of.
+
+One of the [recommended labels](/docs/concepts/overview/working-with-objects/common-labels/#labels).
+
+### app.kubernetes.io/version
+
+Example: `app.kubernetes.io/version="5.7.21"`
+
+Used on: All Objects
+
+The current version of the application (e.g., a semantic version, revision hash, etc.).
+
+One of the [recommended labels](/docs/concepts/overview/working-with-objects/common-labels/#labels).
+
### kubernetes.io/arch
Example: `kubernetes.io/arch=amd64`
@@ -98,6 +168,44 @@ Used on: Pod
This annotation is used to set [Pod Deletion Cost](/docs/concepts/workloads/controllers/replicaset/#pod-deletion-cost)
which allows users to influence ReplicaSet downscaling order. The annotation parses into an `int32` type.
+### kubernetes.io/ingress-bandwidth
+
+{{< note >}}
+Ingress traffic shaping annotation is an experimental feature.
+If you want to enable traffic shaping support, you must add the `bandwidth` plugin to your CNI configuration file (default `/etc/cni/net.d`) and
+ensure that the binary is included in your CNI bin dir (default `/opt/cni/bin`).
+{{< /note >}}
+
+Example: `kubernetes.io/ingress-bandwidth: 10M`
+
+Used on: Pod
+
+You can apply quality-of-service traffic shaping to a pod and effectively limit its available bandwidth.
+Ingress traffic (to the pod) is handled by shaping queued packets to effectively handle data.
+To limit the bandwidth on a pod, write an object definition JSON file and specify the data traffic
+speed using `kubernetes.io/ingress-bandwidth` annotation. The unit used for specifying ingress
+rate is bits per second, as a [Quantity](/docs/reference/kubernetes-api/common-definitions/quantity/).
+For example, `10M` means 10 megabits per second.
+
+### kubernetes.io/egress-bandwidth
+
+{{< note >}}
+Egress traffic shaping annotation is an experimental feature.
+If you want to enable traffic shaping support, you must add the `bandwidth` plugin to your CNI configuration file (default `/etc/cni/net.d`) and
+ensure that the binary is included in your CNI bin dir (default `/opt/cni/bin`).
+{{< /note >}}
+
+Example: `kubernetes.io/egress-bandwidth: 10M`
+
+Used on: Pod
+
+Egress traffic (from the pod) is handled by policing, which simply drops packets in excess of the configured rate.
+The limits you place on a pod do not affect the bandwidth of other pods.
+To limit the bandwidth on a pod, write an object definition JSON file and specify the data traffic
+speed using `kubernetes.io/egress-bandwidth` annotation. The unit used for specifying egress
+rate is bits per second, as a [Quantity](/docs/reference/kubernetes-api/common-definitions/quantity/).
+For example, `10M` means 10 megabits per second.
+
### beta.kubernetes.io/instance-type (deprecated)
{{< note >}} Starting in v1.17, this label is deprecated in favor of [node.kubernetes.io/instance-type](#nodekubernetesioinstance-type). {{< /note >}}
@@ -226,6 +334,24 @@ Used on: Service
Kubernetes uses this label to differentiate multiple Services. Used currently for `ELB`(Elastic Load Balancer) only.
+### kubernetes.io/service-account.name
+
+Example: `kubernetes.io/service-account.name: "sa-name"`
+
+Used on: Secret
+
+This annotation records the {{< glossary_tooltip term_id="name" text="name">}} of the
+ServiceAccount that the token (stored in the Secret of type `kubernetes.io/service-account-token`) represents.
+
+### kubernetes.io/service-account.uid
+
+Example: `kubernetes.io/service-account.uid: da68f9c6-9d26-11e7-b84e-002dc52800da`
+
+Used on: Secret
+
+This annotation records the {{< glossary_tooltip term_id="uid" text="unique ID" >}} of the
+ServiceAccount that the token (stored in the Secret of type `kubernetes.io/service-account-token`) represents.
+
### endpointslice.kubernetes.io/managed-by {#endpointslicekubernetesiomanaged-by}
Example: `endpointslice.kubernetes.io/managed-by="controller"`
@@ -381,6 +507,21 @@ Example: `node.kubernetes.io/pid-pressure:NoSchedule`
The kubelet checks D-value of the size of `/proc/sys/kernel/pid_max` and the PIDs consumed by Kubernetes on a node to get the number of available PIDs that referred to as the `pid.available` metric. The metric is then compared to the corresponding threshold that can be set on the kubelet to determine if the node condition and taint should be added/removed.
+### node.kubernetes.io/out-of-service
+
+Example: `node.kubernetes.io/out-of-service:NoExecute`
+
+A user can manually add the taint to a Node marking it out-of-service. If the `NodeOutOfServiceVolumeDetach`
+[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) is enabled on
+`kube-controller-manager`, and a Node is marked out-of-service with this taint, the pods on the node will be forcefully deleted if there are no matching tolerations on it and volume detach operations for the pods terminating on the node will happen immediately. This allows the Pods on the out-of-service node to recover quickly on a different node.
+
+{{< caution >}}
+Refer to
+[Non-graceful node shutdown](/docs/concepts/architecture/nodes/#non-graceful-node-shutdown)
+for further details about when and how to use this taint.
+{{< /caution >}}
+
+
### node.cloudprovider.kubernetes.io/uninitialized
Example: `node.cloudprovider.kubernetes.io/uninitialized:NoSchedule`
@@ -493,12 +634,93 @@ you through the steps you follow to apply a seccomp profile to a Pod or to one o
its containers. That tutorial covers the supported mechanism for configuring seccomp in Kubernetes,
based on setting `securityContext` within the Pod's `.spec`.
+### snapshot.storage.kubernetes.io/allowVolumeModeChange
+
+Example: `snapshot.storage.kubernetes.io/allowVolumeModeChange: "true"`
+
+Used on: VolumeSnapshotContent
+
+Value can either be `true` or `false`.
+This determines whether a user can modify the mode of the source volume when a
+{{< glossary_tooltip text="PersistentVolumeClaim" term_id="persistent-volume-claim" >}} is being
+created from a VolumeSnapshot.
+
+Refer to [Converting the volume mode of a Snapshot](/docs/concepts/storage/volume-snapshots/#convert-volume-mode)
+and the [Kubernetes CSI Developer Documentation](https://kubernetes-csi.github.io/docs/) for more information.
+
## Annotations used for audit
+
- [`authorization.k8s.io/decision`](/docs/reference/labels-annotations-taints/audit-annotations/#authorization-k8s-io-decision)
- [`authorization.k8s.io/reason`](/docs/reference/labels-annotations-taints/audit-annotations/#authorization-k8s-io-reason)
+- [`insecure-sha1.invalid-cert.kubernetes.io/$hostname`](/docs/reference/labels-annotations-taints/audit-annotations/#insecure-sha1-invalid-cert-kubernetes-io-hostname)
+- [`missing-san.invalid-cert.kubernetes.io/$hostname`](/docs/reference/labels-annotations-taints/audit-annotations/#missing-san-invalid-cert-kubernetes-io-hostname)
- [`pod-security.kubernetes.io/audit-violations`](/docs/reference/labels-annotations-taints/audit-annotations/#pod-security-kubernetes-io-audit-violations)
- [`pod-security.kubernetes.io/enforce-policy`](/docs/reference/labels-annotations-taints/audit-annotations/#pod-security-kubernetes-io-enforce-policy)
- [`pod-security.kubernetes.io/exempt`](/docs/reference/labels-annotations-taints/audit-annotations/#pod-security-kubernetes-io-exempt)
See more details on the [Audit Annotations](/docs/reference/labels-annotations-taints/audit-annotations/) page.
+
+## kubeadm
+
+### kubeadm.alpha.kubernetes.io/cri-socket
+
+Example: `kubeadm.alpha.kubernetes.io/cri-socket: unix:///run/containerd/container.sock`
+
+Used on: Node
+
+Annotation that kubeadm uses to preserve the CRI socket information given to kubeadm at `init`/`join` time for later use.
+kubeadm annotates the Node object with this information. The annotation remains "alpha", since ideally this should
+be a field in KubeletConfiguration instead.
+
+### kubeadm.kubernetes.io/etcd.advertise-client-urls
+
+Example: `kubeadm.kubernetes.io/etcd.advertise-client-urls: https://172.17.0.18:2379`
+
+Used on: Pod
+
+Annotation that kubeadm places on locally managed etcd pods to keep track of a list of URLs where etcd clients
+should connect to. This is used mainly for etcd cluster health check purposes.
+
+### kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint
+
+Example: `kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: https//172.17.0.18:6443`
+
+Used on: Pod
+
+Annotation that kubeadm places on locally managed kube-apiserver pods to keep track of the exposed advertise
+address/port endpoint for that API server instance.
+
+### kubeadm.kubernetes.io/component-config.hash
+
+Used on: ConfigMap
+
+Example: `kubeadm.kubernetes.io/component-config.hash: 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae`
+
+Annotation that kubeadm places on ConfigMaps that it manages for configuring components. It contains a hash (SHA-256)
+used to determine if the user has applied settings different from the kubeadm defaults for a particular component.
+
+### node-role.kubernetes.io/control-plane
+
+Used on: Node
+
+Label that kubeadm applies on the control plane nodes that it manages.
+
+### node-role.kubernetes.io/control-plane
+
+Used on: Node
+
+Example: `node-role.kubernetes.io/control-plane:NoSchedule`
+
+Taint that kubeadm applies on control plane nodes to allow only critical workloads to schedule on them.
+
+### node-role.kubernetes.io/master
+
+Used on: Node
+
+Example: `node-role.kubernetes.io/master:NoSchedule`
+
+Taint that kubeadm applies on control plane nodes to allow only critical workloads to schedule on them.
+
+{{< note >}} Starting in v1.20, this taint is deprecated in favor of `node-role.kubernetes.io/control-plane`
+and will be removed in v1.25.{{< /note >}}
diff --git a/content/en/docs/reference/labels-annotations-taints/audit-annotations.md b/content/en/docs/reference/labels-annotations-taints/audit-annotations.md
index a0ef3a1531..4a3d726ce5 100644
--- a/content/en/docs/reference/labels-annotations-taints/audit-annotations.md
+++ b/content/en/docs/reference/labels-annotations-taints/audit-annotations.md
@@ -11,7 +11,7 @@ namespace. These annotations apply to `Event` object from API group
{{< note >}}
The following annotations are not used within the Kubernetes API. When you
-[enable auditing](/docs/tasks/debug-application-cluster/audit/) in your cluster,
+[enable auditing](/docs/tasks/debug/debug-cluster/audit/) in your cluster,
audit event data is written using `Event` from API group `audit.k8s.io`.
The annotations apply to audit events. Audit events are different from objects in the
[Event API](/docs/reference/kubernetes-api/cluster-resources/event-v1/) (API group
@@ -64,12 +64,47 @@ Example: `authorization.k8s.io/decision: "forbid"`
This annotation indicates whether or not a request was authorized in Kubernetes audit logs.
-See [Auditing](/docs/tasks/debug-application-cluster/audit/) for more information.
+See [Auditing](/docs/tasks/debug/debug-cluster/audit/) for more information.
## authorization.k8s.io/reason
-Example: `authorization.k8s.io/decision: "Human-readable reason for the decision"`
+Example: `authorization.k8s.io/reason: "Human-readable reason for the decision"`
This annotation gives reason for the [decision](#authorization-k8s-io-decision) in Kubernetes audit logs.
-See [Auditing](/docs/tasks/debug-application-cluster/audit/) for more information.
+See [Auditing](/docs/tasks/debug/debug-cluster/audit/) for more information.
+
+## missing-san.invalid-cert.kubernetes.io/$hostname
+
+Example: `missing-san.invalid-cert.kubernetes.io/example-svc.example-namespace.svc: "relies on a legacy Common Name field instead of the SAN extension for subject validation"`
+
+Used by Kubernetes version v1.24 and later
+
+This annotation indicates a webhook or aggregated API server
+is using an invalid certificate that is missing `subjectAltNames`.
+Support for these certificates was disabled by default in Kubernetes 1.19,
+and removed in Kubernetes 1.23.
+
+Requests to endpoints using these certificates will fail.
+Services using these certificates should replace them as soon as possible
+to avoid disruption when running in Kubernetes 1.23+ environments.
+
+There's more information about this in the Go documentation:
+[X.509 CommonName deprecation](https://go.dev/doc/go1.15#commonname).
+
+## insecure-sha1.invalid-cert.kubernetes.io/$hostname
+
+Example: `insecure-sha1.invalid-cert.kubernetes.io/example-svc.example-namespace.svc: "uses an insecure SHA-1 signature"`
+
+Used by Kubernetes version v1.24 and later
+
+This annotation indicates a webhook or aggregated API server
+is using an insecure certificate signed with a SHA-1 hash.
+Support for these insecure certificates is disabled by default in Kubernetes 1.24,
+and will be removed in a future release.
+
+Services using these certificates should replace them as soon as possible,
+to ensure connections are secured properly and to avoid disruption in future releases.
+
+There's more information about this in the Go documentation:
+[Rejecting SHA-1 certificates](https://go.dev/doc/go1.18#sha1).
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_generate-csr.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_generate-csr.md
index 1abc7d9bac..9cd82c4316 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_generate-csr.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_generate-csr.md
@@ -92,6 +92,3 @@ kubeadm certs generate-csr [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver.md
index 7dc59c45d4..b770895500 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver.md
@@ -87,6 +87,3 @@ kubeadm certs renew apiserver [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-healthcheck-client.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-healthcheck-client.md
index 84d75bfd36..0fde99368c 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-healthcheck-client.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-healthcheck-client.md
@@ -87,6 +87,3 @@ kubeadm certs renew etcd-healthcheck-client [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-peer.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-peer.md
index 60acaae1db..214b353b00 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-peer.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-peer.md
@@ -87,6 +87,3 @@ kubeadm certs renew etcd-peer [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-server.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-server.md
index 969157fe3e..cd8b73908d 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-server.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-server.md
@@ -87,6 +87,3 @@ kubeadm certs renew etcd-server [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images.md
index 0f85b4fbc2..7dd3a4f820 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images.md
@@ -67,6 +67,3 @@ kubeadm config images [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md
index 0700538f56..d46abeab03 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md
@@ -55,7 +55,7 @@ kubeadm config images list [flags]
--feature-gates string
-A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (BETA - default=true)
@@ -116,6 +116,3 @@ kubeadm config images list [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md
index 7423ad1934..775881483b 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md
@@ -48,7 +48,7 @@ kubeadm config images pull [flags]
--feature-gates string
-A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (BETA - default=true)
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print_join-defaults.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print_join-defaults.md
index 1c634871eb..ea7c83e14b 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print_join-defaults.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print_join-defaults.md
@@ -79,6 +79,3 @@ kubeadm config print join-defaults [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md
index f71e83cf1b..645d11c80b 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md
@@ -138,7 +138,7 @@ kubeadm init [flags]
--feature-gates string
-A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (BETA - default=true)
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon.md
index 64777661d0..1ff70e5cb8 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon.md
@@ -60,6 +60,3 @@ kubeadm init phase addon [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_all.md
index 198aee2657..292abcf5fb 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_all.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_all.md
@@ -62,7 +62,7 @@ kubeadm init phase addon all [flags]
--feature-gates string
-A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (BETA - default=true)
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_coredns.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_coredns.md
index 8b07e647da..8eddf5bb5d 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_coredns.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_coredns.md
@@ -41,7 +41,7 @@ kubeadm init phase addon coredns [flags]
--feature-gates string
-A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (BETA - default=true)
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-ca.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-ca.md
index 547601e364..a47b8390be 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-ca.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-ca.md
@@ -85,6 +85,3 @@ kubeadm init phase certs etcd-ca [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_sa.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_sa.md
index a3df321d88..d6c0630075 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_sa.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_sa.md
@@ -69,6 +69,3 @@ kubeadm init phase certs sa [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md
index c5b6ce6dba..1dfaa1a7cb 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md
@@ -101,7 +101,7 @@ kubeadm init phase control-plane all [flags]
--feature-gates string
-A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (BETA - default=true)
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md
index 4f589f3dbd..9d5f9583b2 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md
@@ -83,7 +83,7 @@ kubeadm init phase control-plane apiserver [flags]
--feature-gates string
-A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (BETA - default=true)
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_all.md
index f1ebdbcf12..1eb52e8287 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_all.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_all.md
@@ -116,6 +116,3 @@ kubeadm init phase kubeconfig all [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize_all.md
index 70e4c634b0..55a98fae96 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize_all.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize_all.md
@@ -81,6 +81,3 @@ kubeadm init phase kubelet-finalize all [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-start.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-start.md
index 11d2407499..a79f41f610 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-start.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-start.md
@@ -88,6 +88,3 @@ kubeadm init phase kubelet-start [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_preflight.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_preflight.md
index 345621f703..61e5a0c946 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_preflight.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_preflight.md
@@ -81,6 +81,3 @@ kubeadm init phase preflight [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-certs.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-certs.md
index 515060a76c..e242f4eedd 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-certs.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-certs.md
@@ -95,6 +95,3 @@ kubeadm init phase upload-certs [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_all.md
index 3c087368a7..ba4e91fa89 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_all.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_all.md
@@ -74,6 +74,3 @@ kubeadm init phase upload-config all [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubeadm.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubeadm.md
index 13e561f486..930b2d94a2 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubeadm.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubeadm.md
@@ -83,6 +83,3 @@ kubeadm init phase upload-config kubeadm [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubelet.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubelet.md
index ba27f728cb..df7caadce6 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubelet.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubelet.md
@@ -15,7 +15,7 @@ Upload the kubelet component config to a ConfigMap
### Synopsis
-Upload kubelet configuration extracted from the kubeadm InitConfiguration object to a ConfigMap of the form kubelet-config-1.X in the cluster, where X is the minor version of the current (API Server) Kubernetes version.
+Upload the kubelet configuration extracted from the kubeadm InitConfiguration object to a kubelet-config ConfigMap in the cluster
```
kubeadm init phase upload-config kubelet [flags]
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join.md
index 07768a16c6..f7ea8ea39a 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join.md
@@ -67,6 +67,3 @@ kubeadm join phase control-plane-join [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_all.md
index 7a3517652d..496213ce90 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_all.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_all.md
@@ -95,6 +95,3 @@ kubeadm join phase control-plane-join all [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_etcd.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_etcd.md
index c06ddaae40..d127f67fd8 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_etcd.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_etcd.md
@@ -9,7 +9,6 @@ guide. You can file document formatting bugs against the
[reference-docs](https://github.com/kubernetes-sigs/reference-docs/) project.
-->
-
Add a new local etcd member
### Synopsis
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare.md
index 6952dbca80..3dc12615a9 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare.md
@@ -67,6 +67,3 @@ kubeadm join phase control-plane-prepare [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md
index 661edf597d..1d5351f3af 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md
@@ -151,6 +151,3 @@ kubeadm join phase control-plane-prepare all [api-server-endpoint] [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_certs.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_certs.md
index 6475115940..81355a775e 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_certs.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_certs.md
@@ -110,8 +110,6 @@ kubeadm join phase control-plane-prepare certs [api-server-endpoint] [flags]
-
-
### Options inherited from parent commands
@@ -130,6 +128,3 @@ kubeadm join phase control-plane-prepare certs [api-server-endpoint] [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_kubelet-start.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_kubelet-start.md
index 5896b25337..cafb58658e 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_kubelet-start.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_kubelet-start.md
@@ -123,6 +123,3 @@ kubeadm join phase kubelet-start [api-server-endpoint] [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md
index e5cffa35f8..ae869d7f47 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md
@@ -52,6 +52,13 @@ kubeadm reset [flags]
Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this value; use this option only if you have more than one CRI installed or if you have non-standard CRI socket.
+
+--dry-run
+
+
+Don't apply any changes; just output what would be done.
+
+
-f, --force
@@ -110,6 +117,3 @@ kubeadm reset [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_cleanup-node.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_cleanup-node.md
index ceabd2045e..4120c0a97d 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_cleanup-node.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_cleanup-node.md
@@ -74,6 +74,3 @@ kubeadm reset phase cleanup-node [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_remove-etcd-member.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_remove-etcd-member.md
index d2c1060ff4..3fd91a98a6 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_remove-etcd-member.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_remove-etcd-member.md
@@ -67,6 +67,3 @@ kubeadm reset phase remove-etcd-member [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md
index 5384fc4d6c..025ab1efac 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md
@@ -91,6 +91,3 @@ kubeadm token [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md
index a2a217033c..4687fcbba1 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md
@@ -9,7 +9,6 @@ guide. You can file document formatting bugs against the
[reference-docs](https://github.com/kubernetes-sigs/reference-docs/) project.
-->
-
Create bootstrap tokens on the server
### Synopsis
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md
index 2040bd3f94..30b7678798 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md
@@ -79,6 +79,3 @@ kubeadm token delete [token-value] ...
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md
index 9fd720662e..629fed4ff4 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md
@@ -76,7 +76,7 @@ kubeadm upgrade apply [version]
--feature-gates string
-A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (BETA - default=true)
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_diff.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_diff.md
index eb5e3c4cac..718257f8af 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_diff.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_diff.md
@@ -102,6 +102,3 @@ kubeadm upgrade diff [version] [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node.md
index a8a3138c88..12fbe5b8f3 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node.md
@@ -117,6 +117,3 @@ kubeadm upgrade node [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase.md
index 6b86c95054..ce5b6f8429 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase.md
@@ -56,6 +56,3 @@ Use this command to invoke single phase of the node workflow
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_kubelet-config.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_kubelet-config.md
index d2b03974c2..e03f59f4f3 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_kubelet-config.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_kubelet-config.md
@@ -15,7 +15,7 @@ Upgrade the kubelet configuration for this node
### Synopsis
-Download the kubelet configuration from a ConfigMap of the form "kubelet-config-1.X" in the cluster, where X is the minor version of the kubelet. kubeadm uses the KuberneteVersion field in the kubeadm-config ConfigMap to determine what the _desired_ kubelet version is.
+Download the kubelet configuration from the kubelet-config ConfigMap stored in the cluster
```
kubeadm upgrade node phase kubelet-config [flags]
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_preflight.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_preflight.md
index d82a193898..ff44d0d7da 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_preflight.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_preflight.md
@@ -67,6 +67,3 @@ kubeadm upgrade node phase preflight [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md
index d592249f76..f7913a8452 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md
@@ -55,7 +55,7 @@ kubeadm upgrade plan [version] [flags]
--feature-gates string
-A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (ALPHA - default=false)
+A set of key=value pairs that describe feature gates for various features. Options are: PublicKeysECDSA=true|false (ALPHA - default=false) RootlessControlPlane=true|false (ALPHA - default=false) UnversionedKubeletConfigMap=true|false (BETA - default=true)
diff --git a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md
index b86c725977..38cc27bee9 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md
@@ -67,6 +67,3 @@ kubeadm version [flags]
-
-
-
diff --git a/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md b/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md
index 137a9bcd04..74428b9148 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/implementation-details.md
@@ -81,13 +81,8 @@ The user can skip specific preflight checks or all of them with the `--ignore-pr
- Kubernetes system requirements:
- if running on linux:
- [error] if Kernel is older than the minimum required version
- - [error] if required cgroups subsystem aren't in set up
- - if using docker:
- - [warning/error] if Docker service does not exist, if it is disabled, if it is not active.
- - [error] if Docker endpoint does not exist or does not work
- - [warning] if docker version is not in the list of validated docker versions
- - If using other cri engine:
- - [error] if crictl socket does not answer
+ - [error] if required cgroups subsystem aren't set up
+- [error] if the CRI endpoint does not answer
- [error] if user is not root
- [error] if the machine hostname is not a valid DNS subdomain
- [warning] if the host name cannot be reached via network lookup
@@ -323,11 +318,12 @@ Please note that:
As soon as the control plane is available, kubeadm executes following actions:
-- Labels the node as control-plane with `node-role.kubernetes.io/master=""`
-- Taints the node with `node-role.kubernetes.io/master:NoSchedule`
+- Labels the node as control-plane with `node-role.kubernetes.io/control-plane=""`
+- Taints the node with `node-role.kubernetes.io/master:NoSchedule` and `node-role.kubernetes.io/control-plane:NoSchedule`
Please note that:
+1. The `node-role.kubernetes.io/master` taint is deprecated and will be removed in kubeadm version 1.25
1. Mark control-plane phase phase can be invoked individually with the [`kubeadm init phase mark-control-plane`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-mark-control-plane) command
### Configure TLS-Bootstrapping for node joining
@@ -434,8 +430,7 @@ cluster startup problems.
Please note that:
1. `kubeadm join` preflight checks are basically a subset `kubeadm init` preflight checks
-1. Starting from 1.9, kubeadm provides better support for CRI-generic functionality; in that case, docker specific controls
- are skipped or replaced by similar controls for crictl.
+1. Starting from 1.24, kubeadm uses crictl to communicate to all known CRI endpoints.
1. Starting from 1.9, kubeadm provides support for joining nodes running on Windows; in that case, linux specific controls are skipped.
1. In any case the user can skip specific preflight checks (or eventually all preflight checks) with the `--ignore-preflight-errors` option.
diff --git a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init-phase.md b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init-phase.md
index 3f9812b260..2bab24f74d 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init-phase.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init-phase.md
@@ -105,7 +105,7 @@ By default the certs and encryption key expire after two hours.
## kubeadm init phase mark-control-plane {#cmd-phase-mark-control-plane}
-Use the following phase to label and taint the node with the `node-role.kubernetes.io/master=""` key-value pair.
+Use the following phase to label and taint the node as a control plane node.
{{< tabs name="tab-mark-control-plane" >}}
{{< tab name="mark-control-plane" include="generated/kubeadm_init_phase_mark-control-plane.md" />}}
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 a8d514ad14..fc87e796c2 100644
--- a/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md
+++ b/content/en/docs/reference/setup-tools/kubeadm/kubeadm-init.md
@@ -129,6 +129,62 @@ the [kubeadm config migrate](/docs/reference/setup-tools/kubeadm/kubeadm-config/
For more information on the fields and usage of the configuration you can navigate to our
[API reference page](/docs/reference/config-api/kubeadm-config.v1beta3/).
+### Using kubeadm init with feature gates {#feature-gates}
+
+Kubeadm supports a set of feature gates that are unique to kubeadm and can only be applied
+during cluster creation with `kubeadm init`. These features can control the behavior
+of the cluster. Feature gates are removed after a feature graduates to GA.
+
+To pass a feature gate you can either use the `--feature-gates` flag for
+`kubeadm init`, or you can add items into the `featureGates` field when you pass
+a [configuration file](/docs/reference/config-api/kubeadm-config.v1beta3/#kubeadm-k8s-io-v1beta3-ClusterConfiguration)
+using `--config`.
+
+Passing [feature gates for core Kubernetes components](/docs/reference/command-line-tools-reference/feature-gates)
+directly to kubeadm is not supported. Instead, it is possible to pass them by
+[Customizing components with the kubeadm API](/docs/setup/production-environment/tools/kubeadm/control-plane-flags/).
+
+List of feature gates:
+
+{{< table caption="kubeadm feature gates" >}}
+Feature | Default | Alpha | Beta
+:-------|:--------|:------|:-----
+`PublicKeysECDSA` | `false` | 1.19 | -
+`RootlessControlPlane` | `false` | 1.22 | -
+`UnversionedKubeletConfigMap` | `true` | 1.22 | 1.23
+{{< /table >}}
+
+{{< note >}}
+Once a feature gate goes GA it is removed from this list as its value becomes locked to `true` by default.
+{{< /note >}}
+
+Feature gate descriptions:
+
+`PublicKeysECDSA`
+: Can be used to create a cluster that uses ECDSA certificates instead of the default RSA algorithm.
+Renewal of existing ECDSA certificates is also supported using `kubeadm certs renew`, but you cannot
+switch between the RSA and ECDSA algorithms on the fly or during upgrades.
+
+`RootlessControlPlane`
+: Setting this flag configures the kubeadm deployed control plane component static Pod containers
+for `kube-apiserver`, `kube-controller-manager`, `kube-scheduler` and `etcd` to run as non-root users.
+If the flag is not set, those components run as root. You can change the value of this feature gate before
+you upgrade to a newer version of Kubernetes.
+
+`UnversionedKubeletConfigMap`
+: This flag controls the name of the {{< glossary_tooltip text="ConfigMap" term_id="configmap" >}} where kubeadm stores
+kubelet configuration data. With this flag not specified or set to `true`, the ConfigMap is named `kubelet-config`.
+If you set this flag to `false`, the name of the ConfigMap includes the major and minor version for Kubernetes
+(for example: `kubelet-config-{{< skew currentVersion >}}`). Kubeadm ensures that RBAC rules for reading and writing
+that ConfigMap are appropriate for the value you set. When kubeadm writes this ConfigMap (during `kubeadm init`
+or `kubeadm upgrade apply`), kubeadm respects the value of `UnversionedKubeletConfigMap`. When reading that ConfigMap
+(during `kubeadm join`, `kubeadm reset`, `kubeadm upgrade ...`), kubeadm attempts to use unversioned ConfigMap name first;
+if that does not succeed, kubeadm falls back to using the legacy (versioned) name for that ConfigMap.
+
+{{< note >}}
+Setting `UnversionedKubeletConfigMap` to `false` is supported but **deprecated**.
+{{< /note >}}
+
### Adding kube-proxy parameters {#kube-proxy}
For information about kube-proxy parameters in the kubeadm configuration see:
diff --git a/content/en/docs/reference/tools/_index.md b/content/en/docs/reference/tools/_index.md
index ad10ad1e7c..2ec317bd1f 100644
--- a/content/en/docs/reference/tools/_index.md
+++ b/content/en/docs/reference/tools/_index.md
@@ -30,9 +30,6 @@ resources itself.
[Helm](https://helm.sh/) is a tool for managing packages of pre-configured
Kubernetes resources. These packages are known as _Helm charts_.
-Helm is a third party managed tool for managing packages of pre-configured
-Kubernetes resources, aka Kubernetes charts.
-
Use Helm to:
* Find and use popular software packaged as Kubernetes charts
diff --git a/content/en/docs/reference/using-api/_index.md b/content/en/docs/reference/using-api/_index.md
index 2039e33e28..5e335fb191 100644
--- a/content/en/docs/reference/using-api/_index.md
+++ b/content/en/docs/reference/using-api/_index.md
@@ -108,6 +108,7 @@ part is omitted, it is treated as if `=true` is specified. For example:
- to disable `batch/v1`, set `--runtime-config=batch/v1=false`
- to enable `batch/v2alpha1`, set `--runtime-config=batch/v2alpha1`
+ - to enable a specific version of an API, such as `storage.k8s.io/v1beta1/csistoragecapacities`, set `--runtime-config=storage.k8s.io/v1beta1/csistoragecapacities`
{{< note >}}
When you enable or disable groups or resources, you need to restart the API
diff --git a/content/en/docs/reference/using-api/deprecation-guide.md b/content/en/docs/reference/using-api/deprecation-guide.md
index e34f81c757..d448344504 100644
--- a/content/en/docs/reference/using-api/deprecation-guide.md
+++ b/content/en/docs/reference/using-api/deprecation-guide.md
@@ -20,6 +20,18 @@ deprecated API versions to newer and more stable API versions.
## Removed APIs by release
+### v1.27
+
+The **v1.27** release will stop serving the following deprecated API versions:
+
+#### CSIStorageCapacity {#csistoragecapacity-v127}
+
+The **storage.k8s.io/v1beta1** API version of CSIStorageCapacity will no longer be served in v1.27.
+
+* Migrate manifests and API clients to use the **storage.k8s.io/v1** API version, available since v1.24.
+* All existing persisted objects are accessible via the new API
+* No notable changes
+
### v1.26
The **v1.26** release will stop serving the following deprecated API versions:
@@ -98,8 +110,10 @@ The **policy/v1beta1** API version of PodDisruptionBudget will no longer be serv
PodSecurityPolicy in the **policy/v1beta1** API version will no longer be served in v1.25, and the PodSecurityPolicy admission controller will be removed.
-PodSecurityPolicy replacements are still under discussion, but current use can be migrated to
-[3rd-party admission webhooks](/docs/reference/access-authn-authz/extensible-admission-controllers/) now.
+Migrate to [Pod Security Admission](/docs/concepts/security/pod-security-admission/)
+or a [3rd party admission webhook](/docs/reference/access-authn-authz/extensible-admission-controllers/).
+For a migration guide, see [Migrate from PodSecurityPolicy to the Built-In PodSecurity Admission Controller](/docs/tasks/configure-pod-container/migrate-from-psp/).
+For more information on the deprecation, see [PodSecurityPolicy Deprecation: Past, Present, and Future](/blog/2021/04/06/podsecuritypolicy-deprecation-past-present-and-future/).
#### RuntimeClass {#runtimeclass-v125}
@@ -162,7 +176,7 @@ The **authentication.k8s.io/v1beta1** API version of TokenReview is no longer se
#### SubjectAccessReview resources {#subjectaccessreview-resources-v122}
-The **authorization.k8s.io/v1beta1** API version of LocalSubjectAccessReview, SelfSubjectAccessReview, and SubjectAccessReview is no longer served as of v1.22.
+The **authorization.k8s.io/v1beta1** API version of LocalSubjectAccessReview, SelfSubjectAccessReview, SubjectAccessReview, and SelfSubjectRulesReview is no longer served as of v1.22.
* Migrate manifests and API clients to use the **authorization.k8s.io/v1** API version, available since v1.6.
* Notable changes:
@@ -324,14 +338,14 @@ to locate use of deprecated APIs.
* Update custom integrations and controllers to call the non-deprecated APIs
* Change YAML files to reference the non-deprecated APIs
- You can use the `kubectl-convert` command (`kubectl convert` prior to v1.20)
- to automatically convert an existing object:
+ You can use the `kubectl-convert` command (`kubectl convert` prior to v1.20)
+ to automatically convert an existing object:
- `kubectl-convert -f --output-version /`.
+ `kubectl-convert -f --output-version /`.
- For example, to convert an older Deployment to `apps/v1`, you can run:
+ For example, to convert an older Deployment to `apps/v1`, you can run:
- `kubectl-convert -f ./my-deployment.yaml --output-version apps/v1`
+ `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](/docs/reference/kubernetes-api/).
+ Note that this may use non-ideal default values. To learn more about a specific
+ resource, check the Kubernetes [API reference](/docs/reference/kubernetes-api/).
diff --git a/content/en/docs/reference/using-api/deprecation-policy.md b/content/en/docs/reference/using-api/deprecation-policy.md
index 49136e6773..9612e1df39 100644
--- a/content/en/docs/reference/using-api/deprecation-policy.md
+++ b/content/en/docs/reference/using-api/deprecation-policy.md
@@ -286,7 +286,7 @@ behavior get removed.
Starting in Kubernetes v1.19, making an API request to a deprecated REST API endpoint:
1. Returns a `Warning` header (as defined in [RFC7234, Section 5.5](https://tools.ietf.org/html/rfc7234#section-5.5)) in the API response.
-2. Adds a `"k8s.io/deprecated":"true"` annotation to the [audit event](/docs/tasks/debug-application-cluster/audit/) recorded for the request.
+2. Adds a `"k8s.io/deprecated":"true"` annotation to the [audit event](/docs/tasks/debug/debug-cluster/audit/) recorded for the request.
3. Sets an `apiserver_requested_deprecated_apis` gauge metric to `1` in the `kube-apiserver`
process. The metric has labels for `group`, `version`, `resource`, `subresource` that can be joined
to the `apiserver_request_total` metric, and a `removed_release` label that indicates the
diff --git a/content/en/docs/reference/using-api/server-side-apply.md b/content/en/docs/reference/using-api/server-side-apply.md
index 6b932278dc..e9f951a76a 100644
--- a/content/en/docs/reference/using-api/server-side-apply.md
+++ b/content/en/docs/reference/using-api/server-side-apply.md
@@ -125,7 +125,8 @@ this occurs, the applier has 3 options to resolve the conflicts:
* **Overwrite value, become sole manager:** If overwriting the value was
intentional (or if the applier is an automated process like a controller) the
- applier should set the `force` query parameter to true and make the request
+ applier should set the `force` query parameter to true (in kubectl, it can be done by
+ using the `--force-conflicts` flag with the apply command) and make the request
again. This forces the operation to succeed, changes the value of the field,
and removes the field from all other managers' entries in managedFields.
diff --git a/content/en/docs/setup/best-practices/node-conformance.md b/content/en/docs/setup/best-practices/node-conformance.md
index 6a3822ef70..e1140664cb 100644
--- a/content/en/docs/setup/best-practices/node-conformance.md
+++ b/content/en/docs/setup/best-practices/node-conformance.md
@@ -30,8 +30,6 @@ To run the node conformance test, perform the following steps:
Because the test framework starts a local control plane to test the kubelet,
use `http://localhost:8080` as the URL of the API server.
There are some other kubelet command line parameters you may want to use:
- * `--pod-cidr`: If you are using `kubenet`, you should specify an arbitrary CIDR
- to Kubelet, for example `--pod-cidr=10.180.0.0/24`.
* `--cloud-provider`: If you are using `--cloud-provider=gce`, you should
remove the flag to run the test.
diff --git a/content/en/docs/setup/production-environment/_index.md b/content/en/docs/setup/production-environment/_index.md
index 1611170ec9..7d8200a6b3 100644
--- a/content/en/docs/setup/production-environment/_index.md
+++ b/content/en/docs/setup/production-environment/_index.md
@@ -197,7 +197,7 @@ are some virtualization platforms that can be scripted to spin up new nodes
based on demand.
- *Set up node health checks*: For important workloads, you want to make sure
that the nodes and pods running on those nodes are healthy. Using the
-[Node Problem Detector](/docs/tasks/debug-application-cluster/monitor-node-health/)
+[Node Problem Detector](/docs/tasks/debug/debug-cluster/monitor-node-health/)
daemon, you can ensure your nodes are healthy.
## Production user management
diff --git a/content/en/docs/setup/production-environment/container-runtimes.md b/content/en/docs/setup/production-environment/container-runtimes.md
index 98c187e7bd..e373de5dbf 100644
--- a/content/en/docs/setup/production-environment/container-runtimes.md
+++ b/content/en/docs/setup/production-environment/container-runtimes.md
@@ -8,12 +8,13 @@ weight: 20
---
+{{% dockershim-removal %}}
+
You need to install a
{{< glossary_tooltip text="container runtime" term_id="container-runtime" >}}
into each node in the cluster so that Pods can run there. This page outlines
what is involved and describes related tasks for setting up nodes.
-
Kubernetes {{< skew currentVersion >}} requires that you use a runtime that
conforms with the
{{< glossary_tooltip term_id="cri" text="Container Runtime Interface">}} (CRI).
@@ -45,6 +46,41 @@ check the documentation for that version.
+## Install and configure prerequisites
+
+The following steps apply common settings for Kubernetes nodes on Linux.
+
+You can skip a particular setting if you're certain you don't need it.
+
+For more information, see [Network Plugin Requirements](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#network-plugin-requirements) or the documentation for your specific container runtime.
+
+### Forwarding IPv4 and letting iptables see bridged traffic
+
+Verify that the `br_netfilter` module is loaded by running `lsmod | grep br_netfilter`.
+
+To load it explicitly, run `sudo modprobe br_netfilter`.
+
+In order for a Linux node's iptables to correctly view bridged traffic, verify that `net.bridge.bridge-nf-call-iptables` is set to 1 in your `sysctl` config. For example:
+
+```bash
+cat <}}
+{{% tab name="Linux" %}}
+You can find this file under the path `/etc/containerd/config.toml`.
+{{% /tab %}}
+{{< tab name="Windows" >}}
+You can find this file under the path `C:\Program Files\containerd\config.toml`.
+{{< /tab >}}
+{{< /tabs >}}
- ```shell
- cat <}}
+If you installed containerd from a package (for example, RPM or `.deb`), you may find
+that the CRI integration plugin is disabled by default.
+
+You need CRI support enabled to use containerd with Kubernetes. Make sure that `cri`
+is not included in the`disabled_plugins` list within `/etc/containerd/config.toml`;
+if you made changes to that file, also restart `containerd`.
+{{< /note >}}
If you apply this change, make sure to restart containerd:
@@ -196,7 +213,7 @@ sudo systemctl restart containerd
```
When using kubeadm, manually configure the
-[cgroup driver for kubelet](/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#configure-cgroup-driver-used-by-kubelet-on-control-plane-node).
+[cgroup driver for kubelet](/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/#configuring-the-kubelet-cgroup-driver).
### CRI-O
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 6baf2e4849..d7897dfec5 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
@@ -112,10 +112,9 @@ for all control-plane nodes. Such an endpoint can be either a DNS name or an IP
be passed to `kubeadm init`. Depending on which
third-party provider you choose, you might need to set the `--pod-network-cidr` to
a provider-specific value. See [Installing a Pod network add-on](#pod-network).
-1. (Optional) Since version 1.14, `kubeadm` tries to detect the container runtime on Linux
-by using a list of well known domain socket paths. To use different container runtime or
-if there are more than one installed on the provisioned node, specify the `--cri-socket`
-argument to `kubeadm init`. See
+1. (Optional) `kubeadm` tries to detect the container runtime by using a list of well
+known endpoints. To use different container runtime or if there are more than one installed
+on the provisioned node, specify the `--cri-socket` argument to `kubeadm`. See
[Installing a runtime](/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-runtime).
1. (Optional) Unless otherwise specified, `kubeadm` uses the network interface associated
with the default gateway to set the advertise address for this particular control-plane node's API server.
@@ -299,26 +298,30 @@ and ensure it is using a privileged kubeconfig such as the kubeadm managed `/etc
### Control plane node isolation
-By default, your cluster will not schedule Pods on the control-plane node for security
-reasons. If you want to be able to schedule Pods on the control-plane node, for example for a
-single-machine Kubernetes cluster for development, run:
+By default, your cluster will not schedule Pods on the control plane nodes for security
+reasons. If you want to be able to schedule Pods on the control plane nodes,
+for example for a single machine Kubernetes cluster, run:
```bash
-kubectl taint nodes --all node-role.kubernetes.io/master-
+kubectl taint nodes --all node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master-
```
-With output looking something like:
+The output will look something like:
```
node "test-01" untainted
-taint "node-role.kubernetes.io/master:" not found
-taint "node-role.kubernetes.io/master:" not found
+...
```
-This will remove the `node-role.kubernetes.io/master` taint from any nodes that
-have it, including the control-plane node, meaning that the scheduler will then be able
+This will remove the `node-role.kubernetes.io/control-plane` and
+`node-role.kubernetes.io/master` taints from any nodes that have them,
+including the control plane nodes, meaning that the scheduler will then be able
to schedule Pods everywhere.
+{{< note >}}
+The `node-role.kubernetes.io/master` taint is deprecated and kubeadm will stop using it in version 1.25.
+{{< /note >}}
+
### Joining your nodes {#join-nodes}
The nodes are where your workloads (containers and Pods, etc) run. To add new nodes to your cluster do the following for each machine:
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 917c384766..010f0aa94b 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
@@ -15,7 +15,6 @@ This page shows how to install the `kubeadm` toolbox.
For information on 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.
-
## {{% heading "prerequisites" %}}
@@ -46,84 +45,72 @@ may [fail](https://github.com/kubernetes/kubeadm/issues/31).
If you have more than one network adapter, and your Kubernetes components are not reachable on the default
route, we recommend you add IP route(s) so Kubernetes cluster addresses go via the appropriate adapter.
-## Letting iptables see bridged traffic
-
-Make sure that the `br_netfilter` module is loaded. This can be done by running `lsmod | grep br_netfilter`. To load it explicitly call `sudo modprobe br_netfilter`.
-
-As a requirement for your Linux Node's iptables to correctly see bridged traffic, you should ensure `net.bridge.bridge-nf-call-iptables` is set to 1 in your `sysctl` config, e.g.
-
-```bash
-cat <}}.
-{{< tabs name="container_runtime" >}}
-{{% tab name="Linux nodes" %}}
-
By default, Kubernetes uses the
{{< glossary_tooltip term_id="cri" text="Container Runtime Interface">}} (CRI)
to interface with your chosen container runtime.
If you don't specify a runtime, kubeadm automatically tries to detect an installed
-container runtime by scanning through a list of well known Unix domain sockets.
-The following table lists container runtimes that kubeadm looks for, and their associated socket paths:
+container runtime by scanning through a list of known endpoints.
-{{< table caption = "Container runtimes and their socket paths" >}}
-| Runtime | Path to Unix domain socket |
-|----------------|-----------------------------------|
-| Docker Engine | `/var/run/dockershim.sock` |
-| containerd | `/run/containerd/containerd.sock` |
-| CRI-O | `/var/run/crio/crio.sock` |
+If multiple or no container runtimes are detected kubeadm will throw an error
+and will request that you specify which one you want to use.
+
+See [container runtimes](/docs/setup/production-environment/container-runtimes/)
+for more information.
+
+{{< note >}}
+Docker Engine does not implement the [CRI](/docs/concepts/architecture/cri/)
+which is a requirement for a container runtime to work with Kubernetes.
+For that reason, an additional service [cri-dockerd](https://github.com/Mirantis/cri-dockerd)
+has to be installed. cri-dockerd is a project based on the legacy built-in
+Docker Engine support that was [removed](/dockershim) from the kubelet in version 1.24.
+{{< /note >}}
+
+The tables below include the known endpoints for supported operating systems:
+
+{{< tabs name="container_runtime" >}}
+{{% tab name="Linux" %}}
+
+{{< table >}}
+| Runtime | Path to Unix domain socket |
+|------------------------------------|----------------------------------------------|
+| containerd | `unix:///var/run/containerd/containerd.sock` |
+| CRI-O | `unix:///var/run/crio/crio.sock` |
+| Docker Engine (using cri-dockerd) | `unix:///var/run/cri-dockerd.sock` |
{{< /table >}}
-
-If both Docker Engine and containerd are detected, kubeadm will give precedence to Docker Engine. This is
-needed because Docker 18.09 ships with containerd and both are detectable even if you only
-installed Docker.
-**If any other two or more runtimes are detected, kubeadm exits with an error.**
-
-The kubelet can integrate with Docker Engine using the deprecated `dockershim` adapter (the dockershim is part of the kubelet itself).
-
-See [container runtimes](/docs/setup/production-environment/container-runtimes/)
-for more information.
{{% /tab %}}
-{{% tab name="other operating systems" %}}
-By default, kubeadm uses {{< glossary_tooltip term_id="docker" >}} as the container runtime.
-The kubelet can integrate with Docker Engine using the deprecated `dockershim` adapter (the dockershim is part of the kubelet itself).
-See [container runtimes](/docs/setup/production-environment/container-runtimes/)
-for more information.
+{{% tab name="Windows" %}}
+
+{{< table >}}
+| Runtime | Path to Windows named pipe |
+|------------------------------------|----------------------------------------------|
+| containerd | `npipe:////./pipe/containerd-containerd` |
+| Docker Engine (using cri-dockerd) | `npipe:////./pipe/cri-dockerd` |
+{{< /table >}}
+
{{% /tab %}}
{{< /tabs >}}
-
## Installing kubeadm, kubelet and kubectl
You will install these packages on all of your machines:
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 4625299919..63c1f718ab 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
@@ -8,6 +8,8 @@ weight: 80
+{{% dockershim-removal %}}
+
{{< feature-state for_k8s_version="v1.11" state="stable" >}}
The lifecycle of the kubeadm CLI tool is decoupled from the
@@ -36,7 +38,7 @@ using kubeadm, rather than managing the kubelet configuration for each Node manu
### Propagating cluster-level configuration to each kubelet
You can provide the kubelet with default values to be used by `kubeadm init` and `kubeadm join`
-commands. Interesting examples include using a different CRI runtime or setting the default subnet
+commands. Interesting examples include using a different container runtime or setting the default subnet
used by services.
If you want your services to use the subnet `10.96.0.0/12` as the default for services, you can pass
@@ -78,14 +80,12 @@ networking, or other host-specific parameters. The following list provides a few
unless you are using a cloud provider. You can use the `--hostname-override` flag to override the
default behavior if you need to specify a Node name different from the machine's hostname.
-- Currently, the kubelet cannot automatically detect the cgroup driver used by the CRI runtime,
- but the value of `--cgroup-driver` must match the cgroup driver used by the CRI runtime to ensure
+- Currently, the kubelet cannot automatically detect the cgroup driver used by the container runtime,
+ but the value of `--cgroup-driver` must match the cgroup driver used by the container runtime to ensure
the health of the kubelet.
-- Depending on the CRI runtime your cluster uses, you may need to specify different flags to the kubelet.
- For instance, when using Docker, you need to specify flags such as `--network-plugin=cni`, but if you
- are using an external runtime, you need to specify `--container-runtime=remote` and specify the CRI
- endpoint using the `--container-runtime-endpoint=`.
+- To specify the container runtime you must set its endpoint with the
+`--container-runtime-endpoint=` flag.
You can specify these flags by configuring an individual kubelet's configuration in your service manager,
such as systemd.
@@ -105,10 +105,9 @@ for more information on the individual fields.
### Workflow when using `kubeadm init`
When you call `kubeadm init`, the kubelet configuration is marshalled to disk
-at `/var/lib/kubelet/config.yaml`, and also uploaded to a ConfigMap in the cluster. The ConfigMap
-is named `kubelet-config-1.X`, where `X` is the minor version of the Kubernetes version you are
-initializing. A kubelet configuration file is also written to `/etc/kubernetes/kubelet.conf` with the
-baseline cluster-wide configuration for all kubelets in the cluster. This configuration file
+at `/var/lib/kubelet/config.yaml`, and also uploaded to a `kubelet-config` ConfigMap in the `kube-system`
+namespace of the cluster. A kubelet configuration file is also written to `/etc/kubernetes/kubelet.conf`
+with the baseline cluster-wide configuration for all kubelets in the cluster. This configuration file
points to the client certificates that allow the kubelet to communicate with the API server. This
addresses the need to
[propagate cluster-level configuration to each kubelet](#propagating-cluster-level-configuration-to-each-kubelet).
@@ -123,7 +122,7 @@ KUBELET_KUBEADM_ARGS="--flag1=value1 --flag2=value2 ..."
```
In addition to the flags used when starting the kubelet, the file also contains dynamic
-parameters such as the cgroup driver and whether to use a different CRI runtime socket
+parameters such as the cgroup driver and whether to use a different container runtime socket
(`--cri-socket`).
After marshalling these two files to disk, kubeadm attempts to run the following two
@@ -139,7 +138,7 @@ If the reload and restart are successful, the normal `kubeadm init` workflow con
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
+`kubelet-config` ConfigMap and writes it to `/var/lib/kubelet/config.yaml`. The dynamic
environment file is generated in exactly the same way as `kubeadm init`.
Next, `kubeadm` runs the following two commands to load the new configuration into the kubelet:
diff --git a/content/en/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm.md b/content/en/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm.md
index 9108ecafcd..7b195a34fd 100644
--- a/content/en/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm.md
+++ b/content/en/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm.md
@@ -93,11 +93,12 @@ This may be caused by a number of problems. The most common are:
configure it properly see [Configuring a cgroup driver](/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/).
- control plane containers are crashlooping or hanging. You can check this by running `docker ps`
and investigating each container by running `docker logs`. For other container runtime see
-[Debugging Kubernetes nodes with crictl](/docs/tasks/debug-application-cluster/crictl/).
+[Debugging Kubernetes nodes with crictl](/docs/tasks/debug/debug-cluster/crictl/).
## kubeadm blocks when removing managed containers
-The following could happen if Docker halts and does not remove any Kubernetes-managed containers:
+The following could happen if the container runtime halts and does not remove
+any Kubernetes-managed containers:
```shell
sudo kubeadm reset
@@ -111,18 +112,9 @@ sudo kubeadm reset
(block)
```
-A possible solution is to restart the Docker service and then re-run `kubeadm reset`:
-
-```shell
-sudo systemctl restart docker.service
-sudo kubeadm reset
-```
-
-Inspecting the logs for docker may also be useful:
-
-```shell
-journalctl -u docker
-```
+A possible solution is to restart the container runtime and then re-run `kubeadm reset`.
+You can also use `crictl` to debug the state of the container runtime. See
+[Debugging Kubernetes nodes with crictl](/docs/tasks/debug/debug-cluster/crictl/).
## Pods in `RunContainerError`, `CrashLoopBackOff` or `Error` state
@@ -136,10 +128,6 @@ Right after `kubeadm init` there should not be any pods in these states.
it's very likely that the Pod Network add-on that you installed is somehow broken.
You might have to grant it more RBAC privileges or use a newer version. Please file
an issue in the Pod Network providers' issue tracker and get the issue triaged there.
-- If you install a version of Docker older than 1.12.1, remove the `MountFlags=slave` option
- when booting `dockerd` with `systemd` and restart `docker`. You can see the MountFlags in `/usr/lib/systemd/system/docker.service`.
- MountFlags can interfere with volumes mounted by Kubernetes, and put the Pods in `CrashLoopBackOff` state.
- The error happens when Kubernetes does not find `var/run/secrets/kubernetes.io/serviceaccount` files.
## `coredns` is stuck in the `Pending` state
@@ -163,7 +151,7 @@ services](/docs/concepts/services-networking/service/#type-nodeport) or use `Hos
## Pods are not accessible via their Service IP
-- Many network add-ons do not yet enable [hairpin mode](/docs/tasks/debug-application-cluster/debug-service/#a-pod-fails-to-reach-itself-via-the-service-ip)
+- Many network add-ons do not yet enable [hairpin mode](/docs/tasks/debug/debug-application/debug-service/#a-pod-fails-to-reach-itself-via-the-service-ip)
which allows pods to access themselves via their Service IP. This is an issue related to
[CNI](https://github.com/containernetworking/cni/issues/476). Please contact the network
add-on provider to get the latest status of their support for hairpin mode.
@@ -363,7 +351,7 @@ A known solution is to patch the kube-proxy DaemonSet to allow scheduling it on
nodes regardless of their conditions, keeping it off of other nodes until their initial guarding
conditions abate:
```
-kubectl -n kube-system patch ds kube-proxy -p='{ "spec": { "template": { "spec": { "tolerations": [ { "key": "CriticalAddonsOnly", "operator": "Exists" }, { "effect": "NoSchedule", "key": "node-role.kubernetes.io/master" } ] } } } }'
+kubectl -n kube-system patch ds kube-proxy -p='{ "spec": { "template": { "spec": { "tolerations": [ { "key": "CriticalAddonsOnly", "operator": "Exists" }, { "effect": "NoSchedule", "key": "node-role.kubernetes.io/master" }, { "effect": "NoSchedule", "key": "node-role.kubernetes.io/control-plane" } ] } } } }'
```
The tracking issue for this problem is [here](https://github.com/kubernetes/kubeadm/issues/1027).
diff --git a/content/en/docs/setup/production-environment/tools/kubespray.md b/content/en/docs/setup/production-environment/tools/kubespray.md
index c4a8c8f59e..fd594b92f8 100644
--- a/content/en/docs/setup/production-environment/tools/kubespray.md
+++ b/content/en/docs/setup/production-environment/tools/kubespray.md
@@ -39,7 +39,7 @@ Provision servers with the following [requirements](https://github.com/kubernete
* The target servers are configured to allow **IPv4 forwarding**
* **Your ssh key must be copied** to all the servers in your inventory
* **Firewalls are not managed by kubespray**. You'll need to implement appropriate rules as needed. You should disable your firewall in order to avoid any issues during deployment
-* If kubespray is ran from a non-root user account, correct privilege escalation method should be configured in the target servers and the `ansible_become` flag or command parameters `--become` or `-b` should be specified
+* If kubespray is run from a non-root user account, correct privilege escalation method should be configured in the target servers and the `ansible_become` flag or command parameters `--become` or `-b` should be specified
Kubespray provides the following utilities to help provision your environment:
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
deleted file mode 100644
index add81bd71e..0000000000
--- a/content/en/docs/setup/production-environment/windows/intro-windows-in-kubernetes.md
+++ /dev/null
@@ -1,997 +0,0 @@
----
-reviewers:
-- jayunit100
-- jsturtevant
-- marosset
-- perithompson
-title: Windows containers in Kubernetes
-content_type: concept
-weight: 65
----
-
-
-
-Windows applications constitute a large portion of the services and applications that
-run in many organizations. [Windows containers](https://aka.ms/windowscontainers)
-provide a way to encapsulate processes and package dependencies, making it easier
-to use DevOps practices and follow cloud native patterns for Windows applications.
-
-Organizations with investments in Windows-based applications and Linux-based
-applications don't have to look for separate orchestrators to manage their workloads,
-leading to increased operational efficiencies across their deployments, regardless
-of operating system.
-
-
-
-## Windows nodes in Kubernetes
-
-To enable the orchestration of Windows containers in Kubernetes, include Windows nodes
-in your existing Linux cluster. Scheduling Windows containers in
-{{< glossary_tooltip text="Pods" term_id="pod" >}} on Kubernetes is similar to
-scheduling Linux-based containers.
-
-In order to run Windows containers, your Kubernetes cluster must include
-multiple operating systems.
-While you can only run the {{< glossary_tooltip text="control plane" term_id="control-plane" >}} on Linux, you can deploy worker nodes running either Windows or Linux depending on your workload needs.
-
-Windows {{< glossary_tooltip text="nodes" term_id="node" >}} are
-[supported](#windows-os-version-support) provided that the operating system is
-Windows Server 2019.
-
-This document uses the term *Windows containers* to mean Windows containers with
-process isolation. Kubernetes does not support running Windows containers with
-[Hyper-V isolation](https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/hyperv-container).
-
-## Resource management
-
-On Linux nodes, {{< glossary_tooltip text="cgroups" term_id="cgroup" >}} are used
-as a pod boundary for resource control. Containers are created within that boundary
-for network, process and file system isolation. The Linux cgroup APIs can be used
-to gather CPU, I/O, and memory use statistics.
-
-In contrast, Windows uses a _job object_ per container with a system namespace filter
-to contain all processes in a container and provide logical isolation from the
-host.
-(Job objects are a Windows process isolation mechanism and are different from
-what Kubernetes refers to as a {{< glossary_tooltip term_id="job" text="Job" >}}).
-
-There is no way to run a Windows container without the namespace filtering in
-place. This means that system privileges cannot be asserted in the context of the
-host, and thus privileged containers are not available on Windows.
-Containers cannot assume an identity from the host because the Security Account Manager
-(SAM) is separate.
-
-#### Memory reservations {#resource-management-memory}
-
-Windows does not have an out-of-memory process killer as Linux does. Windows always
-treats all user-mode memory allocations as virtual, and pagefiles are mandatory
-(on Linux, the kubelet will by default not start with swap space enabled).
-
-Windows nodes do not overcommit memory for processes running in containers. The
-net effect is that Windows won't reach out of memory conditions the same way Linux
-does, and processes page to disk instead of being subject to out of memory (OOM)
-termination. If memory is over-provisioned and all physical memory is exhausted,
-then paging can slow down performance.
-
-You can place bounds on memory use for workloads using the kubelet
-parameters `--kubelet-reserve` and/or `--system-reserve`; these account
-for memory usage on the node (outside of containers), and reduce
-[NodeAllocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable).
-As you deploy workloads, set resource limits on containers. This also subtracts from
-`NodeAllocatable` and prevents the scheduler from adding more pods once a node is full.
-
-{{< note >}}
-When you set memory resource limits for Windows containers, you should either set a
-limit and leave the memory request unspecified, or set the request equal to the limit.
-{{< /note >}}
-
-On Windows, good practice to avoid over-provisioning is to configure the kubelet
-with a system reserved memory of at least 2GiB to account for Windows, Kubernetes
-and container runtime overheads.
-
-#### CPU reservations {#resource-management-cpu}
-
-To account for CPU use by the operating system, the container runtime, and by
-Kubernetes host processes such as the kubelet, you can (and should) reserve a
-percentage of total CPU. You should determine this CPU reservation taking account of
-to the number of CPU cores available on the node. To decide on the CPU percentage to
-reserve, identify the maximum pod density for each node and monitor the CPU usage of
-the system services running there, then choose a value that meets your workload needs.
-
-You can place bounds on CPU usage for workloads using the
-kubelet parameters `--kubelet-reserve` and/or `--system-reserve` to
-account for CPU usage on the node (outside of containers).
-This reduces `NodeAllocatable`.
-The cluster-wide scheduler then takes this reservation into account when determining
-pod placement.
-
-On Windows, the kubelet supports a command-line flag to set the priority of the
-kubelet process: `--windows-priorityclass`. This flag allows the kubelet process to get
-more CPU time slices when compared to other processes running on the Windows host.
-More information on the allowable values and their meaning is available at
-[Windows Priority Classes](https://docs.microsoft.com/en-us/windows/win32/procthread/scheduling-priorities#priority-class).
-To ensure that running Pods do not starve the kubelet of CPU cycles, set this flag to `ABOVE_NORMAL_PRIORITY_CLASS` or above.
-
-## Compatibility and limitations {#limitations}
-
-Some node features are only available if you use a specific
-[container runtime](#container-runtime); others are not available on Windows nodes,
-including:
-
-* HugePages: not supported for Windows containers
-* Privileged containers: not supported for Windows containers
-* TerminationGracePeriod: requires containerD
-
-Not all features of shared namespaces are supported. See [API compatibility](#api)
-for more details.
-
-See [Windows OS version compatibility](#windows-os-version-support) for details on
-the Windows versions that Kubernetes is tested against.
-
-From an API and kubectl perspective, Windows containers behave in much the same
-way as Linux-based containers. However, there are some notable differences in key
-functionality which are outlined in this section.
-
-### Comparison with Linux {#compatibility-linux-similarities}
-
-Key Kubernetes elements work the same way in Windows as they do in Linux. This
-section refers to several key workload enablers and how they map to Windows.
-
-* [Pods](/docs/concepts/workloads/pods/)
-
- A Pod is the basic building block of Kubernetes–the smallest and simplest unit in
- the Kubernetes object model that you create or deploy. You may not deploy Windows and
- Linux containers in the same Pod. All containers in a Pod are scheduled onto a single
- Node where each Node represents a specific platform and architecture. The following
- Pod capabilities, properties and events are supported with Windows containers:
-
- * Single or multiple containers per Pod with process isolation and volume sharing
- * Pod `status` fields
- * Readiness and Liveness probes
- * postStart & preStop container lifecycle events
- * ConfigMap, Secrets: as environment variables or volumes
- * `emptyDir` volumes
- * Named pipe host mounts
- * Resource limits
- * OS field:
- {{< feature-state for_k8s_version="v1.23" state="alpha" >}}
- `.spec.os.name` should be set to `windows` to indicate that the current Pod uses Windows containers.
- `IdentifyPodOS` feature gate needs to be enabled for this field to be recognized and used by control plane
- components and kubelet.
- {{< note >}}
- If the `IdentifyPodOS` feature gate is enabled and you set the `.spec.os.name` field to `windows`, you must not set the following fields in the `.spec` of that Pod:
- * `spec.hostPID`
- * `spec.hostIPC`
- * `spec.securityContext.seLinuxOptions`
- * `spec.securityContext.seccompProfile`
- * `spec.securityContext.fsGroup`
- * `spec.securityContext.fsGroupChangePolicy`
- * `spec.securityContext.sysctls`
- * `spec.shareProcessNamespace`
- * `spec.securityContext.runAsUser`
- * `spec.securityContext.runAsGroup`
- * `spec.securityContext.supplementalGroups`
- * `spec.containers[*].securityContext.seLinuxOptions`
- * `spec.containers[*].securityContext.seccompProfile`
- * `spec.containers[*].securityContext.capabilities`
- * `spec.containers[*].securityContext.readOnlyRootFilesystem`
- * `spec.containers[*].securityContext.privileged`
- * `spec.containers[*].securityContext.allowPrivilegeEscalation`
- * `spec.containers[*].securityContext.procMount`
- * `spec.containers[*].securityContext.runAsUser`
- * `spec.containers[*].securityContext.runAsGroup`
-
- Note: In this table, wildcards (*) indicate all elements in a list. For example, spec.containers[*].securityContext refers to the Security Context object for all defined containers. If not, Pod API validation would fail causing admission failures.
- {{< /note >}}
-
-* [Workload resources](/docs/concepts/workloads/controllers/) including:
- * ReplicaSet
- * Deployments
- * StatefulSets
- * DaemonSet
- * Job
- * CronJob
- * ReplicationController
-* {{< glossary_tooltip text="Services" term_id="service" >}}
- See [Load balancing and Services](#load-balancing-and-services) for more details.
-
-Pods, workload resources, and Services are critical elements to managing Windows
-workloads on Kubernetes. However, on their own they are not enough to enable
-the proper lifecycle management of Windows workloads in a dynamic cloud native
-environment. Kubernetes also supports:
-
-* `kubectl exec`
-* Pod and container metrics
-* {{< glossary_tooltip text="Horizontal pod autoscaling" term_id="horizontal-pod-autoscaler" >}}
-* {{< glossary_tooltip text="Resource quotas" term_id="resource-quota" >}}
-* Scheduler preemption
-
-
-### Networking on Windows nodes {#compatibility-networking}
-
-Networking for Windows containers is exposed through
-[CNI plugins](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/).
-Windows containers function similarly to virtual machines in regards to
-networking. Each container has a virtual network adapter (vNIC) which is connected
-to a Hyper-V virtual switch (vSwitch). The Host Networking Service (HNS) and the
-Host Compute Service (HCS) work together to create containers and attach container
-vNICs to networks. HCS is responsible for the management of containers whereas HNS
-is responsible for the management of networking resources such as:
-
-* Virtual networks (including creation of vSwitches)
-* Endpoints / vNICs
-* Namespaces
-* Policies including packet encapsulations, load-balancing rules, ACLs, and NAT rules.
-
-#### Container networking {#networking}
-
-The Windows HNS and vSwitch implement namespacing and can
-create virtual NICs as needed for a pod or container. However, many configurations such
-as DNS, routes, and metrics are stored in the Windows registry database rather than as
-files inside `/etc`, which is how Linux stores those configurations. The Windows registry for the container
-is separate from that of the host, so concepts like mapping `/etc/resolv.conf` from
-the host into a container don't have the same effect they would on Linux. These must
-be configured using Windows APIs run in the context of that container. Therefore
-CNI implementations need to call the HNS instead of relying on file mappings to pass
-network details into the pod or container.
-
-The following networking functionality is _not_ supported on Windows nodes:
-
-* Host networking mode
-* Local NodePort access from the node itself (works for other nodes or external clients)
-* More than 64 backend pods (or unique destination addresses) for a single Service
-* IPv6 communication between Windows pods connected to overlay networks
-* Local Traffic Policy in non-DSR mode
-* Outbound communication using the ICMP protocol via the `win-overlay`, `win-bridge`, or using the 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, and this means:
- * ICMP packets directed to destinations within the same network (such as pod to pod communication via ping) work as expected and without any limitations;
- * TCP/UDP packets work as expected and without any limitations;
- * 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, you can substitute `ping ` with `curl ` to get some debugging insight into connectivity with the outside world.
-
-Overlay networking support in kube-proxy is a beta feature. In addition, it requires
-[KB4482887](https://support.microsoft.com/en-us/help/4482887/windows-10-update-kb4482887)
-to be installed on Windows Server 2019.
-
-#### Network modes
-
-Windows supports five different networking drivers/modes: L2bridge, L2tunnel,
-Overlay (beta), Transparent, and NAT. In a heterogeneous cluster with Windows and Linux
-worker nodes, you need to select a networking solution that is compatible on both
-Windows and Linux. The following out-of-tree plugins are supported on Windows,
-with recommendations on when to use each CNI:
-
-| Network Driver | Description | Container Packet Modifications | Network Plugins | Network Plugin Characteristics |
-| -------------- | ----------- | ------------------------------ | --------------- | ------------------------------ |
-| L2bridge | Containers are attached to an external vSwitch. Containers are attached to the underlay network, although the physical network doesn't need to learn the container MACs because they are rewritten on ingress/egress. | MAC is rewritten to host MAC, IP may be rewritten to host IP using HNS OutboundNAT policy. | [win-bridge](https://github.com/containernetworking/plugins/tree/master/plugins/main/windows/win-bridge), [Azure-CNI](https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md), Flannel host-gateway uses win-bridge | win-bridge uses L2bridge network mode, connects containers to the underlay of hosts, offering best performance. Requires user-defined routes (UDR) for inter-node connectivity. |
-| L2Tunnel | This is a special case of l2bridge, but only used on Azure. All packets are sent to the virtualization host where SDN policy is applied. | MAC rewritten, IP visible on the underlay network | [Azure-CNI](https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md) | Azure-CNI allows integration of containers with Azure vNET, and allows them to leverage the set of capabilities that [Azure Virtual Network provides](https://azure.microsoft.com/en-us/services/virtual-network/). For example, securely connect to Azure services or use Azure NSGs. See [azure-cni for some examples](https://docs.microsoft.com/en-us/azure/aks/concepts-network#azure-cni-advanced-networking) |
-| Overlay (Overlay networking for Windows in Kubernetes is in *alpha* stage) | Containers are given a vNIC connected to an external vSwitch. Each overlay network gets its own IP subnet, defined by a custom IP prefix.The overlay network driver uses VXLAN encapsulation. | Encapsulated with an outer header. | [win-overlay](https://github.com/containernetworking/plugins/tree/master/plugins/main/windows/win-overlay), Flannel VXLAN (uses win-overlay) | win-overlay should be used when virtual container networks are desired to be isolated from underlay of hosts (e.g. for security reasons). Allows for IPs to be re-used for different overlay networks (which have different VNID tags) if you are restricted on IPs in your datacenter. This option requires [KB4489899](https://support.microsoft.com/help/4489899) on Windows Server 2019. |
-| Transparent (special use case for [ovn-kubernetes](https://github.com/openvswitch/ovn-kubernetes)) | Requires an external vSwitch. Containers are attached to an external vSwitch which enables intra-pod communication via logical networks (logical switches and routers). | Packet is encapsulated either via [GENEVE](https://datatracker.ietf.org/doc/draft-gross-geneve/) or [STT](https://datatracker.ietf.org/doc/draft-davie-stt/) tunneling to reach pods which are not on the same host. Packets are forwarded or dropped via the tunnel metadata information supplied by the ovn network controller. NAT is done for north-south communication. | [ovn-kubernetes](https://github.com/openvswitch/ovn-kubernetes) | [Deploy via ansible](https://github.com/openvswitch/ovn-kubernetes/tree/master/contrib). Distributed ACLs can be applied via Kubernetes policies. IPAM support. Load-balancing can be achieved without kube-proxy. NATing is done without using iptables/netsh. |
-| NAT (*not used in Kubernetes*) | Containers are given a vNIC connected to an internal vSwitch. DNS/DHCP is provided using an internal component called [WinNAT](https://techcommunity.microsoft.com/t5/virtualization/windows-nat-winnat-capabilities-and-limitations/ba-p/382303) | MAC and IP is rewritten to host MAC/IP. | [nat](https://github.com/Microsoft/windows-container-networking/tree/master/plugins/nat) | Included here for completeness |
-
-As outlined above, the [Flannel](https://github.com/coreos/flannel)
-CNI [meta plugin](https://github.com/containernetworking/plugins/tree/master/plugins/meta/flannel)
-is also [supported](https://github.com/containernetworking/plugins/tree/master/plugins/meta/flannel#windows-support-experimental) on Windows via the
-[VXLAN network backend](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan) (**alpha support** ; delegates to win-overlay)
-and [host-gateway network backend](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw) (stable support; delegates to win-bridge).
-
-This plugin supports delegating to one of the reference CNI plugins (win-overlay,
-win-bridge), to work in conjunction with Flannel daemon on Windows (Flanneld) for
-automatic node subnet lease assignment and HNS network creation. This plugin reads
-in its own configuration file (cni.conf), and aggregates it with the environment
-variables from the FlannelD generated subnet.env file. It then delegates to one of
-the reference CNI plugins for network plumbing, and sends the correct configuration
-containing the node-assigned subnet to the IPAM plugin (for example: `host-local`).
-
-For Node, Pod, and Service objects, the following network flows are supported for
-TCP/UDP traffic:
-
-* Pod → Pod (IP)
-* Pod → Pod (Name)
-* Pod → Service (Cluster IP)
-* Pod → Service (PQDN, but only if there are no ".")
-* Pod → Service (FQDN)
-* Pod → external (IP)
-* Pod → external (DNS)
-* Node → Pod
-* Pod → Node
-
-#### CNI plugin limitations
-
-* Windows reference network plugins win-bridge and win-overlay do not implement
- [CNI spec](https://github.com/containernetworking/cni/blob/master/SPEC.md) v0.4.0,
- due to a missing `CHECK` implementation.
-* The Flannel VXLAN CNI plugin has the following limitations on Windows:
-
-1. Node-pod connectivity isn't possible by design. It's only possible for local pods with Flannel v0.12.0 (or higher).
-2. Flannel is restricted to using VNI 4096 and UDP port 4789. See the official
- [Flannel VXLAN](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan)
- backend docs for more details on these parameters.
-
-#### IP address management (IPAM) {#ipam}
-
-The following IPAM options are supported on Windows:
-
-* [host-local](https://github.com/containernetworking/plugins/tree/master/plugins/ipam/host-local)
-* HNS IPAM (Inbox platform IPAM, this is a fallback when no IPAM is set)
-* [azure-vnet-ipam](https://github.com/Azure/azure-container-networking/blob/master/docs/ipam.md) (for azure-cni only)
-
-#### Load balancing and Services
-
-A Kubernetes {{< glossary_tooltip text="Service" term_id="service" >}} is an abstraction
-that defines a logical set of Pods and a means to access them over a network.
-In a cluster that includes Windows nodes, you can use the following types of Service:
-
- * `NodePort`
- * `ClusterIP`
- * `LoadBalancer`
- * `ExternalName`
-
-{{< warning >}}
-There are known issue with NodePort services on overlay networking, if the target destination node is running Windows Server 2022.
-To avoid the issue entirely, you can configure the service with `externalTrafficPolicy: Local`.
-
-There are known issues with pod to pod connectivity on l2bridge network on Windows Server 2022 with KB5005619 or higher installed.
-To workaround the issue and restore pod-pod connectivity, you can disable the WinDSR feature in kube-proxy.
-
-These issues require OS fixes.
-Please follow https://github.com/microsoft/Windows-Containers/issues/204 for updates.
-{{< /warning >}}
-
-Windows container networking differs in some important ways from Linux networking.
-The [Microsoft documentation for Windows Container Networking](https://docs.microsoft.com/en-us/virtualization/windowscontainers/container-networking/architecture) provides
-additional details and background.
-
-On Windows, you can use the following settings to configure Services and load
-balancing behavior:
-
-{{< table caption="Windows Service Settings" >}}
-| Feature | Description | Supported Kubernetes version | Supported Windows OS build | How to enable |
-| ------- | ----------- | ----------------------------- | -------------------------- | ------------- |
-| Session affinity | Ensures that connections from a particular client are passed to the same Pod each time. | v1.20+ | [Windows Server vNext Insider Preview Build 19551](https://blogs.windows.com/windowsexperience/2020/01/28/announcing-windows-server-vnext-insider-preview-build-19551/) (or higher) | Set `service.spec.sessionAffinity` to "ClientIP" |
-| Direct Server Return (DSR) | Load balancing mode where the IP address fixups and the LBNAT occurs at the container vSwitch port directly; service traffic arrives with the source IP set as the originating pod IP. | v1.20+ | Windows Server 2019 | Set the following flags in kube-proxy: `--feature-gates="WinDSR=true" --enable-dsr=true` |
-| Preserve-Destination | Skips DNAT of service traffic, thereby preserving the virtual IP of the target service in packets reaching the backend Pod. Also disables node-node forwarding. | v1.20+ | Windows Server, version 1903 (or higher) | Set `"preserve-destination": "true"` in service annotations and enable DSR in kube-proxy. |
-| IPv4/IPv6 dual-stack networking | Native IPv4-to-IPv4 in parallel with IPv6-to-IPv6 communications to, from, and within a cluster | v1.19+ | Windows Server, version 2019 | See [IPv4/IPv6 dual-stack](#ipv4ipv6-dual-stack) |
-| Client IP preservation | Ensures that source IP of incoming ingress traffic gets preserved. Also disables node-node forwarding. | v1.20+ | Windows Server, version 2019 | Set `service.spec.externalTrafficPolicy` to "Local" and enable DSR in kube-proxy |
-{{< /table >}}
-
-##### Session affinity
-
-Setting the maximum session sticky time for Windows services using
-`service.spec.sessionAffinityConfig.clientIP.timeoutSeconds` is not supported.
-
-#### DNS {#dns-limitations}
-
-* ClusterFirstWithHostNet is not supported for DNS. Windows treats all names with a
- `.` as a FQDN and skips FQDN resolution
-* On Linux, you have a DNS suffix list, which is used when trying to resolve PQDNs. On
- Windows, you can only have 1 DNS suffix, which is the DNS suffix associated with that
- pod's namespace (mydns.svc.cluster.local for example). Windows can resolve FQDNs
- and services or names resolvable with just that suffix. For example, a pod spawned
- in the default namespace, will have the DNS suffix **default.svc.cluster.local**.
- Inside a Windows pod, you can resolve both **kubernetes.default.svc.cluster.local**
- and **kubernetes**, but not the in-betweens, like **kubernetes.default** or
- **kubernetes.default.svc**.
-* On Windows, there are multiple DNS resolvers that can be used. As these come with
- slightly different behaviors, using the `Resolve-DNSName` utility for name query
- resolutions is recommended.
-
-#### IPv6 networking
-
-Kubernetes on Windows does not support single-stack "IPv6-only" networking. However,
-dual-stack IPv4/IPv6 networking for pods and nodes with single-family services
-is supported.
-
-You can use IPv4/IPv6 dual-stack networking with `l2bridge` networks. See [configure IPv4/IPv6 dual stack](/docs/concepts/services-networking/dual-stack#configure-ipv4-ipv6-dual-stack) for more details.
-
-{{< note >}}
-Overlay (VXLAN) networks on Windows do not support dual-stack networking.
-{{< /note >}}
-
-### Persistent storage {#compatibility-storage}
-
-Windows has a layered filesystem driver to mount container layers and create a copy
-filesystem based on NTFS. All file paths in the container are resolved only within
-the context of that container.
-
-* With Docker, volume mounts can only target a directory in the container, and not
- an individual file. This limitation does not exist with CRI-containerD runtime.
-* Volume mounts cannot project files or directories back to the host filesystem.
-* Read-only filesystems are not supported because write access is always required
- for the Windows registry and SAM database. However, read-only volumes are supported.
-* Volume user-masks and permissions are not available. Because the SAM is not shared
- between the host & container, there's no mapping between them. All permissions are
- resolved within the context of the container.
-
-As a result, the following storage functionality is not supported on Windows nodes:
-
-* Volume subpath mounts: only the entire volume can be mounted in a Windows container
-* Subpath volume mounting for Secrets
-* Host mount projection
-* Read-only root filesystem (mapped volumes still support `readOnly`)
-* Block device mapping
-* Memory as the storage medium (for example, `emptyDir.medium` set to `Memory`)
-* File system features like uid/gid; per-user Linux filesystem permissions
-* DefaultMode (due to UID/GID dependency)
-* NFS based storage/volume support
-* Expanding the mounted volume (resizefs)
-
-Kubernetes {{< glossary_tooltip text="volumes" term_id="volume" >}} enable complex
-applications, with data persistence and Pod volume sharing requirements, to be deployed
-on Kubernetes. Management of persistent volumes associated with a specific storage
-back-end or protocol includes actions such as provisioning/de-provisioning/resizing
-of volumes, attaching/detaching a volume to/from a Kubernetes node and
-mounting/dismounting a volume to/from individual containers in a pod that needs to
-persist data.
-
-The code implementing these volume management actions for a specific storage back-end
-or protocol is shipped in the form of a Kubernetes volume
-[plugin](/docs/concepts/storage/volumes/#types-of-volumes).
-The following broad classes of Kubernetes volume plugins are supported on Windows:
-
-##### In-tree volume plugins
-
-Code associated with in-tree volume plugins ship as part of the core Kubernetes code
-base. Deployment of in-tree volume plugins do not require installation of additional
-scripts or deployment of separate containerized plugin components. These plugins can
-handle provisioning/de-provisioning and resizing of volumes in the storage backend,
-attaching/detaching of volumes to/from a Kubernetes node and mounting/dismounting a
-volume to/from individual containers in a pod. The following in-tree plugins support
-persistent storage on Windows nodes:
-
-* [`awsElasticBlockStore`](/docs/concepts/storage/volumes/#awselasticblockstore)
-* [`azureDisk`](/docs/concepts/storage/volumes/#azuredisk)
-* [`azureFile`](/docs/concepts/storage/volumes/#azurefile)
-* [`gcePersistentDisk`](/docs/concepts/storage/volumes/#gcepersistentdisk)
-* [`vsphereVolume`](/docs/concepts/storage/volumes/#vspherevolume)
-
-#### FlexVolume plugins
-
-Code associated with [FlexVolume](/docs/concepts/storage/volumes/#flexVolume)
-plugins ship as out-of-tree scripts or binaries that need to be deployed directly
-on the host. FlexVolume plugins handle attaching/detaching of volumes to/from a
-Kubernetes node and mounting/dismounting a volume to/from individual containers
-in a pod. Provisioning/De-provisioning of persistent volumes associated
-with FlexVolume plugins may be handled through an external provisioner that
-is typically separate from the FlexVolume plugins. The following FlexVolume
-[plugins](https://github.com/Microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows),
-deployed as PowerShell scripts on the host, support Windows nodes:
-
-* [SMB](https://github.com/microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows/plugins/microsoft.com~smb.cmd)
-* [iSCSI](https://github.com/microsoft/K8s-Storage-Plugins/tree/master/flexvolume/windows/plugins/microsoft.com~iscsi.cmd)
-
-#### CSI plugins
-
-{{< feature-state for_k8s_version="v1.19" state="beta" >}}
-
-Code associated with {{< glossary_tooltip text="CSI" term_id="csi" >}} plugins ship
-as out-of-tree scripts and binaries that are typically distributed as container
-images and deployed using standard Kubernetes constructs like DaemonSets and
-StatefulSets.
-CSI plugins handle a wide range of volume management actions in Kubernetes:
-provisioning/de-provisioning/resizing of volumes, attaching/detaching of volumes
-to/from a Kubernetes node and mounting/dismounting a volume to/from individual
-containers in a pod, backup/restore of persistent data using snapshots and cloning.
-CSI plugins typically consist of node plugins (that run on each node as a DaemonSet)
-and controller plugins.
-
-CSI node plugins (especially those associated with persistent volumes exposed as
-either block devices or over a shared file-system) need to perform various privileged
-operations like scanning of disk devices, mounting of file systems, etc. These
-operations differ for each host operating system. For Linux worker nodes, containerized
-CSI node plugins are typically deployed as privileged containers. For Windows worker
-nodes, privileged operations for containerized CSI node plugins is supported using
-[csi-proxy](https://github.com/kubernetes-csi/csi-proxy), a community-managed,
-stand-alone binary that needs to be pre-installed on each Windows node.
-
-For more details, refer to the deployment guide of the CSI plugin you wish to deploy.
-
-### Command line options for the kubelet {#kubelet-compatibility}
-
-The behavior of some kubelet command line options behave differently on Windows, as described below:
-
-* The `--windows-priorityclass` lets you set the scheduling priority of the kubelet process (see [CPU resource management](#resource-management-cpu))
-* The `--kubelet-reserve`, `--system-reserve` , and `--eviction-hard` flags update [NodeAllocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable)
-* Eviction by using `--enforce-node-allocable` is not implemented
-* Eviction by using `--eviction-hard` and `--eviction-soft` are not implemented
-* A kubelet running on a Windows node does not have memory
- restrictions. `--kubelet-reserve` and `--system-reserve` do not set limits on
- kubelet or processes running on the host. This means kubelet or a process on the host
- could cause memory resource starvation outside the node-allocatable and scheduler.
-* The `MemoryPressure` Condition is not implemented
-* The kubelet does not take OOM eviction actions
-
-### API compatibility {#api}
-
-There are no differences in how most of the Kubernetes APIs work for Windows. The
-subtleties around what's different come down to differences in the OS and container
-runtime. In certain situations, some properties on workload resources were designed
-under the assumption that they would be implemented on Linux, and fail to run on Windows.
-
-At a high level, these OS concepts are different:
-
-* Identity - Linux uses userID (UID) and groupID (GID) which
- are represented as integer types. User and group names
- are not canonical - they are just an alias in `/etc/groups`
- or `/etc/passwd` back to UID+GID. Windows uses a larger binary
- [security identifier](https://docs.microsoft.com/en-us/windows/security/identity-protection/access-control/security-identifiers) (SID)
- which is stored in the Windows Security Access Manager (SAM) database. This
- database is not shared between the host and containers, or between containers.
-* File permissions - Windows uses an access control list based on (SIDs), whereas
- POSIX systems such as Linux use a bitmask based on object permissions and UID+GID,
- plus _optional_ access control lists.
-* File paths - the convention on Windows is to use `\` instead of `/`. The Go IO
- libraries typically accept both and just make it work, but when you're setting a
- path or command line that's interpreted inside a container, `\` may be needed.
-* Signals - Windows interactive apps handle termination differently, and can
- implement one or more of these:
- * A UI thread handles well-defined messages including `WM_CLOSE`.
- * Console apps handle Ctrl-C or Ctrl-break using a Control Handler.
- * Services register a Service Control Handler function that can accept
- `SERVICE_CONTROL_STOP` control codes.
-
-Container exit codes follow the same convention where 0 is success, and nonzero is failure.
-The specific error codes may differ across Windows and Linux. However, exit codes
-passed from the Kubernetes components (kubelet, kube-proxy) are unchanged.
-
-##### Field compatibility for container specifications {#compatibility-v1-pod-spec-containers}
-
-The following list documents differences between how Pod container specifications
-work between Windows and Linux:
-
-* Huge pages are not implemented in the Windows container
- runtime, and are not available. They require [asserting a user
- privilege](https://docs.microsoft.com/en-us/windows/desktop/Memory/large-page-support)
- that's not configurable for containers.
-* `requests.cpu` and `requests.memory` - requests are subtracted
- from node available resources, so they can be used to avoid overprovisioning a
- node. However, they cannot be used to guarantee resources in an overprovisioned
- node. They should be applied to all containers as a best practice if the operator
- wants to avoid overprovisioning entirely.
-* `securityContext.allowPrivilegeEscalation` -
- not possible on Windows; none of the capabilities are hooked up
-* `securityContext.capabilities` -
- POSIX capabilities are not implemented on Windows
-* `securityContext.privileged` -
- Windows doesn't support privileged containers
-* `securityContext.procMount` -
- Windows doesn't have a `/proc` filesystem
-* `securityContext.readOnlyRootFilesystem` -
- not possible on Windows; write access is required for registry & system
- processes to run inside the container
-* `securityContext.runAsGroup` -
- not possible on Windows as there is no GID support
-* `securityContext.runAsNonRoot` -
- this setting will prevent containers from running as `ContainerAdministrator`
- which is the closest equivalent to a root user on Windows.
-* `securityContext.runAsUser` -
- use [`runAsUserName`](/docs/tasks/configure-pod-container/configure-runasusername)
- instead
-* `securityContext.seLinuxOptions` -
- not possible on Windows as SELinux is Linux-specific
-* `terminationMessagePath` -
- this has some limitations in that Windows doesn't support mapping single files. The
- default value is `/dev/termination-log`, which does work because it does not
- exist on Windows by default.
-
-##### Field compatibility for Pod specifications {#compatibility-v1-pod}
-
-The following list documents differences between how Pod specifications work between Windows and Linux:
-
-* `hostIPC` and `hostpid` - host namespace sharing is not possible on Windows
-* `hostNetwork` - There is no Windows OS support to share the host network
-* `dnsPolicy` - setting the Pod `dnsPolicy` to `ClusterFirstWithHostNet` is
- not supported on Windows because host networking is not provided. Pods always
- run with a container network.
-* `podSecurityContext` (see below)
-* `shareProcessNamespace` - this is a beta feature, and depends on Linux namespaces
- which are not implemented on Windows. Windows cannot share process namespaces or
- the container's root filesystem. Only the network can be shared.
-* `terminationGracePeriodSeconds` - this is not fully implemented in Docker on Windows,
- see the [GitHub issue](https://github.com/moby/moby/issues/25982).
- The behavior today is that the ENTRYPOINT process is sent CTRL_SHUTDOWN_EVENT,
- then Windows waits 5 seconds by default, and finally shuts down
- all processes using the normal Windows shutdown behavior. The 5
- second default is actually in the Windows registry
- [inside the container](https://github.com/moby/moby/issues/25982#issuecomment-426441183),
- so it can be overridden when the container is built.
-* `volumeDevices` - this is a beta feature, and is not implemented on Windows.
- Windows cannot attach raw block devices to pods.
-* `volumes`
- * If you define an `emptyDir` volume, you cannot set its volume source to `memory`.
-* You cannot enable `mountPropagation` for volume mounts as this is not
- supported on Windows.
-
-##### Field compatibility for Pod security context {#compatibility-v1-pod-spec-containers-securitycontext}
-
-None of the Pod [`securityContext`](/docs/reference/kubernetes-api/workload-resources/pod-v1/#security-context) fields work on Windows.
-
-### Node problem detector
-
-The node problem detector (see
-[Monitor Node Health](/docs/tasks/debug-application-cluster/monitor-node-health/))
-is not compatible with Windows.
-
-### Pause container
-
-In a Kubernetes Pod, an infrastructure or “pause” container is first created
-to host the container. In Linux, the cgroups and namespaces that make up a pod
-need a process to maintain their continued existence; the pause process provides
-this. Containers that belong to the same pod, including infrastructure and worker
-containers, share a common network endpoint (same IPv4 and / or IPv6 address, same
-network port spaces). Kubernetes uses pause containers to allow for worker containers
-crashing or restarting without losing any of the networking configuration.
-
-Kubernetes maintains a multi-architecture image that includes support for Windows.
-For Kubernetes v{{< skew currentVersion >}} the recommended pause image is `k8s.gcr.io/pause:3.6`.
-The [source code](https://github.com/kubernetes/kubernetes/tree/master/build/pause)
-is available on GitHub.
-
-Microsoft maintains a different multi-architecture image, with Linux and Windows
-amd64 support, that you can find as `mcr.microsoft.com/oss/kubernetes/pause:3.6`.
-This image is built from the same source as the Kubernetes maintained image but
-all of the Windows binaries are [authenticode signed](https://docs.microsoft.com/en-us/windows-hardware/drivers/install/authenticode) by Microsoft.
-The Kubernetes project recommends using the Microsoft maintained image if you are
-deploying to a production or production-like environment that requires signed
-binaries.
-
-### Container runtimes {#container-runtime}
-
-You need to install a
-{{< glossary_tooltip text="container runtime" term_id="container-runtime" >}}
-into each node in the cluster so that Pods can run there.
-
-The following container runtimes work with Windows:
-
-{{% thirdparty-content %}}
-
-#### cri-containerd
-
-{{< feature-state for_k8s_version="v1.20" state="stable" >}}
-
-You can use {{< glossary_tooltip term_id="containerd" text="ContainerD" >}} 1.4.0+
-as the container runtime for Kubernetes nodes that run Windows.
-
-Learn how to [install ContainerD on a Windows node](/docs/setup/production-environment/container-runtimes/#install-containerd).
-
-{{< note >}}
-There is a [known limitation](/docs/tasks/configure-pod-container/configure-gmsa/#gmsa-limitations)
-when using GMSA with containerd to access Windows network shares, which requires a
-kernel patch.
-{{< /note >}}
-
-#### Mirantis Container Runtime {#mcr}
-
-[Mirantis Container Runtime](https://docs.mirantis.com/mcr/20.10/overview.html) (MCR) is available as a container runtime for all Windows Server 2019 and later versions.
-
-See [Install MCR on Windows Servers](https://docs.mirantis.com/mcr/20.10/install/mcr-windows.html) for more information.
-
-## Windows OS version compatibility {#windows-os-version-support}
-
-On Windows nodes, strict compatibility rules apply where the host OS version must
-match the container base image OS version. Only Windows containers with a container
-operating system of Windows Server 2019 are fully supported.
-
-For Kubernetes v{{< skew currentVersion >}}, operating system compatibility for Windows nodes (and Pods)
-is as follows:
-
-Windows Server LTSC release
-: Windows Server 2019
-: Windows Server 2022
-
-Windows Server SAC release
-: Windows Server version 20H2
-
-The Kubernetes [version-skew policy](/docs/setup/release/version-skew-policy/) also applies.
-
-## Security for Windows nodes {#security}
-
-On Windows, data from Secrets are written out in clear text onto the node's local
-storage (as compared to using tmpfs / in-memory filesystems on Linux). As a cluster
-operator, you should take both of the following additional measures:
-
-1. Use file ACLs to secure the Secrets' file location.
-1. Apply volume-level encryption using [BitLocker](https://docs.microsoft.com/en-us/windows/security/information-protection/bitlocker/bitlocker-how-to-deploy-on-windows-server).
-
-[RunAsUsername](/docs/tasks/configure-pod-container/configure-runasusername)
-can be specified for Windows Pods or containers to execute the container
-processes as a node-default user. This is roughly equivalent to
-[RunAsUser](/docs/concepts/security/pod-security-policy/#users-and-groups).
-
-Linux-specific pod security context privileges such as SELinux, AppArmor, Seccomp, or capabilities (POSIX capabilities), and others are not supported.
-
-Privileged containers are [not supported](#compatibility-v1-pod-spec-containers-securitycontext) on Windows.
-
-## Getting help and troubleshooting {#troubleshooting}
-
-Your main source of help for troubleshooting your Kubernetes cluster should start
-with the [Troubleshooting](/docs/tasks/debug-application-cluster/troubleshooting/)
-page.
-
-Some additional, Windows-specific troubleshooting help is included
-in this section. Logs are an important element of troubleshooting
-issues in Kubernetes. Make sure to include them any time you seek
-troubleshooting assistance from other contributors. Follow the
-instructions in the
-SIG Windows [contributing guide on gathering logs](https://github.com/kubernetes/community/blob/master/sig-windows/CONTRIBUTING.md#gathering-logs).
-
-### Node-level troubleshooting {#troubleshooting-node}
-
-1. How do I know `start.ps1` completed successfully?
-
- You should see kubelet, kube-proxy, and (if you chose Flannel as your networking
- solution) flanneld host-agent processes running on your node, with running logs
- being displayed in separate PowerShell windows. In addition to this, your Windows
- node should be listed as "Ready" in your Kubernetes cluster.
-
-1. Can I configure the Kubernetes node processes to run in the background as services?
-
- The kubelet and kube-proxy are already configured to run as native Windows Services,
- offering resiliency by re-starting the services automatically in the event of
- failure (for example a process crash). You have two options for configuring these
- node components as services.
-
- 1. As native Windows Services
-
- You can run the kubelet and kube-proxy as native Windows Services using `sc.exe`.
-
- ```powershell
- # Create the services for kubelet and kube-proxy in two separate commands
- sc.exe create binPath= " --service "
-
- # Please note that if the arguments contain spaces, they must be escaped.
- sc.exe create kubelet binPath= "C:\kubelet.exe --service --hostname-override 'minion' "
-
- # Start the services
- Start-Service kubelet
- Start-Service kube-proxy
-
- # Stop the service
- Stop-Service kubelet (-Force)
- Stop-Service kube-proxy (-Force)
-
- # Query the service status
- Get-Service kubelet
- Get-Service kube-proxy
- ```
-
- 1. Using `nssm.exe`
-
- You can also always use alternative service managers like
- [nssm.exe](https://nssm.cc/) to run these processes (flanneld,
- kubelet & kube-proxy) in the background for you. You can use this
- [sample script](https://github.com/Microsoft/SDN/tree/master/Kubernetes/flannel/register-svc.ps1),
- leveraging nssm.exe to register kubelet, kube-proxy, and flanneld.exe to run
- as Windows services in the background.
-
- ```powershell
- register-svc.ps1 -NetworkMode -ManagementIP -ClusterCIDR -KubeDnsServiceIP -LogDir
-
- # NetworkMode = The network mode l2bridge (flannel host-gw, also the default value) or overlay (flannel vxlan) chosen as a network solution
- # ManagementIP = The IP address assigned to the Windows node. You can use ipconfig to find this
- # ClusterCIDR = The cluster subnet range. (Default value 10.244.0.0/16)
- # KubeDnsServiceIP = The Kubernetes DNS service IP (Default value 10.96.0.10)
- # LogDir = The directory where kubelet and kube-proxy logs are redirected into their respective output files (Default value C:\k)
- ```
-
- If the above referenced script is not suitable, you can manually configure
- `nssm.exe` using the following examples.
-
- ```powershell
- # Register flanneld.exe
- nssm install flanneld C:\flannel\flanneld.exe
- nssm set flanneld AppParameters --kubeconfig-file=c:\k\config --iface= --ip-masq=1 --kube-subnet-mgr=1
- nssm set flanneld AppEnvironmentExtra NODE_NAME=
- nssm set flanneld AppDirectory C:\flannel
- nssm start flanneld
-
- # Register kubelet.exe
- # Microsoft releases the pause infrastructure container at mcr.microsoft.com/oss/kubernetes/pause:3.6
- nssm install kubelet C:\k\kubelet.exe
- nssm set kubelet AppParameters --hostname-override= --v=6 --pod-infra-container-image=mcr.microsoft.com/oss/kubernetes/pause:3.6 --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
-
- # Register kube-proxy.exe (l2bridge / host-gw)
- nssm install kube-proxy C:\k\kube-proxy.exe
- nssm set kube-proxy AppDirectory c:\k
- nssm set kube-proxy AppParameters --v=4 --proxy-mode=kernelspace --hostname-override=--kubeconfig=c:\k\config --enable-dsr=false --log-dir= --logtostderr=false
- nssm.exe set kube-proxy AppEnvironmentExtra KUBE_NETWORK=cbr0
- nssm set kube-proxy DependOnService kubelet
- nssm start kube-proxy
-
- # Register kube-proxy.exe (overlay / vxlan)
- nssm install kube-proxy C:\k\kube-proxy.exe
- nssm set kube-proxy AppDirectory c:\k
- nssm set kube-proxy AppParameters --v=4 --proxy-mode=kernelspace --feature-gates="WinOverlay=true" --hostname-override= --kubeconfig=c:\k\config --network-name=vxlan0 --source-vip= --enable-dsr=false --log-dir= --logtostderr=false
- nssm set kube-proxy DependOnService kubelet
- nssm start kube-proxy
- ```
-
- For initial troubleshooting, you can use the following flags in [nssm.exe](https://nssm.cc/) to redirect stdout and stderr to a output file:
-
- ```powershell
- nssm set AppStdout C:\k\mysvc.log
- nssm set AppStderr C:\k\mysvc.log
- ```
-
- For additional details, see [NSSM - the Non-Sucking Service Manager](https://nssm.cc/usage).
-
-1. My Pods are stuck at "Container Creating" or restarting over and over
-
- 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. See [Pause container](#pause-container) for more details.
-
-### Network troubleshooting {#troubleshooting-network}
-
-1. My Windows Pods do not have network connectivity
-
- If you are using virtual machines, ensure that MAC spoofing is **enabled** on all
- the VM network adapter(s).
-
-1. My Windows Pods cannot ping external resources
-
- Windows Pods do not have outbound rules programmed for the ICMP protocol. However,
- TCP/UDP is supported. When trying to demonstrate connectivity to resources
- outside of the cluster, substitute `ping ` with corresponding
- `curl ` commands.
-
- If you are still facing problems, most likely your network configuration in
- [cni.conf](https://github.com/Microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/cni/config/cni.conf)
- deserves some extra attention. You can always edit this static file. The
- configuration update will apply to any new Kubernetes resources.
-
- One of the Kubernetes networking requirements
- (see [Kubernetes model](/docs/concepts/cluster-administration/networking/)) is
- for cluster communication to occur without
- NAT internally. To honor this requirement, there is an
- [ExceptionList](https://github.com/Microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/cni/config/cni.conf#L20)
- for all the communication where you do not want outbound NAT to occur. However,
- this also means that you need to exclude the external IP you are trying to query
- from the `ExceptionList`. Only then will the traffic originating from your Windows
- pods be SNAT'ed correctly to receive a response from the outside world. In this
- regard, your `ExceptionList` in `cni.conf` should look as follows:
-
- ```conf
- "ExceptionList": [
- "10.244.0.0/16", # Cluster subnet
- "10.96.0.0/12", # Service subnet
- "10.127.130.0/24" # Management (host) subnet
- ]
- ```
-
-1. My Windows node cannot access `NodePort` type Services
-
- Local NodePort access from the node itself fails. This is a known
- limitation. NodePort access works from other nodes or external clients.
-
-1. vNICs and HNS endpoints of containers are being deleted
-
- This issue can be caused when the `hostname-override` parameter is not passed to
- [kube-proxy](/docs/reference/command-line-tools-reference/kube-proxy/). To resolve
- it, users need to pass the hostname to kube-proxy as follows:
-
- ```powershell
- C:\k\kube-proxy.exe --hostname-override=$(hostname)
- ```
-
-1. With flannel, my nodes are having issues after rejoining a cluster
-
- Whenever a previously deleted node is being re-joined to the cluster, flannelD
- tries to assign a new pod subnet to the node. Users should remove the old pod
- subnet configuration files in the following paths:
-
- ```powershell
- Remove-Item C:\k\SourceVip.json
- Remove-Item C:\k\SourceVipRequest.json
- ```
-
-1. After launching `start.ps1`, flanneld is stuck in "Waiting for the Network to be created"
-
- There are numerous reports of this [issue](https://github.com/coreos/flannel/issues/1066); most likely it is a timing issue for when the management IP of the flannel network is set. A workaround is to relaunch `start.ps1` or relaunch it manually as follows:
-
- ```powershell
- [Environment]::SetEnvironmentVariable("NODE_NAME", "")
- C:\flannel\flanneld.exe --kubeconfig-file=c:\k\config --iface= --ip-masq=1 --kube-subnet-mgr=1
- ```
-
-1. My Windows Pods cannot launch because of missing `/run/flannel/subnet.env`
-
- This indicates that Flannel didn't launch correctly. You can either try
- to restart `flanneld.exe` or you can copy the files over manually from
- `/run/flannel/subnet.env` on the Kubernetes master to `C:\run\flannel\subnet.env`
- on the Windows worker node and modify the `FLANNEL_SUBNET` row to a different
- number. For example, if node subnet 10.244.4.1/24 is desired:
-
- ```env
- FLANNEL_NETWORK=10.244.0.0/16
- FLANNEL_SUBNET=10.244.4.1/24
- FLANNEL_MTU=1500
- FLANNEL_IPMASQ=true
- ```
-
-1. My Windows node cannot access my services using the service IP
-
- This is a known limitation of the networking stack on Windows. However, Windows Pods can access the Service IP.
-
-1. No network adapter is found when starting the kubelet
-
- The Windows networking stack needs a virtual adapter for Kubernetes networking to work. If the following commands return no results (in an admin shell), virtual network creation — a necessary prerequisite for the kubelet to work — has failed:
-
- ```powershell
- Get-HnsNetwork | ? Name -ieq "cbr0"
- Get-NetAdapter | ? Name -Like "vEthernet (Ethernet*"
- ```
-
- Often it is worthwhile to modify the [InterfaceName](https://github.com/microsoft/SDN/blob/master/Kubernetes/flannel/start.ps1#L7) parameter of the start.ps1 script, in cases where the host's network adapter isn't "Ethernet". Otherwise, consult the output of the `start-kubelet.ps1` script to see if there are errors during virtual network creation.
-
-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 by including `wincat.exe` in the pause infrastructure container `mcr.microsoft.com/oss/kubernetes/pause:3.6`. Be sure to use a supported version of Kubernetes.
- If you would like to build your own pause infrastructure container be sure to include [wincat](https://github.com/kubernetes/kubernetes/tree/master/build/pause/windows/wincat).
-
-1. My Kubernetes installation is failing because my Windows Server node is behind a proxy
-
- If you are behind a proxy, the following PowerShell environment variables must be defined:
-
- ```PowerShell
- [Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.example.com:80/", [EnvironmentVariableTarget]::Machine)
- [Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://proxy.example.com:443/", [EnvironmentVariableTarget]::Machine)
- ```
-
-### Further investigation
-
-If these steps don't resolve your problem, you can get help running Windows containers on Windows nodes in Kubernetes through:
-
-* StackOverflow [Windows Server Container](https://stackoverflow.com/questions/tagged/windows-server-container) topic
-* Kubernetes Official Forum [discuss.kubernetes.io](https://discuss.kubernetes.io/)
-* Kubernetes Slack [#SIG-Windows Channel](https://kubernetes.slack.com/messages/sig-windows)
-
-### Reporting issues and feature requests
-
-If you have what looks like a bug, or you would like to
-make a feature request, please use the
-[GitHub issue tracking system](https://github.com/kubernetes/kubernetes/issues).
-You can open issues on
-[GitHub](https://github.com/kubernetes/kubernetes/issues/new/choose) and assign
-them to SIG-Windows. You should first search the list of issues in case it was
-reported previously and comment with your experience on the issue and add additional
-logs. SIG-Windows Slack is also a great avenue to get some initial support and
-troubleshooting ideas prior to creating a ticket.
-
-If filing a bug, please include detailed information about how to reproduce the problem, such as:
-
-* Kubernetes version: output from `kubectl version`
-* Environment details: Cloud provider, OS distro, networking choice and configuration, and Docker version
-* Detailed steps to reproduce the problem
-* [Relevant logs](https://github.com/kubernetes/community/blob/master/sig-windows/CONTRIBUTING.md#gathering-logs)
-
-It helps if you tag the issue as **sig/windows**, by commenting on the issue with `/sig windows`. This helps to bring
-the issue to a SIG Windows member's attention
-
-
-## {{% heading "whatsnext" %}}
-
-### Deployment tools
-
-The kubeadm tool helps you to deploy a Kubernetes cluster, providing the control
-plane to manage the cluster it, and nodes to run your workloads.
-[Adding Windows nodes](/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes/)
-explains how to deploy Windows nodes to your cluster using kubeadm.
-
-The Kubernetes [cluster API](https://cluster-api.sigs.k8s.io/) project also provides means to automate deployment of Windows nodes.
-
-### Windows distribution channels
-
-For a detailed explanation of Windows distribution channels see the [Microsoft documentation](https://docs.microsoft.com/en-us/windows-server/get-started-19/servicing-channels-19).
-
-Information on the different Windows Server servicing channels
-including their support models can be found at
-[Windows Server servicing channels](https://docs.microsoft.com/en-us/windows-server/get-started/servicing-channels-comparison).
diff --git a/content/en/docs/tasks/access-application-cluster/access-cluster-services.md b/content/en/docs/tasks/access-application-cluster/access-cluster-services.md
index 262071094c..456662692e 100644
--- a/content/en/docs/tasks/access-application-cluster/access-cluster-services.md
+++ b/content/en/docs/tasks/access-application-cluster/access-cluster-services.md
@@ -64,17 +64,17 @@ kubectl cluster-info
The output is similar to this:
```
-Kubernetes master is running at https://104.197.5.247
-elasticsearch-logging is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy
-kibana-logging is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/kibana-logging/proxy
-kube-dns is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/kube-dns/proxy
-grafana is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
-heapster is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
+Kubernetes master is running at https://192.0.2.1
+elasticsearch-logging is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy
+kibana-logging is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/kibana-logging/proxy
+kube-dns is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/kube-dns/proxy
+grafana is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
+heapster is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
```
This shows the proxy-verb URL for accessing each service.
For example, this cluster has cluster-level logging enabled (using Elasticsearch), which can be reached
-at `https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/` if suitable credentials are passed, or through a kubectl proxy at, for example:
+at `https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/` if suitable credentials are passed, or through a kubectl proxy at, for example:
`http://localhost:8080/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/`.
{{< note >}}
@@ -104,13 +104,13 @@ The supported formats for the `` segment of the URL are:
* To access the Elasticsearch service endpoint `_search?q=user:kimchy`, you would use:
```
- http://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_search?q=user:kimchy
+ http://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_search?q=user:kimchy
```
* To access the Elasticsearch cluster health information `_cluster/health?pretty=true`, you would use:
```
- https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_cluster/health?pretty=true
+ https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_cluster/health?pretty=true
```
The health information is similar to this:
@@ -133,7 +133,7 @@ The supported formats for the `` segment of the URL are:
* To access the *https* Elasticsearch service health information `_cluster/health?pretty=true`, you would use:
```
- https://104.197.5.247/api/v1/namespaces/kube-system/services/https:elasticsearch-logging/proxy/_cluster/health?pretty=true
+ https://192.0.2.1/api/v1/namespaces/kube-system/services/https:elasticsearch-logging:/proxy/_cluster/health?pretty=true
```
#### Using web browsers to access services running on the cluster
diff --git a/content/en/docs/tasks/access-application-cluster/access-cluster.md b/content/en/docs/tasks/access-application-cluster/access-cluster.md
index aae96d3e96..f20fe407e8 100644
--- a/content/en/docs/tasks/access-application-cluster/access-cluster.md
+++ b/content/en/docs/tasks/access-application-cluster/access-cluster.md
@@ -233,7 +233,7 @@ There are several different proxies you may encounter when using Kubernetes:
- locates apiserver
- adds authentication headers
-1. The [apiserver proxy](#discovering-builtin-services):
+1. The [apiserver proxy](/docs/tasks/access-application-cluster/access-cluster-services/#discovering-builtin-services):
- is a bastion built into the apiserver
- connects a user outside of the cluster to cluster IPs which otherwise might not be reachable
diff --git a/content/en/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md b/content/en/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md
index 8b79d7042f..0c3d05d62f 100644
--- a/content/en/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md
+++ b/content/en/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md
@@ -22,7 +22,8 @@ It does not mean that there is a file named `kubeconfig`.
{{< warning >}}
-Only use kubeconfig files from trusted sources. Using a specially-crafted kubeconfig file could result in malicious code execution or file exposure.
+Only use kubeconfig files from trusted sources. Using a specially-crafted kubeconfig
+file could result in malicious code execution or file exposure.
If you must use an untrusted kubeconfig file, inspect it carefully first, much as you would a shell script.
{{< /warning>}}
@@ -50,7 +51,7 @@ to the scratch cluster requires authentication by username and password.
Create a directory named `config-exercise`. In your
`config-exercise` directory, create a file named `config-demo` with this content:
-```shell
+```yaml
apiVersion: v1
kind: Config
preferences: {}
@@ -115,7 +116,7 @@ kubectl config --kubeconfig=config-demo view
The output shows the two clusters, two users, and three contexts:
-```shell
+```yaml
apiVersion: v1
clusters:
- cluster:
@@ -271,7 +272,7 @@ For example:
### Linux
```shell
-export KUBECONFIG_SAVED=$KUBECONFIG
+export KUBECONFIG_SAVED="$KUBECONFIG"
```
### Windows PowerShell
@@ -290,7 +291,7 @@ Temporarily append two paths to your `KUBECONFIG` environment variable. For exam
### Linux
```shell
-export KUBECONFIG=$KUBECONFIG:config-demo:config-demo-2
+export KUBECONFIG="${KUBECONFIG}:config-demo:config-demo-2"
```
### Windows PowerShell
@@ -356,7 +357,7 @@ For example:
### Linux
```shell
-export KUBECONFIG=$KUBECONFIG:$HOME/.kube/config
+export KUBECONFIG="${KUBECONFIG}:${HOME}/.kube/config"
```
### Windows Powershell
@@ -379,7 +380,7 @@ Return your `KUBECONFIG` environment variable to its original value. For example
### Linux
```shell
-export KUBECONFIG=$KUBECONFIG_SAVED
+export KUBECONFIG="$KUBECONFIG_SAVED"
```
### Windows PowerShell
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 ba8f7b1244..3b2648f943 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
@@ -11,180 +11,169 @@ This page shows how to use `kubectl port-forward` to connect to a MongoDB
server running in a Kubernetes cluster. This type of connection can be useful
for database debugging.
-
-
-
## {{% heading "prerequisites" %}}
-
* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
-
* Install [MongoDB Shell](https://www.mongodb.com/try/download/shell).
-
-
-
## Creating MongoDB deployment and service
1. Create a Deployment that runs MongoDB:
- ```shell
- kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-deployment.yaml
- ```
+ ```shell
+ kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-deployment.yaml
+ ```
- The output of a successful command verifies that the deployment was created:
+ The output of a successful command verifies that the deployment was created:
- ```
- deployment.apps/mongo created
- ```
+ ```
+ deployment.apps/mongo created
+ ```
- View the pod status to check that it is ready:
+ View the pod status to check that it is ready:
- ```shell
- kubectl get pods
- ```
+ ```shell
+ kubectl get pods
+ ```
- The output displays the pod created:
+ The output displays the pod created:
- ```
- NAME READY STATUS RESTARTS AGE
- mongo-75f59d57f4-4nd6q 1/1 Running 0 2m4s
- ```
+ ```
+ NAME READY STATUS RESTARTS AGE
+ mongo-75f59d57f4-4nd6q 1/1 Running 0 2m4s
+ ```
- View the Deployment's status:
+ View the Deployment's status:
- ```shell
- kubectl get deployment
- ```
+ ```shell
+ kubectl get deployment
+ ```
- The output displays that the Deployment was created:
+ The output displays that the Deployment was created:
- ```
- NAME READY UP-TO-DATE AVAILABLE AGE
- mongo 1/1 1 1 2m21s
- ```
+ ```
+ NAME READY UP-TO-DATE AVAILABLE AGE
+ mongo 1/1 1 1 2m21s
+ ```
- The Deployment automatically manages a ReplicaSet.
- View the ReplicaSet status using:
+ The Deployment automatically manages a ReplicaSet.
+ View the ReplicaSet status using:
- ```shell
- kubectl get replicaset
- ```
+ ```shell
+ kubectl get replicaset
+ ```
- The output displays that the ReplicaSet was created:
-
- ```
- NAME DESIRED CURRENT READY AGE
- mongo-75f59d57f4 1 1 1 3m12s
- ```
+ The output displays that the ReplicaSet was created:
+ ```
+ NAME DESIRED CURRENT READY AGE
+ mongo-75f59d57f4 1 1 1 3m12s
+ ```
2. Create a Service to expose MongoDB on the network:
- ```shell
- kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-service.yaml
- ```
+ ```shell
+ kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-service.yaml
+ ```
- The output of a successful command verifies that the Service was created:
+ The output of a successful command verifies that the Service was created:
- ```
- service/mongo created
- ```
+ ```
+ service/mongo created
+ ```
- Check the Service created:
+ Check the Service created:
- ```shell
- kubectl get service mongo
- ```
+ ```shell
+ kubectl get service mongo
+ ```
- The output displays the service created:
+ The output displays the service created:
- ```
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- mongo ClusterIP 10.96.41.183 27017/TCP 11s
- ```
+ ```
+ NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
+ mongo ClusterIP 10.96.41.183 27017/TCP 11s
+ ```
3. Verify that the MongoDB server is running in the Pod, and listening on port 27017:
- ```shell
- # Change mongo-75f59d57f4-4nd6q to the name of the Pod
- kubectl get pod mongo-75f59d57f4-4nd6q --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
- ```
+ ```shell
+ # Change mongo-75f59d57f4-4nd6q to the name of the Pod
+ kubectl get pod mongo-75f59d57f4-4nd6q --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
+ ```
- The output displays the port for MongoDB in that Pod:
+ The output displays the port for MongoDB in that Pod:
- ```
- 27017
- ```
+ ```
+ 27017
+ ```
- (this is the TCP port allocated to MongoDB on the internet).
+ 27017 is the TCP port allocated to MongoDB on the internet.
## Forward a local port to a port on the Pod
-1. `kubectl port-forward` allows using resource name, such as a pod name, to select a matching pod to port forward to.
+1. `kubectl port-forward` allows using resource name, such as a pod name, to select a matching pod to port forward to.
- ```shell
- # Change mongo-75f59d57f4-4nd6q to the name of the Pod
- kubectl port-forward mongo-75f59d57f4-4nd6q 28015:27017
- ```
+ ```shell
+ # Change mongo-75f59d57f4-4nd6q to the name of the Pod
+ kubectl port-forward mongo-75f59d57f4-4nd6q 28015:27017
+ ```
- which is the same as
+ which is the same as
- ```shell
- kubectl port-forward pods/mongo-75f59d57f4-4nd6q 28015:27017
- ```
+ ```shell
+ kubectl port-forward pods/mongo-75f59d57f4-4nd6q 28015:27017
+ ```
- or
+ or
- ```shell
- kubectl port-forward deployment/mongo 28015:27017
- ```
+ ```shell
+ kubectl port-forward deployment/mongo 28015:27017
+ ```
- or
+ or
- ```shell
- kubectl port-forward replicaset/mongo-75f59d57f4 28015:27017
- ```
+ ```shell
+ kubectl port-forward replicaset/mongo-75f59d57f4 28015:27017
+ ```
- or
+ or
- ```shell
- kubectl port-forward service/mongo 28015:27017
- ```
+ ```shell
+ kubectl port-forward service/mongo 28015:27017
+ ```
- Any of the above commands works. The output is similar to this:
+ Any of the above commands works. The output is similar to this:
- ```
- Forwarding from 127.0.0.1:28015 -> 27017
- Forwarding from [::1]:28015 -> 27017
- ```
+ ```
+ Forwarding from 127.0.0.1:28015 -> 27017
+ Forwarding from [::1]:28015 -> 27017
+ ```
-{{< note >}}
+ {{< note >}}
+ `kubectl port-forward` does not return. To continue with the exercises, you will need to open another terminal.
+ {{< /note >}}
-`kubectl port-forward` does not return. To continue with the exercises, you will need to open another terminal.
+2. Start the MongoDB command line interface:
-{{< /note >}}
+ ```shell
+ mongosh --port 28015
+ ```
-2. Start the MongoDB command line interface:
+3. At the MongoDB command line prompt, enter the `ping` command:
- ```shell
- mongosh --port 28015
- ```
+ ```
+ db.runCommand( { ping: 1 } )
+ ```
-3. At the MongoDB command line prompt, enter the `ping` command:
+ A successful ping request returns:
- ```
- db.runCommand( { ping: 1 } )
- ```
-
- A successful ping request returns:
-
- ```
- { ok: 1 }
- ```
+ ```
+ { ok: 1 }
+ ```
### Optionally let _kubectl_ choose the local port {#let-kubectl-choose-local-port}
@@ -204,7 +193,6 @@ Forwarding from 127.0.0.1:63753 -> 27017
Forwarding from [::1]:63753 -> 27017
```
-
## Discussion
@@ -219,9 +207,7 @@ The support for UDP protocol is tracked in
[issue 47862](https://github.com/kubernetes/kubernetes/issues/47862).
{{< /note >}}
-
-
-
## {{% heading "whatsnext" %}}
Learn more about [kubectl port-forward](/docs/reference/generated/kubectl/kubectl-commands/#port-forward).
+
diff --git a/content/en/docs/tasks/administer-cluster/access-cluster-api.md b/content/en/docs/tasks/administer-cluster/access-cluster-api.md
index 9abdd1c3a3..5732aed3af 100644
--- a/content/en/docs/tasks/administer-cluster/access-cluster-api.md
+++ b/content/en/docs/tasks/administer-cluster/access-cluster-api.md
@@ -150,7 +150,7 @@ describes how you can configure this as a cluster administrator.
### Programmatic access to the API
-Kubernetes officially supports client libraries for [Go](#go-client), [Python](#python-client), [Java](#java-client), [dotnet](#dotnet-client), [Javascript](#javascript-client), and [Haskell](#haskell-client). There are other client libraries that are provided and maintained by their authors, not the Kubernetes team. See [client libraries](/docs/reference/using-api/client-libraries/) for accessing the API from other languages and how they authenticate.
+Kubernetes officially supports client libraries for [Go](#go-client), [Python](#python-client), [Java](#java-client), [dotnet](#dotnet-client), [JavaScript](#javascript-client), and [Haskell](#haskell-client). There are other client libraries that are provided and maintained by their authors, not the Kubernetes team. See [client libraries](/docs/reference/using-api/client-libraries/) for accessing the API from other languages and how they authenticate.
#### Go client
diff --git a/content/en/docs/tasks/administer-cluster/certificates.md b/content/en/docs/tasks/administer-cluster/certificates.md
index 2338b0cdc7..44effe9340 100644
--- a/content/en/docs/tasks/administer-cluster/certificates.md
+++ b/content/en/docs/tasks/administer-cluster/certificates.md
@@ -1,5 +1,5 @@
---
-title: Certificates
+title: Generate Certificates Manually
content_type: task
weight: 20
---
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 bf5ddd8f5f..be77074dc1 100644
--- a/content/en/docs/tasks/administer-cluster/configure-upgrade-etcd.md
+++ b/content/en/docs/tasks/administer-cluster/configure-upgrade-etcd.md
@@ -150,7 +150,7 @@ access to clients with the certificate `k8sclient.cert`.
Once etcd is configured correctly, only clients with valid certificates can
access it. To give Kubernetes API servers the access, configure them with the
-flags `--etcd-certfile=k8sclient.cert`,`--etcd-keyfile=k8sclient.key` and
+flags `--etcd-certfile=k8sclient.cert`, `--etcd-keyfile=k8sclient.key` and
`--etcd-cafile=ca.cert`.
{{< note >}}
@@ -319,7 +319,7 @@ employed to recover the data of a failed cluster.
Before starting the restore operation, a snapshot file must be present. It can
either be a snapshot file from a previous backup operation, or from a remaining
-[data directory]( https://etcd.io/docs/current/op-guide/configuration/#--data-dir).
+[data directory](https://etcd.io/docs/current/op-guide/configuration/#--data-dir).
Here is an example:
```shell
diff --git a/content/en/docs/tasks/administer-cluster/controller-manager-leader-migration.md b/content/en/docs/tasks/administer-cluster/controller-manager-leader-migration.md
index ddfa8e592e..45abdde6ac 100644
--- a/content/en/docs/tasks/administer-cluster/controller-manager-leader-migration.md
+++ b/content/en/docs/tasks/administer-cluster/controller-manager-leader-migration.md
@@ -7,10 +7,9 @@ linkTitle: "Migrate Replicated Control Plane To Use Cloud Controller Manager"
content_type: task
---
-
-{{< feature-state state="beta" for_k8s_version="v1.22" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
{{< glossary_definition term_id="cloud-controller-manager" length="all" prepend="The cloud-controller-manager is">}}
@@ -22,15 +21,15 @@ Leader Migration provides a mechanism in which HA clusters can safely migrate "c
Leader Migration can be enabled by setting `--enable-leader-migration` on `kube-controller-manager` or `cloud-controller-manager`. Leader Migration only applies during the upgrade and can be safely disabled or left enabled after the upgrade is complete.
-This guide walks you through the manual process of upgrading the control plane from `kube-controller-manager` with built-in cloud provider to running both `kube-controller-manager` and `cloud-controller-manager`. If you use a tool to administrator the cluster, please refer to the documentation of the tool and the cloud provider for more details.
+This guide walks you through the manual process of upgrading the control plane from `kube-controller-manager` with built-in cloud provider to running both `kube-controller-manager` and `cloud-controller-manager`. If you use a tool to deploy and manage the cluster, please refer to the documentation of the tool and the cloud provider for specific instructions of the migration.
## {{% heading "prerequisites" %}}
-It is assumed that the control plane is running Kubernetes version N and to be upgraded to version N + 1. Although it is possible to migrate within the same version, ideally the migration should be performed as part of an upgrade so that changes of configuration can be aligned to each release. The exact versions of N and N + 1 depend on each cloud provider. For example, if a cloud provider builds a `cloud-controller-manager` to work with Kubernetes 1.22, then N can be 1.21 and N + 1 can be 1.22.
+It is assumed that the control plane is running Kubernetes version N and to be upgraded to version N + 1. Although it is possible to migrate within the same version, ideally the migration should be performed as part of an upgrade so that changes of configuration can be aligned to each release. The exact versions of N and N + 1 depend on each cloud provider. For example, if a cloud provider builds a `cloud-controller-manager` to work with Kubernetes 1.24, then N can be 1.23 and N + 1 can be 1.24.
-The control plane nodes should run `kube-controller-manager` with Leader Election enabled through `--leader-elect=true`. As of version N, an in-tree cloud privider must be set with `--cloud-provider` flag and `cloud-controller-manager` should not yet be deployed.
+The control plane nodes should run `kube-controller-manager` with Leader Election enabled, which is the default. As of version N, an in-tree cloud provider must be set with `--cloud-provider` flag and `cloud-controller-manager` should not yet be deployed.
-The out-of-tree cloud provider must have built a `cloud-controller-manager` with Leader Migration implementation. If the cloud provider imports `k8s.io/cloud-provider` and `k8s.io/controller-manager` of version v0.21.0 or later, Leader Migration will be available. However, for version before v0.22.0, Leader Migration is alpha and requires feature gate `ControllerManagerLeaderMigration` to be enabled.
+The out-of-tree cloud provider must have built a `cloud-controller-manager` with Leader Migration implementation. If the cloud provider imports `k8s.io/cloud-provider` and `k8s.io/controller-manager` of version v0.21.0 or later, Leader Migration will be available. However, for version before v0.22.0, Leader Migration is alpha and requires feature gate `ControllerManagerLeaderMigration` to be enabled in `cloud-controller-manager`.
This guide assumes that kubelet of each control plane node starts `kube-controller-manager` and `cloud-controller-manager` as static pods defined by their manifests. If the components run in a different setting, please adjust the steps accordingly.
@@ -58,9 +57,8 @@ Leader Migration can be enabled without a configuration. Please see [Default Con
```yaml
kind: LeaderMigrationConfiguration
-apiVersion: controllermanager.config.k8s.io/v1beta1
+apiVersion: controllermanager.config.k8s.io/v1
leaderName: cloud-provider-extraction-migration
-resourceLock: leases
controllerLeaders:
- name: route
component: kube-controller-manager
@@ -70,6 +68,23 @@ controllerLeaders:
component: kube-controller-manager
```
+Alternatively, because the controllers can run under either controller managers, setting `component` to `*`
+for both sides makes the configuration file consistent between both parties of the migration.
+
+```yaml
+# wildcard version
+kind: LeaderMigrationConfiguration
+apiVersion: controllermanager.config.k8s.io/v1
+leaderName: cloud-provider-extraction-migration
+controllerLeaders:
+ - name: route
+ component: *
+ - name: service
+ component: *
+ - name: cloud-node-lifecycle
+ component: *
+```
+
On each control plane node, save the content to `/etc/leadermigration.conf`, and update the manifest of `kube-controller-manager` so that the file is mounted inside the container at the same location. Also, update the same manifest to add the following arguments:
- `--enable-leader-migration` to enable Leader Migration on the controller manager
@@ -79,13 +94,12 @@ Restart `kube-controller-manager` on each node. At this moment, `kube-controller
### Deploy Cloud Controller Manager
-In version N + 1, the desired state of controller-to-manager assignment can be represented by a new configuration file, shown as follows. Please note `component` field of each `controllerLeaders` changing from `kube-controller-manager` to `cloud-controller-manager`.
+In version N + 1, the desired state of controller-to-manager assignment can be represented by a new configuration file, shown as follows. Please note `component` field of each `controllerLeaders` changing from `kube-controller-manager` to `cloud-controller-manager`. Alternatively, use the wildcard version mentioned above, which has the same effect.
```yaml
kind: LeaderMigrationConfiguration
-apiVersion: controllermanager.config.k8s.io/v1beta1
+apiVersion: controllermanager.config.k8s.io/v1
leaderName: cloud-provider-extraction-migration
-resourceLock: leases
controllerLeaders:
- name: route
component: cloud-controller-manager
@@ -95,9 +109,9 @@ controllerLeaders:
component: cloud-controller-manager
```
-When creating control plane nodes of version N + 1, the content should be deploy to `/etc/leadermigration.conf`. The manifest of `cloud-controller-manager` should be updated to mount the configuration file in the same manner as `kube-controller-manager` of version N. Similarly, add `--feature-gates=ControllerManagerLeaderMigration=true`,`--enable-leader-migration`, and `--leader-migration-config=/etc/leadermigration.conf` to the arguments of `cloud-controller-manager`.
+When creating control plane nodes of version N + 1, the content should be deployed to `/etc/leadermigration.conf`. The manifest of `cloud-controller-manager` should be updated to mount the configuration file in the same manner as `kube-controller-manager` of version N. Similarly, add `--enable-leader-migration` and `--leader-migration-config=/etc/leadermigration.conf` to the arguments of `cloud-controller-manager`.
-Create a new control plane node of version N + 1 with the updated `cloud-controller-manager` manifest, and with the `--cloud-provider` flag unset for `kube-controller-manager`. `kube-controller-manager` of version N + 1 MUST NOT have Leader Migration enabled because, with an external cloud provider, it does not run the migrated controllers anymore and thus it is not involved in the migration.
+Create a new control plane node of version N + 1 with the updated `cloud-controller-manager` manifest, and with the `--cloud-provider` flag set to `external` for `kube-controller-manager`. `kube-controller-manager` of version N + 1 MUST NOT have Leader Migration enabled because, with an external cloud provider, it does not run the migrated controllers anymore, and thus it is not involved in the migration.
Please refer to [Cloud Controller Manager Administration](/docs/tasks/administer-cluster/running-cloud-controller/) for more detail on how to deploy `cloud-controller-manager`.
@@ -121,6 +135,27 @@ The default configuration can be enabled by setting `--enable-leader-migration`
For `kube-controller-manager` and `cloud-controller-manager`, if there are no flags that enable any in-tree cloud provider or change ownership of controllers, the default configuration can be used to avoid manual creation of the configuration file.
+### Special case: migrating the Node IPAM controller {#node-ipam-controller-migration}
+
+If your cloud provider provides an implementation of Node IPAM controller, you should switch to the implementation in `cloud-controller-manager`. Disable Node IPAM controller in `kube-controller-manager` of version N + 1 by adding `--controllers=*,-nodeipam` to its flags. Then add `nodeipam` to the list of migrated controllers.
+
+```yaml
+# wildcard version, with nodeipam
+kind: LeaderMigrationConfiguration
+apiVersion: controllermanager.config.k8s.io/v1
+leaderName: cloud-provider-extraction-migration
+controllerLeaders:
+ - name: route
+ component: *
+ - name: service
+ component: *
+ - name: cloud-node-lifecycle
+ component: *
+ - name: nodeipam
+- component: *
+```
+
## {{% heading "whatsnext" %}}
-- Read the [Controller Manager Leader Migration](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cloud-provider/2436-controller-manager-leader-migration) enhancement proposal
+- Read the [Controller Manager Leader Migration](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cloud-provider/2436-controller-manager-leader-migration) enhancement proposal.
+
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 e9dd545955..ff52a11f05 100644
--- a/content/en/docs/tasks/administer-cluster/dns-debugging-resolution.md
+++ b/content/en/docs/tasks/administer-cluster/dns-debugging-resolution.md
@@ -176,7 +176,7 @@ The service name is `kube-dns` for both CoreDNS and kube-dns deployments.
If you have created the Service or in the case it should be created by default
but it does not appear, see
-[debugging Services](/docs/tasks/debug-application-cluster/debug-service/) for
+[debugging Services](/docs/tasks/debug/debug-application/debug-service/) for
more information.
### Are DNS endpoints exposed?
@@ -193,7 +193,7 @@ kube-dns 10.180.3.17:53,10.180.3.17:53 1h
```
If you do not see the endpoints, see the endpoints section in the
-[debugging Services](/docs/tasks/debug-application-cluster/debug-service/) documentation.
+[debugging Services](/docs/tasks/debug/debug-application/debug-service/) documentation.
For additional Kubernetes DNS examples, see the
[cluster-dns examples](https://github.com/kubernetes/examples/tree/master/staging/cluster-dns)
@@ -252,6 +252,54 @@ linux/amd64, go1.10.3, 2e322f6
2018/09/07 15:29:04 [INFO] Reloading complete
172.17.0.18:41675 - [07/Sep/2018:15:29:11 +0000] 59925 "A IN kubernetes.default.svc.cluster.local. udp 54 false 512" NOERROR qr,aa,rd,ra 106 0.000066649s
```
+### Does CoreDNS have sufficient permissions?
+
+CoreDNS must be able to list {{< glossary_tooltip text="service"
+term_id="service" >}} and {{< glossary_tooltip text="endpoint"
+term_id="endpoint" >}} related resources to properly resolve service names.
+
+Sample error message:
+```
+2022-03-18T07:12:15.699431183Z [INFO] 10.96.144.227:52299 - 3686 "A IN serverproxy.contoso.net.cluster.local. udp 52 false 512" SERVFAIL qr,aa,rd 145 0.000091221s
+```
+
+First, get the current ClusterRole of `system:coredns`:
+
+```shell
+kubectl describe clusterrole system:coredns -n kube-system
+```
+
+Expected output:
+```
+PolicyRule:
+ Resources Non-Resource URLs Resource Names Verbs
+ --------- ----------------- -------------- -----
+ nodes [] [] [get]
+ endpoints [] [] [list watch]
+ namespaces [] [] [list watch]
+ pods [] [] [list watch]
+ services [] [] [list watch]
+ endpointslices.discovery.k8s.io [] [] [list watch]
+```
+
+If any permissions are missing, edit the ClusterRole to add them:
+
+```shell
+kubectl edit clusterrole system:coredns -n kube-system
+```
+
+Example insertion of EndpointSlices permissions:
+```
+...
+- apiGroups:
+ - discovery.k8s.io
+ resources:
+ - endpointslices
+ verbs:
+ - list
+ - watch
+...
+```
### Are you in the right namespace for the service?
diff --git a/content/en/docs/tasks/administer-cluster/encrypt-data.md b/content/en/docs/tasks/administer-cluster/encrypt-data.md
index c48f9ee2da..d510caff81 100644
--- a/content/en/docs/tasks/administer-cluster/encrypt-data.md
+++ b/content/en/docs/tasks/administer-cluster/encrypt-data.md
@@ -88,8 +88,8 @@ Name | Encryption | Strength | Speed | Key Length | Other Considerations
`identity` | None | N/A | N/A | N/A | Resources written as-is without encryption. When set as the first provider, the resource will be decrypted as new values are written.
`secretbox` | XSalsa20 and Poly1305 | Strong | Faster | 32-byte | A newer standard and may not be considered acceptable in environments that require high levels of review.
`aesgcm` | AES-GCM with random nonce | Must be rotated every 200k writes | Fastest | 16, 24, or 32-byte | Is not recommended for use except when an automated key rotation scheme is implemented.
-`aescbc` | AES-CBC with PKCS#7 padding | Weak | Fast | 32-byte | Not recommended due to CBC's vulnerability to padding oracle attacks.
-`kms` | Uses envelope encryption scheme: Data is encrypted by data encryption keys (DEKs) using AES-CBC with PKCS#7 padding, DEKs are encrypted by key encryption keys (KEKs) according to configuration in Key Management Service (KMS) | Strongest | Fast | 32-bytes | The recommended choice for using a third party tool for key management. Simplifies key rotation, with a new DEK generated for each encryption, and KEK rotation controlled by the user. [Configure the KMS provider](/docs/tasks/administer-cluster/kms-provider/)
+`aescbc` | AES-CBC with [PKCS#7](https://datatracker.ietf.org/doc/html/rfc2315) padding | Weak | Fast | 32-byte | Not recommended due to CBC's vulnerability to padding oracle attacks.
+`kms` | Uses envelope encryption scheme: Data is encrypted by data encryption keys (DEKs) using AES-CBC with [PKCS#7](https://datatracker.ietf.org/doc/html/rfc2315) padding, DEKs are encrypted by key encryption keys (KEKs) according to configuration in Key Management Service (KMS) | Strongest | Fast | 32-bytes | The recommended choice for using a third party tool for key management. Simplifies key rotation, with a new DEK generated for each encryption, and KEK rotation controlled by the user. [Configure the KMS provider](/docs/tasks/administer-cluster/kms-provider/)
Each provider supports multiple keys - the keys are tried in order for decryption, and if the provider
is the first provider, the first key is used for encryption.
diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md b/content/en/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md
index e48550e40b..30dd5c4cb0 100644
--- a/content/en/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md
+++ b/content/en/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md
@@ -17,8 +17,6 @@ weight: 30
You can use Kubernetes to run a mixture of Linux and Windows nodes, so you can mix Pods that run on Linux on with Pods that run on Windows. This page shows how to register Windows nodes to your cluster.
-
-
## {{% heading "prerequisites" %}}
{{< version-check >}}
@@ -136,7 +134,7 @@ in the `flannel-host-gw.yml` or `flannel-overlay.yml` file and specify your inte
curl -L https://github.com/kubernetes-sigs/sig-windows-tools/releases/latest/download/flannel-overlay.yml | sed 's/Ethernet/Ethernet0 2/g' | kubectl apply -f -
```
{{< /note >}}
-
+
### Joining a Windows worker node
@@ -147,33 +145,7 @@ with elevated permissions (Administrator) on the Windows worker node.
{{< /note >}}
{{< tabs name="tab-windows-kubeadm-runtime-installation" >}}
-{{% tab name="Docker EE" %}}
-#### Install Docker EE
-
-Install the `Containers` feature
-
-```powershell
-Install-WindowsFeature -Name containers
-```
-
-Install Docker
-Instructions to do so are available at [Install Docker Engine - Enterprise on Windows Servers](https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server#install-docker).
-
-#### Install wins, kubelet, and kubeadm
-
-```PowerShell
-curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
-.\PrepareNode.ps1 -KubernetesVersion {{< param "fullversion" >}}
-```
-
-#### Run `kubeadm` to join the node
-
-Use the command that was given to you when you ran `kubeadm init` on a control plane host.
-If you no longer have this command, or the token has expired, you can run `kubeadm token create --print-join-command`
-(on a control plane host) to generate a new token and join command.
-
-{{% /tab %}}
{{% tab name="CRI-containerD" %}}
#### Install containerD
@@ -191,9 +163,6 @@ To install a specific version of containerD specify the version with -ContainerD
.\Install-Containerd.ps1 -ContainerDVersion 1.4.1
```
-{{< /note >}}
-
-{{< note >}}
If you're using a different interface rather than Ethernet (i.e. "Ethernet0 2") on the Windows nodes, specify the name with `-netAdapterName`.
```powershell
@@ -210,17 +179,59 @@ curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools
.\PrepareNode.ps1 -KubernetesVersion {{< param "fullversion" >}} -ContainerRuntime containerD
```
+Install `crictl` from the [cri-tools project](https://github.com/kubernetes-sigs/cri-tools)
+which is required so that kubeadm can talk to the CRI endpoint.
+
#### Run `kubeadm` to join the node
Use the command that was given to you when you ran `kubeadm init` on a control plane host.
If you no longer have this command, or the token has expired, you can run `kubeadm token create --print-join-command`
(on a control plane host) to generate a new token and join command.
+{{% /tab %}}
+
+{{% tab name="Docker Engine" %}}
+
+#### Install Docker Engine
+
+Install the `Containers` feature
+
+```powershell
+Install-WindowsFeature -Name containers
+```
+
+Install Docker
+Instructions to do so are available at [Install Docker Engine - Enterprise on Windows Servers](https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server#install-docker).
+
+[Install cri-dockerd](https://github.com/Mirantis/cri-dockerd) which is required so that the kubelet
+can communicate with Docker on a CRI compatible endpoint.
+
{{< note >}}
-If using **CRI-containerD** add `--cri-socket "npipe:////./pipe/containerd-containerd"` to the kubeadm call
+Docker Engine does not implement the [CRI](/docs/concepts/architecture/cri/)
+which is a requirement for a container runtime to work with Kubernetes.
+For that reason, an additional service [cri-dockerd](https://github.com/Mirantis/cri-dockerd)
+has to be installed. cri-dockerd is a project based on the legacy built-in
+Docker Engine support that was [removed](/dockershim) from the kubelet in version 1.24.
{{< /note >}}
+Install `crictl` from the [cri-tools project](https://github.com/kubernetes-sigs/cri-tools)
+which is required so that kubeadm can talk to the CRI endpoint.
+
+#### Install wins, kubelet, and kubeadm
+
+```PowerShell
+curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
+.\PrepareNode.ps1 -KubernetesVersion {{< param "fullversion" >}}
+```
+
+#### Run `kubeadm` to join the node
+
+Use the command that was given to you when you ran `kubeadm init` on a control plane host.
+If you no longer have this command, or the token has expired, you can run `kubeadm token create --print-join-command`
+(on a control plane host) to generate a new token and join command.
+
{{% /tab %}}
+
{{< /tabs >}}
### Verifying your installation
diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver.md b/content/en/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver.md
index 31a9ff0e33..d9df7fb38c 100644
--- a/content/en/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver.md
+++ b/content/en/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver.md
@@ -96,9 +96,7 @@ nodes before deleting the old nodes.
### Modify the kubelet ConfigMap
-- Find the kubelet ConfigMap name using `kubectl get cm -n kube-system | grep kubelet-config`.
-- Call `kubectl edit cm kubelet-config-x.yy -n kube-system` (replace `x.yy` with
-the Kubernetes version).
+- Call `kubectl edit cm kubelet-config -n kube-system`.
- Either modify the existing `cgroupDriver` value or add a new field that looks like this:
```yaml
diff --git a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md
index 36e5a1a00c..783b107927 100644
--- a/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md
+++ b/content/en/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md
@@ -11,7 +11,7 @@ weight: 20
This page explains how to upgrade a Kubernetes cluster created with kubeadm from version
{{< skew currentVersionAddMinor -1 >}}.x to version {{< skew currentVersion >}}.x, and from version
{{< skew currentVersion >}}.x to {{< skew currentVersion >}}.y (where `y > x`). Skipping MINOR versions
-when upgrading is unsupported.
+when upgrading is unsupported. For more details, please visit [Version Skew Policy](https://kubernetes.io/releases/version-skew-policy/).
To see information about upgrading clusters created using older versions of kubeadm,
please refer to following pages instead:
@@ -29,7 +29,7 @@ The upgrade workflow at high level is the following:
## {{% heading "prerequisites" %}}
-- Make sure you read the [release notes]({{< latest-release-notes >}}) carefully.
+- Make sure you read the [release notes](https://git.k8s.io/kubernetes/CHANGELOG) carefully.
- The cluster should use a static control plane and etcd pods or external etcd.
- Make sure to back up any important components, such as app-level state stored in a database.
`kubeadm upgrade` does not touch your workloads, only components internal to Kubernetes, but backups are always a best practice.
@@ -79,83 +79,87 @@ Pick a control plane node that you wish to upgrade first. It must have the `/etc
**For the first control plane node**
-- Upgrade kubeadm:
+- Upgrade kubeadm:
-{{< tabs name="k8s_install_kubeadm_first_cp" >}}
-{{% tab name="Ubuntu, Debian or HypriotOS" %}}
- # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
- apt-mark unhold kubeadm && \
- apt-get update && apt-get install -y kubeadm={{< skew currentVersion >}}.x-00 && \
- apt-mark hold kubeadm
-{{% /tab %}}
-{{% tab name="CentOS, RHEL or Fedora" %}}
- # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
- yum install -y kubeadm-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
-{{% /tab %}}
-{{< /tabs >}}
-
+ {{< tabs name="k8s_install_kubeadm_first_cp" >}}
+ {{% tab name="Ubuntu, Debian or HypriotOS" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
+ apt-mark unhold kubeadm && \
+ apt-get update && apt-get install -y kubeadm={{< skew currentVersion >}}.x-00 && \
+ apt-mark hold kubeadm
+ ```
+ {{% /tab %}}
+ {{% tab name="CentOS, RHEL or Fedora" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
+ yum install -y kubeadm-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
+ ```
+ {{% /tab %}}
+ {{< /tabs >}}
+
-- Verify that the download works and has the expected version:
+- Verify that the download works and has the expected version:
- ```shell
- kubeadm version
- ```
+ ```shell
+ kubeadm version
+ ```
-- Verify the upgrade plan:
+- Verify the upgrade plan:
- ```shell
- kubeadm upgrade plan
- ```
+ ```shell
+ kubeadm upgrade plan
+ ```
- This command checks that your cluster can be upgraded, and fetches the versions you can upgrade to.
- It also shows a table with the component config version states.
+ This command checks that your cluster can be upgraded, and fetches the versions you can upgrade to.
+ It also shows a table with the component config version states.
-{{< note >}}
-`kubeadm upgrade` also automatically renews the certificates that it manages on this node.
-To opt-out of certificate renewal the flag `--certificate-renewal=false` can be used.
-For more information see the [certificate management guide](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs).
-{{ note >}}
+ {{< note >}}
+ `kubeadm upgrade` also automatically renews the certificates that it manages on this node.
+ To opt-out of certificate renewal the flag `--certificate-renewal=false` can be used.
+ For more information see the [certificate management guide](/docs/tasks/administer-cluster/kubeadm/kubeadm-certs).
+ {{ note >}}
+
+ {{< note >}}
+ If `kubeadm upgrade plan` shows any component configs that require manual upgrade, users must provide
+ a config file with replacement configs to `kubeadm upgrade apply` via the `--config` command line flag.
+ Failing to do so will cause `kubeadm upgrade apply` to exit with an error and not perform an upgrade.
+ {{ note >}}
-{{< note >}}
-If `kubeadm upgrade plan` shows any component configs that require manual upgrade, users must provide
-a config file with replacement configs to `kubeadm upgrade apply` via the `--config` command line flag.
-Failing to do so will cause `kubeadm upgrade apply` to exit with an error and not perform an upgrade.
-{{ note >}}
+- Choose a version to upgrade to, and run the appropriate command. For example:
-- Choose a version to upgrade to, and run the appropriate command. For example:
+ ```shell
+ # replace x with the patch version you picked for this upgrade
+ sudo kubeadm upgrade apply v{{< skew currentVersion >}}.x
+ ```
- ```shell
- # replace x with the patch version you picked for this upgrade
- sudo kubeadm upgrade apply v{{< skew currentVersion >}}.x
- ```
+ Once the command finishes you should see:
- Once the command finishes you should see:
+ ```
+ [upgrade/successful] SUCCESS! Your cluster was upgraded to "v{{< skew currentVersion >}}.x". Enjoy!
- ```
- [upgrade/successful] SUCCESS! Your cluster was upgraded to "v{{< skew currentVersion >}}.x". Enjoy!
+ [upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
+ ```
- [upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
- ```
+- Manually upgrade your CNI provider plugin.
-- Manually upgrade your CNI provider plugin.
+ Your Container Network Interface (CNI) provider may have its own upgrade instructions to follow.
+ Check the [addons](/docs/concepts/cluster-administration/addons/) page to
+ find your CNI provider and see whether additional upgrade steps are required.
- Your Container Network Interface (CNI) provider may have its own upgrade instructions to follow.
- Check the [addons](/docs/concepts/cluster-administration/addons/) page to
- find your CNI provider and see whether additional upgrade steps are required.
-
- This step is not required on additional control plane nodes if the CNI provider runs as a DaemonSet.
+ This step is not required on additional control plane nodes if the CNI provider runs as a DaemonSet.
**For the other control plane nodes**
Same as the first control plane node but use:
-```
+```shell
sudo kubeadm upgrade node
```
instead of:
-```
+```shell
sudo kubeadm upgrade apply
```
@@ -163,46 +167,50 @@ Also calling `kubeadm upgrade plan` and upgrading the CNI provider plugin is no
### Drain the node
-- Prepare the node for maintenance by marking it unschedulable and evicting the workloads:
+- Prepare the node for maintenance by marking it unschedulable and evicting the workloads:
- ```shell
- # replace with the name of your node you are draining
- kubectl drain --ignore-daemonsets
- ```
+ ```shell
+ # replace with the name of your node you are draining
+ kubectl drain --ignore-daemonsets
+ ```
### Upgrade kubelet and kubectl
-- Upgrade the kubelet and kubectl:
+- Upgrade the kubelet and kubectl:
-{{< tabs name="k8s_install_kubelet" >}}
-{{% tab name="Ubuntu, Debian or HypriotOS" %}}
- # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
- apt-mark unhold kubelet kubectl && \
- apt-get update && apt-get install -y kubelet={{< skew currentVersion >}}.x-00 kubectl={{< skew currentVersion >}}.x-00 && \
- apt-mark hold kubelet kubectl
-{{% /tab %}}
-{{% tab name="CentOS, RHEL or Fedora" %}}
- # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
- yum install -y kubelet-{{< skew currentVersion >}}.x-0 kubectl-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
-{{% /tab %}}
-{{< /tabs >}}
-
+ {{< tabs name="k8s_install_kubelet" >}}
+ {{% tab name="Ubuntu, Debian or HypriotOS" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
+ apt-mark unhold kubelet kubectl && \
+ apt-get update && apt-get install -y kubelet={{< skew currentVersion >}}.x-00 kubectl={{< skew currentVersion >}}.x-00 && \
+ apt-mark hold kubelet kubectl
+ ```
+ {{% /tab %}}
+ {{% tab name="CentOS, RHEL or Fedora" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
+ yum install -y kubelet-{{< skew currentVersion >}}.x-0 kubectl-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
+ ```
+ {{% /tab %}}
+ {{< /tabs >}}
+
-- Restart the kubelet:
+- Restart the kubelet:
- ```shell
- sudo systemctl daemon-reload
- sudo systemctl restart kubelet
- ```
+ ```shell
+ sudo systemctl daemon-reload
+ sudo systemctl restart kubelet
+ ```
### Uncordon the node
-- Bring the node back online by marking it schedulable:
+- Bring the node back online by marking it schedulable:
- ```shell
- # replace with the name of your node
- kubectl uncordon
- ```
+ ```shell
+ # replace with the name of your node
+ kubectl uncordon
+ ```
## Upgrade worker nodes
@@ -211,76 +219,83 @@ without compromising the minimum required capacity for running your workloads.
### Upgrade kubeadm
-- Upgrade kubeadm:
+- Upgrade kubeadm:
-{{< tabs name="k8s_install_kubeadm_worker_nodes" >}}
-{{% tab name="Ubuntu, Debian or HypriotOS" %}}
- # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
- apt-mark unhold kubeadm && \
- apt-get update && apt-get install -y kubeadm={{< skew currentVersion >}}.x-00 && \
- apt-mark hold kubeadm
-{{% /tab %}}
-{{% tab name="CentOS, RHEL or Fedora" %}}
- # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
- yum install -y kubeadm-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
-{{% /tab %}}
-{{< /tabs >}}
+ {{< tabs name="k8s_install_kubeadm_worker_nodes" >}}
+ {{% tab name="Ubuntu, Debian or HypriotOS" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
+ apt-mark unhold kubeadm && \
+ apt-get update && apt-get install -y kubeadm={{< skew currentVersion >}}.x-00 && \
+ apt-mark hold kubeadm
+ ```
+ {{% /tab %}}
+ {{% tab name="CentOS, RHEL or Fedora" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
+ yum install -y kubeadm-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
+ ```
+ {{% /tab %}}
+ {{< /tabs >}}
### Call "kubeadm upgrade"
-- For worker nodes this upgrades the local kubelet configuration:
+- For worker nodes this upgrades the local kubelet configuration:
- ```shell
- sudo kubeadm upgrade node
- ```
+ ```shell
+ sudo kubeadm upgrade node
+ ```
### Drain the node
-- Prepare the node for maintenance by marking it unschedulable and evicting the workloads:
+- Prepare the node for maintenance by marking it unschedulable and evicting the workloads:
- ```shell
- # replace with the name of your node you are draining
- kubectl drain --ignore-daemonsets
- ```
+ ```shell
+ # replace with the name of your node you are draining
+ kubectl drain --ignore-daemonsets
+ ```
### Upgrade kubelet and kubectl
-- Upgrade the kubelet and kubectl:
+- Upgrade the kubelet and kubectl:
-{{< tabs name="k8s_kubelet_and_kubectl" >}}
-{{% tab name="Ubuntu, Debian or HypriotOS" %}}
- # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
- apt-mark unhold kubelet kubectl && \
- apt-get update && apt-get install -y kubelet={{< skew currentVersion >}}.x-00 kubectl={{< skew currentVersion >}}.x-00 && \
- apt-mark hold kubelet kubectl
-{{% /tab %}}
-{{% tab name="CentOS, RHEL or Fedora" %}}
- # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
- yum install -y kubelet-{{< skew currentVersion >}}.x-0 kubectl-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
-{{% /tab %}}
-{{< /tabs >}}
-
+ {{< tabs name="k8s_kubelet_and_kubectl" >}}
+ {{% tab name="Ubuntu, Debian or HypriotOS" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-00 with the latest patch version
+ apt-mark unhold kubelet kubectl && \
+ apt-get update && apt-get install -y kubelet={{< skew currentVersion >}}.x-00 kubectl={{< skew currentVersion >}}.x-00 && \
+ apt-mark hold kubelet kubectl
+ {{% /tab %}}
+ {{% tab name="CentOS, RHEL or Fedora" %}}
+ ```shell
+ # replace x in {{< skew currentVersion >}}.x-0 with the latest patch version
+ yum install -y kubelet-{{< skew currentVersion >}}.x-0 kubectl-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
+ ```
+ {{% /tab %}}
+ {{< /tabs >}}
+
-- Restart the kubelet:
+- Restart the kubelet:
- ```shell
- sudo systemctl daemon-reload
- sudo systemctl restart kubelet
- ```
+ ```shell
+ sudo systemctl daemon-reload
+ sudo systemctl restart kubelet
+ ```
### Uncordon the node
-- Bring the node back online by marking it schedulable:
+- Bring the node back online by marking it schedulable:
- ```shell
- # replace with the name of your node
- kubectl uncordon
- ```
+ ```shell
+ # replace with the name of your node
+ kubectl uncordon
+ ```
## Verify the status of the cluster
-After the kubelet is upgraded on all nodes verify that all nodes are available again by running the following command
-from anywhere kubectl can access the cluster:
+After the kubelet is upgraded on all nodes verify that all nodes are available again by running
+the following command from anywhere kubectl can access the cluster:
```shell
kubectl get nodes
@@ -296,6 +311,7 @@ This command is idempotent and eventually makes sure that the actual state is th
To recover from a bad state, you can also run `kubeadm upgrade apply --force` without changing the version that your cluster is running.
During upgrade kubeadm writes the following backup folders under `/etc/kubernetes/tmp`:
+
- `kubeadm-backup-etcd--`
- `kubeadm-backup-manifests--`
@@ -334,3 +350,4 @@ and post-upgrade manifest file for a certain component, a backup file for it wil
- Fetches the kubeadm `ClusterConfiguration` from the cluster.
- Upgrades the kubelet configuration for this node.
+
diff --git a/content/en/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace.md b/content/en/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace.md
index 6c52dea6e1..e0255eb2bd 100644
--- a/content/en/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace.md
+++ b/content/en/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace.md
@@ -27,7 +27,7 @@ in the namespace.
You must have access to create namespaces in your cluster.
-Your cluster must have at least 1.0 CPU available for use to run the task examples.
+Each node in your cluster must have at least 1.0 CPU available for Pods.
See [meaning of CPU](/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu)
to learn what Kubernetes means by “1 CPU”.
@@ -45,7 +45,7 @@ kubectl create namespace constraints-cpu-example
## Create a LimitRange and a Pod
-Here's an example manifest for a LimitRange:
+Here's a manifest for an example {{< glossary_tooltip text="LimitRange" term_id="limitrange" >}}:
{{< codenew file="admin/resource/cpu-constraints.yaml" >}}
@@ -96,7 +96,7 @@ on these resources, the two values must be the same.
Here's a manifest for a Pod that has one container. The container manifest
specifies a CPU request of 500 millicpu and a CPU limit of 800 millicpu. These satisfy the
-minimum and maximum CPU constraints imposed by the LimitRange.
+minimum and maximum CPU constraints imposed by the LimitRange for this namespace.
{{< codenew file="admin/resource/cpu-constraints-pod.yaml" >}}
@@ -214,7 +214,10 @@ applied the
[default CPU request and limit](/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/)
from the LimitRange for this namespace.
-At this point, your Pod might be running or it might not be running. Recall that a prerequisite for this task is that your cluster must have at least 1 CPU available for use. If each of your Nodes has only 1 CPU, then there might not be enough allocatable CPU on any Node to accommodate a request of 800 millicpu. If you happen to be using Nodes with 2 CPU, then you probably have enough CPU to accommodate the 800 millicpu request.
+At this point, your Pod may or may not be running. Recall that a prerequisite for
+this task is that your Nodes must have at least 1 CPU available for use. If each of your Nodes has only 1 CPU,
+then there might not be enough allocatable CPU on any Node to accommodate a request of 800 millicpu.
+If you happen to be using Nodes with 2 CPU, then you probably have enough CPU to accommodate the 800 millicpu request.
Delete your Pod:
diff --git a/content/en/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace.md b/content/en/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace.md
index 14d50aa4d7..5bbd37fa18 100644
--- a/content/en/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace.md
+++ b/content/en/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace.md
@@ -140,7 +140,8 @@ Create the Pod:
kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod-3.yaml --namespace=default-cpu-example
```
-View the specification of the Pod that you created:
+View the [specification](/docs/concepts/overview/working-with-objects/kubernetes-objects/#object-spec-and-status)
+of the Pod that you created:
```
kubectl get pod default-cpu-demo-3 --output=yaml --namespace=default-cpu-example
diff --git a/content/en/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace.md b/content/en/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace.md
index 3efd899075..9d2d707cb0 100644
--- a/content/en/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace.md
+++ b/content/en/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace.md
@@ -11,8 +11,9 @@ description: >-
This page shows how to set minimum and maximum values for memory used by containers
-running in a namespace. You specify minimum and maximum memory values in a
-[LimitRange](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#limitrange-v1-core)
+running in a {{< glossary_tooltip text="namespace" term_id="namespace" >}}.
+You specify minimum and maximum memory values in a
+[LimitRange](/docs/reference/kubernetes-api/policy-resources/limit-range-v1/)
object. If a Pod does not meet the constraints imposed by the LimitRange,
it cannot be created in the namespace.
@@ -76,8 +77,8 @@ file for the LimitRange, they were created automatically.
Now whenever you define a Pod within the constraints-mem-example namespace, Kubernetes
performs these steps:
-* If any container in that Pod does not specify its own memory request and limit, assign
-the default memory request and limit to that container.
+* If any container in that Pod does not specify its own memory request and limit,
+the control plane assigns the default memory request and limit to that container.
* Verify that every container in that Pod requests at least 500 MiB of memory.
diff --git a/content/en/docs/tasks/administer-cluster/manage-resources/memory-default-namespace.md b/content/en/docs/tasks/administer-cluster/manage-resources/memory-default-namespace.md
index 025277127d..1013800e44 100644
--- a/content/en/docs/tasks/administer-cluster/manage-resources/memory-default-namespace.md
+++ b/content/en/docs/tasks/administer-cluster/manage-resources/memory-default-namespace.md
@@ -172,7 +172,7 @@ resources:
If your namespace has a memory {{< glossary_tooltip text="resource quota" term_id="resource-quota" >}}
configured,
it is helpful to have a default value in place for memory limit.
-Here are two of the restrictions that a resource quota imposes on a namespace:
+Here are three of the restrictions that a resource quota imposes on a namespace:
* For every Pod that runs in the namespace, the Pod and each of its containers must have a memory limit.
(If you specify a memory limit for every container in a Pod, Kubernetes can infer the Pod-level memory
diff --git a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/_index.md b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/_index.md
index 3631722a62..ef046077a8 100644
--- a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/_index.md
+++ b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/_index.md
@@ -15,12 +15,14 @@ in Kubernetes 1.20, there were questions on how this will affect various workloa
installations. Our [Dockershim Removal FAQ](/blog/2022/02/17/dockershim-faq/) is there to help you
to understand the problem better.
-
-
-If you use Docker via dockershim as your container runtime, the Kubernetes project
-recommends that you migrate to an alternative container runtime.
-If you're not sure whether you are using Docker,
-[find out what container runtime is used on a node](/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use/).
+Dockershim was removed from Kubernetes with the release of v1.24.
+If you use Docker Engine via dockershim as your container runtime, and wish to upgrade to v1.24,
+it is recommended that you either migrate to another runtime or find an alternative means to obtain Docker Engine support.
+Check out [container runtimes](/docs/setup/production-environment/container-runtimes/)
+section to know your options. Make sure to
+[report issues](https://github.com/kubernetes/kubernetes/issues) you encountered
+with the migration. So the issue can be fixed in a timely manner and your cluster would be
+ready for dockershim removal.
Your cluster might have more than one kind of node, although this is not a common
configuration.
@@ -28,7 +30,7 @@ configuration.
These tasks will help you to migrate:
* [Check whether Dockershim deprecation affects you](/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/)
-* [Migrating from dockershim](/docs/tasks/administer-cluster/migrating-from-dockershim/)
+* [Migrate Docker Engine nodes from dockershim to cri-dockerd](/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd/)
* [Migrating telemetry and security agents from dockershim](/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents/)
@@ -42,3 +44,4 @@ These tasks will help you to migrate:
* If you found a defect or other technical concern relating to migrating away from dockershim,
you can [report an issue](https://github.com/kubernetes/kubernetes/issues/new/choose)
to the Kubernetes project.
+
diff --git a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md
index b4074a1385..3d79e5d4f7 100644
--- a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md
+++ b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md
@@ -44,7 +44,7 @@ for detailed steps to install containerd.
1. Install the `containerd.io` package from the official Docker repositories.
Instructions for setting up the Docker repository for your respective Linux distribution and
installing the `containerd.io` package can be found at
- [Install Docker Engine](https://docs.docker.com/engine/install/#server).
+ [Getting started with containerd](https://github.com/containerd/containerd/blob/main/docs/getting-started.md).
1. Configure containerd:
diff --git a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you.md b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you.md
similarity index 95%
rename from content/en/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you.md
rename to content/en/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you.md
index 82139fa716..e66e636eca 100644
--- a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you.md
+++ b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you.md
@@ -1,5 +1,5 @@
---
-title: Check whether Dockershim deprecation affects you
+title: Check whether dockershim removal affects you
content_type: task
reviewers:
- SergeyKanzhelev
@@ -10,13 +10,11 @@ weight: 20
The `dockershim` component of Kubernetes allows to use Docker as a Kubernetes's
{{< glossary_tooltip text="container runtime" term_id="container-runtime" >}}.
-Kubernetes' built-in `dockershim` component was
-[deprecated](/blog/2020/12/08/kubernetes-1-20-release-announcement/#dockershim-deprecation)
-in release v1.20.
+Kubernetes' built-in `dockershim` component was removed in release v1.24.
This page explains how your cluster could be using Docker as a container runtime,
provides details on the role that `dockershim` plays when in use, and shows steps
-you can take to check whether any workloads could be affected by `dockershim` deprecation.
+you can take to check whether any workloads could be affected by `dockershim` removal.
## Finding if your app has a dependencies on Docker {#find-docker-dependencies}
diff --git a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use.md b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use.md
index dbfe02d9e6..c4247f085a 100644
--- a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use.md
+++ b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use.md
@@ -41,7 +41,7 @@ node-2 Ready v1.16.15 docker://19.3.1
node-3 Ready v1.16.15 docker://19.3.1
```
If your runtime shows as Docker Engine, you still might not be affected by the
-removal of dockershim in Kubernetes 1.24. [Check the runtime
+removal of dockershim in Kubernetes v1.24. [Check the runtime
endpoint](#which-endpoint) to see if you use dockershim. If you don't use
dockershim, you aren't affected.
@@ -64,7 +64,7 @@ The container runtime talks to the kubelet over a Unix socket using the [CRI
protocol](/docs/concepts/architecture/cri/), which is based on the gRPC
framework. The kubelet acts as a client, and the runtime acts as the server.
In some cases, you might find it useful to know which socket your nodes use. For
-example, with the removal of dockershim in Kubernetes 1.24 and later, you might
+example, with the removal of dockershim in Kubernetes v1.24 and later, you might
want to know whether you use Docker Engine with dockershim.
{{}}
@@ -93,6 +93,7 @@ nodes.
name to find out which runtime you use. For example,
`unix:///run/containerd/containerd.sock` is the containerd endpoint.
-If you use Docker Engine with the dockershim, [migrate to a different runtime](/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd/),
-or, if you want to continue using Docker Engine in v1.24 and later, migrate to a
+If you want to change the Container Runtime on a Node from Docker Engine to containerd,
+you can find out more information on [migrating from Docker Engine to containerd](/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd/),
+or, if you want to continue using Docker Engine in Kubernetes v1.24 and later, migrate to a
CRI-compatible adapter like [`cri-dockerd`](https://github.com/Mirantis/cri-dockerd).
\ No newline at end of file
diff --git a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd.md b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd.md
index 9593a1134a..b9bdcd9a2d 100644
--- a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd.md
+++ b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd.md
@@ -7,17 +7,22 @@ content_type: task
{{% thirdparty-content %}}
This page shows you how to migrate your Docker Engine nodes to use `cri-dockerd`
-instead of dockershim. Follow these steps if your clusters run Kubernetes 1.23
-or earlier and you want to continue using Docker Engine after
-you upgrade to Kubernetes 1.24 and later, or if you just want to move off the
-dockershim component.
+instead of dockershim. You should follow these steps in these scenarios:
+
+ * You want to switch away from dockershim and still use Docker Engine to run
+ containers in Kubernetes.
+ * You want to upgrade to Kubernetes v{{< skew currentVersion >}} and your
+ existing cluster relies on dockershim, in which case you must migrate
+ from dockershim and `cri-dockerd` is one of your options.
+
+To learn more about the removal of dockershim, read the [FAQ page](/dockershim).
## What is cri-dockerd? {#what-is-cri-dockerd}
-In Kubernetes 1.23 and earlier, Docker Engine used a component called the
-dockershim to interact with Kubernetes system components such as the kubelet.
-The dockershim component is deprecated and will be removed in Kubernetes 1.24. A
-third-party replacement, `cri-dockerd`, is available. The `cri-dockerd` adapter
+In Kubernetes 1.23 and earlier, you could use Docker Engine with Kubernetes,
+relying on a built-in component of Kubernetes named _dockershim_.
+The dockershim component was removed in the Kubernetes 1.24 release; however,
+a third-party replacement, `cri-dockerd`, is available. The `cri-dockerd` adapter
lets you use Docker Engine through the {{}}.
{{}}
diff --git a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents.md b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents.md
index 13219bfd6d..3835057c91 100644
--- a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents.md
+++ b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents.md
@@ -13,7 +13,7 @@ Kubernetes' support for direct integration with Docker Engine is deprecated, and
## Telemetry and security agents
Within a Kubernetes cluster there are a few different ways to run telemetry or security agents.
-Some agents have a direct dependency on Docker Engine when they as DaemonSets or
+Some agents have a direct dependency on Docker Engine when they run as DaemonSets or
directly on nodes.
### Why do some telemetry agents communicate with Docker Engine?
diff --git a/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/troubleshooting-cni-plugin-related-errors.md b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/troubleshooting-cni-plugin-related-errors.md
new file mode 100644
index 0000000000..91a471290d
--- /dev/null
+++ b/content/en/docs/tasks/administer-cluster/migrating-from-dockershim/troubleshooting-cni-plugin-related-errors.md
@@ -0,0 +1,145 @@
+---
+title: Troubleshooting CNI plugin-related errors
+content_type: task
+reviewers:
+- mikebrow
+- divya-mohan0209
+weight: 10
+---
+
+
+
+To avoid CNI plugin-related errors, verify that you are using or upgrading to a
+container runtime that has been tested to work correctly with your version of
+Kubernetes.
+
+For example, the following container runtimes are being prepared, or have already been prepared, for Kubernetes v1.24:
+
+* containerd v1.6.4 and later, v1.5.11 and later
+* The CRI-O v1.24.0 and later
+
+## About the "Incompatible CNI versions" and "Failed to destroy network for sandbox" errors
+
+Service issues exist for pod CNI network setup and tear down in containerd
+v1.6.0-v1.6.3 when the CNI plugins have not been upgraded and/or the CNI config
+version is not declared in the CNI config files. The containerd team reports, "these issues are resolved in containerd v1.6.4."
+
+With containerd v1.6.0-v1.6.3, if you do not upgrade the CNI plugins and/or
+declare the CNI config version, you might encounter the following "Incompatible
+CNI versions" or "Failed to destroy network for sandbox" error conditions.
+
+### Incompatible CNI versions error
+
+If the version of your CNI plugin does not correctly match the plugin version in
+the config because the config version is later than the plugin version, the
+containerd log will likely show an error message on startup of a pod similar
+to:
+
+```
+incompatible CNI versions; config is \"1.0.0\", plugin supports [\"0.1.0\" \"0.2.0\" \"0.3.0\" \"0.3.1\" \"0.4.0\"]"
+```
+
+To fix this issue, [update your CNI plugins and CNI config files](#updating-your-cni-plugins-and-cni-config-files).
+
+### Failed to destroy network for sandbox error
+
+If the version of the plugin is missing in the CNI plugin config, the pod may
+run. However, stopping the pod generates an error similar to:
+
+```
+ERRO[2022-04-26T00:43:24.518165483Z] StopPodSandbox for "b" failed
+error="failed to destroy network for sandbox \"bbc85f891eaf060c5a879e27bba9b6b06450210161dfdecfbb2732959fb6500a\": invalid version \"\": the version is empty"
+```
+
+This error leaves the pod in the not-ready state with a network namespace still
+attached. To recover from this problem, [edit the CNI config file](#updating-your-cni-plugins-and-cni-config-files) to add
+the missing version information. The next attempt to stop the pod should
+be successful.
+
+### Updating your CNI plugins and CNI config files
+
+If you're using containerd v1.6.0-v1.6.3 and encountered "Incompatible CNI
+versions" or "Failed to destroy network for sandbox" errors, consider updating
+your CNI plugins and editing the CNI config files.
+
+Here's an overview of the typical steps for each node:
+
+1. [Safely drain and cordon the
+node](/docs/tasks/administer-cluster/safely-drain-node/).
+2. After stopping your container runtime and kubelet services, perform the
+following upgrade operations:
+ - If you're running CNI plugins, upgrade them to the latest version.
+ - If you're using non-CNI plugins, replace them with CNI plugins. Use the
+ latest version of the plugins.
+ - Update the plugin configuration file to specify or match a version of the
+ CNI specification that the plugin supports, as shown in the following ["An
+ example containerd configuration
+ file"](#an-example-containerd-configuration-file) section.
+ - For `containerd`, ensure that you have installed the latest version (v1.0.0
+ or later) of the CNI loopback plugin.
+ - Upgrade node components (for example, the kubelet) to Kubernetes v1.24
+ - Upgrade to or install the most current version of the container runtime.
+3. Bring the node back into your cluster by restarting your container runtime
+and kubelet. Uncordon the node (`kubectl uncordon `).
+
+## An example containerd configuration file
+
+The following example shows a configuration for `containerd` runtime v1.6.x,
+which supports a recent version of the CNI specification (v1.0.0).
+
+Please see the documentation from your plugin and networking provider for
+further instructions on configuring your system.
+
+On Kubernetes, containerd runtime adds a loopback interface, `lo`, to pods as a
+default behavior. The containerd runtime configures the loopback interface via a
+CNI plugin, `loopback`. The `loopback` plugin is distributed as part of the
+`containerd` release packages that have the `cni` designation. `containerd`
+v1.6.0 and later includes a CNI v1.0.0-compatible loopback plugin as well as
+other default CNI plugins. The configuration for the loopback plugin is done
+internally by containerd, and is set to use CNI v1.0.0. This also means that the
+version of the `loopback` plugin must be v1.0.0 or later when this newer version
+`containerd` is started.
+
+The following bash command generates an example CNI config. Here, the 1.0.0
+value for the config version is assigned to the `cniVersion` field for use when
+`containerd` invokes the CNI bridge plugin.
+
+```bash
+cat << EOF | tee /etc/cni/net.d/10-containerd-net.conflist
+{
+ "cniVersion": "1.0.0",
+ "name": "containerd-net",
+ "plugins": [
+ {
+ "type": "bridge",
+ "bridge": "cni0",
+ "isGateway": true,
+ "ipMasq": true,
+ "promiscMode": true,
+ "ipam": {
+ "type": "host-local",
+ "ranges": [
+ [{
+ "subnet": "10.88.0.0/16"
+ }],
+ [{
+ "subnet": "2001:db8:4860::/64"
+ }]
+ ],
+ "routes": [
+ { "dst": "0.0.0.0/0" },
+ { "dst": "::/0" }
+ ]
+ }
+ },
+ {
+ "type": "portmap",
+ "capabilities": {"portMappings": true}
+ }
+ ]
+}
+EOF
+```
+
+Update the IP address ranges in the preceding example with ones that are based
+on your use case and network addressing plan.
diff --git a/content/en/docs/tasks/administer-cluster/quota-api-object.md b/content/en/docs/tasks/administer-cluster/quota-api-object.md
index 11592d2152..ad38f102d4 100644
--- a/content/en/docs/tasks/administer-cluster/quota-api-object.md
+++ b/content/en/docs/tasks/administer-cluster/quota-api-object.md
@@ -89,7 +89,7 @@ kubectl get persistentvolumeclaims --namespace=quota-object-example
The output shows that the PersistentVolumeClaim exists and has status Pending:
-```shell
+```
NAME STATUS
pvc-quota-demo Pending
```
diff --git a/content/en/docs/tasks/administer-cluster/reconfigure-kubelet.md b/content/en/docs/tasks/administer-cluster/reconfigure-kubelet.md
index 8563a39d57..e1effd8f05 100644
--- a/content/en/docs/tasks/administer-cluster/reconfigure-kubelet.md
+++ b/content/en/docs/tasks/administer-cluster/reconfigure-kubelet.md
@@ -12,379 +12,34 @@ min-kubernetes-server-version: v1.11
{{< caution >}}
The [Dynamic Kubelet Configuration](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/281-dynamic-kubelet-configuration)
-feature is deprecated and should not be used.
+feature is deprecated in 1.22 and removed in 1.24.
Please switch to alternative means distributing configuration to the Nodes of your cluster.
{{< /caution >}}
-
[Dynamic Kubelet Configuration](https://github.com/kubernetes/enhancements/issues/281)
-allows you to change the configuration of each
+allowed you to change the configuration of each
{{< glossary_tooltip text="kubelet" term_id="kubelet" >}} in a running Kubernetes cluster,
by deploying a {{< glossary_tooltip text="ConfigMap" term_id="configmap" >}} and configuring
each {{< glossary_tooltip term_id="node" >}} to use it.
-{{< warning >}}
-All kubelet configuration parameters can be changed dynamically,
-but this is unsafe for some parameters. Before deciding to change a parameter
-dynamically, you need a strong understanding of how that change will affect your
-cluster's behavior. Always carefully test configuration changes on a small set
-of nodes before rolling them out cluster-wide. Advice on configuring specific
-fields is available in the inline
-[`KubeletConfiguration`](/docs/reference/config-api/kubelet-config.v1beta1/).
-{{< /warning >}}
-
-
-## {{% heading "prerequisites" %}}
-
-You need to have a Kubernetes cluster.
-You also need `kubectl`, [installed](/docs/tasks/tools/#kubectl) and configured to communicate with your cluster.
-Make sure that you are using a version of `kubectl` that is
-[compatible](/releases/version-skew-policy/) with your cluster.
-{{< version-check >}}
-
-Some of the examples use the command line tool
-[jq](https://stedolan.github.io/jq/). You do not need `jq` to complete the task,
-because there are manual alternatives.
-
-For each node that you're reconfiguring, you must set the kubelet
-`--dynamic-config-dir` flag to a writable directory.
-
-
-
-
-## Reconfiguring the kubelet on a running node in your cluster
-
-### Basic workflow overview
-
-The basic workflow for configuring a kubelet in a live cluster is as follows:
-
-1. Write a YAML or JSON configuration file containing the
- kubelet's configuration.
-2. Wrap this file in a ConfigMap and save it to the Kubernetes control plane.
-3. Update the kubelet's corresponding Node object to use this ConfigMap.
-
-Each kubelet watches a configuration reference on its respective Node object.
-When this reference changes, the kubelet downloads the new configuration,
-updates a local reference to refer to the file, and exits.
-For the feature to work correctly, you must be running an OS-level service
-manager (such as systemd), which will restart the kubelet if it exits. When the
-kubelet is restarted, it will begin using the new configuration.
-
-The new configuration completely overrides configuration provided by `--config`,
-and is overridden by command-line flags. Unspecified values in the new configuration
-will receive default values appropriate to the configuration version
-(e.g. `kubelet.config.k8s.io/v1beta1`), unless overridden by flags.
-
-The status of the Node's kubelet configuration is reported via
-`Node.Status.Config`. Once you have updated a Node to use the new
-ConfigMap, you can observe this status to confirm that the Node is using the
-intended configuration.
-
-This document describes editing Nodes using `kubectl edit`.
-There are other ways to modify a Node's spec, including `kubectl patch`, for
-example, which facilitate scripted workflows.
-
-This document only describes a single Node consuming each ConfigMap. Keep in
-mind that it is also valid for multiple Nodes to consume the same ConfigMap.
-
-{{< warning >}}
-While it is *possible* to change the configuration by
-updating the ConfigMap in-place, this causes all kubelets configured with
-that ConfigMap to update simultaneously. It is much safer to treat ConfigMaps
-as immutable by convention, aided by `kubectl`'s `--append-hash` option,
-and incrementally roll out updates to `Node.Spec.ConfigSource`.
-{{< /warning >}}
-
-### Automatic RBAC rules for Node Authorizer
-
-Previously, you were required to manually create RBAC rules
-to allow Nodes to access their assigned ConfigMaps. The Node Authorizer now
-automatically configures these rules.
-
-### Generating a file that contains the current configuration
-
-The Dynamic Kubelet Configuration feature allows you to provide an override for
-the entire configuration object, rather than a per-field overlay. This is a
-simpler model that makes it easier to trace the source of configuration values
-and debug issues. The compromise, however, is that you must start with knowledge
-of the existing configuration to ensure that you only change the fields you
-intend to change.
-
-The kubelet loads settings from its configuration file, but you can set command
-line flags to override the configuration in the file. This means that if you
-only know the contents of the configuration file, and you don't know the
-command line overrides, then you do not know the running configuration either.
-
-Because you need to know the running configuration in order to override it,
-you can fetch the running configuration from the kubelet. You can generate a
-config file containing a Node's current configuration by accessing the kubelet's
-`configz` endpoint, through `kubectl proxy`. The next section explains how to
-do this.
-
-{{< caution >}}
-The kubelet's `configz` endpoint is there to help with debugging, and is not
-a stable part of kubelet behavior.
-Do not rely on the behavior of this endpoint for production scenarios or for
-use with automated tools.
-{{< /caution >}}
-
-For more information on configuring the kubelet via a configuration file, see
-[Set kubelet parameters via a config file](/docs/tasks/administer-cluster/kubelet-config-file)).
-
-#### Generate the configuration file
-
-{{< note >}}
-The steps below use the `jq` command to streamline working with JSON.
-To follow the tasks as written, you need to have `jq` installed. You can
-adapt the steps if you prefer to extract the `kubeletconfig` subobject manually.
-{{< /note >}}
-
-1. Choose a Node to reconfigure. In this example, the name of this Node is
- referred to as `NODE_NAME`.
-2. Start the kubectl proxy in the background using the following command:
-
- ```shell
- kubectl proxy --port=8001 &
- ```
-3. Run the following command to download and unpack the configuration from the
- `configz` endpoint. The command is long, so be careful when copying and
- pasting. **If you use zsh**, note that common zsh configurations add backslashes
- to escape the opening and closing curly braces around the variable name in the URL.
- For example: `${NODE_NAME}` will be rewritten as `$\{NODE_NAME\}` during the paste.
- You must remove the backslashes before running the command, or the command will fail.
-
-
- ```bash
- NODE_NAME="the-name-of-the-node-you-are-reconfiguring"; curl -sSL "http://localhost:8001/api/v1/nodes/${NODE_NAME}/proxy/configz" | jq '.kubeletconfig|.kind="KubeletConfiguration"|.apiVersion="kubelet.config.k8s.io/v1beta1"' > kubelet_configz_${NODE_NAME}
- ```
-
-{{< note >}}
-You need to manually add the `kind` and `apiVersion` to the downloaded
-object, because those fields are not reported by the `configz` endpoint.
-{{< /note >}}
-
-#### Edit the configuration file
-
-Using a text editor, change one of the parameters in the
-file generated by the previous procedure. For example, you
-might edit the parameter `eventRecordQPS`, that controls
-rate limiting for event recording.
-
-#### Push the configuration file to the control plane
-
-Push the edited configuration file to the control plane with the
-following command:
-
-```bash
-kubectl -n kube-system create configmap my-node-config --from-file=kubelet=kubelet_configz_${NODE_NAME} --append-hash -o yaml
-```
-
-This is an example of a valid response:
-
-```none
-apiVersion: v1
-kind: ConfigMap
-metadata:
- creationTimestamp: 2017-09-14T20:23:33Z
- name: my-node-config-gkt4c2m4b2
- namespace: kube-system
- resourceVersion: "119980"
- uid: 946d785e-998a-11e7-a8dd-42010a800006
-data:
- kubelet: |
- {...}
-```
-
-You created that ConfigMap inside the `kube-system` namespace because the kubelet
-is a Kubernetes system component.
-
-The `--append-hash` option appends a short checksum of the ConfigMap contents
-to the name. This is convenient for an edit-then-push workflow, because it
-automatically, yet deterministically, generates new names for new resources.
-The name that includes this generated hash is referred to as `CONFIG_MAP_NAME`
-in the following examples.
-
-#### Set the Node to use the new configuration
-
-Edit the Node's reference to point to the new ConfigMap with the
-following command:
-
-```bash
-kubectl edit node ${NODE_NAME}
-```
-
-In your text editor, add the following YAML under `spec`:
-
-```yaml
-configSource:
- configMap:
- name: CONFIG_MAP_NAME # replace CONFIG_MAP_NAME with the name of the ConfigMap
- namespace: kube-system
- kubeletConfigKey: kubelet
-```
-
-You must specify all three of `name`, `namespace`, and `kubeletConfigKey`.
-The `kubeletConfigKey` parameter shows the kubelet which key of the ConfigMap
-contains its config.
-
-#### Observe that the Node begins using the new configuration
-
-Retrieve the Node using the `kubectl get node ${NODE_NAME} -o yaml` command and inspect
-`Node.Status.Config`. The config sources corresponding to the `active`,
-`assigned`, and `lastKnownGood` configurations are reported in the status.
-
-- The `active` configuration is the version the kubelet is currently running with.
-- The `assigned` configuration is the latest version the kubelet has resolved based on
- `Node.Spec.ConfigSource`.
-- The `lastKnownGood` configuration is the version the
- kubelet will fall back to if an invalid config is assigned in `Node.Spec.ConfigSource`.
-
-The`lastKnownGood` configuration might not be present if it is set to its default value,
-the local config deployed with the node. The status will update `lastKnownGood` to
-match a valid `assigned` config after the kubelet becomes comfortable with the config.
-The details of how the kubelet determines a config should become the `lastKnownGood` are
-not guaranteed by the API, but is currently implemented as a 10-minute grace period.
-
-You can use the following command (using `jq`) to filter down
-to the config status:
-
-```bash
-kubectl get no ${NODE_NAME} -o json | jq '.status.config'
-```
-
-The following is an example response:
-
-```json
-{
- "active": {
- "configMap": {
- "kubeletConfigKey": "kubelet",
- "name": "my-node-config-9mbkccg2cc",
- "namespace": "kube-system",
- "resourceVersion": "1326",
- "uid": "705ab4f5-6393-11e8-b7cc-42010a800002"
- }
- },
- "assigned": {
- "configMap": {
- "kubeletConfigKey": "kubelet",
- "name": "my-node-config-9mbkccg2cc",
- "namespace": "kube-system",
- "resourceVersion": "1326",
- "uid": "705ab4f5-6393-11e8-b7cc-42010a800002"
- }
- },
- "lastKnownGood": {
- "configMap": {
- "kubeletConfigKey": "kubelet",
- "name": "my-node-config-9mbkccg2cc",
- "namespace": "kube-system",
- "resourceVersion": "1326",
- "uid": "705ab4f5-6393-11e8-b7cc-42010a800002"
- }
- }
-}
-
-```
-
-(if you do not have `jq`, you can look at the whole response and find `Node.Status.Config`
-by eye).
-
-If an error occurs, the kubelet reports it in the `Node.Status.Config.Error`
-structure. Possible errors are listed in
-[Understanding Node.Status.Config.Error messages](#understanding-node-config-status-errors).
-You can search for the identical text in the kubelet log for additional details
-and context about the error.
-
-#### Make more changes
-
-Follow the workflow above to make more changes and push them again. Each time
-you push a ConfigMap with new contents, the `--append-hash` kubectl option creates
-the ConfigMap with a new name. The safest rollout strategy is to first create a
-new ConfigMap, and then update the Node to use the new ConfigMap.
-
-#### Reset the Node to use its local default configuration
-
-To reset the Node to use the configuration it was provisioned with, edit the
-Node using `kubectl edit node ${NODE_NAME}` and remove the
-`Node.Spec.ConfigSource` field.
-
-#### Observe that the Node is using its local default configuration
-
-After removing this subfield, `Node.Status.Config` eventually becomes
-empty, since all config sources have been reset to `nil`, which indicates that
-the local default config is `assigned`, `active`, and `lastKnownGood`, and no
-error is reported.
-
-
-## `kubectl patch` example
-
-You can change a Node's configSource using several different mechanisms.
-This example uses `kubectl patch`:
-
-```bash
-kubectl patch node ${NODE_NAME} -p "{\"spec\":{\"configSource\":{\"configMap\":{\"name\":\"${CONFIG_MAP_NAME}\",\"namespace\":\"kube-system\",\"kubeletConfigKey\":\"kubelet\"}}}}"
-```
-
-## Understanding how the kubelet checkpoints config
-
-When a new config is assigned to the Node, the kubelet downloads and unpacks the
-config payload as a set of files on the local disk. The kubelet also records metadata
-that locally tracks the assigned and last-known-good config sources, so that the
-kubelet knows which config to use across restarts, even if the API server becomes
-unavailable. After checkpointing a config and the relevant metadata, the kubelet
-exits if it detects that the assigned config has changed. When the kubelet is
-restarted by the OS-level service manager (such as `systemd`), it reads the new
-metadata and uses the new config.
-
-The recorded metadata is fully resolved, meaning that it contains all necessary
-information to choose a specific config version - typically a `UID` and `ResourceVersion`.
-This is in contrast to `Node.Spec.ConfigSource`, where the intended config is declared
-via the idempotent `namespace/name` that identifies the target ConfigMap; the kubelet
-tries to use the latest version of this ConfigMap.
-
-When you are debugging problems on a node, you can inspect the kubelet's config
-metadata and checkpoints. The structure of the kubelet's checkpointing directory is:
-
-```none
-- --dynamic-config-dir (root for managing dynamic config)
-| - meta
- | - assigned (encoded kubeletconfig/v1beta1.SerializedNodeConfigSource object, indicating the assigned config)
- | - last-known-good (encoded kubeletconfig/v1beta1.SerializedNodeConfigSource object, indicating the last-known-good config)
-| - checkpoints
- | - uid1 (dir for versions of object identified by uid1)
- | - resourceVersion1 (dir for unpacked files from resourceVersion1 of object with uid1)
- | - ...
- | - ...
-```
-
-## Understanding `Node.Status.Config.Error` messages {#understanding-node-config-status-errors}
-
-The following table describes error messages that can occur
-when using Dynamic Kubelet Config. You can search for the identical text
-in the Kubelet log for additional details and context about the error.
-
-{{< table caption = "Understanding Node.Status.Config.Error messages" >}}
-
-Error Message | Possible Causes
-:-------------| :--------------
-failed to load config, see Kubelet log for details | The kubelet likely could not parse the downloaded config payload, or encountered a filesystem error attempting to load the payload from disk.
-failed to validate config, see Kubelet log for details | The configuration in the payload, combined with any command-line flag overrides, and the sum of feature gates from flags, the config file, and the remote payload, was determined to be invalid by the kubelet.
-invalid NodeConfigSource, exactly one subfield must be non-nil, but all were nil | Since Node.Spec.ConfigSource is validated by the API server to contain at least one non-nil subfield, this likely means that the kubelet is older than the API server and does not recognize a newer source type.
-failed to sync: failed to download config, see Kubelet log for details | The kubelet could not download the config. It is possible that Node.Spec.ConfigSource could not be resolved to a concrete API object, or that network errors disrupted the download attempt. The kubelet will retry the download when in this error state.
-failed to sync: internal failure, see Kubelet log for details | The kubelet encountered some internal problem and failed to update its config as a result. Examples include filesystem errors and reading objects from the internal informer cache.
-internal failure, see Kubelet log for details | The kubelet encountered some internal problem while manipulating config, outside of the configuration sync loop.
-
-{{< /table >}}
-
-
-## {{% heading "whatsnext" %}}
-
-- [Set kubelet parameters via a config file](/docs/tasks/administer-cluster/kubelet-config-file)
- explains the supported way to configure a kubelet.
-- See the reference documentation for Node, including the `configSource` field within
- the Node's [.spec](/docs/reference/kubernetes-api/cluster-resources/node-v1/#NodeSpec)
-- Learn more about kubelet configuration by checking the
- [`KubeletConfiguration`](/docs/reference/config-api/kubelet-config.v1beta1/)
- reference.
-
+Please find documentation on this feature in [earlier versions of documentation](https://v1-23.docs.kubernetes.io/docs/tasks/administer-cluster/reconfigure-kubelet/).
+
+## Migrating from using Dynamic Kubelet Configuration
+
+There is no recommended replacement for this feature that works generically
+across various Kubernetes distributions. If you are using managed Kubernetes
+version, please consult with the vendor hosting Kubernetes for the best
+practices for customizing your Kubernetes. If you are using `kubeadm`, refer to
+[Configuring each kubelet in your cluster using kubeadm](/docs/setup/production-environment/tools/kubeadm/kubelet-integration/).
+
+In order to migrate off the Dynamic Kubelet Configuration feature, the
+alternative mechanism should be used to distribute kubelet configuration files.
+In order to apply configuration, config file must be updated and kubelet restarted.
+See the [Set Kubelet parameters via a config file](/docs/tasks/administer-cluster/kubelet-config-file/)
+for information.
+
+Please note, the `DynamicKubeletConfig` feature gate cannot be set on a kubelet
+starting v1.24 as it has no effect. However, the feature gate is not removed
+from the API server or the controller manager before v1.26. This is designed for
+the control plane to support nodes with older versions of kubelets and for
+satisfying the [Kubernetes version skew policy](/releases/version-skew-policy/).
diff --git a/content/en/docs/tasks/administer-cluster/securing-a-cluster.md b/content/en/docs/tasks/administer-cluster/securing-a-cluster.md
index cc463a86c6..f125fd6cf2 100644
--- a/content/en/docs/tasks/administer-cluster/securing-a-cluster.md
+++ b/content/en/docs/tasks/administer-cluster/securing-a-cluster.md
@@ -210,7 +210,7 @@ access to a subset of the keyspace is strongly recommended.
### Enable audit logging
-The [audit logger](/docs/tasks/debug-application-cluster/audit/) is a beta feature that records actions taken by the
+The [audit logger](/docs/tasks/debug/debug-cluster/audit/) is a beta feature that records actions taken by the
API for later analysis in the event of a compromise. It is recommended to enable audit logging
and archive the audit file on a secure server.
diff --git a/content/en/docs/tasks/administer-cluster/topology-manager.md b/content/en/docs/tasks/administer-cluster/topology-manager.md
index e8d2e7c19d..4002537f0c 100644
--- a/content/en/docs/tasks/administer-cluster/topology-manager.md
+++ b/content/en/docs/tasks/administer-cluster/topology-manager.md
@@ -20,7 +20,7 @@ An increasing number of systems leverage a combination of CPUs and hardware acce
In order to extract the best performance, optimizations related to CPU isolation, memory and device locality are required. However, in Kubernetes, these optimizations are handled by a disjoint set of components.
-_Topology Manager_ is a Kubelet component that aims to co-ordinate the set of components that are responsible for these optimizations.
+_Topology Manager_ is a Kubelet component that aims to coordinate the set of components that are responsible for these optimizations.
@@ -267,4 +267,4 @@ Using this information the Topology Manager calculates the optimal hint for the
### Known Limitations
1. The maximum number of NUMA nodes that Topology Manager allows is 8. With more than 8 NUMA nodes there will be a state explosion when trying to enumerate the possible NUMA affinities and generating their hints.
-2. The scheduler is not topology-aware, so it is possible to be scheduled on a node and then fail on the node due to the Topology Manager.
\ No newline at end of file
+2. The scheduler is not topology-aware, so it is possible to be scheduled on a node and then fail on the node due to the Topology Manager.
diff --git a/content/en/docs/tasks/administer-cluster/verify-signed-images.md b/content/en/docs/tasks/administer-cluster/verify-signed-images.md
new file mode 100644
index 0000000000..5ae1db1134
--- /dev/null
+++ b/content/en/docs/tasks/administer-cluster/verify-signed-images.md
@@ -0,0 +1,72 @@
+---
+title: Verify Signed Container Images
+content_type: task
+min-kubernetes-server-version: v1.24
+---
+
+
+
+{{< feature-state state="alpha" for_k8s_version="v1.24" >}}
+
+## {{% heading "prerequisites" %}}
+
+These instructions are for Kubernetes {{< skew currentVersion >}}. If you want
+to check the integrity of components for a different version of Kubernetes,
+check the documentation for that Kubernetes release.
+
+You will need to have the following tools installed:
+
+- `cosign` ([install guide](https://docs.sigstore.dev/cosign/installation/))
+- `curl` (often provided by your operating system)
+
+## Verifying image signatures
+
+For a complete list of images that are signed please refer
+to [Releases](/releases/download/).
+
+Let's pick one image from this list and verify its signature using
+the `cosign verify` command:
+
+```shell
+COSIGN_EXPERIMENTAL=1 cosign verify k8s.gcr.io/kube-apiserver-amd64:v1.24.0
+```
+
+{{< note >}}
+`COSIGN_EXPERIMENTAL=1` is used to allow verification of images signed
+in `KEYLESS` mode. To learn more about keyless signing, please refer to
+[Keyless Signatures](https://github.com/sigstore/cosign/blob/main/KEYLESS.md#keyless-signatures)
+. {{< /note >}}
+
+### Verifying images for all control plane components
+
+To verify all signed control plane images, please run this command:
+
+```shell
+curl -Ls https://sbom.k8s.io/$(curl -Ls https://dl.k8s.io/release/latest.txt)/release | grep 'PackageName: k8s.gcr.io/' | awk '{print $2}' > images.txt
+input=images.txt
+while IFS= read -r image
+do
+ COSIGN_EXPERIMENTAL=1 cosign verify "$image"
+done < "$input"
+```
+
+Once you have verified an image, specify that image by its digest in your Pod
+manifests as per this
+example: `registry-url/image-name@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2`
+.
+
+For more information, please refer
+to [Image Pull Policy](/docs/concepts/containers/images/#image-pull-policy)
+section.
+
+## Verifying Image Signatures with Admission Controller
+
+For non-control plane images (
+e.g. [conformance image](https://github.com/kubernetes/kubernetes/blob/master/test/conformance/image/README.md))
+, signatures can also be verified at deploy time using
+[cosigned](https://docs.sigstore.dev/cosign/kubernetes/#cosigned-admission-controller)
+admission controller. To get started with `cosigned` here are a few helpful
+resources:
+
+* [Installation](https://github.com/sigstore/helm-charts/tree/main/charts/cosigned)
+* [Configuration Options](https://github.com/sigstore/cosign/tree/main/config)
diff --git a/content/en/docs/tasks/configure-pod-container/assign-memory-resource.md b/content/en/docs/tasks/configure-pod-container/assign-memory-resource.md
index 137571d8e8..d923d6356c 100644
--- a/content/en/docs/tasks/configure-pod-container/assign-memory-resource.md
+++ b/content/en/docs/tasks/configure-pod-container/assign-memory-resource.md
@@ -171,7 +171,7 @@ kubectl get pod memory-demo-2 --output=yaml --namespace=mem-example
The output shows that the Container was killed because it is out of memory (OOM):
-```shell
+```yaml
lastState:
terminated:
containerID: 65183c1877aaec2e8427bc95609cc52677a454b56fcb24340dbd22917c23b10f
@@ -278,7 +278,7 @@ kubectl describe pod memory-demo-3 --namespace=mem-example
The output shows that the Container cannot be scheduled because of insufficient memory on the Nodes:
-```shell
+```
Events:
... Reason Message
------ -------
@@ -291,8 +291,8 @@ The memory resource is measured in bytes. You can express memory as a plain inte
fixed-point integer with one of these suffixes: E, P, T, G, M, K, Ei, Pi, Ti, Gi, Mi, Ki.
For example, the following represent approximately the same value:
-```shell
-128974848, 129e6, 129M , 123Mi
+```
+128974848, 129e6, 129M, 123Mi
```
Delete your Pod:
diff --git a/content/en/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md b/content/en/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
index 6ebfcc2a28..b26baabe9e 100644
--- a/content/en/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
+++ b/content/en/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
@@ -59,7 +59,7 @@ and restarts it.
When the container starts, it executes this command:
```shell
-/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
+/bin/sh -c "touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600"
```
For the first 30 seconds of the container's life, there is a `/tmp/healthy` file.
@@ -223,7 +223,7 @@ kubectl describe pod goproxy
## Define a gRPC liveness probe
-{{< feature-state for_k8s_version="v1.23" state="alpha" >}}
+{{< feature-state for_k8s_version="v1.24" state="beta" >}}
If your application implements [gRPC Health Checking Protocol](https://github.com/grpc/grpc/blob/master/doc/health-checking.md),
kubelet can be configured to use it for application liveness checks.
@@ -233,7 +233,7 @@ in order to configure checks that rely on gRPC.
Here is an example manifest:
-{{< codenew file="pods/probe/grpc-liveness.yaml">}}
+{{< codenew file="pods/probe/grpc-liveness.yaml" >}}
To use a gRPC probe, `port` must be configured. If the health endpoint is configured
on a non-default service, you must also specify the `service`.
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 62b334e068..8dc36c5e39 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
@@ -10,7 +10,7 @@ card:
Many applications rely on configuration which is used during either application initialization or runtime.
Most of the times there is a requirement to adjust values assigned to configuration parameters.
-ConfigMaps is the kubernetes way to inject application pods with configuration data.
+ConfigMaps is the kubernetes way to inject application pods with configuration data.
ConfigMaps allow you to decouple configuration artifacts from image content to keep containerized applications portable. This page provides a series of usage examples demonstrating how to create ConfigMaps and configure Pods using data stored in ConfigMaps.
@@ -461,35 +461,35 @@ configmap/special-config-2-c92b5mmcf2 created
### Define a container environment variable with data from a single ConfigMap
-1. Define an environment variable as a key-value pair in a ConfigMap:
+1. Define an environment variable as a key-value pair in a ConfigMap:
- ```shell
- kubectl create configmap special-config --from-literal=special.how=very
- ```
+ ```shell
+ kubectl create configmap special-config --from-literal=special.how=very
+ ```
-2. Assign the `special.how` value defined in the ConfigMap to the `SPECIAL_LEVEL_KEY` environment variable in the Pod specification.
+2. Assign the `special.how` value defined in the ConfigMap to the `SPECIAL_LEVEL_KEY` environment variable in the Pod specification.
{{< codenew file="pods/pod-single-configmap-env-variable.yaml" >}}
Create the Pod:
- ```shell
- kubectl create -f https://kubernetes.io/examples/pods/pod-single-configmap-env-variable.yaml
- ```
+ ```shell
+ kubectl create -f https://kubernetes.io/examples/pods/pod-single-configmap-env-variable.yaml
+ ```
Now, the Pod's output includes environment variable `SPECIAL_LEVEL_KEY=very`.
### Define container environment variables with data from multiple ConfigMaps
- * As with the previous example, create the ConfigMaps first.
+* As with the previous example, create the ConfigMaps first.
- {{< codenew file="configmap/configmaps.yaml" >}}
+ {{< codenew file="configmap/configmaps.yaml" >}}
- Create the ConfigMap:
+ Create the ConfigMap:
- ```shell
- kubectl create -f https://kubernetes.io/examples/configmap/configmaps.yaml
- ```
+ ```shell
+ kubectl create -f https://kubernetes.io/examples/configmap/configmaps.yaml
+ ```
* Define the environment variables in the Pod specification.
@@ -497,9 +497,9 @@ configmap/special-config-2-c92b5mmcf2 created
Create the Pod:
- ```shell
- kubectl create -f https://kubernetes.io/examples/pods/pod-multiple-configmap-env-variable.yaml
- ```
+ ```shell
+ kubectl create -f https://kubernetes.io/examples/pods/pod-multiple-configmap-env-variable.yaml
+ ```
Now, the Pod's output includes environment variables `SPECIAL_LEVEL_KEY=very` and `LOG_LEVEL=INFO`.
@@ -515,21 +515,21 @@ This functionality is available in Kubernetes v1.6 and later.
Create the ConfigMap:
- ```shell
- kubectl create -f https://kubernetes.io/examples/configmap/configmap-multikeys.yaml
- ```
+ ```shell
+ kubectl create -f https://kubernetes.io/examples/configmap/configmap-multikeys.yaml
+ ```
* Use `envFrom` to define all of the ConfigMap's data as container environment variables. The key from the ConfigMap becomes the environment variable name in the Pod.
- {{< codenew file="pods/pod-configmap-envFrom.yaml" >}}
+ {{< codenew file="pods/pod-configmap-envFrom.yaml" >}}
- Create the Pod:
+ Create the Pod:
- ```shell
- kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-envFrom.yaml
- ```
+ ```shell
+ kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-envFrom.yaml
+ ```
- Now, the Pod's output includes environment variables `SPECIAL_LEVEL=very` and `SPECIAL_TYPE=charm`.
+ Now, the Pod's output includes environment variables `SPECIAL_LEVEL=very` and `SPECIAL_TYPE=charm`.
## Use ConfigMap-defined environment variables in Pod commands
@@ -548,7 +548,7 @@ kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-env-var-valu
produces the following output in the `test-container` container:
-```shell
+```
very charm
```
@@ -582,7 +582,7 @@ kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-volume.yaml
When the pod runs, the command `ls /etc/config/` produces the output below:
-```shell
+```
SPECIAL_LEVEL
SPECIAL_TYPE
```
@@ -610,7 +610,7 @@ kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-volume-speci
When the pod runs, the command `cat /etc/config/keys` produces the output below:
-```shell
+```
very
```
@@ -680,15 +680,15 @@ data:
- If you use `envFrom` to define environment variables from ConfigMaps, keys that are considered invalid will be skipped. The pod will be allowed to start, but the invalid names will be recorded in the event log (`InvalidVariableNames`). The log message lists each skipped key. For example:
- ```shell
- kubectl get events
- ```
+ ```shell
+ kubectl get events
+ ```
- The output is similar to this:
- ```
- LASTSEEN FIRSTSEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE
- 0s 0s 1 dapi-test-pod Pod Warning InvalidEnvironmentVariableNames {kubelet, 127.0.0.1} Keys [1badkey, 2alsobad] from the EnvFrom configMap default/myconfig were skipped since they are considered invalid environment variable names.
- ```
+ The output is similar to this:
+ ```
+ LASTSEEN FIRSTSEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE
+ 0s 0s 1 dapi-test-pod Pod Warning InvalidEnvironmentVariableNames {kubelet, 127.0.0.1} Keys [1badkey, 2alsobad] from the EnvFrom configMap default/myconfig were skipped since they are considered invalid environment variable names.
+ ```
- ConfigMaps reside in a specific {{< glossary_tooltip term_id="namespace" >}}. A ConfigMap can only be referenced by pods residing in the same namespace.
@@ -699,4 +699,3 @@ data:
## {{% heading "whatsnext" %}}
* Follow a real world example of [Configuring Redis using a ConfigMap](/docs/tutorials/configuration/configure-redis-using-configmap/).
-
diff --git a/content/en/docs/tasks/configure-pod-container/configure-pod-initialization.md b/content/en/docs/tasks/configure-pod-container/configure-pod-initialization.md
index cca96f2b79..97457b55f1 100644
--- a/content/en/docs/tasks/configure-pod-container/configure-pod-initialization.md
+++ b/content/en/docs/tasks/configure-pod-container/configure-pod-initialization.md
@@ -85,8 +85,7 @@ The output shows that nginx is serving the web page that was written by the init
[communicating between Containers running in the same Pod](/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/).
* Learn more about [Init Containers](/docs/concepts/workloads/pods/init-containers/).
* Learn more about [Volumes](/docs/concepts/storage/volumes/).
-* Learn more about [Debugging Init Containers](/docs/tasks/debug-application-cluster/debug-init-containers/)
-
+* Learn more about [Debugging Init Containers](/docs/tasks/debug/debug-application/debug-init-containers/)
diff --git a/content/en/docs/tasks/configure-pod-container/configure-runasusername.md b/content/en/docs/tasks/configure-pod-container/configure-runasusername.md
index 9ddcac270f..58028f9c89 100644
--- a/content/en/docs/tasks/configure-pod-container/configure-runasusername.md
+++ b/content/en/docs/tasks/configure-pod-container/configure-runasusername.md
@@ -57,7 +57,7 @@ echo $env:USERNAME
The output should be:
-```shell
+```
ContainerUser
```
@@ -97,7 +97,7 @@ echo $env:USERNAME
The output should be:
-```shell
+```
ContainerAdministrator
```
@@ -120,7 +120,7 @@ For more information about these limtations, check [here](https://support.micros
## {{% heading "whatsnext" %}}
-* [Guide for scheduling Windows containers in Kubernetes](/docs/setup/production-environment/windows/user-guide-windows-containers/)
-* [Managing Workload Identity with Group Managed Service Accounts (GMSA)](/docs/setup/production-environment/windows/user-guide-windows-containers/#managing-workload-identity-with-group-managed-service-accounts)
+* [Guide for scheduling Windows containers in Kubernetes](/docs/concepts/windows/user-guide/)
+* [Managing Workload Identity with Group Managed Service Accounts (GMSA)](/docs/concepts/windows/user-guide/#managing-workload-identity-with-group-managed-service-accounts)
* [Configure GMSA for Windows pods and containers](/docs/tasks/configure-pod-container/configure-gmsa/)
diff --git a/content/en/docs/tasks/configure-pod-container/enforce-standards-namespace-labels.md b/content/en/docs/tasks/configure-pod-container/enforce-standards-namespace-labels.md
index 121f9b15e7..e7cf331a78 100644
--- a/content/en/docs/tasks/configure-pod-container/enforce-standards-namespace-labels.md
+++ b/content/en/docs/tasks/configure-pod-container/enforce-standards-namespace-labels.md
@@ -7,7 +7,11 @@ content_type: task
min-kubernetes-server-version: v1.22
---
-Namespaces can be labeled to enforce the [Pod Security Standards](/docs/concepts/security/pod-security-standards).
+Namespaces can be labeled to enforce the [Pod Security Standards](/docs/concepts/security/pod-security-standards). The three policies
+[privileged](/docs/concepts/security/pod-security-standards/#privileged), [baseline](/docs/concepts/security/pod-security-standards/#baseline)
+and [restricted](/docs/concepts/security/pod-security-standards/#restricted) broadly cover the security spectrum
+and are implemented by the [Pod Security](/docs/concepts/security/pod-security-admission/) {{< glossary_tooltip
+text="admission controller" term_id="admission-controller" >}}.
## {{% heading "prerequisites" %}}
diff --git a/content/en/docs/tasks/configure-pod-container/migrate-from-psp.md b/content/en/docs/tasks/configure-pod-container/migrate-from-psp.md
index d8251158b2..1879ba5ba7 100644
--- a/content/en/docs/tasks/configure-pod-container/migrate-from-psp.md
+++ b/content/en/docs/tasks/configure-pod-container/migrate-from-psp.md
@@ -312,7 +312,7 @@ appropriate Pod Security profile is applied to new namespaces.
You can also statically configure the Pod Security admission controller to set a default enforce,
audit, and/or warn level for unlabeled namespaces. See
-[Configure the Admission Controller](docs/tasks/configure-pod-container/enforce-standards-admission-controller/#configure-the-admission-controller)
+[Configure the Admission Controller](/docs/tasks/configure-pod-container/enforce-standards-admission-controller/#configure-the-admission-controller)
for more information.
## 5. Disable PodSecurityPolicy {#disable-psp}
diff --git a/content/en/docs/tasks/configure-pod-container/quality-service-pod.md b/content/en/docs/tasks/configure-pod-container/quality-service-pod.md
index abe6320563..c1a00bcc3d 100644
--- a/content/en/docs/tasks/configure-pod-container/quality-service-pod.md
+++ b/content/en/docs/tasks/configure-pod-container/quality-service-pod.md
@@ -107,7 +107,7 @@ kubectl delete pod qos-demo --namespace=qos-example
A Pod is given a QoS class of Burstable if:
* The Pod does not meet the criteria for QoS class Guaranteed.
-* At least one Container in the Pod has a memory or CPU request.
+* At least one Container in the Pod has a memory or CPU request or limit.
Here is the configuration file for a Pod that has one Container. The Container has a memory limit of 200 MiB
and a memory request of 100 MiB.
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 bd7e05a18f..91b914bc54 100644
--- a/content/en/docs/tasks/configure-pod-container/security-context.md
+++ b/content/en/docs/tasks/configure-pod-container/security-context.md
@@ -399,7 +399,7 @@ in the `securityContext` section of your Pod or Container manifest. The
[SeccompProfile](/docs/reference/generated/kubernetes-api/{{< param "version"
>}}/#seccompprofile-v1-core) object consisting of `type` and `localhostProfile`.
Valid options for `type` include `RuntimeDefault`, `Unconfined`, and
-`Localhost`. `localhostProfile` must only be set set if `type: Localhost`. It
+`Localhost`. `localhostProfile` must only be set if `type: Localhost`. It
indicates the path of the pre-configured profile on the node, relative to the
kubelet's configured Seccomp profile location (configured with the `--root-dir`
flag).
diff --git a/content/en/docs/tasks/debug-application-cluster/_index.md b/content/en/docs/tasks/debug-application-cluster/_index.md
deleted file mode 100644
index 0aa5f76478..0000000000
--- a/content/en/docs/tasks/debug-application-cluster/_index.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: "Monitoring, Logging, and Debugging"
-description: Set up monitoring and logging to troubleshoot a cluster, or debug a containerized application.
-weight: 80
----
-
diff --git a/content/en/docs/tasks/debug-application-cluster/debug-cluster.md b/content/en/docs/tasks/debug-application-cluster/debug-cluster.md
deleted file mode 100644
index 391efe4376..0000000000
--- a/content/en/docs/tasks/debug-application-cluster/debug-cluster.md
+++ /dev/null
@@ -1,124 +0,0 @@
----
-reviewers:
-- davidopp
-title: Troubleshoot Clusters
-content_type: concept
----
-
-
-
-This doc is about cluster troubleshooting; we assume you have already ruled out your application as the root cause of the
-problem you are experiencing. See
-the [application troubleshooting guide](/docs/tasks/debug-application-cluster/debug-application) for tips on application debugging.
-You may also visit [troubleshooting document](/docs/tasks/debug-application-cluster/troubleshooting/) for more information.
-
-
-
-## Listing your cluster
-
-The first thing to debug in your cluster is if your nodes are all registered correctly.
-
-Run
-
-```shell
-kubectl get nodes
-```
-
-And verify that all of the nodes you expect to see are present and that they are all in the `Ready` state.
-
-To get detailed information about the overall health of your cluster, you can run:
-
-```shell
-kubectl cluster-info dump
-```
-## Looking at logs
-
-For now, digging deeper into the cluster requires logging into the relevant machines. Here are the locations
-of the relevant log files. (note that on systemd-based systems, you may need to use `journalctl` instead)
-
-### Master
-
- * `/var/log/kube-apiserver.log` - API Server, responsible for serving the API
- * `/var/log/kube-scheduler.log` - Scheduler, responsible for making scheduling decisions
- * `/var/log/kube-controller-manager.log` - Controller that manages replication controllers
-
-### Worker Nodes
-
- * `/var/log/kubelet.log` - Kubelet, responsible for running containers on the node
- * `/var/log/kube-proxy.log` - Kube Proxy, responsible for service load balancing
-
-## A general overview of cluster failure modes
-
-This is an incomplete list of things that could go wrong, and how to adjust your cluster setup to mitigate the problems.
-
-### Root causes:
-
- - VM(s) shutdown
- - Network partition within cluster, or between cluster and users
- - Crashes in Kubernetes software
- - Data loss or unavailability of persistent storage (e.g. GCE PD or AWS EBS volume)
- - Operator error, for example misconfigured Kubernetes software or application software
-
-### Specific scenarios:
-
- - Apiserver VM shutdown or apiserver crashing
- - Results
- - unable to stop, update, or start new pods, services, replication controller
- - existing pods and services should continue to work normally, unless they depend on the Kubernetes API
- - Apiserver backing storage lost
- - Results
- - apiserver should fail to come up
- - kubelets will not be able to reach it but will continue to run the same pods and provide the same service proxying
- - manual recovery or recreation of apiserver state necessary before apiserver is restarted
- - Supporting services (node controller, replication controller manager, scheduler, etc) VM shutdown or crashes
- - currently those are colocated with the apiserver, and their unavailability has similar consequences as apiserver
- - in future, these will be replicated as well and may not be co-located
- - they do not have their own persistent state
- - Individual node (VM or physical machine) shuts down
- - Results
- - pods on that Node stop running
- - Network partition
- - Results
- - partition A thinks the nodes in partition B are down; partition B thinks the apiserver is down. (Assuming the master VM ends up in partition A.)
- - Kubelet software fault
- - Results
- - crashing kubelet cannot start new pods on the node
- - kubelet might delete the pods or not
- - node marked unhealthy
- - replication controllers start new pods elsewhere
- - Cluster operator error
- - Results
- - loss of pods, services, etc
- - lost of apiserver backing store
- - users unable to read API
- - etc.
-
-### Mitigations:
-
-- Action: Use IaaS provider's automatic VM restarting feature for IaaS VMs
- - Mitigates: Apiserver VM shutdown or apiserver crashing
- - Mitigates: Supporting services VM shutdown or crashes
-
-- Action: Use IaaS providers reliable storage (e.g. GCE PD or AWS EBS volume) for VMs with apiserver+etcd
- - Mitigates: Apiserver backing storage lost
-
-- Action: Use [high-availability](/docs/setup/production-environment/tools/kubeadm/high-availability/) configuration
- - Mitigates: Control plane node shutdown or control plane components (scheduler, API server, controller-manager) crashing
- - Will tolerate one or more simultaneous node or component failures
- - Mitigates: API server backing storage (i.e., etcd's data directory) lost
- - Assumes HA (highly-available) etcd configuration
-
-- Action: Snapshot apiserver PDs/EBS-volumes periodically
- - Mitigates: Apiserver backing storage lost
- - Mitigates: Some cases of operator error
- - Mitigates: Some cases of Kubernetes software fault
-
-- Action: use replication controller and services in front of pods
- - Mitigates: Node shutdown
- - Mitigates: Kubelet software fault
-
-- Action: applications (containers) designed to tolerate unexpected restarts
- - Mitigates: Node shutdown
- - Mitigates: Kubelet software fault
-
-
diff --git a/content/en/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md b/content/en/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md
deleted file mode 100644
index 56d00d5323..0000000000
--- a/content/en/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-reviewers:
-- bprashanth
-title: Debug Pods and ReplicationControllers
-content_type: task
----
-
-
-
-This page shows how to debug Pods and ReplicationControllers.
-
-## {{% heading "prerequisites" %}}
-
-
-{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
-
-* You should be familiar with the basics of
- {{< glossary_tooltip text="Pods" term_id="pod" >}} and with
- Pods' [lifecycles](/docs/concepts/workloads/pods/pod-lifecycle/).
-
-
-
-## Debugging Pods
-
-The first step in debugging a pod is taking a look at it. Check the current
-state of the pod and recent events with the following command:
-
-```shell
-kubectl describe pods ${POD_NAME}
-```
-
-Look at the state of the containers in the pod. Are they all `Running`? Have
-there been recent restarts?
-
-Continue debugging depending on the state of the pods.
-
-### My pod stays pending
-
-If a pod is stuck in `Pending` it means that it can not be scheduled onto a
-node. Generally this is because there are insufficient resources of one type or
-another that prevent scheduling. Look at the output of the `kubectl describe
-...` command above. There should be messages from the scheduler about why it
-can not schedule your pod. Reasons include:
-
-#### Insufficient resources
-
-You may have exhausted the supply of CPU or Memory in your cluster. In this
-case you can try several things:
-
-* Add more nodes to the cluster.
-
-* [Terminate unneeded pods](/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination)
- to make room for pending pods.
-
-* Check that the pod is not larger than your nodes. For example, if all
- nodes have a capacity of `cpu:1`, then a pod with a request of `cpu: 1.1`
- will never be scheduled.
-
- You can check node capacities with the `kubectl get nodes -o `
- command. Here are some example command lines that extract the necessary
- information:
-
- ```shell
- kubectl get nodes -o yaml | egrep '\sname:|cpu:|memory:'
- kubectl get nodes -o json | jq '.items[] | {name: .metadata.name, cap: .status.capacity}'
- ```
-
- The [resource quota](/docs/concepts/policy/resource-quotas/)
- feature can be configured to limit the total amount of
- resources that can be consumed. If used in conjunction with namespaces, it can
- prevent one team from hogging all the resources.
-
-#### Using hostPort
-
-When you bind a pod to a `hostPort` there are a limited number of places that
-the pod can be scheduled. In most cases, `hostPort` is unnecessary; try using a
-service object to expose your pod. If you do require `hostPort` then you can
-only schedule as many pods as there are nodes in your container cluster.
-
-### My pod stays waiting
-
-If a pod is stuck in the `Waiting` state, then it has been scheduled to a
-worker node, but it can't run on that machine. Again, the information from
-`kubectl describe ...` should be informative. The most common cause of
-`Waiting` pods is a failure to pull the image. There are three things to check:
-
-* Make sure that you have the name of the image correct.
-* Have you pushed the image to the repository?
-* Try to manually pull the image to see if it can be pulled. For example, if you
- use Docker on your PC, run `docker pull `.
-
-### My pod is crashing or otherwise unhealthy
-
-Once your pod has been scheduled, the methods described in [Debug Running Pods](
-/docs/tasks/debug-application-cluster/debug-running-pod/) are available for debugging.
-
-
-## Debugging ReplicationControllers
-
-ReplicationControllers are fairly straightforward. They can either create pods
-or they can't. If they can't create pods, then please refer to the
-[instructions above](#debugging-pods) to debug your pods.
-
-You can also use `kubectl describe rc ${CONTROLLER_NAME}` to inspect events
-related to the replication controller.
-
-
diff --git a/content/en/docs/tasks/debug-application-cluster/debug-running-pod.md b/content/en/docs/tasks/debug-application-cluster/debug-running-pod.md
deleted file mode 100644
index c3922ed0a1..0000000000
--- a/content/en/docs/tasks/debug-application-cluster/debug-running-pod.md
+++ /dev/null
@@ -1,333 +0,0 @@
----
-reviewers:
-- verb
-- soltysh
-title: Debug Running Pods
-content_type: task
----
-
-
-
-This page explains how to debug Pods running (or crashing) on a Node.
-
-
-
-## {{% heading "prerequisites" %}}
-
-
-* Your {{< glossary_tooltip text="Pod" term_id="pod" >}} should already be
- scheduled and running. If your Pod is not yet running, start with [Troubleshoot
- Applications](/docs/tasks/debug-application-cluster/debug-application/).
-* For some of the advanced debugging steps you need to know on which Node the
- Pod is running and have shell access to run commands on that Node. You don't
- need that access to run the standard debug steps that use `kubectl`.
-
-
-
-
-
-## Examining pod logs {#examine-pod-logs}
-
-First, look at the logs of the affected container:
-
-```shell
-kubectl logs ${POD_NAME} ${CONTAINER_NAME}
-```
-
-If your container has previously crashed, you can access the previous container's crash log with:
-
-```shell
-kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME}
-```
-
-## Debugging with container exec {#container-exec}
-
-If the {{< glossary_tooltip text="container image" term_id="image" >}} includes
-debugging utilities, as is the case with images built from Linux and Windows OS
-base images, you can run commands inside a specific container with
-`kubectl exec`:
-
-```shell
-kubectl exec ${POD_NAME} -c ${CONTAINER_NAME} -- ${CMD} ${ARG1} ${ARG2} ... ${ARGN}
-```
-
-{{< note >}}
-`-c ${CONTAINER_NAME}` is optional. You can omit it for Pods that only contain a single container.
-{{< /note >}}
-
-As an example, to look at the logs from a running Cassandra pod, you might run
-
-```shell
-kubectl exec cassandra -- cat /var/log/cassandra/system.log
-```
-
-You can run a shell that's connected to your terminal using the `-i` and `-t`
-arguments to `kubectl exec`, for example:
-
-```shell
-kubectl exec -it cassandra -- sh
-```
-
-For more details, see [Get a Shell to a Running Container](
-/docs/tasks/debug-application-cluster/get-shell-running-container/).
-
-## Debugging with an ephemeral debug container {#ephemeral-container}
-
-{{< feature-state state="beta" for_k8s_version="v1.23" >}}
-
-{{< glossary_tooltip text="Ephemeral containers" term_id="ephemeral-container" >}}
-are useful for interactive troubleshooting when `kubectl exec` is insufficient
-because a container has crashed or a container image doesn't include debugging
-utilities, such as with [distroless images](
-https://github.com/GoogleContainerTools/distroless).
-
-### Example debugging using ephemeral containers {#ephemeral-container-example}
-
-You can use the `kubectl debug` command to add ephemeral containers to a
-running Pod. First, create a pod for the example:
-
-```shell
-kubectl run ephemeral-demo --image=k8s.gcr.io/pause:3.1 --restart=Never
-```
-
-The examples in this section use the `pause` container image because it does not
-contain debugging utilities, but this method works with all container
-images.
-
-If you attempt to use `kubectl exec` to create a shell you will see an error
-because there is no shell in this container image.
-
-```shell
-kubectl exec -it ephemeral-demo -- sh
-```
-
-```
-OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown
-```
-
-You can instead add a debugging container using `kubectl debug`. If you
-specify the `-i`/`--interactive` argument, `kubectl` will automatically attach
-to the console of the Ephemeral Container.
-
-```shell
-kubectl debug -it ephemeral-demo --image=busybox:1.28 --target=ephemeral-demo
-```
-
-```
-Defaulting debug container name to debugger-8xzrl.
-If you don't see a command prompt, try pressing enter.
-/ #
-```
-
-This command adds a new busybox container and attaches to it. The `--target`
-parameter targets the process namespace of another container. It's necessary
-here because `kubectl run` does not enable [process namespace sharing](
-/docs/tasks/configure-pod-container/share-process-namespace/) in the pod it
-creates.
-
-{{< note >}}
-The `--target` parameter must be supported by the {{< glossary_tooltip
-text="Container Runtime" term_id="container-runtime" >}}. When not supported,
-the Ephemeral Container may not be started, or it may be started with an
-isolated process namespace so that `ps` does not reveal processes in other
-containers.
-{{< /note >}}
-
-You can view the state of the newly created ephemeral container using `kubectl describe`:
-
-```shell
-kubectl describe pod ephemeral-demo
-```
-
-```
-...
-Ephemeral Containers:
- debugger-8xzrl:
- Container ID: docker://b888f9adfd15bd5739fefaa39e1df4dd3c617b9902082b1cfdc29c4028ffb2eb
- Image: busybox
- Image ID: docker-pullable://busybox@sha256:1828edd60c5efd34b2bf5dd3282ec0cc04d47b2ff9caa0b6d4f07a21d1c08084
- Port:
- Host Port:
- State: Running
- Started: Wed, 12 Feb 2020 14:25:42 +0100
- Ready: False
- Restart Count: 0
- Environment:
- Mounts:
-...
-```
-
-Use `kubectl delete` to remove the Pod when you're finished:
-
-```shell
-kubectl delete pod ephemeral-demo
-```
-
-## Debugging using a copy of the Pod
-
-Sometimes Pod configuration options make it difficult to troubleshoot in certain
-situations. For example, you can't run `kubectl exec` to troubleshoot your
-container if your container image does not include a shell or if your application
-crashes on startup. In these situations you can use `kubectl debug` to create a
-copy of the Pod with configuration values changed to aid debugging.
-
-### Copying a Pod while adding a new container
-
-Adding a new container can be useful when your application is running but not
-behaving as you expect and you'd like to add additional troubleshooting
-utilities to the Pod.
-
-For example, maybe your application's container images are built on `busybox`
-but you need debugging utilities not included in `busybox`. You can simulate
-this scenario using `kubectl run`:
-
-```shell
-kubectl run myapp --image=busybox:1.28 --restart=Never -- sleep 1d
-```
-
-Run this command to create a copy of `myapp` named `myapp-debug` that adds a
-new Ubuntu container for debugging:
-
-```shell
-kubectl debug myapp -it --image=ubuntu --share-processes --copy-to=myapp-debug
-```
-
-```
-Defaulting debug container name to debugger-w7xmf.
-If you don't see a command prompt, try pressing enter.
-root@myapp-debug:/#
-```
-
-{{< note >}}
-* `kubectl debug` automatically generates a container name if you don't choose
- one using the `--container` flag.
-* The `-i` flag causes `kubectl debug` to attach to the new container by
- default. You can prevent this by specifying `--attach=false`. If your session
- becomes disconnected you can reattach using `kubectl attach`.
-* The `--share-processes` allows the containers in this Pod to see processes
- from the other containers in the Pod. For more information about how this
- works, see [Share Process Namespace between Containers in a Pod](
- /docs/tasks/configure-pod-container/share-process-namespace/).
-{{< /note >}}
-
-Don't forget to clean up the debugging Pod when you're finished with it:
-
-```shell
-kubectl delete pod myapp myapp-debug
-```
-
-### Copying a Pod while changing its command
-
-Sometimes it's useful to change the command for a container, for example to
-add a debugging flag or because the application is crashing.
-
-To simulate a crashing application, use `kubectl run` to create a container
-that immediately exits:
-
-```
-kubectl run --image=busybox:1.28 myapp -- false
-```
-
-You can see using `kubectl describe pod myapp` that this container is crashing:
-
-```
-Containers:
- myapp:
- Image: busybox
- ...
- Args:
- false
- State: Waiting
- Reason: CrashLoopBackOff
- Last State: Terminated
- Reason: Error
- Exit Code: 1
-```
-
-You can use `kubectl debug` to create a copy of this Pod with the command
-changed to an interactive shell:
-
-```
-kubectl debug myapp -it --copy-to=myapp-debug --container=myapp -- sh
-```
-
-```
-If you don't see a command prompt, try pressing enter.
-/ #
-```
-
-Now you have an interactive shell that you can use to perform tasks like
-checking filesystem paths or running the container command manually.
-
-{{< note >}}
-* To change the command of a specific container you must
- specify its name using `--container` or `kubectl debug` will instead
- create a new container to run the command you specified.
-* The `-i` flag causes `kubectl debug` to attach to the container by default.
- You can prevent this by specifying `--attach=false`. If your session becomes
- disconnected you can reattach using `kubectl attach`.
-{{< /note >}}
-
-Don't forget to clean up the debugging Pod when you're finished with it:
-
-```shell
-kubectl delete pod myapp myapp-debug
-```
-
-### Copying a Pod while changing container images
-
-In some situations you may want to change a misbehaving Pod from its normal
-production container images to an image containing a debugging build or
-additional utilities.
-
-As an example, create a Pod using `kubectl run`:
-
-```
-kubectl run myapp --image=busybox:1.28 --restart=Never -- sleep 1d
-```
-
-Now use `kubectl debug` to make a copy and change its container image
-to `ubuntu`:
-
-```
-kubectl debug myapp --copy-to=myapp-debug --set-image=*=ubuntu
-```
-
-The syntax of `--set-image` uses the same `container_name=image` syntax as
-`kubectl set image`. `*=ubuntu` means change the image of all containers
-to `ubuntu`.
-
-Don't forget to clean up the debugging Pod when you're finished with it:
-
-```shell
-kubectl delete pod myapp myapp-debug
-```
-
-## Debugging via a shell on the node {#node-shell-session}
-
-If none of these approaches work, you can find the Node on which the Pod is
-running and create a privileged Pod running in the host namespaces. To create
-an interactive shell on a node using `kubectl debug`, run:
-
-```shell
-kubectl debug node/mynode -it --image=ubuntu
-```
-
-```
-Creating debugging pod node-debugger-mynode-pdx84 with container debugger on node mynode.
-If you don't see a command prompt, try pressing enter.
-root@ek8s:/#
-```
-
-When creating a debugging session on a node, keep in mind that:
-
-* `kubectl debug` automatically generates the name of the new Pod based on
- the name of the Node.
-* The container runs in the host IPC, Network, and PID namespaces.
-* The root filesystem of the Node will be mounted at `/host`.
-
-Don't forget to clean up the debugging Pod when you're finished with it:
-
-```shell
-kubectl delete pod node-debugger-mynode-pdx84
-```
diff --git a/content/en/docs/tasks/debug-application-cluster/troubleshooting.md b/content/en/docs/tasks/debug/_index.md
similarity index 94%
rename from content/en/docs/tasks/debug-application-cluster/troubleshooting.md
rename to content/en/docs/tasks/debug/_index.md
index f000d019e8..da024f4af9 100644
--- a/content/en/docs/tasks/debug-application-cluster/troubleshooting.md
+++ b/content/en/docs/tasks/debug/_index.md
@@ -1,9 +1,12 @@
---
+title: "Monitoring, Logging, and Debugging"
+description: Set up monitoring and logging to troubleshoot a cluster, or debug a containerized application.
+weight: 20
reviewers:
- brendandburns
- davidopp
content_type: concept
-title: Troubleshooting
+no_list: true
---
@@ -11,9 +14,9 @@ title: Troubleshooting
Sometimes things go wrong. This guide is aimed at making them right. It has
two sections:
-* [Troubleshooting your application](/docs/tasks/debug-application-cluster/debug-application/) - Useful
+* [Debugging your application](/docs/tasks/debug/debug-application/) - Useful
for users who are deploying code into Kubernetes and wondering why it is not working.
-* [Troubleshooting your cluster](/docs/tasks/debug-application-cluster/debug-cluster/) - Useful
+* [Debugging your cluster](/docs/tasks/debug/debug-cluster/) - Useful
for cluster administrators and people whose Kubernetes cluster is unhappy.
You should also check the known issues for the [release](https://github.com/kubernetes/kubernetes/releases)
diff --git a/content/en/docs/tasks/debug/debug-application/_index.md b/content/en/docs/tasks/debug/debug-application/_index.md
new file mode 100644
index 0000000000..e027ac4f49
--- /dev/null
+++ b/content/en/docs/tasks/debug/debug-application/_index.md
@@ -0,0 +1,8 @@
+---
+title: "Troubleshooting Applications"
+description: Debugging common containerized application issues.
+weight: 20
+---
+
+This doc contains a set of resources for fixing issues with containerized applications. It covers things like common issues with Kubernetes resources (like Pods, Services, or StatefulSets), advice on making sense of container termination messages, and ways to debug running containers.
+
diff --git a/content/en/docs/tasks/debug-application-cluster/debug-init-containers.md b/content/en/docs/tasks/debug/debug-application/debug-init-containers.md
similarity index 99%
rename from content/en/docs/tasks/debug-application-cluster/debug-init-containers.md
rename to content/en/docs/tasks/debug/debug-application/debug-init-containers.md
index c3cf109ea7..6e5bafa355 100644
--- a/content/en/docs/tasks/debug-application-cluster/debug-init-containers.md
+++ b/content/en/docs/tasks/debug/debug-application/debug-init-containers.md
@@ -9,6 +9,7 @@ reviewers:
- smarterclayton
title: Debug Init Containers
content_type: task
+weight: 40
---
diff --git a/content/en/docs/tasks/debug-application-cluster/debug-application.md b/content/en/docs/tasks/debug/debug-application/debug-pods.md
similarity index 92%
rename from content/en/docs/tasks/debug-application-cluster/debug-application.md
rename to content/en/docs/tasks/debug/debug-application/debug-pods.md
index 179a86021b..77fff23a52 100644
--- a/content/en/docs/tasks/debug-application-cluster/debug-application.md
+++ b/content/en/docs/tasks/debug/debug-application/debug-pods.md
@@ -2,15 +2,16 @@
reviewers:
- mikedanese
- thockin
-title: Troubleshoot Applications
+title: Debug Pods
content_type: concept
+weight: 10
---
This guide is to help users debug applications that are deployed into Kubernetes and not behaving correctly.
This is *not* a guide for people who want to debug their cluster. For that you should check out
-[this guide](/docs/tasks/debug-application-cluster/debug-cluster).
+[this guide](/docs/tasks/debug/debug-cluster).
@@ -64,7 +65,7 @@ Again, the information from `kubectl describe ...` should be informative. The m
#### My pod is crashing or otherwise unhealthy
Once your pod has been scheduled, the methods described in [Debug Running Pods](
-/docs/tasks/debug-application-cluster/debug-running-pod/) are available for debugging.
+/docs/tasks/debug/debug-application/debug-running-pod/) are available for debugging.
#### My pod is running but not doing what I told it to do
@@ -145,15 +146,15 @@ Verify that the pod's `containerPort` matches up with the Service's `targetPort`
#### Network traffic is not forwarded
-Please see [debugging service](/docs/tasks/debug-application-cluster/debug-service/) for more information.
+Please see [debugging service](/docs/tasks/debug/debug-application/debug-service/) for more information.
## {{% heading "whatsnext" %}}
If none of the above solves your problem, follow the instructions in
-[Debugging Service document](/docs/tasks/debug-application-cluster/debug-service/)
+[Debugging Service document](/docs/tasks/debug/debug-application/debug-service/)
to make sure that your `Service` is running, has `Endpoints`, and your `Pods` are
actually serving; you have DNS working, iptables rules installed, and kube-proxy
does not seem to be misbehaving.
-You may also visit [troubleshooting document](/docs/tasks/debug-application-cluster/troubleshooting/) for more information.
+You may also visit [troubleshooting document](/docs/tasks/debug/overview/) for more information.
diff --git a/content/en/docs/tasks/debug-application-cluster/debug-application-introspection.md b/content/en/docs/tasks/debug/debug-application/debug-running-pod.md
similarity index 54%
rename from content/en/docs/tasks/debug-application-cluster/debug-application-introspection.md
rename to content/en/docs/tasks/debug/debug-application/debug-running-pod.md
index c7720ad1f6..a810c60efa 100644
--- a/content/en/docs/tasks/debug-application-cluster/debug-application-introspection.md
+++ b/content/en/docs/tasks/debug/debug-application/debug-running-pod.md
@@ -1,21 +1,25 @@
---
reviewers:
-- janetkuo
-- thockin
-content_type: concept
-title: Application Introspection and Debugging
+- verb
+- soltysh
+title: Debug Running Pods
+content_type: task
---
-Once your application is running, you'll inevitably need to debug problems with it.
-Earlier we described how you can use `kubectl get pods` to retrieve simple status information about
-your pods. But there are a number of ways to get even more information about your application.
+This page explains how to debug Pods running (or crashing) on a Node.
+## {{% heading "prerequisites" %}}
-
+* Your {{< glossary_tooltip text="Pod" term_id="pod" >}} should already be
+ scheduled and running. If your Pod is not yet running, start with [Debugging
+ Pods](/docs/tasks/debug/debug-application/).
+* For some of the advanced debugging steps you need to know on which Node the
+ Pod is running and have shell access to run commands on that Node. You don't
+ need that access to run the standard debug steps that use `kubectl`.
## Using `kubectl describe pod` to fetch details about pods
@@ -125,6 +129,7 @@ Currently the only Condition associated with a Pod is the binary Ready condition
Lastly, you see a log of recent events related to your Pod. The system compresses multiple identical events by indicating the first and last time it was seen and the number of times it was seen. "From" indicates the component that is logging the event, "SubobjectPath" tells you which object (e.g. container within the pod) is being referred to, and "Reason" and "Message" tell you what happened.
+
## Example: debugging Pending Pods
A common scenario that you can detect using events is when you've created a Pod that won't fit on any node. For example, the Pod might request more resources than are free on any node, or it might specify a label selector that doesn't match any nodes. Let's say we created the previous Deployment with 5 replicas (instead of 2) and requesting 600 millicores instead of 500, on a four-node cluster where each (virtual) machine has 1 CPU. In that case one of the Pods will not be able to schedule. (Note that because of the cluster addon pods such as fluentd, skydns, etc., that run on each node, if we requested 1000 millicores then none of the Pods would be able to schedule.)
@@ -326,197 +331,308 @@ status:
startTime: "2022-02-17T21:51:01Z"
```
-## Example: debugging a down/unreachable node
+## Examining pod logs {#examine-pod-logs}
-Sometimes when debugging it can be useful to look at the status of a node -- for example, because you've noticed strange behavior of a Pod that's running on the node, or to find out why a Pod won't schedule onto the node. As with Pods, you can use `kubectl describe node` and `kubectl get node -o yaml` to retrieve detailed information about nodes. For example, here's what you'll see if a node is down (disconnected from the network, or kubelet dies and won't restart, etc.). Notice the events that show the node is NotReady, and also notice that the pods are no longer running (they are evicted after five minutes of NotReady status).
+First, look at the logs of the affected container:
```shell
-kubectl get nodes
+kubectl logs ${POD_NAME} ${CONTAINER_NAME}
```
-```none
-NAME STATUS ROLES AGE VERSION
-kube-worker-1 NotReady 1h v1.23.3
-kubernetes-node-bols Ready 1h v1.23.3
-kubernetes-node-st6x Ready 1h v1.23.3
-kubernetes-node-unaj Ready 1h v1.23.3
-```
+If your container has previously crashed, you can access the previous container's crash log with:
```shell
-kubectl describe node kube-worker-1
+kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME}
```
-```none
-Name: kube-worker-1
-Roles:
-Labels: beta.kubernetes.io/arch=amd64
- beta.kubernetes.io/os=linux
- kubernetes.io/arch=amd64
- kubernetes.io/hostname=kube-worker-1
- kubernetes.io/os=linux
-Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock
- node.alpha.kubernetes.io/ttl: 0
- volumes.kubernetes.io/controller-managed-attach-detach: true
-CreationTimestamp: Thu, 17 Feb 2022 16:46:30 -0500
-Taints: node.kubernetes.io/unreachable:NoExecute
- node.kubernetes.io/unreachable:NoSchedule
-Unschedulable: false
-Lease:
- HolderIdentity: kube-worker-1
- AcquireTime:
- RenewTime: Thu, 17 Feb 2022 17:13:09 -0500
-Conditions:
- Type Status LastHeartbeatTime LastTransitionTime Reason Message
- ---- ------ ----------------- ------------------ ------ -------
- NetworkUnavailable False Thu, 17 Feb 2022 17:09:13 -0500 Thu, 17 Feb 2022 17:09:13 -0500 WeaveIsUp Weave pod has set this
- MemoryPressure Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
- DiskPressure Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
- PIDPressure Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
- Ready Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
-Addresses:
- InternalIP: 192.168.0.113
- Hostname: kube-worker-1
-Capacity:
- cpu: 2
- ephemeral-storage: 15372232Ki
- hugepages-2Mi: 0
- memory: 2025188Ki
- pods: 110
-Allocatable:
- cpu: 2
- ephemeral-storage: 14167048988
- hugepages-2Mi: 0
- memory: 1922788Ki
- pods: 110
-System Info:
- Machine ID: 9384e2927f544209b5d7b67474bbf92b
- System UUID: aa829ca9-73d7-064d-9019-df07404ad448
- Boot ID: 5a295a03-aaca-4340-af20-1327fa5dab5c
- Kernel Version: 5.13.0-28-generic
- OS Image: Ubuntu 21.10
- Operating System: linux
- Architecture: amd64
- Container Runtime Version: containerd://1.5.9
- Kubelet Version: v1.23.3
- Kube-Proxy Version: v1.23.3
-Non-terminated Pods: (4 in total)
- Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits Age
- --------- ---- ------------ ---------- --------------- ------------- ---
- default nginx-deployment-67d4bdd6f5-cx2nz 500m (25%) 500m (25%) 128Mi (6%) 128Mi (6%) 23m
- default nginx-deployment-67d4bdd6f5-w6kd7 500m (25%) 500m (25%) 128Mi (6%) 128Mi (6%) 23m
- kube-system kube-proxy-dnxbz 0 (0%) 0 (0%) 0 (0%) 0 (0%) 28m
- kube-system weave-net-gjxxp 100m (5%) 0 (0%) 200Mi (10%) 0 (0%) 28m
-Allocated resources:
- (Total limits may be over 100 percent, i.e., overcommitted.)
- Resource Requests Limits
- -------- -------- ------
- cpu 1100m (55%) 1 (50%)
- memory 456Mi (24%) 256Mi (13%)
- ephemeral-storage 0 (0%) 0 (0%)
- hugepages-2Mi 0 (0%) 0 (0%)
-Events:
+## Debugging with container exec {#container-exec}
+
+If the {{< glossary_tooltip text="container image" term_id="image" >}} includes
+debugging utilities, as is the case with images built from Linux and Windows OS
+base images, you can run commands inside a specific container with
+`kubectl exec`:
+
+```shell
+kubectl exec ${POD_NAME} -c ${CONTAINER_NAME} -- ${CMD} ${ARG1} ${ARG2} ... ${ARGN}
+```
+
+{{< note >}}
+`-c ${CONTAINER_NAME}` is optional. You can omit it for Pods that only contain a single container.
+{{< /note >}}
+
+As an example, to look at the logs from a running Cassandra pod, you might run
+
+```shell
+kubectl exec cassandra -- cat /var/log/cassandra/system.log
+```
+
+You can run a shell that's connected to your terminal using the `-i` and `-t`
+arguments to `kubectl exec`, for example:
+
+```shell
+kubectl exec -it cassandra -- sh
+```
+
+For more details, see [Get a Shell to a Running Container](
+/docs/tasks/debug/debug-application/get-shell-running-container/).
+
+## Debugging with an ephemeral debug container {#ephemeral-container}
+
+{{< feature-state state="beta" for_k8s_version="v1.23" >}}
+
+{{< glossary_tooltip text="Ephemeral containers" term_id="ephemeral-container" >}}
+are useful for interactive troubleshooting when `kubectl exec` is insufficient
+because a container has crashed or a container image doesn't include debugging
+utilities, such as with [distroless images](
+https://github.com/GoogleContainerTools/distroless).
+
+### Example debugging using ephemeral containers {#ephemeral-container-example}
+
+You can use the `kubectl debug` command to add ephemeral containers to a
+running Pod. First, create a pod for the example:
+
+```shell
+kubectl run ephemeral-demo --image=k8s.gcr.io/pause:3.1 --restart=Never
+```
+
+The examples in this section use the `pause` container image because it does not
+contain debugging utilities, but this method works with all container
+images.
+
+If you attempt to use `kubectl exec` to create a shell you will see an error
+because there is no shell in this container image.
+
+```shell
+kubectl exec -it ephemeral-demo -- sh
+```
+
+```
+OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown
+```
+
+You can instead add a debugging container using `kubectl debug`. If you
+specify the `-i`/`--interactive` argument, `kubectl` will automatically attach
+to the console of the Ephemeral Container.
+
+```shell
+kubectl debug -it ephemeral-demo --image=busybox:1.28 --target=ephemeral-demo
+```
+
+```
+Defaulting debug container name to debugger-8xzrl.
+If you don't see a command prompt, try pressing enter.
+/ #
+```
+
+This command adds a new busybox container and attaches to it. The `--target`
+parameter targets the process namespace of another container. It's necessary
+here because `kubectl run` does not enable [process namespace sharing](
+/docs/tasks/configure-pod-container/share-process-namespace/) in the pod it
+creates.
+
+{{< note >}}
+The `--target` parameter must be supported by the {{< glossary_tooltip
+text="Container Runtime" term_id="container-runtime" >}}. When not supported,
+the Ephemeral Container may not be started, or it may be started with an
+isolated process namespace so that `ps` does not reveal processes in other
+containers.
+{{< /note >}}
+
+You can view the state of the newly created ephemeral container using `kubectl describe`:
+
+```shell
+kubectl describe pod ephemeral-demo
+```
+
+```
+...
+Ephemeral Containers:
+ debugger-8xzrl:
+ Container ID: docker://b888f9adfd15bd5739fefaa39e1df4dd3c617b9902082b1cfdc29c4028ffb2eb
+ Image: busybox
+ Image ID: docker-pullable://busybox@sha256:1828edd60c5efd34b2bf5dd3282ec0cc04d47b2ff9caa0b6d4f07a21d1c08084
+ Port:
+ Host Port:
+ State: Running
+ Started: Wed, 12 Feb 2020 14:25:42 +0100
+ Ready: False
+ Restart Count: 0
+ Environment:
+ Mounts:
...
```
+Use `kubectl delete` to remove the Pod when you're finished:
+
```shell
-kubectl get node kube-worker-1 -o yaml
+kubectl delete pod ephemeral-demo
```
-```yaml
-apiVersion: v1
-kind: Node
-metadata:
- annotations:
- kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock
- node.alpha.kubernetes.io/ttl: "0"
- volumes.kubernetes.io/controller-managed-attach-detach: "true"
- creationTimestamp: "2022-02-17T21:46:30Z"
- labels:
- beta.kubernetes.io/arch: amd64
- beta.kubernetes.io/os: linux
- kubernetes.io/arch: amd64
- kubernetes.io/hostname: kube-worker-1
- kubernetes.io/os: linux
- name: kube-worker-1
- resourceVersion: "4026"
- uid: 98efe7cb-2978-4a0b-842a-1a7bf12c05f8
-spec: {}
-status:
- addresses:
- - address: 192.168.0.113
- type: InternalIP
- - address: kube-worker-1
- type: Hostname
- allocatable:
- cpu: "2"
- ephemeral-storage: "14167048988"
- hugepages-2Mi: "0"
- memory: 1922788Ki
- pods: "110"
- capacity:
- cpu: "2"
- ephemeral-storage: 15372232Ki
- hugepages-2Mi: "0"
- memory: 2025188Ki
- pods: "110"
- conditions:
- - lastHeartbeatTime: "2022-02-17T22:20:32Z"
- lastTransitionTime: "2022-02-17T22:20:32Z"
- message: Weave pod has set this
- reason: WeaveIsUp
- status: "False"
- type: NetworkUnavailable
- - lastHeartbeatTime: "2022-02-17T22:20:15Z"
- lastTransitionTime: "2022-02-17T22:13:25Z"
- message: kubelet has sufficient memory available
- reason: KubeletHasSufficientMemory
- status: "False"
- type: MemoryPressure
- - lastHeartbeatTime: "2022-02-17T22:20:15Z"
- lastTransitionTime: "2022-02-17T22:13:25Z"
- message: kubelet has no disk pressure
- reason: KubeletHasNoDiskPressure
- status: "False"
- type: DiskPressure
- - lastHeartbeatTime: "2022-02-17T22:20:15Z"
- lastTransitionTime: "2022-02-17T22:13:25Z"
- message: kubelet has sufficient PID available
- reason: KubeletHasSufficientPID
- status: "False"
- type: PIDPressure
- - lastHeartbeatTime: "2022-02-17T22:20:15Z"
- lastTransitionTime: "2022-02-17T22:15:15Z"
- message: kubelet is posting ready status. AppArmor enabled
- reason: KubeletReady
- status: "True"
- type: Ready
- daemonEndpoints:
- kubeletEndpoint:
- Port: 10250
- nodeInfo:
- architecture: amd64
- bootID: 22333234-7a6b-44d4-9ce1-67e31dc7e369
- containerRuntimeVersion: containerd://1.5.9
- kernelVersion: 5.13.0-28-generic
- kubeProxyVersion: v1.23.3
- kubeletVersion: v1.23.3
- machineID: 9384e2927f544209b5d7b67474bbf92b
- operatingSystem: linux
- osImage: Ubuntu 21.10
- systemUUID: aa829ca9-73d7-064d-9019-df07404ad448
+## Debugging using a copy of the Pod
+
+Sometimes Pod configuration options make it difficult to troubleshoot in certain
+situations. For example, you can't run `kubectl exec` to troubleshoot your
+container if your container image does not include a shell or if your application
+crashes on startup. In these situations you can use `kubectl debug` to create a
+copy of the Pod with configuration values changed to aid debugging.
+
+### Copying a Pod while adding a new container
+
+Adding a new container can be useful when your application is running but not
+behaving as you expect and you'd like to add additional troubleshooting
+utilities to the Pod.
+
+For example, maybe your application's container images are built on `busybox`
+but you need debugging utilities not included in `busybox`. You can simulate
+this scenario using `kubectl run`:
+
+```shell
+kubectl run myapp --image=busybox:1.28 --restart=Never -- sleep 1d
```
+Run this command to create a copy of `myapp` named `myapp-debug` that adds a
+new Ubuntu container for debugging:
-## {{% heading "whatsnext" %}}
+```shell
+kubectl debug myapp -it --image=ubuntu --share-processes --copy-to=myapp-debug
+```
+```
+Defaulting debug container name to debugger-w7xmf.
+If you don't see a command prompt, try pressing enter.
+root@myapp-debug:/#
+```
-Learn about additional debugging tools, including:
+{{< note >}}
+* `kubectl debug` automatically generates a container name if you don't choose
+ one using the `--container` flag.
+* The `-i` flag causes `kubectl debug` to attach to the new container by
+ default. You can prevent this by specifying `--attach=false`. If your session
+ becomes disconnected you can reattach using `kubectl attach`.
+* The `--share-processes` allows the containers in this Pod to see processes
+ from the other containers in the Pod. For more information about how this
+ works, see [Share Process Namespace between Containers in a Pod](
+ /docs/tasks/configure-pod-container/share-process-namespace/).
+{{< /note >}}
-* [Logging](/docs/concepts/cluster-administration/logging/)
-* [Monitoring](/docs/tasks/debug-application-cluster/resource-usage-monitoring/)
-* [Getting into containers via `exec`](/docs/tasks/debug-application-cluster/get-shell-running-container/)
-* [Connecting to containers via proxies](/docs/tasks/extend-kubernetes/http-proxy-access-api/)
-* [Connecting to containers via port forwarding](/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)
-* [Inspect Kubernetes node with crictl](/docs/tasks/debug-application-cluster/crictl/)
+Don't forget to clean up the debugging Pod when you're finished with it:
+```shell
+kubectl delete pod myapp myapp-debug
+```
+### Copying a Pod while changing its command
+
+Sometimes it's useful to change the command for a container, for example to
+add a debugging flag or because the application is crashing.
+
+To simulate a crashing application, use `kubectl run` to create a container
+that immediately exits:
+
+```
+kubectl run --image=busybox:1.28 myapp -- false
+```
+
+You can see using `kubectl describe pod myapp` that this container is crashing:
+
+```
+Containers:
+ myapp:
+ Image: busybox
+ ...
+ Args:
+ false
+ State: Waiting
+ Reason: CrashLoopBackOff
+ Last State: Terminated
+ Reason: Error
+ Exit Code: 1
+```
+
+You can use `kubectl debug` to create a copy of this Pod with the command
+changed to an interactive shell:
+
+```
+kubectl debug myapp -it --copy-to=myapp-debug --container=myapp -- sh
+```
+
+```
+If you don't see a command prompt, try pressing enter.
+/ #
+```
+
+Now you have an interactive shell that you can use to perform tasks like
+checking filesystem paths or running the container command manually.
+
+{{< note >}}
+* To change the command of a specific container you must
+ specify its name using `--container` or `kubectl debug` will instead
+ create a new container to run the command you specified.
+* The `-i` flag causes `kubectl debug` to attach to the container by default.
+ You can prevent this by specifying `--attach=false`. If your session becomes
+ disconnected you can reattach using `kubectl attach`.
+{{< /note >}}
+
+Don't forget to clean up the debugging Pod when you're finished with it:
+
+```shell
+kubectl delete pod myapp myapp-debug
+```
+
+### Copying a Pod while changing container images
+
+In some situations you may want to change a misbehaving Pod from its normal
+production container images to an image containing a debugging build or
+additional utilities.
+
+As an example, create a Pod using `kubectl run`:
+
+```
+kubectl run myapp --image=busybox:1.28 --restart=Never -- sleep 1d
+```
+
+Now use `kubectl debug` to make a copy and change its container image
+to `ubuntu`:
+
+```
+kubectl debug myapp --copy-to=myapp-debug --set-image=*=ubuntu
+```
+
+The syntax of `--set-image` uses the same `container_name=image` syntax as
+`kubectl set image`. `*=ubuntu` means change the image of all containers
+to `ubuntu`.
+
+Don't forget to clean up the debugging Pod when you're finished with it:
+
+```shell
+kubectl delete pod myapp myapp-debug
+```
+
+## Debugging via a shell on the node {#node-shell-session}
+
+If none of these approaches work, you can find the Node on which the Pod is
+running and create a privileged Pod running in the host namespaces. To create
+an interactive shell on a node using `kubectl debug`, run:
+
+```shell
+kubectl debug node/mynode -it --image=ubuntu
+```
+
+```
+Creating debugging pod node-debugger-mynode-pdx84 with container debugger on node mynode.
+If you don't see a command prompt, try pressing enter.
+root@ek8s:/#
+```
+
+When creating a debugging session on a node, keep in mind that:
+
+* `kubectl debug` automatically generates the name of the new Pod based on
+ the name of the Node.
+* The container runs in the host IPC, Network, and PID namespaces.
+* The root filesystem of the Node will be mounted at `/host`.
+
+Don't forget to clean up the debugging Pod when you're finished with it:
+
+```shell
+kubectl delete pod node-debugger-mynode-pdx84
+```
diff --git a/content/en/docs/tasks/debug-application-cluster/debug-service.md b/content/en/docs/tasks/debug/debug-application/debug-service.md
similarity index 98%
rename from content/en/docs/tasks/debug-application-cluster/debug-service.md
rename to content/en/docs/tasks/debug/debug-application/debug-service.md
index 4ff1a610b1..42d615dca9 100644
--- a/content/en/docs/tasks/debug-application-cluster/debug-service.md
+++ b/content/en/docs/tasks/debug/debug-application/debug-service.md
@@ -4,6 +4,7 @@ reviewers:
- bowei
content_type: concept
title: Debug Services
+weight: 20
---
@@ -441,7 +442,7 @@ they are running fine and not crashing.
The "RESTARTS" column says that these pods are not crashing frequently or being
restarted. Frequent restarts could lead to intermittent connectivity issues.
-If the restart count is high, read more about how to [debug pods](/docs/tasks/debug-application-cluster/debug-pod-replication-controller/#debugging-pods).
+If the restart count is high, read more about how to [debug pods](/docs/tasks/debug/debug-application/debug-pods).
Inside the Kubernetes system is a control loop which evaluates the selector of
every Service and saves the results into a corresponding Endpoints object.
@@ -727,13 +728,13 @@ Service is not working. Please let us know what is going on, so we can help
investigate!
Contact us on
-[Slack](/docs/tasks/debug-application-cluster/troubleshooting/#slack) or
+[Slack](/docs/tasks/debug/overview/#slack) or
[Forum](https://discuss.kubernetes.io) or
[GitHub](https://github.com/kubernetes/kubernetes).
## {{% heading "whatsnext" %}}
-Visit [troubleshooting document](/docs/tasks/debug-application-cluster/troubleshooting/)
+Visit the [troubleshooting overview document](/docs/tasks/debug/overview/)
for more information.
diff --git a/content/en/docs/tasks/debug-application-cluster/debug-stateful-set.md b/content/en/docs/tasks/debug/debug-application/debug-statefulset.md
similarity index 88%
rename from content/en/docs/tasks/debug-application-cluster/debug-stateful-set.md
rename to content/en/docs/tasks/debug/debug-application/debug-statefulset.md
index bd7ce6e951..73c0d0c78a 100644
--- a/content/en/docs/tasks/debug-application-cluster/debug-stateful-set.md
+++ b/content/en/docs/tasks/debug/debug-application/debug-statefulset.md
@@ -9,6 +9,7 @@ reviewers:
- smarterclayton
title: Debug a StatefulSet
content_type: task
+weight: 30
---
@@ -34,9 +35,9 @@ If you find that any Pods listed are in `Unknown` or `Terminating` state for an
refer to the [Deleting StatefulSet Pods](/docs/tasks/run-application/delete-stateful-set/) task for
instructions on how to deal with them.
You can debug individual Pods in a StatefulSet using the
-[Debugging Pods](/docs/tasks/debug-application-cluster/debug-pod-replication-controller/) guide.
+[Debugging Pods](/docs/tasks/debug/debug-application/debug-pods/) guide.
## {{% heading "whatsnext" %}}
-Learn more about [debugging an init-container](/docs/tasks/debug-application-cluster/debug-init-containers/).
+Learn more about [debugging an init-container](/docs/tasks/debug/debug-application/debug-init-containers/).
diff --git a/content/en/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md b/content/en/docs/tasks/debug/debug-application/determine-reason-pod-failure.md
similarity index 100%
rename from content/en/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md
rename to content/en/docs/tasks/debug/debug-application/determine-reason-pod-failure.md
diff --git a/content/en/docs/tasks/debug-application-cluster/get-shell-running-container.md b/content/en/docs/tasks/debug/debug-application/get-shell-running-container.md
similarity index 100%
rename from content/en/docs/tasks/debug-application-cluster/get-shell-running-container.md
rename to content/en/docs/tasks/debug/debug-application/get-shell-running-container.md
diff --git a/content/en/docs/tasks/debug/debug-cluster/_index.md b/content/en/docs/tasks/debug/debug-cluster/_index.md
new file mode 100644
index 0000000000..9c0ad56a4c
--- /dev/null
+++ b/content/en/docs/tasks/debug/debug-cluster/_index.md
@@ -0,0 +1,316 @@
+---
+reviewers:
+- davidopp
+title: "Troubleshooting Clusters"
+description: Debugging common cluster issues.
+weight: 20
+no_list: true
+---
+
+
+
+This doc is about cluster troubleshooting; we assume you have already ruled out your application as the root cause of the
+problem you are experiencing. See
+the [application troubleshooting guide](/docs/tasks/debug/debug-application/) for tips on application debugging.
+You may also visit the [troubleshooting overview document](/docs/tasks/debug/) for more information.
+
+
+
+## Listing your cluster
+
+The first thing to debug in your cluster is if your nodes are all registered correctly.
+
+Run the following command:
+
+```shell
+kubectl get nodes
+```
+
+And verify that all of the nodes you expect to see are present and that they are all in the `Ready` state.
+
+To get detailed information about the overall health of your cluster, you can run:
+
+```shell
+kubectl cluster-info dump
+```
+
+### Example: debugging a down/unreachable node
+
+Sometimes when debugging it can be useful to look at the status of a node -- for example, because you've noticed strange behavior of a Pod that's running on the node, or to find out why a Pod won't schedule onto the node. As with Pods, you can use `kubectl describe node` and `kubectl get node -o yaml` to retrieve detailed information about nodes. For example, here's what you'll see if a node is down (disconnected from the network, or kubelet dies and won't restart, etc.). Notice the events that show the node is NotReady, and also notice that the pods are no longer running (they are evicted after five minutes of NotReady status).
+
+```shell
+kubectl get nodes
+```
+
+```none
+NAME STATUS ROLES AGE VERSION
+kube-worker-1 NotReady 1h v1.23.3
+kubernetes-node-bols Ready 1h v1.23.3
+kubernetes-node-st6x Ready 1h v1.23.3
+kubernetes-node-unaj Ready 1h v1.23.3
+```
+
+```shell
+kubectl describe node kube-worker-1
+```
+
+```none
+Name: kube-worker-1
+Roles:
+Labels: beta.kubernetes.io/arch=amd64
+ beta.kubernetes.io/os=linux
+ kubernetes.io/arch=amd64
+ kubernetes.io/hostname=kube-worker-1
+ kubernetes.io/os=linux
+Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock
+ node.alpha.kubernetes.io/ttl: 0
+ volumes.kubernetes.io/controller-managed-attach-detach: true
+CreationTimestamp: Thu, 17 Feb 2022 16:46:30 -0500
+Taints: node.kubernetes.io/unreachable:NoExecute
+ node.kubernetes.io/unreachable:NoSchedule
+Unschedulable: false
+Lease:
+ HolderIdentity: kube-worker-1
+ AcquireTime:
+ RenewTime: Thu, 17 Feb 2022 17:13:09 -0500
+Conditions:
+ Type Status LastHeartbeatTime LastTransitionTime Reason Message
+ ---- ------ ----------------- ------------------ ------ -------
+ NetworkUnavailable False Thu, 17 Feb 2022 17:09:13 -0500 Thu, 17 Feb 2022 17:09:13 -0500 WeaveIsUp Weave pod has set this
+ MemoryPressure Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
+ DiskPressure Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
+ PIDPressure Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
+ Ready Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
+Addresses:
+ InternalIP: 192.168.0.113
+ Hostname: kube-worker-1
+Capacity:
+ cpu: 2
+ ephemeral-storage: 15372232Ki
+ hugepages-2Mi: 0
+ memory: 2025188Ki
+ pods: 110
+Allocatable:
+ cpu: 2
+ ephemeral-storage: 14167048988
+ hugepages-2Mi: 0
+ memory: 1922788Ki
+ pods: 110
+System Info:
+ Machine ID: 9384e2927f544209b5d7b67474bbf92b
+ System UUID: aa829ca9-73d7-064d-9019-df07404ad448
+ Boot ID: 5a295a03-aaca-4340-af20-1327fa5dab5c
+ Kernel Version: 5.13.0-28-generic
+ OS Image: Ubuntu 21.10
+ Operating System: linux
+ Architecture: amd64
+ Container Runtime Version: containerd://1.5.9
+ Kubelet Version: v1.23.3
+ Kube-Proxy Version: v1.23.3
+Non-terminated Pods: (4 in total)
+ Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits Age
+ --------- ---- ------------ ---------- --------------- ------------- ---
+ default nginx-deployment-67d4bdd6f5-cx2nz 500m (25%) 500m (25%) 128Mi (6%) 128Mi (6%) 23m
+ default nginx-deployment-67d4bdd6f5-w6kd7 500m (25%) 500m (25%) 128Mi (6%) 128Mi (6%) 23m
+ kube-system kube-proxy-dnxbz 0 (0%) 0 (0%) 0 (0%) 0 (0%) 28m
+ kube-system weave-net-gjxxp 100m (5%) 0 (0%) 200Mi (10%) 0 (0%) 28m
+Allocated resources:
+ (Total limits may be over 100 percent, i.e., overcommitted.)
+ Resource Requests Limits
+ -------- -------- ------
+ cpu 1100m (55%) 1 (50%)
+ memory 456Mi (24%) 256Mi (13%)
+ ephemeral-storage 0 (0%) 0 (0%)
+ hugepages-2Mi 0 (0%) 0 (0%)
+Events:
+...
+```
+
+```shell
+kubectl get node kube-worker-1 -o yaml
+```
+
+```yaml
+apiVersion: v1
+kind: Node
+metadata:
+ annotations:
+ kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock
+ node.alpha.kubernetes.io/ttl: "0"
+ volumes.kubernetes.io/controller-managed-attach-detach: "true"
+ creationTimestamp: "2022-02-17T21:46:30Z"
+ labels:
+ beta.kubernetes.io/arch: amd64
+ beta.kubernetes.io/os: linux
+ kubernetes.io/arch: amd64
+ kubernetes.io/hostname: kube-worker-1
+ kubernetes.io/os: linux
+ name: kube-worker-1
+ resourceVersion: "4026"
+ uid: 98efe7cb-2978-4a0b-842a-1a7bf12c05f8
+spec: {}
+status:
+ addresses:
+ - address: 192.168.0.113
+ type: InternalIP
+ - address: kube-worker-1
+ type: Hostname
+ allocatable:
+ cpu: "2"
+ ephemeral-storage: "14167048988"
+ hugepages-2Mi: "0"
+ memory: 1922788Ki
+ pods: "110"
+ capacity:
+ cpu: "2"
+ ephemeral-storage: 15372232Ki
+ hugepages-2Mi: "0"
+ memory: 2025188Ki
+ pods: "110"
+ conditions:
+ - lastHeartbeatTime: "2022-02-17T22:20:32Z"
+ lastTransitionTime: "2022-02-17T22:20:32Z"
+ message: Weave pod has set this
+ reason: WeaveIsUp
+ status: "False"
+ type: NetworkUnavailable
+ - lastHeartbeatTime: "2022-02-17T22:20:15Z"
+ lastTransitionTime: "2022-02-17T22:13:25Z"
+ message: kubelet has sufficient memory available
+ reason: KubeletHasSufficientMemory
+ status: "False"
+ type: MemoryPressure
+ - lastHeartbeatTime: "2022-02-17T22:20:15Z"
+ lastTransitionTime: "2022-02-17T22:13:25Z"
+ message: kubelet has no disk pressure
+ reason: KubeletHasNoDiskPressure
+ status: "False"
+ type: DiskPressure
+ - lastHeartbeatTime: "2022-02-17T22:20:15Z"
+ lastTransitionTime: "2022-02-17T22:13:25Z"
+ message: kubelet has sufficient PID available
+ reason: KubeletHasSufficientPID
+ status: "False"
+ type: PIDPressure
+ - lastHeartbeatTime: "2022-02-17T22:20:15Z"
+ lastTransitionTime: "2022-02-17T22:15:15Z"
+ message: kubelet is posting ready status. AppArmor enabled
+ reason: KubeletReady
+ status: "True"
+ type: Ready
+ daemonEndpoints:
+ kubeletEndpoint:
+ Port: 10250
+ nodeInfo:
+ architecture: amd64
+ bootID: 22333234-7a6b-44d4-9ce1-67e31dc7e369
+ containerRuntimeVersion: containerd://1.5.9
+ kernelVersion: 5.13.0-28-generic
+ kubeProxyVersion: v1.23.3
+ kubeletVersion: v1.23.3
+ machineID: 9384e2927f544209b5d7b67474bbf92b
+ operatingSystem: linux
+ osImage: Ubuntu 21.10
+ systemUUID: aa829ca9-73d7-064d-9019-df07404ad448
+```
+
+
+## Looking at logs
+
+For now, digging deeper into the cluster requires logging into the relevant machines. Here are the locations
+of the relevant log files. On systemd-based systems, you may need to use `journalctl` instead of examining log files.
+
+### Control Plane nodes
+
+ * `/var/log/kube-apiserver.log` - API Server, responsible for serving the API
+ * `/var/log/kube-scheduler.log` - Scheduler, responsible for making scheduling decisions
+ * `/var/log/kube-controller-manager.log` - a component that runs most Kubernetes built-in {{}}, with the notable exception of scheduling (the kube-scheduler handles scheduling).
+
+### Worker Nodes
+
+ * `/var/log/kubelet.log` - logs from the kubelet, responsible for running containers on the node
+ * `/var/log/kube-proxy.log` - logs from `kube-proxy`, which is responsible for directing traffic to Service endpoints
+
+## Cluster failure modes
+
+This is an incomplete list of things that could go wrong, and how to adjust your cluster setup to mitigate the problems.
+
+### Contributing causes
+
+ - VM(s) shutdown
+ - Network partition within cluster, or between cluster and users
+ - Crashes in Kubernetes software
+ - Data loss or unavailability of persistent storage (e.g. GCE PD or AWS EBS volume)
+ - Operator error, for example misconfigured Kubernetes software or application software
+
+### Specific scenarios
+
+ - API server VM shutdown or apiserver crashing
+ - Results
+ - unable to stop, update, or start new pods, services, replication controller
+ - existing pods and services should continue to work normally, unless they depend on the Kubernetes API
+ - API server backing storage lost
+ - Results
+ - the kube-apiserver component fails to start successfully and become healthy
+ - kubelets will not be able to reach it but will continue to run the same pods and provide the same service proxying
+ - manual recovery or recreation of apiserver state necessary before apiserver is restarted
+ - Supporting services (node controller, replication controller manager, scheduler, etc) VM shutdown or crashes
+ - currently those are colocated with the apiserver, and their unavailability has similar consequences as apiserver
+ - in future, these will be replicated as well and may not be co-located
+ - they do not have their own persistent state
+ - Individual node (VM or physical machine) shuts down
+ - Results
+ - pods on that Node stop running
+ - Network partition
+ - Results
+ - partition A thinks the nodes in partition B are down; partition B thinks the apiserver is down. (Assuming the master VM ends up in partition A.)
+ - Kubelet software fault
+ - Results
+ - crashing kubelet cannot start new pods on the node
+ - kubelet might delete the pods or not
+ - node marked unhealthy
+ - replication controllers start new pods elsewhere
+ - Cluster operator error
+ - Results
+ - loss of pods, services, etc
+ - lost of apiserver backing store
+ - users unable to read API
+ - etc.
+
+### Mitigations
+
+- Action: Use IaaS provider's automatic VM restarting feature for IaaS VMs
+ - Mitigates: Apiserver VM shutdown or apiserver crashing
+ - Mitigates: Supporting services VM shutdown or crashes
+
+- Action: Use IaaS providers reliable storage (e.g. GCE PD or AWS EBS volume) for VMs with apiserver+etcd
+ - Mitigates: Apiserver backing storage lost
+
+- Action: Use [high-availability](/docs/setup/production-environment/tools/kubeadm/high-availability/) configuration
+ - Mitigates: Control plane node shutdown or control plane components (scheduler, API server, controller-manager) crashing
+ - Will tolerate one or more simultaneous node or component failures
+ - Mitigates: API server backing storage (i.e., etcd's data directory) lost
+ - Assumes HA (highly-available) etcd configuration
+
+- Action: Snapshot apiserver PDs/EBS-volumes periodically
+ - Mitigates: Apiserver backing storage lost
+ - Mitigates: Some cases of operator error
+ - Mitigates: Some cases of Kubernetes software fault
+
+- Action: use replication controller and services in front of pods
+ - Mitigates: Node shutdown
+ - Mitigates: Kubelet software fault
+
+- Action: applications (containers) designed to tolerate unexpected restarts
+ - Mitigates: Node shutdown
+ - Mitigates: Kubelet software fault
+
+
+## {{% heading "whatsnext" %}}
+
+* Learn about the metrics available in the [Resource Metrics Pipeline](resource-metrics-pipeline)
+* Discover additional tools for [monitoring resource usage](resource-usage-monitoring)
+* Use Node Problem Detector to [monitor node health](monitor-node-health)
+* Use `crictl` to [debug Kubernetes nodes](crictl)
+* Get more information about [Kubernetes auditing](audit)
+* Use `telepresence` to [develop and debug services locally](local-debugging)
diff --git a/content/en/docs/tasks/debug-application-cluster/audit.md b/content/en/docs/tasks/debug/debug-cluster/audit.md
similarity index 100%
rename from content/en/docs/tasks/debug-application-cluster/audit.md
rename to content/en/docs/tasks/debug/debug-cluster/audit.md
diff --git a/content/en/docs/tasks/debug-application-cluster/crictl.md b/content/en/docs/tasks/debug/debug-cluster/crictl.md
similarity index 99%
rename from content/en/docs/tasks/debug-application-cluster/crictl.md
rename to content/en/docs/tasks/debug/debug-cluster/crictl.md
index 8e649d3b27..0f911b182b 100644
--- a/content/en/docs/tasks/debug-application-cluster/crictl.md
+++ b/content/en/docs/tasks/debug/debug-cluster/crictl.md
@@ -5,6 +5,7 @@ reviewers:
- mrunalp
title: Debugging Kubernetes nodes with crictl
content_type: task
+weight: 30
---
diff --git a/content/en/docs/tasks/debug-application-cluster/local-debugging.md b/content/en/docs/tasks/debug/debug-cluster/local-debugging.md
similarity index 93%
rename from content/en/docs/tasks/debug-application-cluster/local-debugging.md
rename to content/en/docs/tasks/debug/debug-cluster/local-debugging.md
index 68088ac85a..1d97a4134d 100644
--- a/content/en/docs/tasks/debug-application-cluster/local-debugging.md
+++ b/content/en/docs/tasks/debug/debug-cluster/local-debugging.md
@@ -1,5 +1,5 @@
---
-title: Developing and debugging services locally
+title: Developing and debugging services locally using telepresence
content_type: task
---
@@ -7,7 +7,7 @@ content_type: task
{{% thirdparty-content %}}
-Kubernetes applications usually consist of multiple, separate services, each running in its own container. Developing and debugging these services on a remote Kubernetes cluster can be cumbersome, requiring you to [get a shell on a running container](/docs/tasks/debug-application-cluster/get-shell-running-container/) in order to run debugging tools.
+Kubernetes applications usually consist of multiple, separate services, each running in its own container. Developing and debugging these services on a remote Kubernetes cluster can be cumbersome, requiring you to [get a shell on a running container](/docs/tasks/debug/debug-application/get-shell-running-container/) in order to run debugging tools.
`telepresence` is a tool to ease the process of developing and debugging services locally while proxying the service to a remote Kubernetes cluster. Using `telepresence` allows you to use custom tools, such as a debugger and IDE, for a local service and provides the service full access to ConfigMap, secrets, and the services running on the remote cluster.
@@ -24,7 +24,7 @@ This document describes using `telepresence` to develop and debug services runni
## Connecting your local machine to a remote Kubernetes cluster
-After installing `telepresence`, run `telepresence connect` to launch it's Daemon and connect your local workstation to the cluster.
+After installing `telepresence`, run `telepresence connect` to launch its Daemon and connect your local workstation to the cluster.
```
$ telepresence connect
@@ -58,4 +58,4 @@ Telepresence installs a traffic-agent sidecar next to your existing application'
If you're interested in a hands-on tutorial, check out [this tutorial](https://cloud.google.com/community/tutorials/developing-services-with-k8s) that walks through locally developing the Guestbook application on Google Kubernetes Engine.
-For further reading, visit the [Telepresence website](https://www.telepresence.io).
\ No newline at end of file
+For further reading, visit the [Telepresence website](https://www.telepresence.io).
diff --git a/content/en/docs/tasks/debug-application-cluster/monitor-node-health.md b/content/en/docs/tasks/debug/debug-cluster/monitor-node-health.md
similarity index 99%
rename from content/en/docs/tasks/debug-application-cluster/monitor-node-health.md
rename to content/en/docs/tasks/debug/debug-cluster/monitor-node-health.md
index 1214a26975..34b4e0ed7d 100644
--- a/content/en/docs/tasks/debug-application-cluster/monitor-node-health.md
+++ b/content/en/docs/tasks/debug/debug-cluster/monitor-node-health.md
@@ -4,6 +4,7 @@ content_type: task
reviewers:
- Random-Liu
- dchen1107
+weight: 20
---
diff --git a/content/en/docs/tasks/debug-application-cluster/resource-metrics-pipeline.md b/content/en/docs/tasks/debug/debug-cluster/resource-metrics-pipeline.md
similarity index 98%
rename from content/en/docs/tasks/debug-application-cluster/resource-metrics-pipeline.md
rename to content/en/docs/tasks/debug/debug-cluster/resource-metrics-pipeline.md
index 77d72e3649..62bcc6dfba 100644
--- a/content/en/docs/tasks/debug-application-cluster/resource-metrics-pipeline.md
+++ b/content/en/docs/tasks/debug/debug-cluster/resource-metrics-pipeline.md
@@ -4,6 +4,7 @@ reviewers:
- piosz
title: Resource metrics pipeline
content_type: concept
+weight: 15
---
@@ -27,7 +28,7 @@ The Metrics API, and the metrics pipeline that it enables, only offers the minim
CPU and memory metrics to enable automatic scaling using HPA and / or VPA.
If you would like to provide a more complete set of metrics, you can complement
the simpler Metrics API by deploying a second
-[metrics pipeline](/docs/tasks/debug-application-cluster/resource-usage-monitoring/#full-metrics-pipeline)
+[metrics pipeline](/docs/tasks/debug/debug-cluster/resource-usage-monitoring/#full-metrics-pipeline)
that uses the _Custom Metrics API_.
{{< /note >}}
diff --git a/content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md b/content/en/docs/tasks/debug/debug-cluster/resource-usage-monitoring.md
similarity index 82%
rename from content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md
rename to content/en/docs/tasks/debug/debug-cluster/resource-usage-monitoring.md
index 957ee62192..b02d6ab31a 100644
--- a/content/en/docs/tasks/debug-application-cluster/resource-usage-monitoring.md
+++ b/content/en/docs/tasks/debug/debug-cluster/resource-usage-monitoring.md
@@ -3,6 +3,7 @@ reviewers:
- mikedanese
content_type: concept
title: Tools for Monitoring Resources
+weight: 15
---
@@ -58,4 +59,14 @@ then exposes them to Kubernetes via an adapter by implementing either the
[Prometheus](https://prometheus.io), a CNCF project, can natively monitor Kubernetes, nodes, and Prometheus itself.
Full metrics pipeline projects that are not part of the CNCF are outside the scope of Kubernetes documentation.
+## {{% heading "whatsnext" %}}
+
+Learn about additional debugging tools, including:
+
+* [Logging](/docs/concepts/cluster-administration/logging/)
+* [Monitoring](/docs/tasks/debug/debug-cluster/resource-usage-monitoring/)
+* [Getting into containers via `exec`](/docs/tasks/debug/debug-application/get-shell-running-container/)
+* [Connecting to containers via proxies](/docs/tasks/extend-kubernetes/http-proxy-access-api/)
+* [Connecting to containers via port forwarding](/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)
+* [Inspect Kubernetes node with crictl](/docs/tasks/debug/debug-cluster/crictl/)
diff --git a/content/en/docs/tasks/debug/debug-cluster/windows.md b/content/en/docs/tasks/debug/debug-cluster/windows.md
new file mode 100644
index 0000000000..ccd6cf4434
--- /dev/null
+++ b/content/en/docs/tasks/debug/debug-cluster/windows.md
@@ -0,0 +1,170 @@
+---
+reviewers:
+- aravindhp
+- jayunit100
+- jsturtevant
+- marosset
+title: Windows debugging tips
+content_type: concept
+---
+
+
+
+
+
+## Node-level troubleshooting {#troubleshooting-node}
+
+1. My Pods are stuck at "Container Creating" or restarting over and over
+
+ Ensure that your pause image is compatible with your Windows OS version.
+ See [Pause container](/docs/setup/production-environment/windows/intro-windows-in-kubernetes#pause-container)
+ to see the latest / recommended pause image and/or get more information.
+
+ {{< note >}}
+ If using containerd as your container runtime the pause image is specified in the
+ `plugins.plugins.cri.sandbox_image` field of the of config.toml configration file.
+ {{< /note >}}
+
+1. My pods show status as `ErrImgPull` or `ImagePullBackOff`
+
+ Ensure that your Pod is getting scheduled to a [compatable](https://docs.microsoft.com/virtualization/windowscontainers/deploy-containers/version-compatibility) Windows Node.
+
+ More information on how to specify a compatable node for your Pod can be found in [this guide](/docs/setup/production-environment/windows/user-guide-windows-containers/#ensuring-os-specific-workloads-land-on-the-appropriate-container-host).
+
+## Network troubleshooting {#troubleshooting-network}
+
+1. My Windows Pods do not have network connectivity
+
+ If you are using virtual machines, ensure that MAC spoofing is **enabled** on all
+ the VM network adapter(s).
+
+1. My Windows Pods cannot ping external resources
+
+ Windows Pods do not have outbound rules programmed for the ICMP protocol. However,
+ TCP/UDP is supported. When trying to demonstrate connectivity to resources
+ outside of the cluster, substitute `ping ` with corresponding
+ `curl ` commands.
+
+ If you are still facing problems, most likely your network configuration in
+ [cni.conf](https://github.com/Microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/cni/config/cni.conf)
+ deserves some extra attention. You can always edit this static file. The
+ configuration update will apply to any new Kubernetes resources.
+
+ One of the Kubernetes networking requirements
+ (see [Kubernetes model](/docs/concepts/cluster-administration/networking/)) is
+ for cluster communication to occur without
+ NAT internally. To honor this requirement, there is an
+ [ExceptionList](https://github.com/Microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/cni/config/cni.conf#L20)
+ for all the communication where you do not want outbound NAT to occur. However,
+ this also means that you need to exclude the external IP you are trying to query
+ from the `ExceptionList`. Only then will the traffic originating from your Windows
+ pods be SNAT'ed correctly to receive a response from the outside world. In this
+ regard, your `ExceptionList` in `cni.conf` should look as follows:
+
+ ```conf
+ "ExceptionList": [
+ "10.244.0.0/16", # Cluster subnet
+ "10.96.0.0/12", # Service subnet
+ "10.127.130.0/24" # Management (host) subnet
+ ]
+ ```
+
+1. My Windows node cannot access `NodePort` type Services
+
+ Local NodePort access from the node itself fails. This is a known
+ limitation. NodePort access works from other nodes or external clients.
+
+1. vNICs and HNS endpoints of containers are being deleted
+
+ This issue can be caused when the `hostname-override` parameter is not passed to
+ [kube-proxy](/docs/reference/command-line-tools-reference/kube-proxy/). To resolve
+ it, users need to pass the hostname to kube-proxy as follows:
+
+ ```powershell
+ C:\k\kube-proxy.exe --hostname-override=$(hostname)
+ ```
+
+1. My Windows node cannot access my services using the service IP
+
+ This is a known limitation of the networking stack on Windows. However, Windows Pods can access the Service IP.
+
+1. No network adapter is found when starting the kubelet
+
+ The Windows networking stack needs a virtual adapter for Kubernetes networking to work.
+ If the following commands return no results (in an admin shell),
+ virtual network creation — a necessary prerequisite for the kubelet to work — has failed:
+
+ ```powershell
+ Get-HnsNetwork | ? Name -ieq "cbr0"
+ Get-NetAdapter | ? Name -Like "vEthernet (Ethernet*"
+ ```
+
+ Often it is worthwhile to modify the [InterfaceName](https://github.com/microsoft/SDN/blob/master/Kubernetes/flannel/start.ps1#L7) parameter of the `start.ps1` script,
+ in cases where the host's network adapter isn't "Ethernet".
+ Otherwise, consult the output of the `start-kubelet.ps1` script to see if there are errors during virtual network creation.
+
+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 by including `wincat.exe` in the pause infrastructure container `mcr.microsoft.com/oss/kubernetes/pause:3.6`.
+ Be sure to use a supported version of Kubernetes.
+ If you would like to build your own pause infrastructure container be sure to include [wincat](https://github.com/kubernetes/kubernetes/tree/master/build/pause/windows/wincat).
+
+1. My Kubernetes installation is failing because my Windows Server node is behind a proxy
+
+ If you are behind a proxy, the following PowerShell environment variables must be defined:
+
+ ```PowerShell
+ [Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://proxy.example.com:80/", [EnvironmentVariableTarget]::Machine)
+ [Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://proxy.example.com:443/", [EnvironmentVariableTarget]::Machine)
+ ```
+
+### Flannel troubleshooting
+
+1. With Flannel, my nodes are having issues after rejoining a cluster
+
+ Whenever a previously deleted node is being re-joined to the cluster, flannelD
+ tries to assign a new pod subnet to the node. Users should remove the old pod
+ subnet configuration files in the following paths:
+
+ ```powershell
+ Remove-Item C:\k\SourceVip.json
+ Remove-Item C:\k\SourceVipRequest.json
+ ```
+
+1. Flanneld is stuck in "Waiting for the Network to be created"
+
+ There are numerous reports of this [issue](https://github.com/coreos/flannel/issues/1066);
+ most likely it is a timing issue for when the management IP of the flannel network is set.
+ A workaround is to relaunch `start.ps1` or relaunch it manually as follows:
+
+ ```powershell
+ [Environment]::SetEnvironmentVariable("NODE_NAME", "")
+ C:\flannel\flanneld.exe --kubeconfig-file=c:\k\config --iface= --ip-masq=1 --kube-subnet-mgr=1
+ ```
+
+1. My Windows Pods cannot launch because of missing `/run/flannel/subnet.env`
+
+ This indicates that Flannel didn't launch correctly. You can either try
+ to restart `flanneld.exe` or you can copy the files over manually from
+ `/run/flannel/subnet.env` on the Kubernetes master to `C:\run\flannel\subnet.env`
+ on the Windows worker node and modify the `FLANNEL_SUBNET` row to a different
+ number. For example, if node subnet 10.244.4.1/24 is desired:
+
+ ```env
+ FLANNEL_NETWORK=10.244.0.0/16
+ FLANNEL_SUBNET=10.244.4.1/24
+ FLANNEL_MTU=1500
+ FLANNEL_IPMASQ=true
+ ```
+
+### Further investigation
+
+If these steps don't resolve your problem, you can get help running Windows containers on Windows nodes in Kubernetes through:
+
+* StackOverflow [Windows Server Container](https://stackoverflow.com/questions/tagged/windows-server-container) topic
+* Kubernetes Official Forum [discuss.kubernetes.io](https://discuss.kubernetes.io/)
+* Kubernetes Slack [#SIG-Windows Channel](https://kubernetes.slack.com/messages/sig-windows)
\ No newline at end of file
diff --git a/content/en/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning.md b/content/en/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning.md
index fdcc276a45..6857f1a4d5 100644
--- a/content/en/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning.md
+++ b/content/en/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning.md
@@ -444,7 +444,7 @@ spec:
served: true
# One and only one version must be marked as the storage version.
storage: true
- # Each version can define it's own schema when there is no top-level
+ # Each version can define its own schema when there is no top-level
# schema is defined.
schema:
openAPIV3Schema:
@@ -512,7 +512,7 @@ spec:
served: true
# One and only one version must be marked as the storage version.
storage: true
- # Each version can define it's own schema when there is no top-level
+ # Each version can define its own schema when there is no top-level
# schema is defined.
schema:
openAPIV3Schema:
diff --git a/content/en/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions.md b/content/en/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions.md
index df66a99281..cfe5cb2ad4 100644
--- a/content/en/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions.md
+++ b/content/en/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions.md
@@ -716,6 +716,8 @@ CustomResourceDefinition schemas using the `x-kubernetes-validations` extension.
The Rule is scoped to the location of the `x-kubernetes-validations` extension in the schema.
And `self` variable in the CEL expression is bound to the scoped value.
+All validation rules are scoped to the current object: no cross-object or stateful validation rules are supported.
+
For example:
```yaml
@@ -994,7 +996,178 @@ Here is the declarations type mapping between OpenAPIv3 and CEL type:
xref: [CEL types](https://github.com/google/cel-spec/blob/v0.6.0/doc/langdef.md#values), [OpenAPI
types](https://swagger.io/specification/#data-types), [Kubernetes Structural Schemas](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#specifying-a-structural-schema).
+#### Validation functions {#available-validation-functions}
+Functions available include:
+ - CEL standard functions, defined in the [list of standard definitions](https://github.com/google/cel-spec/blob/v0.7.0/doc/langdef.md#list-of-standard-definitions)
+ - CEL standard [macros](https://github.com/google/cel-spec/blob/v0.7.0/doc/langdef.md#macros)
+ - CEL [extended string function library](https://pkg.go.dev/github.com/google/cel-go@v0.11.2/ext#Strings)
+ - Kubernetes [CEL extension library](https://pkg.go.dev/k8s.io/apiextensions-apiserver@v0.24.0/pkg/apiserver/schema/cel/library#pkg-functions)
+
+#### Transition rules
+
+A rule that contains an expression referencing the identifier `oldSelf` is implicitly considered a
+_transition rule_. Transition rules allow schema authors to prevent certain transitions between two
+otherwise valid states. For example:
+
+```yaml
+type: string
+enum: ["low", "medium", "high"]
+x-kubernetes-validations:
+- rule: "!(self == 'high' && oldSelf == 'low') && !(self == 'low' && oldSelf == 'high')"
+ message: cannot transition directly between 'low' and 'high'
+```
+
+Unlike other rules, transition rules apply only to operations meeting the following criteria:
+
+- The operation updates an existing object. Transition rules never apply to create operations.
+
+- Both an old and a new value exist. It remains possible to check if a value has been added or
+ removed by placing a transition rule on the parent node. Transition rules are never applied to
+ custom resource creation. When placed on an optional field, a transition rule will not apply to
+ update operations that set or unset the field.
+
+- The path to the schema node being validated by a transition rule must resolve to a node that is
+ comparable between the old object and the new object. For example, list items and their
+ descendants (`spec.foo[10].bar`) can't necessarily be correlated between an existing object and a
+ later update to the same object.
+
+Errors will be generated on CRD writes if a schema node contains a transition rule that can never be
+applied, e.g. "*path*: update rule *rule* cannot be set on schema because the schema or its parent
+schema is not mergeable".
+
+Transition rules are only allowed on _correlatable portions_ of a schema.
+A portion of the schema is correlatable if all `array` parent schemas are of type `x-kubernetes-list-type=map`; any `set`or `atomic`array parent schemas make it impossible to unambiguously correlate a `self` with `oldSelf`.
+
+Here are some examples for transition rules:
+
+{{< table caption="Transition rules examples" >}}
+| Use Case | Rule
+| -------- | --------
+| Immutability | `self.foo == oldSelf.foo`
+| Prevent modification/removal once assigned | `oldSelf != 'bar' \|\| self == 'bar'` or `!has(oldSelf.field) \|\| has(self.field)`
+| Append-only set | `self.all(element, element in oldSelf)`
+| If previous value was X, new value can only be A or B, not Y or Z | `oldSelf != 'X' \|\| self in ['A', 'B']`
+| Monotonic (non-decreasing) counters | `self >= oldSelf`
+{{< /table >}}
+
+#### Resource use by validation functions
+
+When you create or update a CustomResourceDefinition that uses validation rules,
+the API server checks the likely impact of running those validation rules. If a rule is
+estimated to be prohibitively expensive to execute, the API server rejects the create
+or update operation, and returns an error message.
+A similar system is used at runtime that observes the actions the interpreter takes. If the interpreter executes
+too many instructions, execution of the rule will be halted, and an error will result.
+Each CustomResourceDefinition is also allowed a certain amount of resources to finish executing all of
+its validation rules. If the sum total of its rules are estimated at creation time to go over that limit,
+then a validation error will also occur.
+
+You are unlikely to encounter issues with the resource budget for validation if you only
+specify rules that always take the same amount of time regardless of how large their input is.
+For example, a rule that asserts that `self.foo == 1` does not by itself have any
+risk of rejection on validation resource budget groups.
+But if `foo` is a string and you define a validation rule `self.foo.contains("someString")`, that rule takes
+longer to execute depending on how long `foo` is.
+Another example would be if `foo` were an array, and you specified a validation rule `self.foo.all(x, x > 5)`. The cost system always assumes the worst-case scenario if
+a limit on the length of `foo` is not given, and this will happen for anything that can be iterated
+over (lists, maps, etc.).
+
+Because of this, it is considered best practice to put a limit via `maxItems`, `maxProperties`, and
+`maxLength` for anything that will be processed in a validation rule in order to prevent validation errors during cost estimation. For example, given this schema with one rule:
+
+```yaml
+openAPIV3Schema:
+ type: object
+ properties:
+ foo:
+ type: array
+ items:
+ type: string
+ x-kubernetes-validations:
+ - rule: "self.all(x, x.contains('a string'))"
+```
+
+then the API server rejects this rule on validation budget grounds with error:
+```
+ spec.validation.openAPIV3Schema.properties[spec].properties[foo].x-kubernetes-validations[0].rule: Forbidden:
+ CEL rule exceeded budget by more than 100x (try simplifying the rule, or adding maxItems, maxProperties, and
+ maxLength where arrays, maps, and strings are used)
+```
+
+The rejection happens because `self.all` implies calling `contains()` on every string in `foo`,
+which in turn will check the given string to see if it contains `'a string'`. Without limits, this is a very
+expensive rule.
+
+If you do not specify any validation limit, the estimated cost of this rule will exceed the per-rule cost limit. But if you
+add limits in the appropriate places, the rule will be allowed:
+
+```yaml
+openAPIV3Schema:
+ type: object
+ properties:
+ foo:
+ type: array
+ maxItems: 25
+ items:
+ type: string
+ maxLength: 10
+ x-kubernetes-validations:
+ - rule: "self.all(x, x.contains('a string'))"
+```
+
+The cost estimation system takes into account how many times the rule will be executed in addition to the
+estimated cost of the rule itself. For instance, the following rule will have the same estimated cost as the
+previous example (despite the rule now being defined on the individual array items):
+
+```yaml
+openAPIV3Schema:
+ type: object
+ properties:
+ foo:
+ type: array
+ maxItems: 25
+ items:
+ type: string
+ x-kubernetes-validations:
+ - rule: "self.contains('a string'))"
+ maxLength: 10
+```
+
+If a list inside of a list has a validation rule that uses `self.all`, that is significantly more expensive
+than a non-nested list with the same rule. A rule that would have been allowed on a non-nested list might need lower limits set on both nested lists in order to be allowed. For example, even without having limits set,
+the following rule is allowed:
+
+```yaml
+openAPIV3Schema:
+ type: object
+ properties:
+ foo:
+ type: array
+ items:
+ type: integer
+ x-kubernetes-validations:
+ - rule: "self.all(x, x == 5)"
+```
+
+But the same rule on the following schema (with a nested array added) produces a validation error:
+
+```yaml
+openAPIV3Schema:
+ type: object
+ properties:
+ foo:
+ type: array
+ items:
+ type: array
+ items:
+ type: integer
+ x-kubernetes-validations:
+ - rule: "self.all(x, x == 5)"
+```
+
+This is because each item of `foo` is itself an array, and each subarray in turn calls `self.all`. Avoid nested
+lists and maps if possible where validation rules are used.
### Defaulting
diff --git a/content/en/docs/tasks/extend-kubernetes/socks5-proxy-access-api.md b/content/en/docs/tasks/extend-kubernetes/socks5-proxy-access-api.md
new file mode 100644
index 0000000000..698bc9c6b4
--- /dev/null
+++ b/content/en/docs/tasks/extend-kubernetes/socks5-proxy-access-api.md
@@ -0,0 +1,145 @@
+---
+title: Use a SOCKS5 Proxy to Access the Kubernetes API
+content_type: task
+weight: 42
+min-kubernetes-server-version: v1.24
+---
+
+
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
+
+This page shows how to use a SOCKS5 proxy to access the API of a remote Kubernetes cluster.
+This is useful when the cluster you want to access does not expose its API directly on the public internet.
+
+## {{% heading "prerequisites" %}}
+
+{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+
+You need SSH client software (the `ssh` tool), and an SSH service running on the remote server.
+You must be able to log in to the SSH service on the remote server.
+
+
+
+## Task context
+
+{{< note >}}
+This example tunnels traffic using SSH, with the SSH client and server acting as a SOCKS proxy.
+You can instead use any other kind of [SOCKS5](https://en.wikipedia.org/wiki/SOCKS#SOCKS5) proxies.
+{{ note >}}
+
+Figure 1 represents what you're going to achieve in this task.
+
+* You have a client computer, referred to as local in the steps ahead, from where you're going to create requests to talk to the Kubernetes API.
+* The Kubernetes server/API is hosted on a remote server.
+* You will use SSH client and server software to create a secure SOCKS5 tunnel between the local and
+ the remote server. The HTTPS traffic between the client and the Kubernetes API will flow over the SOCKS5
+ tunnel, which is itself tunnelled over SSH.
+
+{{< mermaid >}}
+graph LR;
+
+ subgraph local[Local client machine]
+ client([client])-- local traffic .-> local_ssh[Local SSH SOCKS5 proxy];
+ end
+ local_ssh[SSH SOCKS5 proxy]-- SSH Tunnel -->sshd
+
+ subgraph remote[Remote server]
+ sshd[SSH server]-- local traffic -->service1;
+ end
+ client([client])-. proxied HTTPs traffic going through the proxy .->service1[Kubernetes API];
+
+ classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000;
+ classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff;
+ classDef cluster fill:#fff,stroke:#bbb,stroke-width:2px,color:#326ce5;
+ class ingress,service1,service2,pod1,pod2,pod3,pod4 k8s;
+ class client plain;
+ class cluster cluster;
+{{ mermaid >}}
+Figure 1. SOCKS5 tutorial components
+
+## Using ssh to create a SOCKS5 proxy
+
+This command starts a SOCKS5 proxy between your client machine and the remote server.
+The SOCKS5 proxy lets you connect to your cluster's API server.
+
+```shell
+# The SSH tunnel continues running in the foreground after you run this
+ssh -D 1080 -q -N username@kubernetes-remote-server.example
+```
+
+* `-D 1080`: opens a SOCKS proxy on local port :1080.
+* `-q`: quiet mode. Causes most warning and diagnostic messages to be suppressed.
+* `-N`: Do not execute a remote command. Useful for just forwarding ports.
+* `username@kubernetes-remote-server.example`: the remote SSH server where the Kubernetes cluster is running.
+
+## Client configuration
+
+To explore the Kubernetes API you'll first need to instruct your clients to send their queries through
+the SOCKS5 proxy we created earlier.
+
+For command-line tools, set the `https_proxy` environment variable and pass it to commands that you run.
+
+```shell
+export https_proxy=socks5h://localhost:1080
+```
+
+When you set the `https_proxy` variable, tools such as `curl` route HTTPS traffic through the proxy
+you configured. For this to work, the tool must support SOCKS5 proxying.
+
+{{< note >}}
+In the URL https://localhost/api, `localhost` does not refer to your local client computer.
+Instead, it refers to the endpoint on the remote server knows as `localhost`.
+The `curl` tool sends the hostname from the HTTPS URL over SOCKS, and the remote server
+resolves that locally (to an address that belongs to its loopback interface).
+{{ note >}}
+
+```shell
+curl -k -v https://localhost/api
+```
+
+To use the official Kubernetes client `kubectl` with a proxy, set the `proxy-url` element
+for the relevant `cluster` entry within your `~/.kube/config` file. For example:
+
+```yaml
+apiVersion: v1
+clusters:
+- cluster:
+ certificate-authority-data: LRMEMMW2 # shortened for readability
+ server: https://localhost # the "Kubernetes API" in the diagram above
+ proxy-url: socks5://localhost:1080 # the "SSH SOCKS5 proxy" in the diagram above (DNS resolution over socks is built-in)
+ name: default
+contexts:
+- context:
+ cluster: default
+ user: default
+ name: default
+current-context: default
+kind: Config
+preferences: {}
+users:
+- name: default
+ user:
+ client-certificate-data: LS0tLS1CR== # shortened for readability
+ client-key-data: LS0tLS1CRUdJT= # shortened for readability
+```
+
+If the tunnel is operating and you use `kubectl` with a context that uses this cluster, you can interact with your cluster through that proxy. For example:
+
+```shell
+kubectl get pods
+```
+
+```console
+NAMESPACE NAME READY STATUS RESTARTS AGE
+kube-system coredns-85cb69466-klwq8 1/1 Running 0 5m46s
+```
+
+## Clean up
+
+Stop the ssh port-forwarding process by pressing `CTRL+C` on the terminal where it is running.
+
+Type `unset https_proxy` in a terminal to stop forwarding http traffic through the proxy.
+
+## Further reading
+
+* [OpenSSH remote login client](https://man.openbsd.org/ssh)
\ No newline at end of file
diff --git a/content/en/docs/tasks/inject-data-application/define-command-argument-container.md b/content/en/docs/tasks/inject-data-application/define-command-argument-container.md
index 0de57b864f..36368abd3f 100644
--- a/content/en/docs/tasks/inject-data-application/define-command-argument-container.md
+++ b/content/en/docs/tasks/inject-data-application/define-command-argument-container.md
@@ -114,5 +114,5 @@ args: ["-c", "while true; do echo hello; sleep 10;done"]
* Learn more about [configuring pods and containers](/docs/tasks/).
-* Learn more about [running commands in a container](/docs/tasks/debug-application-cluster/get-shell-running-container/).
+* Learn more about [running commands in a container](/docs/tasks/debug/debug-application/get-shell-running-container/).
* See [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core).
diff --git a/content/en/docs/tasks/inject-data-application/define-interdependent-environment-variables.md b/content/en/docs/tasks/inject-data-application/define-interdependent-environment-variables.md
index 74c5c245db..ee9da2f682 100644
--- a/content/en/docs/tasks/inject-data-application/define-interdependent-environment-variables.md
+++ b/content/en/docs/tasks/inject-data-application/define-interdependent-environment-variables.md
@@ -23,7 +23,7 @@ in a Kubernetes Pod.
When you create a Pod, you can set dependent environment variables for the containers that run in the Pod. To set dependent environment variables, you can use $(VAR_NAME) in the `value` of `env` in the configuration file.
In this exercise, you create a Pod that runs one container. The configuration
-file for the Pod defines an dependent environment variable with common usage defined. Here is the configuration manifest for the
+file for the Pod defines a dependent environment variable with common usage defined. Here is the configuration manifest for the
Pod:
{{< codenew file="pods/inject/dependent-envars.yaml" >}}
diff --git a/content/en/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md b/content/en/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md
index d50b3e91a5..fb6085980b 100644
--- a/content/en/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md
+++ b/content/en/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md
@@ -69,7 +69,7 @@ kubectl logs kubernetes-downwardapi-volume-example
The output shows the contents of the `labels` file and the `annotations` file:
-```shell
+```
cluster="test-cluster1"
rack="rack-22"
zone="us-est-coast"
@@ -155,7 +155,7 @@ file for a Pod that has one Container:
{{< codenew file="pods/inject/dapi-volume-resources.yaml" >}}
In the configuration file, you can see that the Pod has a
-[`downwardAPI` volume](/concepts/storage/volumes/#downwardapi),
+[`downwardAPI` volume](/docs/concepts/storage/volumes/#downwardapi),
and the Container mounts the volume at `/etc/podinfo`.
Look at the `items` array under `downwardAPI`. Each element of the array is a
diff --git a/content/en/docs/tasks/job/indexed-parallel-processing-static.md b/content/en/docs/tasks/job/indexed-parallel-processing-static.md
index da5e6d4e08..dfa222145c 100644
--- a/content/en/docs/tasks/job/indexed-parallel-processing-static.md
+++ b/content/en/docs/tasks/job/indexed-parallel-processing-static.md
@@ -5,7 +5,7 @@ min-kubernetes-server-version: v1.21
weight: 30
---
-{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
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 e435f392fe..d6d6b68f19 100644
--- a/content/en/docs/tasks/manage-daemon/update-daemon-set.md
+++ b/content/en/docs/tasks/manage-daemon/update-daemon-set.md
@@ -79,7 +79,7 @@ kubectl apply -f https://k8s.io/examples/controllers/fluentd-daemonset.yaml --dr
The output from both commands should be:
-```shell
+```
RollingUpdate
```
diff --git a/content/en/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch.md b/content/en/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch.md
index 7b38703c74..ad2fc41173 100644
--- a/content/en/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch.md
+++ b/content/en/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch.md
@@ -82,7 +82,7 @@ kubectl get deployment patch-demo --output yaml
The output shows that the PodSpec in the Deployment has two Containers:
-```shell
+```yaml
containers:
- image: redis
imagePullPolicy: Always
@@ -309,7 +309,7 @@ kubectl patch deployment retainkeys-demo --type merge --patch-file patch-file-no
In the output, you can see that it is not possible to set `type` as `Recreate` when a value is defined for `spec.strategy.rollingUpdate`:
-```shell
+```
The Deployment "retainkeys-demo" is invalid: spec.strategy.rollingUpdate: Forbidden: may not be specified when strategy `type` is 'Recreate'
```
@@ -341,7 +341,7 @@ kubectl get deployment retainkeys-demo --output yaml
The output shows that the strategy object in the Deployment does not contain the `rollingUpdate` key anymore:
-```shell
+```yaml
spec:
strategy:
type: Recreate
diff --git a/content/en/docs/tasks/network/validate-dual-stack.md b/content/en/docs/tasks/network/validate-dual-stack.md
index 549c60b003..33a8d39091 100644
--- a/content/en/docs/tasks/network/validate-dual-stack.md
+++ b/content/en/docs/tasks/network/validate-dual-stack.md
@@ -16,7 +16,7 @@ This document shares how to validate IPv4/IPv6 dual-stack enabled Kubernetes clu
* Provider support for dual-stack networking (Cloud provider or otherwise must be able to provide Kubernetes nodes with routable IPv4/IPv6 network interfaces)
-* A [network plugin](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) that supports dual-stack (such as Calico, Cilium or Kubenet)
+* A [network plugin](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) that supports dual-stack networking.
* [Dual-stack enabled](/docs/concepts/services-networking/dual-stack/) cluster
{{< version-check >}}
diff --git a/content/en/docs/tasks/run-application/force-delete-stateful-set-pod.md b/content/en/docs/tasks/run-application/force-delete-stateful-set-pod.md
index 0001f4c9f4..a4a145f5b4 100644
--- a/content/en/docs/tasks/run-application/force-delete-stateful-set-pod.md
+++ b/content/en/docs/tasks/run-application/force-delete-stateful-set-pod.md
@@ -90,6 +90,6 @@ Always perform force deletion of StatefulSet Pods carefully and with complete kn
## {{% heading "whatsnext" %}}
-Learn more about [debugging a StatefulSet](/docs/tasks/debug-application-cluster/debug-stateful-set/).
+Learn more about [debugging a StatefulSet](/docs/tasks/debug/debug-application/debug-statefulset/).
diff --git a/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md
index 0039254f7e..1f655ea535 100644
--- a/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md
+++ b/content/en/docs/tasks/run-application/horizontal-pod-autoscale.md
@@ -90,7 +90,7 @@ The common use for HorizontalPodAutoscaler is to configure it to fetch metrics f
(`metrics.k8s.io`, `custom.metrics.k8s.io`, or `external.metrics.k8s.io`). The `metrics.k8s.io` API is
usually provided by an add-on named Metrics Server, which needs to be launched separately.
For more information about resource metrics, see
-[Metrics Server](/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#metrics-server).
+[Metrics Server](/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/#metrics-server).
[Support for metrics APIs](#support-for-metrics-apis) explains the stability guarantees and support status for these
different APIs.
@@ -400,7 +400,7 @@ scaling in that direction.
### Stabilization window
The stabilization window is used to restrict the [flapping](#flapping) of
-replicas count when the metrics used for scaling keep fluctuating. The autoscaling algorithm
+replica count when the metrics used for scaling keep fluctuating. The autoscaling algorithm
uses this window to infer a previous desired state and avoid unwanted changes to workload
scale.
diff --git a/content/en/docs/tasks/run-application/run-replicated-stateful-application.md b/content/en/docs/tasks/run-application/run-replicated-stateful-application.md
index e98830b9e3..03da601a48 100644
--- a/content/en/docs/tasks/run-application/run-replicated-stateful-application.md
+++ b/content/en/docs/tasks/run-application/run-replicated-stateful-application.md
@@ -532,7 +532,7 @@ kubectl delete pvc data-mysql-4
## {{% heading "whatsnext" %}}
* Learn more about [scaling a StatefulSet](/docs/tasks/run-application/scale-stateful-set/).
-* Learn more about [debugging a StatefulSet](/docs/tasks/debug-application-cluster/debug-stateful-set/).
+* Learn more about [debugging a StatefulSet](/docs/tasks/debug/debug-application/debug-statefulset/).
* Learn more about [deleting a StatefulSet](/docs/tasks/run-application/delete-stateful-set/).
* Learn more about [force deleting StatefulSet Pods](/docs/tasks/run-application/force-delete-stateful-set-pod/).
* Look in the [Helm Charts repository](https://artifacthub.io/)
diff --git a/content/en/docs/tasks/tls/manual-rotation-of-ca-certificates.md b/content/en/docs/tasks/tls/manual-rotation-of-ca-certificates.md
index e56322cbec..4ea543aef8 100644
--- a/content/en/docs/tasks/tls/manual-rotation-of-ca-certificates.md
+++ b/content/en/docs/tasks/tls/manual-rotation-of-ca-certificates.md
@@ -143,7 +143,7 @@ Configurations with a single API server will experience unavailability while the
1. Validate the logs from control plane components, along with the kubelet and the
kube-proxy are not throwing any tls errors, see
- [looking at the logs](/docs/tasks/debug-application-cluster/debug-cluster/#looking-at-logs).
+ [looking at the logs](/docs/tasks/debug/debug-cluster/#looking-at-logs).
1. Validate logs from any aggregated api servers and pods using in-cluster config.
diff --git a/content/en/docs/tasks/tools/install-kubectl-windows.md b/content/en/docs/tasks/tools/install-kubectl-windows.md
index 3fde98c309..4c2f175e89 100644
--- a/content/en/docs/tasks/tools/install-kubectl-windows.md
+++ b/content/en/docs/tasks/tools/install-kubectl-windows.md
@@ -69,7 +69,7 @@ The following methods exist for installing kubectl on Windows:
Or use this for detailed view of version:
```cmd
- kubectl version --client --output=yaml
+ kubectl version --client --output=yaml
```
{{< note >}}
diff --git a/content/en/docs/tutorials/configuration/configure-java-microservice/configure-java-microservice-interactive.html b/content/en/docs/tutorials/configuration/configure-java-microservice/configure-java-microservice-interactive.html
index bb926a1d19..fd3db09a42 100644
--- a/content/en/docs/tutorials/configuration/configure-java-microservice/configure-java-microservice-interactive.html
+++ b/content/en/docs/tutorials/configuration/configure-java-microservice/configure-java-microservice-interactive.html
@@ -11,7 +11,7 @@ weight: 20
-
+{{< katacoda-tutorial >}}
diff --git a/content/en/docs/tutorials/configuration/configure-redis-using-configmap.md b/content/en/docs/tutorials/configuration/configure-redis-using-configmap.md
index ec6edb9cc7..d95e752208 100644
--- a/content/en/docs/tutorials/configuration/configure-redis-using-configmap.md
+++ b/content/en/docs/tutorials/configuration/configure-redis-using-configmap.md
@@ -8,7 +8,7 @@ content_type: tutorial
-This page provides a real world example of how to configure Redis using a ConfigMap and builds upon the [Configure Containers Using a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/) task.
+This page provides a real world example of how to configure Redis using a ConfigMap and builds upon the [Configure a Pod to Use a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/) task.
@@ -27,7 +27,7 @@ This page provides a real world example of how to configure Redis using a Config
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
* The example shown on this page works with `kubectl` 1.14 and above.
-* Understand [Configure Containers Using a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/).
+* Understand [Configure a Pod to Use a ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/).
@@ -78,7 +78,7 @@ kubectl get pod/redis configmap/example-redis-config
You should see the following output:
-```shell
+```
NAME READY STATUS RESTARTS AGE
pod/redis 1/1 Running 0 8s
diff --git a/content/en/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html b/content/en/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html
index 5301c6b7a1..2649ce4f94 100644
--- a/content/en/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html
+++ b/content/en/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive.html
@@ -11,7 +11,7 @@ weight: 20
-
+{{< katacoda-tutorial >}}
diff --git a/content/en/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html b/content/en/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html
index 915304f912..d8a525a6d5 100644
--- a/content/en/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html
+++ b/content/en/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive.html
@@ -11,7 +11,7 @@ weight: 20
-
+{{< katacoda-tutorial >}}
diff --git a/content/en/docs/tutorials/kubernetes-basics/explore/explore-interactive.html b/content/en/docs/tutorials/kubernetes-basics/explore/explore-interactive.html
index ad79ec5d7f..82b5f4bb33 100644
--- a/content/en/docs/tutorials/kubernetes-basics/explore/explore-interactive.html
+++ b/content/en/docs/tutorials/kubernetes-basics/explore/explore-interactive.html
@@ -11,7 +11,7 @@ weight: 20
-
+{{< katacoda-tutorial >}}
diff --git a/content/en/docs/tutorials/kubernetes-basics/expose/expose-interactive.html b/content/en/docs/tutorials/kubernetes-basics/expose/expose-interactive.html
index 2b5d3aa365..ce5eeb455f 100644
--- a/content/en/docs/tutorials/kubernetes-basics/expose/expose-interactive.html
+++ b/content/en/docs/tutorials/kubernetes-basics/expose/expose-interactive.html
@@ -11,7 +11,7 @@ weight: 20
-
+{{< katacoda-tutorial >}}
diff --git a/content/en/docs/tutorials/kubernetes-basics/expose/expose-intro.html b/content/en/docs/tutorials/kubernetes-basics/expose/expose-intro.html
index 1996859e2e..b362669c05 100644
--- a/content/en/docs/tutorials/kubernetes-basics/expose/expose-intro.html
+++ b/content/en/docs/tutorials/kubernetes-basics/expose/expose-intro.html
@@ -66,7 +66,7 @@ weight: 10
-
A Service routes traffic across a set of Pods. Services are the abstraction that allow pods to die and replicate in Kubernetes without impacting your application. Discovery and routing among dependent Pods (such as the frontend and backend components in an application) is handled by Kubernetes Services.
+
A Service routes traffic across a set of Pods. Services are the abstraction that allows pods to die and replicate in Kubernetes without impacting your application. Discovery and routing among dependent Pods (such as the frontend and backend components in an application) are handled by Kubernetes Services.
Services match a set of Pods using labels and selectors , a grouping primitive that allows logical operation on objects in Kubernetes. Labels are key/value pairs attached to objects and can be used in any number of ways:
Designate objects for development, test, and production
diff --git a/content/en/docs/tutorials/kubernetes-basics/scale/scale-interactive.html b/content/en/docs/tutorials/kubernetes-basics/scale/scale-interactive.html
index 3fedf79782..ad01e64c02 100644
--- a/content/en/docs/tutorials/kubernetes-basics/scale/scale-interactive.html
+++ b/content/en/docs/tutorials/kubernetes-basics/scale/scale-interactive.html
@@ -11,7 +11,7 @@ weight: 20
-
+{{< katacoda-tutorial >}}
diff --git a/content/en/docs/tutorials/kubernetes-basics/update/update-interactive.html b/content/en/docs/tutorials/kubernetes-basics/update/update-interactive.html
index 2e70d61d74..99184ddb3e 100644
--- a/content/en/docs/tutorials/kubernetes-basics/update/update-interactive.html
+++ b/content/en/docs/tutorials/kubernetes-basics/update/update-interactive.html
@@ -11,7 +11,7 @@ weight: 20
-
+{{< katacoda-tutorial >}}
diff --git a/content/en/docs/tutorials/services/source-ip.md b/content/en/docs/tutorials/services/source-ip.md
index bb9a622c98..9eab7538d4 100644
--- a/content/en/docs/tutorials/services/source-ip.md
+++ b/content/en/docs/tutorials/services/source-ip.md
@@ -206,19 +206,8 @@ Note that these are not the correct client IPs, they're cluster internal IPs. Th
Visually:
-{{< mermaid >}}
-graph LR;
- client(client)-->node2[Node 2];
- node2-->client;
- node2-. SNAT .->node1[Node 1];
- node1-. SNAT .->node2;
- node1-->endpoint(Endpoint);
+{{< figure src="/docs/images/tutor-service-nodePort-fig01.svg" alt="source IP nodeport figure 01" class="diagram-large" caption="Figure. Source IP Type=NodePort using SNAT" link="https://mermaid.live/edit#pako:eNqNkV9rwyAUxb-K3LysYEqS_WFYKAzat9GHdW9zDxKvi9RoMIZtlH732ZjSbE970cu5v3s86hFqJxEYfHjRNeT5ZcUtIbXRaMNN2hZ5vrYRqt52cSXV-4iMSuwkZiYtyX739EqWaahMQ-V1qPxDVLNOvkYrO6fj2dupWMR2iiT6foOKdEZoS5Q2hmVSStoH7w7IMqXUVOefWoaG3XVftHbGeZYVRbH6ZXJ47CeL2-qhxvt_ucTe1SUlpuMN6CX12XeGpLdJiaMMFFr0rdAyvvfxjHEIDbbIgcVSohKDCRy4PUV06KQIuJU6OA9MCdMjBTEEt_-2NbDgB7xAGy3i97VJPP0ABRmcqg" >}}
- classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000;
- classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff;
- class node1,node2,endpoint k8s;
- class client plain;
-{{ mermaid >}}
To avoid this, Kubernetes has a feature to
[preserve the client source IP](/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip).
@@ -262,20 +251,8 @@ This is what happens:
Visually:
-{{< mermaid >}}
-graph TD;
- client --> node1[Node 1];
- client(client) --x node2[Node 2];
- node1 --> endpoint(endpoint);
- endpoint --> node1;
-
- classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000;
- classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff;
- class node1,node2,endpoint k8s;
- class client plain;
-{{ mermaid >}}
-
+{{< figure src="/docs/images/tutor-service-nodePort-fig02.svg" alt="source IP nodeport figure 02" class="diagram-large" caption="Figure. Source IP Type=NodePort preserves client source IP address" link="" >}}
## Source IP for Services with `Type=LoadBalancer`
diff --git a/content/en/docs/tutorials/stateful-application/cassandra.md b/content/en/docs/tutorials/stateful-application/cassandra.md
index ffbf65286b..b6b656b3f5 100644
--- a/content/en/docs/tutorials/stateful-application/cassandra.md
+++ b/content/en/docs/tutorials/stateful-application/cassandra.md
@@ -93,7 +93,7 @@ cassandra ClusterIP None
9042/TCP 45s
```
If you don't see a Service named `cassandra`, that means creation failed. Read
-[Debug Services](/docs/tasks/debug-application-cluster/debug-service/)
+[Debug Services](/docs/tasks/debug/debug-application/debug-service/)
for help troubleshooting common issues.
## Using a StatefulSet to create a Cassandra ring
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 d22d7df5ca..e5f32633e3 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
@@ -236,10 +236,10 @@ Do not leave your WordPress installation on this page. If another user finds it,
## {{% heading "whatsnext" %}}
-* Learn more about [Introspection and Debugging](/docs/tasks/debug-application-cluster/debug-application-introspection/)
+* Learn more about [Introspection and Debugging](/docs/tasks/debug/debug-application/debug-running-pod/)
* Learn more about [Jobs](/docs/concepts/workloads/controllers/job/)
* Learn more about [Port Forwarding](/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)
-* Learn how to [Get a Shell to a Container](/docs/tasks/debug-application-cluster/get-shell-running-container/)
+* Learn how to [Get a Shell to a Container](/docs/tasks/debug/debug-application/get-shell-running-container/)
diff --git a/content/en/examples/README.md b/content/en/examples/README.md
index 6a5f3ceea7..cb364850cc 100644
--- a/content/en/examples/README.md
+++ b/content/en/examples/README.md
@@ -9,4 +9,3 @@ where `` is the two character representation of a language. For example:
```
go test k8s.io/website/content/en/examples
```
-
diff --git a/content/en/examples/admin/cloud/ccm-example.yaml b/content/en/examples/admin/cloud/ccm-example.yaml
index 3bce7b58fa..49a57ecca9 100644
--- a/content/en/examples/admin/cloud/ccm-example.yaml
+++ b/content/en/examples/admin/cloud/ccm-example.yaml
@@ -59,9 +59,13 @@ spec:
- key: node.cloudprovider.kubernetes.io/uninitialized
value: "true"
effect: NoSchedule
- # this is to have the daemonset runnable on master nodes
- # the taint may vary depending on your cluster setup
+ # these tolerations are to have the daemonset runnable on control plane nodes
+ # remove them if your control plane nodes should not run pods
+ - key: node-role.kubernetes.io/control-plane
+ operator: Exists
+ effect: NoSchedule
- key: node-role.kubernetes.io/master
+ operator: Exists
effect: NoSchedule
# this is to restrict CCM to only run on master nodes
# the node selector may vary depending on your cluster setup
diff --git a/content/en/examples/application/mysql/mysql-configmap.yaml b/content/en/examples/application/mysql/mysql-configmap.yaml
index 6aa5bfe4e5..519334bc82 100644
--- a/content/en/examples/application/mysql/mysql-configmap.yaml
+++ b/content/en/examples/application/mysql/mysql-configmap.yaml
@@ -9,10 +9,8 @@ data:
# Apply this config only on the primary.
[mysqld]
log-bin
- datadir=/var/lib/mysql/mysql
replica.cnf: |
# Apply this config only on replicas.
[mysqld]
super-read-only
- datadir=/var/lib/mysql/mysql
diff --git a/content/en/examples/application/mysql/mysql-services.yaml b/content/en/examples/application/mysql/mysql-services.yaml
index 0cd76d91c6..6743cf707a 100644
--- a/content/en/examples/application/mysql/mysql-services.yaml
+++ b/content/en/examples/application/mysql/mysql-services.yaml
@@ -27,4 +27,3 @@ spec:
port: 3306
selector:
app: mysql
-
diff --git a/content/en/examples/controllers/daemonset.yaml b/content/en/examples/controllers/daemonset.yaml
index 685a137244..5b47b61ac1 100644
--- a/content/en/examples/controllers/daemonset.yaml
+++ b/content/en/examples/controllers/daemonset.yaml
@@ -15,8 +15,11 @@ spec:
name: fluentd-elasticsearch
spec:
tolerations:
- # this toleration is to have the daemonset runnable on master nodes
- # remove it if your masters can't run pods
+ # these tolerations are to have the daemonset runnable on control plane nodes
+ # remove them if your control plane nodes should not run pods
+ - key: node-role.kubernetes.io/control-plane
+ operator: Exists
+ effect: NoSchedule
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
diff --git a/content/en/examples/controllers/fluentd-daemonset-update.yaml b/content/en/examples/controllers/fluentd-daemonset-update.yaml
index dcf08d4fc9..9521e73b00 100644
--- a/content/en/examples/controllers/fluentd-daemonset-update.yaml
+++ b/content/en/examples/controllers/fluentd-daemonset-update.yaml
@@ -19,9 +19,13 @@ spec:
name: fluentd-elasticsearch
spec:
tolerations:
- # this toleration is to have the daemonset runnable on master nodes
- # remove it if your masters can't run pods
+ # these tolerations are to have the daemonset runnable on control plane nodes
+ # remove them if your control plane nodes should not run pods
+ - key: node-role.kubernetes.io/control-plane
+ operator: Exists
+ effect: NoSchedule
- key: node-role.kubernetes.io/master
+ operator: Exists
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
diff --git a/content/en/examples/controllers/fluentd-daemonset.yaml b/content/en/examples/controllers/fluentd-daemonset.yaml
index 0e1e7d3345..653636fc57 100644
--- a/content/en/examples/controllers/fluentd-daemonset.yaml
+++ b/content/en/examples/controllers/fluentd-daemonset.yaml
@@ -19,9 +19,13 @@ spec:
name: fluentd-elasticsearch
spec:
tolerations:
- # this toleration is to have the daemonset runnable on master nodes
- # remove it if your masters can't run pods
+ # these tolerations are to have the daemonset runnable on control plane nodes
+ # remove them if your control plane nodes should not run pods
+ - key: node-role.kubernetes.io/control-plane
+ operator: Exists
+ effect: NoSchedule
- key: node-role.kubernetes.io/master
+ operator: Exists
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
diff --git a/content/en/examples/examples_test.go b/content/en/examples/examples_test.go
index eaf6e5808e..27eae2eadf 100644
--- a/content/en/examples/examples_test.go
+++ b/content/en/examples/examples_test.go
@@ -647,6 +647,7 @@ func TestExampleObjectSchemas(t *testing.T) {
"service/networking": {
"curlpod": {&apps.Deployment{}},
"custom-dns": {&api.Pod{}},
+ "default-ingressclass": {&networking.IngressClass{}},
"dual-stack-default-svc": {&api.Service{}},
"dual-stack-ipfamilies-ipv6": {&api.Service{}},
"dual-stack-ipv6-svc": {&api.Service{}},
@@ -662,6 +663,7 @@ func TestExampleObjectSchemas(t *testing.T) {
"name-virtual-host-ingress": {&networking.Ingress{}},
"name-virtual-host-ingress-no-third-host": {&networking.Ingress{}},
"namespaced-params": {&networking.IngressClass{}},
+ "networkpolicy": {&networking.NetworkPolicy{}},
"network-policy-allow-all-egress": {&networking.NetworkPolicy{}},
"network-policy-allow-all-ingress": {&networking.NetworkPolicy{}},
"network-policy-default-deny-egress": {&networking.NetworkPolicy{}},
diff --git a/content/en/examples/pods/probe/exec-liveness.yaml b/content/en/examples/pods/probe/exec-liveness.yaml
index 07bf75f85c..6a9c9b3213 100644
--- a/content/en/examples/pods/probe/exec-liveness.yaml
+++ b/content/en/examples/pods/probe/exec-liveness.yaml
@@ -11,7 +11,7 @@ spec:
args:
- /bin/sh
- -c
- - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
+ - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
diff --git a/content/en/examples/policy/restricted-psp.yaml b/content/en/examples/policy/restricted-psp.yaml
index 0837c5a3ce..4c9ae156d1 100644
--- a/content/en/examples/policy/restricted-psp.yaml
+++ b/content/en/examples/policy/restricted-psp.yaml
@@ -3,6 +3,7 @@ kind: PodSecurityPolicy
metadata:
name: restricted
annotations:
+ # docker/default identifies a profile for seccomp, but it is not particularly tied to the Docker runtime
seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default,runtime/default'
apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default'
apparmor.security.beta.kubernetes.io/defaultProfileName: 'runtime/default'
diff --git a/content/en/examples/service/networking/networkpolicy.yaml b/content/en/examples/service/networking/networkpolicy.yaml
new file mode 100644
index 0000000000..e91eed2f67
--- /dev/null
+++ b/content/en/examples/service/networking/networkpolicy.yaml
@@ -0,0 +1,35 @@
+apiVersion: networking.k8s.io/v1
+kind: NetworkPolicy
+metadata:
+ name: test-network-policy
+ namespace: default
+spec:
+ podSelector:
+ matchLabels:
+ role: db
+ policyTypes:
+ - Ingress
+ - Egress
+ ingress:
+ - from:
+ - ipBlock:
+ cidr: 172.17.0.0/16
+ except:
+ - 172.17.1.0/24
+ - namespaceSelector:
+ matchLabels:
+ project: myproject
+ - podSelector:
+ matchLabels:
+ role: frontend
+ ports:
+ - protocol: TCP
+ port: 6379
+ egress:
+ - to:
+ - ipBlock:
+ cidr: 10.0.0.0/24
+ ports:
+ - protocol: TCP
+ port: 5978
+
diff --git a/content/en/releases/_index.md b/content/en/releases/_index.md
index af7819a0c1..d374f6eb5a 100644
--- a/content/en/releases/_index.md
+++ b/content/en/releases/_index.md
@@ -7,7 +7,7 @@ type: docs
-The Kubernetes project maintains release branches for the most recent three minor releases ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}). Kubernetes 1.19 and newer receive approximately 1 year of patch support. Kubernetes 1.18 and older received approximately 9 months of patch support.
+The Kubernetes project maintains release branches for the most recent three minor releases ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}). Kubernetes 1.19 and newer receive [approximately 1 year of patch support](/releases/patch-releases/#support-period). Kubernetes 1.18 and older received approximately 9 months of patch support.
Kubernetes versions are expressed as **x.y.z**,
where **x** is the major version, **y** is the minor version, and **z** is the patch version, following [Semantic Versioning](https://semver.org/) terminology.
@@ -24,4 +24,4 @@ More information in the [version skew policy](/releases/version-skew-policy/) do
Check out the [schedule](https://github.com/kubernetes/sig-release/tree/master/releases/release-{{< skew nextMinorVersion >}}) for the upcoming **{{< skew nextMinorVersion >}}** Kubernetes release!
-## Helpful Resources
\ No newline at end of file
+## Helpful Resources
diff --git a/content/en/releases/download.md b/content/en/releases/download.md
index aa1fca98a4..9bad5d306c 100644
--- a/content/en/releases/download.md
+++ b/content/en/releases/download.md
@@ -2,15 +2,98 @@
title: Download Kubernetes
type: docs
---
-## Core Kubernetes components
+
+Kubernetes ships binaries for each component as well as a standard set of client
+applications to bootstrap or interact with a cluster. Components like the
+API server are capable of running within container images inside of a
+cluster. Those components are also shipped in container images as part of the
+official release process. All binaries as well as container images are available
+for multiple operating systems as well as hardware architectures.
+
+## Container Images
+
+All Kubernetes container images are deployed to the
+[k8s.gcr.io](https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/GLOBAL)
+container registry.
+
+{{< feature-state for_k8s_version="v1.24" state="alpha" >}}
+
+For Kubernetes {{< param "version" >}}, the following
+container images are signed using [cosign](https://github.com/sigstore/cosign)
+signatures:
+
+| Container Image | Supported Architectures |
+| ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| [k8s.gcr.io/kube-apiserver:{{< param "fullversion" >}}][0] | [amd64][0-amd64], [arm][0-arm], [arm64][0-arm64], [ppc64le][0-ppc64le], [s390x][0-s390x] |
+| [k8s.gcr.io/kube-controller-manager:{{< param "fullversion" >}}][1] | [amd64][1-amd64], [arm][1-arm], [arm64][1-arm64], [ppc64le][1-ppc64le], [s390x][1-s390x] |
+| [k8s.gcr.io/kube-proxy:{{< param "fullversion" >}}][2] | [amd64][2-amd64], [arm][2-arm], [arm64][2-arm64], [ppc64le][2-ppc64le], [s390x][2-s390x] |
+| [k8s.gcr.io/kube-scheduler:{{< param "fullversion" >}}][3] | [amd64][3-amd64], [arm][3-arm], [arm64][3-arm64], [ppc64le][3-ppc64le], [s390x][3-s390x] |
+| [k8s.gcr.io/conformance:{{< param "fullversion" >}}][4] | [amd64][4-amd64], [arm][4-arm], [arm64][4-arm64], [ppc64le][4-ppc64le], [s390x][4-s390x] |
+
+[0]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-apiserver
+[0-amd64]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-apiserver-amd64
+[0-arm]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-apiserver-arm
+[0-arm64]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-apiserver-arm64
+[0-ppc64le]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-apiserver-ppc64le
+[0-s390x]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-apiserver-s390x
+[1]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-controller-manager
+[1-amd64]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-controller-manager-amd64
+[1-arm]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-controller-manager-arm
+[1-arm64]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-controller-manager-arm64
+[1-ppc64le]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-controller-manager-ppc64le
+[1-s390x]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-controller-manager-s390x
+[2]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-proxy
+[2-amd64]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-proxy-amd64
+[2-arm]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-proxy-arm
+[2-arm64]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-proxy-arm64
+[2-ppc64le]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-proxy-ppc64le
+[2-s390x]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-proxy-s390x
+[3]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-scheduler
+[3-amd64]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-scheduler-amd64
+[3-arm]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-scheduler-arm
+[3-arm64]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-scheduler-arm64
+[3-ppc64le]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-scheduler-ppc64le
+[3-s390x]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/kube-scheduler-s390x
+[4]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/conformance
+[4-amd64]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/conformance-amd64
+[4-arm]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/conformance-arm
+[4-arm64]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/conformance-arm64
+[4-ppc64le]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/conformance-ppc64le
+[4-s390x]: https://console.cloud.google.com/gcr/images/k8s-artifacts-prod/us/conformance-s390x
+
+All container images are available for multiple architectures, whereas the
+container runtime should choose the correct one based on the underlying
+platform. It is also possible to pull a dedicated architecture by suffixing the
+container image name, for example
+[`k8s.gcr.io/kube-apiserver-arm64:{{< param "fullversion" >}}`][0-arm64]. All
+those derivations are signed in the same way as the multi-architecture manifest lists.
+
+The Kubernetes project publishes a list of signed Kubernetes container images
+in SBoM (Software Bill of Materials) format.
+You can fetch that list using:
+
+```shell
+curl -Ls "https://sbom.k8s.io/$(curl -Ls https://dl.k8s.io/release/latest.txt)/release" | awk '/PackageName: k8s.gcr.io\// {print $2}'
+```
+For Kubernetes v{{< skew currentVersion >}}, the only kind of code artifact that
+you can verify integrity for is a container image, using the experimental
+signing support.
+
+To manually verify signed container images of Kubernetes core components, refer to
+[Verify Signed Container Images](/docs/tasks/administer-cluster/verify-signed-images).
+
+
+
+## Binaries
Find links to download Kubernetes components (and their checksums) in the [CHANGELOG](https://github.com/kubernetes/kubernetes/tree/master/CHANGELOG) files.
Alternately, use [downloadkubernetes.com](https://www.downloadkubernetes.com/) to filter by version and architecture.
-## kubectl
+### kubectl
+
The Kubernetes command-line tool, [kubectl](/docs/reference/kubectl/kubectl/), allows
you to run commands against Kubernetes clusters.
@@ -18,9 +101,9 @@ You can use kubectl to deploy applications, inspect and manage cluster resources
and view logs. For more information including a complete list of kubectl operations, see the
[`kubectl` reference documentation](/docs/reference/kubectl/).
-kubectl is installable on a variety of Linux platforms, macOS and Windows.
+kubectl is installable on a variety of Linux platforms, macOS and Windows.
Find your preferred operating system below.
- [Install kubectl on Linux](/docs/tasks/tools/install-kubectl-linux)
- [Install kubectl on macOS](/docs/tasks/tools/install-kubectl-macos)
-- [Install kubectl on Windows](/docs/tasks/tools/install-kubectl-windows)
\ No newline at end of file
+- [Install kubectl on Windows](/docs/tasks/tools/install-kubectl-windows)
diff --git a/content/en/releases/patch-releases.md b/content/en/releases/patch-releases.md
index 3358da7171..d0f56d19c3 100644
--- a/content/en/releases/patch-releases.md
+++ b/content/en/releases/patch-releases.md
@@ -78,13 +78,24 @@ releases may also occur in between these.
| Monthly Patch Release | Cherry Pick Deadline | Target date |
| --------------------- | -------------------- | ----------- |
-| April 2022 | 2022-04-08 | 2022-04-13 |
-| May 2022 | 2022-05-13 | 2022-05-18 |
| June 2022 | 2022-06-10 | 2022-06-15 |
| July 2022 | 2022-07-08 | 2022-07-13 |
+| August 2022 | 2022-08-12 | 2022-08-17 |
+| September 2022 | 2022-09-09 | 2022-09-14 |
## Detailed Release History for Active Branches
+### 1.24
+
+Next patch release is **1.24.1**
+
+End of Life for **1.24** is **2023-09-29**
+
+| PATCH RELEASE | CHERRY PICK DEADLINE | TARGET DATE | NOTE |
+|---------------|----------------------|-------------|------|
+| 1.24.2 | 2022-06-10 | 2022-06-15 | |
+| 1.24.1 | 2022-05-20 | 2022-05-24 | |
+
### 1.23
**1.23** enters maintenance mode on **2022-12-28**.
@@ -93,10 +104,12 @@ End of Life for **1.23** is **2023-02-28**.
| Patch Release | Cherry Pick Deadline | Target Date | Note |
|---------------|----------------------|-------------|------|
+| 1.23.8 | 2022-06-10 | 2022-06-15 | |
+| 1.23.7 | 2022-05-20 | 2022-05-24 | |
| 1.23.6 | 2022-04-08 | 2022-04-13 | |
| 1.23.5 | 2022-03-11 | 2022-03-16 | |
| 1.23.4 | 2022-02-11 | 2022-02-16 | |
-| 1.23.3 | 2022-01-24 | 2022-01-25 | [Out-of-Band Release](https://groups.google.com/u/2/a/kubernetes.io/g/dev/c/Xl1sm-CItaY) |
+| 1.23.3 | 2022-01-24 | 2022-01-25 | [Out-of-Band Release](https://groups.google.com/a/kubernetes.io/g/dev/c/Xl1sm-CItaY) |
| 1.23.2 | 2022-01-14 | 2022-01-19 | |
| 1.23.1 | 2021-12-14 | 2021-12-16 | |
@@ -108,6 +121,8 @@ End of Life for **1.22** is **2022-10-28**
| Patch Release | Cherry Pick Deadline | Target Date | Note |
|---------------|----------------------|-------------|------|
+| 1.22.11 | 2022-06-10 | 2022-06-15 | |
+| 1.22.10 | 2022-05-20 | 2022-05-24 | |
| 1.22.9 | 2022-04-08 | 2022-04-13 | |
| 1.22.8 | 2022-03-11 | 2022-03-16 | |
| 1.22.7 | 2022-02-11 | 2022-02-16 | |
@@ -125,19 +140,21 @@ End of Life for **1.22** is **2022-10-28**
End of Life for **1.21** is **2022-06-28**
| Patch Release | Cherry Pick Deadline | Target Date | Note |
-| ------------- | -------------------- | ----------- | ---------------------------------------------------------------------- |
-| 1.21.12 | 2022-04-08 | 2022-04-13 | |
-| 1.21.11 | 2022-03-11 | 2022-03-16 | |
-| 1.21.10 | 2022-02-11 | 2022-02-16 | |
-| 1.21.9 | 2022-01-14 | 2022-01-19 | |
-| 1.21.8 | 2021-12-10 | 2021-12-15 | |
-| 1.21.7 | 2021-11-12 | 2021-11-17 | |
-| 1.21.6 | 2021-10-22 | 2021-10-27 | |
-| 1.21.5 | 2021-09-10 | 2021-09-15 | |
-| 1.21.4 | 2021-08-07 | 2021-08-11 | |
-| 1.21.3 | 2021-07-10 | 2021-07-14 | |
-| 1.21.2 | 2021-06-12 | 2021-06-16 | |
-| 1.21.1 | 2021-05-07 | 2021-05-12 | [Regression](https://groups.google.com/g/kubernetes-dev/c/KuF8s2zueFs) |
+| ------------- | -------------------- | ----------- | ------------------------------------------------------------------------ |
+| 1.21.14 | 2022-06-10 | 2022-06-15 | If there is any critical issues to be released otherwise will be skipped |
+| 1.21.13 | 2022-05-20 | 2022-05-24 | |
+| 1.21.12 | 2022-04-08 | 2022-04-13 | |
+| 1.21.11 | 2022-03-11 | 2022-03-16 | |
+| 1.21.10 | 2022-02-11 | 2022-02-16 | |
+| 1.21.9 | 2022-01-14 | 2022-01-19 | |
+| 1.21.8 | 2021-12-10 | 2021-12-15 | |
+| 1.21.7 | 2021-11-12 | 2021-11-17 | |
+| 1.21.6 | 2021-10-22 | 2021-10-27 | |
+| 1.21.5 | 2021-09-10 | 2021-09-15 | |
+| 1.21.4 | 2021-08-07 | 2021-08-11 | |
+| 1.21.3 | 2021-07-10 | 2021-07-14 | |
+| 1.21.2 | 2021-06-12 | 2021-06-16 | |
+| 1.21.1 | 2021-05-07 | 2021-05-12 | [Regression](https://groups.google.com/g/kubernetes-dev/c/KuF8s2zueFs) |
## Non-Active Branch History
diff --git a/content/en/releases/version-skew-policy.md b/content/en/releases/version-skew-policy.md
index 87f6cf2c62..f59ab71ad8 100644
--- a/content/en/releases/version-skew-policy.md
+++ b/content/en/releases/version-skew-policy.md
@@ -26,7 +26,7 @@ For more information, see [Kubernetes Release Versioning](https://github.com/kub
The Kubernetes project maintains release branches for the most recent three minor releases ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}). Kubernetes 1.19 and newer receive approximately 1 year of patch support. Kubernetes 1.18 and older received approximately 9 months of patch support.
Applicable fixes, including security fixes, may be backported to those three release branches, depending on severity and feasibility.
-Patch releases are cut from those branches at a [regular cadence](https://git.k8s.io/sig-release/releases/patch-releases.md#cadence), plus additional urgent releases, when required.
+Patch releases are cut from those branches at a [regular cadence](https://kubernetes.io/releases/patch-releases/#cadence), plus additional urgent releases, when required.
The [Release Managers](/releases/release-managers/) group owns this decision.
diff --git a/content/es/docs/_index.md b/content/es/docs/_index.md
index a5cbf56e30..caf9a58d7a 100644
--- a/content/es/docs/_index.md
+++ b/content/es/docs/_index.md
@@ -16,7 +16,7 @@ Como podrá comprobar, la mayor parte de la documentación aún está disponible
-Si quiere participar, puede entrar al canal de Slack [#kubernets-docs-es](http://slack.kubernetes.io/) y formar parte del equipo detrás de la localización.
+Si quiere participar, puede entrar al canal de Slack [#kubernetes-docs-es](http://slack.kubernetes.io/) y formar parte del equipo detrás de la localización.
También puede pasar por el canal para solicitar la traducción de alguna página en concreto o reportar algún error que se haya podido encontrar. ¡Cualquier aportación será bien recibida!
diff --git a/content/es/docs/concepts/configuration/manage-resources-containers.md b/content/es/docs/concepts/configuration/manage-resources-containers.md
index 55e17c405f..9630d271ba 100644
--- a/content/es/docs/concepts/configuration/manage-resources-containers.md
+++ b/content/es/docs/concepts/configuration/manage-resources-containers.md
@@ -564,8 +564,8 @@ El {{< glossary_tooltip text="planificador" term_id="kube-scheduler" >}} se enca
la cantidad disponible sea asignada simultáneamente a los Pods.
El servidor de API restringe las cantidades de recursos extendidos a números enteros.
-Ejemplos de cantidades _validas_ son `3`,` 3000m` y `3Ki`. Ejemplos de
-_cantidades no válidas_ son `0.5` y` 1500m`.
+Ejemplos de cantidades _validas_ son `3`, `3000m` y `3Ki`. Ejemplos de
+_cantidades no válidas_ son `0.5` y `1500m`.
{{< note >}}
Los recursos extendidos reemplazan los Recursos Integrales Opacos.
@@ -630,7 +630,7 @@ está pendiente con un mensaje de este tipo, hay varias cosas para probar:
- Añadir más nodos al clúster.
- Terminar Pods innecesarios para hacer hueco a los Pods en estado pendiente.
- Compruebe que el Pod no sea más grande que todos los nodos. Por ejemplo, si todos los
- los nodos tienen una capacidad de `cpu: 1`, entonces un Pod con una solicitud de` cpu: 1.1`
+ los nodos tienen una capacidad de `cpu: 1`, entonces un Pod con una solicitud de `cpu: 1.1`
nunca se programará.
Puedes comprobar las capacidades del nodo y cantidad utilizada con el comando
diff --git a/content/es/docs/concepts/configuration/secret.md b/content/es/docs/concepts/configuration/secret.md
index 7120f0476b..8fd08c0285 100644
--- a/content/es/docs/concepts/configuration/secret.md
+++ b/content/es/docs/concepts/configuration/secret.md
@@ -862,7 +862,7 @@ tu debes usar `ls -la` para verlos al enumerar los contenidos del directorio.
### Caso de uso: Secret visible para un contenedor en un pod
-Considere un programa que necesita manejar solicitudes HTTP, hacer una lógicca empresarial compleja y luego firmar algunos mensajes con un HMAC. Debido a que tiene una lógica de aplicación compleja, puede haber una vulnerabilidad de lectura remota de archivos inadvertida en el servidor, lo que podría exponer la clave privada a un atacante.
+Considere un programa que necesita manejar solicitudes HTTP, hacer una lógica empresarial compleja y luego firmar algunos mensajes con un HMAC. Debido a que tiene una lógica de aplicación compleja, puede haber una vulnerabilidad de lectura remota de archivos inadvertida en el servidor, lo que podría exponer la clave privada a un atacante.
Esto podría dividirse en dos procesos en dos contenedores: un contenedor de frontend que maneja la interacción del usuario y la lógica empresarial. pero que no puede ver la clave privada; y un contenedor de firmante que puede ver la clave privada, y responde a solicitudes de firma simples del frontend (ejemplo, a través de redes de localhost).
diff --git a/content/es/docs/concepts/containers/container-lifecycle-hooks.md b/content/es/docs/concepts/containers/container-lifecycle-hooks.md
index 18cee92897..4471282d23 100644
--- a/content/es/docs/concepts/containers/container-lifecycle-hooks.md
+++ b/content/es/docs/concepts/containers/container-lifecycle-hooks.md
@@ -64,7 +64,7 @@ el contenedor no puede alcanzar el estado de `running` (en ejecución).
El comportamiento es similar para un hook `PreStop`.
Si el hook se cuelga durante la ejecución,
la fase del Pod permanece en un estado de `terminating` (finalizando) y se cancela después del `terminationGracePeriodSeconds` (finalización después del periodo de gracia) del pod en cuestión.
-Si un hook `PostStart` o` PreStop` falla, se mata el contenedor.
+Si un hook `PostStart` o `PreStop` falla, se mata el contenedor.
Los usuarios deben hacer que sus controladores de hooks sean lo más livianos posible.
Hay casos, sin embargo, que los comandos de larga ejecución tienen sentido,
@@ -74,7 +74,7 @@ como cuando se guarda el estado antes de detener un contenedor.
La entrega de un hook está destinada a ser enviada *al menos una vez*,
lo que significa que un hook puede ser llamado varias veces para cualquier evento dado,
-tanto para `PostStart` como para ` PreStop`.
+tanto para `PostStart` como para `PreStop`.
Depende de la implementación del hook manejar esto correctamente.
En general, solo se realizan entregas individuales.
diff --git a/content/es/docs/concepts/workloads/pods/init-containers.md b/content/es/docs/concepts/workloads/pods/init-containers.md
index fad0220899..fafb6ae2f6 100644
--- a/content/es/docs/concepts/workloads/pods/init-containers.md
+++ b/content/es/docs/concepts/workloads/pods/init-containers.md
@@ -338,4 +338,4 @@ Kubernetes, consulta la documentación de la versión que estás utilizando.
## {{% heading "whatsnext" %}}
* Lee acerca de [creando un Pod que tiene un contenedor de inicialización](/docs/tasks/configure-pod-container/configure-pod-initialization/#create-a-pod-that-has-an-init-container)
-* Aprende cómo [depurar contenedores de inicialización](/docs/tasks/debug-application-cluster/debug-init-containers/)
+* Aprende cómo [depurar contenedores de inicialización](/docs/tasks/debug/debug-application/debug-init-containers/)
diff --git a/content/es/docs/concepts/workloads/pods/pod.md b/content/es/docs/concepts/workloads/pods/pod.md
index 825ffbc016..b97a9f82a6 100644
--- a/content/es/docs/concepts/workloads/pods/pod.md
+++ b/content/es/docs/concepts/workloads/pods/pod.md
@@ -129,7 +129,7 @@ Un ejemplo del ciclo de terminación de un Pod:
1. El Kubelet terminará de eliminar el Pod en el servidor API configurando el período de gracia 0 (eliminación inmediata). El Pod desaparece de la API y ya no es visible desde el cliente.
Por defecto, todas las eliminaciones se realizan correctamente en 30 segundos. El comando `kubectl delete` admite la opción` --grace-period = `que permite al usuario anular el valor predeterminado y especificar su propio valor. El valor `0` [forzar eliminación](/es/docs/concepts/workloads/pods/pod/#forzar-destrucción-de-pods) del Pod.
-Debe especificar un indicador adicional `--force` junto con` --grace-period = 0` para realizar eliminaciones forzadas.
+Debe especificar un indicador adicional `--force` junto con `--grace-period = 0` para realizar eliminaciones forzadas.
### Forzar destrucción de Pods
diff --git a/content/es/docs/tasks/tools/included/install-kubectl-linux.md b/content/es/docs/tasks/tools/included/install-kubectl-linux.md
index 67c802bfb2..0238b53b9d 100644
--- a/content/es/docs/tasks/tools/included/install-kubectl-linux.md
+++ b/content/es/docs/tasks/tools/included/install-kubectl-linux.md
@@ -51,7 +51,7 @@ Por ejemplo, para descargar la versión {{< param "fullversion" >}} en Linux, es
Valide el binario kubectl con el archivo de comprobación:
```bash
- echo "$(}}
@@ -272,7 +272,7 @@ spec:
number: 80
```
-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`.
+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: networking.k8s.io/v1
diff --git a/content/fr/docs/concepts/services-networking/service.md b/content/fr/docs/concepts/services-networking/service.md
index f1cec8633f..9d8484b18e 100644
--- a/content/fr/docs/concepts/services-networking/service.md
+++ b/content/fr/docs/concepts/services-networking/service.md
@@ -209,7 +209,7 @@ Cela signifie que vous évitez d'envoyer du trafic via kube-proxy vers un pod co
{{< feature-state for_k8s_version="v1.11" state="stable" >}}
-En mode `ipvs`, kube-proxy surveille les Services et Endpoints Kubernetes. kube-proxy appelle l'interface` netlink` pour créer les règles IPVS en conséquence et synchronise périodiquement les règles IPVS avec les Services et Endpoints Kubernetes.
+En mode `ipvs`, kube-proxy surveille les Services et Endpoints Kubernetes. kube-proxy appelle l'interface `netlink` pour créer les règles IPVS en conséquence et synchronise périodiquement les règles IPVS avec les Services et Endpoints Kubernetes.
Cette boucle de contrôle garantit que l'état IPVS correspond à l'état souhaité.
Lors de l'accès à un service, IPVS dirige le trafic vers l'un des pods backend.
@@ -364,11 +364,11 @@ Les valeurs de `Type` et leurs comportements sont:
Le choix de cette valeur rend le service uniquement accessible à partir du cluster.
Il s'agit du `ServiceType` par défaut.
* [`NodePort`](#type-nodeport): Expose le service sur l'IP de chaque nœud sur un port statique (le `NodePort`).
- Un service `ClusterIP`, vers lequel le service` NodePort` est automatiquement créé.
+ Un service `ClusterIP`, vers lequel le service `NodePort` est automatiquement créé.
Vous pourrez contacter le service `NodePort`, depuis l'extérieur du cluster, en demandant `: `.
* [`LoadBalancer`](#loadbalancer): Expose le service en externe à l'aide de l'équilibreur de charge d'un fournisseur de cloud.
Les services `NodePort` et `ClusterIP`, vers lesquels les itinéraires de l'équilibreur de charge externe, sont automatiquement créés.
- * [`ExternalName`](#externalname): Mappe le service au contenu du champ `externalName` (par exemple` foo.bar.example.com`), en renvoyant un enregistrement `CNAME` avec sa valeur.
+ * [`ExternalName`](#externalname): Mappe le service au contenu du champ `externalName` (par exemple `foo.bar.example.com`), en renvoyant un enregistrement `CNAME` avec sa valeur.
Aucun proxy d'aucune sorte n'est mis en place.
{{< note >}}
Vous avez besoin de CoreDNS version 1.7 ou supérieure pour utiliser le type `ExternalName`.
diff --git a/content/fr/docs/concepts/workloads/pods/init-containers.md b/content/fr/docs/concepts/workloads/pods/init-containers.md
index fb4b6f3270..2af4306b0b 100644
--- a/content/fr/docs/concepts/workloads/pods/init-containers.md
+++ b/content/fr/docs/concepts/workloads/pods/init-containers.md
@@ -325,6 +325,6 @@ redémarrage du conteneur d'application.
* Lire à propos de la [création d'un Pod ayant un init container](/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod-that-has-an-init-container)
-* Apprendre à [debugger les init containers](/docs/tasks/debug-application-cluster/debug-init-containers/)
+* Apprendre à [debugger les init containers](/docs/tasks/debug/debug-application/debug-init-containers/)
diff --git a/content/fr/docs/concepts/workloads/pods/pod-topology-spread-constraints.md b/content/fr/docs/concepts/workloads/pods/pod-topology-spread-constraints.md
index d1cd1f41e1..bd11052a9d 100644
--- a/content/fr/docs/concepts/workloads/pods/pod-topology-spread-constraints.md
+++ b/content/fr/docs/concepts/workloads/pods/pod-topology-spread-constraints.md
@@ -205,6 +205,7 @@ apiVersion: kubescheduler.config.k8s.io/v1alpha2
kind: KubeSchedulerConfiguration
profiles:
+ - schedulerName: default-scheduler
- pluginConfig:
- name: PodTopologySpread
args:
diff --git a/content/fr/docs/contribute/generate-ref-docs/kubernetes-api.md b/content/fr/docs/contribute/generate-ref-docs/kubernetes-api.md
index cdb91bb27a..b039d19c8b 100644
--- a/content/fr/docs/contribute/generate-ref-docs/kubernetes-api.md
+++ b/content/fr/docs/contribute/generate-ref-docs/kubernetes-api.md
@@ -122,7 +122,7 @@ On branch master
### Valider votre fichier édité
-Exécutez `git add` et ` git commit` pour valider les modifications que vous avez apportées jusqu'à présent.
+Exécutez `git add` et `git commit` pour valider les modifications que vous avez apportées jusqu'à présent.
Dans l'étape suivante, vous ferez un deuxième commit.
Il est important de séparer vos modifications en deux commits.
@@ -152,7 +152,7 @@ Voir le contenu de `api/openapi-spec/swagger.json` pour vous assurer que la faut
Par exemple, vous pouvez exécuter `git diff -a api/openapi-spec/swagger.json`.
Ceci est important, car `swagger.json` sera l’entrée de la seconde étape du processus de génération de doc.
-Exécutez `git add` et ` git commit` pour valider vos modifications.
+Exécutez `git add` et `git commit` pour valider vos modifications.
Vous avez maintenant deux validations: une avec le fichier `types.go` édité et une avec les spécifications OpenAPI générées et les fichiers associés.
Gardez ces deux commits séparés.
C'est-à-dire, ne faites pas un squash de vos commits.
diff --git a/content/fr/docs/setup/custom-cloud/kops.md b/content/fr/docs/setup/custom-cloud/kops.md
index 297ce01b73..fa2f5acfbe 100644
--- a/content/fr/docs/setup/custom-cloud/kops.md
+++ b/content/fr/docs/setup/custom-cloud/kops.md
@@ -132,7 +132,7 @@ mais aussi `dev.example.com` ou même `example.com`. kops fonctionne avec n'impo
Supposons que vous utilisiez `dev.example.com` comme zone hébergée. Vous créeriez cette zone hébergée en utilisant la [méthode normal](http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingNewSubdomain.html), ou avec une ligne de commande telle que `aws route53 create-hosted-zone --name dev.example.com --caller-reference 1`.
Vous devrez ensuite configurer vos enregistrements NS dans le domaine parent afin que vous puissiez résoudre dans ce domaine.
-Vous créeriez donc des enregistrements NS dans le domaine `example.com` pour` dev`.
+Vous créeriez donc des enregistrements NS dans le domaine `example.com` pour `dev`.
S'il s'agit d'un nom de domaine racine, vous devrez configurer les enregistrements NS chez votre hébergeur de nom de domaine (là où vous avez acheté votre nom de domaine `example.com`).
Cette étape est délicate, soyez vigilants (c’est la première cause de problèmes !). Vous pouvez vérifier que
@@ -195,7 +195,7 @@ Il applique les modifications que vous avez apportées à la configuration sur v
Par exemple, après un `kops edit ig nodes`, puis un `kops update cluster --yes` pour appliquer votre configuration, parfois, vous devrez également exécuter un `kops rolling-update cluster` pour déployer la configuration immédiatement.
-Sans l'argument `--yes`,` kops update cluster` vous montrera un aperçu de ce qu’il va faire. C'est pratique
+Sans l'argument `--yes`, `kops update cluster` vous montrera un aperçu de ce qu’il va faire. C'est pratique
pour les clusters de production !
### Explorer d'autres composants additionnels (add-ons)
diff --git a/content/fr/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm.md b/content/fr/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm.md
index f25ac905be..9983bde03c 100644
--- a/content/fr/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm.md
+++ b/content/fr/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm.md
@@ -243,7 +243,7 @@ Alternativement, si vous êtes `root`, vous pouvez exécuter:
export KUBECONFIG=/etc/kubernetes/admin.conf
```
-Faites un enregistrement du retour de la commande `kubeadm join` que` kubeadm init` génère. Vous avez
+Faites un enregistrement du retour de la commande `kubeadm join` que `kubeadm init` génère. Vous avez
besoin de cette commande pour [joindre des noeuds à votre cluster](#join-nodes).
Le jeton est utilisé pour l'authentification mutuelle entre le master et les nœuds qui veulent le rejoindre.
@@ -284,7 +284,7 @@ car cela pourrait entraîner des problèmes.
Si vous constatez une collision entre le réseau de pod de votre plug-in de réseau et certains
de vos réseaux hôtes,
vous devriez penser à un remplacement de CIDR approprié et l'utiliser lors de `kubeadm init` avec
-` --pod-network-cidr` et en remplacement du YAML de votre plugin réseau.
+ `--pod-network-cidr` et en remplacement du YAML de votre plugin réseau.
Vous pouvez installer un add-on réseau de pod avec la commande suivante:
```bash
@@ -304,8 +304,8 @@ Pour plus d'informations sur l'utilisation de Calico, voir
[Installation de Calico pour les netpols ( network policies ) et le réseau](https://docs.projectcalico.org/latest/getting-started/kubernetes/installation/calico), ainsi que d'autres resources liées à ce sujet.
Pour que Calico fonctionne correctement, vous devez passer `--pod-network-cidr = 192.168.0.0 / 16`
-à` kubeadm init` ou mettre à jour le fichier `calico.yml` pour qu'il corresponde à votre réseau de Pod.
-Notez que Calico fonctionne uniquement sur `amd64`,` arm64`, `ppc64le` et` s390x`.
+à `kubeadm init` ou mettre à jour le fichier `calico.yml` pour qu'il corresponde à votre réseau de Pod.
+Notez que Calico fonctionne uniquement sur `amd64`, `arm64`, `ppc64le` et `s390x`.
```shell
kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
@@ -317,7 +317,7 @@ Canal utilise Calico pour les netpols et Flannel pour la mise en réseau. Report
documentation Calico pour obtenir le [guide de démarrage officiel](https://docs.projectcalico.org/latest/getting-started/kubernetes/installation/flannel).
Pour que Canal fonctionne correctement, `--pod-network-cidr = 10.244.0.0 / 16` doit être passé à
-` kubeadm init`. Notez que Canal ne fonctionne que sur `amd64`.
+`kubeadm init`. Notez que Canal ne fonctionne que sur `amd64`.
```shell
kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/canal.yaml
@@ -353,14 +353,14 @@ cilium-drxkl 1/1 Running 0 18m
{{% /tab %}}
{{% tab name="Flannel" %}}
-Pour que `flannel` fonctionne correctement, vous devez passer` --pod-network-cidr = 10.244.0.0 / 16` à `kubeadm init`.
+Pour que `flannel` fonctionne correctement, vous devez passer `--pod-network-cidr = 10.244.0.0 / 16` à `kubeadm init`.
Paramétrez `/proc/sys/net/bridge/bridge-nf-call-iptables` à «1» en exécutant
-` sysctl net.bridge.bridge-nf-call-iptables = 1`
+ `sysctl net.bridge.bridge-nf-call-iptables = 1`
passez le trafic IPv4 bridged à iptables. Ceci est nécessaire pour que certains plugins CNI
fonctionnent, pour plus d'informations
allez voir [ici](/docs/concepts/cluster-administration/network-plugins/#network-plugin-requirements).
-Notez que `flannel` fonctionne sur` amd64`, `arm`,` arm64`, `ppc64le` et` s390x` sous Linux.
+Notez que `flannel` fonctionne sur `amd64`, `arm`, `arm64`, `ppc64le` et `s390x` sous Linux.
Windows (`amd64`) est annoncé comme supporté dans la v0.11.0 mais son utilisation n’est pas
documentée.
@@ -378,7 +378,7 @@ Ceci est nécessaire pour que certains plugins CNI fonctionnent, pour plus d'inf
s'il vous plaît allez voir [ici](/docs/concepts/cluster-administration/network-plugins/#network-plugin-requirements).
Kube-router s'appuie sur kube-controller-manager pour allouer le pod CIDR aux nœuds. Par conséquent,
-utilisez `kubeadm init` avec l'option` --pod-network-cidr`.
+utilisez `kubeadm init` avec l'option `--pod-network-cidr`.
Kube-router fournit un réseau de pod, une stratégie réseau et un proxy de service basé sur un
IP Virtual Server (IPVS) / Linux Virtual Server (LVS) hautement performant.
@@ -388,7 +388,7 @@ veuillez consulter le [guide d'installation](https://github.com/cloudnativelabs/
{{% /tab %}}
{{% tab name="Romana" %}}
-Paramétrez `/proc/sys/net/bridge/bridge-nf-call-iptables` à` 1` en exécutant
+Paramétrez `/proc/sys/net/bridge/bridge-nf-call-iptables` à `1` en exécutant
`sysctl net.bridge.bridge-nf-call-iptables = 1`
Cette commande indiquera de passer le trafic IPv4 bridged à iptables. Ceci est nécessaire pour que certains plugins CNI fonctionnent,
pour plus d'informations
@@ -404,13 +404,13 @@ kubectl apply -f https://raw.githubusercontent.com/romana/romana/master/containe
{{% /tab %}}
{{% tab name="Weave Net" %}}
-Paramétrez `/proc/sys/net/bridge/bridge-nf-call-iptables` à «1» en exécutant` sysctl net.bridge.bridge-nf-call-iptables = 1`
+Paramétrez `/proc/sys/net/bridge/bridge-nf-call-iptables` à «1» en exécutant `sysctl net.bridge.bridge-nf-call-iptables = 1`
Cette commande indiquera de passer le trafic IPv4 bridged à iptables. Ceci est nécessaire pour que certains plugins CNI fonctionnent, pour plus d'informations
s'il vous plaît allez voir [ici](/docs/concepts/cluster-administration/network-plugins/#network-plugin-requirements).
Le guide de configuration officiel de Weave Net est [ici](https://www.weave.works/docs/net/latest/kube-addon/).
-Weave Net fonctionne sur `amd64`,` arm`, `arm64` et` ppc64le` sans aucune action supplémentaire requise.
+Weave Net fonctionne sur `amd64`, `arm`, `arm64` et `ppc64le` sans aucune action supplémentaire requise.
Weave Net paramètre le mode hairpin par défaut. Cela permet aux pods de se connecter via leur adresse IP de service
s'ils ne connaissent pas leur Pod IP.
@@ -597,7 +597,7 @@ Si vous souhaitez réinitialiser les tables IPVS, vous devez exécuter la comman
ipvsadm -C
```
-Si vous souhaitez recommencer Il suffit de lancer `kubeadm init` ou` kubeadm join` avec les
+Si vous souhaitez recommencer Il suffit de lancer `kubeadm init` ou `kubeadm join` avec les
arguments appropriés.
Plus d'options et d'informations sur la
[`commande de réinitialisation de kubeadm`](/docs/reference/setup-tools/kubeadm/kubeadm-reset/).
diff --git a/content/fr/docs/setup/production-environment/tools/kubeadm/ha-topology.md b/content/fr/docs/setup/production-environment/tools/kubeadm/ha-topology.md
index fbc9d14c0c..d2e8d9fde8 100644
--- a/content/fr/docs/setup/production-environment/tools/kubeadm/ha-topology.md
+++ b/content/fr/docs/setup/production-environment/tools/kubeadm/ha-topology.md
@@ -27,7 +27,7 @@ Un cluster HA empilé est une [topologie réseau](https://fr.wikipedia.org/wiki/
où le cluster de stockage de données distribuées est fourni par etcd et est superposé au
cluster formé par les noeuds gérés par kubeadm qui exécute les composants du control plane.
-Chaque nœud du control plane exécute une instance de `kube-apiserver`,` kube-scheduler` et
+Chaque nœud du control plane exécute une instance de `kube-apiserver`, `kube-scheduler` et
`kube-controller-manager`.
Le `kube-apiserver` est exposé aux nœuds à l'aide d'un loadbalancer.
@@ -47,7 +47,7 @@ Par conséquent, vous devez exécuter au moins trois nœuds de control plane emp
en haute disponibilité.
C'est la topologie par défaut dans kubeadm. Un membre etcd local est créé automatiquement
-sur les noeuds du control plane en utilisant `kubeadm init` et` kubeadm join --experimental-control-plane`.
+sur les noeuds du control plane en utilisant `kubeadm init` et `kubeadm join --experimental-control-plane`.
Schéma de la [Topologie etcd empilée](/images/kubeadm/kubeadm-ha-topology-stacked-etcd.svg)
@@ -59,7 +59,7 @@ distribuées fourni par etcd est externe au cluster formé par les nœuds qui ex
du control plane.
Comme la topologie etcd empilée, chaque nœud du control plane d'une topologie etcd externe exécute
-une instance de `kube-apiserver`,` kube-scheduler` et `kube-controller-manager`. Et le `kube-apiserver`
+une instance de `kube-apiserver`, `kube-scheduler` et `kube-controller-manager`. Et le `kube-apiserver`
est exposé aux nœuds workers à l’aide d’un load-balancer. Cependant, les membres etcd s'exécutent sur
des hôtes distincts et chaque hôte etcd communique avec le `kube-apiserver` de chaque nœud du control plane.
diff --git a/content/fr/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md b/content/fr/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md
index 20b44143e2..a45ed1f7db 100644
--- a/content/fr/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md
+++ b/content/fr/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md
@@ -250,7 +250,7 @@ ARCH="amd64"
curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz
```
-Installez `kubeadm`,` kubelet`, `kubectl` et ajoutez un service systemd` kubelet`:
+Installez `kubeadm`, `kubelet`, `kubectl` et ajoutez un service systemd `kubelet`:
RELEASE_VERSION="v0.6.0"
diff --git a/content/fr/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md b/content/fr/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md
index 05f4839c05..9317f482f9 100644
--- a/content/fr/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md
+++ b/content/fr/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md
@@ -38,7 +38,7 @@ utilisant kubeadm, plutôt que de gérer manuellement la configuration des kubel
### Propagation de la configuration niveau cluster à chaque kubelet {#propagating-cluster-level-configuration-to-each-kubelet}
Vous pouvez fournir à la kubelet les valeurs par défaut à utiliser par les commandes `kubeadm init` et
-` kubeadm join`. Des exemples intéressants incluent l’utilisation d’un runtime CRI différent ou la
+ `kubeadm join`. Des exemples intéressants incluent l’utilisation d’un runtime CRI différent ou la
définition du sous-réseau par défaut utilisé par les services.
Si vous souhaitez que vos services utilisent le sous-réseau `10.96.0.0 / 12` par défaut pour les
diff --git a/content/fr/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm.md b/content/fr/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm.md
index bf9b0d69cb..79ead91bb3 100644
--- a/content/fr/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm.md
+++ b/content/fr/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm.md
@@ -102,26 +102,26 @@ L'inspection des journaux de Docker peut également être utile:
journalctl -ul docker
```
-## Pods dans l'état `RunContainerError`,` CrashLoopBackOff` ou `Error`
+## Pods dans l'état `RunContainerError`, `CrashLoopBackOff` ou `Error`
Juste après `kubeadm init`, il ne devrait pas y avoir de pods dans ces états.
- S'il existe des pods dans l'un de ces états _juste après_ `kubeadm init`, veuillez ouvrir un
issue dans le dépôt de Kubeadm. `coredns` (ou` kube-dns`) devrait être dans l'état `Pending`
jusqu'à ce que vous ayez déployé la solution réseau.
-- Si vous voyez des pods dans les états `RunContainerError`,` CrashLoopBackOff` ou `Error`
+- Si vous voyez des pods dans les états `RunContainerError`, `CrashLoopBackOff` ou `Error`
après le déploiement de la solution réseau et que rien ne se passe pour `coredns` (ou` kube-dns`),
il est très probable que la solution Pod Network que vous avez installée est en quelque sorte
endommagée. Vous devrez peut-être lui accorder plus de privilèges RBAC ou utiliser une version
plus récente. S'il vous plaît créez une issue dans le dépôt du fournisseur de réseau de Pod.
- Si vous installez une version de Docker antérieure à 1.12.1, supprimez l'option `MountFlags = slave`
- lors du démarrage de `dockerd` avec` systemd` et redémarrez `docker`. Vous pouvez voir les options
+ lors du démarrage de `dockerd` avec `systemd` et redémarrez `docker`. Vous pouvez voir les options
de montage dans `/usr/lib/systemd/system/docker.service`.
Les options de montage peuvent interférer avec les volumes montés par Kubernetes et mettre les
- pods dans l'état`CrashLoopBackOff`. L'erreur se produit lorsque Kubernetes ne trouve pas les fichiers
+ pods dans l'état `CrashLoopBackOff`. L'erreur se produit lorsque Kubernetes ne trouve pas les fichiers
`var/run/secrets/kubernetes.io/serviceaccount`.
-## `coredns` (ou` kube-dns`) est bloqué dans l'état `Pending`
+## `coredns` (ou `kube-dns`) est bloqué dans l'état `Pending`
Ceci est **prévu** et fait partie du design. kubeadm est agnostique vis-à-vis du fournisseur
de réseau, ainsi l'administrateur devrait [installer la solution réseau pod](/docs/concepts/cluster-administration/addons/)
@@ -132,7 +132,7 @@ D'où l' état `Pending` avant la mise en place du réseau.
Les fonctionnalités `HostPort` et `HostIP` sont disponibles en fonction de votre fournisseur
de réseau de pod. Veuillez contacter l’auteur de la solution de réseau de Pod pour savoir si
-Les fonctionnalités `HostPort` et` HostIP` sont disponibles.
+Les fonctionnalités `HostPort` et `HostIP` sont disponibles.
Les fournisseurs de CNI Calico, Canal, et Flannel supportent HostPort.
@@ -151,7 +151,7 @@ Si votre fournisseur de réseau ne prend pas en charge le plug-in portmap CNI, v
- Si vous utilisez VirtualBox (directement ou via Vagrant), vous devrez vous assurez que
`hostname -i` renvoie une adresse IP routable. Par défaut la première interface est connectée
-à un réseau d’`hôte uniquement` non routable. En contournement vous pouvez modifier`/etc/hosts`,
+à un réseau d’ `hôte uniquement` non routable. En contournement vous pouvez modifier `/etc/hosts`,
jetez un œil à ce [Vagrantfile](https://github.com/errordeveloper/k8s-playground/blob/22dd39dfc06111235620e6c4404a96ae146f26fd/Vagrantfile#L11) par exemple.
## Erreurs de certificats TLS
@@ -198,7 +198,7 @@ pour que la deuxième interface soit choisie.
## IP non publique utilisée pour les conteneurs
-Dans certaines situations, les commandes `kubectl logs` et` kubectl run` peuvent
+Dans certaines situations, les commandes `kubectl logs` et `kubectl run` peuvent
renvoyer les erreurs suivantes dans un cluster par ailleurs fonctionnel:
```sh
@@ -211,9 +211,9 @@ avec d’autres adresses IP même sous-réseau, éventuellement à cause d'une p
par le fournisseur de la machine.
- Digital Ocean attribue une adresse IP publique à `eth0` ainsi qu’une adresse privée à
utiliser en interne comme IP d'ancrage pour leur fonction IP flottante, mais `kubelet` choisira cette
-dernière comme` InternalIP` du noeud au lieu du public.
+dernière comme `InternalIP` du noeud au lieu du public.
- Utilisez `ip addr show` pour verifier ce scénario au lieu de` ifconfig` car `ifconfig` n'affichera pas
+ Utilisez `ip addr show` pour verifier ce scénario au lieu de `ifconfig` car `ifconfig` n'affichera pas
l'alias de l'adresse IP incriminée. Sinon, une API spécifique à Digital Ocean
permet de rechercher l'adresse IP d'ancrage à partir du droplet:
@@ -253,7 +253,7 @@ Pod de CoreDNS déployé dans Kubernetes détecte une boucle. [Un certain nombre
sont disponibles pour éviter que Kubernetes ne tente de redémarrer le pod CoreDNS chaque fois que CoreDNS détecte une boucle et s'arrête.
{{< warning >}}
-Désactiver SELinux ou paramètrer `allowPrivilegeEscalation` sur` true` peut compromettre
+Désactiver SELinux ou paramètrer `allowPrivilegeEscalation` sur `true` peut compromettre
la sécurité de votre cluster.
{{< /warning >}}
diff --git a/content/fr/docs/tasks/configure-pod-container/assign-cpu-resource.md b/content/fr/docs/tasks/configure-pod-container/assign-cpu-resource.md
index 284024b425..297cbd700e 100644
--- a/content/fr/docs/tasks/configure-pod-container/assign-cpu-resource.md
+++ b/content/fr/docs/tasks/configure-pod-container/assign-cpu-resource.md
@@ -212,7 +212,7 @@ vous pouvez utiliser efficacement les ressources CPU disponibles sur les Nœuds
En gardant une demande faible de CPU de pod, vous donnez au Pod une bonne chance d'être ordonnancé.
En ayant une limite CPU supérieure à la demande de CPU, vous accomplissez deux choses :
-* Le Pod peut avoir des pics d'activité où il utilise les ressources CPU qui se sont déjà disponible.
+* Le Pod peut avoir des pics d'activité où il utilise les ressources CPU qui sont déjà disponibles.
* La quantité de ressources CPU qu'un Pod peut utiliser pendant une pic d'activité est limitée à une quantité raisonnable.
## Nettoyage
diff --git a/content/fr/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md b/content/fr/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
index 5902ca926d..2aa904144f 100644
--- a/content/fr/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
+++ b/content/fr/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
@@ -37,7 +37,7 @@ Le champ `periodSeconds` spécifie que le Kubelet doit effectuer un check de liv
Au démarrage, le conteneur exécute cette commande :
```shell
-/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
+/bin/sh -c "touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600"
```
Pour les 30 premières secondes de la vie du conteneur, il y a un fichier `/tmp/healthy`.
diff --git a/content/fr/docs/tasks/configure-pod-container/configure-pod-initialization.md b/content/fr/docs/tasks/configure-pod-container/configure-pod-initialization.md
index 6d1ca96b31..eeb33a0d4b 100644
--- a/content/fr/docs/tasks/configure-pod-container/configure-pod-initialization.md
+++ b/content/fr/docs/tasks/configure-pod-container/configure-pod-initialization.md
@@ -81,7 +81,7 @@ La sortie montre que nginx sert la page web qui a été écrite par le conteneur
[communiquer entre conteneurs fonctionnant dans le même Pod](/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/).
* Pour en savoir plus sur [Init Conteneurs](/docs/concepts/workloads/pods/init-containers/).
* Pour en savoir plus sur [Volumes](/docs/concepts/storage/volumes/).
-* Pour en savoir plus sur [Débogage des Init Conteneurs](/docs/tasks/debug-application-cluster/debug-init-containers/)
+* Pour en savoir plus sur [Débogage des Init Conteneurs](/docs/tasks/debug/debug-application/debug-init-containers/)
diff --git a/content/fr/examples/pods/probe/exec-liveness.yaml b/content/fr/examples/pods/probe/exec-liveness.yaml
index 07bf75f85c..6a9c9b3213 100644
--- a/content/fr/examples/pods/probe/exec-liveness.yaml
+++ b/content/fr/examples/pods/probe/exec-liveness.yaml
@@ -11,7 +11,7 @@ spec:
args:
- /bin/sh
- -c
- - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
+ - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
diff --git a/content/fr/includes/default-storage-class-prereqs.md b/content/fr/includes/default-storage-class-prereqs.md
index c0a21bec17..eefd9fcf90 100644
--- a/content/fr/includes/default-storage-class-prereqs.md
+++ b/content/fr/includes/default-storage-class-prereqs.md
@@ -1 +1 @@
-Vous devez disposer soit d'un fournisseur PersistentVolume dynamique avec une valeur par défaut [StorageClass](/docs/concepts/storage/storage-classes/), soit préparer [un PersistentVolumes statique](/docs/user-guide/persistent-volumes/#provisioning) pour satisfaire les [PersistentVolumeClaims](/docs/user-guide/persistent-volumes/#persistentvolumeclaims) utilisés ici.
+Vous devez disposer soit d'un fournisseur PersistentVolume dynamique avec une valeur par défaut [StorageClass](/docs/concepts/storage/storage-classes/), soit préparer [un PersistentVolumes statique](/docs/concepts/storage/persistent-volumes/#provisioning) pour satisfaire les [PersistentVolumeClaims](/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) utilisés ici.
diff --git a/content/id/docs/concepts/cluster-administration/certificates.md b/content/id/docs/concepts/cluster-administration/certificates.md
index ee1f91cbeb..8bd5895475 100644
--- a/content/id/docs/concepts/cluster-administration/certificates.md
+++ b/content/id/docs/concepts/cluster-administration/certificates.md
@@ -30,7 +30,7 @@ secara manual melalui `easyrsa`, `openssl` atau `cfssl`.
1. Hasilkan sertifikat dan kunci _server_.
Argumen `--subject-alt-name` digunakan untuk mengatur alamat IP dan nama DNS yang dapat diakses
oleh _server_ API. `MASTER_CLUSTER_IP` biasanya merupakan IP pertama dari CIDR _service cluster_
- yang diset dengan argumen` --service-cluster-ip-range` untuk _server_ API dan
+ yang diset dengan argumen `--service-cluster-ip-range` untuk _server_ API dan
komponen manajer pengontrol. Argumen `--days` digunakan untuk mengatur jumlah hari
masa berlaku sertifikat.
Sampel di bawah ini juga mengasumsikan bahwa kamu menggunakan `cluster.local` sebagai nama
diff --git a/content/id/docs/concepts/cluster-administration/flow-control.md b/content/id/docs/concepts/cluster-administration/flow-control.md
index 4f6036c0ca..048f6cbd55 100644
--- a/content/id/docs/concepts/cluster-administration/flow-control.md
+++ b/content/id/docs/concepts/cluster-administration/flow-control.md
@@ -263,7 +263,7 @@ perlu memastikan bahwa tidak ada dua FlowSchema yang memiliki `matchingPrecedenc
Sebuah FlowSchema dianggap cocok dengan sebuah permintaan yang diberikan jika setidaknya salah satu dari `rules` nya
ada yang cocok. Sebuah aturan (_rule_) cocok jika setidaknya satu dari `subject` *dan*
-ada salah satu dari `resourceRules` atau` nonResourceRules` (tergantung dari apakah permintaan
+ada salah satu dari `resourceRules` atau `nonResourceRules` (tergantung dari apakah permintaan
yang masuk adalah untuk URL sumber daya atau non-sumber daya) yang cocok dengan permintaan tersebut.
Untuk bagian `name` dalam subjek, dan bagian `verbs`, `apiGroups`, `resources`,
diff --git a/content/id/docs/concepts/cluster-administration/networking.md b/content/id/docs/concepts/cluster-administration/networking.md
index 114f960d49..b300c29e98 100644
--- a/content/id/docs/concepts/cluster-administration/networking.md
+++ b/content/id/docs/concepts/cluster-administration/networking.md
@@ -139,7 +139,7 @@ DOCKER_OPTS="--bridge=cbr0 --iptables=false --ip-masq=false"
Jembatan ini dibuat oleh Kubelet (dikontrol oleh _flag_ `--network-plugin=kubenet`) sesuai dengan `.spec.podCIDR` yang dimiliki oleh Node.
-Docker sekarang akan mengalokasikan IP dari blok `cbr-cidr`. Kontainer dapat menjangkau satu sama lain dan Node di atas jembatan` cbr0`. IP-IP tersebut semuanya dapat dirutekan dalam jaringan proyek GCE.
+Docker sekarang akan mengalokasikan IP dari blok `cbr-cidr`. Kontainer dapat menjangkau satu sama lain dan Node di atas jembatan `cbr0`. IP-IP tersebut semuanya dapat dirutekan dalam jaringan proyek GCE.
GCE sendiri tidak tahu apa-apa tentang IP ini, jadi tidak akan NAT untuk lalu lintas internet keluar. Untuk mencapai itu aturan iptables digunakan untuk menyamar (alias SNAT - untuk membuatnya seolah-olah paket berasal dari lalu lintas `Node` itu sendiri) yang terikat untuk IP di luar jaringan proyek GCE (10.0.0.0/8).
diff --git a/content/id/docs/concepts/cluster-administration/system-metrics.md b/content/id/docs/concepts/cluster-administration/system-metrics.md
index f731ccfd77..0c4058c710 100644
--- a/content/id/docs/concepts/cluster-administration/system-metrics.md
+++ b/content/id/docs/concepts/cluster-administration/system-metrics.md
@@ -99,7 +99,7 @@ Opsi `show-hidden-metrics-for-version` menerima input versi yang kamu inginkan u
Opsi tersebut hanya dapat menerima input versi minor sebelumnya sebagai nilai. Semua metrik yang disembunyikan di versi sebelumnya akan dikeluarkan jika admin mengatur versi sebelumnya ke `show-hidden-metrics-for-version`. Versi yang terlalu lama tidak diperbolehkan karena melanggar kebijakan untuk metrik usang.
-Ambil metrik `A` sebagai contoh, di sini diasumsikan bahwa` A` sudah menjadi usang di versi 1.n. Berdasarkan kebijakan metrik usang, kita dapat mencapai kesimpulan berikut:
+Ambil metrik `A` sebagai contoh, di sini diasumsikan bahwa `A` sudah menjadi usang di versi 1.n. Berdasarkan kebijakan metrik usang, kita dapat mencapai kesimpulan berikut:
* Pada rilis `1.n`, metrik menjadi usang, dan dapat dikeluarkan secara bawaan.
* Pada rilis `1.n+1`, metrik disembunyikan secara bawaan dan dapat dikeluarkan dengan baris perintah `show-hidden-metrics-for-version=1.n`.
@@ -155,7 +155,7 @@ kube-scheduler mengidentifikasi [permintaan dan limit](/docs/concepts/configurat
- nama dari sumber daya (misalnya, `cpu`)
- satuan dari sumber daya jika diketahui (misalnya, `cores`)
-Setelah pod selesai (memiliki `restartPolicy` `Never` atau `OnFailure` dan berada dalam fase pod `Succeeded` atau `Failed`, atau telah dihapus dan semua kontainer dalam keadaan Terminated) deret metrik tidak lagi dilaporkan karena penjadwal sekarang sudah dibebaskan untuk menjadwalkan pod lain untuk dijalankan. Metrik yang dibahas pada bagian ini dikenal sebagai `kube_pod_resource_request` dan` kube_pod_resource_limit`.
+Setelah pod selesai (memiliki `restartPolicy` `Never` atau `OnFailure` dan berada dalam fase pod `Succeeded` atau `Failed`, atau telah dihapus dan semua kontainer dalam keadaan Terminated) deret metrik tidak lagi dilaporkan karena penjadwal sekarang sudah dibebaskan untuk menjadwalkan pod lain untuk dijalankan. Metrik yang dibahas pada bagian ini dikenal sebagai `kube_pod_resource_request` dan `kube_pod_resource_limit`.
Metrik diekspos melalui _endpoint_ HTTP `/metrics/resources` dan memerlukan otorisasi yang sama seperti endpoint `/metrics`
pada penjadwal. Kamu harus menggunakan opsi `--show-hidden-metrics-for-version=1.20` untuk mengekspos metrik-metrik stabilitas alfa ini.
diff --git a/content/id/docs/concepts/configuration/overview.md b/content/id/docs/concepts/configuration/overview.md
index cb8f460381..974d5b4a19 100644
--- a/content/id/docs/concepts/configuration/overview.md
+++ b/content/id/docs/concepts/configuration/overview.md
@@ -46,25 +46,25 @@ Dokumentasi ini terbuka. Jika Anda menemukan sesuatu yang tidak ada dalam daftar
FOO_SERVICE_PORT=
```
- *Ini menunjukan persyaratan pemesanan * - `Service` apa pun yang ingin diakses oleh` Pod` harus dibuat sebelum `Pod` itu sendiri, atau environment variabel tidak akan diisi. DNS tidak memiliki batasan ini.
+ *Ini menunjukan persyaratan pemesanan * - `Service` apa pun yang ingin diakses oleh `Pod` harus dibuat sebelum `Pod` itu sendiri, atau environment variabel tidak akan diisi. DNS tidak memiliki batasan ini.
- Opsional (meskipun sangat disarankan) [cluster add-on](/id/docs/concepts/cluster-administration/addons/) adalah server DNS.
Server DNS melihat API Kubernetes untuk `Service` baru dan membuat satu set catatan DNS untuk masing-masing. Jika DNS telah diaktifkan di seluruh cluster maka semua `Pods` harus dapat melakukan resolusi nama`Service` secara otomatis.
-- Jangan tentukan `hostPort` untuk Pod kecuali jika benar-benar diperlukan. Ketika Anda bind Pod ke `hostPort`, hal itu membatasi jumlah tempat Pod dapat dijadwalkan, karena setiap kombinasi <` hostIP`, `hostPort`,` protokol`> harus unik. Jika Anda tidak menentukan `hostIP` dan` protokol` secara eksplisit, Kubernetes akan menggunakan `0.0.0.0` sebagai` hostIP` dan `TCP` sebagai default` protokol`.
+- Jangan tentukan `hostPort` untuk Pod kecuali jika benar-benar diperlukan. Ketika Anda bind Pod ke `hostPort`, hal itu membatasi jumlah tempat Pod dapat dijadwalkan, karena setiap kombinasi <`hostIP`, `hostPort`, `protokol`> harus unik. Jika Anda tidak menentukan `hostIP` dan `protokol` secara eksplisit, Kubernetes akan menggunakan `0.0.0.0` sebagai `hostIP` dan `TCP` sebagai default `protokol`.
Jika kamu hanya perlu akses ke port untuk keperluan debugging, Anda bisa menggunakan [apiserver proxy](/id/docs/tasks/access-application-cluster/access-cluster/#manually-constructing-apiserver-proxy-urls) atau [`kubectl port-forward`](/id/docs/tasks/access-application-cluster/port-forward-access-application-cluster/).
Jika Anda secara eksplisit perlu mengekspos port Pod pada node, pertimbangkan untuk menggunakan [NodePort](/id/docs/concepts/services-networking/service/#nodeport) Service sebelum beralih ke `hostPort`.
-- Hindari menggunakan `hostNetwork`, untuk alasan yang sama seperti` hostPort`.
+- Hindari menggunakan `hostNetwork`, untuk alasan yang sama seperti `hostPort`.
- Gunakan [headless Services](/id/docs/concepts/services-networking/service/#headless-
-services) (yang memiliki `ClusterIP` dari` None`) untuk Service discovery yang mudah ketika Anda tidak membutuhkan `kube-proxy` load balancing.
+services) (yang memiliki `ClusterIP` dari `None`) untuk Service discovery yang mudah ketika Anda tidak membutuhkan `kube-proxy` load balancing.
## Menggunakan label
-- Deklarasi dan gunakan [labels] (/id/docs/concepts/overview/working-with-objects/labels/) untuk identifikasi __semantic attributes__ aplikasi atau Deployment kamu, seperti `{ app: myapp, tier: frontend, phase: test, deployment: v3 }`. Kamu dapat menggunakan label ini untuk memilih Pod yang sesuai untuk sumber daya lainnya; misalnya, Service yang memilih semua `tier: frontend` Pods, atau semua komponen` phase: test` dari `app: myapp`. Lihat [guestbook](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/guestbook/) aplikasi untuk contoh-contoh pendekatan ini.
+- Deklarasi dan gunakan [labels] (/id/docs/concepts/overview/working-with-objects/labels/) untuk identifikasi __semantic attributes__ aplikasi atau Deployment kamu, seperti `{ app: myapp, tier: frontend, phase: test, deployment: v3 }`. Kamu dapat menggunakan label ini untuk memilih Pod yang sesuai untuk sumber daya lainnya; misalnya, Service yang memilih semua `tier: frontend` Pods, atau semua komponen `phase: test` dari `app: myapp`. Lihat [guestbook](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/guestbook/) aplikasi untuk contoh-contoh pendekatan ini.
Service dapat dibuat untuk menjangkau beberapa Penyebaran dengan menghilangkan label khusus rilis dari pemilihnya. [Deployments](/id/docs/concepts/workloads/controllers/deployment/) membuatnya mudah untuk memperbarui Service yang sedang berjalan tanpa downtime.
@@ -103,11 +103,11 @@ Semantik caching dari penyedia gambar yang mendasarinya membuat bahkan `imagePul
## Menggunakan kubectl
-- Gunakan `kubectl apply -f `. Ini mencari konfigurasi Kubernetes di semua file `.yaml`,` .yml`, dan `.json` di` `dan meneruskannya ke` apply`.
+- Gunakan `kubectl apply -f `. Ini mencari konfigurasi Kubernetes di semua file `.yaml`, `.yml`, dan `.json` di `` dan meneruskannya ke `apply`.
-- Gunakan label selector untuk operasi `get` dan` delete` alih-alih nama objek tertentu. Lihat bagian di [label selectors](/id/docs/concepts/overview/working-with-objects/labels/#label-selectors) dan [using labels effectively](/id/docs/concepts/cluster-administration/manage-deployment/#using-labels-effectively).
+- Gunakan label selector untuk operasi `get` dan `delete` alih-alih nama objek tertentu. Lihat bagian di [label selectors](/id/docs/concepts/overview/working-with-objects/labels/#label-selectors) dan [using labels effectively](/id/docs/concepts/cluster-administration/manage-deployment/#using-labels-effectively).
-- Gunakan `kubectl run` dan` kubectl expose` untuk dengan cepat membuat Deployment dan Service single-container. Lihat [Use a Service to Access an Application in a Cluster](/docs/tasks/access-application-cluster/service-access-application-cluster/) untuk Contoh.
+- Gunakan `kubectl run` dan `kubectl expose` untuk dengan cepat membuat Deployment dan Service single-container. Lihat [Use a Service to Access an Application in a Cluster](/docs/tasks/access-application-cluster/service-access-application-cluster/) untuk Contoh.
diff --git a/content/id/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md b/content/id/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md
index f54e285549..1c3bb469ae 100644
--- a/content/id/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md
+++ b/content/id/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md
@@ -28,7 +28,7 @@ Kubelet memiliki _plugin_ jaringan bawaan tunggal, dan jaringan bawaan umum untu
## Persyaratan _Plugin_ Jaringan
-Selain menyediakan [antarmuka `NetworkPlugin`](https://github.com/kubernetes/kubernetes/tree/{{< param "fullversion" >}}/pkg/kubelet/dockershim/network/plugins.go) untuk mengonfigurasi dan membersihkan jaringan Pod, _plugin_ ini mungkin juga memerlukan dukungan khusus untuk kube-proxy. Proksi _iptables_ jelas tergantung pada _iptables_, dan _plugin_ ini mungkin perlu memastikan bahwa lalu lintas kontainer tersedia untuk _iptables_. Misalnya, jika plugin menghubungkan kontainer ke _bridge_ Linux, _plugin_ harus mengatur nilai sysctl `net/bridge/bridge-nf-call-iptables` menjadi ` 1` untuk memastikan bahwa proksi _iptables_ berfungsi dengan benar. Jika _plugin_ ini tidak menggunakan _bridge_ Linux (melainkan sesuatu seperti Open vSwitch atau mekanisme lainnya), _plugin_ ini harus memastikan lalu lintas kontainer dialihkan secara tepat untuk proksi.
+Selain menyediakan [antarmuka `NetworkPlugin`](https://github.com/kubernetes/kubernetes/tree/{{< param "fullversion" >}}/pkg/kubelet/dockershim/network/plugins.go) untuk mengonfigurasi dan membersihkan jaringan Pod, _plugin_ ini mungkin juga memerlukan dukungan khusus untuk kube-proxy. Proksi _iptables_ jelas tergantung pada _iptables_, dan _plugin_ ini mungkin perlu memastikan bahwa lalu lintas kontainer tersedia untuk _iptables_. Misalnya, jika plugin menghubungkan kontainer ke _bridge_ Linux, _plugin_ harus mengatur nilai sysctl `net/bridge/bridge-nf-call-iptables` menjadi `1` untuk memastikan bahwa proksi _iptables_ berfungsi dengan benar. Jika _plugin_ ini tidak menggunakan _bridge_ Linux (melainkan sesuatu seperti Open vSwitch atau mekanisme lainnya), _plugin_ ini harus memastikan lalu lintas kontainer dialihkan secara tepat untuk proksi.
Secara bawaan jika tidak ada _plugin_ jaringan Kubelet yang ditentukan, _plugin_ `noop` digunakan, yang menetapkan `net/bridge/bridge-nf-call-iptables=1` untuk memastikan konfigurasi sederhana (seperti Docker dengan sebuah _bridge_) bekerja dengan benar dengan proksi _iptables_.
@@ -148,7 +148,7 @@ Opsi ini disediakan untuk _plugin_ jaringan; Saat ini **hanya kubenet yang mendu
## Ringkasan Penggunaan
* `--network-plugin=cni` menetapkan bahwa kita menggunakan _plugin_ jaringan `cni` dengan _binary-binary plugin_ CNI aktual yang terletak di `--cni-bin-dir` (nilai bawaannya `/opt/cni/bin`) dan konfigurasi _plugin_ CNI yang terletak di `--cni-conf-dir` (nilai bawaannya `/etc/cni/net.d`).
-* `--network-plugin=kubenet` menentukan bahwa kita menggunakan _plugin_ jaringan` kubenet` dengan `bridge` CNI dan _plugin-plugin_ `host-local` yang terletak di `/opt/cni/bin` atau `cni-bin-dir`.
+* `--network-plugin=kubenet` menentukan bahwa kita menggunakan _plugin_ jaringan `kubenet` dengan `bridge` CNI dan _plugin-plugin_ `host-local` yang terletak di `/opt/cni/bin` atau `cni-bin-dir`.
* `--network-plugin-mtu=9001` menentukan MTU yang akan digunakan, saat ini hanya digunakan oleh _plugin_ jaringan `kubenet`.
diff --git a/content/id/docs/concepts/scheduling-eviction/assign-pod-node.md b/content/id/docs/concepts/scheduling-eviction/assign-pod-node.md
index f8654f4276..4f0f838db5 100644
--- a/content/id/docs/concepts/scheduling-eviction/assign-pod-node.md
+++ b/content/id/docs/concepts/scheduling-eviction/assign-pod-node.md
@@ -279,7 +279,7 @@ web-server-1287567482-s330j 1/1 Running 0 7m 10.192.3
##### Tidak akan pernah ditempatkan bersamaan dalam node yang sama
-Contoh di atas menggunakan aturan `PodAntiAffinity` dengan` topologyKey: "kubernetes.io/hostname"` untuk melakukan deploy klaster redis sehingga tidak ada dua instance terletak pada hos yang sama.
+Contoh di atas menggunakan aturan `PodAntiAffinity` dengan `topologyKey: "kubernetes.io/hostname"` untuk melakukan deploy klaster redis sehingga tidak ada dua instance terletak pada hos yang sama.
Lihat [tutorial ZooKeeper](/docs/tutorials/stateful-application/zookeeper/#tolerating-node-failure) untuk contoh dari konfigurasi StatefulSet dengan anti-afinitas untuk ketersediaan tinggi, menggunakan teknik yang sama.
Untuk informasi lebih lanjut tentang afinitas/anti-afinitas antar pod, lihat [design doc](https://git.k8s.io/community/contributors/design-proposals/scheduling/podaffinity.md).
diff --git a/content/id/docs/concepts/scheduling-eviction/resource-bin-packing.md b/content/id/docs/concepts/scheduling-eviction/resource-bin-packing.md
index 0f5b92784a..7cf64b6696 100644
--- a/content/id/docs/concepts/scheduling-eviction/resource-bin-packing.md
+++ b/content/id/docs/concepts/scheduling-eviction/resource-bin-packing.md
@@ -28,7 +28,7 @@ permintaan terhadap kapasitas. Hal ini memungkinkan pengguna untuk _bin pack_
sumber daya tambahan dengan menggunakan parameter yang sesuai untuk meningkatkan
pemanfaatan sumber daya yang langka dalam klaster yang besar. Perilaku
`RequestedToCapacityRatioResourceAllocation` dari fungsi prioritas dapat
-dikontrol melalui pilihan konfigurasi yang disebut ` RequestToCapacityRatioArguments`.
+dikontrol melalui pilihan konfigurasi yang disebut `RequestToCapacityRatioArguments`.
Argumen ini terdiri dari dua parameter yaitu `shape` dan `resources`. Shape
memungkinkan pengguna untuk menyempurnakan fungsi menjadi yang paling tidak
diminta atau paling banyak diminta berdasarkan nilai `utilization` dan `score`.
@@ -36,7 +36,7 @@ Sumber daya terdiri dari `name` yang menentukan sumber daya mana yang dipertimba
selama penilaian dan `weight` yang menentukan bobot masing-masing sumber daya.
Di bawah ini adalah contoh konfigurasi yang menetapkan `requestedToCapacityRatioArguments`
-pada perilaku _bin packing_ untuk sumber daya tambahan` intel.com/foo` dan `intel.com/bar`
+pada perilaku _bin packing_ untuk sumber daya tambahan `intel.com/foo` dan `intel.com/bar`
```json
{
diff --git a/content/id/docs/concepts/services-networking/dual-stack.md b/content/id/docs/concepts/services-networking/dual-stack.md
index 6714a00cde..52e892f4f4 100644
--- a/content/id/docs/concepts/services-networking/dual-stack.md
+++ b/content/id/docs/concepts/services-networking/dual-stack.md
@@ -113,7 +113,7 @@ yang dikonfigurasi untuk Service ini.
### Tipe _LoadBalancer_
Penyedia layanan _cloud_ yang mendukung IPv6 untuk pengaturan beban eksternal,
-Mengatur bagian `type` menjadi` LoadBalancer` sebagai tambahan terhadap mengatur bagian
+Mengatur bagian `type` menjadi `LoadBalancer` sebagai tambahan terhadap mengatur bagian
`ipFamily` menjadi `IPv6` menyediakan sebuah _cloud load balancer_ untuk Service kamu.
## Lalu lintas _egress_
diff --git a/content/id/docs/concepts/services-networking/service-topology.md b/content/id/docs/concepts/services-networking/service-topology.md
index 05abffa323..6ad889b995 100644
--- a/content/id/docs/concepts/services-networking/service-topology.md
+++ b/content/id/docs/concepts/services-networking/service-topology.md
@@ -26,7 +26,7 @@ _availability zone_ yang sama.
## Pengantar
-Secara bawaan lalu lintas jaringan yang dikirim ke `ClusterIP` atau` NodePort` dari Service
+Secara bawaan lalu lintas jaringan yang dikirim ke `ClusterIP` atau `NodePort` dari Service
dapat dialihkan ke alamat _backend_ untuk Service tersebut. Sejak Kubernetes 1.7
dimungkinkan untuk merutekan lalu lintas jaringan "eksternal" ke Pod yang berjalan di
Node yang menerima lalu lintas jaringan, tetapi fitur ini tidak didukung untuk `ClusterIP` dari
diff --git a/content/id/docs/concepts/storage/storage-classes.md b/content/id/docs/concepts/storage/storage-classes.md
index 083620d937..e5f3265768 100644
--- a/content/id/docs/concepts/storage/storage-classes.md
+++ b/content/id/docs/concepts/storage/storage-classes.md
@@ -89,7 +89,7 @@ Kamu tidak dibatasi untuk hanya menggunakan _provisioner_ internal yang disediak
pada list yang tersedia (yang memiliki nama dengan prefix "kubernetes.io" dan
didistribusikan bersamaan dengan Kubernetes). Kamu juga dapat menjalankan dan
mendefinisikan _provisioner_ eksternal yang merupakan program independen selama
-program tersebut menerapkan [spesifikasi](https://git.k8s.io/community/contributors/design-proposals/storage/volume-provisioning.md)
+program tersebut menerapkan [spesifikasi](https://github.com/kubernetes/design-proposals-archive/blob/main/storage/volume-provisioning.md)
yang didefinisikan oleh Kubernetes. Penulis dari _provisioner_ eksternal Kubernetes
memiliki kuasa penuh akan tempat dimana kode sumber yang mereka tulis, bagaimana
mekanisme penyediaan (_provisioning_) dilakukan, serta bagaimana hal tersebut dapat dijalankan,
@@ -198,8 +198,8 @@ allowedTopologies:
- matchLabelExpressions:
- key: failure-domain.beta.kubernetes.io/zone
values:
- - us-central1-a
- - us-central1-b
+ - us-central-1a
+ - us-central-1b
```
## Parameter-Parameter
diff --git a/content/id/docs/concepts/workloads/controllers/daemonset.md b/content/id/docs/concepts/workloads/controllers/daemonset.md
index 905a0a193a..ea21a7b268 100644
--- a/content/id/docs/concepts/workloads/controllers/daemonset.md
+++ b/content/id/docs/concepts/workloads/controllers/daemonset.md
@@ -106,7 +106,7 @@ membuat Pod pada semua Node.
### Dijadwalkan oleh _default scheduler_
-{{< feature-state state="stable" for-kubernetes-version="1.17" >}}
+{{< feature-state for_k8s_version="1.17" state="stable" >}}
DaemonSet memastikan bahwa semua Node yang memenuhi syarat menjalankan salinan
Pod. Normalnya, Node yang menjalankan Pod dipilih oleh _scheduler_ Kubernetes.
diff --git a/content/id/docs/concepts/workloads/pods/disruptions.md b/content/id/docs/concepts/workloads/pods/disruptions.md
index 7a09eed3a5..f466bc6300 100644
--- a/content/id/docs/concepts/workloads/pods/disruptions.md
+++ b/content/id/docs/concepts/workloads/pods/disruptions.md
@@ -67,7 +67,7 @@ Kubernetes menawarkan fitur-fitur untuk membantu menjalankan aplikasi-aplikasi d
Pemilik aplikasi dapat membuat objek `PodDisruptionBudget` (PDB) untuk setiap aplikasi. Sebuah PDB membatasi jumlah Pod yang boleh mati secara bersamaan pada aplikasi yang direplikasi dikarenakan disrupsi yang disengaja.
Misalnya, sebuah aplikasi yang bekerja secara _quorum_ mau memastikan bahwa jumlah replika yang berjalan tidak jatuh ke bawah yang dibutuhkan untuk membentuk sebuah _quorum_. Contoh lainnya, sebuah _front-end_ web mungkin perlu memastikan bahwa jumlah replika yang melayani trafik tidak pernah turun ke total persentase yang telah ditentukan.
-Administrator klaster dan penyedia layanan Kubernetes sebaiknya menggunakan alat-alat yang menghormati PDB dengan cara berkomunikasi dengan [Eviction API](/docs/tasks/administer-cluster/safely-drain-node/#the-eviction-api) dari pada menghapus Pod atau Deployment secara langsung. Contohnya adalah perintah `kubectl drain` dan skrip pembaruan Kubernets-on-GCE (`cluster/gce/upgrade.sh`)
+Administrator klaster dan penyedia layanan Kubernetes sebaiknya menggunakan alat-alat yang menghormati PDB dengan cara berkomunikasi dengan [Eviction API](/docs/tasks/administer-cluster/safely-drain-node/#the-eviction-api) dari pada menghapus Pod atau Deployment secara langsung. Contohnya adalah perintah `kubectl drain` dan skrip pembaruan Kubernetes-on-GCE (`cluster/gce/upgrade.sh`)
Saat seorang administrator klaster ingin melakukan _drain_ terhadap sebuah node, ia akan menggunakan perintah `kubectl drain`. Alat tersebut mencoba untuk "mengusir" semua Pod di node tersebut. Permintaan untuk mengusir Pod tersebut mungkin ditolak untuk sementara, dan alat tersebut akan mencoba ulang permintaannya secara periodik hingga semua Pod dihapus, atau hingga batas waktu yang ditentukan telah dicapai.
diff --git a/content/id/docs/contribute/participate/_index.md b/content/id/docs/contribute/participate/_index.md
index 72c561432b..cd47d62309 100644
--- a/content/id/docs/contribute/participate/_index.md
+++ b/content/id/docs/contribute/participate/_index.md
@@ -71,8 +71,8 @@ dua buah [prow _plugin_](https://github.com/kubernetes/test-infra/tree/master/pr
- approve
Kedua _plugin_ menggunakan berkas
-[OWNERS](https://github.com/kubernetes/website/blob/master/OWNERS) dan
-[OWNERS_ALIASES](https://github.com/kubernetes/website/blob/master/OWNERS_ALIASES)
+[OWNERS](https://github.com/kubernetes/website/blob/main/OWNERS) dan
+[OWNERS_ALIASES](https://github.com/kubernetes/website/blob/main/OWNERS_ALIASES)
dalam level teratas dari repositori GitHub `kubernetes/website` untuk mengontrol
bagaimana prow bekerja di dalam repositori.
diff --git a/content/id/docs/reference/access-authn-authz/rbac.md b/content/id/docs/reference/access-authn-authz/rbac.md
index 45be8d9b4f..438b53abf8 100644
--- a/content/id/docs/reference/access-authn-authz/rbac.md
+++ b/content/id/docs/reference/access-authn-authz/rbac.md
@@ -248,7 +248,7 @@ rules:
Kamu juga dapat merujuk ke sumber daya dengan nama untuk permintaan tertentu melalui daftar `resourceNames`.
Ketika nama dicantumkan, permintaan dapat dibatasi untuk setiap objek sumber daya.
-Berikut adalah contoh yang membatasi subjeknya hanya untuk melakukan `get` atau` update` pada sebuah
+Berikut adalah contoh yang membatasi subjeknya hanya untuk melakukan `get` atau `update` pada sebuah
{{< glossary_tooltip term_id="ConfigMap" >}} bernama `my-configmap`:
```yaml
@@ -268,7 +268,7 @@ rules:
```
{{< note >}}
-Kamu tidak dapat membatasi permintaan `create` atau` deletecollection` dengan nama sumber daya. Untuk `create`,
+Kamu tidak dapat membatasi permintaan `create` atau `deletecollection` dengan nama sumber daya. Untuk `create`,
keterbatasan ini dikarenakan nama objek tidak diketahui pada waktu otorisasi.
{{< /note >}}
diff --git a/content/id/docs/reference/glossary/quantity.md b/content/id/docs/reference/glossary/quantity.md
index 7369fc20dc..fc2cd1290e 100644
--- a/content/id/docs/reference/glossary/quantity.md
+++ b/content/id/docs/reference/glossary/quantity.md
@@ -15,7 +15,7 @@ Representasi bilangan bulat dari bilangan kecil atau besar menggunakan sufiks SI
Kuantitas adalah representasi dari bilangan kecil atau besar menggunakan notasi bilangan bulat kompak dengan sufiks SI. Bilangan pecahan direpresentasikan dengan satuan mili, sedangkan bilangan besar direpresentasikan dengan satuan kilo, mega, atau giga.
-Misalnya, angka `1,5` direpresentasikan sebagai` 1500m`, sedangkan angka `1000` dapat direpresentasikan sebagai `1k`, dan `1000000` sebagai `1M`. Kamu juga dapat menentukan sufiks notasi biner; angka 2048 dapat ditulis sebagai `2Ki`.
+Misalnya, angka `1,5` direpresentasikan sebagai `1500m`, sedangkan angka `1000` dapat direpresentasikan sebagai `1k`, dan `1000000` sebagai `1M`. Kamu juga dapat menentukan sufiks notasi biner; angka 2048 dapat ditulis sebagai `2Ki`.
Satuan desimal yang diterima (pangkat 10) adalah `m` (mili), `k` (kilo, sengaja huruf kecil), `M` (mega), `G` (giga), `T` (tera), `P` (peta), `E` (exa).
diff --git a/content/id/docs/reference/setup-tools/kubeadm/_index.md b/content/id/docs/reference/setup-tools/kubeadm/_index.md
index 25fbca1cca..979c9cc1a7 100644
--- a/content/id/docs/reference/setup-tools/kubeadm/_index.md
+++ b/content/id/docs/reference/setup-tools/kubeadm/_index.md
@@ -8,7 +8,7 @@ card:
weight: 40
---
- Kubeadm adalah fitur yang dibuat untuk menyediakan `kubeadm init` dan` kubeadm join` sebagai praktik terbaik dengan "jalur cepat" untuk membuat klaster Kubernetes.
+ Kubeadm adalah fitur yang dibuat untuk menyediakan `kubeadm init` dan `kubeadm join` sebagai praktik terbaik dengan "jalur cepat" untuk membuat klaster Kubernetes.
kubeadm melakukan tindakan yang diperlukan untuk membuat klaster minimum yang layak untuk aktif dan berjalan. Secara desain, ini hanya memperdulikan tentang *bootstrap*, bukan tentang mesin *provisioning*. Demikian pula, dengan instalasi berbagai *addon* atau tambahan yang bagus untuk dimiliki, seperti Dasbor Kubernetes, solusi pemantauan, dan tambahan khusus cloud, tidak termasuk dalam cakupan.
diff --git a/content/id/docs/tasks/access-application-cluster/access-cluster.md b/content/id/docs/tasks/access-application-cluster/access-cluster.md
index 6a575ad8f1..bba413951c 100644
--- a/content/id/docs/tasks/access-application-cluster/access-cluster.md
+++ b/content/id/docs/tasks/access-application-cluster/access-cluster.md
@@ -207,7 +207,7 @@ Dalam banyak kasus, IP Node, IP Pod, dan beberapa IP Service pada sebuah klaster
Kamu memiliki beberapa opsi untuk menghubungi Node, Pod, dan Service dari luar klaster:
- Mengakses Service melalui IP publik.
- - Gunakan Service dengan tipe `NodePort` atau` LoadBalancer` untuk membuat Service dapat dijangkau di luar klaster. Lihat dokumentasi [Service](/docs/user-guide/services) dan perintah [kubectl expose](/docs/reference/generated/kubectl/kubectl-commands/#expose).
+ - Gunakan Service dengan tipe `NodePort` atau `LoadBalancer` untuk membuat Service dapat dijangkau di luar klaster. Lihat dokumentasi [Service](/docs/user-guide/services) dan perintah [kubectl expose](/docs/reference/generated/kubectl/kubectl-commands/#expose).
- Bergantung pada lingkungan klaster kamu, hal ini mungkin hanya mengekspos Service ke jaringan perusahaan kamu, atau mungkin mengeksposnya ke internet. Pikirkan apakah Service yang diekspos aman atau tidak. Apakah layanan di balik Service tersebut melakukan autentikasinya sendiri?
- Tempatkan Pod di belakang Service. Untuk mengakses satu Pod tertentu dari sekumpulan replika, misalnya untuk pengawakutuan (_debugging_), letakkan label unik di Pod dan buat Service baru yang memilih label ini.
- Pada kebanyakan kasus, pengembang aplikasi tidak perlu langsung mengakses Node melalui IP Node mereka.
diff --git a/content/id/docs/tasks/administer-cluster/dns-debugging-resolution.md b/content/id/docs/tasks/administer-cluster/dns-debugging-resolution.md
index aeeeab1001..67b451db52 100644
--- a/content/id/docs/tasks/administer-cluster/dns-debugging-resolution.md
+++ b/content/id/docs/tasks/administer-cluster/dns-debugging-resolution.md
@@ -160,7 +160,7 @@ Nama layanan adalah `kube-dns` baik untuk CoreDNS maupun kube-dns.
{{< /note >}}
Jika kamu telah membuat Service atau seharusnya Service telah dibuat secara bawaan namun ternyata tidak muncul, lihat
-[_debugging_ Service](/docs/tasks/debug-application-cluster/debug-service/) untuk informasi lebih lanjut.
+[_debugging_ Service](/docs/tasks/debug/debug-application/debug-service/) untuk informasi lebih lanjut.
### Apakah endpoint DNS telah ekspos?
@@ -175,7 +175,7 @@ kube-dns 10.180.3.17:53,10.180.3.17:53 1h
```
Jika kamu tidak melihat _endpoint_, lihat bagian _endpoint_ pada dokumentasi
-[_debugging_ Service](/docs/tasks/debug-application-cluster/debug-service/).
+[_debugging_ Service](/docs/tasks/debug/debug-application/debug-service/).
Untuk tambahan contoh Kubernetes DNS, lihat
[contoh cluster-dns](https://github.com/kubernetes/examples/tree/master/staging/cluster-dns) pada repositori Kubernetes GitHub.
diff --git a/content/id/docs/tasks/administer-cluster/reserve-compute-resources.md b/content/id/docs/tasks/administer-cluster/reserve-compute-resources.md
index e1ac7b035e..1462a6c87d 100644
--- a/content/id/docs/tasks/administer-cluster/reserve-compute-resources.md
+++ b/content/id/docs/tasks/administer-cluster/reserve-compute-resources.md
@@ -104,7 +104,7 @@ Ini dilakukan dengan menspesifikasikan _parent_ cgroup sebagai nilai dari _flag_
Kami merekomendasikan _daemon_ sistem Kubernetes untuk ditempatkan pada
tingkatan cgroup yang tertinggi (contohnya, `runtime.slice` pada mesin systemd).
Secara ideal, setiap _daemon_ sistem sebaiknya dijalankan pada _child_ cgroup
-di bawah _parent_ ini. Lihat [dokumentasi](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md#recommended-cgroups-setup)
+di bawah _parent_ ini. Lihat [dokumentasi](https://git.k8s.io/design-proposals-archive/node/node-allocatable.md#recommended-cgroups-setup)
untuk mengetahui rekomendasi hierarki cgroup secara detail.
Catatan: kubelet **tidak membuat** `--kube-reserved-cgroup` jika cgroup
diff --git a/content/id/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md b/content/id/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
index 934f6178cd..96b08d1aca 100644
--- a/content/id/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
+++ b/content/id/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
@@ -59,7 +59,7 @@ kode selain 0, maka kubelet akan mematikan Container dan mengulangnya kembali.
Saat dimulai, Container akan menjalankan perintah berikut:
```shell
-/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
+/bin/sh -c "touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600"
```
Container memiliki berkas `/tmp/healthy` pada saat 30 detik pertama setelah dijalankan.
diff --git a/content/id/docs/tasks/debug-application-cluster/debug-application-introspection.md b/content/id/docs/tasks/debug-application-cluster/debug-application-introspection.md
index 96b7a05e07..746c46f045 100644
--- a/content/id/docs/tasks/debug-application-cluster/debug-application-introspection.md
+++ b/content/id/docs/tasks/debug-application-cluster/debug-application-introspection.md
@@ -268,7 +268,7 @@ status:
## Contoh: Men-_debug_ Node yang mati/tidak terjangkau (_down/unreachable_)
-Terkadang saat men-_debug_ melihat status sebuah Node akan sangat berguna - misalnya, karena kamu telah melihat perilaku aneh dari sebuah Pod yang sedang berjalan pada Node tersebut, atau untuk mencari tahu mengapa sebuah Pod tidak dapat dijadwalkan ke dalam Node tersebut. Seperti pada Pod, kamu dapat menggunakan perintah `kubectl description node` dan` kubectl get node -o yaml` untuk mengambil informasi mendetil tentang Node. Misalnya, disini kamu akan melihat jika sebuah Node sedang mati (terputus dari jaringan, atau kubelet mati dan tidak mau restart, dll.). Perhatikan peristiwa yang menunjukkan Node tersebut NotReady, dan juga perhatikan bahwa Pod tidak lagi berjalan (mereka akan dikeluarkan setelah lima menit berstatus NotReady).
+Terkadang saat men-_debug_ melihat status sebuah Node akan sangat berguna - misalnya, karena kamu telah melihat perilaku aneh dari sebuah Pod yang sedang berjalan pada Node tersebut, atau untuk mencari tahu mengapa sebuah Pod tidak dapat dijadwalkan ke dalam Node tersebut. Seperti pada Pod, kamu dapat menggunakan perintah `kubectl description node` dan `kubectl get node -o yaml` untuk mengambil informasi mendetil tentang Node. Misalnya, disini kamu akan melihat jika sebuah Node sedang mati (terputus dari jaringan, atau kubelet mati dan tidak mau restart, dll.). Perhatikan peristiwa yang menunjukkan Node tersebut NotReady, dan juga perhatikan bahwa Pod tidak lagi berjalan (mereka akan dikeluarkan setelah lima menit berstatus NotReady).
```shell
kubectl get nodes
diff --git a/content/id/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md b/content/id/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
index 442e3178ec..7a23efa6ff 100644
--- a/content/id/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
+++ b/content/id/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough.md
@@ -426,7 +426,7 @@ pengambilan metrik. Terakhir, kondisi terakhir, `ScalingLimited`, menunjukkan ba
## Lampiran: Kuantitas
-Semua metrik di HorizontalPodAutoscaler dan metrik API ditentukan menggunakan notasi bilangan bulat khusus yang dikenal di Kubernetes sebagai {{< glossary_tooltip term_id="quantity" text="kuantitas">}}. Misalnya, kuantitas `10500m` akan ditulis sebagai `10.5` dalam notasi desimal. Metrik API akan menampilkan bilangan bulat tanpa sufiks jika memungkinkan, dan secara umum akan mengembalikan kuantitas dalam satuan mili. Ini berarti kamu mungkin melihat nilai metrik berfluktuasi antara `1` dan `1500m`, atau `1` dan` 1,5` ketika ditulis dalam notasi desimal.
+Semua metrik di HorizontalPodAutoscaler dan metrik API ditentukan menggunakan notasi bilangan bulat khusus yang dikenal di Kubernetes sebagai {{< glossary_tooltip term_id="quantity" text="kuantitas">}}. Misalnya, kuantitas `10500m` akan ditulis sebagai `10.5` dalam notasi desimal. Metrik API akan menampilkan bilangan bulat tanpa sufiks jika memungkinkan, dan secara umum akan mengembalikan kuantitas dalam satuan mili. Ini berarti kamu mungkin melihat nilai metrik berfluktuasi antara `1` dan `1500m`, atau `1` dan `1,5` ketika ditulis dalam notasi desimal.
## Lampiran: Skenario lain yang memungkinkan
diff --git a/content/id/docs/tasks/run-application/horizontal-pod-autoscale.md b/content/id/docs/tasks/run-application/horizontal-pod-autoscale.md
index cd82ded0b1..c9b74657ba 100644
--- a/content/id/docs/tasks/run-application/horizontal-pod-autoscale.md
+++ b/content/id/docs/tasks/run-application/horizontal-pod-autoscale.md
@@ -281,9 +281,9 @@ mengakses API ini, administrator klaster harus memastikan bahwa:
`false` untuk mengubah ke *autoscaling* berdasarkan Heapster, dimana ini sudah tidak didukung lagi.
Untuk informasi lebih lanjut mengenai metrik-metrik ini dan bagaimana perbedaan setiap metrik, perhatikan proposal
-desain untuk [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)
-dan [external.metrics.k8s.io](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/instrumentation/external-metrics-api.md).
+desain untuk [HPA V2](https://github.com/kubernetes/design-proposals-archive/blob/main/autoscaling/hpa-v2.md),
+[custom.metrics.k8s.io](https://github.com/kubernetes/design-proposals-archive/blob/main/instrumentation/custom-metrics-api.md)
+dan [external.metrics.k8s.io](https://github.com/kubernetes/design-proposals-archive/blob/main/instrumentation/external-metrics-api.md).
Untuk contoh bagaimana menggunakan metrik-metrik ini, perhatikan [panduan penggunaan metrik khusus](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-multiple-metrics-and-custom-metrics)
dan [panduan penggunaan metrik eksternal](/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/#autoscaling-on-metrics-not-related-to-kubernetes-objects).
diff --git a/content/id/docs/tutorials/kubernetes-basics/explore/explore-intro.html b/content/id/docs/tutorials/kubernetes-basics/explore/explore-intro.html
index a6381b3275..1b3b494b1a 100644
--- a/content/id/docs/tutorials/kubernetes-basics/explore/explore-intro.html
+++ b/content/id/docs/tutorials/kubernetes-basics/explore/explore-intro.html
@@ -76,9 +76,9 @@ weight: 10
Node
Sebuah Pod selalu berjalan dalam sebuah Node . Node merupakan sebuah mesin pekerja (worker ) di Kubernetes dan mungkin merupakan mesin virtual ataupun fisik, tergantung dari klaster. Tiap Node dikelola oleh control plane. Satu Node dapat memiliki beberapa Pod, dan control plane Kubernetes yang otomatis menangani penjadwalan pod seluruh Node-Node dalam klaster. Penjadwalan otomatis oleh control plane memperhitungkan tersedianya sumber daya tiap Node.
- Tiap Node Kuberbetes menjalankan setidaknya:
+ Tiap Node Kubernetes menjalankan setidaknya:
- Kubelet, satu proses yang bertanggung jawab untuk berkomunikasi antara control plane Kuberneter dan Node; ini juga mengelola Pod-Pod dan kontainer-kontainer yang berjalan di sebuah mesin.
+ Kubelet, satu proses yang bertanggung jawab untuk berkomunikasi antara control plane Kubernetes dan Node; ini juga mengelola Pod-Pod dan kontainer-kontainer yang berjalan di sebuah mesin.
Satu container runtime , seperti Docker, bertanggung jawab untuk menarik image kontainer dari register, membuka kontainer, dan menjalankan aplikasi.
diff --git a/content/id/examples/admin/logging/two-files-counter-pod-streaming-sidecar.yaml b/content/id/examples/admin/logging/two-files-counter-pod-streaming-sidecar.yaml
index 87bd198cfd..ac19efe4a2 100644
--- a/content/id/examples/admin/logging/two-files-counter-pod-streaming-sidecar.yaml
+++ b/content/id/examples/admin/logging/two-files-counter-pod-streaming-sidecar.yaml
@@ -5,7 +5,7 @@ metadata:
spec:
containers:
- name: count
- image: busybox
+ image: busybox:1.28
args:
- /bin/sh
- -c
@@ -22,14 +22,14 @@ spec:
- name: varlog
mountPath: /var/log
- name: count-log-1
- image: busybox
- args: [/bin/sh, -c, 'tail -n+1 -f /var/log/1.log']
+ image: busybox:1.28
+ args: [/bin/sh, -c, 'tail -n+1 -F /var/log/1.log']
volumeMounts:
- name: varlog
mountPath: /var/log
- name: count-log-2
- image: busybox
- args: [/bin/sh, -c, 'tail -n+1 -f /var/log/2.log']
+ image: busybox:1.28
+ args: [/bin/sh, -c, 'tail -n+1 -F /var/log/2.log']
volumeMounts:
- name: varlog
mountPath: /var/log
diff --git a/content/id/examples/pods/probe/exec-liveness.yaml b/content/id/examples/pods/probe/exec-liveness.yaml
index 07bf75f85c..6a9c9b3213 100644
--- a/content/id/examples/pods/probe/exec-liveness.yaml
+++ b/content/id/examples/pods/probe/exec-liveness.yaml
@@ -11,7 +11,7 @@ spec:
args:
- /bin/sh
- -c
- - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
+ - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
diff --git a/content/it/docs/concepts/cluster-administration/addons.md b/content/it/docs/concepts/cluster-administration/addons.md
index 5c2568ac60..aed6cdf756 100644
--- a/content/it/docs/concepts/cluster-administration/addons.md
+++ b/content/it/docs/concepts/cluster-administration/addons.md
@@ -25,13 +25,13 @@ I componenti aggiuntivi in ogni sezione sono ordinati alfabeticamente - l'ordine
* [Canal](https://github.com/tigera/canal/tree/master/k8s-install) unisce Flannel e Calico, fornendo i criteri di rete e di rete.
* [Cilium](https://github.com/cilium/cilium) è un plug-in di criteri di rete e di rete L3 in grado di applicare in modo trasparente le politiche HTTP / API / L7. Sono supportate entrambe le modalità di routing e overlay / incapsulamento.
* [CNI-Genie](https://github.com/Huawei-PaaS/CNI-Genie) consente a Kubernetes di connettersi senza problemi a una scelta di plugin CNI, come Calico, Canal, Flannel, Romana o Weave.
-* [Contiv](http://contiv.github.io) offre networking configurabile (L3 nativo con BGP, overlay con vxlan, L2 classico e Cisco-SDN / ACI) per vari casi d'uso e un ricco framework di policy. Il progetto Contiv è completamente [open source](http://github.com/contiv). Il [programma di installazione](http://github.com/contiv/install) fornisce sia opzioni di installazione basate su kubeadm che non su Kubeadm.
+* [Contiv](https://contivpp.io/) offre networking configurabile (L3 nativo con BGP, overlay con vxlan, L2 classico e Cisco-SDN / ACI) per vari casi d'uso e un ricco framework di policy. Il progetto Contiv è completamente [open source](http://github.com/contiv). Il [programma di installazione](http://github.com/contiv/install) fornisce sia opzioni di installazione basate su kubeadm che non su Kubeadm.
* [Flannel](https://github.com/flannel-io/flannel#deploying-flannel-manually) è un provider di reti sovrapposte che può essere utilizzato con Kubernetes.
* [Knitter](https://github.com/ZTE/Knitter/) è una soluzione di rete che supporta più reti in Kubernetes.
* Multus è un multi-plugin per il supporto di più reti in Kubernetes per supportare tutti i plugin CNI (es. Calico, Cilium, Contiv, Flannel), oltre a SRIOV, DPDK, OVS-DPDK e carichi di lavoro basati su VPP in Kubernetes.
* [NSX-T](https://docs.vmware.com/en/VMware-NSX-T/2.0/nsxt_20_ncp_kubernetes.pdf) Container Plug-in (NCP) fornisce l'integrazione tra VMware NSX-T e orchestratori di contenitori come Kubernetes, oltre all'integrazione tra NSX-T e piattaforme CaaS / PaaS basate su container come Pivotal Container Service (PKS) e OpenShift.
* [Nuage](https://github.com/nuagenetworks/nuage-kubernetes/blob/v5.1.1/docs/kubernetes-1-installation.rst) è una piattaforma SDN che fornisce una rete basata su policy tra i pod di Kubernetes e non Kubernetes con visibilità e monitoraggio della sicurezza.
-* [Romana](http://romana.io) è una soluzione di rete Layer 3 per pod network che supporta anche [API NetworkPolicy](/docs/concepts/services-networking/network-policies/). Dettagli di installazione del componente aggiuntivo di Kubeadm disponibili [qui](https://github.com/romana/romana/tree/master/containerize).
+* [Romana](https://github.com/romana/romana) è una soluzione di rete Layer 3 per pod network che supporta anche [API NetworkPolicy](/docs/concepts/services-networking/network-policies/). Dettagli di installazione del componente aggiuntivo di Kubeadm disponibili [qui](https://github.com/romana/romana/tree/master/containerize).
* [Weave Net](https://www.weave.works/docs/net/latest/kube-addon/) fornisce i criteri di rete e di rete, continuerà a funzionare su entrambi i lati di una partizione di rete e non richiede un database esterno.
## Service Discovery
@@ -48,5 +48,3 @@ I componenti aggiuntivi in ogni sezione sono ordinati alfabeticamente - l'ordine
qui ci sono molti altri componenti aggiuntivi documentati nella directory deprecata [cluster / addons](https://git.k8s.io/kubernetes/cluster/addons).
Quelli ben mantenuti dovrebbero essere collegati qui.
-
-
diff --git a/content/it/docs/concepts/cluster-administration/networking.md b/content/it/docs/concepts/cluster-administration/networking.md
index cf895a1845..ddb129009f 100644
--- a/content/it/docs/concepts/cluster-administration/networking.md
+++ b/content/it/docs/concepts/cluster-administration/networking.md
@@ -127,7 +127,7 @@ di [avere simultaneamente accesso a diverse implementazioni](https://github.com/
del [modello di rete Kubernetes](https://git.k8s.io/website/docs/concepts/cluster-administration/networking.md#kubernetes-model) in runtime.
Ciò include qualsiasi implementazione che funziona come un [plugin CNI](https://github.com/containernetworking/cni#3rd-party-plugins),
come [Flannel](https://github.com/coreos/flannel#flanella), [Calico](http://docs.projectcalico.org/),
-[Romana](http://romana.io), [Weave-net](https://www.weave.works/products/tessere-net/).
+[Romana](https://github.com/romana/romana), [Weave-net](https://www.weave.works/products/tessere-net/).
CNI-Genie supporta anche [assegnando più indirizzi IP a un pod](https://github.com/Huawei-PaaS/CNI-Genie/blob/master/docs/multiple-ips/README.md#feature-2-extension-cni-genie-multiple-ip-indirizzi-per-pod), ciascuno da un diverso plugin CNI.
@@ -153,7 +153,7 @@ complessità della rete richiesta per implementare Kubernetes su larga scala all
226/5000
[Contiv](https://github.com/contiv/netplugin) fornisce un networking configurabile (nativo l3 usando BGP,
-overlay usando vxlan, classic l2 o Cisco-SDN / ACI) per vari casi d'uso. [Contiv](http://contiv.io) è tutto aperto.
+overlay usando vxlan, classic l2 o Cisco-SDN / ACI) per vari casi d'uso. [Contiv](https://contivpp.io/) è tutto aperto.
### Contrail / Tungsten Fabric
@@ -255,7 +255,7 @@ Lars Kellogg-Stedman.
### Multus (a Multi Network plugin)
-[Multus](https://github.com/Intel-Corp/multus-cni) è un plugin Multi CNI per supportare la funzionalità Multi
+[Multus](https://github.com/k8snetworkplumbingwg/multus-cni) è un plugin Multi CNI per supportare la funzionalità Multi
Networking in Kubernetes utilizzando oggetti di rete basati su CRD in Kubernetes.
Multus supporta tutti i [plug-in di riferimento](https://github.com/containernetworking/plugins)
@@ -316,7 +316,7 @@ Flannel, alias [canal](https://github.com/tigera/canal) o native GCE, AWS o netw
### Romana
-[Romana](http://romana.io) è una soluzione di automazione della sicurezza e della rete open source che consente di
+[Romana](https://github.com/romana/romana) è una soluzione di automazione della sicurezza e della rete open source che consente di
distribuire Kubernetes senza una rete di overlay. Romana supporta Kubernetes
[Politica di rete](/docs/concepts/services-networking/network-policies/) per fornire isolamento tra gli spazi dei nomi
di rete.
@@ -335,5 +335,3 @@ entrambi i casi, la rete fornisce un indirizzo IP per pod, come è standard per
Il progetto iniziale del modello di rete e la sua logica, e un po 'di futuro i piani sono descritti in maggior
dettaglio nella [progettazione della rete documento](https://git.k8s.io/community/contributors/design-proposals/network/networking.md).
-
-
diff --git a/content/it/training/_index.html b/content/it/training/_index.html
index a8eee4e468..051fc87557 100644
--- a/content/it/training/_index.html
+++ b/content/it/training/_index.html
@@ -95,7 +95,7 @@ class: training
Certified Kubernetes Administrator (CKA)
- Il programma "Certified Kubernetes Administrator" assicura che la persona ha le capacità, conoscenze, e competenze per operare come amministratore di Kubernets.
+ Il programma "Certified Kubernetes Administrator" assicura che la persona ha le capacità, conoscenze, e competenze per operare come amministratore di Kubernetes.
Vai alla certificazione
diff --git a/content/ja/docs/concepts/architecture/nodes.md b/content/ja/docs/concepts/architecture/nodes.md
index 2825c7f93d..b2ba14b239 100644
--- a/content/ja/docs/concepts/architecture/nodes.md
+++ b/content/ja/docs/concepts/architecture/nodes.md
@@ -137,7 +137,7 @@ kubectl describe node <ノード名をここに挿入>
`SchedulingDisabled`はKubernetesのAPIにおけるConditionではありません;その代わり、cordonされたノードはUnschedulableとしてマークされます。
{{< /note >}}
-ノードのConditionはJSONオブジェクトで表現されます。例えば、正常なノードの場合は以下のような構造体が表示されます。
+Nodeの状態は、Nodeリソースの`.status`の一部として表現されます。例えば、正常なノードの場合は以下のようなjson構造が表示されます。
```json
"conditions": [
@@ -173,36 +173,25 @@ CapacityとAllocatableについて深く知りたい場合は、ノード上で
### Info {#info}
カーネルのバージョン、Kubernetesのバージョン(kubeletおよびkube-proxyのバージョン)、(使用されている場合)Dockerのバージョン、OS名など、ノードに関する一般的な情報です。
-この情報はノードからkubeletを通じて取得されます。
+この情報はノードからkubeletを通じて取得され、Kubernetes APIに公開されます。
-## 管理 {#management}
-[Pod](/ja/docs/concepts/workloads/pods/pod/)や[Service](/ja/docs/concepts/services-networking/service/)と違い、ノードは本質的にはKubernetesによって作成されません。GCPのようなクラウドプロバイダーによって外的に作成されるか、VMや物理マシンのプールに存在するものです。そのため、Kubernetesがノードを作成すると、そのノードを表すオブジェクトが作成されます。作成後、Kubernetesはそのノードが有効かどうかを確認します。 たとえば、次の内容からノードを作成しようとしたとします:
+## ハートビート
+ハートビートは、Kubernetesノードから送信され、ノードが利用可能か判断するのに役立ちます。
+以下の2つのハートビートがあります:
+* Nodeの`.status`の更新
+* [Lease object](/docs/reference/generated/kubernetes-api/{{< latest-version >}}#lease-v1-coordination-k8s-io)です。
+各ノードは`kube-node-lease`という{{< glossary_tooltip term_id="namespace" text="namespace">}}に関連したLeaseオブジェクトを持ちます。
+Leaseは軽量なリソースで、クラスターのスケールに応じてノードのハートビートにおけるパフォーマンスを改善します。
-```json
-{
- "kind": "Node",
- "apiVersion": "v1",
- "metadata": {
- "name": "10.240.79.157",
- "labels": {
- "name": "my-first-k8s-node"
- }
- }
-}
-```
+kubeletが`NodeStatus`とLeaseオブジェクトの作成および更新を担当します。
-Kubernetesは内部的にNodeオブジェクトを作成し、 `metadata.name`フィールドに基づくヘルスチェックによってノードを検証します。ノードが有効な場合、つまり必要なサービスがすべて実行されている場合は、Podを実行する資格があります。それ以外の場合、該当ノードが有効になるまではいかなるクラスターの活動に対しても無視されます。
-Nodeオブジェクトの名前は有効な[DNSサブドメイン名](/ja/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)である必要があります。
+- kubeletは、ステータスに変化があったり、設定した間隔の間に更新がない時に`NodeStatus`を更新します。`NodeStatus`更新のデフォルト間隔は5分です。(到達不能の場合のデフォルトタイムアウトである40秒よりもはるかに長いです)
+- kubeletは10秒間隔(デフォルトの更新間隔)でLeaseオブジェクトの生成と更新を実施します。Leaseの更新は`NodeStatus`の更新とは独立されて行われます。Leaseの更新が失敗した場合、kubeletは200ミリ秒から始まり7秒を上限とした指数バックオフでリトライします。
-{{< note >}}
-Kubernetesは無効なノードのためにオブジェクトを保存し、それをチェックし続けます。
-このプロセスを停止するには、Nodeオブジェクトを明示的に削除する必要があります。
-{{< /note >}}
-現在、Kubernetesのノードインターフェースと相互作用する3つのコンポーネントがあります。ノードコントローラー、kubelet、およびkubectlです。
-### ノードコントローラー
+## ノードコントローラー
ノード{{< glossary_tooltip text="コントローラー" term_id="controller" >}}は、ノードのさまざまな側面を管理するKubernetesのコントロールプレーンコンポーネントです。
@@ -216,16 +205,6 @@ Kubernetesは無効なノードのためにオブジェクトを保存し、そ
ノードが到達不能(例えば、ノードがダウンしているなどので理由で、ノードコントローラーがハートビートの受信を停止した場合)になると、ノードコントローラーは、NodeStatusのNodeReady conditionをConditionUnknownに変更する役割があります。その後も該当ノードが到達不能のままであった場合、Graceful Terminationを使って全てのPodを退役させます。デフォルトのタイムアウトは、ConditionUnknownの報告を開始するまで40秒、その後Podの追い出しを開始するまで5分に設定されています。
ノードコントローラーは、`--node-monitor-period`に設定された秒数ごとに各ノードの状態をチェックします。
-#### ハートビート
-ハートビートは、Kubernetesノードから送信され、ノードが利用可能か判断するのに役立ちます。
-2つのハートビートがあります:`NodeStatus`の更新と[Lease object](/docs/reference/generated/kubernetes-api/{{< latest-version >}}#lease-v1-coordination-k8s-io)です。
-各ノードは`kube-node-lease`という{{< glossary_tooltip term_id="namespace" text="namespace">}}に関連したLeaseオブジェクトを持ちます。
-Leaseは軽量なリソースで、クラスターのスケールに応じてノードのハートビートにおけるパフォーマンスを改善します。
-
-kubeletが`NodeStatus`とLeaseオブジェクトの作成および更新を担当します。
-
-- kubeletは、ステータスに変化があったり、設定した間隔の間に更新がない時に`NodeStatus`を更新します。`NodeStatus`更新のデフォルト間隔は5分です。(到達不能の場合のデフォルトタイムアウトである40秒よりもはるかに長いです)
-- kubeletは10秒間隔(デフォルトの更新間隔)でLeaseオブジェクトの生成と更新を実施します。Leaseの更新は`NodeStatus`の更新とは独立されて行われます。Leaseの更新が失敗した場合、kubeletは200ミリ秒から始まり7秒を上限とした指数バックオフでリトライします。
#### 信頼性
@@ -269,6 +248,88 @@ Pod以外のプロセス用にリソースを明示的に予約したい場合
kubeletはリソースの割当を決定する際にトポロジーのヒントを利用できます。
詳細は、[ノードのトポロジー管理ポリシーを制御する](/ja/docs/tasks/administer-cluster/topology-manager/)を参照してください。
+## ノードの正常終了 {#graceful-node-shutdown}
+
+{{< feature-state state="beta" for_k8s_version="v1.21" >}}
+
+kubeletは、ノードのシステムシャットダウンを検出すると、ノード上で動作しているPodを終了させます。
+
+Kubelet は、ノードのシャットダウン時に、ポッドが通常の[通常のポッド終了プロセス](/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination)に従うようにします。
+
+Graceful Node Shutdownはsystemdに依存しているため、[systemd inhibitor locks](https://www.freedesktop.org/wiki/Software/systemd/inhibit/)を
+利用してノードのシャットダウンを一定時間遅らせることができます。
+
+Graceful Node Shutdownは、v1.21でデフォルトで有効になっている`GracefulNodeShutdown` [フィーチャーゲート](/ja/docs/reference/command-line-tools-reference/feature-gates/)で制御されます。
+
+なお、デフォルトでは、後述の設定オプション`ShutdownGracePeriod`および`ShutdownGracePeriodCriticalPods`の両方がゼロに設定されているため、Graceful node shutdownは有効になりません。この機能を有効にするには、この2つのkubeletの設定を適切に設定し、ゼロ以外の値を設定する必要があります。
+
+Graceful shutdownでは、kubeletは以下の2段階でPodを終了させます。
+
+1. そのノード上で動作している通常のPodを終了させます。
+2. そのノード上で動作している[critical pods](/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)を終了させます。
+
+Graceful Node Shutdownには、2つの[`KubeletConfiguration`](/docs/tasks/administer-cluster/kubelet-config-file/)オプションを設定します。:
+* `ShutdownGracePeriod`:
+ * ノードがシャットダウンを遅らせるべき合計期間を指定します。これは、通常のPodと[critical pods](/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)の両方のPod終了の合計猶予期間です。
+* `ShutdownGracePeriodCriticalPods`:
+ * ノードのシャットダウン時に[critical pods](/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)を終了させるために使用する期間を指定します。この値は、ShutdownGracePeriodよりも小さくする必要があります。
+
+例えば、`ShutdownGracePeriod=30s`、`ShutdownGracePeriodCriticalPods=10s`とすると、
+kubeletはノードのシャットダウンを30秒遅らせます。シャットダウンの間、最初の20(30-10)秒は通常のポッドを優雅に終了させるために確保され、
+残りの10秒は重要なポッドを終了させるために確保されることになります。
+
+{{< note >}}
+Graceful Node Shutdown中にPodが退避された場合、それらのPodの`.status`は`Failed`になります。
+`kubectl get pods`を実行すると、退避させられたPodのステータスが `Shutdown` と表示されます。
+また、`kubectl describe pod`を実行すると、ノードのシャットダウンのためにPodが退避されたことがわかります。
+
+```
+Status: Failed
+Reason: Shutdown
+Message: Node is shutting, evicting pods
+```
+
+失敗したポッドオブジェクトは、明示的に削除されるか、[GCによってクリーンアップ](/docs/concepts/workloads/pods/pod-lifecycle/#pod-garbage-collection)されるまで保存されます。
+これは、ノードが突然終了した場合とは異なった振る舞いです。
+
+{{< /note >}}
+
+## スワップメモリの管理 {#swap-memory}
+
+{{< feature-state state="alpha" for_k8s_version="v1.22" >}}
+
+Kubernetes 1.22以前では、ノードはスワップメモリの使用をサポートしておらず、ノード上でスワップが検出された場合、
+kubeletはデフォルトで起動に失敗していました。1.22以降では、スワップメモリのサポートをノードごとに有効にすることができます。
+
+
+
+ノードでスワップを有効にするには、kubeletの `NodeSwap` [フィーチャーゲート](/ja/docs/reference/command-line-tools-reference/feature-gates/)を有効にし、
+`--fail-swap-on`コマンドラインフラグまたは`failSwapOn`[KubeletConfiguration](/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)を false に設定する必要があります。
+
+
+ユーザーはオプションで、ノードがスワップメモリをどのように使用するかを指定するために、`memorySwap.swapBehavior`を設定することもできます。ノードがスワップメモリをどのように使用するかを指定します。例えば、以下のようになります。
+
+```yaml
+memorySwap:
+ swapBehavior: LimitedSwap
+```
+
+swapBehaviorで使用できる設定オプションは以下の通りです。:
+- `LimitedSwap`: Kubernetesのワークロードが、使用できるスワップ量に制限を設けます。Kubernetesが管理していないノード上のワークロードは、依然としてスワップを使用できます。
+- `UnlimitedSwap`: Kubernetesのワークロードが使用できるスワップ量に制限を設けません。システムの限界まで、要求されただけのスワップメモリを使用することができます。
+
+`memorySwap`の設定が指定されておらず、[フィーチャーゲート](/ja/docs/reference/command-line-tools-reference/feature-gates/)が有効な場合、デフォルトのkubeletは`LimitedSwap`の設定と同じ動作を適用します。
+
+`LimitedSwap`設定の動作は、ノードがコントロールグループ(「cgroups」とも呼ばれる)のv1とv2のどちらで動作しているかによって異なります。
+
+Kubernetesのワークロードでは、メモリとスワップを組み合わせて使用することができ、ポッドのメモリ制限が設定されている場合はその制限まで使用できます。
+- **cgroupsv1:** Kubernetesのワークロードは、メモリとスワップを組み合わせて使用することができ、ポッドのメモリ制限が設定されている場合はその制限まで使用できます。
+- **cgroupsv2:** Kubernetesのワークロードは、スワップメモリを使用できません。
+
+詳しくは、[KEP-2400](https://github.com/kubernetes/enhancements/issues/2400)と
+[design proposal](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/2400-node-swap/README.md)をご覧いただき、テストにご協力、ご意見をお聞かせください。
+
+
## {{% heading "whatsnext" %}}
* [ノードコンポーネント](/ja/docs/concepts/overview/components/#node-components)について学習する。
diff --git a/content/ja/docs/concepts/cluster-administration/addons.md b/content/ja/docs/concepts/cluster-administration/addons.md
index f0f1baa402..70619ab3c1 100644
--- a/content/ja/docs/concepts/cluster-administration/addons.md
+++ b/content/ja/docs/concepts/cluster-administration/addons.md
@@ -29,7 +29,7 @@ content_type: concept
* [OVN4NFV-K8S-Plugin](https://github.com/opnfv/ovn4nfv-k8s-plugin)は、クラウドネイティブベースのService function chaining(SFC)、Multiple OVNオーバーレイネットワーク、動的なサブネットの作成、動的な仮想ネットワークの作成、VLANプロバイダーネットワーク、Directプロバイダーネットワークを提供し、他のMulti-networkプラグインと付け替え可能なOVNベースのCNIコントローラープラグインです。
* [NSX-T](https://docs.vmware.com/en/VMware-NSX-T/2.0/nsxt_20_ncp_kubernetes.pdf) Container Plug-in(NCP)は、VMware NSX-TとKubernetesなどのコンテナオーケストレーター間のインテグレーションを提供します。また、NSX-Tと、Pivotal Container Service(PKS)とOpenShiftなどのコンテナベースのCaaS/PaaSプラットフォームとのインテグレーションも提供します。
* [Nuage](https://github.com/nuagenetworks/nuage-kubernetes/blob/v5.1.1-1/docs/kubernetes-1-installation.rst)は、Kubernetes Podと非Kubernetes環境間で可視化とセキュリティモニタリングを使用してポリシーベースのネットワークを提供するSDNプラットフォームです。
-* [Romana](https://romana.io)は、[NetworkPolicy API](/ja/docs/concepts/services-networking/network-policies/)もサポートするPodネットワーク向けのL3のネットワークソリューションです。Kubeadmアドオンのインストールの詳細は[こちら](https://github.com/romana/romana/tree/master/containerize)で確認できます。
+* [Romana](https://github.com/romana/romana)は、[NetworkPolicy API](/ja/docs/concepts/services-networking/network-policies/)もサポートするPodネットワーク向けのL3のネットワークソリューションです。Kubeadmアドオンのインストールの詳細は[こちら](https://github.com/romana/romana/tree/master/containerize)で確認できます。
* [Weave Net](https://www.weave.works/docs/net/latest/kubernetes/kube-addon/)は、ネットワークパーティションの両面で機能し、外部データベースを必要とせずに、ネットワークとネットワークポリシーを提供します。
## サービスディスカバリ
diff --git a/content/ja/docs/concepts/cluster-administration/manage-deployment.md b/content/ja/docs/concepts/cluster-administration/manage-deployment.md
index d8919c2132..084ff304b5 100644
--- a/content/ja/docs/concepts/cluster-administration/manage-deployment.md
+++ b/content/ja/docs/concepts/cluster-administration/manage-deployment.md
@@ -368,7 +368,7 @@ deployment.apps/my-nginx configured
注意として、前回の変更適用時からの設定の変更内容を決めるため、`kubectl apply`はリソースに対してアノテーションを割り当てます。変更が実施されると`kubectl apply`は、1つ前の設定内容と、今回変更しようとする入力内容と、現在のリソースの設定との3つの間で変更内容の差分をとります。
-現在、リソースはこのアノテーションなしで作成されました。そのため、最初の`kubectl paply`の実行においては、与えられたにゅうチョクト、現在のリソースの設定の2つの間の差分が取られ、フォールバックします。この最初の実行の間、リソースが作成された時にプロパティーセットの削除を検知できません。この理由により、プロパティーの削除はされません。
+現在、リソースはこのアノテーションなしで作成されました。そのため、最初の`kubectl paply`の実行においては、与えられた入力と、現在のリソースの設定の2つの間の差分が取られ、フォールバックします。この最初の実行の間、リソースが作成された時にプロパティーセットの削除を検知できません。この理由により、プロパティーの削除はされません。
`kubectl apply`の実行後の全ての呼び出しや、`kubectl replace`や`kubectl edit`などの設定を変更する他のコマンドではアノテーションを更新します。`kubectl apply`した後の全ての呼び出しにおいて3-wayの差分取得によってプロパティの検知と削除を実施します。
diff --git a/content/ja/docs/concepts/cluster-administration/networking.md b/content/ja/docs/concepts/cluster-administration/networking.md
index dacaf08146..37ce7102bc 100644
--- a/content/ja/docs/concepts/cluster-administration/networking.md
+++ b/content/ja/docs/concepts/cluster-administration/networking.md
@@ -88,9 +88,9 @@ Details on how the AOS system works can be accessed here: https://www.apstra.com
さらに、このCNIは[ネットワークポリシーの適用のためにCalico](https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/calico.html)と一緒に実行できます。AWS VPC CNIプロジェクトは、[GitHubのドキュメント](https://github.com/aws/amazon-vpc-cni-k8s)とともにオープンソースで公開されています。
### Azure CNI for Kubernetes
-[Azure CNI](https://docs.microsoft.com/en-us/azure/virtual-network/container-networking-overview) is an [open source](https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md) plugin that integrates Kubernetes Pods with an Azure Virtual Network (also known as VNet) providing network performance at par with VMs. Pods can connect to peered VNet and to on-premises over Express Route or site-to-site VPN and are also directly reachable from these networks. Pods can access Azure services, such as storage and SQL, that are protected by Service Endpoints or Private Link. You can use VNet security policies and routing to filter Pod traffic. The plugin assigns VNet IPs to Pods by utilizing a pool of secondary IPs pre-configured on the Network Interface of a Kubernetes node.
+[Azure CNI](https://docs.microsoft.com/en-us/azure/virtual-network/container-networking-overview)は、Kubernetes PodをAzure仮想ネットワーク(VNetとも呼ばれます)と統合する[オープンソース](https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md)プラグインで、VMと同等のネットワーク パフォーマンスを提供します。Pod は、ExpressRouteまたはサイト間VPN経由でピアリングされたVNetおよびオンプレミスに接続でき、これらのネットワークから直接アクセスすることもできます。Podは、サービスエンドポイントまたはプライベートリンクによって保護されているストレージやSQLなどのAzureサービスにアクセスできます。VNetセキュリティポリシーとルーティングを使用して、Podトラフィックをフィルター処理できます。プラグインは、Kubernetesノードのネットワークインターフェイスで事前に構成されたセカンダリIPのプールを利用して、VNet IPをPodに割り当てます。
-Azure CNI is available natively in the [Azure Kubernetes Service (AKS)] (https://docs.microsoft.com/en-us/azure/aks/configure-azure-cni).
+Azure CNIは、[Azure Kubernetes Service (AKS)] (https://docs.microsoft.com/en-us/azure/aks/configure-azure-cni)でネイティブに利用できます。
### Big Cloud Fabric from Big Switch Networks
@@ -115,7 +115,7 @@ addressing, and it can be used in combination with other CNI plugins.
### CNI-Genie from Huawei
-[CNI-Genie](https://github.com/Huawei-PaaS/CNI-Genie) is a CNI plugin that enables Kubernetes to [simultaneously have access to different implementations](https://github.com/Huawei-PaaS/CNI-Genie/blob/master/docs/multiple-cni-plugins/README.md#what-cni-genie-feature-1-multiple-cni-plugins-enables) of the [Kubernetes network model](/ja/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-networking-model) in runtime. This includes any implementation that runs as a [CNI plugin](https://github.com/containernetworking/cni#3rd-party-plugins), such as [Flannel](https://github.com/coreos/flannel#flannel), [Calico](http://docs.projectcalico.org/), [Romana](http://romana.io), [Weave-net](https://www.weave.works/products/weave-net/).
+[CNI-Genie](https://github.com/Huawei-PaaS/CNI-Genie) is a CNI plugin that enables Kubernetes to [simultaneously have access to different implementations](https://github.com/Huawei-PaaS/CNI-Genie/blob/master/docs/multiple-cni-plugins/README.md#what-cni-genie-feature-1-multiple-cni-plugins-enables) of the [Kubernetes network model](/ja/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-networking-model) in runtime. This includes any implementation that runs as a [CNI plugin](https://github.com/containernetworking/cni#3rd-party-plugins), such as [Flannel](https://github.com/coreos/flannel#flannel), [Calico](http://docs.projectcalico.org/), [Romana](https://github.com/romana/romana), [Weave-net](https://www.weave.works/products/weave-net/).
CNI-Genie also supports [assigning multiple IP addresses to a pod](https://github.com/Huawei-PaaS/CNI-Genie/blob/master/docs/multiple-ips/README.md#feature-2-extension-cni-genie-multiple-ip-addresses-per-pod), each from a different CNI plugin.
@@ -273,7 +273,7 @@ at [ovn-kubernetes](https://github.com/openvswitch/ovn-kubernetes).
### Romana
-[Romana](https://romana.io) is an open source network and security automation solution that lets you deploy Kubernetes without an overlay network. Romana supports Kubernetes [Network Policy](/docs/concepts/services-networking/network-policies/) to provide isolation across network namespaces.
+[Romana](https://github.com/romana/romana) is an open source network and security automation solution that lets you deploy Kubernetes without an overlay network. Romana supports Kubernetes [Network Policy](/docs/concepts/services-networking/network-policies/) to provide isolation across network namespaces.
### Weave Net from Weaveworks
diff --git a/content/ja/docs/concepts/configuration/manage-resources-containers.md b/content/ja/docs/concepts/configuration/manage-resources-containers.md
index 6f699bb477..d9e5a13b41 100644
--- a/content/ja/docs/concepts/configuration/manage-resources-containers.md
+++ b/content/ja/docs/concepts/configuration/manage-resources-containers.md
@@ -17,7 +17,7 @@ Pod内のコンテナのリソース*要求*を指定すると、スケジュー
-## 要求と制限
+## 要求と制限 {#requests-and-limits}
Podが動作しているNodeに利用可能なリソースが十分にある場合、そのリソースの`要求`が指定するよりも多くのリソースをコンテナが使用することが許可されます
ただし、コンテナはそのリソースの`制限`を超えて使用することはできません。
@@ -33,7 +33,7 @@ Podが動作しているNodeに利用可能なリソースが十分にある場
コンテナが自身のメモリー制限を指定しているが、メモリー要求を指定していない場合、Kubernetesは制限に一致するメモリー要求を自動的に割り当てます。同様に、コンテナが自身のCPU制限を指定しているが、CPU要求を指定していない場合、Kubernetesは制限に一致するCPU要求を自動的に割り当てます。
{{< /note >}}
-## リソースタイプ
+## リソースタイプ {#resource-types}
*CPU*と*メモリー*はいずれも*リソースタイプ*です。リソースタイプには基本単位があります。
CPUは計算処理を表し、[Kubernetes CPUs](#meaning-of-cpu)の単位で指定されます。
@@ -54,7 +54,7 @@ CPUとメモリーは、まとめて*コンピュートリソース*または単
それらは[API resources](/ja/docs/concepts/overview/kubernetes-api/)とは異なります。
Podや[Services](/ja/docs/concepts/services-networking/service/)などのAPIリソースは、Kubernetes APIサーバーを介して読み取りおよび変更できるオブジェクトです。
-## Podとコンテナのリソース要求と制限
+## Podとコンテナのリソース要求と制限 {#resource-requests-and-limits-of-pod-and-container}
Podの各コンテナは、次の1つ以上を指定できます。
@@ -68,9 +68,9 @@ Podの各コンテナは、次の1つ以上を指定できます。
要求と制限はそれぞれのコンテナでのみ指定できますが、このPodリソースの要求と制限の関係性について理解すると便利です。
特定のリソースタイプの*Podリソース要求/制限*は、Pod内の各コンテナに対するそのタイプのリソース要求/制限の合計です。
-## Kubernetesにおけるリソースの単位
+## Kubernetesにおけるリソースの単位 {#resource-units-in-kubernetes}
-### CPUの意味
+### CPUの意味 {#meaning-of-cpu}
CPUリソースの制限と要求は、*cpu*単位で測定されます。
Kuberenetesにおける1つのCPUは、クラウドプロバイダーの**1 vCPU/コア**およびベアメタルのインテルプロセッサーの**1 ハイパースレッド**に相当します。
@@ -85,7 +85,7 @@ Kuberenetesにおける1つのCPUは、クラウドプロバイダーの**1 vCPU
CPUは常に相対量としてではなく、絶対量として要求されます。
0.1は、シングルコア、デュアルコア、あるいは48コアマシンのどのCPUに対してでも、同一の量を要求します。
-### メモリーの意味
+### メモリーの意味 {#meaning-of-memory}
`メモリー`の制限と要求はバイト単位で測定されます。
E、P、T、G、M、Kのいずれかのサフィックスを使用して、メモリーを整数または固定小数点数として表すことができます。
@@ -128,7 +128,7 @@ spec:
cpu: "500m"
```
-## リソース要求を含むPodがどのようにスケジュールされるか
+## リソース要求を含むPodがどのようにスケジュールされるか {#how-pods-with-resource-requests-are-scheduled}
Podを作成すると、KubernetesスケジューラーはPodを実行するNodeを選択します。
各Nodeには、リソースタイプごとに最大容量があります。それは、Podに提供できるCPUとメモリの量です。
@@ -136,7 +136,7 @@ Podを作成すると、KubernetesスケジューラーはPodを実行するNode
Node上の実際のメモリーまたはCPUリソースの使用率は非常に低いですが、容量チェックが失敗した場合、スケジューラーはNodeにPodを配置しないことに注意してください。
これにより、例えば日々のリソース要求のピーク時など、リソース利用が増加したときに、Nodeのリソース不足から保護されます。
-## リソース制限のあるPodがどのように実行されるか
+## リソース制限のあるPodがどのように実行されるか {#how-pods-with-resource-limits-are-run}
kubeletがPodのコンテナを開始すると、CPUとメモリーの制限がコンテナランタイムに渡されます。
@@ -166,13 +166,13 @@ Dockerを使用する場合:
コンテナをスケジュールできないか、リソース制限が原因で強制終了されているかどうかを確認するには、[トラブルシューティング](#troubleshooting)のセクションを参照してください。
-### コンピュートリソースとメモリーリソースの使用量を監視する
+### コンピュートリソースとメモリーリソースの使用量を監視する {#monitoring-compute-memory-resource-usage}
Podのリソース使用量は、Podのステータスの一部として報告されます。
オプションの[監視ツール](/docs/tasks/debug-application-cluster/resource-usage-monitoring/)がクラスターにおいて利用可能な場合、Podのリソース使用量は[メトリクスAPI](/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#the-metrics-api)から直接、もしくは監視ツールから取得できます。
-## ローカルのエフェメラルストレージ
+## ローカルのエフェメラルストレージ {#local-ephemeral-storage}
{{< feature-state for_k8s_version="v1.10" state="beta" >}}
@@ -192,7 +192,7 @@ Nodeに障害が発生すると、そのエフェメラルストレージ内の
ベータ版の機能として、Kubernetesでは、Podが消費するローカルのエフェメラルストレージの量を追跡、予約、制限することができます。
-### ローカルエフェメラルストレージの設定
+### ローカルエフェメラルストレージの設定 {#configurations-for-local-ephemeral-storage}
Kubernetesは、Node上のローカルエフェメラルストレージを構成する2つの方法をサポートしています。
{{< tabs name="local_storage_configurations" >}}
@@ -235,7 +235,7 @@ kubeletは、ローカルストレージの使用量を測定できます。
kubeletは、`tmpfs`のemptyDirボリュームをローカルのエフェメラルストレージとしてではなく、コンテナメモリーとして追跡します。
{{< /note >}}
-### ローカルのエフェメラルストレージの要求と制限設定
+### ローカルのエフェメラルストレージの要求と制限設定 {#setting-requests-and-limits-for-local-ephemeral-storage}
ローカルのエフェメラルストレージを管理するためには _ephemeral-storage_ パラメーターを利用することができます。
Podの各コンテナは、次の1つ以上を指定できます。
@@ -288,7 +288,7 @@ spec:
emptyDir: {}
```
-### エフェメラルストレージを要求するPodのスケジュール方法
+### エフェメラルストレージを要求するPodのスケジュール方法 {#how-pods-with-ephemeral-storage-requests-are-scheduled}
Podを作成すると、KubernetesスケジューラーはPodを実行するNodeを選択します。
各Nodeには、Podに提供できるローカルのエフェメラルストレージの上限があります。
@@ -375,7 +375,7 @@ Kubernetesが使用しないようにする必要があります。
{{% /tab %}}
{{< /tabs >}}
-## 拡張リソース
+## 拡張リソース {#extended-resources}
拡張リソースは`kubernetes.io`ドメインの外で完全に修飾されたリソース名です。
これにより、クラスタオペレータはKubernetesに組み込まれていないリソースをアドバタイズし、ユーザはそれを利用することができるようになります。
@@ -384,16 +384,16 @@ Kubernetesが使用しないようにする必要があります。
第一に、クラスタオペレーターは拡張リソースをアドバタイズする必要があります。
第二に、ユーザーはPodで拡張リソースを要求する必要があります。
-### 拡張リソースの管理
+### 拡張リソースの管理 {#managing-extended-resources}
-#### Nodeレベルの拡張リソース
+#### Nodeレベルの拡張リソース {#node-level-extended-resources}
Nodeレベルの拡張リソースはNodeに関連付けられています。
-##### デバイスプラグイン管理のリソース
+##### デバイスプラグイン管理のリソース {#device-plugin-managed-resources}
各Nodeにデバイスプラグインで管理されているリソースをアドバタイズする方法については、[デバイスプラグイン](/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/)を参照してください。
-##### その他のリソース
+##### その他のリソース {#other-resources}
新しいNodeレベルの拡張リソースをアドバタイズするには、クラスタオペレータはAPIサーバに`PATCH`HTTPリクエストを送信し、クラスタ内のNodeの`status.capacity`に利用可能な量を指定します。
この操作の後、ノードの`status.capacity`には新しいリソースが含まれます。
`status.allocatable`フィールドは、kubeletによって非同期的に新しいリソースで自動的に更新されます。
@@ -416,7 +416,7 @@ JSON-Patchの操作パス値は、JSON-Pointerとして解釈されます。
詳細については、[IETF RFC 6901, section 3](https://tools.ietf.org/html/rfc6901#section-3)を参照してください。
{{< /note >}}
-#### クラスターレベルの拡張リソース
+#### クラスターレベルの拡張リソース {#cluster-level-extended-resources}
クラスターレベルの拡張リソースはノードに関連付けられていません。
これらは通常、リソース消費とリソースクォータを処理するスケジューラー拡張機能によって管理されます。
@@ -449,7 +449,7 @@ JSON-Patchの操作パス値は、JSON-Pointerとして解釈されます。
}
```
-### 拡張リソースの消費
+### 拡張リソースの消費 {#consuming-extended-resources}
ユーザーは、CPUやメモリのようにPodのスペックで拡張されたリソースを消費できます。
利用可能な量以上のリソースが同時にPodに割り当てられないように、スケジューラーがリソースアカウンティングを行います。
@@ -493,9 +493,9 @@ spec:
example.com/foo: 1
```
-## トラブルシューティング
+## トラブルシューティング {#troubleshooting}
-### failedSchedulingイベントメッセージが表示され、Podが保留中になる
+### failedSchedulingイベントメッセージが表示され、Podが保留中になる {#my-pods-are-pending-with-event-message-failedscheduling}
スケジューラーがPodが収容されるNodeを見つけられない場合、場所が見つかるまでPodはスケジュールされないままになります。
スケジューラーがPodの場所を見つけられないたびに、次のようなイベントが生成されます。
@@ -562,7 +562,7 @@ Allocated resources:
[リソースクォータ](/docs/concepts/policy/resource-quotas/)機能は、消費できるリソースの総量を制限するように設定することができます。
名前空間と組み合わせて使用すると、1つのチームがすべてのリソースを占有するのを防ぐことができます。
-### コンテナが終了した
+### コンテナが終了した {#my-container-is-terminated}
コンテナはリソース不足のため、終了する可能性があります。
コンテナがリソース制限に達したために強制終了されているかどうかを確認するには、対象のPodで`kubectl describe pod`を呼び出します。
diff --git a/content/ja/docs/concepts/configuration/secret.md b/content/ja/docs/concepts/configuration/secret.md
index 0b207bf25f..ca8b312659 100644
--- a/content/ja/docs/concepts/configuration/secret.md
+++ b/content/ja/docs/concepts/configuration/secret.md
@@ -10,14 +10,29 @@ weight: 30
-KubernetesのSecretはパスワード、OAuthトークン、SSHキーのような機密情報を保存し、管理できるようにします。
-Secretに機密情報を保存することは、それらを{{< glossary_tooltip text="Pod" term_id="pod" >}}の定義や{{< glossary_tooltip text="コンテナイメージ" term_id="image" >}}に直接記載するより、安全で柔軟です。
-詳しくは[Secretの設計文書](https://git.k8s.io/community/contributors/design-proposals/auth/secrets.md)を参照してください。
-Secretはパスワード、トークン、キーのような小容量の機密データを含むオブジェクトです。
-他の方法としては、そのような情報はPodの定義やイメージに含めることができます。
-ユーザーはSecretを作ることができ、またシステムが作るSecretもあります。
+Secretとは、パスワードやトークン、キーなどの少量の機密データを含むオブジェクトのことです。
+このような情報は、Secretを用いないと{{< glossary_tooltip term_id="pod" >}}の定義や{{< glossary_tooltip text="コンテナイメージ" term_id="image" >}}に直接記載することになってしまうかもしれません。
+Secretを使用すれば、アプリケーションコードに機密データを含める必要がなくなります。
+なぜなら、Secretは、それを使用するPodとは独立して作成することができ、
+Podの作成、閲覧、編集といったワークフローの中でSecret(およびそのデータ)が漏洩する危険性が低くなるためです。
+また、Kubernetesやクラスター内で動作するアプリケーションは、不揮発性ストレージに機密データを書き込まないようにするなど、Secretで追加の予防措置を取ることができます。
+
+Secretsは、{{< glossary_tooltip text="ConfigMaps" term_id="configmap" >}}に似ていますが、機密データを保持するために用います。
+
+
+{{< caution >}}
+KubernetesのSecretは、デフォルトでは、APIサーバーの基礎となるデータストア(etcd)に暗号化されずに保存されます。APIにアクセスできる人は誰でもSecretを取得または変更でき、etcdにアクセスできる人も同様です。
+さらに、名前空間でPodを作成する権限を持つ人は、そのアクセスを使用して、その名前空間のあらゆるSecretを読むことができます。これには、Deploymentを作成する能力などの間接的なアクセスも含まれます。
+
+Secretsを安全に使用するには、以下の手順を推奨します。
+
+1. Secretsを[安全に暗号化する](/docs/tasks/administer-cluster/encrypt-data/)
+2. Secretsのデータの読み取りを制限する[RBACルール](/docs/reference/access-authn-authz/authorization/)の有効化または設定
+3. 適切な場合には、RBACなどのメカニズムを使用して、どの原則が新しいSecretの作成や既存のSecretの置き換えを許可されるかを制限します。
+
+{{< /caution >}}
@@ -30,6 +45,7 @@ PodがSecretを使う方法は3種類あります。
- [コンテナの環境変数](#using-secrets-as-environment-variables)として利用する
- Podを生成するために[kubeletがイメージをpullする](#using-imagepullsecrets)ときに使用する
+KubernetesのコントロールプレーンでもSecretsは使われています。例えば、[bootstrap token Secrets](#bootstrap-token-secrets)は、ノード登録を自動化するための仕組みです。
Secretオブジェクトの名称は正当な[DNSサブドメイン名](/ja/docs/concepts/overview/working-with-objects/names/#dns-subdomain-names)である必要があります。
シークレットの構成ファイルを作成するときに、`data`および/または`stringData`フィールドを指定できます。`data`フィールドと`stringData`フィールドはオプションです。
@@ -145,7 +161,8 @@ Docker configファイルがない場合、または`kubectl`を使用してDock
kubectl create secret docker-registry secret-tiger-docker \
--docker-username=tiger \
--docker-password=pass113 \
- --docker-email=tiger@acme.com
+ --docker-email=tiger@acme.com \
+ --docker-server=my-registry.example:5000
```
このコマンドは、`kubernetes.io/dockerconfigjson`型のSecretを作成します。
@@ -153,15 +170,21 @@ kubectl create secret docker-registry secret-tiger-docker \
```json
{
- "auths": {
- "https://index.docker.io/v1/": {
- "username": "tiger",
- "password": "pass113",
- "email": "tiger@acme.com",
- "auth": "dGlnZXI6cGFzczExMw=="
- }
- }
+ "apiVersion": "v1",
+ "data": {
+ ".dockerconfigjson": "eyJhdXRocyI6eyJteS1yZWdpc3RyeTo1MDAwIjp7InVzZXJuYW1lIjoidGlnZXIiLCJwYXNzd29yZCI6InBhc3MxMTMiLCJlbWFpbCI6InRpZ2VyQGFjbWUuY29tIiwiYXV0aCI6ImRHbG5aWEk2Y0dGemN6RXhNdz09In19fQ=="
+ },
+ "kind": "Secret",
+ "metadata": {
+ "creationTimestamp": "2021-07-01T07:30:59Z",
+ "name": "secret-tiger-docker",
+ "namespace": "default",
+ "resourceVersion": "566718",
+ "uid": "e15c1d7b-9071-4100-8681-f3a7a2ce89ca"
+ },
+ "type": "kubernetes.io/dockerconfigjson"
}
+
```
### Basic authentication Secret
@@ -1062,3 +1085,4 @@ Podに複数のコンテナが含まれることもあります。しかし、Po
- [`kubectl`を使用してSecretを管理する](/docs/tasks/configmap-secret/managing-secret-using-kubectl/)方法を学ぶ
- [config fileを使用してSecretを管理する](/docs/tasks/configmap-secret/managing-secret-using-config-file/)方法を学ぶ
- [kustomizeを使用してSecretを管理する](/docs/tasks/configmap-secret/managing-secret-using-kustomize/)方法を学ぶ
+- [SecretのAPIリファレンス](/docs/reference/kubernetes-api/config-and-storage-resources/secret-v1/)を読む
diff --git a/content/ja/docs/concepts/scheduling-eviction/api-eviction.md b/content/ja/docs/concepts/scheduling-eviction/api-eviction.md
new file mode 100644
index 0000000000..5092c96b19
--- /dev/null
+++ b/content/ja/docs/concepts/scheduling-eviction/api-eviction.md
@@ -0,0 +1,92 @@
+---
+title: APIを起点とした退避
+content_type: concept
+weight: 70
+---
+
+{{< glossary_definition term_id="api-eviction" length="short" >}}
+
+Eviction APIを直接呼び出すか、`kubectl drain`コマンドのように{{}}のクライアントを使って退避を要求することが可能です。これにより、`Eviction`オブジェクトを作成し、APIサーバーにPodを終了させます。
+
+APIを起点とした退避は[`PodDisruptionBudgets`](/docs/tasks/run-application/configure-pdb/)と[`terminationGracePeriodSeconds`](/ja/docs/concepts/workloads/pods/pod-lifecycle#pod-termination)の設定を優先します。
+
+APIを使用してPodのEvictionオブジェクトを作成することは、Podに対してポリシー制御された[`DELETE`操作](/docs/reference/kubernetes-api/workload-resources/pod-v1/#delete-delete-a-pod)を実行することに似ています。
+
+## Eviction APIの実行 {#calling-the-eviction-api}
+
+Kubernetes APIへアクセスして`Eviction`オブジェクトを作るために[Kubernetesのプログラミング言語のクライアント](/docs/tasks/administer-cluster/access-cluster-api/#programmatic-access-to-the-api)を使用できます。
+そのためには、次の例のようなデータをPOSTすることで操作を試みることができます。
+
+{{< tabs name="Eviction_example" >}}
+{{% tab name="policy/v1" %}}
+{{< note >}}
+`policy/v1`においてEvictionはv1.22以上で利用可能です。それ以前のリリースでは、`policy/v1beta1`を使用してください。
+{{< /note >}}
+
+```json
+{
+ "apiVersion": "policy/v1",
+ "kind": "Eviction",
+ "metadata": {
+ "name": "quux",
+ "namespace": "default"
+ }
+}
+```
+{{% /tab %}}
+{{% tab name="policy/v1beta1" %}}
+{{< note >}}
+v1.22で非推奨となり、`policy/v1`が採用されました。
+{{< /note >}}
+
+```json
+{
+ "apiVersion": "policy/v1beta1",
+ "kind": "Eviction",
+ "metadata": {
+ "name": "quux",
+ "namespace": "default"
+ }
+}
+```
+{{% /tab %}}
+{{< /tabs >}}
+
+また、以下の例のように`curl`や`wget`を使ってAPIにアクセスすることで、操作を試みることもできます。
+
+```bash
+curl -v -H 'Content-type: application/json' https://your-cluster-api-endpoint.example/api/v1/namespaces/default/pods/quux/eviction -d @eviction.json
+```
+
+## APIを起点とした退避の仕組み {#how-api-initiated-eviction-works}
+
+APIを使用して退去を要求した場合、APIサーバーはアドミッションチェックを行い、以下のいずれかを返します。
+
+* `200 OK`:この場合、退去が許可されると`Eviction`サブリソースが作成され、PodのURLに`DELETE`リクエストを送るのと同じように、Podが削除されます。
+* `429 Too Many Requests`:{{}}の設定により、現在退去が許可されていないことを示します。しばらく時間を空けてみてください。また、APIのレート制限のため、このようなレスポンスが表示されることもあります。
+* `500 Internal Server Error`:複数のPodDisruptionBudgetが同じPodを参照している場合など、設定に誤りがあり退去が許可されないことを示します。
+
+退去させたいPodがPodDisruptionBudgetを持つワークロードの一部でない場合、APIサーバーは常に`200 OK`を返して退去を許可します。
+
+APIサーバーが退去を許可した場合、以下の流れでPodが削除されます。
+
+1. APIサーバーの`Pod`リソースの削除タイムスタンプが更新され、APIサーバーは`Pod`リソースが終了したと見なします。また`Pod`リソースは、設定された猶予期間が設けられます。
+1. ローカルのPodが動作しているNodeの{{}}は、`Pod`リソースが終了するようにマークされていることに気付き、Podの適切なシャットダウンを開始します。
+1. kubeletがPodをシャットダウンしている間、コントロールプレーンは{{}}オブジェクトからPodを削除します。その結果、コントローラーはPodを有効なオブジェクトと見なさないようになります。
+1. Podの猶予期間が終了すると、kubeletはローカルPodを強制的に終了します。
+1. kubeletはAPIサーバーに`Pod`リソースを削除するように指示します。
+1. APIサーバーは`Pod`リソースを削除します。
+
+## トラブルシューティング {#troubleshooting-stuck-evictions}
+
+場合によっては、アプリケーションが壊れた状態になり、対処しない限りEviction APIが`429`または`500`レスポンスを返すだけとなることがあります。例えば、ReplicaSetがアプリケーション用のPodを作成しても、新しいPodが`Ready`状態にならない場合などです。また、最後に退去したPodの終了猶予期間が長い場合にも、この事象が見られます。
+
+退去が進まない場合は、以下の解決策を試してみてください。
+
+* 問題を引き起こしている自動化された操作を中止または一時停止し、操作を再開する前に、スタックしているアプリケーションを調査を行ってください。
+* しばらく待ってから、Eviction APIを使用する代わりに、クラスターのコントロールプレーンから直接Podを削除してください。
+
+## {{% heading "whatsnext" %}}
+* [Pod Disruption Budget](/docs/tasks/run-application/configure-pdb/)でアプリケーションを保護する方法について学ぶ
+* [Node不足による退避](/docs/concepts/scheduling-eviction/node-pressure-eviction/)について学ぶ
+* [Podの優先度とプリエンプション](/docs/concepts/scheduling-eviction/pod-priority-preemption/)について学ぶ
diff --git a/content/ja/docs/concepts/scheduling-eviction/kube-scheduler.md b/content/ja/docs/concepts/scheduling-eviction/kube-scheduler.md
index d1b249f24e..12a7971d88 100644
--- a/content/ja/docs/concepts/scheduling-eviction/kube-scheduler.md
+++ b/content/ja/docs/concepts/scheduling-eviction/kube-scheduler.md
@@ -1,7 +1,7 @@
---
title: Kubernetesのスケジューラー
content_type: concept
-weight: 60
+weight: 10
---
@@ -62,9 +62,9 @@ _スコアリング_ ステップでは、Podを割り当てるのに最も適
* [Podトポロジーの分散制約](/docs/concepts/workloads/pods/pod-topology-spread-constraints/)を参照してください。
* kube-schedulerの[リファレンスドキュメント](/docs/reference/command-line-tools-reference/kube-scheduler/)を参照してください。
* [複数のスケジューラーの設定](/docs/tasks/administer-cluster/configure-multiple-schedulers/)について学んでください。
-* [トポロジーの管理ポリシー](/docs/tasks/administer-cluster/topology-manager/)について学んでください。
-* [Podのオーバーヘッド](/docs/concepts/scheduling-eviction/pod-overhead/)について学んでください。
+* [トポロジーの管理ポリシー](/ja/docs/tasks/administer-cluster/topology-manager/)について学んでください。
+* [Podのオーバーヘッド](/ja/docs/concepts/scheduling-eviction/pod-overhead/)について学んでください。
* ボリュームを使用するPodのスケジューリングについて以下で学んでください。
* [Volume Topology Support](/docs/concepts/storage/storage-classes/#volume-binding-mode)
- * [ストレージ容量の追跡](/ja//ja/docs/concepts/storage/storage-capacity/)
+ * [ストレージ容量の追跡](/ja/docs/concepts/storage/storage-capacity/)
* [Node-specific Volume Limits](/docs/concepts/storage/storage-limits/)
diff --git a/content/ja/docs/concepts/scheduling-eviction/resource-bin-packing.md b/content/ja/docs/concepts/scheduling-eviction/resource-bin-packing.md
new file mode 100644
index 0000000000..fd2404984c
--- /dev/null
+++ b/content/ja/docs/concepts/scheduling-eviction/resource-bin-packing.md
@@ -0,0 +1,197 @@
+---
+title: 拡張リソースのリソースビンパッキング
+content_type: concept
+weight: 80
+---
+
+
+
+{{< feature-state for_k8s_version="v1.16" state="alpha" >}}
+
+kube-schedulerでは、優先度関数`RequestedToCapacityRatioResourceAllocation`を使用した、
+拡張リソースを含むリソースのビンパッキングを有効化できます。優先度関数はそれぞれのニーズに応じて、kube-schedulerを微調整するために使用できます。
+
+
+
+## `RequestedToCapacityRatioResourceAllocation`を使用したビンパッキングの有効化
+
+Kubernetesでは、キャパシティー比率への要求に基づいたNodeのスコアリングをするために、各リソースの重みと共にリソースを指定することができます。これにより、ユーザーは適切なパラメーターを使用することで拡張リソースをビンパックすることができ、大規模クラスターにおける希少なリソースを有効活用できるようになります。優先度関数`RequestedToCapacityRatioResourceAllocation`の動作は`RequestedToCapacityRatioArgs`と呼ばれる設定オプションによって変わります。この引数は`shape`と`resources`パラメーターによって構成されます。`shape`パラメーターは`utilization`と`score`の値に基づいて、最も要求が多い場合か最も要求が少ない場合の関数をチューニングできます。`resources`パラメーターは、スコアリングの際に考慮されるリソース名の`name`と、各リソースの重みを指定する`weight`で構成されます。
+
+以下は、拡張リソース`intel.com/foo`と`intel.com/bar`のビンパッキングに`requestedToCapacityRatioArguments`を設定する例になります。
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta1
+kind: KubeSchedulerConfiguration
+profiles:
+# ...
+ pluginConfig:
+ - name: RequestedToCapacityRatio
+ args:
+ shape:
+ - utilization: 0
+ score: 10
+ - utilization: 100
+ score: 0
+ resources:
+ - name: intel.com/foo
+ weight: 3
+ - name: intel.com/bar
+ weight: 5
+```
+スケジューラーには、kube-schedulerフラグ`--config=/path/to/config/file`を使用して`KubeSchedulerConfiguration`のファイルを指定することで渡すことができます。
+
+**この機能はデフォルトで無効化されています**
+
+### 優先度関数のチューニング
+
+`shape`は`RequestedToCapacityRatioPriority`関数の動作を指定するために使用されます。
+
+```yaml
+shape:
+ - utilization: 0
+ score: 0
+ - utilization: 100
+ score: 10
+```
+
+上記の引数は、`utilization`が0%の場合は0、`utilization`が100%の場合は10という`score`をNodeに与え、ビンパッキングの動作を有効にしています。最小要求を有効にするには、次のようにスコアを反転させる必要があります。
+
+```yaml
+shape:
+ - utilization: 0
+ score: 10
+ - utilization: 100
+ score: 0
+```
+
+`resources`はオプションパラメーターで、デフォルトでは以下の通りです。
+
+``` yaml
+resources:
+ - name: cpu
+ weight: 1
+ - name: memory
+ weight: 1
+```
+
+
+以下のように拡張リソースの追加に利用できます。
+
+```yaml
+resources:
+ - name: intel.com/foo
+ weight: 5
+ - name: cpu
+ weight: 3
+ - name: memory
+ weight: 1
+```
+
+`weight`はオプションパラメーターで、指定されてない場合1が設定されます。また、マイナスの値は設定できません。
+
+### キャパシティ割り当てのためのNodeスコアリング
+
+このセクションは、本機能の内部詳細について理解したい方を対象としています。以下は、与えられた値に対してNodeのスコアがどのように計算されるかの例です。
+
+要求されたリソース:
+
+```
+intel.com/foo : 2
+memory: 256MB
+cpu: 2
+```
+
+リソースの重み:
+
+```
+intel.com/foo : 5
+memory: 1
+cpu: 3
+```
+
+`shape`の値 {{0, 0}, {100, 10}}
+
+Node1のスペック:
+
+```
+Available:
+ intel.com/foo: 4
+ memory: 1 GB
+ cpu: 8
+
+Used:
+ intel.com/foo: 1
+ memory: 256MB
+ cpu: 1
+```
+
+Nodeのスコア:
+
+```
+intel.com/foo = resourceScoringFunction((2+1),4)
+ = (100 - ((4-3)*100/4)
+ = (100 - 25)
+ = 75 # requested + used = 75% * available
+ = rawScoringFunction(75)
+ = 7 # floor(75/10)
+
+memory = resourceScoringFunction((256+256),1024)
+ = (100 -((1024-512)*100/1024))
+ = 50 # requested + used = 50% * available
+ = rawScoringFunction(50)
+ = 5 # floor(50/10)
+
+cpu = resourceScoringFunction((2+1),8)
+ = (100 -((8-3)*100/8))
+ = 37.5 # requested + used = 37.5% * available
+ = rawScoringFunction(37.5)
+ = 3 # floor(37.5/10)
+
+NodeScore = (7 * 5) + (5 * 1) + (3 * 3) / (5 + 1 + 3)
+ = 5
+```
+
+Node2のスペック:
+
+```
+Available:
+ intel.com/foo: 8
+ memory: 1GB
+ cpu: 8
+Used:
+ intel.com/foo: 2
+ memory: 512MB
+ cpu: 6
+```
+
+Nodeのスコア:
+
+```
+intel.com/foo = resourceScoringFunction((2+2),8)
+ = (100 - ((8-4)*100/8)
+ = (100 - 50)
+ = 50
+ = rawScoringFunction(50)
+ = 5
+
+memory = resourceScoringFunction((256+512),1024)
+ = (100 -((1024-768)*100/1024))
+ = 75
+ = rawScoringFunction(75)
+ = 7
+
+cpu = resourceScoringFunction((2+6),8)
+ = (100 -((8-8)*100/8))
+ = 100
+ = rawScoringFunction(100)
+ = 10
+
+NodeScore = (5 * 5) + (7 * 1) + (10 * 3) / (5 + 1 + 3)
+ = 7
+
+```
+
+## {{% heading "whatsnext" %}}
+
+- [スケジューリングフレームワーク](/ja/docs/concepts/scheduling-eviction/scheduling-framework/)について更に読む
+- [スケジューラーの設定](/docs/reference/scheduling/config/)について更に読む
diff --git a/content/ja/docs/concepts/security/pod-security-standards.md b/content/ja/docs/concepts/security/pod-security-standards.md
index 098ff119d6..f55dc75ef5 100644
--- a/content/ja/docs/concepts/security/pod-security-standards.md
+++ b/content/ja/docs/concepts/security/pod-security-standards.md
@@ -49,6 +49,25 @@ _Pod Security Policy_ はクラスターレベルのリソースで、Pod定義
項目
ポリシー
+
+ ホストのプロセス
+
+ Windows Podは、Windowsノードへの特権的なアクセスを可能にするHostProcess コンテナを実行する機能を提供します。ベースラインポリシーでは、ホストへの特権的なアクセスは禁止されています。HostProcess Podは、Kubernetes v1.22時点ではアルファ版の機能です。
+ ホストのネームスペースの共有は無効化すべきです。
+ 制限されるフィールド
+
+ spec.securityContext.windowsOptions.hostProcess
+ spec.containers[*].securityContext.windowsOptions.hostProcess
+ spec.initContainers[*].securityContext.windowsOptions.hostProcess
+ spec.ephemeralContainers[*].securityContext.windowsOptions.hostProcess
+
+ 認められる値
+
+ Undefined/nil
+ false
+
+
+
ホストのネームスペース
@@ -57,7 +76,7 @@ _Pod Security Policy_ はクラスターレベルのリソースで、Pod定義
spec.hostNetwork
spec.hostPID
spec.hostIPC
- 認められる値: false
+ 認められる値: false, Undefined/nil
@@ -67,6 +86,7 @@ _Pod Security Policy_ はクラスターレベルのリソースで、Pod定義
制限されるフィールド:
spec.containers[*].securityContext.privileged
spec.initContainers[*].securityContext.privileged
+ spec.ephemeralContainers[*].securityContext.privileged
認められる値: false, undefined/nil
@@ -77,7 +97,22 @@ _Pod Security Policy_ はクラスターレベルのリソースで、Pod定義
制限されるフィールド:
spec.containers[*].securityContext.capabilities.add
spec.initContainers[*].securityContext.capabilities.add
- 認められる値: 空 (または既知のリストに限定)
+ spec.ephemeralContainers[*].securityContext.capabilities.add
+ 認められる値:
+ Undefined/nil
+ AUDIT_WRITE
+ CHOWN
+ DAC_OVERRIDE
+ FOWNER
+ FSETID
+ KILL
+ MKNOD
+ NET_BIND_SERVICE
+ SETFCAP
+ SETGID
+ SETPCAP
+ SETUID
+ SYS_CHROOT
@@ -96,16 +131,17 @@ _Pod Security Policy_ はクラスターレベルのリソースで、Pod定義
制限されるフィールド:
spec.containers[*].ports[*].hostPort
spec.initContainers[*].ports[*].hostPort
+ spec.ephemeralContainers[*].ports[*].hostPort
認められる値: 0, undefined (または既知のリストに限定)
- AppArmor (任意)
+ AppArmor(任意)
サポートされるホストでは、AppArmorの'runtime/default'プロファイルがデフォルトで適用されます。デフォルトのポリシーはポリシーの上書きや無効化を防ぎ、許可されたポリシーのセットを上書きできないよう制限すべきです。
制限されるフィールド:
metadata.annotations['container.apparmor.security.beta.kubernetes.io/*']
- 認められる値: 'runtime/default', undefined
+ 認められる値: 'runtime/default', undefined, localhost/*
@@ -116,7 +152,24 @@ _Pod Security Policy_ はクラスターレベルのリソースで、Pod定義
spec.securityContext.seLinuxOptions
spec.containers[*].securityContext.seLinuxOptions
spec.initContainers[*].securityContext.seLinuxOptions
- 認められる値: undefined/nil
+ spec.ephemeralContainers[*].securityContext.seLinuxOptions.type
+ 認められる値: undefined/nil
+ Undefined/""
+ container_t
+ container_init_t
+ container_kvm_t
+
+ 制限されるフィールド:
+ spec.securityContext.seLinuxOptions.user
+ spec.containers[*].securityContext.seLinuxOptions.user
+ spec.initContainers[*].securityContext.seLinuxOptions.user
+ spec.ephemeralContainers[*].securityContext.seLinuxOptions.user
+ spec.securityContext.seLinuxOptions.role
+ spec.containers[*].securityContext.seLinuxOptions.role
+ spec.initContainers[*].securityContext.seLinuxOptions.role
+ spec.ephemeralContainers[*].securityContext.seLinuxOptions.role
+ 認められる値: undefined/nil
+ Undefined/""
@@ -126,9 +179,29 @@ _Pod Security Policy_ はクラスターレベルのリソースで、Pod定義
制限されるフィールド:
spec.containers[*].securityContext.procMount
spec.initContainers[*].securityContext.procMount
- 認められる値: undefined/nil, 'Default'
+ spec.ephemeralContainers[*].securityContext.procMount
+ 認められる値: undefined/nil, 'Default'
+
+ Seccomp
+
+ Seccompプロファイルを明示的にUnconfinedに設定することはできません。
+ Restricted Fields
+
+ spec.securityContext.seccompProfile.type
+ spec.containers[*].securityContext.seccompProfile.type
+ spec.initContainers[*].securityContext.seccompProfile.type
+ spec.ephemeralContainers[*].securityContext.seccompProfile.type
+
+ Allowed Values
+
+ Undefined/nil
+ RuntimeDefault
+ Localhost
+
+
+
Sysctl
@@ -169,27 +242,27 @@ _Pod Security Policy_ はクラスターレベルのリソースで、Pod定義
HostPathボリュームの制限に加え、制限プロファイルではコアでない種類のボリュームの利用をPersistentVolumeにより定義されたものに限定します。
制限されるフィールド:
- spec.volumes[*].hostPath
- spec.volumes[*].gcePersistentDisk
- spec.volumes[*].awsElasticBlockStore
- spec.volumes[*].gitRepo
- spec.volumes[*].nfs
- spec.volumes[*].iscsi
- spec.volumes[*].glusterfs
- spec.volumes[*].rbd
- spec.volumes[*].flexVolume
- spec.volumes[*].cinder
- spec.volumes[*].cephFS
- spec.volumes[*].flocker
- spec.volumes[*].fc
- spec.volumes[*].azureFile
- spec.volumes[*].vsphereVolume
- spec.volumes[*].quobyte
- spec.volumes[*].azureDisk
- spec.volumes[*].portworxVolume
- spec.volumes[*].scaleIO
- spec.volumes[*].storageos
- spec.volumes[*].csi
+ spec.volumes[*].hostPath
+ spec.volumes[*].gcePersistentDisk
+ spec.volumes[*].awsElasticBlockStore
+ spec.volumes[*].gitRepo
+ spec.volumes[*].nfs
+ spec.volumes[*].iscsi
+ spec.volumes[*].glusterfs
+ spec.volumes[*].rbd
+ spec.volumes[*].flexVolume
+ spec.volumes[*].cinder
+ spec.volumes[*].cephfs
+ spec.volumes[*].flocker
+ spec.volumes[*].fc
+ spec.volumes[*].azureFile
+ spec.volumes[*].vsphereVolume
+ spec.volumes[*].quobyte
+ spec.volumes[*].azureDisk
+ spec.volumes[*].portworxVolume
+ spec.volumes[*].scaleIO
+ spec.volumes[*].storageos
+ spec.volumes[*].photonPersistentDisk
認められる値: undefined/nil
@@ -200,6 +273,7 @@ _Pod Security Policy_ はクラスターレベルのリソースで、Pod定義
制限されるフィールド:
spec.containers[*].securityContext.allowPrivilegeEscalation
spec.initContainers[*].securityContext.allowPrivilegeEscalation
+ spec.ephemeralContainers[*].securityContext.allowPrivilegeEscalation
認められる値: false
@@ -211,6 +285,7 @@ _Pod Security Policy_ はクラスターレベルのリソースで、Pod定義
spec.securityContext.runAsNonRoot
spec.containers[*].securityContext.runAsNonRoot
spec.initContainers[*].securityContext.runAsNonRoot
+ spec.ephemeralContainers[*].securityContext.runAsNonRoot
認められる値: true
@@ -242,6 +317,36 @@ _Pod Security Policy_ はクラスターレベルのリソースで、Pod定義
undefined / nil
+
+ Capabilities (v1.22+)
+
+
+ コンテナはすべてのケイパビリティを削除する必要があり、NET_BIND_SERVICEケイパビリティを追加することだけが許可されています。
+
+ Restricted Fields
+
+ spec.containers[*].securityContext.capabilities.drop
+ spec.initContainers[*].securityContext.capabilities.drop
+ spec.ephemeralContainers[*].securityContext.capabilities.drop
+
+ Allowed Values
+
+ Any list of capabilities that includes ALL
+
+
+ Restricted Fields
+
+ spec.containers[*].securityContext.capabilities.add
+ spec.initContainers[*].securityContext.capabilities.add
+ spec.ephemeralContainers[*].securityContext.capabilities.add
+
+ Allowed Values
+
+ Undefined/nil
+ NET_BIND_SERVICE
+
+
+
@@ -284,6 +389,14 @@ Kubernetesでは、Linuxベースのワークロードと比べてWindowsの使
特に、PodのSecurityContextフィールドは[Windows環境では効果がありません](/ja/docs/setup/production-environment/windows/intro-windows-in-kubernetes/#v1-podsecuritycontext)。
したがって、現段階では標準化されたセキュリティポリシーは存在しません。
+Windows Podに制限付きプロファイルを適用すると、実行時にPodに影響が出る場合があります。
+制限付きプロファイルでは、Linux固有の制限(seccompプロファイルや特権昇格の不許可など)を適用する必要があります。
+kubeletおよび/またはそのコンテナランタイムがこれらのLinux固有の値を無視した場合、Windows Podは制限付きプロファイル内で正常に動作します。
+ただし、強制力がないため、Windows コンテナを使用するPodについては、ベースラインプロファイルと比較して追加の制限はありません。
+
+HostProcess Podを作成するためのHostProcessフラグの使用は、特権的なポリシーに沿ってのみ行われるべきです。
+Windows HostProcess Podの作成は、ベースラインおよび制限されたポリシーの下でブロックされているため、いかなるHostProcess Podも特権的であるとみなされるべきです。
+
### サンドボックス化されたPodはどのように扱えばよいでしょうか?
現在のところ、Podがサンドボックス化されていると見なされるかどうかを制御できるAPI標準はありません。
diff --git a/content/ja/docs/concepts/services-networking/topology-aware-hints.md b/content/ja/docs/concepts/services-networking/topology-aware-hints.md
new file mode 100644
index 0000000000..ed26561f40
--- /dev/null
+++ b/content/ja/docs/concepts/services-networking/topology-aware-hints.md
@@ -0,0 +1,101 @@
+---
+title: トポロジーを意識したヒント
+content_type: concept
+weight: 45
+---
+
+
+
+
+{{< feature-state for_k8s_version="v1.23" state="beta" >}}
+
+*Topology Aware Hint*は、クライアントがendpointをどのように使用するかについての提案を含めることにより、トポロジーを考慮したルーティングを可能にします。このアプローチでは、EndpointSliceおよび/またはEndpointオブジェクトの消費者が、これらのネットワークエンドポイントへのトラフィックを、それが発生した場所の近くにルーティングできるように、メタデータを追加します。
+
+たとえば、局所的にトラフィックをルーティングすることで、コストを削減したり、ネットワークパフォーマンスを向上させたりできます。
+
+
+
+## 動機
+
+Kubernetesクラスターは、マルチゾーン環境で展開されることが多くなっています。
+*Topology Aware Hint*は、トラフィックを発信元のゾーン内に留めておくのに役立つメカニズムを提供します。このコンセプトは、一般に「Topology Aware Routing」と呼ばれています。EndpointSliceコントローラーは{{< glossary_tooltip term_id="Service" >}}のendpointを計算する際に、各endpointのトポロジー(リージョンとゾーン)を考慮し、ゾーンに割り当てるためのヒントフィールドに値を入力します。
+EndpointSliceコントローラーは、各endpointのトポロジー(リージョンとゾーン)を考慮し、ゾーンに割り当てるためのヒントフィールドに入力します。
+{{< glossary_tooltip term_id="kube-proxy" text="kube-proxy" >}}のようなクラスターコンポーネントは、次にこれらのヒントを消費し、それらを使用してトラフィックがルーティングされる方法に影響を与えることが可能です(トポロジー的に近いendpointを優先します)。
+
+
+## Topology Aware Hintを使う
+
+`service.kubernetes.io/topology-aware-hints`アノテーションを`auto`に設定すると、サービスに対してTopology Aware Hintを有効にすることができます。これはEndpointSliceコントローラーが安全と判断した場合に、トポロジーヒントを設定するように指示します。
+重要なのは、これはヒントが常に設定されることを保証するものではないことです。
+
+## 使い方 {#implementation}
+
+この機能を有効にする機能は、EndpointSliceコントローラーとkube-proxyの2つのコンポーネントに分かれています。このセクションでは、各コンポーネントがこの機能をどのように実装しているか、高レベルの概要を説明します。
+
+### EndpointSliceコントローラー {#implementation-control-plane}
+
+この機能が有効な場合、EndpointSliceコントローラーはEndpointSliceにヒントを設定する役割を担います。
+コントローラーは、各ゾーンに比例した量のendpointを割り当てます。
+この割合は、そのゾーンで実行されているノードの[割り当て可能な](/ja/docs/task/administer-cluster/reserve-compute-resources/#node-allocatable)CPUコアを基に決定されます。
+
+たとえば、あるゾーンに2つのCPUコアがあり、別のゾーンに1つのCPUコアしかない場合、コントローラーは2つのCPUコアを持つゾーンに2倍のendpointを割り当てます。
+
+次の例は、ヒントが入力されたときのEndpointSliceの様子を示しています。
+
+```yaml
+apiVersion: discovery.k8s.io/v1
+kind: EndpointSlice
+metadata:
+ name: example-hints
+ labels:
+ kubernetes.io/service-name: example-svc
+addressType: IPv4
+ports:
+ - name: http
+ protocol: TCP
+ port: 80
+endpoints:
+ - addresses:
+ - "10.1.2.3"
+ conditions:
+ ready: true
+ hostname: pod-1
+ zone: zone-a
+ hints:
+ forZones:
+ - name: "zone-a"
+```
+
+### kube-proxy {#implementation-kube-proxy}
+
+kube-proxyは、EndpointSliceコントローラーによって設定されたヒントに基づいて、ルーティング先のendpointをフィルター処理します。ほとんどの場合、これはkube-proxyが同じゾーン内のendpointにトラフィックをルーティングできることを意味します。コントローラーが別のゾーンからendpointを割り当てて、ゾーン間でendpointがより均等に分散されるようにする場合があります。これにより、一部のトラフィックが他のゾーンにルーティングされます。
+
+## セーフガード
+
+各ノードのKubernetesコントロールプレーンとkube-proxyは、Topology Aware Hintを使用する前に、いくつかのセーフガードルールを適用します。これらがチェックアウトされない場合、kube-proxyは、ゾーンに関係なく、クラスター内のどこからでもendpointを選択します。
+
+1. **endpointの数が不十分です:** クラスター内のゾーンよりもendpointが少ない場合、コントローラーはヒントを割り当てません。
+
+2. **バランスの取れた割り当てを実現できません:** 場合によっては、ゾーン間でendpointのバランスの取れた割り当てを実現できないことがあります。たとえば、ゾーンaがゾーンbの2倍の大きさであるが、endpointが2つしかない場合、ゾーンaに割り当てられたendpointはゾーンbの2倍のトラフィックを受信する可能性があります。この「予想される過負荷」値が各ゾーンの許容しきい値を下回ることができない場合、コントローラーはヒントを割り当てません。重要なことに、これはリアルタイムのフィードバックに基づいていません。それでも、個々のendpointが過負荷になる可能性があります。
+
+3. **1つ以上のノードの情報が不十分です:** ノードに`topology.kubernetes.io/zone`ラベルがないか、割り当て可能なCPUの値を報告していない場合、コントロールプレーンはtopology-aware endpoint hintsを設定しないため、kube-proxyはendpointをゾーンでフィルタリングしません。
+
+4. **1つ以上のendpointにゾーンヒントが存在しません:** これが発生すると、kube-proxyはTopology Aware Hintから、またはTopology Aware Hintへの移行が進行中であると見なします。この状態のサービスに対してendpointをフィルタリングすることは危険であるため、kube-proxyはすべてのendpointを使用するようにフォールバックします。
+
+5. **ゾーンはヒントで表されません:** kube-proxyが、実行中のゾーンをターゲットとするヒントを持つendpointを1つも見つけることができない場合、すべてのゾーンのendpointを使用することになります。これは既存のクラスターに新しいゾーンを追加するときに発生する可能性が最も高くなります。
+
+## 制約事項
+
+* Serviceで`externalTrafficPolicy`または`internalTrafficPolicy`が`Local`に設定されている場合、Topology Aware Hintは使用されません。同じServiceではなく、異なるServiceの同じクラスターで両方の機能を使用することができます。
+
+* このアプローチは、ゾーンのサブセットから発信されるトラフィックの割合が高いサービスではうまく機能しません。代わりに、これは着信トラフィックが各ゾーンのノードの容量にほぼ比例することを前提としています。
+
+* EndpointSliceコントローラーは、各ゾーンの比率を計算するときに、準備ができていないノードを無視します。ノードの大部分の準備ができていない場合、これは意図しない結果をもたらす可能性があります。
+
+* EndpointSliceコントローラーは、各ゾーンの比率を計算するデプロイ時に{{< glossary_tooltip text="toleration" term_id="toleration" >}}を考慮しません。サービスをバックアップするPodがクラスター内のノードのサブセットに制限されている場合、これは考慮されません。
+
+* これはオートスケーリングと相性が悪いかもしれません。例えば、多くのトラフィックが1つのゾーンから発信されている場合、そのゾーンに割り当てられたendpointのみがそのトラフィックを処理することになります。その結果、{{< glossary_tooltip text="Horizontal Pod Autoscaler" term_id="horizontal-pod-autoscaler" >}}がこのイベントを拾えなくなったり、新しく追加されたPodが別のゾーンで開始されたりする可能性があります。
+
+## {{% heading "whatsnext" %}}
+
+* [サービスとアプリケーションの接続](/ja/docs/concepts/services-networking/connect-applications-service/)を読む。
diff --git a/content/ja/docs/concepts/workloads/controllers/daemonset.md b/content/ja/docs/concepts/workloads/controllers/daemonset.md
index 26d611b157..92ab055a59 100644
--- a/content/ja/docs/concepts/workloads/controllers/daemonset.md
+++ b/content/ja/docs/concepts/workloads/controllers/daemonset.md
@@ -80,7 +80,7 @@ selector](/ja/docs/concepts/scheduling-eviction/assign-pod-node/)にマッチす
### デフォルトスケジューラーによってスケジューリングされる場合
-{{< feature-state state="stable" for-kubernetes-version="1.17" >}}
+{{< feature-state for_k8s_version="1.17" state="stable" >}}
DaemonSetは全ての利用可能なNodeが単一のPodのコピーを稼働させることを保証します。通常、Podが稼働するNodeはKubernetesスケジューラーによって選択されます。しかし、DaemonSetのPodは代わりにDaemonSetコントローラーによって作成され、スケジューリングされます。
下記の問題について説明します:
diff --git a/content/ja/docs/concepts/workloads/controllers/deployment.md b/content/ja/docs/concepts/workloads/controllers/deployment.md
index c106a6d71e..b62151fc54 100644
--- a/content/ja/docs/concepts/workloads/controllers/deployment.md
+++ b/content/ja/docs/concepts/workloads/controllers/deployment.md
@@ -68,11 +68,6 @@ Deploymentによって作成されたReplicaSetを管理しないでください
kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml
```
- {{< note >}}
- 実行したコマンドを`kubernetes.io/change-cause`というアノテーションに記録するために`--record`フラグを指定できます。
- これは将来的な問題の調査のために有効です。例えば、各Deploymentのリビジョンにおいて実行されたコマンドを見るときに便利です。
- {{< /note >}}
-
2. Deploymentが作成されたことを確認するために、`kubectl get deployments`を実行してください。
@@ -158,12 +153,12 @@ Deploymentを更新するには以下のステップに従ってください。
1. nginxのPodで、`nginx:1.14.2`イメージの代わりに`nginx:1.16.1`を使うように更新します。
```shell
- kubectl --record deployment.apps/nginx-deployment set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1
+ kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1
```
または単に次のコマンドを使用します。
```shell
- kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record
+ kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
```
実行結果は以下のとおりです。
@@ -235,7 +230,7 @@ Deploymentを更新するには以下のステップに従ってください。
次にPodを更新させたいときは、DeploymentのPodテンプレートを再度更新するだけです。
- Deploymentは、Podが更新されている間に特定の数のPodのみ停止状態になることを保証します。デフォルトでは、目標とするPod数の少なくとも25%が停止状態になることを保証します(25% max unavailable)。
+ Deploymentは、Podが更新されている間に特定の数のPodのみ停止状態になることを保証します。デフォルトでは、目標とするPod数の少なくとも75%が稼働状態であることを保証します(25% max unavailable)。
また、DeploymentはPodが更新されている間に、目標とするPod数を特定の数まで超えてPodを稼働させることを保証します。デフォルトでは、目標とするPod数に対して最大でも125%を超えてPodを稼働させることを保証します(25% max surge)。
@@ -317,7 +312,7 @@ Deploymentのリビジョンは、Deploymentのロールアウトがトリガー
* `nginx:1.16.1`の代わりに`nginx:1.161`というイメージに更新して、Deploymentの更新中にタイプミスをしたと仮定します。
```shell
- kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.161 --record=true
+ kubectl set image deployment/nginx-deployment nginx=nginx:1.161
```
実行結果は以下のとおりです。
@@ -431,15 +426,14 @@ Deploymentのリビジョンは、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.16.1 --record=true
- 3 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.161 --record=true
+ 1 kubectl apply --filename=https://k8s.io/examples/controllers/nginx-deployment.yaml
+ 2 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1
+ 3 kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.161
```
`CHANGE-CAUSE`はリビジョンの作成時にDeploymentの`kubernetes.io/change-cause`アノテーションからリビジョンにコピーされます。以下の方法により`CHANGE-CAUSE`メッセージを指定できます。
* `kubectl annotate deployment.v1.apps/nginx-deployment kubernetes.io/change-cause="image updated to 1.16.1"`の実行によりアノテーションを追加します。
- * リソースの変更時に`kubectl`コマンドの内容を記録するために`--record`フラグを追加します。
* リソースのマニフェストを手動で編集します。
2. 各リビジョンの詳細を確認するためには以下のコマンドを実行してください。
@@ -452,7 +446,7 @@ Deploymentのリビジョンは、Deploymentのロールアウトがトリガー
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.16.1 --record=true
+ Annotations: kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1
Containers:
nginx:
Image: nginx:1.16.1
@@ -512,7 +506,7 @@ Deploymentのリビジョンは、Deploymentのロールアウトがトリガー
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.16.1 --record=true
+ kubernetes.io/change-cause=kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1
Selector: app=nginx
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
diff --git a/content/ja/docs/concepts/workloads/pods/ephemeral-containers.md b/content/ja/docs/concepts/workloads/pods/ephemeral-containers.md
index beb92b3b88..b99d193308 100644
--- a/content/ja/docs/concepts/workloads/pods/ephemeral-containers.md
+++ b/content/ja/docs/concepts/workloads/pods/ephemeral-containers.md
@@ -42,7 +42,7 @@ weight: 80
エフェメラルコンテナを利用する場合には、他のコンテナ内のプロセスにアクセスできるように、[プロセス名前空間の共有](/ja/docs/tasks/configure-pod-container/share-process-namespace/)を有効にすると便利です。
-エフェメラルコンテナを利用してトラブルシューティングを行う例については、[デバッグ用のエフェメラルコンテナを使用してデバッグする](/docs/tasks/debug-application-cluster/debug-running-pod/#ephemeral-container)を参照してください。
+エフェメラルコンテナを利用してトラブルシューティングを行う例については、[デバッグ用のエフェメラルコンテナを使用してデバッグする](/docs/tasks/debug/debug-application/debug-running-pod/#ephemeral-container)を参照してください。
## Ephemeral containers API
diff --git a/content/ja/docs/contribute/review/for-approvers.md b/content/ja/docs/contribute/review/for-approvers.md
index 3a96595ea8..ea17bba99e 100644
--- a/content/ja/docs/contribute/review/for-approvers.md
+++ b/content/ja/docs/contribute/review/for-approvers.md
@@ -59,7 +59,7 @@ reviewerとapproverが最もよく使うprowコマンドには、以下のよう
{{< table caption="Prow commands for reviewing" >}}
Prowコマンド | Roleの制限 | 説明
:------------|:------------------|:-----------
-`/lgtm` | 誰でも。ただし、オートメーションがトリガされるのはReviewerまたはApproverが使用したときのみ。 | PRのレビューが完了し、変更に納得したことを知らせる。
+`/lgtm` | Organizationメンバー | PRのレビューが完了し、変更に納得したことを知らせる。
`/approve` | Approver | PRをマージすることを承認する。
`/assign` | ReviewerまたはApprover | PRのレビューまたは承認するひとを割り当てる。
`/close` | ReviewerまたはApprover | issueまたはPRをcloseする。
@@ -93,7 +93,7 @@ PRで利用できるすべてのコマンド一覧を確認するには、[Prow
`priority/important-longterm` | 6ヶ月以内に取り組む。
`priority/backlog` | 無期限に延期可能。リソースに余裕がある時に取り組む。
`priority/awaiting-more-evidence` | よいissueの可能性があるissueを見失わないようにするためのプレースホルダー。
- `help`または`good first issue` | KubernetesまたはSIG Docsでほとんど経験がない人に適したissue。より詳しい情報は、[Help WantedとGood First Issueラベル](https://github.com/kubernetes/community/blob/master/contributors/guide/help-wanted.md)を読んでください。
+ `help`または`good first issue` | KubernetesまたはSIG Docsでほとんど経験がない人に適したissue。より詳しい情報は、[Help WantedとGood First Issueラベル](https://kubernetes.dev/docs/guide/help-wanted/)を読んでください。
{{< /table >}}
あなたの裁量で、issueのオーナーシップを取り、issueに対するPRを提出してください(簡単なissueや、自分がすでに行った作業に関連するissueである場合は特に)。
diff --git a/content/ja/docs/reference/glossary/api-eviction.md b/content/ja/docs/reference/glossary/api-eviction.md
new file mode 100644
index 0000000000..25677032b9
--- /dev/null
+++ b/content/ja/docs/reference/glossary/api-eviction.md
@@ -0,0 +1,23 @@
+---
+title: APIを起点とした退避
+id: api-eviction
+date: 2021-04-27
+full_link: /ja/docs/concepts/scheduling-eviction/api-eviction/
+short_description: >
+ APIを起点とした退避は、Eviction APIを使用してEvictionオブジェクトを作成し、Podの正常終了を起動させるプロセスです。
+aka:
+tags:
+- operation
+---
+APIを起点とした退避は、[Eviction API](/docs/reference/generated/kubernetes-api/{{ }}/#create-eviction-pod-v1-core)を使用して退避オブジェクトを作成し、Podの正常終了を起動させるプロセスです。
+
+
+
+
+`kubectl drain`コマンドのようなkube-apiserverのクライアントを使用し、Eviction APIを直接呼び出すことで、退避を要求することができます。`Eviction`オブジェクトが生成された時、APIサーバーは対象のPodを終了させます。
+
+APIを起点とした退避は[`PodDisruptionBudgets`](/docs/tasks/run-application/configure-pdb/)と[`terminationGracePeriodSeconds`](/ja/docs/concepts/workloads/pods/pod-lifecycle#pod-termination)の設定を優先します。
+
+APIを起点とした退避は、[Node不足による退避](/docs/concepts/scheduling-eviction/eviction/#kubelet-eviction)とは異なります。
+
+* 詳しくは[APIを起点とした退避](/ja/docs/concepts/scheduling-eviction/api-eviction/)をご覧ください。
diff --git a/content/ja/docs/reference/glossary/cloud-controller-manager.md b/content/ja/docs/reference/glossary/cloud-controller-manager.md
index 6e9c9104da..d0e705c7c1 100644
--- a/content/ja/docs/reference/glossary/cloud-controller-manager.md
+++ b/content/ja/docs/reference/glossary/cloud-controller-manager.md
@@ -4,7 +4,7 @@ id: cloud-controller-manager
date: 2018-04-12
full_link: /ja/docs/concepts/architecture/cloud-controller/
short_description: >
- サードパーティクラウドプロバイダーにKubernetewを結合するコントロールプレーンコンポーネント
+ サードパーティクラウドプロバイダーにKubernetesを結合するコントロールプレーンコンポーネント
aka:
tags:
- core-object
diff --git a/content/ja/docs/reference/glossary/replica-set.md b/content/ja/docs/reference/glossary/replica-set.md
new file mode 100644
index 0000000000..97134927b9
--- /dev/null
+++ b/content/ja/docs/reference/glossary/replica-set.md
@@ -0,0 +1,20 @@
+---
+title: ReplicaSet
+id: replica-set
+date: 2018-04-12
+full_link: /ja/docs/concepts/workloads/controllers/replicaset/
+short_description: >
+ ReplicaSetは、指定された数のPodレプリカが一度に動作するように保証します。
+
+aka:
+tags:
+- fundamental
+- core-object
+- workload
+---
+ ReplicaSetは、任意の時点で動作しているレプリカPodの集合を保持します。(保持することを目指します。)
+
+
+{{< glossary_tooltip term_id="deployment" >}}などのワークロードオブジェクトは、ReplicaSetの仕様に基づいて、
+設定された数の{{< glossary_tooltip term_id="pod" text="Pods" >}}がクラスターで稼働することを保証するために、
+ReplicaSetを使用します。
diff --git a/content/ja/docs/reference/scheduling/_index.md b/content/ja/docs/reference/scheduling/_index.md
new file mode 100644
index 0000000000..316b774081
--- /dev/null
+++ b/content/ja/docs/reference/scheduling/_index.md
@@ -0,0 +1,5 @@
+---
+title: Scheduling
+weight: 70
+toc-hide: true
+---
diff --git a/content/ja/docs/reference/scheduling/config.md b/content/ja/docs/reference/scheduling/config.md
new file mode 100644
index 0000000000..8bf593ff4c
--- /dev/null
+++ b/content/ja/docs/reference/scheduling/config.md
@@ -0,0 +1,387 @@
+---
+title: スケジューラーの設定
+content_type: concept
+weight: 20
+---
+
+{{< feature-state for_k8s_version="v1.19" state="beta" >}}
+
+設定ファイルを作成し、そのパスをコマンドライン引数として渡すことで`kube-scheduler`の振る舞いをカスタマイズすることができます。
+
+
+
+
+
+
+スケジューリングプロファイルは、{{< glossary_tooltip text="kube-scheduler" term_id="kube-scheduler" >}}でスケジューリングの異なるステージを設定することができます。
+各ステージは、拡張点に公開されています。プラグインをそれらの拡張点に1つ以上実装することで、スケジューリングの振る舞いを変更できます。
+
+KubeSchedulerConfiguration([`v1beta2`](/docs/reference/config-api/kube-scheduler-config.v1beta2/)か[`v1beta3`](/docs/reference/config-api/kube-scheduler-config.v1beta3/))構造体を使用して、`kube-scheduler --config `を実行することで、スケジューリングプロファイルを指定することができます。
+
+最小限の設定は次の通りです。
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta2
+kind: KubeSchedulerConfiguration
+clientConnection:
+ kubeconfig: /etc/srv/kubernetes/kube-scheduler/kubeconfig
+```
+
+## プロファイル
+
+スケジューリングプロファイルは、{{< glossary_tooltip text="kube-scheduler" term_id="kube-scheduler" >}}でスケジューリングの異なるステージを設定することができます。
+各ステージは[拡張点](#extension-points)に公開されています。
+[プラグイン](#scheduling-plugins)をそれらの拡張点に1つ以上実装することで、スケジューリングの振る舞いを変更できます。
+
+単一の`kube-scheduler`インスタンスで[複数のプロファイル](#multiple-profiles)を実行するように設定することも可能です。
+
+### 拡張点 {#extension-points}
+
+スケジューリングは一連のステージで行われ、以下の拡張点に公開されています。
+
+1. `queueSort`: これらのプラグインは、スケジューリングキューにある`pending`状態のPodをソートするための順序付け関数を提供します。同時に有効化できるプラグインは1つだけです。
+1. `preFilter`: これらのプラグインは、フィルタリングをする前にPodやクラスターの情報のチェックや前処理のために使用されます。これらのプラグインは、設定された順序で呼び出されます。
+1. `filter`: これらのプラグインは、スケジューリングポリシーにおけるPredicatesに相当するもので、Podの実行不可能なNodeをフィルターするために使用されます。もし全てのNodeがフィルターされてしまった場合、Podはunschedulableとしてマークされます。
+1. `postFilter`:これらのプラグインは、Podの実行可能なNodeが見つからなかった場合、設定された順序で呼び出されます。もし`postFilter`プラグインのいずれかが、Podを __スケジュール可能__ とマークした場合、残りの`postFilter`プラグインは呼び出されません。
+1. `preScore`: これは、スコアリング前の作業を行う際に使用できる情報提供のための拡張点です。
+1. `score`: これらのプラグインはフィルタリングフェーズを通過してきたそれぞれのNodeに対してスコア付けを行います。その後スケジューラーは、最も高い重み付きスコアの合計を持つノードを選択します。
+1. `reserve`: これは、指定されたPodのためにリソースが予約された際に、プラグインに通知する、情報提供のための拡張点です。また、プラグインは`Reserve`中に失敗した際、または`Reserve`の後に呼び出される`Unreserve`も実装しています。
+1. `permit`: これらのプラグインではPodのバインディングを拒む、または遅延させることができます。
+1. `preBind`: これらのプラグインは、Podがバインドされる前に必要な処理を実行できます。
+1. `bind`: これらのプラグインはPodをNodeにバインドします。`bind`プラグインは順番に呼び出され、1つのプラグインがバインドを完了すると、残りのプラグインはスキップされます。`bind`プラグインは少なくとも1つは必要です。
+1. `postBind`: これは、Podがバインドされた後に呼び出される情報提供のための拡張点です。
+1. `multiPoint`: このフィールドは設定のみ可能で、プラグインが適用されるすべての拡張点に対して同時に有効化または無効化することができます。
+
+次の例のように、それぞれの拡張点に対して、特定の[デフォルトプラグイン](#scheduling-plugins)を無効化、または自作のプラグインを有効化することができます。
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta2
+kind: KubeSchedulerConfiguration
+profiles:
+ - plugins:
+ score:
+ disabled:
+ - name: PodTopologySpread
+ enabled:
+ - name: MyCustomPluginA
+ weight: 2
+ - name: MyCustomPluginB
+ weight: 1
+```
+
+`disabled`配列の`name`フィールドに`*`を使用することで、その拡張点の全てのデフォルトプラグインを無効化できます。また、必要に応じてプラグインの順序を入れ替える場合にも使用されます。
+
+### Scheduling plugins {#scheduling-plugins}
+
+以下のプラグインはデフォルトで有効化されており、1つ以上の拡張点に実装されています。
+
+- `ImageLocality`:Podが実行するコンテナイメージを既に持っているNodeを優先します。
+ 拡張点:`score`
+- `TaintToleration`:[TaintsとTolerations](/ja/docs/concepts/scheduling-eviction/taint-and-toleration/)を実行します。
+ 実装する拡張点:`filter`、`preScore`、`score`
+- `NodeName`: PodのSpecのNode名が、現在のNodeと一致するかをチェックします。
+ 拡張点:`filter`
+- `NodePorts`:要求されたPodのポートに対して、Nodeが空きポートを持っているかチェックします。
+ 拡張点:`preFilter`、`filter`
+- `NodeAffinity`:[nodeselectors](/ja/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector)と[Nodeアフィニティ](/ja/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity)を実行します。
+ 拡張点:`filter`、`score`
+- `PodTopologySpread`:[Podトポロジーの分散制約](/docs/concepts/workloads/pods/pod-topology-spread-constraints/)を実行します。
+ 拡張点:`preFilter`、`filter`、`preScore`、`score`
+- `NodeUnschedulable`:`.spec.unschedulable`がtrueに設定されているNodeをフィルタリングします。
+ 拡張点:`filter`.
+- `NodeResourcesFit`:Podが要求しているすべてのリソースがNodeにあるかをチェックします。スコアは3つのストラテジのうちの1つを使用します:`LeastAllocated`(デフォルト)、`MostAllocated`、 と`RequestedToCapacityRatio`
+ 拡張点:`preFilter`、`filter`、`score`
+- `NodeResourcesBalancedAllocation`:Podがスケジュールされた場合に、よりバランスの取れたリソース使用量となるNodeを優先します。
+ 拡張点:`score`
+- `VolumeBinding`:Nodeが、要求された{{< glossary_tooltip text="ボリューム" term_id="volume" >}}を持っている、もしくはバインドしているかチェックします。
+ 拡張点:`preFilter`、`filter`、`reserve`、`preBind`、`score`
+ {{< note >}}
+ `score`拡張点は、`VolumeCapacityPriority`機能が有効になっている時に有効化されます。
+ 要求されたボリュームに適合する最小のPVを優先的に使用します。
+ {{< /note >}}
+- `VolumeRestrictions`:Nodeにマウントされたボリュームが、ボリュームプロバイダ固有の制限を満たしているかを確認します。
+ 拡張点:`filter`
+- `VolumeZone`:要求されたボリュームがゾーン要件を満たしているかどうかを確認します。
+ 拡張点:`filter`
+- `NodeVolumeLimits`:NodeのCSIボリューム制限を満たすかどうかをチェックします。
+ 拡張点:`filter`
+- `EBSLimits`:NodeのAWSのEBSボリューム制限を満たすかどうかをチェックします。
+ 拡張点:`filter`
+- `GCEPDLimits`:NodeのGCP-PDボリューム制限を満たすかどうかをチェックします。
+ 拡張点:`filter`
+- `AzureDiskLimits`:NodeのAzureディスクボリューム制限を満たすかどうかをチェックします。
+ 拡張点:`filter`
+- `InterPodAffinity`:[Pod間のaffinityとanti-affinity](/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity)を実行します。
+ 拡張点:`preFilter`、`filter`、`preScore`、`score`
+- `PrioritySort`:デフォルトの優先順位に基づくソートを提供します。
+ 拡張点:`queueSort`.
+- `DefaultBinder`:デフォルトのバインディングメカニズムを提供します。
+ 拡張点:`bind`
+- `DefaultPreemption`:デフォルトのプリエンプションメカニズムを提供します。
+ 拡張点:`postFilter`
+
+また、コンポーネント設定のAPIにより、以下のプラグインを有効にすることができます。
+デフォルトでは有効になっていません。
+
+- `SelectorSpread`:{{< glossary_tooltip text="サービス" term_id="service" >}}と{{< glossary_tooltip text="レプリカセット" term_id="replica-set" >}}、{{< glossary_tooltip text="ステートフルセット" term_id="statefulset" >}}、に属するPodのNode間の拡散を優先します。
+ 拡張点:`preScore`、`score`
+- `CinderLimits`:Nodeが[`OpenStack Cinder`](https://docs.openstack.org/cinder/)ボリューム制限を満たせるかチェックします。
+ 拡張点:`filter`
+
+### 複数のプロファイル {#multiple-profiles}
+
+`kube-scheduler`は複数のプロファイルを実行するように設定することができます。
+各プロファイルは関連するスケジューラー名を持ち、その[拡張点](#extension-points)に異なるプラグインを設定することが可能です。
+
+以下のサンプル設定では、スケジューラーは2つのプロファイルで実行されます。1つはデフォルトプラグインで、もう1つはすべてのスコアリングプラグインを無効にしたものです。
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta2
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: default-scheduler
+ - schedulerName: no-scoring-scheduler
+ plugins:
+ preScore:
+ disabled:
+ - name: '*'
+ score:
+ disabled:
+ - name: '*'
+```
+
+特定のプロファイルに従ってスケジュールさせたいPodは、その`.spec.schedulerName`に、対応するスケジューラー名を含めることができます。
+
+デフォルトでは、スケジューラー名`default-scheduler`としてプロファイルが生成されます。
+このプロファイルは、上記のデフォルトプラグインを含みます。複数のプロファイルを宣言する場合は、それぞれユニークなスケジューラー名にする必要があります。
+
+もしPodがスケジューラー名を指定しない場合、kube-apiserverは`default-scheduler`を設定します。
+従って、これらのPodをスケジュールするために、このスケジューラー名を持つプロファイルが存在する必要があります。
+
+{{< note >}}
+Podのスケジューリングイベントには、ReportingControllerとして`.spec.schedulerName`が設定されています。
+リーダー選出のイベントには、リスト先頭のプロファイルのスケジューラー名が使用されます。
+{{< /note >}}
+
+{{< note >}}
+すべてのプロファイルは、`queueSort`拡張点で同じプラグインを使用し、同じ設定パラメーターを持つ必要があります (該当する場合)。これは、pending状態のPodキューがスケジューラーに1つしかないためです。
+{{< /note >}}
+
+### 複数の拡張点に適用されるプラグイン {#multipoint}
+
+`kubescheduler.config.k8s.io/v1beta3`からは、プロファイル設定に`multiPoint`というフィールドが追加され、複数の拡張点でプラグインを簡単に有効・無効化できるようになりました。
+`multiPoint`設定の目的は、カスタムプロファイルを使用する際に、ユーザーや管理者が必要とする設定を簡素化することです。
+
+`MyPlugin`というプラグインがあり、`preScore`、`score`、`preFilter`、`filter`拡張点を実装しているとします。
+すべての利用可能な拡張点で`MyPlugin`を有効化するためには、プロファイル設定は次のようにします。
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta3
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: multipoint-scheduler
+ plugins:
+ multiPoint:
+ enabled:
+ - name: MyPlugin
+```
+
+これは以下のように、`MyPlugin`を手動ですべての拡張ポイントに対して有効にすることと同じです。
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta3
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: non-multipoint-scheduler
+ plugins:
+ preScore:
+ enabled:
+ - name: MyPlugin
+ score:
+ enabled:
+ - name: MyPlugin
+ preFilter:
+ enabled:
+ - name: MyPlugin
+ filter:
+ enabled:
+ - name: MyPlugin
+```
+
+`multiPoint`を使用する利点の一つは、将来的に`MyPlugin`が別の拡張点を実装した場合に、`multiPoint`設定が自動的に新しい拡張点に対しても有効化されることです。
+
+特定の拡張点は、その拡張点の`disabled`フィールドを使用して、`MultiPoint`の展開から除外することができます。
+これは、デフォルトのプラグインを無効にしたり、デフォルト以外のプラグインを無効にしたり、ワイルドカード(`'*'`)を使ってすべてのプラグインを無効にしたりする場合に有効です。
+`Score`と`PreScore`を無効にするためには、次の例のようにします。
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta3
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: non-multipoint-scheduler
+ plugins:
+ multiPoint:
+ enabled:
+ - name: 'MyPlugin'
+ preScore:
+ disabled:
+ - name: '*'
+ score:
+ disabled:
+ - name: '*'
+```
+
+`v1beta3`では、`MultiPoint`を通じて、内部的に全ての[デフォルトプラグイン](#scheduling-plugins)が有効化されています。
+しかしながら、デフォルト値(並び順やスコアの重みなど)を柔軟に設定し直せるように、個別の拡張点は用意されています。
+例えば、2つのスコアプラグイン`DefaultScore1`と`DefaultScore2`に、重み1が設定されているとします。
+その場合、次のように重さを変更し、並べ替えることができます。
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta3
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: multipoint-scheduler
+ plugins:
+ score:
+ enabled:
+ - name: 'DefaultScore2'
+ weight: 5
+```
+
+この例では、`MultiPoint`はデフォルトプラグインであるため、明示的にプラグイン名を指定する必要はありません。
+そして、`Score`に指定されているプラグインは`DefaultScore2`のみです。
+これは、特定の拡張点を通じて設定されたプラグインは、常に`MultiPoint`プラグインよりも優先されるためです。つまり、この設定例では、結果的に2つのプラグインを両方指定することなく、並び替えが行えます。
+
+`MultiPoint`プラグインを設定する際の一般的な優先順位は、以下の通りです。
+1. 特定の拡張点が最初に実行され、その設定は他の場所で設定されたものよりも優先される
+2. `MultiPoint`を使用して、手動で設定したプラグインとその設定内容
+3. デフォルトプラグインとそのデフォルト設定
+
+上記の優先順位を示すために、次の例はこれらのプラグインをベースにします。
+
+|プラグイン|拡張点|
+|---|---|
+|`DefaultQueueSort`|`QueueSort`|
+|`CustomQueueSort`|`QueueSort`|
+|`DefaultPlugin1`|`Score`, `Filter`|
+|`DefaultPlugin2`|`Score`|
+|`CustomPlugin1`|`Score`, `Filter`|
+|`CustomPlugin2`|`Score`, `Filter`|
+
+これらのプラグインの有効な設定例は次の通りです。
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta3
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: multipoint-scheduler
+ plugins:
+ multiPoint:
+ enabled:
+ - name: 'CustomQueueSort'
+ - name: 'CustomPlugin1'
+ weight: 3
+ - name: 'CustomPlugin2'
+ disabled:
+ - name: 'DefaultQueueSort'
+ filter:
+ disabled:
+ - name: 'DefaultPlugin1'
+ score:
+ enabled:
+ - name: 'DefaultPlugin2'
+```
+
+なお、特定の拡張点に`MultiPoint`プラグインを再宣言しても、エラーにはなりません。
+特定の拡張点が優先されるため、再宣言は無視されます(ログは記録されます)。
+
+
+このサンプルは、ほとんどのコンフィグを一箇所にまとめるだけでなく、いくつかの工夫をしています。
+* カスタムの`queueSort`プラグインを有効にし、デフォルトのプラグインを無効にする。
+* `CustomPlugin1`と`CustomPlugin2`を有効にし、この拡張点のプラグイン内で、最初に実行されるようにする。
+* `filter`拡張点でのみ、`DefaultPlugin1`を無効にする。
+* `score`拡張点で`DefaultPlugin2`が最初に実行されるように並べ替える(カスタムプラグインより先に)。
+
+`v1beta3`以前のバージョンで、`multiPoint`がない場合、上記の設定例は、次のものと同等になります。
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta2
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: multipoint-scheduler
+ plugins:
+
+ # デフォルトQueueSortプラグインを無効化
+ queueSort:
+ enabled:
+ - name: 'CustomQueueSort'
+ disabled:
+ - name: 'DefaultQueueSort'
+
+ # カスタムFilterプラグインを有効化
+ filter:
+ enabled:
+ - name: 'CustomPlugin1'
+ - name: 'CustomPlugin2'
+ - name: 'DefaultPlugin2'
+ disabled:
+ - name: 'DefaultPlugin1'
+
+ # カスタムScoreプラグインを有効化し、実行順を並べ替える
+ score:
+ enabled:
+ - name: 'DefaultPlugin2'
+ weight: 1
+ - name: 'DefaultPlugin1'
+ weight: 3
+```
+
+これは複雑な例ですが、`MultiPoint`設定の柔軟性と、拡張点を設定する既存の方法とのシームレスな統合を実証しています。
+
+## スケジューラー設定の移行
+
+{{< tabs name="tab_with_md" >}}
+{{% tab name="v1beta1 → v1beta2" %}}
+* v1beta2`のバージョン`の設定では、新しい`NodeResourcesFit`プラグインをスコア拡張点で使用できます。
+ この新しい拡張機能は、`NodeResourcesLeastAllocated`、`NodeResourcesMostAllocated`、 `RequestedToCapacityRatio`プラグインの機能を組み合わせたものです。
+ 例えば、以前は`NodeResourcesMostAllocated`プラグインを使っていたなら、代わりに`NodeResourcesFitプラグインを使用し(デフォルトで有効)、`pluginConfig`に次のような`scoreStrategy`を追加することになるでしょう。
+
+ ```yaml
+ apiVersion: kubescheduler.config.k8s.io/v1beta2
+ kind: KubeSchedulerConfiguration
+ profiles:
+ - pluginConfig:
+ - args:
+ scoringStrategy:
+ resources:
+ - name: cpu
+ weight: 1
+ type: MostAllocated
+ name: NodeResourcesFit
+ ```
+
+* スケジューラープラグインの`NodeLabel`は廃止されました。代わりに[`NodeAffinity`](/ja/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity)プラグイン(デフォルトで有効)を使用することで同様の振る舞いを実現できます。
+
+* スケジューラープラグインの`ServiceAffinity`は廃止されました。代わりに[`InterPodAffinity`](/ja/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity)プラグイン(デフォルトで有効)を使用することで同様の振る舞いを実現できます。
+
+* スケジューラープラグインの`NodePreferAvoidPods`は廃止されました。代わりに[Node taints](/ja/docs/concepts/scheduling-eviction/taint-and-toleration/)を使用することで同様の振る舞いを実現できます。
+
+* v1beta2で有効化されたプラグインは、そのプラグインのデフォルトの設定より優先されます。
+
+* スケジューラーのヘルスとメトリクスのバインドアドレスに設定されている`host`や`port`が無効な場合、バリデーションに失敗します。
+{{% /tab %}}
+
+{{% tab name="v1beta2 → v1beta3" %}}
+* デフォルトで3つのプラグインの重みが増加しました。
+ * `InterPodAffinity`:1から2
+ * `NodeAffinity`:1から2
+ * `TaintToleration`:1から3
+{{% /tab %}}
+{{< /tabs >}}
+
+## {{% heading "whatsnext" %}}
+
+* [kube-schedulerリファレンス](/docs/reference/command-line-tools-reference/kube-scheduler/)を読む
+* [scheduling](/ja/docs/concepts/scheduling-eviction/kube-scheduler/)について学ぶ
+* [kube-scheduler設定(v1beta2)](/docs/reference/config-api/kube-scheduler-config.v1beta2/)のリファレンスを読む
+* [kube-scheduler設定(v1beta3)](/docs/reference/config-api/kube-scheduler-config.v1beta3/)のリファレンスを読む
diff --git a/content/ja/docs/reference/scheduling/policies.md b/content/ja/docs/reference/scheduling/policies.md
new file mode 100644
index 0000000000..dd236d3c3d
--- /dev/null
+++ b/content/ja/docs/reference/scheduling/policies.md
@@ -0,0 +1,19 @@
+---
+title: スケジューリングポリシー
+content_type: concept
+sitemap:
+ priority: 0.2 # スケジューリングポリシーは廃止されました。
+---
+
+
+
+バージョンv1.23より前のKubernetesでは、スケジューリングポリシーを使用して、*predicates*と*priorities*の処理を指定することができました。例えば、`kube-scheduler --policy-config-file `または`kube-scheduler --policy-configmap `を実行すると、スケジューリングポリシーを設定することが可能です。
+
+このスケジューリングポリシーは、バージョンv1.23以降のKubernetesではサポートされていません。関連するフラグである、`policy-config-file`、`policy-configmap`、`policy-configmap-namespace`、`use-legacy-policy-config`も同様にサポートされていません。
+代わりに、[スケジューラー設定](/ja/docs/reference/scheduling/config/)を使用してください。
+
+## {{% heading "whatsnext" %}}
+
+* [スケジューリング](/ja/docs/concepts/scheduling-eviction/kube-scheduler/)について学ぶ
+* [kube-scheduler設定](/ja/docs/reference/scheduling/config/)について学ぶ
+* [kube-scheduler設定リファレンス(v1beta3)](/docs/reference/config-api/kube-scheduler-config.v1beta3/)について読む
diff --git a/content/ja/docs/setup/best-practices/certificates.md b/content/ja/docs/setup/best-practices/certificates.md
index b1e5448be7..3ec8f9c004 100644
--- a/content/ja/docs/setup/best-practices/certificates.md
+++ b/content/ja/docs/setup/best-practices/certificates.md
@@ -74,7 +74,7 @@ CAの秘密鍵をクラスターにコピーしたくない場合、自身で全
[1]: クラスターに接続するIPおよびDNS名( [kubeadm](/docs/reference/setup-tools/kubeadm/kubeadm/)を使用する場合と同様、ロードバランサーのIPおよびDNS名、`kubernetes`、`kubernetes.default`、`kubernetes.default.svc`、`kubernetes.default.svc.cluster`、`kubernetes.default.svc.cluster.local`)
-`kind`は下記の[x509の鍵用途](https://godoc.org/k8s.io/api/certificates/v1beta1#KeyUsage)のタイプにマッピングされます:
+`kind`は下記の[x509の鍵用途](https://pkg.go.dev/k8s.io/api/certificates/v1beta1#KeyUsage)のタイプにマッピングされます:
| 種類 | 鍵の用途 |
|--------|---------------------------------------------------------------------------------|
diff --git a/content/ja/docs/setup/learning-environment/minikube.md b/content/ja/docs/setup/learning-environment/minikube.md
index 171d2b1b1e..58fce33a34 100644
--- a/content/ja/docs/setup/learning-environment/minikube.md
+++ b/content/ja/docs/setup/learning-environment/minikube.md
@@ -522,4 +522,4 @@ Minikubeの詳細については、[proposal](https://git.k8s.io/community/contr
## コミュニティ
-コントリビューションや質問、コメントは歓迎・奨励されています! Minikubeの開発者は[Slack](https://kubernetes.slack.com)の`#minikube`チャンネルにいます(Slackへの招待状は[こちら](http://slack.kubernetes.io/))。[kubernetes-dev Google Groupsメーリングリスト](https://groups.google.com/forum/#!forum/kubernetes-dev)もあります。メーリングリストに投稿する際は件名の最初に "minikube: " をつけてください。
+コントリビューションや質問、コメントは歓迎・奨励されています! Minikubeの開発者は[Slack](https://kubernetes.slack.com)の`#minikube`チャンネルにいます(Slackへの招待状は[こちら](http://slack.kubernetes.io/))。[dev@kubernetes Google Groupsメーリングリスト](https://groups.google.com/a/kubernetes.io/g/dev/)もあります。メーリングリストに投稿する際は件名の最初に "minikube: " をつけてください。
diff --git a/content/ja/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md b/content/ja/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md
index bb06ebe5db..1bac7b0018 100644
--- a/content/ja/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md
+++ b/content/ja/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md
@@ -158,7 +158,7 @@ Kubernetesの認証局は、そのままでは機能しません。
ビルトインサイナーを有効にするには、`--cluster-signing-cert-file`と`--cluster-signing-key-file`フラグを渡す必要があります。
-新しいクラスターを作成する場合は、kubeadm[設定ファイル](https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3)を使用します。
+新しいクラスターを作成する場合は、kubeadm[設定ファイル](https://pkg.go.dev/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3)を使用します。
```yaml
apiVersion: kubeadm.k8s.io/v1beta3
diff --git a/content/ja/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you.md b/content/ja/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you.md
new file mode 100644
index 0000000000..f854f051f7
--- /dev/null
+++ b/content/ja/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you.md
@@ -0,0 +1,62 @@
+---
+title: Dockershim非推奨の影響範囲を確認する
+content_type: task
+weight: 20
+---
+
+
+Kubernetesの`dockershim`コンポーネントは、DockerをKubernetesの{{< glossary_tooltip text="コンテナランタイム" term_id="container-runtime" >}}として使用することを可能にします。
+
+Kubernetesの組み込みコンポーネントである`dockershim`はリリースv1.20で非推奨となりました。
+
+このページでは、あなたのクラスターがどのようにDockerをコンテナランタイムとして使用しているか、使用中の`dockershim`が果たす役割について詳しく説明し、`dockershim`の廃止によって影響を受けるワークロードがあるかどうかをチェックするためのステップを示します。
+
+## 自分のアプリがDockerに依存しているかどうかの確認 {#find-docker-dependencies}
+
+アプリケーションコンテナの構築にDockerを使用している場合でも、これらのコンテナを任意のコンテナランタイム上で実行することができます。このようなDockerの使用は、コンテナランタイムとしてのDockerへの依存とはみなされません。
+
+代替のコンテナランタイムが使用されている場合、Dockerコマンドを実行しても動作しないか、予期せぬ出力が得られる可能性があります。
+
+このように、Dockerへの依存があるかどうかを調べることができます:
+
+1. 特権を持つPodがDockerコマンド(`docker ps`など)を実行したり、Dockerサービスを再起動したり(`systemctl restart docker.service`などのコマンド)、Docker固有のファイル(`/etc/docker/daemon.json`など)を変更しないことを確認すること。
+1. Dockerの設定ファイル(`/etc/docker/daemon.json` など)にプライベートレジストリやイメージミラーの設定がないか確認します。これらは通常、別のコンテナランタイムのために再設定する必要があります。
+1. Kubernetesインフラストラクチャーの外側のノードで実行される以下のようなスクリプトやアプリがDockerコマンドを実行しないことを確認します。
+ - トラブルシューティングのために人間がノードにSSHで接続
+ - ノードのスタートアップスクリプト
+ - ノードに直接インストールされた監視エージェントやセキュリティエージェント
+1. 上記のような特権的な操作を行うサードパーティツール。詳しくは[Migrating telemetry and security agents from dockershim](/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents) を参照してください。
+1. dockershimの動作に間接的な依存性がないことを確認します。
+ これはエッジケースであり、あなたのアプリケーションに影響を与える可能性は低いです。ツールによっては、Docker固有の動作に反応するように設定されている場合があります。例えば、特定のメトリクスでアラートを上げたり、トラブルシューティングの指示の一部として特定のログメッセージを検索したりします。そのようなツールを設定している場合、移行前にテストクラスターで動作をテストしてください。
+
+## Dockerへの依存について解説 {#role-of-dockershim}
+
+[コンテナランタイム](/ja/docs/concepts/containers/#container-runtimes)とは、Kubernetes Podを構成するコンテナを実行できるソフトウェアです。
+
+KubernetesはPodのオーケストレーションとスケジューリングを担当し、各ノードでは{{< glossary_tooltip text="kubelet" term_id="kubelet" >}}がコンテナランタイムインターフェイスを抽象化して使用するので、互換性があればどのコンテナランタイムでも使用することができます。
+初期のリリースでは、Kubernetesは1つのコンテナランタイムと互換性を提供していました: Dockerです。
+その後、Kubernetesプロジェクトの歴史の中で、クラスター運用者は追加のコンテナランタイムを採用することを希望しました。
+CRIはこのような柔軟性を可能にするために設計され、kubeletはCRIのサポートを開始しました。
+しかし、DockerはCRI仕様が考案される前から存在していたため、Kubernetesプロジェクトはアダプタコンポーネント「dockershim」を作成しました。
+
+dockershimアダプターは、DockerがCRI互換ランタイムであるかのように、kubeletがDockerと対話することを可能にします。
+[Kubernetes Containerd integration goes GA](/blog/2018/05/24/kubernetes-containerd-integration-goes-ga/)ブログ記事で紹介されています。
+
+
+
+コンテナランタイムとしてContainerdに切り替えることで、中間マージンを排除することができます。
+これまでと同じように、Containerdのようなコンテナランタイムですべてのコンテナを実行できます。
+しかし今は、コンテナはコンテナランタイムで直接スケジュールするので、Dockerからは見えません。
+そのため、これらのコンテナをチェックするために以前使っていたかもしれないDockerツールや派手なUIは、もはや利用できません。
+`docker ps`や`docker inspect`を使用してコンテナ情報を取得することはできません。
+コンテナを一覧表示できないので、ログを取得したり、コンテナを停止したり、`docker exec`を使用してコンテナ内で何かを実行したりすることもできません。
+
+{{< note >}}
+
+Kubernetes経由でワークロードを実行している場合、コンテナを停止する最善の方法は、コンテナランタイムを直接経由するよりもKubernetes APIを経由することです(このアドバイスはDockerだけでなく、すべてのコンテナランタイムに適用されます)。
+
+{{< /note >}}
+
+この場合でも、イメージを取得したり、`docker build`コマンドを使用してビルドすることは可能です。
+しかし、Dockerによってビルドまたはプルされたイメージは、コンテナランタイムとKubernetesからは見えません。
+Kubernetesで使用できるようにするには、何らかのレジストリにプッシュする必要がありました。
diff --git a/content/ja/docs/tasks/administer-cluster/nodelocaldns.md b/content/ja/docs/tasks/administer-cluster/nodelocaldns.md
index 4a5e59a2ca..e7f97ea7f6 100644
--- a/content/ja/docs/tasks/administer-cluster/nodelocaldns.md
+++ b/content/ja/docs/tasks/administer-cluster/nodelocaldns.md
@@ -45,7 +45,7 @@ NodeLocal DNSキャッシュは、クラスターノード上でDNSキャッシ
{{< figure src="/images/docs/nodelocaldns.svg" alt="NodeLocal DNSCache flow" title="Nodelocal DNSCacheのフロー" caption="この図は、NodeLocal DNSキャッシュがDNSクエリーをどう扱うかを表したものです。" >}}
## 設定
-{{< note >}} NodeLocal DNSキャッシュ用のローカルに待ち受けているIPアドレスは、169.254.20.0/16の範囲のIPか、既存のIPと衝突しないことが保証されている他のIPとなります。このドキュメントでは例として169.254.10を使用します。
+{{< note >}} NodeLocal DNSキャッシュのローカルリッスン用のIPアドレスは、クラスタ内の既存のIPと衝突しないことが保証できるものであれば、どのようなアドレスでもかまいません。例えば、IPv4のリンクローカル範囲169.254.0.0/16やIPv6のユニークローカルアドレス範囲fd00::/8から、ローカルスコープのアドレスを使用することが推奨されています。
{{< /note >}}
この機能は、下記の手順により有効化できます。
diff --git a/content/ja/docs/tasks/administer-cluster/securing-a-cluster.md b/content/ja/docs/tasks/administer-cluster/securing-a-cluster.md
index d1a852efa2..2210900193 100644
--- a/content/ja/docs/tasks/administer-cluster/securing-a-cluster.md
+++ b/content/ja/docs/tasks/administer-cluster/securing-a-cluster.md
@@ -154,7 +154,7 @@ API用のetcdバックエンドへの書き込みアクセスは、クラスタ
### 監査ログの有効
-[audit logger](/docs/tasks/debug-application-cluster/audit/)はベータ版の機能で、APIによって行われたアクションを記録し、侵害があった場合に後から分析できるようにするものです。
+[audit logger](/docs/tasks/debug/debug-cluster/audit/)はベータ版の機能で、APIによって行われたアクションを記録し、侵害があった場合に後から分析できるようにするものです。
監査ログを有効にして、ログファイルを安全なサーバーにアーカイブすることをお勧めします。
diff --git a/content/ja/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md b/content/ja/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
index 08e48b9fa7..2ac539bf06 100644
--- a/content/ja/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
+++ b/content/ja/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
@@ -51,7 +51,7 @@ Probeの動作としては、kubeletは`cat /tmp/healthy`を対象のコンテ
このコンテナは、起動すると次のコマンドを実行します:
```shell
-/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
+/bin/sh -c "touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600"
```
コンテナが起動してから初めの30秒間は`/tmp/healthy`ファイルがコンテナ内に存在します。
diff --git a/content/ja/docs/tasks/debug-application-cluster/debug-cluster.md b/content/ja/docs/tasks/debug-application-cluster/debug-cluster.md
new file mode 100644
index 0000000000..34803b2b6b
--- /dev/null
+++ b/content/ja/docs/tasks/debug-application-cluster/debug-cluster.md
@@ -0,0 +1,114 @@
+---
+title: クラスターのトラブルシューティング
+content_type: concept
+---
+
+
+
+このドキュメントはクラスターのトラブルシューティングに関するもので、あなたが経験している問題の根本原因として、アプリケーションをすでに除外していることを前提としています。
+アプリケーションのデバッグのコツは、[application troubleshooting guide](/docs/tasks/debug-application-cluster/debug-application)をご覧ください。
+また、[troubleshooting document](/docs/tasks/debug-application-cluster/troubleshooting/)にも詳しい情報があります。
+
+
+
+## クラスターのリストアップ
+
+クラスターで最初にデバッグするのは、ノードがすべて正しく登録されているかどうかです。
+
+```shell
+kubectl get nodes
+```
+
+そして、期待するノードがすべて存在し、それらがすべて `Ready` 状態であることを確認します。
+
+クラスター全体の健全性に関する詳細な情報を得るには、以下を実行します。
+
+```shell
+kubectl cluster-info dump
+```
+## ログの確認
+
+今のところ、クラスターをより深く掘り下げるには、関連するマシンにログインする必要があります。
+以下は、関連するログファイルの場所です。
+(systemdベースのシステムでは、代わりに `journalctl` を使う必要があるかもしれないことに注意してください)
+
+### マスターノード
+
+ * `/var/log/kube-apiserver.log` - APIの提供を担当するAPIサーバーのログ
+ * `/var/log/kube-scheduler.log` - スケジューリング決定責任者であるスケジューラーのログ
+ * `/var/log/kube-controller-manager.log` - レプリケーションコントローラーを管理するコントローラーのログ
+
+### ワーカーノード
+
+ * `/var/log/kubelet.log` - ノード上でコンテナの実行を担当するKubeletのログ
+ * `/var/log/kube-proxy.log` - サービスのロードバランシングを担うKube Proxyのログ
+
+## クラスター障害モードの一般的な概要
+
+これは、問題が発生する可能性のある事柄と、問題を軽減するためにクラスターのセットアップを調整する方法の不完全なリストです。
+
+### 根本的な原因
+
+ - VMのシャットダウン
+ - クラスター内、またはクラスターとユーザー間のネットワークパーティション
+ - Kubernetesソフトウェアのクラッシュ
+ - データの損失や永続的ストレージ(GCE PDやAWS EBSボリュームなど)の使用不能
+ - Kubernetesソフトウェアやアプリケーションソフトウェアの設定ミスなど、オペレーターのミス
+
+### 具体的なシナリオ
+
+ - apiserver VMのシャットダウンまたはapiserverのクラッシュ
+ - 新しいPod、サービス、レプリケーションコントローラの停止、更新、起動ができない
+ - Kubernetes APIに依存していない限り、既存のPodやサービスは正常に動作し続けるはずです
+ - apiserverのバックアップストレージが失われた
+ - apiserverが立ち上がらない
+ - kubeletsは到達できなくなりますが、同じPodを実行し、同じサービスのプロキシを提供し続けます
+ - apiserverを再起動する前に、手動でapiserverの状態を回復または再現する必要がある
+ - サポートサービス(ノードコントローラ、レプリケーションコントローラーマネージャー、スケジューラーなど)VMのシャットダウンまたはクラッシュ
+ - 現在、これらはapiserverとコロケーションしており、使用できない場合はapiserverと同様の影響があります
+ - 将来的には、これらも複製されるようになり、同じ場所に配置されない可能性があります
+ - 独自の永続的な状態を持っていない。
+
+ - 個別ノード(VMまたは物理マシン)のシャットダウン
+ - そのノード上のPodの実行を停止
+ - ネットワークパーティション
+ - パーティションAはパーティションBのノードがダウンしていると考え、パーティションBはapiserverがダウンしていると考えています。(マスターVMがパーティションAで終了したと仮定)
+ - Kubeletソフトウェア障害
+ - クラッシュしたkubeletがノード上で新しいPodを起動できない
+ - kubeletがPodを削除するかどうか
+ - ノードが不健全と判定される
+ - レプリケーションコントローラーが別の場所で新しいPodを起動する
+ - クラスターオペレーターエラー
+ - PodやServiceなどの損失
+ - apiserverのバックエンドストレージの紛失
+ - ユーザーがAPIを読めなくなる
+ - その他
+
+### 軽減策
+
+- 対処法: IaaSプロバイダーの自動VM再起動機能をIaaS VMに使用する
+ - 異常: Apiserver VMのシャットダウンまたはApiserverのクラッシュ
+ - 異常: サポートサービスのVMシャットダウンまたはクラッシュ
+
+- 対処法: IaaSプロバイダーの信頼できるストレージ(GCE PDやAWS EBSボリュームなど)をapiserver+etcdを使用するVMに使用する
+ - 異常: Apiserverのバックエンドストレージが失われる
+
+- 対処法: [高可用性](/docs/setup/production-environment/tools/kubeadm/high-availability/)構成を使用します
+ - 異常: コントロールプレーンノードのシャットダウンまたはコントロールプレーンコンポーネント(スケジューラー、APIサーバー、コントローラーマネージャー)のクラッシュ
+ - 1つ以上のノードまたはコンポーネントの同時故障に耐えることができる
+ - 異常: APIサーバーのバックアップストレージ(etcdのデータディレクトリーなど)が消失
+ - HA(高可用性) etcdの構成を想定しています
+
+- 対処法: apiserver PDs/EBS-volumesを定期的にスナップショットする
+ - 異常: Apiserver のバックエンドストレージが失われる
+ - 異常: 操作ミスが発生する場合がある
+ - 異常: Kubernetesのソフトウェアに障害が発生する場合がある
+
+- 対処法:レプリケーションコントローラーとServiceをPodの前に使用する
+ - 異常: ノードのシャットダウン
+ - 異常: Kubeletソフトウェア障害
+
+- 対処法: 予期せぬ再起動に耐えられるように設計されたアプリケーション(コンテナ)
+ - 異常: ノードのシャットダウン
+ - 異常: Kubeletソフトウェア障害
+
diff --git a/content/ja/docs/tasks/debug-application-cluster/debug-running-pod.md b/content/ja/docs/tasks/debug-application-cluster/debug-running-pod.md
new file mode 100644
index 0000000000..3e2c1c42f0
--- /dev/null
+++ b/content/ja/docs/tasks/debug-application-cluster/debug-running-pod.md
@@ -0,0 +1,279 @@
+---
+title: 実行中のPodのデバッグ
+content_type: task
+---
+
+
+
+このページでは、ノード上で動作している(またはクラッシュしている)Podをデバッグする方法について説明します。
+
+
+## {{% heading "prerequisites" %}}
+
+
+* あなたの{{< glossary_tooltip text="Pod" term_id="pod" >}}は既にスケジュールされ、実行されているはずです。Pod がまだ実行されていない場合は、[Troubleshoot Applications](/docs/tasks/debug-application-cluster/debug-application/) から始めてください。
+
+* いくつかの高度なデバッグ手順では、Podがどのノードで動作しているかを知り、そのノードでコマンドを実行するためのシェルアクセス権を持っていることが必要です。`kubectl` を使用する標準的なデバッグ手順の実行には、そのようなアクセスは必要ではありません。
+
+
+
+
+
+## Podログを調べます {#examine-pod-logs}
+
+まず、影響を受けるコンテナのログを見ます。
+
+```shell
+kubectl logs ${POD_NAME} ${CONTAINER_NAME}
+```
+
+コンテナが以前にクラッシュしたことがある場合、以前のコンテナのクラッシュログにアクセスすることができます。
+
+```shell
+kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME}
+```
+
+## container execによるデバッグ {#container-exec}
+
+もし{{< glossary_tooltip text="container image" term_id="image" >}}がデバッグユーティリティを含んでいれば、LinuxやWindows OSのベースイメージからビルドしたイメージのように、`kubectl exec` で特定のコンテナ内でコマンドを実行することが可能です。
+
+```shell
+kubectl exec ${POD_NAME} -c ${CONTAINER_NAME} -- ${CMD} ${ARG1} ${ARG2} ... ${ARGN}
+```
+
+{{< note >}}
+`-c ${CONTAINER_NAME}`は省略可能です。コンテナを1つだけ含むPodの場合は省略できます。
+{{< /note >}}
+
+例として、実行中のCassandra Podからログを見るには、次のように実行します。
+
+```shell
+kubectl exec cassandra -- cat /var/log/cassandra/system.log
+```
+
+例えば`kubectl exec`の`-i`と`-t`引数を使って、端末に接続されたシェルを実行することができます。
+
+```shell
+kubectl exec -it cassandra -- sh
+```
+
+詳しくは、[実行中のコンテナのシェルを取得する](/docs/tasks/debug-application-cluster/get-shell-running-container/)を参照してください。
+
+## エフェメラルコンテナによるデバッグ {#ephemeral-container}
+
+{{< feature-state state="beta" for_k8s_version="v1.23" >}}
+
+{{< glossary_tooltip text="エフェメラルコンテナ" term_id="ephemeral-container" >}}は、コンテナがクラッシュしたり、コンテナイメージにデバッグユーティリティが含まれていないなどの理由で`kubectl exec`が不十分な場合に、対話的にトラブルシューティングを行うのに便利です([ディストロ・イメージ](
+https://github.com/GoogleContainerTools/distroless)の場合など)。
+
+### エフェメラルコンテナを使用したデバッグ例 {#ephemeral-container-example}
+
+実行中のPodにエフェメラルコンテナを追加するには、`kubectl debug`コマンドを使用することができます。
+まず、サンプル用のPodを作成します。
+
+```shell
+kubectl run ephemeral-demo --image=k8s.gcr.io/pause:3.1 --restart=Never
+```
+
+このセクションの例では、デバッグユーティリティが含まれていない`pause`コンテナイメージを使用していますが、この方法はすべてのコンテナイメージで動作します。
+
+もし、`kubectl exec`を使用してシェルを作成しようとすると、このコンテナイメージにはシェルが存在しないため、エラーが表示されます。
+
+```shell
+kubectl exec -it ephemeral-demo -- sh
+```
+
+```
+OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown
+```
+
+代わりに、`kubectl debug` を使ってデバッグ用のコンテナを追加することができます。
+引数に`-i`/`--interactive`を指定すると、`kubectl`は自動的にエフェメラルコンテナのコンソールにアタッチされます。
+
+```shell
+kubectl debug -it ephemeral-demo --image=busybox --target=ephemeral-demo
+```
+
+```
+Defaulting debug container name to debugger-8xzrl.
+If you don't see a command prompt, try pressing enter.
+/ #
+```
+
+このコマンドは新しいbusyboxコンテナを追加し、それにアタッチします。`target`パラメーターは、他のコンテナのプロセス名前空間をターゲットにします。これは`kubectl run`が作成するPodで[process namespace sharing](/docs/tasks/configure-pod-container/share-process-namespace/)を有効にしないため、指定する必要があります。
+
+{{< note >}}
+`target` パラメーターは {{< glossary_tooltip text="Container Runtime" term_id="container-runtime" >}} でサポートされている必要があります。サポートされていない場合、エフェメラルコンテナは起動されないか、`ps`が他のコンテナ内のプロセスを表示しないように孤立したプロセス名前空間を使用して起動されます。
+{{< /note >}}
+
+新しく作成されたエフェメラルコンテナの状態は`kubectl describe`を使って見ることができます。
+
+```shell
+kubectl describe pod ephemeral-demo
+```
+
+```
+...
+Ephemeral Containers:
+ debugger-8xzrl:
+ Container ID: docker://b888f9adfd15bd5739fefaa39e1df4dd3c617b9902082b1cfdc29c4028ffb2eb
+ Image: busybox
+ Image ID: docker-pullable://busybox@sha256:1828edd60c5efd34b2bf5dd3282ec0cc04d47b2ff9caa0b6d4f07a21d1c08084
+ Port:
+ Host Port:
+ State: Running
+ Started: Wed, 12 Feb 2020 14:25:42 +0100
+ Ready: False
+ Restart Count: 0
+ Environment:
+ Mounts:
+...
+```
+
+終了したら`kubectl delete`を使ってPodを削除してください。
+
+```shell
+kubectl delete pod ephemeral-demo
+```
+
+## Podのコピーを使ったデバッグ
+
+Podの設定オプションによって、特定の状況でのトラブルシューティングが困難になることがあります。
+例えば、コンテナイメージにシェルが含まれていない場合、またはアプリケーションが起動時にクラッシュした場合は、`kubectl exec`を実行してトラブルシューティングを行うことができません。
+このような状況では、`kubectl debug` を使用してデバッグを支援するために設定値を変更したPodのコピーです。
+
+### 新しいコンテナを追加しながらPodをコピーします
+
+新しいコンテナを追加することは、アプリケーションが動作しているが期待通りの動作をせず、トラブルシューティングユーティリティをPodに追加したい場合に便利な場合があります。
+例えば、アプリケーションのコンテナイメージは`busybox`上にビルドされているが、`busybox`に含まれていないデバッグユーティリティが必要な場合があります。このシナリオは `kubectl run` を使ってシミュレーションすることができます。
+
+```shell
+kubectl run myapp --image=busybox --restart=Never -- sleep 1d
+```
+
+このコマンドを実行すると、`myapp`のコピーに`myapp-debug`という名前が付き、デバッグ用の新しいUbuntuコンテナが追加されます。
+
+```shell
+kubectl debug myapp -it --image=ubuntu --share-processes --copy-to=myapp-debug
+```
+
+```
+Defaulting debug container name to debugger-w7xmf.
+If you don't see a command prompt, try pressing enter.
+root@myapp-debug:/#
+```
+
+{{< note >}}
+* `kubectl debug`は`--container`フラグでコンテナ名を選択しない場合、自動的にコンテナ名を生成します。
+
+* `i`フラグを指定すると、デフォルトで`kubectl debug`が新しいコンテナにアタッチされます。これを防ぐには、`--attach=false`を指定します。セッションが切断された場合は、`kubectl attach`を使用して再接続することができます。
+
+* `share-processes` を指定すると、Pod 内のコンテナからプロセスを参照することができます。この仕組みについて詳しくは、[Share Process Namespace between Containers in a Pod](/docs/tasks/configure-pod-container/share-process-namespace/)を参照してください。
+{{< /note >}}
+
+デバッグが終わったら、Podの後始末をするのを忘れないでください。
+
+```shell
+kubectl delete pod myapp myapp-debug
+```
+
+### Podのコマンドを変更しながらコピーします
+
+デバッグフラグを追加するためや、アプリケーションがクラッシュするためなど、コンテナのコマンドを変更すると便利な場合があります。
+アプリケーションのクラッシュをシミュレートするには、`kubectl run`を使用して、すぐに終了するコンテナを作成します。
+
+```
+kubectl run --image=busybox myapp -- false
+```
+
+`kubectl describe pod myapp` を使用すると、このコンテナがクラッシュしていることがわかります。
+
+```
+Containers:
+ myapp:
+ Image: busybox
+ ...
+ Args:
+ false
+ State: Waiting
+ Reason: CrashLoopBackOff
+ Last State: Terminated
+ Reason: Error
+ Exit Code: 1
+```
+
+`kubectl debug`を使うと、コマンドをインタラクティブシェルに変更したこのPodのコピーを作成することができます。
+
+```
+kubectl debug myapp -it --copy-to=myapp-debug --container=myapp -- sh
+```
+
+```
+If you don't see a command prompt, try pressing enter.
+/ #
+```
+
+これで、ファイルシステムのパスのチェックやコンテナコマンドの手動実行などのタスクを実行するために使用できる対話型シェルが完成しました。
+
+{{< note >}}
+* 特定のコンテナのコマンドを変更するには、そのコンテナ名を`--container`で指定する必要があり、そうしないと`kubectl debug`が代わりに指定したコマンドを実行する新しいコンテナを作成します。
+
+* ` i` フラグは、デフォルトで `kubectl debug` がコンテナにアタッチされるようにします。これを防ぐには、`--attach=false`を指定します。セッションが切断された場合は、`kubectl attach` を使用して再接続することができます。
+{{< /note >}}
+
+デバッグが終わったら、Podの後始末をするのを忘れないでください。
+
+```shell
+kubectl delete pod myapp myapp-debug
+```
+
+### コンテナイメージを変更してPodをコピーします
+
+状況によっては、動作不良のPodを通常のプロダクション用のイメージから、デバッグ・ビルドや追加ユーティリティを含むイメージに変更したい場合があります。
+
+例として、`kubectl run`を使用してPodを作成します。
+
+```
+kubectl run myapp --image=busybox --restart=Never -- sleep 1d
+```
+
+ここで、`kubectl debug`を使用してコピーを作成し、そのコンテナイメージを`ubuntu`に変更します。
+
+```
+kubectl debug myapp --copy-to=myapp-debug --set-image=*=ubuntu
+```
+
+`set-image`の構文は、`kubectl set image`と同じ`container_name=image`の構文を使用します。`*=ubuntu`は、全てのコンテナのイメージを`ubuntu`に変更することを意味します。
+
+デバッグが終わったら、Podの後始末をするのを忘れないでください。
+
+```shell
+kubectl delete pod myapp myapp-debug
+```
+
+## ノード上のシェルによるデバッグ {#node-shell-session}
+
+いずれの方法でもうまくいかない場合は、Podが動作しているノードを探し出し、ホストの名前空間で動作する特権Podを作成します。
+ノード上で `kubectl debug` を使って対話型のシェルを作成するには、以下を実行します。
+
+```shell
+kubectl debug node/mynode -it --image=ubuntu
+```
+
+```
+Creating debugging pod node-debugger-mynode-pdx84 with container debugger on node mynode.
+If you don't see a command prompt, try pressing enter.
+root@ek8s:/#
+```
+
+ノードでデバッグセッションを作成する場合、以下の点に注意してください:
+
+* `kubectl debug`はノードの名前に基づいて新しい Pod の名前を自動的に生成します。
+* コンテナはホストのIPC、Network、PIDネームスペースで実行されます。
+* ノードのルートファイルシステムは`/host`にマウントされます。
+
+デバッグが終わったら、Podの後始末をするのを忘れないでください。
+
+```shell
+kubectl delete pod node-debugger-mynode-pdx84
+```
diff --git a/content/ja/docs/tasks/debug-application-cluster/monitor-node-health.md b/content/ja/docs/tasks/debug-application-cluster/monitor-node-health.md
new file mode 100644
index 0000000000..518691fd2a
--- /dev/null
+++ b/content/ja/docs/tasks/debug-application-cluster/monitor-node-health.md
@@ -0,0 +1,151 @@
+---
+title: ノードの健全性を監視します
+content_type: task
+reviewers:
+- ptux
+---
+
+
+
+*Node Problem Detector*は、ノードの健全性を監視し、報告するためのデーモンです。
+`Node Problem Detector`は`DaemonSet`として、あるいはスタンドアロンデーモンとして実行することができます。
+
+`Node Problem Detector`は様々なデーモンからノードの問題に関する情報を収集し、これらの状態を[NodeCondition](/ja/docs/concepts/architecture/nodes/#condition)および[Event](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#event-v1-core)としてAPIサーバーにレポートします。
+`Node Problem Detector`のインストール方法と使用方法については、[Node Problem Detectorプロジェクトドキュメント](https://github.com/kubernetes/node-problem-detector)を参照してください。
+
+## {{% heading "prerequisites" %}}
+
+{{< include "task-tutorial-prereqs.md" >}}
+
+
+
+## 制限事項
+
+* Node Problem Detectorは、ファイルベースのカーネルログのみをサポートします。
+ `journald`のようなログツールはサポートされていません。
+
+* Node Problem Detectorは、カーネルの問題を報告するためにカーネルログフォーマットを使用します。
+ カーネルログフォーマットを拡張する方法については、[Add support for another log format](#support-other-log-format) を参照してください。
+
+## ノード問題検出の有効化
+
+クラウドプロバイダーによっては、`Node Problem Detector`を{{< glossary_tooltip text="Addon" term_id="addons" >}}として有効にしている場合があります。
+また、`kubectl`を使って`Node Problem Detector`を有効にするか、`Addon pod`を作成することで有効にできます。
+
+### kubectlを使用してNodしますroblem Detectorを有効にします {#using-kubectl}
+
+`kubectl`は`Node Problem Detector`を最も柔軟に管理することができます。
+デフォルトの設定を上書きして自分の環境に合わせたり、カスタマイズしたノードの問題を検出したりすることができます。
+例えば:
+
+1. `node-problem-detector.yaml`のような`Node Problem Detector`の設定を作成します:
+
+ {{< codenew file="debug/node-problem-detector.yaml" >}}
+
+ {{< note >}}
+ システムログのディレクトリが、お使いのOSのディストリビューションに合っていることを確認する必要があります。
+ {{< /note >}}
+
+1. `Node Problem Detector`を`kubectl`で起動します。
+
+ ```shell
+ kubectl apply -f https://k8s.io/examples/debug/node-problem-detector.yaml
+ ```
+
+### Addon podを使用してNode Problem Detectorを有効化します {#using-addon-pod}
+
+カスタムのクラスターブートストラップソリューションを使用していて、デフォルトの設定を上書きする必要がない場合は、`Addon Pod`を利用してデプロイをさらに自動化できます。
+`node-problem-detector.yaml`を作成し、制御プレーンノードの`Addon Pod`のディレクトリ`/etc/kubernetes/addons/node-problem-detector`に設定を保存します。
+
+## コンフィギュレーションを上書きします
+
+`Node Problem Detector`の Dockerイメージをビルドする際に、[default configuration(https://github.com/kubernetes/node-problem-detector/tree/v0.1/config)が埋め込まれます。
+
+[`ConfigMap`](/ja/docs/tasks/configure-pod-container/configure-pod-configmap/) を使用することで設定を上書きすることができます。
+
+
+1. `config/` にある設定ファイルを変更します
+1. `ConfigMap` `node-problem-detector-config`を作成します。
+
+ ```shell
+ kubectl create configmap node-problem-detector-config --from-file=config/
+ ```
+
+1. `node-problem-detector.yaml`を変更して、`ConfigMap`を使用するようにします。
+
+ {{< codenew file="debug/node-problem-detector-configmap.yaml" >}}
+
+1. 新しい設定ファイルで`Node Problem Detector`を再作成します。
+
+ ```shell
+ # If you have a node-problem-detector running, delete before recreating
+ kubectl delete -f https://k8s.io/examples/debug/node-problem-detector.yaml
+ kubectl apply -f https://k8s.io/examples/debug/node-problem-detector-configmap.yaml
+ ```
+
+{{< note >}}
+この方法は `kubectl` で起動された Node Problem Detector にのみ適用されます。
+{{< /note >}}
+
+ノード問題検出装置がクラスターアドオンとして実行されている場合、設定の上書きはサポートされていません。
+`Addon Manager`は、`ConfigMap`をサポートしていません。
+
+## Kernel Monitor
+
+*Kernel Monitor*は`Node Problem Detector`でサポートされるシステムログ監視デーモンです。
+*Kernel Monitor*はカーネルログを監視し、事前に定義されたルールに従って既知のカーネル問題を検出します。
+*Kernel Monitor*は[`config/kernel-monitor.json`](https://github.com/kubernetes/node-problem-detector/blob/v0.1/config/kernel-monitor.json)にある一連の定義済みルールリストに従ってカーネルの問題を照合します。
+ルールリストは拡張可能です。設定を上書きすることで、ルールリストを拡張することができます。
+
+### 新しいNodeConditionsの追加
+
+新しい`NodeCondition`をサポートするには、例えば`config/kernel-monitor.json`の`conditions`フィールド内に条件定義を作成します。
+
+```json
+{
+ "type": "NodeConditionType",
+ "reason": "CamelCaseDefaultNodeConditionReason",
+ "message": "arbitrary default node condition message"
+}
+```
+
+### 新たな問題の発見
+
+新しい問題を検出するために、`config/kernel-monitor.json`の`rules`フィールドを新しいルール定義で拡張することができます。
+
+```json
+{
+ "type": "temporary/permanent",
+ "condition": "NodeConditionOfPermanentIssue",
+ "reason": "CamelCaseShortReason",
+ "message": "regexp matching the issue in the kernel log"
+}
+```
+
+### カーネルログデバイスのパスの設定 {#kernel-log-device-path}
+
+ご使用のオペレーティングシステム(OS)ディストリビューションのカーネルログパスをご確認ください。
+Linuxカーネルの[ログデバイス](https://www.kernel.org/doc/Documentation/ABI/testing/dev-kmsg)は通常`/dev/kmsg`として表示されます。
+しかし、OSのディストリビューションによって、ログパスの位置は異なります。
+`config/kernel-monitor.json`の`log`フィールドは、コンテナ内のログパスを表します。
+`log`フィールドは、`Node Problem Detector`で見たデバイスパスと一致するように設定することができます。
+
+### 別のログ形式をサポートします {#support-other-log-format}
+
+Kernel monitorは[`Translator`](https://github.com/kubernetes/node-problem-detector/blob/v0.1/pkg/kernelmonitor/translator/translator.go)プラグインを使用して、カーネルログの内部データ構造を変換します。
+新しいログフォーマット用に新しいトランスレータを実装することができます。
+
+
+
+## 推奨・制限事項
+
+ノードの健全性を監視するために、クラスターでNode Problem Detectorを実行することが推奨されます。
+`Node Problem Detector`を実行する場合、各ノードで余分なリソースのオーバーヘッドが発生することが予想されます。
+
+通常これは問題ありません。
+
+* カーネルログは比較的ゆっくりと成長します。
+* Node Problem Detector にはリソース制限が設定されています。
+* 高負荷時であっても、リソースの使用は許容範囲内です。
+
+詳細は`Node Problem Detector`[ベンチマーク結果](https://github.com/kubernetes/node-problem-detector/issues/2#issuecomment-220255629)を参照してください。
diff --git a/content/ja/docs/tasks/debug-application-cluster/troubleshooting.md b/content/ja/docs/tasks/debug-application-cluster/troubleshooting.md
new file mode 100644
index 0000000000..436afc14ea
--- /dev/null
+++ b/content/ja/docs/tasks/debug-application-cluster/troubleshooting.md
@@ -0,0 +1,88 @@
+---
+content_type: concept
+title: トラブルシューティング
+---
+
+
+
+時には物事がうまくいかないこともあります。このガイドは、それらを正すことを目的としています。
+
+ 2つのセクションから構成されています:
+
+* [Troubleshooting your application](/docs/tasks/debug-application-cluster/debug-application/) - Kubernetesにコードをデプロイしていて、なぜ動かないのか不思議に思っているユーザーに便利です。
+* [Troubleshooting your cluster](/docs/tasks/debug-application-cluster/debug-cluster/) - クラスター管理者やKubernetesクラスターに不満がある人に有用です。
+
+また、使用している[リリース](https://github.com/kubernetes/kubernetes/releases)の既知の問題を確認する必要があります。
+
+
+
+## ヘルプを受けます
+
+もしあなたの問題が上記のどのガイドでも解決されない場合は、Kubernetesコミュニティから助けを得るための様々な方法があります。
+
+### ご質問
+
+本サイトのドキュメントは、様々な疑問に対する答えを提供するために構成されています。
+
+[Concepts](/docs/concepts/)では、Kubernetesのアーキテクチャーと各コンポーネントの動作について説明し、[Setup](/docs/setup/)では、使い始めるための実用的な手順を提供しています。
+[Tasks](/docs/tasks/) は、よく使われるタスクの実行方法を示し、 [Tutorials](/docs/tutorials/)は、実世界の業界特有、またはエンドツーエンドの開発シナリオ、より包括的なウォークスルーとなります。
+[Reference](/docs/reference/)セクションでは、[Kubernetes API(/docs/reference/generated/kubernetes-api/{{< param "version" >}}/)と`kubectl`](/docs/reference/kubectl/overview/)などのコマンドラインインターフェース(CLI)に関する詳しいドキュメントが提供されています。
+
+## ヘルプ!私の質問はカバーされていません!今すぐ助けてください!
+
+### Stack Overflow
+
+コミュニティの誰かがすでに同じような質問をしている可能性があり、あなたの問題を解決できるかもしれません。
+Kubernetesチームも[Kubernetesタグが付けられた投稿](https://stackoverflow.com/questions/tagged/kubernetes)を監視しています。
+もし役立つ既存の質問がない場合は、[新しく質問してみてください](https://stackoverflow.com/questions/ask?tags=kubernetes)。
+
+
+### Slack
+
+Kubernetesコミュニティの多くの人々は、Kubernetes Slackの`#kubernetes-users`チャンネルに集まっています。
+Slackは登録が必要です。[招待をリクエストする](https://slack.kubernetes.io)ことができ、登録は誰でも可能です)。
+お気軽にお越しいただき、何でも質問してください。
+登録が完了したら、WebブラウザまたはSlackの専用アプリから[Kubernetes organization in Slack](https://kubernetes.slack.com)にアクセスします。
+
+登録が完了したら、増え続けるチャンネルリストを見て、興味のある様々なテーマについて調べてみましょう。
+たとえば、Kubernetesの初心者は、[`#kubernetes-novice`](https://kubernetes.slack.com/messages/kubernetes-novice)に参加してみるのもよいでしょう。
+別の例として、開発者は[`#kubernetes-dev`](https://kubernetes.slack.com/messages/kubernetes-dev)チャンネルに参加するとよいでしょう。
+
+また、多くの国別/言語別チャンネルがあります。これらのチャンネルに参加すれば、地域特有のサポートや情報を得ることができます。
+
+{{< table caption="Country / language specific Slack channels" >}}
+Country | Channels
+:---------|:------------
+中国 | [`#cn-users`](https://kubernetes.slack.com/messages/cn-users), [`#cn-events`](https://kubernetes.slack.com/messages/cn-events)
+フィンランド | [`#fi-users`](https://kubernetes.slack.com/messages/fi-users)
+フランス | [`#fr-users`](https://kubernetes.slack.com/messages/fr-users), [`#fr-events`](https://kubernetes.slack.com/messages/fr-events)
+ドイツ | [`#de-users`](https://kubernetes.slack.com/messages/de-users), [`#de-events`](https://kubernetes.slack.com/messages/de-events)
+インド | [`#in-users`](https://kubernetes.slack.com/messages/in-users), [`#in-events`](https://kubernetes.slack.com/messages/in-events)
+イタリア | [`#it-users`](https://kubernetes.slack.com/messages/it-users), [`#it-events`](https://kubernetes.slack.com/messages/it-events)
+日本 | [`#jp-users`](https://kubernetes.slack.com/messages/jp-users), [`#jp-events`](https://kubernetes.slack.com/messages/jp-events)
+韓国 | [`#kr-users`](https://kubernetes.slack.com/messages/kr-users)
+オランダ | [`#nl-users`](https://kubernetes.slack.com/messages/nl-users)
+ノルウェー | [`#norw-users`](https://kubernetes.slack.com/messages/norw-users)
+ポーランド | [`#pl-users`](https://kubernetes.slack.com/messages/pl-users)
+ロシア | [`#ru-users`](https://kubernetes.slack.com/messages/ru-users)
+スペイン | [`#es-users`](https://kubernetes.slack.com/messages/es-users)
+スウェーデン | [`#se-users`](https://kubernetes.slack.com/messages/se-users)
+トルコ | [`#tr-users`](https://kubernetes.slack.com/messages/tr-users), [`#tr-events`](https://kubernetes.slack.com/messages/tr-events)
+{{< /table >}}
+
+### フォーラム
+
+Kubernetesの公式フォーラムへの参加は大歓迎です[discuss.kubernetes.io](https://discuss.kubernetes.io)。
+
+### バグと機能の要望
+
+バグらしきものを発見した場合、または機能要望を出したい場合、[GitHub課題追跡システム](https://github.com/kubernetes/kubernetes/issues)をご利用ください。
+課題を提出する前に、既存の課題を検索して、あなたの課題が解決されているかどうかを確認してください。
+
+バグを報告する場合は、そのバグを再現するための詳細な情報を含めてください。
+
+* Kubernetes のバージョン: `kubectl version`
+* クラウドプロバイダー、OSディストリビューション、ネットワーク構成、Dockerバージョン
+* 問題を再現するための手順
+
+
diff --git a/content/ja/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md b/content/ja/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md
index 5e7b77443d..a55a093c2b 100644
--- a/content/ja/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md
+++ b/content/ja/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume.md
@@ -234,7 +234,7 @@ WordPressのインストールをこのページのまま放置してはいけ
## {{% heading "whatsnext" %}}
-* [イントロスペクションとデバッグ](/docs/tasks/debug-application-cluster/debug-application-introspection/)についてさらに学ぶ
+* [イントロスペクションとデバッグ](/docs/tasks/debug/debug-application)についてさらに学ぶ
* [Job](/docs/concepts/workloads/controllers/job/)についてさらに学ぶ
* [Portフォワーディング](/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)についてさらに学ぶ
* [コンテナへのシェルを取得する](/ja/docs/tasks/debug-application-cluster/get-shell-running-container/)方法について学ぶ
diff --git a/content/ja/examples/admin/resource/cpu-constraints-pod-3.yaml b/content/ja/examples/admin/resource/cpu-constraints-pod-3.yaml
deleted file mode 100644
index 896d98ec2f..0000000000
--- a/content/ja/examples/admin/resource/cpu-constraints-pod-3.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-apiVersion: v1
-kind: Pod
-metadata:
- name: constraints-cpu-demo-4
-spec:
- containers:
- - name: constraints-cpu-demo-4-ctr
- image: nginx
- resources:
- limits:
- cpu: "800m"
- requests:
- cpu: "100m"
diff --git a/content/ja/examples/application/mysql/mysql-configmap.yaml b/content/ja/examples/application/mysql/mysql-configmap.yaml
index 46d34e422c..6aa5bfe4e5 100644
--- a/content/ja/examples/application/mysql/mysql-configmap.yaml
+++ b/content/ja/examples/application/mysql/mysql-configmap.yaml
@@ -5,12 +5,14 @@ metadata:
labels:
app: mysql
data:
- master.cnf: |
- # Apply this config only on the master.
+ primary.cnf: |
+ # Apply this config only on the primary.
[mysqld]
log-bin
- slave.cnf: |
- # Apply this config only on slaves.
+ datadir=/var/lib/mysql/mysql
+ replica.cnf: |
+ # Apply this config only on replicas.
[mysqld]
super-read-only
+ datadir=/var/lib/mysql/mysql
diff --git a/content/ja/examples/pods/probe/exec-liveness.yaml b/content/ja/examples/pods/probe/exec-liveness.yaml
index 07bf75f85c..6a9c9b3213 100644
--- a/content/ja/examples/pods/probe/exec-liveness.yaml
+++ b/content/ja/examples/pods/probe/exec-liveness.yaml
@@ -11,7 +11,7 @@ spec:
args:
- /bin/sh
- -c
- - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
+ - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
diff --git a/content/ja/includes/default-storage-class-prereqs.md b/content/ja/includes/default-storage-class-prereqs.md
index 52d100d6ef..648bbfc1ac 100644
--- a/content/ja/includes/default-storage-class-prereqs.md
+++ b/content/ja/includes/default-storage-class-prereqs.md
@@ -1 +1 @@
-ここで使用されている[PersistentVolumeClaims](/docs/user-guide/persistent-volumes/#persistentvolumeclaims)の要件を満たすには、デフォルトの[StorageClass](/docs/concepts/storage/storage-classes/)を使用して動的PersistentVolumeプロビジョナーを作成するか、[PersistentVolumesを静的にプロビジョニングする](/docs/user-guide/persistent-volumes/#provisioning)必要があります。
+ここで使用されている[PersistentVolumeClaims](/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)の要件を満たすには、デフォルトの[StorageClass](/docs/concepts/storage/storage-classes/)を使用して動的PersistentVolumeプロビジョナーを作成するか、[PersistentVolumesを静的にプロビジョニングする](/docs/concepts/storage/persistent-volumes/#provisioning)必要があります。
diff --git a/content/ko/docs/concepts/cluster-administration/addons.md b/content/ko/docs/concepts/cluster-administration/addons.md
index 47dce8be0a..e1d27a1f59 100644
--- a/content/ko/docs/concepts/cluster-administration/addons.md
+++ b/content/ko/docs/concepts/cluster-administration/addons.md
@@ -21,6 +21,7 @@ content_type: concept
* [Canal](https://github.com/tigera/canal/tree/master/k8s-install)은 Flannel과 Calico를 통합하여 네트워킹 및 네트워크 폴리시를 제공한다.
* [Cilium](https://github.com/cilium/cilium)은 L3 네트워크 및 네트워크 폴리시 플러그인으로 HTTP/API/L7 폴리시를 투명하게 시행할 수 있다. 라우팅 및 오버레이/캡슐화 모드를 모두 지원하며, 다른 CNI 플러그인 위에서 작동할 수 있다.
* [CNI-Genie](https://github.com/Huawei-PaaS/CNI-Genie)를 사용하면 쿠버네티스는 Calico, Canal, Flannel, Romana 또는 Weave와 같은 CNI 플러그인을 완벽하게 연결할 수 있다.
+* [Contiv](https://contivpp.io/)는 다양한 유스케이스와 풍부한 폴리시 프레임워크를 위해 구성 가능한 네트워킹(BGP를 사용하는 네이티브 L3, vxlan을 사용하는 오버레이, 클래식 L2 그리고 Cisco-SDN/ACI)을 제공한다. Contiv 프로젝트는 완전히 [오픈소스](https://github.com/contiv)이다. [인스톨러](https://github.com/contiv/install)는 kubeadm을 이용하거나, 그렇지 않은 경우에 대해서도 설치 옵션을 모두 제공한다.
* [Contrail](https://www.juniper.net/us/en/products-services/sdn/contrail/contrail-networking/)은 [Tungsten Fabric](https://tungsten.io)을 기반으로 하며, 오픈소스이고, 멀티 클라우드 네트워크 가상화 및 폴리시 관리 플랫폼이다. Contrail과 Tungsten Fabric은 쿠버네티스, OpenShift, OpenStack 및 Mesos와 같은 오케스트레이션 시스템과 통합되어 있으며, 가상 머신, 컨테이너/파드 및 베어 메탈 워크로드에 대한 격리 모드를 제공한다.
* [Flannel](https://github.com/flannel-io/flannel#deploying-flannel-manually)은 쿠버네티스와 함께 사용할 수 있는 오버레이 네트워크 제공자이다.
* [Knitter](https://github.com/ZTE/Knitter/)는 쿠버네티스 파드에서 여러 네트워크 인터페이스를 지원하는 플러그인이다.
@@ -29,7 +30,7 @@ content_type: concept
* [OVN4NFV-K8S-Plugin](https://github.com/opnfv/ovn4nfv-k8s-plugin)은 OVN 기반의 CNI 컨트롤러 플러그인으로 클라우드 네이티브 기반 서비스 기능 체인(Service function chaining(SFC)), 다중 OVN 오버레이 네트워킹, 동적 서브넷 생성, 동적 가상 네트워크 생성, VLAN 공급자 네트워크, 직접 공급자 네트워크와 멀티 클러스터 네트워킹의 엣지 기반 클라우드 등 네이티브 워크로드에 이상적인 멀티 네티워크 플러그인이다.
* [NSX-T](https://docs.vmware.com/en/VMware-NSX-T/2.0/nsxt_20_ncp_kubernetes.pdf) 컨테이너 플러그인(NCP)은 VMware NSX-T와 쿠버네티스와 같은 컨테이너 오케스트레이터 간의 통합은 물론 NSX-T와 PKS(Pivotal 컨테이너 서비스) 및 OpenShift와 같은 컨테이너 기반 CaaS/PaaS 플랫폼 간의 통합을 제공한다.
* [Nuage](https://github.com/nuagenetworks/nuage-kubernetes/blob/v5.1.1-1/docs/kubernetes-1-installation.rst)는 가시성과 보안 모니터링 기능을 통해 쿠버네티스 파드와 비-쿠버네티스 환경 간에 폴리시 기반 네트워킹을 제공하는 SDN 플랫폼이다.
-* [Romana](https://romana.io)는 [네트워크폴리시 API](/ko/docs/concepts/services-networking/network-policies/)도 지원하는 파드 네트워크용 Layer 3 네트워킹 솔루션이다. Kubeadm 애드온 설치에 대한 세부 정보는 [여기](https://github.com/romana/romana/tree/master/containerize)에 있다.
+* [Romana](https://github.com/romana/romana)는 [네트워크폴리시 API](/ko/docs/concepts/services-networking/network-policies/)도 지원하는 파드 네트워크용 Layer 3 네트워킹 솔루션이다. Kubeadm 애드온 설치에 대한 세부 정보는 [여기](https://github.com/romana/romana/tree/master/containerize)에 있다.
* [Weave Net](https://www.weave.works/docs/net/latest/kubernetes/kube-addon/)은 네트워킹 및 네트워크 폴리시를 제공하고, 네트워크 파티션의 양면에서 작업을 수행하며, 외부 데이터베이스는 필요하지 않다.
## 서비스 검색
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 2a78361e08..f97d0858de 100644
--- a/content/ko/docs/concepts/overview/working-with-objects/namespaces.md
+++ b/content/ko/docs/concepts/overview/working-with-objects/namespaces.md
@@ -61,7 +61,6 @@ kube-system Active 1d
* `default` 다른 네임스페이스가 없는 오브젝트를 위한 기본 네임스페이스
* `kube-system` 쿠버네티스 시스템에서 생성한 오브젝트를 위한 네임스페이스
* `kube-public` 이 네임스페이스는 자동으로 생성되며 모든 사용자(인증되지 않은 사용자 포함)가 읽기 권한으로 접근할 수 있다. 이 네임스페이스는 주로 전체 클러스터 중에 공개적으로 드러나서 읽을 수 있는 리소스를 위해 예약되어 있다. 이 네임스페이스의 공개적인 성격은 단지 관례이지 요구 사항은 아니다.
- * `kube-node-lease` 클러스터가 스케일링될 때 노드 하트비트의 성능을 향상시키는 각 노드와 관련된 리스(lease) 오브젝트에 대한 네임스페이스
* `kube-node-lease` 이 네임스페이스는 각 노드와 연관된 [리스](/docs/reference/kubernetes-api/cluster-resources/lease-v1/)
오브젝트를 갖는다. 노드 리스는 kubelet이 [하트비트](/ko/docs/concepts/architecture/nodes/#하트비트)를
보내서 컨트롤 플레인이 노드의 장애를 탐지할 수 있게 한다.
diff --git a/content/ko/docs/concepts/overview/working-with-objects/object-management.md b/content/ko/docs/concepts/overview/working-with-objects/object-management.md
index 575def2256..4a0c28315e 100644
--- a/content/ko/docs/concepts/overview/working-with-objects/object-management.md
+++ b/content/ko/docs/concepts/overview/working-with-objects/object-management.md
@@ -6,7 +6,7 @@ weight: 15
`kubectl` 커맨드라인 툴은 쿠버네티스 오브젝트를 생성하고 관리하기 위한
-몇 가지 상이한 방법을 지원한다. 이 문서는 여러가지 접근법에 대한 개요을
+몇 가지 상이한 방법을 지원한다. 이 문서는 여러가지 접근법에 대한 개요를
제공한다. Kubectl로 오브젝트 관리하기에 대한 자세한 설명은
[Kubectl 서적](https://kubectl.docs.kubernetes.io)에서 확인한다.
diff --git a/content/ko/docs/concepts/scheduling-eviction/assign-pod-node.md b/content/ko/docs/concepts/scheduling-eviction/assign-pod-node.md
index 0d099b13e7..494d3b1601 100644
--- a/content/ko/docs/concepts/scheduling-eviction/assign-pod-node.md
+++ b/content/ko/docs/concepts/scheduling-eviction/assign-pod-node.md
@@ -17,9 +17,9 @@ weight: 20
[레이블 셀렉터](/ko/docs/concepts/overview/working-with-objects/labels/)를 사용하여 선택을 용이하게 한다.
보통 스케줄러가 자동으로 합리적인 배치(예: 자원이 부족한 노드에 파드를 배치하지 않도록
노드 간에 파드를 분배하는 등)를 수행하기에 이러한 제약 조건은 필요하지 않지만
-간혹 파드가 배포할 노드를 제어해야 하는 경우가 있다.
-예를 들어 SSD가 장착된 머신에 파드가 연결되도록 하거나 또는 동일한 가용성 영역(availability zone)에서
-많은 것을 통신하는 두 개의 서로 다른 서비스의 파드를 같이 배치할 수 있다.
+간혹 파드가 배포될 노드를 제어해야 하는 경우가 있다.
+예를 들어 SSD가 장착된 머신에 파드가 배포되도록 하거나 또는 많은 통신을 하는 두 개의 서로 다른 서비스의 파드를
+동일한 가용성 영역(availability zone)에 배치할 수 있다.
diff --git a/content/pl/releases/_index.md b/content/pl/releases/_index.md
index 46c2a7659f..a5cb3fdc52 100644
--- a/content/pl/releases/_index.md
+++ b/content/pl/releases/_index.md
@@ -7,7 +7,7 @@ type: docs
-Projekt Kubernetes zapewnia wsparcie dla trzech ostatnich wydań _minor_ ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}). Poprawki do wydania 1.19 i nowszych będą publikowane przez około rok. Kuberetes w wersji 1.18 i wcześniejszych będzie otrzymywał poprawki przez 9 miesięcy.
+Projekt Kubernetes zapewnia wsparcie dla trzech ostatnich wydań _minor_ ({{< skew latestVersion >}}, {{< skew prevMinorVersion >}}, {{< skew oldestMinorVersion >}}). Poprawki do wydania 1.19 i nowszych będą publikowane przez około rok. Kubernetes w wersji 1.18 i wcześniejszych będzie otrzymywał poprawki przez 9 miesięcy.
Wersje Kubernetesa oznaczane są jako **x.y.z**,
gdzie **x** jest oznaczeniem wersji głównej (_major_), **y** — podwersji (_minor_), a **z** — numer poprawki (_patch_), zgodnie z terminologią [Semantic Versioning](https://semver.org/).
diff --git a/content/pt-br/blog/_posts/2022-02-17-updated-dockershim-faq.md b/content/pt-br/blog/_posts/2022-02-17-updated-dockershim-faq.md
index bf92c1fedc..f783edfa43 100644
--- a/content/pt-br/blog/_posts/2022-02-17-updated-dockershim-faq.md
+++ b/content/pt-br/blog/_posts/2022-02-17-updated-dockershim-faq.md
@@ -15,7 +15,7 @@ como parte do lançamento do Kubernetes v1.20. Para obter mais detalhes sobre
o que isso significa, confira a postagem do blog
[Não entre em pânico: Kubernetes e Docker](/pt-br/blog/2020/12/02/dont-panic-kubernetes-and-docker/).
-Além disso, você pode ler [verifique se a remoção do dockershim afeta você](/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/)
+Além disso, você pode ler [verifique se a remoção do dockershim afeta você](/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you/)
para determinar qual impacto a remoção do _dockershim_ teria para você
ou para sua organização.
diff --git a/content/pt-br/docs/concepts/cluster-administration/certificates.md b/content/pt-br/docs/concepts/cluster-administration/certificates.md
index c75051304c..660471eb3d 100644
--- a/content/pt-br/docs/concepts/cluster-administration/certificates.md
+++ b/content/pt-br/docs/concepts/cluster-administration/certificates.md
@@ -164,7 +164,7 @@ Por fim, adicione os mesmos parâmetros nos parâmetros iniciais do Servidor de
"OU": ""
}]
}
-1. Gere a chave CA (`ca-key.pem`) e o certificado (` ca.pem`):
+1. Gere a chave CA (`ca-key.pem`) e o certificado (`ca.pem`):
../cfssl gencert -initca ca-csr.json | ../cfssljson -bare ca
1. Crie um arquivo de configuração JSON para gerar chaves e certificados para o Servidor de API, por exemplo, `server-csr.json`. Certifique-se de substituir os valores entre colchetes angulares por valores reais que você deseja usar. O `MASTER_CLUSTER_IP` é o IP do serviço do cluster para o servidor da API, conforme descrito na subseção anterior. O exemplo abaixo também assume que você está usando `cluster.local` como DNS de domínio padrão
diff --git a/content/pt-br/docs/concepts/containers/images.md b/content/pt-br/docs/concepts/containers/images.md
index 6f8b81dd7c..605f1dd982 100644
--- a/content/pt-br/docs/concepts/containers/images.md
+++ b/content/pt-br/docs/concepts/containers/images.md
@@ -88,7 +88,7 @@ Essa abordagem é adequada se você puder controlar a configuração do nó.
{{< note >}}
O Kubernetes padrão é compatível apenas com as seções `auths` e` HttpHeaders` na configuração do Docker.
-Auxiliares de credencial do Docker (`credHelpers` ou` credsStore`) não são suportados.
+Auxiliares de credencial do Docker (`credHelpers` ou `credsStore`) não são suportados.
{{< /note >}}
Docker armazena chaves de registros privados no arquivo `$HOME/.dockercfg` ou `$HOME/.docker/config.json`. Se você colocar o mesmo arquivo na lista de caminhos de pesquisa abaixo, o kubelet o usa como provedor de credenciais ao obter imagens.
diff --git a/content/pt-br/docs/concepts/overview/components.md b/content/pt-br/docs/concepts/overview/components.md
index b03946c4ae..892be1a922 100644
--- a/content/pt-br/docs/concepts/overview/components.md
+++ b/content/pt-br/docs/concepts/overview/components.md
@@ -59,7 +59,7 @@ O cloud-controller-manager executa apenas controladores que são específicos pa
Se você estiver executando o Kubernetes em suas próprias instalações ou em um ambiente de aprendizagem dentro de seu
próprio PC, o cluster não possui um gerenciador de controlador de nuvem.
-Tal como acontece com o kube-controller-manager, o cloud-controller-manager combina vários ciclos de controle logicamente independentes em um binário único que você executa como um processo único. Você pode escalar horizontalmente (exectuar mais de uma cópia) para melhorar o desempenho ou para auxiliar na tolerância a falhas.
+Tal como acontece com o kube-controller-manager, o cloud-controller-manager combina vários ciclos de controle logicamente independentes em um binário único que você executa como um processo único. Você pode escalar horizontalmente (executar mais de uma cópia) para melhorar o desempenho ou para auxiliar na tolerância a falhas.
Os seguintes controladores podem ter dependências de provedor de nuvem:
diff --git a/content/pt-br/docs/concepts/policy/_index.md b/content/pt-br/docs/concepts/policy/_index.md
new file mode 100644
index 0000000000..1b5e70aa9b
--- /dev/null
+++ b/content/pt-br/docs/concepts/policy/_index.md
@@ -0,0 +1,6 @@
+---
+title: "Políticas"
+weight: 90
+description: >
+ Políticas que você pode configurar e que afetam grupos de recursos.
+---
diff --git a/content/pt-br/docs/concepts/storage/_index.md b/content/pt-br/docs/concepts/storage/_index.md
new file mode 100644
index 0000000000..41cfbb3507
--- /dev/null
+++ b/content/pt-br/docs/concepts/storage/_index.md
@@ -0,0 +1,8 @@
+---
+title: "Armazenamento"
+weight: 70
+description: >
+ Formas de fornecer armazenamento temporário e de longa duração a Pods em seu
+ cluster.
+---
+
diff --git a/content/pt-br/docs/reference/glossary/annotation.md b/content/pt-br/docs/reference/glossary/annotation.md
new file mode 100644
index 0000000000..5e3ca07b31
--- /dev/null
+++ b/content/pt-br/docs/reference/glossary/annotation.md
@@ -0,0 +1,18 @@
+---
+title: Anotação
+id: annotation
+date: 2018-04-12
+full_link: /docs/concepts/overview/working-with-objects/annotations
+short_description: >
+ Um par de chave-valor (key-value) é usado para anexar metadados arbitrários não identificáveis a objetos.
+
+aka:
+tags:
+- fundamental
+---
+ Um par de chave-valor (key-value) é usado para anexar metadados arbitrários não identificáveis a objetos.
+
+
+
+Os metadados em uma anotação podem ser pequenos ou grandes, estruturados ou não estruturados, e podem incluir caracteres não permitidos pelos {{< glossary_tooltip text="rótulos" term_id="label" >}}. Clientes como ferramentas e bibliotecas podem recuperar esses metadados.
+
diff --git a/content/pt-br/docs/reference/glossary/api-group.md b/content/pt-br/docs/reference/glossary/api-group.md
new file mode 100644
index 0000000000..14529f0fca
--- /dev/null
+++ b/content/pt-br/docs/reference/glossary/api-group.md
@@ -0,0 +1,19 @@
+---
+title: Grupo de APIs
+id: api-group
+date: 2019-09-02
+full_link: /docs/concepts/overview/kubernetes-api/#api-groups-and-versioning
+short_description: >
+ Um conjunto de caminhos relacionados da API Kubernetes.
+
+aka:
+tags:
+- fundamental
+- architecture
+---
+Um conjunto de caminhos relacionados da API Kubernetes.
+
+
+Você pode ativar ou desativar cada grupo de APIs alterando a configuração do seu servidor de API. Você também pode desativar ou ativar caminhos para recursos específicos. O grupo de APIs facilita a extensão da API do Kubernetes. O grupo de APIs é especificado em um caminho REST e no campo `apiVersion` de um objeto serializado.
+
+* Leia o [Grupo de API](/docs/concepts/overview/kubernetes-api/#api-groups-and-versioning) para obter mais informações.
\ No newline at end of file
diff --git a/content/pt-br/docs/reference/glossary/applications.md b/content/pt-br/docs/reference/glossary/applications.md
new file mode 100644
index 0000000000..a00ca0ec6c
--- /dev/null
+++ b/content/pt-br/docs/reference/glossary/applications.md
@@ -0,0 +1,12 @@
+---
+title: Aplicações
+id: applications
+date: 2019-05-12
+full_link:
+short_description: >
+ A camada onde vários aplicativos em contêiner são executados.
+aka:
+tags:
+- fundamental
+---
+ A camada onde vários aplicativos em contêiner são executados.
diff --git a/content/pt-br/docs/reference/glossary/certificate.md b/content/pt-br/docs/reference/glossary/certificate.md
new file mode 100644
index 0000000000..d43ead1f32
--- /dev/null
+++ b/content/pt-br/docs/reference/glossary/certificate.md
@@ -0,0 +1,17 @@
+---
+title: Certificado
+id: certificate
+date: 2018-04-12
+full_link: /docs/tasks/tls/managing-tls-in-a-cluster/
+short_description: >
+ Um arquivo criptograficamente seguro usado para validar o acesso ao cluster Kubernetes.
+
+aka:
+tags:
+- security
+---
+ Um arquivo criptograficamente seguro usado para validar o acesso ao cluster Kubernetes.
+
+
+
+Os certificados permitem que aplicativos dentro de um cluster Kubernetes acessem a API do Kubernetes com segurança. Os certificados validam que os clientes têm permissão para acessar a API.
\ No newline at end of file
diff --git a/content/pt-br/docs/reference/glossary/cluster-architect.md b/content/pt-br/docs/reference/glossary/cluster-architect.md
new file mode 100644
index 0000000000..3aeb95e084
--- /dev/null
+++ b/content/pt-br/docs/reference/glossary/cluster-architect.md
@@ -0,0 +1,17 @@
+---
+title: Arquiteto de Cluster
+id: cluster-architect
+date: 2018-04-12
+full_link:
+short_description: >
+ Uma pessoa que projeta infraestrutura que envolve um ou mais clusters Kubernetes.
+
+aka:
+tags:
+- user-type
+---
+ Uma pessoa que projeta infraestrutura que envolve um ou mais clusters Kubernetes.
+
+
+
+Os arquitetos de clusters estão preocupados com as melhores práticas para sistemas distribuídos, por exemplo: alta disponibilidade e segurança.
\ No newline at end of file
diff --git a/content/pt-br/docs/reference/glossary/data-plane.md b/content/pt-br/docs/reference/glossary/data-plane.md
new file mode 100644
index 0000000000..2e7c9946f9
--- /dev/null
+++ b/content/pt-br/docs/reference/glossary/data-plane.md
@@ -0,0 +1,13 @@
+---
+title: Plano de Dados
+id: data-plane
+date: 2019-05-12
+full_link:
+short_description: >
+ A camada que fornece capacidade, tais como CPU, memória, rede e armazenamento, para que os contêineres possam ser executados e conectados a uma rede.
+
+aka:
+tags:
+- fundamental
+---
+ A camada que fornece capacidade, tais como CPU, memória, rede e armazenamento, para que os contêineres possam ser executados e conectados a uma rede.
diff --git a/content/pt-br/docs/reference/glossary/wg.md b/content/pt-br/docs/reference/glossary/wg.md
new file mode 100644
index 0000000000..56fb60dfe4
--- /dev/null
+++ b/content/pt-br/docs/reference/glossary/wg.md
@@ -0,0 +1,19 @@
+---
+title: WG (Grupo de Trabalho)
+id: wg
+date: 2018-04-12
+full_link: https://github.com/kubernetes/community/blob/master/sig-list.md#master-working-group-list
+short_description: >
+ Facilita a discussão e/ou implementação de um projeto de curta duração, pontual ou dissociado para um comitê, envolvendo um ou mais SIG (grupos de interesse especial).
+
+aka:
+tags:
+- community
+---
+ Facilita a discussão e/ou implementação de um projeto de curta duração, pontual ou dissociado para um comitê, envolvendo um ou mais {{< glossary_tooltip text="SIG" term_id="sig" >}} (grupos de interesse especial).
+
+
+
+Grupos de trabalho (do inglês - Working Group, WG) são uma maneira de organizar as pessoas para realizar uma tarefa.
+
+Para mais informações, consulte o repositório [kubernetes/community](https://github.com/kubernetes/community) e a lista atual de [SIGs e grupos de trabalho](https://github.com/kubernetes/community/blob/master/sig-list.md).
diff --git a/content/pt-br/docs/setup/production-environment/turnkey-solutions.md b/content/pt-br/docs/setup/production-environment/turnkey-solutions.md
new file mode 100644
index 0000000000..d60a54a754
--- /dev/null
+++ b/content/pt-br/docs/setup/production-environment/turnkey-solutions.md
@@ -0,0 +1,12 @@
+---
+title: Soluções de Nuvem Prontas para uso
+content_type: concept
+weight: 30
+---
+
+
+Essa página fornece uma lista de provedores de soluções certificadas do Kubernetes. Na página de cada provedor, você pode aprender como instalar e configurar clusters prontos para produção.
+
+
+
+{{< cncf-landscape helpers=true category="certified-kubernetes-hosted" >}}
diff --git a/content/ru/docs/concepts/cluster-administration/addons.md b/content/ru/docs/concepts/cluster-administration/addons.md
index 7e93ef82b2..5c6d6446b6 100644
--- a/content/ru/docs/concepts/cluster-administration/addons.md
+++ b/content/ru/docs/concepts/cluster-administration/addons.md
@@ -29,7 +29,7 @@ content_type: concept
* [OVN4NFV-K8S-Plugin](https://github.com/opnfv/ovn4nfv-k8s-plugin) - это подключаемый модуль контроллера CNI на основе OVN для обеспечения облачной цепочки сервисных функций (SFC), несколько наложенных сетей OVN, динамического создания подсети, динамического создания виртуальных сетей, сети поставщика VLAN, сети прямого поставщика и подключаемого к другим Multi Сетевые плагины, идеально подходящие для облачных рабочих нагрузок на периферии в сети с несколькими кластерами.
* [NSX-T](https://docs.vmware.com/en/VMware-NSX-T/2.0/nsxt_20_ncp_kubernetes.pdf) плагин для контейнера (NCP) обеспечивающий интеграцию между VMware NSX-T и контейнерами оркестраторов, таких как Kubernetes, а так же интеграцию между NSX-T и контейнеров на основе платформы CaaS/PaaS, таких как Pivotal Container Service (PKS) и OpenShift.
* [Nuage](https://github.com/nuagenetworks/nuage-kubernetes/blob/v5.1.1-1/docs/kubernetes-1-installation.rst) - эта платформа SDN, которая обеспечивает сетевое взаимодействие на основе политик между Kubernetes подами и не Kubernetes окружением, с отображением и мониторингом безопасности.
-* [Romana](https://romana.io) - это сетевое решение уровня 3 для сетей подов, которое также поддерживает [NetworkPolicy API](/docs/concepts/services-networking/network-policies/). Подробности установки Kubeadm доступны [здесь](https://github.com/romana/romana/tree/master/containerize).
+* [Romana](https://github.com/romana/romana) - это сетевое решение уровня 3 для сетей подов, которое также поддерживает [NetworkPolicy API](/docs/concepts/services-networking/network-policies/). Подробности установки Kubeadm доступны [здесь](https://github.com/romana/romana/tree/master/containerize).
* [Weave Net](https://www.weave.works/docs/net/latest/kubernetes/kube-addon/) предоставляет сеть и обеспечивает сетевую политику, будет работать на обеих сторонах сетевого раздела и не требует внешней базы данных.
## Обнаружение служб
diff --git a/content/ru/docs/contribute/advanced.md b/content/ru/docs/contribute/advanced.md
index bb4ff9a35f..7ee4af13cf 100644
--- a/content/ru/docs/contribute/advanced.md
+++ b/content/ru/docs/contribute/advanced.md
@@ -63,7 +63,7 @@ weight: 30
{{< note >}}
-Бот [`fejta-bot`](https://github.com/fejta-bot) автоматически помечает заявки как устаревшие после 90 дней отсутствия активности, а затем закрывает их после ещё 30 дней простоя, когда они становятся тухлыми. Дежурные по PR должны закрывать заявки после 14-30 дней бездействия.
+Бот [`k8s-ci-robot`](https://github.com/k8s-ci-robot) автоматически помечает заявки как устаревшие после 90 дней отсутствия активности, а затем закрывает их после ещё 30 дней простоя, когда они становятся тухлыми. Дежурные по PR должны закрывать заявки после 14-30 дней бездействия.
{{< /note >}}
diff --git a/content/ru/docs/contribute/generate-ref-docs/contribute-upstream.md b/content/ru/docs/contribute/generate-ref-docs/contribute-upstream.md
index 0834caa522..ba529883ef 100644
--- a/content/ru/docs/contribute/generate-ref-docs/contribute-upstream.md
+++ b/content/ru/docs/contribute/generate-ref-docs/contribute-upstream.md
@@ -25,6 +25,8 @@ weight: 20
- [Golang](https://golang.org/doc/install) версии 1.13+
- [Docker](https://docs.docker.com/engine/installation/)
- [etcd](https://github.com/coreos/etcd/)
+ - [make](https://www.gnu.org/software/make/)
+ - [gcc compiler/linker](https://gcc.gnu.org/)
- Созданная переменная окружения `GOPATH`, а путь к `etcd` должен быть прописан в переменной окружения `PATH`.
@@ -121,8 +123,9 @@ hack/update-generated-protobuf.sh
On branch master
...
modified: api/openapi-spec/swagger.json
+ modified: api/openapi-spec/v3/apis__apps__v1_openapi.json
+ modified: pkg/generated/openapi/zz_generated.openapi.go
modified: staging/src/k8s.io/api/apps/v1/generated.proto
- modified: staging/src/k8s.io/api/apps/v1/types.go
modified: staging/src/k8s.io/api/apps/v1/types_swagger_doc_generated.go
```
diff --git a/content/ru/docs/setup/learning-environment/minikube.md b/content/ru/docs/setup/learning-environment/minikube.md
index 500d171abe..fea7e14252 100644
--- a/content/ru/docs/setup/learning-environment/minikube.md
+++ b/content/ru/docs/setup/learning-environment/minikube.md
@@ -525,6 +525,4 @@ Minikube использует [libmachine](https://github.com/docker/machine/tre
## Сообщество
-Помощь, вопросы и комментарии приветствуются и поощряются! Разработчики Minikube проводят время на [Slack](https://kubernetes.slack.com) в канале #minikube (получить приглашение можно [здесь](http://slack.kubernetes.io/)). У нас также есть [список рассылки kubernetes-dev на Google Groups](https://groups.google.com/forum/#!forum/kubernetes-dev). Если вы отправляете сообщение в список, пожалуйста, начните вашу тему с "minikube: ".
-
-
+Помощь, вопросы и комментарии приветствуются и поощряются! Разработчики Minikube проводят время на [Slack](https://kubernetes.slack.com) в канале #minikube (получить приглашение можно [здесь](http://slack.kubernetes.io/)). У нас также есть [список рассылки dev@kubernetes на Google Groups](https://groups.google.com/a/kubernetes.io/g/dev/). Если вы отправляете сообщение в список, пожалуйста, начните вашу тему с "minikube: ".
diff --git a/content/ru/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md b/content/ru/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
index c55819902a..fd99c78cd6 100644
--- a/content/ru/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
+++ b/content/ru/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
@@ -59,7 +59,7 @@ kubelet исполняет команду `cat /tmp/healthy` в целевом
Когда контейнер запускается, он исполняет команду
```shell
-/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
+/bin/sh -c "touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600"
```
Для первых 30 секунд жизни контейнера существует файл `/tmp/healthy`.
diff --git a/content/ru/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html b/content/ru/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html
index 502beb23bd..738d2b0bc6 100644
--- a/content/ru/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html
+++ b/content/ru/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro.html
@@ -28,7 +28,7 @@ weight: 10
Развёртывания Kubernetes
-
Как только вы запустили кластер Kubernetes, вы можете развернуть свои контейнеризированные приложения в него. Для этого вам нужно создать конфигурацию развёртывания (Deployment) в Kubernetes. Развёртывание сообщает Kubernetes, как создавать и обновлять экземпляры вашего приложения. После создания развёртывания ведущий узел Kubernetes планирует запустить экземпляры приложения на отдельных узлах в кластере.
+
Как только вы запустили кластер Kubernetes, вы можете развернуть на нём свои контейнеризированные приложения. Для этого вам нужно создать конфигурацию развёртывания (Deployment) в Kubernetes. Развёртывание сообщает Kubernetes, как создавать и обновлять экземпляры вашего приложения. После создания развёртывания ведущий узел Kubernetes планирует запустить экземпляры приложения на отдельных узлах в кластере.
Когда экземпляры приложения были созданы, контроллер развёртывания Kubernetes непрерывно отслеживает их. Если узел, на котором размещен экземпляр, вышёл из строя или был удалён, контроллер развёртывания вместо этого экземпляра использует экземпляр на другом узле в кластере. Этот процесс представляет собой механизм самовосстановления, обеспечивающий работу кластера в случае возникновения аппаратных неисправностей либо технических работ.
diff --git a/content/ru/docs/tutorials/kubernetes-basics/expose/expose-intro.html b/content/ru/docs/tutorials/kubernetes-basics/expose/expose-intro.html
index 07cb3cd2df..1a59057eb8 100644
--- a/content/ru/docs/tutorials/kubernetes-basics/expose/expose-intro.html
+++ b/content/ru/docs/tutorials/kubernetes-basics/expose/expose-intro.html
@@ -29,7 +29,7 @@ weight: 10
Обзор сервисов Kubernetes
Под — это расходный материал в Kubernetes. У подов есть жизненный цикл . Когда рабочий узел завершается, запущенные поды в узле также уничтожаются. После этого ReplicaSet попытается автоматически вернуть кластер обратно в требуемое состояние, создавая новые поды, чтобы поддержать работоспособность приложения. Другой пример — бэкенд для обработки изображений с 3 репликами. Поскольку это взаимозаменяемые реплики, то они не влияют на фронтенд-часть, даже если под был уничтожен и пересоздан. Тем не менее, каждый под в кластере Kubernetes имеет уникальный IP-адрес, даже под на одном и том же узле, поэтому должен быть способ автоматической координации изменений между подами, чтобы приложения продолжали функционировать.
-
Сервис в Kubernetes — это абстрактный объект, который определяет логический набор подов и политику доступа к ним. Сервисы создают слабую связь между подами, которые от них зависят. Сервис создаётся в формате YAML (рекомендуемый формат) или JSON, как и все остальные объекты в Kubernetes. Как правило, набор подов для сервиса определяется LabelSelector (ниже описано, в каких случаях понадобиться сервис без указания selector в спецификации).
+
Сервис в Kubernetes — это абстрактный объект, который определяет логический набор подов и политику доступа к ним. Сервисы создают слабую связь между подами, которые от них зависят. Сервис создаётся в формате YAML (рекомендуемый формат) или JSON, как и все остальные объекты в Kubernetes. Как правило, набор подов для сервиса определяется LabelSelector (ниже описано, в каких случаях понадобится сервис без указания selector в спецификации).
Хотя у каждого пода есть уникальный IP-адрес, эти IP-адреса не доступны за пределами кластера без использования сервиса. Сервисы позволяют приложениям принимать трафик. Сервисы могут быть по-разному открыты, в зависимости от указанного поля type в ServiceSpec:
diff --git a/content/ru/examples/pods/probe/exec-liveness.yaml b/content/ru/examples/pods/probe/exec-liveness.yaml
index 07bf75f85c..6a9c9b3213 100644
--- a/content/ru/examples/pods/probe/exec-liveness.yaml
+++ b/content/ru/examples/pods/probe/exec-liveness.yaml
@@ -11,7 +11,7 @@ spec:
args:
- /bin/sh
- -c
- - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
+ - touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
diff --git a/content/uk/docs/concepts/overview/what-is-kubernetes.md b/content/uk/docs/concepts/overview/what-is-kubernetes.md
index 4bc2cb6a00..087e1d809d 100644
--- a/content/uk/docs/concepts/overview/what-is-kubernetes.md
+++ b/content/uk/docs/concepts/overview/what-is-kubernetes.md
@@ -93,7 +93,7 @@ Containers have become popular because they provide extra benefits, such as:
-## Чому вам потрібен Kebernetes і що він може робити
+## Чому вам потрібен Kubernetes і що він може робити
+
+有关为博客提供内容的信息,请参见
+https://kubernetes.io/zh/docs/contribute/new-content/blogs-case-studies/#write-a-blog-post
+
+{{< /comment >}}
\ No newline at end of file
diff --git a/content/zh/blog/_posts/2015-03-00-Welcome-To-Kubernetes-Blog.md b/content/zh/blog/_posts/2015-03-00-Welcome-To-Kubernetes-Blog.md
index fd0ea91f10..a0b0221177 100644
--- a/content/zh/blog/_posts/2015-03-00-Welcome-To-Kubernetes-Blog.md
+++ b/content/zh/blog/_posts/2015-03-00-Welcome-To-Kubernetes-Blog.md
@@ -41,7 +41,7 @@ To start things off, here's a roundup of recent Kubernetes posts from other site
-->
- [使用 Vitess 和 Kubernetes 在云中扩展 MySQL](http://googlecloudplatform.blogspot.com/2015/03/scaling-MySQL-in-the-cloud-with-Vitess-and-Kubernetes.html)
-- [虚拟机上的容器群集](http://googlecloudplatform.blogspot.com/2015/02/container-clusters-on-vms.html)
+- [虚拟机上的容器集群](http://googlecloudplatform.blogspot.com/2015/02/container-clusters-on-vms.html)
- [想知道的关于 kubernetes 的一切,却又不敢问](http://googlecloudplatform.blogspot.com/2015/01/everything-you-wanted-to-know-about-Kubernetes-but-were-afraid-to-ask.html)
- [什么构成容器集群?](http://googlecloudplatform.blogspot.com/2015/01/what-makes-a-container-cluster.html)
- [将 OpenStack 和 Kubernetes 与 Murano 集成](https://www.mirantis.com/blog/integrating-openstack-and-kubernetes-with-murano/)
diff --git a/content/zh/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md b/content/zh/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md
index e7d01a5a6e..8b7e00355d 100644
--- a/content/zh/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md
+++ b/content/zh/blog/_posts/2015-05-00-Weekly-Kubernetes-Community-Hangout.md
@@ -104,7 +104,7 @@ Every week the Kubernetes contributing community meet virtually over Google Hang
* * 可以使用 ServiceAccountToken 创建新的 service account。控制器将为它创建令牌。
- * 可以创建一个带有 service account 的 pod, pod 将在 /var/run/secrets/kubernets.io/…
+ * 可以创建一个带有 service account 的 pod, pod 将在 /var/run/secrets/kubernetes.io/…
自从 Kubernetes 1.0 在七月发布以来,我们已经看到大量公司采用建立分布式系统来管理其容器集群。
我们也对帮助 Kubernetes 社区变得更好,迅速发展的人感到钦佩。
@@ -90,7 +90,7 @@ Today, we’re also proud to mark the inaugural Kubernetes conference, [KubeCon]
-我们想强调几个使 Kuberbetes 变得更好的众多合作伙伴中的几位:
+我们想强调几个使 Kubernetes 变得更好的众多合作伙伴中的几位:
-会场地址:CodeNode * 英国伦敦南广场 10 号
-酒店住宿:[酒店](https://skillsmatter.com/contact-us)
-网站:[kubecon.io] (https://www.kubecon.io/)
+会场地址:CodeNode * 英国伦敦南广场 10 号
+酒店住宿:[酒店](https://skillsmatter.com/contact-us)
+网站:[kubecon.io] (https://www.kubecon.io/)
推特:[@KubeConio] (https://twitter.com/kubeconio)
谷歌是 KubeCon EU 2016 的钻石赞助商。下个月 3 月 10 - 11 号来伦敦,参观 13 号展位,了解 Kubernetes,Google Container Engine(GKE),Google Cloud Platform 的所有信息!
@@ -78,6 +78,6 @@ _KubeCon is organized by KubeAcademy, LLC, a community-driven group of developer
-* Sarah Novotny, Kubernetes Community Manager, Google
-->
-_KubeCon 是由 KubeAcademy、LLC 组织的,这是一个由社区驱动的开发者团体,专注于开发人员的教育和 kubernet.com 的推广
+_KubeCon 是由 KubeAcademy、LLC 组织的,这是一个由社区驱动的开发者团体,专注于开发人员的教育和 kubernetes 的推广
-* Sarah Novotny, 谷歌的 Kubernetes 社区经理
diff --git a/content/zh/blog/_posts/2016-02-00-Kubernetes-Community-Meeting-Notes.md b/content/zh/blog/_posts/2016-02-00-Kubernetes-Community-Meeting-Notes.md
index a9e0f10e4e..7c6544d2ad 100644
--- a/content/zh/blog/_posts/2016-02-00-Kubernetes-Community-Meeting-Notes.md
+++ b/content/zh/blog/_posts/2016-02-00-Kubernetes-Community-Meeting-Notes.md
@@ -4,17 +4,15 @@ date: 2016-02-09
slug: kubernetes-community-meeting-notes
---
-#### 2月4日 - rkt演示(祝贺 1.0 版本, CoreOS!), eBay 将 k8s 放在 Openstack 上并认为 Openstack 在 k8s, SIG 和片状测试激增方面取得了进展。
+#### 2 月 4 日 - rkt 演示(祝贺 1.0 版本,CoreOS!),eBay 将 k8s 放在 Openstack 上并认为 Openstack 在 k8s,SIG 和片状测试激增方面取得了进展。
* 书记员:Rob Hirschfeld
-* 演示视频(20分钟):CoreOS rkt + Kubernetes[Shaya Potter]
- * 期待在未来几个月内看到与rkt和k8s的整合(“rkt-netes”)。 还没有集成到 v1.2版本中。
+* 演示视频(20 分钟):CoreOS rkt + Kubernetes [Shaya Potter]
+ * 期待在未来几个月内看到与rkt和k8s的整合(“rkt-netes”)。 还没有集成到 v1.2 版本中。
* Shaya 做了一个演示(8分钟的会议视频参考)
- * rkt的CLI显示了旋转容器
+ * rkt 的 CLI 显示了旋转容器
* [注意:音频在点数上是乱码]
* 关于 k8s&rkt 整合的讨论
- * 下周 rkt 社区同步:https://groups.google.com/forum/#!topic/rkt-dev/FlwZVIEJGbY
+ * 下周 rkt 社区同步: https://groups.google.com/forum/#!topic/rkt-dev/FlwZVIEJGbY
* Dawn Chen:
* 将 rkt 与 kubernetes 集成的其余问题:1)cadivsor 2) DNS 3)与日志记录相关的错误
* 但是需要在 e2e 测试套件上做更多的工作
@@ -103,13 +101,16 @@ Kubernetes 贡献社区在每周四 10:00 PT 开会,通过视频会议讨论项
-要参与 Kubernetes 社区,请考虑加入我们的[Slack 频道][2],查看 GitHub上的 [Kubernetes 项目][3],或加入[Kubernetes-dev Google 小组][4]。如果你真的很兴奋,你可以完成上述所有工作并加入我们的下一次社区对话-2016年2月11日。请将您自己或您想要了解的主题添加到[议程][5]并通过加入[此组][6]来获取日历邀请。
+要参与 Kubernetes 社区,请考虑加入我们的 [Slack 频道][2],查看 GitHub 上的
+[Kubernetes 项目][3],或加入 [Kubernetes-dev Google 小组][4]。
+如果你真的很兴奋,你可以完成上述所有工作并加入我们的下一次社区对话 - 2016 年 2 月 11 日。
+请将你自己或你想要了解的主题添加到[议程][5]并通过加入[此组][6]来获取日历邀请。
"https://youtu.be/IScpP8Cj0hw?list=PL69nYSiGNLP1pkHsbPjzAewvMgGUpkCnJ"
[1]: https://github.com/kubernetes/kubernetes/pull/19714
-[2]: http://slack.k8s.io/
+[2]: https://slack.k8s.io/
[3]: https://github.com/kubernetes/
[4]: https://groups.google.com/forum/#!forum/kubernetes-dev
[5]: https://docs.google.com/document/d/1VQDIAB0OqiSjIHI8AWMvSdceWhnz56jNpZrLs6o7NJY/edit#
diff --git a/content/zh/blog/_posts/2016-07-00-Dashboard-Web-Interface-For-Kubernetes.md b/content/zh/blog/_posts/2016-07-00-Dashboard-Web-Interface-For-Kubernetes.md
index d92b18bcc2..5eb19414a1 100644
--- a/content/zh/blog/_posts/2016-07-00-Dashboard-Web-Interface-For-Kubernetes.md
+++ b/content/zh/blog/_posts/2016-07-00-Dashboard-Web-Interface-For-Kubernetes.md
@@ -41,7 +41,7 @@ The Dashboard UI now handles all workload resources. This means that no matter w
[ ](https://lh3.googleusercontent.com/p9bMGxPx4jE6_Z2KB-MktmyuAxyFst-bEk29M_Bn0Bj5ul7uzinH6u5WjHsMmqhGvBwlABZt06dwQ5qkBZiLq_EM1oddCmpwChvXDNXZypaS5l8uzkKuZj3PBUmzTQT4dgDxSXgz)
-->
-Dashboard UI 现在处理所有工作负载资源。这意味着无论您运行什么工作负载类型,它都在 web 界面中可见,并且您可以对其进行操作更改。例如,可以使用[Pet Sets](/docs/user-guide/petset/)修改有状态的 mysql 安装,使用部署对 web 服务器进行滚动更新,或使用守护程序安装群集监视。
+Dashboard UI 现在处理所有工作负载资源。这意味着无论您运行什么工作负载类型,它都在 web 界面中可见,并且您可以对其进行操作更改。例如,可以使用[Pet Sets](/docs/user-guide/petset/)修改有状态的 mysql 安装,使用部署对 web 服务器进行滚动更新,或使用守护程序安装集群监视。
@@ -105,9 +105,9 @@ Here is a list of our focus areas for the following months:
以下是我们接下来几个月的重点领域:
-- [Handle more Kubernetes resources](https://github.com/kubernetes/dashboard/issues/961) - 显示群集用户可能与之交互的所有资源。一旦完成,dashboard 就可以完全替代cli。
+- [Handle more Kubernetes resources](https://github.com/kubernetes/dashboard/issues/961) - 显示集群用户可能与之交互的所有资源。一旦完成,dashboard 就可以完全替代cli。
- [Monitoring and troubleshooting](https://github.com/kubernetes/dashboard/issues/962) - 将资源使用统计信息/图表添加到 Dashboard 中显示的对象。这个重点领域将允许对云应用程序进行可操作的调试和故障排除。
-- [Security, auth and logging in](https://github.com/kubernetes/dashboard/issues/964) - 使仪表板可从群集外部的网络访问,并使用自定义身份验证系统。
+- [Security, auth and logging in](https://github.com/kubernetes/dashboard/issues/964) - 使仪表板可从集群外部的网络访问,并使用自定义身份验证系统。
-祝贺 Kubernetes 社区发布了另一个[有价值的版本](https://kubernetes.io/blog/2016/07/kubernetes-1.3-bridging-cloud-native-and-enterprise-workloads)。
+祝贺 Kubernetes 社区发布了另一个[有价值的版本](https://kubernetes.io/blog/2016/07/kubernetes-1-3-bridging-cloud-native-and-enterprise-workloads/)。
专注于有状态应用程序和联邦集群是我对 1.3 如此兴奋的两个原因。
Kubernetes 对有状态应用程序(例如 Cassandra、Kafka 和 MongoDB)的支持至关重要。
重要服务依赖于数据库、键值存储、消息队列等。
@@ -40,7 +42,7 @@ Diamanti 正在加速在生产中使用有状态应用程序的容器-在这方
**应用程序不仅仅需要牛**
除了诸如Web服务器之类的无状态容器(因为它们是可互换的,因此被称为“牛”)之外,用户越来越多地使用容器来部署有状态工作负载,以从“一次构建,随处运行”中受益并提高裸机效率/利用率。
这些“宠物”(之所以称为“宠物”,是因为每个宠物都需要特殊的处理)带来了新的要求,包括更长的生命周期,配置依赖项,有状态故障转移以及性能敏感性。
@@ -56,10 +58,10 @@ Pet Set 还利用普遍存在的 DNS SRV 记录简化了服务发现,DNS SRV
-Diamanti 对 Kubernete s的 [FlexVolume 贡献](https://github.com/kubernetes/kubernetes/pull/13840) 通过为持久卷提供低延迟存储并保证性能来实现有状态工作负载,包括从容器到媒体的强制服务质量。
+Diamanti 对 Kubernetes 的 [FlexVolume 贡献](https://github.com/kubernetes/kubernetes/pull/13840) 通过为持久卷提供低延迟存储并保证性能来实现有状态工作负载,包括从容器到媒体的强制服务质量。
**联邦主义者**
@@ -83,7 +85,7 @@ It’s easy to imagine powerful multi-cluster use cases with cross-cluster feder
很容易想象在将来的版本中具有跨集群联邦服务的强大多集群用例。
一个示例是根据治理,安全性和性能要求调度容器。
Diamanti 的调度程序扩展是在考虑了这一概念的基础上开发的。
-我们的[第一个实现](https://github.com/kubernetes/kubernetes/pull/13580)使 Kubernetes 调度程序意识到每个群集节点本地的网络和存储资源。
+我们的[第一个实现](https://github.com/kubernetes/kubernetes/pull/13580)使 Kubernetes 调度程序意识到每个集群节点本地的网络和存储资源。
将来,类似的概念可以应用于跨集群联邦服务的更广泛的放置控件。
-
+
**作者**: [Michael Hausenblas](https://twitter.com/mhausenblas) (Red Hat), [Ilya Dmitrichenko](https://twitter.com/errordeveloper) (Weaveworks)
-您将如何开发一个 Kubernates 应用?也就是说,您如何编写并测试一个要在 Kubernates 上运行的应用程序?本文将重点介绍在独自开发或者团队协作中,您可能希望了解到的为了成功编写 Kubernetes 应用程序而需面临的挑战,工具和方法。
+您将如何开发一个 Kubernetes 应用?也就是说,您如何编写并测试一个要在 Kubernetes 上运行的应用程序?本文将重点介绍在独自开发或者团队协作中,您可能希望了解到的为了成功编写 Kubernetes 应用程序而需面临的挑战,工具和方法。
-我们假定您是一位开发人员,有您钟爱的编程语言,编辑器/IDE(集成开发环境),以及可用的测试框架。在针对 Kubernates 开发应用时,最重要的目标是减少对当前工作流程的影响,改变越少越好,尽量做到最小。举个例子,如果您是 Node.js 开发人员,习惯于那种热重载的环境 - 也就是说您在编辑器里一做保存,正在运行的程序就会自动更新 - 那么跟容器、容器镜像或者镜像仓库打交道,又或是跟 Kubernetes 部署、triggers 以及更多头疼东西打交道,不仅会让人难以招架也真的会让开发过程完全失去乐趣。
+我们假定您是一位开发人员,有您钟爱的编程语言,编辑器/IDE(集成开发环境),以及可用的测试框架。在针对 Kubernetes 开发应用时,最重要的目标是减少对当前工作流程的影响,改变越少越好,尽量做到最小。举个例子,如果您是 Node.js 开发人员,习惯于那种热重载的环境 - 也就是说您在编辑器里一做保存,正在运行的程序就会自动更新 - 那么跟容器、容器镜像或者镜像仓库打交道,又或是跟 Kubernetes 部署、triggers 以及更多头疼东西打交道,不仅会让人难以招架也真的会让开发过程完全失去乐趣。
-许多工具支持纯 offline 开发,包括 Minikube、Docker(Mac 版/Windows 版)、Minishift 以及下文中我们将详细讨论的几种。有时,比如说在一个微服务系统中,已经有若干微服务在运行,proxied 模式(通过转发把数据流传进传出集群)就非常合适,Telepresence 就是此类工具的一个实例。live 模式,本质上是您基于一个远程集群进行构建和部署。最后,纯 online 模式意味着您的开发环境和运行集群都是远程的,典型的例子是 [Eclipse Che](https://www.eclipse.org/che/docs/kubernetes-single-user.html) 或者 [Cloud 9](https://github.com/errordeveloper/k9c)。现在让我们仔细看看离线开发的基础:在本地运行 Kubernetes。
+许多工具支持纯 offline 开发,包括 Minikube、Docker(Mac 版/Windows 版)、Minishift 以及下文中我们将详细讨论的几种。有时,比如说在一个微服务系统中,已经有若干微服务在运行,proxied 模式(通过转发把数据流传进传出集群)就非常合适,Telepresence 就是此类工具的一个实例。live 模式,本质上是您基于一个远程集群进行构建和部署。最后,纯 online 模式意味着您的开发环境和运行集群都是远程的,典型的例子是 [Eclipse Che](https://www.eclipse.org/che/docs/che-7/introduction-to-eclipse-che/) 或者 [Cloud 9](https://github.com/errordeveloper/k9c)。现在让我们仔细看看离线开发的基础:在本地运行 Kubernetes。
-* 它允许开发人员使用本地或者远程的 Kubernates 集群
+* 它允许开发人员使用本地或者远程的 Kubernetes 集群
* 如何部署到生产环境取决于用户, Draft 的作者推荐了他们的另一个项目 - Brigade
* 可以代替 Skaffold, 并且可以和 Squash 一起使用
@@ -255,7 +257,7 @@ More info:
更多信息:
* [Squash: A Debugger for Kubernetes Apps](https://www.youtube.com/watch?v=5TrV3qzXlgI)
-* [Getting Started Guide](https://github.com/solo-io/squash/blob/master/docs/getting-started.md)
+* [Getting Started Guide](https://squash.solo.io/overview/)
### Telepresence
@@ -397,10 +399,10 @@ Note that for the target Kubernetes cluster we’ve been using Minikube locally,
请注意,我们一直使用 Minikube 的本地 Kubernetes 集群,但是您也可以使用 ksync 和 Skaffold 的远程集群跟随练习。
-### 实践演练:ksync
+## 实践演练:ksync
-一旦两个部署建好并且 pod 开始运行,我们转发 `stock-con` 服务以供本地读取(另开一个终端窗口):
+一旦两个部署建好并且 pod 开始运行,我们转发 `stock-con` 服务以供本地读取(另开一个终端窗口)并检查 `healthz` 端点的响应:
```
$ kubectl get -n dok po --selector=app=stock-con \
diff --git a/content/zh/blog/_posts/2018-06-28-Airflow-Kubernetes-Operator.md b/content/zh/blog/_posts/2018-06-28-Airflow-Kubernetes-Operator.md
index 5606cf9c2c..0dd689680a 100644
--- a/content/zh/blog/_posts/2018-06-28-Airflow-Kubernetes-Operator.md
+++ b/content/zh/blog/_posts/2018-06-28-Airflow-Kubernetes-Operator.md
@@ -545,7 +545,7 @@ Kubernetes Executor是另一种Airflow功能,允许动态分配任务已解决
-最后,我们在您的群集上创建完整的Airflow部署。这包括Airflow配置,postgres后端,webserver +调度程序以及之间的所有必要服务。需要注意的一点是,提供的角色绑定是集群管理员,因此如果您没有该集群的权限级别,可以在scripts / ci / kubernetes / kube / airflow.yaml中进行修改。
+最后,我们在您的集群上创建完整的Airflow部署。这包括Airflow配置,postgres后端,webserver +调度程序以及之间的所有必要服务。需要注意的一点是,提供的角色绑定是集群管理员,因此如果您没有该集群的权限级别,可以在scripts / ci / kubernetes / kube / airflow.yaml中进行修改。
diff --git a/content/zh/blog/_posts/2018-07-10-coredns-ga.md b/content/zh/blog/_posts/2018-07-10-coredns-ga.md
index 1fc8aa5249..7a52771292 100644
--- a/content/zh/blog/_posts/2018-07-10-coredns-ga.md
+++ b/content/zh/blog/_posts/2018-07-10-coredns-ga.md
@@ -143,7 +143,7 @@ can do beyond that specification.
--->
## 一些特殊功能
-标准的 CoreDNS Kubernetes 配置旨在与以前的 kube-dns 在行为上向后兼容。但是,通过进行一些配置更改,CoreDNS 允许您修改 DNS 服务发现在群集中的工作方式。这些功能中的许多功能仍要符合 [Kubernetes DNS规范](https://github.com/kubernetes/dns/blob/master/docs/specification.md);它们在增强了功能的同时保持向后兼容。由于 CoreDNS 并非 *仅* 用于 Kubernetes,而是通用的 DNS 服务器,因此您可以做很多超出该规范的事情。
+标准的 CoreDNS Kubernetes 配置旨在与以前的 kube-dns 在行为上向后兼容。但是,通过进行一些配置更改,CoreDNS 允许您修改 DNS 服务发现在集群中的工作方式。这些功能中的许多功能仍要符合 [Kubernetes DNS规范](https://github.com/kubernetes/dns/blob/master/docs/specification.md);它们在增强了功能的同时保持向后兼容。由于 CoreDNS 并非 *仅* 用于 Kubernetes,而是通用的 DNS 服务器,因此您可以做很多超出该规范的事情。
**作者**: Michael Taufen (Google)
+
+**编者注:在 1.22 版本弃用后,该功能已在 1.24 版本中删除。**
+
@@ -88,7 +93,7 @@ Dynamic Kubelet configuration provides the following core features:
-要使用动态 Kubelet 配置功能,群集管理员或服务提供商将首先发布包含所需配置的 ConfigMap,
+要使用动态 Kubelet 配置功能,集群管理员或服务提供商将首先发布包含所需配置的 ConfigMap,
然后设置每个 Node.Spec.ConfigSource.ConfigMap 引用以指向新的 ConfigMap。
运营商可以以他们喜欢的速率更新这些参考,从而使他们能够执行新配置的受控部署。
diff --git a/content/zh/blog/_posts/2018-08-02-dynamically-expand-volume-csi.md b/content/zh/blog/_posts/2018-08-02-dynamically-expand-volume-csi.md
index 755239e9eb..690935b5a0 100644
--- a/content/zh/blog/_posts/2018-08-02-dynamically-expand-volume-csi.md
+++ b/content/zh/blog/_posts/2018-08-02-dynamically-expand-volume-csi.md
@@ -5,11 +5,9 @@ date: 2018-08-02
---
-更多详细信息,请访问:https://github.com/container-storage-interface/spec/blob/master/spec.md
+更多详细信息,请访问: https://github.com/container-storage-interface/spec/blob/master/spec.md
**作者**: [Ahmet Alp Balkan](https://twitter.com/ahmetb) (Google)
+
+**更新(2021 年 12 月):** “Kubernetes 从 v1.23 开始具有内置 gRPC 健康探测。
+了解更多信息,请参阅[配置存活探针、就绪探针和启动探针](/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-grpc-liveness-probe)。
+本文最初是为有关实现相同任务的外部工具所写。”
+
RuntimeClass 资源是将运行时属性显示到控制平面的重要基础。
-例如,要对具有支持不同运行时间的异构节点的群集实施调度程序支持,我们可以在 RuntimeClass 定义中添加
+例如,要对具有支持不同运行时间的异构节点的集群实施调度程序支持,我们可以在 RuntimeClass 定义中添加
[NodeAffinity](/zh/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity)条件。
另一个需要解决的领域是管理可变资源需求以运行不同运行时的 Pod。
[Pod Overhead 提案](https://docs.google.com/document/d/1EJKT4gyl58-kzt2bnwkv08MIUZ6lkDpXcxkHqCvvAp4/preview)
@@ -107,7 +107,7 @@ Many other RuntimeClass extensions have also been proposed, and will be revisite
- 提供运行时支持的可选功能,并更好地查看由不兼容功能导致的错误。
- 自动运行时或功能发现,支持无需手动配置的调度决策。
- 标准化或一致的 RuntimeClass 名称,用于定义一组具有相同名称的 RuntimeClass 的集群应支持的属性。
-- 动态注册附加的运行时,因此用户可以在不停机的情况下在现有群集上安装新的运行时。
+- 动态注册附加的运行时,因此用户可以在不停机的情况下在现有集群上安装新的运行时。
- 根据 Pod 的要求“匹配” RuntimeClass。
例如,指定运行时属性并使系统与适当的 RuntimeClass 匹配,而不是通过名称显式分配 RuntimeClass。
diff --git a/content/zh/blog/_posts/2018-10-11-topology-aware-volume-provisioning.md b/content/zh/blog/_posts/2018-10-11-topology-aware-volume-provisioning.md
index 3aefd018ab..87dfb0d90e 100644
--- a/content/zh/blog/_posts/2018-10-11-topology-aware-volume-provisioning.md
+++ b/content/zh/blog/_posts/2018-10-11-topology-aware-volume-provisioning.md
@@ -4,11 +4,9 @@ title: 'Kubernetes 中的拓扑感知数据卷供应'
date: 2018-10-11
---
-通过提供拓扑感知动态卷供应功能,具有持久卷的多区域集群体验在 Kubernetes 1.12 中得到了改进。此功能使得 Kubernetes 在动态供应卷时能做出明智的决策,方法是从调度器获得为 Pod 提供数据卷的最佳位置。在多区域集群环境,这意味着数据卷能够在满足你的 Pod 运行需要的合适的区域被供应,从而允许您跨故障域轻松部署和扩展有状态工作负载,从而提供高可用性和容错能力。
+通过提供拓扑感知动态卷供应功能,具有持久卷的多区域集群体验在 Kubernetes 1.12
+中得到了改进。此功能使得 Kubernetes 在动态供应卷时能做出明智的决策,方法是从调度器获得为
+Pod 提供数据卷的最佳位置。在多区域集群环境,这意味着数据卷能够在满足你的 Pod
+运行需要的合适的区域被供应,从而允许你跨故障域轻松部署和扩展有状态工作负载,从而提供高可用性和容错能力。
-在此功能被提供之前,在多区域集群中使用区域化的持久磁盘(例如 AWS ElasticBlockStore,Azure Disk,GCE PersistentDisk)运行有状态工作负载存在许多挑战。动态供应独立于 Pod 调度处理,这意味着只要您创建了一个 PersistentVolumeClaim(PVC),一个卷就会被供应。这也意味着供应者不知道哪些 Pod 正在使用该卷,也不清楚任何可能影响调度的 Pod 约束。
+在此功能被提供之前,在多区域集群中使用区域化的持久磁盘(例如 AWS ElasticBlockStore、
+Azure Disk、GCE PersistentDisk)运行有状态工作负载存在许多挑战。动态供应独立于 Pod
+调度处理,这意味着只要你创建了一个 PersistentVolumeClaim(PVC),一个卷就会被供应。
+这也意味着供应者不知道哪些 Pod 正在使用该卷,也不清楚任何可能影响调度的 Pod 约束。
* AWS EBS
* Azure Disk
-* GCE PD (包括 Regional PD)
+* GCE PD(包括 Regional PD)
* CSI(alpha) - 目前只有 GCE PD CSI 驱动实现了拓扑支持
虽然最初支持的插件集都是基于区域的,但我们设计此功能时遵循 Kubernetes 跨环境可移植性的原则。
拓扑规范是通用的,并使用类似于基于标签的规范,如 Pod nodeSelectors 和 nodeAffinity。
-该机制允许您定义自己的拓扑边界,例如内部部署集群中的机架,而无需修改调度程序以了解这些自定义拓扑。
+该机制允许你定义自己的拓扑边界,例如内部部署集群中的机架,而无需修改调度程序以了解这些自定义拓扑。
此外,拓扑信息是从 Pod 规范中抽象出来的,因此 Pod 不需要了解底层存储系统的拓扑特征。
-这意味着您可以在多个集群、环境和存储系统中使用相同的 Pod 规范。
+这意味着你可以在多个集群、环境和存储系统中使用相同的 Pod 规范。
-要启用此功能,您需要做的就是创建一个将 `volumeBindingMode` 设置为 `WaitForFirstConsumer` 的 StorageClass:
+要启用此功能,你需要做的就是创建一个将 `volumeBindingMode` 设置为 `WaitForFirstConsumer` 的 StorageClass:
```
kind: StorageClass
@@ -210,7 +214,7 @@ spec:
-之后,您可以看到根据 Pod 设置的策略在区域中配置卷:
+之后,你可以看到根据 Pod 设置的策略在区域中配置卷:
```
$ kubectl get pv -o=jsonpath='{range .items[*]}{.spec.claimRef.name}{"\t"}{.metadata.labels.failure\-domain\.beta\.kubernetes\.io/zone}{"\n"}{end}'
@@ -228,12 +232,13 @@ logs-web-1 us-central1-a
-有关拓扑感知动态供应功能的官方文档可在此处获取:https://kubernetes.io/docs/concepts/storage/storage-classes/#volume-binding-mode
+有关拓扑感知动态供应功能的官方文档可在此处获取:
+https://kubernetes.io/docs/concepts/storage/storage-classes/#volume-binding-mode
-有关 CSI 驱动程序的文档,请访问:https://kubernetes-csi.github.io/docs/
+有关 CSI 驱动程序的文档,请访问: https://kubernetes-csi.github.io/docs/
-如果您对此功能有反馈意见或有兴趣参与设计和开发,请加入 [Kubernetes 存储特别兴趣小组](https://github.com/kubernetes/community/tree/master/sig-storage)(SIG)。我们正在快速成长,并始终欢迎新的贡献者。
+如果你对此功能有反馈意见或有兴趣参与设计和开发,请加入
+[Kubernetes 存储特别兴趣小组](https://github.com/kubernetes/community/tree/master/sig-storage)(SIG)。
+我们正在快速成长,并始终欢迎新的贡献者。
-特别感谢帮助推出此功能的所有贡献者,包括 Cheng Xing ([verult](https://github.com/verult))、Chuqiang Li ([lichuqiang](https://github.com/lichuqiang))、David Zhu ([davidz627](https://github.com/davidz627))、Deep Debroy ([ddebroy](https://github.com/ddebroy))、Jan Šafránek ([jsafrane](https://github.com/jsafrane))、Jordan Liggitt ([liggitt](https://github.com/liggitt))、Michelle Au ([msau42](https://github.com/msau42))、Pengfei Ni ([feiskyer](https://github.com/feiskyer))、Saad Ali ([saad-ali](https://github.com/saad-ali))、Tim Hockin ([thockin](https://github.com/thockin)),以及 Yecheng Fu ([cofyc](https://github.com/cofyc))。
+特别感谢帮助推出此功能的所有贡献者,包括 Cheng Xing ([verult](https://github.com/verult))、
+Chuqiang Li ([lichuqiang](https://github.com/lichuqiang))、David Zhu ([davidz627](https://github.com/davidz627))、
+Deep Debroy ([ddebroy](https://github.com/ddebroy))、Jan Šafránek ([jsafrane](https://github.com/jsafrane))、
+Jordan Liggitt ([liggitt](https://github.com/liggitt))、Michelle Au ([msau42](https://github.com/msau42))、
+Pengfei Ni ([feiskyer](https://github.com/feiskyer))、Saad Ali ([saad-ali](https://github.com/saad-ali))、
+Tim Hockin ([thockin](https://github.com/thockin)),以及 Yecheng Fu ([cofyc](https://github.com/cofyc))。
diff --git a/content/zh/blog/_posts/2019-03-28-PID-Limiting.md b/content/zh/blog/_posts/2019-03-28-PID-Limiting.md
index cb56c0a97d..58e612ab51 100644
--- a/content/zh/blog/_posts/2019-03-28-PID-Limiting.md
+++ b/content/zh/blog/_posts/2019-03-28-PID-Limiting.md
@@ -34,7 +34,7 @@ In such a scenario, it’s possible for something akin to a fork bomb taking pla
在这里,我们谈论的是某些容器的贪婪性。 在理想情况之外,失控进程有时会发生,特别是在测试集群中。 因此,在这些集群中会发生一些混乱的非生产环境准备就绪的事情。
-在这种情况下,可能会在节点内部发生类似于 fork 炸弹耗尽 PID 的攻击。随着资源的缓慢腐蚀,被一些不断产生子进程的僵尸般的进程所接管,其他正常的工作负载会因为这些像气球般不断膨胀的浪费的处理能力而开始受到冲击。这可能导致同一 Pod 上的其他进程缺少所需的 PID。这也可能导致有趣的副作用,因为节点可能会发生故障,并且该Pod的副本将安排到新的机器上,至此,该过程将在整个群集中重复进行。
+在这种情况下,可能会在节点内部发生类似于 fork 炸弹耗尽 PID 的攻击。随着资源的缓慢腐蚀,被一些不断产生子进程的僵尸般的进程所接管,其他正常的工作负载会因为这些像气球般不断膨胀的浪费的处理能力而开始受到冲击。这可能导致同一 Pod 上的其他进程缺少所需的 PID。这也可能导致有趣的副作用,因为节点可能会发生故障,并且该Pod的副本将安排到新的机器上,至此,该过程将在整个集群中重复进行。
-在接收请求被持久化为 Kubernetes 中的对象之前,Kubernetes 允许通过 [admission controller webhooks](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/) 将策略决策与 API 服务器分离,从而拦截这些请求。[Gatekeeper](https://github.com/open-policy-agent/gatekeeper) 创建的目的是使用户能够通过配置(而不是代码)自定义控制许可,并使用户了解群集的状态,而不仅仅是针对评估状态的单个对象,在这些对象准许加入的时候。Gatekeeper 是 Kubernetes 的一个可定制的许可 webhook ,它由 [Open Policy Agent (OPA)](https://www.openpolicyagent.org) 强制执行, OPA 是 Cloud Native 环境下的策略引擎,由 CNCF 主办。
+在接收请求被持久化为 Kubernetes 中的对象之前,Kubernetes 允许通过 [admission controller webhooks](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/) 将策略决策与 API 服务器分离,从而拦截这些请求。[Gatekeeper](https://github.com/open-policy-agent/gatekeeper) 创建的目的是使用户能够通过配置(而不是代码)自定义控制许可,并使用户了解集群的状态,而不仅仅是针对评估状态的单个对象,在这些对象准许加入的时候。Gatekeeper 是 Kubernetes 的一个可定制的许可 webhook ,它由 [Open Policy Agent (OPA)](https://www.openpolicyagent.org) 强制执行, OPA 是 Cloud Native 环境下的策略引擎,由 CNCF 主办。
### 审核
-根据群集中强制执行的 Constraint,审核功能可定期评估复制的资源,并检测先前存在的错误配置。Gatekeeper 将审核结果存储为 `violations`,在相关 Constraint 的 `status` 字段中列出。
+根据集群中强制执行的 Constraint,审核功能可定期评估复制的资源,并检测先前存在的错误配置。Gatekeeper 将审核结果存储为 `violations`,在相关 Constraint 的 `status` 字段中列出。
```yaml
apiVersion: constraints.gatekeeper.sh/v1beta1
diff --git a/content/zh/blog/_posts/2019-11-26-cloud-native-java-controller-sdk.md b/content/zh/blog/_posts/2019-11-26-cloud-native-java-controller-sdk.md
index 097c9ca826..9712ddf447 100644
--- a/content/zh/blog/_posts/2019-11-26-cloud-native-java-controller-sdk.md
+++ b/content/zh/blog/_posts/2019-11-26-cloud-native-java-controller-sdk.md
@@ -84,9 +84,11 @@ Take maven project as example, adding the following dependencies into your depen
-然后我们可以使用提供的生成器库来编写自己的控制器。例如,下面是一个简单的控制,它打印出关于监视通知的节点信息,请看完整的例子:
+然后我们可以使用提供的生成器库来编写自己的控制器。例如,下面是一个简单的控制,它打印出关于监视通知的节点信息,
+在[此处](https://github.com/kubernetes-client/java/blob/master/examples/examples-release-13/src/main/java/io/kubernetes/client/examples/ControllerExample.java)
+查看完整的例子:
```java
...
Reconciler reconciler = new Reconciler() {
diff --git a/content/zh/blog/_posts/2019-12-09-kubernetes-1.17-release-announcement.md b/content/zh/blog/_posts/2019-12-09-kubernetes-1.17-release-announcement.md
index 0fddf3dea4..d8e9d2a49e 100644
--- a/content/zh/blog/_posts/2019-12-09-kubernetes-1.17-release-announcement.md
+++ b/content/zh/blog/_posts/2019-12-09-kubernetes-1.17-release-announcement.md
@@ -3,6 +3,7 @@ layout: blog
title: "Kubernetes 1.17:稳定"
date: 2019-12-09T13:00:00-08:00
slug: kubernetes-1-17-release-announcement
+evergreen: true
---
**作者:** [Kubernetes 1.17发布团队](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.17/release_team.md)
@@ -67,14 +69,14 @@ Standard labels are used by Kubernetes components to support some features. For
The labels are reaching general availability in this release. Kubernetes components have been updated to populate the GA and beta labels and to react to both. However, if you are using the beta labels in your pod specs for features such as node affinity, or in your custom controllers, we recommend that you start migrating them to the new GA labels. You can find the documentation for the new labels here:
-->
-- [实例类型](https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#nodekubernetesioinstance-type)
-- [地区](https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#topologykubernetesioregion)
-- [区域](https://kubernetes.io/docs/reference/kubernetes-api/labels-annotations-taints/#topologykubernetesiozone)
+- [实例类型](/zh/docs/reference/labels-annotations-taints/#nodekubernetesioinstance-type)
+- [地区](/zh/docs/reference/labels-annotations-taints/#topologykubernetesioregion)
+- [区域](/zh/docs/reference/labels-annotations-taints/#topologykubernetesiozone)
## 卷快照进入公开测试版
### 卷快照是什么?
-
+
许多的存储系统(如谷歌云持久化磁盘,亚马逊弹性块存储和许多的内部存储系统)支持为持久卷创建快照。快照代表卷在一个时间点的复制。它可用于配置新卷(使用快照数据提前填充)或恢复卷到一个之前的状态(用快照表示)。
-支持所有这些特性是Kubernets负载可移植的目标:Kubernetes旨在分布式系统应用和底层集群之间创建一个抽象层,使得应用可以不感知其运行集群的具体信息并且部署也不需特定集群的知识。
+支持所有这些特性是Kubernetes负载可移植的目标:Kubernetes旨在分布式系统应用和底层集群之间创建一个抽象层,使得应用可以不感知其运行集群的具体信息并且部署也不需特定集群的知识。
@@ -143,7 +147,8 @@ Prior to CSI, Kubernetes provided a powerful volume plugin system. These volume
随着更多容器存储接口驱动变成生产环境可用,我们希望所有的Kubernetes用户从容器存储接口模型中获益。然而,我们不希望强制用户以破坏现有基本可用的存储接口的方式去改变负载和配置。道路很明确,我们将不得不用CSI替换树内插件接口。什么是容器存储接口迁移?
在容器存储接口迁移上所做的努力使得替换现有的树内存储插件,如`kubernetes.io/gce-pd`或`kubernetes.io/aws-ebs`,为相应的容器存储接口驱动成为可能。如果容器存储接口迁移正常工作,Kubernetes终端用户不会注意到任何差别。迁移过后,Kubernetes用户可以继续使用现有接口来依赖树内存储插件的功能。
@@ -163,7 +168,8 @@ The Kubernetes team has worked hard to ensure the stability of storage APIs and
你可以在这篇博客中阅读更多关于[容器存储接口迁移成为公开测试版](https://kubernetes.io/blog/2019/12/09/kubernetes-1-17-feature-csi-migration-beta/).
+You can read more in the blog entry about [CSI migration going to beta](https://kubernetes.io/blog/2019/12/09/kubernetes-1-17-feature-csi-migration-beta/).
+-->
## 其它更新
### 可用性
Kubernetes 1.17 可以[在GitHub下载](https://github.com/kubernetes/kubernetes/releases/tag/v1.17.0)。开始使用Kubernetes,看看这些[交互教学](https://kubernetes.io/docs/tutorials/)。你可以非常容易使用[kubeadm](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)安装1.17。
### 发布团队
-我们很高兴宣布 Kubernetes 1.18 版本的交付,这是我们 2020 年的第一版! Kubernetes 1.18 包含 38 个增强功能:15 项增强功能已转为稳定版,11 项增强功能处于 beta 阶段,12 项增强功能处于 alpha 阶段。
+我们很高兴宣布 Kubernetes 1.18 版本的交付,这是我们 2020 年的第一版!Kubernetes
+1.18 包含 38 个增强功能:15 项增强功能已转为稳定版,11 项增强功能处于 beta
+阶段,12 项增强功能处于 alpha 阶段。
-Kubernetes 1.18 是一个近乎 “完美” 的版本。 为了改善 beta 和稳定的特性,已进行了大量工作,以确保用户获得更好的体验。 我们在增强现有功能的同时也增加了令人兴奋的新特性,这些有望进一步增强用户体验。
+Kubernetes 1.18 是一个近乎 “完美” 的版本。为了改善 beta 和稳定的特性,已进行了大量工作,
+以确保用户获得更好的体验。我们在增强现有功能的同时也增加了令人兴奋的新特性,这些有望进一步增强用户体验。
+
-对 alpha,beta 和稳定版进行几乎同等程度的增强是一项伟大的成就。 它展现了社区在提高 Kubernetes 的可靠性以及继续扩展其现有功能方面所做的巨大努力。
+对 alpha、beta 和稳定版进行几乎同等程度的增强是一项伟大的成就。它展现了社区在提高
+Kubernetes 的可靠性以及继续扩展其现有功能方面所做的巨大努力。
-Kubernetes 在 1.18 版中的 Beta 阶段功能 [拓扑管理器特性](https://github.com/nolancon/website/blob/f4200307260ea3234540ef13ed80de325e1a7267/content/en/docs/tasks/administer-cluster/topology-manager.md) 启用 CPU 和设备(例如 SR-IOV VF)的 NUMA 对齐,这将使您的工作负载在针对低延迟而优化的环境中运行。在引入拓扑管理器之前,CPU 和设备管理器将做出彼此独立的资源分配决策。 这可能会导致在多处理器系统上非预期的资源分配结果,从而导致对延迟敏感的应用程序的性能下降。
+Kubernetes 在 1.18 版中的 Beta 阶段功能[拓扑管理器特性](https://github.com/nolancon/website/blob/f4200307260ea3234540ef13ed80de325e1a7267/content/en/docs/tasks/administer-cluster/topology-manager.md)启用
+CPU 和设备(例如 SR-IOV VF)的 NUMA 对齐,这将使你的工作负载在针对低延迟而优化的环境中运行。
+在引入拓扑管理器之前,CPU 和设备管理器将做出彼此独立的资源分配决策。
+这可能会导致在多处理器系统上非预期的资源分配结果,从而导致对延迟敏感的应用程序的性能下降。
-### Serverside Apply 推出Beta 2
+### Serverside Apply 推出 Beta 2
-Serverside Apply 在1.16 中进入 Beta 阶段,但现在在 1.18 中进入了第二个 Beta 阶段。 这个新版本将跟踪和管理所有新 Kubernetes 对象的字段更改,从而使您知道什么更改了资源以及何时发生了更改。
+Serverside Apply 在1.16 中进入 Beta 阶段,但现在在 1.18 中进入了第二个 Beta 阶段。
+这个新版本将跟踪和管理所有新 Kubernetes 对象的字段更改,从而使你知道什么更改了资源以及何时发生了更改。
-在 Kubernetes 1.18 中,Ingress 有两个重要的补充:一个新的 `pathType` 字段和一个新的 `IngressClass` 资源。`pathType` 字段允许指定路径的匹配方式。 除了默认的`ImplementationSpecific`类型外,还有新的 `Exact`和`Prefix` 路径类型。
+在 Kubernetes 1.18 中,Ingress 有两个重要的补充:一个新的 `pathType` 字段和一个新的
+`IngressClass` 资源。`pathType` 字段允许指定路径的匹配方式。除了默认的
+`ImplementationSpecific` 类型外,还有新的 `Exact` 和 `Prefix` 路径类型。
-`IngressClass` 资源用于描述 Kubernetes 集群中 Ingress 的类型。 Ingress 对象可以通过在Ingress 资源类型上使用新的`ingressClassName` 字段来指定与它们关联的类。 这个新的资源和字段替换了不再建议使用的 `kubernetes.io/ingress.class` 注解。
+`IngressClass` 资源用于描述 Kubernetes 集群中 Ingress 的类型。Ingress 对象可以通过在
+Ingress 资源类型上使用新的 `ingressClassName` 字段来指定与它们关联的类。
+这个新的资源和字段替换了不再建议使用的 `kubernetes.io/ingress.class` 注解。
-SIG-CLI 一直在争论着调试工具的必要性。随着 [临时容器](https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/) 的发展,我们如何使用基于 `kubectl exec` 的工具来支持开发人员的必要性变得越来越明显。 [`kubectl alpha debug` 命令](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cli/20190805-kubectl-debug.md) 的增加,(由于是 alpha 阶段,非常欢迎您反馈意见),使开发人员可以轻松地在集群中调试 Pod。我们认为这个功能的价值非常高。 此命令允许创建一个临时容器,该容器在要尝试检查的 Pod 旁边运行,并且还附加到控制台以进行交互式故障排除。
+SIG-CLI 一直在争论着调试工具的必要性。随着[临时容器](https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/)的发展,
+我们如何使用基于 `kubectl exec` 的工具来支持开发人员的必要性变得越来越明显。
+[`kubectl alpha debug` 命令](https://github.com/kubernetes/enhancements/blob/master/keps/sig-cli/20190805-kubectl-debug.md)的增加,
+(由于是 alpha 阶段,非常欢迎你反馈意见),使开发人员可以轻松地在集群中调试 Pod。
+我们认为这个功能的价值非常高。此命令允许创建一个临时容器,该容器在要尝试检查的
+Pod 旁边运行,并且还附加到控制台以进行交互式故障排除。
-用于 Windows 的 CSI 代理的 Alpha 版本随 Kubernetes 1.18 一起发布。 CSI 代理通过允许Windows 中的容器执行特权存储操作来启用 Windows 上的 CSI 驱动程序。
+用于 Windows 的 CSI 代理的 Alpha 版本随 Kubernetes 1.18 一起发布。CSI 代理通过允许
+Windows 中的容器执行特权存储操作来启用 Windows 上的 CSI 驱动程序。
-在我们的 [发布文档](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md)中查看 Kubernetes 1.18 发行版的完整详细信息。
+在我们的[发布文档](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md)中查看
+Kubernetes 1.18 发行版的完整详细信息。
-Kubernetes 1.18 可以在 [GitHub](https://github.com/kubernetes/kubernetes/releases/tag/v1.18.0) 上下载。 要开始使用Kubernetes,请查看这些 [交互教程](https://kubernetes.io/docs/tutorials/) 或通过[kind](https://kind.sigs.k8s.io/) 使用 Docker 容器运行本地 kubernetes 集群。您还可以使用[kubeadm](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)轻松安装 1.18。
+Kubernetes 1.18 可以在 [GitHub](https://github.com/kubernetes/kubernetes/releases/tag/v1.18.0)
+上下载。要开始使用 Kubernetes,请查看这些[交互教程](https://kubernetes.io/docs/tutorials/)或通过
+[kind](https://kind.sigs.k8s.io/) 使用 Docker 容器运行本地 kubernetes 集群。你还可以使用
+[kubeadm](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/) 轻松安装 1.18。
-通过数百位贡献了技术和非技术内容的个人的努力,使本次发行成为可能。 特别感谢由 Searchable AI 的网站可靠性工程师 Jorge Alarcon Ochoa 领导的[发布团队](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.18/release_team.md)。 34 位发布团队成员协调了发布的各个方面,从文档到测试、验证和功能完整性。
+通过数百位贡献了技术和非技术内容的个人的努力,使本次发行成为可能。
+特别感谢由 Searchable AI 的网站可靠性工程师 Jorge Alarcon Ochoa
+领导的[发布团队](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.18/release_team.md)。
+34 位发布团队成员协调了发布的各个方面,从文档到测试、验证和功能完整性。
-随着 Kubernetes 社区的发展壮大,我们的发布过程很好地展示了开源软件开发中的协作。 Kubernetes 继续快速获取新用户。 这种增长创造了一个积极的反馈回路,其中有更多的贡献者提交了代码,从而创建了更加活跃的生态系统。 迄今为止,Kubernetes 已有 [40,000 独立贡献者](https://k8s.devstats.cncf.io/d/24/overall-project-statistics?orgId=1) 和一个超过3000人的活跃社区。
+随着 Kubernetes 社区的发展壮大,我们的发布过程很好地展示了开源软件开发中的协作。
+Kubernetes 继续快速获取新用户。这种增长创造了一个积极的反馈回路,
+其中有更多的贡献者提交了代码,从而创建了更加活跃的生态系统。迄今为止,Kubernetes 已有
+[40,000 独立贡献者](https://k8s.devstats.cncf.io/d/24/overall-project-statistics?orgId=1)和一个超过 3000 人的活跃社区。
-LHC 是世界上最大,功能最强大的粒子加速器。它是由来自世界各地成千上万科学家合作的结果,所有这些合作都是为了促进科学的发展。以类似的方式,Kubernetes 已经成为一个聚集了来自数百个组织的数千名贡献者–所有人都朝着在各个方面改善云计算的相同目标努力的项目! 发布名称“ A Bit Quarky” 的意思是提醒我们,非常规的想法可以带来巨大的变化,对开放性保持开放态度将有助于我们进行创新。
+LHC 是世界上最大,功能最强大的粒子加速器。它是由来自世界各地成千上万科学家合作的结果,
+所有这些合作都是为了促进科学的发展。以类似的方式,Kubernetes
+已经成为一个聚集了来自数百个组织的数千名贡献者–所有人都朝着在各个方面改善云计算的相同目标努力的项目!
+发布名称 “A Bit Quarky” 的意思是提醒我们,非常规的想法可以带来巨大的变化,对开放性保持开放态度将有助于我们进行创新。
-Maru Lango 是目前居住在墨西哥城的设计师。她的专长是产品设计,她还喜欢使用 CSS + JS 进行品牌、插图和视觉实验,为技术和设计社区的多样性做贡献。您可能会在大多数社交媒体上以 @marulango 的身份找到她,或查看她的网站: https://marulango.com
+Maru Lango 是目前居住在墨西哥城的设计师。她的专长是产品设计,她还喜欢使用 CSS + JS
+进行品牌、插图和视觉实验,为技术和设计社区的多样性做贡献。你可能会在大多数社交媒体上以
+@marulango 的身份找到她,或查看她的网站: https://marulango.com
-- 爱立信正在使用 Kubernetes 和其他云原生技术来交付[高标准的 5G 网络](https://www.cncf.io/case-study/ericsson/),这可以在 CI/CD 上节省多达 90% 的支出。
-- Zendesk 正在使用 Kubernetes [运行其现有应用程序的约 70%](https://www.cncf.io/case-study/zendesk/)。它还正在使所构建的所有新应用都可以在 Kubernetes 上运行,从而节省时间、提高灵活性并加快其应用程序开发的速度。
-- LifeMiles 因迁移到 Kubernetes 而[降低了 50% 的基础设施开支](https://www.cncf.io/case-study/lifemiles/)。Kubernetes 还使他们可以将其可用资源容量增加一倍。
+- 爱立信正在使用 Kubernetes 和其他云原生技术来交付[高标准的 5G 网络](https://www.cncf.io/case-study/ericsson/),
+ 这可以在 CI/CD 上节省多达 90% 的支出。
+- Zendesk 正在使用 Kubernetes [运行其现有应用程序的约 70%](https://www.cncf.io/case-study/zendesk/)。
+ 它还正在使所构建的所有新应用都可以在 Kubernetes 上运行,从而节省时间、提高灵活性并加快其应用程序开发的速度。
+- LifeMiles 因迁移到 Kubernetes 而[降低了 50% 的基础设施开支](https://www.cncf.io/case-study/lifemiles/)。
+ Kubernetes 还使他们可以将其可用资源容量增加一倍。
-- CNCF发布了[年度调查](https://www.cncf.io/blog/2020/03/04/2019-cncf-survey-results-are-here-deployments-are-growing-in-size-and-speed-as-cloud-native-adoption-becomes-mainstream/) 的结果,表明 Kubernetes 在生产中的使用正在飞速增长。调查发现,有78%的受访者在生产中使用Kubernetes,而去年这一比例为 58%。
-- CNCF 举办的 “Kubernetes入门” 课程有[超过 100,000 人注册](https://www.cncf.io/announcement/2020/01/28/cloud-native-computing-foundation-announces-introduction-to-kubernetes-course-surpasses-100000-registrations/)。
+- CNCF 发布了[年度调查](https://www.cncf.io/blog/2020/03/04/2019-cncf-survey-results-are-here-deployments-are-growing-in-size-and-speed-as-cloud-native-adoption-becomes-mainstream/)的结果,
+ 表明 Kubernetes 在生产中的使用正在飞速增长。调查发现,有 78% 的受访者在生产中使用 Kubernetes,而去年这一比例为 58%。
+- CNCF 举办的 “Kubernetes 入门” 课程有[超过 100,000 人注册](https://www.cncf.io/announcement/2020/01/28/cloud-native-computing-foundation-announces-introduction-to-kubernetes-course-surpasses-100000-registrations/)。
-CNCF 继续完善 DevStats。这是一个雄心勃勃的项目,旨在对项目中的无数贡献数据进行可视化展示。[K8s DevStats](https://k8s.devstats.cncf.io/d/12/dashboards?orgId=1) 展示了主要公司贡献者的贡献细目,以及一系列令人印象深刻的预定义的报告,涉及从贡献者个人的各方面到 PR 生命周期的各个方面。
+CNCF 继续完善 DevStats。这是一个雄心勃勃的项目,旨在对项目中的无数贡献数据进行可视化展示。
+[K8s DevStats](https://k8s.devstats.cncf.io/d/12/dashboards?orgId=1) 展示了主要公司贡献者的贡献细目,
+以及一系列令人印象深刻的预定义的报告,涉及从贡献者个人的各方面到 PR 生命周期的各个方面。
-在过去的一个季度中,641 家不同的公司和超过 6,409 个个人为 Kubernetes 作出贡献。 [查看 DevStats](https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&var-period=m&var-repogroup_name=All) 以了解有关 Kubernetes 项目和社区发展速度的信息。
+在过去的一个季度中,641 家不同的公司和超过 6,409 个个人为 Kubernetes 作出贡献。
+[查看 DevStats](https://k8s.devstats.cncf.io/d/11/companies-contributing-in-repository-groups?orgId=1&var-period=m&var-repogroup_name=All)
+以了解有关 Kubernetes 项目和社区发展速度的信息。
-Kubecon + CloudNativeCon EU 2020 已经推迟 - 有关最新信息,请查看[新型肺炎发布页面](https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/attend/novel-coronavirus-update/)。
+Kubecon + CloudNativeCon EU 2020 已经推迟 - 有关最新信息,
+请查看[新型肺炎发布页面](https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/attend/novel-coronavirus-update/)。
-在 2020 年 4 月 23 日,和 Kubernetes 1.18 版本团队一起了解此版本的主要功能,包括 kubectl debug、拓扑管理器、Ingress 毕业为 V1 版本以及 client-go。 在此处注册:https://www.cncf.io/webinars/kubernetes-1-18/ 。
+在 2020 年 4 月 23 日,和 Kubernetes 1.18 版本团队一起了解此版本的主要功能,
+包括 kubectl debug、拓扑管理器、Ingress 毕业为 V1 版本以及 client-go。
+在此处注册: https://www.cncf.io/webinars/kubernetes-1-18/ 。
-参与 Kubernetes 的最简单方法是加入众多与您的兴趣相关的 [特别兴趣小组](https://github.com/kubernetes/community/blob/master/sig-list.md) (SIGs) 之一。 您有什么想向 Kubernetes 社区发布的内容吗? 参与我们的每周 [社区会议](https://github.com/kubernetes/community/tree/master/communication),并通过以下渠道分享您的声音。 感谢您一直以来的反馈和支持。
+参与 Kubernetes 的最简单方法是加入众多与你的兴趣相关的[特别兴趣小组](https://github.com/kubernetes/community/blob/master/sig-list.md)(SIGs)之一。
+你有什么想向 Kubernetes 社区发布的内容吗?参与我们的每周[社区会议](https://github.com/kubernetes/community/tree/master/communication),
+并通过以下渠道分享你的声音。感谢你一直以来的反馈和支持。
+**作者**: Chris Seto (Cockroach Labs)
+
+
+
+只要你愿意遵守规则,那么在 Kubernetes 上的部署和探索可以是相当愉快的。更多时候,事情会 "顺利进行"。
+然而,如果一个人对与必须保持存活的鳄鱼一起旅行或者是对必须保持可用的数据库进行扩展有兴趣,
+情况可能会变得更复杂一点。
+相较于这个问题,建立自己的飞机或数据库甚至还可能更容易一些。撇开与鳄鱼的旅行不谈,扩展一个高可用的有状态系统也不是一件小事。
+
+
+任何系统的扩展都有两个主要组成部分。
+1. 增加或删除系统将运行的基础架构,以及
+2. 确保系统知道如何处理自身额外实例的添加和删除。
+
+
+大多数无状态系统,例如网络服务器,在创建时不需要意识到对等实例。而有状态的系统,包括像 CockroachDB 这样的数据库,
+必须与它们的对等实例协调,并对数据进行 shuffle。运气好的话,CockroachDB 可以处理数据的再分布和复制。
+棘手的部分是在确保数据和实例分布在许多故障域(可用性区域)的操作过程中能够容忍故障的发生。
+
+
+Kubernetes 的职责之一是将 "资源"(如磁盘或容器)放入集群中,并满足其请求的约束。
+例如。"我必须在可用性区域 _A_"(见[在多个区域运行](/zh/docs/setup/best-practices/multiple-zone/#nodes-are-labeled)),
+或者 "我不能被放置到与某个 Pod 相同的节点上"
+(见[亲和与反亲和](/zh/docs/setup/best-practices/multiple-zone/#nodes-are-labeled))。
+
+
+作为对这些约束的补充,Kubernetes 提供了 [StatefulSets](/zh/docs/concepts/workloads/controllers/statefulset/),
+为 Pod 提供身份,以及 "跟随" 这些指定 Pod 的持久化存储。
+在 StatefulSet 中,身份是由 Pod 名称末尾一个呈增序的整数处理的。
+值得注意的是,这个整数必须始终是连续的:在一个 StatefulSet 中,
+如果 Pod 1 和 3 存在,那么 Pod 2 也必须存在。
+
+
+在架构上,CockroachCloud 将 CockroachDB 的每个区域作为 StatefulSet 部署在自己的 Kubernetes 集群中 --
+参见 [Orchestrate CockroachDB in a Single Kubernetes Cluster](https://www.cockroachlabs.com/docs/stable/orchestrate-cockroachdb-with-kubernetes.html)。
+在这篇文章中,我将着眼于一个单独的区域,一个 StatefulSet 和一个至少分布有三个可用区的 Kubernetes 集群。
+
+
+一个三节点的 CockroachCloud 集群如下所示:
+
+
+
+
+
+在向集群增加额外的资源时,我们也会将它们分布在各个区域。
+为了获得最快的用户体验,我们同时添加所有 Kubernetes 节点,然后扩大 StatefulSet 的规模。
+
+
+
+
+
+请注意,无论 Pod 被分配到 Kubernetes 节点的顺序如何,都会满足反亲和性。
+在这个例子中,Pod 0、1 、2 分别被分配到 A、B 、C 区,但 Pod 3 和 4 以不同的顺序被分配到 B 和 A 区。
+反亲和性仍然得到满足,因为 Pod 仍然被放置在不同的区域。
+
+
+要从集群中移除资源,我们以相反的顺序执行这些操作。
+
+
+我们首先缩小 StatefulSet 的规模,然后从集群中移除任何缺少 CockroachDB Pod 的节点。
+
+
+
+
+
+现在,请记住,规模为 _n_ 的 StatefulSet 中的 Pods 一定具有 `[0,n)` 范围内的 id。
+当把一个 StatefulSet 规模缩减了 _m_ 时,Kubernetes 会移除 _m_ 个 Pod,从最高的序号开始,向最低的序号移动,
+[与它们被添加的顺序相反](/zh/docs/concepts/workloads/controllers/statefulset/#deployment-and-scaling-guarantees)。
+考虑一下下面的集群拓扑结构。
+
+
+
+
+
+当从这个集群中移除 5 号到 3 号 Pod 时,这个 StatefulSet 仍然横跨三个可用区。
+
+
+
+
+
+然而,Kubernetes 的调度器并不像我们一开始预期的那样 _保证_ 上面的分布。
+
+
+我们对以下内容的综合认识是导致这种误解的原因。
+* Kubernetes [自动跨区分配 Pod](/zh/docs/setup/best-practices/multiple-zone/#pods-are-spread-across-zone) 的能力
+* 一个有 _n_ 个副本的 StatefulSet,当 Pod 被部署时,它们会按照 `{0...n-1}` 的顺序依次创建。
+更多细节见 [StatefulSet](/zh/docs/concepts/workloads/controllers/statefulset/#deployment-and-scaling-guarantees)。
+
+
+考虑以下拓扑结构:
+
+
+
+
+
+这些 Pod 是按顺序创建的,它们分布在集群里所有可用区。当序号 5 到 3 的 Pod 被终止时,
+这个集群将从 C 区消失!
+
+
+
+
+
+更糟糕的是,在这个时候,我们的自动化机制将删除节点 A-2,B-2,和 C-2。
+并让 CRDB-1 处于未调度状态,因为持久性卷只在其创建时所处的区域内可用。
+
+
+为了纠正后一个问题,我们现在采用了一种“狩猎和啄食”的方法来从集群中移除机器。
+与其盲目地从集群中移除 Kubernetes 节点,不如只移除没有 CockroachDB Pod 的节点。
+更为艰巨的任务是管理 Kubernetes 的调度器。
+
+
+## 一场头脑风暴后我们有了 3 个选择。
+
+### 1. 升级到 kubernetes 1.18 并利用 Pod 拓扑分布约束
+
+虽然这似乎是一个完美的解决方案,但在写这篇文章的时候,Kubernetes 1.18 在公有云中两个最常见的
+托管 Kubernetes 服务( EKS 和 GKE )上是不可用的。
+此外,[Pod 拓扑分布约束](/zh/docs/concepts/workloads/pods/pod-topology-spread-constraints/)在
+[1.18 中仍是测试版功能](https://v1-18.docs.kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/),
+这意味着即使在 v1.18 可用时,它[也不能保证在托管集群中可用](https://cloud.google.com/kubernetes-engine/docs/concepts/types-of-clusters#kubernetes_feature_choices)。
+整个努力让人联想到在 Internet Explorer 8 还存在的时候访问 [caniuse.com](https://caniuse.com/)。
+
+
+### 2. 在每个区部署一个 StatefulSet。
+
+与跨所有可用区部署一个 StatefulSet 相比,在每个区部署一个带有节点亲和性的 StatefulSet 可以实现手动控制分区拓扑结构。
+我们的团队过去曾考虑过这个选项,我们也倾向此选项。
+但最终,我们决定放弃这个方案,因为这需要对我们的代码库进行大规模的修改,而且在现有的客户集群上进行迁移也是一个同样大的工程。
+
+
+
+### 3. 编写一个自定义的 Kubernetes 调度器
+
+感谢 [Kelsey Hightower](https://github.com/kelseyhightower/scheduler) 的例子和
+[Banzai Cloud](https://banzaicloud.com/blog/k8s-custom-scheduler/) 的博文,我们决定投入进去,编写自己的[自定义 Kubernetes 调度器](/zh/docs/tasks/extend-kubernetes/configure-multiple-schedulers/)。
+一旦我们的概念验证被部署和运行,我们很快就发现,Kubernetes 的调度器也负责将持久化卷映射到它所调度的 Pod 上。
+[`kubectl get events`](/zh/docs/tasks/extend-kubernetes/configure-multiple-schedulers/#verifying-that-the-pods-wer-scheduled-using-the-desired-schedulers)
+的输出让我们相信有另一个系统在发挥作用。
+在我们寻找负责存储声明映射的组件的过程中,我们发现了
+[kube-scheduler 插件系统](/zh/docs/concepts/scheduling-eviction/scheduling-framework/)。
+我们的下一个 POC 是一个"过滤器"插件,它通过 Pod 的序号来确定适当的可用区域,并且工作得非常完美。
+
+我们的[自定义调度器插件](https://github.com/cockroachlabs/crl-scheduler)是开源的,并在我们所有的 CockroachCloud 集群中运行。
+对 StatefulSet Pod 的调度方式有掌控力,让我们有信心扩大规模。
+一旦 GKE 和 EKS 中的 Pod 拓扑分布约束可用,我们可能会考虑让我们的插件退役,但其维护的开销出乎意料地低。
+更好的是:该插件的实现与我们的业务逻辑是横向的。部署它,或取消它,就像改变 StatefulSet 定义中的 "schedulerName" 字段一样简单。
+
+---
+
+[Chris Seto](https://twitter.com/_ostriches) 是 Cockroach 实验室的一名软件工程师,负责
+[CockroachCloud](https://cockroachlabs.cloud) CockroachDB 的 Kubernetes 自动化。
diff --git a/content/zh/blog/_posts/2020-12-02-dockershim-faq.md b/content/zh/blog/_posts/2020-12-02-dockershim-faq.md
index d873fab049..49e9471153 100644
--- a/content/zh/blog/_posts/2020-12-02-dockershim-faq.md
+++ b/content/zh/blog/_posts/2020-12-02-dockershim-faq.md
@@ -9,20 +9,28 @@ layout: blog
title: "Dockershim Deprecation FAQ"
date: 2020-12-02
slug: dockershim-faq
-aliases: [ '/dockershim' ]
-->
+
+_**更新**:本文有[较新版本](/zh/blog/2022/02/17/dockershim-faq/)。_
+
本文回顾了自 Kubernetes v1.20 版宣布弃用 Dockershim 以来所引发的一些常见问题。
关于 Kubernetes kubelets 从容器运行时的角度弃用 Docker 的细节以及这些细节背后的含义,请参考博文
[别慌: Kubernetes 和 Docker](/blog/2020/12/02/dont-panic-kubernetes-and-docker/)。
+此外,你可以阅读[检查 Dockershim 移除是否影响你](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/)以检查它是否会影响你。
+
@@ -45,7 +53,7 @@ You can read more about the community discussion and planning in the
-->
Dockershim 向来都是一个临时解决方案(因此得名:shim)。
你可以进一步阅读
-[移除 Kubernetes 增强方案 Dockershim][drkep]
+[移除 Dockershim 这一 Kubernetes 增强方案][drkep]
以了解相关的社区讨论和计划。
+### 从 Kubernetes 中移除后我还能使用 dockershim 吗? {#can-i-still-use-dockershim-after-it-is-removed-from-kubernetes}
+
+
+更新:Mirantis 和 Docker [已承诺][mirantis]在 dockershim 从 Kubernetes
+中删除后对其进行维护。
+
+[mirantis]: https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/
+
+
@@ -153,11 +178,11 @@ related projects follow a similar pattern as well, demonstrating the stability a
usability of other container runtimes. As an example, OpenShift 4.x has been
using the [CRI-O] runtime in production since June 2019.
-->
-此外,[kind](https://kind.sigs.k8s.io/) 项目使用 containerd 已经有年头了,
+此外,[kind] 项目使用 containerd 已经有年头了,
并且在这个场景中,稳定性还明显得到提升。
Kind 和 containerd 每天都会做多次协调,以验证对 Kubernetes 代码库的所有更改。
其他相关项目也遵循同样的模式,从而展示了其他容器运行时的稳定性和可用性。
-例如,OpenShift 4.x 从 2019 年 6 月以来,就一直在生产环境中使用 [CRI-O](https://cri-o.io/) 运行时。
+例如,OpenShift 4.x 从 2019 年 6 月以来,就一直在生产环境中使用 [CRI-O] 运行时。
@@ -256,14 +286,15 @@ runtime where possible.
另外还有一个需要关注的点,那就是当创建镜像时,系统维护或嵌入容器方面的任务将无法工作。
对于前者,可以用 [`crictl`](https://github.com/kubernetes-sigs/cri-tools) 工具作为临时替代方案
-(参见 [从 docker 命令映射到 crictl](https://kubernetes.io/zh/docs/tasks/debug-application-cluster/crictl/#mapping-from-docker-cli-to-crictl));
+(参见[从 docker 命令映射到 crictl](/zh/docs/reference/tools/map-crictl-dockercli/));
对于后者,可以用新的容器创建选项,比如
+[cr](https://github.com/kubernetes-sigs/cri-tools)、
[img](https://github.com/genuinetools/img)、
[buildah](https://github.com/containers/buildah)、
[kaniko](https://github.com/GoogleContainerTools/kaniko)、或
@@ -289,7 +320,7 @@ Kubernetes documentation on [Container Runtimes]
-### 我还有问题怎么办?{#what-if-I-have-more-question}
+### 我还有问题怎么办?{#what-if-I-have-more-questions}
如果你使用了一个有供应商支持的 Kubernetes 发行版,你可以咨询供应商他们产品的升级计划。
-对于最终用户的问题,请把问题发到我们的最终用户社区的论坛:https://discuss.kubernetes.io/。
+对于最终用户的问题,请把问题发到我们的最终用户社区的[论坛](https://discuss.kubernetes.io/)。
**作者:** Jorge Castro, Duffie Cooley, Kat Cosgrove, Justin Garrison, Noah Kantrowitz, Bob Killen, Rey Lejano, Dan “POP” Papandrea, Jeffrey Sica, Davanum “Dims” Srinivas
+
+**更新**:Kubernetes 通过 `dockershim` 对 Docker 的支持现已移除。
+有关更多信息,请阅读[移除 FAQ](/zh/dockershim)。
+你还可以通过专门的 [GitHub issue](https://github.com/kubernetes/kubernetes/issues/106917) 讨论弃用。
+
-如果你正在使用 GKE、EKS、或 AKS
-([默认使用 containerd](https://github.com/Azure/AKS/releases/tag/2020-11-16))
-这类托管 Kubernetes 服务,你需要在 Kubernetes 后续版本移除对 Docker 支持之前,
+如果你正在使用 GKE、EKS、或 AKS 这类托管 Kubernetes 服务,
+你需要在 Kubernetes 后续版本移除对 Docker 支持之前,
确认工作节点使用了被支持的容器运行时。
如果你的节点被定制过,你可能需要根据你自己的环境和运行时需求更新它们。
请与你的服务供应商协作,确保做出适当的升级测试和计划。
@@ -66,15 +76,15 @@ testing and planning.
如果你正在运营你自己的集群,那还应该做些工作,以避免集群中断。
在 v1.20 版中,你仅会得到一个 Docker 的弃用警告。
-当对 Docker 运行时的支持在 Kubernetes 某个后续发行版(目前的计划是 2021 年晚些时候的 1.22 版)中被移除时,
+当对 Docker 运行时的支持在 Kubernetes 某个后续发行版(目前的计划是 2021 年晚些时候的 1.22 版)中被移除时,
你需要切换到 containerd 或 CRI-O 等兼容的容器运行时。
只要确保你选择的运行时支持你当前使用的 Docker 守护进程配置(例如 logging)。
@@ -204,7 +214,7 @@ Kubernetes 有很多变化中的功能,没有人是100%的专家。
我们希望这已经回答了你的大部分问题,并缓解了一些焦虑!❤️
还在寻求更多答案吗?请参考我们附带的
-[弃用 Dockershim 的常见问题](/zh/blog/2020/12/02/dockershim-faq/)。
+[移除 Dockershim 的常见问题](/zh/blog/2020/12/02/dockershim-faq/) _(2022年2月更新)_。
diff --git a/content/zh/blog/_posts/2020-12-08-kubernetes-release-1.20.md b/content/zh/blog/_posts/2020-12-08-kubernetes-release-1.20.md
index b8ab648317..c88a1cf745 100644
--- a/content/zh/blog/_posts/2020-12-08-kubernetes-release-1.20.md
+++ b/content/zh/blog/_posts/2020-12-08-kubernetes-release-1.20.md
@@ -3,6 +3,7 @@ layout: blog
title: 'Kubernetes 1.20: 最新版本'
date: 2020-12-08
slug: kubernetes-1-20-release-announcement
+evergreen: true
---
**作者:** [Kubernetes 1.20 发布团队](https://github.com/kubernetes/sig-release/blob/master/releases/release-1.20/release_team.md)
@@ -53,8 +55,8 @@ slug: kubernetes-1-20-release-announcement
请注意,作为新的内置命令,`kubectl debug` 优先于任何名为 “debug” 的 kubectl 插件。你必须重命名受影响的插件。
-
-`kubectl alpha debug` 现在不推荐使用,并将在后续版本中删除。更新你的脚本以使用 `kubectl debug`。 有关更多信息 `kubectl debug`,请参阅[调试正在运行的 Pod]((https://kubernetes.io/zh/docs/tasks/debug-application-cluster/debug-running-pod/)。
+
+`kubectl alpha debug` 现在不推荐使用,并将在后续版本中删除。更新你的脚本以使用 `kubectl debug`。 有关更多信息 `kubectl debug`,请参阅[调试正在运行的 Pod]((https://kubernetes.io/zh/docs/tasks/debug/debug-application/debug-running-pod/)。
### 测试版:API 优先级和公平性 {#beta-api-priority-and-fairness)
diff --git a/content/zh/blog/_posts/2021-11-08-steering-committee-results-2021.md b/content/zh/blog/_posts/2021-11-08-steering-committee-results-2021.md
new file mode 100644
index 0000000000..292d8923f6
--- /dev/null
+++ b/content/zh/blog/_posts/2021-11-08-steering-committee-results-2021.md
@@ -0,0 +1,133 @@
+---
+layout: blog
+title: "公布 2021 年指导委员会选举结果"
+date: 2021-11-08
+slug: steering-committee-results-2021
+---
+
+
+
+
+**作者**:Kaslin Fields
+
+
+[2021 年指导委员会选举](https://github.com/kubernetes/community/tree/master/events/elections/2021)现已完成。
+Kubernetes 指导委员会由 7 个席位组成,其中 4 个席位将在 2021 年进行选举。
+新任委员会成员任期 2 年,所有成员均由 Kubernetes 社区选举产生。
+
+
+这个社区机构非常重要,因为它监督整个 Kubernetes 项目的治理。
+你可以在其[章程](https://github.com/kubernetes/steering/blob/master/charter.md)中了解更多关于指导委员会的角色。
+
+
+## 选举结果
+
+
+
+祝贺当选的委员会成员,他们的两年任期即刻生效(按 GitHub handle 字母排序):
+
+* **Christoph Blecker([@cblecker](https://github.com/cblecker)), 红帽**
+* **Stephen Augustus([@justaugustus](https://github.com/justaugustus)), 思科**
+* **Paris Pittman([@parispittman](https://github.com/parispittman)), 苹果**
+* **Tim Pepper([@tpepper](https://github.com/tpepper)), VMware**
+
+
+他们加入永久成员:
+
+
+* **Davanum Srinivas([@dims](https://github.com/dims)), VMware**
+* **Jordan Liggitt ([@liggitt](https://github.com/liggitt)), 谷歌**
+* **Bob Killen ([@mrbobbytables](https://github.com/mrbobbytables)), 谷歌**
+
+
+Paris Pittman 和 Christoph Blecker 将回到指导委员会。
+
+
+## 非常感谢
+
+
+感谢并祝贺完成本轮成功选举的选举官们:
+
+* Alison Dowdney, ([@alisondy](https://github.com/alisondy))
+* Noah Kantrowitz ([@coderanger](https://github.com/coderanger))
+* Josh Berkus ([@jberkus](https://github.com/jberkus))
+
+
+特别感谢 k8s-infra 联络员 Arnaud Meukam([@ameukam](https://github.com/ameukam)),
+他在社区的基础设施上启动了我们的投票软件。
+
+
+感谢荣誉退休的指导委员会成员。对你们之前对社区的贡献表示感谢:
+
+* Derek Carr ([@derekwaynecarr](https://github.com/derekwaynecarr))
+* Nikhita Raghunath ([@nikhita](https://github.com/nikhita))
+
+
+感谢所有前来参加竞选的候选人。
+
+
+## 参与指导委员会
+
+
+与所有 Kubernetes 一样,这个管理机构对所有人开放。
+你可以查看指导委员会的[待办事项](https://github.com/kubernetes/steering/projects/1),
+通过在他们的 [repo](https://github.com/kubernetes/steering)
+中提交一个 issue 或创建一个 PR 来参与讨论。
+他们在[每月的第一个星期一上午 9:30](https://github.com/kubernetes/steering) 举行公开会议,
+并定期参加会见我们的贡献者活动。也可以通过他们的公共邮件列表 steering@kubernetes.io 联系他们。
+
+
+你可以在 [YouTube 播放列表](https://www.youtube.com/playlist?list=PL69nYSiGNLP1yP1B_nd9-drjoxp0Q14qM)
+上观看之前的会议视频,了解指导委员会的会议讨论内容。
+
+---
+
+
+_本文是由[上游营销工作组](https://github.com/kubernetes/community/tree/master/communication/marketing-team#contributor-marketing)撰写的。
+如果你想撰写有关 Kubernetes 社区的故事,请了解更多关于我们的信息。_
\ No newline at end of file
diff --git a/content/zh/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md b/content/zh/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md
index e5d592c4e6..6722e9bd4e 100644
--- a/content/zh/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md
+++ b/content/zh/blog/_posts/2021-12-16-StatefulSet-PVC-Auto-Deletion.md
@@ -18,8 +18,8 @@ slug: kubernetes-1-23-statefulset-pvc-auto-deletion
@@ -165,7 +165,7 @@ This policy forms a matrix with four cases. I’ll walk through and give an exam
查阅[文档](/zh/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-policies)
diff --git a/content/zh/blog/_posts/2022-01-07-kubernetes-is-moving-on-from-dockershim.md b/content/zh/blog/_posts/2022-01-07-kubernetes-is-moving-on-from-dockershim.md
new file mode 100644
index 0000000000..557c71cd4d
--- /dev/null
+++ b/content/zh/blog/_posts/2022-01-07-kubernetes-is-moving-on-from-dockershim.md
@@ -0,0 +1,199 @@
+---
+layout: blog
+title: "Kubernetes 即将移除 Dockershim:承诺和下一步"
+date: 2022-01-07
+slug: kubernetes-is-moving-on-from-dockershim
+---
+
+
+
+**作者:** Sergey Kanzhelev (Google), Jim Angel (Google), Davanum Srinivas (VMware), Shannon Kularathna (Google), Chris Short (AWS), Dawn Chen (Google)
+
+
+Kubernetes 将在即将发布的 1.24 版本中移除 dockershim。我们很高兴能够通过支持开源容器运行时、支持更小的
+kubelet 以及为使用 Kubernetes 的团队提高工程速度来重申我们的社区价值。
+如果你[使用 Docker Engine 作为 Kubernetes 集群的容器运行时](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use/),
+请准备好在 1.24 中迁移!要检查你是否受到影响,
+请参考[检查移除 Dockershim 对你的影响](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you/)。
+
+
+## 为什么我们要离开 dockershim {#why-we-re-moving-away-from-dockershim}
+
+Docker 是 Kubernetes 使用的第一个容器运行时。
+这也是许多 Kubernetes 用户和爱好者如此熟悉 Docker 的原因之一。
+对 Docker 的支持被硬编码到 Kubernetes 中——一个被项目称为 dockershim 的组件。
+
+随着容器化成为行业标准,Kubernetes 项目增加了对其他运行时的支持。
+最终实现了容器运行时接口(CRI),让系统组件(如 kubelet)以标准化的方式与容器运行时通信。
+因此,dockershim 成为了 Kubernetes 项目中的一个异常现象。
+
+对 Docker 和 dockershim 的依赖已经渗透到 CNCF 生态系统中的各种工具和项目中,这导致了代码脆弱。
+
+通过删除 dockershim CRI,我们拥抱了 CNCF 的第一个价值:
+“[快比慢好](https://github.com/cncf/foundation/blob/master/charter.md#3-values)”。
+请继续关注未来关于这个话题的交流!
+
+
+## 弃用时间线 {#deprecation-timeline}
+
+我们[正式宣布](/zh/blog/2020/12/08/kubernetes-1-20-release-announcement/)于
+2020 年 12 月弃用 dockershim。目标是在 2022 年 4 月,
+Kubernetes 1.24 中完全移除 dockershim。
+此时间线与我们的[弃用策略](/zh/docs/reference/using api/deprecation-policy/#deprecating-a-feature-or-behavior)一致,
+即规定已弃用的行为必须在其宣布弃用后至少运行 1 年。
+
+
+包括 dockershim 的 Kubernetes 1.23 版本,在 Kubernetes 项目中将再支持一年。
+对于托管 Kubernetes 的供应商,供应商支持可能会持续更长时间,但这取决于公司本身。
+无论如何,我们相信所有集群操作都有时间进行迁移。如果你有更多关于 dockershim 移除的问题,
+请参考[弃用 Dockershim 的常见问题](/zh/blog/2020/12/02/dockershim-faq/)。
+
+
+在这个[你是否为 dockershim 的删除做好了准备](/blog/2021/11/12/are-you-ready-for-dockershim-removal/)的调查中,
+我们询问你是否为 dockershim 的迁移做好了准备。我们收到了 600 多个回复。
+感谢所有花时间填写调查问卷的人。
+
+
+结果表明,在帮助你顺利迁移方面,我们还有很多工作要做。
+存在其他容器运行时,并且已被广泛推广。但是,许多用户告诉我们他们仍然依赖 dockershim,
+并且有时需要重新处理依赖项。其中一些依赖项超出控制范围。
+根据收集到的反馈,我们采取了一些措施提供帮助。
+
+
+## 我们的下一个步骤 {#our-next-steps}
+
+根据提供的反馈:
+
+- CNCF 和 1.24 版本团队致力于及时交付 1.24 版本的文档。这包括像本文这样的包含更多信息的博客文章,
+ 更新现有的代码示例、教程和任务,并为集群操作人员生成迁移指南。
+- 我们正在联系 CNCF 社区的其他成员,帮助他们为这一变化做好准备。
+
+
+如果你是依赖 dockershim 的项目的一部分,或者如果你有兴趣帮助参与迁移工作,请加入我们!
+无论是我们的迁移工具还是我们的文档,总是有更多贡献者的空间。
+作为起步,请在 [Kubernetes Slack](https://slack.kubernetes.io/) 上的
+[#sig-node](https://kubernetes.slack.com/archives/C0BP8PW9G) 频道打个招呼!
+
+
+## 最终想法 {#final-thoughts}
+
+作为一个项目,我们已经看到集群运营商在 2021 年之前越来越多地采用其他容器运行时。
+我们相信迁移没有主要障碍。我们为改善迁移体验而采取的步骤将为你指明更清晰的道路。
+
+
+我们知道,从 dockershim 迁移是你可能需要执行的另一项操作,以保证你的 Kubernetes 基础架构保持最新。
+对于你们中的大多数人来说,这一步将是简单明了的。在某些情况下,你会遇到问题。
+社区已经详细讨论了推迟 dockershim 删除是否会有所帮助。
+例如,我们最近在 [11 月 11 日的 SIG Node 讨论](https://docs.google.com/document/d/1Ne57gvidMEWXR70OxxnRkYquAoMpt56o75oZtg-OeBg/edit#bookmark=id.r77y11bgzid)和
+[12 月 6 日 Kubernetes Steering 举行的委员会会议](https://docs.google.com/document/d/1qazwMIHGeF3iUh5xMJIJ6PDr-S3bNkT8tNLRkSiOkOU/edit#bookmark=id.m0ir406av7jx)谈到了它。
+我们已经在 2021 年[推迟](https://github.com/kubernetes/enhancements/pull/2481/)它一次,
+因为其他运行时的采用率低于我们的预期,这也给了我们更多的时间来识别潜在的阻塞问题。
+
+
+在这一点上,我们相信你(和 Kubernetes)从移除 dockershim 中获得的价值可以弥补你将要进行的迁移工作。
+现在就开始计划以避免出现意外。在 Kubernetes 1.24 发布之前,我们将提供更多更新信息和指南。
+
diff --git a/content/zh/blog/_posts/2022-01-10-meet-our-contributors-APAC-India-region-01.md b/content/zh/blog/_posts/2022-01-10-meet-our-contributors-APAC-India-region-01.md
new file mode 100644
index 0000000000..0adca625e3
--- /dev/null
+++ b/content/zh/blog/_posts/2022-01-10-meet-our-contributors-APAC-India-region-01.md
@@ -0,0 +1,197 @@
+---
+layout: blog
+title: "认识我们的贡献者 - 亚太地区(印度地区)"
+date: 2022-01-10T12:00:00+0000
+slug: meet-our-contributors-india-ep-01
+canonicalUrl: https://kubernetes.dev/blog/2022/01/10/meet-our-contributors-india-ep-01/
+---
+
+
+
+**作者和采访者:** [Anubhav Vardhan](https://github.com/anubha-v-ardhan) , [Atharva Shinde](https://github.com/Atharva-Shinde) , [Avinesh Tripathi](https://github.com/AvineshTripathi) , [Debabrata Panigrahi](https://github.com/Debanitrkl) , [Kunal Verma](https://github.com/verma-kunal) , [Pranshu Srivastava](https://github.com/PranshuSrivastava) , [Pritish Samal](https://github.com/CIPHERTron) , [Purneswar Prasad](https://github.com/PurneswarPrasad) , [Vedant Kakde](https://github.com/vedant-kakde)
+
+
+**编辑:** [Priyanka Saggu](https://psaggu.com)
+
+---
+
+
+大家好 👋
+
+
+欢迎来到亚太地区的“认识我们的贡献者”博文系列第一期。
+
+
+
+在这篇文章中,我们将向您介绍来自印度地区的五位优秀贡献者,他们一直在以各种方式积极地为上游 Kubernetes 项目做贡献,同时也是众多社区倡议的领导者和维护者。
+
+
+💫 *闲话少说,我们开始吧。*
+
+
+## [Arsh Sharma](https://github.com/RinkiyaKeDad)
+
+
+Arsh 目前在 Okteto 公司中担任开发者体验工程师职务。作为一名新的贡献者,他意识到一对一的指导机会让他在开始上游项目中受益匪浅。
+
+
+他目前是 Kubernetes 1.23 版本团队的 CI Signal 经理。他还致力于为 SIG Testing 和 SIG Docs 项目提供贡献,并且在 SIG Architecture 项目中负责 [证书管理器](https://github.com/cert-manager/infrastructure) 工具的开发工作。
+
+
+对于新人来说,Arsh 帮助他们可持续地计划早期贡献。
+
+
+> _我鼓励大家以可持续的方式为社区做贡献。我的意思是,一个人很容易在早期的时候非常有热情,并且承担了很多超出个人实际能力的事情。这通常会导致后期的倦怠。迭代地处理事情会让大家对社区的贡献变得可持续。_
+
+## [Kunal Kushwaha](https://github.com/kunal-kushwaha)
+
+
+Kunal Kushwaha 是 Kubernetes 营销委员会的核心成员。他同时也是 [CNCF 学生计划](https://community.cncf.io/cloud-native-students/) 的创始人之一。他还在 1.22 版本周期中担任通信经理一职。
+
+
+在他的第一年结束时,Kunal 开始为 [fabric8io kubernetes-client](https://github.com/fabric8io/kubernetes-client) 项目做贡献。然后,他被推选从事同一项目,此项目是 Google Summer of Code 的一部分。Kunal 在 Google Summer of Code、Google Code-in 等项目中指导过很多人。
+
+
+作为一名开源爱好者,他坚信,社区的多元化参与是非常有益的,因为他引入了新的观念和观点,并尊重自己的伙伴。它曾参与过各种开源项目,他在这些社区中的参与对他作为开发者的发展有很大帮助。
+
+
+
+> _我相信,如果你发现自己在一个了解不多的项目当中,那是件好事,因为现在你可以一边贡献一边学习,社区也会帮助你。它帮助我获得了很多技能,认识了来自世界各地的人,也帮助了他们。你可以在这个过程中学习,自己不一定必须是专家。请重视非代码贡献,因为作为初学者这是一项技能,你可以为组织带来新的视角。_
+
+## [Madhav Jivarajani](https://github.com/MadhavJivrajani)
+
+
+
+Madhav Jivarajani 在 VMware 上游 Kubernetes 稳定性团队工作。他于 2021 年 1 月开始为 Kubernetes 项目做贡献,此后在 SIG Architecture、SIG API Machinery 和 SIG ContribEx(贡献者经验)等项目的几个工作领域做出了重大贡献。
+
+
+在这几个重要项目中,他最近致力于 [设计方案](https://github.com/kubernetes/community/issues/6055) 的存档工作,重构 k8s-infra 存储库下的 ["组"代码库](https://github.com/kubernetes/k8s.io/pull/2713) ,使其具有可模拟性和可测试性,以及改进 [GitHub k8s 机器人](https://github.com/kubernetes/test-infra/issues/23129) 的功能。
+
+
+除了在技术方面的贡献,Madhav 还监督许多旨在帮助新贡献者的项目。他每两周组织一次的“KEP 阅读俱乐部”会议,帮助新人了解添加新功能、摒弃旧功能以及对上游项目进行其他关键更改的过程。他还致力于开发 [Katacoda 场景](https://github.com/kubernetes-sigs/contributor-katacoda) ,以帮助新的贡献者在为 k/k 做贡献的过程更加熟练。目前除了每周与社区成员会面外,他还组织了几个 [新贡献者讲习班(NCW)](https://www.youtube.com/watch?v=FgsXbHBRYIc) 。
+
+
+> _一开始我对 Kubernetes 了解并不多。我加入社区是因为社区超级友好。但让我留下来的不仅仅是人,还有项目本身。我在社区中不会感到不知所措,这是因为我能够在感兴趣的和正在讨论的主题中获得尽可能多的背景和知识。因此,我将继续深入探讨 Kubernetes 及其设计。我是一个系统迷,kubernetes 对我来说绝对是一个金矿。_
+
+
+## [Rajas Kakodkar](https://github.com/rajaskakodkar)
+
+
+Rajas Kakodkar 目前在 VMware 担任技术人员。自 2019 年以来,他一直多方面地从事上游 kubernetes 项目。
+
+
+他现在是 Testing 特别兴趣小组的关键贡献者。他还活跃在 SIG Network 社区。最近,Rajas 为 [NetworkPolicy++](https://docs.google.com/document/d/1AtWQy2fNa4qXRag9cCp5_HsefD7bxKe3ea2RPn8jnSs/) 和 [`kpng`](https://github.com/kubernetes-sigs/kpng) 子项目做出了重大贡献。
+
+
+他遇到的第一个挑战是,他所处的时区与上游项目的日常会议时间不同。不过,社区论坛上的异步交互逐渐解决了这个问题。
+
+
+> _我喜欢为 kubernetes 做出贡献,不仅因为我可以从事尖端技术工作,更重要的是,我可以和优秀的人一起工作,并帮助解决现实问题。_
+
+## [Rajula Vineet Reddy](https://github.com/rajula96reddy)
+
+
+Rajula Vineet Reddy,CERN 的初级工程师,是 SIG ContribEx 项目下营销委员会的成员。在 Kubernetes 1.22 和 1.23 版本周期中,他还担任 SIG Release 的版本经理。
+
+
+在他的一位教授的帮助下,他开始将 kubernetes 项目作为大学项目的一部分。慢慢地,他花费了大量的时间阅读项目的文档、Slack 讨论、GitHub issues 和博客,这有助于他更好地掌握 kubernetes 项目,并激发了他对上游项目做贡献的兴趣。他的主要贡献之一是他在SIG ContribEx上游营销子项目中协助实现了自动化。
+
+
+Rajas 说,参与项目会议和跟踪各种项目角色对于了解社区至关重要。
+
+
+> _我发现社区非常有帮助,而且总是“你得到的回报和你贡献的一样多”。你参与得越多,你就越会了解、学习和贡献新东西。_
+> _“挺身而出”的第一步是艰难的。但在那之后一切都会顺利的。勇敢地参与进来吧。_
+---
+
+
+如果您对我们下一步应该采访谁有任何意见/建议,请在 #sig-contribex 中告知我们。我们很高兴有其他人帮助我们接触社区中更优秀的人。我们将不胜感激。
+
+
+
+我们下期见。最后,祝大家都能快乐地为社区做贡献!👋
+
diff --git a/content/zh/blog/_posts/2022-02-17-updated-dockershim-faq.md b/content/zh/blog/_posts/2022-02-17-updated-dockershim-faq.md
index 8400012b61..8023f68989 100644
--- a/content/zh/blog/_posts/2022-02-17-updated-dockershim-faq.md
+++ b/content/zh/blog/_posts/2022-02-17-updated-dockershim-faq.md
@@ -1,67 +1,84 @@
---
layout: blog
-title: "更新:弃用 Dockershim 的常见问题"
+title: "更新:移除 Dockershim 的常见问题"
+linkTitle: "移除 Dockershim 的常见问题"
date: 2022-02-17
slug: dockershim-faq
+aliases: [ 'zh/dockershim' ]
---
-**本文是针对2020年末发布的[弃用 Dockershim 的常见问题](/zh/blog/2020/12/02/dockershim-faq/)的博客更新。**
+**本文是针对 2020 年末发布的[弃用 Dockershim 的常见问题](/zh/blog/2020/12/02/dockershim-faq/)的博客更新。
+本文包括 Kubernetes v1.24 版本的更新。**
+
+---
+本文介绍了一些关于从 Kubernetes 中移除 _dockershim_ 的常见问题。
+该移除最初是作为 Kubernetes v1.20
+版本的一部分[宣布](/zh/blog/2020/12/08/kubernetes-1-20-release-announcement/)的。
+Kubernetes 在 [v1.24 版](/releases/#release-v1-24)移除了 dockershim。
+
+
-本文回顾了自 Kubernetes v1.20 版本[宣布](/zh/blog/2020/12/08/kubernetes-1-20-release-announcement/)弃用
-Dockershim 以来所引发的一些常见问题。关于弃用细节以及这些细节背后的含义,请参考博文
+关于细节请参考博文
[别慌: Kubernetes 和 Docker](/zh/blog/2020/12/02/dont-panic-kubernetes-and-docker/)。
-你还可以查阅:[检查弃用 Dockershim 对你的影响](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/)这篇文章,
-以确定弃用 dockershim 会对你或你的组织带来多大的影响。
+要确定移除 dockershim 是否会对你或你的组织的影响,可以查阅:
+[检查弃用 Dockershim 对你的影响](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/)
+这篇文章。
-随着 Kubernetes 1.24 版本的发布迫在眉睫,我们一直在努力尝试使其能够平稳升级顺利过渡。
+在 Kubernetes 1.24 发布之前的几个月和几天里,Kubernetes
+贡献者努力试图让这个过渡顺利进行。
-- 我们已经写了一篇博文,详细说明了我们的[承诺和后续操作](/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim/)。
-- 我们我们相信可以无障碍的迁移到其他[容器运行时](/zh/docs/setup/production-environment/container-runtimes/#container-runtimes)。
-- 我们撰写了 [dockershim 迁移指南](/docs/tasks/administer-cluster/migrating-from-dockershim/)供你参考。
-- 我们还创建了一个页面来列出[有关 dockershim 移除和使用 CRI 兼容运行时的文章](/zh/docs/reference/node/topics-on-dockershim-and-cri-compatible-runtimes/)。
+- 一篇详细说明[承诺和后续操作](/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim/)的博文。
+- 检查是否存在迁移到其他 [容器运行时](/zh/docs/setup/production-environment/container-runtimes/#container-runtimes) 的主要障碍。
+- 添加 [从 dockershim 迁移](/docs/tasks/administer-cluster/migrating-from-dockershim/)的指南。
+- 创建了一个[有关 dockershim 移除和使用 CRI 兼容运行时的列表](/zh/docs/reference/node/topics-on-dockershim-and-cri-compatible-runtimes/)。
该列表包括一些已经提到的文档,还涵盖了选定的外部资源(包括供应商指南)。
-### 为什么会从 Kubernetes 中移除 dockershim ?
+### 为什么会从 Kubernetes 中移除 dockershim ? {#why-was-the-dockershim-removed-from-kubernetes}
此外,在较新的 CRI 运行时中实现了与 dockershim 不兼容的功能,例如 cgroups v2 和用户命名空间。
-取消对 dockershim 的支持将加速这些领域的发展。
+从 Kubernetes 中移除 dockershim 允许在这些领域进行进一步的开发。
+
+
+### Docker 和容器一样吗? {#are-docker-and-containers-the-same-thing}
+
+
+Docker 普及了 Linux 容器模式,并在开发底层技术方面发挥了重要作用,但是 Linux
+中的容器已经存在了很长时间,容器生态系统已经发展到比 Docker 广泛得多。
+OCI 和 CRI 等标准帮助许多工具在我们的生态系统中发展壮大,其中一些替代了 Docker
+的某些方面,而另一些则增强了现有功能。
+
+
+### 我现有的容器镜像是否仍然有效? {#will-my-existing-container-images-still-work}
+
+
+是的,从 `docker build` 生成的镜像将适用于所有 CRI 实现,
+现有的所有镜像仍将完全相同。
+
+
+#### 私有镜像呢? {#what-about-private-images}
+
+
+当然可以,所有 CRI 运行时都支持在 Kubernetes 中使用的相同的 pull secrets
+配置,无论是通过 PodSpec 还是 ServiceAccount。
-### 在 Kubernetes 1.23 版本中还可以使用 Docker Engine 吗?
+### 在 Kubernetes 1.23 版本中还可以使用 Docker Engine 吗? {#can-i-still-use-docker-engine-in-kubernetes-1-23}
可以使用,在 1.20 版本中唯一的改动是,如果使用 Docker Engine,
在 [kubelet](/zh/docs/reference/command-line-tools-reference/kubelet/)
启动时会打印一个警告日志。
-你将在 1.23 版本及以前版本看到此警告。dockershim 将在 Kubernetes 1.24 版本中移除 。
+你将在 1.23 版本及以前版本看到此警告,dockershim 已在 Kubernetes 1.24 版本中移除 。
-### 什么时候移除 dockershim ?
+如果你运行的是 Kubernetes v1.24 或更高版本,请参阅
+[我仍然可以使用 Docker Engine 作为我的容器运行时吗?](#can-i-still-use-docker-engine-as-my-container-runtime)
+(如果你使用任何支持 dockershim 的版本,可以随时切换离开;从版本 v1.24
+开始,因为 Kubernetes 不再包含 dockershim,你**必须**切换)。
-考虑到此变更带来的影响,我们使用了一个加长的废弃时间表。
-dockershim 计划在 Kubernetes v1.24 中进行移除,
-参见 [Kubernetes 移除 Dockershim 增强方案](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2221-remove-dockershim)。
-Kubernetes 项目将与供应商和其他生态系统组织密切合作,以确保平稳过渡,并将依据事态的发展评估后续事项。
+### 我应该用哪个 CRI 实现? {#which-cri-implementation-should-i-use}
-### 我还可以使用 Docker Engine 作为我的容器运行时吗?
+这是一个复杂的问题,依赖于许多因素。
+如果你正在使用 Docker Engine,迁移到 containerd
+应该是一个相对容易地转换,并将获得更好的性能和更少的开销。
+然而,我们鼓励你探索 [CNCF landscape] 提供的所有选项,做出更适合你的选择。
+
+[CNCF landscape]: https://landscape.cncf.io/card-mode?category=container-runtime&grouping=category
+
+
+#### 我还可以使用 Docker Engine 作为我的容器运行时吗? {#can-i-still-use-docker-engine-as-my-container-runtime}
-### 我现有的容器镜像还能正常工作吗?
+你可以安装 `cri-dockerd` 并使用它将 kubelet 连接到 Docker Engine。
+阅读[将 Docker Engine 节点从 dockershim 迁移到 cri-dockerd](/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd/)
+以了解更多信息。
-
-当然可以,`docker build` 创建的镜像适用于任何 CRI 实现。
-所有你的现有镜像将和往常一样工作。
-
-
-### 私有镜像呢?
-
-
-当然可以。所有 CRI 运行时均支持在 Kubernetes 中相同的拉取(pull)Secret 配置,
-无论是通过 PodSpec 还是 ServiceAccount。
-
-
-### Docker 和容器是一回事吗?
-
-
-Docker 普及了 Linux 容器模式,并在开发底层技术方面发挥了重要作用,
-但是 Linux 中的容器已经存在了很长时间。容器的生态相比于 Docker 具有更宽广的领域。
-OCI 和 CRI 等标准帮助许多工具在我们的生态系统中发展壮大,
-其中一些替代了 Docker 的某些方面,而另一些则增强了现有功能。
-### 现在是否有在生产系统中使用其他运行时的例子?
+### 现在是否有在生产系统中使用其他运行时的例子? {#are-there-examples-of-folks-using-other-runtimes-in-production-today}
-### 人们总在谈论 OCI,它是什么?
+### 人们总在谈论 OCI,它是什么? {#people-keep-referencing-oci-what-is-that}
-### 我应该用哪个 CRI 实现?
-
-
-这是一个复杂的问题,依赖于许多因素。
-如果你正在使用 Docker,迁移到 containerd 应该是一个相对容易地转换,并将获得更好的性能和更少的开销。
-然而,我们鼓励你探索 [CNCF landscape](https://landscape.cncf.io/card-mode?category=container-runtime&grouping=category)
-提供的所有选项,做出更适合你的选择。
-### 当切换 CRI 实现时,应该注意什么?
+### 当切换 CRI 实现时,应该注意什么? {#what-should-i-look-out-for-when-changing-cri-implementations}
- 日志配置
- 运行时的资源限制
-- 调用 docker 或通过其控制套接字使用 docker 的节点配置脚本
-- 需要访问 docker 命令或控制套接字的 kubectl 插件
+- 调用 docker 或通过其控制套接字使用 Docker Engine 的节点配置脚本
+- 需要 `docker` 命令或 Docker Engine 控制套接字的 `kubectl` 插件
- 需要直接访问 Docker Engine 的 Kubernetes 工具(例如:已弃用的 'kube-imagepuller' 工具)
- `registry-mirrors` 和不安全注册表等功能的配置
- 保障 Docker Engine 可用、且运行在 Kubernetes 之外的脚本或守护进程(例如:监视或安全代理)
@@ -302,7 +324,7 @@ common things to consider when migrating are:
@@ -312,13 +334,14 @@ runtime where possible.
另外还有一个需要关注的点,那就是当创建镜像时,系统维护或嵌入容器方面的任务将无法工作。
对于前者,可以用 [`crictl`](https://github.com/kubernetes-sigs/cri-tools) 工具作为临时替代方案
-(参阅[从 docker cli 到 crictl 的映射](/zh/docs/tasks/debug-application-cluster/crictl/#mapping-from-docker-cli-to-crictl))。
+(参阅[从 docker cli 到 crictl 的映射](/zh/docs/tasks/debug/debug-cluster/crictl/#mapping-from-docker-cli-to-crictl))。
对于后者,可以用新的容器创建选项,例如
[img](https://github.com/genuinetools/img)、
[buildah](https://github.com/containers/buildah)、
@@ -335,23 +358,30 @@ options are available as you migrate things over.
有关如何在 Kubernetes 中使用 containerd 和 CRI-O 的说明,
-请参阅 [Kubernetes 相关文档](/docs/setup/production-environment/container-runtimes/)
+请参阅 [Kubernetes 相关文档](/docs/setup/production-environment/container-runtimes/)。
-### 我还有其他问题怎么办?
+### 我还有其他问题怎么办? {#what-if-i-have-more-questions}
如果你使用了供应商支持的 Kubernetes 发行版,你可以咨询供应商他们产品的升级计划。
-对于最终用户的问题,请把问题发到我们的最终用户社区的论坛:https://discuss.kubernetes.io/。
+对于最终用户的问题,请把问题发到我们的最终用户社区的[论坛](https://discuss.kubernetes.io/)。
+
+
+你可以通过专用 [GitHub 问题](https://github.com/kubernetes/kubernetes/issues/106917)
+讨论删除 dockershim 的决定。
+### 是否有任何工具可以帮助我找到正在使用的 dockershim? {#is-there-any-tooling-that-can-help-me-find-dockershim-in-use}
+
+
+是的! [Docker Socket 检测器 (DDS)][dds] 是一个 kubectl 插件,
+你可以安装它用于检查你的集群。 DDS 可以检测运行中的 Kubernetes
+工作负载是否将 Docker Engine 套接字 (`docker.sock`) 作为卷挂载。
+在 DDS 项目的 [README][dds] 中查找更多详细信息和使用方法。
+
+[dds]: https://github.com/aws-containers/kubectl-detector-for-docker-socket
+
-### 我可以加入吗?
+### 我可以加入吗? {#can-i-have-a-hug}
+
+
+**作者:** Kat Cosgrove
+
+
+
+早在 2020 年 12 月,Kubernetes 就宣布[弃用 Dockershim](/zh/blog/2020/12/02/dont-panic-kubernetes-and-docker/)。
+在 Kubernetes 中,dockershim 是一个软件 shim,
+它允许你将整个 Docker 引擎用作 Kubernetes 中的容器运行时。
+在即将发布的 v1.24 版本中,我们将移除 Dockershim -
+在宣布弃用之后到彻底移除这段时间内,我们至少预留了一年的时间继续支持此功能,
+这符合相关的[项目策略](/zh/docs/reference/using-api/deprecation-policy/)。
+如果你是集群操作员,则该指南包含你在此版本中需要了解的实际情况。
+另外还包括你需要做些什么来确保你的集群不会崩溃!
+
+
+## 首先,这对你有影响吗?
+
+
+如果你正在管理自己的集群或不确定此删除是否会影响到你,
+请保持安全状态并[检查你对 Docker Engine 是否有依赖](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you/)。
+请注意,使用 Docker Desktop 构建应用程序容器并不算是集群对 Docker 有依赖。
+Docker 创建的容器镜像符合 [Open Container Initiative (OCI)](https://opencontainers.org/) 规范,
+而 OCI 是 Linux 基金会的一种治理架构,负责围绕容器格式和运行时定义行业标准。
+这些镜像可以在 Kubernetes 支持的任何容器运行时上正常工作。
+
+
+如果你使用的是云服务提供商管理的 Kubernetes 服务,
+并且你确定没有更改过容器运行时,那么你可能不需要做任何事情。
+Amazon EKS、Azure AKS 和 Google GKE 现在都默认使用 containerd,
+但如果你的集群中有任何自定义的节点,你要确保它们不需要被更新。
+要检查节点的运行时,请参考[查明节点上所使用的容器运行时](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use/)。
+
+
+无论你是在管理自己的集群还是使用云服务提供商管理的 Kubernetes 服务,
+你可能都需要[迁移依赖 Docker Engine 的遥测或安全代理](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents/)。
+
+
+## 我对 Docker 有依赖。现在该怎么办?
+
+
+如果你的 Kubernetes 集群对 Docker Engine 有依赖,
+并且你打算升级到 Kubernetes v1.24 版本(出于安全和类似原因,你最终应该这样做),
+你需要将容器运行时从 Docker Engine 更改为其他方式或使用 [cri-dockerd](https://github.com/Mirantis/cri-dockerd)。
+由于 [containerd](https://containerd.io/) 是一个已经毕业的 CNCF 项目,
+并且是 Docker 本身的运行时,因此用它作为容器运行时的替代方式是一个安全的选择。
+幸运的是,Kubernetes 项目已经以 containerd 为例,
+提供了[更改节点容器运行时](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd/)的过程文档。
+切换到其它支持的运行时的操作指令与此类似。
+
+
+## 我想升级 Kubernetes,并且我需要保持与 Docker 作为运行时的兼容性。我有哪些选择?
+
+
+别担心,你不会被冷落,也不必冒着安全风险继续使用旧版本的 Kubernetes。
+Mirantis 和 Docker 已经联合发布并正在维护 dockershim 的替代品。
+这种替代品称为 [cri-dockerd](https://github.com/Mirantis/cri-dockerd)。
+如果你确实需要保持与 Docker 作为运行时的兼容性,请按照项目文档中的说明安装 cri-dockerd。
+
+
+## 这样就可以了吗?
+
+
+
+是的。只要你深入了解此版本所做的变更和你自己集群的详细信息,
+并确保与你的开发团队进行清晰的沟通,它的不确定性就会降到最低。
+你可能需要对集群、应用程序代码或脚本进行一些更改,但所有这些要求都已经有说明指导。
+从使用 Docker Engine 作为运行时,切换到使用[其他任何一种支持的容器运行时](/zh/docs/setup/production-environment/container-runtimes/),
+这意味着移除了中间层的组件,因为 dockershim 的作用是访问 Docker 本身使用的容器运行时。
+从实际角度长远来看,这种移除对你和 Kubernetes 维护者都更有好处。
+
+
+如果你仍有疑问,请先查看[弃用 Dockershim 的常见问题](/zh/blog/2022/02/17/dockershim-faq/)。
diff --git a/content/zh/blog/_posts/2022-04-07-Kubernetes-1-24-removals-and-deprecations.md b/content/zh/blog/_posts/2022-04-07-Kubernetes-1-24-removals-and-deprecations.md
new file mode 100644
index 0000000000..ed73904af3
--- /dev/null
+++ b/content/zh/blog/_posts/2022-04-07-Kubernetes-1-24-removals-and-deprecations.md
@@ -0,0 +1,301 @@
+---
+layout: blog
+title: "Kubernetes 1.24 的删除和弃用"
+date: 2022-04-07
+slug: upcoming-changes-in-kubernetes-1-24
+---
+
+
+
+
+**作者**: Mickey Boxell (Oracle)
+
+随着 Kubernetes 的发展,特性和 API 会定期被重新访问和删除。
+新特性可能会提供替代或改进的方法,来解决现有的问题,从而激励团队移除旧的方法。
+
+
+我们希望确保你了解 Kubernetes 1.24 版本的变化。 该版本将 **弃用** 一些(测试版/beta)API,
+转而支持相同 API 的稳定版本。 Kubernetes 1.24 版本的主要变化是
+[移除 Dockershim](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2221-remove-dockershim)。
+这将在下面讨论,并将在发布时更深入地探讨。
+要提前了解 Kubernetes 1.24 中的更改,请查看正在更新中的
+[CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md)。
+
+
+## 关于 Dockershim {#a-note-about-dockershim}
+
+可以肯定地说,随着 Kubernetes 1.24 的发布,最受关注的删除是 Dockershim。
+Dockershim 在 1.20 版本中已被弃用。 如
+[Kubernetes 1.20 变更日志](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation)中所述:
+"Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet
+uses a module called "dockershim" which implements CRI support for Docker and it has seen maintenance
+issues in the Kubernetes community."
+随着即将发布的 Kubernetes 1.24,Dockershim 将最终被删除。
+
+
+在文章[别慌: Kubernetes 和 Docker](/zh/blog/2020/12/02/dont-panic-kubernetes-and-docker/) 中,
+作者简洁地记述了变化的影响,并鼓励用户保持冷静:
+>弃用 Docker 这个底层运行时,转而支持符合为 Kubernetes 创建的容器运行接口
+>Container Runtime Interface (CRI) 的运行时。
+>Docker 构建的镜像,将在你的集群的所有运行时中继续工作,一如既往。
+
+
+已经有一些文档指南,提供了关于从 dockershim 迁移到与 Kubernetes 直接兼容的容器运行时的有用信息。
+你可以在 Kubernetes 文档中的[从 dockershim 迁移](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/)
+页面上找到它们。
+
+
+有关 Kubernetes 为何不再使用 dockershim 的更多信息,
+请参见:[Kubernetes 正在离开 Dockershim](/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim/)
+和[最新的弃用 Dockershim 的常见问题](/zh/blog/2022/02/17/dockershim-faq/)。
+
+查看[你的集群准备好使用 v1.24 了吗?](/blog/2022/03/31/ready-for-dockershim-removal/) 一文,
+了解如何确保你的集群在从 1.23 版本升级到 1.24 版本后继续工作。
+
+
+## Kubernetes API 删除和弃用流程 {#the-Kubernetes-api-removal-and-deprecation-process}
+
+Kubernetes 包含大量随时间演变的组件。在某些情况下,这种演变会导致 API、标志或整个特性被删除。
+为了防止用户面对重大变化,Kubernetes 贡献者采用了一项特性[弃用策略](/zh/docs/reference/using-api/deprecation-policy/)。
+此策略确保仅当同一 API 的较新稳定版本可用并且
+API 具有以下稳定性级别所指示的最短生命周期时,才可能弃用稳定版本 API:
+
+* 正式发布 (GA) 或稳定的 API 版本可能被标记为已弃用,但不得在 Kubernetes 的主版本中删除。
+* 测试版(beta)或预发布 API 版本在弃用后必须支持 3 个版本。
+* Alpha 或实验性 API 版本可能会在任何版本中被删除,恕不另行通知。
+
+
+删除遵循相同的弃用政策,无论 API 是由于 测试版(beta)功能逐渐稳定还是因为该
+API 未被证明是成功的而被删除。
+Kubernetes 将继续确保在删除 API 时提供用来迁移的文档。
+
+
+**弃用的** API 是指那些已标记为在未来 Kubernetes 版本中被删除的 API。
+**删除的** API 是指那些在被弃用后不再可用于当前受支持的 Kubernetes 版本的 API。
+这些删除已被更新的、稳定的/普遍可用的 (GA) API 所取代。
+
+
+## Kubernetes 1.24 的 API 删除、弃用和其他更改 {#api-removals-deprecations-and-other-changes-for-kubernetes-1.24}
+
+* [动态 kubelet 配置](https://github.com/kubernetes/enhancements/issues/281): `DynamicKubeletConfig`
+ 用于启用 kubelet 的动态配置。Kubernetes 1.22 中弃用 `DynamicKubeletConfig` 标志。
+ 在 1.24 版本中,此特性门控将从 kubelet 中移除。请参阅[重新配置 kubelet](/docs/tasks/administer-cluster/reconfigure-kubelet/)。
+ 更多详细信息,请参阅[“删除动态 kubelet 配置” 的 KEP](https://github.com/kubernetes/enhancements/issues/281)。
+
+* [动态日志清洗](https://github.com/kubernetes/kubernetes/pull/107207):实验性的动态日志清洗功能已被弃用,
+ 将在 1.24 版本中被删除。该功能引入了一个日志过滤器,可以应用于所有 Kubernetes 系统组件的日志,
+ 以防止各种类型的敏感信息通过日志泄漏。有关更多信息和替代方法,请参阅
+ [KEP-1753: Kubernetes 系统组件日志清洗](https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/1753-logs-sanitization#deprecation)。
+
+* 树内驱动(In-tree provisioner)向 CSI 卷迁移:这适用于许多树内插件,
+ 包括 [Portworx](https://github.com/kubernetes/enhancements/issues/2589)。
+ 参见[树内存储插件向 CSI 卷迁移的设计文档](https://github.com/kubernetes/design-proposals-archive/blob/main/storage/csi-migration.md#background-and-motivations)
+ 了解更多信息。
+
+* [从 kubelet 中移除 Dockershim](https://github.com/kubernetes/enhancements/issues/2221):Docker
+ 的容器运行时接口(CRI)(即 Dockershim)目前是 kubelet 代码中内置的容器运行时。 它在 1.20 版本中已被弃用。
+ 从 1.24 版本开始,kubelet 已经移除 dockershim。 查看这篇博客,
+ [了解你需要为 1.24 版本做些什么](/blog/2022/03/31/ready-for-dockershim-removal/)。
+
+* [pod 调度的存储容量追踪](https://github.com/kubernetes/enhancements/issues/1472):CSIStorageCapacity API
+ 支持通过 CSIStorageCapacity 对象暴露当前可用的存储容量,并增强了使用带有延迟绑定的 CSI 卷的 Pod 的调度。
+ CSIStorageCapacity API 自 1.24 版本起提供稳定版本。升级到稳定版的 API 将弃用 v1beta1 CSIStorageCapacity API。
+ 更多信息请参见 [Pod 调度存储容量约束 KEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1472-storage-capacity-tracking)。
+
+* [kubeadm 控制面节点上不再存在 `master` 标签](https://github.com/kubernetes/kubernetes/pull/107533)。
+ 对于新集群,控制平面节点将不再添加 'node-role.kubernetes.io/master' 标签,
+ 只会添加 'node-role.kubernetes.io/control-plane' 标签。更多信息请参考
+ [KEP-2067:重命名 kubeadm “master” 标签和污点](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cluster-lifecycle/kubeadm/2067)。
+
+* [VolumeSnapshot v1beta1 CRD 在 1.24 版本中将被移除](https://github.com/kubernetes/enhancements/issues/177)。
+ Kubernetes 和 [Container Storage Interface](https://github.com/container-storage-interface/spec/blob/master/spec.md) (CSI)
+ 的卷快照和恢复功能,在 1.20 版本中进入测试版。该功能提供标准化 API 设计 (CRD ) 并为 CSI 卷驱动程序添加了 PV 快照/恢复支持,
+ VolumeSnapshot v1beta1 在 1.21 版本中已被弃用,现在不受支持。更多信息请参考
+ [KEP-177:CSI 快照](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/177-volume-snapshot#kep-177-csi-snapshot)和
+ [kubernetes-csi/external-snapshotter](https://github.com/kubernetes-csi/external-snapshotter/releases/tag/v4.1.0)。
+
+## 需要做什么 {#what-to-do}
+
+### 删除 Dockershim {#dockershim-removal}
+如前所述,有一些关于从 [dockershim 迁移](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/)的指南。
+你可以[从查明节点上所使用的容器运行时](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use/)开始。
+如果你的节点使用 dockershim,则还有其他可能的 Docker Engine 依赖项,
+例如 Pod 或执行 Docker 命令的第三方工具或 Docker 配置文件中的私有注册表。
+你可以按照[检查弃用 Dockershim 对你的影响](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/)
+的指南来查看可能的 Docker 引擎依赖项。在升级到 1.24 版本之前, 你决定要么继续使用 Docker Engine 并
+[将 Docker Engine 节点从 dockershim 迁移到 cri-dockerd](/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd/),
+要么迁移到与 CRI 兼容的运行时。这是[将节点上的容器运行时从 Docker Engine 更改为 containerd](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd/) 的指南。
+
+
+### `kubectl convert` {#kubectl-convert}
+
+kubectl 的 [`kubectl convert`](/zh/docs/tasks/tools/included/kubectl-convert-overview/)
+插件有助于解决弃用 API 的迁移问题。该插件方便了不同 API 版本之间清单的转换,
+例如,从弃用的 API 版本到非弃用的 API 版本。关于 API 迁移过程的更多信息可以在
+[已弃用 API 的迁移指南](/docs/reference/using-api/deprecation-guide/)中找到。按照
+[安装 `kubectl convert` 插件](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-convert-plugin)
+文档下载并安装 `kubectl-convert` 二进制文件。
+
+
+### 展望未来 {#looking-ahead}
+
+计划在今年晚些时候发布的 Kubernetes 1.25 和 1.26 版本,将停止提供一些
+Kubernetes API 的 beta 版本,这些 API 当前为稳定版。1.25 版本还将删除 PodSecurityPolicy,
+它已在 Kubernetes 1.21 版本中被弃用,并且不会升级到稳定版。有关详细信息,请参阅
+[PodSecurityPolicy 弃用:过去、现在和未来](/blog/2021/04/06/podsecuritypolicy-deprecation-past-present-and-future/)。
+
+
+[Kubernetes 1.25 计划移除的 API 的官方列表](/zh/docs/reference/using-api/deprecation-guide/#v1-25)是:
+
+* The beta CronJob API (batch/v1beta1)
+* The beta EndpointSlice API (discovery.k8s.io/v1beta1)
+* The beta Event API (events.k8s.io/v1beta1)
+* The beta HorizontalPodAutoscaler API (autoscaling/v2beta1)
+* The beta PodDisruptionBudget API (policy/v1beta1)
+* The beta PodSecurityPolicy API (policy/v1beta1)
+* The beta RuntimeClass API (node.k8s.io/v1beta1)
+
+
+[Kubernetes 1.25 计划移除的 API 的官方列表](/zh/docs/reference/using-api/deprecation-guide/#v1-25)是:
+
+* The beta FlowSchema 和 PriorityLevelConfiguration API (flowcontrol.apiserver.k8s.io/v1beta1)
+* The beta HorizontalPodAutoscaler API (autoscaling/v2beta2)
+
+
+### 了解更多 {#want-to-know-more}
+Kubernetes 发行说明中宣告了弃用信息。你可以在以下版本的发行说明中看到待弃用的公告:
+* [Kubernetes 1.21](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.21.md#deprecation)
+* [Kubernetes 1.22](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.22.md#deprecation)
+* [Kubernetes 1.23](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.23.md#deprecation)
+* 我们将正式宣布 [Kubernetes 1.24](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md#deprecation) 的弃用信息,
+ 作为该版本 CHANGELOG 的一部分。
+
+有关弃用和删除过程的信息,请查看 Kubernetes 官方[弃用策略](/zh/docs/reference/using-api/deprecation-policy/#deprecating-parts-of-the-api) 文档。
+
diff --git a/content/zh/blog/_posts/2022-05-03-dockershim-historical-context.md b/content/zh/blog/_posts/2022-05-03-dockershim-historical-context.md
new file mode 100644
index 0000000000..5a99445271
--- /dev/null
+++ b/content/zh/blog/_posts/2022-05-03-dockershim-historical-context.md
@@ -0,0 +1,88 @@
+---
+layout: blog
+title: "Dockershim:历史背景"
+date: 2022-05-03
+slug: dockershim-historical-context
+---
+
+
+
+
+**作者:** Kat Cosgrove
+
+自 Kubernetes v1.24 起,Dockershim 已被删除,这对项目来说是一个积极的举措。
+然而,背景对于充分理解某事很重要,无论是社交还是软件开发,这值得更深入的审查。
+除了 Kubernetes v1.24 中的 dockershim 移除之外,我们在社区中看到了一些
+混乱(有时处于恐慌级别)和对这一决定的不满,主要是由于缺乏有关此删除背景的了解。
+弃用并最终从 Kubernetes 中删除 dockershim 的决定并不是迅速或轻率地做出的。
+尽管如此,它已经工作了很长时间,以至于今天的许多用户都比这个决定更新,
+更不用提当初为何引入 dockershim 了。
+
+那么 dockershim 是什么,为什么它会消失呢?
+
+
+在 Kubernetes 的早期,我们只支持一个容器运行时,那个运行时就是 Docker Engine。
+那时,并没有太多其他选择,而 Docker 是使用容器的主要工具,所以这不是一个有争议的选择。
+最终,我们开始添加更多的容器运行时,比如 rkt 和 hypernetes,很明显 Kubernetes 用户
+希望选择最适合他们的运行时。 因此,Kubernetes 需要一种方法来允许集群操作员灵活地使用
+他们选择的任何运行时。
+
+
+[容器运行时接口](/blog/2016/12/container-runtime-interface-cri-in-kubernetes/) (CRI)
+已发布以支持这种灵活性。 CRI 的引入对项目和用户来说都很棒,但它确实引入了一个问题:Docker Engine
+作为容器运行时的使用早于 CRI,并且 Docker Engine 不兼容 CRI。 为了解决这个问题,在 kubelet 组件
+中引入了一个小型软件 shim (dockershim),专门用于填补 Docker Engine 和 CRI 之间的空白,
+允许集群操作员继续使用 Docker Engine 作为他们的容器运行时基本上不间断。
+
+
+然而,这个小软件 shim 从来没有打算成为一个永久的解决方案。 多年来,它的存在给 kubelet
+本身带来了许多不必要的复杂性。 由于这个 shim,Docker 的一些集成实现不一致,导致维护人员
+的负担增加,并且维护特定于供应商的代码不符合我们的开源理念。 为了减少这种维护负担并朝着支
+持开放标准的更具协作性的社区迈进,[引入了 KEP-2221](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/2221- remove-dockershim),
+建议移除 dockershim。 随着 Kubernetes v1.20 的发布,正式弃用。
+
+
+我们没有很好地传达这一点,不幸的是,弃用公告在社区内引起了一些恐慌。关于这对 Docker 作为
+一家公司意味着什么,Docker 构建的容器镜像是否仍然可以运行,以及 Docker Engine 究竟是
+什么导致了社交媒体上的一场大火,人们感到困惑。这是我们的错;我们应该更清楚地传达当时发生
+的事情和原因。为了解决这个问题,我们发布了[一篇博客](/zh/blog/2020/12/02/dont-panic-kubernetes-and-docker/)
+和[相应的 FAQ](/zh/blog/2020/12/02/dockershim-faq/ ) 以减轻社区的恐惧并纠正对
+Docker 是什么以及容器如何在 Kubernetes 中工作的一些误解。由于社区的关注,Docker 和 Mirantis
+共同决定继续以 [cri-dockerd] 的形式支持 dockershim 代码(https://www.mirantis.com/blog/the-future-of-dockershim-is -cri-dockerd/),
+允许你在需要时继续使用 Docker Engine 作为容器运行时。对于想要尝试其他运行时(如 containerd 或 cri-o)
+的用户,[已编写迁移文档](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd/)。
+
+
+我们后来[调查了社区](https://kubernetes.io/blog/2021/11/12/are-you-ready-for-dockershim-removal/)
+[发现还有很多用户有疑问和顾虑](/zh/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim)。
+作为回应,Kubernetes 维护人员和 CNCF 承诺通过扩展文档和其他程序来解决这些问题。 事实上,这篇博文是
+这个计划的一部分。 随着如此多的最终用户成功迁移到其他运行时,以及改进的文档,我们相信每个人现在都为迁移铺平了道路。
+
+
+Docker 不会消失,无论是作为一种工具还是作为一家公司。 它是云原生社区的重要组成部分,
+也是 Kubernetes 项目的历史。 没有他们,我们就不会是现在的样子。 也就是说,从 kubelet
+中删除 dockershim 最终对社区、生态系统、项目和整个开源都有好处。 这是我们所有人齐心协力
+支持开放标准的机会,我们很高兴在 Docker 和社区的帮助下这样做。
\ No newline at end of file
diff --git a/content/zh/blog/_posts/2022-05-05-volume-expansion-ga.md b/content/zh/blog/_posts/2022-05-05-volume-expansion-ga.md
new file mode 100644
index 0000000000..7b1872e34e
--- /dev/null
+++ b/content/zh/blog/_posts/2022-05-05-volume-expansion-ga.md
@@ -0,0 +1,207 @@
+---
+layout: blog
+title: "Kubernetes 1.24:卷扩充现在成为稳定功能"
+date: 2022-05-05
+slug: volume-expansion-ga
+---
+
+
+
+
+**作者:** Hemant Kumar (Red Hat)
+
+卷扩充在 Kubernetes 1.8 作为 Alpha 功能引入,
+在 Kubernetes 1.11 进入了 Beta 阶段。
+在 Kubernetes 1.24 中,我们很高兴地宣布卷扩充正式发布(GA)。
+
+此功能允许 Kubernetes 用户简单地编辑其 `PersistentVolumeClaim` 对象,
+并在 PVC Spec 中指定新的大小,Kubernetes 将使用存储后端自动扩充卷,
+同时也会扩充 Pod 使用的底层文件系统,使得无需任何停机时间成为可能。
+
+### 如何使用卷扩充
+
+通过编辑 PVC 的 `spec` 字段,指定不同的(和更大的)存储请求,
+可以触发 PersistentVolume 的扩充。
+例如,给定以下 PVC:
+
+```yaml
+kind: PersistentVolumeClaim
+apiVersion: v1
+metadata:
+ name: myclaim
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 1Gi # 在此处指定新的大小
+```
+
+你可以指定新的值来替代旧的 `1Gi` 大小来请求扩充下层 PersistentVolume。
+一旦你更改了请求的大小,可以查看 PVC 的 `status.conditions` 字段,
+确认卷大小的调整是否已完成。
+
+当 Kubernetes 开始扩充卷时,它会给 PVC 添加 `Resizing` 状况。
+一旦扩充结束,这个状况会被移除。通过监控与 PVC 关联的事件,
+还可以获得更多关于扩充操作进度的信息:
+
+```bash
+kubectl describe pvc
+```
+
+### 存储驱动支持
+
+然而,并不是每种卷类型都默认支持扩充。
+某些卷类型(如树内 hostpath 卷)不支持扩充。
+对于 CSI 卷,
+CSI 驱动必须在控制器或节点服务(如果合适,二者兼备)
+中具有 `EXPAND_VOLUME` 能力。
+请参阅 CSI 驱动的文档,了解其是否支持卷扩充。
+
+有关支持卷扩充的树内(intree)卷类型,
+请参阅卷扩充文档:[扩充 PVC 申领](/zh/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims)。
+
+
+通常,为了对可扩充的卷提供某种程度的控制,
+只有在存储类将 `allowVolumeExpansion` 参数设置为 `true` 时,
+动态供应的 PVC 才是可扩充的。
+
+Kubernetes 集群管理员必须编辑相应的 StorageClass 对象,
+并将 `allowVolumeExpansion` 字段设置为 `true`。例如:
+
+```yaml
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: gp2-default
+provisioner: kubernetes.io/aws-ebs
+parameters:
+ secretNamespace: ""
+ secretName: ""
+allowVolumeExpansion: true
+```
+
+### 在线扩充与离线扩充比较
+
+默认情况下,Kubernetes 会在用户请求调整大小后立即尝试扩充卷。
+如果一个或多个 Pod 正在使用该卷,
+Kubernetes 会尝试通过在线调整大小来扩充该卷;
+因此,卷扩充通常不需要应用停机。
+节点上的文件系统也可以在线扩充,因此不需要关闭任何正在使用 PVC 的 Pod。
+
+如果要扩充的 PersistentVolume 未被使用,Kubernetes 会用离线方式调整卷大小
+(而且,由于该卷未使用,所以也不会造成工作负载中断)。
+
+但在某些情况下,如果底层存储驱动只能支持离线扩充,
+则 PVC 用户必须先停止 Pod,才能让扩充成功。
+请参阅存储提供商的文档,了解其支持哪种模式的卷扩充。
+
+当卷扩充作为 Alpha 功能引入时,
+Kubernetes 仅支持在节点上进行离线的文件系统扩充,
+因此需要用户重新启动 Pod,才能完成文件系统的大小调整。
+今天,用户的行为已经被改变,无论底层 PersistentVolume 是在线还是离线,
+Kubernetes 都会尽最大努力满足任何调整大小的请求。
+如果你的存储提供商支持在线扩充,则无需重启 Pod 即可完成卷扩充。
+
+## 下一步
+
+尽管卷扩充在最近的 v1.24 发行版中成为了稳定版本,
+但 SIG Storage 团队仍然在努力让 Kubernetes 用户扩充其持久性存储变得更简单。
+Kubernetes 1.23 引入了卷扩充失败后触发恢复机制的功能特性,
+允许用户在大小调整失败后尝试自助修复。
+更多详细信息,请参阅[处理扩充卷过程中的失败](/zh/docs/concepts/storage/persistent-volumes/#recovering-from-failure-when-expanding-volumes)。
+
+Kubernetes 贡献者社区也在讨论有状态(StatefulSet)驱动的存储扩充的潜力。
+这个提议的功能特性将允许用户通过直接编辑 StatefulSet 对象,
+触发为 StatefulSet 提供存储的所有底层 PV 的扩充。
+更多详细信息,请参阅[通过 StatefulSet 支持卷扩充](https://github.com/kubernetes/enhancements/issues/661)的改善提议。
diff --git a/content/zh/blog/_posts/2022-05-06-storage-capacity-GA/index.md b/content/zh/blog/_posts/2022-05-06-storage-capacity-GA/index.md
new file mode 100644
index 0000000000..4c575e246a
--- /dev/null
+++ b/content/zh/blog/_posts/2022-05-06-storage-capacity-GA/index.md
@@ -0,0 +1,149 @@
+---
+layout: blog
+title: "Kubernetes 1.24 版本中存储容量跟踪特性进入 GA 阶段"
+date: 2022-05-06
+slug: storage-capacity-ga
+---
+
+
+
+ **作者:** Patrick Ohly(Intel)
+
+
+在 Kubernetes v1.24 版本中,[存储容量](/zh/docs/concepts/storage/storage-capacity/)跟踪已经成为一项正式发布的功能。
+
+
+## 已经解决的问题
+
+
+如[上一篇关于此功能的博文](/blog/2021/04/14/local-storage-features-go-beta/)中所详细介绍的,
+存储容量跟踪允许 CSI 驱动程序发布有关剩余容量的信息。当 Pod 仍然有需要配置的卷时,
+kube-scheduler 使用该信息为 Pod 选择合适的节点。
+
+
+如果没有这些信息,Pod 可能会被卡住,而不会被调度到合适节点,这是因为 kube-scheduler
+只能盲目地选择节点。由于 CSI 驱动程序管理的下层存储系统没有足够的容量,
+kube-scheduler 常常会选择一个无法为其配置卷的节点。
+
+
+因为 CSI 驱动程序发布的这些存储容量信息在被使用的时候可能已经不是最新的信息了,
+所以最终选择的节点无法正常工作的情况仍然可能会发生。
+卷配置通过通知调度程序需要在其他节点上重试来恢复。
+
+
+升级到 GA 版本后重新进行的[负载测试](https://github.com/kubernetes-csi/csi-driver-host-path/blob/master/docs/storage-capacity-tracking.md)证实,
+集群中部署了存储容量跟踪功能的 Pod 可以使用所有的存储,而没有部署此功能的 Pod 就会被卡住。
+
+
+## *尚未*解决的问题
+
+
+如果尝试恢复一个制备失败的卷,存在一个已知的限制:
+如果 Pod 使用两个卷并且只能制备其中一个,那么所有将来的调度决策都受到已经制备的卷的限制。
+如果该卷是节点的本地卷,并且另一个卷无法被制备,则 Pod 会卡住。
+此问题早在存储容量跟踪功能之前就存在,虽然苛刻的附加条件使这种情况不太可能发生,
+但是无法完全避免,当然每个 Pod 仅使用一个卷的情况除外。
+
+
+[KEP 草案](https://github.com/kubernetes/enhancements/pull/1703)中提出了一个解决此问题的想法:
+已制备但尚未被使用的卷不能包含任何有价值的数据,因此可以在其他地方释放并且再次被制备。
+SIG Storage 正在寻找对此感兴趣并且愿意继续从事此工作的开发人员。
+
+
+另一个没有解决的问题是 Cluster Autoscaler 对包含卷的 Pod 的支持。
+对于具有存储容量跟踪功能的 CSI 驱动程序,我们开发了一个原型并在此
+[PR](https://github.com/kubernetes/autoscaler/pull/3887) 中进行了讨论。
+此原型旨在与任意 CSI 驱动程序协同工作,但这种灵活性使其难以配置并减慢了扩展操作:
+因为自动扩展程序无法模拟卷制备操作,它一次只能将集群扩展一个节点,这是此方案的不足之处。
+
+
+因此,这个 PR 没有被合入,需要另一种不同的方法,在自动缩放器和 CSI 驱动程序之间实现更紧密的耦合。
+为此,需要更好地了解哪些本地存储 CSI 驱动程序与集群自动缩放结合使用。如果这会引出新的 KEP,
+那么用户将不得不在实践中尝试实现,然后才能迁移到 beta 版本或 GA 版本中。
+如果你对此主题感兴趣,请联系 SIG Storage。
+
+
+## 致谢
+
+
+非常感谢为此功能做出贡献或提供反馈的 [SIG Scheduling](https://github.com/kubernetes/community/tree/master/sig-scheduling)、
+[SIG Autoscaling](https://github.com/kubernetes/community/tree/master/sig-autoscaling)
+和 [SIG Storage](https://github.com/kubernetes/community/tree/master/sig-storage) 成员!
diff --git a/content/zh/blog/_posts/2022-05-16-volume-populators-beta.md b/content/zh/blog/_posts/2022-05-16-volume-populators-beta.md
new file mode 100644
index 0000000000..fca3ff7b61
--- /dev/null
+++ b/content/zh/blog/_posts/2022-05-16-volume-populators-beta.md
@@ -0,0 +1,256 @@
+---
+layout: blog
+title: "Kubernetes 1.24: 卷填充器功能进入 Beta 阶段"
+date: 2022-05-16
+slug: volume-populators-beta
+---
+
+
+
+**作者:**
+Ben Swartzlander (NetApp)
+
+
+卷填充器功能现在已经经历两个发行版本并进入 Beta 阶段!
+在 Kubernetes v1.24 中 `AnyVolumeDataSouce` 特性门控默认被启用。
+这意味着用户可以指定任何自定义资源作为 PVC 的数据源。
+
+
+[之前的一篇博客](/blog/2021/08/30-volume-populators-alpha/)详细介绍了卷填充器功能的工作原理。
+简而言之,集群管理员可以在集群中安装 CRD 和相关的填充器控制器,
+任何可以创建 CR 实例的用户都可以利用填充器创建预填充卷。
+
+
+出于不同的目的,可以一起安装多个填充器。存储 SIG 社区已经有了一些公开的实现,更多原型应该很快就会出现。
+
+
+**强烈建议**集群管理人员在安装任何填充器之前安装 volume-data-source-validator 控制器和相关的
+`VolumePopulator` CRD,以便用户可以获得有关无效 PVC 数据源的反馈。
+
+
+## 新功能
+
+
+构建填充器的 [lib-volume-populator](https://github.com/kubernetes-csi/lib-volume-populator)
+库现在包含可帮助操作员监控和检测问题的指标。这个库现在是 beta 阶段,最新版本是 v1.0.1。
+
+
+[卷数据源校验器](https://github.com/kubernetes-csi/volume-data-source-validator)控制器也添加了指标支持,
+处于 beta 阶段。`VolumePopulator` CRD 是 beta 阶段,最新版本是 v1.0.1。
+
+
+## 尝试一下
+
+
+要查看它是如何工作的,你可以安装 “hello” 示例填充器并尝试一下。
+
+
+首先安装 volume-data-source-validator 控制器。
+
+```shell
+kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/volume-data-source-validator/v1.0.1/client/config/crd/populator.storage.k8s.io_volumepopulators.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/volume-data-source-validator/v1.0.1/deploy/kubernetes/rbac-data-source-validator.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/volume-data-source-validator/v1.0.1/deploy/kubernetes/setup-data-source-validator.yaml
+```
+
+接下来安装 hello 示例填充器。
+
+```shell
+kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/lib-volume-populator/v1.0.1/example/hello-populator/crd.yaml
+kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/lib-volume-populator/87a47467b86052819e9ad13d15036d65b9a32fbb/example/hello-populator/deploy.yaml
+```
+
+你的集群现在有一个新的 CustomResourceDefinition,它提供了一个名为 Hello 的测试 API。
+创建一个 `Hello` 自定义资源的实例,内容如下:
+
+```yaml
+apiVersion: hello.example.com/v1alpha1
+kind: Hello
+metadata:
+ name: example-hello
+spec:
+ fileName: example.txt
+ fileContents: Hello, world!
+```
+
+创建一个将该 CR 引用为其数据源的 PVC。
+
+```yaml
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: example-pvc
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 10Mi
+ dataSourceRef:
+ apiGroup: hello.example.com
+ kind: Hello
+ name: example-hello
+ volumeMode: Filesystem
+```
+
+接下来,运行一个读取 PVC 中文件的 Job。
+
+```yaml
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: example-job
+spec:
+ template:
+ spec:
+ containers:
+ - name: example-container
+ image: busybox:latest
+ command:
+ - cat
+ - /mnt/example.txt
+ volumeMounts:
+ - name: vol
+ mountPath: /mnt
+ restartPolicy: Never
+ volumes:
+ - name: vol
+ persistentVolumeClaim:
+ claimName: example-pvc
+```
+
+等待 Job 完成(包括其所有依赖项)。
+
+```shell
+kubectl wait --for=condition=Complete job/example-job
+```
+
+
+最后检查 Job 中的日志。
+
+```shell
+kubectl logs job/example-job
+```
+
+输出应该是:
+
+```terminal
+Hello, world!
+```
+
+请注意,该卷已包含一个文本文件,其中包含来自 CR 的字符串内容。这只是最简单的例子。
+实际填充器可以将卷设置为包含任意内容。
+
+
+## 如何编写自己的卷填充器
+
+
+鼓励有兴趣编写新的填充器的开发人员使用
+[lib-volume-populator](https://github.com/kubernetes-csi/lib-volume-populator) 库,
+只提供一个小型控制器,以及一个能够连接到卷并向卷写入适当数据的 Pod 镜像。
+
+
+单个填充器非常通用,它们可以与所有类型的 PVC 一起使用,
+或者如果卷是来自同一供应商的特定 CSI 驱动程序供应的,
+它们可以执行供应商特定的的操作以快速用数据填充卷,例如,通过通信直接使用该卷的存储。
+
+
+## 我怎样才能了解更多?
+
+
+增强提案,
+[卷填充器](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1495-volume-populators),
+包含有关此功能的历史和技术实现的许多详细信息。
+
+
+[卷填充器与数据源](/zh/docs/concepts/storage/persistent-volumes/#volume-populators-and-data-sources),
+在有关持久卷的文档主题中,解释了如何在集群中使用此功能。
+
+
+请加入 Kubernetes 的存储 SIG,帮助我们增强这一功能。这里已经有很多好的主意了,我们很高兴能有更多!
+
diff --git a/content/zh/blog/_posts/2022-05-18-prevent-unauthorised-volume-mode-conversion.md b/content/zh/blog/_posts/2022-05-18-prevent-unauthorised-volume-mode-conversion.md
new file mode 100644
index 0000000000..15e86f5e5d
--- /dev/null
+++ b/content/zh/blog/_posts/2022-05-18-prevent-unauthorised-volume-mode-conversion.md
@@ -0,0 +1,203 @@
+---
+layout: blog
+title: 'Kubernetes 1.24: 防止未经授权的卷模式转换'
+date: 2022-05-18
+slug: prevent-unauthorised-volume-mode-conversion-alpha
+---
+
+
+
+
+**作者:** Raunak Pradip Shah (Mirantis)
+
+
+Kubernetes v1.24 引入了一个新的 alpha 级特性,可以防止未经授权的用户修改基于 Kubernetes
+集群中已有的 [`VolumeSnapshot`](/zh/docs/concepts/storage/volume-snapshots/)
+创建的 [`PersistentVolumeClaim`](/zh/docs/concepts/storage/persistent-volumes/) 的卷模式。
+
+
+### 问题
+
+
+[卷模式](/zh/docs/concepts/storage/persistent-volumes/#volume-mode)确定卷是格式化为文件系统还是显示为原始块设备。
+
+
+用户可以使用自 Kubernetes v1.20 以来就稳定的 `VolumeSnapshot` 功能,
+基于 Kubernetes 集群中的已有的 `VolumeSnapshot` 创建一个 `PersistentVolumeClaim` (简称 PVC )。
+PVC 规约包括一个 `dataSource` 字段,它可以指向一个已有的 `VolumeSnapshot` 实例。
+查阅[基于卷快照创建 PVC](/zh/docs/concepts/storage/persistent-volumes/#create-persistent-volume-claim-from-volume-snapshot)
+获取更多详细信息。
+
+
+当使用上述功能时,没有逻辑来验证快照所在的原始卷的模式是否与新创建的卷的模式匹配。
+
+
+这引起了一个安全漏洞,允许恶意用户潜在地利用主机操作系统中的未知漏洞。
+
+
+为了提高效率,许多流行的存储备份供应商在备份操作过程中转换卷模式,
+这使得 Kubernetes 无法完全阻止该操作,并在区分受信任用户和恶意用户方面带来挑战。
+
+
+### 防止未经授权的用户转换卷模式
+
+
+在这种情况下,授权用户是指有权对 `VolumeSnapshotContents`(集群级资源)执行 `Update`
+或 `Patch` 操作的用户。集群管理员只能向受信任的用户或应用程序(如备份供应商)提供这些权限。
+
+
+如果在 `snapshot-controller`、`snapshot-validation-webhook` 和
+`external-provisioner` 中[启用](https://kubernetes-csi.github.io/docs/)了这个 alpha
+特性,则基于 `VolumeSnapshot` 创建 PVC 时,将不允许未经授权的用户修改其卷模式。
+
+
+如要转换卷模式,授权用户必须执行以下操作:
+
+
+1. 确定要用作给定命名空间中新创建 PVC 的数据源的 `VolumeSnapshot`。
+2. 确定绑定到上面 `VolumeSnapshot` 的 `VolumeSnapshotContent`。
+
+ ```
+ kubectl get volumesnapshot -n
+ ```
+
+3. 给 `VolumeSnapshotContent` 添加
+ [`snapshot.storage.kubernetes.io/allowVolumeModeChange`](/zh/docs/reference/labels-annotations-taints/#snapshot-storage-kubernetes-io-allowvolumemodechange)
+ 注解。
+
+
+4. 此注解可通过软件添加或由授权用户手动添加。`VolumeSnapshotContent` 注解必须类似于以下清单片段:
+
+ ```yaml
+ kind: VolumeSnapshotContent
+ metadata:
+ annotations:
+ - snapshot.storage.kubernetes.io/allowVolumeModeChange: "true"
+ ...
+ ```
+
+**注意**:对于预先制备的 `VolumeSnapshotContents`,你必须采取额外的步骤设置 `spec.sourceVolumeMode`
+字段为 `Filesystem` 或 `Block`,这取决于快照所在卷的模式。
+
+
+如下为一个示例:
+
+```yaml
+ apiVersion: snapshot.storage.k8s.io/v1
+ kind: VolumeSnapshotContent
+ metadata:
+ annotations:
+ - snapshot.storage.kubernetes.io/allowVolumeModeChange: "true"
+ name: new-snapshot-content-test
+ spec:
+ deletionPolicy: Delete
+ driver: hostpath.csi.k8s.io
+ source:
+ snapshotHandle: 7bdd0de3-aaeb-11e8-9aae-0242ac110002
+ sourceVolumeMode: Filesystem
+ volumeSnapshotRef:
+ name: new-snapshot-test
+ namespace: default
+```
+
+
+对于在备份或恢复操作期间需要转换卷模式的所有 `VolumeSnapshotContents`,重复步骤 1 到 3。
+
+
+如果 `VolumeSnapshotContent` 对象上存在上面步骤 4 中显示的注解,Kubernetes 将不会阻止转换卷模式。
+用户在尝试将注解添加到任何 `VolumeSnapshotContent` 之前,应该记住这一点。
+
+
+### 接下来
+
+
+[启用此特性](https://kubernetes-csi.github.io/docs/)并让我们知道你的想法!
+
+
+我们希望此功能不会中断现有工作流程,同时防止恶意用户利用集群中的安全漏洞。
+
+
+若有任何问题,请在 #sig-storage slack 频道中创建一个会话,
+或在 CSI 外部快照存储[仓库](https://github.com/kubernetes-csi/external-snapshotter)中报告一个 issue。
\ No newline at end of file
diff --git a/content/zh/blog/_posts/2022-05-23-service-ip-dynamic-and-static-allocation.md b/content/zh/blog/_posts/2022-05-23-service-ip-dynamic-and-static-allocation.md
new file mode 100644
index 0000000000..fccad6cc3d
--- /dev/null
+++ b/content/zh/blog/_posts/2022-05-23-service-ip-dynamic-and-static-allocation.md
@@ -0,0 +1,268 @@
+---
+layout: blog
+title: "Kubernetes 1.24: 避免为 Services 分配 IP 地址时发生冲突"
+date: 2022-05-23
+slug: service-ip-dynamic-and-static-allocation
+---
+
+
+
+**作者:** Antonio Ojea (Red Hat)
+
+
+在 Kubernetes 中,[Services](/zh/docs/concepts/services-networking/service/)
+是一种抽象,用来暴露运行在一组 Pod 上的应用。
+Service 可以有一个集群范围的虚拟 IP 地址(使用 `type: ClusterIP` 的 Service)。
+客户端可以使用该虚拟 IP 地址进行连接, Kubernetes 为对该 Service 的访问流量提供负载均衡,以访问不同的后端 Pod。
+
+
+## Service ClusterIP 是如何分配的?
+
+
+Service `ClusterIP` 有如下分配方式:
+
+
+**动态**
+:群集的控制平面会自动从配置的 IP 范围内为 `type:ClusterIP` 的 Service 选择一个空闲 IP 地址。
+
+
+**静态**
+:你可以指定一个来自 Service 配置的 IP 范围内的 IP 地址。
+
+
+在整个集群中,每个 Service 的 `ClusterIP` 必须是唯一的。
+尝试创建一个已经被分配了的 `ClusterIP` 的 Service 将会返回错误。
+
+
+## 为什么需要预留 Service Cluster IP?
+
+
+有时,你可能希望让 Service 运行在众所周知的 IP 地址上,以便集群中的其他组件和用户可以使用它们。
+
+
+最好的例子是集群的 DNS Service。一些 Kubernetes 安装程序将 Service IP 范围中的第 10 个地址分配给 DNS Service。
+假设你配置集群 Service IP 范围是 10.96.0.0/16,并且希望 DNS Service IP 为 10.96.0.10,
+那么你必须创建一个如下所示的 Service:
+
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+ labels:
+ k8s-app: kube-dns
+ kubernetes.io/cluster-service: "true"
+ kubernetes.io/name: CoreDNS
+ name: kube-dns
+ namespace: kube-system
+spec:
+ clusterIP: 10.96.0.10
+ ports:
+ - name: dns
+ port: 53
+ protocol: UDP
+ targetPort: 53
+ - name: dns-tcp
+ port: 53
+ protocol: TCP
+ targetPort: 53
+ selector:
+ k8s-app: kube-dns
+ type: ClusterIP
+```
+
+
+但正如我之前解释的,IP 地址 10.96.0.10 没有被保留;
+如果其他 Service 在动态分配之前创建或与动态分配并行创建,则它们有可能分配此 IP 地址,
+因此,你将无法创建 DNS Service,因为它将因冲突错误而失败。
+
+
+## 如何避免 Service ClusterIP 冲突? {#avoid-ClusterIP-conflict}
+
+
+在 Kubernetes 1.24 中,你可以启用一个新的特性门控 `ServiceIPStaticSubrange`。
+启用此特性允许你为 Service 使用不同的 IP 分配策略,减少冲突的风险。
+
+
+`ClusterIP` 范围将根据公式 `min(max(16, cidrSize / 16), 256)` 进行划分,
+该公式可描述为 “在不小于 16 且不大于 256 之间有一个步进量(Graduated Step)”。
+
+
+分配默认使用上半段地址,当上半段地址耗尽后,将使用下半段地址范围。
+这将允许用户使用下半段地址中静态分配的地址并且降低冲突的风险。
+
+
+举例:
+
+
+#### Service IP CIDR 地址段: 10.96.0.0/24
+
+
+地址段大小:28 - 2 = 254
+地址段偏移:`min(max(16,256/16),256)` = `min(16,256)` = 16
+静态地址段起点:10.96.0.1
+静态地址段终点:10.96.0.16
+地址范围终点:10.96.0.254
+
+
+{{< mermaid >}}
+pie showData
+title 10.96.0.0/24
+"静态" : 16
+"动态" : 238
+{{< /mermaid >}}
+
+
+#### Service IP CIDR 地址段: 10.96.0.0/20
+
+
+地址段大小:212 - 2 = 4094
+地址段偏移:`min(max(16,4094/16),256)` = `min(256,256)` = 256
+静态地址段起点:10.96.0.1
+静态地址段终点:10.96.1.0
+地址范围终点:10.96.15.254
+
+
+{{< mermaid >}}
+pie showData
+title 10.96.0.0/20
+"静态" : 256
+"动态" : 3838
+{{< /mermaid >}}
+
+
+#### Service IP CIDR 地址段: 10.96.0.0/16
+
+
+地址段大小:216 - 2 = 65534
+地址段偏移:`min(max(16,65536/16),256)` = `min(4096,256)` = 256
+静态地址段起点:10.96.0.1
+静态地址段终点:10.96.1.0
+地址范围终点:10.96.255.254
+
+
+{{< mermaid >}}
+pie showData
+title 10.96.0.0/16
+"静态" : 256
+"动态" : 65278
+{{< /mermaid >}}
+
+
+## 加入 SIG Network
+
+
+当前 SIG-Network 在 GitHub 上的 [KEPs](https://github.com/orgs/kubernetes/projects/10) 和
+[issues](https://github.com/kubernetes/kubernetes/issues?q=is%3Aopen+is%3Aissue+label%3Asig%2Fnetwork)
+表明了该 SIG 的重点领域。
+
+
+[SIG Network 会议](https://github.com/kubernetes/community/tree/master/sig-network)是一个友好、热情的场所,
+你可以与社区联系并分享你的想法。期待你的回音!
diff --git a/content/zh/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md b/content/zh/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md
new file mode 100644
index 0000000000..4752273dad
--- /dev/null
+++ b/content/zh/blog/_posts/2022-05-27-maxunavailable-for-statefulset.md
@@ -0,0 +1,239 @@
+---
+layout: blog
+title: 'Kubernetes 1.24: StatefulSet 的最大不可用副本数'
+date: 2022-05-27
+slug: maxunavailable-for-statefulset
+---
+
+**作者:** Mayank Kumar (Salesforce)
+
+
+Kubernetes [StatefulSet](/zh/docs/concepts/workloads/controllers/statefulset/),
+自 1.5 版本中引入并在 1.9 版本中变得稳定以来,已被广泛用于运行有状态应用。它提供固定的 Pod 身份标识、
+每个 Pod 的持久存储以及 Pod 的有序部署、扩缩容和滚动更新功能。你可以将 StatefulSet
+视为运行复杂有状态应用程序的原子构建块。随着 Kubernetes 的使用增多,需要 StatefulSet 的场景也越来越多。
+当 StatefulSet 的 Pod 管理策略为 `OrderedReady` 时,其中许多场景需要比当前所支持的一次一个 Pod
+的更新更快的滚动更新。
+
+
+这里有些例子:
+
+- 我使用 StatefulSet 来编排一个基于缓存的多实例应用程序,其中缓存的规格很大。
+ 缓存冷启动,需要相当长的时间才能启动容器。所需要的初始启动任务有很多。在应用程序完全更新之前,
+ 此 StatefulSet 上的 RollingUpdate 将花费大量时间。如果 StatefulSet 支持一次更新多个 Pod,
+ 那么更新速度会快得多。
+
+
+- 我的有状态应用程序由 leader 和 follower 或者一个 writer 和多个 reader 组成。
+ 我有多个 reader 或 follower,并且我的应用程序可以容忍多个 Pod 同时出现故障。
+ 我想一次更新这个应用程序的多个 Pod,特别是当我的应用程序实例数量很多时,这样我就能快速推出新的更新。
+ 注意,我的应用程序仍然需要每个 Pod 具有唯一标识。
+
+
+为了支持这样的场景,Kubernetes 1.24 提供了一个新的 alpha 特性。在使用新特性之前,必须启用
+`MaxUnavailableStatefulSet` 特性标志。一旦启用,就可以指定一个名为 `maxUnavailable` 的新字段,
+这是 StatefulSet `spec` 的一部分。例如:
+
+```
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: web
+ namespace: default
+spec:
+ podManagementPolicy: OrderedReady # 你必须设为 OrderedReady
+ replicas: 5
+ selector:
+ matchLabels:
+ app: nginx
+ template:
+ metadata:
+ labels:
+ app: nginx
+ spec:
+ containers:
+ - image: k8s.gcr.io/nginx-slim:0.8
+ imagePullPolicy: IfNotPresent
+ name: nginx
+ updateStrategy:
+ rollingUpdate:
+ maxUnavailable: 2 # 这是 alpha 特性的字段,默认值是 1
+ partition: 0
+ type: RollingUpdate
+```
+
+
+如果你启用了新特性,但没有在 StatefulSet 中指定 `maxUnavailable` 的值,Kubernetes
+会默认设置 `maxUnavailable: 1`。这与你不启用新特性时看到的行为是一致的。
+
+
+我将基于该示例清单做场景演练,以演示此特性是如何工作的。我将部署一个有 5 个副本的 StatefulSet,
+`maxUnavailable` 设置为 2 并将 `partition` 设置为 0。
+
+
+我可以通过将镜像更改为 `k8s.gcr.io/nginx-slim:0.9` 来触发滚动更新。一旦开始滚动更新,
+就可以看到一次更新 2 个 Pod,因为 `maxUnavailable` 的当前值是 2。
+下面的输出显示了一个时间段内的结果,但并不是完整过程。`maxUnavailable` 可以是绝对数值(例如 2)或所需 Pod
+的百分比(例如 10%),绝对数是通过百分比计算结果进行四舍五入得出的。
+
+```
+kubectl get pods --watch
+```
+
+```
+NAME READY STATUS RESTARTS AGE
+web-0 1/1 Running 0 85s
+web-1 1/1 Running 0 2m6s
+web-2 1/1 Running 0 106s
+web-3 1/1 Running 0 2m47s
+web-4 1/1 Running 0 2m27s
+web-4 1/1 Terminating 0 5m43s ----> start terminating 4
+web-3 1/1 Terminating 0 6m3s ----> start terminating 3
+web-3 0/1 Terminating 0 6m7s
+web-3 0/1 Pending 0 0s
+web-3 0/1 Pending 0 0s
+web-4 0/1 Terminating 0 5m48s
+web-4 0/1 Terminating 0 5m48s
+web-3 0/1 ContainerCreating 0 2s
+web-3 1/1 Running 0 2s
+web-4 0/1 Pending 0 0s
+web-4 0/1 Pending 0 0s
+web-4 0/1 ContainerCreating 0 0s
+web-4 1/1 Running 0 1s
+web-2 1/1 Terminating 0 5m46s ----> start terminating 2 (only after both 4 and 3 are running)
+web-1 1/1 Terminating 0 6m6s ----> start terminating 1
+web-2 0/1 Terminating 0 5m47s
+web-1 0/1 Terminating 0 6m7s
+web-1 0/1 Pending 0 0s
+web-1 0/1 Pending 0 0s
+web-1 0/1 ContainerCreating 0 1s
+web-1 1/1 Running 0 2s
+web-2 0/1 Pending 0 0s
+web-2 0/1 Pending 0 0s
+web-2 0/1 ContainerCreating 0 0s
+web-2 1/1 Running 0 1s
+web-0 1/1 Terminating 0 6m6s ----> start terminating 0 (only after 2 and 1 are running)
+web-0 0/1 Terminating 0 6m7s
+web-0 0/1 Pending 0 0s
+web-0 0/1 Pending 0 0s
+web-0 0/1 ContainerCreating 0 0s
+web-0 1/1 Running 0 1s
+```
+
+注意,滚动更新一开始,4 和 3(两个最高序号的 Pod)同时开始进入 `Terminating` 状态。
+Pod 4 和 3 会按照自身节奏进行更新。一旦 Pod 4 和 3 更新完毕后,Pod 2 和 1 会同时进入
+`Terminating` 状态。当 Pod 2 和 1 都准备完毕处于 `Running` 状态时,Pod 0 开始进入 `Terminating` 状态
+
+
+在 Kubernetes 中,StatefulSet 更新 Pod 时遵循严格的顺序。在此示例中,更新从副本 4 开始,
+然后是副本 3,然后是副本 2,以此类推,一次更新一个 Pod。当一次只更新一个 Pod 时,
+副本 3 不可能在副本 4 之前准备好进入 `Running` 状态。当 `maxUnavailable` 值
+大于 1 时(在示例场景中我设置 `maxUnavailable` 值为 2),副本 3 可能在副本 4 之前准备好并运行,
+这是没问题的。如果你是开发人员并且设置 `maxUnavailable` 值大于 1,你应该知道可能出现这种情况,
+并且如果有这种情况的话,你必须确保你的应用程序能够处理发生的此类顺序问题。当你设置 `maxUnavailable`
+值大于 1 时,更新 Pod 的批次之间会保证顺序。该保证意味着在批次 0(副本 4 和 3)中的 Pod
+准备好之前,更新批次 2(副本 2 和 1)中的 Pod 无法开始更新。
+
+
+尽管 Kubernetes 将这些称为**副本**,但你的有状态应用程序可能不这样理解,StatefulSet 的每个
+Pod 可能持有与其他 Pod 完全不同的数据。重要的是,StatefulSet 的更新是分批进行的,
+你现在让批次大小大于 1(作为 alpha 特性)。
+
+
+还要注意,上面的行为采用的 Pod 管理策略是 `podManagementPolicy: OrderedReady`。
+如果你的 StatefulSet 的 Pod 管理策略是 `podManagementPolicy: Parallel`,
+那么不仅是 `maxUnavailable` 数量的副本同时被终止,还会导致 `maxUnavailable` 数量的副本同时在
+`ContainerCreating` 阶段。这就是所谓的突发(Bursting)。
+
+
+因此,现在你可能有很多关于以下方面的问题:
+- 当设置 `podManagementPolicy:Parallel` 时,会产生什么行为?
+- 将 `partition` 设置为非 `0` 值时会发生什么?
+
+
+自己试试看可能会更好。这是一个 alpha 特性,Kubernetes 贡献者正在寻找有关此特性的反馈。
+这是否有助于你实现有状态的场景?你是否发现了一个 bug,或者你认为实现的行为不直观易懂,
+或者它可能会破坏应用程序或让他们感到吃惊?请[登记一个 issue](https://github.com/kubernetes/kubernetes/issues)
+告知我们。
+
+
+## 进一步阅读和后续步骤 {#next-steps}
+- [最多不可用 Pod 数](/zh/docs/concepts/workloads/controllers/statefulset/#maximum-unavailable-pods)
+- [KEP for MaxUnavailable for StatefulSet](https://github.com/kubernetes/enhancements/tree/master/keps/sig-apps/961-maxunavailable-for-statefulset)
+- [代码实现](https://github.com/kubernetes/kubernetes/pull/82162/files)
+- [增强跟踪 Issue](https://github.com/kubernetes/enhancements/issues/961)
\ No newline at end of file
diff --git a/content/zh/case-studies/adidas/adidas-featured.svg b/content/zh/case-studies/adidas/adidas-featured.svg
new file mode 100644
index 0000000000..a53d467552
--- /dev/null
+++ b/content/zh/case-studies/adidas/adidas-featured.svg
@@ -0,0 +1 @@
+kubernetes.io-54664
\ No newline at end of file
diff --git a/content/zh/case-studies/adidas/index.html b/content/zh/case-studies/adidas/index.html
new file mode 100644
index 0000000000..3a95a5aa1b
--- /dev/null
+++ b/content/zh/case-studies/adidas/index.html
@@ -0,0 +1,78 @@
+---
+title: adidas Case Study
+linkTitle: adidas
+case_study_styles: true
+cid: caseStudies
+featured: false
+
+new_case_study_styles: true
+heading_background: /images/case-studies/adidas/banner1.png
+heading_title_text: adidas
+use_gradient_overlay: true
+subheading: >
+ Staying True to Its Culture, adidas Got 40% of Its Most Impactful Systems Running on Kubernetes in a Year
+case_study_details:
+ - Company: adidas
+ - Location: Herzogenaurach, Germany
+ - Industry: Fashion
+---
+
+Challenge
+
+In recent years, the adidas team was happy with its software choices from a technology perspective—but accessing all of the tools was a problem. For instance, "just to get a developer VM, you had to send a request form, give the purpose, give the title of the project, who's responsible, give the internal cost center a call so that they can do recharges," says Daniel Eichten, Senior Director of Platform Engineering. "The best case is you got your machine in half an hour. Worst case is half a week or sometimes even a week."
+
+Solution
+
+To improve the process, "we started from the developer point of view," and looked for ways to shorten the time it took to get a project up and running and into the adidas infrastructure, says Senior Director of Platform Engineering Fernando Cornago. They found the solution with containerization, agile development, continuous delivery, and a cloud native platform that includes Kubernetes and Prometheus.
+
+Impact
+
+Just six months after the project began, 100% of the adidas e-commerce site was running on Kubernetes. Load time for the e-commerce site was reduced by half. Releases went from every 4-6 weeks to 3-4 times a day. With 4,000 pods, 200 nodes, and 80,000 builds per month, adidas is now running 40% of its most critical, impactful systems on its cloud native platform.
+
+{{< case-studies/quote
+ image="/images/case-studies/adidas/banner2.png"
+ author="FERNANDO CORNAGO, SENIOR DIRECTOR OF PLATFORM ENGINEERING AT ADIDAS"
+>}}
+"For me, Kubernetes is a platform made by engineers for engineers. It's relieving the development team from tasks that they don't want to do, but at the same time giving the visibility of what is behind the curtain, so they can also control it."
+{{< /case-studies/quote >}}
+
+{{< case-studies/lead >}}
+In recent years, the adidas team was happy with its software choices from a technology perspective—but accessing all of the tools was a problem.
+{{< /case-studies/lead >}}
+
+For engineers at adidas, says Daniel Eichten, Senior Director of Platform Engineering, "it felt like being an artist with your hands tied behind your back, and you're supposed to paint something."
+
+For instance, "just to get a developer VM, you had to send a request form, give the purpose, give the title of the project, who's responsible, give the internal cost center a call so that they can do recharges," says Eichten. "Eventually, after a ton of approvals, then the provisioning of the machine happened within minutes, and then the best case is you got your machine in half an hour. Worst case is half a week or sometimes even a week."
+
+To improve the process, "we started from the developer point of view," and looked for ways to shorten the time it took to get a project up and running and into the adidas infrastructure, says Senior Director of Platform Engineering Fernando Cornago.
+
+{{< case-studies/quote author="DANIEL EICHTEN, SENIOR DIRECTOR OF PLATFORM ENGINEERING AT ADIDAS" >}}
+"I call our cloud native platform the field of dreams. We built it, and we never anticipated that people would come and just love it."
+{{< /case-studies/quote >}}
+
+"We were engineers before," adds Eichten. "We know what a typical engineer needs, is craving for, what he or she doesn't want to take care of. For us it was pretty clear. We filled the gaps that no one wants to take care of, and we make the stuff that is usually painful as painless as possible." The goals: to improve speed, operability, and observability.
+
+Cornago and Eichten found the solution with containerization, agile development, continuous delivery, and a cloud native platform that includes Kubernetes and Prometheus. "Choosing Kubernetes was pretty clear," says Eichten. "Day zero, deciding, easy. Day one, installing, configuring, easy. Day two, keeping it up and running even with small workloads, if something goes wrong, you don't know how these things work in detail, you're lost. For day two problems, we needed a partner who's helping us."
+
+In early 2017, adidas chose Giant Swarm to consult, install, configure, and run all of its Kubernetes clusters in AWS and on premise. "There is no competitive edge over our competitors like Puma or Nike in running and operating a Kubernetes cluster," says Eichten. "Our competitive edge is that we teach our internal engineers how to build cool e-comm stores that are fast, that are resilient, that are running perfectly."
+
+{{< case-studies/quote
+ image="/images/case-studies/adidas/banner3.png"
+ author="DANIEL EICHTEN, SENIOR DIRECTOR OF PLATFORM ENGINEERING AT ADIDAS"
+>}}
+"There is no competitive edge over our competitors like Puma or Nike in running and operating a Kubernetes cluster. Our competitive edge is that we teach our internal engineers how to build cool e-comm stores that are fast, that are resilient, that are running perfectly."
+{{< /case-studies/quote >}}
+
+Adds Cornago: "For me, our Kubernetes platform is made by engineers for engineers. It's relieving the development team from tasks that they don't want to do, but at the same time giving the visibility of what is behind the curtain, so they can also control it."
+
+Case in point: For Cyber Week, the team has to create a lot of custom metrics. In November 2017, "because we used the same Prometheus that we use for monitoring the cluster, we really filled the Prometheus database, and we were not able to reduce the retention period [enough]," says Cornago. So during the freeze period before the peak shopping week, five engineers from the platform team worked with five engineers from the e-comm team to figure out a federated solution that was implemented in two days.
+
+In addition to being ready for Cyber Week—100% of the adidas e-commerce site was running on Kubernetes then, just six months after the project began—the cloud native stack has had other impressive results. Load time for the e-commerce site was reduced by half. Releases went from every 4-6 weeks to 3-4 times a day. With 4,000 pods, 200 nodes, and 80,000 builds per month, adidas is now running 40% of its most critical, impactful systems on its cloud native platform.
+
+And adoption has spread quickly among adidas's 300-strong engineering corps. "I call our cloud native platform the field of dreams," says Eichten. "We built it, and we never anticipated that people would come and just love it."
+
+For one thing, "everybody who can touch a line of code" has spent one full week onboarding and learning the platform with members of the 35-person platform engineering team, says Cornago. "We try to spend 50% of our time sitting with the teams, because this is the only way to understand how our platform is being used. And this is how the teams will feel safe that there is someone on the other side of the wall, also feeling the pain."
+
+Additionally, Cornago and Eichten took advantage of the fact that as a fashion athletic wear brand, adidas has sports and competition in its DNA. "Top-down mandates don't work at adidas, but gamification works," says Cornago. "So this year we had a DevOps Cup competition. Every team created new technical capabilities and had a hypothesis of how this affected business value. We announced the winner at a big internal tech summit with more than 600 people. It's been really, really useful for the teams."
+
+So if they had any advice for other companies looking to start a cloud native journey, it would be this: "There is no one-size-fits-all for all companies," says Cornago. "Apply your company's culture to everything that you do."
diff --git a/content/zh/case-studies/babylon/babylon_featured_logo.png b/content/zh/case-studies/babylon/babylon_featured_logo.png
new file mode 100644
index 0000000000..8b158b5ed3
Binary files /dev/null and b/content/zh/case-studies/babylon/babylon_featured_logo.png differ
diff --git a/content/zh/case-studies/babylon/babylon_featured_logo.svg b/content/zh/case-studies/babylon/babylon_featured_logo.svg
new file mode 100644
index 0000000000..e84da19268
--- /dev/null
+++ b/content/zh/case-studies/babylon/babylon_featured_logo.svg
@@ -0,0 +1 @@
+babylon_featured_logo
\ No newline at end of file
diff --git a/content/zh/case-studies/babylon/index.html b/content/zh/case-studies/babylon/index.html
new file mode 100644
index 0000000000..6b86096b02
--- /dev/null
+++ b/content/zh/case-studies/babylon/index.html
@@ -0,0 +1,84 @@
+---
+title: Babylon Case Study
+linkTitle: Babylon
+case_study_styles: true
+cid: caseStudies
+logo: babylon_featured_logo.svg
+featured: true
+weight: 1
+quote: >
+ Kubernetes is a great platform for machine learning because it comes with all the scheduling and scalability that you need.
+
+new_case_study_styles: true
+heading_background: /images/case-studies/babylon/banner4.jpg
+heading_title_text: Babylon
+use_gradient_overlay: true
+subheading: >
+ AppDirect: How Cloud Native Is Enabling Babylon's Medical AI Innovations
+case_study_details:
+ - Company: Babylon
+ - Location: United Kingdom
+ - Industry: AI, Healthcare
+---
+
+Challenge
+
+A large number of Babylon's products leverage machine learning and artificial intelligence, and in 2019, there wasn't enough computing power in-house to run a particular experiment. The company was also growing (from 100 to 1,600 in three years) and planning expansion into other countries.
+
+Solution
+
+Babylon had migrated its user-facing applications to a Kubernetes platform in 2018, so the infrastructure team turned to Kubeflow, a toolkit for machine learning on Kubernetes. "We tried to create a Kubernetes core server, we deployed Kubeflow, and we orchestrated the whole experiment, which ended up being a really good success," says AI Infrastructure Lead Jérémie Vallée. The team began building a self-service AI training platform on top of Kubernetes.
+
+Impact
+
+Instead of waiting hours or days to be able to compute, teams can get access instantaneously. Clinical validations used to take 10 hours; now they are done in under 20 minutes. The portability of the cloud native platform has also enabled Babylon to expand into other countries.
+
+{{< case-studies/quote
+ image="/images/case-studies/babylon/banner1.jpg"
+ author="JÉRÉMIE VALLÉE, AI INFRASTRUCTURE LEAD AT BABYLON"
+>}}
+"Kubernetes is a great platform for machine learning because it comes with all the scheduling and scalability that you need."
+{{< /case-studies/quote >}}
+
+{{< case-studies/lead >}}
+Babylon's mission is to put accessible and affordable healthcare services in the hands of every person on earth.
+{{< /case-studies/lead >}}
+
+Since its launch in the U.K. in 2013, the startup has facilitated millions of digital consultations around the world. In the U.K., patients were typically waiting a week or two for a doctor's appointment. Through Babylon's NHS service, GP at Hand—which has more than 75,000 registered patients—39% get an appointment through their phone within 30 minutes, and 89% within 6 hours.
+
+That's just the start. "We try to combine different types of technology with the medical expertise that we have in-house to build products that will help patients manage and understand their health, and also help doctors be more efficient at what they do," says Jérémie Vallée, AI Infrastructure Lead at Babylon.
+
+A large number of these products leverage machine learning and artificial intelligence, and in 2019, researchers hit a pain point. "We have some servers in-house where our researchers were doing a lot of AI experiments and some training of models, and we came to a point where we didn't have enough compute in-house to run a particular experiment," says Vallée.
+
+Babylon had migrated its user-facing applications to a Kubernetes platform in 2018, "and we had a lot of Kubernetes knowledge thanks to the migration," he adds. To optimize some of the models that had been created, the team turned to Kubeflow, a toolkit for machine learning on Kubernetes. "We tried to create a Kubernetes core server, we deployed Kubeflow, and we orchestrated the whole experiment, which ended up being a really good success," he says.
+
+Based on that experience, Vallée's team was tasked with building a self-service platform to help Babylon's AI teams become more efficient, and by extension help get products to market faster. The main requirements: (1) the ability to give researchers and engineers access to the compute they needed, regardless of the size of the experiments they may need to run; (2) a way to provide teams with the best tools that they needed to do their work, on demand and in a centralized way; and (3) the training platform had to be close to the data that was being managed, because of the company's expansion into different countries.
+
+{{< case-studies/quote author="CAROLINE HARGROVE, CHIEF TECHNOLOGY OFFICER AT BABYLON" >}}
+"Delivering a self-service platform where users are empowered to run their own workload has enabled our data scientist community to do hyper parameter tuning and general algorithm development without any cloud skill and without the help of platform engineers, thus accelerating our innovation."
+{{< /case-studies/quote >}}
+
+Kubernetes was an enabler on every count. "Kubernetes is a great platform for machine learning because it comes with all the scheduling and scalability that you need," says Vallée. The need to keep data in every country in which Babylon operates requires a multi-region, multi-cloud strategy, and some countries might not even have a public cloud provider at all. "We wanted to make this platform portable so that we can run training jobs anywhere," he says. "Kubernetes offered a base layer that allows you to deploy the platform outside of the cloud provider, and then deploy whatever tooling you need. That was a very good selling point for us."
+
+Once the team decided to build the Babylon AI Research platform on top of Kubernetes, they referred to the Cloud Native Landscape to build out the stack: Prometheus and Grafana for monitoring; an Istio service mesh to control the network on the training platform and control what access all of the workflows would have; Helm to deploy the stack; and Flux to manage the GitOps part of the pipeline.
+
+The cloud native AI platform has had a huge impact at Babylon. The first research projects run on the platform mostly involved machine learning and natural language processing. These experiments required a huge amount of compute—1600 CPU, 3.2 TB RAM—which was much more than Babylon had in-house. Plus, access to compute used to take hours, or sometimes even days, depending on how busy the platform team was. "Now, with Kubernetes and the self-service platform that we provide, it's pretty much instantaneous," says Vallée.
+
+Another important type of work that's done on the platform is clinical validation for new applications such as Babylon's Symptom Checker, which calculates the probability of a disease given the evidence input by the user. "Being in healthcare, we want all of our models to be safe before they're going to hit production," says Vallée. Using Argo for GitOps "enabled us to scale the process massively."
+
+{{< case-studies/quote
+ image="/images/case-studies/babylon/banner2.jpg"
+ author="JEAN MARIE FERDEGUE, DIRECTOR OF PLATFORM OPERATIONS AT BABYLON"
+>}}
+"Giving a Kubernetes-based platform to our data scientists has meant increased security, increased innovation through empowerment, and a more affordable health service as our cloud engineers are building an experience that is used by hundreds on a daily basis, rather than supporting specific bespoke use cases."
+{{< /case-studies/quote >}}
+
+Researchers used to have to wait up to 10 hours to get results on new versions of their models. With Kubernetes, that time is now down to under 20 minutes. Plus, previously they could only run one clinical validation at a time, now they can run many parallel ones if they need to—a huge benefit considering that in the past three years, Babylon has grown from 100 to 1,600 employees.
+
+"Delivering a self-service platform where users are empowered to run their own workload has enabled our data scientist community to do hyper parameter tuning and general algorithm development without any cloud skill and without the help of platform engineers, thus accelerating our innovation," says Chief Technology Officer Caroline Hargrove.
+
+Adds Director of Platform Operations Jean Marie Ferdegue: "Giving a Kubernetes-based platform to our data scientists has meant increased security, increased innovation through empowerment, and a more affordable health service as our cloud engineers are building an experience that is used by hundreds on a daily basis, rather than supporting specific bespoke use cases."
+
+Plus, as Babylon continues to expand, "it will be very easy to onboard new countries," says Vallée. "Fifteen months ago when we deployed this platform, we had one big environment in the U.K., but now we have one in Canada, we have one in Asia, and we have one coming in the U.S. This is one of the things that Kubernetes and the other cloud native projects have enabled for us."
+
+Babylon's road map for cloud native involves onboarding all of the company's AI efforts to the platform. Increasingly, that includes AI services of care. "I think this is going to be an interesting field where AI and healthcare meet," Vallée says. "It's kind of a complex problem and there's a lot of issues around this. So with our platform, we want to say, 'What can we do to make this less painful for our developers and machine learning engineers?'"
diff --git a/content/zh/case-studies/booking-com/booking.com_featured_logo.png b/content/zh/case-studies/booking-com/booking.com_featured_logo.png
new file mode 100644
index 0000000000..623ca67345
Binary files /dev/null and b/content/zh/case-studies/booking-com/booking.com_featured_logo.png differ
diff --git a/content/zh/case-studies/booking-com/booking.com_featured_logo.svg b/content/zh/case-studies/booking-com/booking.com_featured_logo.svg
new file mode 100644
index 0000000000..0b245c2700
--- /dev/null
+++ b/content/zh/case-studies/booking-com/booking.com_featured_logo.svg
@@ -0,0 +1 @@
+booking.com_featured_logo
\ No newline at end of file
diff --git a/content/zh/case-studies/booking-com/index.html b/content/zh/case-studies/booking-com/index.html
new file mode 100644
index 0000000000..74d5b282b1
--- /dev/null
+++ b/content/zh/case-studies/booking-com/index.html
@@ -0,0 +1,86 @@
+---
+title: Booking.com Case Study
+linkTitle: Booking.com
+case_study_styles: true
+cid: caseStudies
+logo: booking.com_featured_logo.png
+featured: true
+weight: 3
+quote: >
+ We realized that we needed to learn Kubernetes better in order to fully use the potential of it. At that point, we made the shift to build our own Kubernetes platform.
+
+new_case_study_styles: true
+heading_background: /images/case-studies/booking/banner1.jpg
+heading_title_text: Booking.com
+use_gradient_overlay: true
+subheading: >
+ After Learning the Ropes with a Kubernetes Distribution, Booking.com Built a Platform of Its Own
+case_study_details:
+ - Company: Booking.com
+ - Location: Netherlands
+ - Industry: Travel
+---
+
+Challenge
+
+In 2016, Booking.com migrated to an OpenShift platform, which gave product developers faster access to infrastructure. But because Kubernetes was abstracted away from the developers, the infrastructure team became a "knowledge bottleneck" when challenges arose. Trying to scale that support wasn't sustainable.
+
+Solution
+
+After a year operating OpenShift, the platform team decided to build its own vanilla Kubernetes platform—and ask developers to learn some Kubernetes in order to use it. "This is not a magical platform," says Ben Tyler, Principal Developer, B Platform Track. "We're not claiming that you can just use it with your eyes closed. Developers need to do some learning, and we're going to do everything we can to make sure they have access to that knowledge."
+
+Impact
+
+Despite the learning curve, there's been a great uptick in adoption of the new Kubernetes platform. Before containers, creating a new service could take a couple of days if the developers understood Puppet, or weeks if they didn't. On the new platform, it can take as few as 10 minutes. About 500 new services were built on the platform in the first 8 months.
+
+{{< case-studies/quote
+ image="/images/case-studies/booking/banner2.jpg"
+ author="BEN TYLER, PRINCIPAL DEVELOPER, B PLATFORM TRACK AT BOOKING.COM"
+>}}
+"As our users learn Kubernetes and become more sophisticated Kubernetes users, they put pressure on us to provide a better, more native Kubernetes experience, which is great. It's a super healthy dynamic."
+{{< /case-studies/quote >}}
+
+{{< case-studies/lead >}}
+Booking.com has a long history with Kubernetes: In 2015, a team at the travel platform prototyped a container platform based on Mesos and Marathon.
+{{< /case-studies/lead >}}
+
+Impressed by what the technology offered, but in need of enterprise features at its scale—the site handles more than 1.5 million room-night reservations a day on average—the team decided to adopt an OpenShift platform.
+
+This platform, which was wrapped in a Heroku-style, high-level CLI interface, "was definitely popular with our product developers," says Ben Tyler, Principal Developer, B Platform Track. "We gave them faster access to infrastructure."
+
+But, he adds, "anytime something went slightly off the rails, developers didn't have any of the knowledge required to support themselves."
+
+And after a year of operating this platform, the infrastructure team found that it had become "a knowledge bottleneck," he says. "Most of the developers who used it did not know it was Kubernetes underneath. An application failure and a platform failure both looked like failures of that Heroku-style tool."
+
+Scaling the necessary support did not seem feasible or sustainable, so the platform team needed a new solution. The understanding of Kubernetes that they had gained operating the OpenShift platform gave them confidence to build a vanilla Kubernetes platform of their own and customize it to suit the company's needs.
+
+{{< case-studies/quote author="EDUARD IACOBOAIA, SENIOR SYSTEM ADMINISTRATOR, B PLATFORM TRACK AT BOOKING.COM" >}}
+"For entering the landscape, OpenShift was definitely very helpful. It shows you what the technology can do, and it makes it easy for you to use it. After we spent some time on it, we realized that we needed to learn Kubernetes better in order to fully use the potential of it. At that point, we made the shift to build our own Kubernetes platform. We definitely benefit in the long term for taking that step and investing the time in gaining that knowledge."
+{{< /case-studies/quote >}}
+
+"For entering the landscape, OpenShift was definitely very helpful," says Eduard Iacoboaia, Senior System Administrator, B Platform Track. "It shows you what the technology can do, and it makes it easy for you to use it. After we spent some time on it, we realized that we needed to learn Kubernetes better in order to fully use the potential of it. At that point, we made the shift to build our own Kubernetes platform. We definitely benefit in the long term for taking that step and investing the time in gaining that knowledge."
+
+Iacoboaia's team had customized a lot of OpenShift tools to make them work at Booking.com, and "those integrations points were kind of fragile," he says. "We spent much more time understanding all the components of Kubernetes, how they work, how they interact with each other." That research led the team to switch from OpenShift's built-in Ansible playbooks to Puppet deployments, which are used for the rest of Booking's infrastructure. The control plane was also moved from inside the cluster onto bare metal, as the company runs tens of thousands of bare-metal servers and a large infrastructure for running applications on bare metal. (Booking runs Kubernetes in multiple clusters in multiple data centers across the various regions where it has compute.) "We decided to keep it as simple as possible and to also use the tools that we know best," says Iacoboaia.
+
+The other big change was that product engineers would have to learn Kubernetes in order to onboard. "This is not a magical platform," says Tyler. "We're not claiming that you can just use it with your eyes closed. Developers need to do some learning, and we're going to do everything we can to make sure they have access to that knowledge." That includes trainings, blog posts, videos, and Udemy courses.
+
+Despite the learning curve, there's been a great uptick in adoption of the new Kubernetes platform. "I think the reason we've been able to strike this bargain successfully is that we're not asking them to learn a proprietary app system," says Tyler. "We're asking them to learn something that's open source, where the knowledge is transferable. They're investing in their own careers by learning Kubernetes."
+
+One clear sign that this strategy has been a success is that in the support channel, when users have questions, other product engineers are jumping in to respond. "I haven't seen that kind of community engagement around a particular platform product internally before," says Tyler. "It helps a lot that it's visibly an ecosystem standard outside of the company, so people feel value in investing in that knowledge and sharing it with others, which is really, really powerful."
+
+{{< case-studies/quote
+ image="/images/case-studies/booking/banner3.jpg"
+ author="BEN TYLER, PRINCIPAL DEVELOPER, B PLATFORM TRACK AT BOOKING.COM"
+>}}
+"We have a tutorial. You follow the tutorial. Your code is running. Then, it's business-logic time. The time to gain access to resources is decreased enormously."
+{{< /case-studies/quote >}}
+
+There's other quantifiable evidence too: Before containers, creating a new service could take a couple of days if the developers understood Puppet, or weeks if they didn't. On the new platform, it takes 10 minutes. "We have a tutorial. You follow the tutorial. Your code is running. Then, it's business-logic time," says Tyler. "The time to gain access to resources is decreased enormously." About 500 new services were built in the first 8 months on the platform, with hundreds of releases per day.
+
+The platform offers different "layers of contracts, so to speak," says Tyler. "At the very base, it's just Kubernetes. If you're a pro Kubernetes user, here's a Kubernetes API, just like you get from GKE or AKS. We're trying to be a provider on that same level. But our whole job inside the company is to be a bigger value add than just vanilla infrastructure, so we provide a set of base images for our main stacks, Perl and Java."
+
+And "as our users learn Kubernetes and become more sophisticated Kubernetes users, they put pressure on us to provide a better more native Kubernetes experience, which is great," says Tyler. "It's a super healthy dynamic."
+
+The platform also includes other CNCF technologies, such as Envoy, Helm, and Prometheus. Most of the critical service traffic for Booking.com is routed through Envoy, and Prometheus is used primarily to monitor infrastructure components. Helm is consumed as a packaging standard. The team also developed and open sourced Shipper, an extension for Kubernetes to add more complex rollout strategies and multi-cluster orchestration.
+
+To be sure, there have been internal discussions about the wisdom of building a Kubernetes platform from the ground up. "This is not really our core competency—Kubernetes and travel, they're kind of far apart, right?" says Tyler. "But we've made a couple of bets on CNCF components that have worked out really well for us. Envoy and Kubernetes, in particular, have been really beneficial to our organization. We were able to customize them, either because we could look at the source code or because they had extension points, and we were able to get value out of them very quickly without having to change any paradigms internally."
diff --git a/content/zh/case-studies/booz-allen/booz-allen-featured-logo.svg b/content/zh/case-studies/booz-allen/booz-allen-featured-logo.svg
new file mode 100644
index 0000000000..3ce58c68f7
--- /dev/null
+++ b/content/zh/case-studies/booz-allen/booz-allen-featured-logo.svg
@@ -0,0 +1 @@
+booz-allen-featured
\ No newline at end of file
diff --git a/content/zh/case-studies/booz-allen/booz-allen_featured_logo.png b/content/zh/case-studies/booz-allen/booz-allen_featured_logo.png
new file mode 100644
index 0000000000..f9bc64ba3b
Binary files /dev/null and b/content/zh/case-studies/booz-allen/booz-allen_featured_logo.png differ
diff --git a/content/zh/case-studies/booz-allen/index.html b/content/zh/case-studies/booz-allen/index.html
new file mode 100644
index 0000000000..7b53dc01ae
--- /dev/null
+++ b/content/zh/case-studies/booz-allen/index.html
@@ -0,0 +1,80 @@
+---
+title: Booz Allen Case Study
+linkTitle: Booz Allen Hamilton
+case_study_styles: true
+cid: caseStudies
+logo: booz-allen-featured-logo.svg
+featured: true
+weight: 2
+quote: >
+ Kubernetes is a great solution for us. It allows us to rapidly iterate on our clients' demands.
+
+new_case_study_styles: true
+heading_background: /images/case-studies/booz-allen/banner4.jpg
+heading_title_text: Booz Allen Hamilton
+use_gradient_overlay: true
+subheading: >
+ How Booz Allen Hamilton Is Helping Modernize the Federal Government with Kubernetes
+case_study_details:
+ - Company: Booz Allen Hamilton
+ - Location: United States
+ - Industry: Government
+---
+
+Challenge
+
+In 2017, Booz Allen Hamilton's Strategic Innovation Group worked with the federal government to relaunch the decade-old recreation.gov website, which provides information and real-time booking for more than 100,000 campsites and facilities on federal lands across the country. The infrastructure needed to be agile, reliable, and scalable—as well as repeatable for the other federal agencies that are among Booz Allen Hamilton's customers.
+
+Solution
+
+"The only way that we thought we could be successful with this problem across all the different agencies is to create a microservice architecture and containers, so that we could be very dynamic and very agile to any given agency for whatever requirements that they may have," says Booz Allen Hamilton Senior Lead Technologist Martin Folkoff. To meet those requirements, Folkoff's team looked to Kubernetes for orchestration.
+
+Impact
+
+With the recreation.gov Kubernetes platform, changes can be implemented in about 30 minutes, compared to the multiple hours or even days legacy government applications require to review the code, get approval, and deploy the fix. Recreation.gov deploys to production on average 10 times a day. With monitoring, security, and logging built in, developers can create and publish new services to production within a week. Additionally, Folkoff says, "supporting the large, existing monoliths in the government is extremely expensive," and migrating into a more modern platform has resulted in perhaps 50% cost savings.
+
+{{< case-studies/quote
+ image="/images/case-studies/booz-allen/banner2.jpg"
+ author="JOSH BOYD, CHIEF TECHNOLOGIST AT BOOZ ALLEN HAMILTON"
+>}}
+"When there's a regulatory change in an agency, or a legislative change in Congress, or an executive order that changes the way you do business, how do I deploy that and get that out to the people who need it rapidly? At the end of the day, that's the problem we're trying to help the government solve with tools like Kubernetes."
+{{< /case-studies/quote >}}
+
+{{< case-studies/lead >}}
+The White House launched an IT modernization effort in 2017, and in addition to improving cybersecurity and shifting to the public cloud and a consolidated IT model, "the federal government is looking to provide a better experience to citizens in every way that we interact with the government through every channel," says Booz Allen Hamilton Senior Lead Technologist Martin Folkoff.
+{{< /case-studies/lead >}}
+
+To that end, Folkoff's Strategic Innovation Group worked with the federal government last year to relaunch the decade-old recreation.gov website, which provides information and real-time booking for more than 100,000 campsites and facilities on federal lands across the country.
+
+The infrastructure needed to be agile, reliable, and scalable—as well as repeatable for the other federal agencies that are among Booz Allen Hamilton's customers. "The only way that we thought we could be successful with this problem across all the different agencies is to create a microservice architecture, so that we could be very dynamic and very agile to any given agency for whatever requirements that they may have," says Folkoff.
+
+{{< case-studies/quote author="MARTIN FOLKOFF, SENIOR LEAD TECHNOLOGIST AT BOOZ ALLEN HAMILTON" >}}
+"With CNCF, there's a lot of focus on scale, and so there's a lot of comfort knowing that as the project grows, we're going to be comfortable using that tool set."
+{{< /case-studies/quote >}}
+
+Booz Allen Hamilton, which has provided consulting services to the federal government for more than a century, introduced microservices, Docker containers, and AWS to its federal agency clients about five years ago. The next logical step was Kubernetes for orchestration. "Knowing that we had to be really agile and really reliable and scalable, we felt that the only technology that we know that can enable those kinds of things are the ones the CNCF provides," Folkoff says. "One of the things that is always important for the government is to make sure that the things that we build really endure. Using technology that is supported across multiple different companies and has strong governance gives people a lot of confidence."
+
+Kubernetes was also aligned with the government's open source and IT modernization initiatives, so there has been an uptick in its usage at federal agencies over the past two years. "Now that Kubernetes is becoming offered as a service by the cloud providers like AWS and Microsoft, we're starting to see even more interest," says Chief Technologist Josh Boyd. Adds Folkoff: "With CNCF, there's a lot of focus on scale, and so there's a lot of comfort knowing that as the project grows, we're going to be comfortable using that tool set."
+
+The greenfield recreation.gov project allowed the team to build a new Kubernetes-enabled site running on AWS, and the migration lasted only a week, when the old site didn't take bookings. "For the actual transition, we just swapped a DNS server, and it only took about 35 seconds between the old site being down and our new site being up and available," Folkoff adds.
+
+{{< case-studies/quote
+ image="/images/case-studies/booz-allen/banner1.png"
+ author="MARTIN FOLKOFF, SENIOR LEAD TECHNOLOGIST AT BOOZ ALLEN HAMILTON"
+>}}
+"Kubernetes alone enables a dramatic reduction in cost as resources are prioritized to the day's event"
+{{< /case-studies/quote >}}
+
+In addition to its work with the Department of Interior for recreation.gov, Booz Allen Hamilton has brought Kubernetes to various Defense, Intelligence, and civilian agencies. Says Boyd: "When there's a regulatory change in an agency, or a legislative change in Congress, or an executive order that changes the way you do business, how do I deploy that and get that out to the people who need it rapidly? At the end of the day, that's the problem we're trying to help the government solve with tools like Kubernetes."
+
+For recreation.gov, the impact was clear and immediate. With the Kubernetes platform, Folkoff says, "if a new requirement for a permit comes out, we have the ability to design and develop and implement that completely independently of reserving a campsite. It provides a much better experience to users." Today, changes can be implemented in about 30 minutes, compared to the multiple hours or even days legacy government applications require to review the code, get approval, and deploy the fix. Recreation.gov deploys to production on average 10 times a day.
+
+Developer velocity has been improved. "When I want to do monitoring or security or logging, I don't have to do anything to my services or my application to enable that anymore," says Boyd. "I get all of this magic just by being on the Kubernetes platform." With all of those things built in, developers can create and publish new services to production within one week.
+
+Additionally, Folkoff says, "supporting the large, existing monoliths in the government is extremely expensive," and migrating into a more modern platform has resulted in perhaps 50% cost savings. "Kubernetes alone enables a dramatic reduction in cost as resources are prioritized to the day's event," he says. "For example, during a popular campsite release, camping-related services are scaled out while permit services are scaled down."
+
+So far, "Kubernetes is a great solution for us," says Folkoff. "It allows us to rapidly iterate on our clients' demands." Looking ahead, the team sees further adoption of the Kubernetes platform across federal agencies. Says Boyd: "You get the ability for the rapid delivery of business value for your customers. You now have observability into everything that you're doing. You don't have these onesies and twosies unicorn servers anymore. Now everything that you deploy is deployed in the same way, it's all instrumented the same way, and it's all built and deployed the same way through our CI/CD processes."
+
+They also see a push toward re-platforming. "There's still a lot of legacy workloads out there," says Boyd. "We've got the new challenges of greenfield development and integration with legacy systems, but also that brown field of 'Hey, how do I take this legacy monolith and get it onto a platform where now it's instrumented with all the magic of the Kubernetes platform without having to do a whole lot to my application?' I think re-platforming is a pretty big use case for the government right now."
+
+And given the success that they've had with Kubernetes so far, Boyd says, "I think at this point that technology is becoming pretty easy to sell." Adds Folkoff: "People are really excited about being able to deploy, scale, be reliable, and do cheaper maintenance of all of this."
diff --git a/content/zh/case-studies/denso/denso_featured_logo.svg b/content/zh/case-studies/denso/denso_featured_logo.svg
new file mode 100644
index 0000000000..e2b26b2c8c
--- /dev/null
+++ b/content/zh/case-studies/denso/denso_featured_logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/content/zh/case-studies/denso/index.html b/content/zh/case-studies/denso/index.html
new file mode 100644
index 0000000000..31fb1279b9
--- /dev/null
+++ b/content/zh/case-studies/denso/index.html
@@ -0,0 +1,82 @@
+---
+title: Denso Case Study
+linkTitle: Denso
+case_study_styles: true
+cid: caseStudies
+logo: denso_featured_logo.svg
+featured: true
+weight: 4
+quote: >
+ We got Kubernetes experts involved on our team, and it dramatically accelerated development speed.
+
+new_case_study_styles: true
+heading_background: /images/case-studies/denso/banner2.jpg
+heading_title_text: Denso
+use_gradient_overlay: true
+subheading: >
+ How DENSO Is Fueling Development on the Vehicle Edge with Kubernetes
+case_study_details:
+ - Company: Denso
+ - Location: Japan
+ - Industry: Automotive, Edge
+---
+
+Challenge
+
+DENSO Corporation is one of the biggest automotive components suppliers in the world. With the advent of connected cars, the company launched a Digital Innovation Department to expand into software, working on vehicle edge and vehicle cloud products. But there were several technical challenges to creating an integrated vehicle edge/cloud platform: "the amount of computing resources, the occasional lack of mobile signal, and an enormous number of distributed vehicles," says R&D Product Manager Seiichi Koizumi.
+
+Solution
+
+Koizumi's team realized that because mobility services evolve every day, they needed the flexibility of the cloud native ecosystem for their platform. After considering other orchestrators, DENSO went with Kubernetes for orchestration and added Prometheus, Fluentd, Envoy, Istio, and Helm to the platform. Today, DENSO is using a vehicle edge computer, a private Kubernetes cloud, and managed Kubernetes (GKE, EKS, AKS).
+
+Impact
+
+Critical layer features can take 2-3 years to implement in the traditional, waterfall model of development at DENSO. With the Kubernetes platform and agile methods, there's a 2-month development cycle for non-critical software. Now, ten new applications are released a year, and a new prototype is introduced every week. "By utilizing Kubernetes managed services, such as GKE/EKS/AKS, we can unify the environment and simplify our maintenance operation," says Koizumi.
+
+{{< case-studies/quote
+ image="/images/case-studies/denso/banner1.png"
+ author="SEIICHI KOIZUMI, R&D PRODUCT MANAGER, DIGITAL INNOVATION DEPARTMENT AT DENSO"
+>}}
+"Another disruptive innovation is coming, so to survive in this situation, we need to change our culture."
+{{< /case-studies/quote >}}
+
+{{< case-studies/lead >}}
+Spun off from Toyota in 1949, DENSO Corporation is one of the top automotive suppliers in the world today, with consolidated net revenue of $48.3 billion.
+{{< /case-studies/lead >}}
+
+The company's mission is "contributing to a better world by creating value together with a vision for the future"—and part of that vision in recent years has been development on the vehicle edge and vehicle cloud.
+
+With the advent of connected cars, DENSO established a Digital Innovation Department to expand its business beyond the critical layer of the engine, braking systems, and other automotive parts into the non-critical analytics and entertainment layer. Comparing connected cars to smartphones, R&D Product Manager Seiichi Koizumi says DENSO wants the ability to quickly and easily develop and install apps for the "blank slate" of the car, and iterate them based on the driver's preferences. Thus "we need a flexible application platform," he says.
+
+But working on vehicle edge and vehicle cloud products meant there were several technical challenges: "the amount of computing resources, the occasional lack of mobile signal, and an enormous number of distributed vehicles," says Koizumi. "We are tackling these challenges to create an integrated vehicle edge/cloud platform."
+
+{{< case-studies/quote author="SEIICHI KOIZUMI, R&D PRODUCT MANAGER, DIGITAL INNOVATION DEPARTMENT AT DENSO" >}}
+"We got Kubernetes experts involved on our team, and it dramatically accelerated development speed."
+{{< /case-studies/quote >}}
+
+Koizumi's team realized that because mobility services evolve every day, they needed the flexibility of the cloud native ecosystem for their platform. As they evaluated technologies, they were led by these criteria: Because their service-enabler business needed to support multiple cloud and on-premise environments, the solution needed to be cloud agnostic, with no vendor lock-in and open governance. It also had to support an edge-cloud integrated environment.
+
+After considering other orchestrators, DENSO went with Kubernetes for orchestration and added Prometheus, Fluentd, Envoy, Istio, and Helm to the platform. During implementation, the team used "design thinking to clarify use cases and their value proposition," says Koizumi. Next, an agile development team worked on a POC, then an MVP, in DevOps style. "Even in the development phase, we are keeping a channel to end users," he adds.
+
+One lesson learned during this process was the value of bringing in experts. "We tried to learn Kubernetes and cloud native technologies from scratch, but it took more time than expected," says Koizumi. "We got Kubernetes experts involved on our team, and it dramatically accelerated development speed."
+
+{{< case-studies/quote
+ image="/images/case-studies/denso/banner4.jpg"
+ author="SEIICHI KOIZUMI, R&D PRODUCT MANAGER, DIGITAL INNOVATION DEPARTMENT AT DENSO"
+>}}
+"By utilizing Kubernetes managed services, such as GKE/EKS/AKS, we can unify the environment and simplify our maintenance operation."
+{{< /case-studies/quote >}}
+
+Today, DENSO is using a vehicle edge computer, a private Kubernetes cloud, and managed Kubernetes on GKE, EKS, and AKS. "We are developing a vehicle edge/cloud integrated platform based on a microservice and service mesh architecture," says Koizumi. "We extend cloud into multiple vehicle edges and manage it as a unified platform."
+
+Cloud native has enabled DENSO to deliver applications via its new dash cam, which has a secure connection that collects data to the cloud. "It's like a smartphone," he says. "We are installing new applications and getting the data through the cloud, and we can keep updating new applications all through the dash cam."
+
+The unified cloud native platform, combined with agile development, has had a positive impact on productivity. Critical layer features—those involving engines or braking systems, for example—can take 2-3 years to implement at DENSO, because of the time needed to test safety, but also because of the traditional, waterfall model of development. With the Kubernetes platform and agile methods, there's a 2-month development cycle for non-critical software. Now, ten new applications are released a year, and with the department's scrum-style development, a new prototype is introduced every week.
+
+Application portability has also led to greater developer efficiency. "There's no need to care about differences in the multi-cloud platform anymore," says Koizumi. Now, "we are also trying to have the same portability between vehicle edge and cloud platform."
+
+Another improvement: Automotive Tier-1 suppliers like DENSO always have multiple Tier-2 suppliers. "To provide automotive-grade high-availability services, we tried to do the same thing on a multi-cloud platform," says Koizumi. Before Kubernetes, maintaining two different systems simultaneously was difficult. "By utilizing Kubernetes managed services, such as GKE/EKS/AKS, we can unify the environment and simplify our maintenance operation," he says.
+
+Cloud native has also profoundly changed the culture at DENSO. The Digital Innovation Department is known as "Noah's Ark," and it has grown from 2 members to 70—with plans to more than double in the next year. The way they operate is completely different from the traditional Japanese automotive culture. But just as the company embraced change brought by hybrid cars in the past decade, Koizumi says, they're doing it again now, as technology companies have moved into the connected car space. "Another disruptive innovation is coming," he says, "so to survive in this situation, we need to change our culture."
+
+Looking ahead, Koizumi and his team are expecting serverless and zero-trust security architecture to be important enhancements of Kubernetes. They are glad DENSO has come along for the ride. "Mobility service businesses require agility and flexibility," he says. "DENSO is trying to bring cloud native flexibility into the vehicle infrastructure."
diff --git a/content/zh/case-studies/ibm/ibm_featured_logo.svg b/content/zh/case-studies/ibm/ibm_featured_logo.svg
index 577d8e97d9..f79fd7847b 100644
--- a/content/zh/case-studies/ibm/ibm_featured_logo.svg
+++ b/content/zh/case-studies/ibm/ibm_featured_logo.svg
@@ -1 +1 @@
-ibm_featured_logo
\ No newline at end of file
+ibm_featured_logo
\ No newline at end of file
diff --git a/content/zh/case-studies/ing/index.html b/content/zh/case-studies/ing/index.html
new file mode 100644
index 0000000000..037ba9775d
--- /dev/null
+++ b/content/zh/case-studies/ing/index.html
@@ -0,0 +1,78 @@
+---
+title: ING Case Study
+linkTitle: ING
+case_study_styles: true
+cid: caseStudies
+weight: 50
+featured: true
+quote: >
+ The big cloud native promise to our business is the ability to go from idea to production within 48 hours. We are some years away from this, but that's quite feasible to us.
+
+new_case_study_styles: true
+heading_background: /images/case-studies/ing/banner1.jpg
+heading_title_logo: /images/ing_logo.png
+subheading: >
+ Driving Banking Innovation with Cloud Native
+case_study_details:
+ - Company: ING
+ - Location: Amsterdam, Netherlands
+ - Industry: Finance
+---
+
+Challenge
+
+After undergoing an agile transformation, ING realized it needed a standardized platform to support the work their developers were doing. "Our DevOps teams got empowered to be autonomous," says Infrastructure Architect Thijs Ebbers. "It has benefits; you get all kinds of ideas. But a lot of teams are going to devise the same wheel. Teams started tinkering with Docker , Docker Swarm, Kubernetes , Mesos . Well, it's not really useful for a company to have one hundred wheels, instead of one good wheel.
+
+Solution
+
+Using Kubernetes for container orchestration and Docker for containerization, the ING team began building an internal public cloud for its CI/CD pipeline and green-field applications. The pipeline, which has been built on Mesos Marathon, will be migrated onto Kubernetes. The bank-account management app Yolt in the U.K. (and soon France and Italy) market already is live hosted on a Kubernetes framework. At least two greenfield projects currently on the Kubernetes framework will be going into production later this year. By the end of 2018, the company plans to have converted a number of APIs used in the banking customer experience to cloud native APIs and host these on the Kubernetes-based platform.
+
+Impact
+
+"Cloud native technologies are helping our speed, from getting an application to test to acceptance to production," says Infrastructure Architect Onno Van der Voort. "If you walk around ING now, you see all these DevOps teams, doing stand-ups, demoing. They try to get new functionality out there really fast. We held a hackathon for one of our existing components and basically converted it to cloud native within 2.5 days, though of course the tail takes more time before code is fully production ready."
+
+{{< case-studies/quote author="Thijs Ebbers, Infrastructure Architect, ING">}}
+"The big cloud native promise to our business is the ability to go from idea to production within 48 hours. We are some years away from this, but that's quite feasible to us."
+{{< /case-studies/quote >}}
+
+{{< case-studies/lead >}}
+ING has long embraced innovation in banking, launching the internet-based ING Direct in 1997.
+{{< /case-studies/lead >}}
+
+In that same spirit, the company underwent an agile transformation a few years ago. "Our DevOps teams got empowered to be autonomous," says Infrastructure Architect Thijs Ebbers. "It has benefits; you get all kinds of ideas. But a lot of teams are going to devise the same wheel. Teams started tinkering with Docker, Docker Swarm, Kubernetes, Mesos. Well, it's not really useful for a company to have one hundred wheels, instead of one good wheel."
+
+Looking to standardize the deployment process within the company's strict security guidelines, the team looked at several solutions and found that in the past year, "Kubernetes won the container management framework wars," says Ebbers. "We decided to standardize ING on a Kubernetes framework." Everything is run on premise due to banking regulations, he adds, but "we will be building an internal public cloud. We are trying to get on par with what public clouds are doing. That's one of the reasons we got Kubernetes."
+
+They also embraced Docker to address a major pain point in ING's CI/CD pipeline. Before containerization, "Every development team had to order a VM, and it was quite a heavy delivery model for them," says Infrastructure Architect Onno Van der Voort. "Another use case for containerization is when the application travels through the pipeline, they fire up Docker containers to do test work against the applications and after they've done the work, the containers get killed again."
+
+{{< case-studies/quote
+ image="/images/case-studies/ing/banner3.jpg"
+ author="Thijs Ebbers, Infrastructure Architect, ING"
+>}}
+"We decided to standardize ING on a Kubernetes framework." Everything is run on premise due to banking regulations, he adds, but "we will be building an internal public cloud. We are trying to get on par with what public clouds are doing. That's one of the reasons we got Kubernetes."
+{{< /case-studies/quote >}}
+
+Because of industry regulations, applications are only allowed to go through the pipeline, where compliance is enforced, rather than be deployed directly into a container. "We have to run the complete platform of services we need, many routing from different places," says Van der Voort. "We need this Kubernetes framework for deploying the containers, with all those components, monitoring, logging. It's complex." For that reason, ING has chosen to start on the OpenShift Origin Kubernetes distribution.
+
+Already, "cloud native technologies are helping our speed, from getting an application to test to acceptance to production," says Van der Voort. "If you walk around ING now, you see all these DevOps teams, doing stand-ups, demoing. They try to get new functionality out there really fast. We held a hackathon for one of our existing components and basically converted it to cloud native within 2.5 days, though of course the tail takes more time before code is fully production ready."
+
+The pipeline, which has been built on Mesos Marathon, will be migrated onto Kubernetes. Some legacy applications are also being rewritten as cloud native in order to run on the framework. At least two smaller greenfield projects built on Kubernetes will go into production this year. By the end of 2018, the company plans to have converted a number of APIs used in the banking customer experience to cloud native APIs and host these on the Kubernetes-based platform.
+
+{{< case-studies/quote
+ image="/images/case-studies/ing/banner4.jpg"
+ author="Onno Van der Voort, Infrastructure Architect, ING"
+>}}
+"We have to run the complete platform of services we need, many routing from different places. We need this Kubernetes framework for deploying the containers, with all those components, monitoring, logging. It's complex."
+{{< /case-studies/quote >}}
+
+The team, however, doesn't see the bank's back-end systems going onto the Kubernetes platform. "Our philosophy is it only makes sense to move things to cloud if they are cloud native," says Van der Voort. "If you have traditional architecture, build traditional patterns, it doesn't hold any value to go to the cloud." Adds Cloud Platform Architect Alfonso Fernandez-Barandiaran: "ING has a strategy about where we will go, in order to improve our agility. So it's not about how cool this technology is, it's about finding the right technology and the right approach."
+
+The Kubernetes framework will be hosting some greenfield projects that are high priority for ING: applications the company is developing in response to PSD2 , the European Commission directive requiring more innovative online and mobile payments that went into effect at the beginning of 2018. For example, a bank-account management app called Yolt , serving the U.K. market (and soon France and Italy), was built on a Kubernetes platform and has gone into production. ING is also developing blockchain-enabled applications that will live on the Kubernetes platform. "We've been contacted by a lot of development teams that have ideas with what they want to do with containers," says Ebbers.
+
+{{< case-studies/quote author="Alfonso Fernandez-Barandiaran, Cloud Platform Architect, ING" >}}
+Even with the particular requirements that come in banking, ING has managed to take a lead in technology and innovation. "Every time we have constraints, we look for maybe a better way that we can use this technology."
+{{< /case-studies/quote >}}
+
+Even with the particular requirements that come in banking, ING has managed to take a lead in technology and innovation. "Every time we have constraints, we look for maybe a better way that we can use this technology," says Fernandez-Barandiaran.
+
+The results, after all, are worth the effort. "The big cloud native promise to our business is the ability to go from idea to production within 48 hours," says Ebbers. "That would require all these projects to be mature. We are some years away from this, but that's quite feasible to us."
diff --git a/content/zh/case-studies/ing/ing_featured_logo.svg b/content/zh/case-studies/ing/ing_featured_logo.svg
new file mode 100644
index 0000000000..5a2df497c7
--- /dev/null
+++ b/content/zh/case-studies/ing/ing_featured_logo.svg
@@ -0,0 +1 @@
+kubernetes.io-logos
\ No newline at end of file
diff --git a/content/zh/case-studies/jd-com/index.html b/content/zh/case-studies/jd-com/index.html
new file mode 100644
index 0000000000..ae3360216b
--- /dev/null
+++ b/content/zh/case-studies/jd-com/index.html
@@ -0,0 +1,79 @@
+---
+title: JD.com Case Study
+linkTitle: jd-com
+case_study_styles: true
+cid: caseStudies
+featured: false
+
+new_case_study_styles: true
+heading_background: /images/case-studies/jdcom/banner1.jpg
+heading_title_logo: /images/jdcom_logo.png
+subheading: >
+ JD.com: How JD.com Pioneered Kubernetes for E-Commerce at Hyperscale
+case_study_details:
+ - Company: JD.com
+ - Location: Beijing, China
+ - Industry: eCommerce
+---
+
+Challenge
+
+With more than 300 million active users and total 2017 revenue of more than $55 billion, JD.com is China's largest retailer, and its operations are the epitome of hyperscale. For example, there are more than a trillion images in JD.com's product databases—with 100 million being added daily—and this enormous amount of data needs to be instantly accessible. In 2014, JD.com moved its applications to containers running on bare metal machines using OpenStack and Docker to "speed up the delivery of our computing resources and make the operations much simpler," says Haifeng Liu, JD.com's Chief Architect. But by the end of 2015, with tens of thousands of nodes running in multiple data centers, "we encountered a lot of problems because our platform was not strong enough, and we suffered from bottlenecks and scalability issues," says Liu. "We needed infrastructure for the next five years of development, now."
+
+Solution
+
+JD.com turned to Kubernetes to accommodate its clusters. At the beginning of 2016, the company began to transition from OpenStack to Kubernetes, and today, JD.com runs the world's largest Kubernetes cluster. "Kubernetes has provided a strong foundation on top of which we have customized the solution to suit our needs as China's largest retailer."
+
+Impact
+
+"We have greater data center efficiency, better managed resources, and smarter deployment with the Kubernetes platform," says Liu. Deployment time went from several hours to tens of seconds. Efficiency has improved by 20-30%, measured in IT costs. With the further optimizations the team is working on, Liu believes there is the potential to save hundreds of millions of dollars a year. But perhaps the best indication of success was the annual Singles Day shopping event, which ran on the Kubernetes platform for the first time in 2018. Over 11 days, transaction volume on JD.com was $23 billion, and "our e-commerce platforms did great," says Liu. "Infrastructure led the way to prep for 11.11. We took the approach of predicting volume, emulating the behavior of customers to prepare beforehand, and drilled for malfunctions. Because of Kubernetes's scalability, we were able to handle an extremely high level of demand."
+
+{{< case-studies/quote author="HAIFENG LIU, CHIEF ARCHITECT, JD.com" >}}
+"Kubernetes helped us reduce the complexity of operations to make distributed systems stable and scalable. Most importantly, we can leverage Kubernetes for scheduling resources to reduce hardware costs. That's the big win."
+{{< /case-studies/quote >}}
+
+{{< case-studies/lead >}}
+With more than 300 million active users and $55.7 billion in annual revenues last year, JD.com is China's largest retailer, and its operations are the epitome of hyperscale.
+{{< /case-studies/lead >}}
+
+For example, there are more than a trillion images in JD.com's product databases for customers, with 100 million being added daily. And this enormous amount of data needs to be instantly accessible to enable a smooth online customer experience.
+
+In 2014, JD.com moved its applications to containers running on bare metal machines using OpenStack and Docker to "speed up the delivery of our computing resources and make the operations much simpler," says Haifeng Liu, JD.com's Chief Architect. But by the end of 2015, with hundreds of thousands of nodes in multiple data centers, "we encountered a lot of problems because our platform was not strong enough, and we suffered from bottlenecks and scalability issues," Liu adds. "We needed infrastructure for the next five years of development, now."
+
+After considering a number of orchestration technologies, JD.com decided to adopt Kubernetes to accommodate its ever-growing clusters. "The main reason is because Kubernetes can give us more efficient, scalable and much simpler application deployments, plus we can leverage it to do flexible platform scheduling," says Liu.
+
+{{< case-studies/quote
+ image="/images/case-studies/jdcom/banner3.jpg"
+ author="HAIFENG LIU, CHIEF ARCHITECT, JD.com"
+>}}
+"We customized Kubernetes and built a modern system on top of it. This entire ecosystem of Kubernetes plus our own optimizations have helped us save costs and time."
+{{< /case-studies/quote >}}
+
+The fact that Kubernetes is based on Google's Borg also gave the company confidence. The team liked that Kubernetes has a clear and simple architecture, and that it's developed mostly in Go, which is a popular language within JD.com. Though he felt that at the time Kubernetes "was not mature enough," Liu says, "we adopted it anyway."
+
+The team spent a year developing the new container engine platform based on Kubernetes, and at the end of 2016, began promoting it within the company. "We wanted the cluster to be the default way for creating services, so scalability is easier," says Liu. "We talked to developers, interest grew, and we solved problems together." Some of these problems included networking performance and etcd scalability. "But during the past two years, Kubernetes has become more mature and very stable," he adds.
+
+Today, the company runs the world's largest Kubernetes cluster. "We customized Kubernetes and built a modern system on top of it," says Liu. "This entire ecosystem of Kubernetes plus our own optimizations have helped us save costs and time. We have greater data center efficiency, better managed resources, and smarter deployment with the Kubernetes platform."
+
+{{< case-studies/quote
+ image="/images/case-studies/jdcom/banner4.jpg"
+ author="HAIFENG LIU, CHIEF ARCHITECT, JD.com"
+>}}
+"My advice is first you need to combine this technology with your own businesses, and the second is you need clear goals. You cannot just use the technology because others are using it. You need to consider your own objectives."
+{{< /case-studies/quote >}}
+
+The results are clear: Deployment time went from several hours to tens of seconds. Efficiency has improved by 20-30%, measured in IT costs. But perhaps the best indication of success was the annual Singles Day shopping event, which ran on the Kubernetes platform for the first time in 2018. Over 11 days, transaction volume on JD.com was $23 billion, and "our e-commerce platforms did great," says Liu. "Infrastructure led the way to prep for 11.11. We took the approach of predicting volume, emulating the behavior of customers to prepare beforehand, and drilled for malfunctions. Because of Kubernetes's scalability, we were able to handle an extremely high level of demand."
+
+JD.com is now in its second stage with Kubernetes: The platform is already stable, scalable, and flexible, so the focus is on how to run things much more efficiently to further reduce costs. With the optimizations the team is working on with resource management, Liu believes there is the potential to save hundreds of millions of dollars a year.
+
+"We run Kubernetes and container clusters on roughly tens of thousands of physical bare metal nodes," he says. "Using Kubernetes and leveraging our own machine learning pipeline to predict how many resources we need for each application we use, and our own intelligent scaling algorithm, we can improve our resource usage. If we boost the resource usage, for example, by several percent, that means we can reduce huge hardware costs. Then we don't need that many servers to get that same amount of workload. That can save us a lot of resources."
+
+{{< case-studies/quote author="HAIFENG LIU, CHIEF ARCHITECT, JD.com" >}}
+"We can share our successful experience with the community, and we also receive good feedback from others. So it's mutually beneficial."
+{{< /case-studies/quote >}}
+
+JD.com, which won CNCF's 2018 End User Award, is also using Helm , CNI , Harbor , and Vitess on its platform. JD.com developers have made considerable contributions to Vitess, the CNCF project for scalable MySQL cluster management, and the company hopes to donate its own project to CNCF in the near future. Community participation is a priority for JD.com. "We have a good partnership with this community," says Liu. "We can share our successful experience with the community, and we also receive good feedback from others. So it's mutually beneficial."
+
+To that end, Liu offers this advice for other companies considering adopting cloud native technology. "First you need to combine this technology with your own businesses, and the second is you need clear goals," he says. "You cannot just use the technology because others are using it. You need to consider your own objectives."
+
+For JD.com's objectives, these cloud native technologies have been an ideal fit with the company's own homegrown innovation. "Kubernetes helped us reduce the complexity of operations to make distributed systems stable and scalable," says Liu. "Most importantly, we can leverage Kubernetes for scheduling resources to reduce hardware costs. That's the big win."
diff --git a/content/zh/case-studies/jd-com/jd.com_featured_logo.svg b/content/zh/case-studies/jd-com/jd.com_featured_logo.svg
new file mode 100644
index 0000000000..d13de0240a
--- /dev/null
+++ b/content/zh/case-studies/jd-com/jd.com_featured_logo.svg
@@ -0,0 +1 @@
+kubernetes.io-logos
\ No newline at end of file
diff --git a/content/zh/case-studies/squarespace/squarespace_featured_logo.svg b/content/zh/case-studies/squarespace/squarespace_featured_logo.svg
new file mode 100644
index 0000000000..a69d7ea5c8
--- /dev/null
+++ b/content/zh/case-studies/squarespace/squarespace_featured_logo.svg
@@ -0,0 +1 @@
+kubernetes.io-logos2
\ No newline at end of file
diff --git a/content/zh/case-studies/wikimedia/index.html b/content/zh/case-studies/wikimedia/index.html
index ab6452bfc3..8800c5f19e 100644
--- a/content/zh/case-studies/wikimedia/index.html
+++ b/content/zh/case-studies/wikimedia/index.html
@@ -1,118 +1,148 @@
---
title: 案例研究:Wikimedia
-
-class: gridPage
+case_study_styles: true
cid: caseStudies
+
+new_case_study_styles: true
+heading_title_text: Wikimedia
+use_gradient_overlay: true
+subheading: >
+ 利用 Kubernetes 构建工具提升世界的维基
+case_study_details:
+ - 公司: Wikimedia
+ - 地点: 加州旧金山
---
+
-
-
-
-
-
利用 Kubernetes 构建工具提升世界的维基
-
-
-非营利的 Wikimedia 基金会运营着一些世界上最大的合作编辑参考项目,包括 Wikipedia。为了帮助用户维护和使用 wiki,它运行 Wikimedia 工具实验室,这是一个托管环境,为社区开发人员工作的工具和机器人,以帮助编辑和其他志愿者做他们的工作,包括减少破坏。Wikimedia 工具实验室周围的社区在近10年前开始形成。
-
-
-
-
-
-“ Wikimedia 工具实验室对于确保世界各地的 wiki 尽可能工作至关重要。因为它有机地生长了近10年,它已成为一个极具挑战性的环境,难以维持。它就像一个大的泥球,你真的看不透它。借助 Kubernetes,可以简化环境,使开发人员能够更轻松地构建使 wiki 运行得更好的工具。”
-
-
-
— Yuvi Panda, Wikimedia 基金会和 Wikimedia 工具实验室的运维工程师
-
-
-
-
+
+非营利的 Wikimedia 基金会运营着一些世界上最大的合作编辑参考项目,包括 Wikipedia。为了帮助用户维护和使用 wiki,它运行 Wikimedia 工具实验室,这是一个托管环境,为社区开发人员工作的工具和机器人,以帮助编辑和其他志愿者做他们的工作,包括减少破坏。Wikimedia 工具实验室周围的社区在近 10 年前开始形成。
-
-
-
-
-
挑战:
-
-
- 简化复杂、难以管理的基础架构
-
- 允许开发人员使用现有技术继续编写工具和机器人
-
-
-
-
-
为什么要使用 Kubernetes
-
-
- Wikimedia 工具实验室之所以选择 Kubernetes,是因为它可以模仿现有的工作流程,同时降低复杂性。
-
-
-
-
-
解决方案:
-
-
- 将旧系统和复杂的基础设施迁移到库贝内特斯
-
-
-
-
-
结果:
-
-
- 占 Web 流量 40% 以上的 Web 工具的 20% 现在都在 Kubernetes 上运行
-
- 一个 25 节点集群可跟上每个新 Kubernetes 版本
-
- 由于 Kubernetes 数千行旧代码被删除
-
-
-
-
-
+
- 使用 Kubernetes 提供维护 wiki 的工具
-
-
- Wikimedia 工具实验室由四名半付费员工和两名志愿者管理。基础架构无法使开发人员轻松或直观地构建机器人和其他工具,使 wiki 更易于工作。Yuvi说,“它非常混乱。我们有很多的 Perl 和 Bash 缠绕在上面。一切都是超级脆弱。”
-
-
-
- 为了解决这个问题,Wikimedia 工具实验室将其部分基础设施迁移到了 Kubernetes,为最终迁移整个系统做准备。Yuvi 说,Kubernetes 大大简化了维护。目标是允许创建机器人和其他工具的开发人员使用他们想要的任何开发方法,但使 Wikimedia 工具实验室更容易维护托管和共享它们所需的基础结构。
-
-
-
- “借助 Kubernetes,我能够删除大量我们定制的代码,这使得所有内容更易于维护。我们的用户代码也以比以前更稳定的方式运行,” Yuvi 说。
-
-
-
-
+
+
+
+"Wikimedia Tool Labs is vital for making sure wikis all around the world work as well as they possibly can. Because it's grown organically for almost 10 years, it has become an extremely challenging environment and difficult to maintain. It's like a big ball of mud — you really can't see through it. With Kubernetes, we're simplifying the environment and making it easier for developers to build the tools that make wikis run better."
+{{< /case-studies/quote >}}
+-->
+{{< case-studies/quote author="Yuvi Panda, Wikimedia 基金会和 Wikimedia 工具实验室的运维工程师">}}
-
-
-
-
-
简化基础架构让 wiki 更好地运行
-
-
- Wikimedia 工具实验室在最初的 Kubernetes 部署中取得了巨大成功。旧代码正在被简化和消除,使开发人员不必改变他们编写工具和机器人的方式,这些工具和机器人的运行方式比过去更稳定。付费员工和志愿者能够更好地解决问题。
-
-
-
- 将来,随着更完整的迁移到 Kubernetes,Wikimedia 工具实验室希望使托管和维护帮助在世界各地运行 wiki 的机器人和工具变得更加容易。该工具实验室已经托管了来自 800 名志愿者的大约 1300 个工具和机器人,每天提交更多工具和机器人。占 Web 流量 60% 以上的 20% 的工具实验室 Web 工具现在运行在 Kubernetes 上。该工具实验室有一个 25 节点群集,可跟上每个新的 Kubernetes 版本。许多现有的 Web 工具正在迁移到 Kubernetes。
-
-
-
- “我们的目标是确保世界各地的人们能够尽可能轻松地分享知识。Kubernetes 通过让世界各地的 wiki 更容易拥有蓬勃发展所需的工具,从而帮助到您,” Yuvi 说。
-
-
-
-
+
+
+
+“Wikimedia 工具实验室对于确保世界各地的 wiki 尽可能正常运行至关重要。因为它有机地生长了近 10 年,所以它已成为一个极具挑战性且难以维护的环境。它就像一个大的泥球,你真的看不透它。借助 Kubernetes,我们正在简化环境并让开发人员更容易构建出使 wiki 更好运行的工具。”
+{{< /case-studies/quote >}}
+
+
+挑战
+
+
+
+ 简化复杂、难以管理的基础架构
+ 允许开发人员使用现有技术继续编写工具和机器人
+
+
+
+为什么要使用 Kubernetes
+
+
+
+ Wikimedia 工具实验室之所以选择 Kubernetes,是因为它可以模仿现有的工作流程,同时降低复杂性。
+
+
+
+解决方案
+
+
+
+ 将旧系统和复杂的基础设施迁移到 Kubernetes
+
+
+
+结果
+
+
+
+ 现在占 Web 流量 40% 以上的 20% Web 工具都在 Kubernetes 上运行
+ 一个 25 节点集群可跟上每个新 Kubernetes 版本
+ 多亏了 Kubernetes,数千行旧代码可被删除
+
+
+
+使用 Kubernetes 提供维护 wiki 的工具
+
+
+Wikimedia 工具实验室由四个半带薪员工和两名志愿者管理。基础架构无法使开发人员轻松或直观地构建机器人和其他工具,使 wiki 更易于工作。Yuvi 说,“它非常混乱,我们有很多的 Perl 和 Bash 缠绕在上面,一切都是超级脆弱。”
+
+
+为了解决这个问题,Wikimedia 工具实验室将其部分基础设施迁移到了 Kubernetes,为最终迁移整个系统做准备。Yuvi 说,Kubernetes 大大简化了维护。目标是允许创建机器人和其他工具的开发人员使用他们想要的任何开发方法,但使 Wikimedia 工具实验室更容易维护托管和共享它们所需的基础结构。
+
+
+Yuvi 说:“借助 Kubernetes,我能够删除大量我们定制的代码,这使得所有内容更易于维护,我们的用户代码也以比以前更稳定的方式运行。”
+
+
+简化基础架构让 wiki 更好地运行
+
+
+Wikimedia 工具实验室在最初的 Kubernetes 部署中取得了巨大成功。旧代码正在被简化和消除,使开发人员不必改变他们编写工具和机器人的方式,这些工具和机器人的运行方式比过去更稳定。带薪员工和志愿者能够更好地解决问题。
+
+
+将来,随着更完整的迁移到 Kubernetes,Wikimedia 工具实验室希望更轻松地托管和维护有助于在世界各地运行 wiki 的机器人和工具。该工具实验室已经拥有来自 800 名志愿者的大约 1300 个工具和机器人,而且每天提交量会更多。占 Web 流量 60% 以上的工具实验室的 Web 工具中有 20% 现在运行在 Kubernetes 上。工具实验室有一个 25 节点的集群,可以跟上每个新的 Kubernetes 版本。许多现有的 Web 工具正在迁移到 Kubernetes。
+
+
+Yuvi 说:“我们的目标是确保世界各地的人们能够尽可能轻松地分享知识,Kubernetes 帮助实现了这一点,它让世界各地的 wiki 更容易拥有蓬勃发展所需的工具。”
diff --git a/content/zh/case-studies/wikimedia/wikimedia_featured.svg b/content/zh/case-studies/wikimedia/wikimedia_featured.svg
new file mode 100644
index 0000000000..5fa786aaa5
--- /dev/null
+++ b/content/zh/case-studies/wikimedia/wikimedia_featured.svg
@@ -0,0 +1 @@
+kubernetes.io-logos2
\ No newline at end of file
diff --git a/content/zh/community/code-of-conduct.md b/content/zh/community/code-of-conduct.md
index 42450d7e86..e5942dc439 100644
--- a/content/zh/community/code-of-conduct.md
+++ b/content/zh/community/code-of-conduct.md
@@ -1,44 +1,44 @@
---
-title: 社区
+title: Kubernetes 社区行为规范
layout: basic
cid: community
-css: /css/community.css
+community_styles_migrated: true
---
-
-
-
Kubernetes 社区行为规范
-
+
-
+
{{< include "/static/cncf-code-of-conduct.md" >}}
-
diff --git a/content/zh/community/static/cncf-code-of-conduct.md b/content/zh/community/static/cncf-code-of-conduct.md
index 0c63979e3e..dde18750ea 100644
--- a/content/zh/community/static/cncf-code-of-conduct.md
+++ b/content/zh/community/static/cncf-code-of-conduct.md
@@ -4,9 +4,11 @@
### 贡献者行为准则
-作为这个项目的贡献者和维护者,为了建立一个开放和受欢迎的社区,我们保证尊重所有通过报告问题、发布功能请求、更新文档、提交拉取请求或补丁以及其他活动做出贡献的人员。
+作为这个项目的贡献者和维护者,为了建立一个开放和受欢迎的社区,
+我们保证尊重所有通过报告问题、发布功能请求、更新文档、提交拉取请求或补丁以及其他活动做出贡献的人员。
-我们致力于让参与此项目的每个人都不受骚扰,无论其经验水平、性别、性别认同和表达、性取向、残疾、个人外貌、体型、人种、种族、年龄、宗教或国籍等。
+我们致力于让参与此项目的每个人都不受骚扰,
+无论其经验水平、性别、性别认同和表达、性取向、残疾、个人外貌、体型、人种、种族、年龄、宗教或国籍等。
不可接受的参与者行为包括:
@@ -17,14 +19,21 @@
- 未经明确许可,发布他人的私人信息,比如地址或电子邮箱
- 其他不道德或不专业的行为
-项目维护者有权利和责任删除、编辑或拒绝评论、提交、代码、维基编辑、问题和其他不符合本行为准则的贡献。通过采用本行为准则,项目维护者承诺将这些原则公平且一致地应用到这个项目管理的各个方面。不遵守或不执行行为准则的项目维护者可能被永久地从项目团队中移除。
+项目维护者有权利和责任删除、编辑或拒绝评论、提交、代码、维基编辑、问题和其他不符合本行为准则的贡献。
+通过采用本行为准则,项目维护者承诺将这些原则公平且一致地应用到这个项目管理的各个方面。
+不遵守或不执行行为准则的项目维护者可能被永久地从项目团队中移除。
当个人代表项目或其社区时,本行为准则适用于项目空间和公共空间。
-如需举报侮辱、骚扰或其他不可接受的行为,您可发送邮件至
联系 [Kubernetes行为守则委员会](https://github.com/kubernetes/community/tree/master/committee-code-of-conduct)。其他事务请联系CNCF项目维护专员,或发送邮件至 联系我们的调解员Mishi Choudhary。
+如需举报侮辱、骚扰或其他不可接受的行为,
+你可发送邮件至 联系
+[Kubernetes行为守则委员会](https://github.com/kubernetes/community/tree/master/committee-code-of-conduct)。
+其他事务请联系CNCF项目维护专员,或发送邮件至 联系我们的调解员Mishi Choudhary。
-本行为准则改编自《贡献者契约》( https://contributor-covenant.org )1.2.0 版本,可在 https://contributor-covenant.org/version/1/2/0/ 查看。
+本行为准则改编自《贡献者契约》( https://contributor-covenant.org )1.2.0 版本,
+可在 https://contributor-covenant.org/version/1/2/0/ 查看。
### CNCF 活动行为准则
-云原生计算基金会(CNCF)活动受 Linux 基金会《[行为准则](https://events.linuxfoundation.org/code-of-conduct/)》管辖,该行为准则可在活动页面获得。其旨在与上述政策兼容,且包括更多关于事件回应的细节。
\ No newline at end of file
+云原生计算基金会(CNCF)活动受 Linux 基金会《[行为准则](https://events.linuxfoundation.org/code-of-conduct/)》管辖,
+该行为准则可在活动页面获得。其旨在与上述政策兼容,且包括更多关于事件回应的细节。
\ No newline at end of file
diff --git a/content/zh/docs/concepts/architecture/cloud-controller.md b/content/zh/docs/concepts/architecture/cloud-controller.md
index b08edad800..05caa7690f 100644
--- a/content/zh/docs/concepts/architecture/cloud-controller.md
+++ b/content/zh/docs/concepts/architecture/cloud-controller.md
@@ -142,7 +142,7 @@ IP 地址、网络包过滤、目标健康检查等云基础设施组件集成
## 鉴权 {#authorization}
diff --git a/content/zh/docs/concepts/architecture/control-plane-node-communication.md b/content/zh/docs/concepts/architecture/control-plane-node-communication.md
index 3e2beaafd9..8cf742e272 100644
--- a/content/zh/docs/concepts/architecture/control-plane-node-communication.md
+++ b/content/zh/docs/concepts/architecture/control-plane-node-communication.md
@@ -30,9 +30,9 @@ One or more forms of [authorization](/docs/reference/access-authn-authz/authoriz
## 节点到控制面
Kubernetes 采用的是中心辐射型(Hub-and-Spoke)API 模式。
-所有从集群(或所运行的 Pods)发出的 API 调用都终止于 apiserver。
+所有从集群(或所运行的 Pods)发出的 API 调用都终止于 API 服务器。
其它控制面组件都没有被设计为可暴露远程服务。
-apiserver 被配置为在一个安全的 HTTPS 端口(通常为 443)上监听远程连接请求,
+API 服务器被配置为在一个安全的 HTTPS 端口(通常为 443)上监听远程连接请求,
并启用一种或多种形式的客户端[身份认证](/zh/docs/reference/access-authn-authz/authentication/)机制。
一种或多种客户端[鉴权机制](/zh/docs/reference/access-authn-authz/authorization/)应该被启用,
特别是在允许使用[匿名请求](/zh/docs/reference/access-authn-authz/authentication/#anonymous-requests)
@@ -41,7 +41,7 @@ apiserver 被配置为在一个安全的 HTTPS 端口(通常为 443)上监
-应该使用集群的公共根证书开通节点,这样它们就能够基于有效的客户端凭据安全地连接 apiserver。
+应该使用集群的公共根证书开通节点,这样它们就能够基于有效的客户端凭据安全地连接 API 服务器。
一种好的方法是以客户端证书的形式将客户端凭据提供给 kubelet。
请查看 [kubelet TLS 启动引导](/zh/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/)
以了解如何自动提供 kubelet 客户端证书。
@@ -52,12 +52,12 @@ The `kubernetes` service (in `default` namespace) is configured with a virtual I
The control plane components also communicate with the cluster apiserver over the secure port.
-->
-想要连接到 apiserver 的 Pod 可以使用服务账号安全地进行连接。
+想要连接到 API 服务器的 Pod 可以使用服务账号安全地进行连接。
当 Pod 被实例化时,Kubernetes 自动把公共根证书和一个有效的持有者令牌注入到 Pod 里。
`kubernetes` 服务(位于 `default` 名字空间中)配置了一个虚拟 IP 地址,用于(通过 kube-proxy)转发
-请求到 apiserver 的 HTTPS 末端。
+请求到 API 服务器的 HTTPS 末端。
-控制面组件也通过安全端口与集群的 apiserver 通信。
+控制面组件也通过安全端口与集群的 API 服务器通信。
## 控制面到节点
-从控制面(apiserver)到节点有两种主要的通信路径。
-第一种是从 apiserver 到集群中每个节点上运行的 kubelet 进程。
-第二种是从 apiserver 通过它的代理功能连接到任何节点、Pod 或者服务。
+从控制面(API 服务器)到节点有两种主要的通信路径。
+第一种是从 API 服务器到集群中每个节点上运行的 kubelet 进程。
+第二种是从 API 服务器通过它的代理功能连接到任何节点、Pod 或者服务。
### API 服务器到 kubelet
-从 apiserver 到 kubelet 的连接用于:
+从 API 服务器到 kubelet 的连接用于:
* 获取 Pod 日志
* 挂接(通过 kubectl)到运行中的 Pod
* 提供 kubelet 的端口转发功能。
这些连接终止于 kubelet 的 HTTPS 末端。
-默认情况下,apiserver 不检查 kubelet 的服务证书。这使得此类连接容易受到中间人攻击,
+默认情况下,API 服务器不检查 kubelet 的服务证书。这使得此类连接容易受到中间人攻击,
在非受信网络或公开网络上运行也是 **不安全的**。
-为了对这个连接进行认证,使用 `--kubelet-certificate-authority` 标志给 apiserver
-提供一个根证书包,用于 kubelet 的服务证书。
+为了对这个连接进行认证,使用 `--kubelet-certificate-authority` 标志给 API
+服务器提供一个根证书包,用于 kubelet 的服务证书。
-如果无法实现这点,又要求避免在非受信网络或公共网络上进行连接,可在 apiserver 和
+如果无法实现这点,又要求避免在非受信网络或公共网络上进行连接,可在 API 服务器和
kubelet 之间使用 [SSH 隧道](#ssh-tunnels)。
最后,应该启用
@@ -122,9 +122,9 @@ kubelet 之间使用 [SSH 隧道](#ssh-tunnels)。
The connections from the apiserver to a node, pod, or service default to plain HTTP connections and are therefore neither authenticated nor encrypted. They can be run over a secure HTTPS connection by prefixing `https:` to the node, pod, or service name in the API URL, but they will not validate the certificate provided by the HTTPS endpoint nor provide client credentials so while the connection will be encrypted, it will not provide any guarantees of integrity. These connections **are not currently safe** to run over untrusted and/or public networks.
-->
-### apiserver 到节点、Pod 和服务
+### API 服务器到节点、Pod 和服务
-从 apiserver 到节点、Pod 或服务的连接默认为纯 HTTP 方式,因此既没有认证,也没有加密。
+从 API 服务器到节点、Pod 或服务的连接默认为纯 HTTP 方式,因此既没有认证,也没有加密。
这些连接可通过给 API URL 中的节点、Pod 或服务名称添加前缀 `https:` 来运行在安全的 HTTPS 连接上。
不过这些连接既不会验证 HTTPS 末端提供的证书,也不会提供客户端证书。
因此,虽然连接是加密的,仍无法提供任何完整性保证。
@@ -140,8 +140,8 @@ SSH tunnels are currently deprecated so you shouldn't opt to use them unless you
-->
### SSH 隧道 {#ssh-tunnels}
-Kubernetes 支持使用 SSH 隧道来保护从控制面到节点的通信路径。在这种配置下,apiserver
-建立一个到集群中各节点的 SSH 隧道(连接到在 22 端口监听的 SSH 服务)
+Kubernetes 支持使用 SSH 隧道来保护从控制面到节点的通信路径。在这种配置下,API
+服务器建立一个到集群中各节点的 SSH 隧道(连接到在 22 端口监听的 SSH 服务)
并通过这个隧道传输所有到 kubelet、节点、Pod 或服务的请求。
这一隧道保证通信不会被暴露到集群节点所运行的网络之外。
diff --git a/content/zh/docs/concepts/architecture/nodes.md b/content/zh/docs/concepts/architecture/nodes.md
index 68ffb345b1..0ab1e695ca 100644
--- a/content/zh/docs/concepts/architecture/nodes.md
+++ b/content/zh/docs/concepts/architecture/nodes.md
@@ -63,7 +63,7 @@ valid. For example, if you try to create a Node from the following JSON manifest
1. 节点上的 `kubelet` 向控制面执行自注册;
2. 你,或者别的什么人,手动添加一个 Node 对象。
-在你创建了 Node {{< glossary_tooltip text="object" term_id="object" >}}或者节点上的
+在你创建了 Node {{< glossary_tooltip text="对象" term_id="object" >}}或者节点上的
`kubelet` 执行了自注册操作之后,控制面会检查新的 Node 对象是否合法。
例如,如果你尝试使用下面的 JSON 对象来创建 Node 对象:
@@ -100,10 +100,9 @@ it becomes healthy.
You, or a {{< glossary_tooltip term_id="controller" text="controller">}}, must explicitly
delete the Node object to stop that health checking.
-->
-Kubernetes 会一直保存着非法节点对应的对象,并持续检查该节点是否已经
-变得健康。
-你,或者某个{{< glossary_tooltip term_id="controller" text="控制器">}}必需显式地
-删除该 Node 对象以停止健康检查操作。
+Kubernetes 会一直保存着非法节点对应的对象,并持续检查该节点是否已经变得健康。
+你,或者某个{{< glossary_tooltip term_id="controller" text="控制器">}}必须显式地删除该
+Node 对象以停止健康检查操作。
{{< /note >}}
### 节点名称唯一性 {#node-name-uniqueness}
-节点的[名称](/docs/concepts/overview/working-with-objects/names#names)用来标识 Node 对象。
+节点的[名称](/zh/docs/concepts/overview/working-with-objects/names#names)用来标识 Node 对象。
没有两个 Node 可以同时使用相同的名称。 Kubernetes 还假定名字相同的资源是同一个对象。
就 Node 而言,隐式假定使用相同名称的实例会具有相同的状态(例如网络配置、根磁盘内容)
和类似节点标签这类属性。这可能在节点被更改但其名称未变时导致系统状态不一致。
@@ -177,8 +176,8 @@ When the [Node authorization mode](/docs/reference/access-authn-authz/node/) and
kubelets are only authorized to create/modify their own Node resource.
-->
启用[Node 鉴权模式](/zh/docs/reference/access-authn-authz/node/)和
-[NodeRestriction 准入插件](/zh/docs/reference/access-authn-authz/admission-controllers/#noderestriction)
-时,仅授权 `kubelet` 创建或修改其自己的节点资源。
+[NodeRestriction 准入插件](/zh/docs/reference/access-authn-authz/admission-controllers/#noderestriction)时,
+仅授权 `kubelet` 创建或修改其自己的节点资源。
{{< note >}}
-更多细节参考[安全腾空节点](/zh/docs/tasks/administer-cluster/safely-drain-node/)。
+更多细节参考[安全地腾空节点](/zh/docs/tasks/administer-cluster/safely-drain-node/)。
{{< note >}}
### 状况 {#condition}
-`conditions` 字段描述了所有 `Running` 节点的状态。状况的示例包括:
+`conditions` 字段描述了所有 `Running` 节点的状况。状况的示例包括:
节点控制器在确认 Pod 在集群中已经停止运行前,不会强制删除它们。
-你可以看到这些可能在无法访问的节点上运行的 Pod 处于 `Terminating` 或者 `Unknown` 状态。
+你可以看到可能在这些无法访问的节点上运行的 Pod 处于 `Terminating` 或者 `Unknown` 状态。
如果 kubernetes 不能基于下层基础设施推断出某节点是否已经永久离开了集群,
集群管理员可能需要手动删除该节点对象。
从 Kubernetes 删除节点对象将导致 API 服务器删除节点上所有运行的 Pod 对象并释放它们的名字。
@@ -480,7 +479,7 @@ the Kubernetes API.
### 信息(Info) {#info}
Info 指的是节点的一般信息,如内核版本、Kubernetes 版本(`kubelet` 和 `kube-proxy` 版本)、
-容器运行时详细信息,以及 节点使用的操作系统。
+容器运行时详细信息,以及节点使用的操作系统。
`kubelet` 从节点收集这些信息并将其发布到 Kubernetes API。
## 心跳 {#heartbeats}
+
Kubernetes 节点发送的心跳帮助你的集群确定每个节点的可用性,并在检测到故障时采取行动。
对于节点,有两种形式的心跳:
@@ -504,7 +504,7 @@ Kubernetes 节点发送的心跳帮助你的集群确定每个节点的可用性
Each Node has an associated Lease object.
-->
* 更新节点的 `.status`
-* `kube-node-lease` {{}}中的
+* `kube-node-lease` {{}}中的
[Lease(租约)](/docs/reference/kubernetes-api/cluster-resources/lease-v1/)对象。
每个节点都有一个关联的 Lease 对象。
@@ -570,26 +570,29 @@ controller deletes the node from its list of nodes.
The third is monitoring the nodes' health. The node controller is
responsible for:
-- In the case that a node becomes unreachable, updating the NodeReady condition
- of within the Node's `.status`. In this case the node controller sets the
- NodeReady condition to `ConditionUnknown`.
+- In the case that a node becomes unreachable, updating the `Ready` condition
+ in the Node's `.status` field. In this case the node controller sets the
+ `Ready` condition to `Unknown`.
- If a node remains unreachable: triggering
[API-initiated eviction](/docs/concepts/scheduling-eviction/api-eviction/)
for all of the Pods on the unreachable node. By default, the node controller
- waits 5 minutes between marking the node as `ConditionUnknown` and submitting
+ waits 5 minutes between marking the node as `Unknown` and submitting
the first eviction request.
-The node controller checks the state of each node every `-node-monitor-period` seconds.
+By default, the node controller checks the state of each node every 5 seconds.
+This period can be configured using the `--node-monitor-period` flag on the
+`kube-controller-manager` component.
-->
第三个是监控节点的健康状况。节点控制器负责:
-- 在节点不可达的情况下,在 Node 的 `.status` 中更新 NodeReady 状况。
+- 在节点不可达的情况下,在 Node 的 `.status` 中更新 `Ready` 状况。
在这种情况下,节点控制器将 NodeReady 状况更新为 `Unknown` 。
- 如果节点仍然无法访问:对于不可达节点上的所有 Pod 触发
- [API-发起的逐出](/zh/docs/concepts/scheduling-eviction/api-eviction/)。
+ [API 发起的逐出](/zh/docs/concepts/scheduling-eviction/api-eviction/)操作。
默认情况下,节点控制器在将节点标记为 `Unknown` 后等待 5 分钟提交第一个驱逐请求。
-节点控制器每隔 `--node-monitor-period` 秒检查每个节点的状态。
+默认情况下,节点控制器每 5 秒检查一次节点状态,可以使用 `kube-controller-manager`
+组件上的 `--node-monitor-period` 参数来配置周期。
当一个可用区域(Availability Zone)中的节点变为不健康时,节点的驱逐行为将发生改变。
-节点控制器会同时检查可用区域中不健康(NodeReady 状况为 `Unknown` 或 `False`)
+节点控制器会同时检查可用区域中不健康(`Ready` 状况为 `Unknown` 或 `False`)
的节点的百分比:
## 节点拓扑 {#node-topology}
-{{< feature-state state="alpha" for_k8s_version="v1.16" >}}
+{{< feature-state state="beta" for_k8s_version="v1.18" >}}
-体面节点关闭特性依赖于 systemd,因为它要利用
+节点体面关闭特性依赖于 systemd,因为它要利用
[systemd 抑制器锁](https://www.freedesktop.org/wiki/Software/systemd/inhibit/)机制,
在给定的期限内延迟节点关闭。
@@ -759,18 +762,18 @@ Graceful node shutdown is controlled with the `GracefulNodeShutdown`
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) which is
enabled by default in 1.21.
-->
-体面节点关闭特性受 `GracefulNodeShutdown`
+节点体面关闭特性受 `GracefulNodeShutdown`
[特性门控](/docs/reference/command-line-tools-reference/feature-gates/)控制,
在 1.21 版本中是默认启用的。
-注意,默认情况下,下面描述的两个配置选项,`ShutdownGracePeriod` 和
-`ShutdownGracePeriodCriticalPods` 都是被设置为 0 的,因此不会激活体面节点关闭功能。
+注意,默认情况下,下面描述的两个配置选项,`shutdownGracePeriod` 和
+`shutdownGracePeriodCriticalPods` 都是被设置为 0 的,因此不会激活节点体面关闭功能。
要激活此功能特性,这两个 kubelet 配置选项要适当配置,并设置为非零值。
-例如,如果设置了 `ShutdownGracePeriod=30s` 和 `ShutdownGracePeriodCriticalPods=10s`,
+例如,如果设置了 `shutdownGracePeriod=30s` 和 `shutdownGracePeriodCriticalPods=10s`,
则 kubelet 将延迟 30 秒关闭节点。
在关闭期间,将保留前 20(30 - 10)秒用于体面终止常规 Pod,
而保留最后 10 秒用于终止[关键 Pod](/zh/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)。
@@ -817,11 +820,6 @@ reserved for terminating [critical pods](/docs/tasks/administer-cluster/guarante
When pods were evicted during the graceful node shutdown, they are marked as failed.
Running `kubectl get pods` shows the status of the the evicted pods as `Shutdown`.
And `kubectl describe pod` indicates that the pod was evicted because of node shutdown:
-
-```
-Reason: Terminated
-Message: Pod was terminated in response to imminent node shutdown.
-```
-->
{{< note >}}
当 Pod 在正常节点关闭期间被驱逐时,它们会被标记为已经失败(Failed)。
@@ -834,10 +832,98 @@ Message: Pod was terminated in response to imminent node shutdown.
```
{{< /note >}}
+
+## 节点非体面关闭 {#non-graceful-node-shutdown}
+
+{{< feature-state state="alpha" for_k8s_version="v1.24" >}}
+
+
+节点关闭的操作可能无法被 kubelet 的节点关闭管理器检测到,
+是因为该命令不会触发 kubelet 所使用的抑制锁定机制,或者是因为用户错误的原因,
+即 ShutdownGracePeriod 和 ShutdownGracePeriodCriticalPod 配置不正确。
+请参考以上[节点体面关闭](#graceful-node-shutdown)部分了解更多详细信息。
+
+
+当某节点关闭但 kubelet 的节点关闭管理器未检测到这一事件时,
+在那个已关闭节点上、属于 StatefulSet 的 Pod 将停滞于终止状态,并且不能移动到新的运行节点上。
+这是因为已关闭节点上的 kubelet 已不存在,亦无法删除 Pod,
+因此 StatefulSet 无法创建同名的新 Pod。
+如果 Pod 使用了卷,则 VolumeAttachments 不会从原来的已关闭节点上删除,
+因此这些 Pod 所使用的卷也无法挂接到新的运行节点上。
+所以,那些以 StatefulSet 形式运行的应用无法正常工作。
+如果原来的已关闭节点被恢复,kubelet 将删除 Pod,新的 Pod 将被在不同的运行节点上创建。
+如果原来的已关闭节点没有被恢复,那些在已关闭节点上的 Pod 将永远滞留在终止状态。
+
+
+为了缓解上述情况,用户可以手动将具有 `NoExecute` 或 `NoSchedule` 效果的
+`node kubernetes.io/out-of-service` 污点添加到节点上,标记其无法提供服务。
+如果在 `kube-controller-manager` 上启用了 `NodeOutOfServiceVolumeDetach`
+[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
+并且节点被通过污点标记为无法提供服务,如果节点 Pod 上没有设置对应的容忍度,
+那么这样的 Pod 将被强制删除,并且该在节点上被终止的 Pod 将立即进行卷分离操作。
+这样就允许那些在无法提供服务节点上的 Pod 能在其他节点上快速恢复。
+
+
+在非体面关闭期间,Pod 分两个阶段终止:
+1. 强制删除没有匹配的 `out-of-service` 容忍度的 Pod。
+2. 立即对此类 Pod 执行分离卷操作。
+
+
+{{< note >}}
+- 在添加 `node.kubernetes.io/out-of-service` 污点之前,应该验证节点已经处于关闭或断电状态(而不是在重新启动中)。
+- 将 Pod 移动到新节点后,用户需要手动移除停止服务的污点,并且用户要检查关闭节点是否已恢复,因为该用户是最初添加污点的用户。
+{{< /note >}}
+
+
-### 基于 Pod 优先级的体面节点关闭 {#pod-priority-graceful-node-shutdown}
+### 基于 Pod 优先级的节点体面关闭 {#pod-priority-graceful-node-shutdown}
{{< feature-state state="alpha" for_k8s_version="v1.23" >}}
@@ -849,11 +935,11 @@ allows cluster administers to explicitly define the ordering of pods
during graceful node shutdown based on
[priority classes](/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass).
-->
-为了在体面节点关闭期间提供更多的灵活性,尤其是处理关闭期间的 Pod 排序问题,
-体面节点关闭机制能够关注 Pod 的 PriorityClass 设置,前提是你已经在集群中启用了此功能特性。
+为了在节点体面关闭期间提供更多的灵活性,尤其是处理关闭期间的 Pod 排序问题,
+节点体面关闭机制能够关注 Pod 的 PriorityClass 设置,前提是你已经在集群中启用了此功能特性。
此功能特性允许集群管理员基于 Pod
的[优先级类(Priority Class)](/zh/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass)
-显式地定义体面节点关闭期间 Pod 的处理顺序。
+显式地定义节点体面关闭期间 Pod 的处理顺序。
-前文所述的[体面节点关闭](#graceful-node-shutdown)特性能够分两个阶段关闭 Pod,
+前文所述的[节点体面关闭](#graceful-node-shutdown)特性能够分两个阶段关闭 Pod,
首先关闭的是非关键的 Pod,之后再处理关键 Pod。
如果需要显式地以更细粒度定义关闭期间 Pod 的处理顺序,需要一定的灵活度,
这时可以使用基于 Pod 优先级的体面关闭机制。
@@ -873,7 +959,7 @@ graceful node shutdown in multiple phases, each phase shutting down a
particular priority class of pods. The kubelet can be configured with the exact
phases and shutdown time per phase.
-->
-当体面节点关闭能够处理 Pod 优先级时,体面节点关闭的处理可以分为多个阶段,
+当节点体面关闭能够处理 Pod 优先级时,节点体面关闭的处理可以分为多个阶段,
每个阶段关闭特定优先级类的 Pod。kubelet 可以被配置为按确切的阶段处理 Pod,
且每个阶段可以独立设置关闭时间。
@@ -963,17 +1049,33 @@ kubelet 会直接跳到下一个优先级数值范围进行处理。
If this feature is enabled and no configuration is provided, then no ordering
action will be taken.
-Using this feature, requires enabling the
-`GracefulNodeShutdownBasedOnPodPriority` feature gate, and setting the kubelet
-config's `ShutdownGracePeriodByPodPriority` to the desired configuration
-containing the pod priority class values and their respective shutdown periods.
+Using this feature requires enabling the `GracefulNodeShutdownBasedOnPodPriority`
+[feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
+, and setting `ShutdownGracePeriodByPodPriority` in the
+[kubelet config](/docs/reference/config-api/kubelet-config.v1beta1/)
+to the desired configuration containing the pod priority class values and
+their respective shutdown periods.
-->
如果此功能特性被启用,但没有提供配置数据,则不会出现排序操作。
-使用此功能特性需要启用 `GracefulNodeShutdownBasedOnPodPriority` 功能特性,
-并将 kubelet 配置中的 `ShutdownGracePeriodByPodPriority` 设置为期望的配置,
+使用此功能特性需要启用 `GracefulNodeShutdownBasedOnPodPriority`
+[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
+并将 [kubelet 配置](/zh/docs/reference/config-api/kubelet-config.v1beta1/)
+中的 `shutdownGracePeriodByPodPriority` 设置为期望的配置,
其中包含 Pod 的优先级类数值以及对应的关闭期限。
+
+{{< note >}}
+在节点体面关闭期间考虑 Pod 优先级的能力是作为 Kubernetes v1.23 中的 Alpha 功能引入的。
+在 Kubernetes {{< skew currentVersion >}} 中该功能是 Beta 版,默认启用。
+{{< /note >}}
+
要在节点上启用交换内存,必须启用kubelet 的 `NodeSwap` 特性门控,
同时使用 `--fail-swap-on` 命令行参数或者将 `failSwapOn`
-[配置](/zh/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
-设置为 false。
+[配置](/zh/docs/reference/config-api/kubelet-config.v1beta1/#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)设置为 false。
## 保护集群 {#securing-a-cluster}
@@ -116,7 +116,7 @@ Before choosing a guide, here are some considerations:
阐述了在认证和授权之后拦截到 Kubernetes API 服务的请求的插件。
* [在 Kubernetes 集群中使用 Sysctls](/zh/docs/tasks/administer-cluster/sysctl-cluster/)
描述了管理员如何使用 `sysctl` 命令行工具来设置内核参数。
-* [审计](/zh/docs/tasks/debug-application-cluster/audit/)
+* [审计](/zh/docs/tasks/debug/debug-cluster/audit/)
描述了如何与 Kubernetes 的审计日志交互。
-你可以通过在每个节点上使用 _节点级的日志记录代理_ 来实现群集级日志记录。
+你可以通过在每个节点上使用 _节点级的日志记录代理_ 来实现集群级日志记录。
日志记录代理是一种用于暴露日志或将日志推送到后端的专用工具。
通常,日志记录代理程序是一个容器,它可以访问包含该节点上所有应用程序容器的日志文件的目录。
diff --git a/content/zh/docs/concepts/cluster-administration/manage-deployment.md b/content/zh/docs/concepts/cluster-administration/manage-deployment.md
index 30be88f7cc..7d77f529e2 100644
--- a/content/zh/docs/concepts/cluster-administration/manage-deployment.md
+++ b/content/zh/docs/concepts/cluster-administration/manage-deployment.md
@@ -721,9 +721,8 @@ That's it! The Deployment will declaratively update the deployed nginx applicati
## {{% heading "whatsnext" %}}
-- 学习[如何使用 `kubectl` 观察和调试应用](/zh/docs/tasks/debug-application-cluster/debug-application-introspection/)
+- 学习[如何使用 `kubectl` 观察和调试应用](/zh/docs/tasks/debug/debug-application/debug-running-pod/)
- 阅读[配置最佳实践和技巧](/zh/docs/concepts/configuration/overview/)
-
diff --git a/content/zh/docs/concepts/cluster-administration/networking.md b/content/zh/docs/concepts/cluster-administration/networking.md
index 6175dc5395..4bfae1a551 100644
--- a/content/zh/docs/concepts/cluster-administration/networking.md
+++ b/content/zh/docs/concepts/cluster-administration/networking.md
@@ -1,10 +1,15 @@
---
-reviewers:
-- thockin
title: 集群网络系统
content_type: concept
weight: 50
---
+
@@ -62,7 +67,7 @@ as an introduction to various technologies and serves as a jumping-off point.
The following networking options are sorted alphabetically - the order does not
imply any preferential status.
-->
-## 如何实现 Kubernetes 的网络模型
+## 如何实现 Kubernetes 的网络模型 {#how-to-implement-the-kubernetes-networking-model}
有很多种方式可以实现这种网络模型,本文档并不是对各种实现技术的详细研究,
但是希望可以作为对各种技术的详细介绍,并且成为你研究的起点。
@@ -105,7 +110,7 @@ Using this CNI plugin allows Kubernetes pods to have the same IP address inside
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).
-->
-### Kubernetes 的 AWS VPC CNI
+### Kubernetes 的 AWS VPC CNI {#aws-vpc-cni-for-kubernetes}
[AWS VPC CNI](https://github.com/aws/amazon-vpc-cni-k8s) 为 Kubernetes 集群提供了集成的
AWS 虚拟私有云(VPC)网络。该 CNI 插件提供了高吞吐量和可用性,低延迟以及最小的网络抖动。
@@ -113,7 +118,7 @@ AWS 虚拟私有云(VPC)网络。该 CNI 插件提供了高吞吐量和可
这包括使用 VPC 流日志、VPC 路由策略和安全组进行网络流量隔离的功能。
使用该 CNI 插件,可使 Kubernetes Pod 拥有与在 VPC 网络上相同的 IP 地址。
-CNI 将 AWS 弹性网络接口(ENI)分配给每个 Kubernetes 节点,并将每个 ENI 的辅助 IP 范围用于该节点上的 Pod 。
+CNI 将 AWS 弹性网络接口(ENI)分配给每个 Kubernetes 节点,并将每个 ENI 的辅助 IP 范围用于该节点上的 Pod。
CNI 包含用于 ENI 和 IP 地址的预分配的控件,以便加快 Pod 的启动时间,并且能够支持多达 2000 个节点的大型集群。
此外,CNI 可以与
@@ -121,20 +126,20 @@ CNI 包含用于 ENI 和 IP 地址的预分配的控件,以便加快 Pod 的
AWS VPC CNI 项目是开源的,请查看 [GitHub 上的文档](https://github.com/aws/amazon-vpc-cni-k8s)。
-### Kubernetes 的 Azure CNI
+### Kubernetes 的 Azure CNI {#azure-cni-for-kubernetes}
[Azure CNI](https://docs.microsoft.com/en-us/azure/virtual-network/container-networking-overview)
是一个[开源插件](https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md),
将 Kubernetes Pods 和 Azure 虚拟网络(也称为 VNet)集成在一起,可提供与 VM 相当的网络性能。
-Pod 可以通过 Express Route 或者 站点到站点的 VPN 来连接到对等的 VNet ,
+Pod 可以通过 Express Route 或者 站点到站点的 VPN 来连接到对等的 VNet,
也可以从这些网络来直接访问 Pod。Pod 可以访问受服务端点或者受保护链接的 Azure 服务,比如存储和 SQL。
你可以使用 VNet 安全策略和路由来筛选 Pod 流量。
-该插件通过利用在 Kubernetes 节点的网络接口上预分配的辅助 IP 池将 VNet 分配给 Pod 。
+该插件通过利用在 Kubernetes 节点的网络接口上预分配的辅助 IP 池将 VNet 分配给 Pod。
Azure CNI 可以在
[Azure Kubernetes Service (AKS)](https://docs.microsoft.com/en-us/azure/aks/configure-azure-cni) 中获得。
@@ -142,7 +147,7 @@ Azure CNI 可以在
### Calico
@@ -150,7 +155,8 @@ Azure CNI 可以在
用于基于容器、虚拟机和本地主机的工作负载。
Calico 支持多个数据面,包括:纯 Linux eBPF 的数据面、标准的 Linux 联网数据面
以及 Windows HNS 数据面。Calico 在提供完整的联网堆栈的同时,还可与
-[云驱动 CNIs](https://docs.projectcalico.org/networking/determine-best-networking#calico-compatible-cni-plugins-and-cloud-provider-integrations) 联合使用,以保证网络策略实施。
+[云驱动 CNIs](https://projectcalico.docs.tigera.io/networking/determine-best-networking#calico-compatible-cni-plugins-and-cloud-provider-integrations)
+联合使用,以保证网络策略实施。
-### 华为的 CNI-Genie
+### 华为的 CNI-Genie {#cni-genie-from-huawei}
[CNI-Genie](https://github.com/cni-genie/CNI-Genie) 是一个 CNI 插件,
可以让 Kubernetes 在运行时使用不同的[网络模型](#the-kubernetes-network-model)的
[实现同时被访问](https://github.com/cni-genie/CNI-Genie/blob/master/docs/multiple-cni-plugins/README.md#what-cni-genie-feature-1-multiple-cni-plugins-enables)。
这包括以
[CNI 插件](https://github.com/containernetworking/cni#3rd-party-plugins)运行的任何实现,比如
-[Flannel](https://github.com/coreos/flannel#flannel)、
+[Flannel](https://github.com/flannel-io/flannel#flannel)、
[Calico](https://projectcalico.docs.tigera.io/about/about-calico/)、
[Weave-net](https://www.weave.works/oss/net/)。
@@ -240,13 +246,11 @@ Kubernetes, using the [fd.io](https://fd.io/) data plane.
### Contiv-VPP
[Contiv-VPP](https://contivpp.io/) 是用于 Kubernetes 的用户空间、面向性能的网络插件,使用 [fd.io](https://fd.io/) 数据平面。
-
-### Contrail/Tungsten Fabric
-
[Contrail](https://www.juniper.net/us/en/products-services/sdn/contrail/contrail-networking/)
是基于 [Tungsten Fabric](https://tungsten.io) 的,真正开放的多云网络虚拟化和策略管理平台。
Contrail 和 Tungsten Fabric 与各种编排系统集成在一起,例如 Kubernetes、OpenShift、OpenStack 和 Mesos,
@@ -271,7 +275,7 @@ With this toolset DANM is able to provide multiple separated network interfaces,
它由以下几个组件构成:
* 能够配置具有高级功能的 IPVLAN 接口的 CNI 插件
-* 一个内置的 IPAM 模块,能够管理多个、群集内的、不连续的 L3 网络,并按请求提供动态、静态或无 IP 分配方案
+* 一个内置的 IPAM 模块,能够管理多个、集群内的、不连续的 L3 网络,并按请求提供动态、静态或无 IP 分配方案
* CNI 元插件能够通过自己的 CNI 或通过将任务授权给其他任何流行的 CNI 解决方案(例如 SRI-OV 或 Flannel)来实现将多个网络接口连接到容器
* Kubernetes 控制器能够集中管理所有 Kubernetes 主机的 VxLAN 和 VLAN 接口
* 另一个 Kubernetes 控制器扩展了 Kubernetes 的基于服务的服务发现概念,以在 Pod 的所有网络接口上工作
@@ -298,7 +302,7 @@ Kubernetes 所需要的覆盖网络。已经有许多人报告了使用 Flannel
### Hybridnet
[Hybridnet](https://github.com/alibaba/hybridnet) 是一个为混合云设计的开源 CNI 插件,
-它为一个或多个集群中的容器提供覆盖和底层网络。 Overlay 和 underlay 容器可以在同一个节点上运行,
+它为一个或多个集群中的容器提供覆盖和底层网络。Overlay 和 underlay 容器可以在同一个节点上运行,
并具有集群范围的双向网络连接。
### L2 networks and linux bridging
-如果你具有一个“哑”的L2网络,例如“裸机”环境中的简单交换机,则应该能够执行与上述 GCE 设置类似的操作。
+如果你具有一个“哑”的 L2 网络,例如“裸机”环境中的简单交换机,则应该能够执行与上述 GCE 设置类似的操作。
请注意,这些说明仅是非常简单的尝试过-似乎可行,但尚未经过全面测试。
-如果您使用此技术并完善了流程,请告诉我们。
+如果你使用此技术并完善了流程,请告诉我们。
-根据 Lars Kellogg-Stedman 的这份非常不错的“Linux 网桥设备”
+根据 Lars Kellogg-Stedman 的这份非常不错的 “Linux 网桥设备”
[使用说明](https://blog.oddbit.com/2014/08/11/four-ways-to-connect-a-docker/)来进行操作。
+### OVN4NFV-K8s-Plugin(基于 OVN 的 CNI 控制器和插件) {#ovn4nfv-k8s-plugin-ovn-based-cni-controller-plugin}
+
+[OVN4NFV-K8S-Plugin](https://github.com/opnfv/ovn4nfv-k8s-plugin) 是基于 OVN 的
+CNI 控制器插件,提供基于云原生的服务功能链 (SFC)、多个 OVN
+覆盖网络、动态子网创建、虚拟网络的动态创建、VLAN Provider 网络、Direct Provider
+网络且可与其他多网络插件组合,非常适合多集群网络中基于边缘的云原生工作负载。
+
-### OVN (开放式虚拟网络)
+### OVN(开放式虚拟网络) {#ovn-open-virtual-networking}
OVN 是一个由 Open vSwitch 社区开发的开源的网络虚拟化解决方案。
它允许创建逻辑交换器、逻辑路由、状态 ACL、负载均衡等等来建立不同的虚拟网络拓扑。
-该项目有一个特定的Kubernetes插件和文档 [ovn-kubernetes](https://github.com/openvswitch/ovn-kubernetes)。
+该项目在 [ovn-kubernetes](https://github.com/openvswitch/ovn-kubernetes)
+提供特定的 Kubernetes 插件和文档。
-### Weaveworks 的 Weave Net
+### Weaveworks 的 Weave Net {#weave-net-from-weaveworks}
-[Weave Net](https://www.weave.works/oss/net/) 是 Kubernetes 及其
-托管应用程序的弹性且易于使用的网络系统。
+[Weave Net](https://www.weave.works/oss/net/) 为 Kubernetes
+及其托管应用提供的、弹性且易用的网络系统。
Weave Net 可以作为 [CNI 插件](https://www.weave.works/docs/net/latest/cni-plugin/) 运行或者独立运行。
在这两种运行方式里,都不需要任何配置或额外的代码即可运行,并且在两种情况下,
网络都为每个 Pod 提供一个 IP 地址 -- 这是 Kubernetes 的标准配置。
@@ -456,9 +473,8 @@ Weave Net 可以作为 [CNI 插件](https://www.weave.works/docs/net/latest/cni-
-网络模型的早期设计、运行原理以及未来的一些计划,都在
-[联网设计文档](https://git.k8s.io/community/contributors/design-proposals/network/networking.md)
-里有更详细的描述。
+网络模型的早期设计、运行原理以及未来的一些计划,
+都在[联网设计文档](https://git.k8s.io/community/contributors/design-proposals/network/networking.md)里有更详细的描述。
diff --git a/content/zh/docs/concepts/cluster-administration/proxies.md b/content/zh/docs/concepts/cluster-administration/proxies.md
index be933ccc9c..64f9b0cbf7 100644
--- a/content/zh/docs/concepts/cluster-administration/proxies.md
+++ b/content/zh/docs/concepts/cluster-administration/proxies.md
@@ -59,7 +59,7 @@ There are several different proxies you may encounter when using Kubernetes:
2. [apiserver proxy](/zh/docs/tasks/access-application-cluster/access-cluster/#discovering-builtin-services):
- 是一个建立在 apiserver 内部的“堡垒”
- - 将集群外部的用户与群集 IP 相连接,这些IP是无法通过其他方式访问的
+ - 将集群外部的用户与集群 IP 相连接,这些IP是无法通过其他方式访问的
- 运行在 apiserver 进程内
- 客户端到代理使用 HTTPS 协议 (如果配置 apiserver 使用 HTTP 协议,则使用 HTTP 协议)
- 通过可用信息进行选择,代理到目的地可能使用 HTTP 或 HTTPS 协议
diff --git a/content/zh/docs/concepts/cluster-administration/system-logs.md b/content/zh/docs/concepts/cluster-administration/system-logs.md
index 8548c82310..164d416b9f 100644
--- a/content/zh/docs/concepts/cluster-administration/system-logs.md
+++ b/content/zh/docs/concepts/cluster-administration/system-logs.md
@@ -192,6 +192,82 @@ I1025 00:15:15.525108 1 example.go:116] "Example" data="This is text with
second line.}
```
+
+### 上下文日志
+
+{{< feature-state for_k8s_version="v1.24" state="alpha" >}}
+
+
+上下文日志建立在结构化日志之上。
+它主要是关于开发人员如何使用日志记录调用:基于该概念的代码将更加灵活,
+并且支持在[结构化日志 KEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/3077-contextual-logging)
+中描述的额外用例。
+
+
+如果开发人员在他们的组件中使用额外的函数,比如 `WithValues` 或 `WithName`,
+那么日志条目将会包含额外的信息,这些信息会被调用者传递给函数。
+
+
+目前这一特性是由 `StructuredLogging` 特性门控所控制的,默认关闭。
+这个基础设施是在 1.24 中被添加的,并不需要修改组件。
+该 [`component-base/logs/example`](https://github.com/kubernetes/kubernetes/blob/v1.24.0-beta.0/staging/src/k8s.io/component-base/logs/example/cmd/logger.go)
+命令演示了如何使用新的日志记录调用以及组件如何支持上下文日志记录。
+
+```console
+$ cd $GOPATH/src/k8s.io/kubernetes/staging/src/k8s.io/component-base/logs/example/cmd/
+$ go run . --help
+...
+ --feature-gates mapStringBool A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
+ AllAlpha=true|false (ALPHA - default=false)
+ AllBeta=true|false (BETA - default=false)
+ ContextualLogging=true|false (ALPHA - default=false)
+$ go run . --feature-gates ContextualLogging=true
+...
+I0404 18:00:02.916429 451895 logger.go:94] "example/myname: runtime" foo="bar" duration="1m0s"
+I0404 18:00:02.916447 451895 logger.go:95] "example: another runtime" foo="bar" duration="1m0s"
+```
+
+
+`example` 前缀和 `foo="bar"` 会被函数的调用者添加上,
+不需修改该函数,它就会记录 `runtime` 消息和 `duration="1m0s"` 值。
+
+禁用上下文日志后,`WithValues` 和 `WithName` 什么都不会做,
+并且会通过调用全局的 klog 日志记录器记录日志。
+因此,这些附加信息不再出现在日志输出中:
+
+```console
+$ go run . --feature-gates ContextualLogging=false
+...
+I0404 18:03:31.171945 452150 logger.go:94] "runtime" duration="1m0s"
+I0404 18:03:31.171962 452150 logger.go:95] "another runtime" duration="1m0s"
+```
+
@@ -258,45 +334,6 @@ List of components currently supporting JSON format:
* {{< glossary_tooltip term_id="kube-scheduler" text="kube-scheduler" >}}
* {{< glossary_tooltip term_id="kubelet" text="kubelet" >}}
-
-### 日志清洗 {#log-sanitization}
-
-{{< feature-state for_k8s_version="v1.20" state="alpha" >}}
-
-{{}}
-
-日志清洗(Log Sanitization)可能会导致大量的计算开销,因此不应在生产环境中启用。
-{{< /warning >}}
-
-
-`--experimental-logging-sanitization` 参数可用来启用 klog 清洗过滤器。
-如果启用后,将检查所有日志参数中是否有标记为敏感数据的字段(比如:密码,密钥,令牌),
-并且将阻止这些字段的记录。
-
-
-当前支持日志清洗的组件列表:
-
-* kube-controller-manager
-* kube-apiserver
-* kube-scheduler
-* kubelet
-
-{{< note >}}
-
-日志清洗过滤器不会阻止用户工作负载日志泄漏敏感数据。
-{{< /note >}}
-
* 阅读 [Kubernetes 日志架构](/zh/docs/concepts/cluster-administration/logging/)
* 阅读[结构化日志提案(英文)](https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/1602-structured-logging)
+* 阅读[上下文日志提案(英文)](https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/3077-contextual-logging)
* 阅读 [klog 参数的废弃(英文)](https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/2845-deprecate-klog-specific-flags-in-k8s-components)
* 阅读[日志严重级别约定(英文)](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md)
diff --git a/content/zh/docs/concepts/configuration/configmap.md b/content/zh/docs/concepts/configuration/configmap.md
index b8de41a43c..a710e08dd1 100644
--- a/content/zh/docs/concepts/configuration/configmap.md
+++ b/content/zh/docs/concepts/configuration/configmap.md
@@ -461,9 +461,11 @@ to the deleted ConfigMap, it is recommended to recreate these pods.
* 阅读 [Secret](/zh/docs/concepts/configuration/secret/)。
* 阅读[配置 Pod 使用 ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/)。
+* 阅读[修改 ConfigMap(或任何其他 Kubernetes 对象)](/zh/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch/)。
* 阅读 [Twelve-Factor 应用](https://12factor.net/zh_cn/)来了解将代码和配置分开的动机。
diff --git a/content/zh/docs/concepts/configuration/manage-resources-containers.md b/content/zh/docs/concepts/configuration/manage-resources-containers.md
index 00c5eba261..001ab761ef 100644
--- a/content/zh/docs/concepts/configuration/manage-resources-containers.md
+++ b/content/zh/docs/concepts/configuration/manage-resources-containers.md
@@ -92,15 +92,13 @@ runtimes can have different ways to implement the same restrictions.
{{< note >}}
-如果某容器设置了自己的内存限制但未设置内存请求,Kubernetes
-自动为其设置与内存限制相匹配的请求值。类似的,如果某 Container 设置了
-CPU 限制值但未设置 CPU 请求值,则 Kubernetes 自动为其设置 CPU
-请求并使之与 CPU 限制值匹配。
+如果你为某个资源指定了限制,但不指定请求,
+并且没有应用准入时机制为该资源设置默认请求,
+然后 Kubernetes 复制你所指定的限制值,将其用作资源的请求值。
{{< /note >}}
## 监控计算和内存资源用量
@@ -422,8 +420,8 @@ kubelet 会将 Pod 的资源使用情况作为 Pod
[`status`](/zh/docs/concepts/overview/working-with-objects/kubernetes-objects/#object-spec-and-status)
的一部分来报告的。
-如果为集群配置了可选的[监控工具](/zh/docs/tasks/debug-application-cluster/resource-usage-monitoring/),
-则可以直接从[指标 API](/zh/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#the-metrics-api)
+如果为集群配置了可选的[监控工具](/zh/docs/tasks/debug/debug-cluster/resource-usage-monitoring/),
+则可以直接从[指标 API](/zh/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/#metrics-api)
或者监控工具获得 Pod 的资源使用情况。
-使用 kubeconfig 文件来组织有关集群、用户、命名空间和身份认证机制的信息。`kubectl` 命令行工具使用 kubeconfig 文件来查找选择集群所需的信息,并与集群的 API 服务器进行通信。
+使用 kubeconfig 文件来组织有关集群、用户、命名空间和身份认证机制的信息。
+`kubectl` 命令行工具使用 kubeconfig 文件来查找选择集群所需的信息,并与集群的 API 服务器进行通信。
{{< note >}}
-用于配置集群访问的文件称为 *kubeconfig 文件*。这是引用配置文件的通用方法。这并不意味着有一个名为 `kubeconfig` 的文件
+用于配置集群访问的文件称为“kubeconfig 文件”。
+这是引用配置文件的通用方法,并不意味着有一个名为 `kubeconfig` 的文件
{{< /note >}}
默认情况下,`kubectl` 在 `$HOME/.kube` 目录下查找名为 `config` 的文件。
-您可以通过设置 `KUBECONFIG` 环境变量或者设置
+你可以通过设置 `KUBECONFIG` 环境变量或者设置
[`--kubeconfig`](/docs/reference/generated/kubectl/kubectl/)参数来指定其他 kubeconfig 文件。
-假设您有多个集群,并且您的用户和组件以多种方式进行身份认证。比如:
+假设你有多个集群,并且你的用户和组件以多种方式进行身份认证。比如:
-使用 kubeconfig 文件,您可以组织集群、用户和命名空间。您还可以定义上下文,以便在集群和命名空间之间快速轻松地切换。
+使用 kubeconfig 文件,你可以组织集群、用户和命名空间。你还可以定义上下文,以便在集群和命名空间之间快速轻松地切换。
-通过 kubeconfig 文件中的 *context* 元素,使用简便的名称来对访问参数进行分组。每个上下文都有三个参数:cluster、namespace 和 user。默认情况下,`kubectl` 命令行工具使用 *当前上下文* 中的参数与集群进行通信。
+通过 kubeconfig 文件中的 *context* 元素,使用简便的名称来对访问参数进行分组。
+每个 context 都有三个参数:cluster、namespace 和 user。
+默认情况下,`kubectl` 命令行工具使用 **当前上下文** 中的参数与集群进行通信。
-默认情况下,Kubernetes Secret 未加密地存储在 API 服务器的底层数据存储(etcd)中。
+默认情况下,Kubernetes Secret 未加密地存储在 API 服务器的底层数据存储(etcd)中。
任何拥有 API 访问权限的人都可以检索或修改 Secret,任何有权访问 etcd 的人也可以。
此外,任何有权限在命名空间中创建 Pod 的人都可以使用该访问权限读取该命名空间中的任何 Secret;
这包括间接访问,例如创建 Deployment 的能力。
@@ -75,7 +75,7 @@ In order to safely use Secrets, take at least the following steps:
为了安全地使用 Secret,请至少执行以下步骤:
1. 为 Secret [启用静态加密](/zh/docs/tasks/administer-cluster/encrypt-data/);
-1. 启用或配置 [RBAC 规则](/zh/docs/reference/access-authn-authz/authorization/)来限制读取和写入
+1. [启用或配置 RBAC 规则](/zh/docs/reference/access-authn-authz/authorization/)来限制读取和写入
Secret 的数据(包括通过间接方式)。需要注意的是,被准许创建 Pod 的人也隐式地被授权获取
Secret 内容。
1. 在适当的情况下,还可以使用 RBAC 等机制来限制允许哪些主体创建新 Secret 或替换现有 Secret。
@@ -258,6 +258,10 @@ You can edit an existing Secret using kubectl:
kubectl edit secrets mysecret
```
+
这一命令会启动你的默认编辑器,允许你更新 `data` 字段中存放的 base64 编码的 Secret 值;
例如:
@@ -456,7 +460,7 @@ subresource to obtain a token to access the API is recommended instead.
You can also control the paths within the volume where Secret keys are projected.
You can use the `.spec.volumes[].secret.items` field to change the target path of each key:
-->
-#### 将 Secret 键投射到特定目录
+#### 将 Secret 键投射到特定目录 {#projection-of-secret-keys-to-specific-paths}
你也可以控制 Secret 键所投射到的卷中的路径。
你可以使用 `.spec.volumes[].secret.items` 字段来更改每个主键的目标路径:
@@ -517,7 +521,7 @@ You can also set a default mode for the entire Secret volume and override per ke
For example, you can specify a default mode like this:
-->
-#### Secret 文件的访问权限
+#### Secret 文件的访问权限 {#secret-files-permissions}
你可以为某个 Secret 主键设置 POSIX 文件访问权限位。
如果你不指定访问权限,默认会使用 `0644`。
@@ -782,7 +786,7 @@ of the secret data.
This is the result of commands executed inside the container from the example above:
-->
-#### 通过环境变量使用 Secret 值
+#### 通过环境变量使用 Secret 值 {#consuming-secret-values-from-environment-variables}
在通过环境变量来使用 Secret 的容器中,Secret 主键展现为普通的环境变量。
这些变量的取值是 Secret 数据的 Base64 解码值。
@@ -862,7 +866,7 @@ You can use an `imagePullSecrets` to pass a secret that contains a Docker (or ot
password to the kubelet. The kubelet uses this information to pull a private image on behalf of your Pod.
See the [PodSpec API](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core) for more information about the `imagePullSecrets` field.
-->
-#### 使用 imagePullSecrets
+#### 使用 imagePullSecrets {#using-imagepullsecrets-1}
`imagePullSecrets` 字段是一个列表,包含对同一名字空间中 Secret 的引用。
你可以使用 `imagePullSecrets` 将包含 Docker(或其他)镜像仓库密码的 Secret
@@ -876,7 +880,7 @@ See the [PodSpec API](/docs/reference/generated/kubernetes-api/{{< param "versio
You can learn how to specify `imagePullSecrets` from the [container images](/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod)
documentation.
-->
-##### 手动设定 imagePullSecret
+##### 手动设定 imagePullSecret {#manually-specifying-an-imagepullsecret}
你可以通过阅读[容器镜像](/zh/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod)
文档了解如何设置 `imagePullSecrets`。
@@ -891,7 +895,7 @@ field set to that of the service account.
See [Add ImagePullSecrets to a service account](/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account)
for a detailed explanation of that process.
-->
-##### 设置 imagePullSecrets 为自动挂载
+##### 设置 imagePullSecrets 为自动挂载 {#arranging-for-imagepullsecrets-to-be-automatically-attached}
你可以手动创建 `imagePullSecret`,并在一个 ServiceAccount 中引用它。
对使用该 ServiceAccount 创建的所有 Pod,或者默认使用该 ServiceAccount 创建的 Pod
@@ -919,7 +923,7 @@ Create a secret
-->
## 使用场景 {#use-case}
-### 使用场景:作为容器环境变量
+### 使用场景:作为容器环境变量 {#use-case-as-container-environment-variables}
创建 Secret:
@@ -970,7 +974,7 @@ spec:
Create a Secret containing some SSH keys:
-->
-### 使用场景:带 SSH 密钥的 Pod
+### 使用场景:带 SSH 密钥的 Pod {#use-case-pod-with-ssh-keys}
创建包含一些 SSH 密钥的 Secret:
@@ -1061,7 +1065,7 @@ credentials.
You can create a `kustomization.yaml` with a `secretGenerator` field or run
`kubectl create secret`.
-->
-### 使用场景:带有生产、测试环境凭据的 Pod
+### 使用场景:带有生产、测试环境凭据的 Pod {#use-case-pods-with-prod-test-credentials}
这一示例所展示的一个 Pod 会使用包含生产环境凭据的 Secret,另一个 Pod
使用包含测试环境凭据的 Secret。
@@ -1247,7 +1251,7 @@ You can make your data "hidden" by defining a key that begins with a dot.
This key represents a dotfile or "hidden" file. For example, when the following secret
is mounted into a volume, `secret-volume`:
-->
-### 使用场景:在 Secret 卷中带句点的文件
+### 使用场景:在 Secret 卷中带句点的文件 {#use-case-dotfiles-in-a-secret-volume}
通过定义以句点(`.`)开头的主键,你可以“隐藏”你的数据。
这些主键代表的是以句点开头的文件或“隐藏”文件。
@@ -1308,7 +1312,7 @@ logic, and then sign some messages with an HMAC. Because it has complex
application logic, there might be an unnoticed remote file reading exploit in
the server, which could expose the private key to an attacker.
-->
-### 使用场景:仅对 Pod 中一个容器可见的 Secret
+### 使用场景:仅对 Pod 中一个容器可见的 Secret {#use-case-secret-visible-to-one-container-in-a-pod}
考虑一个需要处理 HTTP 请求,执行某些复杂的业务逻辑,之后使用 HMAC
来对某些消息进行签名的程序。因为这一程序的应用逻辑很复杂,
@@ -1341,7 +1345,7 @@ the [Secret](/docs/reference/kubernetes-api/config-and-storage-resources/secret-
resource, or certain equivalent `kubectl` command line flags (if available).
The Secret type is used to facilitate programmatic handling of the Secret data.
-Kubernetes provides several builtin types for some common usage scenarios.
+Kubernetes provides several built-in types for some common usage scenarios.
These types vary in terms of the validations performed and the constraints
Kubernetes imposes on them.
-->
@@ -1355,10 +1359,10 @@ Kubernetes 提供若干种内置的类型,用于一些常见的使用场景。
针对这些类型,Kubernetes 所执行的合法性检查操作以及对其所实施的限制各不相同。
通过为 Secret 对象的 `type` 字段设置一个非空的字符串值,你也可以定义并使用自己
-Secret 类型。如果 `type` 值为空字符串,则被视为 `Opaque` 类型。
+Secret 类型(如果 `type` 值为空字符串,则被视为 `Opaque` 类型)。
Kubernetes 并不对类型的名称作任何限制。不过,如果你要使用内置类型之一,
@@ -1433,13 +1437,13 @@ empty-secret Opaque 0 2m6s
`DATA` 列显示 Secret 中保存的数据条目个数。
-在这个例子种,`0` 意味着我们刚刚创建了一个空的 Secret。
+在这个例子种,`0` 意味着你刚刚创建了一个空的 Secret。
-Kubernetes 在创建 Pod 时会自动创建一个服务账号 Secret 并自动修改你的 Pod
+Kubernetes 在创建 Pod 时会自动寻找或创建一个服务账号 Secret 并自动修改你的 Pod
以使用该 Secret。该服务账号令牌 Secret 中包含了访问 Kubernetes API
所需要的凭据。
@@ -1511,10 +1515,10 @@ Kubernetes 在创建 Pod 时会自动创建一个服务账号 Secret 并自动
参考 [ServiceAccount](/zh/docs/tasks/configure-pod-container/configure-service-account/)
@@ -1527,12 +1531,11 @@ for information on referencing service account from Pods.
### Docker config Secrets
You can use one of the following `type` values to create a Secret to
-store the credentials for accessing a Docker registry for images.
+store the credentials for accessing a container image registry:
-->
### Docker 配置 Secret {#docker-config-secrets}
-你可以使用下面两种 `type` 值之一来创建 Secret,用以存放访问 Docker 仓库
-来下载镜像的凭据。
+你可以使用下面两种 `type` 值之一来创建 Secret,用以存放用于访问容器鏡像倉庫的凭据:
- `kubernetes.io/dockercfg`
- `kubernetes.io/dockerconfigjson`
@@ -1550,7 +1553,7 @@ Secret 的 `data` 字段中包含名为 `.dockercfg` 的主键,其对应键值
编码的某 `~/.dockercfg` 文件的内容。
当你使用清单文件来创建这两类 Secret 时,API 服务器会检查 `data` 字段中是否
存在所期望的主键,并且验证其中所提供的键值是否是合法的 JSON 数据。
不过,API 服务器不会检查 JSON 数据本身是否是一个合法的 Docker 配置文件内容。
+
+当你没有 Docker 配置文件,或者你想使用 `kubectl` 创建一个 Secret
+来访问容器倉庫时,你可以这样做:
+
```shell
kubectl create secret docker-registry secret-tiger-docker \
--docker-email=tiger@acme.example \
--docker-username=tiger \
- --docker-password=pass113 \
+ --docker-password=pass1234 \
--docker-server=my-registry.example:5000
```
上面的命令创建一个类型为 `kubernetes.io/dockerconfigjson` 的 Secret。
如果你对 `.data.dockerconfigjson` 内容进行转储并执行 base64 解码:
+```shell
+kubectl get secret secret-tiger-docker -o jsonpath='{.data.*}' | base64 -d
+```
+
+
+那么输出等价于这个 JSON 文档(这也是一个有效的 Docker 配置文件):
+
```json
{
"auths": {
"my-registry.example:5000": {
"username": "tiger",
- "password": "pass113",
- "email": "tiger@acme.com",
- "auth": "dGlnZXI6cGFzczExMw=="
+ "password": "pass1234",
+ "email": "tiger@acme.example",
+ "auth": "dGlnZXI6cGFzczEyMzQ="
}
}
}
@@ -1642,15 +1659,15 @@ Anyone who can read that Secret can learn the registry access bearer token.
The `kubernetes.io/basic-auth` type is provided for storing credentials needed
for basic authentication. When using this Secret type, the `data` field of the
-Secret must contain the following two keys:
+Secret must contain one of the following two keys:
-- `username`: the user name for authentication;
-- `password`: the password or token for authentication.
+- `username`: the user name for authentication
+- `password`: the password or token for authentication
-->
### 基本身份认证 Secret {#basic-authentication-secret}
`kubernetes.io/basic-auth` 类型用来存放用于基本身份认证所需的凭据信息。
-使用这种 Secret 类型时,Secret 的 `data` 字段必须包含以下两个键:
+使用这种 Secret 类型时,Secret 的 `data` 字段必须包含以下两个键之一:
- `username`: 用于身份认证的用户名;
- `password`: 用于身份认证的密码或令牌。
@@ -1660,11 +1677,11 @@ Both values for the above two keys are base64 encoded strings. You can, of
course, provide the clear text content using the `stringData` for Secret
creation.
-The following YAML is an example config for a basic authentication Secret:
+The following manifest is an example of a basic authentication Secret:
-->
以上两个键的键值都是 base64 编码的字符串。
当然你也可以在创建 Secret 时使用 `stringData` 字段来提供明文形式的内容。
-下面的 YAML 是基本身份认证 Secret 的一个示例清单:
+以下清单是基本身份验证 Secret 的示例:
```yaml
apiVersion: v1
@@ -1673,13 +1690,13 @@ metadata:
name: secret-basic-auth
type: kubernetes.io/basic-auth
stringData:
- username: admin # kubernetes.io/basic-auth 类型的必需字段
+ username: admin # kubernetes.io/basic-auth 类型的必需字段
password: t0p-Secret # kubernetes.io/basic-auth 类型的必需字段
```
### 启动引导令牌 Secret {#bootstrap-token-secrets}
@@ -1890,11 +1907,11 @@ data:
```
-## Secret 的信息安全问题
+## Secret 的信息安全问题 {#information-security-for-secrets}
尽管 ConfigMap 和 Secret 的工作方式类似,但 Kubernetes 对 Secret 有一些额外的保护。
@@ -2096,7 +2113,7 @@ on that node.
variable configuration so that the other containers do not have access to that
Secret.
-->
-### 针对开发人员的安全性建议
+### 针对开发人员的安全性建议 {#security-recommendations-for-developers}
- 应用在从环境变量或卷中读取了机密信息内容之后仍要对其进行保护。例如,
你的应用应该避免用明文的方式将 Secret 数据写入日志,或者将其传递给不可信的第三方。
@@ -2117,7 +2134,7 @@ on that node.
- When deploying applications that interact with the Secret API, you should
limit access using
[authorization policies](/docs/reference/access-authn-authz/authorization/) such as
- [RBAC]( /docs/reference/access-authn-authz/rbac/).
+ [RBAC](/docs/reference/access-authn-authz/rbac/).
-->
- 部署与 Secret API 交互的应用时,你应该使用 [RBAC](/zh/docs/reference/access-authn-authz/rbac/)
这类[鉴权策略](/zh/docs/reference/access-authn-authz/authorization/)来限制访问。
@@ -2134,7 +2151,7 @@ on that node.
-### 针对集群管理员的安全性建议
+### 针对集群管理员的安全性建议 {#security-recommendations-for-cluster-administrators}
{{< caution >}}
- 保留(使用 Kubernetes API)对集群中所有 Secret 对象执行 `watch` 或 `list` 操作的能力,
这样只有特权级最高、系统级别的组件能够执行这类操作。
@@ -2185,9 +2202,9 @@ Pod 来访问 Secret 的内容。
## {{% heading "whatsnext" %}}
- 学习如何[使用 `kubectl` 管理 Secret](/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl/)
diff --git a/content/zh/docs/concepts/configuration/windows-resource-management.md b/content/zh/docs/concepts/configuration/windows-resource-management.md
new file mode 100644
index 0000000000..1a7d765e59
--- /dev/null
+++ b/content/zh/docs/concepts/configuration/windows-resource-management.md
@@ -0,0 +1,135 @@
+---
+title: Windows 节点的资源管理
+content_type: concept
+weight: 75
+---
+
+
+
+本页概述了 Linux 和 Windows 在资源管理方式上的区别。
+
+
+
+在 Linux 节点上,{{< glossary_tooltip text="cgroup" term_id="cgroup" >}} 用作资源控制的 Pod 边界。
+在这个边界内创建容器以便于隔离网络、进程和文件系统。
+Linux cgroup API 可用于收集 CPU、I/O 和内存使用统计数据。
+
+与此相反,Windows 中每个容器对应一个[**作业对象**](https://docs.microsoft.com/zh-cn/windows/win32/procthread/job-objects),
+与系统命名空间过滤器一起使用,将所有进程包含在一个容器中,提供与主机的逻辑隔离。
+(作业对象是一种 Windows 进程隔离机制,不同于 Kubernetes 提及的 {{< glossary_tooltip term_id="job" text="Job" >}})。
+
+如果没有命名空间过滤,就无法运行 Windows 容器。
+这意味着在主机环境中无法让系统特权生效,因此特权容器在 Windows 上不可用。
+容器不能使用来自主机的标识,因为安全帐户管理器(Security Account Manager,SAM)是独立的。
+
+
+## 内存预留 {#resource-management-memory}
+
+Windows 不像 Linux 一样提供杀手(killer)机制,杀死内存不足的进程。
+Windows 始终将所有用户态内存分配视为虚拟内存,并强制使用页面文件(pagefile)。
+
+Windows 节点不会为容器中运行的进程过量使用内存。
+最终结果是 Windows 不会像 Linux 那样达到内存不足的情况,Windows 将进程页面放到磁盘,
+不会因为内存不足(OOM)而终止进程。
+如果内存配置过量且所有物理内存都已耗尽,则换页性能就会降低。
+
+
+你可以使用 kubelet 的 `--kubelet-reserve` 和/或 `--system-reserve`
+参数设定工作负载的内存使用边界;这些参数负责表示节点上(容器外)的内存用量,并会减少
+[节点可分配(NodeAllocatable)](/zh/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable)内存量。
+在你部署工作负载时,会对容器设置资源限制值。
+这个限制值也会从 `NodeAllocatable` 中减去,并防止调度器在节点已满时增加更多 Pod。
+
+
+{{< note >}}
+当你为 Windows 容器设置内存资源限制时,你应设置一个内存限制但不指定内存请求,
+或将请求值设为等于限制值。
+{{< /note >}}
+
+在 Windows 上,避免过量配置的良好做法是为 kubelet 配置至少 2GiB 的系统预留内存,
+以满足 Windows、Kubernetes 和容器运行时开销。
+
+
+## CPU 预留 {#resource-management-cpu}
+
+为了满足操作系统、容器运行时和 kubelet 等 Kubernetes 主机进程的 CPU 使用量,
+你可以(且应该)从 CPU 总量中预留一定百分比。
+你应该根据节点上可用的 CPU 核数来确定这个 CPU 预留量。
+要决定预留的 CPU 百分比,需确定每个节点的最大 Pod 密度,
+并监控节点上运行的系统服务的 CPU 使用量,然后选择一个满足工作负载需求的值。
+
+
+你可以使用 kubelet 的 `--kubelet-reserve` 和/或 `--system-reserve`
+参数设定工作负载的 CPU 使用边界,以统计节点上(容器外)的 CPU 使用量。
+这会减少 `NodeAllocatable`。
+然后集群范围的调度器在决定放置 Pod 时会考虑这个预留量。
+
+在 Windows 上,kubelet 支持使用命令行标志来设置 kubelet 进程的优先级:`--windows-priorityclass`。
+与 Windows 主机上运行的其他进程相比,此标志允许 kubelet 进程获取更多的 CPU 时间片。
+有关允许值及其含义的更多信息,请访问 [Windows 优先级类](https://docs.microsoft.com/zh-cn/windows/win32/procthread/scheduling-priorities#priority-class)。
+为了确保运行的 Pod 不会耗尽 kubelet 的 CPU 时钟周期,
+要将此标志设置为 `ABOVE_NORMAL_PRIORITY_CLASS` 或更高。
diff --git a/content/zh/docs/concepts/containers/_index.md b/content/zh/docs/concepts/containers/_index.md
index c627f66f1e..d228125420 100644
--- a/content/zh/docs/concepts/containers/_index.md
+++ b/content/zh/docs/concepts/containers/_index.md
@@ -15,16 +15,12 @@ run it.
Containers decouple applications from underlying host infrastructure.
This makes deployment easier in different cloud or OS environments.
-->
-
每个运行的容器都是可重复的;
-包含依赖环境在内的标准,意味着无论您在哪里运行它,您都会得到相同的行为。
+包含依赖环境在内的标准,意味着无论你在哪里运行它都会得到相同的行为。
容器将应用程序从底层的主机设施中解耦。
这使得在不同的云或 OS 环境中部署更加容易。
-
-
-
## 镜像名称 {#image-names}
@@ -57,8 +56,7 @@ Tags let you identify different versions of the same series of images.
如果你不指定仓库的主机名,Kubernetes 认为你在使用 Docker 公共仓库。
-在镜像名称之后,你可以添加一个 _标签(Tag)_ (就像在 `docker` 或 `podman`
-中也在用的那样)。
+在镜像名称之后,你可以添加一个标签(Tag)(与使用 `docker` 或 `podman` 等命令时的方式相同)。
使用标签能让你辨识同一镜像序列中的不同版本。
当使用镜像标签时,如果镜像仓库修改了代码所对应的镜像标签,可能会出现新旧代码混杂在 Pod 中运行的情况。
镜像摘要唯一标识了镜像的特定版本,因此 Kubernetes 每次启动具有指定镜像名称和摘要的容器时,都会运行相同的代码。
-指定一个镜像可以固定你所运行的代码,这样镜像仓库的变化就不会导致版本的混杂。
+通过摘要指定镜像可固定你运行的代码,这样镜像仓库的变化就不会导致版本的混杂。
有一些第三方的[准入控制器](/zh/docs/reference/access-authn-authz/admission-controllers/)
在创建 Pod(和 Pod 模板)时产生变更,这样运行的工作负载就是根据镜像摘要,而不是标签来定义的。
@@ -346,17 +344,12 @@ These options are explained in more detail below.
### 配置 Node 对私有仓库认证
-如果你在节点上运行的是 Docker,你可以配置 Docker
-容器运行时来向私有容器仓库认证身份。
-
-此方法适用于能够对节点进行配置的场合。
+设置凭据的具体说明取决于你选择使用的容器运行时和仓库。
+你应该参考解决方案的文档来获取最准确的信息。
-Docker 将私有仓库的密钥保存在 `$HOME/.dockercfg` 或 `$HOME/.docker/config.json`
-文件中。如果你将相同的文件放在下面所列的搜索路径中,`kubelet` 会在拉取镜像时将其用作凭据
-数据来源:
-
-
-* `{--root-dir:-/var/lib/kubelet}/config.json`
-* `{kubelet 当前工作目录}/config.json`
-* `${HOME}/.docker/config.json`
-* `/.docker/config.json`
-* `{--root-dir:-/var/lib/kubelet}/.dockercfg`
-* `{kubelet 当前工作目录}/.dockercfg`
-* `${HOME}/.dockercfg`
-* `/.dockercfg`
-
-
-{{< note >}}
-你可能不得不为 `kubelet` 进程显式地设置 `HOME=/root` 环境变量。
-{{< /note >}}
-
-
-推荐采用如下步骤来配置节点以便访问私有仓库。以下示例中,在 PC 或笔记本电脑中操作:
-
-
-1. 针对你要使用的每组凭据,运行 `docker login [服务器]` 命令。这会更新
- 你本地环境中的 `$HOME/.docker/config.json` 文件。
-1. 在编辑器中打开查看 `$HOME/.docker/config.json` 文件,确保其中仅包含你要
- 使用的凭据信息。
-1. 获得节点列表;例如:
-
- - 如果想要节点名称:`nodes=$(kubectl get nodes -o jsonpath='{range.items[*].metadata}{.name} {end}')`
-
- - 如果想要节点 IP ,`nodes=$(kubectl get nodes -o jsonpath='{range .items[*].status.addresses[?(@.type=="ExternalIP")]}{.address} {end}')`
-
-1. 将本地的 `.docker/config.json` 拷贝到所有节点,放入如上所列的目录之一:
- - 例如,可以试一下:`for n in $nodes; do scp ~/.docker/config.json root@"$n":/var/lib/kubelet/config.json; done`
-
-
-{{< note >}}
-对于产品环境的集群,可以使用配置管理工具来将这些设置应用到
-你所期望的节点上。
-{{< /note >}}
-
-
-创建使用私有镜像的 Pod 来验证。例如:
-
-```shell
-kubectl apply -f - <
-如果一切顺利,那么一段时间后你可以执行:
-```shell
-kubectl logs private-image-test-1
-```
-然后可以看到命令的输出:
-```
-SUCCESS
-```
-
-
-如果你怀疑命令失败了,你可以运行:
-
-```shell
-kubectl describe pods/private-image-test-1 | grep 'Failed'
-```
-
-
-如果命令确实失败,输出类似于:
-
-```
- Fri, 26 Jun 2015 15:36:13 -0700 Fri, 26 Jun 2015 15:39:13 -0700 19 {kubelet node-i2hq} spec.containers{uses-private-image} failed Failed to pull image "user/privaterepo:v1": Error: image user/privaterepo:v1 not found
-```
-
-
-你必须确保集群中所有节点的 `.docker/config.json` 文件内容相同。
-否则,Pod 会能在一些节点上正常运行而无法在另一些节点上启动。
-例如,如果使用节点自动扩缩,那么每个实例模板都需要包含 `.docker/config.json`,
-或者挂载一个包含该文件的驱动器。
-
-在 `.docker/config.json` 中配置了私有仓库密钥后,所有 Pod 都将能读取私有仓库中的镜像。
+有关配置私有容器镜像仓库的示例,请参阅任务
+[从私有镜像库中提取图像](/zh/docs/tasks/configure-pod-container/pull-image-private-registry)。
+该示例使用 Docker Hub 中的私有注册表。
#### 使用 Docker Config 创建 Secret {#creating-a-secret-with-docker-config}
-运行以下命令,将大写字母代替为合适的值:
+你需要知道用于向仓库进行身份验证的用户名、密码和客户端电子邮件地址,以及它的主机名。
+运行以下命令,注意替换适当的大写值:
```shell
-kubectl create secret docker-registry <名称> \
- --docker-server=DOCKER_REGISTRY_SERVER \
- --docker-username=DOCKER_USER \
- --docker-password=DOCKER_PASSWORD \
- --docker-email=DOCKER_EMAIL
+kubectl create secret docker-registry --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
```
{{< note >}}
建议将 RuntimeClass 写操作(create、update、patch 和 delete)限定于集群管理员使用。
@@ -134,13 +137,13 @@ Overview](/docs/reference/access-authn-authz/authorization/) for more details.
## 使用说明 {#usage}
-一旦完成集群中 RuntimeClasses 的配置,使用起来非常方便。
-在 Pod spec 中指定 `runtimeClassName` 即可。例如:
+一旦完成集群中 RuntimeClasses 的配置,
+你可以在 Pod spec 中指定 `runtimeClassName` 来使用它。例如:
```yaml
apiVersion: v1
@@ -156,13 +159,13 @@ spec:
This will instruct the kubelet to use the named RuntimeClass to run this pod. If the named
RuntimeClass does not exist, or the CRI cannot run the corresponding handler, the pod will enter the
`Failed` terminal [phase](/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase). Look for a
-corresponding [event](/docs/tasks/debug-application-cluster/debug-application-introspection/) for an
+corresponding [event](/docs/tasks/debug/debug-application/debug-running-pod/) for an
error message.
-->
这一设置会告诉 kubelet 使用所指的 RuntimeClass 来运行该 pod。
如果所指的 RuntimeClass 不存在或者 CRI 无法运行相应的 handler,
那么 pod 将会进入 `Failed` 终止[阶段](/zh/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase)。
-你可以查看相应的[事件](/zh/docs/tasks/debug-application-cluster/debug-application-introspection/),
+你可以查看相应的[事件](/zh/docs/tasks/debug/debug-application/debug-running-pod/),
获取执行过程中的错误信息。
-Dockershim 自 Kubernetes v1.20 起已弃用,并将在 v1.24 中删除。
-有关弃用的更多信息查看 [dockershim 弃用](/blog/2020/12/08/kubernetes-1-20-release-announcement/#dockershim-deprecation)。
-
-
-为 dockershim 设置 RuntimeClass 时,必须将运行时处理程序设置为 `docker`。
-Dockershim 不支持自定义的可配置的运行时处理程序。
-
-#### [containerd](https://containerd.io/)
+#### {{< glossary_tooltip term_id="containerd" >}}
-更详细信息,请查阅 containerd 配置文档:
-https://github.com/containerd/cri/blob/master/docs/config.md
+更详细信息,请查阅 containerd 的[配置指南](https://github.com/containerd/cri/blob/master/docs/config.md)
#### [cri-o](https://cri-o.io/)
@@ -279,8 +263,8 @@ by each.
与 `nodeSelector` 一样,tolerations 也在 admission 阶段与 pod 的 tolerations 合并,取二者的并集。
更多有关 node selector 和 tolerations 的配置信息,请查阅
[将 Pod 分派到节点](/zh/docs/concepts/scheduling-eviction/assign-pod-node/)。
@@ -290,26 +274,21 @@ Nodes](/docs/concepts/configuration/assign-pod-node/).
-->
### Pod 开销 {#pod-overhead}
-{{< feature-state for_k8s_version="v1.18" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
你可以指定与运行 Pod 相关的 _开销_ 资源。声明开销即允许集群(包括调度器)在决策 Pod 和资源时将其考虑在内。
-若要使用 Pod 开销特性,你必须确保 PodOverhead
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
-处于启用状态(默认为启用状态)。
Pod 开销通过 RuntimeClass 的 `overhead` 字段定义。
-通过使用这些字段,你可以指定使用该 RuntimeClass 运行 Pod 时的开销并确保 Kubernetes 将这些开销计算在内。
+通过使用这个字段,你可以指定使用该 RuntimeClass 运行 Pod 时的开销并确保 Kubernetes 将这些开销计算在内。
## {{% heading "whatsnext" %}}
diff --git a/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md b/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md
index 13ea71b7e0..c1f94153e0 100644
--- a/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md
+++ b/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins.md
@@ -40,7 +40,7 @@ The kubelet exports a `Registration` gRPC service:
```gRPC
service Registration {
- rpc Register(RegisterRequest) returns (Empty) {}
+ rpc Register(RegisterRequest) returns (Empty) {}
}
```
@@ -78,16 +78,17 @@ to advertise that the node has 2 "Foo" devices installed and available.
"Foo" 设备并且是可用的。
-然后用户需要请求其他类型的资源的时候,就可以在
-[Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core)
-规范请求这类设备,但是有以下的限制:
+然后,用户可以请求设备作为 Pod 规范的一部分,
+参见[Container](/zh/docs/reference/kubernetes-api/workload-resources/pod-v1/#Container)。
+请求扩展资源类似于管理请求和限制的方式,
+其他资源,有以下区别:
* 扩展资源仅可作为整数资源使用,并且不能被过量使用
* 设备不能在容器之间共享
@@ -423,7 +424,14 @@ below:
{{< feature-state state="beta" for_k8s_version="v1.23" >}}
+端点 `GetAllocatableResources` 提供工作节点上原始可用的资源信息。
+此端点所提供的信息比导出给 API 服务器的信息更丰富。
+
{{< note >}}
+
-{{< note >}}
`GetAllocatableResources` 应该仅被用于评估一个节点上的[可分配的](/zh/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable)
资源。如果目标是评估空闲/未分配的资源,此调用应该与 List() 端点一起使用。
除非暴露给 kubelet 的底层资源发生变化 否则 `GetAllocatableResources` 得到的结果将保持不变。
@@ -443,12 +449,6 @@ update and Kubelet needs to be restarted to reflect the correct resource capacit
Kubelet 需要重新启动以获取正确的资源容量和可分配的资源。
{{< /note >}}
-
-端点 `GetAllocatableResources` 提供最初在工作节点上可用的资源的信息。
-此端点所提供的信息比导出给 API 服务器的信息更丰富。
```gRPC
// AllocatableResourcesResponses 包含 kubelet 所了解到的所有设备的信息
@@ -496,7 +496,7 @@ DaemonSet, `/var/lib/kubelet/pod-resources` must be mounted as a
{{< glossary_tooltip term_id="volume" >}} in the device monitoring agent's
[PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core).
-Support for the "PodResourcesLister service" requires `KubeletPodResources` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) to be enabled.
+Support for the `PodResourcesLister service` requires `KubeletPodResources` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) to be enabled.
It is enabled by default starting with Kubernetes 1.15 and is v1 since Kubernetes 1.20.
-->
gRPC 服务通过 `/var/lib/kubelet/pod-resources/kubelet.sock` 的 UNIX 套接字来提供服务。
@@ -568,8 +568,6 @@ Here are some examples of device plugin implementations:
* The [AMD GPU device plugin](https://github.com/RadeonOpenCompute/k8s-device-plugin)
* The [Intel device plugins](https://github.com/intel/intel-device-plugins-for-kubernetes) for Intel GPU, FPGA and QuickAssist devices
* The [KubeVirt device plugins](https://github.com/kubevirt/kubernetes-device-plugins) for hardware-assisted virtualization
-* The [NVIDIA GPU device plugin](https://github.com/NVIDIA/k8s-device-plugin)
- * Requires [nvidia-docker](https://github.com/NVIDIA/nvidia-docker) 2.0, which allows you to run GPU-enabled Docker containers.
* The [NVIDIA GPU device plugin for Container-Optimized OS](https://github.com/GoogleCloudPlatform/container-engine-accelerators/tree/master/cmd/nvidia_gpu)
* The [RDMA device plugin](https://github.com/hustcat/k8s-rdma-device-plugin)
* The [Solarflare device plugin](https://github.com/vikaschoudhary16/sfc-device-plugin)
@@ -583,8 +581,6 @@ Here are some examples of device plugin implementations:
* [AMD GPU 设备插件](https://github.com/RadeonOpenCompute/k8s-device-plugin)
* [Intel 设备插件](https://github.com/intel/intel-device-plugins-for-kubernetes) 支持 Intel GPU、FPGA 和 QuickAssist 设备
* [KubeVirt 设备插件](https://github.com/kubevirt/kubernetes-device-plugins) 用于硬件辅助的虚拟化
-* The [NVIDIA GPU 设备插件](https://github.com/NVIDIA/k8s-device-plugin)
-* 需要 [nvidia-docker](https://github.com/NVIDIA/nvidia-docker) 2.0,以允许运行 Docker 容器的时候启用 GPU。
* [为 Container-Optimized OS 所提供的 NVIDIA GPU 设备插件](https://github.com/GoogleCloudPlatform/container-engine-accelerators/tree/master/cmd/nvidia_gpu)
* [RDMA 设备插件](https://github.com/hustcat/k8s-rdma-device-plugin)
* [SocketCAN 设备插件](https://github.com/collabora/k8s-socketcan)
@@ -597,10 +593,10 @@ Here are some examples of device plugin implementations:
* 查看[调度 GPU 资源](/zh/docs/tasks/manage-gpus/scheduling-gpus/) 来学习使用设备插件
* 查看在上如何[公布节点上的扩展资源](/zh/docs/tasks/administer-cluster/extended-resource-node/)
-* 阅读如何在 Kubernetes 中使用 [TLS Ingress 的硬件加速](https://kubernetes.io/blog/2019/04/24/hardware-accelerated-ssl/tls-termination-in-ingress-controllers-using-kubernetes-device-plugins-and-runtimeclass/)
* 学习[拓扑管理器](/zh/docs/tasks/administer-cluster/topology-manager/)
+* 阅读如何在 Kubernetes 中使用 [TLS Ingress 的硬件加速](/zh/blog/2019/04/24/hardware-accelerated-ssl/tls-termination-in-ingress-controllers-using-kubernetes-device-plugins-and-runtimeclass/)
diff --git a/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md b/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md
index c06b1c54d7..ab63e7eb85 100644
--- a/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md
+++ b/content/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins.md
@@ -12,37 +12,40 @@ weight: 10
-
-Kubernetes中的网络插件有几种类型:
+Kubernetes {{< skew currentVersion >}} 支持[容器网络接口](https://github.com/containernetworking/cni) (CNI) 集群网络插件。
+你必须使用和你的集群相兼容并且满足你的需求的 CNI 插件。
+在更广泛的 Kubernetes 生态系统中你可以使用不同的插件(开源和闭源)。
-* CNI 插件:遵守[容器网络接口(Container Network Interface,CNI)](https://github.com/containernetworking/cni)
- 规范,其设计上偏重互操作性。
- * Kubernetes 遵从 CNI 规范的
- [v0.4.0](https://github.com/containernetworking/cni/blob/spec-v0.4.0/SPEC.md)
- 版本。
-* Kubenet 插件:使用 `bridge` 和 `host-local` CNI 插件实现了基本的 `cbr0`。
+
+你必须使用与 [v0.4.0](https://github.com/containernetworking/cni/blob/spec-v0.4.0/SPEC.md)
+或更高版本的 CNI 规范相符合的 CNI 插件。
+Kubernetes 推荐使用一个兼容 [v1.0.0](https://github.com/containernetworking/cni/blob/spec-v1.0.0/SPEC.md)
+CNI 规范的插件(插件可以兼容多个规范版本)。
## 安装
-kubelet 有一个单独的默认网络插件,以及一个对整个集群通用的默认网络。
-它在启动时探测插件,记住找到的内容,并在 Pod 生命周期的适当时间执行
-所选插件(这仅适用于 Docker,因为 CRI 管理自己的 CNI 插件)。
+CNI 插件需要实现 [Kubernetes 网络模型](/zh/docs/concepts/services-networking/#the-kubernetes-network-model)。
+CRI 管理它自己的 CNI 插件。
在使用插件时,需要记住两个 kubelet 命令行参数:
* `cni-bin-dir`: kubelet 在启动时探测这个目录中的插件
@@ -213,88 +216,16 @@ metadata:
kubernetes.io/egress-bandwidth: 1M
...
```
-
-
-### kubenet
-
-Kubenet 是一个非常基本的、简单的网络插件,仅适用于 Linux。
-它本身并不实现更高级的功能,如跨节点网络或网络策略。
-它通常与云驱动一起使用,云驱动为节点间或单节点环境中的通信设置路由规则。
-
-Kubenet 创建名为 `cbr0` 的网桥,并为每个 pod 创建了一个 veth 对,
-每个 Pod 的主机端都连接到 `cbr0`。
-这个 veth 对的 Pod 端会被分配一个 IP 地址,该 IP 地址隶属于节点所被分配的 IP
-地址范围内。节点的 IP 地址范围则通过配置或控制器管理器来设置。
-`cbr0` 被分配一个 MTU,该 MTU 匹配主机上已启用的正常接口的最小 MTU。
-
-使用此插件还需要一些其他条件:
-
-* 需要标准的 CNI `bridge`、`lo` 以及 `host-local` 插件,最低版本是0.2.0。
- kubenet 首先在 `/opt/cni/bin` 中搜索它们。 指定 `cni-bin-dir` 以提供
- 其它搜索路径。首次找到的匹配将生效。
-* Kubelet 必须和 `--network-plugin=kubenet` 参数一起运行,才能启用该插件。
-* Kubelet 还应该和 `--non-masquerade-cidr=` 参数一起运行,
- 以确保超出此范围的 IP 流量将使用 IP 伪装。
-* 节点必须被分配一个 IP 子网,通过kubelet 命令行的 `--pod-cidr` 选项或
- 控制器管理器的命令行选项 `--allocate-node-cidrs=true --cluster-cidr=`
- 来设置。
-
-
-### 自定义 MTU(使用 kubenet)
-
-要获得最佳的网络性能,必须确保 MTU 的取值配置正确。
-网络插件通常会尝试推断出一个合理的 MTU,但有时候这个逻辑不会产生一个最优的 MTU。
-例如,如果 Docker 网桥或其他接口有一个小的 MTU, kubenet 当前将选择该 MTU。
-或者如果你正在使用 IPSEC 封装,则必须减少 MTU,并且这种计算超出了大多数网络插件的能力范围。
-
-如果需要,你可以使用 `network-plugin-mtu` kubelet 选项显式的指定 MTU。
-例如:在 AWS 上 `eth0` MTU 通常是 9001,因此你可以指定 `--network-plugin-mtu=9001`。
-如果你正在使用 IPSEC ,你可以减少它以允许封装开销,例如 `--network-plugin-mtu=8873`。
-
-此选项会传递给网络插件; 当前 **仅 kubenet 支持 `network-plugin-mtu`**。
-
## 用法总结
* `--network-plugin=cni` 用来表明我们要使用 `cni` 网络插件,实际的 CNI 插件
可执行文件位于 `--cni-bin-dir`(默认是 `/opt/cni/bin`)下, CNI 插件配置位于
`--cni-conf-dir`(默认是 `/etc/cni/net.d`)下。
-* `--network-plugin=kubenet` 用来表明我们要使用 `kubenet` 网络插件,CNI `bridge`,`lo`
- 和 `host-local` 插件位于 `/opt/cni/bin` 或 `cni-bin-dir` 中。
-* `--network-plugin-mtu=9001` 指定了我们使用的 MTU,当前仅被 `kubenet` 网络插件使用。
## {{% heading "whatsnext" %}}
diff --git a/content/zh/docs/concepts/overview/components.md b/content/zh/docs/concepts/overview/components.md
index fd359fc1ce..023de08457 100644
--- a/content/zh/docs/concepts/overview/components.md
+++ b/content/zh/docs/concepts/overview/components.md
@@ -33,10 +33,10 @@ a complete and working Kubernetes cluster.
-->
-当你部署完 Kubernetes, 即拥有了一个完整的集群。
+当你部署完 Kubernetes,便拥有了一个完整的集群。
{{< glossary_definition term_id="cluster" length="all" prepend="一个 Kubernetes">}}
-本文档概述了交付正常运行的 Kubernetes 集群所需的各种组件。
+本文档概述了一个正常运行的 Kubernetes 集群所需的各种组件。
{{< figure src="/images/docs/components-of-kubernetes.svg" alt="Kubernetes 的组件" caption="Kubernetes 集群的组件" class="diagram-large" >}}
@@ -49,8 +49,9 @@ The control plane's components make global decisions about the cluster (for exam
-->
## 控制平面组件(Control Plane Components) {#control-plane-components}
-控制平面的组件对集群做出全局决策(比如调度),以及检测和响应集群事件(例如,当不满足部署的
-`replicas` 字段时,启动新的 {{< glossary_tooltip text="pod" term_id="pod">}})。
+控制平面组件会为集群做出全局决策,比如资源的调度。
+以及检测和响应集群事件,例如当不满足部署的 `replicas` 字段时,
+要启动新的 {{< glossary_tooltip text="pod" term_id="pod">}})。
-这些控制器包括:
+这些控制器包括:
-* 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应
-* 任务控制器(Job controller): 监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
-* 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)
-* 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌
+* 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应
+* 任务控制器(Job Controller):监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
+* 端点控制器(Endpoints Controller):填充端点(Endpoints)对象(即加入 Service 与 Pod)
+* 服务帐户和令牌控制器(Service Account & Token Controllers):为新的命名空间创建默认帐户和 API 访问令牌
### 容器资源监控
-[容器资源监控](/zh/docs/tasks/debug-application-cluster/resource-usage-monitoring/)
+[容器资源监控](/zh/docs/tasks/debug/debug-cluster/resource-usage-monitoring/)
将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供用于浏览这些数据的界面。
-Kubernetes v1.23 提供将其 API 以 OpenAPI v3 形式发布的初始支持;这一功能特性处于 Alpha
-状态,默认被禁用。
-你可以通过为 kube-apiserver 组件启用 `OpenAPIV3`
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)来启用此
-Alpha 特性。
+Kubernetes {{< param "version" >}} 提供将其 API 以 OpenAPI v3 形式发布的 beta 支持;
+这一功能特性处于 beta 状态,默认被开启。
+你可以通过为 kube-apiserver 组件关闭 `OpenAPIV3`
+[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)来禁用此 beta 特性。
-特性被启用时,Kubernetes API 服务器会在端点 `/openapi/v3/apis//`
-提供按 Kubernetes 组版本聚合的 OpenAPI v3 规范。
+发现端点 `/openapi/v3` 被提供用来查看可用的所有组、版本列表。
+此列表仅返回 JSON。这些组、版本以下面的格式提供:
+```json
+{
+ "paths": {
+ ...
+ "api/v1": {
+ "serverRelativeURL": "/openapi/v3/api/v1?hash=CC0E9BFD992D8C59AEC98A1E2336F899E8318D3CF4C68944C3DEC640AF5AB52D864AC50DAA8D145B3494F75FA3CFF939FCBDDA431DAD3CA79738B297795818CF"
+ },
+ "apis/admissionregistration.k8s.io/v1": {
+ "serverRelativeURL": "/openapi/v3/apis/admissionregistration.k8s.io/v1?hash=E19CC93A116982CE5422FC42B590A8AFAD92CDE9AE4D59B5CAAD568F083AD07946E6CB5817531680BCE6E215C16973CD39003B0425F3477CFD854E89A9DB6597"
+ },
+ ...
+}
+```
+
+
+为了改进客户端缓存,相对的 URL 会指向不可变的 OpenAPI 描述。
+为了此目的,API 服务器也会设置正确的 HTTP 缓存标头
+(`Expires` 为未来 1 年,和 `Cache-Control` 为 `immutable`)。
+当一个过时的 URL 被使用时,API 服务器会返回一个指向最新 URL 的重定向。
+
+
+Kubernetes API 服务器会在端点 `/openapi/v3/apis//?hash=`
+发布一个 Kubernetes 组版本的 OpenAPI v3 规范。
+
请参阅下表了解可接受的请求头部。
@@ -201,13 +235,6 @@ table below for accepted request headers.
-
-发现端点 `/openapi/v3` 被提供用来查看可用的所有组、版本列表。
-此列表仅返回 JSON。
-
-Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。
-Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。
+Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。
+Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。
**Kubernetes** 这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。
-Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在
-[Google 在大规模运行生产工作负载方面拥有十几年的经验](https://research.google/pubs/pub43438)
-的基础上,结合了社区中最好的想法和实践。
+Google 在 2014 年开源了 Kubernetes 项目。
+Kubernetes 建立在[Google 大规模运行生产工作负载十几年经验](https://research.google/pubs/pub43438)的基础上,
+结合了社区中最优秀的想法和实践。
-## 时光回溯
+## 时光回溯 {#going-back-in-time}
-让我们回顾一下为什么 Kubernetes 如此有用。
+让我们回顾一下为何 Kubernetes 能够裨益四方。
**传统部署时代:**
-早期,各个组织机构在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。
-例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,
-结果可能导致其他应用程序的性能下降。
-一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,
-并且维护许多物理服务器的成本很高。
+早期,各机构是在物理服务器上运行应用程序。
+由于无法限制在物理服务器中运行的应用程序资源使用,因此会导致资源分配问题。
+例如,如果在物理服务器上运行多个应用程序,
+则可能会出现一个应用程序占用大部分资源的情况,而导致其他应用程序的性能下降。
+一种解决方案是将每个应用程序都运行在不同的物理服务器上,
+但是当某个应用程式资源利用率不高时,剩余资源无法被分配给其他应用程式,
+而且维护许多物理服务器的成本很高。
**虚拟化部署时代:**
-作为解决方案,引入了虚拟化。虚拟化技术允许你在单个物理服务器的 CPU 上运行多个虚拟机(VM)。
-虚拟化允许应用程序在 VM 之间隔离,并提供一定程度的安全,因为一个应用程序的信息
-不能被另一应用程序随意访问。
+因此,虚拟化技术被引入了。虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机(VM)。
+虚拟化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性,
+因为一个应用程序的信息不能被另一应用程序随意访问。
-虚拟化技术能够更好地利用物理服务器上的资源,并且因为可轻松地添加或更新应用程序
-而可以实现更好的可伸缩性,降低硬件成本等等。
+虚拟化技术能够更好地利用物理服务器的资源,并且因为可轻松地添加或更新应用程序,
+而因此可以具有更高的可伸缩性,以及降低硬件成本等等的好处。
-每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。
+每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统(OS)。
**容器部署时代:**
-容器类似于 VM,但是它们具有被放宽的隔离属性,可以在应用程序之间共享操作系统(OS)。
-因此,容器被认为是轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。
+容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操作系统(OS)。
+因此,容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间等。
由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。
* 敏捷应用程序的创建和部署:与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率。
-* 持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性),支持可靠且频繁的
- 容器镜像构建和部署。
-* 关注开发与运维的分离:在构建/发布时而不是在部署时创建应用程序容器镜像,
+* 持续开发、集成和部署:通过快速简单的回滚(由于镜像不可变性),
+ 提供可靠且频繁的容器镜像构建和部署。
+* 关注开发与运维的分离:在构建、发布时创建应用程序容器镜像,而不是在部署时,
从而将应用程序与基础架构分离。
-* 可观察性:不仅可以显示操作系统级别的信息和指标,还可以显示应用程序的运行状况和其他指标信号。
-* 跨开发、测试和生产的环境一致性:在便携式计算机上与在云中相同地运行。
+* 可观察性:不仅可以显示 OS 级别的信息和指标,还可以显示应用程序的运行状况和其他指标信号。
+* 跨开发、测试和生产的环境一致性:在笔记本计算机上也可以和在云中运行一样的应用程序。
* 跨云和操作系统发行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、
Google Kubernetes Engine 和其他任何地方运行。
-* 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在
- OS 上运行应用程序。
+* 以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程序。
* 松散耦合、分布式、弹性、解放的微服务:应用程序被分解成较小的独立部分,
并且可以动态部署和管理 - 而不是在一台大型单机上整体运行。
* 资源隔离:可预测的应用程序性能。
@@ -134,18 +135,20 @@ Containers are becoming popular because they have many benefits. Some of the con
-## 为什么需要 Kubernetes,它能做什么?
+## 为什么需要 Kubernetes,它能做什么? {#why-you-need-kubernetes-and-what-can-it-do}
-容器是打包和运行应用程序的好方式。在生产环境中,你需要管理运行应用程序的容器,并确保不会停机。
-例如,如果一个容器发生故障,则需要启动另一个容器。如果系统处理此行为,会不会更容易?
+容器是打包和运行应用程序的好方式。在生产环境中,
+你需要管理运行着应用程序的容器,并确保服务不会下线。
+例如,如果一个容器发生故障,则你需要启动另一个容器。
+如果此行为交由给系统处理,是不是会更容易一些?
-这就是 Kubernetes 来解决这些问题的方法!
+这就是 Kubernetes 要来做的事情!
Kubernetes 为你提供了一个可弹性运行分布式系统的框架。
Kubernetes 会满足你的扩展要求、故障转移、部署模式等。
例如,Kubernetes 可以轻松管理系统的 Canary 部署。
@@ -161,7 +164,8 @@ Kubernetes can expose a container using the DNS name or using their own IP addre
-->
* **服务发现和负载均衡**
- Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大,
+ Kubernetes 可以使用 DNS 名称或自己的 IP 地址来曝露容器。
+ 如果进入容器的流量很大,
Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
* **自动部署和回滚**
- 你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态
- 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器,
+ 你可以使用 Kubernetes 描述已部署容器的所需状态,
+ 它可以以受控的速率将实际状态更改为期望状态。
+ 例如,你可以自动化 Kubernetes 来为你的部署创建新容器,
删除现有容器并将它们的所有资源用于新容器。
* **自我修复**
- Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的
- 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。
+ Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,
+ 并且在准备好服务之前不将其通告给客户端。
-## Kubernetes 不是什么
+## Kubernetes 不是什么 {#what-kubernetes-is-not}
Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)系统。
-由于 Kubernetes 在容器级别而不是在硬件级别运行,它提供了 PaaS 产品共有的一些普遍适用的功能,
+由于 Kubernetes 是在容器级别运行,而非在硬件级别,
+它提供了 PaaS 产品共有的一些普遍适用的功能,
例如部署、扩展、负载均衡、日志记录和监视。
-但是,Kubernetes 不是单体系统,默认解决方案都是可选和可插拔的。
-Kubernetes 提供了构建开发人员平台的基础,但是在重要的地方保留了用户的选择和灵活性。
+但是,Kubernetes 不是单体式(monolithic)系统,那些默认解决方案都是可选、可插拔的。
+Kubernetes 为构建开发人员平台提供了基础,但是在重要的地方保留了用户选择权,能有更高的灵活性。
-* 不要求日志记录、监视或警报解决方案。
- 它提供了一些集成作为概念证明,并提供了收集和导出指标的机制。
-* 不提供或不要求配置语言/系统(例如 jsonnet),它提供了声明性 API,
+* 不是日志记录、监视或警报的解决方案。
+ 它集成了一些功能作为概念证明,并提供了收集和导出指标的机制。
+* 不提供也不要求配置用的语言、系统(例如 jsonnet),它提供了声明性 API,
该声明性 API 可以由任意形式的声明性规范所构成。
* 不提供也不采用任何全面的机器配置、维护、管理或自我修复系统。
* 此外,Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要。
编排的技术定义是执行已定义的工作流程:首先执行 A,然后执行 B,再执行 C。
- 相比之下,Kubernetes 包含一组独立的、可组合的控制过程,
- 这些过程连续地将当前状态驱动到所提供的所需状态。
- 如何从 A 到 C 的方式无关紧要,也不需要集中控制,这使得系统更易于使用
- 且功能更强大、系统更健壮、更为弹性和可扩展。
+ 而 Kubernetes 包含了一组独立可组合的控制过程,
+ 可以连续地将当前状态驱动到所提供的预期状态。
+ 你不需要在乎如何从 A 移动到 C,也不需要集中控制,这使得系统更易于使用
+ 且功能更强大、系统更健壮,更为弹性和可扩展。
## {{% heading "whatsnext" %}}
@@ -267,5 +273,5 @@ Kubernetes:
* Take a look at the [Kubernetes Components](/docs/concepts/overview/components/)
* Ready to [Get Started](/docs/setup/)?
-->
-* 查阅 [Kubernetes 组件](/zh/docs/concepts/overview/components/)
-* 开始 [Kubernetes 入门](/zh/docs/setup/)?
+* 查阅[Kubernetes 组件](/zh/docs/concepts/overview/components/)
+* 开始[Kubernetes 的建置](/zh/docs/setup/)吧!
diff --git a/content/zh/docs/concepts/overview/working-with-objects/annotations.md b/content/zh/docs/concepts/overview/working-with-objects/annotations.md
index 053fbbc341..4d2ff7fc6f 100644
--- a/content/zh/docs/concepts/overview/working-with-objects/annotations.md
+++ b/content/zh/docs/concepts/overview/working-with-objects/annotations.md
@@ -37,7 +37,7 @@ Annotations, like labels, are key/value maps:
标签可以用来选择对象和查找满足某些条件的对象集合。 相反,注解不用于标识和选择对象。
注解中的元数据,可以很小,也可以很大,可以是结构化的,也可以是非结构化的,能够包含标签不允许的字符。
-注解和标签一样,是键/值对:
+注解和标签一样,是键/值对:
```json
"metadata": {
@@ -60,7 +60,7 @@ Map 中的键和值必须是字符串。
-以下是一些例子,用来说明哪些信息可以使用注解来记录:
+以下是一些例子,用来说明哪些信息可以使用注解来记录:
-`kubernetes.io/` 和 `k8s.io/` 前缀是为Kubernetes核心组件保留的。
+`kubernetes.io/` 和 `k8s.io/` 前缀是为 Kubernetes 核心组件保留的。
例如,下面是一个 Pod 的配置文件,其注解中包含 `imageregistry: https://hub.docker.com/`:
diff --git a/content/zh/docs/concepts/overview/working-with-objects/common-labels.md b/content/zh/docs/concepts/overview/working-with-objects/common-labels.md
index 2fbf964b27..629c3ca7da 100644
--- a/content/zh/docs/concepts/overview/working-with-objects/common-labels.md
+++ b/content/zh/docs/concepts/overview/working-with-objects/common-labels.md
@@ -15,7 +15,8 @@ You can visualize and manage Kubernetes objects with more tools than kubectl and
the dashboard. A common set of labels allows tools to work interoperably, describing
objects in a common manner that all tools can understand.
-->
-除了 kubectl 和 dashboard 之外,您可以使用其他工具来可视化和管理 Kubernetes 对象。一组通用的标签可以让多个工具之间相互操作,用所有工具都能理解的通用方式描述对象。
+除了 kubectl 和 dashboard 之外,你可以使用其他工具来可视化和管理 Kubernetes 对象。
+一组通用的标签可以让多个工具之间相互操作,用所有工具都能理解的通用方式描述对象。
-使用 MySQL `StatefulSet` 和 `Service`,您会注意到有关 MySQL 和 Wordpress 的信息,包括更广泛的应用程序。
+使用 MySQL `StatefulSet` 和 `Service`,你会注意到有关 MySQL 和 Wordpress 的信息,包括更广泛的应用程序。
diff --git a/content/zh/docs/concepts/overview/working-with-objects/field-selectors.md b/content/zh/docs/concepts/overview/working-with-objects/field-selectors.md
index 58a4b65163..f5a78976da 100644
--- a/content/zh/docs/concepts/overview/working-with-objects/field-selectors.md
+++ b/content/zh/docs/concepts/overview/working-with-objects/field-selectors.md
@@ -10,7 +10,7 @@ weight: 60
-_字段选择器(Field selectors_)允许你根据一个或多个资源字段的值
+“字段选择器(Field selectors)”允许你根据一个或多个资源字段的值
[筛选 Kubernetes 资源](/zh/docs/concepts/overview/working-with-objects/kubernetes-objects)。
下面是一些使用字段选择器查询的例子:
@@ -31,7 +31,7 @@ kubectl get pods --field-selector status.phase=Running
Field selectors are essentially resource *filters*. By default, no selectors/filters are applied, meaning that all resources of the specified type are selected. This makes the following `kubectl` queries equivalent:
-->
{{< note >}}
-字段选择器本质上是资源*过滤器(Filters)*。默认情况下,字段选择器/过滤器是未被应用的,
+字段选择器本质上是资源“过滤器(Filters)”。默认情况下,字段选择器/过滤器是未被应用的,
这意味着指定类型的所有资源都会被筛选出来。
这使得以下的两个 `kubectl` 查询是等价的:
@@ -67,7 +67,7 @@ You can use the `=`, `==`, and `!=` operators with field selectors (`=` and `==`
-->
## 支持的操作符 {#supported-operators}
-你可在字段选择器中使用 `=`、`==`和 `!=` (`=` 和 `==` 的意义是相同的)操作符。
+你可在字段选择器中使用 `=`、`==` 和 `!=` (`=` 和 `==` 的意义是相同的)操作符。
例如,下面这个 `kubectl` 命令将筛选所有不属于 `default` 命名空间的 Kubernetes 服务:
```shell
diff --git a/content/zh/docs/concepts/overview/working-with-objects/finalizers.md b/content/zh/docs/concepts/overview/working-with-objects/finalizers.md
index 88bcad1413..6a0a784fcf 100644
--- a/content/zh/docs/concepts/overview/working-with-objects/finalizers.md
+++ b/content/zh/docs/concepts/overview/working-with-objects/finalizers.md
@@ -121,7 +121,7 @@ longer than expected without being fully deleted. In these situations, you
should check finalizers and owner references on the target owner and dependent
objects to troubleshoot the cause.
-->
-Job 控制器还为这些 Pod 添加了*属主引用*,指向创建 Pod 的 Job。
+Job 控制器还为这些 Pod 添加了“属主引用”,指向创建 Pod 的 Job。
如果你在这些 Pod 运行的时候删除了 Job,
Kubernetes 会使用属主引用(而不是标签)来确定集群中哪些 Pod 需要清理。
diff --git a/content/zh/docs/concepts/overview/working-with-objects/kubernetes-objects.md b/content/zh/docs/concepts/overview/working-with-objects/kubernetes-objects.md
index 8d320064d1..23afa65eab 100644
--- a/content/zh/docs/concepts/overview/working-with-objects/kubernetes-objects.md
+++ b/content/zh/docs/concepts/overview/working-with-objects/kubernetes-objects.md
@@ -121,7 +121,7 @@ Here's an example `.yaml` file that shows the required fields and object spec fo
创建 Kubernetes 对象时,必须提供对象的规约,用来描述该对象的期望状态,
以及关于对象的一些基本信息(例如名称)。
-当使用 Kubernetes API 创建对象时(或者直接创建,或者基于`kubectl`),
+当使用 Kubernetes API 创建对象时(或者直接创建,或者基于 `kubectl`),
API 请求必须在请求体中包含 JSON 格式的信息。
**大多数情况下,需要在 .yaml 文件中为 `kubectl` 提供这些信息**。
`kubectl` 在发起 API 请求时,将这些信息转换成 JSON 格式。
@@ -135,7 +135,7 @@ One way to create a Deployment using a `.yaml` file like the one above is to use
[`kubectl apply`](/docs/reference/generated/kubectl/kubectl-commands#apply) command
in the `kubectl` command-line interface, passing the `.yaml` file as an argument. Here's an example:
-->
-使用类似于上面的 `.yaml` 文件来创建 Deployment的一种方式是使用 `kubectl` 命令行接口(CLI)中的
+使用类似于上面的 `.yaml` 文件来创建 Deployment 的一种方式是使用 `kubectl` 命令行接口(CLI)中的
[`kubectl apply`](/docs/reference/generated/kubectl/kubectl-commands#apply) 命令,
将 `.yaml` 文件作为参数。下面是一个示例:
diff --git a/content/zh/docs/concepts/overview/working-with-objects/labels.md b/content/zh/docs/concepts/overview/working-with-objects/labels.md
index 34b9fe0f6b..a1840bacbd 100644
--- a/content/zh/docs/concepts/overview/working-with-objects/labels.md
+++ b/content/zh/docs/concepts/overview/working-with-objects/labels.md
@@ -40,7 +40,7 @@ and CLIs. Non-identifying information should be recorded using
[annotations](/docs/concepts/overview/working-with-objects/annotations/).
-->
标签能够支持高效的查询和监听操作,对于用户界面和命令行是很理想的。
-应使用[注解](/zh/docs/concepts/overview/working-with-objects/annotations/) 记录非识别信息。
+应使用[注解](/zh/docs/concepts/overview/working-with-objects/annotations/)记录非识别信息。
@@ -72,7 +72,7 @@ Example labels:
-有一些[常用标签](/zh/docs/concepts/overview/working-with-objects/common-labels/)的例子; 你可以任意制定自己的约定。
+有一些[常用标签](/zh/docs/concepts/overview/working-with-objects/common-labels/)的例子;你可以任意制定自己的约定。
请记住,标签的 Key 对于给定对象必须是唯一的。
@@ -238,14 +239,15 @@ Similarly the comma separator acts as an _AND_ operator. So filtering resources
* 第二个示例选择了所有键等于 `tier` 并且值不等于 `frontend` 或者 `backend` 的资源,以及所有没有 `tier` 键标签的资源。
* 第三个示例选择了所有包含了有 `partition` 标签的资源;没有校验它的值。
* 第四个示例选择了所有没有 `partition` 标签的资源;没有校验它的值。
+
类似地,逗号分隔符充当 _与_ 运算符。因此,使用 `partition` 键(无论为何值)和
-`environment` 不同于 `qa` 来过滤资源可以使用 `partition, environment notin(qa)` 来实现。
+`environment` 不同于 `qa` 来过滤资源可以使用 `partition, environment notin (qa)` 来实现。
_基于集合_ 的标签选择算符是相等标签选择算符的一般形式,因为 `environment=production`
-等同于 `environment in(production)`;`!=` 和 `notin` 也是类似的。
+等同于 `environment in (production)`;`!=` 和 `notin` 也是类似的。
-* _基于等值_ 的需求: `?labelSelector=environment%3Dproduction,tier%3Dfrontend`
-* _基于集合_ 的需求: `?labelSelector=environment+in+%28production%2Cqa%29%2Ctier+in+%28frontend%29`
+* _基于等值_ 的需求:`?labelSelector=environment%3Dproduction,tier%3Dfrontend`
+* _基于集合_ 的需求:`?labelSelector=environment+in+%28production%2Cqa%29%2Ctier+in+%28frontend%29`
-这个选择算符(分别在 `json` 或者 `yaml` 格式中) 等价于 `component=redis` 或 `component in (redis)` 。
+这个选择算符(分别在 `json` 或者 `yaml` 格式中)等价于 `component=redis` 或 `component in (redis)`。
`matchLabels` 是由 `{key,value}` 对组成的映射。
-`matchLabels` 映射中的单个 `{key,value }` 等同于 `matchExpressions` 的元素,
+`matchLabels` 映射中的单个 `{key,value}` 等同于 `matchExpressions` 的元素,
其 `key` 字段为 "key",`operator` 为 "In",而 `values` 数组仅包含 "value"。
`matchExpressions` 是 Pod 选择算符需求的列表。
有效的运算符包括 `In`、`NotIn`、`Exists` 和 `DoesNotExist`。
diff --git a/content/zh/docs/concepts/overview/working-with-objects/names.md b/content/zh/docs/concepts/overview/working-with-objects/names.md
index 131ce0c6ba..e7ccb39110 100644
--- a/content/zh/docs/concepts/overview/working-with-objects/names.md
+++ b/content/zh/docs/concepts/overview/working-with-objects/names.md
@@ -13,12 +13,12 @@ Every Kubernetes object also has a [_UID_](#uids) that is unique across your who
For example, you can only have one Pod named `myapp-1234` within the same [namespace](/docs/concepts/overview/working-with-objects/namespaces/), but you can have one Pod and one Deployment that are each named `myapp-1234`.
-->
-集群中的每一个对象都有一个[_名称_](#names) 来标识在同类资源中的唯一性。
+集群中的每一个对象都有一个[_名称_](#names)来标识在同类资源中的唯一性。
-每个 Kubernetes 对象也有一个[_UID_](#uids) 来标识在整个集群中的唯一性。
+每个 Kubernetes 对象也有一个 [_UID_](#uids) 来标识在整个集群中的唯一性。
比如,在同一个[名字空间](/zh/docs/concepts/overview/working-with-objects/namespaces/)
-中有一个名为 `myapp-1234` 的 Pod, 但是可以命名一个 Pod 和一个 Deployment 同为 `myapp-1234`.
+中有一个名为 `myapp-1234` 的 Pod,但是可以命名一个 Pod 和一个 Deployment 同为 `myapp-1234`。
-下面是一个名为`nginx-demo`的 Pod 的配置清单:
+下面是一个名为 `nginx-demo` 的 Pod 的配置清单:
```yaml
apiVersion: v1
@@ -165,7 +165,7 @@ Kubernetes UIDs are universally unique identifiers (also known as UUIDs).
UUIDs are standardized as ISO/IEC 9834-8 and as ITU-T X.667.
-->
Kubernetes UIDs 是全局唯一标识符(也叫 UUIDs)。
-UUIDs 是标准化的,见 ISO/IEC 9834-8 和 ITU-T X.667.
+UUIDs 是标准化的,见 ISO/IEC 9834-8 和 ITU-T X.667。
## {{% heading "whatsnext" %}}
diff --git a/content/zh/docs/concepts/overview/working-with-objects/namespaces.md b/content/zh/docs/concepts/overview/working-with-objects/namespaces.md
index e57a82a972..62d47ad897 100644
--- a/content/zh/docs/concepts/overview/working-with-objects/namespaces.md
+++ b/content/zh/docs/concepts/overview/working-with-objects/namespaces.md
@@ -150,7 +150,7 @@ context.
```shell
kubectl config set-context --current --namespace=<名字空间名称>
-# 验证之
+# 验证
kubectl config view | grep namespace:
```
@@ -161,7 +161,7 @@ When you create a [Service](/docs/user-guide/services), it creates a correspondi
-->
## 名字空间和 DNS
-当你创建一个[服务](/zh/docs/concepts/services-networking/service/) 时,
+当你创建一个[服务](/zh/docs/concepts/services-networking/service/)时,
Kubernetes 会创建一个相应的 [DNS 条目](/zh/docs/concepts/services-networking/dns-pod-service/)。
大多数 kubernetes 资源(例如 Pod、Service、副本控制器等)都位于某些名字空间中。
但是名字空间资源本身并不在名字空间中。而且底层资源,例如
-[节点](/zh/docs/concepts/architecture/nodes/) 和持久化卷不属于任何名字空间。
+[节点](/zh/docs/concepts/architecture/nodes/)和持久化卷不属于任何名字空间。
-在 Kubernetes 中,一些对象是其他对象的*属主(Owner)*。
+在 Kubernetes 中,一些对象是其他对象的“属主(Owner)”。
例如,{{}} 是一组 Pod 的属主。
-具有属主的对象是属主的*附属(Dependent)* 。
+具有属主的对象是属主的“附属(Dependent)”。
### 跨名字空间的 Pod 亲和性配额 {#cross-namespace-pod-affinity-quota}
-{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
-此功能特性处于 Beta 阶段,默认被禁用。你可以通过为 kube-apiserver 和
-kube-scheduler 设置
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
-`PodAffinityNamespaceSelector` 来启用此特性。
-
#### 名字空间选择算符 {#namespace-selector}
-{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
-此功能特性是 Beta 版本的,默认是被启用的。你可以通过针对 kube-apiserver 和
-kube-scheduler 设置[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
-`PodAffinityNamespaceSelector` 来禁用此特性。
-{{< /note >}}
-{{< feature-state for_k8s_version="v1.18" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
在节点上运行 Pod 时,Pod 本身占用大量系统资源。这些是运行 Pod 内容器所需资源之外的资源。
-_POD 开销_ 是一个特性,用于计算 Pod 基础设施在容器请求和限制之上消耗的资源。
+在 Kubernetes 中,_POD 开销_ 是一种方法,用于计算 Pod 基础设施在容器请求和限制之上消耗的资源。
@@ -53,17 +53,14 @@ the Pod cgroup, and when carrying out Pod eviction ranking.
类似地,kubelet 将在确定 Pod cgroups 的大小和执行 Pod 驱逐排序时也会考虑 Pod 开销。
-## 启用 Pod 开销 {#set-up}
+## 配置 Pod 开销 {#set-up}
-你需要确保在集群中启用了 `PodOverhead` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
-(在 1.18 默认是开启的),以及一个定义了 `overhead` 字段的 `RuntimeClass`。
+你需要确保使用一个定义了 `overhead` 字段的 `RuntimeClass`。
-要使用 PodOverhead 特性,需要一个定义了 `overhead` 字段的 RuntimeClass。
+要使用 Pod 开销,你需要一个定义了 `overhead` 字段的 RuntimeClass。
作为例子,下面的 RuntimeClass 定义中包含一个虚拟化所用的容器运行时,
RuntimeClass 如下,其中每个 Pod 大约使用 120MiB 用来运行虚拟机和寄宿操作系统:
```yaml
----
-kind: RuntimeClass
apiVersion: node.k8s.io/v1
+kind: RuntimeClass
metadata:
- name: kata-fc
+ name: kata-fc
handler: kata-fc
overhead:
- podFixed:
- memory: "120Mi"
- cpu: "250m"
+ podFixed:
+ memory: "120Mi"
+ cpu: "250m"
```
-在 RuntimeClass 准入控制器之后,可以检验一下已更新的 PodSpec:
-
+在 RuntimeClass 准入控制器进行修改后,你可以查看更新后的 PodSpec:
```bash
kubectl get pod test-pod -o jsonpath='{.spec.overhead}'
```
@@ -171,26 +166,28 @@ requests and the overhead, then looks for a node that has 2.25 CPU and 320 MiB o
然后寻找具备 2.25 CPU 和 320 MiB 内存可用的节点。
+Once a Pod is scheduled to a node, the kubelet on that node creates a new {{< glossary_tooltip
+text="cgroup" term_id="cgroup" >}} for the Pod. It is within this pod that the underlying
+container runtime will create containers.
+-->
一旦 Pod 被调度到了某个节点, 该节点上的 kubelet 将为该 Pod 新建一个
{{< glossary_tooltip text="cgroup" term_id="cgroup" >}}。 底层容器运行时将在这个
Pod 中创建容器。
如果该资源对每一个容器都定义了一个限制(定义了限制值的 Guaranteed QoS 或者
-Bustrable QoS),kubelet 会为与该资源(CPU 的 `cpu.cfs_quota_us` 以及内存的
+Burstable QoS),kubelet 会为与该资源(CPU 的 `cpu.cfs_quota_us` 以及内存的
`memory.limit_in_bytes`)
相关的 Pod cgroup 设定一个上限。该上限基于 PodSpec 中定义的容器限制总量与 `overhead` 之和。
对于 CPU,如果 Pod 的 QoS 是 Guaranteed 或者 Burstable,kubelet 会基于容器请求总量与
PodSpec 中定义的 `overhead` 之和设置 `cpu.shares`。
@@ -199,6 +196,7 @@ PodSpec 中定义的 `overhead` 之和设置 `cpu.shares`。
Looking at our example, verify the container requests for the workload:
-->
请看这个例子,验证工作负载的容器请求:
+
```bash
kubectl get pod test-pod -o jsonpath='{.spec.containers[*].resources.limits}'
```
@@ -207,6 +205,7 @@ kubectl get pod test-pod -o jsonpath='{.spec.containers[*].resources.limits}'
The total container requests are 2000m CPU and 200MiB of memory:
-->
容器请求总计 2000m CPU 和 200MiB 内存:
+
```
map[cpu: 500m memory:100Mi] map[cpu:1500m memory:100Mi]
```
@@ -215,18 +214,19 @@ map[cpu: 500m memory:100Mi] map[cpu:1500m memory:100Mi]
Check this against what is observed by the node:
-->
对照从节点观察到的情况来检查一下:
+
```bash
kubectl describe node | grep test-pod -B2
```
-该输出显示请求了 2250m CPU 以及 320MiB 内存,包含了 PodOverhead 在内:
+The output shows requests for 2250m CPU, and for 320MiB of memory. The requests include Pod overhead:
+-->
+该输出显示请求了 2250m CPU 以及 320MiB 内存。请求包含了 Pod 开销在内:
```
- Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
- --------- ---- ------------ ---------- --------------- ------------- ---
- default test-pod 2250m (56%) 2250m (56%) 320Mi (1%) 320Mi (1%) 36m
+ Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE
+ --------- ---- ------------ ---------- --------------- ------------- ---
+ default test-pod 2250m (56%) 2250m (56%) 320Mi (1%) 320Mi (1%) 36m
```
执行结果的 cgroup 路径中包含了该 Pod 的 `pause` 容器。Pod 级别的 cgroup 在即上一层目录。
+
```
- "cgroupsPath": "/kubepods/podd7f4b509-cf94-4951-9417-d1087c92a5b2/7ccf55aee35dd16aca4189c952d83487297f3cd760f1bbf09620e206e7d0c27a"
+ "cgroupsPath": "/kubepods/podd7f4b509-cf94-4951-9417-d1087c92a5b2/7ccf55aee35dd16aca4189c952d83487297f3cd760f1bbf09620e206e7d0c27a"
```
+In this specific case, the pod cgroup path is `kubepods/podd7f4b509-cf94-4951-9417-d1087c92a5b2`.
+Verify the Pod level cgroup setting for memory:
+-->
在这个例子中,该 Pod 的 cgroup 路径是 `kubepods/podd7f4b509-cf94-4951-9417-d1087c92a5b2`。
验证内存的 Pod 级别 cgroup 设置:
@@ -300,6 +303,7 @@ In this specific case, the pod cgroup path is `kubepods/podd7f4b509-cf94-4951-94
This is 320 MiB, as expected:
-->
和预期的一样,这一数值为 320 MiB。
+
```
335544320
```
@@ -310,14 +314,12 @@ This is 320 MiB, as expected:
### 可观察性
在 [kube-state-metrics](https://github.com/kubernetes/kube-state-metrics) 中可以通过
-`kube_pod_overhead` 指标来协助确定何时使用 PodOverhead
+`kube_pod_overhead_*` 指标来协助确定何时使用 Pod 开销,
以及协助观察以一个既定开销运行的工作负载的稳定性。
该特性在 kube-state-metrics 的 1.9 发行版本中不可用,不过预计将在后续版本中发布。
在此之前,用户需要从源代码构建 kube-state-metrics。
@@ -325,9 +327,9 @@ from source in the meantime.
## {{% heading "whatsnext" %}}
-
-* [RuntimeClass](/zh/docs/concepts/containers/runtime-class/)
-* [PodOverhead 设计](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/688-pod-overhead)
+* 学习更多关于 [RuntimeClass](/zh/docs/concepts/containers/runtime-class/) 的信息
+* 阅读 [PodOverhead 设计](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/688-pod-overhead)增强建议以获取更多上下文
diff --git a/content/zh/docs/concepts/scheduling-eviction/pod-priority-preemption.md b/content/zh/docs/concepts/scheduling-eviction/pod-priority-preemption.md
index cf4db83684..f22065f8f9 100644
--- a/content/zh/docs/concepts/scheduling-eviction/pod-priority-preemption.md
+++ b/content/zh/docs/concepts/scheduling-eviction/pod-priority-preemption.md
@@ -175,7 +175,7 @@ description: "此优先级类应仅用于 XYZ 服务 Pod。"
## 非抢占式 PriorityClass {#non-preempting-priority-class}
-{{< feature-state for_k8s_version="v1.19" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
配置了 `preemptionPolicy: Never` 的 Pod 将被放置在调度队列中较低优先级 Pod 之前,
但它们不能抢占其他 Pod。等待调度的非抢占式 Pod 将留在调度队列中,直到有足够的可用资源,
@@ -328,9 +328,10 @@ resources reserved for Pod P and also gives users information about preemptions
in their clusters.
Please note that Pod P is not necessarily scheduled to the "nominated Node".
+The scheduler always tries the "nominated Node" before iterating over any other nodes.
After victim Pods are preempted, they get their graceful termination period. If
another node becomes available while scheduler is waiting for the victim Pods to
-terminate, scheduler will use the other node to schedule Pod P. As a result
+terminate, scheduler may use the other node to schedule Pod P. As a result
`nominatedNodeName` and `nodeName` of Pod spec are not always the same. Also, if
scheduler preempts Pods on Node N, but then a higher priority Pod than Pod P
arrives, scheduler may give Node N to the new higher priority Pod. In such a
@@ -344,9 +345,10 @@ Pod P 状态的 `nominatedNodeName` 字段被设置为节点 N 的名称。
该字段帮助调度程序跟踪为 Pod P 保留的资源,并为用户提供有关其集群中抢占的信息。
请注意,Pod P 不一定会调度到“被提名的节点(Nominated Node)”。
+调度程序总是在迭代任何其他节点之前尝试“指定节点”。
在 Pod 因抢占而牺牲时,它们将获得体面终止期。
如果调度程序正在等待牺牲者 Pod 终止时另一个节点变得可用,
-则调度程序将使用另一个节点来调度 Pod P。
+则调度程序可以使用另一个节点来调度 Pod P。
因此,Pod 规约中的 `nominatedNodeName` 和 `nodeName` 并不总是相同。
此外,如果调度程序抢占节点 N 上的 Pod,但随后比 Pod P 更高优先级的 Pod 到达,
则调度程序可能会将节点 N 分配给新的更高优先级的 Pod。
diff --git a/content/zh/docs/concepts/scheduling-eviction/taint-and-toleration.md b/content/zh/docs/concepts/scheduling-eviction/taint-and-toleration.md
index d1d400217c..1e02d72fdd 100644
--- a/content/zh/docs/concepts/scheduling-eviction/taint-and-toleration.md
+++ b/content/zh/docs/concepts/scheduling-eviction/taint-and-toleration.md
@@ -42,7 +42,7 @@ marks that the node should not accept any pods that do not tolerate the taints.
You add a taint to a node using [kubectl taint](/docs/reference/generated/kubectl/kubectl-commands#taint).
For example,
-->
-您可以使用命令 [kubectl taint](/docs/reference/generated/kubectl/kubectl-commands#taint) 给节点增加一个污点。比如,
+你可以使用命令 [kubectl taint](/docs/reference/generated/kubectl/kubectl-commands#taint) 给节点增加一个污点。比如,
```shell
kubectl taint nodes node1 key1=value1:NoSchedule
@@ -75,7 +75,7 @@ You specify a toleration for a pod in the PodSpec. Both of the following tolerat
taint created by the `kubectl taint` line above, and thus a pod with either toleration would be able
to schedule onto `node1`:
-->
-您可以在 PodSpec 中定义 Pod 的容忍度。
+你可以在 PodSpec 中定义 Pod 的容忍度。
下面两个容忍度均与上面例子中使用 `kubectl taint` 命令创建的污点相匹配,
因此如果一个 Pod 拥有其中的任何一个容忍度都能够被分配到 `node1` :
@@ -140,7 +140,7 @@ This is a "preference" or "soft" version of `NoSchedule` - the system will *try*
pod that does not tolerate the taint on the node, but it is not required. The third kind of `effect` is
`NoExecute`, described later.
-->
-上述例子中 `effect` 使用的值为 `NoSchedule`,您也可以使用另外一个值 `PreferNoSchedule`。
+上述例子中 `effect` 使用的值为 `NoSchedule`,你也可以使用另外一个值 `PreferNoSchedule`。
这是“优化”或“软”版本的 `NoSchedule` —— 系统会 *尽量* 避免将 Pod 调度到存在其不能容忍污点的节点上,
但这不是强制的。`effect` 的值还可以设置为 `NoExecute`,下文会详细描述这个值。
@@ -150,13 +150,12 @@ The way Kubernetes processes multiple taints and tolerations is like a filter: s
with all of a node's taints, then ignore the ones for which the pod has a matching toleration; the
remaining un-ignored taints have the indicated effects on the pod. In particular,
-->
-您可以给一个节点添加多个污点,也可以给一个 Pod 添加多个容忍度设置。
+你可以给一个节点添加多个污点,也可以给一个 Pod 添加多个容忍度设置。
Kubernetes 处理多个污点和容忍度的过程就像一个过滤器:从一个节点的所有污点开始遍历,
过滤掉那些 Pod 中存在与之相匹配的容忍度的污点。余下未被过滤的污点的 effect 值决定了
Pod 是否会被分配到该节点,特别是以下情况:
-例如,假设您给一个节点添加了如下污点
+例如,假设你给一个节点添加了如下污点
```shell
kubectl taint nodes node1 key1=value1:NoSchedule
@@ -253,7 +252,7 @@ taint is removed before that time, the pod will not be evicted.
Taints and tolerations are a flexible way to steer pods *away* from nodes or evict
pods that shouldn't be running. A few of the use cases are
-->
-通过污点和容忍度,可以灵活地让 Pod *避开* 某些节点或者将 Pod 从某些节点驱逐。下面是几个使用例子:
+通过污点和容忍度,可以灵活地让 Pod **避开** 某些节点或者将 Pod 从某些节点驱逐。下面是几个使用例子:
-* **专用节点**:如果您想将某些节点专门分配给特定的一组用户使用,您可以给这些节点添加一个污点(即,
+* **专用节点**:如果你想将某些节点专门分配给特定的一组用户使用,你可以给这些节点添加一个污点(即,
`kubectl taint nodes nodename dedicated=groupName:NoSchedule`),
然后给这组用户的 Pod 添加一个相对应的 toleration(通过编写一个自定义的
[准入控制器](/zh/docs/reference/access-authn-authz/admission-controllers/),很容易就能做到)。
拥有上述容忍度的 Pod 就能够被分配到上述专用节点,同时也能够被分配到集群中的其它节点。
- 如果您希望这些 Pod 只能被分配到上述专用节点,那么您还需要给这些专用节点另外添加一个和上述
- 污点类似的 label (例如:`dedicated=groupName`),同时 还要在上述准入控制器中给 Pod
+ 如果你希望这些 Pod 只能被分配到上述专用节点,那么你还需要给这些专用节点另外添加一个和上述
+ 污点类似的 label (例如:`dedicated=groupName`),同时 还要在上述准入控制器中给 Pod
增加节点亲和性要求上述 Pod 只能被分配到添加了 `dedicated=groupName` 标签的节点上。
-前文提到过污点的 effect 值 `NoExecute`会影响已经在节点上运行的 Pod
+前文提到过污点的 effect 值 `NoExecute` 会影响已经在节点上运行的 Pod
* 如果 Pod 不能忍受 effect 值为 `NoExecute` 的污点,那么 Pod 将马上被驱逐
* 如果 Pod 能够忍受 effect 值为 `NoExecute` 的污点,但是在容忍度定义中没有指定
@@ -507,7 +506,7 @@ onto the affected node.
-->
对于新创建的 Pod,可以通过添加相应的 Pod 容忍度来忽略节点状况。
-控制平面还在具有除 `BestEffort` 之外的 {{}}的 pod 上
+控制平面还在具有除 `BestEffort` 之外的 {{}}的 Pod 上
添加 `node.kubernetes.io/memory-pressure` 容忍度。
这是因为 Kubernetes 将 `Guaranteed` 或 `Burstable` QoS 类中的 Pod(甚至没有设置内存请求的 Pod)
视为能够应对内存压力,而新创建的 `BestEffort` Pod 不会被调度到受影响的节点上。
@@ -530,14 +529,14 @@ DaemonSet 控制器自动为所有守护进程添加如下 `NoSchedule` 容忍
* `node.kubernetes.io/disk-pressure`
* `node.kubernetes.io/pid-pressure` (1.14 或更高版本)
* `node.kubernetes.io/unschedulable` (1.10 或更高版本)
- * `node.kubernetes.io/network-unavailable` (*只适合主机网络配置*)
+ * `node.kubernetes.io/network-unavailable` (**只适合主机网络配置**)
-添加上述容忍度确保了向后兼容,您也可以选择自由向 DaemonSet 添加容忍度。
+添加上述容忍度确保了向后兼容,你也可以选择自由向 DaemonSet 添加容忍度。
## {{% heading "whatsnext" %}}
diff --git a/content/zh/docs/concepts/security/controlling-access.md b/content/zh/docs/concepts/security/controlling-access.md
index 0a9c6b19cd..5946a002b6 100644
--- a/content/zh/docs/concepts/security/controlling-access.md
+++ b/content/zh/docs/concepts/security/controlling-access.md
@@ -233,7 +233,7 @@ for the corresponding API object, and then written to the object store (shown as
Kubernetes auditing provides a security-relevant, chronological set of records documenting the sequence of actions in a cluster.
The cluster audits the activities generated by users, by applications that use the Kubernetes API, and by the control plane itself.
-For more information, see [Auditing](/docs/tasks/debug-application-cluster/audit/).
+For more information, see [Auditing](/docs/tasks/debug/debug-cluster/audit/).
-->
## 审计 {#auditing}
@@ -241,7 +241,7 @@ For more information, see [Auditing](/docs/tasks/debug-application-cluster/audit
Kubernetes 审计提供了一套与安全相关的、按时间顺序排列的记录,其中记录了集群中的操作序列。
集群对用户、使用 Kubernetes API 的应用程序以及控制平面本身产生的活动进行审计。
-更多信息请参考 [审计](/zh/docs/tasks/debug-application-cluster/audit/).
+更多信息请参考 [审计](/zh/docs/tasks/debug/debug-cluster/audit/).
## API 服务器端口和 IP {#api-server-ports-and-ips}
diff --git a/content/zh/docs/concepts/security/overview.md b/content/zh/docs/concepts/security/overview.md
index f13c1e06f5..9a9e9845a7 100644
--- a/content/zh/docs/concepts/security/overview.md
+++ b/content/zh/docs/concepts/security/overview.md
@@ -5,6 +5,15 @@ description: >
content_type: concept
weight: 1
---
+
-## 云原生安全的 4 个 C
+## 云原生安全的 4 个 C {#the-4c-s-of-cloud-native-security}
你可以分层去考虑安全性,云原生安全的 4 个 C 分别是云(Cloud)、集群(Cluster)、容器(Container)和代码(Code)。
@@ -50,9 +59,13 @@ The Code layer benefits from strong base (Cloud, Cluster, Container) security la
You cannot safeguard against poor security standards in the base layers by addressing
security at the Code level.
-->
-云原生安全模型的每一层都是基于下一个最外层,代码层受益于强大的基础安全层(云、集群、容器)。你无法通过在代码层解决安全问题来为基础层中糟糕的安全标准提供保护。
+云原生安全模型的每一层都是基于下一个最外层,代码层受益于强大的基础安全层(云、集群、容器)。
+你无法通过在代码层解决安全问题来为基础层中糟糕的安全标准提供保护。
-## 云
+
+## 云 {#cloud}
-### 云提供商安全性
+### 云提供商安全性 {#cloud-provider-security}
-如果您是在您自己的硬件或者其他不同的云提供商上运行 Kubernetes 集群,
+如果你是在你自己的硬件或者其他不同的云提供商上运行 Kubernetes 集群,
请查阅相关文档来获取最好的安全实践。
下面是一些比较流行的云提供商的安全性文档链接:
@@ -108,7 +121,7 @@ Network access to API Server (Control plane) | All access to the Kubernetes cont
Network access to Nodes (nodes) | Nodes should be configured to _only_ accept connections (via network access control lists) from the control plane on the specified ports, and accept connections for services in Kubernetes of type NodePort and LoadBalancer. If possible, these nodes should not be exposed on the public internet entirely.
Kubernetes access to Cloud Provider API | Each cloud provider needs to grant a different set of permissions to the Kubernetes control plane and nodes. It is best to provide the cluster with cloud provider access that follows the [principle of least privilege](https://en.wikipedia.org/wiki/Principle_of_least_privilege) for the resources it needs to administer. The [Kops documentation](https://github.com/kubernetes/kops/blob/master/docs/iam_roles.md#iam-roles) provides information about IAM policies and roles.
Access to etcd | Access to etcd (the datastore of Kubernetes) should be limited to the control plane only. Depending on your configuration, you should attempt to use etcd over TLS. More information can be found in the [etcd documentation](https://github.com/etcd-io/etcd/tree/master/Documentation).
-etcd Encryption | Wherever possible it's a good practice to encrypt all drives at rest, and since etcd holds the state of the entire cluster (including Secrets) its disk should especially be encrypted at rest.
+etcd Encryption | Wherever possible it's a good practice to encrypt all storage at rest, and since etcd holds the state of the entire cluster (including Secrets) its disk should especially be encrypted at rest.
{{< /table >}}
-->
@@ -118,13 +131,13 @@ etcd Encryption | Wherever possible it's a good practice to encrypt all drives a
{{< table caption="基础设施安全" >}}
-Kubetnetes 基础架构关注领域 | 建议 |
+Kubernetes 基础架构关注领域 | 建议 |
--------------------------------------------- | -------------- |
通过网络访问 API 服务(控制平面)|所有对 Kubernetes 控制平面的访问不允许在 Internet 上公开,同时应由网络访问控制列表控制,该列表包含管理集群所需的 IP 地址集。|
通过网络访问 Node(节点)| 节点应配置为 _仅能_ 从控制平面上通过指定端口来接受(通过网络访问控制列表)连接,以及接受 NodePort 和 LoadBalancer 类型的 Kubernetes 服务连接。如果可能的话,这些节点不应完全暴露在公共互联网上。|
Kubernetes 访问云提供商的 API | 每个云提供商都需要向 Kubernetes 控制平面和节点授予不同的权限集。为集群提供云提供商访问权限时,最好遵循对需要管理的资源的[最小特权原则](https://en.wikipedia.org/wiki/Principle_of_least_privilege)。[Kops 文档](https://github.com/kubernetes/kops/blob/master/docs/iam_roles.md#iam-roles)提供有关 IAM 策略和角色的信息。|
访问 etcd | 对 etcd(Kubernetes 的数据存储)的访问应仅限于控制平面。根据配置情况,你应该尝试通过 TLS 来使用 etcd。更多信息可以在 [etcd 文档](https://github.com/etcd-io/etcd/tree/master/Documentation)中找到。|
-etcd 加密 | 在所有可能的情况下,最好对所有驱动器进行静态数据加密,并且由于 etcd 拥有整个集群的状态(包括机密信息),因此其磁盘更应该进行静态数据加密。|
+etcd 加密 | 在所有可能的情况下,最好对所有存储进行静态数据加密,并且由于 etcd 拥有整个集群的状态(包括机密信息),因此其磁盘更应该进行静态数据加密。|
{{< /table >}}
@@ -136,7 +149,7 @@ There are two areas of concern for securing Kubernetes:
* Securing the cluster components that are configurable
* Securing the applications which run in the cluster
-->
-## 集群
+## 集群 {#cluster}
保护 Kubernetes 有两个方面需要注意:
@@ -174,10 +187,10 @@ Quality of Service (and Cluster resource management) | https://kubernetes.io/doc
Network Policies | https://kubernetes.io/docs/concepts/services-networking/network-policies/
TLS for Kubernetes Ingress | https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
-->
-### 集群中的组件(您的应用) {#cluster-applications}
+### 集群中的组件(你的应用) {#cluster-applications}
-根据您的应用程序的受攻击面,您可能需要关注安全性的特定面,比如:
-如果您正在运行中的一个服务(A 服务)在其他资源链中很重要,并且所运行的另一工作负载(服务 B)
+根据你的应用程序的受攻击面,你可能需要关注安全性的特定面,比如:
+如果你正在运行中的一个服务(A 服务)在其他资源链中很重要,并且所运行的另一工作负载(服务 B)
容易受到资源枯竭的攻击,则如果你不限制服务 B 的资源的话,损害服务 A 的风险就会很高。
下表列出了安全性关注的领域和建议,用以保护 Kubernetes 中运行的工作负载:
@@ -204,13 +217,13 @@ Image Signing and Enforcement | Sign container images to maintain a system of tr
Disallow privileged users | When constructing containers, consult your documentation for how to create users inside of the containers that have the least level of operating system privilege necessary in order to carry out the goal of the container.
Use container runtime with stronger isolation | Select [container runtime classes](/docs/concepts/containers/runtime-class/) that provide stronger isolation
-->
-## 容器
+## 容器 {#container}
容器安全性不在本指南的探讨范围内。下面是一些探索此主题的建议和连接:
容器关注领域 | 建议 |
------------------------------ | -------------- |
-容器漏洞扫描和操作系统依赖安全性 | 作为镜像构建的一部分,您应该扫描您的容器里的已知漏洞。
+容器漏洞扫描和操作系统依赖安全性 | 作为镜像构建的一部分,你应该扫描你的容器里的已知漏洞。
镜像签名和执行 | 对容器镜像进行签名,以维护对容器内容的信任。
禁止特权用户 | 构建容器时,请查阅文档以了解如何在具有最低操作系统特权级别的容器内部创建用户,以实现容器的目标。
使用带有较强隔离能力的容器运行时 | 选择提供较强隔离能力的[容器运行时类](/zh/docs/concepts/containers/runtime-class/)。
@@ -221,9 +234,9 @@ Application code is one of the primary attack surfaces over which you have the m
While securing application code is outside of the Kubernetes security topic, here
are recommendations to protect application code:
-->
-## 代码
+## 代码 {#code}
-应用程序代码是您最能够控制的主要攻击面之一,虽然保护应用程序代码不在 Kubernetes 安全主题范围内,但以下是保护应用程序代码的建议:
+应用程序代码是你最能够控制的主要攻击面之一,虽然保护应用程序代码不在 Kubernetes 安全主题范围内,但以下是保护应用程序代码的建议:
-### 代码安全性
+### 代码安全性 {#code-security}
{{< table caption="代码安全" >}}
代码关注领域 | 建议 |
-------------------------| -------------- |
-仅通过 TLS 访问 | 如果您的代码需要通过 TCP 通信,请提前与客户端执行 TLS 握手。除少数情况外,请加密传输中的所有内容。更进一步,加密服务之间的网络流量是一个好主意。这可以通过被称为双向 TLS 或 [mTLS](https://en.wikipedia.org/wiki/Mutual_authentication) 的过程来完成,该过程对两个证书持有服务之间的通信执行双向验证。 |
+仅通过 TLS 访问 | 如果你的代码需要通过 TCP 通信,请提前与客户端执行 TLS 握手。除少数情况外,请加密传输中的所有内容。更进一步,加密服务之间的网络流量是一个好主意。这可以通过被称为双向 TLS 或 [mTLS](https://en.wikipedia.org/wiki/Mutual_authentication) 的过程来完成,该过程对两个证书持有服务之间的通信执行双向验证。 |
限制通信端口范围 | 此建议可能有点不言自明,但是在任何可能的情况下,你都只应公开服务上对于通信或度量收集绝对必要的端口。|
第三方依赖性安全 | 最好定期扫描应用程序的第三方库以了解已知的安全漏洞。每种编程语言都有一个自动执行此检查的工具。 |
-静态代码分析 | 大多数语言都提供给了一种方法,来分析代码段中是否存在潜在的不安全的编码实践。只要有可能,你都应该使用自动工具执行检查,该工具可以扫描代码库以查找常见的安全错误,一些工具可以在以下连接中找到:https://owasp.org/www-community/Source_Code_Analysis_Tools |
-动态探测攻击 | 您可以对服务运行一些自动化工具,来尝试一些众所周知的服务攻击。这些攻击包括 SQL 注入、CSRF 和 XSS。[OWASP Zed Attack](https://owasp.org/www-project-zap/) 代理工具是最受欢迎的动态分析工具之一。 |
+静态代码分析 | 大多数语言都提供给了一种方法,来分析代码段中是否存在潜在的不安全的编码实践。只要有可能,你都应该使用自动工具执行检查,该工具可以扫描代码库以查找常见的安全错误,一些工具可以在以下连接中找到: https://owasp.org/www-community/Source_Code_Analysis_Tools |
+动态探测攻击 | 你可以对服务运行一些自动化工具,来尝试一些众所周知的服务攻击。这些攻击包括 SQL 注入、CSRF 和 XSS。[OWASP Zed Attack](https://owasp.org/www-project-zap/) 代理工具是最受欢迎的动态分析工具之一。 |
{{< /table >}}
@@ -273,7 +286,7 @@ Learn about related Kubernetes security topics:
* [Pod 安全标准](/zh/docs/concepts/security/pod-security-standards/)
* [Pod 的网络策略](/zh/docs/concepts/services-networking/network-policies/)
* [控制对 Kubernetes API 的访问](/zh/docs/concepts/security/controlling-access/)
-* [保护您的集群](/zh/docs/tasks/administer-cluster/securing-a-cluster/)
+* [保护你的集群](/zh/docs/tasks/administer-cluster/securing-a-cluster/)
* 为控制面[加密通信中的数据](/zh/docs/tasks/tls/managing-tls-in-a-cluster/)
* [加密静止状态的数据](/zh/docs/tasks/administer-cluster/encrypt-data/)
* [Kubernetes 中的 Secret](/zh/docs/concepts/configuration/secret/)
diff --git a/content/zh/docs/concepts/security/pod-security-admission.md b/content/zh/docs/concepts/security/pod-security-admission.md
index d72bd151a4..54ae5436a0 100644
--- a/content/zh/docs/concepts/security/pod-security-admission.md
+++ b/content/zh/docs/concepts/security/pod-security-admission.md
@@ -33,7 +33,7 @@ Kubernetes [Pod 安全性标准(Security Standards)](/zh/docs/concepts/secur
为 Pod 定义不同的隔离级别。这些标准能够让你以一种清晰、一致的方式定义如何限制 Pod 行为。
-## 启用 `PodSecurity` 准入插件 {#enabling-the-podsecurity-admission-plugin}
+## {{% heading "prerequisites" %}}
-在 v1.23 中,`PodSecurity` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
-是一项 Beta 功能特性,默认被启用。
+要使用此机制,你的集群必须强制执行 Pod 安全准入。
-在 v1.22 中,`PodSecurity` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
-是一项 Alpha 功能特性,必须在 `kube-apiserver` 上启用才能使用内置的准入插件。
-
-```shell
---feature-gates="...,PodSecurity=true"
-```
+### 内置 Pod 安全准入强制执行
-## 替代方案:安装 `PodSecurity` 准入 Webhook {#webhook}
+在 Kubernetes v{{< skew currentVersion >}} 中,`PodSecurity`
+[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)是一项 Beta 特性,
+默认被启用。你必须启用此功能门控。如果你运行的是不同版本的 Kubernetes,请查阅该版本的文档。
-对于无法应用内置 `PodSecurity` 准入插件的环境,无论是因为集群版本低于 v1.22,
-或者 `PodSecurity` 特性无法被启用,都可以使用 Beta 版本的
-[验证性准入 Webhook](https://git.k8s.io/pod-security-admission/webhook)。
-来使用 `PodSecurity` 准入逻辑。
+
+
+
+### 替代方案:安装 `PodSecurity` 准入 Webhook {#webhook}
+
+`PodSecurity` 准入逻辑也可用作[验证性准入 Webhook](https://git.k8s.io/pod-security-admission/webhook)。
+该实现也是 Beta 版本。
+对于无法启用内置 `PodSecurity` 准入插件的环境,你可以改为通过验证准入 Webhook 启用该逻辑。
+
@@ -159,7 +162,7 @@ Kubernetes 定义了一组{{< glossary_tooltip term_id="label" text="标签" >}}
Mode | Description
:---------|:------------
**enforce** | Policy violations will cause the pod to be rejected.
-**audit** | Policy violations will trigger the addition of an audit annotation to the event recorded in the [audit log](/docs/tasks/debug-application-cluster/audit/), but are otherwise allowed.
+**audit** | Policy violations will trigger the addition of an audit annotation to the event recorded in the [audit log](/docs/tasks/debug/debug-cluster/audit/), but are otherwise allowed.
**warn** | Policy violations will trigger a user-facing warning, but are otherwise allowed.
{{< /table >}}
-->
@@ -167,7 +170,7 @@ Mode | Description
模式 | 描述
:---------|:------------
**enforce** | 策略违例会导致 Pod 被拒绝
-**audit** | 策略违例会触发[审计日志](/zh/docs/tasks/debug-application-cluster/audit/)中记录新事件时添加审计注解;但是 Pod 仍是被接受的。
+**audit** | 策略违例会触发[审计日志](/zh/docs/tasks/debug/debug-cluster/audit/)中记录新事件时添加审计注解;但是 Pod 仍是被接受的。
**warn** | 策略违例会触发用户可见的警告信息,但是 Pod 仍是被接受的。
{{< /table >}}
diff --git a/content/zh/docs/concepts/security/windows-security.md b/content/zh/docs/concepts/security/windows-security.md
new file mode 100644
index 0000000000..6636d676cd
--- /dev/null
+++ b/content/zh/docs/concepts/security/windows-security.md
@@ -0,0 +1,109 @@
+---
+title: Windows 节点的安全性
+content_type: concept
+weight: 75
+---
+
+
+
+
+
+本篇介绍特定于 Windows 操作系统的安全注意事项和最佳实践。
+
+
+
+
+## 保护节点上的 Secret 数据
+
+
+在 Windows 上,来自 Secret 的数据以明文形式写入节点的本地存储
+(与在 Linux 上使用 tmpfs / 内存中文件系统不同)。
+作为集群操作员,你应该采取以下两项额外措施:
+
+
+1. 使用文件 ACL 来保护 Secret 的文件位置。
+2. 使用 [BitLocker](https://docs.microsoft.com/windows/security/information-protection/bitlocker/bitlocker-how-to-deploy-on-windows-server)
+ 进行卷级加密。
+
+
+## 容器用户
+
+
+可以为 Windows Pod 或容器指定 [RunAsUsername](/zh/docs/tasks/configure-pod-container/configure-runasusername)
+以作为特定用户执行容器进程。这大致相当于 [RunAsUser](/zh/docs/concepts/policy/pod-security-policy/#users-and-groups)。
+
+
+Windows 容器提供两个默认用户帐户,ContainerUser 和 ContainerAdministrator。
+在微软的 Windows 容器安全文档
+[何时使用 ContainerAdmin 和 ContainerUser 用户帐户](https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/manage-containers/container-security#when-to-use-containeradmin-and-containeruser-user-accounts)
+中介绍了这两个用户帐户之间的区别。
+
+
+在容器构建过程中,可以将本地用户添加到容器镜像中。
+
+{{< note >}}
+
+* 基于 [Nano Server](https://hub.docker.com/_/microsoft-windows-nanoserver) 的镜像默认以 `ContainerUser` 运行
+* 基于 [Server Core](https://hub.docker.com/_/microsoft-windows-servercore) 的镜像默认以 `ContainerAdministrator` 运行
+{{< /note >}}
+
+
+Windows 容器还可以通过使用[组管理的服务账号](/zh/docs/tasks/configure-pod-container/configure-gmsa/)作为
+Active Directory 身份运行。
+
+
+## Pod 级安全隔离
+
+
+Windows 节点不支持特定于 Linux 的 Pod 安全上下文机制(例如 SELinux、AppArmor、Seccomp 或自定义 POSIX 权能字)。
+
+
+Windows 上[不支持](/zh/docs/concepts/windows/intro/#compatibility-v1-pod-spec-containers-securitycontext)特权容器。
+然而,可以在 Windows 上使用 [HostProcess 容器](/zh/docs/tasks/configure-pod-container/create-hostprocess-pod)来执行
+Linux 上特权容器执行的许多任务。
\ No newline at end of file
diff --git a/content/zh/docs/concepts/services-networking/dns-pod-service.md b/content/zh/docs/concepts/services-networking/dns-pod-service.md
index 82782dfc0b..2bee2ba425 100644
--- a/content/zh/docs/concepts/services-networking/dns-pod-service.md
+++ b/content/zh/docs/concepts/services-networking/dns-pod-service.md
@@ -15,11 +15,11 @@ weight: 20
-Kubernetes 为服务和 Pods 创建 DNS 记录。
-你可以使用一致的 DNS 名称而非 IP 地址来访问服务。
+Kubernetes 为 Service 和 Pod 创建 DNS 记录。
+你可以使用一致的 DNS 名称而非 IP 地址访问 Service。
@@ -30,40 +30,39 @@ Kubernetes DNS schedules a DNS Pod and Service on the cluster, and configures
the kubelets to tell individual containers to use the DNS Service's IP to
resolve DNS names.
-->
-## 介绍
+## 介绍 {#introduction}
-Kubernetes DNS 在集群上调度 DNS Pod 和服务,并配置 kubelet 以告知各个容器
-使用 DNS 服务的 IP 来解析 DNS 名称。
+Kubernetes DNS 除了在集群上调度 DNS Pod 和 Service,
+还配置 kubelet 以告知各个容器使用 DNS Service 的 IP 来解析 DNS 名称。
集群中定义的每个 Service (包括 DNS 服务器自身)都被赋予一个 DNS 名称。
-默认情况下,客户端 Pod 的 DNS 搜索列表会包含 Pod 自身的名字空间和集群
-的默认域。
+默认情况下,客户端 Pod 的 DNS 搜索列表会包含 Pod 自身的名字空间和集群的默认域。
-### Service 的名字空间
+### Service 的名字空间 {#namespaces-of-services}
DNS 查询可能因为执行查询的 Pod 所在的名字空间而返回不同的结果。
不指定名字空间的 DNS 查询会被限制在 Pod 所在的名字空间内。
-要访问其他名字空间中的服务,需要在 DNS 查询中给出名字空间。
+要访问其他名字空间中的 Service,需要在 DNS 查询中指定名字空间。
例如,假定名字空间 `test` 中存在一个 Pod,`prod` 名字空间中存在一个服务
`data`。
@@ -73,11 +72,11 @@ Pod 查询 `data` 时没有返回结果,因为使用的是 Pod 的名字空间
Pod 查询 `data.prod` 时则会返回预期的结果,因为查询中指定了名字空间。
DNS 查询可以使用 Pod 中的 `/etc/resolv.conf` 展开。kubelet 会为每个 Pod
生成此文件。例如,对 `data` 的查询可能被展开为 `data.test.svc.cluster.local`。
@@ -91,7 +90,7 @@ options ndots:5
```
概括起来,名字空间 `test` 中的 Pod 可以成功地解析 `data.prod` 或者
@@ -116,7 +115,7 @@ considered implementation details and are subject to change without warning.
For more up-to-date specification, see
[Kubernetes DNS-Based Service Discovery](https://github.com/kubernetes/dns/blob/master/docs/specification.md).
-->
-以下各节详细介绍了被支持的 DNS 记录类型和被支持的布局。
+以下各节详细介绍已支持的 DNS 记录类型和布局。
其它布局、名称或者查询即使碰巧可以工作,也应视为实现细节,
将来很可能被更改而且不会因此发出警告。
有关最新规范请查看
@@ -127,28 +126,30 @@ For more up-to-date specification, see
### A/AAAA records
-"Normal" (not headless) Services are assigned a DNS A or AAAA record for a name of the
-form `my-svc.my-namespace.svc.cluster-domain.example`. This resolves to the cluster IP
+"Normal" (not headless) Services are assigned a DNS A or AAAA record,
+depending on the IP family of the Service, for a name of the form
+`my-svc.my-namespace.svc.cluster-domain.example`. This resolves to the cluster IP
of the Service.
-"Headless" (without a cluster IP) Services are also assigned a DNS A record for
-a name of the form `my-svc.my-namespace.svc.cluster-domain.example`. Unlike normal
-Services, this resolves to the set of IPs of the pods selected by the Service.
+"Headless" (without a cluster IP) Services are also assigned a DNS A or AAAA record,
+depending on the IP family of the Service, for a name of the form
+`my-svc.my-namespace.svc.cluster-domain.example`. Unlike normal
+Services, this resolves to the set of IPs of the Pods selected by the Service.
Clients are expected to consume the set or else use standard round-robin
selection from the set.
-->
-### 服务 {#services}
+### Services
-#### A/AAAA 记录
+#### A/AAAA 记录 {#a-aaaa-records}
-“普通” 服务(除了无头服务)会以 `my-svc.my-namespace.svc.cluster-domain.example`
-这种名字的形式被分配一个 DNS A 或 AAAA 记录,取决于服务的 IP 协议族。
-该名称会解析成对应服务的集群 IP。
+“普通” Service(除了无头 Service)会以 `my-svc.my-namespace.svc.cluster-domain.example`
+这种名字的形式被分配一个 DNS A 或 AAAA 记录,取决于 Service 的 IP 协议族。
+该名称会解析成对应 Service 的集群 IP。
-“无头(Headless)” 服务(没有集群 IP)也会以
+“无头(Headless)” Service (没有集群 IP)也会以
`my-svc.my-namespace.svc.cluster-domain.example` 这种名字的形式被指派一个 DNS A 或 AAAA 记录,
-具体取决于服务的 IP 协议族。
-与普通服务不同,这一记录会被解析成对应服务所选择的 Pod 集合的 IP。
+具体取决于 Service 的 IP 协议族。
+与普通 Service 不同,这一记录会被解析成对应 Service 所选择的 Pod IP 的集合。
客户端要能够使用这组 IP,或者使用标准的轮转策略从这组 IP 中进行选择。
#### SRV 记录 {#srv-records}
-Kubernetes 会为命名端口创建 SRV 记录,这些端口是普通服务或
-[无头服务](/zh/docs/concepts/services-networking/service/#headless-services)的一部分。
-对每个命名端口,SRV 记录具有 `_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster-domain.example` 这种形式。
-对普通服务,该记录会被解析成端口号和域名:`my-svc.my-namespace.svc.cluster-domain.example`。
-对无头服务,该记录会被解析成多个结果,服务对应的每个后端 Pod 各一个;
-其中包含 Pod 端口号和形为 `auto-generated-name.my-svc.my-namespace.svc.cluster-domain.example`
+Kubernetes 根据普通 Service 或
+[Headless Service](/zh/docs/concepts/services-networking/service/#headless-services)
+中的命名端口创建 SRV 记录。每个命名端口,
+SRV 记录格式为 `_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster-domain.example`。
+普通 Service,该记录会被解析成端口号和域名:`my-svc.my-namespace.svc.cluster-domain.example`。
+无头 Service,该记录会被解析成多个结果,及该服务的每个后端 Pod 各一个 SRV 记录,
+其中包含 Pod 端口号和格式为 `auto-generated-name.my-svc.my-namespace.svc.cluster-domain.example`
的域名。
## Pods
@@ -179,20 +181,20 @@ Kubernetes 会为命名端口创建 SRV 记录,这些端口是普通服务或
-### A/AAAA 记录
+### A/AAAA 记录 {#a-aaaa-records}
一般而言,Pod 会对应如下 DNS 名字解析:
@@ -210,11 +212,11 @@ Any pods exposed by a Service have the following DNS resolution available:
-### Pod 的 hostname 和 subdomain 字段
+### Pod 的 hostname 和 subdomain 字段 {#pod-s-hostname-and-subdomain-fields}
当前,创建 Pod 时其主机名取自 Pod 的 `metadata.name` 值。
@@ -288,21 +290,21 @@ spec:
```
-如果某无头服务与某 Pod 在同一个名字空间中,且它们具有相同的子域名,
+如果某无头 Service 与某 Pod 在同一个名字空间中,且它们具有相同的子域名,
集群的 DNS 服务器也会为该 Pod 的全限定主机名返回 A 记录或 AAAA 记录。
例如,在同一个名字空间中,给定一个主机名为 “busybox-1”、
子域名设置为 “default-subdomain” 的 Pod,和一个名称为 “`default-subdomain`”
-的无头服务,Pod 将看到自己的 FQDN 为
+的无头 Service,Pod 将看到自己的 FQDN 为
"`busybox-1.default-subdomain.my-namespace.svc.cluster-domain.example`"。
DNS 会为此名字提供一个 A 记录或 AAAA 记录,指向该 Pod 的 IP。
“`busybox1`” 和 “`busybox2`” 这两个 Pod 分别具有它们自己的 A 或 AAAA 记录。
@@ -314,18 +316,16 @@ along with its IP.
Endpoints 对象可以为任何端点地址及其 IP 指定 `hostname`。
{{< note >}}
-因为没有为 Pod 名称创建 A 记录或 AAAA 记录,所以要创建 Pod 的 A 记录
-或 AAAA 记录需要 `hostname`。
-
+由于不是为 Pod 名称创建 A 或 AAAA 记录的,因此 Pod 的 A 或 AAAA 需要 `hostname`。
没有设置 `hostname` 但设置了 `subdomain` 的 Pod 只会为
-无头服务创建 A 或 AAAA 记录(`default-subdomain.my-namespace.svc.cluster-domain.example`)
+无头 Service 创建 A 或 AAAA 记录(`default-subdomain.my-namespace.svc.cluster-domain.example`)
指向 Pod 的 IP 地址。
另外,除非在服务上设置了 `publishNotReadyAddresses=True`,否则只有 Pod 进入就绪状态
才会有与之对应的记录。
@@ -341,12 +341,13 @@ record unless `publishNotReadyAddresses=True` is set on the Service.
{{< feature-state for_k8s_version="v1.22" state="stable" >}}
-**前置条件**:`SetHostnameAsFQDN`
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
-必须在 {{< glossary_tooltip text="API 服务器" term_id="kube-apiserver" >}}
-上启用。
+当 Pod 配置为具有全限定域名 (FQDN) 时,其主机名是短主机名。
+ 例如,如果你有一个具有完全限定域名 `busybox-1.default-subdomain.my-namespace.svc.cluster-domain.example` 的 Pod,
+ 则默认情况下,该 Pod 内的 `hostname` 命令返回 `busybox-1`,而 `hostname --fqdn` 命令返回 FQDN。
当你在 Pod 规约中设置了 `setHostnameAsFQDN: true` 时,kubelet 会将 Pod
的全限定域名(FQDN)作为该 Pod 的主机名记录到 Pod 所在名字空间。
@@ -356,7 +357,7 @@ When a Pod is configured to have fully qualified domain name (FQDN), its hostnam
在 Linux 中,内核的主机名字段(`struct utsname` 的 `nodename` 字段)限定
最多 64 个字符。
@@ -364,7 +365,7 @@ If a Pod enables this feature and its FQDN is longer than 64 character, it will
如果 Pod 启用这一特性,而其 FQDN 超出 64 字符,Pod 的启动会失败。
Pod 会一直出于 `Pending` 状态(通过 `kubectl` 所看到的 `ContainerCreating`),
并产生错误事件,例如
-"Failed to construct FQDN from pod hostname and cluster domain, FQDN
+"Failed to construct FQDN from Pod hostname and cluster domain, FQDN
`long-FQDN` is too long (64 characters is the max, 70 characters requested)."
(无法基于 Pod 主机名和集群域名构造 FQDN,FQDN `long-FQDN` 过长,至多 64
字符,请求字符数为 70)。
@@ -376,12 +377,12 @@ Pod 会一直出于 `Pending` 状态(通过 `kubectl` 所看到的 `ContainerC
### Pod 的 DNS 策略 {#pod-s-dns-policy}
@@ -411,6 +413,7 @@ DNS 策略可以逐个 Pod 来设定。目前 Kubernetes 支持以下特定 Pod
了解在这些场景中如何处理 DNS 查询的信息。
- "`ClusterFirstWithHostNet`":对于以 hostNetwork 方式运行的 Pod,应显式设置其 DNS 策略
"`ClusterFirstWithHostNet`"。
+ - 注意:这在 Windows 上不支持。 有关详细信息,请参见[下文](#dns-windows)。
- "`None`": 此设置允许 Pod 忽略 Kubernetes 环境中的 DNS 设置。Pod 会使用其 `dnsConfig` 字段
所提供的 DNS 设置。
参见 [Pod 的 DNS 配置](#pod-dns-config)节。
@@ -450,7 +453,7 @@ spec:
```
-输出类似于
-
+输出类似于:
```
nameserver fd00:79:30::a
search default.svc.cluster-domain.example svc.cluster-domain.example cluster-domain.example
@@ -566,19 +568,39 @@ a list of search domains of up to 2048 characters.
搜索域以及一个最多 2048 个字符的搜索域列表。
-### 功能的可用性
+## Windows 节点上的 DNS 解析 {#dns-windows}
-Pod DNS 配置和 DNS 策略 "`None`" 的可用版本对应如下所示。
-
-| k8s 版本 | 特性支持 |
-| :---------: |:-----------:|
-| 1.14 | 稳定 |
-| 1.10 | Beta(默认启用) |
-| 1.9 | Alpha |
+- 在 Windows 节点上运行的 Pod 不支持 ClusterFirstWithHostNet。
+ Windows 将所有带有 `.` 的名称视为全限定域名(FQDN)并跳过全限定域名(FQDN)解析。
+- 在 Windows 上,可以使用的 DNS 解析器有很多。
+ 由于这些解析器彼此之间会有轻微的行为差别,建议使用
+ [`Resolve-DNSName`](https://docs.microsoft.com/powershell/module/dnsclient/resolve-dnsname)
+ powershell cmdlet 进行名称查询解析。
+- 在 Linux 上,有一个 DNS 后缀列表,当解析全名失败时可以使用。
+ 在 Windows 上,你只能有一个 DNS 后缀,
+ 即与该 Pod 的命名空间相关联的 DNS 后缀(例如:`mydns.svc.cluster.local`)。
+ Windows 可以解析全限定域名(FQDN),和使用了该 DNS 后缀的 Services 或者网络名称。
+ 例如,在 `default` 命名空间中生成一个 Pod,该 Pod 会获得的 DNS 后缀为 `default.svc.cluster.local`。
+ 在 Windows 的 Pod 中,你可以解析 `kubernetes.default.svc.cluster.local` 和 `kubernetes`,
+ 但是不能解析部分限定名称(`kubernetes.default` 和 `kubernetes.default.svc`)。
## {{% heading "whatsnext" %}}
diff --git a/content/zh/docs/concepts/services-networking/dual-stack.md b/content/zh/docs/concepts/services-networking/dual-stack.md
index e1d5516bec..08383297d7 100644
--- a/content/zh/docs/concepts/services-networking/dual-stack.md
+++ b/content/zh/docs/concepts/services-networking/dual-stack.md
@@ -26,7 +26,7 @@ weight: 70
-{{< feature-state for_k8s_version="v1.21" state="beta" >}}
+{{< feature-state for_k8s_version="v1.23" state="stable" >}}
* Kubernetes 1.20 版本或更高版本,有关更早 Kubernetes 版本的使用双栈服务的信息,
请参考对应版本的 Kubernetes 文档。
* 提供商支持双协议栈网络(云提供商或其他提供商必须能够为 Kubernetes
节点提供可路由的 IPv4/IPv6 网络接口)
-* 支持双协议栈的网络插件(如 Kubenet 或 Calico)
+* 支持双协议栈的[网络插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)
-要使用 IPv4/IPv6 双协议栈,确保为集群的相关组件启用 `IPv6DualStack`
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
-(从 1.21 版本开始,IPv4/IPv6 双协议栈默认是被启用的)。
-
+如果配置 IPv4/IPv6 双栈,请分配双栈集群网络:
* kube-apiserver:
* `--service-cluster-ip-range=,`
@@ -116,6 +121,11 @@ To use IPv4/IPv6 dual-stack, ensure the `IPv6DualStack` [feature gate](/docs/ref
* `--node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6` 对于 IPv4 默认为 /24,对于 IPv6 默认为 /64
* kube-proxy:
* `--cluster-cidr=,`
+* kubelet:
+ * 当没有 `--cloud-provider` 时,管理员可以通过 `--node-ip` 来传递逗号分隔的 IP 地址,
+ 为该节点手动配置双栈 `.status.addresses`。
+ 如果 Pod 以 HostNetwork 模式在该节点上运行,则 Pod 会用 `.status.podIPs` 字段来报告它的 IP 地址。
+ 一个节点中的所有 `podIP` 都会匹配该节点的由 `.status.addresses` 字段定义的 IP 组。
{{< note >}}
-从 1.21 开始 IPv4/IPv6 双协议栈默认为启用状态。
-你可以在必要的时候通过为 kube-apiserver、kube-controller-manager、kubelet
-和 kube-proxy 命令行设置 `--feature-gates="IPv6DualStack=false"` 来禁用
-此特性。
{{< /note >}}
@@ -169,8 +170,6 @@ set the `.spec.ipFamilyPolicy` field to one of the following values:
* `SingleStack`:单栈服务。控制面使用第一个配置的服务集群 IP 范围为服务分配集群 IP。
* `PreferDualStack`:
* 为服务分配 IPv4 和 IPv6 集群 IP 地址。
- (如果集群设置了 `--feature-gates="IPv6DualStack=false"`,则此设置的行为与
- `SingleStack` 设置相同。)
* `RequireDualStack`:从 IPv4 和 IPv6 的地址范围分配服务的 `.spec.ClusterIPs`
* 从基于在 `.spec.ipFamilies` 数组中第一个元素的地址族的 `.spec.ClusterIPs`
列表中选择 `.spec.ClusterIP`
@@ -199,7 +198,6 @@ You can set `.spec.ipFamilies` to any of the following array values:
- `["IPv6"]`
- `["IPv4","IPv6"]` (dual stack)
- `["IPv6","IPv4"]` (dual stack)
-
-->
- `["IPv4"]`
- `["IPv6"]`
@@ -228,14 +226,13 @@ These examples demonstrate the behavior of various dual-stack Service configurat
-
1. 此服务规约中没有显式设定 `.spec.ipFamilyPolicy`。当你创建此服务时,Kubernetes
从所配置的第一个 `service-cluster-ip-range` 种为服务分配一个集群IP,并设置
`.spec.ipFamilyPolicy` 为 `SingleStack`。
([无选择算符的服务](/zh/docs/concepts/services-networking/service/#services-without-selectors)
和[无头服务](/zh/docs/concepts/services-networking/service/#headless-services)的行为方式
与此相同。)
-
+
{{< codenew file="service/networking/dual-stack-default-svc.yaml" >}}
下面示例演示了在服务已经存在的集群上新启用双栈时的默认行为。
-(将现有集群升级到 1.21 会启用双协议栈支持,除非设置了
-`--feature-gates="IPv6DualStack=false"`)
+(将现有集群升级到 1.21 或者更高版本会启用双协议栈支持。)
+## Windows 支持
+
+Windows 上的 Kubernetes 不支持单栈“仅 IPv6” 网络。 然而,
+对于 Pod 和节点而言,仅支持单栈形式服务的双栈 IPv4/IPv6 网络是被支持的。
+
+你可以使用 `l2bridge` 网络来实现 IPv4/IPv6 双栈联网。
+
+{{< note >}}
+Windows 上的 Overlay (VXLAN) 网络**不**支持双栈网络。
+{{< /note >}}
+
+关于 Windows 的不同网络模式,你可以进一步阅读
+[Windows 上的网络](/zh/docs/concepts/services-networking/windows-networking#network-modes)。
+
## {{% heading "whatsnext" %}}
* [验证 IPv4/IPv6 双协议栈](/zh/docs/tasks/network/validate-dual-stack)网络
* [使用 kubeadm 启用双协议栈网络](/zh/docs/setup/production-environment/tools/kubeadm/dual-stack-support/)
diff --git a/content/zh/docs/concepts/services-networking/endpoint-slices.md b/content/zh/docs/concepts/services-networking/endpoint-slices.md
index 447caae39c..05f808a1a9 100644
--- a/content/zh/docs/concepts/services-networking/endpoint-slices.md
+++ b/content/zh/docs/concepts/services-networking/endpoint-slices.md
@@ -52,11 +52,11 @@ significant amounts of network traffic and processing when Endpoints changed.
EndpointSlices help you mitigate those issues as well as provide an extensible
platform for additional features such as topological routing.
-->
-由于任一服务的所有网络端点都保存在同一个 Endpoints 资源中,这类资源可能变得
-非常巨大,而这一变化会影响到 Kubernetes 组件(比如主控组件)的性能,并
-在 Endpoints 变化时产生大量的网络流量和额外的处理。
-EndpointSlice 能够帮助你缓解这一问题,还能为一些诸如拓扑路由这类的额外
-功能提供一个可扩展的平台。
+由于任一 Service 的所有网络端点都保存在同一个 Endpoints 资源中,
+这类资源可能变得非常巨大,而这一变化会影响到 Kubernetes
+组件(比如主控组件)的性能,并在 Endpoints 变化时产生大量的网络流量和额外的处理。
+EndpointSlice 能够帮助你缓解这一问题,
+还能为一些诸如拓扑路由这类的额外功能提供一个可扩展的平台。
-在 v1 API 中,逐个端点设置的 `topology` 实际上被去除,以鼓励使用专用
-的字段 `nodeName` 和 `zone`。
+在 v1 API 中,逐个端点设置的 `topology` 实际上被去除,
+以鼓励使用专用的字段 `nodeName` 和 `zone`。
-对 `EndpointSlice` 对象的 `endpoint` 字段设置任意的拓扑结构信息这一操作已被
-废弃,不再被 v1 API 所支持。取而代之的是 v1 API 所支持的 `nodeName` 和 `zone`
+对 `EndpointSlice` 对象的 `endpoint` 字段设置任意的拓扑结构信息这一操作已被废弃,
+不再被 v1 API 所支持。取而代之的是 v1 API 所支持的 `nodeName` 和 `zone`
这些独立的字段。这些字段可以在不同的 API 版本之间自动完成转译。
-例如,v1beta1 API 中 `topology` 字段的 `topology.kubernetes.io/zone` 取值可以
-在 v1 API 中通过 `zone` 字段访问。
+例如,v1beta1 API 中 `topology` 字段的 `topology.kubernetes.io/zone`
+取值可以在 v1 API 中通过 `zone` 字段访问。
{{< /note >}}
### 属主关系 {#ownership}
-在大多数场合下,EndpointSlice 都由某个 Service 所有,(因为)该端点切片正是
-为该服务跟踪记录其端点。这一属主关系是通过为每个 EndpointSlice 设置一个
-属主(owner)引用,同时设置 `kubernetes.io/service-name` 标签来标明的,
-目的是方便查找隶属于某服务的所有 EndpointSlice。
+在大多数场合下,EndpointSlice 都由某个 Service 所有,
+(因为)该端点切片正是为该服务跟踪记录其端点。这一属主关系是通过为每个 EndpointSlice
+设置一个属主(owner)引用,同时设置 `kubernetes.io/service-name` 标签来标明的,
+目的是方便查找隶属于某 Service 的所有 EndpointSlice。
### EndpointSlice 镜像 {#endpointslice-mirroring}
-在某些场合,应用会创建定制的 Endpoints 资源。为了保证这些应用不需要并发
-的更改 Endpoints 和 EndpointSlice 资源,集群的控制面将大多数 Endpoints
+在某些场合,应用会创建定制的 Endpoints 资源。为了保证这些应用不需要并发的更改
+Endpoints 和 EndpointSlice 资源,集群的控制面将大多数 Endpoints
映射到对应的 EndpointSlice 之上。
-控制面尝试尽量将 EndpointSlice 填满,不过不会主动地在若干 EndpointSlice 之间
-执行再平衡操作。这里的逻辑也是相对直接的:
+控制面尝试尽量将 EndpointSlice 填满,不过不会主动地在若干 EndpointSlice
+之间执行再平衡操作。这里的逻辑也是相对直接的:
-1. 列举所有现有的 EndpointSlices,移除那些不再需要的端点并更新那些已经
- 变化的端点。
+1. 列举所有现有的 EndpointSlices,移除那些不再需要的端点并更新那些已经变化的端点。
2. 列举所有在第一步中被更改过的 EndpointSlices,用新增加的端点将其填满。
3. 如果还有新的端点未被添加进去,尝试将这些端点添加到之前未更改的切片中,
或者创建新切片。
@@ -403,11 +402,11 @@ this approach will create a new EndpointSlice instead of filling up the 2
existing EndpointSlices. In other words, a single EndpointSlice creation is
preferrable to multiple EndpointSlice updates.
-->
-这里比较重要的是,与在 EndpointSlice 之间完成最佳的分布相比,第三步中更看重
-限制 EndpointSlice 更新的操作次数。例如,如果有 10 个端点待添加,有两个
-EndpointSlice 中各有 5 个空位,上述方法会创建一个新的 EndpointSlice 而不是
-将现有的两个 EndpointSlice 都填满。换言之,与执行多个 EndpointSlice 更新操作
-相比较,方法会优先考虑执行一个 EndpointSlice 创建操作。
+这里比较重要的是,与在 EndpointSlice 之间完成最佳的分布相比,第三步中更看重限制
+EndpointSlice 更新的操作次数。例如,如果有 10 个端点待添加,有两个 EndpointSlice
+中各有 5 个空位,上述方法会创建一个新的 EndpointSlice 而不是将现有的两个
+EndpointSlice 都填满。换言之,与执行多个 EndpointSlice 更新操作相比较,
+方法会优先考虑执行一个 EndpointSlice 创建操作。
-由于 kube-proxy 在每个节点上运行并监视 EndpointSlice 状态,EndpointSlice 的
-每次变更都变得相对代价较高,因为这些状态变化要传递到集群中每个节点上。
-这一方法尝试限制要发送到所有节点上的变更消息个数,即使这样做可能会导致有
-多个 EndpointSlice 没有被填满。
+由于 kube-proxy 在每个节点上运行并监视 EndpointSlice 状态,EndpointSlice
+的每次变更都变得相对代价较高,因为这些状态变化要传递到集群中每个节点上。
+这一方法尝试限制要发送到所有节点上的变更消息个数,即使这样做可能会导致有多个
+EndpointSlice 没有被填满。
-在实践中,上面这种并非最理想的分布是很少出现的。大多数被 EndpointSlice 控制器
-处理的变更都是足够小的,可以添加到某已有 EndpointSlice 中去的。并且,假使无法
-添加到已有的切片中,不管怎样都会快就会需要一个新的 EndpointSlice 对象。
-Deployment 的滚动更新为重新为 EndpointSlice 打包提供了一个自然的机会,所有
-Pod 及其对应的端点在这一期间都会被替换掉。
+在实践中,上面这种并非最理想的分布是很少出现的。大多数被 EndpointSlice
+控制器处理的变更都是足够小的,可以添加到某已有 EndpointSlice 中去的。
+并且,假使无法添加到已有的切片中,不管怎样都会快就会需要一个新的
+EndpointSlice 对象。Deployment 的滚动更新为重新为 EndpointSlice
+打包提供了一个自然的机会,所有 Pod 及其对应的端点在这一期间都会被替换掉。
-* 阅读[使用服务连接应用](/zh/docs/concepts/services-networking/connect-applications-service/)
+* 阅读[使用 Service 连接到应用](/zh/docs/concepts/services-networking/connect-applications-service/)
diff --git a/content/zh/docs/concepts/services-networking/ingress-controllers.md b/content/zh/docs/concepts/services-networking/ingress-controllers.md
index a85e073404..06a4c948bd 100644
--- a/content/zh/docs/concepts/services-networking/ingress-controllers.md
+++ b/content/zh/docs/concepts/services-networking/ingress-controllers.md
@@ -158,8 +158,9 @@ You mark an IngressClass as default by setting the [`ingressclass.kubernetes.io/
Ideally, all ingress controllers should fulfill this specification, but the various ingress
controllers operate slightly differently.
-->
-如果你不为 Ingress 指定一个 IngressClass,并且你的集群中只有一个 IngressClass 被标记为了集群默认,那么
-Kubernetes 会[应用](/zh/docs/concepts/services-networking/ingress/#default-ingress-class)此默认
+如果你不为 Ingress 指定 IngressClass,并且你的集群中只有一个 IngressClass 被标记为默认,那么
+Kubernetes 会将此集群的默认 IngressClass
+[应用](/zh/docs/concepts/services-networking/ingress/#default-ingress-class)到 Ingress 上。
IngressClass。
你可以通过将
[`ingressclass.kubernetes.io/is-default-class` 注解](/zh/docs/reference/labels-annotations-taints/#ingressclass-kubernetes-io-is-default-class)
diff --git a/content/zh/docs/concepts/services-networking/ingress.md b/content/zh/docs/concepts/services-networking/ingress.md
index 2a1548d654..037b135c0d 100644
--- a/content/zh/docs/concepts/services-networking/ingress.md
+++ b/content/zh/docs/concepts/services-networking/ingress.md
@@ -137,7 +137,7 @@ A minimal Ingress resource example:
{{< codenew file="service/networking/minimal-ingress.yaml" >}}
-与所有其他 Kubernetes 资源一样,Ingress 需要指定 `apiVersion`、`kind` 和 `metadata` 字段。
+Ingress 需要指定 `apiVersion`、`kind`、 `metadata`和 `spec` 字段。
Ingress 对象的命名必须是合法的 [DNS 子域名名称](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
关于如何使用配置文件,请参见[部署应用](/zh/docs/tasks/run-application/run-stateless-application-deployment/)、
[配置容器](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/)、
diff --git a/content/zh/docs/concepts/services-networking/network-policies.md b/content/zh/docs/concepts/services-networking/network-policies.md
index c49c4b99f1..ef2884c281 100644
--- a/content/zh/docs/concepts/services-networking/network-policies.md
+++ b/content/zh/docs/concepts/services-networking/network-policies.md
@@ -13,7 +13,7 @@ weight: 50
如果你希望在 IP 地址或端口层面(OSI 第 3 层或第 4 层)控制网络流量,
则你可以考虑为集群中特定应用使用 Kubernetes 网络策略(NetworkPolicy)。
@@ -21,6 +21,7 @@ NetworkPolicy 是一种以应用为中心的结构,允许你设置如何允许
{{< glossary_tooltip text="Pod" term_id="pod">}} 与网络上的各类网络“实体”
(我们这里使用实体以避免过度使用诸如“端点”和“服务”这类常用术语,
这些术语在 Kubernetes 中有特定含义)通信。
+NetworkPolicies 适用于一端或两端与 Pod 的连接,与其他连接无关。
-## Pod 隔离的两种类型
+## Pod 隔离的两种类型 {#the-two-sorts-of-pod-isolation}
Pod 有两种隔离: 出口的隔离和入口的隔离。它们涉及到可以建立哪些连接。
这里的“隔离”不是绝对的,而是意味着“有一些限制”。
@@ -90,7 +91,7 @@ By default, a pod is non-isolated for ingress; all inbound connections are allow
默认情况下,一个 Pod 对入口是非隔离的,即所有入站连接都是被允许的。如果有任何的 NetworkPolicy
选择该 Pod 并在其 `policyTypes` 中包含 “Ingress”,则该 Pod 被隔离入口,
-我们称这种策略适用于该 Pod 的入口。 当一个 Pod 的入口被隔离时,唯一允许进入该 Pod
+我们称这种策略适用于该 Pod 的入口。当一个 Pod 的入口被隔离时,唯一允许进入该 Pod
的连接是来自该 Pod 节点的连接和适用于入口的 Pod 的某个 NetworkPolicy 的 `ingress`
列表所允许的连接。这些 `ingress` 列表的效果是相加的。
@@ -121,42 +122,7 @@ An example NetworkPolicy might look like this:
下面是一个 NetworkPolicy 的示例:
-```yaml
-apiVersion: networking.k8s.io/v1
-kind: NetworkPolicy
-metadata:
- name: test-network-policy
- namespace: default
-spec:
- podSelector:
- matchLabels:
- role: db
- policyTypes:
- - Ingress
- - Egress
- ingress:
- - from:
- - ipBlock:
- cidr: 172.17.0.0/16
- except:
- - 172.17.1.0/24
- - namespaceSelector:
- matchLabels:
- project: myproject
- - podSelector:
- matchLabels:
- role: frontend
- ports:
- - protocol: TCP
- port: 6379
- egress:
- - to:
- - ipBlock:
- cidr: 10.0.0.0/24
- ports:
- - protocol: TCP
- port: 5978
-```
+{{< codenew file="service/networking/networkpolicy.yaml" >}}
__必需字段__:与所有其他的 Kubernetes 配置一样,NetworkPolicy 需要 `apiVersion`、
`kind` 和 `metadata` 字段。关于配置文件操作的一般信息,请参考
-[使用 ConfigMap 配置容器](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/),
+[配置 Pod 以使用 ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/),
和[对象管理](/zh/docs/concepts/overview/working-with-objects/object-management)。
__spec__:NetworkPolicy [规约](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status)
@@ -204,7 +170,7 @@ __policyTypes__: 每个 NetworkPolicy 都包含一个 `policyTypes` 列表,其
__ingress__: 每个 NetworkPolicy 可包含一个 `ingress` 规则的白名单列表。
每个规则都允许同时匹配 `from` 和 `ports` 部分的流量。示例策略中包含一条
-简单的规则: 它匹配某个特定端口,来自三个来源中的一个,第一个通过 `ipBlock`
+简单的规则:它匹配某个特定端口,来自三个来源中的一个,第一个通过 `ipBlock`
指定,第二个通过 `namespaceSelector` 指定,第三个通过 `podSelector` 指定。
__egress__: 每个 NetworkPolicy 可包含一个 `egress` 规则的白名单列表。
@@ -215,7 +181,7 @@ __egress__: 每个 NetworkPolicy 可包含一个 `egress` 规则的白名单列
So, the example NetworkPolicy:
1. isolates "role=db" pods in the "default" namespace for both ingress and egress traffic (if they weren't already isolated)
-2. (Ingress rules) allows connections to all pods in the “default” namespace with the label “role=db” on TCP port 6379 from:
+2. (Ingress rules) allows connections to all pods in the "default" namespace with the label "role=db" on TCP port 6379 from:
* any pod in the "default" namespace with the label "role=frontend"
* any pod in a namespace with the label "project=myproject"
@@ -235,7 +201,7 @@ See the [Declare Network Policy](/docs/tasks/administer-cluster/declare-network-
* IP 地址范围为 172.17.0.0–172.17.0.255 和 172.17.2.0–172.17.255.255
(即,除了 172.17.1.0/24 之外的所有 172.17.0.0/16)
-3. (Egress 规则)允许从带有 "role=db" 标签的名字空间下的任何 Pod 到 CIDR
+3. (Egress 规则)允许 “default” 命名空间中任何带有标签 “role=db” 的 Pod 到 CIDR
10.0.0.0/24 下 5978 TCP 端口的连接。
参阅[声明网络策略](/zh/docs/tasks/administer-cluster/declare-network-policy/)演练
@@ -262,7 +228,7 @@ Pod,应将其允许作为入站流量来源或出站流量目的地。
__namespaceSelector__:此选择器将选择特定的名字空间,应将所有 Pod 用作其
入站流量来源或出站流量目的地。
-__namespaceSelector__ *和* __podSelector__: 一个指定 `namespaceSelector`
+__namespaceSelector__ *和* __podSelector__:一个指定 `namespaceSelector`
和 `podSelector` 的 `to`/`from` 条目选择特定名字空间中的特定 Pod。
注意使用正确的 YAML 语法;下面的策略:
@@ -351,40 +317,47 @@ in that namespace.
-### 默认拒绝所有入站流量
+### 默认拒绝所有入站流量 {#default-deny-all-ingress-traffic}
+
你可以通过创建选择所有容器但不允许任何进入这些容器的入站流量的 NetworkPolicy
来为名字空间创建 “default” 隔离策略。
{{< codenew file="service/networking/network-policy-default-deny-ingress.yaml" >}}
-这样可以确保即使容器没有选择其他任何 NetworkPolicy,也仍然可以被隔离。
-此策略不会更改默认的出口隔离行为。
+这确保即使没有被任何其他 NetworkPolicy 选择的 Pod 仍将被隔离以进行入口。
+此策略不影响任何 Pod 的出口隔离。
-### 默认允许所有入站流量
+### 允许所有入站流量 {#allow-all-ingress-traffic}
-如果要允许所有流量进入某个名字空间中的所有 Pod(即使添加了导致某些 Pod 被视为
-“隔离”的策略),则可以创建一个策略来明确允许该名字空间中的所有流量。
+
+如果你想允许一个命名空间中所有 Pod 的所有入站连接,你可以创建一个明确允许的策略。
{{< codenew file="service/networking/network-policy-allow-all-ingress.yaml" >}}
+
+有了这个策略,任何额外的策略都不会导致到这些 Pod 的任何入站连接被拒绝。
+此策略对任何 Pod 的出口隔离没有影响。
+
-### 默认拒绝所有出站流量
+### 默认拒绝所有出站流量 {#default-deny-all-egress-traffic}
你可以通过创建选择所有容器但不允许来自这些容器的任何出站流量的 NetworkPolicy
来为名字空间创建 “default” 隔离策略。
@@ -393,29 +366,36 @@ You can create a "default" egress isolation policy for a namespace by creating a
此策略可以确保即使没有被其他任何 NetworkPolicy 选择的 Pod 也不会被允许流出流量。
-此策略不会更改默认的入站流量隔离行为。
+此策略不会更改任何 Pod 的入站流量隔离行为。
-### 默认允许所有出站流量
+### 允许所有出站流量 {#allow-all-egress-traffic}
-如果要允许来自名字空间中所有 Pod 的所有流量(即使添加了导致某些 Pod 被视为“隔离”的策略),
-则可以创建一个策略,该策略明确允许该名字空间中的所有出站流量。
+
+如果要允许来自命名空间中所有 Pod 的所有连接,
+则可以创建一个明确允许来自该命名空间中 Pod 的所有出站连接的策略。
{{< codenew file="service/networking/network-policy-allow-all-egress.yaml" >}}
+
+有了这个策略,任何额外的策略都不会导致来自这些 Pod 的任何出站连接被拒绝。
+此策略对进入任何 Pod 的隔离没有影响。
+
-### 默认拒绝所有入口和所有出站流量
+### 默认拒绝所有入站和所有出站流量 {#default-deny-all-ingress-and-all-egress-traffic}
你可以为名字空间创建“默认”策略,以通过在该名字空间中创建以下 NetworkPolicy
来阻止所有入站和出站流量。
@@ -431,7 +411,7 @@ This ensures that even pods that aren't selected by any other NetworkPolicy will
-## SCTP 支持
+## SCTP 支持 {#sctp-support}
{{< feature-state for_k8s_version="v1.20" state="stable" >}}
@@ -500,7 +480,10 @@ port is between the range 32000 and 32768.
-## 通过网络策略(至少目前还)无法完成的工作
+## 通过网络策略(至少目前还)无法完成的工作 {#what-you-can-t-do-with-network-policies-at-least-not-yet}
到 Kubernetes {{< skew latestVersion >}} 为止,NetworkPolicy API 还不支持以下功能,不过
你可能可以使用操作系统组件(如 SELinux、OpenVSwitch、IPTables 等等)
diff --git a/content/zh/docs/concepts/services-networking/service.md b/content/zh/docs/concepts/services-networking/service.md
index 3d2db97c3c..be64669d1c 100644
--- a/content/zh/docs/concepts/services-networking/service.md
+++ b/content/zh/docs/concepts/services-networking/service.md
@@ -39,7 +39,7 @@ Kubernetes 为 Pods 提供自己的 IP 地址,并为一组 Pod 提供相同的
## Motivation
Kubernetes {{< glossary_tooltip term_id="pod" text="Pods" >}} are created and destroyed
-to match the state of your cluster. Pods are nonpermanent resources.
+to match the desired state of your cluster. Pods are nonpermanent resources.
If you use a {{< glossary_tooltip term_id="deployment" >}} to run your app,
it can create and destroy Pods dynamically.
@@ -57,7 +57,7 @@ Enter _Services_.
## 动机
-创建和销毁 Kubernetes {{< glossary_tooltip term_id="pod" text="Pod" >}} 以匹配集群状态。
+创建和销毁 Kubernetes {{< glossary_tooltip term_id="pod" text="Pod" >}} 以匹配集群的期望状态。
Pod 是非永久性资源。
如果你使用 {{< glossary_tooltip term_id="deployment">}}
来运行你的应用程序,则它可以动态创建和销毁 Pod。
@@ -189,13 +189,55 @@ field.
+Pod 中的端口定义是有名字的,你可以在 Service 的 `targetPort` 属性中引用这些名称。
+例如,我们可以通过以下方式将 Service 的 `targetPort` 绑定到 Pod 端口:
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ name: nginx
+ labels:
+ app.kubernetes.io/name: proxy
+spec:
+ containers:
+ - name: nginx
+ image: nginx:11.14.2
+ ports:
+ - containerPort: 80
+ name: http-web-svc
+
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: nginx-service
+spec:
+ selector:
+ app.kubernetes.io/name: proxy
+ ports:
+ - name: name-of-service-port
+ protocol: TCP
+ port: 80
+ targetPort: http-web-svc
+```
+
+
+即使 Service 中使用同一配置名称混合使用多个 Pod,各 Pod 通过不同的端口号支持相同的网络协议,
+此功能也可以使用。这为 Service 的部署和演化提供了很大的灵活性。
+例如,你可以在新版本中更改 Pod 中后端软件公开的端口号,而不会破坏客户端。
+
+
+
-Pod 中的端口定义是有名字的,你可以在服务的 `targetPort` 属性中引用这些名称。
-即使服务中使用单个配置的名称混合使用 Pod,并且通过不同的端口号提供相同的网络协议,此功能也可以使用。
-这为部署和发展服务提供了很大的灵活性。
-例如,你可以更改 Pods 在新版本的后端软件中公开的端口号,而不会破坏客户端。
+
服务的默认协议是 TCP;你还可以使用任何其他[受支持的协议](#protocol-support)。
@@ -216,9 +255,9 @@ Pod 中的端口定义是有名字的,你可以在服务的 `targetPort` 属
### 没有选择算符的 Service {#services-without-selectors}
-服务最常见的是抽象化对 Kubernetes Pod 的访问,但是它们也可以抽象化其他种类的后端。
-实例:
+由于选择器的存在,服务最常见的用法是为 Kubernetes Pod 的访问提供抽象,
+但是当与相应的 Endpoints 对象一起使用且没有选择器时,
+服务也可以为其他类型的后端提供抽象,包括在集群外运行的后端。
+例如:
* 希望在生产环境中使用外部的数据库集群,但测试环境使用自己的数据库。
* 希望服务指向另一个 {{< glossary_tooltip term_id="namespace" >}} 中或其它集群中的服务。
@@ -590,6 +631,14 @@ You can also set the maximum session sticky time by setting
来设置最大会话停留时间。
(默认值为 10800 秒,即 3 小时)。
+
+{{< note >}}
+在 Windows 上,不支持为服务设置最大会话停留时间。
+{{< /note >}}
+
+
@@ -751,11 +800,7 @@ Kubernetes 支持两种基本的服务发现模式 —— 环境变量和 DNS。
### Environment variables
When a Pod is run on a Node, the kubelet adds a set of environment variables
-for each active Service. It supports both [Docker links
-compatible](https://docs.docker.com/userguide/dockerlinks/) variables (see
-[makeLinkVariables](https://releases.k8s.io/{{< param "githubbranch" >}}/pkg/kubelet/envvars/envvars.go#L49))
-and simpler `{SVCNAME}_SERVICE_HOST` and `{SVCNAME}_SERVICE_PORT` variables,
-where the Service name is upper-cased and dashes are converted to underscores.
+for each active Service. It adds `{SVCNAME}_SERVICE_HOST` and `{SVCNAME}_SERVICE_PORT` variables, where the Service name is upper-cased and dashes are converted to underscores. It also supports variables (see [makeLinkVariables](https://github.com/kubernetes/kubernetes/blob/dd2d12f6dc0e654c15d5db57a5f9f6ba61192726/pkg/kubelet/envvars/envvars.go#L72)) that are compatible with Docker Engine's "_[legacy container links](https://docs.docker.com/network/links/)_" feature.
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
@@ -764,10 +809,10 @@ variables:
### 环境变量 {#environment-variables}
当 Pod 运行在 `Node` 上,kubelet 会为每个活跃的 Service 添加一组环境变量。
-它同时支持 [Docker links兼容](https://docs.docker.com/userguide/dockerlinks/) 变量
-(查看 [makeLinkVariables](https://releases.k8s.io/{{< param "githubbranch" >}}/pkg/kubelet/envvars/envvars.go#L49))、
-简单的 `{SVCNAME}_SERVICE_HOST` 和 `{SVCNAME}_SERVICE_PORT` 变量。
+kubelet 为 Pod 添加环境变量 `{SVCNAME}_SERVICE_HOST` 和 `{SVCNAME}_SERVICE_PORT`。
这里 Service 的名称需大写,横线被转换成下划线。
+它还支持与 Docker Engine 的 "_[legacy container links](https://docs.docker.com/network/links/)_" 特性兼容的变量
+(参阅 [makeLinkVariables](https://github.com/kubernetes/kubernetes/blob/dd2d12f6dc0e654c15d5db57a5f9f6ba61192726/pkg/kubelet/envvars/envvars.go#L72)) 。
举个例子,一个名称为 `redis-master` 的 Service 暴露了 TCP 端口 6379,
同时给它分配了 Cluster IP 地址 10.0.0.11,这个 Service 生成了如下环境变量:
@@ -1145,13 +1190,15 @@ securityGroupName。
#### 混合协议类型的负载均衡器
@@ -1160,14 +1207,16 @@ If the feature gate `MixedProtocolLBService` is enabled for the kube-apiserver i
默认情况下,对于 LoadBalancer 类型的服务,当定义了多个端口时,所有
端口必须具有相同的协议,并且该协议必须是受云提供商支持的协议。
-如果为 kube-apiserver 启用了 `MixedProtocolLBService` 特性门控,
-则当定义了多个端口时,允许使用不同的协议。
+当服务中定义了多个端口时,特性门控 `MixedProtocolLBService`(在 kube-apiserver 1.24 版本默认为启用)允许
+LoadBalancer 类型的服务使用不同的协议。
{{< note >}}
可用于 LoadBalancer 类型服务的协议集仍然由云提供商决定。
+如果云提供商不支持混合协议,他们将只提供单一协议。
{{< /note >}}
### 禁用负载均衡器节点端口分配 {#load-balancer-nodeport-allocation}
-{{< feature-state for_k8s_version="v1.20" state="alpha" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
-从 v1.20 版本开始, 你可以通过设置 `spec.allocateLoadBalancerNodePorts` 为 `false`
+你可以通过设置 `spec.allocateLoadBalancerNodePorts` 为 `false`
对类型为 LoadBalancer 的服务禁用节点端口分配。
这仅适用于直接将流量路由到 Pod 而不是使用节点端口的负载均衡器实现。
默认情况下,`spec.allocateLoadBalancerNodePorts` 为 `true`,
LoadBalancer 类型的服务继续分配节点端口。
如果现有服务已被分配节点端口,将参数 `spec.allocateLoadBalancerNodePorts`
-设置为 `false` 时,这些服务上已分配置的节点端口不会被自动释放。
+设置为 `false` 时,这些服务上已分配置的节点端口**不会**被自动释放。
你必须显式地在每个服务端口中删除 `nodePorts` 项以释放对应端口。
-你必须启用 `ServiceLBNodePortControl` 特性门控才能使用该字段。
#### 设置负载均衡器实现的类别 {#load-balancer-class}
-{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
`spec.loadBalancerClass` 允许你不使用云提供商的默认负载均衡器实现,转而使用指定的负载均衡器实现。
-这个特性从 v1.21 版本开始可以使用,你在 v1.21 版本中使用这个字段必须启用 `ServiceLoadBalancerClass`
-特性门控,这个特性门控从 v1.22 版本及以后默认打开。
默认情况下,`.spec.loadBalancerClass` 的取值是 `nil`,如果集群使用 `--cloud-provider` 配置了云提供商,
`LoadBalancer` 类型服务会使用云提供商的默认负载均衡器实现。
如果设置了 `.spec.loadBalancerClass`,则假定存在某个与所指定的类相匹配的
@@ -1972,7 +2017,8 @@ someone else's choice. That is an isolation failure.
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.
+Service its own IP address from within the `service-cluster-ip-range`
+CIDR range that is configured for the API server.
To ensure each Service receives a unique IP, an internal allocator atomically
updates a global allocation map in {{< glossary_tooltip term_id="etcd" >}}
@@ -1992,8 +2038,9 @@ Kubernetes 最主要的哲学之一,是用户不应该暴露那些能够导致
对于 Service 资源的设计,这意味着如果用户的选择有可能与他人冲突,那就不要让用户自行选择端口号。
这是一个隔离性的失败。
-为了使用户能够为他们的 Service 选择一个端口号,我们必须确保不能有2个 Service 发生冲突。
-Kubernetes 通过为每个 Service 分配它们自己的 IP 地址来实现。
+为了使用户能够为他们的 Service 选择一个端口号,我们必须确保不能有 2 个 Service 发生冲突。
+Kubernetes 通过在为 API 服务器配置的 `service-cluster-ip-range` CIDR
+范围内为每个服务分配自己的 IP 地址来实现。
为了保证每个 Service 被分配到一个唯一的 IP,需要一个内部的分配器能够原子地更新
{{< glossary_tooltip term_id="etcd" >}} 中的一个全局分配映射表,
@@ -2006,6 +2053,42 @@ Kubernetes 通过为每个 Service 分配它们自己的 IP 地址来实现。
同时 Kubernetes 会通过控制器检查不合理的分配(如管理员干预导致的)
以及清理已被分配但不再被任何 Service 使用的 IP 地址。
+
+#### `type: ClusterIP` 服务的 IP 地址范围 {#service-ip-static-sub-range}
+
+{{< feature-state for_k8s_version="v1.24" state="alpha" >}}
+但是,这种 `ClusterIP` 分配策略存在一个问题,因为用户还可以[为服务选择自己的地址](#choosing-your-own-ip-address)。
+如果内部分配器为另一个服务选择相同的 IP 地址,这可能会导致冲突。
+
+
+如果启用 `ServiceIPStaticSubrange`[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
+分配策略根据配置的 `service-cluster-ip-range` 的大小,使用以下公式
+`min(max(16, cidrSize / 16), 256)` 进行划分,该公式可描述为
+“在不小于 16 且不大于 256 之间有一个步进量(Graduated Step)”,将
+`ClusterIP` 范围分成两段。动态 IP 分配将优先从上半段地址中选择,
+从而降低与下半段地址分配的 IP 冲突的风险。
+这允许用户将 `service-cluster-ip-range` 的下半段地址用于他们的服务,
+与所分配的静态 IP 的冲突风险非常低。
+
+
+{{< note >}}
+“拓扑感知提示”特性处于 Beta 阶段,并且默认情况下**未**启用。
+要试用此特性,你必须启用 `TopologyAwareHints`
+[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。
+{{< /note >}}
+
+
+
+Kubernetes 支持运行 Linux 或 Windows 节点。
+你可以在统一集群内混布这两种节点。
+本页提供了特定于 Windows 操作系统的网络概述。
+
+
+
+## Windows 容器网络 {#networking}
+
+Windows 容器网络通过 [CNI 插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)暴露。
+Windows 容器网络的工作方式与虚拟机类似。
+每个容器都有一个连接到 Hyper-V 虚拟交换机(vSwitch)的虚拟网络适配器(vNIC)。
+主机网络服务(Host Networking Service,HNS)和主机计算服务(Host Comute Service,HCS)
+协同创建容器并将容器 vNIC 挂接到网络。
+HCS 负责管理容器,而 HNS 负责管理以下网络资源:
+
+* 虚拟网络(包括创建 vSwitch)
+* Endpoint / vNIC
+* 命名空间
+* 包括数据包封装、负载均衡规则、ACL 和 NAT 规则在内的策略。
+
+
+Windows HNS 和 vSwitch 实现命名空间划分,且可以按需为 Pod 或容器创建虚拟 NIC。
+然而,诸如 DNS、路由和指标等许多配置将存放在 Windows 注册表数据库中,
+而不是像 Linux 将这些配置作为文件存放在 `/etc` 内。
+针对容器的 Windows 注册表与主机的注册表是分开的,因此将 `/etc/resolv.conf`
+从主机映射到一个容器的类似概念与 Linux 上的效果不同。
+这些必须使用容器环境中运行的 Windows API 进行配置。
+因此,实现 CNI 时需要调用 HNS,而不是依赖文件映射将网络详情传递到 Pod 或容器中。
+
+
+## 网络模式 {#network-mode}
+
+Windows 支持五种不同的网络驱动/模式:L2bridge、L2tunnel、Overlay (Beta)、Transparent 和 NAT。
+在 Windows 和 Linux 工作节点组成的异构集群中,你需要选择一个同时兼容 Windows 和 Linux 的网络方案。
+下表列出了 Windows 支持的树外插件,并给出了何时使用每种 CNI 的建议:
+
+
+| 网络驱动 | 描述 | 容器数据包修改 | 网络插件 | 网络插件特点 |
+| -------------- | ----------- | ------------------------------ | --------------- | ------------------------------ |
+| L2bridge | 容器挂接到一个外部 vSwitch。容器挂接到下层网络,但物理网络不需要了解容器的 MAC,因为这些 MAC 在入站/出站时被重写。 | MAC 被重写为主机 MAC,可使用 HNS OutboundNAT 策略将 IP 重写为主机 IP。 | [win-bridge](https://github.com/containernetworking/plugins/tree/master/plugins/main/windows/win-bridge)、[Azure-CNI](https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md)、Flannel host-gateway 使用 win-bridge| win-bridge 使用 L2bridge 网络模式,将容器连接到主机的下层,提供最佳性能。节点间连接需要用户定义的路由(UDR)。 |
+| L2Tunnel | 这是 L2bridge 的一种特例,但仅用在 Azure 上。所有数据包都会被发送到应用了 SDN 策略的虚拟化主机。 | MAC 被重写,IP 在下层网络上可见。| [Azure-CNI](https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md) | Azure-CNI 允许将容器集成到 Azure vNET,允许容器充分利用 [Azure 虚拟网络](https://azure.microsoft.com/zh-cn/services/virtual-network/)所提供的能力集合。例如,安全地连接到 Azure 服务或使用 Azure NSG。参考 [azure-cni 了解有关示例](https://docs.microsoft.com/zh-cn/azure/aks/concepts-network#azure-cni-advanced-networking)。 |
+| Overlay | 容器被赋予一个 vNIC,连接到外部 vSwitch。每个上层网络都有自己的 IP 子网,由自定义 IP 前缀进行定义。该上层网络驱动使用 VXLAN 封装。 | 用外部头进行封装。 | [win-overlay](https://github.com/containernetworking/plugins/tree/master/plugins/main/windows/win-overlay)、Flannel VXLAN(使用 win-overlay) | 当需要将虚拟容器网络与主机的下层隔离时(例如出于安全原因),应使用 win-overlay。如果你的数据中心的 IP 个数有限,可以将 IP 在不同的上层网络中重用(带有不同的 VNID 标记)。在 Windows Server 2019 上这个选项需要 [KB4489899](https://support.microsoft.com/zh-cn/help/4489899)。 |
+| Transparent([ovn-kubernetes](https://github.com/openvswitch/ovn-kubernetes) 的特殊用例) | 需要一个外部 vSwitch。容器挂接到一个外部 vSwitch,由后者通过逻辑网络(逻辑交换机和路由器)实现 Pod 内通信。 | 数据包通过 [GENEVE](https://datatracker.ietf.org/doc/draft-gross-geneve/) 或 [STT](https://datatracker.ietf.org/doc/draft-davie-stt/) 隧道进行封装,以到达其它主机上的 Pod。 数据包基于 OVN 网络控制器提供的隧道元数据信息被转发或丢弃。 南北向通信使用 NAT。 | [ovn-kubernetes](https://github.com/openvswitch/ovn-kubernetes) | [通过 ansible 部署](https://github.com/openvswitch/ovn-kubernetes/tree/master/contrib)。通过 Kubernetes 策略可以实施分布式 ACL。支持 IPAM。无需 kube-proxy 即可实现负载均衡。无需 iptables/netsh 即可进行 NAT。 |
+| NAT(**Kubernetes 中未使用**) | 容器被赋予一个 vNIC,连接到内部 vSwitch。DNS/DHCP 是使用一个名为 [WinNAT 的内部组件](https://techcommunity.microsoft.com/t5/virtualization/windows-nat-winnat-capabilities-and-limitations/ba-p/382303)实现的 | MAC 和 IP 重写为主机 MAC/IP。 | [nat](https://github.com/Microsoft/windows-container-networking/tree/master/plugins/nat) | 放在此处保持完整性。 |
+
+
+如上所述,Windows 通过 [VXLAN 网络后端](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan)(**Beta 支持**;委派给 win-overlay)
+和 [host-gateway 网络后端](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#host-gw)(稳定支持;委派给 win-bridge)
+也[支持](https://github.com/flannel-io/cni-plugin#windows-support-experimental) [Flannel](https://github.com/coreos/flannel) 的 [CNI 插件](https://github.com/flannel-io/cni-plugin)。
+
+
+此插件支持委派给参考 CNI 插件(win-overlay、win-bridge)之一,配合使用 Windows
+上的 Flannel 守护程序(Flanneld),以便自动分配节点子网租赁并创建 HNS 网络。
+该插件读取自己的配置文件(cni.conf),并聚合 FlannelD 生成的 subnet.env 文件中的环境变量。
+然后,委派给网络管道的参考 CNI 插件之一,并将包含节点分配子网的正确配置发送给 IPAM 插件(例如:`host-local`)。
+
+
+对于 Node、Pod 和 Service 对象,TCP/UDP 流量支持以下网络流:
+
+* Pod → Pod(IP)
+* Pod → Pod(名称)
+* Pod → Service(集群 IP)
+* Pod → Service(PQDN,但前提是没有 ".")
+* Pod → Service(FQDN)
+* Pod → 外部(IP)
+* Pod → 外部(DNS)
+* Node → Pod
+* Pod → Node
+
+
+## IP 地址管理(IPAM) {#ipam}
+
+Windows 支持以下 IPAM 选项:
+
+* [host-local](https://github.com/containernetworking/plugins/tree/master/plugins/ipam/host-local)
+* [azure-vnet-ipam](https://github.com/Azure/azure-container-networking/blob/master/docs/ipam.md)(仅适用于 azure-cni)
+* [Windows Server IPAM](https://docs.microsoft.com/zh-cn/windows-server/networking/technologies/ipam/ipam-top)(未设置 IPAM 时的回滚选项)
+
+
+## 负载均衡和 Service {#load-balancing-and-services}
+
+Kubernetes {{< glossary_tooltip text="Service" term_id="service" >}} 是一种抽象:定义了逻辑上的一组 Pod 和一种通过网络访问这些 Pod 的方式。
+在包含 Windows 节点的集群中,你可以使用以下类别的 Service:
+
+* `NodePort`
+* `ClusterIP`
+* `LoadBalancer`
+* `ExternalName`
+
+
+Windows 容器网络与 Linux 网络有着很重要的差异。
+更多细节和背景信息,参考 [Microsoft Windows 容器网络文档](https://docs.microsoft.com/zh-cn/virtualization/windowscontainers/container-networking/architecture)。
+
+在 Windows 上,你可以使用以下设置来配置 Service 和负载均衡行为:
+
+
+{{< table caption="Windows Service 设置" >}}
+| 功能特性 | 描述 | 支持的 Windows 操作系统最低版本 | 启用方式 |
+| ------- | ----------- | -------------------------- | ------------- |
+| 会话亲和性 | 确保每次都将来自特定客户端的连接传递到同一个 Pod。 | Windows Server 2022 | 将 `service.spec.sessionAffinity` 设为 “ClientIP” |
+| Direct Server Return (DSR) | 在负载均衡模式中 IP 地址修正和 LBNAT 直接发生在容器 vSwitch 端口;服务流量到达时源 IP 设置为原始 Pod IP。 | Windows Server 2019 | 在 kube-proxy 中设置以下标志:`--feature-gates="WinDSR=true" --enable-dsr=true` |
+| 保留目标(Preserve-Destination) | 跳过服务流量的 DNAT,从而在到达后端 Pod 的数据包中保留目标服务的虚拟 IP。也会禁用节点间的转发。 | Windows Server,version 1903 | 在服务注解中设置 `"preserve-destination": "true"` 并在 kube-proxy 中启用 DSR。 |
+| IPv4/IPv6 双栈网络 | 进出集群和集群内通信都支持原生的 IPv4 间与 IPv6 间流量 | Windows Server 2019 | 参考 [IPv4/IPv6 双栈](#ipv4ipv6-dual-stack)。 |
+| 客户端 IP 保留 | 确保入站流量的源 IP 得到保留。也会禁用节点间转发。 | Windows Server 2019 | 将 `service.spec.externalTrafficPolicy` 设置为 “Local” 并在 kube-proxy 中启用 DSR。 |
+{{< /table >}}
+
+
+{{< warning >}}
+如果目的地节点在运行 Windows Server 2022,则上层网络的 NodePort Service 存在已知问题。
+要完全避免此问题,可以使用 `externalTrafficPolicy: Local` 配置服务。
+
+在安装了 KB5005619 的 Windows Server 2022 或更高版本上,采用 L2bridge 网络时
+Pod 间连接存在已知问题。
+要解决此问题并恢复 Pod 间连接,你可以在 kube-proxy 中禁用 WinDSR 功能。
+
+这些问题需要操作系统修复。
+有关更新,请参考 https://github.com/microsoft/Windows-Containers/issues/204。
+{{< /warning >}}
+
+
+## 限制 {#limitations}
+
+Windows 节点**不支持**以下网络功能:
+
+* 主机网络模式
+* 从节点本身访问本地 NodePort(可以从其他节点或外部客户端进行访问)
+* 为同一 Service 提供 64 个以上后端 Pod(或不同目的地址)
+* 在连接到上层网络的 Windows Pod 之间使用 IPv6 通信
+* 非 DSR 模式中的本地流量策略(Local Traffic Policy)
+
+
+* 通过 `win-overlay`、`win-bridge` 使用 ICMP 协议,或使用 Azure-CNI 插件进行出站通信。
+ 具体而言,Windows 数据平面([VFP](https://www.microsoft.com/research/project/azure-virtual-filtering-platform/))不支持 ICMP 数据包转换,这意味着:
+ * 指向同一网络内目的地址的 ICMP 数据包(例如 Pod 间的 ping 通信)可正常工作;
+ * TCP/UDP 数据包可正常工作;
+ * 通过远程网络指向其它地址的 ICMP 数据包(例如通过 ping 从 Pod 到外部公网的通信)无法被转换,
+ 因此无法被路由回到这些数据包的源点;
+ * 由于 TCP/UDP 数据包仍可被转换,所以在调试与外界的连接时,
+ 你可以将 `ping ` 替换为 `curl `。
+
+
+其他限制:
+
+* 由于缺少 `CHECK` 实现,Windows 参考网络插件 win-bridge 和 win-overlay 未实现
+[CNI 规约](https://github.com/containernetworking/cni/blob/master/SPEC.md) 的 v0.4.0 版本。
+* Flannel VXLAN CNI 插件在 Windows 上有以下限制:
+ * 使用 Flannel v0.12.0(或更高版本)时,节点到 Pod 的连接仅适用于本地 Pod。
+ * Flannel 仅限于使用 VNI 4096 和 UDP 端口 4789。
+ 有关这些参数的更多详细信息,请参考官方的 [Flannel VXLAN](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan) 后端文档。
diff --git a/content/zh/docs/concepts/storage/dynamic-provisioning.md b/content/zh/docs/concepts/storage/dynamic-provisioning.md
index 14b72ac157..f673dfa5f5 100644
--- a/content/zh/docs/concepts/storage/dynamic-provisioning.md
+++ b/content/zh/docs/concepts/storage/dynamic-provisioning.md
@@ -70,11 +70,15 @@ To enable dynamic provisioning, a cluster administrator needs to pre-create
one or more StorageClass objects for users.
StorageClass objects define which provisioner should be used and what parameters
should be passed to that provisioner when dynamic provisioning is invoked.
+The name of a StorageClass object must be a valid
+[DNS subdomain name](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names).
+
The following manifest creates a storage class "slow" which provisions standard
disk-like persistent disks.
-->
要启用动态供应功能,集群管理员需要为用户预先创建一个或多个 `StorageClass` 对象。
`StorageClass` 对象定义当动态供应被调用时,哪一个驱动将被使用和哪些参数将被传递给驱动。
+StorageClass 对象的名字必须是一个合法的 [DNS 子域名](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
以下清单创建了一个 `StorageClass` 存储类 "slow",它提供类似标准磁盘的永久磁盘。
```yaml
@@ -159,7 +163,7 @@ Dynamic provisioning can be enabled on a cluster such that all claims are
dynamically provisioned if no storage class is specified. A cluster administrator
can enable this behavior by:
-->
-可以在群集上启用动态卷供应,以便在未指定存储类的情况下动态设置所有声明。
+可以在集群上启用动态卷供应,以便在未指定存储类的情况下动态设置所有声明。
集群管理员可以通过以下方式启用此行为:
-请注意,群集上最多只能有一个 *默认* 存储类,否则无法创建没有明确指定
+请注意,集群上最多只能有一个 *默认* 存储类,否则无法创建没有明确指定
`storageClassName` 的 `PersistentVolumeClaim`。
-临时卷在 Pod 规范中以 _内联_ 方式定义,这简化了应用程序的部署和管理。
+临时卷在 Pod 规约中以 _内联_ 方式定义,这简化了应用程序的部署和管理。
### CSI 驱动程序限制 {#csi-driver-restrictions}
-{{< feature-state for_k8s_version="v1.21" state="deprecated" >}}
+CSI 临时卷允许用户直接向 CSI 驱动程序提供 `volumeAttributes`,它会作为 Pod 规约的一部分。
+允许 `volumeAttributes` 的 CSI 驱动程序通常仅限于管理员使用,不适合在内联临时卷中使用。
+例如,通常在 StorageClass 中定义的参数不应通过使用内联临时卷向用户公开。
作为一个集群管理员,你可以使用
[PodSecurityPolicy](/zh/docs/concepts/security/pod-security-policy/)
@@ -226,28 +232,15 @@ As a cluster administrator, you can use a [PodSecurityPolicy](/docs/concepts/sec
指定。
-
-{{< note >}}
-PodSecurityPolicy 已弃用,并将在 Kubernetes v1.25 版本中移除。
-{{< /note >}}
-
-
-
-
-{{< note >}}
-CSI 临时卷仅有 CSI 驱动程序的一个子集支持。
-Kubernetes CSI [驱动列表](https://kubernetes-csi.github.io/docs/drivers.html)显示了哪些驱动程序支持临时卷。
-{{< /note >}}
+如果集群管理员需要限制 CSI 驱动程序在 Pod 规约中被作为内联卷使用,可以这样做:
+- 从 CSIDriver 规约的 `volumeLifecycleModes` 中删除 `Ephemeral`,这可以防止驱动程序被用作内联临时卷。
+- 使用[准入 Webhook](/zh/docs/reference/access-authn-authz/extensible-admission-controllers/)
+ 来限制如何使用此驱动程序。
启用 GenericEphemeralVolume 特性会导致那些没有 PVCs 创建权限的用户,
在创建 Pods 时,被允许间接的创建 PVCs。
集群管理员必须意识到这一点。
-如果这不符合他们的安全模型,他们有如下选择:
-
-
-- 通过特性门控显式禁用该特性。
-- 使用一个[准入 Webhook](/zh/docs/reference/access-authn-authz/extensible-admission-controllers/)
- 拒绝包含通用临时卷的 Pods。
-- 当 `volumes` 列表不包含 `ephemeral` 卷类型时,使用
- [Pod 安全策略](/zh/docs/concepts/policy/pod-security-policy/)。
- (这一方式在 Kubernetes 1.21 版本已经弃用)
+如果这不符合他们的安全模型,他们应该使用一个[准入 Webhook](/zh/docs/reference/access-authn-authz/extensible-admission-controllers/)
+拒绝包含通用临时卷的 Pods。
+### PersistentVolume 删除保护 finalizer {#persistentvolume-deletion-protection-finalizer}
+{{< feature-state for_k8s_version="v1.23" state="alpha" >}}
+
+可以在 PersistentVolume 上添加终结器(Finalizers),以确保只有在删除对应的存储后才删除具有
+`Delete` 回收策略的 PersistentVolume。
+
+
+新引入的 `kubernetes.io/pv-controller` 和 `external-provisioner.volume.kubernetes.io/finalizer`
+终结器仅会被添加到动态制备的卷上。
+
+终结器 `kubernetes.io/pv-controller` 会被添加到树内插件卷上。
+下面是一个例子:
+
+```shell
+kubectl describe pv pvc-74a498d6-3929-47e8-8c02-078c1ece4d78
+Name: pvc-74a498d6-3929-47e8-8c02-078c1ece4d78
+Labels:
+Annotations: kubernetes.io/createdby: vsphere-volume-dynamic-provisioner
+ pv.kubernetes.io/bound-by-controller: yes
+ pv.kubernetes.io/provisioned-by: kubernetes.io/vsphere-volume
+Finalizers: [kubernetes.io/pv-protection kubernetes.io/pv-controller]
+StorageClass: vcp-sc
+Status: Bound
+Claim: default/vcp-pvc-1
+Reclaim Policy: Delete
+Access Modes: RWO
+VolumeMode: Filesystem
+Capacity: 1Gi
+Node Affinity:
+Message:
+Source:
+ Type: vSphereVolume (a Persistent Disk resource in vSphere)
+ VolumePath: [vsanDatastore] d49c4a62-166f-ce12-c464-020077ba5d46/kubernetes-dynamic-pvc-74a498d6-3929-47e8-8c02-078c1ece4d78.vmdk
+ FSType: ext4
+ StoragePolicyName: vSAN Default Storage Policy
+Events:
+```
+
+
+终结器 `external-provisioner.volume.kubernetes.io/finalizer` 会被添加到 CSI 卷上。下面是一个例子:
+
+```shell
+Name: pvc-2f0bab97-85a8-4552-8044-eb8be45cf48d
+Labels:
+Annotations: pv.kubernetes.io/provisioned-by: csi.vsphere.vmware.com
+Finalizers: [kubernetes.io/pv-protection external-provisioner.volume.kubernetes.io/finalizer]
+StorageClass: fast
+Status: Bound
+Claim: demo-app/nginx-logs
+Reclaim Policy: Delete
+Access Modes: RWO
+VolumeMode: Filesystem
+Capacity: 200Mi
+Node Affinity:
+Message:
+Source:
+ Type: CSI (a Container Storage Interface (CSI) volume source)
+ Driver: csi.vsphere.vmware.com
+ FSType: ext4
+ VolumeHandle: 44830fa8-79b4-406b-8b58-621ba25353fd
+ ReadOnly: false
+ VolumeAttributes: storage.kubernetes.io/csiProvisionerIdentity=1648442357185-8081-csi.vsphere.vmware.com
+ type=vSphere CNS Block Volume
+Events:
+```
+
+
+为特定的树内卷插件启用 `CSIMigration` 特性将删除 `kubernetes.io/pv-controller` 终结器,
+同时添加 `external-provisioner.volume.kubernetes.io/finalizer` 终结器。
+同样,禁用 `CSIMigration` 将删除 `external-provisioner.volume.kubernetes.io/finalizer` 终结器,
+同时添加 `kubernetes.io/pv-controller` 终结器。
+
#### 重设使用中 PVC 申领的大小 {#resizing-an-in-use-persistentvolumevlaim}
-{{< feature-state for_k8s_version="v1.15" state="beta" >}}
-
-
-{{< note >}}
-Kubernetes 从 1.15 版本开始将调整使用中 PVC 申领大小这一能力作为 Beta
-特性支持;该特性在 1.11 版本以来处于 Alpha 阶段。
-`ExpandInUsePersistentVolumes` 特性必须被启用;在很多集群上,与此类似的
-Beta 阶段的特性是自动启用的。
-可参考[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
-文档了解更多信息。
-{{< /note >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
{{< note >}}
Kubernetes 从 1.23 版本开始将允许用户恢复失败的 PVC 扩展这一能力作为
-alpha 特性支持。 `RecoverVolumeExpansionFailure` 必须被启用以允许使用此功能。
+alpha 特性支持。 `RecoverVolumeExpansionFailure` 必须被启用以允许使用此特性。
可参考[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
文档了解更多信息。
{{< /note >}}
-如果集群中的特性门控 `ExpandPersistentVolumes` 和 `RecoverVolumeExpansionFailure`
-都已启用,在 PVC 的扩展发生失败时,你可以使用比先前请求的值更小的尺寸来重试扩展。
+如果集群中的特性门控 `RecoverVolumeExpansionFailure`
+已启用,在 PVC 的扩展发生失败时,你可以使用比先前请求的值更小的尺寸来重试扩展。
要使用一个更小的尺寸尝试请求新的扩展,请编辑该 PVC 的 `.spec.resources` 并选择
一个比你之前所尝试的值更小的值。
如果由于容量限制而无法成功扩展至更高的值,这将很有用。
@@ -1411,10 +1490,7 @@ spec:
## Volume populators and data sources
-Kubernetes supports custom volume populators; this alpha feature was introduced
-in Kubernetes 1.18. Kubernetes 1.22 reimplemented the mechanism with a redesigned API.
-Check that you are reading the version of the Kubernetes documentation that matches your
-cluster. {{% version-check %}}
+Kubernetes supports custom volume populators.
To use custom volume populators, you must enable the `AnyVolumeDataSource`
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) for
the kube-apiserver and kube-controller-manager.
@@ -1428,13 +1504,11 @@ gate enabled, use of the `dataSourceRef` is preferred over `dataSource`.
## 卷填充器(Populator)与数据源 {#volume-populators-and-data-sources}
-{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
+{{< feature-state for_k8s_version="v1.24" state="beta" >}}
{{< note >}}
-Kubernetes 支持自定义的卷填充器;Kubernetes 1.18 版本引入了这个 alpha 特性。
-Kubernetes 1.22 使用重新设计的 API 重新实现了该机制。
-确认你正在阅读与你的集群版本一致的 Kubernetes 文档。{{% version-check %}}
-要使用自定义的卷填充器,你必须为 kube-apiserver 和 kube-controller-manager 启用 `AnyVolumeDataSource`
+Kubernetes 支持自定义的卷填充器;要使用自定义的卷填充器,你必须为
+kube-apiserver 和 kube-controller-manager 启用 `AnyVolumeDataSource`
[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。
{{< /note >}}
@@ -1630,7 +1704,7 @@ Volume snapshot feature was added to support CSI Volume Plugins only. For detail
To enable support for restoring a volume from a volume snapshot data source, enable the
`VolumeSnapshotDataSource` feature gate on the apiserver and controller-manager.
-->
-卷快照(Volume Snapshot)功能的添加仅是为了支持 CSI 卷插件。
+卷快照(Volume Snapshot)特性的添加仅是为了支持 CSI 卷插件。
有关细节可参阅[卷快照](/zh/docs/concepts/storage/volume-snapshots/)文档。
要启用从卷快照数据源恢复数据卷的支持,可在 API 服务器和控制器管理器上启用
diff --git a/content/zh/docs/concepts/storage/projected-volumes.md b/content/zh/docs/concepts/storage/projected-volumes.md
index a1cc2a3a72..8f069ffbf8 100644
--- a/content/zh/docs/concepts/storage/projected-volumes.md
+++ b/content/zh/docs/concepts/storage/projected-volumes.md
@@ -19,7 +19,7 @@ weight: 21 # just after persistent volumes
-本文档描述 Kubernet 中的*投射卷(Projected Volumes)*。
+本文档描述 Kubernetes 中的*投射卷(Projected Volumes)*。
建议先熟悉[卷](/zh/docs/concepts/storage/volumes/)概念。
@@ -49,10 +49,10 @@ Currently, the following types of volume sources can be projected:
所有的卷源都要求处于 Pod 所在的同一个名字空间内。进一步的详细信息,可参考
-[一体化卷设计文档](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node/all-in-one-volume.md)。
+[一体化卷](https://github.com/kubernetes/design-proposals-archive/blob/main/node/all-in-one-volume.md)设计文档。
-[关于在投射的服务账号卷中处理文件访问权限的提案](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/2451-service-account-token-volumes#token-volume-projection)
+关于在投射的服务账号卷中处理文件访问权限的[提案](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/2451-service-account-token-volumes#proposal)
介绍了如何使得所投射的文件具有合适的属主访问权限。
### Linux
diff --git a/content/zh/docs/concepts/storage/storage-capacity.md b/content/zh/docs/concepts/storage/storage-capacity.md
index 10089b428d..7cf604cf56 100644
--- a/content/zh/docs/concepts/storage/storage-capacity.md
+++ b/content/zh/docs/concepts/storage/storage-capacity.md
@@ -10,58 +10,66 @@ Storage capacity is limited and may vary depending on the node on
which a pod runs: network-attached storage might not be accessible by
all nodes, or storage is local to a node to begin with.
-{{< feature-state for_k8s_version="v1.21" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
This page describes how Kubernetes keeps track of storage capacity and
-how the scheduler uses that information to schedule Pods onto nodes
+how the scheduler uses that information to [schedule Pods](/docs/concepts/scheduling-eviction/) onto nodes
that have access to enough storage capacity for the remaining missing
volumes. Without storage capacity tracking, the scheduler may choose a
node that doesn't have enough capacity to provision a volume and
multiple scheduling retries will be needed.
-
-Tracking storage capacity is supported for {{< glossary_tooltip
-text="Container Storage Interface" term_id="csi" >}} (CSI) drivers and
-[needs to be enabled](#enabling-storage-capacity-tracking) when installing a CSI driver.
-->
存储容量是有限的,并且会因为运行 Pod 的节点不同而变化:
网络存储可能并非所有节点都能够访问,或者对于某个节点存储是本地的。
-{{< feature-state for_k8s_version="v1.21" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
本页面描述了 Kubernetes 如何跟踪存储容量以及调度程序如何为了余下的尚未挂载的卷使用该信息将
-Pod 调度到能够访问到足够存储容量的节点上。
+[Pod 调度](/zh/docs/concepts/scheduling-eviction/)到能够访问到足够存储容量的节点上。
如果没有跟踪存储容量,调度程序可能会选择一个没有足够容量来提供卷的节点,并且需要多次调度重试。
-{{< glossary_tooltip text="容器存储接口" term_id="csi" >}}(CSI)驱动程序支持跟踪存储容量,
-并且在安装 CSI 驱动程序时[需要启用](#enabling-storage-capacity-tracking)该功能。
+## {{% heading "prerequisites" %}}
+
+
+Kubernetes v{{< skew currentVersion >}} 包含了对存储容量跟踪的集群级 API 支持。
+要使用它,你还必须使用支持容量跟踪的 CSI 驱动程序。请查阅你使用的 CSI 驱动程序的文档,
+以了解此支持是否可用,如果可用,该如何使用它。如果你运行的不是
+Kubernetes v{{< skew currentVersion >}},请查看对应版本的 Kubernetes 文档。
## API
这个特性有两个 API 扩展接口:
-- CSIStorageCapacity 对象:这些对象由 CSI 驱动程序在安装驱动程序的命名空间中产生。
+- [CSIStorageCapacity](/docs/reference/kubernetes-api/config-and-storage-resources/csi-storage-capacity-v1/) 对象:这些对象由
+ CSI 驱动程序在安装驱动程序的命名空间中产生。
每个对象都包含一个存储类的容量信息,并定义哪些节点可以访问该存储。
-- [`CSIDriverSpec.StorageCapacity` 字段](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#csidriverspec-v1-storage-k8s-io):
+- [`CSIDriverSpec.StorageCapacity` 字段](/docs/reference/kubernetes-api/config-and-storage-resources/csi-driver-v1/#CSIDriverSpec):
设置为 true 时,Kubernetes 调度程序将考虑使用 CSI 驱动程序的卷的存储容量。
## 限制
@@ -151,32 +156,12 @@ to handle this automatically.
当 Pod 使用多个卷时,调度可能会永久失败:一个卷可能已经在拓扑段中创建,而该卷又没有足够的容量来创建另一个卷,
要想从中恢复,必须要进行手动干预,比如通过增加存储容量或者删除已经创建的卷。
-需要[进一步工作](https://github.com/kubernetes/enhancements/pull/1703)来自动处理此问题。
-
-
-## 开启存储容量跟踪
-
-存储容量跟踪是一个 Beta 特性,从 Kubernetes 1.21 版本起在 Kubernetes 集群
-中默认被启用。除了在集群中启用此功能特性之外,还要求 CSI 驱动支持此特性。
-请参阅驱动的文档了解详细信息。
## {{% heading "whatsnext" %}}
- 想要获得更多该设计的信息,查看
[Storage Capacity Constraints for Pod Scheduling KEP](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/1472-storage-capacity-tracking/README.md)。
-- 有关此功能的下一步开发信息,查看
- [enhancement tracking issue #1472](https://github.com/kubernetes/enhancements/issues/1472)。
-- 学习 [Kubernetes 调度器](/zh/docs/concepts/scheduling-eviction/kube-scheduler/)。
diff --git a/content/zh/docs/concepts/storage/storage-classes.md b/content/zh/docs/concepts/storage/storage-classes.md
index 2bfcc0e94d..bcd4cdaecb 100644
--- a/content/zh/docs/concepts/storage/storage-classes.md
+++ b/content/zh/docs/concepts/storage/storage-classes.md
@@ -83,7 +83,7 @@ metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
- type: gp3
+ type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
@@ -143,7 +143,7 @@ the specification. Some external provisioners are listed under the repository
-->
你不限于指定此处列出的 "内置" 制备器(其名称前缀为 "kubernetes.io" 并打包在 Kubernetes 中)。
你还可以运行和指定外部制备器,这些独立的程序遵循由 Kubernetes 定义的
-[规范](https://git.k8s.io/community/contributors/design-proposals/storage/volume-provisioning.md)。
+[规范](https://github.com/kubernetes/design-proposals-archive/blob/main/storage/volume-provisioning.md)。
外部供应商的作者完全可以自由决定他们的代码保存于何处、打包方式、运行方式、使用的插件(包括 Flex)等。
代码仓库 [kubernetes-sigs/sig-storage-lib-external-provisioner](https://github.com/kubernetes-sigs/sig-storage-lib-external-provisioner)
包含一个用于为外部制备器编写功能实现的类库。你可以访问代码仓库
@@ -431,8 +431,9 @@ parameters:
-* `type`:`io1`,`gp2`,`gp3`,`sc1`,`st1`。详细信息参见
- [AWS 文档](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)。默认值:`gp3`。
+* `type`:`io1`,`gp2`,`sc1`,`st1`。详细信息参见
+ [AWS 文档](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)。默认值:`gp2`。
* `zone`(弃用):AWS 区域。如果没有指定 `zone` 和 `zones`,
通常卷会在 Kubernetes 集群节点所在的活动区域中轮询调度分配。
`zone` 和 `zones` 参数不能同时使用。
@@ -1106,7 +1107,7 @@ parameters:
* `location`:Azure 存储帐户位置。默认为空。
* `storageAccount`:Azure 存储帐户名称。
如果提供存储帐户,它必须位于与集群相同的资源组中,并且 `location`
- 是被忽略的。如果未提供存储帐户,则会在与群集相同的资源组中创建新的存储帐户。
+ 是被忽略的。如果未提供存储帐户,则会在与集群相同的资源组中创建新的存储帐户。
-
+
此页面描述了各个云供应商可关联至一个节点的最大卷数。
-
-
+waiting for volumes to attach.
+-->
谷歌、亚马逊和微软等云供应商通常对可以关联到节点的卷数量进行限制。
Kubernetes 需要尊重这些限制。 否则,在节点上调度的 Pod 可能会卡住去等待卷的关联。
-
-
-
-
-
## Kubernetes 的默认限制
The Kubernetes 调度器对关联于一个节点的卷数有默认限制:
@@ -73,20 +71,18 @@ the limit you set.
The limit applies to the entire cluster, so it affects all Nodes.
-->
-
## 自定义限制
-您可以通过设置 `KUBE_MAX_PD_VOLS` 环境变量的值来设置这些限制,然后再启动调度器。
+你可以通过设置 `KUBE_MAX_PD_VOLS` 环境变量的值来设置这些限制,然后再启动调度器。
CSI 驱动程序可能具有不同的过程,关于如何自定义其限制请参阅相关文档。
-如果设置的限制高于默认限制,请谨慎使用。请参阅云提供商的文档以确保节点可支持您设置的限制。
+如果设置的限制高于默认限制,请谨慎使用。请参阅云提供商的文档以确保节点可支持你设置的限制。
此限制应用于整个集群,所以它会影响所有节点。
-
## 动态卷限制
{{< feature-state state="stable" for_k8s_version="v1.17" >}}
@@ -99,7 +95,6 @@ Dynamic volume limits are supported for following volume types.
- Azure Disk
- CSI
-->
-
以下卷类型支持动态卷限制。
- Amazon EBS
@@ -111,7 +106,6 @@ Dynamic volume limits are supported for following volume types.
For volumes managed by in-tree volume plugins, Kubernetes automatically determines the Node
type and enforces the appropriate maximum number of volumes for the node. For example:
-->
-
对于由内建插件管理的卷,Kubernetes 会自动确定节点类型并确保节点上可关联的卷数目合规。 例如:
-
* 在
Google Compute Engine 环境中,
[根据节点类型](https://cloud.google.com/compute/docs/disks/#pdnumberlimits)最多可以将127个卷关联到节点。
diff --git a/content/zh/docs/concepts/storage/volume-health-monitoring.md b/content/zh/docs/concepts/storage/volume-health-monitoring.md
index 1caadf0fb2..0b7f5924a4 100644
--- a/content/zh/docs/concepts/storage/volume-health-monitoring.md
+++ b/content/zh/docs/concepts/storage/volume-health-monitoring.md
@@ -45,7 +45,7 @@ Kubernetes _卷健康监测_ 是 Kubernetes 容器存储接口(CSI)实现的
外部健康监测{{< glossary_tooltip text="控制器" term_id="controller" >}}也会监测节点失效事件。
如果要启动节点失效监测功能,你可以设置标志 `enable-node-watcher` 为 `true`。
@@ -54,6 +54,10 @@ If a CSI Driver supports Volume Health Monitoring feature from the node side, an
如果 CSI 驱动程序支持节点测的卷健康检测,那当在 CSI 卷上检测到异常卷时,
会在使用该 PVC 的每个Pod 上触发一个事件。
+此外,卷运行状况信息作为 Kubelet VolumeStats 指标公开。
+添加了一个新的指标 kubelet_volume_stats_health_status_abnormal。
+该指标包括两个标签:`namespace` 和 `persistentvolumeclaim`。
+计数为 1 或 0。1 表示卷不正常,0 表示卷正常。更多信息请访问[KEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1432-volume-health-monitor#kubelet-metrics-changes)。
`snapshotHandle` 是存储后端创建卷的唯一标识符。对于预设置快照,这个字段是必须的。它指定此 `VolumeSnapshotContent` 表示的存储系统上的 CSI 快照 id。
+
+`sourceVolumeMode` 是创建快照的卷的模式。`sourceVolumeMode` 字段的值可以是
+`Filesystem` 或 `Block`。如果没有指定源卷模式,Kubernetes 会将快照视为未知的源卷模式。
+
+
+## 转换快照的卷模式 {#convert-volume-mode}
+
+如果在你的集群上安装的 `VolumeSnapshots` API 支持 `sourceVolumeMode`
+字段,则该 API 可以防止未经授权的用户转换卷的模式。
+
+要检查你的集群是否具有此特性的能力,可以运行如下命令:
+
+```yaml
+$ kubectl get crd volumesnapshotcontent -o yaml
+```
+
+
+如果你希望允许用户从现有的 `VolumeSnapshot` 创建 `PersistentVolumeClaim`,
+但是使用与源卷不同的卷模式,则需要添加注解
+`snapshot.storage.kubernetes.io/allowVolumeModeChange: "true"`
+到对应 `VolumeSnapshot` 的 `VolumeSnapshotContent` 中。
+
+对于预配置的快照,`Spec.SourceVolumeMode` 需要由集群管理员填充。
+
+启用此特性的 `VolumeSnapshotContent` 资源示例如下所示:
+
+```yaml
+apiVersion: snapshot.storage.k8s.io/v1
+kind: VolumeSnapshotContent
+metadata:
+ name: new-snapshot-content-test
+ annotations:
+ - snapshot.storage.kubernetes.io/allowVolumeModeChange: "true"
+spec:
+ deletionPolicy: Delete
+ driver: hostpath.csi.k8s.io
+ source:
+ snapshotHandle: 7bdd0de3-aaeb-11e8-9aae-0242ac110002
+ sourceVolumeMode: Filesystem
+ volumeSnapshotRef:
+ name: new-snapshot-test
+ namespace: default
+```
+
diff --git a/content/zh/docs/concepts/storage/volumes.md b/content/zh/docs/concepts/storage/volumes.md
index e264fb4b38..f70172c0a2 100644
--- a/content/zh/docs/concepts/storage/volumes.md
+++ b/content/zh/docs/concepts/storage/volumes.md
@@ -256,22 +256,36 @@ For more details, see the [`azureDisk` volume plugin](https://github.com/kuberne
-->
#### azureDisk 的 CSI 迁移 {#azuredisk-csi-migration}
-{{< feature-state for_k8s_version="v1.19" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
-启用 `azureDisk` 的 `CSIMigration` 功能后,所有插件操作从现有的树内插件重定向到
+启用 `azureDisk` 的 `CSIMigration` 特性后,所有插件操作从现有的树内插件重定向到
`disk.csi.azure.com` 容器存储接口(CSI)驱动程序。
-为了使用此功能,必须在集群中安装
+为了使用此特性,必须在集群中安装
[Azure 磁盘 CSI 驱动程序](https://github.com/kubernetes-sigs/azuredisk-csi-driver),
-并且 `CSIMigration` 和 `CSIMigrationAzureDisk` 功能必须被启用。
+并且 `CSIMigration` 特性必须被启用。
+
+
+#### azureDisk CSI 迁移完成
+
+{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
+
+要禁止控制器管理器和 kubelet 加载 `azureDisk` 存储插件,
+请将 `InTreePluginAzureDiskUnregister` 标志设置为 `true`。
### azureFile {#azurefile}
@@ -299,18 +313,34 @@ Driver](https://github.com/kubernetes-sigs/azurefile-csi-driver)
must be installed on the cluster and the `CSIMigration` and `CSIMigrationAzureFile`
[feature gates](/docs/reference/command-line-tools-reference/feature-gates/) must be enabled.
-->
-启用 `azureFile` 的 `CSIMigration` 功能后,所有插件操作将从现有的树内插件重定向到
-`file.csi.azure.com` 容器存储接口(CSI)驱动程序。要使用此功能,必须在集群中安装
+启用 `azureFile` 的 `CSIMigration` 特性后,所有插件操作将从现有的树内插件重定向到
+`file.csi.azure.com` 容器存储接口(CSI)驱动程序。要使用此特性,必须在集群中安装
[Azure 文件 CSI 驱动程序](https://github.com/kubernetes-sigs/azurefile-csi-driver),
并且 `CSIMigration` 和 `CSIMigrationAzureFile`
[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
必须被启用。
Azure 文件 CSI 驱动尚不支持为同一卷设置不同的 fsgroup。
-如果 AzureFile CSI 迁移被启用,用不同的 fsgroup 来使用同一卷也是不被支持的。
+如果 `CSIMigrationAzureFile` 特性被启用,用不同的 fsgroup 来使用同一卷也是不被支持的。
+
+
+#### azureDisk CSI 迁移完成
+
+{{< feature-state for_k8s_version="v1.21" state="alpha" >}}
+
+要禁止控制器管理器和 kubelet 加载 `azureDisk` 存储插件,
+请将 `InTreePluginAzureDiskUnregister` 标志设置为 `true`。
### cephfs {#cephfs}
@@ -383,29 +413,31 @@ spec:
-->
#### OpenStack CSI 迁移
-{{< feature-state for_k8s_version="v1.21" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
-Cinder 的 `CSIMigration` 功能在 Kubernetes 1.21 版本中是默认被启用的。
+自 Kubernetes 1.21 版本起,Cinder 的 `CSIMigration` 特性是默认被启用的。
此特性会将插件的所有操作从现有的树内插件重定向到
`cinder.csi.openstack.org` 容器存储接口(CSI)驱动程序。
-为了使用此功能,必须在集群中安装
+为了使用此特性,必须在集群中安装
[OpenStack Cinder CSI 驱动程序](https://github.com/kubernetes/cloud-provider-openstack/blob/master/docs/cinder-csi-plugin/using-cinder-csi-plugin.md),
你可以通过设置 `CSIMigrationOpenStack`
[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
为 `false` 来禁止 Cinder CSI 迁移。
-如果你禁用了 `CSIMigrationOpenStack` 功能特性,则树内的 Cinder 卷插件
-会负责 Cinder 卷存储管理的方方面面。
+
+
+要禁止控制器管理器和 kubelet 加载树内 Cinder 插件,你可以启用
+`InTreePluginOpenStackUnregister` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。
### configMap
@@ -753,8 +785,8 @@ within the same region. In order to use this feature, the volume must be provisi
as a PersistentVolume; referencing the volume directly from a Pod is not supported.
-->
[区域持久盘](https://cloud.google.com/compute/docs/disks/#repds)
-功能允许你创建能在同一区域的两个可用区中使用的持久盘。
-要使用这个功能,必须以持久卷(PersistentVolume)的方式提供卷;直接从
+特性允许你创建能在同一区域的两个可用区中使用的持久盘。
+要使用这个特性,必须以持久卷(PersistentVolume)的方式提供卷;直接从
Pod 引用这种卷是不可以的。
-启用 GCE PD 的 `CSIMigration` 功能后,所有插件操作将从现有的树内插件重定向到
+启用 GCE PD 的 `CSIMigration` 特性后,所有插件操作将从现有的树内插件重定向到
`pd.csi.storage.gke.io` 容器存储接口( CSI )驱动程序。
-为了使用此功能,必须在集群中上安装
+为了使用此特性,必须在集群中上安装
[GCE PD CSI驱动程序](https://github.com/kubernetes-sigs/gcp-compute-persistent-disk-csi-driver),
-并且 `CSIMigration` 和 `CSIMigrationGCE` Beta 功能必须被启用。
+并且 `CSIMigration` 和 `CSIMigrationGCE` Beta 特性必须被启用。
-启用 RBD 的 `CSIMigration` 功能后,所有插件操作从现有的树内插件重定向到
+启用 RBD 的 `CSIMigration` 特性后,所有插件操作从现有的树内插件重定向到
`rbd.csi.ceph.com` {{}} 驱动程序。
-要使用该功能,必须在集群内安装
+要使用该特性,必须在集群内安装
[Ceph CSI 驱动](https://github.com/ceph/ceph-csi),并启用 `CSIMigration` 和 `csiMigrationRBD`
[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。
@@ -1571,15 +1603,13 @@ For more information about StorageOS, dynamic provisioning, and PersistentVolume
关于 StorageOS 的进一步信息、动态供应和持久卷申领等等,请参考
[StorageOS 示例](https://github.com/kubernetes/examples/blob/master/volumes/storageos)。
-### vsphereVolume {#vspherevolume}
+### vsphereVolume(弃用) {#vspherevolume}
{{< note >}}
-你必须配置 Kubernetes 的 vSphere 云驱动。云驱动的配置方法请参考
-[vSphere 使用指南](https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/)。
+建议你改用 vSphere CSI 树外驱动程序。
{{< /note >}}
-{{< caution >}}
-在挂载到 Pod 之前,你必须用下列方式之一创建 VMDK。
-{{< /caution >}}
-
-
-#### 创建 VMDK 卷 {#creating-vmdk-volume}
-
-选择下列方式之一创建 VMDK。
-
-{{< tabs name="tabs_volumes" >}}
-{{% tab name="使用 vmkfstools 创建" %}}
-
-首先 ssh 到 ESX,然后使用下面的命令来创建 VMDK:
-
-```shell
-vmkfstools -c 2G /vmfs/volumes/DatastoreName/volumes/myDisk.vmdk
-```
-{{% /tab %}}
-{{% tab name="使用 vmware-vdiskmanager 创建" %}}
-
-使用下面的命令创建 VMDK:
-
-```shell
-vmware-vdiskmanager -c -t 0 -s 40GB -a lsilogic myDisk.vmdk
-```
-{{% /tab %}}
-
-{{< /tabs >}}
-
-
-
-#### vSphere VMDK 配置示例 {#vsphere-vmdk-configuration}
-
-```yaml
-apiVersion: v1
-kind: Pod
-metadata:
- name: test-vmdk
-spec:
- containers:
- - image: k8s.gcr.io/test-webserver
- name: test-container
- volumeMounts:
- - mountPath: /test-vmdk
- name: test-volume
- volumes:
- - name: test-volume
- # 此 VMDK 卷必须已经存在
- vsphereVolume:
- volumePath: "[DatastoreName] volumes/myDisk"
- fsType: ext4
-```
-
@@ -1680,10 +1648,26 @@ must be installed on the cluster and the `CSIMigration` and `CSIMigrationvSphere
[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。
-此特性还要求 vSphere vCenter/ESXi 的版本至少为 7.0u1,且 HW 版本至少为
-VM version 15。
+你可以在 VMware 的文档页面
+[迁移树内 vSphere 卷插件到 vSphere 容器存储插件](https://docs.vmware.com/en/VMware-vSphere-Container-Storage-Plug-in/2.0/vmware-vsphere-csp-getting-started/GUID-968D421F-D464-4E22-8127-6CB9FF54423F.html)
+中找到有关如何迁移的其他建议。
+
+为了迁移到树外 CSI 驱动程序,Kubernetes v{{< skew currentVersion >}}
+要求你使用 vSphere 7.0u2 或更高版本。
+如果你正在运行 v{{< skew currentVersion >}} 以外的 Kubernetes 版本,
+请查阅该 Kubernetes 版本的文档。
+如果你正在运行 Kubernetes v{{< skew currentVersion >}} 和旧版本的 vSphere,
+请考虑至少升级到 vSphere 7.0u2。
{{< note >}}
-Kubernetes 1.23 中加入了 Portworx 的 `CSIMigration` 功能,但默认不会启用,因为该功能仍处于 alpha 阶段。
-该功能会将所有的插件操作从现有的树内插件重定向到
+Kubernetes 1.23 中加入了 Portworx 的 `CSIMigration` 特性,但默认不会启用,因为该特性仍处于 alpha 阶段。
+该特性会将所有的插件操作从现有的树内插件重定向到
`pxd.portworx.com` 容器存储接口(Container Storage Interface, CSI)驱动程序。
集群中必须安装
[Portworx CSI 驱动](https://docs.portworx.com/portworx-install-with-kubernetes/storage-operations/csi/)。
-要启用此功能,请在 kube-controller-manager 和 kubelet 中设置 `CSIMigrationPortworx=true`。
+要启用此特性,请在 kube-controller-manager 和 kubelet 中设置 `CSIMigrationPortworx=true`。
-启用 `CSIMigration` 功能后,针对现有树内插件的操作会被重定向到相应的 CSI 插件(应已安装和配置)。
+启用 `CSIMigration` 特性后,针对现有树内插件的操作会被重定向到相应的 CSI 插件(应已安装和配置)。
因此,操作员在过渡到取代树内插件的 CSI 驱动时,无需对现有存储类、PV 或 PVC(指树内插件)进行任何配置更改。
-所支持的操作和功能包括:配备(Provisioning)/删除、挂接(Attach)/解挂(Detach)、
+所支持的操作和特性包括:配备(Provisioning)/删除、挂接(Attach)/解挂(Detach)、
挂载(Mount)/卸载(Unmount)和调整卷大小。
上面的[卷类型](#volume-types)节列出了支持 `CSIMigration` 并已实现相应 CSI
diff --git a/content/zh/docs/concepts/windows/_index.md b/content/zh/docs/concepts/windows/_index.md
new file mode 100644
index 0000000000..a78ddcfe75
--- /dev/null
+++ b/content/zh/docs/concepts/windows/_index.md
@@ -0,0 +1,8 @@
+---
+title: "Kubernetes 中的 Windows"
+weight: 50
+---
+
diff --git a/content/zh/docs/concepts/windows/user-guide.md b/content/zh/docs/concepts/windows/user-guide.md
new file mode 100644
index 0000000000..7b3ab57b62
--- /dev/null
+++ b/content/zh/docs/concepts/windows/user-guide.md
@@ -0,0 +1,482 @@
+---
+title: Kubernetes 中的 Windows 容器调度指南
+content_type: concept
+weight: 75
+---
+
+
+
+
+
+在许多组织中运行的服务和应用程序中,Windows 应用程序构成了很大一部分。
+本指南将引导你完成在 Kubernetes 中配置和部署 Windows 容器的步骤。
+
+
+
+
+## 目标 {#objectives}
+
+* 配置 Deployment 样例以在 Windows 节点上运行 Windows 容器
+* 在 Kubernetes 中突出 Windows 特定的功能
+
+
+## 在你开始之前 {#before-you-begin}
+
+* 创建一个 Kubernetes 集群,其中包含一个控制平面和一个[运行 Windows Server 的工作节点](/zh/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes/)
+* 务必请注意,在 Kubernetes 上创建和部署服务和工作负载的行为方式与 Linux 和 Windows 容器的行为方式大致相同。
+ 与集群交互的 [kubectl 命令](/zh/docs/reference/kubectl/)是一致的。
+ 下一小节的示例旨在帮助你快速开始使用 Windows 容器。
+
+
+## 快速开始:部署 Windows 容器 {#getting-started-deploying-a-windows-container}
+
+以下示例 YAML 文件部署了一个在 Windows 容器内运行的简单 Web 服务器的应用程序。
+
+创建一个名为 `win-webserver.yaml` 的 Service 规约,其内容如下:
+
+```yaml
+apiVersion: v1
+kind: Service
+metadata:
+ name: win-webserver
+ labels:
+ app: win-webserver
+spec:
+ ports:
+ # 此 Service 服务的端口
+ - port: 80
+ targetPort: 80
+ selector:
+ app: win-webserver
+ type: NodePort
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app: win-webserver
+ name: win-webserver
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ app: win-webserver
+ template:
+ metadata:
+ labels:
+ app: win-webserver
+ name: win-webserver
+ spec:
+ containers:
+ - name: windowswebserver
+ image: mcr.microsoft.com/windows/servercore:ltsc2019
+ command:
+ - powershell.exe
+ - -command
+ - "<#code used from https://gist.github.com/19WAS85/5424431#> ; $$listener = New-Object System.Net.HttpListener ; $$listener.Prefixes.Add('http://*:80/') ; $$listener.Start() ; $$callerCounts = @{} ; Write-Host('Listening at http://*:80/') ; while ($$listener.IsListening) { ;$$context = $$listener.GetContext() ;$$requestUrl = $$context.Request.Url ;$$clientIP = $$context.Request.RemoteEndPoint.Address ;$$response = $$context.Response ;Write-Host '' ;Write-Host('> {0}' -f $$requestUrl) ; ;$$count = 1 ;$$k=$$callerCounts.Get_Item($$clientIP) ;if ($$k -ne $$null) { $$count += $$k } ;$$callerCounts.Set_Item($$clientIP, $$count) ;$$ip=(Get-NetAdapter | Get-NetIpAddress); $$header='Windows Container Web Server ' ;$$callerCountsString='' ;$$callerCounts.Keys | % { $$callerCountsString+='IP {0} callerCount {1} ' -f $$ip[1].IPAddress,$$callerCounts.Item($$_) } ;$$footer='' ;$$content='{0}{1}{2}' -f $$header,$$callerCountsString,$$footer ;Write-Output $$content ;$$buffer = [System.Text.Encoding]::UTF8.GetBytes($$content) ;$$response.ContentLength64 = $$buffer.Length ;$$response.OutputStream.Write($$buffer, 0, $$buffer.Length) ;$$response.Close() ;$$responseStatus = $$response.StatusCode ;Write-Host('< {0}' -f $$responseStatus) } ; "
+ nodeSelector:
+ kubernetes.io/os: windows
+```
+
+{{< note >}}
+
+端口映射也是支持的,但为简单起见,此示例将容器的端口 80 直接暴露给服务。
+{{< /note >}}
+
+
+1. 检查所有节点是否健康
+
+ ```bash
+ kubectl get nodes
+ ```
+
+
+1. 部署 Service 并监视 Pod 更新:
+
+ ```bash
+ kubectl apply -f win-webserver.yaml
+ kubectl get pods -o wide -w
+ ```
+
+
+ 当 Service 被正确部署时,两个 Pod 都被标记为就绪(Ready)。要退出 watch 命令,请按 Ctrl+C。
+
+
+1. 检查部署是否成功。请验证:
+
+ * 使用 `kubectl get pods` 从 Linux 控制平面节点能够列出两个 Pod
+ * 跨网络的节点到 Pod 通信,从 Linux 控制平面节点上执行 `curl` 访问
+ Pod IP 的 80 端口以检查 Web 服务器响应
+ * Pod 间通信,使用 docker exec 或 kubectl exec
+ 在 Pod 之间(以及跨主机,如果你有多个 Windows 节点)互 ping
+ * Service 到 Pod 的通信,在 Linux 控制平面节点以及独立的 Pod 中执行 `curl`
+ 访问虚拟的服务 IP(在 `kubectl get services` 下查看)
+ * 服务发现,使用 Kubernetes [默认 DNS 后缀](/zh/docs/concepts/services-networking/dns-pod-service/#services)的服务名称,
+ 用 `curl` 访问服务名称
+ * 入站连接,在 Linux 控制平面节点或集群外的机器上执行 `curl` 来访问 NodePort 服务
+ * 出站连接,使用 kubectl exec,从 Pod 内部执行 `curl` 访问外部 IP
+
+{{< note >}}
+
+由于当前 Windows 平台的网络堆栈限制,Windows 容器主机无法访问调度到其上的 Service 的 IP。
+只有 Windows Pod 能够访问 Service IP。
+{{< /note >}}
+
+
+## 可观察性 {#observability}
+
+### 捕捉来自工作负载的日志 {#capturing-logs-from-workloads}
+
+日志是可观察性的重要元素;它们使用户能够深入了解工作负载的运行情况,并且是解决问题的关键因素。
+由于 Windows 容器和 Windows 容器中的工作负载与 Linux 容器的行为不同,因此用户很难收集日志,从而限制了操作可见性。
+例如,Windows 工作负载通常配置为记录到 ETW(Windows 事件跟踪)或向应用程序事件日志推送条目。
+[LogMonitor](https://github.com/microsoft/windows-container-tools/tree/master/LogMonitor)
+是一个微软开源的工具,是监视 Windows 容器内所配置的日志源的推荐方法。
+LogMonitor 支持监视事件日志、ETW 提供程序和自定义应用程序日志,将它们传送到 STDOUT 以供 `kubectl logs ` 使用。
+
+按照 LogMonitor GitHub 页面中的说明,将其二进制文件和配置文件复制到所有容器,
+并为 LogMonitor 添加必要的入口点以将日志推送到标准输出(STDOUT)。
+
+
+## 配置容器用户 {#configuring-container-user}
+
+### 使用可配置的容器用户名 {#using-configurable-container-usernames}
+
+Windows 容器可以配置为使用不同于镜像默认值的用户名来运行其入口点和进程。
+[在这里](/zh/docs/tasks/configure-pod-container/configure-runasusername/)了解更多信息。
+
+
+### 使用组托管服务帐户(GMSA)管理工作负载身份 {#managing-workload-identity-with-group-managed-service-accounts}
+
+Windows 容器工作负载可以配置为使用组托管服务帐户(Group Managed Service Accounts,GMSA)。
+组托管服务帐户是一种特定类型的活动目录(Active Directory)帐户,可提供自动密码管理、
+简化的服务主体名称(Service Principal Name,SPN)管理,以及将管理委派给多个服务器上的其他管理员的能力。
+配置了 GMSA 的容器可以携带使用 GMSA 配置的身份访问外部活动目录域资源。
+在[此处](/zh/docs/tasks/configure-pod-container/configure-gmsa/)了解有关为 Windows 容器配置和使用 GMSA 的更多信息。
+
+
+## 污点和容忍度 {#taints-and-tolerations}
+
+用户需要使用某种污点(Taint)和节点选择器的组合,以便将 Linux 和 Windows 工作负载各自调度到特定操作系统的节点。
+下面概述了推荐的方法,其主要目标之一是该方法不应破坏现有 Linux 工作负载的兼容性。
+
+如果启用了 `IdentifyPodOS` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
+你可以(并且应该)将 Pod 的 `.spec.os.name` 设置为该 Pod 中的容器设计所用于的操作系统。
+对于运行 Linux 容器的 Pod,将 `.spec.os.name` 设置为 `linux`。
+对于运行 Windows 容器的 Pod,将 `.spec.os.name` 设置为 `Windows`。
+
+{{< note >}}
+
+从 1.24 开始,`IdentifyPodOS` 特性处于 Beta 阶段,默认启用。
+{{< /note >}}
+
+
+调度器在将 Pod 分配到节点时并不使用 `.spec.os.name` 的值。
+你应该使用正常的 Kubernetes 机制[将 Pod 分配给节点](/zh/docs/concepts/scheduling-eviction/assign-pod-node/),
+以确保集群的控制平面将 Pod 放置到运行适当操作系统的节点上。
+
+`.spec.os.name` 值对 Windows Pod 的调度没有影响,
+因此仍然需要污点和容忍以及节点选择器来确保 Windows Pod 落在适当的 Windows 节点。
+
+
+### 确保特定于操作系统的工作负载落到合适的容器主机上 {#ensuring-os-specific-workloads-land-on-the-appropriate-container-host}
+
+用户可以使用污点(Taint)和容忍度(Toleration)确保将 Windows 容器调度至合适的主机上。
+现在,所有的 Kubernetes 节点都有以下默认标签:
+
+* kubernetes.io/os = [windows|linux]
+* kubernetes.io/arch = [amd64|arm64|...]
+
+
+如果 Pod 规约没有指定像 `"kubernetes.io/os": windows` 这样的 nodeSelector,
+则 Pod 可以被调度到任何主机上,Windows 或 Linux。
+这可能会有问题,因为 Windows 容器只能在 Windows 上运行,而 Linux 容器只能在 Linux 上运行。
+最佳实践是使用 nodeSelector。
+
+
+但是,我们了解到,在许多情况下,用户已经预先存在大量 Linux 容器部署,
+以及现成配置的生态系统,例如社区中的 Helm Chart 包和程序化的 Pod 生成案例,例如 Operator。
+在这些情况下,你可能不愿更改配置来添加节点选择器。
+另一种方法是使用污点。因为 kubelet 可以在注册过程中设置污点,
+所以可以很容易地修改为,当只能在 Windows 上运行时,自动添加污点。
+
+
+例如:`--register-with-taints='os=windows:NoSchedule'`
+
+通过向所有 Windows 节点添加污点,任何负载都不会被调度到这些节点上(包括现有的 Linux Pod)。
+为了在 Windows 节点上调度 Windows Pod,它需要 nodeSelector 和匹配合适的容忍度来选择 Windows。
+
+```yaml
+nodeSelector:
+ kubernetes.io/os: windows
+ node.kubernetes.io/windows-build: '10.0.17763'
+tolerations:
+ - key: "os"
+ operator: "Equal"
+ value: "windows"
+ effect: "NoSchedule"
+```
+
+
+### 处理同一集群中的多个 Windows 版本 {#handling-multiple-windows-versions-in-the-same-cluster}
+
+每个 Pod 使用的 Windows Server 版本必须与节点的版本匹配。
+如果要在同一个集群中使用多个 Windows Server 版本,则应设置额外的节点标签和节点选择器。
+
+Kubernetes 1.17 自动添加了一个新标签 `node.kubernetes.io/windows-build` 来简化这一点。
+如果你运行的是旧版本,则建议手动将此标签添加到 Windows 节点。
+
+此标签反映了需要匹配以实现兼容性的 Windows 主要、次要和内部版本号。
+以下是目前用于每个 Windows Server 版本的值。
+
+
+| 产品名称 | 构建号 |
+|--------------------------------------|------------------------|
+| Windows Server 2019 | 10.0.17763 |
+| Windows Server, Version 20H2 | 10.0.19042 |
+| Windows Server 2022 | 10.0.20348 |
+
+
+### 使用 RuntimeClass 进行简化 {#simplifying-with-runtimeclass}
+
+[RuntimeClass] 可用于简化使用污点和容忍度的流程。
+集群管理员可以创建一个用于封装这些污点和容忍度的 `RuntimeClass` 对象。
+
+1. 将此文件保存到 `runtimeClasses.yml`。它包括针对 Windows 操作系统、架构和版本的 `nodeSelector`。
+
+```yaml
+apiVersion: node.k8s.io/v1
+kind: RuntimeClass
+metadata:
+ name: windows-2019
+handler: 'docker'
+scheduling:
+ nodeSelector:
+ kubernetes.io/os: 'windows'
+ kubernetes.io/arch: 'amd64'
+ node.kubernetes.io/windows-build: '10.0.17763'
+ tolerations:
+ - effect: NoSchedule
+ key: os
+ operator: Equal
+ value: "windows"
+```
+
+
+1. 以集群管理员身份运行 `kubectl create -f runtimeClasses.yml`
+1. 根据情况,向 Pod 规约中添加 `runtimeClassName: windows-2019`
+
+例如:
+
+```yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: iis-2019
+ labels:
+ app: iis-2019
+spec:
+ replicas: 1
+ template:
+ metadata:
+ name: iis-2019
+ labels:
+ app: iis-2019
+ spec:
+ runtimeClassName: windows-2019
+ containers:
+ - name: iis
+ image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
+ resources:
+ limits:
+ cpu: 1
+ memory: 800Mi
+ requests:
+ cpu: .1
+ memory: 300Mi
+ ports:
+ - containerPort: 80
+ selector:
+ matchLabels:
+ app: iis-2019
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: iis
+spec:
+ type: LoadBalancer
+ ports:
+ - protocol: TCP
+ port: 80
+ selector:
+ app: iis-2019
+```
+
+[RuntimeClass]: https://kubernetes.io/docs/concepts/containers/runtime-class/
diff --git a/content/zh/docs/concepts/workloads/controllers/cron-jobs.md b/content/zh/docs/concepts/workloads/controllers/cron-jobs.md
index e31fa8edc3..e52908f51e 100644
--- a/content/zh/docs/concepts/workloads/controllers/cron-jobs.md
+++ b/content/zh/docs/concepts/workloads/controllers/cron-jobs.md
@@ -86,6 +86,7 @@ in time within that interval when the job should start.
-->
## CronJob
+
CronJob 用于执行周期性的动作,例如备份、报告生成等。
这些任务中的每一个都应该配置为周期性重复的(例如:每天/每周/每月一次);
你可以定义任务开始执行的时间间隔。
@@ -150,6 +151,69 @@ To generate CronJob schedule expressions, you can also use web tools like [cront
-->
要生成 CronJob 时间表表达式,你还可以使用 [crontab.guru](https://crontab.guru/) 之类的 Web 工具。
+
+
+## 时区 {#time-zones}
+对于没有指定时区的 CronJob,kube-controller-manager 基于本地时区解释排期表(Schedule)。
+
+{{< feature-state for_k8s_version="v1.24" state="alpha" >}}
+
+如果启用了 `CronJobTimeZone` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
+你可以为 CronJob 指定一个时区(如果你没有启用该特性门控,或者你使用的是不支持试验性时区功能的
+Kubernetes 版本,集群中所有 CronJob 的时区都是未指定的)。
+
+启用该特性后,你可以将 `spec.timeZone`
+设置为有效[时区](https://zh.wikipedia.org/zh-hant/%E6%97%B6%E5%8C%BA%E4%BF%A1%E6%81%AF%E6%95%B0%E6%8D%AE%E5%BA%93s)名称。
+例如,设置 `spec.timeZone: "Etc/UTC"` 指示 Kubernetes 采用 UTC 来解释排期表。
+
+Go 标准库中的时区数据库包含在二进制文件中,并用作备用数据库,以防系统上没有可用的外部数据库。
+
+
+
+## 时区 {#time-zones}
+对于没有指定时区的 CronJob,kube-controller-manager 会根据其本地时区来解释其排期表(schedule)。
+
+{{< feature-state for_k8s_version="v1.24" state="alpha" >}}
+
+
+如果启用 `CronJobTimeZone` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
+你可以为 CronJob 指定时区(如果你不启用该特性门控,或者如果你使用的 Kubernetes 版本不支持实验中的时区特性,
+则集群中的所有 CronJob 都属于未指定时区)。
+
+
+当你启用该特性时,你可以将 `spec.timeZone` 设置为有效的[时区](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)名称。
+例如,设置 `spec.timeZone: "Etc/UTC"` 表示 Kubernetes
+使用协调世界时(Coordinated Universal Time)进行解释排期表。
+
+Go 标准库中的时区数据库包含在二进制文件中,并用作备用数据库,以防系统上没有外部数据库可用。
@@ -147,9 +147,7 @@ unintentional orphaning of Pods, and it was found to be confusing to users.
`.spec.selector` 字段表示 Pod 选择算符,它与
[Job](/zh/docs/concepts/workloads/controllers/job/) 的 `.spec.selector` 的作用是相同的。
-从 Kubernetes 1.8 开始,您必须指定与 `.spec.template` 的标签匹配的 Pod 选择算符。
-用户不指定 Pod 选择算符时,该字段不再有默认值。
-选择算符的默认值生成结果与 `kubectl apply` 不兼容。
+你必须指定与 `.spec.template` 的标签匹配的 Pod 选择算符。
此外,一旦创建了 DaemonSet,它的 `.spec.selector` 就不能修改。
修改 Pod 选择算符可能导致 Pod 意外悬浮,并且这对用户来说是费解的。
@@ -175,11 +173,11 @@ When the two are specified the result is ANDed.
当上述两个字段都指定时,结果会按逻辑与(AND)操作处理。
-如果指定了 `.spec.selector`,必须与 `.spec.template.metadata.labels` 相匹配。
-如果与后者不匹配,则 DeamonSet 会被 API 拒绝。
+`.spec.selector` 必须与 `.spec.template.metadata.labels` 相匹配。
+如果配置中这两个字段不匹配,则会被 API 拒绝。
-`ScheduleDaemonSetPods` 允许您使用默认调度器而不是 DaemonSet 控制器来调度 DaemonSets,
+`ScheduleDaemonSetPods` 允许你使用默认调度器而不是 DaemonSet 控制器来调度 DaemonSets,
方法是将 `NodeAffinity` 条件而不是 `.spec.nodeName` 条件添加到 DaemonSet Pods。
默认调度器接下来将 Pod 绑定到目标主机。
如果 DaemonSet Pod 的节点亲和性配置已存在,则被替换
@@ -354,7 +352,7 @@ them according to its `updateStrategy`.
You can [perform a rolling update](/docs/tasks/manage-daemon/update-daemon-set/) on a DaemonSet.
-->
-您可以删除一个 DaemonSet。如果使用 `kubectl` 并指定 `--cascade=orphan` 选项,
+你可以删除一个 DaemonSet。如果使用 `kubectl` 并指定 `--cascade=orphan` 选项,
则 Pod 将被保留在节点上。接下来如果创建使用相同选择算符的新 DaemonSet,
新的 DaemonSet 会收养已有的 Pod。
如果有 Pod 需要被替换,DaemonSet 会根据其 `updateStrategy` 来替换。
diff --git a/content/zh/docs/concepts/workloads/controllers/deployment.md b/content/zh/docs/concepts/workloads/controllers/deployment.md
index d4ef2b43a8..f5249b60d6 100644
--- a/content/zh/docs/concepts/workloads/controllers/deployment.md
+++ b/content/zh/docs/concepts/workloads/controllers/deployment.md
@@ -340,7 +340,7 @@ Follow the steps given below to update your Deployment:
1. 先来更新 nginx Pod 以使用 `nginx:1.16.1` 镜像,而不是 `nginx:1.14.2` 镜像。
```shell
- kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
+ kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1
```
Job 会创建一个或者多个 Pods,并将继续重试 Pods 的执行,直到指定数量的 Pods 成功终止。
随着 Pods 成功结束,Job 跟踪记录成功完成的 Pods 个数。
@@ -46,7 +49,11 @@ Job 会创建一个或者多个 Pods,并将继续重试 Pods 的执行,直
你也可以使用 Job 以并行的方式运行多个 Pod。
+如果你想按某种排期表(Schedule)运行 Job(单个任务或多个并行任务),请参阅
+[CronJob](/docs/concepts/workloads/controllers/cron-jobs/)。
+
+
+
你可以使用下面的命令来运行此示例:
```shell
kubectl apply -f https://kubernetes.io/examples/controllers/job.yaml
```
+
输出类似于:
```
job.batch/pi created
```
-
+
使用 `kubectl` 来检查 Job 的状态:
```shell
kubectl describe jobs/pi
```
+
输出类似于:
```
@@ -132,6 +149,9 @@ pods=$(kubectl get pods --selector=job-name=pi --output=jsonpath='{.items[*].met
echo $pods
```
+
输出类似于:
```
@@ -139,7 +159,7 @@ pi-5rwd7
```
+
输出类似于:
```
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275901
```
+
-## 编写 Job 规约
+## 编写 Job 规约 {#writing-a-job-spec}
与 Kubernetes 中其他资源的配置类似,Job 也需要 `apiVersion`、`kind` 和 `metadata` 字段。
Job 的名字必须是合法的 [DNS 子域名](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
-Job 配置还需要一个[`.spec` 节](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status)。
+Job 配置还需要一个 [`.spec` 节](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status)。
-### Pod 模版
+### Pod 模版 {#pod-template}
Job 的 `.spec` 中只有 `.spec.template` 是必需的字段。
@@ -195,7 +218,7 @@ Job 的 `.spec` 中只有 `.spec.template` 是必需的字段。
完全相同,只是其中不再需要 `apiVersion` 或 `kind` 字段。
除了作为 Pod 所必需的字段之外,Job 中的 Pod 模版必需设置合适的标签
-(参见[Pod 选择算符](#pod-selector))和合适的重启策略。
+(参见 [Pod 选择算符](#pod-selector))和合适的重启策略。
Job 中 Pod 的 [`RestartPolicy`](/zh/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy)
只能设置为 `Never` 或 `OnFailure` 之一。
@@ -219,6 +242,7 @@ There are three main types of task suitable to run as a Job:
### Job 的并行执行 {#parallel-jobs}
适合以 Job 形式来运行的任务主要有三种:
+
### 完成模式 {#completion-mode}
-{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
-## 处理 Pod 和容器失效
+## 处理 Pod 和容器失效 {#handling-pod-and-container-failures}
Pod 中的容器可能因为多种不同原因失效,例如因为其中的进程退出时返回值非零,
或者容器因为超出内存约束而被杀死等等。
@@ -430,7 +454,7 @@ exponential back-off delay (10s, 20s, 40s ...) capped at six minutes. The
back-off count is reset when a Job's Pod is deleted or successful without any
other Pods for the Job failing around that time.
-->
-### Pod 回退失效策略
+### Pod 回退失效策略 {#pod-backoff-failure-policy}
在有些情形下,你可能希望 Job 在经历若干次重试之后直接进入失败状态,因为这很
可能意味着遇到了配置错误。
@@ -463,7 +487,7 @@ allows you to still view the logs of completed pods to check for errors, warning
The job object also remains after it is completed so that you can view its status. It is up to the user to delete
old jobs after noting their status. Delete the job with `kubectl` (e.g. `kubectl delete jobs/pi` or `kubectl delete -f ./job.yaml`). When you delete the job using `kubectl`, all the pods it created are deleted too.
-->
-## Job 终止与清理
+## Job 终止与清理 {#clean-up-finished-jobs-automatically}
Job 完成时不会再创建新的 Pod,不过已有的 Pod [通常](#pod-backoff-failure-policy)也不会被删除。
保留这些 Pod 使得你可以查看已完成的 Pod 的日志输出,以便检查错误、警告
@@ -561,7 +585,7 @@ cleaned up by CronJobs based on the specified capacity-based cleanup policy.
### 已完成 Job 的 TTL 机制 {#ttl-mechanisms-for-finished-jobs}
-{{< feature-state for_k8s_version="v1.21" state="beta" >}}
+{{< feature-state for_k8s_version="v1.23" state="stable" >}}
-该特性在 Kubernetes 1.21 版本中是 Alpha 阶段,启用该特性需要额外的步骤;
-请确保你正在阅读[与集群版本一致的文档](/zh/docs/home/supported-doc-versions/)。
-{{< /note >}}
+Job 被创建时,Job 控制器会马上开始执行 Pod 创建操作以满足 Job 的需求,
+并持续执行此操作直到 Job 完成为止。
+不过你可能想要暂时挂起 Job 执行,或启动处于挂起状态的job,
+并拥有一个自定义控制器以后再决定什么时候开始。
+
+
-Job 被创建时,Job 控制器会马上开始执行 Pod 创建操作以满足 Job 的需求,
-并持续执行此操作直到 Job 完成为止。
-不过你可能想要暂时挂起 Job 执行,之后再恢复其执行。
-要挂起一个 Job,你可以将 Job 的 `.spec.suspend` 字段更新为 true。
+要挂起一个 Job,你可以更新 `.spec.suspend` 字段为 true,
之后,当你希望恢复其执行时,将其更新为 false。
创建一个 `.spec.suspend` 被设置为 true 的 Job 本质上会将其创建为被挂起状态。
@@ -801,7 +822,7 @@ Job 的 `status` 可以用来确定 Job 是否被挂起,或者曾经被挂起
kubectl get jobs/myjob -o yaml
```
-```json
+```yaml
apiVersion: batch/v1
kind: Job
# .metadata and .spec omitted
@@ -859,7 +880,62 @@ as soon as the Job was resumed.
Job 被恢复执行时,Pod 创建操作立即被重启执行。
+### 可变调度指令 {#mutable-scheduling-directives}
+
+{{< feature-state for_k8s_version="v1.23" state="beta" >}}
+
+
+{{< note >}}
+为了使用此功能,你必须在 [API 服务器](/zh/docs/reference/command-line-tools-reference/kube-apiserver/)上启用
+`JobMutableNodeSchedulingDirectives` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。
+默认情况下启用。
+{{< /note >}}
+
+
+在大多数情况下,并行作业会希望 Pod 在一定约束条件下运行,
+比如所有的 Pod 都在同一个区域,或者所有的 Pod 都在 GPU 型号 x 或 y 上,而不是两者的混合。
+
+
+[suspend](#suspend-a-job) 字段是实现这些语义的第一步。
+suspend 允许自定义队列控制器,以决定工作何时开始;然而,一旦工作被取消暂停,
+自定义队列控制器对 Job 中 Pods 的实际放置位置没有影响。
+
+
+此特性允许在 Job 开始之前更新调度指令,从而为定制队列提供影响 Pod
+放置的能力,同时将 Pod 与节点间的分配关系留给 kube-scheduler 决定。
+这一特性仅适用于之前从未被暂停过的、已暂停的 Job。
+控制器能够影响 Pod 放置,同时参考实际
+pod-to-node 分配给 kube-scheduler。这仅适用于从未暂停的 Jobs。
+
+
+Job 的 Pod 模板中可以更新的字段是节点亲和性、节点选择器、容忍、标签和注解。
+
+
+
+
输出类似于:
```yaml
@@ -947,7 +1026,7 @@ the selector that the system normally generates for you automatically.
它们也会被名为 `new` 的 Job 所控制。
你需要在新 Job 中设置 `manualSelector: true`,因为你并未使用系统通常自动为你
-生成的选择算符。
+生成的选择算符。
```yaml
kind: Job
@@ -964,7 +1043,7 @@ spec:
新的 Job 自身会有一个不同于 `a8f3d00d-c6d2-11e5-9f87-42010af00002` 的唯一 ID。
@@ -973,29 +1052,32 @@ mismatch.
+### 使用 Finalizer 追踪 Job {#job-tracking-with-finalizers}
+{{< feature-state for_k8s_version="v1.23" state="beta" >}}
+
+{{< note >}}
+
-### 使用 Finalizer 追踪 Job {#job-tracking-with-finalizers}
-
-{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
-
-{{< note >}}
要使用该行为,你必须为 [API 服务器](/zh/docs/reference/command-line-tools-reference/kube-apiserver/)
和[控制器管理器](/zh/docs/reference/command-line-tools-reference/kube-controller-manager/)
启用 `JobTrackingWithFinalizers`
[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。
-默认是禁用的。
+默认是启用的。
-启用后,控制面基于下述行为追踪新的 Job。现有 Job 不受影响。
+
+启用后,控制面基于下述行为追踪新的 Job。在启用该特性之前创建的 Job 不受影响。
作为用户,你会看到的唯一区别是控制面对 Job 完成情况的跟踪更加准确。
{{< /note >}}
@@ -1064,7 +1146,7 @@ Job 会重新创建新的 Pod 来替代已终止的 Pod。
-### 单个 Job 启动控制器 Pod
+### 单个 Job 启动控制器 Pod {#single-job-starts-controller-pod}
另一种模式是用唯一的 Job 来创建 Pod,而该 Pod 负责启动其他 Pod,因此扮演了一种
后启动 Pod 的控制器的角色。
@@ -1127,7 +1209,7 @@ object, but maintains complete control over what Pods are created and how work i
object definition to understand the API for jobs.
* Read about [`CronJob`](/docs/concepts/workloads/controllers/cron-jobs/), which you
can use to define a series of Jobs that will run based on a schedule, similar to
- the Unix tool `cron`.
+ the UNIX tool `cron`.
-->
* 了解 [Pods](/zh/docs/concepts/workloads/pods)。
* 了解运行 Job 的不同的方式:
@@ -1138,4 +1220,4 @@ object, but maintains complete control over what Pods are created and how work i
* 跟随[自动清理完成的 Job](#clean-up-finished-jobs-automatically) 文中的链接,了解你的集群如何清理完成和失败的任务。
* `Job` 是 Kubernetes REST API 的一部分。阅读 {{< api-reference page="workload-resources/job-v1" >}}
对象定义理解关于该资源的 API。
-* 阅读 [`CronJob`](/zh/docs/concepts/workloads/controllers/cron-jobs/),它允许你定义一系列定期运行的 Job,类似于 Unix 工具 `cron`。
+* 阅读 [`CronJob`](/zh/docs/concepts/workloads/controllers/cron-jobs/),它允许你定义一系列定期运行的 Job,类似于 UNIX 工具 `cron`。
diff --git a/content/zh/docs/concepts/workloads/controllers/replicaset.md b/content/zh/docs/concepts/workloads/controllers/replicaset.md
index ca92f8378e..0d64bce6c4 100644
--- a/content/zh/docs/concepts/workloads/controllers/replicaset.md
+++ b/content/zh/docs/concepts/workloads/controllers/replicaset.md
@@ -56,10 +56,11 @@ ReplicaSet 所获得的 Pod 都在其 ownerReferences 字段中包含了属主 R
ReplicaSet 使用其选择算符来辨识要获得的 Pod 集合。如果某个 Pod 没有
-OwnerReference 或者其 OwnerReference 不是一个
+OwnerReference 或者其 OwnerReference 不是一个
{{< glossary_tooltip text="控制器" term_id="controller" >}},且其匹配到
某 ReplicaSet 的选择算符,则该 Pod 立即被此 ReplicaSet 获得。
@@ -68,14 +69,14 @@ OwnerReference 或者其 OwnerReference 不是一个
A ReplicaSet ensures that a specified number of pod replicas are running at any given
time. However, a Deployment is a higher-level concept that manages ReplicaSets and
-provides declarative updates to pods along with a lot of other useful features.
+provides declarative updates to Pods along with a lot of other useful features.
Therefore, we recommend using Deployments instead of directly using ReplicaSets, unless
you require custom update orchestration or don't require updates at all.
This actually means that you may never need to manipulate ReplicaSet objects:
use a Deployment instead, and define your application in the spec section.
-->
-## 何时使用 ReplicaSet
+## 何时使用 ReplicaSet {#when-to-use-a-replicaset}
ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。
然而,Deployment 是一个更高级的概念,它管理 ReplicaSet,并向 Pod
@@ -89,16 +90,16 @@ Deployment,并在 spec 部分定义你的应用。
-## 示例
+## 示例 {#example}
{{< codenew file="controllers/frontend.yaml" >}}
将此清单保存到 `frontend.yaml` 中,并将其提交到 Kubernetes 集群,
-应该就能创建 yaml 文件所定义的 ReplicaSet 及其管理的 Pod。
+就能创建 yaml 文件所定义的 ReplicaSet 及其管理的 Pod。
```shell
@@ -139,25 +140,25 @@ And you will see output similar to:
你会看到类似如下的输出:
```
-Name: frontend
-Namespace: default
-Selector: tier=frontend
-Labels: app=guestbook
- tier=frontend
+Name: frontend
+Namespace: default
+Selector: tier=frontend
+Labels: app=guestbook
+ tier=frontend
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"apps/v1","kind":"ReplicaSet","metadata":{"annotations":{},"labels":{"app":"guestbook","tier":"frontend"},"name":"frontend",...
-Replicas: 3 current / 3 desired
-Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
+Replicas: 3 current / 3 desired
+Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
- Labels: tier=frontend
+ Labels: tier=frontend
Containers:
php-redis:
- Image: gcr.io/google_samples/gb-frontend:v3
+ Image: gcr.io/google_samples/gb-frontend:v3
Port:
Host Port:
Environment:
- Mounts:
- Volumes:
+ Mounts:
+ Volumes:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
@@ -226,22 +227,15 @@ metadata:
-## 非模板 Pod 的获得
+## 非模板 Pod 的获得 {#non-template-pod-acquisitions}
尽管你完全可以直接创建裸的 Pods,强烈建议你确保这些裸的 Pods 并不包含可能与你
的某个 ReplicaSet 的选择算符相匹配的标签。原因在于 ReplicaSet 并不仅限于拥有
@@ -288,7 +282,7 @@ The output shows that the new Pods are either already terminated, or in the proc
-->
输出显示新的 Pods 或者已经被终止,或者处于终止过程中:
-```shell
+```
NAME READY STATUS RESTARTS AGE
frontend-b2zdv 1/1 Running 0 10m
frontend-vcmts 1/1 Running 0 10m
@@ -339,10 +333,13 @@ pod1 1/1 Running 0 36s
pod2 1/1 Running 0 36s
```
+
采用这种方式,一个 ReplicaSet 中可以包含异质的 Pods 集合。
-## 编写 ReplicaSet 的 spec
+## 编写 ReplicaSet 的清单 {#writing-a-replicaset-manifest}
与所有其他 Kubernetes API 对象一样,ReplicaSet 也需要 `apiVersion`、`kind`、和 `metadata` 字段。
对于 ReplicaSets 而言,其 `kind` 始终是 ReplicaSet。
@@ -360,7 +357,8 @@ A ReplicaSet also needs a [`.spec` section](https://git.k8s.io/community/contrib
ReplicaSet 对象的名称必须是合法的
[DNS 子域名](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)。
-ReplicaSet 也需要 [`.spec`](https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status)
+ReplicaSet 也需要
+[`.spec`](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status)
部分。
-### Pod 模版
+### Pod 模版 {#pod-template}
-`.spec.template` 是一个[Pod 模版](/zh/docs/concepts/workloads/pods/#pod-templates),
+`.spec.template` 是一个 [Pod 模版](/zh/docs/concepts/workloads/pods/#pod-templates),
要求设置标签。在 `frontend.yaml` 示例中,我们指定了标签 `tier: frontend`。
注意不要将标签与其他控制器的选择算符重叠,否则那些控制器会尝试收养此 Pod。
@@ -415,7 +413,7 @@ matchLabels:
-对于设置了相同的 `.spec.selector`,但
+对于设置了相同的 `.spec.selector`,但
`.spec.template.metadata.labels` 和 `.spec.template.spec` 字段不同的
两个 ReplicaSet 而言,每个 ReplicaSet 都会忽略被另一个 ReplicaSet 所
创建的 Pods。
@@ -434,7 +432,7 @@ If you do not specify `.spec.replicas`, then it defaults to 1.
你可以通过设置 `.spec.replicas` 来指定要同时运行的 Pod 个数。
ReplicaSet 创建、删除 Pods 以与此值匹配。
-如果你没有指定 `.spec.replicas`, 那么默认值为 1。
+如果你没有指定 `.spec.replicas`,那么默认值为 1。
-## 使用 ReplicaSets
+## 使用 ReplicaSets {#working-with-replicasets}
-### 删除 ReplicaSet 和它的 Pod
+### 删除 ReplicaSet 和它的 Pod {#deleting-a-replicaset-and-its-pods}
要删除 ReplicaSet 和它的所有 Pod,使用
[`kubectl delete`](/docs/reference/generated/kubectl/kubectl-commands#delete) 命令。
默认情况下,[垃圾收集器](/zh/docs/concepts/workloads/controllers/garbage-collection/)
自动删除所有依赖的 Pod。
-当使用 REST API 或 `client-go` 库时,你必须在删除选项中将 `propagationPolicy`
+当使用 REST API 或 `client-go` 库时,你必须在 `-d` 选项中将 `propagationPolicy`
设置为 `Background` 或 `Foreground`。例如:
```shell
kubectl proxy --port=8080
curl -X DELETE 'localhost:8080/apis/apps/v1/namespaces/default/replicasets/frontend' \
- -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \
- -H "Content-Type: application/json"
+ -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \
+ -H "Content-Type: application/json"
```
-### 只删除 ReplicaSet
+### 只删除 ReplicaSet {#deleting-just-a-replicaset}
你可以只删除 ReplicaSet 而不影响它的 Pods,方法是使用
[`kubectl delete`](/docs/reference/generated/kubectl/kubectl-commands#delete)
@@ -489,8 +489,8 @@ curl -X DELETE 'localhost:8080/apis/apps/v1/namespaces/default/replicasets/fron
@@ -502,16 +502,15 @@ To update Pods to a new spec in a controlled way, use a
资源,因为 ReplicaSet 并不直接支持滚动更新。
-### 将 Pod 从 ReplicaSet 中隔离
+### 将 Pod 从 ReplicaSet 中隔离 {#isolating-pods-from-a-replicaset}
-可以通过改变标签来从 ReplicaSet 的目标集中移除 Pod。
+可以通过改变标签来从 ReplicaSet 中移除 Pod。
这种技术可以用来从服务中去除 Pod,以便进行排错、数据恢复等。
以这种方式移除的 Pod 将被自动替换(假设副本的数量没有改变)。
@@ -519,9 +518,9 @@ from service for debugging, data recovery, etc. Pods that are removed in this wa
### Scaling a ReplicaSet
A ReplicaSet can be easily scaled up or down by simply updating the `.spec.replicas` field. The ReplicaSet controller
-ensures that a desired number of pods with a matching label selector are available and operational.
+ensures that a desired number of Pods with a matching label selector are available and operational.
-->
-### 缩放 RepliaSet
+### 缩放 RepliaSet {#scaling-a-replicaset}
通过更新 `.spec.replicas` 字段,ReplicaSet 可以被轻松的进行缩放。ReplicaSet
控制器能确保匹配标签选择器的数量的 Pod 是可用的和可操作的。
@@ -551,7 +550,7 @@ prioritize scaling down pods based on the following general algorithm:
[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
被启用时,创建时间是按整数幂级来分组的)。
-如果以上比较结果都相同,则随机选择。
+如果以上比较结果都相同,则随机选择。
- 此机制实施时仅是尽力而为,并不能对 Pod 的删除顺序作出任何保证;
- 用户应避免频繁更新注解值,例如根据某观测度量值来更新此注解值是应该避免的。
- 这样做会在 API 服务器上产生大量的 Pod 更新操作。
+ 这样做会在 API 服务器上产生大量的 Pod 更新操作。
{{< /note >}}
-#### 使用场景示例
+#### 使用场景示例 {#example-use-case}
同一应用的不同 Pods 可能其利用率是不同的。在对应用执行缩容操作时,可能
希望移除利用率较低的 Pods。为了避免频繁更新 Pods,应用应该在执行缩容
@@ -623,14 +622,14 @@ the down scaling; for example, the driver pod of a Spark deployment.
是可以起作用的。
-### ReplicaSet 作为水平的 Pod 自动缩放器目标
+### ReplicaSet 作为水平的 Pod 自动缩放器目标 {#replicaset-as-a-horizontal-pod-autoscaler-target}
ReplicaSet 也可以作为
[水平的 Pod 缩放器 (HPA)](/zh/docs/tasks/run-application/horizontal-pod-autoscale/)
@@ -642,7 +641,7 @@ ReplicaSet 也可以作为
将这个列表保存到 `hpa-rs.yaml` 并提交到 Kubernetes 集群,就能创建它所定义的
HPA,进而就能根据复制的 Pod 的 CPU 利用率对目标 ReplicaSet进行自动缩放。
@@ -655,7 +654,7 @@ kubectl apply -f https://k8s.io/examples/controllers/hpa-rs.yaml
Alternatively, you can use the `kubectl autoscale` command to accomplish the same
(and it's easier!)
-->
-或者,可以使用 `kubectl autoscale` 命令完成相同的操作。 (而且它更简单!)
+或者,可以使用 `kubectl autoscale` 命令完成相同的操作。(而且它更简单!)
```shell
kubectl autoscale rs frontend --max=10 --min=3 --cpu-percent=50
@@ -664,7 +663,7 @@ kubectl autoscale rs frontend --max=10 --min=3 --cpu-percent=50
-## ReplicaSet 的替代方案
+## ReplicaSet 的替代方案 {#alternatives-to-replicaset}
-### Deployment (推荐)
+### Deployment(推荐) {#deployment-recommended}
[`Deployment`](/zh/docs/concepts/workloads/controllers/deployment/) 是一个
可以拥有 ReplicaSet 并使用声明式方式在服务器端完成对 Pods 滚动更新的对象。
@@ -689,7 +688,7 @@ As such, it is recommended to use Deployments when you want ReplicaSets.
Unlike the case where a user directly created Pods, a ReplicaSet replaces Pods that are deleted or terminated for any reason, such as in the case of node failure or disruptive node maintenance, such as a kernel upgrade. For this reason, we recommend that you use a ReplicaSet even if your application requires only a single Pod. Think of it similarly to a process supervisor, only it supervises multiple Pods across multiple nodes instead of individual processes on a single node. A ReplicaSet delegates local container restarts to some agent on the node (for example, Kubelet or Docker).
-->
-### 裸 Pod
+### 裸 Pod {#bare-pods}
与用户直接创建 Pod 的情况不同,ReplicaSet 会替换那些由于某些原因被删除或被终止的
Pod,例如在节点故障或破坏性的节点维护(如内核升级)的情况下。
@@ -713,9 +712,9 @@ Use a [`Job`](/docs/concepts/workloads/controllers/job/) instead of a ReplicaSet
### DaemonSet
@@ -756,6 +755,8 @@ ReplicaSet 是 [ReplicationController](/zh/docs/concepts/workloads/controllers/r
* 了解 [Pods](/zh/docs/concepts/workloads/pods)。
* 了解 [Deployments](/zh/docs/concepts/workloads/controllers/deployment/)。
* [使用 Deployment 运行一个无状态应用](/zh/docs/tasks/run-application/run-stateless-application-deployment/),它依赖于 ReplicaSet。
-* `ReplicaSet` 是 Kubernetes REST API 中的顶级资源。阅读 {{< api-reference page="workload-resources/replica-set-v1" >}}
- 对象定义理解关于该资源的 API。
-* 阅读[Pod 干扰预算(Disruption Budget)](/zh/docs/concepts/workloads/pods/disruptions/),了解如何在干扰下运行高度可用的应用。
+* `ReplicaSet` 是 Kubernetes REST API 中的顶级资源。阅读
+ {{< api-reference page="workload-resources/replica-set-v1" >}}
+ 对象定义理解关于该资源的 API。
+* 阅读 [Pod 干扰预算(Disruption Budget)](/zh/docs/concepts/workloads/pods/disruptions/),
+ 了解如何在干扰下运行高度可用的应用。
diff --git a/content/zh/docs/concepts/workloads/controllers/statefulset.md b/content/zh/docs/concepts/workloads/controllers/statefulset.md
index 26f00ae25c..22a3cdcca7 100644
--- a/content/zh/docs/concepts/workloads/controllers/statefulset.md
+++ b/content/zh/docs/concepts/workloads/controllers/statefulset.md
@@ -116,13 +116,14 @@ metadata:
spec:
selector:
matchLabels:
- app: nginx # has to match .spec.template.metadata.labels
+ app: nginx # 必须匹配 .spec.template.metadata.labels
serviceName: "nginx"
- replicas: 3 # by default is 1
+ replicas: 3 # 默认值是 1
+ minReadySeconds: 10 # 默认值是 0
template:
metadata:
labels:
- app: nginx # has to match .spec.selector.matchLabels
+ app: nginx # 必须匹配 .spec.selector.matchLabels
spec:
terminationGracePeriodSeconds: 10
containers:
@@ -166,17 +167,47 @@ The name of a StatefulSet object must be a valid
StatefulSet 的命名需要遵循[DNS 子域名](/zh/docs/concepts/overview/working-with-objects/names#dns-subdomain-names)规范。
-## Pod 选择算符 {#pod-selector}
+### Pod 选择算符 {#pod-selector}
你必须设置 StatefulSet 的 `.spec.selector` 字段,使之匹配其在
-`.spec.template.metadata.labels` 中设置的标签。在 Kubernetes 1.8 版本之前,
-被忽略 `.spec.selector` 字段会获得默认设置值。
-在 1.8 和以后的版本中,未指定匹配的 Pod 选择器将在创建 StatefulSet 期间导致验证错误。
+`.spec.template.metadata.labels` 中设置的标签。
+未指定匹配的 Pod 选择器将在创建 StatefulSet 期间导致验证错误。
+
+
+### 卷申领模版 {#volume-claim-templates}
+
+你可以设置 `.spec.volumeClaimTemplates`,
+它可以使用 PersistentVolume 制备程序所准备的
+[PersistentVolumes](/zh/docs/concepts/storage/persistent-volumes/) 来提供稳定的存储。
+
+
+### 最短就绪秒数 {#minimum-ready-seconds}
+
+{{< feature-state for_k8s_version="v1.23" state="beta" >}}
+
+
+`.spec.minReadySeconds` 是一个可选字段,
+它指定新创建的 Pod 应该准备好且其任何容器不崩溃的最小秒数,以使其被视为可用。
+请注意,此功能是测试版,默认启用。如果你不希望启用此功能,
+请通过取消设置 StatefulSetMinReadySeconds 标志来选择退出。
+该字段默认为 0(Pod 准备就绪后将被视为可用)。
+要了解有关何时认为 Pod 准备就绪的更多信息,
+请参阅[容器探针](/zh/docs/concepts/workloads/pods/pod-lifecycle/#container-probes)。
### Pod 管理策略 {#pod-management-policies}
-在 Kubernetes 1.7 及以后的版本中,StatefulSet 允许你放宽其排序保证,
+StatefulSet 允许你放宽其排序保证,
同时通过它的 `.spec.podManagementPolicy` 域保持其唯一性和身份保证。
## 滚动更新 {#rolling-updates}
@@ -482,6 +515,47 @@ update, roll out a canary, or perform a phased roll out.
在大多数情况下,你不需要使用分区,但如果你希望进行阶段更新、执行金丝雀或执行
分阶段上线,则这些分区会非常有用。
+
+### 最大不可用 Pod
+
+{{< feature-state for_k8s_version="v1.24" state="alpha" >}}
+
+
+你可以通过指定 `.spec.updateStrategy.rollingUpdate.maxUnavailable`
+字段来控制更新期间不可用的 Pod 的最大数量。
+该值可以是绝对值(例如,“5”)或者是期望 Pod 个数的百分比(例如,`10%`)。
+绝对值是根据百分比值四舍五入计算的。
+该字段不能为 0。默认设置为 1。
+
+
+该字段适用于 `0` 到 `replicas - 1` 范围内的所有 Pod。
+如果在 `0` 到 `replicas - 1` 范围内存在不可用 Pod,这类 Pod 将被计入 `maxUnavailable` 值。
+
+
+{{< note >}}
+`maxUnavailable` 字段处于 Alpha 阶段,仅当 API 服务器启用了 `MaxUnavailableStatefulSet`
+[特性门控](/zh/docs/reference/commmand-line-tools-reference/feature-gates/)时才起作用。
+{{< /note >}}
+
+## PersistentVolumeClaim 保留 {#persistentvolumeclaim-retention}
-`.spec.minReadySeconds` is an optional field that specifies the minimum number of seconds for which a newly
-created Pod should be ready without any of its containers crashing, for it to be considered available.
-This defaults to 0 (the Pod will be considered available as soon as it is ready). To learn more about when
-a Pod is considered ready, see [Container Probes](/docs/concepts/workloads/pods/pod-lifecycle/#container-probes).
+{{< feature-state for_k8s_version="v1.23" state="alpha" >}}
-Please note that this field only works if you enable the `StatefulSetMinReadySeconds` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/).
+
-### 最短就绪秒数 {#minimum-ready-seconds}
+在 StatefulSet 的生命周期中,可选字段
+`.spec.persistentVolumeClaimRetentionPolicy` 控制是否删除以及如何删除 PVC。
+使用该字段,你必须启用 `StatefulSetAutoDeletePVC`
+[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。
+启用后,你可以为每个 StatefulSet 配置两个策略:
-{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
+
+`whenDeleted`
+: 配置删除 StatefulSet 时应用的卷保留行为
-请注意只有当你启用 `StatefulSetMinReadySeconds` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)时,该字段才会生效。
+`whenScaled`
+: 配置当 StatefulSet 的副本数减少时应用的卷保留行为;例如,缩小集合时。
+
+对于你可以配置的每个策略,你可以将值设置为 `Delete` 或 `Retain`。
+
+
+`Delete`
+: 对于受策略影响的每个 Pod,基于 StatefulSet 的 `volumeClaimTemplate` 字段创建的 PVC 都会被删除。
+ 使用 `whenDeleted` 策略,所有来自 `volumeClaimTemplate` 的 PVC 在其 Pod 被删除后都会被删除。
+ 使用 `whenScaled` 策略,只有与被缩减的 Pod 副本对应的 PVC 在其 Pod 被删除后才会被删除。
+
+
+`Retain`(默认)
+: 来自 `volumeClaimTemplate` 的 PVC 在 Pod 被删除时不受影响。这是此新功能之前的行为。
+
+
+请记住,这些策略**仅**适用于由于 StatefulSet 被删除或被缩小而被删除的 Pod。
+例如,如果与 StatefulSet 关联的 Pod 由于节点故障而失败,
+并且控制平面创建了替换 Pod,则 StatefulSet 保留现有的 PVC。
+现有卷不受影响,集群会将其附加到新 Pod 即将启动的节点上。
+
+策略的默认值为 `Retain`,与此新功能之前的 StatefulSet 行为相匹配。
+
+这是一个示例策略。
+
+```yaml
+apiVersion: apps/v1
+kind: StatefulSet
+...
+spec:
+ persistentVolumeClaimRetentionPolicy:
+ whenDeleted: Retain
+ whenScaled: Delete
+...
+```
+
+
+StatefulSet {{}}为其 PVC 添加了
+[属主引用](/zh/docs/concepts/overview/working-with-objects/owners-dependents/#owner-references-in-object-specifications),
+这些 PVC 在 Pod 终止后被{{}}删除。
+这使 Pod 能够在删除 PVC 之前(以及在删除后备 PV 和卷之前,取决于保留策略)干净地卸载所有卷。
+当你设置 `whenDeleted` 删除策略,对 StatefulSet 实例的属主引用放置在与该 StatefulSet 关联的所有 PVC 上。
+
+
+`whenScaled` 策略必须仅在 Pod 缩减时删除 PVC,而不是在 Pod 因其他原因被删除时删除。
+执行协调操作时,StatefulSet 控制器将其所需的副本数与集群上实际存在的 Pod 进行比较。
+对于 StatefulSet 中的所有 Pod 而言,如果其 ID 大于副本数,则将被废弃并标记为需要删除。
+如果 `whenScaled` 策略是 `Delete`,则在删除 Pod 之前,
+首先将已销毁的 Pod 设置为与 StatefulSet 模板 对应的 PVC 的属主。
+这会导致 PVC 仅在已废弃的 Pod 终止后被垃圾收集。
+
+
+这意味着如果控制器崩溃并重新启动,在其属主引用更新到适合策略的 Pod 之前,不会删除任何 Pod。
+如果在控制器关闭时强制删除了已废弃的 Pod,则属主引用可能已被设置,也可能未被设置,具体取决于控制器何时崩溃。
+更新属主引用可能需要几个协调循环,因此一些已废弃的 Pod 可能已经被设置了属主引用,而其他可能没有。
+出于这个原因,我们建议等待控制器恢复,控制器将在终止 Pod 之前验证属主引用。
+如果这不可行,则操作员应验证 PVC 上的属主引用,以确保在强制删除 Pod 时删除预期的对象。
+
+
+### 副本数 {#replicas}
+
+`.spec.replicas` 是一个可选字段,用于指定所需 Pod 的数量。它的默认值为 1。
+
+如果你手动扩缩已部署的负载,例如通过 `kubectl scale statefulset statefulset --replicas=X`,
+然后根据清单更新 StatefulSet(例如:通过运行 `kubectl apply -f statefulset.yaml`),
+那么应用该清单的操作会覆盖你之前所做的手动缩放。
+
+
+如果 [HorizontalPodAutoscaler](/zh/docs/tasks/run-application/horizontal-pod-autoscale/)
+(或任何类似的水平缩放 API)正在管理 Statefulset 的缩放,
+请不要设置 `.spec.replicas`。
+相反,允许 Kubernetes 控制平面自动管理 `.spec.replicas` 字段。
## {{% heading "whatsnext" %}}
@@ -556,7 +779,7 @@ Please note that this field only works if you enable the `StatefulSetMinReadySec
* Read about [PodDisruptionBudget](/docs/concepts/workloads/pods/disruptions/) and how
you can use it to manage application availability during disruptions.
-->
-* 了解 [Pods](/zh/docs/concepts/workloads/pods)。
+* 了解 [Pod](/zh/docs/concepts/workloads/pods)。
* 了解如何使用 StatefulSet
* 跟随示例[部署有状态应用](/zh/docs/tutorials/stateful-application/basic-stateful-set/)。
* 跟随示例[使用 StatefulSet 部署 Cassandra](/zh/docs/tutorials/stateful-application/cassandra/)。
@@ -567,4 +790,4 @@ Please note that this field only works if you enable the `StatefulSetMinReadySec
* 了解如何[配置 Pod 以使用 PersistentVolume 作为存储](/zh/docs/tasks/configure-pod-container/configure-persistent-volume-storage/)。
* `StatefulSet` 是 Kubernetes REST API 中的顶级资源。阅读 {{< api-reference page="workload-resources/stateful-set-v1" >}}
对象定义理解关于该资源的 API。
-* 阅读[Pod 干扰预算(Disruption Budget)](/zh/docs/concepts/workloads/pods/disruptions/),了解如何在干扰下运行高度可用的应用。
+* 阅读 [Pod 干扰预算(Disruption Budget)](/zh/docs/concepts/workloads/pods/disruptions/),了解如何在干扰下运行高度可用的应用。
diff --git a/content/zh/docs/concepts/workloads/controllers/ttlafterfinished.md b/content/zh/docs/concepts/workloads/controllers/ttlafterfinished.md
index 0d02b7a04b..352ddaf83d 100644
--- a/content/zh/docs/concepts/workloads/controllers/ttlafterfinished.md
+++ b/content/zh/docs/concepts/workloads/controllers/ttlafterfinished.md
@@ -94,7 +94,7 @@ returns a successful API response.
请注意,在创建 Job 或已经执行结束后,仍可以修改其 TTL 周期,例如 Job 的
`.spec.ttlSecondsAfterFinished` 字段。
-但是一旦 Job 变为可被删除状态(当其 TTL 已过期时),即使您通过 API 增加其 TTL
+但是一旦 Job 变为可被删除状态(当其 TTL 已过期时),即使你通过 API 增加其 TTL
时长得到了成功的响应,系统也不保证 Job 将被保留。
+## 使用 Pod {#using-pods}
+
+下面是一个 Pod 示例,它由一个运行镜像 `nginx:1.14.2` 的容器组成。
+
+{{< codenew file="pods/simple-pod.yaml" >}}
+
+要创建上面显示的 Pod,请运行以下命令:
+
+```shell
+kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml
+```
+
+
+Pod 通常不是直接创建的,而是使用工作负载资源创建的。
+有关如何将 Pod 用于工作负载资源的更多信息,请参阅 [使用 Pod](#working-with-pods)。
+
+### 用于管理 pod 的工作负载资源
+
+
-## 使用 Pod {#using-pods}
-
通常你不需要直接创建 Pod,甚至单实例 Pod。
相反,你会使用诸如
{{< glossary_tooltip text="Deployment" term_id="deployment" >}} 或
@@ -187,9 +216,9 @@ that updates those files from a remote source, as in the following diagram:
-->
例如,你可能有一个容器,为共享卷中的文件提供 Web 服务器支持,以及一个单独的
-“sidecar(挂斗)”容器负责从远端更新这些文件,如下图所示:
+"边车 (sidercar)" 容器负责从远端更新这些文件,如下图所示:
-{{< figure src="/images/docs/pod.svg" alt="example pod diagram" width="50%" >}}
+{{< figure src="/images/docs/pod.svg" alt="Pod creation diagram" class="diagram-medium" >}}
-在节点上,{{< glossary_tooltip term_id="kubelet" text="kubelet" >}}并不直接监测
+在节点上,{{< glossary_tooltip term_id="kubelet" text="kubelet" >}} 并不直接监测
或管理与 Pod 模版相关的细节或模版的更新,这些细节都被抽象出来。
这种抽象和关注点分离简化了整个系统的语义,并且使得用户可以在不改变现有代码的
前提下就能扩展集群的行为。
@@ -412,7 +441,7 @@ Kubernetes 并不禁止你直接管理 Pod。对运行中的 Pod 的某些字段
Pods enable data sharing and communication among their constituent
containters.
-->
-### 资源共享和通信 {#resource-sharing-and-communication}
+### 资源共享和通信 {#resource-sharing-and-communication}
Pod 使它的成员容器间能够进行数据共享和通信。
@@ -459,14 +488,13 @@ can find each other via `localhost`. The containers in a Pod can also communicat
with each other using standard inter-process communications like SystemV semaphores
or POSIX shared memory. Containers in different Pods have distinct IP addresses
and can not communicate by IPC without
-[special configuration](/docs/concepts/policy/pod-security-policy/).
+and can not communicate by OS-level IPC without special configuration.
Containers that want to interact with a container running in a different Pod can
use IP networking to communicate.
-->
在同一个 Pod 内,所有容器共享一个 IP 地址和端口空间,并且可以通过 `localhost` 发现对方。
他们也能通过如 SystemV 信号量或 POSIX 共享内存这类标准的进程间通信方式互相通信。
-不同 Pod 中的容器的 IP 地址互不相同,没有
-[特殊配置](/zh/docs/concepts/policy/pod-security-policy/) 就不能使用 IPC 进行通信。
+不同 Pod 中的容器的 IP 地址互不相同,没有特殊配置,无法通过 OS 级 IPC 进行通信就不能使用 IPC 进行通信。
如果某容器希望与运行于其他 Pod 中的容器通信,可以通过 IP 联网的方式实现。
-* 了解如何[使用临时调试容器来进行调试](/zh/docs/tasks/debug-application-cluster/debug-running-pod/#ephemeral-container)
+* 了解如何[使用临时调试容器来进行调试](/zh/docs/tasks/debug/debug-application/debug-running-pod/#ephemeral-container)
diff --git a/content/zh/docs/concepts/workloads/pods/init-containers.md b/content/zh/docs/concepts/workloads/pods/init-containers.md
index d57f3624e9..198111fe04 100644
--- a/content/zh/docs/concepts/workloads/pods/init-containers.md
+++ b/content/zh/docs/concepts/workloads/pods/init-containers.md
@@ -556,7 +556,7 @@ Pod 不会被重启。这一行为适用于 Kubernetes v1.20 及更新版本。
* 阅读[创建包含 Init 容器的 Pod](/zh/docs/tasks/configure-pod-container/configure-pod-initialization/#create-a-pod-that-has-an-init-container)
-* 学习如何[调试 Init 容器](/zh/docs/tasks/debug-application-cluster/debug-init-containers/)
+* 学习如何[调试 Init 容器](/zh/docs/tasks/debug/debug-application/debug-init-containers/)
diff --git a/content/zh/docs/concepts/workloads/pods/pod-topology-spread-constraints.md b/content/zh/docs/concepts/workloads/pods/pod-topology-spread-constraints.md
index 42f6677e25..11eb5c3019 100644
--- a/content/zh/docs/concepts/workloads/pods/pod-topology-spread-constraints.md
+++ b/content/zh/docs/concepts/workloads/pods/pod-topology-spread-constraints.md
@@ -10,11 +10,6 @@ content_type: concept
weight: 40
-->
-{{< feature-state for_k8s_version="v1.19" state="stable" >}}
-
-
- **maxSkew** 描述 Pod 分布不均的程度。这是给定拓扑类型中任意两个拓扑域中
匹配的 pod 之间的最大允许差值。它必须大于零。取决于 `whenUnsatisfiable` 的
取值,其语义会有不同。
- 当 `whenUnsatisfiable` 等于 "DoNotSchedule" 时,`maxSkew` 是目标拓扑域
- 中匹配的 Pod 数与全局最小值之间可存在的差异。
+ 中匹配的 Pod 数与全局最小值(一个拓扑域中与标签选择器匹配的 Pod 的最小数量。例如,如果你有
+ 3 个区域,分别具有 0 个、2 个 和 3 个匹配的 Pod,则全局最小值为 0。)之间可存在的差异。
- 当 `whenUnsatisfiable` 等于 "ScheduleAnyway" 时,调度器会更为偏向能够降低
偏差值的拓扑域。
+
+
+- **minDomains** 表示符合条件的域的最小数量。域是拓扑的一个特定实例。
+ 符合条件的域是其节点与节点选择器匹配的域。
+
+ - 指定的 `minDomains` 的值必须大于 0。
+ - 当符合条件的、拓扑键匹配的域的数量小于 `minDomains` 时,Pod 拓扑分布将“全局最小值”(global minimum) 设为
+ 0,然后进行 `skew` 计算。“全局最小值”是一个符合条件的域中匹配 Pods 的最小数量,
+ 如果符合条件的域的数量小于 `minDomains`,则全局最小值为零。
+ - 当符合条件的拓扑键匹配域的个数等于或大于 `minDomains` 时,该值对调度没有影响。
+ - 当 `minDomains` 为 nil 时,约束的行为等于 `minDomains` 为 1。
+ - 当 `minDomains` 不为 nil 时,`whenUnsatisfiable` 的值必须为 "`DoNotSchedule`" 。
+
+ {{< note >}}
+
+ `minDomains` 字段是在 1.24 版本中新增的 alpha 字段。你必须启用
+ `MinDomainsInPodToplogySpread` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)才能使用它。
+ {{< /note >}}
+
+
- **topologyKey** 是节点标签的键。如果两个节点使用此键标记并且具有相同的标签值,
则调度器会将这两个节点视为处于同一拓扑域中。调度器试图在每个拓扑域中放置数量
均衡的 Pod。
+
- **whenUnsatisfiable** 指示如果 Pod 不满足分布约束时如何处理:
- `DoNotSchedule`(默认)告诉调度器不要调度。
- `ScheduleAnyway` 告诉调度器仍然继续调度,只是根据如何能将偏差最小化来对
节点进行排序。
+
- **labelSelector** 用于查找匹配的 pod。匹配此标签的 Pod 将被统计,以确定相应
拓扑域中 Pod 的数量。
有关详细信息,请参考[标签选择算符](/zh/docs/concepts/overview/working-with-objects/labels/#label-selectors)。
@@ -498,7 +540,8 @@ apiVersion: kubescheduler.config.k8s.io/v1beta3
kind: KubeSchedulerConfiguration
profiles:
- - pluginConfig:
+ - schedulerName: default-scheduler
+ pluginConfig:
- name: PodTopologySpread
args:
defaultConstraints:
@@ -510,16 +553,12 @@ profiles:
{{< note >}}
-默认调度约束所生成的评分可能与
-[`SelectorSpread` 插件](/zh/docs/reference/scheduling/config/#scheduling-plugins)
-所生成的评分有冲突。
-建议你在为 `PodTopologySpread` 设置默认约束是禁用调度方案中的该插件。
+[`SelectorSpread` 插件](/zh/docs/reference/scheduling/config/#scheduling-plugins)默认是被禁用的。
+建议使用 `PodTopologySpread` 来实现类似的行为。
{{< /note >}}
#### 内部默认约束 {#internal-default-constraints}
-{{< feature-state for_k8s_version="v1.20" state="beta" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
-当你使用了默认启用的 `DefaultPodTopologySpread` 特性门控时,原来的
-`SelectorSpread` 插件会被禁用。
-kube-scheduler 会使用下面的默认拓扑约束作为 `PodTopologySpread` 插件的
-配置:
+如果你没有为 Pod 拓扑分布配置任何集群级别的默认约束,
+kube-scheduler 的行为就像你指定了以下默认拓扑约束一样:
```yaml
defaultConstraints:
@@ -552,9 +587,9 @@ defaultConstraints:
-此外,原来用于提供等同行为的 `SelectorSpread` 插件也会被禁用。
+此外,原来用于提供等同行为的 `SelectorSpread` 插件默认被禁用。
{{< note >}}
@@ -36,12 +36,21 @@ card:
{{< note >}}
To learn more about contributing to Kubernetes in general, see the
[contributor documentation](https://www.kubernetes.dev/docs/).
+
+You can also read the
+{{< glossary_tooltip text="CNCF" term_id="cncf" >}}
+[page](https://contribute.cncf.io/contributors/projects/#kubernetes)
+about contributing to Kubernetes.
{{< /note >}}
-->
{{< note >}}
要了解有关为 Kubernetes 做出贡献的更多信息,请参阅
-[贡献者文档](https://www.kubernetes.dev/docs/).
-{{< /note >}}
+[贡献者文档](https://www.kubernetes.dev/docs/)。
+
+你还可以阅读
+{{< glossary_tooltip text="CNCF" term_id="cncf" >}}
+关于为 Kubernetes 做贡献的[页面](https://contribute.cncf.io/contributors/projects/#kubernetes)。
+
+本网站由 [Kubernetes SIG(特别兴趣小组)Docs](/zh/docs/contribute/#get-involved-with-SIG-Docs) 维护。
-本网站由 [Kubernetes SIG(特别兴趣小组) Docs](/zh/docs/contribute/#get-involved-with-SIG-Docs) 维护。
-
-Kubernetes 文档项目的贡献者:
+Kubernetes 文档项目的贡献者:
- 改进现有内容
- 创建新内容
- 翻译文档
- 管理并发布 Kubernetes 周期性发行版的文档
-Kubernetes 文档欢迎来自各方贡献者的改进,无论新手还是高手!
-
## 入门 {#getting-started}
任何人都可以提出文档方面的问题(issue),或贡献一个变更,用拉取请求(PR)的方式提交到
[GitHub 上的 `kubernetes/website` 仓库](https://github.com/kubernetes/website)。
当然你需要熟练使用 [git](https://git-scm.com/) 和 [GitHub](https://lab.github.com/) 才能在 Kubernetes 社区中有效工作。
+
+如何参与文档编制:
+1. 签署 CNCF 的[贡献者许可协议](https://github.com/kubernetes/community/blob/master/CLA.md)。
+2. 熟悉[文档仓库](https://github.com/kubernetes/website)和网站的[静态站点生成器](https://gohugo.io)。
+3. 确保理解[发起 PR](/zh/docs/contribute/new-content/open-a-pr/) 和[审查变更](/zh/docs/contribute/review/reviewing-prs/)的基本流程。
+
+
+
+
+{{< mermaid >}}
+flowchart TB
+subgraph third[发起 PR]
+direction TB
+U[ ] -.-
+Q[改进现有内容] --- N[创建新内容]
+N --- O[翻译文档]
+O --- P[管理并发布 K8s 周期性发行版的文档]
+
+end
+
+subgraph second[评审]
+direction TB
+ T[ ] -.-
+ D[仔细查看 K8s/website 仓库] --- E[下载安装 Hugo 静态站点 生成器]
+ E --- F[了解基本的 GitHub 命令]
+ F --- G[评审待处理的 PR 并遵从变更审查 流程]
+end
+
+subgraph first[注册]
+ direction TB
+ S[ ] -.-
+ B[签署 CNCF 贡献者 许可协议] --- C[加入 sig-docs Slack 频道]
+ C --- V[加入 kubernetes-sig-docs 邮件列表]
+ V --- M[参加每周的 sig-docs 电话会议 或 slack 会议]
+end
+
+A([fa:fa-user 新的 贡献者]) --> first
+A --> second
+A --> third
+A --> H[提出问题!!!]
+
+
+classDef grey fill:#dddddd,stroke:#ffffff,stroke-width:px,color:#000000, font-size:15px;
+classDef white fill:#ffffff,stroke:#000,stroke-width:px,color:#000,font-weight:bold
+classDef spacewhite fill:#ffffff,stroke:#fff,stroke-width:0px,color:#000
+class A,B,C,D,E,F,G,H,M,Q,N,O,P,V grey
+class S,T,U spacewhite
+class first,second,third white
+{{ mermaid >}}
+
+
+图 1. 新手入门指示。
+
+图 1 概述了新贡献者的路线图。
+你可以遵从`注册`和`评审`所述的某些或全部步骤。
+至此,你完成了发起 PR 的准备工作,
+可以通过`发起 PR`列出的事项实现你的贡献目标。
+再次重申,欢迎随时提出问题!
+
+
-如何参与文档编制:
-
-1. 签署 CNCF 的[贡献者许可协议](https://github.com/kubernetes/community/blob/master/CLA.md)。
-2. 熟悉[文档仓库](https://github.com/kubernetes/website)
- 和网站的[静态站点生成器](https://gohugo.io)。
-3. 确保理解
- [发起 PR](/zh/docs/contribute/new-content/open-a-pr/) 和
- [审查变更](/zh/docs/contribute/review/reviewing-prs/)的基本流程。
-
有些任务要求 Kubernetes 组织内更高的信任级别和访问权限。
阅读[参与 SIG Docs 工作](/zh/docs/contribute/participate/) ,获取角色和权限的更多细节。
-
+## 第一次贡献 {#your-first-contribution}
+
+你可以提前查阅几个步骤,来准备你的第一次贡献。
+图 2 概述了后续的步骤和细节。
+
+
+
+
+{{< mermaid >}}
+flowchart LR
+ subgraph second[第一次贡献]
+ direction TB
+ S[ ] -.-
+ G[查阅其他 K8s 成员发起的 PR] -->
+ A[检索 K8s/website 问题列表是否有 good first 一类的 PR] --> B[发起一个 PR!!]
+ end
+ subgraph first[建议的准备工作]
+ direction TB
+ T[ ] -.-
+ D[阅读贡献概述] -->E[阅读 K8s 内容 和风格指南]
+ E --> F[了解 Hugo 页面 内容类型 和短代码]
+ end
+
+
+ first ----> second
+
+
+classDef grey fill:#dddddd,stroke:#ffffff,stroke-width:px,color:#000000, font-size:15px;
+classDef white fill:#ffffff,stroke:#000,stroke-width:px,color:#000,font-weight:bold
+classDef spacewhite fill:#ffffff,stroke:#fff,stroke-width:0px,color:#000
+class A,B,D,E,F,G grey
+class S,T spacewhite
+class first,second white
+{{ mermaid >}}
+
+
+图 2. 第一次贡献的准备工作。
+
+
-## 第一次贡献 {#your-first-contribution}
-
- 通读[贡献概述](/zh/docs/contribute/new-content/overview/),了解参与贡献的不同方式。
-- 查看[`kubernetes/website` 问题列表](https://github.com/kubernetes/website/issues/)
+- 查看 [`kubernetes/website` 问题列表](https://github.com/kubernetes/website/issues/)
,检索最适合作为切入点的问题。
-- 在现有文档上,
- [使用 GitHub 提交 PR ](/zh/docs/contribute/new-content/open-a-pr/#changes-using-github),
+- 在现有文档上,[使用 GitHub 提交 PR](/zh/docs/contribute/new-content/open-a-pr/#changes-using-github),
掌握在 GitHub 上登记 Issue 的方法。
- Kubernetes 社区其他成员会[评审 PR ](/zh/docs/contribute/review/reviewing-prs/),
以确保文档精准和语言流畅。
@@ -157,11 +256,11 @@ roles and permissions.
- 学习在仓库的[本地克隆中工作](/zh/docs/contribute/new-content/open-a-pr/#fork-the-repo)。
- 为[发行版的特性](/zh/docs/contribute/new-content/new-features/)编写文档。
-- 加入 [SIG Docs](/zh/docs/contribute/participate/), 并成为[成员或评审者](/zh/docs/contribute/participate/roles-and-responsibilities/)。
+- 加入 [SIG Docs](/zh/docs/contribute/participate/),并成为[成员或评审者](/zh/docs/contribute/participate/roles-and-responsibilities/)。
- 开始或帮助[本地化](/zh/docs/contribute/localization/) 工作。
-
## 参与 SIG Docs 工作 {#get-involved-with-SIG-Docs}
[SIG Docs](/zh/docs/contribute/participate/) 是负责发布、维护 Kubernetes 文档的贡献者团体。
参与 SIG Docs 是 Kubernetes 贡献者(开发者和其他人员)对 Kubernetes 项目产生重大影响力的好方式。
-SIG Docs 的几种沟通方式:
-
+SIG Docs 的几种沟通方式:
+
- [加入 Kubernetes 在 Slack 上的`#sig-docs` 频道](https://slack.k8s.io/)。
一定记得自我介绍!
-- [加入`kubernetes-sig-docs` 邮件列表](https://groups.google.com/forum/#!forum/kubernetes-sig-docs),
+- [加入 `kubernetes-sig-docs` 邮件列表](https://groups.google.com/forum/#!forum/kubernetes-sig-docs),
这里有更广泛的讨论,和官方决策的记录。
-- 参加 [SIG Docs 的每周视频会议](https://github.com/kubernetes/community/tree/master/sig-docs)。会议总是在 `#sig-docs` 上发出公告,同时添加到
- [Kubernetes社区会议日历](https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com&ctz=America/Los_Angeles)。
+- 参加每两周召开一次的 [SIG Docs 视频会议](https://github.com/kubernetes/community/tree/master/sig-docs)。
+ 会议总是在 `#sig-docs` 上发出公告,同时添加到
+ [Kubernetes 社区会议日历](https://calendar.google.com/calendar/embed?src=cgnt364vd8s86hr2phapfjc6uk%40group.calendar.google.com&ctz=America/Los_Angeles)。
你需要下载 [Zoom 客户端软件](https://zoom.us/download),或电话拨号接入。
+- 如果有几周未召开实况 Zoom 视频会议,请参加 SIG Docs 异步 Slack 站会。
+ 会议总是在 `#sig-docs` 上发出公告。
+ 你可以在会议公告后 24 小时内为其中任一议题做贡献。
## 其他贡献方式 {#other-ways-to-contribute}
-- 访问 [Kubernetes 社区网站](/zh/community/)。 参与 Twitter 或 Stack Overflow, 了解 Kubernetes 当地的聚会和活动, 等等。
-- 阅读[贡献者备忘单](https://github.com/kubernetes/community/tree/master/contributors/guide/contributor-cheatsheet),参与 Kubernetes 功能开发。
+- 访问 [Kubernetes 社区网站](/zh/community/)。
+ 参与 Twitter 或 Stack Overflow,了解当地的 Kubernetes 会议和活动等等。
+- 阅读[贡献者备忘单](https://github.com/kubernetes/community/tree/master/contributors/guide/contributor-cheatsheet),
+ 参与 Kubernetes 功能开发。
+- 访问贡献者网站,进一步了解有关 [Kubernetes 贡献者](https://www.kubernetes.dev/)
+ 和[更多贡献者资源](https://www.kubernetes.dev/resources/)的信息。
- 提交一篇[博客文章或案例研究](/zh/docs/contribute/new-content/blogs-case-studies/)。
diff --git a/content/zh/docs/contribute/advanced.md b/content/zh/docs/contribute/advanced.md
index 5fe6df4098..3387a4c0be 100644
--- a/content/zh/docs/contribute/advanced.md
+++ b/content/zh/docs/contribute/advanced.md
@@ -1,5 +1,5 @@
---
-title: 高级贡献
+title: 进阶贡献
slug: advanced
content_type: concept
weight: 98
@@ -23,7 +23,7 @@ client and other tools for some of these tasks.
如果你已经了解如何[贡献新内容](/zh/docs/contribute/new-content/overview/)和
[评阅他人工作](/zh/docs/contribute/review/reviewing-prs/),并准备了解更多贡献的途径,
-请阅读此文。您需要使用 Git 命令行工具和其他工具做这些工作。
+请阅读此文。你需要使用 Git 命令行工具和其他工具做这些工作。
diff --git a/content/zh/docs/contribute/generate-ref-docs/contribute-upstream.md b/content/zh/docs/contribute/generate-ref-docs/contribute-upstream.md
index d16879d7e7..a702b3243a 100644
--- a/content/zh/docs/contribute/generate-ref-docs/contribute-upstream.md
+++ b/content/zh/docs/contribute/generate-ref-docs/contribute-upstream.md
@@ -27,7 +27,7 @@ API or the `kube-*` components from the upstream code, see the following instruc
- [Generating Reference Documentation for the Kubernetes API](/docs/contribute/generate-ref-docs/kubernetes-api/)
- [Generating Reference Documentation for the Kubernetes Components and Tools](/docs/contribute/generate-ref-docs/kubernetes-components/)
-->
-如果您仅想从上游代码重新生成 Kubernetes API 或 `kube-*` 组件的参考文档。请参考以下说明:
+如果你仅想从上游代码重新生成 Kubernetes API 或 `kube-*` 组件的参考文档。请参考以下说明:
- [生成 Kubernetes API 的参考文档](/zh/docs/contribute/generate-ref-docs/kubernetes-api/)
- [生成 Kubernetes 组件和工具的参考文档](/zh/docs/contribute/generate-ref-docs/kubernetes-components/)
@@ -40,6 +40,8 @@ You need to have these tools installed:
- [Golang](https://golang.org/doc/install) version 1.13+
- [Docker](https://docs.docker.com/engine/installation/)
- [etcd](https://github.com/coreos/etcd/)
+ - [make](https://www.gnu.org/software/make/)
+ - [gcc compiler/linker](https://gcc.gnu.org/)
-->
- 你需要安装以下工具:
@@ -47,6 +49,8 @@ You need to have these tools installed:
- [Golang](https://golang.org/doc/install) 的 1.13 版本或更高
- [Docker](https://docs.docker.com/engine/installation/)
- [etcd](https://github.com/coreos/etcd/)
+ - [make](https://www.gnu.org/software/make/)
+ - [gcc compiler/linker](https://gcc.gnu.org/)
-- 您需要知道如何创建对 GitHub 代码仓库的拉取请求(Pull Request)。
+- 你需要知道如何创建对 GitHub 代码仓库的拉取请求(Pull Request)。
通常,这涉及创建代码仓库的派生副本。
要获取更多的信息请参考[创建 PR](https://help.github.com/articles/creating-a-pull-request/) 和
[GitHub 标准派生和 PR 工作流程](https://gist.github.com/Chaser324/ce0505fbed06b947d962)。
@@ -83,7 +87,7 @@ creating a patch to fix it in the upstream project.
Kubernetes API 和 `kube-*` 组件(例如 `kube-apiserver`、`kube-controller-manager`)的参考文档
是根据[上游 Kubernetes](https://github.com/kubernetes/kubernetes/) 中的源代码自动生成的。
-当您在生成的文档中看到错误时,您可能需要考虑创建一个 PR 用来在上游项目中对其进行修复。
+当你在生成的文档中看到错误时,你可能需要考虑创建一个 PR 用来在上游项目中对其进行修复。
## 克隆 Kubernetes 代码仓库
-如果您还没有 kubernetes/kubernetes 代码仓库,请参照下列命令获取:
+如果你还没有 kubernetes/kubernetes 代码仓库,请参照下列命令获取:
```shell
mkdir $GOPATH/src
@@ -107,7 +111,7 @@ 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 ``.
-->
-确定您的 [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) 代码仓库克隆的根目录。
+确定你的 [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) 代码仓库克隆的根目录。
例如,如果按照前面的步骤获取代码仓库,则你的根目录为 `$GOPATH/src/github.com/kubernetes/kubernetes`。
接下来其余步骤将你的根目录称为 ``。
@@ -118,7 +122,7 @@ For example, if you followed the preceding step to get the repository, your
base directory is `$GOPATH/src/github.com/kubernetes-sigs/reference-docs.`
The remaining steps refer to your base directory as ``.
-->
-确定您的 [kubernetes-sigs/reference-docs](https://github.com/kubernetes-sigs/reference-docs)
+确定你的 [kubernetes-sigs/reference-docs](https://github.com/kubernetes-sigs/reference-docs)
代码仓库克隆的根目录。
例如,如果按照前面的步骤获取代码仓库,则你的根目录为
`$GOPATH/src/github.com/kubernetes-sigs/reference-docs`。
@@ -142,7 +146,7 @@ The documentation for the `kube-*` components is also generated from the upstrea
source code. You must change the code related to the component
you want to fix in order to fix the generated documentation.
-->
-`kube-*` 组件的文档也是从上游源代码生成的。您必须更改与要修复的组件相关的代码,才能修复生成的文档。
+`kube-*` 组件的文档也是从上游源代码生成的。你必须更改与要修复的组件相关的代码,才能修复生成的文档。
以下在 Kubernetes 源代码中编辑注释的示例。
-在您本地的 kubernetes/kubernetes 代码仓库中,检出默认分支,并确保它是最新的:
+在你本地的 kubernetes/kubernetes 代码仓库中,检出默认分支,并确保它是最新的:
```shell
cd
@@ -196,7 +200,7 @@ git status
The output shows that you are on the master branch, and that the `types.go`
source file has been modified:
-->
-输出显示您在 master 分支上,`types.go` 源文件已被修改:
+输出显示你在 master 分支上,`types.go` 源文件已被修改:
```shell
On branch master
@@ -213,7 +217,7 @@ you will do a second commit. It is important to keep your changes separated into
### 提交已编辑的文件
运行 `git add` 和 `git commit` 命令提交到目前为止所做的更改。
-在下一步中,您将进行第二次提交,将更改分成两个提交很重要。
+在下一步中,你将进行第二次提交,将更改分成两个提交很重要。
查看 `api/openapi-spec/swagger.json` 的内容,以确保拼写错误已经被修正。
-例如,您可以运行 `git diff -a api/openapi-spec/swagger.json` 命令。
+例如,你可以运行 `git diff -a api/openapi-spec/swagger.json` 命令。
这很重要,因为 `swagger.json` 是文档生成过程中第二阶段的输入。
-运行 `git add` 和 `git commit` 命令来提交您的更改。现在您有两个提交(commits):
+运行 `git add` 和 `git commit` 命令来提交你的更改。现在你有两个提交(commits):
一种包含编辑的 `types.go` 文件,另一种包含生成的 OpenAPI 规范和相关文件。
-将这两个提交分开独立。也就是说,不要 squash 您的提交。
+将这两个提交分开独立。也就是说,不要 squash 你的提交。
-将您的更改作为 [PR](https://help.github.com/articles/creating-a-pull-request/)
+将你的更改作为 [PR](https://help.github.com/articles/creating-a-pull-request/)
提交到 [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) 代码仓库的 master 分支。
-关注您的 PR,并根据需要回复 reviewer 的评论。继续关注您的 PR,直到 PR 被合并为止。
+关注你的 PR,并根据需要回复 reviewer 的评论。继续关注你的 PR,直到 PR 被合并为止。
{{< note >}}
确定要更改的正确源文件可能很棘手。在前面的示例中,官方的源文件位于 `kubernetes/kubernetes`
-代码仓库的 `staging` 目录中。但是根据您的情况,`staging` 目录可能不是找到官方源文件的地方。
+代码仓库的 `staging` 目录中。但是根据你的情况,`staging` 目录可能不是找到官方源文件的地方。
如果需要帮助,请阅读
[kubernetes/kubernetes](https://github.com/kubernetes/kubernetes/tree/master/staging)
代码仓库和相关代码仓库
@@ -325,7 +330,7 @@ commit into the release-{{< skew prevMinorVersion >}} branch. The idea is to che
that edited `types.go`, but not the commit that has the results of running the scripts. For instructions, see
[Propose a Cherry Pick](https://git.k8s.io/community/contributors/devel/sig-release/cherry-picks.md).
-->
-回想一下,您的 PR 有两个提交:一个用于编辑 `types.go`,一个用于由脚本生成的文件。
+回想一下,你的 PR 有两个提交:一个用于编辑 `types.go`,一个用于由脚本生成的文件。
下一步是将你的第一次提交 cherrypick 到 release-{{< skew prevMinorVersion >}} 分支。
这样做的原因是仅 cherrypick 编辑了 types.go 的提交,
而不是具有脚本运行结果的提交。
@@ -361,7 +366,7 @@ Now add a commit to your cherry-pick pull request that has the recently generate
and related files. Monitor your pull request until it gets merged into the
release-{{< skew prevMinorVersion >}} branch.
-->
-现在将提交添加到您的 Cherry-Pick PR 中,该 PR 中包含最新生成的 OpenAPI 规范和相关文件。
+现在将提交添加到你的 Cherry-Pick PR 中,该 PR 中包含最新生成的 OpenAPI 规范和相关文件。
关注你的 PR,直到其合并到 release-{{< skew prevMinorVersion >}} 分支中为止。
-现在,您可以按照
+现在,你可以按照
[生成 Kubernetes API 的参考文档](/zh/docs/contribute/generate-ref-docs/kubernetes-api/)
指南来生成
[已发布的 Kubernetes API 参考文档](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/)。
diff --git a/content/zh/docs/contribute/generate-ref-docs/kubectl.md b/content/zh/docs/contribute/generate-ref-docs/kubectl.md
index cf376a312f..97f539bdf9 100644
--- a/content/zh/docs/contribute/generate-ref-docs/kubectl.md
+++ b/content/zh/docs/contribute/generate-ref-docs/kubectl.md
@@ -72,7 +72,7 @@ go get -u kubernetes-incubator/reference-docs
-如果您还没有获取过 `kubernetes/website` 仓库,现在获取之:
+如果你还没有获取过 `kubernetes/website` 仓库,现在获取之:
```shell
git clone https://github.com//website $GOPATH/src/github.com//website
@@ -242,7 +242,7 @@ For example, update the following variables:
* 设置 `K8S_ROOT` 为 ``。
* 设置 `K8S_WEBROOT` 为 ``。
* 设置 `K8S_RELEASE` 为要构建文档的版本。
- 例如,如果您想为 Kubernetes {{< skew prevMinorVersion >}} 构建文档,
+ 例如,如果你想为 Kubernetes {{< skew prevMinorVersion >}} 构建文档,
请将 `K8S_RELEASE` 设置为 {{< skew prevMinorVersion >}}。
例如:
diff --git a/content/zh/docs/contribute/generate-ref-docs/kubernetes-api.md b/content/zh/docs/contribute/generate-ref-docs/kubernetes-api.md
index 5563e174a0..7ec78b9c17 100644
--- a/content/zh/docs/contribute/generate-ref-docs/kubernetes-api.md
+++ b/content/zh/docs/contribute/generate-ref-docs/kubernetes-api.md
@@ -31,9 +31,9 @@ Kubernetes API 参考文档是从
构建的,
且使用[kubernetes-sigs/reference-docs](https://github.com/kubernetes-sigs/reference-docs) 生成代码。
-如果您在生成的文档中发现错误,则需要[在上游修复](/zh/docs/contribute/generate-ref-docs/contribute-upstream/)。
+如果你在生成的文档中发现错误,则需要[在上游修复](/zh/docs/contribute/generate-ref-docs/contribute-upstream/)。
-如果您只需要从 [OpenAPI](https://github.com/OAI/OpenAPI-Specification) 规范中重新生成参考文档,请继续阅读此页。
+如果你只需要从 [OpenAPI](https://github.com/OAI/OpenAPI-Specification) 规范中重新生成参考文档,请继续阅读此页。
## {{% heading "prerequisites" %}}
@@ -135,7 +135,7 @@ Go to ``, and open the `Makefile` for editing:
* 设置 `K8S_ROOT` 为 ``.
* 设置 `K8S_WEBROOT` 为 ``.
* 设置 `K8S_RELEASE` 为要构建的文档的版本。
- 例如,如果您想为 Kubernetes 1.17.0 构建文档,请将 `K8S_RELEASE` 设置为 1.17.0。
+ 例如,如果你想为 Kubernetes 1.17.0 构建文档,请将 `K8S_RELEASE` 设置为 1.17.0。
基于你所生成的更改[创建 PR](/zh/docs/contribute/new-content/open-a-pr/),
提交到 [kubernetes/website](https://github.com/kubernetes/website) 仓库。
-监视您提交的 PR,并根据需要回复 reviewer 的评论。继续监视您的 PR,直到合并为止。
+监视你提交的 PR,并根据需要回复 reviewer 的评论。继续监视你的 PR,直到合并为止。
## {{% heading "whatsnext" %}}
diff --git a/content/zh/docs/contribute/localization.md b/content/zh/docs/contribute/localization.md
index 5c70568251..47d56e6163 100644
--- a/content/zh/docs/contribute/localization.md
+++ b/content/zh/docs/contribute/localization.md
@@ -7,7 +7,7 @@ card:
weight: 50
title: 翻译文档
---
-
-
此页面描述如何为其他语言的文档提供
[本地化](https://blog.mozilla.org/l10n/2011/12/14/i18n-vs-l10n-whats-the-diff/)版本。
-
-## 为现有的本地化做出贡献
+## 为现有的本地化做出贡献 {#contribute-to-an-existing-localization}
你可以帮助添加或改进现有本地化的内容。在 [Kubernetes Slack](https://slack.k8s.io/) 中,
你能找到每个本地化的频道。还有一个通用的
@@ -44,7 +44,7 @@ You can help add or improve content to an existing localization. In [Kubernetes
你可以在这里打个招呼。
{{< note >}}
-
-### 找到两个字母的语言代码
+### 找到两个字母的语言代码 {#find-your-two-letter-language-code}
首先,有关本地化的两个字母的语言代码,请参考
[ISO 639-1 标准](https://www.loc.gov/standards/iso639-2/php/code_list.php)。
@@ -85,9 +85,12 @@ git clone https://github.com//website
cd website
```
+
网站内容目录包括每种语言的子目录。你想要助力的本地化位于 `content/` 中。
-
-## 开始新的本地化
+## 开始新的本地化 {#start-a-new-localization}
如果你希望将 Kubernetes 文档本地化为一种新语言,你需要执行以下操作。
@@ -137,7 +140,7 @@ it's up to you to translate it and keep existing localized content current.
所有本地化团队都必须能够自我维持。
Kubernetes 网站很乐意托管你的作品,但要由你来翻译它并使现有的本地化内容保持最新。
-
-### 找到社区
+### 找到社区 {#find-community}
让 Kubernetes SIG Docs 知道你有兴趣创建本地化!
加入 [SIG Docs Slack 频道](https://kubernetes.slack.com/messages/sig-docs)
和 [SIG Docs Localizations Slack 频道](https://kubernetes.slack.com/messages/sig-docs-localizations)。
其他本地化团队很乐意帮助你入门并回答你的任何问题。
-
-### 加入到 Kubernetes GitHub 组织
+### 加入到 Kubernetes GitHub 组织 {#join-the-kubernetes-github-organization}
提交本地化 PR 后,你可以成为 Kubernetes GitHub 组织的成员。
团队中的每个人都需要在 `kubernetes/org` 仓库中创建自己的
[组织成员申请](https://github.com/kubernetes/org/issues/new/choose)。
-
### 在 GitHub 中添加你的本地化团队 {#add-your-localization-team-in-github}
@@ -217,24 +221,24 @@ The `@kubernetes/sig-docs-**-reviews` team automates review assignment for new P
`@kubernetes/sig-docs-**-owners` 成员可以批准更改对应本地化目录 `/content/**/` 中内容的 PR,并仅限这类 PR。
-`@kubernetes/sig-docs-**-reviews` 团队被自动分派新 PR 的审阅任务。
+对于每个本地化,`@kubernetes/sig-docs-**-reviews` 团队被自动分派新 PR 的审阅任务。
-
`@kubernetes/website-maintainers` 成员可以创建新的本地化分支来协调翻译工作。
`@kubernetes/website-milestone-maintainers` 成员可以使用 `/milestone`
[Prow 命令](https://prow.k8s.io/command-help)为 issues 或 PR 设定里程碑。
-
-
### 配置工作流程 {#configure-the-workflow}
@@ -246,16 +250,14 @@ For an example of adding a label, see the PR for adding the [Italian language la
你还可以在 `kubernetes/community` 仓库中为你的本地化创建一个 Slack 频道。
有关添加 Slack 频道的示例,请参见[为印尼语和葡萄牙语添加频道](https://github.com/kubernetes/community/pull/3605)的 PR。
-
-## 最低要求内容 {#minimum-required-content}
-
-### 修改站点配置
+### 修改站点配置 {#configure-the-workflow}
Kubernetes 网站使用 Hugo 作为其 Web 框架。网站的 Hugo 配置位于
[`config.toml`](https://github.com/kubernetes/website/tree/main/config.toml)文件中。
@@ -275,7 +277,7 @@ weight = 8
```
`languageName` 的值将列在语言选择栏中。
将 `languageName` 赋值为“本地脚本中的语言名称(拉丁脚本中的语言名称)”。
@@ -284,21 +286,21 @@ The value for `languageName` will be listed in language selection bar. Assign "l
将 `languageNameLatinScript` 赋值为“拉丁脚本中的语言名称”。
例如,`languageNameLatinScript ="Korean"`。
-
为你的语言块分配一个 `weight` 参数时,找到权重最高的语言块并将其加 1。
有关 Hugo 多语言支持的更多信息,请参阅"[多语言模式](https://gohugo.io/content-management/multilingual/)"。
-
-### 添加一个新的本地化目录
+### 添加一个新的本地化目录 {#add-a-new-localization-directory}
将特定语言的子目录添加到仓库中的
[`content`](https://github.com/kubernetes/website/tree/main/content) 文件夹下。
@@ -308,7 +310,7 @@ Add a language-specific subdirectory to the [`content`](https://github.com/kuber
mkdir content/de
```
-
-### 本地化社区行为准则
+### 本地化社区行为准则 {#localize-the-community-code-of-conduct}
在 [`cncf/foundation`](https://github.com/cncf/foundation/tree/master/code-of-conduct-languages)
仓库提交 PR,添加你所用语言版本的行为准则。
-->
-
-### 设置 OWNERS 文件
+### 设置 OWNERS 文件 {#setting-up-the-owners-files}
要设置每个对本地化做出贡献用户的角色,请在特定于语言的子目录内创建一个 `OWNERS` 文件,其中:
@@ -362,10 +364,10 @@ To set the roles of each user contributing to the localization, create an `OWNER
- **labels**: 可以自动应用于 PR 的 GitHub 标签列表,在本例中为
[配置工作流程](#configure-the-workflow)中创建的语言标签。
-
有关 `OWNERS` 文件的更多信息,请访问[go.k8s.io/owners](https://go.k8s.io/owners)。
@@ -386,12 +388,12 @@ approvers:
labels:
- language/es
-```
+```
-
添加了特定语言的 OWNERS 文件之后,使用新的 Kubernetes 本地化团队、
`sig-docs-**-owners` 和 `sig-docs-**-reviews` 列表更新
@@ -421,7 +423,7 @@ For each team, add the list of GitHub users requested in [Add your localization
- remyleone
```
-
-### 添加本地化的 README 文件
+### 添加本地化的 README 文件 {#add-a-localized-readme-file}
为了指导其他本地化贡献者,请在 [k/website](https://github.com/kubernetes/website/)
的根目录添加一个新的 [`README-**.md`](https://help.github.com/articles/about-readmes/),
@@ -461,14 +463,14 @@ Provide guidance to localization contributors in the localized `README-**.md` fi
- 本地化项目的联系人
- 任何特定于本地化的信息
-
创建本地化的 README 文件后,请在英语版文件 `README.md` 中添加指向该文件的链接,
并给出英文形式的联系信息。你可以提供 GitHub ID、电子邮件地址、
[Slack 频道](https://slack.com/)或其他联系方式。你还必须提供指向本地化的社区行为准则的链接。
-
-### 启动你的新本地化
+### 启动你的新本地化 {#add-a-localized-readme-file}
一旦本地化满足工作流程和最小输出的要求,SIG Docs 将:
@@ -484,20 +486,25 @@ Once a localization meets requirements for workflow and minimum output, SIG Docs
- 通过[云原生计算基金会](https://www.cncf.io/about/)(CNCF)渠道,
包括 [Kubernetes 博客](https://kubernetes.io/blog/),来宣传本地化的可用性。
-
## 翻译文档 {#translating-content}
本地化*所有* Kubernetes 文档是一项艰巨的任务。从小做起,循序渐进。
+
+### 最低要求内容 {#minimum-required-content}
+
所有本地化至少必须包括:
-
翻译后的文档必须保存在自己的 `content/**/` 子目录中,否则将遵循与英文源相同的 URL 路径。
例如,要准备将 [Kubernetes 基础](/zh/docs/tutorials/kubernetes-basics/) 教程翻译为德语,
@@ -525,24 +533,24 @@ mkdir -p content/de/docs/tutorials
cp content/en/docs/tutorials/kubernetes-basics.md content/de/docs/tutorials/kubernetes-basics.md
```
-
翻译工具可以加快翻译过程。例如,某些编辑器提供了用于快速翻译文本的插件。
-
{{< caution >}}
-机器生成的翻译不能达到最低质量标准,需要进行大量人工审查才能达到该标准。
+机器生成的翻译本身是不够的,本地化需要广泛的人工审核才能满足最低质量标准。
{{< /caution >}}
-
为了确保语法和含义的准确性,本地化团队的成员应在发布之前仔细检查所有由机器生成的翻译。
-
-### 源文件
+### 源文件 {#source-files}
本地化必须基于本地化团队所针对的特定发行版本中的英文文件。
每个本地化团队可以决定要针对哪个发行版本,在下文中称作目标版本(target version)。)
@@ -580,27 +588,27 @@ The `master` branch holds content for the current release `{{< latest-version >}
发行团队会在下一个发行版本 v{{< skew nextMinorVersion >}} 出现之前创建
`{{< release-branch >}}` 分支。
-
### i18n/ 中的网站字符串 {#site-strings-in-i18n}
本地化必须在新的语言特定文件中包含
-[`data/i18n/en/en.toml`](https://github.com/kubernetes/website/blob/master/i18n/en.toml)
+[`data/i18n/en/en.toml`](https://github.com/kubernetes/website/blob/main/data/i18n/en/en.toml)
的内容。以德语为例:`data/i18n/de/de.toml`。
-将新的本地化文件添加到 `i18n/`。例如德语 (`de`):
+将新的本地化文件和目录添加到 `data/i18n/`。例如德语 (`de`):
```bash
mkdir -p data/i18n/de
cp data/i18n/en/en.toml data/i18n/de/de.toml
```
-
本地化网站字符串允许你自定义网站范围的文本和特性:例如,每个页面页脚中的合法版权文本。
-
-### 特定语言的样式指南和词汇表
+### 特定语言的样式指南和词汇表 {#language-specific-style-guide-and-glossary}
一些语言团队有自己的特定语言样式指南和词汇表。
例如,请参见[中文本地化指南](/zh/docs/contribute/localization_zh/)。
@@ -637,23 +645,23 @@ Per CNCF policy, the localization teams must upload their meetings to the SIG Do
-->
-### 特定语言的 Zoom 会议
+### 特定语言的 Zoom 会议 {#language-specific-zoom-meetings}
-如果本地化项目需要单独的会议时间,
-请联系 SIG Docs 联合主席或技术主管以创建新的重复 Zoom 会议和日历邀请。
+如果本地化项目需要单独的会议时间,
+请联系 SIG Docs 联合主席或技术主管以创建新的重复 Zoom 会议和日历邀请。
仅当团队维持在足够大的规模并需要单独的会议时才需要这样做。
根据 CNCF 政策,本地化团队必须将他们的会议上传到 SIG Docs YouTube 播放列表。
SIG Docs 联合主席或技术主管可以帮助完成该过程,直到 SIG Docs 实现自动化。
-
### 分支策略 {#branching-strategy}
@@ -662,10 +670,10 @@ To collaborate on a localization branch:
在本地化分支上协作需要:
-
2. 个人贡献者基于本地化分支创建新的特性分支
@@ -703,13 +711,13 @@ To collaborate on a localization branch:
4. 批准人会定期发起并批准新的 PR,将本地化分支合并到其源分支。
在批准 PR 之前,请确保先 squash commits。
-
根据需要重复步骤 1-4,直到完成本地化工作。例如,随后的德语本地化分支将是:
`dev-1.12-de.2`、`dev-1.12-de.3`,等等。
-
+-->
在团队每个里程碑的开始时段,创建一个 issue 来比较先前的本地化分支
和当前的本地化分支之间的上游变化很有帮助。
现在有两个脚本用来比较上游的变化。
@@ -751,13 +759,13 @@ While only approvers can open a new localization branch and merge pull requests,
虽然只有批准人才能创建新的本地化分支并合并 PR,任何人都可以
为新的本地化分支提交一个拉取请求(PR)。不需要特殊权限。
-
有关基于派生或直接从仓库开展工作的更多信息,请参见 ["派生和克隆"](#fork-and-clone-the-repo)。
-
diff --git a/content/zh/docs/contribute/localization_zh.md b/content/zh/docs/contribute/localization_zh.md
index c55d03941f..6e497fb006 100644
--- a/content/zh/docs/contribute/localization_zh.md
+++ b/content/zh/docs/contribute/localization_zh.md
@@ -6,7 +6,7 @@ content_type: concept
本节详述文档中文本地化过程中须注意的事项。
-这里列举的内容包含了*中文本地化小组*早期给出的指导性建议和后续实践过程中积累的经验。
+这里列举的内容包含了**中文本地化小组**早期给出的指导性建议和后续实践过程中积累的经验。
在阅读、贡献、评阅中文本地化文档的过程中,如果对本文的指南有任何改进建议,
都请直接提出 PR。我们欢迎任何形式的补充和更正!
@@ -309,7 +309,7 @@ Website 的仓库中 `scripts/linkchecker.py` 是一个工具,可用来检查
甚至将超级链接中的半角井号(`#`)转换为全角,导致链接失效。
{{< /warning >}}
-英文中 "you" 翻译成 "你" 不必是 “您"。
+英文中 "you" 翻译成 "你" 不必是 "您"。
文章内的链接用英文,例如 (#deploying),在对应的标题上后面加上 {#deploying}
@@ -324,14 +324,14 @@ Website 的仓库中 `scripts/linkchecker.py` 是一个工具,可用来检查
列举所有 Pod,查看其创建时间 ... [Yes]
```
-*第一次*使用首字母缩写时,应标注其全称和中文译文。例如:
+**第一次**使用首字母缩写时,应标注其全称和中文译文。例如:
```
你可以创建一个 Pod 干扰预算(Pod Disruption Budget,PDB)来解决这一问题。
所谓 PDB 实际上是 ...
```
-对于某些特定于 Kubernetes 语境的术语,也应在*第一次*出现在页面中时给出其英文原文,
+对于某些特定于 Kubernetes 语境的术语,也应在**第一次**出现在页面中时给出其英文原文,
以便读者对照阅读。例如:
```
diff --git a/content/zh/docs/contribute/new-content/_index.md b/content/zh/docs/contribute/new-content/_index.md
index e498891fa9..d9136f1631 100644
--- a/content/zh/docs/contribute/new-content/_index.md
+++ b/content/zh/docs/contribute/new-content/_index.md
@@ -1,4 +1,200 @@
---
title: 贡献新内容
+content_type: 概念
+main_menu: true
weight: 20
---
+
+
+
+
+
+
+本节包含你在贡献新内容之前需要知晓的信息。
+
+
+
+
+{{< mermaid >}}
+flowchart LR
+ subgraph second[开始之前]
+ direction TB
+ S[ ] -.-
+ A[签署 CNCF CLA] --> B[选择 Git 分支]
+ B --> C[每个 PR 一种语言]
+ C --> F[检查贡献者工具]
+ end
+ subgraph first[基本知识]
+ direction TB
+ T[ ] -.-
+ D[用 markdown 编写文档 并用 Hugo 构建网站] --- E[GitHub 源代码]
+ E --- G['/content/../docs' 文件夹包含 多语言文档]
+ G --- H[评审 Hugo 页面内容 类型和短代码]
+ end
+
+
+ first ----> second
+
+
+classDef grey fill:#dddddd,stroke:#ffffff,stroke-width:px,color:#000000, font-size:15px;
+classDef white fill:#ffffff,stroke:#000,stroke-width:px,color:#000,font-weight:bold
+classDef spacewhite fill:#ffffff,stroke:#fff,stroke-width:0px,color:#000
+class A,B,C,D,E,F,G,H grey
+class S,T spacewhite
+class first,second white
+{{ mermaid >}}
+
+
+
+***插图 - 贡献新内容准备工作***
+
+上图描述了你在提交新内容之前需要知晓的信息。
+详细信息见下文。
+
+
+
+
+## 基本知识
+
+- 使用 Markdown 编写 Kubernetes 文档并使用 [Hugo](https://gohugo.io/) 构建网站。
+- Kubernetes 文档使用 [CommonMark](https://commonmark.org/) 作为 Markdown 的风格。
+- 源代码位于 [GitHub](https://github.com/kubernetes/website) 仓库中。
+ 你可以在 `/content/zh/docs/` 目录下找到 Kubernetes 文档。
+ 某些参考文档是使用位于 `update-imported-docs/` 目录下的脚本自动生成的。
+- [页面内容类型](/zh/docs/contribute/style/page-content-types/)使用 Hugo 描述文档内容的呈现。
+
+
+
+- 你可以使用 [Docsy 短代码](https://www.docsy.dev/docs/adding-content/shortcodes/)
+ 或[定制的 Hugo 短代码](/zh/docs/contribute/style/hugo-shortcodes/)贡献 Kubernetes 文档。
+- 除了标准的 Hugo 短代码外,
+ 我们还在文档中使用一些[定制的 Hugo 短代码](/zh/docs/contribute/style/hugo-shortcodes/)来控制内容的呈现。
+- 文档的源代码有多种语言形式,位于 `/content/` 目录下。
+ 每种语言都有一个自己的目录,用两个字母表示,这两个字母是基于
+ [ISO 639-1 标准](https://www.loc.gov/standards/iso639-2/php/code_list.php)来确定的。
+ 例如,英语文档的源代码位于 `/content/en/docs/` 目录下。
+- 关于为多语言文档做贡献以及如何开始新翻译的详细信息,
+ 可参考[本地化文档](/zh/docs/contribute/localization)。
+
+
+
+## 开始之前 {#before-you-begin}
+
+### 签署 CNCF CLA {#sign-the-cla}
+
+所有 Kubernetes 贡献者**必须**阅读[贡献者指南](https://github.com/kubernetes/community/blob/master/contributors/guide/README.md)
+并[签署贡献者授权同意书 (Contributor License Agreement, CLA)](https://github.com/kubernetes/community/blob/master/CLA.md)。
+
+若贡献者尚未签署 CLA,其发起的 PR 将无法通过自动化测试。
+你所提供的姓名和邮件地址必须与 `git config` 中配置的完全相同,
+而且你的 git 用户名和邮件地址必须与用来签署 CNCF CLA 的信息一致。
+
+
+
+### 选择要使用的 Git 分支
+
+在发起 PR 时,你需要预先知道基于哪个分支来开展工作。
+
+场景 | 分支
+:---------|:------------
+针对当前发行版本的,对现有英文内容的修改或新的英文内容 | `main`
+ 针对功能特性变更的内容 | 分支对应于功能特性变更的主要和次要版本,分支名称采用 `dev-` 的模式。例如,如果某功能特性在 `v{{< skew nextMinorVersion >}}` 版本发生变化,则对应的文档变化要添加到 `dev-{{< skew nextMinorVersion >}}` 分支。
+ 其他语言的内容(本地化) | 基于本地化团队的约定。参见[本地化分支策略](/zh/docs/contribute/localization/#branching-strategy)了解更多信息。
+
+如果你仍不能确定要选择哪个分支,请在 Slack 的 `#sig-docs` 频道上提出问题。
+
+
+
+{{< note >}}
+如果你已经提交了 PR,并且发现所针对的分支选错了,你(且只有作为提交人的你)可以更改分支。
+{{< /note >}}
+
+
+
+### 每个 PR 牵涉的语言
+
+请确保每个 PR 仅涉及一种语言。
+如果你需要对多种语言下的同一代码示例进行相同的修改,也请为每种语言发起一个独立的 PR。
+
+
+
+## 为贡献者提供的工具
+
+`kubernetes/website` 仓库的[文档贡献者工具](https://github.com/kubernetes/website/tree/main/content/zh/docs/doc-contributor-tools)目录中包含了一些工具,
+有助于使你的贡献过程更为顺畅。
diff --git a/content/zh/docs/contribute/new-content/blogs-case-studies.md b/content/zh/docs/contribute/new-content/blogs-case-studies.md
index 71ebf83930..dbd1b89c16 100644
--- a/content/zh/docs/contribute/new-content/blogs-case-studies.md
+++ b/content/zh/docs/contribute/new-content/blogs-case-studies.md
@@ -34,14 +34,78 @@ Anyone can write a blog post and submit it for review.
-->
## Kubernetes 博客
-Kubernetes 博客用于项目发布新功能特性、社区报告以及其他一些可能对整个社区
-很重要的新闻。
+Kubernetes 博客用于项目发布新功能特性、
+社区报告以及其他一些可能对整个社区很重要的新闻。
其读者包括最终用户和开发人员。
-大多数博客的内容是关于核心项目中正在发生的事情,不过我们也鼓励你提交一些
-关于生态系统中其他地方发生的事情的博客。
+大多数博客的内容是关于核心项目中正在发生的事情,
+不过我们也鼓励你提交一些有关生态系统中其他时事的博客。
任何人都可以撰写博客并提交评阅。
+
+### 提交博文
+
+博文不应该是商业性质的,应该包含广泛适用于 Kubernetes 社区的原创内容。
+合适的博客内容包括:
+
+- Kubernetes 新能力
+- Kubernetes 项目更新信息
+- 来自特别兴趣小组(Special Interest Groups, SIG)的更新信息
+- 教程和演练
+- 有关 Kubernetes 的纲领性理念
+- Kubernetes 合作伙伴 OSS 集成信息
+- **仅限原创内容**
+
+
+
+不合适的博客内容包括:
+
+- 供应商产品推介
+- 不含集成信息和客户故事的合作伙伴更新信息
+- 已发表的博文(可刊登博文译稿)
+
+
+要提交博文,你可以遵从以下步骤:
+
+1. 如果你还未签署 CLA,请先[签署 CLA](https://kubernetes.io/docs/contribute/start/#sign-the-cla)。
+2. 查阅[网站仓库](https://github.com/kubernetes/website/tree/master/content/en/blog/_posts)中现有博文的 Markdown 格式。
+3. 在你所选的文本编辑器中撰写你的博文。
+4. 在第 2 步的同一链接上,点击 **Create new file** 按钮。
+ 将你的内容粘贴到编辑器中。为文件命名,使其与提议的博文标题一致,
+ 但不要在文件名中写日期。
+ 博客评阅者将与你一起确定最终的文件名和发表博客的日期。
+5. 保存文件时,GitHub 将引导你完成 PR 流程。
+6. 博客评阅者将评阅你提交的内容,并与你一起处理反馈和最终细节。
+ 当博文被批准后,博客将排期发表。
+
- 博客内容应该对 Kubernetes 用户有用。
- 与参与 Kubernetes SIGs 活动相关,或者与这类活动的结果相关的主题通常是切题的。
@@ -98,6 +163,7 @@ Kubernetes 博客用于项目发布新功能特性、社区报告以及其他一
- 很多 CNCF 项目有自己的博客。这些博客通常是更好的选择。
有些时候,某个 CNCF 项目的主要功能特性或者里程碑的变化可能是用户有兴趣在
Kubernetes 博客上阅读的内容。
+ - 关于为 Kubernetes 项目做贡献的博客内容应该放在 [Kubernetes 贡献者站点](https://kubernetes.dev)上。
### 提交博客的技术考虑
-所提交的内容应该是 Markdown 格式的,以便能够被[Hugo](https://gohugo.io/) 生成器来处理。
+所提交的内容应该是 Markdown 格式的,以便能够被 [Hugo](https://gohugo.io/) 生成器来处理。
关于如何使用相关技术,有[很多可用的资源](https://gohugo.io/documentation/)。
我们知道这一需求可能给那些对此过程不熟悉的朋友们带来不便,
@@ -141,7 +207,6 @@ To submit a blog post follow these directions:
SIG Docs [博客子项目](https://github.com/kubernetes/community/tree/master/sig-docs/blog-subproject) 负责管理博客的评阅过程。
更多信息可参考[提交博文](https://github.com/kubernetes/community/tree/master/sig-docs/blog-subproject#submit-a-post)。
-
要提交博文,你可以遵从以下指南:
-- [发起一个包含博文的 PR](/zh/docs/contribute/new-content/open-a-pr/#fork-the-repo)。
+- [发起一个包含新博文的 PR](/zh/docs/contribute/new-content/open-a-pr/#fork-the-repo)。
新博文要创建于 [`content/en/blog/_posts`](https://github.com/kubernetes/website/tree/main/content/en/blog/_posts) 目录下。
- 确保你的博文遵从合适的命名规范,并带有下面的引言(元数据)信息:
@@ -198,6 +263,30 @@ SIG Docs [博客子项目](https://github.com/kubernetes/community/tree/master/s
- 博客团队会对 PR 内容进行评阅,为你提供一些评语以便修订。
之后,机器人会将你的博文合并并发表。
+
+
+ - 如果博文的内容仅包含预期无需更新就能对读者保持精准的内容,
+ 则可以将这篇博文标记为长期有效(evergreen),
+ 且免除添加博文发表一年后内容过期的自动警告。
+ - 要将一篇博文标记为长期有效,请在引言部分添加以下标记:
+
+ ```yaml
+ evergreen: true
+ ```
+ - 不应标记为长期有效的内容示例:
+ - 仅适用于特定发行版或版本而不是所有未来版本的**教程**
+ - 对非正式发行(Pre-GA)API 或功能特性的引用
+
{{< note >}}
-**代码开发者们**:如果你在为下一个 Kubernetes 发行版本中的某功能特性
-撰写文档,请参考[为新功能撰写文档](/zh/docs/contribute/new-content/new-features/)。
+**代码开发者们**:如果你在为下一个 Kubernetes 发行版本中的某功能特性撰写文档,
+请参考[为发行版本撰写功能特性文档](/zh/docs/contribute/new-content/new-features/)。
{{< /note >}}
要贡献新的内容页面或者改进已有内容页面,请发起拉取请求(PR)。
-请确保你满足了[开始之前](/zh/docs/contribute/new-content/overview/#before-you-begin)
-节中所列举的所有要求。
+请确保你满足了[开始之前](/zh/docs/contribute/new-content/#before-you-begin)一节中所列举的所有要求。
-
+## 使用 GitHub 提交变更 {#changes-using-github}
+如果你在 git 工作流方面欠缺经验,这里有一种发起拉取请求的更为简单的方法。
+下图勾勒了后续的步骤和细节。
+
+
+
+
+{{< mermaid >}}
+flowchart LR
+A([fa:fa-user 新的 贡献者]) --- id1[(K8s/Website GitHub)]
+subgraph tasks[使用 GitHub 提交变更]
+direction TB
+ 0[ ] -.-
+ 1[1. 编辑此页] --> 2[2. 使用 GitHub markdown 编辑器进行修改]
+ 2 --> 3[3. 填写 Propose file change]
+
+end
+subgraph tasks2[ ]
+direction TB
+4[4. 选择 Propose file change] --> 5[5. 选择 Create pull request] --> 6[6. 填写 Open a pull request]
+6 --> 7[7. 选择 Create pull request]
+end
+
+id1 --> tasks --> tasks2
+
+classDef grey fill:#dddddd,stroke:#ffffff,stroke-width:px,color:#000000, font-size:15px;
+classDef white fill:#ffffff,stroke:#000,stroke-width:px,color:#000,font-weight:bold
+classDef k8s fill:#326ce5,stroke:#fff,stroke-width:1px,color:#fff;
+classDef spacewhite fill:#ffffff,stroke:#fff,stroke-width:0px,color:#000
+class A,1,2,3,4,5,6,7 grey
+class 0 spacewhite
+class tasks,tasks2 white
+class id1 k8s
+{{ mermaid >}}
+
+***插图 - 使用 GitHub 发起一个 PR 的步骤***
+
+
-## 使用 GitHub 提交变更 {#changes-using-github}
-如果你在 git 工作流方面欠缺经验,这里有一种发起拉取请求的更为简单的方法。
-
-1. 在你发现问题的网页,选择右上角的铅笔图标。你也可以滚动到页面底端,选择
- **编辑此页面**。
+1. 在你发现问题的网页,选择右上角的铅笔图标。
+ 你也可以滚动到页面底端,选择**编辑此页**。
2. 在 GitHub 的 Markdown 编辑器中修改内容。
-3. 在编辑器的下方,填写 **建议文件变更** 表单。
+3. 在编辑器的下方,填写 **Propose file change** 表单。
在第一个字段中,为你的提交消息取一个标题。
在第二个字段中,为你的提交写一些描述文字。
-
+
{{< note >}}
- 不要在提交消息中使用 [GitHub 关键词](https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword)
+ 不要在提交消息中使用 [GitHub 关键词](https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword)。
你可以在后续的 PR 描述中使用这些关键词。
{{< /note >}}
-4. 选择 **Propose File Change**.
-5. 选择 **Create pull request**.
-6. 在 **Open a pull request** 屏幕上填写表单:
+4. 选择 **Propose File Change**。
+5. 选择 **Create pull request**。
+6. 出现 **Open a pull request** 界面。填写表单:
- **Subject** 字段默认为提交的概要信息。你可以根据需要修改它。
- - **Body** 字段包含更为详细的提交消息,如果你之前有填写过的话,以及一些模板文字。
- 填写模板所要求的详细信息,之后删除多余的模板文字。
+ - **Body** 字段包含更为详细的提交消息,如果你之前有填写过的话,
+ 以及一些模板文字。填写模板所要求的详细信息,
+ 之后删除多余的模板文字。
- 确保 **Allow edits from maintainers** 复选框被勾选。
{{< note >}}
PR 描述信息是帮助 PR 评阅人了解你所提议的变更的重要途径。
- 更多信息请参考[发起一个 PR](#open-a-pr).
+ 更多信息请参考[发起一个 PR](#open-a-pr)。
{{< /note >}}
-7. 选择 **Create pull request**.
+7. 选择 **Create pull request**。
## 基于本地克隆副本开展工作 {#work-from-a-local-fork}
@@ -168,6 +211,42 @@ Make sure you have [git](https://git-scm.com/book/en/v2/Getting-Started-Installi
首先要确保你在本地计算机上安装了 [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。
你也可以使用 git 的带用户界面的应用。
+下图显示了基于本地克隆副本开展工作的步骤。
+每个步骤的细节如下。
+
+
+
+
+{{< mermaid >}}
+flowchart LR
+1[派生 K8s/website 仓库] --> 2[创建本地克隆副本 并指定 upstream 仓库]
+subgraph changes[你的变更]
+direction TB
+S[ ] -.-
+3[创建一个分支 例如: my_new_branch] --> 3a[使用文本编辑器 进行修改] --> 4["使用 Hugo 在本地 预览你的变更 (localhost:1313) 或构建容器镜像"]
+end
+subgraph changes2[提交 / 推送]
+direction TB
+T[ ] -.-
+5[提交你的变更] --> 6[将提交推送到 origin/my_new_branch]
+end
+
+2 --> changes --> changes2
+
+classDef grey fill:#dddddd,stroke:#ffffff,stroke-width:px,color:#000000, font-size:15px;
+classDef white fill:#ffffff,stroke:#000,stroke-width:px,color:#000,font-weight:bold
+classDef k8s fill:#326ce5,stroke:#fff,stroke-width:1px,color:#fff;
+classDef spacewhite fill:#ffffff,stroke:#fff,stroke-width:0px,color:#000
+class 1,2,3,3a,4,5,6 grey
+class S,T spacewhite
+class changes,changes2 white
+{{ mermaid >}}
+
+
+***插图 - 使用本地克隆副本进行修改***
+
### 创建一个本地克隆副本并指定 upstream 仓库
-3. 打开终端窗口,克隆你所派生的副本:
+3. 打开终端窗口,克隆你所派生的副本,并更新 [Docsy Hugo 主题](https://github.com/google/docsy#readme):
```bash
git clone git@github.com//website
+ cd website
+ git submodule update --init --recursive --depth 1
```
{{< note >}}
此工作流程与 [Kubernetes 社区 GitHub 工作流](https://github.com/kubernetes/community/blob/master/contributors/guide/github-workflow.md)有所不同。
@@ -262,12 +345,12 @@ Make sure you have [git](https://git-scm.com/book/en/v2/Getting-Started-Installi
1. 决定你要基于哪个分支来开展工作:
- - 针对已有内容的改进,请使用 `upstream/main`;
- - 针对已有功能特性的新文档内容,请使用 `upstream/main`;
+ - 针对已有内容的改进,请使用 `upstream/main`。
+ - 针对已有功能特性的新文档内容,请使用 `upstream/main`。
- 对于本地化内容,请基于本地化的约定。
- 可参考[对 Kubernetes 文档进行本地化](/zh/docs/contribute/localization/)了解详细信息。
+ 可参考[本地化 Kubernetes 文档](/zh/docs/contribute/localization/)了解详细信息。
- 对于在下一个 Kubernetes 版本中新功能特性的文档,使用独立的功能特性分支。
- 参考[为发行版本功能特性撰写文档](/zh/docs/contribute/new-content/new-features/)了解更多信息。
+ 参考[为发行版本撰写功能特性文档](/zh/docs/contribute/new-content/new-features/)了解更多信息。
- 对于很多 SIG Docs 共同参与的,需较长时间才完成的任务,例如内容的重构,
请使用为该任务创建的特性分支。
@@ -276,7 +359,7 @@ Make sure you have [git](https://git-scm.com/book/en/v2/Getting-Started-Installi
-2. 基于第一步中选定的分支,创建新分支。
+2. 基于第 1 步中选定的分支,创建新分支。
下面的例子假定基础分支是 `upstream/main`:
```bash
@@ -285,11 +368,13 @@ Make sure you have [git](https://git-scm.com/book/en/v2/Getting-Started-Installi
-3. 使用文本编辑器开始构造变更。
+
+3. 使用文本编辑器进行修改。
+
在任何时候,都可以使用 `git status` 命令查看你所改变了的文件列表。
### 在本地预览你的变更 {#preview-locally}
-在推送变更或者发起 PR 之前在本地查看一下预览是个不错的注意。
+在推送变更或者发起 PR 之前在本地查看一下预览是个不错的主意。
通过预览你可以发现构建错误或者 Markdown 格式问题。
-你可以构造网站的容器镜像或者在本地运行 Hugo。
-构造容器镜像的方式比较慢,不过能够显示 [Hugo 短代码(shortcodes)](/zh/docs/contribute/style/hugo-shortcodes/),
+你可以构建网站的容器镜像或者在本地运行 Hugo。
+构建容器镜像的方式比较慢,不过能够显示 [Hugo 短代码(shortcodes)](/zh/docs/contribute/style/hugo-shortcodes/),
因此对于调试是很有用的。
{{< tabs name="tab_with_hugo" >}}
{{% tab name="在容器内执行 Hugo" %}}
{{< note >}}
下面的命令中使用 Docker 作为默认的容器引擎。
-如果需要重载这一行为,可以设置 `CONTAINER_ENGINE`。
+如果需要重载这一行为,可以设置 `CONTAINER_ENGINE` 环境变量。
{{< /note >}}
-1. 在本地构造镜像;
+1. 在本地构建镜像:
```bash
# 使用 docker (默认)
@@ -441,7 +527,7 @@ You can set up the `CONTAINER_ENGINE` to override this behavior.
-2. 在本地构造了 `kubernetes-hugo` 镜像之后,可以构造并启动网站:
+2. 在本地构建了 `kubernetes-hugo` 镜像之后,可以构建并启动网站:
```bash
# 使用 docker (默认)
@@ -473,24 +559,37 @@ Alternately, install and use the `hugo` command on your computer:
1. 安装 [`website/netlify.toml`](https://raw.githubusercontent.com/kubernetes/website/main/netlify.toml)
文件中指定的 [Hugo](https://gohugo.io/getting-started/installing/) 版本。
-2. 启动一个终端窗口,进入 Kubernetes 网站仓库目录,启动 Hugo 服务器:
+2. 如果你尚未更新你的网站仓库,则 `website/themes/docsy` 目录是空的。
+ 如果本地缺少主题的副本,则该站点无法构建。
+ 要更新网站主题,运行以下命令:
+
+ ```bash
+ git submodule update --init --recursive --depth 1
+ ```
+
+3. 启动一个终端窗口,进入 Kubernetes 网站仓库目录,启动 Hugo 服务器:
```bash
cd /website
hugo server
```
-3. 在浏览器的地址栏输入: `https://localhost:1313`。
-4. 要停止本地 Hugo 实例,返回到终端窗口并输入 `Ctrl+C` 或者关闭终端窗口。
+4. 在浏览器的地址栏输入: `https://localhost:1313`。
+ Hugo 会监测文件的变更并根据需要重新构建网站。
+5. 要停止本地 Hugo 实例,返回到终端窗口并输入 `Ctrl+C` 或者关闭终端窗口。
+
{{% /tab %}}
{{< /tabs >}}
@@ -499,6 +598,42 @@ Alternately, install and use the `hugo` command on your computer:
-->
### 从你的克隆副本向 kubernetes/website 发起拉取请求(PR) {#open-a-pr}
+
+下图显示了从你的克隆副本向 K8s/website 发起 PR 的步骤。
+详细信息如下。
+
+
+
+
+{{< mermaid >}}
+flowchart LR
+subgraph first[ ]
+direction TB
+1[1. 前往 K8s/website 仓库] --> 2[2. 选择 New Pull Request]
+2 --> 3[3. 选择 compare across forks]
+3 --> 4[4. 从 head repository 下拉菜单 选择你的克隆副本]
+end
+subgraph second [ ]
+direction TB
+5[5. 从 compare 下拉菜单 选择你的分支] --> 6[6. 选择 Create Pull Request]
+6 --> 7[7. 为你的 PR 添加一个描述]
+7 --> 8[8. 选择 Create pull request]
+end
+
+first --> second
+
+classDef grey fill:#dddddd,stroke:#ffffff,stroke-width:px,color:#000000, font-size:15px;
+classDef white fill:#ffffff,stroke:#000,stroke-width:px,color:#000,font-weight:bold
+class 1,2,3,4,5,6,7,8 grey
+class first,second white
+{{ mermaid >}}
+
+***插图 - 从你的克隆副本向 K8s/website 发起一个 PR 的步骤***
+
2. 如果有必要,更新你的提交消息;
-3. 使用 `git push origin ` 来推送你的变更,重新出发 Netlify 测试。
+3. 使用 `git push origin ` 来推送你的变更,重新触发 Netlify 测试。
{{< note >}}
如果你使用 `git commit -m` 而不是增补参数,在 PR 最终合并之前你必须
@@ -626,7 +762,7 @@ For more information, see [Git Branching - Basic Branching and Merging](https://
{{< note >}}
要了解更多信息,可参考
[Git 分支管理 - 基本分支和合并](https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging#_basic_merge_conflicts)、
-[高级合并](https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging)、
+[高级合并](https://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging),
或者在 `#sig-docs` Slack 频道寻求帮助。
{{< /note >}}
@@ -730,7 +866,9 @@ If another contributor commits changes to the same file in another PR, it can cr
### 压缩(Squashing)提交 {#squashing-commits}
{{< note >}}
要了解更多信息,可参看
@@ -793,7 +931,9 @@ If your PR has multiple commits, you must squash them into a single commit befor
就重设基线操作本身,我们关注 `squash` 和 `pick` 选项。
{{< note >}}
进一步的详细信息可参考 [Interactive Mode](https://git-scm.com/docs/git-rebase#_interactive_mode)。
@@ -866,12 +1006,14 @@ Most repositories use issue and PR templates. Have a look through some open
issues and PRs to get a feel for that team's processes. Make sure to fill out
the templates with as much detail as possible when you file issues or PRs.
-->
-每个仓库有其自己的流程和过程。在登记 Issue 或者发起 PR 之前,记得阅读仓库的
-`README.md`、`CONTRIBUTING.md` 和 `code-of-conduct.md` 文件,如果有的话。
+每个仓库有其自己的流程和过程。在登记 Issue 或者发起 PR 之前,
+记得阅读仓库可能存在的 `README.md`、`CONTRIBUTING.md` 和
+`code-of-conduct.md` 文件。
-大多数仓库都有自己的 Issue 和 PR 模版。通过查看一些待解决的 Issues 和
-PR,也可以添加对它们的链接。你可以多少了解该团队的流程。
-在登记 Issue 或提出 PR 时,务必尽量填充所给的模版,多提供详细信息。
+大多数仓库都有自己的 Issue 和 PR 模板。
+通过查看一些待解决的 Issue 和 PR,
+你可以大致了解协作的流程。
+在登记 Issue 或提出 PR 时,务必尽量填充所给的模板,多提供详细信息。
## {{% heading "whatsnext" %}}
diff --git a/content/zh/docs/contribute/new-content/overview.md b/content/zh/docs/contribute/new-content/overview.md
deleted file mode 100644
index 76dd64c211..0000000000
--- a/content/zh/docs/contribute/new-content/overview.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-title: 贡献新内容概述
-linktitle: 概述
-content_type: concept
-main_menu: true
-weight: 5
----
-
-
-
-
-本节包含贡献新内容之前你需要知晓的一些信息。
-
-
-
-
-## 基本知识
-
-- 使用 Markdown 来编写 Kubernetes 文档并使用 [Hugo](https://gohugo.io/) 来构建网站
-- 源代码位于 [GitHub](https://github.com/kubernetes/website) 仓库中。
- 你可以在 `/content/en/docs/` 目录下找到 Kubernetes 文档。
- 某些参考文档是使用位于 `update-imported-docs/` 目录下的脚本自动生成的。
-- [页面内容类型](/zh/docs/contribute/style/page-content-types/)使用 Hugo 描述文档内容的表现。
-- 除了基本的 Hugo 短代码(shortcodes)外,我们还在文档中使用一些
- [定制的 Hugo 短代码](/zh/docs/contribute/style/hugo-shortcodes/)以控制内容的表现。
-- 文档的源代码有多种语言形式,位于`/content/` 目录下。
- 每种语言都有自己的由两个字母代表的目录,这两个字母是基于
- [ISO 639-1 标准](https://www.loc.gov/standards/iso639-2/php/code_list.php)来确定的。
- 例如,英语文档源码位于`/content/en/docs/` 目录下。
-- 关于在多种语言中为文档做贡献的详细信息,以及如何启动一种新的语言翻译,
- 可参考[本地化](/zh/docs/contribute/localization)文档。
-
-
-## 开始之前 {#before-you-begin}
-
-### 签署 CNCF CLA {#sign-the-cla}
-
-所有 Kubernetes 贡献者 **必须** 阅读
-[贡献者指南](https://github.com/kubernetes/community/blob/master/contributors/guide/README.md)
-并[签署贡献者授权同意书(Contributor License Agreement,CLA)](https://github.com/kubernetes/community/blob/master/CLA.md)。
-
-来自尚未签署 CLA 的贡献者的 PR 无法通过自动化服务的测试。
-你所提供的姓名和邮件地址必须与 `git config` 中所找到的完全相同,
-而且你的 git 用户名和邮件地址必须与用来签署 CNCF CLA 的一致。
-
-
-### 选择要使用的分支
-
-在发起拉取请求时,你需要预先知道要基于哪个分支来开展工作。
-
-场景 | 分支
-:---------|:------------
-针对当前发行版本的,对现有英文内容的修改或新的英文内容 | `main`
-针对功能特性变更的内容 | 功能特性所对应的版本所对应的分支,分支名字模式为 `dev-`。例如,如果某功能特性在 `v{{< skew nextMinorVersion >}}` 版本发生变化,则对应的文档变化要添加到 ``dev-{{< skew nextMinorVersion >}}`` 分支。
-其他语言的内容(本地化)| 基于本地化团队的约定。参见[本地化分支策略](/zh/docs/contribute/localization/#branching-strategy)了解更多信息。
-
-如果你仍不能确定要选择哪个分支,请在 `#sig-docs` Slack 频道上提问。
-
-
-{{< note >}}
-如果你已经提交了你的 PR,并且你发现所针对的分支选错了,你(且只能是你)可以重新选择分支。
-{{< /note >}}
-
-
-### 每个 PR 牵涉的语言
-
-请限制每个 PR 仅涉及一种语言。
-如果你需要对多种语言下的同一代码示例进行相同的修改,也请为每种语言发起一个独立的 PR。
-
-
-
-## 为贡献者提供的工具
-
-`kubernetes/website` 仓库的
-[文档贡献者工具](https://github.com/kubernetes/website/tree/main/content/en/docs/doc-contributor-tools)
-目录中包含了一些工具,能够助你的贡献过程更为顺畅。
-
diff --git a/content/zh/docs/contribute/participate/pr-wranglers.md b/content/zh/docs/contribute/participate/pr-wranglers.md
index bf08aa770a..20230e4d3b 100644
--- a/content/zh/docs/contribute/participate/pr-wranglers.md
+++ b/content/zh/docs/contribute/participate/pr-wranglers.md
@@ -11,15 +11,15 @@ weight: 20
-SIG Docs 的[批准人(Approvers)](/zh/docs/contribute/participate/roles-and-responsibilites/#approvers)们每周轮流负责
-[管理仓库的 PRs](https://github.com/kubernetes/website/wiki/PR-Wranglers)。
+SIG Docs 的[批准人(Approvers)](/zh/docs/contribute/participate/roles-and-responsibilities/#approvers)们每周轮流负责
+[管理仓库的 PR](https://github.com/kubernetes/website/wiki/PR-Wranglers)。
-本节介绍 PR 管理者的职责。关于如何提供较好的评审意见,可参阅
-[评审变更](/zh/docs/contribute/review/).
+本节介绍 PR 管理者的职责。关于如何提供较好的评审意见,
+可参阅[评审变更](/zh/docs/contribute/review/)。
@@ -31,16 +31,6 @@ Each day in a week-long shift as PR Wrangler:
- Triage and tag incoming issues daily. See [Triage and categorize issues](/docs/contribute/review/for-approvers/#triage-and-categorize-issues) for guidelines on how SIG Docs uses metadata.
- Review [open pull requests](https://github.com/kubernetes/website/pulls) for quality and adherence to the [Style](/docs/contribute/style/style-guide/) and [Content](/docs/contribute/style/content-guide/) guides.
- Start with the smallest PRs (`size/XS`) first, and end with the largest (`size/XXL`). Review as many PRs as you can.
-- Make sure PR 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 remind contributors that haven’t signed the CLA to do so.
-- Provide feedback on changes and ask for 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.
- - Assign relevant `sig/` label(s).
- - If needed, assign reviewers from the `reviewers:` block in the file's front matter.
-- Use the `/approve` comment to approve a PR for merging. Merge the PR when ready.
- - PRs should have a `/lgtm` comment from another member before merging.
- - Consider accepting technically accurate content that doesn't meet the [style guidelines](/docs/contribute/style/style-guide/). Open a new issue with the label `good first issue` to address style concerns.
-->
## 职责 {#duties}
在为期一周的轮值期内,PR 管理者要:
@@ -54,19 +44,44 @@ Each day in a week-long shift as PR Wrangler:
- 首先查看最小的 PR(`size/XS`),然后逐渐扩展到最大的
PR(`size/XXL`),尽可能多地评审 PR。
+
- 确保贡献者完成 [CLA](https://github.com/kubernetes/community/blob/master/CLA.md) 签署。
- 使用[此脚本](https://github.com/zparnold/k8s-docs-pr-botherer)自动提醒尚未签署
CLA 的贡献者签署 CLA。
- 针对提供提供反馈,请求其他 SIG 的成员进行技术审核。
- 为 PR 所建议的内容更改提供就地反馈。
- - 如果您需要验证内容,请在 PR 上发表评论并要求贡献者提供更多细节。
+ - 如果你需要验证内容,请在 PR 上发表评论并要求贡献者提供更多细节。
- 设置相关的 `sig/` 标签。
- - 如果需要,从文件开头的 `reviewers:` 块中指派评阅人。
+ - 如果需要,根据文件开头的 `reviewers:` 块来指派评审人。
+ - 你也可以通过在 PR 上作出 `@kubernetes/-pr-reviews` 的评论以标记需要某个
+ [SIG](https://github.com/kubernetes/community/blob/master/sig-list.md) 来评审。
+
- 使用 `/approve` 评论来批准可以合并的 PR,在 PR 就绪时将其合并。
- PR 在被合并之前,应该有来自其他成员的 `/lgtm` 评论。
- 可以考虑接受那些技术上准确,但文风上不满足
[风格指南](/zh/docs/contribute/style/style-guide/)要求的 PR。
- 可以登记一个新的 Issue 来解决文档风格问题,并将其标记为 `good first issue`。
+ 批准变更时,可以登记一个新的 Issue 来解决文档风格问题。
+ 你通常可以将这些风格修复问题标记为 `good first issue`。
+ - 将风格修复事项标记为 `good first issue` 可以很好地确保向新加入的贡献者分派一些比较简单的任务,
+ 这有助于接纳新的贡献者。
-### 对于管理人有用的 GitHub 查询
+### 对管理者有用的 GitHub 查询
执行管理操作时,以下查询很有用。完成以下这些查询后,剩余的要审阅的 PR 列表通常很小。
这些查询都不包含本地化的 PR,并仅包含主分支上的 PR(除了最后一个查询)。
@@ -172,3 +187,38 @@ The [`fejta-bot`](https://github.com/fejta-bot) bot marks issues as stale after
PR 管理者应该在 issues 处于无人过问状态 14-30 天后关闭它们。
{{< /note >}}
+
+## PR 管理者影子计划
+
+2021 下半年,SIG Docs 推出了 PR 管理者影子计划(PR Wrangler Shadow Program)。
+该计划旨在帮助新的贡献者们了解 PR 管理流程。
+
+
+### 成为一名影子
+
+- 如果你有兴趣成为一名 PR 管理者的影子,请访问 [PR 管理者维基页面](https://github.com/kubernetes/website/wiki/PR-Wranglers)查看今年的
+ PR 管理轮值表,然后注册报名。
+
+- Kubernetes 组织成员可以编辑 [PR 管理者维基页面](https://github.com/kubernetes/website/wiki/PR-Wranglers),
+ 注册成为一名现有 PR 管理者一周内的影子。
+
+- 其他人可以通过 [#sig-docs Slack 频道](https://kubernetes.slack.com/messages/sig-docs)申请成为指定
+ PR 管理者某一周的影子。可以随时咨询 (`@bradtopol`) 或某一位
+ [SIG Docs 联席主席/主管](https://github.com/kubernetes/community/tree/master/sig-docs#leadership)。
+
+- 注册成为一名 PR 管理者的影子时,
+ 请你在 [Kubernetes Slack](https://slack.k8s.io) 向这名 PR 管理者做一次自我介绍。
diff --git a/content/zh/docs/contribute/participate/roles-and-responsibilities.md b/content/zh/docs/contribute/participate/roles-and-responsibilities.md
index 7739af7584..1f77ba8bbc 100644
--- a/content/zh/docs/contribute/participate/roles-and-responsibilities.md
+++ b/content/zh/docs/contribute/participate/roles-and-responsibilities.md
@@ -99,7 +99,7 @@ Members can:
- 使用 `/lgtm` 评论添加 LGTM (looks good to me(我觉得可以)) 标签到某个 PR
{{< note >}}
- 使用 `/lgtm` 会触发自动化机制。如果你希望提供不拘约束力的批准意见,
+ 使用 `/lgtm` 会触发自动化机制。如果你希望提供非约束性的批准意见,
直接回复 "LGTM" 也是可以的。
{{< /note >}}
@@ -146,7 +146,7 @@ After submitting at least 5 substantial pull requests and meeting the other [req
{{< /note >}}
2. 在 [`kubernetes/org`](https://github.com/kubernetes/org/) 仓库
- 使用 **Organization Membership Request** Issue 模版登记一个 Issue。
+ 使用 **Organization Membership Request** Issue 模板登记一个 Issue。
1. 发起 PR,将你的 GitHub 用户名添加到 `kubernetes/website` 仓库中
[OWNERS_ALIASES](https://github.com/kubernetes/website/blob/main/OWNERS_ALIASES)
- 文件的特定节。
+ 文件的对应节区。
{{< note >}}
如果你不确定要添加到哪个位置,可以将自己添加到 `sig-docs-en-reviews`。
@@ -292,7 +292,7 @@ If approved, a SIG Docs lead adds you to the appropriate GitHub team. Once added
2. 将 PR 指派给一个或多个 SIG Docs 批准人(`sig-docs-{language}-owners`
下列举的用户名)。
-请求被批准之后,SIG Docs Leads 之一会将你添加到合适的 GitHub 团队。
+申请被批准之后,SIG Docs Leads 之一会将你添加到合适的 GitHub 团队。
一旦添加完成, [@k8s-ci-robot](https://github.com/kubernetes/test-infra/tree/master/prow#bots-home)
会在处理未来的 PR 时,将 PR 指派给你或者建议你来评审某 PR。
@@ -322,7 +322,7 @@ If the PR already has a `/lgtm`, or if the approver also comments with `/lgtm`,
批准人可以执行以下操作:
- 执行列举在[任何人](#anyone)、[成员](#members)和[评审人](#reviewers)节区的操作
-- 通过使用 `/approve` 评论来批准、合并 PRs,发布贡献者所贡献的内容。
+- 通过使用 `/approve` 评论来批准、合并 PR,发布贡献者所贡献的内容。
- 就样式指南给出改进建议
- 对文档测试给出改进建议
- 对 Kubernetes 网站或其他工具给出改进建议
@@ -356,7 +356,7 @@ Approvers and SIG Docs leads are the only ones who can merge pull requests into
不小心的合并可能会破坏整个站点。在执行合并操作时,务必小心。
{{< /warning >}}
-- 确保所提议的变更满足[贡献指南](/zh/docs/contribute/style/content-guide/#contributing-content)要求
+- 确保所提议的变更满足[贡献指南](/zh/docs/contribute/style/content-guide/#contributing-content)要求。
如果有问题或者疑惑,可以根据需要请他人帮助评审。
@@ -368,7 +368,7 @@ Approvers and SIG Docs leads are the only ones who can merge pull requests into
- 参与 [PR 管理者轮值排班](https://github.com/kubernetes/website/wiki/PR-Wranglers)
执行时长为一周的 PR 管理。SIG Docs 期望所有批准人都参与到此轮值工作中。
- 更多细节可参见[做一周的 PR 管理者](/zh/docs/contribute/participate/pr-wranglers/)。
+ 更多细节可参见 [PR 管理者](/zh/docs/contribute/participate/pr-wranglers/)。
-- 阅读[管理 PR](/zh/docs/contribute/participate/pr-wranglers/),了解所有批准人轮值的一个角色。
+- 阅读 [PR 管理者](/zh/docs/contribute/participate/pr-wranglers/),了解所有批准人轮值的角色。
diff --git a/content/zh/docs/contribute/review/reviewing-prs.md b/content/zh/docs/contribute/review/reviewing-prs.md
index e420fb919a..d8eb48f1d6 100644
--- a/content/zh/docs/contribute/review/reviewing-prs.md
+++ b/content/zh/docs/contribute/review/reviewing-prs.md
@@ -1,5 +1,5 @@
---
-title: 评阅 PRs
+title: 评审 PR
content_type: concept
main_menu: true
weight: 10
@@ -25,14 +25,14 @@ Before reviewing, it's a good idea to:
[style guide](/docs/contribute/style/style-guide/) so you can leave informed comments.
- Understand the different [roles and responsibilities](/docs/contribute/participating/#roles-and-responsibilities) in the Kubernetes documentation community.
-->
-任何人均可评阅文档的拉取请求。访问 Kubernetes 网站仓库的
-[pull requests](https://github.com/kubernetes/website/pulls)
-部分可以查看所有待处理的拉取请求(PRs)。
+任何人均可评审文档的拉取请求。
+访问 Kubernetes 网站仓库的 [pull requests](https://github.com/kubernetes/website/pulls) 部分,
+可以查看所有待处理的拉取请求(PR)。
-评阅文档 PR 是将你自己介绍给 Kubernetes 社区的一种很好的方式。
+评审文档 PR 是将你自己介绍给 Kubernetes 社区的一种很好的方式。
它将有助于你学习代码库并与其他贡献者之间建立相互信任关系。
-在评阅之前,可以考虑:
+在评审之前,可以考虑:
- 阅读[内容指南](/zh/docs/contribute/style/content-guide/)和
[样式指南](/zh/docs/contribute/style/style-guide/)以便给出有价值的评论。
@@ -53,21 +53,62 @@ Before you start a review:
-->
## 准备工作 {#before-you-begin}
-在你开始评阅之前:
+在你开始评审之前:
-- 阅读 [CNCF 行为准则](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)
- 确保你会始终遵从其中约定;
-- 保持有礼貌、体谅他人,怀助人为乐初心;
-- 评论时若给出修改建议,也要兼顾 PR 的积极方面
-- 保持同理心,多考虑他人收到评阅意见时的可能反应
-- 假定大家都是好意的,通过问问题澄清意图
-- 如果你是有经验的贡献者,请考虑和新贡献者一起合作,提高其产出质量
+- 阅读 [CNCF 行为准则](https://github.com/cncf/foundation/blob/master/code-of-conduct.md)。
+ 确保你会始终遵从其中约定。
+- 保持有礼貌、体谅他人,怀助人为乐初心。
+- 评论时若给出修改建议,也要兼顾 PR 的积极方面。
+- 保持同理心,多考虑他人收到评审意见时的可能反应。
+- 假定大家都是好意的,通过问问题澄清意图。
+- 如果你是有经验的贡献者,请考虑和新贡献者一起合作,提高其产出质量。
-
+## 评审过程 {#review-process}
+一般而言,应该使用英语来评审 PR 的内容和样式。
+图 1 概述了评审流程的各个步骤。
+每个步骤的详细信息如下。
+
+
+
+
+{{< mermaid >}}
+flowchart LR
+ subgraph fourth[开始评审]
+ direction TB
+ S[ ] -.-
+ M[添加评论] --> N[评审变更]
+ N --> O[新手应该 选择 Comment]
+ end
+ subgraph third[选择 PR]
+ direction TB
+ T[ ] -.-
+ J[阅读描述 和评论]--> K[通过 Netlify 预览构建 来预览变更]
+ end
+
+ A[查阅待处理的 PR 清单]--> B[通过标签过滤 待处理的 PR]
+ B --> third --> fourth
+
+
+classDef grey fill:#dddddd,stroke:#ffffff,stroke-width:px,color:#000000, font-size:15px;
+classDef white fill:#ffffff,stroke:#000,stroke-width:px,color:#000,font-weight:bold
+classDef spacewhite fill:#ffffff,stroke:#fff,stroke-width:0px,color:#000
+class A,B,J,K,M,N,O grey
+class S,T spacewhite
+class third,fourth white
+{{ mermaid >}}
+
+
+图 1. 评审流程步骤。
+
+
-## 评阅过程 {#review-process}
-
-一般而言,应该使用英语来评阅 PR 的内容和样式。
-
1. 前往 [https://github.com/kubernetes/website/pulls](https://github.com/kubernetes/website/pulls),
- 你会看到所有针对 Kubernetes 网站和文档的待处理 PRs。
+ 你会看到所有针对 Kubernetes 网站和文档的待处理 PR。
-2. 使用以下标签(组合)对待处理 PRs 进行过滤:
+2. 使用以下标签(组合)对待处理 PR 进行过滤:
- - `cncf-cla: yes` (建议):由尚未签署 CLA 的贡献者所发起的 PRs 不可以合并。
+ - `cncf-cla: yes` (建议):由尚未签署 CLA 的贡献者所发起的 PR 不可以合并。
参考[签署 CLA](/zh/docs/contribute/new-content/overview/#sign-the-cla) 以了解更多信息。
- - `language/en` (建议):仅查看英语语言的 PRs。
- - `size/<尺寸>`:过滤特定尺寸(规模)的 PRs。如果你刚入门,可以从较小的 PR 开始。
+ - `language/en` (建议):仅查看英语语言的 PR。
+ - `size/<尺寸>`:过滤特定尺寸(规模)的 PR。
+ 如果你刚入门,可以从较小的 PR 开始。
此外,确保 PR 没有标记为尚未完成(Work in Progress)。
- 包含 `work in progress` 的 PRs 通常还没准备好被评阅。
+ 包含 `work in progress` 的 PR 通常还没准备好被评审。
-
+3. 选定 PR 评审之后,可以通过以下方式理解所作的变更:
+ - 阅读 PR 描述以理解所作变更,并且阅读所有关联的 Issues。
+ - 阅读其他评审人给出的评论。
+ - 点击 **Files changed** Tab 页面,查看被改变的文件和代码行。
+ - 滚动到 **Conversation** Tab 页面下端的 PR 构建检查节区,
+ 预览 Netlify 预览构建中的变更。
+ 以下是一个屏幕截图(这显示了 GitHub 的桌面版外观;
+ 如果你在平板电脑或智能手机设备上进行评审,
+ GitHub 的 Web UI 会略有不同):
+ {{< figure src="/images/docs/github_netlify_deploy_preview.png" alt="GitHub PR 详细信息,包括 Netlify 预览链接" >}}
+ 要打开预览,请点击 **deploy/netlify** 行的 **Details** 链接。
+
+
-3. 选定 PR 评阅之后,可以通过以下方式理解所作的变更:
+4. 前往 **Files changed** Tab 页面,开始你的评审工作。
- - 阅读 PR 描述以理解所作变更,并且阅读所有关联的 Issues
- - 阅读其他评阅人给出的评论
- - 点击 **Files changed** Tab 页面,查看被改变的文件和代码行
- - 滚动到 **Conversation** Tab 页面下端的 PR 构建检查节区,点击
- **deploy/netlify** 行的 **Details** 链接,预览 Netlify
- 预览构建所生成的结果
-
-4. 前往 **Files changed** Tab 页面,开始你的评阅工作
-
- 1. 点击你希望评论的行旁边的 `+` 号
- 2. 填写你对该行的评论,之后或者选择**Add single comment** (如果你只有一条评论)
- 或者 **Start a review** (如果你还有其他评论要添加)
- 3. 评论结束时,点击页面顶部的 **Review changes**。这里你可以添加你的评论结语
- (记得留下一些正能量的评论!)、根据需要批准 PR、请求作者进一步修改等等。
+ 1. 点击你希望评论的行旁边的 `+` 号。
+ 2. 填写你对该行的评论,
+ 之后选择 **Add single comment**(如果你只有一条评论)
+ 或者 **Start a review**(如果你还有其他评论要添加)。
+ 3. 评论结束时,点击页面顶部的 **Review changes**。
+ 这里你可以添加你的评论结语(记得留下一些正能量的评论!)、
+ 根据需要批准 PR、请求作者进一步修改等等。
新手应该选择 **Comment**。
-
+## 评审清单 {#reviewing-checklist}
+评审 PR 时可以从下面的条目入手。
+
+
-## 评阅清单 {#reviewing-checklist}
-
-评阅 PR 时可以从下面的条目入手。
-
### 语言和语法 {#language-and-grammar}
- 是否存在明显的语言或语法错误?对某事的描述有更好的方式?
@@ -177,10 +227,6 @@ When reviewing, use the following as a starting point.
- Does the page appear correctly in the section's side navigation (or at all)?
- Should the page appear on the [Docs Home](/docs/home/) listing?
- Do the changes show up in the Netlify preview? Be particularly vigilant about lists, code blocks, tables, notes and images.
-
-### Other
-
-For small issues with a PR, like typos or whitespace, prefix your comments with `nit:`. This lets the author know the issue is non-critical.
-->
### 网站 {#Website}
@@ -193,10 +239,15 @@ For small issues with a PR, like typos or whitespace, prefix your comments with
- 该页面能否在对应章节的侧面导航中显示?显示得正确么?
- 该页面是否应出现在[网站主页面](/zh/docs/home/)的列表中?
- 变更是否正确出现在 Netlify 预览中了?
- 要对列表、代码段、表格、注释和图像等元素格外留心
+ 要对列表、代码段、表格、注释和图像等元素格外留心。
+
### 其他 {#other}
-对于 PR 中的小问题,例如拼写错误或者空格问题,可以在你的评论前面加上 `nit:`。
+对于 PR 中的小问题,例如拼写错误或者空格问题,
+可以在你的评论前面加上 `nit:`。
这样做可以让作者知道该问题不是一个不得了的大问题。
-
diff --git a/content/zh/docs/contribute/style/content-guide.md b/content/zh/docs/contribute/style/content-guide.md
index 1f787a1b93..91e9d0ee96 100644
--- a/content/zh/docs/contribute/style/content-guide.md
+++ b/content/zh/docs/contribute/style/content-guide.md
@@ -15,19 +15,19 @@ weight: 10
本页包含 Kubernetes 文档的一些指南。
-如果你不清楚哪些事情是可以做的,请加入到
-[Kubernetes Slack](http://slack.k8s.io/) 的 `#sig-docs` 频道提问!
-你可以在 http://slack.k8s.io 注册到 Kubernetes Slack。
+如果你不清楚哪些事情是可以做的,请加入到
+[Kubernetes Slack](https://slack.k8s.io/) 的 `#sig-docs` 频道提问!
+你可以在 https://slack.k8s.io 注册到 Kubernetes Slack。
关于为 Kubernetes 文档创建新内容的更多信息,可参考
[样式指南](/zh/docs/contribute/style/style-guide)。
@@ -42,7 +42,7 @@ Source for the Kubernetes website, including the docs, resides in the
Located in the `kubernetes/website/content//docs` folder, the
majority of Kubernetes documentation is specific to the [Kubernetes
-project](https://github.com/kubernetes/kubernetes).
+project](https://github.com/kubernetes/kubernetes).
## What's allowed
@@ -72,12 +72,12 @@ Kubernetes 网站(包括其文档)源代码位于
### Third party content
Kubernetes documentation includes applied examples of projects in the Kubernetes project—projects that live in the [kubernetes](https://github.com/kubernetes) and
-[kubernetes-sigs](https://github.com/kubernetes-sigs) GitHub organizations.
+[kubernetes-sigs](https://github.com/kubernetes-sigs) GitHub organizations.
-Links to active content in the Kubernetes project are always allowed.
+Links to active content in the Kubernetes project are always allowed.
-Kubernetes requires some third party content to function. Examples include container runtimes (containerd, CRI-O, Docker),
-[networking policy](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) (CNI plugins), [Ingress controllers](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/), and [logging](https://kubernetes.io/docs/concepts/cluster-administration/logging/).
+Kubernetes requires some third party content to function. Examples include container runtimes (containerd, CRI-O, Docker),
+[networking policy](/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) (CNI plugins), [Ingress controllers](/docs/concepts/services-networking/ingress-controllers/), and [logging](/docs/concepts/cluster-administration/logging/).
Docs can link to third-party open source software (OSS) outside the Kubernetes project only if it's necessary for Kubernetes to function.
-->
@@ -94,7 +94,7 @@ Kubernetes 需要某些第三方内容才能正常工作。例如
容器运行时(containerd、CRI-O、Docker),
[联网策略](/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)
(CNI 插件),[Ingress 控制器](/zh/docs/concepts/services-networking/ingress-controllers/)
-以及[日志](https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/)等。
+以及[日志](/zh/docs/concepts/cluster-administration/logging/)等。
只有对应的第三方开源软件(OSS)是运行 Kubernetes 所必需的,才可以在文档中包含
指向这些 Kubernetes 项目之外的软件的链接。
@@ -109,7 +109,8 @@ Dual-sourced content requires double the effort (or more!) to maintain
and grows stale more quickly.
{{< note >}}
-If you're a maintainer for a Kubernetes project and need help hosting your own docs,
+
+If you're a maintainer for a Kubernetes project and need help hosting your own docs,
ask for help in [#sig-docs on Kubernetes Slack](https://kubernetes.slack.com/messages/C1J0BPD2M/).
{{< /note >}}
-->
@@ -128,15 +129,13 @@ ask for help in [#sig-docs on Kubernetes Slack](https://kubernetes.slack.com/mes
### 更多信息 {#more-information}
-如果你对允许出现的内容有疑问,请加入到 [Kubernetes Slack](http://slack.k8s.io/)
+如果你对允许出现的内容有疑问,请加入到 [Kubernetes Slack](https://slack.k8s.io/)
的 `#sig-docs` 频道提问!
## {{% heading "whatsnext" %}}
* 阅读[样式指南](/zh/docs/contribute/style/style-guide)。
-
-
diff --git a/content/zh/docs/contribute/style/diagram-guide.md b/content/zh/docs/contribute/style/diagram-guide.md
index 3f18282756..7a88803e45 100644
--- a/content/zh/docs/contribute/style/diagram-guide.md
+++ b/content/zh/docs/contribute/style/diagram-guide.md
@@ -15,7 +15,7 @@ weight: 15
-本指南为你展示如何创建、编辑和分享基于 Mermaid Javascript 库的图表。
+本指南为你展示如何创建、编辑和分享基于 Mermaid JavaScript 库的图表。
Mermaid.js 允许你使用简单的、类似于 Markdown 的语法来在 Markdown 文件中生成图表。
你也可以使用 Mermaid 来创建 `.svg` 或 `.png` 图片文件,将其添加到你的文档中。
@@ -860,7 +860,7 @@ K8s components to start a container.
图 8 给出的是一个 Mermaid 时序图,展示启动容器时 K8s 组件间的控制流。
-{{< figure src="/docs/images/diagram-guide-example-3.svg" alt="K8s system flow diagram" class="diagram-large" caption="Figure 8. K8s system flow diagram" link="https://mermaid-js.github.io/mermaid-live-editor/edit/#eyJjb2RlIjoiJSV7aW5pdDp7XCJ0aGVtZVwiOlwibmV1dHJhbFwifX0lJVxuc2VxdWVuY2VEaWFncmFtXG4gICAgYWN0b3IgbWVcbiAgICBwYXJ0aWNpcGFudCBhcGlTcnYgYXMgY29udHJvbCBwbGFuZTxicj48YnI-YXBpLXNlcnZlclxuICAgIHBhcnRpY2lwYW50IGV0Y2QgYXMgY29udHJvbCBwbGFuZTxicj48YnI-ZXRjZCBkYXRhc3RvcmVcbiAgICBwYXJ0aWNpcGFudCBjbnRybE1nciBhcyBjb250cm9sIHBsYW5lPGJyPjxicj5jb250cm9sbGVyPGJyPm1hbmFnZXJcbiAgICBwYXJ0aWNpcGFudCBzY2hlZCBhcyBjb250cm9sIHBsYW5lPGJyPjxicj5zY2hlZHVsZXJcbiAgICBwYXJ0aWNpcGFudCBrdWJlbGV0IGFzIG5vZGU8YnI-PGJyPmt1YmVsZXRcbiAgICBwYXJ0aWNpcGFudCBjb250YWluZXIgYXMgbm9kZTxicj48YnI-Y29udGFpbmVyPGJyPnJ1bnRpbWVcbiAgICBtZS0-PmFwaVNydjogMS4ga3ViZWN0bCBjcmVhdGUgLWYgcG9kLnlhbWxcbiAgICBhcGlTcnYtLT4-ZXRjZDogMi4gc2F2ZSBuZXcgc3RhdGVcbiAgICBjbnRybE1nci0-PmFwaVNydjogMy4gY2hlY2sgZm9yIGNoYW5nZXNcbiAgICBzY2hlZC0-PmFwaVNydjogNC4gd2F0Y2ggZm9yIHVuYXNzaWduZWQgcG9kcyhzKVxuICAgIGFwaVNydi0-PnNjaGVkOiA1LiBub3RpZnkgYWJvdXQgcG9kIHcgbm9kZW5hbWU9XCIgXCJcbiAgICBzY2hlZC0-PmFwaVNydjogNi4gYXNzaWduIHBvZCB0byBub2RlXG4gICAgYXBpU3J2LS0-PmV0Y2Q6IDcuIHNhdmUgbmV3IHN0YXRlXG4gICAga3ViZWxldC0-PmFwaVNydjogOC4gbG9vayBmb3IgbmV3bHkgYXNzaWduZWQgcG9kKHMpXG4gICAgYXBpU3J2LT4-a3ViZWxldDogOS4gYmluZCBwb2QgdG8gbm9kZVxuICAgIGt1YmVsZXQtPj5jb250YWluZXI6IDEwLiBzdGFydCBjb250YWluZXJcbiAgICBrdWJlbGV0LT4-YXBpU3J2OiAxMS4gdXBkYXRlIHBvZCBzdGF0dXNcbiAgICBhcGlTcnYtLT4-ZXRjZDogMTIuIHNhdmUgbmV3IHN0YXRlIiwibWVybWFpZCI6IntcbiAgXCJ0aGVtZVwiOiBcImRlZmF1bHRcIlxufSIsInVwZGF0ZUVkaXRvciI6ZmFsc2UsImF1dG9TeW5jIjp0cnVlLCJ1cGRhdGVEaWFncmFtIjp0cnVlfQ" >}}
+{{< figure src="/zh/docs/images/diagram-guide-example-3.svg" alt="K8s system flow diagram" class="diagram-large" caption="Figure 8. K8s system flow diagram" link="https://mermaid-js.github.io/mermaid-live-editor/edit/#eyJjb2RlIjoiJSV7aW5pdDp7XCJ0aGVtZVwiOlwibmV1dHJhbFwifX0lJVxuc2VxdWVuY2VEaWFncmFtXG4gICAgYWN0b3IgbWVcbiAgICBwYXJ0aWNpcGFudCBhcGlTcnYgYXMgY29udHJvbCBwbGFuZTxicj48YnI-YXBpLXNlcnZlclxuICAgIHBhcnRpY2lwYW50IGV0Y2QgYXMgY29udHJvbCBwbGFuZTxicj48YnI-ZXRjZCBkYXRhc3RvcmVcbiAgICBwYXJ0aWNpcGFudCBjbnRybE1nciBhcyBjb250cm9sIHBsYW5lPGJyPjxicj5jb250cm9sbGVyPGJyPm1hbmFnZXJcbiAgICBwYXJ0aWNpcGFudCBzY2hlZCBhcyBjb250cm9sIHBsYW5lPGJyPjxicj5zY2hlZHVsZXJcbiAgICBwYXJ0aWNpcGFudCBrdWJlbGV0IGFzIG5vZGU8YnI-PGJyPmt1YmVsZXRcbiAgICBwYXJ0aWNpcGFudCBjb250YWluZXIgYXMgbm9kZTxicj48YnI-Y29udGFpbmVyPGJyPnJ1bnRpbWVcbiAgICBtZS0-PmFwaVNydjogMS4ga3ViZWN0bCBjcmVhdGUgLWYgcG9kLnlhbWxcbiAgICBhcGlTcnYtLT4-ZXRjZDogMi4gc2F2ZSBuZXcgc3RhdGVcbiAgICBjbnRybE1nci0-PmFwaVNydjogMy4gY2hlY2sgZm9yIGNoYW5nZXNcbiAgICBzY2hlZC0-PmFwaVNydjogNC4gd2F0Y2ggZm9yIHVuYXNzaWduZWQgcG9kcyhzKVxuICAgIGFwaVNydi0-PnNjaGVkOiA1LiBub3RpZnkgYWJvdXQgcG9kIHcgbm9kZW5hbWU9XCIgXCJcbiAgICBzY2hlZC0-PmFwaVNydjogNi4gYXNzaWduIHBvZCB0byBub2RlXG4gICAgYXBpU3J2LS0-PmV0Y2Q6IDcuIHNhdmUgbmV3IHN0YXRlXG4gICAga3ViZWxldC0-PmFwaVNydjogOC4gbG9vayBmb3IgbmV3bHkgYXNzaWduZWQgcG9kKHMpXG4gICAgYXBpU3J2LT4-a3ViZWxldDogOS4gYmluZCBwb2QgdG8gbm9kZVxuICAgIGt1YmVsZXQtPj5jb250YWluZXI6IDEwLiBzdGFydCBjb250YWluZXJcbiAgICBrdWJlbGV0LT4-YXBpU3J2OiAxMS4gdXBkYXRlIHBvZCBzdGF0dXNcbiAgICBhcGlTcnYtLT4-ZXRjZDogMTIuIHNhdmUgbmV3IHN0YXRlIiwibWVybWFpZCI6IntcbiAgXCJ0aGVtZVwiOiBcImRlZmF1bHRcIlxufSIsInVwZGF0ZUVkaXRvciI6ZmFsc2UsImF1dG9TeW5jIjp0cnVlLCJ1cGRhdGVEaWFncmFtIjp0cnVlfQ" >}}
-
+
本页面将介绍 Hugo 自定义短代码,可以用于 Kubernetes Markdown 文档书写。
-
+
关于短代码的更多信息可参见 [Hugo 文档](https://gohugo.io/content-management/shortcodes)。
@@ -20,18 +24,18 @@ content_type: concept
## 功能状态
-在本站的 Markdown 页面中,你可以加入短代码来展示所描述的功能特性的版本和状态。
+在本站的 Markdown 页面(`.md` 文件)中,你可以加入短代码来展示所描述的功能特性的版本和状态。
### 功能状态示例
@@ -41,12 +45,16 @@ in the latest Kubernetes version.
{{* feature-state state="stable" */>}}
```
-
+
会转换为:
{{< feature-state state="stable" >}}
-
+
`state` 的可选值如下:
* alpha
@@ -69,7 +77,9 @@ feature state version by passing the `for_k8s_version` shortcode parameter. For
{{* feature-state for_k8s_version="v1.10" state="beta" */>}}
```
-
+
会转换为:
{{< feature-state for_k8s_version="v1.10" state="beta" >}}
@@ -78,10 +88,10 @@ feature state version by passing the `for_k8s_version` shortcode parameter. For
## Glossary
There are two glossary shortcodes: `glossary_tooltip` and `glossary_definition`.
-You can reference glossary terms with an inclusion that will automatically
-update and replace content with the relevant links from [our
-glossary](/docs/reference/glossary/). When the glossary term is moused-over,
-the glossary entry displays a tooltip. The glossary term also displays as a link.
+You can reference glossary terms with an inclusion that automatically updates
+and replaces content with the relevant links from [our glossary](/docs/reference/glossary/).
+When the glossary term is moused-over, the glossary entry displays a tooltip.
+The glossary term also displays as a link.
As well as inclusions with tooltips, you can reuse the definitions from the glossary in
page content.
@@ -96,21 +106,24 @@ page content.
除了包含工具提示外,你还可以重用页面内容中词汇表中的定义。
-词汇术语的原始数据保存在 [https://github.com/kubernetes/website/tree/main/content/en/docs/reference/glossary](https://github.com/kubernetes/website/tree/main/content/en/docs/reference/glossary),每个内容文件对应相应的术语解释。
+词汇术语的原始数据保存在[词汇目录](https://github.com/kubernetes/website/tree/main/content/en/docs/reference/glossary),
+每个内容文件对应相应的术语解释。
### 词汇演示
-例如,下面的代码在 Markdown 中将会转换为 `{{< glossary_tooltip text="cluster" term_id="cluster" >}}`,
-然后在提示框中显示。
+例如下面的代码在 Markdown 中将会转换为
+{{< glossary_tooltip text="cluster" term_id="cluster" >}},然后在提示框中显示。
```
{{* glossary_tooltip text="cluster" term_id="cluster" */>}}
@@ -146,10 +159,68 @@ which renders as:
呈现为:
{{< glossary_definition term_id="cluster" length="all" >}}
+
+## 链接至 API 参考 {#links-to-api-reference}
+
+
+你可以使用 `api-reference` 短代码链接到 Kubernetes API 参考页面,例如
+Pod
+{{< api-reference page="workload-resources/pod-v1" >}} 参考文件:
+
+```
+{{* api-reference page="workload-resources/pod-v1" */>}}
+```
+
+
+本语句中 `page` 参数的内容是 API 参考页面的 URL 后缀。
+
+
+
+你可以通过指定 `anchor` 参数链接到页面中的特定位置,例如到
+{{< api-reference page="workload-resources/pod-v1" anchor="PodSpec" >}} 参考,或页面的
+{{< api-reference page="workload-resources/pod-v1" anchor="environment-variables" >}}
+部分。
+
+```
+{{* api-reference page="workload-resources/pod-v1" anchor="PodSpec" */>}}
+{{* api-reference page="workload-resources/pod-v1" anchor="environment-variables" */>}}
+```
+
+
+
+你可以通过指定 `text` 参数来更改链接的文本,例如通过链接到页面的
+{{< api-reference page="workload-resources/pod-v1" anchor="environment-variables" text="环境变量">}}
+部分:
+
+```
+{{* api-reference page="workload-resources/pod-v1" anchor="environment-variables" text="环境变量" */>}}
+```
+
+
* `name`: 标签页上显示的名字。
* `codelang`: 如果要在 `tab` 短代码中加入内部内容,需要告知 Hugo 使用的是什么代码语言,方便代码高亮。
@@ -245,10 +326,12 @@ The `tabs` shortcode takes these parameters:
Hugo 会在包内查找文件(可以是 Hugo 所支持的任何 MIME 类型文件)。
否则,Hugo 会在当前路径的相对路径下查找所要包含的内容页面。
注意,在 `include` 页面中不能包含短代码内容,必须要使用自结束(self-closing)语法。
- 非内容文件将会被代码高亮。
+ 例如 `{{* tab name="Content File #1" include="example1" /*/>}}`。
如果没有在 `codelang` 进行声明的话,Hugo 会根据文件名推测所用的语言。
+ 默认情况下,非内容文件将会被代码高亮。
* 如果内部内容是 Markdown,你必须要使用 `%` 分隔符来包装标签页。
@@ -282,7 +365,9 @@ println "This is tab 2."
{{< /tabs */>}}
```
-
+
会转换为:
{{< tabs name="tab_with_code" >}}
@@ -294,41 +379,51 @@ println "This is tab 2."
{{< /tab >}}
{{< /tabs >}}
-
+
### 标签页演示:内联 Markdown 和 HTML
```go-html-template
{{* tabs name="tab_with_md" >}}
{{% tab name="Markdown" %}}
-这是 **一些 markdown 。**
-{{< note >}}它甚至可以包含短代码。{{< /note >}}
+这是 **一些 markdown。**
+{{< note >}}
+它甚至可以包含短代码。
+{{< /note >}}
{{% /tab %}}
{{< tab name="HTML" >}}
纯 HTML
-
这是一些 纯 HTML 。
+
这是一些 纯 HTML。
{{< /tab >}}
{{< /tabs */>}}
```
-
+
会转换为:
{{< tabs name="tab_with_md" >}}
{{% tab name="Markdown" %}}
-这是 **一些 markdown 。**
-{{< note >}}它甚至可以包含短代码。{{< /note >}}
+这是 **一些 markdown。**
+{{< note >}}
+它甚至可以包含短代码。
+{{< /note >}}
{{% /tab %}}
{{< tab name="HTML" >}}
纯 HTML
-
这是一些 纯 HTML 。
+
这是一些 纯 HTML。
{{< /tab >}}
{{< /tabs >}}
-
+
### 标签页演示:文件嵌套
```go-text-template
@@ -339,7 +434,9 @@ println "This is tab 2."
{{< /tabs */>}}
```
-
+
会转换为:
{{< tabs name="tab_with_file_include" >}}
@@ -348,6 +445,78 @@ println "This is tab 2."
{{< tab name="JSON File" include="podtemplate.json" />}}
{{< /tabs >}}
+
+## 第三方内容标记 {#third-party-content-marker}
+
+
+运行 Kubernetes 需要第三方软件。例如:你通常需要将
+[DNS 服务器](/zh/docs/tasks/administer-cluster/dns-custom-nameservers/#introduction)
+添加到集群中,以便名称解析工作。
+
+
+当我们链接到第三方软件或以其他方式提及它时,我们会遵循[内容指南](/zh/docs/contribute/style/content-guide/)
+并标记这些第三方项目。
+
+
+使用这些短代码会向使用它们的任何文档页面添加免责声明。
+
+
+### 列表 {#third-party-content-list}
+
+
+对于有关几个第三方项目的列表,请添加:
+```
+{{%/* thirdparty-content */%}}
+```
+
+在包含所有项目的段落标题正下方。
+
+
+### 项目 {#third-party-content-item}
+
+
+如果你有一个列表,其中大多数项目引用项目内软件(例如:Kubernetes 本身,以及单独的
+[Descheduler](https://github.com/kubernetes-sigs/descheduler)
+组件),那么可以使用不同的形式。
+
+
+在项目之前,或在特定项目的段落下方添加此短代码:
+```
+{{%/* thirdparty-content single="true" */%}}
+```
+
+
### `{{* param "version" */>}}`
@@ -375,10 +545,11 @@ the name of one site parameter, in this case: `version`.
{{< note >}}
@@ -415,7 +586,8 @@ Renders to:
@@ -432,7 +604,7 @@ Renders to:
The `{{* version-check */>}}` shortcode checks if the `min-kubernetes-server-version`
page parameter is present and then uses this value to compare to `version`.
-
+
Renders to:
-->
### `{{* version-check */>}}`
@@ -447,9 +619,9 @@ Renders to:
@@ -466,14 +638,14 @@ Renders to:
-* 了解[Hugo](https://gohugo.io/)。
+* 了解 [Hugo](https://gohugo.io/)。
* 了解[撰写新的话题](/zh/docs/contribute/style/write-new-topic/)。
* 了解[使用页面内容类型](/zh/docs/contribute/style/page-content-types/)。
* 了解[发起 PR](/zh/docs/contribute/new-content/open-a-pr/)。
-* 了解[高级贡献](/zh/docs/contribute/advanced/)。
+* 了解[进阶贡献](/zh/docs/contribute/advanced/)。
diff --git a/content/zh/docs/doc-contributor-tools/linkchecker/README.md b/content/zh/docs/doc-contributor-tools/linkchecker/README.md
index 016907c2eb..6f31aed3ab 100644
--- a/content/zh/docs/doc-contributor-tools/linkchecker/README.md
+++ b/content/zh/docs/doc-contributor-tools/linkchecker/README.md
@@ -1,24 +1,26 @@
-
# 内置链接检查工具
-
-你可以使用 [htmltest](https://github.com/wjdp/htmltest) 来检查 [`/content/en/`](https://git.k8s.io/website/content/en/) 下面的失效链接。这在重构章节内容、移动页面或者重命名文件或页眉时非常有用。
+你可以使用 [htmltest](https://github.com/wjdp/htmltest) 来检查
+[`/content/en/`](https://git.k8s.io/website/content/en/) 下面的失效链接。
+这在重构章节内容、移动页面或者重命名文件或页眉时非常有用。
-
## 工作原理
-
`htmltest` 会扫描 kubernetes website 仓库构建生成的 HTML 文件。通过执行 `make` 命令进行了下列操作:
-
## 哪些链接不会检查
-
-该链接检查器扫描生成的 HTML 文件,而非原始的 Markdown. 该 htmltest 工具依赖于一个配置文件,[`.htmltest.yml`](https://git.k8s.io/website/.htmltest.yml),来决定检查哪些内容。
+该链接检查器扫描生成的 HTML 文件,而非原始的 Markdown. 该 htmltest 工具依赖于配置文件
+[`.htmltest.yml`](https://git.k8s.io/website/.htmltest.yml),来决定检查哪些内容。
该链接检查器扫描以下内容:
-
该链接检查器不会扫描以下内容:
-
- 包含在顶部和侧边导航栏的链接,以及页脚链接或者页面的 `` 部分中的链接,例如 CSS 样式表、脚本以及元信息的链接。
-- 顶级页面及其子页面,例如: `/training`, `/community`, `/case-studies/adidas`
+- 顶级页面及其子页面,例如:`/training`、`/community`、`/case-studies/adidas`
- 博客文章
-- API 参考文档,例如:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/
+- API 参考文档,例如: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/
- 本地化内容
-
## 先决条件以及安装说明
-
必须安装:
* [Docker](https://docs.docker.com/get-docker/)
* [make](https://www.gnu.org/software/make/)
-
-
## 运行链接检查器
-
运行链接检查器需要:
-
## 理解输出的内容
-
如果链接检查器发现了失效链接,则输出内容类似如下:
@@ -125,7 +128,7 @@ tasks/access-kubernetes-api/custom-resources/index.html
hash does not exist --- tasks/access-kubernetes-api/custom-resources/index.html --> #preserving-unknown-fields
```
-
这是一系列失效链接。该日志附带了每个页面下的失效链接。
-在这部分输出中,包含失效链接的文件是 `tasks/access-kubernetes-api/custom-resources.md`.
+在这部分输出中,包含失效链接的文件是 `tasks/access-kubernetes-api/custom-resources.md`。
-该工具给出了一个理由:`hash does not exist`. 在大部分情况下,你可以忽略这个。
+该工具给出了一个理由:`hash does not exist`,在大部分情况下,你可以忽略这个。
-目标链接是 `#preserving-unknown-fields`.
+目标链接是 `#preserving-unknown-fields`。
修复这个问题的一种方式是:
-
运行 htmltest 来验证失效链接是否已修复。
\ No newline at end of file
diff --git a/content/zh/docs/images/diagram-guide-example-3.svg b/content/zh/docs/images/diagram-guide-example-3.svg
new file mode 100644
index 0000000000..85fef13910
--- /dev/null
+++ b/content/zh/docs/images/diagram-guide-example-3.svg
@@ -0,0 +1 @@
+me control plane api-server control plane etcd datastore control plane controller manager control plane scheduler node kubelet node container runtime 1. kubectl create -f pod.yaml 2. save new state 3. check for changes 4. watch for unassigned pods(s) 5. notify about pod w nodename=" " 6. assign pod to node 7. save new state 8. look for newly assigned pod(s) 9. bind pod to node 10. start container 11. update pod status 12. save new state me control plane api-server control plane etcd datastore control plane controller manager control plane scheduler node kubelet node container runtime
\ No newline at end of file
diff --git a/content/zh/docs/images/ha-control-plane.svg b/content/zh/docs/images/ha-control-plane.svg
new file mode 100644
index 0000000000..eb5bbdba81
--- /dev/null
+++ b/content/zh/docs/images/ha-control-plane.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/content/zh/docs/reference/_index.md b/content/zh/docs/reference/_index.md
index 749f78d270..af2a04118b 100644
--- a/content/zh/docs/reference/_index.md
+++ b/content/zh/docs/reference/_index.md
@@ -42,8 +42,8 @@ This section of the Kubernetes documentation contains references.
* [术语表](/zh/docs/reference/glossary/) - 一个全面的标准化的 Kubernetes 术语表
-* [Kubernetes API 单页参考](/zh/docs/reference/kubernetes-api/)
-* [Kubernetes API 参考 {{< param "version" >}}](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/)。
+* [Kubernetes API 参考](/zh/docs/reference/kubernetes-api/)
+* [Kubernetes API 单页参考 {{< param "version" >}}](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/)。
* [使用 Kubernetes API ](/zh/docs/reference/using-api/) - Kubernetes 的 API 概述
* [API 的访问控制](/zh/docs/reference/access-authn-authz/) - 关于 Kubernetes 如何控制 API 访问的详细信息
* [常见的标签、注解和污点](/zh/docs/reference/labels-annotations-taints/)
@@ -64,7 +64,7 @@ client libraries:
-->
## 官方支持的客户端库
-如果您需要通过编程语言调用 Kubernetes API,您可以使用
+如果你需要通过编程语言调用 Kubernetes API,你可以使用
[客户端库](/zh/docs/reference/using-api/client-libraries/)。以下是官方支持的客户端库:
- [Kubernetes Go 语言客户端库](https://github.com/kubernetes/client-go/)
@@ -137,9 +137,11 @@ operator to use or manage a cluster.
* [kube-apiserver configuration (v1alpha1)](/docs/reference/config-api/apiserver-config.v1alpha1/)
* [kube-apiserver configuration (v1)](/docs/reference/config-api/apiserver-config.v1/)
* [kube-apiserver encryption (v1)](/docs/reference/config-api/apiserver-encryption.v1/)
+* [kube-apiserver event rate limit (v1alpha1)](/docs/reference/config-api/apiserver-eventratelimit.v1/)
* [kubelet configuration (v1alpha1)](/docs/reference/config-api/kubelet-config.v1alpha1/) and
[kubelet configuration (v1beta1)](/docs/reference/config-api/kubelet-config.v1beta1/)
* [kubelet credential providers (v1alpha1)](/docs/reference/config-api/kubelet-credentialprovider.v1alpha1/)
+* [kubelet credential providers (v1beta1)](/docs/reference/config-api/kubelet-credentialprovider.v1beta1/)
* [kube-scheduler configuration (v1beta2)](/docs/reference/config-api/kube-scheduler-config.v1beta2/) and
[kube-scheduler configuration (v1beta3)](/docs/reference/config-api/kube-scheduler-config.v1beta3/)
* [kube-proxy configuration (v1alpha1)](/docs/reference/config-api/kube-proxy-config.v1alpha1/)
@@ -147,6 +149,7 @@ operator to use or manage a cluster.
* [Client authentication API (v1beta1)](/docs/reference/config-api/client-authentication.v1beta1/) and
[Client authentication API (v1)](/docs/reference/config-api/client-authentication.v1/)
* [WebhookAdmission configuration (v1)](/docs/reference/config-api/apiserver-webhookadmission.v1/)
+* [ImagePolicy API (v1alpha1)](/docs/reference/config-api/imagepolicy.v1alpha1/)
-->
## 配置 API
@@ -157,9 +160,11 @@ operator to use or manage a cluster.
* [kube-apiserver 配置 (v1alpha1)](/zh/docs/reference/config-api/apiserver-config.v1alpha1/)
* [kube-apiserver 配置 (v1)](/zh/docs/reference/config-api/apiserver-config.v1/)
* [kube-apiserver 加密 (v1)](/zh/docs/reference/config-api/apiserver-encryption.v1/)
+* [kube-apiserver 事件速率限制 (v1alpha1)](/zh/docs/reference/config-api/apiserver-eventratelimit.v1/)
* [kubelet 配置 (v1alpha1)](/zh/docs/reference/config-api/kubelet-config.v1alpha1/) 和
[kubelet 配置 (v1beta1)](/zh/docs/reference/config-api/kubelet-config.v1beta1/)
* [kubelet 凭据驱动 (v1alpha1)](/zh/docs/reference/config-api/kubelet-credentialprovider.v1alpha1/)
+* [kubelet 凭据驱动 (v1beta1)](/zh/docs/reference/config-api/kubelet-credentialprovider.v1beta1/)
* [kube-scheduler 配置 (v1beta2)](/zh/docs/reference/config-api/kube-scheduler-config.v1beta2/) 和
[kube-scheduler 配置 (v1beta3)](/zh/docs/reference/config-api/kube-scheduler-config.v1beta3/)
* [kube-proxy 配置 (v1alpha1)](/zh/docs/reference/config-api/kube-proxy-config.v1alpha1/)
@@ -167,6 +172,7 @@ operator to use or manage a cluster.
* [客户端认证 API (v1beta1)](/zh/docs/reference/config-api/client-authentication.v1beta1/) 和
[客户端认证 API (v1)](/zh/docs/reference/config-api/client-authentication.v1/)
* [WebhookAdmission 配置 (v1)](/zh/docs/reference/config-api/apiserver-webhookadmission.v1/)
+* [ImagePolicy API (v1alpha1)](/zh/docs/reference/config-api/imagepolicy.v1alpha1/)
@@ -26,7 +24,8 @@ weight: 80
-基于属性的访问控制(Attribute-based access control - ABAC)定义了访问控制范例,其中通过使用将属性组合在一起的策略来向用户授予访问权限。
+基于属性的访问控制(Attribute-based access control - ABAC)定义了访问控制范例,
+其中通过使用将属性组合在一起的策略来向用户授予访问权限。
@@ -52,13 +51,13 @@ properties:
- `group`, type string; if you specify `group`, it must match one of the groups of the authenticated user. `system:authenticated` matches all authenticated requests. `system:unauthenticated` matches all unauthenticated requests.
- Resource-matching properties:
- `apiGroup`, type string; an API group.
- - Ex: `extensions`
+ - Ex: `apps`, `networking.k8s.io`
- Wildcard: `*` matches all API groups.
- `namespace`, type string; a namespace.
- Ex: `kube-system`
- Wildcard: `*` matches all resource requests.
- `resource`, type string; a resource type
- - Ex: `pods`
+ - Ex: `pods`, `deployments`
- Wildcard: `*` matches all resource requests.
- Non-resource-matching properties:
- `nonResourcePath`, type string; non-resource request paths.
@@ -68,7 +67,6 @@ properties:
- `/foo/*` matches all subpaths of `/foo/`.
- `readonly`, type boolean, when true, means that the Resource-matching policy only applies to get, list, and watch operations, Non-resource-matching policy only applies to get operation.
-->
-
## 策略文件格式
基于 `ABAC` 模式,可以这样指定策略文件 `--authorization-policy-file=SOME_FILENAME`。
@@ -83,16 +81,17 @@ properties:
- `spec` 配置为具有以下映射的属性:
- 主体匹配属性:
- `user`,字符串类型;来自 `--token-auth-file` 的用户字符串,如果你指定 `user`,它必须与验证用户的用户名匹配。
- - `group`,字符串类型;如果指定 `group`,它必须与经过身份验证的用户的一个组匹配,`system:authenticated`匹配所有经过身份验证的请求。`system:unauthenticated`匹配所有未经过身份验证的请求。
+ - `group`,字符串类型;如果指定 `group`,它必须与经过身份验证的用户的一个组匹配,`system:authenticated` 匹配所有经过身份验证的请求。
+ `system:unauthenticated` 匹配所有未经过身份验证的请求。
- 资源匹配属性:
- `apiGroup`,字符串类型;一个 API 组。
- - 例: `extensions`
+ - 例: `apps`, `networking.k8s.io`
- 通配符:`*`匹配所有 API 组。
- `namespace`,字符串类型;一个命名空间。
- 例如:`kube-system`
- 通配符:`*`匹配所有资源请求。
- `resource`,字符串类型;资源类型。
- - 例:`pods`
+ - 例:`pods`, `deployments`
- 通配符:`*`匹配所有资源请求。
- 非资源匹配属性:
- `nonResourcePath`,字符串类型;非资源请求路径。
@@ -154,10 +153,7 @@ resource, and nonResourcePath properties set to `"*"`.
要允许任何经过身份验证的用户执行某些操作,请将策略组属性设置为 `"system:authenticated"`。
-要允许任何未经身份验证的用户执行某些操作,请将策略组属性设置为 `"system:authentication"`。
-
-要允许用户执行任何操作,请使用 apiGroup,命名空间,
-资源和 nonResourcePath 属性设置为 `"*"` 的策略。
+要允许任何未经身份验证的用户执行某些操作,请将策略组属性设置为 `"system:unauthenticated"`。
要允许用户执行任何操作,请使用设置为 `"*"` 的 apiGroup,namespace,resource 和 nonResourcePath 属性编写策略。
@@ -181,9 +177,10 @@ up the verbosity:
kubectl --v=8 version
-->
-## Kubectl
+## kubectl
-Kubectl 使用 api-server 的 `/api` 和 `/apis` 端点来发现服务资源类型,并使用位于 `/openapi/v2` 的模式信息来验证通过创建/更新操作发送到 API 的对象。
+kubectl 使用 api-server 的 `/api` 和 `/apis` 端点来发现服务资源类型,
+并使用位于 `/openapi/v2` 的模式信息来验证通过创建/更新操作发送到 API 的对象。
当使用 ABAC 鉴权时,这些特殊资源必须显式地通过策略中的 `nonResourcePath` 属性暴露出来(参见下面的 [示例](#examples)):
@@ -191,7 +188,7 @@ Kubectl 使用 api-server 的 `/api` 和 `/apis` 端点来发现服务资源类
* `/version` 通过 `kubectl version` 检索服务器版本。
* `/swaggerapi/*` 用于创建 / 更新操作。
-要检查涉及到特定 kubectl 操作的 HTTP 调用,您可以调整详细程度:
+要检查涉及到特定 kubectl 操作的 HTTP 调用,你可以调整详细程度:
kubectl --v=8 version
-
## 例子 {#examples}
1. Alice 可以对所有资源做任何事情:
@@ -221,12 +217,12 @@ Kubectl 使用 api-server 的 `/api` 和 `/apis` 端点来发现服务资源类
```json
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "alice", "namespace": "*", "resource": "*", "apiGroup": "*"}}
```
-2. Kubelet 可以读取任何 pod:
+2. kubelet 可以读取任何 pod:
```json
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "pods", "readonly": true}}
```
-3. Kubelet 可以读写事件:
+3. kubelet 可以读写事件:
```json
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "kubelet", "namespace": "*", "resource": "events"}}
@@ -245,8 +241,8 @@ Kubectl 使用 api-server 的 `/api` 和 `/apis` 端点来发现服务资源类
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"group": "system:unauthenticated", "readonly": true, "nonResourcePath": "*"}}
```
-->
-
4. Bob 可以在命名空间 `projectCaribou` 中读取 pod:
+
```json
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": {"user": "bob", "namespace": "projectCaribou", "resource": "pods", "readonly": true}}
```
@@ -269,7 +265,6 @@ system:serviceaccount::
```
-->
-
[完整文件示例](https://releases.k8s.io/{{< param "fullversion" >}}/pkg/auth/authorizer/abac/example_policy_file.jsonl)
## 服务帐户的快速说明
diff --git a/content/zh/docs/reference/access-authn-authz/admission-controllers.md b/content/zh/docs/reference/access-authn-authz/admission-controllers.md
index 46c9d862f4..e879b6e497 100644
--- a/content/zh/docs/reference/access-authn-authz/admission-controllers.md
+++ b/content/zh/docs/reference/access-authn-authz/admission-controllers.md
@@ -21,14 +21,14 @@ weight: 30
-此页面概述了准入控制器。
+此页面提供准入控制器(Admission Controllers)的概述。
-## 什么是准入控制插件?
+## 什么是准入控制插件? {#what-are-they}
准入控制器是一段代码,它会在请求通过认证和授权之后、对象被持久化之前拦截到达 API
服务器的请求。控制器由下面的[列表](#what-does-each-admission-controller-do)组成,
-并编译进 `kube-apiserver` 二进制文件,并且只能由集群管理员配置。
+并编译进 `kube-apiserver` 可执行文件,并且只能由集群管理员配置。
在该列表中,有两个特殊的控制器:MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook。
它们根据 API 中的配置,分别执行变更和验证
[准入控制 webhook](/zh/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks)。
@@ -64,14 +64,14 @@ If any of the controllers in either phase reject the request, the entire
request is rejected immediately and an error is returned to the end-user.
-->
准入控制器可以执行 “验证(Validating)” 和/或 “变更(Mutating)” 操作。
-变更(mutating)控制器可以根据被其接受的请求修改相关对象;验证(validating)控制器则不行。
+变更(mutating)控制器可以根据被其接受的请求更改相关对象;验证(validating)控制器则不行。
准入控制器限制创建、删除、修改对象或连接到代理的请求,不限制读取对象的请求。
准入控制过程分为两个阶段。第一阶段,运行变更准入控制器。第二阶段,运行验证准入控制器。
再次提醒,某些控制器既是变更准入控制器又是验证准入控制器。
-如果任何一个阶段的任何控制器拒绝了该请求,则整个请求将立即被拒绝,并向终端用户返回一个错误。
+如果两个阶段之一的任何一个控制器拒绝了某请求,则整个请求将立即被拒绝,并向最终用户返回错误。
-最后,除了对对象进行变更外,准入控制器还可以有其它作用:将相关资源作为请求处理的一部分进行变更。
-增加使用配额就是一个典型的示例,说明了这样做的必要性。
+最后,除了对对象进行变更外,准入控制器还可能有其它副作用:将相关资源作为请求处理的一部分进行变更。
+增加配额用量就是一个典型的示例,说明了这样做的必要性。
此类用法都需要相应的回收或回调过程,因为任一准入控制器都无法确定某个请求能否通过所有其它准入控制器。
-## 为什么需要准入控制器?
+## 为什么需要准入控制器? {#why-do-i-need-them}
Kubernetes 的许多高级功能都要求启用一个准入控制器,以便正确地支持该特性。
-因此,没有正确配置准入控制器的 Kubernetes API 服务器是不完整的,它无法支持你期望的所有特性。
+因此,没有正确配置准入控制器的 Kubernetes API 服务器是不完整的,它无法支持你所期望的所有特性。
-## 如何启用一个准入控制器?
+## 如何启用一个准入控制器? {how-do-i-turn-on-an-admission-controller}
-Kubernetes API 服务器的 `enable-admission-plugins` 标志接受一个用于在集群修改对象之前
-调用的(以逗号分隔的)准入控制插件顺序列表。
+Kubernetes API 服务器的 `enable-admission-plugins` 标志接受一个(以逗号分隔的)准入控制插件列表,
+这些插件会在集群修改对象之前被调用。
-例如,下面的命令就启用了 `NamespaceLifecycle` 和 `LimitRanger` 准入控制插件:
+例如,下面的命令启用 `NamespaceLifecycle` 和 `LimitRanger` 准入控制插件:
```shell
kube-apiserver --enable-admission-plugins=NamespaceLifecycle,LimitRanger ...
@@ -128,7 +128,7 @@ have to modify the systemd unit file if the API server is deployed as a systemd
service, you may modify the manifest file for the API server if Kubernetes is deployed
in a self-hosted way.
-->
-根据你 Kubernetes 集群的部署方式以及 API 服务器的启动方式的不同,你可能需要以不同的方式应用设置。
+根据你 Kubernetes 集群的部署方式以及 API 服务器的启动方式,你可能需要以不同的方式应用设置。
例如,如果将 API 服务器部署为 systemd 服务,你可能需要修改 systemd 单元文件;
如果以自托管方式部署 Kubernetes,你可能需要修改 API 服务器的清单文件。
{{< /note >}}
@@ -138,7 +138,7 @@ in a self-hosted way.
The Kubernetes API server flag `disable-admission-plugins` takes a comma-delimited list of admission control plugins to be disabled, even if they are in the list of plugins enabled by default.
-->
-## 怎么关闭准入控制器?
+## 怎么关闭准入控制器? {#how-do-i-turn-off-an-admission-controller}
Kubernetes API 服务器的 `disable-admission-plugins` 标志,会将传入的(以逗号分隔的)
准入控制插件列表禁用,即使是默认启用的插件也会被禁用。
@@ -152,9 +152,9 @@ kube-apiserver --disable-admission-plugins=PodNodeSelector,AlwaysDeny ...
To see which admission plugins are enabled:
-->
-## 哪些插件是默认启用的?
+## 哪些插件是默认启用的? {#which-plugins-are-enabled-by-default}
-下面的命令可以查看哪些插件是默认启用的:
+要查看哪些插件是被启用的:
```shell
kube-apiserver -h | grep enable-admission-plugins
@@ -164,26 +164,25 @@ kube-apiserver -h | grep enable-admission-plugins
In the current version, the default ones are:
-->
-在目前版本中,它们是:
+在目前版本中,默认启用的插件有:
-```shell
-CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, DefaultStorageClass, DefaultTolerationSeconds, LimitRanger, MutatingAdmissionWebhook, NamespaceLifecycle, PersistentVolumeClaimResize, Priority, ResourceQuota, RuntimeClass, ServiceAccount, StorageObjectInUseProtection, TaintNodesByCondition, ValidatingAdmissionWebhook
+```
+CertificateApproval, CertificateSigning, CertificateSubjectRestriction, DefaultIngressClass, DefaultStorageClass, DefaultTolerationSeconds, LimitRanger, MutatingAdmissionWebhook, NamespaceLifecycle, PersistentVolumeClaimResize, PodSecurity, Priority, ResourceQuota, RuntimeClass, ServiceAccount, StorageObjectInUseProtection, TaintNodesByCondition, ValidatingAdmissionWebhook
```
-## 每个准入控制器的作用是什么?
+## 每个准入控制器的作用是什么? {#what-does-each-admission-controller-do}
-### AlwaysAdmit {#alwaysadmit}
+### AlwaysAdmit {#alwaysadmit}
{{< feature-state for_k8s_version="v1.13" state="deprecated" >}}
-该准入控制器会允许所有的 pod 接入集群。已废弃,因为它的行为根本就和没有准入控制器一样。
+
+该准入控制器允许所有的 Pod 进入集群。此插件已被弃用,因其行为与没有准入控制器一样。
### AlwaysDeny {#alwaysdeny}
@@ -192,7 +191,7 @@ This admission controller allows all pods into the cluster. It is deprecated bec
-拒绝所有的请求。由于它没有实际意义,已废弃。
+拒绝所有的请求。由于它没有实际意义,已被弃用。
### AlwaysPullImages {#alwayspullimages}
@@ -205,58 +204,58 @@ scheduled onto the right node), without any authorization check against the imag
is enabled, images are always pulled prior to starting containers, which means valid credentials are
required.
-->
-该准入控制器会修改每一个新创建的 Pod 的镜像拉取策略为 Always 。
+该准入控制器会修改每个新创建的 Pod,将其镜像拉取策略设置为 Always。
这在多租户集群中是有用的,这样用户就可以放心,他们的私有镜像只能被那些有凭证的人使用。
-如果没有这个准入控制器,一旦镜像被拉取到节点上,任何用户的 Pod 都可以通过已了解到的镜像
-的名称(假设 Pod 被调度到正确的节点上)来使用它,而不需要对镜像进行任何授权检查。
-当启用这个准入控制器时,总是在启动容器之前拉取镜像,这意味着需要有效的凭证。
+如果没有这个准入控制器,一旦镜像被拉取到节点上,任何用户的 Pod 都可以通过已了解到的镜像的名称
+(假设 Pod 被调度到正确的节点上)来使用它,而不需要对镜像进行任何鉴权检查。
+启用这个准入控制器之后,启动容器之前必须拉取镜像,这意味着需要有效的凭证。
-### CertificateApproval
+### CertificateApproval {#certificateapproval}
-
-此准入控制器获取“审批” CertificateSigningRequest 资源的请求并执行额外的授权检查,
-以确保审批请求的用户有权限审批 `spec.signerName` 请求 CertificateSigningRequest 资源的证书请求。
+此准入控制器获取“审批” CertificateSigningRequest 资源的请求并执行额外的鉴权检查,
+以确保针对设置了 `spec.signerName` 的 CertificateSigningRequest 资源而言,
+审批请求的用户有权限对证书请求执行 `approve` 操作。
+有关对 CertificateSigningRequest 资源执行不同操作所需权限的详细信息,
+请参阅[证书签名请求](/zh/docs/reference/access-authn-authz/certificate-signing-requests/)。
-有关对证书签名请求资源执行不同操作所需权限的详细信息,
-请参阅[证书签名请求](/zh/docs/reference/access-authn-authz/certificate-signing-requests/)
-
-### CertificateSigning
+### CertificateSigning {#certificatesigning}
-此准入控制器获取 CertificateSigningRequest 资源的 `status.certificate` 字段更新请求并执行额外的授权检查,
-以确保签发证书的用户有权限为 `spec.signerName` 请求 CertificateSigningRequest 资源的证书请求`签发`证书。
+此准入控制器监视对 CertificateSigningRequest 资源的 `status.certificate` 字段的更新请求,
+并执行额外的鉴权检查,以确保针对设置了 `spec.signerName` 的 CertificateSigningRequest 资源而言,
+签发证书的用户有权限对证书请求执行 `sign` 操作。
-有关对证书签名请求资源执行不同操作所需权限的详细信息,
-请参阅[证书签名请求](/zh/docs/reference/access-authn-authz/certificate-signing-requests/)
+有关对 CertificateSigningRequest 资源执行不同操作所需权限的详细信息,
+请参阅[证书签名请求](/zh/docs/reference/access-authn-authz/certificate-signing-requests/)。
-### CertificateSubjectRestrictions
+### CertificateSubjectRestrictions {#certificatesubjectrestrictions}
-此准入控制器获取具有 `kubernetes.io/kube-apiserver-client` 的 `spec.signerName` 的
-CertificateSigningRequest 资源创建请求,
-它拒绝任何包含了 `system:masters` 一个“组”(或者“组织”)的请求。
+此准入控制器监视 `spec.signerName` 被设置为 `kubernetes.io/kube-apiserver-client` 的
+CertificateSigningRequest 资源创建请求,并拒绝所有将 “group”(或 “organization attribute”)
+设置为 `system:masters` 的请求。
### DefaultIngressClass {#defaultingressclass}
@@ -266,8 +265,8 @@ ingress class and automatically adds a default ingress class to them. This way,
request any special ingress class do not need to care about them at all and they will get the
default one.
-->
-该准入控制器监测没有请求任何特定 Ingress 类的 `Ingress` 对象的创建,并自动向其添加默认 Ingress 类。
-这样,没有任何特殊 Ingress 类需求的用户根本不需要关心它们,它们将获得默认 Ingress 类。
+该准入控制器监测没有请求任何特定 Ingress 类的 `Ingress` 对象创建请求,并自动向其添加默认 Ingress 类。
+这样,没有任何特殊 Ingress 类需求的用户根本不需要关心它们,他们将被设置为默认 Ingress 类。
-当未配置默认 Ingress 类时,此准入控制器不执行任何操作。如果将多个 Ingress 类标记为默认 Ingress 类,
-它将拒绝任何创建 `Ingress` 的操作,并显示错误。
-要修复此错误,管理员必须重新检查其 `IngressClass` 对象,并仅将其中一个标记为默认(通过注解
-"ingressclass.kubernetes.io/is-default-class")。
-此准入控制器会忽略所有 `Ingress` 更新操作,仅响应创建操作。
+当未配置默认 Ingress 类时,此准入控制器不执行任何操作。如果有多个 Ingress 类被标记为默认 Ingress 类,
+此控制器将拒绝所有创建 `Ingress` 的操作,并返回错误信息。
+要修复此错误,管理员必须重新检查其 `IngressClass` 对象,并仅将其中一个标记为默认
+(通过注解 "ingressclass.kubernetes.io/is-default-class")。
+此准入控制器会忽略所有 `Ingress` 更新操作,仅处理创建操作。
关于 Ingress 类以及如何将 Ingress 类标记为默认的更多信息,请参见
-[ingress](/zh/docs/concepts/services-networking/ingress/)。
+[Ingress](/zh/docs/concepts/services-networking/ingress/) 页面。
### DefaultStorageClass {#defaultstorageclass}
@@ -297,9 +296,9 @@ and automatically adds a default storage class to them.
This way, users that do not request any special storage class do not need to care about them at all and they
will get the default one.
-->
-该准入控制器监测没有请求任何特定存储类的 `PersistentVolumeClaim` 对象的创建,
+此准入控制器监测没有请求任何特定存储类的 `PersistentVolumeClaim` 对象的创建请求,
并自动向其添加默认存储类。
-这样,没有任何特殊存储类需求的用户根本不需要关心它们,它们将获得默认存储类。
+这样,没有任何特殊存储类需求的用户根本不需要关心它们,它们将被设置为使用默认存储类。
当未配置默认存储类时,此准入控制器不执行任何操作。如果将多个存储类标记为默认存储类,
-它将拒绝任何创建 `PersistentVolumeClaim` 的操作,并显示错误。
-要修复此错误,管理员必须重新访问其 `StorageClass` 对象,并仅将其中一个标记为默认。
-此准入控制器会忽略所有 `PersistentVolumeClaim` 更新操作,仅响应创建操作。
+此控制器将拒绝所有创建 `PersistentVolumeClaim` 的请求,并返回错误信息。
+要修复此错误,管理员必须重新检查其 `StorageClass` 对象,并仅将其中一个标记为默认。
+此准入控制器会忽略所有 `PersistentVolumeClaim` 更新操作,仅处理创建操作。
-关于持久化卷和存储类,以及如何将存储类标记为默认,请参见
-[持久化卷](/zh/docs/concepts/storage/persistent-volumes/)。
+关于持久卷申领和存储类,以及如何将存储类标记为默认,请参见[持久卷](/zh/docs/concepts/storage/persistent-volumes/)页面。
### DefaultTolerationSeconds {#defaulttolerationseconds}
-该准入控制器基于 k8s-apiserver 输入参数 `default-not-ready-toleration-seconds` 和
+此准入控制器基于 k8s-apiserver 的输入参数 `default-not-ready-toleration-seconds` 和
`default-unreachable-toleration-seconds` 为 Pod 设置默认的容忍度,以容忍 `notready:NoExecute` 和
-`unreachable:NoExecute` 污点。
+`unreachable:NoExecute` 污点
(如果 Pod 尚未容忍 `node.kubernetes.io/not-ready:NoExecute` 和
-`node.kubernetes.io/unreachable:NoExecute` 污点的话)
-`default-not-ready-toleration-seconds` 和 `default-unreachable-toleration-seconds` 的默认值是 5 分钟。
+`node.kubernetes.io/unreachable:NoExecute` 污点的话)。
+`default-not-ready-toleration-seconds` 和 `default-unreachable-toleration-seconds`
+的默认值是 5 分钟。
### DenyEscalatingExec {#denyescalatingexec}
@@ -345,9 +344,9 @@ This admission controller will deny exec and attach commands to pods that run wi
allow host access. This includes pods that run as privileged, have access to the host IPC namespace, and
have access to the host PID namespace.
-->
-该准入控制器将拒绝在由于拥有升级特权,而具备访问宿主机能力的 Pod 中执行 exec 和
-attach 命令。这包括在特权模式运行的 Pod,可以访问主机 IPC 名字空间的 Pod,
-和访问主机 PID 名字空间的 Pod 。
+此准入控制器将拒绝在由于拥有提级特权而具备访问宿主机能力的 Pod 中执行 exec 和
+attach 命令。这类 Pod 包括在特权模式运行的 Pod、可以访问主机 IPC 名字空间的 Pod、
+和访问主机 PID 名字空间的 Pod。
-DenyExecOnPrivileged 准入插件已被废弃。
+DenyEscalatingExec 准入插件已被弃用。
建议使用基于策略的准入插件(例如 [PodSecurityPolicy](#podsecuritypolicy) 和自定义准入插件),
-该插件可以针对特定用户或名字空间,还可以防止创建权限过高的 Pod。
+这类插件可以针对特定用户或名字空间,还可以防止创建权限过高的 Pod。
### DenyExecOnPrivileged {#denyexeconprivileged}
@@ -368,14 +367,14 @@ DenyExecOnPrivileged 准入插件已被废弃。
-如果一个 pod 拥有一个特权容器,该准入控制器将拦截所有在该 pod 中执行 exec 命令的请求。
+如果一个 Pod 中存在特权容器,该准入控制器将拦截所有在该 Pod 中执行 exec 命令的请求。
此功能已合并至 [DenyEscalatingExec](#denyescalatingexec)。
-而 DenyExecOnPrivileged 准入插件已被废弃。
+而 DenyExecOnPrivileged 准入插件已被弃用。
建议使用基于策略的准入插件(例如 [PodSecurityPolicy](#podsecuritypolicy) 和自定义准入插件),
-该插件可以针对特定用户或名字空间,还可以防止创建权限过高的 Pod。
+这类插件可以针对特定用户或名字空间,还可以防止创建权限过高的 Pod。
-### DenyServiceExternalIPs
+### DenyServiceExternalIPs {#denyserviceexternalips}
-该准入控制器拒绝 `Service` 字段 `externalIPs` 的所有新规使用。 此功能非常强大(允许网络流量拦截),
-并且无法很好地受策略控制。 启用后,群集用户将无法创建使用 `externalIPs` 的新服务,也无法在现有
-`Service` 对象上向 `externalIPs` 添加新值。 `externalIPs` 的现有使用不受影响,用户可以从现有
-`Service` 对象上的 `externalIPs` 中删除值。
+此准入控制器拒绝新的 `Service` 中使用字段 `externalIPs`。
+此功能非常强大(允许网络流量拦截),并且无法很好地受策略控制。
+启用后,集群用户将无法创建使用 `externalIPs` 的新 `Service`,也无法在现有
+`Service` 对象上为 `externalIPs` 添加新值。
+`externalIPs` 的现有使用不受影响,用户可以在现有 `Service` 对象上从
+`externalIPs` 中删除值。
-大多数用户根本不需要此功能,集群管理员应考虑将其禁用。
-确实需要使用此功能的集群应考虑使用一些自定义策略来管理其的使用。
+大多数用户根本不需要此特性,集群管理员应考虑将其禁用。
+确实需要使用此特性的集群应考虑使用一些自定义策略来管理 `externalIPs` 的使用。
### EventRateLimit {#eventratelimit}
@@ -416,45 +417,30 @@ of it.
This admission controller mitigates the problem where the API server gets flooded by
event requests. The cluster admin can specify event rate limits by:
-->
-该准入控制器缓解了事件请求淹没 API 服务器的问题。集群管理员可以通过以下方式指定事件速率限制:
+此准入控制器缓解了事件请求淹没 API 服务器的问题。集群管理员可以通过以下方式指定事件速率限制:
* 启用 `EventRateLimit` 准入控制器;
-* 从文件中引用 `EventRateLimit` 配置文件,并提供给 API 服务器命令的
- `--admission-control-config-file` 标志:
+* 在通过 API 服务器的命令行标志 `--admission-control-config-file` 设置的文件中,
+ 引用 `EventRateLimit` 配置文件:
-{{< tabs name="eventratelimit_example" >}}
-{{% tab name="apiserver.config.k8s.io/v1" %}}
-```yaml
-apiVersion: apiserver.config.k8s.io/v1
-kind: AdmissionConfiguration
-plugins:
-- name: EventRateLimit
- path: eventconfig.yaml
-...
-```
-{{% /tab %}}
-{{% tab name="apiserver.k8s.io/v1alpha1" %}}
-```yaml
-# Deprecated in v1.17 in favor of apiserver.config.k8s.io/v1
-apiVersion: apiserver.k8s.io/v1alpha1
-kind: AdmissionConfiguration
-plugins:
-- name: EventRateLimit
- path: eventconfig.yaml
-...
-```
-{{% /tab %}}
-{{< /tabs >}}
+ ```yaml
+ apiVersion: apiserver.config.k8s.io/v1
+ kind: AdmissionConfiguration
+ plugins:
+ - name: EventRateLimit
+ path: eventconfig.yaml
+ ...
+ ```
-可以在配置中指定四种类型的限制:
+可以在配置中指定的限制有四种类型:
* `Server`: API 服务器收到的所有事件请求共享一个桶。
-* `Namespace`: 每个名字空间都有一个专用的桶。
-* `User`: 给每个用户都分配一个桶。
-* `SourceAndObject`: 根据事件的源和涉及对象的每种组合分配桶。
+* `Namespace`: 每个名字空间都对应一个专用的桶。
+* `User`: 为每个用户分配一个桶。
+* `SourceAndObject`: 根据事件的来源和涉及对象的各种组合分配桶。
-下面是一个配置示例 `eventconfig.yaml`:
+下面是一个针对此配置的 `eventconfig.yaml` 示例:
```yaml
apiVersion: eventratelimit.admission.k8s.io/v1alpha1
kind: Configuration
limits:
-- type: Namespace
- qps: 50
- burst: 100
- cacheSize: 2000
-- type: User
- qps: 10
- burst: 50
+ - type: Namespace
+ qps: 50
+ burst: 100
+ cacheSize: 2000
+ - type: User
+ qps: 10
+ burst: 50
```
详情请参见
-[事件速率限制提案](https://git.k8s.io/community/contributors/design-proposals/api-machinery/admission_control_event_rate_limit.md)。
+[EventRateLimit 配置 API 文档(v1alpha1)](/zh/docs/reference/config-api/apiserver-eventratelimit.v1alpha1/)。
### ExtendedResourceToleration {#extendedresourcetoleration}
@@ -503,30 +489,29 @@ name as the key. This admission controller, if enabled, automatically
adds tolerations for such taints to pods requesting extended resources, so users don't have to manually
add these tolerations.
-->
-该插件有助于创建可扩展资源的专用节点。
-如果运营商想创建可扩展资源的专用节点(如 GPU、FPGA 等),
-那他们应该以扩展资源名称作为键名,
+此插件有助于创建带有扩展资源的专用节点。
+如果运维人员想要创建带有扩展资源(如 GPU、FPGA 等)的专用节点,他们应该以扩展资源名称作为键名,
[为节点设置污点](/zh/docs/concepts/scheduling-eviction/taint-and-toleration/)。
-如果启用了该准入控制器,会将此类污点的容忍自动添加到请求扩展资源的 Pod 中,
-用户不必再手动添加这些容忍。
+如果启用了此准入控制器,会将此类污点的容忍度自动添加到请求扩展资源的 Pod 中,
+用户不必再手动添加这些容忍度。
### ImagePolicyWebhook {#imagepolicywebhook}
-ImagePolicyWebhook 准入控制器允许使用一个后端的 webhook 做出准入决策。
+ImagePolicyWebhook 准入控制器允许使用后端 Webhook 做出准入决策。
-#### 配置文件格式
+#### 配置文件格式 {#configuration-file-format}
-ImagePolicyWebhook 使用配置文件来为后端行为设置配置选项。该文件可以是 JSON 或 YAML,
+ImagePolicyWebhook 使用配置文件来为后端行为设置选项。该文件可以是 JSON 或 YAML,
并具有以下格式:
```yaml
@@ -534,7 +519,7 @@ imagePolicy:
kubeConfigFile: /path/to/kubeconfig/for/backend
# 以秒计的时长,控制批准请求的缓存时间
allowTTL: 50
- # 以秒计的时长,控制批准请求的缓存时间
+ # 以秒计的时长,控制拒绝请求的缓存时间
denyTTL: 50
# 以毫秒计的时长,控制重试间隔
retryBackoff: 500
@@ -545,11 +530,9 @@ imagePolicy:
-从文件中引用 ImagePolicyWebhook 的配置文件,并将其提供给 API 服务器命令标志
-`--admission-control-config-file`:
+在通过命令行标志 `--admission-control-config-file` 为 API 服务器提供的文件中,
+引用 ImagePolicyWebhook 配置文件:
-{{< tabs name="imagepolicywebhook_example1" >}}
-{{% tab name="apiserver.config.k8s.io/v1" %}}
```yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
@@ -558,27 +541,12 @@ plugins:
path: imagepolicyconfig.yaml
...
```
-{{% /tab %}}
-{{% tab name="apiserver.k8s.io/v1alpha1" %}}
-```yaml
-# v1.17 中已废弃以鼓励使用 apiserver.config.k8s.io/v1
-apiVersion: apiserver.k8s.io/v1alpha1
-kind: AdmissionConfiguration
-plugins:
-- name: ImagePolicyWebhook
- path: imagepolicyconfig.yaml
-...
-```
-{{% /tab %}}
-{{< /tabs >}}
-或者,你也可以直接将配置嵌入到文件中:
+或者,你也可以直接将配置嵌入到该文件中:
-{{< tabs name="imagepolicywebhook_example2" >}}
-{{% tab name="apiserver.config.k8s.io/v1" %}}
```yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
@@ -592,24 +560,6 @@ plugins:
retryBackoff: 500
defaultAllow: true
```
-{{% /tab %}}
-{{% tab name="apiserver.k8s.io/v1alpha1" %}}
-```yaml
-# v1.17 中已废弃以鼓励使用 apiserver.config.k8s.io/v1
-apiVersion: apiserver.k8s.io/v1alpha1
-kind: AdmissionConfiguration
-plugins:
-- name: ImagePolicyWebhook
- configuration:
- imagePolicy:
- kubeConfigFile:
- allowTTL: 50
- denyTTL: 50
- retryBackoff: 500
- defaultAllow: true
-```
-{{% /tab %}}
-{{< /tabs >}}
ImagePolicyWebhook 的配置文件必须引用
[kubeconfig](/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)
-格式的文件;该文件设置了到后端的连接参数。
-要求后端使用 TLS 进行通信。
+格式的文件;该文件用来设置与后端的连接。要求后端使用 TLS 进行通信。
-kubeconfig 文件的 cluster 字段需要指向远端服务,user 字段需要包含已返回的授权者。
+kubeconfig 文件的 `clusters` 字段需要指向远端服务,`users` 字段需要包含已返回的授权者。
#### 请求载荷
当面对一个准入决策时,API 服务器发送一个描述操作的 JSON 序列化的
`imagepolicy.k8s.io/v1alpha1` `ImageReview` 对象。
-该对象包含描述被审核容器的字段,以及所有匹配 `*.image-policy.k8s.io/*` 的
-Pod 注解。
+该对象包含描述被准入容器的字段,以及与 `*.image-policy.k8s.io/*` 匹配的所有 Pod 注解。
+{{ note }}
注意,Webhook API 对象与其他 Kubernetes API 对象一样受制于相同的版本控制兼容性规则。
-实现者应该知道对 alpha 对象的更宽松的兼容性,并检查请求的 "apiVersion" 字段,
+实现者应该知道对 alpha 对象兼容性是相对宽松的,并检查请求的 "apiVersion" 字段,
以确保正确的反序列化。
此外,API 服务器必须启用 `imagepolicy.k8s.io/v1alpha1` API 扩展组
(`--runtime-config=imagepolicy.k8s.io/v1alpha1=true`)。
+{{ /note }}
远程服务将填充请求的 `ImageReviewStatus` 字段,并返回允许或不允许访问的响应。
-响应体的 "spec" 字段会被忽略,并且可以省略。一个允许访问应答会返回:
+响应体的 `spec` 字段会被忽略,并且可以被省略。一个允许访问应答会返回:
```json
{
@@ -750,22 +711,25 @@ To disallow access, the service would return:
```
-更多的文档,请参阅 `imagepolicy.v1alpha1` API 对象和
-`plugin/pkg/admission/imagepolicy/admission.go`。
+更多的文档,请参阅 [`imagepolicy.v1alpha1` API](/zh/docs/reference/config-api/imagepolicy.v1alpha1/)。
-#### 使用注解进行扩展
+#### 使用注解进行扩展 {#extending-with-annotations}
一个 Pod 中匹配 `*.image-policy.k8s.io/*` 的注解都会被发送给 Webhook。
-这样做使得了解后端镜像策略的用户可以向它发送额外的信息,并为不同的后端实现
-接收不同的信息。
+这样做使得了解后端镜像策略的用户可以向它发送额外的信息,
+并让不同的后端实现接收不同的信息。
-* 在紧急情况下,请求 "break glass" 覆盖一个策略。
-* 从一个记录了 break-glass 的请求的 ticket 系统得到的一个 ticket 号码。
-* 向策略服务器提供一个提示,用于提供镜像的 imageID,以方便它进行查找。
+* 在紧急情况下,请求破例覆盖某个策略。
+* 从一个记录了破例的请求的工单(Ticket)系统得到的一个工单号码。
+* 向策略服务器提供提示信息,用于提供镜像的 imageID,以方便它进行查找。
在任何情况下,注解都是由用户提供的,并不会被 Kubernetes 以任何方式进行验证。
-在将来,如果一个注解确定将被广泛使用,它可能会被提升为 ImageReviewSpec 的一个命名字段。
-### LimitPodHardAntiAffinityTopology {#limitpodhardantiaffinitytopology}
+### LimitPodHardAntiAffinityTopology {#limitpodhardantiaffinitytopology}
-该准入控制器拒绝(定义了 `AntiAffinity` 拓扑键的)任何 Pod
-(`requiredDuringSchedulingRequiredDuringExecution` 中的
-`kubernetes.io/hostname` 除外)。
+此准入控制器拒绝定义了 `AntiAffinity` 拓扑键的任何 Pod
+(`requiredDuringSchedulingRequiredDuringExecution` 中的 `kubernetes.io/hostname` 除外)。
### LimitRanger {#limitranger}
-该准入控制器会观察传入的请求,并确保它不会违反 `Namespace` 中 `LimitRange`
-对象枚举的任何约束。
-如果你在 Kubernetes 部署中使用了 `LimitRange` 对象,则必须使用此准入控制器来
-执行这些约束。
-LimitRanger 还可以用于将默认资源请求应用到没有指定任何内容的 Pod;
-当前,默认的 LimitRanger 对 `default` 名字空间中的所有 Pod 都应用了
-0.1 CPU 的需求。
+此准入控制器会监测传入的请求,并确保请求不会违反 `Namespace` 中 `LimitRange` 对象所设置的任何约束。
+如果你在 Kubernetes 部署中使用了 `LimitRange` 对象,则必须使用此准入控制器来执行这些约束。
+LimitRanger 还可以用于将默认资源请求应用到没有设定资源约束的 Pod;
+当前,默认的 LimitRanger 对 `default` 名字空间中的所有 Pod 都设置 0.1 CPU 的需求。
请查看
-[limitRange 设计文档](https://git.k8s.io/community/contributors/design-proposals/resource-management/admission_control_limit_range.md)
-和 [LimitRange 例子](/zh/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)
-以了解更多细节。
+[limitRange API 文档](/zh/docs/reference/kubernetes-api/policy-resources/limit-range-v1/)和
+[LimitRange 例子](/zh/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)以了解更多细节。
-### MutatingAdmissionWebhook {#mutatingadmissionwebhook}
+### MutatingAdmissionWebhook {#mutatingadmissionwebhook}
-该准入控制器调用任何与请求匹配的变更 Webhook。匹配的 Webhook 将被串行调用。
-每一个 Webhook 都可以根据需要修改对象。
+此准入控制器调用任何与请求匹配的变更(Mutating) Webhook。匹配的 Webhook 将被顺序调用。
+每一个 Webhook 都可以自由修改对象。
`MutatingAdmissionWebhook`,顾名思义,仅在变更阶段运行。
@@ -841,42 +801,41 @@ If a webhook called by this has side effects (for example, decrementing quota) i
*must* have a reconciliation system, as it is not guaranteed that subsequent
webhooks or validating admission controllers will permit the request to finish.
-->
-如果由此准入控制器调用的 Webhook 有副作用(如降低配额),
-则它 *必须* 具有协调系统,因为不能保证后续的 Webhook 和验证准入控制器都会允许完成请求。
+如果由此准入控制器调用的 Webhook 有副作用(如:减少配额),
+则它 **必须** 具有协调系统,因为不能保证后续的 Webhook 和验证准入控制器都会允许完成请求。
如果你禁用了 MutatingAdmissionWebhook,那么还必须使用 `--runtime-config` 标志禁止
-`admissionregistration.k8s.io/v1` 组/版本中的 `MutatingWebhookConfiguration`
-对象(版本 >=1.9 时,这两个对象都是默认启用的)。
+`admissionregistration.k8s.io/v1` 组/版本中的 `MutatingWebhookConfiguration`,
+二者都是默认启用的。
-#### 谨慎编写和安装变更 webhook
+#### 谨慎编写和安装变更 webhook {#use-caution-when-authoring-and-installing-mutating-webhooks}
* 当用户尝试创建的对象与返回的对象不同时,用户可能会感到困惑。
-* 当它们回读的对象与尝试创建的对象不同,内建的控制环可能会出问题。
+* 当他们读回的对象与尝试创建的对象不同,内建的控制回路可能会出问题。
* 与覆盖原始请求中设置的字段相比,使用原始请求未设置的字段会引起问题的可能性较小。
- 应尽量避免前面那种方式。
-* 内建资源和第三方资源的控制回路未来可能会受到破坏性的更改,使现在运行良好的 Webhook
- 无法再正常运行。即使完成了 Webhook API 安装,也不代表会为该 webhook 提供无限期的支持。
+ 应尽量避免覆盖原始请求中的字段设置。
+* 内建资源和第三方资源的控制回路未来可能会出现破坏性的变更,使现在运行良好的 Webhook
+ 无法再正常运行。即使完成了 Webhook API 安装,也不代表该 Webhook 会被提供无限期的支持。
### NamespaceAutoProvision {#namespaceautoprovision}
@@ -887,9 +846,9 @@ It creates a namespace if it cannot be found.
This admission controller is useful in deployments that do not want to restrict creation of
a namespace prior to its usage.
-->
-该准入控制器会检查名字空间资源上的所有传入请求,并检查所引用的名字空间是否确实存在。
-如果找不到,它将创建一个名字空间。
-此准入控制器对于不想要求名字空间必须先创建后使用的集群部署中很有用。
+此准入控制器会检查针对名字空间域资源的所有传入请求,并检查所引用的名字空间是否确实存在。
+如果找不到所引用的名字空间,控制器将创建一个名字空间。
+此准入控制器对于不想要求名字空间必须先创建后使用的集群部署很有用。
### NamespaceExists {#namespaceexists}
@@ -897,26 +856,28 @@ a namespace prior to its usage.
This admission controller checks all requests on namespaced resources other than `Namespace` itself.
If the namespace referenced from a request doesn't exist, the request is rejected.
-->
-该准入控制器检查除 `Namespace` 以外的名字空间作用域资源上的所有请求。
+此准入控制器检查针对名字空间作用域的资源(除 `Namespace` 自身)的所有请求。
如果请求引用的名字空间不存在,则拒绝该请求。
### NamespaceLifecycle {#namespacelifecycle}
-该准入控制器禁止在一个正在被终止的 `Namespace` 中创建新对象,并确保
-使用不存在的 `Namespace` 的请求被拒绝。
+该准入控制器禁止在一个正在被终止的 `Namespace` 中创建新对象,并确保针对不存在的
+`Namespace` 的请求被拒绝。
该准入控制器还会禁止删除三个系统保留的名字空间,即 `default`、
`kube-system` 和 `kube-public`。
-删除 `Namespace` 会触发删除该名字空间中所有对象(Pod、Service 等)的一系列操作。
+`Namespace` 的删除操作会触发一系列删除该名字空间中所有对象(Pod、Service 等)的操作。
为了确保这个过程的完整性,我们强烈建议启用这个准入控制器。
### NodeRestriction {#noderestriction}
@@ -926,51 +887,52 @@ This admission controller limits the `Node` and `Pod` objects a kubelet can modi
kubelets must use credentials in the `system:nodes` group, with a username in the form `system:node:`.
Such kubelets will only be allowed to modify their own `Node` API object, and only modify `Pod` API objects that are bound to their node.
-->
-该准入控制器限制了 kubelet 可以修改的 `Node` 和 `Pod` 对象。
+该准入控制器限制了某 kubelet 可以修改的 `Node` 和 `Pod` 对象。
为了受到这个准入控制器的限制,kubelet 必须使用在 `system:nodes` 组中的凭证,
并使用 `system:node:` 形式的用户名。
-这样,kubelet 只可修改自己的 `Node` API 对象,只能修改绑定到节点本身的 Pod 对象。
+这样,kubelet 只可修改自己的 `Node` API 对象,只能修改绑定到自身节点的 Pod 对象。
-在 Kubernetes 1.11+ 的版本中,不允许 kubelet 从 `Node` API 对象中更新或删除污点。
+不允许 kubelet 更新或删除 `Node` API 对象的污点。
-在 Kubernetes 1.13+ 的版本中,`NodeRestriction` 准入插件可防止 kubelet 删除
-`Node` API 对象,并对 `kubernetes.io/` 或 `k8s.io/` 前缀标签的 kubelet
-强制进行如下修改:
+`NodeRestriction` 准入插件可防止 kubelet 删除其 `Node` API 对象,
+并对前缀为 `kubernetes.io/` 或 `k8s.io/` 的标签的修改对 kubelet 作如下限制:
-* **防止** kubelet 添加/删除/更新带有 `node-restriction.kubernetes.io/` 前缀的标签。
- 保留此前缀的标签,供管理员用来标记 Node 对象以隔离工作负载,并且不允许 kubelet
+* **禁止** kubelet 添加、删除或更新前缀为 `node-restriction.kubernetes.io/` 的标签。
+ 这类前缀的标签时保留给管理员的,用以为 `Node` 对象设置标签以隔离工作负载,而不允许 kubelet
修改带有该前缀的标签。
-* **允许** kubelet 添加/删除/更新这些和这些前缀的标签:
+* **允许** kubelet 添加、删除、更新以下标签:
* `kubernetes.io/hostname`
* `kubernetes.io/arch`
* `kubernetes.io/os`
* `beta.kubernetes.io/instance-type`
* `node.kubernetes.io/instance-type`
* `failure-domain.beta.kubernetes.io/region` (已弃用)
- * `failure-domain.beta.kubernetes.io/zone` (已弃用)
+ * `failure-domain.beta.kubernetes.io/zone` (已弃用)
* `topology.kubernetes.io/region`
* `topology.kubernetes.io/zone`
- * `kubelet.kubernetes.io/`-prefixed labels
- * `node.kubernetes.io/`-prefixed labels
+ * `kubelet.kubernetes.io/` 为前缀的标签
+ * `node.kubernetes.io/` 为前缀的标签
-kubelet 保留 `kubernetes.io` 或 `k8s.io` 前缀的所有标签,并且将来可能会被
+以 `kubernetes.io` 或 `k8s.io` 为前缀的所有其他标签都限制 kubelet 使用,并且将来可能会被
`NodeRestriction` 准入插件允许或禁止。
将来的版本可能会增加其他限制,以确保 kubelet 具有正常运行所需的最小权限集。
@@ -984,39 +946,32 @@ This admission controller also protects the access to `metadata.ownerReferences[
of an object, so that only users with "update" permission to the `finalizers`
subresource of the referenced *owner* can change it.
-->
-该准入控制器保护对 `metadata.ownerReferences` 对象的访问,以便只有对该对象具有
-“删除” 权限的用户才能对其进行更改。
+此准入控制器保护对对象的 `metadata.ownerReferences` 的访问,以便只有对该对象具有
+“delete” 权限的用户才能对其进行更改。
该准入控制器还保护对 `metadata.ownerReferences[x].blockOwnerDeletion` 对象的访问,
-以便只有对所引用的 **属主(owner)** 的 `finalizers` 子资源具有 “更新”
+以便只有对所引用的 **属主(owner)** 的 `finalizers` 子资源具有 “update”
权限的用户才能对其进行更改。
### PersistentVolumeClaimResize {#persistentvolumeclaimresize}
-
-该准入控制器检查传入的 `PersistentVolumeClaim` 调整大小请求,对其执行额外的验证操作。
-
-{{< note >}}
-
-对调整卷大小的支持是一种 Beta 特性。作为集群管理员,你必须确保特性门控 `ExpandPersistentVolumes`
-设置为 `true` 才能启用调整大小。
-{{< /note >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
+此准入控制器检查传入的 `PersistentVolumeClaim` 调整大小请求,对其执行额外的验证检查操作。
+
+
-启用 `ExpandPersistentVolumes` 特性门控之后,建议将 `PersistentVolumeClaimResize`
-准入控制器也启用。除非 PVC 的 `StorageClass` 明确地将 `allowVolumeExpansion` 设置为
-`true` 来显式启用调整大小。否则,默认情况下该准入控制器会阻止所有对 PVC 大小的调整。
+建议启用 `PersistentVolumeClaimResize` 准入控制器。除非 PVC 的 `StorageClass` 明确地将
+`allowVolumeExpansion` 设置为 `true` 来显式启用调整大小。
+否则,默认情况下该准入控制器会阻止所有对 PVC 大小的调整。
例如:由以下 `StorageClass` 创建的所有 `PersistentVolumeClaim` 都支持卷容量扩充:
@@ -1038,7 +993,7 @@ allowVolumeExpansion: true
For more information about persistent volume claims, see [PersistentVolumeClaims](/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims).
-->
关于持久化卷申领的更多信息,请参见
-[PersistentVolumeClaims](/zh/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)。
+[PersistentVolumeClaim](/zh/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)。
### PersistentVolumeLabel {#persistentvolumelabel}
@@ -1052,15 +1007,15 @@ region and/or zone.
If the admission controller doesn't support automatic labelling your PersistentVolumes, you
may need to add the labels manually to prevent pods from mounting volumes from
a different zone. PersistentVolumeLabel is DEPRECATED and labeling persistent volumes has been taken over by
-[cloud controller manager](/docs/tasks/administer-cluster/running-cloud-controller/).
+the {{< glossary_tooltip text="cloud-controller-manager" term_id="cloud-controller-manager" >}}.
Starting from 1.11, this admission controller is disabled by default.
-->
-该准入控制器会自动将区(region)或区域(zone)标签附加到由云提供商(如 GCE、AWS)
-定义的 PersistentVolume。这有助于确保 Pod 和 PersistentVolume 位于相同的区或区域。
+此准入控制器会自动将由云提供商(如 GCE、AWS)定义的区(region)或区域(zone)
+标签附加到 PersistentVolume 上。这有助于确保 Pod 和 PersistentVolume 位于相同的区或区域。
如果准入控制器不支持为 PersistentVolumes 自动添加标签,那你可能需要手动添加标签,
以防止 Pod 挂载其他区域的卷。
-PersistentVolumeLabel 已被废弃,标记持久卷已由
-[云管理控制器](/zh/docs/tasks/administer-cluster/running-cloud-controller/)接管。
+PersistentVolumeLabel 已被弃用,为持久卷添加标签的操作已由
+{{< glossary_tooltip text="云管理控制器" term_id="cloud-controller-manager" >}}接管。
从 1.11 开始,默认情况下禁用此准入控制器。
### PodNodeSelector {#podnodeselector}
@@ -1068,70 +1023,56 @@ PersistentVolumeLabel 已被废弃,标记持久卷已由
{{< feature-state for_k8s_version="v1.5" state="alpha" >}}
-该准入控制器通过读取名字空间注解和全局配置,来为名字空间中可以使用的节点选择器
-设置默认值并实施限制。
+此准入控制器通过读取名字空间注解和全局配置,来为名字空间中可以使用的节点选择器设置默认值并实施限制。
-#### 配置文件格式
+#### 配置文件格式 {#configuration-file-format-podnodeselector}
-`PodNodeSelector` 使用配置文件来设置后端行为的选项。
-请注意,配置文件格式将在将来某个版本中改为版本化文件。
+`PodNodeSelector` 使用配置文件来设置后端行为的选项。请注意,配置文件格式将在将来某个版本中改为版本化文件。
该文件可以是 JSON 或 YAML,格式如下:
```yaml
podNodeSelectorPluginConfig:
- clusterDefaultNodeSelector: name-of-node-selector
- namespace1: name-of-node-selector
- namespace2: name-of-node-selector
+ clusterDefaultNodeSelector: name-of-node-selector
+ namespace1: name-of-node-selector
+ namespace2: name-of-node-selector
```
-基于提供给 API 服务器命令行标志 `--admission-control-config-file` 的文件名,
-从文件中引用 `PodNodeSelector` 配置文件:
+通过 API 服务器命令行标志 `--admission-control-config-file` 为 API 服务器提供的文件中,
+需要引用 `PodNodeSelector` 配置文件:
-{{< tabs name="podnodeselector_example1" >}}
-{{% tab name="apiserver.config.k8s.io/v1" %}}
```yaml
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
-- name: PodNodeSelector
- path: podnodeselector.yaml
+ - name: PodNodeSelector
+ path: podnodeselector.yaml
...
```
-{{% /tab %}}
-{{% tab name="apiserver.k8s.io/v1alpha1" %}}
-```yaml
-# 在 v1.17 中废弃,以鼓励使用 apiserver.config.k8s.io/v1
-apiVersion: apiserver.k8s.io/v1alpha1
-kind: AdmissionConfiguration
-plugins:
-- name: PodNodeSelector
- path: podnodeselector.yaml
-...
-```
-{{% /tab %}}
-{{< /tabs >}}
-#### 配置注解格式
+#### 配置注解格式 {#configuration-annotation-format}
-`PodNodeSelector` 使用键为 `scheduler.alpha.kubernetes.io/node-selector` 的注解
-为名字空间设置节点选择算符。
+`PodNodeSelector` 使用键为 `scheduler.alpha.kubernetes.io/node-selector`
+的注解为名字空间设置节点选择算符。
```yaml
apiVersion: v1
@@ -1144,28 +1085,30 @@ metadata:
-#### 内部行为
+#### 内部行为 {#internal-behavior}
-该准入控制器行为如下:
+此准入控制器行为如下:
1. 如果 `Namespace` 的注解带有键 `scheduler.alpha.kubernetes.io/node-selector`,
则将其值用作节点选择算符。
2. 如果名字空间缺少此类注解,则使用 `PodNodeSelector` 插件配置文件中定义的
`clusterDefaultNodeSelector` 作为节点选择算符。
-3. 评估 Pod 节点选择算符和名字空间节点选择算符是否存在冲突。存在冲突将导致拒绝。
+3. 评估 Pod 节点选择算符和名字空间节点选择算符是否存在冲突。存在冲突将拒绝 Pod。
4. 评估 Pod 节点选择算符和特定于名字空间的被允许的选择算符所定义的插件配置文件是否存在冲突。
- 存在冲突将导致拒绝。
+ 存在冲突将导致拒绝 Pod。
{{< note >}}
-这是下节已被废弃的 [PodSecurityPolicy](#podsecuritypolicy) 准入控制器的替代品。
-此准入控制器负责在创建和修改 Pod 时根据请求的安全上下文和
+这是下节所讨论的已被废弃的 [PodSecurityPolicy](#podsecuritypolicy) 准入控制器的替代品。
+此准入控制器负责在创建和修改 Pod 时,根据请求的安全上下文和
[Pod 安全标准](/zh/docs/concepts/security/pod-security-standards/)
来确定是否可以执行请求。
@@ -1212,31 +1155,33 @@ See also the [PodSecurityPolicy](/docs/concepts/security/pod-security-policy/) d
for more information.
-->
查看 [Pod 安全策略文档](/zh/docs/concepts/security/pod-security-policy/)
-了解更多细节。
+进一步了解其间细节。
### PodTolerationRestriction {#podtolerationrestriction}
{{< feature-state for_k8s_version="v1.7" state="alpha" >}}
-准入控制器 PodTolerationRestriction 检查 Pod 的容忍度与其名字空间的容忍度之间
-是否存在冲突。如果存在冲突,则拒绝 Pod 请求。
-然后,它将名字空间的容忍度合并到 Pod 的容忍度中,之后根据名字空间的容忍度
-白名单检查所得到的容忍度结果。如果检查成功,则将接受 Pod 请求,否则拒绝该请求。
+准入控制器 PodTolerationRestriction 检查 Pod 的容忍度与其名字空间的容忍度之间是否存在冲突。
+如果存在冲突,则拒绝 Pod 请求。
+控制器接下来会将名字空间的容忍度合并到 Pod 的容忍度中,
+根据名字空间的容忍度白名单检查所得到的容忍度结果。
+如果检查成功,则将接受 Pod 请求,否则拒绝该请求。
-如果 Pod 的名字空间没有任何关联的默认容忍度或容忍度白名单,则使用集群级别的
-默认容忍度或容忍度白名单(如果有的话)。
+如果 Pod 的名字空间没有任何关联的默认容忍度或容忍度白名单,
+则使用集群级别的默认容忍度或容忍度白名单(如果有的话)。
-名字空间的容忍度通过注解健 `scheduler.alpha.kubernetes.io/defaultTolerations`
+名字空间的容忍度通过注解键 `scheduler.alpha.kubernetes.io/defaultTolerations`
来设置。可接受的容忍度可以通过 `scheduler.alpha.kubernetes.io/tolerationsWhitelist`
注解键来添加。
@@ -1263,7 +1208,9 @@ metadata:
### 优先级 {#priority}
@@ -1273,21 +1220,22 @@ The priority admission controller uses the `priorityClassName` field and populat
### ResourceQuota {#resourcequota}
-该准入控制器会监测传入的请求,并确保它不违反任何一个 `Namespace` 中的 `ResourceQuota`
-对象中枚举出来的约束。
-如果你在 Kubernetes 部署中使用了 `ResourceQuota`,你必须使用这个准入控制器来强制
-执行配额限制。
+此准入控制器会监测传入的请求,并确保它不违反任何一个 `Namespace` 中的 `ResourceQuota`
+对象中列举的约束。如果你在 Kubernetes 部署中使用了 `ResourceQuota`,
+则必须使用这个准入控制器来强制执行配额限制。
-请查看
-[resourceQuota 设计文档](https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md)和 [Resource Quota 例子](/zh/docs/concepts/policy/resource-quotas/)
-了解更多细节。
+请参阅
+[resourceQuota API 参考](/zh/docs/reference/kubernetes-api/policy-resources/resource-quota-v1/)
+和 [Resource Quota 例子](/zh/docs/concepts/policy/resource-quotas/)了解更多细节。
### RuntimeClass {#runtimeclass}
-+{{< feature-state for_k8s_version="v1.20" state="stable" >}}
+{{< feature-state for_k8s_version="v1.20" state="stable" >}}
-如果你开启 `PodOverhead`
-[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
-并且通过 [Pod 开销](/zh/docs/concepts/scheduling-eviction/pod-overhead/)
-配置来定义一个 RuntimeClass,这个准入控制器会检查新的 Pod。
-当启用的时候,这个准入控制器会拒绝任何 overhead 字段已经设置的 Pod。
+如果你所定义的 RuntimeClass 包含 [Pod 开销](/zh/docs/concepts/scheduling-eviction/pod-overhead/),
+这个准入控制器会检查新的 Pod。被启用后,此准入控制器会拒绝所有已经设置了 overhead 字段的 Pod 创建请求。
对于配置了 RuntimeClass 并在其 `.spec` 中选定 RuntimeClass 的 Pod,
此准入控制器会根据相应 RuntimeClass 中定义的值为 Pod 设置 `.spec.overhead`。
-{{< note >}}
-Pod 的 `.spec.overhead` 字段和 RuntimeClass 的 `.overhead` 字段均为处于 beta 版本。
-如果你未启用 `PodOverhead` 特性门控,则所有 Pod 均被视为未设置 `.spec.overhead`。
-{{< /note >}}
-
详情请参见 [Pod 开销](/zh/docs/concepts/scheduling-eviction/pod-overhead/)。
### SecurityContextDeny {#securitycontextdeny}
@@ -1340,14 +1280,13 @@ then you could use this admission controller to restrict the set of values a sec
See [Pod Security Standards](/docs/concepts/security/pod-security-standards/) for more context on restricting
pod privileges.
-->
-该准入控制器将拒绝任何试图设置特定提升
+此准入控制器将拒绝任何试图设置特定提升
[SecurityContext](/zh/docs/tasks/configure-pod-container/security-context/)
-字段的 Pod,正如任务
-[为 Pod 或 Container 配置安全上下文](/zh/docs/tasks/configure-pod-container/security-context/)
-中所展示的那样。
-如果集群没有使用 [Pod 安全性准入](/zh/docs/concepts/security/pod-security-admission/)、
-[PodSecurityPolicies](/zh/docs/concepts/security/pod-security-policy/),
-也没有任何外部执行机制,那么你可以使用此准入控制器来限制安全上下文所能获取的值集。
+中某些字段的 Pod,正如任务[为 Pod 或 Container 配置安全上下文](/zh/docs/tasks/configure-pod-container/security-context/)
+中所展示的那样。如果集群没有使用
+[Pod 安全性准入](/zh/docs/concepts/security/pod-security-admission/)、
+[PodSecurityPolicy](/zh/docs/concepts/security/pod-security-policy/),
+也没有任何外部强制机制,那么你可以使用此准入控制器来限制安全上下文所能获取的值集。
有关限制 Pod 权限的更多内容,请参阅
[Pod 安全标准](/zh/docs/concepts/security/pod-security-standards/)。
@@ -1357,14 +1296,15 @@ pod privileges.
此准入控制器实现了
[ServiceAccount](/zh/docs/tasks/configure-pod-container/configure-service-account/)
的自动化。
如果你打算使用 Kubernetes 的 ServiceAccount 对象,我们强烈建议你使用这个准入控制器。
-### StorageObjectInUseProtection
+### StorageObjectInUseProtection {#storageobjectinuseprotection}
`StorageObjectInUseProtection` 插件将 `kubernetes.io/pvc-protection` 或
-`kubernetes.io/pv-protection` finalizers 添加到新创建的持久化卷声明(PVC)
-或持久化卷(PV)中。
-如果用户尝试删除 PVC/PV,除非 PVC/PV 的保护控制器移除 finalizers,否则
-PVC/PV 不会被删除。
-有关更多详细信息,请参考
+`kubernetes.io/pv-protection` finalizers 添加到新创建的持久卷申领(PVC)
+或持久卷(PV)中。如果用户尝试删除 PVC/PV,除非 PVC/PV 的保护控制器移除 finalizers,
+否则 PVC/PV 不会被删除。有关更多详细信息,请参考
[保护使用中的存储对象](/zh/docs/concepts/storage/persistent-volumes/#storage-object-in-use-protection)。
-### TaintNodesByCondition {#taintnodesbycondition}
+### TaintNodesByCondition {#taintnodesbycondition}
{{< feature-state for_k8s_version="v1.17" state="stable" >}}
-该准入控制器为新创建的节点添加 `NotReady` 和 `NoSchedule`
-{{< glossary_tooltip text="污点" term_id="taint" >}}。
-这些污点能够避免一些竞态条件的发生,这类静态条件可能导致 Pod 在更新节点污点以准确
-反映其所报告状况之前,就被调度到新节点上。
+该准入控制器为新创建的节点添加 `NotReady` 和 `NoSchedule` {{< glossary_tooltip text="污点" term_id="taint" >}}。
+这些污点能够避免一些竞态条件的发生,而这类竞态条件可能导致 Pod
+在更新节点污点以准确反映其所报告状况之前,就被调度到新节点上。
### ValidatingAdmissionWebhook {#validatingadmissionwebhook}
@@ -1403,18 +1343,18 @@ webhooks are called in parallel; if any of them rejects the request, the request
fails. This admission controller only runs in the validation phase; the webhooks it calls may not
mutate the object, as opposed to the webhooks called by the `MutatingAdmissionWebhook` admission controller.
-->
-该准入控制器调用与请求匹配的所有验证 Webhook。
+此准入控制器调用与请求匹配的所有验证性 Webhook。
匹配的 Webhook 将被并行调用。如果其中任何一个拒绝请求,则整个请求将失败。
-该准入控制器仅在验证(Validating)阶段运行;与 `MutatingAdmissionWebhook` 准入控制器
-所调用的 Webhook 相反,它调用的 Webhook 应该不会使对象出现变更。
+该准入控制器仅在验证(Validating)阶段运行;与 `MutatingAdmissionWebhook`
+准入控制器所调用的 Webhook 相反,它调用的 Webhook 不可以变更对象。
-如果以此方式调用的 Webhook 有其它作用(如,降低配额),则它必须具有协调机制。
-这是因为无法保证后续的 Webhook 或其他有效的准入控制器都允许请求完成。
+如果以此方式调用的 Webhook 有其它副作用(如:减少配额),则它必须具有协调机制。
+这是因为无法保证后续的 Webhook 或其他验证性准入控制器都允许请求完成。
如果你禁用了 ValidatingAdmissionWebhook,还必须通过 `--runtime-config` 标志来禁用
-`admissionregistration.k8s.io/v1` 组/版本中的 `ValidatingWebhookConfiguration`
-对象(默认情况下在 1.9 版和更高版本中均处于启用状态)。
-
+`admissionregistration.k8s.io/v1` 组/版本中的 `ValidatingWebhookConfiguration`
+对象(默认情况下在 v1.9 和更高版本中均处于启用状态)。
## 有推荐的准入控制器吗?
@@ -1439,10 +1382,3 @@ Yes. The recommended admission controllers are enabled by default (shown [here](
因此,你无需显式指定它们。
你可以使用 `--enable-admission-plugins` 标志( **顺序不重要** )来启用默认设置以外的其他准入控制器。
-{{< note >}}
-
-`--admission-control` 在 1.10 中已废弃,由 `--enable-admission-plugins` 取代。
-{{< /note >}}
-
diff --git a/content/zh/docs/reference/access-authn-authz/authentication.md b/content/zh/docs/reference/access-authn-authz/authentication.md
index 2961b2f0ba..5bde8a2a40 100644
--- a/content/zh/docs/reference/access-authn-authz/authentication.md
+++ b/content/zh/docs/reference/access-authn-authz/authentication.md
@@ -51,11 +51,11 @@ Kubernetes 假定普通用户是由一个与集群无关的服务通过以下方
普通用户的信息无法通过 API 调用添加到集群中。
@@ -857,116 +857,199 @@ current-context: webhook
contexts:
- context:
cluster: name-of-remote-authn-service
- user: name-of-api-sever
+ user: name-of-api-server
name: webhook
```
当客户端尝试在 API 服务器上使用持有者令牌完成身份认证(
如[前](#putting-a-bearer-token-in-a-request)所述)时,
身份认证 Webhook 会用 POST 请求发送一个 JSON 序列化的对象到远程服务。
-该对象是 `authentication.k8s.io/v1beta1` 组的 `TokenReview` 对象,
+该对象是 `TokenReview` 对象,
其中包含持有者令牌。
Kubernetes 不会强制请求提供此 HTTP 头部。
要注意的是,Webhook API 对象和其他 Kubernetes API 对象一样,也要受到同一
[版本兼容规则](/zh/docs/concepts/overview/kubernetes-api/)约束。
-实现者要了解对 Beta 阶段对象的兼容性承诺,并检查请求的 `apiVersion` 字段,
-以确保数据结构能够正常反序列化解析。此外,API 服务器必须启用
-`authentication.k8s.io/v1beta1` API 扩展组
-(`--runtime-config=authentication.k8s.io/v1beta1=true`)。
+实现者应检查请求的 `apiVersion` 字段以确保正确的反序列化,
+并且**必须**以与请求相同版本的 `TokenReview` 对象进行响应。
-POST 请求的 Body 部分将是如下格式:
+{{< tabs name="TokenReview_request" >}}
+{{% tab name="authentication.k8s.io/v1" %}}
+{{< note >}}
+Kubernetes API 服务器默认发送 `authentication.k8s.io/v1beta1` 令牌以实现向后兼容性。
+要选择接收 `authentication.k8s.io/v1` 令牌认证,API 服务器必须以 `--authentication-token-webhook-version=v1` 启动。
+{{< /note >}}
+
+```yaml
+{
+ "apiVersion": "authentication.k8s.io/v1",
+ "kind": "TokenReview",
+ "spec": {
+ # 发送到 API 服务器的不透明持有者令牌
+ "token": "014fbff9a07c...",
+
+ # 提供令牌的服务器的受众标识符的可选列表。
+ # 受众感知令牌验证器(例如,OIDC 令牌验证器)
+ # 应验证令牌是否针对此列表中的至少一个受众,
+ # 并返回此列表与响应状态中令牌的有效受众的交集。
+ # 这确保了令牌对于向其提供给的服务器进行身份验证是有效的。
+ # 如果未提供受众,则应验证令牌以向 Kubernetes API 服务器进行身份验证。
+ "audiences": ["https://myserver.example.com", "https://myserver.internal.example.com"]
+ }
+}
+```
+{{% /tab %}}
+{{% tab name="authentication.k8s.io/v1beta1" %}}
+```yaml
{
"apiVersion": "authentication.k8s.io/v1beta1",
"kind": "TokenReview",
"spec": {
- "token": "(BEARERTOKEN)"
- }
-}
-```
--->
-```json
-{
- "apiVersion": "authentication.k8s.io/v1beta1",
- "kind": "TokenReview",
- "spec": {
- "token": "<持有者令牌>"
+ # 发送到 API 服务器的不透明匿名令牌
+ "token": "014fbff9a07c...",
+
+ # 提供令牌的服务器的受众标识符的可选列表。
+ # 受众感知令牌验证器(例如,OIDC 令牌验证器)
+ # 应验证令牌是否针对此列表中的至少一个受众,
+ # 并返回此列表与响应状态中令牌的有效受众的交集。
+ # 这确保了令牌对于向其提供给的服务器进行身份验证是有效的。
+ # 如果未提供受众,则应验证令牌以向 Kubernetes API 服务器进行身份验证。
+ "audiences": ["https://myserver.example.com", "https://myserver.internal.example.com"]
}
}
```
+{{% /tab %}}
+{{< /tabs >}}
-远程服务应该会填充请求的 `status` 字段,以标明登录操作是否成功。
-响应的 Body 中的 `spec` 字段会被忽略,因此可以省略。
-如果持有者令牌验证成功,应该返回如下所示的响应:
+远程服务预计会填写请求的 `status` 字段以指示登录成功。
+响应正文的 `spec` 字段被忽略并且可以省略。
+远程服务必须使用它收到的相同 `TokenReview` API 版本返回响应。
+承载令牌的成功验证将返回:
-```json
+{{< tabs name="TokenReview_response_success" >}}
+{{% tab name="authentication.k8s.io/v1" %}}
+```yaml
{
- "apiVersion": "authentication.k8s.io/v1beta1",
+ "apiVersion": "authentication.k8s.io/v1",
"kind": "TokenReview",
"status": {
"authenticated": true,
"user": {
+ # 必要
"username": "janedoe@example.com",
+ # 可选
"uid": "42",
- "groups": [
- "developers",
- "qa"
- ],
+ # 可选的组成员身份
+ "groups": ["developers", "qa"],
+ # 认证者提供的可选附加信息。
+ # 此字段不可包含机密数据,因为这类数据可能被记录在日志或 API 对象中,
+ # 并且可能传递给 admission webhook。
"extra": {
"extrafield1": [
"extravalue1",
"extravalue2"
]
}
- }
+ },
+ # 验证器可以返回的、可选的用户感知令牌列表,
+ # 包含令牌对其有效的、包含于 `spec.audiences` 列表中的受众。
+ # 如果省略,则认为该令牌可用于对 Kubernetes API 服务器进行身份验证。
+ "audiences": ["https://myserver.example.com"]
}
}
```
+{{% /tab %}}
+{{% tab name="authentication.k8s.io/v1beta1" %}}
+```yaml
+{
+ "apiVersion": "authentication.k8s.io/v1beta1",
+ "kind": "TokenReview",
+ "status": {
+ "authenticated": true,
+ "user": {
+ # 必要
+ "username": "janedoe@example.com",
+ # 可选
+ "uid": "42",
+ # 可选的组成员身份
+ "groups": ["developers", "qa"],
+ # 认证者提供的可选附加信息。
+ # 此字段不可包含机密数据,因为这类数据可能被记录在日志或 API 对象中,
+ # 并且可能传递给 admission webhook。
+ "extra": {
+ "extrafield1": [
+ "extravalue1",
+ "extravalue2"
+ ]
+ }
+ },
+ # 验证器可以返回的、可选的用户感知令牌列表,
+ # 包含令牌对其有效的、包含于 `spec.audiences` 列表中的受众。
+ # 如果省略,则认为该令牌可用于对 Kubernetes API 服务器进行身份验证。
+ "audiences": ["https://myserver.example.com"]
+ }
+}
+```
+{{% /tab %}}
+{{< /tabs >}}
而不成功的请求会返回:
-```json
+{{< tabs name="TokenReview_response_error" >}}
+{{% tab name="authentication.k8s.io/v1" %}}
+```yaml
+{
+ "apiVersion": "authentication.k8s.io/v1",
+ "kind": "TokenReview",
+ "status": {
+ "authenticated": false,
+ # 可选地包括有关身份验证失败原因的详细信息。
+ # 如果没有提供错误信息,API 将返回一个通用的 Unauthorized 消息。
+ # 当 authenticated=true 时,error 字段被忽略。
+ "error": "Credentials are expired"
+ }
+}
+```
+{{% /tab %}}
+{{% tab name="authentication.k8s.io/v1beta1" %}}
+```yaml
{
"apiVersion": "authentication.k8s.io/v1beta1",
"kind": "TokenReview",
"status": {
- "authenticated": false
+ "authenticated": false,
+ # 可选地包括有关身份验证失败原因的详细信息。
+ # 如果没有提供错误信息,API 将返回一个通用的 Unauthorized 消息。
+ # 当 authenticated=true 时,error 字段被忽略。
+ "error": "Credentials are expired"
}
}
```
-
-
-HTTP 状态码可用来提供进一步的错误语境信息。
-
+{{% /tab %}}
+{{< /tabs >}}
* `--requestheader-username-headers` 必需字段,大小写不敏感。用来设置要获得用户身份所要检查的头部字段名称列表(有序)。第一个包含数值的字段会被用来提取用户名。
* `--requestheader-group-headers` 可选字段,在 Kubernetes 1.6 版本以后支持,大小写不敏感。
@@ -1096,7 +1179,7 @@ passing the `--anonymous-auth=true` option to the API server.
-在 v1.16+ 中,kube-apiserver 针对每个修改性质的 Webhook 调用执行
-[审计](/zh/docs/tasks/debug-application-cluster/audit/)操作。
+在 v1.16+ 中,kube-apiserver 针对每个修改性质的 Webhook 调用执行[审计](/zh/docs/tasks/debug/debug-cluster/audit/)操作。
每个调用都会生成一个审计注解,记述请求对象是否发生改变,
可选地还可以根据 webhook 的准入响应生成一个注解,记述所应用的修补。
针对给定请求的给定执行阶段,注解被添加到审计事件中,
diff --git a/content/zh/docs/reference/access-authn-authz/rbac.md b/content/zh/docs/reference/access-authn-authz/rbac.md
index d6027ca5a7..3602504cb7 100644
--- a/content/zh/docs/reference/access-authn-authz/rbac.md
+++ b/content/zh/docs/reference/access-authn-authz/rbac.md
@@ -1,6 +1,7 @@
---
title: 使用 RBAC 鉴权
content_type: concept
+aliases: [/zh/rbac/]
weight: 70
---
@@ -11,6 +12,7 @@ reviewers:
- liggitt
title: Using RBAC Authorization
content_type: concept
+aliases: [/rbac/]
weight: 70
-->
@@ -25,7 +27,7 @@ network resources based on the roles of individual users within your organizatio
RBAC 鉴权机制使用 `rbac.authorization.k8s.io`
@@ -34,12 +36,17 @@ RBAC 鉴权机制使用 `rbac.authorization.k8s.io`
要启用 RBAC,在启动 {{< glossary_tooltip text="API 服务器" term_id="kube-apiserver" >}}
时将 `--authorization-mode` 参数设置为一个逗号分隔的列表并确保其中包含 `RBAC`。
+
```shell
kube-apiserver --authorization-mode=Example,RBAC --<其他选项> --<其他选项>
```
@@ -50,7 +57,7 @@ kube-apiserver --authorization-mode=Example,RBAC --<其他选项> --<其他选
The RBAC API declares four kinds of Kubernetes object: _Role_, _ClusterRole_,
_RoleBinding_ and _ClusterRoleBinding_. You can
[describe objects](/docs/concepts/overview/working-with-objects/kubernetes-objects/#understanding-kubernetes-objects),
-or amend them, using tools such as `kubectl,` just like any other Kubernetes object.
+or amend them, using tools such as `kubectl`, just like any other Kubernetes object.
-->
## API 对象 {#api-overview}
@@ -123,11 +130,24 @@ ClusterRole 有若干用法。你可以用它来:
Here's an example Role in the "default" namespace that can be used to grant read access to
{{< glossary_tooltip text="pods" term_id="pod" >}}:
-->
-#### Role 示例
+#### Role 示例 {#role-example}
下面是一个位于 "default" 名字空间的 Role 的示例,可用来授予对
{{< glossary_tooltip text="pods" term_id="pod" >}} 的读访问权限:
+
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
@@ -144,16 +164,16 @@ rules:
#### ClusterRole example
A ClusterRole can be used to grant the same permissions as a Role.
-Because they are cluster-scoped, you can also use them to grant access to:
+Because ClusterRoles are cluster-scoped, you can also use them to grant access to:
* cluster-scoped resources (like {{< glossary_tooltip text="nodes" term_id="node" >}})
* non-resource endpoints (like `/healthz`)
* namespaced resources (like Pods), across all namespaces
For example: you can use a ClusterRole to allow a particular user to run
- `kubectl get pods -all-namespaces`
+ `kubectl get pods --all-namespaces`
-->
-### ClusterRole 示例
+### ClusterRole 示例 {#clusterrole-example}
ClusterRole 可以和 Role 相同完成授权。
因为 ClusterRole 属于集群范围,所以它也可以为以下资源授予访问权限:
@@ -173,6 +193,22 @@ or across all namespaces (depending on how it is [bound](#rolebinding-and-cluste
{{< glossary_tooltip text="Secret" term_id="secret" >}} 授予读访问权限,
或者跨名字空间的访问权限(取决于该角色是如何[绑定](#rolebinding-and-clusterrolebinding)的):
+
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -181,7 +217,7 @@ metadata:
name: secret-reader
rules:
- apiGroups: [""]
- # 在 HTTP 层面,用来访问 Secret 对象的资源的名称为 "secrets"
+ # 在 HTTP 层面,用来访问 Secret 资源的名称为 "secrets"
resources: ["secrets"]
verbs: ["get", "watch", "list"]
```
@@ -236,9 +272,31 @@ This allows "jane" to read pods in the "default" namespace.
下面的例子中的 RoleBinding 将 "pod-reader" Role 授予在 "default" 名字空间中的用户 "jane"。
这样,用户 "jane" 就具有了读取 "default" 名字空间中 pods 的权限。
+
```yaml
apiVersion: rbac.authorization.k8s.io/v1
# 此角色绑定允许 "jane" 读取 "default" 名字空间中的 Pods
+# 你需要在该命名空间中有一个名为 “pod-reader” 的 Role
kind: RoleBinding
metadata:
name: read-pods
@@ -251,7 +309,7 @@ subjects:
roleRef:
# "roleRef" 指定与某 Role 或 ClusterRole 的绑定关系
kind: Role # 此字段必须是 Role 或 ClusterRole
- name: pod-reader # 此字段必须与你要绑定的 Role 或 ClusterRole 的名称匹配
+ name: pod-reader # 此字段必须与你要绑定的 Role 或 ClusterRole 的名称匹配
apiGroup: rbac.authorization.k8s.io
```
@@ -273,6 +331,28 @@ RoleBinding 所在名字空间的资源。这种引用使得你可以跨整个
区分大小写)只能访问 "development" 名字空间中的 Secrets 对象,因为 RoleBinding
所在的名字空间(由其 metadata 决定)是 "development"。
+
```yaml
apiVersion: rbac.authorization.k8s.io/v1
# 此角色绑定使得用户 "dave" 能够读取 "development" 名字空间中的 Secrets
@@ -306,6 +386,23 @@ secrets in any namespace.
下面的 ClusterRoleBinding 允许 "manager" 组内的所有用户访问任何名字空间中的
Secrets。
+
```yaml
apiVersion: rbac.authorization.k8s.io/v1
# 此集群角色绑定允许 “manager” 组中的任何人访问任何名字空间中的 secrets
@@ -337,20 +434,24 @@ There are two reasons for this restriction:
这种限制有两个主要原因:
+1. 将 `roleRef` 设置为不可以改变,这使得可以为用户授予对现有绑定对象的 `update` 权限,
+ 这样可以让他们管理主体列表,同时不能更改被授予这些主体的角色。
+
1. 针对不同角色的绑定是完全不一样的绑定。要求通过删除/重建绑定来更改 `roleRef`,
这样可以确保要赋予绑定的所有主体会被授予新的角色(而不是在允许或者不小心修改
了 `roleRef` 的情况下导致所有现有主体未经验证即被授予新角色对应的权限)。
-1. 将 `roleRef` 设置为不可以改变,这使得可以为用户授予对现有绑定对象的 `update` 权限,
- 这样可以让他们管理主体列表,同时不能更改被授予这些主体的角色。
+### 对资源的引用 {#referring-to-resources}
+
-### 对资源的引用 {#referring-to-resources}
-
在 Kubernetes API 中,大多数资源都是使用对象名称的字符串表示来呈现与访问的。
例如,对于 Pod 应使用 "pods"。
RBAC 使用对应 API 端点的 URL 中呈现的名字来引用资源。
@@ -415,6 +517,7 @@ Here is an example that restricts its subject to only `get` or `update` a
下面的例子中限制可以 "get" 和 "update" 一个名为 `my-configmap` 的
{{< glossary_tooltip term_id="ConfigMap" >}}:
+
+```yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ namespace: default
+ name: configmap-updater
+rules:
+- apiGroups: [""]
+ # 在 HTTP 层面,用来访问 ConfigMap 资源的名称为 "configmaps"
resources: ["configmaps"]
resourceNames: ["my-configmap"]
verbs: ["update", "get"]
@@ -465,6 +584,19 @@ Here is an example aggregated ClusterRole:
下面是一个聚合 ClusterRole 的示例:
+
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -488,6 +620,22 @@ ClusterRole labeled `rbac.example.com/aggregate-to-monitoring: true`.
下面的例子中,通过创建一个标签同样为 `rbac.example.com/aggregate-to-monitoring: true`
的 ClusterRole,新的规则可被添加到 "monitoring" ClusterRole 中。
+
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -513,7 +661,7 @@ For example: the following ClusterRoles let the "admin" and "edit" default roles
named CronTab, whereas the "view" role can perform only read actions on CronTab resources.
You can assume that CronTab objects are named `"crontabs"` in URLs as seen by the API server.
-->
-默认的[面向用户的角色](#default-roles-and-role-bindings) 使用 ClusterRole 聚合。
+默认的[面向用户的角色](#default-roles-and-role-bindings)使用 ClusterRole 聚合。
这使得作为集群管理员的你可以为扩展默认规则,包括为定制资源设置规则,
比如通过 CustomResourceDefinitions 或聚合 API 服务器提供的定制资源。
@@ -521,6 +669,34 @@ You can assume that CronTab objects are named `"crontabs"` in URLs as seen by th
"view" 角色对 CronTab 资源拥有读操作权限。
你可以假定 CronTab 对象在 API 服务器所看到的 URL 中被命名为 `"crontabs"`。
+
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -549,7 +725,7 @@ rules:
```
+```yaml
+rules:
+- apiGroups: [""]
+ # 在 HTTP 层面,用来访问 Pod 资源的名称为 "pods"
resources: ["pods"]
verbs: ["get", "list", "watch"]
```
-允许读/写在 "extensions" 和 "apps" API 组中的 Deployment(在 HTTP 层面,对应
-URL 中资源部分为 "deployments"):
+允许在 `"apps"` API 组中读/写 Deployment(在 HTTP 层面,对应 URL
+中资源部分为 `"deployments"`):
+
+```yaml
+rules:
+- apiGroups: ["apps"]
+ #
+ # 在 HTTP 层面,用来访问 Deployment 资源的名称为 "deployments"
resources: ["deployments"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
```
-允许读取核心 API 组中的 "pods" 和读/写 `"batch"` 或 `"extensions"` API 组中的
-"jobs":
+允许读取核心 API 组中的 Pod 和读/写 `"batch"` API 组中的 Job 资源:
+
+```yaml
+rules:
+- apiGroups: [""]
+ # 在 HTTP 层面,用来访问 Pod 资源的名称为 "pods"
+ resources: ["pods"]
+ verbs: ["get", "list", "watch"]
+- apiGroups: ["batch"]
+ # 在 HTTP 层面,用来访问 Job 资源的名称为 "jobs"
resources: ["jobs"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
```
@@ -610,9 +828,22 @@ RoleBinding to limit to a single ConfigMap in a single namespace):
允许读取名称为 "my-config" 的 ConfigMap(需要通过 RoleBinding 绑定以
限制为某名字空间中特定的 ConfigMap):
+
+```yaml
+rules:
+- apiGroups: [""]
+ # 在 HTTP 层面,用来访问 ConfigMap 资源的名称为 "configmaps"
resources: ["configmaps"]
resourceNames: ["my-config"]
verbs: ["get"]
@@ -623,12 +854,24 @@ Allow reading the resource `"nodes"` in the core group (because a
Node is cluster-scoped, this must be in a ClusterRole bound with a
ClusterRoleBinding to be effective):
-->
-允许读取在核心组中的 "nodes" 资源(因为 `Node` 是集群作用域的,所以需要
+允许读取在核心组中的 `"nodes"` 资源(因为 `Node` 是集群作用域的,所以需要
ClusterRole 绑定到 ClusterRoleBinding 才生效):
+
+```yaml
+rules:
+- apiGroups: [""]
+ # 在 HTTP 层面,用来访问 Node 资源的名称为 "nodes"
resources: ["nodes"]
verbs: ["get", "list", "watch"]
```
@@ -641,14 +884,21 @@ to be effective):
允许针对非资源端点 `/healthz` 和其子路径上发起 GET 和 POST 请求
(必须在 ClusterRole 绑定 ClusterRoleBinding 才生效):
+
+```yaml
+rules:
+- nonResourceURLs: ["/healthz", "/healthz/*"] # nonResourceURL 中的 '*' 是一个全局通配符
+ verbs: ["get", "post"]
```
### 对主体的引用 {#referring-to-subjects}
-RoleBinding 或者 ClusterRoleBinding 可绑定角色到某 *主体(Subject)*上。
+RoleBinding 或者 ClusterRoleBinding 可绑定角色到某 **主体(Subject)** 上。
主体可以是组,用户或者
{{< glossary_tooltip text="服务账户" term_id="service-account" >}}。
@@ -692,8 +942,8 @@ In Kubernetes, Authenticator modules provide group information.
Groups, like users, are represented as strings, and that string has no format requirements,
other than that the prefix `system:` is reserved.
-[Service Accounts](/docs/tasks/configure-pod-container/configure-service-account/) have usernames with the `system:serviceaccount:` prefix and belong
-to groups with the `system:serviceaccounts:` prefix.
+[ServiceAccounts](/docs/tasks/configure-pod-container/configure-service-account/) have names prefixed
+with `system:serviceaccount:`, and belong to groups that have names prefixed with `system:serviceaccounts:`.
-->
在 Kubernetes 中,鉴权模块提供用户组信息。
与用户名一样,用户组名也用字符串来表示,而且对该字符串没有格式要求,
@@ -713,7 +963,7 @@ to groups with the `system:serviceaccounts:` prefix.
{{< /note >}}
-对于任何名称空间中的 "qa" 组中所有的服务账户:
+对于 "qa" 名称空间中的所有服务账户:
```yaml
subjects:
@@ -769,19 +1019,6 @@ subjects:
apiGroup: rbac.authorization.k8s.io
```
-
-对于 "development" 名称空间中 "dev" 组中的所有服务帐户:
-
-```yaml
-subjects:
-- kind: Group
- name: system:serviceaccounts:dev
- apiGroup: rbac.authorization.k8s.io
- namespace: development
-```
-
@@ -841,7 +1078,7 @@ Many of these are `system:` prefixed, which indicates that the resource is direc
managed by the cluster control plane.
All of the default ClusterRoles and ClusterRoleBindings are labeled with `kubernetes.io/bootstrapping=rbac-defaults`.
-->
-## 默认 Roles 和 Role Bindings
+## 默认 Roles 和 Role Bindings {#default-roles-and-role-bindings}
API 服务器创建一组默认的 ClusterRole 和 ClusterRoleBinding 对象。
这其中许多是以 `system:` 为前缀的,用以标识对应资源是直接由集群控制面管理的。
@@ -857,7 +1094,7 @@ Modifications to these resources can result in non-functional clusters.
-->
在修改名称包含 `system:` 前缀的 ClusterRole 和 ClusterRoleBinding
时要格外小心。
-对这些资源的更改可能导致集群无法继续工作。
+对这些资源的更改可能导致集群无法正常运作。
{{< /caution >}}
### API 发现角色 {#discovery-roles}
无论是经过身份验证的还是未经过身份验证的用户,默认的角色绑定都授权他们读取被认为
-是可安全地公开访问的 API( 包括 CustomResourceDefinitions)。
+是可安全地公开访问的 API(包括 CustomResourceDefinitions)。
如果要禁用匿名的未经过身份验证的用户访问,请在 API 服务器配置中中添加
`--anonymous-auth=false` 的配置选项。
@@ -913,19 +1150,17 @@ If you edit that ClusterRole, your changes will be overwritten on API server res
via [auto-reconciliation](#auto-reconciliation). To avoid that overwriting,
either do not manually edit the role, or disable auto-reconciliation.
-->
-如果你编辑该 ClusterRole,你所作的变更会被 API 服务器在重启时自动覆盖,这是通过
-[自动协商](#auto-reconciliation)机制完成的。要避免这类覆盖操作,
+如果你编辑该 ClusterRole,你所作的变更会被 API 服务器在重启时自动覆盖,
+这是通过[自动协商](#auto-reconciliation)机制完成的。要避免这类覆盖操作,
要么不要手动编辑这些角色,要么禁止自动协商机制。
{{< /note >}}
-
-Kubernetes RBAC API 发现角色
-
-
+Kubernetes RBAC API 发现角色
+
system:authenticated 组
-
-允许用户以只读的方式去访问他们自己的基本信息。在 1.14 版本之前,这个角色在默认情况下也绑定在 system:unauthenticated 上。
+允许用户以只读的方式去访问他们自己的基本信息。在 v1.14 版本之前,这个角色在默认情况下也绑定在 system:unauthenticated 上。
system:discovery
-
system:authenticated 组
-
允许以只读方式访问 API 发现端点,这些端点用来发现和协商 API 级别。
-在 1.14 版本之前,这个角色在默认情况下绑定在 system:unauthenticated 上。
+在 v1.14 版本之前,这个角色在默认情况下绑定在 system:unauthenticated 上。
system:public-info-viewer
-
system:authenticated 和 system:unauthenticated 组
-
-允许对集群的非敏感信息进行只读访问,它是在 1.14 版本中引入的。
+允许对集群的非敏感信息进行只读访问,它是在 v1.14 版本中引入的。
@@ -1016,7 +1251,7 @@ metadata:
```
-
+
system:masters 组
-
允许超级用户在平台上的任何资源上执行所有操作。
当在 ClusterRoleBinding 中使用时,可以授权对集群中以及所有名字空间中的全部资源进行完全控制。
-当在 RoleBinding 中使用时,可以授权控制 RoleBinding 所在名字空间中的所有资源,包括名字空间本身。
+当在 RoleBinding 中使用时,可以授权控制角色绑定所在名字空间中的所有资源,包括名字空间本身。
admin
-
无
-
无
-
无
-
@@ -1115,7 +1350,7 @@ It does not allow viewing roles or rolebindings.
This role does not allow viewing Secrets, since reading
the contents of Secrets enables access to ServiceAccount credentials
in the namespace, which would allow API access as any ServiceAccount
-in the namespace (a form of privilege escalation).
+in the namespace (a form of privilege escalation).
-->
此角色不允许查看 Secrets,因为读取 Secret 的内容意味着可以访问名字空间中
ServiceAccount 的凭据信息,进而允许利用名字空间中任何 ServiceAccount 的
@@ -1131,7 +1366,7 @@ ServiceAccount 的凭据信息,进而允许利用名字空间中任何 Service
### 核心组件角色 {#core-component-roles}
-
+
system:kube-scheduler 用户
-
允许访问 {{< glossary_tooltip term_id="kube-scheduler" text="scheduler" >}}
@@ -1161,8 +1396,8 @@ Allows access to the resources required by the {{< glossary_tooltip term_id="kub
system:volume-scheduler
-
system:kube-scheduler 用户
@@ -1174,23 +1409,23 @@ Allows access to the volume resources required by the kube-scheduler component.
system:kube-controller-manager
-
system:kube-controller-manager 用户
-
允许访问{{< glossary_tooltip term_id="kube-controller-manager" text="控制器管理器" >}}
组件所需要的资源。
-各个控制回路所需要的权限在控制器角色 详述。
+各个控制回路所需要的权限在控制器角色 详述。
system:node
-
无
@@ -1200,17 +1435,17 @@ Allows access to resources required by the kubelet, including read access to
-->
允许访问 kubelet 所需要的资源,包括对所有 Secret 的读操作和对所有 Pod 状态对象的写操作。
-
-你应该使用 Node 鉴权组件 和
-NodeRestriction 准入插件
-而不是 system:node 角色。同时基于 kubelet 上调度执行的 Pod 来授权
+你应该使用 Node 鉴权组件 和
+NodeRestriction 准入插件 而不是
+system:node 角色。同时基于 kubelet 上调度执行的 Pod 来授权
kubelet 对 API 的访问。
-
system:node 角色的意义仅是为了与从 v1.8 之前版本升级而来的集群兼容。
@@ -1233,13 +1468,13 @@ The system:node role only exists for compatibility with Kubernetes clus
### 其他组件角色 {#other-component-roles}
-
+
-
默认 ClusterRole
默认 ClusterRoleBinding
@@ -1249,12 +1484,12 @@ The system:node role only exists for compatibility with Kubernetes clus
system:auth-delegator
-
无
-
@@ -1264,8 +1499,8 @@ This is commonly used by add-on API servers for unified authentication and autho
system:heapster
-
无
@@ -1277,8 +1512,8 @@ Role for the Heapster compo
system:kube-aggregator
-
无
@@ -1286,36 +1521,34 @@ Role for the Heapster compo
system:kube-dns
-
-在 kube-system 名字空间中的 kube-dns 服务账户
+在 kube-system 名字空间中的 kube-dns 服务账户
-为 kube-dns 组件定义的角色。
-
+为 kube-dns 组件定义的角色。
system:kubelet-api-admin
-
无
-
允许 kubelet API 的完全访问权限。
-
+
system:node-bootstrapper
-
无
-
@@ -1326,12 +1559,12 @@ Allows access to the resources required to perform
system:node-problem-detector
-
无
-
为 node-problem-detector 组件定义的角色。
@@ -1339,30 +1572,30 @@ Role for the node-
system:persistent-volume-provisioner
-
无
-
允许访问大部分
-动态卷驱动
-
-所需要的资源。
+动态卷驱动
+所需要的资源。
+
system:monitoring
-
system:monitoring 组
@@ -1381,10 +1614,10 @@ Allows read access to control-plane monitoring endpoints
The Kubernetes {{< glossary_tooltip term_id="kube-controller-manager" text="controller manager" >}} runs
{{< glossary_tooltip term_id="controller" text="controllers" >}} that are built in to the Kubernetes
control plane.
-When invoked with `-use-service-account-credentials`, kube-controller-manager starts each controller
+When invoked with `--use-service-account-credentials`, kube-controller-manager starts each controller
using a separate service account.
Corresponding roles exist for each built-in controller, prefixed with `system:controller:`.
-If the controller manager is not started with `-use-service-account-credentials`, it runs all control loops
+If the controller manager is not started with `--use-service-account-credentials`, it runs all control loops
using its own credential, which must be granted all the relevant roles.
These roles include:
-->
@@ -1392,12 +1625,12 @@ These roles include:
Kubernetes {{< glossary_tooltip term_id="kube-controller-manager" text="控制器管理器" >}}
运行内建于 Kubernetes 控制面的{{< glossary_tooltip term_id="controller" text="控制器" >}}。
-当使用 `--use-service-account-credentials` 参数启动时, kube-controller-manager
+当使用 `--use-service-account-credentials` 参数启动时,kube-controller-manager
使用单独的服务账户来启动每个控制器。
每个内置控制器都有相应的、前缀为 `system:controller:` 的角色。
如果控制管理器启动时未设置 `--use-service-account-credentials`,
它使用自己的身份凭据来运行所有的控制器,该身份必须被授予所有相关的角色。
-这些角色包括:
+这些角色包括:
* `system:controller:attachdetach-controller`
* `system:controller:certificate-controller`
@@ -1428,12 +1661,12 @@ Kubernetes {{< glossary_tooltip term_id="kube-controller-manager" text="控制
* `system:controller:ttl-controller`
-## 初始化与预防权限提升
+## 初始化与预防权限提升 {#privilege-escalation-prevention-and-bootstrapping}
RBAC API 会阻止用户通过编辑角色或者角色绑定来提升权限。
由于这一点是在 API 级别实现的,所以在 RBAC 鉴权组件未启用的状态下依然可以正常工作。
@@ -1447,7 +1680,7 @@ You can only create/update a role if at least one of the following things is tru
(cluster-wide for a ClusterRole, within the same namespace or cluster-wide for a Role).
2. You are granted explicit permission to perform the `escalate` verb on the `roles` or `clusterroles` resource in the `rbac.authorization.k8s.io` API group.
-->
-### 对角色创建或更新的限制
+### 对角色创建或更新的限制 {#restrictions-on-role-creation-or-update}
只有在符合下列条件之一的情况下,你才能创建/更新角色:
@@ -1483,7 +1716,7 @@ You can only create/update a role binding if you already have all the permission
For example, if `user-1` does not have the ability to list Secrets cluster-wide, they cannot create a ClusterRoleBinding
to a role that grants that permission. To allow a user to create/update role bindings:
-->
-### 对角色绑定创建或更新的限制
+### 对角色绑定创建或更新的限制 {#restrictions-on-role-binding-creation-or-update}
只有你已经具有了所引用的角色中包含的全部权限时,或者你被授权在所引用的角色上执行 `bind`
动词时,你才可以创建或更新角色绑定。这里的权限与角色绑定的作用域相同。
@@ -1508,6 +1741,37 @@ For example, this ClusterRole and RoleBinding would allow `user-1` to grant othe
例如,下面的 ClusterRole 和 RoleBinding 将允许用户 `user-1` 把名字空间 `user-1-namespace`
中的 `admin`、`edit` 和 `view` 角色赋予其他用户:
+
```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
@@ -1542,33 +1806,32 @@ subjects:
When bootstrapping the first roles and role bindings, it is necessary for the initial user to grant permissions they do not yet have.
To bootstrap initial roles and role bindings:
-* Use a credential with the `system:masters` group, which is bound to the `cluster-admin` super-user role by the default bindings.
-* If your API server runs with the insecure port enabled (`-insecure-port`), you can also make API calls via that port, which does not enforce authentication or authorization.
+* Use a credential with the "system:masters" group, which is bound to the "cluster-admin" super-user role by the default bindings.
+* If your API server runs with the insecure port enabled (`--insecure-port`), you can also make API calls via that port, which does not enforce authentication or authorization.
-->
当启动引导第一个角色和角色绑定时,需要为初始用户授予他们尚未拥有的权限。
对初始角色和角色绑定进行初始化时需要:
* 使用用户组为 `system:masters` 的凭据,该用户组由默认绑定关联到 `cluster-admin`
这个超级用户角色。
-* 如果你的 API 服务器启动时启用了不安全端口(使用 `--insecure-port`), 你也可以通过
- 该端口调用 API ,这样的操作会绕过身份验证或鉴权。
+* 如果你的 API 服务器启动时启用了不安全端口(使用 `--insecure-port`),你也可以通过
+ 该端口调用 API,这样的操作会绕过身份验证或鉴权。
+## 一些命令行工具 {#command-line-utilities}
### `kubectl create role`
-Creates a `Role` object defining permissions within a single namespace. Examples:
+
-## 一些命令行工具
-
-### `kubectl create role`
-
创建 Role 对象,定义在某一名字空间中的权限。例如:
-* 创建名称为 "pod-reader" 的 Role 对象,允许用户对 Pods 执行 `get`、`watch` 和 `list` 操作:
+* 创建名称为 “pod-reader” 的 Role 对象,允许用户对 Pods 执行 `get`、`watch` 和 `list` 操作:
```shell
kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods
@@ -1577,16 +1840,16 @@ Creates a `Role` object defining permissions within a single namespace. Examples
-* 创建名称为 "pod-reader" 的 Role 对象并指定 `resourceNames`:
+* 创建名称为 “pod-reader” 的 Role 对象并指定 `resourceNames`:
```shell
kubectl create role pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod
```
-* 创建名为 "foo" 的 Role 对象并指定 `apiGroups`:
+* 创建名为 “foo” 的 Role 对象并指定 `apiGroups`:
```shell
kubectl create role foo --verb=get,list,watch --resource=replicasets.apps
@@ -1595,7 +1858,7 @@ Creates a `Role` object defining permissions within a single namespace. Examples
-* 创建名为 "foo" 的 Role 对象并指定子资源权限:
+* 创建名为 “foo” 的 Role 对象并指定子资源权限:
```shell
kubectl create role foo --verb=get,list,watch --resource=pods,pods/status
@@ -1604,7 +1867,7 @@ Creates a `Role` object defining permissions within a single namespace. Examples
-* 创建名为 "my-component-lease-holder" 的 Role 对象,使其具有对特定名称的
+* 创建名为 “my-component-lease-holder” 的 Role 对象,使其具有对特定名称的
资源执行 get/update 的权限:
```shell
@@ -1620,7 +1883,7 @@ Creates a ClusterRole. Examples:
-->
创建 ClusterRole 对象。例如:
-* 创建名称为 "pod-reader" 的 ClusterRole`对象,允许用户对 Pods 对象执行 `get`、
+* 创建名称为 “pod-reader” 的 ClusterRole 对象,允许用户对 Pods 对象执行 `get`、
`watch` 和 `list` 操作:
```shell
@@ -1630,7 +1893,7 @@ Creates a ClusterRole. Examples:
-* 创建名为 "pod-reader" 的 ClusterRole 对象并指定 `resourceNames`:
+* 创建名为 “pod-reader” 的 ClusterRole 对象并指定 `resourceNames`:
```shell
kubectl create clusterrole pod-reader --verb=get --resource=pods --resource-name=readablepod --resource-name=anotherpod
@@ -1639,7 +1902,7 @@ Creates a ClusterRole. Examples:
-* 创建名为 "foo" 的 ClusterRole 对象并指定 `apiGroups`:
+* 创建名为 “foo” 的 ClusterRole 对象并指定 `apiGroups`:
```shell
kubectl create clusterrole foo --verb=get,list,watch --resource=replicasets.apps
@@ -1648,7 +1911,7 @@ Creates a ClusterRole. Examples:
-* 创建名为 "foo" 的 ClusterRole 对象并指定子资源:
+* 创建名为 “foo” 的 ClusterRole 对象并指定子资源:
```shell
kubectl create clusterrole foo --verb=get,list,watch --resource=pods,pods/status
@@ -1657,7 +1920,7 @@ Creates a ClusterRole. Examples:
-* 创建名为 "foo" 的 ClusterRole 对象并指定 `nonResourceURL`:
+* 创建名为 “foo” 的 ClusterRole 对象并指定 `nonResourceURL`:
```shell
kubectl create clusterrole "foo" --verb=get --non-resource-url=/logs/*
@@ -1666,7 +1929,7 @@ Creates a ClusterRole. Examples:
-* 创建名为 "monitoring" 的 ClusterRole 对象并指定 `aggregationRule`:
+* 创建名为 “monitoring” 的 ClusterRole 对象并指定 `aggregationRule`:
```shell
kubectl create clusterrole monitoring --aggregation-rule="rbac.example.com/aggregate-to-monitoring=true"
@@ -1681,7 +1944,7 @@ Grants a Role or ClusterRole within a specific namespace. Examples:
-->
在特定的名字空间中对 `Role` 或 `ClusterRole` 授权。例如:
-* 在名字空间 "acme" 中,将名为 `admin` 的 ClusterRole 中的权限授予名称 "bob" 的用户:
+* 在名字空间 “acme” 中,将名为 `admin` 的 ClusterRole 中的权限授予名称 “bob” 的用户:
```shell
kubectl create rolebinding bob-admin-binding --clusterrole=admin --user=bob --namespace=acme
@@ -1690,7 +1953,7 @@ Grants a Role or ClusterRole within a specific namespace. Examples:
-* 在名字空间 "acme" 中,将名为 `view` 的 ClusterRole 中的权限授予名字空间 "acme"
+* 在名字空间 “acme” 中,将名为 `view` 的 ClusterRole 中的权限授予名字空间 “acme”
中名为 `myapp` 的服务账户:
```shell
@@ -1700,8 +1963,8 @@ Grants a Role or ClusterRole within a specific namespace. Examples:
-* 在名字空间 "acme" 中,将名为 `view` 的 ClusterRole 对象中的权限授予名字空间
- "myappnamespace" 中名称为 `myapp` 的服务账户:
+* 在名字空间 “acme” 中,将名为 `view` 的 ClusterRole 对象中的权限授予名字空间
+ “myappnamespace” 中名称为 `myapp` 的服务账户:
```shell
kubectl create rolebinding myappnamespace-myapp-view-binding --clusterrole=view --serviceaccount=myappnamespace:myapp --namespace=acme
@@ -1717,7 +1980,7 @@ Grants a ClusterRole across the entire cluster (all namespaces). Examples:
在整个集群(所有名字空间)中用 ClusterRole 授权。例如:
* 在整个集群范围,将名为 `cluster-admin` 的 ClusterRole 中定义的权限授予名为
- "root" 用户:
+ “root” 用户:
```shell
kubectl create clusterrolebinding root-cluster-admin-binding --clusterrole=cluster-admin --user=root
@@ -1727,7 +1990,7 @@ Grants a ClusterRole across the entire cluster (all namespaces). Examples:
* Across the entire cluster, grant the permissions in the "system:node-proxier" ClusterRole to a user named "system:kube-proxy":
-->
* 在整个集群范围内,将名为 `system:node-proxier` 的 ClusterRole 的权限授予名为
- "system:kube-proxy" 的用户:
+ “system:kube-proxy” 的用户:
```shell
kubectl create clusterrolebinding kube-proxy-binding --clusterrole=system:node-proxier --user=system:kube-proxy
@@ -1736,8 +1999,8 @@ Grants a ClusterRole across the entire cluster (all namespaces). Examples:
-* 在整个集群范围内,将名为 `view` 的 ClusterRole 中定义的权限授予 "acme" 名字空间中
- 名为 "myapp" 的服务账户:
+* 在整个集群范围内,将名为 `view` 的 ClusterRole 中定义的权限授予 “acme” 名字空间中
+ 名为 “myapp” 的服务账户:
```shell
kubectl create clusterrolebinding myapp-view-binding --clusterrole=view --serviceaccount=acme:myapp
@@ -1775,7 +2038,7 @@ Examples:
* 测试应用 RBAC 对象的清单文件,显示将要进行的更改:
```shell
- kubectl auth reconcile -f my-rbac-rules.yaml --dry-run
+ kubectl auth reconcile -f my-rbac-rules.yaml --dry-run=client
```
-* 应用 RBAC 对象的清单文件, 删除角色中的额外权限和绑定中的其他主体:
+* 应用 RBAC 对象的清单文件,删除角色中的额外权限和绑定中的其他主体:
```shell
kubectl auth reconcile -f my-rbac-rules.yaml --remove-extra-subjects --remove-extra-permissions
```
-查看 CLI 帮助获取详细的用法。
-
-
## 服务账户权限 {#service-account-permissions}
@@ -1818,9 +2077,9 @@ Broader grants can give unnecessary (and potentially escalating) API access to s
但是不会对 `kube-system` 名字空间之外的服务账户授予权限。
(除了授予所有已认证用户的发现权限)
-这使得你可以根据需要向特定服务账户授予特定权限。
+这使得你可以根据需要向特定 ServiceAccount 授予特定权限。
细粒度的角色绑定可带来更好的安全性,但需要更多精力管理。
-粗粒度的授权可能导致服务账户被授予不必要的 API 访问权限(甚至导致潜在的权限提升),
+粗粒度的授权可能导致 ServiceAccount 被授予不必要的 API 访问权限(甚至导致潜在的权限提升),
但更易于管理。
这要求应用在其 Pod 规约中指定 `serviceAccountName`,
- 并额外创建服务账户(包括通过 API、应用程序清单、`kubectl create serviceaccount` 等)。
+ 并额外创建服务账户(包括通过 API、应用程序清单、`kubectl create serviceaccount` 等)。
- 例如,在名字空间 "my-namespace" 中授予服务账户 "my-sa" 只读权限:
+ 例如,在名字空间 “my-namespace” 中授予服务账户 “my-sa” 只读权限:
```shell
kubectl create rolebinding my-sa-view \
@@ -1853,7 +2112,7 @@ In order from most secure to least secure, the approaches are:
-2. 将角色授予某名字空间中的 "default" 服务账户
+2. 将角色授予某名字空间中的 “default” 服务账户
- 如果某应用没有指定 `serviceAccountName`,那么它将使用 "default" 服务账户。
+ 如果某应用没有指定 `serviceAccountName`,那么它将使用 “default” 服务账户。
{{< note >}}
"default" 服务账户所具有的权限会被授予给名字空间中所有未指定
@@ -1887,20 +2146,20 @@ In order from most secure to least secure, the approaches are:
To allow those add-ons to run with super-user access, grant cluster-admin
permissions to the "default" service account in the `kube-system` namespace.
- {{< note >}}
+ {{< caution >}}
Enabling this means the `kube-system` namespace contains Secrets
- that grant super-user access to the API.
- {{< /note >}}
+ that grant super-user access to your cluster's API.
+ {{< /caution >}}
-->
- 许多[插件组件](/zh/docs/concepts/cluster-administration/addons/) 在 `kube-system`
- 名字空间以 "default" 服务账户运行。
+ 许多[插件组件](/zh/docs/concepts/cluster-administration/addons/)在 `kube-system`
+ 名字空间以 “default” 服务账户运行。
要允许这些插件组件以超级用户权限运行,需要将集群的 `cluster-admin` 权限授予
- `kube-system` 名字空间中的 "default" 服务账户。
+ `kube-system` 名字空间中的 “default” 服务账户。
- {{< note >}}
- 启用这一配置意味着在 `kube-system` 名字空间中包含以超级用户账号来访问 API
+ {{< caution >}}
+ 启用这一配置意味着在 `kube-system` 名字空间中包含以超级用户账号来访问集群 API
的 Secrets。
- {{< /note >}}
+ {{< /caution >}}
```shell
kubectl create clusterrolebinding add-on-cluster-admin \
@@ -1920,7 +2179,7 @@ In order from most secure to least secure, the approaches are:
如果你想要名字空间中所有应用都具有某角色,无论它们使用的什么服务账户,
可以将角色授予该名字空间的服务账户组。
- 例如,在名字空间 "my-namespace" 中的只读权限授予该名字空间中的所有服务账户:
+ 例如,在名字空间 “my-namespace” 中的只读权限授予该名字空间中的所有服务账户:
```shell
kubectl create rolebinding serviceaccounts-view \
@@ -1962,7 +2221,7 @@ In order from most secure to least secure, the approaches are:
-->
5. 授予超级用户访问权限给集群范围内的所有服务帐户(强烈不鼓励)
- 如果你不关心如何区分权限,你可以将超级用户访问权限授予所有服务账户。
+ 如果你不在乎如何区分权限,你可以将超级用户访问权限授予所有服务账户。
{{< warning >}}
这样做会允许所有应用都对你的集群拥有完全的访问权限,并将允许所有能够读取
@@ -1991,19 +2250,16 @@ guidance for restricting this access in existing clusters.
If you want new clusters to retain this level of access in the aggregated roles,
you can create the following ClusterRole:
-
-{{< codenew file="access/endpoints-aggregated.yaml" >}}
-->
## Endpoints 写权限 {#write-access-for-endpoints}
在 Kubernetes v1.22 之前版本创建的集群里,
-"edit" 和 "admin" 聚合角色包含对 Endpoints 的写权限。
+“edit” 和 “admin” 聚合角色包含对 Endpoints 的写权限。
作为 [CVE-2021-25740](https://github.com/kubernetes/kubernetes/issues/103675) 的缓解措施,
此访问权限不包含在 Kubernetes 1.22 以及更高版本集群的聚合角色里。
升级到 Kubernetes v1.22 版本的现有集群不会包括此变化。
-[CVE 公告](https://github.com/kubernetes/kubernetes/issues/103675)
-包含了在现有集群里限制此访问权限的指引。
+[CVE 公告](https://github.com/kubernetes/kubernetes/issues/103675)包含了在现有集群里限制此访问权限的指引。
如果你希望在新集群的聚合角色里保留此访问权限,你可以创建下面的 ClusterRole:
@@ -2023,7 +2279,7 @@ and controllers, but grant *no permissions* to service accounts outside the `kub
While far more secure, this can be disruptive to existing workloads expecting to automatically receive API permissions.
Here are two approaches for managing this transition:
-->
-## 从 ABAC 升级
+## 从 ABAC 升级 {#upgrading-from-abac}
原来运行较老版本 Kubernetes 的集群通常会使用限制宽松的 ABAC 策略,
包括授予所有服务帐户全权访问 API 的能力。
@@ -2036,19 +2292,19 @@ Here are two approaches for managing this transition:
这里有两种方法来完成这种转换:
### 并行鉴权 {#parallel-authorizers}
-同时运行 RBAC 和 ABAC 鉴权模式, 并指定包含
+同时运行 RBAC 和 ABAC 鉴权模式,并指定包含
[现有的 ABAC 策略](/zh/docs/reference/access-authn-authz/abac/#policy-file-format)
的策略文件:
```shell
---authorization-mode=RBAC,ABAC --authorization-policy-file=mypolicy.json
+--authorization-mode=...,RBAC,ABAC --authorization-policy-file=mypolicy.json
```
-如果 API 服务器启动时,RBAC 组件的日志级别为 5 或更高(`--vmodule=rbac*=5` 或 `--v=5`),
-你可以在 API 服务器的日志中看到 RBAC 的细节 (前缀 `RBAC:`)
+如果 kube-apiserver 启动时,RBAC 组件的日志级别为 5 或更高(`--vmodule=rbac*=5` 或 `--v=5`),
+你可以在 API 服务器的日志中看到 RBAC 拒绝的细节(前缀 `RBAC`)
你可以使用这些信息来确定需要将哪些角色授予哪些用户、组或服务帐户。
-一旦你[将角色授予服务账户](#service-account-permissions) ,工作负载运行时
-在服务器日志中没有出现 RBAC 拒绝消息,就可以删除 ABAC 鉴权器。
+一旦你[将角色授予服务账户](#service-account-permissions)且工作负载运行时,
+服务器日志中没有出现 RBAC 拒绝消息,就可以删除 ABAC 鉴权器。
### 宽松的 RBAC 权限 {#permissive-rbac-permissions}
-你可以使用 RBAC 角色绑定在多个场合使用宽松的策略。
+你可以使用 RBAC 角色绑定复制宽松的 ABAC 策略。
{{< warning >}}
在你完成到 RBAC 的迁移后,应该调整集群的访问控制,确保相关的策略满足你的信息安全需求。
-
diff --git a/content/zh/docs/reference/access-authn-authz/webhook.md b/content/zh/docs/reference/access-authn-authz/webhook.md
index 0ef1e6a18d..29032a7353 100644
--- a/content/zh/docs/reference/access-authn-authz/webhook.md
+++ b/content/zh/docs/reference/access-authn-authz/webhook.md
@@ -1,15 +1,9 @@
---
-reviewers:
-- erictune
-- lavalamp
-- deads2k
-- liggitt
title: Webhook 模式
content_type: concept
weight: 95
---
@@ -38,7 +31,7 @@ service when determining user privileges.
-## 配置文件格式
+## 配置文件格式 {#configuration-file-format}
-配置文件的格式使用 [kubeconfig](/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)。在文件中,"users" 代表着 API 服务器的 webhook,而 "cluster" 代表着远程服务。
+配置文件的格式使用 [kubeconfig](/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)。
+在该文件中,“users” 代表着 API 服务器的 webhook,而 “cluster” 代表着远程服务。
-## 请求载荷
+## 请求载荷 {#request-payloads}
-在做认证决策时,API 服务器会 POST 一个 JSON 序列化的 `authorization.k8s.io/v1beta1` `SubjectAccessReview` 对象来描述这个动作。这个对象包含了描述用户请求的字段,同时也包含了需要被访问资源或请求特征的具体信息。
+在做认证决策时,API 服务器会 POST 一个 JSON 序列化的 `authorization.k8s.io/v1beta1` `SubjectAccessReview`
+对象来描述这个动作。这个对象包含了描述用户请求的字段,同时也包含了需要被访问资源或请求特征的具体信息。
-需要注意的是 webhook API 对象与其他 Kubernetes API 对象一样都同样都服从[版本兼容规则](/zh/docs/concepts/overview/kubernetes-api/)。实施人员应该了解 beta 对象的更宽松的兼容性承诺,同时确认请求的 "apiVersion" 字段能被正确地反序列化。此外,API 服务器还必须启用 `authorization.k8s.io/v1beta1` API 扩展组 (`--runtime-config=authorization.k8s.io/v1beta1=true`)。
+需要注意的是 webhook API 对象与其他 Kubernetes API 对象一样都同样都遵从[版本兼容规则](/zh/docs/concepts/overview/kubernetes-api/)。
+实施人员应该了解 beta 对象的更宽松的兼容性承诺,同时确认请求的 "apiVersion" 字段能被正确地反序列化。
+此外,API 服务器还必须启用 `authorization.k8s.io/v1beta1` API 扩展组 (`--runtime-config=authorization.k8s.io/v1beta1=true`)。
期待远程服务填充请求的 `status` 字段并响应允许或禁止访问。响应主体的 `spec` 字段被忽略,可以省略。允许的响应将返回:
+
```json
{
"apiVersion": "authorization.k8s.io/v1beta1",
@@ -195,7 +193,8 @@ authorizers are configured, they are given a chance to allow the request.
If there are no other authorizers, or none of them allow the request, the
request is forbidden. The webhook would return:
-->
-在大多数情况下,第一种方法是首选方法,它指示授权 webhook 不允许或对请求"无意见",但是,如果配置了其他授权者,则可以给他们机会允许请求。如果没有其他授权者,或者没有一个授权者,则该请求被禁止。webhook 将返回:
+在大多数情况下,第一种方法是首选方法,它指示授权 webhook 不允许或对请求 “无意见”。
+但是,如果配置了其他授权者,则可以给他们机会允许请求。如果没有其他授权者,或者没有一个授权者,则该请求被禁止。webhook 将返回:
```json
{
@@ -214,7 +213,7 @@ configured authorizers. This should only be used by webhooks that have
detailed knowledge of the full authorizer configuration of the cluster.
The webhook would return:
-->
-第二种方法立即拒绝其他配置的授权者进行短路评估。仅应由对集群的完整授权者配置有详细了解的 webhook 使用。webhook 将返回:
+第二种方法立即拒绝其他配置的授权者进行短路评估。仅应由对集群的完整授权者配置有详细了解的 webhook 使用。webhook 将返回:
```json
{
@@ -252,16 +251,16 @@ Access to non-resource paths are sent as:
```
-非资源类的路径包括:`/api`, `/apis`, `/metrics`, `/resetMetrics`,
-`/logs`, `/debug`, `/healthz`, `/swagger-ui/`, `/swaggerapi/`, `/ui`, 和
-`/version`。客户端需要访问 `/api`, `/api/*`, `/apis`, `/apis/*`, 和 `/version` 以便
+非资源类的路径包括:`/api`、`/apis`、`/metrics`、`/logs`、`/debug`、
+`/healthz`、`/livez`、`/openapi/v2`、`/readyz`、和 `/version`。
+客户端需要访问 `/api`、`/api/*`、`/apis`、`/apis/*` 和 `/version` 以便
能发现服务器上有什么资源和版本。对于其他非资源类的路径访问在没有 REST API 访问限制的情况下拒绝。
- `Accelerators`:使用 Docker Engine 时启用 Nvidia GPU 支持。这一特性不再提供。
关于替代方案,请参阅[设备插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/)。
-- `AdvancedAuditing`:启用[高级审计功能](/zh/docs/tasks/debug-application-cluster/audit/#advanced-audit)。
+- `AdvancedAuditing`:启用[高级审计功能](/zh/docs/tasks/debug/debug-cluster/audit/#advanced-audit)。
- `AffinityInAnnotations`:启用 [Pod 亲和或反亲和](/zh/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity)。
- `AllowExtTrafficLocalEndpoints`:启用服务用于将外部请求路由到节点本地终端。
- `AllowInsecureBackendProxy`:允许用户在执行 Pod 日志访问请求时跳过 TLS 验证。
@@ -988,11 +1028,14 @@ Each feature gate is designed for enabling/disabling a specific feature:
for fsGroups when mounting a volume in a Pod. See
[Configure volume permission and ownership change policy for Pods](/docs/tasks/configure-pod-container/security-context/#configure-volume-permission-and-ownership-change-policy-for-pods)
for more details.
+- `ContextualLogging`: When you enable this feature gate, Kubernetes components that support
+ contextual logging add extra detail to log output.
- `ControllerManagerLeaderMigration`: Enables leader migration for
`kube-controller-manager` and `cloud-controller-manager`.
- `CronJobControllerV2`: Use an alternative implementation of the
{{< glossary_tooltip text="CronJob" term_id="cronjob" >}} controller. Otherwise,
version 1 of the same controller is selected.
+- `CronJobTimeZone`: Allow the use of the `timeZone` optional field in [CronJobs](/docs/concepts/workloads/controllers/cron-jobs/)
-->
- `CSIVolumeFSGroupPolicy`:允许 CSIDrivers 使用 `fsGroupPolicy` 字段.
该字段能控制由 CSIDriver 创建的卷在挂载这些卷时是否支持卷所有权和权限修改。
@@ -1001,10 +1044,13 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `ConfigurableFSGroupPolicy`:在 Pod 中挂载卷时,允许用户为 fsGroup
配置卷访问权限和属主变更策略。请参见
[为 Pod 配置卷访问权限和属主变更策略](/zh/docs/tasks/configure-pod-container/security-context/#configure-volume-permission-and-ownership-change-policy-for-pods)。
+- `ContextualLogging`:当你启用这个特性门控,支持日志上下文记录的 Kubernetes
+ 组件会为日志输出添加额外的详细内容。
- `ControllerManagerLeaderMigration`:为 `kube-controller-manager` 和 `cloud-controller-manager`
开启领导者迁移功能。
- `CronJobControllerV2`:使用 {{< glossary_tooltip text="CronJob" term_id="cronjob" >}}
控制器的一种替代实现。否则,系统会选择同一控制器的 v1 版本。
+- `CronJobTimeZone`:允许在 [CronJobs](/zh/docs/concepts/workloads/controllers/cron-jobs/) 中使用 `timeZone` 可选字段。
-- `DynamicKubeletConfig`:启用 kubelet 的动态配置。请参阅
- [重新配置 kubelet](/zh/docs/tasks/administer-cluster/reconfigure-kubelet/)。
+- `DynamicKubeletConfig`:启用 kubelet 的动态配置。
+ 除偏差策略场景外,不再支持该功能。该特性门控在 kubelet 1.24 版本中已被移除。
+ 请参阅[重新配置 kubelet](/zh/docs/tasks/administer-cluster/reconfigure-kubelet/)。
- `DynamicProvisioningScheduling`:扩展默认调度器以了解卷拓扑并处理 PV 配置。
此特性已在 v1.12 中完全被 `VolumeScheduling` 特性取代。
- `DynamicVolumeProvisioning`:启用持久化卷到 Pod
@@ -1219,6 +1267,9 @@ Each feature gate is designed for enabling/disabling a specific feature:
when shutting down a node gracefully.
- `GRPCContainerProbe`: Enables the gRPC probe method for {Liveness,Readiness,Startup}Probe. See [Configure Liveness, Readiness and Startup Probes](/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-grpc-liveness-probe).
- `HonorPVReclaimPolicy`: Honor persistent volume reclaim policy when it is `Delete` irrespective of PV-PVC deletion ordering.
+For more details, check the
+ [PersistentVolume deletion protection finalizer](/docs/concepts/storage/persistent-volumes/#persistentvolume-deletion-protection-finalizer)
+ documentation.
-->
- `GracefulNodeShutdownBasedOnPodPriority`:允许 kubelet 在体面终止节点时检查
Pod 的优先级。
@@ -1226,6 +1277,7 @@ Each feature gate is designed for enabling/disabling a specific feature:
参阅[配置活跃态、就绪态和启动探针](/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-a-grpc-liveness-probe)。
- `HonorPVReclaimPolicy`:无论 PV 和 PVC 的删除顺序如何,当持久卷申领的策略为 `Delete`
时,确保这种策略得到处理。
+ 更多详细信息,请参阅 [PersistentVolume 删除保护 finalizer](/zh/docs/concepts/storage/persistent-volumes/#persistentvolume-deletion-protection-finalizer)文档。
- `KubeletPodResources`:启用 kubelet 上 Pod 资源 GRPC 端点。更多详细信息,
请参见[支持设备监控](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/compute-device-assignment.md)。
@@ -1368,6 +1422,8 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `LegacyNodeRoleBehavior`:禁用此门控时,服务负载均衡器中和节点干扰中的原先行为会忽略
`node-role.kubernetes.io/master` 标签,使用 `NodeDisruptionExclusion` 和
`ServiceNodeExclusion` 对应特性所提供的标签。
+- `LegacyServiceAccountTokenNoAutoGeneration`:停止基于 Secret 的自动生成
+ [服务账号令牌](/zh/docs/reference/access-authn-authz/authentication/#service-account-tokens).
- `LogarithmicScaleDown`:启用 Pod 的半随机(semi-random)选择,控制器将根据 Pod
时间戳的对数桶按比例缩小去驱逐 Pod。
-- `MemoryManager`: 允许基于 NUMA 拓扑为容器设置内存亲和性。
-- `MemoryQoS`: 使用 cgroup v2 内存控制器在 pod / 容器上启用内存保护和使用限制。
+- `MaxUnavailableStatefulSet`:启用为 StatefulSet
+ 的[滚动更新策略](/zh/docs/concepts/workloads/controllers/statefulset/#rolling-updates)设置
+ `maxUnavailable` 字段。该字段指定更新过程中不可用 Pod 个数的上限。
+- `MemoryManager`:允许基于 NUMA 拓扑为容器设置内存亲和性。
+- `MemoryQoS`:使用 cgroup v2 内存控制器在 pod / 容器上启用内存保护和使用限制。
+- `MinDomainsInPodTopologySpread`:启用 Pod 的 `minDomains`
+ [拓扑分布约束](/zh/docs/concepts/workloads/pods/pod-topology-spread-constraints/).
- `MixedProtocolLBService`:允许在同一 `LoadBalancer` 类型的 Service 实例中使用不同的协议。
- `MountContainers`:允许使用主机上的工具容器作为卷挂载程序。
+- `NodeOutOfServiceVolumeDetach`:当使用 `node.kubernetes.io/out-of-service`
+ 污点将节点标记为停止服务时,节点上不能容忍这个污点的 Pod 将被强制删除,
+ 并且该在节点上被终止的 Pod 将立即进行卷分离操作。
- `NodeSwap`: 启用 kubelet 为节点上的 Kubernetes 工作负载分配交换内存的能力。
必须将 `KubeletConfiguration.failSwapOn` 设置为 false 的情况下才能使用。
更多详细信息,请参见[交换内存](/zh/docs/concepts/architecture/nodes/#swap-memory)。
@@ -1522,8 +1600,10 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `RemainingItemCount`: Allow the API servers to show a count of remaining
items in the response to a
[chunking list request](/docs/reference/using-api/api-concepts/#retrieving-large-results-sets-in-chunks).
-- `RemoveSelfLink`: Deprecates and removes `selfLink` from ObjectMeta and
- ListMeta.
+- `RemoveSelfLink`: Sets the `.metadata.selfLink` field to blank (empty string) for all
+ objects and collections. This field has been deprecated since the Kubernetes v1.16
+ release. When this feature is enabled, the `.metadata.selfLink` field remains part of
+ the Kubernetes API, but is always unset.
- `RequestManagement`: Enables managing request concurrency with prioritization and fairness
at each API server. Deprecated by `APIPriorityAndFairness` since 1.17.
-->
@@ -1533,7 +1613,9 @@ Each feature gate is designed for enabling/disabling a specific feature:
- `RemainingItemCount`:允许 API 服务器在
[分块列表请求](/zh/docs/reference/using-api/api-concepts/#retrieving-large-results-sets-in-chunks)
的响应中显示剩余条目的个数。
-- `RemoveSelfLink`:将 ObjectMeta 和 ListMeta 中的 `selfLink` 字段废弃并删除。
+- `RemoveSelfLink`:将所有对象和集合的 `.metadata.selfLink` 字段设置为空(空字符串)。
+ 该字段自 Kubernetes v1.16 版本以来已被弃用。
+ 启用此功能后,`.metadata.selfLink` 字段仍然是 Kubernetes API 的一部分,但始终未设置。
- `RequestManagement`:允许在每个 API 服务器上通过优先级和公平性管理请求并发性。
自 1.17 以来已被 `APIPriorityAndFairness` 替代。
- `ServiceLoadBalancerClass`: 为服务启用 `loadBalancerClass` 字段。
有关更多信息,请参见[指定负载均衡器实现类](/zh/docs/concepts/services-networking/service/#load-balancer-class)。
@@ -1634,6 +1722,9 @@ Each feature gate is designed for enabling/disabling a specific feature:
标签,则可以排除该节点。
- `ServiceTopology`:启用服务拓扑可以让一个服务基于集群的节点拓扑进行流量路由。
有关更多详细信息,请参见[服务拓扑](/zh/docs/concepts/services-networking/service-topology/)。
+- `ServiceIPStaticSubrange`:启用服务 ClusterIP 分配策略,从而细分 ClusterIP 范围。
+ 动态分配的 ClusterIP 地址将优先从较高范围分配,以低冲突风险允许用户从较低范围分配静态 ClusterIP。
+ 更多详细信息请参阅[避免冲突](/zh/docs/concepts/services-networking/service/#avoiding-collisions)
* Kubernetes 的[弃用策略](/zh/docs/reference/using-api/deprecation-policy/)
介绍了项目针对已移除特性和组件的处理方法。
-
+* 从 Kubernetes 1.24 开始,默认不启用新的 beta API。
+ 启用 beta 功能时,还需要启用所有关联的 API 资源。
+ 例如:要启用一个特定资源,如 `storage.k8s.io/v1beta1/csistoragecapacities`,
+ 请设置 `--runtime-config=storage.k8s.io/v1beta1/csistoragecapacities`。
+ 有关命令行标志的更多详细信息,请参阅 [API 版本控制](/zh/docs/reference/using-api/#api-versioning)。
diff --git a/content/zh/docs/reference/command-line-tools-reference/kube-apiserver.md b/content/zh/docs/reference/command-line-tools-reference/kube-apiserver.md
index 74e3868e4b..26bef87ba7 100644
--- a/content/zh/docs/reference/command-line-tools-reference/kube-apiserver.md
+++ b/content/zh/docs/reference/command-line-tools-reference/kube-apiserver.md
@@ -10,7 +10,7 @@ The file is auto-generated from the Go source code of the component using a gene
[generator](https://github.com/kubernetes-sigs/reference-docs/). To learn how
to generate the reference documentation, please read
[Contributing to the reference documentation](/docs/contribute/generate-ref-docs/).
-To update the reference conent, please follow the
+To update the reference conent, please follow the
[Contributing upstream](/docs/contribute/generate-ref-docs/contribute-upstream/)
guide. You can file document formatting bugs against the
[reference-docs](https://github.com/kubernetes-sigs/reference-docs/) project.
@@ -18,15 +18,15 @@ guide. You can file document formatting bugs against the
## {{% heading "synopsis" %}}
-
-
+
Kubernetes API 服务器验证并配置 API 对象的数据,
-这些对象包括 pods、services、replicationcontrollers 等。
+这些对象包括 pods、services、replicationcontrollers 等。
API 服务器为 REST 操作提供服务,并为集群的共享状态提供前端,
所有其他组件都通过该前端进行交互。
@@ -43,18 +43,6 @@ kube-apiserver [flags]
-
---add-dir-header
-
-
-
-
-如果为 true,则将文件目录添加到日志消息的标题中
-
-
-
--admission-control-config-file string
@@ -96,12 +84,11 @@ the host's default interface will be used.
The map from metric-label to value allow-list of this label. The key's format is <MetricName>,<LabelName>. The value's format is <allowed_value>,<allowed_value>...e.g. metric1,label1='v1,v2,v3', metric1,label2='v1,v2,v3' metric2,label1='v1,v2,v3'.
-->
允许使用的指标标签到指标值的映射列表。键的格式为 <MetricName>,<LabelName>.
-值的格式为 <allowed_value>,<allowed_value>...。
+值的格式为 <allowed_value>,<allowed_value>...。
例如:metric1,label1='v1,v2,v3', metric1,label2='v1,v2,v3' metric2,label1='v1,v2,v3'。
-
--allow-privileged
@@ -110,19 +97,7 @@ The map from metric-label to value allow-list of this label. The key's format is
-如果为 true, 将允许特权容器。[默认值=false]
-
-
-
-
---alsologtostderr
-
-
-
-
-在向文件输出日志的同时,也将日志写到标准输出。
+如果为 true,将允许特权容器。[默认值=false]
@@ -156,27 +131,13 @@ of these audiences. If the --service-account-issuer flag is configured
and this flag is not, this field defaults to a single element list
containing the issuer URL.
-->
-API 的标识符。
-服务帐户令牌验证者将验证针对 API 使用的令牌是否已绑定到这些受众中的至少一个。
+API 的标识符。
+服务帐户令牌验证者将验证针对 API 使用的令牌是否已绑定到这些受众中的至少一个。
如果配置了 --service-account-issuer 标志,但未配置此标志,
则此字段默认为包含发布者 URL 的单个元素列表。
-
---apiserver-count int 默认值:1
-
-
-
-
-集群中运行的 API 服务器数量,必须为正数。
-(在启用 --endpoint-reconciler-type=master-count 时使用。)
-
-
-
--audit-log-batch-buffer-size int 默认值:10000
@@ -299,9 +260,10 @@ The maximum number of days to retain old audit log files based on the timestamp
要保留的旧的审计日志文件个数上限。
+将值设置为 0 表示对文件个数没有限制。
@@ -630,7 +592,7 @@ The API version of the authentication.k8s.io TokenReview to send to and expect f
---authorization-mode stringSlice 默认值:"AlwaysAllow"
+--authorization-mode strings 默认值:"AlwaysAllow"
@@ -837,7 +799,7 @@ CORS 允许的来源清单,以逗号分隔。
-对污点 NotReady:NoExecute 的容忍时长(以秒计)。
+对污点 NotReady:NoExecute 的容忍时长(以秒计)。
默认情况下这一容忍度会被添加到尚未具有此容忍度的每个 pod 中。
@@ -871,7 +833,7 @@ that do not have a default watch size set.
---delete-collection-workers int 默认值: 1
+--delete-collection-workers int 默认值:1
@@ -912,7 +874,6 @@ This flag provides an escape hatch for misbehaving metrics. You must provide the
-
--egress-selector-config-file string
@@ -926,7 +887,7 @@ File with apiserver egress selector configuration.
---enable-admission-plugins stringSlice
+--enable-admission-plugins strings
@@ -1015,9 +976,10 @@ The file containing configuration for encryption providers to be used for storin
使用端点协调器(master-count、lease 或 none)。
+master-count 已弃用,并将在未来版本中删除。
@@ -1159,18 +1121,6 @@ Amount of time to retain events.
-
---experimental-logging-sanitization
-
-
-
-
-[试验性功能] 启用此标志时,被标记为敏感的字段(密码、密钥、令牌)都不会被日志输出。
-运行时的日志清理可能会引入相当程度的计算开销,因此不应该在产品环境中启用。
-
-
-
--external-hostname string
@@ -1198,96 +1148,99 @@ APIServerIdentity=true|false (ALPHA - default=false)
APIServerTracing=true|false (ALPHA - default=false)
AllAlpha=true|false (ALPHA - default=false)
AllBeta=true|false (BETA - default=false)
-AnyVolumeDataSource=true|false (ALPHA - default=false)
+AnyVolumeDataSource=true|false (BETA - default=true)
AppArmor=true|false (BETA - default=true)
CPUManager=true|false (BETA - default=true)
-CPUManagerPolicyOptions=true|false (ALPHA - default=false)
+CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false)
+CPUManagerPolicyBetaOptions=true|false (BETA - default=true)
+CPUManagerPolicyOptions=true|false (BETA - default=true)
CSIInlineVolume=true|false (BETA - default=true)
CSIMigration=true|false (BETA - default=true)
-CSIMigrationAWS=true|false (BETA - default=false)
-CSIMigrationAzureDisk=true|false (BETA - default=false)
-CSIMigrationAzureFile=true|false (BETA - default=false)
-CSIMigrationGCE=true|false (BETA - default=false)
-CSIMigrationOpenStack=true|false (BETA - default=true)
+CSIMigrationAWS=true|false (BETA - default=true)
+CSIMigrationAzureFile=true|false (BETA - default=true)
+CSIMigrationGCE=true|false (BETA - default=true)
+CSIMigrationPortworx=true|false (ALPHA - default=false)
+CSIMigrationRBD=true|false (ALPHA - default=false)
CSIMigrationvSphere=true|false (BETA - default=false)
-CSIStorageCapacity=true|false (BETA - default=true)
-CSIVolumeFSGroupPolicy=true|false (BETA - default=true)
CSIVolumeHealth=true|false (ALPHA - default=false)
-CSRDuration=true|false (BETA - default=true)
-ConfigurableFSGroupPolicy=true|false (BETA - default=true)
-ControllerManagerLeaderMigration=true|false (BETA - default=true)
+ContextualLogging=true|false (ALPHA - default=false)
+CronJobTimeZone=true|false (ALPHA - default=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false)
+CustomResourceValidationExpressions=true|false (ALPHA - default=false)
DaemonSetUpdateSurge=true|false (BETA - default=true)
-DefaultPodTopologySpread=true|false (BETA - default=true)
-DelegateFSGroupToCSIDriver=true|false (ALPHA - default=false)
+DelegateFSGroupToCSIDriver=true|false (BETA - default=true)
DevicePlugins=true|false (BETA - default=true)
DisableAcceleratorUsageMetrics=true|false (BETA - default=true)
DisableCloudProviders=true|false (ALPHA - default=false)
-DownwardAPIHugePages=true|false (BETA - default=false)
-EfficientWatchResumption=true|false (BETA - default=true)
+DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false)
+DownwardAPIHugePages=true|false (BETA - default=true)
EndpointSliceTerminatingCondition=true|false (BETA - default=true)
-EphemeralContainers=true|false (ALPHA - default=false)
-ExpandCSIVolumes=true|false (BETA - default=true)
-ExpandInUsePersistentVolumes=true|false (BETA - default=true)
-ExpandPersistentVolumes=true|false (BETA - default=true)
+EphemeralContainers=true|false (BETA - default=true)
ExpandedDNSConfig=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
-GenericEphemeralVolume=true|false (BETA - default=true)
+GRPCContainerProbe=true|false (BETA - default=true)
GracefulNodeShutdown=true|false (BETA - default=true)
+GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - default=true)
HPAContainerMetrics=true|false (ALPHA - default=false)
HPAScaleToZero=true|false (ALPHA - default=false)
-IPv6DualStack=true|false (BETA - default=true)
+HonorPVReclaimPolicy=true|false (ALPHA - default=false)
+IdentifyPodOS=true|false (BETA - default=true)
InTreePluginAWSUnregister=true|false (ALPHA - default=false)
InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false)
-InTreePluginAzureFileUnregister=true|false (ALPHA - default=false)
-InTreePluginGCEUnregister=true|false (ALPHA - default=false)
+InTreePluginAzureFileUnregister=true|false (ALPHA - default=false) I
+nTreePluginGCEUnregister=true|false (ALPHA - default=false)
InTreePluginOpenStackUnregister=true|false (ALPHA - default=false)
+InTreePluginPortworxUnregister=true|false (ALPHA - default=false)
+InTreePluginRBDUnregister=true|false (ALPHA - default=false)
InTreePluginvSphereUnregister=true|false (ALPHA - default=false)
-IndexedJob=true|false (BETA - default=true)
-IngressClassNamespacedParams=true|false (BETA - default=true)
-JobTrackingWithFinalizers=true|false (ALPHA - default=false)
-KubeletCredentialProviders=true|false (ALPHA - default=false)
+JobMutableNodeSchedulingDirectives=true|false (BETA - default=true)
+JobReadyPods=true|false (BETA - default=true)
+JobTrackingWithFinalizers=true|false (BETA - default=false)
+KubeletCredentialProviders=true|false (BETA - default=true)
KubeletInUserNamespace=true|false (ALPHA - default=false)
KubeletPodResources=true|false (BETA - default=true)
-KubeletPodResourcesGetAllocatable=true|false (ALPHA - default=false)
+KubeletPodResourcesGetAllocatable=true|false (BETA - default=true)
+LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - default=true)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false)
LogarithmicScaleDown=true|false (BETA - default=true)
+MaxUnavailableStatefulSet=true|false (ALPHA - default=false)
MemoryManager=true|false (BETA - default=true)
MemoryQoS=true|false (ALPHA - default=false)
-MixedProtocolLBService=true|false (ALPHA - default=false)
+MinDomainsInPodTopologySpread=true|false (ALPHA - default=false)
+MixedProtocolLBService=true|false (BETA - default=true)
NetworkPolicyEndPort=true|false (BETA - default=true)
+NetworkPolicyStatus=true|false (ALPHA - default=false)
+NodeOutOfServiceVolumeDetach=true|false (ALPHA - default=false)
NodeSwap=true|false (ALPHA - default=false)
-NonPreemptingPriority=true|false (BETA - default=true)
-PodAffinityNamespaceSelector=true|false (BETA - default=true)
+OpenAPIEnums=true|false (BETA - default=true)
+OpenAPIV3=true|false (BETA - default=true)
+PodAndContainerStatsFromCRI=true|false (ALPHA - default=false)
PodDeletionCost=true|false (BETA - default=true)
-PodOverhead=true|false (BETA - default=true)
-PodSecurity=true|false (ALPHA - default=false)
-PreferNominatedNode=true|false (BETA - default=true)
+PodSecurity=true|false (BETA - default=true)
ProbeTerminationGracePeriod=true|false (BETA - default=false)
ProcMountType=true|false (ALPHA - default=false)
ProxyTerminatingEndpoints=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ReadWriteOncePod=true|false (ALPHA - default=false)
+RecoverVolumeExpansionFailure=true|false (ALPHA - default=false)
RemainingItemCount=true|false (BETA - default=true)
-RemoveSelfLink=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (BETA - default=true)
SeccompDefault=true|false (ALPHA - default=false)
+ServerSideFieldValidation=true|false (ALPHA - default=false)
+ServiceIPStaticSubrange=true|false (ALPHA - default=false)
ServiceInternalTrafficPolicy=true|false (BETA - default=true)
-ServiceLBNodePortControl=true|false (BETA - default=true)
-ServiceLoadBalancerClass=true|false (BETA - default=true)
SizeMemoryBackedVolumes=true|false (BETA - default=true)
-StatefulSetMinReadySeconds=true|false (ALPHA - default=false)
+StatefulSetAutoDeletePVC=true|false (ALPHA - default=false)
+StatefulSetMinReadySeconds=true|false (BETA - default=true)
StorageVersionAPI=true|false (ALPHA - default=false)
StorageVersionHash=true|false (BETA - default=true)
-SuspendJob=true|false (BETA - default=true)
-TTLAfterFinished=true|false (BETA - default=true)
-TopologyAwareHints=true|false (ALPHA - default=false)
+TopologyAwareHints=true|false (BETA - default=true)
TopologyManager=true|false (BETA - default=true)
VolumeCapacityPriority=true|false (ALPHA - default=false)
WinDSR=true|false (ALPHA - default=false)
WinOverlay=true|false (BETA - default=true)
-WindowsHostProcessContainers=true|false (ALPHA - default=false)
+WindowsHostProcessContainers=true|false (BETA - default=true)
-->
一组 key=value 对,用来描述测试性/试验性功能的特性门控。可选项有:
APIListChunking=true|false (BETA - 默认值=true)
@@ -1297,96 +1250,99 @@ APIServerIdentity=true|false (ALPHA - 默认值=false)
APIServerTracing=true|false (ALPHA - 默认值=false)
AllAlpha=true|false (ALPHA - 默认值=false)
AllBeta=true|false (BETA - 默认值=false)
-AnyVolumeDataSource=true|false (ALPHA - 默认值=false)
+AnyVolumeDataSource=true|false (BETA - 默认值=true)
AppArmor=true|false (BETA - 默认值=true)
CPUManager=true|false (BETA - 默认值=true)
-CPUManagerPolicyOptions=true|false (ALPHA - 默认值=false)
+CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
+CPUManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
+CPUManagerPolicyOptions=true|false (BETA - 默认值=true)
CSIInlineVolume=true|false (BETA - 默认值=true)
CSIMigration=true|false (BETA - 默认值=true)
-CSIMigrationAWS=true|false (BETA - 默认值=false)
-CSIMigrationAzureDisk=true|false (BETA - 默认值=false)
-CSIMigrationAzureFile=true|false (BETA - 默认值=false)
-CSIMigrationGCE=true|false (BETA - 默认值=false)
-CSIMigrationOpenStack=true|false (BETA - 默认值=true)
+CSIMigrationAWS=true|false (BETA - 默认值=true)
+CSIMigrationAzureFile=true|false (BETA - 默认值=true)
+CSIMigrationGCE=true|false (BETA - 默认值=true)
+CSIMigrationPortworx=true|false (ALPHA - 默认值=false)
+CSIMigrationRBD=true|false (ALPHA - 默认值=false)
CSIMigrationvSphere=true|false (BETA - 默认值=false)
-CSIStorageCapacity=true|false (BETA - 默认值=true)
-CSIVolumeFSGroupPolicy=true|false (BETA - 默认值=true)
CSIVolumeHealth=true|false (ALPHA - 默认值=false)
-CSRDuration=true|false (BETA - 默认值=true)
-ConfigurableFSGroupPolicy=true|false (BETA - 默认值=true)
-ControllerManagerLeaderMigration=true|false (BETA - 默认值=true)
+ContextualLogging=true|false (ALPHA - 默认值=false)
+CronJobTimeZone=true|false (ALPHA - 默认值=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
+CustomResourceValidationExpressions=true|false (ALPHA - 默认值=false)
DaemonSetUpdateSurge=true|false (BETA - 默认值=true)
-默认值PodTopologySpread=true|false (BETA - 默认值=true)
-DelegateFSGroupToCSIDriver=true|false (ALPHA - 默认值=false)
+DelegateFSGroupToCSIDriver=true|false (BETA - 默认值=true)
DevicePlugins=true|false (BETA - 默认值=true)
DisableAcceleratorUsageMetrics=true|false (BETA - 默认值=true)
DisableCloudProviders=true|false (ALPHA - 默认值=false)
-DownwardAPIHugePages=true|false (BETA - 默认值=false)
-EfficientWatchResumption=true|false (BETA - 默认值=true)
+DisableKubeletCloudCredentialProviders=true|false (ALPHA - 默认值=false)
+DownwardAPIHugePages=true|false (BETA - 默认值=true)
EndpointSliceTerminatingCondition=true|false (BETA - 默认值=true)
-EphemeralContainers=true|false (ALPHA - 默认值=false)
-ExpandCSIVolumes=true|false (BETA - 默认值=true)
-ExpandInUsePersistentVolumes=true|false (BETA - 默认值=true)
-ExpandPersistentVolumes=true|false (BETA - 默认值=true)
+EphemeralContainers=true|false (BETA - 默认值=true)
ExpandedDNSConfig=true|false (ALPHA - 默认值=false)
-ExperimentalHostUserNamespace默认值ing=true|false (BETA - 默认值=false)
-GenericEphemeralVolume=true|false (BETA - 默认值=true)
+ExperimentalHostUserNamespaceDefaulting=true|false (BETA - 默认值=false)
+GRPCContainerProbe=true|false (BETA - 默认值=true)
GracefulNodeShutdown=true|false (BETA - 默认值=true)
+GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值=true)
HPAContainerMetrics=true|false (ALPHA - 默认值=false)
HPAScaleToZero=true|false (ALPHA - 默认值=false)
-IPv6DualStack=true|false (BETA - 默认值=true)
+HonorPVReclaimPolicy=true|false (ALPHA - 默认值=false)
+IdentifyPodOS=true|false (BETA - 默认值=true)
InTreePluginAWSUnregister=true|false (ALPHA - 默认值=false)
InTreePluginAzureDiskUnregister=true|false (ALPHA - 默认值=false)
-InTreePluginAzureFileUnregister=true|false (ALPHA - 默认值=false)
-InTreePluginGCEUnregister=true|false (ALPHA - 默认值=false)
+InTreePluginAzureFileUnregister=true|false (ALPHA - 默认值=false) I
+nTreePluginGCEUnregister=true|false (ALPHA - 默认值=false)
InTreePluginOpenStackUnregister=true|false (ALPHA - 默认值=false)
+InTreePluginPortworxUnregister=true|false (ALPHA - 默认值=false)
+InTreePluginRBDUnregister=true|false (ALPHA - 默认值=false)
InTreePluginvSphereUnregister=true|false (ALPHA - 默认值=false)
-IndexedJob=true|false (BETA - 默认值=true)
-IngressClassNamespacedParams=true|false (BETA - 默认值=true)
-JobTrackingWithFinalizers=true|false (ALPHA - 默认值=false)
-KubeletCredentialProviders=true|false (ALPHA - 默认值=false)
+JobMutableNodeSchedulingDirectives=true|false (BETA - 默认值=true)
+JobReadyPods=true|false (BETA - 默认值=true)
+JobTrackingWithFinalizers=true|false (BETA - 默认值=false)
+KubeletCredentialProviders=true|false (BETA - 默认值=true)
KubeletInUserNamespace=true|false (ALPHA - 默认值=false)
KubeletPodResources=true|false (BETA - 默认值=true)
-KubeletPodResourcesGetAllocatable=true|false (ALPHA - 默认值=false)
+KubeletPodResourcesGetAllocatable=true|false (BETA - 默认值=true)
+LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolation=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值=false)
LogarithmicScaleDown=true|false (BETA - 默认值=true)
+MaxUnavailableStatefulSet=true|false (ALPHA - 默认值=false)
MemoryManager=true|false (BETA - 默认值=true)
MemoryQoS=true|false (ALPHA - 默认值=false)
-MixedProtocolLBService=true|false (ALPHA - 默认值=false)
+MinDomainsInPodTopologySpread=true|false (ALPHA - 默认值=false)
+MixedProtocolLBService=true|false (BETA - 默认值=true)
NetworkPolicyEndPort=true|false (BETA - 默认值=true)
+NetworkPolicyStatus=true|false (ALPHA - 默认值=false)
+NodeOutOfServiceVolumeDetach=true|false (ALPHA - 默认值=false)
NodeSwap=true|false (ALPHA - 默认值=false)
-NonPreemptingPriority=true|false (BETA - 默认值=true)
-PodAffinityNamespaceSelector=true|false (BETA - 默认值=true)
+OpenAPIEnums=true|false (BETA - 默认值=true)
+OpenAPIV3=true|false (BETA - 默认值=true)
+PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值=false)
PodDeletionCost=true|false (BETA - 默认值=true)
-PodOverhead=true|false (BETA - 默认值=true)
-PodSecurity=true|false (ALPHA - 默认值=false)
-PreferNominatedNode=true|false (BETA - 默认值=true)
+PodSecurity=true|false (BETA - 默认值=true)
ProbeTerminationGracePeriod=true|false (BETA - 默认值=false)
ProcMountType=true|false (ALPHA - 默认值=false)
ProxyTerminatingEndpoints=true|false (ALPHA - 默认值=false)
QOSReserved=true|false (ALPHA - 默认值=false)
ReadWriteOncePod=true|false (ALPHA - 默认值=false)
+RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值=false)
RemainingItemCount=true|false (BETA - 默认值=true)
-RemoveSelfLink=true|false (BETA - 默认值=true)
RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
Seccomp默认值=true|false (ALPHA - 默认值=false)
+ServerSideFieldValidation=true|false (ALPHA - 默认值=false)
+ServiceIPStaticSubrange=true|false (ALPHA - 默认值=false)
ServiceInternalTrafficPolicy=true|false (BETA - 默认值=true)
-ServiceLBNodePortControl=true|false (BETA - 默认值=true)
-ServiceLoadBalancerClass=true|false (BETA - 默认值=true)
SizeMemoryBackedVolumes=true|false (BETA - 默认值=true)
-StatefulSetMinReadySeconds=true|false (ALPHA - 默认值=false)
+StatefulSetAutoDeletePVC=true|false (ALPHA - 默认值=false)
+StatefulSetMinReadySeconds=true|false (BETA - 默认值=true)
StorageVersionAPI=true|false (ALPHA - 默认值=false)
StorageVersionHash=true|false (BETA - 默认值=true)
-SuspendJob=true|false (BETA - 默认值=true)
-TTLAfterFinished=true|false (BETA - 默认值=true)
-TopologyAwareHints=true|false (ALPHA - 默认值=false)
+TopologyAwareHints=true|false (BETA - 默认值=true)
TopologyManager=true|false (BETA - 默认值=true)
VolumeCapacityPriority=true|false (ALPHA - 默认值=false)
WinDSR=true|false (ALPHA - 默认值=false)
WinOverlay=true|false (BETA - 默认值=true)
-WindowsHostProcessContainers=true|false (ALPHA - 默认值=false)
+WindowsHostProcessContainers=true|false (BETA - 默认值=true)
@@ -1407,10 +1363,10 @@ Max is .02 (1/50 requests); .001 (1/1000) is a recommended starting point.
-->
为防止 HTTP/2 客户端卡在单个 API 服务器上,可启用随机关闭连接(GOAWAY)。
客户端的其他运行中请求将不会受到影响,并且客户端将重新连接,
-可能会在再次通过负载平衡器后登陆到其他 API 服务器上。
-此参数设置将发送 GOAWAY 的请求的比例。
-具有单个 API 服务器或不使用负载平衡器的群集不应启用此功能。
-最小值为0(关闭),最大值为 .02(1/50 请求); 建议使用 .001(1/1000)。
+可能会在再次通过负载平衡器后登陆到其他 API 服务器上。
+此参数设置将发送 GOAWAY 的请求的比例。
+具有单个 API 服务器或不使用负载平衡器的集群不应启用此功能。
+最小值为0(关闭),最大值为 .02(1/50 请求);建议使用 .001(1/1000)。
@@ -1573,56 +1529,6 @@ post-start hooks will complete successfully and therefore return true.
-
---log-backtrace-at traceLocation 默认值::0
-
-
-
-
-当日志机制执行到'文件 :N'时,生成堆栈跟踪。
-
-
-
-
---log-dir string
-
-
-
-
-如果为非空,则在此目录中写入日志文件。
-
-
-
-
---log-file string
-
-
-
-
-如果为非空,使用此值作为日志文件。
-
-
-
-
---log-file-max-size uint 默认值:1800
-
-
-
-
-定义日志文件可以增长到的最大大小。单位为兆字节。
-如果值为 0,则最大文件大小为无限制。
-
-
-
--log-flush-frequency duration 默认值:5s
@@ -1641,26 +1547,14 @@ Maximum number of seconds between log flushes
-设置日志格式。允许的格式:"text"。
-非默认格式不支持以下标志:--add-dir-header、--alsologtostderr、--log-backtrace-at、--log-dir、--log-file、--log-file-max-size、--logtostderr、--one-output、-skip-headers、-skip-log-headers、--stderrthreshold、-vmodule 和 --log-flush-frequency。
+设置日志格式。允许的格式:"text"。
+非默认格式不支持以下标志:--add-dir-header、--alsologtostderr、--log-backtrace-at、--log-dir、--log-file、--log-file-max-size、--logtostderr、--one-output、-skip-headers、-skip-log-headers、--stderrthreshold、-vmodule。
当前非默认选择为 alpha,会随时更改而不会发出警告。
-
---logtostderr 默认值:true
-
-
-
-
-在标准错误而不是文件中输出日志记录。
-
-
-
--master-service-namespace string 默认值:"default"
@@ -1823,11 +1717,11 @@ Repeat this flag to specify multiple claims.
允许的 JOSE 非对称签名算法的逗号分隔列表。
-若 JWT 所带的 "alg" 标头值不在列表中,则该 JWT 将被拒绝。
+具有收支持 "alg" 标头值的 JWTs 有:RS256、RS384、RS512、ES256、ES384、ES512、PS256、PS384、PS512。
取值依据 RFC 7518 https://tools.ietf.org/html/rfc7518#section-3.1 定义。
@@ -1865,20 +1759,7 @@ If not provided, username claims other than 'email' are prefixed
---one-output
-
-
-
-
-此标志为真时,日志只会被写入到其原生的严重性级别中(而不是同时写到所有较低
-严重性级别中)。
-
-
-
-
---permit-address-sharing 默认值:false
+--permit-address-sharing
@@ -1891,7 +1772,7 @@ If true, only write logs to their native severity level (vs also writing to each
---permit-port-sharing 默认值:false
+--permit-port-sharing
@@ -1966,7 +1847,7 @@ open before timing it out. This is the default request timeout for
requests but may be overridden by flags such as --min-request-timeout
for specific types of requests.
-->
-可选字段,指示处理程序在超时之前必须保持打开请求的持续时间。
+可选字段,指示处理程序在超时之前必须保持打开请求的持续时间。
这是请求的默认请求超时,但对于特定类型的请求,可能会被
--min-request-timeout等标志覆盖。
@@ -2123,9 +2004,9 @@ and all are used to determine which issuers are accepted.
颁发者将在已办法令牌的 "iss" 声明中检查此标识符。
此值为字符串或 URI。
如果根据 OpenID Discovery 1.0 规范检查此选项不是有效的 URI,则即使特性门控设置为 true,
-ServiceAccountIssuerDiscovery 功能也将保持禁用状态。
-强烈建议该值符合 OpenID 规范:https://openid.net/specs/openid-connect-discovery-1_0.html。
-实践中,这意味着 service-account-issuer 取值必须是 HTTPS URL。
+ServiceAccountIssuerDiscovery 功能也将保持禁用状态。
+强烈建议该值符合 OpenID 规范: https://openid.net/specs/openid-connect-discovery-1_0.html 。
+实践中,这意味着 service-account-issuer 取值必须是 HTTPS URL。
还强烈建议此 URL 能够在 {service-account-issuer}/.well-known/openid-configuration
处提供 OpenID 发现文档。
当此值被多次指定时,第一次的值用于生成令牌,所有的值用于确定接受哪些发行人。
@@ -2141,13 +2022,11 @@ ServiceAccountIssuerDiscovery 功能也将保持禁用状态。
Overrides the URI for the JSON Web Key Set in the discovery doc served at
/.well-known/openid-configuration. This flag is useful if the discovery
docand key set are served to relying parties from a URL other than the
-API server's external (as auto-detected or overridden with external-hostname).
-Only valid if the ServiceAccountIssuerDiscovery feature gate is enabled.
+API server's external (as auto-detected or overridden with external-hostname).
-->
覆盖 /.well-known/openid-configuration 提供的发现文档中 JSON Web 密钥集的 URI。
如果发现文档和密钥集是通过 API 服务器外部
(而非自动检测到或被外部主机名覆盖)之外的 URL 提供给依赖方的,则此标志很有用。
-仅在启用 ServiceAccountIssuerDiscovery 特性门控的情况下有效。
@@ -2161,12 +2040,12 @@ File containing PEM-encoded x509 RSA or ECDSA private or public keys,
used to verify ServiceAccount tokens. The specified file can contain
multiple keys, and the flag can be specified multiple times with
different files. If unspecified, --tls-private-key-file is used.
-Must be specified when --service-account-signing-key is provided
+Must be specified when --service-account-signing-key-file is provided
-->
包含 PEM 编码的 x509 RSA 或 ECDSA 私钥或公钥的文件,用于验证 ServiceAccount 令牌。
指定的文件可以包含多个键,并且可以使用不同的文件多次指定标志。
如果未指定,则使用 --tls-private-key-file。
-提供 --service-account-signing-key 时必须指定。
+提供 --service-account-signing-key-file 时必须指定。
@@ -2279,38 +2158,18 @@ This can be used to allow load balancer to stop sending traffic to this server.
---skip-headers
+--shutdown-send-retry-after
-如果为 true,日志消息中避免标题前缀。
-
-
-
-
---skip-log-headers
-
-
-
-
-如果为 true,则在打开日志文件时避免标题。
-
-
-
-
---stderrthreshold int 默认值:2
-
-
-
-
-将达到或超过此阈值的日志写到标准错误输出
+值为 true 表示 HTTP 服务器将继续监听直到耗尽所有非长时间运行的请求,
+在此期间,所有传入请求将被拒绝,状态码为 429,响应头为 "Retry-After",
+此外,设置 "Connection: close" 响应头是为了在空闲时断开 TCP 链接。
@@ -2350,11 +2209,10 @@ List of directives for HSTS, comma separated. If this list is empty, then HSTS d
-->
为 HSTS 所设置的指令列表,用逗号分隔。
如果此列表为空,则不会添加 HSTS 指令。
-例如: 'max-age=31536000,includeSubDomains,preload'
+例如:'max-age=31536000,includeSubDomains,preload'
-
--tls-cert-file string
@@ -2383,15 +2241,17 @@ the public address and saved to the directory specified by --cert-dir.
Comma-separated list of cipher suites for the server.
If omitted, the default Go cipher suites will be used.
Preferred values:
-TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384.
+TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384.
Insecure values:
-TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_RC4_128_SHA.
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_RC4_128_SHA.
-->
服务器的密码套件的列表,以逗号分隔。如果省略,将使用默认的 Go 密码套件。
首选值:
-TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_GCM_SHA256、 TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_GCM_SHA384.
+TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、
+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384。
不安全的值有:
-TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_RC4_128_SHA。
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_RC4_128_SHA。
@@ -2420,7 +2280,7 @@ File containing the default x509 private key matching --tls-cert-file.
---tls-sni-cert-key string 默认值: []
+--tls-sni-cert-key string 默认值:[]
@@ -2494,14 +2354,15 @@ Print version information and quit
---vmodule <用逗号分隔的多个 'pattern=N' 配置字符串>
+--vmodule pattern=N,...
-以逗号分隔的 pattern=N 设置列表,用于文件过滤的日志记录。
+以逗号分隔的 pattern=N 设置列表,用于文件过滤的日志记录(仅适用于 text 日志格式)。
@@ -2547,4 +2408,3 @@ heuristics, others default to default-watch-cache-size
-
diff --git a/content/zh/docs/reference/command-line-tools-reference/kube-controller-manager.md b/content/zh/docs/reference/command-line-tools-reference/kube-controller-manager.md
index 19037bd19b..69d31090b9 100644
--- a/content/zh/docs/reference/command-line-tools-reference/kube-controller-manager.md
+++ b/content/zh/docs/reference/command-line-tools-reference/kube-controller-manager.md
@@ -48,18 +48,6 @@ kube-controller-manager [flags]
-
---add-dir-header
-
-
-
-
-若为 true,将文件目录添加到日志消息的头部。
-
-
-
--allocate-node-cidrs
@@ -73,7 +61,7 @@ Should CIDRs for Pods be allocated and set on the cloud provider.
---allow-metric-labels stringToString 默认值:""
+--allow-metric-labels stringToString 默认值:[]
@@ -89,18 +77,6 @@ metric2,label='v1,v2,v3'。
-
---alsologtostderr
-
-
-
-
-在向文件输出日志的同时,也将日志写到标准输出。
-
-
-
--attach-detach-reconcile-sync-period duration 默认值:1m0s
@@ -232,7 +208,7 @@ Path to the file containing Azure container registry configuration information.
---bind-address ip 默认值:0.0.0.0
+--bind-address string 默认值:0.0.0.0
@@ -511,6 +487,19 @@ The number of endpoint syncing operations that will be done concurrently. Larger
+
+--concurrent-ephemeralvolume-syncs int32 默认值:5
+
+
+
+
+可以并发执行的 EphemeralVolume 同步操作个数。数值越大意味着更快的 EphemeralVolume 更新操作,
+同时也意味着更大的 CPU (和网络)压力。
+
+
+
--concurrent-gc-syncs int32 默认值:20
@@ -676,7 +665,7 @@ Interval between starting controller managers.
---controllers strings 默认值:[*]
+--controllers strings 默认值:*
@@ -690,18 +679,6 @@ A list of controllers to enable. '*' enables all on-by-default controllers, 'foo
默认禁用的控制器有:bootstrapsigner 和 tokencleaner。
-
---deployment-controller-sync-period duration 默认值:30s
-
-
-
-
-Deployment 资源的同步周期。
-
-
-
--disable-attach-detach-reconcile-sync
@@ -822,19 +799,6 @@ The length of endpoint slice updates batching period. Processing of pod changes
-
---experimental-logging-sanitization
-
-
-
-
-[试验性功能] 当启用此标志时,被标记为敏感的字段(密码、密钥、令牌)不会被日志输出。
-运行时的日志清理操作可能会引入相当程度的计算开销,因此不应在生产环境中启用。
-
-
-
--external-cloud-volume-plugin string
@@ -864,96 +828,99 @@ APIServerIdentity=true|false (ALPHA - default=false)
APIServerTracing=true|false (ALPHA - default=false)
AllAlpha=true|false (ALPHA - default=false)
AllBeta=true|false (BETA - default=false)
-AnyVolumeDataSource=true|false (ALPHA - default=false)
+AnyVolumeDataSource=true|false (BETA - default=true)
AppArmor=true|false (BETA - default=true)
CPUManager=true|false (BETA - default=true)
-CPUManagerPolicyOptions=true|false (ALPHA - default=false)
+CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false)
+CPUManagerPolicyBetaOptions=true|false (BETA - default=true)
+CPUManagerPolicyOptions=true|false (BETA - default=true)
CSIInlineVolume=true|false (BETA - default=true)
CSIMigration=true|false (BETA - default=true)
-CSIMigrationAWS=true|false (BETA - default=false)
-CSIMigrationAzureDisk=true|false (BETA - default=false)
-CSIMigrationAzureFile=true|false (BETA - default=false)
-CSIMigrationGCE=true|false (BETA - default=false)
-CSIMigrationOpenStack=true|false (BETA - default=true)
+CSIMigrationAWS=true|false (BETA - default=true)
+CSIMigrationAzureFile=true|false (BETA - default=true)
+CSIMigrationGCE=true|false (BETA - default=true)
+CSIMigrationPortworx=true|false (ALPHA - default=false)
+CSIMigrationRBD=true|false (ALPHA - default=false)
CSIMigrationvSphere=true|false (BETA - default=false)
-CSIStorageCapacity=true|false (BETA - default=true)
-CSIVolumeFSGroupPolicy=true|false (BETA - default=true)
CSIVolumeHealth=true|false (ALPHA - default=false)
-CSRDuration=true|false (BETA - default=true)
-ConfigurableFSGroupPolicy=true|false (BETA - default=true)
-ControllerManagerLeaderMigration=true|false (BETA - default=true)
+ContextualLogging=true|false (ALPHA - default=false)
+CronJobTimeZone=true|false (ALPHA - default=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false)
+CustomResourceValidationExpressions=true|false (ALPHA - default=false)
DaemonSetUpdateSurge=true|false (BETA - default=true)
-DefaultPodTopologySpread=true|false (BETA - default=true)
-DelegateFSGroupToCSIDriver=true|false (ALPHA - default=false)
+DelegateFSGroupToCSIDriver=true|false (BETA - default=true)
DevicePlugins=true|false (BETA - default=true)
DisableAcceleratorUsageMetrics=true|false (BETA - default=true)
DisableCloudProviders=true|false (ALPHA - default=false)
-DownwardAPIHugePages=true|false (BETA - default=false)
-EfficientWatchResumption=true|false (BETA - default=true)
+DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false)
+DownwardAPIHugePages=true|false (BETA - default=true)
EndpointSliceTerminatingCondition=true|false (BETA - default=true)
-EphemeralContainers=true|false (ALPHA - default=false)
-ExpandCSIVolumes=true|false (BETA - default=true)
-ExpandInUsePersistentVolumes=true|false (BETA - default=true)
-ExpandPersistentVolumes=true|false (BETA - default=true)
+EphemeralContainers=true|false (BETA - default=true)
ExpandedDNSConfig=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
-GenericEphemeralVolume=true|false (BETA - default=true)
+GRPCContainerProbe=true|false (BETA - default=true)
GracefulNodeShutdown=true|false (BETA - default=true)
+GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - default=true)
HPAContainerMetrics=true|false (ALPHA - default=false)
HPAScaleToZero=true|false (ALPHA - default=false)
-IPv6DualStack=true|false (BETA - default=true)
+HonorPVReclaimPolicy=true|false (ALPHA - default=false)
+IdentifyPodOS=true|false (BETA - default=true)
InTreePluginAWSUnregister=true|false (ALPHA - default=false)
InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false)
InTreePluginAzureFileUnregister=true|false (ALPHA - default=false)
InTreePluginGCEUnregister=true|false (ALPHA - default=false)
InTreePluginOpenStackUnregister=true|false (ALPHA - default=false)
+InTreePluginPortworxUnregister=true|false (ALPHA - default=false)
+InTreePluginRBDUnregister=true|false (ALPHA - default=false)
InTreePluginvSphereUnregister=true|false (ALPHA - default=false)
-IndexedJob=true|false (BETA - default=true)
-IngressClassNamespacedParams=true|false (BETA - default=true)
-JobTrackingWithFinalizers=true|false (ALPHA - default=false)
-KubeletCredentialProviders=true|false (ALPHA - default=false)
+JobMutableNodeSchedulingDirectives=true|false (BETA - default=true)
+JobReadyPods=true|false (BETA - default=true)
+JobTrackingWithFinalizers=true|false (BETA - default=false)
+KubeletCredentialProviders=true|false (BETA - default=true)
KubeletInUserNamespace=true|false (ALPHA - default=false)
KubeletPodResources=true|false (BETA - default=true)
-KubeletPodResourcesGetAllocatable=true|false (ALPHA - default=false)
+KubeletPodResourcesGetAllocatable=true|false (BETA - default=true)
+LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - default=true)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false)
LogarithmicScaleDown=true|false (BETA - default=true)
+MaxUnavailableStatefulSet=true|false (ALPHA - default=false)
MemoryManager=true|false (BETA - default=true)
MemoryQoS=true|false (ALPHA - default=false)
-MixedProtocolLBService=true|false (ALPHA - default=false)
+MinDomainsInPodTopologySpread=true|false (ALPHA - default=false)
+MixedProtocolLBService=true|false (BETA - default=true)
NetworkPolicyEndPort=true|false (BETA - default=true)
+NetworkPolicyStatus=true|false (ALPHA - default=false)
+NodeOutOfServiceVolumeDetach=true|false (ALPHA - default=false)
NodeSwap=true|false (ALPHA - default=false)
-NonPreemptingPriority=true|false (BETA - default=true)
-PodAffinityNamespaceSelector=true|false (BETA - default=true)
+OpenAPIEnums=true|false (BETA - default=true)
+OpenAPIV3=true|false (BETA - default=true)
+PodAndContainerStatsFromCRI=true|false (ALPHA - default=false)
PodDeletionCost=true|false (BETA - default=true)
-PodOverhead=true|false (BETA - default=true)
-PodSecurity=true|false (ALPHA - default=false)
-PreferNominatedNode=true|false (BETA - default=true)
+PodSecurity=true|false (BETA - default=true)
ProbeTerminationGracePeriod=true|false (BETA - default=false)
ProcMountType=true|false (ALPHA - default=false)
ProxyTerminatingEndpoints=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ReadWriteOncePod=true|false (ALPHA - default=false)
+RecoverVolumeExpansionFailure=true|false (ALPHA - default=false)
RemainingItemCount=true|false (BETA - default=true)
-RemoveSelfLink=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (BETA - default=true)
SeccompDefault=true|false (ALPHA - default=false)
+ServerSideFieldValidation=true|false (ALPHA - default=false)
+ServiceIPStaticSubrange=true|false (ALPHA - default=false)
ServiceInternalTrafficPolicy=true|false (BETA - default=true)
-ServiceLBNodePortControl=true|false (BETA - default=true)
-ServiceLoadBalancerClass=true|false (BETA - default=true)
SizeMemoryBackedVolumes=true|false (BETA - default=true)
-StatefulSetMinReadySeconds=true|false (ALPHA - default=false)
+StatefulSetAutoDeletePVC=true|false (ALPHA - default=false)
+StatefulSetMinReadySeconds=true|false (BETA - default=true)
StorageVersionAPI=true|false (ALPHA - default=false)
StorageVersionHash=true|false (BETA - default=true)
-SuspendJob=true|false (BETA - default=true)
-TTLAfterFinished=true|false (BETA - default=true)
-TopologyAwareHints=true|false (ALPHA - default=false)
+TopologyAwareHints=true|false (BETA - default=true)
TopologyManager=true|false (BETA - default=true)
VolumeCapacityPriority=true|false (ALPHA - default=false)
WinDSR=true|false (ALPHA - default=false)
WinOverlay=true|false (BETA - default=true)
-WindowsHostProcessContainers=true|false (ALPHA - default=false)
+WindowsHostProcessContainers=true|false (BETA - default=true)
-->
一组 key=value 对,用来描述测试性/试验性功能的特性门控(Feature Gate)。可选项有:
APIListChunking=true|false (BETA - 默认值=true)
@@ -963,96 +930,99 @@ APIServerIdentity=true|false (ALPHA - 默认值=false)
APIServerTracing=true|false (ALPHA - 默认值=false)
AllAlpha=true|false (ALPHA - 默认值=false)
AllBeta=true|false (BETA - 默认值=false)
-AnyVolumeDataSource=true|false (ALPHA - 默认值=false)
+AnyVolumeDataSource=true|false (BETA - 默认值=true)
AppArmor=true|false (BETA - 默认值=true)
CPUManager=true|false (BETA - 默认值=true)
-CPUManagerPolicyOptions=true|false (ALPHA - 默认值=false)
+CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
+CPUManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
+CPUManagerPolicyOptions=true|false (BETA - 默认值=true)
CSIInlineVolume=true|false (BETA - 默认值=true)
CSIMigration=true|false (BETA - 默认值=true)
-CSIMigrationAWS=true|false (BETA - 默认值=false)
-CSIMigrationAzureDisk=true|false (BETA - 默认值=false)
-CSIMigrationAzureFile=true|false (BETA - 默认值=false)
-CSIMigrationGCE=true|false (BETA - 默认值=false)
-CSIMigrationOpenStack=true|false (BETA - 默认值=true)
+CSIMigrationAWS=true|false (BETA - 默认值=true)
+CSIMigrationAzureFile=true|false (BETA - 默认值=true)
+CSIMigrationGCE=true|false (BETA - 默认值=true)
+CSIMigrationPortworx=true|false (ALPHA - 默认值=false)
+CSIMigrationRBD=true|false (ALPHA - 默认值=false)
CSIMigrationvSphere=true|false (BETA - 默认值=false)
-CSIStorageCapacity=true|false (BETA - 默认值=true)
-CSIVolumeFSGroupPolicy=true|false (BETA - 默认值=true)
CSIVolumeHealth=true|false (ALPHA - 默认值=false)
-CSRDuration=true|false (BETA - 默认值=true)
-ConfigurableFSGroupPolicy=true|false (BETA - 默认值=true)
-ControllerManagerLeaderMigration=true|false (BETA - 默认值=true)
+ContextualLogging=true|false (ALPHA - 默认值=false)
+CronJobTimeZone=true|false (ALPHA - 默认值=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
+CustomResourceValidationExpressions=true|false (ALPHA - 默认值=false)
DaemonSetUpdateSurge=true|false (BETA - 默认值=true)
-默认值PodTopologySpread=true|false (BETA - 默认值=true)
-DelegateFSGroupToCSIDriver=true|false (ALPHA - 默认值=false)
+DelegateFSGroupToCSIDriver=true|false (BETA - 默认值=true)
DevicePlugins=true|false (BETA - 默认值=true)
DisableAcceleratorUsageMetrics=true|false (BETA - 默认值=true)
DisableCloudProviders=true|false (ALPHA - 默认值=false)
-DownwardAPIHugePages=true|false (BETA - 默认值=false)
-EfficientWatchResumption=true|false (BETA - 默认值=true)
+DisableKubeletCloudCredentialProviders=true|false (ALPHA - 默认值=false)
+DownwardAPIHugePages=true|false (BETA - 默认值=true)
EndpointSliceTerminatingCondition=true|false (BETA - 默认值=true)
-EphemeralContainers=true|false (ALPHA - 默认值=false)
-ExpandCSIVolumes=true|false (BETA - 默认值=true)
-ExpandInUsePersistentVolumes=true|false (BETA - 默认值=true)
-ExpandPersistentVolumes=true|false (BETA - 默认值=true)
+EphemeralContainers=true|false (BETA - 默认值=true)
ExpandedDNSConfig=true|false (ALPHA - 默认值=false)
-ExperimentalHostUserNamespace默认值ing=true|false (BETA - 默认值=false)
-GenericEphemeralVolume=true|false (BETA - 默认值=true)
+ExperimentalHostUserNamespaceDefaulting=true|false (BETA - 默认值=false)
+GRPCContainerProbe=true|false (BETA - 默认值=true)
GracefulNodeShutdown=true|false (BETA - 默认值=true)
+GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值=true)
HPAContainerMetrics=true|false (ALPHA - 默认值=false)
HPAScaleToZero=true|false (ALPHA - 默认值=false)
-IPv6DualStack=true|false (BETA - 默认值=true)
+HonorPVReclaimPolicy=true|false (ALPHA - 默认值=false)
+IdentifyPodOS=true|false (BETA - 默认值=true)
InTreePluginAWSUnregister=true|false (ALPHA - 默认值=false)
InTreePluginAzureDiskUnregister=true|false (ALPHA - 默认值=false)
InTreePluginAzureFileUnregister=true|false (ALPHA - 默认值=false)
InTreePluginGCEUnregister=true|false (ALPHA - 默认值=false)
InTreePluginOpenStackUnregister=true|false (ALPHA - 默认值=false)
+InTreePluginPortworxUnregister=true|false (ALPHA - 默认值=false)
+InTreePluginRBDUnregister=true|false (ALPHA - 默认值=false)
InTreePluginvSphereUnregister=true|false (ALPHA - 默认值=false)
-IndexedJob=true|false (BETA - 默认值=true)
-IngressClassNamespacedParams=true|false (BETA - 默认值=true)
-JobTrackingWithFinalizers=true|false (ALPHA - 默认值=false)
-KubeletCredentialProviders=true|false (ALPHA - 默认值=false)
+JobMutableNodeSchedulingDirectives=true|false (BETA - 默认值=true)
+JobReadyPods=true|false (BETA - 默认值=true)
+JobTrackingWithFinalizers=true|false (BETA - 默认值=false)
+KubeletCredentialProviders=true|false (BETA - 默认值=true)
KubeletInUserNamespace=true|false (ALPHA - 默认值=false)
KubeletPodResources=true|false (BETA - 默认值=true)
-KubeletPodResourcesGetAllocatable=true|false (ALPHA - 默认值=false)
+KubeletPodResourcesGetAllocatable=true|false (BETA - 默认值=true)
+LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolation=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值=false)
LogarithmicScaleDown=true|false (BETA - 默认值=true)
+MaxUnavailableStatefulSet=true|false (ALPHA - 默认值=false)
MemoryManager=true|false (BETA - 默认值=true)
MemoryQoS=true|false (ALPHA - 默认值=false)
-MixedProtocolLBService=true|false (ALPHA - 默认值=false)
+MinDomainsInPodTopologySpread=true|false (ALPHA - 默认值=false)
+MixedProtocolLBService=true|false (BETA - 默认值=true)
NetworkPolicyEndPort=true|false (BETA - 默认值=true)
+NetworkPolicyStatus=true|false (ALPHA - 默认值=false)
+NodeOutOfServiceVolumeDetach=true|false (ALPHA - 默认值=false)
NodeSwap=true|false (ALPHA - 默认值=false)
-NonPreemptingPriority=true|false (BETA - 默认值=true)
-PodAffinityNamespaceSelector=true|false (BETA - 默认值=true)
+OpenAPIEnums=true|false (BETA - 默认值=true)
+OpenAPIV3=true|false (BETA - 默认值=true)
+PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值=false)
PodDeletionCost=true|false (BETA - 默认值=true)
-PodOverhead=true|false (BETA - 默认值=true)
-PodSecurity=true|false (ALPHA - 默认值=false)
-PreferNominatedNode=true|false (BETA - 默认值=true)
+PodSecurity=true|false (BETA - 默认值=true)
ProbeTerminationGracePeriod=true|false (BETA - 默认值=false)
ProcMountType=true|false (ALPHA - 默认值=false)
ProxyTerminatingEndpoints=true|false (ALPHA - 默认值=false)
QOSReserved=true|false (ALPHA - 默认值=false)
ReadWriteOncePod=true|false (ALPHA - 默认值=false)
+RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值=false)
RemainingItemCount=true|false (BETA - 默认值=true)
-RemoveSelfLink=true|false (BETA - 默认值=true)
RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
-Seccomp默认值=true|false (ALPHA - 默认值=false)
+SeccompDefault=true|false (ALPHA - 默认值=false)
+ServerSideFieldValidation=true|false (ALPHA - 默认值=false)
+ServiceIPStaticSubrange=true|false (ALPHA - 默认值=false)
ServiceInternalTrafficPolicy=true|false (BETA - 默认值=true)
-ServiceLBNodePortControl=true|false (BETA - 默认值=true)
-ServiceLoadBalancerClass=true|false (BETA - 默认值=true)
SizeMemoryBackedVolumes=true|false (BETA - 默认值=true)
-StatefulSetMinReadySeconds=true|false (ALPHA - 默认值=false)
+StatefulSetAutoDeletePVC=true|false (ALPHA - 默认值=false)
+StatefulSetMinReadySeconds=true|false (BETA - 默认值=true)
StorageVersionAPI=true|false (ALPHA - 默认值=false)
StorageVersionHash=true|false (BETA - 默认值=true)
-SuspendJob=true|false (BETA - 默认值=true)
-TTLAfterFinished=true|false (BETA - 默认值=true)
-TopologyAwareHints=true|false (ALPHA - 默认值=false)
+TopologyAwareHints=true|false (BETA - 默认值=true)
TopologyManager=true|false (BETA - 默认值=true)
VolumeCapacityPriority=true|false (ALPHA - 默认值=false)
WinDSR=true|false (ALPHA - 默认值=false)
WinOverlay=true|false (BETA - 默认值=true)
-WindowsHostProcessContainers=true|false (ALPHA - 默认值=false)
+WindowsHostProcessContainers=true|false (BETA - 默认值=true)
@@ -1181,7 +1151,7 @@ Content type of requests sent to apiserver.
---kube-api-qps float32 默认值:20
+--kube-api-qps float 默认值:20
@@ -1267,10 +1237,10 @@ The interval between attempts by the acting master to renew a leadership slot be
-在领导者选举期间用于锁定的资源对象的类型。 支持的选项为 "endpoints"、
-"configmaps"、"leases"、"endpointsleases" 和 "configmapsleases"。
+在领导者选举期间用于锁定的资源对象的类型。 支持的选项为
+"leases"、"endpointsleases" 和 "configmapsleases"。
@@ -1326,56 +1296,6 @@ Path to the config file for controller leader migration, or empty to use the val
-
-
---log-backtrace-at traceLocation 默认值::0
-
-
-
-
-当执行到 file:N 所给的文件和代码行时,日志机制会生成一个调用栈快照。
-
-
-
-
---log-dir string
-
-
-
-
-此标志为非空字符串时,日志文件会写入到所给的目录中。
-
-
-
-
---log-file string
-
-
-
-
-此标志为非空字符串时,意味着日志会写入到所给的文件中。
-
-
-
-
---log-file-max-size uint 默认值:1800
-
-
-
-
-定义日志文件大小的上限。单位是兆字节(MB)。
-若此值为 0,则不对日志文件尺寸进行约束。
-
-
-
--log-flush-frequency duration 默认值:5s
@@ -1394,31 +1314,19 @@ Maximum number of seconds between log flushes
-设置日志格式。允许的格式:"text"。
+设置日志格式。允许的格式:"text"。
非默认格式不支持以下标志:--add-dir-header、
---alsologtostderr》、--log-backtrace-at、
+--alsologtostderr、--log-backtrace-at、
--log-dir、--log-file、--log-file-max-size、
--logtostderr、--one-output、--skip-headers、
--skip-log-headers、--stderrthreshold、
---vmodule、--log-flush-frequency。
+--vmodule。
当前非默认选项为 Alpha 阶段,如有更改,恕不另行通知。
-
---logtostderr 默认值:true
-
-
-
-
-将日志写出到标准错误输出(stderr)而不是写入到日志文件。
-
-
-
--master string
@@ -1492,10 +1400,10 @@ EndpointSlice 更改的处理将延迟此持续时间,
EndpointSliceMirroring 控制器将添加到 EndpointSlice 的最大端点数。
-每个分片的端点越多,端点分片越少,但资源越大。
+每个分片的端点越多,端点分片越少,但资源越大。默认为 100。
@@ -1548,15 +1456,15 @@ Mask size for IPv6 node cidr in dual-stack cluster. Default is 64.
---node-eviction-rate float32 默认值:0.1
+--node-eviction-rate float 默认值:0.1
-当某区域变得不健康,节点失效时,每秒钟可以从此标志所设定的节点
-个数上删除 Pods。请参阅 --unhealthy-zone-threshold
+当某区域健康时,在节点故障的情况下每秒删除 Pods 的节点数。
+请参阅 --unhealthy-zone-threshold
以了解“健康”的判定标准。这里的区域(zone)在集群并不跨多个区域时
指的是整个集群。
@@ -1601,29 +1509,17 @@ Amount of time which we allow starting Node to be unresponsive before marking it
-
---one-output
-
-
-
-
-如果此标志为 true,则仅将日志写入其自身的严重性级别(而不是同时写入更低的严重性级别中)。
-
-
-
--permit-address-sharing
如果此标志为 true,则在绑定端口时使用 SO_REUSEADDR。
这就意味着可以同时绑定到 0.0.0.0 和特定的 IP 地址,
-并且避免等待内核释放处于 TIME_WAITE 状态的套接字。
+并且避免等待内核释放处于 TIME_WAITE 状态的套接字。[默认值=false]。
@@ -1637,7 +1533,7 @@ If true, SO_REUSEADDR will be used when binding the port. This allows binding to
If true, SO_REUSEPORT will be used when binding the port, which allows more than one instance to bind on the same address and port. [default=false]
-->
如果为 true,则在绑定端口时将使用 SO_REUSEPORT,
-这允许多个实例在同一地址和端口上进行绑定。
+这允许多个实例在同一地址和端口上进行绑定。[默认值=false]。
@@ -1722,7 +1618,7 @@ The file path to a pod definition used as a template for HostPath persistent vol
对 NFS 卷执行回收利用时,用作模版的 Pod 定义文件所在路径。
@@ -1759,7 +1655,8 @@ The period for syncing persistent volumes and persistent volume claims
+List of client certificate common names to allow to provide usernames in headers specified by --requestheader-username-headers. If empty, any client certificate validated by the authorities in --requestheader-client-ca-file is allowed.
+-->
标志值是客户端证书中的 Common Names 列表。其中所列的名称可以通过
--requestheader-username-headers 所设置的 HTTP 头部来提供用户名。
如果此标志值为空表,则被 --requestheader-client-ca-file
@@ -1921,42 +1818,6 @@ The previous version for which you want to show hidden metrics. Only the previou
-
---skip-headers
-
-
-
-
-若此标志为 true,则在日志消息中避免写入头部前缀信息。
-
-
-
-
---skip-log-headers
-
-
-
-
-若此标志为 true,则在写入日志文件时避免写入头部信息。
-
-
-
-
---stderrthreshold severity 默认值:2
-
-
-
-
-等于或大于此阈值的日志信息会被写入到标准错误输出(stderr)。
-
-
-
--terminated-pod-gc-threshold int32 默认值:12500
@@ -1992,11 +1853,11 @@ File containing the default x509 Certificate for HTTPS. (CA cert, if any, concat
供服务器使用的加密包的逗号分隔列表。若忽略此标志,则使用 Go 语言默认的加密包。
-可选值包括:TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384.
- 不安全的值: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_RC4_128_SHA
+可选值包括:TLS_AES_128_GCM_SHA256、TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305、TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384。
+ 不安全的值: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_RC4_128_SHA、TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_RC4_128_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_RC4_128_SHA。
@@ -2026,12 +1887,12 @@ File containing the default x509 private key matching --tls-cert-file.
---tls-sni-cert-key namedCertKey 默认值:[]
+--tls-sni-cert-key string
X509 证书和私钥文件路径的耦对。作为可选项,可以添加域名模式的列表,
其中每个域名模式都是可以带通配片段前缀的全限定域名(FQDN)。
@@ -2092,14 +1953,14 @@ Print version information and quit
---vmodule <逗号分隔的 'pattern=N' 配置值>
+--vmodule pattern=N,...
-由逗号分隔的列表,每一项都是 pattern=N 格式,用来执行根据文件过滤的日志行为。
+由逗号分隔的列表,每一项都是 pattern=N 格式,用来执行根据文件过滤的日志行为(仅适用于 text 日志格式)。
diff --git a/content/zh/docs/reference/command-line-tools-reference/kube-proxy.md b/content/zh/docs/reference/command-line-tools-reference/kube-proxy.md
index 0eff062d25..2cb541d830 100644
--- a/content/zh/docs/reference/command-line-tools-reference/kube-proxy.md
+++ b/content/zh/docs/reference/command-line-tools-reference/kube-proxy.md
@@ -53,30 +53,6 @@ kube-proxy [flags]
-
---add-dir-header
-
-
-
-
-若此标志为 true,则将文件目录添加到日志消息的头部。
-
-
-
-
---alsologtostderr
-
-
-
-
-将日志输出到文件时也输出到标准错误输出(stderr)。
-
-
-
--azure-container-registry-config string
@@ -96,10 +72,11 @@ Path to the file containing Azure container registry configuration information.
代理服务器要使用的 IP 地址(设置为 '0.0.0.0' 表示要使用所有 IPv4 接口;
设置为 '::' 表示使用所有 IPv6 接口)。
+如果配置文件由 --config 指定,则忽略此参数。
@@ -142,17 +119,44 @@ If true cleanup iptables and ipvs rules and exit.
+
+--cloud-provider-gce-l7lb-src-cidrs cidrs 默认值:130.211.0.0/22,35.191.0.0/16
+
+
+
+
+此值表示,在 GCE 防火墙中打开 CIDRs 用于 L7 LB 流量代理 & 健康检查。
+
+
+
+
+--cloud-provider-gce-lb-src-cidrs cidrs 默认值:130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16
+
+
+
+
+此值表示,在 GCE 防火墙中打开 CIDRs 用于 L4 LB 流量代理 & 健康检查。
+
+
+
--cluster-cidr string
集群中 Pod 的 CIDR 范围。配置后,将从该范围之外发送到服务集群 IP
-的流量被伪装,从 Pod 发送到外部 LoadBalancer IP 的流量将被重定向
-到相应的集群 IP。
+的流量被伪装,从 Pod 发送到外部 LoadBalancer IP
+的流量将被重定向到相应的集群 IP。
+对于双协议栈集群,接受一个逗号分隔的列表,
+每个 IP 协议族(IPv4 和 IPv6)至少包含一个 CIDR。
+如果配置文件由 --config 指定,则忽略此参数。
@@ -238,13 +242,42 @@ Idle timeout for established TCP connections (0 to leave as-is)
+
+--default-not-ready-toleration-seconds int 默认值:300
+
+
+
+
+对污点 NotReady:NoExecute 的容忍时长(以秒计)。
+默认情况下这一容忍度会被添加到尚未具有此容忍度的每个 pod 中。
+
+
+
+
+--default-unreachable-toleration-seconds int 默认值:300
+
+
+
+
+对污点 Unreachable:NoExecute 的容忍时长(以秒计)
+默认情况下这一容忍度会被添加到尚未具有此容忍度的每个 pod 中。
+
+
+
--detect-local-mode LocalMode
-
+
用于检测本地流量的模式。
+如果配置文件由 --config 指定,则忽略此参数。
@@ -264,96 +297,100 @@ APIServerIdentity=true|false (ALPHA - default=false)
APIServerTracing=true|false (ALPHA - default=false)
AllAlpha=true|false (ALPHA - default=false)
AllBeta=true|false (BETA - default=false)
-AnyVolumeDataSource=true|false (ALPHA - default=false)
+AnyVolumeDataSource=true|false (BETA - default=true)
AppArmor=true|false (BETA - default=true)
CPUManager=true|false (BETA - default=true)
-CPUManagerPolicyOptions=true|false (ALPHA - default=false)
+CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false)
+CPUManagerPolicyBetaOptions=true|false (BETA - default=true)
+CPUManagerPolicyOptions=true|false (BETA - default=true)
CSIInlineVolume=true|false (BETA - default=true)
CSIMigration=true|false (BETA - default=true)
-CSIMigrationAWS=true|false (BETA - default=false)
-CSIMigrationAzureDisk=true|false (BETA - default=false)
-CSIMigrationAzureFile=true|false (BETA - default=false)
-CSIMigrationGCE=true|false (BETA - default=false)
-CSIMigrationOpenStack=true|false (BETA - default=true)
+CSIMigrationAWS=true|false (BETA - default=true)
+CSIMigrationAzureFile=true|false (BETA - default=true)
+CSIMigrationGCE=true|false (BETA - default=true)
+CSIMigrationPortworx=true|false (ALPHA - default=false)
+CSIMigrationRBD=true|false (ALPHA - default=false)
CSIMigrationvSphere=true|false (BETA - default=false)
-CSIStorageCapacity=true|false (BETA - default=true)
-CSIVolumeFSGroupPolicy=true|false (BETA - default=true)
CSIVolumeHealth=true|false (ALPHA - default=false)
-CSRDuration=true|false (BETA - default=true)
-ConfigurableFSGroupPolicy=true|false (BETA - default=true)
-ControllerManagerLeaderMigration=true|false (BETA - default=true)
+ContextualLogging=true|false (ALPHA - default=false)
+CronJobTimeZone=true|false (ALPHA - default=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false)
+CustomResourceValidationExpressions=true|false (ALPHA - default=false)
DaemonSetUpdateSurge=true|false (BETA - default=true)
-DefaultPodTopologySpread=true|false (BETA - default=true)
-DelegateFSGroupToCSIDriver=true|false (ALPHA - default=false)
+DelegateFSGroupToCSIDriver=true|false (BETA - default=true)
DevicePlugins=true|false (BETA - default=true)
DisableAcceleratorUsageMetrics=true|false (BETA - default=true)
DisableCloudProviders=true|false (ALPHA - default=false)
-DownwardAPIHugePages=true|false (BETA - default=false)
-EfficientWatchResumption=true|false (BETA - default=true)
+DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false)
+DownwardAPIHugePages=true|false (BETA - default=true)
EndpointSliceTerminatingCondition=true|false (BETA - default=true)
-EphemeralContainers=true|false (ALPHA - default=false)
-ExpandCSIVolumes=true|false (BETA - default=true)
-ExpandInUsePersistentVolumes=true|false (BETA - default=true)
-ExpandPersistentVolumes=true|false (BETA - default=true)
+EphemeralContainers=true|false (BETA - default=true)
ExpandedDNSConfig=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
-GenericEphemeralVolume=true|false (BETA - default=true)
+GRPCContainerProbe=true|false (BETA - default=true)
GracefulNodeShutdown=true|false (BETA - default=true)
+GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - default=true)
HPAContainerMetrics=true|false (ALPHA - default=false)
HPAScaleToZero=true|false (ALPHA - default=false)
-IPv6DualStack=true|false (BETA - default=true)
+HonorPVReclaimPolicy=true|false (ALPHA - default=false)
+IdentifyPodOS=true|false (BETA - default=true)
InTreePluginAWSUnregister=true|false (ALPHA - default=false)
InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false)
InTreePluginAzureFileUnregister=true|false (ALPHA - default=false)
InTreePluginGCEUnregister=true|false (ALPHA - default=false)
InTreePluginOpenStackUnregister=true|false (ALPHA - default=false)
+InTreePluginPortworxUnregister=true|false (ALPHA - default=false)
+InTreePluginRBDUnregister=true|false (ALPHA - default=false)
InTreePluginvSphereUnregister=true|false (ALPHA - default=false)
-IndexedJob=true|false (BETA - default=true)
-IngressClassNamespacedParams=true|false (BETA - default=true)
-JobTrackingWithFinalizers=true|false (ALPHA - default=false)
-KubeletCredentialProviders=true|false (ALPHA - default=false)
+JobMutableNodeSchedulingDirectives=true|false (BETA - default=true)
+JobReadyPods=true|false (BETA - default=true)
+JobTrackingWithFinalizers=true|false (BETA - default=false)
+KubeletCredentialProviders=true|false (BETA - default=true)
KubeletInUserNamespace=true|false (ALPHA - default=false)
KubeletPodResources=true|false (BETA - default=true)
-KubeletPodResourcesGetAllocatable=true|false (ALPHA - default=false)
+KubeletPodResourcesGetAllocatable=true|false (BETA - default=true)
+LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - default=true)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false)
LogarithmicScaleDown=true|false (BETA - default=true)
+MaxUnavailableStatefulSet=true|false (ALPHA - default=false)
MemoryManager=true|false (BETA - default=true)
MemoryQoS=true|false (ALPHA - default=false)
-MixedProtocolLBService=true|false (ALPHA - default=false)
+MinDomainsInPodTopologySpread=true|false (ALPHA - default=false)
+MixedProtocolLBService=true|false (BETA - default=true)
NetworkPolicyEndPort=true|false (BETA - default=true)
+NetworkPolicyStatus=true|false (ALPHA - default=false)
+NodeOutOfServiceVolumeDetach=true|false (ALPHA - default=false)
NodeSwap=true|false (ALPHA - default=false)
-NonPreemptingPriority=true|false (BETA - default=true)
-PodAffinityNamespaceSelector=true|false (BETA - default=true)
+OpenAPIEnums=true|false (BETA - default=true)
+OpenAPIV3=true|false (BETA - default=true)
+PodAndContainerStatsFromCRI=true|false (ALPHA - default=false)
PodDeletionCost=true|false (BETA - default=true)
-PodOverhead=true|false (BETA - default=true)
-PodSecurity=true|false (ALPHA - default=false)
-PreferNominatedNode=true|false (BETA - default=true)
+PodSecurity=true|false (BETA - default=true)
ProbeTerminationGracePeriod=true|false (BETA - default=false)
ProcMountType=true|false (ALPHA - default=false)
ProxyTerminatingEndpoints=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
ReadWriteOncePod=true|false (ALPHA - default=false)
+RecoverVolumeExpansionFailure=true|false (ALPHA - default=false)
RemainingItemCount=true|false (BETA - default=true)
-RemoveSelfLink=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (BETA - default=true)
SeccompDefault=true|false (ALPHA - default=false)
+ServerSideFieldValidation=true|false (ALPHA - default=false)
+ServiceIPStaticSubrange=true|false (ALPHA - default=false)
ServiceInternalTrafficPolicy=true|false (BETA - default=true)
-ServiceLBNodePortControl=true|false (BETA - default=true)
-ServiceLoadBalancerClass=true|false (BETA - default=true) 1
SizeMemoryBackedVolumes=true|false (BETA - default=true)
-StatefulSetMinReadySeconds=true|false (ALPHA - default=false)
+StatefulSetAutoDeletePVC=true|false (ALPHA - default=false)
+StatefulSetMinReadySeconds=true|false (BETA - default=true)
StorageVersionAPI=true|false (ALPHA - default=false)
StorageVersionHash=true|false (BETA - default=true)
-SuspendJob=true|false (BETA - default=true)
-TTLAfterFinished=true|false (BETA - default=true)
-TopologyAwareHints=true|false (ALPHA - default=false)
+TopologyAwareHints=true|false (BETA - default=true)
TopologyManager=true|false (BETA - default=true)
VolumeCapacityPriority=true|false (ALPHA - default=false)
WinDSR=true|false (ALPHA - default=false)
WinOverlay=true|false (BETA - default=true)
-WindowsHostProcessContainers=true|false (ALPHA - default=false)
+WindowsHostProcessContainers=true|false (BETA - default=true)
+This parameter is ignored if a config file is specified by --config.
-->
一组键=值(key=value)对,描述了 alpha/experimental 的特征。可选项有:
APIListChunking=true|false (BETA - 默认值=true)
@@ -363,96 +400,100 @@ APIServerIdentity=true|false (ALPHA - 默认值=false)
APIServerTracing=true|false (ALPHA - 默认值=false)
AllAlpha=true|false (ALPHA - 默认值=false)
AllBeta=true|false (BETA - 默认值=false)
-AnyVolumeDataSource=true|false (ALPHA - 默认值=false)
+AnyVolumeDataSource=true|false (BETA - 默认值=true)
AppArmor=true|false (BETA - 默认值=true)
CPUManager=true|false (BETA - 默认值=true)
-CPUManagerPolicyOptions=true|false (ALPHA - 默认值=false)
+CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值=false)
+CPUManagerPolicyBetaOptions=true|false (BETA - 默认值=true)
+CPUManagerPolicyOptions=true|false (BETA - 默认值=true)
CSIInlineVolume=true|false (BETA - 默认值=true)
CSIMigration=true|false (BETA - 默认值=true)
-CSIMigrationAWS=true|false (BETA - 默认值=false)
-CSIMigrationAzureDisk=true|false (BETA - 默认值=false)
-CSIMigrationAzureFile=true|false (BETA - 默认值=false)
-CSIMigrationGCE=true|false (BETA - 默认值=false)
-CSIMigrationOpenStack=true|false (BETA - 默认值=true)
+CSIMigrationAWS=true|false (BETA - 默认值=true)
+CSIMigrationAzureFile=true|false (BETA - 默认值=true)
+CSIMigrationGCE=true|false (BETA - 默认值=true)
+CSIMigrationPortworx=true|false (ALPHA - 默认值=false)
+CSIMigrationRBD=true|false (ALPHA - 默认值=false)
CSIMigrationvSphere=true|false (BETA - 默认值=false)
-CSIStorageCapacity=true|false (BETA - 默认值=true)
-CSIVolumeFSGroupPolicy=true|false (BETA - 默认值=true)
CSIVolumeHealth=true|false (ALPHA - 默认值=false)
-CSRDuration=true|false (BETA - 默认值=true)
-ConfigurableFSGroupPolicy=true|false (BETA - 默认值=true)
-ControllerManagerLeaderMigration=true|false (BETA - 默认值=true)
+ContextualLogging=true|false (ALPHA - 默认值=false)
+CronJobTimeZone=true|false (ALPHA - 默认值=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
+CustomResourceValidationExpressions=true|false (ALPHA - 默认值=false)
DaemonSetUpdateSurge=true|false (BETA - 默认值=true)
-DefaultPodTopologySpread=true|false (BETA - 默认值=true)
-DelegateFSGroupToCSIDriver=true|false (ALPHA - 默认值=false)
+DelegateFSGroupToCSIDriver=true|false (BETA - 默认值=true)
DevicePlugins=true|false (BETA - 默认值=true)
DisableAcceleratorUsageMetrics=true|false (BETA - 默认值=true)
DisableCloudProviders=true|false (ALPHA - 默认值=false)
-DownwardAPIHugePages=true|false (BETA - 默认值=false)
-EfficientWatchResumption=true|false (BETA - 默认值=true)
+DisableKubeletCloudCredentialProviders=true|false (ALPHA - 默认值=false)
+DownwardAPIHugePages=true|false (BETA - 默认值=true)
EndpointSliceTerminatingCondition=true|false (BETA - 默认值=true)
-EphemeralContainers=true|false (ALPHA - 默认值=false)
-ExpandCSIVolumes=true|false (BETA - 默认值=true)
-ExpandInUsePersistentVolumes=true|false (BETA - 默认值=true)
-ExpandPersistentVolumes=true|false (BETA - 默认值=true)
+EphemeralContainers=true|false (BETA - 默认值=true)
ExpandedDNSConfig=true|false (ALPHA - 默认值=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - 默认值=false)
-GenericEphemeralVolume=true|false (BETA - 默认值=true)
+GRPCContainerProbe=true|false (BETA - 默认值=true)
GracefulNodeShutdown=true|false (BETA - 默认值=true)
+GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值=true)
HPAContainerMetrics=true|false (ALPHA - 默认值=false)
HPAScaleToZero=true|false (ALPHA - 默认值=false)
-IPv6DualStack=true|false (BETA - 默认值=true)
+HonorPVReclaimPolicy=true|false (ALPHA - 默认值=false)
+IdentifyPodOS=true|false (BETA - 默认值=true)
InTreePluginAWSUnregister=true|false (ALPHA - 默认值=false)
InTreePluginAzureDiskUnregister=true|false (ALPHA - 默认值=false)
InTreePluginAzureFileUnregister=true|false (ALPHA - 默认值=false)
InTreePluginGCEUnregister=true|false (ALPHA - 默认值=false)
InTreePluginOpenStackUnregister=true|false (ALPHA - 默认值=false)
+InTreePluginPortworxUnregister=true|false (ALPHA - 默认值=false)
+InTreePluginRBDUnregister=true|false (ALPHA - 默认值=false)
InTreePluginvSphereUnregister=true|false (ALPHA - 默认值=false)
-IndexedJob=true|false (BETA - 默认值=true)
-IngressClassNamespacedParams=true|false (BETA - 默认值=true)
-JobTrackingWithFinalizers=true|false (ALPHA - 默认值=false)
-KubeletCredentialProviders=true|false (ALPHA - 默认值=false)
+JobMutableNodeSchedulingDirectives=true|false (BETA - 默认值=true)
+JobReadyPods=true|false (BETA - 默认值=true)
+JobTrackingWithFinalizers=true|false (BETA - 默认值=false)
+KubeletCredentialProviders=true|false (BETA - 默认值=true)
KubeletInUserNamespace=true|false (ALPHA - 默认值=false)
KubeletPodResources=true|false (BETA - 默认值=true)
-KubeletPodResourcesGetAllocatable=true|false (ALPHA - 默认值=false)
+KubeletPodResourcesGetAllocatable=true|false (BETA - 默认值=true)
+LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolation=true|false (BETA - 默认值=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值=false)
LogarithmicScaleDown=true|false (BETA - 默认值=true)
+MaxUnavailableStatefulSet=true|false (ALPHA - 默认值=false)
MemoryManager=true|false (BETA - 默认值=true)
MemoryQoS=true|false (ALPHA - 默认值=false)
-MixedProtocolLBService=true|false (ALPHA - 默认值=false)
+MinDomainsInPodTopologySpread=true|false (ALPHA - 默认值=false)
+MixedProtocolLBService=true|false (BETA - 默认值=true)
NetworkPolicyEndPort=true|false (BETA - 默认值=true)
+NetworkPolicyStatus=true|false (ALPHA - 默认值=false)
+NodeOutOfServiceVolumeDetach=true|false (ALPHA - 默认值=false)
NodeSwap=true|false (ALPHA - 默认值=false)
-NonPreemptingPriority=true|false (BETA - 默认值=true)
-PodAffinityNamespaceSelector=true|false (BETA - 默认值=true)
+OpenAPIEnums=true|false (BETA - 默认值=true)
+OpenAPIV3=true|false (BETA - 默认值=true)
+PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值=false)
PodDeletionCost=true|false (BETA - 默认值=true)
-PodOverhead=true|false (BETA - 默认值=true)
-PodSecurity=true|false (ALPHA - 默认值=false)
-PreferNominatedNode=true|false (BETA - 默认值=true)
+PodSecurity=true|false (BETA - 默认值=true)
ProbeTerminationGracePeriod=true|false (BETA - 默认值=false)
ProcMountType=true|false (ALPHA - 默认值=false)
ProxyTerminatingEndpoints=true|false (ALPHA - 默认值=false)
QOSReserved=true|false (ALPHA - 默认值=false)
ReadWriteOncePod=true|false (ALPHA - 默认值=false)
+RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值=false)
RemainingItemCount=true|false (BETA - 默认值=true)
-RemoveSelfLink=true|false (BETA - 默认值=true)
RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
SeccompDefault=true|false (ALPHA - 默认值=false)
+ServerSideFieldValidation=true|false (ALPHA - 默认值=false)
+ServiceIPStaticSubrange=true|false (ALPHA - 默认值=false)
ServiceInternalTrafficPolicy=true|false (BETA - 默认值=true)
-ServiceLBNodePortControl=true|false (BETA - 默认值=true)
-ServiceLoadBalancerClass=true|false (BETA - 默认值=true)
SizeMemoryBackedVolumes=true|false (BETA - 默认值=true)
-StatefulSetMinReadySeconds=true|false (ALPHA - 默认值=false)
+StatefulSetAutoDeletePVC=true|false (ALPHA - 默认值=false)
+StatefulSetMinReadySeconds=true|false (BETA - 默认值=true)
StorageVersionAPI=true|false (ALPHA - 默认值=false)
StorageVersionHash=true|false (BETA - 默认值=true)
-SuspendJob=true|false (BETA - 默认值=true)
-TTLAfterFinished=true|false (BETA - 默认值=true)
-TopologyAwareHints=true|false (ALPHA - 默认值=false)
+TopologyAwareHints=true|false (BETA - 默认值=true)
TopologyManager=true|false (BETA - 默认值=true)
VolumeCapacityPriority=true|false (ALPHA - 默认值=false)
WinDSR=true|false (ALPHA - 默认值=false)
WinOverlay=true|false (BETA - 默认值=true)
-WindowsHostProcessContainers=true|false (ALPHA - 默认值=false)
+WindowsHostProcessContainers=true|false (BETA - 默认值=true)
+如果配置文件由 --config 指定,则忽略此参数。
@@ -463,13 +504,12 @@ WindowsHostProcessContainers=true|false (ALPHA - 默认值=false)
服务健康状态检查的 IP 地址和端口(设置为 '0.0.0.0:10256' 表示使用所有
IPv4 接口,设置为 '[::]:10256' 表示使用所有 IPv6 接口);
设置为空则禁用。
+如果配置文件由 --config 指定,则忽略此参数。
@@ -698,71 +738,6 @@ Path to kubeconfig file with authorization information (the master location is s
-
---log-backtrace-at <形式为 'file:N' 的字符串> Default: :0
-
-
-
-
-当日志逻辑执行到文件 file 的第 N 行时,输出调用堆栈跟踪。
-
-
-
-
-
---log-dir string
-
-
-
-
-若此标志费控,则将日志文件写入到此标志所给的目录下。
-
-
-
-
-
---log-file string
-
-
-
-
-若此标志非空,则该字符串作为日志文件名。
-
-
-
-
---log-file-max-size uint 默认值:1800
-
-
-
-
-定义日志文件可增长到的最大尺寸。单位是兆字节(MB)。
-如果此值为 0,则最大文件大小无限制。
-
-
-
-
-
---log-flush-frequency duration 默认值:5s
-
-
-
-
-
-两次日志刷新之间的最大秒数。
-
-
-
--machine-id-file string 默认值:"/etc/machine-id,/var/lib/dbus/machine-id"
@@ -776,6 +751,19 @@ Comma-separated list of files to check for machine-id. Use the first one that ex
+
+--machine_id_file string 默认值:"/etc/machine-id,/var/lib/dbus/machine-id"
+
+
+
+
+用来检查 Machine-ID 的文件列表,用逗号分隔。
+使用找到的第一个文件。
+
+
+
--masquerade-all
@@ -809,13 +797,12 @@ Kubernetes API 服务器的地址(覆盖 kubeconfig 中的相关值)。
metrics 服务器要使用的 IP 地址和端口
(设置为 '0.0.0.0:10249' 则使用所有 IPv4 接口,设置为 '[::]:10249' 则使用所有 IPv6 接口)
设置为空则禁用。
+如果配置文件由 --config 指定,则忽略此参数。
@@ -826,66 +813,84 @@ metrics 服务器要使用的 IP 地址和端口
一个字符串值,指定用于 NodePort 服务的地址。
值可以是有效的 IP 块(例如 1.2.3.0/24, 1.2.3.4/32)。
默认的空字符串切片([])表示使用所有本地地址。
+如果配置文件由 --config 指定,则忽略此参数。
-
---one-output
-
-
-
-
-若此标志为 true,则仅将日志写入到其原本的严重性级别之下
-(而不是将其写入到所有更低严重性级别中)。
-
-
-
--oom-score-adj int32 默认值:-999
kube-proxy 进程中的 oom-score-adj 值,必须在 [-1000,1000] 范围内。
+如果配置文件由 --config 指定,则忽略此参数。
+
+--pod-bridge-interface string
+
+
+
+
+集群中的一个桥接接口名称。
+Kube-proxy 将来自与该值匹配的桥接接口的流量视为本地流量。
+如果 DetectLocalMode 设置为 BridgeInterface,则应设置该参数。
+
+
+
+
+--pod-interface-name-prefix string
+
+
+
+
+集群中的一个接口前缀。
+Kube-proxy 将来自与给定前缀匹配的接口的流量视为本地流量。
+如果 DetectLocalMode 设置为 InterfaceNamePrefix,则应设置该参数。
+
+
+
--profiling
如果为 true,则通过 Web 接口 /debug/pprof 启用性能分析。
+如果配置文件由 --config 指定,则忽略此参数。
---proxy-mode string
+--proxy-mode ProxyMode
-使用哪种代理模式:'userspace'(较旧)或 'iptables'(较快)或 'ipvs'。
-如果为空,使用最佳可用代理(当前为 iptables)。
-如果选择了 iptables 代理(无论是否为显式设置),但系统的内核或
-iptables 版本较低,总是会回退到 userspace 代理。
+使用哪种代理模式:'iptables'(仅 Linux)、'ipvs'(仅 Linux)、'kernelspace'(仅 Linux)
+或者 'userspace'(Linux/Windows, 已弃用)。
+Linux 系统上的默认值是 'iptables',Windows 系统上的默认值是 'userspace'。
+如果配置文件由 --config 指定,则忽略此参数。
@@ -911,53 +916,18 @@ Range of host ports (beginPort-endPort, single port or beginPort+offset, inclusi
要显示隐藏指标的先前版本。
仅先前的次要版本有意义,不允许其他值。
格式为 <major>.<minor> ,例如:'1.16'。
这种格式的目的是确保你有机会注意到下一个发行版是否隐藏了其他指标,
而不是在之后将其永久删除时感到惊讶。
+如果配置文件由 --config 指定,则忽略此参数。
-
---skip-headers
-
-
-
-
-若此标志为 true,则避免在日志消息中包含头部前缀。
-
-
-
-
---skip-log-headers
-
-
-
-
-如果此标志为 true,则避免在打开日志文件时使用头部。
-
-
-
-
---stderrthreshold int 默认值:2
-
-
-
-
-如果日志消息处于或者高于此阈值所设置的级别,则将其输出到标准错误输出(stderr)。
-
-
-
--udp-timeout duration 默认值:250ms
@@ -972,18 +942,6 @@ How long an idle UDP connection will be kept open (e.g. '250ms', '2s'). Must be
-
--v, --v int
-
-
-
-
-用来设置日志详细程度的数值。
-
-
-
--version version[=true]
@@ -997,19 +955,6 @@ Print version information and quit
-
---vmodule <逗号分隔的 'pattern=N' 设置’>
-
-
-
-
-用逗号分隔的列表,其中每一项为 'pattern=N' 格式。
-用来支持基于文件过滤的日志机制。
-
-
-
--write-config-to string
diff --git a/content/zh/docs/reference/command-line-tools-reference/kube-scheduler.md b/content/zh/docs/reference/command-line-tools-reference/kube-scheduler.md
index dbb9eb3cfa..28fb4f2a61 100644
--- a/content/zh/docs/reference/command-line-tools-reference/kube-scheduler.md
+++ b/content/zh/docs/reference/command-line-tools-reference/kube-scheduler.md
@@ -2,7 +2,6 @@
title: kube-scheduler
content_type: tool-reference
weight: 30
-auto_generated: true
---
Kubernetes 调度器是一个控制面进程,负责将 Pods 指派到节点上。
调度器基于约束和可用资源为调度队列中每个 Pod 确定其可合法放置的节点。
调度器之后对所有合法的节点进行排序,将 Pod 绑定到一个合适的节点。
在同一个集群中可以使用多个不同的调度器;kube-scheduler 是其参考实现。
-参阅[调度](/zh/docs/concepts/scheduling-eviction/)
-以获得关于调度和 kube-scheduler 组件的更多信息。
+参阅[调度](/zh/docs/concepts/scheduling-eviction/)以获得关于调度和
+kube-scheduler 组件的更多信息。
```
kube-scheduler [flags]
@@ -44,71 +43,23 @@ kube-scheduler [flags]
-
---add-dir-header
-
-
-
-如果为 true,则将文件目录添加到日志消息的头部
-
-
-
---address string 默认值:"0.0.0.0"
-
-
-
-
-已弃用: 要监听 --port 端口的 IP 地址(将其设置为 0.0.0.0 或者 :: 用于监听所有接口和 IP族)。
-请参阅 --bind-address。
-如果在 --config 中指定了一个配置文件,这个参数将被忽略。
-
-
-
-
---algorithm-provider string
-
-
-
-
-已弃用: 要使用的调度算法驱动,此标志设置组件配置框架的默认插件。
-可选值:ClusterAutoscalerProvider | DefaultProvider
-
-
--allow-metric-labels stringToString
-默认值: []
+默认值:[]
-这个键值映射表设置 度量标签 所允许设置的值。
+这个键值映射表设置度量标签所允许设置的值。
其中键的格式是 <MetricName>,<LabelName>。
值的格式是 <allowed_value>,<allowed_value>。
例如:metric1,label1='v1,v2,v3', metric1,label2='v1,v2,v3' metric2,label1='v1,v2,v3'。
-
---alsologtostderr
-
-
-
-
-日志记录到标准错误以及文件
-
-
-
--authentication-kubeconfig string
@@ -168,7 +119,7 @@ If true, failures to look up missing authentication configuration from the clust
-在授权过程中跳过的 HTTP 路径列表,即在不联系 'core' kubernetes 服务器的情况下被授权的 HTTP 路径。
+在授权过程中跳过的 HTTP 路径列表,即在不联系 “core” kubernetes 服务器的情况下被授权的 HTTP 路径。
@@ -194,7 +145,7 @@ Kubernetes 核心服务器的 kubeconfig 文件。这是可选的。
-缓存来自 Webhook 授权者的 'authorized' 响应的持续时间。
+缓存来自 Webhook 授权者的 “authorized” 响应的持续时间。
@@ -206,7 +157,7 @@ The duration to cache 'authorized' responses from the webhook authorizer.
-缓存来自 Webhook 授权者的 'unauthorized' 响应的持续时间。
+缓存来自 Webhook 授权者的 “unauthorized” 响应的持续时间。
@@ -232,7 +183,7 @@ The IP address on which to listen for the --secure-port port. The associated int
-->
监听 --secure-port 端口的 IP 地址。
集群的其余部分以及 CLI/ Web 客户端必须可以访问关联的接口。
-如果为空,将使用所有接口(0.0.0.0 表示使用所有 IPv4 接口,"::" 表示使用所有 IPv6 接口)。
+如果为空,将使用所有接口(0.0.0.0 表示使用所有 IPv4 接口,“::” 表示使用所有 IPv6 接口)。
如果为空或未指定地址 (0.0.0.0 或 ::),所有接口将被使用。
@@ -269,22 +220,14 @@ If set, any request presenting a client certificate signed by one of the authori
-配置文件的路径。以下标志会覆盖此文件中的值:
---algorithm-provider
---policy-config-file
---policy-configmap
---policy-configmap-namespace
+配置文件的路径。
---contention-profiling 默认值: true
+--contention-profiling 默认值:true
@@ -309,19 +252,6 @@ This flag provides an escape hatch for misbehaving metrics. You must provide the
-
---experimental-logging-sanitization
-
-
-
-
-[试验性功能] 当启用此标志时,标记为敏感的字段(密码、密钥、令牌)等不会被日志
-输出。
-运行时的日志清理操作可能引入相当程度的计算开销,因此不应在生产环境中启用。
-
-
--feature-gates <逗号分隔的 'key=True|False' 对>
@@ -334,213 +264,204 @@ APIListChunking=true|false (BETA - default=true)
APIPriorityAndFairness=true|false (BETA - default=true)
APIResponseCompression=true|false (BETA - default=true)
APIServerIdentity=true|false (ALPHA - default=false)
+APIServerTracing=true|false (ALPHA - default=false)
AllAlpha=true|false (ALPHA - default=false)
AllBeta=true|false (BETA - default=false)
-AnyVolumeDataSource=true|false (ALPHA - default=false)
+AnyVolumeDataSource=true|false (BETA - default=true)
AppArmor=true|false (BETA - default=true)
-BalanceAttachedNodeVolumes=true|false (ALPHA - default=false)
-BoundServiceAccountTokenVolume=true|false (BETA - default=true)
CPUManager=true|false (BETA - default=true)
+CPUManagerPolicyAlphaOptions=true|false (ALPHA - default=false)
+CPUManagerPolicyBetaOptions=true|false (BETA - default=true)
+CPUManagerPolicyOptions=true|false (BETA - default=true)
CSIInlineVolume=true|false (BETA - default=true)
CSIMigration=true|false (BETA - default=true)
CSIMigrationAWS=true|false (BETA - default=false)
-CSIMigrationAzureDisk=true|false (BETA - default=false)
CSIMigrationAzureFile=true|false (BETA - default=false)
-CSIMigrationGCE=true|false (BETA - default=false)
-CSIMigrationOpenStack=true|false (BETA - default=true)
+CSIMigrationGCE=true|false (BETA - default=true)
+CSIMigrationPortworx=true|false (ALPHA - default=false)
+CSIMigrationRBD=true|false (ALPHA - default=false)
CSIMigrationvSphere=true|false (BETA - default=false)
-CSIMigrationvSphereComplete=true|false (BETA - default=false)
-CSIServiceAccountToken=true|false (BETA - default=true)
-CSIStorageCapacity=true|false (BETA - default=true)
-CSIVolumeFSGroupPolicy=true|false (BETA - default=true)
CSIVolumeHealth=true|false (ALPHA - default=false)
-ConfigurableFSGroupPolicy=true|false (BETA - default=true)
-ControllerManagerLeaderMigration=true|false (ALPHA - default=false)
-CronJobControllerV2=true|false (BETA - default=true)
+ContextualLogging=true|false (ALPHA - default=false)
+CronJobTimeZone=true|false (ALPHA - default=false)
CustomCPUCFSQuotaPeriod=true|false (ALPHA - default=false)
-DaemonSetUpdateSurge=true|false (ALPHA - default=false)
-DefaultPodTopologySpread=true|false (BETA - default=true)
+CustomResourceValidationExpressions=true|false (ALPHA - default=false)
+DaemonSetUpdateSurge=true|false (BETA - default=true)
+DelegateFSGroupToCSIDriver=true|false (BETA - default=true)
DevicePlugins=true|false (BETA - default=true)
DisableAcceleratorUsageMetrics=true|false (BETA - default=true)
-DownwardAPIHugePages=true|false (BETA - default=false)
-DynamicKubeletConfig=true|false (BETA - default=true)
-EfficientWatchResumption=true|false (BETA - default=true)
-EndpointSliceProxying=true|false (BETA - default=true)
-EndpointSliceTerminatingCondition=true|false (ALPHA - default=false)
-EphemeralContainers=true|false (ALPHA - default=false)
-ExpandCSIVolumes=true|false (BETA - default=true)
-ExpandInUsePersistentVolumes=true|false (BETA - default=true)
-ExpandPersistentVolumes=true|false (BETA - default=true)
+DisableCloudProviders=true|false (ALPHA - default=false)
+DisableKubeletCloudCredentialProviders=true|false (ALPHA - default=false)
+DownwardAPIHugePages=true|false (BETA - default=true)
+EndpointSliceTerminatingCondition=true|false (BETA - default=true)
+EphemeralContainers=true|false (BETA - default=true)
+ExpandedDNSConfig=true|false (ALPHA - default=false)
ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
-GenericEphemeralVolume=true|false (BETA - default=true)
+GRPCContainerProbe=true|false (BETA - default=true)
GracefulNodeShutdown=true|false (BETA - default=true)
+GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - default=true)
HPAContainerMetrics=true|false (ALPHA - default=false)
HPAScaleToZero=true|false (ALPHA - default=false)
-HugePageStorageMediumSize=true|false (BETA - default=true)
-IPv6DualStack=true|false (BETA - default=true)
+HonorPVReclaimPolicy=true|false (ALPHA - default=false)
+IdentifyPodOS=true|false (BETA - default=true)
InTreePluginAWSUnregister=true|false (ALPHA - default=false)
InTreePluginAzureDiskUnregister=true|false (ALPHA - default=false)
InTreePluginAzureFileUnregister=true|false (ALPHA - default=false)
InTreePluginGCEUnregister=true|false (ALPHA - default=false)
InTreePluginOpenStackUnregister=true|false (ALPHA - default=false)
+InTreePluginPortworxUnregister=true|false (ALPHA - default=false)
+InTreePluginRBDUnregister=true|false (ALPHA - default=false)
InTreePluginvSphereUnregister=true|false (ALPHA - default=false)
-IndexedJob=true|false (ALPHA - default=false)
-IngressClassNamespacedParams=true|false (ALPHA - default=false)
-KubeletCredentialProviders=true|false (ALPHA - default=false)
+obMutableNodeSchedulingDirectives=true|false (BETA - default=true)
+JobReadyPods=true|false (BETA - default=true)
+JobTrackingWithFinalizers=true|false (BETA - default=false)
+KubeletCredentialProviders=true|false (BETA - default=true)
+KubeletInUserNamespace=true|false (ALPHA - default=false)
KubeletPodResources=true|false (BETA - default=true)
-KubeletPodResourcesGetAllocatable=true|false (ALPHA - default=false)
+KubeletPodResourcesGetAllocatable=true|false (BETA - default=true)
+LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - default=true)
LocalStorageCapacityIsolation=true|false (BETA - default=true)
LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - default=false)
-LogarithmicScaleDown=true|false (ALPHA - default=false)
-MemoryManager=true|false (ALPHA - default=false)
-MixedProtocolLBService=true|false (ALPHA - default=false)
-NamespaceDefaultLabelName=true|false (BETA - default=true)
-NetworkPolicyEndPort=true|false (ALPHA - default=false)
-NonPreemptingPriority=true|false (BETA - default=true)
-PodAffinityNamespaceSelector=true|false (ALPHA - default=false)
-PodDeletionCost=true|false (ALPHA - default=false)
-PodOverhead=true|false (BETA - default=true)
-PreferNominatedNode=true|false (ALPHA - default=false)
-ProbeTerminationGracePeriod=true|false (ALPHA - default=false)
+LogarithmicScaleDown=true|false (BETA - default=true)
+MaxUnavailableStatefulSet=true|false (ALPHA - default=false)
+MemoryManager=true|false (BETA - default=true)
+MemoryQoS=true|false (ALPHA - default=false)
+MinDomainsInPodTopologySpread=true|false (ALPHA - default=false)
+MixedProtocolLBService=true|false (BETA - default=true)
+NetworkPolicyEndPort=true|false (BETA - default=true)
+NetworkPolicyStatus=true|false (ALPHA - default=false)
+NodeOutOfServiceVolumeDetach=true|false (ALPHA - default=false)
+NodeSwap=true|false (ALPHA - default=false)
+OpenAPIEnums=true|false (BETA - default=true)
+OpenAPIV3=true|false (BETA - default=true)
+PodAndContainerStatsFromCRI=true|false (ALPHA - default=false)
+PodDeletionCost=true|false (BETA - default=true)
+PodSecurity=true|false (BETA - default=true)
+ProbeTerminationGracePeriod=true|false (BETA - default=false)
ProcMountType=true|false (ALPHA - default=false)
+ProxyTerminatingEndpoints=true|false (ALPHA - default=false)
QOSReserved=true|false (ALPHA - default=false)
+ReadWriteOncePod=true|false (ALPHA - default=false)
+RecoverVolumeExpansionFailure=true|false (ALPHA - default=false)
RemainingItemCount=true|false (BETA - default=true)
-RemoveSelfLink=true|false (BETA - default=true)
RotateKubeletServerCertificate=true|false (BETA - default=true)
-ServerSideApply=true|false (BETA - default=true)
-ServiceInternalTrafficPolicy=true|false (ALPHA - default=false)
-ServiceLBNodePortControl=true|false (ALPHA - default=false)
-ServiceLoadBalancerClass=true|false (ALPHA - default=false)
-ServiceTopology=true|false (ALPHA - default=false)
-SetHostnameAsFQDN=true|false (BETA - default=true)
-SizeMemoryBackedVolumes=true|false (ALPHA - default=false)
+SeccompDefault=true|false (ALPHA - default=false)
+ServerSideFieldValidation=true|false (ALPHA - default=false)
+ServiceIPStaticSubrange=true|false (ALPHA - default=false)
+ServiceInternalTrafficPolicy=true|false (BETA - default=true)
+SizeMemoryBackedVolumes=true|false (BETA - default=true)
+StatefulSetAutoDeletePVC=true|false (ALPHA - default=false)
+StatefulSetMinReadySeconds=true|false (BETA - default=true)
StorageVersionAPI=true|false (ALPHA - default=false)
StorageVersionHash=true|false (BETA - default=true)
-SuspendJob=true|false (ALPHA - default=false)
-TTLAfterFinished=true|false (BETA - default=true)
-TopologyAwareHints=true|false (ALPHA - default=false)
+TopologyAwareHints=true|false (BETA - default=true)
TopologyManager=true|false (BETA - default=true)
-ValidateProxyRedirects=true|false (BETA - default=true)
VolumeCapacityPriority=true|false (ALPHA - default=false)
-WarningHeaders=true|false (BETA - default=true)
WinDSR=true|false (ALPHA - default=false)
WinOverlay=true|false (BETA - default=true)
-WindowsEndpointSliceProxying=true|false (BETA - default=true)
+WindowsHostProcessContainers=true|false (BETA - default=true)
-->
一组 key=value 对,描述了 alpha/experimental 特征开关。选项包括:
-A set of key=value pairs that describe feature gates for alpha/experimental features. Options are:
-APIListChunking=true|false (BETA - 默认值=true)
-APIPriorityAndFairness=true|false (BETA - 默认值=true)
-APIResponseCompression=true|false (BETA - 默认值=true)
-APIServerIdentity=true|false (ALPHA - 默认值=false)
-AllAlpha=true|false (ALPHA - 默认值=false)
-AllBeta=true|false (BETA - 默认值=false)
-AnyVolumeDataSource=true|false (ALPHA - 默认值=false)
-AppArmor=true|false (BETA - 默认值=true)
-BalanceAttachedNodeVolumes=true|false (ALPHA - 默认值=false)
-BoundServiceAccountTokenVolume=true|false (BETA - 默认值=true)
-CPUManager=true|false (BETA - 默认值=true)
-CSIInlineVolume=true|false (BETA - 默认值=true)
-CSIMigration=true|false (BETA - 默认值=true)
-CSIMigrationAWS=true|false (BETA - 默认值=false)
-CSIMigrationAzureDisk=true|false (BETA - 默认值=false)
-CSIMigrationAzureFile=true|false (BETA - 默认值=false)
-CSIMigrationGCE=true|false (BETA - 默认值=false)
-CSIMigrationOpenStack=true|false (BETA - 默认值=true)
-CSIMigrationvSphere=true|false (BETA - 默认值=false)
-CSIMigrationvSphereComplete=true|false (BETA - 默认值=false)
-CSIServiceAccountToken=true|false (BETA - 默认值=true)
-CSIStorageCapacity=true|false (BETA - 默认值=true)
-CSIVolumeFSGroupPolicy=true|false (BETA - 默认值=true)
-CSIVolumeHealth=true|false (ALPHA - 默认值=false)
-ConfigurableFSGroupPolicy=true|false (BETA - 默认值=true)
-ControllerManagerLeaderMigration=true|false (ALPHA - 默认值=false)
-CronJobControllerV2=true|false (BETA - 默认值=true)
-CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值=false)
-DaemonSetUpdateSurge=true|false (ALPHA - 默认值=false)
-DefaultPodTopologySpread=true|false (BETA - 默认值=true)
-DevicePlugins=true|false (BETA - 默认值=true)
-DisableAcceleratorUsageMetrics=true|false (BETA - 默认值=true)
-DownwardAPIHugePages=true|false (BETA - 默认值=false)
-DynamicKubeletConfig=true|false (BETA - 默认值=true)
-EfficientWatchResumption=true|false (BETA - 默认值=true)
-EndpointSliceProxying=true|false (BETA - 默认值=true)
-EndpointSliceTerminatingCondition=true|false (ALPHA - 默认值=false)
-EphemeralContainers=true|false (ALPHA - 默认值=false)
-ExpandCSIVolumes=true|false (BETA - 默认值=true)
-ExpandInUsePersistentVolumes=true|false (BETA - 默认值=true)
-ExpandPersistentVolumes=true|false (BETA - 默认值=true)
-ExperimentalHostUserNamespaceDefaulting=true|false (BETA - 默认值=false)
-GenericEphemeralVolume=true|false (BETA - 默认值=true)
-GracefulNodeShutdown=true|false (BETA - 默认值=true)
-HPAContainerMetrics=true|false (ALPHA - 默认值=false)
-HPAScaleToZero=true|false (ALPHA - 默认值=false)
-HugePageStorageMediumSize=true|false (BETA - 默认值=true)
-IPv6DualStack=true|false (BETA - 默认值=true)
-InTreePluginAWSUnregister=true|false (ALPHA - 默认值=false)
-InTreePluginAzureDiskUnregister=true|false (ALPHA - 默认值=false)
-InTreePluginAzureFileUnregister=true|false (ALPHA - 默认值=false)
-InTreePluginGCEUnregister=true|false (ALPHA - 默认值=false)
-InTreePluginOpenStackUnregister=true|false (ALPHA - 默认值=false)
-InTreePluginvSphereUnregister=true|false (ALPHA - 默认值=false)
-IndexedJob=true|false (ALPHA - 默认值=false)
-IngressClassNamespacedParams=true|false (ALPHA - 默认值=false)
-KubeletCredentialProviders=true|false (ALPHA - 默认值=false)
-KubeletPodResources=true|false (BETA - 默认值=true)
-KubeletPodResourcesGetAllocatable=true|false (ALPHA - 默认值=false)
-LocalStorageCapacityIsolation=true|false (BETA - 默认值=true)
-LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值=false)
-LogarithmicScaleDown=true|false (ALPHA - 默认值=false)
-MemoryManager=true|false (ALPHA - 默认值=false)
-MixedProtocolLBService=true|false (ALPHA - 默认值=false)
-NamespaceDefaultLabelName=true|false (BETA - 默认值=true)
-NetworkPolicyEndPort=true|false (ALPHA - 默认值=false)
-NonPreemptingPriority=true|false (BETA - 默认值=true)
-PodAffinityNamespaceSelector=true|false (ALPHA - 默认值=false)
-PodDeletionCost=true|false (ALPHA - 默认值=false)
-PodOverhead=true|false (BETA - 默认值=true)
-PreferNominatedNode=true|false (ALPHA - 默认值=false)
-ProbeTerminationGracePeriod=true|false (ALPHA - 默认值=false)
-ProcMountType=true|false (ALPHA - 默认值=false)
-QOSReserved=true|false (ALPHA - 默认值=false)
-RemainingItemCount=true|false (BETA - 默认值=true)
-RemoveSelfLink=true|false (BETA - 默认值=true)
-RotateKubeletServerCertificate=true|false (BETA - 默认值=true)
-ServerSideApply=true|false (BETA - 默认值=true)
-ServiceInternalTrafficPolicy=true|false (ALPHA - 默认值=false)
-ServiceLBNodePortControl=true|false (ALPHA - 默认值=false)
-ServiceLoadBalancerClass=true|false (ALPHA - 默认值=false)
-ServiceTopology=true|false (ALPHA - 默认值=false)
-SetHostnameAsFQDN=true|false (BETA - 默认值=true)
-SizeMemoryBackedVolumes=true|false (ALPHA - 默认值=false)
-StorageVersionAPI=true|false (ALPHA - 默认值=false)
-StorageVersionHash=true|false (BETA - 默认值=true)
-SuspendJob=true|false (ALPHA - 默认值=false)
-TTLAfterFinished=true|false (BETA - 默认值=true)
-TopologyAwareHints=true|false (ALPHA - 默认值=false)
-TopologyManager=true|false (BETA - 默认值=true)
-ValidateProxyRedirects=true|false (BETA - 默认值=true)
-VolumeCapacityPriority=true|false (ALPHA - 默认值=false)
-WarningHeaders=true|false (BETA - 默认值=true)
-WinDSR=true|false (ALPHA - 默认值=false)
-WinOverlay=true|false (BETA - 默认值=true)
-WindowsEndpointSliceProxying=true|false (BETA - 默认值=true)
-
-
-
-
---hard-pod-affinity-symmetric-weight int32 默认值:1
-
-
-
-
-已弃用: RequiredDuringScheduling 亲和性是不对称的,但是存在与每个
-RequiredDuringScheduling 关联性规则相对应的隐式 PreferredDuringScheduling 关联性规则。
---hard-pod-affinity-symmetric-weight 代表隐式 PreferredDuringScheduling
-关联性规则的权重。权重必须在 0-100 范围内。
-如果 --config 指定了一个配置文件,那么这个参数将被忽略。
+APIListChunking=true|false (BETA - 默认值为 true)
+APIPriorityAndFairness=true|false (BETA - 默认值为 true)
+APIResponseCompression=true|false (BETA - 默认值为 true)
+APIServerIdentity=true|false (ALPHA - 默认值为 false)
+APIServerTracing=true|false (ALPHA - 默认值为 false)
+AllAlpha=true|false (ALPHA - 默认值为 false)
+AllBeta=true|false (BETA - 默认值为 false)
+AnyVolumeDataSource=true|false (BETA - 默认值为 true)
+AppArmor=true|false (BETA - 默认值为 true)
+CPUManager=true|false (BETA - 默认值为 true)
+CPUManagerPolicyAlphaOptions=true|false (ALPHA - 默认值为 false)
+CPUManagerPolicyBetaOptions=true|false (BETA - 默认值为 true)
+CPUManagerPolicyOptions=true|false (BETA - 默认值为 true)
+CSIInlineVolume=true|false (BETA - 默认值为 true)
+CSIMigration=true|false (BETA - 默认值为 true)
+CSIMigrationAWS=true|false (BETA - 默认值为 false)
+CSIMigrationAzureFile=true|false (BETA - 默认值为 false)
+CSIMigrationGCE=true|false (BETA - 默认值为 true)
+CSIMigrationPortworx=true|false (ALPHA - 默认值为 false)
+CSIMigrationRBD=true|false (ALPHA - 默认值为 false)
+CSIMigrationvSphere=true|false (BETA - 默认值为 false)
+CSIVolumeHealth=true|false (ALPHA - 默认值为 false)
+ContextualLogging=true|false (ALPHA - 默认值为 false)
+CronJobTimeZone=true|false (ALPHA - 默认值为 false)
+CustomCPUCFSQuotaPeriod=true|false (ALPHA - 默认值为 false)
+CustomResourceValidationExpressions=true|false (ALPHA - 默认值为 false)
+DaemonSetUpdateSurge=true|false (BETA - 默认值为 true)
+DelegateFSGroupToCSIDriver=true|false (BETA - 默认值为 true)
+DevicePlugins=true|false (BETA - 默认值为 true)
+DisableAcceleratorUsageMetrics=true|false (BETA - 默认值为 true)
+DisableCloudProviders=true|false (ALPHA - 默认值为 false)
+DisableKubeletCloudCredentialProviders=true|false (ALPHA - 默认值为 false)
+DownwardAPIHugePages=true|false (BETA - 默认值为 true)
+EndpointSliceTerminatingCondition=true|false (BETA - 默认值为 true)
+EphemeralContainers=true|false (BETA - 默认值为 true)
+ExpandedDNSConfig=true|false (ALPHA - 默认值为 false)
+ExperimentalHostUserNamespaceDefaulting=true|false (BETA - 默认值为 false)
+GRPCContainerProbe=true|false (BETA - 默认值为 true)
+GracefulNodeShutdown=true|false (BETA - 默认值为 true)
+GracefulNodeShutdownBasedOnPodPriority=true|false (BETA - 默认值为 true)
+HPAContainerMetrics=true|false (ALPHA - 默认值为 false)
+HPAScaleToZero=true|false (ALPHA - 默认值为 false)
+HonorPVReclaimPolicy=true|false (ALPHA - 默认值为 false)
+IdentifyPodOS=true|false (BETA - 默认值为 true)
+InTreePluginAWSUnregister=true|false (ALPHA - 默认值为 false)
+InTreePluginAzureDiskUnregister=true|false (ALPHA - 默认值为 false)
+InTreePluginAzureFileUnregister=true|false (ALPHA - 默认值为 false)
+InTreePluginGCEUnregister=true|false (ALPHA - 默认值为 false)
+InTreePluginOpenStackUnregister=true|false (ALPHA - 默认值为 false)
+InTreePluginPortworxUnregister=true|false (ALPHA - 默认值为 false)
+InTreePluginRBDUnregister=true|false (ALPHA - 默认值为 false)
+InTreePluginvSphereUnregister=true|false (ALPHA - 默认值为 false)
+obMutableNodeSchedulingDirectives=true|false (BETA - 默认值为 true)
+JobReadyPods=true|false (BETA - 默认值为 true)
+JobTrackingWithFinalizers=true|false (BETA - 默认值为 false)
+KubeletCredentialProviders=true|false (BETA - 默认值为 true)
+KubeletInUserNamespace=true|false (ALPHA - 默认值为 false)
+KubeletPodResources=true|false (BETA - 默认值为 true)
+KubeletPodResourcesGetAllocatable=true|false (BETA - 默认值为 true)
+LegacyServiceAccountTokenNoAutoGeneration=true|false (BETA - 默认值为 true)
+LocalStorageCapacityIsolation=true|false (BETA - 默认值为 true)
+LocalStorageCapacityIsolationFSQuotaMonitoring=true|false (ALPHA - 默认值为 false)
+LogarithmicScaleDown=true|false (BETA - 默认值为 true)
+MaxUnavailableStatefulSet=true|false (ALPHA - 默认值为 false)
+MemoryManager=true|false (BETA - 默认值为 true)
+MemoryQoS=true|false (ALPHA - 默认值为 false)
+MinDomainsInPodTopologySpread=true|false (ALPHA - 默认值为 false)
+MixedProtocolLBService=true|false (BETA - 默认值为 true)
+NetworkPolicyEndPort=true|false (BETA - 默认值为 true)
+NetworkPolicyStatus=true|false (ALPHA - 默认值为 false)
+NodeOutOfServiceVolumeDetach=true|false (ALPHA - 默认值为 false)
+NodeSwap=true|false (ALPHA - 默认值为 false)
+OpenAPIEnums=true|false (BETA - 默认值为 true)
+OpenAPIV3=true|false (BETA - 默认值为 true)
+PodAndContainerStatsFromCRI=true|false (ALPHA - 默认值为 false)
+PodDeletionCost=true|false (BETA - 默认值为 true)
+PodSecurity=true|false (BETA - 默认值为 true)
+ProbeTerminationGracePeriod=true|false (BETA - 默认值为 false)
+ProcMountType=true|false (ALPHA - 默认值为 false)
+ProxyTerminatingEndpoints=true|false (ALPHA - 默认值为 false)
+QOSReserved=true|false (ALPHA - 默认值为 false)
+ReadWriteOncePod=true|false (ALPHA - 默认值为 false)
+RecoverVolumeExpansionFailure=true|false (ALPHA - 默认值为 false)
+RemainingItemCount=true|false (BETA - 默认值为 true)
+RotateKubeletServerCertificate=true|false (BETA - 默认值为 true)
+SeccompDefault=true|false (ALPHA - 默认值为 false)
+ServerSideFieldValidation=true|false (ALPHA - 默认值为 false)
+ServiceIPStaticSubrange=true|false (ALPHA - 默认值为 false)
+ServiceInternalTrafficPolicy=true|false (BETA - 默认值为 true)
+SizeMemoryBackedVolumes=true|false (BETA - 默认值为 true)
+StatefulSetAutoDeletePVC=true|false (ALPHA - 默认值为 false)
+StatefulSetMinReadySeconds=true|false (BETA - 默认值为 true)
+StorageVersionAPI=true|false (ALPHA - 默认值为 false)
+StorageVersionHash=true|false (BETA - 默认值为 true)
+TopologyAwareHints=true|false (BETA - 默认值为 true)
+TopologyManager=true|false (BETA - 默认值为 true)
+VolumeCapacityPriority=true|false (ALPHA - 默认值为 false)
+WinDSR=true|false (ALPHA - 默认值为 false)
+WinOverlay=true|false (BETA - 默认值为 true)
+WindowsHostProcessContainers=true|false (BETA - 默认值为 true)
@@ -595,7 +516,7 @@ DEPRECATED: content type of requests sent to apiserver. This parameter is ignore
---kube-api-qps float32 默认值:50
+--kube-api-qps float 默认值:50
@@ -666,10 +587,9 @@ The interval between attempts by the acting master to renew a leadership slot be
-在领导者选举期间用于锁定的资源对象的类型。支持的选项是 `endpoints`、
-`configmaps`、`leases`、`endpointleases` 和 `configmapsleases`。
+在领导者选举期间用于锁定的资源对象的类型。支持的选项有 `leases`、`endpointleases` 和 `configmapsleases`。
@@ -736,55 +656,6 @@ DEPRECATED: define the namespace of the lock object. Will be removed in favor of
-
---log-backtrace-at <a string in the form 'file:N'>
-默认值: 0
-
-
-
-
-当记录命中行文件 file 的第 N 行时输出堆栈跟踪。
-
-
-
-
---log-dir string
-
-
-
-
-如果为非空,则在此目录中写入日志文件。
-
-
-
-
---log-file string
-
-
-
-
-如果为非空,则使用此文件作为日志文件。
-
-
-
-
---log-file-max-size uint 默认值:1800
-
-
-
-
-定义日志文件可以增长到的最大值。单位为兆字节。
-如果值为 0,则最大文件大小为无限制。
-
-
--log-flush-frequency duration 默认值:5s
@@ -804,19 +675,19 @@ Maximum number of seconds between log flushes
-设置日志格式。可选格式:“json”,“text”。
+设置日志格式。可选格式:“text”。
采用非默认格式时,以下标识不会生效:
--add-dir-header, --alsologtostderr, --log-backtrace-at,
--log-dir, --log-file, --log-file-max-size,
--logtostderr, --one-output, --skip-headers, --skip-log-headers,
---stderrthreshold, --vmodule, --log-flush-frequency.
+--stderrthreshold, --vmodule.
非默认选项目前处于 Alpha 阶段,有可能会出现变更且无事先警告。
@@ -845,18 +716,6 @@ Kubernetes API 服务器的地址(覆盖 kubeconfig 中的任何值)。
-
---one-output
-
-
-
-
-若此标志为 true,则日志仅写入其自身的严重性级别,而不会写入所有较低严重性级别。
-
-
-
--permit-address-sharing
@@ -868,7 +727,7 @@ If true, SO_REUSEADDR will be used when binding the port. This allows binding to
如果为 true,在绑定端口时将使用 SO_REUSEADDR。
这将允许同时绑定诸如 0.0.0.0 这类通配符 IP和特定 IP,
并且它避免等待内核释放处于 TIME_WAIT 状态的套接字。
-默认值: false
+默认值:false
@@ -881,69 +740,30 @@ If true, SO_REUSEADDR will be used when binding the port. This allows binding to
If true, SO_REUSEPORT will be used when binding the port, which allows more than one instance to bind on the same address and port. [default=false]
-->
如果此标志为 true,在绑定端口时会使用 SO_REUSEPORT,从而允许不止一个
-实例绑定到同一地址和端口。
+实例绑定到同一地址和端口。
默认值:false
---policy-config-file string
+
+--pod-max-in-unschedulable-pods-duration duration 默认值:5m0s
-已弃用:包含调度器策略配置的文件。
-当策略 ConfigMap 为提供时,或者 --use-legacy-policy-config=true 时使用此文件。
-注意:当此标志与插件配置一起使用时,调度器会失败。
+已弃用:Pod 可以在 unschedulablePods 中停留的最长时间。
+如果 Pod 在 unschedulablePods 中停留的时间超过此值,则该 pod 将被从
+unschedulablePods 移动到 backoffQ 或 activeQ。
+此标志已弃用,将在 1.2 中删除。
+
---policy-configmap string
-
-
-
-
-已弃用: 包含调度器策略配置的 ConfigMap 对象的名称。
-如果 --use-legacy-policy-config=false,则它必须在调度器初始化之前存在于
-系统命名空间中。配置数据必须对应 'data' 映射中键名为 'policy.cfg' 的元素的值。
-注意:如果与插件配置一起使用,调度器会失败。
-
-
-
-
---policy-configmap-namespace string 默认值:"kube-system"
-
-
-
-
-已弃用: 策略 ConfigMap 所在的名字空间。如果未提供或为空,则将使用 kube-system 名字空间。
-注意:如果与插件配置一起使用,调度器会失败。
-
-
-
-
---port int 默认值:10251
-
-
-
-
-已弃用: 在没有身份验证和鉴权的情况下不安全地为 HTTP 服务的端口。
-如果为 0,则根本不提供 HTTP。请参见 --secure-port。
-如果 --config 指定了一个配置文件,这个参数将被忽略。
-
-
-
-
---profiling 默认值: true
+--profiling 默认值:true
@@ -986,7 +806,7 @@ Root certificate bundle to use to verify client certificates on incoming request
--requestheader-extra-headers-prefix strings
-默认值: "x-remote-extra-"
+默认值:"x-remote-extra-"
@@ -999,7 +819,7 @@ List of request header prefixes to inspect. X-Remote-Extra- is suggested.
--requestheader-group-headers strings
-默认值: "x-remote-group"
+默认值:"x-remote-group"
@@ -1012,7 +832,7 @@ List of request headers to inspect for groups. X-Remote-Group is suggested.
--requestheader-username-headers strings
-默认值: "x-remote-user"
+默认值:"x-remote-user"
@@ -1023,21 +843,6 @@ List of request headers to inspect for usernames. X-Remote-User is common.
-
---scheduler-name string
-默认值:"default-scheduler"
-
-
-
-
-已弃用: 调度器名称,用于根据 Pod 的 “spec.schedulerName” 选择此
-调度器将处理的 Pod。
-如果 --config 指定了一个配置文件,那么这个参数将被忽略
-
-
-
--secure-port int 默认值:10259
@@ -1065,41 +870,6 @@ The previous version for which you want to show hidden metrics. Only the previou
-
---skip-headers
-
-
-
-
-如果为 true,日志消息中不再写入头部前缀。
-
-
-
-
---skip-log-headers
-
-
-
-
-如果为 true,则在打开日志文件时忽略其头部。
-
-
-
-
---stderrthreshold int 默认值:2
-
-
-
-
-达到或超过此阈值的日志会被写入到标准错误输出。
-
-
--tls-cert-file string
@@ -1109,7 +879,7 @@ logs at or above this threshold go to stderr
-包含默认的 HTTPS x509 证书的文件。(CA证书(如果有)在服务器证书之后并置)。
+包含默认的 HTTPS x509 证书的文件。(如果有 CA 证书,在服务器证书之后并置)。
如果启用了 HTTPS 服务,并且未提供 --tls-cert-file 和
--tls-private-key-file,则会为公共地址生成一个自签名证书和密钥,
并将其保存到 --cert-dir 指定的目录中。
@@ -1174,20 +944,7 @@ A pair of x509 certificate and private key file paths, optionally suffixed with
如果未提供域名匹配模式,则提取证书名称。
非通配符匹配优先于通配符匹配,显式域名匹配优先于提取而来的名称。
若有多个密钥/证书对,可多次使用 --tls-sni-cert-key。
-例子: "example.crt,example.key" 或者 "foo.crt,foo.key:*.foo.com,foo.com"。
-
-
-
-
---use-legacy-policy-config
-
-
-
-
-已弃用:设置为 true 时,调度程序将忽略策略 ConfigMap 并使用策略配置文件。
-注意:当此标志与插件配置一起使用时,调度器会失败。
+例如: "example.crt,example.key" 或者 "foo.crt,foo.key:*.foo.com,foo.com"。
@@ -1216,14 +973,14 @@ Print version information and quit
---vmodule <逗号分隔的 ‘模式=N’ 配置列表>
+--vmodule pattern=N,...
-以逗号分隔的 ‘模式=N’ 设置列表,用于文件过滤的日志记录。
+以逗号分隔的 “pattern=N” 设置列表,用于文件过滤的日志记录(仅适用于文本日志格式)。
@@ -1235,7 +992,7 @@ comma-separated list of pattern=N settings for file-filtered logging
-如果已设置,将配置值写入此文件并退出。
+如果设置此参数,将配置值写入此文件并退出。
@@ -1244,5 +1001,3 @@ If set, write the configuration values to this file and exit.
-
-
diff --git a/content/zh/docs/reference/config-api/apiserver-audit.v1.md b/content/zh/docs/reference/config-api/apiserver-audit.v1.md
index 245096e999..e7bc19c4f6 100644
--- a/content/zh/docs/reference/config-api/apiserver-audit.v1.md
+++ b/content/zh/docs/reference/config-api/apiserver-audit.v1.md
@@ -34,7 +34,9 @@ auto_generated: true
+
Event 结构包含可出现在 API 审计日志中的所有信息。
+
字段 描述
@@ -48,16 +50,20 @@ Event 结构包含可出现在 API 审计日志中的所有信息。
+
生成事件所对应的审计级别。
+
auditID [必需]
-k8s.io/apimachinery/pkg/types.UID
+k8s.io/apimachinery/pkg/types.UID
+
为每个请求所生成的唯一审计 ID。
+
@@ -66,7 +72,9 @@ Event 结构包含可出现在 API 审计日志中的所有信息。
+
生成此事件时请求的处理阶段。
+
@@ -75,7 +83,9 @@ Event 结构包含可出现在 API 审计日志中的所有信息。
+
requestURI 是客户端发送到服务器端的请求 URI。
+
@@ -86,7 +96,9 @@ Event 结构包含可出现在 API 审计日志中的所有信息。
+
verb 是与请求对应的 Kubernetes 动词。对于非资源请求,此字段为 HTTP 方法的小写形式。
+
@@ -95,7 +107,9 @@ Event 结构包含可出现在 API 审计日志中的所有信息。
+
关于认证用户的信息。
+
@@ -104,7 +118,9 @@ Event 结构包含可出现在 API 审计日志中的所有信息。
+
关于所伪装(impersonated)的用户的信息。
+
@@ -112,8 +128,37 @@ Event 结构包含可出现在 API 审计日志中的所有信息。
[]string
-
+
+
发起请求和中间代理的源 IP 地址。
+ 源 IP 从以下(按顺序)列出:
+
+
+
+
+X-Forwarded-For 请求标头 IP
+
+
+
+X-Real-Ip 标头,如果 X-Forwarded-For 列表中不存在
+
+
+
+连接的远程地址,如果它无法与此处列表中的最后一个 IP(X-Forwarded-For 或 X-Real-Ip)匹配。
+注意:除最后一个 IP 外的所有 IP 均可由客户端任意设置。
+
+
@@ -124,8 +169,10 @@ Event 结构包含可出现在 API 审计日志中的所有信息。
+
userAgent 中记录客户端所报告的用户代理(User Agent)字符串。
注意 userAgent 信息是由客户端提供的,一定不要信任。
+
@@ -135,7 +182,9 @@ Event 结构包含可出现在 API 审计日志中的所有信息。
+
此请求所指向的对象引用。对于 List 类型的请求或者非资源请求,此字段可忽略。
+
@@ -146,40 +195,46 @@ Event 结构包含可出现在 API 审计日志中的所有信息。
+
响应的状态,当 responseObject 不是 Status 类型时被赋值。
对于成功的请求,此字段仅包含 code 和 statusSuccess。
对于非 Status 类型的错误响应,此字段会被自动赋值为出错信息。
+
requestObject
-k8s.io/apimachinery/pkg/runtime.Unknown
+k8s.io/apimachinery/pkg/runtime.Unknown
+
来自请求的 API 对象,以 JSON 格式呈现。requestObject 在请求中按原样记录
(可能会采用 JSON 重新编码),之后会进入版本转换、默认值填充、准入控制以及
配置信息合并等阶段。此对象为外部版本化的对象类型,甚至其自身可能并不是一个
合法的对象。对于非资源请求,此字段被忽略。
- 只有当审计级别为 Request 或更高的时候才会记录。
+ 只有当审计级别为 Request 或更高的时候才会记录。
+
responseObject
-k8s.io/apimachinery/pkg/runtime.Unknown
+k8s.io/apimachinery/pkg/runtime.Unknown
+
响应中包含的 API 对象,以 JSON 格式呈现。requestObject 是在被转换为外部类型
并序列化为 JSON 格式之后才被记录的。
对于非资源请求,此字段会被忽略。
只有审计级别为 Response 时才会记录。
+
@@ -188,7 +243,9 @@ at Response Level.-->
+
请求到达 API 服务器时的时间。
+
@@ -197,7 +254,9 @@ at Response Level.-->
+
请求到达当前审计阶段时的时间。
+
@@ -211,6 +270,7 @@ at Response Level.-->
to the metadata.annotations of the submitted object. Keys should uniquely identify the informing
component to avoid name collisions (e.g. podsecuritypolicy.admission.k8s.io/policy). Values
should be short. Annotations are included in the Metadata level.-->
+
annotations 是一个无结构的键-值映射,其中保存的是一个审计事件。
该事件可以由请求处理链路上的插件来设置,包括身份认证插件、鉴权插件以及
准入控制插件等。
@@ -220,6 +280,7 @@ at Response Level.-->
(例如 podsecuritypolicy.admission.k8s.io/policy)。
映射中的键值应该比较简洁。
当审计级别为 Metadata 时会包含 annotations 字段。
+
@@ -230,7 +291,9 @@ at Response Level.-->
+
EventList 是审计事件(Event)的列表。
+
字段 描述
@@ -270,7 +333,9 @@ EventList 是审计事件(Event)的列表。
Policy defines the configuration of audit logging, and the rules for how different request
categories are logged.
-->
+
Policy 定义的是审计日志的配置以及不同类型请求的日志记录规则。
+
字段 描述
@@ -284,7 +349,9 @@ Policy 定义的是审计日志的配置以及不同类型请求的日志记录
+
包含 metadata 字段是为了便于与 API 基础设施之间实现互操作。
+
参考 Kubernetes API 文档了解 metadata 字段的详细信息。
@@ -297,11 +364,13 @@ Policy 定义的是审计日志的配置以及不同类型请求的日志记录
A request may match multiple rules, in which case the FIRST matching rule is used.
The default audit level is None, but can be overridden by a catch-all rule at the end of the list.
PolicyRules are strictly ordered.-->
+
字段 rules 设置请求要被记录的审计级别(level)。
每个请求可能会与多条规则相匹配;发生这种状况时遵从第一条匹配规则。
默认的审计级别是 None,不过可以在列表的末尾使用一条全抓(catch-all)规则
重载其设置。
列表中的规则(PolicyRule)是严格有序的。
+
@@ -311,9 +380,34 @@ PolicyRules are strictly ordered.-->
+
字段 omitStages 是一个阶段(Stage)列表,其中包含无须生成事件的阶段。
注意这一选项也可以通过每条规则来设置。
审计组件最终会忽略出现在 omitStages 中阶段,也会忽略规则中的阶段。
+
+
+
+
+
+
+
+omitManagedFields
+bool
+
+
+
+
+omitManagedFields 标明将请求和响应主体写入 API 审计日志时,是否省略其托管字段。
+此字段值用作全局默认值 - 'true' 值将省略托管字段,否则托管字段将包含在 API 审计日志中。
+请注意,也可以按规则指定此值,在这种情况下,规则中指定的值将覆盖全局默认值。
+
@@ -324,7 +418,9 @@ PolicyRules are strictly ordered.-->
+
PolicyList 是由审计策略(Policy)组成的列表。
+
字段 描述
@@ -363,7 +459,9 @@ PolicyList 是由审计策略(Policy)组成的列表。
+
GroupResources 代表的是某 API 组中的资源类别。
+
字段 描述
@@ -384,28 +482,39 @@ GroupResources 代表的是某 API 组中的资源类别。
[]string
-
- 字段 resources 是此规则所适用的资源的列表。
+'∗/scale' matches all scale subresources.
+-->
+
+ 字段 resources 是此规则所适用的资源的列表。
+
+
+
例如:
'pods' 匹配 Pods;
'pods/log' 匹配 Pods 的 log 子资源;
'∗' 匹配所有资源及其子资源;
'pods/∗' 匹配 Pods 的所有子资源;
'∗/scale' 匹配所有的 scale 子资源。
+
- 如果存在通配符,则合法性检查逻辑会确保 resources 中的条目不会彼此重叠。
+
+ 如果存在通配符,则合法性检查逻辑会确保 resources 中的条目不会彼此重叠。
+
+
+
空的列表意味着规则适用于该 API 组中的所有资源及其子资源。
+
@@ -416,9 +525,11 @@ For example:
+
字段 resourceNames 是策略将匹配的资源实例名称列表。
使用此字段时,resources 必须指定。
空的 resourceNames 列表意味着资源的所有实例都会匹配到此策略。
+
@@ -442,7 +553,9 @@ For example:
+
Level 定义的是审计过程中在日志内记录的信息量。
+
## `ObjectReference` {#audit-k8s-io-v1-ObjectReference}
@@ -456,7 +569,9 @@ Level 定义的是审计过程中在日志内记录的信息量。
+
ObjectReference 包含的是用来检查或修改所引用对象时将需要的全部信息。
+
字段 描述
@@ -487,7 +602,7 @@ ObjectReference 包含的是用来检查或修改所引用对象时将需要的
uid
-k8s.io/apimachinery/pkg/types.UID
+k8s.io/apimachinery/pkg/types.UID
资源对象的唯一标识(UID)。
@@ -500,8 +615,10 @@ ObjectReference 包含的是用来检查或修改所引用对象时将需要的
+
字段 apiGroup 给出包含所引用对象的 API 组的名称。
空字符串代表 core API 组。
+
@@ -510,7 +627,9 @@ ObjectReference 包含的是用来检查或修改所引用对象时将需要的
+
字段 apiVersion 是包含所引用对象的 API 组的版本。
+
@@ -545,8 +664,10 @@ ObjectReference 包含的是用来检查或修改所引用对象时将需要的
PolicyRule maps requests based off metadata to an audit Level.
Requests must match the rules of every field (an intersection of rules).
-->
+
PolicyRule 包含一个映射,基于元数据将请求映射到某审计级别。
请求必须与每个字段所定义的规则都匹配(即 rules 的交集)才被视为匹配。
+
字段 描述
@@ -557,7 +678,9 @@ PolicyRule 包含一个映射,基于元数据将请求映射到某审计级别
+
与此规则匹配的请求所对应的日志记录级别(Level)。
+
@@ -567,8 +690,10 @@ PolicyRule 包含一个映射,基于元数据将请求映射到某审计级别
+
根据身份认证所确定的用户名的列表,给出此规则所适用的用户。
空列表意味着适用于所有用户。
+
@@ -579,8 +704,10 @@ PolicyRule 包含一个映射,基于元数据将请求映射到某审计级别
+
此规则所适用的用户组的列表。如果用户是所列用户组中任一用户组的成员,则视为匹配。
空列表意味着适用于所有用户组。
+
@@ -590,8 +717,10 @@ PolicyRule 包含一个映射,基于元数据将请求映射到某审计级别
+
此规则所适用的动词(verb)列表。
空列表意味着适用于所有动词。
+
@@ -600,8 +729,10 @@ PolicyRule 包含一个映射,基于元数据将请求映射到某审计级别
+
此规则所适用的资源类别列表。
空列表意味着适用于 API 组中的所有资源类别。
+
@@ -610,12 +741,14 @@ PolicyRule 包含一个映射,基于元数据将请求映射到某审计级别
+
此规则所适用的名字空间列表。
- 空字符串("")意味着适用于非名字空间作用域的资源。
+ 空字符串("")意味着适用于非名字空间作用域的资源。
空列表意味着适用于所有名字空间。
+
nonResourceURLs
@@ -627,11 +760,13 @@ PolicyRule 包含一个映射,基于元数据将请求映射到某审计级别
Examples:
"/metrics" - Log requests for apiserver metrics
"/healthz∗" - Log all health checks-->
+
字段 nonResourceURLs 给出一组需要被审计的 URL 路径。
允许使用 ∗,但只能作为路径中最后一个完整分段。
例如:
"/metrics" - 记录对 API 服务器度量值(metrics)的所有请求;
"/healthz∗" - 记录所有健康检查请求。
+
@@ -642,12 +777,44 @@ PolicyRule 包含一个映射,基于元数据将请求映射到某审计级别
+
字段 omitStages 是一个阶段(Stage)列表,针对所列的阶段服务器不会生成审计事件。
注意这一选项也可以在策略(Policy)级别指定。服务器审计组件会忽略
omitStages 中给出的阶段,也会忽略策略中给出的阶段。
空列表意味着不对阶段作任何限制。
+
+
+
+
+ omitManagedFields
+ bool
+
+
+
+
+ omitManagedFields 决定将请求和响应主体写入 API 审计日志时,是否省略其托管字段。
+
+
+ 值为 'true' 将从 API 审计日志中删除托管字段
+
+ 值为 'false' 表示托管字段应包含在 API 审计日志中
+ 请注意,如果指定此规则中的值将覆盖全局默认值。
+ 如果未指定,则使用 policy.omitManagedFields 中指定的全局默认值。
+
+
+
+
+
@@ -670,5 +837,7 @@ PolicyRule 包含一个映射,基于元数据将请求映射到某审计级别
+
Stage 定义在请求处理过程中可以生成审计事件的阶段。
+
diff --git a/content/zh/docs/reference/config-api/client-authentication.v1.md b/content/zh/docs/reference/config-api/client-authentication.v1.md
index e3b919b9c4..b1cf6a708b 100644
--- a/content/zh/docs/reference/config-api/client-authentication.v1.md
+++ b/content/zh/docs/reference/config-api/client-authentication.v1.md
@@ -76,6 +76,10 @@ of CertificateAuthority, since CA data will always be passed to the plugin as by
Cluster 中包含允许 exec 插件与 Kubernetes 集群进行通信身份认证时所需
的信息。
+为了确保该结构体包含需要与 Kubernetes 集群进行通信的所有内容(就像通过 Kubeconfig 一样),
+除了证书授权之外,该字段应该映射到 "k8s.io/client-go/tools/clientcmd/api/v1".cluster,
+由于 CA 数据将始终以字节形式传递给插件。
+
字段 描述
@@ -167,7 +171,7 @@ clusters:
只是针对不同集群会有一些细节上的差异,例如 audience。
此字段使得特定于集群的配置可以直接使用集群信息来设置。
不建议使用此字段来保存 Secret 数据,因为 exec 插件的主要优势之一是不需要在
- kubeconfig 中保存 Secret 数据。
+ kubeconfig 中保存 Secret 数据。
@@ -222,6 +226,7 @@ ExecCredentialSpec 保存传输组件所提供的特定于请求和运行时的
+**出现在:**
- [ExecCredential](#client-authentication-k8s-io-v1-ExecCredential)
@@ -235,7 +240,7 @@ itself should at least be protected via file permissions.
ExecCredentialStatus 中包含传输组件要使用的凭据。
字段 token 和 clientKeyData 都是敏感字段。此数据只能在
客户端与 exec 插件进程之间使用内存来传递。exec 插件本身至少
-应通过文件访问许可来实施保护。
》
+应通过文件访问许可来实施保护。
字段 描述
diff --git a/content/zh/docs/reference/config-api/client-authentication.v1beta1.md b/content/zh/docs/reference/config-api/client-authentication.v1beta1.md
index e78edd23f6..b683ed5736 100644
--- a/content/zh/docs/reference/config-api/client-authentication.v1beta1.md
+++ b/content/zh/docs/reference/config-api/client-authentication.v1beta1.md
@@ -1,12 +1,22 @@
---
-title: Client Authentication (v1beta1)
+title: 客户端身份认证(Client Authentication)(v1beta1)
content_type: tool-reference
package: client.authentication.k8s.io/v1beta1
auto_generated: true
---
+
+
+
+## 资源类型 {#resource-types}
- [ExecCredential](#client-authentication-k8s-io-v1beta1-ExecCredential)
@@ -20,11 +30,14 @@ auto_generated: true
+
+ExecCredential 由基于 exec 的插件使用,与 HTTP 传输组件沟通凭据信息。
-Field Description
+字段 描述
apiVersion stringclient.authentication.k8s.io/v1beta1
@@ -33,11 +46,13 @@ HTTP transports.
-spec [Required]
+spec [必需]
ExecCredentialSpec
- Spec holds information passed to the plugin by the transport.
+
+ 字段 spec 包含由 HTTP 传输组件传递给插件的信息。
+
@@ -45,8 +60,10 @@ HTTP transports.
ExecCredentialStatus
- Status is filled in by the plugin and holds the credentials that the transport
-should use to contact the API.
+
+ 字段 status 由插件填充,包含传输组件与 API 服务器连接时需要提供的凭据。
+
@@ -60,11 +77,13 @@ should use to contact the API.
-**Appears in:**
+
+**出现在:**
- [ExecCredentialSpec](#client-authentication-k8s-io-v1beta1-ExecCredentialSpec)
+
+Cluster 中包含允许 exec 插件与 Kubernetes 集群进行通信身份认证时所需
+的信息。
+
+为了确保该结构体包含需要与 Kubernetes 集群进行通信的所有内容(就像通过 Kubeconfig 一样),
+该字段应该映射到 "k8s.io/client-go/tools/clientcmd/api/v1".cluster,
+除了证书授权之外,由于 CA 数据将始终以字节形式传递给插件。
-Field Description
+字段 描述
-server [Required]
+server [必需]
string
- Server is the address of the kubernetes cluster (https://hostname:port).
+
+ 字段 server 是 Kubernetes 集群的地址(https://hostname:port)。
+
@@ -91,9 +119,14 @@ of CertificateAuthority, since CA data will always be passed to the plugin as by
string
+
+ tls-server-name 是用来提供给服务器用作 SNI 解析的,客户端以此检查服务器的证书。
+ 如此字段为空,则使用链接服务器时使用的主机名。
+
@@ -101,8 +134,13 @@ used to contact the server is used.
bool
+
+ 设置此字段之后,会令客户端跳过对服务器端证书的合法性检查。
+ 这会使得你的 HTTPS 链接不再安全。
+
@@ -110,8 +148,13 @@ This will make your HTTPS connections insecure.
[]byte
+
+ 此字段包含 PEM 编码的证书机构(CA)证书。
+ 如果为空,则使用系统的根证书。
+
@@ -119,8 +162,9 @@ If empty, system roots should be used.
string
- ProxyURL is the URL to the proxy to be used for all requests to this
-cluster.
+
+ 此字段用来设置向集群发送所有请求时要使用的代理服务器。
+
@@ -128,27 +172,40 @@ cluster.
k8s.io/apimachinery/pkg/runtime.RawExtension
+
+ 此字段包含一些额外的、特定于 exec 插件和所连接的集群的数据,
+ 此字段来自于 clientcmd 集群对象的 extensions[client.authentication.k8s.io/exec]
+ 字段:
+
clusters:
- name: my-cluster
cluster:
...
extensions:
- - name: client.authentication.k8s.io/exec # reserved extension name for per cluster exec config
+ - name: client.authentication.k8s.io/exec # 针对每个集群 exec 配置所预留的扩展名称
extension:
- audience: 06e3fbd18de8 # arbitrary config
-
+ audience: 06e3fbd18de8 # 任意配置信息
+
+
+在某些环境中,用户配置可能对很多集群而言都完全一样(即调用同一个 exec 插件),
+只是针对不同集群会有一些细节上的差异,例如 audience。
+此字段使得特定于集群的配置可以直接使用集群信息来设置。
+不建议使用此字段来保存 Secret 数据,因为 exec 插件的主要优势之一是不需要在
+kubeconfig 中保存 Secret 数据。
+
@@ -162,16 +219,20 @@ to be stored directly in the kubeconfig.
-**Appears in:**
+
+**出现在:**
- [ExecCredential](#client-authentication-k8s-io-v1beta1-ExecCredential)
+
+ExecCredentialSpec 保存传输组件所提供的特定于请求和运行时的信息。
-Field Description
+字段 描述
@@ -180,10 +241,16 @@ the transport.
Cluster
+
+ 此字段中包含的信息使得 exec 插件能够与要访问的 Kubernetes 集群通信。
+ 注意,cluster 字段只有在 exec 驱动的配置中 provideClusterInfo
+ (即:ExecConfig.ProvideClusterInfo)被设置为 true 时才不能为空。
+
@@ -197,20 +264,27 @@ ExecConfig.ProvideClusterInfo).
-**Appears in:**
+
+**出现在:**
- [ExecCredential](#client-authentication-k8s-io-v1beta1-ExecCredential)
+
+ExecCredentialStatus 中包含传输组件要使用的凭据。
+
+字段 token 和 clientKeyData 都是敏感字段。
+此数据只能在客户端与 exec 插件进程之间使用内存来传递。
+exec 插件本身至少应通过文件访问许可来实施保护。
-Field Description
-
+字段 描述
@@ -218,31 +292,39 @@ itself should at least be protected via file permissions.
meta/v1.Time
- ExpirationTimestamp indicates a time when the provided credentials expire.
+
+ 给出所提供的凭据到期的时间。
+
-token [Required]
+token [必需]
string
- Token is a bearer token used by the client for request authentication.
+
+ 客户端用做请求身份认证的持有者令牌。
+
-clientCertificateData [Required]
+clientCertificateData [必需]
string
- PEM-encoded client TLS certificates (including intermediates, if any).
+
+ PEM 编码的客户端 TLS 证书(如果有临时证书,也会包含)。
+
-clientKeyData [Required]
+clientKeyData [必需]
string
- PEM-encoded private key for the above certificate.
+
+ 与上述证书对应的、PEM 编码的私钥。
+
diff --git a/content/zh/docs/reference/config-api/kube-proxy-config.v1alpha1.md b/content/zh/docs/reference/config-api/kube-proxy-config.v1alpha1.md
index 1c89395b51..d0c388f054 100644
--- a/content/zh/docs/reference/config-api/kube-proxy-config.v1alpha1.md
+++ b/content/zh/docs/reference/config-api/kube-proxy-config.v1alpha1.md
@@ -41,7 +41,8 @@ KubeProxyConfiguration 包含用来配置 Kubernetes 代理服务器的所有配
- featureGates 是一个功能特性名称到布尔值的映射表,用来启用或者禁用测试性质的功能特性。
+ featureGates 字段是一个功能特性名称到布尔值的映射表,
+ 用来启用或者禁用测试性质的功能特性。
bindAddress [必需]
@@ -52,8 +53,8 @@ KubeProxyConfiguration 包含用来配置 Kubernetes 代理服务器的所有配
bindAddress is the IP address for the proxy server to serve on (set to 0.0.0.0
for all interfaces)
-->
- bindAddress 是代理服务器提供服务时所用 IP 地址(设置为 0.0.0.0
-时意味着在所有网络接口上提供服务)。
+ bindAddress 字段是代理服务器提供服务时所用 IP 地址(设置为 0.0.0.0
+时意味着在所有网络接口上提供服务)。
healthzBindAddress [必需]
@@ -64,8 +65,8 @@ for all interfaces)
healthzBindAddress is the IP address and port for the health check server to serve on,
defaulting to 0.0.0.0:10256
-->
- healthzBindAddress 是健康状态检查服务器提供服务时所使用的的 IP 地址和端口,
- 默认设置为 '0.0.0.0:10256'。
+ healthzBindAddress 字段是健康状态检查服务器提供服务时所使用的的 IP 地址和端口,
+ 默认设置为 '0.0.0.0:10256'。
metricsBindAddress [必需]
@@ -76,8 +77,8 @@ defaulting to 0.0.0.0:10256
metricsBindAddress is the IP address and port for the metrics server to serve on,
defaulting to 127.0.0.1:10249 (set to 0.0.0.0 for all interfaces)
-->
- metricsBindAddress 是度量值服务器提供服务时所使用的的 IP 地址和端口,
- 默认设置为 '127.0.0.1:10249'(设置为 0.0.0.0 意味着在所有接口上提供服务)。
+ metricsBindAddress 字段是度量值服务器提供服务时所使用的的 IP 地址和端口,
+ 默认设置为 '127.0.0.1:10249'(设置为 0.0.0.0 意味着在所有接口上提供服务)。
bindAddressHardFail [必需]
@@ -87,7 +88,8 @@ defaulting to 127.0.0.1:10249 (set to 0.0.0.0 for all interfaces)
- bindAddressHardFail 设置为 true 时,kube-proxy 将无法绑定到某端口这类问题视为致命错误并直接退出。
+ bindAddressHardFail 字段设置为 true 时,
+ kube-proxy 将无法绑定到某端口这类问题视为致命错误并直接退出。
enableProfiling [必需]
@@ -98,8 +100,8 @@ defaulting to 127.0.0.1:10249 (set to 0.0.0.0 for all interfaces)
enableProfiling enables profiling via web interface on /debug/pprof handler.
Profiling handlers will be handled by metrics server.
-->
- enableProfiling 通过 '/debug/pprof' 处理程序在 Web 界面上启用性能分析。
- 性能分析处理程序将由度量值服务器执行。
+ enableProfiling 字段通过 '/debug/pprof' 处理程序在 Web 界面上启用性能分析。
+ 性能分析处理程序将由度量值服务器执行。
clusterCIDR [必需]
@@ -111,8 +113,9 @@ Profiling handlers will be handled by metrics server.
bridge traffic coming from outside of the cluster. If not provided,
no off-cluster bridging will be performed.
-->
- clusterCIDR 是集群中 Pods 所使用的 CIDR 范围。这一地址范围用于对来自集群外的请求
- 流量进行桥接。如果未设置,则 kube-proxy 不会对非集群内部的流量做桥接。
+ clusterCIDR 字段是集群中 Pods 所使用的 CIDR 范围。
+ 这一地址范围用于对来自集群外的请求流量进行桥接。
+ 如果未设置,则 kube-proxy 不会对非集群内部的流量做桥接。
hostnameOverride [必需]
@@ -122,7 +125,8 @@ no off-cluster bridging will be performed.
- hostnameOverride 非空时,所给的字符串(而不是实际的主机名)将被用作 kube-proxy 的标识。
+ hostnameOverride 字段非空时,
+ 所给的字符串(而不是实际的主机名)将被用作 kube-proxy 的标识。
clientConnection [必需]
@@ -133,7 +137,8 @@ no off-cluster bridging will be performed.
clientConnection specifies the kubeconfig file and client connection settings for the proxy
server to use when communicating with the apiserver.
-->
- clientConnection 给出代理服务器与 API 服务器通信时要使用的 kubeconfig 文件和客户端链接设置。
+ clientConnection 字段给出代理服务器与 API
+ 服务器通信时要使用的 kubeconfig 文件和客户端链接设置。
iptables [必需]
@@ -143,7 +148,7 @@ server to use when communicating with the apiserver.
- iptables 字段包含与 iptables 相关的配置选项。
+ iptables 字段字段包含与 iptables 相关的配置选项。
ipvs [必需]
@@ -153,7 +158,7 @@ server to use when communicating with the apiserver.
- ipvs 中包含与 ipvs 相关的配置选项。
+ ipvs 字段中包含与 ipvs 相关的配置选项。
oomScoreAdj [必需]
@@ -164,8 +169,8 @@ server to use when communicating with the apiserver.
oomScoreAdj is the oom-score-adj value for kube-proxy process. Values must be within
the range [-1000, 1000]
-->
- oomScoreAdj 是为 kube-proxy 进程所设置的 oom-score-adj 值。
- 此设置值必须介于 [-1000, 1000] 范围内。
+ oomScoreAdj 字段是为 kube-proxy 进程所设置的 oom-score-adj 值。
+ 此设置值必须介于 [-1000, 1000] 范围内。
mode [必需]
@@ -175,7 +180,7 @@ the range [-1000, 1000]
- mode 用来设置将使用的代理模式。
+ mode 字段用来设置将使用的代理模式。
portRange [必需]
@@ -186,20 +191,20 @@ the range [-1000, 1000]
portRange is the range of host ports (beginPort-endPort, inclusive) that may be consumed
in order to proxy service traffic. If unspecified (0-0) then ports will be randomly chosen.
-->
- portRange 是主机端口的范围,形式为 ‘beginPort-endPort’(包含边界),
- 用来设置代理服务所使用的端口。如果未指定(即‘0-0’),则代理服务会随机选择端口号。
+ portRange 字段是主机端口的范围,形式为 ‘beginPort-endPort’(包含边界),
+ 用来设置代理服务所使用的端口。如果未指定(即‘0-0’),则代理服务会随机选择端口号。
udpIdleTimeout [必需]
-meta/v1.Duration
+meta/v1.Duration
- udpIdleTimeout 用来设置 UDP 链接保持活跃的时长(例如,'250ms'、'2s')。
- 此值必须大于 0。此字段仅适用于 mode 值为 'userspace' 的场合。
+ udpIdleTimeout 字段用来设置 UDP 链接保持活跃的时长(例如,'250ms'、'2s')。
+ 此值必须大于 0。此字段仅适用于 mode 值为 'userspace' 的场合。
conntrack [必需]
@@ -209,18 +214,18 @@ Must be greater than 0. Only applicable for proxyMode=userspace.
- conntrack 包含与 conntrack 相关的配置选项。
+ conntrack 字段包含与 conntrack 相关的配置选项。
configSyncPeriod [必需]
-meta/v1.Duration
+meta/v1.Duration
- configSyncPeriod 是从 API 服务器刷新配置的频率。此值必须大于 0。
+ configSyncPeriod 字段是从 API 服务器刷新配置的频率。此值必须大于 0。
nodePortAddresses [必需]
@@ -236,13 +241,15 @@ If set it to "127.0.0.0/8", kube-proxy will only select the loopback interface f
If set it to a non-zero IP block, kube-proxy will filter that down to just the IPs that applied to the node.
An empty string slice is meant to select all network interfaces.
-->
- nodePortAddresses 是 kube-proxy 进程的 --nodeport-addresses 命令行参数设置。
+ nodePortAddresses 字段是 kube-proxy 进程的
+ --nodeport-addresses 命令行参数设置。
此值必须是合法的 IP 段。所给的 IP 段会作为参数来选择 NodePort 类型服务所使用的接口。
如果有人希望将本地主机(Localhost)上的服务暴露给本地访问,同时暴露在某些其他网络接口上
以实现某种目标,可以使用 IP 段的列表。
- 如果此值被设置为 "127.0.0.0/8",则 kube-proxy 将仅为 NodePort 服务选择本地回路(loopback)接口。
+ 如果此值被设置为 "127.0.0.0/8",则 kube-proxy 将仅为 NodePort
+ 服务选择本地回路(loopback)接口。
如果此值被设置为非零的 IP 段,则 kube-proxy 会对 IP 作过滤,仅使用适用于当前节点的 IP 地址。
- 空的字符串列表意味着选择所有网络接口。
+ 空的字符串列表意味着选择所有网络接口。
winkernel [必需]
@@ -252,7 +259,7 @@ An empty string slice is meant to select all network interfaces.
- winkernel 包含与 winkernel 相关的配置选项。
+ winkernel 字段包含与 winkernel 相关的配置选项。
showHiddenMetricsForVersion [必需]
@@ -262,8 +269,8 @@ An empty string slice is meant to select all network interfaces.
- showHiddenMetricsForVersion 给出的是一个 Kubernetes 版本号字符串,用来设置你希望
- 显示隐藏度量值的版本。
+ showHiddenMetricsForVersion 字段给出的是一个 Kubernetes 版本号字符串,
+ 用来设置你希望显示隐藏度量值的版本。
detectLocalMode [必需]
@@ -273,7 +280,66 @@ An empty string slice is meant to select all network interfaces.
- detectLocalMode 用来确定检测本地流量的方式,默认为 LocalModeClusterCIDR。
+ detectLocalMode 字段用来确定检测本地流量的方式,默认为 LocalModeClusterCIDR。
+
+
+detectLocal [必需]
+DetectLocalConfiguration
+
+
+
+ detectLocal 字段包含与 DetectLocalMode 相关的可选配置设置。
+
+
+
+
+
+## `DetectLocalConfiguration` {#kubeproxy-config-k8s-io-v1alpha1-DetectLocalConfiguration}
+
+
+**出现在:**
+
+- [KubeProxyConfiguration](#kubeproxy-config-k8s-io-v1alpha1-KubeProxyConfiguration)
+
+
+DetectLocalConfiguration 包含与 DetectLocalMode 选项相关的可选设置。
+
+
+字段 描述
+
+
+bridgeInterface [必需]
+string
+
+
+
+ bridgeInterface 字段是一个表示单个桥接接口名称的字符串参数。
+ Kube-proxy 将来自这个给定桥接接口的流量视为本地流量。
+ 如果 DetectLocalMode 设置为 LocalModeBridgeInterface,则应设置该参数。
+
+
+interfaceNamePrefix [必需]
+string
+
+
+
+ interfaceNamePrefix 字段是一个表示单个接口前缀名称的字符串参数。
+ Kube-proxy 将来自一个或多个与给定前缀匹配的接口流量视为本地流量。
+ 如果 DetectLocalMode 设置为 LocalModeInterfaceNamePrefix,则应设置该参数。
@@ -306,8 +372,8 @@ KubeProxyConntrackConfiguration 包含为 Kubernetes 代理服务器提供的 co
maxPerCore is the maximum number of NAT connections to track
per CPU core (0 to leave the limit as-is and ignore min).
-->
- maxPerCore 是每个 CPU 核所跟踪的 NAT 链接个数上限
- (0 意味着保留当前上限限制并忽略 min 字段设置值)。
+ maxPerCore 字段是每个 CPU 核所跟踪的 NAT 链接个数上限
+ (0 意味着保留当前上限限制并忽略 min 字段设置值)。
min [必需]
@@ -318,24 +384,24 @@ per CPU core (0 to leave the limit as-is and ignore min).
min is the minimum value of connect-tracking records to allocate,
regardless of conntrackMaxPerCore (set maxPerCore=0 to leave the limit as-is).
-->
- min 给出要分配的链接跟踪记录个数下限。
- 设置此值时会忽略 maxPerCore 的值(将 maxPerCore 设置为 0 时不会调整上限值)。
+ min 字段给出要分配的链接跟踪记录个数下限。
+ 设置此值时会忽略 maxPerCore 的值(将 maxPerCore 设置为 0 时不会调整上限值)。
tcpEstablishedTimeout [必需]
-meta/v1.Duration
+meta/v1.Duration
- tcpEstablishedTimeout 给出空闲 TCP 连接的保留时间(例如,'2s')。
- 此值必须大于 0。
+ tcpEstablishedTimeout 字段给出空闲 TCP 连接的保留时间(例如,'2s')。
+ 此值必须大于 0。
tcpCloseWaitTimeout [必需]
-meta/v1.Duration
+meta/v1.Duration
- tcpCloseWaitTimeout 用来设置空闲的、处于 CLOSE_WAIT 状态的 conntrack 条目
+ tcpCloseWaitTimeout 字段用来设置空闲的、处于 CLOSE_WAIT 状态的 conntrack 条目
保留在 conntrack 表中的时间长度(例如,'60s')。
- 此设置值必须大于 0。
+ 此设置值必须大于 0。
@@ -378,8 +444,8 @@ KubeProxyIPTablesConfiguration 包含用于 Kubernetes 代理服务器的、与
masqueradeBit is the bit of the iptables fwmark space to use for SNAT if using
the pure iptables proxy mode. Values must be within the range [0, 31].
-->
- masqueradeBit 是 iptables fwmark 空间中的具体一位,用来在纯 iptables 代理模式下
- 设置 SNAT。此值必须介于 [0, 31](含边界值)。
+ masqueradeBit 字段是 iptables fwmark 空间中的具体一位,
+ 用来在纯 iptables 代理模式下设置 SNAT。此值必须介于 [0, 31](含边界值)。
masqueradeAll [必需]
@@ -389,30 +455,31 @@ the pure iptables proxy mode. Values must be within the range [0, 31].
- masqueradeAll 用来通知 kube-proxy 在使用纯 iptables 代理模式时对所有流量执行
- SNAT 操作。
+ masqueradeAll 字段用来通知 kube-proxy
+ 在使用纯 iptables 代理模式时对所有流量执行 SNAT 操作。
syncPeriod [必需]
-meta/v1.Duration
+meta/v1.Duration
- syncPeriod 给出 iptables 规则的刷新周期(例如,'5s'、'1m'、'2h22m')。
- 此值必须大于 0。
+ syncPeriod 字段给出 iptables
+ 规则的刷新周期(例如,'5s'、'1m'、'2h22m')。此值必须大于 0。
minSyncPeriod [必需]
-meta/v1.Duration
+meta/v1.Duration
- minSyncPeriod 给出 iptables 规则被刷新的最小周期(例如,'5s'、'1m'、'2h22m')。
+ minSyncPeriod 字段给出 iptables
+ 规则被刷新的最小周期(例如,'5s'、'1m'、'2h22m')。
@@ -438,25 +505,25 @@ KubeProxyIPVSConfiguration 包含用于 Kubernetes 代理服务器的、与 ipvs
syncPeriod [必需]
-meta/v1.Duration
+meta/v1.Duration
- syncPeriod 给出 ipvs 规则的刷新周期(例如,'5s'、'1m'、'2h22m')。
- 此值必须大于 0。
+ syncPeriod 字段给出 ipvs 规则的刷新周期(例如,'5s'、'1m'、'2h22m')。
+ 此值必须大于 0。
minSyncPeriod [必需]
-meta/v1.Duration
+meta/v1.Duration
- minSyncPeriod 给出 ipvs 规则被刷新的最小周期(例如,'5s'、'1m'、'2h22m')。
+ minSyncPeriod 字段给出 ipvs 规则被刷新的最小周期(例如,'5s'、'1m'、'2h22m')。
scheduler [必需]
@@ -466,7 +533,7 @@ KubeProxyIPVSConfiguration 包含用于 Kubernetes 代理服务器的、与 ipvs
- IPVS 调度器。
+ IPVS 调度器。
excludeCIDRs [必需]
@@ -477,7 +544,7 @@ KubeProxyIPVSConfiguration 包含用于 Kubernetes 代理服务器的、与 ipvs
excludeCIDRs is a list of CIDR's which the ipvs proxier should not touch
when cleaning up ipvs services.
-->
- excludeCIDRs 取值为一个 CIDR 列表,ipvs 代理程序在清理 IPVS 服务时不应触碰这些 IP 地址。
+ excludeCIDRs 字段取值为一个 CIDR 列表,ipvs 代理程序在清理 IPVS 服务时不应触碰这些 IP 地址。
strictARP [必需]
@@ -488,44 +555,44 @@ when cleaning up ipvs services.
strict ARP configure arp_ignore and arp_announce to avoid answering ARP queries
from kube-ipvs0 interface
-->
- strictARP 用来配置 arp_ignore 和 arp_announce,以避免(错误地)响应来自 kube-ipvs0 接口的
- ARP 查询请求。
+ strictARP 字段用来配置 arp_ignore 和 arp_announce,以避免(错误地)响应来自 kube-ipvs0 接口的
+ ARP 查询请求。
tcpTimeout [必需]
-meta/v1.Duration
+meta/v1.Duration
- tcpTimeout 是用于设置空闲 IPVS TCP 会话的超时值。
- 默认值为 0,意味着使用系统上当前的超时值设置。
+ tcpTimeout 字段是用于设置空闲 IPVS TCP 会话的超时值。
+ 默认值为 0,意味着使用系统上当前的超时值设置。
tcpFinTimeout [必需]
-meta/v1.Duration
+meta/v1.Duration
- tcpFinTimeout 用来设置 IPVS TCP 会话在收到 FIN 之后的超时值。
- 默认值为 0,意味着使用系统上当前的超时值设置。
+ tcpFinTimeout 字段用来设置 IPVS TCP 会话在收到 FIN 之后的超时值。
+ 默认值为 0,意味着使用系统上当前的超时值设置。
udpTimeout [必需]
-meta/v1.Duration
+meta/v1.Duration
- udpTimeout 用来设置 IPVS UDP 包的超时值。
- 默认值为 0,意味着使用系统上当前的超时值设置。
+ udpTimeout 字段用来设置 IPVS UDP 包的超时值。
+ 默认值为 0,意味着使用系统上当前的超时值设置。
@@ -558,7 +625,7 @@ KubeProxyWinkernelConfiguration 包含 Kubernetes 代理服务器的 Windows/HNS
networkName is the name of the network kube-proxy will use
to create endpoints and policies
-->
- networkName 是 kube-proxy 用来创建端点和策略的网络名称。
+ networkName 字段是 kube-proxy 用来创建端点和策略的网络名称。
sourceVip [必需]
@@ -569,7 +636,7 @@ to create endpoints and policies
sourceVip is the IP address of the source VIP endoint used for
NAT when loadbalancing
-->
- sourceVip 是执行负载均衡时进行 NAT 转换所使用的源端 VIP 端点 IP 地址。
+ sourceVip 字段是执行负载均衡时进行 NAT 转换所使用的源端 VIP 端点 IP 地址。
enableDSR [必需]
@@ -580,7 +647,31 @@ NAT when loadbalancing
enableDSR tells kube-proxy whether HNS policies should be created
with DSR
-->
- enableDSR 通知 kube-proxy 是否使用 DSR 来创建 HNS 策略。
+ enableDSR 字段通知 kube-proxy 是否使用 DSR 来创建 HNS 策略。
+
+
+rootHnsEndpointName [必需]
+string
+
+
+
+ rootHnsEndpointName
+ 字段是附加到用于根网络命名空间二层桥接的 hnsendpoint 的名称。
+
+
+forwardHealthCheckVip [必需]
+bool
+
+
+
+ forwardHealthCheckVip
+ 字段为 Windows 上的健康检查端口转发服务 VIP。
@@ -665,6 +756,12 @@ this always falls back to the userspace proxy.
- [KubeProxyConfiguration](#kubeproxy-config-k8s-io-v1alpha1-KubeProxyConfiguration)
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
+
+- [GenericControllerManagerConfiguration](#controllermanager-config-k8s-io-v1alpha1-GenericControllerManagerConfiguration)
+
@@ -681,7 +778,7 @@ ClientConnectionConfiguration 包含构造客户端所需要的细节信息。
- kubeconfig 是指向一个 KubeConfig 文件的路径。
+ kubeconfig 字段是指向一个 KubeConfig 文件的路径。
acceptContentTypes [必需]
@@ -692,9 +789,9 @@ ClientConnectionConfiguration 包含构造客户端所需要的细节信息。
acceptContentTypes defines the Accept header sent by clients when connecting to a server, overriding the
default value of 'application/json'. This field will control all connections to the server used by a particular client.
-->
- acceptContentTypes 定义客户端在连接到服务器时所发送的 Accept 头部字段。
+ acceptContentTypes 字段定义客户端在连接到服务器时所发送的 Accept 头部字段。
此设置值会覆盖默认配置 'application/json'。
- 此字段会控制某特定客户端与指定服务器的所有链接。
+ 此字段会控制某特定客户端与指定服务器的所有链接。
contentType [必需]
@@ -704,7 +801,7 @@ default value of 'application/json'. This field will control all connections to
- contentType 是从此客户端向服务器发送数据时使用的内容类型(Content Type)。
+ contentType 字段是从此客户端向服务器发送数据时使用的内容类型(Content Type)。
qps [必需]
@@ -714,7 +811,7 @@ default value of 'application/json'. This field will control all connections to
- qps 控制此连接上每秒钟可以发送的查询请求个数。
+ qps 字段控制此连接上每秒钟可以发送的查询请求个数。
burst [必需]
@@ -724,7 +821,55 @@ default value of 'application/json'. This field will control all connections to
- 允许客户端超出其速率限制时可以临时累积的额外查询个数。
+ burst 字段允许客户端超出其速率限制时可以临时累积的额外查询个数。
+
+
+
+
+
+## `DebuggingConfiguration` {#DebuggingConfiguration}
+
+
+**出现在:**
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
+
+- [GenericControllerManagerConfiguration](#controllermanager-config-k8s-io-v1alpha1-GenericControllerManagerConfiguration)
+
+
+DebuggingConfiguration 包含调试相关功能的配置。
+
+
+字段 描述
+
+
+enableProfiling [Required]
+bool
+
+
+
+ enableProfiling 字段通过位于 host:port/debug/pprof/
+ 的 Web 接口启用性能分析。
+
+
+enableContentionProfiling [Required]
+bool
+
+
+
+ enableContentionProfiling 字段在 enableProfiling
+ 为 true 时允许执行锁竞争分析。
@@ -754,7 +899,7 @@ FormatOptions 包含不同日志记录格式的配置选项。
- [实验特性] json 字段包含 “JSON” 日志格式的配置选项。
+ [实验特性] json 字段包含 "JSON" 日志格式的配置选项。
@@ -772,7 +917,7 @@ FormatOptions 包含不同日志记录格式的配置选项。
-JSONOptions 包含“json”日志格式的配置选项。
+JSONOptions 包含 "json" 日志格式的配置选项。
字段 描述
@@ -788,8 +933,8 @@ JSONOptions 包含“json”日志格式的配置选项。
info messages go to stdout, with buffering. The default is to write
both to stdout, without buffering.
-->
- [实验特性] splitStream 将信息类型的信息输出到标准输出,错误信息重定向到标准
- 错误输出,并提供缓存。默认行为是将二者都输出到标准输出且不提供缓存。
+ [实验特性] splitStream 字段将信息类型的信息输出到标准输出,错误信息重定向到标准
+ 错误输出,并提供缓存。默认行为是将二者都输出到标准输出且不提供缓存。
infoBufferSize [必需]
@@ -800,8 +945,220 @@ both to stdout, without buffering.
[Experimental] InfoBufferSize sets the size of the info stream when
using split streams. The default is zero, which disables buffering.
-->
- [实验特性] infoBufferSize 设置在使用分离数据流时 info 数据流的缓冲区大小。
- 默认值为 0,意味着不提供缓存。
+ [实验特性] infoBufferSize 字段设置在使用分离数据流时 info 数据流的缓冲区大小。
+ 默认值为 0,意味着不提供缓存。
+
+
+
+
+
+## `LeaderElectionConfiguration` {#LeaderElectionConfiguration}
+
+
+**出现在:**
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
+
+- [GenericControllerManagerConfiguration](#controllermanager-config-k8s-io-v1alpha1-GenericControllerManagerConfiguration)
+
+
+LeaderElectionConfiguration 为能够支持领导者选举的组件定义其领导者选举客户端的配置。
+
+
+字段 描述
+
+
+leaderElect [必需]
+bool
+
+
+
+
+ leaderElect 字段允许领导者选举客户端在进入主循环执行之前先获得领导者角色。
+ 运行多副本组件时启用此功能有助于提高可用性。
+
+
+
+leaseDuration [必需]
+meta/v1.Duration
+
+
+
+
+ leaseDuration 字段是非领导角色候选者在观察到需要领导席位更新时要等待的时间;
+ 只有经过所设置时长才可以尝试去获得一个仍处于领导状态但需要被刷新的席位。
+ 这里的设置值本质上意味着某个领导者在被另一个候选者替换掉之前可以停止运行的最长时长。
+ 只有当启用了领导者选举时此字段有意义。
+
+
+
+renewDeadline [必需]
+meta/v1.Duration
+
+
+
+
+ renewDeadline 字段设置的是当前领导者在停止扮演领导角色之前需要刷新领导状态的时间间隔。
+ 此值必须小于或等于租约期限的长度。只有到启用了领导者选举时此字段才有意义。
+
+
+
+retryPeriod [必需]
+meta/v1.Duration
+
+
+
+
+ retryPeriod 字段是客户端在连续两次尝试获得或者刷新领导状态之间需要等待的时长。
+ 只有当启用了领导者选举时此字段才有意义。
+
+
+
+resourceLock [必需]
+string
+
+
+
+ resourceLock 字段给出在领导者选举期间要作为锁来使用的资源对象类型。
+
+
+resourceName [必需]
+string
+
+
+
+ resourceName 字段给出在领导者选举期间要作为锁来使用的资源对象名称。
+
+
+resourceNamespace [必需]
+string
+
+
+
+ resourceNamespace 字段给出在领导者选举期间要作为锁来使用的资源对象所在名字空间。
+
+
+
+
+
+## `LoggingConfiguration` {#LoggingConfiguration}
+
+
+**出现在:**
+
+- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
+
+
+LoggingConfiguration 包含日志选项。
+参考 [Logs Options](https://github.com/kubernetes/component-base/blob/master/logs/options.go) 以了解更多信息。
+
+
+字段 描述
+
+
+format [必需]
+string
+
+
+
+ format 字段设置日志消息的结构。默认的格式取值为 text。
+
+
+flushFrequency [必需]
+time.Duration
+
+
+
+ 对日志进行清洗的最大间隔纳秒数(例如,1s = 1000000000)。
+ 如果所选的日志后端在写入日志消息时不提供缓存,则此配置会被忽略。
+
+
+verbosity [必需]
+uint32
+
+
+
+ verbosity 字段用来确定日志消息记录的详细程度阈值。
+ 默认值为 0,意味着仅记录最重要的消息。
+ 数值越大,额外的消息越多。错误消息总是被记录下来。
+
+
+vmodule [必需]
+VModuleConfiguration
+
+
+
+ vmodule 字段会在单个文件层面重载 verbosity 阈值的设置。
+ 这一选项仅支持 "text" 日志格式。
+
+
+options [Required]
+FormatOptions
+
+
+
+ [实验特性] options 字段中包含特定于不同日志格式的配置参数。
+ 只有针对所选格式的选项会被使用,但是合法性检查时会查看所有选项配置。
@@ -816,9 +1173,12 @@ using split streams. The default is zero, which disables buffering.
-->
(`[]k8s.io/component-base/config/v1alpha1.VModuleItem` 的别名)
+**出现在:**
+
+- [LoggingConfiguration](#LoggingConfiguration)
+
VModuleConfiguration 是一组文件名或文件名模式,及其对应的日志详尽程度阈值配置。
-
diff --git a/content/zh/docs/reference/config-api/kube-scheduler-config.v1beta2.md b/content/zh/docs/reference/config-api/kube-scheduler-config.v1beta2.md
index 6a2ab78655..91a427ae40 100644
--- a/content/zh/docs/reference/config-api/kube-scheduler-config.v1beta2.md
+++ b/content/zh/docs/reference/config-api/kube-scheduler-config.v1beta2.md
@@ -26,13 +26,440 @@ auto_generated: true
- [PodTopologySpreadArgs](#kubescheduler-config-k8s-io-v1beta2-PodTopologySpreadArgs)
- [VolumeBindingArgs](#kubescheduler-config-k8s-io-v1beta2-VolumeBindingArgs)
+
+## `ClientConnectionConfiguration` {#ClientConnectionConfiguration}
+
+
+**出现在:**
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
+
+
+ClientConnectionConfiguration 中包含用来构造客户端所需的细节。
+
+
+字段 描述
+
+
+kubeconfig [必需]
+string
+
+
+
+ 此字段为指向某 KubeConfig 文件的路径。
+
+
+acceptContentTypes [必需]
+string
+
+
+
+ acceptContentTypes 定义的是客户端与服务器建立连接时要发送的Accept 头部,
+ 这里的设置值会覆盖默认值 "application/json"。
+ 此字段会影响某特定客户端与服务器的所有连接。
+
+
+contentType [必需]
+string
+
+
+
+
+ contentType 包含的是此客户端向服务器发送数据时使用的内容类型(Content Type)。
+
+
+
+qps [必需]
+float32
+
+
+
+ qps 控制此连接允许的每秒查询次数。
+
+
+burst [必需]
+int32
+
+
+
+ burst 允许在客户端超出其速率限制时可以累积的额外查询个数。
+
+
+
+
+
+## `DebuggingConfiguration` {#DebuggingConfiguration}
+
+
+**出现在:**
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
+
+
+DebuggingConfiguration 保存与调试功能相关的配置。
+
+
+字段 描述
+
+
+enableProfiling [必需]
+bool
+
+
+
+ 此字段允许通过 Web 接口 host:port/debug/pprof/ 执行性能分析。
+
+
+enableContentionProfiling [必需]
+bool
+
+
+
+ 此字段在 enableProfiling 为 true 时允许执行锁竞争分析。
+
+
+
+
+
+## `FormatOptions` {#FormatOptions}
+
+
+
+
+FormatOptions 中包含不同日志格式的配置选项。
+
+
+字段 描述
+
+
+json [必需]
+JSONOptions
+
+
+
+ [实验特性] json 字段包含为 "json" 日志格式提供的配置选项。
+
+
+
+
+
+## `JSONOptions` {#JSONOptions}
+
+
+**出现在:**
+
+- [FormatOptions](#FormatOptions)
+
+
+JSONOptions 包含为 "json" 日志格式所设置的配置选项。
+
+
+字段 描述
+
+
+splitStream [必需]
+bool
+
+
+
+ [实验特性] 此字段将错误信息重定向到标准错误输出(stderr),
+ 将提示消息重定向到标准输出(stdout),并且支持缓存。
+ 默认配置为将二者都输出到标准输出(stdout),且不提供缓存。
+
+
+infoBufferSize [必需]
+k8s.io/apimachinery/pkg/api/resource.QuantityValue
+
+
+
+
+ [实验特性] infoBufferSize 用来在分离数据流场景是设置提示信息数据流的大小。
+ 默认值为 0,意味着禁止缓存。
+
+
+
+
+
+## `LeaderElectionConfiguration` {#LeaderElectionConfiguration}
+
+
+**出现在:**
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
+
+
+
+LeaderElectionConfiguration 为能够支持领导者选举的组件定义其领导者选举客户端的配置。
+
+
+
+字段 描述
+
+
+leaderElect [必需]
+bool
+
+
+
+ leaderElect 允许领导者选举客户端在进入主循环执行之前先获得领导者角色。
+ 运行多副本组件时启用此功能有助于提高可用性。
+
+
+
+leaseDuration [必需]
+meta/v1.Duration
+
+
+
+
+ leaseDuration 是非领导角色候选者在观察到需要领导席位更新时要等待的时间;
+ 只有经过所设置时长才可以尝试去获得一个仍处于领导状态但需要被刷新的席位。
+ 这里的设置值本质上意味着某个领导者在被另一个候选者替换掉之前可以停止运行的最长时长。
+ 只有当启用了领导者选举时此字段有意义。
+
+
+
+renewDeadline [必需]
+meta/v1.Duration
+
+
+
+
+ renewDeadline 设置的是当前领导者在停止扮演领导角色之前需要刷新领导状态的时间间隔。
+ 此值必须小于或等于租约期限的长度。只有到启用了领导者选举时此字段才有意义。
+
+
+
+retryPeriod [必需]
+meta/v1.Duration
+
+
+
+
+ retryPeriod 是客户端在连续两次尝试获得或者刷新领导状态之间需要等待的时长。
+ 只有当启用了领导者选举时此字段才有意义。
+
+
+
+resourceLock [必需]
+string
+
+
+
+ 此字段给出在领导者选举期间要作为锁来使用的资源对象类型。
+
+
+resourceName [必需]
+string
+
+
+
+ 此字段给出在领导者选举期间要作为锁来使用的资源对象名称。
+
+
+resourceNamespace [必需]
+string
+
+
+
+ 此字段给出在领导者选举期间要作为锁来使用的资源对象所在名字空间。
+
+
+
+
+
+
+## `LoggingConfiguration` {#LoggingConfiguration}
+
+
+**出现在:**
+
+- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
+
+
+
+LoggingConfiguration 包含日志选项。
+参考 [Logs Options](https://github.com/kubernetes/component-base/blob/master/logs/options.go) 以了解更多信息。
+
+
+
+字段 描述
+
+
+format [必需]
+string
+
+
+
+ format 设置日志消息的结构。默认的格式取值为 text。
+
+
+flushFrequency [必需]
+time.Duration
+
+
+
+ 对日志进行清洗的最大间隔纳秒数(例如,1s = 1000000000)。
+ 如果所选的日志后端在写入日志消息时不提供缓存,则此配置会被忽略。
+
+
+verbosity [必需]
+uint32
+
+
+
+ verbosity 用来确定日志消息记录的详细程度阈值。默认值为 0,
+ 意味着仅记录最重要的消息。数值越大,额外的消息越多。错误消息总是被记录下来。
+
+
+vmodule [必需]
+VModuleConfiguration
+
+
+
+ vmodule 会在单个文件层面重载 verbosity 阈值的设置。
+ 这一选项仅支持 "text" 日志格式。
+
+
+options [Required]
+FormatOptions
+
+
+
+ [实验特性] options 中包含特定于不同日志格式的配置参数。
+ 只有针对所选格式的选项会被使用,但是合法性检查时会查看所有选项配置。
+
+
+
+
+
+## `VModuleConfiguration` {#VModuleConfiguration}
+
+
+(`[]k8s.io/component-base/config/v1alpha1.VModuleItem` 的别名)
+
+**出现在:**
+
+- [LoggingConfiguration](#LoggingConfiguration)
+
+
+VModuleConfiguration 是一组文件名(通配符)及其对应的日志详尽程度阈值。
+
+
+
## `DefaultPreemptionArgs` {#kubescheduler-config-k8s-io-v1beta2-DefaultPreemptionArgs}
-DefaultPreemptionArgs 包含用来配置 DefaultPreemption 插件的参数。
+DefaultPreemptionArgs 包含用来配置 DefaultPreemption 插件的参数。
字段 描述
@@ -52,8 +479,8 @@ shortlist when dry running preemption as a percentage of number of nodes.
Must be in the range [0, 100]. Defaults to 10% of the cluster size if
unspecified.
-->
- 此字段为试运行抢占时 shortlist 中候选节点数的下限,数值为节点数的百分比。
-字段值必须介于 [0, 100] 之间。未指定时默认值为整个集群规模的 10%。
+ 此字段为试运行抢占时 shortlist 中候选节点数的下限,数值为节点数的百分比。
+ 字段值必须介于 [0, 100] 之间。未指定时默认值为整个集群规模的 10%。
minCandidateNodesAbsolute [必需]
@@ -69,11 +496,10 @@ We say "likely" because there are other factors such as PDB violations
that play a role in the number of candidates shortlisted. Must be at least
0 nodes. Defaults to 100 nodes if unspecified.
-->
- 此字段设置 shortlist 中候选节点的绝对下限。用于试运行抢占而列举的
-候选节点个数近似于通过下面的公式计算的:
-候选节点数 = max(节点数 * minCandidateNodesPercentage, minCandidateNodesAbsolute)
-之所以说是“近似于”是因为存在一些类似于 PDB 违例这种因素,会影响到进入 shortlist
-中候选节点的个数。取值至少为 0 节点。若未设置默认为 100 节点。
+ 此字段设置 shortlist 中候选节点的绝对下限。用于试运行抢占而列举的候选节点个数近似于通过下面的公式计算的:
+ 候选节点数 = max(节点数 * minCandidateNodesPercentage, minCandidateNodesAbsolute)
+ 之所以说是"近似于"是因为存在一些类似于 PDB 违例这种因素,会影响到进入 shortlist中候选节点的个数。
+ 取值至少为 0 节点。若未设置默认为 100 节点。
@@ -84,7 +510,7 @@ that play a role in the number of candidates shortlisted. Must be at least
-InterPodAffinityArgs 包含用来配置 InterPodAffinity 插件的参数。
+InterPodAffinityArgs 包含用来配置 InterPodAffinity 插件的参数。
字段 描述
@@ -101,8 +527,8 @@ InterPodAffinityArgs 包含用来配置 InterPodAffinity 插件的参数。
HardPodAffinityWeight is the scoring weight for existing pods with a
matching hard affinity to the incoming pod.
-->
- 此字段是一个计分权重值。针对新增的 Pod,要对现存的、带有与新 Pod 匹配的
-硬性亲和性设置的 Pod 计算亲和性得分。
+ 此字段是一个计分权重值。针对新增的 Pod,
+ 要对现存的、带有与新 Pod 匹配的硬性亲和性设置的 Pod 计算亲和性得分。
@@ -113,7 +539,7 @@ matching hard affinity to the incoming pod.
-KubeSchedulerConfiguration 用来配置调度器。
+KubeSchedulerConfiguration 用来配置调度器。
字段 描述
@@ -129,8 +555,8 @@ KubeSchedulerConfiguration 用来配置调度器。
- 此字段设置为调度 Pod 而执行算法时的并发度。此值必须大于 0。
-默认值为 16。
+ 此字段设置为调度 Pod 而执行算法时的并发度。此值必须大于 0。
+ 默认值为 16。
leaderElection [必需]
@@ -140,7 +566,7 @@ KubeSchedulerConfiguration 用来配置调度器。
- 此字段用来定义领导者选举客户端的配置。
+ 此字段用来定义领导者选举客户端的配置。
clientConnection [必需]
@@ -151,8 +577,7 @@ KubeSchedulerConfiguration 用来配置调度器。
ClientConnection specifies the kubeconfig file and client connection
settings for the proxy server to use when communicating with the apiserver.
-->
- 此字段为与 API 服务器通信时使用的代理服务器设置 kubeconfig 文件和客户端
-连接配置。
+ 此字段为与 API 服务器通信时使用的代理服务器设置 kubeconfig 文件和客户端连接配置。
healthzBindAddress [必需]
@@ -164,10 +589,9 @@ settings for the proxy server to use when communicating with the apiserver.
Only empty address or port 0 is allowed. Anything else will fail validation.
HealthzBindAddress is the IP address and port for the health check server to serve on.
-->
- healthzBindAddress 是健康检查服务器提供服务所用的 IP 地址和端口。
- 注意:healthzBindAddress 和 metricsBindAddress
-这两个字段都已被弃用。
-只可以设置空地址或者端口 0。其他设置值都无法通过合法性检查。
+ healthzBindAddress 是健康检查服务器提供服务所用的 IP 地址和端口。
+ 注意:healthzBindAddress 和 metricsBindAddress这两个字段都已被弃用。
+ 只可以设置空地址或者端口 0。其他设置值都无法通过合法性检查。
metricsBindAddress [必需]
@@ -177,17 +601,22 @@ HealthzBindAddress is the IP address and port for the health check server to ser
- metricsBindAddress 是度量值服务器提供服务所用的 IP 地址和端口。
+ metricsBindAddress 是度量值服务器提供服务所用的 IP 地址和端口。
DebuggingConfiguration [必需]
DebuggingConfiguration
+
(DebuggingConfiguration 的成员被内嵌到此类型中)
- 此字段设置与调试相关功能特性的配置。
+ 此字段设置与调试相关功能特性的配置。
+ TODO:我们可能想把它做成一个子结构,像调试 component-base/config/v1alpha1.DebuggingConfiguration 一样。
percentageOfNodesToScore [必需]
@@ -204,12 +633,13 @@ then scheduler stops finding further feasible nodes once it finds 150 feasible o
When the value is 0, default percentage (5%--50% based on the size of the cluster) of the
nodes will be scored.
-->
- 此字段为所有节点的百分比,一旦调度器找到所设置比例的、能够运行 Pod 的节点,
-则停止在集群中继续寻找更合适的节点。这一配置有助于提高调度器的性能。调度器
-总会尝试寻找至少 "minFeasibleNodesToFind" 个可行节点,无论此字段的取值如何。
-例如:当集群规模为 500 个节点,而此字段的取值为 30,则调度器在找到 150 个合适
-的节点后会停止继续寻找合适的节点。当此值为 0 时,调度器会使用默认节点数百分比(基于集群规模
-确定的值,在 5% 到 50% 之间)来执行打分操作。
+ 此字段为所有节点的百分比,一旦调度器找到所设置比例的、能够运行 Pod 的节点,
+ 则停止在集群中继续寻找更合适的节点。这一配置有助于提高调度器的性能。
+ 调度器总会尝试寻找至少 "minFeasibleNodesToFind" 个可行节点,无论此字段的取值如何。
+ 例如:当集群规模为 500 个节点,而此字段的取值为 30,
+ 则调度器在找到 150 个合适的节点后会停止继续寻找合适的节点。
+ 当此值为 0 时,调度器会使用默认节点数百分比(基于集群规模确定的值,在 5% 到 50% 之间)来执行打分操作。
+
podInitialBackoffSeconds [必需]
@@ -221,8 +651,8 @@ nodes will be scored.
If specified, it must be greater than 0. If this value is null, the default value (1s)
will be used.
-->
- 此字段设置不可调度 Pod 的初始回退秒数。如果设置了此字段,其取值必须大于零。
-若此值为 null,则使用默认值(1s)。
+ 此字段设置不可调度 Pod 的初始回退秒数。如果设置了此字段,其取值必须大于零。
+ 若此值为 null,则使用默认值(1s)。
podMaxBackoffSeconds [必需]
@@ -234,8 +664,9 @@ will be used.
If specified, it must be greater than podInitialBackoffSeconds. If this value is null,
the default value (10s) will be used.
-->
- 此字段设置不可调度的 Pod 的最大回退秒数。如果设置了此字段,则其值必须大于
-podInitialBackoffSeconds 字段值。如果此值设置为 null,则使用默认值(10s)。
+ 此字段设置不可调度的 Pod 的最大回退秒数。如果设置了此字段,
+ 则其值必须大于 podInitialBackoffSeconds 字段值。如果此值设置为 null,则使用默认值(10s)。
+
profiles [必需]
@@ -248,9 +679,10 @@ choose to be scheduled under a particular profile by setting its associated
scheduler name. Pods that don't specify any scheduler name are scheduled
with the "default-scheduler" profile, if present here.
-->
- 此字段为 kube-scheduler 所支持的方案(profiles)。Pod 可以通过设置其对应
-的调度器名称来选择使用特定的方案。未指定调度器名称的 Pod 会使用
-“default-scheduler”方案来调度,如果存在的话。
+ 此字段为 kube-scheduler 所支持的方案(profiles)。
+ Pod 可以通过设置其对应的调度器名称来选择使用特定的方案。
+ 未指定调度器名称的 Pod 会使用 "default-scheduler" 方案来调度,如果存在的话。
+
extenders [必需]
@@ -261,8 +693,9 @@ with the "default-scheduler" profile, if present here.
Extenders are the list of scheduler extenders, each holding the values of how to communicate
with the extender. These extenders are shared by all scheduler profiles.
-->
- 此字段为调度器扩展模块(Extender)的列表,每个元素包含如何与某扩展模块
-通信的配置信息。所有调度器模仿会共享此扩展模块列表。
+ 此字段为调度器扩展模块(Extender)的列表,
+ 每个元素包含如何与某扩展模块通信的配置信息。
+ 所有调度器模仿会共享此扩展模块列表。
@@ -273,7 +706,7 @@ with the extender. These extenders are shared by all scheduler profiles.
-NodeAffinityArgs 中包含配置 NodeAffinity 插件的参数。
+NodeAffinityArgs 中包含配置 NodeAffinity 插件的参数。
字段 描述
@@ -294,11 +727,12 @@ match).
When AddedAffinity is used, some Pods with affinity requirements that match
a specific Node (such as Daemonset Pods) might remain unschedulable.
-->
- addedAffinity 会作为附加的亲和性属性添加到所有 Pod 的
-规约中指定的 NodeAffinity 中。换言之,节点需要同时满足 addedAffinity
-和 .spec.nodeAffinity。默认情况下,addedAffinity 为空(与所有节点匹配)。
-使用了 addedAffinity 时,某些带有已经能够与某特定节点匹配的亲和性需求
-的 Pod (例如 DaemonSet Pod)可能会继续呈现不可调度状态。
+
+ addedAffinity 会作为附加的亲和性属性添加到所有 Pod 的规约中指定的 NodeAffinity 中。
+ 换言之,节点需要同时满足 addedAffinity 和 .spec.nodeAffinity。默认情况下,addedAffinity 为空(与所有节点匹配)。
+ 使用了 addedAffinity 时,某些带有已经能够与某特定节点匹配的亲和性需求的
+ Pod (例如 DaemonSet Pod)可能会继续呈现不可调度状态。
+
@@ -309,7 +743,7 @@ a specific Node (such as Daemonset Pods) might remain unschedulable.
-NodeResourcesBalancedAllocationArgs 包含用来配置 NodeResourcesBalancedAllocation 插件的参数。
+NodeResourcesBalancedAllocationArgs 包含用来配置 NodeResourcesBalancedAllocation 插件的参数。
字段 描述
@@ -325,7 +759,7 @@ NodeResourcesBalancedAllocationArgs 包含用来配置 NodeResourcesBalancedAllo
- 要管理的资源;如果未设置,则默认值为 "cpu" 和 "memory"。
+ 要管理的资源;如果未设置,则默认值为 "cpu" 和 "memory"。
@@ -336,7 +770,7 @@ NodeResourcesBalancedAllocationArgs 包含用来配置 NodeResourcesBalancedAllo
-NodeResourcesFitArgs 包含用来配置 NodeResourcesFit 插件的参数。
+NodeResourcesFitArgs 包含用来配置 NodeResourcesFit 插件的参数。
字段 描述
@@ -353,7 +787,7 @@ NodeResourcesFitArgs 包含用来配置 NodeResourcesFit 插件的参数。
IgnoredResources is the list of resources that NodeResources fit filter
should ignore. This doesn't apply to scoring.
-->
- 此字段为 NodeResources 匹配过滤器要忽略的资源列表。此列表不影响节点打分。
+ 此字段为 NodeResources 匹配过滤器要忽略的资源列表。此列表不影响节点打分。
ignoredResourceGroups [必需]
@@ -366,10 +800,10 @@ e.g. if group is ["example.com"], it will ignore all resource names that begin
with "example.com", such as "example.com/aaa" and "example.com/bbb".
A resource group name can't contain '/'. This doesn't apply to scoring.
-->
- 此字段定义 NodeResources 匹配过滤器要忽略的资源组列表。
-例如,如果配置值为 ["example.com"],则以 "example.com" 开头的资源名(如
-"example.com/aaa" 和 "example.com/bbb")都会被忽略。
-资源组名称中不可以包含 '/'。此设置不影响节点的打分。
+ 此字段定义 NodeResources 匹配过滤器要忽略的资源组列表。
+ 例如,如果配置值为 ["example.com"],则以 "example.com"
+ 开头的资源名(如"example.com/aaa" 和 "example.com/bbb")都会被忽略。
+ 资源组名称中不可以包含 '/'。此设置不影响节点的打分。
scoringStrategy [必需]
@@ -380,8 +814,8 @@ A resource group name can't contain '/'. This doesn't apply to scoring.
ScoringStrategy selects the node resource scoring strategy.
The default strategy is LeastAllocated with an equal "cpu" and "memory" weight.
-->
- 此字段用来选择节点资源打分策略。默认的策略为 LeastAllocated,且 "cpu" 和
-"memory" 的权重相同。
+ 此字段用来选择节点资源打分策略。默认的策略为 LeastAllocated,
+ 且 "cpu" 和"memory" 的权重相同。
@@ -392,7 +826,7 @@ The default strategy is LeastAllocated with an equal "cpu" and "memory" weight.
-PodTopologySpreadArgs 包含用来配置 PodTopologySpread 插件的参数。
+PodTopologySpreadArgs 包含用来配置 PodTopologySpread 插件的参数。
字段 描述
@@ -413,11 +847,11 @@ deduced from the Pod's membership to Services, ReplicationControllers,
ReplicaSets or StatefulSets.
When not empty, .defaultingType must be "List".
-->
- 此字段针对未定义 .spec.topologySpreadConstraints 的 Pod,
-为其提供拓扑分布约束。.defaultConstraints[∗].labelSelectors
-必须为空,因为这一信息要从 Pod 所属的 Service、ReplicationController、
-ReplicaSet 或 StatefulSet 来推导。
-此字段不为空时,.defaultingType 必须为 "List"。
+ 此字段针对未定义 .spec.topologySpreadConstraints 的 Pod,
+ 为其提供拓扑分布约束。.defaultConstraints[∗].labelSelectors必须为空,
+ 因为这一信息要从 Pod 所属的 Service、ReplicationController、
+ ReplicaSet 或 StatefulSet 来推导。
+ 此字段不为空时,.defaultingType 必须为 "List"。
defaultingType
@@ -434,13 +868,13 @@ ReplicaSet 或 StatefulSet 来推导。
and to "System" if enabled.-->
defaultingType 决定如何推导 .defaultConstraints。
-可选值为 "System" 或 "List"。
+ 可选值为 "System" 或 "List"。
- "System":使用 Kubernetes 定义的约束,将 Pod 分布到不同节点和可用区;
- "List":使用 .defaultConstraints 中定义的约束。
+ "System":使用 Kubernetes 定义的约束,将 Pod 分布到不同节点和可用区;
+ "List":使用 .defaultConstraints 中定义的约束。
- 当特性门控 DefaultPodTopologySpread 被禁用时,默认值为 "list";反之,默认值为 "System"。
+ 当特性门控 DefaultPodTopologySpread 被禁用时,默认值为 "list";反之,默认值为 "System"。
@@ -451,7 +885,7 @@ ReplicaSet 或 StatefulSet 来推导。
-VolumeBindingArgs 包含用来配置 VolumeBinding 插件的参数。
+VolumeBindingArgs 包含用来配置 VolumeBinding 插件的参数。
字段 描述
@@ -469,8 +903,8 @@ VolumeBindingArgs 包含用来配置 VolumeBinding 插件的参数。
Value must be non-negative integer. The value zero indicates no waiting.
If this value is nil, the default value (600) will be used.
-->
- 此字段设置卷绑定操作的超时秒数。字段值必须是非负数。
-取值为 0 意味着不等待。如果此值为 null,则使用默认值(600)。
+ 此字段设置卷绑定操作的超时秒数。字段值必须是非负数。
+ 取值为 0 意味着不等待。如果此值为 null,则使用默认值(600)。
shape
@@ -490,17 +924,16 @@ The default shape points are:
2) 10 for 100 utilization
All points must be sorted in increasing order by utilization.
-->
- shape 用来设置打分函数曲线所使用的计分点,这些计分点
-用来基于静态制备的 PV 卷的利用率为节点打分。
-卷的利用率是计算得来的,将 Pod 所请求的总的存储空间大小除以每个节点
-上可用的总的卷容量。每个计分点包含利用率(范围从 0 到 100)和其对应
-的得分(范围从 0 到 10)。你可以通过为不同的使用率值设置不同的得分来
-反转优先级:
+ shape 用来设置打分函数曲线所使用的计分点,
+ 这些计分点用来基于静态制备的 PV 卷的利用率为节点打分。
+ 卷的利用率是计算得来的,将 Pod 所请求的总的存储空间大小除以每个节点上可用的总的卷容量。
+ 每个计分点包含利用率(范围从 0 到 100)和其对应的得分(范围从 0 到 10)。
+ 你可以通过为不同的使用率值设置不同的得分来反转优先级:
默认的曲线计分点为:
-
+
利用率为 0 时得分为 0;
利用率为 100 时得分为 10。
-
+
所有计分点必须按利用率值的升序来排序。
@@ -520,8 +953,8 @@ All points must be sorted in increasing order by utilization.
Extender holds the parameters used to communicate with the extender. If a verb is unspecified/empty,
it is assumed that the extender chose not to provide that extension.
-->
-Extender 包含与扩展模块(Extender)通信所用的参数。
-如果未指定 verb 或者 verb 为空,则假定对应的扩展模块选择不提供该扩展功能。
+Extender 包含与扩展模块(Extender)通信所用的参数。
+如果未指定 verb 或者 verb 为空,则假定对应的扩展模块选择不提供该扩展功能。
字段 描述
@@ -534,7 +967,7 @@ Extender 包含与扩展模块(Extender)通信所用的参数。
- 用来访问扩展模块的 URL 前缀。
+ 用来访问扩展模块的 URL 前缀。
filterVerb [必需]
@@ -544,8 +977,8 @@ Extender 包含与扩展模块(Extender)通信所用的参数。
- filter 调用所使用的动词,如果不支持过滤操作则为空。
-此动词会在向扩展模块发送 filter 调用时追加到 urlPrefix 后面。
+ filter 调用所使用的动词,如果不支持过滤操作则为空。
+ 此动词会在向扩展模块发送 filter 调用时追加到 urlPrefix 后面。
preemptVerb [必需]
@@ -555,8 +988,8 @@ Extender 包含与扩展模块(Extender)通信所用的参数。
- preempt 调用所使用的动词,如果不支持抢占操作则为空。
-此动词会在向扩展模块发送 preempt 调用时追加到 urlPrefix 后面。
+ preempt 调用所使用的动词,如果不支持抢占操作则为空。
+ 此动词会在向扩展模块发送 preempt 调用时追加到 urlPrefix 后面。
prioritizeVerb [必需]
@@ -566,8 +999,8 @@ Extender 包含与扩展模块(Extender)通信所用的参数。
- prioritize 调用所使用的动词,如果不支持 prioritize 操作则为空。
-此动词会在向扩展模块发送 prioritize 调用时追加到 urlPrefix 后面。
+ prioritize 调用所使用的动词,如果不支持 prioritize 操作则为空。
+ 此动词会在向扩展模块发送 prioritize 调用时追加到 urlPrefix 后面。
weight [必需]
@@ -578,8 +1011,8 @@ Extender 包含与扩展模块(Extender)通信所用的参数。
The numeric multiplier for the node scores that the prioritize call generates.
The weight should be a positive integer
-->
- 针对 prioritize 调用所生成的节点分数要使用的数值系数。
-weight 值必须是正整数。
+ 针对 prioritize 调用所生成的节点分数要使用的数值系数。
+ weight 值必须是正整数。
bindVerb [必需]
@@ -591,10 +1024,10 @@ weight 值必须是正整数。
If this method is implemented by the extender, it is the extender's responsibility to bind the pod to apiserver. Only one extender
can implement this function.
-->
- bind 调用所使用的动词,如果不支持 bind 操作则为空。
-此动词会在向扩展模块发送 bind 调用时追加到 urlPrefix 后面。
-如果扩展模块实现了此方法,扩展模块要负责将 Pod 绑定到 API 服务器。
-只有一个扩展模块可以实现此函数。
+ bind 调用所使用的动词,如果不支持 bind 操作则为空。
+ 此动词会在向扩展模块发送 bind 调用时追加到 urlPrefix 后面。
+ 如果扩展模块实现了此方法,扩展模块要负责将 Pod 绑定到 API 服务器。
+ 只有一个扩展模块可以实现此函数。
enableHTTPS [必需]
@@ -604,7 +1037,7 @@ can implement this function.
- 此字段设置是否需要使用 HTTPS 来与扩展模块通信。
+ 此字段设置是否需要使用 HTTPS 来与扩展模块通信。
tlsConfig [必需]
@@ -614,20 +1047,20 @@ can implement this function.
- 此字段设置传输层安全性(TLS)配置。
+ 此字段设置传输层安全性(TLS)配置。
httpTimeout [必需]
-meta/v1.Duration
+meta/v1.Duration
- 此字段给出扩展模块功能调用的超时值。filter 操作超时会导致 Pod 无法被调度。
-prioritize 操作超时会被忽略,Kubernetes 或者其他扩展模块所给出的优先级值
-会被用来选择节点。
+ 此字段给出扩展模块功能调用的超时值。filter 操作超时会导致 Pod 无法被调度。
+ prioritize 操作超时会被忽略,Kubernetes 或者其他扩展模块所给出的优先级值会被用来选择节点。
+
nodeCacheCapable [必需]
@@ -639,8 +1072,8 @@ prioritize 操作超时会被忽略,Kubernetes 或者其他扩展模块所给
so the scheduler should only send minimal information about the eligible nodes
assuming that the extender already cached full details of all nodes in the cluster
-->
- 此字段指示扩展模块可以缓存节点信息,从而调度器应该发送关于可选节点的最少信息,
-假定扩展模块已经缓存了集群中所有节点的全部详细信息。
+ 此字段指示扩展模块可以缓存节点信息,从而调度器应该发送关于可选节点的最少信息,
+ 假定扩展模块已经缓存了集群中所有节点的全部详细信息。
managedResources
@@ -660,10 +1093,10 @@ this extender.
managedResources 是一个由此扩展模块所管理的扩展资源的列表。
如果某 Pod 请求了此列表中的至少一个扩展资源,则 Pod 会在 filter、
-prioritize 和 bind (如果扩展模块可以执行绑定操作)阶段被发送到该扩展模块。
-若此字段为空或未设置,则所有 Pod 都会发送到此扩展模块。
+ prioritize 和 bind (如果扩展模块可以执行绑定操作)阶段被发送到该扩展模块。
+ 若此字段为空或未设置,则所有 Pod 都会发送到此扩展模块。
如果某资源上设置了 ignoredByScheduler 为 true,则 kube-scheduler
-会在断言阶段略过对该资源的检查。
+ 会在断言阶段略过对该资源的检查。
@@ -675,8 +1108,8 @@ prioritize 和 bind (如果扩展模块可以执行绑定操作)阶段被发
Ignorable specifies if the extender is ignorable, i.e. scheduling should not
fail when the extender returns an error or is not reachable.
-->
- 此字段用来设置扩展模块是否是可忽略的。换言之,当扩展模块返回错误或者
-完全不可达时,调度操作不应失败。
+ 此字段用来设置扩展模块是否是可忽略的。
+ 换言之,当扩展模块返回错误或者完全不可达时,调度操作不应失败。
@@ -695,7 +1128,7 @@ fail when the extender returns an error or is not reachable.
ExtenderManagedResource describes the arguments of extended resources
managed by an extender.
-->
-ExtenderManagedResource 描述某扩展模块所管理的扩展资源的参数。
+ExtenderManagedResource 描述某扩展模块所管理的扩展资源的参数。
字段 描述
@@ -708,7 +1141,7 @@ ExtenderManagedResource 描述某扩展模块所管理的扩展资源的参数
- 扩展资源的名称。
+ 扩展资源的名称。
ignoredByScheduler [必需]
@@ -719,7 +1152,7 @@ ExtenderManagedResource 描述某扩展模块所管理的扩展资源的参数
IgnoredByScheduler indicates whether kube-scheduler should ignore this
resource when applying predicates.
-->
- 此字段标明 kube-scheduler 是否应在应用断言时忽略此资源。
+ 此字段标明 kube-scheduler 是否应在应用断言时忽略此资源。
@@ -737,7 +1170,7 @@ resource when applying predicates.
-ExtenderTLSConfig 包含启用与扩展模块间 TLS 传输所需的配置参数。
+ExtenderTLSConfig 包含启用与扩展模块间 TLS 传输所需的配置参数。
字段 描述
@@ -750,7 +1183,7 @@ ExtenderTLSConfig 包含启用与扩展模块间 TLS 传输所需的配置参数
- 访问服务器时不需要检查 TLS 证书。此配置仅针对测试用途。
+ 访问服务器时不需要检查 TLS 证书。此配置仅针对测试用途。
serverName [必需]
@@ -762,9 +1195,10 @@ ExtenderTLSConfig 包含启用与扩展模块间 TLS 传输所需的配置参数
certificates against. If ServerName is empty, the hostname used to contact the
server is used.
-->
- serverName 会被发送到服务器端,作为 SNI 标志;客户端会使用
-此设置来检查服务器证书。如果 serverName 为空,则会使用联系
-服务器时所用的主机名。
+ serverName 会被发送到服务器端,作为 SNI 标志;
+ 客户端会使用此设置来检查服务器证书。
+ 如果 serverName 为空,则会使用联系服务器时所用的主机名。
+
certFile [必需]
@@ -774,7 +1208,7 @@ server is used.
- 服务器端所要求的 TLS 客户端证书认证。
+ 服务器端所要求的 TLS 客户端证书认证。
keyFile [必需]
@@ -784,7 +1218,7 @@ server is used.
- 服务器端所要求的 TLS 客户端秘钥认证。
+ 服务器端所要求的 TLS 客户端秘钥认证。
caFile [必需]
@@ -794,7 +1228,7 @@ server is used.
- 服务器端可信任的根证书。
+ 服务器端可信任的根证书。
certData [必需]
@@ -805,8 +1239,8 @@ server is used.
CertData holds PEM-encoded bytes (typically read from a client certificate file).
CertData takes precedence over CertFile
-->
- certData 包含 PEM 编码的字节流(通常从某客户端证书文件读入)。
-此字段优先级高于 certFile 字段。
+ certData 包含 PEM 编码的字节流(通常从某客户端证书文件读入)。
+ 此字段优先级高于 certFile 字段。
keyData [必需]
@@ -817,8 +1251,8 @@ CertData takes precedence over CertFile
KeyData holds PEM-encoded bytes (typically read from a client certificate key file).
KeyData takes precedence over KeyFile
-->
- keyData 包含 PEM 编码的字节流(通常从某客户端证书秘钥文件读入)。
-此字段优先级高于 keyFile 字段。
+ keyData 包含 PEM 编码的字节流(通常从某客户端证书秘钥文件读入)。
+ 此字段优先级高于 keyFile 字段。
caData [必需]
@@ -829,8 +1263,8 @@ KeyData takes precedence over KeyFile
CAData holds PEM-encoded bytes (typically read from a root certificates bundle).
CAData takes precedence over CAFile
-->
- caData 包含 PEM 编码的字节流(通常从某根证书包文件读入)。
-此字段优先级高于 caFile 字段。
+ caData 包含 PEM 编码的字节流(通常从某根证书包文件读入)。
+ 此字段优先级高于 caFile 字段。
@@ -848,7 +1282,7 @@ CAData takes precedence over CAFile
-KubeSchedulerProfile 是一个调度方案。
+KubeSchedulerProfile 是一个调度方案。
字段 描述
@@ -863,9 +1297,9 @@ KubeSchedulerProfile 是一个调度方案。
if schedulername matches with the pod's "spec.schedulername", then the pod
is scheduled with this profile.
-->
- schedulerName 是与此调度方案相关联的调度器的名称。
-如果 schedulerName 与 Pod 的 spec.schedulerName
-匹配,则该 Pod 会使用此方案来调度。
+ schedulerName 是与此调度方案相关联的调度器的名称。
+ 如果 schedulerName 与 Pod 的 spec.schedulerName
+ 匹配,则该 Pod 会使用此方案来调度。
plugins [必需]
@@ -883,11 +1317,11 @@ If a QueueSort plugin is specified, the same QueueSort Plugin and
PluginConfig must be specified for all profiles.
-->
plugins 设置一组应该被启用或禁止的插件。
-被启用的插件是指除了默认插件之外需要被启用的插件。被禁止的插件
-是指需要被禁用的默认插件。
- 如果针对某个扩展点没有设置被启用或被禁止的插件,则使用该扩展点
-的默认插件(如果有的话)。如果设置了 QueueSort 插件,则同一个 QueueSort
-插件和 pluginConfig 要被设置到所有调度方案之上。
+ 被启用的插件是指除了默认插件之外需要被启用的插件。
+ 被禁止的插件是指需要被禁用的默认插件。
+ 如果针对某个扩展点没有设置被启用或被禁止的插件,
+ 则使用该扩展点的默认插件(如果有的话)。如果设置了 QueueSort 插件,则同一个 QueueSort
+ 插件和 pluginConfig 要被设置到所有调度方案之上。
pluginConfig [必需]
@@ -899,8 +1333,8 @@ PluginConfig must be specified for all profiles.
Omitting config args for a plugin is equivalent to using the default config
for that plugin.
-->
- pluginConfig 是为每个插件提供的一组可选的定制插件参数。
-如果忽略了插件的配置参数,则意味着使用该插件的默认配置。
+ pluginConfig 是为每个插件提供的一组可选的定制插件参数。
+ 如果忽略了插件的配置参数,则意味着使用该插件的默认配置。
@@ -919,7 +1353,7 @@ for that plugin.
-Plugin 指定插件的名称及其权重(如果适用的话)。权重仅用于评分(Score)插件。
+Plugin 指定插件的名称及其权重(如果适用的话)。权重仅用于评分(Score)插件。
字段 描述
@@ -932,7 +1366,7 @@ Plugin 指定插件的名称及其权重(如果适用的话)。权重仅用
- 插件的名称。
+ 插件的名称。
weight [必需]
@@ -942,7 +1376,7 @@ Plugin 指定插件的名称及其权重(如果适用的话)。权重仅用
- 插件的权重;仅适用于评分(Score)插件。
+ 插件的权重;仅适用于评分(Score)插件。
@@ -962,9 +1396,9 @@ PluginConfig specifies arguments that should be passed to a plugin at the time o
A plugin that is invoked at multiple extension points is initialized once. Args can have arbitrary structure.
It is up to the plugin to process these Args.
-->
-PluginConfig 给出初始化阶段要传递给插件的参数。
+PluginConfig 给出初始化阶段要传递给插件的参数。
在多个扩展点被调用的插件仅会被初始化一次。
-参数可以是任意结构。插件负责处理这里所传的参数。
+参数可以是任意结构。插件负责处理这里所传的参数。
字段 描述
@@ -977,17 +1411,17 @@ PluginConfig 给出初始化阶段要传递给插件的参数。
- name 是所配置的插件的名称。
+ name 是所配置的插件的名称。
args [必需]
-k8s.io/apimachinery/pkg/runtime.RawExtension
+k8s.io/apimachinery/pkg/runtime.RawExtension
- args 定义在初始化阶段要传递给插件的参数。参数可以为任意结构。
+ args 定义在初始化阶段要传递给插件的参数。参数可以为任意结构。
@@ -1006,8 +1440,8 @@ PluginConfig 给出初始化阶段要传递给插件的参数。
PluginSet specifies enabled and disabled plugins for an extension point.
If an array is empty, missing, or nil, default plugins at that extension point will be used.
-->
-PluginSet 为某扩展点设置要启用或禁用的插件。
-如果数组为空,或者取值为 null,则使用该扩展点的默认插件集合。
+PluginSet 为某扩展点设置要启用或禁用的插件。
+如果数组为空,或者取值为 null,则使用该扩展点的默认插件集合。
字段 描述
@@ -1023,9 +1457,9 @@ If the default plugin is also configured in the scheduler config file, the weigh
be overridden accordingly.
These are called after default plugins and in the same order specified here.
-->
- enabled 设置在默认插件之外要启用的插件。如果在调度器的配置
-文件中也配置了默认插件,则对应插件的权重会被覆盖。
-此处所设置的插件会在默认插件之后被调用,调用顺序与数组中元素顺序相同。
+ enabled 设置在默认插件之外要启用的插件。
+ 如果在调度器的配置文件中也配置了默认插件,则对应插件的权重会被覆盖。
+ 此处所设置的插件会在默认插件之后被调用,调用顺序与数组中元素顺序相同。
disabled [必需]
@@ -1036,8 +1470,8 @@ These are called after default plugins and in the same order specified here.
Disabled specifies default plugins that should be disabled.
When all default plugins need to be disabled, an array containing only one "∗" should be provided.
-->
- disabled 设置要被禁用的默认插件。
-如果需要禁用所有的默认插件,应该提供仅包含一个元素 "∗" 的数组。
+ disabled 设置要被禁用的默认插件。
+ 如果需要禁用所有的默认插件,应该提供仅包含一个元素 "∗" 的数组。
@@ -1059,12 +1493,10 @@ omitted from the config, then the default set of plugins is used for that extens
Enabled plugins are called in the order specified here, after default plugins. If they need to
be invoked before default plugins, default plugins must be disabled and re-enabled here in desired order.
-->
-Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定扩展点所启用
-的所有插件都在这一列表中。
+Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定扩展点所启用的所有插件都在这一列表中。
如果配置中不包含某个扩展点,则使用该扩展点的默认插件集合。
被启用的插件的调用顺序与这里指定的顺序相同,都在默认插件之后调用。
-如果它们需要在默认插件之前调用,则需要先行禁止默认插件,之后在这里
-按期望的顺序重新启用。
+如果它们需要在默认插件之前调用,则需要先行禁止默认插件,之后在这里按期望的顺序重新启用。
字段 描述
@@ -1077,7 +1509,7 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
- queueSort 是一个在对调度队列中 Pod 排序时要调用的插件列表。
+ queueSort 是一个在对调度队列中 Pod 排序时要调用的插件列表。
preFilter [必需]
@@ -1087,8 +1519,7 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
- preFilter 是一个在调度框架中“PreFilter(预过滤)”扩展点上要
-调用的插件列表。
+ preFilter 是一个在调度框架中“PreFilter(预过滤)”扩展点上要调用的插件列表。
filter [必需]
@@ -1098,7 +1529,7 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
- filter 是一个在需要过滤掉无法运行 Pod 的节点时被调用的插件列表。
+ filter 是一个在需要过滤掉无法运行 Pod 的节点时被调用的插件列表。
postFilter [必需]
@@ -1108,8 +1539,8 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
- postFilter 是一个在过滤阶段结束后会被调用的插件列表;
-这里的插件只有在找不到合适的节点来运行 Pod 时才会被调用。
+ postFilter 是一个在过滤阶段结束后会被调用的插件列表;
+ 这里的插件只有在找不到合适的节点来运行 Pod 时才会被调用。
preScore [必需]
@@ -1119,7 +1550,7 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
- preScore 是一个在打分之前要调用的插件列表。
+ preScore 是一个在打分之前要调用的插件列表。
score [必需]
@@ -1129,7 +1560,7 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
- score 是一个在对已经通过过滤阶段的节点进行排序时调用的插件的列表。
+ score 是一个在对已经通过过滤阶段的节点进行排序时调用的插件的列表。
reserve [必需]
@@ -1140,7 +1571,7 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
Reserve is a list of plugins invoked when reserving/unreserving resources
after a node is assigned to run the pod.
-->
- reserve 是一组在运行 Pod 的节点已被选定后,需要预留或者释放资源时调用的插件的列表。
+ reserve 是一组在运行 Pod 的节点已被选定后,需要预留或者释放资源时调用的插件的列表。
permit [必需]
@@ -1150,8 +1581,8 @@ after a node is assigned to run the pod.
- permit 是一个用来控制 Pod 绑定关系的插件列表。这些插件可以
-禁止或者延迟 Pod 的绑定。
+ permit 是一个用来控制 Pod 绑定关系的插件列表。
+ 这些插件可以禁止或者延迟 Pod 的绑定。
preBind [必需]
@@ -1161,7 +1592,7 @@ after a node is assigned to run the pod.
- preBind 是一个在 Pod 被绑定到某节点之前要被调用的插件的列表。
+ preBind 是一个在 Pod 被绑定到某节点之前要被调用的插件的列表。
bind [必需]
@@ -1172,9 +1603,8 @@ after a node is assigned to run the pod.
Bind is a list of plugins that should be invoked at "Bind" extension point of the scheduling framework.
The scheduler call these plugins in order. Scheduler skips the rest of these plugins as soon as one returns success.
-->
- bind 是一个在调度框架中“Bind(绑定)”扩展点上要调用的
-插件的列表。调度器按顺序调用这些插件。只要其中某个插件返回成功,则调度器
-就略过余下的插件。
+ bind 是一个在调度框架中"Bind(绑定)"扩展点上要调用的插件的列表。
+ 调度器按顺序调用这些插件。只要其中某个插件返回成功,则调度器就略过余下的插件。
postBind [必需]
@@ -1184,7 +1614,7 @@ The scheduler call these plugins in order. Scheduler skips the rest of these plu
- postBind 是一个在 Pod 已经被成功绑定之后要调用的插件的列表。
+ postBind 是一个在 Pod 已经被成功绑定之后要调用的插件的列表。
multiPoint [必需]
@@ -1194,7 +1624,7 @@ The scheduler call these plugins in order. Scheduler skips the rest of these plu
- multiPoint 是一个简化的配置段落,用来为所有合法的扩展点启用插件。
+
multiPoint 是一个简化的配置段落,用来为所有合法的扩展点启用插件。
@@ -1217,8 +1647,8 @@ The scheduler call these plugins in order. Scheduler skips the rest of these plu
PodTopologySpreadConstraintsDefaulting defines how to set default constraints
for the PodTopologySpread plugin.
-->
-PodTopologySpreadConstraintsDefaulting 定义如何为 PodTopologySpread 插件
-设置默认的约束。
+PodTopologySpreadConstraintsDefaulting 定义如何为
+PodTopologySpread 插件设置默认的约束。
## `RequestedToCapacityRatioParam` {#kubescheduler-config-k8s-io-v1beta2-RequestedToCapacityRatioParam}
@@ -1232,7 +1662,7 @@ PodTopologySpreadConstraintsDefaulting 定义如何为 PodTopologySpread 插件
-RequestedToCapacityRatioParam 结构定义 RequestedToCapacityRatio 的参数。
+RequestedToCapacityRatioParam 结构定义 RequestedToCapacityRatio 的参数。
字段 描述
@@ -1245,7 +1675,7 @@ RequestedToCapacityRatioParam 结构定义 RequestedToCapacityRatio 的参数。
- shape 是一个定义评分函数曲线的计分点的列表。
+ shape 是一个定义评分函数曲线的计分点的列表。
@@ -1264,7 +1694,7 @@ RequestedToCapacityRatioParam 结构定义 RequestedToCapacityRatio 的参数。
-ResourceSpec 用来代表某个资源。
+ResourceSpec 用来代表某个资源。
字段 描述
@@ -1277,7 +1707,7 @@ ResourceSpec 用来代表某个资源。
- 资源名称。
+ 资源名称。
weight [必需]
@@ -1287,7 +1717,7 @@ ResourceSpec 用来代表某个资源。
- 资源权重。
+ 资源权重。
@@ -1305,7 +1735,7 @@ ResourceSpec 用来代表某个资源。
-ScoringStrategy 为节点资源插件定义 ScoringStrategyType。
+ScoringStrategy 为节点资源插件定义 ScoringStrategyType。
字段 描述
@@ -1318,7 +1748,7 @@ ScoringStrategy 为节点资源插件定义 ScoringStrategyType。
- type 用来选择要运行的策略。
+ type 用来选择要运行的策略。
resources [必需]
@@ -1332,7 +1762,7 @@ Allowed weights go from 1 to 100.
Weight defaults to 1 if not specified or explicitly set to 0.
-->
resources 设置在评分时要考虑的资源。
- 默认的资源集合包含 "cpu" 和 "memory",且二者权重相同。
+ 默认的资源集合包含 "cpu" 和 "memory",且二者权重相同。
权重的取值范围为 1 到 100。
当权重未设置或者显式设置为 0 时,意味着使用默认值 1。
@@ -1344,7 +1774,7 @@ Weight defaults to 1 if not specified or explicitly set to 0.
- 特定于 RequestedToCapacityRatio 策略的参数。
+ 特定于 RequestedToCapacityRatio 策略的参数。
@@ -1366,7 +1796,7 @@ Weight defaults to 1 if not specified or explicitly set to 0.
-ScoringStrategyType 是 NodeResourcesFit 插件所使用的的评分策略类型。
+ScoringStrategyType 是 NodeResourcesFit 插件所使用的的评分策略类型。
## `UtilizationShapePoint` {#kubescheduler-config-k8s-io-v1beta2-UtilizationShapePoint}
@@ -1381,7 +1811,7 @@ ScoringStrategyType 是 NodeResourcesFit 插件所使用的的评分策略类型
-UtilizationShapePoint 代表的是优先级函数曲线中的一个评分点。
+UtilizationShapePoint 代表的是优先级函数曲线中的一个评分点。
字段 描述
@@ -1394,7 +1824,7 @@ UtilizationShapePoint 代表的是优先级函数曲线中的一个评分点。
- 利用率(x 轴)。合法值为 0 到 100。完全被利用的节点映射到 100。
+ 利用率(x 轴)。合法值为 0 到 100。完全被利用的节点映射到 100。
score [必需]
@@ -1404,331 +1834,8 @@ UtilizationShapePoint 代表的是优先级函数曲线中的一个评分点。
- 分配给指定利用率的分值(y 轴)。合法值为 0 到 10。
+ 分配给指定利用率的分值(y 轴)。合法值为 0 到 10。
-
-## `ClientConnectionConfiguration` {#ClientConnectionConfiguration}
-
-
-**出现在:**
-
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
-
-
-ClientConnectionConfiguration 中包含用来构造一个客户端所需的细节。
-
-
-字段 描述
-
-
-kubeconfig [必需]
-string
-
-
-
- 此字段为指向某 KubeConfig 文件的路径。
-
-
-acceptContentTypes [必需]
-string
-
-
-
- acceptContentTypes 定义的是客户端与服务器建立连接时要发送的
-Accept 头部;这里的设置值会覆盖默认值 "application/json"。
-此字段会影响某特定客户端与服务器的所有连接。
-
-
-contentType [必需]
-string
-
-
-
- contentType 包含的是此客户端向服务器发送数据时使用的
-内容类型(Content Type)。
-
-
-qps [必需]
-float32
-
-
-
- qps 控制的是此连接上每秒可以发送的查询个数。
-
-
-burst [必需]
-int32
-
-
-
- burst 允许在客户端超出其速率限制时可以累积的额外查询个数。
-
-
-
-
-
-## `DebuggingConfiguration` {#DebuggingConfiguration}
-
-
-**出现在:**
-
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
-
-
-DebuggingConfiguration 保存与调试功能相关的配置。
-
-
-字段 描述
-
-
-enableProfiling [必需]
-bool
-
-
-
- 此字段允许通过 Web 接口 host:port/debug/pprof/ 执行性能分析。
-
-
-enableContentionProfiling [必需]
-bool
-
-
-
- 此字段在 enableProfiling 为 true 时允许执行锁竞争分析。
-
-
-
-
-
-## `FormatOptions` {#FormatOptions}
-
-
-
-
-FormatOptions 中包含不同日志格式的配置选项。
-
-
-字段 描述
-
-
-json [必需]
-JSONOptions
-
-
-
- [实验特性] json 字段包含为 "json" 日志格式提供的配置选项。
-
-
-
-
-
-## `JSONOptions` {#JSONOptions}
-
-
-**出现在:**
-
-- [FormatOptions](#FormatOptions)
-
-
-JSONOptions 包含为 "json" 日志格式所设置的配置选项。
-
-
-字段 描述
-
-
-splitStream [必需]
-bool
-
-
-
- [实验特性] 此字段将错误信息重定向到标准错误输出(stderr),将提示消息
-重定向到标准输出(stdout),并且支持缓存。默认配置为将二者都输出到
-标准输出(stdout),且不提供缓存。
-
-
-infoBufferSize [必需]
-k8s.io/apimachinery/pkg/api/resource.QuantityValue
-
-
-
- [实验特性] infoBufferSize 用来在分离数据流场景是设置提示
-信息数据流的大小。默认值为 0,意味着禁止缓存。
-
-
-
-
-
-## `LeaderElectionConfiguration` {#LeaderElectionConfiguration}
-
-
-**出现在:**
-
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
-
-
-LeaderElectionConfiguration 为能够支持领导者选举的组件定义其领导者选举
-客户端的配置。
-
-
-字段 描述
-
-
-leaderElect [必需]
-bool
-
-
-
- leaderElect 启用领导者选举客户端,从而在进入主循环执行之前
-先要获得领导者角色。当运行多副本组件时启用此功能有助于提高可用性。
-
-
-leaseDuration [必需]
-meta/v1.Duration
-
-
-
- leaseDuration 是非领导角色候选者在观察到需要领导席位更新时
-要等待的时间;只有经过所设置时长才可以尝试去获得一个仍处于领导状态但需要
-被刷新的席位。这里的设置值本质上意味着某个领导者在被另一个候选者替换掉
-之前可以停止运行的最长时长。只有当启用了领导者选举时此字段有意义。
-
-
-renewDeadline [必需]
-meta/v1.Duration
-
-
-
- renewDeadline 设置的是当前领导者在停止扮演领导角色之前
-需要刷新领导状态的时间间隔。此值必须小于或等于租约期限的长度。
-只有到启用了领导者选举时此字段才有意义。
-
-
-retryPeriod [必需]
-meta/v1.Duration
-
-
-
- retryPeriod 是客户端在连续两次尝试获得或者刷新领导状态
-之间需要等待的时长。只有当启用了领导者选举时此字段才有意义。
-
-
-resourceLock [必需]
-string
-
-
-
- 此字段给出在领导者选举期间要作为锁来使用的资源对象类型。
-
-
-resourceName [必需]
-string
-
-
-
- 此字段给出在领导者选举期间要作为锁来使用的资源对象名称。
-
-
-resourceNamespace [必需]
-string
-
-
-
- 此字段给出在领导者选举期间要作为锁来使用的资源对象所在名字空间。
-
-
-
-
-
-## `VModuleConfiguration` {#VModuleConfiguration}
-
-
-(`[]k8s.io/component-base/config/v1alpha1.VModuleItem` 的别名)
-
-
-VModuleConfiguration 是一组文件名(通配符)及其对应的日志详尽程度阈值。
-
diff --git a/content/zh/docs/reference/config-api/kube-scheduler-config.v1beta3.md b/content/zh/docs/reference/config-api/kube-scheduler-config.v1beta3.md
index d20017253f..a886979a82 100644
--- a/content/zh/docs/reference/config-api/kube-scheduler-config.v1beta3.md
+++ b/content/zh/docs/reference/config-api/kube-scheduler-config.v1beta3.md
@@ -25,13 +25,444 @@ auto_generated: true
- [PodTopologySpreadArgs](#kubescheduler-config-k8s-io-v1beta3-PodTopologySpreadArgs)
- [VolumeBindingArgs](#kubescheduler-config-k8s-io-v1beta3-VolumeBindingArgs)
+## `ClientConnectionConfiguration` {#ClientConnectionConfiguration}
+
+
+**出现在:**
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
+
+
+ClientConnectionConfiguration 中包含用来构造客户端所需的细节。
+
+
+字段 描述
+
+
+kubeconfig [必需]
+string
+
+
+
+ 此字段为指向 KubeConfig 文件的路径。
+
+
+acceptContentTypes [必需]
+string
+
+
+
+
+ acceptContentTypes 定义的是客户端与服务器建立连接时要发送的 Accept 头部,
+ 这里的设置值会覆盖默认值 "application/json"。此字段会影响某特定客户端与服务器的所有连接。
+
+
+
+contentType [必需]
+string
+
+
+
+
+ contentType 包含的是此客户端向服务器发送数据时使用的内容类型(Content Type)。
+
+
+
+qps [必需]
+float32
+
+
+
+ qps 控制此连接允许的每秒查询次数。
+
+
+burst [必需]
+int32
+
+
+
+ burst 允许在客户端超出其速率限制时可以累积的额外查询个数。
+
+
+
+
+
+## `DebuggingConfiguration` {#DebuggingConfiguration}
+
+
+**出现在:**
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
+
+
+DebuggingConfiguration 保存与调试功能相关的配置。
+
+
+字段 描述
+
+
+enableProfiling [必需]
+bool
+
+
+
+ 此字段允许通过 Web 接口 host:port/debug/pprof/ 执行性能分析。
+
+
+enableContentionProfiling [必需]
+bool
+
+
+
+ 此字段在 enableProfiling 为 true 时允许执行锁竞争分析。
+
+
+
+
+
+## `FormatOptions` {#FormatOptions}
+
+
+
+
+FormatOptions 中包含不同日志格式的配置选项。
+
+
+字段 描述
+
+
+json [必需]
+JSONOptions
+
+
+
+ [实验特性] json 字段包含为 "json" 日志格式提供的配置选项。
+
+
+
+
+
+## `JSONOptions` {#JSONOptions}
+
+
+**出现在:**
+
+- [FormatOptions](#FormatOptions)
+
+
+JSONOptions 包含为 "json" 日志格式所设置的配置选项。
+
+
+字段 描述
+
+
+splitStream [必需]
+bool
+
+
+
+ [实验特性] 此字段将错误信息重定向到标准错误输出(stderr),
+ 将提示消息重定向到标准输出(stdout),并且支持缓存。
+ 默认配置为将二者都输出到标准输出(stdout),且不提供缓存。
+
+
+infoBufferSize [必需]
+k8s.io/apimachinery/pkg/api/resource.QuantityValue
+
+
+
+
+ [实验特性] infoBufferSize 用来在分离数据流场景是设置提示信息数据流的大小。
+ 默认值为 0,意味着禁止缓存。
+
+
+
+
+
+
+## `LeaderElectionConfiguration` {#LeaderElectionConfiguration}
+
+
+**出现在:**
+
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
+- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
+
+
+
+LeaderElectionConfiguration 为能够支持领导者选举的组件定义其领导者选举客户端的配置。
+
+
+
+字段 描述
+
+
+leaderElect [必需]
+bool
+
+
+
+
+ leaderElect 允许领导者选举客户端在进入主循环执行之前先获得领导者角色。
+ 运行多副本组件时启用此功能有助于提高可用性。
+
+
+
+leaseDuration [必需]
+meta/v1.Duration
+
+
+
+
+ leaseDuration 是非领导角色候选者在观察到需要领导席位更新时要等待的时间;
+ 只有经过所设置时长才可以尝试去获得一个仍处于领导状态但需要被刷新的席位。
+ 这里的设置值本质上意味着某个领导者在被另一个候选者替换掉之前可以停止运行的最长时长。
+ 只有当启用了领导者选举时此字段有意义。
+
+
+
+renewDeadline [必需]
+meta/v1.Duration
+
+
+
+
+ renewDeadline 设置的是当前领导者在停止扮演领导角色之前需要刷新领导状态的时间间隔。
+ 此值必须小于或等于租约期限的长度。只有到启用了领导者选举时此字段才有意义。
+
+
+
+retryPeriod [必需]
+meta/v1.Duration
+
+
+
+
+ retryPeriod 是客户端在连续两次尝试获得或者刷新领导状态之间需要等待的时长。
+ 只有当启用了领导者选举时此字段才有意义。
+
+
+
+resourceLock [必需]
+string
+
+
+
+ 此字段给出在领导者选举期间要作为锁来使用的资源对象类型。
+
+
+resourceName [必需]
+string
+
+
+
+ 此字段给出在领导者选举期间要作为锁来使用的资源对象名称。
+
+
+resourceNamespace [必需]
+string
+
+
+
+ 此字段给出在领导者选举期间要作为锁来使用的资源对象所在名字空间。
+
+
+
+
+
+## `LoggingConfiguration` {#LoggingConfiguration}
+
+
+**出现在:**
+
+- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
+
+
+
+LoggingConfiguration 包含日志选项。
+参考 [Logs Options](https://github.com/kubernetes/component-base/blob/master/logs/options.go) 以了解更多信息。
+
+
+
+字段 描述
+
+
+format [必需]
+string
+
+
+
+ format 设置日志消息的结构。默认的格式取值为 text。
+
+
+flushFrequency [必需]
+time.Duration
+
+
+
+ 对日志进行清洗的最大间隔纳秒数(例如,1s = 1000000000)。
+ 如果所选的日志后端在写入日志消息时不提供缓存,则此配置会被忽略。
+
+
+verbosity [必需]
+uint32
+
+
+
+ verbosity 用来确定日志消息记录的详细程度阈值。
+ 默认值为 0,意味着仅记录最重要的消息。
+ 数值越大,额外的消息越多。错误消息总是被记录下来。
+
+
+vmodule [必需]
+VModuleConfiguration
+
+
+
+ vmodule 会在单个文件层面重载 verbosity 阈值的设置。
+ 这一选项仅支持 "text" 日志格式。
+
+
+options [必需]
+FormatOptions
+
+
+
+ [实验特性] options 中包含特定于不同日志格式的配置参数。
+ 只有针对所选格式的选项会被使用,但是合法性检查时会查看所有选项配置。
+
+
+
+
+
+## `VModuleConfiguration` {#VModuleConfiguration}
+
+
+
+(`[]k8s.io/component-base/config/v1alpha1.VModuleItem` 的别名)
+
+**出现在:**
+
+- [LoggingConfiguration](#LoggingConfiguration)
+
+
+VModuleConfiguration 是一组文件名(通配符)及其对应的日志详尽程度阈值。
+
## `DefaultPreemptionArgs` {#kubescheduler-config-k8s-io-v1beta3-DefaultPreemptionArgs}
-DefaultPreemptionArgs 包含用来配置 DefaultPreemption 插件的参数。
+DefaultPreemptionArgs 包含用来配置 DefaultPreemption 插件的参数。
字段 描述
@@ -50,8 +481,8 @@ shortlist when dry running preemption as a percentage of number of nodes.
Must be in the range [0, 100]. Defaults to 10% of the cluster size if
unspecified.
-->
- 此字段为试运行抢占时 shortlist 中候选节点数的下限,数值为节点数的百分比。
-字段值必须介于 [0, 100] 之间。未指定时默认值为整个集群规模的 10%。
+ 此字段为试运行抢占时 shortlist 中候选节点数的下限,数值为节点数的百分比。
+ 字段值必须介于 [0, 100] 之间。未指定时默认值为整个集群规模的 10%。
minCandidateNodesAbsolute [必需]
@@ -67,11 +498,12 @@ We say "likely" because there are other factors such as PDB violations
that play a role in the number of candidates shortlisted. Must be at least
0 nodes. Defaults to 100 nodes if unspecified.
-->
- 此字段设置 shortlist 中候选节点的绝对下限。用于试运行抢占而列举的
-候选节点个数近似于通过下面的公式计算的:
-候选节点数 = max(节点数 * minCandidateNodesPercentage, minCandidateNodesAbsolute)
-之所以说是“近似于”是因为存在一些类似于 PDB 违例这种因素,会影响到进入 shortlist
-中候选节点的个数。取值至少为 0 节点。若未设置默认为 100 节点。
+ 此字段设置 shortlist 中候选节点的绝对下限。
+ 用于试运行抢占而列举的候选节点个数近似于通过下面的公式计算的:
+ 候选节点数 = max(节点数 * minCandidateNodesPercentage, minCandidateNodesAbsolute)
+ 之所以说是"近似于"是因为存在一些类似于 PDB 违例这种因素,
+ 会影响到进入 shortlist中候选节点的个数。
+ 取值至少为 0 节点。若未设置默认为 100 节点。
@@ -82,7 +514,7 @@ that play a role in the number of candidates shortlisted. Must be at least
-InterPodAffinityArgs 包含用来配置 InterPodAffinity 插件的参数。
+InterPodAffinityArgs 包含用来配置 InterPodAffinity 插件的参数。
字段 描述
@@ -99,8 +531,9 @@ InterPodAffinityArgs 包含用来配置 InterPodAffinity 插件的参数。
HardPodAffinityWeight is the scoring weight for existing pods with a
matching hard affinity to the incoming pod.
-->
- 此字段是一个计分权重值。针对新增的 Pod,要对现存的、带有与新 Pod 匹配的
-硬性亲和性设置的 Pods 计算亲和性得分。
+ 此字段是一个计分权重值。针对新增的 Pod,要对现存的、
+ 带有与新 Pod 匹配的硬性亲和性设置的 Pods 计算亲和性得分。
+
@@ -111,7 +544,7 @@ matching hard affinity to the incoming pod.
-KubeSchedulerConfiguration 用来配置调度器。
+KubeSchedulerConfiguration 用来配置调度器。
字段 描述
@@ -127,8 +560,9 @@ KubeSchedulerConfiguration 用来配置调度器。
- 此字段设置为调度 Pod 而执行算法时的并发度。此值必须大于 0。
-默认值为 16。
+
+ 此字段设置为调度 Pod 而执行算法时的并发度。此值必须大于 0。默认值为 16。
+
leaderElection [必需]
@@ -138,7 +572,7 @@ KubeSchedulerConfiguration 用来配置调度器。
- 此字段用来定义领导者选举客户端的配置。
+ 此字段用来定义领导者选举客户端的配置。
clientConnection [必需]
@@ -149,18 +583,22 @@ KubeSchedulerConfiguration 用来配置调度器。
ClientConnection specifies the kubeconfig file and client connection
settings for the proxy server to use when communicating with the apiserver.
-->
- 此字段为与 API 服务器通信时使用的代理服务器设置 kubeconfig 文件和客户端
-连接配置。
+ 此字段为与 API 服务器通信时使用的代理服务器设置 kubeconfig 文件和客户端连接配置。
DebuggingConfiguration [必需]
DebuggingConfiguration
+
(DebuggingConfiguration 的成员被内嵌到此类型中)
- 此字段设置与调试相关功能特性的配置。
+ 此字段设置与调试相关功能特性的配置。
+ TODO:我们可能想把它做成一个子结构,像调试 component-base/config/v1alpha1.DebuggingConfiguration 一样。
percentageOfNodesToScore [必需]
@@ -177,12 +615,14 @@ then scheduler stops finding further feasible nodes once it finds 150 feasible o
When the value is 0, default percentage (5%--50% based on the size of the cluster) of the
nodes will be scored.
-->
+
此字段为所有节点的百分比,一旦调度器找到所设置比例的、能够运行 Pod 的节点,
-则停止在集群中继续寻找更合适的节点。这一配置有助于提高调度器的性能。调度器
-总会尝试寻找至少 "minFeasibleNodesToFind" 个可行节点,无论此字段的取值如何。
-例如:当集群规模为 500 个节点,而此字段的取值为 30,则调度器在找到 150 个合适
-的节点后会停止继续寻找合适的节点。当此值为 0 时,调度器会使用默认节点数百分比(基于集群规模
-确定的值,在 5% 到 50% 之间)来执行打分操作。
+ 则停止在集群中继续寻找更合适的节点。这一配置有助于提高调度器的性能。
+ 调度器总会尝试寻找至少 "minFeasibleNodesToFind" 个可行节点,无论此字段的取值如何。
+ 例如:当集群规模为 500 个节点,而此字段的取值为 30,
+ 则调度器在找到 150 个合适的节点后会停止继续寻找合适的节点。当此值为 0 时,
+ 调度器会使用默认节点数百分比(基于集群规模确定的值,在 5% 到 50% 之间)来执行打分操作。
+
podInitialBackoffSeconds [必需]
@@ -194,8 +634,8 @@ nodes will be scored.
If specified, it must be greater than 0. If this value is null, the default value (1s)
will be used.
-->
- 此字段设置不可调度 Pod 的初始回退秒数。如果设置了此字段,其取值必须大于零。
-若此值为 null,则使用默认值(1s)。
+ 此字段设置不可调度 Pod 的初始回退秒数。如果设置了此字段,其取值必须大于零。
+ 若此值为 null,则使用默认值(1s)。
podMaxBackoffSeconds [必需]
@@ -207,8 +647,9 @@ will be used.
If specified, it must be greater than podInitialBackoffSeconds. If this value is null,
the default value (10s) will be used.
-->
- 此字段设置不可调度的 Pod 的最大回退秒数。如果设置了此字段,则其值必须大于
-podInitialBackoffSeconds 字段值。如果此值设置为 null,则使用默认值(10s)。
+ 此字段设置不可调度的 Pod 的最大回退秒数。
+ 如果设置了此字段,则其值必须大于 podInitialBackoffSeconds 字段值。
+ 如果此值设置为 null,则使用默认值(10s)。
profiles [必需]
@@ -221,9 +662,10 @@ choose to be scheduled under a particular profile by setting its associated
scheduler name. Pods that don't specify any scheduler name are scheduled
with the "default-scheduler" profile, if present here.
-->
- 此字段为 kube-scheduler 所支持的方案(profiles)。Pod 可以通过设置其对应
-的调度器名称来选择使用特定的方案。未指定调度器名称的 Pod 会使用
-“default-scheduler”方案来调度,如果存在的话。
+ 此字段为 kube-scheduler 所支持的方案(profiles)。
+ Pod 可以通过设置其对应的调度器名称来选择使用特定的方案。
+ 未指定调度器名称的 Pod 会使用"default-scheduler"方案来调度,如果存在的话。
+
extenders [必需]
@@ -234,8 +676,9 @@ with the "default-scheduler" profile, if present here.
Extenders are the list of scheduler extenders, each holding the values of how to communicate
with the extender. These extenders are shared by all scheduler profiles.
-->
- 此字段为调度器扩展模块(Extender)的列表,每个元素包含如何与某扩展模块
-通信的配置信息。所有调度器模仿会共享此扩展模块列表。
+ 此字段为调度器扩展模块(Extender)的列表,
+ 每个元素包含如何与某扩展模块通信的配置信息。
+ 所有调度器模仿会共享此扩展模块列表。
@@ -246,7 +689,7 @@ with the extender. These extenders are shared by all scheduler profiles.
-NodeAffinityArgs 中包含配置 NodeAffinity 插件的参数。
+NodeAffinityArgs 中包含配置 NodeAffinity 插件的参数。
字段 描述
@@ -267,11 +710,12 @@ match).
When AddedAffinity is used, some Pods with affinity requirements that match
a specific Node (such as Daemonset Pods) might remain unschedulable.
-->
- addedAffinity 会作为附加的亲和性属性添加到所有 Pod 的
-规约中指定的 NodeAffinity 中。换言之,节点需要同时满足 addedAffinity
-和 .spec.nodeAffinity。默认情况下,addedAffinity 为空(与所有节点匹配)。
-使用了 addedAffinity 时,某些带有已经能够与某特定节点匹配的亲和性需求
-的 Pod (例如 DaemonSet Pod)可能会继续呈现不可调度状态。
+
+ addedAffinity 会作为附加的亲和性属性添加到所有 Pod 的规约中指定的 NodeAffinity 中。
+ 换言之,节点需要同时满足 addedAffinity 和 .spec.nodeAffinity。
+ 默认情况下,addedAffinity 为空(与所有节点匹配)。使用了 addedAffinity 时,
+ 某些带有已经能够与某特定节点匹配的亲和性需求的 Pod (例如 DaemonSet Pod)可能会继续呈现不可调度状态。
+
@@ -282,7 +726,7 @@ a specific Node (such as Daemonset Pods) might remain unschedulable.
-NodeResourcesBalancedAllocationArgs 包含用来配置 NodeResourcesBalancedAllocation 插件的参数。
+NodeResourcesBalancedAllocationArgs 包含用来配置 NodeResourcesBalancedAllocation 插件的参数。
字段 描述
@@ -298,7 +742,7 @@ NodeResourcesBalancedAllocationArgs 包含用来配置 NodeResourcesBalancedAllo
- 要管理的资源;如果未设置,则默认值为 "cpu" 和 "memory"。
+ 要管理的资源;如果未设置,则默认值为 "cpu" 和 "memory"。
@@ -309,7 +753,7 @@ NodeResourcesBalancedAllocationArgs 包含用来配置 NodeResourcesBalancedAllo
-NodeResourcesFitArgs 包含用来配置 NodeResourcesFit 插件的参数。
+NodeResourcesFitArgs 包含用来配置 NodeResourcesFit 插件的参数。
字段 描述
@@ -326,7 +770,7 @@ NodeResourcesFitArgs 包含用来配置 NodeResourcesFit 插件的参数。
IgnoredResources is the list of resources that NodeResources fit filter
should ignore. This doesn't apply to scoring.
-->
- 此字段为 NodeResources 匹配过滤器要忽略的资源列表。此列表不影响节点打分。
+ 此字段为 NodeResources 匹配过滤器要忽略的资源列表。此列表不影响节点打分。
ignoredResourceGroups [必需]
@@ -339,10 +783,11 @@ e.g. if group is ["example.com"], it will ignore all resource names that begin
with "example.com", such as "example.com/aaa" and "example.com/bbb".
A resource group name can't contain '/'. This doesn't apply to scoring.
-->
- 此字段定义 NodeResources 匹配过滤器要忽略的资源组列表。
-例如,如果配置值为 ["example.com"],则以 "example.com" 开头的资源名(如
-"example.com/aaa" 和 "example.com/bbb")都会被忽略。
-资源组名称中不可以包含 '/'。此设置不影响节点的打分。
+ 此字段定义 NodeResources 匹配过滤器要忽略的资源组列表。
+ 例如,如果配置值为 ["example.com"],
+ 则以 "example.com" 开头的资源名
+ (如"example.com/aaa" 和 "example.com/bbb")都会被忽略。
+ 资源组名称中不可以包含 '/'。此设置不影响节点的打分。
scoringStrategy [必需]
@@ -353,8 +798,8 @@ A resource group name can't contain '/'. This doesn't apply to scoring.
ScoringStrategy selects the node resource scoring strategy.
The default strategy is LeastAllocated with an equal "cpu" and "memory" weight.
-->
- 此字段用来选择节点资源打分策略。默认的策略为 LeastAllocated,且 "cpu" 和
-"memory" 的权重相同。
+ 此字段用来选择节点资源打分策略。默认的策略为 LeastAllocated,
+ 且 "cpu" 和 "memory" 的权重相同。
@@ -365,7 +810,7 @@ The default strategy is LeastAllocated with an equal "cpu" and "memory" weight.
-PodTopologySpreadArgs 包含用来配置 PodTopologySpread 插件的参数。
+PodTopologySpreadArgs 包含用来配置 PodTopologySpread 插件的参数。
字段 描述
@@ -386,11 +831,10 @@ deduced from the Pod's membership to Services, ReplicationControllers,
ReplicaSets or StatefulSets.
When not empty, .defaultingType must be "List".
-->
- 此字段针对未定义 .spec.topologySpreadConstraints 的 Pod,
-为其提供拓扑分布约束。.defaultConstraints[∗].labelSelectors
-必须为空,因为这一信息要从 Pod 所属的 Service、ReplicationController、
-ReplicaSet 或 StatefulSet 来推导。
-此字段不为空时,.defaultingType 必须为 "List"。
+ 此字段针对未定义 .spec.topologySpreadConstraints 的 Pod,
+ 为其提供拓扑分布约束。.defaultConstraints[∗].labelSelectors必须为空,
+ 因为这一信息要从 Pod 所属的 Service、ReplicationController、ReplicaSet 或 StatefulSet 来推导。
+ 此字段不为空时,.defaultingType 必须为 "List"。
defaultingType
@@ -403,16 +847,15 @@ of "System" or "List".
- "System": Use kubernetes defined constraints that spread Pods among
Nodes and Zones.
- "List": Use constraints defined in .defaultConstraints.
-Defaults to "List" if feature gate DefaultPodTopologySpread is disabled
-and to "System" if enabled.
+Defaults to "System".
-->
defaultingType 决定如何推导 .defaultConstraints。
-可选值为 "System" 或 "List"。
+ 可选值为 "System" 或 "List"。
- "System":使用 Kubernetes 定义的约束,将 Pod 分布到不同节点和可用区;
- "List":使用 .defaultConstraints 中定义的约束。
+ "System":使用 Kubernetes 定义的约束,将 Pod 分布到不同节点和可用区;
+ "List":使用 .defaultConstraints 中定义的约束。
- 当特性门控 DefaultPodTopologySpread 被禁用时,默认值为 "list";反之,默认值为 "System"。
+ 默认值为 "System"。
@@ -423,7 +866,7 @@ and to "System" if enabled.
-VolumeBindingArgs 包含用来配置 VolumeBinding 插件的参数。
+VolumeBindingArgs 包含用来配置 VolumeBinding 插件的参数。
字段 描述
@@ -441,8 +884,8 @@ VolumeBindingArgs 包含用来配置 VolumeBinding 插件的参数。
Value must be non-negative integer. The value zero indicates no waiting.
If this value is nil, the default value (600) will be used.
-->
- 此字段设置卷绑定操作的超时秒数。字段值必须是非负数。
-取值为 0 意味着不等待。如果此值为 null,则使用默认值(600)。
+ 此字段设置卷绑定操作的超时秒数。字段值必须是非负数。
+ 取值为 0 意味着不等待。如果此值为 null,则使用默认值(600)。
shape
@@ -462,17 +905,17 @@ The default shape points are:
2) 10 for 100 utilization
All points must be sorted in increasing order by utilization.
-->
- shape 用来设置打分函数曲线所使用的计分点,这些计分点
-用来基于静态制备的 PV 卷的利用率为节点打分。
-卷的利用率是计算得来的,将 Pod 所请求的总的存储空间大小除以每个节点
-上可用的总的卷容量。每个计分点包含利用率(范围从 0 到 100)和其对应
-的得分(范围从 0 到 10)。你可以通过为不同的使用率值设置不同的得分来
-反转优先级:
+ shape 用来设置打分函数曲线所使用的计分点,
+ 这些计分点用来基于静态制备的 PV 卷的利用率为节点打分。
+ 卷的利用率是计算得来的,
+ 将 Pod 所请求的总的存储空间大小除以每个节点上可用的总的卷容量。
+ 每个计分点包含利用率(范围从 0 到 100)和其对应的得分(范围从 0 到 10)。
+ 你可以通过为不同的使用率值设置不同的得分来反转优先级:
默认的曲线计分点为:
-
+
利用率为 0 时得分为 0;
利用率为 100 时得分为 10。
-
+
所有计分点必须按利用率值的升序来排序。
@@ -492,8 +935,8 @@ All points must be sorted in increasing order by utilization.
Extender holds the parameters used to communicate with the extender. If a verb is unspecified/empty,
it is assumed that the extender chose not to provide that extension.
-->
-Extender 包含与扩展模块(Extender)通信所用的参数。
-如果未指定 verb 或者 verb 为空,则假定对应的扩展模块选择不提供该扩展功能。
+Extender 包含与扩展模块(Extender)通信所用的参数。
+如果未指定 verb 或者 verb 为空,则假定对应的扩展模块选择不提供该扩展功能。
字段 描述
@@ -506,7 +949,7 @@ Extender 包含与扩展模块(Extender)通信所用的参数。
- 用来访问扩展模块的 URL 前缀。
+ 用来访问扩展模块的 URL 前缀。
filterVerb [必需]
@@ -516,8 +959,8 @@ Extender 包含与扩展模块(Extender)通信所用的参数。
- filter 调用所使用的动词,如果不支持过滤操作则为空。
-此动词会在向扩展模块发送 filter 调用时追加到 urlPrefix 后面。
+ filter 调用所使用的动词,如果不支持过滤操作则为空。
+ 此动词会在向扩展模块发送 filter 调用时追加到 urlPrefix 后面。
preemptVerb [必需]
@@ -527,8 +970,8 @@ Extender 包含与扩展模块(Extender)通信所用的参数。
- preempt 调用所使用的动词,如果不支持过滤操作则为空。
-此动词会在向扩展模块发送 preempt 调用时追加到 urlPrefix 后面。
+ preempt 调用所使用的动词,如果不支持过滤操作则为空。
+ 此动词会在向扩展模块发送 preempt 调用时追加到 urlPrefix 后面。
prioritizeVerb [必需]
@@ -538,8 +981,8 @@ Extender 包含与扩展模块(Extender)通信所用的参数。
- prioritize 调用所使用的动词,如果不支持过滤操作则为空。
-此动词会在向扩展模块发送 prioritize 调用时追加到 urlPrefix 后面。
+ prioritize 调用所使用的动词,如果不支持过滤操作则为空。
+ 此动词会在向扩展模块发送 prioritize 调用时追加到 urlPrefix 后面。
weight [必需]
@@ -550,8 +993,8 @@ Extender 包含与扩展模块(Extender)通信所用的参数。
The numeric multiplier for the node scores that the prioritize call generates.
The weight should be a positive integer
-->
- 针对 prioritize 调用所生成的节点分数要使用的数值系数。
-weight 值必须是正整数。
+ 针对 prioritize 调用所生成的节点分数要使用的数值系数。
+ weight 值必须是正整数。
bindVerb [必需]
@@ -563,10 +1006,10 @@ weight 值必须是正整数。
If this method is implemented by the extender, it is the extender's responsibility to bind the pod to apiserver. Only one extender
can implement this function.
-->
- bind 调用所使用的动词,如果不支持过滤操作则为空。
-此动词会在向扩展模块发送 bind 调用时追加到 urlPrefix 后面。
-如果扩展模块实现了此方法,扩展模块要负责将 Pod 绑定到 API 服务器。
-只有一个扩展模块可以实现此函数。
+ bind 调用所使用的动词,如果不支持过滤操作则为空。
+ 此动词会在向扩展模块发送 bind 调用时追加到 urlPrefix 后面。
+ 如果扩展模块实现了此方法,扩展模块要负责将 Pod 绑定到 API 服务器。
+ 只有一个扩展模块可以实现此函数。
enableHTTPS [必需]
@@ -576,7 +1019,7 @@ can implement this function.
- 此字段设置是否需要使用 HTTPS 来与扩展模块通信。
+ 此字段设置是否需要使用 HTTPS 来与扩展模块通信。
tlsConfig [必需]
@@ -586,20 +1029,20 @@ can implement this function.
- 此字段设置传输层安全性(TLS)配置。
+ 此字段设置传输层安全性(TLS)配置。
httpTimeout [必需]
-meta/v1.Duration
+meta/v1.Duration
- 此字段给出扩展模块功能调用的超时值。filter 操作超时会导致 Pod 无法被调度。
-prioritize 操作超时会被忽略,Kubernetes 或者其他扩展模块所给出的优先级值
-会被用来选择节点。
+ 此字段给出扩展模块功能调用的超时值。filter 操作超时会导致 Pod 无法被调度。
+ prioritize 操作超时会被忽略,
+ Kubernetes 或者其他扩展模块所给出的优先级值会被用来选择节点。
nodeCacheCapable [必需]
@@ -611,8 +1054,8 @@ prioritize 操作超时会被忽略,Kubernetes 或者其他扩展模块所给
so the scheduler should only send minimal information about the eligible nodes
assuming that the extender already cached full details of all nodes in the cluster
-->
- 此字段指示扩展模块可以缓存节点信息,从而调度器应该发送关于可选节点的最少信息,
-假定扩展模块已经缓存了集群中所有节点的全部详细信息。
+ 此字段指示扩展模块可以缓存节点信息,从而调度器应该发送关于可选节点的最少信息,
+ 假定扩展模块已经缓存了集群中所有节点的全部详细信息。
managedResources
@@ -632,9 +1075,9 @@ this extender.
managedResources 是一个由此扩展模块所管理的扩展资源的列表。
如果某 Pod 请求了此列表中的至少一个扩展资源,则 Pod 会在 filter、
-prioritize 和 bind (如果扩展模块可以执行绑定操作)阶段被发送到该扩展模块。
+ prioritize 和 bind (如果扩展模块可以执行绑定操作)阶段被发送到该扩展模块。
如果某资源上设置了 ignoredByScheduler 为 true,则 kube-scheduler
-会在断言阶段略过对该资源的检查。
+ 会在断言阶段略过对该资源的检查。
@@ -646,8 +1089,8 @@ prioritize 和 bind (如果扩展模块可以执行绑定操作)阶段被发
Ignorable specifies if the extender is ignorable, i.e. scheduling should not
fail when the extender returns an error or is not reachable.
-->
- 此字段用来设置扩展模块是否是可忽略的。换言之,当扩展模块返回错误或者
-完全不可达时,调度操作不应失败。
+ 此字段用来设置扩展模块是否是可忽略的。
+ 换言之,当扩展模块返回错误或者完全不可达时,调度操作不应失败。
@@ -666,7 +1109,7 @@ fail when the extender returns an error or is not reachable.
ExtenderManagedResource describes the arguments of extended resources
managed by an extender.
-->
-ExtenderManagedResource 描述某扩展模块所管理的扩展资源的参数。
+ExtenderManagedResource 描述某扩展模块所管理的扩展资源的参数。
字段 描述
@@ -679,7 +1122,7 @@ ExtenderManagedResource 描述某扩展模块所管理的扩展资源的参数
- 扩展资源的名称。
+ 扩展资源的名称。
ignoredByScheduler [必需]
@@ -690,7 +1133,7 @@ ExtenderManagedResource 描述某扩展模块所管理的扩展资源的参数
IgnoredByScheduler indicates whether kube-scheduler should ignore this
resource when applying predicates.
-->
- 此字段标明 kube-scheduler 是否应在应用断言时忽略此资源。
+ 此字段标明 kube-scheduler 是否应在应用断言时忽略此资源。
@@ -708,7 +1151,7 @@ resource when applying predicates.
-ExtenderTLSConfig 包含启用与扩展模块间 TLS 传输所需的配置参数。
+ExtenderTLSConfig 包含启用与扩展模块间 TLS 传输所需的配置参数。
字段 描述
@@ -721,7 +1164,7 @@ ExtenderTLSConfig 包含启用与扩展模块间 TLS 传输所需的配置参数
- 访问服务器时不需要检查 TLS 证书。此配置仅针对测试用途。
+ 访问服务器时不需要检查 TLS 证书。此配置仅针对测试用途。
serverName [必需]
@@ -733,9 +1176,10 @@ ExtenderTLSConfig 包含启用与扩展模块间 TLS 传输所需的配置参数
certificates against. If ServerName is empty, the hostname used to contact the
server is used.
-->
- serverName 会被发送到服务器端,作为 SNI 标志;客户端会使用
-此设置来检查服务器证书。如果 serverName 为空,则会使用联系
-服务器时所用的主机名。
+ serverName 会被发送到服务器端,作为 SNI 标志;
+ 客户端会使用此设置来检查服务器证书。
+ 如果 serverName 为空,则会使用联系服务器时所用的主机名。
+
certFile [必需]
@@ -745,7 +1189,7 @@ server is used.
- 服务器端所要求的 TLS 客户端证书认证。
+ 服务器端所要求的 TLS 客户端证书认证。
keyFile [必需]
@@ -755,7 +1199,7 @@ server is used.
- 服务器端所要求的 TLS 客户端秘钥认证。
+ 服务器端所要求的 TLS 客户端秘钥认证。
caFile [必需]
@@ -765,7 +1209,7 @@ server is used.
- 服务器端被信任的根证书。
+ 服务器端被信任的根证书。
certData [必需]
@@ -776,8 +1220,8 @@ server is used.
CertData holds PEM-encoded bytes (typically read from a client certificate file).
CertData takes precedence over CertFile
-->
- certData 包含 PEM 编码的字节流(通常从某客户端证书文件读入)。
-此字段优先级高于 certFile 字段。
+ certData 包含 PEM 编码的字节流(通常从某客户端证书文件读入)。
+ 此字段优先级高于 certFile 字段。
keyData [必需]
@@ -788,8 +1232,8 @@ CertData takes precedence over CertFile
KeyData holds PEM-encoded bytes (typically read from a client certificate key file).
KeyData takes precedence over KeyFile
-->
- keyData 包含 PEM 编码的字节流(通常从某客户端证书秘钥文件读入)。
-此字段优先级高于 keyFile 字段。
+ keyData 包含 PEM 编码的字节流(通常从某客户端证书秘钥文件读入)。
+ 此字段优先级高于 keyFile 字段。
caData [必需]
@@ -800,8 +1244,8 @@ KeyData takes precedence over KeyFile
CAData holds PEM-encoded bytes (typically read from a root certificates bundle).
CAData takes precedence over CAFile
-->
- caData 包含 PEM 编码的字节流(通常从某根证书包文件读入)。
-此字段优先级高于 caFile 字段。
+ caData 包含 PEM 编码的字节流(通常从某根证书包文件读入)。
+ 此字段优先级高于 caFile 字段。
@@ -819,7 +1263,7 @@ CAData takes precedence over CAFile
-KubeSchedulerProfile 是一个调度方案。
+KubeSchedulerProfile 是一个调度方案。
字段 描述
@@ -834,9 +1278,9 @@ KubeSchedulerProfile 是一个调度方案。
if schedulername matches with the pod's "spec.schedulername", then the pod
is scheduled with this profile.
-->
- schedulerName 是与此调度方案相关联的调度器的名称。
-如果 schedulerName 与 Pod 的 spec.schedulerName
-匹配,则该 Pod 会使用此方案来调度。
+ schedulerName 是与此调度方案相关联的调度器的名称。
+ 如果 schedulerName 与 Pod 的 spec.schedulerName匹配,
+ 则该 Pod 会使用此方案来调度。
plugins [必需]
@@ -854,11 +1298,12 @@ If a QueueSort plugin is specified, the same QueueSort Plugin and
PluginConfig must be specified for all profiles.
-->
plugins 设置一组应该被启用或禁止的插件。
-被启用的插件是指除了默认插件之外需要被启用的插件。被禁止的插件
-是指需要被禁用的默认插件。
- 如果针对某个扩展点没有设置被启用或被禁止的插件,则使用该扩展点
-的默认插件(如果有的话)。如果设置了 QueueSort 插件,则同一个 QueueSort
-插件和 pluginConfig 要被设置到所有调度方案之上。
+ 被启用的插件是指除了默认插件之外需要被启用的插件。
+ 被禁止的插件是指需要被禁用的默认插件。
+ 如果针对某个扩展点没有设置被启用或被禁止的插件,
+ 则使用该扩展点的默认插件(如果有的话)。如果设置了 QueueSort 插件,
+ 则同一个 QueueSort 插件和 pluginConfig 要被设置到所有调度方案之上。
+
pluginConfig [必需]
@@ -870,8 +1315,8 @@ PluginConfig must be specified for all profiles.
Omitting config args for a plugin is equivalent to using the default config
for that plugin.
-->
- pluginConfig 是为每个插件提供的一组可选的定制插件参数。
-如果忽略了插件的配置参数,则意味着使用该插件的默认配置。
+ pluginConfig 是为每个插件提供的一组可选的定制插件参数。
+ 如果忽略了插件的配置参数,则意味着使用该插件的默认配置。
@@ -889,7 +1334,7 @@ for that plugin.
-Plugin 指定插件的名称及其权重(如果适用的话)。权重仅用于评分(Score)插件。
+Plugin 指定插件的名称及其权重(如果适用的话)。权重仅用于评分(Score)插件。
字段 描述
@@ -902,7 +1347,7 @@ Plugin 指定插件的名称及其权重(如果适用的话)。权重仅用
- 插件的名称。
+ 插件的名称。
weight [必需]
@@ -912,7 +1357,7 @@ Plugin 指定插件的名称及其权重(如果适用的话)。权重仅用
- 插件的权重;仅适用于评分(Score)插件。
+ 插件的权重;仅适用于评分(Score)插件。
@@ -932,9 +1377,9 @@ PluginConfig specifies arguments that should be passed to a plugin at the time o
A plugin that is invoked at multiple extension points is initialized once. Args can have arbitrary structure.
It is up to the plugin to process these Args.
-->
-PluginConfig 给出初始化阶段要传递给插件的参数。
+PluginConfig 给出初始化阶段要传递给插件的参数。
在多个扩展点被调用的插件仅会被初始化一次。
-参数可以是任意结构。插件负责处理这里所传的参数。
+参数可以是任意结构。插件负责处理这里所传的参数。
字段 描述
@@ -947,17 +1392,17 @@ PluginConfig 给出初始化阶段要传递给插件的参数。
- name 是所配置的插件的名称。
+ name 是所配置的插件的名称。
args [必需]
-k8s.io/apimachinery/pkg/runtime.RawExtension
+k8s.io/apimachinery/pkg/runtime.RawExtension
- args 定义在初始化阶段要传递给插件的参数。参数可以为任意结构。
+ args 定义在初始化阶段要传递给插件的参数。参数可以为任意结构。
@@ -976,8 +1421,8 @@ PluginConfig 给出初始化阶段要传递给插件的参数。
PluginSet specifies enabled and disabled plugins for an extension point.
If an array is empty, missing, or nil, default plugins at that extension point will be used.
-->
-PluginSet 为某扩展点设置要启用或禁用的插件。
-如果数组为空,或者取值为 null,则使用该扩展点的默认插件集合。
+PluginSet 为某扩展点设置要启用或禁用的插件。
+如果数组为空,或者取值为 null,则使用该扩展点的默认插件集合。
字段 描述
@@ -993,9 +1438,9 @@ If the default plugin is also configured in the scheduler config file, the weigh
be overridden accordingly.
These are called after default plugins and in the same order specified here.
-->
- enabled 设置在默认插件之外要启用的插件。如果在调度器的配置
-文件中也配置了默认插件,则对应插件的权重会被覆盖。
-此处所设置的插件会在默认插件之后被调用,调用顺序与数组中元素顺序相同。
+ enabled 设置在默认插件之外要启用的插件。
+ 如果在调度器的配置文件中也配置了默认插件,则对应插件的权重会被覆盖。
+ 此处所设置的插件会在默认插件之后被调用,调用顺序与数组中元素顺序相同。
disabled [必需]
@@ -1006,8 +1451,8 @@ These are called after default plugins and in the same order specified here.
Disabled specifies default plugins that should be disabled.
When all default plugins need to be disabled, an array containing only one "∗" should be provided.
-->
- disabled 设置要被禁用的默认插件。
-如果需要禁用所有的默认插件,应该提供仅包含一个元素 "∗" 的数组。
+ disabled 设置要被禁用的默认插件。
+ 如果需要禁用所有的默认插件,应该提供仅包含一个元素 "∗" 的数组。
@@ -1029,12 +1474,12 @@ omitted from the config, then the default set of plugins is used for that extens
Enabled plugins are called in the order specified here, after default plugins. If they need to
be invoked before default plugins, default plugins must be disabled and re-enabled here in desired order.
-->
-Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定扩展点所启用
-的所有插件都在这一列表中。
+Plugins 结构中包含多个扩展点。当此结构被设置时,
+针对特定扩展点所启用的所有插件都在这一列表中。
如果配置中不包含某个扩展点,则使用该扩展点的默认插件集合。
被启用的插件的调用顺序与这里指定的顺序相同,都在默认插件之后调用。
-如果它们需要在默认插件之前调用,则需要先行禁止默认插件,之后在这里
-按期望的顺序重新启用。
+如果它们需要在默认插件之前调用,则需要先行禁止默认插件,
+之后在这里按期望的顺序重新启用。
字段 描述
@@ -1047,7 +1492,7 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
- queueSort 是一个在对调度队列中 Pod 排序时要调用的插件列表。
+ queueSort 是一个在对调度队列中 Pod 排序时要调用的插件列表。
preFilter [必需]
@@ -1057,8 +1502,8 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
- preFilter 是一个在调度框架中“PreFilter(预过滤)”扩展点上要
-调用的插件列表。
+ preFilter 是一个在调度框架中"PreFilter(预过滤)"扩展点上要
+ 调用的插件列表。
filter [必需]
@@ -1068,7 +1513,7 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
- filter 是一个在需要过滤掉无法运行 Pod 的节点时被调用的插件列表。
+ filter 是一个在需要过滤掉无法运行 Pod 的节点时被调用的插件列表。
postFilter [必需]
@@ -1078,8 +1523,8 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
- postFilter 是一个在过滤阶段结束后会被调用的插件列表;
-这里的插件只有在找不到合适的节点来运行 Pod 时才会被调用。
+ postFilter 是一个在过滤阶段结束后会被调用的插件列表;
+ 这里的插件只有在找不到合适的节点来运行 Pod 时才会被调用。
preScore [必需]
@@ -1089,7 +1534,7 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
- preScore 是一个在打分之前要调用的插件列表。
+ preScore 是一个在打分之前要调用的插件列表。
score [必需]
@@ -1099,7 +1544,7 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
- score 是一个在对已经通过过滤阶段的节点进行排序时调用的插件的列表。
+ score 是一个在对已经通过过滤阶段的节点进行排序时调用的插件的列表。
reserve [必需]
@@ -1110,7 +1555,7 @@ Plugins 结构中包含多个扩展点。当此结构被设置时,针对特定
Reserve is a list of plugins invoked when reserving/unreserving resources
after a node is assigned to run the pod.
-->
- reserve 是一组在运行 Pod 的节点已被选定后,需要预留或者释放资源时调用的插件的列表。
+ reserve 是一组在运行 Pod 的节点已被选定后,需要预留或者释放资源时调用的插件的列表。
permit [必需]
@@ -1120,8 +1565,8 @@ after a node is assigned to run the pod.
- permit 是一个用来控制 Pod 绑定关系的插件列表。这些插件可以
-禁止或者延迟 Pod 的绑定。
+ permit 是一个用来控制 Pod 绑定关系的插件列表。
+ 这些插件可以禁止或者延迟 Pod 的绑定。
preBind [必需]
@@ -1131,7 +1576,7 @@ after a node is assigned to run the pod.
- preBind 是一个在 Pod 被绑定到某节点之前要被调用的插件的列表。
+ preBind 是一个在 Pod 被绑定到某节点之前要被调用的插件的列表。
bind [必需]
@@ -1142,9 +1587,10 @@ after a node is assigned to run the pod.
Bind is a list of plugins that should be invoked at "Bind" extension point of the scheduling framework.
The scheduler call these plugins in order. Scheduler skips the rest of these plugins as soon as one returns success.
-->
- bind 是一个在调度框架中“Bind(绑定)”扩展点上要调用的
-插件的列表。调度器按顺序调用这些插件。只要其中某个插件返回成功,则调度器
-就略过余下的插件。
+
+ bind 是一个在调度框架中"Bind(绑定)"扩展点上要调用的插件的列表。
+ 调度器按顺序调用这些插件。只要其中某个插件返回成功,则调度器就略过余下的插件。
+
postBind [必需]
@@ -1154,7 +1600,7 @@ The scheduler call these plugins in order. Scheduler skips the rest of these plu
- postBind 是一个在 Pod 已经被成功绑定之后要调用的插件的列表。
+ postBind 是一个在 Pod 已经被成功绑定之后要调用的插件的列表。
multiPoint [必需]
@@ -1169,11 +1615,11 @@ The same is true for disabling "∗" through MultiPoint (no default plugins
Plugins can still be disabled through their individual extension points.
-->
multiPoint 是一个简化的配置段落,用来为所有合法的扩展点启用插件。
-通过 multiPoint 启用的插件会自动注册到插件所实现的每个独立的扩展点上。
-通过 multiPoint 禁用的插件会禁用对应的操作行为。
-通过 multiPoint 所禁止的 "∗" 也是如此,意味着所有默认
-插件都不会被自动注册。
-插件也可以通过各个独立的扩展点来禁用。
+ 通过 multiPoint 启用的插件会自动注册到插件所实现的每个独立的扩展点上。
+ 通过 multiPoint 禁用的插件会禁用对应的操作行为。
+ 通过 multiPoint 所禁止的 "∗"
+ 也是如此,意味着所有默认插件都不会被自动注册。
+ 插件也可以通过各个独立的扩展点来禁用。
-PodTopologySpreadConstraintsDefaulting 定义如何为 PodTopologySpread 插件
-设置默认的约束。
+PodTopologySpreadConstraintsDefaulting
+定义如何为 PodTopologySpread 插件设置默认的约束。
## `RequestedToCapacityRatioParam` {#kubescheduler-config-k8s-io-v1beta3-RequestedToCapacityRatioParam}
@@ -1236,7 +1682,7 @@ PodTopologySpreadConstraintsDefaulting 定义如何为 PodTopologySpread 插件
-RequestedToCapacityRatioParam 结构定义 RequestedToCapacityRatio 的参数。
+RequestedToCapacityRatioParam 结构定义 RequestedToCapacityRatio 的参数。
字段 描述
@@ -1249,7 +1695,7 @@ RequestedToCapacityRatioParam 结构定义 RequestedToCapacityRatio 的参数。
- shape 是一个定义评分函数曲线的计分点的列表。
+ shape 是一个定义评分函数曲线的计分点的列表。
@@ -1268,7 +1714,7 @@ RequestedToCapacityRatioParam 结构定义 RequestedToCapacityRatio 的参数。
-ResourceSpec 用来代表某个资源。
+ResourceSpec 用来代表某个资源。
字段 描述
@@ -1281,7 +1727,7 @@ ResourceSpec 用来代表某个资源。
- 资源名称。
+ 资源名称。
weight [必需]
@@ -1291,7 +1737,7 @@ ResourceSpec 用来代表某个资源。
- 资源权重。
+ 资源权重。
@@ -1309,7 +1755,7 @@ ResourceSpec 用来代表某个资源。
-ScoringStrategy 为节点资源插件定义 ScoringStrategyType。
+ScoringStrategy 为节点资源插件定义 ScoringStrategyType。
字段 描述
@@ -1322,7 +1768,7 @@ ScoringStrategy 为节点资源插件定义 ScoringStrategyType。
- type 用来选择要运行的策略。
+ type 用来选择要运行的策略。
resources [必需]
@@ -1336,7 +1782,7 @@ Allowed weights go from 1 to 100.
Weight defaults to 1 if not specified or explicitly set to 0.
-->
resources 设置在评分时要考虑的资源。
- 默认的资源集合包含 "cpu" 和 "memory",且二者权重相同。
+ 默认的资源集合包含 "cpu" 和 "memory",且二者权重相同。
权重的取值范围为 1 到 100。
当权重未设置或者显式设置为 0 时,意味着使用默认值 1。
@@ -1348,7 +1794,7 @@ Weight defaults to 1 if not specified or explicitly set to 0.
- 特定于 RequestedToCapacityRatio 策略的参数。
+ 特定于 RequestedToCapacityRatio 策略的参数。
@@ -1370,7 +1816,7 @@ Weight defaults to 1 if not specified or explicitly set to 0.
-ScoringStrategyType 是 NodeResourcesFit 插件所使用的的评分策略类型。
+ScoringStrategyType 是 NodeResourcesFit 插件所使用的的评分策略类型。
## `UtilizationShapePoint` {#kubescheduler-config-k8s-io-v1beta3-UtilizationShapePoint}
@@ -1385,7 +1831,7 @@ ScoringStrategyType 是 NodeResourcesFit 插件所使用的的评分策略类型
-UtilizationShapePoint 代表的是优先级函数曲线中的一个评分点。
+UtilizationShapePoint 代表的是优先级函数曲线中的一个评分点。
字段 描述
@@ -1398,7 +1844,7 @@ UtilizationShapePoint 代表的是优先级函数曲线中的一个评分点。
- 利用率(x 轴)。合法值为 0 到 100。完全被利用的节点映射到 100。
+ 利用率(x 轴)。合法值为 0 到 100。完全被利用的节点映射到 100。
score [必需]
@@ -1408,335 +1854,8 @@ UtilizationShapePoint 代表的是优先级函数曲线中的一个评分点。
- 分配给指定利用率的分值(y 轴)。合法值为 0 到 10。
+ 分配给指定利用率的分值(y 轴)。合法值为 0 到 10。
-
-## `ClientConnectionConfiguration` {#ClientConnectionConfiguration}
-
-
-**出现在:**
-
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
-
-
-ClientConnectionConfiguration 中包含用来构造一个客户端所需的细节。
-
-
-字段 描述
-
-
-kubeconfig [必需]
-string
-
-
-
- 此字段为指向某 KubeConfig 文件的路径。
-
-
-acceptContentTypes [必需]
-string
-
-
-
- acceptContentTypes 定义的是客户端与服务器建立连接时要发送的
-Accept 头部;这里的设置值会覆盖默认值 "application/json"。
-此字段会影响某特定客户端与服务器的所有连接。
-
-
-contentType [必需]
-string
-
-
-
- contentType 包含的是此客户端向服务器发送数据时使用的
-内容类型(Content Type)。
-
-
-qps [必需]
-float32
-
-
-
- qps 控制的是此连接上每秒可以发送的查询个数。
-
-
-burst [必需]
-int32
-
-
-
- burst 允许在客户端超出其速率限制时可以累积的额外查询个数。
-
-
-
-
-
-## `DebuggingConfiguration` {#DebuggingConfiguration}
-
-
-**出现在:**
-
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
-
-
-DebuggingConfiguration 保存与调试功能相关的配置。
-
-
-字段 描述
-
-
-enableProfiling [必需]
-bool
-
-
-
- 此字段允许通过 Web 接口 host:port/debug/pprof/ 执行性能分析。
-
-
-enableContentionProfiling [必需]
-bool
-
-
-
- 此字段在 enableProfiling 为 true 时允许执行锁竞争分析。
-
-
-
-
-
-## `FormatOptions` {#FormatOptions}
-
-
-
-
-FormatOptions 中包含不同日志格式的配置选项。
-
-
-字段 描述
-
-
-json [必需]
-JSONOptions
-
-
-
- [实验特性] json 字段包含为 "json" 日志格式提供的配置选项。
-
-
-
-
-
-## `JSONOptions` {#JSONOptions}
-
-
-**出现在:**
-
-- [FormatOptions](#FormatOptions)
-
-
-JSONOptions 包含为 "json" 日志格式所设置的配置选项。
-
-
-字段 描述
-
-
-splitStream [必需]
-bool
-
-
-
- [实验特性] 此字段将错误信息重定向到标准错误输出(stderr),将提示消息
-重定向到标准输出(stdout),并且支持缓存。默认配置为将二者都输出到
-标准输出(stdout),且不提供缓存。
-
-
-infoBufferSize [必需]
-k8s.io/apimachinery/pkg/api/resource.QuantityValue
-
-
-
- [实验特性] infoBufferSize 用来在分离数据流场景是设置提示
-信息数据流的大小。默认值为 0,意味着禁止缓存。
-
-
-
-
-
-## `LeaderElectionConfiguration` {#LeaderElectionConfiguration}
-
-
-**出现在:**
-
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta2-KubeSchedulerConfiguration)
-- [KubeSchedulerConfiguration](#kubescheduler-config-k8s-io-v1beta3-KubeSchedulerConfiguration)
-
-
-LeaderElectionConfiguration 为能够支持领导者选举的组件定义其领导者选举
-客户端的配置。
-
-
-字段 描述
-
-
-leaderElect [必需]
-bool
-
-
-
- leaderElect 启用领导者选举客户端,从而在进入主循环执行之前
-先要获得领导者角色。当运行多副本组件时启用此功能有助于提高可用性。
-
-
-leaseDuration [必需]
-meta/v1.Duration
-
-
-
- leaseDuration 是非领导角色候选者在观察到需要领导席位更新时
-要等待的时间;只有经过所设置时长才可以尝试去获得一个仍处于领导状态但需要
-被刷新的席位。这里的设置值本质上意味着某个领导者在被另一个候选者替换掉
-之前可以停止运行的最长时长。只有当启用了领导者选举时此字段有意义。
-
-
-renewDeadline [必需]
-meta/v1.Duration
-
-
-
- renewDeadline 设置的是当前领导者在停止扮演领导角色之前
-需要刷新领导状态的时间间隔。此值必须小于或等于租约期限的长度。
-只有到启用了领导者选举时此字段才有意义。
-
-
-retryPeriod [必需]
-meta/v1.Duration
-
-
-
- retryPeriod 是客户端在连续两次尝试获得或者刷新领导状态
-之间需要等待的时长。只有当启用了领导者选举时此字段才有意义。
-
-
-resourceLock [必需]
-string
-
-
-
- 此字段给出在领导者选举期间要作为锁来使用的资源对象类型。
-
-
-resourceName [必需]
-string
-
-
-
- 此字段给出在领导者选举期间要作为锁来使用的资源对象名称。
-
-
-resourceNamespace [必需]
-string
-
-
-
- 此字段给出在领导者选举期间要作为锁来使用的资源对象所在名字空间。
-
-
-
-
-
-## `VModuleConfiguration` {#VModuleConfiguration}
-
-
-
-(`[]k8s.io/component-base/config/v1alpha1.VModuleItem` 的别名)
-
-
-VModuleConfiguration 是一组文件名(通配符)及其对应的日志详尽程度阈值。
-
diff --git a/content/zh/docs/reference/config-api/kubeadm-config.v1beta2.md b/content/zh/docs/reference/config-api/kubeadm-config.v1beta2.md
index a1a8bee01c..bc37e362a7 100644
--- a/content/zh/docs/reference/config-api/kubeadm-config.v1beta2.md
+++ b/content/zh/docs/reference/config-api/kubeadm-config.v1beta2.md
@@ -292,7 +292,7 @@ https://godoc.org/k8s.io/kubelet/config/v1beta1#KubeletConfiguration。
criSocket : "/var/run/dockershim.sock"
taints :
- key : "kubeadmNode"
- value : "master"
+ value : "someValue"
effect : "NoSchedule"
kubeletExtraArgs :
v : 4
@@ -445,7 +445,7 @@ node only (e.g. the node IP).
etcd 中包含 etcd 服务的配置。
@@ -633,7 +633,7 @@ ConfigMap 中,之后在新的控制面实例添加到集群或者现有控制
kind stringClusterStatus
apiEndpoints [必需]
-map[string]APIEndpoint
+map[string]github.com/tengqm/kubeconfig/config/kubeadm/v1beta2.APIEndpoint
- bindPort 设置 API 服务器要绑定到的安全端口。默认值为 6443。
+ bindPort 设置 API 服务器要绑定到的安全端口。默认值为 6443。
@@ -848,7 +848,7 @@ Defaults to 6443.
APIServer 包含集群中 API 服务器部署所必需的设置。
@@ -860,8 +860,17 @@ APIServer 包含集群中 API 服务器部署所必需的设置。
ControlPlaneComponent [必需]
ControlPlaneComponent
-(ControlPlaneComponent 结构的字段被嵌入到此类型中)
- 无描述
+
+
+(ControlPlaneComponent 结构的字段被嵌入到此类型中)
+
+
+ 无描述
+
certSANs [必需]
[]string
@@ -875,7 +884,7 @@ signing certificate.
timeoutForControlPlane [必需]
-meta/v1.Duration
+meta/v1.Duration
ttl [必需]
-meta/v1.Duration
+meta/v1.Duration
-
- ttl 定义此令牌的声明周期。默认为 24h。
+
ttl 定义此令牌的声明周期。默认为 '24h'。
expires 和 ttl 是互斥的。
@@ -1006,10 +1015,10 @@ BootstrapTokenDiscovery 用来设置基于引导令牌的服务发现选项。
- apiServerEndpoint
为 API 服务器的 IP 地址或者域名,从该端点可以获得集群信息。
+ apiServerEndpoint 为 API 服务器的 IP 地址或者域名,从该端点可以获得集群信息。
@@ -1022,14 +1031,13 @@ information will be fetched.
caCertHashes specifies a set of public key pins to verify when token-based discovery
is used. The root CA found during discovery must match one of these values.
Specifying an empty set disables root CA pinning, which can be unsafe.
-Each hash is specified as "<type>:<value>", where the only currently supported type is
-"sha256". This is a hex-encoded SHA-256 hash of the Subject Public Key Info (SPKI)
+Each hash is specified as "<\!-- raw HTML omitted -->:
caCertHashes 设置一组在基于令牌来发现服务时要验证的公钥指纹。
发现过程中获得的根 CA 必须与这里的数值之一匹配。
设置为空集合意味着禁用根 CA 指纹,因而可能是不安全的。
-每个哈希值的形式为 "<type>:<value>",当前唯一支持的 type 为
+每个哈希值的形式为 ":",当前唯一支持的 type 为
"sha256"。
哈希值为主体公钥信息(Subject Public Key Info,SPKI)对象的 SHA-256
哈希值(十六进制编码),形式为 DER 编码的 ASN.1。
@@ -1046,9 +1054,9 @@ object in DER-encoded ASN.1. These hashes can be calculated using, for example,
caCertHashes. This can weaken the security of kubeadm since other nodes can
impersonate the control-plane.
-->
- unsafeSkipCAVerification 允许在使用基于令牌的服务发现时不使用
+ unsafeSkipCAVerification 允许在使用基于令牌的服务发现时不使用
caCertHashes 来执行 CA 验证。这会弱化 kubeadm 的安全性,
-因为其他节点可以伪装成控制面。
+因为其他节点可以伪装成控制面。
@@ -1063,11 +1071,11 @@ impersonate the control-plane.
- [BootstrapToken](#kubeadm-k8s-io-v1beta2-BootstrapToken)
-
-BootstrapTokenString 形式为 abcdef.abcdef0123456789 的一个令牌,
+
BootstrapTokenString 形式为 'abcdef.abcdef0123456789' 的一个令牌,
用来从加入集群的节点角度验证 API 服务器的身份,或者 "kubeadm join"
在节点启动引导是作为一种身份认证方法。
此令牌的生命期是短暂的,并且应该如此。
@@ -1120,7 +1128,7 @@ ControlPlaneComponent 中包含对集群中所有控制面组件都适用的设
@@ -1135,9 +1143,10 @@ without leading dash(es).
- extraVolumes 是一组额外的主机卷,需要挂载到控制面组件中。
+ extraVolumes 是一组额外被挂载到控制面组件中的主机卷。
@@ -1178,7 +1187,9 @@ DNS 结构定义要在集群中使用的 DNS 插件。
ImageMeta [必需]
ImageMeta
-(ImageMeta 的成员被内嵌到此类型中)。
+
+
+(ImageMeta 的成员被内嵌到此类型中)。
tlsBootstrapToken 是 TLS 启动引导过程中使用的令牌。
如果设置了 bootstrapToken,则此字段默认值为 .bootstrapToken.token,
@@ -1276,7 +1288,7 @@ does not contain any other authentication information
timeout [必需]
-meta/v1.Duration
+meta/v1.Duration
@@ -1368,7 +1380,7 @@ kubeadm 不清楚证书文件的存放位置,因此必须单独提供证书信
endpoints 包含一组 etcd 成员的列表。
@@ -1469,8 +1481,8 @@ file from which to load cluster information.
string
-
- name 为卷在 Pod 模板中的名称。
+
+ name 字段为卷在 Pod 模板中的名称。
hostPath [必需]
@@ -1485,8 +1497,8 @@ file from which to load cluster information.
string
-
- mountPath 是 hostPath 在 Pod 内挂载的路径。
+
+ mountPath 是 hostPath 在 Pod 内挂载的路径。
readOnly [必需]
@@ -1501,8 +1513,8 @@ file from which to load cluster information.
core/v1.HostPathType
-
- pathType 是 hostPath 的类型。
+
+ pathType 是 hostPath 的类型。
@@ -1533,7 +1545,7 @@ originated from the Kubernetes/Kubernetes release process
+If not set, the imageRepository defined in ClusterConfiguration will be used.
imageRepository 设置镜像拉取所用的容器仓库。
若未设置,则使用 ClusterConfiguration 中的 imageRepository。
@@ -1542,9 +1554,9 @@ If not set, the imageRepository defined in ClusterConfiguration wil
string
-
+
imageTag 允许用户设置镜像的标签。
如果设置了此字段,则 kubeadm 不再在集群升级时自动更改组件的版本。
@@ -1617,7 +1629,11 @@ Secret 中的证书的秘钥。对应的加密秘钥在 InitConfiguration 结构
ImageMeta [必需]
ImageMeta
-(ImageMeta 结构的字段被嵌入到此类型中。)
+
+
+(ImageMeta 结构的字段被嵌入到此类型中。)
@@ -1642,11 +1658,11 @@ Defaults to "/var/lib/etcd".
extraArgs 是为 etcd 可执行文件提供的额外参数,用于在静态
-Pod 中运行 etcd。映射中的每一个键对应命令行上的一个标志参数,只是去掉了前置的连字符。
+pod 中运行 etcd。映射中的每一个键对应命令行上的一个标志参数,只是去掉了前置的连字符。
serverCertSANs [必需]
@@ -1654,7 +1670,7 @@ Pod 中运行 etcd。映射中的每一个键对应命令行上的一个标志
serverCertSANs 为 etcd 服务器的签名证书设置额外的主体替代名
@@ -1699,9 +1715,9 @@ signing certificate.
- serviceSubnet 是 Kubernetes 服务所使用的的子网。
+
serviceSubnet 是 kubernetes 服务所使用的的子网。
默认值为 "10.96.0.0/12"。
@@ -1717,8 +1733,8 @@ signing certificate.
string
-
- dnsDomain 是 Kubernetes 服务所使用的的 DNS 域名。
+
+
dnsDomain 是 kubernetes 服务所使用的的 DNS 域名。
默认值为 "cluster.local"。
@@ -1751,13 +1767,13 @@ node to the cluster, either via "kubeadm init" or "kubeadm join&q
- name 是 Node API 对象的 .metadata.name 字段值;
+
name 是 Node API 对象的 .Metadata.Name 字段值;
该 API 对象会在此 kubeadm init 或 kubeadm join 操作期间创建。
在提交给 API 服务器的 kubelet 客户端证书中,此字段也用作其 CommonName。
如果未指定则默认为节点的主机名。
@@ -1768,29 +1784,28 @@ Defaults to the hostname of the node if not provided.
criSocket 用来读取容器运行时的信息。
-此信息会被以注解的方式添加到 Node API 对象至上,用于后续用途。
+此信息会被以注解的方式添加到 Node API 对象之上,用于后续用途。
taints [必需]
[]core/v1.Taint
-
+
tains 设定 Node API 对象被注册时要附带的污点。
-若未设置此字段(即字段值为 null), 在 kubeadm init 期间,节点与控制面之间的通信。
-默认值为污点默认设置为 taints: ["node-role.kubernetes.io/master:""]。
-如果你不希望为控制面节点设置污点,可以在 YAML 中将此字段设置为空的列表,即
-taints: []。 此字段仅用在 Node 注册期间。
+若未设置此字段(即字段值为 null),在 kubeadm init 期间,默认为控制平面节点添加控制平面污点。
+如果你不想污染你的控制平面节点,可以将此字段设置为空列表(即 YAML 文件中的 taints: []),
+这个字段只用于节点注册。
kubeletExtraArgs [必需]
diff --git a/content/zh/docs/reference/config-api/kubeadm-config.v1beta3.md b/content/zh/docs/reference/config-api/kubeadm-config.v1beta3.md
index c51bf4a3ef..ef491a424e 100644
--- a/content/zh/docs/reference/config-api/kubeadm-config.v1beta3.md
+++ b/content/zh/docs/reference/config-api/kubeadm-config.v1beta3.md
@@ -78,7 +78,7 @@ BootstrapToken∗ 结构。
kubeadm v1.15.x 及更新的版本可以用来从 v1beta1 迁移到 v1beta2 版本;
kubeadm v1.22.x 及更新的版本不再支持 v1beta1 和更老的 API,但可以用来
-从 v1beta2 迁移到 v1beta3。
类型 `ClusterConfiguration` 用来定制集群范围的设置,具体包括以下设置:
-networking:其中包含集群的网络拓扑配置。使用这一部分可以定制 Pod 的
-子网或者 Service 的子网。
+networking:其中包含集群的网络拓扑配置。使用这一部分可以定制 Pod 的
+子网或者 Service 的子网。
+
-etcd:etcd 数据库的配置。例如使用这个部分可以定制本地 etcd 或者配置 API 服务器
-使用一个外部的 etcd 集群。
-kube-apiserver、kube-scheduler、kube-controller-manager
-配置:这些部分可以通过添加定制的设置或者重载 kubeadm 的默认设置来定制控制面组件。
+
+etcd:etcd 数据库的配置。例如使用这个部分可以定制本地 etcd 或者配置 API 服务器
+使用一个外部的 etcd 集群。
+
+
+kube-apiserver、kube-scheduler、kube-controller-manager
+配置:这些部分可以通过添加定制的设置或者重载 kubeadm 的默认设置来定制控制面组件。
+
apiVersion : kubeproxy.config.k8s.io/v1alpha1
@@ -308,7 +313,7 @@ https://godoc.org/k8s.io/kubelet/config/v1beta1#KubeletConfiguration。
criSocket : "/var/run/dockershim.sock"
taints :
- key : "kubeadmNode"
- value : "master"
+ value : "someValue"
effect : "NoSchedule"
kubeletExtraArgs :
v : 4
@@ -471,9 +476,9 @@ node only (e.g. the node ip).
- networking 字段包含集群的网络拓扑配置。
+ networking 字段包含集群的网络拓扑配置。
kubernetesVersion
@@ -495,8 +500,8 @@ node only (e.g. the node ip).
It can be a valid IP address or a RFC-1123 DNS subdomain, both with optional TCP port.
In case the controlPlaneEndpoint is not specified, the advertiseAddress + bindPort
are used; in case the controlPlaneEndpoint is specified but without a TCP port,
-the `bindPort` is used.
-Possible usages are:
+the bindPort is used.
+Possible usages are:
-->
controlPlaneEndpoint 为控制面设置一个稳定的 IP 地址或 DNS 名称。
取值可以是一个合法的 IP 地址或者 RFC-1123 形式的 DNS 子域名,二者均可以带一个
@@ -768,7 +773,7 @@ Defaults to "/etc/kubernetes/pki/ca.crt".
-discovery [必需]-->[必需]
+discovery [必需]
Discovery
@@ -1032,7 +1037,7 @@ impersonate the control-plane.
-ControlPlaneComponent 中包含对集群中所有控制面组件都适用的设置。
+ControlPlaneComponent 中包含对集群中所有控制面组件都适用的设置。
字段 描述
@@ -1080,16 +1085,20 @@ without leading dash(es).
-DNS 结构定义要在集群中使用的 DNS 插件。
+DNS 结构定义要在集群中使用的 DNS 插件。
字段 描述
-ImageMeta [必需]-->[必需]
+ImageMeta [必需]
ImageMeta
-(ImageMeta 的成员被内嵌到此类型中)。
+
+
+(ImageMeta 的成员被内嵌到此类型中)。
-Discovery 设置 TLS 启动引导过程中 kubelet 要使用的配置选项。
+
Discovery 设置 TLS 启动引导过程中 kubelet 要使用的配置选项。
字段 描述
@@ -1194,7 +1203,7 @@ does not contain any other authentication information
-Etcd 包含用来描述 etcd 配置的元素。
+Etcd 包含用来描述 etcd 配置的元素。
字段 描述
@@ -1244,14 +1253,15 @@ Etcd 包含用来描述 etcd 配置的元素。
ExternalEtcd describes an external etcd cluster.
Kubeadm has no knowledge of where certificate files live and they must be supplied.
-->
-ExternalEtcd 描述外部 etcd 集群。
+ExternalEtcd 描述外部 etcd 集群。
kubeadm 不清楚证书文件的存放位置,因此必须单独提供证书信息。
+
字段 描述
-endpoints [必需]-->[必需]
+endpoints [必需]
[]string
@@ -1261,7 +1271,7 @@ kubeadm 不清楚证书文件的存放位置,因此必须单独提供证书信
endpoints 包含一组 etcd 成员的列表。
-caFile [必需]-->[必需]
+caFile [必需]
string
@@ -1498,7 +1508,11 @@ Secret 中的证书的秘钥。对应的加密秘钥在 InitConfiguration 结构
ImageMeta [必需]
ImageMeta
-(ImageMeta 结构的字段被嵌入到此类型中。)
+
+
+(ImageMeta 结构的字段被嵌入到此类型中。)
ImageMeta 允许用户为 etcd 定制要使用的容器。
@@ -1641,15 +1655,17 @@ This information will be annotated to the Node API object, for later re-use[]core/v1.Taint
-
+
tains 设定 Node API 对象被注册时要附带的污点。
-若未设置此字段(即字段值为 null), 在 kubeadm init 期间,节点与控制面之间的通信。默认值为污点默认设置为 taints: ["node-role.kubernetes.io/master:""]。
-如果你不希望为控制面节点设置污点,可以在 YAML 中将此字段设置为空的列表,即
-taints: []。 此字段仅用在 Node 注册期间。
+若未设置此字段(即字段值为 null),在 kubeadm init 期间,默认为控制平面节点添加控制平面污点。
+如果你不想污染你的控制平面节点,可以将此字段设置为空列表(即 YAML 文件中的 taints: []),
+这个字段只用于节点注册。
kubeletExtraArgs
@@ -1782,7 +1798,7 @@ for, so other administrators can know its purpose.
ttl
-meta/v1.Duration
+meta/v1.Duration
+dynamically at runtime based on the ttl. expires and ttl are mutually exclusive.-->
expires 设置此令牌过期的时间戳。默认为在运行时基于
ttl 来决定。
expires 和 ttl 是互斥的。
diff --git a/content/zh/docs/reference/config-api/kubelet-config.v1alpha1.md b/content/zh/docs/reference/config-api/kubelet-config.v1alpha1.md
index ad7e4908f4..9a62ac5ec6 100644
--- a/content/zh/docs/reference/config-api/kubelet-config.v1alpha1.md
+++ b/content/zh/docs/reference/config-api/kubelet-config.v1alpha1.md
@@ -26,8 +26,6 @@ auto_generated: true
-->
**出现在:**
-- [LoggingConfiguration](#LoggingConfiguration)
-
@@ -41,8 +39,8 @@ FormatOptions 包含为不同类型日志格式提供的选项。
JSONOptions
-
- [试验特性] json 中包含 "json" 日志格式的选项。
+
+ [试验特性] json 中包含 "json" 日志格式的选项。
@@ -58,9 +56,9 @@ FormatOptions 包含为不同类型日志格式提供的选项。
- [FormatOptions](#FormatOptions)
-JSONOptions 包含用于 "json" 日志格式的选项。
+JSONOptions 包含用于 "json" 日志格式的选项。
字段 描述
@@ -104,8 +102,6 @@ using split streams. The default is zero, which disables buffering.-->
-->
**出现在:**
-- [LoggingConfiguration](#LoggingConfiguration)
-
-## Resource Types
-
+
+## 资源类型
+- [CredentialProviderConfig](#kubelet-config-k8s-io-v1beta1-CredentialProviderConfig)
- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
- [SerializedNodeConfigSource](#kubelet-config-k8s-io-v1beta1-SerializedNodeConfigSource)
-
-
+## `CredentialProviderConfig` {#kubelet-config-k8s-io-v1beta1-CredentialProviderConfig}
-## `KubeletConfiguration` {#kubelet-config-k8s-io-v1beta1-KubeletConfiguration}
-
-
-
-
-
-KubeletConfiguration contains the configuration for the Kubelet
+
+CredentialProviderConfig 包含有关每个 exec 凭据提供者的配置信息。
+Kubelet 从磁盘上读取这些配置信息,并根据 CredentialProvider 类型启用各个提供者。
-Field Description
+字段 描述
apiVersion stringkubelet.config.k8s.io/v1beta1
-kind stringKubeletConfiguration
+kind stringCredentialProviderConfig
+
+providers [必需]
+[]CredentialProvider
+
+
+
+
+ providers 是一组凭据提供者插件,这些插件会被 kubelet 启用。
+ 多个提供者可以匹配到同一镜像上,这时,来自所有提供者的凭据信息都会返回给 kubelet。
+ 如果针对同一镜像调用了多个提供者,则结果会被组合起来。如果提供者返回的认证主键有重复,
+ 列表中先出现的提供者所返回的值将被使用。
+
+
+
+
+
-
-
-enableServer [Required]
+## `KubeletConfiguration` {#kubelet-config-k8s-io-v1beta1-KubeletConfiguration}
+
+
+KubeletConfiguration 中包含 Kubelet 的配置。
+
+
+字段 描述
+
+
+apiVersion stringkubelet.config.k8s.io/v1beta1
+kind stringKubeletConfiguration
+enableServer [必需]
bool
- enableServer enables Kubelet's secured server.
+
+ enableServer 会启用 kubelet 的安全服务器。
+ 注意:kubelet 的不安全端口由 readOnlyPort 选项控制。
+ 默认值:true
+
-
-
+
staticPodPath
string
- staticPodPath is the path to the directory containing local (static) pods to
+
+ staticPodPath 是指向要运行的本地(静态)Pod 的目录,
+或者指向某个静态 Pod 文件的路径。
+ 默认值:""
+
-
-
+
syncFrequency
-meta/v1.Duration
+meta/v1.Duration
- syncFrequency is the max period between synchronizing running
+
+ syncFrequency 是对运行中的容器和配置进行同步的最长周期。
+ 默认值:"1m"
+
-
-
+
fileCheckFrequency
-meta/v1.Duration
+meta/v1.Duration
- fileCheckFrequency is the duration between checking config files for
-new data
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-shortening the duration will cause the Kubelet to reload local Static Pod
-configurations more frequently, which may have a negative performance impact.
-Default: "20s"
+
+ fileCheckFrequency 是对配置文件中新数据进行检查的时间间隔值。
+ 默认值:"20s"
+
-
-
+
httpCheckFrequency
-meta/v1.Duration
+meta/v1.Duration
- httpCheckFrequency is the duration between checking http for new data
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-shortening the duration will cause the Kubelet to poll staticPodURL more
-frequently, which may have a negative performance impact.
-Default: "20s"
+
+ httpCheckFrequency 是对 HTTP 服务器上新数据进行检查的时间间隔值。
+ 默认值:"20s"
+
-
-
+
staticPodURL
string
- staticPodURL is the URL for accessing static pods to run
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-the set of static pods specified at the new URL may be different than the
-ones the Kubelet initially started with, and this may disrupt your node.
-Default: ""
+
+ staticPodURL 是访问要运行的静态 Pod 的 URL 地址。
+
默认值:""
+
-
-
+
staticPodURLHeader
map[string][]string
- staticPodURLHeader is a map of slices with HTTP headers to use when accessing the podURL
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may disrupt the ability to read the latest set of static pods from StaticPodURL.
-Default: nil
+
+ staticPodURLHeader是一个由字符串组成的映射表,其中包含的 HTTP
+头部信息用于访问podURL。
+ 默认值:nil
+
-
-
+
address
string
+
+ address 是 kubelet 提供服务所用的 IP 地址(设置为 0.0.0.0
+使用所有网络接口提供服务)。
+ 默认值:"0.0.0.0"
+
-
-
+
port
int32
+
+ port 是 kubelet 用来提供服务所使用的端口号。
+这一端口号必须介于 1 到 65535 之间,包含 1 和 65535。
+ 默认值:10250
+
-
-
+
readOnlyPort
int32
- readOnlyPort is the read-only port for the Kubelet to serve on with
+
+ readOnlyPort 是 kubelet 用来提供服务所使用的只读端口号。
+此端口上的服务不支持身份认证或鉴权。这一端口号必须介于 1 到 65535 之间,
+包含 1 和 65535。将此字段设置为 0 会禁用只读服务。
+ 默认值:0(禁用)
+
-
-
+
tlsCertFile
string
- tlsCertFile is the file containing x509 Certificate for HTTPS. (CA cert,
+
+ tlsCertFile是包含 HTTPS 所需要的 x509 证书的文件
+(如果有 CA 证书,会串接到服务器证书之后)。如果tlsCertFile
+和tlsPrivateKeyFile都没有设置,则系统会为节点的公开地址生成自签名的证书和私钥,
+并将其保存到 kubelet --cert-dir参数所指定的目录下。
+ 默认值:""
+
-
-
+
tlsPrivateKeyFile
string
- tlsPrivateKeyFile is the file containing x509 private key matching tlsCertFile
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
-Default: ""
+
+ tlsPrivateKeyFile是一个包含与tlsCertFile
+证书匹配的 X509 私钥的文件。
+ 默认值:""
+
-
-
+
tlsCipherSuites
[]string
- TLSCipherSuites is the list of allowed cipher suites for the server.
+
+ tlsCipherSuites是一个字符串列表,其中包含服务器所接受的加密包名称。
+列表中的每个值来自于tls包中定义的常数(https://golang.org/pkg/crypto/tls/#pkg-constants)。
+ 默认值:nil
+
-
-
+
tlsMinVersion
string
- TLSMinVersion is the minimum TLS version supported.
+
+ tlsMinVersion给出所支持的最小 TLS 版本。
+字段取值来自于tls包中的常数定义(https://golang.org/pkg/crypto/tls/#pkg-constants)。
+ 默认值:""
+
-
-
+
rotateCertificates
bool
- rotateCertificates enables client certificate rotation. The Kubelet will request a
+
+ rotateCertificates用来启用客户端证书轮换。kubelet 会调用
+certificates.k8s.io API 来请求新的证书。需要有一个批复人批准证书签名请求。
+ 默认值:false
+
-
-
+
serverTLSBootstrap
bool
- serverTLSBootstrap enables server certificate bootstrap. Instead of self
+
+ serverTLSBootstrap用来启用服务器证书引导。系统不再使用自签名的服务证书,
+kubelet 会调用certificates.k8s.io API 来请求证书。
+需要有一个批复人来批准证书签名请求(CSR)。
+设置此字段时,RotateKubeletServerCertificate特性必须被启用。
+ 默认值:false
+
-
-
+
authentication
KubeletAuthentication
- authentication specifies how requests to the Kubelet's server are authenticated
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
+
+ authorization设置发送给 kubelet 服务器的请求是如何进行身份认证的。
+ 默认值:
+
+ anonymous:
+ enabled: false
+ webhook:
+ enabled: true
+ cacheTTL: "2m"
+
+
-
-
+
authorization
KubeletAuthorization
- authorization specifies how requests to the Kubelet's server are authorized
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may disrupt components that interact with the Kubelet server.
+
+ authorization设置发送给 kubelet 服务器的请求是如何进行鉴权的。
+ 默认值:
+
+ mode: Webhook
+ webhook:
+ cacheAuthorizedTTL: "5m"
+ cacheUnauthorizedTTL: "30s"
+
+
-
-
+
registryPullQPS
int32
- registryPullQPS is the limit of registry pulls per second.
-Set to 0 for no limit.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may impact scalability by changing the amount of traffic produced
-by image pulls.
-Default: 5
+
+ registryPullQPS是每秒钟可以执行的镜像仓库拉取操作限值。
+此值必须不能为负数。将其设置为 0 表示没有限值。
+ 默认值:5
+
-
-
+
registryBurst
int32
- registryBurst is the maximum size of bursty pulls, temporarily allows
+
+ registryBurst是突发性镜像拉取的上限值,允许镜像拉取临时上升到所指定数量,
+不过仍然不超过registryPullQPS所设置的约束。此值必须是非负值。
+只有registryPullQPS参数值大于 0 时才会使用此设置。
+ 默认值:10
+
-
-
+
eventRecordQPS
int32
- eventRecordQPS is the maximum event creations per second. If 0, there
-is no limit enforced.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may impact scalability by changing the amount of traffic produced by
-event creations.
-Default: 5
+
+ eventRecordQPS设置每秒钟可创建的事件个数上限。如果此值为 0,
+则表示没有限制。此值不能设置为负数。
+ 默认值:5
+
-
-
+
eventBurst
int32
- eventBurst is the maximum size of a burst of event creations, temporarily
+
+ eventBurst是突发性事件创建的上限值,允许事件创建临时上升到所指定数量,
+不过仍然不超过eventRecordQPS所设置的约束。此值必须是非负值,
+且只有eventRecordQPS > 0 时才会使用此设置。
+ 默认值:10
+
-
-
+
enableDebuggingHandlers
bool
- enableDebuggingHandlers enables server endpoints for log access
+
+ enableDebuggingHandlers启用服务器上用来访问日志、
+在本地运行容器和命令的端点,包括exec、attach、
+logs和portforward等功能。
+ 默认值:true
+
-
-
+
enableContentionProfiling
bool
- enableContentionProfiling enables lock contention profiling, if enableDebuggingHandlers is true.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-enabling it may carry a performance impact.
-Default: false
+
+ enableContentionProfiling用于启用锁竞争性能分析,
+仅用于enableDebuggingHandlers为true的场合。
+ 默认值:false
+
-
-
+
healthzPort
int32
- healthzPort is the port of the localhost healthz endpoint (set to 0 to disable)
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may disrupt components that monitor Kubelet health.
-Default: 10248
+
+ healthzPort是本地主机上提供healthz端点的端口
+(设置值为 0 时表示禁止)。合法值介于 1 和 65535 之间。
+ 默认值:10248
+
-
-
+
healthzBindAddress
string
- healthzBindAddress is the IP address for the healthz server to serve on
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may disrupt components that monitor Kubelet health.
-Default: "127.0.0.1"
+
+ healthzBindAddress是healthz服务器用来提供服务的 IP 地址。
+ 默认值:"127.0.0.1"
+
-
-
+
oomScoreAdj
int32
- oomScoreAdj is The oom-score-adj value for kubelet process. Values
+
+ oomScoreAdj 是为 kubelet 进程设置的oom-score-adj值。
+所设置的取值要在 [-1000, 1000] 范围之内。
+ 默认值:-999
+
-
-
+
clusterDomain
string
- clusterDomain is the DNS domain for this cluster. If set, kubelet will
+
+ clusterDomain是集群的 DNS 域名。如果设置了此字段,kubelet
+会配置所有容器,使之在搜索主机的搜索域的同时也搜索这里指定的 DNS 域。
+ 默认值:""
+
-
-
+
clusterDNS
[]string
- clusterDNS is a list of IP addresses for the cluster DNS server. If set,
+
+ clusterDNS是集群 DNS 服务器的 IP 地址的列表。
+如果设置了,kubelet 将会配置所有容器使用这里的 IP 地址而不是宿主系统上的 DNS
+服务器来完成 DNS 解析。
+
默认值:nil
+
-
-
+
streamingConnectionIdleTimeout
-meta/v1.Duration
+meta/v1.Duration
- streamingConnectionIdleTimeout is the maximum time a streaming connection
+
+ streamingConnectionIdleTimeout设置流式连接在被自动关闭之前可以空闲的最长时间。
+ 默认值:"4h"
+
-
-
+
nodeStatusUpdateFrequency
-meta/v1.Duration
+meta/v1.Duration
- nodeStatusUpdateFrequency is the frequency that kubelet computes node
+
+ nodeStatusUpdateFrequency是 kubelet 计算节点状态的频率。
+如果未启用节点租约特性,这一字段设置的也是 kubelet 向控制面投递节点状态的频率。
+ 注意:如果节点租约特性未被启用,更改此参数设置时要非常小心,
+所设置的参数值必须与节点控制器的nodeMonitorGracePeriod协同。
+ 默认值:"10s"
+
-
-
+
nodeStatusReportFrequency
-meta/v1.Duration
+meta/v1.Duration
- nodeStatusReportFrequency is the frequency that kubelet posts node
+
+ nodeStatusReportFrequency是节点状态未发生变化时,kubelet
+向控制面更新节点状态的频率。如果节点状态发生变化,则 kubelet 会忽略这一频率设置,
+立即更新节点状态。
+ 此字段仅当启用了节点租约特性时才被使用。nodeStatusReportFrequency
+的默认值是"5m"。不过,如果nodeStatusUpdateFrequency
+被显式设置了,则nodeStatusReportFrequency的默认值会等于
+nodeStatusUpdateFrequency值,这是为了实现向后兼容。
+ 默认值:"5m"
+
-
-
+
nodeLeaseDurationSeconds
int32
- nodeLeaseDurationSeconds is the duration the Kubelet will set on its corresponding Lease,
-when the NodeLease feature is enabled. This feature provides an indicator of node
-health by having the Kubelet create and periodically renew a lease, named after the node,
-in the kube-node-lease namespace. If the lease expires, the node can be considered unhealthy.
-The lease is currently renewed every 10s, per KEP-0009. In the future, the lease renewal interval
-may be set based on the lease duration.
-Requires the NodeLease feature gate to be enabled.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-decreasing the duration may reduce tolerance for issues that temporarily prevent
-the Kubelet from renewing the lease (e.g. a short-lived network issue).
-Default: 40
+
+ nodeLeaseDurationSeconds是 kubelet 会在其对应的 Lease 对象上设置的时长值。
+NodeLease让 kubelet 来在kube-node-lease名字空间中创建
+按节点名称命名的租约并定期执行续约操作,并通过这种机制来了解节点健康状况。
+ 如果租约过期,则节点可被视作不健康。根据 KEP-0009 约定,目前的租约每 10 秒钟续约一次。
+在将来,租约的续约时间间隔可能会根据租约的时长来设置。
+ 此字段的取值必须大于零。
+ 默认值:40
+
-
-
+
imageMinimumGCAge
-meta/v1.Duration
+meta/v1.Duration
- imageMinimumGCAge is the minimum age for an unused image before it is
-garbage collected.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may trigger or delay garbage collection, and may change the image overhead
-on the node.
-Default: "2m"
+
+ imageMinimumGCAge是对未使用镜像进行垃圾搜集之前允许其存在的时长。
+ 默认值:"2m"
+
-
-
+
imageGCHighThresholdPercent
int32
- imageGCHighThresholdPercent is the percent of disk usage after which
-image garbage collection is always run. The percent is calculated as
-this field value out of 100.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may trigger or delay garbage collection, and may change the image overhead
-on the node.
-Default: 85
+
+ imageGCHighThresholdPercent所给的是镜像的磁盘用量百分数,
+一旦镜像用量超过此阈值,则镜像垃圾收集会一直运行。百分比是用这里的值除以 100
+得到的,所以此字段取值必须介于 0 和 100 之间,包括 0 和 100。如果设置了此字段,
+则取值必须大于imageGCLowThresholdPercent取值。
+ 默认值:85
+
-
-
+
imageGCLowThresholdPercent
int32
- imageGCLowThresholdPercent is the percent of disk usage before which
+
+ imageGCLowThresholdPercent所给的是镜像的磁盘用量百分数,
+镜像用量低于此阈值时不会执行镜像垃圾收集操作。垃圾收集操作也将此作为最低磁盘用量边界。
+百分比是用这里的值除以 100 得到的,所以此字段取值必须介于 0 和 100 之间,包括 0 和 100。
+如果设置了此字段,则取值必须小于imageGCHighThresholdPercent取值。
+ 默认值:80
+
-
-
+
volumeStatsAggPeriod
-meta/v1.Duration
+meta/v1.Duration
- How frequently to calculate and cache volume disk usage for all pods
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-shortening the period may carry a performance impact.
-Default: "1m"
+
+ volumeStatsAggPeriod是计算和缓存所有 Pod 磁盘用量的频率。
+ 默认值:"1m"
+
-
-
+
kubeletCgroups
string
- kubeletCgroups is the absolute name of cgroups to isolate the kubelet in
-Dynamic Kubelet Config (beta): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
-Default: ""
+
+ kubeletCgroups是用来隔离 kubelet 的控制组(CGroup)的绝对名称。
+ 默认值:""
+
-
-
+
systemCgroups
string
- systemCgroups is absolute name of cgroups in which to place
+
+ systemCgroups是用来放置那些未被容器化的、非内核的进程的控制组
+(CGroup)的绝对名称。设置为空字符串表示没有这类容器。回滚此字段设置需要重启节点。
+当此字段非空时,必须设置cgroupRoot字段。
+ 默认值:""
+
-
-
+
cgroupRoot
string
- cgroupRoot is the root cgroup to use for pods. This is handled by the
+
+ cgroupRoot是用来运行 Pod 的控制组 (CGroup)。
+容器运行时会尽可能处理此字段的设置值。
+
-
-
+
cgroupsPerQOS
bool
- Enable QoS based Cgroup hierarchy: top level cgroups for QoS Classes
-And all Burstable and BestEffort pods are brought up under their
-specific top level QoS cgroup.
-Dynamic Kubelet Config (beta): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
-Default: true
+
+ cgroupsPerQOS用来启用基于 QoS 的控制组(CGroup)层次结构:
+顶层的控制组用于不同 QoS 类,所有Burstable和BestEffort Pod
+都会被放置到对应的顶级 QoS 控制组下。
+ 默认值:true
+
-
-
+
cgroupDriver
string
- driver that the kubelet uses to manipulate cgroups on the host (cgroupfs or systemd)
-Dynamic Kubelet Config (beta): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
-Default: "cgroupfs"
+
+ cgroupDriver是 kubelet 用来操控宿主系统上控制组 (CGroup)
+的驱动程序(cgroupfs 或 systemd)。
+ 默认值:"cgroupfs"
+
-
-
+
cpuManagerPolicy
string
- CPUManagerPolicy is the name of the policy to use.
+
+ cpuManagerPolicy是要使用的策略名称。需要启用CPUManager
+特性门控。
+ 默认值:"None"
+
-
-
-cpuManagerReconcilePeriod
-meta/v1.Duration
+
+cpuManagerPolicyOptions
+map[string]string
- CPU Manager reconciliation period.
-Requires the CPUManager feature gate to be enabled.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-shortening the period may carry a performance impact.
-Default: "10s"
+
+ cpuManagerPolicyOptions是一组key=value键值映射,
+容许通过额外的选项来精细调整 CPU 管理器策略的行为。需要CPUManager和
+CPUManagerPolicyOptions两个特性门控都被启用。
+ 默认值:nil
+
-
-
+
+cpuManagerReconcilePeriod
+meta/v1.Duration
+
+
+
+ cpuManagerReconcilePeriod是 CPU 管理器的协调周期时长。
+需要启用CPUManager特性门控。
+ 默认值:"10s"
+
+
+
+memoryManagerPolicy
+string
+
+
+
+ memoryManagerPolicy是内存管理器要使用的策略的名称。
+要求启用MemoryManager特性门控。
+ 默认值:"none"
+
+
+
topologyManagerPolicy
string
- TopologyManagerPolicy is the name of the policy to use.
-Policies other than "none" require the TopologyManager feature gate to be enabled.
-Dynamic Kubelet Config (beta): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
-Default: "none"
+
+ topologyManagerPolicy是要使用的拓扑管理器策略名称。合法值包括:
+
+ restricted:kubelet 仅接受在所请求资源上实现最佳 NUMA 对齐的 Pod。
+ best-effort:kubelet 会优选在 CPU 和设备资源上实现 NUMA 对齐的 Pod。
+ none:kubelet 不了解 Pod CPU 和设备资源 NUMA 对齐需求。
+ single-numa-node:kubelet 仅允许在 CPU 和设备资源上对齐到同一 NUMA 节点的 Pod。
+
+ 如果策略不是 "none",则要求启用TopologyManager特性门控。
+ 默认值:"none"
+
-
-
+
topologyManagerScope
string
- TopologyManagerScope represents the scope of topology hint generation
-that topology manager requests and hint providers generate.
-"pod" scope requires the TopologyManager feature gate to be enabled.
-Default: "container"
+
+ topologyManagerScope代表的是拓扑提示生成的范围,
+拓扑提示信息由提示提供者生成,提供给拓扑管理器。合法值包括:
+
+ container:拓扑策略是按每个容器来实施的。
+ pod:拓扑策略是按每个 Pod 来实施的。
+
+ "pod" 范围要求启用TopologyManager特性门控。
+ 默认值:"container"
+
-
-
+
qosReserved
map[string]string
- qosReserved is a set of resource name to percentage pairs that specify
+
+ qosReserved是一组从资源名称到百分比值的映射,用来为Guaranteed
+QoS 类型的负载预留供其独占使用的资源百分比。目前支持的资源为:"memory"。
+需要启用QOSReserved特性门控。
+ 默认值:nil
+
-
-
+
runtimeRequestTimeout
-meta/v1.Duration
+meta/v1.Duration
- runtimeRequestTimeout is the timeout for all runtime requests except long running
+
+ runtimeRequestTimeout用来设置除长期运行的请求(pull、
+logs、exec和attach)之外所有运行时请求的超时时长。
+ 默认值:"2m"
+
-
-
+
hairpinMode
string
- hairpinMode specifies how the Kubelet should configure the container
+
+ hairpinMode设置 kubelet 如何为发夹模式数据包配置容器网桥。
+设置此字段可以让 Service 中的端点在尝试访问自身 Service 时将服务请求路由的自身。
+可选值有:
+
+
+ "promiscuous-bridge":将容器网桥设置为混杂模式。
+ "hairpin-veth":在容器的 veth 接口上设置发夹模式标记。
+ "none":什么也不做。
+
+
+ 一般而言,用户必须设置--hairpin-mode=hairpin-veth才能实现发夹模式的网络地址转译
+(NAT),因为混杂模式的网桥要求存在一个名为cbr0的容器网桥。
+ 默认值:"promiscuous-bridge"
+
-
-
+
maxPods
int32
- maxPods is the number of pods that can run on this Kubelet.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-changes may cause Pods to fail admission on Kubelet restart, and may change
-the value reported in Node.Status.Capacity[v1.ResourcePods], thus affecting
-future scheduling decisions. Increasing this value may also decrease performance,
-as more Pods can be packed into a single node.
-Default: 110
+
+ maxPods是此 kubelet 上课运行的 Pod 个数上限。此值必须为非负整数。
+ 默认值:110
+
-
-
+
podCIDR
string
- The CIDR to use for pod IP addresses, only used in standalone mode.
-In cluster mode, this is obtained from the master.
-Dynamic Kubelet Config (beta): This field should always be set to the empty default.
-It should only set for standalone Kubelets, which cannot use Dynamic Kubelet Config.
-Default: ""
+
+ podCIDR是用来设置 Pod IP 地址的 CIDR 值,仅用于独立部署模式。
+运行于集群模式时,这一数值会从控制面获得。
+ 默认值:""
+
-
-
+
podPidsLimit
int64
- PodPidsLimit is the maximum number of pids in any pod.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-lowering it may prevent container processes from forking after the change.
-Default: -1
+
+ podPidsLimit是每个 Pod 中可使用的 PID 个数上限。
+ 默认值:-1
+
-
-
+
resolvConf
string
- ResolverConfig is the resolver configuration file used as the basis
+
+ resolvConf是一个域名解析配置文件,用作容器 DNS 解析配置的基础。
+ 如果此值设置为空字符串,则会覆盖 DNS 解析的默认配置,
+本质上相当于禁用了 DNS 查询。
+ 默认值:"/etc/resolv.conf"
+
-
-
+
runOnce
bool
- RunOnce causes the Kubelet to check the API server once for pods,
+
+ runOnce字段被设置时,kubelet 会咨询 API 服务器一次并获得 Pod 列表,
+运行在静态 Pod 文件中指定的 Pod 及这里所获得的的 Pod,然后退出。
+ 默认值:false
+
-
-
+
cpuCFSQuota
bool
- cpuCFSQuota enables CPU CFS quota enforcement for containers that
+
+ cpuCFSQuota允许为设置了 CPU 限制的容器实施 CPU CFS 配额约束。
+ 默认值:true
+
-
-
+
cpuCFSQuotaPeriod
-meta/v1.Duration
+meta/v1.Duration
- CPUCFSQuotaPeriod is the CPU CFS quota period value, cpu.cfs_period_us.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-limits set for containers will result in different cpu.cfs_quota settings. This
-will trigger container restarts on the node being reconfigured.
-Default: "100ms"
+
+ cpuCFSQuotaPeriod设置 CPU CFS 配额周期值,cpu.cfs_period_us。
+此值需要介于 1 微秒和 1 秒之间,包含 1 微秒和 1 秒。
+此功能要求启用CustomCPUCFSQuotaPeriod特性门控被启用。
+ 默认值:"100ms"
+
-
-
+
nodeStatusMaxImages
int32
- nodeStatusMaxImages caps the number of images reported in Node.Status.Images.
+
+ nodeStatusMaxImages限制Node.status.images中报告的镜像数量。
+此值必须大于 -2。
+ 注意:如果设置为 -1,则不会对镜像数量做限制;如果设置为 0,则不会返回任何镜像。
+ 默认值:50
+
-
-
+
maxOpenFiles
int64
- maxOpenFiles is Number of files that can be opened by Kubelet process.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may impact the ability of the Kubelet to interact with the node's filesystem.
-Default: 1000000
+
+ maxOpenFiles是 kubelet 进程可以打开的文件个数。此值必须不能为负数。
+ 默认值:1000000
+
-
-
+
contentType
string
- contentType is contentType of requests sent to apiserver.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may impact the ability for the Kubelet to communicate with the API server.
-If the Kubelet loses contact with the API server due to a change to this field,
-the change cannot be reverted via dynamic Kubelet config.
-Default: "application/vnd.kubernetes.protobuf"
+
+ contentType是向 API 服务器发送请求时使用的内容类型。
+ 默认值:"application/vnd.kubernetes.protobuf"
+
-
-
+
kubeAPIQPS
int32
- kubeAPIQPS is the QPS to use while talking with kubernetes apiserver
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may impact scalability by changing the amount of traffic the Kubelet
-sends to the API server.
-Default: 5
+
+ kubeAPIQPS设置与 Kubernetes API 服务器通信时要使用的 QPS(每秒查询数)。
+ 默认值:5
+
-
-
+
kubeAPIBurst
int32
- kubeAPIBurst is the burst to allow while talking with kubernetes apiserver
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may impact scalability by changing the amount of traffic the Kubelet
-sends to the API server.
-Default: 10
+
+ kubeAPIBurst设置与 Kubernetes API 服务器通信时突发的流量级别。
+此字段取值不可以是负数。
+ 默认值:10
+
-
-
+
serializeImagePulls
bool
- serializeImagePulls when enabled, tells the Kubelet to pull images one
+
+ serializeImagePulls被启用时会通知 kubelet 每次仅拉取一个镜像。
+我们建议不要 在所运行的 docker 守护进程版本低于 1.9、使用 aufs
+存储后端的节点上更改默认值。详细信息可参见 Issue #10959。
+ 默认值:true
+
-
-
+
evictionHard
map[string]string
- Map of signal names to quantities that defines hard eviction thresholds. For example: {"memory.available": "300Mi"}.
+
+ evictionHard是一个映射,是从信号名称到定义硬性驱逐阈值的映射。
+例如:{"memory.available": "300Mi"}。
+如果希望显式地禁用,可以在任意资源上将其阈值设置为 0% 或 100%。
+ 默认值:
+
+ memory.available: "100Mi"
+ nodefs.available: "10%"
+ nodefs.inodesFree: "5%"
+ imagefs.available: "15%"
+
+
-
-
+
evictionSoft
map[string]string
- Map of signal names to quantities that defines soft eviction thresholds.
-For example: {"memory.available": "300Mi"}.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may trigger or delay Pod evictions, and may change the allocatable reported
-by the node.
-Default: nil
+
+ evictionSoft是一个映射,是从信号名称到定义软性驱逐阈值的映射。
+例如:{"memory.available": "300Mi"}。
+ 默认值:nil
+
-
-
+
evictionSoftGracePeriod
map[string]string
- Map of signal names to quantities that defines grace periods for each soft eviction signal.
-For example: {"memory.available": "30s"}.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may trigger or delay Pod evictions.
-Default: nil
+
+ evictionSoftGracePeriod是一个映射,是从信号名称到每个软性驱逐信号的宽限期限。
+例如:{"memory.available": "30s"}。
+ 默认值:nil
+
-
-
+
evictionPressureTransitionPeriod
-meta/v1.Duration
+meta/v1.Duration
- Duration for which the kubelet has to wait before transitioning out of an eviction pressure condition.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-lowering it may decrease the stability of the node when the node is overcommitted.
-Default: "5m"
+
+ evictionPressureTransitionPeriod设置 kubelet
+离开驱逐压力状况之前必须要等待的时长。
+ 默认值:"5m"
+
-
-
+
evictionMaxPodGracePeriod
int32
- Maximum allowed grace period (in seconds) to use when terminating pods in
-response to a soft eviction threshold being met. This value effectively caps
-the Pod's TerminationGracePeriodSeconds value during soft evictions.
+
+ evictionMaxPodGracePeriod是指达到软性逐出阈值而引起 Pod 终止时,
+可以赋予的宽限期限最大值(按秒计)。这个值本质上限制了软性逐出事件发生时,
+Pod 可以获得的terminationGracePeriodSeconds。
+ 注意:由于 Issue #64530 的原因,系统中存在一个缺陷,即此处所设置的值会在软性逐出时覆盖
+Pod 的宽限期设置,从而有可能增加 Pod 上原本设置的宽限期限时长。
+这个缺陷会在未来版本中修复。
+ 默认值:0
+
-
-
+
evictionMinimumReclaim
map[string]string
- Map of signal names to quantities that defines minimum reclaims, which describe the minimum
-amount of a given resource the kubelet will reclaim when performing a pod eviction while
-that resource is under pressure. For example: {"imagefs.available": "2Gi"}
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may change how well eviction can manage resource pressure.
-Default: nil
+
+ evictionMinimumReclaim是一个映射,定义信号名称与最小回收量数值之间的关系。
+最小回收量指的是资源压力较大而执行 Pod 驱逐操作时,kubelet 对给定资源的最小回收量。
+例如:{"imagefs.available": "2Gi"}。
+ 默认值:nil
+
-
-
+
podsPerCore
int32
- podsPerCore is the maximum number of pods per core. Cannot exceed MaxPods.
-If 0, this field is ignored.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-changes may cause Pods to fail admission on Kubelet restart, and may change
-the value reported in Node.Status.Capacity[v1.ResourcePods], thus affecting
-future scheduling decisions. Increasing this value may also decrease performance,
-as more Pods can be packed into a single node.
-Default: 0
+
+ podsPerCore设置的是每个核上 Pod 个数上限。此值不能超过maxPods。
+所设值必须是非负整数。如果设置为 0,则意味着对 Pod 个数没有限制。
+ 默认值:0
+
-
-
+
enableControllerAttachDetach
bool
- enableControllerAttachDetach enables the Attach/Detach controller to
+
+ enableControllerAttachDetach用来允许 Attach/Detach
+控制器管理调度到本节点的卷的挂接(attachment)和解除挂接(detachement),
+并且禁止 kubelet 执行任何 attach/detach 操作。
+ 注意:kubelet 不支持挂接 CSI 卷和解除挂接,
+因此对于该用例,此选项必须为 true。
+ 默认值:true
+
-
-
+
protectKernelDefaults
bool
- protectKernelDefaults, if true, causes the Kubelet to error if kernel
+
+ protectKernelDefaults设置为true时,会令 kubelet
+在发现内核参数与预期不符时出错退出。若此字段设置为false,则 kubelet
+会尝试更改内核参数以满足其预期。
+ 默认值:false
+
-
-
+
makeIPTablesUtilChains
bool
- If true, Kubelet ensures a set of iptables rules are present on host.
-These rules will serve as utility rules for various components, e.g. KubeProxy.
-The rules will be created based on IPTablesMasqueradeBit and IPTablesDropBit.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-disabling it will prevent the Kubelet from healing locally misconfigured iptables rules.
-Default: true
+
+ makeIPTablesUtilChains设置为true时,相当于允许 kubelet
+确保一组 iptables 规则存在于宿主机上。这些规则会为不同的组件(例如 kube-proxy)
+提供工具性质的规则。它们是基于iptablesMasqueradeBit和iptablesDropBit
+来创建的。
+ 默认值:true
+
-
-
+
iptablesMasqueradeBit
int32
- iptablesMasqueradeBit is the bit of the iptables fwmark space to mark for SNAT
+
+ iptablesMasqueradeBit是 iptables fwmark 空间中用来为 SNAT
+作标记的位。此值必须介于[0, 31]区间,必须与其他标记位不同。
+ 警告:请确保此值设置与 kube-proxy 中对应的参数设置取值相同。
+ 默认值:14
+
-
-
+
iptablesDropBit
int32
- iptablesDropBit is the bit of the iptables fwmark space to mark for dropping packets.
+
+ iptablesDropBit是 iptables fwmark 空间中用来标记丢弃包的数据位。
+此值必须介于[0, 31]区间,必须与其他标记位不同。
+ 默认值:15
+
-
-
+
featureGates
map[string]bool
- featureGates is a map of feature names to bools that enable or disable alpha/experimental
+
+ featureGates是一个从功能特性名称到布尔值的映射,用来启用或禁用实验性的功能。
+此字段可逐条更改文件 "k8s.io/kubernetes/pkg/features/kube_features.go"
+中所给的内置默认值。
+ 默认值:nil
+
-
-
+
failSwapOn
bool
- failSwapOn tells the Kubelet to fail to start if swap is enabled on the node.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-setting it to true will cause the Kubelet to crash-loop if swap is enabled.
-Default: true
+
+ failSwapOn通知 kubelet 在节点上启用交换分区时拒绝启动。
+ 默认值:true
+
-
-
+
+memorySwap
+MemorySwapConfiguration
+
+
+
+ memorySwap配置容器负载可用的交换内存。
+
+
+
containerLogMaxSize
string
- A quantity defines the maximum size of the container log file before it is rotated.
-For example: "5Mi" or "256Ki".
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may trigger log rotation.
-Default: "10Mi"
+
+ containerLogMaxSize是定义容器日志文件被轮转之前可以到达的最大尺寸。
+例如:"5Mi" 或 "256Ki"。
+ 默认值:"10Mi"
+
-
-
+
containerLogMaxFiles
int32
- Maximum number of container log files that can be present for a container.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-lowering it may cause log files to be deleted.
-Default: 5
+
+ containerLogMaxFiles设置每个容器可以存在的日志文件个数上限。
+ 默认值:"5"
+
-
-
+
configMapAndSecretChangeDetectionStrategy
ResourceChangeDetectionStrategy
- ConfigMapAndSecretChangeDetectionStrategy is a mode in which
-config map and secret managers are running.
-Default: "Watch"
+
+ configMapAndSecretChangeDetectionStrategy是 ConfigMap 和 Secret
+管理器的运行模式。合法值包括:
+
+ Get:kubelet 从 API 服务器直接取回必要的对象;
+ Cache:kubelet 使用 TTL 缓存来管理来自 API 服务器的对象;
+ Watch:kubelet 使用 watch 操作来观察所关心的对象的变更。
+
+ 默认值:"Watch"
+
-
-
+
systemReserved
map[string]string
- systemReserved is a set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G)
+
+ systemReserved是一组资源名称=资源数量对,
+用来描述为非 Kubernetes 组件预留的资源(例如:'cpu=200m,memory=150G')。
+ 目前仅支持 CPU 和内存。更多细节可参见 http://kubernetes.io/zh/docs/user-guide/compute-resources。
+ 默认值:Nil
+
-
-
+
kubeReserved
map[string]string
- A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G) pairs
+
+ kubeReserved是一组资源名称=资源数量对,
+用来描述为 Kubernetes 系统组件预留的资源(例如:'cpu=200m,memory=150G')。
+目前支持 CPU、内存和根文件系统的本地存储。
+更多细节可参见 https://kubernetes.io/zh/docs/concepts/configuration/manage-resources-containers/。
+ 默认值:Nil
+
-
-
-reservedSystemCPUs [Required]
+
+reservedSystemCPUs [必需]
string
- This ReservedSystemCPUs option specifies the cpu list reserved for the host level system threads and kubernetes related threads.
-This provide a "static" CPU list rather than the "dynamic" list by system-reserved and kube-reserved.
-This option overwrites CPUs provided by system-reserved and kube-reserved.
+
+ reservedSystemCPUs选项设置为宿主级系统线程和 Kubernetes
+相关线程所预留的 CPU 列表。此字段提供的是一种“静态”的 CPU 列表,而不是像
+systemReserved和kubeReserved所提供的“动态”列表。
+此选项不支持systemReservedCgroup或kubeReservedCgroup。
+
-
-
+
showHiddenMetricsForVersion
string
- The previous version for which you want to show hidden metrics.
+
+ showHiddenMetricsForVersion是你希望显示隐藏度量值的上一版本。
+只有上一个次版本是有意义的,其他值都是不允许的。
+字段值的格式为<major>.<minor>,例如:1.16。
+此格式的目的是为了确保在下一个版本中有新的度量值被隐藏时,你有机会注意到这类变化,
+而不是当这些度量值在其后的版本中彻底去除时来不及应对。
+ 默认值:""
+
-
-
+
systemReservedCgroup
string
- This flag helps kubelet identify absolute name of top level cgroup used to enforce `SystemReserved` compute resource reservation for OS system daemons.
-Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information.
-Dynamic Kubelet Config (beta): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
-Default: ""
+
+ systemReservedCgroup帮助 kubelet 识别用来为 OS 系统级守护进程实施
+systemReserved计算资源预留时使用的顶级控制组(CGroup)。
+参考 Node Allocatable
+以了解详细信息。
+ 默认值:""
+
-
-
+
+
kubeReservedCgroup
string
- This flag helps kubelet identify absolute name of top level cgroup used to enforce `KubeReserved` compute resource reservation for Kubernetes node system daemons.
-Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information.
-Dynamic Kubelet Config (beta): This field should not be updated without a full node
-reboot. It is safest to keep this value the same as the local config.
-Default: ""
+
+ kubeReservedCgroup 帮助 kubelet 识别用来为 Kubernetes 节点系统级守护进程实施
+kubeReserved计算资源预留时使用的顶级控制组(CGroup)。
+参阅 Node Allocatable
+了解进一步的信息。
+ 默认值:""
+
-
-
+
enforceNodeAllocatable
[]string
- This flag specifies the various Node Allocatable enforcements that Kubelet needs to perform.
-This flag accepts a list of options. Acceptable options are `none`, `pods`, `system-reserved` & `kube-reserved`.
-If `none` is specified, no other options may be specified.
-Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-removing enforcements may reduce the stability of the node. Alternatively, adding
-enforcements may reduce the stability of components which were using more than
-the reserved amount of resources; for example, enforcing kube-reserved may cause
-Kubelets to OOM if it uses more than the reserved resources, and enforcing system-reserved
-may cause system daemons to OOM if they use more than the reserved resources.
-Default: ["pods"]
+
+ 此标志设置 kubelet 需要执行的各类节点可分配资源策略。此字段接受一组选项列表。
+可接受的选项有none、pods、system-reserved和
+kube-reserved。
+ 如果设置了none,则字段值中不可以包含其他选项。
+ 如果列表中包含system-reserved,则必须设置systemReservedCgroup。
+ 如果列表中包含kube-reserved,则必须设置kubeReservedCgroup。
+ 这个字段只有在cgroupsPerQOS被设置为true才被支持。
+ 参阅Node Allocatable
+了解进一步的信息。
+ 默认值:["pods"]
+
-
-
+
allowedUnsafeSysctls
[]string
- A comma separated whitelist of unsafe sysctls or sysctl patterns (ending in ∗).
-Unsafe sysctl groups are kernel.shm∗, kernel.msg∗, kernel.sem, fs.mqueue.∗, and net.∗.
-These sysctls are namespaced but not allowed by default. For example: "kernel.msg∗,net.ipv4.route.min_pmtu"
-Default: []
+
+ 用逗号分隔的白名单列表,其中包含不安全的 sysctl 或 sysctl 模式(以∗结尾)。
+
+ 不安全的 sysctl 组有 kernel.shm∗、kernel.msg∗、
+kernel.sem、fs.mqueue.∗ 和net.∗。
+ 例如:"kernel.msg∗,net.ipv4.route.min\_pmtu"
+ 默认值:[]
+
-
-
+
volumePluginDir
string
- volumePluginDir is the full path of the directory in which to search
+
+ volumePluginDir是用来搜索其他第三方卷插件的目录的路径。
+ 默认值:"/usr/libexec/kubernetes/kubelet-plugins/volume/exec/"
+
-
-
+
providerID
string
- providerID, if set, sets the unique id of the instance that an external provider (i.e. cloudprovider)
-can use to identify a specific node.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may impact the ability of the Kubelet to interact with cloud providers.
-Default: ""
+
+ providerID字段被设置时,指定的是一个外部提供者(即云驱动)实例的唯一 ID,
+该提供者可用来唯一性地标识特定节点。
+ 默认值:""
+
-
-
+
kernelMemcgNotification
bool
- kernelMemcgNotification, if set, the kubelet will integrate with the kernel memcg notification
-to determine if memory eviction thresholds are crossed rather than polling.
-Dynamic Kubelet Config (beta): If dynamically updating this field, consider that
-it may impact the way Kubelet interacts with the kernel.
-Default: false
+
+ kernelMemcgNotification字段如果被设置了,会告知 kubelet 集成内核的
+memcg 通知机制来确定是否超出内存逐出阈值,而不是使用轮询机制来判定。
+ 默认值:false
+
-
-
-logging [Required]
+
+logging [必需]
LoggingConfiguration
- Logging specifies the options of logging.
-Refer [Logs Options](https://github.com/kubernetes/component-base/blob/master/logs/options.go) for more information.
-Defaults:
- Format: text
+
+ logging设置日志机制选项。更多的详细信息科参阅
+日志选项 。
+ 默认值:
+ Format: text
+
-
-
+
enableSystemLogHandler
bool
- enableSystemLogHandler enables system logs via web interface host:port/logs/
-Default: true
+
+ enableSystemLogHandler用来启用通过 Web 接口 host:port/logs/
+访问系统日志的能力。
+ 默认值:true
+
-
-
+
shutdownGracePeriod
-meta/v1.Duration
+meta/v1.Duration
- ShutdownGracePeriod specifies the total duration that the node should delay the shutdown and total grace period for pod termination during a node shutdown.
-Default: "30s"
+
+ shutdownGracePeriod设置节点关闭期间,节点自身需要延迟以及为
+Pod 提供的宽限期限的总时长。
+ 默认值:"0s"
+
-
-
+
shutdownGracePeriodCriticalPods
-meta/v1.Duration
+meta/v1.Duration
- ShutdownGracePeriodCriticalPods specifies the duration used to terminate critical pods during a node shutdown. This should be less than ShutdownGracePeriod.
-For example, if ShutdownGracePeriod=30s, and ShutdownGracePeriodCriticalPods=10s, during a node shutdown the first 20 seconds would be reserved for gracefully terminating normal pods, and the last 10 seconds would be reserved for terminating critical pods.
-Default: "10s"
+
+ shutdownGracePeriodCriticalPods设置节点关闭期间用来终止关键性
+Pod 的时长。此时长要短于shutdownGracePeriod。
+例如,如果shutdownGracePeriod=30s,shutdownGracePeriodCriticalPods=10s,
+在节点关闭期间,前 20 秒钟被预留用来体面终止普通 Pod,后 10 秒钟用来终止关键 Pod。
+ 默认值:"0s"
+
+
+
+shutdownGracePeriodByPodPriority
+[]ShutdownGracePeriodByPodPriority
+
+
+
+ shutdownGracePeriodByPodPriority设置基于 Pod
+相关的优先级类值而确定的体面关闭时间。当 kubelet 收到关闭请求的时候,kubelet
+会针对节点上运行的所有 Pod 发起关闭操作,这些关闭操作会根据 Pod 的优先级确定其宽限期限,
+之后 kubelet 等待所有 Pod 退出。
+ 数组中的每个表项代表的是节点关闭时 Pod 的体面终止时间;这里的 Pod
+的优先级类介于列表中当前优先级类值和下一个表项的优先级类值之间。
+ 例如,要赋予关键 Pod 10 秒钟时间来关闭,赋予优先级>=10000 Pod 20 秒钟时间来关闭,
+赋予其余的 Pod 30 秒钟来关闭。
+ shutdownGracePeriodByPodPriority:
+
+ priority: 2000000000
+ shutdownGracePeriodSeconds: 10
+ priority: 10000
+ shutdownGracePeriodSeconds: 20
+ priority: 0
+ shutdownGracePeriodSeconds: 30
+
+
+ 在退出之前,kubelet 要等待的时间上限为节点上所有优先级类的
+shutdownGracePeriodSeconds的最大值。
+当所有 Pod 都退出或者到达其宽限期限时,kubelet 会释放关闭防护锁。
+此功能要求GracefulNodeShutdown特性门控被启用。
+ 当shutdownGracePeriod或shutdownGracePeriodCriticalPods
+被设置时,此配置字段必须为空。
+ 默认值:nil
+
+
+
+reservedMemory
+[]MemoryReservation
+
+
+
+ reservedMemory给出一个逗号分隔的列表,为 NUMA 节点预留内存。
+ 此参数仅在内存管理器功能特性语境下有意义。内存管理器不会为容器负载分配预留内存。
+例如,如果你的 NUMA0 节点内存为 10Gi,reservedMemory设置为在 NUMA0
+上预留 1Gi 内存,内存管理器会认为其上只有 9Gi 内存可供分配。
+ 你可以设置不同数量的 NUMA 节点和内存类型。你也可以完全忽略这个字段,不过你要清楚,
+所有 NUMA 节点上预留内存的总量要等于通过
+node allocatable
+设置的内存量。
+ 如果至少有一个节点可分配参数设置值非零,则你需要设置至少一个 NUMA 节点。
+ 此外,避免如下设置:
+
+ 在配置值中存在重复项,NUMA 节点和内存类型相同,但配置值不同,这是不允许的。
+ 为任何内存类型设置限制值为零。
+ NUMA 节点 ID 在宿主系统上不存在。/li>
+ 除memory和hugepages-<size>之外的内存类型。
+
+ 默认值:nil
+
+
+
+enableProfilingHandler
+bool
+
+
+
+ enableProfilingHandler启用通过 host:port/debug/pprof/ 接口来执行性能分析。
+ 默认值:true
+
+
+
+enableDebugFlagsHandler
+bool
+
+
+
+ enableDebugFlagsHandler启用通过 host:port/debug/flags/v Web
+接口上的标志设置。
+ 默认值:true
+
+
+
+seccompDefault
+bool
+
+
+
+ seccompDefault字段允许针对所有负载将RuntimeDefault
+设置为默认的 seccomp 配置。这一设置要求对应的SeccompDefault特性门控被启用。
+ 默认值:false
+
+
+
+memoryThrottlingFactor
+float64
+
+
+
+ 当设置 cgroupv2 memory.high以实施MemoryQoS特性时,
+memoryThrottlingFactor用来作为内存限制或节点可分配内存的系数。
+ 减小此系数会为容器控制组设置较低的 high 限制值,从而增大回收压力;反之,
+增大此系数会降低回收压力。更多细节参见 http://kep.k8s.io/2570。
+ 默认值:0.8
+
+
+
+registerWithTaints
+[]core/v1.Taint
+
+
+
+ registerWithTaints是一个由污点组成的数组,包含 kubelet
+注册自身时要向节点对象添加的污点。只有registerNode为true
+时才会起作用,并且仅在节点的最初注册时起作用。
+ 默认值:nil
+
+
+
+registerNode
+bool
+
+
+
+ registerNode启用向 API 服务器的自动注册。
+ 默认值:true
+
-
-
-
-
## `SerializedNodeConfigSource` {#kubelet-config-k8s-io-v1beta1-SerializedNodeConfigSource}
-
-
-
-
+
+SerializedNodeConfigSource 允许对 `v1.NodeConfigSource` 执行序列化操作。
+这一类型供 kubelet 内部使用,以便跟踪动态配置的检查点。
+此资源存在于 kubeletconfig API 组是因为它被当做是对 kubelet 的一种版本化输入。
-Field Description
+字段 描述
-
+
apiVersion stringkubelet.config.k8s.io/v1beta1
kind stringSerializedNodeConfigSource
-
-
-
source
-core/v1.NodeConfigSource
+core/v1.NodeConfigSource
- Source is the source that we are serializing
+
+ source是我们执行序列化的数据源。
+
-
-
+
-
+## `CredentialProvider` {#kubelet-config-k8s-io-v1beta1-CredentialProvider}
-## `HairpinMode` {#kubelet-config-k8s-io-v1beta1-HairpinMode}
-
-(Alias of `string`)
+
+**出现在:**
+- [CredentialProviderConfig](#kubelet-config-k8s-io-v1beta1-CredentialProviderConfig)
+
+CredentialProvider 代表的是要被 kubelet 调用的一个 exec 插件。
+这一插件只会在所拉取的镜像与该插件所处理的镜像匹配时才会被调用(参见 matchImages)。
-HairpinMode denotes how the kubelet should configure networking to handle
-hairpin packets.
+
+字段 描述
+
+name [必需]
+string
+
+
+
+
+ name 是凭据提供者的名称(必需)。此名称必须与 kubelet
+ 所看到的提供者可执行文件的名称匹配。可执行文件必须位于 kubelet 的
+ bin 目录(通过 --image-credential-provider-bin-dir 设置)下。
+
+
+
+matchImages [必需]
+[]string
+
+
+
+matchImages 是一个必须设置的字符串列表,用来匹配镜像以便确定是否要调用此提供者。
+如果字符串之一与 kubelet 所请求的镜像匹配,则此插件会被调用并给予提供凭证的机会。
+镜像应该包含镜像库域名和 URL 路径。
+
+matchImages 中的每个条目都是一个模式字符串,其中可以包含端口号和路径。
+域名部分可以包含统配符,但端口或路径部分不可以。通配符可以用作子域名,例如
+'*.k8s.io' 或 'k8s.*.io',以及顶级域名,如 'k8s.*'。
+对类似 'app*.k8s.io' 这类部分子域名的匹配也是支持的。
+每个通配符只能用来匹配一个子域名段,所以 '*.io' 不会匹配 '*.k8s.io'。
+
+镜像与 matchImages 之间存在匹配时,以下条件都要满足:
+
+
+ 二者均包含相同个数的域名部分,并且每个域名部分都对应匹配;
+ matchImages 条目中的 URL 路径部分必须是目标镜像的 URL 路径的前缀;
+ 如果 matchImages 条目中包含端口号,则端口号也必须与镜像端口号匹配。
+
+
+matchImages 的一些示例如下:
+
+123456789.dkr.ecr.us-east-1.amazonaws.com
+*.azurecr.io
+gcr.io
+. .registry.io
+registry.io:8080/path
+
+
+
+defaultCacheDuration [必需]
+meta/v1.Duration
+
+
+
+
+ defaultCacheDuration 是插件在内存中缓存凭据的默认时长,
+ 在插件响应中没有给出缓存时长时,使用这里设置的值。此字段是必需的。
+
+
+
+apiVersion [必需]
+string
+
+
+
+
+ 要求 exec 插件 CredentialProviderRequest 请求的输入版本。
+ 所返回的 CredentialProviderResponse 必须使用与输入相同的编码版本。当前支持的值有:
+
+
+credentialprovider.kubelet.k8s.io/v1beta1
+
+
+
+args
+[]string
+
+
+
+ 在执行插件可执行文件时要传递给命令的参数。
+
+
+env
+[]ExecEnvVar
+
+
+
+
+ env 定义要提供给插件进程的额外的环境变量。
+ 这些环境变量会与主机上的其他环境变量以及 client-go 所使用的环境变量组合起来,
+ 一起传递给插件。
+
+
+
+
+
-
+## `ExecEnvVar` {#kubelet-config-k8s-io-v1beta1-ExecEnvVar}
+
+
+**出现在:**
+
+- [CredentialProvider](#kubelet-config-k8s-io-v1beta1-CredentialProvider)
+
+
+ExecEnvVar 用来在执行基于 exec 的凭据插件时设置环境变量。
+
+
+字段 描述
+
+
+name [必需]
+string
+
+
+
+
+ 无描述
+
+
+
+value [必需]
+string
+
+
+
+
+ 无描述
+
+
+
+
+
## `KubeletAnonymousAuthentication` {#kubelet-config-k8s-io-v1beta1-KubeletAnonymousAuthentication}
-
-
-
+
+**出现在:**
- [KubeletAuthentication](#kubelet-config-k8s-io-v1beta1-KubeletAuthentication)
-
-
-
-Field Description
+字段 描述
-
-
enabled
bool
- enabled allows anonymous requests to the kubelet server.
-Requests that are not rejected by another authentication method are treated as anonymous requests.
-Anonymous requests have a username of system:anonymous, and a group name of system:unauthenticated.
+
+ enabled允许匿名用户向 kubelet 服务器发送请求。
+未被其他身份认证方法拒绝的请求都会被当做匿名请求。
+匿名请求对应的用户名为system:anonymous,对应的用户组名为
+system:unauthenticated。
+
-
-
-
-
## `KubeletAuthentication` {#kubelet-config-k8s-io-v1beta1-KubeletAuthentication}
-
-
-
+
+**出现在:**
- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
-
-
-
-Field Description
+字段 描述
-
-
x509
KubeletX509Authentication
- x509 contains settings related to x509 client certificate authentication
+
+ x509包含与 x509 客户端证书认证相关的配置。
+
-
-
+
webhook
KubeletWebhookAuthentication
- webhook contains settings related to webhook bearer token authentication
+
+ webhook包含与 Webhook 持有者令牌认证相关的配置。
+
-
-
+
anonymous
KubeletAnonymousAuthentication
- anonymous contains settings related to anonymous authentication
+
+ anonymous包含与匿名身份认证相关的配置信息。
+
-
-
-
-
## `KubeletAuthorization` {#kubelet-config-k8s-io-v1beta1-KubeletAuthorization}
-
-
-
+
+**出现在:**
- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
-
-
-
-Field Description
+字段 描述
-
-
mode
KubeletAuthorizationMode
- mode is the authorization mode to apply to requests to the kubelet server.
-Valid values are AlwaysAllow and Webhook.
-Webhook mode uses the SubjectAccessReview API to determine authorization.
+
+ mode>是应用到 kubelet 服务器所接收到的请求上的鉴权模式。合法值包括
+AlwaysAllow和Webhook。
+Webhook 模式使用 SubjectAccessReview API 来确定鉴权。
+
-
-
+
webhook
KubeletWebhookAuthorization
- webhook contains settings related to Webhook authorization.
+
+ webhook包含与 Webhook 鉴权相关的配置信息。
+
-
-
-
-
## `KubeletAuthorizationMode` {#kubelet-config-k8s-io-v1beta1-KubeletAuthorizationMode}
-
+
+
+(`string` 类型的别名)
-
+
+**出现在:**
- [KubeletAuthorization](#kubelet-config-k8s-io-v1beta1-KubeletAuthorization)
-
-
-
-
-
-
-
## `KubeletWebhookAuthentication` {#kubelet-config-k8s-io-v1beta1-KubeletWebhookAuthentication}
-
-
-
+
+**出现在:**
- [KubeletAuthentication](#kubelet-config-k8s-io-v1beta1-KubeletAuthentication)
-
-
-
-Field Description
+字段 描述
-
-
enabled
bool
- enabled allows bearer token authentication backed by the tokenreviews.authentication.k8s.io API
+
+ enabled允许使用tokenreviews.authentication.k8s.io
+API 来提供持有者令牌身份认证。
+
-
-
+
cacheTTL
-meta/v1.Duration
+meta/v1.Duration
- cacheTTL enables caching of authentication results
+
+ cacheTTL启用对身份认证结果的缓存。
+
-
-
-
-
## `KubeletWebhookAuthorization` {#kubelet-config-k8s-io-v1beta1-KubeletWebhookAuthorization}
-
-
-
+
+**出现在:**
- [KubeletAuthorization](#kubelet-config-k8s-io-v1beta1-KubeletAuthorization)
-
-
-
-Field Description
+字段 描述
-
-
cacheAuthorizedTTL
-meta/v1.Duration
+meta/v1.Duration
- cacheAuthorizedTTL is the duration to cache 'authorized' responses from the webhook authorizer.
+
+ cacheAuthorizedTTL设置来自 Webhook 鉴权组件的 'authorized'
+响应的缓存时长。
+
-
-
cacheUnauthorizedTTL
-meta/v1.Duration
+meta/v1.Duration
- cacheUnauthorizedTTL is the duration to cache 'unauthorized' responses from the webhook authorizer.
+
+ cacheUnauthorizedTTL设置来自 Webhook 鉴权组件的 'unauthorized'
+响应的缓存时长。
+
-
-
-
-
## `KubeletX509Authentication` {#kubelet-config-k8s-io-v1beta1-KubeletX509Authentication}
-
-
-
+
+**出现在:**
- [KubeletAuthentication](#kubelet-config-k8s-io-v1beta1-KubeletAuthentication)
-
-
-
-Field Description
+字段 描述
-
-
clientCAFile
string
- clientCAFile is the path to a PEM-encoded certificate bundle. If set, any request presenting a client certificate
-signed by one of the authorities in the bundle is authenticated with a username corresponding to the CommonName,
-and groups corresponding to the Organization in the client certificate.
+
+ clientCAFile是一个指向 PEM 编发的证书包的路径。
+如果设置了此字段,则能够提供由此证书包中机构之一所签名的客户端证书的请求会被成功认证,
+并且其用户名对应于客户端证书的CommonName、组名对应于客户端证书的
+Organization。
+
-
-
-
-
-
-## `ResourceChangeDetectionStrategy` {#kubelet-config-k8s-io-v1beta1-ResourceChangeDetectionStrategy}
-
-(Alias of `string`)
+## `MemoryReservation` {#kubelet-config-k8s-io-v1beta1-MemoryReservation}
+
+**出现在:**
- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
-
-ResourceChangeDetectionStrategy denotes a mode in which internal
-managers (secret, configmap) are discovering object changes.
-
-
-
-
-
-
-
-## `LoggingConfiguration` {#LoggingConfiguration}
-
-
-
-
-**Appears in:**
-
-- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
-
-
-LoggingConfiguration contains logging options
-Refer [Logs Options](https://github.com/kubernetes/component-base/blob/master/logs/options.go) for more information.
+
+MemoryReservation 为每个 NUMA 节点设置不同类型的内存预留。
-Field Description
+字段 描述
-
-
-format [Required]
+numaNode [必需]
+int32
+
+
+
+ NUMA 节点
+
+
+
+limits [必需]
+core/v1.ResourceList
+
+
+
+ 资源列表
+
+
+
+
+
+## `MemorySwapConfiguration` {#kubelet-config-k8s-io-v1beta1-MemorySwapConfiguration}
+
+
+**出现在:**
+
+- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
+
+
+字段 描述
+
+
+swapBehavior
string
- Format Flag specifies the structure of log messages.
-default value of format is `text`
+
+ swapBehavior配置容器负载可以使用的交换内存。可以是
+
+ ""、"LimitedSwap":工作负载的内存和交换分区总用量不能超过 Pod 的内存限制;
+ "UnlimitedSwap":工作负载可以无限制地使用交换分区,上限是可分配的约束。
+
+
-
-
-sanitization [Required]
+
+
+
+## `ResourceChangeDetectionStrategy` {#kubelet-config-k8s-io-v1beta1-ResourceChangeDetectionStrategy}
+
+
+(`string` 类型的别名)
+
+
+**出现在:**
+
+- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
+
+
+ResourceChangeDetectionStrategy 给出的是内部管理器(ConfigMap、Secret)
+用来发现对象变化的模式。
+
+## `ShutdownGracePeriodByPodPriority` {#kubelet-config-k8s-io-v1beta1-ShutdownGracePeriodByPodPriority}
+
+
+**出现在:**
+
+- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
+
+
+ShutdownGracePeriodByPodPriority 基于 Pod 关联的优先级类数值来为其设置关闭宽限时间。
+
+
+字段 描述
+
+
+priority [必需]
+int32
+
+
+
+ priority是与关闭宽限期限相关联的优先级值。
+
+
+
+shutdownGracePeriodSeconds [必需]
+int64
+
+
+
+ shutdownGracePeriodSeconds是按秒数给出的关闭宽限期限。
+
+
+
+
+
+## `FormatOptions` {#FormatOptions}
+
+
+**出现在:**
+
+- [LoggingConfiguration](#LoggingConfiguration)
+
+
+
+FormatOptions 包含为不同日志格式提供的选项。
+
+
+
+字段 描述
+
+
+json [必需]
+JSONOptions
+
+
+
+ [试验功能] json 包含为 "json" 日志格式提供的选项。
+
+
+
+
+
+
+## `JSONOptions` {#JSONOptions}
+
+
+**出现在:**
+
+- [FormatOptions](#FormatOptions)
+
+
+
+JSONOptions 包含为 "json" 日志格式提供的选项。
+
+
+
+字段 描述
+
+splitStream [必需]
bool
- [Experimental] When enabled prevents logging of fields tagged as sensitive (passwords, keys, tokens).
-Runtime log sanitization may introduce significant computation overhead and therefore should not be enabled in production.`)
+
+
+ [试验功能] splitStream 将错误信息重定向到标准错误输出(stderr),
+而将提示信息重定向到标准输出(stdout),并为二者提供缓存。
+默认设置是将二者都写出到标准输出,并且不提供缓存。
+
+
+
+
+infoBufferSize [必需]
+k8s.io/apimachinery/pkg/api/resource.QuantityValue
+
+
+
+
+ [试验功能] infoBufferSize 在分离数据流时用来设置提示数据流的大小。
+默认值为 0,相当于禁止缓存。
+
+
-
-
+
+## `LoggingConfiguration` {#LoggingConfiguration}
+
+
+**出现在:**
+
+- [KubeletConfiguration](#kubelet-config-k8s-io-v1beta1-KubeletConfiguration)
+
+
+LoggingConfiguration 包含日志选项。
+参考 [Logs Options](https://github.com/kubernetes/component-base/blob/master/logs/options.go)
+以了解更多信息。
+
+
+字段 描述
+
+
+format [必需]
+string
+
+
+
+
+ format 设置日志消息的结构。默认的格式取值为 text。
+
+
+
+
+flushFrequency [必需]
+time.Duration
+
+
+
+
+ 对日志进行清洗的最大间隔纳秒数(例如,1s = 1000000000)。
+ 如果所选的日志后端在写入日志消息时不提供缓存,则此配置会被忽略。
+
+
+
+
+verbosity [必需]
+uint32
+
+
+
+
+ verbosity 用来确定日志消息记录的详细程度阈值。默认值为 0,
+意味着仅记录最重要的消息。数值越大,额外的消息越多。出错消息总是会被记录下来。
+
+
+
+
+vmodule [必需]
+VModuleConfiguration
+
+
+
+
+ vmodule 会在单个文件层面重载 verbosity 阈值的设置。
+这一选项仅支持 "text" 日志格式。
+
+
+
+
+options [必需]
+FormatOptions
+
+
+
+
+ [试验功能] options 中包含特定于不同日志格式的配置参数。
+只有针对所选格式的选项会被使用,但是合法性检查时会查看所有选项配置。
+
+
+
+
+
+
+## `VModuleConfiguration` {#VModuleConfiguration}
+
+
+(`[]k8s.io/component-base/config/v1alpha1.VModuleItem` 类型的别名)
+
+
+**出现在:**
+
+- [LoggingConfiguration](#LoggingConfiguration)
+
+
+VModuleConfiguration 是一个集合,其中包含一个个文件名(或文件名模式)
+及其对应的详细程度阈值。
+
diff --git a/content/zh/docs/reference/glossary/aggregation-layer.md b/content/zh/docs/reference/glossary/aggregation-layer.md
index 9ad14962cf..0d16d12aed 100644
--- a/content/zh/docs/reference/glossary/aggregation-layer.md
+++ b/content/zh/docs/reference/glossary/aggregation-layer.md
@@ -4,7 +4,7 @@ id: aggregation-layer
date: 2018-10-08
full_link: /zh/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/
short_description: >
- 聚合层允许您在自己的集群上安装额外的 Kubernetes 风格的 API。
+ 聚合层允许你在自己的集群上安装额外的 Kubernetes 风格的 API。
aka:
tags:
@@ -36,7 +36,7 @@ tags:
The aggregation layer lets you install additional Kubernetes-style APIs in your cluster.
-->
-聚合层允许您在自己的集群上安装额外的 Kubernetes 风格的 API。
+聚合层允许你在自己的集群上安装额外的 Kubernetes 风格的 API。
@@ -45,4 +45,5 @@ tags:
When you've configured the {{< glossary_tooltip text="Kubernetes API Server" term_id="kube-apiserver" >}} to [support additional APIs](/docs/tasks/extend-kubernetes/configure-aggregation-layer/), you can add `APIService` objects to "claim" a URL path in the Kubernetes API.
-->
-当您配置了 {{< glossary_tooltip text="Kubernetes API Server" term_id="kube-apiserver" >}} 来 [支持额外的 API](/zh/docs/tasks/extend-kubernetes/configure-aggregation-layer/),您就可以在 Kubernetes API 中增加 `APIService` 对象来 "申领(Claim)" 一个 URL 路径。
+当你配置了 {{< glossary_tooltip text="Kubernetes API Server" term_id="kube-apiserver" >}} 来 [支持额外的 API](/zh/docs/tasks/extend-kubernetes/configure-aggregation-layer/),
+你就可以在 Kubernetes API 中增加 `APIService` 对象来 "申领(Claim)" 一个 URL 路径。
diff --git a/content/zh/docs/reference/glossary/api-eviction.md b/content/zh/docs/reference/glossary/api-eviction.md
index fc5c87c33f..0f1aabd435 100644
--- a/content/zh/docs/reference/glossary/api-eviction.md
+++ b/content/zh/docs/reference/glossary/api-eviction.md
@@ -38,10 +38,21 @@ You can request eviction either by directly calling the Eviction API
using a client of the kube-apiserver, like the `kubectl drain` command.
When an `Eviction` object is created, the API server terminates the Pod.
+API-initiated evictions respect your configured [`PodDisruptionBudgets`](/docs/tasks/run-application/configure-pdb/)
+and [`terminationGracePeriodSeconds`](/docs/concepts/workloads/pods/pod-lifecycle#pod-termination).
+
API-initiated eviction is not the same as [node-pressure eviction](/docs/concepts/scheduling-eviction/eviction/#kubelet-eviction).
-->
你可以通过 kube-apiserver 的客户端,比如 `kubectl drain` 这样的命令,直接调用 Eviction API 发起驱逐。
当 `Eviction` 对象创建出来之后,该对象将驱动 API 服务器终止选定的Pod。
+API 发起的驱逐取决于你配置的 [`PodDisruptionBudgets`](/zh/docs/tasks/run-application/configure-pdb/)
+和 [`terminationGracePeriodSeconds`](/zh/docs/concepts/workloads/pods/pod-lifecycle#pod-termination)。
+
API 发起的驱逐不同于
[节点压力引发的驱逐](/zh/docs/concepts/scheduling-eviction/eviction/#kubelet-eviction)。
+
+
+* 有关详细信息,请参阅 [API 发起的驱逐](/zh/docs/concepts/scheduling-eviction/api-eviction/)。
\ No newline at end of file
diff --git a/content/zh/docs/reference/glossary/app-container.md b/content/zh/docs/reference/glossary/app-container.md
index 3773e1c1b8..3980937a9d 100644
--- a/content/zh/docs/reference/glossary/app-container.md
+++ b/content/zh/docs/reference/glossary/app-container.md
@@ -42,6 +42,6 @@ once the application container has started.
If a pod doesn't have any init containers configured, all the containers in that pod are app containers.
-->
-初始化容器使您可以分离对于{{< glossary_tooltip text="工作负载" term_id="workload" >}}
+初始化容器使你可以分离对于{{< glossary_tooltip text="工作负载" term_id="workload" >}}
整体而言很重要的初始化细节,并且一旦应用容器启动,它不需要继续运行。
如果 pod 没有配置任何初始化容器,则该 pod 中的所有容器都是应用程序容器。
\ No newline at end of file
diff --git a/content/zh/docs/reference/glossary/cadvisor.md b/content/zh/docs/reference/glossary/cadvisor.md
index c2d6a00e80..8545490084 100644
--- a/content/zh/docs/reference/glossary/cadvisor.md
+++ b/content/zh/docs/reference/glossary/cadvisor.md
@@ -17,7 +17,7 @@ id: cadvisor
date: 2021-12-09
full_link: https://github.com/google/cadvisor/
short_description: >
- Tool that provides understanding of the resource usage and perfomance characteristics for containers
+ Tool that provides understanding of the resource usage and performance characteristics for containers
aka:
tags:
- tool
diff --git a/content/zh/docs/reference/glossary/cloud-controller-manager.md b/content/zh/docs/reference/glossary/cloud-controller-manager.md
index 3d33b8c7fe..7fc039db36 100644
--- a/content/zh/docs/reference/glossary/cloud-controller-manager.md
+++ b/content/zh/docs/reference/glossary/cloud-controller-manager.md
@@ -33,18 +33,17 @@ that embeds cloud-specific control logic. The cloud controller manager lets you
cluster into your cloud provider's API, and separates out the components that interact
with that cloud platform from components that only interact with your cluster.
-->
-云控制器管理器是指嵌入特定云的控制逻辑的
+`cloud-controller-manager` 是指嵌入特定云的控制逻辑之
{{< glossary_tooltip text="控制平面" term_id="control-plane" >}}组件。
-云控制器管理器使得你可以将你的集群连接到云提供商的 API 之上,
+`cloud-controller-manager` 允许你将你的集群连接到云提供商的 API 之上,
并将与该云平台交互的组件同与你的集群交互的组件分离开来。
-
通过分离 Kubernetes 和底层云基础设置之间的互操作性逻辑,
-云控制器管理器组件使云提供商能够以不同于 Kubernetes 主项目的
+`cloud-controller-manager` 组件使云提供商能够以不同于 Kubernetes 主项目的
步调发布新特征。
diff --git a/content/zh/docs/reference/glossary/cluster-operations.md b/content/zh/docs/reference/glossary/cluster-operations.md
index 43a9bba4b0..4067984ac5 100644
--- a/content/zh/docs/reference/glossary/cluster-operations.md
+++ b/content/zh/docs/reference/glossary/cluster-operations.md
@@ -38,5 +38,5 @@ scale the cluster; performing software upgrades; implementing security
controls; adding or removing storage; configuring cluster networking;
managing cluster-wide observability; and responding to events.
-->
-群集操作工作的示例包括:部署新节点来扩容集群;执行软件升级;实施安全控制;
+集群操作工作的示例包括:部署新节点来扩容集群;执行软件升级;实施安全控制;
添加或删除存储;配置集群网络;管理集群范围的可观测性;响应集群事件。
\ No newline at end of file
diff --git a/content/zh/docs/reference/glossary/cluster.md b/content/zh/docs/reference/glossary/cluster.md
index 74d48ff2c2..070b318283 100644
--- a/content/zh/docs/reference/glossary/cluster.md
+++ b/content/zh/docs/reference/glossary/cluster.md
@@ -32,7 +32,8 @@ tags:
A set of worker machines, called {{< glossary_tooltip text="nodes" term_id="node" >}},
that run containerized applications. Every cluster has at least one worker node.
-->
-集群由一组被称作节点的机器组成。这些节点上运行 Kubernetes 所管理的容器化应用。集群具有至少一个工作节点。
+集群是由一组被称作节点的机器组成,这些节点上会运行由 Kubernetes 所管理的容器化应用。
+且每个集群至少有一个工作节点。
-工作节点托管作为应用负载的组件的 Pod 。控制平面管理集群中的工作节点和 Pod 。
-为集群提供故障转移和高可用性,这些控制平面一般跨多主机运行,集群跨多个节点运行。
+工作节点会托管所谓的 Pods,而 Pod 就是作为应用负载的组件。
+控制平面管理集群中的工作节点和 Pods。
+为集群提供故障转移和高可用性,
+这些控制平面一般跨多主机运行,而集群也会跨多个节点运行。
diff --git a/content/zh/docs/reference/glossary/configmap.md b/content/zh/docs/reference/glossary/configmap.md
index be80c84f61..cc22e9de56 100644
--- a/content/zh/docs/reference/glossary/configmap.md
+++ b/content/zh/docs/reference/glossary/configmap.md
@@ -41,4 +41,4 @@ environment variables, command-line arguments, or as configuration files in a
A ConfigMap allows you to decouple environment-specific configuration from your {{< glossary_tooltip text="container images" term_id="image" >}}, so that your applications are easily portable.
-->
-ConfigMap 将您的环境配置信息和 {{< glossary_tooltip text="容器镜像" term_id="image" >}} 解耦,便于应用配置的修改。
+ConfigMap 将你的环境配置信息和 {{< glossary_tooltip text="容器镜像" term_id="image" >}} 解耦,便于应用配置的修改。
diff --git a/content/zh/docs/reference/glossary/customresourcedefinition.md b/content/zh/docs/reference/glossary/customresourcedefinition.md
index ee0548e78d..c29e02d8c5 100644
--- a/content/zh/docs/reference/glossary/customresourcedefinition.md
+++ b/content/zh/docs/reference/glossary/customresourcedefinition.md
@@ -4,7 +4,7 @@ id: CustomResourceDefinition
date: 2018-04-12
full_link: /zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/
short_description: >
- 通过定制化的代码给您的 Kubernetes API 服务器增加资源对象,而无需编译完整的定制 API 服务器。
+ 通过定制化的代码给你的 Kubernetes API 服务器增加资源对象,而无需编译完整的定制 API 服务器。
aka:
tags:
@@ -33,7 +33,7 @@ tags:
Custom code that defines a resource to add to your Kubernetes API server without building a complete custom server.
-->
- 通过定制化的代码给您的 Kubernetes API 服务器增加资源对象,而无需编译完整的定制 API 服务器。
+ 通过定制化的代码给你的 Kubernetes API 服务器增加资源对象,而无需编译完整的定制 API 服务器。
@@ -41,5 +41,6 @@ tags:
Custom Resource Definitions let you extend the Kubernetes API for your environment if the publicly supported API resources can't meet your needs.
-->
-当 Kubernetes 公开支持的 API 资源不能满足您的需要时,定制资源对象(Custom Resource Definitions)让您可以在您的环境上扩展 Kubernetes API。
+当 Kubernetes 公开支持的 API 资源不能满足你的需要时,
+定制资源对象(Custom Resource Definitions)让你可以在你的环境上扩展 Kubernetes API。
diff --git a/content/zh/docs/reference/glossary/disruption.md b/content/zh/docs/reference/glossary/disruption.md
index 2b59797a39..6cfc0a1809 100644
--- a/content/zh/docs/reference/glossary/disruption.md
+++ b/content/zh/docs/reference/glossary/disruption.md
@@ -41,7 +41,7 @@ Kubernetes terms that an _involuntary disruption_.
See [Disruptions](/docs/concepts/workloads/pods/disruptions/) for more information.
-->
-如果您作为一个集群操作人员,销毁了一个从属于某个应用的 Pod, Kubernetes 视之为 _自愿干扰(Voluntary Disruption)_。如果由于节点故障
-或者影响更大区域故障的断电导致 Pod 离线,kubernetes 视之为 _非愿干扰(Involuntary Disruption)_。
+如果你作为一个集群操作人员,销毁了一个从属于某个应用的 Pod, Kubernetes 视之为**自愿干扰(Voluntary Disruption)**。
+如果由于节点故障 或者影响更大区域故障的断电导致 Pod 离线,kubernetes 视之为**非愿干扰(Involuntary Disruption)**。
更多信息请查阅[Disruptions](/zh/docs/concepts/workloads/pods/disruptions/)
\ No newline at end of file
diff --git a/content/zh/docs/reference/glossary/dockershim.md b/content/zh/docs/reference/glossary/dockershim.md
new file mode 100644
index 0000000000..22570a4b17
--- /dev/null
+++ b/content/zh/docs/reference/glossary/dockershim.md
@@ -0,0 +1,40 @@
+---
+title: Dockershim
+id: dockershim
+date: 2022-04-15
+full_link: /zh/dockershim
+short_description: >
+ dockershim 是 Kubernetes v1.23 及之前版本中的一个组件,Kubernetes 系统组件通过它与 Docker Engine 通信。
+
+aka:
+tags:
+- fundamental
+---
+
+
+
+
+
+dockershim 是 Kubernetes v1.23 及之前版本中的一个组件。
+Kubernetes 系统组件通过它与 {{< glossary_tooltip text="Docker Engine" term_id="docker" >}} 通信。
+
+
+
+从 Kubernetes v1.24 开始,dockershim 已从 Kubernetes 中移除.
+想了解更多信息,可参考[移除 Dockershim 的常见问题](/zh/dockershim)。
\ No newline at end of file
diff --git a/content/zh/docs/reference/glossary/downstream.md b/content/zh/docs/reference/glossary/downstream.md
index cba0229cb9..154e1f0479 100644
--- a/content/zh/docs/reference/glossary/downstream.md
+++ b/content/zh/docs/reference/glossary/downstream.md
@@ -27,7 +27,7 @@ tags:
-->
可以指:Kubernetes 生态系统中依赖于核心 Kubernetes 代码库或分支代码库的代码。
@@ -39,6 +39,6 @@ May refer to: code in the Kubernetes ecosystem that depends upon the core Kubern
* In **GitHub** or **git**: The convention is to refer to a forked repo as *downstream*, whereas the source repo is considered *upstream*.
-->
-* 在 **Kubernetes 社区**中:*下游(downstream)* 在人们交流中常用来表示那些依赖核心 Kubernetes 代码库的生态系统、代码或者第三方工具。例如,Kubernete 的一个新特性可以被*下游(downstream)* 应用采用,以提升它们的功能性。
+* 在 **Kubernetes 社区**中:*下游(downstream)* 在人们交流中常用来表示那些依赖核心 Kubernetes 代码库的生态系统、代码或者第三方工具。例如,Kubernetes 的一个新特性可以被*下游(downstream)* 应用采用,以提升它们的功能性。
* 在 **GitHub** 或 **git** 中:约定用*下游(downstream)* 表示分支代码库,源代码库被认为是*上游(upstream)*。
diff --git a/content/zh/docs/reference/glossary/ephemeral-container.md b/content/zh/docs/reference/glossary/ephemeral-container.md
index d937404797..a317bbfb10 100644
--- a/content/zh/docs/reference/glossary/ephemeral-container.md
+++ b/content/zh/docs/reference/glossary/ephemeral-container.md
@@ -4,12 +4,12 @@ id: ephemeral-container
date: 2019-08-26
full_link: /zh/docs/concepts/workloads/pods/ephemeral-containers/
short_description: >
- 您可以在 Pod 中临时运行的一种容器类型
+ 你可以在 Pod 中临时运行的一种容器类型
aka:
tags:
- fundamental
---
- 您可以在 {{< glossary_tooltip term_id="pod" >}} 中临时运行的一种 {{< glossary_tooltip term_id="container" >}} 类型。
+ 你可以在 {{< glossary_tooltip term_id="pod" >}} 中临时运行的一种 {{< glossary_tooltip term_id="container" >}} 类型。
-etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。
+`etcd` 是兼顾一致性与高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。
-您的 Kubernetes 集群的 etcd 数据库通常需要有个备份计划。
+你的 Kubernetes 集群的 `etcd` 数据库通常需要有个[备份](/zh/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster)计划。
-要了解 etcd 更深层次的信息,请参考 [etcd 文档](https://etcd.io/docs/)。
+如果想要更深入的了解 `etcd`,请参考 [etcd 文档](https://etcd.io/docs/)。
diff --git a/content/zh/docs/reference/glossary/event.md b/content/zh/docs/reference/glossary/event.md
index fb8a4401aa..37d143e60b 100644
--- a/content/zh/docs/reference/glossary/event.md
+++ b/content/zh/docs/reference/glossary/event.md
@@ -48,9 +48,9 @@ Events should be treated as informative, best-effort, supplemental data.
事件应该被视为一种告知性质的、尽力而为的、补充性质的数据。
-在 Kubernetes 中,[审计](/zh/docs/tasks/debug-application-cluster/audit/)
+在 Kubernetes 中,[审计](/zh/docs/tasks/debug/debug-cluster/audit/)
机制会生成一种不同种类的 Event 记录(API 组为 `audit.k8s.io`)。
diff --git a/content/zh/docs/reference/glossary/kops.md b/content/zh/docs/reference/glossary/kops.md
index d3241b763e..1719e2a8a6 100644
--- a/content/zh/docs/reference/glossary/kops.md
+++ b/content/zh/docs/reference/glossary/kops.md
@@ -56,7 +56,7 @@ Support for using kops with GCE and VMware vSphere are in alpha.
* The ability to directly provision, or to generate Terraform manifests
-->
-`kops` 为您的集群提供了:
+`kops` 为你的集群提供了:
* 全自动化安装
* 基于 DNS 的集群标识
@@ -69,4 +69,5 @@ Support for using kops with GCE and VMware vSphere are in alpha.
You can also build your own cluster using {{< glossary_tooltip term_id="kubeadm" >}} as a building block. `kops` builds on the kubeadm work.
-->
-您也可以将自己的集群作为一个构造块,使用 {{< glossary_tooltip term_id="kubeadm" >}} 构造集群。`kops` 是建立在 kubeadm 之上的。
+你也可以将自己的集群作为一个构造块,使用 {{< glossary_tooltip term_id="kubeadm" >}} 构造集群。
+`kops` 是建立在 kubeadm 之上的。
diff --git a/content/zh/docs/reference/glossary/kube-apiserver.md b/content/zh/docs/reference/glossary/kube-apiserver.md
index 05f9605b2a..189ecfc36c 100644
--- a/content/zh/docs/reference/glossary/kube-apiserver.md
+++ b/content/zh/docs/reference/glossary/kube-apiserver.md
@@ -31,9 +31,9 @@ tags:
{{< glossary_tooltip text="control plane" term_id="control-plane" >}} that exposes the Kubernetes API.
The API server is the front end for the Kubernetes control plane.
-->
-API 服务器是 Kubernetes {{< glossary_tooltip text="控制面" term_id="control-plane" >}}的组件,
-该组件公开了 Kubernetes API。
-API 服务器是 Kubernetes 控制面的前端。
+API 服务器是 Kubernetes {{< glossary_tooltip text="控制平面" term_id="control-plane" >}}的组件,
+该组件负责公开了 Kubernetes API,负责处理接受请求的工作。
+API 服务器是 Kubernetes 控制平面的前端。
@@ -43,5 +43,5 @@ kube-apiserver is designed to scale horizontally—that is, it scales by dep
You can run several instances of kube-apiserver and balance traffic between those instances.
-->
Kubernetes API 服务器的主要实现是 [kube-apiserver](/zh/docs/reference/command-line-tools-reference/kube-apiserver/)。
-kube-apiserver 设计上考虑了水平伸缩,也就是说,它可通过部署多个实例进行伸缩。
-你可以运行 kube-apiserver 的多个实例,并在这些实例之间平衡流量。
+`kube-apiserver` 设计上考虑了水平扩缩,也就是说,它可通过部署多个实例来进行扩缩。
+你可以运行 `kube-apiserver` 的多个实例,并在这些实例之间平衡流量。
diff --git a/content/zh/docs/reference/glossary/kube-controller-manager.md b/content/zh/docs/reference/glossary/kube-controller-manager.md
index 43aa192d17..788817eea5 100644
--- a/content/zh/docs/reference/glossary/kube-controller-manager.md
+++ b/content/zh/docs/reference/glossary/kube-controller-manager.md
@@ -31,10 +31,13 @@ tags:
-运行{{< glossary_tooltip text="控制器" term_id="controller" >}}进程的控制平面组件。
-
-
+`kube-controller-manager` 是{{< glossary_tooltip text="控制平面" term_id="control-plane" >}}的组件,
+负责运行{{< glossary_tooltip text="控制器" term_id="controller" >}}进程。
+
+
从逻辑上讲,每个{{< glossary_tooltip text="控制器" term_id="controller" >}}都是一个单独的进程,
-但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。
+但是为了降低复杂性,它们都被编译到同一个可执行文件,并在同一个进程中运行。
diff --git a/content/zh/docs/reference/glossary/kube-scheduler.md b/content/zh/docs/reference/glossary/kube-scheduler.md
index 9d6a1842fb..c2964d0d74 100644
--- a/content/zh/docs/reference/glossary/kube-scheduler.md
+++ b/content/zh/docs/reference/glossary/kube-scheduler.md
@@ -33,7 +33,9 @@ Control plane component that watches for newly created
{{< glossary_tooltip term_id="node" text="node">}}, and selects a node for them
to run on.-->
- 控制平面组件,负责监视新创建的、未指定运行{{< glossary_tooltip term_id="node" text="节点(node)">}}的 {{< glossary_tooltip term_id="pod" text="Pods" >}},选择节点让 Pod 在上面运行。
+ `kube-scheduler` 是{{< glossary_tooltip text="控制平面" term_id="control-plane" >}}的组件,
+ 负责监视新创建的、未指定运行{{< glossary_tooltip term_id="node" text="节点(node)">}}的 {{< glossary_tooltip term_id="pod" text="Pods" >}},
+ 并选择节点来让 Pod 在上面运行。
@@ -41,4 +43,5 @@ to run on.-->
Factors 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 deadlines.
-->
-调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。
+调度决策考虑的因素包括单个 Pod 及 Pods 集合的资源需求、软硬件及策略约束、
+亲和性及反亲和性规范、数据位置、工作负载间的干扰及最后时限。
diff --git a/content/zh/docs/reference/glossary/logging.md b/content/zh/docs/reference/glossary/logging.md
index 8a88fe527e..64d8dbd0ac 100644
--- a/content/zh/docs/reference/glossary/logging.md
+++ b/content/zh/docs/reference/glossary/logging.md
@@ -36,4 +36,4 @@ tags:
Application and systems logs can help you understand what is happening inside your cluster. The logs are particularly useful for debugging problems and monitoring cluster activity.
-->
-应用程序和系统日志可以帮助您了解集群内部发生的情况。日志对于调试问题和监视集群活动非常有用。
\ No newline at end of file
+应用程序和系统日志可以帮助你了解集群内部发生的情况。日志对于调试问题和监视集群活动非常有用。
\ No newline at end of file
diff --git a/content/zh/docs/reference/glossary/network-policy.md b/content/zh/docs/reference/glossary/network-policy.md
index 10cc5f6b64..864b6760d9 100644
--- a/content/zh/docs/reference/glossary/network-policy.md
+++ b/content/zh/docs/reference/glossary/network-policy.md
@@ -41,4 +41,7 @@ tags:
Network Policies help you declaratively configure which Pods are allowed to connect to each other, which namespaces are allowed to communicate, and more specifically which port numbers to enforce each policy on. `NetworkPolicy` resources use labels to select Pods and define rules which specify what traffic is allowed to the selected Pods. Network Policies are implemented by a supported network plugin provided by a network provider. Be aware that creating a network resource without a controller to implement it will have no effect.
-->
-网络策略帮助您声明式地配置允许哪些 Pod 之间接、哪些命名空间之间允许进行通信,并具体配置了哪些端口号来执行各个策略。`NetworkPolicy` 资源使用标签来选择 Pod,并定义了所选 Pod 可以接受什么样的流量。网络策略由网络提供商提供的并被 Kubernetes 支持的网络插件实现。请注意,当没有控制器实现网络资源时,创建网络资源将不会生效。
+网络策略帮助你声明式地配置允许哪些 Pod 之间、哪些命名空间之间允许进行通信,
+并具体配置了哪些端口号来执行各个策略。`NetworkPolicy` 资源使用标签来选择 Pod,
+并定义了所选 Pod 可以接受什么样的流量。网络策略由网络提供商提供的并被 Kubernetes 支持的网络插件实现。
+请注意,当没有控制器实现网络资源时,创建网络资源将不会生效。
diff --git a/content/zh/docs/reference/glossary/pod-security-policy.md b/content/zh/docs/reference/glossary/pod-security-policy.md
index 5c8475292f..f80416fb44 100644
--- a/content/zh/docs/reference/glossary/pod-security-policy.md
+++ b/content/zh/docs/reference/glossary/pod-security-policy.md
@@ -2,7 +2,7 @@
title: Pod 安全策略
id: pod-security-policy
date: 2018-04-12
-full_link: /zh/docs/concepts/policy/pod-security-policy/
+full_link: /zh/docs/concepts/security/pod-security-policy/
short_description: >
为 Pod 的创建和更新操作启用细粒度的授权。
@@ -17,7 +17,7 @@ tags:
title: Pod Security Policy
id: pod-security-policy
date: 2018-04-12
-full_link: /docs/concepts/policy/pod-security-policy/
+full_link: /docs/concepts/security/pod-security-policy/
short_description: >
Enables fine-grained authorization of pod creation and updates.
@@ -43,4 +43,9 @@ A cluster-level resource that controls security sensitive aspects of the Pod spe
Pod 安全策略是集群级别的资源,它控制着 Pod 规约中的安全性敏感的内容。
`PodSecurityPolicy`对象定义了一组条件以及相关字段的默认值,Pod 运行时必须满足这些条件。Pod 安全策略控制实现上体现为一个可选的准入控制器。
+
+PodSecurityPolicy 自 Kubernetes v1.21 起已弃用,并将在 v1.25 中删除。
+我们建议迁移到 [Pod 安全准入](/zh/docs/concepts/security/pod-security-admission/)或第三方准入插件。
diff --git a/content/zh/docs/reference/glossary/pod.md b/content/zh/docs/reference/glossary/pod.md
index 873ec90e62..eee257a43d 100644
--- a/content/zh/docs/reference/glossary/pod.md
+++ b/content/zh/docs/reference/glossary/pod.md
@@ -4,7 +4,7 @@ id: pod
date: 2018-04-12
full_link: /docs/concepts/workloads/pods/pod-overview/
short_description: >
- Pod 表示您的集群上一组正在运行的容器。
+ Pod 表示你的集群上一组正在运行的容器。
aka:
tags:
diff --git a/content/zh/docs/reference/glossary/shuffle-sharding.md b/content/zh/docs/reference/glossary/shuffle-sharding.md
index 4bc7f91189..494c12168a 100644
--- a/content/zh/docs/reference/glossary/shuffle-sharding.md
+++ b/content/zh/docs/reference/glossary/shuffle-sharding.md
@@ -1,6 +1,6 @@
---
title: 混排切片(Shuffle Sharding)
-id: shuffle-sharding
+id: shuffle sharding
date: 2020-03-04
full_link:
short_description: >
@@ -40,8 +40,8 @@ We are often concerned with insulating different flows of requests
from each other, so that a high-intensity flow does not crowd out low-intensity flows.
A simple way to put requests into queues is to hash some
characteristics of the request, modulo the number of queues, to get
-the index of the queue to use. The hash function uses as input
-characteristics of the request that align with flows. For example, in
+the index of the queue to use. The hash function uses as input
+characteristics of the request that align with flows. For example, in
the Internet this is often the 5-tuple of source and destination
address, protocol, and source and destination port.
-->
@@ -57,21 +57,21 @@ address, protocol, and source and destination port.
That simple hash-based scheme has the property that any high-intensity flow
will crowd out all the low-intensity flows that hash to the same queue.
Providing good insulation for a large number of flows requires a large
-number of queues, which is problematic. Shuffle sharding is a more
+number of queues, which is problematic. Shuffle sharding is a more
nimble technique that can do a better job of insulating the low-intensity
-flows from the high-intensity flows. The terminology of shuffle sharding uses
+flows from the high-intensity flows. The terminology of shuffle sharding uses
the metaphor of dealing a hand from a deck of cards; each queue is a
-metaphorical card. The shuffle sharding technique starts with hashing
+metaphorical card. The shuffle sharding technique starts with hashing
the flow-identifying characteristics of the request, to produce a hash
-value with dozens or more of bits. Then the hash value is used as a
+value with dozens or more of bits. Then the hash value is used as a
source of entropy to shuffle the deck and deal a hand of cards
-(queues). All the dealt queues are examined, and the request is put
-into one of the examined queues with the shortest length. With a
+(queues). All the dealt queues are examined, and the request is put
+into one of the examined queues with the shortest length. With a
modest hand size, it does not cost much to examine all the dealt cards
and a given low-intensity flow has a good chance to dodge the effects of a
-given high-intensity flow. With a large hand size it is expensive to examine
+given high-intensity flow. With a large hand size it is expensive to examine
the dealt queues and more difficult for the low-intensity flows to dodge the
-collective effects of a set of high-intensity flows. Thus, the hand size
+collective effects of a set of high-intensity flows. Thus, the hand size
should be chosen judiciously.
-->
这种简单的基于哈希的模式有一种特性,高密度的请求序列(流)会湮没那些被
diff --git a/content/zh/docs/reference/glossary/volume-plugin.md b/content/zh/docs/reference/glossary/volume-plugin.md
index b04b8d8fbc..1071b04390 100644
--- a/content/zh/docs/reference/glossary/volume-plugin.md
+++ b/content/zh/docs/reference/glossary/volume-plugin.md
@@ -40,7 +40,7 @@ tags:
A Volume Plugin lets you attach and mount storage volumes for use by a {{< glossary_tooltip text="Pod" term_id="pod" >}}. Volume plugins can be _in tree_ or _out of tree_. _In tree_ plugins are part of the Kubernetes code repository and follow its release cycle. _Out of tree_ plugins are developed independently.
-->
-卷插件让您能给 {{< glossary_tooltip text="Pod" term_id="pod" >}} 附加和挂载存储卷。
+卷插件让你能给 {{< glossary_tooltip text="Pod" term_id="pod" >}} 附加和挂载存储卷。
卷插件既可以是 _in tree_ 也可以是 _out of tree_ 。_in tree_ 插件是 Kubernetes 代码库的一部分,
并遵循其发布周期。而 _Out of tree_ 插件则是独立开发的。
diff --git a/content/zh/docs/reference/issues-security/issues.md b/content/zh/docs/reference/issues-security/issues.md
index 23a015a519..0cad3c4329 100644
--- a/content/zh/docs/reference/issues-security/issues.md
+++ b/content/zh/docs/reference/issues-security/issues.md
@@ -1,6 +1,7 @@
---
title: Kubernetes 问题追踪
weight: 10
+aliases: [/zh/cve/, /zh/cves/]
---
-与安全性相关的公告请发送到
+与安全性相关的公告将发送到
[kubernetes-security-announce@googlegroups.com](https://groups.google.com/forum/#!forum/kubernetes-security-announce)
邮件列表。
diff --git a/content/zh/docs/reference/issues-security/security.md b/content/zh/docs/reference/issues-security/security.md
index 3124098682..a6698022b7 100644
--- a/content/zh/docs/reference/issues-security/security.md
+++ b/content/zh/docs/reference/issues-security/security.md
@@ -1,5 +1,6 @@
---
title: Kubernetes 安全和信息披露
+aliases: [/zh/security/]
content_type: concept
weight: 20
---
@@ -27,7 +28,7 @@ This page describes Kubernetes security and disclosure information.
-## 安全公告
+## 安全公告 {#security-announcements}
-## 报告一个漏洞
+## 报告一个漏洞 {#report-a-vulnerability}
我们非常感谢向 Kubernetes 开源社区报告漏洞的安全研究人员和用户。
所有的报告都由社区志愿者进行彻底调查。
-如需报告,请连同安全细节以及预期的[所有 Kubernetes bug 报告](https://git.k8s.io/kubernetes/.github/ISSUE_TEMPLATE/bug-report.md)
-详细信息电子邮件到[security@kubernetes.io](mailto:security@kubernetes.io)列表。
+如需报告,请将你的漏洞提交给 [Kubernetes 漏洞赏金计划](https://hackerone.com/kubernetes)。
+这样做可以使得社区能够在标准化的响应时间内对漏洞进行分类和处理。
你还可以通过电子邮件向私有 [security@kubernetes.io](mailto:security@kubernetes.io)
列表发送电子邮件,邮件中应该包含
[所有 Kubernetes 错误报告](https://github.com/kubernetes/kubernetes/blob/master/.github/ISSUE_TEMPLATE/bug-report.yaml)
所需的详细信息。
+
@@ -68,45 +69,45 @@ GPG 密钥加密你的发往邮件列表的邮件。揭示问题时不需要使
-### 我应该在什么时候报告漏洞?
+### 我应该在什么时候报告漏洞? {#when-should-i-report-a-vulnerability}
- 你认为在 Kubernetes 中发现了一个潜在的安全漏洞
- 你不确定漏洞如何影响 Kubernetes
- 你认为你在 Kubernetes 依赖的另一个项目中发现了一个漏洞
-- 对于具有漏洞报告和披露流程的项目,请直接在该项目处报告
+ - 对于具有漏洞报告和披露流程的项目,请直接在该项目处报告
-### 我什么时候不应该报告漏洞?
+### 我什么时候不应该报告漏洞? {#when-should-i-not-report-a-vulnerability}
-- 你需要帮助调整 Kubernetes 组件的安全性
-- 你需要帮助应用与安全相关的更新
+- 你需要调整 Kubernetes 组件安全性的帮助
+- 你需要应用与安全相关更新的帮助
- 你的问题与安全无关
-## 安全漏洞响应
+## 安全漏洞响应 {#security-vulnerability-response}
-每个报告在 3 个工作日内由安全响应委员会成员确认和分析。这将启动[安全发布过程](https://git.k8s.io/sig-release/security-release-process-documentation/security-release-process.md#disclosures)。
+每个报告在 3 个工作日内由安全响应委员会成员确认和分析,这将启动[安全发布过程](https://git.k8s.io/sig-release/security-release-process-documentation/security-release-process.md#disclosures)。
与安全响应委员会共享的任何漏洞信息都保留在 Kubernetes 项目中,除非有必要修复该问题,否则不会传播到其他项目。
@@ -118,7 +119,7 @@ As the security issue moves from triage, to identified fix, to release planning
-## 公开披露时间
+## 公开披露时间 {#public-disclosure-timing}
-信息披露的时间范围从即时(尤其是已经公开的)到几周。作为一个基本的约定,我们希望报告日期到披露日期的间隔是 7 天。在设置披露日期时,Kubernetes 产品安全团队拥有最终决定权。
-
+信息披露的时间范围从即时(尤其是已经公开的)到几周不等。
+对于具有直接缓解措施的漏洞,我们希望报告日期到披露日期的间隔是 7 天。
+在设置披露日期方面,Kubernetes 安全响应委员会拥有最终决定权。
diff --git a/content/zh/docs/reference/kubectl/_index.md b/content/zh/docs/reference/kubectl/_index.md
index 5c679220a6..38659b2e8d 100644
--- a/content/zh/docs/reference/kubectl/_index.md
+++ b/content/zh/docs/reference/kubectl/_index.md
@@ -1,4 +1,1085 @@
---
-title: "kubectl"
+title: 命令行工具 (kubectl)
+content_type: reference
weight: 60
+no_list: true
+card:
+ name: reference
+ weight: 20
---
+
+
+
+{{< glossary_definition prepend="Kubernetes 提供" term_id="kubectl" length="short" >}}
+
+
+这个工具叫做 `kubectl`。
+
+
+`针对配置信息,`kubectl` 在 `$HOME/.kube` 目录中查找一个名为 `config` 的配置文件。
+你可以通过设置 `KUBECONFIG` 环境变量或设置
+[`--kubeconfig`](/zh/docs/concepts/configuration/organize-cluster-access-kubeconfig/)
+参数来指定其它 [kubeconfig](/zh/docs/concepts/configuration/organize-cluster-access-kubeconfig/) 文件。
+
+
+本文概述了 `kubectl` 语法和命令操作描述,并提供了常见的示例。
+有关每个命令的详细信息,包括所有受支持的参数和子命令,
+请参阅 [kubectl](/docs/reference/generated/kubectl/kubectl-commands/) 参考文档。
+
+
+有关安装说明,请参见[安装 kubectl](/zh/docs/tasks/tools/#kubectl);
+如需快速指南,请参见[备忘单](/zh/docs/reference/kubectl/cheatsheet/)。
+如果你更习惯使用 `docker` 命令行工具,
+[Docker 用户的 `kubectl`](/zh/docs/reference/kubectl/docker-cli-to-kubectl/)
+介绍了一些 Kubernetes 的等价命令。
+
+
+
+## 语法
+
+使用以下语法从终端窗口运行 `kubectl` 命令:
+
+```shell
+kubectl [command] [TYPE] [NAME] [flags]
+```
+
+
+其中 `command`、`TYPE`、`NAME` 和 `flags` 分别是:
+
+
+* `command`:指定要对一个或多个资源执行的操作,例如 `create`、`get`、`describe`、`delete`。
+
+* `TYPE`:指定[资源类型](#resource-types)。资源类型不区分大小写,
+ 可以指定单数、复数或缩写形式。例如,以下命令输出相同的结果:
+
+ ```shell
+ kubectl get pod pod1
+ kubectl get pods pod1
+ kubectl get po pod1
+ ```
+
+
+* `NAME`:指定资源的名称。名称区分大小写。
+ 如果省略名称,则显示所有资源的详细信息。例如:`kubectl get pods`。
+
+ 在对多个资源执行操作时,你可以按类型和名称指定每个资源,或指定一个或多个文件:
+
+
+ * 要按类型和名称指定资源:
+
+ * 要对所有类型相同的资源进行分组,请执行以下操作:`TYPE1 name1 name2 name<#>`。
+ 例子:`kubectl get pod example-pod1 example-pod2`
+
+ * 分别指定多个资源类型:`TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>`。
+ 例子:`kubectl get pod/example-pod1 replicationcontroller/example-rc1`
+
+ * 用一个或多个文件指定资源:`-f file1 -f file2 -f file<#>`
+
+ * [使用 YAML 而不是 JSON](/zh/docs/concepts/configuration/overview/#general-configuration-tips),
+ 因为 YAML 对用户更友好, 特别是对于配置文件。
+ 例子:`kubectl get -f ./pod.yaml`
+
+
+* `flags`: 指定可选的参数。例如,可以使用 `-s` 或 `--server` 参数指定
+ Kubernetes API 服务器的地址和端口。
+
+
+{{< caution >}}
+从命令行指定的参数会覆盖默认值和任何相应的环境变量。
+{{< /caution >}}
+
+
+如果你需要帮助,在终端窗口中运行 `kubectl help`。
+
+
+## 集群内身份验证和命名空间覆盖
+
+
+默认情况下,`kubectl` 命令首先确定它是否在 Pod 中运行,从而被视为在集群中运行。
+它首先检查 `KUBERNETES_SERVICE_HOST` 和 `KUBERNETES_SERVICE_PORT` 环境变量以及
+`/var/run/secrets/kubernetes.io/serviceaccount/token` 中是否存在服务帐户令牌文件。
+如果三个条件都被满足,则假定在集群内进行身份验证。
+
+
+为保持向后兼容性,如果在集群内身份验证期间设置了 `POD_NAMESPACE`
+环境变量,它将覆盖服务帐户令牌中的默认命名空间。
+任何依赖默认命名空间的清单或工具都会受到影响。
+
+
+**`POD_NAMESPACE` 环境变量**
+
+
+如果设置了 `POD_NAMESPACE` 环境变量,对命名空间资源的 CLI 操作对象将使用该变量值作为默认值。
+例如,如果该变量设置为 `seattle`,`kubectl get pods` 将返回 `seattle` 命名空间中的 Pod。
+这是因为 Pod 是一个命名空间资源,且命令中没有提供命名空间。
+
+
+直接使用 `--namespace ` 会覆盖此行为。
+
+
+**kubectl 如何处理 ServiceAccount 令牌**
+
+
+假设:
+* 有 Kubernetes 服务帐户令牌文件挂载在
+ `/var/run/secrets/kubernetes.io/serviceaccount/token` 上,并且
+* 设置了 `KUBERNETES_SERVICE_HOST` 环境变量,并且
+* 设置了 `KUBERNETES_SERVICE_PORT` 环境变量,并且
+* 你没有在 kubectl 命令行上明确指定命名空间。
+
+
+然后 kubectl 假定它正在你的集群中运行。
+kubectl 工具查找该 ServiceAccount 的命名空间
+(该命名空间与 Pod 的命名空间相同)并针对该命名空间进行操作。
+这与集群外运行的情况不同;
+当 kubectl 在集群外运行并且你没有指定命名空间时,
+kubectl 命令会针对 `default` 命名空间进行操作。
+
+
+## 操作
+
+
+下表包含所有 kubectl 操作的简短描述和普通语法:
+
+
+操作 | 语法 | 描述
+-------------------- | -------------------- | --------------------
+`alpha` | `kubectl alpha SUBCOMMAND [flags]` | 列出与 alpha 特性对应的可用命令,这些特性在 Kubernetes 集群中默认情况下是不启用的。
+`annotate` | kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | 添加或更新一个或多个资源的注解。
+`api-resources` | `kubectl api-resources [flags]` | 列出可用的 API 资源。
+`api-versions` | `kubectl api-versions [flags]` | 列出可用的 API 版本。
+
+`apply` | `kubectl apply -f FILENAME [flags]`| 从文件或 stdin 对资源应用配置更改。
+`attach` | `kubectl attach POD -c CONTAINER [-i] [-t] [flags]` | 挂接到正在运行的容器,查看输出流或与容器(stdin)交互。
+`auth` | `kubectl auth [flags] [options]` | 检查授权。
+`autoscale` | kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] | 自动扩缩由副本控制器管理的一组 pod。
+`certificate` | `kubectl certificate SUBCOMMAND [options]` | 修改证书资源。
+`cluster-info` | `kubectl cluster-info [flags]` | 显示有关集群中主服务器和服务的端口信息。
+`completion` | `kubectl completion SHELL [options]` | 为指定的 Shell(Bash 或 Zsh)输出 Shell 补齐代码。
+`config` | `kubectl config SUBCOMMAND [flags]` | 修改 kubeconfig 文件。有关详细信息,请参阅各个子命令。
+
+`convert` | `kubectl convert -f FILENAME [options]` | 在不同的 API 版本之间转换配置文件。配置文件可以是 YAML 或 JSON 格式。注意 - 需要安装 `kubectl-convert` 插件。
+`cordon` | `kubectl cordon NODE [options]` | 将节点标记为不可调度。
+`cp` | `kubectl cp [options]` | 从容器复制文件、目录或将文件、目录复制到容器。
+`create` | `kubectl create -f FILENAME [flags]` | 从文件或 stdin 创建一个或多个资源。
+`delete` | kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] | 基于文件、标准输入或通过指定标签选择器、名称、资源选择器或资源本身,删除资源。
+`describe` | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] | 显示一个或多个资源的详细状态。
+`diff` | `kubectl diff -f FILENAME [flags]`| 在当前起作用的配置和文件或标准输之间作对比 (**BETA**)
+
+`drain` | `kubectl drain NODE [options]` | 腾空节点以准备维护。
+`edit` | kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] | 使用默认编辑器编辑和更新服务器上一个或多个资源的定义。
+`exec` | `kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]` | 对 Pod 中的容器执行命令。
+`explain` | `kubectl explain [--recursive=false] [flags]` | 获取多种资源的文档。例如 Pod、Node、Service 等。
+`expose` | kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags] | 将副本控制器、服务或 Pod 作为新的 Kubernetes 服务暴露。
+`get` | kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags] | 列出一个或多个资源。
+`kustomize` | kubectl kustomize [flags] [options]` | 列出从 kustomization.yaml 文件中的指令生成的一组 API 资源。参数必须是包含文件的目录的路径,或者是 git 存储库 URL,其路径后缀相对于存储库根目录指定了相同的路径。
+
+`label` | kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | 添加或更新一个或多个资源的标签。
+`logs` | `kubectl logs POD [-c CONTAINER] [--follow] [flags]` | 打印 Pod 中容器的日志。
+`options` | `kubectl options` | 全局命令行选项列表,这些选项适用于所有命令。
+`patch` | kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] | 使用策略合并流程更新资源的一个或多个字段。
+`plugin` | `kubectl plugin [flags] [options]` | 提供用于与插件交互的实用程序。
+`port-forward` | `kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]` | 将一个或多个本地端口转发到一个 Pod。
+`proxy` | `kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]` | 运行访问 Kubernetes API 服务器的代理。
+`replace` | `kubectl replace -f FILENAME` | 基于文件或标准输入替换资源。
+`rollout` | `kubectl rollout SUBCOMMAND [options]` | 管理资源的上线。有效的资源类型包括:Deployment、 DaemonSet 和 StatefulSet。
+`run` | kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server | client | none] [--overrides=inline-json] [flags] | 在集群上运行指定的镜像。
+
+`scale` | kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] | 更新指定副本控制器的大小。
+`set` | `kubectl set SUBCOMMAND [options]` | 配置应用资源。
+`taint` | `kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]` | 更新一个或多个节点上的污点。
+`top` | `kubectl top [flags] [options]` | 显示资源(CPU、内存、存储)的使用情况。
+`uncordon` | `kubectl uncordon NODE [options]` | 将节点标记为可调度。
+`version` | `kubectl version [--client] [flags]` | 显示运行在客户端和服务器上的 Kubernetes 版本。
+`wait` | kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options] | 实验特性:等待一种或多种资源的特定状况。
+
+
+了解更多有关命令操作的信息,
+请参阅 [kubectl](/zh/docs/reference/kubectl/kubectl/) 参考文档。
+
+
+## 资源类型
+
+
+下表列出所有受支持的资源类型及其缩写别名。
+
+
+(以下输出可以通过 `kubectl api-resources` 获取,内容以 Kubernetes 1.19.1 版本为准。)
+
+
+| 资源名 | 缩写名 | API 分组 | 按命名空间 | 资源类型 |
+|---|---|---|---|---|
+| `bindings` | | | true | Binding |
+| `componentstatuses` | `cs` | | false | ComponentStatus |
+| `configmaps` | `cm` | | true | ConfigMap |
+| `endpoints` | `ep` | | true | Endpoints |
+| `events` | `ev` | | true | Event |
+| `limitranges` | `limits` | | true | LimitRange |
+| `namespaces` | `ns` | | false | Namespace |
+| `nodes` | `no` | | false | Node |
+| `persistentvolumeclaims` | `pvc` | | true | PersistentVolumeClaim |
+| `persistentvolumes` | `pv` | | false | PersistentVolume |
+| `pods` | `po` | | true | Pod |
+| `podtemplates` | | | true | PodTemplate |
+| `replicationcontrollers` | `rc` | | true | ReplicationController |
+| `resourcequotas` | `quota` | | true | ResourceQuota |
+| `secrets` | | | true | Secret |
+| `serviceaccounts` | `sa` | | true | ServiceAccount |
+| `services` | `svc` | | true | Service |
+| `mutatingwebhookconfigurations` | | admissionregistration.k8s.io | false | MutatingWebhookConfiguration |
+| `validatingwebhookconfigurations` | | admissionregistration.k8s.io | false | ValidatingWebhookConfiguration |
+| `customresourcedefinitions` | `crd,crds` | apiextensions.k8s.io | false | CustomResourceDefinition |
+| `apiservices` | | apiregistration.k8s.io | false | APIService |
+| `controllerrevisions` | | apps | true | ControllerRevision |
+| `daemonsets` | `ds` | apps | true | DaemonSet |
+| `deployments` | `deploy` | apps | true | Deployment |
+| `replicasets` | `rs` | apps | true | ReplicaSet |
+| `statefulsets` | `sts` | apps | true | StatefulSet |
+| `tokenreviews` | | authentication.k8s.io | false | TokenReview |
+| `localsubjectaccessreviews` | | authorization.k8s.io | true | LocalSubjectAccessReview |
+| `selfsubjectaccessreviews` | | authorization.k8s.io | false | SelfSubjectAccessReview |
+| `selfsubjectrulesreviews` | | authorization.k8s.io | false | SelfSubjectRulesReview |
+| `subjectaccessreviews` | | authorization.k8s.io | false | SubjectAccessReview |
+| `horizontalpodautoscalers` | `hpa` | autoscaling | true | HorizontalPodAutoscaler |
+| `cronjobs` | `cj` | batch | true | CronJob |
+| `jobs` | | batch | true | Job |
+| `certificatesigningrequests` | `csr` | certificates.k8s.io | false | CertificateSigningRequest |
+| `leases` | | coordination.k8s.io | true | Lease |
+| `endpointslices` | | discovery.k8s.io | true | EndpointSlice |
+| `events` | `ev` | events.k8s.io | true | Event |
+| `ingresses` | `ing` | extensions | true | Ingress |
+| `flowschemas` | | flowcontrol.apiserver.k8s.io | false | FlowSchema |
+| `prioritylevelconfigurations` | | flowcontrol.apiserver.k8s.io | false | PriorityLevelConfiguration |
+| `ingressclasses` | | networking.k8s.io | false | IngressClass |
+| `ingresses` | `ing` | networking.k8s.io | true | Ingress |
+| `networkpolicies` | `netpol` | networking.k8s.io | true | NetworkPolicy |
+| `runtimeclasses` | | node.k8s.io | false | RuntimeClass |
+| `poddisruptionbudgets` | `pdb` | policy | true | PodDisruptionBudget |
+| `podsecuritypolicies` | `psp` | policy | false | PodSecurityPolicy |
+| `clusterrolebindings` | | rbac.authorization.k8s.io | false | ClusterRoleBinding |
+| `clusterroles` | | rbac.authorization.k8s.io | false | ClusterRole |
+| `rolebindings` | | rbac.authorization.k8s.io | true | RoleBinding |
+| `roles` | | rbac.authorization.k8s.io | true | Role |
+| `priorityclasses` | `pc` | scheduling.k8s.io | false | PriorityClass |
+| `csidrivers` | | storage.k8s.io | false | CSIDriver |
+| `csinodes` | | storage.k8s.io | false | CSINode |
+| `storageclasses` | `sc` | storage.k8s.io | false | StorageClass |
+| `volumeattachments` | | storage.k8s.io | false | VolumeAttachment |
+
+
+
+## 输出选项
+
+
+有关如何格式化或排序某些命令的输出的信息,请参阅以下章节。有关哪些命令支持不同输出选项的详细信息,
+请参阅 [kubectl](/zh/docs/reference/kubectl/kubectl/) 参考文档。
+
+
+### 格式化输出
+
+
+所有 `kubectl` 命令的默认输出格式都是人类可读的纯文本格式。要以特定格式在终端窗口输出详细信息,
+可以将 `-o` 或 `--output` 参数添加到受支持的 `kubectl` 命令中。
+
+
+#### 语法
+
+```shell
+kubectl [command] [TYPE] [NAME] -o
+```
+
+
+取决于具体的 `kubectl` 操作,支持的输出格式如下:
+
+
+输出格式 | 描述
+--------------| -----------
+`-o custom-columns=` | 使用逗号分隔的[自定义列](#custom-columns)列表打印表。
+`-o custom-columns-file=` | 使用 `` 文件中的[自定义列](#custom-columns)模板打印表。
+`-o json` | 输出 JSON 格式的 API 对象
+`-o jsonpath=` | 打印 [jsonpath](/zh/docs/reference/kubectl/jsonpath/) 表达式定义的字段
+`-o jsonpath-file=` | 打印 `` 文件中 [jsonpath](/zh/docs/reference/kubectl/jsonpath/) 表达式定义的字段。
+`-o name` | 仅打印资源名称而不打印任何其他内容。
+`-o wide` | 以纯文本格式输出,包含所有附加信息。对于 Pod 包含节点名。
+`-o yaml` | 输出 YAML 格式的 API 对象。
+
+
+
+##### 示例
+
+
+在此示例中,以下命令将单个 Pod 的详细信息输出为 YAML 格式的对象:
+
+```shell
+kubectl get pod web-pod-13je7 -o yaml
+```
+
+请记住:有关每个命令支持哪种输出格式的详细信息,
+请参阅 [kubectl](/zh/docs/reference/kubectl/kubectl/) 参考文档。
+
+
+#### 自定义列 {#custom-columns}
+
+
+要定义自定义列并仅将所需的详细信息输出到表中,可以使用 `custom-columns` 选项。
+你可以选择内联定义自定义列或使用模板文件:`-o custom-columns=` 或 `-o custom-columns-file=`。
+
+
+##### 示例
+
+
+内联:
+
+```shell
+kubectl get pods -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
+```
+
+
+模板文件:
+
+```shell
+kubectl get pods -o custom-columns-file=template.txt
+```
+
+
+其中,`template.txt` 文件包含:
+
+```
+NAME RSRC
+metadata.name metadata.resourceVersion
+```
+
+
+运行这两个命令之一的结果类似于:
+
+```shell
+NAME RSRC
+submit-queue 610995
+```
+
+
+#### Server-side 列
+
+
+`kubectl` 支持从服务器接收关于对象的特定列信息。
+这意味着对于任何给定的资源,服务器将返回与该资源相关的列和行,以便客户端打印。
+通过让服务器封装打印的细节,这允许在针对同一集群使用的客户端之间提供一致的人类可读输出。
+
+
+此功能默认启用。要禁用它,请将该 `--server-print=false` 参数添加到 `kubectl get` 命令中。
+
+
+##### 例子:
+
+
+要打印有关 Pod 状态的信息,请使用如下命令:
+
+```shell
+kubectl get pods --server-print=false
+```
+
+
+输出类似于:
+
+```shell
+NAME AGE
+pod-name 1m
+```
+
+
+### 排序列表对象
+
+
+要将对象排序后输出到终端窗口,可以将 `--sort-by` 参数添加到支持的 `kubectl` 命令。
+通过使用 `--sort-by` 参数指定任何数字或字符串字段来对对象进行排序。
+要指定字段,请使用 [jsonpath](/zh/docs/reference/kubectl/jsonpath/) 表达式。
+
+
+#### 语法
+
+```shell
+kubectl [command] [TYPE] [NAME] --sort-by=
+```
+
+
+##### 示例
+
+
+要打印按名称排序的 Pod 列表,请运行:
+
+```shell
+kubectl get pods --sort-by=.metadata.name
+```
+
+
+## 示例:常用操作
+
+
+使用以下示例集来帮助你熟悉运行常用 kubectl 操作:
+
+
+`kubectl apply` - 以文件或标准输入为准应用或更新资源。
+
+
+```shell
+# 使用 example-service.yaml 中的定义创建服务。
+kubectl apply -f example-service.yaml
+
+# 使用 example-controller.yaml 中的定义创建 replication controller。
+kubectl apply -f example-controller.yaml
+
+# 使用 路径下的任意 .yaml、.yml 或 .json 文件 创建对象。
+kubectl apply -f
+```
+
+
+`kubectl get` - 列出一个或多个资源。
+
+
+
+```shell
+# 以纯文本输出格式列出所有 Pod。
+kubectl get pods
+
+# 以纯文本输出格式列出所有 Pod,并包含附加信息(如节点名)。
+kubectl get pods -o wide
+
+# 以纯文本输出格式列出具有指定名称的副本控制器。提示:你可以使用别名 'rc' 缩短和替换 'replicationcontroller' 资源类型。
+kubectl get replicationcontroller
+
+# 以纯文本输出格式列出所有副本控制器和服务。
+kubectl get rc,services
+
+# 以纯文本输出格式列出所有守护程序集,包括未初始化的守护程序集。
+kubectl get ds --include-uninitialized
+
+# 列出在节点 server01 上运行的所有 Pod
+kubectl get pods --field-selector=spec.nodeName=server01
+```
+
+
+`kubectl describe` - 显示一个或多个资源的详细状态,默认情况下包括未初始化的资源。
+
+
+
+```shell
+# 显示名为 的 Pod 的详细信息。
+kubectl describe nodes
+
+# 显示名为 的 Pod 的详细信息。
+kubectl describe pods/
+
+# 显示由名为 的副本控制器管理的所有 Pod 的详细信息。
+# 记住:副本控制器创建的任何 Pod 都以副本控制器的名称为前缀。
+kubectl describe pods
+
+# 描述所有的 Pod
+kubectl describe pods
+```
+
+{{< note >}}
+
+
+`kubectl get` 命令通常用于检索同一资源类别的一个或多个资源。
+它具有丰富的参数,允许你使用 `-o` 或 `--output` 参数自定义输出格式。
+你可以指定 `-w` 或 `--watch` 参数以开始监测特定对象的更新。
+`kubectl describe` 命令更侧重于描述指定资源的许多相关方面。它可以调用对 `API 服务器` 的多个 API 调用来为用户构建视图。
+例如,该 `kubectl describe node` 命令不仅检索有关节点的信息,还检索在其上运行的 Pod 的摘要,为节点生成的事件等。
+
+{{< /note >}}
+
+
+`kubectl delete` - 基于文件、标准输入或通过指定标签选择器、名称、资源选择器或资源来删除资源。
+
+
+
+```shell
+# 使用 pod.yaml 文件中指定的类型和名称删除 Pod。
+kubectl delete -f pod.yaml
+
+# 删除所有带有 '=' 标签的 Pod 和服务。
+kubectl delete pods,services -l =
+
+# 删除所有 Pod,包括未初始化的 Pod。
+kubectl delete pods --all
+```
+
+
+`kubectl exec` - 对 Pod 中的容器执行命令。
+
+
+
+```shell
+# 从 Pod 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
+kubectl exec -- date
+
+# 运行输出 'date' 获取在 Pod 中容器 的输出。
+kubectl exec -c -- date
+
+# 获取一个交互 TTY 并在 Pod 中运行 /bin/bash。默认情况下,输出来自第一个容器。
+kubectl exec -ti -- /bin/bash
+```
+
+
+`kubectl logs` - 打印 Pod 中容器的日志。
+
+
+
+```shell
+# 返回 Pod 的日志快照。
+kubectl logs
+
+# 从 Pod 开始流式传输日志。这类似于 'tail -f' Linux 命令。
+kubectl logs -f
+```
+
+
+`kubectl diff` - 查看集群建议更新的差异。
+
+```shell
+# “pod.json”中包含的差异资源。
+kubectl diff -f pod.json
+
+# 从标准输入读取的差异文件。
+cat service.yaml | kubectl diff -f -
+```
+
+
+
+## 示例:创建和使用插件
+
+
+使用以下示例来帮助你熟悉编写和使用 `kubectl` 插件:
+
+
+```shell
+# 用任何语言创建一个简单的插件,并为生成的可执行文件命名
+# 以前缀 "kubectl-" 开始
+cat ./kubectl-hello
+```
+
+
+
+```shell
+#!/bin/sh
+
+# 这个插件打印单词 "hello world"
+echo "hello world"
+```
+
+
+
+这个插件写好了,把它变成可执行的:
+```bash
+
+sudo chmod a+x ./kubectl-hello
+
+# 并将其移动到路径中的某个位置
+sudo mv ./kubectl-hello /usr/local/bin
+sudo chown root:root /usr/local/bin
+
+# 你现在已经创建并"安装了"一个 kubectl 插件。
+# 你可以开始使用这个插件,从 kubectl 调用它,就像它是一个常规命令一样
+kubectl hello
+```
+
+```
+hello world
+```
+
+```shell
+# 你可以"卸载"一个插件,只需从你的 $PATH 中删除它
+sudo rm /usr/local/bin/kubectl-hello
+```
+
+
+为了查看可用的所有 `kubectl` 插件,你可以使用 `kubectl plugin list` 子命令:
+```shell
+kubectl plugin list
+```
+
+输出类似于:
+```
+The following kubectl-compatible plugins are available:
+
+/usr/local/bin/kubectl-hello
+/usr/local/bin/kubectl-foo
+/usr/local/bin/kubectl-bar
+```
+
+`kubectl plugin list` 指令也可以向你告警哪些插件被运行,或是被其它插件覆盖了,例如:
+```shell
+sudo chmod -x /usr/local/bin/kubectl-foo # 删除执行权限
+kubectl plugin list
+```
+
+```
+The following kubectl-compatible plugins are available:
+
+/usr/local/bin/kubectl-hello
+/usr/local/bin/kubectl-foo
+ - warning: /usr/local/bin/kubectl-foo identified as a plugin, but it is not executable
+/usr/local/bin/kubectl-bar
+
+error: one plugin warning was found
+```
+
+
+你可以将插件视为在现有 kubectl 命令之上构建更复杂功能的一种方法:
+
+```shell
+cat ./kubectl-whoami
+```
+
+
+接下来的几个示例假设你已经将 `kubectl-whoami` 设置为以下内容:
+
+
+```shell
+#!/bin/bash
+
+#这个插件利用 `kubectl config` 命令基于当前所选上下文输出当前用户的信息
+kubectl config view --template='{{ range .contexts }}{{ if eq .name "'$(kubectl config current-context)'" }}Current user: {{ printf "%s\n" .context.user }}{{ end }}{{ end }}'
+```
+
+
+运行以上命令将为你提供一个输出,其中包含 KUBECONFIG 文件中当前上下文的用户:
+
+
+```shell
+#!/bin/bash
+# 使文件成为可执行的
+sudo chmod +x ./kubectl-whoami
+
+# 然后移动到你的路径中
+sudo mv ./kubectl-whoami /usr/local/bin
+
+kubectl whoami
+Current user: plugins-user
+```
+
+## {{% heading "whatsnext" %}}
+
+
+
+* 阅读 `kubectl` 参考文档:
+ * kubectl [命令参考](/zh/docs/reference/kubectl/kubectl/)
+ * 参考[命令行参数](/docs/reference/generated/kubectl/kubectl-commands/)
+* 学习关于 [`kubectl` 使用约定](/zh/docs/reference/kubectl/conventions/)
+* 阅读 kubectl 中的 [JSONPath 支持](/zh/docs/reference/kubectl/jsonpath/)
+* 了解如何[使用插件扩展 kubectl](/zh/docs/tasks/extend-kubectl/kubectl-plugins)
+ * 查看更多[示例 cli 插件](https://github.com/kubernetes/sample-cli-plugin)。
\ No newline at end of file
diff --git a/content/zh/docs/reference/kubectl/cheatsheet.md b/content/zh/docs/reference/kubectl/cheatsheet.md
index 4bd973b8bd..1b424d1e3c 100644
--- a/content/zh/docs/reference/kubectl/cheatsheet.md
+++ b/content/zh/docs/reference/kubectl/cheatsheet.md
@@ -1,6 +1,7 @@
---
title: kubectl 备忘单
content_type: concept
+weight: 10
card:
name: reference
weight: 30
@@ -12,6 +13,7 @@ reviewers:
- krousey
- clove
content_type: concept
+weight: 10 # highlight it
card:
name: reference
weight: 30
@@ -70,6 +72,18 @@ source <(kubectl completion zsh) # 在 zsh 中设置当前 shell 的自动补
echo "[[ $commands[kubectl] ]] && source <(kubectl completion zsh)" >> ~/.zshrc # 在您的 zsh shell 中永久的添加自动补全
```
+
+### 关于 --all-namespaces 的一点说明
+
+
+我们经常用到 `--all-namespaces` 参数,你应该要知道它的简写:
+
+```kubectl -A```
+
```bash
@@ -140,6 +158,11 @@ kubectl config set-context gce --user=cluster-admin --namespace=foo \
&& kubectl config use-context gce
kubectl config unset users.foo # 删除用户 foo
+
+# 设置或显示 context / namespace 的短别名
+# (仅适用于 bash 和 bash 兼容的 shell,在使用 kn 设置命名空间之前要先设置 current-context)
+alias kx='f() { [ "$1" ] && kubectl config use-context $1 || kubectl config current-context ; } ; f'
+alias kn='f() { [ "$1" ] && kubectl config set-context --current --namespace $1 || kubectl config view --minify | grep namespace | cut -d" " -f6 ; } ; f'
```
```bash
@@ -390,8 +416,8 @@ kubectl get pods --selector=app=cassandra -o \
kubectl get configmap myconfig \
-o jsonpath='{.data.ca\.crt}'
-# 获取所有工作节点(使用选择器以排除标签名称为 'node-role.kubernetes.io/master' 的结果)
-kubectl get node --selector='!node-role.kubernetes.io/master'
+# 获取所有工作节点(使用选择器以排除标签名称为 'node-role.kubernetes.io/control-plane' 的结果)
+kubectl get node --selector='!node-role.kubernetes.io/control-plane'
# 获取当前命名空间中正在运行的 Pods
kubectl get pods --field-selector=status.phase=Running
@@ -429,14 +455,17 @@ kubectl diff -f ./my-manifest.yaml
# 生成一个句点分隔的树,其中包含为节点返回的所有键
# 在复杂的嵌套JSON结构中定位键时非常有用
-kubectl get nodes -o json | jq -c 'path(..)|[.[]|tostring]|join(".")'
+kubectl get nodes -o json | jq -c 'paths|join(".")'
# 生成一个句点分隔的树,其中包含为pod等返回的所有键
-kubectl get pods -o json | jq -c 'path(..)|[.[]|tostring]|join(".")'
+kubectl get pods -o json | jq -c 'paths|join(".")'
# 假设你的 Pods 有默认的容器和默认的名字空间,并且支持 'env' 命令,可以使用以下脚本为所有 Pods 生成 ENV 变量。
# 该脚本也可用于在所有的 Pods 里运行任何受支持的命令,而不仅仅是 'env'。
for pod in $(kubectl get po --output=jsonpath={.items..metadata.name}); do echo $pod && kubectl exec -it $pod -- env; done
+
+# 获取一个 Deployment 的 status 子资源
+kubectl get deployment nginx-deployment --subresource=status
```
```bash
@@ -529,6 +561,9 @@ kubectl patch deployment valid-deployment --type json -p='[{"op": "remove", "
# 在带位置数组中添加元素
kubectl patch sa default --type='json' -p='[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]'
+
+# 通过修正 scale 子资源来更新 Deployment 的副本数
+kubectl patch deployment nginx-deployment --subresource='scale' --type='merge' -p '{"spec":{"replicas":2}}'
```
+## 从容器中复制文件和目录
+
+
+```bash
+kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir # 将 /tmp/foo_dir 本地目录复制到远程当前命名空间中 Pod 中的 /tmp/bar_dir
+kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container # 将 /tmp/foo 本地文件复制到远程 Pod 中特定容器的 /tmp/bar 下
+kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar # 将 /tmp/foo 本地文件复制到远程 “my-namespace” 命名空间内指定 Pod 中的 /tmp/bar
+kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar # 将 /tmp/foo 从远程 Pod 复制到本地 /tmp/bar
+```
+
+
+{{< note >}}
+`kubectl cp` 要求容器镜像中存在 “tar” 二进制文件。如果 “tar” 不存在,`kubectl cp` 将失败。
+对于进阶用例,例如符号链接、通配符扩展或保留文件权限,请考虑使用 `kubectl exec`。
+{{< /note >}}
+
+
+```bash
+tar cf - /tmp/foo | kubectl exec -i -n my-namespace my-pod -- tar xf - -C /tmp/bar # 将 /tmp/foo 本地文件复制到远程 “my-namespace” 命名空间中 pod 中的 /tmp/bar
+kubectl exec -n my-namespace my-pod -- tar cf - /tmp/foo | tar xf - -C /tmp/bar # 将 /tmp/foo 从远程 pod 复制到本地 /tmp/bar
@@ -794,7 +866,7 @@ kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="k8s.gcr.
# All fields under metadata regardless of name
kubectl get pods -A -o=custom-columns='DATA:metadata.*'
-More examples in the kubectl [reference documentation](/docs/reference/kubectl/overview/#custom-columns).
+More examples in the kubectl [reference documentation](/docs/reference/kubectl/#custom-columns).
```
-->
使用 `-o=custom-columns` 的示例:
@@ -813,7 +885,7 @@ kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="k8s.gcr.
kubectl get pods -A -o=custom-columns='DATA:metadata.*'
```
-有关更多示例,请参看 kubectl [参考文档](/zh/docs/reference/kubectl/overview/#custom-columns)。
+有关更多示例,请参看 kubectl [参考文档](/zh/docs/reference/kubectl/#custom-columns)。
-* 参阅 [kubectl 概述](/zh/docs/reference/kubectl/overview/),进一步了解[JsonPath](/zh/docs/reference/kubectl/jsonpath)。
+* 参阅 [kubectl 概述](/zh/docs/reference/kubectl/),进一步了解 [JsonPath](/zh/docs/reference/kubectl/jsonpath)。
* 参阅 [kubectl](/zh/docs/reference/kubectl/kubectl/) 选项。
* 参阅 [kubectl 使用约定](/zh/docs/reference/kubectl/conventions/)来理解如何在可复用的脚本中使用它。
* 查看社区中其他的 [kubectl 备忘单](https://github.com/dennyzhang/cheatsheet-kubernetes-A4)。
diff --git a/content/zh/docs/reference/kubectl/conventions.md b/content/zh/docs/reference/kubectl/conventions.md
index bddbec7e03..6ab00ca620 100644
--- a/content/zh/docs/reference/kubectl/conventions.md
+++ b/content/zh/docs/reference/kubectl/conventions.md
@@ -1,17 +1,12 @@
---
title: kubectl 的用法约定
-reviewers:
-- janetkuo
content_type: concept
---
-
@@ -26,7 +21,7 @@ Recommended usage conventions for `kubectl`.
-## 在可重用脚本中使用 `kubectl`
+## 在可重用脚本中使用 `kubectl` {#using-kubectl-in-reusable-scripts}
+## 子资源 {#subresources}
+
+
+
+* 你可以将 `--subresource` alpha 标志用于 kubectl 命令,例如 `get`、`patch`、`edit` 和 `replace`
+ 来获取和更新所有支持子资源的资源的子资源。目前,仅支持 `status` 和 `scale` 子资源。
+* 针对子资源的 API 协定与完整资源相同。在更新 `status` 子资源为一个新值时,请记住,
+ 子资源可能是潜在的由控制器调和为不同的值。
+
-## 最佳实践
+## 最佳实践 {#best-practices}
### `kubectl run`
@@ -61,7 +75,8 @@ For `kubectl run` to satisfy infrastructure as code:
* Switch to configuration files checked into source control for features that are needed, but not expressible via `kubectl run` flags.
-->
-* 使用特定版本的标签标记镜像,不要将该标签移动到新版本。例如,使用 `:v1234`、`v1.2.3`、`r03062016-1-4`,而不是 `:latest`(有关详细信息,请参阅[配置的最佳实践](/zh/docs/concepts/configuration/overview/#container-images))。
+* 使用特定版本的标签标记镜像,不要将该标签改为新版本。例如使用 `:v1234`、`v1.2.3`、`r03062016-1-4`,
+ 而不是 `:latest`(有关详细信息,请参阅[配置的最佳实践](/zh/docs/concepts/configuration/overview/#container-images))。
* 使用基于版本控制的脚本来运行包含大量参数的镜像。
* 对于无法通过 `kubectl run` 参数来表示的功能特性,使用基于源码控制的配置文件,以记录要使用的功能特性。
@@ -75,4 +90,4 @@ You can use the `--dry-run=client` flag to preview the object that would be sent
-* 您可以使用 `kubectl apply` 命令创建或更新资源。有关使用 kubectl apply 更新资源的详细信息,请参阅 [Kubectl 文档](https://kubectl.docs.kubernetes.io)。
+* 你可以使用 `kubectl apply` 命令创建或更新资源。有关使用 kubectl apply 更新资源的详细信息,请参阅 [Kubectl 文档](https://kubectl.docs.kubernetes.io)。
diff --git a/content/zh/docs/reference/kubectl/docker-cli-to-kubectl.md b/content/zh/docs/reference/kubectl/docker-cli-to-kubectl.md
index e7b1316eb4..a2e3b49848 100644
--- a/content/zh/docs/reference/kubectl/docker-cli-to-kubectl.md
+++ b/content/zh/docs/reference/kubectl/docker-cli-to-kubectl.md
@@ -1,25 +1,22 @@
---
title: 适用于 Docker 用户的 kubectl
content_type: concept
-reviewers:
-- brendandburns
-- thockin
---
-您可以使用 Kubernetes 命令行工具 `kubectl` 与 API 服务器进行交互。如果您熟悉 Docker 命令行工具,则使用 kubectl 非常简单。但是,Docker 命令和 kubectl 命令之间有一些区别。以下显示了 Docker 子命令,并描述了等效的 `kubectl` 命令。
+你可以使用 Kubernetes 命令行工具 `kubectl` 与 API 服务器进行交互。如果你熟悉 Docker 命令行工具,
+则使用 kubectl 非常简单。但是,Docker 命令和 kubectl 命令之间有一些区别。以下显示了 Docker 子命令,
+并描述了等效的 `kubectl` 命令。
@@ -28,8 +25,12 @@ You can use the Kubernetes command line tool `kubectl` to interact with the API
-要运行 nginx 部署并将其暴露,请参见[kubectl create deployment](/docs/reference/generated/kubectl/kubectl-commands#-em-deployment-em-)
+要运行 nginx 部署并将其暴露,请参见 [kubectl create deployment](/docs/reference/generated/kubectl/kubectl-commands#-em-deployment-em-)
+
+
+使用 docker 命令:
```shell
docker run -d --restart=always -e DOMAIN=cluster --name nginx-app -p 80:80 nginx
@@ -46,7 +47,10 @@ CONTAINER ID IMAGE COMMAND CREATED
55c103fa1296 nginx "nginx -g 'daemon of…" 9 seconds ago Up 9 seconds 0.0.0.0:80->80/tcp nginx-app
```
+
+使用 kubectl 命令:
-`kubectl` 命令打印创建或突变资源的类型和名称,然后可以在后续命令中使用。部署后,您可以公开新服务。
+`kubectl` 命令打印创建或突变资源的类型和名称,然后可以在后续命令中使用。部署后,你可以公开新服务。
{{< /note >}}
-在 kubectl 命令中,我们创建了一个 [Deployment](/zh/docs/concepts/workloads/controllers/deployment/),这将保证有 N 个运行 nginx 的 pod(N 代表 spec 中声明的 replica 数,默认为 1)。我们还创建了一个 [service](/zh/docs/concepts/services-networking/service/),其选择器与容器标签匹配。查看[使用服务访问群集中的应用程序](/zh/docs/tasks/access-application-cluster/service-access-application-cluster) 获取更多信息。
+在 kubectl 命令中,我们创建了一个 [Deployment](/zh/docs/concepts/workloads/controllers/deployment/),
+这将保证有 N 个运行 nginx 的 Pod(N 代表 spec 中声明的 replica 数,默认为 1)。
+我们还创建了一个 [service](/zh/docs/concepts/services-networking/service/),其选择器与容器标签匹配。
+查看[使用服务访问集群中的应用程序](/zh/docs/tasks/access-application-cluster/service-access-application-cluster) 获取更多信息。
-默认情况下镜像会在后台运行,与 `docker run -d ...` 类似,如果您想在前台运行,使用 [`kubectl run`](/docs/reference/generated/kubectl/kubectl-commands/#run) 在前台运行 Pod:
+默认情况下镜像会在后台运行,与 `docker run -d ...` 类似,如果你想在前台运行,
+使用 [`kubectl run`](/docs/reference/generated/kubectl/kubectl-commands/#run) 在前台运行 Pod:
```shell
kubectl run [-i] [--tty] --attach --image=
@@ -109,14 +117,16 @@ kubectl run [-i] [--tty] --attach --image=
Unlike `docker run ...`, if you specify `--attach`, then you attach `stdin`, `stdout` and `stderr`. You cannot control which streams are attached (`docker -a ...`).
To detach from the container, you can type the escape sequence Ctrl+P followed by Ctrl+Q.
-->
-与 `docker run ...` 不同的是,如果指定了 `--attach` ,我们将连接到 `stdin`,`stdout` 和 `stderr`,而不能控制具体连接到哪个输出流(`docker -a ...`)。要从容器中退出,可以输入 Ctrl + P,然后按 Ctrl + Q。
+与 `docker run ...` 不同的是,如果指定了 `--attach`,我们将连接到 `stdin`,`stdout` 和 `stderr`,
+而不能控制具体连接到哪个输出流(`docker -a ...`)。要从容器中退出,可以输入 Ctrl + P,然后按 Ctrl + Q。
-因为我们使用 Deployment 启动了容器,如果您终止连接到的进程(例如 `ctrl-c`),容器将会重启,这跟 `docker run -it` 不同。
-如果想销毁该 Deployment(和它的 pod),您需要运行 `kubectl delete deployment `。
+因为我们使用 Deployment 启动了容器,如果你终止连接到的进程(例如 `ctrl-c`),容器将会重启,
+这跟 `docker run -it` 不同。如果想销毁该 Deployment(和它的 Pod),
+你需要运行 `kubectl delete deployment `。
## docker ps
@@ -158,7 +168,8 @@ ubuntu 0/1 Completed 0 20s
-如何连接到已经运行在容器中的进程?查看 [kubectl attach](/docs/reference/generated/kubectl/kubectl-commands/#attach)。
+如何连接到已经运行在容器中的进程?
+查看 [kubectl attach](/docs/reference/generated/kubectl/kubectl-commands/#attach)。
-更多信息请查看[获取运行中容器的 Shell 环境](/zh/docs/tasks/debug-application-cluster/get-shell-running-container/)。
+更多信息请查看[获取运行中容器的 Shell 环境](/zh/docs/tasks/debug/debug-application/get-shell-running-container/)。
## docker logs
@@ -308,7 +319,10 @@ kubectl logs -f nginx-app-zibvs
-现在是时候提一下 pod 和容器之间的细微差别了;默认情况下如果 pod 中的进程退出 pod 也不会终止,相反它将会重启该进程。这类似于 docker run 时的 `--restart=always` 选项, 这是主要差别。在 docker 中,进程的每个调用的输出都是被连接起来的,但是对于 kubernetes,每个调用都是分开的。要查看以前在 kubernetes 中执行的输出,请执行以下操作:
+现在是时候提一下 Pod 和容器之间的细微差别了;默认情况下如果 Pod 中的进程退出 Pod 也不会终止,
+相反它将会重启该进程。这类似于 docker run 时的 `--restart=always` 选项,这是主要差别。
+在 docker 中,进程的每个调用的输出都是被连接起来的,但是对于 Kubernetes,每个调用都是分开的。
+要查看以前在 Kubernetes 中执行的输出,请执行以下操作:
```shell
kubectl logs --previous nginx-app-zibvs
@@ -391,9 +405,10 @@ kubectl get po -l app=nginx-app
{{< note >}}
-请注意,我们不直接删除 pod。使用 kubectl 命令,我们要删除拥有该 pod 的 Deployment。如果我们直接删除 pod,Deployment 将会重新创建该 pod。
+请注意,我们不直接删除 Pod。使用 kubectl 命令,我们要删除拥有该 Pod 的 Deployment。
+如果我们直接删除 Pod,Deployment 将会重新创建该 Pod。
{{< /note >}}
## docker login
@@ -401,7 +416,8 @@ When you use kubectl, you don't delete the pod directly.You have to first delete
-在 kubectl 中没有对 `docker login` 的直接模拟。如果您有兴趣在私有镜像仓库中使用 Kubernetes,请参阅[使用私有镜像仓库](/zh/docs/concepts/containers/images/#using-a-private-registry)。
+在 kubectl 中没有对 `docker login` 的直接模拟。如果你有兴趣在私有镜像仓库中使用 Kubernetes,
+请参阅[使用私有镜像仓库](/zh/docs/concepts/containers/images/#using-a-private-registry)。
## docker version
@@ -487,10 +503,10 @@ kubectl:
kubectl cluster-info
```
```
-Kubernetes master is running at https://108.59.85.141
-KubeDNS is running at https://108.59.85.141/api/v1/namespaces/kube-system/services/kube-dns/proxy
-kubernetes-dashboard is running at https://108.59.85.141/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy
-Grafana is running at https://108.59.85.141/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
-Heapster is running at https://108.59.85.141/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
-InfluxDB is running at https://108.59.85.141/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy
+Kubernetes master is running at https://203.0.113.141
+KubeDNS is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/kube-dns/proxy
+kubernetes-dashboard is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy
+Grafana is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
+Heapster is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
+InfluxDB is running at https://203.0.113.141/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy
```
diff --git a/content/zh/docs/reference/kubectl/jsonpath.md b/content/zh/docs/reference/kubectl/jsonpath.md
index 82385b7009..5f3593eefa 100644
--- a/content/zh/docs/reference/kubectl/jsonpath.md
+++ b/content/zh/docs/reference/kubectl/jsonpath.md
@@ -3,17 +3,15 @@ title: JSONPath 支持
content_type: concept
---
-Kubectl 支持 JSONPath 模板。
+kubectl 支持 JSONPath 模板。
@@ -23,7 +21,8 @@ JSONPath template is composed of JSONPath expressions enclosed by curly braces {
Kubectl uses JSONPath expressions to filter on specific fields in the JSON object and format the output.
In addition to the original JSONPath template syntax, the following functions and syntax are valid:
-->
-JSONPath 模板由 {} 包起来的 JSONPath 表达式组成。Kubectl 使用 JSONPath 表达式来过滤 JSON 对象中的特定字段并格式化输出。除了原始的 JSONPath 模板语法,以下函数和语法也是有效的:
+JSONPath 模板由 {} 包起来的 JSONPath 表达式组成。Kubectl 使用 JSONPath 表达式来过滤 JSON 对象中的特定字段并格式化输出。
+除了原始的 JSONPath 模板语法,以下函数和语法也是有效的:
{{< note >}}
-在 Windows 上,对于任何包含空格的 JSONPath 模板,您必须使用双引号(不是上面 bash 所示的单引号)。
-反过来,这意味着您必须在模板中的所有文字周围使用单引号或转义的双引号。
+在 Windows 上,对于任何包含空格的 JSONPath 模板,你必须使用双引号(不是上面 bash 所示的单引号)。
+反过来,这意味着你必须在模板中的所有文字周围使用单引号或转义的双引号。
例如:
```cmd
@@ -163,7 +162,7 @@ kubectl get pods -o json | jq -r '.items[] | select(.metadata.name | test("test-
```
-->
{{< note >}}
-不支持 JSONPath 正则表达式。如需使用正则表达式进行匹配操作,您可以使用如 `jq` 之类的工具。
+不支持 JSONPath 正则表达式。如需使用正则表达式进行匹配操作,你可以使用如 `jq` 之类的工具。
```shell
# kubectl 的 JSONpath 输出不支持正则表达式
diff --git a/content/zh/docs/reference/kubectl/kubectl.md b/content/zh/docs/reference/kubectl/kubectl.md
index 612c3d9cf1..975aa3e59d 100644
--- a/content/zh/docs/reference/kubectl/kubectl.md
+++ b/content/zh/docs/reference/kubectl/kubectl.md
@@ -220,7 +220,7 @@ kubectl [flags]
- 设置为 true,则表示不会检查服务器证书的有效性。这样会导致您的 HTTPS 连接不安全。
+ 设置为 true,则表示不会检查服务器证书的有效性。这样会导致你的 HTTPS 连接不安全。
diff --git a/content/zh/docs/reference/kubectl/overview.md b/content/zh/docs/reference/kubectl/overview.md
deleted file mode 100644
index ddc83e8536..0000000000
--- a/content/zh/docs/reference/kubectl/overview.md
+++ /dev/null
@@ -1,1025 +0,0 @@
----
-reviewers:
-- hw-qiaolei
-title: kubectl 概述
-content_type: concept
-weight: 20
-card:
- name: reference
- weight: 20
----
-
-
-
-
-
-你可以使用 Kubectl 命令行工具管理 Kubernetes 集群。
-`kubectl` 在 `$HOME/.kube` 目录中查找一个名为 `config` 的配置文件。
-你可以通过设置 KUBECONFIG 环境变量或设置
-[`--kubeconfig`](/zh/docs/concepts/configuration/organize-cluster-access-kubeconfig/)
-参数来指定其它 [kubeconfig](/zh/docs/concepts/configuration/organize-cluster-access-kubeconfig/) 文件。
-
-
-本文概述了 `kubectl` 语法和命令操作描述,并提供了常见的示例。
-有关每个命令的详细信息,包括所有受支持的参数和子命令,
-请参阅 [kubectl](/docs/reference/generated/kubectl/kubectl-commands/) 参考文档。
-有关安装说明,请参见[安装 kubectl](/zh/docs/tasks/tools/install-kubectl/) 。
-
-
-
-
-## 语法
-
-
-使用以下语法 `kubectl` 从终端窗口运行命令:
-
-```shell
-kubectl [command] [TYPE] [NAME] [flags]
-```
-
-
-其中 `command`、`TYPE`、`NAME` 和 `flags` 分别是:
-
-
-* `command`:指定要对一个或多个资源执行的操作,例如 `create`、`get`、`describe`、`delete`。
-
-* `TYPE`:指定[资源类型](#资源类型)。资源类型不区分大小写,
- 可以指定单数、复数或缩写形式。例如,以下命令输出相同的结果:
-
- ```shell
- kubectl get pod pod1
- kubectl get pods pod1
- kubectl get po pod1
- ```
-
-
-
-* `NAME`:指定资源的名称。名称区分大小写。
- 如果省略名称,则显示所有资源的详细信息 `kubectl get pods`。
-
- 在对多个资源执行操作时,你可以按类型和名称指定每个资源,或指定一个或多个文件:
-
-
- * 要按类型和名称指定资源:
-
- * 要对所有类型相同的资源进行分组,请执行以下操作:`TYPE1 name1 name2 name<#>`。
-
- 例子:`kubectl get pod example-pod1 example-pod2`
-
- * 分别指定多个资源类型:`TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>`。
-
- 例子:`kubectl get pod/example-pod1 replicationcontroller/example-rc1`
-
- * 用一个或多个文件指定资源:`-f file1 -f file2 -f file<#>`
-
- * [使用 YAML 而不是 JSON](/zh/docs/concepts/configuration/overview/#general-configuration-tips)
- 因为 YAML 更容易使用,特别是用于配置文件时。
- 例子:`kubectl get -f ./pod.yaml`
-
-
-* `flags`: 指定可选的参数。例如,可以使用 `-s` 或 `-server` 参数指定
- Kubernetes API 服务器的地址和端口。
-
-{{< caution >}}
-
-从命令行指定的参数会覆盖默认值和任何相应的环境变量。
-{{< /caution >}}
-
-
-如果你需要帮助,从终端窗口运行 `kubectl help` 。
-
-
-## 操作
-
-
-下表包含所有 kubectl 操作的简短描述和普通语法:
-
-
-
-操作 | 语法 | 描述
--------------------- | -------------------- | --------------------
-`alpha` | `kubectl alpha SUBCOMMAND [flags]` | 列出与 alpha 特性对应的可用命令,这些特性在 Kubernetes 集群中默认情况下是不启用的。
-`annotate` | kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | 添加或更新一个或多个资源的注解。
-`api-resources` | `kubectl api-resources [flags]` | 列出可用的 API 资源。
-`api-versions` | `kubectl api-versions [flags]` | 列出可用的 API 版本。
-`apply` | `kubectl apply -f FILENAME [flags]`| 从文件或 stdin 对资源应用配置更改。
-`attach` | `kubectl attach POD -c CONTAINER [-i] [-t] [flags]` | 附加到正在运行的容器,查看输出流或与容器(stdin)交互。
-`auth` | `kubectl auth [flags] [options]` | 检查授权。
-`autoscale` | kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] | 自动伸缩由副本控制器管理的一组 pod。
-`certificate` | `kubectl certificate SUBCOMMAND [options]` | 修改证书资源。
-`cluster-info` | `kubectl cluster-info [flags]` | 显示有关集群中主服务器和服务的端口信息。
-`completion` | `kubectl completion SHELL [options]` | 为指定的 shell (bash 或 zsh)输出 shell 补齐代码。
-`config` | `kubectl config SUBCOMMAND [flags]` | 修改 kubeconfig 文件。有关详细信息,请参阅各个子命令。
-`convert` | `kubectl convert -f FILENAME [options]` | 在不同的 API 版本之间转换配置文件。配置文件可以是 YAML 或 JSON 格式。
-`cordon` | `kubectl cordon NODE [options]` | 将节点标记为不可调度。
-`cp` | `kubectl cp [options]` | 在容器之间复制文件和目录。
-`create` | `kubectl create -f FILENAME [flags]` | 从文件或 stdin 创建一个或多个资源。
-`delete` | kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] | 从文件、标准输入或指定标签选择器、名称、资源选择器或资源中删除资源。
-`describe` | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] | 显示一个或多个资源的详细状态。
-`diff` | `kubectl diff -f FILENAME [flags]`| 将 live 配置和文件或标准输入做对比 (**BETA**)
-`drain` | `kubectl drain NODE [options]` | 腾空节点以准备维护。
-`edit` | kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] | 使用默认编辑器编辑和更新服务器上一个或多个资源的定义。
-`exec` | `kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]]` | 对 pod 中的容器执行命令。
-`explain` | `kubectl explain [--recursive=false] [flags]` | 获取多种资源的文档。例如 pod, node, service 等。
-`expose` | kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags] | 将副本控制器、服务或 pod 作为新的 Kubernetes 服务暴露。
-`get` | kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags] | 列出一个或多个资源。
-`kustomize` | `kubectl kustomize [flags] [options]` | 列出从 kustomization.yaml 文件中的指令生成的一组 API 资源。参数必须是包含文件的目录的路径,或者是 git 存储库 URL,其路径后缀相对于存储库根目录指定了相同的路径。
-`label` | kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] | 添加或更新一个或多个资源的标签。
-`logs` | `kubectl logs POD [-c CONTAINER] [--follow] [flags]` | 在 pod 中打印容器的日志。
-`options` | `kubectl options` | 全局命令行选项列表,适用于所有命令。
-`patch` | kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] | 使用策略合并 patch 程序更新资源的一个或多个字段。
-`plugin` | `kubectl plugin [flags] [options]` | 提供用于与插件交互的实用程序。
-`port-forward` | `kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] [flags]` | 将一个或多个本地端口转发到一个 pod。
-`proxy` | `kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags]` | 运行 Kubernetes API 服务器的代理。
-`replace` | `kubectl replace -f FILENAME` | 从文件或标准输入中替换资源。
-`rollout` | `kubectl rollout SUBCOMMAND [options]` | 管理资源的部署。有效的资源类型包括:Deployments, DaemonSets 和 StatefulSets。
-`run` | kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server | client | none] [--overrides=inline-json] [flags] | 在集群上运行指定的镜像。
-`scale` | kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] | 更新指定副本控制器的大小。
-`set` | `kubectl set SUBCOMMAND [options]` | 配置应用程序资源。
-`taint` | `kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options]` | 更新一个或多个节点上的污点。
-`top` | `kubectl top [flags] [options]` | 显示资源(CPU/内存/存储)的使用情况。
-`uncordon` | `kubectl uncordon NODE [options]` | 将节点标记为可调度。
-`version` | `kubectl version [--client] [flags]` | 显示运行在客户端和服务器上的 Kubernetes 版本。
-`wait` | kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available] [options] | 实验性:等待一种或多种资源的特定条件。
-
-
-
-了解更多有关命令操作的信息,请参阅 [kubectl](/zh/docs/reference/kubectl/kubectl/) 参考文档。
-
-
-
-## 资源类型
-
-
-下表列出所有受支持的资源类型及其缩写别名:
-
-
-(以下输出可以通过 `kubectl api-resources` 获取,内容以 Kubernetes 1.19.1 版本为准。)
-
-
-| 资源名 | 缩写名 | API 分组 | 按命名空间 | 资源类型 |
-|---|---|---|---|---|
-| `bindings` | | | true | Binding |
-| `componentstatuses` | `cs` | | false | ComponentStatus |
-| `configmaps` | `cm` | | true | ConfigMap |
-| `endpoints` | `ep` | | true | Endpoints |
-| `events` | `ev` | | true | Event |
-| `limitranges` | `limits` | | true | LimitRange |
-| `namespaces` | `ns` | | false | Namespace |
-| `nodes` | `no` | | false | Node |
-| `persistentvolumeclaims` | `pvc` | | true | PersistentVolumeClaim |
-| `persistentvolumes` | `pv` | | false | PersistentVolume |
-| `pods` | `po` | | true | Pod |
-| `podtemplates` | | | true | PodTemplate |
-| `replicationcontrollers` | `rc` | | true | ReplicationController |
-| `resourcequotas` | `quota` | | true | ResourceQuota |
-| `secrets` | | | true | Secret |
-| `serviceaccounts` | `sa` | | true | ServiceAccount |
-| `services` | `svc` | | true | Service |
-| `mutatingwebhookconfigurations` | | admissionregistration.k8s.io | false | MutatingWebhookConfiguration |
-| `validatingwebhookconfigurations` | | admissionregistration.k8s.io | false | ValidatingWebhookConfiguration |
-| `customresourcedefinitions` | `crd,crds` | apiextensions.k8s.io | false | CustomResourceDefinition |
-| `apiservices` | | apiregistration.k8s.io | false | APIService |
-| `controllerrevisions` | | apps | true | ControllerRevision |
-| `daemonsets` | `ds` | apps | true | DaemonSet |
-| `deployments` | `deploy` | apps | true | Deployment |
-| `replicasets` | `rs` | apps | true | ReplicaSet |
-| `statefulsets` | `sts` | apps | true | StatefulSet |
-| `tokenreviews` | | authentication.k8s.io | false | TokenReview |
-| `localsubjectaccessreviews` | | authorization.k8s.io | true | LocalSubjectAccessReview |
-| `selfsubjectaccessreviews` | | authorization.k8s.io | false | SelfSubjectAccessReview |
-| `selfsubjectrulesreviews` | | authorization.k8s.io | false | SelfSubjectRulesReview |
-| `subjectaccessreviews` | | authorization.k8s.io | false | SubjectAccessReview |
-| `horizontalpodautoscalers` | `hpa` | autoscaling | true | HorizontalPodAutoscaler |
-| `cronjobs` | `cj` | batch | true | CronJob |
-| `jobs` | | batch | true | Job |
-| `certificatesigningrequests` | `csr` | certificates.k8s.io | false | CertificateSigningRequest |
-| `leases` | | coordination.k8s.io | true | Lease |
-| `endpointslices` | | discovery.k8s.io | true | EndpointSlice |
-| `events` | `ev` | events.k8s.io | true | Event |
-| `ingresses` | `ing` | extensions | true | Ingress |
-| `flowschemas` | | flowcontrol.apiserver.k8s.io | false | FlowSchema |
-| `prioritylevelconfigurations` | | flowcontrol.apiserver.k8s.io | false | PriorityLevelConfiguration |
-| `ingressclasses` | | networking.k8s.io | false | IngressClass |
-| `ingresses` | `ing` | networking.k8s.io | true | Ingress |
-| `networkpolicies` | `netpol` | networking.k8s.io | true | NetworkPolicy |
-| `runtimeclasses` | | node.k8s.io | false | RuntimeClass |
-| `poddisruptionbudgets` | `pdb` | policy | true | PodDisruptionBudget |
-| `podsecuritypolicies` | `psp` | policy | false | PodSecurityPolicy |
-| `clusterrolebindings` | | rbac.authorization.k8s.io | false | ClusterRoleBinding |
-| `clusterroles` | | rbac.authorization.k8s.io | false | ClusterRole |
-| `rolebindings` | | rbac.authorization.k8s.io | true | RoleBinding |
-| `roles` | | rbac.authorization.k8s.io | true | Role |
-| `priorityclasses` | `pc` | scheduling.k8s.io | false | PriorityClass |
-| `csidrivers` | | storage.k8s.io | false | CSIDriver |
-| `csinodes` | | storage.k8s.io | false | CSINode |
-| `storageclasses` | `sc` | storage.k8s.io | false | StorageClass |
-| `volumeattachments` | | storage.k8s.io | false | VolumeAttachment |
-
-
-
-
-## 输出选项
-
-
-有关如何格式化或排序某些命令的输出的信息,请使用以下部分。有关哪些命令支持各种输出选项的详细信息,请参阅[kubectl](/zh/docs/reference/kubectl/kubectl/) 参考文档。
-
-
-### 格式化输出
-
-
-所有 `kubectl` 命令的默认输出格式都是人类可读的纯文本格式。要以特定格式向终端窗口输出详细信息,可以将 `-o` 或 `--output` 参数添加到受支持的 `kubectl` 命令中。
-
-
-#### 语法
-
-```shell
-kubectl [command] [TYPE] [NAME] -o=
-```
-
-
-根据 `kubectl` 操作,支持以下输出格式:
-
-
-Output format | Description
---------------| -----------
-`-o custom-columns=` | 使用逗号分隔的[自定义列](#custom-columns)列表打印表。
-`-o custom-columns-file=` | 使用 `` 文件中的[自定义列](#custom-columns)模板打印表。
-`-o json` | 输出 JSON 格式的 API 对象
-`-o jsonpath=` | 打印 [jsonpath](/zh/docs/reference/kubectl/jsonpath/) 表达式定义的字段
-`-o jsonpath-file=` | 打印 `` 文件中 [jsonpath](/zh/docs/reference/kubectl/jsonpath/) 表达式定义的字段。
-`-o name` | 仅打印资源名称而不打印任何其他内容。
-`-o wide` | 以纯文本格式输出,包含任何附加信息。对于 pod 包含节点名。
-`-o yaml` | 输出 YAML 格式的 API 对象。
-
-
-
-
-##### 示例
-
-
-在此示例中,以下命令将单个 pod 的详细信息输出为 YAML 格式的对象:
-
-```shell
-kubectl get pod web-pod-13je7 -o yaml
-```
-
-
-请记住:有关每个命令支持哪种输出格式的详细信息,请参阅 [kubectl](/zh/docs/reference/kubectl/kubectl/) 参考文档。
-
-
-#### 自定义列
-
-
-要定义自定义列并仅将所需的详细信息输出到表中,可以使用该 custom-columns 选项。你可以选择内联定义自定义列或使用模板文件:`-o=custom-columns=` 或 `-o=custom-columns-file=`。
-
-
-##### 示例
-
-
-内联:
-
-```shell
-kubectl get pods -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
-```
-
-
-模板文件:
-
-```shell
-kubectl get pods -o custom-columns-file=template.txt
-```
-
-
-其中,`template.txt` 文件包含:
-
-```
-NAME RSRC
-metadata.name metadata.resourceVersion
-```
-
-
-运行任何一个命令的结果类似于:
-
-```shell
-NAME RSRC
-submit-queue 610995
-```
-
-
-#### Server-side 列
-
-
-`kubectl` 支持从服务器接收关于对象的特定列信息。
-这意味着对于任何给定的资源,服务器将返回与该资源相关的列和行,以便客户端打印。
-通过让服务器封装打印的细节,这允许在针对同一集群使用的客户端之间提供一致的人类可读输出。
-
-
-此功能默认启用。要禁用它,请将该 `--server-print=false` 参数添加到 `kubectl get` 命令中。
-
-
-##### 例子:
-
-
-要打印有关 pod 状态的信息,请使用如下命令:
-
-```shell
-kubectl get pods --server-print=false
-```
-
-
-输出类似于:
-
-```shell
-NAME AGE
-pod-name 1m
-```
-
-
-### 排序列表对象
-
-
-要将对象排序后输出到终端窗口,可以将 `--sort-by` 参数添加到支持的 `kubectl` 命令。通过使用 `--sort-by` 参数指定任何数字或字符串字段来对对象进行排序。要指定字段,请使用 [jsonpath](/zh/docs/reference/kubectl/jsonpath/) 表达式。
-
-
-#### 语法
-
-```shell
-kubectl [command] [TYPE] [NAME] --sort-by=
-```
-
-
-##### 示例
-
-
-要打印按名称排序的 pod 列表,请运行:
-
-```shell
-kubectl get pods --sort-by=.metadata.name
-```
-
-
-## 示例:常用操作
-
-
-使用以下示例集来帮助你熟悉运行常用 kubectl 操作:
-
-
-`kubectl apply` - 以文件或标准输入为准应用或更新资源。
-
-
-```shell
-# 使用 example-service.yaml 中的定义创建服务。
-kubectl apply -f example-service.yaml
-
-# 使用 example-controller.yaml 中的定义创建 replication controller。
-kubectl apply -f example-controller.yaml
-
-# 使用 路径下的任意 .yaml, .yml, 或 .json 文件 创建对象。
-kubectl apply -f
-```
-
-
-`kubectl get` - 列出一个或多个资源。
-
-
-
-```shell
-# 以纯文本输出格式列出所有 pod。
-kubectl get pods
-
-# 以纯文本输出格式列出所有 pod,并包含附加信息(如节点名)。
-kubectl get pods -o wide
-
-# 以纯文本输出格式列出具有指定名称的副本控制器。提示:你可以使用别名 'rc' 缩短和替换 'replicationcontroller' 资源类型。
-kubectl get replicationcontroller
-
-# 以纯文本输出格式列出所有副本控制器和服务。
-kubectl get rc,services
-
-# 以纯文本输出格式列出所有守护程序集,包括未初始化的守护程序集。
-kubectl get ds --include-uninitialized
-
-# 列出在节点 server01 上运行的所有 pod
-kubectl get pods --field-selector=spec.nodeName=server01
-```
-
-
-`kubectl describe` - 显示一个或多个资源的详细状态,默认情况下包括未初始化的资源。
-
-
-
-```shell
-# 显示名称为 的节点的详细信息。
-kubectl describe nodes
-
-# 显示名为 的 pod 的详细信息。
-kubectl describe pods/
-
-# 显示由名为 的副本控制器管理的所有 pod 的详细信息。
-# 记住:副本控制器创建的任何 pod 都以复制控制器的名称为前缀。
-kubectl describe pods
-
-# 描述所有的 pod,不包括未初始化的 pod
-kubectl describe pods
-```
-
-{{< note >}}
-
-
-`kubectl get` 命令通常用于检索同一资源类型的一个或多个资源。
-它具有丰富的参数,允许你使用 `-o` 或 `--output` 参数自定义输出格式。你可以指定 `-w` 或 `--watch` 参数以开始观察特定对象的更新。
-`kubectl describe` 命令更侧重于描述指定资源的许多相关方面。它可以调用对 `API 服务器` 的多个 API 调用来为用户构建视图。
-例如,该 `kubectl describe node` 命令不仅检索有关节点的信息,还检索在其上运行的 pod 的摘要,为节点生成的事件等。
-
-{{< /note >}}
-
-
-`kubectl delete` - 从文件、stdin 或指定标签选择器、名称、资源选择器或资源中删除资源。
-
-
-
-```shell
-# 使用 pod.yaml 文件中指定的类型和名称删除 pod。
-kubectl delete -f pod.yaml
-
-# 删除所有带有 '=' 标签的 Pod 和服务。
-kubectl delete pods,services -l =
-
-# 删除所有 pod,包括未初始化的 pod。
-kubectl delete pods --all
-```
-
-
-`kubectl exec` - 对 pod 中的容器执行命令。
-
-
-
-```shell
-# 从 pod 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
-kubectl exec -- date
-
-# 运行输出 'date' 获取在容器的 中 pod 的输出。
-kubectl exec -c -- date
-
-# 获取一个交互 TTY 并运行 /bin/bash 。默认情况下,输出来自第一个容器。
-kubectl exec -ti -- /bin/bash
-```
-
-
-`kubectl logs` - 打印 Pod 中容器的日志。
-
-
-
-```shell
-# 从 pod 返回日志快照。
-kubectl logs
-
-# 从 pod 开始流式传输日志。这类似于 'tail -f' Linux 命令。
-kubectl logs -f
-```
-
-
-
-## 示例:创建和使用插件
-
-
-使用以下示例来帮助你熟悉编写和使用 `kubectl` 插件:
-
-
-```shell
-# 用任何语言创建一个简单的插件,并为生成的可执行文件命名
-# 以前缀 "kubectl-" 开始
-cat ./kubectl-hello
-```
-
-```shell
-#!/bin/sh
-
-# 这个插件打印单词 "hello world"
-echo "hello world"
-```
-这个插件写好了,把它变成可执行的:
-```bash
-sudo chmod a+x ./kubectl-hello
-
-# 并将其移动到路径中的某个位置
-sudo mv ./kubectl-hello /usr/local/bin
-sudo chown root:root /usr/local/bin
-
-# 你现在已经创建并"安装了"一个 kubectl 插件。
-# 你可以开始使用这个插件,从 kubectl 调用它,就像它是一个常规命令一样
-kubectl hello
-```
-```
-hello world
-```
-
-```shell
-# 你可以"卸载"一个插件,只需从你的路径中删除它
-sudo rm /usr/local/bin/kubectl-hello
-```
-
-
-为了查看可用的所有 `kubectl` 插件,你可以使用 `kubectl plugin list` 子命令:
-```shell
-kubectl plugin list
-```
-
-输出类似于:
-```
-The following kubectl-compatible plugins are available:
-
-/usr/local/bin/kubectl-hello
-/usr/local/bin/kubectl-foo
-/usr/local/bin/kubectl-bar
-```
-
-`kubectl plugin list`指令也可以向你告警哪些插件被运行,或是被其它插件覆盖了,例如:
-```shell
-sudo chmod -x /usr/local/bin/kubectl-foo # 删除执行权限
-kubectl plugin list
-```
-
-```
-The following kubectl-compatible plugins are available:
-
-/usr/local/bin/kubectl-hello
-/usr/local/bin/kubectl-foo
- - warning: /usr/local/bin/kubectl-foo identified as a plugin, but it is not executable
-/usr/local/bin/kubectl-bar
-
-error: one plugin warning was found
-```
-
-
-你可以将插件视为在现有 kubectl 命令之上构建更复杂功能的一种方法:
-
-
-```shell
-cat ./kubectl-whoami
-```
-
-
-接下来的几个示例假设你已经将 `kubectl-whoami` 设置为以下内容:
-
-
-```shell
-#!/bin/bash
-
-#这个插件利用 `kubectl config` 命令基于当前所选上下文输出当前用户的信息
-kubectl config view --template='{{ range .contexts }}{{ if eq .name "'$(kubectl config current-context)'" }}Current user: {{ printf "%s\n" .context.user }}{{ end }}{{ end }}'
-```
-
-
-运行以上命令将为你提供一个输出,其中包含 KUBECONFIG 文件中当前上下文的用户:
-
-
-```shell
-#!/bin/bash
-# 使文件成为可执行的
-sudo chmod +x ./kubectl-whoami
-
-# 然后移动到你的路径中
-sudo mv ./kubectl-whoami /usr/local/bin
-
-kubectl whoami
-Current user: plugins-user
-```
-
-
-要了解关于插件的更多信息,请查看[示例 cli 插件](https://github.com/kubernetes/sample-cli-plugin)。
-
-
-
-## {{% heading "whatsnext" %}}
-
-
-
-* 开始使用 [kubectl](/docs/reference/generated/kubectl/kubectl-commands/) 命令。
-
-* 查看更多[示例 cli 插件](https://github.com/kubernetes/sample-cli-plugin)。
diff --git a/content/zh/docs/reference/kubernetes-api/authentication-resources/_index.md b/content/zh/docs/reference/kubernetes-api/authentication-resources/_index.md
new file mode 100644
index 0000000000..fe92bc8762
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/authentication-resources/_index.md
@@ -0,0 +1,5 @@
+---
+title: "身份认证资源"
+weight: 4
+auto_generated: true
+---
diff --git a/content/zh/docs/reference/kubernetes-api/authentication-resources/service-account-v1.md b/content/zh/docs/reference/kubernetes-api/authentication-resources/service-account-v1.md
new file mode 100644
index 0000000000..e95ed291e7
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/authentication-resources/service-account-v1.md
@@ -0,0 +1,817 @@
+---
+api_metadata:
+ apiVersion: "v1"
+ import: "k8s.io/api/core/v1"
+ kind: "ServiceAccount"
+content_type: "api_reference"
+description: "ServiceAccount 将以下内容绑定在一起:1. 用户可以理解的名称,也可能是外围系统理解的身份标识 2. 可以验证和授权的主体 3. 一组 secret。"
+title: "ServiceAccount"
+weight: 1
+auto_generated: true
+---
+
+
+
+
+
+`apiVersion: v1`
+
+`import "k8s.io/api/core/v1"`
+
+
+## ServiceAccount {#ServiceAccount}
+
+
+ServiceAccount 将以下内容绑定在一起:
+* 用户可以理解的名称,也可能是外围系统理解的身份标识
+* 可以验证和授权的主体
+* 一组 secret
+
+
+
+- **apiVersion**: v1
+
+
+- **kind**: ServiceAccount
+
+
+- **metadata** (}}">ObjectMeta )
+
+
+ 标准对象的元数据,更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **automountServiceAccountToken** (boolean)
+
+
+ AutomountServiceAccountToken 指示作为此服务帐户运行的 pod 是否应自动挂载 API 令牌,
+ 可以在 pod 级别覆盖。
+
+- **imagePullSecrets** ([]}}">LocalObjectReference )
+
+
+ imagePullSecrets 是对同一命名空间中 Secret 的引用列表,用于拉取引用此 ServiceAccount 的 Pod 中的任何镜像。
+ imagePullSecrets 与 Secrets 不同,因为 Secrets 可以挂载在 Pod 中,但 imagePullSecrets 只能由 kubelet 访问。
+ 更多信息: https://kubernetes.io/zh/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod
+
+- **secrets** ([]}}">ObjectReference )
+
+
+ **补丁策略:基于键 `name` 合并**
+
+ Secrets 是允许使用此 ServiceAccount 运行的 pod 使用的同一命名空间中的秘密列表。
+ 仅当此服务帐户的 “kubernetes.io/enforce-mountable-secrets” 注释设置为 “true” 时,Pod 才限于此列表。
+ 此字段不应用于查找自动生成的服务帐户令牌机密以在 pod 之外使用。
+ 相反,可以使用 TokenRequest API 直接请求令牌,或者可以手动创建服务帐户令牌 secret。
+ 更多信息: https://kubernetes.io/docs/concepts/configuration/secret
+
+## ServiceAccountList {#ServiceAccountList}
+
+
+ServiceAccountList 是 ServiceAccount 对象的列表
+
+
+
+- **apiVersion**: v1
+
+
+- **kind**: ServiceAccountList
+
+
+- **metadata** (}}">ListMeta )
+
+
+ 标准列表元数据, 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+
+
+- **items** ([]}}">ServiceAccount ), 必需
+
+
+ ServiceAccount 列表,更多信息: https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-service-account/
+
+
+## 操作 {#Operations}
+
+
+
+
+### `get` 读取指定的 ServiceAccount
+
+#### HTTP 请求
+
+GET /api/v1/namespaces/{namespace}/serviceaccounts/{name}
+
+
+#### 参数
+
+
+- **name** (**位于路径中**): string, 必需
+
+
+ ServiceAccount 的名称
+
+
+- **namespace** (**位于路径中**): string, 必需
+
+ }}">namespace
+
+
+- **pretty** (**查询字符串**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">ServiceAccount ): OK
+
+401: Unauthorized
+
+
+### `list` 列出或监控 ServiceAccount 类型的对象
+
+#### HTTP 请求
+
+GET /api/v1/namespaces/{namespace}/serviceaccounts
+
+
+#### 参数
+
+
+- **namespace** (**位于路径中**): string, 必需
+
+ }}">namespace
+
+
+- **allowWatchBookmarks** (**查询字符串**): boolean
+
+ }}">allowWatchBookmarks
+
+
+- **continue** (**查询字符串**): string
+
+ }}">continue
+
+
+- **fieldSelector** (**查询字符串**): string
+
+ }}">fieldSelector
+
+
+
+- **labelSelector** (**查询字符串**): string
+
+ }}">labelSelector
+
+
+
+- **limit** (*查询字符串*): integer
+
+ }}">limit
+
+
+- **pretty** (**查询字符串**): string
+
+ }}">pretty
+
+
+- **resourceVersion** (**查询字符串**): string
+
+ }}">resourceVersion
+
+
+- **resourceVersionMatch** (**查询字符串**): string
+
+ }}">resourceVersionMatch
+
+
+- **timeoutSeconds** (**查询字符串**): integer
+
+ }}">timeoutSeconds
+
+
+- **watch** (**查询字符串**): boolean
+
+ }}">watch
+
+
+#### 响应
+
+
+200 (}}">ServiceAccountList ): OK
+
+401: Unauthorized
+
+
+### `list` 列出或监控 ServiceAccount 类型的对象
+
+#### HTTP 请求
+
+GET /api/v1/serviceaccounts
+
+
+#### 参数
+
+
+- **allowWatchBookmarks** (**查询字符串**): boolean
+
+ }}">allowWatchBookmarks
+
+
+- **continue** (**查询字符串**): string
+
+ }}">continue
+
+
+- **fieldSelector** (**查询字符串**): string
+
+ }}">fieldSelector
+
+
+
+- **labelSelector** (**查询字符串**): string
+
+ }}">labelSelector
+
+
+- **limit** (**查询字符串**): integer
+
+ }}">limit
+
+
+- **pretty** (**查询字符串**): string
+
+ }}">pretty
+
+
+- **resourceVersion** (**查询字符串**): string
+
+ }}">resourceVersion
+
+
+- **resourceVersionMatch** (**查询字符串**): string
+
+ }}">resourceVersionMatch
+
+
+- **timeoutSeconds** (**查询字符串**): integer
+
+ }}">timeoutSeconds
+
+
+- **watch** (**查询字符串**): boolean
+
+ }}">watch
+
+
+
+#### 响应
+
+200 (}}">ServiceAccountList ): OK
+
+401: Unauthorized
+
+
+### `create` 创建一个 ServiceAccount
+
+#### HTTP 请求
+
+POST /api/v1/namespaces/{namespace}/serviceaccounts
+
+
+#### 参数
+
+
+- **namespace** (**位于路径中**): string, 必需
+
+ }}">namespace
+
+
+- **body**: }}">ServiceAccount ,必需
+
+
+- **dryRun** (**查询字符串**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询字符串**): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询字符串**): string
+
+ }}">fieldValidation
+
+
+
+- **pretty** (**查询字符串**): string
+
+ }}">pretty
+
+
+
+#### 响应
+
+200 (}}">ServiceAccount ): OK
+
+201 (}}">ServiceAccount ): Created
+
+202 (}}">ServiceAccount ): Accepted
+
+401: Unauthorized
+
+
+`update` 替换指定的ServiceAccount
+
+#### HTTP 请求
+
+PUT /api/v1/namespaces/{namespace}/serviceaccounts/{name}
+
+
+#### 参数
+
+
+- **name** (**位于路径中**): string, required
+
+ name of the ServiceAccount
+
+
+
+- **namespace** (**位于路径中**): string, 必需
+
+ }}">namespace
+
+
+- **body**: }}">ServiceAccount ,必需
+
+
+- **dryRun** (**查询字符串**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询字符串**): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询字符串**): string
+
+ }}">fieldValidation
+
+
+
+- **pretty** (**查询字符串**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">ServiceAccount ): OK
+
+201 (}}">ServiceAccount ): Created
+
+401: Unauthorized
+
+
+`patch` 部分更新指定的 ServiceAccount
+
+#### HTTP 请求
+
+PATCH /api/v1/namespaces/{namespace}/serviceaccounts/{name}
+
+
+#### 参数
+
+
+- **name** (**位于路径中**): string, 必需
+
+
+ ServiceAccount 的名称
+
+
+- **namespace** (**位于路径中**): string, 必需
+
+ }}">namespace
+
+
+- **body**: }}">Patch , required
+
+
+
+- **dryRun** (**查询字符串**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询字符串**): string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询字符串**): string
+
+ }}">fieldValidation
+
+
+- **force** (**查询字符串**): boolean
+
+ }}">force
+
+
+
+- **pretty** (**查询字符串**): string
+
+ }}">pretty
+
+
+
+#### 响应
+
+
+200 (}}">ServiceAccount ): OK
+
+201 (}}">ServiceAccount ): Created
+
+401: Unauthorized
+
+
+### `delete` 删除一个 ServiceAccount
+#### HTTP 请求
+
+
+DELETE /api/v1/namespaces/{namespace}/serviceaccounts/{name}
+
+
+#### 参数
+
+
+- **name** (**位于路径中**): string, 必需
+
+
+ ServiceAccount 的名称
+
+
+
+- **namespace** (**位于路径中**): string, 必需
+
+ }}">namespace
+
+
+- **body**: }}">DeleteOptions
+
+
+- **dryRun** (**查询字符串**): string
+
+ }}">dryRun
+
+
+- **gracePeriodSeconds** (*查询字符串*): integer
+
+ }}">gracePeriodSeconds
+
+
+
+- **pretty** (**查询字符串**): string
+
+ }}">pretty
+
+
+- **propagationPolicy** (*in query*): string
+
+ }}">propagationPolicy
+
+
+
+#### 响应
+
+200 (}}">ServiceAccount ): OK
+
+202 (}}">ServiceAccount ): Accepted
+
+401: Unauthorized
+
+
+### `deletecollection` 删除 ServiceAccount 的集合
+
+#### HTTP 请求
+
+DELETE /api/v1/namespaces/{namespace}/serviceaccounts
+
+
+#### 参数
+
+
+- **namespace** (**位于路径中**): string, 必需
+
+ }}">namespace
+
+
+- **body**: }}">DeleteOptions
+
+
+- **continue** (**查询字符串**): string
+
+ }}">continue
+
+
+
+- **dryRun** (**查询字符串**): string
+
+ }}">dryRun
+
+
+- **fieldSelector** (**查询字符串**): string
+
+ }}">fieldSelector
+
+
+
+- **gracePeriodSeconds** (*查询字符串*): integer
+
+ }}">gracePeriodSeconds
+
+
+- **labelSelector** (*查询字符串*): string
+
+ }}">labelSelector
+
+
+- **limit** (*查询字符串*): integer
+
+ }}">limit
+
+
+
+- **pretty** (**查询字符串**): string
+
+ }}">pretty
+
+
+- **propagationPolicy** (**查询字符串**): string
+
+ }}">propagationPolicy
+
+
+- **resourceVersion** (**查询字符串**): string
+
+ }}">resourceVersion
+
+
+- **resourceVersionMatch** (**查询字符串**): string
+
+ }}">resourceVersionMatch
+
+
+- **timeoutSeconds** (**查询字符串**): integer
+
+ }}">timeoutSeconds
+
+
+
+#### 响应
+
+200 (}}">Status ): OK
+
+401: Unauthorized
+
diff --git a/content/zh/docs/reference/kubernetes-api/authentication-resources/token-review-v1.md b/content/zh/docs/reference/kubernetes-api/authentication-resources/token-review-v1.md
new file mode 100644
index 0000000000..0ec8dc91be
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/authentication-resources/token-review-v1.md
@@ -0,0 +1,222 @@
+---
+api_metadata:
+ apiVersion: "authentication.k8s.io/v1"
+ import: "k8s.io/api/authentication/v1"
+ kind: "TokenReview"
+content_type: "api_reference"
+description: "TokenReview 尝试通过验证令牌来确认已知用户。"
+title: "TokenReview"
+weight: 3
+auto_generated: true
+---
+
+
+
+`apiVersion: authentication.k8s.io/v1`
+
+`import "k8s.io/api/authentication/v1"`
+
+
+## TokenReview {#TokenReview}
+
+TokenReview 尝试通过验证令牌来确认已知用户。
+注意:TokenReview 请求可能会被 kube-apiserver 中的 webhook 令牌验证器插件缓存。
+
+
+
+- **apiVersion**: authentication.k8s.io/v1
+
+
+- **kind**: TokenReview
+
+
+- **metadata** (}}">ObjectMeta )
+
+
+ 标准对象的元数据,更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **spec** (}}">TokenReviewSpec ), required
+
+
+ spec 保存有关正在评估的请求的信息
+
+- **status** (}}">TokenReviewStatus )
+
+
+ status 由服务器填写,指示请求是否可以通过身份验证。
+
+
+## TokenReviewSpec {#TokenReviewSpec}
+
+
+TokenReviewPec 是对令牌身份验证请求的描述。
+
+
+
+- **audiences** ([]string)
+
+
+ audiences 是带有令牌的资源服务器标识为受众的标识符列表。
+ 受众感知令牌身份验证器将验证令牌是否适用于此列表中的至少一个受众。
+ 如果未提供受众,受众将默认为 Kubernetes API 服务器的受众。
+
+- **token** (string)
+
+
+ token 是不透明的持有者令牌(Bearer Token)。
+
+## TokenReviewStatus {#TokenReviewStatus}
+
+
+TokenReviewStatus 是令牌认证请求的结果。
+
+
+
+- **audiences** ([]string)
+
+
+ audiences 是身份验证者选择的与 TokenReview 和令牌兼容的受众标识符。标识符是
+ TokenReviewSpec 受众和令牌受众的交集中的任何标识符。设置 spec.audiences
+ 字段的 TokenReview API 的客户端应验证在 status.audiences 字段中返回了兼容的受众标识符,
+ 以确保 TokenReview 服务器能够识别受众。如果 TokenReview
+ 返回一个空的 status.audience 字段,其中 status.authenticated 为 “true”,
+ 则该令牌对 Kubernetes API 服务器的受众有效。
+
+- **authenticated** (boolean)
+
+ authenticated 表示令牌与已知用户相关联。
+
+- **error** (string)
+
+
+ error 表示无法检查令牌
+
+- **user** (UserInfo)
+
+
+ user 是与提供的令牌关联的 UserInfo。
+
+
+ <--
+ *UserInfo holds the information about the user needed to implement the user.Info interface.*
+ -->
+ **UserInfo 保存实现 user.Info 接口所需的用户信息**
+
+ - **user.extra** (map[string][]string)
+
+
+ 验证者提供的任何附加信息。
+
+ - **user.groups** ([]string)
+
+
+ 此用户所属的组的名称。
+
+ - **user.uid** (string)
+
+
+ 跨时间标识此用户的唯一值。如果删除此用户并添加另一个同名用户,他们将拥有不同的 UID。
+
+ - **user.username** (string)
+
+
+ 在所有活动用户中唯一标识此用户的名称。
+
+
+## 操作 {#Operations}
+
+
+
+
+### `create` 创建一个TokenReview
+
+#### HTTP 请求
+
+POST /apis/authentication.k8s.io/v1/tokenreviews
+
+
+#### 参数
+
+- **body**: }}">TokenReview , 必需
+
+- **dryRun** (*in query*): string
+
+ }}">dryRun
+
+- **fieldManager** (*in query*): string
+
+ }}">fieldManager
+
+- **fieldValidation** (*in query*): string
+
+ }}">fieldValidation
+
+- **pretty** (*in query*): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">TokenReview ): OK
+
+201 (}}">TokenReview ): Created
+
+202 (}}">TokenReview ): Accepted
+
+401: Unauthorized
+
diff --git a/content/zh/docs/reference/kubernetes-api/authorization-resources/_index.md b/content/zh/docs/reference/kubernetes-api/authorization-resources/_index.md
new file mode 100644
index 0000000000..ebacd8e225
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/authorization-resources/_index.md
@@ -0,0 +1,7 @@
+---
+title: "鉴权资源"
+weight: 5
+auto_generated: true
+---
+
+
diff --git a/content/zh/docs/reference/kubernetes-api/authorization-resources/cluster-role-binding-v1.md b/content/zh/docs/reference/kubernetes-api/authorization-resources/cluster-role-binding-v1.md
new file mode 100644
index 0000000000..fbfa9dd428
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/authorization-resources/cluster-role-binding-v1.md
@@ -0,0 +1,619 @@
+---
+api_metadata:
+ apiVersion: "rbac.authorization.k8s.io/v1"
+ import: "k8s.io/api/rbac/v1"
+ kind: "ClusterRoleBinding"
+content_type: "api_reference"
+description: "ClusterRoleBinding 引用 ClusterRole,但不包含它。"
+title: "ClusterRoleBinding"
+weight: 6
+auto_generated: false
+---
+
+
+`apiVersion: rbac.authorization.k8s.io/v1`
+
+`import "k8s.io/api/rbac/v1"`
+
+## ClusterRoleBinding {#ClusterRoleBinding}
+
+ClusterRoleBinding 引用 ClusterRole,但不包含它。
+它可以引用全局命名空间中的 ClusterRole,并通过 Subject 添加主体信息。
+
+
+
+- **apiVersion**: rbac.authorization.k8s.io/v1
+
+- **kind**: ClusterRoleBinding
+
+- **metadata** (}}">ObjectMeta )
+
+ 标准对象的元数据。
+
+- **roleRef** (RoleRef),必需
+
+ RoleRef 只能引用全局命名空间中的 ClusterRole。
+ 如果无法解析 RoleRef,则 Authorizer 必定返回一个错误。
+
+
+ **RoleRef 包含指向正被使用的角色的信息。**
+
+ - **roleRef.apiGroup** (string),必需
+
+ apiGroup 是被引用资源的组
+
+ - **roleRef.kind** (string),必需
+
+ kind 是被引用的资源的类别
+
+ - **roleRef.name** (string),必需
+
+ name 是被引用的资源的名称
+
+- **subjects** ([]Subject)
+
+ Subjects 包含角色所适用的对象的引用。
+
+
+ **Subject 包含对角色绑定所适用的对象或用户标识的引用。其中可以包含直接 API 对象的引用或非对象(如用户名和组名)的值。**
+
+ - **subjects.kind** (string),必需
+
+ 被引用的对象的类别。这个 API 组定义的值是 `User`、`Group` 和 `ServiceAccount`。
+ 如果 Authorizer 无法识别类别值,则 Authorizer 应报告一个错误。
+
+ - **subjects.name** (string),必需
+
+ 被引用的对象的名称。
+
+ - **subjects.apiGroup** (string)
+
+ apiGroup 包含被引用主体的 API 组。对于 ServiceAccount 主体默认为 ""。
+ 对于 User 和 Group 主体,默认为 "rbac.authorization.k8s.io"。
+
+ - **subjects.namespace** (string)
+
+ 被引用对象的命名空间。
+ 如果对象类别是 "User" 或 "Group" 等非命名空间作用域的对象且该值不为空,
+ 则 Authorizer 应报告一个错误。
+
+## ClusterRoleBindingList {#ClusterRoleBindingList}
+
+ClusterRoleBindingList 是 ClusterRoleBinding 的集合。
+
+
+
+- **apiVersion**: rbac.authorization.k8s.io/v1
+
+- **kind**: ClusterRoleBindingList
+
+- **metadata** (}}">ListMeta )
+
+ 标准的对象元数据。
+
+- **items** ([]}}">ClusterRoleBinding ),必需
+
+ items 是 ClusterRoleBindings 的列表。
+
+## 操作 {#Operations}
+
+
+
+
+### `get` 读取指定的 ClusterRoleBinding
+
+#### HTTP 请求
+
+GET /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ ClusterRoleBinding 的名称
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">ClusterRoleBinding ): OK
+
+401: Unauthorized
+
+### `list` 列出或观测类别为 ClusterRoleBinding 的对象
+
+#### HTTP 请求
+
+GET /apis/rbac.authorization.k8s.io/v1/clusterrolebindings
+
+#### 参数
+
+- **allowWatchBookmarks** (**查询参数**): boolean
+
+ }}">allowWatchBookmarks
+
+- **continue** (**查询参数**): string
+
+ }}">continue
+
+- **fieldSelector** (**查询参数**): string
+
+ }}">fieldSelector
+
+- **labelSelector** (**查询参数**): string
+
+ }}">labelSelector
+
+- **limit** (**查询参数**): integer
+
+ }}">limit
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **resourceVersion** (**查询参数**): string
+
+ }}">resourceVersion
+
+- **resourceVersionMatch** (**查询参数**): string
+
+ }}">resourceVersionMatch
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+- **watch** (**查询参数**): boolean
+
+ }}">watch
+
+#### 响应
+
+200 (}}">ClusterRoleBindingList ): OK
+
+401: Unauthorized
+
+### `create` 创建 ClusterRoleBinding
+
+#### HTTP 请求
+
+POST /apis/rbac.authorization.k8s.io/v1/clusterrolebindings
+
+#### 参数
+
+- **body**: }}">ClusterRoleBinding ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">ClusterRoleBinding ): OK
+
+201 (}}">ClusterRoleBinding ): Created
+
+202 (}}">ClusterRoleBinding ): Accepted
+
+401: Unauthorized
+
+### `update` 替换指定的 ClusterRoleBinding
+
+#### HTTP 请求
+
+PUT /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ ClusterRoleBinding 的名称
+
+- **body**: }}">ClusterRoleBinding ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">ClusterRoleBinding ): OK
+
+201 (}}">ClusterRoleBinding ): Created
+
+401: Unauthorized
+
+### `patch` 部分更新指定的 ClusterRoleBinding
+
+#### HTTP 请求
+
+PATCH /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ ClusterRoleBinding 的名称
+
+- **body**: }}">Patch ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **force** (**查询参数**): boolean
+
+ }}">force
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">ClusterRoleBinding ): OK
+
+201 (}}">ClusterRoleBinding ): Created
+
+401: Unauthorized
+
+### `delete` 删除 ClusterRoleBinding
+
+#### HTTP 请求
+
+DELETE /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ ClusterRoleBinding 的名称
+
+- **body**: }}">DeleteOptions
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **gracePeriodSeconds** (**查询参数**): integer
+
+ }}">gracePeriodSeconds
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **propagationPolicy** (**查询参数**): string
+
+ }}">propagationPolicy
+
+#### 响应
+
+200 (}}">Status ): OK
+
+202 (}}">Status ): Accepted
+
+401: Unauthorized
+
+### `deletecollection` 删除 ClusterRoleBinding 的集合
+
+#### HTTP 请求
+
+DELETE /apis/rbac.authorization.k8s.io/v1/clusterrolebindings
+
+#### 参数
+
+- **body**: }}">DeleteOptions
+
+- **continue** (**查询参数**): string
+
+ }}">continue
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldSelector** (**查询参数**): string
+
+ }}">fieldSelector
+
+- **gracePeriodSeconds** (**查询参数**): integer
+
+ }}">gracePeriodSeconds
+
+- **labelSelector** (**查询参数**): string
+
+ }}">labelSelector
+
+- **limit** (**查询参数**): integer
+
+ }}">limit
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **propagationPolicy** (**查询参数**): string
+
+ }}">propagationPolicy
+
+- **resourceVersion** (**查询参数**): string
+
+ }}">resourceVersion
+
+- **resourceVersionMatch** (**查询参数**): string
+
+ }}">resourceVersionMatch
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+#### 响应
+
+200 (}}">Status ): OK
+
+401: Unauthorized
diff --git a/content/zh/docs/reference/kubernetes-api/authorization-resources/cluster-role-v1.md b/content/zh/docs/reference/kubernetes-api/authorization-resources/cluster-role-v1.md
new file mode 100644
index 0000000000..c528d0c36f
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/authorization-resources/cluster-role-v1.md
@@ -0,0 +1,592 @@
+---
+api_metadata:
+ apiVersion: "rbac.authorization.k8s.io/v1"
+ import: "k8s.io/api/rbac/v1"
+ kind: "ClusterRole"
+content_type: "api_reference"
+description: "ClusterRole 是一个集群级别的 PolicyRule 逻辑分组,可以被 RoleBinding 或 ClusterRoleBinding 作为一个单元引用。"
+title: "ClusterRole"
+weight: 5
+auto_generated: false
+---
+
+
+`apiVersion: rbac.authorization.k8s.io/v1`
+
+`import "k8s.io/api/rbac/v1"`
+
+## ClusterRole {#ClusterRole}
+
+ClusterRole 是一个集群级别的 PolicyRule 逻辑分组,
+可以被 RoleBinding 或 ClusterRoleBinding 作为一个单元引用。
+
+
+
+- **apiVersion**: rbac.authorization.k8s.io/v1
+
+- **kind**: ClusterRole
+
+- **metadata** (}}">ObjectMeta )
+
+ 标准的对象元数据。
+
+- **aggregationRule** (AggregationRule)
+
+ aggregationRule 是一个可选字段,用于描述如何构建这个 ClusterRole 的 rules。
+ 如果设置了 aggregationRule,则 rules 将由控制器管理,对 rules 的直接变更会被该控制器阻止。
+
+
+ **aggregationRule 描述如何定位并聚合其它 ClusterRole 到此 ClusterRole**
+
+ - **aggregationRule.clusterRoleSelectors** ([]}}">LabelSelector )
+
+ clusterRoleSelectors 包含一个选择器的列表,用于查找 ClusterRole 并创建规则。
+ 如果发现任何选择器匹配的 ClusterRole,将添加其对应的权限。
+
+- **rules** ([]PolicyRule)
+
+ rules 包含了这个 ClusterRole 的所有 PolicyRule。
+
+
+ **PolicyRule 包含描述一个策略规则的信息,但不包含该规则适用于哪个主体或适用于哪个命名空间的信息。**
+
+ - **rules.apiGroups** ([]string)
+
+ apiGroups 是包含资源的 apiGroup 的名称。
+ 如果指定了多个 API 组,则允许针对任何 API 组中的其中一个枚举资源来请求任何操作。
+
+ - **rules.resources** ([]string)
+
+ resources 是此规则所适用的资源的列表。“*” 表示所有资源。
+
+ - **rules.verbs** ([]string),必需
+
+ verbs 是适用于此规则中所包含的所有 ResourceKinds 的动作。
+ “*” 表示所有动作。
+
+ - **rules.resourceNames** ([]string)
+
+ resourceNames 是此规则所适用的资源名称白名单,可选。
+ 空集合意味着允许所有资源。
+
+ - **rules.nonResourceURLs** ([]string)
+
+ nonResourceURLs 是用户应有权访问的一组部分 URL。
+ 允许使用 “*”,但仅能作为路径中最后一段且必须用于完整的一段,
+ 因为非资源 URL 没有划分命名空间。
+ 此字段仅适用于从 ClusterRoleBinding 引用的 ClusterRole。
+ rules 可以应用到 API 资源(如 “pod” 或 “secret”)或非资源 URL 路径(如 “/api”),
+ 但不能同时应用于两者。
+
+## ClusterRoleList {#ClusterRoleList}
+
+ClusterRoleList 是 ClusterRole 的集合。
+
+
+
+- **apiVersion**: rbac.authorization.k8s.io/v1
+
+- **kind**: ClusterRoleList
+
+- **metadata** (}}">ListMeta )
+
+ 标准的对象元数据。
+
+- **items** ([]}}">ClusterRole ),必需
+
+ items 是 ClusterRole 的列表。
+
+## 操作 {#Operations}
+
+
+
+
+### `get` 读取指定的 ClusterRole
+
+#### HTTP 请求
+
+GET /apis/rbac.authorization.k8s.io/v1/clusterroles/{name}
+
+#### 参数
+
+- **name** (路径参数): string,必需
+
+ ClusterRole 的名称
+
+- **pretty** (查询参数): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">ClusterRole ): OK
+
+401: Unauthorized
+
+### `list` 列出或观测类别为 ClusterRole 的对象
+
+#### HTTP 请求
+
+GET /apis/rbac.authorization.k8s.io/v1/clusterroles
+
+#### 参数
+
+- **allowWatchBookmarks** (**查询参数**): boolean
+
+ }}">allowWatchBookmarks
+
+- **continue** (**查询参数**): string
+
+ }}">continue
+
+- **fieldSelector** (**查询参数**): string
+
+ }}">fieldSelector
+
+- **labelSelector** (**查询参数**): string
+
+ }}">labelSelector
+
+- **limit** (**查询参数**): integer
+
+ }}">limit
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **resourceVersion** (**查询参数**): string
+
+ }}">resourceVersion
+
+- **resourceVersionMatch** (**查询参数**): string
+
+ }}">resourceVersionMatch
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+- **watch** (**查询参数**): boolean
+
+ }}">watch
+
+#### 响应
+
+200 (}}">ClusterRoleList ): OK
+
+401: Unauthorized
+
+### `create` 创建一个 ClusterRole
+
+#### HTTP 请求
+
+POST /apis/rbac.authorization.k8s.io/v1/clusterroles
+
+#### 参数
+
+- **body**: }}">ClusterRole ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">ClusterRole ): OK
+
+201 (}}">ClusterRole ): Created
+
+202 (}}">ClusterRole ): Accepted
+
+401: Unauthorized
+
+### `update` 替换指定的 ClusterRole
+
+#### HTTP 请求
+
+PUT /apis/rbac.authorization.k8s.io/v1/clusterroles/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ ClusterRole 的名称
+
+- **body**: }}">ClusterRole ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">ClusterRole ): OK
+
+201 (}}">ClusterRole ): Created
+
+401: Unauthorized
+
+### `patch` 部分更新指定的 ClusterRole
+
+#### HTTP 请求
+
+PATCH /apis/rbac.authorization.k8s.io/v1/clusterroles/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ ClusterRole 的名称
+
+- **body**: }}">Patch ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **force** (**查询参数**): boolean
+
+ }}">force
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">ClusterRole ): OK
+
+201 (}}">ClusterRole ): Created
+
+401: Unauthorized
+
+### `delete` 删除一个 ClusterRole
+
+#### HTTP 请求
+
+DELETE /apis/rbac.authorization.k8s.io/v1/clusterroles/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ ClusterRole 的名称
+
+- **body**: }}">DeleteOptions
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **gracePeriodSeconds** (**查询参数**): integer
+
+ }}">gracePeriodSeconds
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **propagationPolicy** (**查询参数**): string
+
+ }}">propagationPolicy
+
+#### 响应
+
+200 (}}">Status ): OK
+
+202 (}}">Status ): Accepted
+
+401: Unauthorized
+
+### `deletecollection` 删除 ClusterRole 的集合
+
+#### HTTP 请求
+
+DELETE /apis/rbac.authorization.k8s.io/v1/clusterroles
+
+#### 参数
+
+- **body**: }}">DeleteOptions
+
+- **continue** (**查询参数**): string
+
+ }}">continue
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldSelector** (**查询参数**): string
+
+ }}">fieldSelector
+
+- **gracePeriodSeconds** (**查询参数**): integer
+
+ }}">gracePeriodSeconds
+
+- **labelSelector** (**查询参数**): string
+
+ }}">labelSelector
+
+- **limit** (**查询参数**): integer
+
+ }}">limit
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **propagationPolicy** (**查询参数**): string
+
+ }}">propagationPolicy
+
+- **resourceVersion** (**查询参数**): string
+
+ }}">resourceVersion
+
+- **resourceVersionMatch** (**查询参数**): string
+
+ }}">resourceVersionMatch
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+#### 响应
+
+200 (}}">Status ): OK
+
+401: Unauthorized
\ No newline at end of file
diff --git a/content/zh/docs/reference/kubernetes-api/authorization-resources/local-subject-access-review-v1.md b/content/zh/docs/reference/kubernetes-api/authorization-resources/local-subject-access-review-v1.md
new file mode 100644
index 0000000000..26a99fe962
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/authorization-resources/local-subject-access-review-v1.md
@@ -0,0 +1,146 @@
+---
+api_metadata:
+ apiVersion: "authorization.k8s.io/v1"
+ import: "k8s.io/api/authorization/v1"
+ kind: "LocalSubjectAccessReview"
+content_type: "api_reference"
+description: "LocalSubjectAccessReview 检查用户或组是否可以在给定的命名空间内执行某操作。"
+title: "LocalSubjectAccessReview"
+weight: 1
+---
+
+
+`apiVersion: authorization.k8s.io/v1`
+
+`import "k8s.io/api/authorization/v1"`
+
+## LocalSubjectAccessReview {#LocalSubjectAccessReview}
+
+LocalSubjectAccessReview 检查用户或组是否可以在给定的命名空间内执行某操作。
+划分命名空间范围的资源简化了命名空间范围的策略设置,例如权限检查。
+
+
+
+- **apiVersion**: authorization.k8s.io/v1
+
+- **kind**: LocalSubjectAccessReview
+
+- **metadata** (}}">ObjectMeta )
+
+ 标准的列表元数据。
+ 更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+
+- **spec** (}}">SubjectAccessReviewSpec ),必需
+
+ spec 包含有关正在评估的请求的信息。
+ spec.namespace 必须是你的请求所针对的命名空间。
+ 如果留空,则会被设置默认值。
+
+- **status** (}}">SubjectAccessReviewStatus )
+
+ status 由服务器填写,表示请求是否被允许。
+
+
+## 操作 {#Operations}
+
+
+
+### `create` 创建 LocalSubjectAccessReview
+
+#### HTTP 请求
+
+POST /apis/authorization.k8s.io/v1/namespaces/{namespace}/localsubjectaccessreviews
+
+#### 参数
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">LocalSubjectAccessReview ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">LocalSubjectAccessReview ): OK
+
+201 (}}">LocalSubjectAccessReview ): Created
+
+202 (}}">LocalSubjectAccessReview ): Accepted
+
+401: Unauthorized
diff --git a/content/zh/docs/reference/kubernetes-api/authorization-resources/role-binding-v1.md b/content/zh/docs/reference/kubernetes-api/authorization-resources/role-binding-v1.md
new file mode 100644
index 0000000000..38abf1da14
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/authorization-resources/role-binding-v1.md
@@ -0,0 +1,718 @@
+---
+api_metadata:
+ apiVersion: "rbac.authorization.k8s.io/v1"
+ import: "k8s.io/api/rbac/v1"
+ kind: "RoleBinding"
+content_type: "api_reference"
+description: "RoleBinding 引用一个角色,但不包含它。"
+title: "RoleBinding"
+weight: 8
+auto_generated: false
+---
+
+`apiVersion: rbac.authorization.k8s.io/v1`
+
+`import "k8s.io/api/rbac/v1"`
+
+## RoleBinding {#RoleBinding}
+
+RoleBinding 引用一个角色,但不包含它。
+RoleBinding 可以引用相同命名空间中的 Role 或全局命名空间中的 ClusterRole。
+RoleBinding 通过 Subjects 和所在的命名空间信息添加主体信息。
+处于给定命名空间中的 RoleBinding 仅在该命名空间中有效。
+
+
+
+- **apiVersion**: rbac.authorization.k8s.io/v1
+
+- **kind**: RoleBinding
+
+- **metadata** (}}">ObjectMeta )
+
+ 标准的对象元数据。
+
+- **roleRef** (RoleRef),必需
+
+ roleRef 可以引用当前命名空间中的 Role 或全局命名空间中的 ClusterRole。
+ 如果无法解析 roleRef,则 Authorizer 必定返回一个错误。
+
+
+ **roleRef 包含指向正被使用的角色的信息。**
+
+ - **roleRef.apiGroup** (string),必需
+
+ apiGroup 是被引用资源的组
+
+ - **roleRef.kind** (string),必需
+
+ kind 是被引用的资源的类别
+
+ - **roleRef.name** (string),必需
+
+ name 是被引用的资源的名称
+
+- **subjects** ([]Subject)
+
+ subjects 包含角色所适用的对象的引用。
+
+
+ **Subject 包含对角色绑定所适用的对象或用户标识的引用。其中可以包含直接 API 对象的引用或非对象(如用户名和组名)的值。**
+
+ - **subjects.kind** (string),必需
+
+ 被引用的对象的类别。
+ 这个 API 组定义的值是 `User`、`Group` 和 `ServiceAccount`。
+ 如果 Authorizer 无法识别类别值,则 Authorizer 应报告一个错误。
+
+ - **subjects.name** (string),必需
+
+ 被引用的对象的名称。
+
+ - **subjects.apiGroup** (string)
+
+ apiGroup 包含被引用主体的 API 组。
+ 对于 ServiceAccount 主体默认为 ""。
+ 对于 User 和 Group 主体,默认为 "rbac.authorization.k8s.io"。
+
+ - **subjects.namespace** (string)
+
+ 被引用的对象的命名空间。
+ 如果对象类别是 “User” 或 “Group” 等非命名空间作用域的对象且该值不为空,
+ 则 Authorizer 应报告一个错误。
+
+## RoleBindingList {#RoleBindingList}
+
+RoleBindingList 是 RoleBinding 的集合。
+
+
+
+- **apiVersion**: rbac.authorization.k8s.io/v1
+
+- **kind**: RoleBindingList
+
+- **metadata** (}}">ListMeta )
+
+ 标准的对象元数据。
+
+- **items** ([]}}">RoleBinding ),必需
+
+ items 是 RoleBinding 的列表。
+
+## 操作 {#Operations}
+
+
+
+### `get` 读取指定的 RoleBinding
+
+#### HTTP 请求
+
+GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ RoleBinding 的名称
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">RoleBinding ): OK
+
+401: Unauthorized
+
+### `list` 列出或观测类别为 RoleBinding 的对象
+
+#### HTTP 请求
+
+GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings
+
+#### 参数
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **allowWatchBookmarks** (**查询参数**): boolean
+
+ }}">allowWatchBookmarks
+
+- **continue** (**查询参数**): string
+
+ }}">continue
+
+- **fieldSelector** (**查询参数**): string
+
+ }}">fieldSelector
+
+- **labelSelector** (**查询参数**): string
+
+ }}">labelSelector
+
+- **limit** (**查询参数**): integer
+
+ }}">limit
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **resourceVersion** (**查询参数**): string
+
+ }}">resourceVersion
+
+- **resourceVersionMatch** (**查询参数**): string
+
+ }}">resourceVersionMatch
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+- **watch** (**查询参数**): boolean
+
+ }}">watch
+
+
+#### 响应
+
+200 (}}">RoleBindingList ): OK
+
+401: Unauthorized
+
+### `list` 列出或观测类别为 RoleBinding 的对象
+
+#### HTTP 请求
+
+GET /apis/rbac.authorization.k8s.io/v1/rolebindings
+
+#### 参数
+
+- **allowWatchBookmarks** (**查询参数**): boolean
+
+ }}">allowWatchBookmarks
+
+- **continue** (**查询参数**): string
+
+ }}">continue
+
+- **fieldSelector** (**查询参数**): string
+
+ }}">fieldSelector
+
+- **labelSelector** (**查询参数**): string
+
+ }}">labelSelector
+
+- **limit** (**查询参数**): integer
+
+ }}">limit
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **resourceVersion** (**查询参数**): string
+
+ }}">resourceVersion
+
+- **resourceVersionMatch** (**查询参数**): string
+
+ }}">resourceVersionMatch
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+- **watch** (**查询参数**): boolean
+
+ }}">watch
+
+#### 响应
+
+200 (}}">RoleBindingList ): OK
+
+401: Unauthorized
+
+### `create` 创建 RoleBinding
+
+#### HTTP 请求
+
+POST /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings
+
+#### 参数
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">RoleBinding ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">RoleBinding ): OK
+
+201 (}}">RoleBinding ): Created
+
+202 (}}">RoleBinding ): Accepted
+
+401: Unauthorized
+
+### `update` 替换指定的 RoleBinding
+
+#### HTTP 请求
+
+PUT /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ RoleBinding 的名称
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">RoleBinding ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">RoleBinding ): OK
+
+201 (}}">RoleBinding ): Created
+
+401: Unauthorized
+
+### `patch` 部分更新指定的 RoleBinding
+
+#### HTTP 请求
+
+PATCH /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ RoleBinding 的名称
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">Patch ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **force** (**查询参数**): boolean
+
+ }}">force
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">RoleBinding ): OK
+
+201 (}}">RoleBinding ): Created
+
+401: Unauthorized
+
+### `delete` 删除 RoleBinding
+
+#### HTTP 请求
+
+DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ RoleBinding 的名称
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">DeleteOptions
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **gracePeriodSeconds** (**查询参数**): integer
+
+ }}">gracePeriodSeconds
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **propagationPolicy** (**查询参数**): string
+
+ }}">propagationPolicy
+
+#### 响应
+
+200 (}}">Status ): OK
+
+202 (}}">Status ): Accepted
+
+401: Unauthorized
+
+### `deletecollection` 删除 RoleBinding 的集合
+
+#### HTTP 请求
+
+DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/rolebindings
+
+#### 参数
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">DeleteOptions
+
+- **continue** (**查询参数**): string
+
+ }}">continue
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldSelector** (**查询参数**): string
+
+ }}">fieldSelector
+
+- **gracePeriodSeconds** (**查询参数**): integer
+
+ }}">gracePeriodSeconds
+
+- **labelSelector** (**查询参数**): string
+
+ }}">labelSelector
+
+- **limit** (**查询参数**): integer
+
+ }}">limit
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **propagationPolicy** (**查询参数**): string
+
+ }}">propagationPolicy
+
+- **resourceVersion** (**查询参数**): string
+
+ }}">resourceVersion
+
+- **resourceVersionMatch** (**查询参数**): string
+
+ }}">resourceVersionMatch
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+#### 响应
+
+200 (}}">Status ): OK
+
+401: Unauthorized
\ No newline at end of file
diff --git a/content/zh/docs/reference/kubernetes-api/authorization-resources/role-v1.md b/content/zh/docs/reference/kubernetes-api/authorization-resources/role-v1.md
new file mode 100644
index 0000000000..8b6f136299
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/authorization-resources/role-v1.md
@@ -0,0 +1,690 @@
+---
+api_metadata:
+ apiVersion: "rbac.authorization.k8s.io/v1"
+ import: "k8s.io/api/rbac/v1"
+ kind: "Role"
+content_type: "api_reference"
+description: "Role 是一个按命名空间划分的 PolicyRule 逻辑分组,可以被 RoleBinding 作为一个单元引用。"
+title: "Role"
+weight: 7
+auto_generated: false
+---
+
+
+`apiVersion: rbac.authorization.k8s.io/v1`
+
+`import "k8s.io/api/rbac/v1"`
+
+## Role {#Role}
+
+Role 是一个按命名空间划分的 PolicyRule 逻辑分组,可以被 RoleBinding 作为一个单元引用。
+
+
+
+- **apiVersion**: rbac.authorization.k8s.io/v1
+
+- **kind**: Role
+
+- **metadata** (}}">ObjectMeta )
+
+ 标准的对象元数据。
+
+- **rules** ([]PolicyRule)
+
+ rules 包含了这个 Role 的所有 PolicyRule。
+
+
+ **PolicyRule 包含描述一个策略规则的信息,但不包含该规则适用于哪个主体或适用于哪个命名空间的信息。**
+
+ - **rules.apiGroups** ([]string)
+
+ apiGroups 是包含资源的 apiGroup 的名称。
+ 如果指定了多个 API 组,则允许对任何 API 组中的其中一个枚举资源来请求任何操作。
+
+ - **rules.resources** ([]string)
+
+ resources 是此规则所适用的资源的列表。
+ “*” 表示所有资源。
+
+ - **rules.verbs** ([]string),必需
+
+ verbs 是适用于此规则中所包含的所有 ResourceKinds 的动作。
+ “*” 表示所有动作。
+
+ - **rules.resourceNames** ([]string)
+
+ resourceNames 是此规则所适用的资源名称白名单,可选。
+ 空集合意味着允许所有资源。
+
+ - **rules.nonResourceURLs** ([]string)
+
+ nonResourceURLs 是用户应有权访问的一组部分 URL。
+ 允许使用 “*”,但仅能作为路径中最后一段且必须用于完整的一段,
+ 因为非资源 URL 没有划分命名空间。
+ 此字段仅适用于从 ClusterRoleBinding 引用的 ClusterRole。
+ rules 可以应用到 API 资源(如 “pod” 或 “secret”)或非资源 URL 路径(如 “/api”),
+ 但不能同时应用于两者。
+
+## RoleList {#RoleList}
+
+RoleList 是 Role 的集合。
+
+
+
+- **apiVersion**: rbac.authorization.k8s.io/v1
+
+- **kind**: RoleList
+
+- **metadata** (}}">ListMeta )
+
+ 标准的对象元数据。
+
+- **items** ([]}}">Role ),必需
+
+ items 是 Role 的列表。
+
+## 操作 {#Operations}
+
+
+
+### `get` 读取指定的 Role
+
+#### HTTP 请求
+
+GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ Role 的名称
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">Role ): OK
+
+401: Unauthorized
+
+### `list` 列出或观测类别为 Role 的对象
+
+#### HTTP 请求
+
+GET /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles
+
+#### 参数
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **allowWatchBookmarks** (**查询参数**): boolean
+
+ }}">allowWatchBookmarks
+
+- **continue** (**查询参数**): string
+
+ }}">continue
+
+- **fieldSelector** (**查询参数**): string
+
+ }}">fieldSelector
+
+- **labelSelector** (**查询参数**): string
+
+ }}">labelSelector
+
+- **limit** (**查询参数**): integer
+
+ }}">limit
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **resourceVersion** (**查询参数**): string
+
+ }}">resourceVersion
+
+- **resourceVersionMatch** (**查询参数**): string
+
+ }}">resourceVersionMatch
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+- **watch** (**查询参数**): boolean
+
+ }}">watch
+
+#### 响应
+
+200 (}}">RoleList ): OK
+
+401: Unauthorized
+
+### `list` 列出或观测类别为 Role 的对象
+
+#### HTTP 请求
+
+GET /apis/rbac.authorization.k8s.io/v1/roles
+
+#### 参数
+
+- **allowWatchBookmarks** (**查询参数**): boolean
+
+ }}">allowWatchBookmarks
+
+- **continue** (**查询参数**): string
+
+ }}">continue
+
+- **fieldSelector** (**查询参数**): string
+
+ }}">fieldSelector
+
+- **labelSelector** (**查询参数**): string
+
+ }}">labelSelector
+
+- **limit** (**查询参数**): integer
+
+ }}">limit
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **resourceVersion** (**查询参数**): string
+
+ }}">resourceVersion
+
+- **resourceVersionMatch** (**查询参数**): string
+
+ }}">resourceVersionMatch
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+- **watch** (**查询参数**): boolean
+
+ }}">watch
+
+#### 响应
+
+200 (}}">RoleList ): OK
+
+401: Unauthorized
+
+### `create` 创建 Role
+
+#### HTTP 请求
+
+POST /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles
+
+#### 参数
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">Role ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">Role ): OK
+
+201 (}}">Role ): Created
+
+202 (}}">Role ): Accepted
+
+401: Unauthorized
+
+### `update` 替换指定的 Role
+
+#### HTTP 请求
+
+PUT /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ Role 的名称
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">Role ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">Role ): OK
+
+201 (}}">Role ): Created
+
+401: Unauthorized
+
+### `patch` 部分更新指定的 Role
+
+#### HTTP 请求
+
+PATCH /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ Role 的名称
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">Patch ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **force** (**查询参数**): boolean
+
+ }}">force
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">Role ): OK
+
+201 (}}">Role ): Created
+
+401: Unauthorized
+
+### `delete` 删除 Role
+
+#### HTTP 请求
+
+DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles/{name}
+
+#### 参数
+
+- **name** (**路径参数**): string,必需
+
+ Role 的名称
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">DeleteOptions
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **gracePeriodSeconds** (**查询参数**): integer
+
+ }}">gracePeriodSeconds
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **propagationPolicy** (**查询参数**): string
+
+ }}">propagationPolicy
+
+#### 响应
+
+200 (}}">Status ): OK
+
+202 (}}">Status ): Accepted
+
+401: Unauthorized
+
+### `deletecollection` 删除 Role 的集合
+
+#### HTTP 请求
+
+DELETE /apis/rbac.authorization.k8s.io/v1/namespaces/{namespace}/roles
+
+#### 参数
+
+- **namespace** (**路径参数**): string,必需
+
+ }}">namespace
+
+- **body**: }}">DeleteOptions
+
+- **continue** (**查询参数**): string
+
+ }}">continue
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldSelector** (**查询参数**): string
+
+ }}">fieldSelector
+
+- **gracePeriodSeconds** (**查询参数**): integer
+
+ }}">gracePeriodSeconds
+
+- **labelSelector** (**查询参数**): string
+
+ }}">labelSelector
+
+- **limit** (**查询参数**): integer
+
+ }}">limit
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+- **propagationPolicy** (**查询参数**): string
+
+ }}">propagationPolicy
+
+- **resourceVersion** (**查询参数**): string
+
+ }}">resourceVersion
+
+- **resourceVersionMatch** (**查询参数**): string
+
+ }}">resourceVersionMatch
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+#### 响应
+
+200 (}}">Status ): OK
+
+401: Unauthorized
diff --git a/content/zh/docs/reference/kubernetes-api/authorization-resources/self-subject-access-review-v1.md b/content/zh/docs/reference/kubernetes-api/authorization-resources/self-subject-access-review-v1.md
new file mode 100644
index 0000000000..164a054c41
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/authorization-resources/self-subject-access-review-v1.md
@@ -0,0 +1,230 @@
+---
+api_metadata:
+ apiVersion: "authorization.k8s.io/v1"
+ import: "k8s.io/api/authorization/v1"
+ kind: "SelfSubjectAccessReview"
+content_type: "api_reference"
+description: "SelfSubjectAccessReview 检查当前用户是否可以执行某操作。"
+title: "SelfSubjectAccessReview"
+weight: 2
+---
+
+`apiVersion: authorization.k8s.io/v1`
+
+`import "k8s.io/api/authorization/v1"`
+
+## SelfSubjectAccessReview {#SelfSubjectAccessReview}
+
+SelfSubjectAccessReview 检查当前用户是否可以执行某操作。
+不填写 spec.namespace 表示 “在所有命名空间中”。
+Self 是一个特殊情况,因为用户应始终能够检查自己是否可以执行某操作。
+
+
+
+- **apiVersion**: authorization.k8s.io/v1
+
+- **kind**: SelfSubjectAccessReview
+
+
+- **metadata** (}}">ObjectMeta )
+
+ 标准的列表元数据。
+ 更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **spec** (}}">SelfSubjectAccessReviewSpec ),必需
+
+ spec 包含有关正在评估的请求的信息。
+ user 和 group 必须为空。
+
+- **status** (}}">SubjectAccessReviewStatus )
+
+ status 由服务器填写,表示请求是否被允许。
+
+## SelfSubjectAccessReviewSpec {#SelfSubjectAccessReviewSpec}
+
+SelfSubjectAccessReviewSpec 是访问请求的描述。
+resourceAuthorizationAttributes 和 nonResourceAuthorizationAttributes 二者必须设置其一,并且只能设置其一。
+
+
+
+
+- **nonResourceAttributes** (NonResourceAttributes)
+
+ nonResourceAttributes 描述非资源访问请求的信息。
+
+
+ **nonResourceAttributes 包括提供给 Authorizer 接口进行非资源请求鉴权时所用的属性。**
+
+ - **nonResourceAttributes.path** (string)
+
+ path 是请求的 URL 路径。
+
+ - **nonResourceAttributes.verb** (string)
+
+ verb 是标准的 HTTP 动作。
+
+- **resourceAttributes** (ResourceAttributes)
+
+ resourceAuthorizationAttributes 描述资源访问请求的信息。
+
+
+ **resourceAttributes 包括提供给 Authorizer 接口进行资源请求鉴权时所用的属性。**
+
+ - **resourceAttributes.group** (string)
+
+ group 是资源的 API 组。
+ "*" 表示所有组。
+
+ - **resourceAttributes.name** (string)
+
+ name 是 "get" 正在请求或 "delete" 已删除的资源的名称。
+ ""(空字符串)表示所有资源。
+
+ - **resourceAttributes.namespace** (string)
+
+ namespace 是正在请求的操作的命名空间。
+ 目前,无命名空间和所有命名空间之间没有区别。
+ 对于 LocalSubjectAccessReviews,默认为 ""(空字符串)。
+ 对于集群范围的资源,默认为 ""(空字符串)。
+ 对于来自 SubjectAccessReview 或 SelfSubjectAccessReview 的命名空间范围的资源,""(空字符串)表示 "all"(所有资源)。
+
+ - **resourceAttributes.resource** (string)
+
+ resource 是现有的资源类别之一。
+ "*" 表示所有资源类别。
+
+ - **resourceAttributes.subresource** (string)
+
+ subresource 是现有的资源类型之一。
+ "" 表示无。
+
+ - **resourceAttributes.verb** (string)
+
+ verb 是 kubernetes 资源 API 动作,例如 get、list、watch、create、update、delete、proxy。
+ "*" 表示所有动作。
+
+ - **resourceAttributes.version** (string)
+
+ version 是资源的 API 版本。
+ "*" 表示所有版本。
+
+## 操作 {#Operations}
+
+
+
+### `create` 创建 SelfSubjectAccessReview
+
+#### HTTP 请求
+
+POST /apis/authorization.k8s.io/v1/selfsubjectaccessreviews
+
+#### 参数
+
+- **body**: }}">SelfSubjectAccessReview ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">SelfSubjectAccessReview ): OK
+
+201 (}}">SelfSubjectAccessReview ): Created
+
+202 (}}">SelfSubjectAccessReview ): Accepted
+
+401: Unauthorized
diff --git a/content/zh/docs/reference/kubernetes-api/authorization-resources/self-subject-rules-review-v1.md b/content/zh/docs/reference/kubernetes-api/authorization-resources/self-subject-rules-review-v1.md
new file mode 100644
index 0000000000..e4c39decdc
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/authorization-resources/self-subject-rules-review-v1.md
@@ -0,0 +1,246 @@
+---
+api_metadata:
+ apiVersion: "authorization.k8s.io/v1"
+ import: "k8s.io/api/authorization/v1"
+ kind: "SelfSubjectRulesReview"
+content_type: "api_reference"
+description: "SelfSubjectRulesReview 枚举当前用户可以在某命名空间内执行的操作集合。"
+title: "SelfSubjectRulesReview"
+weight: 3
+---
+
+`apiVersion: authorization.k8s.io/v1`
+
+`import "k8s.io/api/authorization/v1"`
+
+## SelfSubjectRulesReview {#SelfSubjectRulesReview}
+
+SelfSubjectRulesReview 枚举当前用户可以在某命名空间内执行的操作集合。
+返回的操作列表可能不完整,具体取决于服务器的鉴权模式以及评估过程中遇到的任何错误。
+SelfSubjectRulesReview 应由 UI 用于显示/隐藏操作,或让最终用户尽快理解自己的权限。
+SelfSubjectRulesReview 不得被外部系统使用以驱动鉴权决策,
+因为这会引起混淆代理人(confused deputy)、缓存有效期/吊销(cache lifetime/revocation)和正确性问题。
+SubjectAccessReview 和 LocalAccessReview 是遵从 API 服务器所做鉴权决策的正确方式。
+
+
+
+- **apiVersion**: authorization.k8s.io/v1
+
+- **kind**: SelfSubjectRulesReview
+
+
+- **metadata** (}}">ObjectMeta )
+
+ 标准的列表元数据。
+ 更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **spec** (}}">SelfSubjectRulesReviewSpec ),必需
+
+ spec 包含有关正在评估的请求的信息。
+
+- **status** (SubjectRulesReviewStatus)
+
+ status 由服务器填写,表示用户可以执行的操作的集合。
+
+
+ **SubjectRulesReviewStatus 包含规则检查的结果。
+ 此检查可能不完整,具体取决于服务器配置的 Authorizer 的集合以及评估期间遇到的任何错误。
+ 由于鉴权规则是叠加的,所以如果某个规则出现在列表中,即使该列表不完整,也可以安全地假定该主体拥有该权限。**
+
+ - **status.incomplete** (boolean),必需
+
+ 当此调用返回的规则不完整时,incomplete 结果为 true。
+ 这种情况常见于 Authorizer(例如外部 Authorizer)不支持规则评估时。
+
+ - **status.nonResourceRules** ([]NonResourceRule),必需
+
+ nonResourceRules 是允许主体对非资源执行路径执行的操作列表。
+ 该列表顺序不重要,可以包含重复项,还可能不完整。
+
+
+ **nonResourceRule 包含描述非资源路径的规则的信息。**
+
+ - **status.nonResourceRules.verbs** ([]string),必需
+
+ verb 是 kubernetes 非资源 API 动作的列表,例如 get、post、put、delete、patch、head、options。
+ "*" 表示所有动作。
+
+ - **status.nonResourceRules.nonResourceURLs** ([]string)
+
+ nonResourceURLs 是用户应有权访问的一组部分 URL。
+ 允许使用 "*",但仅能作为路径中最后一段且必须用于完整的一段。
+ "*" 表示全部。
+
+ - **status.resourceRules** ([]ResourceRule),必需
+
+ resourceRules 是允许主体对资源执行的操作的列表。
+ 该列表顺序不重要,可以包含重复项,还可能不完整。
+
+
+ **resourceRule 是允许主体对资源执行的操作的列表。该列表顺序不重要,可以包含重复项,还可能不完整。**
+
+ - **status.resourceRules.verbs** ([]string),必需
+
+ verb 是 kubernetes 资源 API 动作的列表,例如 get、list、watch、create、update、delete、proxy。
+ "*" 表示所有动作。
+
+ - **status.resourceRules.apiGroups** ([]string)
+
+ apiGroups 是包含资源的 APIGroup 的名称。
+ 如果指定了多个 API 组,则允许对任何 API 组中枚举的资源之一请求任何操作。
+ "*" 表示所有 APIGroup。
+
+ - **status.resourceRules.resourceNames** ([]string)
+
+ resourceNames 是此规则所适用的资源名称白名单,可选。
+ 空集合意味着允许所有资源。
+ "*" 表示所有资源。
+
+ - **status.resourceRules.resources** ([]string)
+
+ resources 是此规则所适用的资源的列表。
+ "*" 表示指定 APIGroup 中的所有资源。
+ "*/foo" 表示指定 APIGroup 中所有资源的子资源 "foo"。
+
+ - **status.evaluationError** (string)
+
+ evaluationError 可以与 rules 一起出现。
+ 它表示在规则评估期间发生错误,例如 Authorizer 不支持规则评估以及 resourceRules 和/或 nonResourceRules 可能不完整。
+
+## SelfSubjectRulesReviewSpec {#SelfSubjectRulesReviewSpec}
+
+
+SelfSubjectRulesReviewSpec 定义 SelfSubjectRulesReview 的规范。
+
+
+
+- **namespace** (string)
+
+ namespace 是要评估规则的命名空间。
+ 必需。
+
+
+## 操作 {#Operations}
+
+
+
+### `create` 创建 SelfSubjectRulesReview
+
+#### HTTP 请求
+
+POST /apis/authorization.k8s.io/v1/selfsubjectrulesreviews
+
+#### 参数
+
+- **body**: }}">SelfSubjectRulesReview ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">SelfSubjectRulesReview ): OK
+
+201 (}}">SelfSubjectRulesReview ): Created
+
+202 (}}">SelfSubjectRulesReview ): Accepted
+
+401: Unauthorized
diff --git a/content/zh/docs/reference/kubernetes-api/authorization-resources/subject-access-review-v1.md b/content/zh/docs/reference/kubernetes-api/authorization-resources/subject-access-review-v1.md
new file mode 100644
index 0000000000..be42036d46
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/authorization-resources/subject-access-review-v1.md
@@ -0,0 +1,301 @@
+---
+api_metadata:
+ apiVersion: "authorization.k8s.io/v1"
+ import: "k8s.io/api/authorization/v1"
+ kind: "SubjectAccessReview"
+content_type: "api_reference"
+description: "SubjectAccessReview 检查用户或组是否可以执行某操作。"
+title: "SubjectAccessReview"
+weight: 4
+---
+
+
+`apiVersion: authorization.k8s.io/v1`
+
+`import "k8s.io/api/authorization/v1"`
+
+## SubjectAccessReview {#SubjectAccessReview}
+
+SubjectAccessReview 检查用户或组是否可以执行某操作。
+
+
+
+- **apiVersion**: authorization.k8s.io/v1
+
+- **kind**: SubjectAccessReview
+
+- **metadata** (}}">ObjectMeta )
+
+ 标准的列表元数据。
+ 更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **spec** (}}">SubjectAccessReviewSpec ),必需
+
+ spec 包含有关正在评估的请求的信息。
+
+- **status** (}}">SubjectAccessReviewStatus )
+
+ status 由服务器填写,表示请求是否被允许。
+
+## SubjectAccessReviewSpec {#SubjectAccessReviewSpec}
+
+SubjectAccessReviewSpec 是访问请求的描述。
+resourceAuthorizationAttributes 和 nonResourceAuthorizationAttributes 二者必须设置其一,并且只能设置其一。
+
+
+
+
+- **extra** (map[string][]string)
+
+ extra 对应于来自鉴权器的 user.Info.GetExtra() 方法。
+ 由于这是针对 Authorizer 的输入,所以它需要在此处反映。
+
+- **groups** ([]string)
+
+ groups 是你正在测试的组。
+
+- **nonResourceAttributes** (NonResourceAttributes)
+
+ nonResourceAttributes 描述非资源访问请求的信息。
+
+
+ **nonResourceAttributes 包括提供给 Authorizer 接口进行非资源请求鉴权时所用的属性。**
+
+ - **nonResourceAttributes.path** (string)
+
+ path 是请求的 URL 路径。
+
+ - **nonResourceAttributes.verb** (string)
+
+ verb 是标准的 HTTP 动作。
+
+- **resourceAttributes** (ResourceAttributes)
+
+ resourceAuthorizationAttributes 描述资源访问请求的信息。
+
+
+ **resourceAttributes 包括提供给 Authorizer 接口进行资源请求鉴权时所用的属性。**
+
+ - **resourceAttributes.group** (string)
+
+ group 是资源的 API 组。
+ "*" 表示所有资源。
+
+ - **resourceAttributes.name** (string)
+
+ name 是 "get" 正在请求或 "delete" 已删除的资源。
+ ""(空字符串)表示所有资源。
+
+ - **resourceAttributes.namespace** (string)
+
+ namespace 是正在请求的操作的命名空间。
+ 目前,无命名空间和所有命名空间之间没有区别。
+ 对于 LocalSubjectAccessReviews,默认为 ""(空字符串)。
+ 对于集群范围的资源,默认为 ""(空字符串)。
+ 对于来自 SubjectAccessReview 或 SelfSubjectAccessReview 的命名空间范围的资源,
+ ""(空字符串)表示 "all"(所有资源)。
+
+ - **resourceAttributes.resource** (string)
+
+ resource 是现有的资源类别之一。
+ "*" 表示所有资源类别。
+
+ - **resourceAttributes.subresource** (string)
+
+ subresource 是现有的资源类别之一。
+ "" 表示无子资源。
+
+ - **resourceAttributes.verb** (string)
+
+ verb 是 kubernetes 资源的 API 动作,例如 get、list、watch、create、update、delete、proxy。
+ "*" 表示所有动作。
+
+ - **resourceAttributes.version** (string)
+
+ version 是资源的 API 版本。
+ "*" 表示所有版本。
+
+- **uid** (string)
+
+ 有关正在请求的用户的 UID 信息。
+
+- **user** (string)
+
+ user 是你正在测试的用户。
+ 如果你指定 “user” 而不是 “groups”,它将被解读为“如果 user 不是任何组的成员,将会怎样”。
+
+## SubjectAccessReviewStatus {#SubjectAccessReviewStatus}
+
+SubjectAccessReviewStatus
+
+
+
+
+- **allowed** (boolean),必需
+
+ allowed 是必需的。
+ 如果允许该操作,则为 true,否则为 false。
+
+- **denied** (boolean)
+
+ denied 是可选的。
+ 如果拒绝该操作,则为 true,否则为 false。
+ 如果 allowed 和 denied 均为 false,则 Authorizer 对是否鉴权操作没有意见。
+ 如果 allowed 为 true,则 denied 不能为 true。
+
+- **evaluationError** (string)
+
+ evaluationError 表示鉴权检查期间发生一些错误。
+ 出现错误的情况下完全有可能继续确定鉴权状态。
+ 例如,RBAC 可能缺少一个角色,但仍存在足够多的角色进行绑定,进而了解请求有关的原因。
+
+- **reason** (string)
+
+ reason 是可选的。
+ 它表示为什么允许或拒绝请求。
+
+## 操作 {#Operations}
+
+
+
+### `create` 创建 SubjectAccessReview
+
+#### HTTP 请求
+
+POST /apis/authorization.k8s.io/v1/subjectaccessreviews
+
+#### 参数
+
+- **body**: }}">SubjectAccessReview ,必需
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">SubjectAccessReview ): OK
+
+201 (}}">SubjectAccessReview ): Created
+
+202 (}}">SubjectAccessReview ): Accepted
+
+401: Unauthorized
diff --git a/content/zh/docs/reference/kubernetes-api/cluster-resources/_index.md b/content/zh/docs/reference/kubernetes-api/cluster-resources/_index.md
new file mode 100644
index 0000000000..59a6eaa4f5
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/cluster-resources/_index.md
@@ -0,0 +1,7 @@
+---
+title: "集群资源"
+weight: 8
+auto_generated: true
+---
+
+
diff --git a/content/zh/docs/reference/kubernetes-api/cluster-resources/binding-v1.md b/content/zh/docs/reference/kubernetes-api/cluster-resources/binding-v1.md
new file mode 100644
index 0000000000..1b23f65ee8
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/cluster-resources/binding-v1.md
@@ -0,0 +1,222 @@
+---
+api_metadata:
+ apiVersion: "v1"
+ import: "k8s.io/api/core/v1"
+ kind: "Binding"
+content_type: "api_reference"
+description: "Binding 将一个对象与另一个对象联系起来; 例如,一个 Pod 被调度程序绑定到一个节点。"
+title: "Binding"
+weight: 9
+auto_generated: true
+---
+
+`apiVersion: v1`
+
+`import "k8s.io/api/core/v1"`
+
+
+## Binding {#Binding}
+
+Binding 将一个对象与另一个对象联系起来; 例如,一个 Pod 被调度程序绑定到一个节点。
+已在 1.7 版本弃用,请使用 Pod 的 binding 子资源。
+
+
+- **apiVersion**: v1
+
+
+- **kind**: Binding
+
+
+- **metadata** (}}">ObjectMeta )
+
+ 标准对象的元数据, 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+
+
+- **target** (}}">ObjectReference ), 必需
+
+ 要绑定到标准对象的目标对象。
+
+## 操作 {#operations}
+
+
+
+
+### `create` 创建一个 Binding
+
+#### HTTP 请求
+
+POST /api/v1/namespaces/{namespace}/bindings
+
+#### 参数
+
+
+- **namespace** (**路径参数**): string, 必需
+
+ }}">namespace
+
+
+- **body**: }}">Binding , 必需
+
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+
+
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">Binding ): OK
+
+201 (}}">Binding ): Created
+
+202 (}}">Binding ): Accepted
+
+401: Unauthorized
+
+
+### `create` 创建 Pod 的绑定
+
+#### HTTP 请求
+
+POST /api/v1/namespaces/{namespace}/pods/{name}/binding
+
+#### 参数
+
+- **name** (**路径参数**): string, 必需
+
+ Binding 的名称
+
+- **namespace** (**路径参数**): string, 必需
+
+ }}">namespace
+
+- **body**: }}">Binding , 必需
+
+
+- **dryRun** (**查询参数**): string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**): string
+
+ }}">fieldManager
+
+- **fieldValidation** (**查询参数**): string
+
+ }}">fieldValidation
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+#### 响应
+
+200 (}}">Binding ): OK
+
+201 (}}">Binding ): Created
+
+202 (}}">Binding ): Accepted
+
+401: Unauthorized
diff --git a/content/zh/docs/reference/kubernetes-api/cluster-resources/namespace-v1.md b/content/zh/docs/reference/kubernetes-api/cluster-resources/namespace-v1.md
new file mode 100644
index 0000000000..dc0e8d4ef2
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/cluster-resources/namespace-v1.md
@@ -0,0 +1,839 @@
+---
+api_metadata:
+ apiVersion: "v1"
+ import: "k8s.io/api/core/v1"
+ kind: "Namespace"
+content_type: "api_reference"
+description: "Namespace 为名字提供作用域。"
+title: "Namespace"
+weight: 2
+---
+
+
+
+`apiVersion: v1`
+
+`import "k8s.io/api/core/v1"`
+
+## Namespace {#Namespace}
+
+Namespace 为名字提供作用域。使用多个命名空间是可选的。
+
+
+- **apiVersion**: v1
+
+- **kind**: Namespace
+
+- **metadata** (}}">ObjectMeta )
+
+ 标准的对象元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+- **spec** (}}">NamespaceSpec )
+
+ spec 定义了 Namespace 的行为。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+
+- **status** (}}">NamespaceStatus )
+
+ status 描述了当前 Namespace 的状态。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
+
+## NamespaceSpec {#NamespaceSpec}
+
+NamespaceSpec 用于描述 Namespace 的属性。
+
+
+
+- **finalizers** ([]string)
+
+
+ finalizers 是一个不透明的值列表,只有此列表为空时才能从存储中永久删除对象。 更多信息: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
+
+## NamespaceStatus {#NamespaceStatus}
+
+NamespaceStatus 表示 Namespace 的当前状态信息。
+
+
+- **conditions** ([]NamespaceCondition)
+
+ **补丁策略:基于 `type` 健合并**
+
+ 表示命名空间当前状态的最新可用状况。
+
+
+
+ **NamespaceCondition 包含命名空间状态的详细信息。**
+
+ - **conditions.status** (string),必需
+
+ 状况(condition)的状态,取值为 True、False 或 Unknown 之一。
+
+ - **conditions.type** (string), 必需
+
+ 命名空间控制器状况的类型。
+
+ - **conditions.lastTransitionTime** (Time)
+
+
+
+ **Time 是对 time.Time 的封装。Time 支持对 YAML 和 JSON 进行正确封包。为 time 包的许多函数方法提供了封装器。**
+
+ - **conditions.message** (string)
+
+ - **conditions.reason** (string)
+
+- **phase** (string)
+
+
+ phase 是命名空间的当前生命周期阶段。更多信息: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
+
+## NamespaceList {#NamespaceList}
+
+NamespaceList 是一个命名空间列表。
+
+
+- **apiVersion**: v1
+
+
+- **kind**: NamespaceList
+
+
+- **metadata** (}}">ListMeta )
+
+ 标准的列表元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+
+
+
+- **items** ([]}}">Namespace ),必需
+
+
+ items 是列表中的 Namespace 对象列表。更多信息: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+
+
+
+## 操作 {#Operations}
+
+
+
+
+### `get` 读取指定的 Namespace
+
+#### HTTP 请求
+
+GET /api/v1/namespaces/{name}
+
+#### 参数
+
+
+- **name** (**路径参数**):string,必需
+
+ Namespace 的名称
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">Namespace ):OK
+
+401:Unauthorized
+
+
+### `get` 读取指定 Namespace 的状态
+
+#### HTTP 请求
+
+GET /api/v1/namespaces/{name}/status
+
+#### 参数
+
+
+- **name** (**路径参数**):string,必需
+
+ Namespace 的名称
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">Namespace ):OK
+
+401:Unauthorized
+
+
+### `list` 列出或者检查类别为 Namespace 的对象
+
+#### HTTP 请求
+
+GET /api/v1/namespaces
+
+#### 参数
+
+
+- **allowWatchBookmarks** (**查询参数**):boolean
+
+ }}">allowWatchBookmarks
+
+
+- **continue** (**查询参数**):string
+
+ }}">continue
+
+
+- **fieldSelector** (**查询参数**):string
+
+ }}">fieldSelector
+
+
+- **labelSelector** (**查询参数**):string
+
+ }}">labelSelector
+
+
+- **limit** (**查询参数**):integer
+
+ }}">limit
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+- **resourceVersion** (**查询参数**):string
+
+ }}">resourceVersion
+
+
+- **resourceVersionMatch** (**查询参数**):string
+
+ }}">resourceVersionMatch
+
+
+- **timeoutSeconds** (**查询参数**):integer
+
+ }}">timeoutSeconds
+
+
+- **watch** (**查询参数**):boolean
+
+ }}">watch
+
+
+#### 响应
+
+200 (}}">NamespaceList ):OK
+
+401:Unauthorized
+
+
+### `create` 创建一个 Namespace
+
+#### HTTP 请求
+
+POST /api/v1/namespaces
+
+#### 参数
+
+- **body**: }}">Namespace ,必需
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">Namespace ):OK
+
+201 (}}">Namespace ):Created
+
+202 (}}">Namespace ):Accepted
+
+401:Unauthorized
+
+
+### `update` 替换指定的 Namespace
+
+#### HTTP 请求
+
+PUT /api/v1/namespaces/{name}
+
+#### 参数
+
+
+- **name** (**路径参数**):string,必需
+
+ Namespace 的名称
+
+- **body**: }}">Namespace , 必需
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">Namespace ):OK
+
+201 (}}">Namespace ):Created
+
+401:Unauthorized
+
+
+### `update` 替换指定 Namespace 的终结器
+
+#### HTTP 请求
+
+PUT /api/v1/namespaces/{name}/finalize
+
+#### 参数
+
+
+- **name** (**路径参数**):string,必需
+
+ Namespace 的名称
+
+- **body**: }}">Namespace ,必需
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">Namespace ):OK
+
+201 (}}">Namespace ):Created
+
+401:Unauthorized
+
+
+### `update` 替换指定 Namespace 的状态
+
+#### HTTP 请求
+
+PUT /api/v1/namespaces/{name}/status
+
+#### 参数
+
+
+- **name** (**路径阐述**):string,必需
+
+ Namespace 的名称
+
+- **body**: }}">Namespace ,必需
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">Namespace ):OK
+
+201 (}}">Namespace ):Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新指定的 Namespace
+
+#### HTTP 请求
+
+PATCH /api/v1/namespaces/{name}
+
+#### 参数
+
+
+- **name** (**路径参数**):string,必需
+
+ Namespace 的名称
+
+
+- **body**: }}">Patch ,必需
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+
+- **force** (**查询参数**):boolean
+
+ }}">force
+
+
+- **pretty** (**查询参数**): string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">Namespace ):OK
+
+201 (}}">Namespace ):Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新指定 Namespace 的状态
+
+#### HTTP 请求
+
+PATCH /api/v1/namespaces/{name}/status
+
+#### 参数
+
+
+- **name** (**路径参数**):string,必需
+
+ Namespace 的名称
+
+
+- **body**: }}">Patch ,必需
+
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+
+- **force** (**查询参数**): boolean
+
+ }}">force
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+
+200 (}}">Namespace ):OK
+
+201 (}}">Namespace ):Created
+
+401:Unauthorized
+
+
+### `delete` 删除一个 Namespace
+
+#### HTTP 请求
+
+DELETE /api/v1/namespaces/{name}
+
+#### 参数
+
+
+- **name** (**路径参数**):string,必需
+
+ Namespace 的名称
+
+- **body**: }}">DeleteOptions
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **gracePeriodSeconds** (*查询参数*):integer
+
+ }}">gracePeriodSeconds
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+- **propagationPolicy** (**查询参数**):string
+
+ }}">propagationPolicy
+
+
+#### 响应
+
+200 (}}">Status ):OK
+
+202 (}}">Status ):Accepted
+
+401:Unauthorized
diff --git a/content/zh/docs/reference/kubernetes-api/common-definitions/delete-options.md b/content/zh/docs/reference/kubernetes-api/common-definitions/delete-options.md
index a4bd2e0405..b1790035e3 100644
--- a/content/zh/docs/reference/kubernetes-api/common-definitions/delete-options.md
+++ b/content/zh/docs/reference/kubernetes-api/common-definitions/delete-options.md
@@ -4,8 +4,8 @@ api_metadata:
import: "k8s.io/apimachinery/pkg/apis/meta/v1"
kind: "DeleteOptions"
content_type: "api_reference"
-description: "删除 API 对象时可能会提供删除选项。"
-title: "删除选项"
+description: "删除 API 对象时可以提供 DeleteOptions。"
+title: "DeleteOptions"
weight: 1
auto_generated: true
---
@@ -25,7 +25,7 @@ auto_generated: true
`import "k8s.io/apimachinery/pkg/apis/meta/v1"`
-删除 API 对象时可能会提供 DeleteOptions。
+删除 API 对象时可以提供 DeleteOptions。
@@ -39,7 +39,7 @@ auto_generated: true
`APIVersion` 定义对象表示的版本化模式。
服务器应将已识别的模式转换为最新的内部值,并可能拒绝无法识别的值。
- 更多信息:https ://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+ 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
-
+
- **preconditions** (Preconditions)
先决条件必须在执行删除之前完成。如果无法满足这些条件,将返回 409(冲突)状态。
-
+
*执行操作(更新、删除等)之前必须满足先决条件。*
@@ -119,7 +119,7 @@ auto_generated: true
- **preconditions.uid** (string)
- 指定目标 UID.
+ 指定目标 UID。
+
标签选择器是对一组资源的标签查询。
-`matchLabels` 和 `matchExpressions` 的结果按逻辑与的关系组合。一个 `empty` 标签选择器匹配所有对象。一个 `null` 标签选择器不匹配任何对象。
+`matchLabels` 和 `matchExpressions` 的结果按逻辑与的关系组合。
+一个 `empty` 标签选择器匹配所有对象。一个 `null` 标签选择器不匹配任何对象。
@@ -42,7 +45,7 @@ weight: 2
- **matchExpressions** ([]LabelSelectorRequirement)
- `matchExpressions` 是 `LabelSelectorRequirement` 的列表,这些需求结果按逻辑与的关系来计算。
+ `matchExpressions` 是标签选择器要求的列表,这些要求的结果按逻辑与的关系来计算。
*标签选择器要求是包含值、键和关联键和值的运算符的选择器。*
@@ -55,9 +58,9 @@ weight: 2
- **matchExpressions.key** (string), 必填
- *补丁策略: 按照键 `key` 合并*
+ *补丁策略:按照键 `key` 合并*
- `key` 是选择器应用的标签键.
+ `key` 是选择器应用的标签键。
- **selfLink** (string)
selfLink 表示此对象的 URL,由系统填充,只读。
- 已弃用。 Kubernetes 将在 1.20 版本中停止传播该字段,并计划在 1.21 版本中删除该字段。
+ 已弃用:selfLink 是一个遗留的只读字段,不再由系统填充。
diff --git a/content/zh/docs/reference/kubernetes-api/common-definitions/node-selector-requirement.md b/content/zh/docs/reference/kubernetes-api/common-definitions/node-selector-requirement.md
old mode 100755
new mode 100644
index e643330a1b..018672655d
--- a/content/zh/docs/reference/kubernetes-api/common-definitions/node-selector-requirement.md
+++ b/content/zh/docs/reference/kubernetes-api/common-definitions/node-selector-requirement.md
@@ -10,7 +10,6 @@ weight: 5
auto_generated: true
---
+
+
+
+
`import "k8s.io/api/core/v1"`
@@ -35,7 +46,7 @@ A node selector requirement is a selector that contains values, a key, and an op
- **key** (string), 必选
@@ -46,27 +57,11 @@ A node selector requirement is a selector that contains values, a key, and an op
- **operator** (string), required
Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
-
- Possible enum values:
- - `"DoesNotExist"`
- - `"Exists"`
- - `"Gt"`
- - `"In"`
- - `"Lt"`
- - `"NotIn"`
-->
- **operator** (string), 必选
表示键与一组值的关系的运算符。有效的运算符包括:In、NotIn、Exists、DoesNotExist、Gt 和 Lt。
- 可选值:
- - `"DoesNotExist"`
- - `"Exists"`
- - `"Gt"`
- - `"In"`
- - `"Lt"`
- - `"NotIn"`
-
name 在命名空间内必须是唯一的。创建资源时需要,尽管某些资源可能允许客户端请求自动地生成适当的名称。
名称主要用于创建幂等性和配置定义。无法更新。
- 更多信息:http://kubernetes.io/docs/user-guide/identifiers#names
+ 更多信息: http://kubernetes.io/docs/user-guide/identifiers#names
- **generateName** (string)
@@ -72,7 +72,7 @@ ObjectMeta 是所有持久化资源必须具有的元数据,其中包括用户
如果指定了此字段并且生成的名称存在,则服务器将不会返回 409 ——相反,它将返回 201 Created 或 500,
原因是 ServerTimeout 指示在分配的时间内找不到唯一名称,客户端应重试(可选,在 Retry-After 标头中指定的时间之后)。
- 仅在未指定 name 时应用。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
+ 仅在未指定 name 时应用。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
- **namespace** (string)
@@ -84,7 +84,7 @@ ObjectMeta 是所有持久化资源必须具有的元数据,其中包括用户
namespace 定义了一个值空间,其中每个名称必须唯一。空命名空间相当于 “default” 命名空间,但 “default” 是规范表示。
并非所有对象都需要限定在命名空间中——这些对象的此字段的值将为空。
- 必须是 DNS_LABEL。无法更新。更多信息:http://kubernetes.io/docs/user-guide/namespaces
+ 必须是 DNS_LABEL。无法更新。更多信息: http://kubernetes.io/docs/user-guide/namespaces
- **labels** (map[string]string)
@@ -92,7 +92,7 @@ ObjectMeta 是所有持久化资源必须具有的元数据,其中包括用户
Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels
-->
可用于组织和分类(确定范围和选择)对象的字符串键和值的映射。
- 可以匹配 ReplicationControllers 和 Service 的选择器。更多信息:http://kubernetes.io/docs/user-guide/labels
+ 可以匹配 ReplicationControllers 和 Service 的选择器。更多信息: http://kubernetes.io/docs/user-guide/labels
- **annotations** (map[string]string)
@@ -100,7 +100,7 @@ ObjectMeta 是所有持久化资源必须具有的元数据,其中包括用户
Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations
-->
annotations 是一个非结构化的键值映射,存储在资源中,可以由外部工具设置以存储和检索任意元数据。
- 它们不可查询,在修改对象时应保留。更多信息:http://kubernetes.io/docs/user-guide/annotations
+ 它们不可查询,在修改对象时应保留。更多信息: http://kubernetes.io/docs/user-guide/annotations
@@ -251,17 +251,17 @@ ObjectMeta 是所有持久化资源必须具有的元数据,其中包括用户
- **ownerReferences.kind** (string),必选
- 被引用资源的类别。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+ 被引用资源的类别。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- **ownerReferences.name** (string),必选
- 被引用资源的名称。更多信息:http://kubernetes.io/docs/user-guide/identifiers#names
+ 被引用资源的名称。更多信息: http://kubernetes.io/docs/user-guide/identifiers#names
- **ownerReferences.uid** (string),必选
- 被引用资源的 uid。更多信息:http://kubernetes.io/docs/user-guide/identifiers#uids
+ 被引用资源的 uid。更多信息: http://kubernetes.io/docs/user-guide/identifiers#uids
- **ownerReferences.blockOwnerDeletion** (boolean)
@@ -293,7 +293,7 @@ ObjectMeta 是所有持久化资源必须具有的元数据,其中包括用户
不能保证在单独的操作中按发生前的顺序设置。
客户端不得设置此值。它以 RFC3339 形式表示,并采用 UTC。
- 由系统填充。只读。列表为空。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+ 由系统填充。只读。列表为空。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
UID 是该对象在时间和空间上的唯一值。它通常由服务器在成功创建资源时生成,并且不允许使用 PUT 操作更改。
- 由系统填充。只读。更多信息:http://kubernetes.io/docs/user-guide/identifiers#uids
+ 由系统填充。只读。更多信息: http://kubernetes.io/docs/user-guide/identifiers#uids
### 忽略字段 {#Ignored}
@@ -391,10 +391,11 @@ ObjectMeta 是所有持久化资源必须具有的元数据,其中包括用户
- **clusterName** (string)
- 对象所属的集群的名称。这用于区分不同集群中具有相同名称和命名空间的资源。
- 该字段现在没有在任何地方设置,如果在创建或更新请求中设置,apiserver 将忽略它。
+ 已弃用:clusterName 是一个总是被系统清除并且从未使用过的遗留字段;它将在 1.25 中完全删除。
+ go 结构体中的对应字段名称已更改,以帮助客户端检测意外使用。
diff --git a/content/zh/docs/reference/kubernetes-api/common-definitions/object-reference.md b/content/zh/docs/reference/kubernetes-api/common-definitions/object-reference.md
index 2655586d21..03280cceda 100644
--- a/content/zh/docs/reference/kubernetes-api/common-definitions/object-reference.md
+++ b/content/zh/docs/reference/kubernetes-api/common-definitions/object-reference.md
@@ -84,28 +84,28 @@ ObjectReference包含足够的信息,允许你检查或修改引用的对象
- **fieldPath** (string)
如果引用的是对象的某个对象是整个对象,则该字符串而不是应包含的 JSON/Go 字段有效访问语句,
- 例如`desiredState.manifest.containers[ 2 ]`。例如,如果对象引用针对的是 Pod 中的一个容器,
- 此字段取值类似于:`spec.containers{name}`(`name`指触发的容器的名称),
- 或者如果没有指定容器名称,`spec.containers[ 2 ]`(此Pod中索引为2的容器)。
+ 例如 `desiredState.manifest.containers[ 2 ]`。例如,如果对象引用针对的是 Pod 中的一个容器,
+ 此字段取值类似于:`spec.containers{name}`(`name` 指触发的容器的名称),
+ 或者如果没有指定容器名称,`spec.containers[ 2 ]`(此 Pod 中索引为 2 的容器)。
选择这种只是为了有一些定义好的语法来引用对象的部分。
- **kind** (string)
- 被引用者的类别(kind)。 更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md #types-kinds
+ 被引用者的类别(kind)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- **name** (string)
- 被引用对象的名称。更多信息:https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+ 被引用对象的名称。更多信息: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
- **namespace** (string)
- 被引用对象的名字空间。更多信息:https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
+ 被引用对象的名字空间。更多信息: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
- **resourceVersion** (string)
- 被引用对象的特定资源版本(如果有)。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
+ 被引用对象的特定资源版本(如果有)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency
- **uid** (string)
- 被引用对象的UID。更多信息:https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
+ 被引用对象的UID。更多信息: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
diff --git a/content/zh/docs/reference/kubernetes-api/common-definitions/quantity.md b/content/zh/docs/reference/kubernetes-api/common-definitions/quantity.md
index 84ce0dd899..82d129c4ad 100644
--- a/content/zh/docs/reference/kubernetes-api/common-definitions/quantity.md
+++ b/content/zh/docs/reference/kubernetes-api/common-definitions/quantity.md
@@ -68,7 +68,7 @@ The serialization format is:
-->
```
::=
- (注意 可能为空, 例如 的 "" 情形。)
+ (注意 可能为空,例如 的 "" 情形。)
::= 0 | 1 | ... | 9
::= |
::= | . | . | .
@@ -76,7 +76,7 @@ The serialization format is:
::= |
::= | |
::= Ki | Mi | Gi | Ti | Pi | Ei
- (国际单位制度;查阅:http://physics.nist.gov/cuu/Units/binary.html)
+ (国际单位制度;查阅: http://physics.nist.gov/cuu/Units/binary.html)
::= m | "" | k | M | G | T | P | E
(注意,1024 = 1ki 但 1000 = 1k;我没有选择大写。)
::= "e" | "E"
diff --git a/content/zh/docs/reference/kubernetes-api/common-definitions/status.md b/content/zh/docs/reference/kubernetes-api/common-definitions/status.md
new file mode 100644
index 0000000000..0d3a6de1b6
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/common-definitions/status.md
@@ -0,0 +1,208 @@
+---
+api_metadata:
+ apiVersion: ""
+ import: "k8s.io/apimachinery/pkg/apis/meta/v1"
+ kind: "Status"
+content_type: "api_reference"
+description: "状态(Status)是不返回其他对象的调用的返回值。"
+title: "Status"
+weight: 12
+auto_generated: true
+---
+
+
+
+
+
+
+
+`import "k8s.io/apimachinery/pkg/apis/meta/v1"`
+
+
+
+状态(Status)是不返回其他对象的调用的返回值。
+
+
+
+- **apiVersion** (string)
+
+
+
+ APIVersion 定义对象表示的版本化模式。
+ 服务器应将已识别的模式转换为最新的内部值,并可能拒绝无法识别的值。
+ 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
+
+- **code** (int32)
+
+
+ 此状态的建议 HTTP 返回代码,如果未设置,则为 0。
+
+- **details** (StatusDetails)
+
+
+ 与原因(Reason)相关的扩展数据。每个原因都可以定义自己的扩展细节。
+ 此字段是可选的,并且不保证返回的数据符合任何模式,除非由原因类型定义。
+
+
+
+ *StatusDetails 是一组附加属性,可以由服务器设置以提供有关响应的附加信息。*
+ *状态对象的原因字段定义将设置哪些属性。*
+ *客户端必须忽略与每个属性的定义类型不匹配的字段,并且应该假定任何属性可能为空、无效或未定义。*
+
+ - **details.causes** ([]StatusCause)
+
+
+ Causes 数组包含与 StatusReason 故障相关的更多详细信息。
+ 并非所有 StatusReasons 都可以提供详细的原因。
+
+
+
+ *StatusCause 提供有关 api.Status 失败的更多信息,包括遇到多个错误的情况。*
+
+ - **details.causes.field** (string)
+
+
+ 导致此错误的资源字段,由其 JSON 序列化命名。
+ 可能包括嵌套属性的点和后缀表示法。数组是从零开始索引的。
+ 由于字段有多个错误,字段可能会在一系列原因中出现多次。可选。
+
+
+ 示例:
+ - “name”:当前资源上的字段 “name”
+ - “items[0].name”:“items” 中第一个数组条目上的字段 “name”
+
+ - **details.causes.message** (string)
+
+
+ 对错误原因的可读描述。该字段可以按原样呈现给读者。
+
+ - **details.causes.reason** (string)
+
+
+ 错误原因的机器可读描述。如果此值为空,则没有可用信息。
+
+ - **details.group** (string)
+
+
+ 与状态 StatusReason 关联的资源的组属性。
+
+ - **details.kind** (string)
+
+
+ 与状态 StatusReason 关联的资源的种类属性。
+ 在某些操作上可能与请求的资源种类不同。
+ 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+
+ - **details.name** (string)
+
+
+ 与状态 StatusReason 关联的资源的名称属性(当有一个可以描述的名称时)。
+
+ - **details.retryAfterSeconds** (int32)
+
+
+ 如果指定,则应重试操作前的时间(以秒为单位)。
+ 一些错误可能表明客户端必须采取替代操作——对于这些错误,此字段可能指示在采取替代操作之前等待多长时间。
+
+ - **details.uid** (string)
+
+
+ 资源的 UID(当有单个可以描述的资源时)。
+ 更多信息: http://kubernetes.io/docs/user-guide/identifiers#uids
+
+- **kind** (string)
+
+
+ Kind 是一个字符串值,表示此对象表示的 REST 资源。
+ 服务器可以从客户端提交请求的端点推断出这一点。
+ 无法更新。驼峰式规则。
+ 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+
+- **message** (string)
+
+
+ 此操作状态的人类可读描述。
+
+- **metadata** (}}">ListMeta )
+
+
+ 标准列表元数据。
+ 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
+
+
+- **reason** (string)
+
+
+ 机器可读的说明,说明此操作为何处于“失败”状态。
+ 如果此值为空,则没有可用信息。
+ Reason 澄清了 HTTP 状态代码,但不会覆盖它。
+
+- **status** (string)
+
+
+ 操作状态。“Success”或“Failure” 之一。
+ 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
diff --git a/content/zh/docs/reference/kubernetes-api/common-parameters/common-parameters.md b/content/zh/docs/reference/kubernetes-api/common-parameters/common-parameters.md
new file mode 100644
index 0000000000..f53524eb9d
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/common-parameters/common-parameters.md
@@ -0,0 +1,246 @@
+---
+api_metadata:
+ apiVersion: ""
+ import: ""
+ kind: "Common Parameters"
+content_type: "api_reference"
+description: ""
+title: "常用参数"
+weight: 10
+auto_generated: true
+---
+
+
+
+
+
+
+## allowWatchBookmarks {#allowWatchBookmarks}
+
+allowWatchBookmarks 字段请求类型为 BOOKMARK 的监视事件。
+没有实现书签的服务器可能会忽略这个标志,并根据服务器的判断发送书签。
+客户端不应该假设书签会在任何特定的时间间隔返回,也不应该假设服务器会在会话期间发送任何书签事件。
+如果当前请求不是 watch 请求,则忽略该字段。
+
+
+## continue {#continue}
+
+当需要从服务器检索更多结果时,应该设置 continue 选项。由于这个值是服务器定义的,
+客户端只能使用先前查询结果中具有相同查询参数的 continue 值(continue值除外),
+服务器可能拒绝它识别不到的 continue 值。
+如果指定的 continue 值不再有效,无论是由于过期(通常是 5 到 15 分钟)
+还是服务器上的配置更改,服务器将响应 "410 ResourceExpired" 错误和一个 continue 令牌。
+
+如果客户端需要一个一致的列表,它必须在没有 continue 字段的情况下重新发起 list 请求。
+否则,客户端可能会发送另一个带有 410 错误令牌的 list 请求,服务器将响应从下一个键开始的列表,
+但列表数据来自最新的快照,这与之前
+的列表结果不一致。第一个列表请求之后的对象创建,修改,或删除的对象将被包含在响应中,
+只要他们的键是在“下一个键”之后。
+
+当 watch 字段为 true 时,不支持此字段。客户端可以从服务器返回的最后一个 resourceVersion 值开始监视,就不会错过任何修改。
+
+
+## dryRun {#dryRun}
+
+表示不应该持久化所请求的修改。无效或无法识别的 dryRun 指令将导致错误响应,
+并且服务器不再对请求进行进一步处理。有效值为:
+- All: 将处理所有的演练阶段
+
+
+## fieldManager {#fieldManager}
+
+fieldManager 是与进行这些更改的参与者或实体相关联的名称。
+长度小于或128个字符且仅包含可打印字符,如 https://golang.org/pkg/unicode/#IsPrint 所定义。
+
+
+## fieldSelector {#fieldSelector}
+
+根据返回对象的字段限制返回对象列表的选择器。默认为返回所有字段。
+
+
+## fieldValidation {#fieldValidation}
+
+
+fieldValidation 指示服务器如何处理请求(POST/PUT/PATCH)中包含未知或重复字段的对象,
+前提是 `ServerSideFieldValidation` 特性门控也已启用。
+
+有效值为:
+- Ignore:这将忽略从对象中默默删除的所有未知字段,并将忽略除解码器遇到的最后一个重复字段之外的所有字段。
+ 这是在 v1.23 之前的默认行为,也是当 `ServerSideFieldValidation` 特性门控被禁用时的默认行为。
+
+- Warn:这将针对从对象中删除的各个未知字段以及所遇到的各个重复字段,分别通过标准警告响应头发出警告。
+ 如果没有其他错误,请求仍然会成功,并且只会保留所有重复字段中的最后一个。
+ 这是启用 `ServerSideFieldValidation` 特性门控时的默认值。
+
+- Strict:如果从对象中删除任何未知字段,或者存在任何重复字段,将使请求失败并返回 BadRequest 错误。
+
+
+
+## force {#force}
+
+Force 将“强制”应用请求。这意味着用户将重新获得他人拥有的冲突领域。
+对于非应用补丁请求,Force 标志必须不设置。
+
+
+## gracePeriodSeconds {#gracePeriodSeconds}
+
+删除对象前的持续时间(秒数)。值必须为非负整数。取值为 0 表示立即删除。
+如果该值为 nil,将使用指定类型的默认宽限期。如果没有指定,默认为每个对象的设置值。0 表示立即删除。
+
+
+## labelSelector {#labelSelector}
+
+通过标签限制返回对象列表的选择器。默认为返回所有对象。
+
+
+## limit {#limit}
+
+limit 是一个列表调用返回的最大响应数。如果有更多的条目,服务器会将列表元数据上的
+'continue' 字段设置为一个值,该值可以用于相同的初始查询来检索下一组结果。
+
+设置 limit 可能会在所有请求的对象被过滤掉的情况下返回少于请求的条目数量(下限为零),
+并且客户端应该只根据 continue 字段是否存在来确定是否有更多的结果可用。
+服务器可能选择不支持 limit 参数,并将返回所有可用的结果。
+如果指定了 limit 并且 continue 字段为空,客户端可能会认为没有更多的结果可用。
+如果 watch 为 true,则不支持此字段。
+
+服务器保证在使用 continue 时返回的对象将与不带 limit 的列表调用相同,——
+也就是说,在发出第一个请求后所创建、修改或删除的对象将不包含在任何后续的继续请求中。
+
+这有时被称为一致性快照,确保使用 limit 的客户端在分块接收非常大的结果的客户端能够看到所有可能的对象。
+如果对象在分块列表期间被更新,则返回计算第一个列表结果时存在的对象版本。
+
+
+## namespace {#namespace}
+
+
+对象名称和身份验证范围,例如用于团队和项目。
+
+
+## pretty {#pretty}
+
+
+如果设置为 'true' ,那么输出是规范的打印。
+
+
+
+## propagationPolicy {#propagationPolicy}
+
+该字段决定是否以及如何执行垃圾收集。可以设置此字段或 OrphanDependents,但不能同时设置。
+默认策略由 metadata.finalizers 和特定资源的默认策略设置决定。可接受的值是:
+- 'Orphan':孤立依赖项;
+- 'Background':允许垃圾回收器后台删除依赖;
+- 'Foreground':一个级联策略,前台删除所有依赖项。
+
+
+## resourceVersion {#resourceVersion}
+
+resourceVersion 对请求所针对的资源版本设置约束。
+详情请参见 https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions。
+
+默认不设置
+
+
+## resourceVersionMatch {#resourceVersionMatch}
+
+resourceVersionMatch 字段决定如何将 resourceVersion 应用于列表调用。
+强烈建议对设置了 resourceVersion 的列表调用设置 resourceVersion 匹配,
+具体请参见 https://kubernetes.io/docs/reference/using-api/api-concepts/#resource-versions。
+
+默认不设置
+
+
+
+## timeoutSeconds {#timeoutSeconds}
+
+list/watch 调用的超时秒数。这选项限制调用的持续时间,无论是否有活动。
+
+
+## watch {#watch}
+
+监视对所述资源的更改,并将其这类变更以添加、更新和删除通知流的形式返回。指定 resourceVersion。
+
+
+
+
+
+
diff --git a/content/zh/docs/reference/kubernetes-api/config-and-storage-resources/_index.md b/content/zh/docs/reference/kubernetes-api/config-and-storage-resources/_index.md
new file mode 100644
index 0000000000..df1ea40f98
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/config-and-storage-resources/_index.md
@@ -0,0 +1,7 @@
+---
+title: "配置和存储资源"
+weight: 3
+auto_generated: true
+---
+
+
diff --git a/content/zh/docs/reference/kubernetes-api/extend-resources/_index.md b/content/zh/docs/reference/kubernetes-api/extend-resources/_index.md
new file mode 100644
index 0000000000..de42eb4957
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/extend-resources/_index.md
@@ -0,0 +1,8 @@
+---
+title: "扩展资源"
+weight: 7
+auto_generated: true
+---
+
+
+
diff --git a/content/zh/docs/reference/kubernetes-api/policy-resources/_index.md b/content/zh/docs/reference/kubernetes-api/policy-resources/_index.md
new file mode 100644
index 0000000000..71adda0968
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/policy-resources/_index.md
@@ -0,0 +1,7 @@
+---
+title: "策略资源"
+weight: 6
+auto_generated: true
+---
+
+
diff --git a/content/zh/docs/reference/kubernetes-api/service-resources/_index.md b/content/zh/docs/reference/kubernetes-api/service-resources/_index.md
new file mode 100644
index 0000000000..83967dd848
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/service-resources/_index.md
@@ -0,0 +1,7 @@
+---
+title: "Service 资源"
+weight: 2
+auto_generated: true
+---
+
+
diff --git a/content/zh/docs/reference/kubernetes-api/workload-resources/_index.md b/content/zh/docs/reference/kubernetes-api/workload-resources/_index.md
new file mode 100644
index 0000000000..bafb086f60
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/workload-resources/_index.md
@@ -0,0 +1,6 @@
+---
+title: "工作负载资源"
+weight: 1
+auto_generated: true
+---
+
diff --git a/content/zh/docs/reference/kubernetes-api/workload-resources/controller-revision-v1.md b/content/zh/docs/reference/kubernetes-api/workload-resources/controller-revision-v1.md
new file mode 100644
index 0000000000..d29eda09df
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/workload-resources/controller-revision-v1.md
@@ -0,0 +1,1069 @@
+---
+api_metadata:
+ apiVersion: "apps/v1"
+ import: "k8s.io/api/apps/v1"
+ kind: "ControllerRevision"
+content_type: "api_reference"
+description: "ControllerRevision 实现了状态数据的不可变快照。"
+title: "ControllerRevision"
+weight: 7
+auto_generated: false
+---
+
+
+
+
+`apiVersion: apps/v1`
+
+`import "k8s.io/api/apps/v1"`
+
+
+## ControllerRevision {#ControllerRevision}
+
+
+ControllerRevision 实现了状态数据的不可变快照。
+客户端负责序列化和反序列化对象,包含对象内部状态。
+成功创建 ControllerRevision 后,将无法对其进行更新。
+API 服务器将无法成功验证所有尝试改变 data 字段的请求。
+但是,可以删除 ControllerRevisions。
+请注意,由于 DaemonSet 和 StatefulSet 控制器都使用它来进行更新和回滚,所以这个对象是 beta 版。
+但是,它可能会在未来版本中更改名称和表示形式,客户不应依赖其稳定性。
+它主要供控制器内部使用。
+
+
+
+
+- **apiVersion**: apps/v1
+
+
+- **kind**: ControllerRevision
+
+
+- **metadata** (}}">ObjectMeta )
+
+ 标准的对象元数据。
+ 更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+
+- **revision** (int64),必需
+
+ revision 表示 data 表示的状态的修订。
+
+
+- **data** (RawExtension)
+
+ data 是状态的序列化表示。
+
+
+
+ *RawExtension 用于以外部版本来保存扩展数据。
+
+
+ 要使用它,请生成一个字段,在外部、版本化结构中以 RawExtension 作为其类型,在内部结构中以 Object 作为其类型。
+
+
+ // 内部包:
+ type MyAPIObject struct {
+ runtime.TypeMeta `json:",inline"`
+ MyPlugin runtime.Object `json:"myPlugin"`
+ }
+ type PluginA struct {
+ AOption string `json:"aOption"`
+ }
+
+
+ // 外部包:
+ type MyAPIObject struct {
+ runtime.TypeMeta `json:",inline"`
+ MyPlugin runtime.RawExtension `json:"myPlugin"`
+ }
+ type PluginA struct {
+ AOption string `json:"aOption"`
+ }
+
+
+ // 在网络上,JSON 看起来像这样:
+ {
+ "kind":"MyAPIObject",
+ "apiVersion":"v1",
+ "myPlugin": {
+ "kind":"PluginA",
+ "aOption":"foo",
+ },
+ }
+
+
+ 那么会发生什么?
+ 解码首先使用 json 或 yaml 将序列化数据解组到你的外部 MyAPIObject 中。
+ 这会导致原始 JSON 被存储下来,但不会被解包。
+ 下一步是复制(使用 pkg/conversion)到内部结构中。
+ runtime 包的 DefaultScheme 安装了转换函数,它将解析存储在 RawExtension 中的 JSON,
+ 将其转换为正确的对象类型,并将其存储在 Object 中。
+ (TODO:如果对象是未知类型,将创建并存储一个 `runtime.Unknown`对象。)*
+
+
+## ControllerRevisionList {#ControllerRevisionList}
+
+ControllerRevisionList 是一个包含 ControllerRevision 对象列表的资源。
+
+
+
+
+- **apiVersion**: apps/v1
+
+
+- **kind**: ControllerRevisionList
+
+
+- **metadata** (}}">ListMeta )
+
+ 更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+
+- **items** ([]}}">ControllerRevision ),必需
+
+ items 是 ControllerRevisions 的列表
+
+
+## 操作 {#Operations}
+
+
+
+
+### `get` 读取特定的 ControllerRevision
+
+
+#### HTTP 请求
+
+GET /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}
+
+
+#### 参数
+
+
+- **name** (**路径参数**):string,必需
+
+ ControllerRevision 的名称
+
+
+- **namespace** (**路径参数**):string,必需
+
+ }}">namespace
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+
+200 (}}">ControllerRevision ): OK
+
+401: Unauthorized
+
+
+### `list` 列出或监视 ControllerRevision 类别的对象
+
+
+#### HTTP 请求
+
+GET /apis/apps/v1/namespaces/{namespace}/controllerrevisions
+
+
+#### 参数
+
+
+- **namespace** (**路径参数**):string,必需
+
+ }}">namespace
+
+
+- **allowWatchBookmarks** (**查询参数**): boolean
+
+ }}">allowWatchBookmarks
+
+
+- **continue** (**查询参数**):string
+
+ }}">continue
+
+
+- **fieldSelector** (**查询参数**):string
+
+ }}">fieldSelector
+
+
+- **labelSelector** (**查询参数**):string
+
+ }}">labelSelector
+
+
+- **limit** (**查询参数**)): integer
+
+ }}">limit
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+- **resourceVersion** (**查询参数**):string
+
+ }}">resourceVersion
+
+
+- **resourceVersionMatch** (**查询参数**):string
+
+ }}">resourceVersionMatch
+
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+
+- **watch** (**查询参数**): boolean
+
+ }}">watch
+
+
+#### 响应
+
+200 (}}">ControllerRevisionList ): OK
+
+401: Unauthorized
+
+
+### `list` 列出或监视 ControllerRevision 类别的对象
+
+
+#### HTTP 请求
+
+GET /apis/apps/v1/controllerrevisions
+
+
+#### 参数
+
+
+- **allowWatchBookmarks** (**查询参数**): boolean
+
+ }}">allowWatchBookmarks
+
+
+- **continue** (**查询参数**):string
+
+ }}">continue
+
+
+- **fieldSelector** (**查询参数**):string
+
+ }}">fieldSelector
+
+
+- **labelSelector** (**查询参数**):string
+
+ }}">labelSelector
+
+
+- **limit** (**查询参数**): integer
+
+ }}">limit
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+- **resourceVersion** (**查询参数**):string
+
+ }}">resourceVersion
+
+
+- **resourceVersionMatch** (**查询参数**):string
+
+ }}">resourceVersionMatch
+
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+
+- **watch** (**查询参数**): boolean
+
+ }}">watch
+
+
+#### 响应
+
+200 (}}">ControllerRevisionList ): OK
+
+401: Unauthorized
+
+
+### `create` 创建一个 ControllerRevision
+
+
+#### HTTP 请求
+
+POST /apis/apps/v1/namespaces/{namespace}/controllerrevisions
+
+
+#### 参数
+
+
+- **namespace** (**路径参数**):string,必需
+
+ }}">namespace
+
+
+- **body**: }}">ControllerRevision ,必需
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">ControllerRevision ): OK
+
+201 (}}">ControllerRevision ): Created
+
+202 (}}">ControllerRevision ): Accepted
+
+401: Unauthorized
+
+
+### `update` 替换特定的 ControllerRevision
+
+
+#### HTTP 参数
+
+PUT /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}
+
+
+#### 参数
+
+
+- **name** (**路径参数**):string,必需
+
+ ControllerRevision 的名称
+
+
+- **namespace** (**路径参数**):string,必需
+
+ }}">namespace
+
+
+- **body**: }}">ControllerRevision ,必需
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+
+#### 响应
+
+200 (}}">ControllerRevision ): OK
+
+201 (}}">ControllerRevision ): Created
+
+401: Unauthorized
+
+
+### `patch` 部分更新特定的 ControllerRevision
+
+
+#### HTTP 请求
+
+PATCH /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}
+
+
+#### 参数
+
+
+- **name** (**路径参数**):string,必需
+
+ ControllerRevision 的名称
+
+
+- **namespace** (**路径参数**):string,必需
+
+ }}">namespace
+
+
+- **body**: }}">Patch ,必需
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+
+- **force** (**查询参数**): boolean
+
+ }}">force
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+
+#### 响应
+
+200 (}}">ControllerRevision ): OK
+
+201 (}}">ControllerRevision ): Created
+
+401: Unauthorized
+
+
+### `delete` 删除一个 ControllerRevision
+
+
+#### HTTP 请求
+
+DELETE /apis/apps/v1/namespaces/{namespace}/controllerrevisions/{name}
+
+
+#### 参数
+
+
+- **name** (**路径参数**):string,必需
+
+ ControllerRevision 的名称
+
+
+- **namespace** (**路径参数**):string,必需
+
+ }}">namespace
+
+
+- **body**: }}">DeleteOptions
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **gracePeriodSeconds** (**查询参数**): integer
+
+ }}">gracePeriodSeconds
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+- **propagationPolicy** (**查询参数**):string
+
+ }}">propagationPolicy
+
+
+
+#### 响应
+
+200 (}}">Status ): OK
+
+202 (}}">Status ): Accepted
+
+401: Unauthorized
+
+
+### `deletecollection` 删除 ControllerRevision 集合
+
+
+#### HTTP 请求
+
+DELETE /apis/apps/v1/namespaces/{namespace}/controllerrevisions
+
+
+#### 参数
+
+
+- **namespace** (**路径参数**):string,必需
+
+ }}">namespace
+
+
+- **body**: }}">DeleteOptions
+
+
+- **continue** (**查询参数**):string
+
+ }}">continue
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldSelector** (**查询参数**):string
+
+ }}">fieldSelector
+
+
+- **gracePeriodSeconds** (**查询参数**): integer
+
+ }}">gracePeriodSeconds
+
+
+- **labelSelector** (**查询参数**):string
+
+ }}">labelSelector
+
+
+- **limit** (**查询参数**): integer
+
+ }}">limit
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+- **propagationPolicy** (**查询参数**):string
+
+ }}">propagationPolicy
+
+
+- **resourceVersion** (**查询参数**):string
+
+ }}">resourceVersion
+
+
+- **resourceVersionMatch** (**查询参数**):string
+
+ }}">resourceVersionMatch
+
+
+- **timeoutSeconds** (**查询参数**): integer
+
+ }}">timeoutSeconds
+
+
+
+#### 响应
+
+200 (}}">Status ): OK
+
+401: Unauthorized
+
diff --git a/content/zh/docs/reference/kubernetes-api/workload-resources/priority-class-v1.md b/content/zh/docs/reference/kubernetes-api/workload-resources/priority-class-v1.md
new file mode 100644
index 0000000000..52fc887ab9
--- /dev/null
+++ b/content/zh/docs/reference/kubernetes-api/workload-resources/priority-class-v1.md
@@ -0,0 +1,810 @@
+---
+api_metadata:
+ apiVersion: "scheduling.k8s.io/v1"
+ import: "k8s.io/api/scheduling/v1"
+ kind: "PriorityClass"
+content_type: "api_reference"
+description: "PriorityClass 定义了从优先级类名到优先级数值的映射。"
+title: "PriorityClass"
+weight: 14
+auto_generated: false
+---
+
+
+
+
+`apiVersion: scheduling.k8s.io/v1`
+
+`import "k8s.io/api/scheduling/v1"`
+
+
+## PriorityClass {#PriorityClass}
+
+
+PriorityClass 定义了从优先级类名到优先级数值的映射。
+该值可以是任何有效的整数。
+
+
+
+
+- **apiVersion**: scheduling.k8s.io/v1
+
+
+- **kind**: PriorityClass
+
+
+- **metadata** (}}">ObjectMeta )
+
+ 标准对象的元数据。
+ 更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+
+- **value** (int32),必需
+
+ 此优先级的值。这是 Pod 在其 Pod 规约中有此类名称时收到的实际优先级。
+
+
+- **description** (string)
+
+ description 是一个任意字符串,通常提供有关何时应使用此优先级的指南。
+
+
+- **globalDefault** (boolean)
+
+ globalDefault 指定是否应将此 PriorityClass 视为没有任何优先级类的 pod 的默认优先级。
+ 只有一个 PriorityClass 可以标记为 `globalDefault`。
+ 但是,如果存在多个 PriorityClasses 且其 `globalDefault` 字段设置为 true,
+ 则将使用此类全局默认 PriorityClasses 的最小值作为默认优先级。
+
+
+- **preemptionPolicy** (string)
+
+ PreemptionPolicy 是抢占优先级较低的 Pod 的策略。
+ 可选值:Never、PreemptLowerPriority。
+ 如果未设置,则默认为 PreemptLowerPriority。
+
+
+## PriorityClassList {#PriorityClassList}
+
+PriorityClassList 是优先级类的集合。
+
+
+
+
+- **apiVersion**: scheduling.k8s.io/v1
+
+
+- **kind**: PriorityClassList
+
+
+- **metadata** (}}">ListMeta )
+
+ 标准列表元数据。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
+
+
+- **items** ([]}}">PriorityClass ),必需
+
+ items 是 PriorityClasses 的列表
+
+
+## 操作 {#Operations}
+
+
+
+
+### `get` 读取特定的 PriorityClass
+
+
+#### HTTP 请求
+
+GET /apis/scheduling.k8s.io/v1/priorityclasses/{name}
+
+
+#### 参数
+
+
+- **name** (**路径参数**): string,必需
+
+ PriorityClass 名称
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">PriorityClass ): OK
+
+401: Unauthorized
+
+
+### `list` 列出或观察 PriorityClass类的对象
+
+
+#### HTTP 请求
+
+GET /apis/scheduling.k8s.io/v1/priorityclasses
+
+
+#### 参数
+
+
+- **allowWatchBookmarks** (**查询参数**):boolean
+
+ }}">allowWatchBookmarks
+
+
+- **continue** (**查询参数**):string
+
+ }}">continue
+
+
+- **fieldSelector** (**查询参数**):string
+
+ }}">fieldSelector
+
+
+- **labelSelector** (**查询参数**):string
+
+ }}">labelSelector
+
+
+- **limit** (**查询参数**):integer
+
+ }}">limit
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+- **resourceVersion** (**查询参数**):string
+
+ }}">resourceVersion
+
+
+- **resourceVersionMatch** (**查询参数**):string
+
+ }}">resourceVersionMatch
+
+
+- **timeoutSeconds** (**查询参数**):integer
+
+ }}">timeoutSeconds
+
+
+- **watch** (**查询参数**):boolean
+
+ }}">watch
+
+
+#### 响应
+
+200 (}}">PriorityClassList ): OK
+
+401: Unauthorized
+
+
+### `create` 创建一个 PriorityClass
+
+
+#### HTTP 请求
+
+POST /apis/scheduling.k8s.io/v1/priorityclasses
+
+
+#### 参数
+
+
+- **body**: }}">PriorityClass ,必需
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">PriorityClass ): OK
+
+201 (}}">PriorityClass ): Created
+
+202 (}}">PriorityClass ): Accepted
+
+401: Unauthorized
+
+
+### `update` 替换指定的 PriorityClass
+
+
+#### HTTP 请求
+
+PUT /apis/scheduling.k8s.io/v1/priorityclasses/{name}
+
+
+#### 参数
+
+
+- **name** (*路径参数*): string,必需
+
+ PriorityClass 名称
+
+
+- **body**: }}">PriorityClass ,必需
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+
+#### 响应
+
+200 (}}">PriorityClass ): OK
+
+201 (}}">PriorityClass ): Created
+
+401: Unauthorized
+
+
+
+### `patch` 部分更新特定的 PriorityClass
+
+
+#### HTTP 请求
+
+PATCH /apis/scheduling.k8s.io/v1/priorityclasses/{name}
+
+
+#### 参数
+
+
+- **name** (*路径参数*): string,必须
+
+ PriorityClass 名称
+
+
+- **body**: }}">Patch ,必需
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldManager** (**查询参数**):string
+
+ }}">fieldManager
+
+
+- **fieldValidation** (**查询参数**):string
+
+ }}">fieldValidation
+
+
+- **force** (**查询参数**):boolean
+
+ }}">force
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+#### 响应
+
+200 (}}">PriorityClass ): OK
+
+201 (}}">PriorityClass ): Created
+
+401: Unauthorized
+
+
+### `delete` 删除一个 PriorityClass
+
+
+#### HTTP 请求
+
+DELETE /apis/scheduling.k8s.io/v1/priorityclasses/{name}
+
+
+#### 参数
+
+
+- **name** (*路径参数*): string,必需
+
+ PriorityClass 名称。
+
+
+- **body**: }}">DeleteOptions
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **gracePeriodSeconds** (**查询参数**):integer
+
+ }}">gracePeriodSeconds
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+- **propagationPolicy** (**查询参数**):string
+
+ }}">propagationPolicy
+
+
+#### 响应
+
+200 (}}">Status ): OK
+
+202 (}}">Status ): Accepted
+
+401: Unauthorized
+
+
+### `deletecollection` 删除 PriorityClass 集合
+
+
+#### HTTP 请求
+
+DELETE /apis/scheduling.k8s.io/v1/priorityclasses
+
+
+#### 参数
+
+
+- **body**: }}">DeleteOptions
+
+
+- **continue** (**查询参数**):string
+
+ }}">continue
+
+
+- **dryRun** (**查询参数**):string
+
+ }}">dryRun
+
+
+- **fieldSelector** (**查询参数**):string
+
+ }}">fieldSelector
+
+
+- **gracePeriodSeconds** (**查询参数**):integer
+
+ }}">gracePeriodSeconds
+
+
+- **labelSelector** (**查询参数**):string
+
+ }}">labelSelector
+
+
+- **limit** (**查询参数**):integer
+
+ }}">limit
+
+
+- **pretty** (**查询参数**):string
+
+ }}">pretty
+
+
+- **propagationPolicy** (**查询参数**):string
+
+ }}">propagationPolicy
+
+
+- **resourceVersion** (**查询参数**):string
+
+ }}">resourceVersion
+
+
+- **resourceVersionMatch** (**查询参数**):string
+
+ }}">resourceVersionMatch
+
+
+- **timeoutSeconds** (**查询参数**):integer
+
+ }}">timeoutSeconds
+
+
+#### 响应
+
+200 (}}">Status ): OK
+
+401: Unauthorized
diff --git a/content/zh/docs/reference/labels-annotations-taints/_index.md b/content/zh/docs/reference/labels-annotations-taints/_index.md
index 1fd14e8b6d..bf8e31e9a5 100644
--- a/content/zh/docs/reference/labels-annotations-taints/_index.md
+++ b/content/zh/docs/reference/labels-annotations-taints/_index.md
@@ -26,15 +26,151 @@ Kubernetes 将所有标签和注解保留在 kubernetes.io Namespace中。
+## API 对象上使用的标签、注解和污点
+
+### app.kubernetes.io/component
+
+例子: `app.kubernetes.io/component=database`
+
+用于: 所有对象
+
+架构中的组件。
+
+[推荐标签](/zh/docs/concepts/overview/working-with-objects/common-labels/#labels)之一。
+
+
+### app.kubernetes.io/created-by
+
+示例:`app.kubernetes.io/created-by=controller-manager`
+
+用于:所有对象
+
+创建此资源的控制器/用户。
+
+[推荐标签](/zh/docs/concepts/overview/working-with-objects/common-labels/#labels)之一。
+
+
+### app.kubernetes.io/instance
+
+示例:`app.kubernetes.io/instance=mysql-abcxzy`
+
+用于:所有对象
+
+标识应用实例的唯一名称。
+
+[推荐标签](/zh/docs/concepts/overview/working-with-objects/common-labels/#labels)之一。
+
+
+### app.kubernetes.io/managed-by
+
+示例:`app.kubernetes.io/managed-by=helm`
+
+用于:所有对象
+
+用于管理应用操作的工具。
+
+[推荐标签](/zh/docs/concepts/overview/working-with-objects/common-labels/#labels)之一。
+
+
+
+### app.kubernetes.io/name
+
+示例:`app.kubernetes.io/name=mysql`
+
+用于:所有对象
+
+应用的名称。
+
+[推荐标签](/zh/docs/concepts/overview/working-with-objects/common-labels/#labels)之一。
+
+
+### app.kubernetes.io/part-of
+
+示例:`app.kubernetes.io/part-of=wordpress`
+
+用于:所有对象
+
+此应用所属的更高级别应用的名称。
+
+[推荐标签](/zh/docs/concepts/overview/working-with-objects/common-labels/#labels)之一。
+
+
+### app.kubernetes.io/version
+
+示例:`app.kubernetes.io/version="5.7.21"`
+
+用于:所有对象
+
+应用的当前版本(例如,语义版本、修订哈希等)。
+
+[推荐标签](/zh/docs/concepts/overview/working-with-objects/common-labels/#labels)之一。
+
+
-## API 对象上使用的标签、注解和污点
+The Kubelet populates this with `runtime.GOARCH` as defined by Go. This can be handy if you are mixing arm and x86 nodes. -->
### kubernetes.io/arch {#kubernetes-io-arch}
@@ -185,8 +321,6 @@ Used on: Pod
This annotation is used to set [Pod Deletion Cost](/docs/concepts/workloads/controllers/replicaset/#pod-deletion-cost)
which allows users to influence ReplicaSet downscaling order. The annotation parses into an `int32` type.
-
-### beta.kubernetes.io/instance-type (deprecated)
-->
### controller.kubernetes.io/pod-deletion-cost {#pod-deletion-cost}
@@ -194,8 +328,85 @@ which allows users to influence ReplicaSet downscaling order. The annotation par
用于:Pod
-该注解用于设置 [Pod 删除成本](/docs/concepts/workloads/controllers/replicaset/#pod-deletion-cost) 允许用户影响 ReplicaSet 缩减顺序。注解解析为 `int32` 类型。
+该注解用于设置 [Pod 删除成本](/docs/concepts/workloads/controllers/replicaset/#pod-deletion-cost)允许用户影响 ReplicaSet 缩减顺序。注解解析为 `int32` 类型。
+
+
+### kubernetes.io/ingress-bandwidth
+
+{{< note >}}
+入站流量控制注解是一项实验性功能。
+如果要启用流量控制支持,必须将`bandwidth`插件添加到 CNI 配置文件(默认为`/etc/cni/net.d`)
+并确保二进制文件包含在你的 CNI bin 目录中(默认为`/opt/cni/bin`)。
+{{< /note >}}
+
+示例:`kubernetes.io/ingress-bandwidth: 10M`
+
+用于:Pod
+
+你可以对 Pod 应用服务质量流量控制并有效限制其可用带宽。
+入站流量(到 Pod)通过控制排队的数据包来处理,以有效地处理数据。
+要限制 Pod 的带宽,请编写对象定义 JSON 文件并使用 `kubernetes.io/ingress-bandwidth`
+注解指定数据流量速度。 用于指定入站的速率单位是每秒,
+作为[量纲(Quantity)](/zh/docs/reference/kubernetes-api/common-definitions/quantity/)。
+例如,`10M`表示每秒 10 兆比特。
+
+
+
+### kubernetes.io/egress-bandwidth
+
+{{< note >}}
+出站流量控制注解是一项实验性功能。
+如果要启用流量控制支持,必须将`bandwidth`插件添加到 CNI 配置文件(默认为`/etc/cni/net.d`)
+并确保二进制文件包含在你的 CNI bin 目录中(默认为`/opt/cni/bin`)。
+{{< /note >}}
+
+示例:`kubernetes.io/egress-bandwidth: 10M`
+
+用于:Pod
+
+出站流量(来自 pod)由策略控制,策略只是丢弃超过配置速率的数据包。
+你为一个 Pod 所设置的限制不会影响其他 Pod 的带宽。
+要限制 Pod 的带宽,请编写对象定义 JSON 文件并使用 `kubernetes.io/egress-bandwidth` 注解指定数据流量速度。
+用于指定出站的速率单位是每秒比特数,
+以[量纲(Quantity)](/zh/docs/reference/kubernetes-api/common-definitions/quantity/)的形式给出。
+例如,`10M` 表示每秒 10 兆比特。
+
+
### beta.kubernetes.io/instance-type (已弃用) {#beta-kubernetes-io-instance-type}
+例子:`node.kubernetes.io/out-of-service:NoExecute`
+
+用户可以手动将污点添加到节点,将其标记为停止服务。
+如果 `kube-controller-manager` 上启用了 `NodeOutOfServiceVolumeDetach`
+[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
+并且一个节点被这个污点标记为停止服务,如果节点上的 Pod 没有对应的容忍度,
+这类 Pod 将被强制删除,并且,针对在节点上被终止 Pod 的卷分离操作将被立即执行。
+
+{{< caution >}}
+
+有关何时以及如何使用此污点的更多详细信息,请参阅[非正常节点关闭](/zh/docs/concepts/architecture/nodes/#non-graceful-node-shutdown)。
+{{< /caution >}}
+
+例子:`snapshot.storage.kubernetes.io/allowVolumeModeChange: "true"`
+
+用于:VolumeSnapshotContent
+
+
+值可以是 `true` 或者 `false`。
+这决定了当从 VolumeSnapshot 创建 {{< glossary_tooltip text="PersistentVolumeClaim" term_id="persistent-volume-claim" >}}
+时,用户是否可以修改源卷的模式。
+更多信息请参阅[转换快照的卷模式](/zh/docs/concepts/storage/volume-snapshots/#convert-volume-mode)和
+[Kubernetes CSI 开发者文档](https://kubernetes-csi.github.io/docs/)。
+
## 用于审计的注解 {#annonations-used-for-audit}
-- [`pod-security.kubernetes.io/exempt`](/zh/docs/reference/labels-annotations-taints/audit-annotations/#pod-security-kubernetes-io-exempt)
-- [`pod-security.kubernetes.io/enforce-policy`](/zh/zh/docs/reference/labels-annotations-taints/audit-annotations/#pod-security-kubernetes-io-enforce-policy)
+- [`authorization.k8s.io/decision`](/zh/docs/reference/labels-annotations-taints/audit-annotations/#authorization-k8s-io-decision)
+- [`authorization.k8s.io/reason`](/zh/docs/reference/labels-annotations-taints/audit-annotations/#authorization-k8s-io-reason)
+- [`insecure-sha1.invalid-cert.kubernetes.io/$hostname`](/zh/docs/reference/labels-annotations-taints/audit-annotations/#insecure-sha1-invalid-cert-kubernetes-io-hostname)
+- [`missing-san.invalid-cert.kubernetes.io/$hostname`](/zh/docs/reference/labels-annotations-taints/audit-annotations/#missing-san-invalid-cert-kubernetes-io-hostname)
- [`pod-security.kubernetes.io/audit-violations`](/zh/docs/reference/labels-annotations-taints/audit-annotations/#pod-security-kubernetes-io-audit-violations)
+- [`pod-security.kubernetes.io/enforce-policy`](/zh/zh/docs/reference/labels-annotations-taints/audit-annotations/#pod-security-kubernetes-io-enforce-policy)
+- [`pod-security.kubernetes.io/exempt`](/zh/docs/reference/labels-annotations-taints/audit-annotations/#pod-security-kubernetes-io-exempt)
-在[审计注解](/zh/docs/reference/labels-annotations-taints/audit-annotations/)页面上查看更多详细信息。
\ No newline at end of file
+在[审计注解](/zh/docs/reference/labels-annotations-taints/audit-annotations/)页面上查看更多详细信息。
+
+## kubeadm
+
+### kubeadm.alpha.kubernetes.io/cri-socket
+
+
+例子:`kubeadm.alpha.kubernetes.io/cri-socket: unix:///run/containerd/container.sock`
+
+用于:Node
+
+
+kubeadm 用来保存 `init`/`join` 时提供给 kubeadm 以后使用的 CRI 套接字信息的注解。
+kubeadm 使用此信息为 Node 对象设置注解。
+此注解仍然是 “alpha” 阶段,因为理论上这应该是 KubeletConfiguration 中的一个字段。
+
+### kubeadm.kubernetes.io/etcd.advertise-client-urls
+
+
+例子:`kubeadm.kubernetes.io/etcd.advertise-client-urls: https://172.17.0.18:2379`
+
+用于:Pod
+
+
+kubeadm 为本地管理的 etcd Pod 设置的注解,用来跟踪 etcd 客户端应连接到的 URL 列表。
+这主要用于 etcd 集群健康检查目的。
+
+### kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint
+
+
+例子:`kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: https//172.17.0.18:6443`
+
+用于:Pod
+
+
+kubeadm 为本地管理的 kube-apiserver Pod 设置的注解,用以跟踪该 API 服务器实例的公开宣告地址/端口端点。
+
+### kubeadm.kubernetes.io/component-config.hash
+
+
+例子:`kubeadm.kubernetes.io/component-config.hash: 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae`
+
+用于:ConfigMap
+
+
+kubeadm 为它所管理的 ConfigMaps 设置的注解,用于配置组件。它包含一个哈希(SHA-256)值,
+用于确定用户是否应用了不同于特定组件的 kubeadm 默认设置的设置。
+
+### node-role.kubernetes.io/control-plane
+
+
+用于:Node
+
+kubeadm 在其管理的控制平面节点上应用的标签。
+
+### node-role.kubernetes.io/control-plane
+
+
+例子:`node-role.kubernetes.io/control-plane:NoSchedule`
+
+用于:Node
+
+
+kubeadm 应用在控制平面节点上的污点,仅允许在其上调度关键工作负载。
+
+### node-role.kubernetes.io/master
+
+
+例子:`node-role.kubernetes.io/master:NoSchedule`
+
+用于:Node
+
+
+kubeadm 应用在控制平面节点上的污点,仅允许在其上调度关键工作负载。
+{{< note >}}
+从 v1.20 开始,此污点已弃用,并将在 v1.25 中将其删除,取而代之的是 `node-role.kubernetes.io/control-plane`。
+{{< /note >}}
\ No newline at end of file
diff --git a/content/zh/docs/reference/labels-annotations-taints/audit-annotations.md b/content/zh/docs/reference/labels-annotations-taints/audit-annotations.md
index 2ab584e4ed..96d160656e 100644
--- a/content/zh/docs/reference/labels-annotations-taints/audit-annotations.md
+++ b/content/zh/docs/reference/labels-annotations-taints/audit-annotations.md
@@ -17,14 +17,14 @@ namespace. These annotations apply to `Event` object from API group
{{< note >}}
-Kubernetes API 中不使用以下注解。当你在集群中[启用审计](/zh/docs/tasks/debug-application-cluster/audit/)时,
+Kubernetes API 中不使用以下注解。当你在集群中[启用审计](/zh/docs/tasks/debug/debug-cluster/audit/)时,
审计事件数据将使用 API 组 `audit.k8s.io` 中的 `Event` 写入。
注解适用于审计事件。审计事件不同于[事件 API ](/zh/docs/reference/kubernetes-api/cluster-resources/event-v1/)
(API 组 `events.k8s.io`)中的对象。
@@ -88,7 +88,7 @@ that was transgressed as well as the specific policies on the fields that were
violated from the PodSecurity enforcement.
See [Pod Security Standards](/docs/concepts/security/pod-security-standards/)
-for more information
+for more information.
-->
## pod-security.kubernetes.io/audit-violations {#pod-security-kubernetes-io-audit-violations}
@@ -99,4 +99,106 @@ PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container
注解值给出审计策略违规的详细说明,它包含所违反的 [Pod 安全标准](/zh/docs/concepts/security/pod-security-standards/)级别以及
PodSecurity 执行中违反的特定策略及对应字段。
-有关详细信息,请参阅 [Pod 安全标准](/zh/docs/concepts/security/pod-security-standards/)。
\ No newline at end of file
+有关详细信息,请参阅 [Pod 安全标准](/zh/docs/concepts/security/pod-security-standards/)。
+
+
+## authorization.k8s.io/decision {#authorization-k8s-io-decision}
+
+例子:`authorization.k8s.io/decision: "forbid"`
+
+此注解在 Kubernetes 审计日志中表示请求是否获得授权。
+
+有关详细信息,请参阅[审计](/zh/docs/tasks/debug/debug-cluster/audit/)。
+
+
+## authorization.k8s.io/reason {#authorization-k8s-io-reason}
+
+例子:`authorization.k8s.io/reason: "Human-readable reason for the decision"`
+
+此注解给出了 Kubernetes 审计日志中 [decision](#authorization-k8s-io-decision) 的原因。
+
+有关详细信息,请参阅[审计](/zh/docs/tasks/debug/debug-cluster/audit/)。
+
+## missing-san.invalid-cert.kubernetes.io/$hostname
+
+
+例子:`missing-san.invalid-cert.kubernetes.io/example-svc.example-namespace.svc: "relies on a legacy Common Name field instead of the SAN extension for subject validation"`
+
+由 Kubernetes v1.24 及更高版本使用
+
+
+此注解表示 webhook 或聚合 API 服务器正在使用缺少 `subjectAltNames` 的无效证书。
+Kubernetes 1.19 已经默认禁用,且 Kubernetes 1.23 已经移除对这些证书的支持。
+
+
+使用这些证书向端点发出的请求将失败。
+使用这些证书的服务应尽快替换它们,以避免在 Kubernetes 1.23+ 环境中运行时中断。
+
+
+Go 文档中有更多关于此的信息:
+[X.509 CommonName 弃用](https://go.dev/doc/go1.15#commonname)。
+
+## insecure-sha1.invalid-cert.kubernetes.io/$hostname
+
+
+
+例子:`insecure-sha1.invalid-cert.kubernetes.io/example-svc.example-namespace.svc: "uses an insecure SHA-1 signature"`
+
+由 Kubernetes v1.24 及更高版本使用
+
+
+此注解表示 webhook 或聚合 API 服务器正在使用使用 SHA-1 签名的不安全证书。
+Kubernetes 1.24 已经默认禁用,并将在未来的版本中删除对这些证书的支持。
+
+
+使用这些证书的服务应尽快替换它们,以确保正确保护连接并避免在未来版本中出现中断。
+
+
+Go 文档中有更多关于此的信息:
+[拒绝 SHA-1 证书](https://go.dev/doc/go1.18#sha1)。
diff --git a/content/zh/docs/reference/node/topics-on-dockershim-and-cri-compatible-runtimes.md b/content/zh/docs/reference/node/topics-on-dockershim-and-cri-compatible-runtimes.md
index 094da533f0..28f075cbb9 100644
--- a/content/zh/docs/reference/node/topics-on-dockershim-and-cri-compatible-runtimes.md
+++ b/content/zh/docs/reference/node/topics-on-dockershim-and-cri-compatible-runtimes.md
@@ -1,83 +1,99 @@
---
-title: 关于 dockershim 移除和使用兼容 CRI 运行时的外部文章
+title: 关于 dockershim 移除和使用兼容 CRI 运行时的文章
content_type: reference
weight: 20
---
-这是有关以下内容的文章列表:
-
-- Kubernetes 弃用和删除 _dockershim_
-- 使用兼容 CRI 的容器运行时
+这是关于 Kubernetes 弃用和删除 “dockershim”
+或使用兼容 CRI 的容器运行时相关的文章和其他页面的列表,
-## 首要来源
+## Kubernetes 项目 {#kubernetes-project}
-* [Kubernetes 博客: “Dockershim 弃用常见问题解答”, 2020/12/02](/blog/2020/12/02/dockershim-faq/)
+* Kubernetes 博客:[Dockershim 弃用常见问题解答](/zh/blog/2022/02/17/dockershim-faq/)(最初发表于 2022/02/17)
-* [Kubernetes 文档:“从 dockershim 迁移”](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/)
+* Kubernetes 博客:[Kubernetes 即将移除 Dockershim:承诺和下一步](/blog/2022/01/07/kubernetes-is-moving-on-from-dockershim/)(发表于 2022/01/07)
-* [Kubernetes 文档:“容器运行时”](/zh/docs/setup/production-environment/container-runtimes/)
+* Kubernetes 博客:[移除 Dockershim 即将到来。你准备好了吗?](/zh/blog/2021/11/12/are-you-ready-for-dockershim-removal/)(发表于 2021/11/12)
-* [Kubernetes 增强提问: “从 kubelet 中删除 dockershim” (`kubernetes/enhancements#2221`)](https://github.com/kubernetes/enhancements/issues/2221)
+* Kubernetes 文档:[从 dockershim 迁移](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/)
-* [Kubernetes 增强建议:“KEP-2221: 从 kubelet 中删除 dockershim”](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/2221-remove-dockershim/README.md)
+* Kubernetes 文档:[容器运行时](/zh/docs/setup/production-environment/container-runtimes/)
-* [Kubernetes 博客: “移除 Dockershim 即将到来。你准备好了吗?”, 2021/11/12](/blog/2021/11/12/are-you-ready-for-dockershim-removal/)
+* Kubernetes 增强建议:[KEP-2221: 从 kubelet 中删除 dockershim](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/2221-remove-dockershim/README.md)
+
+* Kubernetes 增强提问:[从 kubelet 中删除 dockershim](https://github.com/kubernetes/enhancements/issues/2221)(“k/enhancements#2221”)
+
+
+你可以通过 GitHub 问题
+[**Dockershim 删除反馈和问题**](https://github.com/kubernetes/kubernetes/issues/106917) 提供反馈。
-## 次要来源
+## 外部来源 {#third-party}
-* [Docker.com 博客:“开发人员需要了解的关于 Docker、Docker Engine 和 Kubernetes v1.20 的哪些知识”,2020/12/04](https://www.docker.com/blog/what-developers-need-to-know-about-docker-docker-engine-and-kubernetes-v1-20/)
+* Amazon 网络服务 EKS 文档:[Dockershim 弃用](https://docs.aws.amazon.com/eks/latest/userguide/dockershim-deprecation.html)
-* [Tripwire.com:“Dockershim 即将弃用如何影响你的 Kubernetes”](https://www.tripwire.com/state-of-security/security-data-protection/cloud/how-dockershim-forthcoming-deprecation-affects-your-kubernetes/)
+* CNCF会议视频:[将 Kubernetes 从 Docker 迁移到 containerd 运行时的经验教训](https://www.docker.com/blog/what-developers-need-to-know-about-docker-docker-engine-and-kubernetes-v1-20/)(Ana Caylin,在 KubeCon Europe 2019)
-* [Amazon EKS 文档:“Dockershim 弃用”](https://docs.aws.amazon.com/eks/latest/userguide/dockershim-deprecation.html)
+* Docker.com 博客:[开发人员需要了解的关于 Docker、Docker Engine 和 Kubernetes v1.20 的哪些知识](https://www.docker.com/blog/what-developers-need-to-know-about-docker-docker-engine-and-kubernetes-v1-20/)(发表于 2020/12/04)
-* [YouTube 上的 “Google 开源”频道:“与 Google 一起学习 Kubernetes - 从 Dockershim 迁移到 Containerd”](https://youtu.be/fl7_4hjT52g)
+* YouTube 上的“Google 开源”频道:[与 Google 一起学习 Kubernetes - 从 Dockershim 迁移到 Containerd](https://youtu.be/fl7_4hjT52g)
-* [Mirantis 博客:“Dockershim 的未来是 cri-dockerd”,2021/04/21](https://www.mirantis.com/blog/the-future-of-dockershim-is-cri-dockerd/)
+* Azure 博客上的 Microsoft 应用:[Dockershim 弃用和 AKS](https://techcommunity.microsoft.com/t5/apps-on-azure-blog/dockershim-deprecation-and-aks/ba-p/3055902)(发表于 2022/01/21)
-* [Github.com:“Mirantis/cri-dockerd” 仓库](https://github.com/Mirantis/cri-dockerd)
+* Mirantis 博客:[Dockershim 的未来是 cri-dockerd](https://www.mirantis.com/blog/the-future-of-dockershim-is-cri-dockerd/)(发表于 2021/04/21)
+
+* Mirantis: [Mirantis/cri-dockerd](https://github.com/Mirantis/cri-dockerd) Git 仓库(在 GitHub 上)
+
+* Tripwire:[Dockershim 即将弃用如何影响你的 Kubernetes](https://www.tripwire.com/state-of-security/security-data-protection/cloud/how-dockershim-forthcoming-deprecation-affects-your-kubernetes/)
diff --git a/content/zh/docs/reference/scheduling/config.md b/content/zh/docs/reference/scheduling/config.md
index 99c9557e57..cd6c8507ea 100644
--- a/content/zh/docs/reference/scheduling/config.md
+++ b/content/zh/docs/reference/scheduling/config.md
@@ -22,7 +22,7 @@ file and passing its path as a command line argument.
调度模板(Profile)允许你配置 {{< glossary_tooltip text="kube-scheduler" term_id="kube-scheduler" >}}
@@ -31,17 +31,19 @@ by implementing one or more of these extension points.
你可以通过运行 `kube-scheduler --config ` 来设置调度模板,
-使用 [KubeSchedulerConfiguration (v1beta1)](/docs/reference/config-api/kube-scheduler-config.v1beta1/) 结构体。
+使用 KubeSchedulerConfiguration ([v1beta2](/zh/docs/reference/config-api/kube-scheduler-config.v1beta2/)
+或者 [v1beta3](/zh/docs/reference/config-api/kube-scheduler-config.v1beta3/)) 结构体。
最简单的配置如下:
```yaml
-apiVersion: kubescheduler.config.k8s.io/v1beta1
+apiVersion: kubescheduler.config.k8s.io/v1beta2
kind: KubeSchedulerConfiguration
clientConnection:
kubeconfig: /etc/srv/kubernetes/kube-scheduler/kubeconfig
@@ -77,62 +79,74 @@ extension points:
调度行为发生在一系列阶段中,这些阶段是通过以下扩展点公开的:
-1. `QueueSort`:这些插件对调度队列中的悬决的 Pod 排序。
+1. `queueSort`:这些插件对调度队列中的悬决的 Pod 排序。
一次只能启用一个队列排序插件。
-2. `PreFilter`:这些插件用于在过滤之前预处理或检查 Pod 或集群的信息。
+2. `preFilter`:这些插件用于在过滤之前预处理或检查 Pod 或集群的信息。
它们可以将 Pod 标记为不可调度。
-3. `Filter`:这些插件相当于调度策略中的断言(Predicates),用于过滤不能运行 Pod 的节点。
+3. `filter`:这些插件相当于调度策略中的断言(Predicates),用于过滤不能运行 Pod 的节点。
过滤器的调用顺序是可配置的。
如果没有一个节点通过所有过滤器的筛选,Pod 将会被标记为不可调度。
+4. `postFilter`:当无法为 Pod 找到可用节点时,按照这些插件的配置顺序调用他们。
+ 如果任何 `postFilter` 插件将 Pod 标记为“可调度”,则不会调用其余插件。
+
-4. `PreScore`:这是一个信息扩展点,可用于预打分工作。
+5. `preScore`:这是一个信息扩展点,可用于预打分工作。
-5. `Score`:这些插件给通过筛选阶段的节点打分。调度器会选择得分最高的节点。
+6. `score`:这些插件给通过筛选阶段的节点打分。调度器会选择得分最高的节点。
-6. `Reserve`:这是一个信息扩展点,当资源已经预留给 Pod 时,会通知插件。
+7. `reserve`:这是一个信息扩展点,当资源已经预留给 Pod 时,会通知插件。
这些插件还实现了 `Unreserve` 接口,在 `Reserve` 期间或之后出现故障时调用。
-
-7. `Permit`:这些插件可以阻止或延迟 Pod 绑定。
-
-8. `PreBind`:这些插件在 Pod 绑定节点之前执行。
+
+8. `permit`:这些插件可以阻止或延迟 Pod 绑定。
+
+9. `preBind`:这些插件在 Pod 绑定节点之前执行。
-9. `Bind`:这个插件将 Pod 与节点绑定。绑定插件是按顺序调用的,只要有一个插件完成了绑定,其余插件都会跳过。绑定插件至少需要一个。
+10. `bind`:这个插件将 Pod 与节点绑定。绑定插件是按顺序调用的,只要有一个插件完成了绑定,其余插件都会跳过。绑定插件至少需要一个。
-10. `PostBind`:这是一个信息扩展点,在 Pod 绑定了节点之后调用。
+11. `postBind`:这是一个信息扩展点,在 Pod 绑定了节点之后调用。
+
+12. `multiPoint`:这是一个仅配置字段,允许同时为所有适用的扩展点启用或禁用插件。
-### 调度插件 {#scheduling-plugin}
-
-
-1. `UnReserve`:这是一个信息扩展点,如果一个 Pod 在预留后被拒绝,并且被 `Permit` 插件搁置,它就会被调用。
-
-
-## 调度插件 {#scheduling-plugins}
+### 调度插件 {#scheduling-plugins}
下面默认启用的插件实现了一个或多个扩展点:
-
-- `SelectorSpread`:对于属于 {{< glossary_tooltip text="Services" term_id="service" >}}、
- {{< glossary_tooltip text="ReplicaSets" term_id="replica-set" >}} 和
- {{< glossary_tooltip text="StatefulSets" term_id="statefulset" >}} 的 Pod,偏好跨多个节点部署。
-
- 实现的扩展点:`PreScore`,`Score`。
- `ImageLocality`:选择已经存在 Pod 运行所需容器镜像的节点。
- 实现的扩展点:`Score`。
+ 实现的扩展点:`score`。
- `TaintToleration`:实现了[污点和容忍](/zh/docs/concepts/scheduling-eviction/taint-and-toleration/)。
- 实现的扩展点:`Filter`,`Prescore`,`Score`。
+ 实现的扩展点:`filter`,`prescore`,`score`。
- `NodeName`:检查 Pod 指定的节点名称与当前节点是否匹配。
- 实现的扩展点:`Filter`。
+ 实现的扩展点:`filter`。
- `NodePorts`:检查 Pod 请求的端口在节点上是否可用。
- 实现的扩展点:`PreFilter`,`Filter`。
-
-- `NodePreferAvoidPods`:基于节点的 {{< glossary_tooltip text="注解" term_id="annotation" >}}
- `scheduler.alpha.kubernetes.io/preferAvoidPods` 打分。
+ 实现的扩展点:`preFilter`,`filter`。
- 实现的扩展点:`Score`。
- `NodeAffinity`:实现了[节点选择器](/zh/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector)
和[节点亲和性](/zh/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity)。
- 实现的扩展点:`Filter`,`Score`.
+ 实现的扩展点:`filter`,`score`.
- `PodTopologySpread`:实现了 [Pod 拓扑分布](/zh/docs/concepts/workloads/pods/pod-topology-spread-constraints/)。
- 实现的扩展点:`PreFilter`,`Filter`,`PreScore`,`Score`。
+ 实现的扩展点:`preFilter`,`filter`,`preScore`,`score`。
- `NodeUnschedulable`:过滤 `.spec.unschedulable` 值为 true 的节点。
- 实现的扩展点:`Filter`。
+ 实现的扩展点:`filter`。
- `NodeResourcesFit`:检查节点是否拥有 Pod 请求的所有资源。
+ 得分可以使用以下三种策略之一:`LeastAllocated`(默认)、`MostAllocated`
+ 和`RequestedToCapacityRatio`。
- 实现的扩展点:`PreFilter`,`Filter`。
+ 实现的扩展点:`preFilter`,`filter`,`score`。
- `NodeResourcesBalancedAllocation`:调度 Pod 时,选择资源使用更为均衡的节点。
- 实现的扩展点:`Score`。
-
-- `NodeResourcesLeastAllocated`:选择资源分配较少的节点。
+ 实现的扩展点:`score`。
- 实现的扩展点:`Score`。
- `VolumeBinding`:检查节点是否有请求的卷,或是否可以绑定请求的卷。
- 实现的扩展点: `PreFilter`、`Filter`、`Reserve`、`PreBind` 和 `Score`。
+ 实现的扩展点: `preFilter`、`filter`、`reserve`、`preBind` 和 `score`。
{{< note >}}
- 当 `VolumeCapacityPriority` 特性被启用时,`Score` 扩展点也被启用。
+ 当 `VolumeCapacityPriority` 特性被启用时,`score` 扩展点也被启用。
它优先考虑可以满足所需卷大小的最小 PV。
{{< /note >}}
- `VolumeRestrictions`:检查挂载到节点上的卷是否满足卷提供程序的限制。
- 实现的扩展点:`Filter`。
+ 实现的扩展点:`filter`。
- `VolumeZone`:检查请求的卷是否在任何区域都满足。
- 实现的扩展点:`Filter`。
+ 实现的扩展点:`filter`。
- `NodeVolumeLimits`:检查该节点是否满足 CSI 卷限制。
- 实现的扩展点:`Filter`。
+ 实现的扩展点:`filter`。
- `EBSLimits`:检查节点是否满足 AWS EBS 卷限制。
- 实现的扩展点:`Filter`。
+ 实现的扩展点:`filter`。
- `GCEPDLimits`:检查该节点是否满足 GCP-PD 卷限制。
- 实现的扩展点:`Filter`。
+ 实现的扩展点:`filter`。
- `AzureDiskLimits`:检查该节点是否满足 Azure 卷限制。
- 实现的扩展点:`Filter`。
+ 实现的扩展点:`filter`。
- `InterPodAffinity`:实现 [Pod 间亲和性与反亲和性](/zh/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity)。
- 实现的扩展点:`PreFilter`,`Filter`,`PreScore`,`Score`。
+ 实现的扩展点:`preFilter`,`filter`,`preScore`,`score`。
- `PrioritySort`:提供默认的基于优先级的排序。
- 实现的扩展点:`QueueSort`。
+ 实现的扩展点:`queueSort`。
- `DefaultBinder`:提供默认的绑定机制。
- 实现的扩展点:`Bind`。
+ 实现的扩展点:`bind`。
- `DefaultPreemption`:提供默认的抢占机制。
- 实现的扩展点:`PostFilter`。
+ 实现的扩展点:`postFilter`。
你也可以通过组件配置 API 启用以下插件(默认不启用):
-
-- `NodeResourcesMostAllocated`:选择已分配资源多的节点。
+- `SelectorSpread`:偏向把属于
+ {{< glossary_tooltip text="Services" term_id="service" >}},
+ {{< glossary_tooltip text="ReplicaSets" term_id="replica-set" >}} 和
+ {{< glossary_tooltip text="StatefulSets" term_id="statefulset" >}} 的 Pod 跨节点分布。
- 实现的扩展点:`Score`。
-
-- `RequestedToCapacityRatio`:根据已分配资源的某函数设置选择节点。
+- `CinderLimits`:检查是否可以满足节点的 [OpenStack Cinder](https://docs.openstack.org/cinder/)
+卷限制
- 实现的扩展点:`Score`。
-
-- `CinderVolume`:检查该节点是否满足 OpenStack Cinder 卷限制。
- 实现的扩展点:`Filter`。
-
-- `NodeLabel`:根据配置的 {{< glossary_tooltip text="标签" term_id="label" >}}
- 过滤节点和/或给节点打分。
-
- 实现的扩展点:`Filter`,`Score`。
-
-- `ServiceAffinity`:检查属于某个 {{< glossary_tooltip term_id="service" >}} 的 Pod
- 与配置的标签所定义的节点集是否适配。
- 这个插件还支持将属于某个 Service 的 Pod 分散到各个节点。
-
- 实现的扩展点:`PreFilter`,`Filter`,`Score`。
-
-
### 多配置文件 {#multiple-profiles}
-所有配置文件必须在 QueueSort 扩展点使用相同的插件,并具有相同的配置参数(如果适用)。
+所有配置文件必须在 queueSort 扩展点使用相同的插件,并具有相同的配置参数(如果适用)。
这是因为调度器只有一个保存 pending 状态 Pod 的队列。
{{< /note >}}
+
+
+### 应用于多个扩展点的插件 {#multipoint}
+
+
+从 `kubescheduler.config.k8s.io/v1beta3` 开始,配置文件配置中有一个附加字段 `multiPoint`,它允许跨多个扩展点轻松启用或禁用插件。
+`multiPoint` 配置的目的是简化用户和管理员在使用自定义配置文件时所需的配置。
+
+
+
+考虑一个插件,`MyPlugin`,它实现了 `preScore`、`score`、`preFilter` 和 `filter` 扩展点。
+要为其所有可用的扩展点启用 `MyPlugin`,配置文件配置如下所示:
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta3
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: multipoint-scheduler
+ plugins:
+ multiPoint:
+ enabled:
+ - name: MyPlugin
+```
+
+
+
+这相当于为所有扩展点手动启用`MyPlugin`,如下所示:
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta3
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: non-multipoint-scheduler
+ plugins:
+ preScore:
+ enabled:
+ - name: MyPlugin
+ score:
+ enabled:
+ - name: MyPlugin
+ preFilter:
+ enabled:
+ - name: MyPlugin
+ filter:
+ enabled:
+ - name: MyPlugin
+```
+
+
+
+在这里使用 `multiPoint` 的一个好处是,如果 `MyPlugin` 将来实现另一个扩展点,`multiPoint` 配置将自动为新扩展启用它。
+
+
+
+可以使用该扩展点的 `disabled` 字段将特定扩展点从 `MultiPoint` 扩展中排除。
+这适用于禁用默认插件、非默认插件或使用通配符 (`'*'`) 来禁用所有插件。
+禁用 `Score` 和 `PreScore` 的一个例子是:
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta3
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: non-multipoint-scheduler
+ plugins:
+ multiPoint:
+ enabled:
+ - name: 'MyPlugin'
+ preScore:
+ disabled:
+ - name: '*'
+ score:
+ disabled:
+ - name: '*'
+```
+
+
+
+在 `v1beta3` 中,所有 [默认插件](#scheduling-plugins) 都通过 `MultiPoint` 在内部启用。
+但是,仍然可以使用单独的扩展点来灵活地重新配置默认值(例如排序和分数权重)。
+例如,考虑两个Score插件 `DefaultScore1` 和 `DefaultScore2` ,每个插件的权重为 `1` 。
+它们可以用不同的权重重新排序,如下所示:
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta3
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: multipoint-scheduler
+ plugins:
+ score:
+ enabled:
+ - name: 'DefaultScore2'
+ weight: 5
+```
+
+
+
+在这个例子中,没有必要在 `MultiPoint` 中明确指定插件,因为它们是默认插件。
+`Score` 中指定的唯一插件是 `DefaultScore2`。
+这是因为通过特定扩展点设置的插件将始终优先于 `MultiPoint` 插件。
+因此,此代码段实质上重新排序了这两个插件,而无需同时指定它们。
+
+
+
+配置 `MultiPoint` 插件时优先级的一般层次结构如下:
+
+
+1. 特定的扩展点首先运行,它们的设置会覆盖其他地方的设置
+
+
+2. 通过 `MultiPoint` 手动配置的插件及其设置
+
+
+3. 默认插件及其默认设置
+
+
+为了演示上述层次结构,以下示例基于这些插件:
+|插件|扩展点|
+|---|---|
+|`DefaultQueueSort`|`QueueSort`|
+|`CustomQueueSort`|`QueueSort`|
+|`DefaultPlugin1`|`Score`, `Filter`|
+|`DefaultPlugin2`|`Score`|
+|`CustomPlugin1`|`Score`, `Filter`|
+|`CustomPlugin2`|`Score`, `Filter`|
+
+
+这些插件的一个有效示例配置是:
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta3
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: multipoint-scheduler
+ plugins:
+ multiPoint:
+ enabled:
+ - name: 'CustomQueueSort'
+ - name: 'CustomPlugin1'
+ weight: 3
+ - name: 'CustomPlugin2'
+ disabled:
+ - name: 'DefaultQueueSort'
+ filter:
+ disabled:
+ - name: 'DefaultPlugin1'
+ score:
+ enabled:
+ - name: 'DefaultPlugin2'
+```
+
+
+请注意,在特定扩展点中重新声明 `MultiPoint` 插件不会出错。
+重新声明被忽略(并记录),因为特定的扩展点优先。
+
+
+
+除了将大部分配置保存在一个位置之外,此示例还做了一些事情:
+
+
+* 启用自定义 `queueSort` 插件并禁用默认插件
+
+* 启用 `CustomPlugin1` 和 `CustomPlugin2`,这将首先为它们的所有扩展点运行
+
+* 禁用 `DefaultPlugin1`,但仅适用于 `filter`
+
+* 重新排序 `DefaultPlugin2` 以在 `score` 中首先运行(甚至在自定义插件之前)
+
+
+在 `v1beta3` 之前的配置版本中,没有 `multiPoint`,上面的代码片段等同于:
+
+```yaml
+apiVersion: kubescheduler.config.k8s.io/v1beta2
+kind: KubeSchedulerConfiguration
+profiles:
+ - schedulerName: multipoint-scheduler
+ plugins:
+
+ # Disable the default QueueSort plugin
+ queueSort:
+ enabled:
+ - name: 'CustomQueueSort'
+ disabled:
+ - name: 'DefaultQueueSort'
+
+ # Enable custom Filter plugins
+ filter:
+ enabled:
+ - name: 'CustomPlugin1'
+ - name: 'CustomPlugin2'
+ - name: 'DefaultPlugin2'
+ disabled:
+ - name: 'DefaultPlugin1'
+
+ # Enable and reorder custom score plugins
+ score:
+ enabled:
+ - name: 'DefaultPlugin2'
+ weight: 1
+ - name: 'DefaultPlugin1'
+ weight: 3
+```
+
+
+
+虽然这是一个复杂的例子,但它展示了 `MultiPoint` 配置的灵活性以及它与配置扩展点的现有方法的无缝集成。
+
+
+
+## 调度程序配置迁移
+{{< tabs name="tab_with_md" >}}
+{{% tab name="v1beta1 → v1beta2" %}}
+
+* 在 v1beta2 配置版本中,你可以为 `NodeResourcesFit` 插件使用新的 score 扩展。
+ 新的扩展结合了 `NodeResourcesLeastAllocated`、`NodeResourcesMostAllocated` 和 `RequestedToCapacityRatio` 插件的功能。
+ 例如,如果你之前使用了 `NodeResourcesMostAllocated` 插件,
+ 则可以改用 `NodeResourcesFit`(默认启用)并添加一个 `pluginConfig` 和 `scoreStrategy`,类似于:
+
+ ```yaml
+ apiVersion: kubescheduler.config.k8s.io/v1beta2
+ kind: KubeSchedulerConfiguration
+ profiles:
+ - pluginConfig:
+ - args:
+ scoringStrategy:
+ resources:
+ - name: cpu
+ weight: 1
+ type: MostAllocated
+ name: NodeResourcesFit
+ ```
+
+
+* 调度器插件 `NodeLabel` 已弃用;
+ 相反,要使用 [`NodeAffinity`](/zh/docs/concepts/scheduling-eviction/assign-pod-node/#affinity-and-anti-affinity)
+ 插件(默认启用)来实现类似的行为。
+
+
+* 调度程序插件 `ServiceAffinity` 已弃用;
+ 相反,使用 [`InterPodAffinity`](/zh/doc/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity)
+ 插件(默认启用)来实现类似的行为。
+
+
+* 调度器插件 `NodePreferAvoidPods` 已弃用;
+ 相反,使用 [节点污点](/zh/docs/concepts/scheduling-eviction/taint-and-toleration/) 来实现类似的行为。
+
+
+* 在 v1beta2 配置文件中启用的插件优先于该插件的默认配置。
+
+
+* 调度器的健康检查和审计的绑定地址,所配置的 `host` 或 `port` 无效将导致验证失败。
+
+{{% /tab %}}
+
+{{% tab name="v1beta2 → v1beta3" %}}
+
+* 默认增加三个插件的权重:
+ * `InterPodAffinity` 从 1 到 2
+ * `NodeAffinity` 从 1 到 2
+ * `TaintToleration` 从 1 到 3
+{{% /tab %}}
+{{< /tabs >}}
+
## {{% heading "whatsnext" %}}
* 阅读 [kube-scheduler 参考](/zh/docs/reference/command-line-tools-reference/kube-scheduler/)
* 了解[调度](/zh/docs/concepts/scheduling-eviction/kube-scheduler/)
-* 阅读 [kube-scheduler 配置 (v1beta1)](/zh/docs/reference/config-api/kube-scheduler-config.v1beta1/) 参考
-
+* 阅读 [kube-scheduler 配置 (v1beta2)](/zh/docs/reference/config-api/kube-scheduler-config.v1beta2/) 参考
+* 阅读 [kube-scheduler 配置 (v1beta3)](/zh/docs/reference/config-api/kube-scheduler-config.v1beta3/) 参考
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/README.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/README.md
index b718c7ef34..c7321f582d 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/README.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/README.md
@@ -1 +1 @@
-此目录下的所有文件都是从其他仓库自动生成的。 **不要人工编辑它们。 您必须在上游仓库中编辑它们**
+此目录下的所有文件都是从其他仓库自动生成的。 **不要人工编辑它们。 你必须在上游仓库中编辑它们**
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm.md
index 8ebdeb3c1d..7e07147a3f 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm.md
@@ -1,8 +1,11 @@
+kubeadm: 轻松创建一个安全的 Kubernetes 集群
### 摘要
-创建一个有两台机器的集群,包含一个主节点(用来控制集群),和一个工作节点(运行您的工作负载,像 Pod 和 Deployment)。
+创建一个有两台机器的集群,包含一个主节点(用来控制集群),和一个工作节点(运行你的工作负载,像 Pod 和 Deployment)。
-kubeadm 操作的帮助信息
+kubeadm 操作的帮助信息
@@ -102,9 +105,9 @@ kubeadm 操作的帮助信息
-[实验] 指向 '真实' 宿主机根文件系统的路径。
+[实验] 指向 '真实' 宿主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md
deleted file mode 100644
index f6978fcb6d..0000000000
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_alpha.md
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-### 概要
-
-
-
-kubeadm 实验子命令
-
-
-
-### 选项
-
-
-
-
-
-
-
-
-
--h, --help
-
-
-
-
-alpha 操作的帮助命令
-
-
-
-
-
-
-
-
-### 从父命令继承的选项
-
-
-
-
-
-
-
-
-
---rootfs string
-
-
-
-
-[实验] 指向 '真实' 宿主机的根文件系统的路径。
-
-
-
-
-
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs.md
index 9e34c47542..15278730f5 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs.md
@@ -1,3 +1,18 @@
+
+
+
+处理 Kubernetes 证书的相关命令
-与处理 kubernetes 证书相关的命令
+处理 Kubernetes 证书相关的命令
-certs 命令的帮助
+
+certs 命令的帮助
@@ -48,8 +63,8 @@ Commands related to handling kubernetes certificates
--rootfs string
-
-[实验] 到'真实'主机根文件系统的路径。
+
+[实验] 到'真实'主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_certificate-key.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_certificate-key.md
index b008e44b38..ab4f4b5356 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_certificate-key.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_certificate-key.md
@@ -1,3 +1,18 @@
+
+
+
+生成证书密钥
certificate-key 操作的帮助命令
+
@@ -64,10 +81,12 @@ certificate-key 操作的帮助命令
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_check-expiration.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_check-expiration.md
index e01e7fa4fe..5cff01b9f7 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_check-expiration.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_check-expiration.md
@@ -1,3 +1,19 @@
+
+
+
+为一个 Kubernetes 集群检查证书的到期时间
+
@@ -31,26 +47,54 @@ kubeadm certs check-expiration [flags]
--cert-dir string 默认值: "/etc/kubernetes/pki"
-
-保存证书的路径
+保存证书的路径
+
--config string
-
-kubeadm 配置文件的路径
+
+
+kubeadm 配置文件的路径
+
-h, --help
-
-check-expiration 的帮助命令
+
+
+check-expiration 的帮助命令
+
+
+
+
+
+
+--kubeconfig string 默认为: "/etc/kubernetes/admin.conf"
+
+
+
+
+
+在和集群连接时使用该 kubeconfig 文件。
+如果该标志没有设置,那么将会在一些标准的位置去搜索存在的 kubeconfig 文件。
+
@@ -72,8 +116,12 @@ kubeadm certs check-expiration [flags]
--rootfs string
-
-[实验] 到'真实'主机根文件系统的路径。
+
+
+[实验] 到'真实'主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_generate-csr.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_generate-csr.md
index 03dcc9298b..964f52b342 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_generate-csr.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_generate-csr.md
@@ -1,3 +1,18 @@
+
+
+
+生成密钥和证书签名请求
### 概要
@@ -60,7 +75,7 @@ kubeadm certs generate-csr --kubeconfig-dir /tmp/etc-k8s --cert-dir /tmp/etc-k8s
-保存证书的路径
+保存证书的路径
@@ -68,7 +83,7 @@ kubeadm certs generate-csr --kubeconfig-dir /tmp/etc-k8s --cert-dir /tmp/etc-k8s
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -76,7 +91,7 @@ kubeadm certs generate-csr --kubeconfig-dir /tmp/etc-k8s --cert-dir /tmp/etc-k8s
-generate-csr 命令的帮助
+generate-csr 命令的帮助
@@ -85,7 +100,7 @@ kubeadm certs generate-csr --kubeconfig-dir /tmp/etc-k8s --cert-dir /tmp/etc-k8s
-保存 kubeconfig 文件的路径。
+保存 kubeconfig 文件的路径。
@@ -108,9 +123,8 @@ kubeadm certs generate-csr --kubeconfig-dir /tmp/etc-k8s --cert-dir /tmp/etc-k8s
-[实验] 到'真实'主机根文件系统的路径。
+[实验] 到'真实'主机根文件系统的路径。
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew.md
index 58fff42d32..d8102a19ce 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew.md
@@ -1,3 +1,18 @@
+
+
+
+为 Kubernetes 集群更新证书
renew 操作的帮助命令
+
@@ -58,10 +75,12 @@ renew 操作的帮助命令
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_admin.conf.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_admin.conf.md
index d770d8438d..de9376b6ab 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_admin.conf.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_admin.conf.md
@@ -1,3 +1,18 @@
+
+
+
+续订 kubeconfig 文件中嵌入的证书,供管理员 和 kubeadm 自身使用。
-保存证书的路径。
+保存证书的路径。
@@ -62,30 +77,8 @@ The path where to save the certificates.
-
-kubeadm 配置文件的路径。
-
-
-
-
---csr-dir string
-
-
-
-
-CSR 和私钥的输出路径
-
-
-
-
---csr-only
-
-
-
-
-创建 CSR 而不是生成证书
+
+kubeadm 配置文件的路径。
@@ -94,8 +87,8 @@ Create CSRs instead of generating certificates
-
-admin.conf 子操作的帮助命令
+
+admin.conf 子操作的帮助命令
@@ -104,9 +97,9 @@ admin.conf 子操作的帮助命令
-
-与集群通信时使用的 kubeconfig 文件。
-如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
+与集群通信时使用的 kubeconfig 文件。
+如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
@@ -143,9 +136,9 @@ Use the Kubernetes certificate API to renew certificates
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_all.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_all.md
index 2ac56da0dd..28a9fbd42f 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_all.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_all.md
@@ -1,3 +1,18 @@
+
+
+
+续订所有可用证书
-存储证书的路径。
+存储证书的路径。
@@ -48,33 +63,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
-
-
-
-
---csr-dir string
-
-
-
-
-输出 CSR 和私钥的路径
-
-
-
-
---csr-only
-
-
-
-
-创建 CSR 而不是生成证书
+kubeadm 配置文件的路径。
@@ -84,9 +75,9 @@ Create CSRs instead of generating certificates
-all 操作的帮助命令
+all 操作的帮助命令
@@ -101,10 +92,10 @@ all 操作的帮助命令
-与集群通信时使用的 kubeconfig 文件。
-如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+与集群通信时使用的 kubeconfig 文件。
+如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
@@ -141,9 +132,9 @@ Use the Kubernetes certificate API to renew certificates
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver-etcd-client.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver-etcd-client.md
index 2e5c428da3..235206573c 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver-etcd-client.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver-etcd-client.md
@@ -1,3 +1,18 @@
+
+
+
+续订 apiserver 用于访问 etcd 的证书
-存储证书的路径。
+
+存储证书的路径。
@@ -59,28 +76,10 @@ kubeadm certs renew apiserver-etcd-client [flags]
-
-kubeadm 配置文件的路径。
-
-
-
-
---csr-dir string
-
-
-
-
-输出 CSR 和私钥的路径
-
-
-
-
---csr-only
-
-
-
-
-创建 CSR 而不是生成证书
+
+kubeadm 配置文件的路径。
@@ -89,8 +88,10 @@ kubeadm 配置文件的路径。
-
-apiserver-etcd-client 操作的帮助命令
+
+apiserver-etcd-client 操作的帮助命令
@@ -105,20 +106,10 @@ apiserver-etcd-client 操作的帮助命令
-与集群通信时使用的 kubeconfig 文件。
-如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
-
-
-
-
---use-api
-
-
-
-
-使用 Kubernetes 证书 API 续订证书
+与集群通信时使用的 kubeconfig 文件。
+如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
@@ -144,8 +135,10 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
-
-[实验] 到 '真实' 主机根文件系统的路径。
+
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver-kubelet-client.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver-kubelet-client.md
index 9b1d8127b9..4272890db4 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver-kubelet-client.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver-kubelet-client.md
@@ -1,3 +1,18 @@
+
+
+
+续订 apiserver 用于连接 kubelet 的证书。
-存储证书的路径。
+存储证书的路径。
@@ -64,33 +79,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
-
-
-
-
---csr-dir string
-
-
-
-
-输出 CSR 和私钥的路径
-
-
-
-
---csr-only
-
-
-
-
-创建 CSR 而不是生成证书
+kubeadm 配置文件的路径。
@@ -100,9 +91,9 @@ Create CSRs instead of generating certificates
-apiserver-kubelet-client 操作的帮助命令
+apiserver-kubelet-client 操作的帮助命令
@@ -117,10 +108,10 @@ apiserver-kubelet-client 操作的帮助命令
-与集群通信时使用的 kubeconfig 文件。
-如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+与集群通信时使用的 kubeconfig 文件。
+如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
@@ -157,9 +148,9 @@ Use the Kubernetes certificate API to renew certificates
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver.md
index a2e2e2c915..345147be14 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_apiserver.md
@@ -1,3 +1,19 @@
+
+
+
+
+续订用于提供 Kubernetes API 的证书
-
无论证书的到期日期如何,续订都会无条件地进行;SAN 等额外属性将基于现有文件/证书,因此无需重新提供它们。
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
@@ -55,7 +70,9 @@ kubeadm certs renew apiserver [flags]
+
保存证书的路径。
+
@@ -67,31 +84,9 @@ The path where to save the certificates.
+
kubeadm 配置文件的路径。
-
-
-
-
---csr-dir string
-
-
-
-
-CSR 和私钥的输出路径
-
-
-
-
---csr-only
-
-
-
-
-创建 CSR 而不是生成证书
+
@@ -103,37 +98,26 @@ Create CSRs instead of generating certificates
+
apiserver 子操作的帮助命令
+
-
-
+
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
-
-
-
-与集群通信时使用的 kubeconfig 文件。
-如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
-
-
---use-api
-
-
-
-
-使用 Kubernetes 证书 API 续订证书
+
+与集群通信时使用的 kubeconfig 文件。
+如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
@@ -143,7 +127,6 @@ Use the Kubernetes certificate API to renew certificates
-
### 从父命令继承的选项
@@ -161,10 +144,11 @@ Use the Kubernetes certificate API to renew certificates
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_controller-manager.conf.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_controller-manager.conf.md
index a4d974bb52..9285782b4b 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_controller-manager.conf.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_controller-manager.conf.md
@@ -1,3 +1,18 @@
+
+
+
+续订 kubeconfig 文件中嵌入的证书,以供控制器管理器(Controller Manager)使用。
-保存证书的路径。
+保存证书的路径。
@@ -64,33 +79,9 @@ The path where to save the certificates.
-kubeadm 配置文件的路径。
-
-
-
-
---csr-dir string
-
-
-
-
-CSR 和私钥的输出路径
-
-
-
-
---csr-only
-
-
-
-
-创建 CSR 而不是生成证书
+kubeadm 配置文件的路径。
@@ -100,9 +91,9 @@ Create CSRs instead of generating certificates
-controller-manager.conf 操作的帮助命令
+controller-manager.conf 操作的帮助命令
@@ -117,10 +108,10 @@ controller-manager.conf 操作的帮助命令
-与集群通信时使用的 kubeconfig 文件。
-如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+与集群通信时使用的 kubeconfig 文件。
+如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
@@ -157,9 +148,9 @@ Use the Kubernetes certificate API to renew certificates
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-healthcheck-client.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-healthcheck-client.md
index 44f59cffa0..bb417a018e 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-healthcheck-client.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-healthcheck-client.md
@@ -1,3 +1,18 @@
+
+
+
+续订存活态探针的证书,用于对 etcd 执行健康检查
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防证书文件在其他地方使用。
@@ -54,7 +69,9 @@ kubeadm certs renew etcd-healthcheck-client [flags]
+
保存证书的路径。
+
@@ -66,33 +83,10 @@ The path where to save the certificates.
+
kubeadm 配置文件的路径。
+
-
-
-
---csr-dir string
-
-
-
-
-CSR 和私钥的输出路径
-
-
-
-
---csr-only
-
-
-
-
-创建 CSR 而不是生成证书
-
-
-h, --help
@@ -102,7 +96,9 @@ Create CSRs instead of generating certificates
+
etcd-healthcheck-client 操作的帮助命令
+
@@ -119,20 +115,10 @@ etcd-healthcheck-client 操作的帮助命令
+
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
-
-
-
-
---use-api
-
-
-
-
-使用 Kubernetes 证书 API 续订证书
+
@@ -159,10 +145,11 @@ Use the Kubernetes certificate API to renew certificates
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-peer.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-peer.md
index 55264306eb..1207467a3f 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-peer.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-peer.md
@@ -1,3 +1,19 @@
+
+
+
+
+续订 etcd 节点间用来相互通信的证书
+
保存证书的路径。
+
@@ -66,31 +84,9 @@ The path where to save the certificates.
+
kubeadm 配置文件的路径。
-
-
-
-
---csr-dir string
-
-
-
-
-CSR 和私钥的输出路径
-
-
-
-
---csr-only
-
-
-
-
-创建 CSR 而不是生成证书
+
@@ -119,22 +115,16 @@ etcd-peer 操作的帮助命令
+
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
--use-api
-
-
-
-使用 Kubernetes 证书 API 续订证书
-
-
@@ -159,10 +149,11 @@ Use the Kubernetes certificate API to renew certificates
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-server.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-server.md
index 237c9d3f44..2b82842544 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-server.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_etcd-server.md
@@ -1,3 +1,18 @@
+
+
+
+续订用于提供 etcd 服务的证书
续订后,为了使更改生效,需要重新启动控制平面组件,并最终重新分发更新的证书,以防文件在其他地方使用。
@@ -54,7 +69,9 @@ kubeadm certs renew etcd-server [flags]
+
保存证书的路径。
+
@@ -66,31 +83,9 @@ The path where to save the certificates.
+
kubeadm 配置文件的路径。
-
-
-
-
---csr-dir string
-
-
-
-
-CSR 和私钥的输出路径
-
-
-
-
---csr-only
-
-
-
-
-创建 CSR 而不是生成证书
+
@@ -102,7 +97,9 @@ Create CSRs instead of generating certificates
+
etcd-server 操作的帮助命令
+
@@ -119,22 +116,16 @@ etcd-server 操作的帮助命令
+
与集群通信时使用的 kubeconfig 文件。
如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
--use-api
-
-
-
-使用 Kubernetes 证书 API 续订证书
-
-
@@ -142,7 +133,6 @@ Use the Kubernetes certificate API to renew certificates
-
### 从父命令继承的选项
@@ -160,10 +150,11 @@ Use the Kubernetes certificate API to renew certificates
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_front-proxy-client.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_front-proxy-client.md
index 7dac9e30d2..ca748f5482 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_front-proxy-client.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_front-proxy-client.md
@@ -1,3 +1,18 @@
+
+
+
+为前端代理客户端续订证书。
-存储证书的路径。
+存储证书的路径。
@@ -60,33 +75,9 @@ The path where to save the certificates
-kubeadm 配置文件的路径。
-
-
-
-
---csr-dir string
-
-
-
-
-输出 CSR 和私钥的路径
-
-
-
-
---csr-only
-
-
-
-
-创建 CSR 而不是生成证书
+kubeadm 配置文件的路径。
@@ -96,9 +87,9 @@ Create CSRs instead of generating certificates
-front-proxy-client 操作的帮助命令
+front-proxy-client 操作的帮助命令
@@ -113,10 +104,10 @@ front-proxy-client 操作的帮助命令
-与集群通信时使用的 kubeconfig 文件。
-如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+与集群通信时使用的 kubeconfig 文件。
+如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
@@ -153,9 +144,9 @@ Use the Kubernetes certificate API to renew certificates
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_scheduler.conf.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_scheduler.conf.md
index 9898202f48..33a13fb95c 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_scheduler.conf.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_certs_renew_scheduler.conf.md
@@ -1,3 +1,18 @@
+
+
+
+续订 kubeconfig 文件中嵌入的证书,以供调度管理器使用
-保存证书的路径。
+保存证书的路径。
@@ -64,33 +79,9 @@ The path where to save the certificates.
-kubeadm 配置文件的路径。
-
-
-
-
---csr-dir string
-
-
-
-
-CSR 和私钥的输出路径
-
-
-
-
---csr-only
-
-
-
-
-创建 CSR 而不是生成证书
+kubeadm 配置文件的路径。
@@ -100,9 +91,9 @@ Create CSRs instead of generating certificates
-scheduler.conf 操作的帮助命令
+scheduler.conf 操作的帮助命令
@@ -117,22 +108,10 @@ scheduler.conf 操作的帮助命令
-与集群通信时使用的 kubeconfig 文件。
-如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
-
-
-
-
---use-api
-
-
-
-
-使用 Kubernetes 证书 API 续订证书
+与集群通信时使用的 kubeconfig 文件。
+如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
@@ -157,9 +136,9 @@ Use the Kubernetes certificate API to renew certificates
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_completion.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_completion.md
index 7f57fa22d4..73979c0424 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_completion.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_completion.md
@@ -1,3 +1,18 @@
+
+
+
+为指定 Shell(Bash 或 Zsh) 输出 Shell 补全代码
-如果在 Linux 上没有安装 bash-completion,请通过您的发行版的包管理器安装 `bash-completion` 软件包。
+如果在 Linux 上没有安装 bash-completion,请通过你的发行版的包管理器安装 `bash-completion` 软件包。
+
completion 操作的帮助命令
+
@@ -146,7 +163,9 @@ completion 操作的帮助命令
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config.md
index 3d15456c8d..b45cb94f1c 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config.md
@@ -1,3 +1,18 @@
+
+
+
+管理持久化在 ConfigMap 中的 kubeadm 集群的配置
-config 操作的帮助命令
+
+config 操作的帮助命令
@@ -56,10 +73,11 @@ config 操作的帮助命令
-
-用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件
+用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件
@@ -84,8 +102,10 @@ If the flag is not set, a set of standard locations can be searched for an exist
-
-[实验] 到 '真实' 主机根文件系统的路径。
+
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images.md
index 6177ab80c1..ae7f5ac3f1 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images.md
@@ -1,3 +1,18 @@
+
+
+
+与 kubeadm 使用的容器镜像交互
+
images 的帮助命令
+
@@ -47,7 +64,6 @@ images 的帮助命令
-
### 从父命令继承的选项
@@ -70,7 +86,9 @@ images 的帮助命令
+
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
+
@@ -82,7 +100,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md
index 861f3a6a66..1f8db00a51 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_list.md
@@ -1,15 +1,36 @@
+
+
+打印 kubeadm 要使用的镜像列表。配置文件用于自定义镜像或镜像存储库
+
### Synopsis
-->
### 概要
-
-打印 kubeadm 要使用的镜像列表。配置文件用于自定义任何镜像或镜像存储库。
+打印 kubeadm 要使用的镜像列表。配置文件用于自定义镜像或镜像存储库
```
kubeadm config images list [flags]
@@ -39,23 +60,10 @@ kubeadm config images list [flags]
+
如果设置为 true,则在模板中缺少字段或哈希表的键时忽略模板中的任何错误。
仅适用于 golang 和 jsonpath 输出格式。
-
-
-
-
-
-
--o, --experimental-output string 默认值:"text"
-
-
-
-
-
-输出格式:text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file 其中之一
+
@@ -67,9 +75,28 @@ Output format. One of: text|json|yaml|go-template|go-template-file|template|temp
+
kubeadm 配置文件的路径。
+
+
+
+
+-o, --experimental-output string 默认值:"text"
+
+
+
+
+
+
+输出格式:text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file 其中之一
+
+
+
+
--feature-gates string
@@ -77,12 +104,14 @@ kubeadm 配置文件的路径。
+
一组键值对(key=value),用于描述各种特征。选项是:
- Auditing=true|false (ALPHA - 默认=false)
- CoreDNS=true|false (默认=true)
- DynamicKubeletConfig=true|false (BETA - 默认=false)
+ PublicKeysECDSA=true|false (ALPHA - 默认=false)
+ RootlessControlPlane=true|false (ALPHA - 默认=false)
+ UnversionedKubeletConfigMap=true|false (BETA - 默认=true)
+
@@ -94,7 +123,9 @@ A set of key=value pairs that describe feature gates for various features. Optio
+
list 操作的帮助命令
+
@@ -107,14 +138,16 @@ list 操作的帮助命令
+
选择要从中拉取控制平面镜像的容器仓库
+
--kubernetes-version string 默认值:"stable-1"
@@ -122,9 +155,30 @@ list 操作的帮助命令
+
为控制平面选择一个特定的 Kubernetes 版本
+
+
+
+
+
+
+
+--show-managed-fields
+
+
+
+
+
+
+如果为 true,则在以 JSON 或 YAML 格式打印对象时保留 managedFields。
+
@@ -135,7 +189,6 @@ Choose a container registry to pull control plane images from
-
### 从父命令继承的选项
@@ -158,7 +211,9 @@ Choose a container registry to pull control plane images from
+
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
+
@@ -170,7 +225,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md
index a95cda878c..b134747c62 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_images_pull.md
@@ -1,3 +1,24 @@
+
+
+
+
+拉取 kubeadm 使用的镜像。
+
kubeadm 配置文件的路径。
+
@@ -48,7 +71,9 @@ kubeadm 配置文件的路径。
+
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
+
@@ -58,9 +83,12 @@ Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this
-一系列键值对(key=value),用于描述各种特征。可选项是: IPv6DualStack=true|false (ALPHA - 默认值=false)
+一系列键值对(key=value),用于描述各种特征。可选项是:
+ PublicKeysECDSA=true|false (ALPHA - 默认值=false)
+ RootlessControlPlane=true|false (ALPHA - 默认值=false)
+ UnversionedKubeletConfigMap=true|false (BETA - 默认值=true)
@@ -72,7 +100,9 @@ A set of key=value pairs that describe feature gates for various features. Optio
+
pull 操作的帮助命令
+
@@ -89,7 +119,9 @@ pull 操作的帮助命令
+
选择用于拉取控制平面镜像的容器仓库
+
@@ -106,7 +138,9 @@ Choose a container registry to pull control plane images from
+
为控制平面选择一个特定的 Kubernetes 版本。
+
@@ -139,7 +173,9 @@ Choose a specific Kubernetes version for the control plane.
+
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
+
@@ -151,7 +187,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_migrate.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_migrate.md
index 7d1ae11ea0..df70d06637 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_migrate.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_migrate.md
@@ -1,3 +1,18 @@
+
+
+
+从文件中读取旧版本的 kubeadm 配置的 API 类型,并为新版本输出类似的配置对象
此命令允许您在 CLI 工具中将本地旧版本的配置对象转换为最新支持的版本,而无需变更集群中的任何内容。在此版本的 kubeadm 中,支持以下 API 版本:
-
-- kubeadm.k8s.io/v1beta2
+- kubeadm.k8s.io/v1beta3
-migrate 操作的帮助信息
+
+migrate 操作的帮助信息
@@ -66,9 +82,9 @@ migrate 操作的帮助信息
-使用新的 API 版本生成的 kubeadm 配置文件的路径。这个路径是可选的。如果没有指定,输出将被写到 stdout。
+使用新的 API 版本生成的 kubeadm 配置文件的路径。这个路径是可选的。如果没有指定,输出将被写到 stdout。
@@ -78,9 +94,9 @@ Path to the resulting equivalent kubeadm config file using the new API version.
-使用旧 API 版本且应转换的 kubeadm 配置文件的路径。此参数是必需的。
+使用旧 API 版本且应转换的 kubeadm 配置文件的路径。此参数是必需的。
@@ -109,9 +125,9 @@ Path to the kubeadm config file that is using an old API version and should be c
-用于和集群通信的 kubeconfig 文件。如果未设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
+用于和集群通信的 kubeconfig 文件。如果未设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
@@ -120,8 +136,10 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
-
-[实验] 到 '真实' 主机根文件系统的路径。
+
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print.md
index 9132e3a04b..145bf61fa5 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print.md
@@ -21,10 +21,10 @@ Print configuration
此命令打印子命令所提供的配置信息。
-相关细节可参阅 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
+相关细节可参阅: https://pkg.go.dev/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#section-directories
```
kubeadm config print [flags]
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print_init-defaults.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print_init-defaults.md
index 2f20499dba..0ae02abb63 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print_init-defaults.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print_init-defaults.md
@@ -1,3 +1,18 @@
+
+
+
+打印用于 'kubeadm init' 的默认 init 配置
-请注意,Bootstrap Token 字段之类的敏感值已替换为 {"abcdef.0123456789abcdef" "" "nil" <nil> [] []} 之类的占位符值以通过验证,但不执行创建令牌的实际计算。
+请注意,Bootstrap Token 字段之类的敏感值已替换为 "abcdef.0123456789abcdef" 之类的占位符值以通过验证,但不执行创建令牌的实际计算。
```
kubeadm config print init-defaults [flags]
@@ -35,14 +50,14 @@ kubeadm config print init-defaults [flags]
---component-configs stringSlice
+--component-configs strings
-组件配置 API 对象的逗号分隔列表,打印其默认值。可用值:[KubeProxyConfiguration KubeletConfiguration]。如果未设置此参数,则不会打印任何组件配置。
+组件配置 API 对象的逗号分隔列表,打印其默认值。可用值:[KubeProxyConfiguration KubeletConfiguration]。如果未设置此参数,则不会打印任何组件配置。
@@ -52,9 +67,9 @@ A comma-separated list for component config API objects to print the default val
-init-defaults 操作的帮助命令
+init-defaults 操作的帮助命令
@@ -85,9 +100,9 @@ init-defaults 操作的帮助命令
-与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
@@ -97,9 +112,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print_join-defaults.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print_join-defaults.md
index 6b63d74216..3e69e53bf3 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print_join-defaults.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_config_print_join-defaults.md
@@ -1,3 +1,19 @@
+
+
+
+
+打印默认的节点添加配置,该配置可用于 'kubeadm join' 命令
-请注意,诸如启动引导令牌字段之类的敏感值已替换为 {"abcdef.0123456789abcdef" "" "nil" <nil> [] []}
-之类的占位符值以通过验证,但不执行创建令牌的实际计算。
+请注意,诸如启动引导令牌字段之类的敏感值已替换为 "abcdef.0123456789abcdef" 之类的占位符值以通过验证,
+但不执行创建令牌的实际计算。
```
kubeadm config print join-defaults [flags]
@@ -37,14 +53,16 @@ kubeadm config print join-defaults [flags]
---component-configs stringSlice
+--component-configs strings/td>
+
组件配置 API 对象的逗号分隔列表,打印其默认值。可用值:[KubeProxyConfiguration KubeletConfiguration]。如果未设置此参数,则不会打印任何组件配置。
+
@@ -56,7 +74,9 @@ A comma-separated list for component config API objects to print the default val
+
join-defaults 操作的帮助命令
+
@@ -89,7 +109,9 @@ join-defaults 操作的帮助命令
+
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
@@ -101,7 +123,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md
index 8c40707100..96e8756504 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init.md
@@ -1,3 +1,18 @@
+
+
+
+运行此命令以安装 Kubernetes 控制平面。
+
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。
+
@@ -98,19 +115,23 @@ API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使
+
API 服务器绑定的端口。
+
---apiserver-cert-extra-sans stringSlice
+--apiserver-cert-extra-sans strings
+
用于 API Server 服务证书的可选附加主题备用名称(SAN)。可以是 IP 地址和 DNS 名称。
+
@@ -127,7 +148,9 @@ Optional extra Subject Alternative Names (SANs) to use for the API Server servin
+
保存和存储证书的路径。
+
@@ -139,7 +162,9 @@ The path where to save and store the certificates.
+
用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。
+
@@ -151,7 +176,9 @@ Key used to encrypt the control-plane certificates in the kubeadm-certs Secret.
+
kubeadm 配置文件的路径。
+
@@ -163,7 +190,9 @@ kubeadm 配置文件的路径。
+
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
+
@@ -175,7 +204,9 @@ Specify a stable IP address or DNS name for the control plane.
+
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
+
@@ -187,23 +218,9 @@ Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this
+
不要应用任何更改;只是输出将要执行的操作。
-
-
-
-
---experimental-patches string
-
-
-
-
-包含名为 "target[suffix][+patchtype].extension" 的文件的目录路径。
-例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
-"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
-默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
-"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+
@@ -213,9 +230,12 @@ Path to a directory that contains files named "target[suffix][+patchtype].extens
-一组用来描述各种功能特性的键值(key=value)对。选项是: IPv6DualStack=true|false (ALPHA - default=false)
+一组用来描述各种功能特性的键值(key=value)对。选项是:
+ PublicKeysECDSA=true|false (ALPHA - 默认值=false)
+ RootlessControlPlane=true|false (ALPHA - 默认值=false)
+ UnversionedKubeletConfigMap=true|false (BETA - 默认值=true)
@@ -227,19 +247,23 @@ A set of key=value pairs that describe feature gates for various features. Optio
+
init 操作的帮助命令
+
---ignore-preflight-errors stringSlice
+--ignore-preflight-errors strings
+
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
+
@@ -256,7 +280,9 @@ A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedU
+
选择用于拉取控制平面镜像的容器仓库
+
@@ -273,7 +299,9 @@ Choose a container registry to pull control plane images from
+
为控制平面选择一个特定的 Kubernetes 版本。
+
@@ -285,7 +313,30 @@ Choose a specific Kubernetes version for the control plane.
+
指定节点的名称。
+
+
+
+
+
+--patches string
+
+
+
+
+
+它包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
+例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。
+"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd" 之一。
+"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
+并且它们与 kubectl 支持的补丁格式相同。
+默认的 "patchtype" 是 "strategic"。
+"extension" 必须是"json" 或"yaml"。
+"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+
@@ -297,7 +348,9 @@ Specify the node name.
+
指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs。
+
@@ -314,7 +367,9 @@ Specify range of IP addresses for the pod network. If set, the control plane wil
+
为服务的虚拟 IP 地址另外指定 IP 地址段
+
@@ -329,9 +384,9 @@ Use alternative range of IP address for service VIPs.
-为服务另外指定域名,例如:"myorg.internal"。
+为服务另外指定域名,例如:"myorg.internal"。
@@ -343,19 +398,23 @@ Use alternative domain for services, e.g. "myorg.internal".
+
不要打印用于加密控制平面证书的密钥。
+
---skip-phases stringSlice
+--skip-phases strings
+
要跳过的阶段列表
+
@@ -367,7 +426,9 @@ List of phases to be skipped
+
跳过打印 'kubeadm init' 生成的默认引导令牌。
+
@@ -377,9 +438,11 @@ Skip printing of the default bootstrap token generated by 'kubeadm init'.
-这个令牌用于建立控制平面节点与工作节点间的双向通信。格式为 [a-z0-9]{6}\.[a-z0-9]{16} - 示例:abcdef.0123456789abcdef
+
+这个令牌用于建立控制平面节点与工作节点间的双向通信。格式为 [a-z0-9]{6}.[a-z0-9]{16} - 示例:abcdef.0123456789abcdef
+
@@ -396,7 +459,9 @@ The token to use for establishing bidirectional trust between nodes and control-
+
令牌被自动删除之前的持续时间(例如 1 s,2 m,3 h)。如果设置为 '0',则令牌将永不过期
+
@@ -408,7 +473,9 @@ The duration before the token is automatically deleted (e.g. 1s, 2m, 3h). If set
+
将控制平面证书上传到 kubeadm-certs Secret。
+
@@ -436,7 +503,9 @@ Upload control-plane certificates to the kubeadm-certs Secret.
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase.md
index 3052b2a5b6..2b74059aef 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase.md
@@ -1,3 +1,18 @@
+
+
+
+使用此命令可以调用 init 工作流程的单个阶段
-phase 操作的帮助命令
+
+phase 操作的帮助命令
@@ -56,9 +73,9 @@ phase 操作的帮助命令
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon.md
index 5a6b5bda67..43d750eb5a 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon.md
@@ -1,3 +1,18 @@
+
+
+
+安装必要的插件以通过一致性测试
+
addon 操作的帮助命令
+
@@ -64,10 +81,11 @@ addon 操作的帮助命令
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_all.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_all.md
index 54063fcc5c..acf37745a2 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_all.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_all.md
@@ -1,3 +1,18 @@
+
+
+
+安装所有插件
+
API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将使用默认网络接口。
+
@@ -53,7 +70,9 @@ API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将
+
API 服务器绑定的端口。
+
@@ -65,7 +84,9 @@ API 服务器绑定的端口。
+
kubeadm 配置文件的路径。
+
@@ -77,7 +98,9 @@ kubeadm 配置文件的路径。
+
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
+
@@ -87,9 +110,12 @@ Specify a stable IP address or DNS name for the control plane.
-一组键值对(key=value),描述了各种特征。选项包括: IPv6DualStack=true|false (ALPHA - 默认值=false)
+一组键值对(key=value),描述了各种特征。选项包括:
+ PublicKeysECDSA=true|false (ALPHA - 默认值=false)
+ RootlessControlPlane=true|false (ALPHA - 默认值=false)
+ UnversionedKubeletConfigMap=true|false (BETA - 默认值=true)
@@ -100,7 +126,10 @@ A set of key=value pairs that describe feature gates for various features. Optio
+
all 操作的帮助命令
+
@@ -117,7 +146,9 @@ all 操作的帮助命令
+
选择用于拉取控制平面镜像的容器仓库
+
@@ -134,7 +165,9 @@ Choose a container registry to pull control plane images from
+
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
@@ -151,7 +184,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
为控制平面选择特定的 Kubernetes 版本。
+
@@ -163,7 +198,9 @@ Choose a specific Kubernetes version for the control plane.
+
指定 Pod 网络的 IP 地址范围。如果已设置,控制平面将自动为每个节点分配 CIDR。
+
@@ -180,7 +217,9 @@ Specify range of IP addresses for the pod network. If set, the control plane wil
+
为服务 VIP 使用 IP 地址的其他范围。
+
@@ -195,9 +234,9 @@ Use alternative range of IP address for service VIPs.
-为服务使用其他域名,例如 "myorg.internal"。
+为服务使用其他域名,例如 "myorg.internal"。
@@ -225,7 +264,9 @@ Use alternative domain for services, e.g. "myorg.internal".
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_coredns.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_coredns.md
index 03650503b6..558fed355a 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_coredns.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_coredns.md
@@ -1,3 +1,7 @@
+
+将 CoreDNS 插件安装到 Kubernetes 集群
+
kubeadm 配置文件的路径。
+
@@ -46,9 +52,14 @@ kubeadm 配置文件的路径。
-一组用来描述各种功能特性的键值(key=value)对。选项是: IPv6DualStack=true|false (ALPHA - 默认值=false)
+
+一组用来描述各种功能特性的键值(key=value)对。选项是:
+ PublicKeysECDSA=true|false (ALPHA - 默认值=false)
+ RootlessControlPlane=true|false (ALPHA - 默认值=false)
+ UnversionedKubeletConfigMap=true|false (BETA - 默认值=true)
+
@@ -58,7 +69,9 @@ A set of key=value pairs that describe feature gates for various features. Optio
+
coredns 操作的帮助命令
+
@@ -75,7 +88,9 @@ coredns 操作的帮助命令
+
选择用于拉取控制平面镜像的容器仓库
+
@@ -92,7 +107,9 @@ Choose a container registry to pull control plane images from
+
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
@@ -107,7 +124,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
为控制平面选择特定的 Kubernetes 版本。
+
@@ -122,7 +141,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
为服务 VIP 选择 IP 地址范围。
+
@@ -136,8 +157,10 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
-
-服务使用其它的域名,例如:"myorg.internal"。
+
+
+为服务使用其它域名,例如:"myorg.internal"。
+
@@ -167,7 +190,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_kube-proxy.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_kube-proxy.md
index 4698ee4b32..ca63db2de4 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_kube-proxy.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_addon_kube-proxy.md
@@ -1,3 +1,18 @@
+
+
+
+将 kube-proxy 插件安装到 Kubernetes 集群
-API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将使用默认网络接口。
+API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将使用默认网络接口。
@@ -51,9 +66,9 @@ API 服务器所公布的其正在监听的 IP 地址。如果未设置,则将
-API 服务器绑定的端口。
+API 服务器绑定的端口。
@@ -63,9 +78,9 @@ API 服务器绑定的端口。
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -75,9 +90,9 @@ kubeadm 配置文件的路径。
-为控制平面指定一个稳定的 IP 地址或 DNS 名称。
+为控制平面指定一个稳定的 IP 地址或 DNS 名称。
@@ -87,9 +102,9 @@ Specify a stable IP address or DNS name for the control plane.
-kube-proxy 操作的帮助命令
+kube-proxy 操作的帮助命令
@@ -104,9 +119,9 @@ kube-proxy 操作的帮助命令
-选择用于拉取控制平面镜像的容器仓库
+选择用于拉取控制平面镜像的容器仓库
@@ -121,9 +136,9 @@ Choose a container registry to pull control plane images from
-与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
@@ -138,9 +153,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
-为控制平面选择特定的 Kubernetes 版本。
+为控制平面选择特定的 Kubernetes 版本。
@@ -150,9 +165,9 @@ Choose a specific Kubernetes version for the control plane.
-指定 Pod 网络的 IP 地址范围。如果已设置,控制平面将自动为每个节点分配 CIDR。
+指定 Pod 网络的 IP 地址范围。如果已设置,控制平面将自动为每个节点分配 CIDR。
@@ -178,9 +193,9 @@ Specify range of IP addresses for the pod network. If set, the control plane wil
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_bootstrap-token.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_bootstrap-token.md
index 2ea181aac1..5c77af3735 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_bootstrap-token.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_bootstrap-token.md
@@ -1,3 +1,18 @@
+
+
+
+生成用于将节点加入集群的引导令牌
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -67,9 +82,9 @@ kubeadm 配置文件的路径。
-bootstrap-token 操作的帮助命令
+bootstrap-token 操作的帮助命令
@@ -84,9 +99,9 @@ bootstrap-token 操作的帮助命令
-用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
+用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
@@ -96,9 +111,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
-跳过打印 'kubeadm init' 生成的默认引导令牌。
+跳过打印 'kubeadm init' 生成的默认引导令牌。
@@ -124,9 +139,9 @@ Skip printing of the default bootstrap token generated by 'kubeadm init'.
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs.md
index 55ed922514..b916704f79 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs.md
@@ -1,3 +1,18 @@
+
+
+
+证书生成
+
certs 操作的帮助命令
+
@@ -64,7 +81,9 @@ certs 操作的帮助命令
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_all.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_all.md
index f56cec6086..38a7fb842d 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_all.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_all.md
@@ -1,3 +1,18 @@
+
+
+
+生成所有证书
-
生成所有证书
```
@@ -34,21 +48,21 @@ kubeadm init phase certs all [flags]
-API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认网络接口。
+API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认网络接口。
---apiserver-cert-extra-sans stringSlice
+--apiserver-cert-extra-sans strings
-用于 API 服务器服务证书的可选额外替代名称(SAN)。可以同时使用 IP 地址和 DNS 名称。
+用于 API 服务器服务证书的可选额外替代名称(SAN)。可以同时使用 IP 地址和 DNS 名称。
@@ -63,9 +77,9 @@ Optional extra Subject Alternative Names (SANs) to use for the API Server servin
-证书的存储路径。
+证书的存储路径。
@@ -75,9 +89,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -87,9 +101,9 @@ kubeadm 配置文件的路径。
-为控制平面指定一个稳定的 IP 地址或 DNS 名称。
+为控制平面指定一个稳定的 IP 地址或 DNS 名称。
@@ -99,9 +113,9 @@ Specify a stable IP address or DNS name for the control plane.
-all 操作的帮助命令
+all 操作的帮助命令
@@ -116,9 +130,9 @@ all 操作的帮助命令
-为控制平面选择特定的 Kubernetes 版本。
+为控制平面选择特定的 Kubernetes 版本。
@@ -133,9 +147,9 @@ Choose a specific Kubernetes version for the control plane.
-VIP 服务使用其它的 IP 地址范围。
+VIP 服务使用其它的 IP 地址范围。
@@ -150,9 +164,9 @@ VIP 服务使用其它的 IP 地址范围。
-服务使用其它的域名,例如:"myorg.internal"。
+服务使用其它的域名,例如:"myorg.internal"。
@@ -178,9 +192,9 @@ Use alternative domain for services, e.g. "myorg.internal".
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-etcd-client.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-etcd-client.md
index 00444ac3f4..d3035731f4 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-etcd-client.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-etcd-client.md
@@ -1,3 +1,18 @@
+
+
+
+生成 apiserver 用来访问 etcd 的证书
-生成 apiserver 用于访问 etcd 的证书,并将其保存到 apiserver-etcd-client.cert 和 apiserver-etcd-client.key 文件中。
+生成 apiserver 用于访问 etcd 的证书,并将其保存到 apiserver-etcd-client.crt 和 apiserver-etcd-client.key 文件中。
-证书的存储路径。
+
+证书的存储路径。
@@ -60,8 +77,10 @@ kubeadm init phase certs apiserver-etcd-client [flags]
-
-kubeadm 配置文件的路径。
+
+kubeadm 配置文件的路径。
@@ -70,8 +89,10 @@ kubeadm 配置文件的路径。
-
-apiserver-etcd-client 操作的帮助命令
+
+apiserver-etcd-client 操作的帮助命令
@@ -84,9 +105,9 @@ apiserver-etcd-client 操作的帮助命令
-为控制平面指定特定的 Kubernetes 版本。
+为控制平面指定特定的 Kubernetes 版本。
@@ -111,8 +132,10 @@ Choose a specific Kubernetes version for the control plane.
-
-[实验] 到 '真实' 主机根文件系统的路径。
+
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-kubelet-client.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-kubelet-client.md
index 49b2749c06..696f564c6a 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-kubelet-client.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver-kubelet-client.md
@@ -1,3 +1,18 @@
+
+
+
+生成供 API 服务器连接 kubelet 的证书
-
-生成供 API 服务器连接 kubelet 的证书,并将其保存到 apiserver-kubelet-client.cert 和 apiserver-kubelet-client.key 文件中。
+生成供 API 服务器连接 kubelet 的证书,并将其保存到 apiserver-kubelet-client.crt 和 apiserver-kubelet-client.key 文件中。
-存储证书的路径。
+存储证书的路径。
@@ -63,9 +77,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件路径。
+kubeadm 配置文件路径。
@@ -75,9 +89,9 @@ kubeadm 配置文件路径。
-apiserver-kubelet-client 操作的帮助命令
+apiserver-kubelet-client 操作的帮助命令
@@ -92,9 +106,9 @@ apiserver-kubelet-client 操作的帮助命令
-为控制平面指定特定的 Kubernetes 版本。
+为控制平面指定特定的 Kubernetes 版本。
@@ -120,9 +134,9 @@ Choose a specific Kubernetes version for the control plane.
-[实验] 指向宿主机上的 '实际' 根文件系统的路径。
+[实验] 指向宿主机上的 '实际' 根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver.md
index 1b096a7424..84a86e32d3 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_apiserver.md
@@ -1,3 +1,18 @@
+
+
+
+生成用于服务 Kubernetes API 的证书
+生成用于服务 Kubernetes API 的证书,并将其保存到 apiserver.crt 和 apiserver.key 文件中。
-生成用于服务 Kubernetes API 的证书,并将其保存到 apiserver.cert 和 apiserver.key 文件中。
-
-
-
-默认 SAN 是 kubernetes、kubernetes.default、kubernetes.default.svc、kubernetes.default.svc.cluster.local、10.96.0.1、127.0.0.1。
-API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
+API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
---apiserver-cert-extra-sans stringSlice
+--apiserver-cert-extra-sans strings
-用于 API Server 服务证书的可选附加主体备用名称(SAN)。可以是 IP 地址和 DNS 名称。
+用于 API Server 服务证书的可选附加主体备用名称(SAN)。可以是 IP 地址和 DNS 名称。
@@ -81,9 +90,9 @@ Optional extra Subject Alternative Names (SANs) to use for the API Server servin
-证书的存储路径。
+证书的存储路径。
@@ -93,9 +102,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -105,9 +114,9 @@ kubeadm 配置文件的路径。
-为控制平面指定一个稳定的 IP 地址或 DNS 名称。
+为控制平面指定一个稳定的 IP 地址或 DNS 名称。
@@ -117,9 +126,9 @@ Specify a stable IP address or DNS name for the control plane.
-apiserver 操作的帮助命令
+apiserver 操作的帮助命令
@@ -134,9 +143,9 @@ apiserver 操作的帮助命令
-为控制平面指定特定的 Kubernetes 版本。
+为控制平面指定特定的 Kubernetes 版本。
@@ -151,9 +160,9 @@ Choose a specific Kubernetes version for the control plane.
-指定服务 VIP 可使用的其他 IP 地址段。
+指定服务 VIP 可使用的其他 IP 地址段。
@@ -168,9 +177,9 @@ Use alternative range of IP address for service VIPs.
-为服务使用其他域名,例如 "myorg.internal"。
+为服务使用其他域名,例如 "myorg.internal"。
@@ -196,9 +205,9 @@ Use alternative domain for services, e.g. "myorg.internal".
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_ca.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_ca.md
index 3b24c3d0b4..71a091342a 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_ca.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_ca.md
@@ -1,3 +1,18 @@
+
+
+
+生成自签名的 Kubernetes CA 以便为其他 Kubernetes 组件提供身份标识
-
-生成自签名的 Kubernetes CA 以提供其他 Kubernetes 组件的身份,并将其保存到 ca.cert 和 ca.key 文件中。
+生成自签名的 Kubernetes CA 以便为其他 Kubernetes 组件提供身份标识,并将其保存到 ca.crt 和 ca.key 文件中。
-
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
-
Alpha 免责声明:此命令当前为 Alpha 功能。
```
@@ -51,9 +63,9 @@ kubeadm init phase certs ca [flags]
-证书的存储路径。
+证书的存储路径。
@@ -63,9 +75,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -75,9 +87,9 @@ kubeadm 配置文件的路径。
-ca 操作的帮助命令
+ca 操作的帮助命令
@@ -92,9 +104,9 @@ ca 操作的帮助命令
-为控制平面选择特定的 Kubernetes 版本。
+为控制平面选择特定的 Kubernetes 版本。
@@ -120,9 +132,9 @@ Choose a specific Kubernetes version for the control plane.
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-ca.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-ca.md
index b5d159496c..319e415cb0 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-ca.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-ca.md
@@ -1,3 +1,18 @@
+
+
+
+生成用于为 etcd 设置身份的自签名 CA
-生成用于为 etcd 设置身份的自签名 CA,并将其保存到 etcd/ca.cert 和 etcd/ca.key 文件中。
+生成用于为 etcd 设置身份的自签名 CA,并将其保存到 etcd/ca.crt 和 etcd/ca.key 文件中。
+
证书的存储路径。
+
@@ -65,7 +82,9 @@ The path where to save and store the certificates.
+
kubeadm 配置文件的路径。
+
@@ -77,7 +96,9 @@ kubeadm 配置文件的路径。
+
etcd-ca 操作的帮助命令
+
@@ -94,7 +115,9 @@ etcd-ca 操作的帮助命令
+
为控制平面选择特定的 Kubernetes 版本。
+
@@ -122,10 +145,11 @@ Choose a specific Kubernetes version for the control plane.
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-healthcheck-client.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-healthcheck-client.md
index 706d70614e..804dc02f75 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-healthcheck-client.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-healthcheck-client.md
@@ -1,3 +1,19 @@
+
+
+
+
+生成用于 etcd 健康检查的活跃性探针的证书
-
-生成用于 etcd 健康检查的活跃性探针的证书,并将其保存到 healthcheck-client.cert 和 etcd/healthcheck-client.key 文件中。
+生成用于 etcd 健康检查的活跃性探针的证书,并将其保存到 etcd/healthcheck-client.crt 和 etcd/healthcheck-client.key 文件中。
-
如果两个文件都已存在,则 kubeadm 将跳过生成步骤,使用现有文件。
-
Alpha 免责声明:此命令当前为 alpha 功能。
```
@@ -51,9 +64,9 @@ kubeadm init phase certs etcd-healthcheck-client [flags]
-证书存储的路径。
+证书存储的路径。
@@ -63,9 +76,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -75,9 +88,9 @@ kubeadm 配置文件的路径。
-etcd-healthcheck-client 操作的帮助命令
+etcd-healthcheck-client 操作的帮助命令
@@ -92,9 +105,9 @@ etcd-healthcheck-client 操作的帮助命令
-为控制平面选择特定的 Kubernetes 版本。
+为控制平面选择特定的 Kubernetes 版本。
@@ -120,9 +133,9 @@ Choose a specific Kubernetes version for the control plane.
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-peer.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-peer.md
index 9933975b92..4a4ec4fd19 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-peer.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-peer.md
@@ -1,3 +1,18 @@
+
+
+
+生成 etcd 节点相互通信的证书
-生成 etcd 节点相互通信的证书,并将其保存到 etcd/peer.cert 和 etcd/peer.key 文件中。
+生成 etcd 节点相互通信的证书,并将其保存到 etcd/peer.crt 和 etcd/peer.key 文件中。
-保存和存储证书的路径。
+
+保存和存储证书的路径。
@@ -66,8 +83,10 @@ kubeadm init phase certs etcd-peer [flags]
-
-kubeadm 配置文件的路径。
+
+kubeadm 配置文件的路径。
@@ -76,8 +95,10 @@ kubeadm 配置文件的路径。
-
-etcd-peer 操作的帮助命令
+
+etcd-peer 操作的帮助命令
@@ -91,8 +112,10 @@ etcd-peer 操作的帮助命令
-
-为控制平面指定特定的 Kubernetes 版本。
+
+为控制平面指定特定的 Kubernetes 版本。
@@ -118,9 +141,9 @@ etcd-peer 操作的帮助命令
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-server.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-server.md
index 0f5fb4726e..c669e2d0ee 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-server.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_etcd-server.md
@@ -6,9 +6,9 @@
-生成用于提供 etcd 服务的证书,并将其保存到 etcd/server.cert 和 etcd/server.key 文件中。
+生成用于提供 etcd 服务的证书,并将其保存到 etcd/server.crt 和 etcd/server.key 文件中。
-保存和存储证书的路径。
+保存和存储证书的路径。
@@ -64,9 +64,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -76,9 +76,9 @@ kubeadm 配置文件的路径。
-etcd-server 操作的帮助命令
+etcd-server 操作的帮助命令
@@ -93,9 +93,9 @@ etcd-server 操作的帮助命令
-为控制平面指定特定的 Kubernetes 版本。
+为控制平面指定特定的 Kubernetes 版本。
@@ -122,9 +122,9 @@ Choose a specific Kubernetes version for the control plane.
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-ca.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-ca.md
index 3baed70fba..94b30d7ca2 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-ca.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-ca.md
@@ -1,3 +1,18 @@
+
+
+
+生成自签名 CA 来提供前端代理的身份
-存储证书的路径。
+存储证书的路径。
@@ -63,9 +78,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -75,9 +90,9 @@ kubeadm 配置文件的路径。
-front-proxy-ca 操作的帮助命令
+front-proxy-ca 操作的帮助命令
@@ -92,9 +107,9 @@ front-proxy-ca 操作的帮助命令
-为控制平面选择特定的 Kubernetes 版本。
+为控制平面选择特定的 Kubernetes 版本。
@@ -120,9 +135,9 @@ Choose a specific Kubernetes version for the control plane.
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-client.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-client.md
index fb39d4a6cf..e2dba21e7e 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-client.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_front-proxy-client.md
@@ -1,3 +1,18 @@
+
+
+
+为前端代理客户端生成证书
-为前端代理客户端生成证书,并将其保存到 front-proxy-client.cert 和 front-proxy-client.key 文件中。
+为前端代理客户端生成证书,并将其保存到 front-proxy-client.crt 和 front-proxy-client.key 文件中。
如果两个文件都已存在,kubeadm 将跳过生成步骤并将使用现有文件。
Alpha 免责声明:此命令目前是 alpha 阶段。
@@ -42,9 +57,9 @@ kubeadm init phase certs front-proxy-client [flags]
-存储证书的路径。
+存储证书的路径。
@@ -54,9 +69,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -66,9 +81,9 @@ kubeadm 配置文件的路径。
-front-proxy-client 操作的帮助命令
+front-proxy-client 操作的帮助命令
@@ -83,9 +98,9 @@ front-proxy-client 操作的帮助命令
-为控制平面选择特定的 Kubernetes 版本。
+为控制平面选择特定的 Kubernetes 版本。
@@ -111,9 +126,9 @@ Choose a specific Kubernetes version for the control plane.
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_sa.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_sa.md
index 4b5cde8362..42ca96025d 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_sa.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_certs_sa.md
@@ -1,3 +1,19 @@
+
+
+
+
+生成用来签署服务账号令牌的私钥及其公钥
-
-生成用于签名 service account 令牌的私钥及其公钥,并将其保存到 sa.key 和 sa.pub 文件中。如果两个文件都已存在,则 kubeadm 会跳过生成步骤,而将使用现有文件。
+生成用来签署服务账号令牌的私钥及其公钥,并将其保存到 sa.key 和 sa.pub 文件中。
+如果两个文件都已存在,则 kubeadm 会跳过生成步骤,而将使用现有文件。
-
Alpha 免责声明:此命令当前为 alpha 阶段。
```
kubeadm init phase certs sa [flags]
```
-
+
### 选项
@@ -45,7 +62,9 @@ kubeadm init phase certs sa [flags]
+
保存和存储证书的路径。
+
@@ -57,7 +76,9 @@ The path where to save and store the certificates.
+
sa 操作的帮助命令
+
@@ -67,7 +88,6 @@ sa 操作的帮助命令
-
### 继承于父命令的选项
@@ -85,10 +105,11 @@ sa 操作的帮助命令
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane.md
index 61320596e6..683327985a 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane.md
@@ -1,3 +1,18 @@
+
+
+
+生成建立控制平面所需的静态 Pod 清单文件
-control-plane 操作的帮助命令
+
+control-plane 操作的帮助命令
@@ -59,8 +76,10 @@ control-plane 操作的帮助命令
-
-[实验] 到 '真实' 主机根文件系统的路径。
+
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md
index c4eb30e987..437f1e68cc 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_all.md
@@ -1,3 +1,7 @@
+
+生成所有静态 Pod 清单文件
+
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认的网络接口。
+
@@ -66,20 +72,24 @@ API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使
+
API 服务器要绑定的端口。
+
---apiserver-extra-args mapStringString
+--apiserver-extra-args <逗号分割的 'key=value' 对>
+
形式为 <flagname>=<value> 的一组额外参数,用来传递给 API 服务器,
或者覆盖其默认配置值
+
@@ -96,7 +106,9 @@ A set of extra flags to pass to the API Server or override default ones in form
+
存储证书的路径。
+
@@ -108,7 +120,9 @@ The path where to save and store the certificates.
+
kubeadm 配置文件的路径。
+
@@ -120,37 +134,36 @@ kubeadm 配置文件的路径。
+
为控制平面选择一个稳定的 IP 地址或者 DNS 名称。
+
---controller-manager-extra-args mapStringString
+--controller-manager-extra-args <逗号分割的 'key=value' 对>
+
一组形式为 <flagname>=<value> 的额外参数,用来传递给控制管理器(Controller Manager)
或覆盖其默认设置值
+
---experimental-patches string
+--dry-run
-包含名为 "target[suffix][+patchtype].extension" 的文件的目录。
-例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。
-"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl
-所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。
-"extension" 必须是 "json" 或 "yaml"。
-"suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
+不要应用任何变更;只是输出将要执行的操作。
@@ -160,11 +173,14 @@ Path to a directory that contains files named "target[suffix][+patchtype].extens
+
一组用来描述各种特性门控的键值(key=value)对。选项是:
- IPv6DualStack=true|false (ALPHA - 默认=false)
- PublicKeysECDSA=true|false (ALPHA - 默认=false)
+ PublicKeysECDSA=true|false (ALPHA - 默认值=false)
+ RootlessControlPlane=true|false (ALPHA - 默认值=false)
+ UnversionedKubeletConfigMap=true|false (BETA - 默认值=true)
+
@@ -176,7 +192,9 @@ A set of key=value pairs that describe feature gates for various features. Optio
+
all 操作的帮助命令
+
@@ -193,7 +211,9 @@ all 操作的帮助命令
+
选择用于拉取控制平面镜像的容器仓库
+
@@ -210,7 +230,30 @@ Choose a container registry to pull control plane images from
+
为控制平面选择指定的 Kubernetes 版本。
+
+
+
+
+
+--patches string
+
+
+
+
+
+包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
+例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。
+"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd" 之一。
+"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
+并且它们与 kubectl 支持的补丁格式相同。
+默认的 "patchtype" 是 "strategic"。
+"extension" 必须是"json" 或"yaml"。
+"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+
@@ -222,22 +265,26 @@ Choose a specific Kubernetes version for the control plane.
+
指定 Pod 网络的 IP 地址范围。如果设置了此标志,控制平面将自动地为每个节点分配 CIDR。
+
---scheduler-extra-args mapStringString
+--scheduler-extra-args <逗号分割的 'key=value' 对>
+
一组形式为 <flagname>=<value> 的额外参数,用来传递给调度器(Scheduler)
或覆盖其默认设置值
传递给调度器(scheduler)一组额外的参数或者以 <flagname>=<value> 形式覆盖其默认值。
+
@@ -254,7 +301,9 @@ A set of extra flags to pass to the Scheduler or override default ones in form o
+
为服务 VIP 选择 IP 地址范围。
+
@@ -281,7 +330,9 @@ Use alternative range of IP address for service VIPs.
+
[实验] 指向 '真实' 宿主机的根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md
index 39d9316717..4b3c97d923 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_apiserver.md
@@ -1,3 +1,8 @@
+
+生成 kube-apiserver 静态 Pod 清单
+
@@ -32,7 +37,9 @@ kubeadm init phase control-plane apiserver [flags]
+
API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使用默认网络接口。
+
@@ -49,20 +56,24 @@ API 服务器所公布的其正在监听的 IP 地址。如果未设置,将使
+
要绑定到 API 服务器的端口。
+
---apiserver-extra-args mapStringString
+--apiserver-extra-args <逗号分隔的 'key=value' 对>
+
一组 <flagname>=<value> 形式的额外参数,用来传递给 API 服务器
或者覆盖其默认参数配置
+
@@ -79,7 +90,9 @@ A set of extra flags to pass to the API Server or override default ones in form
+
保存和存储证书的路径。
+
@@ -91,7 +104,9 @@ The path where to save and store the certificates.
+
kubeadm 配置文件的路径。
+
@@ -103,21 +118,24 @@ kubeadm 配置文件的路径。
+
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
+
-
+
+--dry-run
+
-
-包含名为 "target[suffix][+patchtype].extension" 的文件的目录。
-例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。
-"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl
-所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。
-"extension" 必须是 "json" 或 "yaml"。
-"suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
+
+
+不要应用任何更改;只是输出将要执行的操作。
+
-
+
--feature-gates string
@@ -125,11 +143,14 @@ Specify a stable IP address or DNS name for the control plane.
+
一组键值对,用于描述各种功能特性的特性门控。选项是:
- IPv6DualStack=true|false (ALPHA - 默认=false)
- PublicKeysECDSA=true|false (ALPHA - 默认=false)
+ PublicKeysECDSA=true|false (ALPHA - 默认值=false)
+ RootlessControlPlane=true|false (ALPHA - 默认值=false)
+ UnversionedKubeletConfigMap=true|false (BETA - 默认值=true)
+
@@ -141,7 +162,9 @@ A set of key=value pairs that describe feature gates for various features. Optio
+
apiserver 操作的帮助命令
+
@@ -158,7 +181,9 @@ apiserver 操作的帮助命令
+
选择要从中拉取控制平面镜像的容器仓库
+
@@ -175,7 +200,30 @@ Choose a container registry to pull control plane images from
+
为控制平面选择特定的 Kubernetes 版本
+
+
+
+
+
+--patches string
+
+
+
+
+
+包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
+例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。
+"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd" 之一。
+"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
+并且它们与 kubectl 支持的补丁格式相同。
+默认的 "patchtype" 是 "strategic"。
+"extension" 必须是"json" 或"yaml"。
+"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+
@@ -192,7 +240,9 @@ Choose a specific Kubernetes version for the control plane.
+
指定服务 VIP 使用 IP 地址的其他范围。
+
@@ -221,7 +271,9 @@ Use alternative range of IP address for service VIPs.
+
[实验] 到 '真实' 主机根文件系统路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_controller-manager.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_controller-manager.md
index d35b86f363..ed54d6d8e5 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_controller-manager.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_controller-manager.md
@@ -1,3 +1,18 @@
+
+
+
+生成 kube-controller-manager 静态 Pod 清单
-存储证书的路径。
+存储证书的路径。
@@ -44,35 +59,35 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
---controller-manager-extra-args mapStringString
+--controller-manager-extra-args <comma-separated 'key=value' pairs>
-一组 <flagname>=< 形式的额外参数,传递给控制器管理器(Controller Manager)
-或者覆盖其默认配置值
+一组 <flagname>=< 形式的额外参数,传递给控制器管理器(Controller Manager)
+或者覆盖其默认配置值
-
-
-包含名为 "target[suffix][+patchtype].extension" 的文件的目录。
-例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。
-"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl
-所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。
-"extension" 必须是 "json" 或 "yaml"。
-"suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
-
+--dry-run
+
+
+
+
+不应用任何变更,仅输出将要执行的操作
+
@@ -81,9 +96,9 @@ A set of extra flags to pass to the Controller Manager or override default ones
-controller-manager 操作的帮助命令
+controller-manager 操作的帮助命令
@@ -98,9 +113,9 @@ controller-manager 操作的帮助命令
-选择要从中拉取控制平面镜像的容器仓库
+选择要从中拉取控制平面镜像的容器仓库
@@ -115,9 +130,26 @@ Choose a container registry to pull control plane images from
-为控制平面选择特定的 Kubernetes 版本。
+为控制平面选择特定的 Kubernetes 版本。
+
+
+
+
+--patches string
+
+
+
+
+包含名为 "target[suffix][+patchtype].extension" 的文件的目录。
+例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。
+"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl
+所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。
+"extension" 必须是 "json" 或 "yaml"。
+"suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
@@ -127,9 +159,9 @@ Choose a specific Kubernetes version for the control plane.
-指定 Pod 网络的 IP 地址范围。如果设置,控制平面将自动为每个节点分配 CIDR。
+指定 Pod 网络的 IP 地址范围。如果设置,控制平面将自动为每个节点分配 CIDR。
@@ -154,9 +186,9 @@ Specify range of IP addresses for the pod network. If set, the control plane wil
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_scheduler.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_scheduler.md
index ce801ff399..3b10963776 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_scheduler.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_control-plane_scheduler.md
@@ -1,3 +1,18 @@
+
+
+
+生成 kube-scheduler 静态 Pod 清单
-存储证书的路径。
+存储证书的路径。
@@ -48,25 +63,21 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
---experimental-patches string
+--dry-run
-
-
-包含名为 "target[suffix][+patchtype].extension" 的文件的目录。
-例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。
-"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl
-所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。
-"extension" 必须是 "json" 或 "yaml"。
-"suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
+
+不应用任何变更;仅仅输出将会变更的内容
@@ -76,9 +87,9 @@ kubeadm 配置文件的路径。
-scheduler 操作的帮助命令
+scheduler 操作的帮助命令
@@ -93,9 +104,9 @@ scheduler 操作的帮助命令
-选择要从中拉取控制平面镜像的容器仓库
+选择要从中拉取控制平面镜像的容器仓库
@@ -110,22 +121,42 @@ Choose a container registry to pull control plane images from
-为控制平面选择特定的 Kubernetes 版本。
+为控制平面选择特定的 Kubernetes 版本。
---scheduler-extra-args mapStringString
+--patches string
+
+
+
+
+包含名为 "target[suffix][+patchtype].extension" 的文件的目录。
+例如,"kube-apiserver0+merge.yaml" 或者 "etcd.json"。
+"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,分别与 kubectl
+所支持的 patch 格式相匹配。默认的 "patchtype" 是 "strategic"。
+"extension" 必须是 "json" 或 "yaml"。
+"suffix" 是一个可选的字符串,用来确定按字母顺序排序时首先应用哪些 patch。
+
+
+
+
+
+
+--scheduler-extra-args <逗号分隔的 'key=value' 键值对>
+
-一组 <flagname>=<value> 形式的额外参数,用来传递给调度器
-或者覆盖其默认参数配置
+一组 <flagname>=<value> 形式的额外参数,用来传递给调度器
+或者覆盖其默认参数配置
@@ -150,9 +181,9 @@ A set of extra flags to pass to the Scheduler or override default ones in form o
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_etcd.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_etcd.md
index 6091ee177d..38b30b3491 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_etcd.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_etcd.md
@@ -1,3 +1,19 @@
+
+
+
+
+为本地 etcd 生成静态 Pod 的清单文件
etcd 操作的帮助命令
+
@@ -59,10 +77,12 @@ etcd 操作的帮助命令
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_etcd_local.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_etcd_local.md
index 0a09b80c86..e046168998 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_etcd_local.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_etcd_local.md
@@ -1,3 +1,18 @@
+
+
+
+为本地单节点 etcd 实例生成静态 Pod 清单文件
-存储证书的路径。
+
+存储证书的路径。
@@ -69,24 +86,10 @@ kubeadm init phase etcd local --config config.yaml
-
-kubeadm 配置文件的路径。
-
-
-
-
---experimental-patches string
-
-
-
-
-包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
-例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
-"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
-默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
-"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+kubeadm 配置文件的路径。
@@ -95,8 +98,10 @@ Path to a directory that contains files named "target[suffix][+patchtype].extens
-
-local 操作的帮助命令
+
+local 操作的帮助命令
@@ -110,8 +115,26 @@ local 操作的帮助命令
-
-选择要从中拉取控制平面镜像的容器仓库
+
+选择要从中拉取控制平面镜像的容器仓库
+
+
+
+
+--patches string
+
+
+
+
+包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
+例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
+"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
+默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
+"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
@@ -136,8 +159,10 @@ local 操作的帮助命令
-
-[实验] 到 '真实' 主机根文件系统的路径。
+
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig.md
index 0a5eaf2f99..753f6fd0bd 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig.md
@@ -1,3 +1,18 @@
+
+
+
+生成所有建立控制平面和管理员(admin)所需的 kubeconfig 文件
-kubeconfig 操作的帮助命令
+kubeconfig 操作的帮助命令
@@ -62,9 +77,9 @@ kubeconfig 操作的帮助命令
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_admin.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_admin.md
index 2384f2f9c0..2521e85e9f 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_admin.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_admin.md
@@ -1,3 +1,18 @@
+
+
+
+为管理员(admin)和 kubeadm 本身生成 kubeconfig 文件
-API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
+API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
@@ -51,9 +66,9 @@ API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使
-要绑定到 API 服务器的端口。
+要绑定到 API 服务器的端口。
@@ -68,9 +83,9 @@ Port for the API Server to bind to.
-保存和存储证书的路径。
+保存和存储证书的路径。
@@ -80,9 +95,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -92,9 +107,9 @@ kubeadm 配置文件的路径。
-为控制平面指定一个稳定的 IP 地址或 DNS 名称。
+为控制平面指定一个稳定的 IP 地址或 DNS 名称。
@@ -104,9 +119,9 @@ Specify a stable IP address or DNS name for the control plane.
-admin 操作的帮助命令
+admin 操作的帮助命令
@@ -121,9 +136,9 @@ admin 操作的帮助命令
-kubeconfig 文件的保存路径。
+kubeconfig 文件的保存路径。
@@ -138,9 +153,9 @@ kubeconfig 文件的保存路径。
-为控制平面指定特定的 Kubernetes 版本。
+为控制平面指定特定的 Kubernetes 版本。
@@ -166,9 +181,9 @@ Choose a specific Kubernetes version for the control plane.
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_all.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_all.md
index b1d34aca1e..72ef16dbd9 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_all.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_all.md
@@ -1,3 +1,18 @@
+
+
+
+生成所有 kubeconfig 文件
-
生成所有 kubeconfig 文件
```
@@ -36,7 +50,9 @@ kubeadm init phase kubeconfig all [flags]
+
API 服务器所公布的其正在监听的 IP 地址。如果没有设置,将使用默认的网络接口。
+
@@ -53,7 +69,9 @@ API 服务器所公布的其正在监听的 IP 地址。如果没有设置,将
+
要绑定到 API 服务器的端口。
+
@@ -70,7 +88,9 @@ Port for the API Server to bind to.
+
保存和存储证书的路径。
+
@@ -82,7 +102,9 @@ The path where to save and store the certificates.
+
kubeadm 配置文件的路径。
+
@@ -94,7 +116,9 @@ kubeadm 配置文件的路径。
+
为控制平面指定一个稳定的 IP 地址或 DNS 名称。
+
@@ -106,7 +130,9 @@ Specify a stable IP address or DNS name for the control plane.
+
all 操作的帮助命令
+
@@ -123,7 +149,9 @@ all 操作的帮助命令
+
kubeconfig 文件的保存路径。
+
@@ -140,7 +168,9 @@ kubeconfig 文件的保存路径。
+
为控制平面指定特定的 Kubernetes 版本。
+
@@ -152,7 +182,9 @@ Choose a specific Kubernetes version for the control plane.
+
指定节点名称。
+
@@ -162,7 +194,6 @@ Specify the node name.
-
### 继承于父命令的选项
@@ -180,10 +211,11 @@ Specify the node name.
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_controller-manager.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_controller-manager.md
index 0ba7a636c3..a5c2db1235 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_controller-manager.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_controller-manager.md
@@ -1,3 +1,18 @@
+
+
+
+生成控制器管理器要使用的 kubeconfig 文件
-API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
+API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
@@ -51,9 +66,9 @@ API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使
-要绑定到 API 服务器的端口。
+要绑定到 API 服务器的端口。
@@ -68,9 +83,9 @@ Port for the API Server to bind to.
-保存和存储证书的路径。
+保存和存储证书的路径。
@@ -80,9 +95,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -92,9 +107,9 @@ kubeadm 配置文件的路径。
-为控制平面指定一个稳定的 IP 地址或 DNS 名称。
+为控制平面指定一个稳定的 IP 地址或 DNS 名称。
@@ -104,9 +119,9 @@ Specify a stable IP address or DNS name for the control plane.
-controller-manager 操作的帮助命令
+controller-manager 操作的帮助命令
@@ -121,9 +136,9 @@ controller-manager 操作的帮助命令
-kubeconfig 文件的保存路径。
+kubeconfig 文件的保存路径。
@@ -138,9 +153,9 @@ kubeconfig 文件的保存路径。
-为控制平面指定特定的 Kubernetes 版本。
+为控制平面指定特定的 Kubernetes 版本。
@@ -165,9 +180,9 @@ Choose a specific Kubernetes version for the control plane.
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_kubelet.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_kubelet.md
index b95587803d..ae4dc9bddb 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_kubelet.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_kubelet.md
@@ -1,3 +1,18 @@
+
+
+
+为 kubelet 生成一个 kubeconfig 文件,*仅仅*用于集群引导目的
-API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
+API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
@@ -56,9 +71,9 @@ API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使
-要绑定到 API 服务器的端口。
+要绑定到 API 服务器的端口。
@@ -73,9 +88,9 @@ Port for the API Server to bind to.
-保存和存储证书的路径。
+保存和存储证书的路径。
@@ -85,9 +100,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -97,9 +112,9 @@ kubeadm 配置文件的路径。
-为控制平面指定一个稳定的 IP 地址或 DNS 名称。
+为控制平面指定一个稳定的 IP 地址或 DNS 名称。
@@ -109,9 +124,9 @@ Specify a stable IP address or DNS name for the control plane.
-kubelet 操作的帮助命令
+kubelet 操作的帮助命令
@@ -126,9 +141,9 @@ kubelet 操作的帮助命令
-kubeconfig 文件的保存路径。
+kubeconfig 文件的保存路径。
@@ -143,9 +158,9 @@ kubeconfig 文件的保存路径。
-为控制平面选择特定的 Kubernetes 版本。
+为控制平面选择特定的 Kubernetes 版本。
@@ -155,9 +170,9 @@ Choose a specific Kubernetes version for the control plane.
-指定节点的名称。
+指定节点的名称。
@@ -183,9 +198,9 @@ Specify the node name.
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_scheduler.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_scheduler.md
index 452247b6de..38d951e51a 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_scheduler.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubeconfig_scheduler.md
@@ -1,3 +1,18 @@
+
+
+
+生成调度器使用的 kubeconfig 文件
-API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
+API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认的网络接口。
@@ -51,9 +66,9 @@ API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使
-要绑定到 API 服务器的端口。
+要绑定到 API 服务器的端口。
@@ -68,9 +83,9 @@ Port for the API Server to bind to.
-保存和存储证书的路径。
+保存和存储证书的路径。
@@ -80,9 +95,9 @@ The path where to save and store the certificates.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -92,9 +107,9 @@ kubeadm 配置文件的路径。
-为控制平面指定一个稳定的 IP 地址或 DNS 名称。
+为控制平面指定一个稳定的 IP 地址或 DNS 名称。
@@ -104,9 +119,9 @@ Specify a stable IP address or DNS name for the control plane.
-scheduler 操作的帮助命令
+scheduler 操作的帮助命令
@@ -121,9 +136,9 @@ scheduler 操作的帮助命令
-kubeconfig 文件的保存路径。
+kubeconfig 文件的保存路径。
@@ -138,9 +153,9 @@ kubeconfig 文件的保存路径。
-为控制平面指定特定的 Kubernetes 版本。
+为控制平面指定特定的 Kubernetes 版本。
@@ -166,9 +181,9 @@ Choose a specific Kubernetes version for the control plane.
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize.md
index 644a8c604e..3b13b77dd5 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize.md
@@ -1,3 +1,18 @@
+
+
+
+TLS 引导后更新与 kubelet 相关的设置
### 概要
@@ -37,8 +52,8 @@ kubeadm init phase kubelet-finalize [flags]
-h, --help
-
-kubelet-finalize 操作的帮助命令
+
+kubelet-finalize 操作的帮助命令
@@ -60,8 +75,8 @@ kubeadm init phase kubelet-finalize [flags]
--rootfs string
-
-[实验] 到'真实'主机根文件系统的路径。
+
+[实验] 到'真实'主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize_all.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize_all.md
index d99d6036a1..71bc1e0d89 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize_all.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize_all.md
@@ -1,10 +1,27 @@
+
+
+
+运行 kubelet-finalize 的所有阶段
### 概要
-
-运行所有 kubelet-finalize 阶段
+
+运行 kubelet-finalize 的所有阶段
```
kubeadm init phase kubelet-finalize all [flags]
@@ -40,7 +57,7 @@ kubeadm init phase kubelet-finalize all [flags]
-保存和存储证书的路径。
+保存和存储证书的路径。
@@ -48,7 +65,7 @@ kubeadm init phase kubelet-finalize all [flags]
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -56,7 +73,7 @@ kubeadm init phase kubelet-finalize all [flags]
-all 操作的帮助命令
+all 操作的帮助命令
@@ -79,11 +96,8 @@ kubeadm init phase kubelet-finalize all [flags]
-[实验] 到'真实'主机根文件系统的路径。
+[实验] 到'真实'主机根文件系统的路径。
-
-
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize_experimental-cert-rotation.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize_experimental-cert-rotation.md
index 77517935ca..ef3c0ae99a 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize_experimental-cert-rotation.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-finalize_experimental-cert-rotation.md
@@ -1,9 +1,22 @@
+
+
+
+启用 kubelet 客户端证书轮换
### 概要
-
-
启用 kubelet 客户端证书轮换
@@ -25,24 +38,24 @@ kubeadm init phase kubelet-finalize experimental-cert-rotation [flags]
--cert-dir string Default: "/etc/kubernetes/pki"
-
-保存和存储证书的路径。
+
+保存和存储证书的路径。
--config string
-
-kubeadm 配置文件的路径。
+
+kubeadm 配置文件的路径。
-h, --help
-
-experimental-cert-rotation 操作的帮助命令
+
+experimental-cert-rotation 操作的帮助命令
@@ -64,8 +77,8 @@ kubeadm init phase kubelet-finalize experimental-cert-rotation [flags]
--rootfs string
-
-[实验] 到'真实'主机根文件系统的路径。
+
+[实验] 到'真实'主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-start.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-start.md
index 2e1e2a8dae..2067c9711e 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-start.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_kubelet-start.md
@@ -1,3 +1,19 @@
+
+
+
+
+编写 kubelet 配置并(重新)启动 kubelet
+
kubeadm 配置文件的路径。
+
@@ -63,7 +81,9 @@ kubeadm 配置文件的路径。
+
连接到 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测该值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
+
@@ -75,7 +95,9 @@ Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this
+
kubelet-start 操作的帮助命令
+
@@ -87,7 +109,9 @@ kubelet-start 操作的帮助命令
+
指定节点名称。
+
@@ -115,10 +139,11 @@ Specify the node name.
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_mark-control-plane.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_mark-control-plane.md
index 25cd3de7f7..0ddec0c498 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_mark-control-plane.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_mark-control-plane.md
@@ -1,3 +1,18 @@
+
+
+
+标记节点为控制平面节点
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -63,9 +78,9 @@ kubeadm 配置文件的路径。
-mark-control-plane 操作的帮助命令
+mark-control-plane 操作的帮助命令
@@ -75,9 +90,9 @@ mark-control-plane 操作的帮助命令
-指定节点名称。
+指定节点名称。
@@ -103,9 +118,9 @@ Specify the node name.
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_preflight.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_preflight.md
index 55d36d7c85..d7c3d4225d 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_preflight.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_preflight.md
@@ -1,3 +1,18 @@
+
+
+
+运行启动检查
+
kubeadm 配置文件的路径。
+
@@ -63,19 +80,23 @@ kubeadm 配置文件的路径。
+
preflight 操作的帮助命令
+
---ignore-preflight-errors stringSlice
+--ignore-preflight-errors strings
+
错误将显示为警告的检查列表:例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
+
@@ -103,10 +124,11 @@ A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedU
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-certs.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-certs.md
index bf88802947..fc7b1e50ef 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-certs.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-certs.md
@@ -1,3 +1,18 @@
+
+
+
+将证书上传到 kubeadm-certs
+
用于加密 kubeadm-certs Secret 中的控制平面证书的密钥。
+
@@ -45,7 +62,9 @@ Key used to encrypt the control-plane certificates in the kubeadm-certs Secret.
+
kubeadm 配置文件的路径。
+
@@ -57,7 +76,9 @@ kubeadm 配置文件的路径。
+
upload-certs 操作的帮助命令
+
@@ -68,8 +89,10 @@ upload-certs 操作的帮助命令
+
用来与集群通信的 kubeconfig 文件。
如果此标志未设置,则可以在一组标准的位置搜索现有的 kubeconfig 文件。
+
@@ -81,7 +104,9 @@ upload-certs 操作的帮助命令
+
不要打印输出用于加密控制平面证书的密钥。
+
@@ -93,7 +118,9 @@ Don't print the key used to encrypt the control-plane certificates.
+
将控制平面证书上传到 kubeadm-certs Secret。
+
@@ -120,10 +147,11 @@ Upload control-plane certificates to the kubeadm-certs Secret.
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config.md
index dc424bd24e..0447fc428c 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config.md
@@ -1,3 +1,18 @@
+
+
+
+上传 kubeadm 和 kubelet 配置到 ConfigMap 中
-upload-config 操作的帮助命令
+upload-config 操作的帮助命令
@@ -62,9 +77,9 @@ upload-config 操作的帮助命令
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_all.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_all.md
index e994273193..350255ca98 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_all.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_all.md
@@ -1,3 +1,19 @@
+
+
+
+
+将所有配置上传到 ConfigMap
+
kubeadm 配置文件的路径。
+
@@ -47,9 +67,13 @@ kubeadm 配置文件的路径。
+
all 操作的帮助命令
+
@@ -58,15 +82,21 @@ all 操作的帮助命令
+
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
+
+
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
@@ -92,12 +122,15 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubeadm.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubeadm.md
index e6155a1d9f..14a4f268f9 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubeadm.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubeadm.md
@@ -1,4 +1,19 @@
+
+
+
+将 kubeadm ClusterConfiguration 上传到 ConfigMap
@@ -58,7 +73,9 @@ kubeadm init phase upload-config --config=myConfig.yaml
+
kubeadm 配置文件的路径。
+
@@ -70,7 +87,9 @@ kubeadm 配置文件的路径。
+
kubeadm 操作的帮助命令
+
@@ -87,7 +106,9 @@ kubeadm 操作的帮助命令
+
与集群通信时使用的 kubeconfig 文件。如果未设置该参数,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
@@ -115,10 +136,11 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubelet.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubelet.md
index 29ece2c447..7da17d36a6 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubelet.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_init_phase_upload-config_kubelet.md
@@ -1,3 +1,7 @@
+
+将 kubelet 组件配置上传到 ConfigMap
-将从 kubeadm InitConfiguration 对象提取的 kubelet 配置上传到集群中 kubelet-config-1.X 形式的
-ConfigMap,其中 X 是当前(API 服务器)Kubernetes 版本的次要版本。
+将从 kubeadm InitConfiguration 对象提取的 kubelet 配置上传到集群中的 kubelet-config ConfigMap
```
kubeadm init phase upload-config kubelet [flags]
@@ -53,7 +56,9 @@ kubeadm init phase upload-config kubelet --config kubeadm.yaml
+
到 kubeadm 配置文件的路径。
+
@@ -63,7 +68,9 @@ kubeadm init phase upload-config kubelet --config kubeadm.yaml
+
kubelet 操作的帮助命令
+
@@ -77,7 +84,9 @@ kubelet 操作的帮助命令
+
与集群通信时使用的 kubeconfig 文件。如果未设置该标签,则可以通过一组标准路径来寻找已有的 kubeconfig 文件。
+
@@ -105,7 +114,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join.md
index e113203a1a..e341577329 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join.md
@@ -1,3 +1,18 @@
+
+
+
+在你希望加入现有集群的任何机器上运行它
-如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
+如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
@@ -140,9 +155,9 @@ If the node should host a new control plane instance, the IP address the API Ser
-如果节点应该托管新的控制平面实例,则为 API 服务器要绑定的端口。
+如果节点应该托管新的控制平面实例,则为 API 服务器要绑定的端口。
@@ -152,9 +167,9 @@ If the node should host a new control plane instance, the port for the API Serve
-使用此密钥可以解密由 init 上传的证书 secret。
+使用此密钥可以解密由 init 上传的证书 secret。
@@ -164,9 +179,9 @@ Use this key to decrypt the certificate secrets uploaded by init.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -176,9 +191,9 @@ kubeadm 配置文件的路径。
-在此节点上创建一个新的控制平面实例
+在此节点上创建一个新的控制平面实例
@@ -188,9 +203,9 @@ Create a new control plane instance on this node
-要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
+要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个 CRI 或具有非标准 CRI 插槽时,才使用此选项。
@@ -200,9 +215,9 @@ Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this
-对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
+对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
@@ -212,9 +227,9 @@ For file-based discovery, a file or URL from which to load cluster information.
-对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
+对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
@@ -224,9 +239,9 @@ For token-based discovery, the token used to validate cluster information fetche
-对基于令牌的发现,验证根 CA 公钥是否与此哈希匹配 (格式: "<type>:<value>")。
+对基于令牌的发现,验证根 CA 公钥是否与此哈希匹配 (格式: "<type>:<value>")。
@@ -236,26 +251,22 @@ For token-based discovery, validate that the root CA public key matches this has
-对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
+对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
---experimental-patches string
+--dry-run
-
-
-包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
-例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
-"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
-默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
-"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
-
+不会应用任何改动,仅仅输出那些将变动的地方。
+
@@ -264,21 +275,21 @@ Path to a directory that contains files named "target[suffix][+patchtype].extens
-join 操作的帮助命令
+join 操作的帮助命令
---ignore-preflight-errors stringSlice
+--ignore-preflight-errors strings
-错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
+错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
@@ -288,21 +299,37 @@ A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedU
-指定节点的名称
+指定节点的名称
---skip-phases stringSlice
+--patches string
+
+
+
+
+包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
+例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
+"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
+默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
+"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+
+
+
+
+--skip-phases strings
-要跳过的阶段列表
+要跳过的阶段列表
@@ -312,9 +339,9 @@ List of phases to be skipped
-指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
+指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
@@ -324,9 +351,9 @@ Specify the token used to temporarily authenticate with the Kubernetes Control P
-如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
+如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
@@ -353,9 +380,9 @@ Use this token for both discovery-token and tls-bootstrap-token when those value
-[实验] 指向 '真实' 宿主机根文件系统的路径。
+[实验] 指向 '真实' 宿主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase.md
index ee327bcc75..1fea4a45f4 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase.md
@@ -1,3 +1,18 @@
+
+
+
+使用此命令来调用 `join` 工作流程的某个阶段
-phase 操作的帮助命令
+
+phase 操作的帮助命令
@@ -55,8 +72,10 @@ phase 操作的帮助命令
-
-[实验] 指向 '真实' 宿主机根文件系统的路径。
+
+[实验] 指向 '真实' 宿主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join.md
index 51fe587053..a2872f1b47 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join.md
@@ -1,3 +1,18 @@
+
+
+
+添加作为控制平面实例的机器
+
control-plane-join 操作的帮助命令
+
@@ -82,10 +99,11 @@ control-plane-join 操作的帮助命令
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_all.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_all.md
index a051439f2c..85334ea94c 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_all.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_all.md
@@ -1,3 +1,18 @@
+
+
+
+添加作为控制平面实例的机器
-
添加作为控制平面实例的机器
```
@@ -18,7 +32,6 @@ kubeadm join phase control-plane-join all [flags]
-
### 选项
@@ -36,7 +49,9 @@ kubeadm join phase control-plane-join all [flags]
+
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
+
@@ -48,19 +63,23 @@ If the node should host a new control plane instance, the IP address the API Ser
+
kubeadm 配置文件的路径。
+
---experimental-control-plane
+--control-plane
+
在此节点上创建一个新的控制平面实例
+
@@ -72,7 +91,9 @@ Create a new control plane instance on this node
+
all 操作的帮助命令
+
@@ -84,10 +105,29 @@ all 操作的帮助命令
+
指定节点名称。
+
+
+--patches string
+
+
+
+
+包含名为 “target[suffix][+patchtype].extension” 的文件的目录的路径。
+例如,“kube-apiserver0+merge.yaml” 或只是 “etcd.json”。
+“target” 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd” 之一。
+“patchtype” 可以是 “strategic”、“merge” 或 “json”,它们匹配 kubectl 支持的补丁格式。
+默认的 “patchtype” 是 “strategic”。“extension” 必须是 “json” 或 “yaml”。
+“suffix” 是一个可选字符串,可用于基于字母数字顺序确定首先应用哪些补丁。
+
+
+
@@ -112,10 +152,11 @@ Specify the node name.
+
[实验] 到 '真实' 主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_etcd.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_etcd.md
index 196f9f6840..f354483970 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_etcd.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_etcd.md
@@ -1,3 +1,18 @@
+
+
+
+添加一个新的本地 etcd 成员
+
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
+
@@ -48,7 +65,9 @@ If the node should host a new control plane instance, the IP address the API Ser
+
kubeadm 配置文件的路径。
+
@@ -60,23 +79,9 @@ kubeadm 配置文件的路径。
+
在此节点上创建一个新的控制平面实例
-
-
-
-
---experimental-patches string
-
-
-
-
-包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
-例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
-"patchtype" 可以是"strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
-默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
-"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+
@@ -88,7 +93,9 @@ Path to a directory that contains files named "target[suffix][+patchtype].extens
+
etcd 操作的帮助命令
+
@@ -100,9 +107,25 @@ etcd 操作的帮助命令
+
指定节点的名称
+
+
+--patches string
+
+
+
+
+包含名为 “target[suffix][+patchtype].extension” 的文件的目录的路径。
+例如,“kube-apiserver0+merge.yaml” 或只是 “etcd.json”。
+“target” 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd” 之一。
+“patchtype” 可以是 “strategic”、“merge” 或 “json”,它们匹配 kubectl 支持的补丁格式。
+默认的 “patchtype” 是 “strategic”。“extension” 必须是 “json” 或 “yaml”。
+“suffix” 是一个可选字符串,可用于基于字母数字顺序确定首先应用哪些补丁。
+
+
@@ -128,7 +151,9 @@ Specify the node name.
+
[实验] 到 '真实' 主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_mark-control-plane.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_mark-control-plane.md
index 3ce1d641a5..ad52e01bbb 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_mark-control-plane.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_mark-control-plane.md
@@ -1,3 +1,18 @@
+
+
+
+将节点标记为控制平面节点
-将 Node 节点标记为控制平面节点
+将节点标记为控制平面节点
```
kubeadm join phase control-plane-join mark-control-plane [flags]
@@ -34,9 +49,9 @@ kubeadm join phase control-plane-join mark-control-plane [flags]
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -46,9 +61,9 @@ kubeadm 配置文件的路径。
-在此节点上创建一个新的控制平面实例
+在此节点上创建一个新的控制平面实例
@@ -58,9 +73,9 @@ Create a new control plane instance on this node
-mark-control-plane 操作的帮助命令
+mark-control-plane 操作的帮助命令
@@ -70,9 +85,9 @@ mark-control-plane 操作的帮助命令
-指定节点的名称
+指定节点的名称。
@@ -98,9 +113,9 @@ Specify the node name.
-[实验] 到 '真实' 主机根文件系统的路径。
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_update-status.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_update-status.md
index 0fce61c11b..22df0e47a8 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_update-status.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-join_update-status.md
@@ -1,3 +1,18 @@
+
+
+
+将新的控制平面节点注册到 kubeadm-config ConfigMap 维护的 ClusterStatus 中(已弃用)
-将新的控制平面节点注册到 kubeadm-config ConfigMap 维护的 ClusterStatus 中
+将新的控制平面节点注册到 kubeadm-config ConfigMap 维护的 ClusterStatus 中(已弃用)
```
kubeadm join phase control-plane-join update-status [flags]
@@ -34,9 +49,9 @@ kubeadm join phase control-plane-join update-status [flags]
-如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
+如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
@@ -45,8 +60,10 @@ If the node should host a new control plane instance, the IP address the API Ser
-
-kubeadm 配置文件的路径。
+
+kubeadm 配置文件的路径。
@@ -55,8 +72,10 @@ kubeadm 配置文件的路径。
-
-在此节点上创建一个新的控制平面实例
+
+在此节点上创建一个新的控制平面实例
@@ -65,8 +84,10 @@ kubeadm 配置文件的路径。
-
-update-status 操作的帮助命令
+
+update-status 操作的帮助命令
@@ -75,8 +96,10 @@ update-status 操作的帮助命令
-
-指定节点名称。
+
+指定节点名称。
@@ -103,8 +126,10 @@ update-status 操作的帮助命令
-
-[实验] 到 '真实' 主机根文件系统的路径。
+
+[实验] 到 '真实' 主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare.md
index 76025d8d72..b932b05540 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare.md
@@ -1,3 +1,19 @@
+
+
+
+
+准备为控制平面服务的机器
+
control-plane-prepare 操作的帮助命令
+
@@ -78,10 +96,11 @@ control-plane-prepare 操作的帮助命令
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md
index 7a75089abb..e9ea15e302 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_all.md
@@ -1,3 +1,19 @@
+
+
+
+
+准备为控制平面服务的机器
+
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
+
@@ -53,7 +71,9 @@ If the node should host a new control plane instance, the IP address the API Ser
+
如果该节点托管一个新的控制平面实例,则为 API 服务器要绑定的端口。
+
@@ -65,7 +85,9 @@ If the node should host a new control plane instance, the port for the API Serve
+
使用此密钥解密由 init 上传的证书 secrets。
+
@@ -77,7 +99,9 @@ Use this key to decrypt the certificate secrets uploaded by init.
+
kubeadm 配置文件的路径。
+
@@ -89,7 +113,9 @@ kubeadm 配置文件的路径。
+
在此节点上创建一个新的控制平面实例
+
@@ -101,7 +127,9 @@ Create a new control plane instance on this node
+
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
+
@@ -113,19 +141,23 @@ For file-based discovery, a file or URL from which to load cluster information.
+
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
+
---discovery-token-ca-cert-hash stringSlice
+--discovery-token-ca-cert-hash strings
+
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
+
@@ -137,23 +169,9 @@ For token-based discovery, validate that the root CA public key matches this has
+
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
-
-
-
-
---experimental-patches string
-
-
-
-
-包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
-例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
-"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
-默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
-"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+
@@ -177,7 +195,28 @@ all 操作的帮助命令
+
指定节点名称。
+
+
+
+
+
+--patches string
+
+
+
+
+
+包含名为 “target[suffix][+patchtype].extension” 的文件的目录的路径。
+例如,“kube-apiserver0+merge.yaml” 或只是 “etcd.json”。
+“target” 可以是 “kube-apiserver”、“kube-controller-manager”、“kube-scheduler”、“etcd” 之一。
+“patchtype” 可以是 “strategic”、“merge” 或 “json”,它们匹配 kubectl 支持的补丁格式。
+默认的 “patchtype” 是 “strategic”。“extension” 必须是 “json” 或 “yaml”。
+“suffix” 是一个可选字符串,可用于基于字母数字顺序确定首先应用哪些补丁。
+
@@ -189,7 +228,9 @@ Specify the node name.
+
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
+
@@ -201,17 +242,19 @@ Specify the token used to temporarily authenticate with the Kubernetes Control P
+
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
+
+
-
### 从父命令继承的选项
@@ -229,10 +272,11 @@ Use this token for both discovery-token and tls-bootstrap-token when those value
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_certs.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_certs.md
index fb823d616c..9ff8a9cbf4 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_certs.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_certs.md
@@ -1,3 +1,19 @@
+
+
+
+
+为新的控制平面组件生成证书
-
为新的控制平面组件生成证书
```
@@ -18,7 +33,6 @@ kubeadm join phase control-plane-prepare certs [api-server-endpoint] [flags]
-
### 选项
@@ -36,7 +50,9 @@ kubeadm join phase control-plane-prepare certs [api-server-endpoint] [flags]
+
如果该节点托管一个新的控制平面实例,则 API 服务器将公布其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
+
@@ -48,7 +64,9 @@ If the node should host a new control plane instance, the IP address the API Ser
+
kubeadm 配置文件的路径。
+
@@ -60,7 +78,9 @@ kubeadm 配置文件的路径。
+
在此节点上创建一个新的控制平面实例
+
@@ -72,7 +92,9 @@ Create a new control plane instance on this node
+
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
+
@@ -84,19 +106,23 @@ For file-based discovery, a file or URL from which to load cluster information.
+
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
+
---discovery-token-ca-cert-hash stringSlice
+--discovery-token-ca-cert-hash strings
+
对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
+
@@ -108,7 +134,9 @@ For token-based discovery, validate that the root CA public key matches this has
+
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
+
@@ -120,7 +148,9 @@ For token-based discovery, allow joining without --discovery-token-ca-cert-hash
+
certs 操作的帮助命令
+
@@ -132,7 +162,9 @@ certs 操作的帮助命令
+
指定节点名称。
+
@@ -144,7 +176,9 @@ Specify the node name.
+
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
+
@@ -156,7 +190,9 @@ Specify the token used to temporarily authenticate with the Kubernetes Control P
+
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
+
@@ -166,7 +202,6 @@ Use this token for both discovery-token and tls-bootstrap-token when those value
-
### 从父命令继承的选项
@@ -184,10 +219,11 @@ Use this token for both discovery-token and tls-bootstrap-token when those value
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_control-plane.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_control-plane.md
index 7f3da71e80..98528e9cfc 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_control-plane.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_control-plane.md
@@ -1,3 +1,18 @@
+
+
+
+为新的控制平面组件生成清单
-对于将要托管新的控制平面实例的节点,指定 API 服务器将公布的其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
+对于将要托管新的控制平面实例的节点,指定 API 服务器将公布的其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
@@ -51,9 +66,9 @@ If the node should host a new control plane instance, the IP address the API Ser
-针对将要托管新的控制平面实例的节点,设置 API 服务器要绑定的端口。
+针对将要托管新的控制平面实例的节点,设置 API 服务器要绑定的端口。
@@ -63,9 +78,9 @@ If the node should host a new control plane instance, the port for the API Serve
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -75,25 +90,9 @@ kubeadm 配置文件的路径。
-在此节点上创建一个新的控制平面实例
-
-
-
-
---experimental-patches string
-
-
-
-
-包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
-例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
-"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
-默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
-"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+在此节点上创建一个新的控制平面实例
@@ -103,9 +102,25 @@ Path to a directory that contains files named "target[suffix][+patchtype].extens
-control-plane 操作的帮助命令
+control-plane 操作的帮助命令
+
+
+
+
+--patches string
+
+
+
+
+包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
+例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
+"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
+默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
+"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
@@ -131,9 +146,9 @@ control-plane 操作的帮助命令
-[实验] 指向 '真实' 宿主机根文件系统的路径。
+[实验] 指向 '真实' 宿主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_download-certs.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_download-certs.md
index 975f69e966..a0d501c29e 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_download-certs.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_download-certs.md
@@ -1,3 +1,18 @@
+
+
+
+[实验]从 kubeadm-certs Secret 下载控制平面节点之间共享的证书
-使用此密钥可以解密由 init 上传的证书 secret。
+使用此密钥可以解密由 init 上传的证书 secret。
@@ -46,9 +61,9 @@ Use this key to decrypt the certificate secrets uploaded by init.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -58,9 +73,9 @@ kubeadm 配置文件的路径。
-在此节点上创建一个新的控制平面实例
+在此节点上创建一个新的控制平面实例
@@ -70,9 +85,9 @@ Create a new control plane instance on this node
-对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
+对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
@@ -82,9 +97,9 @@ For file-based discovery, a file or URL from which to load cluster information.
-对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
+对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
@@ -94,9 +109,9 @@ For token-based discovery, the token used to validate cluster information fetche
-对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
+对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
@@ -106,9 +121,9 @@ For token-based discovery, validate that the root CA public key matches this has
-对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
+对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
@@ -118,9 +133,9 @@ For token-based discovery, allow joining without --discovery-token-ca-cert-hash
-kubeconfig 操作的帮助命令
+download-certs 操作的帮助命令
@@ -130,9 +145,9 @@ kubeconfig 操作的帮助命令
-指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
+指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
@@ -142,9 +157,9 @@ Specify the token used to temporarily authenticate with the Kubernetes Control P
-如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
+如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
@@ -170,9 +185,9 @@ Use this token for both discovery-token and tls-bootstrap-token when those value
-[实验] 指向 '真实' 宿主机根文件系统的路径。
+[实验] 指向 '真实' 宿主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_kubeconfig.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_kubeconfig.md
index 4ae6068268..449f477df5 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_kubeconfig.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_control-plane-prepare_kubeconfig.md
@@ -1,3 +1,18 @@
+
+
+
+为新的控制平面组件生成 kubeconfig
-使用此密钥可以解密由 init 上传的证书 secret。
+使用此密钥可以解密由 init 上传的证书 secret。
@@ -45,9 +60,9 @@ Use this key to decrypt the certificate secrets uploaded by init.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -57,9 +72,9 @@ kubeadm 配置文件的路径。
-在此节点上创建一个新的控制平面实例
+在此节点上创建一个新的控制平面实例
@@ -69,9 +84,9 @@ Create a new control plane instance on this node
-对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
+对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
@@ -81,9 +96,9 @@ For file-based discovery, a file or URL from which to load cluster information.
-对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
+对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
@@ -93,9 +108,9 @@ For token-based discovery, the token used to validate cluster information fetche
-对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
+对于基于令牌的发现,请验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
@@ -105,9 +120,9 @@ For token-based discovery, validate that the root CA public key matches this has
-对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
+对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
@@ -117,9 +132,9 @@ For token-based discovery, allow joining without --discovery-token-ca-cert-hash
-kubeconfig 操作的帮助命令
+kubeconfig 操作的帮助命令
@@ -129,9 +144,9 @@ kubeconfig 操作的帮助命令
-指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
+指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
@@ -141,9 +156,9 @@ Specify the token used to temporarily authenticate with the Kubernetes Control P
-如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
+如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
@@ -169,9 +184,9 @@ Use this token for both discovery-token and tls-bootstrap-token when those value
-[实验] 指向 '真实' 宿主机根文件系统的路径。
+[实验] 指向 '真实' 宿主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_kubelet-start.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_kubelet-start.md
index ca95429a96..19379e86ce 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_kubelet-start.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_kubelet-start.md
@@ -1,3 +1,19 @@
+
+
+
+
+配置 Kubelet、证书并(重新)启动 Kubelet
+
提供给 CRI 套接字建立连接的路径。如果为空,则 kubeadm 将尝试自动检测该值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
+
@@ -57,11 +75,12 @@ Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this
-For file-based discovery, a file or URL from which to load cluster information.
+
对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
+
@@ -73,7 +92,9 @@ For file-based discovery, a file or URL from which to load cluster information.
+
对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
+
@@ -85,7 +106,9 @@ For token-based discovery, the token used to validate cluster information fetche
+
对于基于令牌的发现,验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
+
@@ -97,7 +120,9 @@ For token-based discovery, validate that the root CA public key matches this has
+
对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
+
@@ -109,7 +134,9 @@ For token-based discovery, allow joining without --discovery-token-ca-cert-hash
+
kubelet-start 操作的帮助命令
+
@@ -121,7 +148,9 @@ kubelet-start 操作的帮助命令
+
指定节点名称。
+
@@ -133,7 +162,9 @@ Specify the node name.
+
指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
+
@@ -145,7 +176,9 @@ Specify the token used to temporarily authenticate with the Kubernetes Control P
+
如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
+
@@ -173,10 +206,11 @@ Use this token for both discovery-token and tls-bootstrap-token when those value
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_preflight.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_preflight.md
index 97ad892e9d..77951cba33 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_preflight.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_join_phase_preflight.md
@@ -1,3 +1,18 @@
+
+
+
+运行 join 命令前检查
-对于将要托管新的控制平面实例的节点,指定 API 服务器将公布的其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
+对于将要托管新的控制平面实例的节点,指定 API 服务器将公布的其正在侦听的 IP 地址。如果未设置,则使用默认网络接口。
@@ -63,9 +78,9 @@ If the node should host a new control plane instance, the IP address the API Ser
-针对将要托管新的控制平面实例的节点,设置 API 服务器要绑定的端口。
+针对将要托管新的控制平面实例的节点,设置 API 服务器要绑定的端口。
@@ -75,9 +90,9 @@ If the node should host a new control plane instance, the port for the API Serve
-使用此密钥可以解密由 `init` 操作上传的证书 secret。
+使用此密钥可以解密由 `init` 操作上传的证书 secret。
@@ -87,9 +102,9 @@ Use this key to decrypt the certificate secrets uploaded by init.
-kubeadm 配置文件的路径。
+kubeadm 配置文件的路径。
@@ -99,9 +114,9 @@ kubeadm 配置文件的路径。
-在此节点上创建一个新的控制平面实例
+在此节点上创建一个新的控制平面实例
@@ -111,9 +126,9 @@ Create a new control plane instance on this node
-提供给 CRI 套接字建立连接的路径。如果为空,则 kubeadm 将尝试自动检测该值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
+提供给 CRI 套接字建立连接的路径。如果为空,则 kubeadm 将尝试自动检测该值;仅当安装了多个 CRI 或具有非标准 CRI 套接字时,才使用此选项。
@@ -123,9 +138,9 @@ Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this
-对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
+对于基于文件的发现,给出用于加载集群信息的文件或者 URL。
@@ -135,21 +150,21 @@ For file-based discovery, a file or URL from which to load cluster information.
-对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
+对于基于令牌的发现,该令牌用于验证从 API 服务器获取的集群信息。
---discovery-token-ca-cert-hash stringSlice
+--discovery-token-ca-cert-hash strings
-对于基于令牌的发现,验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
+对于基于令牌的发现,验证根 CA 公钥是否匹配此哈希值(格式:"<type>:<value>")。
@@ -159,9 +174,9 @@ For token-based discovery, validate that the root CA public key matches this has
-对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
+对于基于令牌的发现,允许在未关联 --discovery-token-ca-cert-hash 参数的情况下添加节点。
@@ -171,9 +186,9 @@ For token-based discovery, allow joining without --discovery-token-ca-cert-hash
-preflight 操作的帮助命令
+preflight 操作的帮助命令
@@ -183,9 +198,9 @@ preflight 操作的帮助命令
-错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
+错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
@@ -195,9 +210,9 @@ A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedU
-指定节点名称。
+指定节点名称。
@@ -207,9 +222,9 @@ Specify the node name.
-指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
+指定在加入节点时用于临时通过 Kubernetes 控制平面进行身份验证的令牌。
@@ -219,9 +234,9 @@ Specify the token used to temporarily authenticate with the Kubernetes Control P
-如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
+如果未提供这些值,则将它们用于 discovery-token 令牌和 tls-bootstrap 令牌。
@@ -247,9 +262,9 @@ Use this token for both discovery-token and tls-bootstrap-token when those value
-[实验] 指向 '真实' 宿主机根文件系统的路径。
+[实验] 指向 '真实' 宿主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md
index 2144a512db..1864e5554c 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset.md
@@ -1,3 +1,19 @@
+
+
+
+尽最大努力还原通过 'kubeadm init' 或者 'kubeadm join' 操作对主机所作的更改
+
@@ -7,8 +23,7 @@
-
-尽最大努力还原通过 'kubeadm init' 或者 'kubeadm join' 操作对主机所做的更改
+尽最大努力还原通过 'kubeadm init' 或者 'kubeadm join' 操作对主机所作的更改
+
存储证书的目录路径。如果已指定,则需要清空此目录。
+
@@ -61,11 +78,31 @@ The path to the directory where the certificates are stored. If specified, clean
--cri-socket string
-
+
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个CRI 或具有非标准 CRI 插槽时,才使用此选项。
+
+
+
+
+
+--dry-run
+
+
+
+
+
+不要应用任何更改;只需输出将要做什么。
+
+
+
+
+
+
@@ -74,10 +111,12 @@ Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this
+
在不提示确认的情况下重置节点。
+
@@ -86,49 +125,59 @@ Reset the node without prompting for confirmation.
+
reset 操作的帮助命令
+
---ignore-preflight-errors stringSlice
+--ignore-preflight-errors strings
+
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
+
+
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
+
+
与集群通信时使用的 kubeconfig 文件。如果未设置该标志,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
---skip-phases stringSlice
+--skip-phases strings
+
要跳过的阶段列表
+
@@ -155,13 +204,14 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase.md
index 9b02623ecc..2f4e06c7e2 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase.md
@@ -1,3 +1,18 @@
+
+
+
+使用此命令来调用 `reset` 工作流程的某个阶段
+
phase 操作的帮助命令
+
@@ -60,7 +77,9 @@ phase 操作的帮助命令
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_cleanup-node.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_cleanup-node.md
index 99584e4875..dc2993b580 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_cleanup-node.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_cleanup-node.md
@@ -1,3 +1,18 @@
+
+
+
+执行 cleanup node(清理节点)操作。
-
执行 cleanup node(清理节点)操作。
```
@@ -18,7 +32,6 @@ kubeadm reset phase cleanup-node [flags]
-
### 选项
@@ -41,7 +54,9 @@ kubeadm reset phase cleanup-node [flags]
+
存储证书的目录路径。如果已指定,则需要清空此目录。
+
@@ -53,7 +68,9 @@ The path to the directory where the certificates are stored. If specified, clean
+
要连接的 CRI 套接字的路径。如果为空,则 kubeadm 将尝试自动检测此值;仅当安装了多个CRI 或具有非标准 CRI 插槽时,才使用此选项。
+
@@ -65,7 +82,9 @@ Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this
+
cleanup-node 操作的帮助命令
+
@@ -75,7 +94,6 @@ cleanup-node 操作的帮助命令
-
### 从父命令继承的选项
@@ -93,10 +111,11 @@ cleanup-node 操作的帮助命令
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_preflight.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_preflight.md
index 976749eb5e..acce31aaca 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_preflight.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_preflight.md
@@ -1,3 +1,18 @@
+
+
+
+运行重置启动前检查
-在不提示确认的情况下重置节点。
+在不提示确认的情况下重置节点。
@@ -46,21 +61,21 @@ Reset the node without prompting for confirmation.
-preflight 操作的帮助命令
+preflight 操作的帮助命令
---ignore-preflight-errors stringSlice
+--ignore-preflight-errors strings
-错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
+错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
@@ -86,9 +101,9 @@ A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedU
-[实验] 指向 '真实' 宿主机根文件系统的路径。
+[实验] 指向 '真实' 宿主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_remove-etcd-member.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_remove-etcd-member.md
index 27f978a773..8b69953efd 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_remove-etcd-member.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_remove-etcd-member.md
@@ -1,3 +1,19 @@
+
+
+
+删除本地 etcd 成员
+
@@ -5,13 +21,12 @@
### 概要
-
-上传关于当前状态的配置,以便 'kubeadm upgrade' 以后可以知道如何配置升级后的集群。
+删除控制平面节点的本地 etcd 成员
```
-kubeadm config upload [flags]
+kubeadm reset phase remove-etcd-member [flags]
```
+remove-etcd-member 的帮助信息
+
+
+
+
+--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
+
+
+
+
+
+与集群通信时使用的 Kubeconfig 文件。如果未设置该标志,则可以在默认位置中查找现有的 Kubeconfig 文件。
+
+
@@ -51,23 +82,17 @@ kubeadm config upload [flags]
-
-
---kubeconfig string 默认值: "/etc/kubernetes/admin.conf"
-
-
-
-用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
-
-
--rootfs string
-
-[实验] 到'真实'主机根文件系统的路径。
+
+
+
+[实验] 到'真实'主机根文件系统的路径。
+
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_update-cluster-status.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_update-cluster-status.md
deleted file mode 100644
index 149af508d9..0000000000
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_reset_phase_update-cluster-status.md
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-### 概要
-
-
-
-如果该节点是控制平面节点,从 ClusterStatus 对象中删除该节点。
-
-```
-kubeadm reset phase update-cluster-status [flags]
-```
-
-
-
-### 选项
-
-
-
-
-
-
-
-
-
--h, --help
-
-
-
-
-update-cluster-status 操作的帮助命令
-
-
-
-
-
-
-
-
-### 从父命令继承的选项
-
-
-
-
-
-
-
-
-
---rootfs string
-
-
-
-
-[实验] 指向 '真实' 宿主机根文件系统的路径。
-
-
-
-
-
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md
index 7c2449a36d..8f74110366 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token.md
@@ -1,3 +1,18 @@
+
+
+
+管理引导令牌
-您可以在此处阅读有关引导令牌(bootstrap token)的更多信息:
+你可以在此处阅读有关引导令牌(bootstrap token)的更多信息:
/docs/admin/bootstrap-tokens/
```
@@ -78,7 +93,9 @@ kubeadm token [flags]
+
是否启用 `dry-run` 模式
+
@@ -93,7 +110,9 @@ Whether to enable dry-run mode or not
+
token 操作的帮助命令
+
@@ -113,7 +132,9 @@ token 操作的帮助命令
+
与集群通信时使用的 kubeconfig 文件。如果未设置,则搜索一组标准位置以查找现有 kubeconfig 文件。
+
@@ -140,10 +161,11 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md
index 3142fa5d49..472cab153c 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_create.md
@@ -1,3 +1,18 @@
+
+
+
+在服务器上创建引导令牌
这个命令将为你创建一个引导令牌。
-您可以设置此令牌的用途,"有效时间" 和可选的人性化的描述。
+你可以设置此令牌的用途,"有效时间" 和可选的人性化的描述。
这里的 [token] 是指将要生成的实际令牌。
该令牌应该是一个通过安全机制生成的随机令牌,形式为 "[a-z0-9]{6}.[a-z0-9]{16}"。
@@ -38,6 +53,19 @@ kubeadm token create [token]
+
+--certificate-key string
+
+
+
+
+当与 “--print-join-command” 一起使用时,打印作为控制平面加入集群时所需的所有 “kubeadm join” 标志。
+要创建新的证书密钥,你必须使用 “kubeadm init phase upload-certs --upload-certs”。
+
+
+
--config string
@@ -46,7 +74,9 @@ kubeadm token create [token]
+
kubeadm 配置文件的路径。
+
@@ -58,7 +88,9 @@ kubeadm 配置文件的路径。
+
针对令牌用途的人性化的描述。
+
@@ -67,7 +99,9 @@ A human friendly description of how this token is used.
+
--groups stringSlice 默认值:[system:bootstrappers:kubeadm:default-node-token]
+
@@ -75,7 +109,9 @@ A human friendly description of how this token is used.
+
此令牌用于身份验证时将进行身份验证的其他组。必须匹配 "\\Asystem:bootstrappers:[a-z0-9:-]{0,255}[a-z0-9]\\z"
+
@@ -87,7 +123,9 @@ Extra groups that this token will authenticate as when used for authentication.
+
create 操作的帮助命令
+
@@ -99,7 +137,9 @@ create 操作的帮助命令
+
不仅仅打印令牌,而是打印使用令牌加入集群所需的完整 'kubeadm join' 参数。
+
@@ -116,7 +156,9 @@ Instead of printing only the token, print the full 'kubeadm join' flag needed to
+
令牌有效时间,超过该时间令牌被自动删除。(例如: 1s, 2m, 3h)。如果设置为 '0',令牌将永远不过期。
+
@@ -133,7 +175,9 @@ The duration before the token is automatically deleted (e.g. 1s, 2m, 3h). If set
+
描述可以使用此令牌的方式。你可以多次使用 `--usages` 或者提供一个以逗号分隔的选项列表。合法选项有: [signing,authentication]
+
@@ -143,7 +187,6 @@ Describes the ways in which this token can be used. You can pass --usages multip
-
### 从父命令继承的选项
@@ -161,7 +204,9 @@ Describes the ways in which this token can be used. You can pass --usages multip
+
是否启用 `dry-run` 运行模式
+
@@ -178,7 +223,9 @@ Whether to enable dry-run mode or not
+
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
+
@@ -190,7 +237,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md
index 97e7e6008d..58d56ac399 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_delete.md
@@ -1,3 +1,18 @@
+
+
+
+删除服务器上的引导令牌
+
delete 操作的帮助命令
+
@@ -69,7 +86,9 @@ delete 操作的帮助命令
+
是否启用 `dry-run` 运行模式
+
@@ -86,7 +105,9 @@ Whether to enable dry-run mode or not
+
用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
+
@@ -98,10 +119,11 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md
index c91bb69ae8..da02baf36f 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_generate.md
@@ -1,3 +1,18 @@
+
+
+
+生成并打印一个引导令牌,但不要在服务器上创建它
-generate 操作的帮助命令
+generate 操作的帮助命令
@@ -71,8 +86,11 @@ generate 操作的帮助命令
-
-是否启用 `dry-run` 运行模式
+
+是否启用 `dry-run` 运行模式
+
@@ -86,9 +104,9 @@ generate 操作的帮助命令
-用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
+用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
@@ -97,8 +115,10 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
-
-[实验] 指向 '真实' 宿主机根文件系统的路径。
+
+[实验] 指向 '真实' 宿主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md
index de796ebe3a..a300297317 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_token_list.md
@@ -1,3 +1,19 @@
+
+
+
+列出服务器上的引导令牌
+
@@ -8,7 +24,7 @@
This command will list all bootstrap tokens for you.
-->
-此命令将为您列出所有的引导令牌。
+此命令将为你列出所有的引导令牌。
```
kubeadm token list [flags]
@@ -38,8 +54,10 @@ kubeadm token list [flags]
+
如果设置为 true,则在模板中缺少字段或哈希表的键时忽略模板中的任何错误。
仅适用于 golang 和 jsonpath 输出格式。
+
@@ -54,7 +72,9 @@ If true, ignore any errors in templates when a field or map key is missing in th
+
输出格式:text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file 其中之一
+
@@ -64,7 +84,21 @@ Output format. One of: text|json|yaml|go-template|go-template-file|template|temp
+
list 操作的帮助命令
+
+
+
+
+
+--show-managed-fields
+
+
+
+
+
+如果为 true,则在以 JSON 或 YAML 格式打印对象时保留 managedFields。
+
@@ -90,8 +124,10 @@ list 操作的帮助命令
+
是否启用 `dry-run` 模式
+
@@ -108,7 +144,9 @@ list 操作的帮助命令
+
用于和集群通信的 kubeconfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 kubeconfig 文件。
+
@@ -118,7 +156,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md
index d03885437f..b1a6499f94 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade.md
@@ -1,3 +1,8 @@
+
+
+此命令能将集群平滑升级到新版本
-upgrade 操作的帮助命令
+upgrade 操作的帮助命令
@@ -62,9 +67,9 @@ upgrade 操作的帮助命令
-[实验] 指向 '真实' 宿主机根文件系统的路径。
+[实验] 指向 '真实' 宿主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md
index e31467b0c5..9c99b280ee 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_apply.md
@@ -1,3 +1,7 @@
+
+将 Kubernetes 集群升级到指定版本
+
显示 Kubernetes 的不稳定版本作为升级替代方案,并允许升级到 Kubernetes 的 alpha/beta 或 RC 版本。
+
@@ -48,7 +54,9 @@ Show unstable versions of Kubernetes as an upgrade alternative and allow upgradi
+
显示 Kubernetes 的候选版本作为升级替代方案,并允许升级到 Kubernetes 的 RC 版本。
+
@@ -60,7 +68,9 @@ Show release candidate versions of Kubernetes as an upgrade alternative and allo
+
执行升级期间更改的组件所使用的证书的更新。
+
@@ -72,7 +82,9 @@ Perform the renewal of certificates used by component changed during upgrades.
+
kubeadm 配置文件的路径。
+
@@ -84,7 +96,9 @@ kubeadm 配置文件的路径。
+
不要更改任何状态,只输出要执行的操作。
+
@@ -101,23 +115,9 @@ Do not change any state, just output what actions would be performed.
+
执行 etcd 的升级。
-
-
-
-
---experimental-patches string
-
-
-
-
-包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
-例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
-"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
-默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
-"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+
@@ -127,11 +127,14 @@ Path to a directory that contains files named "target[suffix][+patchtype].extens
+
一组键值对,用于描述各种功能。选项包括:
- IPv6DualStack=true|false (ALPHA - 默认=false)
- PublicKeysECDSA=true|false (ALPHA - 默认=false)
+ PublicKeysECDSA=true|false (ALPHA - 默认值=false
+ RootlessControlPlane=true|false (ALPHA - 默认值=false)
+ UnversionedKubeletConfigMap=true|false (BETA - 默认值=true)
+
@@ -143,7 +146,9 @@ A set of key=value pairs that describe feature gates for various features. Optio
+
强制升级,但可能无法满足某些要求。这也意味着非交互模式。
+
@@ -155,19 +160,23 @@ Force upgrading although some requirements might not be met. This also implies n
+
apply 操作的帮助命令
+
---ignore-preflight-errors stringSlice
+-ignore-preflight-errors strings
+
错误将显示为警告的检查列表;例如:'IsPrivilegedUser,Swap'。取值为 'all' 时将忽略检查中的所有错误。
+
@@ -184,7 +193,30 @@ A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedU
+
与集群通信时使用的 kubeconfig 文件。如果未设置标志,则在相关目录下搜索以查找现有 kubeconfig 文件。
+
+
+
+
+
+--patches string
+
+
+
+
+
+包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
+例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。
+"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd" 之一。
+"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
+并且它们与 kubectl 支持的补丁格式相同。
+默认的 "patchtype" 是 "strategic"。
+"extension" 必须是"json" 或"yaml"。
+"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+
@@ -196,7 +228,9 @@ The kubeconfig file to use when talking to the cluster. If the flag is not set,
+
指定是否应打印将在升级中使用的配置文件。
+
@@ -208,7 +242,9 @@ Specifies whether the configuration file that will be used in the upgrade should
+
执行升级,不提示确认(非交互模式)。
+
@@ -236,7 +272,9 @@ Perform the upgrade and do not prompt for confirmation (non-interactive mode).
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_diff.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_diff.md
index 62c1fd2152..e57e36ffb8 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_diff.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_diff.md
@@ -1,6 +1,21 @@
+
+显示哪些差异将被应用于现有的静态 pod 资源清单。参考: kubeadm upgrade apply --dry-run
+
+
@@ -91,7 +106,7 @@ kubeadm upgrade diff [version] [flags]
--controller-manager-manifest string 默认值: "/etc/kubernetes/manifests/kube-controller-manager.yaml"
-控制器清单的路径
+控制器清单的路径
--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
-与集群通信时使用的 kubeconfig 文件,如果标志是未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+与集群通信时使用的 kubeconfig 文件,如果标志是未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
+
+升级集群中某个节点的命令
-
升级集群中某个节点的命令
默认值: true
+
对升级期间变化的组件所使用的证书执行更新。
+
@@ -69,7 +85,9 @@ Perform the renewal of certificates used by component changed during upgrades.
+
不更改任何状态,只输出将要执行的操作。
+
@@ -84,23 +102,9 @@ Do not change any state, just output the actions that would be performed.
+
执行 etcd 的升级。
-
-
-
-
---experimental-patches string
-
-
-
-
-包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
-例如,"kube-apiserver0+merge.yaml" 或仅仅是 "etcd.json"。
-"patchtype" 可以是 "strategic"、"merge" 或 "json" 之一,并且它们与 kubectl 支持的补丁格式匹配。
-默认的 "patchtype" 为 "strategic"。 "extension" 必须为 "json" 或 "yaml"。
-"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+
@@ -112,10 +116,23 @@ Path to a directory that contains files named "target[suffix][+patchtype].extens
+
node 操作的帮助命令
+
+
+--ignore-preflight-errors strings
+
+
+
+
+其错误将显示为警告的检查列表。示例:'IsPrivilegedUser,Swap'。 值 'all' 忽略所有检查中的错误。
+
+
+
+
+
用于与集群交互的 kubeconfig 文件。如果参数未指定,将从一系列标准位置检索存在的 kubeconfig 文件。
+
---kubelet-version string
+--patches string
-
-
-升级后 *期望的* kubelet 配置版本。如未指定,将使用 kubeadm-config ConfigMap 中的 KubernetesVersion
-
+
+
+包含名为 "target[suffix][+patchtype].extension" 的文件的目录的路径。
+例如,"kube-apiserver0+merge.yaml"或仅仅是 "etcd.json"。
+"target" 可以是 "kube-apiserver"、"kube-controller-manager"、"kube-scheduler"、"etcd" 之一。
+"patchtype" 可以是 "strategic"、"merge" 或者 "json" 之一,
+并且它们与 kubectl 支持的补丁格式相同。
+默认的 "patchtype" 是 "strategic"。
+"extension" 必须是"json" 或"yaml"。
+"suffix" 是一个可选字符串,可用于确定首先按字母顺序应用哪些补丁。
+
+
---skip-phases stringSlice
+--skip-phases strings
+
要跳过的阶段的列表
+
@@ -179,10 +206,11 @@ List of phases to be skipped
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase.md
index 3ce963a024..6f75dfa88f 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase.md
@@ -1,3 +1,18 @@
+
+
+
+使用此命令调用 node 工作流的某个阶段
+
phase 操作的帮助命令
+
@@ -59,7 +76,9 @@ phase 操作的帮助命令
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_control-plane.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_control-plane.md
index 4235ef59b5..f69ec4a67e 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_control-plane.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_control-plane.md
@@ -1,3 +1,19 @@
+
+
+
+升级部署在此节点上的控制平面实例,如果有的话
+
@@ -31,38 +47,64 @@ kubeadm upgrade node phase control-plane [flags]
--certificate-renewal
-更新在升级期间变更的组件使用的证书。
+更新在升级期间变更的组件使用的证书。
--dry-run
-不改变任何状态,只输出将要执行的动作。
+不改变任何状态,只输出将要执行的动作。
--etcd-upgrade 默认值: true
-执行 etcd 的升级。
+执行 etcd 的升级。
---experimental-patches string
+-h, --help
+
+
+control-plane 的帮助信息
+
+
+
+
+
+--kubeconfig string 默认值: "/etc/kubernetes/admin.conf"
+
+
+用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
+
+
+
+
+
+
+
+--patches string
@@ -77,36 +119,6 @@ Path to a directory that contains files named "target[suffix][+patchtype].extens
-
-
-
--h, --help
-
-
-control-plane 的帮助信息
-
-
-
-
-
---kubeconfig string 默认值: "/etc/kubernetes/admin.conf"
-
-
-用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
-
-
-
-
-
-
@@ -129,10 +141,10 @@ Path to a directory that contains files named "target[suffix][+patchtype].extens
--rootfs string
-[实验] 到'真实'主机根文件系统的路径。
+[实验] 到'真实'主机根文件系统的路径。
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_kubelet-config.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_kubelet-config.md
index c4d3e22985..30ca0fd8e8 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_kubelet-config.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_kubelet-config.md
@@ -1,14 +1,17 @@
+
+升级此节点的 kubelet 配置
### 概要
-从群集中 "kubelet-config-1.X" 的 ConfigMap 下载 kubelet 配置,其中 X 是kubelet 的次要版本。
-kubeadm 使用 --kubelet-version 参数来确定所需的 kubelet 版本。
+从集群中 ConfigMap kubelet-config 下载 kubelet 配置
```
kubeadm upgrade node phase kubelet-config [flags]
@@ -31,28 +34,47 @@ kubeadm upgrade node phase kubelet-config [flags]
--dry-run
-不改变任何状态,只输出将要执行的操作
+
+
+
+不改变任何状态,只输出将要执行的操作
+
+
-h, --help
-配置操作的帮助信息
+
+
+
+kubelet-config 操作的帮助信息
+
+
---kubeconfig string 默认值: "/etc/kubernetes/kubelet.conf"
+
+
+--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
+
-用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
-
-
-
---kubelet-version string
-
-
-升级后的 kubelet 的*期望*版本。
+
+
+
+用于和集群通信的 KubeConfig 文件。如果它没有被设置,那么 kubeadm 将会搜索一个已经存在于标准路径的 KubeConfig 文件。
+
+
@@ -76,7 +98,14 @@ kubeadm upgrade node phase kubelet-config [flags]
--rootfs string
-[实验] 到'真实'主机根文件系统的路径。
+
+
+
+[实验] 到'真实'主机根文件系统的路径。
+
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_preflight.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_preflight.md
index 2fd33ffc63..47c7903ac0 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_preflight.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_node_phase_preflight.md
@@ -1,3 +1,18 @@
+
+
+
+执行升级节点的预检
### 概要
@@ -11,7 +26,9 @@
kubeadm upgrade node phase preflight [flags]
```
-
+
### 选项
@@ -26,17 +43,17 @@ kubeadm upgrade node phase preflight [flags]
-preflight 操作的帮助命令
+preflight 操作的帮助命令
---ignore-preflight-errors stringSlice
+--ignore-preflight-errors strings
-错误将显示为警告的检查清单。示例:'IsPrivilegedUser,Swap'。值为'all'表示忽略所有检查的错误。
+错误将显示为警告的检查清单。示例:'IsPrivilegedUser,Swap'。值为'all'表示忽略所有检查的错误。
@@ -44,7 +61,9 @@ kubeadm upgrade node phase preflight [flags]
-
+
### 继承于父命令的选项
@@ -59,11 +78,8 @@ kubeadm upgrade node phase preflight [flags]
-[实验] 到'真实'主机根文件系统的路径。
+[实验] 到'真实'主机根文件系统的路径。
-
-
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md
index 88f2510b6e..c94439f428 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_upgrade_plan.md
@@ -1,119 +1,22 @@
-
-
### 概述
-检查可升级到哪些版本,并验证您当前的集群是否可升级。 要跳过互联网检查,请传递可选的 [version] 参数
+检查可升级到哪些版本,并验证你当前的集群是否可升级。 要跳过互联网检查,请传递可选的 [version] 参数
```
kubeadm upgrade plan [version] [flags]
```
+
### 选项
-
+
@@ -124,63 +27,129 @@ kubeadm upgrade plan [version] [flags]
--allow-experimental-upgrades
-显示不稳定版本的 Kubernetes 作为升级替代方案,并允许升级到 Kubernetes 的 Alpha/Beta/发行候选版本。
+
+
+
+显示不稳定版本的 Kubernetes 作为升级替代方案,并允许升级到 Kubernetes 的 Alpha/Beta/发行候选版本。
+
+
--allow-release-candidate-upgrades
-显示 Kubernetes 的发行候选版本作为升级选择,并允许升级到 Kubernetes 的发行候选版本。
+
+
+
+显示 Kubernetes 的发行候选版本作为升级选择,并允许升级到 Kubernetes 的发行候选版本。
+
+
--config string
-配置文件的路径。
+
+
+
+配置文件的路径。
+
+
--feature-gates string
-一组描述各种特征特性门控的键值对。选项有:IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false)
+
+
+
+一组描述各种特征特性门控的键值对。选项有:
+ PublicKeysECDSA=true|false (ALPHA - 默认值=false)
+ RootlessControlPlane=true|false (ALPHA - 默认值=false)
+ UnversionedKubeletConfigMap=true|false (BETA - 默认值=true)
+
+
-h, --help
-帮助
+
+
+
+plan 的帮助信息
+
+
---ignore-preflight-errors stringSlice
+--ignore-preflight-errors strings
-检查清单,其错误将显示为警告。 例如:“IsPrivilegedUser,Swap”。 值 “all” 忽略所有检查的错误。
+
+
+
+其错误将显示为警告的检查列表。 例如:'IsPrivilegedUser,Swap'。 值 'all' 忽略所有检查错误。
+
+
---kubeconfig string Default: "/etc/kubernetes/admin.conf"
+
+
+--kubeconfig string 默认值:"/etc/kubernetes/admin.conf"
+
-与集群通信时使用的 kubeconfig 文件。 如果标志为未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
+
+
+与集群通信时使用的 kubeconfig 文件。如果标志为未设置,则可以在一组标准位置中搜索现有的 kubeconfig 文件。
+
+
--print-config
-指定是否打印将在升级中使用的配置文件。
+
+
+
+指定是否打印将在升级中使用的配置文件。
+
+
-
+
### 从父命令继承的选项
@@ -194,7 +163,14 @@ kubeadm upgrade plan [version] [flags]
--rootfs string
-[EXPERIMENTAL] “真实”主机根文件系统的路径。
+
+
+
+[EXPERIMENTAL] “真实”主机根文件系统的路径。
+
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md
index 86e8805ad1..48baeb90b0 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/generated/kubeadm_version.md
@@ -1,3 +1,20 @@
+
+
+
+
+打印 kubeadm 的版本
+
@@ -7,7 +24,6 @@
-
打印 kubeadm 的版本
```
@@ -35,7 +51,9 @@ kubeadm version [flags]
+
version 操作的帮助命令
+
@@ -47,7 +65,9 @@ version 操作的帮助命令
+
输出格式;可用的选项有 'yaml', 'json' 和 'short'
+
@@ -75,7 +95,9 @@ Output format; available options are 'yaml', 'json' and 'short'
+
[实验] 指向 '真实' 宿主机根文件系统的路径。
+
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/implementation-details.md b/content/zh/docs/reference/setup-tools/kubeadm/implementation-details.md
index 4e861960a8..b7bbfd8d04 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/implementation-details.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/implementation-details.md
@@ -166,13 +166,8 @@ Kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并
- Kubernetes system requirements:
- if running on linux:
- [error] if Kernel is older than the minimum required version
- - [error] if required cgroups subsystem aren't in set up
- - if using docker:
- - [warning/error] if Docker service does not exist, if it is disabled, if it is not active.
- - [error] if Docker endpoint does not exist or does not work
- - [warning] if docker version is not in the list of validated docker versions
- - If using other cri engine:
- - [error] if crictl socket does not answer
+ - [error] if required cgroups subsystem aren't set up
+- [error] if the CRI endpoint does not answer
-->
- [警告] 如果要使用的 Kubernetes 版本(由 `--kubernetes-version` 标志指定)比 kubeadm CLI
版本至少高一个小版本。
@@ -180,12 +175,7 @@ Kubeadm 在启动 init 之前执行一组预检,目的是验证先决条件并
- 如果在 linux上运行:
- [错误] 如果内核早于最低要求的版本
- [错误] 如果未设置所需的 cgroups 子系统
- - 如果使用 docker:
- - [警告/错误] 如果 Docker 服务不存在、被禁用或未激活。
- - [错误] 如果 Docker 端点不存在或不起作用
- - [警告] 如果 docker 版本不在经过验证的 docker 版本列表中
- - 如果使用其他 cri 引擎:
- - [错误] 如果 crictl 套接字未应答
+- [错误] 如果 CRI 端点未应答
控制器管理器的静态 Pod 清单受用户提供的以下参数的影响:
@@ -745,18 +735,20 @@ As soon as the control plane is available, kubeadm executes following actions:
一旦控制平面可用,kubeadm 将执行以下操作:
-- 给节点打上 `node-role.kubernetes.io/master=""` 标签,标记其为控制平面
-- 给节点打上 `node-role.kubernetes.io/master:NoSchedule` 污点
+- 给节点打上 `node-role.kubernetes.io/control-plane=""` 标签,标记其为控制平面
+- 给节点打上 `node-role.kubernetes.io/master:NoSchedule` 和 `node-role.kubernetes.io/control-plane:NoSchedule` 污点
请注意:
+1. `node-role.kubernetes.io/master` 污点是已废弃的,将会在 kubeadm 1.25 版本中移除
1. 可以使用 [`kubeadm init phase mark-control-plane`](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-mark-control-plane)
命令单独触发控制平面标记
@@ -1026,14 +1018,12 @@ cluster startup problems.
1. `kubeadm join` 预检基本上是 `kubeadm init` 预检的一个子集
-2. 从 1.9 开始,kubeadm 为 CRI 通用的功能提供了更好的支持;在这种情况下,
- Docker 特定的控制参数将跳过或替换为 crictl 中与之相似的控制参数。
+2. 从 1.24 开始,kubeadm 使用 crictl 与所有已知的 CRI 端点进行通信。
3. 从 1.9 开始,kubeadm 支持加入在 Windows 上运行的节点;在这种情况下,
将跳过 Linux 特定的控制参数。
4. 在任何情况下,用户都可以通过 `--ignore-preflight-errors` 选项跳过
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md
index 363335f25c..8c82949cb8 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-config.md
@@ -8,53 +8,59 @@ weight: 50
在 `kubeadm init` 执行期间,kubeadm 将 `ClusterConfiguration` 对象上传
到你的集群的 `kube-system` 名字空间下名为 `kubeadm-config` 的 ConfigMap 对象中。
然后在 `kubeadm join`、`kubeadm reset` 和 `kubeadm upgrade` 执行期间读取此配置。
-要查看此 ConfigMap,请调用 `kubeadm config view`。
-你可以使用 `kubeadm config print` 命令打印默认配置,
-并使用 `kubeadm config migrate` 命令将旧版本的配置转化成新版本。
-`kubeadm config images list` 和 `kubeadm config images pull`
-命令可以用来列出并拉取 kubeadm 所需的镜像。
+你可以使用 `kubeadm config print` 命令打印默认静态配置,
+kubeadm 运行 `kubeadm init` and `kubeadm join` 时将使用此配置。
+
+
+{{< note >}}
+此命令的输出旨在作为示例。你必须手动编辑此命令的输出来适配你的设置。
+删除你不确定的字段,kubeadm 将通过检查主机来尝试在运行时给它们设默认值。
+{{< /note >}}
-更多信息请浏览[使用带配置文件的 kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file)
-或[使用带配置文件的 kubeadm join](/zh/docs/reference/setup-tools/kubeadm/kubeadm-join/#config-file).
+更多有关 `init` 和 `join` 的信息请浏览[使用带配置文件的 kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file)
+或[使用带配置文件的 kubeadm join](/zh/docs/reference/setup-tools/kubeadm/kubeadm-join/#config-file)。
-你也可以在使用 `kubeadm init` 命令时配置若干 kubelet 配置选项。
-这些选项对于集群中所有节点而言都是相同的。
-参阅[使用 kubeadm 来配置集群中的各个 kubelet](/zh/docs/setup/production-environment/tools/kubeadm/kubelet-integration/)
-了解详细信息。
-
-
-在 Kubernetes v1.13.0 及更高版本中,要列出/拉取 kube-dns 镜像而不是 CoreDNS 镜像,
-必须使用[这里](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-addon)
-所描述的 `--config` 方法。
+你可以使用 `kubeadm config migrate` 来转换旧配置文件,
+把其中已弃用的 API 版本更新为受支持的 API 版本。
+
+
+`kubeadm config images list` 和 `kubeadm config images pull` 可以用来列出和拉取 kubeadm 所需的镜像。
-## kubeadm config upload from-file {#cmd-config-from-file}
-
-## kubeadm config print{#cmd-config-view}
+## kubeadm config print {#cmd-config-print}
{{< include "generated/kubeadm_config_print.md" >}}
## kubeadm config print init-defaults {#cmd-config-print-init-defaults}
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init-phase.md b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init-phase.md
index 9f28f142f7..67884d38a2 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init-phase.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init-phase.md
@@ -175,9 +175,9 @@ By default the certs and encryption key expire after two hours.
## kubeadm init phase mark-control-plane {#cmd-phase-mark-control-plane}
-使用以下阶段来给具有 `node-role.kubernetes.io/master=""` 键值对的节点
+使用以下阶段来给作为控制平面的节点
打标签(label)和记录污点(taint)。
{{< tabs name="tab-mark-control-plane" >}}
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init.md b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init.md
index 6914bdee27..0946e9672e 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-init.md
@@ -207,6 +207,13 @@ What this example would do is write the manifest files for the control plane and
这允许你修改文件,然后使用 `--skip-phases` 跳过这些阶段。
通过调用最后一个命令,你将使用自定义清单文件创建一个控制平面节点。
+{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+
+
+或者,你可以使用 `InitConfiguration` 下的 `skipPhases` 字段。
+
@@ -239,8 +246,8 @@ The default configuration can be printed out using the
If your configuration is not using the latest version it is **recommended** that you migrate using
the [kubeadm config migrate](/docs/reference/setup-tools/kubeadm/kubeadm-config/) command.
-For more information on the fields and usage of the configuration you can navigate to our API reference
-page and pick a version from [the list](https://pkg.go.dev/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#section-directories).
+For more information on the fields and usage of the configuration you can navigate to our
+[API reference page](/docs/reference/config-api/kubeadm-config.v1beta3/).
-->
可以使用 [kubeadm config print](/zh/docs/reference/setup-tools/kubeadm/kubeadm-config/)
命令打印出默认配置。
@@ -249,10 +256,119 @@ page and pick a version from [the list](https://pkg.go.dev/k8s.io/kubernetes/cmd
**推荐**使用 [kubeadm config migrate](/zh/docs/reference/setup-tools/kubeadm/kubeadm-config/)
命令进行迁移。
-有关配置的字段和用法的更多信息,
-你可以访问 API 参考页面并从
-[列表](https://pkg.go.dev/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#section-directories)
-中选择一个版本。
+关于配置的字段和用法的更多信息,你可以访问 [API 参考页面](/zh/docs/reference/config-api/kubeadm-config.v1beta3/)。
+
+
+### 使用 kubeadm init 时设置特性门控 {#feature-gates}
+
+
+Kubeadm 支持一组独有的特性门控,只能在 `kubeadm init` 创建集群期间使用。
+这些特性可以控制集群的行为。特性门控会在毕业到 GA 后被移除。
+
+
+你可以使用 `--feature-gates` 标志来为 `kubeadm init` 设置特性门控,
+或者你可以在用 `--config` 传递[配置文件](/zh/docs/reference/config-api/kubeadm-config.v1beta3/#kubeadm-k8s-io-v1beta3-ClusterConfiguration)
+时添加条目到 `featureGates` 字段中去。
+
+
+直接传递 [Kubernetes 核心组件的特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates)给 kubeadm 是不支持的。
+相反,可以通过[使用 kubeadm API 的自定义组件](/zh/docs/setup/production-environment/tools/kubeadm/control-plane-flags/)来传递。
+
+
+特性门控的列表:
+
+{{< table caption="kubeadm feature gates" >}}
+特性 | 默认值 | Alpha | Beta
+:-------|:--------|:------|:-----
+`PublicKeysECDSA` | `false` | 1.19 | -
+`RootlessControlPlane` | `false` | 1.22 | -
+`UnversionedKubeletConfigMap` | `true` | 1.22 | 1.23
+{{< /table >}}
+
+
+{{< note >}}
+一旦特性门控变成了 GA,那它将会从这个列表中移除,因为它的值会被默认锁定为 `true` 。
+{{< /note >}}
+
+
+特性门控的描述:
+
+
+`PublicKeysECDSA`
+: 可用于创建集群时使用 ECDSA 证书而不是默认 RSA 算法。
+支持用 `kubeadm certs renew` 更新现有 ECDSA 证书,
+但你不能在集群运行期间或升级期间切换 RSA 和 ECDSA 算法。
+
+
+`RootlessControlPlane`
+: 设置此标志来配置 kubeadm 所部署的控制平面组件中的静态 Pod 容器
+`kube-apiserver`、`kube-controller-manager`、`kube-scheduler` 和 `etcd` 以非 root 用户身份运行。
+如果未设置该标志,则这些组件以 root 身份运行。
+你可以在升级到更新版本的 Kubernetes 之前更改此特性门控的值。
+
+
+`UnversionedKubeletConfigMap`
+: 此标志控制 kubeadm 存储 kubelet 配置数据的 {{}} 的名称。
+在未指定此标志或设置为 `true` 的情况下,此 ConfigMap 被命名为 `kubelet-config`。
+如果将此标志设置为 `false`,则此 ConfigMap 的名称会包括 Kubernetes 的主要版本和次要版本(例如:`kubelet-config-{{< skew currentVersion >}}`)。
+Kubeadm 会确保用于读写 ConfigMap 的 RBAC 规则适合你设置的值。
+当 kubeadm 写入此 ConfigMap 时(在 `kubeadm init` 或 `kubeadm upgrade apply` 期间),
+kubeadm 根据 `UnversionedKubeletConfigMap` 的设置值来执行操作。
+当读取此 ConfigMap 时(在 `kubeadm join`、`kubeadm reset`、`kubeadm upgrade ...` 期间),
+kubeadm 尝试首先使用无版本(后缀)的 ConfigMap 名称;
+如果不成功,kubeadm 将回退到使用该 ConfigMap 的旧(带版本号的)名称。
+
+
+{{< note >}}
+设置 `UnversionedKubeletConfigMap` 为 `false` 是被支持的特性,但该特性**已被弃用**。
+{{< /note >}}
+
+
+
+### 在没有互联网连接的情况下运行 kubeadm {#without-internet-connection}
+
+
+要在没有互联网连接的情况下运行 kubeadm,你必须提前拉取所需的控制平面镜像。
+
+
+你可以使用 `kubeadm config images` 子命令列出并拉取镜像:
+
+```shell
+kubeadm config images list
+kubeadm config images pull
+```
+
+
+你可以通过 `--config` 把 [kubeadm 配置文件](#config-file) 传递给上述命令来控制 `kubernetesVersion` 和 `imageRepository` 字段。
+
+
+kubeadm 需要的所有默认 `k8s.gcr.io` 镜像都支持多种硬件体系结构。
+
@@ -306,23 +453,44 @@ You can override this behavior by using [kubeadm with a configuration file](#con
允许的自定义功能有:
+* 提供影响镜像版本的 `kubernetesVersion`。
* 使用其他的 `imageRepository` 来代替 `k8s.gcr.io`。
-* 将 `useHyperKubeImage` 设置为 `true`,使用 HyperKube 镜像。
-* 为 etcd 或 DNS 附件提供特定的 `imageRepository` 和 `imageTag`。
+* 为 etcd 或 CoreDNS 提供特定的 `imageRepository` 和 `imageTag`。
-
-请注意配置文件中的配置项 `kubernetesVersion` 或者命令行参数 `--kubernetes-version`
-会影响到镜像的版本。
+由于向后兼容的原因,`imageRepository` 可能会有所不同。
+例如,某镜像的子路径可能是 `k8s.gcr.io/subpath/image`,
+但使用自定义仓库时默认为 `my.customrepository.io/image`。
+
+
+确保将镜像推送到 kubeadm 可以使用的自定义仓库的路径中,你必须:
+
+
+* 使用 `kubeadm config images {list|pull}` 从 `k8s.gcr.io` 的默认路径中拉取镜像。
+* 将镜像推送到 `kubeadm config images list --config=config.yaml` 的路径,
+其中 `config.yaml` 包含自定义的 `imageRepository` 和/或用于 etcd 和 CoreDNS 的 `imageTag`。
+* 将相同的 `config.yaml` 传递给 `kubeadm init`。
+
-### 在没有互联网连接的情况下运行 kubeadm
-
-
-要在没有互联网连接的情况下运行 kubeadm,你必须提前拉取所需的控制平面镜像。
-
-
-你可以使用 `kubeadm config images` 子命令列出并拉取镜像:
-
-```shell
-kubeadm config images list
-kubeadm config images pull
-```
-
-
-kubeadm 需要的所有镜像,例如 `k8s.gcr.io/kube-*`、`k8s.gcr.io/etcd` 和 `k8s.gcr.io/pause`
-都支持多种架构。
-
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-join.md b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-join.md
index e01ff5eea0..d14cb9d5f8 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-join.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-join.md
@@ -1,12 +1,17 @@
---
+title: kubeadm join
+content_type: concept
+weight: 30
+---
+
+
### join 工作流 {#join-workflow}
-
-`kubeadm join` 初始化 Kubernetes 工作节点并将其加入集群。
-该操作过程包含下面几个步骤:
+`kubeadm join` 初始化 Kubernetes 工作节点或控制平面节点并将其添加到集群中。
+对于工作节点,该操作包括以下步骤:
2. 一旦知道集群信息,kubelet 就可以开始 TLS 引导过程。
-
+
TLS 引导程序使用共享令牌与 Kubernetes API 服务器进行临时的身份验证,以提交证书签名请求 (CSR);
默认情况下,控制平面自动对该 CSR 请求进行签名。
-
3. 最后,kubeadm 配置本地 kubelet 使用分配给节点的确定标识连接到 API 服务器。
-
对于控制平面节点,执行额外的步骤:
@@ -78,28 +81,26 @@ For control-plane nodes additional steps are performed:
1. 添加新的本地 etcd 成员。
-1. 将此节点添加到 kubeadm 集群的 ClusterStatus。
-
-
### 使用 kubeadm 的 join phase 命令 {#join-phases}
-
Kubeadm 允许你使用 `kubeadm join phase` 分阶段将节点加入集群。
-
-要查看阶段和子阶段的有序列表,可以调用 `kubeadm join --help`。
+要查看阶段和子阶段的有序列表,可以调用 `kubeadm join --help`。
该列表将位于帮助屏幕的顶部,每个阶段旁边都有一个描述。
注意,通过调用 `kubeadm join`,所有阶段和子阶段都将按照此确切顺序执行。
-
有些阶段具有唯一的标志,因此,如果要查看可用选项列表,请添加 `--help`,例如:
@@ -108,13 +109,13 @@ Some phases have unique flags, so if you want to have a look at the list of avai
kubeadm join phase kubelet-start --help
```
-
-类似于 [kubeadm init phase](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/#init-phases)命令,
+类似于 [kubeadm init phase](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/#init-phases) 命令,
`kubeadm join phase` 允许你使用 `--skip-phases` 标志跳过阶段列表。
例如:
@@ -123,12 +124,19 @@ For example:
sudo kubeadm join --skip-phases=preflight --config=config.yaml
```
+{{< feature-state for_k8s_version="v1.22" state="beta" >}}
+
+
+或者,你可以使用 `JoinConfiguration` 中的 `skipPhases` 字段。
+
-### 发现要信任的集群 CA
+### 发现要信任的集群 CA {#discovering-what-cluster-ca-to-trust}
-
-#### 带 CA 锁定模式的基于令牌的发现
+#### 带 CA 锁定模式的基于令牌的发现 {#token-based-discovery-with-ca-pinning}
-
-这是 Kubernetes 1.8 及以上版本中的默认模式。
-在这种模式下,kubeadm 下载集群配置(包括根CA)并使用令牌验证它,
+这是 kubeadm 的默认模式。
+在这种模式下,kubeadm 下载集群配置(包括根 CA)并使用令牌验证它,
并且会验证根 CA 的公钥与所提供的哈希是否匹配,
以及 API 服务器证书在根 CA 下是否有效。
@@ -159,7 +167,7 @@ The CA key hash has the format `sha256:`. By default, the hash
CA 键哈希格式为 `sha256:`。
默认情况下,在 `kubeadm init` 最后打印的 `kubeadm join` 命令
或者 `kubeadm token create --print-join-command` 的输出信息中返回哈希值。
-它使用标准格式 (请参考 [RFC7469](https://tools.ietf.org/html/rfc7469#section-2.4))
+它使用标准格式(请参考 [RFC7469](https://tools.ietf.org/html/rfc7469#section-2.4))
并且也能通过第三方工具或者制备系统进行计算。
例如,使用 OpenSSL CLI:
@@ -168,7 +176,7 @@ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outfor
```
**`kubeadm join` 命令示例**
@@ -190,7 +198,7 @@ For control-plane nodes:
kubeadm join --discovery-token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234..cdef --control-plane 1.2.3.4:6443
```
-
@@ -201,52 +209,52 @@ if the `kubeadm init` command was called with `--upload-certs`.
**优势:**
-- 允许引导节点安全地发现主节点的信任根,即使其他工作节点或网络受到损害。
+- 允许引导节点安全地发现控制平面节点的信任根,即使其他工作节点或网络受到损害。
- 方便手动执行,因为所需的所有信息都可放到一个 `kubeadm join` 命令中。
-
**劣势:**
-- CA 哈希通常在主节点被提供之前是不知道的,这使得构建使用 kubeadm 的自动化配置工具更加困难。
- 通过预先生成CA,你可以解除这个限制。
+- CA 哈希通常在控制平面节点被提供之前是不知道的,这使得构建使用 kubeadm 的自动化配置工具更加困难。
+ 通过预先生成 CA,你可以解除这个限制。
-
-#### 无 CA 锁定模式的基于令牌的发现
+#### 无 CA 锁定模式的基于令牌的发现 {#token-based-discovery-without-ca-pinning}
-
-_这是 Kubernetes 1.7 和早期版本_中的默认设置;使用时要注意一些重要的补充说明。
-此模式仅依赖于对称令牌来签名(HMAC-SHA256)发现信息,这些发现信息为主节点建立信任根。
-在 Kubernetes 1.8 及以上版本中仍然可以使用 `--discovery-token-unsafe-skip-ca-verification`
-参数,但是如果可能的话,你应该考虑使用一种其他模式。
+此模式仅依靠对称令牌来签署 (HMAC-SHA256) 为控制平面建立信任根的发现信息。
+要使用该模式,加入节点必须使用
+`--discovery-token-unsafe-skip-ca-verification`
+跳过 CA 公钥的哈希验证。
+如果可以,你应该考虑使用其他模式。
**`kubeadm join` 命令示例**
@@ -259,7 +267,7 @@ kubeadm join --token abcdef.1234567890abcdef --discovery-token-unsafe-skip-ca-ve
- Still protects against many network-level attacks.
-- The token can be generated ahead of time and shared with the master and
+- The token can be generated ahead of time and shared with the control-plane node and
worker nodes, which can then bootstrap in parallel without coordination. This
allows it to be used in many provisioning scenarios.
-->
@@ -268,7 +276,7 @@ kubeadm join --token abcdef.1234567890abcdef --discovery-token-unsafe-skip-ca-ve
- 仍然可以防止许多网络级攻击。
-- 可以提前生成令牌并与主节点和工作节点共享,这样主节点和工作节点就可以并行引导而无需协调。
+- 可以提前生成令牌并与控制平面节点和工作节点共享,这样控制平面节点和工作节点就可以并行引导而无需协调。
这允许它在许多配置场景中使用。
**劣势**
- 如果攻击者能够通过某些漏洞窃取引导令牌,那么他们可以使用该令牌(连同网络级访问)
- 为其它处于引导过程中的节点提供假冒的主节点。
+ 为其它处于引导过程中的节点提供假冒的控制平面节点。
在你的环境中,这可能是一个适当的折衷方法,也可能不是。
-#### 基于 HTTPS 或文件发现
+#### 基于 HTTPS 或文件发现 {#file-or-https-based-discovery}
-
-这种方案提供了一种带外方式在主节点和引导节点之间建立信任根。
+这种方案提供了一种带外方式在控制平面节点和引导节点之间建立信任根。
如果使用 kubeadm 构建自动配置,请考虑使用此模式。
发现文件的格式为常规的 Kubernetes
[kubeconfig](/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters/) 文件。
@@ -311,42 +319,47 @@ In case the discovery file does not contain credentials, the TLS discovery token
-->
**`kubeadm join` 命令示例:**
-- `kubeadm join --discovery-file path/to/file.conf` (本地文件)
+
+- `kubeadm join --discovery-file path/to/file.conf`(本地文件)
+
+- `kubeadm join --discovery-file https://url/file.conf`(远程 HTTPS URL)
**优势:**
-- 允许引导节点安全地发现主节点的信任根,即使网络或其他工作节点受到损害。
+- 允许引导节点安全地发现控制平面节点的信任根,即使网络或其他工作节点受到损害。
**劣势:**
-- 要求你有某种方法将发现信息从主节点传送到引导节点。
- 例如,这可以通过云提供商或驱动工具实现。
- 该文件中的信息不是加密的,而是需要 HTTPS 或等效文件来保证其完整性。
+- 要求你有某种方法将发现信息从控制平面节点传送到引导节点。
+ 如果发现文件包含凭据,你必须对其保密并通过安全通道进行传输。
+ 这可能通过你的云提供商或供应工具来实现。
### 确保你的安装更加安全 {#securing-more}
-
@@ -356,9 +369,9 @@ Kubeadm 的默认值可能不适用于所有人。
-#### 关闭节点客户端证书的自动批准
+#### 关闭节点客户端证书的自动批准 {#turning-off-auto-approval-of-node-client-certificates}
-
-这迫使工作流只有在运行了 kubectl 证书批准后,kubeadm join 才能成功。
+这迫使工作流只有在运行了 `kubectl certificate approve` 后,`kubeadm join` 才能成功。
-#### 关闭对集群信息 ConfigMap 的公开访问
+#### 关闭对集群信息 ConfigMap 的公开访问 {#turning-off-public-access-to-the-cluster-info-configmap}
-
-为了实现使用令牌作为唯一验证信息的加入工作流,默认情况下会公开带有验证主节点标识
-所需数据的 ConfigMap。
+为了实现使用令牌作为唯一验证信息的加入工作流,默认情况下会公开带有验证控制平面节点标识所需数据的 ConfigMap。
虽然此 ConfigMap 中没有私有数据,但一些用户可能希望无论如何都关闭它。
这样做需要禁用 `kubeadm join` 工作流的 `--discovery-token` 参数。
以下是实现步骤:
-
* 从 API 服务器获取 `cluster-info` 文件:
@@ -485,16 +497,18 @@ users: []
-这些命令应该在执行 `kubeadm init` 之后、在`kubeadm join` 之前执行。
+这些命令应该在执行 `kubeadm init` 之后、在 `kubeadm join` 之前执行。
-
-### 使用带有配置文件的 kubeadm join
+### 使用带有配置文件的 kubeadm join {#config-file}
{{< caution >}}
-
-配置文件目前是 alpha 功能,在将来的版本中可能会变动。
+
+配置文件目前是 beta 功能,在将来的版本中可能会变动。
{{< /caution >}}
-可以用配置文件替代命令行参数的方法配置 `kubeadm join`,一些高级功能也只有在使用配置文件时才可选用。
+可以用配置文件替代命令行参数的方法配置 `kubeadm join`,一些进阶功能也只有在使用配置文件时才可选用。
该文件通过 `--config` 参数来传递,并且文件中必须包含 `JoinConfiguration` 结构。
在某些情况下,不允许将 `--config` 与其他标志混合使用。
-
-有关配置的字段和用法的更多信息,你可以导航到我们的 API 参考页
-并从[列表]中选择一个版本(https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm#pkg-subdirectories)。
+有关配置的字段和用法的更多信息,你可以导航到我们的
+[API 参考页](/zh/docs/reference/config-api/kubeadm-config.v1beta3/)。
## {{% heading "whatsnext" %}}
* [kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/)
- 初始化 Kubernetes 主节点
+ 初始化 Kubernetes 控制平面节点
* [kubeadm token](/zh/docs/reference/setup-tools/kubeadm/kubeadm-token/)
管理 `kubeadm join` 的令牌
* [kubeadm reset](/zh/docs/reference/setup-tools/kubeadm/kubeadm-reset/)
diff --git a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-reset-phase.md b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-reset-phase.md
index 8d0f84af56..4d1d6e82d1 100644
--- a/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-reset-phase.md
+++ b/content/zh/docs/reference/setup-tools/kubeadm/kubeadm-reset-phase.md
@@ -43,20 +43,6 @@ Using this phase you can execute preflight checks on a node that is being reset.
{{< tab name="preflight" include="generated/kubeadm_reset_phase_preflight.md" />}}
{{< /tabs >}}
-
-## kubeadm reset phase update-cluster-status {#cmd-reset-phase-update-cluster-status}
-
-
-使用此阶段,你可以从 ClusterStatus 对象中删除此控制平面节点。
-
-{{< tabs name="tab-update-cluster-status" >}}
-{{< tab name="update-cluster-status" include="generated/kubeadm_reset_phase_update-cluster-status.md" />}}
-{{< /tabs >}}
-
diff --git a/content/zh/docs/reference/tools/_index.md b/content/zh/docs/reference/tools/_index.md
index 2b7fefbe32..90b579fc70 100644
--- a/content/zh/docs/reference/tools/_index.md
+++ b/content/zh/docs/reference/tools/_index.md
@@ -16,24 +16,22 @@ no_list: true
-Kubernetes 包含多个内置工具来帮助你使用 Kubernetes 系统。
+Kubernetes 包含多种工具来帮助你使用 Kubernetes 系统。
-## Minikube
+## crictl
-[`minikube`](https://minikube.sigs.k8s.io/docs/)
-是一种在你的工作站上本地运行单节点 Kubernetes 集群的工具,用于开发和测试。
+[`crictl`](https://github.com/kubernetes-sigs/cri-tools)
+是用于检查和调试兼容 {{}} 的容器运行时的命令行接口。
## Helm
+{{% thirdparty-content single="true" %}}
-[`Kubernetes Helm`](https://github.com/kubernetes/helm)
-是一个用于管理预配置 Kubernetes 资源包的工具,也就是 Kubernetes 图表。
+[Helm](https://helm.sh/)
+是一个用于管理预配置 Kubernetes 资源包的工具。这些包被称为“Helm 图表”。
+[`Kui`](https://github.com/kubernetes-sigs/kui)
+是一个接受你标准的 `kubectl` 命令行请求并以图形响应的 GUI 工具。
+
+
+Kui 接受标准的 `kubectl` 命令行工具并以图形响应。
+Kui 提供包含可排序表格的 GUI 渲染,而不是 ASCII 表格。
+
+
+Kui 让你能够:
+
+* 直接点击长的、自动生成的资源名称,而不是复制和粘贴
+* 输入 `kubectl` 命令并查看它们的执行,有时甚至比 `kubectl` 本身更快
+* 查询 {{}} 并查看其执行渲染为瀑布图
+* 使用选项卡式 UI 在集群中单击资源
+
+## Minikube
+
+
+[`minikube`](https://minikube.sigs.k8s.io/docs/)
+是一种在你的工作站上本地运行单节点 Kubernetes 集群的工具,用于开发和测试。
\ No newline at end of file
diff --git a/content/zh/docs/reference/using-api/_index.md b/content/zh/docs/reference/using-api/_index.md
index 837adf9dc6..30b6d49663 100644
--- a/content/zh/docs/reference/using-api/_index.md
+++ b/content/zh/docs/reference/using-api/_index.md
@@ -191,6 +191,7 @@ part is omitted, it is treated as if `=true` is specified. For example:
- to disable `batch/v1`, set `--runtime-config=batch/v1=false`
- to enable `batch/v2alpha1`, set `--runtime-config=batch/v2alpha1`
+ - to enable a specific version of an API, such as `storage.k8s.io/v1beta1/csistoragecapacities`, set `--runtime-config=storage.k8s.io/v1beta1/csistoragecapacities`
-->
## 启用或禁用 API 组 {#enabling-or-disabling}
资源和 API 组是在默认情况下被启用的。
@@ -200,6 +201,8 @@ part is omitted, it is treated as if `=true` is specified. For example:
例如:
- 禁用 `batch/v1`, 对应参数设置 `--runtime-config=batch/v1=false`
- 启用 `batch/v2alpha1`, 对应参数设置 `--runtime-config=batch/v2alpha1`
+ - 要启用特定版本的 API,如 `storage.k8s.io/v1beta1/csistoragecapacities`,可以设置
+ `--runtime-config=storage.k8s.io/v1beta1/csistoragecapacities`
-本页描述 Kubernetes API 的通用概念。
+The Kubernetes API is a resource-based (RESTful) programmatic interface
+provided via HTTP. It supports retrieving, creating, updating, and deleting
+primary resources via the standard HTTP verbs (POST, PUT, PATCH, DELETE,
+GET).
-
-
-Kubernetes API 是基于资源的(RESTful)、通过 HTTP 提供的编程接口。
-API 支持通过标准的 HTTP 动词(POST、PUT、PATCH、DELETE 和 GET)
-检视、创建、更新和删除主要资源,为很多允许细粒度权限控制的对象提供子资源
-(如将 Pod 绑定到节点上),并且出于便利性或效率考虑,支持并提供这些资源的
-不同表示形式。
-Kubernetes API 还通过 "watch" 和一致性的列表支持高效的资源变更通知,
-从而允许其他组件对资源的状态进行高效的缓存和同步。
+Kubernetes API 是通过 HTTP 提供的基于资源 (RESTful) 的编程接口。
+它支持通过标准 HTTP 动词(POST、PUT、PATCH、DELETE、GET)检索、创建、更新和删除主要资源。
+
+对于某些资源,API 包括额外的子资源,允许细粒度授权(例如将 Pod 的查看详细信息与检索其日志分开),
+为了方便或者提高效率,可以以不同的表示形式接受和服务这些资源。
-## 标准 API 术语 {#standard-api-terminology}
+Kubernetes 支持通过 **watchs** 实现高效的资源变更通知。
+Kubernetes 还提供了一致的列表操作,以便 API 客户端可以有效地缓存、跟踪和同步资源的状态。
+你可以在线查看 [API 参考](/zh/docs/reference/kubernetes-api/),
+或继续阅读以了解 API 的一般信息。
+
+
+## Kubernetes API 术语 {#standard-api-terminology}
+
+Kubernetes 通常使用常见的 RESTful 术语来描述 API 概念:
+* **资源类型(Resource Type)** 是 URL 中使用的名称(`pods`、`namespaces`、`services`)
+* 所有资源类型都有一个具体的表示(它们的对象模式),称为 **类别(Kind)**
+* 资源实例的列表称为 **集合(Collection)**
+* 资源类型的单个实例称为 **资源(Resource)**,通常也表示一个 **对象(Object)**
+* 对于某些资源类型,API 包含一个或多个 **子资源(sub-resources)**,这些子资源表示为资源下的 URI 路径
+
+
大多数 Kubernetes API 资源类型都是
[对象](/zh/docs/concepts/overview/working-with-objects/kubernetes-objects/#kubernetes-objects):
-它们代表的是集群中某一概念的具体实例,例如一个 Pod 或名字空间。
-为数不多的几个 API 资源类型是“虚拟的” - 它们通常代表的是操作而非对象本身,
-例如访问权限检查(使用 POST 请求发送一个 JSON 编码的 `SubjectAccessReview`
-负载到 `subjectaccessreviews` 资源)。
-所有对象都有一个唯一的名字,以便支持幂等的创建和检视操作,不过如果虚拟资源类型
-不可检视或者不要求幂等,可以不具有唯一的名字。
+它们代表集群上某个概念的具体实例,例如 Pod 或命名空间。
+少数 API 资源类型是 “虚拟的”,它们通常代表的是操作而非对象本身,
+例如权限检查(使用带有 JSON 编码的 `SubjectAccessReview` 主体的 POST 到 `subjectaccessreviews` 资源),
+或 Pod 的子资源 `eviction`(用于触发 [API-发起的驱逐](/zh/docs/concepts/scheduling-eviction/api-eviction/))。
-Kubernetes 一般会利用标准的 RESTful 术语来描述 API 概念:
-* **资源类型(Resource Type)** 是在 URL 中使用的名称(`pods`、`namespaces`、`services`)
-* 所有资源类型都有具有一个 JSON 形式(其对象的模式定义)的具体表示,称作**类别(Kind)**
-* 某资源类型的实例的列表称作 **集合(Collection)**
-* 资源类型的单个实例被称作 **资源(Resource)**
+### 对象名字 {#object-names}
+
+你可以通过 API 创建的所有对象都有一个唯一的{{< glossary_tooltip text="名字" term_id="name" >}},
+以允许幂等创建和检索,
+但如果虚拟资源类型不可检索或不依赖幂等性,则它们可能没有唯一名称。
+在{{< glossary_tooltip text="命名空间" term_id="namespace" >}}内,
+同一时刻只能有一个给定类别的对象具有给定名称。
+但是,如果你删除该对象,你可以创建一个具有相同名称的新对象。
+有些对象没有命名空间(例如:节点),因此它们的名称在整个集群中必须是唯一的。
+### API 动词 {#api-verbs}
+
+几乎所有对象资源类型都支持标准 HTTP 动词 - GET、POST、PUT、PATCH 和 DELETE。
+Kubernetes 也使用自己的动词,这些动词通常写成小写,以区别于 HTTP 动词。
+
+Kubernetes 使用术语 **list** 来描述返回资源[集合](#collections),
+以区别于通常称为 **get** 的单个资源检索。
+如果你发送带有 `?watch` 查询参数的 HTTP GET 请求,
+Kubernetes 将其称为 **watch** 而不是 **get**(有关详细信息,请参阅[快速检测更改](#efficient-detection-of-changes))。
+
+对于 PUT 请求,Kubernetes 在内部根据现有对象的状态将它们分类为 **create** 或 **update**。
+**update** 不同于 **patch**;**patch** 的 HTTP 动词是 PATCH。
+
+
+## 资源 URI {#resource-uris}
所有资源类型要么是集群作用域的(`/apis/GROUP/VERSION/*`),要么是名字空间
作用域的(`/apis/GROUP/VERSION/namespaces/NAMESPACE/*`)。
名字空间作用域的资源类型会在其名字空间被删除时也被删除,并且对该资源类型的
访问是由定义在名字空间域中的授权检查来控制的。
-下列路径用来检视集合和资源:
+
+你还可以访问资源集合(例如:列出所有 Node)。以下路径用于检索集合和资源:
+
* 集群作用域的资源:
* `GET /apis/GROUP/VERSION/RESOURCETYPE` - 返回指定资源类型的资源的集合
@@ -89,54 +178,73 @@ All resource types are either scoped by the cluster (`/apis/GROUP/VERSION/*`) or
* `GET /apis/GROUP/VERSION/namespaces/NAMESPACE/RESOURCETYPE/NAME` - 返回名字空间 NAMESPACE 中给定资源类型的名称为 NAME 的实例
由于名字空间本身是一个集群作用域的资源类型,你可以通过 `GET /api/v1/namespaces/`
-检视所有名字空间的列表,使用 `GET /api/v1/namespaces/NAME` 查看特定名字空间的
+检视所有名字空间的列表(“集合”),使用 `GET /api/v1/namespaces/NAME` 查看特定名字空间的
详细信息。
-几乎所有对象资源类型都支持标准的 HTTP 动词 - GET、POST、PUT、PATCH 和 DELETE。
-Kubernetes 使用术语 **list** 来描述返回资源集合的操作,以便与返回单个资源的、
-通常称作 **get** 的操作相区分。
-
-某些资源类型有一个或多个子资源(Sub-resource),表现为对应资源下面的子路径:
-
* 集群作用域的子资源:`GET /apis/GROUP/VERSION/RESOURCETYPE/NAME/SUBRESOURCE`
* 名字空间作用域的子资源:`GET /apis/GROUP/VERSION/namespaces/NAMESPACE/RESOURCETYPE/NAME/SUBRESOURCE`
-取决于对象是什么,每个子资源所支持的动词有所不同 - 参见 API 文档以了解更多信息。
+取决于对象是什么,每个子资源所支持的动词有所不同 - 参见 [API 文档](/zh/docs/reference/kubernetes-api/)以了解更多信息。
跨多个资源来访问其子资源是不可能的 - 如果需要这一能力,则通常意味着需要一种
新的虚拟资源类型了。
## 高效检测变更 {#efficient-detection-of-changes}
-为了使客户端能够构造一个模型来表达集群的当前状态,所有 Kubernetes 对象资源类型
-都需要支持一致的列表和一个称作 **watch** 的增量变更通知信源(feed)。
-每个 Kubernetes 对象都有一个 `resourceVersion` 字段,代表该资源在下层数据库中
-存储的版本。检视资源集合(名字空间作用域或集群作用域)时,服务器返回的响应
-中会包含 `resourceVersion` 值,可用来向服务器发起 watch 请求。
-服务器会返回所提供的 `resourceVersion` 之后发生的所有变更(创建、删除和更新)。
-这使得客户端能够取回当前的状态并监视其变更,且不会错过任何变更事件。
-客户端的监视连接被断开时,可以从最后返回的 `resourceVersion` 重启新的监视连接,
-或者执行一个新的集合请求之后从头开始监视操作。
-参阅[资源版本语义](#resource-versions)以了解更多细节。
+Kubernetes API 允许客户端对对象或集合发出初始请求,然后跟踪自该初始请求以来的更改:**watch**。
+客户端可以发送 **list** 或者 **get** 请求,然后发出后续 **watch** 请求。
+
+为了使这种更改跟踪成为可能,每个 Kubernetes 对象都有一个 `resourceVersion` 字段,
+表示存储在底层持久层中的该资源的版本。在检索资源集合(命名空间或集群范围)时,
+来自 API 服务器的响应包含一个 `resourceVersion` 值。
+客户端可以使用该 `resourceVersion` 来启动对 API 服务器的 **watch**。
+
+
+当你发送 **watch** 请求时,API 服务器会响应更改流。
+这些更改逐项列出了在你指定为 **watch** 请求参数的 `resourceVersion` 之后发生的操作(例如 **create**、**delete** 和 **update**)的结果。
+整个 **watch** 机制允许客户端获取当前状态,然后订阅后续更改,而不会丢失任何事件。
+
+如果客户端 **watch** 连接断开,则该客户端可以从最后返回的 `resourceVersion` 开始新的 **watch** 请求;
+客户端还可以执行新的 **get**/**list** 请求并重新开始。有关更多详细信息,请参阅[资源版本语义](#resource-versions)。
例如:
@@ -159,11 +267,17 @@ For example:
```
-2. 从资源版本 10245 开始,以 JSON 对象的形式接收所有创建、删除或更新操作的通知:
+2. 从资源版本 10245 开始,接收影响 _test_ 命名空间中 Pod 的所有 API 操作
+ (例如 **create**、**delete**、**apply** 或 **update**)的通知。
+ 每个更改通知都是一个 JSON 文档。
+ HTTP 响应正文(用作 `application/json`)由一系列 JSON 文档组成。
- ```console
+ ```
GET /api/v1/namespaces/test/pods?watch=1&resourceVersion=10245
---
200 OK
@@ -182,28 +296,41 @@ For example:
```
给定的 Kubernetes 服务器只会保留一定的时间内发生的历史变更列表。
使用 etcd3 的集群默认保存过去 5 分钟内发生的变更。
-当所请求的 watch 操作因为资源的历史版本不存在而失败,客户端必须能够处理
-因此而返回的状态代码 `410 Gone`,清空其本地的缓存,重新执行 list 操作,
-并基于新的 list 操作所返回的 `resourceVersion` 来开始新的 watch 操作。
-大多数客户端库都能够提供某种形式的、包含此逻辑的工具。
-(在 Go 语言客户端库中,这一设施称作 `Reflector`,位于
-`k8s.io/client-go/cache` 包中。)
+当所请求的 **watch** 操作因为资源的历史版本不存在而失败,
+客户端必须能够处理因此而返回的状态代码 `410 Gone`,清空其本地的缓存,
+重新执行 **get** 或者 **list** 操作,
+并基于新返回的 `resourceVersion` 来开始新的 **watch** 操作。
+
+对于订阅集合,Kubernetes 客户端库通常会为 **list** -然后- **watch** 的逻辑提供某种形式的标准工具。
+(在 Go 客户端库中,这称为`反射器(Reflector)`,位于 `k8s.io/client-go/tools/cache` 包中。)
### 监视书签 {#Watch-bookmark}
-为了处理历史窗口过短的问题,我们引入了 `bookmark(书签)` 监视事件的概念。
-该事件是一种特殊事件,用来标示客户端所请求的、指定的 `resourceVersion` 之前
-的所有变更都以被发送。该事件中返回的对象是所请求的资源类型,但其中仅包含
-`resourceVersion` 字段,例如:
+为了减轻短历史窗口的影响,Kubernetes API 提供了一个名为 `BOOKMARK` 的监视事件。
+这是一种特殊的事件,用于标记客户端请求的给定 `resourceVersion` 的所有更改都已发送。
+代表 `BOOKMARK` 事件的文档属于请求所请求的类型,但仅包含一个 `.metadata.resourceVersion` 字段。例如:
```console
GET /api/v1/namespaces/test/pods?watch=1&resourceVersion=10245&allowWatchBookmarks=true
@@ -224,11 +351,13 @@ Content-Type: application/json
```
-通过在 watch 请求中设置 `allowWatchBookmarks=true` 选项,可以请求 `bookmark`
-事件,但是客户端不能假定服务器端会按某特定时间间隔返回书签事件,甚至也不能
-假定服务器一定会发送 `bookmark` 事件。
+作为客户端,你可以在 **watch** 请求中设置 `allowWatchBookmarks=true` 查询参数来请求 `BOOKMARK` 事件,
+但你不应假设书签会在任何特定时间间隔返回,即使要求时,客户端也不能假设 API 服务器会发送任何 `BOOKMARK` 事件。
-在较大规模的集群中,检视某些资源类型的集合时可能会返回较大体量的响应数据,对
-服务器和客户端都会造成影响。例如,某集群可能包含数万个 Pod,每个 Pod 的 JSON
-编码都有 1-2 KB 的大小。返回所有名字空间的全部 Pod 时,其结果可能体量很大
-(10-20 MB)且耗用大量的服务器资源。
-从 Kubernetes 1.9 开始,服务器支持将单一的大体量集合请求分解成多个小数据块
-同时还保证整个请求的一致性的能力。
-各个数据块可以按顺序返回,进而降低请求的尺寸,允许面向用户的客户端以增量形式
-呈现返回结果,改进系统响应效果。
+在较大规模集群中,检索某些资源类型的集合可能会导致非常大的响应,从而影响服务器和客户端。
+例如,一个集群可能有数万个 Pod,每个 Pod 大约相当于 2 KiB 的编码 JSON。
+跨所有命名空间检索所有 Pod 可能会导致非常大的响应 (10-20MB) 并消耗大量服务器资源。
-为了用分块的形式返回一个列表,集合请求上可以设置两个新的参数 `limit` 和
-`continue`,并且所有 list 操作的返回结果列表的 `metadata` 字段中会包含一个
-新的 `continue` 字段。
-客户端应该将 `limit` 设置为希望在每个数据块中收到的结果个数上限,而服务器则
-会在结果中至多返回 `limit` 个资源并在集合中还有更多资源的时候包含一个
-`continue` 值。客户端在下次请求时则可以将此 `continue` 值传递给服务器,
-告知后者要从何处开始返回结果的下一个数据块。
-通过重复这一操作直到服务器端返回空的 `continue` 值,客户端可以受到结果的
-全集。
+如果你没有明确禁用 `APIListChunking` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/),
+Kubernetes API 服务器支持将单个大型集合请求分解为许多较小块的能力,同时保持总请求的一致性。
-与 watch 操作类似,`continue` 令牌也会在很短的时间(默认为 5 分钟)内过期,
+你可以请求 API 服务器通过使用页(Kubernetes 将其称为“块(Chunk)”)的方式来处理 **list**,
+完成单个集合的响应。
+要以块的形式检索单个集合,针对集合的请求支持两个查询参数 `limit` 和 `continue`,
+并且从集合元 `metadata` 字段中的所有 **list** 操作返回响应字段 `continue`。
+客户端应该指定他们希望在每个带有 `limit` 的块中接收的条目数上限,如果集合中有更多资源,
+服务器将在结果中返回 `limit` 资源并包含一个 `continue` 值。
+
+
+作为 API 客户端,你可以在下一次请求时将 `continue` 值传递给 API 服务器,
+以指示服务器返回下一页(_块_)结果。继续下去直到服务器返回一个空的 `continue` 值,
+你可以检索整个集合。
+
+
+与 **watch** 操作类似,`continue` 令牌也会在很短的时间(默认为 5 分钟)内过期,
并在无法返回更多结果时返回 `410 Gone` 代码。
这时,客户端需要从头开始执行上述检视操作或者忽略 `limit` 参数。
-例如,如果集群上有 1253 个 Pods,客户端希望每次收到包含至多 500 个 Pod 的
+例如,如果集群上有 1253 个 Pod,客户端希望每次收到包含至多 500 个 Pod 的
数据块,它应按下面的步骤来请求数据块:
1. 列举集群中所有 Pod,每次接收至多 500 个 Pods:
-```console
-GET /api/v1/pods?limit=500
----
-200 OK
-Content-Type: application/json
+ ```console
+ GET /api/v1/pods?limit=500
+ ---
+ 200 OK
+ Content-Type: application/json
-{
- "kind": "PodList",
- "apiVersion": "v1",
- "metadata": {
- "resourceVersion":"10245",
- "continue": "ENCODED_CONTINUE_TOKEN",
- ...
- },
- "items": [...] // returns pods 1-500
-}
-```
+ {
+ "kind": "PodList",
+ "apiVersion": "v1",
+ "metadata": {
+ "resourceVersion":"10245",
+ "continue": "ENCODED_CONTINUE_TOKEN",
+ ...
+ },
+ "items": [...] // returns pods 1-500
+ }
+ ```
2. 继续前面的调用,返回下一组 500 个 Pods:
-```console
-GET /api/v1/pods?limit=500&continue=ENCODED_CONTINUE_TOKEN
----
-200 OK
-Content-Type: application/json
+ ```console
+ GET /api/v1/pods?limit=500&continue=ENCODED_CONTINUE_TOKEN
+ ---
+ 200 OK
+ Content-Type: application/json
-{
- "kind": "PodList",
- "apiVersion": "v1",
- "metadata": {
- "resourceVersion":"10245",
- "continue": "ENCODED_CONTINUE_TOKEN_2",
- ...
- },
- "items": [...] // returns pods 501-1000
-}
-```
+ {
+ "kind": "PodList",
+ "apiVersion": "v1",
+ "metadata": {
+ "resourceVersion":"10245",
+ "continue": "ENCODED_CONTINUE_TOKEN_2",
+ ...
+ },
+ "items": [...] // returns pods 501-1000
+ }
+ ```
3. 继续前面的调用,返回最后 253 个 Pods:
-```console
-GET /api/v1/pods?limit=500&continue=ENCODED_CONTINUE_TOKEN_2
----
-200 OK
-Content-Type: application/json
+ ```console
+ GET /api/v1/pods?limit=500&continue=ENCODED_CONTINUE_TOKEN_2
+ ---
+ 200 OK
+ Content-Type: application/json
+ {
+ "kind": "PodList",
+ "apiVersion": "v1",
+ "metadata": {
+ "resourceVersion":"10245",
+ "continue": "", // continue token is empty because we have reached the end of the list
+ ...
+ },
+ "items": [...] // returns pods 1001-1253
+ }
+ ```
+
+
+请注意,集合的 `resourceVersion` 在每个请求中保持不变,
+这表明服务器正在向你显示 Pod 的一致快照。
+在版本 `10245` 之后创建、更新或删除的 Pod 将不会显示,
+除非你在没有继续令牌的情况下发出单独的 **list** 请求。
+这使你可以将大请求分成更小的块,然后对整个集合执行 **watch** 操作,而不会丢失任何更新。
+
+
+`remainingItemCount` 是集合中未包含在此响应中的后续项目的数量。
+如果 **list** 请求包含标签或字段{{< glossary_tooltip text="选择器" term_id="selector">}} ,
+则剩余项目的数量是未知的,并且 API 服务器在其响应中不包含 `remainingItemCount` 字段。
+如果 **list** 是完整的(因为它没有分块,或者因为这是最后一个块),没有更多的剩余项目,
+API 服务器在其响应中不包含 `remainingItemCount` 字段。
+`remainingItemCount` 的用途是估计集合的大小。
+
+
+## 集合 {#collections}
+
+在 Kubernetes 术语中,你从 **list** 中获得的响应是一个“集合(Collections)”。
+然而,Kubernetes 为不同类型资源的集合定义了具体类型。
+集合的类别名是针对资源类别的,并附加了 `List`。
+
+当你查询特定类型的 API 时,该查询返回的所有项目都属于该类型。
+例如,当你 **list** Service 对象时,集合响应的 `kind` 设置为
+[`ServiceList`](/zh/docs/reference/kubernetes-api/service-resources/service-v1/#ServiceList);
+该集合中的每个项目都代表一个 Service。例如:
+
+```
+GET /api/v1/services
+```
+```yaml
{
- "kind": "PodList",
+ "kind": "ServiceList",
"apiVersion": "v1",
"metadata": {
- "resourceVersion":"10245",
- "continue": "", // continue token is empty because we have reached the end of the list
- ...
+ "resourceVersion": "2947301"
},
- "items": [...] // returns pods 1001-1253
-}
+ "items": [
+ {
+ "metadata": {
+ "name": "kubernetes",
+ "namespace": "default",
+...
+ "metadata": {
+ "name": "kube-dns",
+ "namespace": "kube-system",
+...
```
-注意 list 操作的 `resourceVersion` 在每个请求中都设置的是同一个数值,
-这表明服务器要向我们展示一个一致的 Pods 快照视图。
-在版本 `10245` 之后创建、更新或删除的 Pods 都不会显示出来,除非用户发出
-list 请求时不指定 `continue` 令牌。
-这一设计使得客户端能够将较大的响应切分为较小的数据块,且能够对较大的集合
-执行监视动作而不会错失任何更新事件。
+Kubernetes API 中定义了数十种集合类型(如 `PodList`、`ServiceList` 和 `NodeList`)。
+你可以从 [Kubernetes API](/zh/docs/reference/kubernetes-api/) 文档中获取有关每种集合类型的更多信息。
+
+一些工具,例如 `kubectl`,对于 Kubernetes 集合的表现机制与 Kubernetes API 本身略有不同。
+因为 `kubectl` 的输出可能包含来自 API 级别的多个 **list** 操作的响应,
+所以 `kubectl` 使用 `kind: List` 表示项目列表。例如:
+
+```shell
+kubectl get services -A -o yaml
+```
+```yaml
+apiVersion: v1
+kind: List
+metadata:
+ resourceVersion: ""
+ selfLink: ""
+items:
+- apiVersion: v1
+ kind: Service
+ metadata:
+ creationTimestamp: "2021-06-03T14:54:12Z"
+ labels:
+ component: apiserver
+ provider: kubernetes
+ name: kubernetes
+ namespace: default
+...
+- apiVersion: v1
+ kind: Service
+ metadata:
+ annotations:
+ prometheus.io/port: "9153"
+ prometheus.io/scrape: "true"
+ creationTimestamp: "2021-06-03T14:54:14Z"
+ labels:
+ k8s-app: kube-dns
+ kubernetes.io/cluster-service: "true"
+ kubernetes.io/name: CoreDNS
+ name: kube-dns
+ namespace: kube-system
+```
+
+
+{{< note >}}
+请记住,Kubernetes API 没有名为 `List` 的 `kind`。
+
+`kind: List` 是一个客户端内部实现细节,用于处理可能属于不同类别的对象的集合。
+在自动化或其他代码中避免依赖 `kind: List`。
+{{< /note >}}
## 以表格形式接收资源 {#receiving-resources-as-tables}
-`kubectl get` 命令的输出是一个包含一个或多个资源的简单表格形式。
+当你执行`kubectl get` 时,默认的输出格式是特定资源类型的一个或多个实例的简单表格形式。
过去,客户端需要重复 `kubectl` 中所实现的表格输出和描述输出逻辑,以执行
简单的对象列表操作。
-这一方法在处理某些对象时,需要引入不容忽视的逻辑。
-此外,[API 聚合](/zh/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/)
-和[定制资源](/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources/)
-所提供的资源类型都是编译时不可预知的。这意味着,客户端必须针对无法
-识别的类型提供通用的实现逻辑。
+该方法的一些限制包括处理某些对象时的不可忽视逻辑。
+此外,API 聚合或第三方资源提供的类型在编译时是未知的。
+这意味着必须为客户端无法识别的类型提供通用实现。
为了避免上述各种潜在的局限性,客户端可以请求服务器端返回对象的表格(Table)
表现形式,从而将打印输出的特定细节委托给服务器。
Kubernetes API 实现标准的 HTTP 内容类型(Content Type)协商:为 `GET` 调用
-传入一个值为 `application/json;as=Table;g=meta.k8s.io;v=v1beta1` 的 `Accept`
+传入一个值为 `application/json;as=Table;g=meta.k8s.io;v=v1` 的 `Accept`
头部即可请求服务器以 Table 的内容类型返回对象。
例如,以 Table 格式列举集群中所有 Pods:
```console
GET /api/v1/pods
-Accept: application/json;as=Table;g=meta.k8s.io;v=v1beta1
+Accept: application/json;as=Table;g=meta.k8s.io;v=v1
---
200 OK
Content-Type: application/json
{
"kind": "Table",
- "apiVersion": "meta.k8s.io/v1beta1",
+ "apiVersion": "meta.k8s.io/v1",
...
"columnDefinitions": [
...
@@ -409,11 +703,11 @@ Content-Type: application/json
```
-对于在服务器上不存在定制的 Table 定义的 API 资源类型而言,服务器会返回
+对于在控制平面上不存在定制的 Table 定义的 API 资源类型而言,服务器会返回
一个默认的 Table 响应,其中包含资源的 `name` 和 `creationTimestamp` 字段。
```console
@@ -425,7 +719,7 @@ Content-Type: application/json
{
"kind": "Table",
- "apiVersion": "meta.k8s.io/v1beta1",
+ "apiVersion": "meta.k8s.io/v1",
...
"columnDefinitions": [
{
@@ -443,45 +737,65 @@ Content-Type: application/json
```
-`kube-apiserver` 从 1.10 版本开始提供 Table 响应。
-因此,并非所有 API 资源类型都支持 Table 响应,尤其是使用客户端访问较老的集群时。
-如果客户端需要能够处理所有资源类型,或者有可能需要与较老的集群交互,
-则需要在其 `Accept` 头部设定多个内容类型值,以便可以回退到非表格形式的 JSON
-表示。
+并非所有 API 资源类型都支持 Table 响应;
+例如,{{< glossary_tooltip term_id="CustomResourceDefinition" text="CustomResourceDefinitions" >}} 可能没有定义字段到表的映射,
+[扩展核心 Kubernetes API](/zh/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/)
+的 APIService 可能根本不提供 Table 响应。
+如果你正在实现使用 Table 信息并且必须针对所有资源类型(包括扩展)工作的客户端,
+你应该在 `Accept` 请求头中指定多种内容类型的请求。例如:
```
-Accept: application/json;as=Table;g=meta.k8s.io;v=v1beta1, application/json
+Accept: application/json;as=Table;g=meta.k8s.io;v=v1, application/json
```
## 资源的其他表示形式 {#alternate-representations-of-resources}
-默认情况下,Kubernetes 返回 JSON 序列化的的对象并设定内容类型为
-`application/json`。这是 API 的默认序列化格式。
-不过,客户端也可出于大规模环境中更佳性能的需求而请求对象的更为高效的 Protobuf
-表现形式。
-Kubernetes API 实现了标准的 HTTP 内容类型协商:为 `GET` 调用传递一个 `Accept`
-头部来请求服务器以所指定的内容类型返回对象,同时在通过 `PUT` 或 `POST` 调用
-向服务器发送 Protobuf 格式的对象时提供 `Content-Type` 头部。
-服务器会能够支持所请求的格式时返回 `Content-Type` 头部,并在所提供的内容类型
-不合法时返回 `406 Not acceptable(无法接受)` 错误。
+默认情况下,Kubernetes 返回序列化为 JSON 的对象,内容类型为 `application/json`。
+这是 API 的默认序列化格式。
+但是,客户端可能会使用更有效的 [Protobuf 表示](#protobuf-encoding) 请求这些对象,
+以获得更好的大规模性能。 Kubernetes API 实现标准的 HTTP 内容类型协商:
+带有 `Accept` 请求头部的 `GET` 调用会请求服务器尝试以你的首选媒体类型返回响应,
+而将 Protobuf 中的对象发送到服务器以进行 `PUT` 或 `POST` 调用意味着你必须适当地设置
+`Content-Type` 请求头。
-请参阅 API 文档了解每个 API 所支持的内容类型。
+
+如果支持请求的格式,服务器将返回带有 `Content-Type` 标头的响应,
+如果不支持你请求的媒体类型,则返回 `406 Not Acceptable` 错误。
+所有内置资源类型都支持 `application/json` 媒体类型。
+
+有关每个 API 支持的内容类型列表,请参阅 Kubernetes [API 参考](/zh/docs/reference/kubernetes-api/)。
例如:
@@ -490,59 +804,68 @@ Kubernetes API 实现了标准的 HTTP 内容类型协商:为 `GET` 调用传
-->
1. 以 Protobuf 格式列举集群上的所有 Pods:
-```console
-GET /api/v1/pods
-Accept: application/vnd.kubernetes.protobuf
----
-200 OK
-Content-Type: application/vnd.kubernetes.protobuf
+ ```console
+ GET /api/v1/pods
+ Accept: application/vnd.kubernetes.protobuf
+ ---
+ 200 OK
+ Content-Type: application/vnd.kubernetes.protobuf
-... binary encoded PodList object
-```
+ ... binary encoded PodList object
+ ```
2. 通过向服务器发送 Protobuf 编码的数据创建 Pod,但请求以 JSON 形式接收响应:
-```console
-POST /api/v1/namespaces/test/pods
-Content-Type: application/vnd.kubernetes.protobuf
-Accept: application/json
-... binary encoded Pod object
----
-200 OK
-Content-Type: application/json
+ ```console
+ POST /api/v1/namespaces/test/pods
+ Content-Type: application/vnd.kubernetes.protobuf
+ Accept: application/json
+ ... binary encoded Pod object
+ ---
+ 200 OK
+ Content-Type: application/json
-{
- "kind": "Pod",
- "apiVersion": "v1",
- ...
-}
-```
+ {
+ "kind": "Pod",
+ "apiVersion": "v1",
+ ...
+ }
+ ```
-并非所有 API 资源类型都支持 Protobuf,尤其是那些通过定制资源定义(CRD)或通过
-API 扩展而加入的资源。如果客户端必须能够处理所有资源类型,则应在其 `Accept`
-头部指定多种内容类型以便可以回退到 JSON 格式:
+并非所有 API 资源类型都支持 Protobuf;具体来说,
+Protobuf 不适用于定义为 {{< glossary_tooltip term_id="CustomResourceDefinition" text="CustomResourceDefinitions" >}}
+或通过{{< glossary_tooltip text="聚合层" term_id="aggregation-layer" >}}提供服务的资源。
+作为客户端,如果你可能需要使用扩展类型,则应在请求 `Accept` 请求头中指定多种内容类型以支持回退到 JSON。
+例如:
```console
Accept: application/vnd.kubernetes.protobuf, application/json
```
-### Protobuf encoding
+### Kubernetes Protobuf encoding {#protobuf-encoding}
Kubernetes 使用封套形式来对 Protobuf 响应进行编码。
封套外层由 4 个字节的特殊数字开头,便于从磁盘文件或 etcd 中辩识 Protobuf
@@ -612,22 +935,34 @@ An encoded Protobuf message with the following IDL:
```
+{{< note >}}
收到 `application/vnd.kubernetes.protobuf` 格式响应的客户端在响应与预期的前缀
不匹配时应该拒绝响应,因为将来的版本可能需要以某种不兼容的方式更改序列化格式,
并且这种更改是通过变更前缀完成的。
+{{< /note >}}
## 资源删除 {#resource-deletion}
-资源删除要经过两个阶段:1) 终止(finalization),和 2)去除。
+当你 **delete** 资源时,操作将分两个阶段进行。
-```json
+1. 终结(finalization)
+2. 移除
+
+
+```yaml
{
"kind": "ConfigMap",
"apiVersion": "v1",
@@ -639,56 +974,63 @@ Resources are deleted in two phases: 1) finalization, and 2) removal.
```
-当客户端首先删除某资源时,其 `.metadata.deletionTimestamp` 会被设置为当前时间。
-一旦 `.metadata.deletionTimestamp` 被设置,则对终结器(finalizers)执行动作
-的外部控制器就可以在任何时候、以任何顺序执行其清理工作。
-这里不强调顺序是因为很可能带来 `.metadata.finalizers` 被锁定的风险。
-`.metadata.finalizers` 是一个共享的字段,任何具有相关权限的主体都可以对其
-执行重排序的操作。如果终结器列表要按顺序处理,则很可能导致负责列表中第一个
-终结器的组件要等待负责列表中排序靠后的终结器的组件的信号(可能是字段值变更、
-外部系统或者其他形式),从而导致死锁行为。
-在不对终结器顺序作强制要求的情况下,终结器可以自行排序,且不会因为其在列表
-中的顺序而引入任何不稳定因素。
+当客户端第一次发送 **delete** 请求删除资源时,`.metadata.deletionTimestamp` 设置为当前时间。
+一旦设置了 `.metadata.deletionTimestamp`,
+作用于终结器的外部控制器可以在任何时间以任何顺序开始执行它们的清理工作。
+
+终结器之间 **不存在** 强制的执行顺序,因为这会带来卡住 `.metadata.finalizers` 的重大风险。
+
+`.metadata.finalizers` 字段是共享的:任何有权限的参与者都可以重新排序。
+如果终结器列表是按顺序处理的,那么这可能会导致这样一种情况:
+在列表中负责第一个终结器的组件正在等待列表中稍后负责终结器的组件产生的某些信号
+(字段值、外部系统或其他),从而导致死锁。
+
+如果没有强制排序,终结者可以在它们之间自由排序,并且不易受到列表中排序变化的影响。
当最后一个终结器也被移除时,资源才真正从 etcd 中移除。
## 单个资源 API {#single-resource-api}
-API 动词 GET、CREATE、UPDATE、PATCH、DELETE 和 PROXY 仅支持单个资源。
-这些支持单一资源的动词不支持以有序或无序列表甚或事务的形式同时提交给
-多个资源。
-包括 kubectl 在内的客户端将解析资源的列表,并执行单一资源的 API 请求。
+Kubernetes API 动词 **get**、**create**、**apply**、**update**、**patch**、**delete** 和 **proxy** 仅支持单一资源。
+这些具有单一资源支持的动词不支持在有序或无序列表或事务中一起提交多个资源。
-API 动词 LIST 和 WATCH 支持获取多个资源,而 DELETECOLLECTION 支持删除多个
-资源。
+当客户端(包括 kubectl)对一组资源进行操作时,客户端会发出一系列单资源 API 请求,
+然后在需要时聚合响应。
+
+相比之下,Kubernetes API 动词 **list** 和 **watch** 允许获取多个资源,
+而 **deletecollection** 允许删除多个资源。
-修改性质的动词(`POST`、`PUT`、`PATCH` 和 `DELETE`)可以支持 _试运行(dry
-run)_ 模式的请求。试运行模式可帮助通过典型的请求阶段(准入控制链、合法性
-检查、合并冲突)来评估请求,只是最终的对象不会写入存储。请求的响应主体与
-非试运行模式下的响应尽可能接近。系统会保证试运行模式的请求不会被写入到存储
-中,也不会产生其他副作用。
+当你使用可以修改资源的 HTTP 动词(`POST`、`PUT`、`PATCH` 和 `DELETE`)时,
+你可以在 _试运行(dry run)_ 模式下提交你的请求。
+试运行模式有助于通过典型的请求阶段(准入链、验证、合并冲突)评估请求,直到将对象持久化到存储中。
+请求的响应正文尽可能接近非试运行响应。Kubernetes 保证试运行请求不会被持久化存储或产生任何其他副作用。
### 发起试运行请求 {#make-a-dry-run-request}
-通过设置 `dryRun` 查询参数可以触发试运行模式。此参数是一个字符串,以枚举值
-的形式工作且可接受的值只有:
+通过设置 `dryRun` 查询参数触发试运行。此参数是一个字符串,用作枚举,唯一可接受的值是:
-* `All`:每个阶段被会正常运行,除了最后的存储阶段。准入控制器会被运行来检查请求
- 是否合法,变更性(Mutating)控制器会变更请求,`PATCH` 请求也会触发合并操作,
- 对象字段的默认值也会被设置,且基于模式定义的合法性检查也会被执行。
- 所生成的变更不会被写入到下层的持久性存储中,但本来会写入到数据库中的最终对象
- 会和正常的状态代码一起被返回给用户。如果请求会触发准入控制器而该准入控制器
- 带有一定的副作用,则请求会失败而不是冒险产生不希望的副作用。
- 所有的内置准入控制器插件都支持试运行模式。此外,准入控制 Webhook 也可在其
- [配置对象](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#webhook-v1beta1-admissionregistration-k8s-io)
- 中通过将 `sideEffects` 字段设置为 "None" 来声明自身不会产生副作用。
- 如果某 Webhook 确实会产生副作用,那么 `sideEffects` 字段应该设置为 "NoneOnDryRun",
- 并且 Webhook 应该被更改以支持 AdmissionReview 中的 `dryRun` 字段,从而避免
- 在试运行时产生副作用。
+[未设置值]
+: 允许副作用。你可以使用 `?dryRun` 或 `?dryRun&pretty=true` 之类的查询字符串请求此操作。
+ 响应是最终会被持久化的对象,或者如果请求不能被满足则会出现一个错误。
-* 空字符串(也即默认值):保留默认的修改行为。
+`All`
+: 每个阶段都正常运行,除了防止副作用的最终存储阶段。
-例如:
+
+当你设置 `?dryRun=All` 时,将运行任何相关的{{< glossary_tooltip text="准入控制器" term_id="admission-controller" >}},
+验证准入控制器检查经过变更的请求,针对 `PATCH` 请求执行合并、设置字段默认值等操作,并进行模式验证。
+更改不会持久化到底层存储,但本应持久化的最终对象仍会与正常状态代码一起返回给用户。
+
+
+如果请求的非试运行版本会触发具有副作用的准入控制器,则该请求将失败,而不是冒不希望的副作用的风险。
+所有内置准入控制插件都支持试运行。
+此外,准入 Webhook 还可以设置[配置对象](/zh/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#webhook-v1beta1-admissionregistration-k8s-io)
+的 `sideEffects` 字段为 `None`,借此声明它们没有副作用。
+
+
+{{< note >}}
+如果 webhook 确实有副作用,则应该将 `sideEffects` 字段设置为 “NoneOnDryRun”。
+如果还修改了 webhook 以理解 AdmissionReview 中的 DryRun 字段,
+并防止对标记为试运行的任何请求产生副作用,则该更改是适当的。
+{{< /note >}}
+
+
+这是一个使用 `?dryRun=All` 的试运行请求的示例:
```console
POST /api/v1/namespaces/test/pods?dryRun=All
@@ -745,26 +1127,55 @@ Accept: application/json
```
响应会与非试运行模式请求的响应看起来相同,只是某些生成字段的值可能会不同。
+
+### 生成值 {#generated-values}
+
+对象的某些值通常是在对象被写入数据库之前生成的。很重要的一点是不要依赖试运行
+请求为这些字段所设置的值,因为试运行模式下所得到的这些值与真实请求所获得的
+值很可能不同。这类字段有:
+
+* `name`:如果设置了 `generateName` 字段,则 `name` 会获得一个唯一的随机名称
+* `creationTimestamp` / `deletionTimestamp`:记录对象的创建/删除时间
+* `UID`:[唯一标识](/zh/docs/concepts/overview/working-with-objects/names/#uids)对象,
+ 取值随机生成(非确定性)
+* `resourceVersion`: 跟踪对象的持久化(存储)版本
+* 变更性准入控制器所设置的字段
+* 对于 `Service` 资源:`kube-apiserver` 为 `Service` 对象分配的端口和 IP 地址
+
### 试运行的授权 {#dry-run-authorization}
-试运行和非试运行请求的鉴权是完全相同的。因此,要发起一个试运行请求,用户必须
-被授权执行非试运行请求。
+试运行和非试运行请求的鉴权是完全相同的。因此,要发起一个试运行请求,
+你必须被授权执行非试运行请求。
-例如,要在 Deployment 对象上试运行 `PATCH` 操作,你必须具有对 Deployment 执行
-`PATCH` 操作的访问权限,如下面的 RBAC 规则所示:
+例如,要在 Deployment 对象上试运行 **patch** 操作,你必须具有对 Deployment 执行 **patch** 操作的访问权限,
+如下面的 {{< glossary_tooltip text="RBAC" term_id="rbac">}} 规则所示:
```yaml
rules:
@@ -778,267 +1189,306 @@ See [Authorization Overview](/docs/reference/access-authn-authz/authorization/).
-->
参阅[鉴权概述](/zh/docs/reference/access-authn-authz/authorization/)以了解鉴权细节。
-
-### 生成的值 {#generated-values}
-
-对象的某些值通常是在对象被写入数据库之前生成的。很重要的一点是不要依赖试运行
-请求为这些字段所设置的值,因为试运行模式下所得到的这些值与真实请求所获得的
-值很可能不同。这类字段有:
-
-* `name`:如果设置了 `generateName` 字段,则 `name` 会获得一个唯一的随机名称
-* `creationTimestamp`/`deletionTimestamp`:记录对象的创建/删除时间
-* `UID`:唯一性标识对象,取值随机生成(非确定性)
-* `resourceVersion`: 跟踪对象的持久化(存储)版本
-* 变更性准入控制器所设置的字段
-* 对于 `Service` 资源:`kube-apiserver` 为 `v1.Service` 对象分配的端口和 IP
-
## 服务器端应用 {#server-side-apply}
-{{< feature-state for_k8s_version="v1.16" state="beta" >}}
-
-从 Kubernetes v1.18 开始,可以启用[服务器端应用](/zh/docs/reference/using-api/server-side-apply/)功能
-特性,启用该特性后,控制面会跟踪所有新创建的对象的托管字段。服务器端应用提供了一种简洁的模式来管理字段冲突,提供服务器端的 `Apply` 和 `Update` 操作,并取代了
-`kubectl apply` 的客户端功能。有关该特性的详细描述,请参见[服务器端应用](/zh/docs/reference/using-api/server-side-apply/)章节
+Kubernetes 的[服务器端应用](/zh/docs/reference/using-api/server-side-apply/)功能允许控制平面跟踪新创建对象的托管字段。
+服务端应用为管理字段冲突提供了清晰的模式,提供了服务器端 `Apply` 和 `Update` 操作,
+并替换了 `kubectl apply` 的客户端功能。
+
+服务端应用的 API 动词是 **apply**。有关详细信息,
+请参阅[服务器端应用](/zh/docs/reference/using-api/server-side-apply/)。
## 资源版本 {#resource-versions}
-资源版本采用字符串来表达,用来标示对象的服务器端内部版本。
-客户端可以使用资源版本来判定对象是否被更改,或者在读取、列举或监视资源时
-用来表达数据一致性需求。
-客户端必需将资源版本视为不透明的对象,将其原封不动地传递回服务器端。
-例如,客户端一定不能假定资源版本是某种数值标识,也不可以对两个资源版本值
-进行比较看其是否相同(也就是不可以比较两个版本值以判断其中一个比另一个
-大或小)。
+资源版本是标识服务器内部对象版本的字符串。
+客户端可以使用资源版本来确定对象何时更改,
+或者在获取、列出和监视资源时表达数据一致性要求。
+资源版本必须被客户端视为不透明的,并且未经修改地传回服务器。
+
+你不能假设资源版本是数字的或可排序的。
+API 客户端只能比较两个资源版本的相等性(这意味着你不能比较资源版本的大于或小于关系)。
-### `metadata` 中的 `resourceVersion` {#resourceVersion-in-metadata}
+### metadata 中的 `resourceVersion` {#resourceVersion-in-metadata}
-客户端可以在资源中看到资源版本信息,这里的资源包括从服务器返回的 Watch 事件
-以及 list 操作响应:
+客户端在资源中查找资源版本,这些资源包括来自用于 **watch** 的响应流资源,或者使用 **list** 枚举的资源。
[v1.meta/ObjectMeta](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#objectmeta-v1-meta) - 资源
的 `metadata.resourceVersion` 值标明该实例上次被更改时的资源版本。
[v1.meta/ListMeta](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#listmeta-v1-meta) - 资源集合
-(即 list 操作的响应)的 `metadata.resourceVersion` 所标明的是 list 响应被构造
-时的资源版本。
+即 **list** 操作的响应)的 `metadata.resourceVersion` 所标明的是 list
+响应被构造时的资源版本。
-### `resourceVersion` 参数 {#the-resourceversion-parameter}
+### 查询字符串中的 `resourceVersion` 参数 {#the-resourceversion-parameter}
-GET、LIST 和 WATCH 操作都支持 `resourceVersion` 参数。
+**get**、**list** 和 **watch** 操作支持 `resourceVersion` 参数。
+从 v1.19 版本开始,Kubernetes API 服务器支持 **list** 请求的 `resourceVersionMatch` 参数。
-参数的具体含义取决于所执行的操作和所给的 `resourceVersion` 值:
+API 服务器根据你请求的操作和 `resourceVersion` 的值对 `resourceVersion` 参数进行不同的解释。
+如果你设置 `resourceVersionMatch` 那么这也会影响匹配发生的方式。
-对于 GET 和 LIST 而言,资源版本的语义为:
-**GET:**
+
+### **get** 和 **list** 语义
+
+对于 **get** 和 **list** 而言,`resourceVersion`的语义为:
+
+**get:**
| resourceVersion 未设置 | resourceVersion="0" | resourceVersion="\<非零值\>" |
-|------------------------|---------------------|----------------------------------------|
+|-----------------------|---------------------|----------------------------------------|
| 最新版本 | 任何版本 | 不老于给定版本 |
-**LIST:**
+**list:**
-v1.19 及以上版本的 API 服务器支持 `resourceVersionMatch` 参数,用以确定如何对
-LIST 调用应用 resourceVersion 值。
-强烈建议在为 LIST 调用设置了 `resourceVersion` 时也设置 `resourceVersionMatch`。
-如果 `resourceVersion` 未设置,则 `resourceVersionMatch` 是不允许设置的。
-为了向后兼容,客户端必须能够容忍服务器在某些场景下忽略 `resourceVersionMatch` 的行为:
+从 v1.19 版本开始,Kubernetes API 服务器支持 **list** 请求的 `resourceVersionMatch` 参数。
+如果同时设置 `resourceVersion` 和 `resourceVersionMatch`,
+则 `resourceVersionMatch` 参数确定 API 服务器如何解释 `resourceVersion`。
-
-- 当设置 `resourceVersionMatch=NotOlderThan` 且指定了 `limit` 时,客户端必须能够
- 处理 HTTP 410 "Gone" 响应。例如,客户端可以使用更新一点的 `resourceVersion`
- 来重试,或者回退到 `resourceVersion=""` (即允许返回任何版本)。
-
-- 当设置了 `resourceVersionMatch=Exact` 且未指定 `limit` 时,客户端必须验证
- 响应数据中 `ListMeta` 的 `resourceVersion` 与所请求的 `resourceVersion` 匹配,
- 并处理二者可能不匹配的情况。例如,客户端可以重试设置了 `limit` 的请求。
+在 **list** 请求上设置 `resourceVersion` 时,你应该始终设置 `resourceVersionMatch` 参数。
+但是,请准备好处理响应的 API 服务器不知道 `resourceVersionMatch` 并忽略它的情况。
除非你对一致性有着非常强烈的需求,使用 `resourceVersionMatch=NotOlderThan`
同时为 `resourceVersion` 设定一个已知值是优选的交互方式,因为与不设置
`resourceVersion` 和 `resourceVersionMatch` 相比,这种配置可以取得更好的
集群性能和可扩缩性。后者需要提供带票选能力的读操作。
-
{{< table caption="list 操作的 resourceVersionMatch 与分页参数" >}}
| resourceVersionMatch 参数 | 分页参数 | resourceVersion 未设置 | resourceVersion="0" | resourceVersion="\<非零值\>" |
|-----------------------------------------|---------------------------------|-------------------------|-----------------------------------------|----------------------------------|
-| resourceVersionMatch 未设置 | limit 未设置 | 最新版本 | 任意版本 | 不老于指定版本 |
-| resourceVersionMatch 未设置 | limit=\, continue 未设置 | 最新版本 | 任意版本 | 精确匹配 |
-| resourceVersionMatch 未设置 | limit=\, continue=\ | 从 token 开始、精确匹配 | 非法请求,视为从 token 开始、精确匹配 | 非法请求,返回 HTTP `400 Bad Request` |
-| resourceVersionMatch=Exact [1] | limit 未设置 | 非法请求 | 非法请求 | 精确匹配 |
-| resourceVersionMatch=Exact [1] | limit=\, continue 未设置 | 非法请求 | 非法请求 | 精确匹配 |
-| resourceVersionMatch=NotOlderThan [1] | limit 未设置 | 非法请求 | 任意版本 | 不老于指定版本 |
-| resourceVersionMatch=NotOlderThan [1] | limit=\, continue 未设置 | 非法请求 | 任意版本 | 不老于指定版本 |
+| _未设置_ | _limit 未设置_ | 最新版本 | 任意版本 | 不老于指定版本 |
+| _未设置_ | limit=\, _continue 未设置_ | 最新版本 | 任意版本 | 精确匹配 |
+| _未设置_ | limit=\, continue=\ | 从 token 开始、精确匹配 | 非法请求,视为从 token 开始、精确匹配 | 非法请求,返回 HTTP `400 Bad Request` |
+| `resourceVersionMatch=Exact` [1] | _limit 未设置_ | 非法请求 | 非法请求 | 精确匹配 |
+| `resourceVersionMatch=Exact` [1] | limit=\, _continue 未设置_ | 非法请求 | 非法请求 | 精确匹配 |
+| `resourceVersionMatch=NotOlderThan` [1] | _limit 未设置_ | 非法请求 | 任意版本 | 不老于指定版本 |
+| `resourceVersionMatch=NotOlderThan` [1] | limit=\, _continue 未设置_ | 非法请求 | 任意版本 | 不老于指定版本 |
{{< /table >}}
-**脚注:**
-
-[1] 如果服务器无法正确处理 `resourceVersionMatch` 参数,其行为与未设置该参数相同。
-
+
+{{< note >}}
+如果你的集群的 API 服务器不支持 `resourceVersionMatch` 参数,
+则行为与你未设置它时相同。
+{{< /note >}}
+**get** 和 **list** 的语义是:
-- **Most Recent:** Return data at the most recent resource version. The returned data must be
- consistent (i.e. served from etcd via a quorum read).
-- **Any:** Return data at any resource version. The newest available resource version is preferred,
+
-GET 和 LIST 操作的语义含义如下:
+任意版本
+: 返回任何资源版本的数据。最新可用资源版本优先,但不需要强一致性;
+ 可以提供任何资源版本的数据。由于分区或过时的缓存,
+ 请求可能返回客户端先前观察到的更旧资源版本的数据,特别是在高可用性配置中。
+ 不能容忍这种情况的客户不应该使用这种语义。
-- **最新版本:** 返回资源版本为最新的数据。所返回的数据必须一致
- (通过票选读操作从 etcd 中取出)。
-- **任意版本:** 返回任意资源版本的数据。优选最新可用的资源版本,不过不能保证
- 强一致性;返回的数据可能是任何资源版本的。请求返回的数据有可能是客户端以前
- 看到过的很老的资源版本。尤其在某些高可用配置环境中,网络分区或者高速缓存
- 未被更新等状态都可能导致这种状况。不能容忍这种不一致性的客户端不应采用此
- 语义。
-
-- **不老于指定版本:** 返回至少比所提供的 `resourceVersion` 还要新的数据。
- 优选最新的可用数据,不过最终提供的可能是不老于所给 `resourceVersion` 的任何版本。
- 对于发给能够正确处理 `resourceVersionMatch` 参数的服务器的 LIST 请求,此语义
- 保证 `ListMeta` 中的 `resourceVersion` 不老于请求的 `resourceVersion`,不过
- 不对列表条目之 `ObjectMeta` 的 `resourceVersion` 提供任何保证。
- 这是因为 `ObjectMeta.resourceVersion` 所跟踪的是列表条目对象上次更新的时间,
- 而不是对象被返回时是否是最新。
+最新版本
+: 返回最新资源版本的数据。
+ 返回的数据必须一致(详细说明:通过仲裁读取从 etcd 提供)。
-- **确定版本:** 返回精确匹配所给资源版本的数据。如果所指定的 resourceVersion
- 的数据不可用,服务器会响应 HTTP 410 "Gone"。
- 对于发送给能够正确处理 `resourceVersionMatch` 参数的服务器的 LIST 请求而言,
- 此语义会保证 ListMeta 中的 `resourceVersion` 与所请求的 `resourceVersion`
- 匹配, 不过不对列表条目之 `ObjectMeta` 的 `resourceVersion` 提供任何保证。
- 这是因为 `ObjectMeta.resourceVersion` 所跟踪的是列表条目对象上次更新的时间,
- 而不是对象被返回时是否是最新。
-
-- **Continue 令牌、精确匹配:** 返回原先带分页参数的 LIST 调用中指定的资源版本的数据。
- 在最初的带分页参数的 LIST 调用之后,所有分页式的 LIST 调用都使用所返回的 Continue
- 令牌来跟踪最初提供的资源版本,
+
+不老于指定版本
+: 返回数据至少与提供的 `resourceVersion` 一样新。
+ 最新的可用数据是首选,但可以提供不早于提供的 `resourceVersion` 的任何数据。
+ 对于对遵守 `resourceVersionMatch` 参数的服务器的 **list** 请求,
+ 这保证了集合的 `.metadata.resourceVersion` 不早于请求的 `resourceVersion`,
+ 但不保证该集合中任何项目的 `.metadata.resourceVersion`。
+
+
+
+精确匹配
+: 以提供的确切资源版本返回数据。如果提供的 `resourceVersion` 不可用,
+ 则服务器以 HTTP 410 “Gone”响应。对于对支持 `resourceVersionMatch` 参数的服务器的 **list** 请求,
+ 这可以保证集合的 `.metadata.resourceVersion` 与你在查询字符串中请求的 `resourceVersion` 相同。
+ 该保证不适用于该集合中任何项目的 `.metadata.resourceVersion`。
+
+从 token 开始、精确匹配
+: 返回初始分页 **list** 调用的资源版本的数据。
+ 返回的 _Continue 令牌_ 负责跟踪最初提供的资源版本,最初提供的资源版本用于在初始分页 **list** 之后的所有分页 **list** 中。
+
+
+
+{{< note >}}
+当你 **list** 资源并收到集合响应时,
+响应包括集合的[元数据](/zh/docs/reference/generated/kubernetes-api/v1.21/#listmeta-v1-meta)
+以及该集合中每个项目的[对象元数据](/zh/docs/reference/generated/kubernetes-api/v1.21/#listmeta-v1-meta)。
+对于在集合响应中找到的单个对象,`.metadata.resourceVersion` 跟踪该对象的最后更新时间,
+而不是对象在服务时的最新程度。
+{{< /note >}}
+
+
+
+当使用 `resourceVersionMatch=NotOlderThan` 并设置了限制时,
+客户端必须处理 HTTP 410 “Gone” 响应。
+例如,客户端可能会使用更新的 `resourceVersion` 重试或回退到 `resourceVersion=""`。
+
+当使用 `resourceVersionMatch=Exact` 并且未设置限制时,
+客户端必须验证集合的 `.metadata.resourceVersion` 是否与请求的 `resourceVersion` 匹配,
+并处理不匹配的情况。例如,客户端可能会退回到设置了限制的请求。
+
+
+
-对于 WATCH 操作而言,资源版本的语义如下:
+### **watch** 语义
-**WATCH:**
+对于 watch 操作而言,资源版本的语义如下:
+
+**watch:**
-WATCH 操作语义的含义如下:
+**watch** 操作语义的含义如下:
-- **读取状态并从最新版本开始:** 从最新的资源版本开始 WATCH 操作。这里的
- 最新版本必须是一致的(即通过票选读操作从 etcd 中取出)。为了建立初始状态,
- WATCH 首先会处理一组合成的 "Added" 事件,这些事件涵盖在初始资源版本中存在
- 的所有资源实例。
- 所有后续的 WATCH 事件都是关于 WATCH 开始时所处资源版本之后发生的变更。
+读取状态并从任意版本开始
+: {{< caution >}}
+ 以这种方式初始化的监视可能会返回任意陈旧的数据。
+ 请在使用之前查看此语义,并尽可能支持其他语义。
+ {{< /caution >}}
+ 在任何资源版本开始 **watch**;首选可用的最新资源版本,但不是必需的。允许任何起始资源版本。
+ 由于分区或过时的缓存,**watch** 可能从客户端之前观察到的更旧的资源版本开始,
+ 特别是在高可用性配置中。不能容忍这种明显倒带的客户不应该用这种语义启动 **watch**。
+ 为了建立初始状态,**watch** 从起始资源版本中存在的所有资源实例的合成 “添加” 事件开始。
+ 以下所有监视事件都针对在 **watch** 开始的资源版本之后发生的所有更改。
-- **读取状态并从任意版本开始:** 警告:通过这种方式初始化的 WATCH 操作可能会
- 返回任何状态的停滞数据。请在使用此语义之前执行复核,并在可能的情况下采用其他
- 语义。此语义会从任意资源版本开始执行 WATCH 操作,优选最新的可用的资源版本,
- 不过不是必须的;采用任何资源版本作为起始版本都是被允许的。
- WATCH 操作有可能起始于客户端已经观测到的很老的版本。在高可用配置环境中,因为
- 网络分裂或者高速缓存未及时更新的原因都会造成此现象。
- 如果客户端不能容忍这种不一致性,就不要使用此语义来启动 WATCH 操作。
- 为了建立初始状态,WATCH 首先会处理一组合成的 "Added" 事件,这些事件涵盖在
- 初始资源版本中存在的所有资源实例。
- 所有后续的 WATCH 事件都是关于 WATCH 开始时所处资源版本之后发生的变更。
+读取状态并从最新版本开始
+: 从最近的资源版本开始 **watch**,
+ 它必须是一致的(详细说明:通过仲裁读取从 etcd 提供服务)。
+ 为了建立初始状态,**watch** 从起始资源版本中存在的所有资源实例的合成 “添加” 事件开始。
+ 以下所有监视事件都针对在 **watch** 开始的资源版本之后发生的所有更改。
-- **从指定版本开始:** 从某确切资源版本开始执行 WATCH 操作。WATCH 事件都是
- 关于 WATCH 开始时所处资源版本之后发生的变更。与前面两种语义不同,WATCH 操作
- 开始的时候不会生成或处理为所提供资源版本合成的 "Added" 事件。
- 我们假定客户端既然能够提供确切资源版本,就应该已经拥有了起始资源版本对应的初始状态。
+从指定版本开始
+: 以确切的资源版本开始 **watcH**。监视事件适用于提供的资源版本之后的所有更改。
+ 与 “Get State and Start at Most Recent” 和 “Get State and Start at Any” 不同,
+ **watch** 不会以所提供资源版本的合成 “添加” 事件启动。
+ 由于客户端提供了资源版本,因此假定客户端已经具有起始资源版本的初始状态。
### "410 Gone" 响应 {#410-gone-responses}
@@ -1142,15 +1596,36 @@ reply with a `410 Gone` HTTP response.
### 不可用的资源版本 {#unavailable-resource-versions}
-服务器不必未无法识别的资源版本提供服务。针对无法识别的资源版本的 LIST 和 GET 请求
-可能会短暂等待,以期资源版本可用。如果所给的资源版本在一定的时间段内仍未变得
-可用,服务器应该超时并返回 `504 (Gateway Timeout)`,且可在响应中添加
-`Retry-After` 响应头部字段,标明客户端在再次尝试之前应该等待多少秒钟。
-目前,`kube-apiserver` 也能使用 `Too large resource version(资源版本过高)`
-消息来标识这类响应。针对某无法识别的资源版本的 WATCH 操作可能会无限期
-(直到请求超时)地等待下去,直到资源版本可用。
+服务器不需要提供无法识别的资源版本。
+如果你请求了 **list** 或 **get** API 服务器无法识别的资源版本,则 API 服务器可能会:
+* 短暂等待资源版本可用,如果提供的资源版本在合理的时间内仍不可用,
+ 则应超时并返回 `504 (Gateway Timeout)`;
+* 使用 `Retry-After` 响应标头进行响应,指示客户端在重试请求之前应等待多少秒。
+
+
+如果你请求 API 服务器无法识别的资源版本,
+kube-apiserver 还会使用 “Too large resource version” 消息额外标识其错误响应。
+
+如果你对无法识别的资源版本发出 **watch** 请求,
+API 服务器可能会无限期地等待(直到请求超时)资源版本变为可用。
diff --git a/content/zh/docs/reference/using-api/client-libraries.md b/content/zh/docs/reference/using-api/client-libraries.md
index cf6ec6dff0..6122638b9e 100644
--- a/content/zh/docs/reference/using-api/client-libraries.md
+++ b/content/zh/docs/reference/using-api/client-libraries.md
@@ -27,8 +27,8 @@ you do not need to implement the API calls and request/response types yourself.
You can use a client library for the programming language you are using.
-->
在使用 [Kubernetes REST API](/zh/docs/reference/using-api/) 编写应用程序时,
-您并不需要自己实现 API 调用和 “请求/响应” 类型。
-您可以根据自己的编程语言需要选择使用合适的客户端库。
+你并不需要自己实现 API 调用和 “请求/响应” 类型。
+你可以根据自己的编程语言需要选择使用合适的客户端库。
-客户端库通常为您处理诸如身份验证之类的常见任务。
+客户端库通常为你处理诸如身份验证之类的常见任务。
如果 API 客户端在 Kubernetes 集群中运行,大多数客户端库可以发现并使用 Kubernetes 服务帐户进行身份验证,
或者能够理解 [kubeconfig 文件](/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)
格式来读取凭据和 API 服务器地址。
diff --git a/content/zh/docs/reference/using-api/deprecation-guide.md b/content/zh/docs/reference/using-api/deprecation-guide.md
index 446fde8f4c..f088f3453a 100644
--- a/content/zh/docs/reference/using-api/deprecation-guide.md
+++ b/content/zh/docs/reference/using-api/deprecation-guide.md
@@ -34,6 +34,28 @@ deprecated API versions to newer and more stable API versions.
-->
## 各发行版本中移除的 API {#removed-apis-by-release}
+### v1.27
+
+
+**v1.27** 发行版本中将去除以下已弃用的 API 版本:
+
+#### CSIStorageCapacity {#csistoragecapacity-v127}
+
+
+**storage.k8s.io/v1beta1** API版本的 CSIStorageCapacity 将不再在 v1.27 提供。
+
+* 自 v1.24 版本起,迁移清单和 API 客户端使用 **storage.k8s.io/v1** API 版本
+* 所有现有的持久化对象都可以通过新的 API 访问
+* 没有需要额外注意的变更
+
### v1.26
**authorization.k8s.io/v1beta1** API 版本的 LocalSubjectAccessReview、
-SelfSubjectAccessReview、SubjectAccessReview 不在 v1.22 版本中继续提供。
+SelfSubjectAccessReview、SubjectAccessReview、SelfSubjectRulesReview 不在 v1.22 版本中继续提供。
* 迁移清单和 API 客户端使用 **authorization.k8s.io/v1** API 版本,此 API 从
v1.6 版本开始可用;
@@ -740,4 +762,3 @@ resource, check the Kubernetes [API reference](/docs/reference/kubernetes-api/).
-->
注意这种操作生成的结果中可能使用的默认值并不理想。
要进一步了解某个特定资源,可查阅 Kubernetes [API 参考](/zh/docs/reference/kubernetes-api/)。
-
diff --git a/content/zh/docs/reference/using-api/deprecation-policy.md b/content/zh/docs/reference/using-api/deprecation-policy.md
index 95e6c0c4e5..fc9ff0f8f3 100644
--- a/content/zh/docs/reference/using-api/deprecation-policy.md
+++ b/content/zh/docs/reference/using-api/deprecation-policy.md
@@ -142,37 +142,41 @@ might have to add an equivalent field or represent it as an annotation.
添加一个新的等效字段或者将其表现为一个注解。
-**规则 #3:给定类别的 API 版本在新的、稳定性未降低的 API 版本发布之前不可被废弃。**
+**规则 #3:给定类别的 API 版本不可被弃用以支持稳定性更差的 API 版本。**
-一个正式发布的(GA)API 版本可替换现有的正式 API 版本或 alpha、beta API 版本。
-Beta API 版本 *不可以* 替代正式的 API 版本。
+ * 一个正式发布的(GA)API 版本可替换 beta 或 alpha API 版本。
+ * Beta API 版本可以替换早期的 beta 和 alpha API 版本,但 **不可以** 替换正式的 API 版本。
+ * Alpha API 版本可以替换早期的 alpha API 版本,但 **不可以** 替换正式的或 beta API 版本。
-**规则 #4a:除了每类 API 版本中的最新版本,旧的 API 版本在其被宣布被废弃之后
-至少以下时长内仍需被支持:**
+**规则 #4a:最短 API 生命周期由 API 稳定性级别决定**
- * **GA:12 个月或者 3 个发布版本(取其较长者)**
- * **Beta: 9 个月或者 3 个发布版本(取其较长者)**
- * **Alpha: 0 个发布版本**
+ * **GA API 版本可以被标记为已弃用,但不得在 Kubernetes 的主要版本中删除**
+ * **Beta API 版本必须支持 9 个月或弃用后的 3 个版本(以较长者为准)**
+ * **Alpha API 版本可能会在任何版本中被删除,不另行通知**
-这里也包含了关于[最大支持 2 个发布版本的版本偏差](/zh/docs/setup/release/version-skew-policy/)
-的约定。
+这确保了 beta API 支持涵盖了[最多 2 个版本的支持版本偏差](/zh/releases/version-skew-policy/)。
+
+{{< note >}}
+
+目前没有删除正式版本 API 的 Kubernetes 主要版本修订计划。
+{{< /note >}}
+ v1 is deprecated in favor of v2, but will not be removed
v2beta2 已被弃用,发布说明中包含对应的 "action required(采取行动)" 说明
- v1 已被弃用,发布说明中包含对应的 "action required(采取行动)" 说明
+ v1 已被弃用,取而代之的是 v2,但不会被删除
@@ -400,23 +404,6 @@ API versions are supported in a series of subsequent releases.
-
- X+16
-
- v2、v1(已弃用)
- v2
-
-
-
- X+17
- v2
- v2
-
-
- v1 被删除,发布说明中包含对应的 "action required(采取行动)" 说明
-
-
-
@@ -448,7 +435,7 @@ Widget 资源会 X+8 发布版本之前(含 X+8)一直存在并可用。
Starting in Kubernetes v1.19, making an API request to a deprecated REST API endpoint:
1. Returns a `Warning` header (as defined in [RFC7234, Section 5.5](https://tools.ietf.org/html/rfc7234#section-5.5)) in the API response.
-2. Adds a `"k8s.io/deprecated":"true"` annotation to the [audit event](/docs/tasks/debug-application-cluster/audit/) recorded for the request.
+2. Adds a `"k8s.io/deprecated":"true"` annotation to the [audit event](/docs/tasks/debug/debug-cluster/audit/) recorded for the request.
3. Sets an `apiserver_requested_deprecated_apis` gauge metric to `1` in the `kube-apiserver`
process. The metric has labels for `group`, `version`, `resource`, `subresource` that can be joined
to the `apiserver_request_total` metric, and a `removed_release` label that indicates the
@@ -463,7 +450,7 @@ Starting in Kubernetes v1.19, making an API request to a deprecated REST API end
1. API 响应中会包含一个 `Warning` 头部字段(如 [RFC7234 5.5 节](https://tools.ietf.org/html/rfc7234#section-5.5)所定义);
2. 该请求会导致对应的
- [审计事件](/zh/docs/tasks/debug-application-cluster/audit/)
+ [审计事件](/zh/docs/tasks/debug/debug-cluster/audit/)
中会增加一个注解 `"k8s.io/deprecated":"true"`。
3. `kube-apiserver` 进程的 `apiserver_requested_deprecated_apis` 度量值会被
设置为 `1`。
diff --git a/content/zh/docs/setup/best-practices/certificates.md b/content/zh/docs/setup/best-practices/certificates.md
index f8a79245c0..2acb106748 100644
--- a/content/zh/docs/setup/best-practices/certificates.md
+++ b/content/zh/docs/setup/best-practices/certificates.md
@@ -1,7 +1,5 @@
---
title: PKI 证书和要求
-reviewers:
-- sig-cluster-lifecycle
content_type: concept
weight: 40
---
@@ -18,7 +16,7 @@ weight: 40
Kubernetes 需要 PKI 证书才能进行基于 TLS 的身份验证。如果你是使用
@@ -26,8 +24,6 @@ Kubernetes 需要 PKI 证书才能进行基于 TLS 的身份验证。如果你
则会自动生成集群所需的证书。你还可以生成自己的证书。
例如,不将私钥存储在 API 服务器上,可以让私钥更加安全。此页面说明了集群必需的证书。
-
-
-## 集群是如何使用证书的
+## 集群是如何使用证书的 {#how-certificates-are-used-by-your-cluster}
Kubernetes 需要 PKI 才能执行以下操作:
* Kubelet 的客户端证书,用于 API 服务器身份验证
+* Kubelet [服务端证书](/zh/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/#client-and-serving-certificates),
+ 用于 API 服务器与 Kubelet 的会话
* API 服务器端点的证书
* 集群管理员的客户端证书,用于 API 服务器身份认证
* API 服务器的客户端证书,用于和 Kubelet 的会话
@@ -59,7 +59,7 @@ Kubernetes 需要 PKI 才能执行以下操作:
* [前端代理](/zh/docs/tasks/extend-kubernetes/configure-aggregation-layer/) 的客户端及服务端证书
{{< note >}}
只有当你运行 kube-proxy 并要支持
@@ -75,34 +75,39 @@ etcd 还实现了双向 TLS 来对客户端和对其他对等节点进行身份
-## 证书存放的位置
+## 证书存放的位置 {#where-certificates-are-stored}
-如果你是通过 kubeadm 安装的 Kubernetes,所有证书都存放在 `/etc/kubernetes/pki` 目录下。本文所有相关的路径都是基于该路径的相对路径。
+假如通过 kubeadm 安装 Kubernetes,大多数证书都存储在 `/etc/kubernetes/pki`。
+本文档中的所有路径都是相对于该目录的,但用户账户证书除外,kubeadm 将其放在 `/etc/kubernetes` 中。
-## 手动配置证书
+## 手动配置证书 {#configure-certificates-manually}
-如果你不想通过 kubeadm 生成这些必需的证书,你可以通过下面两种方式之一来手动创建他们。
+如果你不想通过 kubeadm 生成这些必需的证书,你可以使用一个单一的根 CA
+来创建这些证书或者直接提供所有证书。
+参见[证书](/zh/docs/tasks/administer-cluster/certificates/)以进一步了解创建自己的证书机构。
+关于管理证书的更多信息,请参见[使用 kubeadm 进行证书管理](/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/)。
-### 单根 CA
+### 单根 CA {#single-root-ca}
你可以创建一个单根 CA,由管理员控制器它。该根 CA 可以创建多个中间 CA,并将所有进一步的创建委托给 Kubernetes。
+下面的例子说明了上表中所示的 CA 密钥和证书文件。
+
+```console
+/etc/kubernetes/pki/ca.crt
+/etc/kubernetes/pki/ca.key
+/etc/kubernetes/pki/etcd/ca.crt
+/etc/kubernetes/pki/etcd/ca.key
+/etc/kubernetes/pki/front-proxy-ca.crt
+/etc/kubernetes/pki/front-proxy-ca.key
+```
+
-### 所有的证书
+### 所有的证书 {#all-certificates}
如果你不想将 CA 的私钥拷贝至你的集群中,你也可以自己生成全部的证书。
需要这些证书:
-| 默认 CN | 父级 CA | O (位于 Subject 中) | 类型 | 主机 (SAN) |
+
+| 默认 CN | 父级 CA | O (位于 Subject 中) | 类型 | 主机 (SAN) |
+|-------------------------------|---------------------------|----------------|----------------------------------------|---------------------------------------------|
+| kube-etcd | etcd-ca | | server, client | ``, ``, `localhost`, `127.0.0.1` |
| kube-etcd-peer | etcd-ca | | server, client | ``, ``, `localhost`, `127.0.0.1` |
| kube-etcd-healthcheck-client | etcd-ca | | client | |
| kube-apiserver-etcd-client | etcd-ca | system:masters | client | |
@@ -144,17 +174,18 @@ Required certificates:
| front-proxy-client | kubernetes-front-proxy-ca | | client | |
[1]: 用来连接到集群的不同 IP 或 DNS 名
(就像 [kubeadm](/zh/docs/reference/setup-tools/kubeadm/) 为负载均衡所使用的固定
IP 或 DNS 名,`kubernetes`、`kubernetes.default`、`kubernetes.default.svc`、
`kubernetes.default.svc.cluster`、`kubernetes.default.svc.cluster.local`)。
-其中,`kind` 对应一种或多种类型的 [x509 密钥用途](https://godoc.org/k8s.io/api/certificates/v1beta1#KeyUsage):
+其中,`kind` 对应一种或多种类型的 [x509 密钥用途](https://pkg.go.dev/k8s.io/api/certificates/v1beta1#KeyUsage):
-### 证书路径
+### 证书路径 {#certificate-paths}
-证书应放置在建议的路径中(以便 [kubeadm](/zh/docs/reference/setup-tools/kubeadm/)使用)。无论使用什么位置,都应使用给定的参数指定路径。
+证书应放置在建议的路径中(以便 [kubeadm](/zh/docs/reference/setup-tools/kubeadm/)
+使用)。无论使用什么位置,都应使用给定的参数指定路径。
+
| 默认 CN | 建议的密钥路径 | 建议的证书路径 | 命令 | 密钥参数 | 证书参数 |
|------------------------------|------------------------------|-----------------------------|----------------|------------------------------|-------------------------------------------|
| etcd-ca | etcd/ca.key | etcd/ca.crt | kube-apiserver | | --etcd-cafile |
@@ -221,20 +271,65 @@ Same considerations apply for the service account key pair:
-->
注意事项同样适用于服务帐户密钥对:
+
| 私钥路径 | 公钥路径 | 命令 | 参数 |
|------------------------------|-----------------------------|-------------------------|--------------------------------------|
| sa.key | | kube-controller-manager | --service-account-private-key-file |
| | sa.pub | kube-apiserver | --service-account-key-file |
+
+下面的例子展示了自行生成所有密钥和证书时所需要提供的文件路径。
+这些路径基于[前面的表格](/zh/docs/setup/best-practices/certificates/#certificate-paths)。
+
+```console
+/etc/kubernetes/pki/etcd/ca.key
+/etc/kubernetes/pki/etcd/ca.crt
+/etc/kubernetes/pki/apiserver-etcd-client.key
+/etc/kubernetes/pki/apiserver-etcd-client.crt
+/etc/kubernetes/pki/ca.key
+/etc/kubernetes/pki/ca.crt
+/etc/kubernetes/pki/apiserver.key
+/etc/kubernetes/pki/apiserver.crt
+/etc/kubernetes/pki/apiserver-kubelet-client.key
+/etc/kubernetes/pki/apiserver-kubelet-client.crt
+/etc/kubernetes/pki/front-proxy-ca.key
+/etc/kubernetes/pki/front-proxy-ca.crt
+/etc/kubernetes/pki/front-proxy-client.key
+/etc/kubernetes/pki/front-proxy-client.crt
+/etc/kubernetes/pki/etcd/server.key
+/etc/kubernetes/pki/etcd/server.crt
+/etc/kubernetes/pki/etcd/peer.key
+/etc/kubernetes/pki/etcd/peer.crt
+/etc/kubernetes/pki/etcd/healthcheck-client.key
+/etc/kubernetes/pki/etcd/healthcheck-client.crt
+/etc/kubernetes/pki/sa.key
+/etc/kubernetes/pki/sa.pub
+```
+
-## 为用户帐户配置证书
+## 为用户帐户配置证书 {#configure-certificates-for-user-accounts}
你必须手动配置以下管理员帐户和服务帐户:
+
| 文件名 | 凭据名称 | 默认 CN | O (位于 Subject 中) |
|-------------------------|----------------------------|--------------------------------|---------------------|
| admin.conf | default-admin | kubernetes-admin | system:masters |
@@ -285,3 +380,14 @@ These files are used as follows:
| controller-manager.conf | kube-controller-manager | 必需添加到 `manifests/kube-controller-manager.yaml` 清单中 |
| scheduler.conf | kube-scheduler | 必需添加到 `manifests/kube-scheduler.yaml` 清单中 |
+
+下面是前表中所列文件的完整路径。
+
+```console
+/etc/kubernetes/admin.conf
+/etc/kubernetes/kubelet.conf
+/etc/kubernetes/controller-manager.conf
+/etc/kubernetes/scheduler.conf
+```
diff --git a/content/zh/docs/setup/best-practices/node-conformance.md b/content/zh/docs/setup/best-practices/node-conformance.md
index 942ff09aec..9fe0ce0d90 100644
--- a/content/zh/docs/setup/best-practices/node-conformance.md
+++ b/content/zh/docs/setup/best-practices/node-conformance.md
@@ -1,16 +1,12 @@
---
-reviewers:
-- Random-Liu
title: 校验节点设置
weight: 30
---
{{< toc >}}
@@ -18,13 +14,16 @@ weight: 30
-## 节点一致性测试
+## 节点一致性测试 {#node-conformance-test}
-*节点一致性测试* 是一个容器化的测试框架,提供了针对节点的系统验证和功能测试。
+**节点一致性测试** 是一个容器化的测试框架,提供了针对节点的系统验证和功能测试。
+测试验证节点是否满足 Kubernetes 的最低要求;通过测试的节点有资格加入 Kubernetes 集群。
-## 节点的前提条件
+## 节点的前提条件 {#node-prerequisite}
要运行节点一致性测试,节点必须满足与标准 Kubernetes 节点相同的前提条件。节点至少应安装以下守护程序:
@@ -51,7 +52,7 @@ To run node conformance test, a node must satisfy the same prerequisites as asta
-## 运行节点一致性测试
+## 运行节点一致性测试 {#running-node-conformance-test}
-1. 得出 kubelet 的 `--kubeconfig` 的值;例如:`--kubeconfig=/var/lib/kubelet/config.yaml`.
- 由于测试框架启动了本地控制平面来测试 kubelet, 因此使用 `http://localhost:8080`
+1. 得出 kubelet 的 `--kubeconfig` 的值;例如:`--kubeconfig=/var/lib/kubelet/config.yaml`。
+ 由于测试框架启动了本地控制平面来测试 kubelet,因此使用 `http://localhost:8080`
作为API 服务器的 URL。
一些其他的 kubelet 命令行参数可能会被用到:
- * `--pod-cidr`: 如果使用 `kubenet`, 需要为 Kubelet 任意指定一个 CIDR,
- 例如 `--pod-cidr=10.180.0.0/24`。
- * `--cloud-provider`: 如果使用 `--cloud-provider=gce`,需要移除这个参数
- 来运行测试。
+ * `--cloud-provider`:如果使用 `--cloud-provider=gce`,需要移除这个参数来运行测试。
2. 使用以下命令运行节点一致性测试:
```shell
- # $CONFIG_DIR 是您 Kubelet 的 pod manifest 路径。
+ # $CONFIG_DIR 是你 Kubelet 的 pod manifest 路径。
# $LOG_DIR 是测试的输出路径。
sudo docker run -it --rm --privileged --net=host \
-v /:/rootfs -v $CONFIG_DIR:$CONFIG_DIR -v $LOG_DIR:/var/result \
@@ -95,82 +99,87 @@ To run the node conformance test, perform the following steps:
-## 针对其他硬件体系结构运行节点一致性测试
+## 针对其他硬件体系结构运行节点一致性测试 {#running-node-conformance-test-for-other-architectures}
Kubernetes 也为其他硬件体系结构的系统提供了节点一致性测试的 Docker 镜像:
-| 架构 | 镜像 | |
-| ----- | :-------------: | ---- |
-| amd64 | node-test-amd64 | |
-| arm | node-test-arm | |
-| arm64 | node-test-arm64 | |
+ 架构 | 镜像 |
+--------|:-----------------:|
+ amd64 | node-test-amd64 |
+ arm | node-test-arm |
+ arm64 | node-test-arm64 |
-## 运行特定的测试
+## 运行特定的测试 {#running-selected-test}
-要运行特定测试,请使用您希望运行的测试的特定表达式覆盖环境变量 `FOCUS`。
+要运行特定测试,请使用你希望运行的测试的特定表达式覆盖环境变量 `FOCUS`。
```shell
sudo docker run -it --rm --privileged --net=host \
- -v /:/rootfs:ro -v $CONFIG_DIR:$CONFIG_DIR -v $LOG_DIR:/var/result \
- -e FOCUS=MirrorPod \ # Only run MirrorPod test
-k8s.gcr.io/node-test:0.2
+ -v /:/rootfs:ro -v $CONFIG_DIR:$CONFIG_DIR -v $LOG_DIR:/var/result \
+ -e FOCUS=MirrorPod \ # Only run MirrorPod test
+ k8s.gcr.io/node-test:0.2
```
-要跳过特定的测试,请使用您希望跳过的测试的常规表达式覆盖环境变量 `SKIP`。
+要跳过特定的测试,请使用你希望跳过的测试的常规表达式覆盖环境变量 `SKIP`。
```shell
sudo docker run -it --rm --privileged --net=host \
-v /:/rootfs:ro -v $CONFIG_DIR:$CONFIG_DIR -v $LOG_DIR:/var/result \
-e SKIP=MirrorPod \ # 运行除 MirrorPod 测试外的所有一致性测试内容
-k8s.gcr.io/node-test:0.2
+ k8s.gcr.io/node-test:0.2
```
-节点一致性测试是[节点端到端测试](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/devel/e2e-node-tests.md)的容器化版本。
+节点一致性测试是[节点端到端测试](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/e2e-node-tests.md)的容器化版本。
默认情况下,它会运行所有一致性测试。
-理论上,只要合理地配置容器和挂载所需的卷,就可以运行任何的节点端到端测试用例。 但是这里**强烈建议只运行一致性测试**,因为运行非一致性测试需要很多复杂的配置。
+理论上,只要合理地配置容器和挂载所需的卷,就可以运行任何的节点端到端测试用例。但是这里**强烈建议只运行一致性测试**,因为运行非一致性测试需要很多复杂的配置。
-## 注意
+## 注意事项 {#caveats}
-* 测试会在节点上遗留一些 Docker 镜像, 包括节点一致性测试本身的镜像和功能测试相关的镜像。
+* 测试会在节点上遗留一些 Docker 镜像,包括节点一致性测试本身的镜像和功能测试相关的镜像。
* 测试会在节点上遗留一些死的容器。这些容器是在功能测试的过程中创建的。
\ No newline at end of file
diff --git a/content/zh/docs/setup/production-environment/_index.md b/content/zh/docs/setup/production-environment/_index.md
index b3b1d0ce0c..0021a557f7 100644
--- a/content/zh/docs/setup/production-environment/_index.md
+++ b/content/zh/docs/setup/production-environment/_index.md
@@ -401,12 +401,12 @@ based on demand.
- *安装节点健康检查*:对于重要的工作负载,你会希望确保节点以及在节点上
运行的 Pod 处于健康状态。通过使用
- [Node Problem Detector](/zh/docs/tasks/debug-application-cluster/monitor-node-health/),
+ [Node Problem Detector](/zh/docs/tasks/debug/debug-cluster/monitor-node-health/),
你可以确保你的节点是健康的。
@@ -15,6 +15,8 @@ weight: 20
-本文列出了在 Linux 上结合 Kubernetes 使用的几种通用容器运行时的详细信息:
+
+Kubernetes {{< skew currentVersion >}} 要求你使用符合{{}} (CRI)的运行时。
+
+有关详细信息,请参阅 [CRI 版本支持](#cri-versions)。
+本页简要介绍在 Kubernetes 中几个常见的容器运行时的用法。
- [containerd](#containerd)
- [CRI-O](#cri-o)
-- [Docker](#docker)
+- [Docker Engine](#docker)
+- [Mirantis Container Runtime](#mcr)
-提示:对于其他操作系统,请查阅特定于你所使用平台的相关文档。
+ {{< note >}}
+提示:v1.24 之前的 Kubernetes 版本包括与 Docker Engine 的直接集成,使用名为 _dockershim_ 的组件。
+这种特殊的直接整合不再是 Kubernetes 的一部分
+(这次删除被作为 v1.20 发行版本的一部分[宣布](/zh/blog/2020/12/08/kubernetes-1-20-release-announcement/#dockershim-deprecation))。
+你可以阅读[检查 Dockershim 弃用是否会影响你](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/)
+以了解此删除可能会如何影响你。
+要了解如何使用 dockershim 进行迁移,请参阅[从 dockershim 迁移](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/)。
+
+如果你正在运行 v{{< skew currentVersion >}} 以外的 Kubernetes 版本,检查该版本的文档。
+{{< /note >}}
+
+
+
+
+## 安装和配置先决条件
+
+以下步骤将通用设置应用于 Linux 上的 Kubernetes 节点。
+
+如果你确定不需要某个特定设置,则可以跳过它。
+
+有关更多信息,请参阅[网络插件要求](/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#network-plugin-requirements)
+或特定容器运行时的文档。
+
+
+
+### 转发 IPv4 并让 iptables 看到桥接流量
+
+通过运行 `lsmod | grep br_netfilter` 来验证 `br_netfilter` 模块是否已加载。
+
+若要显式加载此模块,请运行 `sudo modprobe br_netfilter`。
+
+为了让 Linux 节点的 iptables 能够正确查看桥接流量,请确认 `sysctl` 配置中的
+`net.bridge.bridge-nf-call-iptables` 设置为 1。 例如:
+
+
+
+```bash
+cat <}} are used to constrain resources that are allocated to processes.
When [systemd](https://www.freedesktop.org/wiki/Software/systemd/) is chosen as the init
system for a Linux distribution, the init process generates and consumes a root control group
@@ -58,10 +169,10 @@ Systemd has a tight integration with cgroups and allocates a cgroup per systemd
to configure your container runtime and the kubelet to use `cgroupfs`. Using `cgroupfs` alongside
systemd means that there will be two different cgroup managers.
-->
-控制组用来约束分配给进程的资源。
+在 Linux 上,{{}}用于限制分配给进程的资源。
当某个 Linux 系统发行版使用 [systemd](https://www.freedesktop.org/wiki/Software/systemd/)
-作为其初始化系统时,初始化进程会生成并使用一个 root 控制组 (`cgroup`), 并充当 cgroup 管理器。
+作为其初始化系统时,初始化进程会生成并使用一个 root 控制组(`cgroup`),并充当 cgroup 管理器。
Systemd 与 cgroup 集成紧密,并将为每个 systemd 单元分配一个 cgroup。
你也可以配置容器运行时和 kubelet 使用 `cgroupfs`。
连同 systemd 一起使用 `cgroupfs` 意味着将有两个不同的 cgroup 管理器。
@@ -107,12 +218,13 @@ configuration, or reinstall it using automation.
或者使用自动化方案来重新安装。
-## Cgroup v2
+### Cgroup v2 {#cgroup-v2}
+
Cgroup v2 是 cgroup Linux API 的下一个版本。与 cgroup v1 不同的是,
Cgroup v2 只有一个层次结构,而不是每个控制器有一个不同的层次结构。
@@ -143,22 +255,36 @@ Kubernetes 仅支持使用同一 cgroup 版本来管理所有控制器。
如果 systemd 默认不使用 cgroup v2,你可以通过在内核命令行中添加
`systemd.unified_cgroup_hierarchy=1` 来配置系统去使用它。
+
+
+```shell
+# 此示例适用于使用 DNF 包管理器的 Linux 操作系统
+# 你的系统可能使用不同的方法来设置 Linux 内核使用的命令行。
+sudo dnf install -y grubby && \
sudo grubby \
--update-kernel=ALL \
--args="systemd.unified_cgroup_hierarchy=1"
```
-要应用配置,必须重新启动节点。
+如果更改内核的命令行,则必须重新启动节点才能使更改生效。
切换到 cgroup v2 时,用户体验不应有任何明显差异,
除非用户直接在节点上或在容器内访问 cgroup 文件系统。
@@ -170,11 +296,23 @@ In order to use it, cgroup v2 must be supported by the CRI runtime as well.
### 将 kubeadm 托管的集群迁移到 `systemd` 驱动
-如果你想迁移到现有 kubeadm 托管集群中的 `systemd` cgroup 驱动程序,
-遵循此[迁移指南](/zh/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver)。
+如果你希望将现有的由 kubeadm 管理的集群迁移到 `systemd` cgroup 驱动程序,
+请按照[配置 cgroup 驱动程序](/zh/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/)操作。
+
+## CRI 版本支持 {#cri-versions}
+
+你的容器运行时必须至少支持容器运行时接口的 v1alpha2。
+
+Kubernetes {{< skew currentVersion >}} 默认使用 v1 的 CRI API。如果容器运行时不支持 v1 API,
+则 kubelet 会回退到使用(已弃用的)v1alpha2 API。
-本节包含使用 containerd 作为 CRI 运行时的必要步骤。
+本节概述了使用 containerd 作为 CRI 运行时的必要步骤。
使用以下命令在系统上安装 Containerd:
-安装和配置的先决条件:
+
-```shell
-cat <
-安装 containerd:
-
-{{< tabs name="tab-cri-containerd-installation" >}}
+{{< tabs name="Finding your config.toml file" >}}
{{% tab name="Linux" %}}
-
-
-1. 从官方Docker仓库安装 `containerd.io` 软件包。可以在
- [安装 Docker 引擎](https://docs.docker.com/engine/install/#server)
- 中找到有关为各自的 Linux 发行版设置 Docker 存储库和安装 `containerd.io`
- 软件包的说明。
-
-
-2. 配置 containerd:
-
- ```shell
- sudo mkdir -p /etc/containerd
- containerd config default | sudo tee /etc/containerd/config.toml
- ```
-
-
-3. 重新启动 containerd:
-
- ```shell
- sudo systemctl restart containerd
- ```
-
-{{% /tab %}}
-{{% tab name="Windows (PowerShell)" %}}
-
-
-启动 Powershell 会话,将 `$Version` 设置为所需的版本(例如:`$Version=1.4.3`),
-然后运行以下命令:
-
-
-1. 下载 containerd:
-
- ```powershell
- curl.exe -L https://github.com/containerd/containerd/releases/download/v$Version/containerd-$Version-windows-amd64.tar.gz -o containerd-windows-amd64.tar.gz
- tar.exe xvf .\containerd-windows-amd64.tar.gz
- ```
-
-2. 提取并配置:
-
- ```powershell
- Copy-Item -Path ".\bin\" -Destination "$Env:ProgramFiles\containerd" -Recurse -Force
- cd $Env:ProgramFiles\containerd\
- .\containerd.exe config default | Out-File config.toml -Encoding ascii
-
- # 检查配置。根据你的配置,可能需要调整:
- # - sandbox_image (Kubernetes pause 镜像)
- # - cni bin_dir 和 conf_dir 位置
- Get-Content config.toml
-
- # (可选 - 不过强烈建议) 禁止 Windows Defender 扫描 containerd
- Add-MpPreference -ExclusionProcess "$Env:ProgramFiles\containerd\containerd.exe"
- ```
-
-3. 启动 containerd:
-
- ```powershell
- .\containerd.exe --register-service
- Start-Service containerd
- ```
-
+
+你可以在路径 `/etc/containerd/config.toml` 下找到此文件。
{{% /tab %}}
+{{< tab name="Windows" >}}
+
+你可以在路径 `C:\Program Files\containerd\config.toml` 下找到此文件。
+{{< /tab >}}
{{< /tabs >}}
+On Linux the default CRI socket for containerd is `/run/containerd/containerd.sock`.
+On Windows the default CRI endpoint is `npipe://./pipe/containerd-containerd`.
-#### 使用 `systemd` cgroup 驱动程序 {#containerd-systemd}
+#### Configuring the `systemd` cgroup driver {#containerd-systemd}
+-->
+在 Linux 上,containerd 的默认 CRI 套接字是 `/run/containerd/containerd.sock`。
+在 Windows 上,默认 CRI 端点是 `npipe://./pipe/containerd-containerd`。
+
+#### 配置 `systemd` cgroup 驱动程序 {#containerd-systemd}
-如果您应用此更改,请确保再次重新启动 containerd:
+如果你应用此更改,请确保重新启动 containerd:
```shell
sudo systemctl restart containerd
@@ -345,274 +395,26 @@ When using kubeadm, manually configure the
本节包含安装 CRI-O 作为容器运行时的必要步骤。
-使用以下命令在系统中安装 CRI-O:
-
-{{< note >}}
-
-CRI-O 的主要以及次要版本必须与 Kubernetes 的主要和次要版本相匹配。
-更多信息请查阅
-[CRI-O 兼容性列表](https://github.com/cri-o/cri-o#compatibility-matrix-cri-o--kubernetes)。
-{{< /note >}}
+
+要安装 CRI-O,请按照 [CRI-O 安装说明](https://github.com/cri-o/cri-o/blob/main/install.md#readme)执行操作。
+
+
+
+#### cgroup 驱动程序
-安装并配置前置环境:
-```shell
+CRI-O 默认使用 systemd cgroup 驱动程序,这对你来说可能工作得很好。要切换到 `cgroupfs` cgroup 驱动程序,
+请编辑 `/etc/crio/crio.conf` 或在 `/etc/crio/crio.conf.d/02-cgroup-manager.conf` 中放置一个插入式配置 ,例如:
-# 创建 .conf 文件以在启动时加载模块
-cat <}}
-{{% tab name="Debian" %}}
-
-
-在下列操作系统上安装 CRI-O, 使用下表中合适的值设置环境变量 `OS`:
-
-| 操作系统 | `$OS` |
-| ---------------- | ----------------- |
-| Debian Unstable | `Debian_Unstable` |
-| Debian Testing | `Debian_Testing` |
-
-
-然后,将 `$VERSION` 设置为与你的 Kubernetes 相匹配的 CRI-O 版本。
-例如,如果你要安装 CRI-O 1.20, 请设置 `VERSION=1.20`.
-你也可以安装一个特定的发行版本。
-例如要安装 1.20.0 版本,设置 `VERSION=1.20.0:1.20.0`.
-
-
-然后执行
-
-```shell
-cat <
-Then, set `$VERSION` to the CRI-O version that matches your Kubernetes version.
-For instance, if you want to install CRI-O 1.20, set `VERSION=1.20`.
-You can pin your installation to a specific release.
-To install version 1.20.0, set `VERSION=1.20:1.20.0`.
-
-
-Then run
--->
-在下列操作系统上安装 CRI-O, 使用下表中合适的值设置环境变量 `OS`:
-
-| 操作系统 | `$OS` |
-| ---------------- | ----------------- |
-| Ubuntu 20.04 | `xUbuntu_20.04` |
-| Ubuntu 19.10 | `xUbuntu_19.10` |
-| Ubuntu 19.04 | `xUbuntu_19.04` |
-| Ubuntu 18.04 | `xUbuntu_18.04` |
-
-
-然后,将 `$VERSION` 设置为与你的 Kubernetes 相匹配的 CRI-O 版本。
-例如,如果你要安装 CRI-O 1.20, 请设置 `VERSION=1.20`.
-你也可以安装一个特定的发行版本。
-例如要安装 1.20.0 版本,设置 `VERSION=1.20:1.20.0`.
-
-
-然后执行
-
-```shell
-cat <
-Then, set `$VERSION` to the CRI-O version that matches your Kubernetes version.
-For instance, if you want to install CRI-O 1.20, set `VERSION=1.20`.
-You can pin your installation to a specific release.
-To install version 1.20.0, set `VERSION=1.20:1.20.0`.
-
-
-Then run
--->
-在下列操作系统上安装 CRI-O, 使用下表中合适的值设置环境变量 `OS`:
-
-| 操作系统 | `$OS` |
-| ---------------- | ----------------- |
-| Centos 8 | `CentOS_8` |
-| Centos 8 Stream | `CentOS_8_Stream` |
-| Centos 7 | `CentOS_7` |
-
-
-然后,将 `$VERSION` 设置为与你的 Kubernetes 相匹配的 CRI-O 版本。
-例如,如果你要安装 CRI-O 1.20, 请设置 `VERSION=1.20`.
-你也可以安装一个特定的发行版本。
-例如要安装 1.20.0 版本,设置 `VERSION=1.20:1.20.0`.
-
-
-然后执行
-
-```shell
-sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/devel:kubic:libcontainers:stable.repo
-sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo
-sudo yum install cri-o
-```
-
-{{% /tab %}}
-
-{{% tab name="openSUSE Tumbleweed" %}}
-
-```shell
-sudo zypper install cri-o
-```
-{{% /tab %}}
-{{% tab name="Fedora" %}}
-
-
-将 `$VERSION` 设置为与你的 Kubernetes 相匹配的 CRI-O 版本。
-例如,如果要安装 CRI-O 1.20,请设置 `VERSION=1.20`。
-你可以用下列命令查找可用的版本:
-
-```shell
-sudo dnf module list cri-o
-```
-
-CRI-O 不支持在 Fedora 上固定到特定的版本。
-
-然后执行
-
-```shell
-sudo dnf module enable cri-o:$VERSION
-sudo dnf install cri-o --now
-```
-
-{{% /tab %}}
-{{< /tabs >}}
-
-
-启动 CRI-O:
-
-```shell
-sudo systemctl daemon-reload
-sudo systemctl enable crio --now
-```
-
-
-参阅[CRI-O 安装指南](https://github.com/cri-o/cri-o/blob/master/install.md)
-了解进一步的详细信息。
-
-
-#### cgroup 驱动
-
-默认情况下,CRI-O 使用 systemd cgroup 驱动程序。要切换到 `cgroupfs`
-驱动程序,或者编辑 `/ etc / crio / crio.conf` 或放置一个插件
-在 `/etc/crio/crio.conf.d/02-cgroup-manager.conf` 中的配置,例如:
```toml
[crio.runtime]
@@ -620,77 +422,79 @@ conmon_cgroup = "pod"
cgroup_manager = "cgroupfs"
```
-
-另请注意更改后的 `conmon_cgroup`,将 CRI-O 与 `cgroupfs` 一起使用时,
-必须将其设置为 `pod`。通常有必要保持 kubelet 的 cgroup 驱动程序配置
-(通常透过 kubeadm 完成)和 CRI-O 一致。
-
-### Docker
-
-1. 在每个节点上,根据[安装 Docker 引擎](https://docs.docker.com/engine/install/#server)
- 为你的 Linux 发行版安装 Docker。
- 你可以在此文件中找到最新的经过验证的 Docker 版本
- [依赖关系](https://git.k8s.io/kubernetes/build/dependencies.yaml)。
-
-
-2. 配置 Docker 守护程序,尤其是使用 systemd 来管理容器的 cgroup。
-
- ```shell
- sudo mkdir /etc/docker
- cat <}}
-
- 对于运行 Linux 内核版本 4.0 或更高版本,或使用 3.10.0-51 及更高版本的 RHEL
- 或 CentOS 的系统,`overlay2`是首选的存储驱动程序。
- {{< /note >}}
-
-
-3. 重新启动 Docker 并在启动时启用:
- ```shell
- sudo systemctl enable docker
- sudo systemctl daemon-reload
- sudo systemctl restart docker
- ```
+你还应该注意到 `conmon_cgroup` 被更改,当使用 CRI-O 和 `cgroupfs` 时,必须将其设置为值 `pod`。
+通常需要保持 kubelet 的 cgroup 驱动配置(通常通过 kubeadm 完成)和 CRI-O 同步。
+
+
+对于 CRI-O,CRI 套接字默认为 `/var/run/crio/crio.sock`。
+
+### Docker Engine {#docker}
+
+
{{< note >}}
+以下操作假设你使用 [`cri-dockerd`](https://github.com/Mirantis/cri-dockerd) 适配器来将
+Docker Engine 与 Kubernetes 集成。
+{{< /note >}}
+
+
+1. 在你的每个节点上,遵循[安装 Docker 引擎](https://docs.docker.com/engine/install/#server)指南为你的
+ Linux 发行版安装 Docker。
+
+
-有关更多信息,请参阅
+2. 按照源代码仓库中的说明安装 [`cri-dockerd`](https://github.com/Mirantis/cri-dockerd)。
+
+
+
+对于 `cri-dockerd`,默认情况下,CRI 套接字是 `/run/cri-dockerd.sock`。
+
+### Mirantis 容器运行时 {#mcr}
+
+
+[Mirantis Container Runtime](https://docs.mirantis.com/mcr/20.10/overview.html) (MCR) 是一种商用容器运行时,以前称为 Docker 企业版。
+你可以使用 MCR 中包含的开源 [`cri-dockerd`](https://github.com/Mirantis/cri-dockerd) 组件将 Mirantis Container Runtime 与 Kubernetes 一起使用。
+
+
+要了解有关如何安装 Mirantis Container Runtime 的更多信息,请访问 [MCR 部署指南](https://docs.mirantis.com/mcr/20.10/install.html)。
+
+检查名为 `cri-docker.socket` 的 systemd 单元以找出 CRI 套接字的路径。
+
+## {{% heading "whatsnext" %}}
+
+
+
+除了容器运行时,你的集群还需要有效的[网络插件](/zh/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-networking-model)。
-- [配置 Docker 守护程序](https://docs.docker.com/config/daemon/)
-- [使用 systemd 控制 Docker](https://docs.docker.com/config/daemon/systemd/)
-{{< /note >}}
diff --git a/content/zh/docs/setup/production-environment/tools/kops.md b/content/zh/docs/setup/production-environment/tools/kops.md
index 73b322da64..6ddc30913c 100644
--- a/content/zh/docs/setup/production-environment/tools/kops.md
+++ b/content/zh/docs/setup/production-environment/tools/kops.md
@@ -204,7 +204,7 @@ no longer get your clusters confused, you can share clusters with your colleague
and you can reach them without relying on remembering an IP address.
-->
kops 对集群名称有明显的要求:它应该是有效的 DNS 名称。这样一来,你就不会再使集群混乱,
-可以与同事明确共享集群,并且无需依赖记住 IP 地址即可访问群集。
+可以与同事明确共享集群,并且无需依赖记住 IP 地址即可访问集群。
+{{< note >}}
+
-{{< feature-state for_k8s_version="1.12" state="stable" >}}
+要重新配置已创建的集群,请参阅[重新配置 kubeadm 集群](/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-reconfigure)。
+{{< /note >}}
+
+
`ClusterConfiguration` 对象目前在 kubeadm 集群中是全局的。
这意味着你添加的任何标志都将应用于同一组件在不同节点上的所有实例。
-要在不同节点上为每个组件应用单独的配置,您可以使用[补丁](#patches)。
+要在不同节点上为每个组件应用单独的配置,你可以使用[补丁](#patches)。
{{< /note >}}
{{< note >}}
diff --git a/content/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm.md b/content/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm.md
index f6364dd169..cb8fac642f 100644
--- a/content/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm.md
+++ b/content/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm.md
@@ -1,11 +1,8 @@
---
-reviewers:
-- sig-cluster-lifecycle
title: 使用 kubeadm 创建集群
content_type: task
weight: 30
---
-
- 使用 `kubeadm`,你能创建一个符合最佳实践的最小化 Kubernetes 集群。事实上,你可以使用 `kubeadm` 配置一个通过 [Kubernetes 一致性测试](https://kubernetes.io/blog/2017/10/software-conformance-certification) 的集群。
+
+使用 `kubeadm`,你能创建一个符合最佳实践的最小化 Kubernetes 集群。
+事实上,你可以使用 `kubeadm` 配置一个通过
+[Kubernetes 一致性测试](https://kubernetes.io/blog/2017/10/software-conformance-certification)的集群。
`kubeadm` 还支持其他集群生命周期功能,
-例如 [启动引导令牌](/zh/docs/reference/access-authn-authz/bootstrap-tokens/) 和集群升级。
+例如[启动引导令牌](/zh/docs/reference/access-authn-authz/bootstrap-tokens/)和集群升级。
你还需要使用可以在新集群中部署特定 Kubernetes 版本对应的 `kubeadm`。
-
-[Kubernetes 版本及版本倾斜支持策略](/zh/docs/setup/release/version-skew-policy/#supported-versions) 适用于 `kubeadm` 以及整个 Kubernetes。
+[Kubernetes 版本及版本偏差策略](/zh/docs/setup/release/version-skew-policy/#supported-versions)适用于 `kubeadm` 以及整个 Kubernetes。
查阅该策略以了解支持哪些版本的 Kubernetes 和 `kubeadm`。
该页面是为 Kubernetes {{< param "version" >}} 编写的。
@@ -102,14 +102,12 @@ Any commands under `kubeadm alpha` are, by definition, supported on an alpha lev
根据定义,在 `kubeadm alpha` 下的所有命令均在 alpha 级别上受支持。
{{< /note >}}
-
-
-## 目标
+## 目标 {#objectives}
-## 操作指南
+## 操作指南 {#instructions}
-### 在你的主机上安装 kubeadm
+### 主机准备 {#preparing-the-hosts}
-查看 ["安装 kubeadm"](/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)。
+在所有主机上安装 {{< glossary_tooltip term_id="container-runtime" text="容器运行时" >}} 和 kubeadm。
+详细说明和其他前提条件,请参见[安装 kubeadm](/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)。
-### 准备所需的容器镜像
+### 准备所需的容器镜像 {#preparing-the-required-container-images}
-### 初始化控制平面节点
+### 初始化控制平面节点 {#initializing-your-control-plane-node}
+1. (推荐)如果计划将单个控制平面 kubeadm 集群升级成高可用,
+ 你应该指定 `--control-plane-endpoint` 为所有控制平面节点设置共享端点。
+ 端点可以是负载均衡器的 DNS 名称或 IP 地址。
+1. 选择一个 Pod 网络插件,并验证是否需要为 `kubeadm init` 传递参数。
+ 根据你选择的第三方网络插件,你可能需要设置 `--pod-network-cidr` 的值。
+ 请参阅[安装 Pod 网络附加组件](#pod-network)。
+
+
-1. (推荐)如果计划将单个控制平面 kubeadm 集群升级成高可用,
-你应该指定 `--control-plane-endpoint` 为所有控制平面节点设置共享端点。
-端点可以是负载均衡器的 DNS 名称或 IP 地址。
-1. 选择一个 Pod 网络插件,并验证是否需要为 `kubeadm init` 传递参数。
-根据你选择的第三方网络插件,你可能需要设置 `--pod-network-cidr` 的值。
-请参阅 [安装Pod网络附加组件](#pod-network)。
-1. (可选)从版本1.14开始,`kubeadm` 尝试使用一系列众所周知的域套接字路径来检测 Linux 上的容器运行时。
-要使用不同的容器运行时,
-或者如果在预配置的节点上安装了多个容器,请为 `kubeadm init` 指定 `--cri-socket` 参数。
-请参阅[安装运行时](/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-runtime)。
+1. (可选)`kubeadm` 试图通过使用已知的端点列表来检测容器运行时。
+ 使用不同的容器运行时或在预配置的节点上安装了多个容器运行时,请为 `kubeadm init` 指定 `--cri-socket` 参数。
+ 请参阅[安装运行时](/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-runtime)。
1. (可选)除非另有说明,否则 `kubeadm` 使用与默认网关关联的网络接口来设置此控制平面节点 API server 的广播地址。
-要使用其他网络接口,请为 `kubeadm init` 设置 `--apiserver-advertise-address=` 参数。
-要部署使用 IPv6 地址的 Kubernetes 集群,
-必须指定一个 IPv6 地址,例如 `--apiserver-advertise-address=fd00::101`
+ 要使用其他网络接口,请为 `kubeadm init` 设置 `--apiserver-advertise-address=` 参数。
+ 要部署使用 IPv6 地址的 Kubernetes 集群,
+ 必须指定一个 IPv6 地址,例如 `--apiserver-advertise-address=fd00::101`
-### 关于 apiserver-advertise-address 和 ControlPlaneEndpoint 的注意事项
+### 关于 apiserver-advertise-address 和 ControlPlaneEndpoint 的注意事项 {#considerations-about-apiserver-advertise-address-and-controlplaneendpoint}
这是一个示例映射:
-```
+```console
192.168.0.102 cluster-endpoint
```
@@ -285,7 +287,7 @@ kubeadm 不支持将没有 `--control-plane-endpoint` 参数的单个控制平
-### 更多信息
+### 更多信息 {#more-information}
-要使用配置文件配置 `kubeadm init` 命令,请参见[带配置文件使用 kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file)。
+要使用配置文件配置 `kubeadm init` 命令,
+请参见[带配置文件使用 kubeadm init](/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file)。
-要自定义控制平面组件,包括可选的对控制平面组件和 etcd 服务器的活动探针提供 IPv6 支持,请参阅[自定义参数](/zh/docs/setup/production-environment/tools/kubeadm/control-plane-flags/)。
+要自定义控制平面组件,包括可选的对控制平面组件和 etcd 服务器的活动探针提供 IPv6 支持,
+请参阅[自定义参数](/zh/docs/setup/production-environment/tools/kubeadm/control-plane-flags/)。
+
+
+要重新配置一个已经创建的集群,请参见
+[重新配置一个 kubeadm 集群](/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-reconfigure)。
kubeadm 对 `admin.conf` 中的证书进行签名时,将其配置为
`Subject: O = system:masters, CN = kubernetes-admin`。
`system:masters` 是一个例外的、超级用户组,可以绕过鉴权层(例如 RBAC)。
不要将 `admin.conf` 文件与任何人共享,应该使用 `kubeadm kubeconfig user`
命令为其他用户生成 kubeconfig 文件,完成对他们的定制授权。
+更多细节请参见[为其他用户生成 kubeconfig 文件](/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs#kubeconfig-additional-users)。
{{< /warning >}}
@@ -484,7 +497,7 @@ support [Network Policy](/docs/concepts/services-networking/network-policies/).
See a list of add-ons that implement the
[Kubernetes networking model](/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-networking-model).
-->
-请参阅实现 [Kubernetes 网络模型](/zh/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-networking-model) 的附加组件列表。
+请参阅实现 [Kubernetes 网络模型](/zh/docs/concepts/cluster-administration/networking/#how-to-implement-the-kubernetes-networking-model)的附加组件列表。
-安装 Pod 网络后,您可以通过在 `kubectl get pods --all-namespaces` 输出中检查 CoreDNS Pod 是否 `Running` 来确认其是否正常运行。
+安装 Pod 网络后,你可以通过在 `kubectl get pods --all-namespaces` 输出中检查 CoreDNS Pod 是否 `Running` 来确认其是否正常运行。
一旦 CoreDNS Pod 启用并运行,你就可以继续加入节点。
-如果您的网络无法正常工作或 CoreDNS 不在“运行中”状态,请查看 `kubeadm` 的
+如果你的网络无法正常工作或 CoreDNS 不在“运行中”状态,请查看 `kubeadm` 的
[故障排除指南](/zh/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/)。
+
+
+### 托管节点标签 {#managed-node-labels}
+
+
+默认情况下,kubeadm 启用 [NodeRestriction](/zh/docs/reference/access-authn-authz/admissiontrollers/#noderestriction)
+准入控制器来限制 kubelets 在节点注册时可以应用哪些标签。准入控制器文档描述 kubelet `--node-labels` 选项允许使用哪些标签。
+其中 `node-role.kubernetes.io/control-plane` 标签就是这样一个受限制的标签,
+kubeadm 在节点创建后使用特权客户端手动应用此标签。
+你可以使用一个有特权的 kubeconfig,比如由 kubeadm 管理的 `/etc/kubernetes/admin.conf`,
+通过执行 `kubectl label` 来手动完成操作。
-### 控制平面节点隔离
+### 控制平面节点隔离 {#control-plane-node-isolation}
默认情况下,出于安全原因,你的集群不会在控制平面节点上调度 Pod。
-如果你希望能够在控制平面节点上调度 Pod,
-例如用于开发的单机 Kubernetes 集群,请运行:
+如果你希望能够在控制平面节点上调度 Pod,例如单机 Kubernetes 集群,请运行:
```bash
-kubectl taint nodes --all node-role.kubernetes.io/master-
+kubectl taint nodes --all node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master-
```
输出看起来像:
-```
+```console
node "test-01" untainted
-taint "node-role.kubernetes.io/master:" not found
-taint "node-role.kubernetes.io/master:" not found
```
-这将从任何拥有 `node-role.kubernetes.io/master` taint 标记的节点中移除该标记,
+这将从任何拥有 `node-role.kubernetes.io/control-plane` 和
+`node-role.kubernetes.io/master` 污点的节点上移除该污点。
+
包括控制平面节点,这意味着调度程序将能够在任何地方调度 Pods。
+
+
+{{< note >}}
+`node-role.kubernetes.io/master` 污点已被废弃,kubeadm 将在 1.25 版本中停止使用它。
+{{< /note >}}
* SSH 到机器
* 成为 root (例如 `sudo su -`)
-* 运行 `kubeadm init` 输出的命令。例如:
+* 运行 `kubeadm init` 输出的命令,例如:
-```bash
-kubeadm join --token : --discovery-token-ca-cert-hash sha256:
-```
+ ```bash
+ kubeadm join --token : --discovery-token-ca-cert-hash sha256:
+ ```
如果没有令牌,可以通过在控制平面节点上运行以下命令来获取令牌:
-
```bash
kubeadm token list
```
@@ -605,10 +646,9 @@ TOKEN TTL EXPIRES USAGES DESCRIPTION
By default, tokens expire after 24 hours. If you are joining a node to the cluster after the current token has expired,
you can create a new token by running the following command on the control-plane node:
-->
-默认情况下,令牌会在24小时后过期。如果要在当前令牌过期后将节点加入集群,
+默认情况下,令牌会在 24 小时后过期。如果要在当前令牌过期后将节点加入集群,
则可以通过在控制平面节点上运行以下命令来创建新令牌:
-
```bash
kubeadm token create
```
@@ -652,7 +692,7 @@ The output should look something like:
-->
输出应类似于:
-```
+```console
[preflight] Running pre-flight checks
... (log output of join workflow) ...
@@ -672,11 +712,10 @@ nodes` when run on the control-plane node.
几秒钟后,当你在控制平面节点上执行 `kubectl get nodes`,你会注意到该节点出现在输出中。
-
{{< note >}}
由于集群节点通常是按顺序初始化的,CoreDNS Pods 很可能都运行在第一个控制面节点上。
为了提供更高的可用性,请在加入至少一个新节点后
@@ -686,7 +725,7 @@ with `kubectl -n kube-system rollout restart deployment coredns` after at least
-### (可选)从控制平面节点以外的计算机控制集群
+### (可选)从控制平面节点以外的计算机控制集群 {#optional-controlling-your-cluster-from-machines-other-than-the-control-plane-node}
{{< note >}}
-上面的示例假定为 root 用户启用了SSH访问。如果不是这种情况,
-你可以使用 `scp` 将 admin.conf 文件复制给其他允许访问的用户。
+上面的示例假定为 root 用户启用了 SSH 访问。如果不是这种情况,
+你可以使用 `scp` 将 `admin.conf` 文件复制给其他允许访问的用户。
admin.conf 文件为用户提供了对集群的超级用户特权。
该文件应谨慎使用。对于普通用户,建议生成一个你为其授予特权的唯一证书。
@@ -727,7 +766,7 @@ admin.conf 文件为用户提供了对集群的超级用户特权。
-### (可选)将API服务器代理到本地主机
+### (可选)将 API 服务器代理到本地主机 {#optional-proxying-api-server-to-localhost}
-你现在可以在本地访问API服务器 http://localhost:8001/api/v1
+你现在可以在本地访问 API 服务器 `http://localhost:8001/api/v1`。
-但是,如果要更干净地取消配置群集,
+但是,如果要更干净地取消配置集群,
则应首先[清空节点](/docs/reference/generated/kubectl/kubectl-commands#drain)并确保该节点为空,
然后取消配置该节点。
-
-### 删除节点
+### 删除节点 {#remove-the-node}
如果你想重新开始,只需运行 `kubeadm init` 或 `kubeadm join` 并加上适当的参数。
@@ -825,7 +863,7 @@ appropriate arguments.
-### 清理控制平面
+### 清理控制平面 {#clean-up-the-control-plane}
-有关此子命令及其选项的更多信息,请参见[`kubeadm reset`](/zh/docs/reference/setup-tools/kubeadm/kubeadm-reset/)参考文档。
-
+有关此子命令及其选项的更多信息,请参见 [`kubeadm reset`](/zh/docs/reference/setup-tools/kubeadm/kubeadm-reset/) 参考文档。
@@ -852,8 +889,8 @@ options.
* Verify that your cluster is running properly with [Sonobuoy](https://github.com/heptio/sonobuoy)
* See [Upgrading kubeadm clusters](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/)
for details about upgrading your cluster using `kubeadm`.
-* Learn about advanced `kubeadm` usage in the [kubeadm reference documentation](/docs/reference/setup-tools/kubeadm)
-* Learn more about Kubernetes [concepts](/docs/concepts/) and [`kubectl`](/docs/reference/kubectl/overview/).
+* Learn about advanced `kubeadm` usage in the [kubeadm reference documentation](/docs/reference/setup-tools/kubeadm/kubeadm)
+* Learn more about Kubernetes [concepts](/docs/concepts/) and [`kubectl`](/docs/reference/kubectl/).
* See the [Cluster Networking](/docs/concepts/cluster-administration/networking/) page for a bigger list
of Pod network add-ons.
* See the [list of add-ons](/docs/concepts/cluster-administration/addons/) to
@@ -866,8 +903,8 @@ options.
-->
* 使用 [Sonobuoy](https://github.com/heptio/sonobuoy) 验证集群是否正常运行。
* 有关使用 kubeadm 升级集群的详细信息,请参阅[升级 kubeadm 集群](/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/)。
-* 在 [kubeadm 参考文档](/zh/docs/reference/setup-tools/kubeadm)中了解有关高级 `kubeadm` 用法的信息。
-* 了解有关 Kubernetes [概念](/zh/docs/concepts/)和 [`kubectl`](/zh/docs/reference/kubectl/overview/) 的更多信息。
+* 在 [kubeadm 参考文档](/zh/docs/reference/setup-tools/kubeadm/kubeadm)中了解有关 `kubeadm` 进阶用法的信息。
+* 了解有关 Kubernetes [概念](/zh/docs/concepts/)和 [`kubectl`](/zh/docs/reference/kubectl/)的更多信息。
* 有关 Pod 网络附加组件的更多列表,请参见[集群网络](/zh/docs/concepts/cluster-administration/networking/)页面。
* 请参阅[附加组件列表](/zh/docs/concepts/cluster-administration/addons/)以探索其他附加组件,
包括用于 Kubernetes 集群的日志记录,监视,网络策略,可视化和控制的工具。
@@ -890,8 +927,8 @@ options.
* SIG Cluster Lifecycle mailing list:
[kubernetes-sig-cluster-lifecycle](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle)
-->
-* 有关 bugs, 访问 [kubeadm GitHub issue tracker](https://github.com/kubernetes/kubeadm/issues)
-* 有关支持, 访问
+* 有关漏洞,访问 [kubeadm GitHub issue tracker](https://github.com/kubernetes/kubeadm/issues)
+* 有关支持,访问
[#kubeadm](https://kubernetes.slack.com/messages/kubeadm/) Slack 频道
* General SIG 集群生命周期开发 Slack 频道:
[#sig-cluster-lifecycle](https://kubernetes.slack.com/messages/sig-cluster-lifecycle/)
@@ -899,35 +936,122 @@ options.
* SIG 集群生命周期邮件列表:
[kubernetes-sig-cluster-lifecycle](https://groups.google.com/forum/#!forum/kubernetes-sig-cluster-lifecycle)
-
-## 版本倾斜政策 {#version-skew-policy}
+## 版本偏差策略 {#version-skew-policy}
-版本 v{{< skew latestVersion >}} 的kubeadm 工具可以使用版本 v{{< skew latestVersion >}} 或 v{{< skew prevMinorVersion >}} 的控制平面部署集群。kubeadm v{{< skew latestVersion >}} 还可以升级现有的 kubeadm 创建的 v{{< skew prevMinorVersion >}} 版本的集群。
+虽然 kubeadm 允许所管理的组件有一定程度的版本偏差,
+但是建议你将 kubeadm 的版本与控制平面组件、kube-proxy 和 kubelet 的版本相匹配。
-由于我们不能预见未来,kubeadm CLI v{{< skew latestVersion >}} 可能会或可能无法部署 v{{< skew nextMinorVersion >}} 集群。
+
+### kubeadm 中的 Kubernetes 版本偏差 {#kubeadm-s-skew-against-the-kubernetes-version}
-这些资源提供了有关 kubelet 与控制平面以及其他 Kubernetes 组件之间受支持的版本倾斜的更多信息:
+kubeadm 可以与 Kubernetes 组件一起使用,这些组件的版本与 kubeadm 相同,或者比它大一个版本。
+Kubernetes 版本可以通过使用 `--kubeadm init` 的 `--kubernetes-version` 标志或使用 `--config` 时的
+[`ClusterConfiguration.kubernetesVersion`](/zh/docs/reference/configapi/kubeadm-config.v1beta3/)
+字段指定给 kubeadm。
+这个选项将控制 kube-apiserver、kube-controller-manager、kube-scheduler 和 kube-proxy 的版本。
-* Kubernetes [版本和版本偏斜政策](/zh/docs/setup/release/version-skew-policy/)
-* Kubeadm-specific [安装指南](/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-kubeadm-kubelet-and-kubectl)
+例子:
+* kubeadm 的版本为 {{< skew latestVersion >}}。
+* `kubernetesVersion` 必须为 {{< skew latestVersion >}} 或者 {{< skew prevMinorVersion >}}。
+
+### kubeadm 中 kubelet 的版本偏差 {#kubeadm-s-skew-against-the-kubelet}
+
+
+与 Kubernetes 版本类似,kubeadm 可以使用与 kubeadm 相同版本的 kubelet,
+或者比 kubeadm 老一个版本的 kubelet。
+
+
+例子:
+* kubeadm 的版本为 {{< skew latestVersion >}}
+* 主机上的 kubelet 版本必须为 {{< skew latestVersion >}} 或者 {{< skew prevMinorVersion >}}
+
+
+### kubeadm 支持的 kubeadm 的版本偏差 {#kubeadm-s-skew-against-kubeadm}
+
+
+kubeadm 命令在现有节点或由 kubeadm 管理的整个集群上的操作有一定限制。
+
+
+如果新的节点加入到集群中,用于 `kubeadm join` 的 kubeadm 二进制文件必须与用 `kubeadm init`
+创建集群或用 `kubeadm upgrade` 升级同一节点时所用的 kubeadm 版本一致。
+类似的规则适用于除了 `kubeadm upgrade` 以外的其他 kubeadm 命令。
+
+
+`kubeadm join` 的例子:
+* 使用 `kubeadm init` 创建集群时使用版本为 {{< skew latestVersion >}} 的 kubeadm。
+* 加入的节点必须使用版本为 {{< skew latestVersion >}} 的 kubeadm 二进制文件。
+
+
+对于正在升级的节点,所使用的的 kubeadm 必须与管理该节点的 kubeadm 具有相同的
+MINOR 版本或比后者新一个 MINOR 版本。
+
+
+`kubeadm upgrade` 的例子:
+* 用于创建或升级节点的 kubeadm 版本为 {{< skew prevMinorVersion >}}。
+* 用于升级节点的 kubeadm 版本必须为 {{< skew prevMinorVersion >}} 或 {{< skew latestVersion >}}。
+
+
+要了解更多关于不同 Kubernetes 组件之间的版本偏差,请参见
+[版本偏差策略](https://kubernetes.io/releases/version-skew-policy/)。
-
此处创建的集群具有单个控制平面节点,运行单个 etcd 数据库。
这意味着如果控制平面节点发生故障,你的集群可能会丢失数据并且可能需要从头开始重新创建。
-解决方法:
+解决方法:
* 使用多个控制平面节点。你可以阅读
- [可选的高可用性拓扑](/zh/docs/setup/production-environment/tools/kubeadm/ha-topology/) 选择集群拓扑提供的
- [高可用性](/zh/docs/setup/production-environment/tools/kubeadm/high-availability/).
+ [可选的高可用性拓扑](/zh/docs/setup/production-environment/tools/kubeadm/ha-topology/)选择集群拓扑提供的
+ [高可用性](/zh/docs/setup/production-environment/tools/kubeadm/high-availability/)。
-kubeadm deb/rpm 软件包和二进制文件是为 amd64,arm (32-bit),arm64,ppc64le 和 s390x 构建的遵循[多平台提案](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/multi-platform.md)。
+kubeadm deb/rpm 软件包和二进制文件是为 amd64、arm (32-bit)、arm64、ppc64le 和 s390x 构建的遵循[多平台提案](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/multi-platform.md)。
-
如果你在使用 kubeadm 时遇到困难,请查阅我们的[故障排除文档](/zh/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/)。
diff --git a/content/zh/docs/setup/production-environment/tools/kubeadm/dual-stack-support.md b/content/zh/docs/setup/production-environment/tools/kubeadm/dual-stack-support.md
index 38ec9a1dd7..987b392fee 100644
--- a/content/zh/docs/setup/production-environment/tools/kubeadm/dual-stack-support.md
+++ b/content/zh/docs/setup/production-environment/tools/kubeadm/dual-stack-support.md
@@ -81,10 +81,12 @@ kubeadm init --pod-network-cidr=10.244.0.0/16,2001:db8:42:0::/56 --service-cidr=
```
为了更便于理解,参看下面的名为 `kubeadm-config.yaml` 的 kubeadm
-[配置文件](/docs/reference/config-api/kubeadm-config.v1beta3/),
+[配置文件](/zh/docs/reference/config-api/kubeadm-config.v1beta3/),
该文件用于双协议栈控制面的主控制节点。
```yaml
@@ -138,14 +140,15 @@ The `--apiserver-advertise-address` flag does not support dual-stack.
Before joining a node, make sure that the node has IPv6 routable network interface and allows IPv6 forwarding.
-Here is an example kubeadm [configuration file](https://pkg.go.dev/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3) `kubeadm-config.yaml` for joining a worker node to the cluster.
+Here is an example kubeadm [configuration file](/docs/reference/config-api/kubeadm-config.v1beta3/)
+`kubeadm-config.yaml` for joining a worker node to the cluster.
-->
### 向双协议栈集群添加节点 {#join-a-node-to-dual-stack-cluster}
在添加节点之前,请确保该节点具有 IPv6 可路由的网络接口并且启用了 IPv6 转发。
下面的名为 `kubeadm-config.yaml` 的 kubeadm
-[配置文件](/docs/reference/config-api/kubeadm-config.v1beta3/)
+[配置文件](/zh/docs/reference/config-api/kubeadm-config.v1beta3/)
示例用于向集群中添加工作节点。
```yaml
@@ -164,10 +167,11 @@ nodeRegistration:
```
下面的名为 `kubeadm-config.yaml` 的 kubeadm
-[配置文件](/docs/reference/config-api/kubeadm-config.v1beta3/)
+[配置文件](/zh/docs/reference/config-api/kubeadm-config.v1beta3/)
示例用于向集群中添加另一个控制面节点。
```yaml
@@ -215,13 +219,14 @@ You can deploy a single-stack cluster that has the dual-stack networking feature
{{< /note >}}
为了更便于理解,参看下面的名为 `kubeadm-config.yaml` 的 kubeadm
-[配置文件](/docs/reference/config-api/kubeadm-config.v1beta3/)示例,
+[配置文件](/zh/docs/reference/config-api/kubeadm-config.v1beta3/)示例,
该文件用于单协议栈控制面节点。
-
```yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
diff --git a/content/zh/docs/setup/production-environment/tools/kubeadm/ha-topology.md b/content/zh/docs/setup/production-environment/tools/kubeadm/ha-topology.md
index fb41278c42..80e2abb7f5 100644
--- a/content/zh/docs/setup/production-environment/tools/kubeadm/ha-topology.md
+++ b/content/zh/docs/setup/production-environment/tools/kubeadm/ha-topology.md
@@ -1,18 +1,14 @@
---
-reviewers:
-- sig-cluster-lifecycle
title: 高可用拓扑选项
content_type: concept
weight: 50
---
@@ -20,12 +16,12 @@ weight: 50
-本页面介绍了配置高可用(HA) Kubernetes 集群拓扑的两个选项。
+本页面介绍了配置高可用(HA)Kubernetes 集群拓扑的两个选项。
-您可以设置 HA 集群:
+你可以设置 HA 集群:
-在设置 HA 集群之前,您应该仔细考虑每种拓扑的优缺点。
+在设置 HA 集群之前,你应该仔细考虑每种拓扑的优缺点。
+{{< note >}}
-
-{{< note >}}
-kubeadm 静态引导 etcd 集群。 阅读 etcd [集群指南](https://github.com/etcd-io/etcd/blob/release-3.4/Documentation/op-guide/clustering.md#static)以获得更多详细信息。
+kubeadm 静态引导 etcd 集群。
+阅读 etcd [集群指南](https://github.com/etcd-io/etcd/blob/release-3.4/Documentation/op-guide/clustering.md#static)以获得更多详细信息。
{{< /note >}}
@@ -55,17 +51,20 @@ kubeadm 静态引导 etcd 集群。 阅读 etcd [集群指南](https://github.co
-## 堆叠(Stacked) etcd 拓扑
+## 堆叠(Stacked)etcd 拓扑 {#stacked-etcd-topology}
-堆叠(Stacked) HA 集群是一种这样的[拓扑](https://en.wikipedia.org/wiki/Network_topology),其中 etcd 分布式数据存储集群堆叠在 kubeadm 管理的控制平面节点上,作为控制平面的一个组件运行。
+堆叠(Stacked)HA 集群是一种这样的[拓扑](https://en.wikipedia.org/wiki/Network_topology),
+其中 etcd 分布式数据存储集群堆叠在 kubeadm 管理的控制平面节点上,作为控制平面的一个组件运行。
-每个控制平面节点运行 `kube-apiserver`,`kube-scheduler` 和 `kube-controller-manager` 实例。
+每个控制平面节点运行 `kube-apiserver`、`kube-scheduler` 和 `kube-controller-manager` 实例。
@@ -76,28 +75,34 @@ Each control plane node creates a local etcd member and this etcd member communi
the `kube-apiserver` of this node. The same applies to the local `kube-controller-manager`
and `kube-scheduler` instances.
-->
-每个控制平面节点创建一个本地 etcd 成员(member),这个 etcd 成员只与该节点的 `kube-apiserver` 通信。这同样适用于本地 `kube-controller-manager` 和 `kube-scheduler` 实例。
+每个控制平面节点创建一个本地 etcd 成员(member),这个 etcd 成员只与该节点的 `kube-apiserver` 通信。
+这同样适用于本地 `kube-controller-manager` 和 `kube-scheduler` 实例。
-这种拓扑将控制平面和 etcd 成员耦合在同一节点上。相对使用外部 etcd 集群,设置起来更简单,而且更易于副本管理。
+这种拓扑将控制平面和 etcd 成员耦合在同一节点上。相对使用外部 etcd 集群,
+设置起来更简单,而且更易于副本管理。
-然而,堆叠集群存在耦合失败的风险。如果一个节点发生故障,则 etcd 成员和控制平面实例都将丢失,并且冗余会受到影响。您可以通过添加更多控制平面节点来降低此风险。
+然而,堆叠集群存在耦合失败的风险。如果一个节点发生故障,则 etcd 成员和控制平面实例都将丢失,
+并且冗余会受到影响。你可以通过添加更多控制平面节点来降低此风险。
-因此,您应该为 HA 集群运行至少三个堆叠的控制平面节点。
+因此,你应该为 HA 集群运行至少三个堆叠的控制平面节点。
-这是 kubeadm 中的默认拓扑。当使用 `kubeadm init` 和 `kubeadm join --control-plane` 时,在控制平面节点上会自动创建本地 etcd 成员。
+这是 kubeadm 中的默认拓扑。当使用 `kubeadm init` 和 `kubeadm join --control-plane` 时,
+在控制平面节点上会自动创建本地 etcd 成员。
-## 外部 etcd 拓扑
+## 外部 etcd 拓扑 {#external-etcd-topology}
-具有外部 etcd 的 HA 集群是一种这样的[拓扑](https://en.wikipedia.org/wiki/Network_topology),其中 etcd 分布式数据存储集群在独立于控制平面节点的其他节点上运行。
+具有外部 etcd 的 HA 集群是一种这样的[拓扑](https://zh.wikipedia.org/wiki/%E7%BD%91%E7%BB%9C%E6%8B%93%E6%89%91),
+其中 etcd 分布式数据存储集群在独立于控制平面节点的其他节点上运行。
-就像堆叠的 etcd 拓扑一样,外部 etcd 拓扑中的每个控制平面节点都运行 `kube-apiserver`,`kube-scheduler` 和 `kube-controller-manager` 实例。同样, `kube-apiserver` 使用负载均衡器暴露给工作节点。但是,etcd 成员在不同的主机上运行,每个 etcd 主机与每个控制平面节点的 `kube-apiserver` 通信。
+就像堆叠的 etcd 拓扑一样,外部 etcd 拓扑中的每个控制平面节点都运行 `kube-apiserver`,`kube-scheduler` 和 `kube-controller-manager` 实例。
+同样,`kube-apiserver` 使用负载均衡器暴露给工作节点。但是 etcd 成员在不同的主机上运行,
+每个 etcd 主机与每个控制平面节点的 `kube-apiserver` 通信。
-这种拓扑结构解耦了控制平面和 etcd 成员。因此,它提供了一种 HA 设置,其中失去控制平面实例或者 etcd 成员的影响较小,并且不会像堆叠的 HA 拓扑那样影响集群冗余。
+这种拓扑结构解耦了控制平面和 etcd 成员。因此它提供了一种 HA 设置,
+其中失去控制平面实例或者 etcd 成员的影响较小,并且不会像堆叠的 HA 拓扑那样影响集群冗余。
-但是,此拓扑需要两倍于堆叠 HA 拓扑的主机数量。
+但此拓扑需要两倍于堆叠 HA 拓扑的主机数量。
@@ -138,14 +149,11 @@ A minimum of three hosts for control plane nodes and three hosts for etcd nodes
-->

-
-
## {{% heading "whatsnext" %}}
-
- - [使用 kubeadm 设置高可用集群](/zh/docs/setup/production-environment/tools/kubeadm/high-availability/)
+- [使用 kubeadm 设置高可用集群](/zh/docs/setup/production-environment/tools/kubeadm/high-availability/)
diff --git a/content/zh/docs/setup/production-environment/tools/kubeadm/high-availability.md b/content/zh/docs/setup/production-environment/tools/kubeadm/high-availability.md
index 2c5bfe86c2..39cb3c55d6 100644
--- a/content/zh/docs/setup/production-environment/tools/kubeadm/high-availability.md
+++ b/content/zh/docs/setup/production-environment/tools/kubeadm/high-availability.md
@@ -379,7 +379,7 @@ option. Your cluster requirements may need a different configuration.
As stated in the command output, the certificate key gives access to cluster sensitive data, keep it secret!
-->
{{< caution >}}
- 正如命令输出中所述,证书密钥可访问群集敏感数据。请妥善保管!
+ 正如命令输出中所述,证书密钥可访问集群敏感数据。请妥善保管!
{{< /caution >}}
## 检查所需端口{#check-required-ports}
-启用这些[必要的端口](/zh/docs/reference/ports-and-protocols/)后才能使 Kubernetes 的各组件相互通信。可以使用 telnet 来检查端口是否启用,例如:
+启用这些[必要的端口](/zh/docs/reference/ports-and-protocols/)后才能使 Kubernetes 的各组件相互通信。可以使用 netcat 之类的工具来检查端口是否启用,例如:
```shell
-telnet 127.0.0.1 6443
+nc 127.0.0.1 6443
```
@@ -137,86 +136,103 @@ documentation for the plugins about what port(s) those need.
请参阅他们各自文档中对端口的要求。
-## 安装 runtime{#installing-runtime}
+## 安装容器运行时{#installing-runtime}
为了在 Pod 中运行容器,Kubernetes 使用
{{< glossary_tooltip term_id="container-runtime" text="容器运行时(Container Runtime)" >}}。
-{{< tabs name="container-runtimes" >}}
-{{% tab name="Linux 节点" %}}
默认情况下,Kubernetes 使用
{{< glossary_tooltip term_id="cri" text="容器运行时接口(Container Runtime Interface,CRI)" >}}
来与你所选择的容器运行时交互。
-如果你不指定运行时,则 kubeadm 会自动尝试检测到系统上已经安装的运行时,
-方法是扫描一组众所周知的 Unix 域套接字。
-下面的表格列举了一些容器运行时及其对应的套接字路径:
-
-| 运行时 | 域套接字 |
-|------------|----------------------------------|
-| Docker | /var/run/dockershim.sock |
-| containerd | /run/containerd/containerd.sock |
-| CRI-O | /var/run/crio/crio.sock |
+如果你不指定运行时,kubeadm 会自动尝试通过扫描已知的端点列表来检测已安装的容器运行时。
-
-如果同时检测到 Docker 和 containerd,则优先选择 Docker。
-这是必然的,因为 Docker 18.09 附带了 containerd 并且两者都是可以检测到的,
-即使你仅安装了 Docker。
-如果检测到其他两个或多个运行时,kubeadm 输出错误信息并退出。
-
-kubelet 通过内置的 `dockershim` CRI 实现与 Docker 集成。
+如果检测到有多个或者没有容器运行时,kubeadm 将抛出一个错误并要求你指定一个想要使用的运行时。
参阅[容器运行时](/zh/docs/setup/production-environment/container-runtimes/)
以了解更多信息。
-{{% /tab %}}
-{{% tab name="其它操作系统" %}}
-默认情况下, kubeadm 使用 {{< glossary_tooltip term_id="docker" >}} 作为容器运行时。
-kubelet 通过内置的 `dockershim` CRI 实现与 Docker 集成。
-参阅[容器运行时](/zh/docs/setup/production-environment/container-runtimes/)
-以了解更多信息。
-{{% /tab %}}
-{{< /tabs >}}
+{{< note >}}
+Docker Engine 没有实现 [CRI](/zh/docs/concepts/architecture/cri/),而这是容器运行时在 Kubernetes 中工作所需要的。
+为此,必须安装一个额外的服务 [cri-dockerd](https://github.com/Mirantis/cri-dockerd)。
+cri-dockerd 是一个基于传统的内置Docker引擎支持的项目,它在 1.24 版本从 kubelet 中[移除](/zh/dockershim)。
+{{< /note >}}
+
+
+下面的表格包括被支持的操作系统的已知端点。
+
+{{< tabs name="container_runtime" >}}
+{{% tab name="Linux" %}}
+
+
+{{< table >}}
+| 运行时 | Unix 域套接字 |
+|------------------------------------|----------------------------------------------|
+| containerd | `unix:///var/run/containerd/containerd.sock` |
+| CRI-O | `unix:///var/run/crio/crio.sock` |
+| Docker Engine (使用 cri-dockerd) | `unix:///var/run/cri-dockerd.sock` |
+{{< /table >}}
+
+
+{{% tab name="Windows" %}}
+
+{{< table >}}
+| 运行时 | Windows 命名管道路径 |
+|------------------------------------|----------------------------------------------|
+| containerd | `npipe:////./pipe/containerd-containerd` |
+| Docker Engine (使用 cri-dockerd) | `npipe:////./pipe/cri-dockerd` |
+{{< /table >}}
**请注意:**
@@ -365,6 +384,9 @@ sudo systemctl enable --now kubelet
你必须这么做,直到 kubelet 做出对 SELinux 的支持进行升级为止。
- 如果你知道如何配置 SELinux 则可以将其保持启用状态,但可能需要设定 kubeadm 不支持的部分配置
+- 如果由于该 Red Hat 的发行版无法解析 `basearch` 导致获取 `baseurl` 失败,请将 `\$basearch` 替换为你计算机的架构。
+ 输入 `uname -m` 以查看该值。
+ 例如,`x86_64` 的 `baseurl` URL 可以是:`https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64`。
{{% /tab %}}
{{% tab name="无包管理器的情况" %}}
@@ -382,7 +404,7 @@ curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_
```
定义要下载命令文件的目录。
@@ -468,7 +490,7 @@ for the management of cgroups on Linux machines.
-->
## 配置 cgroup 驱动程序 {#configure-cgroup-driver}
-容器运行时和 kubelet 都具有名字为
+容器运行时和 kubelet 都具有名字为
["cgroup driver"](/zh/docs/setup/production-environment/container-runtimes/)
的属性,该属性对于在 Linux 机器上管理 CGroups 而言非常重要。
@@ -500,4 +522,3 @@ If you are running into difficulties with kubeadm, please consult our [troublesh
* [Using kubeadm to Create a Cluster](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)
-->
* [使用 kubeadm 创建集群](/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)
-
diff --git a/content/zh/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md b/content/zh/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md
index 605ed3b29e..72ef69743e 100644
--- a/content/zh/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md
+++ b/content/zh/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md
@@ -1,6 +1,4 @@
---
-reviewers:
-- sig-cluster-lifecycle
title: 使用 kubeadm 配置集群中的每个 kubelet
content_type: concept
weight: 80
@@ -15,13 +13,15 @@ weight: 80
-{{< feature-state for_k8s_version="1.11" state="stable" >}}
+{{% dockershim-removal %}}
+
+{{< feature-state for_k8s_version="v1.11" state="stable" >}}
+## Kubelet 配置模式 {#kubelet-configuration-patterns}
+
-## Kubelet 配置模式
-
以下各节讲述了通过使用 kubeadm 简化 kubelet 配置模式,而不是在每个节点上手动地管理 kubelet 配置。
+### 将集群级配置传播到每个 kubelet 中 {#propagating-cluster-level-configuration-to-each-kubelet}
+
+你可以通过 `kubeadm init` 和 `kubeadm join` 命令为 kubelet 提供默认值。
+有趣的示例包括使用其他容器运行时或通过服务器设置不同的默认子网。
+
+如果你想使用子网 `10.96.0.0/12` 作为服务的默认网段,你可以给 kubeadm 传递 `--service-cidr` 参数:
```bash
kubeadm init --service-cidr 10.96.0.0/12
```
+
-### 将集群级配置传播到每个 kubelet 中
-
-你可以通过使用 `kubeadm init` 和 `kubeadm join` 命令为 kubelet 提供默认值。
-有趣的示例包括使用其他 CRI 运行时或通过服务器设置不同的默认子网。
-
-如果你想使用子网 `10.96.0.0/12` 作为services的默认网段,你可以给 kubeadm 传递 `--service-cidr` 参数:
-
-```bash
-kubeadm init --service-cidr 10.96.0.0/12
-```
-
现在,可以从该子网分配服务的虚拟 IP。
你还需要通过 kubelet 使用 `--cluster-dns` 标志设置 DNS 地址。
在集群中的每个管理器和节点上的 kubelet 的设置需要相同。
@@ -116,14 +106,23 @@ clusterDNS:
- 10.96.0.10
```
-有关 `KubeletConfiguration` 的更多详细信息,亲参阅[本节](#configure-kubelets-using-kubeadm)。
+
+有关 `KubeletConfiguration` 的更多详细信息,请参阅[本节](#configure-kubelets-using-kubeadm)。
+### 提供特定于某实例的配置细节 {#providing-instance-specific-configuration-details}
+由于硬件、操作系统、网络或者其他主机特定参数的差异。某些主机需要特定的 kubelet 配置。
+以下列表提供了一些示例。
+
+
-### 提供指定实例的详细配置信息
-
-由于硬件、操作系统、网络或者其他主机特定参数的差异。某些主机需要特定的 kubelet 配置。
-以下列表提供了一些示例。
-
- 由 kubelet 配置标志 `--resolv-conf` 指定的 DNS 解析文件的路径在操作系统之间可能有所不同,
它取决于你是否使用 `systemd-resolved`。
如果此路径错误,则在其 kubelet 配置错误的节点上 DNS 解析也将失败。
@@ -157,12 +149,10 @@ such as systemd.
- 除非你使用云驱动,否则默认情况下 Node API 对象的 `.metadata.name` 会被设置为计算机的主机名。
如果你需要指定一个与机器的主机名不同的节点名称,你可以使用 `--hostname-override` 标志覆盖默认值。
-- 当前,kubelet 无法自动检测 CRI 运行时使用的 cgroup 驱动程序,
- 但是值 `--cgroup-driver` 必须与 CRI 运行时使用的 cgroup 驱动程序匹配,以确保 kubelet 的健康运行状况。
+- 当前,kubelet 无法自动检测容器运行时使用的 cgroup 驱动程序,
+ 但是值 `--cgroup-driver` 必须与容器运行时使用的 cgroup 驱动程序匹配,以确保 kubelet 的健康运行状况。
-- 取决于你的集群所使用的 CRI 运行时,你可能需要为 kubelet 指定不同的标志。
- 例如,当使用 Docker 时,你需要指定如 `--network-plugin=cni` 这类标志;但是如果你使用的是外部运行时,
- 则需要指定 `--container-runtime=remote` 并使用 `--container-runtime-endpoint=` 指定 CRI 端点。
+- 要指定容器运行时,你必须用 `--container-runtime-endpoint=` 标志来指定端点。
你可以在服务管理器(例如 systemd)中设定某个 kubelet 的配置来指定这些参数。
@@ -179,75 +169,70 @@ Also have a look at the
[reference for the KubeletConfiguration](/docs/reference/config-api/kubelet-config.v1beta1/)
for more information on the individual fields.
-->
-## 使用 kubeadm 配置 kubelet
+## 使用 kubeadm 配置 kubelet {#configure-kubelets-using-kubeadm}
如果自定义的 `KubeletConfiguration` API 对象使用像 `kubeadm ... --config some-config-file.yaml` 这样的配置文件进行传递,则可以配置 kubeadm 启动的 kubelet。
通过调用 `kubeadm config print init-defaults --component-configs KubeletConfiguration`,
你可以看到此结构中的所有默认值。
-也可以阅读 [KubeletConfiguration 参考](/docs/reference/config-api/kubelet-config.v1beta1/)
+也可以阅读 [KubeletConfiguration 参考](/zh/docs/reference/config-api/kubelet-config.v1beta1/)
来获取有关各个字段的更多信息。
+### 使用 `kubeadm init` 时的工作流程 {#workflow-when-using-kubeadm-init}
+
+当调用 `kubeadm init` 时,kubelet 的配置会被写入磁盘 `/var/lib/kubelet/config.yaml`,
+并上传到集群 `kube-system` 命名空间的 `kubelet-config` ConfigMap。
+kubelet 配置信息也被写入 `/etc/kubernetes/kubelet.conf`,其中包含集群内所有 kubelet 的基线配置。
+此配置文件指向允许 kubelet 与 API 服务器通信的客户端证书。
+这解决了[将集群级配置传播到每个 kubelet](#propagating-cluster-level-configuration-to-each-kubelet) 的需求。
+
-### 当使用 `kubeadm init`时的工作流程
-
-当调用 `kubeadm init` 时,kubelet 配置被编组到磁盘上的 `/var/lib/kubelet/config.yaml` 中,
-并且上传到集群中的 ConfigMap。
-ConfigMap 名为 `kubelet-config-1.X`,其中 `X` 是你正在初始化的 kubernetes 版本的次版本。
-在集群中所有 kubelet 的基准集群范围内配置,将 kubelet 配置文件写入 `/etc/kubernetes/kubelet.conf` 中。
-此配置文件指向允许 kubelet 与 API 服务器通信的客户端证书。
-这解决了[将集群级配置传播到每个 kubelet](#propagating-cluster-level-configuration-to-each-kubelet) 的需求。
-
-该文档 [提供特定实例的配置详细信息](#providing-instance-specific-configuration-details) 是第二种解决模式,
-kubeadm 将环境文件写入 `/var/lib/kubelet/kubeadm-flags.env`,其中包含了一个标志列表,
+针对[为特定实例提供配置细节](#providing-instance-specific-configuration-details)的第二种模式,
+kubeadm 的解决方法是将环境文件写入 `/var/lib/kubelet/kubeadm-flags.env`,其中包含了一个标志列表,
当 kubelet 启动时,该标志列表会传递给 kubelet 标志在文件中的显示方式如下:
```bash
KUBELET_KUBEADM_ARGS="--flag1=value1 --flag2=value2 ..."
```
-除了启动 kubelet 时使用该标志外,该文件还包含动态参数,例如 cgroup 驱动程序以及是否使用其他 CRI 运行时 socket(`--cri-socket`)。
+
+除了启动 kubelet 时所使用的标志外,该文件还包含动态参数,例如 cgroup 驱动程序以及是否使用其他容器运行时套接字(`--cri-socket`)。
+
将这两个文件编组到磁盘后,如果使用 systemd,则 kubeadm 尝试运行以下两个命令:
```bash
systemctl daemon-reload && systemctl restart kubelet
```
+
如果重新加载和重新启动成功,则正常的 `kubeadm init` 工作流程将继续。
-
-### 当使用 `kubeadm join`时的工作流程
+### 使用 `kubeadm join` 时的工作流程 {#workflow-when-using-kubeadm-join}
当运行 `kubeadm join` 时,kubeadm 使用 Bootstrap Token 证书执行 TLS 引导,该引导会获取一份证书,
-该证书需要下载 `kubelet-config-1.X` ConfigMap 并把它写入 `/var/lib/kubelet/config.yaml` 中。
+该证书需要下载 `kubelet-config` ConfigMap 并把它写入 `/var/lib/kubelet/config.yaml` 中。
动态环境文件的生成方式恰好与 `kubeadm init` 完全相同。
-
在 kubelet 加载新配置后,kubeadm 将写入 `/etc/kubernetes/bootstrap-kubelet.conf` KubeConfig 文件中,
该文件包含 CA 证书和引导程序令牌。
kubelet 使用这些证书执行 TLS 引导程序并获取唯一的凭据,该凭据被存储在 `/etc/kubernetes/kubelet.conf` 中。
@@ -289,17 +272,22 @@ kubelet 使用这些证书执行 TLS 引导程序并获取唯一的凭据,该
When the `/etc/kubernetes/kubelet.conf` file is written, the kubelet has finished performing the TLS Bootstrap.
Kubeadm deletes the `/etc/kubernetes/bootstrap-kubelet.conf` file after completing the TLS Bootstrap.
-->
-
当 `/etc/kubernetes/kubelet.conf` 文件被写入后,kubelet 就完成了 TLS 引导过程。
Kubeadm 在完成 TLS 引导过程后将删除 `/etc/kubernetes/bootstrap-kubelet.conf` 文件。
-
+## kubelet 的 systemd drop-in 文件 {#the-kubelet-drop-in-file-for-systemd}
+
+`kubeadm` 中附带了有关系统如何运行 kubelet 的 systemd 配置文件。
+请注意 kubeadm CLI 命令不会修改此文件。
+
+通过 `kubeadm` [DEB 包](https://github.com/kubernetes/release/blob/master/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf)
+或者 [RPM 包](https://github.com/kubernetes/release/blob/master/cmd/kubepkg/templates/latest/rpm/kubeadm/10-kubeadm.conf)
+安装的配置文件被写入 `/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` 并由 systemd 使用。
+它对原来的 [RPM 版本 `kubelet.service`](https://github.com/kubernetes/release/blob/master/cmd/kubepkg/templates/latest/rpm/kubelet/kubelet.service)
+或者 [DEB 版本 `kubelet.service`](https://github.com/kubernetes/release/blob/master/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service)
+作了增强:
+
+{{< note >}}
+下面的内容只是一个例子。如果你不想使用包管理器,
+请遵循[没有包管理器](/zh/docs/setup/productionenvironment/tools/kubeadm/install-kubeadm/#k8s-install-2))
+章节的指南。
+{{< /note >}}
+
+
-## kubelet 的 systemd 文件 {#the-kubelet-drop-in-file-for-systemd}
-
-`kubeadm` 中附带了有关系统如何运行 kubelet 的 systemd 配置文件。
-请注意 kubeadm CLI 命令不会修改此文件。
-
-通过 `kubeadm` [DEB](https://github.com/kubernetes/release/blob/master/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf)
-或者 [RPM 包](https://github.com/kubernetes/release/blob/master/cmd/kubepkg/templates/latest/rpm/kubeadm/10-kubeadm.conf)
-安装的配置文件被写入 `/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` 并由系统使用。
-它对原来的 [RPM 版本 `kubelet.service`](https://github.com/kubernetes/release/blob/master/cmd/kubepkg/templates/latest/rpm/kubelet/kubelet.service)
-或者 [DEB 版本 `kubelet.service`](https://github.com/kubernetes/release/blob/master/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service)
-作了增强:
-
```none
[Service]
-Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf
---kubeconfig=/etc/kubernetes/kubelet.conf"
+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"
# 这是 "kubeadm init" 和 "kubeadm join" 运行时生成的文件,动态地填充 KUBELET_KUBEADM_ARGS 变量
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
@@ -362,8 +346,21 @@ ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
```
-该文件为 kubelet 指定由 kubeadm 管理的所有文件的默认位置。
+
+此文件指定由 kubeadm 为 kubelet 管理的所有文件的默认位置。
+
- 用于 TLS 引导程序的 KubeConfig 文件为 `/etc/kubernetes/bootstrap-kubelet.conf`,
但仅当 `/etc/kubernetes/kubelet.conf` 不存在时才能使用。
- 具有唯一 kubelet 标识的 KubeConfig 文件为 `/etc/kubernetes/kubelet.conf`。
@@ -375,24 +372,27 @@ ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELE
-## Kubernetes 可执行文件和软件包内容
+## Kubernetes 可执行文件和软件包内容 {#kubernetes-binaries-and-package-contents}
+
Kubernetes 版本对应的 DEB 和 RPM 软件包是:
+
+| 软件包名称 | 描述 |
+|--------------|-------------|
+| `kubeadm` | 给 kubelet 安装 `/usr/bin/kubeadm` CLI 工具和 [kubelet 的 systemd drop-in 文件](#the-kubelet-drop-in-file-for-systemd)。 |
+| `kubelet` | 安装 `/usr/bin/kubelet` 可执行文件。 |
| `kubectl` | 安装 `/usr/bin/kubectl` 可执行文件。 |
| `cri-tools` | 从 [cri-tools git 仓库](https://github.com/kubernetes-sigs/cri-tools)中安装 `/usr/bin/crictl` 可执行文件。 |
-
+| `kubernetes-cni` | 从 [plugins git 仓库](https://github.com/containernetworking/plugins)中安装 `/opt/cni/bin` 可执行文件。|
diff --git a/content/zh/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md b/content/zh/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md
index fc30729efd..c2a8d7c1ce 100644
--- a/content/zh/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md
+++ b/content/zh/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm.md
@@ -7,7 +7,7 @@ weight: 70
@@ -22,46 +22,46 @@ or upgrades for such nodes. The long term plan is to empower the tool
[etcdadm](https://github.com/kubernetes-sigs/etcdadm) to manage these
aspects.
-->
-在本指南中,当 kubeadm 用作为外部 etcd 节点管理工具,请注意 kubeadm 不计划支持此类节点的证书更换或升级。对于长期规划是使用 [etcdadm](https://github.com/kubernetes-sigs/etcdadm) 增强工具来管理这方面。
+在本指南中,使用 kubeadm 作为外部 etcd 节点管理工具,请注意 kubeadm 不计划支持此类节点的证书更换或升级。
+对于长期规划是使用 [etcdadm](https://github.com/kubernetes-sigs/etcdadm) 增强工具来管理这些方面。
{{< /note >}}
-默认情况下,kubeadm 运行单成员的 etcd 集群,该集群由控制面节点上的 kubelet 以静态 Pod 的方式进行管理。由于 etcd 集群只包含一个成员且不能在任一成员不可用时保持运行,所以这不是一种高可用设置。本任务,将告诉你如何在使用 kubeadm 创建一个 kubernetes 集群时创建一个外部 etcd:有三个成员的高可用 etcd 集群。
+默认情况下,kubeadm 在每个控制平面节点上运行一个本地 etcd 实例。也可以使用外部的 etcd 集群,并在不同的主机上提供 etcd 实例。
+这两种方法的区别在 [高可用拓扑的选项](/zh/docs/setup/production-environment/tools/kubeadm/ha-topology) 页面中阐述。
+
+
+这个任务将指导你创建一个由三个成员组成的高可用外部 etcd 集群,该集群在创建过程中可被 kubeadm 使用。
## {{% heading "prerequisites" %}}
-
* 三个可以通过 2379 和 2380 端口相互通信的主机。本文档使用这些作为默认端口。不过,它们可以通过 kubeadm 的配置文件进行自定义。
-* 每个主机必须 [安装有 docker、kubelet 和 kubeadm][工具箱]。
+* 每个主机必须安装 systemd 和 bash 兼容的 shell。
+* 每台主机必须[安装有容器运行时、kubelet 和 kubeadm](/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)。
* 一些可以用来在主机间复制文件的基础设施。例如 `ssh` 和 `scp` 就可以满足需求。
-
-[工具箱]: /docs/setup/production-environment/tools/kubeadm/install-kubeadm/
-
-
-
+
+{{< note >}}
+下面的例子使用 IPv4 地址,但是你也可以使用 IPv6 地址配置 kubeadm、kubelet 和 etcd。一些 Kubernetes 选项支持双协议栈,但是 etcd 不支持。
+关于 Kubernetes 双协议栈支持的更多细节,请参见 [kubeadm 的双栈支持](/zh/docs/setup/production-environment/tools/kubeadm/dual-stack-support/)。
+{{< /note >}}
+
- 检查 kubelet 的状态以确保其处于运行状态:
+ 检查 kubelet 的状态以确保其处于运行状态:
```shell
systemctl status kubelet
@@ -131,39 +145,52 @@ kubeadm 包含生成下述证书所需的所有必要的密码学工具;在这
使用以下脚本为每个将要运行 etcd 成员的主机生成一个 kubeadm 配置文件。
```sh
- # 使用 IP 或可解析的主机名替换 HOST0、HOST1 和 HOST2
+ # 使用你的主机 IP 替换 HOST0、HOST1 和 HOST2 的 IP 地址
export HOST0=10.0.0.6
export HOST1=10.0.0.7
export HOST2=10.0.0.8
+ # 使用你的主机名更新 NAME0, NAME1 和 NAME2
+ export NAME0="infra0"
+ export NAME1="infra1"
+ export NAME2="infra2"
+
# 创建临时目录来存储将被分发到其它主机上的文件
mkdir -p /tmp/${HOST0}/ /tmp/${HOST1}/ /tmp/${HOST2}/
- ETCDHOSTS=(${HOST0} ${HOST1} ${HOST2})
- NAMES=("infra0" "infra1" "infra2")
+ HOSTS=(${HOST0} ${HOST1} ${HOST2})
+ NAMES=(${NAME0} ${NAME1} ${NAME2})
- for i in "${!ETCDHOSTS[@]}"; do
- HOST=${ETCDHOSTS[$i]}
- NAME=${NAMES[$i]}
- cat << EOF > /tmp/${HOST}/kubeadmcfg.yaml
- apiVersion: "kubeadm.k8s.io/v1beta3"
- kind: ClusterConfiguration
- etcd:
- local:
- serverCertSANs:
- - "${HOST}"
- peerCertSANs:
- - "${HOST}"
- extraArgs:
- initial-cluster: infra0=https://${ETCDHOSTS[0]}:2380,infra1=https://${ETCDHOSTS[1]}:2380,infra2=https://${ETCDHOSTS[2]}:2380
- initial-cluster-state: new
- name: ${NAME}
- listen-peer-urls: https://${HOST}:2380
- listen-client-urls: https://${HOST}:2379
- advertise-client-urls: https://${HOST}:2379
- initial-advertise-peer-urls: https://${HOST}:2380
- EOF
- done
+ for i in "${!HOSTS[@]}"; do
+ HOST=${HOSTS[$i]}
+ NAME=${NAMES[$i]}
+ cat << EOF > /tmp/${HOST}/kubeadmcfg.yaml
+ ---
+ apiVersion: "kubeadm.k8s.io/v1beta3"
+ kind: InitConfiguration
+ nodeRegistration:
+ name: ${NAME}
+ localAPIEndpoint:
+ advertiseAddress: ${HOST}
+ ---
+ apiVersion: "kubeadm.k8s.io/v1beta3"
+ kind: ClusterConfiguration
+ etcd:
+ local:
+ serverCertSANs:
+ - "${HOST}"
+ peerCertSANs:
+ - "${HOST}"
+ extraArgs:
+ initial-cluster: ${NAMES[0]}=https://${HOSTS[0]}:2380,${NAMES[1]}=https://${HOSTS[1]}:2380,${NAMES[2]}=https://${HOSTS[2]}:2380
+ initial-cluster-state: new
+ name: ${NAME}
+ listen-peer-urls: https://${HOST}:2380
+ listen-client-urls: https://${HOST}:2379
+ advertise-client-urls: https://${HOST}:2379
+ initial-advertise-peer-urls: https://${HOST}:2380
+ EOF
+ done
```
如果你还没有 CA,则在 `$HOST0`(你为 kubeadm 生成配置文件的位置)上运行此命令。
- ```
+ ```shell
kubeadm init phase certs etcd-ca
```
@@ -280,7 +307,7 @@ kubeadm 包含生成下述证书所需的所有必要的密码学工具;在这
-->
在 `$HOST1` 上:
- ```
+ ```console
$HOME
└── kubeadmcfg.yaml
---
@@ -302,7 +329,7 @@ kubeadm 包含生成下述证书所需的所有必要的密码学工具;在这
-->
在 `$HOST2` 上:
- ```
+ ```console
$HOME
└── kubeadmcfg.yaml
---
@@ -332,15 +359,15 @@ kubeadm 包含生成下述证书所需的所有必要的密码学工具;在这
在每台主机上运行 `kubeadm` 命令来生成 etcd 使用的静态清单。
```shell
- root@HOST0 $ kubeadm init phase etcd local --config=/tmp/${HOST0}/kubeadmcfg.yaml
- root@HOST1 $ kubeadm init phase etcd local --config=/tmp/${HOST1}/kubeadmcfg.yaml
- root@HOST2 $ kubeadm init phase etcd local --config=/tmp/${HOST2}/kubeadmcfg.yaml
+ root@HOST0 $ kubeadm init phase etcd local --config=/tmp/${HOST0}/kubeadmcfg.yaml
+ root@HOST1 $ kubeadm init phase etcd local --config=$HOME/kubeadmcfg.yaml
+ root@HOST2 $ kubeadm init phase etcd local --config=$HOME/kubeadmcfg.yaml
```
-8. 可选:检查群集运行状况
+8. 可选:检查集群运行状况
```shell
docker run --rm -it \
@@ -375,4 +402,3 @@ kubeadm](/docs/setup/independent/high-availability/).
一旦拥有了一个正常工作的 3 成员的 etcd 集群,你就可以基于
[使用 kubeadm 外部 etcd 的方法](/zh/docs/setup/production-environment/tools/kubeadm/high-availability/),
继续部署一个高可用的控制平面。
-
diff --git a/content/zh/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm.md b/content/zh/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm.md
index dabedb65d1..e7a0bf7be2 100644
--- a/content/zh/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm.md
+++ b/content/zh/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm.md
@@ -21,7 +21,8 @@ If your problem is not listed below, please follow the following steps:
- Go to [github.com/kubernetes/kubeadm](https://github.com/kubernetes/kubeadm/issues) and search for existing issues.
- If no issue exists, please [open one](https://github.com/kubernetes/kubeadm/issues/new) and follow the issue template.
-- If you are unsure about how kubeadm works, you can ask on [Slack](http://slack.k8s.io/) in #kubeadm, or open a question on [StackOverflow](https://stackoverflow.com/questions/tagged/kubernetes). Please include
+- If you are unsure about how kubeadm works, you can ask on [Slack](https://slack.k8s.io/) in `#kubeadm`,
+ or open a question on [StackOverflow](https://stackoverflow.com/questions/tagged/kubernetes). Please include
relevant tags like `#kubernetes` and `#kubeadm` so folks can help you.
-->
与任何程序一样,你可能会在安装或者运行 kubeadm 时遇到错误。
@@ -33,13 +34,73 @@ If your problem is not listed below, please follow the following steps:
- 转到 [github.com/kubernetes/kubeadm](https://github.com/kubernetes/kubeadm/issues) 并搜索存在的问题。
- 如果没有问题,请 [打开](https://github.com/kubernetes/kubeadm/issues/new) 并遵循问题模板。
-- 如果你对 kubeadm 的工作方式有疑问,可以在 [Slack](https://slack.k8s.io/) 上的 #kubeadm 频道提问,
+- 如果你对 kubeadm 的工作方式有疑问,可以在 [Slack](https://slack.k8s.io/) 上的 `#kubeadm` 频道提问,
或者在 [StackOverflow](https://stackoverflow.com/questions/tagged/kubernetes) 上提问。
请加入相关标签,例如 `#kubernetes` 和 `#kubeadm`,这样其他人可以帮助你。
-
+
+## 由于缺少 RBAC,无法将 v1.18 Node 加入 v1.17 集群
+
+
+自从 v1.18 后,如果集群中已存在同名 Node,kubeadm 将禁止 Node 加入集群。
+这需要为 bootstrap-token 用户添加 RBAC 才能 GET Node 对象。
+
+但这会导致一个问题,v1.18 的 `kubeadm join` 无法加入由 kubeadm v1.17 创建的集群。
+
+
+要解决此问题,你有两种选择:
+
+使用 kubeadm v1.18 在控制平面节点上执行 `kubeadm init phase bootstrap-token`。
+请注意,这也会启用 bootstrap-token 的其余权限。
+
+或者,也可以使用 `kubectl apply -f ...` 手动应用以下 RBAC:
+
+
+```yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: kubeadm:get-nodes
+rules:
+- apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - get
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: kubeadm:get-nodes
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: kubeadm:get-nodes
+subjects:
+- apiGroup: rbac.authorization.k8s.io
+ kind: Group
+ name: system:bootstrappers:kubeadm:default-node-token
+```
+
这可能是由许多问题引起的。最常见的是:
- 网络连接问题。在继续之前,请检查你的计算机是否具有全部联通的网络连接。
- 容器运行时的 cgroup 驱动不同于 kubelet 使用的 cgroup 驱动。要了解如何正确配置 cgroup 驱动,
- 请参阅[配置 cgroup 驱动](/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/)。
+ 请参阅[配置 cgroup 驱动](/zh/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/)。
- 控制平面上的 Docker 容器持续进入崩溃状态或(因其他原因)挂起。你可以运行 `docker ps` 命令来检查以及 `docker logs` 命令来检视每个容器的运行日志。
- 对于其他容器运行时,请参阅[使用 crictl 对 Kubernetes 节点进行调试](/zh/docs/tasks/debug-application-cluster/crictl/)。
+ 对于其他容器运行时,请参阅[使用 crictl 对 Kubernetes 节点进行调试](/zh/docs/tasks/debug/debug-cluster/crictl/)。
## 当删除托管容器时 kubeadm 阻塞
-如果 Docker 停止并且不删除 Kubernetes 所管理的所有容器,可能发生以下情况:
+如果容器运行时停止并且未删除 Kubernetes 所管理的容器,可能发生以下情况:
```shell
sudo kubeadm reset
@@ -152,17 +205,8 @@ sudo kubeadm reset
```
一个可行的解决方案是重新启动 Docker 服务,然后重新运行 `kubeadm reset`:
-
-```shell
-sudo systemctl restart docker.service
-sudo kubeadm reset
-```
-
-检查 docker 的日志也可能有用:
-
-```shell
-journalctl -ul docker
-```
+你也可以使用 `crictl` 来调试容器运行时的状态。
+参见[使用 CRICTL 调试 Kubernetes 节点](/zh/docs/tasks/debug/debug-cluster/crictl/)。
## Pods 处于 `RunContainerError`、`CrashLoopBackOff` 或者 `Error` 状态
@@ -191,7 +231,7 @@ Right after `kubeadm init` there should not be any pods in these states.
直到你部署了网络插件为止。
- 如果在部署完网络插件之后,有 Pods 处于 `RunContainerError`、`CrashLoopBackOff`
- 或 `Error` 状态之一,并且`coredns` (或者 `kube-dns`)仍处于 `Pending` 状态,
+ 或 `Error` 状态之一,并且 `coredns` (或者 `kube-dns`)仍处于 `Pending` 状态,
那很可能是你安装的网络插件由于某种原因无法工作。你或许需要授予它更多的
RBAC 特权或使用较新的版本。请在 Pod Network 提供商的问题跟踪器中提交问题,
然后在此处分类问题。
@@ -199,7 +239,7 @@ Right after `kubeadm init` there should not be any pods in these states.
- 如果你安装的 Docker 版本早于 1.12.1,请在使用 `systemd` 来启动 `dockerd` 和重启 `docker` 时,
删除 `MountFlags=slave` 选项。
你可以在 `/usr/lib/systemd/system/docker.service` 中看到 MountFlags。
- MountFlags 可能会干扰 Kubernetes 挂载的卷, 并使 Pods 处于 `CrashLoopBackOff` 状态。
+ MountFlags 可能会干扰 Kubernetes 挂载的卷,并使 Pods 处于 `CrashLoopBackOff` 状态。
当 Kubernetes 不能找到 `var/run/secrets/kubernetes.io/serviceaccount` 文件时会发生错误。
## 无法通过其服务 IP 访问 Pod
-- 许多网络附加组件尚未启用 [hairpin 模式](/zh/docs/tasks/debug-application-cluster/debug-service/#a-pod-fails-to-reach-itself-via-the-service-ip)
+- 许多网络附加组件尚未启用 [hairpin 模式](/zh/docs/tasks/debug/debug-application/debug-service/#a-pod-fails-to-reach-itself-via-the-service-ip)
该模式允许 Pod 通过其服务 IP 进行访问。这是与 [CNI](https://github.com/containernetworking/cni/issues/476) 有关的问题。
请与网络附加组件提供商联系,以获取他们所提供的 hairpin 模式的最新状态。
@@ -281,7 +321,7 @@ Unable to connect to the server: x509: certificate signed by unknown authority (
- Verify that the `$HOME/.kube/config` file contains a valid certificate, and
regenerate a certificate if necessary. The certificates in a kubeconfig file
- are base64 encoded. The `base64 -d` command can be used to decode the certificate
+ are base64 encoded. The `base64 --decode` command can be used to decode the certificate
and `openssl x509 -text -noout` can be used for viewing the certificate information.
- Unset the `KUBECONFIG` environment variable using:
@@ -315,7 +355,7 @@ Unable to connect to the server: x509: certificate signed by unknown authority (
- 验证 `$HOME/.kube/config` 文件是否包含有效证书,并
在必要时重新生成证书。在 kubeconfig 文件中的证书是 base64 编码的。
- 该 `base64 -d` 命令可以用来解码证书,`openssl x509 -text -noout` 命令
+ 该 `base64 --decode` 命令可以用来解码证书,`openssl x509 -text -noout` 命令
可以用于查看证书信息。
- 使用如下方法取消设置 `KUBECONFIG` 环境变量的值:
@@ -329,7 +369,7 @@ Unable to connect to the server: x509: certificate signed by unknown authority (
export KUBECONFIG=/etc/kubernetes/admin.conf
```
-- 另一个方法是覆盖 `kubeconfig` 的现有用户 "管理员" :
+- 另一个方法是覆盖 `kubeconfig` 的现有用户 "管理员":
```shell
mv $HOME/.kube $HOME/.kube.bak
@@ -338,22 +378,6 @@ Unable to connect to the server: x509: certificate signed by unknown authority (
sudo chown $(id -u):$(id -g) $HOME/.kube/config
```
-
-
+
## 在 Vagrant 中使用 flannel 作为 pod 网络时的默认 NIC
以下错误可能表明 Pod 网络中出现问题:
@@ -432,9 +472,9 @@ Error from server: Get https://10.19.0.41:10250/containerLogs/default/mysql-ddc6
```
- This may be due to Kubernetes using an IP that can not communicate with other IPs on the seemingly same subnet, possibly by policy of the machine provider.
-- Digital Ocean assigns a public IP to `eth0` as well as a private one to be used internally as anchor for their floating IP feature, yet `kubelet` will pick the latter as the node's `InternalIP` instead of the public one.
+- DigitalOcean assigns a public IP to `eth0` as well as a private one to be used internally as anchor for their floating IP feature, yet `kubelet` will pick the latter as the node's `InternalIP` instead of the public one.
- Use `ip addr show` to check for this scenario instead of `ifconfig` because `ifconfig` will not display the offending alias IP address. Alternatively an API endpoint specific to Digital Ocean allows to query for the anchor IP from the droplet:
+ Use `ip addr show` to check for this scenario instead of `ifconfig` because `ifconfig` will not display the offending alias IP address. Alternatively an API endpoint specific to DigitalOcean allows to query for the anchor IP from the droplet:
```sh
curl http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/address
@@ -446,7 +486,7 @@ Error from server: Get https://10.19.0.41:10250/containerLogs/default/mysql-ddc6
private network. The `kubeletExtraArgs` section of the kubeadm
[`NodeRegistrationOptions` structure](/docs/reference/config-api/kubeadm-config.v1beta3/#kubeadm-k8s-io-v1beta3-NodeRegistrationOptions)
can be used for this.
-
+
Then restart `kubelet`:
```sh
@@ -464,20 +504,20 @@ Error from server: Get https://10.19.0.41:10250/containerLogs/default/mysql-ddc6
- 这或许是由于 Kubernetes 使用的 IP 无法与看似相同的子网上的其他 IP 进行通信的缘故,
可能是由机器提供商的政策所导致的。
-- Digital Ocean 既分配一个共有 IP 给 `eth0`,也分配一个私有 IP 在内部用作其浮动 IP 功能的锚点,
+- DigitalOcean 既分配一个共有 IP 给 `eth0`,也分配一个私有 IP 在内部用作其浮动 IP 功能的锚点,
然而 `kubelet` 将选择后者作为节点的 `InternalIP` 而不是公共 IP
使用 `ip addr show` 命令代替 `ifconfig` 命令去检查这种情况,因为 `ifconfig` 命令
- 不会显示有问题的别名 IP 地址。或者指定的 Digital Ocean 的 API 端口允许从 droplet 中
+ 不会显示有问题的别名 IP 地址。或者指定的 DigitalOcean 的 API 端口允许从 droplet 中
查询 anchor IP:
```sh
curl http://169.254.169.254/metadata/v1/interfaces/public/0/anchor_ipv4/address
```
- 解决方法是通知 `kubelet` 使用哪个 `--node-ip`。当使用 Digital Ocean 时,可以是公网IP(分配给 `eth0`的),
+ 解决方法是通知 `kubelet` 使用哪个 `--node-ip`。当使用 DigitalOcean 时,可以是公网IP(分配给 `eth0` 的),
或者是私网IP(分配给 `eth1` 的)。私网 IP 是可选的。
- [kubadm `NodeRegistrationOptions` 结构](/zh/docs/reference/config-api/kubeadm-config.v1beta3/#kubeadm-k8s-io-v1beta3-NodeRegistrationOptions)
+ [kubadm `NodeRegistrationOptions` 结构](/zh/docs/reference/config-api/kubeadm-config.v1beta3/#kubeadm-k8s-io-v1beta3-NodeRegistrationOptions)
的 `KubeletExtraArgs` 部分被用来处理这种情况。
然后重启 `kubelet`:
@@ -557,7 +597,7 @@ yum downgrade docker-1.13.1-75.git8633870.el7.centos.x86_64 docker-client-1.13.1
- Install one of the more recent recommended versions, such as 18.06:
```bash
-sudo yum-config-manager -add-repo https://download.docker.com/linux/centos/docker-ce.repo
+sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce-18.06.1.ce-3.el7.x86_64
```
-->
@@ -565,7 +605,7 @@ yum install docker-ce-18.06.1.ce-3.el7.x86_64
如果你遇到以下错误:
-```
+```console
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "process_linux.go:110: decoding init error from pipe caused \"read parent: connection reset by peer\""
```
@@ -595,13 +635,13 @@ component like the kube-apiserver. However, this mechanism is limited due to the
the values (`mapStringString`).
If you decide to pass an argument that supports multiple, comma-separated values such as
-`-apiserver-extra-args "enable-admission-plugins=LimitRanger,NamespaceExists"` this flag will fail with
+`--apiserver-extra-args "enable-admission-plugins=LimitRanger,NamespaceExists"` this flag will fail with
`flag: malformed pair, expect string=string`. This happens because the list of arguments for
-`-apiserver-extra-args` expects `key=value` pairs and in this case `NamespacesExists` is considered
+`--apiserver-extra-args` expects `key=value` pairs and in this case `NamespacesExists` is considered
as a key that is missing a value.
Alternatively, you can try separating the `key=value` pairs like so:
-`-apiserver-extra-args "enable-admission-plugins=LimitRanger,enable-admission-plugins=NamespaceExists"`
+`--apiserver-extra-args "enable-admission-plugins=LimitRanger,enable-admission-plugins=NamespaceExists"`
but this will result in the key `enable-admission-plugins` only having the value of `NamespaceExists`.
A known workaround is to use the kubeadm [configuration file](/docs/reference/config-api/kubeadm-config.v1beta3/).
@@ -642,7 +682,7 @@ A known solution is to patch the kube-proxy DaemonSet to allow scheduling it on
nodes regardless of their conditions, keeping it off of other nodes until their initial guarding
conditions abate:
```
-kubectl -n kube-system patch ds kube-proxy -p='{ "spec": { "template": { "spec": { "tolerations": [ { "key": "CriticalAddonsOnly", "operator": "Exists" }, { "effect": "NoSchedule", "key": "node-role.kubernetes.io/master" } ] } } } }'
+kubectl -n kube-system patch ds kube-proxy -p='{ "spec": { "template": { "spec": { "tolerations": [ { "key": "CriticalAddonsOnly", "operator": "Exists" }, { "effect": "NoSchedule", "key": "node-role.kubernetes.io/master" }, { "effect": "NoSchedule", "key": "node-role.kubernetes.io/control-plane" } ] } } } }'
```
The tracking issue for this problem is [here](https://github.com/kubernetes/kubeadm/issues/1027).
@@ -654,7 +694,7 @@ The tracking issue for this problem is [here](https://github.com/kubernetes/kube
在 kube-proxy Pod 中可以看到以下错误:
-```
+```console
server.go:610] Failed to retrieve node IP: host IP unknown; known addresses: []
proxier.go:340] invalid nodeIP, initializing kube-proxy with 127.0.0.1 as nodeIP
```
@@ -663,7 +703,7 @@ proxier.go:340] invalid nodeIP, initializing kube-proxy with 127.0.0.1 as nodeIP
而不管它们的条件如何,将其与其他节点保持隔离,直到它们的初始保护条件消除:
```shell
-kubectl -n kube-system patch ds kube-proxy -p='{ "spec": { "template": { "spec": { "tolerations": [ { "key": "CriticalAddonsOnly", "operator": "Exists" }, { "effect": "NoSchedule", "key": "node-role.kubernetes.io/master" } ] } } } }'
+kubectl -n kube-system patch ds kube-proxy -p='{ "spec": { "template": { "spec": { "tolerations": [ { "key": "CriticalAddonsOnly", "operator": "Exists" }, { "effect": "NoSchedule", "key": "node-role.kubernetes.io/master" }, { "effect": "NoSchedule", "key": "node-role.kubernetes.io/control-plane" } ] } } } }'
```
此问题的跟踪[在这里](https://github.com/kubernetes/kubeadm/issues/1027)。
@@ -681,7 +721,7 @@ for the feature to work.
## 节点上的 `/usr` 被以只读方式挂载 {#usr-mounted-read-only}
在类似 Fedora CoreOS 或者 Flatcar Container Linux 这类 Linux 发行版本中,
-目录 `/usr` 是以只读文件系统的形式挂载的。
+目录 `/usr` 是以只读文件系统的形式挂载的。
在支持 [FlexVolume](https://github.com/kubernetes/community/blob/ab55d85/contributors/devel/sig-storage/flexvolume.md)时,
类似 kubelet 和 kube-controller-manager 这类 Kubernetes 组件使用默认路径
`/usr/libexec/kubernetes/kubelet-plugins/volume/exec/`,
@@ -695,9 +735,9 @@ To workaround this issue you can configure the flex-volume directory using the k
On the primary control-plane Node (created using `kubeadm init`) pass the following
file using `--config`:
-->
-为了解决这个问题,你可以使用 kubeadm 的[配置文件](/docs/reference/config-api/kubeadm-config.v1beta3/) 来配置 FlexVolume 的目录。
+为了解决这个问题,你可以使用 kubeadm 的[配置文件](/zh/docs/reference/config-api/kubeadm-config.v1beta3/) 来配置 FlexVolume 的目录。
-在(使用 `kubeadm init` 创建的)主控制节点上,使用 `-config`
+在(使用 `kubeadm init` 创建的)主控制节点上,使用 `--config`
参数传入如下文件:
```yaml
@@ -789,7 +829,7 @@ on the side of the metrics-server:
kubeadm 为 kubelet 部署的是自签名的服务证书。这可能会导致 metrics-server
端报告下面的错误信息:
-```
+```console
x509: certificate signed by unknown authority
x509: certificate is valid for IP-foo not IP-bar
```
@@ -803,5 +843,4 @@ Also see [How to run the metrics-server securely](https://github.com/kubernetes-
参见[为 kubelet 启用签名的服务证书](/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#kubelet-serving-certs)
以进一步了解如何在 kubeadm 集群中配置 kubelet 使用正确签名了的服务证书。
-另请参阅[How to run the metrics-server securely](https://github.com/kubernetes-sigs/metrics-server/blob/master/FAQ.md#how-to-run-metrics-server-securely)。
-
+另请参阅 [How to run the metrics-server securely](https://github.com/kubernetes-sigs/metrics-server/blob/master/FAQ.md#how-to-run-metrics-server-securely)。
diff --git a/content/zh/docs/setup/production-environment/tools/kubespray.md b/content/zh/docs/setup/production-environment/tools/kubespray.md
index 3e1cf47c1e..512f7589dd 100644
--- a/content/zh/docs/setup/production-environment/tools/kubespray.md
+++ b/content/zh/docs/setup/production-environment/tools/kubespray.md
@@ -83,7 +83,7 @@ Provision servers with the following [requirements](https://github.com/kubernete
* The target servers are configured to allow **IPv4 forwarding**
* **Your ssh key must be copied** to all the servers in your inventory
* **Firewalls are not managed by kubespray**. You'll need to implement appropriate rules as needed. You should disable your firewall in order to avoid any issues during deployment
-* If kubespray is ran from a non-root user account, correct privilege escalation method should be configured in the target servers and the `ansible_become` flag or command parameters `--become` or `-b` should be specified
+* If kubespray is run from a non-root user account, correct privilege escalation method should be configured in the target servers and the `ansible_become` flag or command parameters `--become` or `-b` should be specified
-->
* 在将运行 Ansible 命令的计算机上安装 Ansible v2.9 和 python-netaddr
* **运行 Ansible Playbook 需要 Jinja 2.11(或更高版本)**
@@ -156,7 +156,7 @@ Kubespray 能够自定义部署的许多方面:
* 证书生成方式
可以修改[变量文件](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html)
以进行 Kubespray 定制。
diff --git a/content/zh/docs/setup/production-environment/windows/user-guide-windows-containers.md b/content/zh/docs/setup/production-environment/windows/user-guide-windows-containers.md
index 88c23e548f..c4a28a707c 100644
--- a/content/zh/docs/setup/production-environment/windows/user-guide-windows-containers.md
+++ b/content/zh/docs/setup/production-environment/windows/user-guide-windows-containers.md
@@ -21,7 +21,7 @@ Windows applications constitute a large portion of the services and applications
This guide walks you through the steps to configure and deploy a Windows container in Kubernetes.
-->
Windows 应用程序构成了许多组织中运行的服务和应用程序的很大一部分。
-本指南将引导您完成在 Kubernetes 中配置和部署 Windows 容器的步骤。
+本指南将引导你完成在 Kubernetes 中配置和部署 Windows 容器的步骤。
@@ -31,10 +31,10 @@ Windows 应用程序构成了许多组织中运行的服务和应用程序的很
* Configure an example deployment to run Windows containers on the Windows node
* (Optional) Configure an Active Directory Identity for your Pod using Group Managed Service Accounts (GMSA)
-->
-## 目标
+## 目标 {#objectives}
* 配置一个示例 deployment 以在 Windows 节点上运行 Windows 容器
-* (可选)使用组托管服务帐户(GMSA)为您的 Pod 配置 Active Directory 身份
+* (可选)使用组托管服务帐户(GMSA)为你的 Pod 配置 Active Directory 身份
-## 在你开始之前
+## 在你开始之前 {#before-you-begin}
* 创建一个 Kubernetes 集群,其中包括一个控制平面和
[运行 Windows 服务器的工作节点](/zh/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes/)
* 重要的是要注意,对于 Linux 和 Windows 容器,在 Kubernetes
上创建和部署服务和工作负载的行为几乎相同。
- 与集群接口的 [kubectl 命令](/zh/docs/reference/kubectl/overview/)相同。
+ 与集群接口的 [kubectl 命令](/zh/docs/reference/kubectl/)相同。
提供以下部分中的示例只是为了快速启动 Windows 容器的使用体验。
-## 入门:部署 Windows 容器
+## 入门:部署 Windows 容器 {#getting-started-deploying-a-windows-container}
-要在 Kubernetes 上部署 Windows 容器,您必须首先创建一个示例应用程序。
+要在 Kubernetes 上部署 Windows 容器,你必须首先创建一个示例应用程序。
下面的示例 YAML 文件创建了一个简单的 Web 服务器应用程序。
创建一个名为 `win-webserver.yaml` 的服务规约,其内容如下:
@@ -163,13 +163,13 @@ the container port 80 is exposed directly to the service.
kubectl get pods -o wide -w
```
- 正确部署服务后,两个 Pod 都标记为“Ready”。要退出 watch 命令,请按 Ctrl + C。
+ 正确部署服务后,两个 Pod 都标记为 “Ready”。要退出 watch 命令,请按 Ctrl + C。
1. 检查部署是否成功。验证:
* Windows 节点上每个 Pod 有两个容器,使用 `docker ps`
* Linux 控制平面节点列出两个 Pod,使用 `kubectl get pods`
- * 跨网络的节点到 Pod 通信,从 Linux 控制平面节点 `curl` 您的 pod IPs 的端口80,以检查 Web 服务器响应
+ * 跨网络的节点到 Pod 通信,从 Linux 控制平面节点 `curl` 你的 pod IPs 的端口 80,以检查 Web 服务器响应
* Pod 到 Pod 的通信,使用 docker exec 或 kubectl exec 在 Pod 之间
(以及跨主机,如果你有多个 Windows 节点)进行 ping 操作
* 服务到 Pod 的通信,从 Linux 控制平面节点和各个 Pod 中 `curl` 虚拟服务 IP
@@ -194,7 +194,7 @@ Only Windows pods are able to access service IPs.
-->
## 可观测性 {#observability}
-### 抓取来自工作负载的日志
+### 抓取来自工作负载的日志 {#capturing-logs-from-workloads}
-## 使用可配置的容器用户名
+## 使用可配置的容器用户名 {#using-configurable-container-usernames}
从 Kubernetes v1.16 开始,可以为 Windows 容器配置与其镜像默认值不同的用户名
来运行其入口点和进程。
@@ -255,7 +255,7 @@ simplified service principal name (SPN) management, and the ability to delegate
Containers configured with a GMSA can access external Active Directory Domain resources while carrying the identity configured with the GMSA.
Learn more about configuring and using GMSA for Windows containers [here](/docs/tasks/configure-pod-container/configure-gmsa/).
-->
-## 使用组托管服务帐户管理工作负载身份
+## 使用组托管服务帐户管理工作负载身份 {#managing-workload-identity-with-group-managed-service-accounts}
从 Kubernetes v1.14 开始,可以将 Windows 容器工作负载配置为使用组托管服务帐户(GMSA)。
组托管服务帐户是 Active Directory 帐户的一种特定类型,它提供自动密码管理,
@@ -267,7 +267,7 @@ Windows 容器配置和使用 GMSA 的更多信息。
-## 污点和容忍度
+## 污点和容忍度 {#taints-and-tolerations}
目前,用户需要将 Linux 和 Windows 工作负载运行在各自特定的操作系统的节点上,
-因而需要结合使用污点和节点选择算符。 这可能仅给 Windows 用户造成不便。
+因而需要结合使用污点和节点选择算符。这可能仅给 Windows 用户造成不便。
推荐的方法概述如下,其主要目标之一是该方法不应破坏与现有 Linux 工作负载的兼容性。
+
+如果 `IdentifyPodOS` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)是启用的,
+你可以(并且应该)为 Pod 设置 `.spec.os.name` 以表明该 Pod
+中的容器所针对的操作系统。对于运行 Linux 容器的 Pod,设置
+`.spec.os.name` 为 `linux`。对于运行 Windows 容器的 Pod,设置 `.spec.os.name`
+为 `Windows`。
+
+{{< note >}}
+从 1.24 开始,`IdentifyPodOS` 功能处于 Beta 阶段,默认启用。
+{{< /note >}}
+
+在将 Pod 分配给节点时,调度程序不使用 `.spec.os.name` 的值。你应该使用正常的 Kubernetes
+机制[将 Pod 分配给节点](/zh/docs/concepts/scheduling-eviction/assign-pod-node/),
+确保集群的控制平面将 Pod 放置到适合运行的操作系统。
+`.spec.os.name` 值对 Windows Pod 的调度没有影响,因此仍然需要污点、容忍度以及节点选择器,
+以确保 Windows Pod 调度至合适的 Windows 节点。
-### 确保特定操作系统的工作负载落在适当的容器主机上
+### 确保特定操作系统的工作负载落在适当的容器主机上 {#ensuring-os-specific-workloads-land-on-the-appropriate-container-host}
但是,我们了解到,在许多情况下,用户都有既存的大量的 Linux 容器部署,以及一个现成的配置生态系统,
例如社区 Helm charts,以及程序化 Pod 生成案例,例如 Operators。
-在这些情况下,您可能会不愿意更改配置添加 nodeSelector。替代方法是使用污点。
+在这些情况下,你可能会不愿意更改配置添加 nodeSelector。替代方法是使用污点。
由于 kubelet 可以在注册期间设置污点,因此可以轻松修改它,使其仅在 Windows 上运行时自动添加污点。
-### 处理同一集群中的多个 Windows 版本
+### 处理同一集群中的多个 Windows 版本 {#handling-multiple-windows-versions-in-the-same-cluster}
-Kubernetes 1.17 自动添加了一个新标签 `node.kubernetes.io/windows-build` 来简化此操作。
-如果您运行的是旧版本,则建议手动将此标签添加到 Windows 节点。
+Kubernetes 1.17 自动添加了一个新标签 `node.kubernetes.io/windows-build` 来简化此操作。
+如果你运行的是旧版本,则建议手动将此标签添加到 Windows 节点。
-### 使用 RuntimeClass 简化
+### 使用 RuntimeClass 简化 {#simplifying-with-runtimeclass}
@@ -117,23 +118,23 @@ The output is similar to this:
输出类似于:
```
-Kubernetes master is running at https://104.197.5.247
-elasticsearch-logging is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy
-kibana-logging is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/kibana-logging/proxy
-kube-dns is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/kube-dns/proxy
-grafana is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
-heapster is running at https://104.197.5.247/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
+Kubernetes master is running at https://192.0.2.1
+elasticsearch-logging is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy
+kibana-logging is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/kibana-logging/proxy
+kube-dns is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/kube-dns/proxy
+grafana is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
+heapster is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
```
这一输出显示了用 proxy 动词访问每个服务时可用的 URL。例如,此集群
(使用 Elasticsearch)启用了集群层面的日志。如果提供合适的凭据,可以通过
-`https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/`
+`https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/`
访问,或通过一个 `kubectl proxy` 来访问:
`http://localhost:8080/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/`。
@@ -141,7 +142,7 @@ at `https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-l
See [Access Clusters Using the Kubernetes API](/docs/tasks/administer-cluster/access-cluster-api/#accessing-the-cluster-api) for how to pass credentials or use kubectl proxy.
-->
{{< note >}}
-请参阅[使用 Kubernets API 访问集群](/zh/docs/tasks/administer-cluster/access-cluster-api/#accessing-the-cluster-api)
+请参阅[使用 Kubernetes API 访问集群](/zh/docs/tasks/administer-cluster/access-cluster-api/#accessing-the-cluster-api)
了解如何传递凭据或如何使用 `kubectl proxy`。
{{< /note >}}
@@ -187,49 +188,49 @@ URL 的 `` 段支持的格式为:
-->
##### 示例
-* 如要访问 Elasticsearch 服务末端 `_search?q=user:kimchy`,你可以使用:
+* 如要访问 Elasticsearch 服务末端 `_search?q=user:kimchy`,你可以使用:
- ```
- http://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_search?q=user:kimchy
- ```
+ ```
+ http://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_search?q=user:kimchy
+ ```
* 如要访问 Elasticsearch 集群健康信息`_cluster/health?pretty=true`,你会使用:
- ```
- https://104.197.5.247/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_cluster/health?pretty=true`
- ```
+ ```
+ https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_cluster/health?pretty=true
+ ```
-
- 健康信息与下面的例子类似:
+
+ 健康信息与下面的例子类似:
- ```json
- {
- "cluster_name" : "kubernetes_logging",
- "status" : "yellow",
- "timed_out" : false,
- "number_of_nodes" : 1,
- "number_of_data_nodes" : 1,
- "active_primary_shards" : 5,
- "active_shards" : 5,
- "relocating_shards" : 0,
- "initializing_shards" : 0,
- "unassigned_shards" : 5
- }
- ```
+ ```json
+ {
+ "cluster_name" : "kubernetes_logging",
+ "status" : "yellow",
+ "timed_out" : false,
+ "number_of_nodes" : 1,
+ "number_of_data_nodes" : 1,
+ "active_primary_shards" : 5,
+ "active_shards" : 5,
+ "relocating_shards" : 0,
+ "initializing_shards" : 0,
+ "unassigned_shards" : 5
+ }
+ ```
* 要访问 *https* Elasticsearch 服务健康信息 `_cluster/health?pretty=true`,你会使用:
- ```
- https://104.197.5.247/api/v1/namespaces/kube-system/services/https:elasticsearch-logging/proxy/_cluster/health?pretty=true
- ```
+ ```
+ https://192.0.2.1/api/v1/namespaces/kube-system/services/https:elasticsearch-logging:/proxy/_cluster/health?pretty=true
+ ```
-- Web 服务器通常不能传递令牌,所以你可能需要使用基本(密码)认证。
- API 服务器可以配置为接受基本认证,但你的集群可能并没有这样配置。
-- 某些 Web 应用可能无法工作,特别是那些使用客户端 Javascript 构造 URL 的
- 应用,所构造的 URL 可能并不支持代理路径前缀。
-
+ - Web 服务器通常不能传递令牌,所以你可能需要使用基本(密码)认证。
+ API 服务器可以配置为接受基本认证,但你的集群可能并没有这样配置。
+ - 某些 Web 应用可能无法工作,特别是那些使用客户端 Javascript 构造 URL 的
+ 应用,所构造的 URL 可能并不支持代理路径前缀。
diff --git a/content/zh/docs/tasks/access-application-cluster/access-cluster.md b/content/zh/docs/tasks/access-application-cluster/access-cluster.md
index 1dd18f0c90..a33dc180cc 100644
--- a/content/zh/docs/tasks/access-application-cluster/access-cluster.md
+++ b/content/zh/docs/tasks/access-application-cluster/access-cluster.md
@@ -34,9 +34,9 @@ or someone else setup the cluster and provided you with credentials and a locati
Check the location and credentials that kubectl knows about with this command:
-->
-## 使用 kubectl 完成集群的第一次访问
+## 使用 kubectl 完成集群的第一次访问 {#accessing-for-the-first-time-with-kubectl}
-当你第一次访问 Kubernetes API 的时候,我们建议你使用 Kubernetes CLI,`kubectl`。
+当你第一次访问 Kubernetes API 的时候,我们建议你使用 Kubernetes CLI 工具 `kubectl`。
访问集群时,你需要知道集群的地址并且拥有访问的凭证。通常,这些在你通过
[启动安装](/zh/docs/setup/)安装集群时都是自动安装好的,或者其他人安装时
@@ -49,11 +49,12 @@ kubectl config view
```
-有许多 [例子](/zh/docs/reference/kubectl/cheatsheet/) 介绍了如何使用 kubectl,
-可以在 [kubectl 参考](/zh/docs/reference/kubectl/overview/) 中找到更完整的文档。
+有许多[例子](/zh/docs/reference/kubectl/cheatsheet/)介绍了如何使用 kubectl,
+可以在 [kubectl 参考](/zh/docs/reference/kubectl/)中找到更完整的文档。
-## 直接访问 REST API
+## 直接访问 REST API {#directly-accessing-the-rest-api}
Kubectl 处理 apiserver 的定位和身份验证。
如果要使用 curl 或 wget 等 http 客户端或浏览器直接访问 REST API,可以通过
@@ -97,13 +98,13 @@ The following command runs kubectl in a mode where it acts as a reverse proxy.
locating the apiserver and authenticating.
Run it like this:
-->
-### 使用 kubectl proxy
+### 使用 kubectl proxy {#using-kubectl-proxy}
以下命令以反向代理的模式运行 kubectl。它处理 apiserver 的定位和验证。
像这样运行:
```shell
-kubectl proxy --port=8080 &
+kubectl proxy --port=8080
```
+输出类似于:
+
```json
{
"kind": "APIVersions",
@@ -139,18 +146,18 @@ curl http://localhost:8080/api/
-### 不使用 kubectl proxy
+### 不使用 kubectl proxy {#without-kubectl-proxy}
-在 Kubernetes 1.3 或更高版本中,`kubectl config view` 不再显示 token。
使用 `kubectl apply` 和 `kubectl describe secret ...` 及 grep 和剪切操作来为 default 服务帐户创建令牌,如下所示:
-`grep/cut` 方法实现:
+
首先,创建 Secret,请求默认 ServiceAccount 的令牌:
+
```shell
kubectl apply -f - <
接下来,等待令牌控制器使用令牌填充 Secret:
+
```shell
while ! kubectl describe secret default-token | grep -E '^token' >/dev/null; do
echo "waiting for token..." >&2
@@ -176,12 +182,22 @@ while ! kubectl describe secret default-token | grep -E '^token' >/dev/null; do
done
```
+
捕获并使用生成的令牌:
+
```shell
-APISERVER=$(kubectl config view | grep server | cut -f 2- -d ":" | tr -d " ")
-TOKEN=$(kubectl describe secret default-token | grep -E '^token' | cut -f2 -d':' | tr -d ' ')
+APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")
+TOKEN=$(kubectl describe secret default-token | grep -E '^token' | cut -f2 -d':' | tr -d " ")
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
```
+
+
+输出类似于:
+
```json
{
"kind": "APIVersions",
@@ -197,14 +213,22 @@ curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
}
```
+
`jsonpath` 方法实现:
```shell
APISERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
-TOKEN=$(kubectl get secret default-token -o jsonpath='{.data.token}' | base64 --decode )
+TOKEN=$(kubectl get secret default-token -o jsonpath='{.data.token}' | base64 --decode)
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
```
+
+输出类似于:
+
```json
{
"kind": "APIVersions",
@@ -230,9 +254,8 @@ certificate.
On some clusters, the apiserver does not require authentication; it may serve
on localhost, or be protected by a firewall. There is not a standard
-for this. [Configuring Access to the API](/docs/admin/accessing-the-api)
-describes how a cluster admin can configure this. Such approaches may conflict
-with future high-availability support.
+for this. [Controlling Access to the API](/docs/concepts/security/controlling-access)
+describes how a cluster admin can configure this.
-->
上面的例子使用了 `--insecure` 参数,这使得它很容易受到 MITM 攻击。
当 kubectl 访问集群时,它使用存储的根证书和客户端证书来访问服务器
@@ -252,26 +275,26 @@ client libraries.
### Go client
-* To get the library, run the following command: `go get k8s.io/client-go//kubernetes`. See [https://github.com/kubernetes/client-go](https://github.com/kubernetes/client-go) to see which versions are supported.
-* Write an application atop of the client-go clients. Note that client-go defines its own API objects, so if needed, please import API definitions from client-go rather than from the main repository, e.g., `import "k8s.io/client-go/1.4/pkg/api/v1"` is correct.
+* To get the library, run the following command: `go get k8s.io/client-go@kubernetes-`, see [INSTALL.md](https://github.com/kubernetes/client-go/blob/master/INSTALL.md#for-the-casual-user) for detailed installation instructions. See [https://github.com/kubernetes/client-go](https://github.com/kubernetes/client-go#compatibility-matrix) to see which versions are supported.
+* Write an application atop of the client-go clients. Note that client-go defines its own API objects, so if needed, please import API definitions from client-go rather than from the main repository, e.g., `import "k8s.io/client-go/kubernetes"` is correct.
The Go client can use the same [kubeconfig file](/docs/concepts/configuration/organize-cluster-access-kubeconfig/)
as the kubectl CLI does to locate and authenticate to the apiserver. See this [example](https://git.k8s.io/client-go/examples/out-of-cluster-client-configuration/main.go).
If the application is deployed as a Pod in the cluster, please refer to the [next section](#accessing-the-api-from-a-pod).
-->
-## 以编程方式访问 API
+## 以编程方式访问 API {#programmatic-access-to-the-api}
Kubernetes 官方提供对 [Go](#go-client) 和 [Python](#python-client) 的客户端库支持。
-### Go 客户端
+### Go 客户端 {#go-client}
-* 想要获得这个库,请运行命令:`go get k8s.io/client-go//kubernetes`。
- 参阅 [https://github.com/kubernetes/client-go](https://github.com/kubernetes/client-go)
- 来查看目前支持哪些版本。
+* 想要获得这个库,请运行命令:`go get k8s.io/client-go@kubernetes-`,
+ 有关详细安装说明,请参阅 [INSTALL.md](https://github.com/kubernetes/client-go/blob/master/INSTALL.md#for-the-casual-user)。
+ 请参阅 [https://github.com/kubernetes/client-go](https://github.com/kubernetes/client-go#compatibility-matrix) 以查看支持的版本。
* 基于这个 client-go 客户端库编写应用程序。
请注意,client-go 定义了自己的 API 对象,因此如果需要,请从 client-go 而不是从主存储库
- 导入 API 定义,例如,`import "k8s.io/client-go/1.4/pkg/api/v1"` 才是对的。
+ 导入 API 定义,例如,`import "k8s.io/client-go/kubernetes"` 才是对的。
Go 客户端可以像 kubectl CLI 一样使用相同的
[kubeconfig 文件](/zh/docs/concepts/configuration/organize-cluster-access-kubeconfig/)
@@ -286,7 +309,7 @@ Go 客户端可以像 kubectl CLI 一样使用相同的
To use [Python client](https://github.com/kubernetes-client/python), run the following command: `pip install kubernetes`. See [Python Client Library page](https://github.com/kubernetes-client/python) for more installation options.
-The Python client can use the same [kubeconfig file](/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/)
+The Python client can use the same [kubeconfig file](/docs/concepts/configuration/organize-cluster-access-kubeconfig/)
as the kubectl CLI does to locate and authenticate to the apiserver. See this [example](https://github.com/kubernetes-client/python/tree/master/examples).
### Other languages
@@ -294,7 +317,7 @@ as the kubectl CLI does to locate and authenticate to the apiserver. See this [e
There are [client libraries](/docs/reference/using-api/client-libraries/) for accessing the API from other languages.
See documentation for other libraries for how they authenticate.
-->
-### Python 客户端
+### Python 客户端 {#python-client}
如果想要使用 [Python 客户端](https://github.com/kubernetes-client/python),
请运行命令:`pip install kubernetes`。参阅
@@ -306,7 +329,7 @@ Python 客户端可以像 kubectl CLI 一样使用相同的
来定位和验证 apiserver,可参阅
[示例](https://github.com/kubernetes-client/python/tree/master/examples)。
-### 其它语言
+### 其它语言 {#other-languages}
目前有多个[客户端库](/zh/docs/reference/using-api/client-libraries/)
为其它语言提供访问 API 的方法。
@@ -316,89 +339,39 @@ Python 客户端可以像 kubectl CLI 一样使用相同的
## Accessing the API from a Pod
When accessing the API from a pod, locating and authenticating
-to the apiserver are somewhat different.
-
-The recommended way to locate the apiserver within the pod is with
-the `kubernetes.default.svc` DNS name, which resolves to a Service IP which in turn
-will be routed to an apiserver.
-
-The recommended way to authenticate to the apiserver is with a
-[service account](/docs/tasks/configure-pod-container/configure-service-account/) credential. By kube-system, a pod
-is associated with a service account, and a credential (token) for that
-service account is placed into the filesystem tree of each container in that pod,
-at `/var/run/secrets/kubernetes.io/serviceaccount/token`.
+to the API server are somewhat different.
-->
### 从 Pod 中访问 API {#accessing-the-api-from-a-pod}
-当你从 Pod 中访问 API 时,定位和验证 apiserver 会有些许不同。
-
-在 Pod 中定位 apiserver 的推荐方式是通过 `kubernetes.default.svc`
-这个 DNS 名称,该名称将会解析为服务 IP,然后服务 IP 将会路由到 apiserver。
-
-向 apiserver 进行身份验证的推荐方法是使用
-[服务帐户](/zh/docs/tasks/configure-pod-container/configure-service-account/) 凭据。
-通过 kube-system,Pod 与服务帐户相关联,并且该服务帐户的凭证(token)
-被放置在该 Pod 中每个容器的文件系统中,位于
-`/var/run/secrets/kubernetes.io/serviceaccount/token`。
+当你从 Pod 中访问 API 时,定位和验证 API 服务器会有些许不同。
-如果可用,则将证书放入每个容器的文件系统中的
-`/var/run/secrets/kubernetes.io/serviceaccount/ca.crt`,
-并且应该用于验证 apiserver 的服务证书。
-
-最后,名字空间作用域的 API 操作所使用的 default 名字空间将被放置在
-每个容器的 `/var/run/secrets/kubernetes.io/serviceaccount/namespace`
-文件中。
-
-
-在 Pod 中,建议连接 API 的方法是:
-
-- 在 Pod 的边车容器中运行 `kubectl proxy`,或者以后台进程的形式运行。
- 这将把 Kubernetes API 代理到当前 Pod 的 localhost 接口,
- 所以 Pod 中的所有容器中的进程都能访问它。
-- 使用 Go 客户端库,并使用 `rest.InClusterConfig()` 和
- `kubernetes.NewForConfig()` 函数创建一个客户端。
- 他们处理 apiserver 的定位和身份验证。
- [示例](https://git.k8s.io/client-go/examples/in-cluster-client-configuration/main.go)
-
-在每种情况下,Pod 的凭证都是为了与 apiserver 安全地通信。
+请参阅[从 Pod 中访问 API](/zh/docs/tasks/run-application/access-api-from-pod/)
+了解更多详情。
## 访问集群上运行的服务 {#accessing-services-running-on-the-cluster}
上一节介绍了如何连接到 Kubernetes API 服务器。
-有关连接到 Kubernetes 集群上运行的其他服务的信息,请参阅[访问集群服务](/zh/docs/tasks/administer-cluster/access-cluster-services/)。
-
+有关连接到 Kubernetes 集群上运行的其他服务的信息,请参阅
+[访问集群服务](/zh/docs/tasks/access-application-cluster/access-cluster-services/)。
-## 请求重定向
+## 请求重定向 {#requesting-redirects}
重定向功能已弃用并被删除。请改用代理(见下文)。
@@ -417,7 +390,7 @@ There are several different proxies you may encounter when using Kubernetes:
- adds authentication headers
-->
-## 多种代理
+## 多种代理 {#so-many-proxies}
使用 Kubernetes 时可能会遇到几种不同的代理:
@@ -431,7 +404,7 @@ There are several different proxies you may encounter when using Kubernetes:
- 添加身份验证头部
-2. [apiserver 代理](#discovering-builtin-services):
+2. [apiserver 代理](/zh/docs/tasks/access-application-cluster/access-cluster-services/#discovering-builtin-services):
- 内置于 apiserver 中
- 将集群外部的用户连接到集群 IP,否则这些 IP 可能无法访问
diff --git a/content/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md b/content/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md
index 867063c0f6..c5004d8f2d 100644
--- a/content/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md
+++ b/content/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters.md
@@ -22,14 +22,16 @@ configuration files. After your clusters, users, and contexts are defined in
one or more configuration files, you can quickly switch between clusters by using the
`kubectl config use-context` command.
-->
-本文展示如何使用配置文件来配置对多个集群的访问。 在将集群、用户和上下文定义在一个或多个配置文件中之后,用户可以使用 `kubectl config use-context` 命令快速地在集群之间进行切换。
+本文展示如何使用配置文件来配置对多个集群的访问。
+在将集群、用户和上下文定义在一个或多个配置文件中之后,用户可以使用
+`kubectl config use-context` 命令快速地在集群之间进行切换。
+{{< note >}}
-{{< note >}}
用于配置集群访问的文件有时被称为 *kubeconfig 文件*。
这是一种引用配置文件的通用方式,并不意味着存在一个名为 `kubeconfig` 的文件。
{{< /note >}}
@@ -63,6 +65,7 @@ kubectl 的版本应该与集群的 API 服务器
[使用同一次版本号](/zh/releases/version-skew-policy/#kubectl)。
+
-## 定义集群、用户和上下文
+## 定义集群、用户和上下文 {#define-clusters-users-and-contexts}
假设用户有两个集群,一个用于正式开发工作,一个用于其它临时用途(scratch)。
在 `development` 集群中,前端开发者在名为 `frontend` 的名字空间下工作,
-存储开发者在名为 `storage` 的名字空间下工作。 在 `scratch` 集群中,
-开发人员可能在默认名字空间下工作,也可能视情况创建附加的名字空间。
+存储开发者在名为 `storage` 的名字空间下工作。在 `scratch` 集群中,
+开发人员可能在默认名字空间下工作,也可能视情况创建附加的名字空间。
访问开发集群需要通过证书进行认证。
访问其它临时用途的集群需要通过用户名和密码进行认证。
-创建名为 `config-exercise` 的目录。 在
+创建名为 `config-exercise` 的目录。在
`config-exercise` 目录中,创建名为 `config-demo` 的文件,其内容为:
```yaml
@@ -122,7 +125,7 @@ your configuration file:
配置文件描述了集群、用户名和上下文。`config-demo` 文件中含有描述两个集群、
两个用户和三个上下文的框架。
-进入 `config-exercise` 目录。输入以下命令,将群集详细信息添加到配置文件中:
+进入 `config-exercise` 目录。输入以下命令,将集群详细信息添加到配置文件中:
```shell
kubectl config --kubeconfig=config-demo set-cluster development --server=https://1.2.3.4 --certificate-authority=fake-ca-file
@@ -139,16 +142,16 @@ kubectl config --kubeconfig=config-demo set-credentials developer --client-certi
kubectl config --kubeconfig=config-demo set-credentials experimenter --username=exp --password=some-password
```
+{{< note >}}
-
-注意:
- 要删除用户,可以运行 `kubectl --kubeconfig=config-demo config unset users.`
- 要删除集群,可以运行 `kubectl --kubeconfig=config-demo config unset clusters.`
- 要删除上下文,可以运行 `kubectl --kubeconfig=config-demo config unset contexts.`
+{{< /note >}}
-打开 `config-demo` 文件查看添加的详细信息。 也可以使用 `config view`
+打开 `config-demo` 文件查看添加的详细信息。也可以使用 `config view`
命令进行查看:
```shell
@@ -355,7 +358,7 @@ kubectl config --kubeconfig=config-demo view --minify
In your `config-exercise` directory, create a file named `config-demo-2` with this content:
-->
-## 创建第二个配置文件
+## 创建第二个配置文件 {#create-a-second-configuration-file}
在 `config-exercise` 目录中,创建名为 `config-demo-2` 的文件,其中包含以下内容:
@@ -384,7 +387,7 @@ See whether you have an environment variable named `KUBECONFIG`. If so, save the
current value of your `KUBECONFIG` environment variable, so you can restore it later.
For example:
-->
-## 设置 KUBECONFIG 环境变量
+## 设置 KUBECONFIG 环境变量 {#set-the-kubeconfig-environment-variable}
查看是否有名为 `KUBECONFIG` 的环境变量。
如有,保存 `KUBECONFIG` 环境变量当前的值,以便稍后恢复。
@@ -414,12 +417,12 @@ Temporarily append two paths to your `KUBECONFIG` environment variable. For exam
在 Windows 中以分号分隔。
如果有 `KUBECONFIG` 环境变量,请熟悉列表中的配置文件。
-临时添加两条路径到 `KUBECONFIG` 环境变量中。 例如:
+临时添加两条路径到 `KUBECONFIG` 环境变量中。例如:
### Linux
```shell
-export KUBECONFIG=$KUBECONFIG:config-demo:config-demo-2
+export KUBECONFIG=$KUBECONFIG:config-demo:config-demo-2
```
### Windows PowerShell
@@ -489,7 +492,7 @@ Go to `$HOME/.kube`, and see what files are there. Typically, there is a file na
`config`. There might also be other configuration files in this directory. Briefly
familiarize yourself with the contents of these files.
-->
-## 探索 $HOME/.kube 目录
+## 探索 $HOME/.kube 目录 {#explore-the-home-kube-directory}
如果用户已经拥有一个集群,可以使用 `kubectl` 与集群进行交互,
那么很可能在 `$HOME/.kube` 目录下有一个名为 `config` 的文件。
@@ -504,7 +507,7 @@ If you have a `$HOME/.kube/config` file, and it's not already listed in your
`KUBECONFIG` environment variable, append it to your `KUBECONFIG` environment variable now.
For example:
-->
-## 将 $HOME/.kube/config 追加到 KUBECONFIG 环境变量中
+## 将 $HOME/.kube/config 追加到 KUBECONFIG 环境变量中 {#append-home-kube-config-to-your-kubeconfig-environment-variable}
如果有 `$HOME/.kube/config` 文件,并且还未列在 `KUBECONFIG` 环境变量中,
那么现在将它追加到 `KUBECONFIG` 环境变量中。
@@ -535,11 +538,11 @@ kubectl config view
-## 清理
+## 清理 {#clean-up}
-将 `KUBECONFIG` 环境变量还原为原始值。 例如:
+将 `KUBECONFIG` 环境变量还原为原始值。例如:
### Linux
diff --git a/content/zh/docs/tasks/access-application-cluster/create-external-load-balancer.md b/content/zh/docs/tasks/access-application-cluster/create-external-load-balancer.md
index 75fe4b6e13..99feb4720e 100644
--- a/content/zh/docs/tasks/access-application-cluster/create-external-load-balancer.md
+++ b/content/zh/docs/tasks/access-application-cluster/create-external-load-balancer.md
@@ -13,62 +13,64 @@ weight: 80
本文展示如何创建一个外部负载均衡器。
-
-{{< note >}}
-此功能仅适用于支持外部负载均衡器的云提供商或环境。
-{{< /note >}}
-
-创建服务时,你可以选择自动创建云网络负载均衡器。这提供了一个外部可访问的 IP 地址,
-可将流量分配到集群节点上的正确端口上
-( _假设集群在支持的环境中运行,并配置了正确的云负载平衡器提供商包_)。
+创建 {{< glossary_tooltip text="服务" term_id="service" >}} 时,你可以选择自动创建云网络负载均衡器。
+负载均衡器提供外部可访问的 IP 地址,可将流量发送到集群节点上的正确端口上
+( **假设集群在支持的环境中运行,并配置了正确的云负载均衡器驱动包**)。
-有关如何配置和使用 Ingress 资源为服务提供外部可访问的 URL、负载均衡流量、终止 SSL 等功能,
-请查看 [Ingress](/zh/docs/concepts/services-networking/ingress/) 文档。
+你还可以使用 {{< glossary_tooltip text="Ingress" term_id="ingress" >}} 代替 Service。
+更多信息,请参阅 [Ingress](/zh/docs/concepts/services-networking/ingress/) 文档。
## {{% heading "prerequisites" %}}
-* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+{{< include "task-tutorial-prereqs.md" >}}
+
+
+你的集群必须在已经支持配置外部负载均衡器的云或其他环境中运行。
-## 配置文件
+## 创建服务 {#create-a-service}
-要创建外部负载均衡器,请将以下内容添加到
-[服务配置文件](/zh/docs/concepts/services-networking/service/#loadbalancer):
+### 基于清单文件创建服务 {#create-a-service-from-a-manifest}
+
+要创建外部负载均衡器,请将以下内容添加到你的 Service 清单文件:
```yaml
type: LoadBalancer
```
-你的配置文件可能会如下所示:
+你的清单文件可能会如下所示:
```yaml
apiVersion: v1
@@ -85,29 +87,31 @@ spec:
```
-## 使用 kubectl
+### 使用 kubectl 创建 Service {#create-a-service-using-kubectl}
你也可以使用 `kubectl expose` 命令及其 `--type=LoadBalancer` 参数创建服务:
```bash
-kubectl expose rc example --port=8765 --target-port=9376 \
+kubectl expose deployment example --port=8765 --target-port=9376 \
--name=example-service --type=LoadBalancer
```
-此命令通过使用与引用资源(在上面的示例的情况下,名为 `example` 的 replication controller)相同的选择器来创建一个新的服务。
+此命令通过使用与引用资源(在上面的示例的情况下,名为 `example` 的
+{{< glossary_tooltip text="Deployment" term_id="deployment" >}})
+相同的选择器来创建一个新的服务。
更多信息(包括更多的可选参数),请参阅
[`kubectl expose` 指南](/docs/reference/generated/kubectl/kubectl-commands/#expose)。
@@ -118,7 +122,7 @@ For more information, including optional flags, refer to the
You can find the IP address created for your service by getting the service
information through `kubectl`:
-->
-## 找到你的 IP 地址
+## 找到你的 IP 地址 {#finding-your-ip-address}
你可以通过 `kubectl` 获取服务信息,找到为你的服务创建的 IP 地址:
@@ -127,30 +131,34 @@ kubectl describe services example-service
```
-这将获得如下输出:
+这将获得类似如下输出:
-```bash
- Name: example-service
- Namespace: default
- Labels:
- Annotations:
- Selector: app=example
- Type: LoadBalancer
- IP: 10.67.252.103
- LoadBalancer Ingress: 192.0.2.89
- Port: 80/TCP
- NodePort: 32445/TCP
- Endpoints: 10.64.0.4:80,10.64.1.5:80,10.64.2.4:80
- Session Affinity: None
- Events:
+```
+Name: example-service
+Namespace: default
+Labels: app=example
+Annotations:
+Selector: app=example
+Type: LoadBalancer
+IP Families:
+IP: 10.3.22.96
+IPs: 10.3.22.96
+LoadBalancer Ingress: 192.0.2.89
+Port: 8765/TCP
+TargetPort: 9376/TCP
+NodePort: 30593/TCP
+Endpoints: 172.17.0.3:9376
+Session Affinity: None
+External Traffic Policy: Cluster
+Events:
```
-IP 地址列在 `LoadBalancer Ingress` 旁边。
+负载均衡器的 IP 地址列在 `LoadBalancer Ingress` 旁边。
-## 保留客户端源 IP
+## 保留客户端源 IP {#preserving-the-client-source-ip}
-由于此功能的实现,目标容器中看到的源 IP 将 *不是客户端的原始源 IP*。
-要启用保留客户端 IP,可以在服务的 spec 中配置以下字段(支持 GCE/Google Kubernetes Engine 环境):
+默认情况下,目标容器中看到的源 IP 将**不是客户端的原始源 IP**。
+要启用保留客户端 IP,可以在服务的 `.spec` 中配置以下字段:
-* `service.spec.externalTrafficPolicy` - 表示此服务是否希望将外部流量路由到节点本地或集群范围的端点。
- 有两个可用选项:Cluster(默认)和 Local。
- Cluster 隐藏了客户端源 IP,可能导致第二跳到另一个节点,但具有良好的整体负载分布。
- Local 保留客户端源 IP 并避免 LoadBalancer 和 NodePort 类型服务的第二跳,
+* `.spec.externalTrafficPolicy` - 表示此 Service 是否希望将外部流量路由到节点本地或集群范围的端点。
+ 有两个可用选项:`Cluster`(默认)和 `Local`。
+ `Cluster` 隐藏了客户端源 IP,可能导致第二跳到另一个节点,但具有良好的整体负载分布。
+ `Local` 保留客户端源 IP 并避免 LoadBalancer 和 NodePort 类型服务的第二跳,
但存在潜在的不均衡流量传播风险。
-* `service.spec.healthCheckNodePort` - 指定服务的 healthcheck nodePort(数字端口号)。
- 如果未指定 `healthCheckNodePort`,服务控制器从集群的 NodePort 范围内分配一个端口。
+* `.spec.healthCheckNodePort` - 指定服务的 healthcheck nodePort(数字端口号)。
+ 如果你未指定 `healthCheckNodePort`,服务控制器从集群的 NodePort 范围内分配一个端口。
你可以通过设置 API 服务器的命令行选项 `--service-node-port-range` 来配置上述范围。
- 它将会使用用户指定的 `healthCheckNodePort` 值(如果被客户端指定)。
- 仅当 `type` 设置为 LoadBalancer 并且 `externalTrafficPolicy` 设置为 Local 时才生效。
+ 在服务 `type` 设置为 LoadBalancer 并且 `externalTrafficPolicy` 设置为 `Local` 时,
+ Service 将会使用用户指定的 `healthCheckNodePort` 值(如果你指定了它)。
-可以通过在服务的配置文件中将 `externalTrafficPolicy` 设置为 Local 来激活此功能。
+可以通过在服务的清单文件中将 `externalTrafficPolicy` 设置为 Local 来激活此功能。比如:
```yaml
apiVersion: v1
@@ -228,9 +236,38 @@ spec:
type: LoadBalancer
```
+
+### 保留源 IP 时的注意事项和限制 {#caveats-and-limitations-when-preserving-source-ips}
+
+一些云服务供应商的负载均衡服务不允许你为每个目标配置不同的权重。
+
+由于每个目标在向节点发送流量方面的权重相同,因此外部流量不会在不同 Pod 之间平均负载。
+外部负载均衡器不知道每个节点上用作目标的 Pod 数量。
+
+
+在 `NumServicePods << _NumNodes` 或 `NumServicePods >> NumNodes` 时,
+即使没有权重,也会看到接近相等的分布。
+
+内部 Pod 到 Pod 的流量应该与 ClusterIP 服务类似,所有 Pod 的概率相同。
+
-## 回收负载均衡器
+## 回收负载均衡器 {#garbage-collecting-load-balancers}
-在通常情况下,应在删除 LoadBalancer 类型服务后立即清除云提供商中的相关负载均衡器资源。
+{{< feature-state for_k8s_version="v1.17" state="stable" >}}
+
+在通常情况下,应在删除 LoadBalancer 类型 Service 后立即清除云服务供应商中的相关负载均衡器资源。
但是,众所周知,在删除关联的服务后,云资源被孤立的情况很多。
引入了针对服务负载均衡器的终结器保护,以防止这种情况发生。
通过使用终结器,在删除相关的负载均衡器资源之前,也不会删除服务资源。
@@ -258,63 +297,35 @@ service controller crashing.
即使在诸如服务控制器崩溃之类的极端情况下,这也可以防止负载均衡器资源悬空。
-## 外部负载均衡器提供商
+## 外部负载均衡器供应商 {#external-load-balancer-providers}
请务必注意,此功能的数据路径由 Kubernetes 集群外部的负载均衡器提供。
当服务 `type` 设置为 LoadBalancer 时,Kubernetes 向集群中的 Pod 提供的功能等同于
-`type` 等于 ClusterIP,并通过使用 Kubernetes pod 的条目对负载均衡器(从外部到 Kubernetes)
-进行编程来扩展它。
-Kubernetes 服务控制器自动创建外部负载均衡器、健康检查(如果需要)、防火墙规则(如果需要),
-并获取云提供商分配的外部 IP 并将其填充到服务对象中。
+`type` 设置为 ClusterIP,并通过使用托管了相关 Kubernetes Pod 的节点作为条目对负载均衡器
+(从外部到 Kubernetes)进行编程来扩展它。
+Kubernetes 控制平面自动创建外部负载均衡器、健康检查(如果需要)和包过滤规则(如果需要)。
+一旦云服务供应商为负载均衡器分配了 IP 地址,控制平面就会查找该外部 IP 地址并将其填充到 Service 对象中。
+
+## {{% heading "whatsnext" %}}
-## 保留源 IP 时的注意事项和限制
-
-GCE/AWS 负载均衡器不为其目标池提供权重。
-对于旧的 LB kube-proxy 规则来说,这不是一个问题,它可以在所有端点之间正确平衡。
-
-
-使用新功能,外部流量不会在 pod 之间平均负载,而是在节点级别平均负载
-(因为 GCE/AWS 和其他外部 LB 实现无法指定每个节点的权重,
-因此它们的平衡跨所有目标节点,并忽略每个节点上的 Pod 数量)。
-
-
-但是,我们可以声明,对于 `NumServicePods << NumNodes` 或 `NumServicePods >> NumNodes` 时,
-即使没有权重,也会看到接近相等的分布。
-
-
-一旦外部负载平衡器提供权重,就可以将此功能添加到 LB 编程路径中。
-*未来工作:1.4 版本不提供权重支持,但可能会在将来版本中添加*
-
-内部 Pod 到 Pod 的流量应该与 ClusterIP 服务类似,所有 Pod 的概率相同。
+* 阅读[服务](/zh/docs/concepts/services-networking/service/)
+* 阅读 [Ingress](/zh/docs/concepts/services-networking/ingress/)
+* 阅读[使用 Service 连接到应用](/zh/docs/concepts/services-networking/connect-applications-service/)
diff --git a/content/zh/docs/tasks/access-application-cluster/ingress-minikube.md b/content/zh/docs/tasks/access-application-cluster/ingress-minikube.md
index 139123e8e2..f23f138210 100644
--- a/content/zh/docs/tasks/access-application-cluster/ingress-minikube.md
+++ b/content/zh/docs/tasks/access-application-cluster/ingress-minikube.md
@@ -357,13 +357,13 @@ The following manifest defines an Ingress that sends traffic to your Service via
```yaml
- - path: /v2
- pathType: Prefix
- backend:
- service:
- name: web2
- port:
- number: 8080
+ - path: /v2
+ pathType: Prefix
+ backend:
+ service:
+ name: web2
+ port:
+ number: 8080
```
许多[样例](https://github.com/kubernetes/examples/tree/master/)
-提供了使用 kubectl 的介绍。完整文档请见 [kubectl 手册](/zh/docs/reference/kubectl/overview/)。
+提供了使用 kubectl 的介绍。完整文档请见 [kubectl 手册](/zh/docs/reference/kubectl/)。
-1. 以代理模式运行 kubectl(推荐)。
+1. 以代理模式运行 kubectl(推荐)。
推荐使用此方法,因为它用存储的 apiserver 位置并使用自签名证书验证 API 服务器的标识。
使用这种方法无法进行中间人(MITM)攻击。
2. 另外,你可以直接为 HTTP 客户端提供位置和身份认证。
@@ -160,8 +159,25 @@ export CLUSTER_NAME="some_server_name"
# 指向引用该集群名称的 API 服务器
APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}")
-# 获得令牌
-TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}"|base64 -d)
+# 创建一个 secret 来保存默认服务账户的令牌
+kubectl apply -f - </dev/null; do
+ echo "waiting for token..." >&2
+ sleep 1
+done
+
+# 获取令牌
+TOKEN=$(kubectl get secret default-token -o jsonpath='{.data.token}' | base64 --decode)
# 使用令牌玩转 API
curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
@@ -185,30 +201,6 @@ curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
}
```
-
-使用 `jsonpath` 方式:
-
-```shell
-APISERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
-TOKEN=$(kubectl get secret $(kubectl get serviceaccount default -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode )
-curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
-```
-
-```json
-{
- "kind": "APIVersions",
- "versions": [
- "v1"
- ],
- "serverAddressByClientCIDRs": [
- {
- "clientCIDR": "0.0.0.0/0",
- "serverAddress": "10.0.1.149:443"
- }
- ]
-}
-```
-
### 编程方式访问 API
Kubernetes 官方支持 [Go](#go-client)、[Python](#python-client)、[Java](#java-client)、
-[dotnet](#dotnet-client)、[Javascript](#javascript-client) 和 [Haskell](#haskell-client)
+[dotnet](#dotnet-client)、[JavaScript](#javascript-client) 和 [Haskell](#haskell-client)
语言的客户端库。还有一些其他客户端库由对应作者而非 Kubernetes 团队提供并维护。
参考[客户端库](/zh/docs/reference/using-api/client-libraries/)了解如何使用其他语言
来访问 API 以及如何执行身份认证。
diff --git a/content/zh/docs/tasks/administer-cluster/certificates.md b/content/zh/docs/tasks/administer-cluster/certificates.md
index 9047c0c0ae..953b2adf2c 100644
--- a/content/zh/docs/tasks/administer-cluster/certificates.md
+++ b/content/zh/docs/tasks/administer-cluster/certificates.md
@@ -1,11 +1,11 @@
---
-title: 证书
+title: 手动生成证书
content_type: task
weight: 20
---
1. 创建一个 JSON 配置文件,用来为 API 服务器生成秘钥和证书,例如:`server-csr.json`。
确认用你需要的值替换掉尖括号中的值。`MASTER_CLUSTER_IP` 是为 API 服务器 指定的服务集群 IP,就像前面小节描述的那样。
- 以下示例假定你的默认 DSN 域名为`cluster.local`。
+ 以下示例假定你的默认 DNS 域名为`cluster.local`。
{
"CN": "kubernetes",
diff --git a/content/zh/docs/tasks/administer-cluster/change-pv-reclaim-policy.md b/content/zh/docs/tasks/administer-cluster/change-pv-reclaim-policy.md
index 950e493f52..eaf763388b 100644
--- a/content/zh/docs/tasks/administer-cluster/change-pv-reclaim-policy.md
+++ b/content/zh/docs/tasks/administer-cluster/change-pv-reclaim-policy.md
@@ -54,13 +54,16 @@ PersistentVolumes 可以有多种回收策略,包括 "Retain"、"Recycle" 和
kubectl get pv
```
+
输出类似于这样:
- ```
- NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
- pvc-b6efd8da-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim1 10s
- pvc-b95650f8-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim2 6s
- pvc-bb3ca71d-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim3 3s
+ ```none
+ NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
+ pvc-b6efd8da-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim1 manual 10s
+ pvc-b95650f8-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim2 manual 6s
+ pvc-bb3ca71d-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim3 manual 3s
```
输出类似于这样:
- ```
- NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE
- pvc-b6efd8da-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim1 40s
- pvc-b95650f8-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim2 36s
- pvc-bb3ca71d-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Retain Bound default/claim3 33s
+ ```none
+ NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE
+ pvc-b6efd8da-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim1 manual 40s
+ pvc-b95650f8-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim2 manual 36s
+ pvc-bb3ca71d-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Retain Bound default/claim3 manual 33s
```
+* {{< api-reference page="config-and-storage-resources/persistent-volume-v1" >}}
+ * 注意 PersistentVolume 的 `.spec.persistentVolumeReclaimPolicy`
+ [字段](/docs/reference/kubernetes-api/config-and-storage-resources/persistent-volume-v1/#PersistentVolumeSpec)。
+* {{< api-reference page="config-and-storage-resources/persistent-volume-claim-v1" >}}
diff --git a/content/zh/docs/tasks/administer-cluster/cluster-upgrade.md b/content/zh/docs/tasks/administer-cluster/cluster-upgrade.md
index 72535b27e8..169059eb67 100644
--- a/content/zh/docs/tasks/administer-cluster/cluster-upgrade.md
+++ b/content/zh/docs/tasks/administer-cluster/cluster-upgrade.md
@@ -65,7 +65,7 @@ Once you have upgraded the cluster, remember to
[install the latest version of `kubectl`](/docs/tasks/tools/).
-->
如果你的集群是使用 `kubeadm` 安装工具部署而来,
-那么升级群集的详细信息,请参阅
+那么升级集群的详细信息,请参阅
[升级 kubeadm 集群](/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/)。
升级集群之后,要记得
@@ -111,7 +111,7 @@ kubelet on that node and bring the node back into service.
现在,你应该
[安装最新版本的 `kubectl`](/zh/docs/tasks/tools/).
-对于群集中的每个节点,
+对于集群中的每个节点,
[排空](/zh/docs/tasks/administer-cluster/safely-drain-node/)
节点,然后,或者用一个运行了 {{< skew latestVersion >}} kubelet 的新节点替换它;
或者升级此节点的 kubelet,并使节点恢复服务。
@@ -132,7 +132,7 @@ up steps for maintenance.
## 升级后的任务 {#post-upgrade-tasks}
-### 切换群集的存储 API 版本 {#switch-your-clusters-storage-api-version}
+### 切换集群的存储 API 版本 {#switch-your-clusters-storage-api-version}
@@ -22,8 +17,6 @@ content_type: task
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
-
-
-## 先决条件
+## 先决条件 {#prerequisites}
* 运行的 etcd 集群个数成员为奇数。
* etcd 是一个 leader-based 分布式系统。确保主节点定期向所有从节点发送心跳,以保持集群稳定。
* 确保不发生资源不足。
-
+
集群的性能和稳定性对网络和磁盘 I/O 非常敏感。任何资源匮乏都会导致心跳超时,
从而导致集群的不稳定。不稳定的情况表明没有选出任何主节点。
在这种情况下,集群不能对其当前状态进行任何更改,这意味着不能调度新的 pod。
@@ -66,7 +59,7 @@ content_type: task
[所需资源需求](https://etcd.io/docs/current/op-guide/hardware/)。
* 在生产中运行的 etcd 的最低推荐版本是 `3.2.10+`。
-
+
-## 资源要求
+## 资源需求 {#resource-requirements}
使用有限的资源运行 etcd 只适合测试目的。为了在生产中部署,需要先进的硬件配置。
-在生产中部署 etcd 之前,请查看
-[所需资源参考文档](https://etcd.io/docs/current/op-guide/hardware/#example-hardware-configurations)。
+在生产中部署 etcd 之前,请查看[所需资源参考文档](https://etcd.io/docs/current/op-guide/hardware/#example-hardware-configurations)。
-## 启动 etcd 集群
+
+## 启动 etcd 集群 {#starting-etcd-clusters}
本节介绍如何启动单节点和多节点 etcd 集群。
@@ -104,9 +97,9 @@ Use a single-node etcd cluster only for testing purpose.
2. Start the Kubernetes API server with the flag
`--etcd-servers=$PRIVATE_IP:2379`.
- Make sure `PRIVATE_IP` is set to your etcd client IP.
+ Make sure `PRIVATE_IP` is set to your etcd client IP.
-->
-### 单节点 etcd 集群
+### 单节点 etcd 集群 {#single-node-etcd-cluster}
只为测试目的使用单节点 etcd 集群。
@@ -123,20 +116,38 @@ Use a single-node etcd cluster only for testing purpose.
+### 多节点 etcd 集群 {#multi-node-etcd-cluster}
+
+出于耐用性和高可用性考量,在生产环境中应以多节点集群的方式运行 etcd,并且定期备份。
+建议在生产环境中使用五个成员的集群。
+有关该内容的更多信息,请参阅[常见问题文档](https://etcd.io/docs/current/faq/#what-is-failure-tolerance)。
+
+可以通过静态成员信息或动态发现的方式配置 etcd 集群。
+有关集群的详细信息,请参阅
+[etcd 集群文档](https://etcd.io/docs/current/op-guide/clustering/)。
+
+例如,考虑运行以下客户端 URL 的五个成员的 etcd 集群:`http://$IP1:2379`、
+`http://$IP2:2379`、`http://$IP3:2379`、`http://$IP4:2379` 和 `http://$IP5:2379`。
+要启动 Kubernetes API 服务器:
+
-### 多节点 etcd 集群
-
-为了耐用性和高可用性,在生产中将以多节点集群的方式运行 etcd,并且定期备份。
-建议在生产中使用五个成员的集群。
-有关该内容的更多信息,请参阅
-[常见问题文档](https://etcd.io/docs/current/faq/#what-is-failure-tolerance)。
-
-可以通过静态成员信息或动态发现的方式配置 etcd 集群。
-有关集群的详细信息,请参阅
-[etcd 集群文档](https://etcd.io/docs/current/op-guide/clustering/)。
-
-例如,考虑运行以下客户端 URL 的五个成员的 etcd 集群:`http://$IP1:2379`,
-`http://$IP2:2379`,`http://$IP3:2379`,`http://$IP4:2379` 和 `http://$IP5:2379`。
-要启动 Kubernetes API 服务器:
-
1. 运行以下命令:
```shell
etcd --listen-client-urls=http://$IP1:2379,http://$IP2:2379,http://$IP3:2379,http://$IP4:2379,http://$IP5:2379 --advertise-client-urls=http://$IP1:2379,http://$IP2:2379,http://$IP3:2379,http://$IP4:2379,http://$IP5:2379
```
-2. 使用参数 `--etcd-servers=$IP1:2379,$IP2:2379,$IP3:2379,$IP4:2379,$IP5:2379`
+2. 使用参数 `--etcd-servers=$IP1:2379,$IP2:2379,$IP3:2379,$IP4:2379,$IP5:2379`
启动 Kubernetes API 服务器。
确保将 `IP` 变量设置为客户端 IP 地址。
@@ -184,7 +180,7 @@ To run a load balancing etcd cluster:
For example, let the address of the load balancer be `$LB`.
3. Start Kubernetes API Servers with the flag `--etcd-servers=$LB:2379`.
-->
-### 使用负载均衡的多节点 etcd 集群
+### 使用负载均衡的多节点 etcd 集群 {#multi-node-etcd-cluster-with-load-balancer}
要运行负载均衡的 etcd 集群:
@@ -194,12 +190,19 @@ To run a load balancing etcd cluster:
+## 加固 etcd 集群 {#securing-etcd-clusters}
+
+对 etcd 的访问相当于集群中的 root 权限,因此理想情况下只有 API 服务器才能访问它。
+考虑到数据的敏感性,建议只向需要访问 etcd 集群的节点授予权限。
+
-## 安全的 etcd 集群
-
-对 etcd 的访问相当于集群中的 root 权限,因此理想情况下只有 API 服务器才能访问它。
-考虑到数据的敏感性,建议只向需要访问 etcd 集群的节点授予权限。
-
想要确保 etcd 的安全,可以设置防火墙规则或使用 etcd 提供的安全特性,这些安全特性依赖于 x509 公钥基础设施(PKI)。
首先,通过生成密钥和证书对来建立安全的通信通道。
例如,使用密钥对 `peer.key` 和 `peer.cert` 来保护 etcd 成员之间的通信,
@@ -224,76 +222,75 @@ authentication.
+### 安全通信 {#securing-communication}
+
+若要使用安全对等通信对 etcd 进行配置,请指定参数 `--peer-key-file=peer.key`
+和 `--peer-cert-file=peer.cert`,并使用 HTTPS 作为 URL 模式。
+
-### 安全通信
-
-若要使用安全对等通信对 etcd 进行配置,请指定参数 `--peer-key-file=peer.key`
-和 `--peer-cert-file=peer.cert`,并使用 HTTPS 作为 URL 模式。
-
-类似地,要使用安全客户端通信对 etcd 进行配置,请指定参数 `--key-file=k8sclient.key`
+类似地,要使用安全客户端通信对 etcd 进行配置,请指定参数 `--key-file=k8sclient.key`
和 `--cert-file=k8sclient.cert`,并使用 HTTPS 作为 URL 模式。
使用安全通信的客户端命令的示例:
```
ETCDCTL_API=3 etcdctl --endpoints 10.2.0.9:2379 \
- --cert=/etc/kubernetes/pki/etcd/client.crt \
- --key=/etc/kubernetes/pki/etcd/client.key \
+ --cert=/etc/kubernetes/pki/etcd/server.crt \
+ --key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
member list
```
+### 限制 etcd 集群的访问 {#limiting-access-of-etcd-clusters}
+
+配置安全通信后,限制只有 Kubernetes API 服务器可以访问 etcd 集群。使用 TLS 身份验证来完成此任务。
+
+例如,考虑由 CA `etcd.ca` 信任的密钥对 `k8sclient.key` 和 `k8sclient.cert`。
+当 etcd 配置为 `--client-cert-auth` 和 TLS 时,它使用系统 CA 或由 `--trusted-ca-file`
+参数传入的 CA 验证来自客户端的证书。指定参数 `--client-cert-auth=true` 和
+`--trusted-ca-file=etcd.ca` 将限制对具有证书 `k8sclient.cert` 的客户端的访问。
+
+一旦正确配置了 etcd,只有具有有效证书的客户端才能访问它。要让 Kubernetes API 服务器访问,
+可以使用参数 `--etcd-certfile=k8sclient.cert`、`--etcd-keyfile=k8sclient.key` 和 `--etcd-cafile=ca.cert` 配置。
+
-### 限制 etcd 集群的访问
-
-配置安全通信后,将 etcd 集群的访问限制在 Kubernetes API 服务器上。使用 TLS 身份验证来完成此任务。
-
-例如,考虑由 CA `etcd.ca` 信任的密钥对 `k8sclient.key` 和 `k8sclient.cert`。
-当 etcd 配置为 `--client-cert-auth` 和 TLS 时,它使用系统 CA 或由 `--trusted-ca-file` 参数传入的 CA 验证来自客户端的证书。
-指定参数 `--client-cert-auth=true` 和 `--trusted-ca-file=etcd.ca` 将限制对具有证书 `k8sclient.cert` 的客户端的访问。
-
-一旦正确配置了 etcd,只有具有有效证书的客户端才能访问它。要让 Kubernetes API 服务器访问,
-可以使用参数 `--etcd-certfile=k8sclient.cert`,`--etcd-keyfile=k8sclient.key` 和 `--etcd-cafile=ca.cert` 配置。
-
{{< note >}}
Kubernetes 目前不支持 etcd 身份验证。
想要了解更多信息,请参阅相关的问题
@@ -302,93 +299,43 @@ Kubernetes 目前不支持 etcd 身份验证。
+## 替换失败的 etcd 成员 {#replacing-a-failed-etcd-member}
+
+etcd 集群通过容忍少数成员故障实现高可用性。
+但是,要改善集群的整体健康状况,请立即替换失败的成员。当多个成员失败时,逐个替换它们。
+替换失败成员需要两个步骤:删除失败成员和添加新成员。
+
-## 替换失败的 etcd 成员
-
-etcd 集群通过容忍少数成员故障实现高可用性。
-但是,要改善集群的整体健康状况,请立即替换失败的成员。当多个成员失败时,逐个替换它们。
-替换失败成员需要两个步骤:删除失败成员和添加新成员。
-
虽然 etcd 在内部保留唯一的成员 ID,但建议为每个成员使用唯一的名称,以避免人为错误。
-例如,考虑一个三成员的 etcd 集群。让 URL 为:`member1=http://10.0.0.1`, `member2=http://10.0.0.2`
+例如,考虑一个三成员的 etcd 集群。假定 URL 分别为:`member1=http://10.0.0.1`、`member2=http://10.0.0.2`
和 `member3=http://10.0.0.3`。当 `member1` 失败时,将其替换为 `member4=http://10.0.0.4`。
+
1. 获取失败的 `member1` 的成员 ID:
```shell
etcdctl --endpoints=http://10.0.0.2,http://10.0.0.3 member list
```
+
显示以下信息:
```console
@@ -397,30 +344,45 @@ etcd 集群通过容忍少数成员故障实现高可用性。
fd422379fda50e48, started, member3, http://10.0.0.3:2380, http://10.0.0.3:2379
```
+
2. 移除失败的成员
```shell
etcdctl member remove 8211f1d0f64f3269
```
+
显示以下信息:
```console
Removed member 8211f1d0f64f3269 from cluster
```
+
3. 增加新成员:
```shell
etcdctl member add member4 --peer-urls=http://10.0.0.4:2380
```
+
显示以下信息:
```console
Member 2be1eb8f84b7f63e added to cluster ef37ad9dc622a7c4
```
+
4. 在 IP 为 `10.0.0.4` 的机器上启动新增加的成员:
```shell
@@ -430,12 +392,27 @@ etcd 集群通过容忍少数成员故障实现高可用性。
etcd [flags]
```
-5. 做以下事情之一:
+
+5. 执行以下操作之一:
+
+ 1. 更新 Kubernetes API 服务器的 `--etcd-servers` 参数,使 Kubernetes
+ 知道配置已更改,然后重新启动 Kubernetes API 服务器。
2. 如果在 deployment 中使用了负载均衡,更新负载均衡配置。
-有关集群重新配置的详细信息,请参阅 [etcd 重构文档](https://etcd.io/docs/current/op-guide/runtime-configuration/#remove-a-member)。
+
+有关集群重新配置的详细信息,请参阅
+[etcd 重构文档](https://etcd.io/docs/current/op-guide/runtime-configuration/#remove-a-member)。
-## 备份 etcd 集群
+## 备份 etcd 集群 {#backing-up-an-etcd-cluster}
所有 Kubernetes 对象都存储在 etcd 上。定期备份 etcd 集群数据对于在灾难场景(例如丢失所有控制平面节点)下恢复 Kubernetes 集群非常重要。
快照文件包含所有 Kubernetes 状态和关键信息。为了保证敏感的 Kubernetes 数据的安全,可以对快照文件进行加密。
@@ -458,47 +435,33 @@ snapshot and volume snapshot.
+### 内置快照 {#built-in-snapshot}
+
-### 内置快照
-
etcd 支持内置快照。快照可以从使用 `etcdctl snapshot save` 命令的活动成员中获取,
也可以通过从 etcd [数据目录](https://etcd.io/docs/current/op-guide/configuration/#--data-dir)
复制 `member/snap/db` 文件,该 etcd 数据目录目前没有被 etcd 进程使用。获取快照不会影响成员的性能。
+
下面是一个示例,用于获取 `$ENDPOINT` 所提供的键空间的快照到文件 `snapshotdb`:
```shell
ETCDCTL_API=3 etcdctl --endpoints $ENDPOINT snapshot save snapshotdb
```
-
+
验证快照:
```shell
@@ -515,94 +478,120 @@ ETCDCTL_API=3 etcdctl --write-out=table snapshot status snapshotdb
+### 卷快照 {#volume-snapshot}
+
+如果 etcd 运行在支持备份的存储卷(如 Amazon Elastic Block
+存储)上,则可以通过获取存储卷的快照来备份 etcd 数据。
+
+### 使用 etcdctl 选项的快照 {#snapshot-using-etcdctl-options}
+
+我们还可以使用 etcdctl 提供的各种选项来制作快照。例如:
```shell
ETCDCTL_API=3 etcdctl -h
-```
+```
+
+列出 etcdctl 可用的各种选项。例如,你可以通过指定端点、证书等来制作快照,如下所示:
```shell
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert= --cert= --key= \
snapshot save
```
+
+
+可以从 etcd Pod 的描述中获得 `trusted-ca-file`、`cert-file` 和 `key-file`。
+
+## 为 etcd 集群扩容 {#scaling-up-etcd-clusters}
+
+通过交换性能,对 etcd 集群扩容可以提高可用性。缩放不会提高集群性能和能力。
+一般情况下不要扩大或缩小 etcd 集群的集合。不要为 etcd 集群配置任何自动缩放组。
+强烈建议始终在任何官方支持的规模上运行生产 Kubernetes 集群时使用静态的五成员 etcd 集群。
+
-### 卷快照
-
-如果 etcd 运行在支持备份的存储卷(如 Amazon Elastic Block 存储)上,则可以通过获取存储卷的快照来备份 etcd 数据。
-
-### 使用 etcdctl 选项的快照
-
-我们还可以使用 etcdctl 提供的各种选项来拍摄快照。例如:
-
-```shell
-ETCDCTL_API=3 etcdctl -h
-```
-
-列出 etcdctl 可用的各种选项。例如,你可以通过指定端点,证书等来拍摄快照,如下所示:
-
-```shell
-ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
- --cacert= --cert= --key= \
- snapshot save
-```
-可以从 etcd Pod 的描述中获得 `trusted-ca-file`, `cert-file` 和 `key-file` 。
-
-## 扩展 etcd 集群
-
-通过交换性能,扩展 etcd 集群可以提高可用性。缩放不会提高集群性能和能力。
-一般情况下不要扩大或缩小 etcd 集群的集合。不要为 etcd 集群配置任何自动缩放组。
-强烈建议始终在任何官方支持的规模上运行生产 Kubernetes 集群时使用静态的五成员 etcd 集群。
-
合理的扩展是在需要更高可靠性的情况下,将三成员集群升级为五成员集群。
请参阅 [etcd 重新配置文档](https://etcd.io/docs/current/op-guide/runtime-configuration/#remove-a-member)
以了解如何将成员添加到现有集群中的信息。
+## 恢复 etcd 集群 {#restoring-an-etcd-cluster}
+
+etcd 支持从 [major.minor](http://semver.org/) 或其他不同 patch 版本的 etcd 进程中获取的快照进行恢复。
+还原操作用于恢复失败的集群的数据。
+
+在启动还原操作之前,必须有一个快照文件。它可以是来自以前备份操作的快照文件,
+也可以是来自剩余[数据目录](https://etcd.io/docs/current/op-guide/configuration/#--data-dir)的快照文件。
+例如:
```shell
ETCDCTL_API=3 etcdctl --endpoints 10.2.0.9:2379 snapshot restore snapshotdb
```
+
+恢复时也可以指定操作选项,例如:
+
+```shell
+ETCDCTL_API=3 etcdctl --data-dir snapshot restore snapshotdb
+```
+
+
+有关从快照文件还原集群的详细信息和示例,请参阅
+[etcd 灾难恢复文档](https://etcd.io/docs/current/op-guide/recovery/#restoring-a-cluster)。
+
+如果还原的集群的访问 URL 与前一个集群不同,则必须相应地重新配置 Kubernetes API 服务器。
+在本例中,使用参数 `--etcd-servers=$NEW_ETCD_CLUSTER` 而不是参数 `--etcd-servers=$OLD_ETCD_CLUSTER` 重新启动 Kubernetes API 服务器。
+用相应的 IP 地址替换 `$NEW_ETCD_CLUSTER` 和 `$OLD_ETCD_CLUSTER`。如果在 etcd 集群前面使用负载平衡,则可能需要更新负载均衡器。
+
+如果大多数 etcd 成员永久失败,则认为 etcd 集群失败。在这种情况下,Kubernetes 不能对其当前状态进行任何更改。
+虽然已调度的 pod 可能继续运行,但新的 pod 无法调度。在这种情况下,恢复 etcd 集群并可能需要重新配置 Kubernetes API 服务器以修复问题。
+
-## 恢复 etcd 集群
-
-etcd 支持从 [major.minor](http://semver.org/) 或其他不同 patch 版本的 etcd 进程中获取的快照进行恢复。
-还原操作用于恢复失败的集群的数据。
-
-在启动还原操作之前,必须有一个快照文件。它可以是来自以前备份操作的快照文件,
-也可以是来自剩余[数据目录]( https://etcd.io/docs/current/op-guide/configuration/#--data-dir)的快照文件。
-例如:
-
-```shell
-ETCDCTL_API=3 etcdctl --endpoints 10.2.0.9:2379 snapshot restore snapshotdb
-```
-
-恢复时也可以指定操作选项,例如:
-
-```
-ETCDCTL_API=3 etcdctl --data-dir snapshot restore snapshotdb
-```
-
-有关从快照文件还原集群的详细信息和示例,请参阅
-[etcd 灾难恢复文档](https://etcd.io/docs/current/op-guide/recovery/#restoring-a-cluster)。
-
-如果还原的集群的访问 URL 与前一个集群不同,则必须相应地重新配置 Kubernetes API 服务器。
-在本例中,使用参数 `--etcd-servers=$NEW_ETCD_CLUSTER` 而不是参数 `--etcd-servers=$OLD_ETCD_CLUSTER` 重新启动 Kubernetes API 服务器。
-用相应的 IP 地址替换 `$NEW_ETCD_CLUSTER` 和 `$OLD_ETCD_CLUSTER`。如果在 etcd 集群前面使用负载平衡,则可能需要更新负载均衡器。
-
-如果大多数 etcd 成员永久失败,则认为 etcd 集群失败。在这种情况下,Kubernetes 不能对其当前状态进行任何更改。
-虽然已调度的 pod 可能继续运行,但新的 pod 无法调度。在这种情况下,恢复 etcd 集群并可能需要重新配置 Kubernetes API 服务器以修复问题。
-
{{< note >}}
如果集群中正在运行任何 API 服务器,则不应尝试还原 etcd 的实例。相反,请按照以下步骤还原 etcd:
-- 停止 *所有* API 服务实例
+- 停止**所有** API 服务实例
- 在所有 etcd 实例中恢复状态
- 重启所有 API 服务实例
@@ -674,17 +643,20 @@ ETCDCTL_API=3 etcdctl --data-dir snapshot restore snapshotdb
{{< /note >}}
+## 升级 etcd 集群 {#upgrading-etcd-clusters}
+
+有关 etcd 升级的更多详细信息,请参阅 [etcd 升级](https://etcd.io/docs/latest/upgrades/)文档。
+
-## 升级 etcd 集群
-有关 etcd 升级的更多详细信息,请参阅 [etcd 升级](https://etcd.io/docs/latest/upgrades/)文档。
{{< note >}}
在开始升级之前,请先备份你的 etcd 集群。
{{< /note >}}
diff --git a/content/zh/docs/tasks/administer-cluster/controller-manager-leader-migration.md b/content/zh/docs/tasks/administer-cluster/controller-manager-leader-migration.md
index 71b43494b2..235ff8cbd5 100644
--- a/content/zh/docs/tasks/administer-cluster/controller-manager-leader-migration.md
+++ b/content/zh/docs/tasks/administer-cluster/controller-manager-leader-migration.md
@@ -15,7 +15,7 @@ content_type: task
-{{< feature-state state="beta" for_k8s_version="v1.22" >}}
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
{{< glossary_definition term_id="cloud-controller-manager" length="all">}}
@@ -48,8 +48,8 @@ Leader Migration can be enabled by setting `--enable-leader-migration` on `kube-
Leader Migration only applies during the upgrade and can be safely disabled or left enabled after the upgrade is complete.
This guide walks you through the manual process of upgrading the control plane from `kube-controller-manager` with
-built-in cloud provider to running both `kube-controller-manager` and `cloud-controller-manager`.
-If you use a tool to administrator the cluster, please refer to the documentation of the tool and the cloud provider for more details.
+built-in cloud provider to running both `kube-controller-manager` and `cloud-controller-manager`.
+If you use a tool to deploy and manage the cluster, please refer to the documentation of the tool and the cloud provider for specific instructions of the migration.
-->
领导者迁移可以通过在 `kube-controller-manager` 或 `cloud-controller-manager` 上设置
`--enable-leader-migration` 来启用。
@@ -57,32 +57,32 @@ If you use a tool to administrator the cluster, please refer to the documentatio
本指南将引导你手动将控制平面从内置的云驱动的 `kube-controller-manager` 升级为
同时运行 `kube-controller-manager` 和 `cloud-controller-manager`。
-如果使用某种工具来管理群集,请参阅对应工具和云驱动的文档以获取更多详细信息。
+如果使用某种工具来部署和管理集群,请参阅对应工具和云驱动的文档以获取迁移的具体说明。
## {{% heading "prerequisites" %}}
假定控制平面正在运行 Kubernetes 版本 N,要升级到版本 N+1。
尽管可以在同一版本内进行迁移,但理想情况下,迁移应作为升级的一部分执行,
以便可以配置的变更可以与发布版本变化对应起来。
-N 和 N+1 的确切版本值取决于各个云厂商。例如,如果云厂商构建了一个可与 Kubernetes 1.22
-配合使用的 `cloud-controller-manager`,则 N 可以为 1.21,N+1 可以为 1.22。
+N 和 N+1 的确切版本值取决于各个云厂商。例如,如果云厂商构建了一个可与 Kubernetes 1.24
+配合使用的 `cloud-controller-manager`,则 N 可以为 1.23,N+1 可以为 1.24。
-控制平面节点应运行 `kube-controller-manager`,并通过 `--leader-elect=true` 启用领导者选举。
+控制平面节点应运行 `kube-controller-manager` 并启用领导者选举,这也是默认设置。
在版本 N 中,树内云驱动必须设置 `--cloud-provider` 标志,而且 `cloud-controller-manager`
应该尚未部署。
+或者,由于控制器可以在任一控制器管理器下运行,因此将双方的 `component` 设置为 `*`
+可以使迁移双方的配置文件保持一致。
+
+```yaml
+# 通配符版本
+kind: LeaderMigrationConfiguration
+apiVersion: controllermanager.config.k8s.io/v1
+leaderName: cloud-provider-extraction-migration
+controllerLeaders:
+ - name: route
+ component: *
+ - name: service
+ component: *
+ - name: cloud-node-lifecycle
+ component: *
+```
+
### 部署云控制器管理器
在版本 N+1 中,如何将控制器分配给不同管理器的预期分配状态可以由新的配置文件表示,
如下所示。请注意,各个 `controllerLeaders` 的 `component` 字段从 `kube-controller-manager`
更改为 `cloud-controller-manager`。
+或者,使用上面提到的通配符版本,它具有相同的效果。
```yaml
kind: LeaderMigrationConfiguration
-apiVersion: controllermanager.config.k8s.io/v1beta1
+apiVersion: controllermanager.config.k8s.io/v1
leaderName: cloud-provider-extraction-migration
-resourceLock: leases
controllerLeaders:
- name: route
component: cloud-controller-manager
@@ -215,15 +236,15 @@ controllerLeaders:
```
+### 特殊情况:迁移节点 IPAM 控制器 {#node-ipam-controller-migration}
+
+如果你的云供应商提供了节点 IPAM 控制器的实现,你应该切换到 `cloud-controller-manager` 中的实现。
+通过在其标志中添加 `--controllers=*,-nodeipam` 来禁用 N+1 版本的 `kube-controller-manager` 中的节点 IPAM 控制器。
+然后将 `nodeipam` 添加到迁移的控制器列表中。
+
+```yaml
+# 通配符版本,带有 nodeipam
+kind: LeaderMigrationConfiguration
+apiVersion: controllermanager.config.k8s.io/v1
+leaderName: cloud-provider-extraction-migration
+controllerLeaders:
+ - name: route
+ component: *
+ - name: service
+ component: *
+ - name: cloud-node-lifecycle
+ component: *
+ - name: nodeipam
+- component: *
+```
+
## {{% heading "whatsnext" %}}
- 阅读[领导者迁移控制器管理器](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cloud-provider/2436-controller-manager-leader-migration)
改进建议提案。
diff --git a/content/zh/docs/tasks/administer-cluster/cpu-management-policies.md b/content/zh/docs/tasks/administer-cluster/cpu-management-policies.md
index 3d684ec5f5..4ef3aa5057 100644
--- a/content/zh/docs/tasks/administer-cluster/cpu-management-policies.md
+++ b/content/zh/docs/tasks/administer-cluster/cpu-management-policies.md
@@ -23,7 +23,7 @@ acceptably. The kubelet provides methods to enable more complex workload
placement policies while keeping the abstraction free from explicit placement
directives.
-->
-按照设计,Kubernetes 对 pod 执行相关的很多方面进行了抽象,使得用户不必关心。
+按照设计,Kubernetes 对 Pod 执行相关的很多方面进行了抽象,使得用户不必关心。
然而,为了正常运行,有些工作负载要求在延迟和/或性能方面有更强的保证。
为此,kubelet 提供方法来实现更复杂的负载放置策略,同时保持抽象,避免显式的放置指令。
@@ -62,12 +62,16 @@ management policies to determine some placement preferences on the node.
### 配置
-CPU 管理策略通过 kubelet 参数 `--cpu-manager-policy` 来指定。支持两种策略:
+CPU 管理策略通过 kubelet 参数 `--cpu-manager-policy`
+或 [KubeletConfiguration](/zh/docs/reference/config-api/kubelet-config.v1beta1/)
+中的 `cpuManagerPolicy` 字段来指定。
+支持两种策略:
* `none`: 默认策略,表示现有的调度行为。
-* `static`: 允许为节点上具有某些资源特征的 pod 赋予增强的 CPU 亲和性和独占性。
+* `static`: 允许为节点上具有某些资源特征的 Pod 赋予增强的 CPU 亲和性和独占性。
Static 策略的行为可以使用 `--cpu-manager-policy-options` 参数来微调。
该参数采用一个逗号分隔的 `key=value` 策略选项列表。
+此特性可以通过 `CPUManagerPolicyOptions` 特性门控来完全禁用。
+
+
+策略选项分为两组:alpha 质量(默认隐藏)和 beta 质量(默认可见)。
+这些组分别由 `CPUManagerPolicyAlphaOptions` 和 `CPUManagerPolicyBetaOptions` 特性门控来管控。
+不同于 Kubernetes 标准,这里是由这些特性门控来管控选项组,因为为每个单独选项都添加一个特性门控过于繁琐。
+
+
+### 更改 CPU 管理器策略
+
+由于 CPU 管理器策略只能在 kubelet 生成新 Pod 时应用,所以简单地从 "none" 更改为 "static"
+将不会对现有的 Pod 起作用。
+因此,为了正确更改节点上的 CPU 管理器策略,请执行以下步骤:
+
+
+1. [腾空](/zh/docs/tasks/administer-cluster/safely-drain-node)节点。
+2. 停止 kubelet。
+3. 删除旧的 CPU 管理器状态文件。该文件的路径默认为 `/var/lib/kubelet/cpu_manager_state`。
+ 这将清除 CPUManager 维护的状态,以便新策略设置的 cpu-sets 不会与之冲突。
+4. 编辑 kubelet 配置以将 CPU 管理器策略更改为所需的值。
+5. 启动 kubelet。
+
+
+对需要更改其 CPU 管理器策略的每个节点重复此过程。
+跳过此过程将导致 kubelet crashlooping 并出现以下错误:
+
+```
+could not restore state from checkpoint: configured policy "static" differs from state checkpoint policy "none", please drain this node and delete the CPU manager checkpoint file "/var/lib/kubelet/cpu_manager_state" before restarting Kubelet
+```
-该策略管理一个共享 CPU 资源池,最初,该资源池包含节点上所有的 CPU 资源。可用
-的独占性 CPU 资源数量等于节点的 CPU 总量减去通过 `--kube-reserved` 或 `--system-reserved` 参数保留的 CPU 。从1.17版本开始,CPU保留列表可以通过 kublet 的 '--reserved-cpus' 参数显式地设置。
-通过 '--reserved-cpus' 指定的显式CPU列表优先于使用 '--kube-reserved' 和 '--system-reserved' 参数指定的保留CPU。 通过这些参数预留的 CPU 是以整数方式,按物理内
-核 ID 升序从初始共享池获取的。 共享池是 `BestEffort` 和 `Burstable` pod 运行
-的 CPU 集合。`Guaranteed` pod 中的容器,如果声明了非整数值的 CPU `requests` ,也将运行在共享池的 CPU 上。只有 `Guaranteed` pod 中,指定了整数型 CPU `requests` 的容器,才会被分配独占 CPU 资源。
+此策略管理一个 CPU 共享池,该共享池最初包含节点上所有的 CPU 资源。
+可独占性 CPU 资源数量等于节点的 CPU 总量减去通过 kubelet `--kube-reserved` 或 `--system-reserved`
+参数保留的 CPU 资源。
+从 1.17 版本开始,可以通过 kubelet `--reserved-cpus` 参数显式地指定 CPU 预留列表。
+由 `--reserved-cpus` 指定的显式 CPU 列表优先于由 `--kube-reserved` 和 `--system-reserved`
+指定的 CPU 预留。
+通过这些参数预留的 CPU 是以整数方式,按物理核心 ID 升序从初始共享池获取的。
+共享池是 `BestEffort` 和 `Burstable` Pod 运行的 CPU 集合。
+`Guaranteed` Pod 中的容器,如果声明了非整数值的 CPU `requests`,也将运行在共享池的 CPU 上。
+只有 `Guaranteed` Pod 中,指定了整数型 CPU `requests` 的容器,才会被分配独占 CPU 资源。
-该 pod 属于 `Burstable` QoS 类型,因为其资源 `requests` 不等于 `limits`。
+该 Pod 属于 `Burstable` QoS 类型,因为其资源 `requests` 不等于 `limits`。
所以该容器运行在共享 CPU 池中。
```yaml
@@ -322,19 +388,35 @@ equal to one. The `nginx` container is granted 2 exclusive CPUs.
#### Static 策略选项
-如果使用 `full-pcpus-only` 策略选项,static 策略总是会分配完整的物理核心。
-你可以通过在 CPUManager 策略选项里加上 `full-pcups-only=true` 来启用该选项。
+你可以使用以下特性门控根据成熟度级别打开或关闭选项组:
+* `CPUManagerPolicyBetaOptions` 默认启用。禁用以隐藏 beta 级选项。
+* `CPUManagerPolicyAlphaOptions` 默认禁用。启用以显示 alpha 级选项。
+你仍然必须使用 `CPUManagerPolicyOptions` kubelet 选项启用每个选项。
+
+静态 `CPUManager` 策略存在以下策略选项:
+* `full-pcpus-only`(beta,默认可见)
+* `distribute-cpus-across-numa`(alpha,默认隐藏)
+
+如果使用 `full-pcpus-only` 策略选项,static 策略总是会分配完整的物理核心。
默认情况下,如果不使用该选项,static 策略会使用拓扑感知最适合的分配方法来分配 CPU。
在启用了 SMT 的系统上,此策略所分配是与硬件线程对应的、独立的虚拟核。
这会导致不同的容器共享相同的物理核心,该行为进而会导致
@@ -344,5 +426,47 @@ With the option enabled, the pod will be admitted by the kubelet only if the CPU
can be fulfilled by allocating full physical cores.
If the pod does not pass the admission, it will be put in Failed state with the message `SMTAlignmentError`.
-->
-启用该选项之后,只有当一个 Pod 里所有容器的 CPU 请求都能够分配到完整的物理核心时,kubelet 才会接受该 Pod。
-如果 Pod 没有被准入,它会被置于 Failed 状态,错误消息是 `SMTAlignmentError`。
\ No newline at end of file
+启用该选项之后,只有当一个 Pod 里所有容器的 CPU 请求都能够分配到完整的物理核心时,
+kubelet 才会接受该 Pod。
+如果 Pod 没有被准入,它会被置于 Failed 状态,错误消息是 `SMTAlignmentError`。
+
+
+如果使用 `distribute-cpus-across-numa` 策略选项,
+在需要多个 NUMA 节点来满足分配的情况下,
+static 策略会在 NUMA 节点上平均分配 CPU。
+默认情况下,`CPUManager` 会将 CPU 分配到一个 NUMA 节点上,直到它被填满,
+剩余的 CPU 会简单地溢出到下一个 NUMA 节点。
+这会导致依赖于同步屏障(以及类似的同步原语)的并行代码出现不期望的瓶颈,
+因为此类代码的运行速度往往取决于最慢的工作线程
+(由于至少一个 NUMA 节点存在可用 CPU 较少的情况,因此速度变慢)。
+通过在 NUMA 节点上平均分配 CPU,
+应用程序开发人员可以更轻松地确保没有某个工作线程单独受到 NUMA 影响,
+从而提高这些类型应用程序的整体性能。
+
+
+可以通过将 `full-pcups-only=true` 添加到 CPUManager 策略选项来启用 `full-pcpus-only` 选项。
+同样地,可以通过将 `distribute-cpus-across-numa=true`
+添加到 CPUManager 策略选项来启用 `distribute-cpus-across-numa` 选项。
+当两者都设置时,它们是“累加的”,因为 CPU 将分布在 NUMA 节点的 full-pcpus 块中,
+而不是单个核心。
diff --git a/content/zh/docs/tasks/administer-cluster/declare-network-policy.md b/content/zh/docs/tasks/administer-cluster/declare-network-policy.md
index 3d682a4cb8..b5858ba2fc 100644
--- a/content/zh/docs/tasks/administer-cluster/declare-network-policy.md
+++ b/content/zh/docs/tasks/administer-cluster/declare-network-policy.md
@@ -108,7 +108,7 @@ You should be able to access the new `nginx` service from other Pods. To access
要从 default 命名空间中的其它s Pod 来访问该服务。可以启动一个 busybox 容器:
```shell
-kubectl run busybox --rm -ti --image=busybox /bin/sh
+kubectl run busybox --rm -ti --image=busybox:1.28 /bin/sh
```
如果你发现没有 CoreDNS Pod 在运行,或者该 Pod 的状态是 failed 或者 completed,
-那可能这个 DNS 插件在您当前的环境里并没有成功部署,你将需要手动去部署它。
+那可能这个 DNS 插件在你当前的环境里并没有成功部署,你将需要手动去部署它。
如果你已经创建了 DNS 服务,或者该服务应该是默认自动创建的但是它并没有出现,
-请阅读[调试服务](/zh/docs/tasks/debug-application-cluster/debug-service/)
+请阅读[调试服务](/zh/docs/tasks/debug/debug-application/debug-service/)
来获取更多信息。
如果你没看到对应的端点,请阅读
-[调试服务](/zh/docs/tasks/debug-application-cluster/debug-service/)的端点部分。
+[调试服务](/zh/docs/tasks/debug/debug-application/debug-service/)的端点部分。
若需要了解更多的 Kubernetes DNS 例子,请在 Kubernetes GitHub 仓库里查看
[cluster-dns 示例](https://github.com/kubernetes/examples/tree/master/staging/cluster-dns)。
@@ -374,6 +374,74 @@ linux/amd64, go1.10.3, 2e322f6
2018/09/07 15:29:04 [INFO] Reloading complete
172.17.0.18:41675 - [07/Sep/2018:15:29:11 +0000] 59925 "A IN kubernetes.default.svc.cluster.local. udp 54 false 512" NOERROR qr,aa,rd,ra 106 0.000066649s
+```
+
+### CoreDNS 是否有足够的权限?
+
+CoreDNS 必须能够列出 {{< glossary_tooltip text="service" term_id="service" >}} 和
+{{< glossary_tooltip text="endpoint" term_id="endpoint" >}} 相关的资源来正确解析服务名称。
+
+示例错误消息:
+```
+2022-03-18T07:12:15.699431183Z [INFO] 10.96.144.227:52299 - 3686 "A IN serverproxy.contoso.net.cluster.local. udp 52 false 512" SERVFAIL qr,aa,rd 145 0.000091221s
+```
+
+
+首先,获取当前的 ClusterRole `system:coredns`:
+
+```shell
+kubectl describe clusterrole system:coredns -n kube-system
+```
+
+
+预期输出:
+```
+PolicyRule:
+ Resources Non-Resource URLs Resource Names Verbs
+ --------- ----------------- -------------- -----
+ nodes [] [] [get]
+ endpoints [] [] [list watch]
+ namespaces [] [] [list watch]
+ pods [] [] [list watch]
+ services [] [] [list watch]
+ endpointslices.discovery.k8s.io [] [] [list watch]
+```
+
+
+如果缺少任何权限,请编辑 ClusterRole 来添加它们:
+
+```shell
+kubectl edit clusterrole system:coredns -n kube-system
+```
+
+
+EndpointSlices 权限的插入示例:
+```
+...
+- apiGroups:
+ - discovery.k8s.io
+ resources:
+ - endpointslices
+ verbs:
+ - list
+ - watch
+...
```
### 你的服务在正确的命名空间中吗?
@@ -403,9 +468,6 @@ kubectl exec -i -t dnsutils -- nslookup
指定命名空间的查询:
```shell
diff --git a/content/zh/docs/tasks/administer-cluster/encrypt-data.md b/content/zh/docs/tasks/administer-cluster/encrypt-data.md
index c63032ca4d..1f2eefd0a0 100644
--- a/content/zh/docs/tasks/administer-cluster/encrypt-data.md
+++ b/content/zh/docs/tasks/administer-cluster/encrypt-data.md
@@ -4,9 +4,9 @@ content_type: task
---
@@ -21,26 +21,40 @@ This page shows how to enable and configure encryption of secret data at rest.
* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
-* 需要 etcd v3 或者更高版本
+* 需要 etcd v3.0 或者更高版本
## 配置并确定是否已启用静态数据加密
-`kube-apiserver` 的参数 `--experimental-encryption-provider-config` 控制 API 数据在 etcd 中的加密方式。
-下面提供一个配置示例。
+`kube-apiserver` 的参数 `--encryption-provider-config` 控制 API 数据在 etcd 中的加密方式。
+该配置作为一个名为 [`EncryptionConfiguration`](/zh/docs/reference/config-api/apiserver-encryption.v1/) 的 API 提供。
+下面提供了一个示例配置。
+
+{{< caution >}}
+**重要:** 对于高可用配置(有两个或多个控制平面节点),加密配置文件必须相同!
+否则,`kube-apiserver` 组件无法解密存储在 etcd 中的数据。
+{{< /caution >}}
+
+
## 理解静态数据加密
```yaml
@@ -48,56 +62,61 @@ apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- - secrets
+ - secrets
providers:
- - identity: {}
- - aesgcm:
- keys:
- - name: key1
- secret: c2VjcmV0IGlzIHNlY3VyZQ==
- - name: key2
- secret: dGhpcyBpcyBwYXNzd29yZA==
- - aescbc:
- keys:
- - name: key1
- secret: c2VjcmV0IGlzIHNlY3VyZQ==
- - name: key2
- secret: dGhpcyBpcyBwYXNzd29yZA==
- - secretbox:
- keys:
- - name: key1
- secret: YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY=
+ - identity: {}
+ - aesgcm:
+ keys:
+ - name: key1
+ secret: c2VjcmV0IGlzIHNlY3VyZQ==
+ - name: key2
+ secret: dGhpcyBpcyBwYXNzd29yZA==
+ - aescbc:
+ keys:
+ - name: key1
+ secret: c2VjcmV0IGlzIHNlY3VyZQ==
+ - name: key2
+ secret: dGhpcyBpcyBwYXNzd29yZA==
+ - secretbox:
+ keys:
+ - name: key1
+ secret: YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY=
```
每个 `resources` 数组项目是一个单独的完整的配置。
`resources.resources` 字段是要加密的 Kubernetes 资源名称(`resource` 或 `resource.group`)的数组。
`providers` 数组是可能的加密 provider 的有序列表。
-每个条目只能指定一个 provider 类型(可以是 `identity` 或 `aescbc`,但不能在同一个项目中同时指定)。
-
-列表中的第一个 provider 用于加密进入存储的资源。
+每个条目只能指定一个 provider 类型(可以是 `identity` 或 `aescbc`,但不能在同一个项目中同时指定二者)。
+列表中的第一个 provider 用于加密写入存储的资源。
当从存储器读取资源时,与存储的数据匹配的所有 provider 将按顺序尝试解密数据。
如果由于格式或密钥不匹配而导致没有 provider 能够读取存储的数据,则会返回一个错误,以防止客户端访问该资源。
+有关 `EncryptionConfiguration` 结构体的更多详细信息,请参阅[加密配置 API](/zh/docs/reference/config-api/apiserver-encryption.v1/)。
+
{{< caution >}}
-**重要:** 如果通过加密配置无法读取资源(因为密钥已更改),唯一的方法是直接从底层 etcd 中删除该密钥。
+如果通过加密配置无法读取资源(因为密钥已更改),唯一的方法是直接从底层 etcd 中删除该密钥。
任何尝试读取资源的调用将会失败,直到它被删除或提供有效的解密密钥。
{{< /caution >}}
@@ -127,31 +146,38 @@ is the first provider, the first key is used for encryption.
每个 provider 都支持多个密钥 - 在解密时会按顺序使用密钥,如果是第一个 provider,则第一个密钥用于加密。
-__在 EncryptionConfig 中保存原始的加密密钥与不加密相比只会略微地提升安全级别。
-请使用 `kms` 驱动以获得更强的安全性。__
-默认情况下,`identity` 驱动被用来对 etcd 中的 Secret 提供保护,
-而这个驱动不提供加密能力。
-`EncryptionConfiguration` 的引入是为了能够使用本地管理的密钥来在本地加密 Secret 数据。
+{{< caution >}}
+在 EncryptionConfig 中保存原始的加密密钥与不加密相比只会略微地提升安全级别。
+请使用 `kms` 驱动以获得更强的安全性。
+{{< /caution >}}
+默认情况下,`identity` 驱动被用来对 etcd 中的 Secret 提供保护,而这个驱动不提供加密能力。
+`EncryptionConfiguration` 的引入是为了能够使用本地管理的密钥来在本地加密 Secret 数据。
+
使用本地管理的密钥来加密 Secret 能够保护数据免受 etcd 破坏的影响,不过无法针对
主机被侵入提供防护。
这是因为加密的密钥保存在主机上的 EncryptionConfig YAML 文件中,有经验的入侵者
仍能访问该文件并从中提取出加密密钥。
-
封套加密(Envelope Encryption)引入了对独立密钥的依赖,而这个密钥并不保存在 Kubernetes 中。
-在这种情况下下,入侵者需要攻破 etcd、kube-apiserver 和第三方的 KMS
+在这种情况下,入侵者需要攻破 etcd、kube-apiserver 和第三方的 KMS
驱动才能获得明文数据,因而这种方案提供了比本地保存加密密钥更高的安全级别。
-遵循如下步骤来创建一个新的 secret:
+遵循如下步骤来创建一个新的 Secret:
-1. 生成一个 32 字节的随机密钥并进行 base64 编码。如果你在 Linux 或 Mac OS X 上,请运行以下命令:
+1. 生成一个 32 字节的随机密钥并进行 base64 编码。如果你在 Linux 或 macOS 上,请运行以下命令:
- ```
+ ```shell
head -c 32 /dev/urandom | base64
```
-2. 将这个值放入到 secret 字段中。
-3. 设置 `kube-apiserver` 的 `--experimental-encryption-provider-config` 参数,将其指向
+2. 将这个值放入到 `EncryptionConfiguration` 结构体的 `secret` 字段中。
+3. 设置 `kube-apiserver` 的 `--encryption-provider-config` 参数,将其指向
配置文件所在位置。
4. 重启你的 API server。
-
+
{{< caution >}}
你的配置文件包含可以解密 etcd 内容的密钥,因此你必须正确限制主控节点的访问权限,
以便只有能运行 kube-apiserver 的用户才能读取它。
@@ -212,10 +240,10 @@ To create a new secret perform the following steps:
## Verifying that data is encrypted
Data is encrypted when written to etcd. After restarting your `kube-apiserver`, any newly created or
-updated secret should be encrypted when stored. To check, you can use the `etcdctl` command line
-program to retrieve the contents of your secret.
+updated Secret should be encrypted when stored. To check this, you can use the `etcdctl` command line
+program to retrieve the contents of your Secret.
-1. Create a new secret called `secret1` in the `default` namespace:
+1. Create a new Secret called `secret1` in the `default` namespace:
-->
## 验证数据已被加密
@@ -229,9 +257,9 @@ program to retrieve the contents of your secret.
```
-2. 使用 etcdctl 命令行,从 etcd 中读取 secret:
+2. 使用 etcdctl 命令行,从 etcd 中读取 Secret:
```shell
ETCDCTL_API=3 etcdctl get /registry/secrets/default/secret1 [...] | hexdump -C
```
@@ -242,39 +270,43 @@ program to retrieve the contents of your secret.
这里的 `[...]` 是用来连接 etcd 服务的额外参数。
3. 验证存储的密钥前缀是否为 `k8s:enc:aescbc:v1:`,这表明 `aescbc` provider 已加密结果数据。
-4. 通过 API 检索,验证 secret 是否被正确解密:
+
+4. 通过 API 检索,验证 Secret 是否被正确解密:
```shell
kubectl describe secret secret1 -n default
```
- 其输出应该是 `mykey: bXlkYXRh`,`mydata` 数据是被加密过的,请参阅
- [解密 Secret](/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl/#decoding-secret)
+ 其输出应该包含 `mykey: bXlkYXRh`,`mydata` 的内容是被加密过的,
+ 请参阅[解密 Secret](/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl/#decoding-secret)
了解如何完全解码 Secret 内容。
## 确保所有 Secret 都被加密
由于 Secret 是在写入时被加密,因此对 Secret 执行更新也会加密该内容。
-```
+```shell
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
```
上面的命令读取所有 Secret,然后使用服务端加密来更新其内容。
@@ -290,17 +322,19 @@ For larger clusters, you may wish to subdivide the secrets by namespace or scrip
## 轮换解密密钥
@@ -308,48 +342,53 @@ With a single `kube-apiserver`, step 2 may be skipped.
高可用环境中。
1. 生成一个新密钥并将其添加为所有服务器上当前提供程序的第二个密钥条目
-2. 重新启动所有 `kube-apiserver` 进程以确保每台服务器都可以使用新密钥进行解密
-3. 将新密钥设置为 `keys` 数组中的第一个条目,以便在配置中使用其进行加密
-4. 重新启动所有 `kube-apiserver` 进程以确保每个服务器现在都使用新密钥进行加密
-5. 运行 `kubectl get secrets --all-namespaces -o json | kubectl replace -f -` 以用新密钥加密所有现有的秘密
-6. 在使用新密钥备份 etcd 后,从配置中删除旧的解密密钥并更新所有密钥
+1. 重新启动所有 `kube-apiserver` 进程以确保每台服务器都可以使用新密钥进行解密
+1. 将新密钥设置为 `keys` 数组中的第一个条目,以便在配置中使用其进行加密
+1. 重新启动所有 `kube-apiserver` 进程以确保每个服务器现在都使用新密钥进行加密
+1. 运行 `kubectl get secrets --all-namespaces -o json | kubectl replace -f -`
+ 以用新密钥加密所有现有的 Secret
+1. 在使用新密钥备份 etcd 后,从配置中删除旧的解密密钥并更新所有密钥
-如果只有一个 `kube-apiserver`,第 2 步可能可以忽略。
+当只运行一个 `kube-apiserver` 实例时,第 2 步可能可以忽略。
## 解密所有数据
-要禁用 rest 加密,请将 `identity` provider 作为配置中的第一个条目:
+要禁用静态加密,请将 `identity` provider
+作为配置中的第一个条目并重新启动所有 `kube-apiserver` 进程。
```yaml
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- - secrets
+ - secrets
providers:
- - identity: {}
- - aescbc:
- keys:
- - name: key1
- secret:
+ - identity: {}
+ - aescbc:
+ keys:
+ - name: key1
+ secret:
```
-并重新启动所有 `kube-apiserver` 进程。然后运行:
+然后运行以下命令以强制解密所有 Secret:
+```shell
+kubectl get secrets --all-namespaces -o json | kubectl replace -f -
```
-kubectl get secrets -all-namespaces -o json | kubectl replace -f -`
-```
+
+## {{% heading "whatsnext" %}}
-以强制解密所有 secret。
-
+进一步学习 [EncryptionConfiguration 配置 API (v1)](/zh/docs/reference/config-api/apiserver-encryption.v1/)。
diff --git a/content/zh/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md b/content/zh/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md
index 111d30d32d..d5ce305d88 100644
--- a/content/zh/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md
+++ b/content/zh/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods.md
@@ -15,8 +15,8 @@ vacated by the evicted critical add-on pod or the amount of resources available
-->
Kubernetes 核心组件(如 API 服务器、调度器、控制器管理器)在控制平面节点上运行。
但是插件必须在常规集群节点上运行。
-其中一些插件对于功能完备的群集至关重要,例如 Heapster、DNS 和 UI。
-如果关键插件被逐出(手动或作为升级等其他操作的副作用)或者变成挂起状态,群集可能会停止正常工作。
+其中一些插件对于功能完备的集群至关重要,例如 Heapster、DNS 和 UI。
+如果关键插件被逐出(手动或作为升级等其他操作的副作用)或者变成挂起状态,集群可能会停止正常工作。
关键插件进入挂起状态的例子有:集群利用率过高;被逐出的关键插件 Pod 释放了空间,但该空间被之前悬决的 Pod 占用;由于其它原因导致节点上可用资源的总量发生变化。
-此页面展示如何配置和启用 ip-masq-agent。
+此页面展示如何配置和启用 `ip-masq-agent`。
## {{% heading "prerequisites" %}}
@@ -24,9 +24,9 @@ This page shows how to configure and enable the ip-masq-agent.
## IP Masquerade Agent 用户指南
-ip-masq-agent 配置 iptables 规则以隐藏位于集群节点 IP 地址后面的 Pod 的 IP 地址。
+`ip-masq-agent` 配置 iptables 规则以隐藏位于集群节点 IP 地址后面的 Pod 的 IP 地址。
这通常在将流量发送到集群的 Pod
[CIDR](https://zh.wikipedia.org/wiki/%E6%97%A0%E7%B1%BB%E5%88%AB%E5%9F%9F%E9%97%B4%E8%B7%AF%E7%94%B1)
范围之外的目的地时使用。
@@ -96,23 +96,26 @@ The agent configuration file must be written in YAML or JSON syntax, and may con
代理配置文件必须使用 YAML 或 JSON 语法编写,并且可能包含三个可选值:
-* **nonMasqueradeCIDRs:**
+* `nonMasqueradeCIDRs`:
[CIDR](https://zh.wikipedia.org/wiki/%E6%97%A0%E7%B1%BB%E5%88%AB%E5%9F%9F%E9%97%B4%E8%B7%AF%E7%94%B1)
表示法中的字符串列表,用于指定不需伪装的地址范围。
-* **masqLinkLocal:** 布尔值 (true / false),表示是否将流量伪装到
- 本地链路前缀 169.254.0.0/16。默认为 false。
+* `masqLinkLocal`:布尔值 (true/false),表示是否为本地链路前缀 169.254.0.0/16 的流量提供伪装。
+ 默认为 false。
-* **resyncInterval:** 代理尝试从磁盘重新加载配置的时间间隔。
- 例如 '30s',其中 's' 是秒,'ms' 是毫秒等...
+* `resyncInterval`:代理从磁盘重新加载配置的重试时间间隔。
+ 例如 '30s',其中 's' 是秒,'ms' 是毫秒。
-默认情况下,从 Kubernetes 1.7.0 版本开始的 GCE/Google Kubernetes Engine 中,
-如果启用了网络策略,或者你使用的集群 CIDR 不在 10.0.0.0/8 范围内,
-则 ip-masq-agent 将在你的集群中运行。
-如果你在其他环境中运行,则可以将 ip-masq-agent
-[DaemonSet](/zh/docs/concepts/workloads/controllers/daemonset/) 添加到你的集群:
+默认情况下,在 GCE/Google Kubernetes Engine 中,如果启用了网络策略,
+或者你使用的集群 CIDR 不在 10.0.0.0/8 范围内,
+则 `ip-masq-agent` 将在你的集群中运行。
+如果你在其他环境中运行,可以将 `ip-masq-agent`
+[DaemonSet](/zh/docs/concepts/workloads/controllers/daemonset/) 添加到你的集群中。
@@ -172,7 +182,7 @@ More information can be found in the ip-masq-agent documentation [here](https://
-在大多数情况下,默认的规则集应该足够;但是,如果你的群集不是这种情况,则可以创建并应用
+在大多数情况下,默认的规则集应该足够;但是,如果你的集群不是这种情况,则可以创建并应用
[ConfigMap](/zh/docs/tasks/configure-pod-container/configure-pod-configmap/)
来自定义受影响的 IP 范围。
例如,要允许 ip-masq-agent 仅作用于 10.0.0.0/8,你可以在一个名为 “config” 的文件中创建以下
@@ -180,12 +190,12 @@ In most cases, the default set of rules should be sufficient; however, if this i
{{< note >}}
重要的是,该文件之所以被称为 config,因为默认情况下,该文件将被用作
-ip-masq-agent 查找的主键:
+`ip-masq-agent` 查找的主键:
-```
+```yaml
nonMasqueradeCIDRs:
- 10.0.0.0/8
resyncInterval: 60s
@@ -195,22 +205,25 @@ resyncInterval: 60s
-运行以下命令将配置映射添加到你的集群:
+运行以下命令将 ConfigMap 添加到你的集群:
-```
+```shell
kubectl create configmap ip-masq-agent --from-file=config --namespace=kube-system
```
-这将更新位于 */etc/config/ip-masq-agent* 的一个文件,该文件以 *resyncInterval*
+这将更新位于 `/etc/config/ip-masq-agent` 的一个文件,该文件以 `resyncInterval`
为周期定期检查并应用于集群节点。
重新同步间隔到期后,你应该看到你的更改在 iptables 规则中体现:
-```
+```shell
iptables -t nat -L IP-MASQ-AGENT
+```
+
+```none
Chain IP-MASQ-AGENT (1 references)
target prot opt source destination
RETURN all -- anywhere 169.254.0.0/16 /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
@@ -219,13 +232,13 @@ MASQUERADE all -- anywhere anywhere /* ip-masq-agent:
```
默认情况下,本地链路范围 (169.254.0.0/16) 也由 ip-masq agent 处理,
该代理设置适当的 iptables 规则。 要使 ip-masq-agent 忽略本地链路,
-可以在配置映射中将 *masqLinkLocal* 设置为 true。
+可以在 ConfigMap 中将 `masqLinkLocal` 设置为 true。
-```
+```yaml
nonMasqueradeCIDRs:
- 10.0.0.0/8
resyncInterval: 60s
diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md b/content/zh/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md
index 4e08ce2c60..323dbd5cf0 100644
--- a/content/zh/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md
+++ b/content/zh/docs/tasks/administer-cluster/kubeadm/adding-windows-nodes.md
@@ -26,8 +26,7 @@ You can use Kubernetes to run a mixture of Linux and Windows nodes, so you can m
本页面展示如何将 Windows 节点注册到你的集群。
## {{% heading "prerequisites" %}}
-
-{{< version-check >}}
+ {{< version-check >}}
+
* 获取 [Windows Server 2019 或更高版本的授权](https://www.microsoft.com/en-us/cloud-platform/windows-server-pricing)
以便配置托管 Windows 容器的 Windows 节点。
如果你在使用 VXLAN/覆盖(Overlay)联网设施,则你还必须安装 [KB4489899](https://support.microsoft.com/help/4489899)。
@@ -275,55 +275,12 @@ Windows 工作节点上具有提升的权限(Administrator)。
{{< /note >}}
{{< tabs name="tab-windows-kubeadm-runtime-installation" >}}
-{{% tab name="Docker EE" %}}
-
-#### 安装 Docker EE
-
-```powershell
-Install-WindowsFeature -Name containers
-```
-
-安装 Docker
-操作指南在 [Install Docker Engine - Enterprise on Windows Servers](https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server#install-docker)。
-
-
-#### 安装 wins、kubelet 和 kubeadm
-
- ```PowerShell
- curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
- .\PrepareNode.ps1 -KubernetesVersion {{< param "fullversion" >}}
- ```
-
-
-#### 运行 `kubeadm` 添加节点
-
- 当你在控制面主机上运行 `kubeadm init` 时,输出了一个命令。现在运行这个命令。
- 如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行
- `kubeadm token create --print-join-command` 来生成新的令牌和 join 命令。
-
-{{% /tab %}}
{{% tab name="CRI-containerD" %}}
-
#### 安装 containerD
```powershell
@@ -335,16 +292,12 @@ curl.exe -LO https://github.com/kubernetes-sigs/sig-windows-tools/releases/lates
-要安装特定版本的 containerD,使用参数 -ContainerDVersion指定版本。
+要安装特定版本的 containerD,使用参数 -ContainerDVersion 指定版本。
```powershell
# Example
.\Install-Containerd.ps1 -ContainerDVersion 1.4.1
```
-
-{{< /note >}}
-
-{{< note >}}
@@ -360,12 +313,18 @@ If you're using a different interface rather than Ethernet (i.e. "Ethernet0 2")
-#### 安装 wins,kubelet 和 kubeadm
+#### 安装 wins、kubelet 和 kubeadm
```PowerShell
curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
.\PrepareNode.ps1 -KubernetesVersion {{< param "fullversion" >}} -ContainerRuntime containerD
```
+
+从 [cri-tools](https://github.com/kubernetes-sigs/cri-tools) 项目安装 `crtctl`。
+`crictl` 是必需的,kubeadm 使用它与 CRI 端点通信。
#### 运行 `kubeadm` 添加节点
- 使用当你在控制面主机上运行 `kubeadm init` 时得到的命令。
- 如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行
- `kubeadm token create --print-join-command` 来生成新的令牌和 join 命令。
+ 使用当你在控制面主机上运行 `kubeadm init` 时得到的命令。
+ 如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行
+ `kubeadm token create --print-join-command` 来生成新的令牌和 join 命令。
+
+{{% /tab %}}
+
+
+{{% tab name="Docker Engine" %}}
+
+
+
+#### 安装 Docker Engine
+
+安装 `Containers` 功能特性
+
+```powershell
+Install-WindowsFeature -Name containers
+```
+
+
+
+安装 Docker
+
+操作指南在
+[Install Docker Engine - Enterprise on Windows Servers](https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server#install-docker)。
+
+
+
+[安装 cri-dockerd](https://github.com/Mirantis/cri-dockerd)。kubelet 可以通过 cri-dockerd
+在 CRI 兼容的节点上与 Docker 通信。
+
{{< note >}}
-If using **CRI-containerD** add `--cri-socket "npipe:////./pipe/containerd-containerd"` to the kubeadm call
+
+Docker Engine 没有实现 [CRI](/zh/docs/concepts/architecture/cri/),
+而 CRI 是容器运行时能够与 Kubernetes 一起工作的要求。
+出于这个原因,必须安装一个额外的服务 [cri-dockerd](https://github.com/Mirantis/cri-dockerd)。
+cri-dockerd 是一个基于原来的内置 Docker Engine 支持的项目,
+而这一支持在 1.24 版本的 kubelet 中[已被移除](/zh/dockershim)。
{{< /note >}}
+
+从 [cri-tools](https://github.com/kubernetes-sigs/cri-tools) 项目安装 `crictl`。
+kubeadm 需要 `crictl` 才能与 CRI 端点通信。
+
+
+#### 安装 wins、kubelet 和 kubeadm
+
+```PowerShell
+curl.exe -LO https://raw.githubusercontent.com/kubernetes-sigs/sig-windows-tools/master/kubeadm/scripts/PrepareNode.ps1
+.\PrepareNode.ps1 -KubernetesVersion {{< param "fullversion" >}}
+```
+
+#### 运行 `kubeadm` 添加节点
+
+当你在控制面主机上运行 `kubeadm init` 时,输出了一个命令。现在运行这个命令。
+如果你找不到这个命令,或者命令中对应的令牌已经过期,你可以(在一个控制面主机上)运行
+`kubeadm token create --print-join-command` 来生成新的令牌和 join 命令。
+
{{% /tab %}}
{{< /tabs >}}
diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver.md b/content/zh/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver.md
index c268c711b9..9faeeadbb6 100644
--- a/content/zh/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver.md
+++ b/content/zh/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver.md
@@ -180,13 +180,10 @@ nodes before deleting the old nodes.
### 修改 kubelet 的 ConfigMap
-- 用命令 `kubectl get cm -n kube-system | grep kubelet-config` 找到 kubelet 的 ConfigMap 名称。
-- 运行 `kubectl edit cm kubelet-config-x.yy -n kube-system` (把 `x.yy` 替换为 Kubernetes 版本)。
+- 运行 `kubectl edit cm kubelet-config -n kube-system`。
- 修改现有 `cgroupDriver` 的值,或者新增如下式样的字段:
```yaml
diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md
index a2c9194729..2004388301 100644
--- a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md
+++ b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs.md
@@ -15,11 +15,13 @@ weight: 10
{{< feature-state for_k8s_version="v1.15" state="stable" >}}
-
由 [kubeadm](/zh/docs/reference/setup-tools/kubeadm/) 生成的客户端证书在 1 年后到期。
-本页说明如何使用 kubeadm 管理证书续订。
+本页说明如何使用 kubeadm 管理证书续订,同时也涵盖其他与 kubeadm 证书管理相关的说明。
## {{% heading "prerequisites" %}}
@@ -39,16 +41,16 @@ You can override this behavior by providing your own certificates.
## 使用自定义的证书 {#custom-certificates}
-默认情况下, kubeadm 会生成运行一个集群所需的全部证书。
+默认情况下,kubeadm 会生成运行一个集群所需的全部证书。
你可以通过提供你自己的证书来改变这个行为策略。
-如果要这样做, 你必须将证书文件放置在通过 `--cert-dir` 命令行参数或者 kubeadm 配置中的
-`CertificatesDir` 配置项指明的目录中。默认的值是 `/etc/kubernetes/pki`。
+如果要这样做,你必须将证书文件放置在通过 `--cert-dir` 命令行参数或者 kubeadm 配置中的
+`certificatesDir` 配置项指明的目录中。默认的值是 `/etc/kubernetes/pki`。
如果在运行 `kubeadm init` 之前存在给定的证书和私钥对,kubeadm 将不会重写它们。
-例如,这意味着您可以将现有的 CA 复制到 `/etc/kubernetes/pki/ca.crt` 和
+例如,这意味着你可以将现有的 CA 复制到 `/etc/kubernetes/pki/ca.crt` 和
`/etc/kubernetes/pki/ca.key` 中,而 kubeadm 将使用此 CA 对其余证书进行签名。
## 外部 CA 模式 {#external-ca-mode}
@@ -80,7 +83,7 @@ this condition and activates the "External CA" mode. kubeadm will proceed withou
Instead, run the controller-manager standalone with `--controllers=csrsigner` and
point to the CA certificate and key.
-->
-否则, kubeadm 将独立运行 controller-manager,附加一个
+否则,kubeadm 将独立运行 controller-manager,附加一个
`--controllers=csrsigner` 的参数,并且指明 CA 证书和密钥。
[PKI 证书和要求](/zh/docs/setup/best-practices/certificates/)包括集群使用外部 CA 的设置指南。
-
-## 检查证书是否过期
+## 检查证书是否过期 {#check-certificate-expiration}
你可以使用 `check-expiration` 子命令来检查证书何时过期
@@ -102,8 +105,8 @@ You can use the `check-expiration` subcommand to check when certificates expire:
kubeadm certs check-expiration
```
-
输出类似于以下内容:
@@ -126,17 +129,17 @@ etcd-ca Dec 28, 2029 23:36 UTC 9y no
front-proxy-ca Dec 28, 2029 23:36 UTC 9y no
```
-
-该命令显示 `/etc/kubernetes/pki` 文件夹中的客户端证书以及
-kubeadm(`admin.conf`, `controller-manager.conf` 和 `scheduler.conf`)
+该命令显示 `/etc/kubernetes/pki` 文件夹中的客户端证书以及
+kubeadm(`admin.conf`、`controller-manager.conf` 和 `scheduler.conf`)
使用的 KUBECONFIG 文件中嵌入的客户端证书的到期时间/剩余时间。
-
-另外, kubeadm 会通知用户证书是否由外部管理;
+另外,kubeadm 会通知用户证书是否由外部管理;
在这种情况下,用户应该小心的手动/使用其他工具来管理证书更新。
{{< note >}}
上面的列表中没有包含 `kubelet.conf`,因为 kubeadm 将 kubelet 配置为
-[自动更新证书](/docs/tasks/tls/certificate-rotation/)。
+[自动更新证书](/zh/docs/tasks/tls/certificate-rotation/)。
轮换的证书位于目录 `/var/lib/kubelet/pki`。
要修复过期的 kubelet 客户端证书,请参阅
[kubelet 客户端证书轮换失败](/zh/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/#kubelet-client-cert)。
@@ -180,35 +183,35 @@ client-key: /var/lib/kubelet/pki/kubelet-client-current.pem
```
{{< /warning >}}
-
-## 自动更新证书
+## 自动更新证书 {#automatic-certificate-renewal}
-`kubeadm` 会在控制面
+kubeadm 会在控制面
[升级](/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/)
的时候更新所有证书。
-
这个功能旨在解决最简单的用例;如果你对此类证书的更新没有特殊要求,
并且定期执行 Kubernetes 版本升级(每次升级之间的间隔时间少于 1 年),
则 kubeadm 将确保你的集群保持最新状态并保持合理的安全性。
-
{{< note >}}
最佳的做法是经常升级集群以确保安全。
{{< /note >}}
-
如果你对证书更新有更复杂的需求,则可通过将 `--certificate-renewal=false` 传递给
`kubeadm upgrade apply` 或者 `kubeadm upgrade node`,从而选择不采用默认行为。
@@ -224,16 +227,16 @@ kubeadm 在 1.17 版本之前有一个[缺陷](https://github.com/kubernetes/kub
在这种情况下,你需要显式地设置 `--certificate-renewal=true`。
{{< /warning >}}
-
-## 手动更新证书
+## 手动更新证书 {#manual-certificate-renewal}
你能随时通过 `kubeadm certs renew` 命令手动更新你的证书。
-
-此命令用 CA (或者 front-proxy-CA )证书和存储在 `/etc/kubernetes/pki` 中的密钥执行更新。
+此命令用 CA(或者 front-proxy-CA )证书和存储在 `/etc/kubernetes/pki` 中的密钥执行更新。
执行完此命令之后你需要重启控制面 Pods。因为动态证书重载目前还不被所有组件和证书支持,所有这项操作是必须的。
[静态 Pods](/zh/docs/tasks/configure-pod-container/static-pod/) 是被本地 kubelet 而不是 API Server 管理,
所以 kubectl 不能用来删除或重启他们。
要重启静态 Pod 你可以临时将清单文件从 `/etc/kubernetes/manifests/` 移除并等待 20 秒
-(参考 [KubeletConfiguration 结构](/docs/reference/config-api/kubelet-config.v1beta1/) 中的`fileCheckFrequency` 值)。
-如果 Pod 不在清单目录里,kubelet将会终止它。
+(参考 [KubeletConfiguration 结构](/zh/docs/reference/config-api/kubelet-config.v1beta1/) 中的`fileCheckFrequency` 值)。
+如果 Pod 不在清单目录里,kubelet 将会终止它。
在另一个 `fileCheckFrequency` 周期之后你可以将文件移回去,为了组件可以完成 kubelet 将重新创建 Pod 和证书更新。
-
{{< warning >}}
如果你运行了一个 HA 集群,这个命令需要在所有控制面板节点上执行。
{{< /warning >}}
-
{{< note >}}
-`certs renew` 使用现有的证书作为属性 (Common Name、Organization、SAN 等) 的权威来源,
-而不是 kubeadm-config ConfigMap 。强烈建议使它们保持同步。
+`certs renew` 使用现有的证书作为属性(Common Name、Organization、SAN 等)的权威来源,
+而不是 kubeadm-config ConfigMap。强烈建议使它们保持同步。
{{< /note >}}
-`kubeadm certs renew`提供以下选项:
+`kubeadm certs renew` 提供以下选项:
Kubernetes 证书通常在一年后到期。
-
@@ -294,14 +296,14 @@ Kubernetes 证书通常在一年后到期。
-## 用 Kubernetes 证书 API 更新证书
+## 用 Kubernetes 证书 API 更新证书 {#renew-certificates-with-the-kubernetes-certificates-api}
本节提供有关如何使用 Kubernetes 证书 API 执行手动证书更新的更多详细信息。
-
{{< caution >}}
这些是针对需要将其组织的证书基础结构集成到 kubeadm 构建的集群中的用户的高级主题。
@@ -312,27 +314,24 @@ These are advanced topics for users who need to integrate their organization's c
### Set up a signer
The Kubernetes Certificate Authority does not work out of the box.
-You can configure an external signer such as [cert-manager](https://cert-manager.io/docs/configuration/ca/), or you can use the build-in signer.
+You can configure an external signer such as [cert-manager](https://cert-manager.io/docs/configuration/ca/), or you can use the built-in signer.
The built-in signer is part of [`kube-controller-manager`](/docs/reference/command-line-tools-reference/kube-controller-manager/).
-To activate the build-in signer, you must pass the `--cluster-signing-cert-file` and `--cluster-signing-key-file` flags.
+To activate the built-in signer, you must pass the `--cluster-signing-cert-file` and `--cluster-signing-key-file` flags.
-->
-### 设置一个签名者(Signer)
+### 设置一个签名者(Signer) {#set-up-a-signer}
-Kubernetes 证书颁发机构不是开箱即用。
-你可以配置外部签名者,例如
-[cert-manager](https://cert-manager.io/docs/configuration/ca/),
+Kubernetes 证书颁发机构不是开箱即用。你可以配置外部签名者,例如 [cert-manager](https://cert-manager.io/docs/configuration/ca/),
也可以使用内置签名者。
内置签名者是
-[`kube-controller-manager`](/zh/docs/reference/command-line-tools-reference/kube-controller-manager/)
-的一部分。
+[`kube-controller-manager`](/zh/docs/reference/command-line-tools-reference/kube-controller-manager/) 的一部分。
要激活内置签名者,请传递 `--cluster-signing-cert-file` 和 `--cluster-signing-key-file` 参数。
如果你正在创建一个新的集群,你可以使用 kubeadm 的
-[配置文件](/docs/reference/config-api/kubeadm-config.v1beta3/)。
+[配置文件](/zh/docs/reference/config-api/kubeadm-config.v1beta3/)。
```yaml
apiVersion: kubeadm.k8s.io/v1beta3
@@ -343,10 +342,10 @@ controllerManager:
cluster-signing-key-file: /etc/kubernetes/pki/ca.key
```
-
-### 创建证书签名请求 (CSR)
+### 创建证书签名请求 (CSR) {#create-certificate-signing-requests-csr}
-## 通过外部 CA 更新证书
+## 通过外部 CA 更新证书 {#renew-certificates-with-external-ca}
本节提供有关如何使用外部 CA 执行手动更新证书的更多详细信息。
@@ -372,8 +371,8 @@ In kubeadm terms, any certificate that would normally be signed by an on-disk CA
CSR 表示向 CA 请求客户的签名证书。
在 kubeadm 术语中,通常由磁盘 CA 签名的任何证书都可以作为 CSR 生成。但是,CA 不能作为 CSR 生成。
-
-### 创建证书签名请求 (CSR)
+### 创建证书签名请求 (CSR) {#create-certificate-signing-requests-csr-1}
你可以通过 `kubeadm certs renew --csr-only` 命令创建证书签名请求。
CSR 和随附的私钥都在输出中给出。
你可以传入一个带有 `--csr-dir` 的目录,将 CRS 输出到指定位置。
-如果未指定 `--csr-dir` ,则使用默认证书目录(`/etc/kubernetes/pki`)。
+如果未指定 `--csr-dir`,则使用默认证书目录(`/etc/kubernetes/pki`)。
使用首选方法对证书签名后,必须将证书和私钥复制到 PKI 目录(默认为 `/etc/kubernetes/pki` )。
@@ -431,7 +430,7 @@ Kubeadm does not support rotation or replacement of CA certificates out of the b
For more information about manual rotation or replacement of CA, see [manual rotation of CA certificates](/docs/tasks/tls/manual-rotation-of-ca-certificates/).
-->
-## 证书机构(CA)轮换 {#certificate-authority-rotation}
+## 证书机构(CA)轮换 {#certificate-authority-rotation}
kubeadm 并不直接支持对 CA 证书的轮换或者替换。
@@ -449,9 +448,9 @@ kubelet cannot be secured with TLS.
To configure the kubelets in a new kubeadm cluster to obtain properly signed serving
certificates you must pass the following minimal configuration to `kubeadm init`:
-->
-## 启用已签名的 kubelet 服务证书 {#kubelet-serving-certs}
+## 启用已签名的 kubelet 服务证书 {#kubelet-serving-certs}
-默认情况下,kubeadm 所部署的 kubelet 服务证书是自签名(Self-Signed))。
+默认情况下,kubeadm 所部署的 kubelet 服务证书是自签名(Self-Signed)。
这意味着从 [metrics-server](https://github.com/kubernetes-sigs/metrics-server)
这类外部服务发起向 kubelet 的链接时无法使用 TLS 来完成保护。
@@ -501,7 +500,7 @@ These CSRs can be viewed using:
字段 `serverTLSBootstrap` 将允许启动引导 kubelet 的服务证书,方式
是从 `certificates.k8s.io` API 处读取。这种方式的一种局限在于这些
证书的 CSR(证书签名请求)不能被 kube-controller-manager 中默认的
-签名组件
+签名组件
[`kubernetes.io/kubelet-serving`](/zh/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers)
批准。需要用户或者第三方控制器来执行此操作。
@@ -554,7 +553,7 @@ the node identity with an out of band mechanism.
也可以使用第三方定制的控制器:
-- [kubelet-rubber-stamp](https://github.com/kontena/kubelet-rubber-stamp)
+- [kubelet-csr-approver](https://github.com/postfinance/kubelet-csr-approver)
除非既能够验证 CSR 中的 CommonName,也能检查请求的 IP 和域名,
这类控制器还算不得安全的机制。
只有完成彻底的检查,才有可能避免有恶意的、能够访问 kubelet 客户端证书的第三方
为任何 IP 或域名请求服务证书。
+
+## 为其他用户生成 kubeconfig 文件 {#kubeconfig-additional-users}
+
+
+在集群创建过程中,kubeadm 对 `admin.conf` 中的证书进行签名时,将其配置为
+`Subject: O = system:masters, CN = kubernetes-admin`。
+[`system:masters`](/zh/docs/reference/access-authn-authz/rbac/#user-facing-roles)
+是一个例外的超级用户组,可以绕过鉴权层(例如 RBAC)。
+强烈建议不要将 `admin.conf` 文件与任何人共享。
+
+
+你要使用 [`kubeadm kubeconfig user`](/zh/docs/reference/setup-tools/kubeadm/kubeadm-kubeconfig)
+命令为其他用户生成 kubeconfig 文件,这个命令支持命令行参数和
+[kubeadm 配置结构](/zh/docs/reference/config-api/kubeadm-config.v1beta3/)。
+以上命令会将 kubeconfig 打印到终端上,也可以使用 `kubeadm kubeconfig user ... > somefile.conf`
+输出到一个文件中。
+
+
+如下 kubeadm 可以在 `--config` 后加的配置文件示例:
+
+```yaml
+# example.yaml
+apiVersion: kubeadm.k8s.io/v1beta3
+kind: ClusterConfiguration
+# kubernetes 将作为 kubeconfig 中集群名称
+clusterName: "kubernetes"
+# some-dns-address:6443 将作为集群 kubeconfig 文件中服务地址(IP 或者 DNS 名称)
+controlPlaneEndpoint: "some-dns-address:6443"
+# 从本地挂载集群的 CA 秘钥和 CA 证书
+certificatesDir: "/etc/kubernetes/pki"
+```
+
+
+确保这些设置与所需的目标集群设置相匹配。可以使用以下命令查看现有集群的设置:
+
+```shell
+kubectl get cm kubeadm-config -n kube-system -o=jsonpath="{.data.ClusterConfiguration}"
+```
+
+
+以下示例将为在 `appdevs` 组的 `johndoe` 用户创建一个有效期为 24 小时的 kubeconfig 文件:
+
+```shell
+kubeadm kubeconfig user --config example.yaml --org appdevs --client-name johndoe --validity-period 24h
+```
+
+
+以下示例将为管理员创建一个有效期有一周的 kubeconfig 文件:
+
+```shell
+kubeadm kubeconfig user --config example.yaml --client-name admin --validity-period 168h
+```
\ No newline at end of file
diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-reconfigure.md b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-reconfigure.md
new file mode 100644
index 0000000000..a9af9c080c
--- /dev/null
+++ b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-reconfigure.md
@@ -0,0 +1,509 @@
+---
+title: 重新配置 kubeadm 集群
+content_type: task
+weight: 10
+---
+
+
+
+
+kubeadm 不支持自动重新配置部署在托管节点上的组件的方式。
+一种自动化的方法是使用自定义的
+[operator](/zh/docs/concepts/extend-kubernetes/operator/)。
+
+
+要修改组件配置,你必须手动编辑磁盘上关联的集群对象和文件。
+本指南展示了实现 kubeadm 集群重新配置所需执行的正确步骤顺序。
+
+## {{% heading "prerequisites" %}}
+
+
+- 你需要一个使用 kubeadm 部署的集群
+- 拥有管理员凭据(`/etc/kubernetes/admin.conf`)
+ 和从安装了 kubectl 的主机到集群中正在运行的 kube-apiserver 的网络连接
+- 在所有主机上安装文本编辑器
+
+
+
+
+## 重新配置集群
+
+kubeadm 在 ConfigMap 和其他对象中写入了一组集群范围的组件配置选项。
+这些对象必须手动编辑,可以使用命令 `kubectl edit`。
+
+
+`kubectl edit` 命令将打开一个文本编辑器,你可以在其中直接编辑和保存对象。
+你可以使用环境变量 `KUBECONFIG` 和 `KUBE_EDITOR` 来指定 kubectl
+使用的 kubeconfig 文件和首选文本编辑器的位置。
+
+例如:
+```
+KUBECONFIG=/etc/kubernetes/admin.conf KUBE_EDITOR=nano kubectl edit
+```
+
+{{< note >}}
+
+保存对这些集群对象的任何更改后,节点上运行的组件可能不会自动更新。
+以下步骤将指导你如何手动执行该操作。
+{{< /note >}}
+
+{{< warning >}}
+
+
+ConfigMaps 中的组件配置存储为非结构化数据(YAML 字符串)。 这意味着在更新
+ConfigMap 的内容时不会执行验证。 你必须小心遵循特定组件配置的文档化 API 格式,
+并避免引入拼写错误和 YAML 缩进错误。
+{{< /warning >}}
+
+
+### 应用集群配置更改
+
+#### 更新 `ClusterConfiguration`
+
+在集群创建和升级期间,kubeadm 将其
+[`ClusterConfiguration`](/zh/docs/reference/config-api/kubeadm-config.v1beta3/)
+写入 `kube-system` 命名空间中名为 `kubeadm-config` 的 ConfigMap。
+
+要更改 `ClusterConfiguration` 中的特定选项,你可以使用以下命令编辑 ConfigMap:
+
+```shell
+kubectl edit cm -n kube-system kubeadm-config
+```
+
+配置位于 `data.ClusterConfiguration` 键下。
+
+{{< note >}}
+
+`ClusterConfiguration` 包括各种影响单个组件配置的选项, 例如
+kube-apiserver、kube-scheduler、kube-controller-manager、
+CoreDNS、etcd 和 kube-proxy。 对配置的更改必须手动反映在节点组件上。
+{{< /note >}}
+
+
+#### 在控制平面节点上反映 `ClusterConfiguration` 更改
+
+kubeadm 将控制平面组件作为位于 `/etc/kubernetes/manifests`
+目录中的静态 Pod 清单进行管理。
+对 `apiServer`、`controllerManager`、`scheduler` 或 `etcd`键下的
+`ClusterConfiguration` 的任何更改都必须反映在控制平面节点上清单目录中的关联文件中。
+
+
+
+此类更改可能包括:
+- `extraArgs` - 需要更新传递给组件容器的标志列表
+- `extraMounts` - 需要更新组件容器的卷挂载
+- `*SANs` - 需要使用更新的主题备用名称编写新证书
+
+在继续进行这些更改之前,请确保你已备份目录 `/etc/kubernetes/`。
+
+
+
+要编写新证书,你可以使用:
+
+```shell
+kubeadm init phase certs --config
+```
+
+要在 `/etc/kubernetes/manifests` 中编写新的清单文件,你可以使用:
+
+```shell
+kubeadm init phase control-plane --config
+```
+
+
+`` 内容必须与更新后的 `ClusterConfiguration` 匹配。
+`` 值必须是组件的名称。
+
+{{< note >}}
+
+更新 `/etc/kubernetes/manifests` 中的文件将告诉 kubelet 重新启动相应组件的静态 Pod。
+尝试一次对一个节点进行这些更改,以在不停机的情况下离开集群。
+{{< /note >}}
+
+
+### 应用 kubelet 配置更改
+
+#### 更新 `KubeletConfiguration`
+
+在集群创建和升级期间,kubeadm 将其
+[`KubeletConfiguration`](/zh/docs/reference/config-api/kubelet-config.v1beta1/)
+写入 `kube-system` 命名空间中名为 `kubelet-config` 的 ConfigMap。
+你可以使用以下命令编辑 ConfigMap:
+
+```shell
+kubectl edit cm -n kube-system kubelet-config
+```
+
+配置位于 `data.kubelet` 键下。
+
+
+#### 反映 kubelet 的更改
+
+要反映 kubeadm 节点上的更改,你必须执行以下操作:
+
+- 登录到 kubeadm 节点
+- 运行 `kubeadm upgrade node phase kubelet-config` 下载最新的
+ `kubelet-config` ConfigMap 内容到本地文件 `/var/lib/kubelet/config.conf`
+- 编辑文件 `/var/lib/kubelet/kubeadm-flags.env` 以使用标志来应用额外的配置
+- 使用 `systemctl restart kubelet` 重启 kubelet 服务
+
+{{< note >}}
+
+一次执行一个节点的这些更改,以允许正确地重新安排工作负载。
+{{< /note >}}
+
+{{< note >}}
+
+在 `kubeadm upgrade` 期间,kubeadm 从 `kubelet-config` ConfigMap
+下载 `KubeletConfiguration` 并覆盖 `/var/lib/kubelet/config.conf` 的内容。
+这意味着节点本地配置必须通过`/var/lib/kubelet/kubeadm-flags.env`中的标志或在
+kubeadm upgrade` 后手动更新`/var/lib/kubelet/config.conf`的内容来应用,然后重新启动 kubelet。
+{{< /note >}}
+
+
+### 应用 kube-proxy 配置更改
+
+#### 更新 `KubeProxyConfiguration`
+
+在集群创建和升级期间,kubeadm 将其写入
+[`KubeProxyConfiguration`](/zh/docs/reference/config-api/kube-proxy-config.v1alpha1/)
+在名为 `kube-proxy` 的 `kube-system` 命名空间中的 ConfigMap 中。
+
+此 ConfigMap 由 `kube-system` 命名空间中的 `kube-proxy` DaemonSet 使用。
+
+要更改 `KubeProxyConfiguration` 中的特定选项,你可以使用以下命令编辑 ConfigMap:
+
+```shell
+kubectl edit cm -n kube-system kube-proxy
+```
+
+配置位于 `data.config.conf` 键下。
+
+
+#### 反映 kube-proxy 的更改
+
+更新 `kube-proxy` ConfigMap 后,你可以重新启动所有 kube-proxy Pod:
+
+获取 Pod 名称:
+
+```shell
+kubectl get po -n kube-system | grep kube-proxy
+```
+
+使用以下命令删除 Pod:
+
+```shell
+kubectl delete po -n kube-system
+```
+
+将创建使用更新的 ConfigMap 的新 Pod。
+
+{{< note >}}
+
+由于 kubeadm 将 kube-proxy 部署为 DaemonSet,因此不支持特定于节点的配置。
+{{< /note >}}
+
+
+### 应用 CoreDNS 配置更改
+
+#### 更新 CoreDNS 的 Deployment 和 Service
+
+kubeadm 将 CoreDNS 部署为名为 `coredns` 的 Deployment,并使用 Service `kube-dns`,
+两者都在 `kube-system` 命名空间中。
+
+要更新任何 CoreDNS 设置,你可以编辑 Deployment 和 Service:
+
+
+```shell
+kubectl edit deployment -n kube-system coredns
+kubectl edit service -n kube-system kube-dns
+```
+
+
+#### 反映 CoreDNS 的更改
+
+应用 CoreDNS 更改后,你可以删除 CoreDNS Pod。
+
+获取 Pod 名称:
+
+```shell
+kubectl get po -n kube-system | grep coredns
+```
+
+使用以下命令删除 Pod:
+
+```shell
+kubectl delete po -n kube-system
+```
+
+
+将创建具有更新的 CoreDNS 配置的新 Pod。
+
+{{< note >}}
+
+kubeadm 不允许在集群创建和升级期间配置 CoreDNS。
+这意味着如果执行了 `kubeadm upgrade apply`,你对
+CoreDNS 对象的更改将丢失并且必须重新应用。
+{{< /note >}}
+
+
+## 持久化重新配置
+
+在受管节点上执行 `kubeadm upgrade` 期间,kubeadm
+可能会覆盖在创建集群(重新配置)后应用的配置。
+
+
+### 持久化 Node 对象重新配置
+
+kubeadm 在特定 Kubernetes 节点的 Node 对象上写入标签、污点、CRI
+套接字和其他信息。要更改此 Node 对象的任何内容,你可以使用:
+
+```shell
+kubectl edit no
+```
+
+
+在 `kubeadm upgrade` 期间,此类节点的内容可能会被覆盖。
+如果你想在升级后保留对 Node 对象的修改,你可以准备一个
+[kubectl patch](/zh/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch/)
+并将其应用到 Node 对象:
+
+```shell
+kubectl patch no --patch-file
+```
+
+
+#### 持久化控制平面组件重新配置
+
+控制平面配置的主要来源是存储在集群中的 `ClusterConfiguration` 对象。
+要扩展静态 Pod 清单配置,可以使用
+[patches](/zh/docs/setup/production-environment/tools/kubeadm/control-plane-flags/#patches)。
+
+这些补丁文件必须作为文件保留在控制平面节点上,以确保它们可以被
+`kubeadm upgrade ... --patches ` 使用。
+
+如果对 `ClusterConfiguration` 和磁盘上的静态 Pod 清单进行了重新配置,则必须相应地更新节点特定补丁集。
+
+
+#### 持久化 kubelet 重新配置
+
+对存储在 `/var/lib/kubelet/config.conf` 中的 `KubeletConfiguration`
+所做的任何更改都将在 `kubeadm upgrade` 时因为下载集群范围内的 `kubelet-config`
+ConfigMap 的内容而被覆盖。
+要持久保存 kubelet 节点特定的配置,文件`/var/lib/kubelet/config.conf`
+必须在升级后手动更新,或者文件`/var/lib/kubelet/kubeadm-flags.env` 可以包含标志。
+kubelet 标志会覆盖相关的 `KubeletConfiguration` 选项,但请注意,有些标志已被弃用。
+
+更改 `/var/lib/kubelet/config.conf` 或 `/var/lib/kubelet/kubeadm-flags.env`
+后需要重启 kubelet。
+
+{{% heading "whatsnext" %}}
+
+
+
+- [升级 kubeadm 集群](/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade)
+- [使用 kubeadm API 自定义组件](/zh/docs/setup/production-environment/tools/kubeadm/control-plane-flags)
+- [使用 kubeadm 管理证书](/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-certs)
\ No newline at end of file
diff --git a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md
index 25f10b0fed..68b5f63b4d 100644
--- a/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md
+++ b/content/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade.md
@@ -18,12 +18,12 @@ min-kubernetes-server-version: 1.18
This page explains how to upgrade a Kubernetes cluster created with kubeadm from version
{{< skew currentVersionAddMinor -1 >}}.x to version {{< skew currentVersion >}}.x, and from version
{{< skew currentVersion >}}.x to {{< skew currentVersion >}}.y (where `y > x`). Skipping MINOR versions
-when upgrading is unsupported.
+when upgrading is unsupported. For more details, please visit [Version Skew Policy](https://kubernetes.io/releases/version-skew-policy/).
-->
本页介绍如何将 `kubeadm` 创建的 Kubernetes 集群从 {{< skew currentVersionAddMinor -1 >}}.x 版本
升级到 {{< skew currentVersion >}}.x 版本以及从 {{< skew currentVersion >}}.x
升级到 {{< skew currentVersion >}}.y(其中 `y > x`)。略过次版本号的升级是
-不被支持的。
+不被支持的。更多详情请访问[版本倾斜政策](https://kubernetes.io/releases/version-skew-policy/)。
+
### 附加信息
-- 在对 kubelet 作次版本升版时需要[腾空节点](/zh/docs/tasks/administer-cluster/safely-drain-node/)。
- 对于控制面节点,其上可能运行着 CoreDNS Pods 或者其它非常重要的负载。
+- 下述说明了在升级过程中何时腾空每个节点。如果你正在对任何 kubelet 进行小版本升级,
+ 你需要先腾空待升级的节点(或多个节点)。对于控制面节点,其上可能运行着 CoreDNS Pods
+ 或者其它非常重要的负载。更多信息见[腾空节点](/zh/docs/tasks/administer-cluster/safely-drain-node/)。
- 升级后,因为容器规约的哈希值已更改,所有容器都会被重新启动。
+
+
+- 要验证 kubelet 服务在升级后是否成功重启,可以执行 `systemctl status kubelet`
+ 或 `journalctl -xeu kubelet` 查看服务日志。
+- 不建议使用 `kubeadm upgrade` 的 `--config 参数和 [kubeadm 配置 API 类型](/zh/docs/reference/config-api/kubeadm-config.v1beta3)
+ 来重新配置集群,这样会产生意想不到的结果。请按照[重新配置 kubeadm 集群](/zh/docs/tasks/administer-cluster/kubeadm/kubeadm-reconfigure)
+ 中的步骤来进行。
+
一旦该命令结束,你应该会看到:
- ```
+ ```console
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v{{< skew currentVersion >}}.x". Enjoy!
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
@@ -259,7 +283,7 @@ Same as the first control plane node but use:
-->
与第一个控制面节点相同,但是使用:
-```
+```shell
sudo kubeadm upgrade node
```
@@ -268,7 +292,7 @@ instead of:
-->
而不是:
-```
+```shell
sudo kubeadm upgrade apply
```
@@ -299,34 +323,33 @@ Also calling `kubeadm upgrade plan` and upgrading the CNI provider plugin is no
### 升级 kubelet 和 kubectl
-- 升级 kubelet 和 kubectl
+- 升级 kubelet 和 kubectl:
{{< tabs name="k8s_install_kubelet" >}}
{{% tab name="Ubuntu、Debian 或 HypriotOS" %}}
-
- # 用最新的补丁版本替换 {{< skew currentVersion >}}.x-00 中的 x
- apt-mark unhold kubelet kubectl && \
- apt-get update && apt-get install -y kubelet={{< skew currentVersion >}}.x-00 kubectl={{< skew currentVersion >}}.x-00 && \
- apt-mark hold kubelet kubectl
- -
- # 从 apt-get 的 1.1 版本开始,你也可以使用下面的方法:
- apt-get update && \
- apt-get install -y --allow-change-held-packages kubelet={{< skew currentVersion >}}.x-00 kubectl={{< skew currentVersion >}}.x-00
-
+ ```shell
+ # 用最新的补丁版本替换 {{< skew currentVersion >}}.x-00 中的 x
+ apt-mark unhold kubelet kubectl && \
+ apt-get update && apt-get install -y kubelet={{< skew currentVersion >}}.x-00 kubectl={{< skew currentVersion >}}.x-00 && \
+ apt-mark hold kubelet kubectl
+ ```
+
{{% /tab %}}
{{% tab name="CentOS、RHEL 或 Fedora" %}}
-
-
- # 用最新的补丁版本号替换 {{< skew currentVersion >}}.x-00 中的 x
- yum install -y kubelet-{{< skew currentVersion >}}.x-0 kubectl-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
-
+
+ ```shell
+ # 用最新的补丁版本号替换 {{< skew currentVersion >}}.x-00 中的 x
+ yum install -y kubelet-{{< skew currentVersion >}}.x-0 kubectl-{{< skew currentVersion >}}.x-0 --disableexcludes=kubernetes
+ ```
+
{{% /tab %}}
{{< /tabs >}}
+
-`STATUS` 应显示所有节点为 `Ready` 状态,并且版本号已经被更新。
+`STATUS` 应显示所有节点为 `Ready` 状态,并且版本号已经被更新。
`kubeadm upgrade node` 在工作节点上完成以下工作:
-- 从集群取回 kubeadm `ClusterConfiguration`。
+- 从集群取回 kubeadm `ClusterConfiguration`。
- 为本节点升级 kubelet 配置。
-
diff --git a/content/zh/docs/tasks/administer-cluster/kubelet-in-userns.md b/content/zh/docs/tasks/administer-cluster/kubelet-in-userns.md
index dea35a94e1..33c23ba810 100644
--- a/content/zh/docs/tasks/administer-cluster/kubelet-in-userns.md
+++ b/content/zh/docs/tasks/administer-cluster/kubelet-in-userns.md
@@ -35,7 +35,7 @@ If you are just looking for how to run a pod as a non-root user, see [SecurityCo
这种技术也叫做 _rootless 模式(Rootless mode)_。
{{< note >}}
-这个文档描述了怎么以非 root 用户身份运行 Kubernetes 节点组件以及 Pod。
+这个文档描述了怎么以非 root 用户身份运行 Kubernetes 节点组件以及 Pod。
如果你只是想了解如何以非 root 身份运行 Pod,请参阅 [SecurityContext](/zh/docs/tasks/configure-pod-container/security-context/)。
{{< /note >}}
@@ -99,6 +99,51 @@ Rootless Podman is not supported.
+
+
+## 在非特权容器内运行 Kubernetes
+
+{{% thirdparty-content %}}
+
+### sysbox
+
+
+
+[Sysbox](https://github.com/nestybox/sysbox) 是一个开源容器运行时
+(类似于 “runc”),支持在 Linux 用户命名空间隔离的非特权容器内运行系统级工作负载,
+比如 Docker 和 Kubernetes。
+
+
+
+查看 [Sysbox 快速入门指南: Kubernetes-in-Docker](https://github.com/nestybox/sysbox/blob/master/docs/quickstart/kind.md)
+了解更多细节。
+
+
+
+Sysbox 支持在非特权容器内运行 Kubernetes,
+而不需要 Cgroup v2 和 “KubeletInUserNamespace” 特性门控。
+Sysbox 通过在容器内暴露特定的 `/proc` 和 `/sys` 文件系统,
+以及其它一些先进的操作系统虚拟化技术来实现。
+
### 配置 kubelet
@@ -478,7 +523,8 @@ cgroupDriver: "cgroupfs"
`KubeletInUserNamespace` 特性门控从 Kubernetes v1.22 被引入, 标记为 "alpha" 状态。
-通过挂载特制的 proc 文件系统,也可以在不使用这个特性门控的情况下在用户命名空间运行 kubelet,但这不受官方支持。
+通过挂载特制的 proc 文件系统 (比如 [Sysbox](https://github.com/nestybox/sysbox)),
+也可以在不使用这个特性门控的情况下在用户命名空间运行 kubelet,但这不受官方支持。
-本页介绍如何为命名空间中容器和 Pod 使用的 CPU 资源设置最小和最大值。
+本页介绍如何为{{< glossary_tooltip text="命名空间" term_id="namespace" >}}中的容器和 Pod
+设置其所使用的 CPU 资源的最小和最大值。
你可以通过
-[LimitRange](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#limitrange-v1-core)
-对象声明 CPU 的最小和最大值. 如果 Pod 不能满足 LimitRange 的限制,它就不能在命名空间中创建。
+[LimitRange](/docs/reference/kubernetes-api/policy-resources/limit-range-v1/)
+对象声明 CPU 的最小和最大值.
+如果 Pod 不能满足 LimitRange 的限制,就无法在该命名空间中被创建。
## {{% heading "prerequisites" %}}
-{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+{{< include "task-tutorial-prereqs.md" >}}
-你的集群中每个节点至少要有 1 个 CPU 可用才能运行本任务示例。
+在你的集群里你必须要有创建命名空间的权限。
+
+集群中的每个节点都必须至少有 1.0 个 CPU 可供 Pod 使用。
+
+请阅读 [CPU 的含义](/zh/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu)
+理解 "1 CPU" 在 Kubernetes 中的含义。
@@ -52,11 +69,11 @@ kubectl create namespace constraints-cpu-example
## 创建 LimitRange 和 Pod
-这里给出了 LimitRange 的配置文件:
+以下为 {{< glossary_tooltip text="LimitRange" term_id="limitrange" >}} 的示例清单:
{{< codenew file="admin/resource/cpu-constraints.yaml" >}}
@@ -100,24 +117,25 @@ limits:
```
-现在不管什么时候在 constraints-cpu-example 命名空间中创建容器,Kubernetes 都会执行下面这些步骤:
+现在,每当你在 constraints-mem-example 命名空间中创建 Pod 时,或者某些其他的
+Kubernetes API 客户端创建了等价的 Pod 时,Kubernetes 就会执行下面的步骤:
-* 如果容器没有声明自己的 CPU 请求和限制,将为容器指定默认 CPU 请求和限制。
+* 如果 Pod 中的任何容器未声明自己的 CPU 请求和限制,控制面将为该容器设置默认的 CPU 请求和限制。
-* 核查容器声明的 CPU 请求确保其大于或者等于 200 millicpu。
+* 确保该 Pod 中的每个容器的 CPU 请求至少 200 millicpu。
-* 核查容器声明的 CPU 限制确保其小于或者等于 800 millicpu。
+* 确保该 Pod 中每个容器 CPU 请求不大于 800 millicpu。
-这里给出了包含一个容器的 Pod 的配置文件。
-该容器声明了 500 millicpu 的 CPU 请求和 800 millicpu 的 CPU 限制。
+以下为某个仅包含一个容器的 Pod 的清单。
+该容器声明了 CPU 请求 500 millicpu 和 CPU 限制 800 millicpu 。
这些参数满足了 LimitRange 对象规定的 CPU 最小和最大限制。
{{< codenew file="admin/resource/cpu-constraints-pod.yaml" >}}
@@ -143,16 +161,16 @@ minimum and maximum CPU constraints imposed by the LimitRange.
-创建Pod:
+创建 Pod:
```shell
kubectl apply -f https://k8s.io/examples/admin/resource/cpu-constraints-pod.yaml --namespace=constraints-cpu-example
```
-确认一下 Pod 中的容器在运行:
+确认 Pod 正在运行,并且其容器处于健康状态:
```shell
kubectl get pod constraints-cpu-demo --namespace=constraints-cpu-example
@@ -168,10 +186,10 @@ kubectl get pod constraints-cpu-demo --output=yaml --namespace=constraints-cpu-e
```
-输出结果表明容器的 CPU 请求为 500 millicpu,CPU 限制为 800 millicpu。
+输出结果显示该 Pod 的容器的 CPU 请求为 500 millicpu,CPU 限制为 800 millicpu。
这些参数满足 LimitRange 规定的限制范围。
```yaml
@@ -214,10 +232,11 @@ kubectl apply -f https://k8s.io/examples/admin/resource/cpu-constraints-pod-2.ya
```
-输出结果表明 Pod 没有创建成功,因为容器声明的 CPU 限制太大了:
+输出结果表明 Pod 没有创建成功,因为其中定义了一个无法被接受的容器。
+该容器之所以无法被接受是因为其中设定了过高的 CPU 限制值:
```
Error from server (Forbidden): error when creating "examples/admin/resource/cpu-constraints-pod-2.yaml":
@@ -227,12 +246,12 @@ pods "constraints-cpu-demo-2" is forbidden: maximum cpu usage per Container is 8
## 尝试创建一个不满足最小 CPU 请求的 Pod
-这里给出了包含一个容器的 Pod 的配置文件。该容器声明了100 millicpu的 CPU 请求和800 millicpu的 CPU 限制。
+以下为某个只有一个容器的 Pod 的清单。该容器声明了 CPU 请求 100 millicpu 和 CPU 限制 800 millicpu。
{{< codenew file="admin/resource/cpu-constraints-pod-3.yaml" >}}
@@ -246,10 +265,12 @@ kubectl apply -f https://k8s.io/examples/admin/resource/cpu-constraints-pod-3.ya
```
-输出结果显示 Pod 没有创建成功,因为容器声明的 CPU 请求太小了:
+输出结果显示 Pod 没有创建成功,因为其中定义了一个无法被接受的容器。
+该容器无法被接受的原因是其中所设置的 CPU 请求小于最小值的限制:
```
Error from server (Forbidden): error when creating "examples/admin/resource/cpu-constraints-pod-3.yaml":
@@ -259,12 +280,12 @@ pods "constraints-cpu-demo-4" is forbidden: minimum cpu usage per Container is 2
## 创建一个没有声明 CPU 请求和 CPU 限制的 Pod
-这里给出了包含一个容器的 Pod 的配置文件。该容器没有设定 CPU 请求和 CPU 限制。
+以下为一个只有一个容器的 Pod 的清单。该容器没有声明 CPU 请求,也没有声明 CPU 限制。
{{< codenew file="admin/resource/cpu-constraints-pod-4.yaml" >}}
@@ -287,11 +308,14 @@ kubectl get pod constraints-cpu-demo-4 --namespace=constraints-cpu-example --out
```
-输出结果显示 Pod 的容器有个 800 millicpu 的 CPU 请求和 800 millicpu 的 CPU 限制。
-容器是怎样得到那些值的呢?
+输出结果显示 Pod 的唯一容器的 CPU 请求为 800 millicpu,CPU 限制为 800 millicpu。
+
+容器是怎样获得这些数值的呢?
+
```yaml
resources:
@@ -302,26 +326,27 @@ resources:
```
-因为你的 Container 没有声明自己的 CPU 请求和限制,LimitRange 给它指定了
-[默认的 CPU 请求和限制](/zh/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/)
+因为这一容器没有声明自己的 CPU 请求和限制,
+控制面会根据命名空间中配置 LimitRange
+设置[默认的 CPU 请求和限制](/zh/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/)。
-此时,你的容器可能运行也可能没有运行。
-回想一下,本任务的先决条件是你的节点要有 1 个 CPU。
-如果你的每个节点仅有 1 个 CPU,那么可能没有任何一个节点可以满足 800 millicpu 的 CPU 请求。
-如果你在用的节点恰好有两个 CPU,那么你才可能有足够的 CPU 来满足 800 millicpu 的请求。
+此时,你的 Pod 可能已经运行起来也可能没有运行起来。
+回想一下我们本次任务的先决条件是你的每个节点都至少有 1 CPU。
+如果你的每个节点都只有 1 CPU,那将没有一个节点拥有足够的可分配 CPU 来满足 800 millicpu 的请求。
+如果你在用的节点恰好有 2 CPU,那么有可能有足够的 CPU 来满足 800 millicpu 的请求。
```
kubectl delete pod constraints-cpu-demo-4 --namespace=constraints-cpu-example
diff --git a/content/zh/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace.md b/content/zh/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace.md
index cc516e24cd..c00fa48828 100644
--- a/content/zh/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace.md
+++ b/content/zh/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace.md
@@ -2,6 +2,8 @@
title: 为命名空间配置默认的 CPU 请求和限制
content_type: task
weight: 20
+description: >-
+ 为命名空间定义默认的 CPU 资源限制,在该命名空间中每个新建的 Pod 都会被配置上 CPU 资源限制。
---
-本章介绍怎样为命名空间配置默认的 CPU 请求和限制。
-一个 Kubernetes 集群可被划分为多个命名空间。如果在配置了 CPU 限制的命名空间创建容器,
-并且该容器没有声明自己的 CPU 限制,那么这个容器会被指定默认的 CPU 限制。
-Kubernetes 在一些特定情况还会指定 CPU 请求,本文后续章节将会对其进行解释。
+本章介绍如何为{{< glossary_tooltip text="命名空间" term_id="namespace" >}}配置默认的 CPU 请求和限制。
+
+一个 Kubernetes 集群可被划分为多个命名空间。
+如果你在具有默认 CPU[限制](/zh/docs/concepts/configuration/manage-resources-containers/#requests-and-limits)
+的命名空间内创建一个 Pod,并且这个 Pod 中任何容器都没有声明自己的 CPU 限制,
+那么{{< glossary_tooltip text="控制面" term_id="control-plane" >}}会为容器设定默认的 CPU 限制。
+
+Kubernetes 在一些特定情况还可以设置默认的 CPU 请求,本文后续章节将会对其进行解释。
## {{% heading "prerequisites" %}}
-{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+{{< include "task-tutorial-prereqs.md" >}}
+
+
+在你的集群里你必须要有创建命名空间的权限。
+
+如果你还不熟悉 Kubernetes 中 1.0 CPU 的含义,
+请阅读 [CPU 的含义](/zh/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu)。
@@ -46,12 +72,13 @@ kubectl create namespace default-cpu-example
## 创建 LimitRange 和 Pod
-这里给出了 LimitRange 对象的配置文件。该配置声明了一个默认的 CPU 请求和一个默认的 CPU 限制。
+以下为 {{< glossary_tooltip text="LimitRange" term_id="limitrange" >}} 的示例清单。
+清单中声明了默认 CPU 请求和默认 CPU 限制。
{{< codenew file="admin/resource/cpu-defaults.yaml" >}}
@@ -65,18 +92,19 @@ kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults.yaml --name
```
-现在如果在 default-cpu-example 命名空间创建一个容器,该容器没有声明自己的 CPU 请求和限制时,
-将会给它指定默认的 CPU 请求0.5和默认的 CPU 限制值1.
+现在如果你在 default-cpu-example 命名空间中创建一个 Pod,
+并且该 Pod 中所有容器都没有声明自己的 CPU 请求和 CPU 限制,
+控制面会将 CPU 的默认请求值 0.5 和默认限制值 1 应用到 Pod 上。
-这里给出了包含一个容器的 Pod 的配置文件。该容器没有声明 CPU 请求和限制。
+以下为只包含一个容器的 Pod 的清单。该容器没有声明 CPU 请求和限制。
{{< codenew file="admin/resource/cpu-defaults-pod.yaml" >}}
@@ -99,10 +127,12 @@ kubectl get pod default-cpu-demo --output=yaml --namespace=default-cpu-example
```
-输出显示该 Pod 的容器有一个500 millicpus的 CPU 请求和一个1 cpu的 CPU 限制。这些是 LimitRange 声明的默认值。
+输出显示该 Pod 的唯一的容器有 500m `cpu` 的 CPU 请求和 1 `cpu` 的 CPU 限制。
+这些是 LimitRange 声明的默认值。
```shell
containers:
@@ -117,14 +147,14 @@ containers:
```
## 你只声明容器的限制,而不声明请求会怎么样?
-这是包含一个容器的 Pod 的配置文件。该容器声明了 CPU 限制,而没有声明 CPU 请求。
+以下为只包含一个容器的 Pod 的清单。该容器声明了 CPU 限制,而没有声明 CPU 请求。
{{< codenew file="admin/resource/cpu-defaults-pod-2.yaml" >}}
@@ -138,9 +168,10 @@ kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod-2.yaml
```
-查看 Pod 的声明:
+查看你所创建的 Pod 的[规约](/zh/docs/concepts/overview/working-with-objects/kubernetes-objects/#object-spec-and-status):
```
kubectl get pod default-cpu-demo-2 --output=yaml --namespace=default-cpu-example
@@ -148,9 +179,9 @@ kubectl get pod default-cpu-demo-2 --output=yaml --namespace=default-cpu-example
-输出显示该容器的 CPU 请求和 CPU 限制设置相同。注意该容器没有被指定默认的 CPU 请求值0.5 cpu。
+输出显示该容器的 CPU 请求和 CPU 限制设置相同。注意该容器没有被指定默认的 CPU 请求值 0.5 `cpu`:
```
resources:
@@ -161,14 +192,14 @@ resources:
```
## 你只声明容器的请求,而不声明它的限制会怎么样?
-这里给出了包含一个容器的 Pod 的配置文件。该容器声明了 CPU 请求,而没有声明 CPU 限制。
+这里给出了包含一个容器的 Pod 的示例清单。该容器声明了 CPU 请求,而没有声明 CPU 限制。
{{< codenew file="admin/resource/cpu-defaults-pod-3.yaml" >}}
@@ -182,21 +213,22 @@ kubectl apply -f https://k8s.io/examples/admin/resource/cpu-defaults-pod-3.yaml
```
-查看 Pod 的规约:
+查看所你创建的 Pod 的规约:
```
kubectl get pod default-cpu-demo-3 --output=yaml --namespace=default-cpu-example
```
-结果显示该容器的 CPU 请求被设置为容器配置文件中声明的数值。
-容器的CPU限制被设置为 1 CPU,即该命名空间的默认 CPU 限制值。
+输出显示你所创建的 Pod 中,容器的 CPU 请求为 Pod 清单中声明的值。
+然而同一容器的 CPU 限制被设置为 1 `cpu`,此值是该命名空间的默认 CPU 限制值。
```
resources:
@@ -209,27 +241,41 @@ resources:
## 默认 CPU 限制和请求的动机
-如果你的命名空间有一个
-[资源配额](/zh/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/),
-那么有一个默认的 CPU 限制是有帮助的。这里有资源配额强加给命名空间的两条限制:
+如果你的命名空间设置了 CPU {{< glossary_tooltip text="资源配额" term_id="resource-quota" >}},
+为 CPU 限制设置一个默认值会很有帮助。
+以下是 CPU 资源配额对命名空间的施加的两条限制:
-* 命名空间中运行的每个容器必须有自己的 CPU 限制。
-* 命名空间中所有容器使用的 CPU 总和不能超过一个声明值。
+* 命名空间中运行的每个 Pod 中的容器都必须有 CPU 限制。
-如果容器没有声明自己的 CPU 限制,将会给它一个默认限制,这样它就能被允许运行在一个有配额限制的命名空间中。
+* CPU 限制用来在 Pod 被调度到的节点上执行资源预留。
+
+预留给命名空间中所有 Pod 使用的 CPU 总量不能超过规定的限制。
+
+
+当你添加 LimitRange 时:
+
+如果该命名空间中的任何 Pod 的容器未指定 CPU 限制,
+控制面将默认 CPU 限制应用于该容器,
+这样 Pod 可以在受到 CPU ResourceQuota 限制的命名空间中运行。
-集群中每个节点必须至少要有 1 GiB 的内存。
+在你的集群里你必须要有创建命名空间的权限。
+
+集群中的每个节点都必须至少有 1 GiB 的内存可供 Pod 使用。
@@ -42,7 +48,7 @@ isolated from the rest of your cluster.
-->
## 创建命名空间
-创建一个命名空间,以便在此练习中创建的资源与群集的其余资源隔离。
+创建一个命名空间,以便在此练习中创建的资源与集群的其余资源隔离。
```shell
kubectl create namespace constraints-mem-example
@@ -51,11 +57,11 @@ kubectl create namespace constraints-mem-example
## 创建 LimitRange 和 Pod
-下面是 LimitRange 的配置文件:
+下面是 LimitRange 的示例清单:
{{< codenew file="admin/resource/memory-constraints.yaml" >}}
@@ -98,30 +104,31 @@ file for the LimitRange, they were created automatically.
```
-现在,只要在 constraints-mem-example 命名空间中创建容器,Kubernetes 就会执行下面的步骤:
+现在,每当在 constraints-mem-example 命名空间中创建 Pod 时,Kubernetes 就会执行下面的步骤:
-* 如果 Container 未指定自己的内存请求和限制,将为它指定默认的内存请求和限制。
+* 如果 Pod 中的任何容器未声明自己的内存请求和限制,控制面将为该容器设置默认的内存请求和限制。
-* 验证 Container 的内存请求是否大于或等于500 MiB。
+* 确保该 Pod 中的每个容器的内存请求至少 500 MiB。
-* 验证 Container 的内存限制是否小于或等于1 GiB。
+* 确保该 Pod 中每个容器内存请求不大于 1 GiB。
-这里给出了包含一个 Container 的 Pod 配置文件。Container 声明了 600 MiB 的内存请求和
-800 MiB 的内存限制, 这些满足了 LimitRange 施加的最小和最大内存约束。
+以下为包含一个容器的 Pod 清单。该容器声明了 600 MiB 的内存请求和 800 MiB 的内存限制,
+这些满足了 LimitRange 施加的最小和最大内存约束。
{{< codenew file="admin/resource/memory-constraints-pod.yaml" >}}
@@ -135,9 +142,9 @@ kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod.y
```
-确认下 Pod 中的容器在运行:
+确认 Pod 正在运行,并且其容器处于健康状态:
```shell
kubectl get pod constraints-mem-demo --namespace=constraints-mem-example
@@ -153,10 +160,12 @@ kubectl get pod constraints-mem-demo --output=yaml --namespace=constraints-mem-e
```
-输出结果显示容器的内存请求为600 MiB,内存限制为800 MiB。这些满足了 LimitRange 设定的限制范围。
+输出结果显示该 Pod 的容器的内存请求为 600 MiB,内存限制为 800 MiB。
+这些满足这个命名空间中 LimitRange 设定的限制范围。
```yaml
resources:
@@ -178,12 +187,12 @@ kubectl delete pod constraints-mem-demo --namespace=constraints-mem-example
## 尝试创建一个超过最大内存限制的 Pod
-这里给出了包含一个容器的 Pod 的配置文件。容器声明了800 MiB 的内存请求和1.5 GiB 的内存限制。
+以下为包含一个容器的 Pod 的清单。这个容器声明了 800 MiB 的内存请求和 1.5 GiB 的内存限制。
{{< codenew file="admin/resource/memory-constraints-pod-2.yaml" >}}
@@ -197,10 +206,10 @@ kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-2
```
-输出结果显示 Pod 没有创建成功,因为容器声明的内存限制太大了:
+输出结果显示 Pod 没有创建成功,因为它定义了一个容器的内存请求超过了允许的值。
```
Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-2.yaml":
@@ -210,12 +219,12 @@ pods "constraints-mem-demo-2" is forbidden: maximum memory usage per Container i
## 尝试创建一个不满足最小内存请求的 Pod
-这里给出了包含一个容器的 Pod 的配置文件。容器声明了100 MiB 的内存请求和800 MiB 的内存限制。
+以下为只有一个容器的 Pod 的清单。这个容器声明了 100 MiB 的内存请求和 800 MiB 的内存限制。
{{< codenew file="admin/resource/memory-constraints-pod-3.yaml" >}}
@@ -229,10 +238,10 @@ kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-3
```
-输出结果显示 Pod 没有创建成功,因为容器声明的内存请求太小了:
+输出结果显示 Pod 没有创建成功,因为它定义了一个容器的内存请求小于强制要求的最小值:
```
Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-3.yaml":
@@ -242,12 +251,12 @@ pods "constraints-mem-demo-3" is forbidden: minimum memory usage per Container i
## 创建一个没有声明内存请求和限制的 Pod
-这里给出了包含一个容器的 Pod 的配置文件。容器没有声明内存请求,也没有声明内存限制。
+以下为只有一个容器的 Pod 清单。该容器没有声明内存请求,也没有声明内存限制。
{{< codenew file="admin/resource/memory-constraints-pod-4.yaml" >}}
@@ -265,15 +274,15 @@ View detailed information about the Pod:
-->
查看 Pod 详情:
-```
+```shell
kubectl get pod constraints-mem-demo-4 --namespace=constraints-mem-example --output=yaml
```
-输出结果显示 Pod 的内存请求为1 GiB,内存限制为1 GiB。容器怎样获得哪些数值呢?
+输出结果显示 Pod 的唯一容器内存请求为 1 GiB,内存限制为 1 GiB。容器怎样获得那些数值呢?
```
resources:
@@ -284,15 +293,33 @@ resources:
```
-因为你的容器没有声明自己的内存请求和限制,它从 LimitRange 那里获得了
-[默认的内存请求和限制](/zh/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)。
+因为你的 Pod 没有为容器声明任何内存请求和限制,集群会从 LimitRange
+获取[默认的内存请求和限制](/zh/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)。
+ 应用于容器。
+这意味着 Pod 的定义会显示这些值。你可以通过 `kubectl describe` 查看:
+
+```shell
+# 查看输出结果中的 "Requests:" 的值
+kubectl describe pod constraints-mem-demo-4 --namespace=constraints-mem-example
+```
+
+
-此时,你的容器可能运行起来也可能没有运行起来。
-回想一下我们本次任务的先决条件是你的每个节点都至少有1 GiB 的内存。
-如果你的每个节点都只有1 GiB 的内存,那将没有一个节点拥有足够的可分配内存来满足1 GiB 的内存请求。
+此时,你的 Pod 可能已经运行起来也可能没有运行起来。
+回想一下我们本次任务的先决条件是你的每个节点都至少有 1 GiB 的内存。
+如果你的每个节点都只有 1 GiB 的内存,那将没有一个节点拥有足够的可分配内存来满足 1 GiB 的内存请求。
删除你的 Pod:
-```
+```shell
kubectl delete pod constraints-mem-demo-4 --namespace=constraints-mem-example
```
@@ -331,18 +358,18 @@ LimitRange 为命名空间设定的最小和最大内存限制只有在 Pod 创
As a cluster administrator, you might want to impose restrictions on the amount of memory that Pods can use.
For example:
-* Each Node in a cluster has 2 GB of memory. You do not want to accept any Pod that requests
- more than 2 GB of memory, because no Node in the cluster can support the request.
+* Each Node in a cluster has 2 GiB of memory. You do not want to accept any Pod that requests
+more than 2 GiB of memory, because no Node in the cluster can support the request.
* A cluster is shared by your production and development departments.
- You want to allow production workloads to consume up to 8 GB of memory, but
- you want development workloads to be limited to 512 MB. You create separate namespaces
+You want to allow production workloads to consume up to 8 GiB of memory, but
+you want development workloads to be limited to 512 MiB. You create separate namespaces
for production and development, and you apply memory constraints to each namespace.
-->
作为集群管理员,你可能想规定 Pod 可以使用的内存总量限制。例如:
-* 集群的每个节点有 2 GB 内存。你不想接受任何请求超过 2 GB 的 Pod,因为集群中没有节点可以满足。
-* 集群由生产部门和开发部门共享。你希望允许产品部门的负载最多耗用 8 GB 内存,
+* 集群的每个节点有 2 GiB 内存。你不想接受任何请求超过 2 GiB 的 Pod,因为集群中没有节点可以满足。
+* 集群由生产部门和开发部门共享。你希望允许产品部门的负载最多耗用 8 GiB 内存,
但是开发部门的负载最多可使用 512 MiB。
这时,你可以为产品部门和开发部门分别创建名字空间,并为各个名字空间设置内存约束。
diff --git a/content/zh/docs/tasks/administer-cluster/manage-resources/memory-default-namespace.md b/content/zh/docs/tasks/administer-cluster/manage-resources/memory-default-namespace.md
index 2a1345364c..a88e74255d 100644
--- a/content/zh/docs/tasks/administer-cluster/manage-resources/memory-default-namespace.md
+++ b/content/zh/docs/tasks/administer-cluster/manage-resources/memory-default-namespace.md
@@ -2,35 +2,55 @@
title: 为命名空间配置默认的内存请求和限制
content_type: task
weight: 10
+description: >-
+ 为命名空间定义默认的内存资源限制,在该命名空间中每个新建的 Pod 都会被配置上内存资源限制。
---
+本章介绍如何为{{< glossary_tooltip text="命名空间" term_id="namespace" >}}配置默认的内存请求和限制。
+
+一个 Kubernetes 集群可被划分为多个命名空间。
+如果你在具有默认内存[限制](/zh/docs/concepts/configuration/manage-resources-containers/#requests-and-limits)
+的命名空间内尝试创建一个 Pod,并且这个 Pod 中的容器没有声明自己的内存资源限制,
+那么{{< glossary_tooltip text="控制面" term_id="control-plane" >}}会为该容器设定默认的内存限制。
-本文介绍怎样给命名空间配置默认的内存请求和限制。
-如果在一个有默认内存限制的命名空间创建容器,该容器没有声明自己的内存限制时,
-将会被指定默认内存限制。
Kubernetes 还为某些情况指定了默认的内存请求,本章后面会进行介绍。
## {{% heading "prerequisites" %}}
-{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+{{< include "task-tutorial-prereqs.md" >}}
+在你的集群里你必须要有创建命名空间的权限。
+
你的集群中的每个节点必须至少有 2 GiB 的内存。
@@ -52,12 +72,14 @@ kubectl create namespace default-mem-example
## 创建 LimitRange 和 Pod
-这里给出了一个限制范围对象的配置文件。该配置声明了一个默认的内存请求和一个默认的内存限制。
+以下为 {{< glossary_tooltip text="LimitRange" term_id="limitrange" >}} 的示例清单。
+清单中声明了默认的内存请求和默认的内存限制。
{{< codenew file="admin/resource/memory-defaults.yaml" >}}
@@ -71,19 +93,20 @@ kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults.yaml --n
```
-现在,如果在 default-mem-example 命名空间创建容器,并且该容器没有声明自己的内存请求和限制值,
-它将被指定默认的内存请求 256 MiB 和默认的内存限制 512 MiB。
+现在如果你在 default-mem-example 命名空间中创建一个 Pod,
+并且该 Pod 中所有容器都没有声明自己的内存请求和内存限制,
+{{< glossary_tooltip text="控制面" term_id="control-plane" >}}
+会将内存的默认请求值 256MiB 和默认限制值 512MiB 应用到 Pod 上。
-下面是具有一个容器的 Pod 的配置文件。
-容器未指定内存请求和限制。
+以下为只包含一个容器的 Pod 的清单。该容器没有声明内存请求和限制。
{{< codenew file="admin/resource/memory-defaults-pod.yaml" >}}
@@ -106,7 +129,7 @@ kubectl get pod default-mem-demo --output=yaml --namespace=default-mem-example
```
输出内容显示该 Pod 的容器有 256 MiB 的内存请求和 512 MiB 的内存限制。
@@ -134,14 +157,14 @@ kubectl delete pod default-mem-demo --namespace=default-mem-example
```
## 声明容器的限制而不声明它的请求会怎么样?
-这里给出了包含一个容器的 Pod 的配置文件。该容器声明了内存限制,而没有声明内存请求:
+以下为只包含一个容器的 Pod 的清单。该容器声明了内存限制,而没有声明内存请求。
{{< codenew file="admin/resource/memory-defaults-pod-2.yaml" >}}
@@ -164,8 +187,8 @@ kubectl get pod default-mem-demo-2 --output=yaml --namespace=default-mem-example
```
输出结果显示容器的内存请求被设置为它的内存限制相同的值。注意该容器没有被指定默认的内存请求值 256MiB。
@@ -178,15 +201,15 @@ resources:
```
## 声明容器的内存请求而不声明内存限制会怎么样?
-这里给出了一个包含一个容器的 Pod 的配置文件。该容器声明了内存请求,但没有内存限制:
+以下为只包含一个容器的 Pod 的清单。该容器声明了内存请求,但没有内存限制:
{{< codenew file="admin/resource/memory-defaults-pod-3.yaml" >}}
@@ -209,12 +232,12 @@ kubectl get pod default-mem-demo-3 --output=yaml --namespace=default-mem-example
```
-输出结果显示该容器的内存请求被设置为了容器配置文件中声明的数值。
-容器的内存限制被设置为 512MiB,即命名空间的默认内存限制。
+输出结果显示所创建的 Pod 中,容器的内存请求为 Pod 清单中声明的值。
+然而同一容器的内存限制被设置为 512MiB,此值是该命名空间的默认内存限制值。
```
resources:
@@ -227,27 +250,45 @@ resources:
## 设置默认内存限制和请求的动机
-如果你的命名空间有资源配额,那么默认内存限制是很有帮助的。
-下面是一个例子,通过资源配额为命名空间设置两项约束:
+如果你的命名空间设置了内存 {{< glossary_tooltip text="资源配额" term_id="resource-quota" >}},
+那么为内存限制设置一个默认值会很有帮助。
+以下是内存资源配额对命名空间的施加的三条限制:
+
+* 命名空间中运行的每个 Pod 中的容器都必须有内存限制。
+ (如果为 Pod 中的每个容器声明了内存限制,
+ Kubernetes 可以通过将其容器的内存限制相加推断出 Pod 级别的内存限制)。
+
+* 内存限制用来在 Pod 被调度到的节点上执行资源预留。
+ 预留给命名空间中所有 Pod 使用的内存总量不能超过规定的限制。
+
+* 命名空间中所有 Pod 实际使用的内存总量也不能超过规定的限制。
-* 运行在命名空间中的每个容器必须有自己的内存限制。
-* 命名空间中所有容器的内存使用量之和不能超过声明的限制值。
+When you add a LimitRange:
-
-如果一个容器没有声明自己的内存限制,会被指定默认限制,然后它才会被允许在限定了配额的命名空间中运行。
+当你添加 LimitRange 时:
+
+如果该命名空间中的任何 Pod 的容器未指定内存限制,
+控制面将默认内存限制应用于该容器,
+这样 Pod 可以在受到内存 ResourceQuota 限制的命名空间中运行。
-本文介绍怎样为命名空间设置容器可用的内存和 CPU 总量。你可以通过
-[ResourceQuota](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcequota-v1-core)
+本文介绍如何为{{< glossary_tooltip text="命名空间" term_id="namespace" >}}下运行的所有 Pod 设置总的内存和 CPU 配额。
+你可以通过使用
+[ResourceQuota](/docs/reference/kubernetes-api/policy-resources/resource-quota-v1/)
对象设置配额.
## {{% heading "prerequisites" %}}
-{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+{{< include "task-tutorial-prereqs.md" >}}
+在你的集群里你必须要有创建命名空间的权限。
+
集群中每个节点至少有 1 GiB 的内存。
@@ -51,11 +61,11 @@ kubectl create namespace quota-mem-cpu-example
## 创建 ResourceQuota
-这里给出一个 ResourceQuota 对象的配置文件:
+下面是 ResourceQuota 的示例清单:
{{< codenew file="admin/resource/quota-mem-cpu.yaml" >}}
@@ -80,28 +90,33 @@ kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --outpu
ResourceQuota 在 quota-mem-cpu-example 命名空间中设置了如下要求:
-* 每个容器必须有内存请求和限制,以及 CPU 请求和限制。
-* 所有容器的内存请求总和不能超过1 GiB。
-* 所有容器的内存限制总和不能超过2 GiB。
-* 所有容器的 CPU 请求总和不能超过1 cpu。
-* 所有容器的 CPU 限制总和不能超过2 cpu。
+* 在该命名空间中的每个 Pod 的所有容器都必须要有内存请求和限制,以及 CPU 请求和限制。
+* 在该命名空间中所有 Pod 的内存请求总和不能超过 1 GiB。
+* 在该命名空间中所有 Pod 的内存限制总和不能超过 2 GiB。
+* 在该命名空间中所有 Pod 的 CPU 请求总和不能超过 1 cpu。
+* 在该命名空间中所有 Pod 的 CPU 限制总和不能超过 2 cpu。
+请阅读 [CPU 的含义](/zh/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu)
+理解 "1 CPU" 在 Kubernetes 中的含义。
## 创建 Pod
-这里给出 Pod 的配置文件:
+以下是 Pod 的示例清单:
{{< codenew file="admin/resource/quota-mem-cpu-pod.yaml" >}}
@@ -115,11 +130,11 @@ kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu-pod.yaml -
```
-检查下 Pod 中的容器在运行:
+确认 Pod 正在运行,并且其容器处于健康状态:
-```
+```shell
kubectl get pod quota-mem-cpu-demo --namespace=quota-mem-cpu-example
```
@@ -128,7 +143,7 @@ Once again, view detailed information about the ResourceQuota:
-->
再查看 ResourceQuota 的详情:
-```
+```shell
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
```
@@ -153,27 +168,38 @@ status:
requests.memory: 600Mi
```
+
+如果有 `jq` 工具的话,你可以通过(使用 [JSONPath](/zh/docs/reference/kubectl/jsonpath/))
+直接查询 `used` 字段的值,并且输出整齐的 JSON 格式。
+
+```shell
+kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example -o jsonpath='{ .status.used }' | jq .
+```
+
## 尝试创建第二个 Pod
-这里给出了第二个 Pod 的配置文件:
+以下为第二个 Pod 的清单:
{{< codenew file="admin/resource/quota-mem-cpu-pod-2.yaml" >}}
-配置文件中,你可以看到 Pod 的内存请求为 700 MiB。
-请注意新的内存请求与已经使用的内存请求只和超过了内存请求的配额。
+在清单中,你可以看到 Pod 的内存请求为 700 MiB。
+请注意新的内存请求与已经使用的内存请求之和超过了内存请求的配额:
600 MiB + 700 MiB > 1 GiB。
尝试创建 Pod:
@@ -198,19 +224,20 @@ requested: requests.memory=700Mi,used: requests.memory=600Mi, limited: requests.
## Discussion
As you have seen in this exercise, you can use a ResourceQuota to restrict
-the memory request total for all Containers running in a namespace.
+the memory request total for all Pods running in a namespace.
You can also restrict the totals for memory limit, cpu request, and cpu limit.
-If you want to restrict individual Containers, instead of totals for all Containers, use a
-[LimitRange](/docs/tasks/administer-cluster/memory-constraint-namespace/).
+Instead of managing total resource use within a namespace, you might want to restrict
+individual Pods, or the containers in those Pods. To achieve that kind of limiting, use a
+[LimitRange](/docs/concepts/policy/limit-range/).
-->
## 讨论
-如你在本练习中所见,你可以用 ResourceQuota 限制命名空间中所有容器的内存请求总量。
+如你在本练习中所见,你可以用 ResourceQuota 限制命名空间中所有 Pod 的内存请求总量。
同样你也可以限制内存限制总量、CPU 请求总量、CPU 限制总量。
-如果你想对单个容器而不是所有容器进行限制,就请使用
-[LimitRange](/zh/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace/)。
+除了可以管理命名空间资源使用的总和,如果你想限制单个 Pod,或者限制这些 Pod 中的容器资源,
+可以使用 [LimitRange](/zh/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace/) 实现这类的功能。
+
-本文主要描述如何配置一个命名空间下可运行的 Pod 个数配额。
-你可以使用
-[ResourceQuota](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcequota-v1-core)
+本文主要介绍如何在{{< glossary_tooltip text="命名空间" term_id="namespace" >}}中设置可运行 Pod 总数的配额。
+你可以通过使用
+[ResourceQuota](/zh/docs/reference/kubernetes-api/policy-resources/resource-quota-v1/)
对象来配置配额。
## {{% heading "prerequisites" %}}
-{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+{{< include "task-tutorial-prereqs.md" >}}
+
+
+在你的集群里你必须要有创建命名空间的权限。
@@ -40,11 +55,11 @@ kubectl create namespace quota-pod-example
## 创建 ResourceQuota
-下面是一个 ResourceQuota 的配置文件:
+下面是 ResourceQuota 的示例清单:
{{< codenew file="admin/resource/quota-pod.yaml" >}}
@@ -83,18 +98,20 @@ status:
```
-下面是一个 Deployment 的配置文件:
+下面是一个 {{< glossary_tooltip term_id="deployment" >}} 的示例清单:
{{< codenew file="admin/resource/quota-pod-deployment.yaml" >}}
-在配置文件中,`replicas: 3` 告诉 Kubernetes 尝试创建三个 Pods,且运行相同的应用。
+在清单中,`replicas: 3` 告诉 Kubernetes 尝试创建三个 Pods,
+且运行相同的应用。
创建这个 Deployment:
@@ -113,7 +130,7 @@ kubectl get deployment pod-quota-demo --namespace=quota-pod-example --output=yam
从输出的信息我们可以看到,尽管尝试创建三个 Pod,但是由于配额的限制,只有两个 Pod 能被成功创建。
@@ -125,11 +142,24 @@ spec:
status:
availableReplicas: 2
...
-lastUpdateTime: 2017-07-07T20:57:05Z
+lastUpdateTime: 2021-04-02T20:57:05Z
message: 'unable to create pods: pods "pod-quota-demo-1650323038-" is forbidden:
exceeded quota: pod-demo, requested: pods=1, used: pods=2, limited: pods=2'
```
+
+### 资源的选择
+在此任务中,你定义了一个限制 Pod 总数的 ResourceQuota,
+你也可以限制其他类型对象的总数。例如,
+你可以限制在一个命名空间中可以创建的 {{< glossary_tooltip text="CronJobs" term_id="cronjob" >}} 的数量。
+
+Dockershim 在 Kubernetes v1.24 版本已经被移除。
+如果你集群内是通过 dockershim 使用 Docker 作为容器运行时,并希望 Kubernetes 升级到 v1.24,
+建议你迁移到其他容器运行时或使用其他方法以获得 Docker 引擎支持。
+
+
+你的集群中可以有不止一种类型的节点,尽管这不是常见的情况。
+
+下面这些任务可以帮助你完成迁移:
+
+* [检查弃用 Dockershim 对你的影响](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you/)
+* [dockershim 迁移](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/)
+* [从 dockershim 迁移遥测和安全代理](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents/)
+
+
+## 下一步
+
+* 查看[容器运行时](/zh/docs/setup/production-environment/container-runtimes/)了解可选的容器运行时。
+* [GitHub 问题](https://github.com/kubernetes/kubernetes/issues/106917)跟踪有关 dockershim 的弃用和删除的讨论。
+* 如果你发现与 dockershim 迁移相关的缺陷或其他技术问题,
+ 可以在 Kubernetes 项目[报告问题](https://github.com/kubernetes/kubernetes/issues/new/choose)。
+
\ No newline at end of file
diff --git a/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md b/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md
index 0b281a2191..1690588b64 100644
--- a/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md
+++ b/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd.md
@@ -1,6 +1,8 @@
+---
title: 将节点上的容器运行时从 Docker Engine 改为 containerd
weight: 8
content_type: task
+---
本任务给出将容器运行时从 Docker 改为 containerd 所需的步骤。
此任务适用于运行 1.23 或更早版本 Kubernetes 的集群操作人员。
@@ -22,27 +27,32 @@ This task outlines the steps needed to update your container runtime to containe
{{% thirdparty-content %}}
安装 containerd。进一步的信息可参见
[containerd 的安装文档](https://containerd.io/docs/getting-started/)。
-关于一些特定的环境准备工作,请参阅[此页面](/zh/docs/setup/production-environment/container-runtimes/#containerd)。
+关于一些特定的环境准备工作,请遵循 [containerd 指南](/zh/docs/setup/production-environment/container-runtimes/#containerd)。
## 腾空节点 {#drain-the-node}
-```
-# 将 替换为你所要腾空的节点的名称
+```shell
kubectl drain --ignore-daemonsets
```
+将 `` 替换为你所要腾空的节点的名称
+
@@ -56,27 +66,29 @@ systemctl disable docker.service --now
## 安装 Containerd {#install-containerd}
-此[页面](/zh/docs/setup/production-environment/container-runtimes/#containerd)
-包含安装 containerd 的详细步骤。
+遵循此[指南](/zh/docs/setup/production-environment/container-runtimes/#containerd)
+了解安装 containerd 的详细步骤。
{{< tabs name="tab-cri-containerd-installation" >}}
{{% tab name="Linux" %}}
1. 从官方的 Docker 仓库安装 `containerd.io` 包。关于为你所使用的 Linux 发行版来设置
Docker 仓库,以及安装 `containerd.io` 包的详细说明,可参见
- [Install Docker Engine](https://docs.docker.com/engine/install/#server)。
+ [开始使用 containerd](https://github.com/containerd/containerd/blob/main/docs/getting-started.md)。
2. 配置 containerd:
@@ -86,19 +98,19 @@ Instructions for setting up the Docker repository for your respective Linux dist
```
3. 重启 containerd:
```shell
sudo systemctl restart containerd
```
-
{{% /tab %}}
{{% tab name="Windows (PowerShell)" %}}
启动一个 Powershell 会话,将 `$Version` 设置为期望的版本(例如:`$Version="1.4.3"`),
之后运行下面的命令:
@@ -148,7 +160,9 @@ Start a Powershell session, set `$Version` to the desired version (ex: `$Version
## 配置 kubelet 使用 containerd 作为其容器运行时
@@ -158,21 +172,19 @@ Edit the file `/var/lib/kubelet/kubeadm-flags.env` and add the containerd runtim
对于使用 kubeadm 的用户,可以考虑下面的问题:
`kubeadm` 工具将每个主机的 CRI 套接字保存在该主机对应的 Node 对象的注解中。
+使用 `kubeadm` 的用户应该知道,`kubeadm` 工具将每个主机的 CRI 套接字保存在该主机对应的 Node 对象的注解中。
+要更改这一注解信息,你可以在一台包含 kubeadm `/etc/kubernetes/admin.conf` 文件的机器上执行以下命令:
-
-要更改这一注解信息,你必须执行下面的操作:
-
-在一台包含 `/etc/kubernetes/admin.conf` 文件的机器上,执行
-`kubectl edit no <节点名称>`。
+```shell
+kubectl edit no
+```
@@ -220,7 +232,7 @@ Run `kubectl get nodes -o wide` and containerd appears as the runtime for the no
{{% thirdparty-content %}}
最后,在一切顺利时删除 Docker。
diff --git a/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you.md b/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you.md
similarity index 87%
rename from content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you.md
rename to content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you.md
index 58363779ac..d63468bf80 100644
--- a/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-deprecation-affects-you.md
+++ b/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/check-if-dockershim-removal-affects-you.md
@@ -1,5 +1,5 @@
---
-title: 检查弃用 Dockershim 对你的影响
+title: 检查弃用 Dockershim 是否对你有影响
content_type: task
weight: 20
---
@@ -16,16 +16,18 @@ weight: 20
+
Kubernetes 的 `dockershim` 组件使得你可以把 Docker 用作 Kubernetes 的
{{< glossary_tooltip text="容器运行时" term_id="container-runtime" >}}。
-在 Kubernetes v1.20 版本中,内建组件 `dockershim` 被弃用。
+在 Kubernetes v1.24 版本中,内建组件 `dockershim` 被移除。
+
本页讲解你的集群把 Docker 用作容器运行时的运作机制,
并提供使用 `dockershim` 时,它所扮演角色的详细信息,
@@ -64,6 +66,18 @@ dependency on Docker:
- SSH to nodes to troubleshoot;
- Node startup scripts;
- Monitoring and security agents installed on nodes directly.
+-->
+1. 确认没有特权 Pod 执行 Docker 命令(如 `docker ps`)、重新启动 Docker
+ 服务(如 `systemctl restart docker.service`)或修改 Docker 配置文件
+ `/etc/docker/daemon.json`。
+2. 检查 Docker 配置文件(如 `/etc/docker/daemon.json`)中容器镜像仓库的镜像(mirror)站点设置。
+ 这些配置通常需要针对不同容器运行时来重新设置。
+3. 检查确保在 Kubernetes 基础设施之外的节点上运行的脚本和应用程序没有执行 Docker 命令。
+ 可能的情况有:
+ - SSH 到节点排查故障;
+ - 节点启动脚本;
+ - 直接安装在节点上的监控和安全代理。
+
-1. 确认没有特权 Pod 执行 Docker 命令(如 `docker ps`)、重新启动 Docker
- 服务(如 `systemctl restart docker.service`)或修改 Docker 配置文件
- `/etc/docker/daemon.json`。
-2. 检查 Docker 配置文件(如 `/etc/docker/daemon.json`)中容器镜像仓库的镜像(mirror)站点设置。
- 这些配置通常需要针对不同容器运行时来重新设置。
-3. 检查确保在 Kubernetes 基础设施之外的节点上运行的脚本和应用程序没有执行 Docker 命令。
- 可能的情况如:
- - SSH 到节点排查故障;
- - 节点启动脚本;
- - 直接安装在节点上的监控和安全代理。
-4. 检查执行上述特权操作的第三方工具。详细操作请参考
- [从 dockershim 迁移遥测和安全代理](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents)。
+4. 检查执行上述特权操作的第三方工具。
+ 详细操作请参考[从 dockershim 迁移遥测和安全代理](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents)。
5. 确认没有对 dockershim 行为的间接依赖。这是一种极端情况,不太可能影响你的应用。
一些工具很可能被配置为使用了 Docker 特性,比如,基于特定指标发警报,
或者在故障排查指令的一个环节中搜索特定的日志信息。
@@ -103,7 +107,8 @@ and scheduling of Pods; on each node, the {{< glossary_tooltip text="kubelet" te
uses the container runtime interface as an abstraction so that you can use any compatible
container runtime.
-->
-[容器运行时](/zh/docs/concepts/containers/#container-runtimes)是一个软件,用来运行组成 Kubernetes Pod 的容器。
+[容器运行时](/zh/docs/concepts/containers/#container-runtimes)是一个软件,
+用来运行组成 Kubernetes Pod 的容器。
Kubernetes 负责编排和调度 Pod;在每一个节点上,{{< glossary_tooltip text="kubelet" term_id="kubelet" >}}
使用抽象的容器运行时接口,所以你可以任意选用兼容的容器运行时。
@@ -116,8 +121,8 @@ adapter component, `dockershim`. The dockershim adapter allows the kubelet to in
if Docker were a CRI compatible runtime.
-->
在早期版本中,Kubernetes 提供的兼容性支持一个容器运行时:Docker。
-在 Kubernetes 发展历史中,集群运营人员希望采用更多的容器运行时。
-于是 CRI 被设计出来满足这类灵活性需要 - 而 kubelet 亦开始支持 CRI。
+在 Kubernetes 后来的发展历史中,集群运营人员希望采用别的容器运行时。
+于是 CRI 被设计出来满足这类灵活性需求 - 而 kubelet 亦开始支持 CRI。
然而,因为 Docker 在 CRI 规范创建之前就已经存在,Kubernetes 就创建了一个适配器组件 `dockershim`。
dockershim 适配器允许 kubelet 与 Docker 交互,就好像 Docker 是一个 CRI 兼容的运行时一样。
@@ -137,7 +142,7 @@ now, since containers schedule directly with the container runtime, they are not
So any Docker tooling or fancy UI you might have used
before to check on these containers is no longer available.
-->
-切换到容器运行时 Containerd 可以消除掉中间环节。
+切换到 Containerd 容器运行时可以消除掉中间环节。
所有相同的容器都可由 Containerd 这类容器运行时来运行。
但是现在,由于直接用容器运行时调度容器,它们对 Docker 是不可见的。
因此,你以前用来检查这些容器的 Docker 工具或漂亮的 UI 都不再可用。
@@ -150,12 +155,12 @@ or execute something inside container using `docker exec`.
你不能再使用 `docker ps` 或 `docker inspect` 命令来获取容器信息。
由于你不能列出容器,因此你不能获取日志、停止容器,甚至不能通过 `docker exec` 在容器中执行命令。
+{{< note >}}
-{{< note >}}
如果你在用 Kubernetes 运行工作负载,最好通过 Kubernetes API 停止容器,
而不是通过容器运行时来停止它们
(此建议适用于所有容器运行时,不仅仅是针对 Docker)。
@@ -171,3 +176,13 @@ by Kubernetes.
但用 Docker 创建、下载的镜像,对于容器运行时和 Kubernetes,均不可见。
为了在 Kubernetes 中使用,需要把镜像推送(push)到某镜像仓库。
+## {{% heading "whatsnext" %}}
+
+
+- 阅读[从 dockershim 迁移](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/),
+ 以了解你的下一步工作。
+- 阅读[dockershim 弃用常见问题解答](/zh/blog/2020/12/02/dockershim-faq/)文章,了解更多信息。
+
diff --git a/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use.md b/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use.md
index 7a6f3c8df9..4e1380322b 100644
--- a/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use.md
+++ b/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use.md
@@ -44,7 +44,7 @@ Install and configure `kubectl`. See [Install Tools](/docs/tasks/tools/#kubectl)
Use `kubectl` to fetch and show node information:
-->
-## 查明节点所使用的容器运行时
+## 查明节点所使用的容器运行时 {#find-out-the-container-runtime-used-on-a-node}
使用 `kubectl` 来读取并显示节点信息:
@@ -55,16 +55,34 @@ kubectl get nodes -o wide
输出如下面所示。`CONTAINER-RUNTIME` 列给出容器运行时及其版本。
+对于 Docker Engine,输出类似于:
```none
-# For dockershim
NAME STATUS VERSION CONTAINER-RUNTIME
node-1 Ready v1.16.15 docker://19.3.1
node-2 Ready v1.16.15 docker://19.3.1
node-3 Ready v1.16.15 docker://19.3.1
```
+
+
+如果你的容器运行时显示为 Docker Engine,你仍然可能不会被 1.24 中 dockershim 的移除所影响。
+通过[检查运行时端点](#which-endpoint),可以查看你是否在使用 dockershim。
+如果你没有使用 dockershim,你就不会被影响。
+看下是否是使用的 dockershim,如何是 dockershim 则会受到在 Kubernetes 1.24 中移除 dockershim 的影响。
+反之则不会受到影响。
+
+对于 containerd,输出类似于这样:
```none
# For containerd
@@ -76,8 +94,93 @@ node-3 Ready v1.19.6 containerd://1.4.1
你可以在[容器运行时](/zh/docs/setup/production-environment/container-runtimes/)
页面找到与容器运行时相关的更多信息。
+
+## 检查当前使用的运行时端点 {#which-endpoint}
+
+
+
+容器运行时使用 Unix Socket 与 kubelet 通信,这一通信使用基于 gRPC 框架的
+[CRI 协议](/zh/docs/concepts/architecture/cri/)。kubelet 扮演客户端,运行时扮演服务器端。
+在某些情况下,你可能想知道你的节点使用的是哪个 socket。
+如若集群是 Kubernetes 1.24 及以后的版本,
+或许你想知道当前运行时是否是使用 dockershim 的 Docker Engine。
+
+
+
+{{}}
+如果你的节点在通过 `cri-dockerd` 使用 Docker Engine,
+那么集群不会受到 Kubernetes 移除 dockershim 的影响。
+{{ }}
+
+
+可以通过检查 kubelet 的参数得知当前使用的是哪个 socket。
+
+
+1. 查看 kubelet 进程的启动命令
+
+ ```
+ tr \\0 ' ' < /proc/"$(pgrep kubelet)"/cmdline
+ ```
+ 如有节点上没有 `tr` 或者 `pgrep`,就需要手动检查 kubelet 的启动命令
+
+
+2. 在命令的输出中,查找 `--container-runtime` 和 `--container-runtime-endpoint` 标志。
+
+ * 如果 Kubernetes 集群版本是 v1.23 或者更早的版本,并且这两个参数不存在,
+ 或者 `container-runtime` 标志值不是 `remote`,则你在通过 dockershim 套接字使用
+ Docker Engine。
+ 或者如果集群使用的 Docker engine 和 dockershim socket,则输出结果中 `--container-runtime` 不是 `remote`,
+ * 如果设置了 `--container-runtime-endpoint` 参数,查看套接字名称即可得知当前使用的运行时。
+ 如若套接字 `unix:///run/containerd/containerd.sock` 是 containerd 的端点。
+
+
+如果你通过 dockershim 来使用 Docker Engine,可在
+[迁移到不同的运行时](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd/)
+找到更多信息。或者,如果你想在 Kubernetes v1.24 及以后的版本仍使用 Docker Engine,
+可以安装 CRI 兼容的适配器实现,如 [`cri-dockerd`](https://github.com/Mirantis/cri-dockerd)。
+[`cri-dockerd`](https://github.com/Mirantis/cri-dockerd)。
\ No newline at end of file
diff --git a/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd.md b/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd.md
new file mode 100644
index 0000000000..43a80ef2df
--- /dev/null
+++ b/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd.md
@@ -0,0 +1,233 @@
+---
+title: 将 Docker Engine 节点从 dockershim 迁移到 cri-dockerd
+weight: 9
+content_type: task
+---
+
+
+
+{{% thirdparty-content %}}
+
+
+本页面为你展示如何迁移你的 Docker Engine 节点,使之使用 `cri-dockerd` 而不是 dockershim。
+在以下场景中,你可以遵从这里的步骤执行操作:
+
+* 你期望不再使用 dockershim,但仍然使用 Docker Engine 来在 Kubernetes 中运行容器。
+* 你希望升级到 Kubernetes v{{< skew currentVersion >}} 且你的现有集群依赖于 dockershim,
+ 因此你必须放弃 dockershim,而 `cri-dockerd` 是你的一种选项。
+
+要进一步了解 dockershim 的移除,请阅读 [FAQ 页面](/zh/dockershim)。
+
+
+## cri-dockerd 是什么? {#what-is-cri-dockerd}
+
+在 Kubernetes v1.24 及更早版本中,你可以在 Kubernetes 中使用 Docker Engine,
+依赖于一个称作 _dockershim_ 的内置 Kubernetes 组件。
+dockershim 组件在 Kubernetes v1.24 发行版本中已被移除;不过,一种来自第三方的替代品,
+`cri-dockerd` 是可供使用的。`cri-dockerd` 适配器允许你通过
+{{}}
+来使用 Docker Engine。
+
+{{}}
+
+如果你已经在使用 `cri-dockerd`,那么你不会被 dockershim 的移除影响到。
+在开始之前,[检查你的节点是否在使用 dockershim](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use/)。
+{{ }}
+
+
+如果你想要迁移到 `cri-dockerd` 以便继续使用 Docker Engine 作为你的容器运行时,
+你需要在所有被影响的节点上执行以下操作:
+
+1. 安装 `cri-dockerd`;
+1. 隔离(Cordon)并腾空(Drain)该节点;
+1. 配置 kubelet 使用 `cri-dockerd`;
+1. 重新启动 kubelet;
+1. 验证节点处于健康状态。
+
+
+首先在非关键节点上测试这一迁移过程。
+
+你应该针对所有希望迁移到 `cri-dockerd` 的节点执行以下步骤。
+
+## {{% heading "prerequisites" %}}
+
+
+* 安装了 [`cri-dockerd`](https://github.com/mirantis/cri-dockerd#build-and-install)
+ 并且该服务已经在各节点上启动;
+* 一个[网络插件](/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/)。
+
+
+## 隔离并腾空节点 {#cordon-and-drain-the-node}
+
+1. 隔离节点,阻止新的 Pod 被调度到节点上:
+
+ ```shell
+ kubectl cordon
+ ```
+
+ 将 `` 替换为节点名称。
+
+
+2. 腾空节点以安全地逐出所有运行中的 Pod:
+
+ ```shell
+ kubectl drain --ignore-daemonsets
+ ```
+
+
+## 配置 kubelet 使用 cri-dockerd {#configure-the-kubelet-to-use-cri-dockerd}
+
+下面的步骤适用于用 kubeadm 工具安装的集群。如果你使用不同的工具,
+你需要使用针对该工具的配置指令来修改 kubelet。
+
+
+1. 在每个被影响的节点上,打开 `/var/lib/kubelet/kubeadm-flags.env` 文件;
+1. 将 `--container-runtime-endpoint` 标志,将其设置为 `unix:///var/run/cri-dockerd.sock`。
+
+
+kubeadm 工具将节点上的套接字存储为控制面上 `Node` 对象的注解。
+要为每个被影响的节点更改此套接字:
+
+
+1. 编辑 `Node` 对象的 YAML 表示:
+
+ ```shell
+ KUBECONFIG=/path/to/admin.conf kubectl edit no
+ ```
+
+ 根据下面的说明执行替换:
+
+ * `/path/to/admin.conf`:指向 kubectl 配置文件 `admin.conf` 的路径;
+ * ``:你要修改的节点的名称。
+
+1. 将 `kubeadm.alpha.kubernetes.io/cri-socket` 标志从
+ `/var/run/dockershim.sock` 更改为 `unix:///var/run/cri-dockerd.sock`;
+1. 保存所作更改。保存时,`Node` 对象被更新
+
+
+
+## 重启 kubelet {#restart-the-kubelet}
+
+```shell
+systemctl restart kubelet
+```
+
+
+## 验证节点处于健康状态 {#verify-that-the-node-is-healthy}
+
+要检查节点是否在使用 `cri-dockerd` 端点,
+按照[找出你所使用的运行时](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/find-out-runtime-you-use/)页面所给的指令操作。
+kubelet 的 `--container-runtime-endpoint` 标志取值应该是 `unix:///var/run/cri-dockerd.sock`。
+
+
+## 解除节点隔离 {#uncordon-the-node}
+
+```shell
+kubectl uncordon
+```
+
+## {{% heading "whatsnext" %}}
+
+
+* 阅读 [dockershim 移除常见问题](/zh/dockershim)。
+* [了解如何从基于 dockershim 的 Docker Engine 迁移到 containerd](/zh/docs/tasks/administer-cluster/migrating-from-dockershim/change-runtime-containerd/)。
+
diff --git a/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents.md b/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents.md
index b22c7d4b67..e36cde5dc1 100644
--- a/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents.md
+++ b/content/zh/docs/tasks/administer-cluster/migrating-from-dockershim/migrating-telemetry-and-security-agents.md
@@ -14,19 +14,11 @@ weight: 70
-在 Kubernetes 1.20 版本中,dockershim 被弃用。
-在博文[弃用 Dockershim 常见问题](/zh/blog/2020/12/02/dockershim-faq/)中,
-你大概已经了解到,大多数应用并没有直接通过运行时来托管容器。
-但是,仍然有大量的遥测和安全代理依赖 docker 来收集容器元数据、日志和指标。
+Kubernetes 对与 Docker Engine 直接集成的支持已被弃用并将被删除。
+大多数应用程序不直接依赖于托管容器的运行时。但是,仍然有大量的遥测和监控代理依赖
+docker 来收集容器元数据、日志和指标。
本文汇总了一些信息和链接:信息用于阐述如何探查这些依赖,链接用于解释如何迁移这些代理去使用通用的工具或其他容器运行。
-为了让代理运行在 Kubernetes 集群中,我们有几种办法。
-代理既可以直接在节点上运行,也可以作为守护进程运行。
+在 Kubernetes 集群中,有几种不同的方式来运行遥测或安全代理。
+一些代理在以 DaemonSet 的形式运行或直接在节点上运行时,直接依赖于 Docker Engine。
-### 为什么遥测代理依赖于 Docker? {#why-do-telemetry-agents-relyon-docker}
+### 为什么有些遥测代理会与 Docker Engine 通信?
-因为历史原因,Kubernetes 建立在 Docker 之上。
-Kubernetes 管理网络和调度,Docker 则在具体的节点上定位并操作容器。
-所以,你可以从 Kubernetes 取得调度相关的元数据,比如 Pod 名称;从 Docker 取得容器状态信息。
-后来,人们开发了更多的运行时来管理容器。
-同时一些项目和 Kubernetes 特性也不断涌现,支持跨多个运行时收集容器状态信息。
+从历史上看,Kubernetes 是专门为与 Docker Engine 一起工作而编写的。
+Kubernetes 负责网络和调度,依靠 Docker Engine
+在节点上启动并运行容器(在 Pod 内)。一些与遥测相关的信息,例如 pod 名称,
+只能从 Kubernetes 组件中获得。其他数据,例如容器指标,不是容器运行时的责任。
+早期遥测代理需要查询容器运行时**和** Kubernetes 以报告准确的信息。
+随着时间的推移,Kubernetes 获得了支持多种运行时的能力,现在支持任何兼容容器运行时接口的运行时。
-一些代理和 Docker 工具紧密绑定。此类代理可以这样运行命令,比如用
+一些代理和 Docker 工具紧密绑定。比如代理会用到
[`docker ps`](https://docs.docker.com/engine/reference/commandline/ps/)
或 [`docker top`](https://docs.docker.com/engine/reference/commandline/top/)
这类命令来列出容器和进程,用
-[docker logs](https://docs.docker.com/engine/reference/commandline/logs/)
+[`docker logs`](https://docs.docker.com/engine/reference/commandline/logs/)
订阅 Docker 的日志。
-但随着 Docker 作为容器运行时被弃用,这些命令将不再工作。
+如果现有集群中的节点使用 Docker Engine,在你切换到其它容器运行时的时候,
+这些命令将不再起作用。
-### 识别依赖于 Docker 的 DaemonSet {#identify-docker-dependency}
+### 识别依赖于 Docker Engine 的 DaemonSet {#identify-docker-dependency}
下面是一个 shell 示例脚本,用于查找包含直接映射 Docker 套接字的挂载点的 Pod。
-你也可以删掉 grep `/var/run/docker.sock` 这一代码片段以查看其它挂载信息。
+你也可以删掉 `grep '/var/run/docker.sock'` 这一代码片段以查看其它挂载信息。
```bash
kubectl get pods --all-namespaces \
diff --git a/content/zh/docs/tasks/administer-cluster/namespaces-walkthrough.md b/content/zh/docs/tasks/administer-cluster/namespaces-walkthrough.md
index c28a918db0..ecb5b3bd3e 100644
--- a/content/zh/docs/tasks/administer-cluster/namespaces-walkthrough.md
+++ b/content/zh/docs/tasks/administer-cluster/namespaces-walkthrough.md
@@ -36,7 +36,7 @@ This example demonstrates how to use Kubernetes namespaces to subdivide your clu
-->
使用多个名字空间是可选的。
-此示例演示了如何使用 Kubernetes 名字空间细分群集。
+此示例演示了如何使用 Kubernetes 名字空间细分集群。
## {{% heading "prerequisites" %}}
diff --git a/content/zh/docs/tasks/administer-cluster/namespaces.md b/content/zh/docs/tasks/administer-cluster/namespaces.md
index 8a55b78cda..a9ba7a4109 100644
--- a/content/zh/docs/tasks/administer-cluster/namespaces.md
+++ b/content/zh/docs/tasks/administer-cluster/namespaces.md
@@ -478,7 +478,7 @@ Use cases include:
1. 作为集群运营者, 我希望能在单个集群上支持多个用户社区。
2. 作为集群运营者,我希望将集群分区的权限委派给这些社区中的受信任用户。
3. 作为集群运营者,我希望能限定每个用户社区可使用的资源量,以限制对使用同一集群的其他用户社区的影响。
-4. 作为群集用户,我希望与我的用户社区相关的资源进行交互,而与其他用户社区在该集群上执行的操作无关。
+4. 作为集群用户,我希望与我的用户社区相关的资源进行交互,而与其他用户社区在该集群上执行的操作无关。
-集群运行后,您可以按照[声明网络策略](/zh/docs/tasks/administer-cluster/declare-network-policy/)
+集群运行后,你可以按照[声明网络策略](/zh/docs/tasks/administer-cluster/declare-network-policy/)
去尝试使用 Kubernetes NetworkPolicy。
diff --git a/content/zh/docs/tasks/administer-cluster/nodelocaldns.md b/content/zh/docs/tasks/administer-cluster/nodelocaldns.md
index b68fd3ed1e..acb02c6cfc 100644
--- a/content/zh/docs/tasks/administer-cluster/nodelocaldns.md
+++ b/content/zh/docs/tasks/administer-cluster/nodelocaldns.md
@@ -11,7 +11,9 @@ content_type: task
-->
+
{{< feature-state for_k8s_version="v1.18" state="stable" >}}
+
@@ -29,10 +31,17 @@ This page provides an overview of NodeLocal DNSCache feature in Kubernetes.
## 引言
NodeLocal DNSCache 通过在集群节点上作为 DaemonSet 运行 DNS 缓存代理来提高集群 DNS 性能。
-在当今的体系结构中,运行在 ClusterFirst DNS 模式下的 Pod 可以连接到 kube-dns `serviceIP` 进行 DNS 查询。
+在当今的体系结构中,运行在 'ClusterFirst' DNS 模式下的 Pod 可以连接到 kube-dns `serviceIP` 进行 DNS 查询。
通过 kube-proxy 添加的 iptables 规则将其转换为 kube-dns/CoreDNS 端点。
借助这种新架构,Pods 将可以访问在同一节点上运行的 DNS 缓存代理,从而避免 iptables DNAT 规则和连接跟踪。
本地缓存代理将查询 kube-dns 服务以获取集群主机名的缓存缺失(默认为 "`cluster.local`" 后缀)。
@@ -43,22 +52,29 @@ NodeLocal DNSCache 通过在集群节点上作为 DaemonSet 运行 DNS 缓存代
## 动机
* 使用当前的 DNS 体系结构,如果没有本地 kube-dns/CoreDNS 实例,则具有最高 DNS QPS
的 Pod 可能必须延伸到另一个节点。
在这种场景下,拥有本地缓存将有助于改善延迟。
* 跳过 iptables DNAT 和连接跟踪将有助于减少
[conntrack 竞争](https://github.com/kubernetes/kubernetes/issues/56903)
并避免 UDP DNS 条目填满 conntrack 表。
* 从本地缓存代理到 kube-dns 服务的连接可以升级为 TCP 。
TCP conntrack 条目将在连接关闭时被删除,相反 UDP 条目必须超时
@@ -66,14 +82,16 @@ Having a local cache will help improve the latency in such scenarios.
`nf_conntrack_udp_timeout` 是 30 秒)。
* 将 DNS 查询从 UDP 升级到 TCP 将减少由于被丢弃的 UDP 包和 DNS 超时而带来的尾部等待时间;
这类延时通常长达 30 秒(3 次重试 + 10 秒超时)。
由于 nodelocal 缓存监听 UDP DNS 查询,应用不需要变更。
* 在节点级别对 DNS 请求的度量和可见性。
@@ -101,8 +119,14 @@ This is the path followed by DNS Queries after NodeLocal DNSCache is enabled:
## Configuration
-->
## 配置
+
{{< note >}}
@@ -117,32 +141,40 @@ This feature can be enabled using the following steps:
可以使用以下步骤启动此功能:
* 根据示例 [`nodelocaldns.yaml`](https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/dns/nodelocaldns/nodelocaldns.yaml)
准备一个清单,把它保存为 `nodelocaldns.yaml`。
+
-* 如果使用 IPv6,在使用 IP:Port 格式的时候需要把 CoreDNS 配置文件里的所有 IPv6 地址用方括号包起来。
+* 如果使用 IPv6,在使用 'IP:Port' 格式的时候需要把 CoreDNS 配置文件里的所有 IPv6 地址用方括号包起来。
如果你使用上述的示例清单,需要把
[配置行 L70](https://github.com/kubernetes/kubernetes/blob/b2ecd1b3a3192fbbe2b9e348e095326f51dc43dd/cluster/addons/dns/nodelocaldns/nodelocaldns.yaml#L70)
- 修改为 `health [__PILLAR__LOCAL__DNS__]:8080`。
+ 修改为: "`health [__PILLAR__LOCAL__DNS__]:8080`"。
+
* 把清单里的变量更改为正确的值:
- ```
+ ```shell
kubedns=`kubectl get svc kube-dns -n kube-system -o jsonpath={.spec.clusterIP}`
domain=
localdns=
@@ -152,15 +184,17 @@ If you are using the sample manifest from the previous point, this will require
NodeLocal DNSCache 选择的本地侦听 IP 地址。
+ `__PILLAR__CLUSTER__DNS__` and `__PILLAR__UPSTREAM__SERVERS__` will be populated by
+ the `node-local-dns` pods.
+ In this mode, the `node-local-dns` pods listen on both the kube-dns service IP
+ as well as ``, so pods can lookup DNS records using either IP address.
+-->
* 如果 kube-proxy 运行在 IPTABLES 模式:
``` bash
@@ -170,44 +204,57 @@ If you are using the sample manifest from the previous point, this will require
node-local-dns Pods 会设置 `__PILLAR__CLUSTER__DNS__` 和 `__PILLAR__UPSTREAM__SERVERS__`。
在此模式下, node-local-dns Pods 会同时侦听 kube-dns 服务的 IP 地址和
`` 的地址,以便 Pods 可以使用其中任何一个 IP 地址来查询 DNS 记录。
-
* 如果 kube-proxy 运行在 IPVS 模式:
``` bash
- sed -i "s/__PILLAR__LOCAL__DNS__/$localdns/g; s/__PILLAR__DNS__DOMAIN__/$domain/g; s/__PILLAR__DNS__SERVER__//g; s/__PILLAR__CLUSTER__DNS__/$kubedns/g" nodelocaldns.yaml
+ sed -i "s/__PILLAR__LOCAL__DNS__/$localdns/g; s/__PILLAR__DNS__DOMAIN__/$domain/g; s/,__PILLAR__DNS__SERVER__//g; s/__PILLAR__CLUSTER__DNS__/$kubedns/g" nodelocaldns.yaml
```
在此模式下,node-local-dns Pods 只会侦听 `` 的地址。
node-local-dns 接口不能绑定 kube-dns 的集群 IP 地址,因为 IPVS 负载均衡
使用的接口已经占用了该地址。
node-local-dns Pods 会设置 `__PILLAR__UPSTREAM__SERVERS__`。
-
+
* 运行 `kubectl create -f nodelocaldns.yaml`
+
* 如果 kube-proxy 运行在 IPVS 模式,需要修改 kubelet 的 `--cluster-dns` 参数
NodeLocal DNSCache 正在侦听的 `` 地址。
否则,不需要修改 `--cluster-dns` 参数,因为 NodeLocal DNSCache 会同时侦听
kube-dns 服务的 IP 地址和 `` 的地址。
-启用后,node-local-dns Pods 将在每个集群节点上的 kube-system 名字空间中运行。
-此 Pod 在缓存模式下运行 [CoreDNS](https://github.com/coredns/coredns) ,
+启用后,`node-local-dns` Pods 将在每个集群节点上的 `kube-system` 名字空间中运行。
+此 Pod 在缓存模式下运行 [CoreDNS](https://github.com/coredns/coredns),
因此每个节点都可以使用不同插件公开的所有 CoreDNS 指标。
如果要禁用该功能,你可以使用 `kubectl delete -f ` 来删除 DaemonSet。
@@ -240,7 +287,9 @@ In those cases, the `kube-dns` ConfigMap can be updated.
## 设置内存限制
@@ -267,13 +316,13 @@ using the `max_concurrent` option in the forward plugin.
你可以在 forward 插件中使用 `max_concurrent` 选项设置并发查询数量上限。
diff --git a/content/zh/docs/tasks/administer-cluster/quota-api-object.md b/content/zh/docs/tasks/administer-cluster/quota-api-object.md
index f1b5050523..80336fb9c4 100644
--- a/content/zh/docs/tasks/administer-cluster/quota-api-object.md
+++ b/content/zh/docs/tasks/administer-cluster/quota-api-object.md
@@ -34,7 +34,7 @@ object.
Create a namespace so that the resources you create in this exercise are
isolated from the rest of your cluster.
-->
-## 创建命名空间
+## 创建命名空间 {#create-a-namespace}
创建一个命名空间以便本例中创建的资源和集群中的其余部分相隔离。
@@ -47,7 +47,7 @@ kubectl create namespace quota-object-example
Here is the configuration file for a ResourceQuota object:
-->
-## 创建 ResourceQuota
+## 创建 ResourceQuota {#create-a-resourcequota}
下面是一个 ResourceQuota 对象的配置文件:
@@ -96,7 +96,7 @@ status:
Here is the configuration file for a PersistentVolumeClaim object:
-->
-## 创建 PersistentVolumeClaim
+## 创建 PersistentVolumeClaim {#create-a-persistentvolumeclaim}
下面是一个 PersistentVolumeClaim 对象的配置文件:
@@ -135,7 +135,7 @@ pvc-quota-demo Pending
Here is the configuration file for a second PersistentVolumeClaim:
-->
-## 尝试创建第二个 PersistentVolumeClaim
+## 尝试创建第二个 PersistentVolumeClaim {#attempt-to-create-a-second-persistentvolumeclaim}
下面是第二个 PersistentVolumeClaim 的配置文件:
@@ -147,8 +147,9 @@ Attempt to create the second PersistentVolumeClaim:
尝试创建第二个 PersistentVolumeClaim:
```shell
-kubectl create -f https://k8s.io/examples/admin/resource/quota-objects-pvc-2.yaml --namespace=quota-object-example
+kubectl apply -f https://k8s.io/examples/admin/resource/quota-objects-pvc-2.yaml --namespace=quota-object-example
```
+
-## 说明
+## 说明 {#notes}
下面这些字符串可被用来标识那些能被配额限制的 API 资源:
+
字符串 API 对象
"pods" Pod
"services" Service
@@ -180,7 +184,13 @@ by quotas:
"secrets" Secret
"configmaps" ConfigMap
"persistentvolumeclaims" PersistentVolumeClaim
+
"services.nodeports" NodePort 类型的 Service
+
"services.loadbalancers" LoadBalancer 类型的 Service
@@ -189,7 +199,7 @@ by quotas:
Delete your namespace:
-->
-## 清理
+## 清理 {#clean-up}
删除你的命名空间:
@@ -202,20 +212,20 @@ kubectl delete namespace quota-object-example
-### 集群管理员参考
+### 集群管理员参考 {#for-cluster-administrators}
* [为命名空间配置默认的内存请求和限制](/zh/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)
* [为命名空间配置默认的 CPU 请求和限制](/zh/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/)
@@ -234,7 +244,7 @@ kubectl delete namespace quota-object-example
* [Configure Quality of Service for Pods](/docs/tasks/configure-pod-container/quality-service-pod/)
-->
-### 应用开发者参考
+### 应用开发者参考 {#for-app-developers}
* [为容器和 Pod 分配内存资源](/zh/docs/tasks/configure-pod-container/assign-memory-resource/)
* [为容器和 Pod 分配 CPU 资源](/zh/docs/tasks/configure-pod-container/assign-cpu-resource/)
diff --git a/content/zh/docs/tasks/administer-cluster/reconfigure-kubelet.md b/content/zh/docs/tasks/administer-cluster/reconfigure-kubelet.md
index e0e47d3299..c6208c405d 100644
--- a/content/zh/docs/tasks/administer-cluster/reconfigure-kubelet.md
+++ b/content/zh/docs/tasks/administer-cluster/reconfigure-kubelet.md
@@ -1,6 +1,7 @@
---
title: 在运行中的集群上重新配置节点的 kubelet
content_type: task
+min-kubernetes-server-version: v1.11
---
{{< caution >}}
[动态 kubelet 配置](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/281-dynamic-kubelet-configuration)
-已经废弃不建议使用。请选择其他方法将配置分发到集群中的节点。
+功能在 Kubernetes 1.22 版本弃用,并在 1.24 版本中移除。
+请选择其他方法将配置分发到集群中的节点。
{{< /caution >}}
[动态 kubelet 配置](https://github.com/kubernetes/enhancements/issues/281)
-允许你通过部署一个所有节点都会使用的 ConfigMap
-达到在运行中的 Kubernetes 集群中更改 kubelet 配置的目的。
+允许你通过部署并配置{{< glossary_tooltip text="节点" term_id="node" >}}使用的
+{{< glossary_tooltip text="ConfigMap" term_id="configmap" >}},
+达到更改正在运行的 Kubernetes 集群的 {{< glossary_tooltip text="kubelet" term_id="kubelet" >}} 配置的目的。
-{{< warning >}}
-所有 kubelet 配置参数都可以被动态更改,但对某些参数来说这类更改是不安全的。
-在决定动态更改参数之前,你需要深刻理解这个改动将会如何影响集群的行为。
-在将变更扩散到整个集群之前,你需要先在小规模的节点集合上仔细地测试这些配置变动。
-特定字段相关的配置建议可以在文档
-[`KubeletConfiguration`](/docs/reference/config-api/kubelet-config.v1beta1/)中找到。
-{{< /warning >}}
-
-## {{% heading "prerequisites" %}}
+请在 [早期版本的文档](https://v1-23.docs.kubernetes.io/zh/docs/tasks/administer-cluster/reconfigure-kubelet/) 中找到有关此功能的文档。
-你需要一个 Kubernetes 集群。
-你还需要 `kubectl`,[安装](/zh/docs/tasks/tools/#kubectl)并配置好与集群的通信。
-{{< version-check >}}
-确保你使用的 `kubectl` 版本与集群 [兼容](/releases/version-skew-policy/)。
+## 不再使用动态 Kubelet 配置
+
+这里没有跨不同的 Kubernetes 发行版替换这个功能的建议方法。
+如果你使用托管 Kubernetes 版本,
+请咨询托管 Kubernetes 的供应商,以获得自定义 Kubernetes 的最佳实践。
+如果你使用的是 `kubeadm`,请参考
+[使用 kubeadm 配置集群中的每个 kubelet](/zh/docs/setup/production-environment/tools/kubeadm/kubelet-integration/)。
-在某些例子中使用了命令行工具 [jq](https://stedolan.github.io/jq/)。
-你并不一定需要 `jq` 才能完成这些任务,因为总是有一些手工替代的方式。
-
-针对你重新配置的每个节点,你必须设置 kubelet 的标志
-`-dynamic-config-dir`,使之指向一个可写的目录。
-
-
+为了停止使用动态 Kubelet 配置功能,
+应该使用替代机制分发 kubelet 配置文件。
+为了使配置生效,必须更新配置文件并重新启动 kubelet。
+请参考[通过配置文件设置 Kubelet 参数](/zh/docs/tasks/administer-cluster/kubelet-config-file/)。
-## 重配置 集群中运行节点上的 kubelet
-
-### 基本工作流程概览
-
-
-在运行中的集群中配置 kubelet 的基本工作流程如下:
-
-1. 编写一个包含 kubelet 配置的 YAML 或 JSON 文件。
-2. 将此文件包装在 ConfigMap 中并将其保存到 Kubernetes 控制平面。
-3. 更新 kubelet 所在节点对象以使用此 ConfigMap。
-
-
-每个 kubelet 都会在其各自的节点对象上监测(Watch)配置引用。当引用更改时,kubelet 将下载新的配置文件,
-更新本地引用指向该文件,然后退出。
-为了使该功能正常地工作,你必须运行操作系统级别的服务管理器(如 systemd),
-它将会在 kubelet 退出后将其重启。
-kubelet 重新启动时,将开始使用新配置。
-
-
-新配置将会完全地覆盖 `--config` 所提供的配置,并被命令行标志覆盖。
-新配置中未指定的值将收到适合配置版本的默认值
-(e.g. `kubelet.config.k8s.io/v1beta1`),除非被命令行标志覆盖。
-
-
-节点 kubelet 配置状态可通过 `node.spec.status.config` 获取。
-一旦你更新了一个节点去使用新的 ConfigMap,
-就可以通过观察此状态来确认该节点是否正在使用预期配置。
-
-
-本文中使用命令 `kubectl edit` 来编辑节点,还有其他的方式可以修改节点的规约,
-比如更利于脚本化工作流程的 `kubectl patch`。
-
-
-本文仅仅讲述在单节点上使用每个 ConfigMap。请注意对于多个节点使用相同的 ConfigMap
-也是合法的。
-
-
-{{< warning >}}
-尽管通过就地更新 ConfigMap 来更改配置是 *可能的*。
-但是这样做会导致所有使用该 ConfigMap 配置的 kubelet 同时更新。
-更安全的做法是按惯例将 ConfigMap 视为不可变更的,借助于
-`kubectl` 的 `--append-hash` 选项逐步把更新推广到 `node.spec.configSource`。
-{{< /warning >}}
-
-
-### 节点鉴权器的自动 RBAC 规则
-
-以前,你需要手动创建 RBAC 规则以允许节点访问其分配的 ConfigMap。节点鉴权器现在
-能够自动配置这些规则。
-
-
-### 生成包含当前配置的文件
-
-动态 kubelet 配置特性允许你为整个配置对象提供一个重载配置,而不是靠单个字段的叠加。
-这是一个更简单的模型,可以更轻松地跟踪配置值的来源,更便于调试问题。
-然而,相应的代价是你必须首先了解现有配置,以确保你只更改你打算修改的字段。
-
-
-组件 kubelet 从其配置文件中加载配置数据,不过你可以通过设置命令行标志
-来重载文件中的一些配置。这意味着,如果你仅知道配置文件的内容,而你不知道
-命令行重载了哪些配置,你就无法知道 kubelet 的运行时配置是什么。
-
-
-因为你需要知道运行时所使用的配置才能重载之,你可以从 kubelet 取回其运行时配置。
-你可以通过访问 kubelet 的 `configz` 末端来生成包含节点当前配置的配置文件;
-这一操作可以通过 `kubectl proxy` 来完成。
-下一节解释如何完成这一操作。
-
-
-{{< caution >}}
-组件 `kubelet` 上的 `configz` 末端是用来协助调试的,并非 kubelet 稳定行为的一部分。
-请不要在产品环境下依赖此末端的行为,也不要在自动化工具中使用此末端。
-{{< /caution >}}
-
-
-关于如何使用配置文件来配置 kubelet 行为的更多信息可参见
-[通过配置文件设置 kubelet 参数](/zh/docs/tasks/administer-cluster/kubelet-config-file)
-文档。
-
-
-#### 生成配置文件
-
-
-{{< note >}}
-下面的任务步骤中使用了 `jq` 命令以方便处理 JSON 数据。为了完成这里讲述的任务,
-你需要安装 `jq`。如果你更希望手动提取 `kubeletconfig` 子对象,也可以对这里
-的对应步骤做一些调整。
-{{< /note >}}
-
-
-1. 选择要重新配置的节点。在本例中,此节点的名称为 `NODE_NAME`。
-2. 使用以下命令在后台启动 kubectl 代理:
-
- ```shell
- kubectl proxy --port=8001 &
- ```
-
-3. 运行以下命令从 `configz` 端点中下载并解压配置。这个命令很长,因此在复制粘贴时要小心。
- **如果你使用 zsh**,请注意常见的 zsh 配置要添加反斜杠转义 URL 中变量名称周围的大括号。
- 例如:在粘贴时,`${NODE_NAME}` 将被重写为 `$\{NODE_NAME\}`。
- 你必须在运行命令之前删除反斜杠,否则命令将失败。
-
- ```bash
- NODE_NAME="the-name-of-the-node-you-are-reconfiguring"; curl -sSL "http://localhost:8001/api/v1/nodes/${NODE_NAME}/proxy/configz" | jq '.kubeletconfig|.kind="KubeletConfiguration"|.apiVersion="kubelet.config.k8s.io/v1beta1"' > kubelet_configz_${NODE_NAME}
- ```
-
-
-{{< note >}}
-你需要手动将 `kind` 和 `apiVersion` 添加到下载对象中,因为它们不是由 `configz` 末端
-返回的。
-{{< /note >}}
-
-
-#### 修改配置文件
-
-使用文本编辑器,改变上述操作生成的文件中一个参数。
-例如,你或许会修改 QPS 参数 `eventRecordQPS`。
-
-
-#### 把配置文件推送到控制平面
-
-用以下命令把编辑后的配置文件推送到控制平面:
-
-```bash
-kubectl -n kube-system create configmap my-node-config \
- --from-file=kubelet=kubelet_configz_${NODE_NAME} \
- --append-hash -o yaml
-```
-
-
-下面是合法响应的一个例子:
-
-```yaml
-apiVersion: v1
-kind: ConfigMap
-metadata:
- creationTimestamp: 2017-09-14T20:23:33Z
- name: my-node-config-gkt4c2m4b2
- namespace: kube-system
- resourceVersion: "119980"
- selfLink: /api/v1/namespaces/kube-system/configmaps/my-node-config-gkt4c2m4b2
- uid: 946d785e-998a-11e7-a8dd-42010a800006
-data:
- kubelet: |
- {...}
-```
-
-
-你会在 `kube-system` 命名空间中创建 ConfigMap,因为 kubelet 是 Kubernetes 的系统组件。
-
-
-`--append-hash` 选项给 ConfigMap 内容附加了一个简短校验和。
-这对于先编辑后推送的工作流程很方便,
-因为它自动并确定地为新 ConfigMap 生成新的名称。
-在以下示例中,包含生成的哈希字符串的对象名被称为 `CONFIG_MAP_NAME`。
-
-
-#### 配置节点使用新的配置
-
-```bash
-kubectl edit node ${NODE_NAME}
-```
-
-
-在你的文本编辑器中,在 `spec` 下增添以下 YAML:
-
-```yaml
-configSource:
- configMap:
- name: CONFIG_MAP_NAME
- namespace: kube-system
- kubeletConfigKey: kubelet
-```
-
-
-你必须同时指定 `name`、`namespace` 和 `kubeletConfigKey` 这三个属性。
-`kubeletConfigKey` 这个参数通知 kubelet ConfigMap 中的哪个键下面包含所要的配置。
-
-
-#### 观察节点开始使用新配置
-
-用 `kubectl get node ${NODE_NAME} -o yaml` 命令读取节点并检查 `node.status.config` 内容。
-状态部分报告了对应 `active`(使用中的)配置、`assigned`(被赋予的)配置和
-`lastKnownGood`(最近已知可用的)配置的配置源。
-
-- `active` 是 kubelet 当前运行时所使用的版本。
-- `assigned` 参数是 kubelet 基于 `node.spec.configSource` 所解析出来的最新版本。
-- `lastKnownGood` 参数是 kubelet 的回退版本;如果在 `node.spec.configSource` 中
- 包含了无效的配置值,kubelet 可以回退到这个版本。
-
-
-如果用本地配置部署节点,使其设置成默认值,这个 `lastKnownGood` 配置可能不存在。
-在 kubelet 配置好后,将更新 `lastKnownGood` 为一个有效的 `assigned` 配置。
-决定如何确定某配置成为 `lastKnownGood` 配置的细节并不在 API 保障范畴,
-不过目前实现中采用了 10 分钟的宽限期。
-
-
-你可以使用以下命令(使用 `jq`)过滤出配置状态:
-
-```bash
-kubectl get no ${NODE_NAME} -o json | jq '.status.config'
-```
-
-
-以下是一个响应示例:
-
-```json
-{
- "active": {
- "configMap": {
- "kubeletConfigKey": "kubelet",
- "name": "my-node-config-9mbkccg2cc",
- "namespace": "kube-system",
- "resourceVersion": "1326",
- "uid": "705ab4f5-6393-11e8-b7cc-42010a800002"
- }
- },
- "assigned": {
- "configMap": {
- "kubeletConfigKey": "kubelet",
- "name": "my-node-config-9mbkccg2cc",
- "namespace": "kube-system",
- "resourceVersion": "1326",
- "uid": "705ab4f5-6393-11e8-b7cc-42010a800002"
- }
- },
- "lastKnownGood": {
- "configMap": {
- "kubeletConfigKey": "kubelet",
- "name": "my-node-config-9mbkccg2cc",
- "namespace": "kube-system",
- "resourceVersion": "1326",
- "uid": "705ab4f5-6393-11e8-b7cc-42010a800002"
- }
- }
-}
-```
-
-
-如果你没有安装 `jq`,你可以查看整个响应对象,查找其中的 `node.status.config`
-部分。
-
-
-如果发生错误,kubelet 会在 `Node.Status.Config.Error` 中显示出错误信息的结构体。
-错误可能出现在列表[理解节点状态配置错误信息](#understanding-node-config-status-errors)中。
-你可以在 kubelet 日志中搜索相同的文本以获取更多详细信息和有关错误的上下文。
-
-
-#### 做出更多的改变 {#make-more-changes}
-
-按照下面的工作流程做出更多的改变并再次推送它们。
-你每次推送一个 ConfigMap 的新内容时,kubectl 的 `--append-hash` 选项都会给
-ConfigMap 创建一个新的名称。
-最安全的上线策略是首先创建一个新的 ConfigMap,然后更新节点以使用新的 ConfigMap。
-
-
-#### 重置节点以使用其本地默认配置
-
-要重置节点,使其使用节点创建时使用的配置,可以用
-`kubectl edit node $ {NODE_NAME}` 命令编辑节点,并删除 `node.spec.configSource`
-字段。
-
-
-#### 观察节点正在使用本地默认配置
-
-在删除此字段后,`node.status.config` 最终变成空,所有配置源都已重置为 `nil`。
-这表示本地默认配置成为了 `assigned`、`active` 和 `lastKnownGood` 配置,
-并且没有报告错误。
-
-
-
-
-## `kubectl patch` 示例
-
-你可以使用几种不同的机制来更改节点的 configSource。
-
-本例使用`kubectl patch`:
-
-```bash
-kubectl patch node ${NODE_NAME} -p "{\"spec\":{\"configSource\":{\"configMap\":{\"name\":\"${CONFIG_MAP_NAME}\",\"namespace\":\"kube-system\",\"kubeletConfigKey\":\"kubelet\"}}}}"
-```
-
-## 了解 Kubelet 如何为配置生成检查点
-
-当为节点赋予新配置时,kubelet 会下载并解压配置负载为本地磁盘上的一组文件。
-kubelet 还记录一些元数据,用以在本地跟踪已赋予的和最近已知良好的配置源,以便
-kubelet 在重新启动时知道使用哪个配置,即使 API 服务器变为不可用。
-在为配置信息和相关元数据生成检查点之后,如果检测到已赋予的配置发生改变,则 kubelet 退出。
-当 kubelet 被 OS 级服务管理器(例如 `systemd`)重新启动时,它会读取新的元数据并使用新配置。
-
-
-当记录的元数据已被完全解析时,意味着它包含选择一个指定的配置版本所需的所有信息
--- 通常是 `UID` 和 `ResourceVersion`。
-这与 `node.spec.configSource` 形成对比,后者通过幂等的 `namespace/name` 声明来标识
-目标 ConfigMap;kubelet 尝试使用此 ConfigMap 的最新版本。
-
-
-当你在调试节点上问题时,可以检查 kubelet 的配置元数据和检查点。kubelet 的检查点目录结构是:
-
-
-
-```none
-- --dynamic-config-dir (用于管理动态配置的根目录)
-|-- meta
- | - assigned (编码后的 kubeletconfig/v1beta1.SerializedNodeConfigSource 对象,对应赋予的配置)
- | - last-known-good (编码后的 kubeletconfig/v1beta1.SerializedNodeConfigSource 对象,对应最近已知可用配置)
-| - checkpoints
- | - uid1 (用 uid1 来标识的对象版本目录)
- | - resourceVersion1 (uid1 对象 resourceVersion1 版本下所有解压文件的目录)
- | - ...
- | - ...
-```
-
-
-## 理解 `Node.Status.Config.Error` 消息 {#understanding-node-config-status-errors}
-
-下表描述了使用动态 kubelet 配置时可能发生的错误消息。
-你可以在 kubelet 日志中搜索相同的文本来获取有关错误的其他详细信息和上下文。
-
-
-
-{{< table caption = "理解 node.status.config.error 消息" >}}
- 错误信息 | 可能的原因
-:----------------| :----------------
-failed to load config, see Kubelet log for details | kubelet 可能无法解析下载配置的有效负载,或者当尝试从磁盘中加载有效负载时,遇到文件系统错误。
-failed to validate config, see Kubelet log for details | 有效负载中的配置,与命令行标志所产生的覆盖配置以及特行门控的组合、配置文件本身、远程负载被 kubelet 判定为无效。
-invalid NodeConfigSource, exactly one subfield must be non-nil, but all were nil | 由于 API 服务器负责对 node.spec.configSource 执行验证,检查其中是否包含至少一个非空子字段,这个消息可能意味着 kubelet 比 API 服务器版本低,因而无法识别更新的源类型。
-failed to sync: failed to download config, see Kubelet log for details | kubelet 无法下载配置数据。可能是 node.spec.configSource 无法解析为具体的 API 对象,或者网络错误破坏了下载。处于此错误状态时,kubelet 将重新尝试下载。
-failed to sync: internal failure, see Kubelet log for details | kubelet 遇到了一些内部问题,因此无法更新其配置。 例如:发生文件系统错误或无法从内部缓存中读取对象。
-internal failure, see Kubelet log for details | 在对配置进行同步的循环之外操作配置时,kubelet 遇到了一些内部问题。
-
-{{< /table >}}
-
-## {{% heading "whatsnext" %}}
-
-
-- [使用配置文件设置 kubelet 参数](/zh/docs/tasks/administer-cluster/kubelet-config-file)说明了配置 kubelet 的方法。
-- 阅读 Node 的参考文档,包括 [.spec](/docs/reference/kubernetes-api/cluster-resources/node-v1/#NodeSpec) 里的 `configSource` 字段
-- 查阅[`KubeletConfiguration`](/docs/reference/config-api/kubelet-config.v1beta1/)文献进一步了解 kubelet
- 配置信息。
\ No newline at end of file
+请注意,从 v1.24 开始 `DynamicKubeletConfig` 特性门控无法在 kubelet 上设置,
+因为不会生效。在 v1.26 之前 API 服务器和控制器管理器不会移除该特性门控。
+这是专为控制面支持有旧版本 kubelet 的节点以及满足 [Kubernetes 版本偏差策略](/releases/version-skew-policy/)。
\ No newline at end of file
diff --git a/content/zh/docs/tasks/administer-cluster/reserve-compute-resources.md b/content/zh/docs/tasks/administer-cluster/reserve-compute-resources.md
index 0788303042..885b232fb5 100644
--- a/content/zh/docs/tasks/administer-cluster/reserve-compute-resources.md
+++ b/content/zh/docs/tasks/administer-cluster/reserve-compute-resources.md
@@ -1,8 +1,4 @@
---
-reviewers:
-- vishh
-- derekwaynecarr
-- dashpole
title: 为系统守护进程预留计算资源
content_type: task
min-kubernetes-server-version: 1.8
@@ -28,7 +24,7 @@ node.
The `kubelet` exposes a feature named 'Node Allocatable' that helps to reserve
compute resources for system daemons. Kubernetes recommends cluster
-administrators to configure `Node Allocatable` based on their workload density
+administrators to configure 'Node Allocatable' based on their workload density
on each node.
-->
Kubernetes 的节点可以按照 `Capacity` 调度。默认情况下 pod 能够使用节点全部可用容量。
@@ -36,7 +32,7 @@ Kubernetes 的节点可以按照 `Capacity` 调度。默认情况下 pod 能够
除非为这些系统守护进程留出资源,否则它们将与 pod 争夺资源并导致节点资源短缺问题。
`kubelet` 公开了一个名为 'Node Allocatable' 的特性,有助于为系统守护进程预留计算资源。
-Kubernetes 推荐集群管理员按照每个节点上的工作负载密度配置 `Node Allocatable`。
+Kubernetes 推荐集群管理员按照每个节点上的工作负载密度配置 “Node Allocatable”。
## {{% heading "prerequisites" %}}
@@ -46,7 +42,7 @@ Your Kubernetes server must be at or later than version 1.17 to use
the kubelet command line option `--reserved-cpus` to set an
[explicitly reserved CPU list](#explicitly-reserved-cpu-list).
-->
-您的 kubernetes 服务器版本必须至少是 1.17 版本,才能使用 kubelet
+你的 kubernetes 服务器版本必须至少是 1.17 版本,才能使用 kubelet
命令行选项 `--reserved-cpus` 设置
[显式预留 CPU 列表](#explicitly-reserved-cpu-list)。
@@ -72,7 +68,7 @@ Resources can be reserved for two categories of system daemons in the `kubelet`.
Kubernetes 节点上的 'Allocatable' 被定义为 pod 可用计算资源量。
调度器不会超额申请 'Allocatable'。
-目前支持 'CPU', 'memory' 和 'ephemeral-storage' 这几个参数。
+目前支持 'CPU'、'memory' 和 'ephemeral-storage' 这几个参数。
可分配的节点暴露为 API 中 `v1.Node` 对象的一部分,也是 CLI 中
`kubectl describe node` 的一部分。
@@ -87,7 +83,7 @@ enable the new cgroup hierarchy via the `--cgroups-per-qos` flag. This flag is
enabled by default. When enabled, the `kubelet` will parent all end-user pods
under a cgroup hierarchy managed by the `kubelet`.
-->
-### 启用 QoS 和 Pod 级别的 cgroups
+### 启用 QoS 和 Pod 级别的 cgroups {#enabling-qos-and-pod-level-cgroups}
为了恰当的在节点范围实施节点可分配约束,你必须通过 `--cgroups-per-qos`
标志启用新的 cgroup 层次结构。这个标志是默认启用的。
@@ -110,10 +106,10 @@ transient slices for resources that are supported by that init system.
Depending on the configuration of the associated container runtime,
operators may have to choose a particular cgroup driver to ensure
proper system behavior. For example, if operators use the `systemd`
-cgroup driver provided by the `docker` runtime, the `kubelet` must
+cgroup driver provided by the `containerd` runtime, the `kubelet` must
be configured to use the `systemd` cgroup driver.
-->
-### 配置 cgroup 驱动
+### 配置 cgroup 驱动 {#configuring-a-cgroup-driver}
`kubelet` 支持在主机上使用 cgroup 驱动操作 cgroup 层次结构。
驱动通过 `--cgroup-driver` 标志配置。
@@ -127,7 +123,7 @@ be configured to use the `systemd` cgroup driver.
取决于相关容器运行时的配置,操作员可能需要选择一个特定的 cgroup 驱动
来保证系统正常运行。
-例如,如果操作员使用 `docker` 运行时提供的 `systemd` cgroup 驱动时,
+例如,如果操作员使用 `containerd` 运行时提供的 `systemd` cgroup 驱动时,
必须配置 `kubelet` 使用 `systemd` cgroup 驱动。
### 显式保留的 CPU 列表 {#explicitly-reserved-cpu-list}
{{< feature-state for_k8s_version="v1.17" state="stable" >}}
--**Kubelet 标志**: `--reserved-cpus=0-3`
+
+**Kubelet 标志**:`--reserved-cpus=0-3`
### 驱逐阈值 {#eviction-Thresholds}
-- **Kubelet 标志**: `--eviction-hard=[memory.available<500Mi]`
+**Kubelet 标志**:`--eviction-hard=[memory.available<500Mi]`
节点级别的内存压力将导致系统内存不足,这将影响到整个节点及其上运行的所有 Pod。
节点可以暂时离线直到内存已经回收为止。
@@ -314,7 +310,7 @@ available for pods.
### 实施节点可分配约束 {#enforcing-node-allocatable}
--**Kubelet 标志**: `--enforce-node-allocatable=pods[,][system-reserved][,][kube-reserved]`
+**Kubelet 标志**:`--enforce-node-allocatable=pods[,][system-reserved][,][kube-reserved]`
调度器将 'Allocatable' 视为 Pod 可用的 `capacity`(资源容量)。
@@ -344,7 +340,7 @@ respectively.
可通过设置 kubelet `--enforce-node-allocatable` 标志值为 `pods` 控制这个措施。
可选地,通过在同一标志中同时指定 `kube-reserved` 和 `system-reserved` 值,
-可以使 `kubelet` 强制实施 `kube-reserved` 和 `system-reserved`约束。
+可以使 `kubelet` 强制实施 `kube-reserved` 和 `system-reserved` 约束。
请注意,要想执行 `kube-reserved` 或者 `system-reserved` 约束,
需要对应设置 `--kube-reserved-cgroup` 或者 `--system-reserved-cgroup`。
@@ -355,7 +351,7 @@ System daemons are expected to be treated similar to
[Guaranteed pods](/docs/tasks/configure-pod-container/quality-service-pod/#create-a-pod-that-gets-assigned-a-qos-class-of-guaranteed).
System daemons can burst within their bounding control groups and this behavior needs
to be managed as part of kubernetes deployments. For example, `kubelet` should
-have its own control group and share `Kube-reserved` resources with the
+have its own control group and share `kube-reserved` resources with the
container runtime. However, Kubelet cannot burst and use up all available Node
resources if `kube-reserved` is enforced.
-->
@@ -366,7 +362,7 @@ resources if `kube-reserved` is enforced.
一样对待。
系统守护进程可以在与其对应的控制组中出现突发资源用量,这一行为要作为
kubernetes 部署的一部分进行管理。
-例如,`kubelet` 应该有它自己的控制组并和容器运行时共享 `Kube-reserved` 资源。
+例如,`kubelet` 应该有它自己的控制组并和容器运行时共享 `kube-reserved` 资源。
不过,如果执行了 `kube-reserved` 约束,则 kubelet 不可出现突发负载并用光
节点的所有可用资源。
@@ -391,7 +387,7 @@ ability to recover if any process in that group is oom-killed.
* 作为起步,可以先针对 `pods` 上执行 'Allocatable' 约束。
* 一旦用于追踪系统守护进程的监控和告警的机制到位,可尝试基于用量估计的
- 方式执行 `kube-reserved`策略。
+ 方式执行 `kube-reserved` 策略。
* 随着时间推进,在绝对必要的时候可以执行 `system-reserved` 策略。
在这个场景下,'Allocatable' 将会是 14.5 CPUs、28.5Gi 内存以及 `88Gi` 本地存储。
调度器保证这个节点上的所有 Pod 的内存 `requests` 总量不超过 28.5Gi,
@@ -448,6 +444,6 @@ kubelet 将会驱逐它们。
14.5 CPUs 的资源。
当没有执行 `kube-reserved` 和/或 `system-reserved` 策略且系统守护进程
-使用量超过其预留时,如果节点内存用量高于 31.5Gi 或`存储`大于 90Gi,
+使用量超过其预留时,如果节点内存用量高于 31.5Gi 或 `storage` 大于 90Gi,
kubelet 将会驱逐 Pod。
diff --git a/content/zh/docs/tasks/administer-cluster/running-cloud-controller.md b/content/zh/docs/tasks/administer-cluster/running-cloud-controller.md
index 5c4340be3b..68b86e6115 100644
--- a/content/zh/docs/tasks/administer-cluster/running-cloud-controller.md
+++ b/content/zh/docs/tasks/administer-cluster/running-cloud-controller.md
@@ -78,7 +78,7 @@ Successfully running cloud-controller-manager requires some changes to your clus
-请记住,设置群集使用云管理控制器将用多种方式更改群集行为:
+请记住,设置集群使用云管理控制器将用多种方式更改集群行为:
### 启用审计日志
-[审计日志](/zh/docs/tasks/debug-application-cluster/audit/)是 Beta 特性,
+[审计日志](/zh/docs/tasks/debug/debug-cluster/audit/)是 Beta 特性,
负责记录 API 操作以便在发生破坏时进行事后分析。
建议启用审计日志,并将审计文件归档到安全服务器上。
diff --git a/content/zh/docs/tasks/administer-cluster/topology-manager.md b/content/zh/docs/tasks/administer-cluster/topology-manager.md
index 6208fe60d1..c01fb50f4b 100644
--- a/content/zh/docs/tasks/administer-cluster/topology-manager.md
+++ b/content/zh/docs/tasks/administer-cluster/topology-manager.md
@@ -33,7 +33,7 @@ In order to extract the best performance, optimizations related to CPU isolation
但是,在 Kubernetes 中,这些优化由各自独立的组件集合来处理。
_拓扑管理器(Topology Manager)_ 是一个 kubelet 的一部分,旨在协调负责这些优化的一组组件。
@@ -46,16 +46,16 @@ _拓扑管理器(Topology Manager)_ 是一个 kubelet 的一部分,旨在
-## 拓扑管理器如何工作
+## 拓扑管理器如何工作 {#how-topology-manager-works}
-在引入拓扑管理器之前, Kubernetes 中的 CPU 和设备管理器相互独立地做出资源分配决策。
+在引入拓扑管理器之前,Kubernetes 中的 CPU 和设备管理器相互独立地做出资源分配决策。
这可能会导致在多处理系统上出现并非期望的资源分配;由于这些与期望相左的分配,对性能或延迟敏感的应用将受到影响。
-这里的不符合期望意指,例如, CPU 和设备是从不同的 NUMA 节点分配的,因此会导致额外的延迟。
+这里的不符合期望意指,例如,CPU 和设备是从不同的 NUMA 节点分配的,因此会导致额外的延迟。
-### 启用拓扑管理器功能特性
+### 启用拓扑管理器功能特性 {#enable-the-topology-manager-feature}
对拓扑管理器的支持要求启用 `TopologyManager`
[特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)。
从 Kubernetes 1.18 版本开始,这一特性默认是启用的。
-### 拓扑管理器作用域和策略
+## 拓扑管理器作用域和策略 {#topology-manager-scopes-and-policies}
拓扑管理器目前:
- 对所有 QoS 类的 Pod 执行对齐操作
@@ -151,7 +151,7 @@ The Topology Manager can deal with the alignment of resources in a couple of dis
Either option can be selected at a time of the kubelet startup, with `--topology-manager-scope` flag.
-->
-### 拓扑管理器作用域
+### 拓扑管理器作用域 {#topology-manager-scopes}
拓扑管理器可以在以下不同的作用域内进行资源对齐:
@@ -165,7 +165,7 @@ Either option can be selected at a time of the kubelet startup, with `--topology
The `container` scope is used by default.
-->
-### 容器作用域
+### 容器作用域 {#container-scope}
默认使用的是 `container` 作用域。
@@ -187,7 +187,7 @@ The notion of grouping the containers was endorsed and implemented on purpose in
To select the `pod` scope, start the kubelet with the command line option `--topology-manager-scope=pod`.
-->
-### Pod 作用域
+### Pod 作用域 {#pod-scope}
使用命令行选项 `--topology-manager-scope=pod` 来启动 kubelet,就可以选择 `pod` 作用域。
@@ -250,7 +250,7 @@ To recap, Topology Manager first computes a set of NUMA nodes and then tests it
-### 拓扑管理器策略
+### 拓扑管理器策略 {#topology-manager-policies}
### best-effort 策略 {#policy-best-effort}
-对于 Guaranteed 类的 Pod 中的每个容器,具有 `best-effort` 拓扑管理策略的
+对于 Pod 中的每个容器,具有 `best-effort` 拓扑管理策略的
kubelet 将调用每个建议提供者以确定资源可用性。
使用此信息,拓扑管理器存储该容器的首选 NUMA 节点亲和性。
如果亲和性不是首选,则拓扑管理器将存储该亲和性,并且无论如何都将 pod 接纳到该节点。
@@ -315,7 +315,7 @@ resource allocation decision.
### restricted 策略 {#policy-restricted}
-对于 Guaranteed 类 Pod 中的每个容器, 配置了 `restricted` 拓扑管理策略的 kubelet
+对于 Pod 中的每个容器,配置了 `restricted` 拓扑管理策略的 kubelet
调用每个建议提供者以确定其资源可用性。。
使用此信息,拓扑管理器存储该容器的首选 NUMA 节点亲和性。
-如果亲和性不是首选,则拓扑管理器将从节点中拒绝此 Pod 。
+如果亲和性不是首选,则拓扑管理器将从节点中拒绝此 Pod。
这将导致 Pod 处于 `Terminated` 状态,且 Pod 无法被节点接纳。
### single-numa-node 策略 {#policy-single-numa-node}
-对于 Guaranteed 类 Pod 中的每个容器, 配置了 `single-numa-nodde` 拓扑管理策略的
+对于 Pod 中的每个容器,配置了 `single-numa-nodde` 拓扑管理策略的
kubelet 调用每个建议提供者以确定其资源可用性。
使用此信息,拓扑管理器确定单 NUMA 节点亲和性是否可能。
如果是这样,则拓扑管理器将存储此信息,然后 *建议提供者* 可以在做出资源分配决定时使用此信息。
@@ -375,7 +375,7 @@ An external control loop could be also implemented to trigger a redeployment of
Consider the containers in the following pod specs:
-->
-### Pod 与拓扑管理器策略的交互
+### Pod 与拓扑管理器策略的交互 {#pod-interactions-with-topology-manager-policies}
考虑以下 pod 规范中的容器:
@@ -410,7 +410,7 @@ This pod runs in the `Burstable` QoS class because requests are less than limits
由于 requests 数少于 limits,因此该 Pod 以 `Burstable` QoS 类运行。
如果选择的策略是 `none` 以外的任何其他策略,拓扑管理器都会评估这些 Pod 的规范。
拓扑管理器会咨询建议提供者,获得拓扑建议。
@@ -434,8 +434,7 @@ spec:
```
此 Pod 以 `Guaranteed` QoS 类运行,因为其 `requests` 值等于 `limits` 值。
@@ -459,12 +458,12 @@ This pod runs in the `BestEffort` QoS class because there are no CPU and memory
因为未指定 CPU 和内存请求,所以 Pod 以 `BestEffort` QoS 类运行。
拓扑管理器将考虑以上两个 Pod。拓扑管理器将咨询建议提供者即 CPU 和设备管理器,以获取 Pod 的拓扑提示。
-对于 `Guaranteed` 类的 CPU 请求数为整数的 Pod,`static` CPU 管理器策略将返回与 CPU 请求有关的提示,
+对于 `Guaranteed` 类的 CPU 请求数为整数的 Pod,`static` CPU 管理器策略将返回独占 CPU 相关的拓扑提示,
而设备管理器将返回有关所请求设备的提示。
-### 已知的局限性
+### 已知的局限性 {#known-limitations}
1. 拓扑管理器所能处理的最大 NUMA 节点个数是 8。若 NUMA 节点数超过 8,
枚举可能的 NUMA 亲和性并为之生成提示时会发生状态爆炸。
diff --git a/content/zh/docs/tasks/administer-cluster/use-cascading-deletion.md b/content/zh/docs/tasks/administer-cluster/use-cascading-deletion.md
index a01fc21f86..6bf5e1eeaa 100644
--- a/content/zh/docs/tasks/administer-cluster/use-cascading-deletion.md
+++ b/content/zh/docs/tasks/administer-cluster/use-cascading-deletion.md
@@ -217,7 +217,7 @@ For details, read the [documentation for your Kubernetes version](/docs/home/sup
1. Use either `kubectl` or the Kubernetes API to delete the Deployment,
depending on the Kubernetes version your cluster runs. {{}}
-->
-1. [创建一个 Deployment 示例](zh/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment)。
+1. [创建一个 Deployment 示例](/zh/docs/tasks/run-application/run-stateless-application-deployment/#creating-and-exploring-an-nginx-deployment)。
1. 基于你的集群所运行的 Kubernetes 版本,使用 `kubectl` 或者 Kubernetes API 来删除 Deployment。
{{}}
diff --git a/content/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl.md b/content/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl.md
index 8e2dd7d202..86d0c9266b 100644
--- a/content/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl.md
+++ b/content/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl.md
@@ -184,6 +184,10 @@ Now you can decode the `password` data:
现在你可以解码 `password` 的数据:
```shell
+# 这是一个用于文档说明的示例。
+# 如果你这样做,数据 'MWYyZDFlMmU2N2Rm' 可以存储在你的 shell 历史中。
+# 可以进入你电脑的人可以找到那个记住的命令并可以在你不知情的情况下 base-64 解码这个 Secret。
+# 通常最好将这些步骤结合起来,如页面后面所示。
echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
```
@@ -194,6 +198,21 @@ echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
1f2d1e2e67df
```
+
+为了避免在 shell 历史记录中存储 Secret 的编码值,可以执行如下命令:
+
+```shell
+kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
+```
+
+
+输出应与上述类似。
+
## 清理 {#clean-up}
diff --git a/content/zh/docs/tasks/configure-pod-container/assign-memory-resource.md b/content/zh/docs/tasks/configure-pod-container/assign-memory-resource.md
index d8a9d37b03..d245d94da6 100644
--- a/content/zh/docs/tasks/configure-pod-container/assign-memory-resource.md
+++ b/content/zh/docs/tasks/configure-pod-container/assign-memory-resource.md
@@ -78,7 +78,7 @@ v1beta1.metrics.k8s.io
Create a namespace so that the resources you create in this exercise are
isolated from the rest of your cluster.
-->
-## 创建命名空间
+## 创建命名空间 {#create-a-namespace}
创建一个命名空间,以便将本练习中创建的资源与集群的其余部分隔离。
@@ -96,7 +96,7 @@ In this exercise, you create a Pod that has one Container. The Container has a m
request of 100 MiB and a memory limit of 200 MiB. Here's the configuration file
for the Pod:
-->
-## 指定内存请求和限制
+## 指定内存请求和限制 {#specify-a-memory-request-and-a-memory-limit}
要为容器指定内存请求,请在容器资源清单中包含 `resources:requests` 字段。
同理,要指定内存限制,请包含 `resources:limits`。
@@ -196,7 +196,7 @@ its limit, the Container becomes a candidate for termination. If the Container c
consume memory beyond its limit, the Container is terminated. If a terminated Container can be
restarted, the kubelet restarts it, as with any other type of runtime failure.
-->
-## 超过容器限制的内存
+## 超过容器限制的内存 {#exceed-a-container-s-memory-limit}
当节点拥有足够的可用内存时,容器可以使用其请求的内存。
但是,容器不允许使用超过其限制的内存。
@@ -260,7 +260,7 @@ The output shows that the Container was killed because it is out of memory (OOM)
-->
输出结果显示:由于内存溢出(OOM),容器已被杀掉:
-```shell
+```yaml
lastState:
terminated:
containerID: 65183c1877aaec2e8427bc95609cc52677a454b56fcb24340dbd22917c23b10f
@@ -352,7 +352,7 @@ of a Pod as having a memory request and limit. The memory request for the Pod is
sum of the memory requests for all the Containers in the Pod. Likewise, the memory
limit for the Pod is the sum of the limits of all the Containers in the Pod.
-->
-## 超过整个节点容量的内存
+## 超过整个节点容量的内存 {#specify-a-memory-request-that-is-too-big-for-your-nodes}
内存请求和限制是与容器关联的,但将 Pod 视为具有内存请求和限制,也是很有用的。
Pod 的内存请求是 Pod 中所有容器的内存请求之和。
@@ -419,7 +419,7 @@ The output shows that the Container cannot be scheduled because of insufficient
-->
输出结果显示:由于节点内存不足,该容器无法被调度:
-```shell
+```
Events:
... Reason Message
------ -------
@@ -433,14 +433,14 @@ The memory resource is measured in bytes. You can express memory as a plain inte
fixed-point integer with one of these suffixes: E, P, T, G, M, K, Ei, Pi, Ti, Gi, Mi, Ki.
For example, the following represent approximately the same value:
-->
-## 内存单位
+## 内存单位 {#memory-units}
内存资源的基本单位是字节(byte)。你可以使用这些后缀之一,将内存表示为
纯整数或定点整数:E、P、T、G、M、K、Ei、Pi、Ti、Gi、Mi、Ki。
例如,下面是一些近似相同的值:
-```shell
-128974848, 129e6, 129M , 123Mi
+```
+128974848, 129e6, 129M, 123Mi
```
-## 如果你没有指定内存限制
+## 如果你没有指定内存限制 {#if-you-do-not-specify-a-memory-limit}
如果你没有为一个容器指定内存限制,则自动遵循以下情况之一:
@@ -486,7 +486,7 @@ cluster, you can make efficient use of the memory resources available on your cl
Nodes. By keeping a Pod's memory request low, you give the Pod a good chance of being
scheduled. By having a memory limit that is greater than the memory request, you accomplish two things:
-->
-## 内存请求和限制的目的
+## 内存请求和限制的目的 {#motivation-for-memory-requests-and-limits}
通过为集群中运行的容器配置内存请求和限制,你可以有效利用集群节点上可用的内存资源。
通过将 Pod 的内存请求保持在较低水平,你可以更好地安排 Pod 调度。
@@ -504,7 +504,7 @@ scheduled. By having a memory limit that is greater than the memory request, you
Delete your namespace. This deletes all the Pods that you created for this task:
-->
-## 清理
+## 清理 {#clean-up}
删除命名空间。下面的命令会删除你根据这个任务创建的所有 Pod:
@@ -521,7 +521,7 @@ kubectl delete namespace mem-example
* [Configure Quality of Service for Pods](/docs/tasks/configure-pod-container/quality-service-pod/)
-->
-### 应用开发者扩展阅读
+### 应用开发者扩展阅读 {#for-app-developers}
* [为容器和 Pod 分配 CPU 资源](/zh/docs/tasks/configure-pod-container/assign-cpu-resource/)
@@ -545,7 +545,7 @@ kubectl delete namespace mem-example
* [Configure Quotas for API Objects](/docs/tasks/administer-cluster/quota-api-object/)
-->
-### 集群管理员扩展阅读
+### 集群管理员扩展阅读 {#for-cluster-administrators}
* [为命名空间配置默认的内存请求和限制](/zh/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)
* [为命名空间配置默认的 CPU 请求和限制](/zh/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/)
diff --git a/content/zh/docs/tasks/configure-pod-container/configure-gmsa.md b/content/zh/docs/tasks/configure-pod-container/configure-gmsa.md
index 54da482502..46361fa6fc 100644
--- a/content/zh/docs/tasks/configure-pod-container/configure-gmsa.md
+++ b/content/zh/docs/tasks/configure-pod-container/configure-gmsa.md
@@ -22,13 +22,12 @@ This page shows how to configure [Group Managed Service Accounts](https://docs.m
服务器将管理操作委派给其他管理员等能力。
在 Kubernetes 环境中,GMSA 凭据规约配置为 Kubernetes 集群范围的自定义资源
(Custom Resources)形式。Windows Pod 以及各 Pod 中的每个容器可以配置为
使用 GMSA 来完成基于域(Domain)的操作(例如,Kerberos 身份认证),以便
-与其他 Windows 服务相交互。自 Kubernetes 1.16 版本起,Docker 运行时为
-Windows 负载支持 GMSA。
+与其他 Windows 服务相交互。
## {{% heading "prerequisites" %}}
@@ -190,7 +189,7 @@ credspec:
下面的 YAML 配置描述的是一个名为 `gmsa-WebApp1` 的 GMSA 凭据规约:
```yaml
-apiVersion: windows.k8s.io/v1alpha1
+apiVersion: windows.k8s.io/v1
kind: GMSACredentialSpec
metadata:
name: gmsa-WebApp1 # 这是随意起的一个名字,将用作引用
@@ -381,85 +380,24 @@ As Pod specs with GMSA fields populated (as described above) are applied in a cl
1. 容器运行时为每个 Windows 容器配置所指定的 GMSA 凭据规约,这样容器就可以以
活动目录中该 GMSA 所代表的身份来执行操作,使用该身份来访问域中的服务。
+## 使用主机名或 FQDN 对网络共享进行身份验证
-## Containerd
-在 Windows Server 2019 上对 containerd 使用 GMSA,需要使用 Build 17763.1817(或更新的版本),
-你可以安装补丁 [KB5000822](https://support.microsoft.com/en-us/topic/march-9-2021-kb5000822-os-build-17763-1817-2eb6197f-e3b1-4f42-ab51-84345e063564)。
+如果你在使用主机名或 FQDN 从 Pod 连接到 SMB 共享时遇到问题,但能够通过其 IPv4 地址访问共享,
+请确保在 Windows 节点上设置了以下注册表项。
-containerd 场景从 Pod 连接 SMB 共享的时候有一个已知问题:
-配置了 GMSA 以后,无法通过主机名或者 FQDN 访问 SMB共享,但是通过 IP 地址访问没有问题。
-
-```PowerShell
-ping adserver.ad.local
+```cmd
+reg add "HKLM\SYSTEM\CurrentControlSet\Services\hns\State" /v EnableCompartmentNamespace /t REG_DWORD /d 1
```
-
-主机名可以被解析为 IPv4 地址,输出类似如下所示:
-
-```
-Pinging adserver.ad.local [192.168.111.18] with 32 bytes of data:
-Reply from 192.168.111.18: bytes=32 time=6ms TTL=124
-Reply from 192.168.111.18: bytes=32 time=5ms TTL=124
-Reply from 192.168.111.18: bytes=32 time=5ms TTL=124
-Reply from 192.168.111.18: bytes=32 time=5ms TTL=124
-```
-
-
-但是,当尝试使用主机名浏览目录时:
-
-```PowerShell
-cd \\adserver.ad.local\test
-```
-
-
-你会看到一个错误,提示目标共享不存在:
-
-```
-cd : Cannot find path '\\adserver.ad.local\test' because it does not exist.
-At line:1 char:1
-+ cd \\adserver.ad.local\test
-+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- + CategoryInfo : ObjectNotFound: (\\adserver.ad.local\test:String) [Set-Location], ItemNotFoundException
- + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand
-```
-
-
-但是你会注意到,如果你改为使用其 IPv4 地址浏览共享,错误就会消失;例如:
-
-```PowerShell
-cd \\192.168.111.18\test
-```
-
-
-切换到共享中的目录后,你会看到类似于以下内容的提示:
-
-```
-Microsoft.PowerShell.Core\FileSystem::\\192.168.111.18\test>
-```
-
-
-要解决问题,你需要在节点上运行以下命令以添加所需的注册表项
-`reg add "HKLM\SYSTEM\CurrentControlSet\Services\hns\State" /v EnableCompartmentNamespace /t REG_DWORD /d 1`。
-此更改只会在新创建的 Pod 中生效,这意味着你必须重新创建任何需要访问 SMB 共享的正在运行的 Pod。
+然后需要重新创建正在运行的 Pod 以使行为更改生效。
+有关如何使用此注册表项的更多信息,请参见[此处](https://github.com/microsoft/hcsshim/blob/885f896c5a8548ca36c88c4b87fd2208c8d16543/internal/uvm/create.go#L74-L83)。
`nltest.exe /parentdomain` 导致以下错误:
-```
+```output
Getting parent domain failed: Status = 1722 0x6ba RPC_S_SERVER_UNAVAILABLE
```
diff --git a/content/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md b/content/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
index f0c149f13f..422f60a351 100644
--- a/content/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
+++ b/content/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes.md
@@ -91,7 +91,7 @@ kubelet 在容器内执行命令 `cat /tmp/healthy` 来进行探测。
当容器启动时,执行如下的命令:
```shell
-/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
+/bin/sh -c "touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600"
```
## 定义 gRPC 活跃探测器
-{{< feature-state for_k8s_version="v1.23" state="alpha" >}}
+{{< feature-state for_k8s_version="v1.24" state="beta" >}}
+
很多应用在其初始化或运行期间要依赖一些配置信息。大多数时候,
存在要调整配置参数所设置的数值的需求。
@@ -41,7 +41,7 @@ ConfigMap 允许你将配置文件与镜像文件分离,以使容器化的应
You can use either `kubectl create configmap` or a ConfigMap generator in `kustomization.yaml` to create a ConfigMap. Note that `kubectl` starts to support `kustomization.yaml` since 1.14.
-->
-## 创建 ConfigMap
+## 创建 ConfigMap {#create-a-configmap}
你可以使用 `kubectl create configmap` 或者在 `kustomization.yaml` 中的 ConfigMap
生成器来创建 ConfigMap。注意,`kubectl` 从 1.14 版本开始支持 `kustomization.yaml`。
@@ -49,15 +49,20 @@ You can use either `kubectl create configmap` or a ConfigMap generator in `kusto
-### 使用 kubectl create configmap 创建 ConfigMap
+### 使用 kubectl create configmap 创建 ConfigMap {#create-a-configmap-using-kubectl-create-configmap}
你可以使用 `kubectl create configmap`
命令基于[目录](#create-configmaps-from-directories)、
[文件](#create-configmaps-from-files)或者[字面值](#create-configmaps-from-literal-values)来创建
ConfigMap:
+
```shell
kubectl create configmap <映射名称> <数据源>
```
@@ -107,11 +112,24 @@ For example:
例如:
+
```shell
# 创建本地目录
mkdir -p configure-pod-container/configmap/
-# 将实例文件下载到 `configure-pod-container/configmap/` 目录
+# 将示例文件下载到 `configure-pod-container/configmap/` 目录
wget https://kubernetes.io/examples/configmap/game.properties -O configure-pod-container/configmap/game.properties
wget https://kubernetes.io/examples/configmap/ui.properties -O configure-pod-container/configmap/ui.properties
@@ -186,7 +204,6 @@ metadata:
name: game-config
namespace: default
resourceVersion: "516"
- selfLink: /api/v1/namespaces/default/configmaps/game-config
uid: b4952dc3-d670-11e5-8cd0-68f728db1985
data:
game.properties: |
@@ -264,9 +281,9 @@ kubectl create configmap game-config-2 --from-file=configure-pod-container/confi
```
-描述上面创建的 `game-config-2` ConfigMap:
+你可以使用以下命令显示 `game-config-2` ConfigMap 的详细信息:
```shell
kubectl describe configmaps game-config-2
@@ -327,12 +344,16 @@ Use the option `--from-env-file` to create a ConfigMap from an env-file, for exa
# Download the sample files into `configure-pod-container/configmap/` directory
wget https://kubernetes.io/examples/configmap/game-env-file.properties -O configure-pod-container/configmap/game-env-file.properties
+wget https://kubernetes.io/examples/configmap/ui-env-file.properties -O configure-pod-container/configmap/ui-env-file.properties
# The env-file `game-env-file.properties` looks like below
cat configure-pod-container/configmap/game-env-file.properties
enemies=aliens
lives=3
allowed="true"
+
+# This comment and the empty line above it are ignored
+```
-->
Env 文件包含环境变量列表。其中适用以下语法规则:
@@ -345,6 +366,7 @@ Env 文件包含环境变量列表。其中适用以下语法规则:
```shell
wget https://kubernetes.io/examples/configmap/game-env-file.properties -O configure-pod-container/configmap/game-env-file.properties
+wget https://kubernetes.io/examples/configmap/ui-env-file.properties -O configure-pod-container/configmap/ui-env-file.properties
```
Env 文件 `game-env-file.properties` 如下所示:
@@ -395,33 +417,12 @@ data:
```
-{{< caution >}}
-当多次使用 `--from-env-file` 来从多个数据源创建 ConfigMap 时,仅仅最后一个 env 文件有效。
-{{< /caution >}}
+从 Kubernetes 1.23 版本开始,`kubectl` 支持多次指定 `--from-env-file` 参数来从多个数据源创建 ConfigMap。
-
-下面是一个多次使用 `--from-env-file` 参数的示例:
-
-
-```shell
-# 将示例文件下载到 `configure-pod-container/configmap/` 目录
-wget https://k8s.io/examples/configmap/ui-env-file.properties -O configure-pod-container/configmap/ui-env-file.properties
-
-# 创建 ConfigMap
kubectl create configmap config-multi-env-files \
--from-env-file=configure-pod-container/configmap/game-env-file.properties \
--from-env-file=configure-pod-container/configmap/ui-env-file.properties
@@ -449,11 +450,13 @@ metadata:
name: config-multi-env-files
namespace: default
resourceVersion: "810136"
- selfLink: /api/v1/namespaces/default/configmaps/config-multi-env-files
uid: 252c4572-eb35-11e7-887b-42010a8002b8
data:
+ allowed: '"true"'
color: purple
+ enemies: aliens
how: fairlyNice
+ lives: "3"
textmode: "true"
```
@@ -462,21 +465,28 @@ data:
You can define a key other than the file name to use in the `data` section of your ConfigMap when using the `--from-file` argument:
-->
-#### 定义从文件创建 ConfigMap 时要使用的键
+#### 定义从文件创建 ConfigMap 时要使用的键 {#define-the-key-to-use-when-generating-a-configmap-from-a-file}
在使用 `--from-file` 参数时,你可以定义在 ConfigMap 的 `data` 部分出现键名,
而不是按默认行为使用文件名:
+
```shell
kubectl create configmap game-config-3 --from-file=<我的键名>=<文件路径>
```
`<我的键名>` 是你要在 ConfigMap 中使用的键名,`<文件路径>` 是你想要键所表示的数据源文件的位置。
-
+
例如:
```shell
@@ -492,7 +502,9 @@ would produce the following ConfigMap:
kubectl get configmaps game-config-3 -o yaml
```
-
+
输出类似以下内容:
```yaml
@@ -503,7 +515,6 @@ metadata:
name: game-config-3
namespace: default
resourceVersion: "530"
- selfLink: /api/v1/namespaces/default/configmaps/game-config-3
uid: 05f8da22-d671-11e5-8cd0-68f728db1985
data:
game-special-key: |
@@ -552,7 +563,6 @@ metadata:
name: special-config
namespace: default
resourceVersion: "651"
- selfLink: /api/v1/namespaces/default/configmaps/special-config
uid: dadce046-d673-11e5-8cd0-68f728db1985
data:
special.how: very
@@ -567,7 +577,7 @@ You can also create a ConfigMap from generators and then apply it to create the
the Apiserver. The generators
should be specified in a `kustomization.yaml` inside a directory.
-->
-### 基于生成器创建 ConfigMap
+### 基于生成器创建 ConfigMap {#create-a-configmap-from-generator}
自 1.14 开始,`kubectl` 开始支持 `kustomization.yaml`。
你还可以基于生成器(Generators)创建 ConfigMap,然后将其应用于 API 服务器上创建对象。
@@ -576,20 +586,31 @@ should be specified in a `kustomization.yaml` inside a directory.
-#### 基于文件生成 ConfigMap
+#### 基于文件生成 ConfigMap {#generate-configmaps-from-files}
-例如,要基于 `configure-pod-container/configmap/kubectl/game.properties`
+例如,要基于 `configure-pod-container/configmap/game.properties`
文件生成一个 ConfigMap:
+
```shell
# 创建包含 ConfigMapGenerator 的 kustomization.yaml 文件
cat <./kustomization.yaml
configMapGenerator:
- name: game-config-4
files:
- - configure-pod-container/configmap/kubectl/game.properties
+ - configure-pod-container/configmap/game.properties
EOF
```
@@ -652,22 +673,33 @@ 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`
-->
-#### 定义从文件生成 ConfigMap 时要使用的键
+#### 定义从文件生成 ConfigMap 时要使用的键 {#define-the-key-to-use-when-generating-a-configmap-from-a-file}
在 ConfigMap 生成器中,你可以定义一个非文件名的键名。
例如,从 `configure-pod-container/configmap/game.properties` 文件生成 ConfigMap,
但使用 `game-special-key` 作为键名:
+
```shell
# 创建包含 ConfigMapGenerator 的 kustomization.yaml 文件
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
```
@@ -688,13 +720,25 @@ 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
-->
-#### 基于字面值生成 ConfigMap
+#### 基于字面值生成 ConfigMap {#generate-configmaps-from-literals}
要基于字符串 `special.type=charm` 和 `special.how=very` 生成 ConfigMap,
-可以在 `kusotmization.yaml` 中配置 ConfigMap 生成器:
+可以在 `kustomization.yaml` 中配置 ConfigMap 生成器:
+
```shell
# 创建带有 ConfigMapGenerator 的 kustomization.yaml 文件
cat <./kustomization.yaml
@@ -724,9 +768,9 @@ configmap/special-config-2-c92b5mmcf2 created
### Define a container environment variable with data from a single ConfigMap
-->
-## 使用 ConfigMap 数据定义容器环境变量
+## 使用 ConfigMap 数据定义容器环境变量 {#define-container-environment-variables-using-configmap-data}
-### 使用单个 ConfigMap 中的数据定义容器环境变量
+### 使用单个 ConfigMap 中的数据定义容器环境变量 {#define-a-container-environment-variable-with-data-from-a-single-configmap}
+
创建 Pod:
```shell
kubectl create -f https://kubernetes.io/examples/pods/pod-single-configmap-env-variable.yaml
```
-
+
现在,Pod 的输出包含环境变量 `SPECIAL_LEVEL_KEY=very`。
-### 使用来自多个 ConfigMap 的数据定义容器环境变量
+### 使用来自多个 ConfigMap 的数据定义容器环境变量 {#define-container-environment-variables-with-data-from-multiple-configmaps}
-
+
* 与前面的示例一样,首先创建 ConfigMap。
{{< codenew file="configmap/configmaps.yaml" >}}
-
+
创建 ConfigMap:
```shell
@@ -778,20 +830,24 @@ configmap/special-config-2-c92b5mmcf2 created
{{< codenew file="pods/pod-multiple-configmap-env-variable.yaml" >}}
-
+
创建 Pod:
```shell
kubectl create -f https://kubernetes.io/examples/pods/pod-multiple-configmap-env-variable.yaml
```
-
+
现在,Pod 的输出包含环境变量 `SPECIAL_LEVEL_KEY=very` 和 `LOG_LEVEL=INFO`。
-## 将 ConfigMap 中的所有键值对配置为容器环境变量
+## 将 ConfigMap 中的所有键值对配置为容器环境变量 {#configure-all-key-value-pairs-in-a-configmap-as-container-environment-variables}
+
创建 ConfigMap:
```shell
@@ -822,20 +880,24 @@ Kubernetes v1.6 和更高版本支持此功能。
{{< codenew file="pods/pod-configmap-envFrom.yaml" >}}
-
+
创建 Pod:
```shell
kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-envFrom.yaml
```
-
+
现在,Pod 的输出包含环境变量 `SPECIAL_LEVEL=very` 和 `SPECIAL_TYPE=charm`。
-## 在 Pod 命令中使用 ConfigMap 定义的环境变量
+## 在 Pod 命令中使用 ConfigMap 定义的环境变量 {#use-configmap-defined-environment-variables-in-pod-commands}
-## 将 ConfigMap 数据添加到一个卷中
+## 将 ConfigMap 数据添加到一个卷中 {#add-configmap-data-to-a-volume}
-如基于文件创建 [ConfigMap](#create-configmaps-from-files) 中所述,当你使用
+如基于文件创建 [ConfigMap](#create-configmaps-from-files) 中所述,当你使用
`--from-file` 创建 ConfigMap 时,文件名成为存储在 ConfigMap 的 `data` 部分中的键,
文件内容成为键对应的值。
@@ -900,18 +962,20 @@ kubectl create -f https://kubernetes.io/examples/configmap/configmap-multikeys.y
Add the ConfigMap name under the `volumes` section of the Pod specification.
This adds the ConfigMap data to the directory specified as `volumeMounts.mountPath` (in this case, `/etc/config`).
-The `command` section references the `special.level` item stored in the ConfigMap.
+The `command` section lists directory files with names that match the keys in ConfigMap.
-->
-### 使用存储在 ConfigMap 中的数据填充卷
+### 使用存储在 ConfigMap 中的数据填充卷 {#populate-a-volume-with-data-stored-in-a-configmap}
在 Pod 规约的 `volumes` 部分下添加 ConfigMap 名称。
这会将 ConfigMap 数据添加到 `volumeMounts.mountPath` 所指定的目录
(在本例中为 `/etc/config`)。
-`command` 部分引用存储在 ConfigMap 中的 `special.level`。
+`command` 部分列出了名称与 ConfigMap 中的键匹配的目录文件。
{{< codenew file="pods/pod-configmap-volume.yaml" >}}
-
+
创建 Pod:
```shell
@@ -923,7 +987,7 @@ When the pod runs, the command `ls /etc/config/` produces the output below:
-->
Pod 运行时,命令 `ls /etc/config/` 产生下面的输出:
-```shell
+```
SPECIAL_LEVEL
SPECIAL_TYPE
```
@@ -948,7 +1012,7 @@ Text data is exposed as files using the UTF-8 character encoding. To use some ot
Use the `path` field to specify the desired file path for specific ConfigMap items.
In this case, the `SPECIAL_LEVEL` item will be mounted in the `config-volume` volume at `/etc/config/keys`.
-->
-### 将 ConfigMap 数据添加到卷中的特定路径
+### 将 ConfigMap 数据添加到卷中的特定路径 {#add-configmap-data-to-a-specific-path-in-the-volume}
使用 `path` 字段为特定的 ConfigMap 项目指定预期的文件路径。
在这里,ConfigMap 中键 `SPECIAL_LEVEL` 的内容将挂载在 `config-volume`
@@ -987,7 +1051,7 @@ Like before, all previous files in the `/etc/config/` directory will be deleted.
You can project keys to specific paths and specific permissions on a per-file
basis. The [Secrets](/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod) user guide explains the syntax.
-->
-### 映射键到指定路径并设置文件访问权限
+### 映射键到指定路径并设置文件访问权限 {#project-keys-to-specific-paths-and-file-permissions}
你可以将指定键名投射到特定目录,也可以逐个文件地设定访问权限。
[Secret 用户指南](/zh/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod)
@@ -1046,7 +1110,7 @@ A container using a ConfigMap as a [subPath](/docs/concepts/storage/volumes/#usi
The ConfigMap API resource stores configuration data as key-value pairs. The data can be consumed in pods or provide the configurations for system components such as controllers. ConfigMap is similar to [Secrets](/docs/concepts/configuration/secret/), but provides a means of working with strings that don't contain sensitive information. Users and system components alike can store configuration data in ConfigMap.
-->
-## 了解 ConfigMap 和 Pod
+## 了解 ConfigMap 和 Pod {#understanding-configmaps-and-pods}
ConfigMap API 资源将配置数据存储为键值对。
数据可以在 Pod 中使用,也可以用来提供系统组件(如控制器)的配置。
@@ -1071,6 +1135,25 @@ ConfigMap 的 `data` 字段包含配置数据。如下例所示,它可以简
(如用 `--from-literal` 的单个属性定义)或复杂
(如用 `--from-file` 的配置文件或 JSON blob定义)。
+
```yaml
apiVersion: v1
kind: ConfigMap
@@ -1111,7 +1194,9 @@ data:
kubectl get events
```
-
+
输出与此类似:
```
@@ -1128,7 +1213,7 @@ data:
-- 你不能将 ConfigMap 用于{{< glossary_tooltip text="静态 Pod" term_id="static-pod" >}},
+- 你不能将 ConfigMap 用于{{< glossary_tooltip text="静态 Pod" term_id="static-pod" >}},
因为 Kubernetes 不支持这种用法。
## {{% heading "whatsnext" %}}
@@ -1137,5 +1222,5 @@ data:
* Follow a real world example of [Configuring Redis using a ConfigMap](/docs/tutorials/configuration/configure-redis-using-configmap/).
-->
* 浏览[使用 ConfigMap 配置 Redis](/zh/docs/tutorials/configuration/configure-redis-using-configmap/)
- 真实实例。
+ 真实示例。
diff --git a/content/zh/docs/tasks/configure-pod-container/configure-pod-initialization.md b/content/zh/docs/tasks/configure-pod-container/configure-pod-initialization.md
index 90cf168b75..25f37b8b9c 100644
--- a/content/zh/docs/tasks/configure-pod-container/configure-pod-initialization.md
+++ b/content/zh/docs/tasks/configure-pod-container/configure-pod-initialization.md
@@ -135,11 +135,11 @@ The output shows that nginx is serving the web page that was written by the init
[communicating between Containers running in the same Pod](/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/).
* Learn more about [Init Containers](/docs/concepts/workloads/pods/init-containers/).
* Learn more about [Volumes](/docs/concepts/storage/volumes/).
-* Learn more about [Debugging Init Containers](/docs/tasks/debug-application-cluster/debug-init-containers/)
+* Learn more about [Debugging Init Containers](/docs/tasks/debug/debug-application/debug-init-containers/)
-->
* 进一步了解[同一 Pod 中的容器间的通信](/zh/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/)。
* 进一步了解 [Init 容器](/zh/docs/concepts/workloads/pods/init-containers/)。
* 进一步了解[卷](/zh/docs/concepts/storage/volumes/)。
-* 进一步了解 [Init 容器排错](/zh/docs/tasks/debug-application-cluster/debug-init-containers/)。
+* 进一步了解 [Init 容器排错](/zh/docs/tasks/debug/debug-application/debug-init-containers/)。
diff --git a/content/zh/docs/tasks/configure-pod-container/configure-projected-volume-storage.md b/content/zh/docs/tasks/configure-pod-container/configure-projected-volume-storage.md
index d0ff476b38..420d1ea960 100644
--- a/content/zh/docs/tasks/configure-pod-container/configure-projected-volume-storage.md
+++ b/content/zh/docs/tasks/configure-pod-container/configure-projected-volume-storage.md
@@ -46,7 +46,7 @@ Here is the configuration file for the Pod:
## 为 Pod 配置 projected 卷
-本练习中,您将从本地文件来创建包含有用户名和密码的 Secret。然后创建运行一个容器的 Pod,
+本练习中,你将从本地文件来创建包含有用户名和密码的 Secret。然后创建运行一个容器的 Pod,
该 Pod 使用[`projected`](/zh/docs/concepts/storage/volumes/#projected) 卷将 Secret 挂载到相同的路径下。
下面是 Pod 的配置文件:
@@ -59,7 +59,7 @@ Here is the configuration file for the Pod:
```shell
# 创建包含用户名和密码的文件:
echo -n "admin" > ./username.txt
- echo -n "1f2d1e2e67df" > ./password.txt-->
+ echo -n "1f2d1e2e67df" > ./password.txt
# 将上述文件引用到 Secret:
kubectl create secret generic user --from-file=./username.txt
diff --git a/content/zh/docs/tasks/configure-pod-container/configure-runasusername.md b/content/zh/docs/tasks/configure-pod-container/configure-runasusername.md
index 4b4e05dd4b..0007ac660a 100644
--- a/content/zh/docs/tasks/configure-pod-container/configure-runasusername.md
+++ b/content/zh/docs/tasks/configure-pod-container/configure-runasusername.md
@@ -17,7 +17,7 @@ weight: 20
-本页展示如何为运行为在 Windows 节点上运行的 Pod 和容器配置 `RunAsUserName` 。
+本页展示如何为运行为在 Windows 节点上运行的 Pod 和容器配置 `RunAsUserName`。
大致相当于 Linux 上的 `runAsUser`,允许在容器中以与默认值不同的用户名运行应用。
## {{% heading "prerequisites" %}}
@@ -32,11 +32,11 @@ You need to have a Kubernetes cluster and the kubectl command-line tool must be
## Set the Username for a Pod
To specify the username with which to execute the Pod's container processes, include the
-`securityContext` field ([PodSecurityContext](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritycontext-v1-core))
-in the Pod specification, and within it, the `windowsOptions`
+`securityContext` field ([PodSecurityContext](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritycontext-v1-core))
+in the Pod specification, and within it, the `windowsOptions`
([WindowsSecurityContextOptions](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#windowssecuritycontextoptions-v1-core)) field containing the `runAsUserName` field.
-->
-## 为 Pod 设置 Username
+## 为 Pod 设置 Username {#set-the-username-for-a-pod}
要指定运行 Pod 容器时所使用的用户名,请在 Pod 声明中包含 `securityContext`
([PodSecurityContext](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritycontext-v1-core)) 字段,
@@ -102,21 +102,21 @@ The output should be:
输出结果应该是这样:
-```shell
+```
ContainerUser
```
-## 为容器设置 Username
+## 为容器设置 Username {#set-the-username-for-a-container}
要指定运行容器时所使用的用户名,请在容器清单中包含 `securityContext`
([SecurityContext](/zh/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#securitycontext-v1-core))
@@ -186,7 +186,7 @@ ContainerAdministrator
In order to use this feature, the value set in the `runAsUserName` field must be a valid username. It must have the following format: `DOMAIN\USER`, where `DOMAIN\` is optional. Windows user names are case insensitive. Additionally, there are some restrictions regarding the `DOMAIN` and `USER`:
-->
-## Windows Username 的局限性
+## Windows Username 的局限性 {#windows-username-limitations}
想要使用此功能,在 `runAsUserName` 字段中设置的值必须是有效的用户名。
它必须是 `DOMAIN\USER` 这种格式,其中 `DOMAIN\` 是可选的。
@@ -218,10 +218,10 @@ For more information about these limtations, check [here](https://support.micros
## {{% heading "whatsnext" %}}
-* [Kubernetes 中调度 Windows 容器的指南](/zh/docs/setup/production-environment/windows/user-guide-windows-containers/)
-* [使用组托管服务帐户(GMSA)管理工作负载身份](/zh/docs/setup/production-environment/windows/user-guide-windows-containers/#managing-workload-identity-with-group-managed-service-accounts)
+* [Kubernetes 中调度 Windows 容器的指南](/zh/docs/concepts/windows/user-guide/)
+* [使用组托管服务帐户(GMSA)管理工作负载身份](/zh/docs/concepts/windows/user-guide/#managing-workload-identity-with-group-managed-service-accounts)
* [Windows 下 pod 和容器的 GMSA 配置](/zh/docs/tasks/configure-pod-container/configure-gmsa/)
diff --git a/content/zh/docs/tasks/configure-pod-container/create-hostprocess-pod.md b/content/zh/docs/tasks/configure-pod-container/create-hostprocess-pod.md
index 61942b93fc..97029bff8f 100644
--- a/content/zh/docs/tasks/configure-pod-container/create-hostprocess-pod.md
+++ b/content/zh/docs/tasks/configure-pod-container/create-hostprocess-pod.md
@@ -35,7 +35,7 @@ Windows HostProcess 容器让你能够在 Windows 主机上运行容器化负载
-你可以通过为名字空间设置标签来强制实施 [Pod 安全标准](/zh/docs/concepts/security/pod-security-standards)。
+[特权(privileged)](/zh/docs/concepts/security/pod-security-standards/#privileged)、
+[基线(baseline)](/zh/docs/concepts/security/pod-security-standards/#baseline)和
+[受限(restricted)](/zh/docs/concepts/security/pod-security-standards/#restricted)
+这三种策略涵盖了广泛安全范围,并由 [Pod 安全](/zh/docs/concepts/security/pod-security-admission/)
+ {{< glossary_tooltip text="准入控制器" term_id="admission-controller" >}}实现。
## {{% heading "prerequisites" %}}
diff --git a/content/zh/docs/tasks/configure-pod-container/migrate-from-psp.md b/content/zh/docs/tasks/configure-pod-container/migrate-from-psp.md
index 9c0715c99f..29d3396de7 100644
--- a/content/zh/docs/tasks/configure-pod-container/migrate-from-psp.md
+++ b/content/zh/docs/tasks/configure-pod-container/migrate-from-psp.md
@@ -608,7 +608,7 @@ appropriate Pod Security profile is applied to new namespaces.
你也可以静态配置 Pod 安全性准入控制器,为尚未打标签的名字空间设置默认的
diff --git a/content/zh/docs/tasks/configure-pod-container/pull-image-private-registry.md b/content/zh/docs/tasks/configure-pod-container/pull-image-private-registry.md
index c29009533f..0648733926 100644
--- a/content/zh/docs/tasks/configure-pod-container/pull-image-private-registry.md
+++ b/content/zh/docs/tasks/configure-pod-container/pull-image-private-registry.md
@@ -14,11 +14,14 @@ weight: 100
本文介绍如何使用 {{< glossary_tooltip text="Secret" term_id="secret" >}}
从私有的镜像仓库或代码仓库拉取镜像来创建 Pod。
+有很多私有镜像仓库正在使用中。这个任务使用的镜像仓库是
+[Docker Hub](https://www.docker.com/products/docker-hub)
{{% thirdparty-content single="true" %}}
@@ -29,10 +32,13 @@ private container image registry or repository.
-要进行此练习,你需要 `docker` 命令行工具和一个知道密码的
+* 要进行此练习,你需要 `docker` 命令行工具和一个知道密码的
[Docker ID](https://docs.docker.com/docker-id/)。
+* 如果你要使用不同的私有的镜像仓库,你需要有对应镜像仓库的命令行工具和登录信息。
@@ -41,7 +47,7 @@ private container image registry or repository.
On your laptop, you must authenticate with a registry in order to pull a private image:
-->
-## 登录 Docker 镜像仓库
+## 登录 Docker 镜像仓库 {#log-in-to-docker}
在个人电脑上,要想拉取私有镜像必须在镜像仓库上进行身份验证。
@@ -57,7 +63,7 @@ The login process creates or updates a `config.json` file that holds an authoriz
View the `config.json` file:
-->
-当出现提示时,输入您的 Docker ID 和登录凭证(访问令牌、
+当出现提示时,输入你的 Docker ID 和登录凭证(访问令牌、
或 Docker ID 的密码)。
登录过程会创建或更新保存有授权令牌的 `config.json` 文件。
@@ -92,15 +98,77 @@ If you use a Docker credentials store, you won't see that `auth` entry but a `cr
{{< /note >}}
+## 创建一个基于现有凭证的 Secret {#registry-secret-existing-credentials}
+
+Kubernetes 集群使用 `kubernetes.io/dockerconfigjson` 类型的
+Secret 来通过镜像仓库的身份验证,进而提取私有镜像。
+
+如果你已经运行了 `docker login` 命令,你可以复制该镜像仓库的凭证到 Kubernetes:
+
+```shell
+kubectl create secret generic regcred \
+ --from-file=.dockerconfigjson= \
+ --type=kubernetes.io/dockerconfigjson
+```
+
+
+如果你需要更多的设置(例如,为新 Secret 设置名字空间或标签),
+则可以在存储 Secret 之前对它进行自定义。
+请务必:
+
+- 将 data 项中的名称设置为 `.dockerconfigjson`
+- 使用 base64 编码方法对 Docker 配置文件进行编码,然后粘贴该字符串的内容,作为字段
+ `data[".dockerconfigjson"]` 的值
+- 将 `type` 设置为 `kubernetes.io/dockerconfigjson`
+
+示例:
+
+```yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: myregistrykey
+ namespace: awesomeapps
+data:
+ .dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
+type: kubernetes.io/dockerconfigjson
+```
+
+
+如果你收到错误消息:`error: no objects passed to create`,
+这可能意味着 base64 编码的字符串是无效的。 如果你收到类似
+`Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ...`
+的错误消息,则表示数据中的 base64 编码字符串已成功解码,但无法解析为 `.docker/config.json` 文件。
+
+
-## 在集群中创建保存授权令牌的 Secret
-
-Kubernetes 集群使用 `docker-registry` 类型的 Secret 来通过容器仓库的身份验证,进而提取私有映像。
+## 在命令行上提供凭证来创建 Secret {#create-a-secret-by-providing-credentials-on-the-command-line}
创建 Secret,命名为 `regcred`:
@@ -136,12 +204,22 @@ You have successfully set your Docker credentials in the cluster as a Secret cal
这样你就成功地将集群中的 Docker 凭证设置为名为 `regcred` 的 Secret。
+
+{{< note >}}
+在命令行上键入 Secret 可能会将它们存储在你的 shell 历史记录中而不受保护,
+并且这些 Secret 信息也可能在 `kubectl` 运行期间对你 PC 上的其他用户可见。
+{{< /note >}}
+
-## 检查 Secret `regcred`
+## 检查 Secret `regcred` {#inspecting-the-secret-regcred}
要了解你创建的 `regcred` Secret 的内容,可以用 YAML 格式进行查看:
@@ -217,7 +295,7 @@ You have successfully set your Docker credentials as a Secret called `regcred` i
Here is a manifest for an example Pod that needs access to your Docker credentials in `regcred`:
-->
-## 创建一个使用你的 Secret 的 Pod
+## 创建一个使用你的 Secret 的 Pod {#create-a-pod-that-uses-your-secret}
下面是一个 Pod 配置清单示例,该示例中 Pod 需要访问你的 Docker 凭证 `regcred`:
diff --git a/content/zh/docs/tasks/configure-pod-container/quality-service-pod.md b/content/zh/docs/tasks/configure-pod-container/quality-service-pod.md
index b2fdccf8fb..bce6967b22 100644
--- a/content/zh/docs/tasks/configure-pod-container/quality-service-pod.md
+++ b/content/zh/docs/tasks/configure-pod-container/quality-service-pod.md
@@ -131,13 +131,13 @@ status:
qosClass: Guaranteed
```
+{{< note >}}
-{{< note >}}
如果容器指定了自己的内存限制,但没有指定内存请求,Kubernetes 会自动为它指定与内存限制匹配的内存请求。
同样,如果容器指定了自己的 CPU 限制,但没有指定 CPU 请求,Kubernetes 会自动为它指定与 CPU 限制匹配的 CPU 请求。
{{< /note >}}
@@ -158,7 +158,7 @@ kubectl delete pod qos-demo --namespace=qos-example
A Pod is given a QoS class of Burstable if:
* The Pod does not meet the criteria for QoS class Guaranteed.
-* At least one Container in the Pod has a memory or CPU request.
+* At least one Container in the Pod has a memory or CPU request or limit.
Here is the configuration file for a Pod that has one Container. The Container has a memory limit of 200 MiB
and a memory request of 100 MiB.
@@ -168,7 +168,7 @@ and a memory request of 100 MiB.
如果满足下面条件,将会指定 Pod 的 QoS 类为 Burstable:
* Pod 不符合 Guaranteed QoS 类的标准。
-* Pod 中至少一个容器具有内存或 CPU 请求。
+* Pod 中至少一个容器具有内存或 CPU 的请求或限制。
下面是包含一个容器的 Pod 配置文件。
容器设置了内存限制 200 MiB 和内存请求 100 MiB。
diff --git a/content/zh/docs/tasks/configure-pod-container/security-context.md b/content/zh/docs/tasks/configure-pod-container/security-context.md
index 1cb617ae85..29e5a3afb3 100644
--- a/content/zh/docs/tasks/configure-pod-container/security-context.md
+++ b/content/zh/docs/tasks/configure-pod-container/security-context.md
@@ -631,7 +631,7 @@ in the `securityContext` section of your Pod or Container manifest. The
[SeccompProfile](/docs/reference/generated/kubernetes-api/{{< param "version"
>}}/#seccompprofile-v1-core) object consisting of `type` and `localhostProfile`.
Valid options for `type` include `RuntimeDefault`, `Unconfined`, and
-`Localhost`. `localhostProfile` must only be set set if `type: Localhost`. It
+`Localhost`. `localhostProfile` must only be set if `type: Localhost`. It
indicates the path of the pre-configured profile on the node, relative to the
kubelet's configured Seccomp profile location (configured with the `-root-dir`
flag).
diff --git a/content/zh/docs/tasks/configure-pod-container/share-process-namespace.md b/content/zh/docs/tasks/configure-pod-container/share-process-namespace.md
index 91e9e53733..e4144739a5 100644
--- a/content/zh/docs/tasks/configure-pod-container/share-process-namespace.md
+++ b/content/zh/docs/tasks/configure-pod-container/share-process-namespace.md
@@ -34,7 +34,7 @@ You can use this feature to configure cooperating containers, such as a log
handler sidecar container, or to troubleshoot container images that don't
include debugging utilities like a shell.
-->
-您可以使用此功能来配置协作容器,比如日志处理 sidecar 容器,或者对那些不包含诸如 shell 等调试实用工具的镜像进行故障排查。
+你可以使用此功能来配置协作容器,比如日志处理 sidecar 容器,或者对那些不包含诸如 shell 等调试实用工具的镜像进行故障排查。
@@ -110,7 +110,7 @@ Process Namespace Sharing is enabled using the `ShareProcessNamespace` field of
You can signal processes in other containers. For example, send `SIGHUP` to
nginx to restart the worker process. This requires the `SYS_PTRACE` capability.
-->
-您可以在其他容器中对进程发出信号。例如,发送 `SIGHUP` 到 nginx 以重启工作进程。这需要 `SYS_PTRACE` 功能。
+你可以在其他容器中对进程发出信号。例如,发送 `SIGHUP` 到 nginx 以重启工作进程。这需要 `SYS_PTRACE` 功能。
```
/ # kill -HUP 8
diff --git a/content/zh/docs/tasks/configure-pod-container/static-pod.md b/content/zh/docs/tasks/configure-pod-container/static-pod.md
index 72066ee9dd..a4fbc9affe 100644
--- a/content/zh/docs/tasks/configure-pod-container/static-pod.md
+++ b/content/zh/docs/tasks/configure-pod-container/static-pod.md
@@ -67,7 +67,7 @@ The `spec` of a static Pod cannot refer to other API objects
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
@@ -273,7 +273,7 @@ already be running.
You can view running containers (including static Pods) by running (on the node):
```shell
# Run this command on the node where kubelet is running
-docker ps
+crictl ps
```
The output might be something like:
@@ -287,7 +287,7 @@ The output might be something like:
```shell
# 在 kubelet 运行的节点上执行以下命令
-docker ps
+crictl ps
```
输出可能会像这样:
+```console
+CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
+129fd7d382018 docker.io/library/nginx@sha256:... 11 minutes ago Running web 0 34533c6729106
```
-CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-f6d05272b57e nginx:latest "nginx" 8 minutes ago Up 8 minutes k8s_web.6f802af4_static-web-fk-node1_default_67e24ed9466ba55986d120c867395f3c_378e5f3c
-```
+
+
+{{< note >}}
+`crictl` 会输出镜像 URI 和 SHA-256 校验和。 `NAME` 看起来像:
+`docker.io/library/nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31`。
+{{< /note >}}
{{< note >}}
要确保 kubelet 在 API 服务上有创建镜像 Pod 的权限。如果没有,创建请求会被 API 服务拒绝。
-可以看[Pod安全策略](/zh/docs/concepts/policy/pod-security-policy/)。
+可以看 [Pod 安全性准入](/zh/docs/concepts/security/pod-security-admission/)和 [Pod 安全策略](/zh/docs/concepts/security/pod-security-policy/)。
{{< /note >}}
-回到 kubelet 运行的节点上,可以手工停止 Docker 容器。
+回到 kubelet 运行的节点上,你可以手动停止容器。
可以看到过了一段时间后 kubelet 会发现容器停止了并且会自动重启 Pod:
```shell
# 在 kubelet 运行的节点上执行以下命令
# 把 ID 换为你的容器的 ID
-docker stop f6d05272b57e
+crictl stop 129fd7d382018
sleep 20
-docker ps
+crictl ps
```
-```
-CONTAINER ID IMAGE COMMAND CREATED ...
-5b920cbaf8b1 nginx:latest "nginx -g 'daemon of 2 seconds ago ...
+```console
+CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
+89db4553e1eeb docker.io/library/nginx@sha256:... 19 seconds ago Running web 1 34533c6729106
```
## 动态增加和删除静态 pod
@@ -415,16 +423,17 @@ docker ps
# 在 kubelet 运行的节点上执行以下命令
mv /etc/kubelet.d/static-web.yaml /tmp
sleep 20
-docker ps
+crictl ps
# 可以看到没有 nginx 容器在运行
mv /tmp/static-web.yaml /etc/kubelet.d/
sleep 20
-docker ps
+crictl ps
```
-```
-CONTAINER ID IMAGE COMMAND CREATED ...
-e7a62e3427f1 nginx:latest "nginx -g 'daemon of 27 seconds ago
+```console
+CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID
+f427638871c35 docker.io/library/nginx@sha256:... 19 seconds ago Running web 1 34533c6729106
```
+
diff --git a/content/zh/docs/tasks/configure-pod-container/translate-compose-kubernetes.md b/content/zh/docs/tasks/configure-pod-container/translate-compose-kubernetes.md
index 6a96b492a6..8939505567 100644
--- a/content/zh/docs/tasks/configure-pod-container/translate-compose-kubernetes.md
+++ b/content/zh/docs/tasks/configure-pod-container/translate-compose-kubernetes.md
@@ -1,15 +1,14 @@
---
-reviewers:
-- cdrage
title: 将 Docker Compose 文件转换为 Kubernetes 资源
content_type: task
weight: 200
---
-
@@ -36,7 +35,7 @@ More information can be found on the Kompose website at [http://kompose.io](http
We have multiple ways to install Kompose. Our preferred method is downloading the binary from the latest GitHub release.
-->
-## 安装 Kompose
+## 安装 Kompose {#install-kompose}
我们有很多种方式安装 Kompose。首选方式是从最新的 GitHub 发布页面下载二进制文件。
@@ -132,7 +131,7 @@ brew install kompose
-## 使用 Kompose
+## 使用 Kompose {#use-kompose}
- 进入 `docker-compose.yml` 文件所在的目录。如果没有,请使用下面这个进行测试。
+
+1. 进入 `docker-compose.yml` 文件所在的目录。如果没有,请使用下面这个进行测试。
```yaml
version: "2"
@@ -174,10 +174,10 @@ you need is an existing `docker-compose.yml` file.
2. 要将 `docker-compose.yml` 转换为 `kubectl` 可用的文件,请运行 `kompose convert`
- 命令进行转换,然后运行 `kubectl create -f ` 进行创建。
+ 命令进行转换,然后运行 `kubectl apply -f ` 进行创建。
```shell
kompose convert
@@ -318,7 +318,7 @@ Kompose 支持将 V1、V2 和 V3 版本的 Docker Compose 文件转换为 Kubern
-### Kubernetes `kompose convert` 示例
+### Kubernetes `kompose convert` 示例 {#kubernetes-kompose-convert-example}
```shell
kompose --file docker-voting.yml convert
@@ -390,7 +390,7 @@ When multiple docker-compose files are provided the configuration is merged. Any
-### OpenShift `kompose convert` 示例
+### OpenShift `kompose convert` 示例 {#openshift-kompose-convert-example}
```shell
kompose --provider openshift --file docker-voting.yml convert
@@ -438,7 +438,7 @@ If you are manually pushing the Openshift artifacts using ``oc create -f``, you
-->
{{< note >}}
如果使用 ``oc create -f`` 手动推送 Openshift 工件,则需要确保在构建配置工件之前推送
-imagestream 工件,以解决 Openshift 的这个问题:https://github.com/openshift/origin/issues/4518 。
+imagestream 工件,以解决 Openshift 的这个问题: https://github.com/openshift/origin/issues/4518 。
{{< /note >}}
-### 关于 Deployment Config 的提醒
+### 关于 Deployment Config 的提醒 {#warning-about-deployment-configurations}
-如果 Docker Compose 文件中为服务声明了卷,Deployment (Kubernetes) 或
-DeploymentConfig (OpenShift) 策略会从 "RollingUpdate" (默认) 变为 "Recreate"。
+如果 Docker Compose 文件中为服务声明了卷,Deployment(Kubernetes)或
+DeploymentConfig(OpenShift)策略会从 “RollingUpdate”(默认)变为 “Recreate”。
这样做的目的是为了避免服务的多个实例同时访问卷。
如果 Docker Compose 文件中的服务名包含 `_`(例如 `web_service`),
那么将会被替换为 `-`,服务也相应的会重命名(例如 `web-service`)。
-Kompose 这样做的原因是 "Kubernetes" 不允许对象名称中包含 `_`。
+Kompose 这样做的原因是 “Kubernetes” 不允许对象名称中包含 `_`。
请注意,更改服务名称可能会破坏一些 `docker-compose` 文件。
@@ -711,4 +711,3 @@ Kompose 支持的 Docker Compose 版本包括:1、2 和 3。
所有三个版本的兼容性列表请查看我们的
[转换文档](https://github.com/kubernetes/kompose/blob/master/docs/conversion.md),
文档中列出了所有不兼容的 Docker Compose 关键字。
-
diff --git a/content/zh/docs/tasks/debug-application-cluster/_index.md b/content/zh/docs/tasks/debug-application-cluster/_index.md
deleted file mode 100644
index 15912bf00c..0000000000
--- a/content/zh/docs/tasks/debug-application-cluster/_index.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: "监控、日志和排错"
-weight: 80
-description: 设置监视和日志记录以对集群进行故障排除或调试容器化应用。
----
diff --git a/content/zh/docs/tasks/debug-application-cluster/debug-application-introspection.md b/content/zh/docs/tasks/debug-application-cluster/debug-application-introspection.md
deleted file mode 100644
index 7210356959..0000000000
--- a/content/zh/docs/tasks/debug-application-cluster/debug-application-introspection.md
+++ /dev/null
@@ -1,541 +0,0 @@
----
-reviewers:
-- janetkuo
-- thockin
-content_type: concept
-title: 应用自测与调试
----
-
-
-
-
-运行应用时,不可避免的需要定位问题。
-前面我们介绍了如何使用 `kubectl get pods` 来查询 pod 的简单信息。
-除此之外,还有一系列的方法来获取应用的更详细信息。
-
-
-
-
-## 使用 `kubectl describe pod` 命令获取 Pod 详情
-
-
-与之前的例子类似,我们使用一个 Deployment 来创建两个 Pod。
-
-{{< codenew file="application/nginx-with-request.yaml" >}}
-
-
-使用如下命令创建 Deployment:
-
-```shell
-kubectl apply -f https://k8s.io/examples/application/nginx-with-request.yaml
-```
-
-```
-deployment.apps/nginx-deployment created
-```
-
-
-使用如下命令查看 Pod 状态:
-
-```shell
-kubectl get pods
-```
-
-```
-NAME READY STATUS RESTARTS AGE
-nginx-deployment-1006230814-6winp 1/1 Running 0 11s
-nginx-deployment-1006230814-fmgu3 1/1 Running 0 11s
-```
-
-
-我们可以使用 `kubectl describe pod` 命令来查询每个 Pod 的更多信息,比如:
-
-```shell
-kubectl describe pod nginx-deployment-1006230814-6winp
-```
-
-```
-Name: nginx-deployment-1006230814-6winp
-Namespace: default
-Node: kubernetes-node-wul5/10.240.0.9
-Start Time: Thu, 24 Mar 2016 01:39:49 +0000
-Labels: app=nginx,pod-template-hash=1006230814
-Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"default","name":"nginx-deployment-1956810328","uid":"14e607e7-8ba1-11e7-b5cb-fa16" ...
-Status: Running
-IP: 10.244.0.6
-Controllers: ReplicaSet/nginx-deployment-1006230814
-Containers:
- nginx:
- Container ID: docker://90315cc9f513c724e9957a4788d3e625a078de84750f244a40f97ae355eb1149
- Image: nginx
- Image ID: docker://6f62f48c4e55d700cf3eb1b5e33fa051802986b77b874cc351cce539e5163707
- Port: 80/TCP
- QoS Tier:
- cpu: Guaranteed
- memory: Guaranteed
- Limits:
- cpu: 500m
- memory: 128Mi
- Requests:
- memory: 128Mi
- cpu: 500m
- State: Running
- Started: Thu, 24 Mar 2016 01:39:51 +0000
- Ready: True
- Restart Count: 0
- Environment:
- Mounts:
- /var/run/secrets/kubernetes.io/serviceaccount from default-token-5kdvl (ro)
-Conditions:
- Type Status
- Initialized True
- Ready True
- PodScheduled True
-Volumes:
- default-token-4bcbi:
- Type: Secret (a volume populated by a Secret)
- SecretName: default-token-4bcbi
- Optional: false
-QoS Class: Guaranteed
-Node-Selectors:
-Tolerations:
-Events:
- FirstSeen LastSeen Count From SubobjectPath Type Reason Message
- --------- -------- ----- ---- ------------- -------- ------ -------
- 54s 54s 1 {default-scheduler } Normal Scheduled Successfully assigned nginx-deployment-1006230814-6winp to kubernetes-node-wul5
- 54s 54s 1 {kubelet kubernetes-node-wul5} spec.containers{nginx} Normal Pulling pulling image "nginx"
- 53s 53s 1 {kubelet kubernetes-node-wul5} spec.containers{nginx} Normal Pulled Successfully pulled image "nginx"
- 53s 53s 1 {kubelet kubernetes-node-wul5} spec.containers{nginx} Normal Created Created container with docker id 90315cc9f513
- 53s 53s 1 {kubelet kubernetes-node-wul5} spec.containers{nginx} Normal Started Started container with docker id 90315cc9f513
-```
-
-
-这里可以看到容器和 Pod 的标签、资源需求等配置信息,还可以看到状态、就绪态、
-重启次数、事件等状态信息。
-
-
-容器状态是 Waiting、Running 和 Terminated 之一。
-根据状态的不同,还有对应的额外的信息 —— 在这里你可以看到,
-对于处于运行状态的容器,系统会告诉你容器的启动时间。
-
-
-Ready 指示是否通过了最后一个就绪态探测。
-(在本例中,容器没有配置就绪态探测;如果没有配置就绪态探测,则假定容器已经就绪。)
-
-
-Restart Count 告诉你容器已重启的次数;
-这些信息对于定位配置了 “Always” 重启策略的容器持续崩溃问题非常有用。
-
-
-目前,唯一与 Pod 有关的状态是 Ready 状况,该状况表明 Pod 能够为请求提供服务,
-并且应该添加到相应服务的负载均衡池中。
-
-
-最后,你还可以看到与 Pod 相关的近期事件。
-系统通过指示第一次和最后一次看到事件以及看到该事件的次数来压缩多个相同的事件。
-“From” 标明记录事件的组件,
-“SubobjectPath” 告诉你引用了哪个对象(例如 Pod 中的容器),
-“Reason” 和 “Message” 告诉你发生了什么。
-
-
-## 例子: 调试 Pending 状态的 Pod
-
-可以使用事件来调试的一个常见的场景是,你创建 Pod 无法被调度到任何节点。
-比如,Pod 请求的资源比较多,没有任何一个节点能够满足,或者它指定了一个标签,没有节点可匹配。
-假定我们创建之前的 Deployment 时指定副本数是 5(不再是 2),并且请求 600 毫核(不再是 500),
-对于一个 4 个节点的集群,若每个节点只有 1 个 CPU,这时至少有一个 Pod 不能被调度。
-(需要注意的是,其他集群插件 Pod,比如 fluentd、skydns 等等会在每个节点上运行,
-如果我们需求 1000 毫核,将不会有 Pod 会被调度。)
-
-```shell
-kubectl get pods
-```
-
-```
-NAME READY STATUS RESTARTS AGE
-nginx-deployment-1006230814-6winp 1/1 Running 0 7m
-nginx-deployment-1006230814-fmgu3 1/1 Running 0 7m
-nginx-deployment-1370807587-6ekbw 1/1 Running 0 1m
-nginx-deployment-1370807587-fg172 0/1 Pending 0 1m
-nginx-deployment-1370807587-fz9sd 0/1 Pending 0 1m
-```
-
-
-为了查找 Pod nginx-deployment-1370807587-fz9sd 没有运行的原因,我们可以使用
-`kubectl describe pod` 命令描述 Pod,查看其事件:
-
-```shell
-kubectl describe pod nginx-deployment-1370807587-fz9sd
-```
-
-```
- Name: nginx-deployment-1370807587-fz9sd
- Namespace: default
- Node: /
- Labels: app=nginx,pod-template-hash=1370807587
- Status: Pending
- IP:
- Controllers: ReplicaSet/nginx-deployment-1370807587
- Containers:
- nginx:
- Image: nginx
- Port: 80/TCP
- QoS Tier:
- memory: Guaranteed
- cpu: Guaranteed
- Limits:
- cpu: 1
- memory: 128Mi
- Requests:
- cpu: 1
- memory: 128Mi
- Environment Variables:
- Volumes:
- default-token-4bcbi:
- Type: Secret (a volume populated by a Secret)
- SecretName: default-token-4bcbi
- Events:
- FirstSeen LastSeen Count From SubobjectPath Type Reason Message
- --------- -------- ----- ---- ------------- -------- ------ -------
- 1m 48s 7 {default-scheduler } Warning FailedScheduling pod (nginx-deployment-1370807587-fz9sd) failed to fit in any node
- fit failure on node (kubernetes-node-6ta5): Node didn't have enough resource: CPU, requested: 1000, used: 1420, capacity: 2000
- fit failure on node (kubernetes-node-wul5): Node didn't have enough resource: CPU, requested: 1000, used: 1100, capacity: 2000
-```
-
-
-这里你可以看到由调度器记录的事件,它表明了 Pod 不能被调度的原因是 `FailedScheduling`(也可能是其他值)。
-其 message 部分表明没有任何节点拥有足够多的资源。
-
-
-要纠正这种情况,可以使用 `kubectl scale` 更新 Deployment,以指定 4 个或更少的副本。
-(或者你可以让 Pod 继续保持这个状态,这是无害的。)
-
-
-你在 `kubectl describe pod` 结尾处看到的事件都保存在 etcd 中,
-并提供关于集群中正在发生的事情的高级信息。
-如果需要列出所有事件,可使用命令:
-
-```shell
-kubectl get events
-```
-
-
-但是,需要注意的是,事件是区分名字空间的。
-如果你对某些名字空间域的对象(比如 `my-namespace` 名字下的 Pod)的事件感兴趣,
-你需要显式地在命令行中指定名字空间:
-
-```shell
-kubectl get events --namespace=my-namespace
-```
-
-
-查看所有 namespace 的事件,可使用 `--all-namespaces` 参数。
-
-
-除了 `kubectl describe pod` 以外,另一种获取 Pod 额外信息(除了 `kubectl get pod`)的方法
-是给 `kubectl get pod` 增加 `-o yaml` 输出格式参数。
-该命令将以 YAML 格式为你提供比 `kubectl describe pod` 更多的信息 —— 实际上是系统拥有的关于 Pod 的所有信息。
-在这里,你将看到注解(没有标签限制的键值元数据,由 Kubernetes 系统组件在内部使用)、
-重启策略、端口和卷等。
-
-```shell
-kubectl get pod nginx-deployment-1006230814-6winp -o yaml
-```
-
-```yaml
-apiVersion: v1
-kind: Pod
-metadata:
- annotations:
- kubernetes.io/created-by: |
- {"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"default","name":"nginx-deployment-1006230814","uid":"4c84c175-f161-11e5-9a78-42010af00005","apiVersion":"extensions","resourceVersion":"133434"}}
- creationTimestamp: 2016-03-24T01:39:50Z
- generateName: nginx-deployment-1006230814-
- labels:
- app: nginx
- pod-template-hash: "1006230814"
- name: nginx-deployment-1006230814-6winp
- namespace: default
- resourceVersion: "133447"
- uid: 4c879808-f161-11e5-9a78-42010af00005
-spec:
- containers:
- - image: nginx
- imagePullPolicy: Always
- name: nginx
- ports:
- - containerPort: 80
- protocol: TCP
- resources:
- limits:
- cpu: 500m
- memory: 128Mi
- requests:
- cpu: 500m
- memory: 128Mi
- terminationMessagePath: /dev/termination-log
- volumeMounts:
- - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
- name: default-token-4bcbi
- readOnly: true
- dnsPolicy: ClusterFirst
- nodeName: kubernetes-node-wul5
- restartPolicy: Always
- securityContext: {}
- serviceAccount: default
- serviceAccountName: default
- terminationGracePeriodSeconds: 30
- volumes:
- - name: default-token-4bcbi
- secret:
- secretName: default-token-4bcbi
-status:
- conditions:
- - lastProbeTime: null
- lastTransitionTime: 2016-03-24T01:39:51Z
- status: "True"
- type: Ready
- containerStatuses:
- - containerID: docker://90315cc9f513c724e9957a4788d3e625a078de84750f244a40f97ae355eb1149
- image: nginx
- imageID: docker://6f62f48c4e55d700cf3eb1b5e33fa051802986b77b874cc351cce539e5163707
- lastState: {}
- name: nginx
- ready: true
- restartCount: 0
- state:
- running:
- startedAt: 2016-03-24T01:39:51Z
- hostIP: 10.240.0.9
- phase: Running
- podIP: 10.244.0.6
- startTime: 2016-03-24T01:39:49Z
-```
-
-
-## 示例:调试宕机或无法联系的节点
-
-有时候,在调试时,查看节点的状态是很有用的 —— 例如,因为你已经注意到节点上运行的 Pod 的奇怪行为,
-或者想了解为什么 Pod 不会调度到节点上。
-与 Pod 一样,你可以使用 `kubectl describe node` 和 `kubectl get node -o yaml` 来查询节点的详细信息。
-例如,如果某个节点宕机(与网络断开连接,或者 kubelet 挂掉无法重新启动等等),你将看到以下情况。
-请注意显示节点未就绪的事件,也请注意 Pod 不再运行(它们在5分钟未就绪状态后被驱逐)。
-
-```shell
-kubectl get nodes
-```
-
-```
-NAME STATUS ROLES AGE VERSION
-kubernetes-node-861h NotReady 1h v1.13.0
-kubernetes-node-bols Ready 1h v1.13.0
-kubernetes-node-st6x Ready 1h v1.13.0
-kubernetes-node-unaj Ready 1h v1.13.0
-```
-
-```shell
-kubectl describe node kubernetes-node-861h
-```
-
-```none
-Name: kubernetes-node-861h
-Role
-Labels: kubernetes.io/arch=amd64
- kubernetes.io/os=linux
- kubernetes.io/hostname=kubernetes-node-861h
-Annotations: node.alpha.kubernetes.io/ttl=0
- volumes.kubernetes.io/controller-managed-attach-detach=true
-Taints:
-CreationTimestamp: Mon, 04 Sep 2017 17:13:23 +0800
-Phase:
-Conditions:
- Type Status LastHeartbeatTime LastTransitionTime Reason Message
- ---- ------ ----------------- ------------------ ------ -------
- OutOfDisk Unknown Fri, 08 Sep 2017 16:04:28 +0800 Fri, 08 Sep 2017 16:20:58 +0800 NodeStatusUnknown Kubelet stopped posting node status.
- MemoryPressure Unknown Fri, 08 Sep 2017 16:04:28 +0800 Fri, 08 Sep 2017 16:20:58 +0800 NodeStatusUnknown Kubelet stopped posting node status.
- DiskPressure Unknown Fri, 08 Sep 2017 16:04:28 +0800 Fri, 08 Sep 2017 16:20:58 +0800 NodeStatusUnknown Kubelet stopped posting node status.
- Ready Unknown Fri, 08 Sep 2017 16:04:28 +0800 Fri, 08 Sep 2017 16:20:58 +0800 NodeStatusUnknown Kubelet stopped posting node status.
-Addresses: 10.240.115.55,104.197.0.26
-Capacity:
- cpu: 2
- hugePages: 0
- memory: 4046788Ki
- pods: 110
-Allocatable:
- cpu: 1500m
- hugePages: 0
- memory: 1479263Ki
- pods: 110
-System Info:
- Machine ID: 8e025a21a4254e11b028584d9d8b12c4
- System UUID: 349075D1-D169-4F25-9F2A-E886850C47E3
- Boot ID: 5cd18b37-c5bd-4658-94e0-e436d3f110e0
- Kernel Version: 4.4.0-31-generic
- OS Image: Debian GNU/Linux 8 (jessie)
- Operating System: linux
- Architecture: amd64
- Container Runtime Version: docker://1.12.5
- Kubelet Version: v1.6.9+a3d1dfa6f4335
- Kube-Proxy Version: v1.6.9+a3d1dfa6f4335
-ExternalID: 15233045891481496305
-Non-terminated Pods: (9 in total)
- Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits
- --------- ---- ------------ ---------- --------------- -------------
-......
-Allocated resources:
- (Total limits may be over 100 percent, i.e., overcommitted.)
- CPU Requests CPU Limits Memory Requests Memory Limits
- ------------ ---------- --------------- -------------
- 900m (60%) 2200m (146%) 1009286400 (66%) 5681286400 (375%)
-Events:
-```
-
-```shell
-kubectl get node kubernetes-node-861h -o yaml
-```
-
-```yaml
-apiVersion: v1
-kind: Node
-metadata:
- creationTimestamp: 2015-07-10T21:32:29Z
- labels:
- kubernetes.io/hostname: kubernetes-node-861h
- name: kubernetes-node-861h
- resourceVersion: "757"
- selfLink: /api/v1/nodes/kubernetes-node-861h
- uid: 2a69374e-274b-11e5-a234-42010af0d969
-spec:
- externalID: "15233045891481496305"
- podCIDR: 10.244.0.0/24
- providerID: gce://striped-torus-760/us-central1-b/kubernetes-node-861h
-status:
- addresses:
- - address: 10.240.115.55
- type: InternalIP
- - address: 104.197.0.26
- type: ExternalIP
- capacity:
- cpu: "1"
- memory: 3800808Ki
- pods: "100"
- conditions:
- - lastHeartbeatTime: 2015-07-10T21:34:32Z
- lastTransitionTime: 2015-07-10T21:35:15Z
- reason: Kubelet stopped posting node status.
- status: Unknown
- type: Ready
- nodeInfo:
- bootID: 4e316776-b40d-4f78-a4ea-ab0d73390897
- containerRuntimeVersion: docker://Unknown
- kernelVersion: 3.16.0-0.bpo.4-amd64
- kubeProxyVersion: v0.21.1-185-gffc5a86098dc01
- kubeletVersion: v0.21.1-185-gffc5a86098dc01
- machineID: ""
- osImage: Debian GNU/Linux 7 (wheezy)
- systemUUID: ABE5F6B4-D44B-108B-C46A-24CCE16C8B6E
-```
-
-## {{% heading "whatsnext" %}}
-
-
-了解更多的调试工具:
-
-
-* [日志](/zh/docs/concepts/cluster-administration/logging/)
-* [监控](/zh/docs/tasks/debug-application-cluster/resource-usage-monitoring/)
-* [使用 `exec` 进入容器](/zh/docs/tasks/debug-application-cluster/get-shell-running-container/)
-* [使用代理连接容器](/zh/docs/tasks/extend-kubernetes/http-proxy-access-api/)
-* [使用端口转发连接容器](/zh/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)
-* [使用 crictl 检查节点](/zh/docs/tasks/debug-application-cluster/crictl/)
-
diff --git a/content/zh/docs/tasks/debug-application-cluster/debug-cluster.md b/content/zh/docs/tasks/debug-application-cluster/debug-cluster.md
deleted file mode 100644
index 7f7ffff4e8..0000000000
--- a/content/zh/docs/tasks/debug-application-cluster/debug-cluster.md
+++ /dev/null
@@ -1,252 +0,0 @@
----
-title: 集群故障排查
-content_type: concept
----
-
-
-
-
-
-本篇文档是介绍集群故障排查的;我们假设对于你碰到的问题,你已经排除了是由应用程序造成的。
-对于应用的调试,请参阅
-[应用故障排查指南](/zh/docs/tasks/debug-application-cluster/debug-application/)。
-你也可以访问[故障排查](/zh/docs/tasks/debug-application-cluster/troubleshooting/)
-来获取更多的信息。
-
-
-
-
-## 列举集群节点
-
-调试的第一步是查看所有的节点是否都已正确注册。
-
-运行
-
-```shell
-kubectl get nodes
-```
-
-
-验证你所希望看见的所有节点都能够显示出来,并且都处于 `Ready` 状态。
-
-为了了解你的集群的总体健康状况详情,你可以运行:
-
-```shell
-kubectl cluster-info dump
-```
-
-
-## 查看日志
-
-到这里,挖掘出集群更深层的信息就需要登录到相关的机器上。下面是相关日志文件所在的位置。
-(注意,对于基于 systemd 的系统,你可能需要使用`journalctl`)。
-
-
-### 主控节点
-
-* `/var/log/kube-apiserver.log` - API 服务器, 提供API服务
-* `/var/log/kube-scheduler.log` - 调度器, 负责产生调度决策
-* `/var/log/kube-controller-manager.log` - 管理副本控制器的控制器
-
-
-
-### 工作节点
-
-* `/var/log/kubelet.log` - `kubelet`,负责在节点运行容器
-* `/var/log/kube-proxy.log` - `kube-proxy`, 负责服务的负载均衡
-
-
-
-## 集群故障模式的一般性概述
-
-下面是一个不完整的列表,列举了一些可能的出错场景,以及通过调整集群配置来解决相关问题的方法。
-
-
-### 根本原因
-
- - VM(s) 关机
- - 集群之间,或者集群和用户之间网络分裂
- - Kubernetes 软件本身崩溃
- - 数据丢失或者持久化存储不可用(如:GCE PD 或 AWS EBS 卷)
- - 操作错误,如:Kubernetes 或者应用程序配置错误
-
-
-### 具体情况
-
-- API 服务器所在的 VM 关机或者 API 服务器崩溃
- - 结果
- - 不能停止、更新或者启动新的 Pod、服务或副本控制器
- - 现有的 Pod 和服务在不依赖 Kubernetes API 的情况下应该能继续正常工作
-- API 服务器的后端存储丢失
- - 结果
- - API 服务器应该不能启动
- - kubelet 将不能访问 API 服务器,但是能够继续运行之前的 Pod 和提供相同的服务代理
- - 在 API 服务器重启之前,需要手动恢复或者重建 API 服务器的状态
-
-- Kubernetes 服务组件(节点控制器、副本控制器管理器、调度器等)所在的 VM 关机或者崩溃
- - 当前,这些控制器是和 API 服务器在一起运行的,它们不可用的现象是与 API 服务器类似的
- - 将来,这些控制器也会复制为多份,并且可能不在运行于同一节点上
- - 它们没有自己的持久状态
-- 单个节点(VM 或者物理机)关机
- - 结果
- - 此节点上的所有 Pod 都停止运行
-- 网络分裂
- - 结果
- - 分区 A 认为分区 B 中所有的节点都已宕机;分区 B 认为 API 服务器宕机
- (假定主控节点所在的 VM 位于分区 A 内)。
-
-- kubelet 软件故障
- - 结果
- - 崩溃的 kubelet 就不能在其所在的节点上启动新的 Pod
- - kubelet 可能删掉 Pod 或者不删
- - 节点被标识为非健康态
- - 副本控制器会在其它的节点上启动新的 Pod
-- 集群操作错误
- - 结果
- - 丢失 Pod 或服务等等
- - 丢失 API 服务器的后端存储
- - 用户无法读取API
- - 等等
-
-
-### 缓解措施
-
-- 措施:对于 IaaS 上的 VMs,使用 IaaS 的自动 VM 重启功能
- - 缓解:API 服务器 VM 关机或 API 服务器崩溃
- - 缓解:Kubernetes 服务组件所在的 VM 关机或崩溃
-
-- 措施: 对于运行 API 服务器和 etcd 的 VM,使用 IaaS 提供的可靠的存储(例如 GCE PD 或者 AWS EBS 卷)
- - 缓解:API 服务器后端存储的丢失
-
-- 措施:使用[高可用性](/zh/docs/setup/production-environment/tools/kubeadm/high-availability/)的配置
- - 缓解:主控节点 VM 关机或者主控节点组件(调度器、API 服务器、控制器管理器)崩馈
- - 将容许一个或多个节点或组件同时出现故障
- - 缓解:API 服务器后端存储(例如 etcd 的数据目录)丢失
- - 假定你使用了高可用的 etcd 配置
-
-
-- 措施:定期对 API 服务器的 PDs/EBS 卷执行快照操作
- - 缓解:API 服务器后端存储丢失
- - 缓解:一些操作错误的场景
- - 缓解:一些 Kubernetes 软件本身故障的场景
-
-- 措施:在 Pod 的前面使用副本控制器或服务
- - 缓解:节点关机
- - 缓解:kubelet 软件故障
-
-- 措施:应用(容器)设计成容许异常重启
- - 缓解:节点关机
- - 缓解:kubelet 软件故障
-
diff --git a/content/zh/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md b/content/zh/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md
deleted file mode 100644
index 749091bfbc..0000000000
--- a/content/zh/docs/tasks/debug-application-cluster/debug-pod-replication-controller.md
+++ /dev/null
@@ -1,188 +0,0 @@
----
-title: 调试 Pods 和 ReplicationControllers
-content_type: task
----
-
-
-
-
-
-此页面展示如何调试 Pod 和 ReplicationController。
-
-
-## {{% heading "prerequisites" %}}
-
-{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
-
-
-* 你应该先熟悉 [Pods](/zh/docs/concepts/workloads/pods/) 和
- [Pod 生命周期](/zh/docs/concepts/workloads/pods/pod-lifecycle/) 的基础概念。
-
-
-
-
-## 调试 Pod {#debugging-pods}
-
-调试一个 pod 的第一步是观察它。使用下面的命令检查 Pod 的当前状态和最近事件:
-
-```shell
-kubectl describe pods ${POD_NAME}
-```
-
-
-看看 Pod 中的容器的状态。它们都是 `Running` 吗?最近有重启吗?
-
-根据 Pod 的状态继续调试。
-
-
-
-
-### 我的 Pod 停滞在 Pending 状态
-
-如果 Pod 被卡在 `Pending` 状态,就意味着它不能调度在某个节点上。一般来说,这是因为某种类型的资源不足而
-导致无法调度。 查看上面的命令 `kubectl describe ...` 的输出。调度器的消息中应该会包含无法调度 Pod 的原因。
-原因包括:
-
-
-#### 资源不足
-
-你可能已经耗尽了集群中供应的 CPU 或内存。在这个情况下你可以尝试几件事情:
-
-* 向集群中添加节点。
-
-* [终止不需要的 Pod](/zh/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination)
- 为 Pending 状态的 Pod 提供空间。
-
-* 检查该 Pod 是否不大于你的节点。例如,如果全部节点具有 `cpu:1` 容量,那么具有
- 请求为 `cpu: 1.1` 的 Pod 永远不会被调度。
-
- 你可以使用 `kubectl get nodes -o ` 命令来检查节点容量。
- 下面是一些能够提取必要信息的命令示例:
-
- ```shell
- kubectl get nodes -o yaml | egrep '\sname:|cpu:|memory:'
- kubectl get nodes -o json | jq '.items[] | {name: .metadata.name, cap: .status.capacity}'
- ```
-
-
- 可以考虑配置[资源配额](/zh/docs/concepts/policy/resource-quotas/) 来限制可耗用的资源总量。
- 如果与命名空间一起使用,它可以防止一个团队吞噬所有的资源。
-
-
-#### 使用 hostPort
-
-当你将一个 Pod 绑定到某 `hostPort` 时,这个 Pod 能被调度的位置数量有限。
-在大多数情况下,`hostPort` 是不必要的; 尝试使用服务对象来暴露你的 Pod。
-如果你需要 `hostPort`,那么你可以调度的 Pod 数量不能超过集群的节点个数。
-
-
-### 我的 Pod 一直在 Waiting
-
-如果 Pod 一直停滞在 `Waiting` 状态,那么它已被调度在某个工作节点,但它不能在该机器上运行。
-再次,来自 `kubectl describe ...` 的内容应该是可以是很有用的。
-最常见的原因 `Waiting` 的 Pod 是无法拉取镜像。有三件事要检查:
-
-* 确保你的镜像的名称正确。
-* 你是否将镜像推送到存储库?
-* 在你的机器上手动运行 `docker pull `,看看是否可以拉取镜像。
-
-
-### 我的 Pod 一直 Crashing 或者其他不健康状态
-
-一旦 Pod 已经被调度,就可以依据
-[调试运行中的 Pod](/zh/docs/tasks/debug-application-cluster/debug-running-pod/)
-展开进一步的调试工作。
-
-
-## 调试 Replication Controller
-
-Replication Controller 相当简单。它们或者能或者不能创建 Pod。如果它们无法创建 Pod,
-请参考[上面的说明](#debugging_pods) 来调试你的 Pod。
-
-
-你也可以使用 `kubectl describe rc ${CONTROLLER_NAME}` 来检查和副本控制器有关的事件。
-
diff --git a/content/zh/docs/tasks/debug-application-cluster/troubleshooting.md b/content/zh/docs/tasks/debug/_index.md
similarity index 93%
rename from content/zh/docs/tasks/debug-application-cluster/troubleshooting.md
rename to content/zh/docs/tasks/debug/_index.md
index 32502a6386..8d154fd57c 100644
--- a/content/zh/docs/tasks/debug-application-cluster/troubleshooting.md
+++ b/content/zh/docs/tasks/debug/_index.md
@@ -1,17 +1,19 @@
---
+title: 监控、日志和调试
+description: 设置监控和日志记录以对集群进行故障排除或调试容器化应用程序。
+weight: 20
+content_type: concept
+no_list: true
+---
+
@@ -23,12 +25,14 @@ two sections:
有时候事情会出错。本指南旨在解决这些问题。它包含两个部分:
-* [应用排错](/zh/docs/tasks/debug-application-cluster/debug-application/) -
+* [应用排错](/zh/docs/tasks/debug/debug-application/) -
针对部署代码到 Kubernetes 并想知道代码为什么不能正常运行的用户。
-* [集群排错](/zh/docs/tasks/debug-application-cluster/debug-cluster/) -
+* [集群排错](/zh/docs/tasks/debug/debug-cluster/) -
针对集群管理员以及 Kubernetes 集群表现异常的用户。
+
+
+该文档包含一组用于解决容器化应用程序问题的资源。
+它涵盖了诸如 Kubernetes 资源(如 Pod、Service 或 StatefulSets)的常见问题、
+关于理解容器终止消息的建议以及调试正在运行的容器的方法。
diff --git a/content/zh/docs/tasks/debug-application-cluster/debug-init-containers.md b/content/zh/docs/tasks/debug/debug-application/debug-init-containers.md
similarity index 99%
rename from content/zh/docs/tasks/debug-application-cluster/debug-init-containers.md
rename to content/zh/docs/tasks/debug/debug-application/debug-init-containers.md
index c859455873..ff5f4a7310 100644
--- a/content/zh/docs/tasks/debug-application-cluster/debug-init-containers.md
+++ b/content/zh/docs/tasks/debug/debug-application/debug-init-containers.md
@@ -1,6 +1,7 @@
---
title: 调试 Init 容器
content_type: task
+weight: 40
---
diff --git a/content/zh/docs/tasks/debug-application-cluster/debug-application.md b/content/zh/docs/tasks/debug/debug-application/debug-pods.md
similarity index 84%
rename from content/zh/docs/tasks/debug-application-cluster/debug-application.md
rename to content/zh/docs/tasks/debug/debug-application/debug-pods.md
index 2e71c22af0..e3fe206b3a 100644
--- a/content/zh/docs/tasks/debug-application-cluster/debug-application.md
+++ b/content/zh/docs/tasks/debug/debug-application/debug-pods.md
@@ -1,10 +1,16 @@
---
-title: 应用故障排查
+title: 调试 Pod
content_type: concept
+weight: 10
---
-
@@ -12,12 +18,12 @@ content_type: concept
本指南帮助用户调试那些部署到 Kubernetes 上后没有正常运行的应用。
-本指南 *并非* 指导用户如何调试集群。
-如果想调试集群的话,请参阅[这里](/zh/docs/tasks/debug-application-cluster/debug-cluster/)。
+本指南 **并非** 指导用户如何调试集群。
+如果想调试集群的话,请参阅[这里](/zh/docs/tasks/debug/debug-cluster)。
@@ -34,18 +40,18 @@ your Service?
-->
## 诊断问题 {#diagnosing-the-problem}
-故障排查的第一步是先给问题分类。问题是什么?是关于 Pods、Replication Controller 还是 Service?
+故障排查的第一步是先给问题分类。问题是什么?是关于 Pod、Replication Controller 还是 Service?
-* [调试 Pods](#debugging-pods)
-* [调试副本控制器](#debugging-replication-controllers)
-* [调试服务](#debugging-services)
+* [调试 Pod](#debugging-pods)
+* [调试 Replication Controller](#debugging-replication-controllers)
+* [调试 Service](#debugging-services)
-### 调试 Pods {#debugging-pods}
+### 调试 Pod {#debugging-pods}
调试 Pod 的第一步是查看 Pod 信息。用如下命令查看 Pod 的当前状态和最近的事件:
@@ -79,7 +85,8 @@ your pod. Reasons include:
#### Pod 停滞在 Waiting 状态
@@ -113,18 +121,18 @@ Again, the information from `kubectl describe ...` should be informative. The m
* 确保镜像名字拼写正确
* 确保镜像已被推送到镜像仓库
-* 用手动命令 `docker pull <镜像>` 试试看镜像是否可拉取
+* 尝试手动是否能拉取镜像。例如,如果你在你的 PC 上使用 Docker,请运行 `docker pull <镜像>`。
#### Pod 处于 Crashing 或别的不健康状态
一旦 Pod 被调度,就可以采用
-[调试运行中的 Pod](/zh/docs/tasks/debug-application-cluster/debug-running-pod/)
+[调试运行中的 Pod](/zh/docs/tasks/debug/debug-application/debug-running-pod/)
中的方法来进一步调试。
-### 调试服务 {#debugging-services}
+### 调试 Service {#debugging-services}
服务支持在多个 Pod 间负载均衡。
有一些常见的问题可以造成服务无法正常工作。
@@ -227,7 +235,7 @@ For example, if your Service is for an nginx container with 3 replicas, you woul
IP addresses in the Service's endpoints.
-->
确保 Endpoints 与服务成员 Pod 个数一致。
-例如,如果你的 Service 用来运行 3 个副本的 nginx 容器,你应该会在服务的 Endpoints
+例如,如果你的 Service 用来运行 3 个副本的 nginx 容器,你应该会在 Service 的 Endpoints
中看到 3 个不同的 IP 地址。
#### 网络流量未被转发
-请参阅[调试 service](/zh/docs/tasks/debug-application-cluster/debug-service/) 了解更多信息。
+请参阅[调试 Service](/zh/docs/tasks/debug/debug-applications/debug-service/) 了解更多信息。
## {{% heading "whatsnext" %}}
-如果上述方法都不能解决你的问题,请按照
-[调试服务文档](/zh/docs/tasks/debug-application-cluster/debug-service/)中的介绍,
+如果上述方法都不能解决你的问题,
+请按照[调试 Service 文档](/zh/docs/tasks/debug/debug-applications/debug-service/)中的介绍,
确保你的 `Service` 处于 Running 态,有 `Endpoints` 被创建,`Pod` 真的在提供服务;
DNS 服务已配置并正常工作,iptables 规则也以安装并且 `kube-proxy` 也没有异常行为。
-你也可以访问[故障排查文档](/zh/docs/tasks/debug-application-cluster/troubleshooting/ )来获取更多信息。
+你也可以访问[故障排查文档](/zh/docs/tasks/debug/overview/)来获取更多信息。
diff --git a/content/zh/docs/tasks/debug-application-cluster/debug-running-pod.md b/content/zh/docs/tasks/debug/debug-application/debug-running-pod.md
similarity index 50%
rename from content/zh/docs/tasks/debug-application-cluster/debug-running-pod.md
rename to content/zh/docs/tasks/debug/debug-application/debug-running-pod.md
index ccfd8bb18b..8058cd3ec0 100644
--- a/content/zh/docs/tasks/debug-application-cluster/debug-running-pod.md
+++ b/content/zh/docs/tasks/debug/debug-application/debug-running-pod.md
@@ -3,6 +3,14 @@ title: 调试运行中的 Pod
content_type: task
---
+
+
* 你的 {{< glossary_tooltip text="Pod" term_id="pod" >}} 应该已经被调度并正在运行中,
- 如果你的 Pod 还没有运行,请参阅
- [应用问题排查](/zh/docs/tasks/debug-application-cluster/debug-application/)。
+ 如果你的 Pod 还没有运行,请参阅[调试 Pod](/zh/docs/tasks/debug/debug-application/)。
-* 对于一些高级调试步骤,你应该知道 Pod 具体运行在哪个节点上,在该节点上有权限去运行一些命令。
+* 对于一些高级调试步骤,你应该知道 Pod 具体运行在哪个节点上,并具有在该节点上运行命令的 shell 访问权限。
你不需要任何访问权限就可以使用 `kubectl` 去运行一些标准调试步骤。
-
+
+## 使用 `kubectl describe pod` 命令获取 Pod 详情
+
+
+与之前的例子类似,我们使用一个 Deployment 来创建两个 Pod。
+
+{{< codenew file="application/nginx-with-request.yaml" >}}
+
+
+使用如下命令创建 Deployment:
+
+```shell
+kubectl apply -f https://k8s.io/examples/application/nginx-with-request.yaml
+```
+
+```
+deployment.apps/nginx-deployment created
+```
+
+
+使用如下命令查看 Pod 状态:
+
+```shell
+kubectl get pods
+```
+
+```
+NAME READY STATUS RESTARTS AGE
+nginx-deployment-67d4bdd6f5-cx2nz 1/1 Running 0 13s
+nginx-deployment-67d4bdd6f5-w6kd7 1/1 Running 0 13s
+```
+
+
+我们可以使用 `kubectl describe pod` 命令来查询每个 Pod 的更多信息,比如:
+
+```shell
+kubectl describe pod nginx-deployment-67d4bdd6f5-w6kd7
+```
+
+```none
+Name: nginx-deployment-67d4bdd6f5-w6kd7
+Namespace: default
+Priority: 0
+Node: kube-worker-1/192.168.0.113
+Start Time: Thu, 17 Feb 2022 16:51:01 -0500
+Labels: app=nginx
+ pod-template-hash=67d4bdd6f5
+Annotations:
+Status: Running
+IP: 10.88.0.3
+IPs:
+ IP: 10.88.0.3
+ IP: 2001:db8::1
+Controlled By: ReplicaSet/nginx-deployment-67d4bdd6f5
+Containers:
+ nginx:
+ Container ID: containerd://5403af59a2b46ee5a23fb0ae4b1e077f7ca5c5fb7af16e1ab21c00e0e616462a
+ Image: nginx
+ Image ID: docker.io/library/nginx@sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
+ Port: 80/TCP
+ Host Port: 0/TCP
+ State: Running
+ Started: Thu, 17 Feb 2022 16:51:05 -0500
+ Ready: True
+ Restart Count: 0
+ Limits:
+ cpu: 500m
+ memory: 128Mi
+ Requests:
+ cpu: 500m
+ memory: 128Mi
+ Environment:
+ Mounts:
+ /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-bgsgp (ro)
+Conditions:
+ Type Status
+ Initialized True
+ Ready True
+ ContainersReady True
+ PodScheduled True
+Volumes:
+ kube-api-access-bgsgp:
+ Type: Projected (a volume that contains injected data from multiple sources)
+ TokenExpirationSeconds: 3607
+ ConfigMapName: kube-root-ca.crt
+ ConfigMapOptional:
+ DownwardAPI: true
+QoS Class: Guaranteed
+Node-Selectors:
+Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
+ node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
+Events:
+ Type Reason Age From Message
+ ---- ------ ---- ---- -------
+ Normal Scheduled 34s default-scheduler Successfully assigned default/nginx-deployment-67d4bdd6f5-w6kd7 to kube-worker-1
+ Normal Pulling 31s kubelet Pulling image "nginx"
+ Normal Pulled 30s kubelet Successfully pulled image "nginx" in 1.146417389s
+ Normal Created 30s kubelet Created container nginx
+ Normal Started 30s kubelet Started container nginx
+```
+
+
+在这里,你可以看到有关容器和 Pod 的配置信息(标签、资源需求等),
+以及有关容器和 Pod 的状态信息(状态、就绪、重启计数、事件等) 。
+
+
+容器状态是 Waiting、Running 和 Terminated 之一。
+根据状态的不同,还有对应的额外的信息 —— 在这里你可以看到,
+对于处于运行状态的容器,系统会告诉你容器的启动时间。
+
+
+Ready 指示是否通过了最后一个就绪态探测。
+(在本例中,容器没有配置就绪态探测;如果没有配置就绪态探测,则假定容器已经就绪。)
+
+
+Restart Count 告诉你容器已重启的次数;
+这些信息对于定位配置了 “Always” 重启策略的容器持续崩溃问题非常有用。
+
+
+目前,唯一与 Pod 有关的状态是 Ready 状况,该状况表明 Pod 能够为请求提供服务,
+并且应该添加到相应服务的负载均衡池中。
+
+
+最后,你还可以看到与 Pod 相关的近期事件。
+系统通过指示第一次和最后一次看到事件以及看到该事件的次数来压缩多个相同的事件。
+“From” 标明记录事件的组件,
+“SubobjectPath” 告诉你引用了哪个对象(例如 Pod 中的容器),
+“Reason” 和 “Message” 告诉你发生了什么。
+
+
+## 例子: 调试 Pending 状态的 Pod
+
+可以使用事件来调试的一个常见的场景是,你创建 Pod 无法被调度到任何节点。
+比如,Pod 请求的资源比较多,没有任何一个节点能够满足,或者它指定了一个标签,没有节点可匹配。
+假定我们创建之前的 Deployment 时指定副本数是 5(不再是 2),并且请求 600 毫核(不再是 500),
+对于一个 4 个节点的集群,若每个节点只有 1 个 CPU,这时至少有一个 Pod 不能被调度。
+(需要注意的是,其他集群插件 Pod,比如 fluentd、skydns 等等会在每个节点上运行,
+如果我们需求 1000 毫核,将不会有 Pod 会被调度。)
+
+```shell
+kubectl get pods
+```
+
+```
+NAME READY STATUS RESTARTS AGE
+nginx-deployment-1006230814-6winp 1/1 Running 0 7m
+nginx-deployment-1006230814-fmgu3 1/1 Running 0 7m
+nginx-deployment-1370807587-6ekbw 1/1 Running 0 1m
+nginx-deployment-1370807587-fg172 0/1 Pending 0 1m
+nginx-deployment-1370807587-fz9sd 0/1 Pending 0 1m
+```
+
+
+为了查找 Pod nginx-deployment-1370807587-fz9sd 没有运行的原因,我们可以使用
+`kubectl describe pod` 命令描述 Pod,查看其事件:
+
+```shell
+kubectl describe pod nginx-deployment-1370807587-fz9sd
+```
+
+```none
+ Name: nginx-deployment-1370807587-fz9sd
+ Namespace: default
+ Node: /
+ Labels: app=nginx,pod-template-hash=1370807587
+ Status: Pending
+ IP:
+ Controllers: ReplicaSet/nginx-deployment-1370807587
+ Containers:
+ nginx:
+ Image: nginx
+ Port: 80/TCP
+ QoS Tier:
+ memory: Guaranteed
+ cpu: Guaranteed
+ Limits:
+ cpu: 1
+ memory: 128Mi
+ Requests:
+ cpu: 1
+ memory: 128Mi
+ Environment Variables:
+ Volumes:
+ default-token-4bcbi:
+ Type: Secret (a volume populated by a Secret)
+ SecretName: default-token-4bcbi
+ Events:
+ FirstSeen LastSeen Count From SubobjectPath Type Reason Message
+ --------- -------- ----- ---- ------------- -------- ------ -------
+ 1m 48s 7 {default-scheduler } Warning FailedScheduling pod (nginx-deployment-1370807587-fz9sd) failed to fit in any node
+ fit failure on node (kubernetes-node-6ta5): Node didn't have enough resource: CPU, requested: 1000, used: 1420, capacity: 2000
+ fit failure on node (kubernetes-node-wul5): Node didn't have enough resource: CPU, requested: 1000, used: 1100, capacity: 2000
+```
+
+
+这里你可以看到由调度器记录的事件,它表明了 Pod 不能被调度的原因是 `FailedScheduling`(也可能是其他值)。
+其 message 部分表明没有任何节点拥有足够多的资源。
+
+
+要纠正这种情况,可以使用 `kubectl scale` 更新 Deployment,以指定 4 个或更少的副本。
+(或者你可以让 Pod 继续保持这个状态,这是无害的。)
+
+
+你在 `kubectl describe pod` 结尾处看到的事件都保存在 etcd 中,
+并提供关于集群中正在发生的事情的高级信息。
+如果需要列出所有事件,可使用命令:
+
+```shell
+kubectl get events
+```
+
+
+但是,需要注意的是,事件是区分名字空间的。
+如果你对某些名字空间域的对象(比如 `my-namespace` 名字下的 Pod)的事件感兴趣,
+你需要显式地在命令行中指定名字空间:
+
+```shell
+kubectl get events --namespace=my-namespace
+```
+
+
+查看所有 namespace 的事件,可使用 `--all-namespaces` 参数。
+
+
+除了 `kubectl describe pod` 以外,另一种获取 Pod 额外信息(除了 `kubectl get pod`)的方法
+是给 `kubectl get pod` 增加 `-o yaml` 输出格式参数。
+该命令将以 YAML 格式为你提供比 `kubectl describe pod` 更多的信息 —— 实际上是系统拥有的关于 Pod 的所有信息。
+在这里,你将看到注解(没有标签限制的键值元数据,由 Kubernetes 系统组件在内部使用)、
+重启策略、端口和卷等。
+
+```shell
+kubectl get pod nginx-deployment-1006230814-6winp -o yaml
+```
+
+```yaml
+apiVersion: v1
+kind: Pod
+metadata:
+ creationTimestamp: "2022-02-17T21:51:01Z"
+ generateName: nginx-deployment-67d4bdd6f5-
+ labels:
+ app: nginx
+ pod-template-hash: 67d4bdd6f5
+ name: nginx-deployment-67d4bdd6f5-w6kd7
+ namespace: default
+ ownerReferences:
+ - apiVersion: apps/v1
+ blockOwnerDeletion: true
+ controller: true
+ kind: ReplicaSet
+ name: nginx-deployment-67d4bdd6f5
+ uid: 7d41dfd4-84c0-4be4-88ab-cedbe626ad82
+ resourceVersion: "1364"
+ uid: a6501da1-0447-4262-98eb-c03d4002222e
+spec:
+ containers:
+ - image: nginx
+ imagePullPolicy: Always
+ name: nginx
+ ports:
+ - containerPort: 80
+ protocol: TCP
+ resources:
+ limits:
+ cpu: 500m
+ memory: 128Mi
+ requests:
+ cpu: 500m
+ memory: 128Mi
+ terminationMessagePath: /dev/termination-log
+ terminationMessagePolicy: File
+ volumeMounts:
+ - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
+ name: kube-api-access-bgsgp
+ readOnly: true
+ dnsPolicy: ClusterFirst
+ enableServiceLinks: true
+ nodeName: kube-worker-1
+ preemptionPolicy: PreemptLowerPriority
+ priority: 0
+ restartPolicy: Always
+ schedulerName: default-scheduler
+ securityContext: {}
+ serviceAccount: default
+ serviceAccountName: default
+ terminationGracePeriodSeconds: 30
+ tolerations:
+ - effect: NoExecute
+ key: node.kubernetes.io/not-ready
+ operator: Exists
+ tolerationSeconds: 300
+ - effect: NoExecute
+ key: node.kubernetes.io/unreachable
+ operator: Exists
+ tolerationSeconds: 300
+ volumes:
+ - name: kube-api-access-bgsgp
+ projected:
+ defaultMode: 420
+ sources:
+ - serviceAccountToken:
+ expirationSeconds: 3607
+ path: token
+ - configMap:
+ items:
+ - key: ca.crt
+ path: ca.crt
+ name: kube-root-ca.crt
+ - downwardAPI:
+ items:
+ - fieldRef:
+ apiVersion: v1
+ fieldPath: metadata.namespace
+ path: namespace
+status:
+ conditions:
+ - lastProbeTime: null
+ lastTransitionTime: "2022-02-17T21:51:01Z"
+ status: "True"
+ type: Initialized
+ - lastProbeTime: null
+ lastTransitionTime: "2022-02-17T21:51:06Z"
+ status: "True"
+ type: Ready
+ - lastProbeTime: null
+ lastTransitionTime: "2022-02-17T21:51:06Z"
+ status: "True"
+ type: ContainersReady
+ - lastProbeTime: null
+ lastTransitionTime: "2022-02-17T21:51:01Z"
+ status: "True"
+ type: PodScheduled
+ containerStatuses:
+ - containerID: containerd://5403af59a2b46ee5a23fb0ae4b1e077f7ca5c5fb7af16e1ab21c00e0e616462a
+ image: docker.io/library/nginx:latest
+ imageID: docker.io/library/nginx@sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
+ lastState: {}
+ name: nginx
+ ready: true
+ restartCount: 0
+ started: true
+ state:
+ running:
+ startedAt: "2022-02-17T21:51:05Z"
+ hostIP: 192.168.0.113
+ phase: Running
+ podIP: 10.88.0.3
+ podIPs:
+ - ip: 10.88.0.3
+ - ip: 2001:db8::1
+ qosClass: Guaranteed
+ startTime: "2022-02-17T21:51:01Z"
+```
## 使用容器 exec 进行调试 {#container-exec}
@@ -105,7 +513,7 @@ kubectl exec cassandra -- cat /var/log/cassandra/system.log
kubectl exec -it cassandra -- sh
```
-若要了解更多内容,可查看[获取正在运行容器的 Shell](/zh/docs/tasks/debug-application-cluster/get-shell-running-container/)。
+若要了解更多内容,可查看[获取正在运行容器的 Shell](/zh/docs/tasks/debug/debug-application/get-shell-running-container/)。
@@ -155,28 +563,6 @@ kubectl run ephemeral-demo --image=k8s.gcr.io/pause:3.1 --restart=Never
如果你尝试使用 `kubectl exec` 来创建一个 shell,你将会看到一个错误,因为这个容器镜像中没有 shell。
@@ -188,6 +574,12 @@ kubectl exec -it ephemeral-demo -- sh
OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown
```
+
+
你可以改为使用 `kubectl debug` 添加调试容器。
如果你指定 `-i` 或者 `--interactive` 参数,`kubectl` 将自动挂接到临时容器的控制台。
@@ -208,10 +600,13 @@ here because `kubectl run` does not enable [process namespace sharing](
/docs/tasks/configure-pod-container/share-process-namespace/) in the pod it
creates.
+{{< note >}}
The `--target` parameter must be supported by the {{< glossary_tooltip
text="Container Runtime" term_id="container-runtime" >}}. When not supported,
the Ephemeral Container may not be started, or it may be started with an
-isolated process namespace so that `ps` does not reveal processes in other containers.
+isolated process namespace so that `ps` does not reveal processes in other
+containers.
+{{< /note >}}
You can view the state of the newly created ephemeral container using `kubectl describe`:
-->
@@ -220,7 +615,7 @@ You can view the state of the newly created ephemeral container using `kubectl d
[共享进程命名空间](/zh/docs/tasks/configure-pod-container/share-process-namespace/)。
{{< note >}}
-{{< glossary_tooltip text="容器运行时" term_id="container-runtime" >}}必须支持`--target`参数。
+{{< glossary_tooltip text="容器运行时" term_id="container-runtime" >}}必须支持 `--target` 参数。
如果不支持,则临时容器可能不会启动,或者可能使用隔离的进程命名空间启动,
以便 `ps` 不显示其他容器内的进程。
{{< /note >}}
@@ -317,7 +712,6 @@ If you don't see a command prompt, try pressing enter.
root@myapp-debug:/#
```
{{< note >}}
* 如果你没有使用 `--container` 指定新的容器名,`kubectl debug` 会自动生成的。
@@ -411,14 +804,12 @@ checking filesystem paths or running the container command manually.
现在你有了一个可以执行类似检查文件系统路径或者手动运行容器命令的交互式 shell。
{{< note >}}
* 要更改指定容器的命令,你必须用 `--container` 命令指定容器的名字,
diff --git a/content/zh/docs/tasks/debug-application-cluster/debug-service.md b/content/zh/docs/tasks/debug/debug-application/debug-service.md
similarity index 98%
rename from content/zh/docs/tasks/debug-application-cluster/debug-service.md
rename to content/zh/docs/tasks/debug/debug-application/debug-service.md
index a6d0ea3f27..8c6d6e954f 100644
--- a/content/zh/docs/tasks/debug-application-cluster/debug-service.md
+++ b/content/zh/docs/tasks/debug/debug-application/debug-service.md
@@ -1,6 +1,7 @@
---
content_type: concept
title: 调试 Service
+weight: 20
---
@@ -23,7 +25,6 @@ you to figure out what's going wrong.
Deployment(或其他工作负载控制器)运行了 Pod,并创建 Service ,但是
当你尝试访问它时,没有任何响应。此文档有望对你有所帮助并找出问题所在。
-
@@ -1103,7 +1104,7 @@ Contact us on
然而 Service 还是没有正常工作。这种情况下,请告诉我们,以便我们可以帮助调查!
通过
-[Slack](/zh/docs/tasks/debug-application-cluster/troubleshooting/#slack) 或者
+[Slack](/zh/docs/tasks/debug/overview/#slack) 或者
[Forum](https://discuss.kubernetes.io) 或者
[GitHub](https://github.com/kubernetes/kubernetes)
联系我们。
@@ -1111,8 +1112,6 @@ Contact us on
## {{% heading "whatsnext" %}}
访问[故障排查文档](/zh/docs/tasks/debug-application-cluster/troubleshooting/) 获取更多信息。
-
diff --git a/content/zh/docs/tasks/debug-application-cluster/debug-stateful-set.md b/content/zh/docs/tasks/debug/debug-application/debug-statefulset.md
similarity index 76%
rename from content/zh/docs/tasks/debug-application-cluster/debug-stateful-set.md
rename to content/zh/docs/tasks/debug/debug-application/debug-statefulset.md
index a206ac36e9..72dbc4d4f6 100644
--- a/content/zh/docs/tasks/debug-application-cluster/debug-stateful-set.md
+++ b/content/zh/docs/tasks/debug/debug-application/debug-statefulset.md
@@ -1,7 +1,21 @@
---
-title: 调试StatefulSet
+title: 调试 StatefulSet
content_type: task
+weight: 30
---
+
如果你发现列出的任何 Pod 长时间处于 `Unknown` 或 `Terminating` 状态,请参阅
-[删除 StatefulSet Pods](/zh/docs/tasks/run-application/delete-stateful-set/)
+[删除 StatefulSet Pod](/zh/docs/tasks/run-application/delete-stateful-set/)
了解如何处理它们的说明。
-你可以参考[调试 Pods](/zh/docs/tasks/debug-application-cluster/debug-pod-replication-controller/)
+你可以参考[调试 Pod](/zh/docs/tasks/debug/debug-application/debug-pods/)
来调试 StatefulSet 中的各个 Pod。
## {{% heading "whatsnext" %}}
-* 进一步了解如何[调试 Init 容器](/zh/docs/tasks/debug-application-cluster/debug-init-containers/)
+* 进一步了解如何[调试 Init 容器](/zh/docs/tasks/debug/debug-application/debug-init-containers/)。
diff --git a/content/zh/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md b/content/zh/docs/tasks/debug/debug-application/determine-reason-pod-failure.md
similarity index 66%
rename from content/zh/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md
rename to content/zh/docs/tasks/debug/debug-application/determine-reason-pod-failure.md
index 19f29d781b..0f604f289f 100644
--- a/content/zh/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md
+++ b/content/zh/docs/tasks/debug/debug-application/determine-reason-pod-failure.md
@@ -17,15 +17,17 @@ termination message.
本文介绍如何编写和读取容器的终止消息。
终止消息为容器提供了一种方法,可以将有关致命事件的信息写入某个位置,
在该位置可以通过仪表板和监控软件等工具轻松检索和显示致命事件。
-在大多数情况下,您放入终止消息中的信息也应该写入
+在大多数情况下,你放入终止消息中的信息也应该写入
[常规 Kubernetes 日志](/zh/docs/concepts/cluster-administration/logging/)。
## {{% heading "prerequisites" %}}
@@ -43,62 +45,70 @@ the container starts.
-->
## 读写终止消息
-在本练习中,您将创建运行一个容器的 Pod。
+在本练习中,你将创建运行一个容器的 Pod。
配置文件指定在容器启动时要运行的命令。
{{< codenew file="debug/termination.yaml" >}}
-1. 基于 YAML 配置文件创建 Pod:
+
+1. 基于 YAML 配置文件创建 Pod:
- ```shell
- kubectl create -f https://k8s.io/examples/debug/termination.yaml
- ```
+ kubectl apply -f https://k8s.io/examples/debug/termination.yaml
-
+ the "Sleep expired" message, it terminates.
+ -->
YAML 文件中,在 `command` 和 `args` 字段,你可以看到容器休眠 10 秒然后将 "Sleep expired"
写入 `/dev/termination-log` 文件。
容器写完 "Sleep expired" 消息后就终止了。
-1. 显示 Pod 的信息:
+
+1. 显示 Pod 的信息:
- ```shell
- kubectl get pod termination-demo
- ```
+ kubectl get pod termination-demo
重复前面的命令直到 Pod 不再运行。
-1.
- 显示 Pod 的详细信息:
+
+1. 显示 Pod 的详细信息:
- ```shell
- kubectl get pod --output=yaml
- ```
+ kubectl get pod termination-demo --output=yaml
- 输出结果包含 "Sleep expired" 消息:
- ```yaml
- apiVersion: v1
- kind: Pod
- ...
- lastState:
- terminated:
- containerID: ...
- exitCode: 0
- finishedAt: ...
- message: |
- Sleep expired
- ...
- ```
+
+ 输出结果包含 "Sleep expired" 消息:
-1.
- 使用 Go 模板过滤输出结果,使其只含有终止消息:
+ apiVersion: v1
+ kind: Pod
+ ...
+ lastState:
+ terminated:
+ containerID: ...
+ exitCode: 0
+ finishedAt: ...
+ message: |
+ Sleep expired
+ ...
- ```shell
- kubectl get pod termination-demo -o go-template="{{range .status.containerStatuses}}{{.lastState.terminated.message}}{{end}}"
- ```
+
+1. 使用 Go 模板过滤输出结果,使其只含有终止消息:
+
+ kubectl get pod termination-demo -o go-template="{{range .status.containerStatuses}}{{.lastState.terminated.message}}{{end}}"
+
+
+如果你正在运行多容器 Pod,则可以使用 Go 模板来包含容器的名称。这样,你可以发现哪些容器出现故障:
+
+```shell
+kubectl get pod multi-container-pod -o go-template='{{range .status.containerStatuses}}{{printf "%s:\n%s\n\n" .name .lastState.terminated.message}}{{end}}'
+```
-
此外,用户可以设置容器的 `terminationMessagePolicy` 字段,以便进一步自定义。
此字段默认为 "`File`",这意味着仅从终止消息文件中检索终止消息。
通过将 `terminationMessagePolicy` 设置为 "`FallbackToLogsOnError`",你就可以告诉 Kubernetes,在容器因错误退出时,如果终止消息文件为空,则使用容器日志输出的最后一块作为终止消息。
diff --git a/content/zh/docs/tasks/debug-application-cluster/get-shell-running-container.md b/content/zh/docs/tasks/debug/debug-application/get-shell-running-container.md
similarity index 93%
rename from content/zh/docs/tasks/debug-application-cluster/get-shell-running-container.md
rename to content/zh/docs/tasks/debug/debug-application/get-shell-running-container.md
index 0750296b54..c65d3951b9 100644
--- a/content/zh/docs/tasks/debug-application-cluster/get-shell-running-container.md
+++ b/content/zh/docs/tasks/debug/debug-application/get-shell-running-container.md
@@ -3,49 +3,29 @@ title: 获取正在运行容器的 Shell
content_type: task
---
-
-
-
本文介绍怎样使用 `kubectl exec` 命令获取正在运行容器的 Shell。
-
-
-
## {{% heading "prerequisites" %}}
-
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
-
-
-
-
## 获取容器的 Shell
-
在本练习中,你将创建包含一个容器的 Pod。容器运行 nginx 镜像。下面是 Pod 的配置文件:
{{< codenew file="application/shell-demo.yaml" >}}
@@ -53,7 +33,6 @@ runs the nginx image. Here is the configuration file for the Pod:
-
创建 Pod:
```shell
@@ -63,7 +42,6 @@ kubectl create -f https://k8s.io/examples/application/shell-demo.yaml
-
检查容器是否运行正常:
```shell
@@ -73,7 +51,6 @@ kubectl get pod shell-demo
-
获取正在运行容器的 Shell:
```shell
@@ -90,7 +67,6 @@ The double dash symbol "--" is used to separate the arguments you want to pass t
-
在 shell 中,打印根目录:
```shell
@@ -101,7 +77,6 @@ root@shell-demo:/# ls /
In your shell, experiment with other commands. Here are
some examples:
-->
-
在 shell 中,实验其他命令。下面是一些示例:
```shell
@@ -121,7 +96,6 @@ root@shell-demo:/# ps aux | grep nginx
-
## 编写 nginx 的根页面
-
-在看一下 Pod 的配置文件。该 Pod 有个 `emptyDir` 卷,容器将该卷挂载到了 `/usr/share/nginx/html`。
+再看一下 Pod 的配置文件。该 Pod 有个 `emptyDir` 卷,容器将该卷挂载到了 `/usr/share/nginx/html`。
-
在 shell 中,在 `/usr/share/nginx/html` 目录创建一个 `index.html` 文件:
```shell
@@ -146,7 +118,6 @@ root@shell-demo:/# echo Hello shell demo > /usr/share/nginx/html/index.html
-
在 shell 中,向 nginx 服务器发送 GET 请求:
```shell
@@ -158,7 +129,6 @@ root@shell-demo:/# curl localhost
-
输出结果显示了你在 `index.html` 中写入的文本。
```shell
@@ -168,20 +138,17 @@ Hello shell demo
-
当用完 shell 后,输入 `exit` 退出。
-
## 在容器中运行单个命令
-
在普通的命令窗口(而不是 shell)中,打印环境运行容器中的变量:
```shell
@@ -191,7 +158,6 @@ kubectl exec shell-demo env
-
实验运行其他命令。下面是一些示例:
```shell
@@ -200,14 +166,11 @@ kubectl exec shell-demo ls /
kubectl exec shell-demo cat /proc/1/mounts
```
-
-
-
## 当 Pod 包含多个容器时打开 shell
-
如果 Pod 有多个容器,`--container` 或者 `-c` 可以在 `kubectl exec` 命令中指定容器。
-例如,您有个名为 my-pod 的容器,该 Pod 有两个容器分别为 main-app 和 healper-app。
+例如,你有个名为 my-pod 的 Pod,该 Pod 有两个容器分别为 main-app 和 healper-app。
下面的命令将会打开一个 shell 访问 main-app 容器。
```shell
kubectl exec -it my-pod --container main-app -- /bin/bash
```
-
-
-
## {{% heading "whatsnext" %}}
-
* [kubectl exec](/docs/reference/generated/kubectl/kubectl-commands/#exec)
-
-
-
-
-
diff --git a/content/zh/docs/tasks/debug/debug-cluster/_index.md b/content/zh/docs/tasks/debug/debug-cluster/_index.md
new file mode 100644
index 0000000000..c9f93d951b
--- /dev/null
+++ b/content/zh/docs/tasks/debug/debug-cluster/_index.md
@@ -0,0 +1,459 @@
+---
+title: 集群故障排查
+description: 调试常见的集群问题。
+weight: 20
+no_list: true
+---
+
+
+
+
+
+本篇文档是介绍集群故障排查的;我们假设对于你碰到的问题,你已经排除了是由应用程序造成的。
+对于应用的调试,请参阅[应用故障排查指南](/zh/docs/tasks/debug/debug-application/)。
+你也可以访问[故障排查](/zh/docs/tasks/debug/)来获取更多的信息。
+
+
+
+
+## 列举集群节点 {#listing-your-cluster}
+
+调试的第一步是查看所有的节点是否都已正确注册。
+
+运行以下命令:
+
+```shell
+kubectl get nodes
+```
+
+
+验证你所希望看见的所有节点都能够显示出来,并且都处于 `Ready` 状态。
+
+为了了解你的集群的总体健康状况详情,你可以运行:
+
+```shell
+kubectl cluster-info dump
+```
+
+
+### 示例:调试关闭/无法访问的节点 {#example-debugging-a-down-unreachable-node}
+
+有时在调试时查看节点的状态很有用——例如,因为你注意到在节点上运行的 Pod 的奇怪行为,
+或者找出为什么 Pod 不会调度到节点上。与 Pod 一样,你可以使用 `kubectl describe node`
+和 `kubectl get node -o yaml` 来检索有关节点的详细信息。
+例如,如果节点关闭(与网络断开连接,或者 kubelet 进程挂起并且不会重新启动等),
+你将看到以下内容。请注意显示节点为 NotReady 的事件,并注意 Pod 不再运行(它们在 NotReady 状态五分钟后被驱逐)。
+
+```shell
+kubectl get nodes
+```
+
+```none
+NAME STATUS ROLES AGE VERSION
+kube-worker-1 NotReady 1h v1.23.3
+kubernetes-node-bols Ready 1h v1.23.3
+kubernetes-node-st6x Ready 1h v1.23.3
+kubernetes-node-unaj Ready 1h v1.23.3
+```
+
+```shell
+kubectl describe node kube-worker-1
+```
+
+```none
+Name: kube-worker-1
+Roles:
+Labels: beta.kubernetes.io/arch=amd64
+ beta.kubernetes.io/os=linux
+ kubernetes.io/arch=amd64
+ kubernetes.io/hostname=kube-worker-1
+ kubernetes.io/os=linux
+Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock
+ node.alpha.kubernetes.io/ttl: 0
+ volumes.kubernetes.io/controller-managed-attach-detach: true
+CreationTimestamp: Thu, 17 Feb 2022 16:46:30 -0500
+Taints: node.kubernetes.io/unreachable:NoExecute
+ node.kubernetes.io/unreachable:NoSchedule
+Unschedulable: false
+Lease:
+ HolderIdentity: kube-worker-1
+ AcquireTime:
+ RenewTime: Thu, 17 Feb 2022 17:13:09 -0500
+Conditions:
+ Type Status LastHeartbeatTime LastTransitionTime Reason Message
+ ---- ------ ----------------- ------------------ ------ -------
+ NetworkUnavailable False Thu, 17 Feb 2022 17:09:13 -0500 Thu, 17 Feb 2022 17:09:13 -0500 WeaveIsUp Weave pod has set this
+ MemoryPressure Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
+ DiskPressure Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
+ PIDPressure Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
+ Ready Unknown Thu, 17 Feb 2022 17:12:40 -0500 Thu, 17 Feb 2022 17:13:52 -0500 NodeStatusUnknown Kubelet stopped posting node status.
+Addresses:
+ InternalIP: 192.168.0.113
+ Hostname: kube-worker-1
+Capacity:
+ cpu: 2
+ ephemeral-storage: 15372232Ki
+ hugepages-2Mi: 0
+ memory: 2025188Ki
+ pods: 110
+Allocatable:
+ cpu: 2
+ ephemeral-storage: 14167048988
+ hugepages-2Mi: 0
+ memory: 1922788Ki
+ pods: 110
+System Info:
+ Machine ID: 9384e2927f544209b5d7b67474bbf92b
+ System UUID: aa829ca9-73d7-064d-9019-df07404ad448
+ Boot ID: 5a295a03-aaca-4340-af20-1327fa5dab5c
+ Kernel Version: 5.13.0-28-generic
+ OS Image: Ubuntu 21.10
+ Operating System: linux
+ Architecture: amd64
+ Container Runtime Version: containerd://1.5.9
+ Kubelet Version: v1.23.3
+ Kube-Proxy Version: v1.23.3
+Non-terminated Pods: (4 in total)
+ Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits Age
+ --------- ---- ------------ ---------- --------------- ------------- ---
+ default nginx-deployment-67d4bdd6f5-cx2nz 500m (25%) 500m (25%) 128Mi (6%) 128Mi (6%) 23m
+ default nginx-deployment-67d4bdd6f5-w6kd7 500m (25%) 500m (25%) 128Mi (6%) 128Mi (6%) 23m
+ kube-system kube-proxy-dnxbz 0 (0%) 0 (0%) 0 (0%) 0 (0%) 28m
+ kube-system weave-net-gjxxp 100m (5%) 0 (0%) 200Mi (10%) 0 (0%) 28m
+Allocated resources:
+ (Total limits may be over 100 percent, i.e., overcommitted.)
+ Resource Requests Limits
+ -------- -------- ------
+ cpu 1100m (55%) 1 (50%)
+ memory 456Mi (24%) 256Mi (13%)
+ ephemeral-storage 0 (0%) 0 (0%)
+ hugepages-2Mi 0 (0%) 0 (0%)
+Events:
+...
+```
+
+```shell
+kubectl get node kube-worker-1 -o yaml
+```
+
+```yaml
+apiVersion: v1
+kind: Node
+metadata:
+ annotations:
+ kubeadm.alpha.kubernetes.io/cri-socket: /run/containerd/containerd.sock
+ node.alpha.kubernetes.io/ttl: "0"
+ volumes.kubernetes.io/controller-managed-attach-detach: "true"
+ creationTimestamp: "2022-02-17T21:46:30Z"
+ labels:
+ beta.kubernetes.io/arch: amd64
+ beta.kubernetes.io/os: linux
+ kubernetes.io/arch: amd64
+ kubernetes.io/hostname: kube-worker-1
+ kubernetes.io/os: linux
+ name: kube-worker-1
+ resourceVersion: "4026"
+ uid: 98efe7cb-2978-4a0b-842a-1a7bf12c05f8
+spec: {}
+status:
+ addresses:
+ - address: 192.168.0.113
+ type: InternalIP
+ - address: kube-worker-1
+ type: Hostname
+ allocatable:
+ cpu: "2"
+ ephemeral-storage: "14167048988"
+ hugepages-2Mi: "0"
+ memory: 1922788Ki
+ pods: "110"
+ capacity:
+ cpu: "2"
+ ephemeral-storage: 15372232Ki
+ hugepages-2Mi: "0"
+ memory: 2025188Ki
+ pods: "110"
+ conditions:
+ - lastHeartbeatTime: "2022-02-17T22:20:32Z"
+ lastTransitionTime: "2022-02-17T22:20:32Z"
+ message: Weave pod has set this
+ reason: WeaveIsUp
+ status: "False"
+ type: NetworkUnavailable
+ - lastHeartbeatTime: "2022-02-17T22:20:15Z"
+ lastTransitionTime: "2022-02-17T22:13:25Z"
+ message: kubelet has sufficient memory available
+ reason: KubeletHasSufficientMemory
+ status: "False"
+ type: MemoryPressure
+ - lastHeartbeatTime: "2022-02-17T22:20:15Z"
+ lastTransitionTime: "2022-02-17T22:13:25Z"
+ message: kubelet has no disk pressure
+ reason: KubeletHasNoDiskPressure
+ status: "False"
+ type: DiskPressure
+ - lastHeartbeatTime: "2022-02-17T22:20:15Z"
+ lastTransitionTime: "2022-02-17T22:13:25Z"
+ message: kubelet has sufficient PID available
+ reason: KubeletHasSufficientPID
+ status: "False"
+ type: PIDPressure
+ - lastHeartbeatTime: "2022-02-17T22:20:15Z"
+ lastTransitionTime: "2022-02-17T22:15:15Z"
+ message: kubelet is posting ready status. AppArmor enabled
+ reason: KubeletReady
+ status: "True"
+ type: Ready
+ daemonEndpoints:
+ kubeletEndpoint:
+ Port: 10250
+ nodeInfo:
+ architecture: amd64
+ bootID: 22333234-7a6b-44d4-9ce1-67e31dc7e369
+ containerRuntimeVersion: containerd://1.5.9
+ kernelVersion: 5.13.0-28-generic
+ kubeProxyVersion: v1.23.3
+ kubeletVersion: v1.23.3
+ machineID: 9384e2927f544209b5d7b67474bbf92b
+ operatingSystem: linux
+ osImage: Ubuntu 21.10
+ systemUUID: aa829ca9-73d7-064d-9019-df07404ad448
+```
+
+
+## 查看日志 {#looking-at-logs}
+
+目前,深入挖掘集群需要登录相关机器。以下是相关日志文件的位置。
+在基于 systemd 的系统上,你可能需要使用 `journalctl` 而不是检查日志文件。
+
+
+### 控制平面节点 {#control-plane-nodes}
+
+ * `/var/log/kube-apiserver.log` —— API 服务器 API
+ * `/var/log/kube-scheduler.log` —— 调度器,负责制定调度决策
+ * `/var/log/kube-controller-manager.log` —— 运行大多数 Kubernetes
+ 内置{{}}的组件,除了调度(kube-scheduler 处理调度)。
+
+
+
+### 工作节点 {#worker-nodes}
+
+ * `/var/log/kubelet.log` —— 来自 `kubelet` 的日志,负责在节点运行容器
+ * `/var/log/kube-proxy.log` —— 来自 `kube-proxy` 的日志,负责将流量转发到服务端点
+
+
+## 集群故障模式 {#cluster-failure-modes}
+
+这是可能出错的事情的不完整列表,以及如何调整集群设置以缓解问题。
+
+
+### 造成原因 {#contributing-causes}
+
+ - 虚拟机关闭
+ - 集群内或集群与用户之间的网络分区
+ - Kubernetes 软件崩溃
+ - 持久存储(例如 GCE PD 或 AWS EBS 卷)的数据丢失或不可用
+ - 操作员错误,例如配置错误的 Kubernetes 软件或应用程序软件
+
+
+### 具体情况 {#specific-scenarios}
+
+- API 服务器所在的 VM 关机或者 API 服务器崩溃
+ - 结果
+ - 不能停止、更新或者启动新的 Pod、服务或副本控制器
+ - 现有的 Pod 和服务在不依赖 Kubernetes API 的情况下应该能继续正常工作
+- API 服务器的后端存储丢失
+ - 结果
+ - kube-apiserver 组件未能成功启动并变健康
+ - kubelet 将不能访问 API 服务器,但是能够继续运行之前的 Pod 和提供相同的服务代理
+ - 在 API 服务器重启之前,需要手动恢复或者重建 API 服务器的状态
+
+- Kubernetes 服务组件(节点控制器、副本控制器管理器、调度器等)所在的 VM 关机或者崩溃
+ - 当前,这些控制器是和 API 服务器在一起运行的,它们不可用的现象是与 API 服务器类似的
+ - 将来,这些控制器也会复制为多份,并且可能不在运行于同一节点上
+ - 它们没有自己的持久状态
+- 单个节点(VM 或者物理机)关机
+ - 结果
+ - 此节点上的所有 Pod 都停止运行
+- 网络分裂
+ - 结果
+ - 分区 A 认为分区 B 中所有的节点都已宕机;分区 B 认为 API 服务器宕机
+ (假定主控节点所在的 VM 位于分区 A 内)。
+
+- kubelet 软件故障
+ - 结果
+ - 崩溃的 kubelet 就不能在其所在的节点上启动新的 Pod
+ - kubelet 可能删掉 Pod 或者不删
+ - 节点被标识为非健康态
+ - 副本控制器会在其它的节点上启动新的 Pod
+- 集群操作错误
+ - 结果
+ - 丢失 Pod 或服务等等
+ - 丢失 API 服务器的后端存储
+ - 用户无法读取API
+ - 等等
+
+
+### 缓解措施 {#mitigations}
+
+- 措施:对于 IaaS 上的 VM,使用 IaaS 的自动 VM 重启功能
+ - 缓解:API 服务器 VM 关机或 API 服务器崩溃
+ - 缓解:Kubernetes 服务组件所在的 VM 关机或崩溃
+
+- 措施: 对于运行 API 服务器和 etcd 的 VM,使用 IaaS 提供的可靠的存储(例如 GCE PD 或者 AWS EBS 卷)
+ - 缓解:API 服务器后端存储的丢失
+
+- 措施:使用[高可用性](/zh/docs/setup/production-environment/tools/kubeadm/high-availability/)的配置
+ - 缓解:主控节点 VM 关机或者主控节点组件(调度器、API 服务器、控制器管理器)崩馈
+ - 将容许一个或多个节点或组件同时出现故障
+ - 缓解:API 服务器后端存储(例如 etcd 的数据目录)丢失
+ - 假定你使用了高可用的 etcd 配置
+
+
+- 措施:定期对 API 服务器的 PDs/EBS 卷执行快照操作
+ - 缓解:API 服务器后端存储丢失
+ - 缓解:一些操作错误的场景
+ - 缓解:一些 Kubernetes 软件本身故障的场景
+
+- 措施:在 Pod 的前面使用副本控制器或服务
+ - 缓解:节点关机
+ - 缓解:kubelet 软件故障
+
+- 措施:应用(容器)设计成容许异常重启
+ - 缓解:节点关机
+ - 缓解:kubelet 软件故障
+
+## {{% heading "whatsnext" %}}
+
+
+* 了解[资源指标管道](resource-metrics-pipeline)中可用的指标
+* 发现用于[监控资源使用](resource-usage-monitoring)的其他工具
+* 使用节点问题检测器[监控节点健康](monitor-node-health)
+* 使用 `crictl` 来[调试 Kubernetes 节点](crictl)
+* 获取更多关于 [Kubernetes 审计](audit)的信息
+* 使用 `telepresence` [本地开发和调试服务](local-debugging)
\ No newline at end of file
diff --git a/content/zh/docs/tasks/debug-application-cluster/audit.md b/content/zh/docs/tasks/debug/debug-cluster/audit.md
similarity index 100%
rename from content/zh/docs/tasks/debug-application-cluster/audit.md
rename to content/zh/docs/tasks/debug/debug-cluster/audit.md
diff --git a/content/zh/docs/tasks/debug-application-cluster/crictl.md b/content/zh/docs/tasks/debug/debug-cluster/crictl.md
similarity index 59%
rename from content/zh/docs/tasks/debug-application-cluster/crictl.md
rename to content/zh/docs/tasks/debug/debug-cluster/crictl.md
index f8e126f281..70bfaecfd5 100644
--- a/content/zh/docs/tasks/debug-application-cluster/crictl.md
+++ b/content/zh/docs/tasks/debug/debug-cluster/crictl.md
@@ -1,12 +1,8 @@
---
-reviewers:
-- Random-Liu
-- feiskyer
-- mrunalp
title: 使用 crictl 对 Kubernetes 节点进行调试
content_type: task
+weight: 30
---
-
-
{{< feature-state for_k8s_version="v1.11" state="stable" >}}
@@ -45,13 +41,13 @@ Kubernetes node. `crictl` and its source are hosted in the
-## 安装 crictl
+## 安装 crictl {#installing-crictl}
你可以从 cri-tools [发布页面](https://github.com/kubernetes-sigs/cri-tools/releases)
下载一个压缩的 `crictl` 归档文件,用于几种不同的架构。
@@ -64,26 +60,27 @@ of Kubernetes. Extract it and move it to a location on your system path, such as
The `crictl` command has several subcommands and runtime flags. Use
`crictl help` or `crictl help` for more details.
-->
-## 一般用法
+## 一般用法 {#general-usage}
`crictl` 命令有几个子命令和运行时参数。
有关详细信息,请使用 `crictl help` 或 `crictl help` 获取帮助信息。
-`crictl` 默认连接到 `unix:///var/run/dockershim.sock`。
-对于其他的运行时,你可以用多种不同的方法设置端点:
+你可以用以下方法之一来为 `crictl` 设置端点:
-- 通过设置参数 `--runtime-endpoint` 和 `--image-endpoint`
-- 通过设置环境变量 `CONTAINER_RUNTIME_ENDPOINT` 和 `IMAGE_SERVICE_ENDPOINT`
-- 通过在配置文件中设置端点 `--config=/etc/crictl.yaml`
+- 设置参数 `--runtime-endpoint` 和 `--image-endpoint`。
+- 设置环境变量 `CONTAINER_RUNTIME_ENDPOINT` 和 `IMAGE_SERVICE_ENDPOINT`。
+- 在配置文件 `--config=/etc/crictl.yaml` 中设置端点。
+ 要设置不同的文件,可以在运行 `crictl` 时使用 `--config=PATH_TO_FILE` 标志。
要查看或编辑当前配置,请查看或编辑 `/etc/crictl.yaml` 的内容。
+例如,使用 `containerd` 容器运行时的配置会类似于这样:
-```shell
-cat /etc/crictl.yaml
```
-```
-runtime-endpoint: unix:///var/run/dockershim.sock
-image-endpoint: unix:///var/run/dockershim.sock
+runtime-endpoint: unix:///var/run/containerd/containerd.sock
+image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: true
```
+
+要进一步了解 `crictl`,参阅
+[`crictl` 文档](https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md)。
+
-## crictl 命令示例
+## crictl 命令示例 {#example-crictl-commands}
{{< warning >}}
-### 打印 Pod 清单
+### 打印 Pod 清单 {#list-pods}
打印所有 Pod 的清单:
@@ -140,7 +143,12 @@ List all pods:
crictl pods
```
-```none
+
+输出类似于:
+
+```
POD ID CREATED STATE NAME NAMESPACE ATTEMPT
926f1b5a1d33a About a minute ago Ready sh-84d7dcf559-4r2gq default 0
4dccb216c4adb About a minute ago Ready nginx-65899c769f-wv2gp default 0
@@ -157,7 +165,12 @@ List pods by name:
crictl pods --name nginx-65899c769f-wv2gp
```
-```none
+
+输出类似于这样:
+
+```
POD ID CREATED STATE NAME NAMESPACE ATTEMPT
4dccb216c4adb 2 minutes ago Ready nginx-65899c769f-wv2gp default 0
```
@@ -170,6 +183,12 @@ List pods by label:
```shell
crictl pods --label run=nginx
```
+
+
+输出类似于这样:
+
```none
POD ID CREATED STATE NAME NAMESPACE ATTEMPT
4dccb216c4adb 2 minutes ago Ready nginx-65899c769f-wv2gp default 0
@@ -180,13 +199,19 @@ POD ID CREATED STATE NAME
List all images:
-->
-### 打印镜像清单
+### 打印镜像清单 {#list-containers}
打印所有镜像清单:
```shell
crictl images
```
+
+
+输出类似于这样:
+
```none
IMAGE TAG IMAGE ID SIZE
busybox latest 8c811b4aec35f 1.15MB
@@ -203,6 +228,12 @@ List images by repository:
```shell
crictl images nginx
```
+
+
+输出类似于这样:
+
```none
IMAGE TAG IMAGE ID SIZE
nginx latest cd5239a0906a6 109MB
@@ -216,6 +247,12 @@ Only list image IDs:
```shell
crictl images -q
```
+
+
+输出类似于这样:
+
```none
sha256:8c811b4aec35f259572d0f79207bc0678df4c736eeec50bc9fec37ed936a472a
sha256:e179bbfe5d238de6069f3b03fccbecc3fb4f2019af741bfff1233c4d7b2970c5
@@ -228,13 +265,19 @@ sha256:cd5239a0906a6ccf0562354852fae04bc5b52d72a2aff9a871ddb6bd57553569
List all containers:
-->
-### 打印容器清单
+### 打印容器清单 {#list-containers}
打印所有容器清单:
```shell
crictl ps -a
```
+
+
+输出类似于这样:
+
```none
CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT
1f73f2d81bf98 busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47 7 minutes ago Running sh 1
@@ -251,6 +294,12 @@ List running containers:
```shell
crictl ps
```
+
+
+输出类似于这样:
+
```none
CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT
1f73f2d81bf98 busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47 6 minutes ago Running sh 1
@@ -261,11 +310,17 @@ CONTAINER ID IMAGE
-### 在正在运行的容器上执行命令
+### 在正在运行的容器上执行命令 {#execute-a-command-in-a-running-container}
```shell
crictl exec -i -t 1f73f2d81bf98 ls
```
+
+
+输出类似于这样:
+
```none
bin dev etc home proc root sys tmp usr var
```
@@ -275,13 +330,19 @@ bin dev etc home proc root sys tmp usr var
Get all container logs:
-->
-### 获取容器日志
+### 获取容器日志 {#get-a-container-s-logs}
获取容器的所有日志:
```shell
crictl logs 87d3992f84f74
```
+
+
+输出类似于这样:
+
```none
10.240.0.96 - - [06/Jun/2018:02:45:49 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.47.0" "-"
10.240.0.96 - - [06/Jun/2018:02:45:50 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.47.0" "-"
@@ -296,6 +357,12 @@ Get only the latest `N` lines of logs:
```shell
crictl logs --tail=1 87d3992f84f74
```
+
+
+输出类似于这样:
+
```none
10.240.0.96 - - [06/Jun/2018:02:45:51 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.47.0" "-"
```
@@ -307,13 +374,15 @@ Using `crictl` to run a pod sandbox is useful for debugging container runtimes.
On a running Kubernetes cluster, the sandbox will eventually be stopped and
deleted by the Kubelet.
-->
-### 运行 Pod 沙盒
+### 运行 Pod 沙盒 {#run-a-pod-sandbox}
用 `crictl` 运行 Pod 沙盒对容器运行时排错很有帮助。
在运行的 Kubernetes 集群中,沙盒会随机地被 kubelet 停止和删除。
-1.
- 编写下面的 JSON 文件:
+
+1. 编写下面的 JSON 文件:
```json
{
@@ -329,14 +398,18 @@ deleted by the Kubelet.
}
```
-2.
- 使用 `crictl runp` 命令应用 JSON 文件并运行沙盒。
+
+2. 使用 `crictl runp` 命令应用 JSON 文件并运行沙盒。
```shell
crictl runp pod-config.json
```
-
+
返回了沙盒的 ID。
-### 创建容器
+### 创建容器 {#create-a-container}
用 `crictl` 创建容器对容器运行时排错很有帮助。
在运行的 Kubernetes 集群中,沙盒会随机的被 kubelet 停止和删除。
-1.
- 拉取 busybox 镜像
+
+1. 拉取 busybox 镜像
- ```bash
+ ```shell
crictl pull busybox
+ ```
+ ```none
Image is up to date for busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47
```
-2.
- 创建 Pod 和容器的配置:
+
+2. 创建 Pod 和容器的配置:
-
+
**Pod 配置**:
- ```yaml
+
+ ```json
{
"metadata": {
"name": "nginx-sandbox",
@@ -378,18 +460,21 @@ deleted by the Kubelet.
}
```
-
+
**容器配置**:
- ```yaml
+
+ ```json
{
"metadata": {
- "name": "busybox"
+ "name": "busybox"
},
"image":{
- "image": "busybox"
+ "image": "busybox"
},
"command": [
- "top"
+ "top"
],
"log_path":"busybox.log",
"linux": {
@@ -397,22 +482,31 @@ deleted by the Kubelet.
}
```
-3.
- 创建容器,传递先前创建的 Pod 的 ID、容器配置文件和 Pod 配置文件。返回容器的 ID。
+ returned.
+-->
+3. 创建容器,传递先前创建的 Pod 的 ID、容器配置文件和 Pod 配置文件。返回容器的 ID。
```bash
crictl create f84dd361f8dc51518ed291fbadd6db537b0496536c1d2d6c05ff943ce8c9a54f container-config.json pod-config.json
```
-4.
- 查询所有容器并确认新创建的容器状态为 `Created`。
+
+4. 查询所有容器并确认新创建的容器状态为 `Created`。
```bash
crictl ps -a
```
+
+ 输出类似于这样:
+
```none
CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT
3e025dd50a72d busybox 32 seconds ago Created busybox 0
@@ -423,14 +517,20 @@ deleted by the Kubelet.
To start a container, pass its ID to `crictl start`:
-->
-### 启动容器
+### 启动容器 {#start-a-container}
要启动容器,要将容器 ID 传给 `crictl start`:
```shell
crictl start 3e025dd50a72d956c4f14881fbb5b1080c9275674e95fb67f965f6478a957d60
```
-```none
+
+
+输出类似于这样:
+
+```
3e025dd50a72d956c4f14881fbb5b1080c9275674e95fb67f965f6478a957d60
```
@@ -442,136 +542,22 @@ Check the container has its state set to `Running`.
```shell
crictl ps
```
-```none
-CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT
-3e025dd50a72d busybox About a minute ago Running busybox 0
+
+
+输出类似于这样:
+
```
-
+CONTAINER ID IMAGE CREATED STATE NAME ATTEMPT
+3e025dd50a72d busybox About a minute ago Running busybox 0
+```
+
+## {{% heading "whatsnext" %}}
-更多信息请参考 [kubernetes-sigs/cri-tools](https://github.com/kubernetes-sigs/cri-tools)。
-
-
-## Docker CLI 和 crictl 的映射
-
-
-以下的映射表格只适用于 Docker CLI v1.40 和 crictl v1.19.0 版本。
-请注意该表格并不详尽。例如,其中不包含 Docker CLI 的实验性命令。
-
-
-{{< note >}}
-尽管有些命令的输出缺少了一些数据列,CRICTL 的输出格式与 Docker CLI 是类似的。
-如果你的脚本程序需要解析命令的输出,请确认检查该特定命令的输出。
-{{< /note >}}
-
-
-### 获取调试信息
-
-{{< table caption="Docker CLI 和 crictl 的映射 - 获取调试信息" >}}
-
-docker cli | crictl | 描述 | 不支持的功能
--- | -- | -- | --
-`attach` | `attach` | 连接到一个运行中的容器 | `--detach-keys`, `--sig-proxy`
-`exec` | `exec` | 在运行中的容器里运行一个命令 | `--privileged`, `--user`, `--detach-keys`
-`images` | `images` | 列举镜像 |
-`info` | `info` | 显示系统级的信息 |
-`inspect` | `inspect`, `inspecti` | 返回容器、镜像或者任务的详细信息 |
-`logs` | `logs` | 获取容器的日志 | `--details`
-`ps` | `ps` | 列举容器 |
-`stats` | `stats` | 实时显示容器的资源使用统计信息 | 列:NET/BLOCK I/O, PIDs
-`version` | `version` | 显示运行时(Docker、ContainerD、或者其他) 的版本信息 |
-{{< /table >}}
-
-
-### 进行改动
-
-{{< table caption="Docker CLI 和 crictl 的映射 - 进行改动" >}}
-
-docker cli | crictl | 描述 | 不支持的功能
--- | -- | -- | --
-`create` | `create` | 创建一个新的容器 |
-`kill` | `stop` (timeout=0) | 杀死一个或多个正在运行的容器 | `--signal`
-`pull` | `pull` | 从镜像仓库拉取镜像或者代码仓库 | `--all-tags`, `--disable-content-trust`
-`rm` | `rm` | 移除一个或多个容器 |
-`rmi` | `rmi` | 移除一个或多个镜像 |
-`run` | `run` | 在新容器里运行一个命令 |
-`start` | `start` | 启动一个或多个停止的容器 | `--detach-keys`
-`stop` | `stop` | 停止一个或多个正运行的容器 |
-`update` | `update` | 更新一个或多个容器的配置 | CRI 不支持 `--restart`、`--blkio-weight` 以及一些其他的资源限制选项。
-{{< /table >}}
-
-
-### 仅 crictl 支持
-
-{{< table caption="Docker CLI 和 crictl 的映射 - 仅 crictl 支持" >}}
-
-crictl | 描述
--- | --
-`imagefsinfo` | 返回镜像的文件系统信息
-`inspectp` | 显示一个或多个 Pod 的状态
-`port-forward` | 转发本地端口到 Pod
-`pods` | 列举 Pod
-`runp` | 运行一个新的 Pod
-`rmp` | 移除一个或多个 Pod
-`stopp` | 停止一个或多个正运行的 Pod
-{{< /table >}}
+* [进一步了解 `crictl`](https://github.com/kubernetes-sigs/cri-tools)
+* [将 `docker` CLI 命令映射到 `crictl`](/zh/docs/reference/tools/map-crictl-dockercli/)
diff --git a/content/zh/docs/tasks/debug-application-cluster/local-debugging.md b/content/zh/docs/tasks/debug/debug-cluster/local-debugging.md
similarity index 94%
rename from content/zh/docs/tasks/debug-application-cluster/local-debugging.md
rename to content/zh/docs/tasks/debug/debug-cluster/local-debugging.md
index aca2f2e7e8..c6755e9e17 100644
--- a/content/zh/docs/tasks/debug-application-cluster/local-debugging.md
+++ b/content/zh/docs/tasks/debug/debug-cluster/local-debugging.md
@@ -1,10 +1,10 @@
---
-title: 在本地开发和调试服务
+title: 使用 telepresence 在本地开发和调试服务
content_type: task
---
@@ -13,12 +13,12 @@ content_type: task
{{% thirdparty-content %}}
Kubernetes 应用程序通常由多个独立的服务组成,每个服务都在自己的容器中运行。
-在远端的 Kubernetes 集群上开发和调试这些服务可能很麻烦,需要
-[在运行的容器上打开 Shell](/zh/docs/tasks/debug-application-cluster/get-shell-running-container/),
+在远端的 Kubernetes 集群上开发和调试这些服务可能很麻烦,
+需要[在运行的容器上打开 Shell](/zh/docs/tasks/debug/debug-application/get-shell-running-container/),
以运行调试工具。
`telepresence` 是一个工具,用于简化本地开发和调试服务的过程,同时可以将服务代理到远程 Kubernetes 集群。
-`telepresence` 允许你使用使用自定义工具(例如:调试器 和 IDE)调式服务,
+`telepresence` 允许你使用使用自定义工具(例如:调试器 和 IDE)调试服务,
并提供对 Configmap、Secret 和远程集群上运行的服务的完全访问。
diff --git a/content/zh/docs/tasks/debug-application-cluster/monitor-node-health.md b/content/zh/docs/tasks/debug/debug-cluster/monitor-node-health.md
similarity index 99%
rename from content/zh/docs/tasks/debug-application-cluster/monitor-node-health.md
rename to content/zh/docs/tasks/debug/debug-cluster/monitor-node-health.md
index 5d4a265b10..7a8f5028c9 100644
--- a/content/zh/docs/tasks/debug-application-cluster/monitor-node-health.md
+++ b/content/zh/docs/tasks/debug/debug-cluster/monitor-node-health.md
@@ -1,6 +1,7 @@
---
content_type: task
title: 节点健康监测
+weight: 20
---
diff --git a/content/zh/docs/tasks/debug-application-cluster/resource-metrics-pipeline.md b/content/zh/docs/tasks/debug/debug-cluster/resource-metrics-pipeline.md
similarity index 98%
rename from content/zh/docs/tasks/debug-application-cluster/resource-metrics-pipeline.md
rename to content/zh/docs/tasks/debug/debug-cluster/resource-metrics-pipeline.md
index 7318664952..6b9a4c70dd 100644
--- a/content/zh/docs/tasks/debug-application-cluster/resource-metrics-pipeline.md
+++ b/content/zh/docs/tasks/debug/debug-cluster/resource-metrics-pipeline.md
@@ -1,6 +1,7 @@
---
title: 资源指标管道
content_type: concept
+weight: 15
---
@@ -45,12 +47,12 @@ The Metrics API, and the metrics pipeline that it enables, only offers the minim
CPU and memory metrics to enable automatic scaling using HPA and / or VPA.
If you would like to provide a more complete set of metrics, you can complement
the simpler Metrics API by deploying a second
-[metrics pipeline](/docs/tasks/debug-application-cluster/resource-usage-monitoring/#full-metrics-pipeline)
+[metrics pipeline](/docs/tasks/debug/debug-cluster/resource-usage-monitoring/#full-metrics-pipeline)
that uses the _Custom Metrics API_.
-->
Metrics API 及其启用的指标管道仅提供最少的 CPU 和内存指标,以启用使用 HPA 和/或 VPA 的自动扩展。
如果你想提供更完整的指标集,你可以通过部署使用 _Custom Metrics API_ 的第二个
-[指标管道](/zh/docs/tasks/debug-application-cluster/resource-usage-monitoring/#full-metrics-pipeline) 来作为简单的 Metrics API 的补充。
+[指标管道](/zh/docs/tasks/debug/debug-cluster/resource-usage-monitoring/#full-metrics-pipeline)来作为简单的 Metrics API 的补充。
{{< /note >}}
{{< caution >}}
-对不同的客户端类型重复使用相同的 CA 会对群集的功能产生负面影响。
+对不同的客户端类型重复使用相同的 CA 会对集群的功能产生负面影响。
有关更多信息,请参见 [CA 重用和冲突](#ca-reusage-and-conflicts)。
{{< /caution >}}
@@ -233,7 +233,7 @@ Kubernetes apiserver 使用它的标准认证和授权配置来对用户认证
有关对 Kubernetes 集群认证的概述,请参见
[对集群认证](/zh/docs/reference/access-authn-authz/authentication/)。
-有关对Kubernetes群集资源的访问鉴权的概述,请参见
+有关对Kubernetes集群资源的访问鉴权的概述,请参见
[鉴权概述](/zh/docs/reference/access-authn-authz/authorization/)。
到目前为止,所有内容都是标准的 Kubernetes API 请求,认证与鉴权。
diff --git a/content/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning.md b/content/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning.md
index 603274f5c2..38af138e61 100644
--- a/content/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning.md
+++ b/content/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definition-versioning.md
@@ -1384,8 +1384,8 @@ procedure.
*选项 1:* 使用存储版本迁移程序(Storage Version Migrator)
@@ -1409,13 +1409,29 @@ The following is an example procedure to upgrade from `v1beta1` to `v1`.
2. Write an upgrade procedure to list all existing objects and write them with
the same content. This forces the backend to write objects in the current
storage version, which is `v1`.
-3. Update the CustomResourceDefinition `Status` by removing `v1beta1` from
- `storedVersions` field.
+3. Remove `v1beta1` from the CustomResourceDefinition `status.storedVersions` field.
-->
1. 在 CustomResourceDefinition 文件中将 `v1` 设置为存储版本,并使用 kubectl 应用它。
`storedVersions`现在是`v1beta1, v1`。
2. 编写升级过程以列出所有现有对象并使用相同内容将其写回存储。
这会强制后端使用当前存储版本(即 `v1`)写入对象。
-3. 通过从 `storedVersions` 字段中删除 `v1beta1` 来更新 CustomResourceDefinition
- 的`Status`。
+3. 从 CustomResourceDefinition 的 `status.storedVersions` 字段中删除 `v1beta1`。
+
+{{< note >}}
+`kubectl` 工具目前不能用于编辑或修补 CRD 上的 `status` 子资源:请参阅
+[kubectl Subresource Support KEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cli/2590-kubectl-subresource)
+了解更多细节。
+
+从 CLI 给 `status` 子资源打补丁的更简单的方法是使用 `curl` 工具直接与 API 服务器交互,示例:
+```bash
+kubectl proxy &
+curl --header "Content-Type: application/json-patch+json" \
+ --request PATCH http://localhost:8001/apis/apiextensions.k8s.io/v1/customresourcedefinitions//status \
+ --data '[{"op": "replace", "path": "/status/storedVersions", "value":["v1"]}]'
+```
+{{< /note >}}
\ No newline at end of file
diff --git a/content/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions.md b/content/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions.md
index 76ac25c924..0f60c649f1 100644
--- a/content/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions.md
+++ b/content/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions.md
@@ -546,7 +546,7 @@ resource definitions to:
* 裁剪未启用。
* 可以存储任意数据。
-为了与 `apiextensions.k8s.io/v1` 兼容,将你的自定义资源定义更新为:
+为了与 `apiextensions.k8s.io/v1` 兼容,将你的定制资源定义更新为:
1. 使用结构化的 OpenAPI 模式。
2. `spec.preserveUnknownFields` 设置为 `false`。
@@ -902,15 +902,16 @@ Kubernetes 会最终删除该资源,
### Validation
Custom resources are validated via
-[OpenAPI v3 schemas](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#schemaObject)
-and you can add additional validation using
+[OpenAPI v3 schemas](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#schemaObject),
+by x-kubernetes-validations when the [Validation Rules feature](#validation-rules) is enabled, and you
+can add additional validation using
[admission webhooks](/docs/reference/access-authn-authz/admission-controllers/#validatingadmissionwebhook).
-->
### 合法性检查 {#validation}
定制资源是通过
[OpenAPI v3 模式定义](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#schemaObject)
-来执行合法性检查的,
+来执行合法性检查的,当启用[验证规则特性](#validation-rules)时,通过 `x-kubernetes-validations` 验证,
你可以通过使用[准入控制 Webhook](/zh/docs/reference/access-authn-authz/admission-controllers/#validatingadmissionwebhook)
来添加额外的合法性检查逻辑。
@@ -949,6 +950,16 @@ Additionally, the following restrictions are applied to the schema:
- 字段 `additionalProperties` 不可设置为 `false`
- 字段 `additionalProperties` 与 `properties` 互斥,不可同时使用
+
+当[验证规则特性](#validation-rules)被启用并且 CustomResourceDefinition
+模式是一个[结构化的模式定义](#specifying-a-structural-schema)时,
+`x-kubernetes-validations` 扩展可以使用[通用表达式语言(CEL)](https://github.com/google/cel-spec)表达式来验证定制资源。
+
+## 验证规则
+
+{{< feature-state state="alpha" for_k8s_version="v1.23" >}}
+
+
+验证规则从 1.23 开始处于 Alpha 状态,
+当 `CustomResourceValidationExpressions` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)被启用时,
+验证定制资源。这个功能只有在模式是[结构化的模式](#specifying-a-structural-schema)时才可用。
+
+
+验证规则使用[通用表达式语言(CEL)](https://github.com/google/cel-spec)来验证定制资源的值。
+验证规则使用 `x-kubernetes-validations` 扩展包含在 `CustomResourceDefinition` 模式定义中。
+
+
+规则的作用域是模式定义中 `x-kubernetes-validations` 扩展所在的位置。
+CEL 表达式中的 `self` 变量被绑定到限定作用域的取值。
+
+
+所有验证规则都是针对当前对象的:不支持跨对象或有状态的验证规则。
+
+
+例如:
+
+```yaml
+ ...
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ x-kubernetes-validations:
+ - rule: "self.minReplicas <= self.replicas"
+ message: "replicas should be greater than or equal to minReplicas."
+ - rule: "self.replicas <= self.maxReplicas"
+ message: "replicas should be smaller than or equal to maxReplicas."
+ properties:
+ ...
+ minReplicas:
+ type: integer
+ replicas:
+ type: integer
+ maxReplicas:
+ type: integer
+ required:
+ - minReplicas
+ - replicas
+ - maxReplicas
+```
+
+
+将拒绝创建这个定制资源的请求:
+
+```yaml
+apiVersion: "stable.example.com/v1"
+kind: CronTab
+metadata:
+ name: my-new-cron-object
+spec:
+ minReplicas: 0
+ replicas: 20
+ maxReplicas: 10
+```
+
+
+返回响应为:
+
+```
+The CronTab "my-new-cron-object" is invalid:
+* spec: Invalid value: map[string]interface {}{"maxReplicas":10, "minReplicas":0, "replicas":20}: replicas should be smaller than or equal to maxReplicas.
+```
+
+
+`x-kubernetes-validations` 可以有多条规则。
+
+`x-kubernetes-validations` 下的 `rule` 代表将由 CEL 评估的表达式。
+
+`message` 代表验证失败时显示的信息。如果消息没有设置,上述响应将是:
+```
+The CronTab "my-new-cron-object" is invalid:
+* spec: Invalid value: map[string]interface {}{"maxReplicas":10, "minReplicas":0, "replicas":20}: failed rule: self.replicas <= self.maxReplicas
+```
+
+
+当 CRD 被创建/更新时,验证规则被编译。
+如果验证规则的编译失败,CRD 的创建/更新请求将失败。
+编译过程也包括类型检查。
+
+
+编译失败:
+- `no_matching_overload`:此函数没有参数类型的重载。
+
+ 例如,像 `self == true` 这样的规则对一个整数类型的字段将得到错误:
+ ```
+ Invalid value: apiextensions.ValidationRule{Rule:"self == true", Message:""}: compilation failed: ERROR: \ :1:6: found no matching overload for '_==_' applied to '(int, bool)'
+ ```
+
+- `no_such_field`:不包含所需的字段。
+ 例如,针对一个不存在的字段,像 `self.nonExistingField > 0` 这样的规则将返回错误:
+ ```
+ Invalid value: apiextensions.ValidationRule{Rule:"self.nonExistingField > 0", Message:""}: compilation failed: ERROR: \ :1:5: undefined field 'nonExistingField'
+ ```
+
+- `invalid argument`:对宏的无效参数。
+ 例如,像 `has(self)` 这样的规则将返回错误:
+ ```
+ Invalid value: apiextensions.ValidationRule{Rule:"has(self)", Message:""}: compilation failed: ERROR: :1:4: invalid argument to has() macro
+ ```
+
+
+
+验证规则例子:
+
+| 规则 | 目的 |
+| ---------------- | ------------ |
+| `self.minReplicas <= self.replicas && self.replicas <= self.maxReplicas` | 验证定义副本数的三个字段大小顺序是否正确 |
+| `'Available' in self.stateCounts` | 验证 map 中是否存在键名为 `Available`的条目 |
+| `(size(self.list1) == 0) != (size(self.list2) == 0)` | 验证两个 list 之一是非空的,但不是二者都非空 |
+| !('MY_KEY' in self.map1) || self['MY_KEY'].matches('^[a-zA-Z]*$') | 如果某个特定的 key 在 map 中,验证 map 中这个 key 的 value |
+| `self.envars.filter(e, e.name = 'MY_ENV').all(e, e.value.matches('^[a-zA-Z]*$')` | 验证一个 listMap 中主键 'name' 为 'MY_ENV' 'value' 的表项,检查其取值 'value' |
+| `has(self.expired) && self.created + self.ttl < self.expired` | 验证 'Expired' 日期是否晚于 'Create' 日期加上 'ttl' 持续时间 |
+| `self.health.startsWith('ok')` | 验证 'health' 字符串字段有前缀 'ok' |
+| `self.widgets.exists(w, w.key == 'x' && w.foo < 10)` | 验证 key 为 'x' 的 listMap 项的 'foo' 属性是否小于 10 |
+| `type(self) == string ? self == '100%' : self == 1000` | 在 int 型和 string 型两种情况下验证 int-or-string 字段 |
+| `self.metadata.name.startsWith(self.prefix)` | 验证对象的名称是否具有另一个字段值的前缀 |
+| `self.set1.all(e, !(e in self.set2))` | 验证两个 listSet 是否不相交 |
+| `size(self.names) == size(self.details) && self.names.all(n, n in self.details)` | 验证 'details' map 是由 'names' listSet 的项目所决定的。 |
+
+参考:[CEL 中支持的求值](https://github.com/google/cel-spec/blob/v0.6.0/doc/langdef.md#evaluation)
+
+
+
+- 如果规则的作用域是某资源的根,则它可以对 CRD 的 OpenAPIv3 模式表达式中声明的任何字段进行字段选择,
+ 以及 `apiVersion`、`kind`、`metadata.name` 和 `metadata.generateName`。
+ 这包括在同一表达式中对 `spec` 和 `status` 的字段进行选择:
+ ```yaml
+ ...
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-validations:
+ - rule: "self.status.availableReplicas >= self.spec.minReplicas"
+ properties:
+ spec:
+ type: object
+ properties:
+ minReplicas:
+ type: integer
+ ...
+ status:
+ type: object
+ properties:
+ availableReplicas:
+ type: integer
+ ```
+
+
+- 如果规则的作用域是具有属性的对象,那么可以通过 `self.field` 对该对象的可访问属性进行字段选择,
+ 而字段存在与否可以通过 `has(self.field)` 来检查。
+ 在 CEL 表达式中,Null 值的字段被视为不存在的字段。
+
+ ```yaml
+ ...
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ x-kubernetes-validations:
+ - rule: "has(self.foo)"
+ properties:
+ ...
+ foo:
+ type: integer
+ ```
+
+
+- 如果规则的作用域是一个带有 additionalProperties 的对象(即map),那么 map 的值
+ 可以通过 `self[mapKey]` 访问,map 的包含性可以通过 `mapKey in self` 检查,
+ map 中的所有条目可以通过 CEL 宏和函数如 `self.all(...)` 访问。
+ ```yaml
+ ...
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ x-kubernetes-validations:
+ - rule: "self['xyz'].foo > 0"
+ additionalProperties:
+ ...
+ type: object
+ properties:
+ foo:
+ type: integer
+ ```
+
+
+- 如果规则的作用域是 array,则 array 的元素可以通过 `self[i]` 访问,也可以通过宏和函数访问。
+ ```yaml
+ ...
+ openAPIV3Schema:
+ type: object
+ properties:
+ ...
+ foo:
+ type: array
+ x-kubernetes-validations:
+ - rule: "size(self) == 1"
+ items:
+ type: string
+ ```
+
+
+- 如果规则的作用域为标量,则 `self` 将绑定到标量值。
+ ```yaml
+ ...
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ ...
+ foo:
+ type: integer
+ x-kubernetes-validations:
+ - rule: "self > 0"
+ ```
+
+例子:
+
+| 规则作用域字段类型 | 规则示例 |
+| -----------------------| -----------------------|
+| 根对象 | `self.status.actual <= self.spec.maxDesired`|
+| 对象映射 | `self.components['Widget'].priority < 10`|
+| 整数列表 | `self.values.all(value, value >= 0 && value < 100)`|
+| 字符串 | `self.startsWith('kube')`|
+
+
+
+`apiVersion`、`kind``metadata.name` 和 `metadata.generateName` 始终可以从对象的根目录和任何
+带有 `x-kubernetes-embedded-resource` 注解的对象访问。
+其他元数据属性都不可访问。
+
+
+通过 `x-kubernetes-preserve-unknown-fields` 保存在定制资源中的未知数据在 CEL 表达中无法访问。
+这包括:
+ - 使用 `x-kubernetes-preserve-unknown-fields` 的对象模式保留的未知字段值。
+ - 属性模式为"未知类型(Unknown Type)"的对象属性。一个"未知类型"被递归定义为:
+ - 一个没有类型的模式,`x-kubernetes-preserve-unknown-fields` 设置为 true。
+ - 一个数组,其中项目模式为"未知类型"
+ - 一个 additionalProperties 模式为"未知类型"的对象
+
+
+
+只有 `[a-zA-Z_.-/][a-zA-Z0-9_.-/]*` 形式的属性名是可访问的。
+当在表达式中访问时,可访问的属性名称会根据以下规则进行转义:
+
+
+| 转义序列 | 属性名称等效为 |
+| ----------------------- | ----------------------|
+| `__underscores__` | `__` |
+| `__dot__` | `.` |
+|`__dash__` | `-` |
+| `__slash__` | `/` |
+| `__{keyword}__` | [CEL 保留关键字](https://github.com/google/cel-spec/blob/v0.6.0/doc/langdef.md#syntax) |
+
+
+注意:CEL 保留关键字需要与要转义的确切属性名匹配(例如,单词 `sprint` 中的 `int` 不会转义)。
+
+
+转义的例子:
+
+
+|属性名 | 转义属性名规则 |
+| ----------------| ----------------------- |
+| namespace | `self.__namespace__ > 0` |
+| x-prop | `self.x__dash__prop > 0` |
+| redact__d | `self.redact__underscores__d > 0` |
+| string | `self.startsWith('kube')` |
+
+
+
+`set` 或 `map` 的 `x-Kubernetes-list-type` 的数组的等值比较会忽略元素顺序,即[1,2] == [2,1]。
+使用 `x-kubernetes-list-type` 对数组进行串联时,使用 List 类型的语义:
+- `set`:`X + Y` 执行一个并集操作,其中 `X` 中所有元素的数组位置被保留,
+ `Y` 中不相交的元素被追加,保留其部分顺序。
+- `map`:`X + Y`执行合并,其中 `X` 中所有键的数组位置被保留,
+ 但当 `X` 和 `Y` 的键集相交时,其值被 `Y` 中的值覆盖。
+ `Y` 中键值不相交的元素被附加,保留其部分顺序。
+
+
+
+以下是 OpenAPIV3 和 CEL 类型之间的声明类型映射:
+
+
+| OpenAPIv3 类型 | CEL 类型 |
+| -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| 带有 Properties 的对象 | 对象 / "消息类型" |
+| 带有 AdditionalProperties 的对象 | map |
+| 带有 x-kubernetes-embedded-type 的对象 | 对象 / "消息类型",'apiVersion'、'kind'、'metadata.name' 和 'metadata.generateName' 都隐式包含在模式中 |
+| 带有 x-kubernetes-preserve-unknown-fields 的对象 | 对象 / "消息类型",未知字段无法从 CEL 表达式中访问 |
+| x-kubernetes-int-or-string | 可能是整数或字符串的动态对象,可以用 `type(value)` 来检查类型 |
+| 数组 | list |
+| 带有 x-kubernetes-list-type=map 的数组 | 列表,基于集合等值和唯一键名保证的 map 组成 |
+| 带有 x-kubernetes-list-type=set 的数组 | 列表,基于集合等值和唯一键名保证的 set 组成 |
+| 布尔值 | boolean |
+| 数字 (各种格式) | double |
+| 整数 (各种格式) | int (64) |
+| 'null' | null_type |
+| 字符串 | string |
+| 带有 format=byte (base64 编码)字符串 | bytes |
+| 带有 format=date 字符串 | timestamp (google.protobuf.Timestamp) |
+| 带有 format=datetime 字符串 | timestamp (google.protobuf.Timestamp) |
+| 带有 format=duration 字符串 | duration (google.protobuf.Duration) |
+
+
+参考:[CEL 类型](https://github.com/google/cel-spec/blob/v0.6.0/doc/langdef.md#values),
+[OpenAPI 类型](https://swagger.io/specification/#data-types),
+[Kubernetes 结构化模式](/zh/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#specifying-a-structural-schema)。
+
+
+#### 验证函数 {#available-validation-functions}
+
+
+可用的函数包括:
+ - CEL 标准函数,在[标准定义列表](https://github.com/google/cel-spec/blob/v0.7.0/doc/langdef.md#list-of-standard-definitions)中定义
+ - CEL 标准[宏](https://github.com/google/cel-spec/blob/v0.7.0/doc/langdef.md#macros)
+ - CEL [扩展字符串函数库](https://pkg.go.dev/github.com/google/cel-go@v0.11.2/ext#Strings)
+ - Kubernetes [CEL 扩展库](https://pkg.go.dev/k8s.io/apiextensions-apiserver@v0.24.0/pkg/apiserver/schema/cel/library#pkg-functions)
+
+
+#### 转换规则
+
+
+包含引用标识符 `oldSself` 的表达式的规则被隐式视为“转换规则(Transition Rule)”。
+转换规则允许模式作者阻止两个原本有效的状态之间的某些转换。例如:
+
+```yaml
+type: string
+enum: ["low", "medium", "high"]
+x-kubernetes-validations:
+- rule: "!(self == 'high' && oldSelf == 'low') && !(self == 'low' && oldSelf == 'high')"
+ message: cannot transition directly between 'low' and 'high'
+```
+
+
+与其他规则不同,转换规则仅适用于满足以下条件的操作:
+
+
+- 更新现有对象的操作。转换规则从不适用于创建操作。
+
+
+- 旧的值和新的值都存在。仍然可以通过在父节点上放置转换规则来检查值是否已被添加或移除。
+ 转换规则从不应用于定制资源创建。当被放置在可选字段上时,转换规则将不适用于设置或取消设置该字段的更新操作。
+
+
+- 被转换规则验证的模式节点的路径必须解析到一个在旧对象和新对象之间具有可比性的节点。
+ 例如,列表项和它们的后代(`spec.foo[10].bar`)不一定能在现有对象和后来对同一对象的更新之间产生关联。
+
+
+如果一个模式节点包含一个永远不能应用的转换规则,在 CRD 写入时将会产生错误,例如:
+"*path*: update rule *rule* cannot be set on schema because the schema or its parent
+schema is not mergeable"。
+
+
+转换规则只允许在模式的“可关联部分(Correlatable Portions)”中使用。
+如果所有 `array` 父模式都是 `x-kubernetes-list-type=map`类型的,那么该模式的一部分就是可关联的;
+任何 `set` 或者 `atomic` 数组父模式都不支持确定性地将 `self` 与 `oldSelf` 关联起来。
+
+
+这是一些转换规则的例子:
+
+
+{{< table caption="转换规则样例" >}}
+| 用例 | 规则
+| -------- | --------
+| 不可变 | `self.foo == oldSelf.foo`
+| 赋值后禁止修改/删除 | `oldSelf != 'bar' \|\| self == 'bar'` or `!has(oldSelf.field) \|\| has(self.field)`
+| 仅附加的 set | `self.all(element, element in oldSelf)`
+| 如果之前的值为 X,则新值只能为 A 或 B,不能为 Y 或 Z | `oldSelf != 'X' \|\| self in ['A', 'B']`
+| 单调(非递减)计数器 | `self >= oldSelf`
+{{< /table >}}
+
+
+#### 验证函数的资源使用
+
+
+当你创建或更新一个使用验证规则的 CustomResourceDefinition 时,
+API 服务器会检查运行这些验证规则可能产生的影响。
+如果一个规则的执行成本过高,API 服务器会拒绝创建或更新操作,并返回一个错误信息。
+
+运行时也使用类似的系统来观察解释器的行动。如果解释器执行了太多的指令,规则的执行将被停止,并且会产生一个错误。
+
+每个 CustomResourceDefinition 也被允许有一定数量的资源来完成其所有验证规则的执行。
+如果在创建时估计其规则的总和超过了这个限制,那么也会发生验证错误。
+
+
+如果你只指定那些无论输入量有多大都要花费相同时间的规则,你不太可能遇到验证的资源预算问题。
+
+例如,一个断言 `self.foo == 1` 的规则本身不存在因为资源预算组验证而导致被拒绝的风险。
+
+但是,如果 `foo` 是一个字符串,而你定义了一个验证规则 `self.foo.contains("someString")`,
+这个规则需要更长的时间来执行,取决于 `foo` 有多长。
+
+另一个例子是如果 `foo` 是一个数组,而你指定了验证规则 `self.foo.all(x, x > 5)`。
+如果没有给出 `foo` 的长度限制,成本系统总是假设最坏的情况,这将发生在任何可以被迭代的事物上(list、map 等)。
+
+
+因此,通过 `maxItems`,`maxProperties` 和 `maxLength` 进行限制被认为是最佳实践,
+以在验证规则中处理任何内容,以防止在成本估算期间验证错误。例如,给定具有一个规则的模式:
+
+```yaml
+openAPIV3Schema:
+ type: object
+ properties:
+ foo:
+ type: array
+ items:
+ type: string
+ x-kubernetes-validations:
+ - rule: "self.all(x, x.contains('a string'))"
+```
+
+
+API 服务器以验证预算为由拒绝该规则,并显示错误:
+```
+ spec.validation.openAPIV3Schema.properties[spec].properties[foo].x-kubernetes-validations[0].rule: Forbidden:
+ CEL rule exceeded budget by more than 100x (try simplifying the rule, or adding maxItems, maxProperties, and
+ maxLength where arrays, maps, and strings are used)
+```
+
+
+这个拒绝会发生是因为 `self.all` 意味着对 `foo` 中的每一个字符串调用 `contains()`,
+而这又会检查给定的字符串是否包含 `'a string'`。如果没有限制,这是一个非常昂贵的规则。
+
+
+如果你不指定任何验证限制,这个规则的估计成本将超过每条规则的成本限制。
+但如果你在适当的地方添加限制,该规则将被允许:
+
+```yaml
+openAPIV3Schema:
+ type: object
+ properties:
+ foo:
+ type: array
+ maxItems: 25
+ items:
+ type: string
+ maxLength: 10
+ x-kubernetes-validations:
+ - rule: "self.all(x, x.contains('a string'))"
+```
+
+
+成本评估系统除了考虑规则本身的估计成本外,还考虑到规则将被执行的次数。
+例如,下面这个规则的估计成本与前面的例子相同(尽管该规则现在被定义在单个数组项上):
+
+```yaml
+openAPIV3Schema:
+ type: object
+ properties:
+ foo:
+ type: array
+ maxItems: 25
+ items:
+ type: string
+ x-kubernetes-validations:
+ - rule: "self.contains('a string'))"
+ maxLength: 10
+```
+
+
+如果在一个列表内部的一个列表有一个使用 `self.all` 的验证规则,那就会比具有相同规则的非嵌套列表的成本高得多。
+一个在非嵌套列表中被允许的规则可能需要在两个嵌套列表中设置较低的限制才能被允许。
+例如,即使没有设置限制,下面的规则也是允许的:
+
+```yaml
+openAPIV3Schema:
+ type: object
+ properties:
+ foo:
+ type: array
+ items:
+ type: integer
+ x-kubernetes-validations:
+ - rule: "self.all(x, x == 5)"
+```
+
+
+但是同样的规则在下面的模式中(添加了一个嵌套数组)产生了一个验证错误:
+
+```yaml
+openAPIV3Schema:
+ type: object
+ properties:
+ foo:
+ type: array
+ items:
+ type: array
+ items:
+ type: integer
+ x-kubernetes-validations:
+ - rule: "self.all(x, x == 5)"
+```
+
+
+这是因为 `foo` 的每一项本身就是一个数组,而每一个子数组依次调用 `self.all`。
+在使用验证规则的地方,尽可能避免嵌套的列表和字典。
### 以 OpenAPI v2 形式发布合法性检查模式 {#publish-validation-schema-in-openapi-v2}
@@ -1308,9 +2093,7 @@ CustomResourceDefinition 的[结构化的](#specifying-a-structural-schema)、
[OpenAPI v2 规约](/zh/docs/concepts/overview/kubernetes-api/#openapi-and-swagger-definitions)
的一部分发布出来。
-[kubectl](/zh/docs/reference/kubectl/overview) 命令行工具会基于所发布的模式定义来执行
-客户端的合法性检查(`kubectl create` 和 `kubectl apply`),为定制资源的模式定义
-提供解释(`kubectl explain`)。
+[kubectl](/zh/docs/reference/kubectl/) 命令行工具会基于所发布的模式定义来执行客户端的合法性检查(`kubectl create` 和 `kubectl apply`),为定制资源的模式定义提供解释(`kubectl explain`)。
所发布的模式还可被用于其他目的,例如生成客户端或者生成文档。
-* 如果您的集群中还没有任何应用,使用如下命令启动一个 Hello World 应用:
+* 如果你的集群中还没有任何应用,使用如下命令启动一个 Hello World 应用:
```shell
kubectl create deployment node-hello --image=gcr.io/google-samples/node-hello:1.0 --port=8080
diff --git a/content/zh/docs/tasks/extend-kubernetes/setup-konnectivity.md b/content/zh/docs/tasks/extend-kubernetes/setup-konnectivity.md
index 0359639517..1716735ed4 100644
--- a/content/zh/docs/tasks/extend-kubernetes/setup-konnectivity.md
+++ b/content/zh/docs/tasks/extend-kubernetes/setup-konnectivity.md
@@ -13,7 +13,17 @@ Konnectivity 服务为控制平面提供集群通信的 TCP 级别代理。
## {{% heading "prerequisites" %}}
-{{< include "task-tutorial-prereqs.md" >}}
+
+你需要有一个 Kubernetes 集群,并且 kubectl 命令可以与集群通信。
+建议在至少有两个不充当控制平面主机的节点的集群上运行本教程。
+如果你还没有集群,可以使用
+[minikube](https://minikube.sigs.k8s.io/docs/tutorials/multi_node/) 创建一个集群。
你需要配置 API 服务器来使用 Konnectivity 服务,并将网络流量定向到集群节点:
-1. 确保 `ServiceAccountTokenVolumeProjection`
- [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)
- 被启用。你可以通过为 kube-apiserver 提供以下标志启用
- [服务账号令牌卷保护](/zh/docs/tasks/configure-pod-container/configure-service-account/#service-account-token-volume-projection):
-
- ```
- --service-account-issuer=api
- --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
- --api-audiences=system:konnectivity-server
- ```
+确保[服务账号令牌卷投射](/zh/docs/tasks/configure-pod-container/configure-service-account/#service-account-token-volume-projection)
+特性被启用。该特性自 Kubernetes v1.20 起默认已被启用。
1. 创建一个出站流量配置文件,比如 `admin/konnectivity/egress-selector-configuration.yaml`。
1. 将 API 服务器的 `--egress-selector-config-file` 参数设置为你的 API 服务器的
diff --git a/content/zh/docs/tasks/extend-kubernetes/socks5-proxy-access-api.md b/content/zh/docs/tasks/extend-kubernetes/socks5-proxy-access-api.md
new file mode 100644
index 0000000000..122a7145f2
--- /dev/null
+++ b/content/zh/docs/tasks/extend-kubernetes/socks5-proxy-access-api.md
@@ -0,0 +1,246 @@
+---
+title: 使用 SOCKS5 代理访问 Kubernetes API
+content_type: task
+weight: 42
+min-kubernetes-server-version: v1.24
+---
+
+
+{{< feature-state for_k8s_version="v1.24" state="stable" >}}
+
+
+本文展示了如何使用 SOCKS5 代理访问远程 Kubernetes 集群的 API。
+当你要访问的集群不直接在公共 Internet 上公开其 API 时,这很有用。
+
+## {{% heading "prerequisites" %}}
+
+{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
+
+
+你需要 SSH 客户端软件(`ssh` 工具),并在远程服务器上运行 SSH 服务。
+你必须能够登录到远程服务器上的 SSH 服务。
+
+
+
+
+## 任务上下文
+
+
+{{< note >}}
+此示例使用 SSH 隧道传输流量,SSH 客户端和服务器充当 SOCKS 代理。
+你可以使用其他任意类型的 [SOCKS5](https://zh.wikipedia.org/wiki/SOCKS#SOCKS5) 代理代替。
+{{ note >}}
+
+
+图 1 表示你将在此任务中实现的目标。
+
+* 你有一台在后面的步骤中被称为本地计算机的客户端计算机,你将在这台计算机上创建与 Kubernetes API 对话的请求。
+* Kubernetes 服务器/API 托管在远程服务器上。
+* 你将使用 SSH 客户端和服务器软件在本地和远程服务器之间创建安全的 SOCKS5 隧道。
+ 客户端和 Kubernetes API 之间的 HTTPS 流量将流经 SOCKS5 隧道,该隧道本身通过 SSH 进行隧道传输。
+
+
+
+
+{{< mermaid >}}
+graph LR;
+
+ subgraph local[本地客户端机器]
+ client([客户端])-- 本地 流量.-> local_ssh[本地 SSH SOCKS5 代理];
+ end
+ ocal_ssh[SSH SOCKS5 代理]-- SSH 隧道 -->sshd
+
+ subgraph remote[远程服务器]
+ sshd[SSH 服务器]-- 本地流量 -->service1;
+ end
+ client([客户端])-. 通过代理传递的 HTTPS 流量 .->service1[Kubernetes API];
+
+ classDef plain fill:#ddd,stroke:#fff,stroke-width:4px,color:#000;
+ classDef k8s fill:#326ce5,stroke:#fff,stroke-width:4px,color:#fff;
+ classDef cluster fill:#fff,stroke:#bbb,stroke-width:2px,color:#326ce5;
+ class ingress,service1,service2,pod1,pod2,pod3,pod4 k8s;
+ class client plain;
+ class cluster cluster;
+{{ mermaid >}}
+
+图 1. SOCKS5 教程组件
+
+
+## 使用 ssh 创建 SOCKS5 代理
+
+
+此命令在你的客户端计算机和远程服务器之间启动一个 SOCKS5 代理。
+SOCKS5 代理允许你连接到集群的 API 服务器。
+
+```shell
+# 运行此命令后,SSH 隧道继续在前台运行
+ssh -D 1080 -q -N username@kubernetes-remote-server.example
+```
+
+
+* `-D 1080`: 在本地端口 1080 上打开一个 SOCKS 代理。
+* `-q`: 静音模式。导致大多数警告和诊断消息被抑制。
+* `-N`: 不执行远程命令。仅用于转发端口。
+* `username@kubernetes-remote-server.example`: 运行 Kubernetes 集群的远程 SSH 服务器。
+
+
+## 客户端配置
+
+
+要探索 Kubernetes API,你首先需要指示你的客户端通过我们之前创建的 SOCKS5 代理发送他们的查询。
+对于命令行工具,设置 `https_proxy` 环境变量并将其传递给你运行的命令。
+
+```shell
+export https_proxy=socks5h://localhost:1080
+```
+
+
+当你设置 `https_proxy` 变量时,`curl` 等工具会通过你配置的代理路由 HTTPS 流量。
+为此,该工具必须支持 SOCKS5 代理。
+
+{{< note >}}
+在 URL https://localhost/api 中,`localhost` 不是指你的本地客户端计算机。
+它指的是远程服务器上称为 “localhost” 的端点。
+`curl` 工具通过 SOCKS 从 HTTPS URL 发送主机名,远程服务器在本地解析(到属于其环回接口的地址)。
+{{ note >}}
+
+```shell
+curl -k -v https://localhost/api
+```
+
+
+要将官方 Kubernetes 客户端 `kubectl` 与代理一起使用,请在 `~/.kube/config` 文件中为相关的
+`cluster` 条目设置 `proxy-url` 元素。 例如:
+
+```yaml
+apiVersion: v1
+clusters:
+- cluster:
+ certificate-authority-data: LRMEMMW2 # 为了便于阅读缩短
+ server: https://localhost # 上图中的“Kubernetes API”
+ proxy-url: socks5://localhost:1080 # 上图中的“SSH SOCKS5代理”(内置DNS解析)
+ name: default
+contexts:
+- context:
+ cluster: default
+ user: default
+ name: default
+current-context: default
+kind: Config
+preferences: {}
+users:
+- name: default
+ user:
+ client-certificate-data: LS0tLS1CR== # 为了便于阅读缩短
+ client-key-data: LS0tLS1CRUdJT= # 为了便于阅读缩短
+```
+
+
+如果隧道能够正常工作,并且你调用 `kubectl` 时使用此集群的上下文,
+则可以通过该代理与你的集群交互。 例如:
+
+```shell
+kubectl get pods
+```
+
+```console
+NAMESPACE NAME READY STATUS RESTARTS AGE
+kube-system coredns-85cb69466-klwq8 1/1 Running 0 5m46s
+```
+
+
+## 清理
+
+
+通过在运行它的终端上按“CTRL+C”来停止 ssh 端口转发进程。
+
+在终端中键入 `unset https_proxy` 以停止通过代理转发 http 流量。
+
+
+## 进一步阅读
+
+
+* [OpenSSH远程登录客户端](https://man.openbsd.org/ssh)
\ No newline at end of file
diff --git a/content/zh/docs/tasks/inject-data-application/define-command-argument-container.md b/content/zh/docs/tasks/inject-data-application/define-command-argument-container.md
index 3372c8ca26..edcc638830 100644
--- a/content/zh/docs/tasks/inject-data-application/define-command-argument-container.md
+++ b/content/zh/docs/tasks/inject-data-application/define-command-argument-container.md
@@ -165,11 +165,10 @@ args: ["-c", "while true; do echo hello; sleep 10;done"]
* 进一步了解[配置 Pod 和容器](/zh/docs/tasks/)
-* 进一步了解[在容器中运行命令](/zh/docs/tasks/debug-application-cluster/get-shell-running-container/)
+* 进一步了解[在容器中运行命令](/zh/docs/tasks/debug/debug-application/get-shell-running-container/)
* 参阅 [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core)
API 资源
-
diff --git a/content/zh/docs/tasks/inject-data-application/define-environment-variable-container.md b/content/zh/docs/tasks/inject-data-application/define-environment-variable-container.md
index 2103b34cf2..631ed2d0b5 100644
--- a/content/zh/docs/tasks/inject-data-application/define-environment-variable-container.md
+++ b/content/zh/docs/tasks/inject-data-application/define-environment-variable-container.md
@@ -135,7 +135,7 @@ container.
-->
## 在配置中使用环境变量
-您在 Pod 的配置中定义的环境变量可以在配置的其他地方使用,
+你在 Pod 的配置中定义的环境变量可以在配置的其他地方使用,
例如可用在为 Pod 的容器设置的命令和参数中。
在下面的示例配置中,环境变量 `GREETING` ,`HONORIFIC` 和 `NAME` 分别设置为 `Warm greetings to` ,
`The Most Honorable` 和 `Kubernetes`。然后这些环境变量在传递给容器 `env-print-demo` 的 CLI 参数中使用。
diff --git a/content/zh/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md b/content/zh/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md
index 69b0b9ee0d..b09b7d0a65 100644
--- a/content/zh/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md
+++ b/content/zh/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information.md
@@ -7,12 +7,15 @@ weight: 40
-此页面描述 Pod 如何使用 DownwardAPIVolumeFile 把自己的信息呈现给 Pod 中运行的容器。
-DownwardAPIVolumeFile 可以呈现 Pod 的字段和容器字段。
+此页面描述 Pod 如何使用
+[`DownwardAPIVolumeFile`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core)
+把自己的信息呈现给 Pod 中运行的容器。
+`DownwardAPIVolumeFile` 可以呈现 Pod 和容器的字段。
## {{% heading "prerequisites" %}}
@@ -26,16 +29,19 @@ DownwardAPIVolumeFile 可以呈现 Pod 的字段和容器字段。
There are two ways to expose Pod and Container fields to a running Container:
* [Environment variables](/docs/tasks/inject-data-application/environment-variable-expose-pod-information/#the-downward-api)
-* Volume Files
+* Volume files
+
+Together, these two ways of exposing Pod and Container fields are called the
+"Downward API".
-->
-## Downward API
+## Downward API {#the-downward-api}
有两种方式可以将 Pod 和 Container 字段呈现给运行中的容器:
* [环境变量](/zh/docs/tasks/inject-data-application/environment-variable-expose-pod-information/#the-downward-api)
* 卷文件
-这两种呈现 Pod 和 Container 字段的方式都称为 *Downward API*。
+这两种呈现 Pod 和 Container 字段的方式都称为 "Downward API"。
-## 存储 Pod 字段
+## 存储 Pod 字段 {#store-pod-fields}
在这个练习中,你将创建一个包含一个容器的 Pod。Pod 的配置文件如下:
@@ -64,7 +70,7 @@ field should be stored in a file named `annotations`.
`/etc/podinfo` 目录。
查看 `downwardAPI` 下面的 `items` 数组。
-每个数组元素都是一个
+每个数组元素都是一个
[DownwardAPIVolumeFile](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core)
对象。
第一个元素指示 Pod 的 `metadata.labels` 字段的值保存在名为 `labels` 的文件中。
@@ -88,7 +94,7 @@ kubectl apply -f https://k8s.io/examples/pods/inject/dapi-volume.yaml
```
验证Pod中的容器运行正常:
@@ -97,7 +103,7 @@ kubectl get pods
```
查看容器的日志:
@@ -106,7 +112,7 @@ kubectl logs kubernetes-downwardapi-volume-example
```
输出显示 `labels` 和 `annotations` 文件的内容:
@@ -120,7 +126,7 @@ builder="john-doe"
```
进入 Pod 中运行的容器,打开一个 Shell:
@@ -152,7 +158,7 @@ zone="us-est-coast"
-同样,查看`annotations`文件:
+同样,查看 `annotations` 文件:
```shell
/# cat /etc/podinfo/annotations
@@ -161,7 +167,7 @@ Similarly, view the `annotations` file:
-查看`/etc/podinfo`目录下的文件:
+查看 `/etc/podinfo` 目录下的文件:
```shell
/# ls -laR /etc/podinfo
@@ -185,7 +191,7 @@ lrwxrwxrwx ... Feb 6 21:47 ..data -> ..2982_06_02_21_47_53.299460680
lrwxrwxrwx ... Feb 6 21:47 annotations -> ..data/annotations
lrwxrwxrwx ... Feb 6 21:47 labels -> ..data/labels
-/etc/podinfo/..2982_06_02_21_47_53.299460680:
+/etc/..2982_06_02_21_47_53.299460680:
total 8
-rw-r--r-- ... Feb 6 21:47 annotations
-rw-r--r-- ... Feb 6 21:47 labels
@@ -194,11 +200,10 @@ total 8
用符号链接可实现元数据的动态原子性刷新;更新将写入一个新的临时目录,
-然后通过使用[rename(2)](http://man7.org/linux/man-pages/man2/rename.2.html)
+然后通过使用 [rename(2)](http://man7.org/linux/man-pages/man2/rename.2.html)
完成 `..data` 符号链接的原子性更新。
退出 Shell:
```shell
/# exit
```
-## 存储容器字段
-
-前面的练习中,你将 Pod 字段保存到 DownwardAPIVolumeFile 中。
+## 存储容器字段 {#store-container-fields}
+
+前面的练习中,你将 Pod 字段保存到
+[`DownwardAPIVolumeFile`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core)
+中。
接下来这个练习,你将存储 Container 字段。这里是包含一个容器的 Pod 的配置文件:
{{< codenew file="pods/inject/dapi-volume-resources.yaml" >}}
-在这个配置文件中,你可以看到 Pod 有一个 `downwardAPI` 类型的卷,并且挂载到容器的
-`/etc/podinfo` 目录。
+在这个配置文件中,你可以看到 Pod 有一个
+[`downwardAPI` 卷](/zh/docs/concepts/storage/volumes/#downwardapi),
+并且挂载到容器的 `/etc/podinfo` 目录。
-查看 `downwardAPI` 下面的 `items` 数组。每个数组元素都是一个 DownwardAPIVolumeFile。
+查看 `downwardAPI` 下面的 `items` 数组。每个数组元素都是一个
+[`DownwardAPIVolumeFile`](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#downwardapivolumefile-v1-core)。
-第一个元素指定名为 `client-container` 的容器中 `limits.cpu` 字段的值应保存在名为
-`cpu_limit` 的文件中。
+第一个元素指定在名为 `client-container` 的容器中,
+以 `1m` 所指定格式的 `limits.cpu` 字段的值应保存在名为 `cpu_limit` 的文件中。
+`divisor` 字段是可选的,默认值为 `1`,表示 CPU 的核心和内存的字节。
创建Pod:
@@ -259,11 +276,11 @@ kubectl apply -f https://k8s.io/examples/pods/inject/dapi-volume-resources.yaml
```
打开一个 Shell,进入 Pod 中运行的容器:
-```
+```shell
kubectl exec -it kubernetes-downwardapi-volume-example-2 -- sh
```
@@ -283,39 +300,50 @@ You can use similar commands to view the `cpu_request`, `mem_limit` and
你可以使用同样的命令查看 `cpu_request`、`mem_limit` 和 `mem_request` 文件.
+
+
-## Downward API 的能力
+## Downward API 的能力 {#capabilities-of-the-downward-api}
下面这些信息可以通过环境变量和 `downwardAPI` 卷提供给容器:
* 能通过 `fieldRef` 获得的:
+
* `metadata.name` - Pod 名称
* `metadata.namespace` - Pod 名字空间
* `metadata.uid` - Pod 的 UID
- * `metadata.labels['']` - Pod 标签 `` 的值 (例如, `metadata.labels['mylabel']`)
- * `metadata.annotations['